summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes8
-rw-r--r--BuildToolsVersion.txt2
-rw-r--r--CMakeLists.txt24
-rw-r--r--Documentation/botr/clr-abi.md16
-rw-r--r--Documentation/building/android.md102
-rw-r--r--Documentation/building/cross-building.md25
-rw-r--r--Documentation/building/testing-with-corefx.md25
-rw-r--r--Documentation/building/unix-test-instructions.md3
-rw-r--r--Documentation/design-docs/finally-optimizations.md487
-rw-r--r--Documentation/design-docs/tailcalls-with-helpers.md460
-rw-r--r--Documentation/project-docs/contributing-workflow.md2
-rw-r--r--Documentation/project-docs/glossary.md7
-rw-r--r--Documentation/workflow/IssuesFeedbackEngagement.md12
-rw-r--r--Documentation/workflow/OfficalAndDailyBuilds.md2
-rw-r--r--DotnetCLIVersion.txt2
-rwxr-xr-xbinclash.log0
-rw-r--r--build-test.cmd88
-rw-r--r--build.cmd12
-rwxr-xr-xbuild.sh88
-rw-r--r--clr.coreclr.props18
-rw-r--r--clr.defines.targets70
-rw-r--r--clr.desktop.props104
-rw-r--r--clr.props19
-rw-r--r--clrdefinitions.cmake11
-rw-r--r--config.json27
-rw-r--r--cross/arm-softfp/sources.list.jessie3
-rw-r--r--cross/armel/sources.list.jessie3
-rwxr-xr-xcross/armel/tizen-build-rootfs.sh44
-rwxr-xr-xcross/armel/tizen-fetch.sh174
-rw-r--r--cross/armel/tizen/tizen.patch33
-rw-r--r--cross/armel/toolchain.cmake (renamed from cross/arm-softfp/toolchain.cmake)17
-rw-r--r--cross/armel/tryrun.cmake (renamed from cross/arm-softfp/tryrun.cmake)0
-rwxr-xr-xcross/build-android-rootfs.sh145
-rwxr-xr-xcross/build-rootfs.sh76
-rw-r--r--crosscomponents.cmake21
-rw-r--r--dependencies.props8
-rw-r--r--dir.props9
-rw-r--r--dirs.proj25
-rw-r--r--functions.cmake4
-rw-r--r--init-tools.cmd2
-rw-r--r--init-tools.log539
-rwxr-xr-xinit-tools.sh9
-rwxr-xr-xnetci.groovy1426
-rw-r--r--perf.groovy15
-rw-r--r--src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.builds8
-rw-r--r--src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.pkgproj8
-rw-r--r--src/.nuget/Microsoft.NETCore.ILAsm/debian/Microsoft.NETCore.ILAsm.pkgproj6
-rw-r--r--src/.nuget/Microsoft.NETCore.ILAsm/tizen/4.0.0/Microsoft.NETCore.ILAsm.pkgproj29
-rw-r--r--src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.builds8
-rw-r--r--src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.pkgproj8
-rw-r--r--src/.nuget/Microsoft.NETCore.ILDAsm/debian/Microsoft.NETCore.ILDAsm.pkgproj6
-rw-r--r--src/.nuget/Microsoft.NETCore.ILDAsm/tizen/4.0.0/Microsoft.NETCore.ILDAsm.pkgproj29
-rw-r--r--src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.builds8
-rw-r--r--src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.pkgproj8
-rw-r--r--src/.nuget/Microsoft.NETCore.Jit/debian/Microsoft.NETCore.Jit.pkgproj6
-rw-r--r--src/.nuget/Microsoft.NETCore.Jit/tizen/4.0.0/Microsoft.NETCore.Jit.pkgproj29
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/Microsoft.NETCore.Native.builds65
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/Microsoft.NETCore.Native.pkgproj50
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/alpine/3.4.3/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/debian/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/fedora/23/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/fedora/24/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/linux/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/opensuse/13.2/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/opensuse/42.1/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/osx/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/rhel/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/ubuntu/14.04/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/ubuntu/16.04/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Native/ubuntu/16.10/Microsoft.NETCore.Native.pkgproj30
-rw-r--r--src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.builds8
-rw-r--r--src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.pkgproj8
-rw-r--r--src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/debian/Microsoft.NETCore.Runtime.CoreCLR.pkgproj10
-rw-r--r--src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/tizen/4.0.0/Microsoft.NETCore.Runtime.CoreCLR.pkgproj57
-rw-r--r--src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.builds8
-rw-r--r--src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.pkgproj8
-rw-r--r--src/.nuget/Microsoft.NETCore.TestHost/debian/Microsoft.NETCore.TestHost.pkgproj6
-rw-r--r--src/.nuget/Microsoft.NETCore.TestHost/tizen/4.0.0/Microsoft.NETCore.TestHost.pkgproj29
-rw-r--r--src/.nuget/descriptions.json9
-rw-r--r--src/.nuget/packages.builds1
-rw-r--r--src/ToolBox/PdbTypeMatch/PdbTypeMatch.nativeproj59
-rw-r--r--src/ToolBox/SOS/Strike/SOS.nativeproj7
-rw-r--r--src/ToolBox/SOS/Strike/SOS.sln76
-rw-r--r--src/ToolBox/SOS/Strike/SOS.vcproj303
-rw-r--r--src/ToolBox/SOS/Strike/dirs.proj20
-rw-r--r--src/ToolBox/SOS/Strike/disasmARM.cpp1
-rw-r--r--src/ToolBox/SOS/Strike/eeheap.cpp4
-rw-r--r--src/ToolBox/SOS/Strike/exts.cpp15
-rw-r--r--src/ToolBox/SOS/Strike/inc/dbgeng.h18
-rw-r--r--src/ToolBox/SOS/Strike/sos.targets166
-rw-r--r--src/ToolBox/SOS/Strike/strike.h4
-rw-r--r--src/ToolBox/SOS/Strike/xplat/dbgeng.h2
-rw-r--r--src/ToolBox/SOS/diasdk/diasdk.nativeproj43
-rw-r--r--src/ToolBox/SOS/dirs.proj32
-rw-r--r--src/ToolBox/SOS/lldbplugin/CMakeLists.txt44
-rw-r--r--src/ToolBox/SOS/lldbplugin/inc/lldbservices.h1
-rw-r--r--src/ToolBox/SOS/lldbplugin/services.cpp10
-rw-r--r--src/ToolBox/dirs.proj102
-rw-r--r--src/binder/binder.targets50
-rw-r--r--src/binder/dirs.proj20
-rw-r--r--src/binder/v3binder/v3binder.nativeproj15
-rw-r--r--src/binder/v3binder_crossgen/v3binder_crossgen.nativeproj15
-rw-r--r--src/classlibnative/Dirs.proj29
-rw-r--r--src/classlibnative/bcltype/BCLType.nativeproj47
-rw-r--r--src/classlibnative/bcltype/CMakeLists.txt1
-rw-r--r--src/classlibnative/bcltype/arraynative.cpp12
-rw-r--r--src/classlibnative/bcltype/console.cpp152
-rw-r--r--src/classlibnative/bcltype/console.h45
-rw-r--r--src/classlibnative/bcltype/number.cpp459
-rw-r--r--src/classlibnative/bcltype/number.h14
-rw-r--r--src/classlibnative/float/Float.nativeproj36
-rw-r--r--src/classlibnative/nls/NLS.nativeproj37
-rw-r--r--src/coreclr/dirs.proj25
-rw-r--r--src/coreclr/hosts/coreconsole/CoreConsole.nativeproj32
-rw-r--r--src/coreclr/hosts/corerun/coreRun.nativeproj45
-rw-r--r--src/coreclr/hosts/dirs.proj19
-rw-r--r--src/coreclr/hosts/unixcoreconsole/CMakeLists.txt9
-rw-r--r--src/coreclr/hosts/unixcorerun/CMakeLists.txt10
-rw-r--r--src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp8
-rw-r--r--src/corefx/System.Globalization.Native/CMakeLists.txt16
-rwxr-xr-xsrc/corefx/format-code.sh8
-rw-r--r--src/debug/daccess/daccess.targets73
-rw-r--r--src/debug/daccess/dacdbiimplstackwalk.cpp16
-rw-r--r--src/debug/daccess/dacfn.cpp2
-rw-r--r--src/debug/daccess/datatargetadapter.cpp6
-rw-r--r--src/debug/daccess/dirs.proj19
-rw-r--r--src/debug/daccess/enummem.cpp4
-rw-r--r--src/debug/dbgutil/dbgutil.props14
-rw-r--r--src/debug/dbgutil/dirs.proj16
-rw-r--r--src/debug/di/DI.props86
-rw-r--r--src/debug/di/dbi.sln20
-rw-r--r--src/debug/di/dbi.vcxproj143
-rw-r--r--src/debug/di/dirs.proj18
-rw-r--r--src/debug/di/rspriv.h4
-rw-r--r--src/debug/di/rsthread.cpp4
-rw-r--r--src/debug/dirs.proj23
-rw-r--r--src/debug/ee/DIRS.proj20
-rw-r--r--src/debug/ee/DebuggerEE.vcproj107
-rw-r--r--src/debug/ee/EE.props60
-rw-r--r--src/debug/ee/amd64/amd64walker.cpp5
-rw-r--r--src/debug/ee/arm64/dbghelpers.S25
-rw-r--r--src/debug/ee/dac/dirs.proj19
-rw-r--r--src/debug/ee/debugger.cpp13
-rw-r--r--src/debug/ee/debugger.inl16
-rw-r--r--src/debug/ee/i386/x86walker.cpp16
-rw-r--r--src/debug/ee/wks/CMakeLists.txt2
-rw-r--r--src/debug/ee/wks/wks.nativeproj43
-rw-r--r--src/debug/ildbsymlib/dirs.proj19
-rw-r--r--src/debug/ildbsymlib/ildbsymlib.props29
-rw-r--r--src/debug/ildbsymlib/ildbsymlib.vcproj213
-rw-r--r--src/debug/inc/dbgipcevents.h4
-rw-r--r--src/debug/inc/dbgtargetcontext.h18
-rw-r--r--src/debug/shared/i386/primitives.cpp14
-rw-r--r--src/debug/shim/debugshim.props19
-rw-r--r--src/debug/shim/dirs.proj16
-rw-r--r--src/dirs.proj96
-rw-r--r--src/dlls/clretwrc/clretwrc.nativeproj27
-rw-r--r--src/dlls/dbgshim/dbgshim.cpp63
-rw-r--r--src/dlls/dbgshim/dbgshim.targets94
-rw-r--r--src/dlls/dbgshim/dirs.proj19
-rw-r--r--src/dlls/dirs.proj50
-rw-r--r--src/dlls/mscordac/dirs.proj21
-rw-r--r--src/dlls/mscordac/mscordac.targets142
-rw-r--r--src/dlls/mscordac/mscordac.vrg10
-rw-r--r--src/dlls/mscordac/mscordac_unixexports.src4
-rw-r--r--src/dlls/mscordbi/DIRS.proj23
-rw-r--r--src/dlls/mscordbi/mscordbi.settings.targets144
-rw-r--r--src/dlls/mscordbi/mscordbi.vrg78
-rw-r--r--src/dlls/mscordbi/mscordbiv.vrg4
-rw-r--r--src/dlls/mscoree/CMakeLists.txt1
-rw-r--r--src/dlls/mscoree/coreclr/CMakeLists.txt6
-rw-r--r--src/dlls/mscoree/coreclr/coreclr.nativeproj59
-rw-r--r--src/dlls/mscoree/delayload.cpp455
-rw-r--r--src/dlls/mscoree/dirs.proj24
-rw-r--r--src/dlls/mscoree/dw20.msibin599552 -> 0 bytes
-rw-r--r--src/dlls/mscoree/dw20_amd64.msibin1956352 -> 0 bytes
-rw-r--r--src/dlls/mscoree/mscoree.cpp413
-rw-r--r--src/dlls/mscoree/mscoree.settings.targets268
-rw-r--r--src/dlls/mscoree/mscoree.targets198
-rw-r--r--src/dlls/mscoree/mscoree.vrg177
-rw-r--r--src/dlls/mscoree/mscoree20_shared_neutral.vrg286
-rw-r--r--src/dlls/mscoree/mscoreeBBT.bat83
-rw-r--r--src/dlls/mscoree/mscoreeDoNotEverRemove.vrg4
-rw-r--r--src/dlls/mscoree/mscoreeVersioned.vrg22
-rw-r--r--src/dlls/mscoree/shim.reg9
-rw-r--r--src/dlls/mscoree/type_exclusion_list.txt142
-rw-r--r--src/dlls/mscorpe/CMakeLists.txt4
-rw-r--r--src/dlls/mscorpe/Native.rc8
-rw-r--r--src/dlls/mscorpe/ceefilegenwritertokens.cpp3
-rw-r--r--src/dlls/mscorpe/dirs.proj15
-rw-r--r--src/dlls/mscorpe/mscorpe/mscorpe.def11
-rw-r--r--src/dlls/mscorpe/mscorpe/mscorpe.nativeproj46
-rw-r--r--src/dlls/mscorpe/mscorpe/wrapper.cpp149
-rw-r--r--src/dlls/mscorpe/mscorpehost/mscorpehost.def12
-rw-r--r--src/dlls/mscorpe/mscorpehost/mscorpehost.nativeproj68
-rw-r--r--src/dlls/mscorpe/utilcodeinit.cpp11
-rw-r--r--src/dlls/mscorrc/dirs.proj18
-rw-r--r--src/dlls/mscorrc/full/mscorrc.nativeproj25
-rw-r--r--src/dlls/mscorrc/mscorrc.rc3
-rw-r--r--src/dlls/mscorrc/mscorrc.rc252
-rw-r--r--src/dlls/mscorrc/resource.h3
-rw-r--r--src/dlls/mscorrc/small/mscorrc.nativeproj22
-rw-r--r--src/gc/CMakeLists.txt10
-rw-r--r--src/gc/env/gcenv.base.h21
-rw-r--r--src/gc/env/gcenv.ee.h2
-rw-r--r--src/gc/gc.cpp168
-rw-r--r--src/gc/gc.h8
-rw-r--r--src/gc/gccommon.cpp3
-rw-r--r--src/gc/gcenv.ee.standalone.inl88
-rw-r--r--src/gc/gcenv.unix.cpp308
-rw-r--r--src/gc/gcimpl.h1
-rw-r--r--src/gc/gcinterface.ee.h5
-rw-r--r--src/gc/gcinterface.h23
-rw-r--r--src/gc/gcpriv.h4
-rw-r--r--src/gc/gcsvr.cpp1
-rw-r--r--src/gc/gcwks.cpp1
-rw-r--r--src/gc/sample/CMakeLists.txt2
-rw-r--r--src/gc/sample/GCSample.cpp13
-rw-r--r--src/gc/sample/GCSample.vcxproj2
-rw-r--r--src/gc/sample/gcenv.ee.cpp9
-rw-r--r--src/gc/softwarewritewatch.cpp11
-rw-r--r--src/gc/softwarewritewatch.h40
-rw-r--r--src/gc/unix/CMakeLists.txt10
-rw-r--r--src/gc/unix/config.h.in14
-rw-r--r--src/gc/unix/configure.cmake40
-rw-r--r--src/gc/unix/gcenv.unix.cpp627
-rw-r--r--src/gc/windows/gcenv.windows.cpp (renamed from src/gc/gcenv.windows.cpp)0
-rw-r--r--src/gcdump/gcdump.settings.targets24
-rw-r--r--src/gcinfo/DIRS.proj19
-rw-r--r--src/gcinfo/crossgen/gcinfo_crossgen.nativeproj9
-rw-r--r--src/gcinfo/gcinfo.settings.targets21
-rw-r--r--src/gcinfo/lib/GCInfo.nativeproj15
-rw-r--r--src/ilasm/MscorpeSxS.cpp23
-rw-r--r--src/ilasm/MscorpeSxS.h20
-rw-r--r--src/ilasm/assem.cpp22
-rw-r--r--src/ilasm/assembler.h2
-rw-r--r--src/ildasm/Litening.icobin766 -> 0 bytes
-rw-r--r--src/ildasm/class.bmpbin3126 -> 0 bytes
-rw-r--r--src/ildasm/classa.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classag.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classe.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classeg.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classi.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classig.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classv.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classvg.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/dasm.cpp227
-rw-r--r--src/ildasm/dasm.rc245
-rw-r--r--src/ildasm/dasm_pr.cpp275
-rw-r--r--src/ildasm/dasmgui.h15
-rw-r--r--src/ildasm/dasmhlp.hhc32
-rw-r--r--src/ildasm/dirs.proj15
-rw-r--r--src/ildasm/dis.cpp35
-rw-r--r--src/ildasm/dis.h8
-rw-r--r--src/ildasm/dman.cpp22
-rw-r--r--src/ildasm/dres.cpp1
-rw-r--r--src/ildasm/event.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/exe/CMakeLists.txt4
-rw-r--r--src/ildasm/exe/ildasm.nativeproj72
-rw-r--r--src/ildasm/field.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/gui.cpp4013
-rw-r--r--src/ildasm/gui.h155
-rw-r--r--src/ildasm/html/clicking.htm35
-rw-r--r--src/ildasm/html/keyboard.htm166
-rw-r--r--src/ildasm/html/menu_options.htm324
-rw-r--r--src/ildasm/html/tree_view_icons.htm102
-rw-r--r--src/ildasm/html/tree_view_icons_files/class.gifbin960 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/enum.gifbin987 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/event.gifbin963 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/field.gifbin965 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/interface.gifbin981 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIFbin843 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpgbin723 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/manifest_classinfo.pngbin926 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/method.gifbin963 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/namespace.gifbin969 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/property.gifbin961 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/static_field.gifbin978 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/static_method.gifbin977 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/value_class.gifbin960 -> 0 bytes
-rw-r--r--src/ildasm/ildasm.chmbin18371 -> 0 bytes
-rw-r--r--src/ildasm/ildasm.hhp36
-rw-r--r--src/ildasm/map.h8
-rw-r--r--src/ildasm/method.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/methodg.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/namespace.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/prop.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/rcdll/CMakeLists.txt2
-rw-r--r--src/ildasm/rcdll/ildasmrc.nativeproj19
-rw-r--r--src/ildasm/redarrow.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/resource.h57
-rw-r--r--src/ildasm/staticfield.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/staticmethod.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/staticmethodg.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/windasm.cpp133
-rw-r--r--src/inc/1031/CORPerfMonSymbols.ini576
-rw-r--r--src/inc/1031/_DataPerfCounters.inibin4664 -> 0 bytes
-rw-r--r--src/inc/1031/_NetworkingPerfCounters.inibin5246 -> 0 bytes
-rw-r--r--src/inc/1031/aspnet_perf.ini415
-rw-r--r--src/inc/1031/aspnet_perf2.ini416
-rw-r--r--src/inc/1041/CORPerfMonSymbols.ini577
-rw-r--r--src/inc/1041/_DataPerfCounters.inibin4364 -> 0 bytes
-rw-r--r--src/inc/1041/_NetworkingPerfCounters.inibin4204 -> 0 bytes
-rw-r--r--src/inc/1041/aspnet_perf.ini414
-rw-r--r--src/inc/1041/aspnet_perf2.ini411
-rw-r--r--src/inc/bitposition.h4
-rw-r--r--src/inc/ceegen.h3
-rw-r--r--src/inc/clrconfigvalues.h8
-rw-r--r--src/inc/clrnt.h44
-rw-r--r--src/inc/corcompile.h21
-rw-r--r--src/inc/corguids.nativeproj438
-rw-r--r--src/inc/corguids.targets53
-rw-r--r--src/inc/corinfo.h2
-rw-r--r--src/inc/crosscomp.h4
-rw-r--r--src/inc/daccess.h2
-rw-r--r--src/inc/eetwain.h74
-rw-r--r--src/inc/gcinfodecoder.h2
-rw-r--r--src/inc/iceefilegen.h17
-rw-r--r--src/inc/mscorpesxswrapper.h125
-rw-r--r--src/inc/palclr.h2
-rw-r--r--src/inc/readytorun.h2
-rw-r--r--src/inc/regdisp.h409
-rw-r--r--src/inc/sortversioning.h33
-rw-r--r--src/inc/stackframe.h7
-rw-r--r--src/inc/switches.h2
-rw-r--r--src/inc/win64unwind.h9
-rw-r--r--src/ipcman/dirs.proj19
-rw-r--r--src/ipcman/ipcman-staticcrt/dirs.proj17
-rw-r--r--src/ipcman/ipcman-staticcrt/ipcman-staticcrt.props11
-rw-r--r--src/ipcman/ipcmanager.props28
-rw-r--r--src/jit/CMakeLists.txt9
-rw-r--r--src/jit/DIRS.proj4
-rw-r--r--src/jit/block.cpp20
-rw-r--r--src/jit/block.h161
-rwxr-xr-xsrc/jit/codegen.h2
-rw-r--r--src/jit/codegenarm.cpp1185
-rw-r--r--src/jit/codegenarm64.cpp27
-rw-r--r--src/jit/codegencommon.cpp151
-rw-r--r--src/jit/codegenlegacy.cpp215
-rw-r--r--src/jit/codegenlinear.cpp32
-rw-r--r--src/jit/codegenlinear.h5
-rw-r--r--src/jit/codegenxarch.cpp483
-rw-r--r--src/jit/compiler.cpp83
-rw-r--r--src/jit/compiler.h322
-rw-r--r--src/jit/compiler.hpp68
-rw-r--r--src/jit/compmemkind.h2
-rw-r--r--src/jit/compphases.h6
-rw-r--r--src/jit/decomposelongs.cpp165
-rw-r--r--src/jit/decomposelongs.h2
-rw-r--r--src/jit/ee_il_dll.cpp3
-rw-r--r--src/jit/emit.cpp2
-rw-r--r--src/jit/emit.h21
-rw-r--r--src/jit/emitarm.cpp57
-rw-r--r--src/jit/emitarm64.cpp1
-rw-r--r--src/jit/emitxarch.cpp79
-rw-r--r--src/jit/emitxarch.h40
-rw-r--r--src/jit/flowgraph.cpp1797
-rw-r--r--src/jit/gcencode.cpp11
-rw-r--r--src/jit/gcinfo.cpp6
-rw-r--r--src/jit/gentree.cpp315
-rw-r--r--src/jit/gentree.h188
-rw-r--r--src/jit/gschecks.cpp3
-rw-r--r--src/jit/gtlist.h13
-rw-r--r--src/jit/importer.cpp233
-rw-r--r--src/jit/inline.def2
-rw-r--r--src/jit/instr.cpp12
-rw-r--r--src/jit/instrsxarch.h3
-rw-r--r--src/jit/jit.h12
-rw-r--r--src/jit/jit.settings.targets5
-rw-r--r--src/jit/jitconfigvalues.h25
-rw-r--r--src/jit/jiteh.cpp7
-rw-r--r--src/jit/jiteh.h4
-rw-r--r--src/jit/lclvars.cpp136
-rw-r--r--src/jit/lir.cpp10
-rw-r--r--src/jit/liveness.cpp699
-rw-r--r--src/jit/lower.cpp724
-rw-r--r--src/jit/lower.h23
-rw-r--r--src/jit/lowerarm.cpp148
-rw-r--r--src/jit/lowerarm64.cpp1690
-rw-r--r--src/jit/lowerxarch.cpp3677
-rw-r--r--src/jit/lsra.cpp34
-rw-r--r--src/jit/lsraarm.cpp1073
-rw-r--r--src/jit/lsraarm64.cpp1766
-rw-r--r--src/jit/lsraxarch.cpp3684
-rw-r--r--src/jit/morph.cpp567
-rw-r--r--src/jit/optcse.cpp20
-rw-r--r--src/jit/optimizer.cpp134
-rw-r--r--src/jit/rationalize.cpp16
-rw-r--r--src/jit/regalloc.cpp4
-rw-r--r--src/jit/registerfp.cpp6
-rw-r--r--src/jit/simd.cpp257
-rw-r--r--src/jit/simdcodegenxarch.cpp161
-rw-r--r--src/jit/simdintrinsiclist.h5
-rw-r--r--src/jit/sm.cpp5
-rw-r--r--src/jit/sm.h3
-rw-r--r--src/jit/ssabuilder.cpp410
-rw-r--r--src/jit/ssabuilder.h4
-rw-r--r--src/jit/ssarenamestate.cpp16
-rw-r--r--src/jit/ssarenamestate.h94
-rw-r--r--src/jit/stackfp.cpp10
-rw-r--r--src/jit/target.h20
-rw-r--r--src/jit/unwind.cpp32
-rw-r--r--src/jit/unwindx86.cpp249
-rw-r--r--src/jit/valuenum.cpp804
-rw-r--r--src/jit/valuenum.h4
-rw-r--r--src/jit/valuenumfuncs.h10
-rw-r--r--src/jit/valuenumtype.h4
-rw-r--r--src/md/MD.props158
-rw-r--r--src/md/ceefilegen/ceefgen.nativeproj42
-rw-r--r--src/md/compiler/Compiler.settings.targets68
-rw-r--r--src/md/compiler/crossgen/MDCompiler_crossgen.nativeproj15
-rw-r--r--src/md/compiler/dac/dirs.proj19
-rw-r--r--src/md/compiler/dbi/MDCompiler-dbi.props9
-rw-r--r--src/md/compiler/dbi/dirs.proj19
-rw-r--r--src/md/compiler/dirs.proj27
-rw-r--r--src/md/compiler/regmeta.cpp5
-rw-r--r--src/md/compiler/wks/MDCompiler_wks.nativeproj19
-rw-r--r--src/md/datasource/DataSource.settings.targets42
-rw-r--r--src/md/datasource/dbi/DataSource-dbi.props9
-rw-r--r--src/md/datasource/dbi/dirs.proj19
-rw-r--r--src/md/datasource/dirs.proj19
-rw-r--r--src/md/dirs.proj25
-rw-r--r--src/md/enc/crossgen/MDRuntimeRW_crossgen.nativeproj15
-rw-r--r--src/md/enc/dac/dirs.proj19
-rw-r--r--src/md/enc/dbi/MDRuntimeRW-dbi.props10
-rw-r--r--src/md/enc/dbi/dirs.proj19
-rw-r--r--src/md/enc/dirs.proj23
-rw-r--r--src/md/enc/enc.settings.targets45
-rw-r--r--src/md/enc/wks/MDRuntimeRW.nativeproj19
-rw-r--r--src/md/hotdata/HotData.settings.targets28
-rw-r--r--src/md/hotdata/crossgen/MDHotData_crossgen.nativeproj18
-rw-r--r--src/md/hotdata/dac/dirs.proj19
-rw-r--r--src/md/hotdata/dirs.proj21
-rw-r--r--src/md/hotdata/full-staticcrt/MDHotData-staticcrt.props11
-rw-r--r--src/md/hotdata/full-staticcrt/dirs.proj19
-rw-r--r--src/md/hotdata/full/MDHotData.nativeproj19
-rw-r--r--src/md/runtime/Runtime.settings.targets43
-rw-r--r--src/md/runtime/crossgen/MDRuntime_crossgen.nativeproj15
-rw-r--r--src/md/runtime/dac/dirs.proj19
-rw-r--r--src/md/runtime/dbi/MDRuntime-dbi.props10
-rw-r--r--src/md/runtime/dbi/dirs.proj19
-rw-r--r--src/md/runtime/dirs.proj22
-rw-r--r--src/md/runtime/wks/MDRuntime.nativeproj19
-rw-r--r--src/md/winmd/WinMD.settings.targets49
-rw-r--r--src/md/winmd/crossgen/MDWinMD_crossgen.nativeproj14
-rw-r--r--src/md/winmd/dac/dirs.proj19
-rw-r--r--src/md/winmd/dbi/MDWinMD-dbi.props9
-rw-r--r--src/md/winmd/dbi/MDWinMD_dbi.nativeproj17
-rw-r--r--src/md/winmd/dbi/dirs.proj19
-rw-r--r--src/md/winmd/dirs.proj21
-rw-r--r--src/md/winmd/wks/MDWinMD_wks.nativeproj19
-rw-r--r--src/mscorlib/Common/PinnableBufferCache.cs25
-rw-r--r--src/mscorlib/Common/Preprocessed/AssemblyRefs.g.cs1049
-rw-r--r--src/mscorlib/System.Private.CoreLib.csproj1107
-rw-r--r--src/mscorlib/System.Private.CoreLib.sln5
-rw-r--r--src/mscorlib/Tools/BclRewriter/BclRewriter.targets35
-rw-r--r--src/mscorlib/Tools/PostProcessingTools.targets28
-rw-r--r--src/mscorlib/corefx/Interop/Unix/Interop.Libraries.cs6
-rw-r--r--src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Casing.cs3
-rw-r--r--src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Collation.cs13
-rw-r--r--src/mscorlib/corefx/Interop/Windows/Interop.Errors.cs71
-rw-r--r--src/mscorlib/corefx/Interop/Windows/Interop.Libraries.cs67
-rw-r--r--src/mscorlib/corefx/Interop/Windows/NtDll/Interop.ZeroMemory.cs2
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.CancelIoEx.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.CancelIoEx.cs)6
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.CloseHandle.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.CloseHandle.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.CreateFile.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.CreateFile.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FileOperations.cs (renamed from src/mscorlib/src/System/Security/IEvidenceFactory.cs)7
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FileTypes.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.FileTypes.cs)2
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FlushFileBuffers.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.FlushFileBuffers.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FormatMessage.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.FormatMessage.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetFileInformationByHandleEx.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetFileInformationByHandleEx.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetFileType_SafeHandle.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetFileType_SafeHandle.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetFullPathNameW.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetFullPathNameW.cs)6
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetLongPathNameW.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetLongPathNameW.cs)6
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetTempFileNameW.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetTempFileNameW.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetTempPathW.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetTempPathW.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.LockFile.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.LockFile.cs)6
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.ReadFile_SafeHandle_IntPtr.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.ReadFile_SafeHandle_IntPtr.cs)6
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.ReadFile_SafeHandle_NativeOverlapped.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.ReadFile_SafeHandle_NativeOverlapped.cs)6
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SECURITY_ATTRIBUTES.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.SECURITY_ATTRIBUTES.cs)2
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SafeCreateFile.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.SafeCreateFile.cs)8
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SecurityOptions.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.SecurityOptions.cs)2
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetEndOfFile.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetEndOfFile.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetErrorMode.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetErrorMode.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetFileInformationByHandle.cs39
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetFilePointerEx.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetFilePointerEx.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.UnsafeCreateFile.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.UnsafeCreateFile.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.WideCharToMultiByte.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.WideCharToMultiByte.cs)4
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.WriteFile_SafeHandle_IntPtr.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.WriteFile_SafeHandle_IntPtr.cs)6
-rw-r--r--src/mscorlib/corefx/Interop/Windows/kernel32/Interop.WriteFile_SafeHandle_NativeOverlapped.cs (renamed from src/mscorlib/corefx/Interop/Windows/mincore/Interop.WriteFile_SafeHandle_NativeOverlapped.cs)6
-rw-r--r--src/mscorlib/corefx/Interop/Windows/mincore/Interop.Errors.cs74
-rw-r--r--src/mscorlib/corefx/Interop/Windows/mincore/Interop.FileOperations.cs35
-rw-r--r--src/mscorlib/corefx/Interop/Windows/mincore/Interop.Idna.cs37
-rw-r--r--src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetFileInformationByHandle.cs72
-rw-r--r--src/mscorlib/corefx/Interop/Windows/mincore/Interop.ThreadPoolIO.cs27
-rw-r--r--src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Unix.cs3
-rw-r--r--src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs2
-rw-r--r--src/mscorlib/corefx/SR.cs240
-rw-r--r--src/mscorlib/corefx/System/Buffers/ArrayPool.cs25
-rw-r--r--src/mscorlib/corefx/System/Buffers/ConfigurableArrayPool.cs2
-rw-r--r--src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.Unix.cs28
-rw-r--r--src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.Windows.cs20
-rw-r--r--src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.cs46
-rw-r--r--src/mscorlib/corefx/System/Globalization/Calendar.cs9
-rw-r--r--src/mscorlib/corefx/System/Globalization/CalendarData.Unix.cs7
-rw-r--r--src/mscorlib/corefx/System/Globalization/CalendarWeekRule.cs1
-rw-r--r--src/mscorlib/corefx/System/Globalization/CalendricalCalculationsHelper.cs8
-rw-r--r--src/mscorlib/corefx/System/Globalization/CharUnicodeInfo.cs32
-rw-r--r--src/mscorlib/corefx/System/Globalization/ChineseLunisolarCalendar.cs10
-rw-r--r--src/mscorlib/corefx/System/Globalization/CompareInfo.Windows.cs4
-rw-r--r--src/mscorlib/corefx/System/Globalization/CultureData.Unix.cs7
-rw-r--r--src/mscorlib/corefx/System/Globalization/CultureData.Windows.cs3
-rw-r--r--src/mscorlib/corefx/System/Globalization/CultureNotFoundException.cs11
-rw-r--r--src/mscorlib/corefx/System/Globalization/CultureTypes.cs4
-rw-r--r--src/mscorlib/corefx/System/Globalization/DateTimeFormatInfo.cs8
-rw-r--r--src/mscorlib/corefx/System/Globalization/DigitShapes.cs1
-rw-r--r--src/mscorlib/corefx/System/Globalization/EastAsianLunisolarCalendar.cs1
-rw-r--r--src/mscorlib/corefx/System/Globalization/GregorianCalendar.cs5
-rw-r--r--src/mscorlib/corefx/System/Globalization/HebrewCalendar.cs1
-rw-r--r--src/mscorlib/corefx/System/Globalization/HijriCalendar.Win32.cs36
-rw-r--r--src/mscorlib/corefx/System/Globalization/HijriCalendar.cs5
-rw-r--r--src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs2
-rw-r--r--src/mscorlib/corefx/System/Globalization/JapaneseCalendar.Win32.cs22
-rw-r--r--src/mscorlib/corefx/System/Globalization/JapaneseCalendar.cs6
-rw-r--r--src/mscorlib/corefx/System/Globalization/JapaneseLunisolarCalendar.cs6
-rw-r--r--src/mscorlib/corefx/System/Globalization/JulianCalendar.cs5
-rw-r--r--src/mscorlib/corefx/System/Globalization/KoreanCalendar.cs6
-rw-r--r--src/mscorlib/corefx/System/Globalization/KoreanLunisolarCalendar.cs6
-rw-r--r--src/mscorlib/corefx/System/Globalization/NumberFormatInfo.cs54
-rw-r--r--src/mscorlib/corefx/System/Globalization/RegionInfo.cs2
-rw-r--r--src/mscorlib/corefx/System/Globalization/SortKey.cs1
-rw-r--r--src/mscorlib/corefx/System/Globalization/SortVersion.cs50
-rw-r--r--src/mscorlib/corefx/System/Globalization/StringInfo.cs3
-rw-r--r--src/mscorlib/corefx/System/Globalization/TaiwanCalendar.cs6
-rw-r--r--src/mscorlib/corefx/System/Globalization/TaiwanLunisolarCalendar.cs6
-rw-r--r--src/mscorlib/corefx/System/Globalization/TextElementEnumerator.cs1
-rw-r--r--src/mscorlib/corefx/System/Globalization/TextInfo.Unix.cs2
-rw-r--r--src/mscorlib/corefx/System/Globalization/TextInfo.cs3
-rw-r--r--src/mscorlib/corefx/System/Globalization/ThaiBuddhistCalendar.cs6
-rw-r--r--src/mscorlib/corefx/System/Globalization/UmAlQuraCalendar.cs2
-rw-r--r--src/mscorlib/corefx/System/IO/FileStream.NetStandard17.cs76
-rw-r--r--src/mscorlib/corefx/System/IO/FileStream.Win32.cs76
-rw-r--r--src/mscorlib/corefx/System/IO/FileStream.cs94
-rw-r--r--src/mscorlib/corefx/System/IO/FileStreamCompletionSource.Win32.cs6
-rw-r--r--src/mscorlib/corefx/System/IO/Path.Unix.cs62
-rw-r--r--src/mscorlib/corefx/System/IO/Path.Windows.cs32
-rw-r--r--src/mscorlib/corefx/System/IO/Path.cs33
-rw-r--r--src/mscorlib/corefx/System/IO/PathHelper.Windows.cs245
-rw-r--r--src/mscorlib/corefx/System/IO/PathInternal.CaseSensitivity.cs75
-rw-r--r--src/mscorlib/corefx/System/IO/PathInternal.Unix.cs42
-rw-r--r--src/mscorlib/corefx/System/IO/PathInternal.Windows.StringBuffer.cs18
-rw-r--r--src/mscorlib/corefx/System/IO/PathInternal.Windows.cs124
-rw-r--r--src/mscorlib/corefx/System/IO/PathInternal.cs58
-rw-r--r--src/mscorlib/corefx/System/IO/Win32Marshal.cs45
-rw-r--r--src/mscorlib/corefx/System/Runtime/InteropServices/NativeBuffer.cs157
-rw-r--r--src/mscorlib/corefx/System/Runtime/InteropServices/SafeHeapHandle.cs109
-rw-r--r--src/mscorlib/corefx/System/Runtime/InteropServices/SafeHeapHandleCache.cs97
-rw-r--r--src/mscorlib/corefx/System/Runtime/InteropServices/StringBuffer.cs199
-rw-r--r--src/mscorlib/corefx/System/Security/SecureString.Windows.cs8
-rw-r--r--src/mscorlib/facade/mscorlib.csproj5
-rw-r--r--src/mscorlib/facade/project.json1
-rw-r--r--src/mscorlib/model.xml12486
-rw-r--r--src/mscorlib/mscorlib.shared.sources.props1317
-rw-r--r--src/mscorlib/ref/mscorlib.cs375
-rw-r--r--src/mscorlib/src/CleanupToDoList.cs27
-rw-r--r--src/mscorlib/src/Internal/Runtime/Augments/RuntimeThread.cs7
-rw-r--r--src/mscorlib/src/Microsoft/Win32/Registry.cs21
-rw-r--r--src/mscorlib/src/Microsoft/Win32/RegistryKey.cs758
-rw-r--r--src/mscorlib/src/Microsoft/Win32/RegistryOptions.cs25
-rw-r--r--src/mscorlib/src/Microsoft/Win32/RegistryValueKind.cs4
-rw-r--r--src/mscorlib/src/Microsoft/Win32/RegistryView.cs2
-rw-r--r--src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeFileMappingHandle.cs39
-rw-r--r--src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeFindHandle.cs1
-rw-r--r--src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeLibraryHandle.cs1
-rw-r--r--src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeLocalAllocHandle.cs29
-rw-r--r--src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs4
-rw-r--r--src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeViewOfFileHandle.cs46
-rw-r--r--src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeWaitHandle.cs2
-rw-r--r--src/mscorlib/src/Microsoft/Win32/SafeHandles/Win32SafeHandles.cs5
-rw-r--r--src/mscorlib/src/Microsoft/Win32/UnsafeNativeMethods.cs15
-rw-r--r--src/mscorlib/src/Microsoft/Win32/Win32Native.cs1389
-rw-r--r--src/mscorlib/src/System.Private.CoreLib.txt67
-rw-r--r--src/mscorlib/src/System/AccessViolationException.cs39
-rw-r--r--src/mscorlib/src/System/Action.cs6
-rw-r--r--src/mscorlib/src/System/Activator.cs192
-rw-r--r--src/mscorlib/src/System/AppContext/AppContext.cs41
-rw-r--r--src/mscorlib/src/System/AppDomain.cs1307
-rw-r--r--src/mscorlib/src/System/AppDomainAttributes.cs21
-rw-r--r--src/mscorlib/src/System/AppDomainManager.cs3
-rw-r--r--src/mscorlib/src/System/AppDomainSetup.cs383
-rw-r--r--src/mscorlib/src/System/AppDomainUnloadedException.cs13
-rw-r--r--src/mscorlib/src/System/ApplicationException.cs40
-rw-r--r--src/mscorlib/src/System/ApplicationId.cs141
-rw-r--r--src/mscorlib/src/System/ArgIterator.cs69
-rw-r--r--src/mscorlib/src/System/ArgumentException.cs105
-rw-r--r--src/mscorlib/src/System/ArgumentNullException.cs47
-rw-r--r--src/mscorlib/src/System/ArgumentOutOfRangeException.cs2
-rw-r--r--src/mscorlib/src/System/ArithmeticException.cs39
-rw-r--r--src/mscorlib/src/System/Array.cs93
-rw-r--r--src/mscorlib/src/System/ArraySegment.cs14
-rw-r--r--src/mscorlib/src/System/ArrayTypeMismatchException.cs41
-rw-r--r--src/mscorlib/src/System/AsyncCallback.cs6
-rw-r--r--src/mscorlib/src/System/Attribute.cs6
-rw-r--r--src/mscorlib/src/System/AttributeTargets.cs48
-rw-r--r--src/mscorlib/src/System/AttributeUsageAttribute.cs1
-rw-r--r--src/mscorlib/src/System/BCLDebug.cs67
-rw-r--r--src/mscorlib/src/System/BadImageFormatException.cs2
-rw-r--r--src/mscorlib/src/System/BitConverter.cs6
-rw-r--r--src/mscorlib/src/System/Boolean.cs1
-rw-r--r--src/mscorlib/src/System/Buffer.cs7
-rw-r--r--src/mscorlib/src/System/ByReference.cs12
-rw-r--r--src/mscorlib/src/System/Byte.cs1
-rw-r--r--src/mscorlib/src/System/CLRConfig.cs20
-rw-r--r--src/mscorlib/src/System/CLSCompliantAttribute.cs22
-rw-r--r--src/mscorlib/src/System/CannotUnloadAppDomainException.cs49
-rw-r--r--src/mscorlib/src/System/CfgParser.cs564
-rw-r--r--src/mscorlib/src/System/Char.cs1
-rw-r--r--src/mscorlib/src/System/CharEnumerator.cs84
-rw-r--r--src/mscorlib/src/System/Collections/ArrayList.cs2085
-rw-r--r--src/mscorlib/src/System/Collections/CollectionBase.cs20
-rw-r--r--src/mscorlib/src/System/Collections/Comparer.cs4
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/ConcurrentDictionary.cs375
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/ConcurrentQueue.cs1486
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/ConcurrentStack.cs323
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/IProducerConsumerCollection.cs49
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/OrderablePartitioner.cs280
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/Partitioner.cs101
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/PartitionerStatic.cs1715
-rw-r--r--src/mscorlib/src/System/Collections/DictionaryEntry.cs4
-rw-r--r--src/mscorlib/src/System/Collections/Generic/Comparer.cs3
-rw-r--r--src/mscorlib/src/System/Collections/Generic/DebugView.cs1
-rw-r--r--src/mscorlib/src/System/Collections/Generic/Dictionary.cs2
-rw-r--r--src/mscorlib/src/System/Collections/Generic/EqualityComparer.cs153
-rw-r--r--src/mscorlib/src/System/Collections/Generic/KeyNotFoundException.cs1
-rw-r--r--src/mscorlib/src/System/Collections/Generic/KeyValuePair.cs3
-rw-r--r--src/mscorlib/src/System/Collections/Generic/List.cs12
-rw-r--r--src/mscorlib/src/System/Collections/Hashtable.cs323
-rw-r--r--src/mscorlib/src/System/Collections/ICollection.cs1
-rw-r--r--src/mscorlib/src/System/Collections/IComparer.cs1
-rw-r--r--src/mscorlib/src/System/Collections/IDictionary.cs1
-rw-r--r--src/mscorlib/src/System/Collections/IDictionaryEnumerator.cs1
-rw-r--r--src/mscorlib/src/System/Collections/IEnumerable.cs1
-rw-r--r--src/mscorlib/src/System/Collections/IEnumerator.cs1
-rw-r--r--src/mscorlib/src/System/Collections/IEqualityComparer.cs1
-rw-r--r--src/mscorlib/src/System/Collections/IHashCodeProvider.cs3
-rw-r--r--src/mscorlib/src/System/Collections/IList.cs1
-rw-r--r--src/mscorlib/src/System/Collections/KeyValuePairs.cs40
-rw-r--r--src/mscorlib/src/System/Collections/ListDictionaryInternal.cs14
-rw-r--r--src/mscorlib/src/System/Collections/ObjectModel/Collection.cs1
-rw-r--r--src/mscorlib/src/System/Collections/ObjectModel/KeyedCollection.cs1
-rw-r--r--src/mscorlib/src/System/Collections/ObjectModel/ReadOnlyCollection.cs1
-rw-r--r--src/mscorlib/src/System/Collections/SortedList.cs1008
-rw-r--r--src/mscorlib/src/System/Collections/Stack.cs379
-rw-r--r--src/mscorlib/src/System/CompatibilitySwitches.cs31
-rw-r--r--src/mscorlib/src/System/ComponentModel/EditorBrowsableAttribute.cs48
-rw-r--r--src/mscorlib/src/System/Configuration/Assemblies/AssemblyHash.cs74
-rw-r--r--src/mscorlib/src/System/Configuration/Assemblies/AssemblyHashAlgorithm.cs4
-rw-r--r--src/mscorlib/src/System/Configuration/Assemblies/AssemblyVersionCompatibility.cs1
-rw-r--r--src/mscorlib/src/System/ContextMarshalException.cs45
-rw-r--r--src/mscorlib/src/System/Convert.cs9
-rw-r--r--src/mscorlib/src/System/DBNull.cs2
-rw-r--r--src/mscorlib/src/System/DataMisalignedException.cs34
-rw-r--r--src/mscorlib/src/System/DateTime.cs15
-rw-r--r--src/mscorlib/src/System/DateTimeKind.cs6
-rw-r--r--src/mscorlib/src/System/DateTimeOffset.cs1
-rw-r--r--src/mscorlib/src/System/DayOfWeek.cs7
-rw-r--r--src/mscorlib/src/System/Decimal.cs14
-rw-r--r--src/mscorlib/src/System/Delegate.cs1
-rw-r--r--src/mscorlib/src/System/DelegateSerializationHolder.cs9
-rw-r--r--src/mscorlib/src/System/Diagnostics/Assert.cs9
-rw-r--r--src/mscorlib/src/System/Diagnostics/ConditionalAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs128
-rw-r--r--src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs16
-rw-r--r--src/mscorlib/src/System/Diagnostics/Debugger.cs52
-rw-r--r--src/mscorlib/src/System/Diagnostics/DebuggerAttributes.cs116
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventDescriptor.cs2
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventProvider.cs21
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs23
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/FrameworkEventSource.cs70
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingTypeInfo.cs2
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/XplatEventLogger.cs2
-rw-r--r--src/mscorlib/src/System/Diagnostics/LogSwitch.cs13
-rw-r--r--src/mscorlib/src/System/Diagnostics/Stackframe.cs37
-rw-r--r--src/mscorlib/src/System/Diagnostics/Stacktrace.cs14
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymBinder.cs42
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocument.cs48
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocumentWriter.cs1
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymMethod.cs86
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymNamespace.cs30
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymReader.cs68
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymScope.cs47
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymVariable.cs41
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymWriter.cs78
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/SymAddressKind.cs3
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/SymDocumentType.cs24
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageType.cs42
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageVendor.cs23
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/Token.cs13
-rw-r--r--src/mscorlib/src/System/Diagnostics/log.cs116
-rw-r--r--src/mscorlib/src/System/DivideByZeroException.cs40
-rw-r--r--src/mscorlib/src/System/DllNotFoundException.cs1
-rw-r--r--src/mscorlib/src/System/Double.cs2
-rw-r--r--src/mscorlib/src/System/DuplicateWaitObjectException.cs58
-rw-r--r--src/mscorlib/src/System/EntryPointNotFoundException.cs44
-rw-r--r--src/mscorlib/src/System/Enum.cs132
-rw-r--r--src/mscorlib/src/System/Environment.cs616
-rw-r--r--src/mscorlib/src/System/EventArgs.cs15
-rw-r--r--src/mscorlib/src/System/EventHandler.cs7
-rw-r--r--src/mscorlib/src/System/Exception.cs98
-rw-r--r--src/mscorlib/src/System/ExecutionEngineException.cs39
-rw-r--r--src/mscorlib/src/System/FieldAccessException.cs40
-rw-r--r--src/mscorlib/src/System/FlagsAttribute.cs7
-rw-r--r--src/mscorlib/src/System/FormatException.cs40
-rw-r--r--src/mscorlib/src/System/FormattableString.cs2
-rw-r--r--src/mscorlib/src/System/GC.cs18
-rw-r--r--src/mscorlib/src/System/Globalization/Calendar.cs9
-rw-r--r--src/mscorlib/src/System/Globalization/CalendarAlgorithmType.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/CalendarData.cs35
-rw-r--r--src/mscorlib/src/System/Globalization/CalendarWeekRule.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/ChineseLunisolarCalendar.cs4
-rw-r--r--src/mscorlib/src/System/Globalization/CompareInfo.cs6
-rw-r--r--src/mscorlib/src/System/Globalization/CultureData.cs110
-rw-r--r--src/mscorlib/src/System/Globalization/CultureInfo.cs98
-rw-r--r--src/mscorlib/src/System/Globalization/CultureNotFoundException.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/CultureTypes.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/DateTimeFormat.cs8
-rw-r--r--src/mscorlib/src/System/Globalization/DateTimeFormatInfo.cs24
-rw-r--r--src/mscorlib/src/System/Globalization/DateTimeStyles.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/DaylightTime.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/DigitShapes.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/EastAsianLunisolarCalendar.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/EncodingTable.cs4
-rw-r--r--src/mscorlib/src/System/Globalization/GlobalizationAssembly.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/GregorianCalendar.cs5
-rw-r--r--src/mscorlib/src/System/Globalization/GregorianCalendarTypes.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/HebrewCalendar.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/HijriCalendar.cs5
-rw-r--r--src/mscorlib/src/System/Globalization/JapaneseCalendar.cs14
-rw-r--r--src/mscorlib/src/System/Globalization/JulianCalendar.cs5
-rw-r--r--src/mscorlib/src/System/Globalization/KoreanCalendar.cs6
-rw-r--r--src/mscorlib/src/System/Globalization/NumberFormatInfo.cs26
-rw-r--r--src/mscorlib/src/System/Globalization/NumberStyles.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/RegionInfo.cs5
-rw-r--r--src/mscorlib/src/System/Globalization/SortKey.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/StringInfo.cs4
-rw-r--r--src/mscorlib/src/System/Globalization/TaiwanCalendar.cs6
-rw-r--r--src/mscorlib/src/System/Globalization/TextElementEnumerator.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/TextInfo.cs9
-rw-r--r--src/mscorlib/src/System/Globalization/ThaiBuddhistCalendar.cs6
-rw-r--r--src/mscorlib/src/System/Globalization/UnicodeCategory.cs1
-rw-r--r--src/mscorlib/src/System/Guid.cs9
-rw-r--r--src/mscorlib/src/System/IAppDomain.cs28
-rw-r--r--src/mscorlib/src/System/IAppDomainPauseManager.cs40
-rw-r--r--src/mscorlib/src/System/IAppDomainSetup.cs84
-rw-r--r--src/mscorlib/src/System/IAsyncResult.cs18
-rw-r--r--src/mscorlib/src/System/ICloneable.cs1
-rw-r--r--src/mscorlib/src/System/IComparable.cs8
-rw-r--r--src/mscorlib/src/System/IConvertible.cs10
-rw-r--r--src/mscorlib/src/System/ICustomFormatter.cs11
-rw-r--r--src/mscorlib/src/System/IDisposable.cs8
-rw-r--r--src/mscorlib/src/System/IEquatable.cs8
-rw-r--r--src/mscorlib/src/System/IFormatProvider.cs8
-rw-r--r--src/mscorlib/src/System/IFormattable.cs9
-rw-r--r--src/mscorlib/src/System/IO/BinaryReader.cs1
-rw-r--r--src/mscorlib/src/System/IO/BinaryWriter.cs5
-rw-r--r--src/mscorlib/src/System/IO/Directory.cs806
-rw-r--r--src/mscorlib/src/System/IO/DirectoryInfo.cs511
-rw-r--r--src/mscorlib/src/System/IO/DirectoryNotFoundException.cs1
-rw-r--r--src/mscorlib/src/System/IO/DriveNotFoundException.cs8
-rw-r--r--src/mscorlib/src/System/IO/EndOfStreamException.cs1
-rw-r--r--src/mscorlib/src/System/IO/File.cs601
-rw-r--r--src/mscorlib/src/System/IO/FileAccess.cs1
-rw-r--r--src/mscorlib/src/System/IO/FileAttributes.cs39
-rw-r--r--src/mscorlib/src/System/IO/FileInfo.cs270
-rw-r--r--src/mscorlib/src/System/IO/FileLoadException.cs2
-rw-r--r--src/mscorlib/src/System/IO/FileMode.cs1
-rw-r--r--src/mscorlib/src/System/IO/FileNotFoundException.cs2
-rw-r--r--src/mscorlib/src/System/IO/FileOptions.cs1
-rw-r--r--src/mscorlib/src/System/IO/FileShare.cs1
-rw-r--r--src/mscorlib/src/System/IO/FileSystemEnumerable.cs107
-rw-r--r--src/mscorlib/src/System/IO/FileSystemInfo.cs240
-rw-r--r--src/mscorlib/src/System/IO/IOException.cs1
-rw-r--r--src/mscorlib/src/System/IO/MemoryStream.cs5
-rw-r--r--src/mscorlib/src/System/IO/PathTooLongException.cs1
-rw-r--r--src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs4
-rw-r--r--src/mscorlib/src/System/IO/ReadLinesIterator.cs102
-rw-r--r--src/mscorlib/src/System/IO/SearchOption.cs1
-rw-r--r--src/mscorlib/src/System/IO/SeekOrigin.cs1
-rw-r--r--src/mscorlib/src/System/IO/Stream.cs28
-rw-r--r--src/mscorlib/src/System/IO/StreamReader.cs10
-rw-r--r--src/mscorlib/src/System/IO/StreamWriter.cs765
-rw-r--r--src/mscorlib/src/System/IO/TextReader.cs12
-rw-r--r--src/mscorlib/src/System/IO/TextWriter.cs886
-rw-r--r--src/mscorlib/src/System/IO/UnmanagedMemoryAccessor.cs1
-rw-r--r--src/mscorlib/src/System/IO/UnmanagedMemoryStream.cs47
-rw-r--r--src/mscorlib/src/System/IO/UnmanagedMemoryStreamWrapper.cs1
-rw-r--r--src/mscorlib/src/System/IO/__Error.cs28
-rw-r--r--src/mscorlib/src/System/IObservable.cs13
-rw-r--r--src/mscorlib/src/System/IObserver.cs14
-rw-r--r--src/mscorlib/src/System/IProgress.cs11
-rw-r--r--src/mscorlib/src/System/IndexOutOfRangeException.cs39
-rw-r--r--src/mscorlib/src/System/InsufficientExecutionStackException.cs45
-rw-r--r--src/mscorlib/src/System/Int16.cs1
-rw-r--r--src/mscorlib/src/System/Int32.cs1
-rw-r--r--src/mscorlib/src/System/Int64.cs1
-rw-r--r--src/mscorlib/src/System/IntPtr.cs17
-rw-r--r--src/mscorlib/src/System/Internal.cs8
-rw-r--r--src/mscorlib/src/System/InvalidCastException.cs49
-rw-r--r--src/mscorlib/src/System/InvalidOperationException.cs37
-rw-r--r--src/mscorlib/src/System/InvalidProgramException.cs38
-rw-r--r--src/mscorlib/src/System/InvalidTimeZoneException.cs28
-rw-r--r--src/mscorlib/src/System/Lazy.cs2
-rw-r--r--src/mscorlib/src/System/LowLevelConsole.cs36
-rw-r--r--src/mscorlib/src/System/MarshalByRefObject.cs21
-rw-r--r--src/mscorlib/src/System/Math.cs23
-rw-r--r--src/mscorlib/src/System/MathF.cs3
-rw-r--r--src/mscorlib/src/System/MemberAccessException.cs40
-rw-r--r--src/mscorlib/src/System/MethodAccessException.cs40
-rw-r--r--src/mscorlib/src/System/MidpointRounding.cs9
-rw-r--r--src/mscorlib/src/System/MissingFieldException.cs9
-rw-r--r--src/mscorlib/src/System/MissingMemberException.cs12
-rw-r--r--src/mscorlib/src/System/MissingMethodException.cs9
-rw-r--r--src/mscorlib/src/System/MulticastDelegate.cs5
-rw-r--r--src/mscorlib/src/System/MulticastNotSupportedException.cs40
-rw-r--r--src/mscorlib/src/System/NonSerializedAttribute.cs1
-rw-r--r--src/mscorlib/src/System/NotFiniteNumberException.cs62
-rw-r--r--src/mscorlib/src/System/NotImplementedException.cs32
-rw-r--r--src/mscorlib/src/System/NotSupportedException.cs36
-rw-r--r--src/mscorlib/src/System/NullReferenceException.cs41
-rw-r--r--src/mscorlib/src/System/Nullable.cs3
-rw-r--r--src/mscorlib/src/System/Number.cs4
-rw-r--r--src/mscorlib/src/System/Numerics/Hashing/HashHelpers.cs8
-rw-r--r--src/mscorlib/src/System/Object.cs3
-rw-r--r--src/mscorlib/src/System/ObjectDisposedException.cs79
-rw-r--r--src/mscorlib/src/System/ObsoleteAttribute.cs43
-rw-r--r--src/mscorlib/src/System/OperatingSystem.cs21
-rw-r--r--src/mscorlib/src/System/OperationCanceledException.cs1
-rw-r--r--src/mscorlib/src/System/OutOfMemoryException.cs1
-rw-r--r--src/mscorlib/src/System/OverflowException.cs41
-rw-r--r--src/mscorlib/src/System/ParamArrayAttribute.cs13
-rw-r--r--src/mscorlib/src/System/PlatformID.cs3
-rw-r--r--src/mscorlib/src/System/PlatformNotSupportedException.cs35
-rw-r--r--src/mscorlib/src/System/Progress.cs36
-rw-r--r--src/mscorlib/src/System/Random.cs1
-rw-r--r--src/mscorlib/src/System/RankException.cs36
-rw-r--r--src/mscorlib/src/System/ReadOnlySpan.cs293
-rw-r--r--src/mscorlib/src/System/Reflection/AmbiguousMatchException.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Assembly.cs507
-rw-r--r--src/mscorlib/src/System/Reflection/AssemblyAttributes.cs19
-rw-r--r--src/mscorlib/src/System/Reflection/AssemblyName.cs8
-rw-r--r--src/mscorlib/src/System/Reflection/AssemblyNameFlags.cs3
-rw-r--r--src/mscorlib/src/System/Reflection/AssemblyNameProxy.cs28
-rw-r--r--src/mscorlib/src/System/Reflection/Binder.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/BindingFlags.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/CallingConventions.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/ComInterfaces.cs115
-rw-r--r--src/mscorlib/src/System/Reflection/ConstructorInfo.cs42
-rw-r--r--src/mscorlib/src/System/Reflection/CustomAttribute.cs44
-rw-r--r--src/mscorlib/src/System/Reflection/CustomAttributeFormatException.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/DefaultMemberAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/AssemblyBuilder.cs280
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderAccess.cs3
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderData.cs346
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ComInterfaces.cs143
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ConstructorBuilder.cs34
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/CustomAttributeBuilder.cs18
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/DynamicILGenerator.cs243
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/DynamicMethod.cs36
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/EnumBuilder.cs13
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/EventBuilder.cs7
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/EventToken.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/FieldBuilder.cs23
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/FieldToken.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/FlowControl.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs5
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ILGenerator.cs67
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ISymWrapperCore.cs143
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/Label.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/LocalBuilder.cs6
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/MethodBuilder.cs319
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/MethodBuilderInstantiation.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/MethodToken.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ModuleBuilder.cs263
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ModuleBuilderData.cs32
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/OpCodes.cs3
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/Opcode.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/OpcodeType.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/OperandType.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/PEFileKinds.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ParameterBuilder.cs26
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ParameterToken.cs7
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/PropertyBuilder.cs15
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/PropertyToken.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/SignatureHelper.cs44
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/SignatureToken.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/StackBehaviour.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/StringToken.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/SymbolType.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/TypeBuilder.cs215
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/TypeBuilderInstantiation.cs3
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/TypeToken.cs7
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/UnmanagedMarshal.cs183
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs18
-rw-r--r--src/mscorlib/src/System/Reflection/EventAttributes.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/EventInfo.cs7
-rw-r--r--src/mscorlib/src/System/Reflection/FieldAttributes.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/FieldInfo.cs9
-rw-r--r--src/mscorlib/src/System/Reflection/ICustomAttributeProvider.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/IReflect.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/InterfaceMapping.cs5
-rw-r--r--src/mscorlib/src/System/Reflection/InvalidFilterCriteriaException.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/ManifestResourceInfo.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/MdImport.cs3
-rw-r--r--src/mscorlib/src/System/Reflection/MemberFilter.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/MemberInfo.cs6
-rw-r--r--src/mscorlib/src/System/Reflection/MemberTypes.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/MethodAttributes.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/MethodBase.cs28
-rw-r--r--src/mscorlib/src/System/Reflection/MethodBody.cs4
-rw-r--r--src/mscorlib/src/System/Reflection/MethodImplAttributes.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/MethodInfo.cs31
-rw-r--r--src/mscorlib/src/System/Reflection/Missing.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Module.cs30
-rw-r--r--src/mscorlib/src/System/Reflection/ObfuscateAssemblyAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/ObfuscationAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/ParameterAttributes.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/ParameterInfo.cs6
-rw-r--r--src/mscorlib/src/System/Reflection/ParameterModifier.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Pointer.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/PropertyAttributes.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/PropertyInfo.cs7
-rw-r--r--src/mscorlib/src/System/Reflection/ReflectionTypeLoadException.cs7
-rw-r--r--src/mscorlib/src/System/Reflection/ResourceAttributes.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimeReflectionExtensions.cs12
-rw-r--r--src/mscorlib/src/System/Reflection/StrongNameKeyPair.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/TargetException.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/TargetInvocationException.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/TargetParameterCountException.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/TypeAttributes.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/TypeDelegator.cs3
-rw-r--r--src/mscorlib/src/System/Reflection/TypeFilter.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/TypeInfo.cs1
-rw-r--r--src/mscorlib/src/System/Resources/FileBasedResourceGroveler.cs36
-rw-r--r--src/mscorlib/src/System/Resources/IResourceReader.cs1
-rw-r--r--src/mscorlib/src/System/Resources/IResourceWriter.cs45
-rw-r--r--src/mscorlib/src/System/Resources/LooselyLinkedResourceReference.cs1
-rw-r--r--src/mscorlib/src/System/Resources/MissingManifestResourceException.cs1
-rw-r--r--src/mscorlib/src/System/Resources/MissingSatelliteAssemblyException.cs1
-rw-r--r--src/mscorlib/src/System/Resources/NeutralResourcesLanguageAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Resources/ResourceManager.cs47
-rw-r--r--src/mscorlib/src/System/Resources/ResourceReader.cs251
-rw-r--r--src/mscorlib/src/System/Resources/ResourceSet.cs4
-rw-r--r--src/mscorlib/src/System/Resources/SatelliteContractVersionAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Resources/UltimateResourceFallbackLocation.cs1
-rw-r--r--src/mscorlib/src/System/RtType.cs80
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/AccessedThroughPropertyAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/AssemblyAttributesGoHere.cs43
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/AsyncMethodBuilder.cs60
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CompilationRelaxations.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CompilerGlobalScopeAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/ConditionalWeakTable.cs366
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CustomConstantAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DateTimeConstantAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DecimalConstantAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DecoratedNameAttribute.cs18
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DiscardableAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/ITuple.cs22
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IndexerNameAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsVolatile.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/MethodImplAttribute.cs4
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/RuntimeHelpers.cs6
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/RuntimeWrappedException.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/TaskAwaiter.cs9
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/TupleElementNamesAttribute.cs57
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/TypeForwardedToAttribute.cs12
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/Unsafe.cs13
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/YieldAwaitable.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/jithelpers.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/ExceptionServices/CorruptingExceptionCommon.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionNotification.cs3
-rw-r--r--src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionServicesCommon.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/GcSettings.cs7
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ArrayWithOffset.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Attributes.cs353
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/BStrWrapper.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/COMException.cs13
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/CallingConvention.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/CharSet.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComEventsMethod.cs72
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComEventsSink.cs118
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComMemberType.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerable.cs28
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerator.cs34
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IExpando.cs31
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IReflect.cs79
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/CriticalHandle.cs13
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/CurrencyWrapper.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/DispatchWrapper.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ErrorWrapper.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Expando/IExpando.cs12
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ExtensibleClassFactory.cs40
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ExternalException.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/GcHandle.cs146
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/HandleRef.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ICustomAdapter.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ICustomFactory.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ICustomMarshaler.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ICustomQueryInterface.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/IException.cs4
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/IRegistrationServices.cs50
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ITypeLibConverter.cs122
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/InvalidComObjectException.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/InvalidOleVariantTypeException.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/LayoutKind.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Marshal.cs538
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/MarshalDirectiveException.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/NativeMethods.cs31
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/NonPortable.cs33
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ObjectCreationDelegate.cs24
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/RegistrationServices.cs1059
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/RuntimeEnvironment.cs81
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SEHException.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeArrayRankMismatchException.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeArrayTypeMismatchException.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeBuffer.cs15
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeHandle.cs15
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventItfInfo.cs53
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventProviderWriter.cs774
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventSinkHelperWriter.cs298
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/NameSpaceExtractor.cs21
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/TCEAdapterGenerator.cs141
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIBindCtx.cs46
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPoint.cs30
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPointContainer.cs27
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnectionPoints.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnections.cs42
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumMoniker.cs33
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumString.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumVARIANT.cs35
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerable.cs30
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerator.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIExpando.cs33
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIMoniker.cs60
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIPersistFile.cs36
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIReflect.cs79
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIRunningObjectTable.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIStream.cs57
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeComp.cs52
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeInfo.cs330
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeLib.cs71
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UnknownWrapper.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Variant.cs658
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/Attributes.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CLRIPropertyValueImpl.cs9
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ConstantSplittableMap.cs62
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CustomPropertyImpl.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IVector.cs3
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/NativeMethods.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeBufferHelper.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMarshal.cs42
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMetadata.cs100
-rw-r--r--src/mscorlib/src/System/Runtime/Loader/AssemblyLoadContext.cs41
-rw-r--r--src/mscorlib/src/System/Runtime/MemoryFailPoint.cs6
-rw-r--r--src/mscorlib/src/System/Runtime/ProfileOptimization.cs50
-rw-r--r--src/mscorlib/src/System/Runtime/Reliability/CriticalFinalizerObject.cs4
-rw-r--r--src/mscorlib/src/System/Runtime/Reliability/PrePrepareMethodAttribute.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/Remoting/ObjectHandle.cs9
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/FormatterConverter.cs3
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/FormatterServices.cs480
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/IDeserializationCallback.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/IFormatter.cs41
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/IFormatterConverter.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/IObjectReference.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/ISerializable.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/ISerializationSurrogate.cs34
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/ISurrogateSelector.cs34
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/MemberHolder.cs51
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SafeSerializationManager.cs210
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationAttributes.cs5
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationBinder.cs29
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationException.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationFieldInfo.cs136
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationInfo.cs59
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationInfoEnumerator.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/StreamingContext.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/Versioning/CompatibilitySwitch.cs28
-rw-r--r--src/mscorlib/src/System/Runtime/Versioning/TargetFrameworkId.cs28
-rw-r--r--src/mscorlib/src/System/RuntimeArgumentHandle.cs1
-rw-r--r--src/mscorlib/src/System/RuntimeHandles.cs150
-rw-r--r--src/mscorlib/src/System/SByte.cs1
-rw-r--r--src/mscorlib/src/System/Security/AccessControl/Enums.cs75
-rw-r--r--src/mscorlib/src/System/Security/Attributes.cs3
-rw-r--r--src/mscorlib/src/System/Security/BuiltInPermissionSets.cs255
-rw-r--r--src/mscorlib/src/System/Security/CodeAccessPermission.cs229
-rw-r--r--src/mscorlib/src/System/Security/CodeAccessSecurityEngine.cs400
-rw-r--r--src/mscorlib/src/System/Security/FrameSecurityDescriptor.cs537
-rw-r--r--src/mscorlib/src/System/Security/HostProtectionException.cs135
-rw-r--r--src/mscorlib/src/System/Security/HostSecurityManager.cs90
-rw-r--r--src/mscorlib/src/System/Security/IPermission.cs84
-rw-r--r--src/mscorlib/src/System/Security/ISecurityEncodable.cs17
-rw-r--r--src/mscorlib/src/System/Security/ISecurityPolicyEncodable.cs17
-rw-r--r--src/mscorlib/src/System/Security/IStackWalk.cs23
-rw-r--r--src/mscorlib/src/System/Security/NamedPermissionSet.cs75
-rw-r--r--src/mscorlib/src/System/Security/PermissionListSet.cs535
-rw-r--r--src/mscorlib/src/System/Security/PermissionSet.cs1605
-rw-r--r--src/mscorlib/src/System/Security/PermissionSetEnumerator.cs89
-rw-r--r--src/mscorlib/src/System/Security/PermissionSetTriple.cs270
-rw-r--r--src/mscorlib/src/System/Security/PermissionToken.cs383
-rw-r--r--src/mscorlib/src/System/Security/Permissions/EnvironmentPermission.cs347
-rw-r--r--src/mscorlib/src/System/Security/Permissions/FileDialogPermission.cs158
-rw-r--r--src/mscorlib/src/System/Security/Permissions/FileIOPermission.cs1216
-rw-r--r--src/mscorlib/src/System/Security/Permissions/GACIdentityPermission.cs103
-rw-r--r--src/mscorlib/src/System/Security/Permissions/HostProtectionPermission.cs265
-rw-r--r--src/mscorlib/src/System/Security/Permissions/IBuiltInPermission.cs63
-rw-r--r--src/mscorlib/src/System/Security/Permissions/IUnrestrictedPermission.cs13
-rw-r--r--src/mscorlib/src/System/Security/Permissions/IsolatedStorageFilePermission.cs163
-rw-r--r--src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs183
-rw-r--r--src/mscorlib/src/System/Security/Permissions/PermissionAttributes.cs880
-rw-r--r--src/mscorlib/src/System/Security/Permissions/PermissionState.cs21
-rw-r--r--src/mscorlib/src/System/Security/Permissions/ReflectionPermission.cs274
-rw-r--r--src/mscorlib/src/System/Security/Permissions/RegistryPermission.cs363
-rw-r--r--src/mscorlib/src/System/Security/Permissions/SecurityPermission.cs270
-rw-r--r--src/mscorlib/src/System/Security/Permissions/SiteIdentityPermission.cs251
-rw-r--r--src/mscorlib/src/System/Security/Permissions/StrongNameIdentityPermission.cs401
-rw-r--r--src/mscorlib/src/System/Security/Permissions/StrongNamePublicKeyBlob.cs94
-rw-r--r--src/mscorlib/src/System/Security/Permissions/UIPermission.cs327
-rw-r--r--src/mscorlib/src/System/Security/Permissions/URLIdentityPermission.cs284
-rw-r--r--src/mscorlib/src/System/Security/Permissions/ZoneIdentityPermission.cs208
-rw-r--r--src/mscorlib/src/System/Security/Permissions/keycontainerpermission.cs634
-rw-r--r--src/mscorlib/src/System/Security/Policy/ApplicationTrust.cs126
-rw-r--r--src/mscorlib/src/System/Security/Policy/Evidence.cs38
-rw-r--r--src/mscorlib/src/System/Security/Policy/EvidenceBase.cs178
-rw-r--r--src/mscorlib/src/System/Security/Policy/EvidenceTypeDescriptor.cs160
-rw-r--r--src/mscorlib/src/System/Security/Policy/IDelayEvaluatedEvidence.cs34
-rw-r--r--src/mscorlib/src/System/Security/Policy/IIdentityPermissionFactory.cs20
-rw-r--r--src/mscorlib/src/System/Security/Policy/IRuntimeEvidenceFactory.cs36
-rw-r--r--src/mscorlib/src/System/Security/Policy/PolicyException.cs50
-rw-r--r--src/mscorlib/src/System/Security/Policy/PolicyStatement.cs246
-rw-r--r--src/mscorlib/src/System/Security/Policy/Site.cs105
-rw-r--r--src/mscorlib/src/System/Security/Policy/StrongName.cs171
-rw-r--r--src/mscorlib/src/System/Security/Policy/URL.cs98
-rw-r--r--src/mscorlib/src/System/Security/Policy/Zone.cs93
-rw-r--r--src/mscorlib/src/System/Security/Principal/IIdentity.cs29
-rw-r--r--src/mscorlib/src/System/Security/Principal/IPrincipal.cs26
-rw-r--r--src/mscorlib/src/System/Security/Principal/TokenImpersonationLevel.cs15
-rw-r--r--src/mscorlib/src/System/Security/SafeSecurityHandles.cs148
-rw-r--r--src/mscorlib/src/System/Security/SecurityContext.cs486
-rw-r--r--src/mscorlib/src/System/Security/SecurityElement.cs875
-rw-r--r--src/mscorlib/src/System/Security/SecurityException.cs35
-rw-r--r--src/mscorlib/src/System/Security/SecurityManager.cs157
-rw-r--r--src/mscorlib/src/System/Security/SecurityRuntime.cs159
-rw-r--r--src/mscorlib/src/System/Security/SecurityState.cs1
-rw-r--r--src/mscorlib/src/System/Security/SecurityZone.cs29
-rw-r--r--src/mscorlib/src/System/Security/Util/Config.cs83
-rw-r--r--src/mscorlib/src/System/Security/Util/Hex.cs126
-rw-r--r--src/mscorlib/src/System/Security/Util/StringExpressionSet.cs752
-rw-r--r--src/mscorlib/src/System/Security/Util/TokenBasedSet.cs443
-rw-r--r--src/mscorlib/src/System/Security/Util/TokenBasedSetEnumerator.cs36
-rw-r--r--src/mscorlib/src/System/Security/Util/URLString.cs1237
-rw-r--r--src/mscorlib/src/System/Security/Util/XMLUtil.cs435
-rw-r--r--src/mscorlib/src/System/Security/Util/sitestring.cs289
-rw-r--r--src/mscorlib/src/System/Security/VerificationException.cs1
-rw-r--r--src/mscorlib/src/System/Security/securestring.cs751
-rw-r--r--src/mscorlib/src/System/SerializableAttribute.cs1
-rw-r--r--src/mscorlib/src/System/SharedStatics.cs33
-rw-r--r--src/mscorlib/src/System/Single.cs2
-rw-r--r--src/mscorlib/src/System/Span.cs226
-rw-r--r--src/mscorlib/src/System/StackOverflowException.cs41
-rw-r--r--src/mscorlib/src/System/String.Comparison.cs9
-rw-r--r--src/mscorlib/src/System/String.Manipulation.cs247
-rw-r--r--src/mscorlib/src/System/String.cs19
-rw-r--r--src/mscorlib/src/System/StringComparer.cs161
-rw-r--r--src/mscorlib/src/System/StringComparison.cs9
-rw-r--r--src/mscorlib/src/System/StringSplitOptions.cs5
-rw-r--r--src/mscorlib/src/System/StubHelpers.cs34
-rw-r--r--src/mscorlib/src/System/SystemException.cs37
-rw-r--r--src/mscorlib/src/System/Text/ASCIIEncoding.cs9
-rw-r--r--src/mscorlib/src/System/Text/BaseCodePageEncoding.cs332
-rw-r--r--src/mscorlib/src/System/Text/CodePageEncoding.cs136
-rw-r--r--src/mscorlib/src/System/Text/DBCSCodePageEncoding.cs1194
-rw-r--r--src/mscorlib/src/System/Text/Decoder.cs9
-rw-r--r--src/mscorlib/src/System/Text/DecoderFallback.cs8
-rw-r--r--src/mscorlib/src/System/Text/DecoderNLS.cs11
-rw-r--r--src/mscorlib/src/System/Text/EUCJPEncoding.cs183
-rw-r--r--src/mscorlib/src/System/Text/Encoder.cs8
-rw-r--r--src/mscorlib/src/System/Text/EncoderBestFitFallback.cs2
-rw-r--r--src/mscorlib/src/System/Text/EncoderExceptionFallback.cs2
-rw-r--r--src/mscorlib/src/System/Text/EncoderNLS.cs11
-rw-r--r--src/mscorlib/src/System/Text/EncoderReplacementFallback.cs2
-rw-r--r--src/mscorlib/src/System/Text/Encoding.cs232
-rw-r--r--src/mscorlib/src/System/Text/EncodingForwarder.cs6
-rw-r--r--src/mscorlib/src/System/Text/EncodingNLS.cs1
-rw-r--r--src/mscorlib/src/System/Text/EncodingProvider.cs1
-rw-r--r--src/mscorlib/src/System/Text/GB18030Encoding.cs1365
-rw-r--r--src/mscorlib/src/System/Text/ISCIIEncoding.cs2621
-rw-r--r--src/mscorlib/src/System/Text/ISO2022Encoding.cs1983
-rw-r--r--src/mscorlib/src/System/Text/Latin1Encoding.cs3
-rw-r--r--src/mscorlib/src/System/Text/MLangCodePageEncoding.cs172
-rw-r--r--src/mscorlib/src/System/Text/Normalization.Windows.cs8
-rw-r--r--src/mscorlib/src/System/Text/Normalization.cs7
-rw-r--r--src/mscorlib/src/System/Text/SBCSCodePageEncoding.cs1009
-rw-r--r--src/mscorlib/src/System/Text/StringBuilder.cs12
-rw-r--r--src/mscorlib/src/System/Text/SurrogateEncoder.cs57
-rw-r--r--src/mscorlib/src/System/Text/UTF7Encoding.cs11
-rw-r--r--src/mscorlib/src/System/Text/UTF8Encoding.cs7
-rw-r--r--src/mscorlib/src/System/Text/UnicodeEncoding.cs8
-rw-r--r--src/mscorlib/src/System/ThreadAttributes.cs12
-rw-r--r--src/mscorlib/src/System/ThreadStaticAttribute.cs12
-rw-r--r--src/mscorlib/src/System/Threading/ApartmentState.cs1
-rw-r--r--src/mscorlib/src/System/Threading/AsyncLocal.cs2
-rw-r--r--src/mscorlib/src/System/Threading/AutoResetEvent.cs2
-rw-r--r--src/mscorlib/src/System/Threading/CancellationToken.cs8
-rw-r--r--src/mscorlib/src/System/Threading/CancellationTokenRegistration.cs1
-rw-r--r--src/mscorlib/src/System/Threading/CancellationTokenSource.cs102
-rw-r--r--src/mscorlib/src/System/Threading/CountdownEvent.cs2
-rw-r--r--src/mscorlib/src/System/Threading/EventWaitHandle.cs14
-rw-r--r--src/mscorlib/src/System/Threading/ExecutionContext.cs62
-rw-r--r--src/mscorlib/src/System/Threading/IObjectHandle.cs31
-rw-r--r--src/mscorlib/src/System/Threading/Interlocked.cs20
-rw-r--r--src/mscorlib/src/System/Threading/LazyInitializer.cs1
-rw-r--r--src/mscorlib/src/System/Threading/LockCookie.cs57
-rw-r--r--src/mscorlib/src/System/Threading/LockRecursionException.cs1
-rw-r--r--src/mscorlib/src/System/Threading/ManualResetEvent.cs2
-rw-r--r--src/mscorlib/src/System/Threading/ManualResetEventSlim.cs2
-rw-r--r--src/mscorlib/src/System/Threading/Monitor.cs3
-rw-r--r--src/mscorlib/src/System/Threading/Mutex.cs52
-rw-r--r--src/mscorlib/src/System/Threading/Overlapped.cs54
-rw-r--r--src/mscorlib/src/System/Threading/ParameterizedThreadStart.cs1
-rw-r--r--src/mscorlib/src/System/Threading/ReaderWriterLock.cs276
-rw-r--r--src/mscorlib/src/System/Threading/SemaphoreSlim.cs6
-rw-r--r--src/mscorlib/src/System/Threading/SpinLock.cs82
-rw-r--r--src/mscorlib/src/System/Threading/SpinWait.cs1
-rw-r--r--src/mscorlib/src/System/Threading/SynchronizationContext.cs23
-rw-r--r--src/mscorlib/src/System/Threading/SynchronizationLockException.cs1
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/BeginEndAwaitableAdapter.cs157
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/ConcurrentExclusiveSchedulerPair.cs1
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/FutureFactory.cs145
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/IAsyncCausalityTracerStatics.cs14
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/Parallel.cs3593
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/ParallelLoopState.cs641
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/ParallelRangeManager.cs279
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/ProducerConsumerQueues.cs171
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TPLETWProvider.cs214
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/Task.cs716
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskCompletionSource.cs17
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskContinuation.cs54
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskExceptionHolder.cs17
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskFactory.cs259
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskScheduler.cs1
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/future.cs171
-rw-r--r--src/mscorlib/src/System/Threading/Thread.cs542
-rw-r--r--src/mscorlib/src/System/Threading/ThreadAbortException.cs6
-rw-r--r--src/mscorlib/src/System/Threading/ThreadInterruptedException.cs1
-rw-r--r--src/mscorlib/src/System/Threading/ThreadLocal.cs1
-rw-r--r--src/mscorlib/src/System/Threading/ThreadPool.cs960
-rw-r--r--src/mscorlib/src/System/Threading/ThreadPriority.cs1
-rw-r--r--src/mscorlib/src/System/Threading/ThreadStart.cs2
-rw-r--r--src/mscorlib/src/System/Threading/ThreadState.cs1
-rw-r--r--src/mscorlib/src/System/Threading/ThreadStateException.cs1
-rw-r--r--src/mscorlib/src/System/Threading/Timeout.cs2
-rw-r--r--src/mscorlib/src/System/Threading/Timer.cs147
-rw-r--r--src/mscorlib/src/System/Threading/Volatile.cs32
-rw-r--r--src/mscorlib/src/System/Threading/WaitHandle.cs13
-rw-r--r--src/mscorlib/src/System/ThrowHelper.cs36
-rw-r--r--src/mscorlib/src/System/TimeSpan.cs1
-rw-r--r--src/mscorlib/src/System/TimeZone.cs1
-rw-r--r--src/mscorlib/src/System/TimeZoneInfo.AdjustmentRule.cs251
-rw-r--r--src/mscorlib/src/System/TimeZoneInfo.StringSerializer.cs625
-rw-r--r--src/mscorlib/src/System/TimeZoneInfo.TransitionTime.cs159
-rw-r--r--src/mscorlib/src/System/TimeZoneInfo.Unix.cs1463
-rw-r--r--src/mscorlib/src/System/TimeZoneInfo.Win32.cs1023
-rw-r--r--src/mscorlib/src/System/TimeZoneInfo.cs5535
-rw-r--r--src/mscorlib/src/System/TimeZoneNotFoundException.cs33
-rw-r--r--src/mscorlib/src/System/TimeoutException.cs44
-rw-r--r--src/mscorlib/src/System/Tuple.cs729
-rw-r--r--src/mscorlib/src/System/TupleExtensions.cs930
-rw-r--r--src/mscorlib/src/System/Type.cs45
-rw-r--r--src/mscorlib/src/System/TypeAccessException.cs24
-rw-r--r--src/mscorlib/src/System/TypeCode.cs10
-rw-r--r--src/mscorlib/src/System/TypeInitializationException.cs58
-rw-r--r--src/mscorlib/src/System/TypeLoadException.cs2
-rw-r--r--src/mscorlib/src/System/TypeUnloadedException.cs1
-rw-r--r--src/mscorlib/src/System/TypedReference.cs2
-rw-r--r--src/mscorlib/src/System/UInt16.cs1
-rw-r--r--src/mscorlib/src/System/UInt32.cs1
-rw-r--r--src/mscorlib/src/System/UInt64.cs1
-rw-r--r--src/mscorlib/src/System/UIntPtr.cs1
-rw-r--r--src/mscorlib/src/System/UnauthorizedAccessException.cs36
-rw-r--r--src/mscorlib/src/System/UnhandledExceptionEventArgs.cs36
-rw-r--r--src/mscorlib/src/System/UnhandledExceptionEventHandler.cs6
-rw-r--r--src/mscorlib/src/System/ValueTuple.cs2324
-rw-r--r--src/mscorlib/src/System/ValueType.cs1
-rw-r--r--src/mscorlib/src/System/Variant.cs15
-rw-r--r--src/mscorlib/src/System/Version.cs4
-rw-r--r--src/mscorlib/src/System/Void.cs9
-rw-r--r--src/mscorlib/src/System/WeakReference.cs2
-rw-r--r--src/mscorlib/src/System/_LocalDataStore.cs244
-rw-r--r--src/mscorlib/src/System/_LocalDataStoreMgr.cs332
-rw-r--r--src/mscorlib/src/System/__ComObject.cs7
-rw-r--r--src/mscorlib/src/System/cominterfaces.cs40
-rw-r--r--src/mscorlib/src/mscorlib.Friends.cs12
-rw-r--r--src/pal/CMakeLists.txt2
-rw-r--r--src/pal/inc/mbusafecrt.h2
-rw-r--r--src/pal/inc/pal.h878
-rw-r--r--src/pal/inc/pal_char16.h5
-rw-r--r--src/pal/inc/pal_mstypes.h10
-rw-r--r--src/pal/inc/rt/intsafe.h44
-rw-r--r--src/pal/inc/rt/palrt.h51
-rw-r--r--src/pal/inc/rt/safecrt.h8
-rw-r--r--src/pal/inc/rt/sal.h2
-rw-r--r--src/pal/inc/rt/specstrings_strict.h2
-rw-r--r--src/pal/inc/rt/specstrings_undef.h2
-rw-r--r--src/pal/inc/rt/vsassert.h5
-rw-r--r--src/pal/inc/strsafe.h593
-rw-r--r--src/pal/inc/unixasmmacrosarm64.inc3
-rw-r--r--src/pal/src/CMakeLists.txt111
-rw-r--r--src/pal/src/arch/amd64/processor.cpp16
-rw-r--r--src/pal/src/arch/i386/context2.S47
-rw-r--r--src/pal/src/config.h.in1
-rw-r--r--src/pal/src/configure.cmake33
-rw-r--r--src/pal/src/cruntime/file.cpp78
-rw-r--r--src/pal/src/cruntime/math.cpp8
-rw-r--r--src/pal/src/cruntime/printf.cpp82
-rw-r--r--src/pal/src/cruntime/printfcpp.cpp818
-rw-r--r--src/pal/src/cruntime/silent_printf.cpp280
-rw-r--r--src/pal/src/cruntime/string.cpp2
-rw-r--r--src/pal/src/debug/debug.cpp304
-rw-r--r--src/pal/src/exception/machexception.h2
-rw-r--r--src/pal/src/exception/seh-unwind.cpp4
-rw-r--r--src/pal/src/exception/signal.hpp7
-rw-r--r--src/pal/src/file/disk.cpp3
-rw-r--r--src/pal/src/file/file.cpp9
-rw-r--r--src/pal/src/file/path.cpp4
-rw-r--r--src/pal/src/include/pal/modulename.h3
-rw-r--r--src/pal/src/include/pal/palinternal.h20
-rw-r--r--src/pal/src/include/pal/printfcpp.hpp55
-rw-r--r--src/pal/src/include/pal/sharedmemory.h21
-rw-r--r--src/pal/src/include/pal/thread.hpp18
-rw-r--r--src/pal/src/include/pal/threadsusp.hpp2
-rw-r--r--src/pal/src/include/pal/utils.h56
-rw-r--r--src/pal/src/include/pal/virtual.h5
-rw-r--r--src/pal/src/init/pal.cpp17
-rw-r--r--src/pal/src/loader/module.cpp6
-rw-r--r--src/pal/src/loader/modulename.cpp134
-rw-r--r--src/pal/src/misc/dbgmsg.cpp10
-rw-r--r--src/pal/src/misc/fmtmessage.cpp3
-rw-r--r--src/pal/src/misc/perftrace.cpp179
-rw-r--r--src/pal/src/misc/sysinfo.cpp18
-rw-r--r--src/pal/src/misc/utils.cpp6
-rw-r--r--src/pal/src/safecrt/cruntime.h14
-rw-r--r--src/pal/src/safecrt/sscanf_s.cpp6
-rw-r--r--src/pal/src/safecrt/wcslen_s.cpp2
-rw-r--r--src/pal/src/shmemory/shmemory.cpp54
-rw-r--r--src/pal/src/thread/process.cpp24
-rw-r--r--src/pal/src/thread/thread.cpp108
-rw-r--r--src/pal/src/thread/threadsusp.cpp10
-rw-r--r--src/pal/tests/palsuite/CMakeLists.txt10
-rw-r--r--src/pal/tests/palsuite/c_runtime/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/__iscsym/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_alloca/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_ecvt/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_fdopen/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_finite/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_finitef/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_fullpath/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_gcvt/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_gcvt/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_getw/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_getw/test1/CMakeLists.txt19
-rw-r--r--src/pal/tests/palsuite/c_runtime/_getw/test1/test.datbin28 -> 0 bytes
-rw-r--r--src/pal/tests/palsuite/c_runtime/_getw/test1/test1.cpp96
-rw-r--r--src/pal/tests/palsuite/c_runtime/_getw/test1/testinfo.dat15
-rw-r--r--src/pal/tests/palsuite/c_runtime/_isnan/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_isnanf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_itow/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_mbsdec/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_mbsinc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_mbsninc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_open_osfhandle/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_open_osfhandle/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_putenv/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_putenv/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_putenv/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_putenv/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_putw/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_putw/test1/CMakeLists.txt19
-rw-r--r--src/pal/tests/palsuite/c_runtime/_putw/test1/test1.cpp112
-rw-r--r--src/pal/tests/palsuite/c_runtime/_putw/test1/testinfo.dat13
-rw-r--r--src/pal/tests/palsuite/c_runtime/_rotl/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_rotr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/test4.cpp4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snprintf_s/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_snwprintf_s/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_stricmp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_strlwr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_strnicmp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/CMakeLists.txt19
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/test5.cpp78
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/testinfo.dat14
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/CMakeLists.txt)1
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/_vsnprintf_s.h (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/_vsnprintf.h)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test1/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test1/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test1/test1.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test1/test1.cpp)6
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test1/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test1/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test10/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test10/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test10/test10.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test10/test10.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test10/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test10/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test11/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test11/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test11/test11.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test11/test11.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test11/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test11/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test12/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test12/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test12/test12.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test12/test12.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test12/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test12/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test13/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test13/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test13/test13.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test13/test13.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test13/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test13/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test14/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test14/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test14/test14.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test14/test14.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test14/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test14/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test15/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test15/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test15/test15.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test15/test15.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test15/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test15/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test16/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test16/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test16/test16.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test16/test16.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test16/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test16/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test17/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test17/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test17/test17.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test17/test17.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test17/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test17/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test18/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test18/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test18/test18.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test18/test18.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test18/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test18/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test19/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test19/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test19/test19.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test19/test19.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test19/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test19/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test2/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test2/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test2/test2.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test2/test2.cpp)8
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test2/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test2/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test3/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test3/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test3/test3.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test3/test3.cpp)8
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test3/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test3/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test4/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test4/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test4/test4.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test4/test4.cpp)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test4/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test4/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test6/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test6/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test6/test6.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test6/test6.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test6/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test6/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test7/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test7/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test7/test7.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test7/test7.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test7/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test7/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test8/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test8/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test8/test8.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test8/test8.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test8/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test8/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test9/CMakeLists.txt (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test9/CMakeLists.txt)4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test9/test9.cpp (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test9/test9.cpp)2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test9/testinfo.dat (renamed from src/pal/tests/palsuite/c_runtime/_vsnprintf/test9/testinfo.dat)0
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wcsicmp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wcslwr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wcsnicmp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wfopen/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wfopen/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wfopen/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wfopen/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wfopen/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wfopen/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wfopen/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/_wtoi/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/abs/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/acos/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/acosf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/asin/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/asinf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/atan/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/atan2/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/atan2f/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/atanf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/atof/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/atoi/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/atol/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/bsearch/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/bsearch/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/ceil/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/ceilf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/cos/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/cosf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/cosh/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/coshf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/ctime/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/errno/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/errno/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/exit/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/exit/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/exp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/expf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fabs/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fabsf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fclose/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fclose/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/feof/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/ferror/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/ferror/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fflush/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fgets/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fgets/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fgets/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/floor/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/floorf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fmod/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fmodf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fopen/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fopen/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fopen/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fopen/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fopen/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fopen/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fopen/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fprintf/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fputs/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fputs/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fread/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fread/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fread/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/free/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fseek/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/ftell/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwprintf/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/fwrite/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/getc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/getenv/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/getenv/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/getenv/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/isalnum/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/isalpha/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/isdigit/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/islower/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/isprint/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/isprint/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/isspace/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/isupper/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/iswdigit/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/iswprint/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/iswspace/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/iswupper/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/iswxdigit/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/isxdigit/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/labs/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/llabs/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/localtime/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/log/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/log10/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/log10f/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/logf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/malloc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/malloc/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/memchr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/memcmp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/memcpy/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/memmove/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/memset/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/modf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/modff/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/pow/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/powf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/printf/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/qsort/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/qsort/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/rand_srand/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/realloc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sin/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sinf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sinh/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sinhf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sprintf_s/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sqrt/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sqrtf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/sscanf_s/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strcat/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strchr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strcmp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strcpy/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strcspn/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strlen/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strncat/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strncmp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strncpy/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strpbrk/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strrchr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strspn/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strstr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strtod/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strtod/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strtok/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/strtoul/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/CMakeLists.txt1
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/swprintf.h60
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test1/test1.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test19/test19.cpp8
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test5/CMakeLists.txt19
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test5/test5.cpp67
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test5/testinfo.dat12
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swprintf/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/swscanf/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/tan/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/tanf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/tanh/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/tanhf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/time/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/tolower/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/toupper/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/towlower/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/towupper/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/ungetc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/ungetc/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vfprintf/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vprintf/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/CMakeLists.txt1
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test1/test1.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test4/test4.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test5/CMakeLists.txt19
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test5/test5.cpp43
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test5/testinfo.dat14
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vsprintf/vsprintf.h30
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/CMakeLists.txt1
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test1/test1.cpp2
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test19/test19.cpp4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test3/test3.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test4/test4.cpp6
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test5/CMakeLists.txt19
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test5/test5.cpp79
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test5/testinfo.dat14
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/vswprintf/vswprintf.h18
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcscat/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcschr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcscmp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcscpy/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcslen/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcsncat/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcsncmp/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcsncpy/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcspbrk/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcsrchr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcsstr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstod/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstod/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstok/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstol/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstol/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstol/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstol/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstol/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstol/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstoul/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstoul/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstoul/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstoul/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstoul/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wcstoul/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wprintf/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wprintf/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/c_runtime/wprintf/test2/test2.cpp6
-rw-r--r--src/pal/tests/palsuite/common/ResultTime.h20
-rw-r--r--src/pal/tests/palsuite/composite/object_management/event/nonshared/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/object_management/event/shared/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/object_management/mutex/nonshared/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/object_management/mutex/shared/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/object_management/semaphore/nonshared/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/object_management/semaphore/shared/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/object_management/semaphore/shared/main.cpp3
-rw-r--r--src/pal/tests/palsuite/composite/synchronization/criticalsection/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/pal_composite_native_cs.cpp6
-rw-r--r--src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/pal_composite_native_cs.cpp6
-rw-r--r--src/pal/tests/palsuite/composite/threading/threadsuspension/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/threading/threadsuspension_switchthread/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/composite/wfmo/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/debug_api/DebugBreak/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/debug_api/OutputDebugStringW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/debug_api/WriteProcessMemory/test1/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/debug_api/WriteProcessMemory/test3/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/debug_api/WriteProcessMemory/test4/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/PAL_TRY_LEAVE_FINALLY/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/RaiseException/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/RaiseException/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/RaiseException/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/pal_except/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/pal_except/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/pal_except/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/pal_except/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/pal_except/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/pal_except/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/pal_except/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/pal_finally/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeLists.txt7
-rw-r--r--src/pal/tests/palsuite/file_io/AreFileApisANSI/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CompareFileTime/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CopyFileA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CopyFileA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CopyFileA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CopyFileA/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CopyFileW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CopyFileW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CopyFileW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CreateDirectoryA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CreateDirectoryA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CreateDirectoryW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CreateFileA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/CreateFileW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/DeleteFileA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/DeleteFileW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FILECanonicalizePath/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FileTimeToDosDateTime/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FindClose/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FindFirstFileA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FindFirstFileW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FindNextFileA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FindNextFileA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FindNextFileW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FindNextFileW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/FlushFileBuffers/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetConsoleCP/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetConsoleOutputCP/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetCurrentDirectoryA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetCurrentDirectoryW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileAttributesA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileAttributesExW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileAttributesExW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileAttributesW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileSize/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileTime/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileTime/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileTime/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileTime/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileTime/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileTime/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileTime/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileType/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileType/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFileType/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFullPathNameA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFullPathNameA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFullPathNameA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFullPathNameA/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFullPathNameW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFullPathNameW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFullPathNameW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetFullPathNameW/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetLongPathNameW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetLongPathNameW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetStdHandle/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetStdHandle/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetSystemTime/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetSystemTimeAsFileTime/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetTempFileNameA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetTempFileNameA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetTempFileNameA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/GetTempFileNameW.cpp2
-rw-r--r--src/pal/tests/palsuite/file_io/GetTempFileNameW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetTempFileNameW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/GetTempPathW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/MoveFileA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/MoveFileExA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/MoveFileExW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/MoveFileW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/ReadFile/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/ReadFile/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/ReadFile/test2/ReadFile.cpp4
-rw-r--r--src/pal/tests/palsuite/file_io/ReadFile/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/ReadFile/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/RemoveDirectoryA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/RemoveDirectoryW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SearchPathA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SearchPathW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetEndOfFile/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetEndOfFile/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetEndOfFile/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetEndOfFile/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetEndOfFile/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileAttributesA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileAttributesA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileAttributesA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileAttributesA/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileAttributesW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileAttributesW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileAttributesW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileAttributesW/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFilePointer/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFilePointer/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFilePointer/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFilePointer/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFilePointer/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFilePointer/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFilePointer/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileTime/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileTime/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileTime/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/SetFileTime/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/WriteFile/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/WriteFile/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/WriteFile/test2/WriteFile.cpp4
-rw-r--r--src/pal/tests/palsuite/file_io/WriteFile/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/WriteFile/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/WriteFile/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/errorpathnotfound/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/errorpathnotfound/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/errorpathnotfound/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/errorpathnotfound/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/file_io/gettemppatha/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/CreateFileMapping_neg1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/FreeLibraryAndExitThread/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetProcessHeap/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/HeapFree/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LocalAlloc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LockFile/test1/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LockFile/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LockFile/test3/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LockFile/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LockFile/test5/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LockFile/test6/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/LockFile/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/ProbeMemory_neg1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test1/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test3/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test11/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test13/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test14/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test15/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test16/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test17/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test18/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test19/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test20/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test21/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test22/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/VirtualQuery/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryA/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryA/test6/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryA/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryA/test8/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/loader/LoadLibraryW/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/CompareStringA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/CompareStringW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetACP/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetCPInfo/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetCPInfo/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetCPInfo/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetStringTypeExW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetStringTypeExW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetSystemDefaultLangID/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetThreadLocale/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetTimeZoneInformation/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetUserDefaultLCID/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/GetUserDefaultLangID/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/IsDBCSLeadByte/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/IsDBCSLeadByteEx/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/IsValidCodePage/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/IsValidCodePage/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/IsValidLocale/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/SetThreadLocale/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/CharNextA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/CharNextA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/CharNextExA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/CharNextExA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/CloseHandle/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/CloseHandle/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/CreatePipe/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FlushInstructionCache/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FormatMessageW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/test.cpp2
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FormatMessageW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FormatMessageW/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FormatMessageW/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FormatMessageW/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetCommandLineW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetComputerNameW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetDateFormatW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentStringsW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetLastError/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetSystemInfo/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetTickCount/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetUserNameW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetVersionExA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/GetVersionExW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/test.cpp2
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedBit/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedBit/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/test.cpp25
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/test.cpp4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchangePointer/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/test.cpp14
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/test.cpp4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedExchange/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/test.cpp15
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedExchangePointer/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/test.cpp14
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/test.cpp4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/IsBadCodePtr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/IsBadReadPtr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/MessageBoxW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/MessageBoxW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/SetLastError/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/_i64tow/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/lstrlenA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/lstrlenW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/queryperformancecounter/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/miscellaneous/queryperformancefrequency/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_GetPALDirectoryW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_GetUserTempDirectoryW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test2_neg/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_errno/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_get_stderr/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_get_stdin/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/PAL_get_stdout/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/pal_entrypoint/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/pal_specific/pal_initializedebug/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/paltestlist.txt41
-rw-r--r--src/pal/tests/palsuite/palverify.dat37
-rw-r--r--src/pal/tests/palsuite/samples/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/samples/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateEventA/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateEventA/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateEventA/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateEventW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateEventW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateEventW/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateProcessA/test1/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/CreateProcessA/test2/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/CreateProcessW/test1/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/CreateProcessW/test2/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateThread/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateThread/test1/test1.cpp4
-rw-r--r--src/pal/tests/palsuite/threading/CreateThread/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CreateThread/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CriticalSectionFunctions/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CriticalSectionFunctions/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CriticalSectionFunctions/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CriticalSectionFunctions/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CriticalSectionFunctions/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CriticalSectionFunctions/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CriticalSectionFunctions/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/CriticalSectionFunctions/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test10/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test11/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test12/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test8/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/DuplicateHandle/test9/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ExitProcess/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ExitProcess/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ExitProcess/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ExitThread/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ExitThread/test2/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/GetCurrentProcess/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/GetCurrentProcessId/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/GetCurrentThread/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/GetCurrentThread/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/GetCurrentThreadId/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/GetExitCodeProcess/test1/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/GetProcessTimes/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/GetThreadTimes/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/NamedMutex/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/NamedMutex/test1/nopal.cpp1
-rw-r--r--src/pal/tests/palsuite/threading/OpenEventW/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/OpenEventW/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/OpenEventW/test3/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/OpenEventW/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/OpenEventW/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/OpenProcess/test1/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/QueryThreadCycleTime/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/QueueUserAPC/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/QueueUserAPC/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/QueueUserAPC/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/QueueUserAPC/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/QueueUserAPC/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/QueueUserAPC/test6/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/QueueUserAPC/test7/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ReleaseMutex/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ResetEvent/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ResetEvent/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ResetEvent/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ResetEvent/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ResumeThread/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/SetErrorMode/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/SetEvent/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/SetEvent/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/SetEvent/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/SetEvent/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/Sleep/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/Sleep/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/SleepEx/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/SleepEx/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/SwitchToThread/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/TLS/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/TLS/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/TLS/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/TLS/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/TLS/test5/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/TLS/test6_optimizedtls/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/TerminateProcess/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/ThreadPriority/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForMultipleObjects/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test2/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test3/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test4/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test5/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test6/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExMutexTest/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExSemaphoreTest/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExThreadTest/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOMutexTest/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOProcessTest/CMakeLists.txt8
-rw-r--r--src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOSemaphoreTest/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOThreadTest/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/WaitForSingleObject/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/YieldProcessor/test1/CMakeLists.txt4
-rw-r--r--src/pal/tests/palsuite/threading/releasesemaphore/test1/CMakeLists.txt4
-rw-r--r--src/pal/tools/clang-compiler-override-arm.txt20
-rwxr-xr-xsrc/pal/tools/gen-buildsys-clang.sh57
-rw-r--r--src/palrt/CMakeLists.txt2
-rw-r--r--src/palrt/coguid.cpp2
-rw-r--r--src/publish.proj9
-rw-r--r--src/strongname/api/api.props43
-rw-r--r--src/strongname/api/crossgen/strongname_crossgen.nativeproj18
-rw-r--r--src/strongname/api/dac/dirs.proj19
-rw-r--r--src/strongname/api/dirs.proj22
-rw-r--r--src/strongname/api/wks/strongname_wks.nativeproj23
-rw-r--r--src/strongname/dirs.proj29
-rw-r--r--src/strongname/inc/StrongName_inc.nativeproj31
-rw-r--r--src/strongname/strongname.vcxproj396
-rw-r--r--src/strongname/strongname.vcxproj.filters108
-rw-r--r--src/strongname/strongname.vcxproj.vspscc10
-rw-r--r--src/syncAzure.proj8
-rw-r--r--src/tools/GenClrDebugResource/GenClrDebugResource.nativeproj26
-rw-r--r--src/tools/InjectResource/InjectResource.nativeproj27
-rw-r--r--src/tools/crossgen/crossgen.nativeproj94
-rw-r--r--src/tools/dirs.proj77
-rw-r--r--src/tools/metainfo/metainfo.nativeproj42
-rw-r--r--src/unwinder/CMakeLists.txt10
-rw-r--r--src/unwinder/dac/dirs.proj18
-rw-r--r--src/unwinder/dac/hostlocal/unwinder_dac.nativeproj13
-rw-r--r--src/unwinder/dac/hostwinamd64/unwinder_dac.nativeproj15
-rw-r--r--src/unwinder/dac/hostwinx86/unwinder_dac.nativeproj15
-rw-r--r--src/unwinder/dirs.proj19
-rw-r--r--src/unwinder/i386/unwinder_i386.cpp194
-rw-r--r--src/unwinder/i386/unwinder_i386.h33
-rw-r--r--src/unwinder/unwinder.targets60
-rw-r--r--src/utilcode/UtilCode.vcproj617
-rw-r--r--src/utilcode/UtilCode.vcxproj450
-rw-r--r--src/utilcode/UtilCode.vcxproj.vspscc10
-rw-r--r--src/utilcode/crossgen/utilcode_crossgen.nativeproj21
-rw-r--r--src/utilcode/dac/dirs.proj18
-rw-r--r--src/utilcode/dirs.proj27
-rw-r--r--src/utilcode/dyncrt/dyncrt.nativeproj25
-rw-r--r--src/utilcode/log.cpp2
-rw-r--r--src/utilcode/sstring.cpp2
-rw-r--r--src/utilcode/staticnohost/staticnohost.nativeproj15
-rw-r--r--src/utilcode/staticnohost/staticnohost.targets15
-rw-r--r--src/utilcode/util.cpp113
-rw-r--r--src/utilcode/utilcode.settings.targets132
-rw-r--r--src/vm/CMakeLists.txt4
-rw-r--r--src/vm/amd64/CLRErrorReporting.vrg5
-rw-r--r--src/vm/amd64/jitinterfaceamd64.cpp5
-rw-r--r--src/vm/appdomain.cpp6
-rw-r--r--src/vm/appdomainnative.cpp198
-rw-r--r--src/vm/appdomainnative.hpp3
-rw-r--r--src/vm/appdomainstack.cpp85
-rw-r--r--src/vm/appdomainstack.h3
-rw-r--r--src/vm/argdestination.h7
-rw-r--r--src/vm/arm/asmhelpers.S2
-rw-r--r--src/vm/arm64/asmhelpers.S96
-rw-r--r--src/vm/arm64/crthelpers.S27
-rw-r--r--src/vm/assembly.cpp17
-rw-r--r--src/vm/assembly.hpp3
-rw-r--r--src/vm/assemblyspec.cpp9
-rw-r--r--src/vm/ceemain.cpp3
-rw-r--r--src/vm/certificatecache.cpp85
-rw-r--r--src/vm/certificatecache.h40
-rw-r--r--src/vm/cgensys.h1
-rw-r--r--src/vm/codeman.cpp135
-rw-r--r--src/vm/codeman.h16
-rw-r--r--src/vm/comsynchronizable.cpp34
-rw-r--r--src/vm/comsynchronizable.h4
-rw-r--r--src/vm/confighelper.cpp309
-rw-r--r--src/vm/confighelper.h203
-rw-r--r--src/vm/corhost.cpp8
-rw-r--r--src/vm/crossgen/wks_crossgen.nativeproj164
-rw-r--r--src/vm/crossgen_mscorlib/mscorlib_crossgen.nativeproj34
-rw-r--r--src/vm/crst.h1
-rw-r--r--src/vm/dac/dacwks.targets168
-rw-r--r--src/vm/dac/dirs.proj18
-rw-r--r--src/vm/dirs.proj20
-rw-r--r--src/vm/dllimport.cpp56
-rw-r--r--src/vm/ecalllist.h489
-rw-r--r--src/vm/eeconfig.h20
-rw-r--r--src/vm/eedbginterface.h2
-rw-r--r--src/vm/eedbginterfaceimpl.cpp2
-rw-r--r--src/vm/eedbginterfaceimpl.h2
-rw-r--r--src/vm/eetoprofinterfaceimpl.cpp12
-rw-r--r--src/vm/eetwain.cpp460
-rw-r--r--src/vm/eventtrace.cpp5
-rw-r--r--src/vm/excep.cpp75
-rw-r--r--src/vm/excep.h23
-rw-r--r--src/vm/exceptionhandling.cpp131
-rw-r--r--src/vm/exceptionhandling.h12
-rw-r--r--src/vm/exinfo.cpp2
-rw-r--r--src/vm/exstate.cpp8
-rw-r--r--src/vm/exstatecommon.h22
-rw-r--r--src/vm/finalizerthread.cpp7
-rw-r--r--src/vm/frames.cpp4
-rw-r--r--src/vm/frames.h20
-rw-r--r--src/vm/gccover.cpp8
-rw-r--r--src/vm/gcenv.ee.cpp60
-rw-r--r--src/vm/gcenv.ee.h2
-rw-r--r--src/vm/gcenv.h2
-rw-r--r--src/vm/gcheaputilities.cpp9
-rw-r--r--src/vm/gcheaputilities.h103
-rw-r--r--src/vm/gchelpers.cpp99
-rw-r--r--src/vm/gchelpers.h4
-rw-r--r--src/vm/gdbjit.cpp182
-rw-r--r--src/vm/gdbjit.h44
-rw-r--r--src/vm/i386/CLRErrorReporting.vrg5
-rw-r--r--src/vm/i386/asmconstants.h34
-rw-r--r--src/vm/i386/asmhelpers.S213
-rw-r--r--src/vm/i386/cgencpu.h24
-rw-r--r--src/vm/i386/cgenx86.cpp277
-rw-r--r--src/vm/i386/excepcpu.h38
-rw-r--r--src/vm/i386/excepx86.cpp125
-rw-r--r--src/vm/i386/gmsx86.cpp2
-rw-r--r--src/vm/i386/jithelp.S27
-rw-r--r--src/vm/i386/umthunkstub.S52
-rw-r--r--src/vm/i386/unixstubs.cpp37
-rw-r--r--src/vm/jitinterface.cpp212
-rw-r--r--src/vm/jitinterface.h2
-rw-r--r--src/vm/metasig.h58
-rw-r--r--src/vm/method.cpp13
-rw-r--r--src/vm/methodtable.cpp20
-rw-r--r--src/vm/methodtablebuilder.cpp27
-rw-r--r--src/vm/mscorlib.cpp22
-rw-r--r--src/vm/mscorlib.h300
-rw-r--r--src/vm/multicorejit.cpp2
-rw-r--r--src/vm/newcompressedstack.cpp1074
-rw-r--r--src/vm/newcompressedstack.h197
-rw-r--r--src/vm/object.cpp15
-rw-r--r--src/vm/object.h219
-rw-r--r--src/vm/prestub.cpp28
-rw-r--r--src/vm/proftoeeinterfaceimpl.cpp8
-rw-r--r--src/vm/reflectclasswriter.cpp125
-rw-r--r--src/vm/reflectioninvocation.cpp21
-rw-r--r--src/vm/rexcep.h6
-rw-r--r--src/vm/security.h4
-rw-r--r--src/vm/security.inl18
-rw-r--r--src/vm/securityattributes.cpp1282
-rw-r--r--src/vm/securitydeclarative.cpp150
-rw-r--r--src/vm/securitydeclarative.h3
-rw-r--r--src/vm/securitydeclarative.inl6
-rw-r--r--src/vm/securitydescriptor.cpp54
-rw-r--r--src/vm/securitydescriptorappdomain.cpp412
-rw-r--r--src/vm/securitydescriptorassembly.cpp229
-rw-r--r--src/vm/securitydescriptorassembly.h4
-rw-r--r--src/vm/securityhostprotection.cpp102
-rw-r--r--src/vm/securityhostprotection.h14
-rw-r--r--src/vm/securityimperative.cpp119
-rw-r--r--src/vm/securityimperative.h36
-rw-r--r--src/vm/securitymeta.cpp1
-rw-r--r--src/vm/securitypolicy.h17
-rw-r--r--src/vm/securityprincipal.cpp227
-rw-r--r--src/vm/securityprincipal.h33
-rw-r--r--src/vm/securitystackwalk.cpp2439
-rw-r--r--src/vm/securitytransparentassembly.cpp6
-rw-r--r--src/vm/siginfo.cpp51
-rw-r--r--src/vm/stackcompressor.cpp378
-rw-r--r--src/vm/stackcompressor.h39
-rw-r--r--src/vm/stackwalk.cpp59
-rw-r--r--src/vm/stackwalk.h2
-rw-r--r--src/vm/stubmgr.h14
-rw-r--r--src/vm/threads.cpp58
-rw-r--r--src/vm/threads.h13
-rw-r--r--src/vm/threadsuspend.cpp37
-rw-r--r--src/vm/vars.cpp5
-rw-r--r--src/vm/vars.hpp9
-rw-r--r--src/vm/vm.settings79
-rw-r--r--src/vm/vm.targets59
-rw-r--r--src/vm/wks/wks.nativeproj22
-rw-r--r--src/vm/wks/wks.targets391
-rw-r--r--src/zap/common.h4
-rw-r--r--src/zap/crossgen/zap_crossgen.nativeproj12
-rw-r--r--src/zap/dirs.proj19
-rw-r--r--src/zap/wks/zap.nativeproj16
-rw-r--r--src/zap/zap.settings.targets52
-rw-r--r--src/zap/zapcode.cpp2
-rw-r--r--src/zap/zapimport.cpp2
-rw-r--r--src/zap/zapimport.h2
-rw-r--r--sync.cmd8
-rw-r--r--tests/dir.props23
-rw-r--r--tests/helixprep.proj155
-rw-r--r--tests/helixpublish.proj67
-rw-r--r--tests/issues.targets1349
-rw-r--r--tests/longRunningGcTests.txt1
-rw-r--r--tests/publishdependency.targets11
-rw-r--r--tests/runtest.cmd25
-rw-r--r--tests/runtest.proj30
-rwxr-xr-xtests/runtest.sh49
-rwxr-xr-xtests/scripts/arm32_ci_script.sh11
-rwxr-xr-xtests/scripts/perf-prep.sh6
-rw-r--r--tests/scripts/run-corefx-tests.py333
-rw-r--r--tests/scripts/run-xunit-perf.cmd4
-rwxr-xr-xtests/scripts/run-xunit-perf.sh37
-rw-r--r--tests/src/CLRTest.Execute.Bash.targets1
-rw-r--r--tests/src/CLRTest.Jit.targets13
-rw-r--r--tests/src/Common/Coreclr.TestWrapper/CoreclrTestWrapperLib.cs17
-rw-r--r--tests/src/Common/build_against_pkg_dependencies/project.json10
-rw-r--r--tests/src/Common/empty/project.json6
-rw-r--r--tests/src/Common/netcoreapp/project.json71
-rw-r--r--tests/src/Common/targeting_pack_ref/project.json8
-rw-r--r--tests/src/Common/test_dependencies/project.json127
-rw-r--r--tests/src/Common/test_runtime/project.json13
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor4.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor6.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor7.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeDate.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeGetHashCode.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeHour.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeMaxValue.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeMillisecond.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeMinValue.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeMinute.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeParse1.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeParse2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeParse3.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact1.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact3.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeSecond.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeSubtract1.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeSubtract2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeTicks.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeTimeOfDay.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeToFileTime.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeToFileTimeUtc.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeToLocalTime.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeToString1.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeToString2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeToString3.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimeUtcNow.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/DateTimetoday.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/cfdatetimetools.cs142
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimecompare.cs250
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimecompareto1.cs250
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimector1.cs342
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimector3.cs521
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimector4.cs638
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimector6.cs570
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimector7.cs689
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimedate.cs144
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimegethashcode.cs141
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimehour.cs99
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimekind.cs221
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimemaxvalue.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimemillisecond.cs124
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeminute.cs95
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeminvalue.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimenow.cs93
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeparse1.cs828
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeparse2.cs216
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeparse3.cs274
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact1.cs964
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact2.cs285
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact3.cs318
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimesecond.cs98
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimesubtract1.cs205
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimesubtract2.cs225
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeticks.cs99
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimetimeofday.cs98
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimetoday.cs95
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimetofiletime.cs126
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimetofiletimeutc.cs126
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimetolocaltime.cs66
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimetostring1.cs122
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimetostring2.cs118
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimetostring3.cs588
-rw-r--r--tests/src/CoreMangLib/cti/system/datetime/datetimeutcnow.cs93
-rw-r--r--tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindLocal.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindUnspecified.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindUtc.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/datetimekind/datetimekindlocal.cs69
-rw-r--r--tests/src/CoreMangLib/cti/system/datetimekind/datetimekindunspecified.cs69
-rw-r--r--tests/src/CoreMangLib/cti/system/datetimekind/datetimekindutc.cs69
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstDay.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstFourDayWeek.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstFullWeek.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstday.cs70
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstfourdayweek.cs70
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstfullweek.cs70
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetNumericValue1.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetNumericValue2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetUnicodeCategory1.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetUnicodeCategory2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetnumericvalue1.cs226
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetnumericvalue2.cs310
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetunicodecategory1.cs944
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetunicodecategory2.cs1040
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareinfo/CompareInfoCompare2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareinfo/CompareInfoIndexOf2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareinfo/compareinfocompare2.cs218
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareinfo/compareinfoindexof2.cs185
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreCase.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreKanaType.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreNonSpace.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreSymbols.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreWidth.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsNone.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsOrdinal.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsOrdinalIgoreCase.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsStringSort.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorecase.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorekanatype.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorenonspace.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignoresymbols.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorewidth.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsnone.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsordinal.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsordinaligorecase.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsstringsort.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoClone.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoEnglishName.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoEquals.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoGetCultureInfo2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoGetHashCode.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoInvariantCulture.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoIsNeutralCulture.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoName.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoNativeName.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoParent.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoReadOnly.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoTextInfo.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoToString.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoTwoLetterISOLanguageName.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoclone.csbin7244 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoenglishname.csbin3738 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoequals.csbin15856 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfogetcultureinfo2.csbin15566 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfogethashcode.csbin10202 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoinvariantculture.csbin3866 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoisneutralculture.csbin7066 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoname.csbin3724 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfonativename.csbin3844 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoparent.csbin8140 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinforeadonly.csbin9148 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotextinfo.csbin7212 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotostring.csbin7288 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotwoletterisolanguagename.csbin8410 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoClone.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoCurrentInfo.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetAbbreviatedMonthName.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetFormat.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetInstance.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetMonthName.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoInvariantInfo.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoIsReadOnly.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoRFC1123Pattern.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoReadOnly.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoSortableDateTimePattern.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/UniversalSortableDateTimePattern.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoclone.cs239
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfocurrentinfo.cs70
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetabbreviatedmonthname.cs277
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetformat.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetinstance.cs195
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetmonthname.cs277
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoinvariantinfo.cs70
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoisreadonly.cs122
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinforeadonly.cs131
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinforfc1123pattern.cs92
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfosortabledatetimepattern.cs93
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfouniversalsortabledatetimepattern.cs93
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStyleAllowInnerWhite.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAdjustToUniversal.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowLeadingWhite.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowTrailingWhite.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowWhiteSpaces.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAssumeLocal.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAssumeUniversal.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesNoCurrentDateDefault.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesNone.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesRoundTripKind.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestyleallowinnerwhite.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesadjusttouniversal.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowleadingwhite.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowtrailingwhite.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowwhitespaces.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesassumelocal.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesassumeuniversal.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesnocurrentdatedefault.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesnone.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesroundtripkind.cs73
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoClone.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCtor.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCurrencyDecimalSeparator.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCurrencyGroupSeparator.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoGetFormat.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoGetInstance.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoReadOnly.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfoclone.cs104
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfoctor.cs103
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfocurrencydecimalseparator.cs193
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfocurrencygroupseparator.cs165
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfogetformat.cs137
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfogetinstance.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinforeadonly.cs107
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowCurrencySymbol.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowDecimalPoint.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowExponent.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowHexSpecifier.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowLeadingSign.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowLeadingWhite.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowParentheses.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowThousands.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowTrailingSign.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowTrailingWhite.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAny.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesCurrency.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesFloat.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesHexNumber.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesInteger.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesNone.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesNumber.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowcurrencysymbol.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowdecimalpoint.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowexponent.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowhexspecifier.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowleadingsign.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowleadingwhite.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowparentheses.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowthousands.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowtrailingsign.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowtrailingwhite.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesany.cs125
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylescurrency.cs124
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesfloat.cs119
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstyleshexnumber.cs112
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesinteger.cs111
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesnone.cs105
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesnumber.cs120
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoEquals.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoGetHashCode.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoISOCurrencySymbol.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoIsMetric.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoName.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoToString.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoTwoLetterISORegionName.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoequals.cs133
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfogethashcode.cs85
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoismetric.cs85
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoisocurrencysymbol.cs153
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoname.cs130
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfotostring.cs107
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfotwoletterisoregionname.cs129
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoCtor1.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoCtor2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoEquals.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetHashCode.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetNextTextElement2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetTextElementEnumerator1.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetTextElementEnumerator2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoLengthInTextElements.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoParseCombiningCharacters.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoString.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoctor1.cs77
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoctor2.cs171
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoequals.cs235
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogethashcode.cs104
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogetnexttextelement2.cs267
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogettextelementenumerator1.cs185
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogettextelementenumerator2.cs257
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfolengthintextelements.cs109
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoparsecombiningcharacters.cs166
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfostring.cs184
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorCurrent.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorElementIndex.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorGetTextElement.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorMoveNext.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorReset.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorcurrent.csbin10394 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorelementindex.csbin7622 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorgettextelement.csbin10562 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratormovenext.csbin5786 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorreset.csbin4652 -> 0 bytes
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoCultureName.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoEquals.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoGetHashCode.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoIsReadOnly.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToString.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToUpper1.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToUpper2.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoculturename.cs104
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoequals.cs243
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfogethashcode.cs108
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoisreadonly.cs103
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotostring.cs102
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotoupper1.cs223
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotoupper2.cs244
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryClosePunctuation.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryConnectorPunctuation.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryControl.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryDashPunctuation.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryDecimalDigitNumber.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryEnclosingMark.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryFinalQuotePunctuation.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryFormat.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryInitialQuotePunctuation.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLetterNumber.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLineSeparator.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLowercaseLetter.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryMathSymbol.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryModifierLetter.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryModifierSymbol.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryNonSpacingMark.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOpenPunctuation.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherLetter.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherNotAssigned.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherNumber.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherPunctuation.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherSymbol.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryParagraphSeparator.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryPrivateUse.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySpaceSeparator.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySpacingCombiningMark.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySurrogate.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryTitlecaseLetter.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryUppercaseLetter.csproj45
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryclosepunctuation.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryconnectorpunctuation.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorycontrol.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorydashpunctuation.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorydecimaldigitnumber.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryenclosingmark.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryfinalquotepunctuation.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryformat.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryinitialquotepunctuation.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryletternumber.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorylineseparator.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorylowercaseletter.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymathsymbol.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymodifierletter.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymodifiersymbol.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorynonspacingmark.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryopenpunctuation.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryotherletter.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothernotassigned.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothernumber.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryotherpunctuation.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothersymbol.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryparagraphseparator.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryprivateuse.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryspaceseparator.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryspacingcombiningmark.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorysurrogate.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorytitlecaseletter.cs57
-rw-r--r--tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryuppercaseletter.cs57
-rw-r--r--tests/src/CoreMangLib/system/datetime/co7510parseexact_formatarray.cs69
-rw-r--r--tests/src/CoreMangLib/system/text/encoding/shift_jis.cs224
-rw-r--r--tests/src/GC/API/GC/TotalMemory.cs1
-rw-r--r--tests/src/GC/Coverage/delete_next_card_table.csproj3
-rwxr-xr-xtests/src/Interop/common/types.h1
-rw-r--r--tests/src/JIT/Directed/shift/uint64Opt.cs178
-rw-r--r--tests/src/JIT/Directed/shift/uint64Opt_d.csproj47
-rw-r--r--tests/src/JIT/Directed/shift/uint64Opt_do.csproj46
-rw-r--r--tests/src/JIT/Directed/shift/uint64Opt_r.csproj47
-rw-r--r--tests/src/JIT/Directed/shift/uint64Opt_ro.csproj46
-rw-r--r--tests/src/JIT/Methodical/fp/exgen/10w5d_cs_d.csproj3
-rw-r--r--tests/src/JIT/Methodical/fp/exgen/10w5d_cs_r.csproj3
-rw-r--r--tests/src/JIT/Methodical/refany/format.cs10
-rw-r--r--tests/src/JIT/Methodical/refany/format.il50
-rw-r--r--tests/src/JIT/Methodical/refany/longsig.il50
-rw-r--r--tests/src/JIT/Methodical/refany/shortsig.il50
-rw-r--r--tests/src/JIT/Methodical/tailcall/Desktop/_il_relthread-race.csproj3
-rw-r--r--tests/src/JIT/Methodical/tailcall_v4/hijacking.ilproj4
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/LICENSE.TXT2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp3.cs142
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csproj2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees3.csproj (renamed from tests/src/CoreMangLib/cti/system/datetime/DateTimeCompare.csproj)23
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide.cs312
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide.csproj (renamed from tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor1.csproj)26
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input-big.txt33337
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input.txt171
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25.txt9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25000.txt4171
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna.csharp-6.cs230
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna.csproj (renamed from tests/src/CoreMangLib/cti/system/datetime/DateTimeCompareTo1.csproj)28
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25.txt9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25000.txt4171
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp.csharp-1.cs250
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp.csproj (renamed from tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor3.csproj)28
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs12
-rw-r--r--tests/src/JIT/Regression/CLR-x86-JIT/V2.0-Beta2/b425314/b425314.csproj4
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_1206929/DevDiv_1206929.cs50
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_1206929/DevDiv_1206929.csproj47
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_359733/DevDiv_359733.il66
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_359733/DevDiv_359733.ilproj41
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_359737/DevDiv_359737.il42
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_359737/DevDiv_359737.ilproj41
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_362706/DevDiv_362706.il162
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_362706/DevDiv_362706.ilproj (renamed from tests/src/CoreMangLib/system/text/encoding/Shift_Jis.csproj)30
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_367099/DevDiv_367099.il99
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_367099/DevDiv_367099.ilproj (renamed from tests/src/CoreMangLib/cti/system/datetime/DateTimeNow.csproj)30
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_370233/DevDiv_370233.il136
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_370233/DevDiv_370233.ilproj (renamed from tests/src/CoreMangLib/cti/system/datetime/DateTimeKind.csproj)30
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_377155/DevDiv_377155.il75
-rw-r--r--tests/src/JIT/Regression/JitBlue/DevDiv_377155/DevDiv_377155.ilproj51
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_7508/Vector3Test.cs152
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_7508/Vector3Test.csproj46
-rw-r--r--tests/src/JIT/Regression/VS-ia64-JIT/V2.0-RTM/b539509/b539509.cs2
-rw-r--r--tests/src/JIT/SIMD/VectorAbs.cs8
-rw-r--r--tests/src/JIT/SIMD/VectorMin.cs1
-rw-r--r--tests/src/JIT/SIMD/VectorReturn.cs164
-rw-r--r--tests/src/JIT/SIMD/VectorUtil.cs2
-rw-r--r--tests/src/JIT/config/benchmark+roslyn/project.json34
-rw-r--r--tests/src/JIT/config/benchmark+serialize/project.json34
-rw-r--r--tests/src/JIT/config/benchmark/project.json45
-rw-r--r--tests/src/JIT/config/extra/project.json38
-rw-r--r--tests/src/JIT/config/minimal/project.json16
-rw-r--r--tests/src/JIT/config/threading+thread/project.json20
-rw-r--r--tests/src/JIT/config/threading/project.json16
-rw-r--r--tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_d.csproj6
-rw-r--r--tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_r.csproj6
-rw-r--r--tests/src/JIT/jit64/opt/cse/hugeexpr1.csproj4
-rw-r--r--tests/src/JIT/jit64/regress/vsw/539509/test1.cs2
-rw-r--r--tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_d.csproj3
-rw-r--r--tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_r.csproj3
-rw-r--r--tests/src/TestWrappersConfig/project.json9
-rw-r--r--tests/src/dir.common.props2
-rw-r--r--tests/src/dir.props11
-rw-r--r--tests/src/dirs.proj6
-rw-r--r--tests/src/jit/Performance/CodeQuality/Span/SpanBench.cs468
-rw-r--r--tests/src/jit/Performance/CodeQuality/Span/SpanBench.csproj (renamed from tests/src/CoreMangLib/system/datetime/Co7510ParseExact_formatarray.csproj)21
-rw-r--r--tests/src/managed/Compilation/HelloWorld.cs2
-rw-r--r--tests/src/performance/project.json42
-rw-r--r--tests/src/readytorun/main.cs5
-rw-r--r--tests/src/readytorun/test.cs7
-rw-r--r--tests/testsFailingOutsideWindows.txt2
-rw-r--r--tests/testsUnsupportedOnARM32.txt1
-rw-r--r--tests/x86_jit32_issues.targets3
-rw-r--r--tests/x86_legacy_backend_issues.targets3
3100 files changed, 85024 insertions, 173930 deletions
diff --git a/.gitattributes b/.gitattributes
index ea1c23bb34..519ecbb037 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -66,3 +66,11 @@
*.sh text eol=lf
src/pal/tests/palsuite/paltestlist.txt text eol=lf
src/pal/tests/palsuite/paltestlist_to_be_reviewed.txt text eol=lf
+
+tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25.txt text eol=lf
+tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25000.txt text eol=lf
+tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25.txt text eol=lf
+tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25000.txt text eol=lf
+tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input.txt text eol=lf
+tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input-big.txt text eol=lf
+
diff --git a/BuildToolsVersion.txt b/BuildToolsVersion.txt
index f2717879e1..49acdc6889 100644
--- a/BuildToolsVersion.txt
+++ b/BuildToolsVersion.txt
@@ -1 +1 @@
-1.0.27-prerelease-01008-01 \ No newline at end of file
+1.0.27-prerelease-01209-01
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 61c689b6d0..c9a75e521a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -103,7 +103,7 @@ else (WIN32)
# Ensure that objcopy is present
if (DEFINED ENV{CROSSCOMPILE} AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD)
if (CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l OR CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
- find_program(OBJCOPY ${TOOLCHAIN}-objcopy)
+ find_program(OBJCOPY ${TOOLCHAIN_PREFIX}objcopy)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686)
find_program(OBJCOPY objcopy)
else()
@@ -129,7 +129,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux)
set(CLR_CMAKE_PLATFORM_UNIX 1)
if(CLR_CROSS_COMPONENTS_BUILD)
# CMAKE_HOST_SYSTEM_PROCESSOR returns the value of `uname -p` on host.
- if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64)
+ if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL amd64)
if(CLR_CMAKE_TARGET_ARCH STREQUAL "arm")
set(CLR_CMAKE_PLATFORM_UNIX_X86 1)
else()
@@ -544,17 +544,15 @@ include(pgosupport.cmake)
# - project which require platform header not clr's
# - do not depend on clr's compile definitions
#-----------------------------------------
-if(CLR_CMAKE_PLATFORM_UNIX)
+if(CLR_CMAKE_PLATFORM_UNIX AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD)
add_subdirectory(src/corefx)
-endif(CLR_CMAKE_PLATFORM_UNIX)
+endif()
if(CLR_CMAKE_PLATFORM_UNIX)
- add_subdirectory(src/ToolBox/SOS/lldbplugin)
- if(NOT DEFINED CLR_CROSS_COMPONENTS_BUILD)
+ add_subdirectory(src/ToolBox/SOS/lldbplugin)
add_subdirectory(src/pal)
- endif(NOT DEFINED CLR_CROSS_COMPONENTS_BUILD)
- add_subdirectory(src/coreclr/hosts)
- add_subdirectory(src/ildasm/unixcoreclrloader)
+ add_subdirectory(src/coreclr/hosts)
+ add_subdirectory(src/ildasm/unixcoreclrloader)
endif(CLR_CMAKE_PLATFORM_UNIX)
# Add this subdir. We install the headers for the jit.
@@ -581,6 +579,14 @@ endif(WIN32)
include_directories("src/pal/prebuilt/inc")
include_directories("bin/obj")
+if(FEATURE_STANDALONE_GC)
+ add_definitions(-DFEATURE_STANDALONE_GC)
+
+ if(CLR_CMAKE_PLATFORM_UNIX)
+ add_subdirectory(src/gc/unix)
+ endif(CLR_CMAKE_PLATFORM_UNIX)
+endif(FEATURE_STANDALONE_GC)
+
if (CLR_CMAKE_PLATFORM_UNIX)
include_directories("src/pal/inc")
include_directories("src/pal/inc/rt")
diff --git a/Documentation/botr/clr-abi.md b/Documentation/botr/clr-abi.md
index caa5c7add9..6719522409 100644
--- a/Documentation/botr/clr-abi.md
+++ b/Documentation/botr/clr-abi.md
@@ -50,7 +50,7 @@ Managed varargs are not supported in .NET Core.
## Generics
-*Shared generics*. In cases where the code address does not uniquely identify a generic instantiation of a method, then a 'generic instantiation parameter' is required. Often the "this" pointer can serve dual-purpose as the instantiation parameter. When the "this" pointer is not the generic parameter, the generic parameter is passed as the next argument (after the optional return buffer and the optional "this" pointer, but before any user arguments). For generic methods (where there is a type parameter directly on the method, as compared to the type), the generic parameter currently is a MethodDesc pointer (I believe an InstantiatedMethodDesc). For static methods (where there is no "this" pointer) the generic parameter is a MethodTable pointer/TypeHandle.
+*Shared generics*. In cases where the code address does not uniquely identify a generic instantiation of a method, then a 'generic instantiation parameter' is required. Often the "this" pointer can serve dual-purpose as the instantiation parameter. When the "this" pointer is not the generic parameter, the generic parameter is passed as an additional argument. On ARM, ARM64 and AMD64, it is passed after the optional return buffer and the optional "this" pointer, but before any user arguments. On x86, if all arguments of the function including "this" pointer fit into argument registers (ECX and EDX) and we still have argument registers available, we store the hidden argument in the next available argument register. Otherwise it is passed as the last stack argument. For generic methods (where there is a type parameter directly on the method, as compared to the type), the generic parameter currently is a MethodDesc pointer (I believe an InstantiatedMethodDesc). For static methods (where there is no "this" pointer) the generic parameter is a MethodTable pointer/TypeHandle.
Sometimes the VM asks the JIT to report and keep alive the generics parameter. In this case, it must be saved on the stack someplace and kept alive via normal GC reporting (if it was the "this" pointer, as compared to a MethodDesc or MethodTable) for the entire method except the prolog and epilog. Also note that the code to home it, must be in the range of code reported as the prolog in the GC info (which probably isn't the same as the range of code reported as the prolog in the unwind info).
@@ -139,17 +139,19 @@ This section describes the conventions the JIT needs to follow when generating c
## Funclets
-For non-x86 platforms, all managed EH handlers (finally, fault, filter, filter-handler, and catch) are extracted into their own 'funclets'. To the OS they are treated just like first class functions (separate PDATA and XDATA (`RUNTIME_FUNCTION` entry), etc.). The CLR currently treats them just like part of the parent function in many ways. The main function and all funclets must be allocated in a single code allocation (see hot cold splitting). They 'share' GC info. Only the main function prolog can be hot patched.
+For all platforms except Windows/x86, all managed EH handlers (finally, fault, filter, filter-handler, and catch) are extracted into their own 'funclets'. To the OS they are treated just like first class functions (separate PDATA and XDATA (`RUNTIME_FUNCTION` entry), etc.). The CLR currently treats them just like part of the parent function in many ways. The main function and all funclets must be allocated in a single code allocation (see hot cold splitting). They 'share' GC info. Only the main function prolog can be hot patched.
The only way to enter a handler funclet is via a call. In the case of an exception, the call is from the VM's EH subsystem as part of exception dispatch/unwind. In the non-exceptional case, this is called local unwind or a non-local exit. In C# this is accomplished by simply falling-through/out of a try body or an explicit goto. In IL this is always accomplished via a LEAVE opcode, within a try body, targeting an IL offset outside the try body. In such cases the call is from the JITed code of the parent function.
-For x86, all handlers are generated within the method body, typically in lexical order. A nested try/catch is generated completely within the EH region in which it is nested. These handlers are essentially "in-line funclets", but they do not look like normal functions: they do not have a normal prolog or epilog, although they do have special entry/exit and register conventions. Also, nested handlers are not un-nested as for funclets: the code for a nested handler is generated within the handler in which it is nested.
+For Windows/x86, all handlers are generated within the method body, typically in lexical order. A nested try/catch is generated completely within the EH region in which it is nested. These handlers are essentially "in-line funclets", but they do not look like normal functions: they do not have a normal prolog or epilog, although they do have special entry/exit and register conventions. Also, nested handlers are not un-nested as for funclets: the code for a nested handler is generated within the handler in which it is nested.
## Cloned finallys
JIT64 attempts to speed the normal control flow by 'inlining' a called finally along the 'normal' control flow (i.e., leaving a try body in a non-exceptional manner via C# fall-through). Because the VM semantics for non-rude Thread.Abort dictate that handlers will not be aborted, the JIT must mark these 'inlined' finally bodies. These show up as special entries at the end of the EH tables and are marked with `COR_ILEXCEPTION_CLAUSE_FINALLY | COR_ILEXCEPTION_CLAUSE_DUPLICATED`, and the try_start, try_end, and handler_start are all the same: the start of the cloned finally.
-JIT32 and RyuJIT currently do not implement finally cloning.
+RyuJit also implements finally cloning, for all supported architectures. However, the implementation does not yet handle the thread abort case; cloned finally bodies are not guaranteed to remain intact and are not reported to the runtime. Because of this, finally cloning is disabled for VMs that support thread abort (desktop clr).
+
+JIT32 does not implement finally cloning.
## Invoking Finallys/Non-local exits
@@ -283,7 +285,7 @@ The PSPSym is a pointer-sized local variable in the frame of the main function a
The VM uses the PSPSym to find other locals it cares about (such as the generics context in a funclet frame). The JIT uses it to re-establish the frame pointer register, so that the frame pointer is the same value in a funclet as it is in the main function body.
-When a funclet is called, it is passed the *Establisher Frame Pointer*. For AMD64 this is true for all funclets and it is passed as the first argument in RCX, but for ARM and ARM64 this is only true for first pass funclets (currently just filters) and it is passed as the second argument in R1. The Establisher Frame Pointer is a stack pointer of an interesting "parent" frame in the exception processing system. For the CLR, it points either to the main function frame or a dynamically enclosing funclet frame from the same function, for the funclet being invoked. The value of the Establisher Frame Pointer is Initial-SP on AMD64, Caller-SP on ARM and ARM64.
+When a funclet is called, it is passed the *Establisher Frame Pointer*. For AMD64 this is true for all funclets and it is passed as the first argument in RCX, but for ARM and ARM64 this is only true for first pass funclets (currently just filters) and it is passed as the second argument in R1. The Establisher Frame Pointer is a stack pointer of an interesting "parent" frame in the exception processing system. For the CLR, it points either to the main function frame or a dynamically enclosing funclet frame from the same function, for the funclet being invoked. The value of the Establisher Frame Pointer is Initial-SP on AMD64, Caller-SP on x86, ARM, and ARM64.
Using the establisher frame, the funclet wants to load the value of the PSPSym. Since we don't know if the Establisher Frame is from the main function or a funclet, we design the main function and funclet frame layouts to place the PSPSym at an identical, small, constant offset from the Establisher Frame in each case. (This is also required because we only report a single offset to the PSPSym in the GC information, and that offset must be valid for the main function and all of its funclets). Then, the funclet uses this known offset to compute the PSPSym address and read its value. From this, it can compute the value of the frame pointer (which is a constant offset from the PSPSym value) and set the frame register to be the same as the parent function. Also, the funclet writes the value of the PSPSym to its own frame's PSPSym. This "copying" of the PSPSym happens for every funclet invocation, in particular, for every nested funclet invocation.
@@ -331,9 +333,9 @@ When a funclet finishes execution, and the VM returns execution to the function
Any register value changes made in the funclet are lost. If a funclet wants to make a variable change known to the main function (or the funclet that contains the "try" region), that variable change needs to be made to the shared main function stack frame.
-## x86 EH considerations
+## Windows/x86 EH considerations
-The x86 model is somewhat different than the non-x86 model. X86-specific concerns are mentioned here.
+The Windows/x86 model is somewhat different than non-Windows/x86 model. Windows/X86-specific concerns are mentioned here.
### catch / filter-handler regions
diff --git a/Documentation/building/android.md b/Documentation/building/android.md
new file mode 100644
index 0000000000..cfb509dc2f
--- /dev/null
+++ b/Documentation/building/android.md
@@ -0,0 +1,102 @@
+Cross Compilation for Android on Linux
+======================================
+
+Through cross compilation, on Linux it is possible to build CoreCLR for arm64 Android.
+
+Requirements
+------------
+
+You'll need to generate a toolchain and a sysroot for Android. There's a script which takes care of the required steps.
+
+Generating the rootfs
+---------------------
+
+To generate the rootfs, run the following command in the `coreclr` folder:
+
+```
+cross/init-android-rootfs.sh
+```
+
+This will download the NDK and any packages required to compile Android on your system. It's over 1 GB of data, so it may take a while.
+
+
+Cross compiling CoreCLR
+-----------------------
+Once the rootfs has been generated, it will be possible to cross compile CoreCLR.
+
+When cross compiling, you need to set both the `CONFIG_DIR` and `ROOTFS_DIR` variables.
+
+To compile for arm64, run:
+
+```
+CONFIG_DIR=`realpath cross/android/arm64` ROOTFS_DIR=`realpath cross/android-rootfs/toolchain/arm64/sysroot` ./build.sh cross arm64 skipgenerateversion skipmscorlib cmakeargs -DENABLE_LLDBPLUGIN=0
+```
+
+The resulting binaries will be found in `bin/Product/Linux.BuildArch.BuildType/`
+
+Running the PAL tests on Android
+--------------------------------
+
+You can run the PAL tests on an Android device. To run the tests, you first copy the PAL tests to your Android phone using
+`adb`, and then run them in an interactive Android shell using `adb shell`:
+
+To copy the PAL tests over to an Android phone:
+```
+adb push bin/obj/Linux.arm64.Debug/src/pal/tests/palsuite/ /data/local/tmp/coreclr/src/pal/tests/palsuite
+adb push cross/android/toolchain/arm64/sysroot/usr/lib/libuuid.so.1 /data/local/tmp/coreclr/lib
+adb push cross/android/toolchain/arm64/sysroot/usr/lib/libintl.so /data/local/tmp/coreclr/lib
+adb push cross/android/toolchain/arm64/sysroot/usr/lib/libandroid-support.so /data/local/tmp/coreclr/lib/
+adb push cross/android/toolchain/arm64/sysroot/usr/lib/libandroid-glob.so /data/local/tmp/coreclr/lib/
+adb push src/pal/tests/palsuite/paltestlist.txt /data/local/tmp/coreclr
+adb push src/pal/tests/palsuite/runpaltests.sh /data/local/tmp/coreclr/
+```
+
+Then, use `adb shell` to launch a shell on Android. Inside that shell, you can launch the PAL tests:
+```
+LD_LIBRARY_PATH=/data/local/tmp/coreclr/lib ./runpaltests.sh /data/local/tmp/coreclr/
+```
+
+Debugging coreclr on Android
+----------------------------
+
+You can debug coreclr on Android using a remote lldb server which you run on your Android device.
+
+First, push the lldb server to Android:
+
+```
+adb push cross/android/lldb/2.2/android/arm64-v8a/lldb-server /data/local/tmp/
+```
+
+Then, launch the lldb server on the Android device. Open a shell using `adb shell` and run:
+
+```
+adb shell
+cd /data/local/tmp
+./lldb-server platform --listen *:1234
+```
+
+After that, you'll need to forward port 1234 from your Android device to your PC:
+```
+adb forward tcp:1234 tcp:1234
+```
+
+Finally, install lldb on your PC and connect to the debug server running on your Android device:
+
+```
+lldb-3.9
+(lldb) platform select remote-android
+ Platform: remote-android
+ Connected: no
+(lldb) platform connect connect://localhost:1234
+ Platform: remote-android
+ Triple: aarch64-*-linux-android
+OS Version: 23.0.0 (3.10.84-perf-gf38969a)
+ Kernel: #1 SMP PREEMPT Fri Sep 16 11:29:29 2016
+ Hostname: localhost
+ Connected: yes
+WorkingDir: /data/local/tmp
+
+(lldb) target create coreclr/pal/tests/palsuite/file_io/CopyFileA/test4/paltest_copyfilea_test4
+(lldb) env LD_LIBRARY_PATH=/data/local/tmp/coreclr/lib
+(lldb) run
+```
diff --git a/Documentation/building/cross-building.md b/Documentation/building/cross-building.md
index ab5897a24a..30c7aca741 100644
--- a/Documentation/building/cross-building.md
+++ b/Documentation/building/cross-building.md
@@ -21,11 +21,12 @@ and conversely for arm64:
Generating the rootfs
---------------------
-The `cross\build-rootfs.sh` script can be used to download the files needed for cross compilation. It will generate an Ubuntu 14.04 rootfs as this is what CoreCLR targets.
+The `cross\build-rootfs.sh` script can be used to download the files needed for cross compilation. It will generate an rootfs as this is what CoreCLR targets.
- Usage: build-rootfs.sh [BuildArch] [UbuntuCodeName]
- BuildArch can be: arm, arm-softfp, arm64
- UbuntuCodeName - optional, Code name for Ubuntu, can be: trusty(default), vivid, wily
+ Usage: ./cross/build-rootfs.sh [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount]
+ BuildArch can be: arm(default), armel, arm64, x86
+ LinuxCodeName - optional, Code name for Linux, can be: trusty(default), vivid, wily, xenial. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen.
+ lldbx.y - optional, LLDB version, can be: lldb3.6(default), lldb3.8
The `build-rootfs.sh` script must be run as root as it has to make some symlinks to the system, it will by default generate the rootfs in `cross\rootfs\<BuildArch>` however this can be changed by setting the `ROOTFS_DIR` environment variable.
@@ -33,7 +34,7 @@ For example, to generate an arm rootfs:
ben@ubuntu ~/git/coreclr/ $ sudo ./cross/build-rootfs.sh arm
-You can choose Ubuntu code name to match your target, give `vivid` for `15.04`, `wily` for `15.10`. Default is `trusty`, version `14.04`.
+You can choose Linux code name to match your target, give `vivid` for `Ubuntu 15.04`, `wily` for `Ubuntu 15.10`. Default is `trusty`, version `Ubuntu 14.04`.
ben@ubuntu ~/git/coreclr/ $ sudo ./cross/build-rootfs.sh arm wily
@@ -41,6 +42,18 @@ and if you wanted to generate the rootfs elsewhere:
ben@ubuntu ~/git/coreclr/ $ sudo ROOTFS_DIR=/home/ben/coreclr-cross/arm ./cross/build-rootfs.sh arm
+For example, to generate an armel rootfs:
+
+ hqu@ubuntu ~/git/coreclr/ $ sudo ./cross/build-rootfs.sh armel
+
+You can choose code name to match your target, give `jessie` for `Debian`, `tizen` for `Tizen`. Default is `jessie`.
+
+ hque@ubuntu ~/git/coreclr/ $ sudo ./cross/build-rootfs.sh armel tizen
+
+and if you wanted to generate the rootfs elsewhere:
+
+ hque@ubuntu ~/git/coreclr/ $ sudo ROOTFS_DIR=/home/ben/coreclr-cross/armel ./cross/build-rootfs.sh armel tizen
+
Cross compiling CoreCLR
-----------------------
@@ -117,7 +130,7 @@ prajwal@ubuntu ~/coreclr $ ./tests/scripts/arm32_ci_script.sh \
--skipTests
```
-The Linux ARM Emulator is based on soft floating point and thus the native binaries in coreclr are built for the arm-softfp architecture. The coreclr binaries generated by the above command (native and mscorlib) can be found at `~/coreclr/bin/Product/Linux.arm-softfp.Release`.
+The Linux ARM Emulator is based on soft floating point and thus the native binaries in coreclr are built for the armel architecture. The coreclr binaries generated by the above command (native and mscorlib) can be found at `~/coreclr/bin/Product/Linux.armel.Release`.
To build libcoreclr and mscorlib, and run selected coreclr unit tests on the emulator, do the following:
* Download the latest Coreclr unit test binaries (or build on Windows) from here: [Debug](http://dotnet-ci.cloudapp.net/job/dotnet_coreclr/job/master/job/debug_windows_nt_bld/lastSuccessfulBuild/artifact/bin/tests/tests.zip) and [Release](http://dotnet-ci.cloudapp.net/job/dotnet_coreclr/job/master/job/release_windows_nt_bld/lastSuccessfulBuild/artifact/bin/tests/tests.zip).
diff --git a/Documentation/building/testing-with-corefx.md b/Documentation/building/testing-with-corefx.md
index 4f9886f78d..defc8f8e8b 100644
--- a/Documentation/building/testing-with-corefx.md
+++ b/Documentation/building/testing-with-corefx.md
@@ -3,18 +3,23 @@ Testing with CoreFX
It may be valuable to use CoreFX tests to validate your changes to CoreCLR or mscorlib.
-**Windows**
+**NOTE:** The `BUILDTOOLS_OVERRIDE_RUNTIME` property no longer works.
-As part of building tests, CoreFX restores a copy of the runtime from myget, in order to update the runtime that is deployed, a special build property `BUILDTOOLS_OVERRIDE_RUNTIME` can be used. If this is set, the CoreFX testing targets will copy all the files in the folder it points to into the test folder, overwriting any files that exist.
+**Replace runtime between build.[cmd|sh] and build-tests.[cmd|sh]**
-To run tests, follow the procedure for [running tests in CoreFX](https://github.com/dotnet/corefx/blob/master/Documentation/building/windows-instructions.md). You can pass `/p:BUILDTOOLS_OVERRIDE_RUNTIME=<path-to-coreclr>\bin\Product\Windows_NT.x64.Release` to build.cmd to set this property, e.g. (note the space between the "--" and the "/p" option):
+Use the following instructions to test a change to the dotnet/coreclr repo using dotnet/corefx tests. Refer to the [CoreFx Developer Guide](https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/developer-guide.md) for information about CoreFx build scripts.
-```
-build.cmd -Release -- /p:BUILDTOOLS_OVERRIDE_RUNTIME=<root of coreclr repo>\bin\Product\Windows_NT.x64.Checked
-```
+1. Build the CoreClr runtime you wish to test under `<coreclr_root>`
+2. Build the CoreFx repo (`build.[cmd|sh]`) under `<corefx_root>`, but don't build tests yet
+3. Copy the contents of the CoreCLR binary root you wish to test into the CoreFx runtime folder (`<flavor>` below) created in step #2. For example:
-**FreeBSD, Linux, NetBSD, OS X**
+ `copy <coreclr_root>\bin\Product\Windows_NT.<arch>.<build_type>\* <corefx_root>\bin\runtime\<flavor>`
+ -or-
+ `cp <coreclr_root>/bin/Product/<os>.<arch>.<build_type>/* <corefx_root>/bin/runtime/<flavor>`
+
+4. Run the CoreFx `build-tests.[cmd|sh]` script as described in the Developer Guide.
+
+**CI Script**
+
+[run-corefx-tests.py](https://github.com/dotnet/coreclr/blob/master/tests/scripts/run-corefx-tests.py) will clone dotnet/corefx and run steps 2-4 above automatically. It is primarily intended to be run by the dotnet/coreclr CI system, but it might provide a useful reference or shortcut for individuals running the tests locally.
-Refer to the procedure for [running tests in CoreFX](https://github.com/dotnet/corefx/blob/master/Documentation/building/cross-platform-testing.md)
-- Note the --coreclr-bins and --mscorlib-bins arguments to [run-test.sh](https://github.com/dotnet/corefx/blob/master/run-test.sh)
-- Pass in paths to your private build of CoreCLR
diff --git a/Documentation/building/unix-test-instructions.md b/Documentation/building/unix-test-instructions.md
index 9cf7507443..563c3e8c68 100644
--- a/Documentation/building/unix-test-instructions.md
+++ b/Documentation/building/unix-test-instructions.md
@@ -36,8 +36,7 @@ Run tests (`Debug` may be replaced with `Release` or `Checked`, depending on whi
> --testNativeBinDir=~/coreclr/bin/obj/Linux.x64.Debug/tests
> --coreClrBinDir=~/coreclr/bin/Product/Linux.x64.Debug
> --mscorlibDir=/media/coreclr/bin/Product/Linux.x64.Debug
-> --coreFxBinDir="~/corefx/bin/Linux.AnyCPU.Debug;~/corefx/bin/Unix.AnyCPU.Debug;~/corefx/bin/AnyOS.AnyCPU.Debug"
-> --coreFxNativeBinDir=~/corefx/bin/Linux.x64.Debug
+> --coreFxBinDir=~/corefx/bin/runtime/netcoreapp-Linux-Debug-x64
> ```
The method above will copy dependencies from the set of directories provided to create an 'overlay' directory.
diff --git a/Documentation/design-docs/finally-optimizations.md b/Documentation/design-docs/finally-optimizations.md
new file mode 100644
index 0000000000..d35d5a47bd
--- /dev/null
+++ b/Documentation/design-docs/finally-optimizations.md
@@ -0,0 +1,487 @@
+Finally Optimizations
+=====================
+
+In MSIL, a try-finally is a construct where a block of code
+(the finally) is guaranteed to be executed after control leaves a
+protected region of code (the try) either normally or via an
+exception.
+
+In RyuJit a try-finally is currently implemented by transforming the
+finally into a local function that is invoked via jitted code at normal
+exits from the try block and is invoked via the runtime for exceptional
+exits from the try block.
+
+For x86 the local function is simply a part of the method and shares
+the same stack frame with the method. For other architectures the
+local function is promoted to a potentially separable "funclet"
+which is almost like a regular function with a prolog and epilog. A
+custom calling convention gives the funclet access to the parent stack
+frame.
+
+In this proposal we outline three optimizations for finallys: removing
+empty trys, removing empty finallys and finally cloning.
+
+Empty Finally Removal
+---------------------
+
+An empty finally is one that has no observable effect. These often
+arise from `foreach` or `using` constructs (which induce a
+try-finally) where the cleanup method called in the finally does
+nothing. Often, after inlining, the empty finally is readily apparent.
+
+For example, this snippet of C# code
+```C#
+static int Sum(List<int> x) {
+ int sum = 0;
+ foreach(int i in x) {
+ sum += i;
+ }
+ return sum;
+}
+```
+produces the following jitted code:
+```asm
+; Successfully inlined Enumerator[Int32][System.Int32]:Dispose():this
+; (1 IL bytes) (depth 1) [below ALWAYS_INLINE size]
+G_M60484_IG01:
+ 55 push rbp
+ 57 push rdi
+ 56 push rsi
+ 4883EC50 sub rsp, 80
+ 488D6C2460 lea rbp, [rsp+60H]
+ 488BF1 mov rsi, rcx
+ 488D7DD0 lea rdi, [rbp-30H]
+ B906000000 mov ecx, 6
+ 33C0 xor rax, rax
+ F3AB rep stosd
+ 488BCE mov rcx, rsi
+ 488965C0 mov qword ptr [rbp-40H], rsp
+
+G_M60484_IG02:
+ 33C0 xor eax, eax
+ 8945EC mov dword ptr [rbp-14H], eax
+ 8B01 mov eax, dword ptr [rcx]
+ 8B411C mov eax, dword ptr [rcx+28]
+ 33D2 xor edx, edx
+ 48894DD0 mov gword ptr [rbp-30H], rcx
+ 8955D8 mov dword ptr [rbp-28H], edx
+ 8945DC mov dword ptr [rbp-24H], eax
+ 8955E0 mov dword ptr [rbp-20H], edx
+
+G_M60484_IG03:
+ 488D4DD0 lea rcx, bword ptr [rbp-30H]
+ E89B35665B call Enumerator[Int32][System.Int32]:MoveNext():bool:this
+ 85C0 test eax, eax
+ 7418 je SHORT G_M60484_IG05
+
+; Body of foreach loop
+
+G_M60484_IG04:
+ 8B4DE0 mov ecx, dword ptr [rbp-20H]
+ 8B45EC mov eax, dword ptr [rbp-14H]
+ 03C1 add eax, ecx
+ 8945EC mov dword ptr [rbp-14H], eax
+ 488D4DD0 lea rcx, bword ptr [rbp-30H]
+ E88335665B call Enumerator[Int32][System.Int32]:MoveNext():bool:this
+ 85C0 test eax, eax
+ 75E8 jne SHORT G_M60484_IG04
+
+; Normal exit from the implicit try region created by `foreach`
+; Calls the finally to dispose of the iterator
+
+G_M60484_IG05:
+ 488BCC mov rcx, rsp
+ E80C000000 call G_M60484_IG09 // call to finally
+
+G_M60484_IG06:
+ 90 nop
+
+G_M60484_IG07:
+ 8B45EC mov eax, dword ptr [rbp-14H]
+
+G_M60484_IG08:
+ 488D65F0 lea rsp, [rbp-10H]
+ 5E pop rsi
+ 5F pop rdi
+ 5D pop rbp
+ C3 ret
+
+; Finally funclet. Note it simply sets up and then tears down a stack
+; frame. The dispose method was inlined and is empty.
+
+G_M60484_IG09:
+ 55 push rbp
+ 57 push rdi
+ 56 push rsi
+ 4883EC30 sub rsp, 48
+ 488B6920 mov rbp, qword ptr [rcx+32]
+ 48896C2420 mov qword ptr [rsp+20H], rbp
+ 488D6D60 lea rbp, [rbp+60H]
+
+G_M60484_IG10:
+ 4883C430 add rsp, 48
+ 5E pop rsi
+ 5F pop rdi
+ 5D pop rbp
+ C3 ret
+```
+
+In such cases the try-finally can be removed, leading to code like the following:
+```asm
+G_M60484_IG01:
+ 57 push rdi
+ 56 push rsi
+ 4883EC38 sub rsp, 56
+ 488BF1 mov rsi, rcx
+ 488D7C2420 lea rdi, [rsp+20H]
+ B906000000 mov ecx, 6
+ 33C0 xor rax, rax
+ F3AB rep stosd
+ 488BCE mov rcx, rsi
+
+G_M60484_IG02:
+ 33F6 xor esi, esi
+ 8B01 mov eax, dword ptr [rcx]
+ 8B411C mov eax, dword ptr [rcx+28]
+ 48894C2420 mov gword ptr [rsp+20H], rcx
+ 89742428 mov dword ptr [rsp+28H], esi
+ 8944242C mov dword ptr [rsp+2CH], eax
+ 89742430 mov dword ptr [rsp+30H], esi
+
+G_M60484_IG03:
+ 488D4C2420 lea rcx, bword ptr [rsp+20H]
+ E8A435685B call Enumerator[Int32][System.Int32]:MoveNext():bool:this
+ 85C0 test eax, eax
+ 7414 je SHORT G_M60484_IG05
+
+G_M60484_IG04:
+ 8B4C2430 mov ecx, dword ptr [rsp+30H]
+ 03F1 add esi, ecx
+ 488D4C2420 lea rcx, bword ptr [rsp+20H]
+ E89035685B call Enumerator[Int32][System.Int32]:MoveNext():bool:this
+ 85C0 test eax, eax
+ 75EC jne SHORT G_M60484_IG04
+
+G_M60484_IG05:
+ 8BC6 mov eax, esi
+
+G_M60484_IG06:
+ 4883C438 add rsp, 56
+ 5E pop rsi
+ 5F pop rdi
+ C3 ret
+```
+
+Empty finally removal is unconditionally profitable: it should always
+reduce code size and improve code speed.
+
+Empty Try Removal
+---------------------
+
+If the try region of a try-finally is empty, and the jitted code will
+execute on a runtime that does not protect finally execution from
+thread abort, then the try-finally can be replaced with just the
+content of the finally.
+
+Empty trys with non-empty finallys often exist in code that must run
+under both thread-abort aware and non-thread-abort aware runtimes. In
+the former case the placement of cleanup code in the finally ensures
+that the cleanup code will execute fully. But if thread abort is not
+possible, the extra protection offered by the finally is not needed.
+
+Empty try removal looks for try-finallys where the try region does
+nothing except invoke the finally. There are currently two different
+EH implementation models, so the try screening has two cases:
+
+* callfinally thunks (x64/arm64): the try must be a single empty
+basic block that always jumps to a callfinally that is the first
+half of a callfinally/always pair;
+* non-callfinally thunks (x86/arm32): the try must be a
+callfinally/always pair where the first block is an empty callfinally.
+
+The screening then verifies that the callfinally identified above is
+the only callfinally for the try. No other callfinallys are expected
+because this try cannot have multiple leaves and its handler cannot be
+reached by nested exit paths.
+
+When the empty try is identified, the jit modifies the
+callfinally/always pair to branch to the handler, modifies the
+handler's return to branch directly to the continuation (the
+branch target of the second half of the callfinally/always pair),
+updates various status flags on the blocks, and then removes the
+try-finally region.
+
+Finally Cloning
+---------------
+
+Finally cloning is an optimization where the jit duplicates the code
+in the finally for one or more of the normal exit paths from the try,
+and has those exit points branch to the duplicated code directly,
+rather than calling the finally. This transformation allows for
+improved performance and optimization of the common case where the try
+completes without an exception.
+
+Finally cloning also allows hot/cold splitting of finally bodies: the
+cloned finally code covers the normal try exit paths (the hot cases)
+and can be placed in the main method region, and the original finally,
+now used largely or exclusively for exceptional cases (the cold cases)
+spilt off into the cold code region. Without cloning, RyuJit
+would always treat the finally as cold code.
+
+Finally cloning will increase code size, though often the size
+increase is mitigated somewhat by more compact code generation in the
+try body and streamlined invocation of the cloned finallys.
+
+Try-finally regions may have multiple normal exit points. For example
+the following `try` has two: one at the `return 3` and one at the try
+region end:
+
+```C#
+try {
+ if (p) return 3;
+ ...
+}
+finally {
+ ...
+}
+return 4;
+```
+
+Here the finally must be executed no matter how the try exits. So
+there are to two normal exit paths from the try, both of which pass
+through the finally but which then diverge. The fact that some try
+regions can have multiple exits opens the potential for substantial
+code growth from finally cloning, and so leads to a choice point in
+the implementation:
+
+* Share the clone along all exit paths
+* Share the clone along some exit paths
+* Clone along all exit paths
+* Clone along some exit paths
+* Only clone along one exit path
+* Only clone when there is one exit path
+
+The shared clone option must essentially recreate or simulate the
+local call mechanism for the finally, though likely somewhat more
+efficiently. Each exit point must designate where control should
+resume once the shared finally has finished. For instance the jit
+could introduce a new local per try-finally to determine where the
+cloned finally should resume, and enumerate the possibilities using a
+small integer. The end of the cloned finally would then use a switch
+to determine what code to execute next. This has the downside of
+introducing unrealizable paths into the control flow graph.
+
+Cloning along all exit paths can potentially lead to large amounts of
+code growth.
+
+Cloning along some paths or only one path implies that some normal
+exit paths won't be as well optimized. Nonetheless cloning along one
+path was the choice made by JIT64 and the one we recommend for
+implementation. In particular we suggest only cloning along the end of
+try region exit path, so that any early exit will continue to invoke
+the funclet for finally cleanup (unless that exit happens to have the
+same post-finally continuation as the end try region exit, in which
+case it can simply jump to the cloned finally).
+
+One can imagine adaptive strategies. The size of the finally can
+be roughly estimated and the number of clones needed for full cloning
+readily computed. Selective cloning can be based on profile
+feedback or other similar mechanisms for choosing the profitable
+cases.
+
+The current implementation will clone the finally and retarget the
+last (largest IL offset) leave in the try region to the clone. Any
+other leave that ultimately transfers control to the same post-finally
+offset will also be modified to jump to the clone.
+
+Empirical studies have shown that most finallys are small. Thus to
+avoid excessive code growth, a crude size estimate is formed by
+counting the number of statements in the blocks that make up the
+finally. Any finally larger that 15 statements is not cloned. In our
+study this disqualifed about 0.5% of all finallys from cloning.
+
+### EH Nesting Considerations
+
+Finally cloning is also more complicated when the finally encloses
+other EH regions, since the clone will introduce copies of all these
+regions. While it is possible to implement cloning in such cases we
+propose to defer for now.
+
+Finally cloning is also a bit more complicated if the finally is
+enclosed by another finally region, so we likewise propose deferring
+support for this. (Seems like a rare enough thing but maybe not too
+hard to handle -- though possibly not worth it if we're not going to
+support the enclosing case).
+
+### Control-Flow and Other Considerations
+
+If the try never exits normally, then the finally can only be invoked
+in exceptional cases. There is no benefit to cloning since the cloned
+finally would be unreachable. We can detect a subset of such cases
+because there will be no call finally blocks.
+
+JIT64 does not clone finallys that contained switch. We propose to
+do likewise. (Initially I did not include this restriction but
+hit a failing test case where the finally contained a switch. Might be
+worth a deeper look, though such cases are presumably rare.)
+
+If the finally never exits normally, then we presume it is cold code,
+and so will not clone.
+
+If the finally is marked as run rarely, we will not clone.
+
+Implementation Proposal
+-----------------------
+
+We propose that empty finally removal and finally cloning be run back
+to back, spliced into the phase list just after fgInline and
+fgAddInternal, and just before implicit by-ref and struct
+promotion. We want to run these early before a lot of structural
+invariants regarding EH are put in place, and before most
+other optimization, but run them after inlining
+(so empty finallys can be more readily identified) and after the
+addition of implicit try-finallys created by the jit. Empty finallys
+may arise later because of optimization, but this seems relatively
+uncommon.
+
+We will remove empty finallys first, then clone.
+
+Neither optimization will run when the jit is generating debuggable
+code or operating in min opts mode.
+
+### Empty Finally Removal (Sketch)
+
+Skip over methods that have no EH, are compiled with min opts, or
+where the jit is generating debuggable code.
+
+Walk the handler table, looking for try-finally (we could also look
+for and remove try-faults with empty faults, but those are presumably
+rare).
+
+If the finally is a single block and contains only a `retfilter`
+statement, then:
+
+* Retarget the callfinally(s) to jump always to the continuation blocks.
+* Remove the paired jump always block(s) (note we expect all finally
+calls to be paired since the empty finally returns).
+* For funclet EH models with finally target bits, clear the finally
+target from the continuations.
+* For non-funclet EH models only, clear out the GT_END_LFIN statement
+in the finally continuations.
+* Remove the handler block.
+* Reparent all directly contained try blocks to the enclosing try region
+or to the method region if there is no enclosing try.
+* Remove the try-finally from the EH table via `fgRemoveEHTableEntry`.
+
+After the walk, if any empty finallys were removed, revalidate the
+integrity of the handler table.
+
+### Finally Cloning (Sketch)
+
+Skip over all methods, if the runtime suports thread abort. More on
+this below.
+
+Skip over methods that have no EH, are compiled with min opts, or
+where the jit is generating debuggable code.
+
+Walk the handler table, looking for try-finally. If the finally is
+enclosed in a handler or encloses another handler, skip.
+
+Walk the finally body blocks. If any is BBJ_SWITCH, or if none
+is BBJ_EHFINALLYRET, skip cloning. If all blocks are RunRarely
+skip cloning. If the finally has more that 15 statements, skip
+cloning.
+
+Walk the try region from back to front (from largest to smallest IL
+offset). Find the last block in the try that invokes the finally. That
+will be the path that will invoke the clone.
+
+If the EH model requires callfinally thunks, and there are multiple
+thunks that invoke the finally, and the callfinally thunk along the
+clone path is not the first, move it to the front (this helps avoid
+extra jumps).
+
+Set the insertion point to just after the callfinally in the path (for
+thunk models) or the end of the try (for non-thunk models). Set up a
+block map. Clone the finally body using `fgNewBBinRegion` and
+`fgNewBBafter` to make the first and subsequent blocks, and
+`CloneBlockState` to fill in the block contents. Clear the handler
+region on the cloned blocks. Bail out if cloning fails. Mark the first
+and last cloned blocks with appropriate BBF flags. Patch up inter-clone
+branches and convert the returns into jumps to the continuation.
+
+Walk the callfinallys, retargeting the ones that return to the
+continuation so that they invoke the clone. Remove the paired always
+blocks. Clear the finally target bit and any GT_END_LFIN from the
+continuation.
+
+If all call finallys are converted, modify the region to be try/fault
+(interally EH_HANDLER_FAULT_WAS_FINALLY, so we can distinguish it
+later from "organic" try/faults). Otherwise leave it as a
+try/finally.
+
+Clear the catch type on the clone entry.
+
+### Thread Abort
+
+For runtimes that support thread abort (desktop), more work is
+required:
+
+* The cloned finally must be reported to the runtime. Likely this
+can trigger off of the BBF_CLONED_FINALLY_BEGIN/END flags.
+* The jit must maintain the integrity of the clone by not losing
+track of the blocks involved, and not allowing code to move in our
+out of the cloned region
+
+Code Size Impact
+----------------
+
+Code size impact from finally cloning was measured for CoreCLR on
+Windows x64.
+
+```
+Total bytes of diff: 16158 (0.12 % of base)
+ diff is a regression.
+Total byte diff includes 0 bytes from reconciling methods
+ Base had 0 unique methods, 0 unique bytes
+ Diff had 0 unique methods, 0 unique bytes
+Top file regressions by size (bytes):
+ 3518 : Microsoft.CodeAnalysis.CSharp.dasm (0.16 % of base)
+ 1895 : System.Linq.Expressions.dasm (0.32 % of base)
+ 1626 : Microsoft.CodeAnalysis.VisualBasic.dasm (0.07 % of base)
+ 1428 : System.Threading.Tasks.Parallel.dasm (4.66 % of base)
+ 1248 : System.Linq.Parallel.dasm (0.20 % of base)
+Top file improvements by size (bytes):
+ -4529 : System.Private.CoreLib.dasm (-0.14 % of base)
+ -975 : System.Reflection.Metadata.dasm (-0.28 % of base)
+ -239 : System.Private.Uri.dasm (-0.27 % of base)
+ -104 : System.Runtime.InteropServices.RuntimeInformation.dasm (-3.36 % of base)
+ -99 : System.Security.Cryptography.Encoding.dasm (-0.61 % of base)
+57 total files with size differences.
+Top method regessions by size (bytes):
+ 645 : System.Diagnostics.Process.dasm - System.Diagnostics.Process:StartCore(ref):bool:this
+ 454 : Microsoft.CSharp.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder:AdjustCallArgumentsForParams(ref,ref,ref,ref,ref,byref):this
+ 447 : System.Threading.Tasks.Dataflow.dasm - System.Threading.Tasks.Dataflow.Internal.SpscTargetCore`1[__Canon][System.__Canon]:ProcessMessagesLoopCore():this
+ 421 : Microsoft.CodeAnalysis.VisualBasic.dasm - Microsoft.CodeAnalysis.VisualBasic.Symbols.ImplementsHelper:FindExplicitlyImplementedMember(ref,ref,ref,ref,ref,ref,byref):ref
+ 358 : System.Private.CoreLib.dasm - System.Threading.TimerQueueTimer:Change(int,int):bool:this
+Top method improvements by size (bytes):
+ -2512 : System.Private.CoreLib.dasm - DomainNeutralILStubClass:IL_STUB_CLRtoWinRT():ref:this (68 methods)
+ -824 : Microsoft.CodeAnalysis.dasm - Microsoft.Cci.PeWriter:WriteHeaders(ref,ref,ref,ref,byref):this
+ -663 : System.Private.CoreLib.dasm - DomainNeutralILStubClass:IL_STUB_CLRtoWinRT(ref):int:this (17 methods)
+ -627 : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.ManifestBuilder:CreateManifestString():ref:this
+ -546 : System.Private.CoreLib.dasm - DomainNeutralILStubClass:IL_STUB_WinRTtoCLR(long):int:this (67 methods)
+3014 total methods with size differences.
+```
+
+The largest growth is seen in `Process:StartCore`, which has 4
+try-finally constructs.
+
+Diffs generally show improved codegen in the try bodies with cloned
+finallys. However some of this improvement comes from more aggressive
+use of callee save registers, and this causes size inflation in the
+funclets (note finally cloning does not alter the number of
+funclets). So if funclet save/restore could be contained to registers
+used in the funclet, the size impact would be slightly smaller.
+
+There are also some instances where cloning relatively small finallys
+leads to large code size increases. xxx is one example.
diff --git a/Documentation/design-docs/tailcalls-with-helpers.md b/Documentation/design-docs/tailcalls-with-helpers.md
new file mode 100644
index 0000000000..e23b51e130
--- /dev/null
+++ b/Documentation/design-docs/tailcalls-with-helpers.md
@@ -0,0 +1,460 @@
+# The current way of handling tail-calls
+## Fast tail calls
+These are tail calls that are handled directly by the jitter and no runtime cooperation is needed. They are limited to cases where:
+* Return value and call target arguments are all either primitive types, reference types, or valuetypes with a single primitive type or reference type fields
+* The aligned size of call target arguments is less or equal to aligned size of caller arguments
+
+## Tail calls using a helper
+Tail calls in cases where we cannot perform the call in a simple way are implemented using a tail call helper. Here is a rough description of how it works:
+* For each tail call target, the jitter asks runtime to generate an assembler argument copying routine. This routine reads vararg list of arguments and places the arguments in their proper slots in the CONTEXT or on the stack. Together with the argument copying routine, the runtime also builds a list of offsets of references and byrefs for return value of reference type or structs returned in a hidden return buffer and for structs passed by ref. The gc layout data block is stored at the end of the argument copying thunk.
+* At the time of the tail call, the caller generates a vararg list of all arguments of the tail called function and then calls JIT_TailCall runtime function. It passes it the copying routine address, the target address and the vararg list of the arguments.
+* The JIT_TailCall then performs the following:
+ * It calls RtlVirtualUnwind twice to get the context of the caller of the caller of the tail call to simulate the effect of running epilog of the caller of the tail call and also its return.
+ * It prepares stack space for the callee stack arguments, a helper explicit TailCallFrame and also a CONTEXT structure where the argument registers of the callee, stack pointer and the target function address are set. In case the tail call caller has enough space for the callee arguments and the TailCallFrame in its stack frame, that space is used directly for the callee arguments. Otherwise the stack arguments area is allocated at the top of the stack. This slightly differs in the case the tail call was called from another tail called function - the TailCallFrame already exists and so it is not recreated. The TailCallFrame also keeps a pointer to the list of gc reference offsets of the arguments and structure return buffer members. The stack walker during GC then uses that to ensure proper GC liveness of those references.
+ * It calls the copying routine to translate the arguments from the vararg list to the just reserved stack area and the context.
+ * If the stack arguments and TailCaillFrame didn't fit into the caller's stack frame, these data are now moved to the final location
+ * RtlRestoreContext is used to start executing the callee.
+
+There are several issues with this approach:
+* It is expensive to port to new platforms
+ * Parsing the vararg list is not possible to do in a portable way on Unix. Unlike on Windows, the list is not stored a linear sequence of the parameter data bytes in memory. va_list on Unix is an opaque data type, some of the parameters can be in registers and some in the memory.
+ * Generating the copying asm routine needs to be done for each target architecture / platform differently. And it is also very complex, error prone and impossible to do on platforms where code generation at runtime is not allowed.
+* It is slower than it has to be
+ * The parameters are copied possibly twice - once from the vararg list to the stack and then one more time if there was not enough space in the caller's stack frame.
+ * RtlRestoreContext restores all registers from the CONTEXT structure, not just a subset of them that is really necessary for the functionality, so it results in another unnecessary memory accesses.
+* Stack walking over the stack frames of the tail calls requires runtime assistance.
+
+# The new approach to tail calls using helpers
+## Objectives
+The new way of handling tail calls using helpers was designed with the following objectives:
+* It should be cheap to port to new platforms, architectures and code generators
+* It needs to work in both jitted and AOT compiled scenarios
+* It should support platforms where runtime code generation is not possible
+* The tail calls should be reasonably fast compared to regular calls with the same arguments
+* The tail calls should not be slower than existing mechanism on Windows
+* No runtime assistance should be necessary for unwinding stack with tail call frames on it
+* The stack should be unwindable at any spot during the tail calls to properly support sampling profilers and similar tools.
+* Stack walk during GC must be able to always correctly report GC references.
+* It should work in all cases except those where a tail call is not allowed as described in the ECMA 335 standard section III.2.4
+
+## Requirements
+* The code generator needs to be able to compile a tail call to a target as a call to a thunk with the same parameters as the target, but void return, followed by a jump to an assembler helper.
+
+## Implementation
+This section describes the helper functions and data structures that the tail calls use and also describes the tail call sequence step by step.
+### Helper functions
+The tail calls use the following thunks and helpers:
+* StoreArguments - this thunk stores the arguments into a thread local storage together with the address of the corresponding CallTarget thunk and a descriptor of locations and types of managed references in the stored arguments data. This thunk is generated as IL and compiled by the jitter or AOT compiler. There is one such thunk per tail call target.
+It has a signature that is compatible with the tailcall target function except for the return type which is void. But it is not the same. It gets the same arguments as the tail call target function, but it would also get "this" pointer and the generic context as explicit arguments if the tail call target requires them. Arguments of generic reference types are passed as "object" so that the StoreArguments doesn't have to be generic.
+* CallTarget - this thunk gets the arguments buffer that was filled by the StoreArguments thunk, loads the arguments from the buffer, releases the buffer and calls the target function using calli. The signature used for the calli would ensure that all arguments including the optional hidden return buffer and the generic context are passed in the right registers / stack slots. Generic reference arguments will be specified as "object" in the signature so that the CallTarget doesn't have to be generic.
+The CallTarget is also generated as IL and compiled by the jitter or AOT compiler. There is one such thunk per tail call target. This thunk has the same return type as the tailcall target or return "object" if the return type of the tail call target is a generic reference type.
+* TailCallHelper - this is an assembler helper that is responsible for restoring stack pointer to the location where it was when the first function in a tail call chain was entered and then jumping to the CallTarget thunk. This helper is common for all tail call targets.
+In a context of each tailcall invocation, the TailCallHelper will be handled by the jitter as if it had the same return type as the tail call target. That means that if the tail call target needs a hidden return buffer for returning structs, the pointer to this buffer will be passed to the TailCallHelper the same way as it would be passed to the tail call target. The TailCallHelper would then pass this hidden argument to the CallTarget helper.
+There will be two flavors of this helper, based on whether the tail call target needs a hidden return buffer or not:
+ * TailCallHelper
+ * TailCallHelper_RetBuf
+
+### Helper data structures
+The tail calls use the following data structures:
+* Thread local storage for arguments. It stores the arguments of a tail call for a short period of time between the StoreArguments and CallTarget calls.
+* Arguments GC descriptor - descriptor of locations and types of managed references in the arguments.
+* TailCallHelperStack - a per thread stack of helper entries that is used to determine whether a tail call is chained or not. Its entries are allocated as local variables in CallTarget thunks. Each entry contains:
+ * Stack pointer captured right before a call to a tail call target
+ * ChainCall flag indicating whether the CallTarget thunk should return after the call to the tail call target or whether it should execute its epilog and jump to TailCallHelper instead. The latter is used by the TailCallHelper to remove the stack frame of the CallTarget before making a tail call from a tail called function.
+ * Pointer to the next entry on the stack.
+
+### Tail call sequence
+* The caller calls the StoreArguments thunk corresponding to the callee to store the pointer to the tail call target function, its arguments, their GC descriptors, optional "this" and generic context arguments and the corresponding CallTarget thunk address in a thread local storage.
+* The caller executes its epilog, restoring stack pointer and callee saved registers to their values when the caller was entered.
+* The caller jumps to the TailCallHelper. This function performs the following operations:
+ * Get the topmost TailCallHelperStack entry for the current thread.
+ * Check if the previous stack frame is a CallTarget thunk frame by comparing the stack pointer value stored in the TailCallHelperStack entry to the current CFA (call frame address). If it matches, it means that the previous stack frame belongs to a CallTarget thunk and so the tail call caller was also tail called.
+ * If the previous frame was a CallTarget thunk, its stack frame needs to be removed to ensure that the stack will not grow when tail calls are chained. Set ChainCall flag in the TailCallHelperStack entry and return. That returns control to the CallTarget thunk. It checks the ChainCall flag and since it set, it executes its epilog and jumps to the TailCallHelper again.
+ * If the previous frame was not a CallTarget thunk, get the address of the CallTarget thunk of the tailcall target from the arguments buffer and jump to it.
+* The CallTarget thunk function then does the following operation:
+ * Create local instance of TailCallHelperStack entry and store the current stack pointer value in it.
+ * Push the entry to the TailCallHelperStack of the current thread.
+ * Get the arguments buffer from the thread local storage, extract the regular arguments and the optional "this" and generic context arguments and the target function pointer. Release the buffer and call the target function. The frame of the CallTarget thunk ensures that the arguments of the target are GC protected until the target function returns or tail calls to another function.
+ * Pop the TailCallHelperStack entry from the TailCallHelperStack of the current thread.
+ * Check the ChainCall flag in the TailCallHelperStack entry. If it is set, run epilog and jump to the TailCallHelper.
+ * If the ChainCall flag is clear, it means that the last function in the tail call chain has returned. So return the return value of the target function.
+
+## Work that needs to be done to implement the new tail calls mechanism
+### JIT (compiler in the AOT scenario)
+* Modify compilation of tail calls with helper so that a tail call is compiled as a call to the StoreArguments thunk followed by the jump to the assembler TailCallHelper. In other words, the
+```
+tail. call/callvirt <method>
+ret
+```
+becomes
+```
+call/callvirt <StoreArguments thunk>
+tail. call <TailCallHelper>
+ret
+```
+### Runtime (compiler in the AOT scenario)
+* Add generation of the StoreArguments and CallTarget IL thunks to the runtime (compiler tool chain in at AOT scenario). As a possible optimization, In the AOT scenario, the thunks can be generated by the compiler as native code directly without the intermediate IL.
+* For the JIT scenario, add a new method to the JIT to EE interface to get the StoreArguments thunk method handle for a given target method and the TailCallHelper address.
+
+### Runtime in both scenarios
+* Add support for the arguments buffer, which means:
+ * Add functions to create, release and get the buffer for a thread
+ * Add support for GC scanning the arguments buffers.
+* Implement the TailCallHelper asm helper for all architectures
+### Debugging in both scenarios
+Ensure that the stepping in a debugger works correctly. In CoreCLR, the TailCallStubManager needs to be updated accordingly.
+
+## Example code
+
+```C#
+struct S
+{
+ public S(long p1, long p2, long p3)
+ {
+ s1 = p1; s2 = p2; s3 = p3;
+ }
+
+ public long s1, s2, s3;
+}
+
+struct T
+{
+ public T(S s)
+ {
+ t1 = s.s1; t2 = s.s2; t3 = s.s3 t4 = 4;
+ }
+ public long t1, t2, t3, t4;
+}
+
+struct U
+{
+ public U(T t)
+ {
+ u1 = t.t1; u2 = t.t2; u3 = t.t3 u4 = t.t4; u5 = 5;
+ }
+ public long u1, u2, u3, u4, u5;
+}
+
+int D(U u)
+{
+ int local;
+ Console.WriteLine("In C, U = [{0}, {1}, {2}, {3}, {4}", u.u1, u.u2, u.u3, u.u4, u.u5);
+ return 1;
+}
+
+int C(T t)
+{
+ int local;
+ Console.WriteLine("In C");
+ U args = new U(t);
+ return tailcall D(args);
+}
+
+int B(S s)
+{
+ int local;
+ Console.WriteLine("In B");
+ T args = new T(S);
+ return tailcall C(args);
+}
+
+int A()
+{
+ S args = new S(1, 2, 3);
+ int result = B(args);
+ Console.WriteLine("Done, result = {0}\n", result);
+}
+```
+
+## Example code execution
+This section shows how stack evolves during the execution of the example code above. Execution starts at function A, but the details below start at the interesting point where the first tail call is about to be called.
+### B is about to tail call C
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+* Callee saved registers and locals of B
+```
+### Arguments of C are stored in the thread local buffer, now we are in the TailCallHelper
+The callee saved registers and locals of B are not on the stack anymore
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+```
+
+### In CallTarget thunk for C, about to call C
+The thunk will now extract parameters for C from the thread local storage and call C.
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+* Callee saved registers and locals of CallTarget thunk for C
+```
+### C is about to tail call D
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+* Callee saved registers and locals of CallTarget thunk for C
+* Stack arguments of C
+* Return address of C
+* Callee saved registers and locals of C
+```
+### Arguments of D are stored in the thread local buffer, now we are in the TailCallHelper
+The callee saved registers and locals of C are not on the stack anymore.
+But we still have the return address of C, stack arguments of C and callee saved registers and locals of CallTarget thunk for C on the stack.
+We need to remove them as well to prevent stack growing.
+The TailCallHelper detects that the previous stack frame was the frame of the CallTarget thunk for C and so it sets the ChainCall flag in the topmost TailCallHelperStackEntry and returns to CallTarget thunk for C in order to let it cleanup its stack frame.
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+* Callee saved registers and locals of CallTarget thunk for C
+* Stack arguments of C
+* Return address of C
+```
+### Returned to CallTarget thunk for C with ChainCall flag in the TailCallHelperStackEntry **set**
+The thunk checks the ChainCall flag and since it is set, it runs its epilog and then jumps to the TailCallHelper.
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+* Callee saved registers and locals of CallTarget thunk for C
+```
+### Back in TailCallHelper
+Now the stack is back in the state where we have made the previous tail call. Since the previous stack frame was not a CallTarget thunk frame, we just jump to the CallTarget thunk for D.
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+```
+### In CallTarget thunk for D, about to call D
+The thunk will now extract parameters for D from the thread local storage and call D.
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+* Callee saved registers and locals of CallTarget thunk for D
+```
+### In D
+We are in the last function of the chain, so after it does its work, it returns to its CallTarget thunk.
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+* Callee saved registers and locals of CallTarget thunk for D
+* Stack arguments of D
+* Return address of D
+* Callee saved registers and locals of D
+```
+### Returned to CallTarget thunk for D with ChainCall flag in the TailCallHelperStackEntry **clear**
+The thunk checks the ChainCall flag and since it is clear, it recognizes we are now returning from the call chain and so it returns the result of the D.
+```
+* Return address of A
+* Callee saved registers and locals of A
+* Stack arguments of B
+* Return address of B
+* Callee saved registers and locals of CallTarget thunk for D
+```
+### Returned to A
+We are back in A and we have the return value of the call chain.
+```
+* Return address of A
+* Callee saved registers and locals of A
+```
+
+## Example of thunks generated for a simple generic method
+
+```C#
+struct Point
+{
+ public int x;
+ public int y;
+ public int z;
+}
+
+class Foo
+{
+ public Point Test<T>(int x, T t) where T : class
+ {
+ Console.WriteLine("T: {0}", typeof(t));
+ return new Point(x, x, x);
+ }
+}
+```
+
+For tail calling the Test function, the IL helpers could look e.g. as follows:
+
+```IL
+.method public static void StoreArgumentsTest(native int target, object thisObj, native int genericContext, int x, object t) cil managed
+{
+ .maxstack 4
+ .locals init (
+ [0] native int buffer,
+ )
+
+ call native int AllocateArgumentBuffer(56)
+ stloc.0
+
+ ldloc.0
+ ldc.i8 0x12345678 // pointer to the GC descriptor of the arguments buffer
+ stind.i
+ ldloc.0
+ sizeof native int
+ add
+ stloc.0
+
+ ldloc.0
+ ldftn Point CallTargetTest()
+ stind.i
+ ldloc.0
+ sizeof native int
+ add
+ stloc.0
+
+ ldloc.0
+ ldarg.1 // "thisObj"
+ stobj object
+ ldloc.0
+ sizeof object
+ add
+ stloc.0
+
+ ldloc.0
+ ldarg.2 // "genericContext"
+ stind.i
+ ldloc.0
+ sizeof native int
+ add
+ stloc.0
+
+ ldloc.0
+ ldarg.3 // "x"
+ stind.i4
+ ldloc.0
+ sizeof native int
+ add
+ stloc.0
+
+ ldloc.0
+ ldarg.4 // "t"
+ stobj object
+ ldloc.0
+ sizeof object
+ add
+ stloc.0
+
+ ldloc.0
+ ldarg.0 // "target"
+ stind.i
+
+ ret
+}
+
+```
+
+```IL
+.method public static Point CallTargetTest() cil managed
+{
+ .maxstack 4
+ .locals init (
+ [0] native int buffer,
+ [1] valuetype TailCallHelperStackEntry entry,
+ [2] Point result
+ )
+
+ // Initialize the TailCallHelperStackEntry
+ // chainCall = false
+ // sp = current sp
+
+ ldloca.s 1
+ ldc.i4.0
+ stfld bool TailCallHelperStackEntry::chainCall
+ ldloca.s 1
+ call native int GetCurrentSp()
+ stfld native int TailCallHelperStackEntry::sp
+
+ ldloca.s 1 // TailCallHelperStackEntry
+ call void PushHelperStackEntry(native int)
+
+ // Prepare arguments for the tail call target
+
+ call native int FetchArgumentBuffer()
+ sizeof native int
+ add // skip the pointer to the GC descriptor of the arguments buffer
+ sizeof native int
+ add // skip the address of the CallTargetTest in the buffer, it is used by the TailCallHelper only
+ stloc.0
+
+ ldloc.0
+ ldobj object // this
+ ldloc.0
+ sizeof object
+ add
+ stloc.0
+
+ ldloc.0
+ ldind.i // generic context
+ ldloc.0
+ sizeof native int
+ add
+ stloc.0
+
+ ldloc.0
+ ldind.i4 // int x
+ ldloc.0
+ sizeof native int
+ add
+ stloc.0
+
+ ldloc.0
+ ldobj object // T t
+ ldloc.0
+ sizeof object
+ add
+
+ ldobj native int // tailcall target
+
+ // The arguments buffer is not needed anymore
+ call void ReleaseArgumentBuffer()
+
+ .try
+ {
+ calli Point (object, native int, int32, object) // this, generic context, x, t
+ stloc.2
+ leave.s Done
+ }
+ finally
+ {
+ ldloca.s 1 // TailCallHelperStackEntry
+ call void PopHelperStackEntry(native int)
+ endfinally
+ }
+
+Done:
+ ldloc.1 // TailCallHelperStackEntry
+ ldfld bool TailCallHelperStackEntry::chainCall
+ brfalse.s NotChained
+
+ // Jump to the TailCallHelper that will call to the next tail call in the chain.
+ // The stack frame of the current CallTargetTest is reclaimed and epilog executed
+ // before the TailCallHelper is entered.
+ tail.call int32 TailCallHelper()
+ ret
+
+NotChained:
+ // Now we are returning from a chain of tail calls to the caller of this chain
+ ldloc.2
+ ret
+}
+``` \ No newline at end of file
diff --git a/Documentation/project-docs/contributing-workflow.md b/Documentation/project-docs/contributing-workflow.md
index 5c91a49bae..70423e573b 100644
--- a/Documentation/project-docs/contributing-workflow.md
+++ b/Documentation/project-docs/contributing-workflow.md
@@ -85,7 +85,7 @@ We use and recommend the following workflow:
1. Create an issue for your work.
- You can skip this step for trivial changes.
- Reuse an existing issue on the topic, if there is one.
- - Use [CODE_OWNERS.TXT](https://github.com/dotnet/coreclr/blob/CODE_OWNERS.TXT) to find relevant maintainers and @ mention them to ask for feedback on your issue.
+ - Use [CODE_OWNERS.TXT](https://github.com/dotnet/coreclr/blob/master/CODE_OWNERS.TXT) to find relevant maintainers and @ mention them to ask for feedback on your issue.
- Get agreement from the team and the community that your proposed change is a good one.
- If your change adds a new API, follow the [API Review Process](https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/api-review-process.md).
- Clearly state that you are going to take on implementing it, if that's the case. You can request that the issue be assigned to you. Note: The issue filer and the implementer don't have to be the same person.
diff --git a/Documentation/project-docs/glossary.md b/Documentation/project-docs/glossary.md
index 670254ddb6..f4ae1c5127 100644
--- a/Documentation/project-docs/glossary.md
+++ b/Documentation/project-docs/glossary.md
@@ -5,6 +5,7 @@ This glossary defines terms, both common and more niche, that are important to u
As much as possible, we should link to the most authoritative and recent source of information for a term. That approach should be the most helpful for people who want to learn more about a topic.
+* BBT: Microsoft internal early version of C/C++ PGO. See https://www.microsoft.com/windows/cse/bit_projects.mspx.
* BOTR: Book Of The Runtime.
* CLR: Common Language Runtime.
* COMPlus: An early name for the .NET platform, back when it was envisioned as a successor to the COM platform (hence, "COM+"). Used in various places in the CLR infrastructure, most prominently as a common prefix for the names of internal configuration settings. Note that this is different from the product that eventually ended up being named [COM+](https://msdn.microsoft.com/en-us/library/windows/desktop/ms685978.aspx).
@@ -12,19 +13,25 @@ As much as possible, we should link to the most authoritative and recent source
* DAC: Data Access Component. An abstraction layer over the internal structures in the runtime.
* EE: Execution Engine.
* GC: [Garbage Collector](https://github.com/dotnet/coreclr/blob/master/Documentation/botr/garbage-collection.md).
+* IPC: Inter-Process Communicaton
* JIT: [Just-in-Time](https://github.com/dotnet/coreclr/blob/master/Documentation/botr/ryujit-overview.md) compiler. RyuJIT is the code name for the next generation Just-in-Time(aka "JIT") for the .NET runtime.
* LCG: Lightweight Code Generation. An early name for [dynamic methods](https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/Reflection/Emit/DynamicMethod.cs).
+* MD: MetaData
* NGen: Native Image Generator.
* NYI: Not Yet Implemented
* PAL: [Platform Adaptation Layer](http://archive.oreilly.com/pub/a/dotnet/2002/03/04/rotor.html). Provides an abstraction layer between the runtime and the operating system
* PE: Portable Executable.
+* PGO: Profile Guided Optimization - see [details](https://blogs.msdn.microsoft.com/vcblog/2008/11/12/pogo/)
+* POGO: Profile Guided Optimization - see [details](https://blogs.msdn.microsoft.com/vcblog/2008/11/12/pogo/)
* ProjectN: Codename for the first version of [.NET Native for UWP](https://msdn.microsoft.com/en-us/vstudio/dotnetnative.aspx).
* ReadyToRun: A flavor of native images - command line switch of [crossgen](../building/crossgen.md).
* Redhawk: Codename for experimental minimal managed code runtime that evolved into [CoreRT](https://github.com/dotnet/corert/).
* SOS: [Son of Strike](http://blogs.msdn.com/b/jasonz/archive/2003/10/21/53581.aspx). The debugging extension for DbgEng based debuggers. Uses the DAC as an abstraction layer for its operation.
+* SuperPMI: JIT component test framework (super fast JIT testing - it mocks/replays EE in EE-JIT interface) - see [SuperPMI details](https://github.com/dotnet/coreclr/blob/master/src/ToolBox/superpmi/readme.txt).
* SVR: The CLR used to be built as two variants, with one called "mscorsvr.dll", to mean the "server" version. In particular, it contained the server GC implementation, which was intended for multi-threaded apps capable of taking advantage of multiple processors. In the .NET Framework 2 release, the two variants were merged into "mscorwks.dll". The WKS version was the default, however the SVR version remained available.
* TPA: Trusted Platform Assemblies used to be a special set of assemblies that comprised the platform assemblies, when it was originally designed. As of today, it is simply the set of assemblies known to constitute the application.
* URT: Universal Runtime. Ancient name for what ended up being .NET, is used in the WinError facility name FACILITY_URT.
* VSD: [Virtual Stub Dispatch](../botr/virtual-stub-dispatch.md). Technique of using stubs for virtual method invocations instead of the traditional virtual method table.
* VM: Virtual machine.
* WKS: The CLR used to be built as two variants, with one called "mscorwks.dll", to mean the "workstation" version. In particular, it contained the client GC implementation, which was intended for single-threaded apps, independent of how many processors were on the machine. In the .NET Framework 2 release, the two variants were merged into "mscorwks.dll". The WKS version was the default, however the SVR version remained available.
+* ZAP: Original code name for NGen
diff --git a/Documentation/workflow/IssuesFeedbackEngagement.md b/Documentation/workflow/IssuesFeedbackEngagement.md
index a6c0550e08..f83b2b6a89 100644
--- a/Documentation/workflow/IssuesFeedbackEngagement.md
+++ b/Documentation/workflow/IssuesFeedbackEngagement.md
@@ -3,10 +3,14 @@
## Reporting Problems (Bugs)
-We track bugs, feature requests and other issues [in this repo](https://github.com/dotnet/coreclr/issues).
-If you have a problem and believe that the issue is in the native runtime you should log it there. If in the managed code log it in the [CoreFX repo](https://github.com/dotnet/corefx/issues) _even if the code is in this CoreCLR repo_ (ie., in mscorlib/System.Private.Corelib). The reason for this is we sometimes move managed types between the two and it makes sense to keep all the issues together.
-
-Before you log a new issue, you should try using the search tool on the issue page on a few keywords to see if the issue was already logged.
+We track bugs, feature requests and other issues in repository where they will get ultimately fixed. If you have a problem and
+believe that the issue is in CoreCLR itself (native runtime or System.Private.CoreLib base level class library) you should
+log it on the [CoreCLR Issues Page](https://github.com/dotnet/coreclr/issues). If in the upper levels of the class library
+use the [CoreFX Issues Page](https://github.com/dotnet/corefx/issues). For all managed API addition proposals use
+the [CoreFX Issues Page](https://github.com/dotnet/corefx/issues) and follow
+the [API Review Process](https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/api-review-process.md).
+
+Before you log a new issue, you should try using the search tool on the issue page on a few keywords to see if the issue was already logged.
### NET Forums
If you want to ask a question, or want wider discussion (to see if others share you issue), we encourage you to start a thread
diff --git a/Documentation/workflow/OfficalAndDailyBuilds.md b/Documentation/workflow/OfficalAndDailyBuilds.md
index 5a36af6f46..d5efb93c04 100644
--- a/Documentation/workflow/OfficalAndDailyBuilds.md
+++ b/Documentation/workflow/OfficalAndDailyBuilds.md
@@ -1,7 +1,7 @@
# Official Releases and Daily Builds of CoreCLR and CoreFX components
If you are not planning on actually making bug fixes or experimenting with new features, then you probably
-don't need to don't need build CoreCLR yourself, as the .NET Runtime team routinely does this for you.
+don't need to build CoreCLR yourself, as the .NET Runtime team routinely does this for you.
Roughly every three months, the .NET Runtime team publishes a new version of .NET Core to Nuget. .NET Core's
official home on NuGet is
diff --git a/DotnetCLIVersion.txt b/DotnetCLIVersion.txt
index b0f8213885..e42fc5fdff 100644
--- a/DotnetCLIVersion.txt
+++ b/DotnetCLIVersion.txt
@@ -1 +1 @@
-1.0.0-preview3-003223 \ No newline at end of file
+1.0.0-preview2-1-003182 \ No newline at end of file
diff --git a/binclash.log b/binclash.log
deleted file mode 100755
index e69de29bb2..0000000000
--- a/binclash.log
+++ /dev/null
diff --git a/build-test.cmd b/build-test.cmd
index 215fb53034..85753abccf 100644
--- a/build-test.cmd
+++ b/build-test.cmd
@@ -23,6 +23,9 @@ set "__PackagesDir=%__ProjectDir%\packages"
set "__RootBinDir=%__ProjectDir%\bin"
set "__LogsDir=%__RootBinDir%\Logs"
+:: Default __Exclude to issues.targets
+set __Exclude=%__TestDir%\issues.targets
+
REM __unprocessedBuildArgs are args that we pass to msbuild (e.g. /p:__BuildArch=x64)
set "__args= %*"
set processedArgs=
@@ -51,8 +54,9 @@ if /i "%1" == "checked" (set __BuildType=Checked&set processedArgs
if /i "%1" == "skipmanaged" (set __SkipManaged=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "updateinvalidpackages" (set __UpdateInvalidPackagesArg=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
-if /i "%1" == "buildagainstpackages" (set __BuildAgainstPackages=1&set __BuildAgainstPackagesArg=-BuildTestsAgainstPackages&shift&goto Arg_Loop)
+if /i "%1" == "buildagainstpackages" (set __BuildAgainstPackages=1&set __BuildAgainstPackagesArg=-BuildTestsAgainstPackages&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "runtimeid" (set __RuntimeId=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
+if /i "%1" == "Exclude" (set __Exclude=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
if [!processedArgs!]==[] (
call set __UnprocessedBuildArgs=!__args!
@@ -105,14 +109,14 @@ REM ===
REM === Restore Build Tools
REM ===
REM =========================================================================================
-call %__ProjectDir%\init-tools.cmd
+call "%__ProjectDir%\init-tools.cmd"
REM =========================================================================================
REM ===
REM === Resolve runtime dependences
REM ===
REM =========================================================================================
-call %__TestDir%\setup-runtime-dependencies.cmd /arch %__BuildArch% /outputdir %__BinDir%
+call "%__TestDir%\setup-runtime-dependencies.cmd" /arch %__BuildArch% /outputdir %__BinDir%
if defined __UpdateInvalidPackagesArg (
goto skipnative
@@ -170,7 +174,7 @@ set __msbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
set __msbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
set __msbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
-call %__ProjectDir%\run.cmd build -Project="%__NativeTestIntermediatesDir%\install.vcxproj" -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__msbuildNativeArgs% %__RunArgs% %__unprocessedBuildArgs%
+call "%__ProjectDir%\run.cmd" build -Project="%__NativeTestIntermediatesDir%\install.vcxproj" -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__msbuildNativeArgs% %__RunArgs% %__unprocessedBuildArgs%
if errorlevel 1 (
echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
echo %__BuildLog%
@@ -189,6 +193,8 @@ set __msbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
set __msbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
set __msbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
+set "__TestWorkingDir=%__RootBinDir%\tests\%__BuildOS%.%__BuildArch%.%__BuildType%"
+
if not defined __BuildAgainstPackages goto SkipRestoreProduct
REM =========================================================================================
REM ===
@@ -196,16 +202,15 @@ REM === Restore product binaries from packages
REM ===
REM =========================================================================================
-set "__TestWorkingDir=%__RootBinDir%\tests\%__BuildOS%.%__BuildArch%.%__BuildType%"
if not defined XunitTestBinBase set XunitTestBinBase=%__TestWorkingDir%
set "CORE_ROOT=%XunitTestBinBase%\Tests\Core_Root"
-set "CORE_OVERLAY=%XunitTestBinBase%\Tests\coreoverlay"
+set "CORE_OVERLAY=%XunitTestBinBase%\Tests\Core_Root_%__RuntimeId%"
-call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\build.proj -UpdateDependencies -BatchRestorePackages -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
+call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj -UpdateDependencies -BatchRestorePackages -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
set __BuildLogRootName=Tests_GenerateRuntimeLayout
-call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\runtest.proj -BinPlaceRef -BinPlaceProduct -CopyCrossgenToProduct -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
+call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\runtest.proj -BinPlaceRef -BinPlaceProduct -CopyCrossgenToProduct -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
if errorlevel 1 (
echo BinPlace of mscorlib.dll failed
exit /b 1
@@ -218,14 +223,14 @@ if defined __RuntimeId (
exit /b 1
)
- call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\runtest.proj -CreateNonWindowsTestOverlay -RuntimeId="%__RuntimeId%" -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
- for /R %__PackagesDir%\TestNativeBins\%__RuntimeId% %%f in (*.so) do copy %%f %Core_Overlay%
- for /R %__PackagesDir%\TestNativeBins\%__RuntimeId% %%f in (*.dylib) do copy %%f %Core_Overlay%
+ call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\runtest.proj -CreateNonWindowsTestOverlay -RuntimeId="%__RuntimeId%" -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
+ for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.so) do copy %%f %Core_Overlay%
+ for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.dylib) do copy %%f %Core_Overlay%
echo %__MsgPrefix% Created the runtime layout for %__RuntimeId% in %CORE_OVERLAY%
)
-echo %__MsgPrefix% Created the runtime layout with all dependencies in %CORE_ROOT%
+echo %__MsgPrefix% Restored CoreCLR product from packages
:SkipRestoreProduct
@@ -256,7 +261,7 @@ if defined __UpdateInvalidPackagesArg (
set __up=-updateinvalidpackageversions
)
-call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\build.proj -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__up% %__RunArgs% %__unprocessedBuildArgs%
+call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__up% %__RunArgs% %__unprocessedBuildArgs%
if errorlevel 1 (
echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
echo %__BuildLog%
@@ -265,7 +270,38 @@ if errorlevel 1 (
exit /b 1
)
+REM Prepare the Test Drop
+REM Cleans any NI from the last run
+powershell "Get-ChildItem -path %__TestWorkingDir% -Include '*.ni.*' -Recurse -Force | Remove-Item -force"
+REM Cleans up any lock folder used for synchronization from last run
+powershell "Get-ChildItem -path %__TestWorkingDir% -Include 'lock' -Recurse -Force | where {$_.Attributes -eq 'Directory'}| Remove-Item -force -Recurse"
+
set CORE_ROOT=%__TestBinDir%\Tests\Core_Root
+if exist "%CORE_ROOT%" rd /s /q "%CORE_ROOT%"
+md "%CORE_ROOT%"
+xcopy /s "%__BinDir%" "%CORE_ROOT%"
+
+echo %__MsgPrefix%Creating test wrappers...
+
+set RuntimeIdArg=
+
+if defined __RuntimeId (
+ set RuntimeIdArg=-RuntimeID="%__RuntimeId%"
+)
+
+set __BuildLogRootName=Tests_XunitWrapper
+set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
+set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
+set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
+set __msbuildLog=/flp:Verbosity=diag;LogFile="%__BuildLog%"
+set __msbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
+set __msbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
+
+call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\runtest.proj -BuildWrappers -MsBuildEventLogging=" " -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs% %RuntimeIdArg%
+if errorlevel 1 (
+ echo Xunit Wrapper build failed
+ exit /b 1
+)
echo %__MsgPrefix%Creating test overlay...
@@ -286,6 +322,28 @@ if errorlevel 1 (
exit /b 1
)
+if not defined __BuildAgainstPackages goto SkipPrepForPublish
+
+set __BuildLogRootName=Helix_Prep
+set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
+set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
+set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
+set __msbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
+set __msbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
+set __msbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
+
+REM =========================================================================================
+REM ===
+REM === Prep test binaries for Helix publishing
+REM ===
+REM =========================================================================================
+
+call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\helixprep.proj -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs% %RuntimeIdArg%
+
+echo %__MsgPrefix% Prepped test binaries for publishing
+
+:SkipPrepForPublish
+
REM =========================================================================================
REM ===
REM === All builds complete!
@@ -308,8 +366,10 @@ echo Build type: -buildType: one of Debug, Checked, Release ^(default: Debug^).
echo updateinvalidpackageversions: Runs the target to update package versions.
echo buildagainstpackages: builds tests against restored packages, instead of against a built product.
echo runtimeid ^<ID^>: Builds a test overlay for the specified OS (Only supported when building against packages). Supported IDs are:
+echo alpine.3.4.3-x64: Builds overlay for Alpine 3.4.3
echo debian.8-x64: Builds overlay for Debian 8
echo fedora.23-x64: Builds overlay for Fedora 23
+echo fedora.24-x64: Builds overlay for Fedora 23
echo opensuse.13.2-x64: Builds overlay for OpenSUSE 13.2
echo opensuse.42.1-x64: Builds overlay for OpenSUSE 42.1
echo osx.10.10-x64: Builds overlay for OSX 10.10
@@ -317,6 +377,8 @@ echo rhel.7-x64: Builds overlay for RHEL 7 or CentOS
echo ubuntu.14.04-x64: Builds overlay for Ubuntu 14.04
echo ubuntu.16.04-x64: Builds overlay for Ubuntu 16.04
echo ubuntu.16.10-x64: Builds overlay for Ubuntu 16.10
+echo Exclude- Optional parameter - specify location of default exclusion file (defaults to tests\issues.targets if not specified)
+echo Set to "" to disable default exclusion file.
echo -- ... : all arguments following this tag will be passed directly to msbuild.
echo -priority=^<N^> : specify a set of test that will be built and run, with priority N.
echo 0: Build only priority 0 cases as essential testcases (default)
diff --git a/build.cmd b/build.cmd
index f8c49e397a..a37428ca6b 100644
--- a/build.cmd
+++ b/build.cmd
@@ -388,13 +388,15 @@ if %__BuildNativeCoreLib% EQU 1 (
"%__CrossgenExe%" /Platform_Assemblies_Paths "%__BinDir%" /out "%__BinDir%\System.Private.CoreLib.ni.dll" "%__BinDir%\System.Private.CoreLib.dll" > "%__CrossGenCoreLibLog%" 2>&1
if NOT !errorlevel! == 0 (
echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
- echo %__CrossGenCoreLibLog%
+ :: Put it in the same log, helpful for Jenkins
+ type %__CrossGenCoreLibLog%
exit /b 1
)
"%__CrossgenExe%" /Platform_Assemblies_Paths "%__BinDir%" /CreatePdb "%__BinDir%\PDB" "%__BinDir%\System.Private.CoreLib.ni.dll" >> "%__CrossGenCoreLibLog%" 2>&1
if NOT !errorlevel! == 0 (
echo %__MsgPrefix%Error: CrossGen /CreatePdb System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
- echo %__CrossGenCoreLibLog%
+ :: Put it in the same log, helpful for Jenkins
+ type %__CrossGenCoreLibLog%
exit /b 1
)
@@ -417,8 +419,9 @@ if %__BuildNativeCoreLib% EQU 1 (
)
if NOT !err! == 0 (
- echo %__MsgPrefix%Error: CrossGen mscorlib facade build failed. Refer to the build log file for details:
- echo !__CrossGenCoreLibLog!
+ echo %__MsgPrefix%Error: CrossGen mscorlib facade build failed. Refer to !__CrossGenCoreLibLog!
+ :: Put it in the same log, helpful for Jenkins
+ type %__CrossGenCoreLibLog%
exit /b 1
)
)
@@ -587,6 +590,7 @@ echo skipmscorlib: skip building System.Private.CoreLib ^(default: System.Privat
echo skipnative: skip building native components ^(default: native components are built^).
echo skiptests: skip building tests ^(default: tests are built^).
echo skipbuildpackages: skip building nuget packages ^(default: packages are built^).
+echo buildstandalonegc: builds the GC in a standalone mode.
echo -skiprestore: skip restoring packages ^(default: packages are restored during build^).
echo -disableoss: Disable Open Source Signing for System.Private.CoreLib.
echo -priority=^<N^> : specify a set of test that will be built and run, with priority N.
diff --git a/build.sh b/build.sh
index ca27844933..8d03121479 100755
--- a/build.sh
+++ b/build.sh
@@ -2,16 +2,8 @@
# resolve python-version to use
if [ "$PYTHON" == "" ] ; then
- if which python >/dev/null 2>&1
+ if ! PYTHON=$(command -v python || command -v python2 || command -v python 2.7)
then
- PYTHON=python
- elif which python2 >/dev/null 2>&1
- then
- PYTHON=python2
- elif which python2.7 >/dev/null 2>&1
- then
- PYTHON=python2.7
- else
echo "Unable to locate build-dependency python2.x!" 1>&2
exit 1
fi
@@ -19,7 +11,7 @@ fi
# validate python-dependency
# useful in case of explicitly set option.
-if ! which $PYTHON > /dev/null 2>&1
+if ! command -v $PYTHON > /dev/null
then
echo "Unable to locate build-dependency python2.x ($PYTHON)!" 1>&2
exit 1
@@ -28,13 +20,15 @@ fi
usage()
{
echo "Usage: $0 [BuildArch] [BuildType] [verbose] [coverage] [cross] [clangx.y] [ninja] [configureonly] [skipconfigure] [skipnative] [skipmscorlib] [skiptests] [cmakeargs] [bindir]"
- echo "BuildArch can be: x64, x86, arm, arm-softfp, arm64"
+ echo "BuildArch can be: x64, x86, arm, armel, arm64"
echo "BuildType can be: debug, checked, release"
echo "coverage - optional argument to enable code coverage build (currently supported only for Linux and OSX)."
echo "ninja - target ninja instead of GNU make"
echo "clangx.y - optional argument to build using clang version x.y."
echo "cross - optional argument to signify cross compilation,"
echo " - will use ROOTFS_DIR environment variable if set."
+ echo "crosscomponent - optional argument to build cross-architecture component,"
+ echo " - will use CAC_ROOTFS_DIR environment variable if set."
echo "pgoinstrument - generate instrumented code for profile guided optimization enabled binaries."
echo "configureonly - do not perform any builds; just configure the build."
echo "skipconfigure - skip build configuration."
@@ -53,6 +47,7 @@ usage()
echo "skipgenerateversion - disable version generation even if MSBuild is supported."
echo "cmakeargs - user-settable additional arguments passed to CMake."
echo "bindir - output directory (defaults to $__ProjectRoot/bin)"
+ echo "buildstandalonegc - builds the GC in a standalone mode. Can't be used with \"cmakeargs\"."
exit 1
}
@@ -194,11 +189,7 @@ build_native()
if [ $__UseNinja == 1 ]; then
generator="ninja"
buildFile="build.ninja"
- if which ninja >/dev/null 2>&1; then
- buildTool="ninja"
- elif which ninja-build >/dev/null 2>&1; then
- buildTool="ninja-build"
- else
+ if ! buildTool=$(command -v ninja || command -v ninja-build); then
echo "Unable to locate ninja!" 1>&2
exit 1
fi
@@ -266,6 +257,46 @@ build_native()
popd
}
+build_cross_arch_component()
+{
+ __SkipCrossArchBuild=1
+ TARGET_ROOTFS=""
+ # check supported cross-architecture components host(__HostArch)/target(__BuildArch) pair
+ if [[ "$__BuildArch" == "arm" && "$__CrossArch" == "x86" ]]; then
+ export CROSSCOMPILE=0
+ __SkipCrossArchBuild=0
+
+ # building x64-host/arm-target cross-architecture component need to use cross toolchain of x86
+ if [ "$__HostArch" == "x64" ]; then
+ export CROSSCOMPILE=1
+ fi
+ else
+ # not supported
+ return
+ fi
+
+ export __CMakeBinDir="$__CrossComponentBinDir"
+ export CROSSCOMPONENT=1
+ if [ $CROSSCOMPILE == 1 ]; then
+ TARGET_ROOTFS="$ROOTFS_DIR"
+ if [ -n "$CAC_ROOTFS_DIR" ]; then
+ export ROOTFS_DIR="$CAC_ROOTFS_DIR"
+ else
+ export ROOTFS_DIR="$__ProjectRoot/cross/rootfs/$__CrossArch"
+ fi
+ fi
+
+ __ExtraCmakeArgs="-DCLR_CMAKE_TARGET_ARCH=$__BuildArch -DCLR_CMAKE_TARGET_OS=$__BuildOS -DCLR_CMAKE_PACKAGES_DIR=$__PackagesDir -DCLR_CMAKE_PGO_INSTRUMENT=$__PgoInstrument"
+ build_native $__SkipCrossArchBuild "$__CrossArch" "$__CrossCompIntermediatesDir" "$__ExtraCmakeArgs" "cross-architecture component"
+
+ # restore ROOTFS_DIR, CROSSCOMPONENT, and CROSSCOMPILE
+ if [ -n "$TARGET_ROOTFS" ]; then
+ export ROOTFS_DIR="$TARGET_ROOTFS"
+ fi
+ export CROSSCOMPONENT=
+ export CROSSCOMPILE=1
+}
+
isMSBuildOnNETCoreSupported()
{
# This needs to be updated alongwith corresponding changes to netci.groovy.
@@ -292,7 +323,7 @@ isMSBuildOnNETCoreSupported()
"opensuse.42.1-x64")
__isMSBuildOnNETCoreSupported=1
;;
- "rhel.7.2-x64")
+ "rhel.7"*"-x64")
__isMSBuildOnNETCoreSupported=1
;;
"ubuntu.14.04-x64")
@@ -552,8 +583,8 @@ while :; do
__BuildArch=arm
;;
- arm-softfp)
- __BuildArch=arm-softfp
+ armel)
+ __BuildArch=armel
;;
arm64)
@@ -694,7 +725,9 @@ while :; do
exit 1
fi
;;
-
+ buildstandalonegc)
+ __cmakeargs="-DFEATURE_STANDALONE_GC=1"
+ ;;
*)
__UnprocessedBuildArgs="$__UnprocessedBuildArgs $1"
;;
@@ -791,19 +824,8 @@ __ExtraCmakeArgs="-DCLR_CMAKE_TARGET_OS=$__BuildOS -DCLR_CMAKE_PACKAGES_DIR=$__P
build_native $__SkipCoreCLR "$__BuildArch" "$__IntermediatesDir" "$__ExtraCmakeArgs" "CoreCLR component"
# Build cross-architecture components
-if [ $__CrossBuild == 1 ]; then
- __SkipCrossArchBuild=1
- if [ $__DoCrossArchBuild == 1 ]; then
- # build cross-architecture components for x86-host/arm-target
- if [[ "$__BuildArch" == "arm" && "$__CrossArch" == "x86" ]]; then
- __SkipCrossArchBuild=0
- fi
- fi
-
- export __CMakeBinDir="$__CrossComponentBinDir"
- export CROSSCOMPONENT=1
- __ExtraCmakeArgs="-DCLR_CMAKE_TARGET_ARCH=$__BuildArch -DCLR_CMAKE_TARGET_OS=$__BuildOS -DCLR_CMAKE_PACKAGES_DIR=$__PackagesDir -DCLR_CMAKE_PGO_INSTRUMENT=$__PgoInstrument"
- build_native $__SkipCrossArchBuild "$__CrossArch" "$__CrossCompIntermediatesDir" "$__ExtraCmakeArgs" "cross-architecture component"
+if [[ $__CrossBuild == 1 && $__DoCrossArchBuild == 1 ]]; then
+ build_cross_arch_component
fi
# Build System.Private.CoreLib.
diff --git a/clr.coreclr.props b/clr.coreclr.props
index 447b302ef2..9211976c39 100644
--- a/clr.coreclr.props
+++ b/clr.coreclr.props
@@ -5,14 +5,9 @@
<DebuggingSupportedBuild>true</DebuggingSupportedBuild>
<EnCSupported Condition="('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'amd64')">true</EnCSupported>
<EnableDownlevelForNls Condition="'$(CrossTargetArchitecture)' != ''">true</EnableDownlevelForNls>
- <FeatureAppdomainResourceMonitoring>true</FeatureAppdomainResourceMonitoring>
<FeatureArrayStubAsIL Condition="('$(TargetArch)' == 'arm') or ('$(TargetArch)' == 'amd64') or ('$(TargetArch)' == 'arm64')">true</FeatureArrayStubAsIL>
<FeatureStubsAsIL Condition="'$(TargetArch)' == 'arm64'">true</FeatureStubsAsIL>
- <FeatureBclFormatting>true</FeatureBclFormatting>
- <FeatureCollectibleTypes>true</FeatureCollectibleTypes>
<FeatureCominteropApartmentSupport>true</FeatureCominteropApartmentSupport>
- <FeatureCoreclr>true</FeatureCoreclr>
- <FeatureCorruptingExceptions>true</FeatureCorruptingExceptions>
<FeatureDbiDebugging>true</FeatureDbiDebugging>
<FeatureDbiOopDebugging_HostLocal>false</FeatureDbiOopDebugging_HostLocal>
<FeatureDbiOopDebugging_HostWindowsx86 Condition="'$(TargetArch)' == 'i386' or '$(TargetArch)' == 'arm'">true</FeatureDbiOopDebugging_HostWindowsx86>
@@ -20,27 +15,19 @@
<FeatureDbiOopDebugging_HostOneCorex86 Condition="'$(TargetArch)' == 'i386' or '$(TargetArch)' == 'arm'">true</FeatureDbiOopDebugging_HostOneCorex86>
<FeatureDbiOopDebugging_HostOneCoreamd64 Condition="'$(TargetArch)' == 'amd64'">true</FeatureDbiOopDebugging_HostOneCoreamd64>
<FeatureEventTrace>true</FeatureEventTrace>
- <FeatureExceptionDispatchInfo>true</FeatureExceptionDispatchInfo>
- <FeatureExceptionNotifications>true</FeatureExceptionNotifications>
<FeatureFrameworkInternal>true</FeatureFrameworkInternal>
<FeatureHijack>true</FeatureHijack>
<FeatureInteropDebugging Condition="('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'amd64')">true</FeatureInteropDebugging>
<FeatureIsymReader>true</FeatureIsymReader>
<!-- This is here for testing purposes only, and only on checked builds for x86/ARM -->
<FeatureLazyCOWPages Condition="'$(_BuildType)'!='ret' and (('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'arm'))">true</FeatureLazyCOWPages>
- <FeatureLoaderOptimization>true</FeatureLoaderOptimization>
- <FeatureMainClrModuleUsesCoreName>true</FeatureMainClrModuleUsesCoreName>
<FeatureMergeCultureSupportAndEngine>true</FeatureMergeCultureSupportAndEngine>
<FeatureMergeJitAndEngine>true</FeatureMergeJitAndEngine>
- <FeatureMulticoreJIT>true</FeatureMulticoreJIT>
<FeaturePrejit>true</FeaturePrejit>
- <FeatureSpanOfT Condition="'$(UseLegacyCompiler)'!='true'">true</FeatureSpanOfT>
<FeatureStandaloneSn>true</FeatureStandaloneSn>
<FeatureStrongnameDelaySigningAllowed>true</FeatureStrongnameDelaySigningAllowed>
- <FeatureStrongnameMigration>true</FeatureStrongnameMigration>
<FeatureStrongnameTestkeyAllowed>true</FeatureStrongnameTestkeyAllowed>
<FeatureSyntheticCultures>true</FeatureSyntheticCultures>
- <FeatureVersioning>true</FeatureVersioning>
<FeatureVersioningLog>true</FeatureVersioningLog>
<FeatureWin32Registry>true</FeatureWin32Registry>
<FeatureXPlatDacDebugging_HostWindowsx86 Condition="'$(TargetArch)' == 'i386' or '$(TargetArch)' == 'arm'">true</FeatureXPlatDacDebugging_HostWindowsx86>
@@ -51,22 +38,17 @@
<FeatureUseAsmGCWriteBarriers>true</FeatureUseAsmGCWriteBarriers>
<!-- Setting this to "false" works only for workstation GC, not server. -->
<FeatureSymDiff>true</FeatureSymDiff>
- <FeatureSynchronizationContextWait>true</FeatureSynchronizationContextWait>
<FeatureReadyToRun Condition="'$(TargetArch)'!='arm64'">true</FeatureReadyToRun>
-
- <FeatureCoreSystem>true</FeatureCoreSystem>
<FeatureClassicCominterop>true</FeatureClassicCominterop>
<FeatureCominterop>true</FeatureCominterop>
<FeatureICastable>true</FeatureICastable>
<FeatureCominteropUnmanagedActivation>true</FeatureCominteropUnmanagedActivation>
<FeatureCominteropWinRTManagedActivation>true</FeatureCominteropWinRTManagedActivation>
- <FeatureHostAssemblyResolver>true</FeatureHostAssemblyResolver>
<FeatureLazyCOWPages Condition="('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'arm')">true</FeatureLazyCOWPages>
<FeatureLegacyNetCFDbgHostControl>true</FeatureLegacyNetCFDbgHostControl>
<FeatureRandomizedStringHashing>true</FeatureRandomizedStringHashing>
<!-- The rejit feature is available only on supported architectures (x86 & x64) -->
<FeatureReJIT Condition="('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'amd64')">true</FeatureReJIT>
- <FeatureWindowsPhone>true</FeatureWindowsPhone>
<FeatureManagedEtw>true</FeatureManagedEtw>
<FeatureManagedEtwChannels>true</FeatureManagedEtwChannels>
<BinderDebugLog Condition="'$(_BuildType)'=='dbg'">true</BinderDebugLog>
diff --git a/clr.defines.targets b/clr.defines.targets
index a45d0dd9de..f09ff973b2 100644
--- a/clr.defines.targets
+++ b/clr.defines.targets
@@ -4,46 +4,29 @@
<CDefines Condition="'$(DebuggingSupported)' == 'true'">$(CDefines);DEBUGGING_SUPPORTED</CDefines>
<CDefines Condition="'$(EnCSupported)' == 'true'">$(CDefines);EnC_SUPPORTED</CDefines>
<CDefines Condition="'$(EnableDownlevelForNls)' == 'true'">$(CDefines);ENABLE_DOWNLEVEL_FOR_NLS</CDefines>
- <CDefines Condition="'$(FeatureAppdomainResourceMonitoring)' == 'true'">$(CDefines);FEATURE_APPDOMAIN_RESOURCE_MONITORING</CDefines>
- <CDefines Condition="'$(FeatureAppdomainmanagerInitoptions)' == 'true'">$(CDefines);FEATURE_APPDOMAINMANAGER_INITOPTIONS</CDefines>
<CDefines Condition="'$(FeatureAppX)' == 'true'">$(CDefines);FEATURE_APPX</CDefines>
- <CDefines Condition="'$(FeatureAppXBinder)' == 'true'">$(CDefines);FEATURE_APPX_BINDER</CDefines>
- <CDefines Condition="'$(FeatureAptca)' == 'true'">$(CDefines);FEATURE_APTCA</CDefines>
<CDefines Condition="'$(FeatureArrayStubAsIL)' == 'true'">$(CDefines);FEATURE_ARRAYSTUB_AS_IL</CDefines>
<CDefines Condition="'$(FeatureStubsAsIL)' == 'true'">$(CDefines);FEATURE_STUBS_AS_IL</CDefines>
- <CDefines Condition="'$(FeatureBclFormatting)' == 'true'">$(CDefines);FEATURE_BCL_FORMATTING</CDefines>
- <CDefines Condition="'$(FeatureCasPolicy)' == 'true'">$(CDefines);FEATURE_CAS_POLICY</CDefines>
<CDefines Condition="'$(FeatureClassicCominterop)' == 'true'">$(CDefines);FEATURE_CLASSIC_COMINTEROP</CDefines>
<CDefines Condition="'$(FeatureClickonce)' == 'true'">$(CDefines);FEATURE_CLICKONCE</CDefines>
<CDefines Condition="'$(FeatureTraceLogging)' == 'true'">$(CDefines);FEATURE_TRACELOGGING</CDefines>
- <CDefines Condition="'$(FeatureCodepagesFile)' == 'true'">$(CDefines);FEATURE_CODEPAGES_FILE</CDefines>
<CDefines Condition="'$(FeatureCollectibleTypes)' == 'true'">$(CDefines);FEATURE_COLLECTIBLE_TYPES</CDefines>
<CDefines Condition="'$(FeatureCominterop)' == 'true'">$(CDefines);FEATURE_COMINTEROP</CDefines>
<CDefines Condition="'$(FeatureICastable)' == 'true'">$(CDefines);FEATURE_ICASTABLE</CDefines>
<CDefines Condition="'$(FeatureCominteropApartmentSupport)' == 'true'">$(CDefines);FEATURE_COMINTEROP_APARTMENT_SUPPORT</CDefines>
- <CDefines Condition="'$(FeatureCominteropManagedActivation)' == 'true'">$(CDefines);FEATURE_COMINTEROP_MANAGED_ACTIVATION</CDefines>
<CDefines Condition="'$(FeatureCominteropRegistration)' == 'true'">$(CDefines);FEATURE_COMINTEROP_REGISTRATION</CDefines>
<CDefines Condition="'$(FeatureCominteropTlbSupport)' == 'true'">$(CDefines);FEATURE_COMINTEROP_TLB_SUPPORT</CDefines>
<CDefines Condition="'$(FeatureCominteropUnmanagedActivation)' == 'true'">$(CDefines);FEATURE_COMINTEROP_UNMANAGED_ACTIVATION</CDefines>
<CDefines Condition="'$(FeatureCominteropWinRTManagedActivation)' == 'true'">$(CDefines);FEATURE_COMINTEROP_WINRT_MANAGED_ACTIVATION</CDefines> <!-- Enables code required to activate managed winrt from native-->
- <CDefines Condition="'$(FeatureCominteropWinRTDesktopHost)' == 'true'">$(CDefines);FEATURE_COMINTEROP_WINRT_DESKTOP_HOST</CDefines>
- <CDefines Condition="'$(FeatureCompressedstack)' == 'true'">$(CDefines);FEATURE_COMPRESSEDSTACK</CDefines>
- <CDefines Condition="'$(FeatureCoreclr)' == 'true'">$(CDefines);FEATURE_CORECLR</CDefines>
<CDefines Condition="'$(FeatureCoreFxGlobalization)' == 'true'">$(CDefines);FEATURE_COREFX_GLOBALIZATION</CDefines>
- <CDefines Condition="'$(FeatureCoreSystem)' == 'true'">$(CDefines);FEATURE_CORESYSTEM</CDefines>
- <CDefines Condition="'$(FeatureCorruptingExceptions)' == 'true'">$(CDefines);FEATURE_CORRUPTING_EXCEPTIONS</CDefines>
- <CDefines Condition="'$(FeatureCrypto)' == 'true'">$(CDefines);FEATURE_CRYPTO</CDefines>
<CDefines Condition="'$(FeatureDbgipcTransportDI)' == 'true'">$(CDefines);FEATURE_DBGIPC_TRANSPORT_DI</CDefines>
<CDefines Condition="'$(FeatureDbgipcTransportVM)' == 'true'">$(CDefines);FEATURE_DBGIPC_TRANSPORT_VM</CDefines>
<CDefines Condition="'$(FeatureDbgPublish)' == 'true'">$(CDefines);FEATURE_DBG_PUBLISH</CDefines>
<CDefines Condition="'$(FeatureEventTrace)' == 'true'">$(CDefines);FEATURE_EVENT_TRACE</CDefines>
<CDefines Condition="'$(FeatureXplatEventSource)' == 'true'">$(CDefines);FEATURE_EVENTSOURCE_XPLAT</CDefines>
- <CDefines Condition="'$(FeatureExceptionDispatchInfo)' == 'true'">$(CDefines);FEATURE_EXCEPTIONDISPATCHINFO</CDefines>
- <CDefines Condition="'$(FeatureExceptionNotifications)' == 'true'">$(CDefines);FEATURE_EXCEPTION_NOTIFICATIONS</CDefines>
<CDefines Condition="'$(FeatureFullNGen)' == 'true'">$(CDefines);FEATURE_FULL_NGEN</CDefines>
<CDefines Condition="'$(FeatureFusion)' == 'true'">$(CDefines);FEATURE_FUSION</CDefines>
<CDefines Condition="'$(FeatureHijack)' == 'true'">$(CDefines);FEATURE_HIJACK</CDefines>
- <CDefines Condition="'$(FeatureHostAssemblyResolver)' == 'true'">$(CDefines);FEATURE_HOST_ASSEMBLY_RESOLVER</CDefines>
<CDefines Condition="'$(FeatureImpersonation)' == 'true'">$(CDefines);FEATURE_IMPERSONATION</CDefines>
<CDefines Condition="'$(FeatureIncludeAllInterfaces)' == 'true'">$(CDefines);FEATURE_INCLUDE_ALL_INTERFACES</CDefines>
<CDefines Condition="'$(FeatureInteropDebugging)' == 'true'">$(CDefines);FEATURE_INTEROP_DEBUGGING</CDefines>
@@ -53,14 +36,10 @@
<CDefines Condition="'$(FeatureIsostoreLight)' == 'true'">$(CDefines);FEATURE_ISOSTORE_LIGHT</CDefines>
<CDefines Condition="'$(FeatureIsymReader)' == 'true'">$(CDefines);FEATURE_ISYM_READER</CDefines>
<CDefines Condition="'$(FeatureLazyCOWPages)' == 'true'">$(CDefines);FEATURE_LAZY_COW_PAGES</CDefines>
- <CDefines Condition="'$(FeatureLeakCultureInfo)' == 'true'">$(CDefines);FEATURE_LEAK_CULTURE_INFO</CDefines>
<CDefines Condition="'$(FeatureLegacyNetCFDbgHostControl)' == 'true'">$(CDefines);FEATURE_LEGACYNETCF_DBG_HOST_CONTROL</CDefines>
- <CDefines Condition="'$(FeatureLegacySurface)' == 'true'">$(CDefines);FEATURE_LEGACYSURFACE</CDefines>
- <CDefines Condition="'$(FeatureLoaderOptimization)' == 'true'">$(CDefines);FEATURE_LOADER_OPTIMIZATION</CDefines>
<CDefines Condition="'$(FeatureMacl)' == 'true'">$(CDefines);FEATURE_MACL</CDefines>
<CDefines Condition="'$(FeatureManagedEtw)' == 'true'">$(CDefines);FEATURE_MANAGED_ETW</CDefines>
<CDefines Condition="'$(FeatureManagedEtwChannels)' == 'true'">$(CDefines);FEATURE_MANAGED_ETW_CHANNELS</CDefines>
- <CDefines Condition="'$(FeatureMainClrModuleUsesCoreName)' == 'true'">$(CDefines);FEATURE_MAIN_CLR_MODULE_USES_CORE_NAME</CDefines>
<CDefines Condition="'$(FeatureMdaSupported)' == 'true'">$(CDefines);MDA_SUPPORTED</CDefines>
<CDefines Condition="'$(FeatureMergeCultureSupportAndEngine)' == 'true'">$(CDefines);FEATURE_MERGE_CULTURE_SUPPORT_AND_ENGINE</CDefines>
<CDefines Condition="'$(FeatureMergeJitAndEngine)' == 'true'">$(CDefines);FEATURE_MERGE_JIT_AND_ENGINE</CDefines>
@@ -75,50 +54,36 @@
<CDefines Condition="'$(FeatureMetadataCustomDataSource)' == 'true'">$(CDefines);FEATURE_METADATA_CUSTOM_DATA_SOURCE</CDefines>
<CDefines Condition="'$(FeatureMetadataDebuggeeDataSource)' == 'true'">$(CDefines);FEATURE_METADATA_DEBUGGEE_DATA_SOURCE</CDefines>
<CDefines Condition="'$(FeatureMetadataVerifyLayouts)' == 'true'">$(CDefines);FEATURE_METADATA_VERIFY_LAYOUTS</CDefines>
- <CDefines Condition="'$(FeatureMethodRental)' == 'true'">$(CDefines);FEATURE_METHOD_RENTAL</CDefines>
<CDefines Condition="'$(FeatureMixedMode)' == 'true'">$(CDefines);FEATURE_MIXEDMODE</CDefines>
<CDefines Condition="'$(FeatureMultiModuleAssemblies)' == 'true'">$(CDefines);FEATURE_MULTIMODULE_ASSEMBLIES</CDefines>
<CDefines Condition="'$(FeatureNativeImageGeneration)' == 'true'">$(CDefines);FEATURE_NATIVE_IMAGE_GENERATION</CDefines>
<CDefines Condition="'$(FeatureNongenericCollections)' == 'true'">$(CDefines);FEATURE_NONGENERIC_COLLECTIONS</CDefines>
- <CDefines Condition="'$(FeatureNormIdnaOnly)' == 'true'">$(CDefines);FEATURE_NORM_IDNA_ONLY</CDefines>
<CDefines Condition="'$(FeaturePal)' == 'true'">$(CDefines);FEATURE_PAL</CDefines>
<CDefines Condition="'$(FeaturePerfmon)' == 'true'">$(CDefines);FEATURE_PERFMON</CDefines>
- <CDefines Condition="'$(FeaturePls)' == 'true'">$(CDefines);FEATURE_PLS</CDefines>
<CDefines Condition="'$(FeaturePrejit)' == 'true'">$(CDefines);FEATURE_PREJIT</CDefines>
<CDefines Condition="'$(FeatureRandomizedStringHashing)' == 'true'">$(CDefines);FEATURE_RANDOMIZED_STRING_HASHING</CDefines>
<CDefines Condition="'$(FeatureReflectionOnlyLoad)' == 'true'">$(CDefines);FEATURE_REFLECTION_ONLY_LOAD</CDefines>
<CDefines Condition="'$(FeatureReJIT)' == 'true'">$(CDefines);FEATURE_REJIT</CDefines>
<CDefines Condition="'$(FeatureRemoting)' == 'true'">$(CDefines);FEATURE_REMOTING</CDefines>
- <CDefines Condition="'$(FeatureRwlock)' == 'true'">$(CDefines);FEATURE_RWLOCK</CDefines>
- <CDefines Condition="'$(FeatureSerialization)' == 'true'">$(CDefines);FEATURE_SERIALIZATION</CDefines>
<CDefines Condition="'$(FeatureSortTables)' == 'true'">$(CDefines);FEATURE_SORT_TABLES</CDefines>
- <CDefines Condition="'$(FeatureSpanOfT)' == 'true'">$(CDefines);FEATURE_SPAN_OF_T</CDefines>
<CDefines Condition="'$(FeatureStackProbe)' == 'true'">$(CDefines);FEATURE_STACK_PROBE</CDefines>
<CDefines Condition="'$(FeatureStandaloneSn)' == 'true'">$(CDefines);FEATURE_STANDALONE_SN</CDefines>
<CDefines Condition="'$(FeatureStrongnameDelaySigningAllowed)' == 'true'">$(CDefines);FEATURE_STRONGNAME_DELAY_SIGNING_ALLOWED</CDefines>
- <CDefines Condition="'$(FeatureStrongnameMigration)' == 'true'">$(CDefines);FEATURE_STRONGNAME_MIGRATION</CDefines>
<CDefines Condition="'$(FeatureSvrGc)' == 'true'">$(CDefines);FEATURE_SVR_GC</CDefines>
- <CDefines Condition="'$(FeatureSynchronizationContextWait)' == 'true'">$(CDefines);FEATURE_SYNCHRONIZATIONCONTEXT_WAIT</CDefines>
<CDefines Condition="'$(FeaturePerfMap)' == 'true'">$(CDefines);FEATURE_PERFMAP</CDefines>
- <CDefines Condition="'$(FeatureSynchronizationcontextWait)' == 'true'">$(CDefines);FEATURE_SYNCHRONIZATIONCONTEXT_WAIT</CDefines>
<CDefines Condition="'$(FeatureSyntheticCultures)' == 'true'">$(CDefines);FEATURE_SYNTHETIC_CULTURES</CDefines>
<CDefines Condition="'$(FeatureTypeEquivalence)' == 'true'">$(CDefines);FEATURE_TYPEEQUIVALENCE</CDefines>
<CDefines Condition="'$(FeatureUefChainmanager)' == 'true'">$(CDefines);FEATURE_UEF_CHAINMANAGER</CDefines>
<CDefines Condition="'$(FeatureUseLcid)' == 'true'">$(CDefines);FEATURE_USE_LCID</CDefines>
<CDefines Condition="'$(FeatureUtilcodeNoDependencies)' == 'true'">$(CDefines);FEATURE_UTILCODE_NO_DEPENDENCIES</CDefines>
<CDefines Condition="'$(FeatureValidator)' == 'true'">$(CDefines);FEATURE_VALIDATOR</CDefines>
- <CDefines Condition="'$(FeatureVersioning)' == 'true'">$(CDefines);FEATURE_VERSIONING</CDefines>
<CDefines Condition="'$(FeatureVersioningLog)' == 'true'">$(CDefines);FEATURE_VERSIONING_LOG</CDefines>
<CDefines Condition="'$(FeatureWatson)' == 'true'">$(CDefines);FEATURE_WATSON</CDefines>
<CDefines Condition="'$(FeatureWin32Registry)' == 'true'">$(CDefines);FEATURE_WIN32_REGISTRY</CDefines>
- <CDefines Condition="'$(FeatureWindowsPhone)' == 'true'">$(CDefines);FEATURE_WINDOWSPHONE</CDefines>
<CDefines Condition="'$(FeatureWinMDResilient)' == 'true'">$(CDefines);FEATURE_WINMD_RESILIENT</CDefines>
- <CDefines Condition="'$(FeatureX509)' == 'true'">$(CDefines);FEATURE_X509</CDefines>
- <CDefines Condition="'$(FeatureX509Securestrings)' == 'true'">$(CDefines);FEATURE_X509_SECURESTRINGS</CDefines>
<CDefines Condition="'$(ProfilingSupportedBuild)' == 'true'">$(CDefines);PROFILING_SUPPORTED</CDefines>
<CDefines Condition="'$(UefChainingSupported)' == 'true'">$(CDefines);UEF_CHAINING_SUPPORTED</CDefines>
<CDefines Condition="'$(UseStl)' == 'true'">$(CDefines);USE_STL</CDefines>
- <CDefines Condition="'$(FeatureMulticoreJIT)' == 'true'">$(CDefines);FEATURE_MULTICOREJIT</CDefines>
<CDefines Condition="'$(FeatureUseAsmGCWriteBarriers)' == 'true'">$(CDefines);FEATURE_USE_ASM_GC_WRITE_BARRIERS</CDefines>
<CDefines Condition="'$(BinderDebugLog)' == 'true'">$(CDefines);BINDER_DEBUG_LOG</CDefines>
<CDefines Condition="'$(FeatureSymDiff)' == 'true'">$(CDefines);FEATURE_SYMDIFF</CDefines>
@@ -128,37 +93,19 @@
<CDefines Condition="'$(FeatureReadyToRunCompiler)' == 'true'">$(CDefines);FEATURE_READYTORUN_COMPILER</CDefines>
<DefineConstants Condition="'$(BuildTypeRet)' == 'true'">$(DefineConstants);BUILDTYPE_RET</DefineConstants>
- <DefineConstants Condition="'$(FeatureAppdomainmanagerInitoptions)' == 'true'">$(DefineConstants);FEATURE_APPDOMAINMANAGER_INITOPTIONS</DefineConstants>
- <DefineConstants Condition="'$(FeatureAppdomainResourceMonitoring)' == 'true'">$(DefineConstants);FEATURE_APPDOMAIN_RESOURCE_MONITORING</DefineConstants>
<DefineConstants Condition="'$(FeatureAppX)' == 'true'">$(DefineConstants);FEATURE_APPX</DefineConstants>
- <DefineConstants Condition="'$(FeatureAppXBinder)' == 'true'">$(DefineConstants);FEATURE_APPX_BINDER</DefineConstants>
- <DefineConstants Condition="'$(FeatureAptca)' == 'true'">$(DefineConstants);FEATURE_APTCA</DefineConstants>
<DefineConstants Condition="'$(FeatureArrayStubAsIL)' == 'true'">$(DefineConstants);FEATURE_ARRAYSTUB_AS_IL</DefineConstants>
<DefineConstants Condition="'$(FeatureStubsAsIL)' == 'true'">$(DefineConstants);FEATURE_STUBS_AS_IL</DefineConstants>
- <DefineConstants Condition="'$(FeatureBclFormatting)' == 'true'">$(DefineConstants);FEATURE_BCL_FORMATTING</DefineConstants>
- <DefineConstants Condition="'$(FeatureCasPolicy)' == 'true'">$(DefineConstants);FEATURE_CAS_POLICY</DefineConstants>
<DefineConstants Condition="'$(FeatureClassicCominterop)' == 'true'">$(DefineConstants);FEATURE_CLASSIC_COMINTEROP</DefineConstants>
<DefineConstants Condition="'$(FeatureClickonce)' == 'true'">$(DefineConstants);FEATURE_CLICKONCE</DefineConstants>
- <DefineConstants Condition="'$(FeatureCodepagesFile)' == 'true'">$(DefineConstants);FEATURE_CODEPAGES_FILE</DefineConstants>
- <DefineConstants Condition="'$(FeatureCollectibleTypes)' == 'true'">$(DefineConstants);FEATURE_COLLECTIBLE_TYPES</DefineConstants>
<DefineConstants Condition="'$(FeatureCominterop)' == 'true'">$(DefineConstants);FEATURE_COMINTEROP</DefineConstants>
<DefineConstants Condition="'$(FeatureCominteropApartmentSupport)' == 'true'">$(DefineConstants);FEATURE_COMINTEROP_APARTMENT_SUPPORT</DefineConstants>
- <DefineConstants Condition="'$(FeatureCominteropManagedActivation)' == 'true'">$(DefineConstants);FEATURE_COMINTEROP_MANAGED_ACTIVATION</DefineConstants>
<DefineConstants Condition="'$(FeatureCominteropUnmanagedActivation)' == 'true'">$(DefineConstants);FEATURE_COMINTEROP_UNMANAGED_ACTIVATION</DefineConstants>
<DefineConstants Condition="'$(FeatureCominteropWinRTManagedActivation)' == 'true'">$(DefineConstants);FEATURE_COMINTEROP_WINRT_MANAGED_ACTIVATION</DefineConstants>
- <DefineConstants Condition="'$(FeatureCominteropWinRTDesktopHost)' == 'true'">$(DefineConstants);FEATURE_COMINTEROP_WINRT_DESKTOP_HOST</DefineConstants>
- <DefineConstants Condition="'$(FeatureCompressedstack)' == 'true'">$(DefineConstants);FEATURE_COMPRESSEDSTACK</DefineConstants>
- <DefineConstants Condition="'$(FeatureCoreclr)' == 'true'">$(DefineConstants);FEATURE_CORECLR</DefineConstants>
<DefineConstants Condition="'$(FeatureCoreFxGlobalization)' == 'true'">$(DefineConstants);FEATURE_COREFX_GLOBALIZATION</DefineConstants>
- <DefineConstants Condition="'$(FeatureCoreSystem)' == 'true'">$(DefineConstants);FEATURE_CORESYSTEM</DefineConstants>
- <DefineConstants Condition="'$(FeatureCorruptingExceptions)' == 'true'">$(DefineConstants);FEATURE_CORRUPTING_EXCEPTIONS</DefineConstants>
- <DefineConstants Condition="'$(FeatureCrypto)' == 'true'">$(DefineConstants);FEATURE_CRYPTO</DefineConstants>
<DefineConstants Condition="'$(FeatureDisplayCultureInfo)' == 'true'">$(DefineConstants);FEATURE_DISPLAY_CULTURE_INFO</DefineConstants>
<DefineConstants Condition="'$(FeatureDisplayRegionInfo)' == 'true'">$(DefineConstants);FEATURE_DISPLAY_REGION_INFO</DefineConstants>
- <DefineConstants Condition="'$(FeatureExceptionDispatchInfo)' == 'true'">$(DefineConstants);FEATURE_EXCEPTIONDISPATCHINFO</DefineConstants>
- <DefineConstants Condition="'$(FeatureExceptionNotifications)' == 'true'">$(DefineConstants);FEATURE_EXCEPTION_NOTIFICATIONS</DefineConstants>
<DefineConstants Condition="'$(FeatureFusion)' == 'true'">$(DefineConstants);FEATURE_FUSION</DefineConstants>
- <DefineConstants Condition="'$(FeatureHostAssemblyResolver)' == 'true'">$(DefineConstants);FEATURE_HOST_ASSEMBLY_RESOLVER</DefineConstants>
<DefineConstants Condition="'$(FeatureHosting)' == 'true'">$(DefineConstants);FEATURE_HOSTING</DefineConstants>
<DefineConstants Condition="'$(FeatureIdentityReference)' == 'true'">$(DefineConstants);FEATURE_IDENTITY_REFERENCE</DefineConstants>
<DefineConstants Condition="'$(FeatureImpersonation)' == 'true'">$(DefineConstants);FEATURE_IMPERSONATION</DefineConstants>
@@ -167,43 +114,26 @@
<DefineConstants Condition="'$(FeatureIsolatedStorageQuotaEnforcement)' == 'true'">$(DefineConstants);FEATURE_ISOLATED_STORAGE_QUOTA_ENFORCEMENT</DefineConstants>
<DefineConstants Condition="'$(FeatureIsostore)' == 'true'">$(DefineConstants);FEATURE_ISOSTORE</DefineConstants>
<DefineConstants Condition="'$(FeatureIsostoreLight)' == 'true'">$(DefineConstants);FEATURE_ISOSTORE_LIGHT</DefineConstants>
- <DefineConstants Condition="'$(FeatureLeakCultureInfo)' == 'true'">$(DefineConstants);FEATURE_LEAK_CULTURE_INFO</DefineConstants>
- <DefineConstants Condition="'$(FeatureLegacySurface)' == 'true'">$(DefineConstants);FEATURE_LEGACYSURFACE</DefineConstants>
- <DefineConstants Condition="'$(FeatureLoaderOptimization)' == 'true'">$(DefineConstants);FEATURE_LOADER_OPTIMIZATION</DefineConstants>
<DefineConstants Condition="'$(FeatureMacl)' == 'true'">$(DefineConstants);FEATURE_MACL</DefineConstants>
<DefineConstants Condition="'$(FeatureManagedEtw)' == 'true'">$(DefineConstants);FEATURE_MANAGED_ETW</DefineConstants>
<DefineConstants Condition="'$(FeatureManagedEtwChannels)' == 'true'">$(DefineConstants);FEATURE_MANAGED_ETW_CHANNELS</DefineConstants>
- <DefineConstants Condition="'$(FeatureMainClrModuleUsesCoreName)' == 'true'">$(DefineConstants);FEATURE_MAIN_CLR_MODULE_USES_CORE_NAME</DefineConstants>
- <DefineConstants Condition="'$(FeatureMethodRental)' == 'true'">$(DefineConstants);FEATURE_METHOD_RENTAL</DefineConstants>
<DefineConstants Condition="'$(FeatureMultiModuleAssemblies)' == 'true'">$(DefineConstants);FEATURE_MULTIMODULE_ASSEMBLIES</DefineConstants>
<DefineConstants Condition="'$(FeatureNongenericCollections)' == 'true'">$(DefineConstants);FEATURE_NONGENERIC_COLLECTIONS</DefineConstants>
- <DefineConstants Condition="'$(FeatureNormIdnaOnly)' == 'true'">$(DefineConstants);FEATURE_NORM_IDNA_ONLY</DefineConstants>
<DefineConstants Condition="'$(FeaturePal)' == 'true'">$(DefineConstants);FEATURE_PAL</DefineConstants>
<DefineConstants Condition="'$(FeaturePathCompat)' == 'true'">$(DefineConstants);FEATURE_PATHCOMPAT</DefineConstants>
<DefineConstants Condition="'$(FeatureXplatEventSource)' == 'true'">$(DefineConstants);FEATURE_EVENTSOURCE_XPLAT</DefineConstants>
<DefineConstants Condition="'$(FeaturePerfmon)' == 'true'">$(DefineConstants);FEATURE_PERFMON</DefineConstants>
- <DefineConstants Condition="'$(FeaturePls)' == 'true'">$(DefineConstants);FEATURE_PLS</DefineConstants>
<DefineConstants Condition="'$(FeatureRandomizedStringHashing)' == 'true'">$(DefineConstants);FEATURE_RANDOMIZED_STRING_HASHING</DefineConstants>
<DefineConstants Condition="'$(FeatureReflectionOnlyLoad)' == 'true'">$(DefineConstants);FEATURE_REFLECTION_ONLY_LOAD</DefineConstants>
<DefineConstants Condition="'$(FeatureRemoting)' == 'true'">$(DefineConstants);FEATURE_REMOTING</DefineConstants>
- <DefineConstants Condition="'$(FeatureRwlock)' == 'true'">$(DefineConstants);FEATURE_RWLOCK</DefineConstants>
- <DefineConstants Condition="'$(FeatureSerialization)' == 'true'">$(DefineConstants);FEATURE_SERIALIZATION</DefineConstants>
<DefineConstants Condition="'$(FeatureSortTables)' == 'true'">$(DefineConstants);FEATURE_SORT_TABLES</DefineConstants>
- <DefineConstants Condition="'$(FeatureSpanOfT)' == 'true'">$(DefineConstants);FEATURE_SPAN_OF_T</DefineConstants>
- <DefineConstants Condition="'$(FeatureStrongnameMigration)' == 'true'">$(DefineConstants);FEATURE_STRONGNAME_MIGRATION</DefineConstants>
- <DefineConstants Condition="'$(FeatureSynchronizationcontextWait)' == 'true'">$(DefineConstants);FEATURE_SYNCHRONIZATIONCONTEXT_WAIT</DefineConstants>
<DefineConstants Condition="'$(FeatureSyntheticCultures)' == 'true'">$(DefineConstants);FEATURE_SYNTHETIC_CULTURES</DefineConstants>
<DefineConstants Condition="'$(FeatureTypeEquivalence)' == 'true'">$(DefineConstants);FEATURE_TYPEEQUIVALENCE</DefineConstants>
<DefineConstants Condition="'$(FeatureUseLcid)' == 'true'">$(DefineConstants);FEATURE_USE_LCID</DefineConstants>
<DefineConstants Condition="'$(FeatureValidator)' == 'true'">$(DefineConstants);FEATURE_VALIDATOR</DefineConstants>
- <DefineConstants Condition="'$(FeatureVersioning)' == 'true'">$(DefineConstants);FEATURE_VERSIONING</DefineConstants>
<DefineConstants Condition="'$(FeatureWin32Registry)' == 'true'">$(DefineConstants);FEATURE_WIN32_REGISTRY</DefineConstants>
- <DefineConstants Condition="'$(FeatureWindowsPhone)' == 'true'">$(DefineConstants);FEATURE_WINDOWSPHONE</DefineConstants>
<DefineConstants Condition="'$(FeatureWinMDResilient)' == 'true'">$(DefineConstants);FEATURE_WINMD_RESILIENT</DefineConstants>
- <DefineConstants Condition="'$(FeatureX509)' == 'true'">$(DefineConstants);FEATURE_X509</DefineConstants>
- <DefineConstants Condition="'$(FeatureX509Securestrings)' == 'true'">$(DefineConstants);FEATURE_X509_SECURESTRINGS</DefineConstants>
<DefineConstants Condition="'$(ProfilingSupportedBuild)' == 'true'">$(DefineConstants);PROFILING_SUPPORTED</DefineConstants>
- <DefineConstants Condition="'$(FeatureMulticoreJIT)' == 'true'">$(DefineConstants);FEATURE_MULTICOREJIT</DefineConstants>
<DefineConstants Condition="'$(FeatureReJIT)' == 'true'">$(DefineConstants);FEATURE_REJIT</DefineConstants>
<DefineConstants Condition="'$(FeatureUseAsmGCWriteBarriers)' == 'true'">$(DefineConstants);FEATURE_USE_ASM_GC_WRITE_BARRIERS</DefineConstants>
<DefineConstants Condition="'$(BinderDebugLog)' == 'true'">$(DefineConstants);BINDER_DEBUG_LOG</DefineConstants>
diff --git a/clr.desktop.props b/clr.desktop.props
deleted file mode 100644
index 6d5951e334..0000000000
--- a/clr.desktop.props
+++ /dev/null
@@ -1,104 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Condition="'$(ClrProduct)'=='desktop_clr'">
- <DebuggingSupported>true</DebuggingSupported>
- <DebuggingSupportedBuild>true</DebuggingSupportedBuild>
- <EnCSupported Condition="('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'amd64')">true</EnCSupported>
- <EnableDownlevelForNls>true</EnableDownlevelForNls>
- <FeatureAppdomainResourceMonitoring>true</FeatureAppdomainResourceMonitoring>
- <FeatureAppdomainmanagerInitoptions>true</FeatureAppdomainmanagerInitoptions>
- <FeatureAppX>true</FeatureAppX>
- <FeatureAppXBinder>true</FeatureAppXBinder>
- <FeatureAptca>true</FeatureAptca>
- <FeatureArrayStubAsIL Condition="('$(TargetArch)' == 'arm')">true</FeatureArrayStubAsIL>
- <FeatureBclFormatting>true</FeatureBclFormatting>
- <FeatureCasPolicy>true</FeatureCasPolicy>
- <FeatureTraceLogging>true</FeatureTraceLogging>
- <FeatureClassicCominterop>true</FeatureClassicCominterop>
- <FeatureLegacySurface>true</FeatureLegacySurface>
- <FeatureClickonce>true</FeatureClickonce>
- <FeatureCodepagesFile>true</FeatureCodepagesFile>
- <FeatureCollectibleTypes>true</FeatureCollectibleTypes>
- <FeatureCominterop>true</FeatureCominterop>
- <FeatureCominteropApartmentSupport>true</FeatureCominteropApartmentSupport>
- <FeatureCominteropManagedActivation>true</FeatureCominteropManagedActivation>
- <FeatureCominteropRegistration>true</FeatureCominteropRegistration>
- <FeatureCominteropTlbSupport>true</FeatureCominteropTlbSupport>
- <FeatureCominteropUnmanagedActivation>true</FeatureCominteropUnmanagedActivation>
- <FeatureCominteropWinRTManagedActivation>true</FeatureCominteropWinRTManagedActivation>
- <FeatureCominteropWinRTDesktopHost>true</FeatureCominteropWinRTDesktopHost>
- <FeatureCompressedstack>true</FeatureCompressedstack>
- <FeatureCorruptingExceptions>true</FeatureCorruptingExceptions>
- <FeatureCrypto>true</FeatureCrypto>
- <FeatureDbgPublish>true</FeatureDbgPublish>
- <FeatureDbiDebugging>true</FeatureDbiDebugging>
- <FeatureDbiOopDebugging_HostLocal>true</FeatureDbiOopDebugging_HostLocal>
- <FeatureDbiOopDebugging_HostWindowsx86>false</FeatureDbiOopDebugging_HostWindowsx86>
- <FeatureDisplayCultureInfo>true</FeatureDisplayCultureInfo>
- <FeatureDisplayRegionInfo>true</FeatureDisplayRegionInfo>
- <FeatureEventTrace>true</FeatureEventTrace>
- <FeatureExceptionDispatchInfo>true</FeatureExceptionDispatchInfo>
- <FeatureExceptionNotifications>true</FeatureExceptionNotifications>
- <FeatureFullNGen>true</FeatureFullNGen>
- <FeatureFusion>true</FeatureFusion>
- <FeatureHijack>true</FeatureHijack>
- <FeatureHosting>true</FeatureHosting>
- <FeatureIdentityReference>true</FeatureIdentityReference>
- <FeatureImpersonation>true</FeatureImpersonation>
- <FeatureIncludeAllInterfaces>true</FeatureIncludeAllInterfaces>
- <FeatureInteropDebugging Condition="('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'amd64')">true</FeatureInteropDebugging>
- <FeatureIpcman>true</FeatureIpcman>
- <FeatureIsolatedStorageQuotaEnforcement>true</FeatureIsolatedStorageQuotaEnforcement>
- <FeatureIsostore>true</FeatureIsostore>
- <FeatureIsymReader>true</FeatureIsymReader>
- <!-- This is here for testing purposes only, and only on checked builds for x86/ARM -->
- <FeatureLazyCOWPages Condition="'$(_BuildType)'!='ret' and (('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'arm'))">true</FeatureLazyCOWPages>
- <FeatureLeakCultureInfo>true</FeatureLeakCultureInfo>
- <FeatureLoaderOptimization>true</FeatureLoaderOptimization>
- <FeatureMacl>true</FeatureMacl>
- <FeatureManagedEtw>true</FeatureManagedEtw>
- <FeatureManagedEtwChannels>true</FeatureManagedEtwChannels>
- <FeatureMdaSupported>true</FeatureMdaSupported>
- <FeatureMethodRental>true</FeatureMethodRental>
- <FeatureMixedMode>true</FeatureMixedMode>
- <FeatureMulticoreJIT>true</FeatureMulticoreJIT>
- <FeatureMultiModuleAssemblies>true</FeatureMultiModuleAssemblies>
- <FeatureNativeImageGeneration>true</FeatureNativeImageGeneration>
- <FeatureNongenericCollections>true</FeatureNongenericCollections>
- <FeaturePathCompat>true</FeaturePathCompat>
- <FeaturePerfmon>true</FeaturePerfmon>
- <FeaturePls>true</FeaturePls>
- <FeaturePrejit>true</FeaturePrejit>
- <FeatureRandomizedStringHashing>true</FeatureRandomizedStringHashing>
- <FeatureReflectionOnlyLoad>true</FeatureReflectionOnlyLoad>
- <!-- The rejit feature is available only on supported architectures (Windows x86 & Windows x64) -->
- <FeatureReJIT Condition="('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'amd64')">true</FeatureReJIT>
- <FeatureRemoting>true</FeatureRemoting>
- <FeatureRwlock>true</FeatureRwlock>
- <FeatureSerialization>true</FeatureSerialization>
- <FeatureSortTables>true</FeatureSortTables>
- <FeatureStackProbe Condition="'$(TargetArch)' != 'arm'">true</FeatureStackProbe>
- <FeatureStrongnameDelaySigningAllowed>true</FeatureStrongnameDelaySigningAllowed>
- <FeatureStrongnameMigration>true</FeatureStrongnameMigration>
- <FeatureSvrGc>true</FeatureSvrGc>
- <FeatureSynchronizationcontextWait>true</FeatureSynchronizationcontextWait>
- <FeatureSyntheticCultures>true</FeatureSyntheticCultures>
- <FeatureTypeEquivalence>true</FeatureTypeEquivalence>
- <FeatureUefChainmanager>true</FeatureUefChainmanager>
- <FeatureUseLcid>true</FeatureUseLcid>
- <FeatureValidator>true</FeatureValidator>
- <FeatureWatson>true</FeatureWatson>
- <FeatureWin32Registry>true</FeatureWin32Registry>
- <FeatureX509>true</FeatureX509>
- <FeatureX509Securestrings>true</FeatureX509Securestrings>
- <FeatureXPlatDacDebugging_HostWindowsx86 Condition="'$(TargetArch)' == 'arm'">true</FeatureXPlatDacDebugging_HostWindowsx86>
- <PerfcountersSupportedBuild>true</PerfcountersSupportedBuild>
- <ProfilingSupportedBuild>true</ProfilingSupportedBuild>
- <UefChainingSupported>true</UefChainingSupported>
- <UseMsvcrt>true</UseMsvcrt>
- <FeatureUseAsmGCWriteBarriers>true</FeatureUseAsmGCWriteBarriers>
- <!-- Setting this to "false" works only for workstation GC, not server. -->
- <FeatureSymDiff>true</FeatureSymDiff>
- <FeatureWinDbAppCompat>true</FeatureWinDbAppCompat>
- <FeatureReadyToRun Condition="'$(TargetArch)'!='arm64'">true</FeatureReadyToRun>
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/clr.props b/clr.props
index 7a3b3bd26a..b1d3618609 100644
--- a/clr.props
+++ b/clr.props
@@ -93,7 +93,6 @@
<!-- Note: ClrProduct can be set prior to this file to 'Standalone'. -->
<ClrProduct Condition="(('$(BuildProjectName)' == 'CoreCLR' or '$(BuildProjectName)' == 'CoreSys')) and ('$(ClrProduct)' == '' or '$(CoreTarget)' == 'true')">core_clr</ClrProduct>
- <ClrProduct Condition="('$(BuildProjectName)' == '') and ('$(ClrProduct)' == '')">desktop_clr</ClrProduct>
<ClAdditionalOptions>$(ClAdditionalOptions) /Zm200</ClAdditionalOptions>
<TargetDefines Condition="'$(BuildArchitecture)'=='i386'">$(BuildArchitecture);_X86_</TargetDefines>
@@ -120,7 +119,6 @@
<!-- CLR Feature Settings. We set the default values here, allow leaf projects to override, and then
set the CDefines based on these properties in clr.targets
-->
- <Import Project="$(MSBuildThisFileDirectory)clr.desktop.props" />
<Import Project="$(MSBuildThisFileDirectory)clr.coreclr.props" />
<PropertyGroup Condition="'$(CrossGenCompile)'=='true'">
@@ -128,20 +126,15 @@
<!-- If you add new features to this list make sure that they are not affecting codegen or content of datastructures persisted in NGen image -->
<EnCSupported>false</EnCSupported>
<PerfcountersSupportedBuild>false</PerfcountersSupportedBuild>
- <FeatureAppXBinder>false</FeatureAppXBinder>
- <FeatureCasPolicy>false</FeatureCasPolicy>
<FeatureEventTrace>false</FeatureEventTrace>
<FeatureFusion>false</FeatureFusion>
<FeatureIncludeAllInterfaces>false</FeatureIncludeAllInterfaces>
- <FeatureLoaderOptimization>false</FeatureLoaderOptimization>
<FeatureMdaSupported>false</FeatureMdaSupported>
<FeatureMergeJitAndEngine>true</FeatureMergeJitAndEngine>
- <FeatureMulticoreJIT>false</FeatureMulticoreJIT>
<FeatureRandomizedStringHashing>false</FeatureRandomizedStringHashing>
<FeatureReflectionOnlyLoad>false</FeatureReflectionOnlyLoad>
<FeatureStackProbe>false</FeatureStackProbe>
<FeatureReJIT>false</FeatureReJIT>
- <FeaturePls>false</FeaturePls>
<FeatureVersioningLog>false</FeatureVersioningLog>
<FeatureNativeImageGeneration>true</FeatureNativeImageGeneration>
<FeatureReadyToRunCompiler Condition="'$(FeatureReadyToRun)' == 'true'">true</FeatureReadyToRunCompiler>
@@ -162,14 +155,7 @@
<LinkUseCMT>true</LinkUseCMT>
-->
</PropertyGroup>
-
- <PropertyGroup>
- <MainClrModuleName Condition="'$(FeatureCoreclr)'=='true'">coreclr</MainClrModuleName>
- <MainClrModuleName Condition="'$(FeatureCoreclr)'!='true'">clr</MainClrModuleName>
- <MainDacMouleName Condition="'$(FeatureCoreclr)'=='true'">mscordaccore</MainDacMouleName>
- <MainDacMouleName Condition="'$(FeatureCoreclr)'!='true'">mscordacwks</MainDacMouleName>
- </PropertyGroup>
-
+
<PropertyGroup>
<DebugBuild Condition="'$(NTDEBUG)' == '' or '$(NTDEBUG)'=='ntsdnodbg'">false</DebugBuild>
<DebugBuild Condition="'$(NTDEBUG)' != '' and '$(NTDEBUG)'!='ntsdnodbg'">true</DebugBuild>
@@ -253,12 +239,9 @@
<PogoExePhase>1</PogoExePhase>
<ResgenDefines Condition="'$(FeatureImpersonation)' == '1'">$(ResgenDefines) /define:FEATURE_IMPERSONATION</ResgenDefines>
- <ResgenDefines Condition="'$(FeatureCrypto)' == '1'">$(ResgenDefines) /define:FEATURE_CRYPTO</ResgenDefines>
<ResgenDefines Condition="'$(FeatureIsostore)' == '1'">$(ResgenDefines) /define:FEATURE_ISOSTORE</ResgenDefines>
<ResgenDefines Condition="'$(FeatureMacl)' == '1'">$(ResgenDefines) /define:FEATURE_MACL</ResgenDefines>
- <ResgenDefines Condition="'$(FeatureCasPolicy)' == '1'">$(ResgenDefines) /define:FEATURE_CAS_POLICY</ResgenDefines>
<ResgenDefines Condition="'$(FeatureRemoting)' == '1'">$(ResgenDefines) /define:FEATURE_REMOTING</ResgenDefines>
- <ResgenDefines Condition="'$(FeatureSerialization)' == '1'">$(ResgenDefines) /define:FEATURE_SERIALIZATION</ResgenDefines>
<ResgenDefines Condition="'$(FeatureIdentityReference)' == '1'">$(ResgenDefines) /define:FEATURE_IDENTITY_REFERENCE</ResgenDefines>
<ResgenDefines Condition="'$(FeatureDisplayCultureInfo)' == '1'">$(ResgenDefines) /define:FEATURE_DISPLAY_CULTURE_INFO</ResgenDefines>
<ResgenDefines Condition="'$(FeatureDisplayRegionInfo)' == '1'">$(ResgenDefines) /define:FEATURE_DISPLAY_REGION_INFO</ResgenDefines>
diff --git a/clrdefinitions.cmake b/clrdefinitions.cmake
index 91346eceef..7f5686afed 100644
--- a/clrdefinitions.cmake
+++ b/clrdefinitions.cmake
@@ -53,10 +53,12 @@ if (CLR_CMAKE_PLATFORM_UNIX)
add_definitions(-D_XOPEN_SOURCE)
endif(CLR_CMAKE_PLATFORM_DARWIN)
- if (CLR_CMAKE_PLATFORM_UNIX_AMD64)
+ if (CLR_CMAKE_TARGET_ARCH_AMD64)
add_definitions(-DUNIX_AMD64_ABI)
- elseif (CLR_CMAKE_PLATFORM_UNIX_ARM)
+ elseif (CLR_CMAKE_TARGET_ARCH_ARM)
add_definitions(-DUNIX_ARM_ABI)
+ elseif (CLR_CMAKE_TARGET_ARCH_I386)
+ add_definitions(-DUNIX_X86_ABI)
endif()
endif(CLR_CMAKE_PLATFORM_UNIX)
@@ -96,7 +98,6 @@ if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM OR CLR_CMAKE_TARGET_
endif()
add_definitions(-DFEATURE_ASYNC_IO)
-add_definitions(-DFEATURE_BCL_FORMATTING)
add_definitions(-DFEATURE_COLLECTIBLE_TYPES)
if(WIN32)
@@ -167,10 +168,6 @@ add_definitions(-DFEATURE_RANDOMIZED_STRING_HASHING)
add_definitions(-DFEATURE_READYTORUN)
set(FEATURE_READYTORUN 1)
-if (FEATURE_STANDALONE_GC)
- add_definitions(-DFEATURE_STANDALONE_GC)
-endif(FEATURE_STANDALONE_GC)
-
if (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386)
add_definitions(-DFEATURE_REJIT)
endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386)
diff --git a/config.json b/config.json
index 1849272be1..be0b4bd121 100644
--- a/config.json
+++ b/config.json
@@ -294,6 +294,12 @@
"values": [ true, false ],
"defaultValue": true
},
+ "BuildWrappers": {
+ "description": "Builds test Xunit wrappers",
+ "valueType": "property",
+ "values": [ true, false ],
+ "defaultValue": true
+ },
"RuntimeId": {
"description": "Specifies the OS to build Core_Root for",
"valueType": "property",
@@ -435,6 +441,13 @@
"Project": "./src/syncAzure.proj"
}
},
+ "n": {
+ "description": "Downloads test native binaries. The values for '-AzureAccount', '-AzureToken', and '-Container' are required",
+ "settings": {
+ "Project": "./src/syncAzure.proj",
+ "PublishTestNativeBins": "true"
+ }
+ },
"azureToken": {
"description": "Account token to connect to Azure Blob storage.",
"settings": {
@@ -453,6 +466,12 @@
"__Container": "default"
}
},
+ "runtimeId": {
+ "description": "Runtime ID of the binaries in the specified container.",
+ "settings": {
+ "RuntimeId": "default"
+ }
+ },
"verbose": {
"description": "Passes /flp:v=diag to the msbuild command or the value passed by the user.",
"settings": {
@@ -470,12 +489,6 @@
"settings": {
"BuildNumberMinor": "default"
}
- },
- "PublishTestNativeBins": {
- "description": "Downloads Published test native binaries.",
- "settings": {
- "PublishTestNativeBins": "default"
- }
}
},
"defaultValues": {
@@ -602,4 +615,4 @@
"valueTypes": {}
}
}
-}
+} \ No newline at end of file
diff --git a/cross/arm-softfp/sources.list.jessie b/cross/arm-softfp/sources.list.jessie
deleted file mode 100644
index 4d142ac9b1..0000000000
--- a/cross/arm-softfp/sources.list.jessie
+++ /dev/null
@@ -1,3 +0,0 @@
-# Debian (sid) # UNSTABLE
-deb http://ftp.debian.org/debian/ sid main contrib non-free
-deb-src http://ftp.debian.org/debian/ sid main contrib non-free
diff --git a/cross/armel/sources.list.jessie b/cross/armel/sources.list.jessie
new file mode 100644
index 0000000000..3d9c3059d8
--- /dev/null
+++ b/cross/armel/sources.list.jessie
@@ -0,0 +1,3 @@
+# Debian (jessie) # Stable
+deb http://ftp.debian.org/debian/ jessie main contrib non-free
+deb-src http://ftp.debian.org/debian/ jessie main contrib non-free
diff --git a/cross/armel/tizen-build-rootfs.sh b/cross/armel/tizen-build-rootfs.sh
new file mode 100755
index 0000000000..87c48e78fb
--- /dev/null
+++ b/cross/armel/tizen-build-rootfs.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+set -e
+
+__ARM_SOFTFP_CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+__TIZEN_CROSSDIR="$__ARM_SOFTFP_CrossDir/tizen"
+
+if [[ -z "$ROOTFS_DIR" ]]; then
+ echo "ROOTFS_DIR is not defined."
+ exit 1;
+fi
+
+# Clean-up (TODO-Cleanup: We may already delete $ROOTFS_DIR at ./cross/build-rootfs.sh.)
+# hk0110
+if [ -d "$ROOTFS_DIR" ]; then
+ umount $ROOTFS_DIR/*
+ rm -rf $ROOTFS_DIR
+fi
+
+TIZEN_TMP_DIR=$ROOTFS_DIR/tizen_tmp
+mkdir -p $TIZEN_TMP_DIR
+
+# Download files
+echo ">>Start downloading files"
+VERBOSE=1 $__ARM_SOFTFP_CrossDir/tizen-fetch.sh $TIZEN_TMP_DIR
+echo "<<Finish downloading files"
+
+echo ">>Start constructing Tizen rootfs"
+TIZEN_RPM_FILES=`ls $TIZEN_TMP_DIR/*.rpm`
+cd $ROOTFS_DIR
+for f in $TIZEN_RPM_FILES; do
+ rpm2cpio $f | cpio -idm --quiet
+done
+echo "<<Finish constructing Tizen rootfs"
+
+# Cleanup tmp
+rm -rf $TIZEN_TMP_DIR
+
+# Configure Tizen rootfs
+echo ">>Start configuring Tizen rootfs"
+rm ./usr/lib/libunwind.so
+ln -s libunwind.so.8 ./usr/lib/libunwind.so
+ln -sfn asm-arm ./usr/include/asm
+patch -p1 < $__TIZEN_CROSSDIR/tizen.patch
+echo "<<Finish configuring Tizen rootfs"
diff --git a/cross/armel/tizen-fetch.sh b/cross/armel/tizen-fetch.sh
new file mode 100755
index 0000000000..1252199481
--- /dev/null
+++ b/cross/armel/tizen-fetch.sh
@@ -0,0 +1,174 @@
+#!/usr/bin/env bash
+set -e
+
+if [[ -z "${VERBOSE// }" ]] || [ "$VERBOSE" -ne "$VERBOSE" ] 2>/dev/null; then
+ VERBOSE=0
+fi
+
+Log()
+{
+ if [ $VERBOSE -ge $1 ]; then
+ echo ${@:2}
+ fi
+}
+
+Inform()
+{
+ Log 1 -e "\x1B[0;34m$@\x1B[m"
+}
+
+Debug()
+{
+ Log 2 -e "\x1B[0;32m$@\x1B[m"
+}
+
+Error()
+{
+ >&2 Log 0 -e "\x1B[0;31m$@\x1B[m"
+}
+
+Fetch()
+{
+ URL=$1
+ FILE=$2
+ PROGRESS=$3
+ if [ $VERBOSE -ge 1 ] && [ $PROGRESS ]; then
+ CURL_OPT="--progress-bar"
+ else
+ CURL_OPT="--silent"
+ fi
+ curl $CURL_OPT $URL > $FILE
+}
+
+hash curl 2> /dev/null || { Error "Require 'curl' Aborting."; exit 1; }
+hash xmllint 2> /dev/null || { Error "Require 'xmllint' Aborting."; exit 1; }
+hash sha256sum 2> /dev/null || { Error "Require 'sha256sum' Aborting."; exit 1; }
+
+TMPDIR=$1
+if [ ! -d $TMPDIR ]; then
+ TMPDIR=./tizen_tmp
+ Debug "Create temporary directory : $TMPDIR"
+ mkdir -p $TMPDIR
+fi
+
+TIZEN_URL=http://download.tizen.org/releases/weekly/tizen
+BUILD_XML=build.xml
+REPOMD_XML=repomd.xml
+PRIMARY_XML=primary.xml
+TARGET_URL="http://__not_initialized"
+
+Xpath_get()
+{
+ XPATH_RESULT=''
+ XPATH=$1
+ XML_FILE=$2
+ RESULT=$(xmllint --xpath $XPATH $XML_FILE)
+ if [[ -z ${RESULT// } ]]; then
+ Error "Can not find target from $XML_FILE"
+ Debug "Xpath = $XPATH"
+ exit 1
+ fi
+ XPATH_RESULT=$RESULT
+}
+
+fetch_tizen_pkgs_init()
+{
+ TARGET=$1
+ PROFILE=$2
+ Debug "Initialize TARGET=$TARGET, PROFILE=$PROFILE"
+
+ TMP_PKG_DIR=$TMPDIR/tizen_${PROFILE}_pkgs
+ if [ -d $TMP_PKG_DIR ]; then rm -rf $TMP_PKG_DIR; fi
+ mkdir -p $TMP_PKG_DIR
+
+ PKG_URL=$TIZEN_URL/$PROFILE/latest
+
+ BUILD_XML_URL=$PKG_URL/$BUILD_XML
+ TMP_BUILD=$TMP_PKG_DIR/$BUILD_XML
+ TMP_REPOMD=$TMP_PKG_DIR/$REPOMD_XML
+ TMP_PRIMARY=$TMP_PKG_DIR/$PRIMARY_XML
+ TMP_PRIMARYGZ=${TMP_PRIMARY}.gz
+
+ Fetch $BUILD_XML_URL $TMP_BUILD
+
+ Debug "fetch $BUILD_XML_URL to $TMP_BUILD"
+
+ TARGET_XPATH="//build/buildtargets/buildtarget[@name=\"$TARGET\"]/repo[@type=\"binary\"]/text()"
+ Xpath_get $TARGET_XPATH $TMP_BUILD
+ TARGET_PATH=$XPATH_RESULT
+ TARGET_URL=$PKG_URL/$TARGET_PATH
+
+ REPOMD_URL=$TARGET_URL/repodata/repomd.xml
+ PRIMARY_XPATH='string(//*[local-name()="data"][@type="primary"]/*[local-name()="location"]/@href)'
+
+ Fetch $REPOMD_URL $TMP_REPOMD
+
+ Debug "fetch $REPOMD_URL to $TMP_REPOMD"
+
+ Xpath_get $PRIMARY_XPATH $TMP_REPOMD
+ PRIMARY_XML_PATH=$XPATH_RESULT
+ PRIMARY_URL=$TARGET_URL/$PRIMARY_XML_PATH
+
+ Fetch $PRIMARY_URL $TMP_PRIMARYGZ
+
+ Debug "fetch $PRIMARY_URL to $TMP_PRIMARYGZ"
+
+ gunzip $TMP_PRIMARYGZ
+
+ Debug "unzip $TMP_PRIMARYGZ to $TMP_PRIMARY"
+}
+
+fetch_tizen_pkgs()
+{
+ PROFILE=$1
+ PACKAGE_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]]/*[local-name()="location"]/@href)'
+
+ PACKAGE_CHECKSUM_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]]/*[local-name()="checksum"]/text())'
+
+ for pkg in ${@:2}
+ do
+ Inform "Fetching... $pkg"
+ XPATH=${PACKAGE_XPATH_TPL/_PKG_/$pkg}
+ Xpath_get $XPATH $TMP_PRIMARY
+ PKG_PATH=$XPATH_RESULT
+
+ XPATH=${PACKAGE_CHECKSUM_XPATH_TPL/_PKG_/$pkg}
+ Xpath_get $XPATH $TMP_PRIMARY
+ CHECKSUM=$XPATH_RESULT
+
+ PKG_URL=$TARGET_URL/$PKG_PATH
+ PKG_FILE=$(basename $PKG_PATH)
+ PKG_PATH=$TMPDIR/$PKG_FILE
+
+ Debug "Download $PKG_URL to $PKG_PATH"
+ Fetch $PKG_URL $PKG_PATH true
+
+ echo "$CHECKSUM $PKG_PATH" | sha256sum -c - > /dev/null
+ if [ $? -ne 0 ]; then
+ Error "Fail to fetch $PKG_URL to $PKG_PATH"
+ Debug "Checksum = $CHECKSUM"
+ exit 1
+ fi
+
+ done
+}
+
+Inform "Initialize arm base"
+fetch_tizen_pkgs_init arm base
+Inform "fetch base common packages"
+fetch_tizen_pkgs base gcc glibc glibc-devel linux-glibc-devel
+Inform "fetch base coreclr packages"
+fetch_tizen_pkgs base lldb lldb-devel libuuid libuuid-devel libgcc libstdc++ libstdc++-devel
+Inform "fetch base corefx packages"
+fetch_tizen_pkgs base libcom_err libcom_err-devel zlib zlib-devel libopenssl libopenssl-devel
+
+Inform "initialize arm mobile"
+fetch_tizen_pkgs_init arm-wayland mobile
+Inform "fetch mobile common packages"
+fetch_tizen_pkgs mobile libicu-devel
+Inform "fetch mobile coreclr packages"
+fetch_tizen_pkgs mobile libunwind libunwind-devel tizen-release
+Inform "fetch mobile corefx packages"
+fetch_tizen_pkgs mobile gssdp gssdp-devel krb5 krb5-devel libcurl libcurl-devel
+
+
diff --git a/cross/armel/tizen/tizen.patch b/cross/armel/tizen/tizen.patch
new file mode 100644
index 0000000000..c92dc02809
--- /dev/null
+++ b/cross/armel/tizen/tizen.patch
@@ -0,0 +1,33 @@
+diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so
+--- a/usr/lib/libc.so 2016-12-30 23:00:08.284951863 +0900
++++ b/usr/lib/libc.so 2016-12-30 23:00:32.140951815 +0900
+@@ -2,4 +2,4 @@
+ Use the shared library, but some functions are only in
+ the static library, so try that secondarily. */
+ OUTPUT_FORMAT(elf32-littlearm)
+-GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.3 ) )
++GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) )
+diff -u -r a/usr/lib/libpthread.so b/usr/lib/libpthread.so
+--- a/usr/lib/libpthread.so 2016-12-30 23:00:19.408951841 +0900
++++ b/usr/lib/libpthread.so 2016-12-30 23:00:39.068951801 +0900
+@@ -2,4 +2,4 @@
+ Use the shared library, but some functions are only in
+ the static library, so try that secondarily. */
+ OUTPUT_FORMAT(elf32-littlearm)
+-GROUP ( /lib/libpthread.so.0 /usr/lib/libpthread_nonshared.a )
++GROUP ( libpthread.so.0 libpthread_nonshared.a )
+diff -u -r a/usr/lib/libpthread.so b/usr/lib/libpthread.so
+--- a/etc/os-release 2016-10-17 23:39:36.000000000 +0900
++++ b/etc/os-release 2017-01-05 14:34:39.099867682 +0900
+@@ -1,7 +1,7 @@
+ NAME=Tizen
+-VERSION="3.0.0 (Tizen3/Mobile)"
++VERSION="4.0.0 (Tizen4/Mobile)"
+ ID=tizen
+-VERSION_ID=3.0.0
+-PRETTY_NAME="Tizen 3.0.0 (Tizen3/Mobile)"
++VERSION_ID=4.0.0
++PRETTY_NAME="Tizen 4.0.0 (Tizen4/Mobile)"
+ ANSI_COLOR="0;36"
+-CPE_NAME="cpe:/o:tizen:tizen:3.0.0"
++CPE_NAME="cpe:/o:tizen:tizen:4.0.0"
diff --git a/cross/arm-softfp/toolchain.cmake b/cross/armel/toolchain.cmake
index 407ab53849..95bff0878b 100644
--- a/cross/arm-softfp/toolchain.cmake
+++ b/cross/armel/toolchain.cmake
@@ -20,10 +20,23 @@ add_compile_options(-mfpu=vfpv3)
add_compile_options(--sysroot=${CROSS_ROOTFS})
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -target ${TOOLCHAIN}")
-set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -B${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}")
-set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -L${CROSS_ROOTFS}/lib/${TOOLCHAIN}")
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} --sysroot=${CROSS_ROOTFS}")
+if("$ENV{__DistroRid}" MATCHES "tizen.*")
+ add_compile_options(-I$ENV{ROOTFS_DIR}/usr/lib/gcc/armv7l-tizen-linux-gnueabi/4.9.2/include/c++/)
+ add_compile_options(-I$ENV{ROOTFS_DIR}/usr/lib/gcc/armv7l-tizen-linux-gnueabi/4.9.2/include/c++/armv7l-tizen-linux-gnueabi)
+ add_compile_options(-Wno-deprecated-declarations) # compile-time option
+ add_compile_options(-D__extern_always_inline=inline)
+ set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi/4.9.2")
+ set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+else()
+ # TODO: this setting assumes debian armel rootfs
+ include_directories(SYSTEM ${CROSS_ROOTFS}/usr/include/c++/4.9 ${CROSS_ROOTFS}/usr/include/${TOOLCHAIN}/c++/4.9 )
+ set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -B${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}/4.9")
+ set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -L${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}/4.9")
+endif()
+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE)
diff --git a/cross/arm-softfp/tryrun.cmake b/cross/armel/tryrun.cmake
index 26a30e5e40..26a30e5e40 100644
--- a/cross/arm-softfp/tryrun.cmake
+++ b/cross/armel/tryrun.cmake
diff --git a/cross/build-android-rootfs.sh b/cross/build-android-rootfs.sh
new file mode 100755
index 0000000000..7627294a26
--- /dev/null
+++ b/cross/build-android-rootfs.sh
@@ -0,0 +1,145 @@
+#!/usr/bin/env bash
+
+usage()
+{
+ echo "Creates a toolchain and sysroot used for cross-compiling for Android."
+ echo.
+ echo "Usage: $0 [BuildArch] [ApiLevel]"
+ echo.
+ echo "BuildArch is the target architecture of Android. Currently only arm64 is supported."
+ echo "ApiLevel is the target Android API level. API levels usually match to Android releases. See https://source.android.com/source/build-numbers.html"
+ echo.
+ echo "By default, the toolchain and sysroot will be generated in cross/android-rootfs/toolchain/[BuildArch]. You can change this behavior"
+ echo "by setting the TOOLCHAIN_DIR environment variable"
+ echo.
+ echo "By default, the NDK will be downloaded into the cross/android-rootfs/android-ndk-r13b directory. If you already have an NDK installation,"
+ echo "you can set the NDK_DIR environment variable to have this script use that installation of the NDK."
+ exit 1
+}
+
+__ApiLevel=21 # The minimum platform for arm64 is API level 21
+__BuildArch=arm64
+__AndroidArch=aarch64
+
+for i in "$@"
+ do
+ lowerI="$(echo $i | awk '{print tolower($0)}')"
+ case $lowerI in
+ -?|-h|--help)
+ usage
+ exit 1
+ ;;
+ arm64)
+ __BuildArch=arm64
+ __AndroidArch=aarch64
+ ;;
+ *[0-9])
+ __ApiLevel=$i
+ ;;
+ *)
+ __UnprocessedBuildArgs="$__UnprocessedBuildArgs $i"
+ ;;
+ esac
+done
+
+# Obtain the location of the bash script to figure out where the root of the repo is.
+__CrossDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+__Android_Cross_Dir="$__CrossDir/android-rootfs"
+__NDK_Dir="$__Android_Cross_Dir/android-ndk-r13b"
+__libunwind_Dir="$__Android_Cross_Dir/libunwind"
+__lldb_Dir="$__Android_Cross_Dir/lldb"
+__ToolchainDir="$__Android_Cross_Dir/toolchain/$__BuildArch"
+
+if [[ -n "$TOOLCHAIN_DIR" ]]; then
+ __ToolchainDir=$TOOLCHAIN_DIR
+fi
+
+if [[ -n "$NDK_DIR" ]]; then
+ __NDK_Dir=$NDK_DIR
+fi
+
+echo "Target API level: $__ApiLevel"
+echo "Target architecture: $__BuildArch"
+echo "NDK location: $__NDK_Dir"
+echo "Target Toolchain location: $__ToolchainDir"
+
+# Download the NDK if required
+if [ ! -d $__NDK_Dir ]; then
+ echo Downloading the NDK into $__NDK_Dir
+ mkdir -p $__NDK_Dir
+ wget -nv -nc --show-progress https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip -O $__Android_Cross_Dir/android-ndk-r13b-linux-x86_64.zip
+ unzip -q $__Android_Cross_Dir/android-ndk-r13b-linux-x86_64.zip -d $__Android_Cross_Dir
+fi
+
+if [ ! -d $__lldb_Dir ]; then
+ mkdir -p $__lldb_Dir
+ echo Downloading LLDB into $__lldb_Dir
+ wget -nv -nc --show-progress https://dl.google.com/android/repository/lldb-2.3.3614996-linux-x86_64.zip -O $__Android_Cross_Dir/lldb-2.3.3614996-linux-x86_64.zip
+ unzip -q $__Android_Cross_Dir/lldb-2.3.3614996-linux-x86_64.zip -d $__lldb_Dir
+fi
+
+# Create the RootFS for both arm64 as well as aarch
+rm -rf $__Android_Cross_Dir/toolchain
+
+echo Generating the $__BuildArch toolchain
+$__NDK_Dir/build/tools/make_standalone_toolchain.py --arch $__BuildArch --api $__ApiLevel --install-dir $__ToolchainDir
+
+# Install the required packages into the toolchain
+rm -rf $__Android_Cross_Dir/deb/
+rm -rf $__Android_Cross_Dir/tmp
+
+mkdir -p $__Android_Cross_Dir/deb/
+mkdir -p $__Android_Cross_Dir/tmp/$arch/
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libicu_58.2_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libicu_58.2_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libicu-dev_58.2_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libicu-dev_58.2_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libuuid-dev_1.0.3_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libuuid-dev_1.0.3_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libuuid_1.0.3_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libuuid_1.0.3_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libandroid-glob-dev_0.3_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libandroid-glob-dev_0.3_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libandroid-glob_0.3_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libandroid-glob_0.3_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libandroid-support-dev_13.10_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libandroid-support-dev_13.10_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libandroid-support_13.10_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libandroid-support_13.10_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/liblzma-dev_5.2.3_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/liblzma-dev_5.2.3_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/liblzma_5.2.3_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/liblzma_5.2.3_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libcurl-dev_7.52.1_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libcurl-dev_7.52.1_$__AndroidArch.deb
+wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libcurl_7.52.1_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libcurl_7.52.1_$__AndroidArch.deb
+
+echo Unpacking Termux packages
+dpkg -x $__Android_Cross_Dir/deb/libicu_58.2_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/libicu-dev_58.2_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/libuuid-dev_1.0.3_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/libuuid_1.0.3_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/libandroid-glob-dev_0.3_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/libandroid-glob_0.3_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/libandroid-support-dev_13.10_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/libandroid-support_13.10_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/liblzma-dev_5.2.3_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/liblzma_5.2.3_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/libcurl-dev_7.52.1_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+dpkg -x $__Android_Cross_Dir/deb/libcurl_7.52.1_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
+
+cp -R $__Android_Cross_Dir/tmp/$__AndroidArch/data/data/com.termux/files/usr/* $__ToolchainDir/sysroot/usr/
+
+# Prepare libunwind
+if [ ! -d $__libunwind_Dir ]; then
+ git clone https://android.googlesource.com/platform/external/libunwind/ $__libunwind_Dir
+fi
+
+cd $__libunwind_Dir
+git checkout android-6.0.0_r26
+git checkout -- .
+git clean -xfd
+
+# libunwind is available on Android, but not included in the NDK.
+echo Building libunwind
+autoreconf --force -v --install 2> /dev/null
+./configure CC=$__ToolchainDir/bin/$__AndroidArch-linux-android-clang --with-sysroot=$__ToolchainDir/sysroot --host=x86_64 --target=$__AndroidArch-eabi --disable-coredump --prefix=$__ToolchainDir/sysroot/usr 2> /dev/null
+make > /dev/null
+make install > /dev/null
+
+# This header file is missing
+cp include/libunwind.h $__ToolchainDir/sysroot/usr/include/
+
+echo Now run:
+echo CONFIG_DIR=\`realpath cross/android/arm64\` ROOTFS_DIR=\`realpath $__ToolchainDir/sysroot\` ./build.sh cross arm64 skipgenerateversion skipmscorlib cmakeargs -DENABLE_LLDBPLUGIN=0
+
diff --git a/cross/build-rootfs.sh b/cross/build-rootfs.sh
index cfa1a66f4a..72ccc569a0 100755
--- a/cross/build-rootfs.sh
+++ b/cross/build-rootfs.sh
@@ -2,15 +2,16 @@
usage()
{
- echo "Usage: $0 [BuildArch] [UbuntuCodeName] [lldbx.y]"
- echo "BuildArch can be: arm(default), arm-softfp, arm64, x86"
- echo "UbuntuCodeName - optional, Code name for Ubuntu, can be: trusty(default), vivid, wily, xenial. If BuildArch is arm-softfp, UbuntuCodeName is ignored."
+ echo "Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount]"
+ echo "BuildArch can be: arm(default), armel, arm64, x86"
+ echo "LinuxCodeName - optional, Code name for Linux, can be: trusty(default), vivid, wily, xenial. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen."
echo "lldbx.y - optional, LLDB version, can be: lldb3.6(default), lldb3.8"
+ echo "--skipunmount - optional, will skip the unmount of rootfs folder."
exit 1
}
-__UbuntuCodeName=trusty
+__LinuxCodeName=trusty
__CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
__InitialDir=$PWD
@@ -20,6 +21,7 @@ __UbuntuRepo="http://ports.ubuntu.com/"
__UbuntuPackagesBase="build-essential libunwind8-dev gettext symlinks liblttng-ust-dev libicu-dev"
__LLDB_Package="lldb-3.6-dev"
__UnprocessedBuildArgs=
+__SkipUnmount=0
for i in "$@"
do
@@ -37,11 +39,11 @@ for i in "$@"
__BuildArch=arm64
__UbuntuArch=arm64
;;
- arm-softfp)
- __BuildArch=arm-softfp
+ armel)
+ __BuildArch=armel
__UbuntuArch=armel
__UbuntuRepo="http://ftp.debian.org/debian/"
- __UbuntuCodeName=jessie
+ __LinuxCodeName=jessie
;;
x86)
__BuildArch=x86
@@ -55,30 +57,47 @@ for i in "$@"
__LLDB_Package="lldb-3.8-dev"
;;
vivid)
- if [ "$__UbuntuCodeName" != "jessie" ]; then
- __UbuntuCodeName=vivid
+ if [ "$__LinuxCodeName" != "jessie" ]; then
+ __LinuxCodeName=vivid
fi
;;
wily)
- if [ "$__UbuntuCodeName" != "jessie" ]; then
- __UbuntuCodeName=wily
+ if [ "$__LinuxCodeName" != "jessie" ]; then
+ __LinuxCodeName=wily
fi
;;
xenial)
- if [ "$__UbuntuCodeName" != "jessie" ]; then
- __UbuntuCodeName=xenial
+ if [ "$__LinuxCodeName" != "jessie" ]; then
+ __LinuxCodeName=xenial
fi
;;
jessie)
- __UbuntuCodeName=jessie
+ __LinuxCodeName=jessie
__UbuntuRepo="http://ftp.debian.org/debian/"
;;
+ tizen)
+ if [ "$__BuildArch" != "armel" ]; then
+ echo "Tizen is available only for armel."
+ usage;
+ exit 1;
+ fi
+ __LinuxCodeName=
+ __UbuntuRepo=
+ __Tizen=tizen
+ ;;
+ --skipunmount)
+ __SkipUnmount=1
+ ;;
*)
__UnprocessedBuildArgs="$__UnprocessedBuildArgs $i"
;;
esac
done
+if [ "$__BuildArch" == "armel" ]; then
+ __LLDB_Package="lldb-3.5-dev"
+fi
+
__RootfsDir="$__CrossDir/rootfs/$__BuildArch"
__UbuntuPackages="$__UbuntuPackagesBase $__LLDB_Package"
@@ -87,14 +106,27 @@ if [[ -n "$ROOTFS_DIR" ]]; then
fi
if [ -d "$__RootfsDir" ]; then
- umount $__RootfsDir/*
+ if [ $__SkipUnmount == 0 ]; then
+ umount $__RootfsDir/*
+ fi
rm -rf $__RootfsDir
fi
-qemu-debootstrap --arch $__UbuntuArch $__UbuntuCodeName $__RootfsDir $__UbuntuRepo
-cp $__CrossDir/$__BuildArch/sources.list.$__UbuntuCodeName $__RootfsDir/etc/apt/sources.list
-chroot $__RootfsDir apt-get update
-chroot $__RootfsDir apt-get -f -y install
-chroot $__RootfsDir apt-get -y install $__UbuntuPackages
-chroot $__RootfsDir symlinks -cr /usr
-umount $__RootfsDir/*
+if [[ -n $__LinuxCodeName ]]; then
+ qemu-debootstrap --arch $__UbuntuArch $__LinuxCodeName $__RootfsDir $__UbuntuRepo
+ cp $__CrossDir/$__BuildArch/sources.list.$__LinuxCodeName $__RootfsDir/etc/apt/sources.list
+ chroot $__RootfsDir apt-get update
+ chroot $__RootfsDir apt-get -f -y install
+ chroot $__RootfsDir apt-get -y install $__UbuntuPackages
+ chroot $__RootfsDir symlinks -cr /usr
+
+ if [ $__SkipUnmount == 0 ]; then
+ umount $__RootfsDir/*
+ fi
+elif [ "$__Tizen" == "tizen" ]; then
+ ROOTFS_DIR=$__RootfsDir $__CrossDir/$__BuildArch/tizen-build-rootfs.sh
+else
+ echo "Unsupported target platform."
+ usage;
+ exit 1
+fi
diff --git a/crosscomponents.cmake b/crosscomponents.cmake
index 7575570b36..96c477ee34 100644
--- a/crosscomponents.cmake
+++ b/crosscomponents.cmake
@@ -1,10 +1,15 @@
add_definitions(-DCROSS_COMPILE)
-set (CLR_CROSS_COMPONENTS_LIST
- crossgen
- mscordaccore
- mscordbi
- sos
- clrjit
- protojit
-)
+set (CLR_CROSS_COMPONENTS_LIST
+ crossgen
+ clrjit
+ protojit
+)
+
+if(NOT CLR_CMAKE_PLATFORM_LINUX)
+ list (APPEND CLR_CROSS_COMPONENTS_LIST
+ mscordaccore
+ mscordbi
+ sos
+ )
+endif()
diff --git a/dependencies.props b/dependencies.props
index 3094a3d493..36e16b012b 100644
--- a/dependencies.props
+++ b/dependencies.props
@@ -1,18 +1,18 @@
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Source of truth for dependency tooling: the commit hash of the dotnet/versions master branch as of the last auto-upgrade. -->
<PropertyGroup>
- <CoreFxCurrentRef>014ac653f680703f5b9a7bf3ebc99b1a5b912c7b</CoreFxCurrentRef>
- <CoreClrCurrentRef>014ac653f680703f5b9a7bf3ebc99b1a5b912c7b</CoreClrCurrentRef>
+ <CoreFxCurrentRef>9bdceed2f3a12a62e66c5202a13f3220ccc10f89</CoreFxCurrentRef>
+ <CoreClrCurrentRef>9bdceed2f3a12a62e66c5202a13f3220ccc10f89</CoreClrCurrentRef>
</PropertyGroup>
<!-- Auto-upgraded properties for each build info dependency. -->
<PropertyGroup>
- <CoreFxExpectedPrerelease>beta-24820-02</CoreFxExpectedPrerelease>
+ <CoreFxExpectedPrerelease>beta-25007-01</CoreFxExpectedPrerelease>
</PropertyGroup>
<!-- Full package version strings that are used in other parts of the build. -->
<PropertyGroup>
- <CoreClrPackageVersion>1.2.0-beta-24820-02</CoreClrPackageVersion>
+ <CoreClrPackageVersion>2.0.0-beta-25007-01</CoreClrPackageVersion>
<XunitPackageVersion>2.2.0-beta2-build3300</XunitPackageVersion>
</PropertyGroup>
diff --git a/dir.props b/dir.props
index b9bf0816e4..f2983e4979 100644
--- a/dir.props
+++ b/dir.props
@@ -83,9 +83,8 @@
<!-- Output paths -->
<PropertyGroup>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)' == ''">$(RootBinDir)obj\</BaseIntermediateOutputPath>
- <IntermediateOutputPath Condition="'$(IntermediateOutputPath)' == ''">$(BaseIntermediateOutputPath)\$(BuildOS).$(BuildArch).$(BuildType)</IntermediateOutputPath>
- <OutputPath Condition="'$(OutputPath)' == ''">$(BaseIntermediateOutputPath)\$(BuildOS).$(BuildArch).$(BuildType)</OutputPath>
- <FinalOutputPath Condition="'$(FinalOutputPath)' == ''">$(BinDir)</FinalOutputPath>
+ <IntermediateOutputPath Condition="'$(IntermediateOutputPath)' == ''">$(BaseIntermediateOutputPath)$(BuildOS).$(BuildArch).$(BuildType)\</IntermediateOutputPath>
+ <OutputPath Condition="'$(OutputPath)' == ''">$(BinDir)</OutputPath>
</PropertyGroup>
<Import Condition="Exists('$(ToolsDir)BuildVersion.targets')" Project="$(ToolsDir)BuildVersion.targets" />
@@ -153,7 +152,7 @@
<ProjectUrl>https://dot.net</ProjectUrl>
<!-- Central place to set the versions of all nuget packages produced in the repo -->
- <PackageVersion Condition="'$(PackageVersion)' == ''">1.2.0</PackageVersion>
+ <PackageVersion Condition="'$(PackageVersion)' == ''">2.0.0</PackageVersion>
<!-- Set the boolean below to true to generate packages with stabilized versions -->
<StabilizePackageVersion Condition="'$(StabilizePackageVersion)' == ''">false</StabilizePackageVersion>
@@ -170,6 +169,8 @@
<MinOSForArch>win7</MinOSForArch>
<MinOSForArch Condition="'$(PackagePlatform)' == 'arm'">win8</MinOSForArch>
<MinOSForArch Condition="'$(PackagePlatform)' == 'arm64'">win10</MinOSForArch>
+ <!-- This property must be set to disable local package installation -->
+ <SkipInstallLocallyBuiltPackages>true</SkipInstallLocallyBuiltPackages>
<!-- Define packaging attributes for cross target components -->
<HasCrossTargetComponents Condition="'$(TargetsWindows)' == 'true' and ('$(PackagePlatform)' =='arm64' or '$(PackagePlatform)' =='arm')">true</HasCrossTargetComponents>
diff --git a/dirs.proj b/dirs.proj
deleted file mode 100644
index 1e64e435a8..0000000000
--- a/dirs.proj
+++ /dev/null
@@ -1,25 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <ItemDefinitionGroup>
- <ProjectFile>
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- </ItemDefinitionGroup>
-
- <PropertyGroup>
- <BuildInPhase0>true</BuildInPhase0>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhase2>true</BuildInPhase2>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!-- Build in all phases -->
- <ItemGroup>
- <ProjectFile Include="src\dirs.proj" Condition="'$(BuildSysBuildOnlyForARM64)' == 'true'" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/functions.cmake b/functions.cmake
index e1a9abb469..7d69dcb707 100644
--- a/functions.cmake
+++ b/functions.cmake
@@ -2,7 +2,7 @@ function(clr_unknown_arch)
if (WIN32)
message(FATAL_ERROR "Only AMD64, ARM64, ARM and I386 are supported")
elseif(CLR_CROSS_COMPONENTS_BUILD)
- message(FATAL_ERROR "Only AMD64, I386 are supported for cross-architecture component")
+ message(FATAL_ERROR "Only AMD64, I386 host are supported for linux cross-architecture component")
else()
message(FATAL_ERROR "Only AMD64, ARM64 and ARM are supported")
endif()
@@ -222,7 +222,7 @@ endfunction()
function(verify_dependencies targetName errorMessage)
# We don't need to verify dependencies on OSX, since missing dependencies
# result in link error over there.
- if (NOT CLR_CMAKE_PLATFORM_DARWIN)
+ if (NOT CLR_CMAKE_PLATFORM_DARWIN AND NOT CLR_CMAKE_PLATFORM_ANDROID)
add_custom_command(
TARGET ${targetName}
POST_BUILD
diff --git a/init-tools.cmd b/init-tools.cmd
index cb1aad4f9e..9e41480a52 100644
--- a/init-tools.cmd
+++ b/init-tools.cmd
@@ -45,7 +45,7 @@ if exist "%DOTNET_CMD%" goto :afterdotnetrestore
echo Installing dotnet cli...
if NOT exist "%DOTNET_PATH%" mkdir "%DOTNET_PATH%"
if [%PROCESSOR_ARCHITECTURE%]==[x86] (set DOTNET_ZIP_NAME=dotnet-dev-win-x86.%DOTNET_VERSION%.zip) else (set DOTNET_ZIP_NAME=dotnet-dev-win-x64.%DOTNET_VERSION%.zip)
-set DOTNET_REMOTE_PATH=https://dotnetcli.blob.core.windows.net/dotnet/Sdk/%DOTNET_VERSION%/%DOTNET_ZIP_NAME%
+set DOTNET_REMOTE_PATH=https://dotnetcli.blob.core.windows.net/dotnet/preview/Binaries/%DOTNET_VERSION%/%DOTNET_ZIP_NAME%
set DOTNET_LOCAL_PATH=%DOTNET_PATH%%DOTNET_ZIP_NAME%
echo Installing '%DOTNET_REMOTE_PATH%' to '%DOTNET_LOCAL_PATH%' >> "%INIT_TOOLS_LOG%"
powershell -NoProfile -ExecutionPolicy unrestricted -Command "$retryCount = 0; $success = $false; do { try { (New-Object Net.WebClient).DownloadFile('%DOTNET_REMOTE_PATH%', '%DOTNET_LOCAL_PATH%'); $success = $true; } catch { if ($retryCount -ge 6) { throw; } else { $retryCount++; Start-Sleep -Seconds (5 * $retryCount); } } } while ($success -eq $false); Add-Type -Assembly 'System.IO.Compression.FileSystem' -ErrorVariable AddTypeErrors; if ($AddTypeErrors.Count -eq 0) { [System.IO.Compression.ZipFile]::ExtractToDirectory('%DOTNET_LOCAL_PATH%', '%DOTNET_PATH%') } else { (New-Object -com shell.application).namespace('%DOTNET_PATH%').CopyHere((new-object -com shell.application).namespace('%DOTNET_LOCAL_PATH%').Items(),16) }" >> "%INIT_TOOLS_LOG%"
diff --git a/init-tools.log b/init-tools.log
deleted file mode 100644
index 7a96daa413..0000000000
--- a/init-tools.log
+++ /dev/null
@@ -1,539 +0,0 @@
-Running: /home/jyoung/git/dotnet/coreclr-1.0.0/init-tools.sh
-Installing 'https://dotnetcli.blob.core.windows.net/dotnet/Sdk/1.0.0-preview3-003223/dotnet-dev-ubuntu-x64.1.0.0-preview3-003223.tar.gz' to '/home/jyoung/git/dotnet/coreclr-1.0.0/Tools/dotnetcli/dotnet.tar'
-Running: /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/dotnetcli/dotnet restore "/home/jyoung/git/dotnet/coreclr-1.0.0/Tools/1.0.27-prerelease-01008-01/project.json" --no-cache --packages /home/jyoung/git/dotnet/coreclr-1.0.0/packages --source https://dotnet.myget.org/F/dotnet-buildtools/api/v3/index.json
-log : Restoring packages for /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/1.0.27-prerelease-01008-01/project.json...
-log : Installing Microsoft.DotNet.BuildTools 1.0.27-prerelease-01008-01.
-log : Writing lock file to disk. Path: /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/1.0.27-prerelease-01008-01/project.lock.json
-log : /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/1.0.27-prerelease-01008-01/project.json
-log : Restore completed in 4349ms.
-Running: /home/jyoung/git/dotnet/coreclr-1.0.0/packages/Microsoft.DotNet.BuildTools/1.0.27-prerelease-01008-01/lib/init-tools.sh /home/jyoung/git/dotnet/coreclr-1.0.0 /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/dotnetcli/dotnet /home/jyoung/git/dotnet/coreclr-1.0.0/Tools
-Running: /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/dotnetcli/dotnet restore "/home/jyoung/git/dotnet/coreclr-1.0.0/packages/Microsoft.DotNet.BuildTools/1.0.27-prerelease-01008-01/lib/tool-runtime/project.json" --source https://dotnet.myget.org/F/dotnet-core/api/v3/index.json --source https://dotnet.myget.org/F/dotnet-buildtools/api/v3/index.json --source https://api.nuget.org/v3/index.json
-log : Restoring packages for /home/jyoung/git/dotnet/coreclr-1.0.0/packages/Microsoft.DotNet.BuildTools/1.0.27-prerelease-01008-01/lib/tool-runtime/project.json...
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Utilities.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Utilities.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Utilities.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Tasks.Core from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Tasks.Core
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Tasks.Core (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: MSBuild from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Targets (>= 0.1.0-preview-00024-160610) -> MSBuild
-warn : tool-runtime (>= 1.0.0) -> MSBuild (>= 0.1.0-preview-00024-160610)
-warn : Detected package downgrade: Microsoft.Build.Framework from 0.0.0 to 0.1.0-preview-00024-160610
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build (>= 0.1.0-preview-00024-160610) -> Microsoft.Build.Framework
-warn : tool-runtime (>= 1.0.0) -> Microsoft.Build.Framework (>= 0.1.0-preview-00024-160610)
-log : Writing lock file to disk. Path: /home/jyoung/git/dotnet/coreclr-1.0.0/packages/Microsoft.DotNet.BuildTools/1.0.27-prerelease-01008-01/lib/tool-runtime/project.lock.json
-log : /home/jyoung/git/dotnet/coreclr-1.0.0/packages/Microsoft.DotNet.BuildTools/1.0.27-prerelease-01008-01/lib/tool-runtime/project.json
-log : Restore completed in 3868ms.
-Running: /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/dotnetcli/dotnet publish "/home/jyoung/git/dotnet/coreclr-1.0.0/packages/Microsoft.DotNet.BuildTools/1.0.27-prerelease-01008-01/lib/tool-runtime/project.json" -f netcoreapp1.0 -r ubuntu.14.04-x64 -o /home/jyoung/git/dotnet/coreclr-1.0.0/Tools
-Publishing tool-runtime for .NETCoreApp,Version=v1.0/ubuntu.14.04-x64
-Project tool-runtime (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
-Compiling tool-runtime for .NETCoreApp,Version=v1.0
-
-Compilation succeeded.
- 0 Warning(s)
- 0 Error(s)
-
-Time elapsed 00:00:00.8157822
-
-
-publish: Published to /home/jyoung/git/dotnet/coreclr-1.0.0/Tools
-Published 1/1 projects successfully
-Running: "/home/jyoung/git/dotnet/coreclr-1.0.0/Tools/dotnetcli/dotnet" restore "/home/jyoung/git/dotnet/coreclr-1.0.0/Tools/generated/project.json" --source https://dotnet.myget.org/F/dotnet-buildtools/api/v3/index.json --source https://api.nuget.org/v3/index.json --packages "/home/jyoung/git/dotnet/coreclr-1.0.0/Tools/."
-log : Restoring packages for /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/generated/project.json...
-log : Installing Microsoft.Portable.Targets 0.1.1-dev.
-log : Installing MicroBuild.Core 0.2.0.
-log : Writing lock file to disk. Path: /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/generated/project.lock.json
-log : /home/jyoung/git/dotnet/coreclr-1.0.0/Tools/generated/project.json
-log : Restore completed in 1274ms.
diff --git a/init-tools.sh b/init-tools.sh
index cc8a5d8600..9a83bda189 100755
--- a/init-tools.sh
+++ b/init-tools.sh
@@ -107,14 +107,13 @@ if [ ! -e $__INIT_TOOLS_DONE_MARKER ]; then
cp -r $DOTNET_TOOL_DIR/* $__DOTNET_PATH
else
echo "Installing dotnet cli..."
- __DOTNET_LOCATION="https://dotnetcli.blob.core.windows.net/dotnet/Sdk/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.${__DOTNET_TOOLS_VERSION}.tar.gz"
+ __DOTNET_LOCATION="https://dotnetcli.blob.core.windows.net/dotnet/preview/Binaries/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.${__DOTNET_TOOLS_VERSION}.tar.gz"
# curl has HTTPS CA trust-issues less often than wget, so lets try that first.
echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'" >> $__init_tools_log
- which curl > /dev/null 2> /dev/null
- if [ $? -ne 0 ]; then
- wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
- else
+ if command -v curl > /dev/null; then
curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
+ else
+ wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
fi
cd $__DOTNET_PATH
tar -xf $__DOTNET_PATH/dotnet.tar
diff --git a/netci.groovy b/netci.groovy
index b1ffaf8084..176c436dd6 100755
--- a/netci.groovy
+++ b/netci.groovy
@@ -22,7 +22,6 @@ def static getOSGroup(def os) {
'Windows_NT':'Windows_NT',
'FreeBSD':'FreeBSD',
'CentOS7.1': 'Linux',
- 'OpenSUSE13.2': 'Linux',
'OpenSUSE42.1': 'Linux',
'LinuxARMEmulator': 'Linux']
def osGroup = osGroupMap.get(os, null)
@@ -45,7 +44,6 @@ class Constants {
'Windows_NT_BuildOnly',
'FreeBSD',
'CentOS7.1',
- 'OpenSUSE13.2',
'OpenSUSE42.1',
'RHEL7.2',
'LinuxARMEmulator',
@@ -53,7 +51,7 @@ class Constants {
'Ubuntu16.10',
'Fedora23']
- def static crossList = ['Ubuntu', 'OSX', 'CentOS7.1', 'RHEL7.2', 'Debian8.4', 'OpenSUSE13.2']
+ def static crossList = ['Ubuntu', 'OSX', 'CentOS7.1', 'RHEL7.2', 'Debian8.4']
// This is a set of JIT stress modes combined with the set of variables that
// need to be set to actually enable that stress mode. The key of the map is the stress mode and
@@ -234,8 +232,8 @@ def static getStressModeDisplayName(def scenario) {
}
// Generates the string for creating a file that sets environment variables
-// that makes it possible to run stress modes. Writes the script to a file called
-// SetStressModes.[sh/cmd]
+// that makes it possible to run stress modes. Writes the script to the file
+// specified by the stepScriptLocation parameter.
def static genStressModeScriptStep(def os, def stressModeName, def stressModeVars, def stepScriptLocation) {
def stepScript = ''
if (os == 'Windows_NT') {
@@ -248,6 +246,7 @@ def static genStressModeScriptStep(def os, def stressModeName, def stressModeVar
// Set the Timeout
stepScript += "set __TestTimeout=${timeout}\r\n"
+ stepScript += "echo. > ${stepScriptLocation}\r\n"
stressModeVars.each{ k, v ->
// Write out what we are writing to the script file
stepScript += "echo Setting ${k}=${v}\r\n"
@@ -269,28 +268,6 @@ def static genStressModeScriptStep(def os, def stressModeName, def stressModeVar
return stepScript
}
-// Corefx doesn't have a support to pass stress mode environment variables. This function
-// generates commands to set or export environment variables
-def static getStressModeEnvSetCmd(def os, def stressModeName) {
- def envVars = Constants.jitStressModeScenarios[stressModeName]
- def setEnvVars = ''
- if (os == 'Windows_NT') {
- envVars.each{ VarName, Value ->
- if (VarName != '') {
- setEnvVars += "set ${VarName}=${Value}\n"
- }
- }
- }
- else {
- envVars.each{ VarName, Value ->
- if (VarName != '') {
- setEnvVars += "export ${VarName}=${Value}\n"
- }
- }
- }
- return setEnvVars
-}
-
// Calculates the name of the build job based on some typical parameters.
//
def static getJobName(def configuration, def architecture, def os, def scenario, def isBuildOnly, def isLinuxEmulatorBuild = false) {
@@ -345,271 +322,276 @@ def static getJobName(def configuration, def architecture, def os, def scenario,
return baseName + suffix
}
-// **************************
-// Define the basic inner loop builds for PR and commit. This is basically just the set
-// of coreclr builds over linux/osx/freebsd/windows and debug/release/checked. In addition, the windows
-// builds will do a couple extra steps.
-// **************************
-
-// Adds a trigger for the PR build if one is needed. If isFlowJob is true, then this is the
-// flow job that rolls up the build and test for non-windows OS's. // If the job is a windows build only job,
-// it's just used for internal builds
-// If you add a job with a trigger phrase, please add that phrase to coreclr/Documentation/project-docs/ci-trigger-phrases.md
-def static addTriggers(def job, def branch, def isPR, def architecture, def os, def configuration, def scenario, def isFlowJob, def isWindowsBuildOnlyJob, def isLinuxEmulatorBuild) {
- if (isWindowsBuildOnlyJob) {
- return
- }
-
- def bidailyCrossList = ['RHEL7.2', 'Debian8.4', 'OpenSUSE13.2']
- // Non pull request builds.
- if (!isPR) {
- // Check scenario.
- switch (scenario) {
- case 'default':
- switch (architecture) {
- case 'x64':
- case 'x86':
- case 'x86compatjit':
- case 'x86lb':
- if (isFlowJob || os == 'Windows_NT' || !(os in Constants.crossList)) {
- Utilities.addGithubPushTrigger(job)
- }
- break
- case 'arm':
+def static addNonPRTriggers(def job, def branch, def isPR, def architecture, def os, def configuration, def scenario, def isFlowJob, def isWindowsBuildOnlyJob, def isLinuxEmulatorBuild, def bidailyCrossList) {
+ // Check scenario.
+ switch (scenario) {
+ case 'default':
+ switch (architecture) {
+ case 'x64':
+ case 'x86':
+ case 'x86compatjit':
+ case 'x86lb':
+ if (isFlowJob || os == 'Windows_NT' || !(os in Constants.crossList)) {
Utilities.addGithubPushTrigger(job)
- break
- case 'arm64':
- if (os == 'Windows_NT') {
- Utilities.addGithubPushTrigger(job)
- // TODO: Add once external email sending is available again
- // addEmailPublisher(job, 'dotnetonarm64@microsoft.com')
- }
- break
- default:
- println("Unknown architecture: ${architecture}");
- assert false
- break
- }
- break
- case 'pri1':
- // Pri one gets a push trigger, and only for release
- if (architecture == 'x64') {
- if (configuration == 'Release') {
- // We expect release jobs to be Windows, or in the cross list
- assert (os == 'Windows_NT') || (os in Constants.crossList)
- if (!os in bidailyCrossList) {
- if (isFlowJob || os == 'Windows_NT') {
- Utilities.addGithubPushTrigger(job)
- }
- }
- else {
- if (isFlowJob) {
- Utilities.addPeriodicTrigger(job, 'H H/12 * * *')
- }
- }
}
- }
- break
- case 'r2r':
- //r2r jobs that aren't pri1 can only be triggered by phrase
- break
- case 'pri1r2r':
- assert !(os in bidailyCrossList)
- //pri1 r2r gets a push trigger for checked/release
- if (configuration == 'Checked' || configuration == 'Release') {
+ break
+ case 'arm':
+ Utilities.addGithubPushTrigger(job)
+ break
+ case 'arm64':
+ if (os == 'Windows_NT') {
+ Utilities.addGithubPushTrigger(job)
+ // TODO: Add once external email sending is available again
+ // addEmailPublisher(job, 'dotnetonarm64@microsoft.com')
+ }
+ break
+ default:
+ println("Unknown architecture: ${architecture}");
+ assert false
+ break
+ }
+ break
+ case 'pri1':
+ // Pri one gets a push trigger, and only for release
+ if (architecture == 'x64') {
+ if (configuration == 'Release') {
+ // We expect release jobs to be Windows, or in the cross list
assert (os == 'Windows_NT') || (os in Constants.crossList)
- if (architecture == 'x64' && os != 'OSX') {
- //Flow jobs should be Windows, Ubuntu, OSX, or CentOS
+ if (!os in bidailyCrossList) {
if (isFlowJob || os == 'Windows_NT') {
Utilities.addGithubPushTrigger(job)
}
- // OSX pri1r2r jobs should only run every 12 hours, not daily.
- } else if (architecture == 'x64' && os == 'OSX'){
+ }
+ else {
if (isFlowJob) {
Utilities.addPeriodicTrigger(job, 'H H/12 * * *')
}
}
- // For x86, only add per-commit jobs for Windows
- else if (architecture == 'x86' || architecture == 'x86compatjit' || architecture == 'x86lb') {
- if (os == 'Windows_NT') {
- Utilities.addGithubPushTrigger(job)
- }
- }
- // arm64 pri1r2r jobs should only run every 12 hours.
- else if (architecture == 'arm64') {
- if (os == 'Windows_NT') {
- Utilities.addPeriodicTrigger(job, 'H H/12 * * *')
- // TODO: Add once external email sending is available again
- // addEmailPublisher(job, 'dotnetonarm64@microsoft.com')
- }
- }
}
- break
- case 'r2r_jitstress1':
- case 'r2r_jitstress2':
- case 'r2r_jitstressregs1':
- case 'r2r_jitstressregs2':
- case 'r2r_jitstressregs3':
- case 'r2r_jitstressregs4':
- case 'r2r_jitstressregs8':
- case 'r2r_jitstressregsx10':
- case 'r2r_jitstressregsx80':
- case 'r2r_jitminopts':
- case 'r2r_jitforcerelocs':
- case 'gcstress15_pri1r2r':
- assert !(os in bidailyCrossList)
-
- // GCStress=C is currently not supported on OS X
- if (os == 'OSX' && isGCStressRelatedTesting(scenario)) {
- break
- }
-
- //GC Stress 15 pri1 r2r gets a push trigger for checked/release
- if (configuration == 'Checked' || configuration == 'Release') {
- assert (os == 'Windows_NT') || (os in Constants.crossList)
- if (architecture == 'x64') {
- //Flow jobs should be Windows, Ubuntu, OSX, or CentOS
- if (isFlowJob || os == 'Windows_NT') {
- // Add a weekly periodic trigger
- Utilities.addPeriodicTrigger(job, 'H H * * 3,6') // some time every Wednesday and Saturday
- }
+ }
+ break
+ case 'r2r':
+ //r2r jobs that aren't pri1 can only be triggered by phrase
+ break
+ case 'pri1r2r':
+ assert !(os in bidailyCrossList)
+ //pri1 r2r gets a push trigger for checked/release
+ if (configuration == 'Checked' || configuration == 'Release') {
+ assert (os == 'Windows_NT') || (os in Constants.crossList)
+ if (architecture == 'x64' && os != 'OSX') {
+ //Flow jobs should be Windows, Ubuntu, OSX, or CentOS
+ if (isFlowJob || os == 'Windows_NT') {
+ Utilities.addGithubPushTrigger(job)
}
- // For x86, only add per-commit jobs for Windows
- else if (architecture == 'x86' || architecture == 'x86compatjit' || architecture == 'x86lb') {
- if (os == 'Windows_NT') {
- Utilities.addPeriodicTrigger(job, 'H H * * 3,6') // some time every Wednesday and Saturday
- }
+ // OSX pri1r2r jobs should only run every 12 hours, not daily.
+ } else if (architecture == 'x64' && os == 'OSX'){
+ if (isFlowJob) {
+ Utilities.addPeriodicTrigger(job, 'H H/12 * * *')
}
}
- break
- case 'longgc':
- assert (os == 'Ubuntu' || os == 'Windows_NT' || os == 'OSX')
- assert configuration == 'Release'
- assert architecture == 'x64'
- Utilities.addPeriodicTrigger(job, '@daily')
- // TODO: Add once external email sending is available again
- // addEmailPublisher(job, 'dotnetgctests@microsoft.com')
- break
- case 'gcsimulator':
- assert (os == 'Ubuntu' || os == 'Windows_NT' || os == 'OSX')
- assert configuration == 'Release'
- assert architecture == 'x64'
- Utilities.addPeriodicTrigger(job, 'H H * * 3,6') // some time every Wednesday and Saturday
- // TODO: Add once external email sending is available again
- // addEmailPublisher(job, 'dotnetgctests@microsoft.com')
- break
- case 'standalone_gc':
- assert (os == 'Windows_NT')
- assert (configuration == 'Release' || configuration == 'Checked')
- // TODO: Add once external email sending is available again
- // addEmailPublisher(job, 'dotnetgctests@microsoft.com')
- Utilities.addPeriodicTrigger(job, '@weekly')
- break
- case 'ilrt':
- assert !(os in bidailyCrossList)
- // ILASM/ILDASM roundtrip one gets a daily build, and only for release
- if (architecture == 'x64' && configuration == 'Release') {
- // We don't expect to see a job generated except in these scenarios
- assert (os == 'Windows_NT') || (os in Constants.crossList)
- if (isFlowJob || os == 'Windows_NT') {
- Utilities.addPeriodicTrigger(job, '@daily')
+ // For x86, only add per-commit jobs for Windows
+ else if (architecture == 'x86' || architecture == 'x86compatjit' || architecture == 'x86lb') {
+ if (os == 'Windows_NT') {
+ Utilities.addGithubPushTrigger(job)
}
}
- break
- case 'jitdiff':
- assert (os == 'Ubuntu' || os == 'Windows_NT' || os == 'OSX')
- assert configuration == 'Checked'
- assert (architecture == 'x64' || architecture == 'x86')
- Utilities.addGithubPushTrigger(job)
- break
- case 'coverage':
- assert (os == 'Ubuntu' || os == 'Windows_NT')
- assert configuration == 'Release'
- assert architecture == 'x64'
- Utilities.addPeriodicTrigger(job, '@weekly')
- break
- case 'formatting':
- assert (os == 'Windows_NT' || os == "Ubuntu")
- assert architecture == 'x64'
- Utilities.addGithubPushTrigger(job)
- break
- case 'jitstressregs1':
- case 'jitstressregs2':
- case 'jitstressregs3':
- case 'jitstressregs4':
- case 'jitstressregs8':
- case 'jitstressregs0x10':
- case 'jitstressregs0x80':
- case 'minopts':
- case 'forcerelocs':
- case 'jitstress1':
- case 'jitstress2':
- case 'jitstress2_jitstressregs1':
- case 'jitstress2_jitstressregs2':
- case 'jitstress2_jitstressregs3':
- case 'jitstress2_jitstressregs4':
- case 'jitstress2_jitstressregs8':
- case 'jitstress2_jitstressregs0x10':
- case 'jitstress2_jitstressregs0x80':
- case 'corefx_baseline':
- case 'corefx_minopts':
- case 'corefx_jitstress1':
- case 'corefx_jitstress2':
- case 'corefx_jitstressregs1':
- case 'corefx_jitstressregs2':
- case 'corefx_jitstressregs3':
- case 'corefx_jitstressregs4':
- case 'corefx_jitstressregs8':
- case 'corefx_jitstressregs0x10':
- case 'corefx_jitstressregs0x80':
- case 'zapdisable':
- if (os != 'CentOS7.1' && !(os in bidailyCrossList)) {
- assert (os == 'Windows_NT') || (os in Constants.crossList)
- Utilities.addPeriodicTrigger(job, '@daily')
- }
- break
- case 'heapverify1':
- case 'gcstress0x3':
- if (os != 'CentOS7.1' && !(os in bidailyCrossList)) {
- assert (os == 'Windows_NT') || (os in Constants.crossList)
- if (architecture == 'arm64') {
- assert (os == 'Windows_NT')
- Utilities.addPeriodicTrigger(job, '@daily')
+ // arm64 pri1r2r jobs should only run every 12 hours.
+ else if (architecture == 'arm64') {
+ if (os == 'Windows_NT') {
+ Utilities.addPeriodicTrigger(job, 'H H/12 * * *')
// TODO: Add once external email sending is available again
// addEmailPublisher(job, 'dotnetonarm64@microsoft.com')
}
- else {
- Utilities.addPeriodicTrigger(job, '@weekly')
- }
}
+ }
+ break
+ case 'r2r_jitstress1':
+ case 'r2r_jitstress2':
+ case 'r2r_jitstressregs1':
+ case 'r2r_jitstressregs2':
+ case 'r2r_jitstressregs3':
+ case 'r2r_jitstressregs4':
+ case 'r2r_jitstressregs8':
+ case 'r2r_jitstressregsx10':
+ case 'r2r_jitstressregsx80':
+ case 'r2r_jitminopts':
+ case 'r2r_jitforcerelocs':
+ case 'gcstress15_pri1r2r':
+ assert !(os in bidailyCrossList)
+
+ // GCStress=C is currently not supported on OS X
+ if (os == 'OSX' && isGCStressRelatedTesting(scenario)) {
break
- case 'gcstress0xc':
- case 'gcstress0xc_zapdisable':
- case 'gcstress0xc_zapdisable_jitstress2':
- case 'gcstress0xc_zapdisable_heapverify1':
- case 'gcstress0xc_jitstress1':
- case 'gcstress0xc_jitstress2':
- case 'gcstress0xc_minopts_heapverify1':
- // GCStress=C is currently not supported on OS X
- if (os != 'CentOS7.1' && os != 'OSX' && !(os in bidailyCrossList)) {
- assert (os == 'Windows_NT') || (os in Constants.crossList)
- if (architecture == 'arm64') {
- assert (os == 'Windows_NT')
- // TODO: Enable a periodic trigger after tests are updated.
- // Utilities.addPeriodicTrigger(job, '@daily')
- // TODO: Add once external email sending is available again
- // addEmailPublisher(job, 'dotnetonarm64@microsoft.com')
+ }
+
+ //GC Stress 15 pri1 r2r gets a push trigger for checked/release
+ if (configuration == 'Checked' || configuration == 'Release') {
+ assert (os == 'Windows_NT') || (os in Constants.crossList)
+ if (architecture == 'x64') {
+ //Flow jobs should be Windows, Ubuntu, OSX, or CentOS
+ if (isFlowJob || os == 'Windows_NT') {
+ // Add a weekly periodic trigger
+ Utilities.addPeriodicTrigger(job, 'H H * * 3,6') // some time every Wednesday and Saturday
}
- else {
- Utilities.addPeriodicTrigger(job, '@weekly')
+ }
+ // For x86, only add per-commit jobs for Windows
+ else if (architecture == 'x86' || architecture == 'x86compatjit' || architecture == 'x86lb') {
+ if (os == 'Windows_NT') {
+ Utilities.addPeriodicTrigger(job, 'H H * * 3,6') // some time every Wednesday and Saturday
}
}
- break
- default:
- println("Unknown scenario: ${scenario}");
- assert false
- break
+ }
+ break
+ case 'longgc':
+ assert (os == 'Ubuntu' || os == 'Windows_NT' || os == 'OSX')
+ assert configuration == 'Release'
+ assert architecture == 'x64'
+ Utilities.addPeriodicTrigger(job, '@daily')
+ // TODO: Add once external email sending is available again
+ // addEmailPublisher(job, 'dotnetgctests@microsoft.com')
+ break
+ case 'gcsimulator':
+ assert (os == 'Ubuntu' || os == 'Windows_NT' || os == 'OSX')
+ assert configuration == 'Release'
+ assert architecture == 'x64'
+ Utilities.addPeriodicTrigger(job, 'H H * * 3,6') // some time every Wednesday and Saturday
+ // TODO: Add once external email sending is available again
+ // addEmailPublisher(job, 'dotnetgctests@microsoft.com')
+ break
+ case 'standalone_gc':
+ assert (os == 'Ubuntu' || os == 'Windows_NT' || os == 'OSX')
+ assert (configuration == 'Release' || configuration == 'Checked')
+ // TODO: Add once external email sending is available again
+ // addEmailPublisher(job, 'dotnetgctests@microsoft.com')
+ Utilities.addPeriodicTrigger(job, '@weekly')
+ break
+ case 'ilrt':
+ assert !(os in bidailyCrossList)
+ // ILASM/ILDASM roundtrip one gets a daily build, and only for release
+ if (architecture == 'x64' && configuration == 'Release') {
+ // We don't expect to see a job generated except in these scenarios
+ assert (os == 'Windows_NT') || (os in Constants.crossList)
+ if (isFlowJob || os == 'Windows_NT') {
+ Utilities.addPeriodicTrigger(job, '@daily')
+ }
+ }
+ break
+ case 'jitdiff':
+ assert (os == 'Ubuntu' || os == 'Windows_NT' || os == 'OSX')
+ assert configuration == 'Checked'
+ assert (architecture == 'x64' || architecture == 'x86')
+ Utilities.addGithubPushTrigger(job)
+ break
+ case 'coverage':
+ assert (os == 'Ubuntu' || os == 'Windows_NT')
+ assert configuration == 'Release'
+ assert architecture == 'x64'
+ Utilities.addPeriodicTrigger(job, '@weekly')
+ break
+ case 'formatting':
+ assert (os == 'Windows_NT' || os == "Ubuntu")
+ assert architecture == 'x64'
+ Utilities.addGithubPushTrigger(job)
+ break
+ case 'jitstressregs1':
+ case 'jitstressregs2':
+ case 'jitstressregs3':
+ case 'jitstressregs4':
+ case 'jitstressregs8':
+ case 'jitstressregs0x10':
+ case 'jitstressregs0x80':
+ case 'minopts':
+ case 'forcerelocs':
+ case 'jitstress1':
+ case 'jitstress2':
+ case 'jitstress2_jitstressregs1':
+ case 'jitstress2_jitstressregs2':
+ case 'jitstress2_jitstressregs3':
+ case 'jitstress2_jitstressregs4':
+ case 'jitstress2_jitstressregs8':
+ case 'jitstress2_jitstressregs0x10':
+ case 'jitstress2_jitstressregs0x80':
+ case 'corefx_baseline':
+ case 'corefx_minopts':
+ case 'corefx_jitstress1':
+ case 'corefx_jitstress2':
+ case 'corefx_jitstressregs1':
+ case 'corefx_jitstressregs2':
+ case 'corefx_jitstressregs3':
+ case 'corefx_jitstressregs4':
+ case 'corefx_jitstressregs8':
+ case 'corefx_jitstressregs0x10':
+ case 'corefx_jitstressregs0x80':
+ case 'zapdisable':
+ if (os != 'CentOS7.1' && !(os in bidailyCrossList)) {
+ assert (os == 'Windows_NT') || (os in Constants.crossList)
+ Utilities.addPeriodicTrigger(job, '@daily')
}
+ break
+ case 'heapverify1':
+ case 'gcstress0x3':
+ if (os != 'CentOS7.1' && !(os in bidailyCrossList)) {
+ assert (os == 'Windows_NT') || (os in Constants.crossList)
+ if (architecture == 'arm64') {
+ assert (os == 'Windows_NT')
+ Utilities.addPeriodicTrigger(job, '@daily')
+ // TODO: Add once external email sending is available again
+ // addEmailPublisher(job, 'dotnetonarm64@microsoft.com')
+ }
+ else {
+ Utilities.addPeriodicTrigger(job, '@weekly')
+ }
+ }
+ break
+ case 'gcstress0xc':
+ case 'gcstress0xc_zapdisable':
+ case 'gcstress0xc_zapdisable_jitstress2':
+ case 'gcstress0xc_zapdisable_heapverify1':
+ case 'gcstress0xc_jitstress1':
+ case 'gcstress0xc_jitstress2':
+ case 'gcstress0xc_minopts_heapverify1':
+ // GCStress=C is currently not supported on OS X
+ if (os != 'CentOS7.1' && os != 'OSX' && !(os in bidailyCrossList)) {
+ assert (os == 'Windows_NT') || (os in Constants.crossList)
+ if (architecture == 'arm64') {
+ assert (os == 'Windows_NT')
+ // TODO: Enable a periodic trigger after tests are updated.
+ // Utilities.addPeriodicTrigger(job, '@daily')
+ // TODO: Add once external email sending is available again
+ // addEmailPublisher(job, 'dotnetonarm64@microsoft.com')
+ }
+ else {
+ Utilities.addPeriodicTrigger(job, '@weekly')
+ }
+ }
+ break
+ default:
+ println("Unknown scenario: ${scenario}");
+ assert false
+ break
+ }
+ return
+}
+
+// **************************
+// Define the basic inner loop builds for PR and commit. This is basically just the set
+// of coreclr builds over linux/osx/freebsd/windows and debug/release/checked. In addition, the windows
+// builds will do a couple extra steps.
+// **************************
+
+// Adds a trigger for the PR build if one is needed. If isFlowJob is true, then this is the
+// flow job that rolls up the build and test for non-windows OS's. // If the job is a windows build only job,
+// it's just used for internal builds
+// If you add a job with a trigger phrase, please add that phrase to coreclr/Documentation/project-docs/ci-trigger-phrases.md
+def static addTriggers(def job, def branch, def isPR, def architecture, def os, def configuration, def scenario, def isFlowJob, def isWindowsBuildOnlyJob, def isLinuxEmulatorBuild) {
+ if (isWindowsBuildOnlyJob) {
+ return
+ }
+
+ def bidailyCrossList = ['RHEL7.2', 'Debian8.4']
+ // Non pull request builds.
+ if (!isPR) {
+ addNonPRTriggers(job, branch, isPR, architecture, os, configuration, scenario, isFlowJob, isWindowsBuildOnlyJob, isLinuxEmulatorBuild, bidailyCrossList)
return
}
// Pull request builds. Generally these fall into two categories: default triggers and on-demand triggers
@@ -635,7 +617,6 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
switch (os) {
// OpenSUSE, Debian & RedHat get trigger phrases for pri 0 build, and pri 1 build & test
- case 'OpenSUSE13.2':
case 'Debian8.4':
case 'RHEL7.2':
if (scenario == 'default') {
@@ -852,7 +833,7 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
case 'corefx_jitstressregs8':
case 'corefx_jitstressregs0x10':
case 'corefx_jitstressregs0x80':
- def displayName = 'CoreFx' + getStressModeDisplayName(scenario)
+ def displayName = 'CoreFx ' + getStressModeDisplayName(scenario)
assert (os == 'Windows_NT') || (os in Constants.crossList)
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test (Jit - ${displayName})",
"(?i).*test\\W+${os}\\W+${scenario}.*")
@@ -1128,7 +1109,7 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
assert (os == 'Windows_NT') || (os in Constants.crossList)
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test (Jit - ${displayStr})",
"(?i).*test\\W+${os}\\W+${scenario}.*")
- break
+ break
case 'corefx_baseline':
case 'corefx_minopts':
case 'corefx_jitstress1':
@@ -1202,13 +1183,46 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
contextString += " and Test"
}
- def arm64Users = ['erozenfeld', 'kyulee1', 'pgavlin', 'russellhadley', 'swaroop-sridhar', 'JosephTremoulet', 'jashook', 'RussKeldorph', 'gkhanna79', 'briansull', 'cmckinsey', 'jkotas', 'ramarag', 'markwilkie', 'rahku', 'tzwlai', 'weshaggard']
+ def arm64Users = [
+ 'adiaaida',
+ 'AndyAyersMS',
+ 'briansull',
+ 'BruceForstall',
+ 'CarolEidt',
+ 'cmckinsey',
+ 'erozenfeld',
+ 'jashook',
+ 'JosephTremoulet',
+ 'pgavlin',
+ 'pkukol',
+ 'russellhadley',
+ 'RussKeldorph',
+ 'sandreenko',
+ 'sivarv',
+ 'swaroop-sridhar',
+ 'gkhanna79',
+ 'jkotas',
+ 'markwilkie',
+ 'rahku',
+ 'ramarag',
+ 'tzwlai',
+ 'weshaggard'
+ ]
+
switch (os) {
case 'Windows_NT':
switch (scenario) {
case 'default':
- Utilities.addPrivateGithubPRTriggerForBranch(job, branch, contextString,
- "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}.*", null, arm64Users)
+ // For now only run Debug jobs on PR Trigger.
+ if (configuration != 'Debug') {
+ Utilities.addPrivateGithubPRTriggerForBranch(job, branch, contextString,
+ "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}.*", null, arm64Users)
+ }
+ else {
+ // Add "Checked Build And Test" and "Debug Build" to the above users' PRs since many of them
+ // are at higher risk of ARM64-breaking changes.
+ Utilities.addDefaultPrivateGithubPRTriggerForBranch(job, branch, contextString, null, arm64Users)
+ }
break
case 'pri1r2r':
case 'gcstress0x3':
@@ -1232,6 +1246,10 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
if (configuration == 'Checked') {
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test")
}
+ else if (configuration == 'Release') {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test",
+ "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}.*")
+ }
break
case 'pri1':
if (configuration == 'Release') {
@@ -1411,6 +1429,22 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test (Jit - ${displayStr})",
"(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*")
break
+ case 'corefx_baseline':
+ case 'corefx_minopts':
+ case 'corefx_jitstress1':
+ case 'corefx_jitstress2':
+ case 'corefx_jitstressregs1':
+ case 'corefx_jitstressregs2':
+ case 'corefx_jitstressregs3':
+ case 'corefx_jitstressregs4':
+ case 'corefx_jitstressregs8':
+ case 'corefx_jitstressregs0x10':
+ case 'corefx_jitstressregs0x80':
+ def displayName = 'CoreFx ' + getStressModeDisplayName(scenario)
+ assert (os == 'Windows_NT') || (os in Constants.crossList)
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test (Jit - ${displayName})",
+ "(?i).*test\\W+${os}\\W+${scenario}.*")
+ break
default:
println("Unknown scenario: ${os} ${architecture} ${scenario}");
assert false
@@ -1537,6 +1571,11 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
"(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
}
break
+ case 'standalone_gc':
+ if (configuration == 'Release' || configuration == 'Checked') {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Standalone GC", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
+ }
+ break
case 'minopts':
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} Build and Test (Jit - MinOpts)",
"(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
@@ -1602,6 +1641,22 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} Build and Test (Jit - ${displayStr})",
"(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
break
+ case 'corefx_baseline':
+ case 'corefx_minopts':
+ case 'corefx_jitstress1':
+ case 'corefx_jitstress2':
+ case 'corefx_jitstressregs1':
+ case 'corefx_jitstressregs2':
+ case 'corefx_jitstressregs3':
+ case 'corefx_jitstressregs4':
+ case 'corefx_jitstressregs8':
+ case 'corefx_jitstressregs0x10':
+ case 'corefx_jitstressregs0x80':
+ def displayName = 'CoreFx ' + getStressModeDisplayName(scenario)
+ assert (os == 'Windows_NT')
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} Build and Test (Jit - ${displayName})",
+ "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
+ break
default:
println("Unknown scenario: ${os} ${arch} ${jit} ${scenario}");
assert false
@@ -1724,6 +1779,11 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
"(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
}
break
+ case 'standalone_gc':
+ if (configuration == 'Release' || configuration == 'Checked') {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Standalone GC", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
+ }
+ break
default:
println("Unknown scenario: ${os} ${arch} ${jit} ${scenario}");
assert false
@@ -1738,6 +1798,402 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
}
}
+def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR, def architecture, def configuration, def os, def enableCorefxTesting, def isBuildOnly, def isLinuxEmulatorBuild) {
+ def buildCommands = [];
+ def osGroup = getOSGroup(os)
+ def lowerConfiguration = configuration.toLowerCase()
+
+ // Calculate the build steps, archival, and xunit results
+ switch (os) {
+ case 'Windows_NT': // editor brace matching: {
+ switch (architecture) {
+ case 'x64':
+ case 'x86':
+ case 'x86compatjit':
+ case 'x86lb':
+ def arch = architecture
+ def buildOpts = ''
+
+ // We need to explicitly run build-test.cmd with Exclude for x86compatjit and x86lb, so skip tests.
+ if (architecture == 'x86compatjit') {
+ arch = 'x86'
+ buildOpts = 'compatjitcrossgen skiptests'
+ }
+ else if (architecture == 'x86lb') {
+ arch = 'x86'
+ buildOpts = 'legacyjitcrossgen skiptests'
+ }
+
+ if (Constants.jitStressModeScenarios.containsKey(scenario) ||
+ scenario == 'default' ||
+ scenario == 'r2r' ||
+ scenario == 'jitdiff' ||
+ Constants.r2rJitStressScenarios.indexOf(scenario) != -1) {
+ buildOpts += enableCorefxTesting ? ' skiptests' : ''
+ buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${arch} ${buildOpts}"
+ }
+
+ // For Pri 1 tests, we must shorten the output test binary path names.
+ // if __TestIntermediateDir is already set, build-test.cmd will
+ // output test binaries to that directory. If it is not set, the
+ // binaries are sent to a default directory whose name is about
+ // 35 characters long.
+
+ else if (scenario == 'pri1' || scenario == 'pri1r2r' || scenario == 'gcstress15_pri1r2r'|| scenario == 'coverage') {
+ buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${arch} ${buildOpts} -priority=1"
+ }
+ else if (scenario == 'ilrt') {
+ // First do the build with skiptests and then build the tests with ilasm roundtrip
+ buildCommands += "build.cmd ${lowerConfiguration} ${arch} ${buildOpts} skiptests"
+ buildCommands += "set __TestIntermediateDir=int&&build-test.cmd ${lowerConfiguration} ${arch} -ilasmroundtrip"
+ }
+ else if (isLongGc(scenario)) {
+ buildCommands += "build.cmd ${lowerConfiguration} ${arch} ${buildOpts} skiptests"
+ buildCommands += "set __TestIntermediateDir=int&&build-test.cmd ${lowerConfiguration} ${arch}"
+ }
+ else if (scenario == 'standalone_gc') {
+ buildCommands += "build.cmd ${lowerConfiguration} ${arch} ${buildOpts} buildstandalonegc"
+ }
+ else if (scenario == 'formatting') {
+ buildCommands += "python -u tests\\scripts\\format.py -c %WORKSPACE% -o Windows_NT -a ${arch}"
+ Utilities.addArchival(newJob, "format.patch", "", true, false)
+ break
+ }
+ else {
+ println("Unknown scenario: ${scenario}")
+ assert false
+ }
+
+ // If we are running a stress mode, we should write out the set of key
+ // value env pairs to a file at this point and then we'll pass that to runtest.cmd
+
+ if (!isBuildOnly) {
+ //If this is a crossgen build, pass 'crossgen' to runtest.cmd
+ def crossgenStr = ''
+ def runcrossgentestsStr = ''
+ def runjitstressStr = ''
+ def runjitstressregsStr = ''
+ def runjitmioptsStr = ''
+ def runjitforcerelocsStr = ''
+ def runjitdisasmStr = ''
+ def gcstressStr = ''
+ def runtestArguments = ''
+ def gcTestArguments = ''
+
+ if (scenario == 'r2r' ||
+ scenario == 'pri1r2r' ||
+ scenario == 'gcstress15_pri1r2r' ||
+ Constants.r2rJitStressScenarios.indexOf(scenario) != -1) {
+ crossgenStr = 'crossgen'
+ runcrossgentestsStr = 'runcrossgentests'
+
+ if (scenario == 'r2r_jitstress1'){
+ runjitstressStr = 'jitstress 1'
+ }
+ else if (scenario == 'r2r_jitstress2') {
+ runjitstressStr = 'jitstress 2'
+ }
+ else if (scenario == 'r2r_jitstressregs1'){
+ runjitstressregsStr = 'jitstressregs 1'
+ }
+ else if (scenario == 'r2r_jitstressregs2') {
+ runjitstressregsStr = 'jitstressregs 2'
+ }
+ else if (scenario == 'r2r_jitstressregs3') {
+ runjitstressregsStr = 'jitstressregs 3'
+ }
+ else if (scenario == 'r2r_jitstressregs4') {
+ runjitstressregsStr = 'jitstressregs 4'
+ }
+ else if (scenario == 'r2r_jitstressregs8') {
+ runjitstressregsStr = 'jitstressregs 8'
+ }
+ else if (scenario == 'r2r_jitstressregsx10') {
+ runjitstressregsStr = 'jitstressregs x10'
+ }
+ else if (scenario == 'r2r_jitstressregsx80') {
+ runjitstressregsStr = 'jitstressregs x80'
+ }
+ else if (scenario == 'r2r_jitminopts') {
+ runjitmioptsStr = 'jitminopts'
+ }
+ else if (scenario == 'r2r_jitforcerelocs') {
+ runjitforcerelocsStr = 'jitforcerelocs'
+ }
+ }
+ if (scenario == 'gcstress15_pri1r2r')
+ {
+ gcstressStr = 'gcstresslevel 0xF'
+ }
+
+ if (scenario == 'jitdiff')
+ {
+ runjitdisasmStr = 'jitdisasm crossgen'
+ }
+
+ if (isLongGc(scenario)) {
+ gcTestArguments = "${scenario} sequential"
+ }
+
+ runtestArguments = "${lowerConfiguration} ${arch} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${gcTestArguments}"
+
+ if (Constants.jitStressModeScenarios.containsKey(scenario)) {
+ def stepScriptLocation = "%WORKSPACE%\\SetStressModes.bat"
+ buildCommands += genStressModeScriptStep(os, scenario, Constants.jitStressModeScenarios[scenario], stepScriptLocation)
+
+ if (enableCorefxTesting) {
+ def workspaceRelativeFxRoot = "_/fx"
+ def absoluteFxRoot = "%WORKSPACE%\\_\\fx"
+
+ buildCommands += "python %WORKSPACE%\\tests\\scripts\\run-corefx-tests.py -arch ${arch} -build_type ${configuration} -fx_root ${absoluteFxRoot} -fx_branch ${branch} -env_script ${stepScriptLocation}"
+
+ setTestJobTimeOut(newJob, scenario)
+
+ // Archive and process (only) the test results
+ Utilities.addArchival(newJob, "${workspaceRelativeFxRoot}/bin/**/testResults.xml")
+ Utilities.addXUnitDotNETResults(newJob, "${workspaceRelativeFxRoot}/bin/**/testResults.xml")
+ }
+ else {
+ buildCommands += "%WORKSPACE%\\tests\\runtest.cmd ${runtestArguments} TestEnv ${stepScriptLocation}"
+ }
+ }
+ else if (architecture == 'x64' || architecture == 'x86') {
+ buildCommands += "tests\\runtest.cmd ${runtestArguments}"
+ }
+ else if (architecture == 'x86compatjit') {
+ def testEnvLocation = "%WORKSPACE%\\tests\\x86\\compatjit_x86_testenv.cmd"
+ def excludeLocation = "%WORKSPACE%\\tests\\x86_legacy_backend_issues.targets"
+ buildCommands += "build-test.cmd ${runtestArguments} Exclude ${excludeLocation}"
+ buildCommands += "tests\\runtest.cmd ${runtestArguments} TestEnv ${testEnvLocation}"
+ }
+ else if (architecture == 'x86lb') {
+ def testEnvLocation = "%WORKSPACE%\\tests\\x86\\legacyjit_x86_testenv.cmd"
+ def excludeLocation = "%WORKSPACE%\\tests\\x86_legacy_backend_issues.targets"
+ buildCommands += "build-test.cmd ${runtestArguments} Exclude ${excludeLocation}"
+ buildCommands += "tests\\runtest.cmd ${runtestArguments} TestEnv ${testEnvLocation}"
+ }
+ }
+
+ if (!enableCorefxTesting) {
+ // Run the rest of the build
+ // Build the mscorlib for the other OS's
+ buildCommands += "build.cmd ${lowerConfiguration} ${arch} linuxmscorlib"
+ buildCommands += "build.cmd ${lowerConfiguration} ${arch} freebsdmscorlib"
+ buildCommands += "build.cmd ${lowerConfiguration} ${arch} osxmscorlib"
+
+ // Zip up the tests directory so that we don't use so much space/time copying
+ // 10s of thousands of files around.
+ buildCommands += "powershell -Command \"Add-Type -Assembly 'System.IO.Compression.FileSystem'; [System.IO.Compression.ZipFile]::CreateFromDirectory('.\\bin\\tests\\${osGroup}.${arch}.${configuration}', '.\\bin\\tests\\tests.zip')\"";
+
+ if (!Constants.jitStressModeScenarios.containsKey(scenario)) {
+ // For windows, pull full test results and test drops for x86/x64.
+ // No need to pull for stress mode scenarios (downstream builds use the default scenario)
+ Utilities.addArchival(newJob, "bin/Product/**,bin/tests/tests.zip")
+ }
+
+ if (scenario == 'jitdiff') {
+ // retrive jit-dasm output for base commit, and run jit-diff
+ if (!isBuildOnly) {
+ // if this is a build only job, we want to keep the default (build) artifacts for the flow job
+ Utilities.addArchival(newJob, "bin/tests/${osGroup}.${arch}.${configuration}/dasm/**")
+ }
+ }
+
+ if (!isBuildOnly) {
+ if (architecture == 'x64' || !isPR) {
+ Utilities.addXUnitDotNETResults(newJob, 'bin/**/TestRun*.xml')
+ }
+ setTestJobTimeOut(newJob, scenario)
+ }
+ }
+ break
+ case 'arm':
+ assert (scenario == 'default')
+
+ // Set time out
+ setTestJobTimeOut(newJob, scenario)
+
+ if ( lowerConfiguration == "debug" ) {
+ // For Debug builds, we will do a P1 test build
+ buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture} -priority=1"
+ }
+ else {
+ buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture}"
+ }
+ // Add archival.
+ Utilities.addArchival(newJob, "bin/Product/**")
+ break
+ case 'arm64':
+ assert (scenario == 'default') || (scenario == 'pri1r2r') || (scenario == 'gcstress0x3') || (scenario == 'gcstress0xc')
+ // Set time out
+ setTestJobTimeOut(newJob, scenario)
+
+ // Debug runs take too long to run. So build job only.
+ if (lowerConfiguration == "debug") {
+ buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture} toolset_dir C:\\ats2"
+ }
+ else {
+ buildCommands += "set __TestIntermediateDir=int&&build.cmd skiptests ${lowerConfiguration} ${architecture} toolset_dir C:\\ats2"
+ // Test build and run are launched together.
+ buildCommands += "python tests\\scripts\\arm64_post_build.py -repo_root %WORKSPACE% -arch ${architecture} -build_type ${lowerConfiguration} -scenario ${scenario} -key_location C:\\tools\\key.txt"
+ //Utilities.addXUnitDotNETResults(newJob, 'bin/tests/testResults.xml')
+ }
+
+ // Add archival.
+ Utilities.addArchival(newJob, "bin/Product/**")
+ break
+ default:
+ println("Unknown architecture: ${architecture}");
+ assert false
+ break
+ }
+ break
+ // editor brace matching: }
+ case 'Ubuntu':
+ case 'Ubuntu16.04':
+ case 'Ubuntu16.10':
+ case 'Debian8.4':
+ case 'OSX':
+ case 'FreeBSD':
+ case 'CentOS7.1':
+ case 'RHEL7.2':
+ case 'OpenSUSE42.1':
+ case 'Fedora23': // editor brace matching: {
+ switch (architecture) {
+ case 'x64':
+ case 'x86':
+ case 'x86compatjit':
+ case 'x86lb':
+ def arch = architecture
+ if (architecture == 'x86compatjit' || architecture == 'x86lb') {
+ arch = 'x86'
+ }
+
+ if (scenario == 'formatting') {
+ buildCommands += "python tests/scripts/format.py -c \${WORKSPACE} -o Linux -a ${arch}"
+ Utilities.addArchival(newJob, "format.patch", "", true, false)
+ break
+ }
+
+ def standaloneGc = ''
+ if (scenario == 'standalone_gc') {
+ standaloneGc = 'buildstandalonegc'
+ }
+
+ if (!enableCorefxTesting) {
+ // We run pal tests on all OS but generate mscorlib (and thus, nuget packages)
+ // only on supported OS platforms.
+ if (os == 'FreeBSD')
+ {
+ buildCommands += "./build.sh skipmscorlib verbose ${lowerConfiguration} ${arch} ${standaloneGc}"
+ }
+ else
+ {
+ def bootstrapRid = Utilities.getBoostrapPublishRid(os)
+ def bootstrapRidEnv = bootstrapRid != null ? "__PUBLISH_RID=${bootstrapRid} " : ''
+ buildCommands += "${bootstrapRidEnv}./build.sh verbose ${lowerConfiguration} ${arch} ${standaloneGc}"
+ }
+ buildCommands += "src/pal/tests/palsuite/runpaltests.sh \${WORKSPACE}/bin/obj/${osGroup}.${arch}.${configuration} \${WORKSPACE}/bin/paltestout"
+
+ // Set time out
+ setTestJobTimeOut(newJob, scenario)
+ // Basic archiving of the build
+ Utilities.addArchival(newJob, "bin/Product/**,bin/obj/*/tests/**/*.dylib,bin/obj/*/tests/**/*.so")
+ // And pal tests
+ Utilities.addXUnitDotNETResults(newJob, '**/pal_tests.xml')
+ }
+ else {
+ // Corefx stress testing
+ assert os == 'Ubuntu'
+ assert architecture == 'x64'
+ assert lowerConfiguration == 'checked'
+ assert Constants.jitStressModeScenarios.containsKey(scenario)
+
+ // Build coreclr
+ buildCommands += "./build.sh verbose ${lowerConfiguration} ${architecture}"
+
+ def scriptFileName = "\$WORKSPACE/set_stress_test_env.sh"
+ buildCommands += genStressModeScriptStep(os, scenario, Constants.jitStressModeScenarios[scenario], scriptFileName)
+
+ // Build and text corefx
+ def workspaceRelativeFxRoot = "_/fx"
+ def absoluteFxRoot = "\$WORKSPACE/${workspaceRelativeFxRoot}"
+
+ buildCommands += "python \$WORKSPACE/tests/scripts/run-corefx-tests.py -arch ${arch} -build_type ${configuration} -fx_root ${absoluteFxRoot} -fx_branch ${branch} -env_script ${scriptFileName}"
+
+ setTestJobTimeOut(newJob, scenario)
+
+ // Archive and process (only) the test results
+ Utilities.addArchival(newJob, "${workspaceRelativeFxRoot}/bin/**/testResults.xml")
+ Utilities.addXUnitDotNETResults(newJob, "${workspaceRelativeFxRoot}/bin/**/testResults.xml")
+ }
+ break
+ case 'arm64':
+ // We don't run the cross build except on Ubuntu
+ assert os == 'Ubuntu'
+
+ buildCommands += """echo \"Using rootfs in /opt/aarch64-linux-gnu-root\"
+ ROOTFS_DIR=/opt/aarch64-linux-gnu-root ./build.sh skipmscorlib arm64 cross verbose ${lowerConfiguration}"""
+
+ // Basic archiving of the build, no pal tests
+ Utilities.addArchival(newJob, "bin/Product/**")
+ break
+ case 'arm':
+ // All builds for ARM architecture are run on Ubuntu currently
+ assert os == 'Ubuntu'
+ if (isLinuxEmulatorBuild == false) {
+ buildCommands += """echo \"Using rootfs in /opt/arm-liux-genueabihf-root\"
+ ROOTFS_DIR=/opt/arm-linux-genueabihf-root ./build.sh skipmscorlib arm cross verbose ${lowerConfiguration}"""
+
+ // Basic archiving of the build, no pal tests
+ Utilities.addArchival(newJob, "bin/Product/**")
+ break
+ }
+ else {
+ // Make sure the build configuration is either of debug or release
+ assert ( lowerConfiguration == 'debug' ) || ( lowerConfiguration == 'release' )
+
+ // Setup variables to hold emulator folder path and the rootfs mount path
+ def armemul_path = '/opt/linux-arm-emulator'
+ def armrootfs_mountpath = '/opt/linux-arm-emulator-root'
+
+ // Unzip the Windows test binaries first. Exit with 0
+ buildCommands += "unzip -q -o ./bin/tests/tests.zip -d ./bin/tests/Windows_NT.x64.${configuration} || exit 0"
+
+ // Unpack the corefx binaries
+ buildCommands += "tar -xf ./bin/build.tar.gz"
+
+ // Call the ARM emulator build script to cross build and test using the ARM emulator rootfs
+ buildCommands += """./tests/scripts/arm32_ci_script.sh \\
+ --emulatorPath=${armemul_path} \\
+ --mountPath=${armrootfs_mountpath} \\
+ --buildConfig=${lowerConfiguration} \\
+ --testRootDir=./bin/tests/Windows_NT.x64.${configuration} \\
+ --coreFxNativeBinDir=./bin/Linux.armel.${configuration} \\
+ --coreFxBinDir=\"./bin/Linux.AnyCPU.${configuration};./bin/Unix.AnyCPU.${configuration};./bin/AnyOS.AnyCPU.${configuration}\" \\
+ --testDirFile=./tests/testsRunningInsideARM.txt"""
+
+
+ // Basic archiving of the build
+ Utilities.addArchival(newJob, "bin/Product/**")
+ break
+ }
+ default:
+ println("Unknown architecture: ${architecture}");
+ assert false
+ break
+ }
+ break
+ // editor brace matching: }
+ default:
+ println("Unknown os: ${os}");
+ assert false
+ break
+ } // os
+
+ return buildCommands
+}
+
// Additional scenario which can alter behavior
def combinedScenarios = Constants.basicScenarios + Constants.jitStressModeScenarios.keySet()
@@ -1834,12 +2290,8 @@ combinedScenarios.each { scenario ->
}
break
case 'x64':
- // Everything implemented
- break
case 'x86':
- if (enableCorefxTesting) {
- return
- }
+ // Everything implemented
break
case 'x86compatjit':
case 'x86lb':
@@ -1952,7 +2404,7 @@ combinedScenarios.each { scenario ->
}
break
case 'standalone_gc':
- if (os != 'Windows_NT') {
+ if (os != 'Windows_NT' && os != 'Ubuntu' && os != 'OSX') {
return
}
@@ -2015,401 +2467,8 @@ combinedScenarios.each { scenario ->
Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}")
addTriggers(newJob, branch, isPR, architecture, os, configuration, scenario, false, isBuildOnly, isLinuxEmulatorBuild)
- def buildCommands = [];
+ def buildCommands = calculateBuildCommands(newJob, scenario, branch, isPR, architecture, configuration, os, enableCorefxTesting, isBuildOnly, isLinuxEmulatorBuild)
def osGroup = getOSGroup(os)
-
- // Calculate the build steps, archival, and xunit results
- switch (os) {
- case 'Windows_NT': // editor brace matching: {
- switch (architecture) {
- case 'x64':
- case 'x86':
- case 'x86compatjit':
- case 'x86lb':
- def arch = architecture
- def buildOpts = ''
- if (architecture == 'x86compatjit') {
- arch = 'x86'
- buildOpts = 'compatjitcrossgen'
- }
- else if (architecture == 'x86lb') {
- arch = 'x86'
- buildOpts = 'legacyjitcrossgen'
- }
-
- if (Constants.jitStressModeScenarios.containsKey(scenario) ||
- scenario == 'default' ||
- scenario == 'r2r' ||
- scenario == 'jitdiff' ||
- Constants.r2rJitStressScenarios.indexOf(scenario) != -1) {
- buildOpts += enableCorefxTesting ? ' skiptests' : ''
- buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${arch} ${buildOpts}"
- }
-
- // For Pri 1 tests, we must shorten the output test binary path names.
- // if __TestIntermediateDir is already set, build-test.cmd will
- // output test binaries to that directory. If it is not set, the
- // binaries are sent to a default directory whose name is about
- // 35 characters long.
-
- else if (scenario == 'pri1' || scenario == 'pri1r2r' || scenario == 'gcstress15_pri1r2r'|| scenario == 'coverage') {
- buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${arch} ${buildOpts} -priority=1"
- }
- else if (scenario == 'ilrt') {
- // First do the build with skiptests and then build the tests with ilasm roundtrip
- buildCommands += "build.cmd ${lowerConfiguration} ${arch} ${buildOpts} skiptests"
- buildCommands += "set __TestIntermediateDir=int&&build-test.cmd ${lowerConfiguration} ${arch} -ilasmroundtrip"
- }
- else if (isLongGc(scenario)) {
- buildCommands += "build.cmd ${lowerConfiguration} ${arch} ${buildOpts} skiptests"
- buildCommands += "set __TestIntermediateDir=int&&build-test.cmd ${lowerConfiguration} ${arch}"
- }
- else if (scenario == 'standalone_gc') {
- buildCommands += "build.cmd ${lowerConfiguration} ${arch} ${buildOpts} buildstandalonegc"
- }
- else if (scenario == 'formatting') {
- buildCommands += "python -u tests\\scripts\\format.py -c %WORKSPACE% -o Windows_NT -a ${arch}"
- Utilities.addArchival(newJob, "format.patch", "", true, false)
- break
- }
- else {
- println("Unknown scenario: ${scenario}")
- assert false
- }
-
- // If we are running a stress mode, we should write out the set of key
- // value env pairs to a file at this point and then we'll pass that to runtest.cmd
-
- if (!isBuildOnly) {
- //If this is a crossgen build, pass 'crossgen' to runtest.cmd
- def crossgenStr = ''
- def runcrossgentestsStr = ''
- def runjitstressStr = ''
- def runjitstressregsStr = ''
- def runjitmioptsStr = ''
- def runjitforcerelocsStr = ''
- def runjitdisasmStr = ''
- def gcstressStr = ''
- def runtestArguments = ''
- def gcTestArguments = ''
-
- if (scenario == 'r2r' ||
- scenario == 'pri1r2r' ||
- scenario == 'gcstress15_pri1r2r' ||
- Constants.r2rJitStressScenarios.indexOf(scenario) != -1) {
- crossgenStr = 'crossgen'
- runcrossgentestsStr = 'runcrossgentests'
-
- if (scenario == 'r2r_jitstress1'){
- runjitstressStr = 'jitstress 1'
- }
- else if (scenario == 'r2r_jitstress2') {
- runjitstressStr = 'jitstress 2'
- }
- else if (scenario == 'r2r_jitstressregs1'){
- runjitstressregsStr = 'jitstressregs 1'
- }
- else if (scenario == 'r2r_jitstressregs2') {
- runjitstressregsStr = 'jitstressregs 2'
- }
- else if (scenario == 'r2r_jitstressregs3') {
- runjitstressregsStr = 'jitstressregs 3'
- }
- else if (scenario == 'r2r_jitstressregs4') {
- runjitstressregsStr = 'jitstressregs 4'
- }
- else if (scenario == 'r2r_jitstressregs8') {
- runjitstressregsStr = 'jitstressregs 8'
- }
- else if (scenario == 'r2r_jitstressregsx10') {
- runjitstressregsStr = 'jitstressregs x10'
- }
- else if (scenario == 'r2r_jitstressregsx80') {
- runjitstressregsStr = 'jitstressregs x80'
- }
- else if (scenario == 'r2r_jitminopts') {
- runjitmioptsStr = 'jitminopts'
- }
- else if (scenario == 'r2r_jitforcerelocs') {
- runjitforcerelocsStr = 'jitforcerelocs'
- }
- }
- if (scenario == 'gcstress15_pri1r2r')
- {
- gcstressStr = 'gcstresslevel 0xF'
- }
-
- if (scenario == 'jitdiff')
- {
- runjitdisasmStr = 'jitdisasm crossgen'
- }
-
- if (isLongGc(scenario)) {
- gcTestArguments = "${scenario} sequential"
- }
-
- runtestArguments = "${lowerConfiguration} ${arch} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${gcTestArguments}"
-
- if (Constants.jitStressModeScenarios.containsKey(scenario)) {
- if (enableCorefxTesting) {
- // Sync to corefx repo
- // Move coreclr files to a subdirectory, %workspace%/clr. Otherwise, corefx build
- // thinks that %workspace% is the project base directory.
- buildCommands += "powershell new-item clr -type directory -force"
- buildCommands += 'powershell foreach ($x in get-childitem -force) { if (\$x.name -ne \'clr\') { move-item $x clr }}'
- buildCommands += "git clone -b $branch --single-branch https://github.com/dotnet/corefx fx"
-
- buildCommands += getStressModeEnvSetCmd(os, scenario);
-
- // Run corefx build and testing
- buildCommands += "cd fx && call \"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat\" x86 && Build.cmd -Release -- /p:BUILDTOOLS_OVERRIDE_RUNTIME=%WORKSPACE%\\clr\\bin\\Product\\Windows_NT.x64.Checked "
- }
- else {
- def stepScriptLocation = "%WORKSPACE%\\bin\\tests\\SetStressModes.bat"
- buildCommands += genStressModeScriptStep(os, scenario, Constants.jitStressModeScenarios[scenario], stepScriptLocation)
- // Run tests with the
- buildCommands += "tests\\runtest.cmd ${runtestArguments} TestEnv ${stepScriptLocation}"
- }
- }
- else if (architecture == 'x64' || architecture == 'x86') {
- buildCommands += "tests\\runtest.cmd ${runtestArguments}"
- }
- else if (architecture == 'x86compatjit') {
- def testEnvLocation = "%WORKSPACE%\\tests\\x86\\compatjit_x86_testenv.cmd"
- buildCommands += "tests\\runtest.cmd ${runtestArguments} Exclude0 x86_legacy_backend_issues.targets TestEnv ${testEnvLocation}"
- }
- else if (architecture == 'x86lb') {
- def testEnvLocation = "%WORKSPACE%\\tests\\x86\\legacyjit_x86_testenv.cmd"
- buildCommands += "tests\\runtest.cmd ${runtestArguments} Exclude0 x86_legacy_backend_issues.targets TestEnv ${testEnvLocation}"
- }
- }
-
- if (!enableCorefxTesting) {
- // Run the rest of the build
- // Build the mscorlib for the other OS's
- buildCommands += "build.cmd ${lowerConfiguration} ${arch} linuxmscorlib"
- buildCommands += "build.cmd ${lowerConfiguration} ${arch} freebsdmscorlib"
- buildCommands += "build.cmd ${lowerConfiguration} ${arch} osxmscorlib"
-
- // Zip up the tests directory so that we don't use so much space/time copying
- // 10s of thousands of files around.
- buildCommands += "powershell -Command \"Add-Type -Assembly 'System.IO.Compression.FileSystem'; [System.IO.Compression.ZipFile]::CreateFromDirectory('.\\bin\\tests\\${osGroup}.${arch}.${configuration}', '.\\bin\\tests\\tests.zip')\"";
-
- if (!Constants.jitStressModeScenarios.containsKey(scenario) && scenario != 'jitdiff') {
- // For windows, pull full test results and test drops for x86/x64.
- // No need to pull for stress mode scenarios (downstream builds use the default scenario)
- Utilities.addArchival(newJob, "bin/Product/**,bin/tests/tests.zip")
- }
-
- if (scenario == 'jitdiff') {
- // retrive jit-dasm output for base commit, and run jit-diff
- if (!isBuildOnly) {
- // if this is a build only job, we want to keep the default (build) artifacts for the flow job
- Utilities.addArchival(newJob, "bin/tests/${osGroup}.${arch}.${configuration}/dasm/**")
- }
- }
-
- if (!isBuildOnly) {
- if (architecture == 'x64' || !isPR) {
- Utilities.addXUnitDotNETResults(newJob, 'bin/**/TestRun*.xml')
- }
- setTestJobTimeOut(newJob, scenario)
- }
- }
- else {
- // Archive only result xml files since corefx/bin/tests is very large around 10 GB.
- // For windows, pull full test results and test drops for x86/x64
- Utilities.addArchival(newJob, "fx/bin/tests/**/testResults.xml")
-
- // Set timeout
- setTestJobTimeOut(newJob, scenario)
-
- if (architecture == 'x64' || !isPR) {
- Utilities.addXUnitDotNETResults(newJob, 'fx/bin/tests/**/testResults.xml')
- }
- }
-
- break
- case 'arm':
- assert (scenario == 'default')
-
- // Set time out
- setTestJobTimeOut(newJob, scenario)
-
- if ( lowerConfiguration == "debug" ) {
- // For Debug builds, we will do a P1 test build
- buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture} -priority=1"
- }
- else {
- buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture}"
- }
- // Add archival.
- Utilities.addArchival(newJob, "bin/Product/**")
- break
- case 'arm64':
- assert (scenario == 'default') || (scenario == 'pri1r2r') || (scenario == 'gcstress0x3') || (scenario == 'gcstress0xc')
- // Set time out
- setTestJobTimeOut(newJob, scenario)
-
- // Debug runs take too long to run. So build job only.
- if (lowerConfiguration == "debug") {
- buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture} toolset_dir C:\\ats2"
- }
- else {
- buildCommands += "set __TestIntermediateDir=int&&build.cmd skiptests ${lowerConfiguration} ${architecture} toolset_dir C:\\ats2"
- // Test build and run are launched together.
- buildCommands += "python tests\\scripts\\arm64_post_build.py -repo_root %WORKSPACE% -arch ${architecture} -build_type ${lowerConfiguration} -scenario ${scenario} -key_location C:\\tools\\key.txt"
- //Utilities.addXUnitDotNETResults(newJob, 'bin/tests/testResults.xml')
- }
-
- // Add archival.
- Utilities.addArchival(newJob, "bin/Product/**")
- break
- default:
- println("Unknown architecture: ${architecture}");
- assert false
- break
- }
- break
- // editor brace matching: }
- case 'Ubuntu':
- case 'Ubuntu16.04':
- case 'Ubuntu16.10':
- case 'Debian8.4':
- case 'OSX':
- case 'FreeBSD':
- case 'CentOS7.1':
- case 'RHEL7.2':
- case 'OpenSUSE13.2':
- case 'OpenSUSE42.1':
- case 'Fedora23': // editor brace matching: {
- switch (architecture) {
- case 'x64':
- case 'x86':
- case 'x86compatjit':
- case 'x86lb':
- def arch = architecture
- if (architecture == 'x86compatjit' || architecture == 'x86lb') {
- arch = 'x86'
- }
-
- if (scenario == 'formatting') {
- buildCommands += "python tests/scripts/format.py -c \${WORKSPACE} -o Linux -a ${arch}"
- Utilities.addArchival(newJob, "format.patch", "", true, false)
- break
- }
-
- if (!enableCorefxTesting) {
- // We run pal tests on all OS but generate mscorlib (and thus, nuget packages)
- // only on supported OS platforms.
- if ((os == 'FreeBSD') || (os == 'OpenSUSE13.2'))
- {
- buildCommands += "./build.sh skipmscorlib verbose ${lowerConfiguration} ${arch}"
- }
- else
- {
- def bootstrapRid = Utilities.getBoostrapPublishRid(os)
- def bootstrapRidEnv = bootstrapRid != null ? "__PUBLISH_RID=${bootstrapRid} " : ''
- buildCommands += "${bootstrapRidEnv}./build.sh verbose ${lowerConfiguration} ${arch}"
- }
- buildCommands += "src/pal/tests/palsuite/runpaltests.sh \${WORKSPACE}/bin/obj/${osGroup}.${arch}.${configuration} \${WORKSPACE}/bin/paltestout"
-
- // Set time out
- setTestJobTimeOut(newJob, scenario)
- // Basic archiving of the build
- Utilities.addArchival(newJob, "bin/Product/**,bin/obj/*/tests/**/*.dylib,bin/obj/*/tests/**/*.so")
- // And pal tests
- Utilities.addXUnitDotNETResults(newJob, '**/pal_tests.xml')
- }
- else {
- // Corefx stress testing
- assert os == 'Ubuntu'
- assert architecture == 'x64'
- assert lowerConfiguration == 'checked'
-
- // Build coreclr and move it to clr directory
- buildCommands += "./build.sh verbose ${lowerConfiguration} ${architecture}"
- buildCommands += "rm -rf .clr; mkdir .clr; mv * .clr; mv .git .clr; mv .clr clr"
-
- // Get corefx
- buildCommands += "git clone -b $branch --single-branch https://github.com/dotnet/corefx fx"
-
- // Set environment variable
- def setEnvVar = getStressModeEnvSetCmd(os, scenario)
-
- // Build and text corefx
- buildCommands += "rm -rf \$WORKSPACE/fx_home; mkdir \$WORKSPACE/fx_home"
- buildCommands += setEnvVar
- buildCommands += "cd fx; export HOME=\$WORKSPACE/fx_home; ./build.sh -Release -Outerloop -TestWithLocalLibraries -- /p:BUILDTOOLS_OVERRIDE_RUNTIME=\$WORKSPACE/clr/bin/Product/Linux.x64.Checked"
-
- // Archive and process test result
- Utilities.addArchival(newJob, "fx/bin/tests/**/testResults.xml")
- setTestJobTimeOut(newJob, scenario)
- Utilities.addXUnitDotNETResults(newJob, 'fx/bin/tests/**/testResults.xml')
- }
- break
- case 'arm64':
- // We don't run the cross build except on Ubuntu
- assert os == 'Ubuntu'
-
- buildCommands += """echo \"Using rootfs in /opt/aarch64-linux-gnu-root\"
- ROOTFS_DIR=/opt/aarch64-linux-gnu-root ./build.sh skipmscorlib arm64 cross verbose ${lowerConfiguration}"""
-
- // Basic archiving of the build, no pal tests
- Utilities.addArchival(newJob, "bin/Product/**")
- break
- case 'arm':
- // All builds for ARM architecture are run on Ubuntu currently
- assert os == 'Ubuntu'
- if (isLinuxEmulatorBuild == false) {
- buildCommands += """echo \"Using rootfs in /opt/arm-liux-genueabihf-root\"
- ROOTFS_DIR=/opt/arm-linux-genueabihf-root ./build.sh skipmscorlib arm cross verbose ${lowerConfiguration}"""
-
- // Basic archiving of the build, no pal tests
- Utilities.addArchival(newJob, "bin/Product/**")
- break
- }
- else {
- // Make sure the build configuration is either of debug or release
- assert ( lowerConfiguration == 'debug' ) || ( lowerConfiguration == 'release' )
-
- // Setup variables to hold emulator folder path and the rootfs mount path
- def armemul_path = '/opt/linux-arm-emulator'
- def armrootfs_mountpath = '/opt/linux-arm-emulator-root'
-
- // Unzip the Windows test binaries first. Exit with 0
- buildCommands += "unzip -q -o ./bin/tests/tests.zip -d ./bin/tests/Windows_NT.x64.${configuration} || exit 0"
-
- // Unpack the corefx binaries
- buildCommands += "tar -xf ./bin/build.tar.gz"
-
- // Call the ARM emulator build script to cross build and test using the ARM emulator rootfs
- buildCommands += """./tests/scripts/arm32_ci_script.sh \\
- --emulatorPath=${armemul_path} \\
- --mountPath=${armrootfs_mountpath} \\
- --buildConfig=${lowerConfiguration} \\
- --testRootDir=./bin/tests/Windows_NT.x64.${configuration} \\
- --coreFxNativeBinDir=./bin/Linux.arm-softfp.${configuration} \\
- --coreFxBinDir=\"./bin/Linux.AnyCPU.${configuration};./bin/Unix.AnyCPU.${configuration};./bin/AnyOS.AnyCPU.${configuration}\" \\
- --testDirFile=./tests/testsRunningInsideARM.txt"""
-
-
- // Basic archiving of the build
- Utilities.addArchival(newJob, "bin/Product/**")
- break
- }
- default:
- println("Unknown architecture: ${architecture}");
- assert false
- break
- }
- break
- // editor brace matching: }
- default:
- println("Unknown os: ${os}");
- assert false
- break
- } // os
newJob.with {
steps {
@@ -2479,7 +2538,7 @@ combinedScenarios.each { scenario ->
return
}
//Skip stress modes for these scenarios
- if (os == 'RHEL7.2' || os == 'Debian8.4' || os == 'OpenSUSE13.2') {
+ if (os == 'RHEL7.2' || os == 'Debian8.4') {
return
}
}
@@ -2501,8 +2560,8 @@ combinedScenarios.each { scenario ->
return
}
}
- // For RedHat, Debian, and OpenSUSE, we only do Release pri1 builds.
- else if (os == 'RHEL7.2' || os == 'Debian8.4' || os == 'OpenSUSE13.2') {
+ // For RedHat and Debian, we only do Release pri1 builds.
+ else if (os == 'RHEL7.2' || os == 'Debian8.4') {
if (scenario != 'pri1') {
return
}
@@ -2788,8 +2847,7 @@ combinedScenarios.each { scenario ->
--testNativeBinDir=\"\$(pwd)/clr/bin/obj/${osGroup}.${architecture}.${configuration}/tests\" \\
--coreClrBinDir=\"\$(pwd)/clr/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
--mscorlibDir=\"\$(pwd)/clr/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
- --coreFxBinDir=\"\$(pwd)/fx/bin/${osGroup}.AnyCPU.Release;\$(pwd)/fx/bin/Unix.AnyCPU.Release;\$(pwd)/fx/bin/AnyOS.AnyCPU.Release\" \\
- --coreFxNativeBinDir=\"\$(pwd)/fx/bin/${osGroup}.${architecture}.Release\" \\
+ --coreFxBinDir=\"\$(pwd)/fx/bin/runtime/netcoreapp-${osGroup}-Release-${architecture}\" \\
--crossgen --runcrossgentests""")
// Run coreclr tests w/ server GC & HeapVerify enabled
@@ -2832,8 +2890,9 @@ combinedScenarios.each { scenario ->
}
}
+ shell ("mkdir ./bin/CoreFxBinDir")
// Unpack the corefx binaries
- shell("tar -xf ./bin/build.tar.gz")
+ shell("tar -xf ./bin/build.tar.gz -C ./bin/CoreFxBinDir")
// Unzip the tests first. Exit with 0
shell("unzip -q -o ./bin/tests/tests.zip -d ./bin/tests/Windows_NT.${architecture}.${configuration} || exit 0")
@@ -2844,10 +2903,8 @@ combinedScenarios.each { scenario ->
if (Constants.jitStressModeScenarios.containsKey(scenario)) {
def scriptFileName = "\$WORKSPACE/set_stress_test_env.sh"
def createScriptCmds = genStressModeScriptStep(os, scenario, Constants.jitStressModeScenarios[scenario], scriptFileName)
- if (createScriptCmds != "") {
- shell("${createScriptCmds}")
- testEnvOpt = "--test-env=" + scriptFileName
- }
+ shell("${createScriptCmds}")
+ testEnvOpt = "--test-env=" + scriptFileName
}
if (isGCStressRelatedTesting(scenario)) {
@@ -2859,8 +2916,7 @@ combinedScenarios.each { scenario ->
--testNativeBinDir=\"\${WORKSPACE}/bin/obj/${osGroup}.${architecture}.${configuration}/tests\" \\
--coreClrBinDir=\"\${WORKSPACE}/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
--mscorlibDir=\"\${WORKSPACE}/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
- --coreFxBinDir=\"\${WORKSPACE}/bin/${osGroup}.AnyCPU.Release;\${WORKSPACE}/bin/Unix.AnyCPU.Release;\${WORKSPACE}/bin/AnyOS.AnyCPU.Release\" \\
- --coreFxNativeBinDir=\"\${WORKSPACE}/bin/${osGroup}.${architecture}.Release\" \\
+ --coreFxBinDir=\"\${WORKSPACE}/bin/CoreFxBinDir\" \\
--limitedDumpGeneration \\
${testEnvOpt} ${serverGCString} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${sequentialString} ${playlistString}""")
}
diff --git a/perf.groovy b/perf.groovy
index d7eb783cb9..1eb9f19525 100644
--- a/perf.groovy
+++ b/perf.groovy
@@ -27,8 +27,8 @@ def static getOSGroup(def os) {
// Setup perflab tests runs
[true, false].each { isPR ->
['Windows_NT'].each { os ->
- ['x64'].each { architecture ->
- def newJob = job(Utilities.getFullJobName(project, "perf_perflab_${os}", isPR)) {
+ ['x64', 'x86'].each { architecture ->
+ def newJob = job(Utilities.getFullJobName(project, "perf_perflab_${os}_${architecture}", isPR)) {
// Set the label.
label('windows_clr_perf')
wrappers {
@@ -41,7 +41,7 @@ def static getOSGroup(def os) {
{
parameters
{
- stringParam('BenchviewCommitName', '%ghprbPullTitle%', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form <branch> private BenchviewCommitName')
+ stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form <branch> private BenchviewCommitName')
}
}
def configuration = 'Release'
@@ -76,9 +76,9 @@ def static getOSGroup(def os) {
if (isPR) {
TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest()
- builder.setGithubContext("${os} CoreCLR Perf Tests")
+ builder.setGithubContext("${os} ${architecture} CoreCLR Perf Tests")
builder.triggerOnlyOnComment()
- builder.setCustomTriggerPhrase("(?i).*test\\W+${os}\\W+perf.*")
+ builder.setCustomTriggerPhrase("(?i).*test\\W+${os}_${architecture}\\W+perf.*")
builder.triggerForBranch(branch)
builder.emitTrigger(newJob)
}
@@ -107,7 +107,7 @@ def static getOSGroup(def os) {
{
parameters
{
- stringParam('BenchviewCommitName', '\$ghprbPullTitle', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form <branch> private BenchviewCommitName')
+ stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form <branch> private BenchviewCommitName')
}
}
def osGroup = getOSGroup(os)
@@ -128,8 +128,7 @@ def static getOSGroup(def os) {
--testNativeBinDir=\"\${WORKSPACE}/bin/obj/${osGroup}.${architecture}.${configuration}/tests\" \\
--coreClrBinDir=\"\${WORKSPACE}/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
--mscorlibDir=\"\${WORKSPACE}/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
- --coreFxBinDir=\"\${WORKSPACE}/corefx/bin/${osGroup}.AnyCPU.${configuration};\${WORKSPACE}/corefx/bin/Unix.AnyCPU.${configuration};\${WORKSPACE}/corefx/bin/AnyOS.AnyCPU.${configuration}\" \\
- --coreFxNativeBinDir=\"\${WORKSPACE}/corefx/bin/${osGroup}.${architecture}.${configuration}\" \\
+ --coreFxBinDir=\"\${WORKSPACE}/corefx\" \\
--runType=\"${runType}\" \\
--benchViewOS=\"${os}\" \\
--uploadToBenchview""")
diff --git a/src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.builds b/src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.builds
index e568ca57f5..f84ccd07c8 100644
--- a/src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.builds
+++ b/src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.builds
@@ -35,6 +35,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'debian.8-armel'" Include="debian/Microsoft.NETCore.ILAsm.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'fedora.23-x64'" Include="fedora/23/Microsoft.NETCore.ILAsm.pkgproj">
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
@@ -79,6 +83,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'tizen.4.0.0-armel'" Include="tizen/4.0.0/Microsoft.NETCore.ILAsm.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsOSX)' == 'true'" Include="osx/Microsoft.NETCore.ILAsm.pkgproj">
<OSGroup>OSX</OSGroup>
<Platform>amd64</Platform>
diff --git a/src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.pkgproj b/src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.pkgproj
index c0b2134610..4a5b1ad584 100644
--- a/src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.ILAsm/Microsoft.NETCore.ILAsm.pkgproj
@@ -4,7 +4,7 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<SkipValidatePackage>true</SkipValidatePackage>
- <PackagePlatforms>x64;x86;arm64;arm;</PackagePlatforms>
+ <PackagePlatforms>x64;x86;arm64;arm;armel;</PackagePlatforms>
<OutputPath>$(PackagesOutputPath)</OutputPath>
<IncludeRuntimeJson>true</IncludeRuntimeJson>
</PropertyGroup>
@@ -28,6 +28,9 @@
<ProjectReference Include="debian\Microsoft.NETCore.ILAsm.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="debian\Microsoft.NETCore.ILAsm.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="fedora\23\Microsoft.NETCore.ILAsm.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
@@ -61,6 +64,9 @@
<ProjectReference Include="alpine\3.4.3\Microsoft.NETCore.ILAsm.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="tizen\4.0.0\Microsoft.NETCore.ILAsm.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="osx\Microsoft.NETCore.ILAsm.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
diff --git a/src/.nuget/Microsoft.NETCore.ILAsm/debian/Microsoft.NETCore.ILAsm.pkgproj b/src/.nuget/Microsoft.NETCore.ILAsm/debian/Microsoft.NETCore.ILAsm.pkgproj
index f821897b4f..99c782c01d 100644
--- a/src/.nuget/Microsoft.NETCore.ILAsm/debian/Microsoft.NETCore.ILAsm.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.ILAsm/debian/Microsoft.NETCore.ILAsm.pkgproj
@@ -4,8 +4,8 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<PackageTargetRuntime>debian.8-$(PackagePlatform)</PackageTargetRuntime>
- <!-- only build for x64 -->
- <PackagePlatforms>x64;</PackagePlatforms>
+ <!-- build for x64, armel -->
+ <PackagePlatforms>x64;armel;</PackagePlatforms>
</PropertyGroup>
<ItemGroup>
<NativeSplittableBinary Include="$(BinDir)ilasm" />
@@ -26,4 +26,4 @@
</File>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project> \ No newline at end of file
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.ILAsm/tizen/4.0.0/Microsoft.NETCore.ILAsm.pkgproj b/src/.nuget/Microsoft.NETCore.ILAsm/tizen/4.0.0/Microsoft.NETCore.ILAsm.pkgproj
new file mode 100644
index 0000000000..1d235b6f59
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.ILAsm/tizen/4.0.0/Microsoft.NETCore.ILAsm.pkgproj
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>tizen.4.0.0-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for armel -->
+ <PackagePlatforms>armel;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeSplittableBinary Include="$(BinDir)ilasm" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.builds b/src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.builds
index 5939fdaf6e..b312b3bc99 100644
--- a/src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.builds
+++ b/src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.builds
@@ -35,6 +35,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'debian.8-armel'" Include="debian/Microsoft.NETCore.ILDAsm.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'fedora.23-x64'" Include="fedora/23/Microsoft.NETCore.ILDAsm.pkgproj">
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
@@ -79,6 +83,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'tizen.4.0.0-armel'" Include="tizen/4.0.0/Microsoft.NETCore.ILDAsm.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsOSX)' == 'true'" Include="osx/Microsoft.NETCore.ILDAsm.pkgproj">
<OSGroup>OSX</OSGroup>
<Platform>amd64</Platform>
diff --git a/src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.pkgproj b/src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.pkgproj
index 47683ef0a3..cdfee45ce4 100644
--- a/src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.ILDAsm/Microsoft.NETCore.ILDAsm.pkgproj
@@ -4,7 +4,7 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<SkipValidatePackage>true</SkipValidatePackage>
- <PackagePlatforms>x64;x86;arm64;arm;</PackagePlatforms>
+ <PackagePlatforms>x64;x86;arm64;arm;armel;</PackagePlatforms>
<OutputPath>$(PackagesOutputPath)</OutputPath>
<IncludeRuntimeJson>true</IncludeRuntimeJson>
</PropertyGroup>
@@ -28,6 +28,9 @@
<ProjectReference Include="debian\Microsoft.NETCore.ILDAsm.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="debian\Microsoft.NETCore.ILDAsm.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="fedora\23\Microsoft.NETCore.ILDAsm.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
@@ -61,6 +64,9 @@
<ProjectReference Include="alpine\3.4.3\Microsoft.NETCore.ILDAsm.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="tizen\4.0.0\Microsoft.NETCore.ILDAsm.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="osx\Microsoft.NETCore.ILDAsm.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
diff --git a/src/.nuget/Microsoft.NETCore.ILDAsm/debian/Microsoft.NETCore.ILDAsm.pkgproj b/src/.nuget/Microsoft.NETCore.ILDAsm/debian/Microsoft.NETCore.ILDAsm.pkgproj
index af9d384ae1..f73e785d4b 100644
--- a/src/.nuget/Microsoft.NETCore.ILDAsm/debian/Microsoft.NETCore.ILDAsm.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.ILDAsm/debian/Microsoft.NETCore.ILDAsm.pkgproj
@@ -4,8 +4,8 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<PackageTargetRuntime>debian.8-$(PackagePlatform)</PackageTargetRuntime>
- <!-- only build for x64 -->
- <PackagePlatforms>x64;</PackagePlatforms>
+ <!-- build for x64, armel -->
+ <PackagePlatforms>x64;armel;</PackagePlatforms>
</PropertyGroup>
<ItemGroup>
<NativeSplittableBinary Include="$(BinDir)ildasm" />
@@ -26,4 +26,4 @@
</File>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project> \ No newline at end of file
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.ILDAsm/tizen/4.0.0/Microsoft.NETCore.ILDAsm.pkgproj b/src/.nuget/Microsoft.NETCore.ILDAsm/tizen/4.0.0/Microsoft.NETCore.ILDAsm.pkgproj
new file mode 100644
index 0000000000..9ede1eb2e4
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.ILDAsm/tizen/4.0.0/Microsoft.NETCore.ILDAsm.pkgproj
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>tizen.4.0.0-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for armel -->
+ <PackagePlatforms>armel;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeSplittableBinary Include="$(BinDir)ildasm" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.builds b/src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.builds
index 61c690ebb1..5f75a74196 100644
--- a/src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.builds
+++ b/src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.builds
@@ -35,6 +35,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'debian.8-armel'" Include="debian/Microsoft.NETCore.Jit.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'fedora.23-x64'" Include="fedora/23/Microsoft.NETCore.Jit.pkgproj">
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
@@ -79,6 +83,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'tizen.4.0.0-armel'" Include="tizen/4.0.0/Microsoft.NETCore.Jit.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsOSX)' == 'true'" Include="osx/Microsoft.NETCore.Jit.pkgproj">
<OSGroup>OSX</OSGroup>
<Platform>amd64</Platform>
diff --git a/src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.pkgproj b/src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.pkgproj
index bcd4e4232f..dd39f77b2b 100644
--- a/src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.Jit/Microsoft.NETCore.Jit.pkgproj
@@ -4,7 +4,7 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<SkipValidatePackage>true</SkipValidatePackage>
- <PackagePlatforms>x64;x86;arm64;arm;</PackagePlatforms>
+ <PackagePlatforms>x64;x86;arm64;arm;armel;</PackagePlatforms>
<OutputPath>$(PackagesOutputPath)</OutputPath>
<IncludeRuntimeJson>true</IncludeRuntimeJson>
</PropertyGroup>
@@ -27,6 +27,9 @@
<ProjectReference Include="debian\Microsoft.NETCore.Jit.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="debian\Microsoft.NETCore.Jit.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="fedora\23\Microsoft.NETCore.Jit.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
@@ -60,6 +63,9 @@
<ProjectReference Include="alpine\3.4.3\Microsoft.NETCore.Jit.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="tizen\4.0.0\Microsoft.NETCore.Jit.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="osx\Microsoft.NETCore.Jit.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
diff --git a/src/.nuget/Microsoft.NETCore.Jit/debian/Microsoft.NETCore.Jit.pkgproj b/src/.nuget/Microsoft.NETCore.Jit/debian/Microsoft.NETCore.Jit.pkgproj
index 9d6043e465..db2a57c8c7 100644
--- a/src/.nuget/Microsoft.NETCore.Jit/debian/Microsoft.NETCore.Jit.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.Jit/debian/Microsoft.NETCore.Jit.pkgproj
@@ -4,8 +4,8 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<PackageTargetRuntime>debian.8-$(PackagePlatform)</PackageTargetRuntime>
- <!-- only build for x64 -->
- <PackagePlatforms>x64;</PackagePlatforms>
+ <!-- build for x64, armel -->
+ <PackagePlatforms>x64;armel;</PackagePlatforms>
</PropertyGroup>
<ItemGroup>
<NativeSplittableBinary Include="$(BinDir)libclrjit.so" />
@@ -26,4 +26,4 @@
</File>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project> \ No newline at end of file
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Jit/tizen/4.0.0/Microsoft.NETCore.Jit.pkgproj b/src/.nuget/Microsoft.NETCore.Jit/tizen/4.0.0/Microsoft.NETCore.Jit.pkgproj
new file mode 100644
index 0000000000..f2eaa55f3c
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Jit/tizen/4.0.0/Microsoft.NETCore.Jit.pkgproj
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>tizen.4.0.0-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for armel -->
+ <PackagePlatforms>armel;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeSplittableBinary Include="$(BinDir)libclrjit.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/Microsoft.NETCore.Native.builds b/src/.nuget/Microsoft.NETCore.Native/Microsoft.NETCore.Native.builds
new file mode 100644
index 0000000000..a178ddb961
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/Microsoft.NETCore.Native.builds
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+
+ <PropertyGroup>
+ <!-- This property must be set to the same value as $(PackageOutputPath) for the nuspecs and nupkgs to be binplaced to the intended location. -->
+ <OutputPath>$(PackageOutputPath)</OutputPath>
+ </PropertyGroup>
+
+ <!-- We always build the identity/redirection package. However, the platform specific runtime-*.nupkg is built based upon the target OS we are building the product for. -->
+ <ItemGroup>
+ <Project Include="Microsoft.NETCore.Native.pkgproj">
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'linux-x64'" Include="linux/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'debian.8-x64'" Include="debian/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'fedora.23-x64'" Include="fedora/23/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'fedora.24-x64'" Include="fedora/24/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'opensuse.13.2-x64'" Include="opensuse/13.2/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'opensuse.42.1-x64'" Include="opensuse/42.1/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and $(DistroRid.StartsWith('rhel.7'))" Include="rhel/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'ubuntu.14.04-x64'" Include="ubuntu/14.04/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'ubuntu.16.04-x64'" Include="ubuntu/16.04/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'ubuntu.16.10-x64'" Include="ubuntu/16.10/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'alpine.3.4.3-x64'" Include="alpine/3.4.3/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ <Project Condition="'$(TargetsOSX)' == 'true'" Include="osx/Microsoft.NETCore.Native.pkgproj">
+ <OSGroup>OSX</OSGroup>
+ <Platform>amd64</Platform>
+ </Project>
+ </ItemGroup>
+
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..51b524a1c8
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <SkipValidatePackage>true</SkipValidatePackage>
+ <PackagePlatforms>x64;x86;arm64;arm;</PackagePlatforms>
+ <OutputPath>$(PackagesOutputPath)</OutputPath>
+ <IncludeRuntimeJson>true</IncludeRuntimeJson>
+ </PropertyGroup>
+ <ItemGroup>
+ <ProjectReference Include="linux\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="debian\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="fedora\23\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="fedora\24\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="opensuse\13.2\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="opensuse\42.1\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="rhel\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="ubuntu\14.04\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="ubuntu\16.04\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="ubuntu\16.10\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="alpine\3.4.3\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ <ProjectReference Include="osx\Microsoft.NETCore.Native.pkgproj">
+ <Platform>amd64</Platform>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/alpine/3.4.3/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/alpine/3.4.3/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..90545a9001
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/alpine/3.4.3/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>alpine.3.4.3-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/debian/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/debian/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..c136a2c057
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/debian/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>debian.8-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/fedora/23/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/fedora/23/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..8547114cdd
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/fedora/23/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>fedora.23-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/fedora/24/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/fedora/24/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..f4987de01d
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/fedora/24/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>fedora.24-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/linux/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/linux/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..8b1064f081
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/linux/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>linux-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/opensuse/13.2/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/opensuse/13.2/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..bf8307a0b3
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/opensuse/13.2/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>opensuse.13.2-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/opensuse/42.1/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/opensuse/42.1/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..19ac91cd88
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/opensuse/42.1/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>opensuse.42.1-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/osx/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/osx/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..b358c86799
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/osx/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>osx.10.10-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.dylib" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dwarf')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dwarf" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dylib" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/rhel/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/rhel/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..f9dc309a6b
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/rhel/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>rhel.7-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/ubuntu/14.04/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/ubuntu/14.04/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..d1c5be74ff
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/ubuntu/14.04/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>ubuntu.14.04-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/ubuntu/16.04/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/ubuntu/16.04/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..b2b0f96587
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/ubuntu/16.04/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>ubuntu.16.04-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Native/ubuntu/16.10/Microsoft.NETCore.Native.pkgproj b/src/.nuget/Microsoft.NETCore.Native/ubuntu/16.10/Microsoft.NETCore.Native.pkgproj
new file mode 100644
index 0000000000..da4a03d668
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Native/ubuntu/16.10/Microsoft.NETCore.Native.pkgproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>ubuntu.16.10-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for x64 -->
+ <PackagePlatforms>x64;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeBinary Include="$(BinDir)libSystem.Globalization.Native.a" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile);@(NativeBinary)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.builds b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.builds
index c7bfdc3b04..99bbbef6a1 100644
--- a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.builds
+++ b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.builds
@@ -34,6 +34,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'debian.8-armel'" Include="debian/Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'fedora.23-x64'" Include="fedora/23/Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
@@ -78,6 +82,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'tizen.4.0.0-armel'" Include="tizen/4.0.0/Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsOSX)' == 'true'" Include="osx/Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
<OSGroup>OSX</OSGroup>
<Platform>amd64</Platform>
diff --git a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.pkgproj b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
index a1405d5fff..bc4b86242b 100644
--- a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
@@ -4,7 +4,7 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<SkipValidatePackage>true</SkipValidatePackage>
- <PackagePlatforms>x64;x86;arm64;arm;</PackagePlatforms>
+ <PackagePlatforms>x64;x86;arm64;arm;armel;</PackagePlatforms>
<OutputPath>$(PackagesOutputPath)</OutputPath>
<IncludeRuntimeJson>true</IncludeRuntimeJson>
</PropertyGroup>
@@ -28,6 +28,9 @@
<ProjectReference Include="debian\Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="debian\Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="fedora\23\Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
@@ -61,6 +64,9 @@
<ProjectReference Include="alpine\3.4.3\Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="tizen\4.0.0\Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="osx\Microsoft.NETCore.Runtime.CoreCLR.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
diff --git a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/debian/Microsoft.NETCore.Runtime.CoreCLR.pkgproj b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/debian/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
index 4f95c2550f..f982188fb3 100644
--- a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/debian/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/debian/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
@@ -4,12 +4,12 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<PackageTargetRuntime>debian.8-$(PackagePlatform)</PackageTargetRuntime>
- <!-- only build for x64 -->
- <PackagePlatforms>x64;</PackagePlatforms>
+ <!-- build for x64, armel -->
+ <PackagePlatforms>x64;armel;</PackagePlatforms>
</PropertyGroup>
<ItemGroup>
<NativeSplittableBinary Include="$(BinDir)libcoreclr.so" />
- <NativeSplittableBinary Include="$(BinDir)libcoreclrtraceptprovider.so" />
+ <NativeSplittableBinary Condition="'$(PackagePlatform)' != 'armel'" Include="$(BinDir)libcoreclrtraceptprovider.so" />
<NativeSplittableBinary Include="$(BinDir)libdbgshim.so" />
<NativeSplittableBinary Include="$(BinDir)libmscordaccore.so" />
<NativeSplittableBinary Include="$(BinDir)libmscordbi.so" />
@@ -17,8 +17,8 @@
<NativeSplittableBinary Include="$(BinDir)libsosplugin.so" />
<NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
<ArchitectureSpecificNativeFile Include="$(BinDir)sosdocsunix.txt" />
- <ArchitectureSpecificNativeFile Include="$(BinDir)mscorlib.ni.dll" />
- <ArchitectureSpecificNativeFile Include="$(BinDir)System.Private.CoreLib.ni.dll" />
+ <ArchitectureSpecificNativeFile Condition="'$(PackagePlatform)' != 'armel'" Include="$(BinDir)mscorlib.ni.dll" />
+ <ArchitectureSpecificNativeFile Condition="'$(PackagePlatform)' != 'armel'" Include="$(BinDir)System.Private.CoreLib.ni.dll" />
<ArchitectureSpecificLibFile Include="$(BinDir)mscorlib.dll" />
<ArchitectureSpecificLibFile Include="$(BinDir)System.Private.CoreLib.dll" />
<ArchitectureSpecificLibFile Include="$(BinDir)SOS.NETCore.dll" />
diff --git a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/tizen/4.0.0/Microsoft.NETCore.Runtime.CoreCLR.pkgproj b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/tizen/4.0.0/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
new file mode 100644
index 0000000000..dd2c46b077
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/tizen/4.0.0/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>tizen.4.0.0-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for armel -->
+ <PackagePlatforms>armel;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeSplittableBinary Include="$(BinDir)libcoreclr.so" />
+ <NativeSplittableBinary Include="$(BinDir)libdbgshim.so" />
+ <NativeSplittableBinary Include="$(BinDir)libmscordaccore.so" />
+ <NativeSplittableBinary Include="$(BinDir)libmscordbi.so" />
+ <NativeSplittableBinary Include="$(BinDir)libsos.so" />
+ <NativeSplittableBinary Include="$(BinDir)libsosplugin.so" />
+ <NativeSplittableBinary Include="$(BinDir)System.Globalization.Native.so" />
+ <ArchitectureSpecificNativeFile Include="$(BinDir)sosdocsunix.txt" />
+ <!-- cannot generate in build now
+ <ArchitectureSpecificNativeFile Include="$(BinDir)mscorlib.ni.dll" />
+ <ArchitectureSpecificNativeFile Include="$(BinDir)System.Private.CoreLib.ni.dll" />
+ -->
+ <ArchitectureSpecificLibFile Include="$(BinDir)mscorlib.dll" />
+ <ArchitectureSpecificLibFile Include="$(BinDir)System.Private.CoreLib.dll" />
+ <ArchitectureSpecificLibFile Include="$(BinDir)SOS.NETCore.dll" />
+ <ArchitectureSpecificToolFile Include="$(BinDir)crossgen" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ <!-- Using lib/netstandard1.0 here. There is no TFM for this since it is a runtime itself. -->
+ <File Include="@(ArchitectureSpecificLibFile)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/lib/netstandard1.0</TargetPath>
+ </File>
+ <!-- No reference: don't permit reference to the implementation from lib -->
+ <File Include="$(PlaceholderFile)">
+ <TargetPath>ref/netstandard1.0</TargetPath>
+ </File>
+ <File Include="@(ArchitectureSpecificToolFile)">
+ <TargetPath>tools</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\sosdocsunix.txt" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\crossgen" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.builds b/src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.builds
index c1d076fb0e..67b105ba76 100644
--- a/src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.builds
+++ b/src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.builds
@@ -35,6 +35,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'debian.8-armel'" Include="debian/Microsoft.NETCore.TestHost.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'fedora.23-x64'" Include="fedora/23/Microsoft.NETCore.TestHost.pkgproj">
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
@@ -79,6 +83,10 @@
<OSGroup>Linux</OSGroup>
<Platform>amd64</Platform>
</Project>
+ <Project Condition="'$(TargetsLinux)' == 'true' and '$(DistroRid)' == 'tizen.4.0.0-armel'" Include="tizen/4.0.0/Microsoft.NETCore.TestHost.pkgproj">
+ <OSGroup>Linux</OSGroup>
+ <Platform>armel</Platform>
+ </Project>
<Project Condition="'$(TargetsOSX)' == 'true'" Include="osx/Microsoft.NETCore.TestHost.pkgproj">
<OSGroup>OSX</OSGroup>
<Platform>amd64</Platform>
diff --git a/src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.pkgproj b/src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.pkgproj
index 325461d3ac..ee8f6a94c4 100644
--- a/src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.TestHost/Microsoft.NETCore.TestHost.pkgproj
@@ -4,7 +4,7 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<SkipValidatePackage>true</SkipValidatePackage>
- <PackagePlatforms>x64;x86;arm64;arm;</PackagePlatforms>
+ <PackagePlatforms>x64;x86;arm64;arm;armel;</PackagePlatforms>
<OutputPath>$(PackagesOutputPath)</OutputPath>
<IncludeRuntimeJson>true</IncludeRuntimeJson>
</PropertyGroup>
@@ -27,6 +27,9 @@
<ProjectReference Include="debian\Microsoft.NETCore.TestHost.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="debian\Microsoft.NETCore.TestHost.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="fedora\23\Microsoft.NETCore.TestHost.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
@@ -60,6 +63,9 @@
<ProjectReference Include="alpine\3.4.3\Microsoft.NETCore.TestHost.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
+ <ProjectReference Include="tizen\4.0.0\Microsoft.NETCore.TestHost.pkgproj">
+ <Platform>armel</Platform>
+ </ProjectReference>
<ProjectReference Include="osx\Microsoft.NETCore.TestHost.pkgproj">
<Platform>amd64</Platform>
</ProjectReference>
diff --git a/src/.nuget/Microsoft.NETCore.TestHost/debian/Microsoft.NETCore.TestHost.pkgproj b/src/.nuget/Microsoft.NETCore.TestHost/debian/Microsoft.NETCore.TestHost.pkgproj
index 045b2e7569..5d739bd58d 100644
--- a/src/.nuget/Microsoft.NETCore.TestHost/debian/Microsoft.NETCore.TestHost.pkgproj
+++ b/src/.nuget/Microsoft.NETCore.TestHost/debian/Microsoft.NETCore.TestHost.pkgproj
@@ -4,8 +4,8 @@
<PropertyGroup>
<SkipPackageFileCheck>true</SkipPackageFileCheck>
<PackageTargetRuntime>debian.8-$(PackagePlatform)</PackageTargetRuntime>
- <!-- only build for x64 -->
- <PackagePlatforms>x64;</PackagePlatforms>
+ <!-- build for x64, armel -->
+ <PackagePlatforms>x64;armel;</PackagePlatforms>
</PropertyGroup>
<ItemGroup>
<NativeSplittableBinary Include="$(BinDir)corerun" />
@@ -26,4 +26,4 @@
</File>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project> \ No newline at end of file
+</Project>
diff --git a/src/.nuget/Microsoft.NETCore.TestHost/tizen/4.0.0/Microsoft.NETCore.TestHost.pkgproj b/src/.nuget/Microsoft.NETCore.TestHost/tizen/4.0.0/Microsoft.NETCore.TestHost.pkgproj
new file mode 100644
index 0000000000..b7620b9806
--- /dev/null
+++ b/src/.nuget/Microsoft.NETCore.TestHost/tizen/4.0.0/Microsoft.NETCore.TestHost.pkgproj
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ <PackageTargetRuntime>tizen.4.0.0-$(PackagePlatform)</PackageTargetRuntime>
+ <!-- only build for armel -->
+ <PackagePlatforms>armel;</PackagePlatforms>
+ </PropertyGroup>
+ <ItemGroup>
+ <NativeSplittableBinary Include="$(BinDir)corerun" />
+ <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)" />
+ <File Include="@(ArchitectureSpecificNativeFile)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ </File>
+ </ItemGroup>
+ <ItemGroup Condition="'$(__BuildType)' == 'Release'">
+ <ArchitectureSpecificNativeSymbol Include="@(NativeSplittableBinary -> '%(Identity).dbg')" />
+ <AdditionalLibPackageExcludes Include="%2A%2A\%2A.dbg" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.so" />
+ <AdditionalSymbolPackageExcludes Include="%2A%2A\%2A.dll" />
+ <ArchitectureSpecificNativeSymbol Include="..\..\..\_.pdb" />
+ <File Include="@(ArchitectureSpecificNativeSymbol)">
+ <TargetPath>runtimes/$(PackageTargetRuntime)/native</TargetPath>
+ <IsSymbolFile>true</IsSymbolFile>
+ </File>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/src/.nuget/descriptions.json b/src/.nuget/descriptions.json
index 640ff0251f..a9038c0936 100644
--- a/src/.nuget/descriptions.json
+++ b/src/.nuget/descriptions.json
@@ -11,12 +11,12 @@
},
{
"Name": "Microsoft.NETCore.Runtime.CoreCLR",
- "Description": "The .NET Core runtime, called CoreCLR, and the base library, called mscorlib. It includes the garbage collector, JIT compiler, base .NET data types and many low-level classes.",
+ "Description": "The .NET Core runtime, called CoreCLR, and the base library, called System.Private.CoreLib. It includes the garbage collector, JIT compiler, base .NET data types and many low-level classes.",
"CommonTypes": [ ]
},
{
"Name": "Microsoft.TargetingPack.Private.CoreCLR",
- "Description": "Contains a private targeting pack which contains only the CoreCLR mscorlib reference assembly. Used for producing platform specific libraries such as facades.",
+ "Description": "Contains a private targeting pack which contains only the CoreCLR System.Private.CoreLib reference assembly. Used for producing platform specific libraries such as facades.",
"CommonTypes": [ ]
},
{
@@ -38,5 +38,10 @@
"Name": "Microsoft.NETCore.TestHost",
"Description": "CoreCLR application host for test applications",
"CommonTypes": [ ]
+ },
+ {
+ "Name": "Microsoft.NETCore.Native",
+ "Description": "Native shims for .NET Core runtime",
+ "CommonTypes": [ ]
}
]
diff --git a/src/.nuget/packages.builds b/src/.nuget/packages.builds
index 7458c8e56f..5d1d025100 100644
--- a/src/.nuget/packages.builds
+++ b/src/.nuget/packages.builds
@@ -18,6 +18,7 @@
<ItemGroup Condition="'$(__SkipNativeBuild)'==''">
<Project Include="Microsoft.NETCore.Jit\Microsoft.NETCore.Jit.builds" />
<Project Include="Microsoft.NETCore.TestHost\Microsoft.NETCore.TestHost.builds" />
+ <Project Include="Microsoft.NETCore.Native\Microsoft.NETCore.Native.builds" />
</ItemGroup>
<ItemGroup>
diff --git a/src/ToolBox/PdbTypeMatch/PdbTypeMatch.nativeproj b/src/ToolBox/PdbTypeMatch/PdbTypeMatch.nativeproj
deleted file mode 100644
index fb2f71b36c..0000000000
--- a/src/ToolBox/PdbTypeMatch/PdbTypeMatch.nativeproj
+++ /dev/null
@@ -1,59 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <PropertyGroup>
- <ClCallingConvention>cdecl</ClCallingConvention>
- <OutputName>pdbtypematch</OutputName>
- <OutputPath>$(IntermediateOutputPath)</OutputPath>
- <TargetType>PROGRAM</TargetType>
- <LinkSubsystem>console</LinkSubsystem>
- <EntryPoint>wmain</EntryPoint>
- <UseStl>true</UseStl>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>stdafx.cpp</PCHCompile>
- <PCHOutput>pdbtypematch.pch</PCHOutput>
- <LinkAdditionalOptions>$(LinkAdditionalOptions) /DYNAMICBASE /NXCOMPAT /ALLOWISOLATION</LinkAdditionalOptions>
- <CharacterSet>MultiByte</CharacterSet>
- <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <OutputPath>$(IntermediateOutputPath)</OutputPath>
- <UserIncludes>
- .;
- .\include;
- $(UserIncludes);
- </UserIncludes>
- <LinkUseCMT>true</LinkUseCMT>
- <UseMsvcrt>false</UseMsvcrt>
- <AlwaysUseReleaseLibCMT>true</AlwaysUseReleaseLibCMT>
- <!--
- This would build (cl.exe) with /MT switch instead of default /MTd. However it works either way, so we do not need it now.
- It might be handy if we ever use some debug-only CRT features by accident.
- <ClRuntimeLibrary>MultiThreaded</ClRuntimeLibrary>
- -->
-
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <TargetLib Include="$(SdkLibPath)\ole32.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\Shlwapi.lib" />
- <TargetLib Include="$(CrtLibPath)\comsupp.lib" />
- </ItemGroup>
- <ItemGroup>
- <Reference Include="DiaLib">
- <ProjectReference>$(ClrSrcDirectory)toolbox\sos\diasdk\diasdk.nativeproj</ProjectReference>
- <HintPath>$(ClrIntraLibPath)\DiaLib.dll</HintPath>
- </Reference>
- </ItemGroup>
- <ItemGroup>
- <CppCompile Include="PrintSymbol.cpp" />
- <CppCompile Include="regs.cpp" />
- <CppCompile Include="PdbTypeMatch.cpp" />
- </ItemGroup>
-
- <ItemGroup>
- <RCResourceFile Include="native.rc" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project> \ No newline at end of file
diff --git a/src/ToolBox/SOS/Strike/SOS.nativeproj b/src/ToolBox/SOS/Strike/SOS.nativeproj
deleted file mode 100644
index 4c0fc7616f..0000000000
--- a/src/ToolBox/SOS/Strike/SOS.nativeproj
+++ /dev/null
@@ -1,7 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetHostLocal.props"/>
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\toolbox\sos\strike\sos.targets" />
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- </PropertyGroup>
-</Project>
diff --git a/src/ToolBox/SOS/Strike/SOS.sln b/src/ToolBox/SOS/Strike/SOS.sln
deleted file mode 100644
index 08f4a64836..0000000000
--- a/src/ToolBox/SOS/Strike/SOS.sln
+++ /dev/null
@@ -1,76 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.31101.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SOS", "SOS.vcxproj", "{3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mscordacwks", "..\..\..\mscordacwks.vcproj", "{C5716445-C233-4491-85A4-31B75731DD95}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mscordbi", "..\..\..\mscordbi.vcproj", "{95A6AE03-EC45-4450-93DB-9B21890F79E7}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- amd64chk|Win32 = amd64chk|Win32
- amd64dbg|Win32 = amd64dbg|Win32
- amd64ret|Win32 = amd64ret|Win32
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- x86chk|Win32 = x86chk|Win32
- x86dbg|Win32 = x86dbg|Win32
- x86ret|Win32 = x86ret|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.amd64chk|Win32.ActiveCfg = amd64chk|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.amd64chk|Win32.Build.0 = amd64chk|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.amd64dbg|Win32.ActiveCfg = amd64dbg|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.amd64dbg|Win32.Build.0 = amd64dbg|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.amd64ret|Win32.ActiveCfg = amd64ret|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.amd64ret|Win32.Build.0 = amd64ret|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.Debug|Win32.ActiveCfg = x86chk|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.Debug|Win32.Build.0 = x86chk|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.Release|Win32.ActiveCfg = x86chk|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.Release|Win32.Build.0 = x86chk|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.x86chk|Win32.ActiveCfg = x86chk|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.x86chk|Win32.Build.0 = x86chk|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.x86dbg|Win32.ActiveCfg = x86dbg|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.x86dbg|Win32.Build.0 = x86dbg|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.x86ret|Win32.ActiveCfg = x86ret|Win32
- {3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}.x86ret|Win32.Build.0 = x86ret|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.amd64chk|Win32.ActiveCfg = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.amd64chk|Win32.Build.0 = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.amd64dbg|Win32.ActiveCfg = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.amd64dbg|Win32.Build.0 = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.amd64ret|Win32.ActiveCfg = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.amd64ret|Win32.Build.0 = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.Debug|Win32.ActiveCfg = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.Debug|Win32.Build.0 = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.Release|Win32.ActiveCfg = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.Release|Win32.Build.0 = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.x86chk|Win32.ActiveCfg = x86chk|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.x86chk|Win32.Build.0 = x86chk|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.x86dbg|Win32.ActiveCfg = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.x86dbg|Win32.Build.0 = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.x86ret|Win32.ActiveCfg = Debug|Win32
- {C5716445-C233-4491-85A4-31B75731DD95}.x86ret|Win32.Build.0 = Debug|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.amd64chk|Win32.ActiveCfg = amd64chk|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.amd64chk|Win32.Build.0 = amd64chk|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.amd64dbg|Win32.ActiveCfg = amd64dbg|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.amd64dbg|Win32.Build.0 = amd64dbg|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.amd64ret|Win32.ActiveCfg = amd64ret|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.amd64ret|Win32.Build.0 = amd64ret|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.Debug|Win32.ActiveCfg = x86chk|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.Debug|Win32.Build.0 = x86chk|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.Release|Win32.ActiveCfg = amd64ret|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.Release|Win32.Build.0 = amd64ret|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.x86chk|Win32.ActiveCfg = x86chk|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.x86chk|Win32.Build.0 = x86chk|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.x86dbg|Win32.ActiveCfg = x86dbg|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.x86dbg|Win32.Build.0 = x86dbg|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.x86ret|Win32.ActiveCfg = x86ret|Win32
- {95A6AE03-EC45-4450-93DB-9B21890F79E7}.x86ret|Win32.Build.0 = x86ret|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/src/ToolBox/SOS/Strike/SOS.vcproj b/src/ToolBox/SOS/Strike/SOS.vcproj
deleted file mode 100644
index aff5e7cc60..0000000000
--- a/src/ToolBox/SOS/Strike/SOS.vcproj
+++ /dev/null
@@ -1,303 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="SOS"
- ProjectGUID="{3941DEDB-8183-4F82-9193-5EC0D5B6D4A6}"
- Keyword="MakeFileProj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="x86chk|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /quickBuild=$(ProjectPath)/buildArch:x86/buildType:chk"
- ReBuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /buildArgs:-c/buildArch:x86/buildType:chk"
- CleanCommandLine=""
- Output="$(ProjectDir)\obj2c\i386\SOS.dll"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="inc\"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="x86dbg|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /quickBuild=$(ProjectPath)/buildArch:x86/buildType:dbg"
- ReBuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /buildArgs:-c/buildArch:x86/buildType:dbg"
- CleanCommandLine=""
- Output="$(ProjectDir)\obj2d\i386\SOS.dll"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="inc\"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="x86ret|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /quickBuild=$(ProjectPath)/buildArch:x86/buildType:ret"
- ReBuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /buildArgs:-c/buildArch:x86/buildType:ret"
- CleanCommandLine=""
- Output="$(ProjectDir)\obj2r\i386\SOS.dll"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="inc\"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="amd64chk|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /quickBuild=$(ProjectPath)/buildArch:amd64/buildType:chk"
- ReBuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /buildArgs:-c/buildArch:amd64/buildType:chk"
- CleanCommandLine=""
- Output="$(ProjectDir)\obj2c\amd64\SOS.dll"
- PreprocessorDefinitions="_AMD64_=1;_WIN64=1;_DEBUG=1"
- IncludeSearchPath="inc\"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="amd64dbg|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /quickBuild=$(ProjectPath)/buildArch:amd64/buildType:dbg"
- ReBuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /buildArgs:-c/buildArch:amd64/buildType:dbg"
- CleanCommandLine=""
- Output="$(ProjectDir)\obj2d\amd64\SOS.dll"
- PreprocessorDefinitions="_AMD64_=1;_WIN64=1"
- IncludeSearchPath="inc\"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="amd64ret|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /quickBuild=$(ProjectPath)/buildArch:amd64/buildType:ret"
- ReBuildCommandLine="$(ProjectDir)..\..\..\..\bin\runjs buildSOS /buildArgs:-c/buildArch:amd64/buildType:ret"
- CleanCommandLine=""
- Output="$(ProjectDir)\obj2r\amd64\SOS.dll"
- PreprocessorDefinitions="_AMD64_=1;_WIN64=1"
- IncludeSearchPath="inc\"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\data.h"
- >
- </File>
- <File
- RelativePath=".\inc\dbgeng.h"
- >
- </File>
- <File
- RelativePath=".\inc\dbghelp.h"
- >
- </File>
- <File
- RelativePath=".\disasm.h"
- >
- </File>
- <File
- RelativePath=".\exts.h"
- >
- </File>
- <File
- RelativePath=".\ntinfo.h"
- >
- </File>
- <File
- RelativePath=".\sos_md.h"
- >
- </File>
- <File
- RelativePath=".\sos_stacktrace.h"
- >
- </File>
- <File
- RelativePath=".\strike.h"
- >
- </File>
- <File
- RelativePath=".\symbol.h"
- >
- </File>
- <File
- RelativePath=".\util.h"
- >
- </File>
- <File
- RelativePath=".\UtilCode.h"
- >
- </File>
- <File
- RelativePath=".\inc\wdbgexts.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- <File
- RelativePath=".\Native.rc"
- >
- </File>
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\disasm.cpp"
- >
- </File>
- <File
- RelativePath=".\disasmIA64.cpp"
- >
- </File>
- <File
- RelativePath=".\disasmX86.cpp"
- >
- </File>
- <File
- RelativePath=".\dllsext.cpp"
- >
- </File>
- <File
- RelativePath=".\eeheap.cpp"
- >
- </File>
- <File
- RelativePath=".\exts.cpp"
- >
- </File>
- <File
- RelativePath=".\gchist.cpp"
- >
- </File>
- <File
- RelativePath=".\gcroot.cpp"
- >
- </File>
- <File
- RelativePath=".\metadata.cpp"
- >
- </File>
- <File
- RelativePath=".\sildasm.cpp"
- >
- </File>
- <File
- RelativePath=".\sos.cpp"
- >
- </File>
- <File
- RelativePath=".\sos.def"
- >
- </File>
- <File
- RelativePath=".\sos.h"
- >
- </File>
- <File
- RelativePath=".\stressLogDump.cpp"
- >
- </File>
- <File
- RelativePath=".\strike.cpp"
- >
- </File>
- <File
- RelativePath=".\util.cpp"
- >
- </File>
- <File
- RelativePath=".\utilIA64.cpp"
- >
- </File>
- <File
- RelativePath=".\utilX86.cpp"
- >
- </File>
- <File
- RelativePath=".\vm.cpp"
- >
- </File>
- </Filter>
- <File
- RelativePath=".\sosdocs.txt"
- >
- </File>
- <File
- RelativePath=".\sources"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/src/ToolBox/SOS/Strike/dirs.proj b/src/ToolBox/SOS/Strike/dirs.proj
deleted file mode 100644
index 1e391307aa..0000000000
--- a/src/ToolBox/SOS/Strike/dirs.proj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(BuildForCoreSystem)'!='true'" Include="sos.nativeproj" />
- <ProjectFile Condition="'$(BuildArchitecture)' == 'arm'" Include="sosx86\sosx86.nativeproj" />
- <ProjectFile Condition="'$(BuildArchitecture)' == 'i386' and '$(BuildForCoreSystem)' == 'true'" Include="sosx86\sosx86.nativeproj" />
- <ProjectFile Condition="'$(BuildArchitecture)' == 'amd64' and '$(BuildForCoreSystem)' == 'true'" Include="sosx64\sosx64.nativeproj" />
- <ProjectFile Condition="'$(BuildArchitecture)' == 'arm64' and '$(BuildForCoreSystem)' == 'true'" Include="sosx64\sosx64.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/ToolBox/SOS/Strike/disasmARM.cpp b/src/ToolBox/SOS/Strike/disasmARM.cpp
index 82173558fd..cc80d77590 100644
--- a/src/ToolBox/SOS/Strike/disasmARM.cpp
+++ b/src/ToolBox/SOS/Strike/disasmARM.cpp
@@ -28,6 +28,7 @@
namespace ARMGCDump
{
#undef _TARGET_X86_
+#define WIN64EXCEPTIONS
#undef LIMITED_METHOD_CONTRACT
#define LIMITED_METHOD_DAC_CONTRACT
#define SUPPORTS_DAC
diff --git a/src/ToolBox/SOS/Strike/eeheap.cpp b/src/ToolBox/SOS/Strike/eeheap.cpp
index ac41e2deb6..5a5680fcfb 100644
--- a/src/ToolBox/SOS/Strike/eeheap.cpp
+++ b/src/ToolBox/SOS/Strike/eeheap.cpp
@@ -1614,9 +1614,9 @@ void LoaderHeapTraverse(CLRDATA_ADDRESS blockData,size_t blockSize,BOOL blockIsC
\**********************************************************************/
void PrintHeapSize(DWORD_PTR total, DWORD_PTR wasted)
{
- ExtOut("Size: 0x%" POINTERSIZE_TYPE "x (%" POINTERSIZE_TYPE "lu) bytes", total, total);
+ ExtOut("Size: 0x%" POINTERSIZE_TYPE "x (%" POINTERSIZE_TYPE "u) bytes", total, total);
if (wasted)
- ExtOut(" total, 0x%" POINTERSIZE_TYPE "x (%" POINTERSIZE_TYPE "lu) bytes wasted", wasted, wasted);
+ ExtOut(" total, 0x%" POINTERSIZE_TYPE "x (%" POINTERSIZE_TYPE "u) bytes wasted", wasted, wasted);
ExtOut(".\n");
}
diff --git a/src/ToolBox/SOS/Strike/exts.cpp b/src/ToolBox/SOS/Strike/exts.cpp
index 0b1f976cc2..566ba35f19 100644
--- a/src/ToolBox/SOS/Strike/exts.cpp
+++ b/src/ToolBox/SOS/Strike/exts.cpp
@@ -111,30 +111,29 @@ ArchQuery(void)
{
targetMachine = AMD64Machine::GetInstance();
}
-#endif // SOS_TARGET_AMD64
-#ifdef SOS_TARGET_X86
+#elif defined(SOS_TARGET_X86)
if (targetArchitecture == IMAGE_FILE_MACHINE_I386)
{
targetMachine = X86Machine::GetInstance();
}
-#endif // SOS_TARGET_X86
-#ifdef SOS_TARGET_ARM
+#elif defined(SOS_TARGET_ARM)
if (targetArchitecture == IMAGE_FILE_MACHINE_ARMNT)
{
targetMachine = ARMMachine::GetInstance();
}
-#endif // SOS_TARGET_ARM
-#ifdef SOS_TARGET_ARM64
+#elif defined(SOS_TARGET_ARM64)
if (targetArchitecture == IMAGE_FILE_MACHINE_ARM64)
{
targetMachine = ARM64Machine::GetInstance();
}
-#endif // SOS_TARGET_ARM64
+#else
+#error "Undefined target architecture"
+#endif
if (targetMachine == NULL)
{
g_targetMachine = NULL;
- ExtErr("SOS does not support the current target architecture.\n");
+ ExtErr("SOS does not support the current target architecture 0x%llx.\n", targetArchitecture);
return E_FAIL;
}
diff --git a/src/ToolBox/SOS/Strike/inc/dbgeng.h b/src/ToolBox/SOS/Strike/inc/dbgeng.h
index 73e4d19f99..cf04574c12 100644
--- a/src/ToolBox/SOS/Strike/inc/dbgeng.h
+++ b/src/ToolBox/SOS/Strike/inc/dbgeng.h
@@ -42,7 +42,11 @@ typedef struct _MEMORY_BASIC_INFORMATION64* PMEMORY_BASIC_INFORMATION64;
#define __out_xcount(x)
#define __inout
#define __inout_opt
-#define __reserved
+// Android defines various fields on struct which are named __reserved[x]; for example, in wchar.h,
+// so we must prefix __reserved with __clr_
+#define __clr_reserved
+#else
+#define __clr_reserved __reserved
#endif
#ifdef __cplusplus
@@ -1509,7 +1513,7 @@ DECLARE_INTERFACE_(IDebugClient, IUnknown)
THIS_
__in ULONG Flags,
__in PCSTR Options,
- __in_opt __reserved PVOID Reserved
+ __in_opt __clr_reserved PVOID Reserved
) PURE;
STDMETHOD(ConnectProcessServer)(
THIS_
@@ -1937,7 +1941,7 @@ DECLARE_INTERFACE_(IDebugClient2, IUnknown)
THIS_
__in ULONG Flags,
__in PCSTR Options,
- __in_opt __reserved PVOID Reserved
+ __in_opt __clr_reserved PVOID Reserved
) PURE;
STDMETHOD(ConnectProcessServer)(
THIS_
@@ -2394,7 +2398,7 @@ DECLARE_INTERFACE_(IDebugClient3, IUnknown)
THIS_
__in ULONG Flags,
__in PCSTR Options,
- __in_opt __reserved PVOID Reserved
+ __in_opt __clr_reserved PVOID Reserved
) PURE;
STDMETHOD(ConnectProcessServer)(
THIS_
@@ -2902,7 +2906,7 @@ DECLARE_INTERFACE_(IDebugClient4, IUnknown)
THIS_
__in ULONG Flags,
__in PCSTR Options,
- __in_opt __reserved PVOID Reserved
+ __in_opt __clr_reserved PVOID Reserved
) PURE;
STDMETHOD(ConnectProcessServer)(
THIS_
@@ -3449,7 +3453,7 @@ DECLARE_INTERFACE_(IDebugClient5, IUnknown)
THIS_
__in ULONG Flags,
__in PCSTR Options,
- __in_opt __reserved PVOID Reserved
+ __in_opt __clr_reserved PVOID Reserved
) PURE;
STDMETHOD(ConnectProcessServer)(
THIS_
@@ -3961,7 +3965,7 @@ DECLARE_INTERFACE_(IDebugClient5, IUnknown)
THIS_
__in ULONG Flags,
__in PCWSTR Options,
- __in_opt __reserved PVOID Reserved
+ __in_opt __clr_reserved PVOID Reserved
) PURE;
STDMETHOD(ConnectProcessServerWide)(
THIS_
diff --git a/src/ToolBox/SOS/Strike/sos.targets b/src/ToolBox/SOS/Strike/sos.targets
deleted file mode 100644
index 3a8185c6da..0000000000
--- a/src/ToolBox/SOS/Strike/sos.targets
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(ClrBase)\src\debug\SetDebugTargetLocal.props" />
- <Import Project="$(ClrBase)\src\debug\XPlatCommon.props" />
-
- <!-- Handle cross platform debugging: SOS is different from the DAC -->
- <!-- in that one binary includes code targeting multiple platforms. -->
- <!-- This means that there may be more than one SosTarget msbuild -->
- <!-- symbol or SOS_TARGET_XYZ conditional defined at the same time. -->
- <!-- The next section is what determines what code is built in which-->
- <!-- binary. -->
- <PropertyGroup>
- <!-- Code level conditional compilation symbols to support x-plat -->
- <CDefines Condition="'$(BuildArchitecture)' == 'i386'">$(CDefines);SOS_TARGET_X86=1</CDefines>
- <CDefines Condition="'$(BuildArchitecture)' == 'arm' or '$(BuildArchitecture)' == 'i386'">$(CDefines);SOS_TARGET_ARM=1</CDefines>
- <CDefines Condition="'$(BuildArchitecture)' == 'amd64'">$(CDefines);SOS_TARGET_AMD64=1</CDefines>
- <CDefines Condition="'$(BuildArchitecture)' == 'amd64' or '$(BuildArchitecture)' == 'arm64'">$(CDefines);SOS_TARGET_ARM64=1</CDefines>
-
- <CDefines Condition="'$(BuildArchitecture)' == 'amd64' or '$(BuildArchitecture)' == 'arm64'">$(CDefines);_TARGET_WIN64_=1</CDefines>
- </PropertyGroup>
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <SosSourceDir>$(ClrBase)\src\toolbox\sos\strike</SosSourceDir>
- <CompilerWarnings>
- </CompilerWarnings>
- <UserIncludes>
- $(SosSourceDir)\inc;
- $(UserIncludes);
- $(Clrbase)\src\vm;
- $(Clrbase)\src\inc;
- $(Clrbase)\src\gcdump;
- $(Clrbase)\src\Debug\shim;
- $(Clrbase)\src\coreclr\hosts\inc
- </UserIncludes>
- <OutputName>SOS</OutputName>
- <FileToMarkForSigning>$(BinariesDirectory)\$(OutputName).dll</FileToMarkForSigning>
- <TargetType>DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
- <Nxcompat>true</Nxcompat>
- <SynchronizePass2Drain>true</SynchronizePass2Drain>
- <DllDef>$(IntermediateOutputDirectory)\SOS.def</DllDef>
- <DllEntryPoint>_DllMainCRTStartup</DllEntryPoint>
- <LinkNoLibraries>true</LinkNoLibraries>
- <UseMsvcrt>false</UseMsvcrt>
- <Ltcg>false</Ltcg>
- <LinkUseCMT>true</LinkUseCMT>
- <UseStl>true</UseStl>
- <ClAdditionalOptions Condition="'$(DebugBuild)' == 'true'">$(ClAdditionalOptions) -DDEBUG -D_DEBUG</ClAdditionalOptions>
- <ClAdditionalOptions Condition="!('$(DebugBuild)' == 'true')">$(ClAdditionalOptions) -DFAST=1</ClAdditionalOptions>
- <ClOptimization Condition="!('$(DebugBuild)' == 'true')">MaxSpeed</ClOptimization>
- <ClAdditionalOptions Condition="'$(FeatureCoreSystem)' == 'true'">$(ClAdditionalOptions) -DFEATURE_CORESYSTEM</ClAdditionalOptions>
- <MscOptimizations Condition="!('$(DebugBuild)' == 'true')">
- </MscOptimizations>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DSTRIKE -D_MT=1 -DORCAS=0 -DMDA_SUPPORTED -DDEBUGGING_SUPPORTED -DEnC_SUPPORTED -DPROFILING_SUPPORTED -DFEATURE_COMINTEROP -DFEATURE_COMINTEROP_UNMANAGED_ACTIVATION -DFEATURE_COMINTEROP_MANAGED_ACTIVATION -DFEATURE_COMINTEROP_APARTMENT_SUPPORT -DFEATURE_RWLOCK -DFEATURE_PREJIT -DFEATURE_STACK_PROBE -DFEATURE_SVR_GC -DFEATURE_CAS_POLICY -DFEATURE_CLICKONCE -DFEATURE_CRYPTO -DFEATURE_IMPERSONATION -DFEATURE_ISOSTORE -DFEATURE_MACL -DFEATURE_WATSON -DFEATURE_X509 -DFEATURE_X509_SECURESTRINGS -DFEATURE_COMINTEROP_REGISTRATION -DFEATURE_MIXEDMODE -DFEATURE_PERFMON -DFEATURE_REFLECTION_ONLY_LOAD -DFEATURE_FUSION -DFEATURE_SYNTHETIC_CULTURES -DFEATURE_SORT_TABLES -DFEATURE_CODEPAGES_FILE -DFEATURE_VALIDATOR -DFEATURE_WIN32_REGISTRY -DFEATURE_REMOTING -DFEATURE_SERIALIZATION -DFEATURE_ISYM_READER -DFEATURE_LOADER_OPTIMIZATION -DFEATURE_IPCMAN -DFEATURE_STRONGNAME_DELAY_SIGNING_ALLOWED -DFEATURE_MULTIMODULE_ASSEMBLIES -DFEATURE_METHOD_RENTAL -DFEATURE_APTCA -DFEATURE_USE_LCID -DFEATURE_BCL_FORMATTING -DENABLE_DOWNLEVEL_FOR_NLS -DFEATURE_INCLUDE_ALL_INTERFACES -DFEATURE_NONGENERIC_COLLECTIONS -DFEATURE_APPDOMAINMANAGER_INITOPTIONS -DFEATURE_COMPRESSEDSTACK -DFEATURE_PLS -DFEATURE_SYNCHRONIZATIONCONTEXT -DFEATURE_SYNCHRONIZATIONCONTEXT_WAIT -DUEF_CHAINING_SUPPORTED -DFEATURE_LEAK_CULTURE_INFO -DFEATURE_UEF_CHAINMANAGER -DFEATURE_CORRUPTING_EXCEPTIONS -DFEATURE_APPDOMAIN_RESOURCE_MONITORING -DFEATURE_EXCEPTION_NOTIFICATIONS -DFEATURE_LEGACY_THREADPOOL -DFEATURE_INTEROP_DEBUGGING</ClAdditionalOptions>
- <ExceptionHandling>$(Fullcxxeh)</ExceptionHandling>
- <!-- As part of X-plat DAC feature work we decided to put x86 SOS inside binaries\x86 subdirectory.
- The pdb file will be places following the same subdir rule SymbolsDir\x86.
- -->
- <BinplaceRoot Condition="'$(BuildX86Sos)' == 'true'">$(BinariesDirectory)\x86</BinplaceRoot>
- <BinplaceRoot Condition="'$(BuildX64Sos)' == 'true'">$(BinariesDirectory)\x64</BinplaceRoot>
- <!-- Inhibit default behaviour of copying sos.pdb to Symbols.pri dir. -->
- <BinplaceSymbols Condition="'$(BuildX86Sos)' == 'true' or '$(BuildX64Sos)' == 'true'">false</BinplaceSymbols>
- <Verdir>$(InternalPath)\NDP\inc</Verdir>
- <Bindir>$(BinariesDirectory)</Bindir>
- </PropertyGroup>
-
- <ItemGroup>
- <TargetLib Include="$(SdkLibPath)\kernel32.lib" />
- <TargetLib Include="$(SdkLibPath)\user32.lib" />
- <TargetLib Include="$(SdkLibPath)\ole32.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\dbghelp.lib" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- <TargetLib Include="$(SdkLibPath)\version.lib" />
- <TargetLib Include="$(SdkLibPath)\dbgeng.lib" />
- <TargetLib Include="$(SdkLibPath)\advapi32.lib" />
- <TargetLib Include="$(SdkLibPath)\psapi.lib" />
-
- <TargetLib Condition="'$(DebugBuild)' == 'true'" Include="$(VCPublicLibPath)\libcmtd.lib" />
- <TargetLib Condition="'$(DebugBuild)' != 'true'" Include="$(VCPublicLibPath)\libcmt.lib" />
-
- <TargetLib Condition="'$(BuildX86Sos)' != 'true' and '$(BuildX64Sos)' != 'true'" Include="$(ClrLibPath)\corguids.lib">
- <ProjectReference>$(ClrSrcDirectory)inc\corguids.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Condition="'$(BuildX86Sos)' == 'true'" Include="$(ClrLibPath)\corguids_x86.lib">
- <ProjectReference>$(ClrSrcDirectory)incx86\corguids.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Condition="'$(BuildX64Sos)' == 'true'" Include="$(ClrLibPath)\corguids_amd64.lib">
- <ProjectReference>$(ClrSrcDirectory)incamd64\corguids.nativeproj</ProjectReference>
- </TargetLib>
-
- <TargetLib Include="$(ClrLibPath)\debugshim$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)\Debug\shim\$(XPlatHostLibBuildDir)\debugshim.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\dbgutil$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)\Debug\dbgutil\$(XPlatHostLibBuildDir)\dbgutil.nativeproj</ProjectReference>
- </TargetLib>
- </ItemGroup>
- <ItemGroup>
- <TargetLib Include="$(SdkLibPath)\ntdll.lib" />
- </ItemGroup>
- <ItemGroup>
- <RCResourceFile Condition="'$(FeatureCoreSystem)'!='true'" Include="$(SosSourceDir)\Native.rc" />
- <RCResourceFile Condition="'$(FeatureCoreSystem)'=='true'" Include="$(SosSourceDir)\ApolloNative.rc" />
- </ItemGroup>
- <ItemGroup>
- <CppCompile Include="$(SosSourceDir)\disasm.cpp" />
- <CppCompile Include="$(SosSourceDir)\dllsext.cpp" />
- <CppCompile Include="$(SosSourceDir)\eeheap.cpp" />
- <CppCompile Include="$(SosSourceDir)\EventCallbacks.cpp" />
- <CppCompile Include="$(SosSourceDir)\ExpressionNode.cpp" />
- <CppCompile Include="$(SosSourceDir)\exts.cpp" />
- <CppCompile Include="$(SosSourceDir)\gchist.cpp" />
- <CppCompile Include="$(SosSourceDir)\gcroot.cpp" />
- <CppCompile Include="$(SosSourceDir)\metadata.cpp" />
- <CppCompile Include="$(SosSourceDir)\sildasm.cpp" />
- <CppCompile Include="$(SosSourceDir)\sos.cpp" />
- <CppCompile Include="$(SosSourceDir)\stressLogDump.cpp" />
- <CppCompile Include="$(SosSourceDir)\strike.cpp" />
- <CppCompile Include="$(SosSourceDir)\util.cpp" />
- <CppCompile Include="$(SosSourceDir)\vm.cpp" />
- <CppCompile Include="$(SosSourceDir)\WatchCmd.cpp" />
- <CppPreprocess Include="$(SosSourceDir)\SOS.def">
- <FinalOutput>$(IntermediateOutputDirectory)\SOS.def</FinalOutput>
- <AdditionalOptions>$(ClAdditionalOptions) /TC</AdditionalOptions>
- </CppPreprocess>
- </ItemGroup>
- <ItemGroup>
- <CppCompile Condition="'$(BuildArchitecture)' == 'i386'" Include="$(SosSourceDir)\disasmX86.cpp" />
- <CppCompile Condition="'$(BuildArchitecture)' == 'amd64'" Include="$(SosSourceDir)\disasmX86.cpp" />
- <CppCompile Condition="'$(BuildArchitecture)' == 'arm' or '$(BuildArchitecture)' == 'i386'" Include="$(SosSourceDir)\disasmARM.cpp" />
- <CppCompile Condition="'$(BuildArchitecture)' == 'arm64' or '$(BuildArchitecture)' == 'amd64'" Include="$(SosSourceDir)\disasmARM64.cpp" />
- <RotorX86Sources Include="$(SosSourceDir)\disasmX86.cpp" />
- </ItemGroup>
- <ItemGroup>
- <DataFile Include="$(SosSourceDir)\sos_stacktrace.h" />
- </ItemGroup>
- <ItemGroup>
- <PublishPartGenerated Include="$(SosSourceDir)\sos_stacktrace.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-
- <PropertyGroup>
- <BuildLinkedDependsOn>$(BuildLinkedDependsOn);GenLongNameSOS</BuildLinkedDependsOn>
- </PropertyGroup>
-
- <UsingTask TaskName="GetFileVersionTask" AssemblyFile="$(ClrSrcDirectory)dlls\mscordac\GetFileVersion.dll"/>
-
- <Target Name="GenLongNameSOS"
- Inputs="$(Verdir)\version.h;$(IntermediateOutputDirectory)\sos.dll"
- Outputs="sos_upd">
- <GetFileVersionTask FilePath="$(IntermediateOutputDirectory)\sos.dll">
- <Output TaskParameter="FileVersion" PropertyName="SOSFileVersion"/>
- </GetFileVersionTask>
- <Exec Command="$(PerlCommand) -I$(DevDivToolsPath) $(ClrSrcDirectory)dlls\mscordac\Update.pl $(IntermediateOutputDirectory)\sos.dll sos $(HostMachineArch) $(_EnvironmentMachineArch) $(SOSFileVersion) $(Bindir) echo" StandardOutputImportance="Normal" />
-
- </Target>
-
-</Project>
diff --git a/src/ToolBox/SOS/Strike/strike.h b/src/ToolBox/SOS/Strike/strike.h
index e070898ff5..dfc0dcfea4 100644
--- a/src/ToolBox/SOS/Strike/strike.h
+++ b/src/ToolBox/SOS/Strike/strike.h
@@ -44,10 +44,6 @@
#define _wcsstr wcsstr
#endif // !PAL_STDCPP_COMPAT
-#ifdef PLATFORM_UNIX
-#define _vsnprintf vsnprintf
-#endif
-
#define ___in _SAL1_Source_(__in, (), _In_)
#define ___out _SAL1_Source_(__out, (), _Out_)
diff --git a/src/ToolBox/SOS/Strike/xplat/dbgeng.h b/src/ToolBox/SOS/Strike/xplat/dbgeng.h
index b4562271a6..5dcf9572bb 100644
--- a/src/ToolBox/SOS/Strike/xplat/dbgeng.h
+++ b/src/ToolBox/SOS/Strike/xplat/dbgeng.h
@@ -84,7 +84,7 @@ public:
va_list args)
{
char str[4096];
- int length = PAL__vsnprintf(str, sizeof(str), format, args);
+ int length = _vsnprintf_s(str, sizeof(str), _TRUNCATE, format, args);
if (length > 0)
{
return Output(mask, "%s", str);
diff --git a/src/ToolBox/SOS/diasdk/diasdk.nativeproj b/src/ToolBox/SOS/diasdk/diasdk.nativeproj
deleted file mode 100644
index 230e2d9f93..0000000000
--- a/src/ToolBox/SOS/diasdk/diasdk.nativeproj
+++ /dev/null
@@ -1,43 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <OutputName>DIALib</OutputName>
- <TargetType>DLLFROMIDL</TargetType>
- <AssemblyAttributeComVisible>true</AssemblyAttributeComVisible>
- <UserIncludes>$(UserIncludes);
- $(VCToolsIncPath)</UserIncludes>
- <MidlTlbDir>$(IntermediateOutputDirectory)</MidlTlbDir>
- <TlbImportFlags>/namespace:Dia /unsafe</TlbImportFlags>
- </PropertyGroup>
-
- <ItemGroup>
- <Idl Include="$(VCToolsIncPath)\dia2.idl" />
- <PublishPartLinked Include="$(IntermediateOutputDirectory)\dialib.dll">
- <Visibility>Intra</Visibility>
- <FileType>Binary</FileType>
- </PublishPartLinked>
- </ItemGroup>
-
- <ItemGroup>
- <RCResourceFile Include="native.rc" />
- </ItemGroup>
-
- <!--Leaf Project Items-->
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-
- <PropertyGroup>
- <BuildLinkedDependsOn>
- $(BuildLinkedDependsOn)
- PlaceSymbols
- </BuildLinkedDependsOn>
- </PropertyGroup>
-
-</Project>
diff --git a/src/ToolBox/SOS/dirs.proj b/src/ToolBox/SOS/dirs.proj
deleted file mode 100644
index 85bea0d39a..0000000000
--- a/src/ToolBox/SOS/dirs.proj
+++ /dev/null
@@ -1,32 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemDefinitionGroup>
- <ProjectFile>
- <ProductGroups>FX</ProductGroups>
- </ProjectFile>
- </ItemDefinitionGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="strike\dirs.proj" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(BuildArchitecture)' == 'i386' and '$(FeatureCoreClr)' != 'true'">
- <ProjectFile Include="diasdk\diasdk.nativeproj" >
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="dactablegen\dactablegen.csproj" >
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/ToolBox/SOS/lldbplugin/CMakeLists.txt b/src/ToolBox/SOS/lldbplugin/CMakeLists.txt
index 7f1fa7704f..29b36e8fa2 100644
--- a/src/ToolBox/SOS/lldbplugin/CMakeLists.txt
+++ b/src/ToolBox/SOS/lldbplugin/CMakeLists.txt
@@ -30,8 +30,11 @@ elseif(CLR_CMAKE_PLATFORM_ARCH_ARM)
add_definitions(-DDBG_TARGET_32BIT=1)
add_definitions(-DDBG_TARGET_ARM=1)
elseif(CLR_CMAKE_PLATFORM_ARCH_ARM64)
- message(WARNING "lldb is not supported on linux/aarch64 yet")
- return()
+ add_definitions(-D_TARGET_ARM64_=1)
+ add_definitions(-DDBG_TARGET_64BIT=1)
+ add_definitions(-DDBG_TARGET_ARM64=1)
+ add_definitions(-DDBG_TARGET_WIN64=1)
+ add_definitions(-DBIT64)
endif()
set(ENABLE_LLDBPLUGIN ${CLR_CMAKE_PLATFORM_UNIX} CACHE BOOL "Enable building the SOS plugin for LLDB.")
@@ -49,13 +52,13 @@ if(NOT ENABLE_LLDBPLUGIN)
endif()
# Check for LLDB library
-find_library(LLDB NAMES LLDB lldb lldb-3.8 lldb-3.6 lldb-3.5 PATHS "${WITH_LLDB_LIBS}" PATH_SUFFIXES llvm NO_DEFAULT_PATH)
-find_library(LLDB NAMES LLDB lldb lldb-3.8 lldb-3.6 lldb-3.5 PATH_SUFFIXES llvm)
+find_library(LLDB NAMES LLDB lldb lldb-3.9 lldb-3.8 lldb-3.7 lldb-3.6 lldb-3.5 PATHS "${WITH_LLDB_LIBS}" PATH_SUFFIXES llvm NO_DEFAULT_PATH)
+find_library(LLDB NAMES LLDB lldb lldb-3.9 lldb-3.8 lldb-3.7 lldb-3.6 lldb-3.5 PATH_SUFFIXES llvm)
if(LLDB STREQUAL LLDB-NOTFOUND)
if(REQUIRE_LLDBPLUGIN)
- message(FATAL_ERROR "Cannot find lldb-3.5, lldb-3.6 or lldb-3.8. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
+ message(FATAL_ERROR "Cannot find lldb-3.5, lldb-3.6, lldb-3.8 or lldb-3.9. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
else()
- message(WARNING "Cannot find lldb-3.5,lldb-3.6 or lldb-3.8. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
+ message(WARNING "Cannot find lldb-3.5,lldb-3.6, lldb-3.8 or lldb-3.9. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
endif()
return()
endif()
@@ -63,25 +66,24 @@ endif()
message(STATUS "LLDB: ${LLDB}")
# Check for LLDB headers
-
+# Multiple versions of LLDB can install side-by-side, so we need to check for lldb in various locations.
+# If the file in a directory is found the result is stored in the variable and the search will not be repeated unless the variable is cleared.
find_path(LLDB_H "lldb/API/LLDB.h" PATHS "${WITH_LLDB_INCLUDES}" NO_DEFAULT_PATH)
find_path(LLDB_H "lldb/API/LLDB.h")
+
+find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.9/include")
+find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.8/include")
+find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.7/include")
+find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.6/include")
+find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.5/include")
+
if(LLDB_H STREQUAL LLDB_H-NOTFOUND)
- find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.8/include")
- if(LLDB_H STREQUAL LLDB_H-NOTFOUND)
- find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.6/include")
- if(LLDB_H STREQUAL LLDB_H-NOTFOUND)
- find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.5/include")
- if(LLDB_H STREQUAL LLDB_H-NOTFOUND)
- if(REQUIRE_LLDBPLUGIN)
- message(FATAL_ERROR "Cannot find LLDB.h. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
- else()
- message(WARNING "Cannot find LLDB.h Try installing lldb-3.6-dev (or the appropriate package for your platform)")
- endif()
- return()
- endif()
- endif()
+ if(REQUIRE_LLDBPLUGIN)
+ message(FATAL_ERROR "Cannot find LLDB.h. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
+ else()
+ message(WARNING "Cannot find LLDB.h Try installing lldb-3.6-dev (or the appropriate package for your platform)")
endif()
+ return()
endif()
message(STATUS "LLDB_H: ${LLDB_H}")
diff --git a/src/ToolBox/SOS/lldbplugin/inc/lldbservices.h b/src/ToolBox/SOS/lldbplugin/inc/lldbservices.h
index 16702b116d..4817e811df 100644
--- a/src/ToolBox/SOS/lldbplugin/inc/lldbservices.h
+++ b/src/ToolBox/SOS/lldbplugin/inc/lldbservices.h
@@ -81,6 +81,7 @@ extern "C" {
#define IMAGE_FILE_MACHINE_I386 0x014c // Intel 386.
#define IMAGE_FILE_MACHINE_ARMNT 0x01c4 // ARM Thumb-2 Little-Endian
#define IMAGE_FILE_MACHINE_AMD64 0x8664 // AMD64 (K8)
+#define IMAGE_FILE_MACHINE_ARM64 0xAA64 // ARM64 Little-Endian
// Execution status codes used for waiting,
// for returning current status and for
diff --git a/src/ToolBox/SOS/lldbplugin/services.cpp b/src/ToolBox/SOS/lldbplugin/services.cpp
index d2d2cf9f8e..e3eee4fc59 100644
--- a/src/ToolBox/SOS/lldbplugin/services.cpp
+++ b/src/ToolBox/SOS/lldbplugin/services.cpp
@@ -171,6 +171,10 @@ LLDBServices::VirtualUnwind(
DWORD spToFind = dtcontext->Esp;
#elif DBG_TARGET_ARM
DWORD spToFind = dtcontext->Sp;
+#elif DBG_TARGET_ARM64
+ DWORD64 spToFind = dtcontext->Sp;
+#else
+#error "spToFind undefined for this platform"
#endif
int numFrames = thread.GetNumFrames();
@@ -407,6 +411,12 @@ LLDBServices::GetExecutingProcessorType(
*type = IMAGE_FILE_MACHINE_AMD64;
#elif DBG_TARGET_ARM
*type = IMAGE_FILE_MACHINE_ARMNT;
+#elif DBG_TARGET_ARM64
+ *type = IMAGE_FILE_MACHINE_ARM64;
+#elif DBG_TARGET_X86
+ *type = IMAGE_FILE_MACHINE_I386;
+#else
+#error "Unsupported target"
#endif
return S_OK;
}
diff --git a/src/ToolBox/dirs.proj b/src/ToolBox/dirs.proj
deleted file mode 100644
index e16ddd108c..0000000000
--- a/src/ToolBox/dirs.proj
+++ /dev/null
@@ -1,102 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <ItemDefinitionGroup>
- <ProjectFile>
- <ProductGroups>FX</ProductGroups>
- </ProjectFile>
- </ItemDefinitionGroup>
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1 of the Desktop build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreclr)' != 'true' and '$(BuildProjectName)' != 'CoreSys'">
- <ProjectFile Include="adepends\adepends.csproj" />
- <ProjectFile Include="allocationprofiler\clrprofiler.csproj" />
- <ProjectFile Include="apicompat\apicompat_buildtree.csproj" />
- <ProjectFile Include="apiconformance\apiconformance_ndpbuild.csproj" Condition="'$(BuildArchitecture)' != 'arm'" />
- <ProjectFile Include="asmrefrewriter\asmrefrewriter.csproj" />
- <ProjectFile Include="binaryrewriting\dirs.proj">
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="basealloc\basealloc.csproj" />
- <ProjectFile Include="bindingaddin\bindingaddin.csproj" />
- <ProjectFile Include="bindingdisplayinterop\bindingdisplayinterop.nativeproj" />
- <ProjectFile Include="caspol\caspol.csproj" />
- <ProjectFile Include="clrconfigure\clrconfigure_ndpbuild.csproj" />
- <ProjectFile Include="coveragerecorder\coveragerecorder.csproj" />
- <ProjectFile Include="etw\dirs.proj" />
- <ProjectFile Include="flux.viewer\flux.viewer_msbuild.csproj" />
- <ProjectFile Include="flux\flux_msbuild.csproj" />
- <ProjectFile Include="genman32\genman32.csproj" />
- <ProjectFile Include="genpubcfg\genpubcfg.csproj" Condition="'$(BuildArchitecture)' == 'i386'" />
- <ProjectFile Include="glee\glee.nativeproj" />
- <ProjectFile Include="ibcmerge\ibcmerge_msbuild.csproj">
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="isymmanagedwrapper\isymwrapper.csproj" Condition="'$(BuildArchitecture)' == 'ppc'" />
- <ProjectFile Include="isymwrapper\isymwrapper.nativeproj" />
- <ProjectFile Include="locstudiomanagedparser\managedparser.csproj" />
- <ProjectFile Include="mangen\mangen.csproj" />
- <ProjectFile Include="mda\mda.nativeproj" />
- <ProjectFile Include="mdbg\dirs.proj" />
- <ProjectFile Include="LaunchAppx\LaunchAppx.csproj" />
- <ProjectFile Include="mpgo\mpgo.csproj" >
- <ProductGroups>VS;FX</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="LaunchAppx\LaunchAppx.csproj" >
- <ProductGroups>VS;FX</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="mscorlibtlb\mscorlibtlb.nativeproj" />
- <ProjectFile Include="namesgen\namesgen.csproj" />
- <ProjectFile Include="nirvana\dirs.proj" Condition="'$(BuildArchitecture)' == 'i386' or '$(BuildArchitecture)' == 'amd64'" />
- <ProjectFile Include="obfus\obfus.csproj" />
- <ProjectFile Include="permissionsets\permissionsets.csproj" />
- <ProjectFile Include="pltypes\pltypes.csproj" />
- <ProjectFile Include="regasm\regasm_msbuild.csproj" />
- <ProjectFile Include="regkeydiff\regkeydiff.csproj" />
- <ProjectFile Include="regkeyseperator\regkeyseperator.csproj" />
- <ProjectFile Include="regsvcs\regsvcs.csproj" />
- <ProjectFile Include="resview\resview.csproj" />
- <ProjectFile Include="runsxs\runsxs.nativeproj" />
- <ProjectFile Include="soapsuds\dirs.proj" />
- <ProjectFile Include="sos\dirs.proj" >
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="storeadm\storeadm.csproj" />
- <ProjectFile Include="tlbexp\tlbexp_msbuild.csproj" />
- <ProjectFile Include="tlbguid\tlbguid.csproj" />
- <ProjectFile Include="tlbimp2\tlbimp2.csproj" />
- <ProjectFile Include="tnt\dirs.proj" Condition="'$(BuildArchitecture)' != 'arm'" />
- <ProjectFile Include="transparencyannotator\dirs.proj" >
- <ProductGroups>VS;FX</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="urtui\dirs.proj"/>
- <ProjectFile Include="winmdexp\dirs.proj" />
-<!--
- <ProjectFile Include="winverify\dirs.proj" />
--->
- <ProjectFile Include="wpf\wpf.proj" Condition="'$(BuildArchitecture)' == 'i386' or '$(BuildArchitecture)' == 'amd64'" />
- <ProjectFile Include="PdbTypeMatch\PdbTypeMatch.nativeproj" Condition="'$(BuildArchitecture)' == 'i386' and '$(_BuildType)' == 'ret'" >
- <ProductGroups>PK</ProductGroups>
- </ProjectFile>
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 of the CoreCLR build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and ('$(FeatureCoreclr)' == 'true' or '$(BuildProjectName)' == 'CoreSys')">
- <ProjectFile Include="sos\dirs.proj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 of the CoreSys build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(BuildProjectName)' == 'CoreSys'">
- <ProjectFile Include="ibcmerge\ibcmerge_msbuild.csproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/binder/binder.targets b/src/binder/binder.targets
deleted file mode 100644
index 01b35e2315..0000000000
--- a/src/binder/binder.targets
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <!--Leaf project Properties-->
- <PropertyGroup>
- <TargetType>LIBRARY</TargetType>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE </ClAdditionalOptions>
- <LinkAdditionalOptions>$(LinkAdditionalOptions) /VERBOSE</LinkAdditionalOptions>
- <BinderPath>$(Clrbase)\src\binder</BinderPath>
- <UserIncludes>
- $(UserIncludes);
- $(BinderPath);
- $(BinderPath)\inc;
- $(Clrbase)\src\inc;
- $(Clrbase)\src\vm;
- $(Clrbase)\src\vm\$(TargetCpu);
- $(Clrbase)\src\strongname\inc;
- $(SdkIncPath);
- </UserIncludes>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="..\Variables.cpp" />
- <CppCompile Include="..\Utils.cpp" />
- <CppCompile Include="..\AssemblyName.cpp" />
- <CppCompile Include="..\PropertyMap.cpp" />
- <CppCompile Include="..\ApplicationContext.cpp" />
- <CppCompile Include="..\Assembly.cpp" />
- <CppCompile Include="..\FailureCache.cpp" />
- <CppCompile Include="..\AssemblyBinder.cpp" />
- <CppCompile Include="..\StringLexer.cpp" />
- <CppCompile Include="..\CLRPrivBinderCoreCLR.cpp" />
- <CppCompile Include="..\BinderInterface.cpp" />
- <CppCompile Include="..\DebugLog.cpp" />
- <CppCompile Include="..\BindingLog.cpp" />
- <CppCompile Include="..\CDebugLog.cpp" />
- <CppCompile Include="..\TextualIdentityParser.cpp" />
- <CppCompile Include="..\AssemblyIdentityCache.cpp" />
- <CppCompile Include="..\CLRPrivBinderAssemblyLoadContext.cpp" Condition="'$(FeatureHostAssemblyResolver)' == 'true'"/>
- <CppCompile Include="..\CoreCLRBinderCommon.cpp"/>
- <CppCompile Include="..\FusionAssemblyName.cpp"/>
- <CppCompile Include="..\FusionHelpers.cpp"/>
- </ItemGroup>
-</Project>
diff --git a/src/binder/dirs.proj b/src/binder/dirs.proj
deleted file mode 100644
index cb7c0b4d02..0000000000
--- a/src/binder/dirs.proj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1 of the Desktop build -->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="assemblyname\assemblyname.nativeproj" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreclr)' == 'true'">
- <ProjectFile Include="v3binder\v3binder.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/binder/v3binder/v3binder.nativeproj b/src/binder/v3binder/v3binder.nativeproj
deleted file mode 100644
index 5412d69020..0000000000
--- a/src/binder/v3binder/v3binder.nativeproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Debug\SetDebugTargetLocal.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>v3binder</OutputName>
- </PropertyGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Binder\binder.targets" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/binder/v3binder_crossgen/v3binder_crossgen.nativeproj b/src/binder/v3binder_crossgen/v3binder_crossgen.nativeproj
deleted file mode 100644
index 61348e3f62..0000000000
--- a/src/binder/v3binder_crossgen/v3binder_crossgen.nativeproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Debug\SetDebugTargetLocal.props" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <OutputName>v3binder_crossgen</OutputName>
- </PropertyGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Binder\binder.targets" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/classlibnative/Dirs.proj b/src/classlibnative/Dirs.proj
deleted file mode 100644
index 0007a40314..0000000000
--- a/src/classlibnative/Dirs.proj
+++ /dev/null
@@ -1,29 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1 DESKTOP -->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreclr)' != 'true'">
- <ProjectFile Include="bcltype\bcltype.nativeproj" />
- <ProjectFile Include="cryptography\cryptography.nativeproj" />
- <ProjectFile Include="float\float.nativeproj" />
- <ProjectFile Include="nls\nls.nativeproj" />
- <ProjectFile Include="remoting\remoting.nativeproj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 CORE -->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreclr)' == 'true'">
- <ProjectFile Include="bcltype\bcltype.nativeproj" />
- <ProjectFile Include="cryptography\cryptography.nativeproj" />
- <ProjectFile Include="float\float.nativeproj" />
- <ProjectFile Include="nls\nls.nativeproj" Condition="'$(FeatureCoreFxGlobalization)' != 'true'"/>
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/classlibnative/bcltype/BCLType.nativeproj b/src/classlibnative/bcltype/BCLType.nativeproj
deleted file mode 100644
index 719a420313..0000000000
--- a/src/classlibnative/bcltype/BCLType.nativeproj
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(ClrBase)\src\debug\SetDebugTargetLocal.props" />
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <UserIncludes>..\..\inc;$(Clrbase)\src\vm;$(Clrbase)\src\vm\$(TargetCpu);..\..\debug\inc\$(TargetCpu);..\..\debug\inc\dump;$(UserIncludes);$(VCToolsIncPath)</UserIncludes>
- <OutputName>bcltype</OutputName>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
- <ClAdditionalOptions Condition="'$(PerfCountersSupportedBuild)' == 'true'">$(ClAdditionalOptions) -DENABLE_PERF_COUNTERS</ClAdditionalOptions>
- <ClWarningLevel>4</ClWarningLevel>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="ArrayNative.cpp" />
- <CppCompile Include="ArrayHelpers.cpp" />
- <CppCompile Include="Console.cpp" />
- <CppCompile Include="Currency.cpp" />
- <CppCompile Include="Decimal.cpp" />
- <CppCompile Include="WindowsRuntimeBufferHelper.cpp" />
- <CppCompile Include="Number.cpp" />
- <CppCompile Include="OAVariant.cpp" />
- <CppCompile Include="ObjectNative.cpp" />
- <CppCompile Include="StringNative.cpp" />
- <CppCompile Include="StringBuffer.cpp" />
- <CppCompile Include="System.cpp" />
- <CppCompile Include="VarArgsNative.cpp" />
- <CppCompile Include="Variant.cpp" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/classlibnative/bcltype/CMakeLists.txt b/src/classlibnative/bcltype/CMakeLists.txt
index 4df909ae35..7999c0c90f 100644
--- a/src/classlibnative/bcltype/CMakeLists.txt
+++ b/src/classlibnative/bcltype/CMakeLists.txt
@@ -7,7 +7,6 @@ endif(PerfCountersSupportedBuild)
set(BCLTYPE_SOURCES
arraynative.cpp
arrayhelpers.cpp
- console.cpp
currency.cpp
decimal.cpp
windowsruntimebufferhelper.cpp
diff --git a/src/classlibnative/bcltype/arraynative.cpp b/src/classlibnative/bcltype/arraynative.cpp
index 58fa4dd3e6..0eae8b2d07 100644
--- a/src/classlibnative/bcltype/arraynative.cpp
+++ b/src/classlibnative/bcltype/arraynative.cpp
@@ -961,7 +961,7 @@ void memmoveGCRefs(void *dest, const void *src, size_t len)
}
}
- GCHeapUtilities::GetGCHeap()->SetCardsAfterBulkCopy((Object**)dest, len);
+ SetCardsAfterBulkCopy((Object**)dest, len);
}
void ArrayNative::ArrayCopyNoTypeCheck(BASEARRAYREF pSrc, unsigned int srcIndex, BASEARRAYREF pDest, unsigned int destIndex, unsigned int length)
@@ -1021,7 +1021,7 @@ FCIMPL6(void, ArrayNative::ArrayCopy, ArrayBase* m_pSrc, INT32 m_iSrcIndex, Arra
// cannot pass null for source or destination
if (gc.pSrc == NULL || gc.pDst == NULL) {
- FCThrowArgumentNullVoid(gc.pSrc==NULL ? W("source") : W("dest"));
+ FCThrowArgumentNullVoid(gc.pSrc==NULL ? W("sourceArray") : W("destinationArray"));
}
// source and destination must be arrays
@@ -1048,16 +1048,16 @@ FCIMPL6(void, ArrayNative::ArrayCopy, ArrayBase* m_pSrc, INT32 m_iSrcIndex, Arra
FCThrowArgumentOutOfRangeVoid(W("length"), W("ArgumentOutOfRange_NeedNonNegNum"));
if (m_iSrcIndex < srcLB || (m_iSrcIndex - srcLB < 0))
- FCThrowArgumentOutOfRangeVoid(W("srcIndex"), W("ArgumentOutOfRange_ArrayLB"));
+ FCThrowArgumentOutOfRangeVoid(W("sourceIndex"), W("ArgumentOutOfRange_ArrayLB"));
if (m_iDstIndex < destLB || (m_iDstIndex - destLB < 0))
- FCThrowArgumentOutOfRangeVoid(W("dstIndex"), W("ArgumentOutOfRange_ArrayLB"));
+ FCThrowArgumentOutOfRangeVoid(W("destinationIndex"), W("ArgumentOutOfRange_ArrayLB"));
if ((DWORD)(m_iSrcIndex - srcLB + m_iLength) > srcLen)
- FCThrowResVoid(kArgumentException, W("Arg_LongerThanSrcArray"));
+ FCThrowArgumentVoid(W("sourceArray"), W("Arg_LongerThanSrcArray"));
if ((DWORD)(m_iDstIndex - destLB + m_iLength) > destLen)
- FCThrowResVoid(kArgumentException, W("Arg_LongerThanDestArray"));
+ FCThrowArgumentVoid(W("destinationArray"), W("Arg_LongerThanDestArray"));
int r = 0;
diff --git a/src/classlibnative/bcltype/console.cpp b/src/classlibnative/bcltype/console.cpp
deleted file mode 100644
index 7dfb30a5f5..0000000000
--- a/src/classlibnative/bcltype/console.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-// File: Console.cpp
-//
-
-//
-// Purpose: Native methods on System.Console
-//
-//
-
-#ifndef FEATURE_CORECLR
-
-#include "common.h"
-#include "sbuffer.h"
-#include <windows.h>
-#include "console.h"
-
-// GetConsoleTitle sometimes interprets the second parameter (nSize) as number of bytes and sometimes as the number of chars.
-// Instead of doing complicated and dangerous logic to determine if this may or may not occur,
-// we simply assume the worst and reserve a bigger buffer. This way we may use a bit more memory,
-// but we will always be safe. This macro helps us doing that:
-#define ADJUST_NUM_CHARS(numChars) ((numChars) * 2)
-
-#define BUFF_SIZE(numChars) ( ((numChars) + 1) * sizeof(TCHAR) )
-
-// A buffer of size ConsoleNative::MaxConsoleTitleLength is quite big.
-// First, we try allocating a smaller buffer because most often, the console title is short.
-// If it turns out that the short buffer size is insufficient, we try again using a larger buffer.
-INT32 QCALLTYPE ConsoleNative::GetTitle(QCall::StringHandleOnStack outTitle, INT32& outTitleLen) {
-
- QCALL_CONTRACT;
-
- INT32 result = 0;
-
- BEGIN_QCALL;
-
- // Reserve buffer:
- InlineSBuffer< ADJUST_NUM_CHARS(BUFF_SIZE(ShortConsoleTitleLength)) > titleBuff;
-
- // Hold last error:
- DWORD lastError;
-
- // Read console title, get length of the title:
-
- BYTE *buffPtr = titleBuff.OpenRawBuffer( ADJUST_NUM_CHARS(BUFF_SIZE(ShortConsoleTitleLength)) );
-
- SetLastError(0);
- DWORD len = GetConsoleTitle((TCHAR *) buffPtr, ADJUST_NUM_CHARS(ShortConsoleTitleLength + 1));
- lastError = GetLastError();
-
- titleBuff.CloseRawBuffer();
-
- // If the title length is larger than supported maximum, do not bother reading it, just return the length:
- if (len > MaxConsoleTitleLength) {
-
- outTitleLen = len;
- outTitle.Set(W(""));
- result = 0;
-
- // If title length is within valid range:
- } else {
-
- // If the title is longer than the short buffer, but can fit in the max supported length,
- // read it again with the long buffer:
- if (len > ShortConsoleTitleLength) {
-
- COUNT_T buffSize = ADJUST_NUM_CHARS(BUFF_SIZE(len));
- titleBuff.SetSize(buffSize);
-
- BYTE *buffPtr = titleBuff.OpenRawBuffer(buffSize);
-
- SetLastError(0);
- len = GetConsoleTitle((TCHAR *) buffPtr, ADJUST_NUM_CHARS(len + 1));
- lastError = GetLastError();
-
- titleBuff.CloseRawBuffer();
- }
-
- // Zero may indicate error or empty title. Check for error:
- result = (INT32) (0 == len ? lastError : 0);
-
- // If no error, set title and length:
- if (0 == result) {
- const BYTE *cBuffPtr = (const BYTE *) titleBuff;
- outTitle.Set((TCHAR *) cBuffPtr);
- outTitleLen = (INT32) len;
-
- // If error, set to empty:
- } else {
- outTitleLen = (INT32) -1;
- // No need to set the title string if we have an error anyway.
- }
- } // if title length is within valid range.
-
- END_QCALL;
-
- return result;
-}
-
-// Block waiting for data to become available on the console stream indicated by the safe file handle passed.
-// Ensure that the thread remains abortable in the process.
-FCIMPL2(void, ConsoleStreamHelper::WaitForAvailableConsoleInput, SafeHandle* refThisUNSAFE, CLR_BOOL bIsPipe)
-{
- FCALL_CONTRACT;
-
- SAFEHANDLEREF refConsoleHandle(refThisUNSAFE);
-
- HELPER_METHOD_FRAME_BEGIN_1(refConsoleHandle);
-
- // Prevent the console handle being closed under our feet.
- SafeHandleHolder shh(&refConsoleHandle);
-
- // Don't pass the address of the native handle within the safe handle to DoAppropriateWait since the safe
- // handle is on the GC heap and could be moved. Instead copy the native handle out into a stack location
- // (this is safe because we've ref-counted the safe handle to prevent it being disposed on us).
- HANDLE hNativeConsoleHandle = refConsoleHandle->GetHandle();
-
- bool skipWait = false;
-
- // If we are reading from a pipe and the other end of the pipe was closed, then do not block. No one can write to it.
- // Also we can skip blocking if we do have data available. We should block if nothing is available, with the assumption
- // that Windows is smart enough to handle pipes where the other end is closed.
- if (bIsPipe)
- {
- DWORD cBytesRead, cTotalBytesAvailable, cBytesLeftThisMessage;
- int r = PeekNamedPipe(hNativeConsoleHandle, NULL, 0, &cBytesRead, &cTotalBytesAvailable, &cBytesLeftThisMessage);
- if (r != 0)
- {
- skipWait = cTotalBytesAvailable > 0;
- }
- else
- {
- // Windows returns ERROR_BROKEN_PIPE if the other side of a pipe is closed. However, we've seen
- // pipes return ERROR_NO_DATA and ERROR_PIPE_NOT_CONNECTED. Check for those too.
- int errorCode = GetLastError();
- skipWait = errorCode == ERROR_BROKEN_PIPE || errorCode == ERROR_NO_DATA || errorCode == ERROR_PIPE_NOT_CONNECTED;
- }
- }
-
- // Perform the wait (DoAppropriateWait automatically handles thread aborts).
- if (!skipWait)
- {
- GetThread()->DoAppropriateWait(1, &hNativeConsoleHandle, TRUE, INFINITE, WaitMode_Alertable);
- }
-
- HELPER_METHOD_FRAME_END();
-}
-FCIMPLEND
-
-#endif // ifndef FEATURE_CORECLR
diff --git a/src/classlibnative/bcltype/console.h b/src/classlibnative/bcltype/console.h
deleted file mode 100644
index b3772f2425..0000000000
--- a/src/classlibnative/bcltype/console.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-// File: Console.h
-//
-
-//
-// Purpose: Native methods on System.Console
-//
-
-//
-#ifndef _CONSOLE_H_
-#define _CONSOLE_H_
-
-#ifndef FEATURE_CORECLR
-
-#include "qcall.h"
-
-class ConsoleNative {
-
-private:
-
- // Short buffer len to try using first:
- static const INT32 ShortConsoleTitleLength = 200;
-
-public:
-
- // This value is copied from Console.cs. There is said:
- // MSDN says console titles can be up to 64KB in length.
- // But there is an exception if the buffer lengths longer than
- // ~24500 Unicode characters are used. Oh well.
- static const INT32 MaxConsoleTitleLength = 24500;
-
- static INT32 QCALLTYPE GetTitle(QCall::StringHandleOnStack outTitle, INT32& outTitleLen);
-};
-
-class ConsoleStreamHelper {
-public:
- static FCDECL2(void, WaitForAvailableConsoleInput, SafeHandle* refThisUNSAFE, CLR_BOOL bIsPipe);
-};
-
-#endif // ifndef FEATURE_CORECLR
-
-#endif // _CONSOLE_H_
diff --git a/src/classlibnative/bcltype/number.cpp b/src/classlibnative/bcltype/number.cpp
index 6ca24d8672..3f2d63c70e 100644
--- a/src/classlibnative/bcltype/number.cpp
+++ b/src/classlibnative/bcltype/number.cpp
@@ -142,12 +142,6 @@ void DoubleToNumber(double value, int precision, NUMBER* number)
WRAPPER_NO_CONTRACT
_ASSERTE(number != NULL);
-#ifndef FEATURE_BCL_FORMATTING
- number->palNumber=PAL_DoubleToNumber(value);
- IfNullThrow(number->palNumber);
- number->palNumberType=PALNUMBERTYPE_DOUBLE;
-#endif
-
number->precision = precision;
if (((FPDOUBLE*)&value)->exp == 0x7FF) {
number->scale = (((FPDOUBLE*)&value)->mantLo || ((FPDOUBLE*)&value)->mantHi) ? SCALE_NAN: SCALE_INF;
@@ -736,13 +730,6 @@ void Int32ToNumber(int value, NUMBER* number)
WRAPPER_NO_CONTRACT
_ASSERTE(number != NULL);
-#ifndef FEATURE_BCL_FORMATTING
- number->palNumber=PAL_IntToNumber(value);
- IfNullThrow(number->palNumber);
- number->palNumberType=PALNUMBERTYPE_INT;
-#endif
-
-
wchar buffer[INT32_PRECISION+1];
number->precision = INT32_PRECISION;
if (value >= 0) {
@@ -769,12 +756,6 @@ void UInt32ToNumber(unsigned int value, NUMBER* number)
WRAPPER_NO_CONTRACT
_ASSERTE(number != NULL);
-#ifndef FEATURE_BCL_FORMATTING
- number->palNumber=PAL_UIntToNumber(value);
- IfNullThrow(number->palNumber);
- number->palNumberType=PALNUMBERTYPE_UINT;
-#endif
-
wchar buffer[UINT32_PRECISION+1];
number->precision = UINT32_PRECISION;
number->sign = 0;
@@ -880,12 +861,6 @@ void Int64ToNumber(__int64 value, NUMBER* number)
{
WRAPPER_NO_CONTRACT
-#ifndef FEATURE_BCL_FORMATTING
- number->palNumber=PAL_Int64ToNumber(value);
- IfNullThrow(number->palNumber);
- number->palNumberType=PALNUMBERTYPE_INT64;
-#endif
-
wchar buffer[INT64_PRECISION+1];
number->precision = INT64_PRECISION;
if (value >= 0) {
@@ -934,29 +909,6 @@ void UInt64ToNumber(unsigned __int64 value, NUMBER* number)
}
-#ifndef FEATURE_BCL_FORMATTING
-void NumberToUInt64(NUMBER * number, unsigned __int64* value)
-{
- _ASSERTE(NULL != number);
- _ASSERTE(NULL != value);
-
- if (NULL != number && NULL != value) {
- (*value) = 0;
- int i = 0;
- while (i < NUMBER_MAXDIGITS && i < number->precision && number->digits[i] != NULL) {
- _ASSERTE((number->digits[i] - '0') >= 0 && (number->digits[i] - '0') <= 9);
- *value = (10 * (*value)) + (number->digits[i] - '0');
- i++;
- }
- while (i < number->scale) {
- *value = (10 * (*value));
- i++;
- }
- }
-}
-#endif
-
-
void RoundNumber(NUMBER* number, int pos)
{
LIMITED_METHOD_CONTRACT
@@ -985,50 +937,6 @@ void RoundNumber(NUMBER* number, int pos)
}
digits[i] = 0;
-#ifndef FEATURE_BCL_FORMATTING
-//
-// The PAL stores PALNUMBER as the actual numeric type where as NUMBER is in string form;
-// Convert NUMBER back into its original type and pass it to the PAL for later use
-//
- if (0 != number->palNumber) {
- if (PALNUMBERTYPE_DOUBLE == number->palNumberType) {
- // no need to round NaN or infinity double values
- if (SCALE_NAN != ((unsigned int)number->scale) && SCALE_INF != ((unsigned int)number->scale)) {
- double value = 0.0;
- NumberToDouble(number, &value);
- // make sure the rounding didn't accidently cause the good value
- // to be turned into NaN or infinity
- if (((FPDOUBLE*)&value)->exp != 0x7FF) {
- number->palNumber=PAL_DoubleToNumber(value);
- }
- }
- }
- else {
- unsigned __int64 value = 0;
- NumberToUInt64(number, &value);
- switch(number->palNumberType) {
- case PALNUMBERTYPE_INT:
- _ASSERTE((value >> 32) == 0);
- number->palNumber=PAL_IntToNumber(((unsigned int)value) * (number->sign ? -1 : 1));
- break;
- case PALNUMBERTYPE_UINT:
- _ASSERTE((value >> 32) == 0);
- number->palNumber=PAL_UIntToNumber((unsigned int)value);
- break;
- case PALNUMBERTYPE_INT64:
- _ASSERTE((value >> 63) == 0);
- number->palNumber=PAL_Int64ToNumber(((__int64)value) * (number->sign ? -1 : 1));
- break;
- case PALNUMBERTYPE_UINT64:
- number->palNumber=PAL_UInt64ToNumber(value);
- break;
- default:
- CONSISTENCY_CHECK_MSGF(0, ("This palNumberType is not understood '(%d)''\n", number->palNumberType));
- break;
- }
- }
- }
-#endif
}
#if defined(_MSC_VER) && defined(_TARGET_X86_)
@@ -1112,29 +1020,6 @@ wchar* FormatGeneral(__in_ecount(cchBuffer) wchar* buffer, SIZE_T cchBuffer, NUM
}
}
-#ifndef FEATURE_BCL_FORMATTING
- if (number->palNumber)
- {
- WCHAR sExp[2]={expChar};
- LPCWSTR strNumberDecimal(sNumberDecimal!=NULL?sNumberDecimal->GetBuffer():NULL);
- LPCWSTR strPositive(sPositive!=NULL?sPositive->GetBuffer():NULL);
- LPCWSTR strNegative(sNegative!=NULL?sNegative->GetBuffer():NULL);
- LPCWSTR strZero(sZero!=NULL?sZero->GetBuffer():NULL);
-
- int nChars;
-
- // nMaxDigits for Scientific are 1 more than needed
- if (scientific)
- nChars=PAL_FormatScientific(NULL, buffer, cchBuffer, number->palNumber,-1,nMaxDigits-1,sExp,strNumberDecimal,strPositive,strNegative,strZero);
- else
- nChars=PAL_FormatDecimal(NULL, buffer, cchBuffer, number->palNumber,-1,nMaxDigits,-1, -1,-1,strNumberDecimal,NULL,strNegative,strZero);
-
- if(nChars<0)
- return NULL;
- return buffer+nChars;
- }
-#endif
-
wchar* dig = GetDigitsBuffer(number);
_ASSERT(dig != NULL);
if (digPos > 0) {
@@ -1162,26 +1047,9 @@ wchar* FormatGeneral(__in_ecount(cchBuffer) wchar* buffer, SIZE_T cchBuffer, NUM
wchar* FormatScientific(__in_ecount(cchBuffer) wchar* buffer, SIZE_T cchBuffer, NUMBER* number, int nMinDigits, int nMaxDigits, wchar expChar,
STRINGREF sNumberDecimal, STRINGREF sPositive, STRINGREF sNegative, STRINGREF sZero)
{
- WRAPPER_NO_CONTRACT
- _ASSERTE(number != NULL);
- _ASSERTE(buffer != NULL);
-#ifndef FEATURE_BCL_FORMATTING
- if (number->palNumber)
- {
- WCHAR sExp[2]={expChar};
- LPCWSTR strNumberDecimal(sNumberDecimal!=NULL?sNumberDecimal->GetBuffer():NULL);
- LPCWSTR strPositive(sPositive!=NULL?sPositive->GetBuffer():NULL);
- LPCWSTR strNegative(sNegative!=NULL?sNegative->GetBuffer():NULL);
- LPCWSTR strZero(sZero!=NULL?sZero->GetBuffer():NULL);
-
- // nMaxDigits passed into FormatScientific are 1 more than requested
- int nChars=PAL_FormatScientific(NULL, buffer, cchBuffer, number->palNumber,nMinDigits, nMaxDigits-1,sExp,strNumberDecimal,strPositive,strNegative,strZero);
- if(nChars<0)
- ThrowLastError();
- return buffer+nChars;
- }
-#endif
-
+ WRAPPER_NO_CONTRACT
+ _ASSERTE(number != NULL);
+ _ASSERTE(buffer != NULL);
wchar* dig = GetDigitsBuffer(number);
_ASSERTE(dig != NULL);
@@ -1207,21 +1075,6 @@ wchar* FormatFixed(__in_ecount(cchBuffer) wchar* buffer, SIZE_T cchBuffer, NUMBE
PRECONDITION(CheckPointer(number));
} CONTRACTL_END;
-#ifndef FEATURE_BCL_FORMATTING
- if (number->palNumber)
- {
- LPCWSTR strDecimal(sDecimal!=NULL?sDecimal->GetBuffer():NULL);
- LPCWSTR strNegative(sNegative!=NULL?sNegative->GetBuffer():NULL);
- LPCWSTR strZero(sZero!=NULL?sZero->GetBuffer():NULL);
-
- int nChars=PAL_FormatDecimal(NULL, buffer, cchBuffer, number->palNumber,nMinDigits,nMaxDigits,-1, -1,-1,strDecimal,W(""),strNegative,strZero);
- if(nChars<0)
- return NULL;
- return buffer+nChars;
- }
-#endif
-
-
int digPos = number->scale;
wchar* dig = GetDigitsBuffer(number);
const I4* groupDigits = NULL;
@@ -1328,33 +1181,6 @@ wchar* FormatNumber(__in_ecount(cchBuffer) wchar* buffer, SIZE_T cchBuffer, NUMB
PRECONDITION(CheckPointer(buffer));
PRECONDITION(CheckPointer(number));
} CONTRACTL_END;
-#ifndef FEATURE_BCL_FORMATTING
- if (number->palNumber)
- {
- LPCWSTR strDecimal(sNumberDecimal!=NULL?sNumberDecimal->GetBuffer():NULL);
- LPCWSTR strGroup(sNumberGroup!=NULL?sNumberGroup->GetBuffer():NULL);
- LPCWSTR strNegative(sNegative!=NULL?sNegative->GetBuffer():NULL);
- LPCWSTR strZero(sZero!=NULL?sZero->GetBuffer():NULL);
- int iPrimaryGroup=0;
- int iSecondaryGroup=0;
- if(cNumberGroup!=NULL)
- {
- int nGroups = cNumberGroup->GetNumComponents();
- I4* pGroups=(I4*)cNumberGroup->GetDataPtr();
-
- if(nGroups>0)
- iPrimaryGroup=pGroups[0];
- if(nGroups>1)
- iSecondaryGroup=pGroups[1];
- }
-
- int nChars=PAL_FormatDecimal(NULL, buffer, cchBuffer, number->palNumber,nMinDigits,nMaxDigits, cNegativeNumberFormat,
- iPrimaryGroup,iSecondaryGroup,strDecimal,strGroup,strNegative,strZero);
- if(nChars<0)
- return NULL;
- return buffer+nChars;
- }
-#endif
char ch;
const char* fmt;
@@ -1391,36 +1217,6 @@ wchar* FormatCurrency(__in_ecount(cchBuffer) wchar* buffer, SIZE_T cchBuffer, NU
PRECONDITION(CheckPointer(number));
} CONTRACTL_END;
-#ifndef FEATURE_BCL_FORMATTING
- if (number->palNumber)
- {
- LPCWSTR strCurrencyDecimal(sCurrencyDecimal!=NULL?sCurrencyDecimal->GetBuffer():NULL);
- LPCWSTR strCurrencyGroup(sCurrencyGroup!=NULL?sCurrencyGroup->GetBuffer():NULL);
- LPCWSTR strNegative(sNegative!=NULL?sNegative->GetBuffer():NULL);
- LPCWSTR strCurrency(sCurrency!=NULL?sCurrency->GetBuffer():NULL);
- LPCWSTR strZero(sZero!=NULL?sZero->GetBuffer():NULL);
- int iPrimaryGroup=0;
- int iSecondaryGroup=0;
-
- if(cCurrencyGroup!=NULL)
- {
- int nGroups = cCurrencyGroup->GetNumComponents();
- I4* pGroups=(I4*)cCurrencyGroup->GetDataPtr();
-
- if(nGroups>0)
- iPrimaryGroup=pGroups[0];
- if(nGroups>1)
- iSecondaryGroup=pGroups[1];
- }
-
- int nChars=PAL_FormatCurrency(NULL, buffer, cchBuffer, number->palNumber,nMinDigits,nMaxDigits,cNegCurrencyFormat, cPosCurrencyFormat,
- iPrimaryGroup, iSecondaryGroup, strCurrencyDecimal,strCurrencyGroup,strNegative, strCurrency,strZero);
- if (nChars<0)
- return NULL;
-
- return buffer+nChars;
- }
-#endif
char ch;
const char* fmt;
fmt = number->sign?
@@ -1458,39 +1254,6 @@ wchar* FormatPercent(__in_ecount(cchBuffer) wchar* buffer, SIZE_T cchBuffer, NUM
PRECONDITION(CheckPointer(number));
} CONTRACTL_END;
-
-#ifndef FEATURE_BCL_FORMATTING
- if (number->palNumber)
- {
- LPCWSTR strPercentDecimal(sPercentDecimal!=NULL?sPercentDecimal->GetBuffer():NULL);
- LPCWSTR strPercentGroup(sPercentGroup!=NULL?sPercentGroup->GetBuffer():NULL);
- LPCWSTR strNegative(sNegative!=NULL?sNegative->GetBuffer():NULL);
- LPCWSTR strPercent(sPercent!=NULL?sPercent->GetBuffer():NULL);
- LPCWSTR strZero(sZero!=NULL?sZero->GetBuffer():NULL);
-
- int iPrimaryGroup=0;
- int iSecondaryGroup=0;
-
- if(cPercentGroup!=NULL)
- {
- int nGroups = cPercentGroup->GetNumComponents();
- I4* pGroups=(I4*)cPercentGroup->GetDataPtr();
-
- if(nGroups>0)
- iPrimaryGroup=pGroups[0];
- if(nGroups>1)
- iSecondaryGroup=pGroups[1];
- }
-
- int nChars=PAL_FormatPercent(NULL, buffer, cchBuffer, number->palNumber,nMinDigits,nMaxDigits,cNegativePercentFormat, cPositivePercentFormat,
- iPrimaryGroup, iSecondaryGroup,strPercentDecimal,strPercentGroup,strNegative, strPercent,strZero);
- if(nChars<0)
- return NULL;
-
- return buffer+nChars;
- }
-#endif
-
char ch;
const char* fmt;
fmt = number->sign?
@@ -1612,12 +1375,6 @@ STRINGREF NumberToString(NUMBER* number, wchar format, int nMaxDigits, NUMFMTREF
STRINGREF sCurrencyGroup = numfmt->sCurrencyGroup;
STRINGREF sNegative = numfmt->sNegative;
STRINGREF sCurrency = numfmt->sCurrency;
-#ifndef FEATURE_BCL_FORMATTING
- if (numfmt->bIsInvariant || 0 == number->palNumber)
- {
- // So that FormatCurrency uses BCL format
- number->palNumber = 0;
-#endif
// Prefix: bogus warning 22011: newBufferLen+=digCount may be smaller than MIN_BUFFER_SIZE
PREFIX_ASSUME(digCount >=0 && digCount <= INT32_MAX);
newBufferLen += digCount;
@@ -1637,22 +1394,6 @@ STRINGREF NumberToString(NUMBER* number, wchar format, int nMaxDigits, NUMFMTREF
RoundNumber(number, number->scale + nMaxDigits); // Don't change this line to use digPos since digCount could have its sign changed.
dst = FormatCurrency(dst, static_cast<SIZE_T>(newBufferLen/sizeof(WCHAR)), number, nMinDigits,nMaxDigits, cNegCurrencyFormat, cPosCurrencyFormat, cCurrencyGroup, sCurrencyDecimal, sCurrencyGroup, sNegative, sCurrency,sZero);
-#ifndef FEATURE_BCL_FORMATTING
- }
- else
- {
- for ( SIZE_T nChars=128;;nChars*=2)
- {
- dst = buffer = (WCHAR*)buf.AllocThrows(nChars * sizeof(WCHAR));
- dst = FormatCurrency(dst, nChars, number, nMinDigits, nMaxDigits, cNegCurrencyFormat, cPosCurrencyFormat, cCurrencyGroup, sCurrencyDecimal, sCurrencyGroup, sNegative, sCurrency,sZero);
- if (dst)
- break;
- if (GetLastError()!=ERROR_INSUFFICIENT_BUFFER)
- ThrowLastError();
- }
- }
-#endif
-
break;
}
case 'F':
@@ -1672,49 +1413,25 @@ STRINGREF NumberToString(NUMBER* number, wchar format, int nMaxDigits, NUMFMTREF
// It is critical to format with the same values that we use to calculate buffer size.
STRINGREF sNumberDecimal = numfmt->sNumberDecimal;
STRINGREF sNegative = numfmt->sNegative;
-#ifndef FEATURE_BCL_FORMATTING
- if (numfmt->bIsInvariant || 0 == number->palNumber)
- {
- // So that FormatFixed uses BCL format
- number->palNumber = 0;
-#endif
-
- newBufferLen += digCount;
- newBufferLen += sNegative->GetStringLength(); // For number and exponent
- newBufferLen += sNumberDecimal->GetStringLength();
-
- _ASSERTE(newBufferLen >= MIN_BUFFER_SIZE);
- if (newBufferLen > INT32_MAX) {
- COMPlusThrowOM();
- }
- newBufferLen = newBufferLen * sizeof(WCHAR);
- dst = buffer = (WCHAR*)buf.AllocThrows(static_cast<SIZE_T>(newBufferLen));
-
- RoundNumber(number, number->scale + nMaxDigits);
+
+ newBufferLen += digCount;
+ newBufferLen += sNegative->GetStringLength(); // For number and exponent
+ newBufferLen += sNumberDecimal->GetStringLength();
+
+ _ASSERTE(newBufferLen >= MIN_BUFFER_SIZE);
+ if (newBufferLen > INT32_MAX) {
+ COMPlusThrowOM();
+ }
+ newBufferLen = newBufferLen * sizeof(WCHAR);
+ dst = buffer = (WCHAR*)buf.AllocThrows(static_cast<SIZE_T>(newBufferLen));
+
+ RoundNumber(number, number->scale + nMaxDigits);
if (number->sign) {
AddStringRef(&dst, sNegative);
}
dst = FormatFixed(dst, static_cast<SIZE_T>(newBufferLen/sizeof(WCHAR)-(dst-buffer)), number, nMinDigits,nMaxDigits,
NULL,
sNumberDecimal, NULL, sNegative, sZero);
-#ifndef FEATURE_BCL_FORMATTING
- }
- else
- {
- for( SIZE_T nChars=128;;nChars*=2)
- {
- dst = buffer = (WCHAR*)buf.AllocThrows(nChars * sizeof(WCHAR));
- dst = FormatFixed(dst, nChars, number, nMinDigits,nMaxDigits,
- NULL,
- sNumberDecimal, NULL,sNegative,sZero);
-
- if (dst)
- break;
- if (GetLastError()!=ERROR_INSUFFICIENT_BUFFER)
- ThrowLastError();
- }
- }
-#endif
break;
}
@@ -1737,44 +1454,21 @@ STRINGREF NumberToString(NUMBER* number, wchar format, int nMaxDigits, NUMFMTREF
STRINGREF sNumberDecimal = numfmt->sNumberDecimal;
STRINGREF sNumberGroup = numfmt->sNumberGroup;
int cNegativeNumberFormat = numfmt->cNegativeNumberFormat;
-#ifndef FEATURE_BCL_FORMATTING
- if (numfmt->bIsInvariant || 0 == number->palNumber)
- {
- // So that FormatNumber uses BCL format
- number->palNumber = 0;
-#endif
-
- newBufferLen += digCount;
- newBufferLen += sNegative->GetStringLength(); // For number and exponent
- if (!ClrSafeInt<UINT64>::addition((UINT64)sNumberGroup->GetStringLength() * digCount, newBufferLen, newBufferLen))
- COMPlusThrowOM();
- newBufferLen += sNumberDecimal->GetStringLength();
-
- _ASSERTE(newBufferLen >= MIN_BUFFER_SIZE);
- if (newBufferLen > INT32_MAX) {
- COMPlusThrowOM();
- }
- newBufferLen = newBufferLen * sizeof(WCHAR);
- dst = buffer = (WCHAR*)buf.AllocThrows(static_cast<SIZE_T>(newBufferLen));
-
- RoundNumber(number, number->scale + nMaxDigits);
- dst = FormatNumber(dst, static_cast<SIZE_T>(newBufferLen/sizeof(WCHAR)),number, nMinDigits, nMaxDigits, cNegativeNumberFormat, cNumberGroup, sNumberDecimal, sNumberGroup, sNegative, sZero);
-#ifndef FEATURE_BCL_FORMATTING
- }
- else
- {
- for( SIZE_T nChars=128;;nChars*=2)
- {
- dst = buffer = (WCHAR*)buf.AllocThrows(nChars * sizeof(WCHAR));
- dst = FormatNumber(dst, nChars, number, nMinDigits,nMaxDigits, cNegativeNumberFormat, cNumberGroup, sNumberDecimal, sNumberGroup, sNegative,sZero);
-
- if (dst)
- break;
- if (GetLastError()!=ERROR_INSUFFICIENT_BUFFER)
- ThrowLastError();
- }
+ newBufferLen += digCount;
+ newBufferLen += sNegative->GetStringLength(); // For number and exponent
+ if (!ClrSafeInt<UINT64>::addition((UINT64)sNumberGroup->GetStringLength() * digCount, newBufferLen, newBufferLen))
+ COMPlusThrowOM();
+ newBufferLen += sNumberDecimal->GetStringLength();
+
+ _ASSERTE(newBufferLen >= MIN_BUFFER_SIZE);
+ if (newBufferLen > INT32_MAX) {
+ COMPlusThrowOM();
}
-#endif
+ newBufferLen = newBufferLen * sizeof(WCHAR);
+ dst = buffer = (WCHAR*)buf.AllocThrows(static_cast<SIZE_T>(newBufferLen));
+
+ RoundNumber(number, number->scale + nMaxDigits);
+ dst = FormatNumber(dst, static_cast<SIZE_T>(newBufferLen/sizeof(WCHAR)),number, nMinDigits, nMaxDigits, cNegativeNumberFormat, cNumberGroup, sNumberDecimal, sNumberGroup, sNegative, sZero);
break;
}
@@ -1792,45 +1486,22 @@ STRINGREF NumberToString(NUMBER* number, wchar format, int nMaxDigits, NUMFMTREF
nMinDigits=nMaxDigits;
nMaxDigits++;
-#ifndef FEATURE_BCL_FORMATTING
- if (numfmt->bIsInvariant || 0 == number->palNumber)
- {
- // So that FormatScientific uses BCL format
- number->palNumber = 0;
-#endif
-
- newBufferLen += nMaxDigits;
- newBufferLen += (((INT64)sNegative->GetStringLength() + sPositive->GetStringLength()) *2); // For number and exponent
- newBufferLen += sNumberDecimal->GetStringLength();
-
- _ASSERTE(newBufferLen >= MIN_BUFFER_SIZE);
- if (newBufferLen > INT32_MAX) {
- COMPlusThrowOM();
- }
- newBufferLen = newBufferLen * sizeof(WCHAR);
- dst = buffer = (WCHAR*)buf.AllocThrows(static_cast<SIZE_T>(newBufferLen));
+ newBufferLen += nMaxDigits;
+ newBufferLen += (((INT64)sNegative->GetStringLength() + sPositive->GetStringLength()) *2); // For number and exponent
+ newBufferLen += sNumberDecimal->GetStringLength();
- RoundNumber(number, nMaxDigits);
- if (number->sign) {
- AddStringRef(&dst, sNegative);
- }
- dst = FormatScientific(dst, static_cast<SIZE_T>(newBufferLen * sizeof(WCHAR)-(dst-buffer)),number, nMinDigits,nMaxDigits, format, sNumberDecimal, sPositive, sNegative,sZero);
-#ifndef FEATURE_BCL_FORMATTING
+ _ASSERTE(newBufferLen >= MIN_BUFFER_SIZE);
+ if (newBufferLen > INT32_MAX) {
+ COMPlusThrowOM();
}
- else
- {
- for( SIZE_T nChars=128;;nChars*=2)
- {
- dst = buffer = (WCHAR*)buf.AllocThrows(nChars * sizeof(WCHAR));
- dst = FormatScientific(dst, nChars, number, nMinDigits, nMaxDigits, format, sNumberDecimal, sPositive, sNegative,sZero);
+ newBufferLen = newBufferLen * sizeof(WCHAR);
+ dst = buffer = (WCHAR*)buf.AllocThrows(static_cast<SIZE_T>(newBufferLen));
- if (dst)
- break;
- if (GetLastError()!=ERROR_INSUFFICIENT_BUFFER)
- ThrowLastError();
- }
+ RoundNumber(number, nMaxDigits);
+ if (number->sign) {
+ AddStringRef(&dst, sNegative);
}
-#endif
+ dst = FormatScientific(dst, static_cast<SIZE_T>(newBufferLen * sizeof(WCHAR)-(dst-buffer)),number, nMinDigits,nMaxDigits, format, sNumberDecimal, sPositive, sNegative,sZero);
break;
}
@@ -1878,30 +1549,7 @@ STRINGREF NumberToString(NUMBER* number, wchar format, int nMaxDigits, NUMFMTREF
}
-#ifndef FEATURE_BCL_FORMATTING
- if (numfmt->bIsInvariant || 0 == number->palNumber)
- {
- // So that FormatScientific uses BCL format
- number->palNumber = 0;
-#endif
-
- dst = FormatGeneral(dst, static_cast<SIZE_T>(newBufferLen/sizeof(WCHAR)), number, nMinDigits,nMaxDigits, format - ('G' - 'E'), sNumberDecimal, sPositive, sNegative, sZero, !enableRounding);
-#ifndef FEATURE_BCL_FORMATTING
- }
- else
- {
- for( SIZE_T nChars=128;;nChars*=2)
- {
- dst = buffer = (WCHAR*)buf.AllocThrows(nChars * sizeof(WCHAR));
- dst = FormatGeneral(dst, nChars, number, nMinDigits,nMaxDigits, format - ('G' - 'E'), sNumberDecimal, sPositive, sNegative, sZero, !enableRounding);
-
- if (dst)
- break;
- if (GetLastError()!=ERROR_INSUFFICIENT_BUFFER)
- ThrowLastError();
- }
- }
-#endif
+ dst = FormatGeneral(dst, static_cast<SIZE_T>(newBufferLen/sizeof(WCHAR)), number, nMinDigits,nMaxDigits, format - ('G' - 'E'), sNumberDecimal, sPositive, sNegative, sZero, !enableRounding);
}
break;
@@ -1930,10 +1578,6 @@ STRINGREF NumberToString(NUMBER* number, wchar format, int nMaxDigits, NUMFMTREF
STRINGREF sNegative = numfmt->sNegative;
STRINGREF sPercent = numfmt->sPercent;
-#ifndef FEATURE_BCL_FORMATTING
- // So that FormatPercent uses BCL format
- number->palNumber = 0;
-#endif
newBufferLen += digCount;
newBufferLen += sNegative->GetStringLength(); // For number and exponent
if (!ClrSafeInt<UINT64>::addition((UINT64)sPercentGroup->GetStringLength() * digCount, newBufferLen, newBufferLen))
@@ -1957,7 +1601,6 @@ STRINGREF NumberToString(NUMBER* number, wchar format, int nMaxDigits, NUMFMTREF
COMPlusThrow(kFormatException, W("Argument_BadFormatSpecifier"));
}
// check for overflow of the preallocated buffer
-#ifdef FEATURE_BCL_FORMATTING // when not defined the buffer could be resized, so skip the check
// Review signed/unsigned mismatch in '<=' comparison.
#pragma warning(push)
#pragma warning(disable:4018)
@@ -1965,7 +1608,6 @@ STRINGREF NumberToString(NUMBER* number, wchar format, int nMaxDigits, NUMFMTREF
#pragma warning(pop)
DoJITFailFast();
}
-#endif
return StringObject::NewString(buffer, (int) (dst - buffer));
}
@@ -2047,12 +1689,6 @@ STRINGREF NumberToStringFormat(NUMBER* number, STRINGREF str, NUMFMTREF numfmt)
section = FindSection(format, (GetDigitsBuffer(number))[0] == 0 ? 2 : number->sign ? 1 : 0);
-#ifndef FEATURE_BCL_FORMATTING
- // custom formatting is all done in the VM without the PAL. Blanking
- // the palNumber field avoids unnecessary RoundNumber calculations
- number->palNumber = 0;
-#endif
-
ParseSection:
digitCount = 0;
decimalPos = -1;
@@ -2607,11 +2243,6 @@ FCIMPL3_VII(Object*, COMNumber::FormatSingle, float value, StringObject* formatU
//and display that.
DoubleToNumber(argsValue, FLOAT_PRECISION, &number);
-#ifndef FEATURE_BCL_FORMATTING
- // Make sure that BCL formatting is used for Single to avoid lossy conversion to Double
- number.palNumber = 0;
-#endif
-
if (number.scale == (int) SCALE_NAN) {
gc.refRetVal = gc.numfmt->sNaN;
goto lExit;
@@ -2654,10 +2285,6 @@ FCIMPL3_VII(Object*, COMNumber::FormatSingle, float value, StringObject* formatU
}
DoubleToNumber(value, precision, &number);
-#ifndef FEATURE_BCL_FORMATTING
- // Make sure that BCL formatting is used for Single to avoid lossy conversion to Double
- number.palNumber = 0;
-#endif
if (number.scale == (int) SCALE_NAN) {
gc.refRetVal = gc.numfmt->sNaN;
diff --git a/src/classlibnative/bcltype/number.h b/src/classlibnative/bcltype/number.h
index 3b72781a18..87bab3b9f6 100644
--- a/src/classlibnative/bcltype/number.h
+++ b/src/classlibnative/bcltype/number.h
@@ -14,26 +14,12 @@
#define NUMBER_MAXDIGITS 50
-#ifndef FEATURE_BCL_FORMATTING
-enum PAL_NUMBERType {
- PALNUMBERTYPE_INT = 1, // PAL_IntToNumber
- PALNUMBERTYPE_INT64 = 2, // PAL_Int64ToNumber
- PALNUMBERTYPE_UINT = 3, // PAL_UIntToNumber
- PALNUMBERTYPE_UINT64 = 4, // PAL_UInt64ToNumber
- PALNUMBERTYPE_DOUBLE = 5, // PAL_DoubleToNumber
-};
-#endif
-
struct NUMBER {
int precision;
int scale;
int sign;
wchar_t digits[NUMBER_MAXDIGITS + 1];
wchar_t* allDigits;
-#ifndef FEATURE_BCL_FORMATTING
- PAL_NUMBERHolder palNumber;
- PAL_NUMBERType palNumberType;
-#endif
NUMBER() : precision(0), scale(0), sign(0), allDigits(NULL) {}
};
diff --git a/src/classlibnative/float/Float.nativeproj b/src/classlibnative/float/Float.nativeproj
deleted file mode 100644
index ef7f818e0e..0000000000
--- a/src/classlibnative/float/Float.nativeproj
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(ClrBase)\src\debug\SetDebugTargetLocal.props" />
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <!--OK to delete NO_NTDLL for devdiv builds.-->
- <ClOptimization Condition="'$(DebugBuild)' == 'false'">Full</ClOptimization>
- <UserIncludes>..\inc;$(UserIncludes);$(Clrbase)\src\vm;$(Clrbase)\src\vm\$(TargetCpu);$(VCToolsIncPath);$(Clrbase)\src\strongname\inc</UserIncludes>
- <OutputName>comfloat_wks</OutputName>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
- <ClWarningLevel>4</ClWarningLevel>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="floatdouble.cpp" />
- <CppCompile Include="floatsingle.cpp" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/classlibnative/nls/NLS.nativeproj b/src/classlibnative/nls/NLS.nativeproj
deleted file mode 100644
index 8a08bc89ed..0000000000
--- a/src/classlibnative/nls/NLS.nativeproj
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(ClrBase)\src\debug\SetDebugTargetLocal.props" />
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <!--OK to delete NO_NTDLL for devdiv builds.-->
- <!--Auto-converted: COMPILER_WARNINGS-->
- <UserIncludes>$(UserIncludes);..\inc;$(Clrbase)\src\vm;$(Clrbase)\src\vm\$(TargetCpu);$(VCToolsIncPath);$(Clrbase)\src\strongname\inc;..\bcltype</UserIncludes>
- <OutputName>comnls_wks</OutputName>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="CalendarData.cpp" />
- <CppCompile Include="EncodingData.cpp" />
- <CppCompile Include="NLSInfo.cpp" />
- <CppCompile Include="NLSTable.cpp" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/coreclr/dirs.proj b/src/coreclr/dirs.proj
deleted file mode 100644
index 6b14c1aff2..0000000000
--- a/src/coreclr/dirs.proj
+++ /dev/null
@@ -1,25 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreClr)' == 'true'">
- <ProjectFile Include="batchsetup\batchsetup.proj" />
- <ProjectFile Include="hosts\dirs.proj" />
- <ProjectFile Include="snskipverf\snskipverf.nativeproj" />
- <ProjectFile Include="release\release.proj" />
- <ProjectFile Include="uwp\dirs.proj" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreSystem)' == 'true'">
- <ProjectFile Include="shim\dirs.proj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/coreclr/hosts/coreconsole/CoreConsole.nativeproj b/src/coreclr/hosts/coreconsole/CoreConsole.nativeproj
deleted file mode 100644
index bdb190fbbb..0000000000
--- a/src/coreclr/hosts/coreconsole/CoreConsole.nativeproj
+++ /dev/null
@@ -1,32 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>CoreConsole</OutputName>
- <TargetType>PROGRAM</TargetType>
- <LinkSubsystem>console</LinkSubsystem>
- <EntryPoint>wmain</EntryPoint>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <IsTestNetHost>true</IsTestNetHost>
- </PropertyGroup>
-
- <ItemGroup>
- <TargetLib Include="$(CoreSystemCrt)" />
- <TargetLib Condition="'$(BuildForWindows7)'=='true'" Include="$(SdkLibPath)\mincore_fw.lib" />
- <TargetLib Condition="'$(BuildForWindows7)'!='true'" Include="$(SdkLibPath)\mincore.lib" />
- </ItemGroup>
-
- <ItemGroup>
- <RCResourceFile Include="native.rc" />
- </ItemGroup>
- <ItemGroup>
- <CppCompile Include="coreconsole.cpp" />
- <CppCompile Include="logger.cpp" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/coreclr/hosts/corerun/coreRun.nativeproj b/src/coreclr/hosts/corerun/coreRun.nativeproj
deleted file mode 100644
index 87b64a5408..0000000000
--- a/src/coreclr/hosts/corerun/coreRun.nativeproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>CoreRun</OutputName>
- <TargetType>PROGRAM</TargetType>
- <LinkSubsystem>console</LinkSubsystem>
- <EntryPoint>wmain</EntryPoint>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <IsTestNetHost>true</IsTestNetHost>
- </PropertyGroup>
-
- <ItemGroup>
- <LinkPreCrtLibs Include="$(ClrLibPath)\utilcodestaticnohost.lib" />
- <ProjectReference Include="$(ClrSrcDirectory)utilcode\staticnohost\staticnohost.nativeproj" />
- </ItemGroup>
- <ItemGroup>
- <TargetLib Include="$(CoreSystemCrt)" />
- <TargetLib Condition="'$(BuildForWindows7)'=='true'" Include="$(SdkLibPath)\mincore_fw.lib" />
- <TargetLib Condition="'$(BuildForWindows7)'=='true'" Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Condition="'$(BuildForWindows7)'!='true'" Include="$(SdkLibPath)\mincore.lib" />
- <TargetLib Condition="'$(BuildForWindows7)'!='true'" Include="$(SdkLibPath)\mincore_legacy.lib" />
- <TargetLib Condition="'$(BuildForWindows7)'!='true'" Include="$(SdkLibPath)\mincore_private.lib" />
- <TargetLib Condition="'$(BuildForWindows7)'!='true'" Include="$(SdkLibPath)\mincore_obsolete.lib" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- </ItemGroup>
-
- <ItemGroup>
- <RCResourceFile Include="native.rc" />
- </ItemGroup>
- <ItemGroup>
- <CppCompile Include="coreRun.cpp" />
- <CppCompile Include="logger.cpp" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/coreclr/hosts/dirs.proj b/src/coreclr/hosts/dirs.proj
deleted file mode 100644
index 11382958cb..0000000000
--- a/src/coreclr/hosts/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreClr)' == 'true'">
- <ProjectFile Include="coreRun\coreRun.nativeproj" />
- <ProjectFile Include="fxprun\fxprun.nativeproj" />
- <ProjectFile Include="coreconsole\CoreConsole.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/coreclr/hosts/unixcoreconsole/CMakeLists.txt b/src/coreclr/hosts/unixcoreconsole/CMakeLists.txt
index 8988e60dcf..94587b5374 100644
--- a/src/coreclr/hosts/unixcoreconsole/CMakeLists.txt
+++ b/src/coreclr/hosts/unixcoreconsole/CMakeLists.txt
@@ -23,11 +23,16 @@ endif(NOT CMAKE_SYSTEM_NAME STREQUAL FreeBSD AND NOT CMAKE_SYSTEM_NAME STREQUAL
# pthread by the process executable ensures that all locks are initialized properly.
target_link_libraries(coreconsole
unixcoreruncommon
- pthread
)
+if(NOT CLR_CMAKE_PLATFORM_ANDROID)
+ target_link_libraries(coreconsole
+ pthread
+ )
+endif()
+
add_dependencies(coreconsole
coreclr
)
-install_clr(coreconsole) \ No newline at end of file
+install_clr(coreconsole)
diff --git a/src/coreclr/hosts/unixcorerun/CMakeLists.txt b/src/coreclr/hosts/unixcorerun/CMakeLists.txt
index b32c9833bf..b5dc730aaf 100644
--- a/src/coreclr/hosts/unixcorerun/CMakeLists.txt
+++ b/src/coreclr/hosts/unixcorerun/CMakeLists.txt
@@ -23,11 +23,17 @@ endif(NOT CMAKE_SYSTEM_NAME STREQUAL FreeBSD AND NOT CMAKE_SYSTEM_NAME STREQUAL
# pthread by the process executable ensures that all locks are initialized properly.
target_link_libraries(corerun
unixcoreruncommon
- pthread
)
+# Android implements pthread natively
+if(NOT CLR_CMAKE_PLATFORM_ANDROID)
+ target_link_libraries(corerun
+ pthread
+ )
+endif()
+
add_dependencies(corerun
coreclr
)
-install_clr(corerun) \ No newline at end of file
+install_clr(corerun)
diff --git a/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp b/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp
index d7186d7a29..5ac7654780 100644
--- a/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp
+++ b/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp
@@ -313,6 +313,7 @@ int ExecuteManagedAssembly(
std::string appPath;
GetDirectory(managedAssemblyAbsolutePath, appPath);
+ std::string tpaList;
// Construct native search directory paths
std::string nativeDllSearchDirs(appPath);
char *coreLibraries = getenv("CORE_LIBRARIES");
@@ -320,11 +321,14 @@ int ExecuteManagedAssembly(
{
nativeDllSearchDirs.append(":");
nativeDllSearchDirs.append(coreLibraries);
+ if (std::strcmp(coreLibraries, clrFilesAbsolutePath) != 0)
+ {
+ AddFilesFromDirectoryToTpaList(coreLibraries, tpaList);
+ }
}
nativeDllSearchDirs.append(":");
nativeDllSearchDirs.append(clrFilesAbsolutePath);
- std::string tpaList;
AddFilesFromDirectoryToTpaList(clrFilesAbsolutePath, tpaList);
void* coreclrLib = dlopen(coreClrDllPath.c_str(), RTLD_NOW | RTLD_LOCAL);
@@ -443,7 +447,7 @@ int ExecuteManagedAssembly(
}
else
{
- char* error = dlerror();
+ const char* error = dlerror();
fprintf(stderr, "dlopen failed to open the libcoreclr.so with error %s\n", error);
}
diff --git a/src/corefx/System.Globalization.Native/CMakeLists.txt b/src/corefx/System.Globalization.Native/CMakeLists.txt
index 90f50671cd..9ecb0e08b9 100644
--- a/src/corefx/System.Globalization.Native/CMakeLists.txt
+++ b/src/corefx/System.Globalization.Native/CMakeLists.txt
@@ -67,6 +67,14 @@ _add_library(System.Globalization.Native
${NATIVEGLOBALIZATION_SOURCES}
)
+_add_library(System.Globalization.Native_Static
+ STATIC
+ ${NATIVEGLOBALIZATION_SOURCES}
+)
+
+# Remove the _Static postfix from the static library name
+set_target_properties(System.Globalization.Native_Static PROPERTIES OUTPUT_NAME System.Globalization.Native)
+
# Disable the "lib" prefix.
set_target_properties(System.Globalization.Native PROPERTIES PREFIX "")
@@ -80,10 +88,17 @@ if(NOT CLR_CMAKE_PLATFORM_DARWIN)
${ICUUC}
${ICUI18N}
)
+ target_link_libraries(System.Globalization.Native_Static
+ ${ICUUC}
+ ${ICUI18N}
+ )
elseif(NOT CMAKE_SYSTEM_NAME STREQUAL FreeBSD AND NOT CMAKE_SYSTEM_NAME STREQUAL NetBSD)
target_link_libraries(System.Globalization.Native
dl
)
+ target_link_libraries(System.Globalization.Native_Static
+ dl
+ )
endif()
else()
target_link_libraries(System.Globalization.Native
@@ -100,4 +115,5 @@ verify_dependencies(
# add the install targets
install_clr(System.Globalization.Native)
+install(TARGETS System.Globalization.Native_Static DESTINATION .)
diff --git a/src/corefx/format-code.sh b/src/corefx/format-code.sh
index 3d0cfcc93c..c0898f2125 100755
--- a/src/corefx/format-code.sh
+++ b/src/corefx/format-code.sh
@@ -2,10 +2,10 @@
# OS X names clang-format as clang-format; Ubuntu uses
# clang-format-version so check for the right one
-if which "clang-format-3.6" > /dev/null 2>&1 ; then
- export CF="$(which clang-format-3.6)"
-elif which "clang-format" > /dev/null 2>&1 ; then
- export CF="$(which clang-format)"
+if command -v "clang-format-3.6" > /dev/null; then
+ export CF="$(command -v clang-format-3.6)"
+elif command -v "clang-format" > /dev/null; then
+ export CF="$(command -v clang-format)"
else
echo "Unable to find clang-format"
exit 1
diff --git a/src/debug/daccess/daccess.targets b/src/debug/daccess/daccess.targets
deleted file mode 100644
index 43da554f47..0000000000
--- a/src/debug/daccess/daccess.targets
+++ /dev/null
@@ -1,73 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <PropertyGroup>
- <!-- Work around problems with loading System.Private.CoreLib.dll, -->
- <!-- caused by inconsistent setting of UseLegacyCompiler and FeatureSpanOfT -->
- <!-- between System.Private.CoreLib.dll and the runtime. -->
- <UseLegacyCompiler>true</UseLegacyCompiler>
- </PropertyGroup>
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\dac.props" />
- <Import Project="..\SetDebugTargetLocal.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <UseStl Condition="'$(BuildForCoreSystem)' != 'true'">true</UseStl>
- <DaccessSrcDirectory>$(ClrSrcDirectory)\debug\daccess</DaccessSrcDirectory>
- <UserIncludes>$(UserIncludes);
- $(DaccessSrcDirectory);
- $(ClrSrcDirectory)\vm;
- $(ClrSrcDirectory)\vm\$(TargetCpu);
- $(ClrSrcDirectory)\debug\inc;
- $(ClrSrcDirectory)\debug\inc\$(TargetCpu);
- $(ClrSrcDirectory)\debug\inc\dump;
- $(ClrSrcDirectory)\debug\ee;
- $(ClrSrcDirectory)\inc;
- $(ClrSrcDirectory)\inc\$(IntermediateOutputDirectory);
- $(VCToolsIncPath);
- $(ClrSrcDirectory)\gcdump;
- $(ClrSrcDirectory)\md\inc;
- $(ClrSrcDirectory)\gc;
- $(ClrSrcDirectory)\strongname\inc</UserIncludes>
- <CDefines>$(CDefines);UNICODE;_UNICODE;$(USER_SPECIFIC_C_DEFINES);FEATURE_NO_HOST</CDefines>
- <OutputName Condition="'$(OutputName)' == ''">dac_wks</OutputName>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>$(DaccessSrcDirectory)\stdafx.cpp</PCHCompile>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <ProjectReference Include="$(ClrSrcDirectory)inc\corguids.nativeproj" />
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="$(DaccessSrcDirectory)\dacdbiimpl.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\dacdbiimpllocks.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\dacdbiimplstackwalk.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\daccess.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\dacfn.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\enummem.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\fntableaccess.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\inspect.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\reimpl.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\request.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\request_svr.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\stack.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\task.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\nidump.cpp" />
- <CppCompile Include="$(DaccessSrcDirectory)\datatargetadapter.cpp" />
- </ItemGroup>
- <ItemGroup>
- <CppCompile Condition="'$(TargetArch)' == 'i386'" Include="$(DaccessSrcDirectory)\i386\primitives.cpp" />
- <CppCompile Condition="'$(TargetArch)' == 'amd64'" Include="$(DaccessSrcDirectory)\amd64\primitives.cpp" />
- <CppCompile Condition="'$(TargetArch)' == 'arm'" Include="$(DaccessSrcDirectory)\arm\primitives.cpp" />
- <CppCompile Condition="'$(TargetArch)' == 'arm64'" Include="$(DaccessSrcDirectory)\arm64\primitives.cpp" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/debug/daccess/dacdbiimplstackwalk.cpp b/src/debug/daccess/dacdbiimplstackwalk.cpp
index d3a2a63bbc..29c9626db8 100644
--- a/src/debug/daccess/dacdbiimplstackwalk.cpp
+++ b/src/debug/daccess/dacdbiimplstackwalk.cpp
@@ -1156,14 +1156,14 @@ void DacDbiInterfaceImpl::UpdateContextFromRegDisp(REGDISPLAY * pRegDisp,
// Do a partial copy first.
pContext->ContextFlags = (CONTEXT_INTEGER | CONTEXT_CONTROL);
- pContext->Edi = *pRegDisp->pEdi;
- pContext->Esi = *pRegDisp->pEsi;
- pContext->Ebx = *pRegDisp->pEbx;
- pContext->Ebp = *pRegDisp->pEbp;
- pContext->Eax = *pRegDisp->pEax;
- pContext->Ecx = *pRegDisp->pEcx;
- pContext->Edx = *pRegDisp->pEdx;
- pContext->Esp = pRegDisp->Esp;
+ pContext->Edi = *pRegDisp->GetEdiLocation();
+ pContext->Esi = *pRegDisp->GetEsiLocation();
+ pContext->Ebx = *pRegDisp->GetEbxLocation();
+ pContext->Ebp = *pRegDisp->GetEbpLocation();
+ pContext->Eax = *pRegDisp->GetEaxLocation();
+ pContext->Ecx = *pRegDisp->GetEcxLocation();
+ pContext->Edx = *pRegDisp->GetEdxLocation();
+ pContext->Esp = pRegDisp->SP;
pContext->Eip = pRegDisp->ControlPC;
// If we still have the pointer to the leaf CONTEXT, and the leaf CONTEXT is the same as the CONTEXT for
diff --git a/src/debug/daccess/dacfn.cpp b/src/debug/daccess/dacfn.cpp
index d8bae7746f..33dfa10b54 100644
--- a/src/debug/daccess/dacfn.cpp
+++ b/src/debug/daccess/dacfn.cpp
@@ -219,7 +219,7 @@ DacWriteAll(TADDR addr, PVOID buffer, ULONG32 size, bool throwEx)
#ifdef FEATURE_PAL
HRESULT
-DacVirtualUnwind(DWORD threadId, PCONTEXT context, PT_KNONVOLATILE_CONTEXT_POINTERS contextPointers)
+DacVirtualUnwind(DWORD threadId, PT_CONTEXT context, PT_KNONVOLATILE_CONTEXT_POINTERS contextPointers)
{
if (!g_dacImpl)
{
diff --git a/src/debug/daccess/datatargetadapter.cpp b/src/debug/daccess/datatargetadapter.cpp
index f2a1cc652a..4d4031d724 100644
--- a/src/debug/daccess/datatargetadapter.cpp
+++ b/src/debug/daccess/datatargetadapter.cpp
@@ -127,8 +127,12 @@ DataTargetAdapter::GetPlatform(
platform = CORDB_PLATFORM_POSIX_ARM;
break;
- case IMAGE_FILE_MACHINE_IA64:
case IMAGE_FILE_MACHINE_ARM64:
+ ulExpectedPointerSize = 8;
+ platform = CORDB_PLATFORM_POSIX_ARM64;
+ break;
+
+ case IMAGE_FILE_MACHINE_IA64:
_ASSERTE_MSG(false, "Not supported platform.");
return E_NOTIMPL;
diff --git a/src/debug/daccess/dirs.proj b/src/debug/daccess/dirs.proj
deleted file mode 100644
index 795d462778..0000000000
--- a/src/debug/daccess/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\daccess.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/debug/daccess/enummem.cpp b/src/debug/daccess/enummem.cpp
index d66af05769..0f38aa582a 100644
--- a/src/debug/daccess/enummem.cpp
+++ b/src/debug/daccess/enummem.cpp
@@ -970,7 +970,7 @@ HRESULT ClrDataAccess::EnumMemWalkStackHelper(CLRDataEnumMemoryFlags flags,
// Pulls in sequence points and local variable info
DebugInfoManager::EnumMemoryRegionsForMethodDebugInfo(flags, pMethodDesc);
-#ifdef WIN64EXCEPTIONS
+#if defined(WIN64EXCEPTIONS) && defined(USE_GC_INFO_DECODER)
if (addr != NULL)
{
@@ -988,7 +988,7 @@ HRESULT ClrDataAccess::EnumMemWalkStackHelper(CLRDataEnumMemoryFlags flags,
DacEnumMemoryRegion(dac_cast<TADDR>(pGCInfo), gcDecoder.GetNumBytesRead(), true);
}
}
-#endif // WIN64EXCEPTIONS
+#endif // WIN64EXCEPTIONS && USE_GC_INFO_DECODER
}
pMethodDefinition.Clear();
}
diff --git a/src/debug/dbgutil/dbgutil.props b/src/debug/dbgutil/dbgutil.props
deleted file mode 100644
index 520b2c6010..0000000000
--- a/src/debug/dbgutil/dbgutil.props
+++ /dev/null
@@ -1,14 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <TargetType>LIBRARY</TargetType>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <LinkSubsystem>windows</LinkSubsystem>
- <UseMsvcrt />
- <ExceptionHandling>$(Sehonly)</ExceptionHandling>
- <UserIncludes>$(UserIncludes);$(Clrbase)\src\Debug\inc;</UserIncludes>
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
- </PropertyGroup>
- <ItemGroup>
- <CppCompile Include="$(Clrbase)\src\Debug\dbgutil\dbgutil.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/debug/dbgutil/dirs.proj b/src/debug/dbgutil/dirs.proj
deleted file mode 100644
index f4c41b903a..0000000000
--- a/src/debug/dbgutil/dirs.proj
+++ /dev/null
@@ -1,16 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\dbgutil.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/debug/di/DI.props b/src/debug/di/DI.props
deleted file mode 100644
index 1d7336dab0..0000000000
--- a/src/debug/di/DI.props
+++ /dev/null
@@ -1,86 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!-- These features need to be enabled for each build artifact that wants to use them, they aren't controlled at the SKU level-->
- <PropertyGroup>
- <FeatureMetadataCustomDataSource>true</FeatureMetadataCustomDataSource>
- <FeatureMetadataDebuggeeDataSource>true</FeatureMetadataDebuggeeDataSource>
- </PropertyGroup>
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Debug\XPlatCommon.props"/>
- <!--Leaf project Properties-->
- <PropertyGroup>
- <UserIncludes>
- $(UserIncludes);
- ..;
- ..\..\inc;
- ..\..\inc\dump;
- ..\..\..\vm;
- $(VCToolsIncPath);
- </UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE -DFEATURE_NO_HOST -DFEATURE_METADATA_LOAD_TRUSTED_IMAGES</ClAdditionalOptions>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader Condition="'$(CCOVER)' == ''">stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders Condition="'$(CCOVER)' == ''">true</EnableCxxPCHHeaders>
- <!--PCH: Both precompiled header and cpp are on the same ..\ path this is likely to be wrong.-->
- <PCHCompile Condition="'$(CCOVER)' == ''">..\stdafx.cpp</PCHCompile>
- <LinkNoLibraries>true</LinkNoLibraries>
- <LinkUseCMT>true</LinkUseCMT>
- <UseMsvcrt />
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostLocal'" Include="$(ClrSrcDirectory)inc\corguids.nativeproj" />
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinx86'" Include="$(ClrSrcDirectory)incx86\corguids.nativeproj" />
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinAMD64'" Include="$(ClrSrcDirectory)incamd64\corguids.nativeproj" />
- </ItemGroup>
- <ItemGroup>
- <SourcesPublish Include="..\publish.cpp" />
- </ItemGroup>
- <ItemGroup>
- <SourcesShim Include="..\ShimProcess.cpp" />
- <SourcesShim Include="..\ShimCallback.cpp" />
- <SourcesShim Include="..\ShimEvents.cpp" />
- <SourcesShim Include="..\ShimDataTarget.cpp" />
- <SourcesShim Include="..\ShimStackWalk.cpp" />
- </ItemGroup>
- <ItemGroup>
- <SourcesRightside Include="..\breakpoint.cpp" />
- <SourcesRightside Include="..\cordb.cpp" />
- <SourcesRightside Include="..\DbgTransportManager.cpp" />
- <SourcesRightside Include="..\DIValue.cpp" />
- <SourcesRightside Include="..\hash.cpp" />
- <SourcesRightside Include="..\module.cpp" />
- <SourcesRightside Include="..\NativePipeline.cpp" />
- <SourcesRightside Include="..\PlatformSpecific.cpp" />
- <SourcesRightside Include="..\process.cpp" />
- <SourcesRightside Include="..\RsAppDomain.cpp" />
- <SourcesRightside Include="..\RsAssembly.cpp" />
- <SourcesRightside Include="..\RsClass.cpp" />
- <SourcesRightside Include="..\RsFunction.cpp" />
- <SourcesRightside Include="..\RsMain.cpp" />
- <SourcesRightside Include="..\RsMda.cpp" />
- <SourcesRightside Include="..\RsRegSetCommon.cpp" />
- <SourcesRightside Include="..\RsStackWalk.cpp" />
- <SourcesRightside Include="..\RsThread.cpp" />
- <SourcesRightside Include="..\RsType.cpp" />
- <SourcesRightside Include="..\shared.cpp" />
- <SourcesRightside Include="..\symbolinfo.cpp" />
- <SourcesRightside Include="..\ValueHome.cpp" />
- </ItemGroup>
- <ItemGroup>
- <CppCompile Include="@(SourcesPublish)" />
- <CppCompile Include="@(SourcesShim)" />
- <CppCompile Include="@(SourcesRightside)" />
- <AssembleAmd64 Condition="'$(BuildArchitecture)' == 'amd64' and '$(CrossTargetArchitecture)' != 'arm64'" Include="..\amd64\floatconversion.asm" />
- </ItemGroup>
- <ItemGroup Condition="'$(BuildArchitecture)' == 'arm64'">
- <PreprocessAssembleArm Include="..\arm64\floatconversion.asm" />
- <AssembleArm64 Include="$(IntermediateOutputDirectory)\floatconversion.i" />
- </ItemGroup>
- <!--Import the targets-->
-</Project>
diff --git a/src/debug/di/dbi.sln b/src/debug/di/dbi.sln
deleted file mode 100644
index 33cbec162c..0000000000
--- a/src/debug/di/dbi.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbi", "dbi.vcxproj", "{D8445C62-03DC-4D6A-A2F2-1AAF31577151}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {D8445C62-03DC-4D6A-A2F2-1AAF31577151}.Debug|Win32.ActiveCfg = Debug|Win32
- {D8445C62-03DC-4D6A-A2F2-1AAF31577151}.Debug|Win32.Build.0 = Debug|Win32
- {D8445C62-03DC-4D6A-A2F2-1AAF31577151}.Release|Win32.ActiveCfg = Release|Win32
- {D8445C62-03DC-4D6A-A2F2-1AAF31577151}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/src/debug/di/dbi.vcxproj b/src/debug/di/dbi.vcxproj
deleted file mode 100644
index 08533b7240..0000000000
--- a/src/debug/di/dbi.vcxproj
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{D8445C62-03DC-4D6A-A2F2-1AAF31577151}</ProjectGuid>
- <Keyword>Win32Proj</Keyword>
- <RootNamespace>dbi</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v110</PlatformToolset>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v110</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <LinkIncremental>true</LinkIncremental>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <LinkIncremental>false</LinkIncremental>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;DBI_EXPORTS;DBG_TARGET_X86;_TARGET_X86_;VS_COMPILE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\inc;..\..\inc;C:\clr_next\src\InternalApis\Sys_clr\inc;C:\CLR_Next\binaries\amd64chk\IntraPartitionAPIs\clr\inc;C:\CLR_Next\src\ndp\Common\Inc\version;C:\CLR_Next\binaries\amd64chk\SysBuild\Version;..\inc\i386;..\inc\dump</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Windows</SubSystem>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;DBI_EXPORTS;DBG_TARGET_X86;_TARGET_X86_;VS_COMPILE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\inc;..\..\inc;C:\clr_next\src\InternalApis\Sys_clr\inc;C:\CLR_Next\binaries\amd64chk\IntraPartitionAPIs\clr\inc;C:\CLR_Next\src\ndp\Common\Inc\version;C:\CLR_Next\binaries\amd64chk\SysBuild\Version;;..\inc\i386</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Windows</SubSystem>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClInclude Include="classfactory.h" />
- <ClInclude Include="DbgTransportManager.h" />
- <ClInclude Include="DDPack.h" />
- <ClInclude Include="EventChannel.h" />
- <ClInclude Include="EventRedirectionPipeline.h" />
- <ClInclude Include="helpers.h" />
- <ClInclude Include="NativePipeline.h" />
- <ClInclude Include="RsEnumerator.hpp" />
- <ClInclude Include="RSPriv.h" />
- <ClInclude Include="ShimDataTarget.h" />
- <ClInclude Include="shimpriv.h" />
- <ClInclude Include="StdAfx.h" />
- <ClInclude Include="symbolinfo.h" />
- </ItemGroup>
- <ItemGroup>
- <None Include="RSPriv.inl" />
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="breakpoint.cpp" />
- <ClCompile Include="cordb.cpp" />
- <ClCompile Include="DbgTransportManager.cpp" />
- <ClCompile Include="DbgTransportPipeline.cpp" />
- <ClCompile Include="DDPack.cpp" />
- <ClCompile Include="DIValue.cpp" />
- <ClCompile Include="EventRedirectionPipeline.cpp" />
- <ClCompile Include="hash.cpp" />
- <ClCompile Include="i386\CordbRegisterSet.cpp" />
- <ClCompile Include="i386\primitives.cpp" />
- <ClCompile Include="LocalEventChannel.cpp" />
- <ClCompile Include="module.cpp" />
- <ClCompile Include="NativePipeline.cpp" />
- <ClCompile Include="PlatformSpecific.cpp" />
- <ClCompile Include="process.cpp" />
- <ClCompile Include="publish.cpp" />
- <ClCompile Include="RemoteEventChannel.cpp" />
- <ClCompile Include="RotorPipeline.cpp" />
- <ClCompile Include="RsAppDomain.cpp" />
- <ClCompile Include="RsAssembly.cpp" />
- <ClCompile Include="rsclass.cpp" />
- <ClCompile Include="rsfunction.cpp" />
- <ClCompile Include="RsMain.cpp" />
- <ClCompile Include="RsMda.cpp" />
- <ClCompile Include="RSRegSetCommon.cpp" />
- <ClCompile Include="RsStackWalk.cpp" />
- <ClCompile Include="RsThread.cpp" />
- <ClCompile Include="RsType.cpp" />
- <ClCompile Include="shared.cpp" />
- <ClCompile Include="shimcallback.cpp" />
- <ClCompile Include="ShimDataTarget.cpp" />
- <ClCompile Include="ShimEvents.cpp" />
- <ClCompile Include="ShimLocalDataTarget.cpp" />
- <ClCompile Include="ShimProcess.cpp" />
- <ClCompile Include="ShimRemoteDataTarget.cpp" />
- <ClCompile Include="ShimStackWalk.cpp" />
- <ClCompile Include="StdAfx.cpp" />
- <ClCompile Include="symbolinfo.cpp" />
- <ClCompile Include="ValueHome.cpp" />
- <ClCompile Include="WindowsPipeline.cpp" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/src/debug/di/dirs.proj b/src/debug/di/dirs.proj
deleted file mode 100644
index c5a98947e5..0000000000
--- a/src/debug/di/dirs.proj
+++ /dev/null
@@ -1,18 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(FeatureDbiDebugging)'=='true'" Include="hostlocal\di.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/debug/di/rspriv.h b/src/debug/di/rspriv.h
index 18920add5d..8f369b7414 100644
--- a/src/debug/di/rspriv.h
+++ b/src/debug/di/rspriv.h
@@ -6929,11 +6929,11 @@ public:
// new-style constructor
CordbMiscFrame(DebuggerIPCE_JITFuncData * pJITFuncData);
-#if defined(DBG_TARGET_WIN64) || defined(DBG_TARGET_ARM)
+#ifdef WIN64EXCEPTIONS
SIZE_T parentIP;
FramePointer fpParentOrSelf;
bool fIsFilterFunclet;
-#endif // DBG_TARGET_WIN64 || DBG_TARGET_ARM
+#endif // WIN64EXCEPTIONS
};
diff --git a/src/debug/di/rsthread.cpp b/src/debug/di/rsthread.cpp
index a4660be570..02fae00b0f 100644
--- a/src/debug/di/rsthread.cpp
+++ b/src/debug/di/rsthread.cpp
@@ -5849,11 +5849,11 @@ CordbMiscFrame::CordbMiscFrame()
// the real constructor which stores the funclet-related information in the CordbMiscFrame
CordbMiscFrame::CordbMiscFrame(DebuggerIPCE_JITFuncData * pJITFuncData)
{
-#if defined(DBG_TARGET_WIN64) || defined(DBG_TARGET_ARM)
+#ifdef WIN64EXCEPTIONS
this->parentIP = pJITFuncData->parentNativeOffset;
this->fpParentOrSelf = pJITFuncData->fpParentOrSelf;
this->fIsFilterFunclet = (pJITFuncData->fIsFilterFrame == TRUE);
-#endif // DBG_TARGET_WIN64 || DBG_TARGET_ARM
+#endif // WIN64EXCEPTIONS
}
/* ------------------------------------------------------------------------- *
diff --git a/src/debug/dirs.proj b/src/debug/dirs.proj
deleted file mode 100644
index 43aa2dd262..0000000000
--- a/src/debug/dirs.proj
+++ /dev/null
@@ -1,23 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="ee\dirs.proj" />
- <ProjectFile Condition="'$(FeatureDbiDebugging)'=='true'" Include="di\dirs.proj" />
- <ProjectFile Include="ildbsymlib\dirs.proj" />
- <ProjectFile Include="daccess\dirs.proj" />
- <ProjectFile Include="shim\dirs.proj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/debug/ee/DIRS.proj b/src/debug/ee/DIRS.proj
deleted file mode 100644
index 63dd0c8afb..0000000000
--- a/src/debug/ee/DIRS.proj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--The following projects will build during PHASE 1-->
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="wks\wks.nativeproj" />
- <ProjectFile Include="dac\dirs.proj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/debug/ee/DebuggerEE.vcproj b/src/debug/ee/DebuggerEE.vcproj
deleted file mode 100644
index 6df51a0fd6..0000000000
--- a/src/debug/ee/DebuggerEE.vcproj
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="DebuggerEE"
- ProjectGUID="{31EEC9FD-A233-4B36-8762-2D30A030C319}"
- Keyword="MakeFileProj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="0">
- <Tool
- Name="VCNMakeTool"
- Output="DebuggerEE.exe"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="0">
- <Tool
- Name="VCNMakeTool"
- Output="DebuggerEE.exe"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="controller.cpp">
- </File>
- <File
- RelativePath="debugger.cpp">
- </File>
- <File
- RelativePath="frameinfo.cpp">
- </File>
- <File
- RelativePath="ilwalker.cpp">
- </File>
- <File
- RelativePath="lscommon.cpp">
- </File>
- <File
- RelativePath="lsdivalue.cpp">
- </File>
- <File
- RelativePath="lshash.cpp">
- </File>
- <File
- RelativePath="lsmodule.cpp">
- </File>
- <File
- RelativePath="lsprocess.cpp">
- </File>
- <File
- RelativePath="lsthread.cpp">
- </File>
- <File
- RelativePath="rcthread.cpp">
- </File>
- <File
- RelativePath="stdafx.cpp">
- </File>
- <File
- RelativePath="thread.cpp">
- </File>
- <File
- RelativePath="i386\x86walker.cpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc">
- <File
- RelativePath="controller.h">
- </File>
- <File
- RelativePath="debugger.h">
- </File>
- <File
- RelativePath="frameinfo.h">
- </File>
- <File
- RelativePath="stdafx.h">
- </File>
- <File
- RelativePath="walker.h">
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/src/debug/ee/EE.props b/src/debug/ee/EE.props
deleted file mode 100644
index 90b9f815fd..0000000000
--- a/src/debug/ee/EE.props
+++ /dev/null
@@ -1,60 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(Clrbase)\src\Debug\SetDebugTargetLocal.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <UserIncludes>$(UserIncludes);
- $(Clrbase)\src\Debug\EE;
- $(Clrbase)\src\vm;
- $(Clrbase)\src\vm\$(TargetCpu);
- $(Clrbase)\src\Debug\inc;
- $(Clrbase)\src\Debug\inc\$(TargetCpu);
- $(Clrbase)\src\Debug\inc\dump;
- $(VCToolsIncPath);
- $(Clrbase)\src\strongname\inc</UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE -DFEATURE_NO_HOST</ClAdditionalOptions>
- <PCHHeader Condition="'$(CCOVER)' == ''">stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders Condition="'$(CCOVER)' == ''">true</EnableCxxPCHHeaders>
- <!--PCH: Both precompiled header and cpp are on the same ..\ path this is likely to be wrong.-->
- <PCHCompile Condition="'$(CCOVER)' == ''">$(Clrbase)\src\Debug\EE\stdafx.cpp</PCHCompile>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="$(Clrbase)\src\Debug\EE\controller.cpp" />
- <CppCompile Include="$(Clrbase)\src\Debug\EE\Debugger.cpp" />
- <CppCompile Include="$(Clrbase)\src\Debug\EE\DebuggerModule.cpp" />
- <CppCompile Include="$(Clrbase)\src\Debug\EE\functioninfo.cpp" />
- </ItemGroup>
- <ItemGroup>
- <SourcesNodac Include="$(Clrbase)\src\Debug\EE\funceval.cpp" />
- <SourcesNodac Include="$(Clrbase)\src\Debug\EE\RCThread.cpp" />
- <SourcesNodac Include="$(Clrbase)\src\Debug\EE\Canary.cpp" />
- <SourcesNodac Include="$(Clrbase)\src\Debug\EE\shared.cpp" />
- <SourcesNodac Include="$(Clrbase)\src\Debug\EE\frameinfo.cpp" />
- </ItemGroup>
- <ItemGroup>
- <I386Sources Condition="'$(TargetArch)' == 'i386'" Include="$(Clrbase)\src\Debug\EE\i386\x86walker.cpp" />
- <I386Sources Condition="'$(TargetArch)' == 'i386'" Include="$(Clrbase)\src\Debug\EE\i386\primitives.cpp" />
- <I386Sources Condition="'$(TargetArch)' == 'i386'" Include="$(Clrbase)\src\Debug\EE\i386\DebuggerRegDisplayHelper.cpp" />
- </ItemGroup>
- <ItemGroup>
- <Amd64Sources Condition="'$(TargetArch)' == 'amd64'" Include="$(Clrbase)\src\Debug\EE\amd64\primitives.cpp" />
- <Amd64Sources Condition="'$(TargetArch)' == 'amd64'" Include="$(Clrbase)\src\Debug\EE\amd64\Amd64walker.cpp" />
- <Amd64Sources Condition="'$(TargetArch)' == 'amd64'" Include="$(Clrbase)\src\Debug\EE\amd64\DebuggerRegDisplayHelper.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ArmSources Condition="'$(TargetArch)' == 'arm'" Include="$(Clrbase)\src\Debug\EE.\arm\primitives.cpp" />
- <ArmSources Condition="'$(TargetArch)' == 'arm'" Include="$(Clrbase)\src\Debug\EE\arm\ArmWalker.cpp" />
- </ItemGroup>
- <ItemGroup>
- <Arm64Sources Condition="'$(TargetArch)' == 'arm64'" Include="$(Clrbase)\src\Debug\EE\arm64\primitives.cpp" />
- <Arm64Sources Condition="'$(TargetArch)' == 'arm64'" Include="$(Clrbase)\src\Debug\EE\arm64\Arm64Walker.cpp" />
- </ItemGroup>
-
- <!--Import the targets-->
-</Project>
diff --git a/src/debug/ee/amd64/amd64walker.cpp b/src/debug/ee/amd64/amd64walker.cpp
index 836d21486e..39e97841b4 100644
--- a/src/debug/ee/amd64/amd64walker.cpp
+++ b/src/debug/ee/amd64/amd64walker.cpp
@@ -131,10 +131,11 @@ void NativeWalker::Decode()
{
case 0xff:
{
-
BYTE modrm = *ip++;
- _ASSERT(modrm != NULL);
+ // Ignore "inc dword ptr [reg]" instructions
+ if (modrm == 0)
+ break;
BYTE mod = (modrm & 0xC0) >> 6;
BYTE reg = (modrm & 0x38) >> 3;
diff --git a/src/debug/ee/arm64/dbghelpers.S b/src/debug/ee/arm64/dbghelpers.S
new file mode 100644
index 0000000000..07ed04acd5
--- /dev/null
+++ b/src/debug/ee/arm64/dbghelpers.S
@@ -0,0 +1,25 @@
+//Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#include "unixasmmacros.inc"
+
+NESTED_ENTRY FuncEvalHijack, _TEXT, FuncEvalHijackPersonalityRoutine
+
+// NOTE: FuncEvalHijackPersonalityRoutine is dependent on the stack layout so if
+// you change the prolog you will also need to update the personality routine.
+
+// push arg to the stack so our personality routine can find it
+// push lr to get good stacktrace in debugger
+
+PROLOG_SAVE_REG_PAIR fp, lr, #-32
+
+ str x0, [sp, #16]
+ // FuncEvalHijackWorker returns the address we should jump to.
+ bl FuncEvalHijackWorker
+
+ EPILOG_STACK_FREE 32
+ EPILOG_BRANCH_REG x0
+NESTED_END FuncEvalHijack, _TEXT
+
+//NESTED_ENTRY ExceptionHijack,,ExceptionHijackPersonalityRoutine \ No newline at end of file
diff --git a/src/debug/ee/dac/dirs.proj b/src/debug/ee/dac/dirs.proj
deleted file mode 100644
index 8b766561f5..0000000000
--- a/src/debug/ee/dac/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--The following projects will build during PHASE 1-->
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\dacwks.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/debug/ee/debugger.cpp b/src/debug/ee/debugger.cpp
index 2aed8bd820..1f2126b9f0 100644
--- a/src/debug/ee/debugger.cpp
+++ b/src/debug/ee/debugger.cpp
@@ -1898,7 +1898,7 @@ void Debugger::SendCreateProcess(DebuggerLockHolder * pDbgLockHolder)
#if defined(FEATURE_CORECLR) && !defined(FEATURE_PAL)
-HANDLE g_hContinueStartupEvent = NULL;
+HANDLE g_hContinueStartupEvent = INVALID_HANDLE_VALUE;
CLR_ENGINE_METRICS g_CLREngineMetrics = {
sizeof(CLR_ENGINE_METRICS),
@@ -1945,7 +1945,7 @@ void NotifyDebuggerOfTelestoStartup()
// enumeration of this process will get back a valid continue event
// the instant we signal the startup notification event.
- CONSISTENCY_CHECK(NULL == g_hContinueStartupEvent);
+ CONSISTENCY_CHECK(INVALID_HANDLE_VALUE == g_hContinueStartupEvent);
g_hContinueStartupEvent = WszCreateEvent(NULL, TRUE, FALSE, NULL);
CONSISTENCY_CHECK(INVALID_HANDLE_VALUE != g_hContinueStartupEvent); // we reserve this value for error conditions in EnumerateCLRs
@@ -2173,7 +2173,14 @@ HRESULT Debugger::Startup(void)
// Signal the debugger (via dbgshim) and wait until it is ready for us to
// continue. This needs to be outside the lock and after the transport is
// initialized.
- PAL_NotifyRuntimeStarted();
+ if (PAL_NotifyRuntimeStarted())
+ {
+ // The runtime was successfully launched and attached so mark it now
+ // so no notifications are missed especially the initial module load
+ // which would cause debuggers problems with reliable setting breakpoints
+ // in startup code or Main.
+ MarkDebuggerAttachedInternal();
+ }
#endif // FEATURE_PAL
// We don't bother changing this process's permission.
diff --git a/src/debug/ee/debugger.inl b/src/debug/ee/debugger.inl
index dbd5479a69..57372868c0 100644
--- a/src/debug/ee/debugger.inl
+++ b/src/debug/ee/debugger.inl
@@ -235,14 +235,14 @@ inline void FuncEvalFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
// Update all registers in the reg display from the CONTEXT we stored when the thread was hijacked for this func
// eval. We have to update all registers, not just the callee saved registers, because we can hijack a thread at any
// point for a func eval, not just at a call site.
- pRD->pEdi = &(pDE->m_context.Edi);
- pRD->pEsi = &(pDE->m_context.Esi);
- pRD->pEbx = &(pDE->m_context.Ebx);
- pRD->pEdx = &(pDE->m_context.Edx);
- pRD->pEcx = &(pDE->m_context.Ecx);
- pRD->pEax = &(pDE->m_context.Eax);
- pRD->pEbp = &(pDE->m_context.Ebp);
- pRD->Esp = (DWORD)GetSP(&pDE->m_context);
+ pRD->SetEdiLocation(&(pDE->m_context.Edi));
+ pRD->SetEsiLocation(&(pDE->m_context.Esi));
+ pRD->SetEbxLocation(&(pDE->m_context.Ebx));
+ pRD->SetEdxLocation(&(pDE->m_context.Edx));
+ pRD->SetEcxLocation(&(pDE->m_context.Ecx));
+ pRD->SetEaxLocation(&(pDE->m_context.Eax));
+ pRD->SetEbpLocation(&(pDE->m_context.Ebp));
+ pRD->SP = (DWORD)GetSP(&pDE->m_context);
pRD->PCTAddr = GetReturnAddressPtr();
pRD->ControlPC = *PTR_PCODE(pRD->PCTAddr);
diff --git a/src/debug/ee/i386/x86walker.cpp b/src/debug/ee/i386/x86walker.cpp
index dd0346889f..8b62797484 100644
--- a/src/debug/ee/i386/x86walker.cpp
+++ b/src/debug/ee/i386/x86walker.cpp
@@ -292,28 +292,28 @@ DWORD NativeWalker::GetRegisterValue(int registerNumber)
switch (registerNumber)
{
case 0:
- return *m_registers->pEax;
+ return *m_registers->GetEaxLocation();
break;
case 1:
- return *m_registers->pEcx;
+ return *m_registers->GetEcxLocation();
break;
case 2:
- return *m_registers->pEdx;
+ return *m_registers->GetEdxLocation();
break;
case 3:
- return *m_registers->pEbx;
+ return *m_registers->GetEbxLocation();
break;
case 4:
- return m_registers->Esp;
+ return m_registers->SP;
break;
case 5:
- return *m_registers->pEbp;
+ return *m_registers->GetEbpLocation();
break;
case 6:
- return *m_registers->pEsi;
+ return *m_registers->GetEsiLocation();
break;
case 7:
- return *m_registers->pEdi;
+ return *m_registers->GetEdiLocation();
break;
default:
_ASSERTE(!"Invalid register number!");
diff --git a/src/debug/ee/wks/CMakeLists.txt b/src/debug/ee/wks/CMakeLists.txt
index 2b1aff57a1..1088355f12 100644
--- a/src/debug/ee/wks/CMakeLists.txt
+++ b/src/debug/ee/wks/CMakeLists.txt
@@ -55,7 +55,7 @@ else ()
add_compile_options(-fPIC)
-if(CLR_CMAKE_PLATFORM_ARCH_AMD64 OR CLR_CMAKE_PLATFORM_ARCH_ARM OR CLR_CMAKE_PLATFORM_ARCH_I386)
+if(CLR_CMAKE_PLATFORM_ARCH_AMD64 OR CLR_CMAKE_PLATFORM_ARCH_ARM OR CLR_CMAKE_PLATFORM_ARCH_ARM64 OR CLR_CMAKE_PLATFORM_ARCH_I386)
add_library_clr(cordbee_wks ${CORDBEE_SOURCES_WKS} ../${ARCH_SOURCES_DIR}/dbghelpers.S)
elseif(CLR_CMAKE_PLATFORM_ARCH_ARM64)
add_library_clr(cordbee_wks ${CORDBEE_SOURCES_WKS})
diff --git a/src/debug/ee/wks/wks.nativeproj b/src/debug/ee/wks/wks.nativeproj
deleted file mode 100644
index 304c591485..0000000000
--- a/src/debug/ee/wks/wks.nativeproj
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <!--Leaf project Properties-->
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <OutputName>cordbee_wks</OutputName>
- <TargetType>LIBRARY</TargetType>
- <UserAssembleAmd64IncludePath>
- $(UserAssembleAmd64IncludePath);
- ..\..\..\vm\AMD64;
- </UserAssembleAmd64IncludePath>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <Import Project="..\EE.props" />
- <ItemGroup>
- <CppCompile Include="@(SourcesNodac)" />
- <CppCompile Include="@(I386Sources)" />
- <CppCompile Include="@(Amd64Sources)" />
- <CppCompile Include="@(ArmSources)" />
- <CppCompile Include="@(Arm64Sources)" />
- <PreprocessAssembleArm Condition="'$(BuildArchitecture)' == 'arm'" Include="..\arm\dbghelpers.asm" />
- <PreprocessAssembleArm Condition="'$(BuildArchitecture)' == 'arm64'" Include="..\arm64\dbghelpers.asm" />
- <AssembleArm Condition="'$(BuildArchitecture)' == 'arm'" Include="$(IntermediateOutputDirectory)\dbghelpers.i" />
- <AssembleArm64 Condition="'$(BuildArchitecture)' == 'arm64'" Include="$(IntermediateOutputDirectory)\dbghelpers.i" />
- <Assemble386 Condition="'$(BuildArchitecture)' == 'i386'" Include="..\i386\dbghelpers.asm" />
- <AssembleAmd64 Condition="'$(BuildArchitecture)' == 'amd64'" Include="..\amd64\dbghelpers.asm" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/debug/ildbsymlib/dirs.proj b/src/debug/ildbsymlib/dirs.proj
deleted file mode 100644
index b171f7bca5..0000000000
--- a/src/debug/ildbsymlib/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(FeatureDbiDebugging)'=='true'" Include="HostLocal\ildbsymlib.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/debug/ildbsymlib/ildbsymlib.props b/src/debug/ildbsymlib/ildbsymlib.props
deleted file mode 100644
index 2a64f2eb7e..0000000000
--- a/src/debug/ildbsymlib/ildbsymlib.props
+++ /dev/null
@@ -1,29 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <TargetType>LIBRARY</TargetType>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <LinkSubsystem>windows</LinkSubsystem>
- <UseMsvcrt />
- <ExceptionHandling>$(Sehonly)</ExceptionHandling>
- <UserIncludes>$(UserIncludes);
- ..\;
- ..\..\..\inc;
- </UserIncludes>
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="..\symread.cpp" />
- <CppCompile Include="..\symbinder.cpp" />
- <CppCompile Include="..\ildbsymbols.cpp" />
- <CppCompile Include="..\symwrite.cpp" />
- </ItemGroup>
-
-</Project>
diff --git a/src/debug/ildbsymlib/ildbsymlib.vcproj b/src/debug/ildbsymlib/ildbsymlib.vcproj
deleted file mode 100644
index 07202121d9..0000000000
--- a/src/debug/ildbsymlib/ildbsymlib.vcproj
+++ /dev/null
@@ -1,213 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="ildbsymlib"
- ProjectGUID="{08C26436-55DD-4332-804C-C963A859E4DE}"
- RootNamespace="ildbsymlib"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="4"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=".;..\..\inc"
- PreprocessorDefinitions="WIN32;_DEBUG;_LIB;-DUNICODE -D_UNICODE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="4"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=".;..\..\inc"
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB;-DUNICODE -D_UNICODE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\classfactory.h"
- >
- </File>
- <File
- RelativePath="..\..\inc\IldbSymLib.h"
- >
- </File>
- <File
- RelativePath=".\pch.h"
- >
- </File>
- <File
- RelativePath=".\pdbdata.h"
- >
- </File>
- <File
- RelativePath=".\symbinder.h"
- >
- </File>
- <File
- RelativePath=".\SymRead.h"
- >
- </File>
- <File
- RelativePath=".\SymWrite.h"
- >
- </File>
- <File
- RelativePath=".\umisc.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\ildbsymbols.cpp"
- >
- </File>
- <File
- RelativePath=".\symbinder.cpp"
- >
- </File>
- <File
- RelativePath=".\SymRead.cpp"
- >
- </File>
- <File
- RelativePath=".\symwrite.cpp"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/src/debug/inc/dbgipcevents.h b/src/debug/inc/dbgipcevents.h
index 6ace36e011..1b4dec7c16 100644
--- a/src/debug/inc/dbgipcevents.h
+++ b/src/debug/inc/dbgipcevents.h
@@ -1355,11 +1355,11 @@ struct MSLAYOUT DebuggerIPCE_JITFuncData
LSPTR_DJI nativeCodeJITInfoToken;
VMPTR_MethodDesc vmNativeCodeMethodDescToken;
-#if defined(DBG_TARGET_WIN64) || defined(DBG_TARGET_ARM)
+#ifdef WIN64EXCEPTIONS
BOOL fIsFilterFrame;
SIZE_T parentNativeOffset;
FramePointer fpParentOrSelf;
-#endif // DBG_TARGET_WIN64 || DBG_TARGET_ARM
+#endif // WIN64EXCEPTIONS
// indicates if the MethodDesc is a generic function or a method inside a generic class (or
// both!).
diff --git a/src/debug/inc/dbgtargetcontext.h b/src/debug/inc/dbgtargetcontext.h
index 22b1c84096..c2b45ee059 100644
--- a/src/debug/inc/dbgtargetcontext.h
+++ b/src/debug/inc/dbgtargetcontext.h
@@ -371,6 +371,14 @@ typedef DECLSPEC_ALIGN(8) struct {
#define DT_CONTEXT_FULL (DT_CONTEXT_CONTROL | DT_CONTEXT_INTEGER | DT_CONTEXT_FLOATING_POINT)
#define DT_CONTEXT_ALL (DT_CONTEXT_CONTROL | DT_CONTEXT_INTEGER | DT_CONTEXT_FLOATING_POINT | DT_CONTEXT_DEBUG_REGISTERS)
+#define DT_ARM64_MAX_BREAKPOINTS 8
+#define DT_ARM64_MAX_WATCHPOINTS 2
+
+typedef struct {
+ ULONGLONG Low;
+ LONGLONG High;
+} DT_NEON128;
+
typedef DECLSPEC_ALIGN(16) struct {
//
// Control flags.
@@ -426,7 +434,7 @@ typedef DECLSPEC_ALIGN(16) struct {
// Floating Point/NEON Registers
//
- /* +0x110 */ NEON128 V[32];
+ /* +0x110 */ DT_NEON128 V[32];
/* +0x310 */ DWORD Fpcr;
/* +0x314 */ DWORD Fpsr;
@@ -434,10 +442,10 @@ typedef DECLSPEC_ALIGN(16) struct {
// Debug registers
//
- /* +0x318 */ DWORD Bcr[ARM64_MAX_BREAKPOINTS];
- /* +0x338 */ DWORD64 Bvr[ARM64_MAX_BREAKPOINTS];
- /* +0x378 */ DWORD Wcr[ARM64_MAX_WATCHPOINTS];
- /* +0x380 */ DWORD64 Wvr[ARM64_MAX_WATCHPOINTS];
+ /* +0x318 */ DWORD Bcr[DT_ARM64_MAX_BREAKPOINTS];
+ /* +0x338 */ DWORD64 Bvr[DT_ARM64_MAX_BREAKPOINTS];
+ /* +0x378 */ DWORD Wcr[DT_ARM64_MAX_WATCHPOINTS];
+ /* +0x380 */ DWORD64 Wvr[DT_ARM64_MAX_WATCHPOINTS];
/* +0x390 */
} DT_CONTEXT;
diff --git a/src/debug/shared/i386/primitives.cpp b/src/debug/shared/i386/primitives.cpp
index e47f3e731e..ab22a5d4b1 100644
--- a/src/debug/shared/i386/primitives.cpp
+++ b/src/debug/shared/i386/primitives.cpp
@@ -88,12 +88,12 @@ void SetDebuggerREGDISPLAYFromREGDISPLAY(DebuggerREGDISPLAY* pDRD, REGDISPLAY* p
// Frame pointer
LPVOID FPAddress = GetRegdisplayFPAddress(pRD);
pDRD->FP = (FPAddress == NULL ? 0 : *((SIZE_T *)FPAddress));
- pDRD->Edi = (pRD->pEdi == NULL ? 0 : *(pRD->pEdi));
- pDRD->Esi = (pRD->pEsi == NULL ? 0 : *(pRD->pEsi));
- pDRD->Ebx = (pRD->pEbx == NULL ? 0 : *(pRD->pEbx));
- pDRD->Edx = (pRD->pEdx == NULL ? 0 : *(pRD->pEdx));
- pDRD->Ecx = (pRD->pEcx == NULL ? 0 : *(pRD->pEcx));
- pDRD->Eax = (pRD->pEax == NULL ? 0 : *(pRD->pEax));
+ pDRD->Edi = (pRD->GetEdiLocation() == NULL ? 0 : *pRD->GetEdiLocation());
+ pDRD->Esi = (pRD->GetEsiLocation() == NULL ? 0 : *pRD->GetEsiLocation());
+ pDRD->Ebx = (pRD->GetEbxLocation() == NULL ? 0 : *pRD->GetEbxLocation());
+ pDRD->Edx = (pRD->GetEdxLocation() == NULL ? 0 : *pRD->GetEdxLocation());
+ pDRD->Ecx = (pRD->GetEcxLocation() == NULL ? 0 : *pRD->GetEcxLocation());
+ pDRD->Eax = (pRD->GetEsiLocation() == NULL ? 0 : *pRD->GetEaxLocation());
#if defined(USE_REMOTE_REGISTER_ADDRESS)
pDRD->pFP = PushedRegAddr(pRD, FPAddress);
@@ -113,7 +113,7 @@ void SetDebuggerREGDISPLAYFromREGDISPLAY(DebuggerREGDISPLAY* pDRD, REGDISPLAY* p
pDRD->pEax = NULL;
#endif // !USE_REMOTE_REGISTER_ADDRESS
- pDRD->SP = pRD->Esp;
+ pDRD->SP = pRD->SP;
pDRD->PC = pRD->ControlPC;
// Please leave EBP, ESP, EIP at the front so I don't have to scroll
diff --git a/src/debug/shim/debugshim.props b/src/debug/shim/debugshim.props
deleted file mode 100644
index 8d3bb3fe65..0000000000
--- a/src/debug/shim/debugshim.props
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <TargetType>LIBRARY</TargetType>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <LinkSubsystem>windows</LinkSubsystem>
- <UseMsvcrt />
- <ExceptionHandling>$(Sehonly)</ExceptionHandling>
- <UserIncludes>$(UserIncludes);
- ..\;
- ..\..\inc;
- ..\..\..\inc;
- </UserIncludes>
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
- <CDefines Condition="$(HostMachineOS)=='windows'">$(CDefines);HOST_IS_WINDOWS_OS</CDefines>
- </PropertyGroup>
- <ItemGroup>
- <CppCompile Include="..\debugshim.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/debug/shim/dirs.proj b/src/debug/shim/dirs.proj
deleted file mode 100644
index 45798d6237..0000000000
--- a/src/debug/shim/dirs.proj
+++ /dev/null
@@ -1,16 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\debugshim.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/dirs.proj b/src/dirs.proj
deleted file mode 100644
index 9442381ff0..0000000000
--- a/src/dirs.proj
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <ItemDefinitionGroup>
- <ProjectFile>
- <ProductGroups>FX</ProductGroups>
- </ProjectFile>
- </ItemDefinitionGroup>
-
- <PropertyGroup>
- <BuildInPhase0>true</BuildInPhase0>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhase2>true</BuildInPhase2>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '0'">
- <ProjectFile Include="zzbuildpreproc\zzbuildpreproc.nativeproj" />
- </ItemGroup>
-
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="inc\corguids.nativeproj" >
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="format\format.nativeproj" />
- <ProjectFile Include="shimload\shimload.nativeproj" Condition="'$(BuildProjectName)' != 'CoreSys'"/>
- <ProjectFile Include="utilcode\dirs.proj" />
- <ProjectFile Include="vm\dirs.proj" />
- <ProjectFile Include="md\dirs.proj" />
- <ProjectFile Include="classlibnative\dirs.proj" />
- <ProjectFile Include="strongname\dirs.proj" >
- <ProductGroups>FX</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="zap\dirs.proj" />
- <ProjectFile Include="gcdump\lib\gcdump.nativeproj" />
- <ProjectFile Include="debug\dirs.proj" />
- <ProjectFile Include="ipcman\dirs.proj" Condition="'$(BuildProjectName)' != 'CoreSys'" />
- <ProjectFile Include="gcinfo\dirs.proj" />
- <ProjectFile Include="delayimp\delayimp.nativeproj" Condition="'$(BuildProjectName)' != 'CoreSys'"/>
- <ProjectFile Include="dlls\dirs.proj" />
- <ProjectFile Include="unwinder\dirs.proj" Condition="'$(TargetArch)' != 'i386'" />
-
- <ProjectFile Include="jit\dirs.proj" />
- <ProjectFile Include="jit32\dirs.proj" Condition="'$(BuildArchitecture)' != 'amd64' and '$(BuildArchitecture)' != 'arm64'" />
- <ProjectFile Include="jit64\dirs.proj" Condition="'$(BuildProjectName)' != 'CoreSys'" />
-
- <ProjectFile Include="tools\dirs.proj" >
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="toolbox\dirs.proj" >
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="misc\misc.proj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 of the Desktop build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreclr)' != 'true'">
- <ProjectFile Include="defines\defines.nativeproj" />
- <ProjectFile Include="fusion\dirs.proj" />
- <ProjectFile Include="nativebinder\nativebinder.nativeproj" />
- <ProjectFile Include="security\dirs.proj" />
- <ProjectFile Include="ilasm\ilasm.nativeproj" />
- <ProjectFile Include="ildasm\dirs.proj" />
- <ProjectFile Include="profile\dirs.proj" />
- <ProjectFile Include="bcl\mscorlib.csproj" />
- <ProjectFile Include="managedlibraries\dirs.proj" />
- <ProjectFile Include="config\config.nativeproj" >
- <ProductGroups>FX</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="usagelog\usagelog.nativeproj" />
- <ProjectFile Include="lhdwshim\dirs.proj" />
- <ProjectFile Include="xmlparser\xmlparser.nativeproj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 of the CoreCLR build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreclr)' == 'true'">
- <ProjectFile Include="bcl.small\dirs.proj" />
- <ProjectFile Include="coreclr\dirs.proj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 2 of the Desktop build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '2' and '$(FeatureCoreclr)' != 'true'">
- <ProjectFile Include="managedlibraries\dirs.proj" />
- </ItemGroup>
-
- <!--The following projects will build during the default PHASE of the Desktop build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '' and '$(FeatureCoreclr)' != 'true'">
- <ProjectFile Include="managedlibraries\dirs.proj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/dlls/clretwrc/clretwrc.nativeproj b/src/dlls/clretwrc/clretwrc.nativeproj
deleted file mode 100644
index 6a9b227258..0000000000
--- a/src/dlls/clretwrc/clretwrc.nativeproj
+++ /dev/null
@@ -1,27 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>clretwrc</OutputName>
- <DllDef>$(OutputName).def</DllDef>
- <TargetType>DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
- <LinkResourceOnlyDll>true</LinkResourceOnlyDll>
- <IsProjectKLibrary>true</IsProjectKLibrary>
- <IsTestNetCoreRuntimeLibrary>true</IsTestNetCoreRuntimeLibrary>
- <IsPhoneLibrary>true</IsPhoneLibrary>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <RCResourceFile Include="clretwrc.rc" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/dlls/dbgshim/dbgshim.cpp b/src/dlls/dbgshim/dbgshim.cpp
index aeee778543..5f15cabe97 100644
--- a/src/dlls/dbgshim/dbgshim.cpp
+++ b/src/dlls/dbgshim/dbgshim.cpp
@@ -387,6 +387,19 @@ public:
return hr;
}
+ bool AreAllHandlesValid(HANDLE *handleArray, DWORD arrayLength)
+ {
+ for (int i = 0; i < (int)arrayLength; i++)
+ {
+ HANDLE h = handleArray[i];
+ if (h == INVALID_HANDLE_VALUE)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
HRESULT InternalEnumerateCLRs(HANDLE** ppHandleArray, _In_reads_(*pdwArrayLength) LPWSTR** ppStringArray, DWORD* pdwArrayLength)
{
int numTries = 0;
@@ -394,18 +407,46 @@ public:
while (numTries < 25)
{
+ hr = EnumerateCLRs(m_processId, ppHandleArray, ppStringArray, pdwArrayLength);
+
// EnumerateCLRs uses the OS API CreateToolhelp32Snapshot which can return ERROR_BAD_LENGTH or
// ERROR_PARTIAL_COPY. If we get either of those, we try wait 1/10th of a second try again (that
- // is the recommendation of the OS API owners)
- hr = EnumerateCLRs(m_processId, ppHandleArray, ppStringArray, pdwArrayLength);
+ // is the recommendation of the OS API owners).
if ((hr != HRESULT_FROM_WIN32(ERROR_PARTIAL_COPY)) && (hr != HRESULT_FROM_WIN32(ERROR_BAD_LENGTH)))
{
- break;
+ // Just return any other error or if no handles were found (which means the coreclr module wasn't found yet).
+ if (FAILED(hr) || *ppHandleArray == NULL || *pdwArrayLength <= 0)
+ {
+ return hr;
+ }
+ // If EnumerateCLRs succeeded but any of the handles are INVALID_HANDLE_VALUE, then sleep and retry
+ // also. This fixes a race condition where dbgshim catches the coreclr module just being loaded but
+ // before g_hContinueStartupEvent has been initialized.
+ if (AreAllHandlesValid(*ppHandleArray, *pdwArrayLength))
+ {
+ return hr;
+ }
+ // Clean up memory allocated in EnumerateCLRs since this path it succeeded
+ CloseCLREnumeration(*ppHandleArray, *ppStringArray, *pdwArrayLength);
+
+ *ppHandleArray = NULL;
+ *ppStringArray = NULL;
+ *pdwArrayLength = 0;
}
+
+ // Sleep and retry enumerating the runtimes
Sleep(100);
numTries++;
+
+ if (m_canceled)
+ {
+ break;
+ }
}
+ // Indicate a timeout
+ hr = HRESULT_FROM_WIN32(ERROR_TIMEOUT);
+
return hr;
}
@@ -517,9 +558,8 @@ public:
bool coreclrExists = false;
HRESULT hr = InvokeStartupCallback(&coreclrExists);
- // Because the target process is suspended on create, the toolhelp apis fail with the below errors even
- // with the retry logic in InternalEnumerateCLRs.
- if (SUCCEEDED(hr) || (hr == HRESULT_FROM_WIN32(ERROR_PARTIAL_COPY)) || (hr == HRESULT_FROM_WIN32(ERROR_BAD_LENGTH)))
+ // The retry logic in InternalEnumerateCLRs failed if ERROR_TIMEOUT was returned.
+ if (SUCCEEDED(hr) || (hr == HRESULT_FROM_WIN32(ERROR_TIMEOUT)))
{
if (!coreclrExists && !m_canceled)
{
@@ -531,8 +571,11 @@ public:
hr = InvokeStartupCallback(&coreclrExists);
if (SUCCEEDED(hr))
{
- // We should always find a coreclr module
- _ASSERTE(coreclrExists);
+ // We should always find a coreclr module so fail if we don't
+ if (!coreclrExists)
+ {
+ hr = E_FAIL;
+ }
}
}
}
@@ -1120,8 +1163,6 @@ EnumerateCLRs(
HANDLE hContinueStartupEvent = INVALID_HANDLE_VALUE;
HRESULT hr = GetContinueStartupEvent(debuggeePID, pStringArray[idx], &hContinueStartupEvent);
- _ASSERTE(SUCCEEDED(hr) == (hContinueStartupEvent != INVALID_HANDLE_VALUE));
-
pEventArray[idx] = hContinueStartupEvent;
#else
pEventArray[idx] = NULL;
@@ -1729,7 +1770,7 @@ GetContinueStartupEvent(
ThrowHR(E_FAIL);
}
- if (NULL != continueEvent)
+ if (NULL != continueEvent && INVALID_HANDLE_VALUE != continueEvent)
{
if (!DuplicateHandle(hProcess, continueEvent, GetCurrentProcess(), &continueEvent,
EVENT_MODIFY_STATE, FALSE, 0))
diff --git a/src/dlls/dbgshim/dbgshim.targets b/src/dlls/dbgshim/dbgshim.targets
deleted file mode 100644
index 8332befa5a..0000000000
--- a/src/dlls/dbgshim/dbgshim.targets
+++ /dev/null
@@ -1,94 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\utility.props"/>
- <PropertyGroup>
- <LinkUseCMT>true</LinkUseCMT>
- <UserIncludes>
- $(UserIncludes);
- ..\;
- $(VCToolsIncPath);
- $(Clrbase)\src\Debug\shim;
- </UserIncludes>
- <OutputName>dbgshim</OutputName>
- <TargetType>DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
- <CDefines>$(CDefines);UNICODE;_UNICODE;FEATURE_NO_HOST;SELF_NO_HOST</CDefines>
- <DllDef>..\dbgshim.ntdef</DllDef>
- <DllEntryPoint>_DllMainCRTStartup</DllEntryPoint>
- <ExtDelayImpLib >false</ExtDelayImpLib>
- <UseMsvcrt>false</UseMsvcrt>
- <NoLinkGdi32>true</NoLinkGdi32>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(HostMachineOS)' == 'windows'">
- <LinkDelayLoad Condition="'$(LinkDelayLoad)'!=''">$(LinkDelayLoad);</LinkDelayLoad>
- <LinkDelayLoad>$(LinkDelayLoad)user32.dll;advapi32.dll;oleaut32.dll</LinkDelayLoad>
- </PropertyGroup>
-
- <ItemGroup>
- <LinkPreCrtLibs Include="$(ClrLibPath)\utilcodestaticnohost$(XPlatHostLibSuffix).lib" >
- <!-- This project isn't factored like the others... there are many projects pointing to the current path of corguids -->
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostLocal'">$(ClrSrcDirectory)utilcode\staticnohost\staticnohost.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinx86'">$(ClrSrcDirectory)utilcode\staticnohostx86\staticnohost.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinAMD64'">$(ClrSrcDirectory)utilcode\staticnohostamd64\staticnohost.nativeproj</ProjectReference>
- </LinkPreCrtLibs>
- </ItemGroup>
- <ItemGroup>
- <!-- This lib differs between Win32 and CoreSys, so I am specifically using XPlatHostSuffix, not XPlatHostLibSuffix -->
- <!-- In retrospect the naming on those props aren't great, but I don't want to undo all the testing already done on this change
- with potential errors refactoring to a new prop name. XPlatHostLibSuffix only varies on architecture whereas XPlatHostSuffix
- varies on arch and OS -->
- <TargetLib Include="$(ClrLibPath)\debugshim$(XPlatHostSuffix).lib" />
- <ProjectReference Include="$(ClrSrcDirectory)\Debug\shim\$(XPlatHostBuildDir)\debugshim.nativeproj" />
- <TargetLib Include="$(ClrLibPath)\dbgutil$(XPlatHostLibSuffix).lib" />
- <ProjectReference Include="$(ClrSrcDirectory)\Debug\dbgutil\$(XPlatHostLibBuildDir)\dbgutil.nativeproj" />
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'windows'">
- <TargetLib Include="$(ClrLibPath)\CorGUIDS$(XPlatHostLibSuffix).lib">
- <!-- This project isn't factored like the others... there are many projects pointing to the current path of corguids -->
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostLocal'">$(ClrSrcDirectory)inc\corguids.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinx86'">$(ClrSrcDirectory)incx86\corguids.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinAMD64'">$(ClrSrcDirectory)incamd64\corguids.nativeproj</ProjectReference>
- </TargetLib>
- <Targetlib Include="$(SdkLibPath)\kernel32.lib" />
- <Targetlib Include="$(CrtLibPath)\libcmt$(BuildSuffix).lib" />
- <Targetlib Include="$(SdkLibPath)\uuid.lib" />
- <Targetlib Include="$(SdkLibPath)\user32.lib" />
- <Targetlib Include="$(SdkLibPath)\advapi32.lib" />
- <Targetlib Include="$(SdkLibPath)\oleaut32.lib" />
- <Targetlib Include="$(SdkLibPath)\WtsApi32.lib" />
- <Targetlib Include="$(SdkLibPath)\version.lib" />
- <Targetlib Include="$(SdkLibPath)\psapi.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'OneCore' or '$(HostMachineOS)'=='OneCoreWin7Compat'">
- <TargetLib Include="$(CoreSystemCrt)" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'OneCoreWin7Compat'">
- <TargetLib Include="$(SdkLibPath)\bcrypt.lib" />
- <TargetLib Include="$(SdkLibPath)\crypt32.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_fw.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'OneCore'">
- <TargetLib Include="$(SdkLibPath)\mincore.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_legacy.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_private.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_obsolete.lib" />
- </ItemGroup>
-
- <ItemGroup>
- <RCResourceFile Include="..\dbgshim.rc" />
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="..\dbgshim.cpp" />
- </ItemGroup>
-
- <ItemGroup>
- <DataFile Include="..\dbgshim.h" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-
-</Project>
diff --git a/src/dlls/dbgshim/dirs.proj b/src/dlls/dbgshim/dirs.proj
deleted file mode 100644
index dc91ac22f0..0000000000
--- a/src/dlls/dbgshim/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during the CoreCLR build-->
- <ItemGroup Condition="'$(FeatureCoreclr)' == 'true'">
- <ProjectFile Include="HostLocal\dbgshim.nativeproj" />
- <ProjectFile Include="HostWinx86\dbgshim.nativeproj" Condition="'$(BuildArchitecture)'=='i386'" />
- <ProjectFile Include="HostWinamd64\dbgshim.nativeproj" Condition="'$(BuildArchitecture)'=='amd64'" />
- <ProjectFile Include="HostOneCorex86\dbgshim.nativeproj" Condition="'$(BuildArchitecture)'=='i386'" />
- <ProjectFile Include="HostOneCoreamd64\dbgshim.nativeproj" Condition="'$(BuildArchitecture)'=='amd64'" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/dlls/dirs.proj b/src/dlls/dirs.proj
deleted file mode 100644
index de81b7f5d3..0000000000
--- a/src/dlls/dirs.proj
+++ /dev/null
@@ -1,50 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="clretwrc\clretwrc.nativeproj" />
- <ProjectFile Include="mscoree\dirs.proj" />
- <ProjectFile Include="mscorrc\dirs.proj" />
- <ProjectFile Include="mscordac\dirs.proj" />
- <ProjectFile Include="mscordbi\dirs.proj" />
- <ProjectFile Include="standalonemd-ro\standalonemd-ro.nativeproj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 of the Desktop build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreClr)' != 'true'">
- <ProjectFile Include="mscoruef\mscoruef.nativeproj" />
- <ProjectFile Include="shim\mscoreei.nativeproj" />
- <ProjectFile Include="shimr_v2\mscorees.proj" />
- <ProjectFile Include="shell_shim\mscoree.proj" />
- <ProjectFile Include="shimr\mscoreeis.nativeproj" />
- <ProjectFile Include="mscorpe\dirs.proj" />
- <ProjectFile Include="mscorsn\mscorsn.nativeproj" />
- <ProjectFile Include="culture\dirs.proj" />
- <ProjectFile Include="normalization\dirs.proj" />
- <ProjectFile Include="nlssorting\nlssorting.nativeproj" />
- <ProjectFile Include="sort00001000\sort00001000.nativeproj" />
- <ProjectFile Include="sort00060101\sort00060101.nativeproj" />
- <ProjectFile Include="fusion\fusion.nativeproj" />
- <ProjectFile Include="mscorier\mscorier.proj" />
- <ProjectFile Include="mscorsecimpl\mscorsecimpl.nativeproj" />
- <ProjectFile Include="mscorsecr\mscorsecr.nativeproj" />
- <ProjectFile Include="mscorsvc\dirs.proj" />
- <ProjectFile Include="bindingdisplay\bindingdisplay.nativeproj" />
- <ProjectFile Include="standalonemd-rw\Standalonemd-rw.nativeproj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 of the CoreCLR build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreclr)' == 'true'">
- <ProjectFile Include="dbgshim\dirs.proj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/dlls/mscordac/dirs.proj b/src/dlls/mscordac/dirs.proj
deleted file mode 100644
index 46a2052403..0000000000
--- a/src/dlls/mscordac/dirs.proj
+++ /dev/null
@@ -1,21 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\mscordac.nativeproj" />
- <ProjectFile Condition="'$(FeatureXPlatDacDebugging_HostWindowsx86)'=='true'" Include="HostWinx86\mscordac.nativeproj" />
- <ProjectFile Condition="'$(FeatureXPlatDacDebugging_HostWindowsAMD64)' == 'true'" Include="HostWinAMD64\mscordac.nativeproj" />
- <ProjectFile Condition="'$(FeatureXPlatDacDebugging_HostOneCorex86)'=='true'" Include="HostOneCorex86\mscordac.nativeproj" />
- <ProjectFile Condition="'$(FeatureXPlatDacDebugging_HostOneCoreAMD64)' == 'true'" Include="HostOneCoreAMD64\mscordac.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/dlls/mscordac/mscordac.targets b/src/dlls/mscordac/mscordac.targets
deleted file mode 100644
index 3e0474f9a8..0000000000
--- a/src/dlls/mscordac/mscordac.targets
+++ /dev/null
@@ -1,142 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <UsingTask TaskName="GetFileVersionTask" AssemblyFile="GetFileVersion.dll"/>
- <Import Project="..\..\debug\XPlatCommon.props" />
-
- <PropertyGroup>
- <CDefines>$(CDefines);UNICODE;_UNICODE;$(USER_SPECIFIC_C_DEFINES);FEATURE_NO_HOST</CDefines>
- <OutputName Condition="'$(BuildForCoreSystem)'!='true'">mscordacwks$(XPlatHostSuffix)</OutputName>
- <OutputName Condition="'$(BuildForCoreSystem)'=='true'">mscordaccore</OutputName>
- <TargetType>DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
- <DllDef>$(IntermediateOutputDirectory)\mscordac.def</DllDef>
- <DllEntryPoint>_DllMainCRTStartup</DllEntryPoint>
- <GenerateBrowserFile>false</GenerateBrowserFile>
- <CDefines Condition="'$(_BuildType)' == 'dbg'">$(CDefines);SPECIAL_BUILD</CDefines>
- <UseMsvcrt>false</UseMsvcrt>
- <ExtDelayImpLib>true</ExtDelayImpLib>
- <DoNotAddCrtLibPath>true</DoNotAddCrtLibPath>
- <LinkUseDefaultLib>false</LinkUseDefaultLib>
- <LinkLibIgnore>$(LinkLibIgnore);4198</LinkLibIgnore>
- <UseStl>true</UseStl>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(BuildForCoreSystem)' != 'true'">
- <LinkDelayLoad Condition="'$(LinkDelayLoad)'!=''">$(LinkDelayLoad);</LinkDelayLoad>
- <LinkDelayLoad>$(LinkDelayLoad)user32.dll;advapi32.dll;ole32.dll;oleaut32.dll</LinkDelayLoad>
- </PropertyGroup>
-
- <ItemGroup>
- <RCResourceFile Include="..\native.rc">
- <IncludeInLib>true</IncludeInLib>
- </RCResourceFile >
- </ItemGroup>
- <ItemGroup>
- <CppCompile Include="..\mscordac.cpp" />
- </ItemGroup>
-
- <ItemGroup>
- <CppPreprocess Include="..\mscordac.src">
- <Defines>@(CommonPreprocessDefines);$(CDefines);$(TargetDefines)</Defines>
- <FinalOutput>$(IntermediateOutputDirectory)\mscordac.def</FinalOutput>
- <AdditionalOptions>/TC</AdditionalOptions>
- </CppPreprocess>
- </ItemGroup>
- <ItemGroup>
- <ImportLib Include="$(ClrLibPath)\dac_wks$(XPlatHostLibSuffix).lib"/>
- <LinkPreCrtLibs Include="$(ClrLibPath)\dac_wks$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)debug\daccess\$(XPlatHostLibBuildDir)\daccess.nativeproj</ProjectReference>
- </LinkPreCrtLibs>
- <LinkPreCrtLibs Include="$(ClrLibPath)\utilcode_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)utilcode\dac\$(XPlatHostLibBuildDir)\dac.nativeproj</ProjectReference>
- </LinkPreCrtLibs>
- <TargetLib Include="$(ClrLibPath)\cee_wks_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)vm\dac\$(XPlatHostLibBuildDir)\dacwks.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\cordbee_wks_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)debug\ee\dac\$(XPlatHostLibBuildDir)\dacwks.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDCompiler_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\compiler\dac\$(XPlatHostLibBuildDir)\mdcompiler_dac.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDRuntime_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\runtime\dac\$(XPlatHostLibBuildDir)\mdruntime_dac.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDRuntimeRW_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\enc\dac\$(XPlatHostLibBuildDir)\mdruntimerw_dac.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDWinMD_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\winmd\dac\$(XPlatHostLibBuildDir)\mdwinmd_dac.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDHotData_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\hotdata\dac\$(XPlatHostLibBuildDir)\mdhotdata_dac.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\ipcmanager_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)ipcman\ipcman_dac\$(XPlatHostLibBuildDir)\ipcman_dac.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\strongname_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)StrongName\api\dac\$(XPlatHostLibBuildDir)\strongname_dac.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Condition="'$(TargetArch)' != 'i386'" Include="$(ClrLibPath)\unwinder_dac$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)unwinder\dac\$(XPlatHostLibBuildDir)\unwinder_dac.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\dbgutil$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)debug\dbgutil\$(XPlatHostLibBuildDir)\dbgutil.nativeproj</ProjectReference>
- </TargetLib>
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' != 'mac'">
- <TargetLib Include="$(ClrLibPath)\CorGUIDS$(XPlatHostLibSuffix).lib">
- <!-- This project isn't factored like the others above... there are many projects pointing to the current path of corguids -->
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostLocal'">$(ClrSrcDirectory)inc\corguids.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinx86'">$(ClrSrcDirectory)incx86\corguids.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinAMD64'">$(ClrSrcDirectory)incamd64\corguids.nativeproj</ProjectReference>
- </TargetLib>
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'windows'">
- <TargetLib Include="$(ClrLibPath)\delayimp$(XPlatHostLibSuffix).lib">
- <!-- This project isn't factored like the others above... there are many projects pointing to the current path of delayimp -->
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostLocal'">$(ClrSrcDirectory)delayimp\delayimp.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinx86'">$(ClrSrcDirectory)delayimpx86\delayimp.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinAMD64'">$(ClrSrcDirectory)delayimpamd64\delayimp.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(CrtLibPath)\libcmt$(BuildSuffix).lib" />
- <TargetLib Include="$(SdkLibPath)\kernel32.lib" />
- <TargetLib Include="$(SdkLibPath)\advapi32.lib" />
- <TargetLib Include="$(SdkLibPath)\user32.lib" />
- <TargetLib Include="$(SdkLibPath)\ole32.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- <TargetLib Include="$(SdkLibPath)\wtsapi32.lib" />
- <TargetLib Include="$(CrtLibPath)\delayimp.lib" />
- <TargetLib Include="$(SdkLibPath)\ntdll.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'OneCore' or '$(HostMachineOS)'=='OneCoreWin7Compat'">
- <TargetLib Include="$(CoreSystemCrt)" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'OneCoreWin7Compat'">
- <TargetLib Include="$(SdkLibPath)\bcrypt.lib" />
- <TargetLib Include="$(SdkLibPath)\crypt32.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_fw.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'OneCore'">
- <TargetLib Include="$(SdkLibPath)\mincore.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_legacy.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_private.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_obsolete.lib" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-
-
- <Target Name="CreateLongNameDacForWindbg"
- Condition="'$(HostMachineOS)'=='windows'"
- AfterTargets="Link">
- <GetFileVersionTask FilePath="$(ProductOutputFile)">
- <Output TaskParameter="FileVersion" PropertyName="DacFileVersion"/>
- </GetFileVersionTask>
- <Exec Command="$(PerlCommand) -I$(DevDivToolsPath) $(ClrSrcDirectory)\dlls\mscordac\Update.pl $(ProductOutputFile) $(MainDacMouleName) $(XPlatHostMachineOSSuffix)$(HostMachineArch) $(TargetMachineArch) $(DacFileVersion) $(BinariesDirectory)"
- StandardOutputImportance="Normal" />
- </Target>
-</Project>
diff --git a/src/dlls/mscordac/mscordac.vrg b/src/dlls/mscordac/mscordac.vrg
deleted file mode 100644
index b8cb17547e..0000000000
--- a/src/dlls/mscordac/mscordac.vrg
+++ /dev/null
@@ -1,10 +0,0 @@
-VSREG 7
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\KnownFunctionTableDlls]
-"[#FilePath]"=dword:0
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\KnownManagedDebuggingDlls]
-"[#FilePath]"=dword:0
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\RuntimeExceptionHelperModules]
-"[#FilePath]"=dword:0
diff --git a/src/dlls/mscordac/mscordac_unixexports.src b/src/dlls/mscordac/mscordac_unixexports.src
index 7d60c1ed4b..ab73c4fcb8 100644
--- a/src/dlls/mscordac/mscordac_unixexports.src
+++ b/src/dlls/mscordac/mscordac_unixexports.src
@@ -17,7 +17,6 @@ PAL_fflush
PAL__flushall
PAL_free
PAL_fwprintf
-PAL_swprintf
PAL_GetPALDirectoryW
PAL_GetResourceString
PAL_get_stdout
@@ -35,7 +34,6 @@ PAL_printf
PAL_qsort
PAL_Reenter
PAL_fprintf
-PAL__vsnprintf
PAL__wcstoui64
PAL_wcstoul
PAL_iswprint
@@ -52,6 +50,8 @@ _wcsicmp
_stricmp
sprintf_s
swprintf_s
+vsprintf_s
+_snprintf_s
_snwprintf_s
_vsnprintf_s
_vsnwprintf_s
diff --git a/src/dlls/mscordbi/DIRS.proj b/src/dlls/mscordbi/DIRS.proj
deleted file mode 100644
index fb7248524d..0000000000
--- a/src/dlls/mscordbi/DIRS.proj
+++ /dev/null
@@ -1,23 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(FeatureDbiDebugging)' == 'true'" Include="hostlocal\mscordbi.nativeproj" />
- <ProjectFile Condition="'$(FeatureDbiOopDebugging_HostWindowsx86)' == 'true'" Include="hostwinx86\mscordbi.nativeproj" />
- <ProjectFile Condition="'$(FeatureDbiOopDebugging_HostWindowsamd64)' == 'true'" Include="HostWinAMD64\mscordbi.nativeproj" />
- <ProjectFile Condition="'$(FeatureDbiOopDebugging_HostOneCorex86)' == 'true'" Include="HostOneCorex86\mscordbi.nativeproj" />
- <ProjectFile Condition="'$(FeatureDbiOopDebugging_HostOneCoreamd64)' == 'true'" Include="HostOneCoreAMD64\mscordbi.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/dlls/mscordbi/mscordbi.settings.targets b/src/dlls/mscordbi/mscordbi.settings.targets
deleted file mode 100644
index c9fa97cbef..0000000000
--- a/src/dlls/mscordbi/mscordbi.settings.targets
+++ /dev/null
@@ -1,144 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <Import Project="..\..\debug\XPlatCommon.props" />
-
- <PropertyGroup>
- <FileToMarkForSigning>$(BinariesDirectory)\$(OutputName).dll</FileToMarkForSigning>
- <UserIncludes>$(UserIncludes);
- ..</UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <!--PCH: Both precompiled header and cpp are on the same ..\ path this is likely to be wrong.-->
- <PCHCompile>..\stdafx.cpp</PCHCompile>
-
- <!--
- # We explicitly must not link with mscoree because mscordbi needs to
- # be able to run on a machine without the runtime installed.
- # Also, for this reason explicitly use the static CRT
- -->
- <LinkNoLibraries>true</LinkNoLibraries>
- <UseMsvcrt>false</UseMsvcrt>
- <DoNotAddCrtLibPath>true</DoNotAddCrtLibPath>
- <LinkUseDefaultLib>false</LinkUseDefaultLib>
- <NoLinkGdi32>true</NoLinkGdi32>
- <!-- <LinkUseCMT>true</LinkUseCMT> -->
- <TargetType>DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
- <PogoOptimized>true</PogoOptimized>
-
- <DllEntryPoint>_DllMainCRTStartup</DllEntryPoint>
- <DllDef>$(IntermediateOutputDirectory)\mscordbi.def</DllDef>
-
- </PropertyGroup>
-
-
- <ItemGroup Condition="'$(HostMachineOS)' == 'OneCore' or '$(HostMachineOS)' == 'OneCoreWin7Compat'">
- <TargetLib Include="$(CoreSystemCrt)" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'OneCoreWin7Compat'">
- <TargetLib Include="$(SdkLibPath)\bcrypt.lib" />
- <TargetLib Include="$(SdkLibPath)\crypt32.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_fw.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(HostMachineOS)' == 'OneCore'">
- <TargetLib Include="$(SdkLibPath)\mincore.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_legacy.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_private.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_obsolete.lib" />
- </ItemGroup>
-
- <ItemGroup>
-
- <TargetLib Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\uuid.lib" />
- <LinkPreCrtLibs Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\ntdll.lib" />
- <LinkPreCrtLibs Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\kernel32.lib" />
- <LinkPreCrtLibs Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\user32.lib" />
- <LinkPreCrtLibs Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\advapi32.lib" />
- <LinkPreCrtLibs Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\wtsapi32.lib" />
- <TargetLib Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\ole32.lib" />
- <TargetLib Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\version.lib" />
- <TargetLib Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\mscoree.lib" />
- <TargetLib Condition="'$(HostMachineOS)'=='windows'" Include="$(SdkLibPath)\shlwapi.lib" />
- <TargetLib Condition="'$(HostMachineOS)'=='windows'" Include="$(CrtLibPath)\libcmt$(BuildSuffix).lib" />
-
-
-
- <LinkPreCrtLibs Include="$(Dbilib)">
- <ProjectReference>$(DbiProject)</ProjectReference>
- </LinkPreCrtLibs>
- <LinkPreCrtLibs Include="$(ClrLibPath)\utilcodestaticnohost$(XPlatHostLibSuffix).lib" >
- <!-- Another project with a bunch of pre-existing references so it doesn't follow the normal path convention -->
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostLocal'">$(ClrSrcDirectory)utilcode\staticnohost\staticnohost.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinx86'">$(ClrSrcDirectory)utilcode\staticnohostx86\staticnohost.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinAMD64'">$(ClrSrcDirectory)utilcode\staticnohostamd64\staticnohost.nativeproj</ProjectReference>
- </LinkPreCrtLibs>
- <TargetLib Include="$(ClrLibPath)\ipcmanager-staticcrt$(XPlatHostLibSuffix).lib" >
- <ProjectReference>$(ClrSrcDirectory)ipcman\ipcman-staticcrt\$(XPlatHostLibBuildDir)\ipcman-staticcrt.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\ildbsymlib$(XPlatHostLibSuffix).lib" >
- <ProjectReference>$(ClrSrcDirectory)debug\ildbsymlib\$(XPlatHostLibBuildDir)\ildbsymlib.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDCompiler-dbi$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\compiler\dbi\$(XPlatHostLibBuildDir)\mdcompiler-dbi.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDWinMD_dbi$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\winmd\dbi\$(XPlatHostLibBuildDir)\MDWinMD-dbi.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDRuntime-dbi$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\runtime\dbi\$(XPlatHostLibBuildDir)\mdruntime-dbi.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDRuntimeRW-dbi$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\enc\dbi\$(XPlatHostLibBuildDir)\mdruntimerw-dbi.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDHotData-StaticCrt$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\hotdata\full-staticcrt\$(XPlatHostLibBuildDir)\mdhotdata-staticcrt.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDDataSource_dbi$(XPlatHostLibSuffix).lib">
- <ProjectReference>$(ClrSrcDirectory)md\DataSource\dbi\$(XPlatHostLibBuildDir)\DataSource-dbi.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\CorGUIDS$(XPlatHostLibSuffix).lib">
- <!-- This project isn't factored like the others above... there are many projects pointing to the current path of corguids -->
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostLocal'">$(ClrSrcDirectory)inc\corguids.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinx86'">$(ClrSrcDirectory)incx86\corguids.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinAMD64'">$(ClrSrcDirectory)incamd64\corguids.nativeproj</ProjectReference>
- </TargetLib>
-
- </ItemGroup>
-
- <ItemGroup>
-
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostLocal'" Include="$(ClrSrcDirectory)inc\corguids.nativeproj" />
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinx86'" Include="$(ClrSrcDirectory)incx86\corguids.nativeproj" />
- <ProjectReference Condition="'$(XPlatHostLibBuildDir)'=='HostWinAMD64'" Include="$(ClrSrcDirectory)incamd64\corguids.nativeproj" />
-
- </ItemGroup>
-
- <ItemGroup>
- <CppPreprocess Include="..\mscordbi.src">
- <Defines>@(CommonPreprocessDefines);$(CDefines);$(TargetDefines)</Defines>
- <FinalOutput>$(IntermediateOutputDirectory)\mscordbi.def</FinalOutput>
- <AdditionalOptions>/TC</AdditionalOptions>
- </CppPreprocess>
- </ItemGroup>
- <ItemGroup>
- <ImportLib Include="$(ClrLibPath)\ipcmanager-staticcrt$(XPlatHostLibSuffix).lib" />
- <ImportLib Include="$(ClrLibPath)\ildbsymlib$(XPlatHostLibSuffix).lib" />
- <ImportLib Include="$(Dbilib)"/>
- <ImportLib Include="$(ClrLibPath)\MDCompiler-dbi$(XPlatHostLibSuffix).lib" />
- <ImportLib Include="$(ClrLibPath)\MDRuntime-dbi$(XPlatHostLibSuffix).lib" />
- <ImportLib Include="$(ClrLibPath)\MDRuntimeRW-dbi$(XPlatHostLibSuffix).lib" />
- <ImportLib Include="$(ClrLibPath)\MDHotData-StaticCrt$(XPlatHostLibSuffix).lib" />
- </ItemGroup>
- <ItemGroup>
- <RCResourceFile Include="..\Native.rc" />
- </ItemGroup>
- <ItemGroup>
- <CppCompile Include="..\mscordbi.cpp" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/dlls/mscordbi/mscordbi.vrg b/src/dlls/mscordbi/mscordbi.vrg
deleted file mode 100644
index 2c7289633b..0000000000
--- a/src/dlls/mscordbi/mscordbi.vrg
+++ /dev/null
@@ -1,78 +0,0 @@
-VSREG 7
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorDebug.1]
-@="Microsoft Common Language Runtime Debugger"
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorDebug.1\CLSID]
-@="{6FEF44D0-39E7-4C77-BE8E-C9F8CF988630}"
-
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorDebug]
-@="Microsoft Common Language Runtime Debugger"
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorDebug\CurVer]
-@="ComPlusDebug.CorDebug.1"
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorDebug\CLSID]
-@="{6FEF44D0-39E7-4C77-BE8E-C9F8CF988630}"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{6FEF44D0-39E7-4C77-BE8E-C9F8CF988630}]
-@="Microsoft Common Language Runtime Debugger"
-
-[HKEY_CLASSES_ROOT\CLSID\{6FEF44D0-39E7-4C77-BE8E-C9F8CF988630}\ProgID]
-@="ComPlusDebug.CorDebug.1"
-
-[HKEY_CLASSES_ROOT\CLSID\{6FEF44D0-39E7-4C77-BE8E-C9F8CF988630}\VersionIndependentProgID]
-@="ComPlusDebug.CorDebug"
-
-[HKEY_CLASSES_ROOT\CLSID\{6FEF44D0-39E7-4C77-BE8E-C9F8CF988630}\NotInsertable]
-
-
-[HKEY_CLASSES_ROOT\CLSID\{6FEF44D0-39E7-4C77-BE8E-C9F8CF988630}\InprocServer32]
-@="[SystemFolder.3643236F_FC70_11D3_A536_0090278A1BB8]mscoree.dll"
-
-[HKEY_CLASSES_ROOT\CLSID\{6FEF44D0-39E7-4C77-BE8E-C9F8CF988630}\Server]
-@="mscordbi.dll"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{6FEF44D0-39E7-4C77-BE8E-C9F8CF988630}\InprocServer32]
-"ThreadingModel"="Both"
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorpubPublish.1]
-@="Microsoft Common Language Runtime Debugger Publisher"
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorpubPublish.1\CLSID]
-@="{047A9A40-657E-11D3-8D5B-00104B35E7EF}"
-
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorpubPublish]
-@="Microsoft Common Language Runtime Debugger Publisher"
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorpubPublish\CurVer]
-@="ComPlusDebug.CorpubPublish.1"
-
-[HKEY_CLASSES_ROOT\ComPlusDebug.CorpubPublish\CLSID]
-@="{047A9A40-657E-11D3-8D5B-00104B35E7EF}"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{047A9A40-657E-11D3-8D5B-00104B35E7EF}]
-@="Microsoft Common Language Runtime Debugger Publisher"
-
-[HKEY_CLASSES_ROOT\CLSID\{047A9A40-657E-11D3-8D5B-00104B35E7EF}\ProgID]
-@="ComPlusDebug.CorpubPublish.1"
-
-[HKEY_CLASSES_ROOT\CLSID\{047A9A40-657E-11D3-8D5B-00104B35E7EF}\VersionIndependentProgID]
-@="ComPlusDebug.CorpubPublish"
-
-[HKEY_CLASSES_ROOT\CLSID\{047A9A40-657E-11D3-8D5B-00104B35E7EF}\NotInsertable]
-
-
-[HKEY_CLASSES_ROOT\CLSID\{047A9A40-657E-11D3-8D5B-00104B35E7EF}\InprocServer32]
-@="[SystemFolder.3643236F_FC70_11D3_A536_0090278A1BB8]mscoree.dll"
-
-[HKEY_CLASSES_ROOT\CLSID\{047A9A40-657E-11D3-8D5B-00104B35E7EF}\Server]
-@="mscordbi.dll"
-
-[HKEY_CLASSES_ROOT\CLSID\{047A9A40-657E-11D3-8D5B-00104B35E7EF}\InprocServer32]
-"ThreadingModel"="Both"
diff --git a/src/dlls/mscordbi/mscordbiv.vrg b/src/dlls/mscordbi/mscordbiv.vrg
deleted file mode 100644
index 5cb038647a..0000000000
--- a/src/dlls/mscordbi/mscordbiv.vrg
+++ /dev/null
@@ -1,4 +0,0 @@
-VSREG 7
-
-[HKEY_CLASSES_ROOT\CLSID\{047a9a40-657e-11d3-8d5b-00104b35e7ef}\InprocServer32\[RTM_ProductVersion]]
-"ImplementedInThisVersion"=""
diff --git a/src/dlls/mscoree/CMakeLists.txt b/src/dlls/mscoree/CMakeLists.txt
index 6a157e4105..b9c129db5e 100644
--- a/src/dlls/mscoree/CMakeLists.txt
+++ b/src/dlls/mscoree/CMakeLists.txt
@@ -12,7 +12,6 @@ set(CLR_SOURCES
if(WIN32)
list(APPEND CLR_SOURCES
comcallunmarshal.cpp
- delayload.cpp
Native.rc
)
diff --git a/src/dlls/mscoree/coreclr/CMakeLists.txt b/src/dlls/mscoree/coreclr/CMakeLists.txt
index aa7bb0d9b9..afd18d6c27 100644
--- a/src/dlls/mscoree/coreclr/CMakeLists.txt
+++ b/src/dlls/mscoree/coreclr/CMakeLists.txt
@@ -125,6 +125,12 @@ else()
)
endif(WIN32)
+if(CLR_CMAKE_PLATFORM_UNIX AND FEATURE_STANDALONE_GC)
+ list(APPEND CORECLR_LIBRARIES
+ gc_unix
+ )
+endif(CLR_CMAKE_PLATFORM_UNIX AND FEATURE_STANDALONE_GC)
+
if(CLR_CMAKE_PLATFORM_UNIX AND FEATURE_EVENT_TRACE)
list(APPEND CORECLR_LIBRARIES
eventprovider
diff --git a/src/dlls/mscoree/coreclr/coreclr.nativeproj b/src/dlls/mscoree/coreclr/coreclr.nativeproj
deleted file mode 100644
index 484790ee6f..0000000000
--- a/src/dlls/mscoree/coreclr/coreclr.nativeproj
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- Work around problems with loading System.Private.CoreLib.dll, -->
- <!-- caused by inconsistent setting of UseLegacyCompiler and FeatureSpanOfT -->
- <!-- between System.Private.CoreLib.dll and the runtime. -->
- <UseLegacyCompiler>true</UseLegacyCompiler>
- </PropertyGroup>
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\dlls\mscoree\mscoree.settings.targets" />
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>coreclr</OutputName>
- <LinkAdditionalOptions Condition="'$(BuildArchitecture)'=='arm' and $(BuildForCoreSystem) == 'true'">$(LinkAdditionalOptions) /filealign:4096</LinkAdditionalOptions>
- <IsProjectKLibrary>true</IsProjectKLibrary>
- <IsTestNetCoreRuntimeLibrary>true</IsTestNetCoreRuntimeLibrary>
- <IsPhoneLibrary>true</IsPhoneLibrary>
- <IsTestNetTool>true</IsTestNetTool>
- <IsPhoneTool>true</IsPhoneTool>
- </PropertyGroup>
- <ItemGroup Condition="'$(BuildForWindows7)' == 'true'">
- <ProductFile Include="$(SdkLibPath)\forwarders\*">
- <ProductName>ProjectK</ProductName>
- <ProductPath>Runtime</ProductPath>
- </ProductFile>
- </ItemGroup>
-
- <Choose>
- <!-- ARM64TODO: Enable PGO -->
- <!-- TODO_X64CoreSys: Dont link pgort.lib as x64 CoreSys CoreCLR as Perf team does not have the instrumented data for it yet. Reenable it once its available -->
- <When Condition="'$(BuildForCoreSystem)' == 'true' and !('$(_BuildType)' == 'chk' or '$(_BuildType)' == 'dbg' or '$(BuildArchitecture)'=='amd64' or '$(BuildArchitecture)'=='arm64')">
- <ItemGroup>
- <TargetLib Include="$(VCToolsLegacyPath)\vc12\lib\ret\$(RealBuildArchitecture)\vc\pgort.lib" />
- </ItemGroup>
-
- <PropertyGroup>
- <PogoOptimize>false</PogoOptimize>
- <PogoInstrument>true</PogoInstrument>
- <PogoUpdate>true</PogoUpdate>
- <OptimizationDataRelativeDir>CoreSys.$(_BuildArch)\CLR\Base</OptimizationDataRelativeDir>
- </PropertyGroup>
-
- <ItemGroup>
- <PogoInstrumentedDestinationPath Include ="$(OutputRootPath)\OneCore\Pogo\" />
- </ItemGroup>
-
- </When>
- </Choose>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\dlls\mscoree\mscoree.targets" />
-</Project>
diff --git a/src/dlls/mscoree/delayload.cpp b/src/dlls/mscoree/delayload.cpp
deleted file mode 100644
index d74f58b444..0000000000
--- a/src/dlls/mscoree/delayload.cpp
+++ /dev/null
@@ -1,455 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//*****************************************************************************
-// DelayLoad.cpp
-//
-// This code defines the dealy load helper notification routines that will be
-// invoked when a dll marked for delay load is processed. A DLL is marked as
-// delay load by using the DELAYLOAD=foo.dll directive in your sources file.
-// This tells the linker to generate helpers for the imports of this dll instead
-// of loading it directly. If your application never touches those functions,
-// the the dll is never loaded. This improves (a) startup time each time the
-// app runs, and (b) overall working set size in the case you never use the
-// functionality.
-//
-//
-//
-// This module provides a hook helper and exception handler. The hook helper
-// is used primarily in debug mode right now to determine what call stacks
-// force a delay load of a dll. If these call stacks are very common, then
-// you should reconsider using a delay load.
-//
-// The exception handler is used to catch fatal errors like library not found
-// or entry point missing. If this happens you are dead and need to fail
-// gracefully.
-//
-//*****************************************************************************
-#include "stdafx.h" // Standard header.
-
-#if !defined(FEATURE_CORESYSTEM)
-
-#include "delayimp.h" // Delay load header file.
-#include "winwrap.h" // Wrappers for Win32 api's.
-#include "utilcode.h" // Debug helpers.
-#include "corerror.h" // Error codes from this EE.
-#include "shimload.h"
-#include "ex.h"
-#include "strsafe.h"
-
-//********** Locals. **********************************************************
-static DWORD _FormatMessage(__out_ecount(chMsg) __out_z LPWSTR szMsg, DWORD chMsg, DWORD dwLastError, ...);
-static void _FailLoadLib(unsigned dliNotify, DelayLoadInfo *pdli);
-static void _FailGetProc(unsigned dliNotify, DelayLoadInfo *pdli);
-
-#if defined (_DEBUG) || defined (__delay_load_trace__)
-static void _DbgPreLoadLibrary(int bBreak, DelayLoadInfo *pdli);
-#endif
-
-
-//********** Globals. *********************************************************
-
-// Override __pfnDllFailureHook. This will give the delay code a callback
-// for when a load failure occurs. This failure hook is implemented below.
-FARPROC __stdcall CorDelayErrorHook(unsigned dliNotify, DelayLoadInfo *pdli);
-ExternC extern PfnDliHook __pfnDliFailureHook = CorDelayErrorHook;
-
-// In trace mode, override the delay load hook. Our hook does nothing but
-// provide some diagnostic information for debugging.
-FARPROC __stdcall CorDelayLoadHook(unsigned dliNotify, DelayLoadInfo *pdli);
-ExternC extern PfnDliHook __pfnDliNotifyHook = CorDelayLoadHook;
-
-
-//********** Code. ************************************************************
-
-#undef ExitProcess
-
-extern void DECLSPEC_NORETURN ThrowOutOfMemory();
-
-//*****************************************************************************
-// Called for errors that might have occurred.
-//*****************************************************************************
-FARPROC __stdcall CorDelayErrorHook( // Always 0.
- unsigned dliNotify, // What event has occurred, dli* flag.
- DelayLoadInfo *pdli) // Description of the event.
-{
-
- STATIC_CONTRACT_THROWS;
- STATIC_CONTRACT_FORBID_FAULT;
- STATIC_CONTRACT_SO_TOLERANT;
-
- // Chose operation to perform based on operation.
- switch (dliNotify)
- {
- // Failed to load the library. Need to fail gracefully.
- case dliFailLoadLib:
- //_FailLoadLib(dliNotify, pdli);
- break;
-
- // Failed to get the address of the given function, fail gracefully.
- case dliFailGetProc:
-#ifndef FEATURE_CORECLR
- _FailGetProc(dliNotify, pdli);
-#endif // !FEATURE_CORECLR
- break;
-
- // Unknown failure code.
- default:
- _ASSERTE(!"Unknown delay load failure code.");
- break;
- }
-
-#ifndef FEATURE_CORECLR
- if (_stricmp(pdli->szDll, "ole32.dll") == 0)
- {
- // TODO: after interop team fixes delayload related to ole32.dll, we can throw OOM instead.
- // For now, SQL preloads ole32.dll before starting CLR, so OOM for ole32 is not a concern.
- ExitProcess(pdli->dwLastError);
- }
- else
-#endif // !FEATURE_CORECLR
-#ifdef MSDIS_DLL
- // MSDIS_DLL is a macro defined in SOURCES.INC
- if (_stricmp(pdli->szDll, MSDIS_DLL) == 0)
- {
- // msdisxxx.dll is used in GCStress 4 on chk/dbg builds, if it fails to load then the
- // process will stack-overflow or terminate with no obvious reason of the root cause.
- _ASSERTE(!"Failed to delay load " MSDIS_DLL);
- }
- else
-#endif // MSDIS_DLL
- {
-#ifndef FEATURE_CORECLR
- // We do not own the process. ExitProcess is bad.
- // We will try to recover next time.
- ThrowWin32 (pdli->dwLastError);
-#endif // !FEATURE_CORECLR
- }
-
- return (0);
-}
-
-
-//*****************************************************************************
-// Format an error message using a system error (supplied through GetLastError)
-// and any subtitution values required.
-//*****************************************************************************
-DWORD _FormatMessage( // How many characters written.
- __out_ecount(chMsg) __out_z LPWSTR szMsg, // Buffer for formatted data.
- DWORD chMsg, // How big is the buffer.
- DWORD dwLastError, // The last error code we got.
- ...) // Substitution values.
-{
- WRAPPER_NO_CONTRACT;
-
- DWORD iRtn;
- va_list marker;
-
- va_start(marker, dwLastError);
- iRtn = WszFormatMessage(
- FORMAT_MESSAGE_FROM_SYSTEM, // Flags.
- 0, // No source, use system.
- dwLastError, // Error code.
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Use default langauge.
- szMsg, // Output buffer.
- dwLastError, // Size of buffer.
- &marker); // Substitution text.
- va_end(marker);
- return (iRtn);
-}
-
-
-//*****************************************************************************
-// A library failed to load. This is always a bad thing.
-//*****************************************************************************
-void _FailLoadLib(
- unsigned dliNotify, // What event has occurred, dli* flag.
- DelayLoadInfo *pdli) // Description of the event.
-{
- STATIC_CONTRACT_NOTHROW;
- STATIC_CONTRACT_FORBID_FAULT;
-
- // We're allocating strings for the purposes of putting up a critical error box.
- // Obviously, OOM's aren't going to be passed up to the caller.
- FAULT_NOT_FATAL();
-
-
- WCHAR rcMessage[_MAX_PATH+500]; // Message for display.
- WCHAR rcFmt[500]; // 500 is the number used by excep.cpp for mscorrc resources.
- HRESULT hr;
-
- // Load a detailed error message from the resource file.
- if (SUCCEEDED(hr = UtilLoadStringRC(MSEE_E_LOADLIBFAILED, rcFmt, NumItems(rcFmt))))
- {
- StringCchPrintf(rcMessage, COUNTOF(rcMessage), rcFmt, pdli->szDll, pdli->dwLastError);
- }
- else
- {
- // Foramt the Windows error first.
- if (!_FormatMessage(rcMessage, NumItems(rcMessage), pdli->dwLastError, pdli->szDll))
- {
- // Default to a hard coded error otherwise.
- StringCchPrintf(rcMessage, COUNTOF(rcMessage), W("ERROR! Failed to delay load library %hs, Win32 error %d, Delay error: %d\n"),
- pdli->szDll, pdli->dwLastError, dliNotify);
- }
- }
-
-#ifndef _ALPHA_
- // for some bizarre reason, calling OutputDebugString during delay load in non-debug mode on Alpha
- // kills program, so only do it when in debug mode ()
-#if defined (_DEBUG) || defined (__delay_load_trace__)
- // Give some feedback to the developer.
- wprintf(W("%s\n"), rcMessage);
- WszOutputDebugString(rcMessage);
-#endif
-#endif
-
- // Inform the user that we cannot continue execution anymore.
- UtilMessageBoxCatastrophicNonLocalized(rcMessage, W("MSCOREE.DLL"), MB_ICONERROR | MB_OK, TRUE);
- _ASSERTE(!"Failed to delay load library");
-}
-
-
-//*****************************************************************************
-// A library failed to load. This is always a bad thing.
-//*****************************************************************************
-void _FailGetProc(
- unsigned dliNotify, // What event has occurred, dli* flag.
- DelayLoadInfo *pdli) // Description of the event.
-{
- STATIC_CONTRACT_NOTHROW;
- STATIC_CONTRACT_FORBID_FAULT;
- STATIC_CONTRACT_SO_TOLERANT;
-
- // We're allocating strings for the purposes of putting up a critical error box.
- // Obviously, OOM's aren't going to be passed up to the caller.
- FAULT_NOT_FATAL();
-
- WCHAR rcMessage[_MAX_PATH+756]; // Message for display.
- WCHAR rcProc[257] = {0}; // Name of procedure with error.
- WCHAR rcFmt[500]; // 500 is the number used by excep.cpp for mscorrc resources.
- HRESULT hr;
-
- // Get a display name for debugging information.
- if (pdli->dlp.fImportByName)
- Wsz_mbstowcs(rcProc, pdli->dlp.szProcName, sizeof(rcProc)/sizeof(rcProc[0])-1);
- else
- StringCchPrintf(rcProc, COUNTOF(rcProc), W("Ordinal: %d"), pdli->dlp.dwOrdinal);
-
- // Load a detailed error message from the resource file.
- if (SUCCEEDED(hr = UtilLoadStringRC(MSEE_E_GETPROCFAILED, rcFmt, NumItems(rcFmt))))
- {
- StringCchPrintf(rcMessage, COUNTOF(rcMessage), rcFmt, rcProc, pdli->szDll, pdli->dwLastError);
- }
- else
- {
- if (!_FormatMessage(rcMessage, NumItems(rcMessage), pdli->dwLastError, pdli->szDll))
- {
- // Default to a hard coded error otherwise.
- StringCchPrintf(rcMessage, COUNTOF(rcMessage), W("ERROR! Failed GetProcAddress() for %s, Win32 error %d, Delay error %d\n"),
- rcProc, pdli->dwLastError, dliNotify);
- }
- }
-
-#ifndef ALPHA
- // for some bizarre reason, calling OutputDebugString during delay load in non-debug mode on Alpha
- // kills program, so only do it when in debug mode ()
-#if defined (_DEBUG) || defined (__delay_load_trace__)
- // Give some feedback to the developer.
- wprintf(W("%s"),rcMessage);
- WszOutputDebugString(rcMessage);
-#endif
-#endif
-
- {
- // We are already in a catastrophic situation so we can tolerate faults as well as SO & GC mode violations to keep going.
- CONTRACT_VIOLATION(FaultNotFatal | GCViolation | ModeViolation | SOToleranceViolation);
-
- // Inform the user that we cannot continue execution anymore.
- UtilMessageBoxCatastrophicNonLocalized(rcMessage, W("MSCOREE.DLL"), MB_ICONERROR | MB_OK, TRUE);
- }
- _ASSERTE(!"Failed to delay load GetProcAddress()");
-}
-
-
-
-HMODULE DoPreloadLibraryThrowing(LPCSTR szLibrary)
-{
- STATIC_CONTRACT_THROWS;
- STATIC_CONTRACT_SO_TOLERANT;
-
- HMODULE result=NULL;
- BEGIN_SO_INTOLERANT_CODE_NO_THROW_CHECK_THREAD(ThrowHR(COR_E_STACKOVERFLOW));
- DWORD dwLength = _MAX_PATH;
- WCHAR pName[_MAX_PATH];
- IfFailThrow(GetInternalSystemDirectory(pName, &dwLength));
-
- MAKE_WIDEPTR_FROMANSI_NOTHROW(pwLibrary, szLibrary);
- if ((pwLibrary == NULL) || ovadd_ge(dwLength, __lpwLibrary, _MAX_PATH-1))
- ThrowHR(E_INVALIDARG);
-
- wcscpy_s(pName+dwLength-1, COUNTOF(pName) - dwLength + 1, pwLibrary);
- result = CLRLoadLibraryEx(pName, NULL, GetLoadWithAlteredSearchPathFlag());
- END_SO_INTOLERANT_CODE;
- return result;
-}
-
-//
-//********** Tracing code. ****************************************************
-//
-
-//*****************************************************************************
-// This routine is our Delay Load Helper. It will get called for every delay
-// load event that occurs while the application is running.
-//*****************************************************************************
-FARPROC __stdcall CorDelayLoadHook( // Always 0.
- unsigned dliNotify, // What event has occurred, dli* flag.
- DelayLoadInfo *pdli) // Description of the event.
-{
-#ifdef _DEBUG
- if (dliNotify == dliStartProcessing)
- {
- BOOL fThrows = TRUE;
- if (_stricmp(pdli->szDll, "ole32.dll") == 0)
- {
- // SQL loads ole32.dll before starting CLR. For Whidbey release,
- // we do not have time to get ole32.dll delay load cleaned.
- fThrows = FALSE;
- }
- else if (_stricmp(pdli->szDll, "oleaut32.dll") == 0)
- {
- extern BOOL DelayLoadOleaut32CheckDisabled();
- if (DelayLoadOleaut32CheckDisabled())
- {
- fThrows = FALSE;
- }
- else if ((!pdli->dlp.fImportByName && pdli->dlp.dwOrdinal == 6) ||
- (pdli->dlp.fImportByName && strcmp(pdli->dlp.szProcName, "SysFreeString") == 0))
- {
- // BSTR has been created, which means oleaut32 should have been loaded.
- // Delay load will not fail.
- _ASSERTE (GetModuleHandleA("oleaut32.dll") != NULL);
- fThrows = FALSE;
- }
- }
- else if (_stricmp(pdli->szDll, "mscoree.dll") == 0) // If we are attempting to delay load mscoree.dll
- {
- if (GetModuleHandleA("mscoree.dll") != NULL) // and mscoree.dll has already been loaded
- fThrows = FALSE; // then the delay load will not fail (and hence will not throw).
- }
- if (fThrows)
- {
- CONTRACTL
- {
- SO_TOLERANT;
- THROWS;
- }
- CONTRACTL_END;
- }
- }
-#endif
-
- //STATIC_CONTRACT_NOTHROW;
- STATIC_CONTRACT_FAULT;
- STATIC_CONTRACT_SO_TOLERANT;
-
- // We're allocating strings for the purposes of putting up a critical error box.
- // Obviously, OOM's aren't going to be passed up to the caller.
- HMODULE result = NULL;
- CONTRACT_VIOLATION(FaultNotFatal);
-
-
- switch(dliNotify) {
- case dliNotePreLoadLibrary:
- if(pdli->szDll) {
- result=DoPreloadLibraryThrowing(pdli->szDll);
- }
- break;
- default:
- break;
- }
-
-#if defined (_DEBUG) || defined (__delay_load_trace__)
- SO_NOT_MAINLINE_FUNCTION;
- static int bBreak = false; // true to break on events.
- static int bInit = false; // true after we've checked environment.
- // If we've not yet looked at our environment, then do so.
- if (!bInit)
- {
- PathString rcBreak;
-
- // set DelayLoadBreak=[0|1]
- if (WszGetEnvironmentVariable(W("DelayLoadBreak"), rcBreak))
- {
- // "1" means to break hard and display errors.
- if (rcBreak[0] == '1')
- bBreak = 1;
- // "2" means no break, but display errors.
- else if (rcBreak[0] == '2')
- bBreak = 2;
- else
- bBreak = false;
- }
- bInit = true;
- }
-
- // Chose operation to perform based on operation.
- switch (dliNotify)
- {
- // Called just before a load library takes place. Use this opportunity
- // to display a debug trace message, and possible break if desired.
- case dliNotePreLoadLibrary:
- _DbgPreLoadLibrary(bBreak, pdli);
- break;
- }
-#endif
- return (FARPROC) result;
-}
-
-
-#if defined (_DEBUG) || defined (__delay_load_trace__)
-
-//*****************************************************************************
-// Display a debug message so we know what's going on. Offer to break in
-// debugger if you want to see what call stack forced this library to load.
-//*****************************************************************************
-void _DbgPreLoadLibrary(
- int bBreak, // true to break in debugger.
- DelayLoadInfo *pdli) // Description of the event.
-{
- STATIC_CONTRACT_NOTHROW;
- STATIC_CONTRACT_FORBID_FAULT;
-
- // We're allocating strings for the purposes of putting up a critical error box.
- // Obviously, OOM's aren't going to be passed up to the caller.
- FAULT_NOT_FATAL();
-
-
-#ifdef _ALPHA_
- // for some bizarre reason, calling OutputDebugString during delay load in non-debug mode on Alpha
- // kills program, so only do it when in debug mode ()
- if (! IsDebuggerPresent())
- return;
-#endif
-
- WCHAR rcMessage[_MAX_PATH*2]; // Message for display.
-
- // Give some feedback to the developer.
- StringCchPrintf(rcMessage, COUNTOF(rcMessage), W("Delay loading %hs\n"), pdli->szDll);
- WszOutputDebugString(rcMessage);
-
- if (bBreak)
- {
- wprintf(W("%s"), rcMessage);
-
- if (bBreak == 1)
- {
- _ASSERTE(!"fyi - Delay loading library. Set DelayLoadBreak=0 to disable this assert.");
- }
- }
-}
-
-
-#endif // _DEBUG
-
-#endif // !FEATURE_CORESYSTEM
diff --git a/src/dlls/mscoree/dirs.proj b/src/dlls/mscoree/dirs.proj
deleted file mode 100644
index 8059846470..0000000000
--- a/src/dlls/mscoree/dirs.proj
+++ /dev/null
@@ -1,24 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--The following projects will build during PHASE 1-->
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreClr)' != 'true'">
- <ProjectFile Include="wks\clr.nativeproj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 of the CoreCLR build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreClr)' == 'true'">
- <ProjectFile Include="coreclr\coreclr.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/dlls/mscoree/dw20.msi b/src/dlls/mscoree/dw20.msi
deleted file mode 100644
index f8d0752a84..0000000000
--- a/src/dlls/mscoree/dw20.msi
+++ /dev/null
Binary files differ
diff --git a/src/dlls/mscoree/dw20_amd64.msi b/src/dlls/mscoree/dw20_amd64.msi
deleted file mode 100644
index 53233acc1e..0000000000
--- a/src/dlls/mscoree/dw20_amd64.msi
+++ /dev/null
Binary files differ
diff --git a/src/dlls/mscoree/mscoree.cpp b/src/dlls/mscoree/mscoree.cpp
index 4c613fff6a..8ec460eedd 100644
--- a/src/dlls/mscoree/mscoree.cpp
+++ b/src/dlls/mscoree/mscoree.cpp
@@ -15,37 +15,20 @@
#include "shimload.h"
#include "metadataexports.h"
#include "ex.h"
-#if !defined(FEATURE_CORECLR)
-#include "corsym.h"
-#endif
-#if defined(FEATURE_CORECLR)
#include "product_version.h"
-#endif // FEATURE_CORECLR
#ifdef FEATURE_COMINTEROP
#include "ComCallUnmarshal.h"
#endif // FEATURE_COMINTEROP
-#if !defined(FEATURE_CORECLR) && !defined(CROSSGEN_COMPILE)
-#include <metahost.h>
-extern ICLRRuntimeInfo *g_pCLRRuntime;
-#endif // !FEATURE_CORECLR && !CROSSGEN_COMPILE
-
#include "clrprivhosting.h"
-#ifndef FEATURE_CORECLR
-#include "clr/win32.h"
-#endif // FEATURE_CORECLR
-
#ifdef FEATURE_PROFAPI_ATTACH_DETACH
#include "../../vm/profattach.h"
#endif // FEATURE_PROFAPI_ATTACH_DETACH
-
-#if defined(FEATURE_CORECLR)
#include <dbgenginemetrics.h>
-#endif // FEATURE_CORECLR
// Locals.
BOOL STDMETHODCALLTYPE EEDllMain( // TRUE on success, FALSE on error.
@@ -53,14 +36,6 @@ BOOL STDMETHODCALLTYPE EEDllMain( // TRUE on success, FALSE on error.
DWORD dwReason, // Reason for loading.
LPVOID lpReserved); // Unused.
-#ifdef FEATURE_COMINTEROP_MANAGED_ACTIVATION
-// try to load a com+ class and give out an IClassFactory
-HRESULT STDMETHODCALLTYPE EEDllGetClassObject(
- REFCLSID rclsid,
- REFIID riid,
- LPVOID FAR *ppv);
-#endif // FEATURE_COMINTEROP_MANAGED_ACTIVATION
-
// Globals.
HINSTANCE g_hThisInst; // This library.
@@ -69,8 +44,6 @@ HINSTANCE g_hThisInst; // This library.
// Handle lifetime of loaded library.
//*****************************************************************************
-#ifdef FEATURE_CORECLR
-
#include <shlwapi.h>
#include <process.h> // for __security_init_cookie()
@@ -141,7 +114,6 @@ extern "C" BOOL WINAPI CoreDllMain(HANDLE hInstance, DWORD dwReason, LPVOID lpRe
}
return result;
}
-#endif //FEATURE_CORECLR
extern "C"
BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID lpReserved)
@@ -155,16 +127,6 @@ BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID lpReserved)
// Save the module handle.
g_hThisInst = (HINSTANCE)hInstance;
-#ifndef FEATURE_CORECLR
- // clr.dll cannot be unloaded
- // Normally the shim prevents it from ever being unloaded, but we now support fusion loading
- // us directly, so we need to take an extra ref on our handle to ensure we don't get unloaded.
- if (FAILED(clr::win32::PreventModuleUnload(g_hThisInst)))
- {
- return FALSE;
- }
-#endif // FEATURE_CORECLR
-
// Prevent buffer-overruns
// If buffer is overrun, it is possible the saved callback has been trashed.
// The callback is unsafe.
@@ -192,129 +154,6 @@ BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID lpReserved)
return TRUE;
}
-#ifndef FEATURE_CORECLR // coreclr does not export this
-// ---------------------------------------------------------------------------
-// %%Function: DllGetClassObjectInternal %%Owner: NatBro %%Reviewed: 00/00/00
-//
-// Parameters:
-// rclsid - reference to the CLSID of the object whose
-// ClassObject is being requested
-// iid - reference to the IID of the interface on the
-// ClassObject that the caller wants to communicate
-// with
-// ppv - location to return reference to the interface
-// specified by iid
-//
-// Returns:
-// S_OK - if successful, valid interface returned in *ppv,
-// otherwise *ppv is set to NULL and one of the
-// following errors is returned:
-// E_NOINTERFACE - ClassObject doesn't support requested interface
-// CLASS_E_CLASSNOTAVAILABLE - clsid does not correspond to a supported class
-//
-// Description:
-// Returns a reference to the iid interface on the main COR ClassObject.
-// This function is one of the required by-name entry points for COM
-// DLL's. Its purpose is to provide a ClassObject which by definition
-// supports at least IClassFactory and can therefore create instances of
-// objects of the given class.
-// ---------------------------------------------------------------------------
-
-#ifdef FEATURE_COMINTEROP
-// This could be merged with Metadata's class factories!
-static CComCallUnmarshalFactory g_COMCallUnmarshal;
-#endif // FEATURE_COMINTEROP
-
-STDAPI InternalDllGetClassObject(
- REFCLSID rclsid,
- REFIID riid,
- LPVOID FAR *ppv)
-{
- // @todo: this is called before the runtime is really started, so the contract's don't work.
- STATIC_CONTRACT_NOTHROW;
- STATIC_CONTRACT_SO_TOLERANT;
-
- HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
- BEGIN_SO_INTOLERANT_CODE_NO_THROW_CHECK_THREAD(return COR_E_STACKOVERFLOW);
-
-
- if (rclsid == CLSID_CorMetaDataDispenser || rclsid == CLSID_CorMetaDataDispenserRuntime ||
- rclsid == CLSID_CorRuntimeHost || rclsid == CLSID_CLRRuntimeHost ||
- rclsid == CLSID_TypeNameFactory
- || rclsid == __uuidof(CLRPrivRuntime)
- )
- {
- hr = MetaDataDllGetClassObject(rclsid, riid, ppv);
- }
-#ifdef FEATURE_PROFAPI_ATTACH_DETACH
- else if (rclsid == CLSID_CLRProfiling)
- {
- hr = ICLRProfilingGetClassObject(rclsid, riid, ppv);
- }
-#endif // FEATURE_PROFAPI_ATTACH_DETACH
-#ifdef FEATURE_COMINTEROP
- else if (rclsid == CLSID_ComCallUnmarshal || rclsid == CLSID_ComCallUnmarshalV4)
- {
- // We still respond to the 1.0/1.1/2.0 CLSID so we don't break anyone who is instantiating
- // this (we could be called for CLSID_ComCallUnmarshal if the process is rollForward=true)
- hr = g_COMCallUnmarshal.QueryInterface(riid, ppv);
- }
- else if (rclsid == CLSID_CorSymBinder_SxS)
- {
- EX_TRY
- {
-
- // PDB format - use diasymreader.dll with COM activation
- InlineSString<_MAX_PATH> ssBuf;
- if (SUCCEEDED(GetHModuleDirectory(GetModuleInst(), ssBuf)))
- {
- hr = FakeCoCallDllGetClassObject(rclsid,
- ssBuf,
- riid,
- ppv,
- NULL
- );
- }
- }
- EX_CATCH_HRESULT(hr);
- }
- else
- {
-#ifdef FEATURE_COMINTEROP_MANAGED_ACTIVATION
- // Returns a managed object imported into COM-classic.
- hr = EEDllGetClassObject(rclsid,riid,ppv);
-#endif // FEATURE_COMINTEROP_MANAGED_ACTIVATION
- }
-#endif // FEATURE_COMINTEROP
-
- END_SO_INTOLERANT_CODE;
- return hr;
-} // InternalDllGetClassObject
-
-
-STDAPI DllGetClassObjectInternal(
- REFCLSID rclsid,
- REFIID riid,
- LPVOID FAR *ppv)
-{
- STATIC_CONTRACT_NOTHROW;
- STATIC_CONTRACT_ENTRY_POINT;
-
- HRESULT hr = S_OK;
- BEGIN_ENTRYPOINT_NOTHROW;
-
- // InternalDllGetClassObject exists to resolve an issue
- // on FreeBSD, where libsscoree.so's DllGetClassObject's
- // call to DllGetClassObjectInternal() was being bound to
- // the implementation in libmscordbi.so, not the one in
- // libsscoree.so. The fix is to disambiguate the name.
- hr = InternalDllGetClassObject(rclsid, riid, ppv);
- END_ENTRYPOINT_NOTHROW;
-
- return hr;
-}
-#endif // FEATURE_CORECLR
-
#ifdef FEATURE_COMINTEROP
// ---------------------------------------------------------------------------
// %%Function: DllCanUnloadNowInternal
@@ -767,128 +606,13 @@ CLRRuntimeHostInternal_GetImageVersionString(
// Simply forward the call to the ICLRRuntimeHostInternal implementation.
STATIC_CONTRACT_WRAPPER;
-#if defined(FEATURE_CORECLR) || defined(CROSSGEN_COMPILE)
HRESULT hr = GetCORVersionInternal(wszBuffer, *pcchBuffer, pcchBuffer);
-#else
- ReleaseHolder<ICLRRuntimeHostInternal> pRuntimeHostInternal;
- HRESULT hr = g_pCLRRuntime->GetInterface(CLSID_CLRRuntimeHostInternal,
- IID_ICLRRuntimeHostInternal,
- &pRuntimeHostInternal);
- if (SUCCEEDED(hr))
- {
- hr = pRuntimeHostInternal->GetImageVersionString(wszBuffer, pcchBuffer);
- }
-#endif
return hr;
} // CLRRuntimeHostInternal_GetImageVersionString
- //LONGPATH:TODO: Remove this once Desktop usage has been removed
-#if !defined(FEATURE_CORECLR)
-STDAPI GetCORSystemDirectoryInternal(__out_ecount_part_opt(cchBuffer, *pdwLength) LPWSTR pBuffer,
- DWORD cchBuffer,
- __out_opt DWORD* pdwLength)
-{
-#if defined(CROSSGEN_COMPILE)
-
- CONTRACTL{
- NOTHROW;
- GC_NOTRIGGER;
- ENTRY_POINT;
- PRECONDITION(CheckPointer(pBuffer, NULL_OK));
- PRECONDITION(CheckPointer(pdwLength, NULL_OK));
- } CONTRACTL_END;
-
- HRESULT hr = S_OK;
- BEGIN_ENTRYPOINT_NOTHROW;
-
- if (pdwLength == NULL)
- IfFailGo(E_POINTER);
-
- if (pBuffer == NULL)
- IfFailGo(E_POINTER);
-
- if (WszGetModuleFileName(NULL, pBuffer, cchBuffer) == 0)
- {
- IfFailGo(HRESULT_FROM_GetLastError());
- }
- WCHAR *pSeparator;
- pSeparator = wcsrchr(pBuffer, DIRECTORY_SEPARATOR_CHAR_W);
- if (pSeparator == NULL)
- {
- IfFailGo(HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND));
- }
- *pSeparator = W('\0');
-
- // Include the null terminator in the length
- *pdwLength = (DWORD)wcslen(pBuffer) + 1;
-
-ErrExit:
- END_ENTRYPOINT_NOTHROW;
- return hr;
-
-#else // CROSSGEN_COMPILE
-
- // Simply forward the call to the ICLRRuntimeInfo implementation.
- STATIC_CONTRACT_WRAPPER;
- HRESULT hr = S_OK;
- if (g_pCLRRuntime)
- {
- hr = g_pCLRRuntime->GetRuntimeDirectory(pBuffer, &cchBuffer);
- *pdwLength = cchBuffer;
- }
- else
- {
- // not invoked via shim (most probably loaded by Fusion)
- WCHAR wszPath[_MAX_PATH];
- DWORD dwLength = WszGetModuleFileName(g_hThisInst, wszPath, NumItems(wszPath));
-
-
- if (dwLength == 0 || (dwLength == NumItems(wszPath) && GetLastError() == ERROR_INSUFFICIENT_BUFFER))
- {
- return E_UNEXPECTED;
- }
-
- LPWSTR pwzSeparator = wcsrchr(wszPath, W('\\'));
- if (pwzSeparator == NULL)
- {
- return E_UNEXPECTED;
- }
- pwzSeparator[1] = W('\0'); // after '\'
-
- LPWSTR pwzDirectoryName = wszPath;
-
- size_t cchLength = wcslen(pwzDirectoryName) + 1;
-
- if (cchBuffer < cchLength)
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- if (pBuffer != NULL)
- {
- // all look good, copy the string over
- wcscpy_s(pBuffer,
- cchLength,
- pwzDirectoryName
- );
- }
- }
-
- // hand out the length regardless of success/failure
- *pdwLength = (DWORD)cchLength;
- }
- return hr;
-
-#endif // CROSSGEN_COMPILE
-}
-#endif // !FEATURE_CORECLR
-
STDAPI GetCORSystemDirectoryInternaL(SString& pBuffer)
{
-#if defined(FEATURE_CORECLR) || defined(CROSSGEN_COMPILE)
-
CONTRACTL {
NOTHROW;
GC_NOTRIGGER;
@@ -918,34 +642,6 @@ STDAPI GetCORSystemDirectoryInternaL(SString& pBuffer)
END_ENTRYPOINT_NOTHROW;
return hr;
-
-#else // FEATURE_CORECLR || CROSSGEN_COMPILE
- DWORD cchBuffer = MAX_PATH - 1;
- // Simply forward the call to the ICLRRuntimeInfo implementation.
- STATIC_CONTRACT_WRAPPER;
- HRESULT hr = S_OK;
- if (g_pCLRRuntime)
- {
- WCHAR* temp = pBuffer.OpenUnicodeBuffer(cchBuffer);
- hr = g_pCLRRuntime->GetRuntimeDirectory(temp, &cchBuffer);
- pBuffer.CloseBuffer(cchBuffer - 1);
- }
- else
- {
- // not invoked via shim (most probably loaded by Fusion)
- DWORD dwLength = WszGetModuleFileName(g_hThisInst, pBuffer);
-
-
- if (dwLength == 0 || ((dwLength == pBuffer.GetCount() + 1) && GetLastError() == ERROR_INSUFFICIENT_BUFFER))
- {
- return E_UNEXPECTED;
- }
-
- CopySystemDirectory(pBuffer, pBuffer);
- }
- return hr;
-
-#endif // FEATURE_CORECLR || CROSSGEN_COMPILE
}
//
@@ -967,8 +663,6 @@ __out_ecount_z_opt(cchBuffer) LPWSTR pBuffer,
DWORD cchBuffer,
__out DWORD *pdwLength)
{
-#if defined(FEATURE_CORECLR) || defined(CROSSGEN_COMPILE)
-
CONTRACTL {
NOTHROW;
GC_NOTRIGGER;
@@ -1009,113 +703,8 @@ __out_ecount_z_opt(cchBuffer) LPWSTR pBuffer,
END_ENTRYPOINT_NOTHROW;
return hr;
-#else // FEATURE_CORECLR || CROSSGEN_COMPILE
-
- // Simply forward the call to the ICLRRuntimeInfo implementation.
- STATIC_CONTRACT_WRAPPER;
- HRESULT hr = S_OK;
- if (g_pCLRRuntime)
- {
- hr = g_pCLRRuntime->GetVersionString(pBuffer, &cchBuffer);
- *pdwLength = cchBuffer;
- }
- else
- {
- // not invoked via shim (most probably loaded by Fusion)
- WCHAR wszPath[_MAX_PATH];
- DWORD dwLength = WszGetModuleFileName(g_hThisInst, wszPath,NumItems(wszPath));
-
-
- if (dwLength == 0 || (dwLength == NumItems(wszPath) && GetLastError() == ERROR_INSUFFICIENT_BUFFER))
- {
- return E_UNEXPECTED;
- }
-
- LPWSTR pwzSeparator = wcsrchr(wszPath, W('\\'));
- if (pwzSeparator == NULL)
- {
- return E_UNEXPECTED;
- }
- *pwzSeparator = W('\0');
-
- LPWSTR pwzDirectoryName = wcsrchr(wszPath, W('\\'));
- if (pwzDirectoryName == NULL)
- {
- return E_UNEXPECTED;
- }
- pwzDirectoryName++; // skip '\'
-
- size_t cchLength = wcslen(pwzDirectoryName) + 1;
-
- if (cchBuffer < cchLength)
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- if (pBuffer != NULL)
- {
- // all look good, copy the string over
- wcscpy_s(pBuffer,
- cchLength,
- pwzDirectoryName
- );
- }
- }
-
- // hand out the length regardless of success/failure
- *pdwLength = (DWORD)cchLength;
-
- }
- return hr;
-
-#endif // FEATURE_CORECLR || CROSSGEN_COMPILE
-
}
-#ifndef CROSSGEN_COMPILE
-#ifndef FEATURE_CORECLR
-STDAPI LoadLibraryShimInternal(LPCWSTR szDllName, LPCWSTR szVersion, LPVOID pvReserved, HMODULE *phModDll)
-{
- // Simply forward the call to the ICLRRuntimeInfo implementation.
- STATIC_CONTRACT_WRAPPER;
- if (g_pCLRRuntime)
- {
- return g_pCLRRuntime->LoadLibrary(szDllName, phModDll);
- }
- else
- {
- // no runtime info, probably loaded directly (e.g. from Fusion)
- // just look next to ourselves.
- WCHAR wszPath[MAX_PATH];
- DWORD dwLength = WszGetModuleFileName(g_hThisInst, wszPath,NumItems(wszPath));
-
-
- if (dwLength == 0 || (dwLength == NumItems(wszPath) && GetLastError() == ERROR_INSUFFICIENT_BUFFER))
- {
- return E_UNEXPECTED;
- }
-
- LPWSTR pwzSeparator = wcsrchr(wszPath, W('\\'));
- if (pwzSeparator == NULL)
- {
- return E_UNEXPECTED;
- }
- pwzSeparator[1]=W('\0');
-
- wcscat_s(wszPath,NumItems(wszPath),szDllName);
- *phModDll= WszLoadLibraryEx(wszPath,NULL,GetLoadWithAlteredSearchPathFlag());
-
- if (*phModDll == NULL)
- {
- return HRESULT_FROM_GetLastError();
- }
- return S_OK;
- }
-}
-#endif
-#endif
-
static DWORD g_dwSystemDirectory = 0;
static WCHAR * g_pSystemDirectory = NULL;
@@ -1213,7 +802,7 @@ HRESULT SetInternalSystemDirectory()
return hr;
}
-#if defined(CROSSGEN_COMPILE) && defined(FEATURE_CORECLR)
+#if defined(CROSSGEN_COMPILE)
void SetMscorlibPath(LPCWSTR wzSystemDirectory)
{
DWORD len = (DWORD)wcslen(wzSystemDirectory);
diff --git a/src/dlls/mscoree/mscoree.settings.targets b/src/dlls/mscoree/mscoree.settings.targets
deleted file mode 100644
index 6aa31b990f..0000000000
--- a/src/dlls/mscoree/mscoree.settings.targets
+++ /dev/null
@@ -1,268 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Leaf project Properties-->
- <PropertyGroup>
-
- <UserIncludes>
- $(UserIncludes);
- .;
- ..;
- ..\..\inc;
- ..\..\..\inc;
- ..\..\..\fusion\inc
- </UserIncludes>
-
- <DllEntryPoint Condition="'$(FeatureCoreclr)'=='true'">CoreDllMain</DllEntryPoint>
- <DllEntryPoint Condition="'$(FeatureCoreclr)'!='true'">_DllMainCRTStartup</DllEntryPoint>
- <TargetType Condition="'$(TargetType)'==''">DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
-
- <NoLinkGdi32>true</NoLinkGdi32>
- <LinkAdditionalOptions>$(LinkAdditionalOptions) /NXCOMPAT</LinkAdditionalOptions>
- <!-- /NOVCFEATURE forces linker to emit old .pdb format. It is required for scan.exe tool to work -->
- <LinkAdditionalOptions Condition="'$(BuildType)' == 'Checked' and '$(UseCoreToolset)' != 'true'">$(LinkAdditionalOptions) /NOVCFEATURE</LinkAdditionalOptions>
- <LinkGenerateManifest Condition="'$(BuildForCoreSystem)' == 'true'">false</LinkGenerateManifest>
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>..\stdafx.cpp</PCHCompile>
- <LinkWarningsAsErrors>false</LinkWarningsAsErrors>
-
- <CDefines Condition="'$(_BuildType)' == 'dbg'">$(CDefines);SPECIAL_BUILD</CDefines>
- <DllDef Condition="'$(TargetType)'=='DYNLINK'">$(IntermediateOutputDirectory)\$(MainClrModuleName).def</DllDef>
-
- <ExtDelayImpLib>true</ExtDelayImpLib>
- <DoNotAddCrtLibPath>true</DoNotAddCrtLibPath>
- <LinkUseDefaultLib>false</LinkUseDefaultLib>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(BuildForCoreSystem)' != 'true'">
- <LinkDelayLoad Condition="'$(LinkDelayLoad)'!=''">$(LinkDelayLoad);</LinkDelayLoad>
- <LinkDelayLoad>$(LinkDelayLoad)ole32.dll;OLEAUT32.dll;mpr.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureCoreclr)'!='true'">$(LinkDelayLoad);urlmon.dll;mscoree.dll;wintrust.dll</LinkDelayLoad>
- <LinkDelayLoad>$(LinkDelayLoad);wtsapi32.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureCrypto)'=='true'">$(LinkDelayLoad);crypt32.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureFusion)'=='true'">$(LinkDelayLoad);wininet.dll;cabinet.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureWatson)'=='true'">$(LinkDelayLoad);version.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureCominterop)'=='true'">$(LinkDelayLoad);api-ms-win-core-winrt-l1-1-0.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureCominterop)'=='true'">$(LinkDelayLoad);api-ms-win-core-winrt-string-l1-1-0.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureCominterop)'=='true'">$(LinkDelayLoad);api-ms-win-ro-typeresolution-l1-1-0.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureCominterop)'=='true'">$(LinkDelayLoad);api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureCominterop)'=='true'">$(LinkDelayLoad);bcrypt.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureFusion)'=='true'">$(LinkDelayLoad);Rstrtmgr.dll</LinkDelayLoad>
- <LinkDelayLoad Condition="'$(FeatureFusion)'=='true'">$(LinkDelayLoad);msi.dll</LinkDelayLoad>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(BuildForCoreSystem)' != 'true' and '$(DebugBuild)' == 'true'">
- <MsdisDll Condition="'$(TargetCpu)'=='i386' or '$(TargetCpu)' == 'amd64'">msvcdis$(VC_NONCRT_ProdVerX).dll</MsdisDll>
- <CDefines Condition="'$(TargetCpu)'=='i386' or '$(TargetCpu)' == 'amd64'">$(CDefines);MSDIS_DLL="\"$(MsdisDll)\""</CDefines>
- <LinkDelayLoad Condition="'$(TargetCpu)'=='i386' or '$(TargetCpu)' == 'amd64'">$(LinkDelayLoad);$(MsdisDll)</LinkDelayLoad>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildArchitecture)' == 'arm'">
- <!--Merge GC write barrier descriptors into read-only data section.-->
- <LinkMergeSections Include=".clrwb=.rdata"/>
- </ItemGroup>
-
- <!--Leaf Project Items-->
- <ItemGroup Condition="'$(BuildForCoreSystem)' == 'true'" >
- <TargetLib Include="$(CoreSystemCrt)" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- <TargetLib Condition="'$(FeatureCominterop)'=='true'" Include="$(SdkLibPath)\1.0\api-ms-win-core-winrt-l1.lib" />
- <TargetLib Condition="'$(FeatureCominterop)'=='true'" Include="$(SdkLibPath)\1.0\api-ms-win-core-winrt-string-l1.lib" />
- <TargetLib Condition="'$(FeatureCominterop)'=='true'" Include="$(SdkLibPath)\1.0\api-ms-win-ro-typeresolution-l1.lib" />
- <TargetLib Condition="'$(FeatureCominterop)'=='true'" Include="$(SdkLibPath)\api-ms-win-core-winrt-roparameterizediid-l1-1-0.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(BuildForCoreSystem)' == 'true' and '$(BuildForWindows7)' == 'true'">
- <TargetLib Include="$(SdkLibPath)\bcrypt.lib" />
- <TargetLib Include="$(SdkLibPath)\crypt32.lib" />
- <TargetLib Include="$(SdkLibPath)\cryptspp.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_fw.lib" />
- </ItemGroup>
- <ItemGroup Condition="'$(BuildForCoreSystem)' == 'true' and '$(BuildForWindows7)' != 'true'">
- <TargetLib Include="$(SdkLibPath)\mincore.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_legacy.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_private.lib" />
- <TargetLib Include="$(SdkLibPath)\mincore_obsolete.lib" />
- </ItemGroup>
-
- <ItemGroup>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ExternalAPIsPath)\Whidbey\lib\$(BuildArchitecture)\isolation_whidbey$(BuildSuffix).lib" />
- <ImportLib Condition="'$(UseMsvcrt)'!='true' and '$(DebugBuild)' == 'true' and '$(BuildForCoreSystem)' != 'true'" Include="$(CrtLibPath)\libcpmtd.lib" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(FeatureMergeJitAndEngine)' == 'true'">
- <ImportLib Include="$(ClrLibPath)\clrjit.lib" />
-
- <!-- We build RyuJIT only for amd64 and arm64, and use JIT32 for ARM and x86 -->
- <ProjectReference Condition="'$(BuildArchitecture)' == 'amd64' or '$(BuildArchitecture)' == 'arm64'" Include="$(ClrSrcDirectory)jit\dll\jit.nativeproj" />
- <ProjectReference Condition="'$(BuildArchitecture)' != 'amd64' and '$(BuildArchitecture)' != 'arm64'" Include="$(ClrSrcDirectory)jit32\dll\jit.nativeproj" />
- </ItemGroup>
-
- <ItemGroup>
- <ImportLib Include="$(ClrLibPath)\cee_wks.lib">
- <ProjectReference>$(ClrSrcDirectory)vm\wks\wks.nativeproj</ProjectReference>
- </ImportLib>
- <LinkPreCrtLibs Include="$(ClrLibPath)\cee_wks.lib" />
-
- <ImportLib Include="$(ClrLibPath)\utilcode.lib">
- <ProjectReference>$(ClrSrcDirectory)utilcode\dyncrt\dyncrt.nativeproj</ProjectReference>
- </ImportLib>
- <LinkPreCrtLibs Include="$(ClrLibPath)\utilcode.lib" />
-
- <ImportLib Include="$(ClrLibPath)\ildbsymlib.lib">
- <ProjectReference>$(ClrSrcDirectory)debug\ildbsymlib\HostLocal\ildbsymlib.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ClrLibPath)\fusionasmc.lib">
- <ProjectReference>$(ClrSrcDirectory)fusion\asmcache\asmcache.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ClrLibPath)\fusionbind.lib">
- <ProjectReference>$(ClrSrcDirectory)fusion\binder\binder.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ClrLibPath)\fusiondl.lib">
- <ProjectReference>$(ClrSrcDirectory)fusion\download\download.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ClrLibPath)\fusionmparse.lib">
- <ProjectReference>$(ClrSrcDirectory)fusion\mparse\mparse.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ClrLibPath)\fusionutils.lib">
- <ProjectReference>$(ClrSrcDirectory)fusion\utils\utils.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ClrLibPath)\fusioninterface.lib">
- <ProjectReference>$(ClrSrcDirectory)fusion\interface\interface.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Include="$(ClrLibPath)\strongname_wks.lib">
- <ProjectReference>$(ClrSrcDirectory)strongname\api\wks\strongname_wks.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ClrLibPath)\usagelog.lib">
- <ProjectReference>$(ClrSrcDirectory)usagelog\usagelog.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ClrLibPath)\nativebinder.lib">
- <ProjectReference>$(ClrSrcDirectory)nativebinder\nativebinder.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureFusion)'=='true'" Include="$(ClrLibPath)\xmlparser.lib">
- <ProjectReference>$(ClrSrcDirectory)xmlparser\xmlparser.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureNativeImageGeneration)'=='true'" Include="$(ClrLibPath)\corzap.lib">
- <ProjectReference>$(ClrSrcDirectory)zap\wks\zap.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(PerfcountersSupportedBuild)'=='true'" Include="$(ClrLibPath)\perfcounters.lib">
- <ProjectReference>$(ClrSrcDirectory)profile\counters\counters.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(DebuggingSupportedBuild)'=='true'" Include="$(ClrLibPath)\cordbee_wks.lib">
- <ProjectReference>$(ClrSrcDirectory)debug\ee\wks\wks.nativeproj</ProjectReference>
- </ImportLib>
- <ImportLib Condition="'$(FeatureDbgipcTransportVM)' == 'true'" Include="$(ClrLibPath)\dbgrawconn.lib">
- <ProjectReference>$(ClrSrcDirectory)debug\dbgrawconn\dbgrawconn.nativeproj</ProjectReference>
- </ImportLib>
- <TargetLib Include="@(ImportLib)"/>
- </ItemGroup>
-
- <ItemGroup>
- <TargetLib Condition="'$(TargetCpu)'=='amd64' or '$(TargetCpu)' == 'arm' or '$(TargetCpu)' == 'arm64'" Include="$(ClrLibPath)\gcinfo.lib">
- <ProjectReference>$(ClrSrcDirectory)gcinfo\lib\gcinfo.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Condition="'$(FeatureIpcman)'=='true'" Include="$(ClrLibPath)\ipcmanager.lib">
- <ProjectReference>$(ClrSrcDirectory)ipcman\ipcman\ipcman.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDCompiler_wks.lib">
- <ProjectReference>$(ClrSrcDirectory)md\compiler\wks\mdcompiler_wks.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDRuntime.lib">
- <ProjectReference>$(ClrSrcDirectory)md\runtime\wks\mdruntime.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDRuntimeRW.lib">
- <ProjectReference>$(ClrSrcDirectory)md\enc\wks\mdruntimerw.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDWinMD_wks.lib">
- <ProjectReference>$(ClrSrcDirectory)md\winmd\wks\MDWinMD_wks.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\MDHotData.lib">
- <ProjectReference>$(ClrSrcDirectory)md\hotdata\full\mdhotdata.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\comfloat_wks.lib">
- <ProjectReference>$(ClrSrcDirectory)classlibnative\float\float.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\comnls_wks.lib">
- <ProjectReference>$(ClrSrcDirectory)classlibnative\nls\nls.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\comcrypt_wks.lib">
- <ProjectReference>$(ClrSrcDirectory)classlibnative\cryptography\cryptography.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\bcltype.lib">
- <ProjectReference>$(ClrSrcDirectory)classlibnative\bcltype\bcltype.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Condition="'$(FeatureRemoting)'=='true'" Include="$(ClrLibPath)\remoting.lib">
- <ProjectReference>$(ClrSrcDirectory)classlibnative\remoting\remoting.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\ceefgen.lib">
- <ProjectReference>$(ClrSrcDirectory)md\ceefilegen\ceefgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Condition="'$(FeatureFusion)'!='true'" Include="$(ClrLibPath)\v3binder.lib">
- <ProjectReference>$(ClrSrcDirectory)binder\v3binder\v3binder.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Condition="'$(FeatureCoreclr)'!='true'" Include="$(ClrLibPath)\shimload.lib">
- <ProjectReference>$(ClrSrcDirectory)shimload\shimload.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Condition="'$(FeatureCoreClr)'!='true'" Include="$(ClrLibPath)\delayimp.lib">
- <ProjectReference>$(ClrSrcDirectory)delayimp\delayimp.nativeproj</ProjectReference>
- </TargetLib>
- </ItemGroup>
-
- <ItemGroup>
- <TargetLib Include="$(ClrLibPath)\corguids.lib" />
- <TargetLib Condition="'$(FeatureCoreclr)'!='true'" Include="$(SdkLibPath)\mscoree.lib" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(BuildForCoreSystem)' != 'true'" >
- <TargetLib Include="$(VCToolsLibPath)\diaguids.lib" />
- <TargetLib Include="$(SdkLibPath)\ntdll.lib" />
- <TargetLib Include="$(SdkLibPath)\kernel32.lib" />
- <TargetLib Include="$(SdkLibPath)\user32.lib" />
- <TargetLib Include="$(SdkLibPath)\advapi32.lib" />
- <TargetLib Include="$(SdkLibPath)\ole32.lib" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\wintrust.lib" />
- <TargetLib Include="$(SdkLibPath)\shlwapi.lib" />
- <TargetLib Condition="'$(FeatureCrypto)'=='true' or '$(FeatureX509)'=='true'" Include="$(SdkLibPath)\crypt32.lib" />
- <TargetLib Condition="'$(FeatureCominterop)'=='true'" Include="$(SdkLibPath)\urlmon.lib" />
- <TargetLib Condition="'$(FeatureCominterop)'=='true'" Include="$(SdkLibPath)\bcrypt.lib" />
- <TargetLib Condition="'$(FeatureCominterop)'=='true'" Include="$(SdkLibPath)\RuntimeObject.lib" />
- <TargetLib Condition="'$(FeatureFusion)'=='true'" Include="$(SdkLibPath)\cabinet.lib" />
- <TargetLib Condition="'$(FeatureFusion)'=='true'" Include="$(SdkLibPath)\wininet.lib" />
- <TargetLib Include="$(SdkLibPath)\mpr.lib" />
- <TargetLib Include="$(SdkLibPath)\version.lib" />
- <TargetLib Include="$(SdkLibPath)\aux_ulib.lib" />
- <TargetLib Include="$(SdkLibPath)\wtsapi32.lib" />
- <TargetLib Condition="'$(FeatureFusion)'=='true'" Include="$(SdkLibPath)\Rstrtmgr.lib" />
- <TargetLib Condition="'$(FeatureFusion)'=='true'" Include="$(SdkLibPath)\msi.lib" />
- <TargetLib Condition="'$(FeatureDbgipcTransportVM)' == 'true'" Include="$(SdkLibPath)\ws2_32.lib" />
- </ItemGroup>
-
- <ItemGroup>
- <TargetLib Condition="('$(TargetCpu)'=='i386' or '$(TargetCpu)' == 'amd64') and '$(BuildForCoreSystem)' != 'true'" Include="$(VCToolsLibPath)\msvcdis.lib" />
- </ItemGroup>
-
- <ItemGroup>
- <RCResourceFile Include="..\Native.rc" />
- <CppPreprocess Include="..\mscorwks_ntdef.src">
- <Defines>@(CommonPreprocessDefines);$(CDefines);$(TargetDefines)</Defines>
- <OutputFile>$(DllDef)</OutputFile>
- <AdditionalOptions>/TC</AdditionalOptions>
- </CppPreprocess>
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="..\MSCoree.cpp" />
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="..\ComCallUnmarshal.cpp" />
- <CppCompile Include="..\DelayLoad.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(FeatureCoreclr)'=='true'">
- <CppCompile Include="..\unixinterface.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/dlls/mscoree/mscoree.targets b/src/dlls/mscoree/mscoree.targets
deleted file mode 100644
index 9f4bd674a9..0000000000
--- a/src/dlls/mscoree/mscoree.targets
+++ /dev/null
@@ -1,198 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <ItemGroup>
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostWindowsx86)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordbi\HostWinx86\mscordbi.nativeproj" />
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostWindowsx86)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordac\HostWinx86\mscordac.nativeproj" />
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostWindowsamd64)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordbi\HostWinAmd64\mscordbi.nativeproj" />
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostWindowsamd64)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordac\HostWinAmd64\mscordac.nativeproj" />
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostOneCorex86)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordbi\HostOneCorex86\mscordbi.nativeproj" />
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostOneCorex86)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordac\HostOneCorex86\mscordac.nativeproj" />
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostOneCoreamd64)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordbi\HostOneCoreAmd64\mscordbi.nativeproj" />
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostOneCoreamd64)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordac\HostOneCoreAmd64\mscordac.nativeproj" />
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostLocal)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordbi\HostLocal\mscordbi.nativeproj" />
- <ProjectReference Condition="'$(FeatureDbiOopDebugging_HostLocal)'=='true'" Include="$(ClrSrcDirectory)dlls\mscordac\HostLocal\mscordac.nativeproj" />
- </ItemGroup>
-
- <PropertyGroup>
- <!-- Sadly, this is duplicated from ndp\clr\src\Debug\SetDebugTargetLocal.props
- I don't want to include that props directly because it would change the defines for all compilation files, and we only want these
- defines set for preprocessing daccess.i -->
- <DaccessTargetDefines Condition="('$(BuildArchitecture)' == 'i386' or '$(_BuildArch)'=='rotor_x86')">$(DaccessTargetDefines);DBG_TARGET_X86=1</DaccessTargetDefines>
- <DbgTargetAmd64 Condition="'$(BuildArchitecture)' == 'amd64'">1</DbgTargetAmd64>
- <DaccessTargetDefines Condition="'$(BuildArchitecture)' == 'amd64'">$(DaccessTargetDefines);DBG_TARGET_AMD64=1</DaccessTargetDefines>
- <DaccessTargetDefines Condition="'$(BuildArchitecture)' == 'arm'">$(DaccessTargetDefines);DBG_TARGET_ARM=1;</DaccessTargetDefines>
- <DbgTargetArm64 Condition="'$(BuildArchitecture)' == 'arm64'">1</DbgTargetArm64>
- <DaccessTargetDefines Condition="'$(BuildArchitecture)' == 'arm64'">$(DaccessTargetDefines);DBG_TARGET_ARM64=1;</DaccessTargetDefines>
- <DbgTargetWin64 Condition="'$(DbgTargetAmd64)' == '1' Or'$(DbgTargetArm64)' == '1'">1</DbgTargetWin64>
- <DaccessTargetDefines Condition="'$(DbgTargetAmd64)' == '1' Or'$(DbgTargetArm64)' == '1' ">$(DaccessTargetDefines);DBG_TARGET_WIN64=1</DaccessTargetDefines>
- <DbgTarget64bit Condition="'$(DbgTargetWin64)' == '1'">1</DbgTarget64bit>
- <DaccessTargetDefines Condition="'$(DbgTargetWin64)' == '1'">$(DaccessTargetDefines);DBG_TARGET_64BIT=1</DaccessTargetDefines>
-
- <!-- When embedding the debug resource into clr.dll/coreclr.dll we need to know what SKU the dll is from-->
- <ClrDebugResourceSku>clr</ClrDebugResourceSku>
- <ClrDebugResourceSku Condition="'$(FeatureCoresystem)'=='true'">onecoreclr</ClrDebugResourceSku>
- </PropertyGroup>
-
- <ItemGroup>
- <CppPreprocess Include="$(ClrSrcDirectory)\debug\daccess\daccess.cpp">
- <Defines>@(CommonPreprocessDefines);$(CDefines);$(DaccessTargetDefines);DACCESS_COMPILE</Defines>
- <FinalOutput>$(IntermediateOutputDirectory)\daccess.i</FinalOutput>
- <Includes>
- $(UserIncludes);
- $(ClrSrcDirectory)\debug\daccess;
- $(ClrSrcDirectory)\vm;
- $(ClrSrcDirectory)\gc;
- $(ClrSrcDirectory)\vm\$(TargetCpu);
- $(ClrSrcDirectory)\debug\inc;
- $(ClrSrcDirectory)\debug\inc\$(TargetCpu);
- $(ClrSrcDirectory)\debug\inc\dump;
- $(ClrSrcDirectory)\debug\ee;
- $(ClrSrcDirectory)\inc;
- $(ClrSrcDirectory)\inc\$(IntermediateOutputDirectory);
- $(VCToolsIncPath);
- $(ClrSrcDirectory)\gcdump;
- $(ClrSrcDirectory)\md\inc;
- $(ClrSrcDirectory)\strongname\inc;
- $(CrtIncPath);
- $(AtlIncPath);
- $(SdkIncPath);
- $(SdkIncInternalPath);
- $(DevDivSdkIncPath);
- $(DdkIncPath);
- $(VSCommonIncPath);
- $(ConfigIncPath);
- $(IntermediateOutputDirectory);
- $(OakIncPath)
- </Includes>
- </CppPreprocess>
- </ItemGroup>
-
- <ItemGroup>
- <Clean Include="$(IntermediateOutputDirectory)\wks.bin" />
- </ItemGroup>
-
- <Target Name="GenerateExportsForDac"
- Inputs="$(IntermediateOutputDirectory)\daccess.i;$(ProductOutputPdb);$(ProductOutputFile)"
- Outputs="$(IntermediateOutputDirectory)\wks.bin"
- DependsOnTargets="Link">
- <Exec Command="$(DacTableGen) /dac:$(IntermediateOutputDirectory)\daccess.i /pdb:$(ProductOutputPdb) /dll:$(ProductOutputFile) /bin:$(IntermediateOutputDirectory)\wks.bin" StandardOutputImportance="Normal" />
- </Target>
-
- <Target Name="GenerateDebugResources">
- <!-- Windows X86 -->
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordbi\HostWinx86\mscordbi.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostWindowsx86)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_winx86mscordbiOutputPath"/>
- </MSBuild>
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordac\HostWinx86\mscordac.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostWindowsx86)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_winx86mscordacOutputPath"/>
- </MSBuild>
- <Exec Condition="'$(FeatureDbiOopDebugging_HostWindowsx86)'=='true'"
- Command="$(GenClrDebugResource) /dac:@(_winx86mscordacOutputPath) /dbi:@(_winx86mscordbiOutputPath) /sku:$(ClrDebugResourceSku) /out:$(IntermediateOutputDirectory)\clrDebugResource_winx86.bin"
- StandardOutputImportance="Normal" />
- <Exec Condition="'$(FeatureDbiOopDebugging_HostWindowsx86)'=='true'"
- Command="$(PdbTypeMatch) $(ProductOutputPdb) @(_winx86mscordacOutputPath->'%(RootDir)%(Directory)%(Filename).pdb') $(ClrSrcDirectory)\dlls\mscoree\type_exclusion_list.txt"
- StandardOutputImportance="Normal" />
-
- <!-- Windows AMD64 -->
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordbi\HostWinAmd64\mscordbi.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostWindowsamd64)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_winamd64mscordbiOutputPath"/>
- </MSBuild>
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordac\HostWinAmd64\mscordac.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostWindowsamd64)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_winamd64mscordacOutputPath"/>
- </MSBuild>
- <Exec Condition="'$(FeatureDbiOopDebugging_HostWindowsamd64)'=='true'"
- Command="$(GenClrDebugResource) /dac:@(_winamd64mscordacOutputPath) /dbi:@(_winamd64mscordbiOutputPath) /sku:$(ClrDebugResourceSku) /out:$(IntermediateOutputDirectory)\clrDebugResource_winamd64.bin"
- StandardOutputImportance="Normal" />
- <Exec Condition="'$(FeatureDbiOopDebugging_HostWindowsamd64)'=='true'"
- Command="$(PdbTypeMatch) $(ProductOutputPdb) @(_winamd64mscordacOutputPath->'%(RootDir)%(Directory)%(Filename).pdb') $(ClrSrcDirectory)\dlls\mscoree\type_exclusion_list.txt"
- StandardOutputImportance="Normal" />
-
- <!-- OneCore X86 -->
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordbi\HostOneCorex86\mscordbi.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostOneCorex86)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_onecorex86mscordbiOutputPath"/>
- </MSBuild>
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordac\HostOneCorex86\mscordac.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostOneCorex86)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_onecorex86mscordacOutputPath"/>
- </MSBuild>
- <Exec Condition="'$(FeatureDbiOopDebugging_HostOneCorex86)'=='true'"
- Command="$(GenClrDebugResource) /dac:@(_onecorex86mscordacOutputPath) /dbi:@(_onecorex86mscordbiOutputPath) /sku:$(ClrDebugResourceSku) /out:$(IntermediateOutputDirectory)\clrDebugResource_onecorex86.bin"
- StandardOutputImportance="Normal" />
-
- <!-- OneCore AMD64 -->
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordbi\HostOneCoreAmd64\mscordbi.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostOneCoreamd64)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_onecoreamd64mscordbiOutputPath"/>
- </MSBuild>
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordac\HostOneCoreAmd64\mscordac.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostOneCoreamd64)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_onecoreamd64mscordacOutputPath"/>
- </MSBuild>
- <Exec Condition="'$(FeatureDbiOopDebugging_HostOneCoreamd64)'=='true'"
- Command="$(GenClrDebugResource) /dac:@(_onecoreamd64mscordacOutputPath) /dbi:@(_onecoreamd64mscordbiOutputPath) /sku:$(ClrDebugResourceSku) /out:$(IntermediateOutputDirectory)\clrDebugResource_onecoreamd64.bin"
- StandardOutputImportance="Normal" />
-
- <!-- Local -->
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordbi\HostLocal\mscordbi.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostLocal)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_mscordbiOutputPath"/>
- </MSBuild>
- <MSBuild Projects="$(ClrSrcDirectory)dlls\mscordac\HostLocal\mscordac.nativeproj"
- Targets="Link"
- BuildInParallel="$(BuildInParallel)"
- Condition="'$(FeatureDbiOopDebugging_HostLocal)'=='true'">
- <Output TaskParameter="TargetOutputs" ItemName="_mscordacOutputPath"/>
- </MSBuild>
- <Exec Condition="'$(FeatureDbiOopDebugging_HostLocal)'=='true'"
- Command="$(GenClrDebugResource) /dac:@(_mscordacOutputPath) /dbi:@(_mscordbiOutputPath) /sku:$(ClrDebugResourceSku) /out:$(IntermediateOutputDirectory)\clrDebugResource.bin"
- StandardOutputImportance="Normal" />
- <Exec Condition="'$(FeatureDbiOopDebugging_HostLocal)'=='true'"
- Command="$(PdbTypeMatch) $(ProductOutputPdb) @(_mscordacOutputPath->'%(RootDir)%(Directory)%(Filename).pdb') $(ClrSrcDirectory)\dlls\mscoree\type_exclusion_list.txt"
- StandardOutputImportance="Normal" />
-
- </Target>
-
- <Target Name="EmbedExportsForDac"
- DependsOnTargets="GenerateExportsForDac"
- AfterTargets="Link"
- BeforeTargets="EmbedDebugResources"
- Condition="'$(PogoInstrument)' != 'true' or '$(PogoOptimize)' == 'true' or '$(PogoUpdate)' == 'true'">
- <Exec Command="$(InjectResource) /bin:$(IntermediateOutputDirectory)\wks.bin /dll:$(ProductOutputFile)" StandardOutputImportance="Normal" />
- </Target>
-
- <Target Name="EmbedDebugResources"
- DependsOnTargets="GenerateDebugResources"
- AfterTargets="EmbedExportsForDac"
- BeforeTargets="CoreCopyProductFiles;PlaceSymbols"
- Condition="'$(PogoInstrument)' != 'true' or '$(PogoOptimize)' == 'true' or '$(PogoUpdate)' == 'true'">
- <Exec Condition="'$(FeatureDbiOopDebugging_HostWindowsx86)'=='true'" Command="$(InjectResource) /bin:$(IntermediateOutputDirectory)\clrDebugResource_winx86.bin /dll:$(ProductOutputFile) /name:CLRDEBUGINFOWINDOWSX86" StandardOutputImportance="Normal" />
- <Exec Condition="'$(FeatureDbiOopDebugging_HostWindowsamd64)'=='true'" Command="$(InjectResource) /bin:$(IntermediateOutputDirectory)\clrDebugResource_winamd64.bin /dll:$(ProductOutputFile) /name:CLRDEBUGINFOWINDOWSAMD64" StandardOutputImportance="Normal" />
- <Exec Condition="'$(FeatureDbiOopDebugging_HostOneCorex86)'=='true'" Command="$(InjectResource) /bin:$(IntermediateOutputDirectory)\clrDebugResource_onecorex86.bin /dll:$(ProductOutputFile) /name:CLRDEBUGINFOCORESYSX86" StandardOutputImportance="Normal" />
- <Exec Condition="'$(FeatureDbiOopDebugging_HostOneCoreamd64)'=='true'" Command="$(InjectResource) /bin:$(IntermediateOutputDirectory)\clrDebugResource_onecoreamd64.bin /dll:$(ProductOutputFile) /name:CLRDEBUGINFOCORESYSAMD64" StandardOutputImportance="Normal" />
- <Exec Condition="'$(FeatureDbiOopDebugging_HostLocal)'=='true'" Command="$(InjectResource) /bin:$(IntermediateOutputDirectory)\clrDebugResource.bin /dll:$(ProductOutputFile) /name:CLRDEBUGINFO" StandardOutputImportance="Normal" />
- </Target>
-
-</Project>
diff --git a/src/dlls/mscoree/mscoree.vrg b/src/dlls/mscoree/mscoree.vrg
deleted file mode 100644
index 465bfc151c..0000000000
--- a/src/dlls/mscoree/mscoree.vrg
+++ /dev/null
@@ -1,177 +0,0 @@
-VSREG 7
-
-[HKEY_CLASSES_ROOT\CCWU.ComCallWrapper.1]
-@="Com Call Wrapper Unmarshal Class"
-
-[HKEY_CLASSES_ROOT\CCWU.ComCallWrapper.1\CLSID]
-@="{3F281000-E95A-11d2-886B-00C04F869F04}"
-
-
-[HKEY_CLASSES_ROOT\CCWU.ComCallWrapper]
-@="Com Call Wrapper Unmarshal Class"
-
-[HKEY_CLASSES_ROOT\CCWU.ComCallWrapper\CurVer]
-@="CCWU.ComCallWrapper.1"
-
-[HKEY_CLASSES_ROOT\CCWU.ComCallWrapper\CLSID]
-@="{3F281000-E95A-11d2-886B-00C04F869F04}"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{3F281000-E95A-11d2-886B-00C04F869F04}]
-@="Com Call Wrapper Unmarshal Class"
-
-[HKEY_CLASSES_ROOT\CLSID\{3F281000-E95A-11d2-886B-00C04F869F04}\ProgID]
-@="CCWU.ComCallWrapper.1"
-
-[HKEY_CLASSES_ROOT\CLSID\{3F281000-E95A-11d2-886B-00C04F869F04}\VersionIndependentProgID]
-@="CCWU.ComCallWrapper"
-
-[HKEY_CLASSES_ROOT\CLSID\{3F281000-E95A-11d2-886B-00C04F869F04}\NotInsertable]
-
-
-[HKEY_CLASSES_ROOT\CLSID\{3F281000-E95A-11d2-886B-00C04F869F04}\InprocServer32]
-@="[#FilePath]"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{3F281000-E95A-11d2-886B-00C04F869F04}\InprocServer32]
-"ThreadingModel"="Both"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{45FB4600-E6E8-4928-B25E-50476FF79425}]
-@="Com Call Wrapper Unmarshal Class 4.0"
-
-[HKEY_CLASSES_ROOT\CLSID\{45FB4600-E6E8-4928-B25E-50476FF79425}\NotInsertable]
-
-[HKEY_CLASSES_ROOT\CLSID\{45FB4600-E6E8-4928-B25E-50476FF79425}\InprocServer32]
-@="[#FilePath]"
-
-[HKEY_CLASSES_ROOT\CLSID\{45FB4600-E6E8-4928-B25E-50476FF79425}\InprocServer32]
-"ThreadingModel"="Both"
-
-[HKEY_CLASSES_ROOT\CLSID\{45FB4600-E6E8-4928-B25E-50476FF79425}\InprocServer32\[RTM_ProductVersion]]
-"ImplementedInThisVersion"=""
-
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorMetaDataDispenser.2]
-@="Microsoft Common Language Runtime Meta Data"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorMetaDataDispenser.2\CLSID]
-@="{E5CB7A31-7512-11D2-89CE-0080C792E5D8}"
-
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorMetaDataDispenser]
-@="Microsoft Common Language Runtime Meta Data"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorMetaDataDispenser\CurVer]
-@="CLRMetaData.CorMetaDataDispenser.2"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{E5CB7A31-7512-11D2-89CE-0080C792E5D8}]
-@="Microsoft Common Language Runtime Meta Data"
-
-[HKEY_CLASSES_ROOT\CLSID\{E5CB7A31-7512-11D2-89CE-0080C792E5D8}\ProgID]
-@="CLRMetaData.CorMetaDataDispenser.2"
-
-[HKEY_CLASSES_ROOT\CLSID\{E5CB7A31-7512-11D2-89CE-0080C792E5D8}\VersionIndependentProgID]
-@="CLRMetaData.CorMetaDataDispenser"
-
-[HKEY_CLASSES_ROOT\CLSID\{E5CB7A31-7512-11D2-89CE-0080C792E5D8}\NotInsertable]
-
-
-[HKEY_CLASSES_ROOT\CLSID\{E5CB7A31-7512-11D2-89CE-0080C792E5D8}\InprocServer32]
-@="[#FilePath]"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{E5CB7A31-7512-11D2-89CE-0080C792E5D8}\InprocServer32]
-"ThreadingModel"="Both"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{E5CB7A31-7512-11D2-89CE-0080C792E5D8}]
-"MasterVersion"=dword:2
-
-
-
-
-
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorMetaDataDispenserRuntime.2]
-@="Microsoft Common Language Runtime Meta Data"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorMetaDataDispenserRuntime.2\CLSID]
-@="{1EC2DE53-75CC-11d2-9775-00A0C9B4D50C}"
-
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorMetaDataDispenserRuntime]
-@="Microsoft Common Language Runtime Meta Data"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorMetaDataDispenserRuntime\CurVer]
-@="CLRMetaData.CorMetaDataDispenserRuntime.2"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{1EC2DE53-75CC-11d2-9775-00A0C9B4D50C}]
-@="Microsoft Common Language Runtime Meta Data"
-
-[HKEY_CLASSES_ROOT\CLSID\{1EC2DE53-75CC-11d2-9775-00A0C9B4D50C}\ProgID]
-@="CLRMetaData.CorMetaDataDispenserRuntime.2"
-
-[HKEY_CLASSES_ROOT\CLSID\{1EC2DE53-75CC-11d2-9775-00A0C9B4D50C}\VersionIndependentProgID]
-@="CLRMetaData.CorMetaDataDispenserRuntime"
-
-[HKEY_CLASSES_ROOT\CLSID\{1EC2DE53-75CC-11d2-9775-00A0C9B4D50C}\NotInsertable]
-
-
-[HKEY_CLASSES_ROOT\CLSID\{1EC2DE53-75CC-11d2-9775-00A0C9B4D50C}\InprocServer32]
-@="[#FilePath]"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{1EC2DE53-75CC-11d2-9775-00A0C9B4D50C}\InprocServer32]
-"ThreadingModel"="Both"
-
-
-
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorRuntimeHost.2]
-@="Microsoft Common Language Runtime Host"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorRuntimeHost.2\CLSID]
-@="{CB2F6723-AB3A-11d2-9C40-00C04FA30A3E}"
-
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorRuntimeHost]
-@="Microsoft Common Language Runtime Host"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CorRuntimeHost\CurVer]
-@="CLRMetaData.CorRuntimeHost.2"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{CB2F6723-AB3A-11d2-9C40-00C04FA30A3E}]
-@="Microsoft Common Language Runtime Meta Data"
-
-[HKEY_CLASSES_ROOT\CLSID\{CB2F6723-AB3A-11d2-9C40-00C04FA30A3E}\ProgID]
-@="CLRMetaData.CorRuntimeHost.2"
-
-[HKEY_CLASSES_ROOT\CLSID\{CB2F6723-AB3A-11d2-9C40-00C04FA30A3E}\VersionIndependentProgID]
-@="CLRMetaData.CorRuntimeHost"
-
-[HKEY_CLASSES_ROOT\CLSID\{CB2F6723-AB3A-11d2-9C40-00C04FA30A3E}\NotInsertable]
-
-
-[HKEY_CLASSES_ROOT\CLSID\{CB2F6723-AB3A-11d2-9C40-00C04FA30A3E}\InprocServer32]
-@="[#FilePath]"
-
-[HKEY_CLASSES_ROOT\CLSID\{CB2F6723-AB3A-11d2-9C40-00C04FA30A3E}\InprocServer32]
-"ThreadingModel"="Both"
-
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\.NET Runtime]
-"TypesSupported"=dword:00000007
-"EventMessageFile"="[#FilePath]"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
-"InstallRoot"="[Framework.3643236F_FC70_11D3_A536_0090278A1BB8]"
-
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
-"WriteWatch"=dword:1
-
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel]
-"obcaseinsensitive"=dword:00000001
-"ObUnsecureGlobalNames"="netfxcustomperfcounters.1.0[~]SharedPerfIPCBlock[~]Cor_Private_IPCBlock[~]Cor_Public_IPCBlock_"
diff --git a/src/dlls/mscoree/mscoree20_shared_neutral.vrg b/src/dlls/mscoree/mscoree20_shared_neutral.vrg
deleted file mode 100644
index b138cd8f89..0000000000
--- a/src/dlls/mscoree/mscoree20_shared_neutral.vrg
+++ /dev/null
@@ -1,286 +0,0 @@
-VSREG 7
-
-[HKEY_CLASSES_ROOT\CLSID\{B81FF171-20F3-11d2-8DCC-00A0C9B00525}]
-@="Type name parser and builder"
-
-[HKEY_CLASSES_ROOT\CLSID\{B81FF171-20F3-11d2-8DCC-00A0C9B00525}\NotInsertable]
-
-[HKEY_CLASSES_ROOT\CLSID\{B81FF171-20F3-11d2-8DCC-00A0C9B00525}\InprocServer32]
-@="[SystemFolder.3643236F_FC70_11D3_A536_0090278A1BB8]mscoree.dll"
-
-[HKEY_CLASSES_ROOT\CLSID\{B81FF171-20F3-11d2-8DCC-00A0C9B00525}\InprocServer32]
-"ThreadingModel"="Both"
-
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CLRRuntimeHost]
-@="Microsoft Common Language Runtime Host V2"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CLRRuntimeHost\CurVer]
-@="CLRMetaData.CLRRuntimeHost.2"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CLRRuntimeHost.2]
-@="Microsoft Common Language Runtime Host V2"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CLRRuntimeHost.2\CLSID]
-@="{90F1A06E-7712-4762-86B5-7A5EBA6BDB02}"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB02}]
-@="Microsoft Common Language Runtime Meta Data V2"
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB02}\ProgID]
-@="CLRMetaData.CLRRuntimeHost.2"
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB02}\VersionIndependentProgID]
-@="CLRMetaData.CLRRuntimeHost"
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB02}\NotInsertable]
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB02}\InprocServer32]
-@="[SystemFolder.3643236F_FC70_11D3_A536_0090278A1BB8]mscoree.dll"
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB02}\InprocServer32]
-"ThreadingModel"="Both"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CLRRuntimeHost.1]
-@="Microsoft Common Language Runtime Host V2"
-
-[HKEY_CLASSES_ROOT\CLRMetaData.CLRRuntimeHost.1\CLSID]
-@="{90F1A06E-7712-4762-86B5-7A5EBA6BDB01}"
-
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB01}]
-@="Microsoft Common Language Runtime Meta Data V2"
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB01}\ProgID]
-@="CLRMetaData.CLRRuntimeHost.1"
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB01}\VersionIndependentProgID]
-@="CLRMetaData.CLRRuntimeHost"
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB01}\NotInsertable]
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB01}\InprocServer32]
-@="[SystemFolder.3643236F_FC70_11D3_A536_0090278A1BB8]mscoree.dll"
-
-[HKEY_CLASSES_ROOT\CLSID\{90F1A06E-7712-4762-86B5-7A5EBA6BDB01}\InprocServer32]
-"ThreadingModel"="Both"
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\MiniDumpAuxiliaryDlls]
-"[URTInstallPath.3643236F_FC70_11D3_A536_0090278A1BB8]clr.dll"="[URTInstallPath.3643236F_FC70_11D3_A536_0090278A1BB8]mscordacwks.dll"
-
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\.NET Runtime Optimization Service]
-"TypesSupported"=dword:00000007
-"EventMessageFile"="[SystemFolder.3643236F_FC70_11D3_A536_0090278A1BB8]mscoree.dll"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\winword.exe]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\winword.exe\{2CCAA9FE-6884-4AF2-99DD-5217B94115DF}]
-"Target Version"="v1.1.4322"
-"Maximum File Version Number"="11.0.9999.9999"
-"Minimum File Version Number"="11.0.0.0"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\winword.exe\{2CCAA9FE-6884-4AF2-99DD-5217B94115DF}\Registry Keys]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\winword.exe\{2CCAA9FE-6884-4AF2-99DD-5217B94115DF}\Registry Keys\{2CCAA9FE-6884-4AF2-99DD-5217B94115DF}]
-"Key Name"="HKEY_CLASSES_ROOT\\Interface\\{000C0601-0000-0000-C000-000000000046}"
-"Key Presence"=dword:00000000
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\excel.exe]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\excel.exe\{2CCAA9FE-6884-4AF2-99DD-5217B94115DF}]
-"Target Version"="v1.1.4322"
-"Maximum File Version Number"="11.0.9999.9999"
-"Minimum File Version Number"="11.0.0.0"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\excel.exe\{2CCAA9FE-6884-4AF2-99DD-5217B94115DF}\Registry Keys]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\excel.exe\{2CCAA9FE-6884-4AF2-99DD-5217B94115DF}\Registry Keys\{2CCAA9FE-6884-4AF2-99DD-5217B94115DF}]
-"Key Name"="HKEY_CLASSES_ROOT\\Interface\\{000C0601-0000-0000-C000-000000000046}"
-"Key Presence"=dword:00000000
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehmsas.exe]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehmsas.exe\{04A93A93-ABBA-44AF-948F-50B7182C631A}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® Windows® Operating System"
-"Internal Name"="eHMSAS"
-"Maximum File Version"="5.1.2600.9999"
-"Minimum File Version"="5.1.2600.0000"
-"Target Version"="v1.0.3705"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehrec.exe]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehrec.exe\{44D9F380-9050-4365-AA06-DA121F6F2B7D}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® Windows® Operating System"
-"Internal Name"="eHRec"
-"Maximum File Version"="5.1.2600.9999"
-"Minimum File Version"="5.1.2600.0000"
-"Target Version"="v1.0.3705"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehSched.exe]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehSched.exe\{EE19C1D5-4D4B-4D19-874A-FD6633C9293E}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® Windows® Operating System"
-"Internal Name"="ehSched"
-"Maximum File Version"="5.1.2600.9999"
-"Minimum File Version"="5.1.2600.0000"
-"Target Version"="v1.0.3705"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehShell.exe]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehShell.exe\{95736FC3-FC2F-4ED5-9632-0216DF1B8019}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® Windows® Operating System"
-"Internal Name"="ehshell.exe"
-"Maximum File Version"="5.1.2600.9999"
-"Minimum File Version"="5.1.2600.0000"
-"Target Version"="v1.0.3705"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehtray.exe]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\ehtray.exe\{FECCD425-B48B-4062-A580-642302E20A30}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® Windows® Operating System"
-"Internal Name"="ehtray"
-"Maximum File Version"="5.1.2600.9999"
-"Minimum File Version"="5.1.2600.0000"
-"Target Version"="v1.0.3705"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\medctrro.exe]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\medctrro.exe\{DA93B8AF-F88E-438D-A5A3-CB78BB4E6BF9}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® Windows® Operating System"
-"Internal Name"="MedCtrRO.exe"
-"Maximum File Version"="5.1.2600.9999"
-"Minimum File Version"="5.1.2600.0000"
-"Target Version"="v1.0.3705"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\snchk.exe]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v[RTM_ProductVersion].00000\snchk.exe\{1CF3A71C-18F9-41EF-8BAD-EA355F4DB250}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® Windows® Operating System"
-"Internal Name"="SnChk.exe"
-"Maximum File Version"="5.1.2600.9999"
-"Minimum File Version"="5.1.2600.0000"
-"Target Version"="v1.0.3705"
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\BTSNTSvc.exe\{CA109828-7CE7-40F4-AD73-C7575455A7D5}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server 2004"
-"Internal Name"="BTSNTSvc"
-"Maximum File Version"="3.0.9999.9999"
-"Minimum File Version"="3.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\compeif.exe\{6AA1435F-1473-4A6D-B82A-1DD4E3A20E34}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server"
-"Internal Name"="compeif.exe"
-"Maximum File Version"="4.0.9999.9999"
-"Minimum File Version"="4.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\ConfigFramework.exe\{CF59770F-C96E-472D-B532-2F9AE8D895DC}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server 2004"
-"Internal Name"="ConfigFramework"
-"Maximum File Version"="3.0.9999.9999"
-"Minimum File Version"="3.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\DW15.exe\{18B0BD4E-298B-4CB1-98E4-F49CFCE6CFB4}]
-"File Size"=dword:2da48
-"Target Version"="v1.1.4322"
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\esp_srv.exe\{D044DE85-EC81-4A04-BA4B-DF316E80DF61}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server"
-"Internal Name"="esp_srv.exe"
-"Maximum File Version"="4.0.9999.9999"
-"Minimum File Version"="4.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\Setup.exe\{83E0F69E-84FA-4961-9FD4-3025FCEE92EA}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server 2004"
-"Internal Name"="Setup"
-"Maximum File Version"="3.0.9999.9999"
-"Minimum File Version"="3.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\testmess.exe\{11856902-6A4D-4AFB-AF94-E1FCA58C8BAF}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server"
-"Internal Name"="testmess.exe"
-"Maximum File Version"="4.0.9999.9999"
-"Minimum File Version"="4.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\TrackingDbHelper.exe\{162E7914-3267-46E2-82C8-8E72484BD554}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server 2004"
-"Internal Name"="TrackingDbHelper"
-"Maximum File Version"="3.0.9999.9999"
-"Minimum File Version"="3.0.0.0"
-"Target Version"="v1.1.4322"
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\Trigcon.exe\{3C010CA2-7989-4C96-91C3-1564E33F9A42}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server"
-"Internal Name"="trigcon.exe"
-"Maximum File Version"="4.0.9999.9999"
-"Minimum File Version"="4.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\validins.exe\{00BBFD35-5011-4117-9DA1-2D3BFAAF9561}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server"
-"Internal Name"="validins.exe"
-"Maximum File Version"="4.0.9999.9999"
-"Minimum File Version"="4.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\xsd2edi.exe\{B469F89A-19A5-44B2-A12F-E93394003755}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server"
-"Internal Name"="XSD2EDI.EXE"
-"Maximum File Version"="4.0.9999.9999"
-"Minimum File Version"="4.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\XSharpP.EXE\{BDC69590-00EE-408A-B21F-58D9EF182CF6}]
-"Company"="Microsoft Corporation"
-"Product Name"="Microsoft® BizTalk® Server 2004"
-"Internal Name"="XSharpP"
-"Maximum File Version"="3.0.9999.9999"
-"Minimum File Version"="3.0.0.0"
-"Target Version"="v1.1.4322"
-
-
-[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\AppPatch\v[RTM_ProductVersion].00000\msi.dll\{462EF42B-ABA4-4eac-9843-9EED260F54D0}]
-"Company"="Microsoft Corporation"
-"Maximum File Version"="5.0.9999.99999"
-"Minimum File Version"="2.0.0000.00000"
-"Target Version"="v[RTM_ProductVersion]"
-
diff --git a/src/dlls/mscoree/mscoreeBBT.bat b/src/dlls/mscoree/mscoreeBBT.bat
deleted file mode 100644
index e8a3bb3eae..0000000000
--- a/src/dlls/mscoree/mscoreeBBT.bat
+++ /dev/null
@@ -1,83 +0,0 @@
-@rem Licensed to the .NET Foundation under one or more agreements.
-@rem The .NET Foundation licenses this file to you under the MIT license.
-@rem See the LICENSE file in the project root for more information.
-
-setlocal
-rem @echo off
-REM Args are 1) full path to here 2) compile output dir 3) target platform 4) resulting binary
-REM The script gets called for lib's too, so skip them.
-if /i "%~x3" EQU ".lib" goto :EOF
-
-REM Clean up from any previous runs.
-del /s /f /q %1\bbt\%4
-
-REM Set up the BBT environment.
-if not exist %1\bbt\%4 md %1\bbt\%4
-cd %1\bbt\%4
-xcopy %3
-xcopy %~dpn3.pdb
-xcopy %1\bbt\*.*
-
-REM Do the actual BBT run.
-call :BBTize %~nx3
-
-endlocal
-goto :EOF
-
-
-
-:BBTize
-setlocal
-@echo BBTizing %1
-
-REM Build the instrumented executable.
-call :bbtstart %1
-
-REM Call the perf script.
-@echo calling performance script
-setlocal
-call BBTScript
-endlocal
-
-REM Build the optimized executable.
-call :bbtend %1
-
-endlocal
-goto :EOF
-
-
-
-:bbtstart
-@echo bbflow, bbinstr, bblink
-bbflow /odb %~n1.bbcfg %~nx1
-bbinstr /odb %~n1.ins.bbcfg /idfmax 4096 /idf %~n1.bbidf %~n1.bbcfg
-bblink /o %~n1.ins.%~x1 %~n1.ins.bbcfg
-if exist %~n1.sav del /f %~n1.sav
-ren %~nx1 %~n1.sav
-copy %~n1.ins.%~x1 %~nx1
-if /i "%~x1" EQU ".dll" echo Registering DLL %1 & regsvr32 /s %1
-goto :EOF
-
-
-
-:bbtend
-copy %~n1.sav %~nx1
-
-@echo Building an Optimized Program.
-bbmerge /idf %~n1.bbidf %~n1.bbcfg
-if %ERRORLEVEL% NEQ 0 goto :EOF
-bbopt /odb %~n1.opt.bbcfg %~n1.bbcfg
-if %ERRORLEVEL% NEQ 0 goto :EOF
-bblink /map %~n1.map /o %~n1.opt.%~x1 %~n1.opt.bbcfg
-if %ERRORLEVEL% NEQ 0 goto :EOF
-
-@echo Writing reports.
-bbrpt /funcov %~n1.bbcfg > %~n1.fcv
-if %ERRORLEVEL% NEQ 0 goto :EOF
-bbrpt /deadsym %~n1.bbcfg > %~n1.ded
-if %ERRORLEVEL% NEQ 0 goto :EOF
-copy %~n1.opt.%~x1 %~nx1
-
-splitsym %~nx1
-goto :EOF
-
diff --git a/src/dlls/mscoree/mscoreeDoNotEverRemove.vrg b/src/dlls/mscoree/mscoreeDoNotEverRemove.vrg
deleted file mode 100644
index 0f7bf07ffa..0000000000
--- a/src/dlls/mscoree/mscoreeDoNotEverRemove.vrg
+++ /dev/null
@@ -1,4 +0,0 @@
-VSREG 7
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Secure Mime Handlers]
-"CorTransientLoader.CorLoad.1"=""
diff --git a/src/dlls/mscoree/mscoreeVersioned.vrg b/src/dlls/mscoree/mscoreeVersioned.vrg
deleted file mode 100644
index 39aa5a8e23..0000000000
--- a/src/dlls/mscoree/mscoreeVersioned.vrg
+++ /dev/null
@@ -1,22 +0,0 @@
-VSREG 7
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\Standards\Standard CLI 2002]
-"v[RTM_ProductVersion]"=dword:fff
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\Standards\Standard CLI 2005]
-"v[RTM_ProductVersion]"=dword:fff
-
-[HKEY_CLASSES_ROOT\CLSID\{3F281000-E95A-11d2-886B-00C04F869F04}\InprocServer32\[RTM_ProductVersion]]
-"ImplementedInThisVersion"=""
-
-[HKEY_CLASSES_ROOT\CLSID\{E5CB7A31-7512-11D2-89CE-0080C792E5D8}\InProcServer32\[RTM_ProductVersion]]
-"ImplementedInThisVersion"=""
-
-[HKEY_CLASSES_ROOT\CLSID\{1EC2DE53-75CC-11d2-9775-00A0C9B4D50C}\InprocServer32\[RTM_ProductVersion]]
-"ImplementedInThisVersion"=""
-
-[HKEY_CLASSES_ROOT\CLSID\{CB2F6723-AB3A-11d2-9C40-00C04FA30A3E}\InprocServer32\[RTM_ProductVersion]]
-"ImplementedInThisVersion"=""
-
-[HKEY_CLASSES_ROOT\CLSID\{B81FF171-20F3-11d2-8DCC-00A0C9B00525}\InprocServer32\[RTM_ProductVersion]]
-"ImplementedInThisVersion"=""
diff --git a/src/dlls/mscoree/shim.reg b/src/dlls/mscoree/shim.reg
deleted file mode 100644
index bddf047c0a..0000000000
--- a/src/dlls/mscoree/shim.reg
+++ /dev/null
@@ -1,9 +0,0 @@
-REGEDIT4
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy]
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\v4.0]
-"[URTBuildNum]"="[URTBuildNum]-[URTBuildNum]"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\standards\v1.0.0]
-"v4.0.[URTBuildNum]"=DWORD:[URTBuildNum]
diff --git a/src/dlls/mscoree/type_exclusion_list.txt b/src/dlls/mscoree/type_exclusion_list.txt
deleted file mode 100644
index b93bfeee84..0000000000
--- a/src/dlls/mscoree/type_exclusion_list.txt
+++ /dev/null
@@ -1,142 +0,0 @@
-# Add types names to this exclusion list by adding it on a separate line.
-# If types from clr.pdb and mscordacwks_x86_arm.pdb don't match you have 3 options:
-# 1. If the type is not used by the DAC simply remove it.
-# 2. Fix the layout mismatch taking care of #defines used in declaration.
-# 3. Add it to this file (type_exclusion_list.txt) as a final option. If you choose this option make sure you are
-# not leaking a silent bug into the DAC. (if the type is not used in the DAC is better to use option 1).
-# For any question regarding PdbTypeMatch tool and build validation process please contact clrdbgpriv.
-CLiteWeightStgdb<CMiniMdRW>
-CLiteWeightStgdbRW
-CMiniMdRW
-DoFullyLoadLocals
-Generics::RecursionGraph
-SyncBlock
-_ACTIVATION_CONTEXT_STACK
-_CONTEXT
-_DISPATCHER_CONTEXT
-_PEB
-_RTL_CRITICAL_SECTION_DEBUG
-_TEB
-_XSTATE_CONTEXT
-_JUMP_BUFFER
-$_s__RTTIBaseClassArray$_extraBytes_4
-$_s__RTTIBaseClassArray$_extraBytes_8
-CVirtualThunks::tagThunkCode
-CrossDomainOptimizationInfo
-DebuggerController
-EHExceptionRecord
-EHExceptionRecord::EHParameters
-FastTable
-IBCLogger
-IBCLoggingDisabler
-RegMeta
-ScanContext
-StubManagerIterator
-ThreadLocalIBCInfo
-_PEB_LDR_DATA
-_RTL_USER_PROCESS_PARAMETERS
-_s__RTTIBaseClassArray
-_s_ESTypeList
-_s_FuncInfo
-_s_HandlerType
-_s_TryBlockMapEntry
-_tiddata
-FieldDesc
-TypeHandle
-SecurityUtil
-UMEntryThunk
-FrameInfo
-SPLIT64
-#Remove all Holder based types as DAC Holder base class includes two extra fields
-*Holder
-SYSTEM_POWER_CAPABILITIES
-*_CERT_
-*_CMSG_
-_CRYPT_RETRIEVE_AUX_INFO
-_CRYPT_KEY_SIGN_MESSAGE_PARA
-*_EVENT_
-_FULL_PTR_XLAT_TABLES
-*_IMAGE_AUX_SYMBOL
-*_MIDL_STUB_
-_QUOTA_LIMITS_EX
-_RDR_CALLOUT_STATE
-_TOKEN_AUDIT_POLICY
-tagI_RpcProxyCallbackInterface
-tagRID_DEVICE_INFO_MOUSE
-_GCStress::CoopGcModePolicy
-_KUSER_SHARED_DATA
-_TP_TASK
-CsFrame
-stat
-#Added for new changes in the CRT structs
-tagLC_ID
-threadlocaleinfostruct
-WINTRUST_CATALOG_INFO_
-_CRYPT_PROVIDER_DATA
-_WINTRUST_DATA
-__lc_time_data
-setloc_struct
-tagLC_STRINGS
-tagLOCALETAB
-threadmbcinfostruct
-BINDER_SPACE::Variables
-_SYMCRYPT_MARVIN32_EXPANDED_SEED
-_SYMCRYPT_CCM_STATE
-_SYMCRYPT_GCM_EXPANDED_KEY
-_SYMCRYPT_GHASH_EXPANDED_KEY
-_SYMCRYPT_HMAC_SHA1_EXPANDED_KEY
-_SYMCRYPT_MD2_STATE
-_SYMCRYPT_RC4_STATE
-_SYMCRYPT_SHA1_CHAINING_STATE
-_SYMCRYPT_3DES_EXPANDED_KEY
-_SYMCRYPT_AES_CMAC_EXPANDED_KEY
-_SYMCRYPT_AES_CMAC_STATE
-_SYMCRYPT_AES_EXPANDED_KEY
-_SYMCRYPT_DESX_EXPANDED_KEY
-_SYMCRYPT_DES_EXPANDED_KEY
-_SYMCRYPT_GCM_STATE
-_SYMCRYPT_GCM_SUPPORTED_BLOCKCIPHER_KEYS
-_SYMCRYPT_HMAC_MD5_EXPANDED_KEY
-_SYMCRYPT_HMAC_SHA256_EXPANDED_KEY
-_SYMCRYPT_MARVIN32_STATE
-_SYMCRYPT_RC2_EXPANDED_KEY
-_SYMCRYPT_GF128_ELEMENT
-_nlsversioninfo
-_XSTATE_CONFIGURATION
-MARK_HANDLE_INFO
-_STORAGE_ADAPTER_DESCRIPTOR
-_STORAGE_MINIPORT_DESCRIPTOR
-FILE_ID_DESCRIPTOR
-# Added to workaround mismatch of _UNWIND_INFO in x64 CoreSys chk build. The ret build is clean.
-_UNWIND_INFO
-# DevDiv2:672407 Workaround a build sequencing hole that resulted in a mismatch between
-# coreclr.pdb and mscoredaccore_x86.pdb around the WinRTExceptionInfo type, which is
-# part of the VCTools CRT. The type (which mirrors the WinRT Platform.Exception type)
-# was out-of-date and the update exposed this hole. Bug#672407 is tracking the investigation
-# of the build hole.
-WinRTExceptionInfo
-# Build issue 452821 (http://ddweb/buildstatus/issues/issues.aspx?iid=452821)
-# The vctools partition is now building against the WinBlue SDK instead of the Win8 SDK.
-# The struct _FLOATING_SAVE_AREA is defined in both winnt.h and vdmctxt.h. In the WinBlue
-# SDK, these definitions differ in the name of the last field ('Cr0NpxState' in vdmctxt.h,
-# 'Spare0' in winnt.h). In Win8, both definitions used 'Cr0NpxState'. This is causing a
-# PdbTypeMismatch build error because the vctools component pulled into clr.dll causes clr.pdb
-# to contain a version of _FLOATING_SAVE_AREA that uses 'Spare0' while mscordacwks does not.
-_FLOATING_SAVE_AREA
-# Added due to mismatch for arm64 coresys build
-_SLIST_HEADER
-_KNONVOLATILE_CONTEXT_POINTERS
-_IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
-_TOKEN_ACCESS_INFORMATION
-# These types added because we are statically linking the OS CRT
-_GDI_TEB_BATCH
-DNameNode
-DNameStatusNode
-Replicator
-UnDecorator
-__type_info_node
-charNode
-ioinfo
-pDNameNode
-pcharNode
-DispLocals
diff --git a/src/dlls/mscorpe/CMakeLists.txt b/src/dlls/mscorpe/CMakeLists.txt
index e8f22f2e9b..fd884b1c46 100644
--- a/src/dlls/mscorpe/CMakeLists.txt
+++ b/src/dlls/mscorpe/CMakeLists.txt
@@ -7,13 +7,9 @@ set(MSCORPE_SOURCES
ceefilegenwriter.cpp
pewriter.cpp
ceefilegenwritertokens.cpp
- utilcodeinit.cpp
)
if(WIN32)
- list(APPEND MSCORPE_SOURCES
- Native.rc
- )
else()
add_compile_options(-Wno-delete-non-virtual-dtor)
endif(WIN32)
diff --git a/src/dlls/mscorpe/Native.rc b/src/dlls/mscorpe/Native.rc
deleted file mode 100644
index e652bf3f1d..0000000000
--- a/src/dlls/mscorpe/Native.rc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#define FX_VER_FILEDESCRIPTION_STR "Microsoft .NET Runtime PE File Generator\0"
-
-#include <fxver.h>
-#include <fxver.rc>
diff --git a/src/dlls/mscorpe/ceefilegenwritertokens.cpp b/src/dlls/mscorpe/ceefilegenwritertokens.cpp
index e2d448552d..3503eaf67b 100644
--- a/src/dlls/mscorpe/ceefilegenwritertokens.cpp
+++ b/src/dlls/mscorpe/ceefilegenwritertokens.cpp
@@ -10,9 +10,6 @@
//*****************************************************************************
#include "stdafx.h"
#include "ceegen.h"
-#ifndef FEATURE_CORECLR
-#define DECLARE_DATA
-#endif
#include "../../ildasm/dasmenum.hpp"
#define MAX_CLASSNAME_LENGTH 1024
diff --git a/src/dlls/mscorpe/dirs.proj b/src/dlls/mscorpe/dirs.proj
deleted file mode 100644
index 46bb0ce64d..0000000000
--- a/src/dlls/mscorpe/dirs.proj
+++ /dev/null
@@ -1,15 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--The following projects will build during PHASE 1-->
- <PropertyGroup>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildInPhase1>true</BuildInPhase1>
- </PropertyGroup>
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="mscorpe\mscorpe.nativeproj" />
- <ProjectFile Include="mscorpehost\mscorpehost.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/dlls/mscorpe/mscorpe/mscorpe.def b/src/dlls/mscorpe/mscorpe/mscorpe.def
deleted file mode 100644
index 875abc42a7..0000000000
--- a/src/dlls/mscorpe/mscorpe/mscorpe.def
+++ /dev/null
@@ -1,11 +0,0 @@
-; Licensed to the .NET Foundation under one or more agreements.
-; The .NET Foundation licenses this file to you under the MIT license.
-; See the LICENSE file in the project root for more information.
-;
-; mscorpe.def for mscorpe.dll (a simple wrapper around real implementation mscorpehost.dll - see
-; file:wrapper.cpp for more details)
-; PE file generator in EE
-
-EXPORTS
- CreateICeeFileGen
- DestroyICeeFileGen
diff --git a/src/dlls/mscorpe/mscorpe/mscorpe.nativeproj b/src/dlls/mscorpe/mscorpe/mscorpe.nativeproj
deleted file mode 100644
index 526cf6088b..0000000000
--- a/src/dlls/mscorpe/mscorpe/mscorpe.nativeproj
+++ /dev/null
@@ -1,46 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <NoCrt>true</NoCrt>
- <LinkUseCMT>true</LinkUseCMT>
- <UserIncludes>
- $(UserIncludes);
- .
- </UserIncludes>
- <CDefines>$(CDefines);__TODO_PORT_TO_WRAPPERS__;UNICODE</CDefines>
- <OutputName>mscorpe</OutputName>
- <FileToMarkForSigning>$(BinariesDirectory)\$(OutputName).dll</FileToMarkForSigning>
- <OutputLibPath>$(IntermediateOutputDirectory)</OutputLibPath>
- <DllDef>$(OutputName).def</DllDef>
- <TargetType>DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
- <PogoOptimized>true</PogoOptimized>
- <DllEntryPoint>_DllMainCRTStartup</DllEntryPoint>
- <Win32DllLibs>$(ClrLibPath)\utilcodestaticnohost.lib</Win32DllLibs>
- <UseMsvcrt>false</UseMsvcrt>
- <NoLinkGdi32>true</NoLinkGdi32>
- </PropertyGroup>
-
- <ItemGroup>
- <TargetLib Include="$(SdkLibPath)\mscoree.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- <TargetLib Include="$(SdkLibPath)\kernel32.lib" />
- <TargetLib Include="$(SdkLibPath)\advapi32.lib" />
- <TargetLib Include="$(SdkLibPath)\user32.lib" />
- <TargetLib Include="$(SdkLibPath)\shlwapi.lib" />
- <ProjectReference Include="$(ClrSrcDirectory)utilcode\staticnohost\staticnohost.nativeproj"/>
- </ItemGroup>
-
- <ItemGroup>
- <RCResourceFile Include="..\Native.rc" />
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="wrapper.cpp" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/dlls/mscorpe/mscorpe/wrapper.cpp b/src/dlls/mscorpe/mscorpe/wrapper.cpp
deleted file mode 100644
index d2f1701ec4..0000000000
--- a/src/dlls/mscorpe/mscorpe/wrapper.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-// File: wrapper.cpp
-//
-
-//
-// This file implements a simple wrapper DLL (mscorpe.dll) which calls properly into mscorpehost.dll.
-// It exists because of compatibility with 1.x/2.0 apps running on CLR 4.0+. Such older apps could pass
-// full path to LoadLibrary() Windows API and get this DLL.
-//
-// Noone in CLR should ever try to load this DLL directly (using LoadLibrary API). Note that hosting APIs
-// and PInvoke redirect mscorpe.dll to mscorpehost.dll automatically.
-//
-
-#include <MscorpeSxSWrapper.h>
-
-#include <mscoree.h>
-#include <metahost.h>
-
-// Globals
-HINSTANCE g_hThisInst; // This library.
-
-//*****************************************************************************
-// Handle lifetime of loaded library.
-//*****************************************************************************
-extern "C"
-BOOL WINAPI
-DllMain(
- HINSTANCE hInstance,
- DWORD dwReason,
- LPVOID lpReserved)
-{
- switch (dwReason)
- {
- case DLL_PROCESS_ATTACH:
- { // Save the module handle.
- g_hThisInst = hInstance;
- DisableThreadLibraryCalls((HMODULE)hInstance);
- }
- break;
- case DLL_PROCESS_DETACH:
- break;
- }
-
- return TRUE;
-} // DllMain
-
-// Implementation for utilcode
-HINSTANCE
-GetModuleInst()
-{
- return g_hThisInst;
-} // GetModuleInst
-
-// Load correct SxS version of mscorpe.dll and initialize it (uses shim).
-HRESULT
-LoadMscorpe(HMODULE * phModule)
-{
- HRESULT hr = S_OK;
- ICLRMetaHost * pMetaHost = NULL;
- ICLRRuntimeInfo * pCLRRuntimeInfo = NULL;
-
- // Get full DLL path
- WCHAR wszPath[_MAX_PATH];
- DWORD dwLength = GetModuleFileName((HMODULE)g_hThisInst, wszPath, NumItems(wszPath));
-
- if ((dwLength == 0) ||
- ((dwLength == NumItems(wszPath)) &&
- (GetLastError() == ERROR_INSUFFICIENT_BUFFER)))
- {
- IfFailGo(CLR_E_SHIM_RUNTIMELOAD);
- }
-
- // Find start of '\mscorpe.dll'
- LPWSTR wszSeparator = wcsrchr(wszPath, L'\\');
- if (wszSeparator == NULL)
- {
- IfFailGo(CLR_E_SHIM_RUNTIMELOAD);
- }
- // Check the name of this DLL
- _ASSERTE(_wcsicmp(wszSeparator, L"\\mscorpe.dll") == 0);
- // Remove the DLL name
- *wszSeparator = 0;
-
- // Find start of last directory name (\<version>),
- // C:\Windows\Microsoft.NET\Framework\[[v4.0.12345]]\mscorpe.dll
- LPWSTR wszLastDirectoryName = wcsrchr(wszPath, L'\\');
- if (wszLastDirectoryName == NULL)
- {
- IfFailGo(CLR_E_SHIM_RUNTIMELOAD);
- }
- LPWSTR wszVersion = wszLastDirectoryName + 1;
-
- IfFailGo(CLRCreateInstance(
- CLSID_CLRMetaHost,
- IID_ICLRMetaHost,
- reinterpret_cast<LPVOID *>(&pMetaHost)));
-
- IfFailGo(pMetaHost->GetRuntime(
- wszVersion,
- IID_ICLRRuntimeInfo,
- reinterpret_cast<LPVOID *>(&pCLRRuntimeInfo)));
-
- // Shim will load correct SxS version of mscorpe.dll and will initialize it
- IfFailGo(pCLRRuntimeInfo->LoadLibrary(
- L"mscorpe.dll",
- phModule));
-
-ErrExit:
- if (pMetaHost != NULL)
- {
- pMetaHost->Release();
- pMetaHost = NULL;
- }
- if (pCLRRuntimeInfo != NULL)
- {
- pCLRRuntimeInfo->Release();
- pCLRRuntimeInfo = NULL;
- }
-
- if (FAILED(hr))
- {
- *phModule = NULL;
- }
-
- return hr;
-} // LoadMscorpe
-
-// SxS wrapper of mscorpe.dll entrypoints
-typedef MscorpeSxSWrapper<LoadMscorpe> MscorpeSxS;
-
-// Export of 'original' 1.x/2.0 mscorpe.dll
-EXTERN_C
-HRESULT __stdcall
-CreateICeeFileGen(
- ICeeFileGen ** ppCeeFileGen)
-{
- return MscorpeSxS::CreateICeeFileGen(ppCeeFileGen);
-}
-
-// Export of 'original' 1.x/2.0 mscorpe.dll
-EXTERN_C
-HRESULT __stdcall
-DestroyICeeFileGen(ICeeFileGen ** ppCeeFileGen)
-{
- return MscorpeSxS::DestroyICeeFileGen(ppCeeFileGen);
-}
diff --git a/src/dlls/mscorpe/mscorpehost/mscorpehost.def b/src/dlls/mscorpe/mscorpehost/mscorpehost.def
deleted file mode 100644
index 0cf870b17b..0000000000
--- a/src/dlls/mscorpe/mscorpehost/mscorpehost.def
+++ /dev/null
@@ -1,12 +0,0 @@
-; Licensed to the .NET Foundation under one or more agreements.
-; The .NET Foundation licenses this file to you under the MIT license.
-; See the LICENSE file in the project root for more information.
-;
-; PeWriter.def for PeWriter.dll
-; PE file generator in EE
-
-EXPORTS
- CreateICeeFileGen
- DestroyICeeFileGen
- InitializeSxS
-
diff --git a/src/dlls/mscorpe/mscorpehost/mscorpehost.nativeproj b/src/dlls/mscorpe/mscorpehost/mscorpehost.nativeproj
deleted file mode 100644
index 45af39f38b..0000000000
--- a/src/dlls/mscorpe/mscorpehost/mscorpehost.nativeproj
+++ /dev/null
@@ -1,68 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <LibCLib>$(ClrCrtLib)</LibCLib>
- <OutputName>mscorpehost</OutputName>
- <FileToMarkForSigning>$(BinariesDirectory)\$(OutputName).dll</FileToMarkForSigning>
- <OutputLibPath>$(IntermediateOutputDirectory)</OutputLibPath>
- <DllDef>$(OutputName).def</DllDef>
- <TargetType>DYNLINK</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>..\stdafx.cpp</PCHCompile>
- <UserIncludes>
- $(UserIncludes);
- .;
- ../../vm
- </UserIncludes>
- <CDefines>$(CDefines);__TODO_PORT_TO_WRAPPERS__;UNICODE</CDefines>
- <LinkSubsystem>windows</LinkSubsystem>
- <PogoOptimized>true</PogoOptimized>
- <DllEntryPoint>_DllMainCRTStartup</DllEntryPoint>
- <ExtDelayImpLib>false</ExtDelayImpLib>
- </PropertyGroup>
-
- <PropertyGroup>
- <LinkDelayLoad Condition="'$(LinkDelayLoad)'!=''">$(LinkDelayLoad);</LinkDelayLoad>
- <LinkDelayLoad>$(LinkDelayLoad)ole32.dll</LinkDelayLoad>
- </PropertyGroup>
-
- <ItemGroup>
- <CppCompile Include="..\utilcodeinit.cpp" />
- </ItemGroup>
-
- <ItemGroup>
- <LinkPreCrtLibs Include="$(ClrLibPath)\utilcode.lib">
- <ProjectReference>$(ClrSrcDirectory)utilcode\dyncrt\dyncrt.nativeproj</ProjectReference>
- </LinkPreCrtLibs>
-
- <TargetLib Include="$(SdkLibPath)\mscoree.lib" />
- <TargetLib Include="$(ClrLibPath)\ceefgen.lib">
- <ProjectReference>$(ClrSrcDirectory)md\ceefilegen\ceefgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\delayimp.lib">
- <ProjectReference>$(ClrSrcDirectory)delayimp\delayimp.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(SdkLibPath)\ole32.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- <TargetLib Include="$(SdkLibPath)\kernel32.lib" />
- <TargetLib Include="$(SdkLibPath)\advapi32.lib" />
- <TargetLib Include="$(SdkLibPath)\user32.lib" />
- <TargetLib Include="$(SdkLibPath)\shlwapi.lib" />
- </ItemGroup>
-
- <ItemGroup>
- <RCResourceFile Include="..\Native.rc" />
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="..\ICeeFileGen.cpp" />
- <CppCompile Include="..\CeeFileGenWriter.cpp" />
- <CppCompile Include="..\PEWriter.cpp" />
- <CppCompile Include="..\CeeFileGenWriterTokens.cpp" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/dlls/mscorpe/utilcodeinit.cpp b/src/dlls/mscorpe/utilcodeinit.cpp
deleted file mode 100644
index 0e9fab9860..0000000000
--- a/src/dlls/mscorpe/utilcodeinit.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "stdafx.h"
-#include <utilcode.h>
-
-EXTERN_C void __stdcall InitializeSxS(CoreClrCallbacks const & callbacks)
-{
- InitUtilcode(callbacks);
-}
diff --git a/src/dlls/mscorrc/dirs.proj b/src/dlls/mscorrc/dirs.proj
deleted file mode 100644
index 1792a6ed67..0000000000
--- a/src/dlls/mscorrc/dirs.proj
+++ /dev/null
@@ -1,18 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="full\mscorrc.nativeproj" />
- <ProjectFile Condition="'$(FeatureCoreClr)' == 'true'" Include="small\mscorrc.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/dlls/mscorrc/full/mscorrc.nativeproj b/src/dlls/mscorrc/full/mscorrc.nativeproj
deleted file mode 100644
index 66262603c5..0000000000
--- a/src/dlls/mscorrc/full/mscorrc.nativeproj
+++ /dev/null
@@ -1,25 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName Condition="'$(FeatureCoreclr)'=='true'">mscorrc.debug</OutputName>
- <OutputName Condition="'$(FeatureCoreclr)'!='true'">mscorrc</OutputName>
- <TargetType>DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
- <LinkResourceOnlyDll>true</LinkResourceOnlyDll>
- <IsProjectKLibrary>true</IsProjectKLibrary>
- <IsTestNetCoreRuntimeLibrary>true</IsTestNetCoreRuntimeLibrary>
- <IsPhoneLibrary>true</IsPhoneLibrary>
- <IsDesktopTool>true</IsDesktopTool>
- </PropertyGroup>
-
- <ItemGroup>
- <RCResourceFile Include="..\include.rc" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-
-</Project>
diff --git a/src/dlls/mscorrc/mscorrc.rc b/src/dlls/mscorrc/mscorrc.rc
index be9fb1cfa6..138db55b66 100644
--- a/src/dlls/mscorrc/mscorrc.rc
+++ b/src/dlls/mscorrc/mscorrc.rc
@@ -1230,6 +1230,9 @@ BEGIN
IDS_CLASSLOAD_NOTINTERFACE "Could not load type '%1' from assembly '%2' because it attempts to implement a class as an interface."
IDS_CLASSLOAD_VALUEINSTANCEFIELD "Could not load the value type '%1' from assembly '%2' because it has an instance field of itself."
+ IDS_CLASSLOAD_BYREFLIKE_STATICFIELD "A value type containing a by-ref instance field, such as Span<T>, cannot be used as the type for a static field."
+ IDS_CLASSLOAD_BYREFLIKE_NOTVALUECLASSFIELD "A value type containing a by-ref instance field, such as Span<T>, cannot be used as the type for a class instance field."
+
IDS_CLASSLOAD_BAD_NAME "Type name '%1' from assembly '%2' is invalid."
IDS_CLASSLOAD_RANK_TOOLARGE "'%1' from assembly '%2' has too many dimensions."
IDS_CLASSLOAD_BAD_MANAGED_RVA "Managed method '%3' on type '%1' from assembly '%2' is not supported."
diff --git a/src/dlls/mscorrc/mscorrc.rc2 b/src/dlls/mscorrc/mscorrc.rc2
deleted file mode 100644
index 3e08368699..0000000000
--- a/src/dlls/mscorrc/mscorrc.rc2
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//*****************************************************************************
-// CompRC.rc2
-//
-// Holds version stamp for this program.
-//
-//*****************************************************************************
-#ifdef APSTUDIO_INVOKED
- #error this file is not editable by App Studio
-#endif //APSTUDIO_INVOKED
-
-#include <winver.h>
-#include <__file__.ver> //file version info - variable, but same for all files
-#include <__product__.ver> //product version info - variable
-#include <corver.h> //product version info - fixed
-#include "__file__.h" // file version info - fixed per file
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION VER_FILEVERSION
- PRODUCTVERSION VER_PRODUCTVERSION
- FILEFLAGSMASK VER_FILEFLAGSMASK
- FILEFLAGS VER_FILEFLAGS
- FILEOS VER_FILEOS
- FILETYPE VER_FILETYPE
-BEGIN
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1252
- // English language (0x409) and the Windows ANSI codepage (1252)
- END
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904E4" // Lang=US English, CharSet=Windows Multilingual
- BEGIN
- // Note: Non-standard value strings must be first as FileManager has a bug
- // that leaves garbage in its name buffer otherwise.
- VALUE "CompanyName", VER_COMPANYNAME_STR
- VALUE "FileDescription", VER_FILEDESCRIPTION_STR
- VALUE "FileVersion", VER_FILEVERSION_STR
- VALUE "InternalName", VER_INTERNALNAME_STR
- VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR
- VALUE "LegalTrademarks", VER_LEGALTRADEMARKS_STR
- VALUE "OriginalFilename",VER_ORIGFILENAME_STR
- VALUE "ProductName", VER_PRODUCTNAME_STR
- VALUE "ProductVersion", VER_PRODUCTVERSION_STR
- VALUE "Comments", VER_FILEDESCRIPTION_STR
- END
- END
-END
diff --git a/src/dlls/mscorrc/resource.h b/src/dlls/mscorrc/resource.h
index 1391a21545..77e937a81e 100644
--- a/src/dlls/mscorrc/resource.h
+++ b/src/dlls/mscorrc/resource.h
@@ -947,4 +947,5 @@
#define IDS_NATIVE_IMAGE_CANNOT_BE_LOADED_MULTIPLE_TIMES 0x263a
-
+#define IDS_CLASSLOAD_BYREFLIKE_STATICFIELD 0x263b
+#define IDS_CLASSLOAD_BYREFLIKE_NOTVALUECLASSFIELD 0x263c
diff --git a/src/dlls/mscorrc/small/mscorrc.nativeproj b/src/dlls/mscorrc/small/mscorrc.nativeproj
deleted file mode 100644
index 994589aa91..0000000000
--- a/src/dlls/mscorrc/small/mscorrc.nativeproj
+++ /dev/null
@@ -1,22 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>mscorrc</OutputName>
- <TargetType>DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
- <LinkResourceOnlyDll>true</LinkResourceOnlyDll>
- <IsProjectKLibrary>true</IsProjectKLibrary>
- <IsTestNetCoreRuntimeLibrary>true</IsTestNetCoreRuntimeLibrary>
- <IsPhoneLibrary>true</IsPhoneLibrary>
- </PropertyGroup>
-
- <ItemGroup>
- <RCResourceFile Include="..\mscorrc.small.rc" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-
-</Project>
diff --git a/src/gc/CMakeLists.txt b/src/gc/CMakeLists.txt
index d32d1c2dfb..cba1aa9778 100644
--- a/src/gc/CMakeLists.txt
+++ b/src/gc/CMakeLists.txt
@@ -39,15 +39,11 @@ set( GC_SOURCES_DAC
${GC_SOURCES_DAC_AND_WKS_COMMON})
if(FEATURE_STANDALONE_GC)
- if(CLR_CMAKE_PLATFORM_UNIX)
+ if(NOT CLR_CMAKE_PLATFORM_UNIX)
set ( GC_SOURCES_WKS
${GC_SOURCES_WKS}
- gcenv.unix.cpp)
- else()
- set ( GC_SOURCES_WKS
- ${GC_SOURCES_WKS}
- gcenv.windows.cpp)
- endif(CLR_CMAKE_PLATFORM_UNIX)
+ windows/gcenv.windows.cpp)
+ endif(NOT CLR_CMAKE_PLATFORM_UNIX)
endif(FEATURE_STANDALONE_GC)
convert_to_absolute_path(GC_SOURCES_WKS ${GC_SOURCES_WKS})
diff --git a/src/gc/env/gcenv.base.h b/src/gc/env/gcenv.base.h
index 94f73762f8..9fe583f9a6 100644
--- a/src/gc/env/gcenv.base.h
+++ b/src/gc/env/gcenv.base.h
@@ -96,7 +96,7 @@ inline HRESULT HRESULT_FROM_WIN32(unsigned long x)
#define UNREFERENCED_PARAMETER(P) (void)(P)
#ifdef PLATFORM_UNIX
-#define _vsnprintf vsnprintf
+#define _vsnprintf_s(string, sizeInBytes, count, format, args) vsnprintf(string, sizeInBytes, format, args)
#define sprintf_s snprintf
#define swprintf_s swprintf
#endif
@@ -441,8 +441,6 @@ extern MethodTable * g_pFreeObjectMethodTable;
extern int32_t g_TrapReturningThreads;
-extern bool g_fFinalizerRunOnShutDown;
-
//
// Locks
//
@@ -454,21 +452,6 @@ Thread * GetThread();
typedef void (CALLBACK *HANDLESCANPROC)(PTR_UNCHECKED_OBJECTREF pref, uintptr_t *pExtraInfo, uintptr_t param1, uintptr_t param2);
-class FinalizerThread
-{
-public:
- static bool Initialize();
- static void EnableFinalization();
-
- static bool HaveExtraWorkForFinalizer();
-
- static bool IsCurrentThreadFinalizer();
- static void Wait(DWORD timeout, bool allowReentrantWait = false);
- static void SignalFinalizationDone(bool fFinalizer);
- static void SetFinalizerThread(Thread * pThread);
- static HANDLE GetFinalizerEvent();
-};
-
bool IsGCSpecialThread();
inline bool dbgOnly_IsSpecialEEThread()
@@ -509,8 +492,6 @@ void LogSpewAlways(const char *fmt, ...);
// -----------------------------------------------------------------------------------------------------------
-void StompWriteBarrierEphemeral(bool isRuntimeSuspended);
-void StompWriteBarrierResize(bool isRuntimeSuspended, bool bReqUpperBoundsCheck);
bool IsGCThread();
class CLRConfig
diff --git a/src/gc/env/gcenv.ee.h b/src/gc/env/gcenv.ee.h
index beb0c1a98f..9f7f266a89 100644
--- a/src/gc/env/gcenv.ee.h
+++ b/src/gc/env/gcenv.ee.h
@@ -66,6 +66,8 @@ public:
static void DiagWalkLOHSurvivors(void* gcContext);
static void DiagWalkBGCSurvivors(void* gcContext);
static void StompWriteBarrier(WriteBarrierParameters* args);
+
+ static void EnableFinalization(bool foundFinalizers);
};
#endif // __GCENV_EE_H__
diff --git a/src/gc/gc.cpp b/src/gc/gc.cpp
index 6187938ff8..66c8b6afbc 100644
--- a/src/gc/gc.cpp
+++ b/src/gc/gc.cpp
@@ -389,7 +389,7 @@ void log_va_msg(const char *fmt, va_list args)
int pid_len = sprintf_s (&pBuffer[buffer_start], BUFFERSIZE - buffer_start, "[%5d]", (uint32_t)GCToOSInterface::GetCurrentThreadIdForLogging());
buffer_start += pid_len;
memset(&pBuffer[buffer_start], '-', BUFFERSIZE - buffer_start);
- int msg_len = _vsnprintf(&pBuffer[buffer_start], BUFFERSIZE - buffer_start, fmt, args );
+ int msg_len = _vsnprintf_s(&pBuffer[buffer_start], BUFFERSIZE - buffer_start, _TRUNCATE, fmt, args );
if (msg_len == -1)
{
msg_len = BUFFERSIZE - buffer_start;
@@ -1402,9 +1402,6 @@ int mark_time, plan_time, sweep_time, reloc_time, compact_time;
#ifndef MULTIPLE_HEAPS
-#define ephemeral_low g_gc_ephemeral_low
-#define ephemeral_high g_gc_ephemeral_high
-
#endif // MULTIPLE_HEAPS
#ifdef TRACE_GC
@@ -2187,27 +2184,22 @@ void stomp_write_barrier_resize(bool is_runtime_suspended, bool requires_upper_b
args.card_table = g_gc_card_table;
args.lowest_address = g_gc_lowest_address;
args.highest_address = g_gc_highest_address;
+#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+ if (SoftwareWriteWatch::IsEnabledForGCHeap())
+ {
+ args.write_watch_table = g_gc_sw_ww_table;
+ }
+#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
GCToEEInterface::StompWriteBarrier(&args);
}
-void stomp_write_barrier_ephemeral(bool is_runtime_suspended, uint8_t* ephemeral_lo, uint8_t* ephemeral_hi)
+void stomp_write_barrier_ephemeral(uint8_t* ephemeral_low, uint8_t* ephemeral_high)
{
WriteBarrierParameters args = {};
args.operation = WriteBarrierOp::StompEphemeral;
- args.is_runtime_suspended = is_runtime_suspended;
- args.ephemeral_lo = g_gc_ephemeral_low;
- args.ephemeral_hi = g_gc_ephemeral_high;
-#ifdef MULTIPLE_HEAPS
- // It is not correct to update the EE's g_ephemeral_low and g_ephemeral_high
- // to anything other than their default values when using Server GC, since
- // there is no single ephemeral generation across all of the heaps.
- // Server GC write barriers do not reference these two globals, but ErectWriteBarrier does.
- //
- // When MULTIPLE_HEAPS is defined, g_gc_ephemeral_low and g_gc_ephemeral_high should
- // always have their default values.
- assert(args.ephemeral_lo == (uint8_t*)1);
- assert(args.ephemeral_hi == (uint8_t*)~0);
-#endif // MULTIPLE_HEAPS
+ args.is_runtime_suspended = true;
+ args.ephemeral_low = ephemeral_low;
+ args.ephemeral_high = ephemeral_high;
GCToEEInterface::StompWriteBarrier(&args);
}
@@ -2220,6 +2212,8 @@ void stomp_write_barrier_initialize()
args.card_table = g_gc_card_table;
args.lowest_address = g_gc_lowest_address;
args.highest_address = g_gc_highest_address;
+ args.ephemeral_low = reinterpret_cast<uint8_t*>(1);
+ args.ephemeral_high = reinterpret_cast<uint8_t*>(~0);
GCToEEInterface::StompWriteBarrier(&args);
}
@@ -2430,6 +2424,10 @@ BOOL gc_heap::ro_segments_in_range;
size_t gc_heap::gen0_big_free_spaces = 0;
+uint8_t* gc_heap::ephemeral_low;
+
+uint8_t* gc_heap::ephemeral_high;
+
uint8_t* gc_heap::lowest_address;
uint8_t* gc_heap::highest_address;
@@ -7044,6 +7042,7 @@ int gc_heap::grow_brick_card_tables (uint8_t* start,
uint8_t* ha = g_gc_highest_address;
uint8_t* saved_g_lowest_address = min (start, g_gc_lowest_address);
uint8_t* saved_g_highest_address = max (end, g_gc_highest_address);
+ seg_mapping* new_seg_mapping_table = nullptr;
#ifdef BACKGROUND_GC
// This value is only for logging purpose - it's not necessarily exactly what we
// would commit for mark array but close enough for diagnostics purpose.
@@ -7204,14 +7203,18 @@ int gc_heap::grow_brick_card_tables (uint8_t* start,
#ifdef GROWABLE_SEG_MAPPING_TABLE
{
- seg_mapping* new_seg_mapping_table = (seg_mapping*)(mem + st_table_offset_aligned);
+ new_seg_mapping_table = (seg_mapping*)(mem + st_table_offset_aligned);
new_seg_mapping_table = (seg_mapping*)((uint8_t*)new_seg_mapping_table -
size_seg_mapping_table_of (0, (align_lower_segment (saved_g_lowest_address))));
memcpy(&new_seg_mapping_table[seg_mapping_word_of(g_gc_lowest_address)],
&seg_mapping_table[seg_mapping_word_of(g_gc_lowest_address)],
size_seg_mapping_table_of(g_gc_lowest_address, g_gc_highest_address));
- seg_mapping_table = new_seg_mapping_table;
+ // new_seg_mapping_table gets assigned to seg_mapping_table at the bottom of this function,
+ // not here. The reason for this is that, if we fail at mark array committing (OOM) and we've
+ // already switched seg_mapping_table to point to the new mapping table, we'll decommit it and
+ // run into trouble. By not assigning here, we're making sure that we will not change seg_mapping_table
+ // if an OOM occurs.
}
#endif //GROWABLE_SEG_MAPPING_TABLE
@@ -7225,7 +7228,7 @@ int gc_heap::grow_brick_card_tables (uint8_t* start,
translated_ct = translate_card_table (ct);
dprintf (GC_TABLE_LOG, ("card table: %Ix(translated: %Ix), seg map: %Ix, mark array: %Ix",
- (size_t)ct, (size_t)translated_ct, (size_t)seg_mapping_table, (size_t)card_table_mark_array (ct)));
+ (size_t)ct, (size_t)translated_ct, (size_t)new_seg_mapping_table, (size_t)card_table_mark_array (ct)));
#ifdef BACKGROUND_GC
if (hp->should_commit_mark_array())
@@ -7277,9 +7280,6 @@ int gc_heap::grow_brick_card_tables (uint8_t* start,
}
g_gc_card_table = translated_ct;
- g_gc_lowest_address = saved_g_lowest_address;
- g_gc_highest_address = saved_g_highest_address;
-
SoftwareWriteWatch::SetResizedUntranslatedTable(
mem + sw_ww_table_offset,
saved_g_lowest_address,
@@ -7290,6 +7290,8 @@ int gc_heap::grow_brick_card_tables (uint8_t* start,
// grow version of the write barrier. This test tells us if the new
// segment was allocated at a lower address than the old, requiring
// that we start doing an upper bounds check in the write barrier.
+ g_gc_lowest_address = saved_g_lowest_address;
+ g_gc_highest_address = saved_g_highest_address;
stomp_write_barrier_resize(true, la != saved_g_lowest_address);
write_barrier_updated = true;
@@ -7304,6 +7306,9 @@ int gc_heap::grow_brick_card_tables (uint8_t* start,
g_gc_card_table = translated_ct;
}
+ seg_mapping_table = new_seg_mapping_table;
+
+ GCToOSInterface::FlushProcessWriteBuffers();
g_gc_lowest_address = saved_g_lowest_address;
g_gc_highest_address = saved_g_highest_address;
@@ -9662,7 +9667,7 @@ void gc_heap::make_generation (generation& gen, heap_segment* seg, uint8_t* star
#endif //FREE_USAGE_STATS
}
-void gc_heap::adjust_ephemeral_limits (bool is_runtime_suspended)
+void gc_heap::adjust_ephemeral_limits ()
{
ephemeral_low = generation_allocation_start (generation_of (max_generation - 1));
ephemeral_high = heap_segment_reserved (ephemeral_heap_segment);
@@ -9670,8 +9675,10 @@ void gc_heap::adjust_ephemeral_limits (bool is_runtime_suspended)
dprintf (3, ("new ephemeral low: %Ix new ephemeral high: %Ix",
(size_t)ephemeral_low, (size_t)ephemeral_high))
+#ifndef MULTIPLE_HEAPS
// This updates the write barrier helpers with the new info.
- stomp_write_barrier_ephemeral(is_runtime_suspended, ephemeral_low, ephemeral_high);
+ stomp_write_barrier_ephemeral(ephemeral_low, ephemeral_high);
+#endif // MULTIPLE_HEAPS
}
#if defined(TRACE_GC) || defined(GC_CONFIG_DRIVEN)
@@ -10466,7 +10473,7 @@ gc_heap::init_gc_heap (int h_number)
make_background_mark_stack (b_arr);
#endif //BACKGROUND_GC
- adjust_ephemeral_limits(true);
+ adjust_ephemeral_limits();
#ifdef MARK_ARRAY
// why would we clear the mark array for this page? it should be cleared..
@@ -15364,7 +15371,11 @@ void gc_heap::gc1()
if (!settings.concurrent)
#endif //BACKGROUND_GC
{
- adjust_ephemeral_limits(!!IsGCThread());
+#ifndef FEATURE_REDHAWK
+ // IsGCThread() always returns false on CoreRT, but this assert is useful in CoreCLR.
+ assert(!!IsGCThread());
+#endif // FEATURE_REDHAWK
+ adjust_ephemeral_limits();
}
#ifdef BACKGROUND_GC
@@ -16204,7 +16215,11 @@ BOOL gc_heap::expand_soh_with_minimal_gc()
dd_gc_new_allocation (dynamic_data_of (max_generation)) -= ephemeral_size;
dd_new_allocation (dynamic_data_of (max_generation)) = dd_gc_new_allocation (dynamic_data_of (max_generation));
- adjust_ephemeral_limits(!!IsGCThread());
+#ifndef FEATURE_REDHAWK
+ // IsGCThread() always returns false on CoreRT, but this assert is useful in CoreCLR.
+ assert(!!IsGCThread());
+#endif // FEATURE_REDHAWK
+ adjust_ephemeral_limits();
return TRUE;
}
else
@@ -32778,8 +32793,8 @@ gc_heap::verify_heap (BOOL begin_gc_p)
#endif //BACKGROUND_GC
#ifndef MULTIPLE_HEAPS
- if ((g_gc_ephemeral_low != generation_allocation_start (generation_of (max_generation - 1))) ||
- (g_gc_ephemeral_high != heap_segment_reserved (ephemeral_heap_segment)))
+ if ((ephemeral_low != generation_allocation_start (generation_of (max_generation - 1))) ||
+ (ephemeral_high != heap_segment_reserved (ephemeral_heap_segment)))
{
FATAL_GC_ERROR();
}
@@ -35140,11 +35155,7 @@ GCHeap::GarbageCollectGeneration (unsigned int gen, gc_reason reason)
#endif //!MULTIPLE_HEAPS
#ifdef FEATURE_PREMORTEM_FINALIZATION
- if ((!pGenGCHeap->settings.concurrent && pGenGCHeap->settings.found_finalizers) ||
- FinalizerThread::HaveExtraWorkForFinalizer())
- {
- FinalizerThread::EnableFinalization();
- }
+ GCToEEInterface::EnableFinalization(!pGenGCHeap->settings.concurrent && pGenGCHeap->settings.found_finalizers);
#endif // FEATURE_PREMORTEM_FINALIZATION
return dd_collection_count (dd);
@@ -35681,85 +35692,6 @@ void GCHeap::SetFinalizationRun (Object* obj)
#endif // FEATURE_PREMORTEM_FINALIZATION
-//----------------------------------------------------------------------------
-//
-// Write Barrier Support for bulk copy ("Clone") operations
-//
-// StartPoint is the target bulk copy start point
-// len is the length of the bulk copy (in bytes)
-//
-//
-// Performance Note:
-//
-// This is implemented somewhat "conservatively", that is we
-// assume that all the contents of the bulk copy are object
-// references. If they are not, and the value lies in the
-// ephemeral range, we will set false positives in the card table.
-//
-// We could use the pointer maps and do this more accurately if necessary
-
-#if defined(_MSC_VER) && defined(_TARGET_X86_)
-#pragma optimize("y", on) // Small critical routines, don't put in EBP frame
-#endif //_MSC_VER && _TARGET_X86_
-
-void
-GCHeap::SetCardsAfterBulkCopy( Object **StartPoint, size_t len )
-{
- Object **rover;
- Object **end;
-
- // Target should aligned
- assert(Aligned ((size_t)StartPoint));
-
-
- // Don't optimize the Generation 0 case if we are checking for write barrier voilations
- // since we need to update the shadow heap even in the generation 0 case.
-#if defined (WRITE_BARRIER_CHECK) && !defined (SERVER_GC)
- if (g_pConfig->GetHeapVerifyLevel() & EEConfig::HEAPVERIFY_BARRIERCHECK)
- for(unsigned i=0; i < len / sizeof(Object*); i++)
- updateGCShadow(&StartPoint[i], StartPoint[i]);
-#endif //WRITE_BARRIER_CHECK && !SERVER_GC
-
-#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
- if (SoftwareWriteWatch::IsEnabledForGCHeap())
- {
- SoftwareWriteWatch::SetDirtyRegion(StartPoint, len);
- }
-#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
-
- // If destination is in Gen 0 don't bother
- if (
-#ifdef BACKGROUND_GC
- (!gc_heap::settings.concurrent) &&
-#endif //BACKGROUND_GC
- (g_theGCHeap->WhichGeneration( (Object*) StartPoint ) == 0))
- return;
-
- rover = StartPoint;
- end = StartPoint + (len/sizeof(Object*));
- while (rover < end)
- {
- if ( (((uint8_t*)*rover) >= g_gc_ephemeral_low) && (((uint8_t*)*rover) < g_gc_ephemeral_high) )
- {
- // Set Bit For Card and advance to next card
- size_t card = gcard_of ((uint8_t*)rover);
-
- Interlocked::Or (&g_gc_card_table[card/card_word_width], (1U << (card % card_word_width)));
- // Skip to next card for the object
- rover = (Object**)align_on_card ((uint8_t*)(rover+1));
- }
- else
- {
- rover++;
- }
- }
-}
-
-#if defined(_MSC_VER) && defined(_TARGET_X86_)
-#pragma optimize("", on) // Go back to command line default optimizations
-#endif //_MSC_VER && _TARGET_X86_
-
-
#ifdef FEATURE_PREMORTEM_FINALIZATION
//--------------------------------------------------------------------
@@ -36304,7 +36236,7 @@ CFinalize::ScanForFinalization (promote_func* pfn, int gen, BOOL mark_only_p,
if (hp->settings.concurrent && hp->settings.found_finalizers)
{
if (!mark_only_p)
- FinalizerThread::EnableFinalization();
+ GCToEEInterface::EnableFinalization(true);
}
}
@@ -36560,11 +36492,13 @@ void GCHeap::DiagScanFinalizeQueue (fq_scan_fn fn, ScanContext* sc)
void GCHeap::DiagScanHandles (handle_scan_fn fn, int gen_number, ScanContext* context)
{
+ UNREFERENCED_PARAMETER(gen_number);
GCScan::GcScanHandlesForProfilerAndETW (max_generation, context, fn);
}
void GCHeap::DiagScanDependentHandles (handle_scan_fn fn, int gen_number, ScanContext* context)
{
+ UNREFERENCED_PARAMETER(gen_number);
GCScan::GcScanDependentHandlesForProfilerAndETW (max_generation, context, fn);
}
diff --git a/src/gc/gc.h b/src/gc/gc.h
index b7f1e956b6..7332e42885 100644
--- a/src/gc/gc.h
+++ b/src/gc/gc.h
@@ -140,8 +140,7 @@ class DacHeapWalker;
extern "C" uint32_t* g_gc_card_table;
extern "C" uint8_t* g_gc_lowest_address;
extern "C" uint8_t* g_gc_highest_address;
-extern "C" uint8_t* g_gc_ephemeral_low;
-extern "C" uint8_t* g_gc_ephemeral_high;
+extern "C" bool g_fFinalizerRunOnShutDown;
namespace WKS {
::IGCHeapInternal* CreateGCHeap();
@@ -270,6 +269,11 @@ public:
return mt->GetBaseSize() >= LARGE_OBJECT_SIZE;
}
+ void SetFinalizeRunOnShutdown(bool value)
+ {
+ g_fFinalizerRunOnShutDown = value;
+ }
+
protected:
public:
#if defined(FEATURE_BASICFREEZE) && defined(VERIFY_HEAP)
diff --git a/src/gc/gccommon.cpp b/src/gc/gccommon.cpp
index d1ccddd205..133f05e490 100644
--- a/src/gc/gccommon.cpp
+++ b/src/gc/gccommon.cpp
@@ -41,8 +41,7 @@ uint8_t* g_shadow_lowest_address = NULL;
uint32_t* g_gc_card_table;
uint8_t* g_gc_lowest_address = 0;
uint8_t* g_gc_highest_address = 0;
-uint8_t* g_gc_ephemeral_low = (uint8_t*)1;
-uint8_t* g_gc_ephemeral_high = (uint8_t*)~0;
+bool g_fFinalizerRunOnShutDown = false;
VOLATILE(int32_t) m_GCLock = -1;
diff --git a/src/gc/gcenv.ee.standalone.inl b/src/gc/gcenv.ee.standalone.inl
index 3b64586d70..31f3d1d8da 100644
--- a/src/gc/gcenv.ee.standalone.inl
+++ b/src/gc/gcenv.ee.standalone.inl
@@ -11,166 +11,202 @@
// will be fowarded to this interface instance.
extern IGCToCLR* g_theGCToCLR;
+// A note about this:
+// In general, we don't want to pretend to be smarter than the compiler
+// and force it to inline things. However, inlining is here is required
+// for correctness as it stands today (though it will not always be required).
+//
+// The reason for this is because:
+// 1) This file (and the GCToEEInterface class) define symbols that are inline
+// and static, so the symbol GCToEEInterface::XYZ defines a symbol with weak
+// linkage when the function is not inlined,
+// 2) src/vm/gcenv.ee.cpp all define symbols that are not inline and instance methods
+// of GCToEEInterface, with external linkage.
+// 3) When it comes time to link the GC and the VM, the linker observes the duplicate
+// symbols and discards the one with weak linkage.
+// 4) All of the calls within the GC to the functions in this file are replaced by
+// the linker to calls to the implementation of a pure virtual IGCToCLR. The
+// functions implementing IGCToCLR have an extra argument (this).
+// 5) Now, all calls to these functions from within the GC are doomed because of the
+// functions that actually get called expect this to be in rdi, where the compiler
+// has placed the first argument instead.
+//
+// For now, by forcing the compiler to inline these functions, the compiler won't actually
+// emit symbols for them and we'll avoid the linker havoc.
+#ifdef _MSC_VER
+ #define ALWAYS_INLINE __forceinline
+#else
+ #define ALWAYS_INLINE __attribute__((always_inline)) inline
+#endif
+
// When we are building the GC in a standalone environment, we
// will be dispatching virtually against g_theGCToCLR to call
// into the EE. This class provides an identical API to the existing
// GCToEEInterface, but only forwards the call onto the global
// g_theGCToCLR instance.
-inline void GCToEEInterface::SuspendEE(SUSPEND_REASON reason)
+ALWAYS_INLINE void GCToEEInterface::SuspendEE(SUSPEND_REASON reason)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->SuspendEE(reason);
}
-inline void GCToEEInterface::RestartEE(bool bFinishedGC)
+ALWAYS_INLINE void GCToEEInterface::RestartEE(bool bFinishedGC)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->RestartEE(bFinishedGC);
}
-inline void GCToEEInterface::GcScanRoots(promote_func* fn, int condemned, int max_gen, ScanContext* sc)
+ALWAYS_INLINE void GCToEEInterface::GcScanRoots(promote_func* fn, int condemned, int max_gen, ScanContext* sc)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->GcScanRoots(fn, condemned, max_gen, sc);
}
-inline void GCToEEInterface::GcStartWork(int condemned, int max_gen)
+ALWAYS_INLINE void GCToEEInterface::GcStartWork(int condemned, int max_gen)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->GcStartWork(condemned, max_gen);
}
-inline void GCToEEInterface::AfterGcScanRoots(int condemned, int max_gen, ScanContext* sc)
+ALWAYS_INLINE void GCToEEInterface::AfterGcScanRoots(int condemned, int max_gen, ScanContext* sc)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->AfterGcScanRoots(condemned, max_gen, sc);
}
-inline void GCToEEInterface::GcBeforeBGCSweepWork()
+ALWAYS_INLINE void GCToEEInterface::GcBeforeBGCSweepWork()
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->GcBeforeBGCSweepWork();
}
-inline void GCToEEInterface::GcDone(int condemned)
+ALWAYS_INLINE void GCToEEInterface::GcDone(int condemned)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->GcDone(condemned);
}
-inline bool GCToEEInterface::RefCountedHandleCallbacks(Object * pObject)
+ALWAYS_INLINE bool GCToEEInterface::RefCountedHandleCallbacks(Object * pObject)
{
assert(g_theGCToCLR != nullptr);
return g_theGCToCLR->RefCountedHandleCallbacks(pObject);
}
-inline void GCToEEInterface::SyncBlockCacheWeakPtrScan(HANDLESCANPROC scanProc, uintptr_t lp1, uintptr_t lp2)
+ALWAYS_INLINE void GCToEEInterface::SyncBlockCacheWeakPtrScan(HANDLESCANPROC scanProc, uintptr_t lp1, uintptr_t lp2)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->SyncBlockCacheWeakPtrScan(scanProc, lp1, lp2);
}
-inline void GCToEEInterface::SyncBlockCacheDemote(int max_gen)
+ALWAYS_INLINE void GCToEEInterface::SyncBlockCacheDemote(int max_gen)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->SyncBlockCacheDemote(max_gen);
}
-inline void GCToEEInterface::SyncBlockCachePromotionsGranted(int max_gen)
+ALWAYS_INLINE void GCToEEInterface::SyncBlockCachePromotionsGranted(int max_gen)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->SyncBlockCachePromotionsGranted(max_gen);
}
-inline bool GCToEEInterface::IsPreemptiveGCDisabled(Thread * pThread)
+ALWAYS_INLINE bool GCToEEInterface::IsPreemptiveGCDisabled(Thread * pThread)
{
assert(g_theGCToCLR != nullptr);
return g_theGCToCLR->IsPreemptiveGCDisabled(pThread);
}
-inline void GCToEEInterface::EnablePreemptiveGC(Thread * pThread)
+ALWAYS_INLINE void GCToEEInterface::EnablePreemptiveGC(Thread * pThread)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->EnablePreemptiveGC(pThread);
}
-inline void GCToEEInterface::DisablePreemptiveGC(Thread * pThread)
+ALWAYS_INLINE void GCToEEInterface::DisablePreemptiveGC(Thread * pThread)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->DisablePreemptiveGC(pThread);
}
-inline gc_alloc_context * GCToEEInterface::GetAllocContext(Thread * pThread)
+ALWAYS_INLINE gc_alloc_context * GCToEEInterface::GetAllocContext(Thread * pThread)
{
assert(g_theGCToCLR != nullptr);
return g_theGCToCLR->GetAllocContext(pThread);
}
-inline bool GCToEEInterface::CatchAtSafePoint(Thread * pThread)
+ALWAYS_INLINE bool GCToEEInterface::CatchAtSafePoint(Thread * pThread)
{
assert(g_theGCToCLR != nullptr);
return g_theGCToCLR->CatchAtSafePoint(pThread);
}
-inline void GCToEEInterface::GcEnumAllocContexts(enum_alloc_context_func* fn, void* param)
+ALWAYS_INLINE void GCToEEInterface::GcEnumAllocContexts(enum_alloc_context_func* fn, void* param)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->GcEnumAllocContexts(fn, param);
}
-inline Thread* GCToEEInterface::CreateBackgroundThread(GCBackgroundThreadFunction threadStart, void* arg)
+ALWAYS_INLINE Thread* GCToEEInterface::CreateBackgroundThread(GCBackgroundThreadFunction threadStart, void* arg)
{
assert(g_theGCToCLR != nullptr);
return g_theGCToCLR->CreateBackgroundThread(threadStart, arg);
}
-inline void GCToEEInterface::DiagGCStart(int gen, bool isInduced)
+ALWAYS_INLINE void GCToEEInterface::DiagGCStart(int gen, bool isInduced)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->DiagGCStart(gen, isInduced);
}
-inline void GCToEEInterface::DiagUpdateGenerationBounds()
+ALWAYS_INLINE void GCToEEInterface::DiagUpdateGenerationBounds()
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->DiagUpdateGenerationBounds();
}
-inline void GCToEEInterface::DiagGCEnd(size_t index, int gen, int reason, bool fConcurrent)
+ALWAYS_INLINE void GCToEEInterface::DiagGCEnd(size_t index, int gen, int reason, bool fConcurrent)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->DiagGCEnd(index, gen, reason, fConcurrent);
}
-inline void GCToEEInterface::DiagWalkFReachableObjects(void* gcContext)
+ALWAYS_INLINE void GCToEEInterface::DiagWalkFReachableObjects(void* gcContext)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->DiagWalkFReachableObjects(gcContext);
}
-inline void GCToEEInterface::DiagWalkSurvivors(void* gcContext)
+ALWAYS_INLINE void GCToEEInterface::DiagWalkSurvivors(void* gcContext)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->DiagWalkSurvivors(gcContext);
}
-inline void GCToEEInterface::DiagWalkLOHSurvivors(void* gcContext)
+ALWAYS_INLINE void GCToEEInterface::DiagWalkLOHSurvivors(void* gcContext)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->DiagWalkLOHSurvivors(gcContext);
}
-inline void GCToEEInterface::DiagWalkBGCSurvivors(void* gcContext)
+ALWAYS_INLINE void GCToEEInterface::DiagWalkBGCSurvivors(void* gcContext)
{
assert(g_theGCToCLR != nullptr);
return g_theGCToCLR->DiagWalkBGCSurvivors(gcContext);
}
-inline void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args)
+ALWAYS_INLINE void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args)
{
assert(g_theGCToCLR != nullptr);
g_theGCToCLR->StompWriteBarrier(args);
}
+ALWAYS_INLINE void GCToEEInterface::EnableFinalization(bool foundFinalizers)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->EnableFinalization(foundFinalizers);
+}
+
+#undef ALWAYS_INLINE
+
#endif // __GCTOENV_EE_STANDALONE_INL__
diff --git a/src/gc/gcenv.unix.cpp b/src/gc/gcenv.unix.cpp
deleted file mode 100644
index 0235952e28..0000000000
--- a/src/gc/gcenv.unix.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "env/gcenv.structs.h"
-#include "env/gcenv.base.h"
-#include "env/gcenv.os.h"
-
-// Initialize the interface implementation
-// Return:
-// true if it has succeeded, false if it has failed
-bool GCToOSInterface::Initialize()
-{
- throw nullptr;
-}
-
-// Shutdown the interface implementation
-void GCToOSInterface::Shutdown()
-{
- throw nullptr;
-}
-
-// Get numeric id of the current thread if possible on the
-// current platform. It is indended for logging purposes only.
-// Return:
-// Numeric id of the current thread or 0 if the
-uint64_t GCToOSInterface::GetCurrentThreadIdForLogging()
-{
- throw nullptr;
-}
-
-// Get id of the process
-uint32_t GCToOSInterface::GetCurrentProcessId()
-{
- throw nullptr;
-}
-
-// Set ideal affinity for the current thread
-// Parameters:
-// affinity - ideal processor affinity for the thread
-// Return:
-// true if it has succeeded, false if it has failed
-bool GCToOSInterface::SetCurrentThreadIdealAffinity(GCThreadAffinity* affinity)
-{
- throw nullptr;
-}
-
-// Get the number of the current processor
-uint32_t GCToOSInterface::GetCurrentProcessorNumber()
-{
- throw nullptr;
-}
-
-// Check if the OS supports getting current processor number
-bool GCToOSInterface::CanGetCurrentProcessorNumber()
-{
- throw nullptr;
-}
-
-// Flush write buffers of processors that are executing threads of the current process
-void GCToOSInterface::FlushProcessWriteBuffers()
-{
- throw nullptr;
-}
-
-// Break into a debugger
-void GCToOSInterface::DebugBreak()
-{
- throw nullptr;
-}
-
-// Get number of logical processors
-uint32_t GCToOSInterface::GetLogicalCpuCount()
-{
- throw nullptr;
-}
-
-// Causes the calling thread to sleep for the specified number of milliseconds
-// Parameters:
-// sleepMSec - time to sleep before switching to another thread
-void GCToOSInterface::Sleep(uint32_t sleepMSec)
-{
- throw nullptr;
-}
-
-// Causes the calling thread to yield execution to another thread that is ready to run on the current processor.
-// Parameters:
-// switchCount - number of times the YieldThread was called in a loop
-void GCToOSInterface::YieldThread(uint32_t switchCount)
-{
- throw nullptr;
-}
-
-// Reserve virtual memory range.
-// Parameters:
-// size - size of the virtual memory range
-// alignment - requested memory alignment, 0 means no specific alignment requested
-// flags - flags to control special settings like write watching
-// Return:
-// Starting virtual address of the reserved range
-void* GCToOSInterface::VirtualReserve(size_t size, size_t alignment, uint32_t flags)
-{
- throw nullptr;
-}
-
-// Release virtual memory range previously reserved using VirtualReserve
-// Parameters:
-// address - starting virtual address
-// size - size of the virtual memory range
-// Return:
-// true if it has succeeded, false if it has failed
-bool GCToOSInterface::VirtualRelease(void* address, size_t size)
-{
- throw nullptr;
-}
-
-// Commit virtual memory range. It must be part of a range reserved using VirtualReserve.
-// Parameters:
-// address - starting virtual address
-// size - size of the virtual memory range
-// Return:
-// true if it has succeeded, false if it has failed
-bool GCToOSInterface::VirtualCommit(void* address, size_t size)
-{
- throw nullptr;
-}
-
-// Decomit virtual memory range.
-// Parameters:
-// address - starting virtual address
-// size - size of the virtual memory range
-// Return:
-// true if it has succeeded, false if it has failed
-bool GCToOSInterface::VirtualDecommit(void* address, size_t size)
-{
- throw nullptr;
-}
-
-// Reset virtual memory range. Indicates that data in the memory range specified by address and size is no
-// longer of interest, but it should not be decommitted.
-// Parameters:
-// address - starting virtual address
-// size - size of the virtual memory range
-// unlock - true if the memory range should also be unlocked
-// Return:
-// true if it has succeeded, false if it has failed
-bool GCToOSInterface::VirtualReset(void * address, size_t size, bool unlock)
-{
- throw nullptr;
-}
-
-// Check if the OS supports write watching
-bool GCToOSInterface::SupportsWriteWatch()
-{
- throw nullptr;
-}
-
-// Reset the write tracking state for the specified virtual memory range.
-// Parameters:
-// address - starting virtual address
-// size - size of the virtual memory range
-void GCToOSInterface::ResetWriteWatch(void* address, size_t size)
-{
- throw nullptr;
-}
-
-// Retrieve addresses of the pages that are written to in a region of virtual memory
-// Parameters:
-// resetState - true indicates to reset the write tracking state
-// address - starting virtual address
-// size - size of the virtual memory range
-// pageAddresses - buffer that receives an array of page addresses in the memory region
-// pageAddressesCount - on input, size of the lpAddresses array, in array elements
-// on output, the number of page addresses that are returned in the array.
-// Return:
-// true if it has succeeded, false if it has failed
-bool GCToOSInterface::GetWriteWatch(bool resetState, void* address, size_t size, void** pageAddresses, uintptr_t* pageAddressesCount)
-{
- throw nullptr;
-}
-
-// Get size of the largest cache on the processor die
-// Parameters:
-// trueSize - true to return true cache size, false to return scaled up size based on
-// the processor architecture
-// Return:
-// Size of the cache
-size_t GCToOSInterface::GetLargestOnDieCacheSize(bool trueSize)
-{
- throw nullptr;
-}
-
-// Get affinity mask of the current process
-// Parameters:
-// processMask - affinity mask for the specified process
-// systemMask - affinity mask for the system
-// Return:
-// true if it has succeeded, false if it has failed
-// Remarks:
-// A process affinity mask is a bit vector in which each bit represents the processors that
-// a process is allowed to run on. A system affinity mask is a bit vector in which each bit
-// represents the processors that are configured into a system.
-// A process affinity mask is a subset of the system affinity mask. A process is only allowed
-// to run on the processors configured into a system. Therefore, the process affinity mask cannot
-// specify a 1 bit for a processor when the system affinity mask specifies a 0 bit for that processor.
-bool GCToOSInterface::GetCurrentProcessAffinityMask(uintptr_t* processMask, uintptr_t* systemMask)
-{
- throw nullptr;
-}
-
-// Get number of processors assigned to the current process
-// Return:
-// The number of processors
-uint32_t GCToOSInterface::GetCurrentProcessCpuCount()
-{
- throw nullptr;
-}
-
-// Return the size of the user-mode portion of the virtual address space of this process.
-// Return:
-// non zero if it has succeeded, 0 if it has failed
-size_t GCToOSInterface::GetVirtualMemoryLimit()
-{
- throw nullptr;
-}
-
-// Get the physical memory that this process can use.
-// Return:
-// non zero if it has succeeded, 0 if it has failed
-// Remarks:
-// If a process runs with a restricted memory limit, it returns the limit. If there's no limit
-// specified, it returns amount of actual physical memory.
-uint64_t GCToOSInterface::GetPhysicalMemoryLimit()
-{
- throw nullptr;
-}
-
-// Get memory status
-// Parameters:
-// memory_load - A number between 0 and 100 that specifies the approximate percentage of physical memory
-// that is in use (0 indicates no memory use and 100 indicates full memory use).
-// available_physical - The amount of physical memory currently available, in bytes.
-// available_page_file - The maximum amount of memory the current process can commit, in bytes.
-void GCToOSInterface::GetMemoryStatus(uint32_t* memory_load, uint64_t* available_physical, uint64_t* available_page_file)
-{
- throw nullptr;
-}
-
-// Get a high precision performance counter
-// Return:
-// The counter value
-int64_t GCToOSInterface::QueryPerformanceCounter()
-{
- throw nullptr;
-}
-
-// Get a frequency of the high precision performance counter
-// Return:
-// The counter frequency
-int64_t GCToOSInterface::QueryPerformanceFrequency()
-{
- throw nullptr;
-}
-
-// Get a time stamp with a low precision
-// Return:
-// Time stamp in milliseconds
-uint32_t GCToOSInterface::GetLowPrecisionTimeStamp()
-{
- throw nullptr;
-}
-
-
-// Create a new thread for GC use
-// Parameters:
-// function - the function to be executed by the thread
-// param - parameters of the thread
-// affinity - processor affinity of the thread
-// Return:
-// true if it has succeeded, false if it has failed
-bool GCToOSInterface::CreateThread(GCThreadFunction function, void* param, GCThreadAffinity* affinity)
-{
- throw nullptr;
-}
-
-// Initialize the critical section
-void CLRCriticalSection::Initialize()
-{
- throw nullptr;
-}
-
-// Destroy the critical section
-void CLRCriticalSection::Destroy()
-{
- throw nullptr;
-}
-
-// Enter the critical section. Blocks until the section can be entered.
-void CLRCriticalSection::Enter()
-{
- throw nullptr;
-}
-
-// Leave the critical section
-void CLRCriticalSection::Leave()
-{
- throw nullptr;
-} \ No newline at end of file
diff --git a/src/gc/gcimpl.h b/src/gc/gcimpl.h
index 7e3a13a743..cb91c4dc3e 100644
--- a/src/gc/gcimpl.h
+++ b/src/gc/gcimpl.h
@@ -198,7 +198,6 @@ public:
BOOL FinalizeAppDomain(AppDomain *pDomain, BOOL fRunFinalizers);
BOOL ShouldRestartFinalizerWatchDog();
- void SetCardsAfterBulkCopy( Object**, size_t);
void DiagWalkObject (Object* obj, walk_fn fn, void* context);
public: // FIX
diff --git a/src/gc/gcinterface.ee.h b/src/gc/gcinterface.ee.h
index c5f87ef031..7c0eea2d95 100644
--- a/src/gc/gcinterface.ee.h
+++ b/src/gc/gcinterface.ee.h
@@ -128,6 +128,11 @@ public:
// barrier if it needs to be updated.
virtual
void StompWriteBarrier(WriteBarrierParameters* args) = 0;
+
+ // Signals to the finalizer thread that there are objects ready to
+ // be finalized.
+ virtual
+ void EnableFinalization(bool foundFinalizers) = 0;
};
#endif // _GCINTERFACE_EE_H_
diff --git a/src/gc/gcinterface.h b/src/gc/gcinterface.h
index 1457848992..99d79df633 100644
--- a/src/gc/gcinterface.h
+++ b/src/gc/gcinterface.h
@@ -46,7 +46,9 @@ enum class WriteBarrierOp
{
StompResize,
StompEphemeral,
- Initialize
+ Initialize,
+ SwitchToWriteWatch,
+ SwitchToNonWriteWatch
};
// Arguments to GCToEEInterface::StompWriteBarrier
@@ -85,11 +87,15 @@ struct WriteBarrierParameters
// The new start of the ephemeral generation.
// Used for WriteBarrierOp::StompEphemeral.
- uint8_t* ephemeral_lo;
+ uint8_t* ephemeral_low;
// The new end of the ephemeral generation.
// Used for WriteBarrierOp::StompEphemeral.
- uint8_t* ephemeral_hi;
+ uint8_t* ephemeral_high;
+
+ // The new write watch table, if we are using our own write watch
+ // implementation. Used for WriteBarrierOp::SwitchToWriteWatch only.
+ uint8_t* write_watch_table;
};
#include "gcinterface.ee.h"
@@ -148,6 +154,10 @@ struct segment_info
#define max_generation 2
+// The bit shift used to convert a memory address into an index into the
+// Software Write Watch table.
+#define SOFTWARE_WRITE_WATCH_AddressToTableByteIndexShift 0xc
+
class Object;
class IGCHeap;
@@ -303,6 +313,10 @@ public:
// Gets the next finalizable object.
virtual Object* GetNextFinalizable() = 0;
+ // Sets whether or not the GC should report all finalizable objects as
+ // ready to be finalized, instead of only collectable objects.
+ virtual void SetFinalizeRunOnShutdown(bool value) = 0;
+
/*
===========================================================================
BCL routines. These are routines that are directly exposed by mscorlib
@@ -398,9 +412,6 @@ public:
// sanity checks asserting that a GC has not occured.
virtual unsigned GetGcCount() = 0;
- // Sets cards after an object has been memmoved.
- virtual void SetCardsAfterBulkCopy(Object** obj, size_t length) = 0;
-
// Gets whether or not the home heap of this alloc context matches the heap
// associated with this thread.
virtual bool IsThreadUsingAllocationContextHeap(gc_alloc_context* acontext, int thread_number) = 0;
diff --git a/src/gc/gcpriv.h b/src/gc/gcpriv.h
index 3bed8c2cf8..1f97d7f2d5 100644
--- a/src/gc/gcpriv.h
+++ b/src/gc/gcpriv.h
@@ -1671,7 +1671,7 @@ protected:
PER_HEAP
void reset_write_watch (BOOL concurrent_p);
PER_HEAP
- void adjust_ephemeral_limits (bool is_runtime_suspended);
+ void adjust_ephemeral_limits ();
PER_HEAP
void make_generation (generation& gen, heap_segment* seg,
uint8_t* start, uint8_t* pointer);
@@ -2802,13 +2802,11 @@ public:
PER_HEAP
void exit_gc_done_event_lock();
-#ifdef MULTIPLE_HEAPS
PER_HEAP
uint8_t* ephemeral_low; //lowest ephemeral address
PER_HEAP
uint8_t* ephemeral_high; //highest ephemeral address
-#endif //MULTIPLE_HEAPS
PER_HEAP
uint32_t* card_table;
diff --git a/src/gc/gcsvr.cpp b/src/gc/gcsvr.cpp
index cf5fc9335f..70801dd4ee 100644
--- a/src/gc/gcsvr.cpp
+++ b/src/gc/gcsvr.cpp
@@ -13,6 +13,7 @@
#include "gc.h"
#include "gcscan.h"
#include "gcdesc.h"
+#include "softwarewritewatch.h"
#define SERVER_GC 1
diff --git a/src/gc/gcwks.cpp b/src/gc/gcwks.cpp
index 574df8215a..5c489df0e0 100644
--- a/src/gc/gcwks.cpp
+++ b/src/gc/gcwks.cpp
@@ -11,6 +11,7 @@
#include "gc.h"
#include "gcscan.h"
#include "gcdesc.h"
+#include "softwarewritewatch.h"
#ifdef SERVER_GC
#undef SERVER_GC
diff --git a/src/gc/sample/CMakeLists.txt b/src/gc/sample/CMakeLists.txt
index 9552cc51e2..29fd32f2ff 100644
--- a/src/gc/sample/CMakeLists.txt
+++ b/src/gc/sample/CMakeLists.txt
@@ -22,7 +22,7 @@ set(SOURCES
if(WIN32)
list(APPEND SOURCES
- ../gcenv.windows.cpp)
+ ../windows/gcenv.windows.cpp)
add_definitions(-DUNICODE=1)
else()
list(APPEND SOURCES
diff --git a/src/gc/sample/GCSample.cpp b/src/gc/sample/GCSample.cpp
index 664dc38e94..112d291420 100644
--- a/src/gc/sample/GCSample.cpp
+++ b/src/gc/sample/GCSample.cpp
@@ -94,14 +94,11 @@ inline void ErectWriteBarrier(Object ** dst, Object * ref)
if (((uint8_t*)dst < g_gc_lowest_address) || ((uint8_t*)dst >= g_gc_highest_address))
return;
- if((uint8_t*)ref >= g_gc_ephemeral_low && (uint8_t*)ref < g_gc_ephemeral_high)
- {
- // volatile is used here to prevent fetch of g_card_table from being reordered
- // with g_lowest/highest_address check above. See comment in code:gc_heap::grow_brick_card_tables.
- uint8_t* pCardByte = (uint8_t *)*(volatile uint8_t **)(&g_gc_card_table) + card_byte((uint8_t *)dst);
- if(*pCardByte != 0xFF)
- *pCardByte = 0xFF;
- }
+ // volatile is used here to prevent fetch of g_card_table from being reordered
+ // with g_lowest/highest_address check above. See comment in code:gc_heap::grow_brick_card_tables.
+ uint8_t* pCardByte = (uint8_t *)*(volatile uint8_t **)(&g_gc_card_table) + card_byte((uint8_t *)dst);
+ if(*pCardByte != 0xFF)
+ *pCardByte = 0xFF;
}
void WriteBarrier(Object ** dst, Object * ref)
diff --git a/src/gc/sample/GCSample.vcxproj b/src/gc/sample/GCSample.vcxproj
index 1716f462ee..105e289c1a 100644
--- a/src/gc/sample/GCSample.vcxproj
+++ b/src/gc/sample/GCSample.vcxproj
@@ -87,7 +87,7 @@
<ClCompile Include="GCSample.cpp" />
<ClCompile Include="..\gccommon.cpp" />
<ClCompile Include="..\gceewks.cpp" />
- <ClCompile Include="..\gcenv.windows.cpp">
+ <ClCompile Include="..\windows\gcenv.windows.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\gcscan.cpp" />
diff --git a/src/gc/sample/gcenv.ee.cpp b/src/gc/sample/gcenv.ee.cpp
index ac227b4823..e95a78dc48 100644
--- a/src/gc/sample/gcenv.ee.cpp
+++ b/src/gc/sample/gcenv.ee.cpp
@@ -13,8 +13,6 @@ MethodTable * g_pFreeObjectMethodTable;
int32_t g_TrapReturningThreads;
-bool g_fFinalizerRunOnShutDown;
-
EEConfig * g_pConfig;
bool CLREventStatic::CreateManualEventNoThrow(bool bInitialState)
@@ -259,17 +257,12 @@ void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args)
{
}
-void FinalizerThread::EnableFinalization()
+void GCToEEInterface::EnableFinalization(bool foundFinalizers)
{
// Signal to finalizer thread that there are objects to finalize
// TODO: Implement for finalization
}
-bool FinalizerThread::HaveExtraWorkForFinalizer()
-{
- return false;
-}
-
bool IsGCSpecialThread()
{
// TODO: Implement for background GC
diff --git a/src/gc/softwarewritewatch.cpp b/src/gc/softwarewritewatch.cpp
index fa14a04897..b85293857a 100644
--- a/src/gc/softwarewritewatch.cpp
+++ b/src/gc/softwarewritewatch.cpp
@@ -3,10 +3,9 @@
// See the LICENSE file in the project root for more information.
#include "common.h"
-#include "softwarewritewatch.h"
-
#include "gcenv.h"
#include "env/gcenv.os.h"
+#include "softwarewritewatch.h"
#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
#ifndef DACCESS_COMPILE
@@ -15,8 +14,8 @@ static_assert((static_cast<size_t>(1) << SOFTWARE_WRITE_WATCH_AddressToTableByte
extern "C"
{
- uint8_t *g_sw_ww_table = nullptr;
- bool g_sw_ww_enabled_for_gc_heap = false;
+ uint8_t *g_gc_sw_ww_table = nullptr;
+ bool g_gc_sw_ww_enabled_for_gc_heap = false;
}
void SoftwareWriteWatch::StaticClose()
@@ -26,8 +25,8 @@ void SoftwareWriteWatch::StaticClose()
return;
}
- g_sw_ww_enabled_for_gc_heap = false;
- g_sw_ww_table = nullptr;
+ g_gc_sw_ww_enabled_for_gc_heap = false;
+ g_gc_sw_ww_table = nullptr;
}
bool SoftwareWriteWatch::GetDirtyFromBlock(
diff --git a/src/gc/softwarewritewatch.h b/src/gc/softwarewritewatch.h
index 3c8491cecb..0e6e6c8191 100644
--- a/src/gc/softwarewritewatch.h
+++ b/src/gc/softwarewritewatch.h
@@ -5,25 +5,20 @@
#ifndef __SOFTWARE_WRITE_WATCH_H__
#define __SOFTWARE_WRITE_WATCH_H__
+#include "gcinterface.h"
+#include "gc.h"
+
#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
#ifndef DACCESS_COMPILE
-extern void SwitchToWriteWatchBarrier(bool isRuntimeSuspended);
-extern void SwitchToNonWriteWatchBarrier(bool isRuntimeSuspended);
-
-#define SOFTWARE_WRITE_WATCH_AddressToTableByteIndexShift 0xc
-
extern "C"
{
// Table containing the dirty state. This table is translated to exclude the lowest address it represents, see
// TranslateTableToExcludeHeapStartAddress.
- extern uint8_t *g_sw_ww_table;
+ extern uint8_t *g_gc_sw_ww_table;
// Write watch may be disabled when it is not needed (between GCs for instance). This indicates whether it is enabled.
- extern bool g_sw_ww_enabled_for_gc_heap;
-
- extern uint8_t *g_lowest_address; // start address of the GC heap
- extern uint8_t *g_highest_address; // end address of the GC heap
+ extern bool g_gc_sw_ww_enabled_for_gc_heap;
}
class SoftwareWriteWatch
@@ -116,7 +111,7 @@ inline void SoftwareWriteWatch::VerifyMemoryRegion(
inline uint8_t *SoftwareWriteWatch::GetTable()
{
- return g_sw_ww_table;
+ return g_gc_sw_ww_table;
}
inline uint8_t *SoftwareWriteWatch::GetUntranslatedTable()
@@ -163,7 +158,7 @@ inline void SoftwareWriteWatch::SetUntranslatedTable(uint8_t *untranslatedTable,
assert(ALIGN_DOWN(untranslatedTable, sizeof(size_t)) == untranslatedTable);
assert(heapStartAddress != nullptr);
- g_sw_ww_table = TranslateTableToExcludeHeapStartAddress(untranslatedTable, heapStartAddress);
+ g_gc_sw_ww_table = TranslateTableToExcludeHeapStartAddress(untranslatedTable, heapStartAddress);
}
inline void SoftwareWriteWatch::SetResizedUntranslatedTable(
@@ -194,7 +189,7 @@ inline void SoftwareWriteWatch::SetResizedUntranslatedTable(
inline bool SoftwareWriteWatch::IsEnabledForGCHeap()
{
- return g_sw_ww_enabled_for_gc_heap;
+ return g_gc_sw_ww_enabled_for_gc_heap;
}
inline void SoftwareWriteWatch::EnableForGCHeap()
@@ -204,9 +199,13 @@ inline void SoftwareWriteWatch::EnableForGCHeap()
VerifyCreated();
assert(!IsEnabledForGCHeap());
+ g_gc_sw_ww_enabled_for_gc_heap = true;
- g_sw_ww_enabled_for_gc_heap = true;
- SwitchToWriteWatchBarrier(true);
+ WriteBarrierParameters args = {};
+ args.operation = WriteBarrierOp::SwitchToWriteWatch;
+ args.write_watch_table = g_gc_sw_ww_table;
+ args.is_runtime_suspended = true;
+ GCToEEInterface::StompWriteBarrier(&args);
}
inline void SoftwareWriteWatch::DisableForGCHeap()
@@ -216,19 +215,22 @@ inline void SoftwareWriteWatch::DisableForGCHeap()
VerifyCreated();
assert(IsEnabledForGCHeap());
+ g_gc_sw_ww_enabled_for_gc_heap = false;
- g_sw_ww_enabled_for_gc_heap = false;
- SwitchToNonWriteWatchBarrier(true);
+ WriteBarrierParameters args = {};
+ args.operation = WriteBarrierOp::SwitchToNonWriteWatch;
+ args.is_runtime_suspended = true;
+ GCToEEInterface::StompWriteBarrier(&args);
}
inline void *SoftwareWriteWatch::GetHeapStartAddress()
{
- return g_lowest_address;
+ return g_gc_lowest_address;
}
inline void *SoftwareWriteWatch::GetHeapEndAddress()
{
- return g_highest_address;
+ return g_gc_highest_address;
}
inline size_t SoftwareWriteWatch::GetTableByteIndex(void *address)
diff --git a/src/gc/unix/CMakeLists.txt b/src/gc/unix/CMakeLists.txt
new file mode 100644
index 0000000000..ef66abf32a
--- /dev/null
+++ b/src/gc/unix/CMakeLists.txt
@@ -0,0 +1,10 @@
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+add_compile_options(-fPIC)
+include_directories("../env")
+
+include(configure.cmake)
+
+set(GC_PAL_SOURCES
+ gcenv.unix.cpp)
+
+add_library(gc_unix STATIC ${GC_PAL_SOURCES} ${VERSION_FILE_PATH})
diff --git a/src/gc/unix/config.h.in b/src/gc/unix/config.h.in
new file mode 100644
index 0000000000..7578c74c05
--- /dev/null
+++ b/src/gc/unix/config.h.in
@@ -0,0 +1,14 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#ifndef __CONFIG_H__
+#define __CONFIG_H__
+
+#cmakedefine01 HAVE_SYS_TIME_H
+#cmakedefine01 HAVE_SYS_MMAN_H
+#cmakedefine01 HAVE_PTHREAD_THREADID_NP
+#cmakedefine01 HAVE_PTHREAD_GETTHREADID_NP
+#cmakedefine01 HAVE_SCHED_GETCPU
+
+#endif // __CONFIG_H__ \ No newline at end of file
diff --git a/src/gc/unix/configure.cmake b/src/gc/unix/configure.cmake
new file mode 100644
index 0000000000..6e1e8fe27d
--- /dev/null
+++ b/src/gc/unix/configure.cmake
@@ -0,0 +1,40 @@
+check_include_files(sys/time.h HAVE_SYS_TIME_H)
+check_include_files(sys/mman.h HAVE_SYS_MMAN_H)
+check_cxx_source_compiles("
+ #include <pthread.h>
+ #include <stdint.h>
+
+ int main()
+ {
+ uint64_t tid;
+ pthread_threadid_np(pthread_self(), &tid);
+ return (int)tid;
+ }
+ " HAVE_PTHREAD_THREADID_NP)
+
+check_cxx_source_compiles("
+ #include <pthread.h>
+ #include <stdint.h>
+
+ int main()
+ {
+ return (int)pthread_getthreadid_np();
+ }
+ " HAVE_PTHREAD_GETTHREADID_NP)
+
+check_cxx_source_runs("
+ #include <sched.h>
+
+ int main()
+ {
+ int result = sched_getcpu();
+ if (result == -1)
+ {
+ return 1;
+ }
+
+ return 0;
+ }
+ " HAVE_SCHED_GETCPU)
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) \ No newline at end of file
diff --git a/src/gc/unix/gcenv.unix.cpp b/src/gc/unix/gcenv.unix.cpp
new file mode 100644
index 0000000000..34a45b3cc1
--- /dev/null
+++ b/src/gc/unix/gcenv.unix.cpp
@@ -0,0 +1,627 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#include <cstdint>
+#include <cstddef>
+#include <cassert>
+#include <memory>
+
+// The CoreCLR PAL defines _POSIX_C_SOURCE to avoid calling non-posix pthread functions.
+// This isn't something we want, because we're totally fine using non-posix functions.
+#if defined(__APPLE__)
+ #define _DARWIN_C_SOURCE
+#endif // definfed(__APPLE__)
+
+#include <pthread.h>
+#include <signal.h>
+#include "config.h"
+
+// clang typedefs uint64_t to be unsigned long long, which clashes with
+// PAL/MSVC's unsigned long, causing linker errors. This ugly hack
+// will go away once the GC doesn't depend on PAL headers.
+typedef unsigned long uint64_t_hack;
+#define uint64_t uint64_t_hack
+static_assert(sizeof(uint64_t) == 8, "unsigned long isn't 8 bytes");
+
+#ifndef __out_z
+#define __out_z
+#endif // __out_z
+
+#include "gcenv.structs.h"
+#include "gcenv.base.h"
+#include "gcenv.os.h"
+
+#ifndef FEATURE_STANDALONE_GC
+ #error "A GC-private implementation of GCToOSInterface should only be used with FEATURE_STANDALONE_GC"
+#endif // FEATURE_STANDALONE_GC
+
+#ifdef HAVE_SYS_TIME_H
+ #include <sys/time.h>
+#else
+ #error "sys/time.h required by GC PAL for the time being"
+#endif // HAVE_SYS_TIME_
+
+#ifdef HAVE_SYS_MMAN_H
+ #include <sys/mman.h>
+#else
+ #error "sys/mman.h required by GC PAL"
+#endif // HAVE_SYS_MMAN_H
+
+#ifdef __linux__
+ #include <sys/syscall.h>
+#endif // __linux__
+
+#include <time.h> // nanosleep
+#include <sched.h> // sched_yield
+#include <errno.h>
+#include <unistd.h> // sysconf
+
+// The number of milliseconds in a second.
+static const int tccSecondsToMilliSeconds = 1000;
+
+// The number of microseconds in a second.
+static const int tccSecondsToMicroSeconds = 1000000;
+
+// The number of microseconds in a millisecond.
+static const int tccMilliSecondsToMicroSeconds = 1000;
+
+// The number of nanoseconds in a millisecond.
+static const int tccMilliSecondsToNanoSeconds = 1000000;
+
+// The cachced number of logical CPUs observed.
+static uint32_t g_logicalCpuCount = 0;
+
+// Helper memory page used by the FlushProcessWriteBuffers
+static uint8_t g_helperPage[OS_PAGE_SIZE] __attribute__((aligned(OS_PAGE_SIZE)));
+
+// Mutex to make the FlushProcessWriteBuffersMutex thread safe
+static pthread_mutex_t g_flushProcessWriteBuffersMutex;
+
+// Initialize the interface implementation
+// Return:
+// true if it has succeeded, false if it has failed
+bool GCToOSInterface::Initialize()
+{
+ // Calculate and cache the number of processors on this machine
+ int cpuCount = sysconf(_SC_NPROCESSORS_ONLN);
+ if (cpuCount == -1)
+ {
+ return false;
+ }
+
+ g_logicalCpuCount = cpuCount;
+
+ // Verify that the s_helperPage is really aligned to the g_SystemInfo.dwPageSize
+ assert((((size_t)g_helperPage) & (OS_PAGE_SIZE - 1)) == 0);
+
+ // Locking the page ensures that it stays in memory during the two mprotect
+ // calls in the FlushProcessWriteBuffers below. If the page was unmapped between
+ // those calls, they would not have the expected effect of generating IPI.
+ int status = mlock(g_helperPage, OS_PAGE_SIZE);
+
+ if (status != 0)
+ {
+ return false;
+ }
+
+ status = pthread_mutex_init(&g_flushProcessWriteBuffersMutex, NULL);
+ if (status != 0)
+ {
+ munlock(g_helperPage, OS_PAGE_SIZE);
+ return false;
+ }
+
+ return true;
+}
+
+// Shutdown the interface implementation
+void GCToOSInterface::Shutdown()
+{
+ int ret = munlock(g_helperPage, OS_PAGE_SIZE);
+ assert(ret == 0);
+ ret = pthread_mutex_destroy(&g_flushProcessWriteBuffersMutex);
+ assert(ret == 0);
+}
+
+// Get numeric id of the current thread if possible on the
+// current platform. It is indended for logging purposes only.
+// Return:
+// Numeric id of the current thread, as best we can retrieve it.
+uint64_t GCToOSInterface::GetCurrentThreadIdForLogging()
+{
+#if defined(__linux__)
+ return (uint64_t)syscall(SYS_gettid);
+#elif HAVE_PTHREAD_GETTHREADID_NP
+ return (uint64_t)pthread_getthreadid_np();
+#elif HAVE_PTHREAD_THREADID_NP
+ unsigned long long tid;
+ pthread_threadid_np(pthread_self(), &tid);
+ return (uint64_t)tid;
+#else
+ // Fallback in case we don't know how to get integer thread id on the current platform
+ return (uint64_t)pthread_self();
+#endif
+}
+
+// Get the process ID of the process.
+uint32_t GCToOSInterface::GetCurrentProcessId()
+{
+ return getpid();
+}
+
+// Set ideal affinity for the current thread
+// Parameters:
+// affinity - ideal processor affinity for the thread
+// Return:
+// true if it has succeeded, false if it has failed
+bool GCToOSInterface::SetCurrentThreadIdealAffinity(GCThreadAffinity* affinity)
+{
+ // TODO(segilles)
+ return false;
+}
+
+// Get the number of the current processor
+uint32_t GCToOSInterface::GetCurrentProcessorNumber()
+{
+#if HAVE_SCHED_GETCPU
+ int processorNumber = sched_getcpu();
+ assert(processorNumber != -1);
+ return processorNumber;
+#else
+ return 0;
+#endif
+}
+
+// Check if the OS supports getting current processor number
+bool GCToOSInterface::CanGetCurrentProcessorNumber()
+{
+ return HAVE_SCHED_GETCPU;
+}
+
+// Flush write buffers of processors that are executing threads of the current process
+void GCToOSInterface::FlushProcessWriteBuffers()
+{
+ int status = pthread_mutex_lock(&g_flushProcessWriteBuffersMutex);
+ assert(status == 0 && "Failed to lock the flushProcessWriteBuffersMutex lock");
+
+ // Changing a helper memory page protection from read / write to no access
+ // causes the OS to issue IPI to flush TLBs on all processors. This also
+ // results in flushing the processor buffers.
+ status = mprotect(g_helperPage, OS_PAGE_SIZE, PROT_READ | PROT_WRITE);
+ assert(status == 0 && "Failed to change helper page protection to read / write");
+
+ // Ensure that the page is dirty before we change the protection so that
+ // we prevent the OS from skipping the global TLB flush.
+ __sync_add_and_fetch((size_t*)g_helperPage, 1);
+
+ status = mprotect(g_helperPage, OS_PAGE_SIZE, PROT_NONE);
+ assert(status == 0 && "Failed to change helper page protection to no access");
+
+ status = pthread_mutex_unlock(&g_flushProcessWriteBuffersMutex);
+ assert(status == 0 && "Failed to unlock the flushProcessWriteBuffersMutex lock");
+}
+
+// Break into a debugger. Uses a compiler intrinsic if one is available,
+// otherwise raises a SIGTRAP.
+void GCToOSInterface::DebugBreak()
+{
+ // __has_builtin is only defined by clang. GCC doesn't have a debug
+ // trap intrinsic anyway.
+#ifndef __has_builtin
+ #define __has_builtin(x) 0
+#endif // __has_builtin
+
+#if __has_builtin(__builtin_debugtrap)
+ __builtin_debugtrap();
+#else
+ raise(SIGTRAP);
+#endif
+}
+
+// Get number of logical processors
+uint32_t GCToOSInterface::GetLogicalCpuCount()
+{
+ return g_logicalCpuCount;
+}
+
+// Causes the calling thread to sleep for the specified number of milliseconds
+// Parameters:
+// sleepMSec - time to sleep before switching to another thread
+void GCToOSInterface::Sleep(uint32_t sleepMSec)
+{
+ if (sleepMSec == 0)
+ {
+ return;
+ }
+
+ timespec requested;
+ requested.tv_sec = sleepMSec / tccSecondsToMilliSeconds;
+ requested.tv_nsec = (sleepMSec - requested.tv_sec * tccSecondsToMilliSeconds) * tccMilliSecondsToNanoSeconds;
+
+ timespec remaining;
+ while (nanosleep(&requested, &remaining) == EINTR)
+ {
+ requested = remaining;
+ }
+}
+
+// Causes the calling thread to yield execution to another thread that is ready to run on the current processor.
+// Parameters:
+// switchCount - number of times the YieldThread was called in a loop
+void GCToOSInterface::YieldThread(uint32_t switchCount)
+{
+ int ret = sched_yield();
+
+ // sched_yield never fails on Linux, unclear about other OSes
+ assert(ret == 0);
+}
+
+// Reserve virtual memory range.
+// Parameters:
+// size - size of the virtual memory range
+// alignment - requested memory alignment, 0 means no specific alignment requested
+// flags - flags to control special settings like write watching
+// Return:
+// Starting virtual address of the reserved range
+void* GCToOSInterface::VirtualReserve(size_t size, size_t alignment, uint32_t flags)
+{
+ assert(!(flags & VirtualReserveFlags::WriteWatch) && "WriteWatch not supported on Unix");
+ if (alignment == 0)
+ {
+ alignment = OS_PAGE_SIZE;
+ }
+
+ size_t alignedSize = size + (alignment - OS_PAGE_SIZE);
+ void * pRetVal = mmap(nullptr, alignedSize, PROT_NONE, MAP_ANON | MAP_PRIVATE, -1, 0);
+
+ if (pRetVal != NULL)
+ {
+ void * pAlignedRetVal = (void *)(((size_t)pRetVal + (alignment - 1)) & ~(alignment - 1));
+ size_t startPadding = (size_t)pAlignedRetVal - (size_t)pRetVal;
+ if (startPadding != 0)
+ {
+ int ret = munmap(pRetVal, startPadding);
+ assert(ret == 0);
+ }
+
+ size_t endPadding = alignedSize - (startPadding + size);
+ if (endPadding != 0)
+ {
+ int ret = munmap((void *)((size_t)pAlignedRetVal + size), endPadding);
+ assert(ret == 0);
+ }
+
+ pRetVal = pAlignedRetVal;
+ }
+
+ return pRetVal;
+}
+
+// Release virtual memory range previously reserved using VirtualReserve
+// Parameters:
+// address - starting virtual address
+// size - size of the virtual memory range
+// Return:
+// true if it has succeeded, false if it has failed
+bool GCToOSInterface::VirtualRelease(void* address, size_t size)
+{
+ int ret = munmap(address, size);
+
+ return (ret == 0);
+}
+
+// Commit virtual memory range. It must be part of a range reserved using VirtualReserve.
+// Parameters:
+// address - starting virtual address
+// size - size of the virtual memory range
+// Return:
+// true if it has succeeded, false if it has failed
+bool GCToOSInterface::VirtualCommit(void* address, size_t size)
+{
+ return mprotect(address, size, PROT_WRITE | PROT_READ) == 0;
+}
+
+// Decomit virtual memory range.
+// Parameters:
+// address - starting virtual address
+// size - size of the virtual memory range
+// Return:
+// true if it has succeeded, false if it has failed
+bool GCToOSInterface::VirtualDecommit(void* address, size_t size)
+{
+ return mprotect(address, size, PROT_NONE) == 0;
+}
+
+// Reset virtual memory range. Indicates that data in the memory range specified by address and size is no
+// longer of interest, but it should not be decommitted.
+// Parameters:
+// address - starting virtual address
+// size - size of the virtual memory range
+// unlock - true if the memory range should also be unlocked
+// Return:
+// true if it has succeeded, false if it has failed
+bool GCToOSInterface::VirtualReset(void * address, size_t size, bool unlock)
+{
+ // TODO(CoreCLR#1259) pipe to madvise?
+ return false;
+}
+
+// Check if the OS supports write watching
+bool GCToOSInterface::SupportsWriteWatch()
+{
+ return false;
+}
+
+// Reset the write tracking state for the specified virtual memory range.
+// Parameters:
+// address - starting virtual address
+// size - size of the virtual memory range
+void GCToOSInterface::ResetWriteWatch(void* address, size_t size)
+{
+ assert(!"should never call ResetWriteWatch on Unix");
+}
+
+// Retrieve addresses of the pages that are written to in a region of virtual memory
+// Parameters:
+// resetState - true indicates to reset the write tracking state
+// address - starting virtual address
+// size - size of the virtual memory range
+// pageAddresses - buffer that receives an array of page addresses in the memory region
+// pageAddressesCount - on input, size of the lpAddresses array, in array elements
+// on output, the number of page addresses that are returned in the array.
+// Return:
+// true if it has succeeded, false if it has failed
+bool GCToOSInterface::GetWriteWatch(bool resetState, void* address, size_t size, void** pageAddresses, uintptr_t* pageAddressesCount)
+{
+ assert(!"should never call GetWriteWatch on Unix");
+ return false;
+}
+
+// Get size of the largest cache on the processor die
+// Parameters:
+// trueSize - true to return true cache size, false to return scaled up size based on
+// the processor architecture
+// Return:
+// Size of the cache
+size_t GCToOSInterface::GetLargestOnDieCacheSize(bool trueSize)
+{
+ // TODO(segilles) processor detection
+ return 0;
+}
+
+// Get affinity mask of the current process
+// Parameters:
+// processMask - affinity mask for the specified process
+// systemMask - affinity mask for the system
+// Return:
+// true if it has succeeded, false if it has failed
+// Remarks:
+// A process affinity mask is a bit vector in which each bit represents the processors that
+// a process is allowed to run on. A system affinity mask is a bit vector in which each bit
+// represents the processors that are configured into a system.
+// A process affinity mask is a subset of the system affinity mask. A process is only allowed
+// to run on the processors configured into a system. Therefore, the process affinity mask cannot
+// specify a 1 bit for a processor when the system affinity mask specifies a 0 bit for that processor.
+bool GCToOSInterface::GetCurrentProcessAffinityMask(uintptr_t* processMask, uintptr_t* systemMask)
+{
+ // TODO(segilles) processor detection
+ return false;
+}
+
+// Get number of processors assigned to the current process
+// Return:
+// The number of processors
+uint32_t GCToOSInterface::GetCurrentProcessCpuCount()
+{
+ return g_logicalCpuCount;
+}
+
+// Return the size of the user-mode portion of the virtual address space of this process.
+// Return:
+// non zero if it has succeeded, 0 if it has failed
+size_t GCToOSInterface::GetVirtualMemoryLimit()
+{
+#ifdef BIT64
+ // There is no API to get the total virtual address space size on
+ // Unix, so we use a constant value representing 128TB, which is
+ // the approximate size of total user virtual address space on
+ // the currently supported Unix systems.
+ static const uint64_t _128TB = (1ull << 47);
+ return _128TB;
+#else
+ return (size_t)-1;
+#endif
+}
+
+// Get the physical memory that this process can use.
+// Return:
+// non zero if it has succeeded, 0 if it has failed
+// Remarks:
+// If a process runs with a restricted memory limit, it returns the limit. If there's no limit
+// specified, it returns amount of actual physical memory.
+uint64_t GCToOSInterface::GetPhysicalMemoryLimit()
+{
+ long pages = sysconf(_SC_PHYS_PAGES);
+ if (pages == -1)
+ {
+ return 0;
+ }
+
+ long pageSize = sysconf(_SC_PAGE_SIZE);
+ if (pageSize == -1)
+ {
+ return 0;
+ }
+
+ return pages * pageSize;
+}
+
+// Get memory status
+// Parameters:
+// memory_load - A number between 0 and 100 that specifies the approximate percentage of physical memory
+// that is in use (0 indicates no memory use and 100 indicates full memory use).
+// available_physical - The amount of physical memory currently available, in bytes.
+// available_page_file - The maximum amount of memory the current process can commit, in bytes.
+void GCToOSInterface::GetMemoryStatus(uint32_t* memory_load, uint64_t* available_physical, uint64_t* available_page_file)
+{
+ if (memory_load != nullptr || available_physical != nullptr)
+ {
+ uint64_t total = GetPhysicalMemoryLimit();
+
+ uint64_t available = 0;
+ uint32_t load = 0;
+
+ // Get the physical memory in use - from it, we can get the physical memory available.
+ // We do this only when we have the total physical memory available.
+ if (total > 0)
+ {
+ available = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE);
+ uint64_t used = total - available;
+ load = (uint32_t)((used * 100) / total);
+ }
+
+ if (memory_load != nullptr)
+ *memory_load = load;
+ if (available_physical != nullptr)
+ *available_physical = available;
+ }
+
+ if (available_page_file != nullptr)
+ *available_page_file = 0;
+}
+
+// Get a high precision performance counter
+// Return:
+// The counter value
+int64_t GCToOSInterface::QueryPerformanceCounter()
+{
+ // TODO: This is not a particularly efficient implementation - we certainly could
+ // do much more specific platform-dependent versions if we find that this method
+ // runs hot. However, most likely it does not.
+ struct timeval tv;
+ if (gettimeofday(&tv, NULL) == -1)
+ {
+ assert(!"gettimeofday() failed");
+ // TODO (segilles) unconditional asserts
+ return 0;
+ }
+ return (int64_t) tv.tv_sec * (int64_t) tccSecondsToMicroSeconds + (int64_t) tv.tv_usec;
+}
+
+// Get a frequency of the high precision performance counter
+// Return:
+// The counter frequency
+int64_t GCToOSInterface::QueryPerformanceFrequency()
+{
+ // The counter frequency of gettimeofday is in microseconds.
+ return tccSecondsToMicroSeconds;
+}
+
+// Get a time stamp with a low precision
+// Return:
+// Time stamp in milliseconds
+uint32_t GCToOSInterface::GetLowPrecisionTimeStamp()
+{
+ // TODO(segilles) this is pretty naive, we can do better
+ uint64_t retval = 0;
+ struct timeval tv;
+ if (gettimeofday(&tv, NULL) == 0)
+ {
+ retval = (tv.tv_sec * tccSecondsToMilliSeconds) + (tv.tv_usec / tccMilliSecondsToMicroSeconds);
+ }
+ else
+ {
+ assert(!"gettimeofday() failed\n");
+ }
+
+ return retval;
+}
+
+// Parameters of the GC thread stub
+struct GCThreadStubParam
+{
+ GCThreadFunction GCThreadFunction;
+ void* GCThreadParam;
+};
+
+// GC thread stub to convert GC thread function to an OS specific thread function
+static void* GCThreadStub(void* param)
+{
+ GCThreadStubParam *stubParam = (GCThreadStubParam*)param;
+ GCThreadFunction function = stubParam->GCThreadFunction;
+ void* threadParam = stubParam->GCThreadParam;
+
+ delete stubParam;
+
+ function(threadParam);
+
+ return NULL;
+}
+
+// Create a new thread for GC use
+// Parameters:
+// function - the function to be executed by the thread
+// param - parameters of the thread
+// affinity - processor affinity of the thread
+// Return:
+// true if it has succeeded, false if it has failed
+bool GCToOSInterface::CreateThread(GCThreadFunction function, void* param, GCThreadAffinity* affinity)
+{
+ std::unique_ptr<GCThreadStubParam> stubParam(new (std::nothrow) GCThreadStubParam());
+ if (!stubParam)
+ {
+ return false;
+ }
+
+ stubParam->GCThreadFunction = function;
+ stubParam->GCThreadParam = param;
+
+ pthread_attr_t attrs;
+
+ int st = pthread_attr_init(&attrs);
+ assert(st == 0);
+
+ // Create the thread as detached, that means not joinable
+ st = pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);
+ assert(st == 0);
+
+ pthread_t threadId;
+ st = pthread_create(&threadId, &attrs, GCThreadStub, stubParam.get());
+
+ if (st == 0)
+ {
+ stubParam.release();
+ }
+
+ int st2 = pthread_attr_destroy(&attrs);
+ assert(st2 == 0);
+
+ return (st == 0);
+}
+
+// Initialize the critical section
+void CLRCriticalSection::Initialize()
+{
+ int st = pthread_mutex_init(&m_cs.mutex, NULL);
+ assert(st == 0);
+}
+
+// Destroy the critical section
+void CLRCriticalSection::Destroy()
+{
+ int st = pthread_mutex_destroy(&m_cs.mutex);
+ assert(st == 0);
+}
+
+// Enter the critical section. Blocks until the section can be entered.
+void CLRCriticalSection::Enter()
+{
+ pthread_mutex_lock(&m_cs.mutex);
+}
+
+// Leave the critical section
+void CLRCriticalSection::Leave()
+{
+ pthread_mutex_unlock(&m_cs.mutex);
+}
diff --git a/src/gc/gcenv.windows.cpp b/src/gc/windows/gcenv.windows.cpp
index a636478245..a636478245 100644
--- a/src/gc/gcenv.windows.cpp
+++ b/src/gc/windows/gcenv.windows.cpp
diff --git a/src/gcdump/gcdump.settings.targets b/src/gcdump/gcdump.settings.targets
deleted file mode 100644
index 9a44330a0d..0000000000
--- a/src/gcdump/gcdump.settings.targets
+++ /dev/null
@@ -1,24 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <UserIncludes>$(UserIncludes);
- .</UserIncludes>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <ClAdditionalOptions Condition="'$(USE_ICECAP)' != ''">$(ClAdditionalOptions) -D_ICECAP</ClAdditionalOptions>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="..\GCDump.cpp" />
- <CppCompile Include="..\i386\GCDumpX86.cpp" Condition="'$(RealBuildArchitecture)' == 'x86'" />
- <CppCompile Include="..\rotor_x86\GCDumpX86.cpp" Condition="'$(_BuildArch)' == 'rotor_x86'" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/gcinfo/DIRS.proj b/src/gcinfo/DIRS.proj
deleted file mode 100644
index c3e5e9f7a4..0000000000
--- a/src/gcinfo/DIRS.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="lib\GCInfo.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/gcinfo/crossgen/gcinfo_crossgen.nativeproj b/src/gcinfo/crossgen/gcinfo_crossgen.nativeproj
deleted file mode 100644
index ae6db25b77..0000000000
--- a/src/gcinfo/crossgen/gcinfo_crossgen.nativeproj
+++ /dev/null
@@ -1,9 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>gcinfo_crossgen</OutputName>
- </PropertyGroup>
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\gcinfo\gcinfo.settings.targets" />
-</Project>
diff --git a/src/gcinfo/gcinfo.settings.targets b/src/gcinfo/gcinfo.settings.targets
deleted file mode 100644
index 5c241b353a..0000000000
--- a/src/gcinfo/gcinfo.settings.targets
+++ /dev/null
@@ -1,21 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!-- Import the CLR's settings -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!-- Leaf project properties -->
- <PropertyGroup>
- <UserIncludes>.;
- ..\vm;
- $(UserIncludes)</UserIncludes>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- </PropertyGroup>
-
- <!-- Leaf Project Items -->
- <ItemGroup>
- <CppCompile Include="..\ArrayList.cpp" />
- <CppCompile Include="..\GCInfoEncoder.cpp" />
- </ItemGroup>
-
- <!-- Import the targets -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/gcinfo/lib/GCInfo.nativeproj b/src/gcinfo/lib/GCInfo.nativeproj
deleted file mode 100644
index cc27db5e91..0000000000
--- a/src/gcinfo/lib/GCInfo.nativeproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>GCInfo</OutputName>
- </PropertyGroup>
- <Import Project="..\gcinfo.settings.targets" />
-</Project>
diff --git a/src/ilasm/MscorpeSxS.cpp b/src/ilasm/MscorpeSxS.cpp
deleted file mode 100644
index b3b94f466b..0000000000
--- a/src/ilasm/MscorpeSxS.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-// File: MscorpeSxS.cpp
-//
-
-//
-// This file defines a wrapper for SxS version of mscorpe.dll (dynamically loaded via shim).
-//
-#include "ilasmpch.h"
-
-#include "MscorpeSxS.h"
-
-#include <LegacyActivationShim.h>
-
-// Loads mscorpe.dll (uses shim)
-HRESULT
-LoadMscorpeDll(HMODULE * phModule)
-{
- // Load SxS version of mscorpe.dll (i.e. mscorpehost.dll) and initialize it
- return LegacyActivationShim::LoadLibraryShim(L"mscorpe.dll", NULL, NULL, phModule);
-}
diff --git a/src/ilasm/MscorpeSxS.h b/src/ilasm/MscorpeSxS.h
deleted file mode 100644
index 8cee9c49cd..0000000000
--- a/src/ilasm/MscorpeSxS.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-// File: MscorpeSxS.h
-//
-
-//
-// This file defines a wrapper for SxS version of mscorpe.dll (dynamically loaded via shim).
-//
-
-#pragma once
-
-#include <MscorpeSxSWrapper.h>
-
-// Loads mscorpe.dll (uses shim)
-HRESULT LoadMscorpeDll(HMODULE * phModule);
-
-// Wrapper for mscorpe.dll calls
-typedef MscorpeSxSWrapper<LoadMscorpeDll> MscorpeSxS;
diff --git a/src/ilasm/assem.cpp b/src/ilasm/assem.cpp
index 8c56bdc047..18247621f9 100644
--- a/src/ilasm/assem.cpp
+++ b/src/ilasm/assem.cpp
@@ -15,15 +15,11 @@
#define DECLARE_DATA
#include "assembler.h"
-#ifdef FEATURE_CORECLR
#ifdef FEATURE_PAL
#include "coreclrloader.h"
CoreCLRLoader *g_loader;
#endif // FEATURE_PAL
MetaDataGetDispenserFunc metaDataGetDispenser;
-#else
-#include "MscorpeSxS.h"
-#endif // FEATURE_CORECLR
void indexKeywords(Indx* indx); // defined in asmparse.y
@@ -197,11 +193,9 @@ Assembler::~Assembler()
if (m_pCeeFileGen != NULL) {
if (m_pCeeFile)
m_pCeeFileGen->DestroyCeeFile(&m_pCeeFile);
-#ifdef FEATURE_CORECLR
+
DestroyICeeFileGen(&m_pCeeFileGen);
-#else
- MscorpeSxS::DestroyICeeFileGen(&m_pCeeFileGen);
-#endif
+
m_pCeeFileGen = NULL;
}
@@ -276,18 +270,14 @@ BOOL Assembler::Init()
if (m_pCeeFileGen != NULL) {
if (m_pCeeFile)
m_pCeeFileGen->DestroyCeeFile(&m_pCeeFile);
-#ifdef FEATURE_CORECLR
+
DestroyICeeFileGen(&m_pCeeFileGen);
-#else
- MscorpeSxS::DestroyICeeFileGen(&m_pCeeFileGen);
-#endif
+
m_pCeeFileGen = NULL;
}
-#ifdef FEATURE_CORECLR
+
if (FAILED(CreateICeeFileGen(&m_pCeeFileGen))) return FALSE;
-#else
- if (FAILED(MscorpeSxS::CreateICeeFileGen(&m_pCeeFileGen))) return FALSE;
-#endif
+
if (FAILED(m_pCeeFileGen->CreateCeeFileEx(&m_pCeeFile,(ULONG)m_dwCeeFileFlags))) return FALSE;
if (FAILED(m_pCeeFileGen->GetSectionCreate(m_pCeeFile, ".il", sdReadOnly, &m_pILSection))) return FALSE;
diff --git a/src/ilasm/assembler.h b/src/ilasm/assembler.h
index cbb591ac1c..1c211bc3c5 100644
--- a/src/ilasm/assembler.h
+++ b/src/ilasm/assembler.h
@@ -56,7 +56,7 @@
extern CoreCLRLoader *g_loader;
extern char *g_pszExeFile;
#endif
-typedef int(*MetaDataGetDispenserFunc) (
+typedef int(STDAPICALLTYPE *MetaDataGetDispenserFunc) (
REFCLSID rclsid, // The class to desired.
REFIID riid, // Interface wanted on class factory.
LPVOID FAR *ppv); // Return interface pointer here.
diff --git a/src/ildasm/Litening.ico b/src/ildasm/Litening.ico
deleted file mode 100644
index 7bdaa4f1e9..0000000000
--- a/src/ildasm/Litening.ico
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/class.bmp b/src/ildasm/class.bmp
deleted file mode 100644
index 1574b641df..0000000000
--- a/src/ildasm/class.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classa.bmp b/src/ildasm/classa.bmp
deleted file mode 100644
index d0467c45e3..0000000000
--- a/src/ildasm/classa.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classag.bmp b/src/ildasm/classag.bmp
deleted file mode 100644
index 72793ce02f..0000000000
--- a/src/ildasm/classag.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classe.bmp b/src/ildasm/classe.bmp
deleted file mode 100644
index a5f641c915..0000000000
--- a/src/ildasm/classe.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classeg.bmp b/src/ildasm/classeg.bmp
deleted file mode 100644
index 3aeded1ed2..0000000000
--- a/src/ildasm/classeg.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classi.bmp b/src/ildasm/classi.bmp
deleted file mode 100644
index 74d64feb09..0000000000
--- a/src/ildasm/classi.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classig.bmp b/src/ildasm/classig.bmp
deleted file mode 100644
index 79b43144a9..0000000000
--- a/src/ildasm/classig.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classv.bmp b/src/ildasm/classv.bmp
deleted file mode 100644
index ecf345ac05..0000000000
--- a/src/ildasm/classv.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classvg.bmp b/src/ildasm/classvg.bmp
deleted file mode 100644
index a77f99b359..0000000000
--- a/src/ildasm/classvg.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/dasm.cpp b/src/ildasm/dasm.cpp
index 86ff5a8932..7b6bca926e 100644
--- a/src/ildasm/dasm.cpp
+++ b/src/ildasm/dasm.cpp
@@ -17,7 +17,6 @@
#include "dasmenum.hpp"
#include "dis.h"
-#include "dasmgui.h"
#include "resource.h"
#include "dasm_sz.h"
@@ -35,13 +34,6 @@
#include <corcompile.h>
#endif
-#ifndef FEATURE_CORECLR
-// Define also LegacyActivationShim::CoInitializeEE wrapper around CoInitializeEE
-#define LEGACY_ACTIVATION_SHIM_DEFINE_CoInitializeEE
-#include "LegacyActivationShim.h"
-#include "clrinternal.h"
-#endif
-
#ifdef FEATURE_PAL
#include "coreclrloader.h"
#include "resourcestring.h"
@@ -119,7 +111,6 @@ BOOL g_fHidePrivScope = TRUE;
BOOL g_fProject = FALSE; // if .winmd file, transform to .NET view
extern BOOL g_fQuoteAllNames; // declared in formatType.cpp, init to FALSE
-BOOL g_fShowProgressBar = TRUE;
BOOL g_fForwardDecl=FALSE;
char g_szAsmCodeIndent[MAX_MEMBER_LENGTH];
@@ -170,8 +161,6 @@ void DisplayFile(__in __nullterminated wchar_t* szFile,
__in_opt __nullterminated wchar_t* szObjFile,
strPassBackFn pDisplayString);
extern mdMethodDef g_tkEntryPoint; // integration with MetaInfo
-// Abort disassembly flag:
-BOOL g_fAbortDisassembly = FALSE;
DWORD DumpResourceToFile(__in __nullterminated WCHAR* wzFileName); // see DRES.CPP
@@ -319,12 +308,6 @@ extern CQuickBytes * g_szBuf_JUMPPT;
extern CQuickBytes * g_szBuf_UnquotedProperName;
extern CQuickBytes * g_szBuf_ProperName;
-#ifndef FEATURE_CORECLR
-// CLR internal hosting API
-ICLRRuntimeHostInternal *g_pCLRRuntimeHostInternal = NULL;
-#endif
-
-#ifdef FEATURE_CORECLR
#ifdef FEATURE_PAL
CoreCLRLoader *g_loader;
#endif
@@ -332,11 +315,9 @@ MetaDataGetDispenserFunc metaDataGetDispenser;
GetMetaDataInternalInterfaceFunc getMetaDataInternalInterface;
GetMetaDataInternalInterfaceFromPublicFunc getMetaDataInternalInterfaceFromPublic;
GetMetaDataPublicInterfaceFromInternalFunc getMetaDataPublicInterfaceFromInternal;
-#endif
BOOL Init()
{
-#ifdef FEATURE_CORECLR
#ifdef FEATURE_PAL
g_loader = CoreCLRLoader::Create(g_pszExeFile);
if (g_loader == NULL)
@@ -353,37 +334,7 @@ BOOL Init()
getMetaDataInternalInterfaceFromPublic = (GetMetaDataInternalInterfaceFromPublicFunc)GetMetaDataInternalInterfaceFromPublic;
getMetaDataPublicInterfaceFromInternal = (GetMetaDataPublicInterfaceFromInternalFunc)GetMetaDataPublicInterfaceFromInternal;
#endif // FEATURE_PAL
-#else // FEATURE_CORECLR
- if (FAILED(CoInitialize(NULL)))
- {
- return FALSE;
- }
-
- if (FAILED(LegacyActivationShim::CoInitializeCor(COINITCOR_DEFAULT)))
- {
- return FALSE;
- }
-
- if (FAILED(LegacyActivationShim::CoInitializeEE(COINITEE_DEFAULT)))
- {
- return FALSE;
- }
-
- ICLRRuntimeInfo *pCLRRuntimeInfo = NULL;
- if (FAILED(LegacyActivationShim::Util::GetCLRRuntimeInfo(&pCLRRuntimeInfo)))
- {
- return FALSE;
- }
-
- if (FAILED(pCLRRuntimeInfo->GetInterface(
- CLSID_CLRRuntimeHostInternal,
- IID_ICLRRuntimeHostInternal,
- (LPVOID *)&g_pCLRRuntimeHostInternal)))
- {
- return FALSE;
- }
-#endif // FEATURE_CORECLR
-
+
g_szBuf_KEYWORD = new CQuickBytes();
g_szBuf_COMMENT = new CQuickBytes();
g_szBuf_ERRORMSG = new CQuickBytes();
@@ -482,10 +433,6 @@ void Cleanup()
void Uninit()
{
-#ifndef FEATURE_CORECLR
- GUIAddOpcode(NULL,NULL);
-#endif
-
if (g_pPtrTags != NULL)
{
SDELETE(g_pPtrTags);
@@ -541,24 +488,12 @@ void Uninit()
SDELETE(g_szBuf_ProperName);
}
-#ifdef FEATURE_CORECLR
#ifdef FEATURE_PAL
if (g_loader != NULL)
{
g_loader->Finish();
}
#endif
-#else
- if (g_pCLRRuntimeHostInternal != NULL)
- {
- g_pCLRRuntimeHostInternal->Release();
- g_pCLRRuntimeHostInternal = NULL;
- }
-
- LegacyActivationShim::CoUninitializeEE(COUNINITEE_DEFAULT);
- LegacyActivationShim::CoUninitializeCor();
- CoUninitialize();
-#endif
} // Uninit
HRESULT IsClassRefInScope(mdTypeRef classref)
@@ -1695,17 +1630,10 @@ mdToken TypeRefToTypeDef(mdToken tk, IMDInternalImport *pIMDI, IMDInternalImport
IUnknown *pUnk;
if(FAILED(pIAMDI[0]->QueryInterface(IID_IUnknown, (void**)&pUnk))) goto AssignAndReturn;
-#ifdef FEATURE_CORECLR
if (FAILED(getMetaDataInternalInterfaceFromPublic(
pUnk,
IID_IMDInternalImport,
(LPVOID *)ppIMDInew)))
-#else
- if (FAILED(g_pCLRRuntimeHostInternal->GetMetaDataInternalInterfaceFromPublic(
- pUnk,
- IID_IMDInternalImport,
- (LPVOID *)ppIMDInew)))
-#endif
{
goto AssignAndReturn;
}
@@ -4650,7 +4578,7 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha
#if (0)
- if((!IsTdNested(dwClassAttrs))&&(!(g_Mode & MODE_GUI))) // don't dump namespaces in GUI mode!
+ if((!IsTdNested(dwClassAttrs)))
{
// take care of namespace, if any
if(strcmp(pszNamespace,g_szNamespace))
@@ -4905,11 +4833,6 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha
if(g_cl_enclosing[i] == cl)
{
DumpClass(g_cl_list[i],dwEntryPointToken,GUICookie,WhatToDumpOrig);
- if(g_fAbortDisassembly)
- {
- g_Mode = dwMode;
- return FALSE;
- }
fRegetClassLayout = TRUE;
}
}
@@ -4920,9 +4843,6 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha
if(WhatToDump & 4)
{
DumpMembers(cl, pszNamespace, pszClassName, dwClassAttrs, dwEntryPointToken,GUICookie);
-#ifndef FEATURE_CORECLR
- if(!ProgressStep()) g_fAbortDisassembly = TRUE;
-#endif
}
if(g_szAsmCodeIndent[0]) g_szAsmCodeIndent[strlen(g_szAsmCodeIndent)-2] = 0;
@@ -4931,10 +4851,7 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha
if(*pszNamespace != 0) szptr+=sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"%s.",ProperName(pszNamespace));
sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"%s%s", ProperName(pszClassName),COMMENT((char*)-1));
printLine(GUICookie,szString);
- if(!(g_Mode & MODE_GUI))
- {
- printLine(GUICookie,"");
- }
+ printLine(GUICookie,"");
g_tkVarOwner = tkVarOwner;
return TRUE;
}
@@ -4953,7 +4870,7 @@ void DumpGlobalMethods(DWORD dwEntryPointToken)
for (i = 0; g_pImport->EnumNext(&hEnumMethod, &FuncToken); i++)
{
- if ((i == 0)&&(!(g_Mode & MODE_GUI)))
+ if (i == 0)
{
printLine(g_pFile,"");
printLine(g_pFile,COMMENT("// ================== GLOBAL METHODS ========================="));
@@ -4961,14 +4878,6 @@ void DumpGlobalMethods(DWORD dwEntryPointToken)
}
if(DumpMethod(FuncToken, NULL, dwEntryPointToken, g_pFile, TRUE)&&
(g_Mode == MODE_DUMP_CLASS_METHOD || g_Mode == MODE_DUMP_CLASS_METHOD_SIG)) break;
-
-#ifndef FEATURE_CORECLR
- if(!ProgressStep())
- {
- g_fAbortDisassembly = TRUE;
- break;
- }
-#endif
}
g_pImport->EnumClose(&hEnumMethod);
if(i)
@@ -4991,7 +4900,7 @@ void DumpGlobalFields()
for (i = 0; g_pImport->EnumNext(&hEnum, &FieldToken); i++)
{
- if ((i == 0)&&(!(g_Mode & MODE_GUI)))
+ if (i == 0)
{
printLine(g_pFile,"");
printLine(g_pFile,COMMENT("// ================== GLOBAL FIELDS =========================="));
@@ -5019,8 +4928,6 @@ void DumpVTables(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
if (VAL32(CORHeader->VTableFixups.VirtualAddress) == 0) return;
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
-
sprintf_s(szString,SZSTRING_SIZE,"// VTableFixup Directory:");
printLine(GUICookie,szStr);
@@ -5087,7 +4994,6 @@ void DumpEATTable(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
DWORD BufferRVA;
DWORD i;
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
sprintf_s(szString,SZSTRING_SIZE,"// Export Address Table Jumps:");
printLine(GUICookie,szStr);
@@ -5143,7 +5049,6 @@ exit:
void DumpCodeManager(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
sprintf_s(szString,SZSTRING_SIZE,"// Code Manager Table:");
printLine(GUICookie,szStr);
if (!VAL32(CORHeader->CodeManagerTable.Size))
@@ -5180,7 +5085,6 @@ void DumpSectionHeaders(IMAGE_SECTION_HEADER* pSH, USHORT nSH, void* GUICookie)
{
char* szStr = &szString[0];
char name[16];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
printLine(GUICookie,"");
strcpy_s(szString,SZSTRING_SIZE,"// Image sections:");
printLine(GUICookie,szStr);
@@ -5280,7 +5184,6 @@ void DumpSectionHeaders(IMAGE_SECTION_HEADER* pSH, USHORT nSH, void* GUICookie)
void DumpBaseReloc(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
sprintf_s(szString,SZSTRING_SIZE,"// %s", szName);
printLine(GUICookie,szStr);
if (!VAL32(pDir->Size))
@@ -5322,7 +5225,7 @@ void DumpBaseReloc(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICook
void DumpIAT(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
+
sprintf_s(szString,SZSTRING_SIZE,"// %s", szName);
printLine(GUICookie,szStr);
if (!VAL32(pDir->Size))
@@ -5398,7 +5301,7 @@ struct MDStreamHeader
void DumpMetadataHeader(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
+
printLine(GUICookie,"");
sprintf_s(szString,SZSTRING_SIZE,"// %s", szName);
printLine(GUICookie,szStr);
@@ -5501,7 +5404,7 @@ void DumpEntryPoint(DWORD dwAddrOfEntryPoint,DWORD dwEntryPointSize,void* GUICoo
char* szStr = &szString[0];
char* szptr = szStr+2;
DWORD i;
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
+
printLine(GUICookie,"");
strcpy_s(szString,SZSTRING_SIZE,"// Entry point code:");
printLine(GUICookie,szStr);
@@ -5531,7 +5434,7 @@ void DumpEntryPoint(DWORD dwAddrOfEntryPoint,DWORD dwEntryPointSize,void* GUICoo
void DumpHeader(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
+
DWORD dwAddrOfEntryPoint=0, dwEntryPointSize=0;
PIMAGE_DOS_HEADER pDOSHeader = g_pPELoader->dosHeader();
@@ -5905,8 +5808,6 @@ void DumpTable(unsigned long Table, const char *TableName, void* GUICookie)
int size;
ULONG sizeRec, count;
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
-
// Record that this table has been seen.
TableSeen(Table);
@@ -5942,7 +5843,6 @@ void DumpStatistics(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
ULONG sizeRec, count;
char buf[MAX_MEMBER_LENGTH];
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
TableSeenReset();
metaSize = 0;
@@ -6965,7 +6865,7 @@ void DumpMI(__in __nullterminated const char *str)
strcpy_s(szString,5,"// ");
fInit = FALSE;
GUICookie = (void*)str;
- if(g_Mode & MODE_GUI) szStr = &szString[3]; // don't need "//" in GUI mode
+
return;
}
// Normal work
@@ -7011,18 +6911,8 @@ void DumpMetaInfo(__in __nullterminated const WCHAR* pwzFileName, __in_opt __nul
if(pch && (!_wcsicmp(pch+1,W("lib")) || !_wcsicmp(pch+1,W("obj"))))
{ // This works only when all the rest does not
// Init and run.
-#ifdef FEATURE_CORECLR
if (metaDataGetDispenser(CLSID_CorMetaDataDispenser,
IID_IMetaDataDispenserEx, (void **)&g_pDisp))
-#else
- if(SUCCEEDED(CoInitialize(0)))
- {
- if(SUCCEEDED(LegacyActivationShim::CoInitializeCor(0)))
- {
- if (SUCCEEDED(LegacyActivationShim::ClrCoCreateInstance(
- CLSID_CorMetaDataDispenser, NULL, CLSCTX_INPROC_SERVER,
- IID_IMetaDataDispenserEx, (void **) &g_pDisp)))
-#endif
{
WCHAR *pwzObjFileName=NULL;
if (pszObjFileName)
@@ -7037,39 +6927,25 @@ void DumpMetaInfo(__in __nullterminated const WCHAR* pwzFileName, __in_opt __nul
g_pDisp = NULL;
if (pwzObjFileName) VDELETE(pwzObjFileName);
}
-#ifndef FEATURE_CORECLR
- LegacyActivationShim::CoUninitializeCor();
- }
- CoUninitialize();
- }
-#endif
}
else
{
HRESULT hr = S_OK;
if(g_pDisp == NULL)
{
-#ifdef FEATURE_CORECLR
hr = metaDataGetDispenser(CLSID_CorMetaDataDispenser,
IID_IMetaDataDispenserEx, (void **)&g_pDisp);
-#else
- hr = LegacyActivationShim::ClrCoCreateInstance(
- CLSID_CorMetaDataDispenser, NULL, CLSCTX_INPROC_SERVER,
- IID_IMetaDataDispenserEx, (void **) &g_pDisp);
-#endif
}
if(SUCCEEDED(hr))
{
g_ValModuleType = ValidatorModuleTypePE;
if(g_pAssemblyImport==NULL) g_pAssemblyImport = GetAssemblyImport(NULL);
- if(!(g_Mode & MODE_GUI))
- printLine(GUICookie,RstrUTF(IDS_E_MISTART));
+ printLine(GUICookie,RstrUTF(IDS_E_MISTART));
//MDInfo metaDataInfo(g_pPubImport, g_pAssemblyImport, (LPCWSTR)pwzFileName, DumpMI, g_ulMetaInfoFilter);
MDInfo metaDataInfo(g_pDisp,(LPCWSTR)pwzFileName, DumpMI, g_ulMetaInfoFilter);
metaDataInfo.SetVEHandlerReporter((__int64) (size_t) VEHandlerReporter);
metaDataInfo.DisplayMD();
- if(!(g_Mode & MODE_GUI))
- printLine(GUICookie,RstrUTF(IDS_E_MIEND));
+ printLine(GUICookie,RstrUTF(IDS_E_MIEND));
}
}
DumpMI((char*)-1); // reset the print function for DumpMetaInfo
@@ -7442,7 +7318,6 @@ BOOL DumpFile()
const char *pszFilename = g_szInputFile;
const DWORD openFlags = ofRead | (g_fProject ? 0 : ofNoTransform);
- if(!(g_Mode & MODE_GUI))
{
if(g_fDumpHTML)
{
@@ -7465,8 +7340,7 @@ BOOL DumpFile()
char* pch = strrchr(g_szInputFile,'.');
if(pch && (!_stricmp(pch+1,"lib") || !_stricmp(pch+1,"obj")))
{
- if(!(g_Mode & MODE_GUI))
- DumpMetaInfo(g_wszFullInputFile,g_pszObjFileName,g_pFile);
+ DumpMetaInfo(g_wszFullInputFile,g_pszObjFileName,g_pFile);
return FALSE;
}
}
@@ -7542,21 +7416,12 @@ BOOL DumpFile()
g_cbMetaData = VAL32(g_CORHeader->MetaData.Size);
}
-#ifdef FEATURE_CORECLR
if (FAILED(getMetaDataInternalInterface(
(BYTE *)g_pMetaData,
g_cbMetaData,
openFlags,
IID_IMDInternalImport,
(LPVOID *)&g_pImport)))
-#else
- if (FAILED(g_pCLRRuntimeHostInternal->GetMetaDataInternalInterface(
- (BYTE *)g_pMetaData,
- g_cbMetaData,
- openFlags,
- IID_IMDInternalImport,
- (LPVOID *)&g_pImport)))
-#endif
{
if (g_fDumpHeader)
DumpHeader(g_CORHeader, g_pFile);
@@ -7565,11 +7430,7 @@ BOOL DumpFile()
}
TokenSigInit(g_pImport);
-#ifdef FEATURE_CORECLR
if (FAILED(metaDataGetDispenser(CLSID_CorMetaDataDispenser, IID_IMetaDataDispenser, (LPVOID*)&pMetaDataDispenser)))
-#else
- if (FAILED(CoCreateInstance(CLSID_CorMetaDataDispenser, 0, CLSCTX_INPROC_SERVER, IID_IMetaDataDispenser, (LPVOID*)&pMetaDataDispenser)))
-#endif
{
if (g_fDumpHeader)
DumpHeader(g_CORHeader, g_pFile);
@@ -7584,31 +7445,6 @@ BOOL DumpFile()
goto exit;
}
-#ifndef FEATURE_CORECLR
- // Get a symbol binder.
- ISymUnmanagedBinder *binder;
- HRESULT hr;
-
- hr = CoCreateInstance(CLSID_CorSymBinder_SxS, NULL,
- CLSCTX_INPROC_SERVER,
- IID_ISymUnmanagedBinder,
- (void**)&binder);
-
- if (SUCCEEDED(hr))
- {
- hr = binder->GetReaderForFile(g_pPubImport,
- wzInputFileName,
- NULL,
- &g_pSymReader);
-
- // Release the binder
- binder->Release();
- }
-
- if (FAILED(hr))
- g_fShowSource = FALSE;
-#endif
-
if((g_uNCA = g_pImport->GetCountWithTokenKind(mdtCustomAttribute)))
{
g_rchCA = new char[g_uNCA+1];
@@ -7636,13 +7472,6 @@ DoneInitialization:
}
#endif
-#ifndef FEATURE_CORECLR
- if (g_Mode & MODE_GUI)
- {
- GUIAddItemsToList();
- }
- else
-#endif
{
// Dump the CLR header info if requested.
printLine(g_pFile,COMMENT((char*)0)); // start multiline comment
@@ -7682,16 +7511,8 @@ DoneInitialization:
ulNumGlobalFunc = g_pImport->EnumGetCount(&hEnumMethod);
g_pImport->EnumClose(&hEnumMethod);
}
-#ifndef FEATURE_CORECLR
- if(g_fShowProgressBar)
- CreateProgressBar((LONG) (g_NumClasses + ulNumGlobalFunc));
-#endif
}
-#ifndef FEATURE_CORECLR
- ProgressStep();
-#endif
- g_fAbortDisassembly = FALSE;
//DumpVtable(g_pFile);
DumpMscorlib(g_pFile);
if(g_fDumpTypeList) DumpTypelist(g_pFile);
@@ -7734,13 +7555,6 @@ DoneInitialization:
if(g_cl_enclosing[i] == mdTypeDefNil) // nested classes are dumped within enclosing ones
{
DumpClass(g_cl_list[i], VAL32(IMAGE_COR20_HEADER_FIELD(*g_CORHeader, EntryPointToken)),g_pFile,7); //7=everything
- if(g_fAbortDisassembly)
- {
- printError(g_pFile,"");
- printError(g_pFile,RstrUTF(IDS_E_DASMABORT));
- fSuccess = FALSE;
- goto CloseFileAndExit;
- }
}
}
CloseNamespace(szString);
@@ -7756,16 +7570,6 @@ DoneInitialization:
if(g_rchCA[i] == 0) DumpCustomAttribute(TokenFromRid(i,mdtCustomAttribute),g_pFile,true);
}
}
- if(g_fAbortDisassembly)
- {
- printError(g_pFile,"");
- printError(g_pFile,RstrUTF(IDS_E_DASMABORT));
- fSuccess = FALSE;
- goto CloseFileAndExit;
- }
-#ifndef FEATURE_CORECLR
- ProgressStep();
-#endif
#if (0)
/* Third, dump GC/EH info about the native methods, using the IPMap */
@@ -7947,15 +7751,14 @@ ReportAndExit:
DumpRTFPostfix(g_pFile);
}
+#ifndef _DEBUG
CloseFileAndExit:
+#endif
if(g_pFile)
{
fclose(g_pFile);
g_pFile = NULL;
}
-#ifndef FEATURE_CORECLR
- DestroyProgressBar();
-#endif
}
exit:
diff --git a/src/ildasm/dasm.rc b/src/ildasm/dasm.rc
index b16d53ab2f..ea56596f8d 100644
--- a/src/ildasm/dasm.rc
+++ b/src/ildasm/dasm.rc
@@ -10,9 +10,6 @@
//
// Generated from the TEXTINCLUDE 2 resource.
//
-#ifndef FEATURE_CORECLR
-#include "afxres.h"
-#endif
#include <winresrc.h>
/////////////////////////////////////////////////////////////////////////////
@@ -57,250 +54,16 @@ END
#endif // APSTUDIO_INVOKED
-
-#if !defined(FEATURE_PAL) && !defined(FEATURE_CORECLR)
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_ICON2 ICON DISCARDABLE "Litening.ico"
-
-#if FX_VFT == VFT_DLL
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-IDB_FIELD BITMAP MOVEABLE PURE "field.bmp"
-IDB_METHOD BITMAP MOVEABLE PURE "method.bmp"
-IDB_STATICFIELD BITMAP MOVEABLE PURE "staticfield.bmp"
-IDB_STATICMETHOD BITMAP MOVEABLE PURE "staticmethod.bmp"
-IDB_REDARROW BITMAP MOVEABLE PURE "redarrow.bmp"
-IDB_EVENT BITMAP DISCARDABLE "event.bmp"
-IDB_PROP BITMAP DISCARDABLE "prop.bmp"
-IDB_NAMESPACE BITMAP DISCARDABLE "namespace.bmp"
-IDB_CLASS BITMAP DISCARDABLE "classa.bmp"
-IDB_CLASSENUM BITMAP DISCARDABLE "classe.bmp"
-IDB_CLASSINT BITMAP DISCARDABLE "classi.bmp"
-IDB_CLASSVAL BITMAP DISCARDABLE "classv.bmp"
-
-IDB_METHOD_GEN BITMAP MOVEABLE PURE "methodg.bmp"
-IDB_STATICMETHOD_GEN BITMAP MOVEABLE PURE "staticmethodg.bmp"
-IDB_CLASS_GEN BITMAP DISCARDABLE "classag.bmp"
-IDB_CLASSENUM_GEN BITMAP DISCARDABLE "classeg.bmp"
-IDB_CLASSINT_GEN BITMAP DISCARDABLE "classig.bmp"
-IDB_CLASSVAL_GEN BITMAP DISCARDABLE "classvg.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 157, 306
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
-CAPTION "Dump options"
-FONT 8, "MS Shell Dlg"
-BEGIN
- DEFPUSHBUTTON L"OK",IDOK,13,285,50,14
- PUSHBUTTON L"Cancel",IDCANCEL,81,285,50,14
- GROUPBOX L"Encoding",IDC_STATIC,13,3,129,28
- CONTROL L"ANSI",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,19,16,34,9
- CONTROL L"UTF-8",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,55,16,34,
- 9
- CONTROL L"Unicode",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,91,16,
- 40,9
- CONTROL L"Dump Class List",IDC_CHECK19,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,36,106,10
- CONTROL L"Dump Statistics",IDC_CHECK2,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,48,106,10
- CONTROL L"Show Progress Bar",IDC_CHECK18,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,60,124,11
- CONTROL L"Dump Header",IDC_CHECK1,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,73,106,10
- CONTROL L"Dump IL Code",IDC_CHECK3,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,86,106,10
- CONTROL L"Token Values",IDC_CHECK4,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,99,106,10
- CONTROL L"Actual Bytes",IDC_CHECK5,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,110,106,10
- CONTROL L"Line Numbers",IDC_CHECK20,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,120,106,10
- CONTROL L"Source Lines",IDC_CHECK6,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,131,106,10
- CONTROL L"Expand try/catch",IDC_CHECK7,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,142,106,10
- CONTROL L"Dump Metainfo",IDC_CHECK8,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,158,106,10
- CONTROL L"More HEX",IDC_CHECK11,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,174,106,10
- CONTROL L"Raw: Counts,Sizes",IDC_CHECK12,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,185,106,10
- CONTROL L"Raw: Header",IDC_CHECK10,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,198,106,10
- CONTROL L"Raw: Header,Schema",IDC_CHECK14,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
- 37,209,106,10
- CONTROL L"Raw: Header,Schema,Rows",IDC_CHECK15,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,37,222,106,10
- CONTROL L"Raw: Heaps",IDC_CHECK17,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,233,106,10
- CONTROL L"Unresolved Externals",IDC_CHECK13,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
- 37,246,106,10
- CONTROL L"Validate",IDC_CHECK16,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,257,106,10
- CONTROL L"Debug",IDC_CHECK9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
- 37,270,106,10
-END
-
-IDD_ABOUT DIALOGEX 0, 0, 289, 112
-STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION
-EXSTYLE WS_EX_CLIENTEDGE
-CAPTION L"About IL DASM"
-FONT 8, "MS Shell Dlg"
-BEGIN
- DEFPUSHBUTTON L"OK",ID_ABOUT_OK,122,83,50,14
- ICON IDI_ICON2,IDC_STATIC,18,22,21,20,0
- LTEXT L"Static",IDC_ABOUT_LINE1,47,22,279,11
- LTEXT L"Static",IDC_ABOUT_LINE2,47,38,279,11
- LTEXT L"Static",IDC_ABOUT_LINE3,47,56,279,11
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Accelerator
-//
-
-FileAccel ACCELERATORS MOVEABLE PURE
-BEGIN
- "O", 1, VIRTKEY, CONTROL
- "D", 2, VIRTKEY, CONTROL
- "T", 3, VIRTKEY, CONTROL
- "X", 4, VIRTKEY, CONTROL
- "M", 21, VIRTKEY, CONTROL
- VK_F1, 31, VIRTKEY
- VK_ESCAPE, 4, VIRTKEY
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- IDD_DIALOG1, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 150
- TOPMARGIN, 3
- BOTTOMMARGIN, 299
- END
-
- IDD_ABOUT, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 232
- TOPMARGIN, 7
- BOTTOMMARGIN, 105
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_FILE L"&File"
- IDS_VIEW L"&View"
- IDS_HELP L"&Help"
- IDS_OPEN L"&Open\tCtrl+O"
- IDS_DUMP L"&Dump\tCtrl+D"
- IDS_DUMPTREE L"Dump &TreeView\tCtrl+T"
- IDS_EXIT L"E&xit\tCtrl+X"
- IDS_FONTS L"Set &Fonts"
- IDS_FONT_TREE L"&Tree view"
- IDS_FONT_DASM L"&Disassembly"
- IDS_SORT_BY_NAME L"Sort by &name"
- IDS_SHOW_PUB L"Hide &Public"
- IDS_SHOW_PRIV L"Hide P&rivate"
- IDS_SHOW_FAM L"Hide Famil&y"
- IDS_SHOW_ASM L"Hide &Assembly"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_FIND L"&Find"
- IDS_FINDNEXT L"Find &Next"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_MI_DEBUG L"&Debug"
- IDS_MI_SCHEMA L"Raw:Header,Sch&ema"
- IDS_MI_RAW L"Raw:Header,Schema,&Rows"
- IDS_MI_HEAPS L"Raw:Hea&ps"
- IDS_MI_VALIDATE L"&Validate"
- IDS_SHOW_METAINFO L"&Show!\tCtrl+M"
- IDS_ABOUT L"&About IL DASM"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_SHOW_FAA L"Hide FamAN&DAssem"
- IDS_SHOW_FOA L"Hide Fam&ORAssem"
- IDS_SHOW_PSCOPE L"Hide Private&Scope"
- IDS_FULL_INFO L"Show member &types"
- IDS_BYTES L"Show &bytes"
- IDS_TOKENS L"Show token &values"
- IDS_SOURCELINES L"Show source &lines"
- IDS_QUOTEALLNAMES L"&Quote all names"
- IDS_EXPANDTRY L"E&xpand try/catch"
- IDS_SHOW_HEADER L"&Headers"
- IDS_SHOW_STAT L"Stat&istics"
- IDS_METAINFO L"&MetaInfo"
- IDS_MI_HEADER L"Raw:&Header"
- IDS_MI_HEX L"&More HEX"
- IDS_MI_CSV L"Raw:&Counts,Sizes"
- IDS_MI_UNREX L"&Unresolved ext."
- IDS_TREEVIEWFCN L"Full &Class Names"
- IDS_CAVERBAL L"V&erbal CA blobs"
- IDS_DUMPRTF L"&Use RTF"
-END
-
-#endif // FX_VFT == VFT_DLL
-#endif // !defined(FEATURE_PAL) && !defined(FEATURE_CORECLR)
-
#if FX_VFT == VFT_DLL
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE_TITLE L"ILDASM command line syntax"
IDS_USAGE_01 L"Usage: ildasm [options] <file_name> [options]\n\n"
IDS_USAGE_02 L"Options for output redirection:\n"
-#ifndef FEATURE_PAL
- IDS_USAGE_03 L" /OUT=<file name> Direct output to file rather than to GUI.\n"
- IDS_USAGE_04 L" /TEXT Direct output to console window rather than to GUI.\n\n"
- IDS_USAGE_04A L" /HTML Output in HTML format (valid with /OUT option only).\n"
- IDS_USAGE_04B L" /RTF Output in rich text format (invalid with /TEXT option).\n"
- IDS_USAGE_05 L"Options for GUI or file/console output (EXE and DLL files only):\n"
-#else
IDS_USAGE_03 L" /OUT=<file name> Direct output to file rather than to console.\n"
- IDS_USAGE_04 L""
IDS_USAGE_04A L" /HTML Output in HTML format (valid with /OUT option only).\n"
IDS_USAGE_04B L" /RTF Output in rich text format (valid with /OUT option only).\n"
IDS_USAGE_05 L"Options for file/console output:\n"
-#endif // !FEATURE_PAL
#ifdef OWNER_OPTION_ENABLED
IDS_USAGE_06 L" /OWNER=<owner name> Set owner name to disassemble a protected PE file.\n"
#endif
@@ -322,15 +85,8 @@ BEGIN
IDS_USAGE_15 L" /QUOTEALLNAMES Include all names into single quotes.\n"
IDS_USAGE_15A L" /NOCA Suppress output of custom attributes.\n"
IDS_USAGE_15B L" /CAVERBAL Output CA blobs in verbal form (default - in binary form).\n"
-#ifndef FEATURE_PAL
- IDS_USAGE_16 L" /NOBAR Suppress disassembly progress bar window pop-up.\n\n"
IDS_USAGE_17 L"The following options are valid for file/console output only:\n"
IDS_USAGE_18 L"Options for EXE and DLL files:\n"
-#else
- IDS_USAGE_16 L""
- IDS_USAGE_17 L""
- IDS_USAGE_18 L""
-#endif // !FEATURE_PAL
IDS_USAGE_19 L" /UTF8 Use UTF-8 encoding for output (default - ANSI).\n"
IDS_USAGE_20 L" /UNICODE Use UNICODE encoding for output.\n"
IDS_USAGE_21 L" /NOIL Suppress IL assembler code output.\n"
@@ -390,7 +146,6 @@ BEGIN
IDS_E_BADCORHDR L"error : Bad CLR header, or the version of the file format is not supported"
IDS_E_OPENMD L"error : Failed to open meta data"
IDS_E_COPYRIGHT L"error : Copyrighted material - can not disassemble!"
- IDS_E_DASMABORT L"********* DISASSEMBLY ABORTED BY THE OPERATOR **************"
IDS_E_DASMOK L"*********** DISASSEMBLY COMPLETE ***********************"
IDS_E_PARTDASM L"warning : THIS IS A PARTIAL DISASSEMBLY, NOT SUITABLE FOR RE-ASSEMBLING"
IDS_E_INSTRDT L"error : Failed to create instruction decoding table"
diff --git a/src/ildasm/dasm_pr.cpp b/src/ildasm/dasm_pr.cpp
deleted file mode 100644
index 9d478bf9ac..0000000000
--- a/src/ildasm/dasm_pr.cpp
+++ /dev/null
@@ -1,275 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "ildasmpch.h"
-
-#ifndef FEATURE_CORECLR
-#include "resource.h"
-#include "formattype.h"
-
-WCHAR* RstrW(unsigned id);
-
-extern HINSTANCE g_hInstance;
-extern HINSTANCE g_hResources;
-extern DWORD g_NumClasses;
-extern char g_szInputFile[]; // in UTF-8
-extern char g_szOutputFile[]; // in UTF-8
-
-#define IDC_CANCEL 101
-
-HWND g_hwndProgress = NULL;
-HWND g_hwndProgBox = NULL;
-HWND g_hwndFromFile = NULL;
-HWND g_hwndToFile = NULL;
-HWND g_hwndTally = NULL;
-HWND g_hwndCancel = NULL;
-HANDLE g_hThreadReady = NULL; // event
-
-BOOL g_fInitCommonControls = TRUE;
-BOOL g_fRegisterClass = TRUE;
-ULONG g_ulCount, g_ulRange;
-RECT rcClient; // client area of parent window
-
-WCHAR* UtfToUnicode(__in __nullterminated const char* sz); // defined in dis.cpp
-
-LRESULT CALLBACK ProgBoxWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
-{
- switch (uMsg)
- {
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_CANCEL:
- g_hwndProgress = NULL;
- g_hwndProgBox = NULL;
- g_hwndFromFile = NULL;
- g_hwndToFile = NULL;
- g_hwndTally = NULL;
- g_hwndCancel = NULL;
- DestroyWindow (hwnd);
- break;
- }
- break;
-
-
- case WM_CLOSE:
- g_hwndProgress = NULL;
- g_hwndProgBox = NULL;
- g_hwndFromFile = NULL;
- g_hwndToFile = NULL;
- g_hwndTally = NULL;
- g_hwndCancel = NULL;
- //break;
- default:
- return WszDefWindowProc(hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-DWORD WINAPI ProgressMainLoop(LPVOID pv)
-{
- MSG msg;
- DWORD cyVScroll;
- HFONT hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT); //(ANSI_FIXED_FONT);
- WCHAR wzStr[1024];
-
- if(g_fInitCommonControls)
- {
- InitCommonControls();
- g_fInitCommonControls = FALSE;
- }
- g_ulCount = 0;
- if(g_fRegisterClass)
- {
- _ASSERTE(g_hResources != NULL);
- WNDCLASSW wndClass;
-
- wndClass.style = CS_HREDRAW|CS_VREDRAW|CS_NOCLOSE;
- wndClass.lpfnWndProc = ProgBoxWndProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = 0;
- wndClass.hInstance = g_hInstance;
- wndClass.hIcon = WszLoadIcon(g_hResources,MAKEINTRESOURCE(IDI_ICON2));
- wndClass.hCursor = NULL;
- wndClass.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
- wndClass.lpszMenuName = NULL;
- wndClass.lpszClassName = L"ProgressBox";
-
- if (WszRegisterClass(&wndClass) == 0) return 0;
-
- g_fRegisterClass = FALSE;
- }
- cyVScroll = GetSystemMetrics(SM_CYVSCROLL);
- if(g_hwndProgBox = WszCreateWindowEx (0,
- RstrW(IDS_PROGRESSBOX), //"ProgressBox",
- RstrW(IDS_DISASSEMBLING), //"Disassembling",
- WS_VISIBLE | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_CLIPCHILDREN,
- 400, 200, 400, 8*cyVScroll,
- HWND_DESKTOP,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- GetClientRect(g_hwndProgBox, &rcClient);
-
- if(g_hwndFromFile = WszCreateWindowEx (0,
- L"STATIC",
- L"",
- WS_CHILD|WS_VISIBLE|SS_CENTER,
- rcClient.left, rcClient.bottom-6*cyVScroll,rcClient.right, cyVScroll,
- g_hwndProgBox,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- SendMessageA(g_hwndFromFile,WM_SETFONT,(LPARAM)hFont,FALSE);
- WCHAR* wzFileName = UtfToUnicode(g_szInputFile);
- if(wcslen(wzFileName) <= 60) swprintf_s(wzStr,1024,RstrW(IDS_PB_FILE) /*"File %s"*/,wzFileName);
- else
- {
- WCHAR * p=wzFileName;
- while(p = wcschr(p,L'\\'))
- {
- if(wcslen(p) <= 60) break;
- p++;
- }
- if(p == NULL) p = &wzFileName[wcslen(wzFileName)-50];
- swprintf_s(wzStr,1024,RstrW(IDS_PB_FILE1) /*"File ...%s"*/,p);
- }
- WszSendMessage(g_hwndFromFile, WM_SETTEXT,0,(LPARAM)wzStr);
- }
- if(g_hwndToFile = WszCreateWindowEx (0,
- L"STATIC",
- L"",
- WS_CHILD|WS_VISIBLE|SS_CENTER,
- rcClient.left, rcClient.bottom-5*cyVScroll,rcClient.right, cyVScroll,
- g_hwndProgBox,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- SendMessageA(g_hwndToFile,WM_SETFONT,(LPARAM)hFont,FALSE);
- WCHAR* wzFileName = UtfToUnicode(g_szOutputFile);
- if(wcslen(wzFileName) <= 60) swprintf_s(wzStr,1024,RstrW(IDS_PB_TOFILE) /*"To file %s"*/,wzFileName);
- else
- {
- WCHAR * p=wzFileName;
- while(p = wcschr(p,L'\\'))
- {
- if(wcslen(p) <= 60) break;
- p++;
- }
- if(p == NULL) p = &wzFileName[wcslen(wzFileName)-50];
- swprintf_s(wzStr,1024,RstrW(IDS_PB_TOFILE1) /*"To file ...%s"*/,p);
- }
- WszSendMessage(g_hwndToFile, WM_SETTEXT,0,(LPARAM)wzStr);
- }
- if(g_hwndTally = WszCreateWindowEx (0,
- L"STATIC",
- L"",
- WS_CHILD|WS_VISIBLE|SS_CENTER,
- rcClient.left, rcClient.bottom-4*cyVScroll,rcClient.right, cyVScroll,
- g_hwndProgBox,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- SendMessageA(g_hwndTally,WM_SETFONT,(LPARAM)hFont,FALSE);
- if(g_ulCount <= g_NumClasses) swprintf_s(wzStr,1024,RstrW(IDS_PB_CLASSESDONE) /*"%d classes, %d done"*/,g_NumClasses,g_ulCount);
- else swprintf_s(wzStr,1024,RstrW(IDS_PB_GLOBALSDONE) /*"%d global methods, %d done"*/,g_ulRange-g_NumClasses,g_ulCount-g_NumClasses);
- WszSendMessage(g_hwndTally, WM_SETTEXT,0,(LPARAM)wzStr);
- }
- if(g_hwndProgress = WszCreateWindowEx (0,
- PROGRESS_CLASS,
- L"",
- WS_CHILD|WS_VISIBLE|SS_CENTER, // SS_CENTER gives smooth progress and solid bar
- rcClient.left, rcClient.bottom-3*cyVScroll,rcClient.right, cyVScroll,
- g_hwndProgBox,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- // Set the range for the progress bar.
- SendMessageA (g_hwndProgress, PBM_SETRANGE, 0L, MAKELPARAM(0, g_ulRange));
- // Set the step.
- SendMessageA (g_hwndProgress, PBM_SETSTEP, (WPARAM)1, 0L);
- }
- if(g_hwndCancel = WszCreateWindowEx (0,
- L"BUTTON",
- RstrW(IDS_PB_CANCEL), //"Cancel",
- WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON|BS_TEXT,
- rcClient.left+150, rcClient.bottom-3*cyVScroll/2,rcClient.right-300, 4*cyVScroll/3,
- g_hwndProgBox,
- (HMENU)IDC_CANCEL,
- g_hInstance,
- NULL))
- {
- SendMessageA(g_hwndCancel,WM_SETFONT,(LPARAM)hFont,FALSE);
- }
- }
- SetEvent(g_hThreadReady);
- while (WszGetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- WszDispatchMessage(&msg);
- }
- return 0;
-}
-
-void CreateProgressBar(LONG lRange)
-{
- DWORD dwThreadID;
- g_ulCount = 0;
- if((g_ulRange = (ULONG)lRange)==0) return;
-
- g_hThreadReady = WszCreateEvent(NULL,FALSE,FALSE,NULL);
- if (g_hThreadReady != NULL)
- {
- // Thread is never aborted, it always exits by itself
- HANDLE hThread = CreateThread(NULL,0,ProgressMainLoop,NULL,0,&dwThreadID);
- if (hThread != NULL)
- {
- CloseHandle(hThread);
- WaitForSingleObject(g_hThreadReady,INFINITE);
- }
- CloseHandle(g_hThreadReady);
- }
-}
-
-BOOL ProgressStep()
-{
- if(g_hwndProgBox)
- {
- WCHAR wzStr[1024];
- if(g_hwndTally)
- {
- if(g_ulCount <= g_NumClasses)
- swprintf_s(wzStr,1024,RstrW(IDS_PB_CLASSESDONE) /*"%d classes, %d done"*/,g_NumClasses,g_ulCount);
- else if(g_ulCount <= g_ulRange)
- swprintf_s(wzStr,1024,RstrW(IDS_PB_GLOBALSDONE) /*"%d global methods, %d done"*/,g_ulRange-g_NumClasses,g_ulCount-g_NumClasses);
- else
- wcscpy_s(wzStr,1024,RstrW(IDS_PB_WRITINGDATA)); //"Writing global data");
- wzStr[1023]=0;
- WszSendMessage(g_hwndTally, WM_SETTEXT,0,(LPARAM)wzStr);
- }
-
- if(g_hwndProgress && g_ulCount && (g_ulCount <= g_ulRange))
- WszSendMessage (g_hwndProgress, PBM_STEPIT, 0L, 0L);
- g_ulCount++;
- }
- else if(g_ulCount) return FALSE; // disassembly started and was aborted
- return TRUE;
-}
-
-void DestroyProgressBar()
-{
- if(g_hwndProgBox) WszSendMessage (g_hwndProgBox,WM_COMMAND,IDC_CANCEL,0);
- g_hwndProgress = NULL;
- g_hwndProgBox = NULL;
- g_hwndFromFile = NULL;
- g_hwndToFile = NULL;
- g_hwndTally = NULL;
- g_hwndCancel = NULL;
- g_ulCount = 0;
-}
-#endif
diff --git a/src/ildasm/dasmgui.h b/src/ildasm/dasmgui.h
deleted file mode 100644
index aa1747e01b..0000000000
--- a/src/ildasm/dasmgui.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-BOOL CreateGUI();
-void GUISetModule(__in __nullterminated const char *pszModule);
-void GUIMainLoop();
-void GUIAddOpcode(__inout_opt __nullterminated const char *szString, __in_opt void *GUICookie);
-BOOL GUIAddItemsToList();
-void GUIAddOpcode(__inout __nullterminated const char *szString);
-void DestroyGUI();
-UINT GetDasmMBRTLStyle();
-
-BOOL DisassembleMemberByName(__in __nullterminated const char *pszClassName, __in __nullterminated const char *pszMemberName, __in __nullterminated const char *pszSig);
-BOOL IsGuiILOnly();
diff --git a/src/ildasm/dasmhlp.hhc b/src/ildasm/dasmhlp.hhc
deleted file mode 100644
index dcedac2abb..0000000000
--- a/src/ildasm/dasmhlp.hhc
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<HTML>
-<HEAD>
-<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
-<!-- Sitemap 1.0 -->
-</HEAD><BODY>
-<OBJECT type="text/site properties">
- <param name="Window Styles" value="0x800021">
-</OBJECT>
-<UL>
- <LI> <OBJECT type="text/sitemap">
- <param name="Name" value="Menu Options">
- <param name="Local" value="html\menu_options.htm">
- <param name="URL" value="html\menu_options.htm">
- </OBJECT>
- <LI> <OBJECT type="text/sitemap">
- <param name="Name" value="Tree View Icons">
- <param name="Local" value="html\tree_view_icons.htm">
- <param name="URL" value="html\tree_view_icons.htm">
- </OBJECT>
- <LI> <OBJECT type="text/sitemap">
- <param name="Name" value="Clicking on Tree View Items">
- <param name="Local" value="html\clicking.htm">
- <param name="URL" value="html\clicking.htm">
- </OBJECT>
- <LI> <OBJECT type="text/sitemap">
- <param name="Name" value="Keyboard Commands">
- <param name="Local" value="html\keyboard.htm">
- <param name="URL" value="html\keyboard.htm">
- </OBJECT>
-</UL>
-</BODY></HTML>
diff --git a/src/ildasm/dirs.proj b/src/ildasm/dirs.proj
deleted file mode 100644
index 86d561e3f8..0000000000
--- a/src/ildasm/dirs.proj
+++ /dev/null
@@ -1,15 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <!--The following projects will build during PHASE 1-->
- <PropertyGroup>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildInPhase1>true</BuildInPhase1>
- </PropertyGroup>
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="exe\ildasm.nativeproj" />
- <ProjectFile Include="rcdll\ildasmrc.nativeproj" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/ildasm/dis.cpp b/src/ildasm/dis.cpp
index 371466feee..2b3229e920 100644
--- a/src/ildasm/dis.cpp
+++ b/src/ildasm/dis.cpp
@@ -10,7 +10,6 @@
#include "debugmacros.h"
#include "corpriv.h"
#include "dasmenum.hpp"
-#include "dasmgui.h"
#include "formattype.h"
#include "dis.h"
#include "resource.h"
@@ -133,11 +132,6 @@ char* AnsiToUtf(__in __nullterminated const char* sz) { return UnicodeToUtf(Ansi
static void UnicodeToConsoleOrMsgBox(__in __nullterminated const WCHAR* wz)
{
-#ifndef FEATURE_CORECLR
- if (g_Mode & MODE_GUI)
- WszMessageBox(NULL,wz,RstrW(IDS_ERRORCAPTION),MB_OK|MB_ICONERROR|GetDasmMBRTLStyle());
- else
-#endif
{
//DWORD dw;
//char* sz = UnicodeToAnsi(wz);
@@ -155,11 +149,6 @@ static void UnicodeToFile(__in __nullterminated const WCHAR* wz, FILE* pF)
}
static void ToGUIOrFile(__in __nullterminated const char* sz, void* GUICookie)
{
-#ifndef FEATURE_CORECLR
- if (g_Mode & MODE_GUI)
- GUIAddOpcode(sz, GUICookie);
- else
-#endif
{
if(g_fDumpRTF) fprintf((FILE*)GUICookie,"%s\\line\n",sz);
else fprintf((FILE*)GUICookie,"%s\n",sz);
@@ -168,8 +157,6 @@ static void ToGUIOrFile(__in __nullterminated const char* sz, void* GUICookie)
//------------------------------------------------------------------
void printError(void* GUICookie, __in __nullterminated const char* string)
{
- if(g_Mode & MODE_GUI) printLine(GUICookie, ERRORMSG(string));
- else
{
//DWORD dw;
const char* sz = ERRORMSG(string);
@@ -198,7 +185,7 @@ void printLine(void* GUICookie, __in __nullterminated const char* string)
{
sz = UnicodeToAnsi(wz);
}
- else if(GUICookie && (!(g_Mode & MODE_GUI)))
+ else if(GUICookie)
{
UnicodeToFile(wz,(FILE*)GUICookie);
return;
@@ -219,11 +206,8 @@ void printLineW(void* GUICookie, __in __nullterminated const WCHAR* string)
}
if(g_uCodePage == 0xFFFFFFFF)
{
- if(!(g_Mode & MODE_GUI))
- {
- UnicodeToFile(string,(FILE*)GUICookie);
- return;
- }
+ UnicodeToFile(string,(FILE*)GUICookie);
+ return;
}
else if(g_uCodePage == CP_UTF8)
sz = UnicodeToUtf(string);
@@ -1083,15 +1067,7 @@ BOOL Disassemble(IMDInternalImport *pImport, BYTE *ILHeader, void *GUICookie, md
PC = 0;
fTryInCode = enumEHInfo(method.EH, pImport, method.GetCodeSize());
DasmExceptionInfoClause* ehInfoToPutNext = NULL;
- if(g_Mode & MODE_GUI)
- { // in GUI, reset everything for each method
- ulWasFileToken = 0xFFFFFFFF;
- memset(&guidWasLang,0,sizeof(GUID));
- memset(&guidWasLangVendor,0,sizeof(GUID));
- memset(&guidWasDoc,0,sizeof(GUID));
- memset(wzWasFileName,0,sizeof(wzWasFileName));
- ulWasLine = 0;
- }
+
while (PC < method.GetCodeSize())
{
DWORD Len;
@@ -1117,8 +1093,7 @@ BOOL Disassemble(IMDInternalImport *pImport, BYTE *ILHeader, void *GUICookie, md
if (fNeedNewLine)
{
fNeedNewLine = FALSE;
- if (!(g_Mode & MODE_GUI))
- printLine(GUICookie,"");
+ printLine(GUICookie,"");
}
if(fShowSource || fInsertSourceLines)
diff --git a/src/ildasm/dis.h b/src/ildasm/dis.h
index 595e097ae6..9a1af93943 100644
--- a/src/ildasm/dis.h
+++ b/src/ildasm/dis.h
@@ -152,24 +152,24 @@ char *DumpGenericPars(__inout_ecount(SZSTRING_SIZE) char* szString,
#define CHECK_REMAINING_SIZE if(ovadd_le((size_t)szString, SZSTRING_SIZE_M4, (size_t)szptr)) break;
#define SZSTRING_REMAINING_SIZE(x) (ovadd_le((size_t)szString,SZSTRING_SIZE,(size_t)(x))?0:(SZSTRING_SIZE-((size_t)(x)-(size_t)szString)))
-typedef int (*MetaDataGetDispenserFunc) (
+typedef int (STDAPICALLTYPE *MetaDataGetDispenserFunc) (
REFCLSID rclsid, // The class to desired.
REFIID riid, // Interface wanted on class factory.
LPVOID FAR *ppv); // Return interface pointer here.
-typedef int (*GetMetaDataInternalInterfaceFunc) (
+typedef int (STDAPICALLTYPE *GetMetaDataInternalInterfaceFunc) (
LPVOID pData, // [IN] in memory metadata section
ULONG cbData, // [IN] size of the metadata section
DWORD flags, // [IN] CorOpenFlags
REFIID riid, // [IN] desired interface
void **ppv); // [OUT] returned interface
-typedef int (*GetMetaDataInternalInterfaceFromPublicFunc) (
+typedef int (STDAPICALLTYPE *GetMetaDataInternalInterfaceFromPublicFunc) (
IUnknown *pv, // [IN] Given interface
REFIID riid, // [IN] desired interface
void **ppv); // [OUT] returned interface
-typedef int (*GetMetaDataPublicInterfaceFromInternalFunc) (
+typedef int (STDAPICALLTYPE *GetMetaDataPublicInterfaceFromInternalFunc) (
void *pv, // [IN] Given interface
REFIID riid, // [IN] desired interface
void **ppv); // [OUT] returned interface
diff --git a/src/ildasm/dman.cpp b/src/ildasm/dman.cpp
index d0b525556b..30724fc795 100644
--- a/src/ildasm/dman.cpp
+++ b/src/ildasm/dman.cpp
@@ -10,7 +10,6 @@
#include "debugmacros.h"
#include "corpriv.h"
#include "dasmenum.hpp"
-#include "dasmgui.h"
#include "formattype.h"
#include "dis.h"
@@ -727,7 +726,7 @@ static void DumpResourceFile(void *GUICookie, BYTE *pRes, DWORD dwOffset, LPCWST
memcpy(&L,pParam->pRes+pParam->dwOffset,sizeof(DWORD));
sprintf_s(szString,SZSTRING_SIZE,COMMENT("%s// Offset: 0x%8.8X Length: 0x%8.8X"), g_szAsmCodeIndent,pParam->dwOffset,L);
printLine(pParam->GUICookie,szString);
- if ((!(g_Mode & MODE_GUI)) && (g_pFile != NULL)) // embedded resource -- dump as .resources file
+ if (g_pFile != NULL) // embedded resource -- dump as .resources file
{
FILE *pF = NULL;
_wfopen_s(&pF, pParam->wzFileName, W("wb"));
@@ -942,11 +941,6 @@ void DumpManifestResources(void* GUICookie)
else nManRes=0;
}
-#ifndef FEATURE_CORECLR
-// CLR internal hosting API
-extern ICLRRuntimeHostInternal *g_pCLRRuntimeHostInternal;
-#endif
-
IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie)
{
struct Param
@@ -996,7 +990,6 @@ IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie)
if(pdwSize && *pdwSize)
{
pbManifest += sizeof(DWORD);
-#ifdef FEATURE_CORECLR
if (SUCCEEDED(hr = getMetaDataInternalInterface(
pbManifest,
VAL32(*pdwSize),
@@ -1008,19 +1001,6 @@ IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie)
pParam->pImport,
IID_IMetaDataAssemblyImport,
(LPVOID *)&pParam->pAssemblyImport)))
-#else
- if (SUCCEEDED(hr = g_pCLRRuntimeHostInternal->GetMetaDataInternalInterface(
- pbManifest,
- VAL32(*pdwSize),
- ofRead,
- IID_IMDInternalImport,
- (LPVOID *)&pParam->pImport)))
- {
- if (FAILED(hr = g_pCLRRuntimeHostInternal->GetMetaDataPublicInterfaceFromInternal(
- pParam->pImport,
- IID_IMetaDataAssemblyImport,
- (LPVOID *)&pParam->pAssemblyImport)))
-#endif
{
sprintf_s(szString,SZSTRING_SIZE,RstrUTF(IDS_E_MDAFROMMDI),hr);
printLine(pParam->GUICookie,COMMENT(szString));
diff --git a/src/ildasm/dres.cpp b/src/ildasm/dres.cpp
index 53e1925cea..93e8e48c93 100644
--- a/src/ildasm/dres.cpp
+++ b/src/ildasm/dres.cpp
@@ -11,7 +11,6 @@
#include "debugmacros.h"
#include "corpriv.h"
#include "dasmenum.hpp"
-#include "dasmgui.h"
#include "formattype.h"
#include "dis.h"
#include "resource.h"
diff --git a/src/ildasm/event.bmp b/src/ildasm/event.bmp
deleted file mode 100644
index 99c3357d95..0000000000
--- a/src/ildasm/event.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/exe/CMakeLists.txt b/src/ildasm/exe/CMakeLists.txt
index 87cdd230f9..bf09be58b6 100644
--- a/src/ildasm/exe/CMakeLists.txt
+++ b/src/ildasm/exe/CMakeLists.txt
@@ -27,12 +27,10 @@ set(ILDASM_SOURCES
../dasm.cpp
../dasm_formattype.cpp
../dasm_mi.cpp
- ../dasm_pr.cpp
../dasm_sz.cpp
../dis.cpp
../dman.cpp
../dres.cpp
- ../gui.cpp
../ildasmpch.cpp
../windasm.cpp
)
@@ -73,4 +71,4 @@ else()
)
endif(CLR_CMAKE_PLATFORM_UNIX)
-install_clr(ildasm) \ No newline at end of file
+install_clr(ildasm)
diff --git a/src/ildasm/exe/ildasm.nativeproj b/src/ildasm/exe/ildasm.nativeproj
deleted file mode 100644
index 1a0583f457..0000000000
--- a/src/ildasm/exe/ildasm.nativeproj
+++ /dev/null
@@ -1,72 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--Modify this before importing the clr-wide settings-->
- <PropertyGroup>
- <ClrDontIncludeAllInterfaces>true</ClrDontIncludeAllInterfaces>
- </PropertyGroup>
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <IsDesktopTool>true</IsDesktopTool>
- <UseAtl>true</UseAtl>
- <AtlVer>mfc</AtlVer>
- <EntryPoint>winmain</EntryPoint>
- <LinkSubsystem>console</LinkSubsystem>
-
- <!-- PCH baloney -->
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>..\ildasmpch.cpp</PCHCompile>
- <PCHHeader>ildasmpch.h</PCHHeader>
-
- <CDefines>$(CDefines);__TODO_PORT_TO_WRAPPERS__</CDefines>
- <LinkUseCMT>true</LinkUseCMT>
- <UseMsvcrt>false</UseMsvcrt>
- </PropertyGroup>
-
- <PropertyGroup>
- <UserIncludes>$(UserIncludes);.;$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\tools\metainfo</UserIncludes>
- <CDefines>$(CDefines);UNICODE;_UNICODE;FEATURE_NO_HOST;__ILDASM__</CDefines>
- <OutputName>ildasm</OutputName>
- <FileToMarkForSigning>$(BinariesDirectory)\ildasm.exe</FileToMarkForSigning>
- <TargetType>PROGRAM</TargetType>
- <LinkGenerateManifest/>
- </PropertyGroup>
-
- <!--Leaf Project Items-->
- <ItemGroup>
- <LinkPreCrtLibs Include="$(ClrLibPath)\utilcodestaticnohost.lib">
- <ProjectReference>$(ClrSrcDirectory)utilcode\staticnohost\staticnohost.nativeproj</ProjectReference>
- </LinkPreCrtLibs>
- <LinkPreCrtLibs Include="$(ClrLibPath)\MDHotData.lib">
- <ProjectReference>$(ClrSrcDirectory)md\hotdata\full\mdhotdata.nativeproj</ProjectReference>
- </LinkPreCrtLibs>
- <TargetLib Include="$(ClrLibPath)\corguids.lib">
- <ProjectReference>$(ClrSrcDirectory)inc\corguids.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(SdkLibPath)\mscoree.lib" />
- <TargetLib Include="$(SdkLibPath)\gdi32.lib" />
- <TargetLib Include="$(SdkLibPath)\comctl32.lib" />
- <TargetLib Include="$(SdkLibPath)\comdlg32.lib" />
- <TargetLib Include="$(SdkLibPath)\ole32.lib" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- <TargetLib Include="$(SdkLibPath)\user32.lib" />
- <TargetLib Include="$(SdkLibPath)\shell32.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\htmlhelp.lib" />
- </ItemGroup>
- <ItemGroup>
- <RCResourceFile Include="..\dasm.rc" />
- <CppCompile Include="..\dasm_pr.cpp" />
- <CppCompile Include="..\gui.cpp" />
- <CppCompile Include="..\dis.cpp" />
- <CppCompile Include="..\dman.cpp" />
- <CppCompile Include="..\dres.cpp" />
- <CppCompile Include="..\ceeload.cpp" />
- <CppCompile Include="..\dasm_formatType.cpp" />
- <CppCompile Include="..\dasm_mi.cpp" />
- <CppCompile Include="..\dasm_sz.cpp" />
- <CppCompile Include="..\dasm.cpp" />
- <CppCompile Include="..\windasm.cpp" />
- <DataFile Include="..\ildasm.chm" />
- </ItemGroup>
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/ildasm/field.bmp b/src/ildasm/field.bmp
deleted file mode 100644
index aa09fb2f54..0000000000
--- a/src/ildasm/field.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/gui.cpp b/src/ildasm/gui.cpp
deleted file mode 100644
index 83501e66ef..0000000000
--- a/src/ildasm/gui.cpp
+++ /dev/null
@@ -1,4013 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "ildasmpch.h"
-
-#ifndef FEATURE_CORECLR
-#include "debugmacros.h"
-#include "corpriv.h"
-#include "ceeload.h"
-#include "dasmgui.h"
-#include "dasmenum.hpp"
-#include "dis.h"
-#include "resource.h"
-#include "gui.h"
-#include "formattype.h"
-#include "..\tools\metainfo\mdinfo.h"
-#include <NdpVersion.h>
-
-struct MemberInfo {
- const char *pszMemberName;
- DWORD dwAttrs;
- ULONG cComSig;
- PCCOR_SIGNATURE pComSig;
- mdToken token;
-};
-
-int __cdecl memberCmp(const void *elem1, const void *elem2 ) {
- MemberInfo* mem1 = (MemberInfo*) elem1;
- MemberInfo* mem2 = (MemberInfo*) elem2;
- return(strcmp(mem1->pszMemberName, mem2->pszMemberName));
-}
-
-//
-// Global buffer, filled by AddOPCode
-//
-char *GlobalBuffer = new (nothrow) char[65535];
-ULONG GlobalBufferLen = 65535;
-ULONG InGlobalBuffer;
-//
-// Global HINSTANCE
-//
-extern HINSTANCE g_hInstance;
-extern HINSTANCE g_hResources;
-
-//
-// Main window
-//
-HWND g_hwndMain;
-
-//
-// Treeview for main window
-//
-HWND g_hwndTreeView;
-
-//
-// Treeview class full name / partial name switch
-//
-BOOL g_fTreeViewFCN = TRUE;
-
-//
-// Assembly info window (child of main)
-//
-HWND g_hwndAsmInfo;
-extern IMetaDataAssemblyImport* g_pAssemblyImport;
-void DumpAssembly(void* GUICookie, BOOL fFullDump);
-IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie);
-
-//
-// Global image list
-//
-HIMAGELIST g_hImageList;
-
-//
-// Menu for main window
-//
-HMENU g_hMenu, g_hMetaInfoMenu, g_hFileMenu, g_hViewMenu, g_hFontMenu;
-
-//
-// Flags
-//
-BOOL g_fFullMemberInfo = FALSE; // Show member type? (method, field, event, prop)
-BOOL g_fSortByName = TRUE; // Sort members in tree?
-//
-// Module name of loaded DLL/EXE
-//
-const char *g_pszModule;
-
-//
-// Interlocked variable for setting char dimensions once
-//
-long g_SetCharDimensions = 0;
-
-unsigned g_uFindReplaceMsg = 0;
-HWND g_hFindText = NULL;
-//
-// Bitmap handles
-//
-HBITMAP g_hBitmaps[LAST_IMAGE_INDEX];
-
-//
-// Root item for listview
-//
-HTREEITEM g_hRoot;
-
-// Global graphics
-HBRUSH g_hWhiteBrush;
-HFONT g_hFixedFont;
-HFONT g_hSmallFont;
-HBITMAP g_hMethodBmp, g_hFieldBmp, g_hClassBmp, g_hStaticMethodBmp, g_hStaticFieldBmp, g_hQuestionBmp;
-LOGFONTW g_strLogFontTree, g_strLogFontDasm;
-CHOOSEFONTW g_strChFontTree, g_strChFontDasm;
-
-struct GUI_Info
-{
- LOGFONTW* plfTree;
- LOGFONTW* plfDasm;
- int x;
- int y;
- int w;
- int h;
-};
-
-GUI_Info guiInfo = {&g_strLogFontTree, &g_strLogFontDasm, CW_USEDEFAULT, CW_USEDEFAULT, 400,600};
-
-// Text info
-long g_Height;
-long g_MaxCharWidth;
-
-// Currently selected treeview item
-HTREEITEM g_CurSelItem;
-
-extern IMAGE_COR20_HEADER * g_CORHeader;
-extern BOOL g_fDumpTokens;
-extern BOOL g_fShowBytes;
-extern BOOL g_fShowSource;
-extern BOOL g_fTryInCode;
-extern BOOL g_fQuoteAllNames;
-extern BOOL g_fCAVerbal;
-extern BOOL g_fShowProgressBar;
-extern BOOL g_fDumpHeader;
-extern BOOL g_fDumpAsmCode;
-extern BOOL g_fDumpTokens;
-extern BOOL g_fDumpStats;
-extern BOOL g_fDumpMetaInfo;
-extern BOOL g_fDumpClassList;
-extern BOOL g_fInsertSourceLines;
-
-extern BOOL g_fLimitedVisibility;
-extern BOOL g_fHidePub;
-extern BOOL g_fHidePriv;
-extern BOOL g_fHideFam;
-extern BOOL g_fHideAsm;
-extern BOOL g_fHideFAA;
-extern BOOL g_fHideFOA;
-extern BOOL g_fHidePrivScope;
-extern BOOL g_fTDC;
-
-extern char g_szInputFile[]; // in UTF-8
-extern WCHAR g_wszFullInputFile[]; // in UTF-16
-extern ULONG g_ulMetaInfoFilter;
-extern char g_szOutputFile[]; // in UTF-8
-extern DWORD g_Mode;
-extern FILE* g_pFile;
-extern HINSTANCE g_hInstance;
-
-extern unsigned g_uCodePage;
-extern unsigned g_uConsoleCP;
-DWORD DumpResourceToFile(__in __nullterminated WCHAR* wzFileName); // see DRES.CPP
-//
-// Functions
-//
-BOOL RegisterWindowClasses();
-HWND CreateTreeView(HWND hwndParent);
-HTREEITEM AddOneItem(HTREEITEM hParent, const char *pszText, HTREEITEM hInsAfter, int iImage, HWND hwndTree, BOOL fExpanded);
-HWND GUIDisassemble(mdTypeDef cl, mdToken mbMember, __in __nullterminated char *pszWindowTitle);
-HTREEITEM AddClassToTreeView(HTREEITEM hParent, mdTypeDef cl);
-void AddGlobalFunctions();
-void CreateMenus();
-Namespace_t* FindNamespace(const char *pszNamespace);
-void GUICleanupClassItems();
-void SelectClassByName(__in __nullterminated char *pszFQName);
-void SelectClassByToken(mdToken tk);
-void DumpTreeItem(HTREEITEM hItem, FILE* pFile, __inout __nullterminated WCHAR* szIndent);
-HTREEITEM FindCreateNamespaceRoot(const char *pszNamespace);
-FILE* OpenOutput(__in __nullterminated const char* szFileName);
-FILE* OpenOutput(__in __nullterminated const WCHAR* wzFileName);
-
-#undef SendMessageW
-#undef PostMessageW
-#undef CreateWindowExW
-#undef DefWindowProcW
-#undef RegisterClassExW
-#undef RegisterClassW
-#undef SetWindowTextW
-#undef GetWindowTextW
-#undef MessageBoxW
-
-char* UtfToAnsi(__in __nullterminated const char* sz) { return UnicodeToAnsi(UtfToUnicode(sz));}
-
-LRESULT CALLBACK DisassemblyWndProc(
- HWND hwnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam
-);
-
-LRESULT CALLBACK MainWndProc(
- HWND hwnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam
-);
-
-ClassItem_t *AddClassToGUI(mdTypeDef cl, UINT uImageIndex,
- const char *pszNamespace, const char *pszClassName, DWORD cSubItems, HTREEITEM *phRoot);
-
-void AddMethodToGUI(
- mdTypeDef cl,
- ClassItem_t * pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- const char *pszMethodName,
- PCCOR_SIGNATURE pComSig,
- unsigned cComSig,
- mdMethodDef mbMethod,
- DWORD dwAttrs
-);
-
-void AddFieldToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- const char *pszFieldName,
- const char *pszSignature,
- mdFieldDef mbField,
- DWORD dwAttrs
-);
-
-void AddEventToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD dwClassAttrs,
- mdEvent mbEvent
-);
-
-void AddPropToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD dwClassAttrs,
- mdProperty mbProp
-);
-
-DynamicArray<DisasmBox_t> *g_DisasmBox;
-DWORD g_NumDisasmBoxes=0;
-
-DynamicArray<ClassItem_t> *g_ClassItemList;
-DWORD g_NumClassItems=0;
-
-DynamicArray<Namespace_t> *g_NamespaceList;
-DWORD g_NumNamespaces=0;
-
-
-ClassItem_t *FindClassItem(HTREEITEM hItem);
-ClassItem_t *FindClassItem(mdTypeDef cl);
-ClassItem_t *FindClassItem(__in_opt __nullterminated char *pszNamespace, __in __nullterminated char *pszName);
-
-// Find disasm box among opened by class and member tokens
-DisasmBox_t* FindDisasmBox(mdToken tkClass, mdToken tkMember)
-{
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- if (((*g_DisasmBox)[i].tkClass == tkClass)
- &&((*g_DisasmBox)[i].tkMember == tkMember))
- return &(*g_DisasmBox)[i];
- }
- return NULL;
-}
-// Find disasm box among opened by the container hwnd
-DisasmBox_t* FindDisasmBoxByHwnd(HWND hwndContainer)
-{
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- if ((*g_DisasmBox)[i].hwndContainer == hwndContainer)
- return &(*g_DisasmBox)[i];
- }
- return NULL;
-}
-//
-// Add a new disassembly box to the global list of them
-//
-// hwndContainer - parent window
-// hwndChild - listview
-//
-void AddDisasmBox(HWND hwndContainer, HWND hwndChild, HMENU hMenu, mdToken tkClass, mdToken tkMember)
-{
- (*g_DisasmBox)[g_NumDisasmBoxes].hwndContainer = hwndContainer;
- (*g_DisasmBox)[g_NumDisasmBoxes].hwndChild = hwndChild;
- (*g_DisasmBox)[g_NumDisasmBoxes].hMenu = hMenu;
- (*g_DisasmBox)[g_NumDisasmBoxes].tkClass = tkClass;
- (*g_DisasmBox)[g_NumDisasmBoxes].tkMember = tkMember;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lStructSize = sizeof(FINDREPLACEW);
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.hwndOwner = hwndContainer;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.Flags = FR_DOWN|FR_DIALOGTERM;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpstrFindWhat = (LPWSTR)((*g_DisasmBox)[g_NumDisasmBoxes].wzFind);
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpstrReplaceWith = NULL;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.wFindWhatLen = 120;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.wReplaceWithLen = 0;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lCustData = 0;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpfnHook = NULL;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpTemplateName = NULL;
- g_NumDisasmBoxes++;
-}
-
-void UpdateDisasmBox(DisasmBox_t* pBox, HWND hwndContainer, HWND hwndChild, HMENU hMenu)
-{
- pBox->hwndContainer = hwndContainer;
- pBox->hwndChild = hwndChild;
- pBox->hMenu = hMenu;
- pBox->strFR.hwndOwner = hwndContainer;
-}
-//
-// Given a container window, find the associated disassembly window
-//
-HWND FindAssociatedDisassemblyListBox(HWND hwndContainer)
-{
- DWORD i;
-
- for (i = 0; i < g_NumDisasmBoxes; i++)
- {
- if ((*g_DisasmBox)[i].hwndContainer == hwndContainer)
- return (*g_DisasmBox)[i].hwndChild;
- }
-
- return NULL;
-}
-
-//
-// Given a disassembly window, find the associated container window
-//
-HWND FindAssociatedDisassemblyContainer(HWND hwndChild)
-{
- DWORD i;
-
- for (i = 0; i < g_NumDisasmBoxes; i++)
- {
- if ((*g_DisasmBox)[i].hwndChild == hwndChild)
- return (*g_DisasmBox)[i].hwndContainer;
- }
-
- return NULL;
-}
-
-
-void RemoveDisasmBox(HWND hwndContainer)
-{
- DWORD i;
-
- for (i = 0; i < g_NumDisasmBoxes; i++)
- {
- if ((*g_DisasmBox)[i].hwndContainer == hwndContainer)
- {
- memcpy(&(*g_DisasmBox)[i], &(*g_DisasmBox)[i+1], (g_NumDisasmBoxes-i-1)*sizeof(DisasmBox_t));
- g_NumDisasmBoxes--;
- break;
- }
- }
-}
-
-
-void RemoveItemsFromList()
-{
- TreeView_DeleteAllItems(g_hwndTreeView);
-}
-
-
-BOOL RefreshList()
-{
- GUICleanupClassItems();
- return GUIAddItemsToList();
-}
-
-
-void GUISetModule(__in __nullterminated const char *pszModule)
-{
- g_pszModule = pszModule;
-}
-
-
-TreeItem_t *FindClassMemberByName(ClassItem_t *pClassItem,
- __in __nullterminated char *pszFindName,
- __in __nullterminated char *pszFindSig)
-{
- HRESULT hr;
- DWORD i;
-
- // do in two passes, fields first
- for (i = 0; i < pClassItem->SubItems; i++)
- {
- TreeItem_t *pItem;
- const char *pszMemberName;
- const char *pszMemberSig;
- DWORD dwAttrs;
-
- CQuickBytes qbMemberSig;
-
- PCCOR_SIGNATURE pComSig;
- ULONG cComSig;
-
-
- pItem = &pClassItem->pMembers[i];
- if (pItem->Discriminator != TREEITEM_TYPE_MEMBER)
- continue;
-
- if (TypeFromToken(pItem->mbMember) == mdtMethodDef)
- {
- if (FAILED(g_pImport->GetMethodDefProps(pItem->mbMember, &dwAttrs)))
- {
- continue;
- }
- if (FAILED(g_pImport->GetNameOfMethodDef(pItem->mbMember, &pszMemberName)))
- {
- continue;
- }
- if (FAILED(g_pImport->GetSigOfMethodDef(pItem->mbMember, &cComSig, &pComSig)))
- {
- continue;
- }
- }
- else
- {
- if (FAILED(g_pImport->GetFieldDefProps(pItem->mbMember, &dwAttrs)))
- {
- continue;
- }
- if (FAILED(g_pImport->GetNameOfFieldDef(pItem->mbMember, &pszMemberName)))
- {
- continue;
- }
- if (FAILED(g_pImport->GetSigOfFieldDef(pItem->mbMember, &cComSig, &pComSig)))
- {
- continue;
- }
- }
- MAKE_NAME_IF_NONE(pszMemberName,pItem->mbMember);
- qbMemberSig.Shrink(0);
- pszMemberSig = PrettyPrintSig(pComSig, cComSig, "", &qbMemberSig, g_pImport,NULL);
-
- // @todo: GUI IL is so that NDView can call into DASM with/GUI; NDView uses Reflection API
- // which doesn't let us get a valid signature.
- // If GUI IL only, then ignore signature if it's NULL
- if (IsGuiILOnly()) {
- if (!strcmp(pszMemberName, pszFindName)) {
- if ((pszFindSig != NULL) && strcmp(pszMemberSig, pszFindSig)) continue;
- return pItem;
- }
- } else {
- if (!strcmp(pszMemberName, pszFindName) && !strcmp(pszMemberSig, pszFindSig))
- return pItem;
- }
- }
-
- return NULL;
-}
-
-// Kick of a disassembly window
-// Return TRUE if window opened ok, and FALSE if there's an error
-BOOL DisassembleMemberByName(__in __nullterminated char *pszClassName,
- __in __nullterminated char *pszMemberName,
- __in_opt __nullterminated char *pszSig)
-{
- char szClassName[MAX_CLASSNAME_LENGTH];
- char szClassNamespace[MAX_CLASSNAME_LENGTH];
- char *pszClassNamespace;
- char *p;
-
- p = ns::FindSep(pszClassName);
- if (p == NULL)
- {
- strcpy_s(szClassName, MAX_CLASSNAME_LENGTH,pszClassName);
- pszClassNamespace = NULL;
- }
- else
- {
- strncpy_s(szClassNamespace, MAX_CLASSNAME_LENGTH, pszClassName, p - pszClassName);
- szClassNamespace[ p - pszClassName ] = '\0';
- pszClassNamespace = szClassNamespace;
-
- strcpy_s(szClassName, MAX_CLASSNAME_LENGTH, p+1);
- }
-
- ClassItem_t *pClassItem = FindClassItem(pszClassNamespace, szClassName);
-
- if (pClassItem != NULL)
- {
- TreeItem_t *pTreeItem;
-
- pTreeItem = FindClassMemberByName(pClassItem, pszMemberName, pszSig);
-
- if (pTreeItem != NULL)
- {
- DWORD dwAttrs;
- DWORD dwImplAttrs;
-
- // What is this member?
-
- if (TypeFromToken(pTreeItem->mbMember) == mdtMethodDef)
- {
- char* szText;
- HWND fOK=NULL;
- if (FAILED(g_pImport->GetMethodDefProps(pTreeItem->mbMember, &dwAttrs)))
- {
- goto ErrorHere;
- }
- if (FAILED(g_pImport->GetMethodImplProps(pTreeItem->mbMember, NULL, &dwImplAttrs)))
- {
- goto ErrorHere;
- }
-
- // Can't be abstract or native
- if (IsMdAbstract(dwAttrs) || IsMiInternalCall(dwImplAttrs))
- return FALSE;
-
- szText = new (nothrow) char[4096];
- if(szText)
- {
- TVITEMA SelItem;
-
- // Get the name of this item so that we can title the disassembly window
- memset(&SelItem, 0, sizeof(SelItem));
- SelItem.mask = TVIF_TEXT;
- SelItem.pszText = szText;
- SelItem.hItem = pTreeItem->hItem;
- SelItem.cchTextMax = 4095;
-
- WCHAR* wzText = (WCHAR*)szText;
- SendMessageW(g_hwndTreeView, TVM_GETITEMW, 0, (LPARAM) (LPTVITEMW) &SelItem);
- unsigned L = ((unsigned)wcslen(wzText)+1)*3;
- char* szUTFText = new (nothrow) char[L];
- if(szUTFText)
- {
- memset(szUTFText,0,L);
- WszWideCharToMultiByte(CP_UTF8,0,wzText,-1,szUTFText,L,NULL,NULL);
- delete[] wzText;
- szText = szUTFText;
- }
-
- fOK = GUIDisassemble(pClassItem->cl, pTreeItem->mbMember, szText);
- delete[] szText;
- }
- if (fOK == NULL) {
- goto ErrorHere;
- }
- }
- } // endif (pTreeItem != NULL)
- else {
- goto ErrorHere;
- }
-
- } else {
- goto ErrorHere;
- }
-
- return TRUE;
-
-ErrorHere:
- char pzText[300];
- sprintf_s(pzText, 300,RstrUTF(IDS_CANTVIEW_TX) /*"Can't view %s::%s(%s)"*/, pszClassName, pszMemberName, pszSig);
-
- WszMessageBox(g_hwndMain, UtfToUnicode(pzText), RstrW(IDS_CANTVIEW_HD) /*"Can't View IL"*/, MB_OK | MB_ICONERROR | GetDasmMBRTLStyle() );
-
-
- return FALSE;
-}
-
-//HTREEITEM AddInfoItemToClass(HTREEITEM hParent, ClassItem_t *pClassItem, const char *pszText, const char *pszStoredInfoText)
-HTREEITEM AddInfoItemToClass(HTREEITEM hParent, ClassItem_t *pClassItem, const char *pszText, mdToken tk)
-{
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
- pClassItem->pMembers[pClassItem->CurMember].hItem = AddOneItem(
- pClassItem->hItem, pszText, hParent, RED_ARROW_IMAGE_INDEX, g_hwndTreeView, FALSE
- );
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_INFO;
- //pClassItem->pMembers[pClassItem->CurMember].pszText = (char *) pszStoredInfoText;
- pClassItem->pMembers[pClassItem->CurMember].mbMember = tk;
- pClassItem->CurMember++;
-
- return pClassItem->pMembers[pClassItem->CurMember-1].hItem;
-}
-
-struct ClassDescr
-{
- mdToken tk;
- const char* szName;
-};
-static int __cdecl classDescrCmp(const void *op1, const void *op2)
-{
- return strcmp(((ClassDescr*)op1)->szName,((ClassDescr*)op2)->szName);
-}
-
-unsigned AddClassesWithEncloser(mdToken tkEncloser, HTREEITEM hParent)
-{
- unsigned i, N=0;
- for (i = 0; i < g_NumClasses; i++)
- {
- if(g_cl_enclosing[i] == tkEncloser) N++;
- }
-
- if(N)
- {
- ClassDescr* rClassDescr = new (nothrow) ClassDescr[N];
- const char *pszClassName,*pszNamespace;
- for (i = 0, N = 0; i < g_NumClasses; i++)
- {
- if(g_cl_enclosing[i] == tkEncloser)
- {
- rClassDescr[N].tk = g_cl_list[i];
- if (FAILED(g_pImport->GetNameOfTypeDef(g_cl_list[i], &pszClassName, &pszNamespace)))
- {
- pszClassName = pszNamespace = "Invalid TypeDef record";
- }
- // doesn't throw here, so rClassDescr doesn't leak
- MAKE_NAME_IF_NONE(pszClassName,g_cl_list[i]);
- rClassDescr[N].szName = pszClassName;
- N++;
- }
- }
- if(g_fSortByName) qsort(&rClassDescr[0],N,sizeof(ClassDescr),classDescrCmp);
- for(i = 0; i < N; i++) AddClassToTreeView(hParent,rClassDescr[i].tk);
- delete[] rClassDescr;
- }
- return N;
-}
-
-static int __cdecl stringCmp(const void *op1, const void *op2)
-{
- return strcmp(*((char**)op1), *((char**)op2));
- //return(strlen(*((char**)op1)) - strlen(*((char**)op2)));
-}
-
-UINT GetDasmMBRTLStyle() {
- UINT RTLMessageBoxStyle = 0;
- WCHAR* pwStr = RstrW(IDS_RTL);
- if( wcscmp(pwStr, L"RTL_True") == 0) {
- RTLMessageBoxStyle = 0x00080000 |0x00100000; // MB_RIGHT || MB_RTLREADING
- }
- return RTLMessageBoxStyle;
-}
-
-void GUIDumpAssemblyInfo()
-{
- memset(GlobalBuffer,0,GlobalBufferLen);
- InGlobalBuffer = 0;
- if(g_pAssemblyImport==NULL) g_pAssemblyImport = GetAssemblyImport((void*)g_hwndAsmInfo);
- if(g_pAssemblyImport)
- {
- if(g_fDumpRTF) DumpRTFPrefix((void *)g_hwndAsmInfo,FALSE);
- DumpAssembly((void *)g_hwndAsmInfo,FALSE);
- if(g_fDumpRTF) DumpRTFPostfix((void *)g_hwndAsmInfo);
- }
-
- if(g_uCodePage == 0xFFFFFFFF)
- SendMessageW((HWND)g_hwndAsmInfo,WM_SETTEXT,0, (LPARAM)GlobalBuffer);
- else
- {
- UINT32 L = (UINT32)strlen(GlobalBuffer);
- WCHAR* wz = new (nothrow) WCHAR[L+4];
- if(wz)
- {
- memset(wz,0,sizeof(WCHAR)*(L+2));
- int x = WszMultiByteToWideChar(CP_UTF8,0,GlobalBuffer,-1,wz,L+2);
- if(g_fDumpRTF)
- {
- x = (int)SendMessageA((HWND)g_hwndAsmInfo,WM_SETTEXT,0, (LPARAM)UnicodeToAnsi(wz));
- }
- else
- {
- x = (int)WszSendMessage((HWND)g_hwndAsmInfo,WM_SETTEXT,0, (LPARAM)wz);
- }
- delete[] wz;
- }
- }
-}
-
-BOOL GUIAddItemsToList()
-{
- DWORD i,NumGlobals=0;
- HENUMInternal hEnumMethod;
-
- RemoveItemsFromList();
- g_NumClassItems = 0;
- g_NumNamespaces = 0;
-
- g_hRoot = AddOneItem(
- (HTREEITEM)NULL,
- g_pszModule,
- (HTREEITEM)TVI_ROOT,
- FIELD_IMAGE_INDEX,
- g_hwndTreeView,
- TRUE
- );
-
- if (SUCCEEDED(g_pImport->EnumGlobalFunctionsInit(&hEnumMethod)))
- {
- NumGlobals = g_pImport->EnumGetCount(&hEnumMethod);
- g_pImport->EnumClose(&hEnumMethod);
- }
- if (SUCCEEDED(g_pImport->EnumGlobalFieldsInit(&hEnumMethod)))
- {
- NumGlobals += g_pImport->EnumGetCount(&hEnumMethod);
- g_pImport->EnumClose(&hEnumMethod);
- }
- (*g_ClassItemList)[0].hItem = g_hRoot;
- (*g_ClassItemList)[0].cl = 0;
- (*g_ClassItemList)[0].SubItems = NumGlobals+1;
- (*g_ClassItemList)[0].CurMember = 0;
- (*g_ClassItemList)[0].pMembers = new (nothrow) TreeItem_t[NumGlobals+1];
- g_NumClassItems++;
-
- //AddInfoItemToClass((HTREEITEM)TVI_ROOT, &(*g_ClassItemList)[0], " M A N I F E S T", "__MANIFEST__");
- AddInfoItemToClass((HTREEITEM)TVI_ROOT, &(*g_ClassItemList)[0], " M A N I F E S T", 0xFFFFFFFF);
-
- if (g_NumClasses != 0)
- {
- //create root namespaces
- {
- char** rszNamespace = new (nothrow) char*[g_NumClasses];
- ULONG ulNamespaces=0;
- for (i = 0; i < g_NumClasses; i++)
- {
- if (g_cl_enclosing[i] == mdTypeDefNil) // nested classes don't have separate namespaces
- {
- const char *pszClassName, *pszNameSpace;
- if (FAILED(g_pImport->GetNameOfTypeDef(
- g_cl_list[i],
- &pszClassName,
- &pszNameSpace)))
- {
- pszClassName = pszNameSpace = "Invalid TypeDef record";
- }
- if ((pszNameSpace != NULL) && (*pszNameSpace != 0))
- {
- rszNamespace[ulNamespaces++] = (char*)pszNameSpace;
- }
- }
- }
- if (ulNamespaces != 0)
- {
- qsort(&rszNamespace[0],ulNamespaces,sizeof(char*),stringCmp);
- for(i = 0; i < ulNamespaces; i++) FindCreateNamespaceRoot(rszNamespace[i]);
- }
- delete[] rszNamespace;
- }
- AddClassesWithEncloser(mdTypeDefNil,NULL);
- }// end if (g_NumClasses)
- AddGlobalFunctions();
-
- WszSendMessage(g_hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)g_hRoot);
- EnableMenuItem(g_hMenu,(UINT)(UINT_PTR)g_hViewMenu, MF_ENABLED);
- EnableMenuItem(g_hFileMenu,IDM_DUMP,MF_ENABLED);
- EnableMenuItem(g_hFileMenu,IDM_DUMP_TREE,MF_ENABLED);
- DrawMenuBar(g_hwndMain);
-
- {
- WszMultiByteToWideChar(CP_UTF8,0,g_szInputFile,-1,wzUniBuf,2048);
- wcscat_s(wzUniBuf,2048,L" - IL DASM");
- for(int cnt=0; cnt<100; cnt++)
- {
- SendMessageW(g_hwndMain,WM_SETTEXT, 0, (LPARAM)wzUniBuf);
- SendMessageW(g_hwndMain,WM_GETTEXT, 2048, (LPARAM)&wzUniBuf[2048]);
- wzUniBuf[2047]=0;
- if(0 == wcscmp(wzUniBuf,&wzUniBuf[2048])) break;
- }
- }
-
- if (IsGuiILOnly()) {
- ShowWindow(g_hwndMain, SW_HIDE);
- } else {
- ShowWindow(g_hwndMain, SW_SHOW);
- }
- UpdateWindow(g_hwndMain);
- //GUIDisassemble(0,0,"MANIFEST");
- g_Mode &= ~MODE_GUI;
- DumpManifest(NULL);
- g_Mode |= MODE_GUI;
-
- GUIDumpAssemblyInfo();
-
- TreeView_SelectItem(g_hwndTreeView,g_hRoot);
- SetFocus(g_hwndTreeView);
- return TRUE;
-}
-
-
-//
-// Find class item by class token
-//
-ClassItem_t* ClassItemByToken(mdTypeDef cl)
-{
- for(ULONG i=0; i < g_NumClassItems; i++)
- {
- if((*g_ClassItemList)[i].cl == cl) return &(*g_ClassItemList)[i];
- }
- return NULL;
-}
-
-// Factored out of AddClassToTreeView for its big stack consumption (AddClassToTreeView is
-// called recursively via AddClassesWithEncloser).
-static void AddClassToTreeView_PrettyPrintClass(mdTypeRef crType, LPCUTF8 pszFormat, __out_ecount(cBufferSize) char *pszBuffer, size_t cBufferSize)
-{
- CQuickBytes out;
- sprintf_s(pszBuffer, cBufferSize, pszFormat, PrettyPrintClass(&out, crType, g_pImport));
-}
-
-//
-// Add a class and its members
-//
-#ifdef _PREFAST_
-#pragma warning(push)
-#pragma warning(disable:21000) // Suppress PREFast warning about overly large function
-#endif
-HTREEITEM AddClassToTreeView(HTREEITEM hParent, mdTypeDef cl)
-{
- HRESULT hr;
- ClassItem_t *pClassItem;
- HTREEITEM hClassRoot;
- HTREEITEM hNamespaceRoot = hParent;
- HTREEITEM hPrimaryInfo;
- HTREEITEM hLast;
- mdToken *pMemberList = NULL;
- HENUMInternal hEnumMethod; // enumerator for method defs
- HENUMInternal hEnumField; // enumerator for fields
- HENUMInternal hEnumEvent; // enumerator for events
- HENUMInternal hEnumProp; // enumerator for properties
- DWORD NumMembers;
- const char *pszClassName; // name associated with this CL
- const char *pszNamespace;
- DWORD dwClassAttrs;
- mdTypeRef crExtends;
- mdInterfaceImpl ii;
- DWORD NumInterfaces;
- DWORD i;
- char *szPrimaryInfo; // public class foo extends bar
-// char *szFullClassName;
- DWORD SubItems;
- const char *pszSuperName = NULL;
- HENUMInternal hEnumII; // enumerator for interface impl
- mdCustomAttribute *rCA;
- ULONG ulCAs;
- UINT uImageIndex = CLASS_IMAGE_INDEX;
- BOOL bIsEnum = FALSE;
- BOOL bIsValueType = FALSE;
- BOOL bExtendsSysObject=FALSE;
-
- if (FAILED(g_pImport->GetNameOfTypeDef(
- cl,
- &pszClassName,
- &pszNamespace)))
- {
- return FALSE;
- }
- MAKE_NAME_IF_NONE(pszClassName,cl);
- g_pImport->GetTypeDefProps(
- cl,
- &dwClassAttrs,
- &crExtends
- );
- if(g_fLimitedVisibility)
- {
- if(g_fHidePub && (IsTdPublic(dwClassAttrs)||IsTdNestedPublic(dwClassAttrs))) return NULL;
- if(g_fHidePriv && (IsTdNotPublic(dwClassAttrs)||IsTdNestedPrivate(dwClassAttrs))) return NULL;
- if(g_fHideFam && IsTdNestedFamily(dwClassAttrs)) return NULL;
- if(g_fHideAsm && IsTdNestedAssembly(dwClassAttrs)) return NULL;
- if(g_fHideFOA && IsTdNestedFamORAssem(dwClassAttrs)) return NULL;
- if(g_fHideFAA && IsTdNestedFamANDAssem(dwClassAttrs)) return NULL;
- }
- hr = g_pImport->EnumInit(
- mdtInterfaceImpl,
- cl,
- &hEnumII);
- if (FAILED(hr))
- return FALSE;
-
- NumInterfaces = g_pImport->EnumGetCount(&hEnumII);
- hr = g_pImport->EnumInit(mdtMethodDef, cl, &hEnumMethod);
- if (FAILED(hr))
- {
- printf("Unable to enum methods\n");
- return FALSE;
- }
- NumMembers = g_pImport->EnumGetCount(&hEnumMethod);
-
- hr = g_pImport->EnumInit(mdtFieldDef, cl, &hEnumField);
- if (FAILED(hr))
- {
- g_pImport->EnumClose(&hEnumMethod);
- printf("Unable to enum fields\n");
- return FALSE;
- }
- NumMembers += g_pImport->EnumGetCount(&hEnumField);
-
- hr = g_pImport->EnumInit(mdtEvent, cl, &hEnumEvent);
- if (FAILED(hr))
- {
- g_pImport->EnumClose(&hEnumMethod);
- g_pImport->EnumClose(&hEnumField);
- printf("Unable to enum events\n");
- return FALSE;
- }
- NumMembers += g_pImport->EnumGetCount(&hEnumEvent);
-
- hr = g_pImport->EnumInit(mdtProperty, cl, &hEnumProp);
- if (FAILED(hr))
- {
- g_pImport->EnumClose(&hEnumMethod);
- g_pImport->EnumClose(&hEnumField);
- g_pImport->EnumClose(&hEnumEvent);
- printf("Unable to enum properties\n");
- return FALSE;
- }
- NumMembers += g_pImport->EnumGetCount(&hEnumProp);
- if (NumMembers > 0)
- {
- pMemberList = new (nothrow) mdToken[NumMembers];
- if (pMemberList == NULL)
- {
- // close enum before return
- g_pImport->EnumClose(&hEnumMethod);
- g_pImport->EnumClose(&hEnumField);
- g_pImport->EnumClose(&hEnumEvent);
- g_pImport->EnumClose(&hEnumProp);
- return FALSE;
- }
-
- for (i = 0; g_pImport->EnumNext(&hEnumField, &pMemberList[i]); i++);
- for (; g_pImport->EnumNext(&hEnumMethod, &pMemberList[i]); i++);
- for (; g_pImport->EnumNext(&hEnumEvent, &pMemberList[i]); i++);
- for (; g_pImport->EnumNext(&hEnumProp, &pMemberList[i]); i++);
- _ASSERTE(i == NumMembers);
-
- }
- else
- {
- pMemberList = NULL;
- }
-
- // Add class root to treeview
- SubItems = NumMembers + NumInterfaces + 3;
- if (!IsNilToken(crExtends))
- {
- LPCSTR szClassName="";
- LPCSTR szNameSpace="";
- SubItems++;
- if(TypeFromToken(crExtends)==mdtTypeRef)
- {
- if (FAILED(g_pImport->GetNameOfTypeRef(crExtends, &szNameSpace, &szClassName)))
- {
- return FALSE;
- }
- if(!(strcmp(szNameSpace,"System") || strcmp(szClassName, "Object")))
- {
- SubItems--;
- bExtendsSysObject = TRUE;
- }
- }
- else if (TypeFromToken(crExtends) == mdtTypeDef)
- {
- if (FAILED(g_pImport->GetNameOfTypeDef(crExtends, &szClassName, &szNameSpace)))
- {
- return FALSE;
- }
- }
-
- bIsEnum = (!strcmp(szNameSpace,"System"))&&(!strcmp(szClassName,"Enum"));
-
- bIsValueType = (!strcmp(szNameSpace,"System"))&&(!strcmp(szClassName,"ValueType"))
- && (strcmp(pszNamespace,"System") || strcmp(pszClassName,"Enum"));
- }
- {
- HCORENUM hEnum = NULL;
- rCA = new (nothrow) mdCustomAttribute[4096];
- g_pPubImport->EnumCustomAttributes(&hEnum, cl, 0, rCA, 4096, &ulCAs);
- SubItems += ulCAs;
- g_pPubImport->CloseEnum( hEnum);
- }
- for (i = 0; i < g_NumClasses; i++)
- {
- if(g_cl_enclosing[i] == cl) SubItems++;
- }
-
- if(IsTdInterface(dwClassAttrs)) uImageIndex = CLASSINT_IMAGE_INDEX;
- if(bIsValueType) uImageIndex = CLASSVAL_IMAGE_INDEX;
- if(bIsEnum) uImageIndex = CLASSENUM_IMAGE_INDEX;
- char *szptr1;
- if((*pszNamespace != 0) && g_fTreeViewFCN)
- sprintf_s(szString,SZSTRING_SIZE,"%s.",pszNamespace);
- else
- szString[0] = 0;
- strcat_s(szString,SZSTRING_SIZE,pszClassName);
- szptr1 = &szString[strlen(szString)];
- // Count the type parameters -- could be too many for GUI
- DWORD NumTyPars;
- mdGenericParam tkTyPar;
- HCORENUM hEnumTyPar = NULL;
- unsigned jj;
-
- for(jj=0;
- SUCCEEDED(g_pPubImport->EnumGenericParams(&hEnumTyPar, cl, &tkTyPar, 1, &NumTyPars))
- && (NumTyPars != 0); jj++);
-
- if (jj > 0)
- {
- if(jj > 16)
- szptr1 += sprintf_s(szptr1,SZSTRING_REMAINING_SIZE(szptr1),"%s%d type parameters%s",LTN(),jj,GTN());
- else
- DumpGenericPars(szString,cl);
-
- uImageIndex = CLASS_GEN_IMAGE_INDEX;
- if(IsTdInterface(dwClassAttrs)) uImageIndex = CLASSINT_GEN_IMAGE_INDEX;
- if(bIsValueType) uImageIndex = CLASSVAL_GEN_IMAGE_INDEX;
- if(bIsEnum) uImageIndex = CLASSENUM_GEN_IMAGE_INDEX;
- }
-
- pClassItem = AddClassToGUI(cl, uImageIndex, pszNamespace, szString, SubItems, &hNamespaceRoot);
- if (pClassItem == NULL)
- return FALSE;
-
- hClassRoot = pClassItem->hItem;
-
- const size_t BUFFER_SIZE = 8192;
- szPrimaryInfo = new (nothrow) char[BUFFER_SIZE];
- strcpy_s(szPrimaryInfo, BUFFER_SIZE,".class ");
-
- if (IsTdInterface(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "interface ");
- //else if (IsTdUnmanagedValueType(dwClassAttrs)) strcat(szPrimaryInfo, "not_in_gc_heap value ");
- else if (bIsValueType) strcat_s(szPrimaryInfo, BUFFER_SIZE, "value ");
- else if (bIsEnum) strcat_s(szPrimaryInfo, BUFFER_SIZE, "enum ");
-
- if (IsTdPublic(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "public ");
- if (IsTdNotPublic(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "private ");
- if (IsTdNestedPublic(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested public ");
- if (IsTdNestedPrivate(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested private ");
- if (IsTdNestedFamily(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested family ");
- if (IsTdNestedAssembly(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested assembly ");
- if (IsTdNestedFamANDAssem(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested famandassem ");
- if (IsTdNestedFamORAssem(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested famorassem ");
- if (IsTdAbstract(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "abstract ");
- if (IsTdAutoLayout(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "auto ");
- if (IsTdSequentialLayout(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "sequential ");
- if (IsTdExplicitLayout(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "explicit ");
- if (IsTdAnsiClass(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "ansi ");
- if (IsTdUnicodeClass(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "unicode ");
- if (IsTdAutoClass(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "autochar ");
- if (IsTdImport(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "import ");
- if (IsTdWindowsRuntime(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "windowsruntime ");
- if (IsTdSerializable(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "serializable ");
-// if (IsTdEnum(dwClassAttrs)) strcat(szPrimaryInfo, "enum ");
- if (IsTdSealed(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "sealed ");
- if (IsTdBeforeFieldInit(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "beforefieldinit ");
- if (IsTdSpecialName(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "specialname ");
- if (IsTdRTSpecialName(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "rtspecialname ");
-
- if(g_fDumpTokens) sprintf_s(&szPrimaryInfo[strlen(szPrimaryInfo)], BUFFER_SIZE - strlen(szPrimaryInfo)," /*%08X*/",cl);
- hPrimaryInfo = AddInfoItemToClass(hClassRoot, pClassItem, szPrimaryInfo, NULL);
- hLast = hPrimaryInfo;
- // Now add nodes for extends, implements
- if (!IsNilToken(crExtends))
- {
- if (!bExtendsSysObject)
- {
- AddClassToTreeView_PrettyPrintClass(crExtends, " extends %s ", szPrimaryInfo, BUFFER_SIZE);
- hLast = AddInfoItemToClass(hLast, pClassItem, szPrimaryInfo, crExtends);
- }
- }
-
- if (NumInterfaces > 0)
- {
- for (i=0; g_pImport->EnumNext(&hEnumII, &ii); i++)
- {
- mdTypeRef crInterface;
-
- if (FAILED(g_pImport->GetTypeOfInterfaceImpl(ii, &crInterface)))
- {
- printf("Unable to get information about interface implementation\n");
- return FALSE;
- }
- {
- AddClassToTreeView_PrettyPrintClass(crInterface, " implements %s ", szPrimaryInfo, BUFFER_SIZE);
- hLast = AddInfoItemToClass(hLast, pClassItem, szPrimaryInfo, crInterface);
- }
- }
-
- // The assertion will fire if the enumerator is bad
- _ASSERTE(NumInterfaces == i);
-
- // close the enumerator
- g_pImport->EnumClose(&hEnumII);
- }
- delete[] szPrimaryInfo;
-
- BOOL fDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- // add info entries for custom attributes
- for(i = 0; i < ulCAs; i++)
- {
- char* pc;
- memset(GlobalBuffer,0,GlobalBufferLen);
- InGlobalBuffer = 0;
- DumpCustomAttribute(rCA[i],(void *)g_hwndTreeView,false);
- if(pc = strchr(GlobalBuffer,'\r')) strcpy_s(pc,6," ..."); // until the first <CR> only
- //hLast = AddInfoItemToClass(hLast, pClassItem, GlobalBuffer, "#####"); // this "name" is guaranteed to be unique!
- hLast = AddInfoItemToClass(hLast, pClassItem, GlobalBuffer, rCA[i]);
- }
- delete[] rCA;
-
- // Re-fetch the current class item ptr, dynamic array may have shifted
- pClassItem = ClassItemByToken(cl);
-
- // Add nested classes
- AddClassesWithEncloser(cl,pClassItem->hItem);
- pClassItem = ClassItemByToken(cl);
-
- MemberInfo* members = NULL;
- if (NumMembers != 0)
- {
- members = new (nothrow) MemberInfo[NumMembers];
- if (members == NULL)
- {
- if (pMemberList != NULL) delete[] pMemberList;
- return FALSE;
- }
- }
- // do in four passes, fields first
- MemberInfo* curMem = members;
- for (i = 0; i < NumMembers; i++)
- {
- if (TypeFromToken(pMemberList[i]) == mdtFieldDef)
- {
- curMem->token = pMemberList[i];
- if (FAILED(g_pImport->GetFieldDefProps(pMemberList[i], &curMem->dwAttrs)))
- {
- printf("Invalid FieldDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- if (FAILED(g_pImport->GetNameOfFieldDef(pMemberList[i], &curMem->pszMemberName)))
- {
- printf("Invalid FieldDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]);
- if (FAILED(g_pImport->GetSigOfFieldDef(pMemberList[i], &curMem->cComSig, &curMem->pComSig)))
- {
- printf("Invalid FieldDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- curMem++;
- }
- else break;
- }
-
- MemberInfo* endMem = curMem;
- if (g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp);
-
- for (curMem = members; curMem < endMem;curMem++)
- {
- if (g_fLimitedVisibility)
- {
- if(g_fHidePub && IsFdPublic(curMem->dwAttrs)) continue;
- if(g_fHidePriv && IsFdPrivate(curMem->dwAttrs)) continue;
- if(g_fHideFam && IsFdFamily(curMem->dwAttrs)) continue;
- if(g_fHideAsm && IsFdAssembly(curMem->dwAttrs)) continue;
- if(g_fHideFOA && IsFdFamORAssem(curMem->dwAttrs)) continue;
- if(g_fHideFAA && IsFdFamANDAssem(curMem->dwAttrs)) continue;
- if(g_fHidePrivScope && IsFdPrivateScope(curMem->dwAttrs)) continue;
- }
- AddFieldToGUI(cl, pClassItem, pszNamespace, pszClassName, curMem->pszMemberName, NULL, curMem->token, curMem->dwAttrs);
- }
-
- // methods second
- curMem = members;
- for (; i < NumMembers; i++)
- {
- if (TypeFromToken(pMemberList[i]) == mdtMethodDef)
- {
- curMem->token = pMemberList[i];
- if (FAILED(g_pImport->GetMethodDefProps(pMemberList[i], &curMem->dwAttrs)))
- {
- printf("Invalid MethodDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
-
- if (FAILED(g_pImport->GetNameOfMethodDef(pMemberList[i], &curMem->pszMemberName)))
- {
- printf("Invalid MethodDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]);
- if (FAILED(g_pImport->GetSigOfMethodDef(pMemberList[i], &curMem->cComSig, &curMem->pComSig)))
- {
- printf("Invalid MethodDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- curMem++;
- }
- else break;
- }
-
- endMem = curMem;
- if (g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp);
-
- for (curMem = members; curMem < endMem;curMem++)
- {
- if (g_fLimitedVisibility)
- {
- if(g_fHidePub && IsMdPublic(curMem->dwAttrs)) continue;
- if(g_fHidePriv && IsMdPrivate(curMem->dwAttrs)) continue;
- if(g_fHideFam && IsMdFamily(curMem->dwAttrs)) continue;
- if(g_fHideAsm && IsMdAssem(curMem->dwAttrs)) continue;
- if(g_fHideAsm && g_fHideFam && IsMdFamORAssem(curMem->dwAttrs)) continue;
- if(g_fHideFAA && IsMdFamANDAssem(curMem->dwAttrs)) continue;
- if(g_fHidePrivScope && IsMdPrivateScope(curMem->dwAttrs)) continue;
- }
- AddMethodToGUI(cl, pClassItem, pszNamespace, pszClassName, curMem->pszMemberName, curMem->pComSig, curMem->cComSig, curMem->token, curMem->dwAttrs);
- }
- // events third
- curMem = members;
- for (; i < NumMembers; i++)
- {
- if (TypeFromToken(pMemberList[i]) == mdtEvent)
- {
- curMem->token = pMemberList[i];
- if (FAILED(g_pImport->GetEventProps(
- curMem->token,
- &curMem->pszMemberName,
- &curMem->dwAttrs,
- (mdToken *)&curMem->pComSig)))
- {
- curMem->pszMemberName = "Invalid Event record";
- curMem->dwAttrs = 0;
- curMem->pComSig = (PCCOR_SIGNATURE)mdTypeDefNil;
- }
- MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]);
- curMem++;
- }
- else break;
- }
-
- endMem = curMem;
- if (g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp);
- curMem = members;
- while (curMem < endMem)
- {
- if (g_fLimitedVisibility)
- {
- HENUMInternal hAssoc;
- unsigned nAssoc;
- if (FAILED(g_pImport->EnumAssociateInit(curMem->token,&hAssoc)))
- {
- continue;
- }
- if (nAssoc = hAssoc.m_ulCount)
- {
- NewArrayHolder<ASSOCIATE_RECORD> rAssoc = new (nothrow) ASSOCIATE_RECORD[nAssoc];
- if (FAILED(g_pImport->GetAllAssociates(&hAssoc,rAssoc,nAssoc)))
- {
- continue;
- }
-
- for (unsigned i=0; i < nAssoc;i++)
- {
- if (TypeFromToken(rAssoc[i].m_memberdef) == mdtMethodDef)
- {
- DWORD dwAttrs;
- if (FAILED(g_pImport->GetMethodDefProps(rAssoc[i].m_memberdef, &dwAttrs)))
- {
- continue;
- }
- if(g_fHidePub && IsMdPublic(dwAttrs)) continue;
- if(g_fHidePriv && IsMdPrivate(dwAttrs)) continue;
- if(g_fHideFam && IsMdFamily(dwAttrs)) continue;
- if(g_fHideAsm && IsMdAssem(dwAttrs)) continue;
- if(g_fHideFOA && IsMdFamORAssem(dwAttrs)) continue;
- if(g_fHideFAA && IsMdFamANDAssem(dwAttrs)) continue;
- if(g_fHidePrivScope && IsMdPrivateScope(dwAttrs)) continue;
- }
- AddEventToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token);
- break;
- }
- }
- g_pImport->EnumClose(&hAssoc);
- }
- else AddEventToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token);
- curMem++;
- }
- // properties fourth
- curMem = members;
- for (; i < NumMembers; i++)
- {
- if (TypeFromToken(pMemberList[i]) == mdtProperty)
- {
- curMem->token = pMemberList[i];
- if (FAILED(g_pImport->GetPropertyProps(
- curMem->token,
- &curMem->pszMemberName,
- &curMem->dwAttrs,
- &curMem->pComSig,
- &curMem->cComSig)))
- {
- curMem->pszMemberName = "Invalid Property record";
- curMem->dwAttrs = 0;
- curMem->pComSig = NULL;
- curMem->cComSig = 0;
- }
- MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]);
- curMem++;
- }
- }
-
- endMem = curMem;
- if(g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp);
- curMem = members;
- while(curMem < endMem)
- {
- if (g_fLimitedVisibility)
- {
- HENUMInternal hAssoc;
- unsigned nAssoc;
- if (FAILED(g_pImport->EnumAssociateInit(curMem->token,&hAssoc)))
- {
- continue;
- }
- if (nAssoc = hAssoc.m_ulCount)
- {
- NewArrayHolder<ASSOCIATE_RECORD> rAssoc = new (nothrow) ASSOCIATE_RECORD[nAssoc];
- if (FAILED(g_pImport->GetAllAssociates(&hAssoc,rAssoc,nAssoc)))
- {
- continue;
- }
-
- for (unsigned i=0; i < nAssoc;i++)
- {
- if (TypeFromToken(rAssoc[i].m_memberdef) == mdtMethodDef)
- {
- DWORD dwAttrs;
- if (FAILED(g_pImport->GetMethodDefProps(rAssoc[i].m_memberdef, &dwAttrs)))
- {
- continue;
- }
- if(g_fHidePub && IsMdPublic(dwAttrs)) continue;
- if(g_fHidePriv && IsMdPrivate(dwAttrs)) continue;
- if(g_fHideFam && IsMdFamily(dwAttrs)) continue;
- if(g_fHideAsm && IsMdAssem(dwAttrs)) continue;
- if(g_fHideFOA && IsMdFamORAssem(dwAttrs)) continue;
- if(g_fHideFAA && IsMdFamANDAssem(dwAttrs)) continue;
- if(g_fHidePrivScope && IsMdPrivateScope(dwAttrs)) continue;
- }
- AddPropToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token);
- break;
- }
- }
- g_pImport->EnumClose(&hAssoc);
- }
- else AddPropToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token);
- curMem++;
- }
- g_fDumpRTF = fDumpRTF;
- if(pMemberList) delete[] pMemberList;
- if(members) delete[] members;
-#ifdef _PREFAST_
-#pragma warning(pop)
-#endif
- return hClassRoot;
-}
-#ifdef _PREFAST_
-#pragma warning(pop)
-#endif
-
-void CreateMenus()
-{
- HMENU hMenuPopup;
-
- g_hMenu = CreateMenu();
-
- hMenuPopup = CreateMenu();
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_OPEN, RstrW(IDS_OPEN));
- WszAppendMenu(hMenuPopup, MF_STRING|MF_GRAYED, IDM_DUMP, RstrW(IDS_DUMP));
- WszAppendMenu(hMenuPopup, MF_STRING|MF_GRAYED, IDM_DUMP_TREE, RstrW(IDS_DUMPTREE));
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_EXIT, RstrW(IDS_EXIT));
- WszAppendMenu(g_hMenu, MF_POPUP, (UINT)(UINT_PTR)hMenuPopup, RstrW(IDS_FILE));
- g_hFileMenu = hMenuPopup;
-
- hMenuPopup = CreateMenu();
- g_hFontMenu = CreateMenu();
- WszAppendMenu(hMenuPopup,MF_POPUP,(UINT)(UINT_PTR)g_hFontMenu,RstrW(IDS_FONTS));
- WszAppendMenu(g_hFontMenu,MF_STRING,IDM_FONT_TREE,RstrW(IDS_FONT_TREE));
- WszAppendMenu(g_hFontMenu,MF_STRING,IDM_FONT_DASM,RstrW(IDS_FONT_DASM));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fSortByName ? MF_CHECKED : MF_UNCHECKED), IDM_SORT_BY_NAME, RstrW(IDS_SORT_BY_NAME));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fTreeViewFCN ? MF_CHECKED : MF_UNCHECKED), IDM_TREEVIEWFCN, RstrW(IDS_TREEVIEWFCN));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fCAVerbal ? MF_CHECKED : MF_UNCHECKED), IDM_CAVERBAL, RstrW(IDS_CAVERBAL));
- //WszAppendMenu(hMenuPopup, MF_STRING|(g_fDumpRTF ? MF_CHECKED : MF_UNCHECKED), IDM_DUMPRTF, RstrW(IDS_DUMPRTF));
- // MF_SEPARATOR ==> last 2 params ignored
- WszAppendMenu(hMenuPopup, MF_SEPARATOR,0,NULL);
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHidePub ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_PUB, RstrW(IDS_SHOW_PUB));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHidePriv ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_PRIV, RstrW(IDS_SHOW_PRIV));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideFam ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_FAM, RstrW(IDS_SHOW_FAM));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideAsm ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_ASM, RstrW(IDS_SHOW_ASM));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideFAA ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_FAA, RstrW(IDS_SHOW_FAA));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideFOA ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_FOA, RstrW(IDS_SHOW_FOA));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHidePrivScope ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_PSCOPE, RstrW(IDS_SHOW_PSCOPE));
- WszAppendMenu(hMenuPopup, MF_SEPARATOR,0,NULL);
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fFullMemberInfo ? MF_CHECKED : MF_UNCHECKED), IDM_FULL_INFO, RstrW(IDS_FULL_INFO));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fShowBytes ? MF_CHECKED : MF_UNCHECKED), IDM_BYTES, RstrW(IDS_BYTES));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fDumpTokens ? MF_CHECKED : MF_UNCHECKED), IDM_TOKENS, RstrW(IDS_TOKENS));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fShowSource ? MF_CHECKED : MF_UNCHECKED), IDM_SOURCELINES, RstrW(IDS_SOURCELINES));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fQuoteAllNames ? MF_CHECKED : MF_UNCHECKED), IDM_QUOTEALLNAMES, RstrW(IDS_QUOTEALLNAMES));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fTryInCode ? MF_CHECKED : MF_UNCHECKED), IDM_EXPANDTRY, RstrW(IDS_EXPANDTRY));
- if(g_fTDC)
- {
-
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_SHOW_HEADER, RstrW(IDS_SHOW_HEADER));
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_SHOW_STAT, RstrW(IDS_SHOW_STAT));
- g_hMetaInfoMenu = CreateMenu();
- //MENUINFO mi;
- //GetMenuInfo(g_hMetaInfoMenu,&mi);
- //mi.dwStyle |= MNS_MODELESS;
- //SetMenuInfo(g_hMetaInfoMenu,&mi);
- WszAppendMenu(hMenuPopup, MF_POPUP, (UINT)(UINT_PTR)g_hMetaInfoMenu, RstrW(IDS_METAINFO));
-
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpMoreHex ? MF_CHECKED : MF_UNCHECKED),IDM_MI_HEX,RstrW(IDS_MI_HEX));
- WszAppendMenu(g_hMetaInfoMenu,MF_SEPARATOR,0,NULL);
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpCSV ? MF_CHECKED : MF_UNCHECKED),IDM_MI_CSV,RstrW(IDS_MI_CSV));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpHeader ? MF_CHECKED : MF_UNCHECKED),IDM_MI_HEADER,RstrW(IDS_MI_HEADER));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpSchema ? MF_CHECKED : MF_UNCHECKED),IDM_MI_SCHEMA,RstrW(IDS_MI_SCHEMA));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpRaw ? MF_CHECKED : MF_UNCHECKED),IDM_MI_RAW,RstrW(IDS_MI_RAW));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpRawHeaps ? MF_CHECKED : MF_UNCHECKED),IDM_MI_HEAPS,RstrW(IDS_MI_HEAPS));
- WszAppendMenu(g_hMetaInfoMenu,MF_SEPARATOR,0,NULL);
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpUnsat ? MF_CHECKED : MF_UNCHECKED),IDM_MI_UNREX,RstrW(IDS_MI_UNREX));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpValidate ? MF_CHECKED : MF_UNCHECKED),IDM_MI_VALIDATE,RstrW(IDS_MI_VALIDATE));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING,IDM_SHOW_METAINFO,RstrW(IDS_SHOW_METAINFO));
- }
- WszAppendMenu(g_hMenu, MF_POPUP|MF_GRAYED, (UINT)(UINT_PTR)hMenuPopup, RstrW(IDS_VIEW));
- g_hViewMenu = hMenuPopup;
- hMenuPopup = CreateMenu();
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_HELP,RstrW(IDS_HELP));
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_ABOUT,RstrW(IDS_ABOUT));
- WszAppendMenu(g_hMenu, MF_POPUP, (UINT)(UINT_PTR)hMenuPopup, RstrW(IDS_HELP));
-}
-
-BOOL LoadImages()
-{
- int i;
-
- g_hImageList = ImageList_Create(BITMAP_WIDTH, BITMAP_HEIGHT, ILC_COLOR8, LAST_IMAGE_INDEX, 1);
- if (g_hImageList == NULL)
- return FALSE;
-
- _ASSERTE(g_hResources != NULL);
- for (i = 0; i < LAST_IMAGE_INDEX; i++)
- {
- g_hBitmaps[i] = (HBITMAP) WszLoadImage(
- g_hResources,
- MAKEINTRESOURCE(i + IDB_CLASS),
- IMAGE_BITMAP,
- 15,
- 15,
- LR_LOADTRANSPARENT //LR_DEFAULTCOLOR
- );
- if (g_hBitmaps[i] == NULL)
- return FALSE;
- int index = ImageList_Add(g_hImageList, g_hBitmaps[i], NULL);
- if (index != i)
- return FALSE;
- }
-
- return TRUE;
-}
-// Local functions for font persistence:
-char* FontSaveFileName()
-{
- static char szFileName[MAX_PATH];
- static BOOL bInit = TRUE;
- if(bInit)
- {
- (void)GetWindowsDirectoryA(szFileName,MAX_PATH);
- if(szFileName[strlen(szFileName)-1]!='\\') strcat_s(szFileName,MAX_PATH,"\\");
- strcat_s(szFileName,MAX_PATH,"ildasmfnt.bin");
- bInit = FALSE;
- }
- return szFileName;
-}
-BOOL LoadGUIFonts(GUI_Info* pguiInfo)
-{
- FILE* pF = NULL;
- BOOL ret = FALSE;
- int dummy;
- if(fopen_s(&pF,FontSaveFileName(),"rb")==0)
- {
- ret = (fread(pguiInfo->plfDasm,sizeof(LOGFONTW),1,pF) && fread(pguiInfo->plfTree,sizeof(LOGFONTW),1,pF));
- if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->x = dummy;
- if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->y = dummy;
- if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->w = dummy;
- if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->h = dummy;
- if(fread(&dummy,sizeof(int),1,pF)) g_fTreeViewFCN = (dummy != 0);
- if(fread(&dummy,sizeof(int),1,pF)) g_fSortByName = (dummy != 0);
- if(fread(&dummy,sizeof(int),1,pF)) g_fFullMemberInfo = (dummy != 0);
-
- fclose(pF);
- }
- return ret;
-}
-BOOL SaveGUIFonts(GUI_Info* pguiInfo)
-{
- FILE* pF=NULL;
- BOOL ret = FALSE;
- int dummyFCN = (g_fTreeViewFCN ? 1:0);
- int dummySBN = (g_fSortByName ? 1:0);
- int dummyFMI = (g_fFullMemberInfo ? 1:0);
- if(fopen_s(&pF,FontSaveFileName(),"wb")==0)
- {
- ret = (fwrite(pguiInfo->plfDasm,sizeof(LOGFONTW),1,pF)
- && fwrite(pguiInfo->plfTree,sizeof(LOGFONTW),1,pF)
- && fwrite(&(pguiInfo->x),sizeof(int),1,pF)
- && fwrite(&(pguiInfo->y),sizeof(int),1,pF)
- && fwrite(&(pguiInfo->w),sizeof(int),1,pF)
- && fwrite(&(pguiInfo->h),sizeof(int),1,pF)
- && fwrite(&dummyFCN,sizeof(int),1,pF)
- && fwrite(&dummySBN,sizeof(int),1,pF)
- && fwrite(&dummyFMI,sizeof(int),1,pF)
- );
- fclose(pF);
- }
- return ret;
-}
-// Init various GUI variables, get handles
-// if InitGUI returns FALSE, ildasm exits
-#define DEFAULT_FONTS
-BOOL InitGUI()
-{
- INITCOMMONCONTROLSEX InitInfo;
-#ifdef DEFAULT_FONTS
- LOGFONTW strDefaultLogFontDasm = {-14,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET,
- OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FIXED_PITCH | FF_MODERN,L"Fixedsys"};
- LOGFONTW strDefaultLogFontTree = {-11,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET,
- OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,VARIABLE_PITCH | FF_SWISS,L"Tahoma"};
- LOGFONTA strDefaultLogFontDasmA = {-14,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET,
- OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FIXED_PITCH | FF_MODERN,"Fixedsys"};
- LOGFONTA strDefaultLogFontTreeA = {-11,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET,
- OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,VARIABLE_PITCH | FF_SWISS,"Tahoma"};
-#endif
- g_DisasmBox = new DynamicArray<DisasmBox_t>;
- g_ClassItemList = new DynamicArray<ClassItem_t>;
- g_NamespaceList = new DynamicArray<Namespace_t>;
- WszLoadLibrary(L"riched20.dll");
-
- InitInfo.dwSize = sizeof(InitInfo);
- InitInfo.dwICC = ICC_LISTVIEW_CLASSES;
-
- if (InitCommonControlsEx(&InitInfo) == FALSE)
- return FALSE;
-
- g_hInstance = WszGetModuleHandle(NULL);
- g_hResources = LoadLocalizedResourceDLLForSDK(L"ildasmrc.dll");
-
- //--------- get logical fonts
-#ifdef DEFAULT_FONTS
- if(!LoadGUIFonts(&guiInfo))
- {
- memcpy(&g_strLogFontDasm,&strDefaultLogFontDasm,sizeof(LOGFONTW));
- memcpy(&g_strLogFontTree,&strDefaultLogFontTree,sizeof(LOGFONTW));
- }
- if(g_fDumpRTF) { g_strLogFontDasm.lfWeight = FW_REGULAR; g_strLogFontDasm.lfItalic = FALSE; }
- // -------- create font for disassembly window
- g_hFixedFont = CreateFontIndirectW(&g_strLogFontDasm);
- // -------- create font for tree view
- g_hSmallFont = CreateFontIndirectW(&g_strLogFontTree);
-#else
- if(LoadGUIFonts(&guiInfo))
- {
- if(g_fDumpRTF) { g_strLogFontDasm.lfWeight = FW_REGULAR; g_strLogFontDasm.lfItalic = FALSE; }
- // -------- create font for disassembly window
- g_hFixedFont = CreateFontIndirect(&g_strLogFontDasm);
- // -------- create font for tree view
- g_hSmallFont = CreateFontIndirect(&g_strLogFontTree);
- }
- else
- {
- g_hFixedFont = (HFONT)GetStockObject(SYSTEM_FIXED_FONT);
- g_hSmallFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
- }
-#endif
- if (g_hFixedFont == NULL) return FALSE;
- if (g_hSmallFont == NULL) return FALSE;
-
- memset(&g_strChFontDasm,0,sizeof(CHOOSEFONT));
- g_strChFontDasm.lStructSize = sizeof(CHOOSEFONT);
- g_strChFontDasm.lpLogFont = &g_strLogFontDasm;
- g_strChFontDasm.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS |CF_SHOWHELP;
- if(!g_fDumpRTF) g_strChFontDasm.Flags |= CF_EFFECTS; // no color change option for RTF output!
- g_strChFontDasm.rgbColors = GetSysColor(COLOR_INFOTEXT);
-
- memset(&g_strChFontTree,0,sizeof(CHOOSEFONTW));
- g_strChFontTree.lStructSize = sizeof(CHOOSEFONTW);
- g_strChFontTree.lpLogFont = &g_strLogFontTree;
- g_strChFontTree.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS |CF_SHOWHELP /*| CF_EFFECTS*/;
- g_strChFontTree.rgbColors = GetSysColor(COLOR_WINDOWTEXT);
-
- g_hWhiteBrush = (HBRUSH) GetStockObject(WHITE_BRUSH);
- if (g_hWhiteBrush == NULL)
- return FALSE;
-
- if (LoadImages() == FALSE)
- return FALSE;
-
- if (RegisterWindowClasses() == FALSE)
- return FALSE;
-#undef RegisterWindowMessageW
- g_uFindReplaceMsg = RegisterWindowMessageW(FINDMSGSTRING);
-
- CreateMenus();
-
- return TRUE;
-}
-
-void DestroyGUI()
-{
- SDELETE(g_DisasmBox);
- SDELETE(g_ClassItemList);
- SDELETE(g_NamespaceList);
-}
-//
-// Set the font of a particular window to the global fixed size font
-//
-void SetWindowFontFixed(HWND hwnd)
-{
- WszSendMessage(
- hwnd,
- WM_SETFONT,
- (LPARAM) g_hFixedFont,
- FALSE
- );
-}
-
-
-//
-// Set the char dimensions variables
-//
-void SetCharDimensions(HWND hwnd)
-{
- if (InterlockedIncrement(&g_SetCharDimensions) == 1)
- {
- HDC hdc;
- TEXTMETRIC tm;
-
- hdc = GetDC(hwnd);
-
- GetTextMetrics(hdc, &tm);
-
- g_MaxCharWidth = tm.tmAveCharWidth;
- g_Height = tm.tmHeight;
-
- ReleaseDC(hwnd, hdc);
- }
- else
- {
- // Already set
- InterlockedDecrement(&g_SetCharDimensions);
- }
-}
-
-
-//
-// Given a member handle and a class item, find the TreeItem for that member
-//
-TreeItem_t *FindMemberInClass(ClassItem_t *pClassItem, HTREEITEM hMember)
-{
- DWORD i;
-
- for (i = 0; i < pClassItem->SubItems; i++)
- {
- if (pClassItem->pMembers[i].hItem == hMember)
- return &pClassItem->pMembers[i];
- }
-
- return NULL;
-}
-
-
-//
-// Register the window classes
-//
-BOOL RegisterWindowClasses()
-{
- _ASSERTE(g_hResources != NULL);
- WNDCLASSW wndClass;
-
- wndClass.style = CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW;
- wndClass.lpfnWndProc = DisassemblyWndProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = 0;
- wndClass.hInstance = g_hInstance;
- wndClass.hIcon = WszLoadIcon(g_hResources,MAKEINTRESOURCE(IDI_ICON2));
- wndClass.hCursor = NULL;
- wndClass.hbrBackground = g_hWhiteBrush;
- wndClass.lpszMenuName = NULL;
- wndClass.lpszClassName = DISASSEMBLY_CLASS_NAMEW;
- if (WszRegisterClass((WNDCLASSW*)(&wndClass)) == 0)
- return FALSE;
-
- wndClass.style = CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW;
- wndClass.lpfnWndProc = MainWndProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = 0;
- wndClass.hInstance = g_hInstance;
- wndClass.hIcon = WszLoadIcon(g_hResources,MAKEINTRESOURCE(IDI_ICON2));
- wndClass.hCursor = NULL;
- wndClass.hbrBackground = g_hWhiteBrush;
- wndClass.lpszMenuName = NULL;
-
- wndClass.lpszClassName = MAIN_WINDOW_CLASSW;
- if (WszRegisterClass((WNDCLASSW*)(&wndClass)) == 0)
- return FALSE;
- return TRUE;
-}
-
-//
-// Dump one item to global buffer
-//
-void GUIDumpItemToDisassemblyEditBox(void*pvDLB, mdToken cl, mdToken mbMember)
-{
- const char * pszClassName;
- const char * pszNamespace;
- mdTypeRef crExtends;
- DWORD dwClassAttrs;
-
- if ((cl != mdTokenNil)&&TypeFromToken(mbMember))
- {
- if (FAILED(g_pImport->GetNameOfTypeDef(cl, &pszClassName, &pszNamespace)))
- {
- pszClassName = pszNamespace = "Invalid TypeDef record";
- }
- MAKE_NAME_IF_NONE(pszClassName,cl);
- }
- else
- {
- pszClassName = (TypeFromToken(mbMember) == mdtMethodDef) ? "Global Functions" : "Global Fields";
- }
- memset(GlobalBuffer,0,GlobalBufferLen);
- InGlobalBuffer = 0;
-
- if (TypeFromToken(mbMember) && cl && (cl != mdTypeDefNil))
- {
- if (FAILED(g_pImport->GetTypeDefProps(cl, &dwClassAttrs, &crExtends)))
- {
- dwClassAttrs = 0;
- crExtends = mdTypeDefNil;
- }
- }
- g_Mode |= MODE_GUI;
- //_ASSERTE(0);
- mdToken tkVarOwner = g_tkVarOwner;
- g_tkVarOwner = cl;
- if(g_fDumpRTF) DumpRTFPrefix(pvDLB,FALSE);
- switch (TypeFromToken(mbMember))
- {
- case 0:
- switch(cl)
- {
- case 0:
- DumpManifest(pvDLB);
- DumpTypedefs(pvDLB);
- break;
- case IDM_SHOW_HEADER:
- DumpHeader(g_CORHeader,pvDLB);
- DumpHeaderDetails(g_CORHeader,pvDLB);
- break;
- case IDM_SHOW_METAINFO:
- DumpMetaInfo(g_wszFullInputFile,NULL,pvDLB);
- break;
- case IDM_SHOW_STAT:
- DumpStatistics(g_CORHeader,pvDLB);
- break;
- }
- break;
-
- case mdtTypeDef:
- DumpClass(mbMember,VAL32(g_CORHeader->EntryPointToken), pvDLB, 1); //1 = title+size+pack+custom attributes
- break;
- case mdtFieldDef:
- {
- ULONG ul1,ul2;
- GetClassLayout(cl,&ul1,&ul2);
- DumpField(mbMember,pszClassName, pvDLB, TRUE);
- }
- break;
- case mdtMethodDef:
- DumpMethod(mbMember,pszClassName,VAL32(g_CORHeader->EntryPointToken), pvDLB, TRUE);
- break;
- case mdtEvent:
- DumpEvent(mbMember,pszClassName, dwClassAttrs, pvDLB, TRUE);
- break;
- case mdtProperty:
- DumpProp(mbMember,pszClassName, dwClassAttrs, pvDLB, TRUE);
- break;
- }
- if(g_fDumpRTF) DumpRTFPostfix(pvDLB);
- g_tkVarOwner = tkVarOwner;
- if(g_uCodePage==0xFFFFFFFF)
- {
- SendMessageW((HWND)pvDLB,WM_SETTEXT,0, (LPARAM)GlobalBuffer);
- }
- else
- {
- UINT32 L = (UINT32)strlen(GlobalBuffer);
- WCHAR* wz = new (nothrow) WCHAR[L+4];
- if(wz)
- {
- memset(wz,0,sizeof(WCHAR)*(L+2));
- int x = WszMultiByteToWideChar(CP_UTF8,0,GlobalBuffer,-1,wz,L+2);
- if(g_fDumpRTF)
- {
- x = (int)SendMessageA((HWND)pvDLB,WM_SETTEXT,0, (LPARAM)UnicodeToAnsi(wz));
- }
- else
- {
- SETTEXTEX ste;
- ste.flags = ST_DEFAULT;
- ste.codepage = 1200;
- x = (int)WszSendMessage((HWND)pvDLB,EM_SETTEXTEX,(WPARAM)&ste, (LPARAM)wz);
- }
- delete[] wz;
- }
- }
-}
-
-//
-// Disassemble the given method in a new window
-//
-
-HWND GUIDisassemble(mdTypeDef cl, mdToken mbMember, __in __nullterminated char *pszNiceMemberName)
-{
- HWND hwndDisassemblyMain;
- HWND hwndDisassemblyListBox;
- const char * pszClassName;
- const char * pszNamespace;
- char* szTemp=NULL;
- RECT rcl;
- static char szsz[4096];
- bool fUpdate = false;
- bool fMetaInfo = (TypeFromToken(mbMember)==0)&&(cl==IDM_SHOW_METAINFO);
- BOOL fDumpRTF = g_fDumpRTF;
- if(fMetaInfo) g_fDumpRTF = FALSE;
-
- //before we even try, check if this member's disasm box is already opened
- DisasmBox_t* pDisasmBox = FindDisasmBox(cl, mbMember);
- if(pDisasmBox)
- {
- if(fMetaInfo || (0 == strcmp(pszNiceMemberName,"UpdateThisDisassemblyBox")))
- {
- fUpdate = true;
- }
- else
- {
- PostMessageA(pDisasmBox->hwndContainer,WM_ACTIVATE,WA_CLICKACTIVE,0);
- PostMessageA(pDisasmBox->hwndContainer,WM_SETFOCUS,0,0);
- return pDisasmBox->hwndContainer;
- }
- }
- if(fUpdate)
- {
- SendMessageW(pDisasmBox->hwndContainer,WM_GETTEXT, 0, (LPARAM)szsz);
- strcpy_s(szsz,4096,UnicodeToUtf((WCHAR*)szsz));
-
- szTemp = szsz;
- PostMessageA(pDisasmBox->hwndContainer,WM_CLOSE,1,0);
- }
- else
- {
- // Prepend class name to nicely formatted member name
- if (mbMember != 0)
- {
- if (cl != mdTokenNil)
- {
- if (FAILED(g_pImport->GetNameOfTypeDef(
- cl,
- &pszClassName,
- &pszNamespace)))
- {
- pszClassName = pszNamespace = "Invalid TypeDef record";
- }
- MAKE_NAME_IF_NONE(pszClassName,cl);
- if(*pszNamespace != 0)
- sprintf_s(szsz,4096,"%s.",pszNamespace);
- else
- szsz[0] = 0;
- strcat_s(szsz,4096,pszClassName);
- pszClassName = (const char*)&szsz[0];
- }
- else
- {
- pszClassName = (TypeFromToken(mbMember) == mdtMethodDef) ? "Global Functions" : "Global Fields";
- }
- szTemp = new (nothrow) char[strlen(pszClassName)+strlen(pszNiceMemberName)+4];
- if(szTemp) sprintf_s(szTemp, strlen(pszClassName)+strlen(pszNiceMemberName)+4,"%s::%s", pszClassName, pszNiceMemberName);
- _ASSERTE(TypeFromToken(mbMember) & (mdtMethodDef|mdtEvent|mdtProperty|mdtTypeDef|mdtFieldDef));
- }
- if(!szTemp) szTemp = pszNiceMemberName;
- }
- _ASSERTE(szTemp);
-
- HMENU hMenu = CreateMenu();
- WszAppendMenu(hMenu, MF_STRING, IDM_FIND, RstrW(IDS_FIND));
- WszAppendMenu(hMenu, MF_STRING, IDM_FINDNEXT, RstrW(IDS_FINDNEXT));
-
- hwndDisassemblyMain = WszCreateWindowEx(
- WS_EX_CLIENTEDGE,
- DISASSEMBLY_CLASS_NAMEW,
- UtfToUnicode(szTemp),
- WS_OVERLAPPEDWINDOW | WS_SIZEBOX,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- 640,
- 400,
- NULL,
- hMenu, // menu
- g_hInstance, // hinst
- NULL
- );
- SendMessageW(hwndDisassemblyMain,WM_SETTEXT, 0, (LPARAM)(UtfToUnicode(szTemp)));
-
- if((!fUpdate) && szTemp &&(szTemp != pszNiceMemberName)) delete[] szTemp;
- if (hwndDisassemblyMain == NULL)
- {
- g_fDumpRTF = fDumpRTF;
- return NULL;
- }
- GetClientRect(hwndDisassemblyMain, &rcl);
-
- hwndDisassemblyListBox = WszCreateWindowEx(
- 0,
- (!g_fDumpRTF) ? L"RichEdit20W" : L"RichEdit20A",
- RstrW(IDS_TEXTTOOLARGEFORGUI),
- WS_CHILD | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE
- | ES_MULTILINE | ES_READONLY | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_NOHIDESEL,
- rcl.left,
- rcl.top,
- rcl.right - rcl.left,
- rcl.bottom - rcl.top,
- hwndDisassemblyMain,
- (HMENU) ID_LISTBOX,
- g_hInstance, // hinst
- NULL
- );
-
- DWORD e = GetLastError();
- _ASSERTE(hwndDisassemblyListBox);
- if (hwndDisassemblyListBox == NULL)
- {
- DestroyWindow(hwndDisassemblyMain);
- return NULL;
- }
-
- if(fUpdate)
- {
- UpdateDisasmBox(pDisasmBox, hwndDisassemblyMain, hwndDisassemblyListBox, hMenu);
- }
- else
- AddDisasmBox(hwndDisassemblyMain, hwndDisassemblyListBox, hMenu, cl, mbMember);
-
- SendMessage(hwndDisassemblyListBox,EM_SETTEXTMODE,TM_RICHTEXT|TM_MULTICODEPAGE,0);
- SendMessage(hwndDisassemblyListBox,EM_SETBKGNDCOLOR,0,GetSysColor(COLOR_INFOBK));
- SetWindowFontFixed(hwndDisassemblyListBox);
- SetCharDimensions(hwndDisassemblyListBox);
-
- GUIDumpItemToDisassemblyEditBox((void *)hwndDisassemblyListBox,cl,mbMember);
-
- ShowWindow(hwndDisassemblyMain, SW_SHOWNORMAL);
- UpdateWindow(hwndDisassemblyMain);
-
- g_fDumpRTF = fDumpRTF;
- return hwndDisassemblyMain;
-}
-
-//
-// Callback by the disassembler to add another entry to the disassembly window
-//
-void GUIAddOpcode(__inout_opt __nullterminated const char *pszString, __in_opt void *GUICookie)
-{
- if(pszString)
- {
- ULONG L = (g_uCodePage == 0xFFFFFFFF) ? (ULONG)(wcslen((WCHAR*)pszString)*sizeof(WCHAR)) : (ULONG)strlen(pszString);
- if(InGlobalBuffer+L >= GlobalBufferLen-4)
- {
- ULONG LL = ((L >> 12)+1)<<12;
- char *pch = new (nothrow) char[GlobalBufferLen + LL];
- if(pch)
- {
- memcpy(pch,GlobalBuffer,InGlobalBuffer+1);
- delete[] GlobalBuffer;
- GlobalBuffer = pch;
- GlobalBufferLen += LL;
- }
- }
- if(g_uCodePage == 0xFFFFFFFF)
- {
- if(g_fDumpRTF)
- {
- swprintf_s((WCHAR*)&GlobalBuffer[InGlobalBuffer], (GlobalBufferLen-InGlobalBuffer)/sizeof(WCHAR), L"%s\\line\r\n",(WCHAR*)pszString);
- InGlobalBuffer += L+14;
- }
- else
- {
- swprintf_s((WCHAR*)&GlobalBuffer[InGlobalBuffer], (GlobalBufferLen-InGlobalBuffer)/sizeof(WCHAR), L"%s\r\n",(WCHAR*)pszString);
- InGlobalBuffer += L+4;
- }
- }
- else
- {
- if(g_fDumpRTF)
- {
- sprintf_s(&GlobalBuffer[InGlobalBuffer],GlobalBufferLen-InGlobalBuffer,"%s\\line\r\n",pszString);
- InGlobalBuffer += L+7;
- }
- else
- {
- sprintf_s(&GlobalBuffer[InGlobalBuffer],GlobalBufferLen-InGlobalBuffer,"%s\r\n",pszString);
- InGlobalBuffer += L+2;
- }
- }
- }
- else
- {
- delete[] GlobalBuffer;
- GlobalBufferLen = 0;
- InGlobalBuffer = 0;
- }
-}
-
-//
-// Someone has double clicked on an item
-//
-// It could be a method (diassemble it), or a field (ignore it), or an "extends" or "implements"
-// component, in which case we select that component if available.
-//
-HWND DoubleClickSelectedMember(HTREEITEM hItem)
-{
- HTREEITEM hClass;
- ClassItem_t *pClassItem;
-
- static HCURSOR hWaitCursor = NULL;
-
- if (hWaitCursor == NULL)
- hWaitCursor = WszLoadCursor(NULL,IDC_WAIT);
-
- //
- // It could be any item, but assume it's a member item or class info and find its parent
- //
- hClass = TreeView_GetParent(g_hwndTreeView, hItem);
- if (hClass == NULL)
- return NULL;
-
- //
- // Find the class item given the HTREEITEM
- // (will return NULL if hClass is not really a class item)
- //
- pClassItem = FindClassItem(hClass);
- if (pClassItem != NULL)
- {
- // Which subitem was it?
- TreeItem_t *pItem = FindMemberInClass(pClassItem, hItem);
-
- if (pItem == NULL)
- return NULL;
-
- if (pItem->Discriminator == TREEITEM_TYPE_MEMBER)
- {
- TVITEMA SelItem;
- char* szText;
- // Must be a method, event or property
- switch (TypeFromToken(pItem->mbMember))
- {
- case mdtMethodDef:
- case mdtEvent:
- case mdtProperty:
- case mdtFieldDef:
- break;
- default:
- return NULL;
- }
-
-
- // Get the name of this item so that we can title the disassembly window
- szText = new (nothrow) char[8192];
- if(szText)
- {
- memset(&SelItem, 0, sizeof(SelItem));
- SelItem.mask = TVIF_TEXT;
- SelItem.pszText = szText;
- SelItem.hItem = pItem->hItem;
- SelItem.cchTextMax = 8192;
-
- WCHAR* wzText = (WCHAR*)szText;
- SelItem.cchTextMax /= sizeof(WCHAR);
- SendMessageW(g_hwndTreeView, TVM_GETITEMW, 0, (LPARAM) (LPTVITEMW) &SelItem);
- unsigned L = ((unsigned)wcslen(wzText)+1)*3;
- char* szUTFText = new (nothrow) char[L];
- if(szUTFText)
- {
- memset(szUTFText,0,L);
- WszWideCharToMultiByte(CP_UTF8,0,wzText,-1,szUTFText,L,NULL,NULL);
- delete[] wzText;
- szText = szUTFText;
- }
- }
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
-
- HWND hRet = GUIDisassemble(pClassItem->cl, pItem->mbMember, szText? szText : "");
- if(szText) delete[] szText;
-
- SetCursor(hWasCursor);
-
- return hRet;
- }
- else if (pItem->Discriminator == TREEITEM_TYPE_INFO)
- {
- if(pItem->mbMember)
- {
- if(pItem->mbMember != 0xFFFFFFFF)
- {
- // We've clicked on an "extends X" or "implements Y", so select that class
- SelectClassByToken(pItem->mbMember);
- }
- else
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
-
- HWND hRet = GUIDisassemble(0, 0, "MANIFEST");
-
- SetCursor(hWasCursor);
- return hRet;
- }
- }
- else
- {
- TVITEMA SelItem;
- char* szText = new (nothrow) char[8192];
- if(szText)
- {
- // Get the name of this item so that we can title the disassembly window
- memset(&SelItem, 0, sizeof(SelItem));
- SelItem.mask = TVIF_TEXT;
- SelItem.pszText = szText;
- SelItem.hItem = pItem->hItem;
- SelItem.cchTextMax = 8192;
-
- WCHAR* wzText = (WCHAR*)szText;
- SelItem.cchTextMax /= sizeof(WCHAR);
- SendMessageW(g_hwndTreeView, TVM_GETITEMW, 0, (LPARAM) (LPTVITEMW) &SelItem);
- unsigned L = ((unsigned)wcslen(wzText)+1)*3;
- char* szUTFText = new (nothrow) char[L];
- memset(szUTFText,0,L);
- WszWideCharToMultiByte(CP_UTF8,0,wzText,-1,szUTFText,L,NULL,NULL);
- delete[] wzText;
- szText = szUTFText;
- }
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
-
- HWND hRet = GUIDisassemble(pClassItem->cl, pClassItem->cl, szText ? szText : "");
- if(szText) delete[] szText;
-
- SetCursor(hWasCursor);
-
- return hRet;
- }
- }
- }
- return NULL;
-}
-
-
-void SelectClassByName(__in __nullterminated char *pszFQName)
-{
- ClassItem_t *pDestItem;
-
- // Find namespace
- char *p = ns::FindSep(pszFQName);
- if (p == NULL)
- {
- pDestItem = FindClassItem(NULL, pszFQName);
- }
- else
- {
- char szBuffer[MAX_CLASSNAME_LENGTH];
- strncpy_s(szBuffer, MAX_CLASSNAME_LENGTH,pszFQName, p - pszFQName);
- szBuffer[ p - pszFQName ] = '\0';
- pDestItem = FindClassItem(szBuffer, p+1);
- }
-
- if (pDestItem != NULL)
- {
- SendMessageA(g_hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM) (LPTVITEM) pDestItem->hItem);
- }
-}
-
-void SelectClassByToken(mdToken tk)
-{
- if(TypeFromToken(tk)==mdtTypeDef)
- {
- ClassItem_t *pDestItem;
- if(pDestItem = FindClassItem(tk))
- {
- SendMessageA(g_hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM) (LPTVITEM) pDestItem->hItem);
- }
- }
-}
-
-//
-// Text search in rich text edit
-//
-void FindTextInListbox(HWND hwnd, FINDREPLACEW* lpfr)
-{
- HWND hwndLB = FindAssociatedDisassemblyListBox(hwnd);
- if(hwndLB)
- {
- FINDTEXTW strFind;
- DWORD bgn,end;
- SendMessage(hwndLB,EM_GETSEL,(WPARAM)&bgn,(LPARAM)&end);
- if(lpfr->Flags & FR_DOWN)
- {
- strFind.chrg.cpMin=end;
- strFind.chrg.cpMax=-1;
- }
- else
- {
- strFind.chrg.cpMin=bgn;
- strFind.chrg.cpMax=0;
- }
- strFind.lpstrText=lpfr->lpstrFindWhat;
- int pos = (int)SendMessage(hwndLB,EM_FINDTEXTW,(WPARAM)(lpfr->Flags),(LPARAM)&strFind);
- if(pos >= 0)
- {
- //char sz[32];
- //sprintf_s(sz, _countof(sz), "%d:%d",strFind.chrg.cpMin,strFind.chrg.cpMax);
- //MessageBox(hwnd,sz,"Find",MB_OK);
- SendMessage(hwndLB,EM_SETSEL,(WPARAM)pos,(LPARAM)(pos+wcslen(lpfr->lpstrFindWhat)));
- }
- }
-}
-
-//
-// Disassembly window(s) WndProc
-//
-LRESULT CALLBACK DisassemblyWndProc(
- HWND hwnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam
-)
-{
- static HBRUSH hBrush=NULL;
- COLORREF crBackGr;
-
- static COLORREF crBackGrOld=NULL;
-
- if (crBackGrOld == NULL)
- crBackGrOld = GetSysColor(COLOR_INFOBK);
-
- if(uMsg== g_uFindReplaceMsg)
- {
- FINDREPLACEW* lpfr = (FINDREPLACEW*)lParam;
- if(!(lpfr->Flags & FR_DIALOGTERM))
- {
- FindTextInListbox(hwnd,lpfr);
- }
- }
- else
- switch (uMsg)
- {
- case WM_CREATE:
- hBrush = CreateSolidBrush(RGB(255,255,255));
- break;
-
- //===== Sent by Static (label) and Read-Only Edit field =====
- case WM_CTLCOLORSTATIC:
- case WM_CTLCOLOREDIT:
- if(hBrush) DeleteObject(hBrush);
- crBackGr = GetSysColor(COLOR_INFOBK);
- hBrush = CreateSolidBrush(crBackGr);
- SetBkColor((HDC) wParam, crBackGr);
- if(crBackGr != crBackGrOld)
- {
- g_strChFontDasm.rgbColors = GetSysColor(COLOR_INFOTEXT);
- crBackGrOld = crBackGr;
- }
- SetTextColor((HDC) wParam, g_strChFontDasm.rgbColors);
- return (LRESULT) hBrush;
-
- //====== Sent by active Edit field ============
- //case WM_CTLCOLOREDIT:
- // if(hBrush) DeleteObject(hBrush);
- // hBrush = CreateSolidBrush(RGB(255,255,255));
- // SetBkColor((HDC) wParam, RGB(255,255,255));
- // return (LRESULT) hBrush;
-
- // Ownerdraw stuff
- case WM_MEASUREITEM:
- {
- ((MEASUREITEMSTRUCT *) (lParam))->itemHeight = g_Height;
- break;
- }
-
- // Ownerdraw stuff
- case WM_DRAWITEM:
- {
- DRAWITEMSTRUCT *pDIS;
- WCHAR wzBuf[1024];
- int ItemID;
-
- pDIS = (DRAWITEMSTRUCT *) lParam;
- ItemID = (int) pDIS->itemID;
-
- if (ItemID < 0)
- {
- switch (pDIS->CtlType)
- {
- case ODT_LISTBOX:
- {
- if ((pDIS->itemAction) & (ODA_FOCUS))
- DrawFocusRect (PHDC, &PRC);
- break;
- }
-
- case ODT_COMBOBOX:
- {
- if ((pDIS->itemAction) & ODS_FOCUS)
- DrawFocusRect(PHDC, &PRC);
- break;
- }
- }
-
- return TRUE;
- }
-
- switch (pDIS->CtlType)
- {
- case ODT_LISTBOX:
- WszSendMessage(pDIS->hwndItem, LB_GETTEXT, pDIS->itemID, (LPARAM)wzBuf);
- break;
-
- case ODT_COMBOBOX:
- WszSendMessage(pDIS->hwndItem, CB_GETLBTEXT, pDIS->itemID, (LPARAM)wzBuf);
- break;
- }
-
- int crBack,crText;
- HBRUSH hbrBack;
-
- if ((pDIS->itemState) & (ODS_SELECTED))
- {
- crBack = GetSysColor(COLOR_HIGHLIGHT);
- crText = GetSysColor(COLOR_HIGHLIGHTTEXT);
- }
- else
- {
- crBack = GetSysColor(COLOR_WINDOW);
- crText = GetSysColor(COLOR_WINDOWTEXT);
- }
-
- hbrBack = CreateSolidBrush(crBack);
- FillRect(PHDC, &PRC, hbrBack);
- DeleteObject(hbrBack);
-
- // 0x00bbggrr
- SetBkColor(PHDC, crBack);
-
- // Instruction counter
- if (wcslen(wzBuf) >= PADDING && isdigit(*wzBuf))
- {
- SetTextColor(PHDC, 0x00FF0000);
- TextOutW(PHDC, PRC.left, PRC.top, wzBuf, 5);
-
- SetTextColor(PHDC, 0x00005500);
- TextOutW(PHDC, PRC.left + (5*g_MaxCharWidth), PRC.top, &wzBuf[5], PADDING-5);
-
- SetTextColor(PHDC, crText);
- TextOutW(PHDC, PRC.left + (PADDING*g_MaxCharWidth), PRC.top, &wzBuf[PADDING], (UINT32)wcslen(&wzBuf[PADDING]));
- }
- else
- TextOutW(PHDC, PRC.left, PRC.top, wzBuf, (UINT32)wcslen(wzBuf));
-
- if ((pDIS->itemState) & (ODS_FOCUS))
- DrawFocusRect(PHDC, &PRC);
-
- break;
- }
-
-
- case WM_COMMAND:
- {
- if(HIWORD(wParam) > 1) break; // we are interested in commands from menu only
- switch (LOWORD(wParam))
- {
- case IDM_FIND:
- {
- HWND hwndLB = FindAssociatedDisassemblyListBox(hwnd);
- if(hwndLB)
- {
- FINDREPLACEW *pFR = &(FindDisasmBoxByHwnd(hwnd)->strFR);
- if(pFR && (pFR->Flags&FR_DIALOGTERM)) // i.e., if the box isn't up
- {
- DWORD bgn,end;
- WszSendMessage(hwndLB,EM_GETSEL,(WPARAM)&bgn,(LPARAM)&end);
- if(end > bgn)
- {
- if(end - bgn > 119)
- SendMessage(hwndLB,EM_SETSEL,(WPARAM)bgn,(LPARAM)(bgn+119));
- SendMessage(hwndLB,EM_GETSELTEXT,0,(LPARAM)(pFR->lpstrFindWhat));
- }
- pFR->Flags &= ~FR_DIALOGTERM;
- g_hFindText = FindTextW(pFR);
- }
- }
- }
- break;
- case IDM_FINDNEXT:
- {
- FindTextInListbox(hwnd,&(FindDisasmBoxByHwnd(hwnd)->strFR));
- }
- break;
- }
- break;
- }
-
- case WM_SETFOCUS:
- SetFocus(FindAssociatedDisassemblyListBox(hwnd));
- break;
-
- case WM_SIZE:
- {
- DWORD cxClient = LOWORD(lParam);
- DWORD cyClient = HIWORD(lParam);
- HWND hListView;
-
- // We have to size the listview also
-
- // Will be NULL if we are ourselves a listview
- hListView = FindAssociatedDisassemblyListBox(hwnd);
-
- if (hListView != NULL)
- {
- // Resize listview window
- MoveWindow(
- hListView,
- 0,
- 0,
- cxClient,
- cyClient,
- TRUE // repaint
- );
- }
-
- break;
- }
-
- case WM_CLOSE:
- if(hBrush) DeleteObject(hBrush);
- if(LOWORD(wParam)==0) RemoveDisasmBox(hwnd);
- DestroyWindow(hwnd); // Generates the WM_DESTROY message
-
- // Shutdown everything if we're just viewing GUI IL and close all our boxes
- if (IsGuiILOnly() && (g_NumDisasmBoxes == 0)) {
- PostQuitMessage(0);
- }
-
- break;
-
- default :
- return WszDefWindowProc(hwnd, uMsg, wParam, lParam);
- }
-
- return 0;
-}
-
-BOOL CALLBACK AboutBoxProc(HWND hwndDlg, // handle to dialog box
- UINT uMsg, // message
- WPARAM wParam, // first message parameter
- LPARAM lParam) // second message parameter
-{
- switch(uMsg)
- {
- case WM_INITDIALOG:
- {
- WCHAR str[1024];
- WszSendDlgItemMessage(hwndDlg,IDC_ABOUT_LINE1,WM_SETTEXT,0,
- (LPARAM)RstrW(IDS_ILDASM_TITLE));
- swprintf_s(str,1024,RstrW(IDS_VERSION), VER_FILEVERSION_STR_L); str[1023]=0;
- WszSendDlgItemMessage(hwndDlg,IDC_ABOUT_LINE2,WM_SETTEXT,0,(LPARAM)str);
- WszSendDlgItemMessage(hwndDlg,IDC_ABOUT_LINE3,WM_SETTEXT,0,
- (LPARAM)RstrW(IDS_LEGALCOPYRIGHT));
- }
- return TRUE;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case ID_ABOUT_OK:
- EndDialog(hwndDlg,0);
- return TRUE;
- }
- break;
-
- }
- return FALSE;
-}
-
-BOOL CALLBACK DumpOptionsProc(HWND hwndDlg, // handle to dialog box
- UINT uMsg, // message
- WPARAM wParam, // first message parameter
- LPARAM lParam) // second message parameter
-{
- static BOOL fAsmChecked;
- static BOOL fMetaChecked;
- static ULONG uCodePage = 0;
-
- if (uCodePage == 0)
- uCodePage = g_uCodePage;
-
- switch(uMsg)
- {
- case WM_INITDIALOG:
- WszSendDlgItemMessage(hwndDlg,IDC_RADIO1,BM_SETCHECK,(uCodePage==g_uConsoleCP ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_RADIO2,BM_SETCHECK,(uCodePage==CP_UTF8 ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_RADIO3,BM_SETCHECK,(uCodePage==0xFFFFFFFF ? BST_CHECKED : BST_UNCHECKED),0);
-
-
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK18,BM_SETCHECK,(g_fShowProgressBar ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK1, BM_SETCHECK,(g_fDumpHeader ? BST_CHECKED : BST_UNCHECKED),0);
- if(g_fTDC)
- {
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK2, BM_SETCHECK,(g_fDumpStats ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK19, BM_SETCHECK,(g_fDumpClassList ? BST_CHECKED : BST_UNCHECKED),0);
- }
- else
- {
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK2), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK19), SW_HIDE);
- }
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK3, BM_SETCHECK,(g_fDumpAsmCode ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK4, BM_SETCHECK,(g_fDumpTokens ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK5, BM_SETCHECK,(g_fShowBytes ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK6, BM_SETCHECK,(g_fShowSource ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK20, BM_SETCHECK,(g_fInsertSourceLines ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK7, BM_SETCHECK,(g_fTryInCode ? BST_CHECKED : BST_UNCHECKED),0);
- if(!(fAsmChecked = g_fDumpAsmCode))
- {
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK4), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK5), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK6), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK7), FALSE);
- }
- if(g_fTDC)
- {
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK8, BM_SETCHECK,(g_fDumpMetaInfo ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK10,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpHeader ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK11,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpMoreHex ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK12,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpCSV ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK13,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpUnsat ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK16,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpValidate ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK14,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpSchema ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK15,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpRaw ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK17,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpRawHeaps ? BST_CHECKED : BST_UNCHECKED),0);
- if(!(fMetaChecked = g_fDumpMetaInfo))
- {
- //EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK9), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK10), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK11), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK12), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK13), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK14), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK15), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK16), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK17), FALSE);
- }
- }
- else
- {
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK8), SW_HIDE);
- //ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK9), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK10), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK11), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK12), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK13), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK14), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK15), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK16), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK17), SW_HIDE);
- }
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK9), SW_HIDE);
- return TRUE;
-
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_CHECK3:
- fAsmChecked = !fAsmChecked;
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK4), fAsmChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK5), fAsmChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK6), fAsmChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK7), fAsmChecked);
- return TRUE;
-
- case IDC_CHECK8:
- fMetaChecked = !fMetaChecked;
- //EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK9), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK10), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK11), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK12), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK13), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK14), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK15), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK16), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK17), fMetaChecked);
- return TRUE;
-
- case IDOK:
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_RADIO1, BM_GETCHECK,0,0)) g_uCodePage = g_uConsoleCP;
- else if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_RADIO2, BM_GETCHECK,0,0)) g_uCodePage = CP_UTF8;
- else if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_RADIO3, BM_GETCHECK,0,0)) g_uCodePage = 0xFFFFFFFF;
- uCodePage = g_uCodePage;
-
- g_fShowProgressBar = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK18, BM_GETCHECK,0,0));
- g_fDumpHeader = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK1, BM_GETCHECK,0,0));
- if(g_fTDC)
- {
- g_fDumpStats = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK2, BM_GETCHECK,0,0));
- g_fDumpClassList = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK19, BM_GETCHECK,0,0));
- }
- g_fDumpAsmCode = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK3, BM_GETCHECK,0,0));
- g_fDumpTokens = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK4, BM_GETCHECK,0,0));
- g_fShowBytes = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK5, BM_GETCHECK,0,0));
- g_fShowSource = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK6, BM_GETCHECK,0,0));
- g_fInsertSourceLines = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK20, BM_GETCHECK,0,0));
- g_fTryInCode = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK7, BM_GETCHECK,0,0));
- if(g_fTDC)
- {
- g_fDumpMetaInfo = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK8, BM_GETCHECK,0,0));
- g_ulMetaInfoFilter = 0;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK10, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpHeader;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK11, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpMoreHex;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK12, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpCSV;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK13, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpUnsat;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK16, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpValidate;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK14, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpSchema;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK15, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpRaw;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK17, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpRawHeaps;
- }
- EndDialog(hwndDlg,1);
- return TRUE;
-
- case IDCANCEL:
- EndDialog(hwndDlg,0);
- return TRUE;
- }
- break;
-
- }
- return FALSE;
-}
-
-static HWND help_hw;
-void * __cdecl HelpFileLoader(_In_z_ LPCWSTR lpHelpFileName)
-{
- return HtmlHelpW(help_hw, lpHelpFileName, HH_DISPLAY_TOPIC, NULL);
-}
-
-//
-// Main window WndProc
-//
-#define CHECK_UNCHECK(x) { x=!x; CheckMenuItem(g_hMenu, LOWORD(wParam), (x ? MF_CHECKED : MF_UNCHECKED)); }
-
-#ifdef _PREFAST_
-#pragma warning(push)
-#pragma warning(disable:21000) // Suppress PREFast warning about overly large function
-#endif
-LRESULT CALLBACK MainWndProc(
- HWND hwnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam
-)
-{
- HWND hwndDasm;
- static HCURSOR hWaitCursor = NULL;
-
- if (hWaitCursor == NULL)
- hWaitCursor = WszLoadCursor(NULL,IDC_WAIT);
-
- switch (uMsg)
- {
- case WM_DROPFILES:
- {
- WCHAR wzFileName[MAX_FILENAME_LENGTH];
- DragQueryFileW((HDROP)wParam,0,wzFileName,MAX_FILENAME_LENGTH-1);
- memset(g_szInputFile,0,MAX_FILENAME_LENGTH);
- WszWideCharToMultiByte(CP_UTF8,0,wzFileName,-1,g_szInputFile,MAX_FILENAME_LENGTH-1,NULL,NULL);
- GetInputFileFullPath();
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
- GUICleanupClassItems();
- TreeView_DeleteAllItems(g_hwndTreeView);
- Cleanup();
- GUISetModule(g_szInputFile);
- DumpFile();
- SetCursor(hWasCursor);
- }
- DragFinish((HDROP)wParam);
- }
- break;
-
- case WM_COMMAND:
- {
- if(HIWORD(wParam) > 1) break; // we are interested in commands from menu only
- switch (LOWORD(wParam))
- {
- case IDM_OPEN:
- {
- WCHAR wzInputFile[MAX_FILENAME_LENGTH];
- memset(wzInputFile,0,sizeof(wzInputFile));
- if(strlen(g_szInputFile))
- {
- WszMultiByteToWideChar(CP_UTF8,0,g_szInputFile,-1,wzInputFile,MAX_FILENAME_LENGTH-1);
- }
- {
- OPENFILENAMEW ofn;
- WCHAR* wzFilter = RstrW(IDS_FILTER_IN); //L"PE file (*.exe,*.dll,*.mod,*.mdl,*.winmd)\0*.exe;*.dll;*.mod;*.mdl;*.winmd\0Any type (*.*)\0*.*\0\0";
- const WCHAR* wzDefltExt = L"exe";
- for(WCHAR* pwc = wzFilter; pwc = wcschr(pwc,'\t'); pwc++) *pwc = 0;
- memset(&ofn,0,sizeof(OPENFILENAMEW));
- ofn.lStructSize = sizeof(OPENFILENAMEW);
- ofn.hwndOwner = hwnd;
- ofn.lpstrFilter = wzFilter;
- ofn.nFilterIndex = 0;
- ofn.lpstrFile = wzInputFile;
- ofn.nMaxFile = MAX_FILENAME_LENGTH-1;
- ofn.Flags = OFN_FILEMUSTEXIST;
- ofn.lpstrDefExt = wzDefltExt;
- if(GetOpenFileName(&ofn))
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
- GUICleanupClassItems();
- TreeView_DeleteAllItems(g_hwndTreeView);
- Cleanup();
- memset(g_szInputFile,0,MAX_FILENAME_LENGTH);
- WszWideCharToMultiByte(CP_UTF8,0,wzInputFile,-1,g_szInputFile,MAX_FILENAME_LENGTH-1,NULL,NULL);
- GetInputFileFullPath();
- GUISetModule(g_szInputFile);
- DumpFile();
- SetCursor(hWasCursor);
- }
- }
- break;
- }
- case IDM_ABOUT:
- {
- _ASSERTE(g_hResources != NULL);
- WszDialogBoxParam(g_hResources,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)AboutBoxProc,0L);
- break;
- }
- case IDM_DUMP:
- //case IDM_DUMP_TREE:
- if(g_pImport)
- {
- unsigned uWasCodePage = g_uCodePage;
- WCHAR wzOutputFile[MAX_FILENAME_LENGTH];
- memset(wzOutputFile,0,sizeof(wzOutputFile));
- if(strlen(g_szOutputFile))
- {
- WszMultiByteToWideChar(CP_UTF8,0,g_szOutputFile,-1,wzOutputFile,MAX_FILENAME_LENGTH-1);
- }
- {
- OPENFILENAMEW ofn;
- WCHAR* wzFilter = RstrW(IDS_FILTER_OUT);//L"IL file (*.il)\0*.il\0Text file (*.txt) \0*.txt\0Any type (*.*)\0*.*\0\0";
- const WCHAR* wzDefltExt = L"il";
- for(WCHAR* pwc = wzFilter; pwc = wcschr(pwc,'\t'); pwc++) *pwc = 0;
- memset(&ofn,0,sizeof(OPENFILENAMEW));
- ofn.lStructSize = sizeof(OPENFILENAMEW);
- ofn.hwndOwner = hwnd;
- ofn.lpstrFilter = wzFilter;
- ofn.nFilterIndex = 0;
- ofn.lpstrFile = wzOutputFile;
- ofn.nMaxFile = MAX_FILENAME_LENGTH-1;
- ofn.Flags = OFN_OVERWRITEPROMPT;
- ofn.lpstrDefExt = wzDefltExt;
- _ASSERTE(g_hResources != NULL);
- if(WszDialogBoxParam(g_hResources,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC)DumpOptionsProc,0L) &&
- GetSaveFileName(&ofn))
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
- g_Mode &= ~MODE_GUI;
- memset(g_szOutputFile,0,MAX_FILENAME_LENGTH);
- WszWideCharToMultiByte(CP_UTF8,0,wzOutputFile,-1,g_szOutputFile,MAX_FILENAME_LENGTH-1,NULL,NULL);
- g_pFile = OpenOutput(wzOutputFile);
- if(g_pFile)
- {
- DumpFile(); // closes g_pFile upon completion
- SetCursor(hWasCursor);
- }
- else
- {
- SetCursor(hWasCursor);
- WszMessageBox(hwnd,wzOutputFile,RstrW(IDS_CANNOTOPENFILE),MB_OK|MB_ICONERROR | GetDasmMBRTLStyle());
- }
- g_szOutputFile[0] = 0;
- g_Mode |= MODE_GUI;
- //g_fShowSource = FALSE; // flag could have been changed for dump
- }
- }
- g_uCodePage = uWasCodePage; // g_uCodePage is changed in DumpOptionsProc
- }
- break;
-
- case IDM_DUMP_TREE:
- if(g_pImport)
- {
- // Dump the tree view(fully expanded, with current sorting) to a text file
- OPENFILENAMEW ofn;
- WCHAR* wzFilter = RstrW(IDS_FILTER_OUT2); //L"Text file (*.txt) \0*.txt\0Any type (*.*)\0*.*\0\0";
- const WCHAR* wzDefltExt = L"txt";
- WCHAR szIndent[MAX_FILENAME_LENGTH];
- FILE* pFile;
- WCHAR wzOutputFile[MAX_FILENAME_LENGTH];
- for(WCHAR* pwc = wzFilter; pwc = wcschr(pwc,'\t'); pwc++) *pwc = 0;
- memset(wzOutputFile,0,sizeof(wzOutputFile));
- memset(&ofn,0,sizeof(OPENFILENAMEW));
- ofn.lStructSize = sizeof(OPENFILENAMEW);
- ofn.hwndOwner = hwnd;
- ofn.lpstrFilter = wzFilter;
- ofn.nFilterIndex = 0;
- ofn.lpstrFile = wzOutputFile;
- ofn.nMaxFile = MAX_FILENAME_LENGTH-1;
- ofn.Flags = OFN_OVERWRITEPROMPT;
- ofn.lpstrDefExt = wzDefltExt;
- if(GetSaveFileName(&ofn))
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
- pFile = g_pFile;
- g_pFile = OpenOutput(wzOutputFile);
- szIndent[0] = 0;
- if(g_pFile)
- {
- g_Mode &= ~MODE_GUI;
- DumpTreeItem(g_hRoot,g_pFile,szIndent);
- g_Mode |= MODE_GUI;
- fclose(g_pFile);
- SetCursor(hWasCursor);
- }
- else
- {
- SetCursor(hWasCursor);
- WszMessageBox(hwnd,wzOutputFile,RstrW(IDS_CANNOTOPENFILE),MB_OK|MB_ICONERROR | GetDasmMBRTLStyle());
- }
- g_pFile = pFile;
- }
- }
- break;
-
- case IDM_EXIT:
- {
- WszSendMessage(GetActiveWindow(),WM_CLOSE,0,0);
- }
- break;
-
- case IDM_FONT_TREE:
- {
- g_strChFontTree.hwndOwner = g_hwndMain;
- if(ChooseFont(&g_strChFontTree))
- {
- DeleteObject((HGDIOBJ)g_hSmallFont);
- g_hSmallFont = CreateFontIndirect(&g_strLogFontTree);
- WszSendMessage(g_hwndTreeView,WM_SETFONT,(LPARAM) g_hSmallFont,TRUE);
- if(g_hwndAsmInfo)
- WszSendMessage(g_hwndAsmInfo,WM_SETFONT,(LPARAM) g_hSmallFont,TRUE);
- SaveGUIFonts(&guiInfo);
- }
- break;
- }
-
- case IDM_FONT_DASM:
- {
- g_strChFontDasm.hwndOwner = g_hwndMain;
- if(ChooseFont(&g_strChFontDasm))
- {
- if(g_fDumpRTF) { g_strLogFontDasm.lfWeight = FW_REGULAR; g_strLogFontDasm.lfItalic = FALSE; }
- DeleteObject((HGDIOBJ)g_hFixedFont);
- g_hFixedFont = CreateFontIndirect(&g_strLogFontDasm);
-
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- WszSendMessage((*g_DisasmBox)[i].hwndChild,WM_SETFONT,(LPARAM)g_hFixedFont,TRUE);
- if(g_fDumpRTF)
- GUIDumpItemToDisassemblyEditBox((void*)(*g_DisasmBox)[i].hwndChild,
- (*g_DisasmBox)[i].tkClass,(*g_DisasmBox)[i].tkMember);
- }
- SaveGUIFonts(&guiInfo);
- }
- break;
- }
-
- case IDM_CAVERBAL:
- {
- CHECK_UNCHECK(g_fCAVerbal);
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- GUIDumpItemToDisassemblyEditBox((void*)(*g_DisasmBox)[i].hwndChild,
- (*g_DisasmBox)[i].tkClass,
- (*g_DisasmBox)[i].tkMember);
- }
- break;
- }
-
- case IDM_DUMPRTF:
- {
- CHECK_UNCHECK(g_fDumpRTF);
- //GUIDumpAssemblyInfo();
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- mdToken tkClass = (*g_DisasmBox)[i].tkClass;
- mdToken tkMember = (*g_DisasmBox)[i].tkMember;
- if((TypeFromToken(tkMember)==0)&&(tkClass==IDM_SHOW_METAINFO))
- continue;
- GUIDisassemble(tkClass,tkMember,"UpdateThisDisassemblyBox");
- }
- break;
- }
-
- case IDM_SORT_BY_NAME:
- {
- CHECK_UNCHECK(g_fSortByName);
- if(g_pImport)
- {
- if(!RefreshList()) goto CloseAndDestroy;
- }
- break;
- }
-
- case IDM_TREEVIEWFCN:
- {
- CHECK_UNCHECK(g_fTreeViewFCN);
- if(g_pImport)
- {
- if(!RefreshList()) goto CloseAndDestroy;
- }
- break;
- }
-
- case IDM_SHOW_PUB:
- {
- CHECK_UNCHECK(g_fHidePub);
-UpdateVisibilityOptions:
- g_fLimitedVisibility = g_fHidePub ||
- g_fHidePriv ||
- g_fHideFam ||
- g_fHideFAA ||
- g_fHideFOA ||
- g_fHidePrivScope ||
- g_fHideAsm;
- if(g_pImport)
- {
- if(!RefreshList()) DestroyWindow(hwnd);
- }
- break;
- }
- case IDM_SHOW_PRIV:
- {
- CHECK_UNCHECK(g_fHidePriv);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_FAM:
- {
- CHECK_UNCHECK(g_fHideFam);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_ASM:
- {
- CHECK_UNCHECK(g_fHideAsm);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_FAA:
- {
- CHECK_UNCHECK(g_fHideFAA);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_FOA:
- {
- CHECK_UNCHECK(g_fHideFOA);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_PSCOPE:
- {
- CHECK_UNCHECK(g_fHidePrivScope);
- goto UpdateVisibilityOptions;
- }
- case IDM_FULL_INFO:
- {
- CHECK_UNCHECK(g_fFullMemberInfo);
- if(g_pImport)
- {
- if(!RefreshList()) DestroyWindow(hwnd);
- }
- break;
- }
- case IDM_BYTES:
- {
- CHECK_UNCHECK(g_fShowBytes);
- break;
- }
- case IDM_TOKENS:
- {
- CHECK_UNCHECK(g_fDumpTokens);
- break;
- }
- case IDM_SOURCELINES:
- {
- CHECK_UNCHECK(g_fShowSource);
- break;
- }
- case IDM_EXPANDTRY:
- {
- CHECK_UNCHECK(g_fTryInCode);
- break;
- }
- case IDM_QUOTEALLNAMES:
- {
- CHECK_UNCHECK(g_fQuoteAllNames);
- break;
- }
- case IDM_SHOW_HEADER:
- {
- GUIDisassemble(IDM_SHOW_HEADER,0,"Headers");
- break;
- }
- case IDM_SHOW_STAT:
- {
- GUIDisassemble(IDM_SHOW_STAT,0,"Statistics");
- break;
- }
- case IDM_HELP:
- {
- help_hw = hwnd;
- FindLocalizedFile(L"ildasm.chm", &HelpFileLoader);
- break;
- }
- case IDM_SHOW_METAINFO:
- {
- if(g_pImport)
- GUIDisassemble(IDM_SHOW_METAINFO,0,"MetaInfo");
- break;
- }
- case IDM_MI_HEADER:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpHeader) g_ulMetaInfoFilter &= ~MDInfo::dumpHeader;
- else g_ulMetaInfoFilter |= MDInfo::dumpHeader;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpHeader ? MF_CHECKED : MF_UNCHECKED));
- if(g_ulMetaInfoFilter & MDInfo::dumpHeader)
- {
- // HeaderOnly specified,
- // Suppress Counts,Sizes, Header,Schema and Header,Schema,Rows
- g_ulMetaInfoFilter &= ~MDInfo::dumpCSV;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_CSV, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpSchema;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_SCHEMA, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpRaw;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_RAW, MF_UNCHECKED);
- }
- return 1; //break;
- }
- case IDM_MI_HEX:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpMoreHex) g_ulMetaInfoFilter &= ~MDInfo::dumpMoreHex;
- else g_ulMetaInfoFilter |= MDInfo::dumpMoreHex;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpMoreHex ? MF_CHECKED : MF_UNCHECKED));
- return 1; //break;
- }
- case IDM_MI_CSV:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpCSV) g_ulMetaInfoFilter &= ~MDInfo::dumpCSV;
- else g_ulMetaInfoFilter |= MDInfo::dumpCSV;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpCSV ? MF_CHECKED : MF_UNCHECKED));
- if(g_ulMetaInfoFilter & MDInfo::dumpCSV)
- {
- // Counts,Sizes specified,
- // Suppress HeaderOnly, Header,Schema and Header,Schema,Rows
- g_ulMetaInfoFilter &= ~MDInfo::dumpHeader;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_HEADER, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpSchema;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_SCHEMA, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpRaw;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_RAW, MF_UNCHECKED);
- }
- return 1; //break;
- }
- case IDM_MI_UNREX:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpUnsat) g_ulMetaInfoFilter &= ~MDInfo::dumpUnsat;
- else g_ulMetaInfoFilter |= MDInfo::dumpUnsat;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpUnsat ? MF_CHECKED : MF_UNCHECKED));
- return 1; //break;
- }
- case IDM_MI_SCHEMA:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpSchema) g_ulMetaInfoFilter &= ~MDInfo::dumpSchema;
- else g_ulMetaInfoFilter |= MDInfo::dumpSchema;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpSchema ? MF_CHECKED : MF_UNCHECKED));
- if(g_ulMetaInfoFilter & MDInfo::dumpSchema)
- {
- // Header,Schema specified,
- // suppress Counts,Sizes, HeaderOnly and Header,Schema,Rows
- g_ulMetaInfoFilter &= ~MDInfo::dumpCSV;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_CSV, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpHeader;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_HEADER, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpRaw;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_RAW, MF_UNCHECKED);
- }
- return 1; //break;
- }
- case IDM_MI_RAW:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpRaw) g_ulMetaInfoFilter &= ~MDInfo::dumpRaw;
- else g_ulMetaInfoFilter |= MDInfo::dumpRaw;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpRaw ? MF_CHECKED : MF_UNCHECKED));
- if(g_ulMetaInfoFilter & MDInfo::dumpRaw)
- {
- // Header,Schema,Rows specified,
- // suppress Counts,Sizes, HeaderOnly and Header,Schema
- g_ulMetaInfoFilter &= ~MDInfo::dumpCSV;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_CSV, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpHeader;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_HEADER, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpSchema;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_SCHEMA, MF_UNCHECKED);
- }
- return 1; //break;
- }
- case IDM_MI_HEAPS:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpRawHeaps) g_ulMetaInfoFilter &= ~MDInfo::dumpRawHeaps;
- else g_ulMetaInfoFilter |= MDInfo::dumpRawHeaps;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpRawHeaps ? MF_CHECKED : MF_UNCHECKED));
- return 1; //break;
- }
- case IDM_MI_VALIDATE:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpValidate) g_ulMetaInfoFilter &= ~MDInfo::dumpValidate;
- else g_ulMetaInfoFilter |= MDInfo::dumpValidate;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpValidate ? MF_CHECKED : MF_UNCHECKED));
- return 1; //break;
- }
-
- }
-
- break;
- }
-
- case WM_SETFOCUS:
- SetFocus(g_hwndTreeView);
- break;
-
- case WM_SIZE:
- {
- DWORD cxClient = LOWORD(lParam);
- DWORD cyClient = HIWORD(lParam);
- DWORD dy;
-
- dy = cyClient >> 3;
- if(dy < 50) dy = 50;
- if(cyClient < dy+4) cyClient = dy+4;
-
- // Resize listview window
- MoveWindow(
- g_hwndTreeView,
- 0,
- 0,
- cxClient,
- cyClient-dy-2,
- TRUE // repaint
- );
- // Resize AsmInfo window
- MoveWindow(
- g_hwndAsmInfo,
- 0,
- cyClient-dy-1,
- cxClient,
- dy,
- TRUE // repaint
- );
-
- break;
- }
-
- case WM_NOTIFY:
- {
- if (wParam == ID_TREEVIEW)
- {
- NMHDR * pNMHDR = (NMHDR*) lParam;
- switch (pNMHDR->code)
- {
- case TVN_KEYDOWN:
- {
- NMTVKEYDOWN *pKeyDown = (NMTVKEYDOWN *) pNMHDR;
-
- if (pKeyDown->wVKey == '\r')
- {
- if(DoubleClickSelectedMember(g_CurSelItem) == NULL)
- TreeView_Expand(g_hwndTreeView,g_CurSelItem,TVE_TOGGLE);
- }
- break;
- }
-
- case NM_DBLCLK:
- {
- hwndDasm = DoubleClickSelectedMember(g_CurSelItem);
- if(hwndDasm)
- {
- PostMessageA(hwndDasm,WM_ACTIVATE,WA_CLICKACTIVE,0);
- PostMessageA(hwndDasm,WM_SETFOCUS,0,0);
- }
- break;
- }
-
- case TVN_SELCHANGEDW:
- case TVN_SELCHANGEDA:
- {
- NMTREEVIEW *pTV = (NMTREEVIEW *) pNMHDR;
- /*
- TVITEM SelItem;
- char szText[256];
-
- memset(&SelItem, 0, sizeof(SelItem));
- SelItem.mask = TVIF_TEXT;
- SelItem.pszText = szText;
- SelItem.cchTextMax = sizeof(szText)-1;
- SelItem.hItem = pTV->itemNew.hItem;
-
- g_CurSelItem = SelItem.hItem;
- SendMessageA(g_hwndTreeView, TVM_GETITEM, 0, (LPARAM)&SelItem);
- */
- g_CurSelItem = pTV->itemNew.hItem;
- break;
- }
- }
- }
-
- break;
- }
-
- case WM_CLOSE:
- CloseAndDestroy:
- // HTML help window is closed automatically
- {
- RECT r;
- ShowWindow(hwnd,SW_RESTORE);
- GetWindowRect(hwnd,(LPRECT)&r);
- guiInfo.x = r.left;
- guiInfo.y = r.top;
- guiInfo.w = r.right - r.left;
- guiInfo.h = r.bottom - r.top;
- SaveGUIFonts(&guiInfo);
- }
- DestroyWindow(hwnd); // Generates the WM_DESTROY message
- break;
-
- case WM_DESTROY :
- PostQuitMessage(0); // Puts a WM_QUIT in the queue
- break;
-
- default :
- return DefWindowProcW(hwnd, uMsg, wParam, lParam);
- }
-
- return 0;
-}
-#ifdef _PREFAST_
-#pragma warning(pop)
-#endif
-
-
-//
-// Create the treeview in the main window
-//
-HWND CreateTreeView(HWND hwndParent)
-{
- HWND hwndTree;
- RECT rcl;
- DWORD tvs =
- TVS_HASLINES
- |TVS_HASBUTTONS
- |TVS_LINESATROOT
- |TVS_SHOWSELALWAYS
- // |TVS_TRACKSELECT
- // |TVS_SINGLEEXPAND
- |TVS_DISABLEDRAGDROP
- ;
- unsigned cy,dy;
-
- GetClientRect(hwndParent, &rcl);
- cy = rcl.bottom - rcl.top;
- dy = cy >> 3;
- hwndTree = WszCreateWindowEx(
- 0,
- WC_TREEVIEWW,
- NULL,
- WS_VISIBLE|WS_CHILD|WS_BORDER|tvs,
- 0,
- 0,
- rcl.right - rcl.left,
- cy-dy-2, //rcl.bottom - rcl.top,
- hwndParent,
- (HMENU) ID_TREEVIEW,
- g_hInstance,
- NULL
- );
- g_hwndAsmInfo = NULL;
- if (hwndTree == NULL)
- return NULL;
-
- WszSendMessage(hwndTree,WM_SETFONT,(LPARAM) g_hSmallFont,FALSE);
-
- TreeView_SetBkColor(hwndTree,-1);
- TreeView_SetImageList(hwndTree, g_hImageList, TVSIL_NORMAL);
-
- g_hwndAsmInfo = WszCreateWindowEx(
- 0, //WS_EX_TOOLWINDOW,
- g_fDumpRTF ? L"RichEdit20A" : L"EDIT",
- NULL,
- WS_CHILD | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE | WS_BORDER //| WS_CAPTION | WS_OVERLAPPEDWINDOW
- | ES_MULTILINE | ES_READONLY | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_NOHIDESEL,
- 0,
- cy-dy-1,
- rcl.right - rcl.left,
- dy,
- hwndParent,
- (HMENU) ID_LISTBOX,
- g_hInstance, // hinst
- NULL
- );
- if(g_hwndAsmInfo)
- {
- WszSendMessage(g_hwndAsmInfo,WM_SETFONT,(LPARAM) g_hSmallFont,FALSE);
- }
-
- return hwndTree;
-}
-
-
-//
-// Add one item to a treeview
-//
-HTREEITEM AddOneItem(HTREEITEM hParent, const char *pszText, HTREEITEM hInsAfter, int iImage, HWND hwndTree, BOOL fExpanded)
-{
- HTREEITEM hItem;
- WCHAR* wz = UtfToUnicode(pszText);
- ULONG lLen = (ULONG)wcslen(wz);
- TVINSERTSTRUCTW tvIns;
- memset(&tvIns, 0, sizeof(tvIns));
-
- tvIns.item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM;
- tvIns.item.pszText = wz;
- tvIns.item.cchTextMax = lLen;
- tvIns.item.iImage = iImage;
- tvIns.item.iSelectedImage = iImage;
-
- tvIns.hInsertAfter = hInsAfter;
- tvIns.hParent = hParent;
-
- hItem = (HTREEITEM)WszSendMessage(hwndTree, TVM_INSERTITEMW, 0, (LPARAM)(&tvIns));
-
- return hItem;
-}
-
-#ifdef _PREFAST_
-#pragma warning(push)
-#pragma warning(disable:22018) // Suppress PREFast warning about Integer overflow/underflow
-#endif
-//ulen cannot be greater than GlobalBufferLen by the definition of ulen. Therefore it's safe to disable this warning here.
-void AddMethodToGUI(
- mdTypeDef cl,
- ClassItem_t * pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- const char *pszMethodName,
- PCCOR_SIGNATURE pComSig,
- unsigned cComSig,
- mdMethodDef mbMethod,
- DWORD dwAttrs
-)
-{
- HTREEITEM hParent;
- char* szName;
- ULONG ulLen,ulImageIndex;
- BOOL wasDumpRTF;
-
- memset(GlobalBuffer,0,GlobalBufferLen);
- sprintf_s(GlobalBuffer, GlobalBufferLen,g_fFullMemberInfo ? "method %s : ": "%s : ",pszMethodName);
- InGlobalBuffer = (UINT32)strlen(GlobalBuffer);
- ulLen = InGlobalBuffer;
- wasDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- mdToken tkVarOwner = g_tkVarOwner;
- g_tkVarOwner = cl;
- DumpMethod(mbMethod, pszClassName,VAL32(g_CORHeader->EntryPointToken),(void *)g_hwndTreeView,FALSE);
- g_tkVarOwner = tkVarOwner;
- g_fDumpRTF = wasDumpRTF;
- GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n
-
- szName = &GlobalBuffer[ulLen];
-
- if(strstr(szName,"instance ") == szName) strcpy_s(szName,GlobalBufferLen-ulLen,szName+9);
-
- szName = GlobalBuffer;
-
- hParent = pClassItem->hItem;
-
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
-
- if((strchr(szName, '<'))&&(strchr(szName, '>')))
- {
- ulImageIndex = IsMdStatic(dwAttrs) ? STATIC_METHOD_GEN_IMAGE_INDEX : METHOD_GEN_IMAGE_INDEX;
- }
- else
- {
- ulImageIndex = IsMdStatic(dwAttrs) ? STATIC_METHOD_IMAGE_INDEX : METHOD_IMAGE_INDEX;
- }
-
- pClassItem->pMembers[pClassItem->CurMember].hItem = AddOneItem(
- hParent, szName, TVI_LAST, ulImageIndex, g_hwndTreeView, FALSE
- );
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER;
- pClassItem->pMembers[pClassItem->CurMember].mbMember = mbMethod;
- pClassItem->CurMember++;
-}
-
-#ifdef _PREFAST_
-#pragma warning(pop)
-#endif
-BOOL NamespaceMatch(const char *pszNamespace, __in __nullterminated char *pszString)
-{
- if (strncmp(pszNamespace, pszString, strlen(pszNamespace)) == 0)
- {
- if (pszString[ strlen(pszNamespace) ] == NAMESPACE_SEPARATOR_CHAR)
- return TRUE;
- }
-
- return FALSE;
-}
-
-void AddFieldToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- const char *pszFieldName,
- const char *pszSignature,
- mdFieldDef mbField,
- DWORD dwAttrs
-)
-{
- DWORD Dimensions;
- ULONG ul1,ul2;
- BOOL wasDumpRTF;
- HTREEITEM hParent = pClassItem->hItem;
-
- Dimensions = 0;
-
- memset(GlobalBuffer,0,GlobalBufferLen);
- sprintf_s(GlobalBuffer,GlobalBufferLen,g_fFullMemberInfo ? "field %s : " : "%s : ",pszFieldName);
- InGlobalBuffer = (UINT32)strlen(GlobalBuffer);
- GetClassLayout(cl,&ul1,&ul2);
- wasDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- DumpField(mbField, pszClassName,(void *)g_hwndTreeView,FALSE);
- g_fDumpRTF = wasDumpRTF;
- GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n
- char* pch = strchr(GlobalBuffer,'\r');
- if(pch) strcpy_s(pch,5," ...");
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
-
- pClassItem->pMembers[pClassItem->CurMember].mbMember = mbField;
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER;
- pClassItem->pMembers[pClassItem->CurMember++].hItem = AddOneItem(
- hParent,
- GlobalBuffer, //szType,
- TVI_LAST,
- (dwAttrs & mdStatic) ? STATIC_FIELD_IMAGE_INDEX : FIELD_IMAGE_INDEX,
- g_hwndTreeView,
- FALSE
- );
-}
-
-void AddEventToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD dwClassAttrs,
- mdEvent mbEvent
-)
-{
- DWORD Dimensions;
- BOOL wasDumpRTF;
- HTREEITEM hParent = pClassItem->hItem;
-
- Dimensions = 0;
-
- memset(GlobalBuffer,0,GlobalBufferLen);
- if(g_fFullMemberInfo) strcpy_s(GlobalBuffer,GlobalBufferLen,"event ");
- InGlobalBuffer = (UINT32)strlen(GlobalBuffer);
- wasDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- DumpEvent(mbEvent, pszClassName, dwClassAttrs, (void *)g_hwndTreeView, FALSE); //FALSE=don't dump the body
- g_fDumpRTF = wasDumpRTF;
- GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n
-
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
-
- pClassItem->pMembers[pClassItem->CurMember].mbMember = mbEvent;
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER;
- pClassItem->pMembers[pClassItem->CurMember++].hItem = AddOneItem(
- hParent,
- GlobalBuffer, //szType,
- TVI_LAST,
- EVENT_IMAGE_INDEX,
- g_hwndTreeView,
- FALSE
- );
-}
-
-void AddPropToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD dwClassAttrs,
- mdProperty mbProp
-)
-{
- DWORD Dimensions;
- BOOL wasDumpRTF;
- HTREEITEM hParent = pClassItem->hItem;
-
- Dimensions = 0;
-
- memset(GlobalBuffer,0,GlobalBufferLen);
- if(g_fFullMemberInfo) strcpy_s(GlobalBuffer,GlobalBufferLen,"prop ");
- InGlobalBuffer = (UINT32)strlen(GlobalBuffer);
- wasDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- DumpProp(mbProp, pszClassName, dwClassAttrs, (void *)g_hwndTreeView, FALSE); //FALSE=don't dump the body
- g_fDumpRTF = wasDumpRTF;
- GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n
-
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
-
- pClassItem->pMembers[pClassItem->CurMember].mbMember = mbProp;
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER;
- pClassItem->pMembers[pClassItem->CurMember++].hItem = AddOneItem(
- hParent,
- GlobalBuffer, //szType,
- TVI_LAST,
- PROP_IMAGE_INDEX,
- g_hwndTreeView,
- FALSE
- );
-}
-
-
-
-HTREEITEM FindCreateNamespaceRoot(const char *pszNamespace)
-{
- DWORD i;
- HTREEITEM hRoot;
- DWORD l = 0,ll;
-
- if (!pszNamespace || !*pszNamespace)
- return g_hRoot; // not in a namespace, use tree root
-
- hRoot = g_hRoot;
- for (i = 0; i < g_NumNamespaces; i++)
- {
- if (!strcmp(pszNamespace, (*g_NamespaceList)[i].pszNamespace))
- return (*g_NamespaceList)[i].hRoot;
- }
- for (i = 0; i < g_NumNamespaces; i++)
- {
- if(strstr(pszNamespace,(*g_NamespaceList)[i].pszNamespace) == pszNamespace)
- {
- ll = (DWORD)strlen((*g_NamespaceList)[i].pszNamespace);
- if((ll > l)&&(pszNamespace[ll] == '.'))
- {
- hRoot = (*g_NamespaceList)[i].hRoot;
- l = ll;
- }
- }
- }
-
- hRoot = AddOneItem(hRoot, pszNamespace, TVI_LAST, NAMESPACE_IMAGE_INDEX, g_hwndTreeView, TRUE);
- (*g_NamespaceList)[g_NumNamespaces].pszNamespace = pszNamespace;
- (*g_NamespaceList)[g_NumNamespaces].hRoot = hRoot;
- g_NumNamespaces++;
-
- return hRoot;
-}
-
-
-Namespace_t *FindNamespace(const char *pszNamespace)
-{
- DWORD i;
-
- for (i = 0; i < g_NumNamespaces; i++)
- {
- if (!strcmp(pszNamespace, (*g_NamespaceList)[i].pszNamespace))
- return &(*g_NamespaceList)[i];
- }
-
- return NULL;
-}
-
-
-void GUICleanupClassItems()
-{
- DWORD i;
- WCHAR* sz=L"\0\0";
-
- for (i = 0; i < g_NumClassItems; i++)
- {
- if((*g_ClassItemList)[i].pMembers)
- {
- delete[] (*g_ClassItemList)[i].pMembers;
- (*g_ClassItemList)[i].pMembers = NULL;
- }
- }
- for (i = 0; i < g_NumDisasmBoxes; i++)
- {
- PostMessageA((*g_DisasmBox)[i].hwndContainer,WM_CLOSE,0,0);
- }
- WszSendMessage(g_hwndAsmInfo,WM_SETTEXT,0,(LPARAM)sz);
- EnableMenuItem(g_hMenu,(UINT)(UINT_PTR)g_hViewMenu, MF_GRAYED);
- EnableMenuItem(g_hFileMenu,IDM_DUMP,MF_GRAYED);
- EnableMenuItem(g_hFileMenu,IDM_DUMP_TREE,MF_GRAYED);
-}
-
-//
-// Add a new class tree node
-//
-ClassItem_t *AddClassToGUI(
- mdTypeDef cl,
- UINT uImageIndex,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD cSubItems,
- HTREEITEM *phRoot // Returns the namespace root (NOT the class root)
-)
-{
- HTREEITEM hRoot;
-
- if(*phRoot)
- hRoot = *phRoot;
- else
- {
- hRoot = FindCreateNamespaceRoot(pszNamespace);
- _ASSERTE(hRoot != NULL);
-
- *phRoot = hRoot;
- }
-
- (*g_ClassItemList)[g_NumClassItems].hItem = AddOneItem(hRoot, pszClassName, TVI_LAST, uImageIndex, g_hwndTreeView, FALSE);
- (*g_ClassItemList)[g_NumClassItems].cl = cl;
- (*g_ClassItemList)[g_NumClassItems].SubItems = cSubItems;
- (*g_ClassItemList)[g_NumClassItems].CurMember = 0;
-
- (*g_ClassItemList)[g_NumClassItems].pMembers = new (nothrow) TreeItem_t[cSubItems];
-
- g_NumClassItems++;
-
- return &(*g_ClassItemList)[g_NumClassItems-1];
-}
-
-
-void AddGlobalFunctions()
-{
- HRESULT hr = S_OK;
- HENUMInternal hEnumMethod;
- mdToken FuncToken;
- DWORD i;
- HTREEITEM hNamespaceRoot = NULL;
- DWORD NumGlobals;
-
- ClassItem_t* pClassItem = &(*g_ClassItemList)[0];
-
- if (SUCCEEDED(g_pImport->EnumGlobalFieldsInit(&hEnumMethod)))
- {
- NumGlobals = g_pImport->EnumGetCount(&hEnumMethod);
- MemberInfo* fields = new (nothrow) MemberInfo[NumGlobals];
- MemberInfo* curField = fields;
-
- for (i = 0; g_pImport->EnumNext(&hEnumMethod, &FuncToken); i++)
- {
- curField->token = FuncToken;
- if (FAILED(g_pImport->GetFieldDefProps(FuncToken, &curField->dwAttrs)) ||
- FAILED(g_pImport->GetNameOfFieldDef(FuncToken, &curField->pszMemberName)))
- {
- curField->pszMemberName = "Invalid FieldDef record";
- }
- MAKE_NAME_IF_NONE(curField->pszMemberName,FuncToken);
- //curField->pComSig = g_pImport->GetSigOfFieldDef(FuncToken, &curMethod->cComSig);
- curField++;
- }
- g_pImport->EnumClose(&hEnumMethod);
-
- _ASSERTE(curField - fields == (int) NumGlobals);
-
- if(g_fSortByName) qsort(fields, NumGlobals, sizeof MemberInfo, memberCmp);
-
- for(curField = fields; curField < &fields[NumGlobals];curField++)
- {
- if(g_fLimitedVisibility)
- {
- if(g_fHidePub && IsFdPublic(curField->dwAttrs)) continue;
- if(g_fHidePriv && IsFdPrivate(curField->dwAttrs)) continue;
- if(g_fHideFam && IsFdFamily(curField->dwAttrs)) continue;
- if(g_fHideAsm && IsFdAssembly(curField->dwAttrs)) continue;
- if(g_fHideFOA && IsFdFamORAssem(curField->dwAttrs)) continue;
- if(g_fHideFAA && IsFdFamANDAssem(curField->dwAttrs)) continue;
- if(g_fHidePrivScope && IsFdPrivateScope(curField->dwAttrs)) continue;
- }
- AddFieldToGUI(NULL, pClassItem, NULL, "Global Fields", curField->pszMemberName, NULL, curField->token, curField->dwAttrs);
- }
- delete[] fields;
- }
- if (FAILED(g_pImport->EnumGlobalFunctionsInit(&hEnumMethod)))
- return;
-
- NumGlobals = g_pImport->EnumGetCount(&hEnumMethod);
- MemberInfo* methods = new (nothrow) MemberInfo[NumGlobals];
- MemberInfo* curMethod = methods;
-
- for (i = 0; g_pImport->EnumNext(&hEnumMethod, &FuncToken); i++)
- {
- curMethod->token = FuncToken;
- if (FAILED(g_pImport->GetMethodDefProps(FuncToken, &curMethod->dwAttrs)) ||
- FAILED(g_pImport->GetNameOfMethodDef(FuncToken, &curMethod->pszMemberName)))
- {
- curMethod->pszMemberName = "Invalid MethodDef record";
- }
- MAKE_NAME_IF_NONE(curMethod->pszMemberName,FuncToken);
- if (FAILED(g_pImport->GetSigOfMethodDef(FuncToken, &curMethod->cComSig, &curMethod->pComSig)))
- {
- curMethod->pszMemberName = "Invalid MethodDef record";
- curMethod->cComSig = 0;
- curMethod->pComSig = NULL;
- }
- curMethod++;
- }
- g_pImport->EnumClose(&hEnumMethod);
-
- _ASSERTE(curMethod - methods == (int) NumGlobals);
-
- if(g_fSortByName) qsort(methods, NumGlobals, sizeof MemberInfo, memberCmp);
-
- for(curMethod = methods; curMethod < &methods[NumGlobals];curMethod++)
- {
- if(g_fLimitedVisibility)
- {
- if(g_fHidePub && IsMdPublic(curMethod->dwAttrs)) continue;
- if(g_fHidePriv && IsMdPrivate(curMethod->dwAttrs)) continue;
- if(g_fHideFam && IsMdFamily(curMethod->dwAttrs)) continue;
- if(g_fHideAsm && IsMdAssem(curMethod->dwAttrs)) continue;
- if(g_fHideFOA && IsMdFamORAssem(curMethod->dwAttrs)) continue;
- if(g_fHideFAA && IsMdFamANDAssem(curMethod->dwAttrs)) continue;
- if(g_fHidePrivScope && IsMdPrivateScope(curMethod->dwAttrs)) continue;
- }
- AddMethodToGUI(NULL, pClassItem, NULL, "Global Functions", curMethod->pszMemberName, curMethod->pComSig, curMethod->cComSig, curMethod->token, curMethod->dwAttrs);
- }
- delete[] methods;
- return;
-}
-
-
-BOOL CreateMainWindow()
-{
- DWORD dwStyle, dwStyleEx;
-
-// If only showing GUI's IL window, than we don't want to see the main window
-// However, main window still manages our data, so we have to still create it. :(
-// But we can "pretend" it's not there by hiding it (no WS_VISIBLE, and add WS_EX_TOOLWINDOW)
- if (IsGuiILOnly()) {
- dwStyle = WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_POPUP | WS_SIZEBOX;
- dwStyleEx = WS_EX_TOOLWINDOW;
- } else {
- dwStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CAPTION | WS_POPUP | WS_SIZEBOX;
- dwStyleEx = WS_EX_CLIENTEDGE;
- }
- g_hwndMain = WszCreateWindowEx(dwStyleEx,
- MAIN_WINDOW_CLASSW,
- L"IL DASM ", //MAIN_WINDOW_CAPTIONW,
- dwStyle,
- guiInfo.x,
- guiInfo.y,
- guiInfo.w,
- guiInfo.h,
- NULL,
- g_hMenu, // menu
- g_hInstance, // hinst
- NULL
- );
- if (g_hwndMain == NULL)
- return FALSE;
- DragAcceptFiles(g_hwndMain,TRUE);
- SendMessageA(g_hwndMain,WM_SETTEXT, 0, (LPARAM)"IL DASM ");
- return TRUE;
-}
-
-
-//
-// Given a CL token, find the classitem for it
-//
-ClassItem_t *FindClassItem(mdTypeDef cl)
-{
- DWORD i;
-
- for (i = 0; i < g_NumClassItems; i++)
- {
- if ((*g_ClassItemList)[i].cl == cl)
- return &(*g_ClassItemList)[i];
- }
-
- return NULL;
-}
-
-
-//
-// Given a class name, find the classitem for it (may fail)
-//
-ClassItem_t *FindClassItem(__in_opt __nullterminated char *pszFindNamespace, __in __nullterminated char *pszFindName)
-{
- DWORD i;
-
- for (i = 0; i < g_NumClassItems; i++)
- {
- const char *pszClassName;
- const char *pszNamespace;
-
- if((*g_ClassItemList)[i].cl)
- {
-
- if (FAILED(g_pImport->GetNameOfTypeDef(
- (*g_ClassItemList)[i].cl,
- &pszClassName,
- &pszNamespace)))
- {
- pszClassName = pszNamespace = "Invalid TypeDef record";
- }
- MAKE_NAME_IF_NONE(pszClassName,(*g_ClassItemList)[i].cl);
-
- if (!strcmp(pszFindName, pszClassName))
- {
- if ((((pszFindNamespace == NULL)||(*pszFindNamespace == 0))
- &&((pszNamespace == NULL)||(*pszNamespace == 0)))
- ||(!strcmp(pszFindNamespace, pszNamespace)))
- return &(*g_ClassItemList)[i];
- }
- }
- }
- //MessageBox(NULL,pszFindName,"Class Not Found",MB_OK);
- return NULL;
-}
-
-
-ClassItem_t *FindClassItem(HTREEITEM hItem)
-{
- DWORD i;
-
- for (i = 0; i < g_NumClassItems; i++)
- {
- if ((*g_ClassItemList)[i].hItem == hItem)
- return &(*g_ClassItemList)[i];
- }
-
- return NULL;
-}
-
-
-//
-// Init GUI components
-//
-BOOL CreateGUI()
-{
-
- if (InitGUI() == FALSE)
- return FALSE;
-
- // Register the window class for the main window.
- if (CreateMainWindow() == FALSE)
- return FALSE;
-
- g_hwndTreeView = CreateTreeView(g_hwndMain);
- if (g_hwndTreeView == NULL)
- return FALSE;
-
- return 0;
-}
-
-
-//
-// This is the main loop which the disassembler sits in when in GUI mode
-//
-void GUIMainLoop()
-{
- MSG msg;
- HACCEL hAccel = NULL;
-
- _ASSERTE(g_hResources != NULL);
- hAccel = WszLoadAccelerators(g_hResources,L"FileAccel");
- // Accelerator tables are released when the app exits
- while (WszGetMessage(&msg, (HWND) NULL, 0, 0))
- {
- // Dispatch message to appropriate window
- if((g_hFindText == NULL)|| !WszIsDialogMessage(g_hFindText,&msg))
- {
- if(hAccel && WszTranslateAccelerator(g_hwndMain,hAccel,&msg));
- else
- {
- TranslateMessage(&msg);
- WszDispatchMessage(&msg);
- }
- }
- }
- GUICleanupClassItems();
-}
-// Dump one tree item to a text file (calls itself recursively)
-void DumpTreeItem(HTREEITEM hSelf, FILE* pFile, __inout __nullterminated WCHAR* szIndent)
-{
- HTREEITEM hNext;
- TVITEMEXW tvi;
- static WCHAR szText[2048];
- WCHAR* wzString = (WCHAR*)GlobalBuffer;
- tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_TEXT;
- tvi.hItem = hSelf;
- tvi.pszText = szText;
- tvi.cchTextMax = 2047;
- if(WszSendMessage(g_hwndTreeView,TVM_GETITEMW,0,(LPARAM)(&tvi)))
- {
- WCHAR* szType = NULL;
- if(hSelf == g_hRoot) szType = L"MOD";
- else
- {
- switch(tvi.iImage)
- {
- case CLASS_IMAGE_INDEX: szType = L"CLS"; break;
- case EVENT_IMAGE_INDEX: szType = L"EVT"; break;
- case FIELD_IMAGE_INDEX: szType = L"FLD"; break;
- case NAMESPACE_IMAGE_INDEX: szType = L"NSP"; break;
- case METHOD_IMAGE_INDEX: szType = L"MET"; break;
- case PROP_IMAGE_INDEX: szType = L"PTY"; break;
- case STATIC_FIELD_IMAGE_INDEX: szType = L"STF"; break;
- case STATIC_METHOD_IMAGE_INDEX: szType = L"STM"; break;
- case CLASSENUM_IMAGE_INDEX: szType = L"ENU"; break;
- case CLASSINT_IMAGE_INDEX: szType = L"INT"; break;
- case CLASSVAL_IMAGE_INDEX: szType = L"VCL"; break;
- }
- }
- if(szType) swprintf_s(wzString,4096,L"%s___[%s] %s",szIndent,szType,szText);
- else swprintf_s(wzString,4096,L"%s %s",szIndent,szText);
- }
- else swprintf_s(wzString,4096,L"%sGetItemW failed",szIndent);
- printLineW(pFile,wzString);
- *wzString = 0;
- if(hNext = TreeView_GetChild(g_hwndTreeView,hSelf))
- {
- wcscat_s(szIndent,MAX_FILENAME_LENGTH,L" |");
-
- do {
- DumpTreeItem(hNext,pFile,szIndent);
- } while(hNext = TreeView_GetNextSibling(g_hwndTreeView,hNext));
-
- szIndent[wcslen(szIndent)-4] = 0;
- printLineW(pFile,szIndent);
- }
-}
-#endif
diff --git a/src/ildasm/gui.h b/src/ildasm/gui.h
deleted file mode 100644
index 71a581b3e0..0000000000
--- a/src/ildasm/gui.h
+++ /dev/null
@@ -1,155 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "dynamicarray.h"
-
-#define BITMAP_WIDTH 15
-#define BITMAP_HEIGHT 15
-
-#define DISASSEMBLY_CLASS_NAME "disassembly"
-#define MAIN_WINDOW_CLASS "dasm"
-#define MAIN_WINDOW_CAPTION "IL DASM"
-
-#define DISASSEMBLY_CLASS_NAMEW L"disassembly"
-#define MAIN_WINDOW_CLASSW L"dasm"
-#define MAIN_WINDOW_CAPTIONW L"IL DASM\0"
-
-#define PHDC (pDIS->hDC)
-#define PRC (pDIS->rcItem)
-
-#define PADDING 28
-
-#define ID_TREEVIEW 1
-#define ID_LISTBOX 2
-
-typedef struct
-{
- const char *pszNamespace;
- HTREEITEM hRoot;
-} Namespace_t;
-
-
-//
-// Menu info
-//
-enum
-{
- IDM_PROGRESS,
- IDM_OPEN,
- IDM_DUMP,
- IDM_DUMP_TREE,
- IDM_EXIT,
- IDM_SORT_BY_NAME,
- IDM_SHOW_PUB,
- IDM_SHOW_PRIV,
- IDM_SHOW_FAM,
- IDM_SHOW_ASM,
- IDM_SHOW_FAA,
- IDM_SHOW_FOA,
- IDM_SHOW_PSCOPE,
- IDM_FULL_INFO,
- IDM_BYTES,
- IDM_TOKENS,
- IDM_SOURCELINES,
- IDM_EXPANDTRY,
- IDM_QUOTEALLNAMES,
- IDM_SHOW_HEADER,
- IDM_SHOW_STAT,
- IDM_SHOW_METAINFO,
- IDM_MI_DEBUG,
- IDM_MI_HEADER,
- IDM_MI_HEX,
- IDM_MI_CSV,
- IDM_MI_UNREX,
- IDM_MI_SCHEMA,
- IDM_MI_RAW,
- IDM_MI_HEAPS,
- IDM_MI_VALIDATE,
- IDM_HELP,
- IDM_ABOUT,
- IDM_FONT_TREE,
- IDM_FONT_DASM,
- IDM_FIND,
- IDM_FINDNEXT,
- IDM_TREEVIEWFCN,
- IDM_CAVERBAL,
- IDM_DUMPRTF
-};
-
-
-//
-// Bitmaps - keep in same order as in dasm.rc file
-//
-enum
-{
- CLASS_IMAGE_INDEX,
- EVENT_IMAGE_INDEX,
- METHOD_IMAGE_INDEX,
- NAMESPACE_IMAGE_INDEX,
- FIELD_IMAGE_INDEX,
- PROP_IMAGE_INDEX,
- STATIC_METHOD_IMAGE_INDEX,
- STATIC_FIELD_IMAGE_INDEX,
- RED_ARROW_IMAGE_INDEX,
- CLASSENUM_IMAGE_INDEX,
- CLASSINT_IMAGE_INDEX,
- CLASSVAL_IMAGE_INDEX,
- CLASS_GEN_IMAGE_INDEX,
- METHOD_GEN_IMAGE_INDEX,
- STATIC_METHOD_GEN_IMAGE_INDEX,
- CLASSENUM_GEN_IMAGE_INDEX,
- CLASSINT_GEN_IMAGE_INDEX,
- CLASSVAL_GEN_IMAGE_INDEX,
- LAST_IMAGE_INDEX
-};
-
-#define TREEITEM_TYPE_MEMBER 1
-#define TREEITEM_TYPE_INFO 2
-
-// Member items and info items (under classes)
-typedef struct
-{
- HTREEITEM hItem;
- union
- {
- mdToken mbMember;
- char * pszText; // if an info item (extends or implements some class)
- };
- BYTE Discriminator;
-} TreeItem_t;
-
-// Class items (under the root)
-typedef struct
-{
- HTREEITEM hItem;
- mdTypeDef cl;
- TreeItem_t *pMembers; // List of subitems
- DWORD SubItems; // Number of subitems
- DWORD CurMember; // Used when building member list
-} ClassItem_t;
-
-typedef struct
-{
- HWND hwndContainer;
- HWND hwndChild;
- HMENU hMenu;
- mdToken tkClass;
- mdToken tkMember;
- WCHAR wzFind[120];
- FINDREPLACEW strFR;
-} DisasmBox_t;
-
-
-
-// For accessing metadata
-extern IMDInternalImport* g_pImport;
-extern PELoader * g_pPELoader;
-extern IMetaDataImport2* g_pPubImport;
-
-//extern DynamicArray<mdToken> g_cl_list;
-extern mdToken * g_cl_list;
-//extern DynamicArray<mdToken> g_cl_enclosing;
-extern mdToken * g_cl_enclosing;
-extern mdTypeDef g_cl_module;
-extern DWORD g_NumClasses;
diff --git a/src/ildasm/html/clicking.htm b/src/ildasm/html/clicking.htm
deleted file mode 100644
index 828193c988..0000000000
--- a/src/ildasm/html/clicking.htm
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
-<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
-<TITLE>Clicking on Tree View Items</TITLE>
-
-<STYLE>
- BODY {background: white; color: black}
- h3 {font: 8pt Arial bold}
- P {font: 10pt Arial}
- TD {font: 10pt Arial}
- A {text-decoration: none; color: blue}
-</STYLE>
-
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
-
-<P style="margin-top: 0; margin-bottom: 0"><A NAME="clicking"><font size="4">
-</font></A><B><I><font size="4">CLICKING ON TREE VIEW ITEMS</font></I></B></P>
-<P style="margin-top: 0; margin-bottom: 0">&nbsp;</P>
-
-<font size="2">
-<P style="margin-top: 0; margin-bottom: 0">Double-clicking on various tree view items results in the following actions:
-<UL>
- <LI><P style="margin-top: 0; margin-bottom: 0">On namespace or any type of class - expanding/collapsing respective subtree</LI>
- <LI><p style="margin-top: 0; margin-bottom: 0">On manifest, field, method, event, property - showing disassembly of the item in a separate window</LI>
- <LI><p style="margin-top: 0; margin-bottom: 0">On <B>.class</B> info item - showing partial disassembly of the class in a separate window</LI>
- <LI><p style="margin-top: 0; margin-bottom: 0">On <B>extends</B> info item - selecting the parent class (if present) in tree view</LI>
- <LI><p style="margin-top: 0; margin-bottom: 0">On <B>implements</B> info item - selecting the implemented interface (if present) in tree view</LI>
-</UL>
-</font>
-
-</BODY>
-</HTML>
diff --git a/src/ildasm/html/keyboard.htm b/src/ildasm/html/keyboard.htm
deleted file mode 100644
index 6730adcc22..0000000000
--- a/src/ildasm/html/keyboard.htm
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
-<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
-<TITLE>Keyboard Commands</TITLE>
-
-<STYLE>
- BODY {background: white; color: black}
- h3 {font: 8pt Arial bold}
- P {font: 10pt Arial}
- TD {font: 10pt Arial}
- A {text-decoration: none; color: blue}
-</STYLE>
-
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
-<font face="Arial">
-<H1 style="margin-top: 0; margin-bottom: 0"><A NAME="keyboard"><font size="4">
-</font></A><I><font size="4">KEYBOARD COMMANDS</font></I></H1>
-<p style="margin-top: 0; margin-bottom: 0">&nbsp;</p>
-
-<font size="2">
-
-<P style="margin-top: 0; margin-bottom: 0">Hot keys: </P>
-<blockquote>
- <table border="1" width="90%" id="table1">
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+O</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- open a file</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+D</B>
-</font>
- </td>
- <td>
-
-<font size="2" face="Arial">
-
- disassemble the loaded file into IL source file</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+T</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- dump fully expanded tree view into a text file</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+M</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- show metadata info in a disassembly window (advanced mode only)</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+X</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- exit</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>F1</B> or
- <B>Alt+H</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- Show this help window</font></td>
- </tr>
- </table>
-</blockquote>
-<P style="margin-top: 0; margin-bottom: 0">&nbsp;</P>
-
-<p style="margin-top: 0; margin-bottom: 0"></p>
-
-<P style="margin-top: 0; margin-bottom: 0">In tree view:</P>
-
-<blockquote>
- <table border="1" width="90%" id="table2">
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <b>Enter</b></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- similar to double clicking (see above)</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <b>Cursor right</b></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- expand subtree</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <b>Cursor left</b></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- collapse subtree</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <b>Cursor up/down</b></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- select previous/next item</font></td>
- </tr>
- </table>
-</blockquote>
-</font>
-</font>
-</BODY>
-</HTML>
diff --git a/src/ildasm/html/menu_options.htm b/src/ildasm/html/menu_options.htm
deleted file mode 100644
index d96f59acfa..0000000000
--- a/src/ildasm/html/menu_options.htm
+++ /dev/null
@@ -1,324 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
-<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
-<TITLE>Menu Options</TITLE>
-
-<STYLE>
- BODY {background: white; color: black}
- h3 {font: 8pt Arial bold}
- P {font: 10pt Arial}
- blockquote {text-indent: 0%}
- TD {font: 10pt Arial}
- A {text-decoration: none; color: blue}
-</STYLE>
-
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
-<font face="Arial">
-<P style="margin-top: 0; margin-bottom: 0"><A NAME="menu_options"></A><B><I><font size="4">MENU OPTIONS</font></I></B></P>
-
-<P style="margin-top: 0; margin-bottom: 0">&nbsp;</P>
-<P style="margin-top: 0; margin-bottom: 0"><B>File</B> (Alt+F)</P>
-<font size="2">
-<blockquote>
- <table border="1" width="90%" id="table1">
- <tr>
- <td width="155" valign="top">
-<font size="2" face="Arial">
- <B>Open</B> (Ctrl+O)</font></td>
- <td>
-<font size="2" face="Arial">
- select a PE file to open</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-<font size="2" face="Arial">
- <B>Dump</B> (Ctrl+D)</font></td>
- <td>
-<font size="2" face="Arial">
- dump the current PE file to an IL source file</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-<font size="2" face="Arial">
- <B>Dump TreeView</B> (Ctrl+T)</font></td>
- <td>
-<font size="2" face="Arial">
- dump the fully expanded tree view of current PE file to a text file</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-<font size="2" face="Arial">
- <B>Exit</B> (Ctrl+X)</font></td>
- <td>
-<font size="2" face="Arial">
- close the current PE file and exit</font></td>
- </tr>
- </table>
-</blockquote>
-</font>
-<p style="margin-top: 0; margin-bottom: 0">
-</P>
-
-<P style="margin-top: 0; margin-bottom: 0">&nbsp;</P>
-<P style="margin-top: 0; margin-bottom: 0"><B>View</B> (Alt+V)</P>
-
-<font size="2">
-<blockquote>
- <table border="1" width="90%" id="table2">
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Set Fonts</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- set the fonts for tree view and disassembly windows. Default fonts
- are MS Sans Serif 8 for tree view and Courier 10 for Disassembly
- windows</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Sort by name</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) sort the items in tree view by name</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Public</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having public accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Private</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having private accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Family</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having family accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Assembly</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having assembly accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show FamANDAssem</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having family-and-assembly
- accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show FamORAssem</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having family-or-assembly
- accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show PrivateScope</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having private scope accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Member Types</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show types of members ('method','field',etc.) in tree view nodes</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show bytes</B>
-</font>
- </td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show the actual IL code in hexadecimal (as comments) when
- disassembling the methods</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show token values</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show token values in hexadecimal (as comments)</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show source lines</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show the original source code (as comments, if the original
- source is available)</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Quote all names</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) include all names in single quotes (when off, only illegal
- names are quoted)</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Expand try/catch</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) present SEH clauses in expanded form when possible (<B>try { ... } catch ExceptionClass { ... }</B>)</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>COR Header</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- show contents of COR header in a disassembly window"</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Statistics</B> <br>
- (advanced mode only)</font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- show PE file statistics in a disassembly window</font></td>
- </tr>
- <tr>
- <td width="155" rowspan="6" valign="top">
-
-<font size="2" face="Arial">
- <B>MetaInfo</B> <br>
- (advanced mode only)</font></td>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>Header</B>
-</font>
- </td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) show metadata info as header summary</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>More HEX</B></font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) show token and attribute values (in hexadecimal) in
- metadata info</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>CSV</B></font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) show metadata info as comma-separated values</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>Unresolved ext</B></font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) add list of unresolved external references to metadata info</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>Validate</B></font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) show metadata validation results</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>Show!</B> (Ctrl+M)</font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- show the metadata info in a disassembly window</font></td>
- </tr>
- </table>
-</blockquote>
-</font>
-</font>
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/src/ildasm/html/tree_view_icons.htm b/src/ildasm/html/tree_view_icons.htm
deleted file mode 100644
index d39e7e811d..0000000000
--- a/src/ildasm/html/tree_view_icons.htm
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
-<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
-<TITLE>Tree View Icons</TITLE>
-
-<STYLE>
- BODY {background: white; color: black}
- h3 {font: 8pt Arial bold}
- P {font: 10pt Arial}
- TD {font: 10pt Arial}
- A {text-decoration: none; color: blue}
-</STYLE>
-
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
-<font face="Arial">
-
-<H1 style="margin-top: 0; margin-bottom: 0"><A NAME="tree_view_icons">
-</A><I><font size="4">TREE VIEW ICONS</font></I></H1>
-<p style="margin-top: 0; margin-bottom: 0">&nbsp;</p>
-
-<table border="1" width="82%" id="table1" cellpadding="3" cellspacing="3" >
-<font size="2">
- <tr>
- <td width="148" valign="top"><b>Namespace</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/namespace.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Blue shield)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Class</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/class.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Blue rectangle with three outputs)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Interface</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/interface.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Blue rectangle with three outputs marked 'I')</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Value Class</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/value_class.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Brown rectangle with three outputs)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Enum</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/enum.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Brown rectangle with three outputs marked 'E')</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Method</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/method.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Magenta rectangle)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Static method</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/static_method.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Magenta rectangle marked 'S')</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Field</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/field.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Cyan diamond)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Static field</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/static_field.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Cyan diamond marked 'S')</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Event</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/event.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Green point-down triangle)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Property</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/property.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Red point-up triangle)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Manifest or a class info item</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/manifest_classinfo.GIF" width="15" height="15"></td>
- <td width="321" valign="top">(Red point-right triangle)</td>
- </tr>
-</font></table>
-
-</font>
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/src/ildasm/html/tree_view_icons_files/class.gif b/src/ildasm/html/tree_view_icons_files/class.gif
deleted file mode 100644
index 53d1494a33..0000000000
--- a/src/ildasm/html/tree_view_icons_files/class.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/enum.gif b/src/ildasm/html/tree_view_icons_files/enum.gif
deleted file mode 100644
index af7a94ee0b..0000000000
--- a/src/ildasm/html/tree_view_icons_files/enum.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/event.gif b/src/ildasm/html/tree_view_icons_files/event.gif
deleted file mode 100644
index 00de688ab8..0000000000
--- a/src/ildasm/html/tree_view_icons_files/event.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/field.gif b/src/ildasm/html/tree_view_icons_files/field.gif
deleted file mode 100644
index 0b6ed0a74b..0000000000
--- a/src/ildasm/html/tree_view_icons_files/field.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/interface.gif b/src/ildasm/html/tree_view_icons_files/interface.gif
deleted file mode 100644
index 21664cc715..0000000000
--- a/src/ildasm/html/tree_view_icons_files/interface.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIF b/src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIF
deleted file mode 100644
index 8811686023..0000000000
--- a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIF
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpg b/src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpg
deleted file mode 100644
index 8a752429eb..0000000000
--- a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpg
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.png b/src/ildasm/html/tree_view_icons_files/manifest_classinfo.png
deleted file mode 100644
index a68d41dd02..0000000000
--- a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.png
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/method.gif b/src/ildasm/html/tree_view_icons_files/method.gif
deleted file mode 100644
index d96cfe4e0b..0000000000
--- a/src/ildasm/html/tree_view_icons_files/method.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/namespace.gif b/src/ildasm/html/tree_view_icons_files/namespace.gif
deleted file mode 100644
index 4001293dc0..0000000000
--- a/src/ildasm/html/tree_view_icons_files/namespace.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/property.gif b/src/ildasm/html/tree_view_icons_files/property.gif
deleted file mode 100644
index 08edbf854c..0000000000
--- a/src/ildasm/html/tree_view_icons_files/property.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/static_field.gif b/src/ildasm/html/tree_view_icons_files/static_field.gif
deleted file mode 100644
index d8d6ff3ca3..0000000000
--- a/src/ildasm/html/tree_view_icons_files/static_field.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/static_method.gif b/src/ildasm/html/tree_view_icons_files/static_method.gif
deleted file mode 100644
index 5d982e1fc8..0000000000
--- a/src/ildasm/html/tree_view_icons_files/static_method.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/value_class.gif b/src/ildasm/html/tree_view_icons_files/value_class.gif
deleted file mode 100644
index d4546f510f..0000000000
--- a/src/ildasm/html/tree_view_icons_files/value_class.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/ildasm.chm b/src/ildasm/ildasm.chm
deleted file mode 100644
index 166b1ca936..0000000000
--- a/src/ildasm/ildasm.chm
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/ildasm.hhp b/src/ildasm/ildasm.hhp
deleted file mode 100644
index 71d47f5ff7..0000000000
--- a/src/ildasm/ildasm.hhp
+++ /dev/null
@@ -1,36 +0,0 @@
-[OPTIONS]
-Binary Index=No
-Compatibility=1.1 or later
-Compiled file=ildasm.chm
-Contents file=dasmhlp.hhc
-Default Font=Arial,8,0
-Default Window=Main
-Default topic=html\menu_options.htm
-Display compile progress=No
-Full-text search=Yes
-Language=0x409 English (United States)
-Title=MSIL Disassembler Help
-
-[WINDOWS]
-Main="MSIL Disassembler Help","dasmhlp.hhc",,"html\menu_options.htm","html\menu_options.htm",,,,,0x42520,185,0x3006,[253,102,1070,702],,0x8,,,,,0
-
-
-[FILES]
-html\clicking.htm
-html\keyboard.htm
-html\menu_options.htm
-html\tree_view_icons.htm
-ildasm.hhp
-map.h
-
-[ALIAS]
-CLICKING=html\clicking.htm
-KEYBOARD=html\keyboard.htm
-MENU_OPTIONS=html\menu_options.htm
-TREE_VIEW_ICONS=html\tree_view_icons.htm
-
-[MAP]
-#include map.h
-
-[INFOTYPES]
-
diff --git a/src/ildasm/map.h b/src/ildasm/map.h
deleted file mode 100644
index 5f0cfec93c..0000000000
--- a/src/ildasm/map.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#define MENU_OPTIONS 1
-#define TREE_VIEW_ICONS 2
-#define CLICKING 3
-#define KEYBOARD 4
diff --git a/src/ildasm/method.bmp b/src/ildasm/method.bmp
deleted file mode 100644
index b76bb93ef7..0000000000
--- a/src/ildasm/method.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/methodg.bmp b/src/ildasm/methodg.bmp
deleted file mode 100644
index dfa4c68c10..0000000000
--- a/src/ildasm/methodg.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/namespace.bmp b/src/ildasm/namespace.bmp
deleted file mode 100644
index 6ac839ee65..0000000000
--- a/src/ildasm/namespace.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/prop.bmp b/src/ildasm/prop.bmp
deleted file mode 100644
index 857e69c3fe..0000000000
--- a/src/ildasm/prop.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/rcdll/CMakeLists.txt b/src/ildasm/rcdll/CMakeLists.txt
index 5fb49daedc..316f778769 100644
--- a/src/ildasm/rcdll/CMakeLists.txt
+++ b/src/ildasm/rcdll/CMakeLists.txt
@@ -24,4 +24,4 @@ target_link_libraries(ildasmrc
${STATIC_MT_VCRT_LIB}
)
-install_clr (ildasmrc) \ No newline at end of file
+install_clr (ildasmrc)
diff --git a/src/ildasm/rcdll/ildasmrc.nativeproj b/src/ildasm/rcdll/ildasmrc.nativeproj
deleted file mode 100644
index 9fae17ca1f..0000000000
--- a/src/ildasm/rcdll/ildasmrc.nativeproj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <IsDesktopTool>true</IsDesktopTool>
- <OutputName>ildasmrc</OutputName>
- <TargetType>DYNLINK</TargetType>
- <LinkSubsystem>windows</LinkSubsystem>
- <RCAdditionalOptions>$(RCAdditionalOptions) -r</RCAdditionalOptions>
- <LinkResourceOnlyDll>true</LinkResourceOnlyDll>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <RCResourceFile Include="..\dasm.rc" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/ildasm/redarrow.bmp b/src/ildasm/redarrow.bmp
deleted file mode 100644
index ce94dc8fb2..0000000000
--- a/src/ildasm/redarrow.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/resource.h b/src/ildasm/resource.h
index ae126fafb4..6d7d1e8c40 100644
--- a/src/ildasm/resource.h
+++ b/src/ildasm/resource.h
@@ -7,63 +7,7 @@
// Used by dasm.rc
//
-#define IDS_FILE 1
-#define IDS_VIEW 2
-#define IDS_HELP 3
-#define IDS_OPEN 4
-#define IDS_DUMP 5
-#define IDS_DUMPTREE 6
-#define IDS_EXIT 7
-#define IDS_FONTS 8
-#define IDS_FONT_TREE 9
-#define IDS_FONT_DASM 10
-#define IDS_SORT_BY_NAME 11
-#define IDS_SHOW_PUB 12
-#define IDS_SHOW_PRIV 13
-#define IDS_SHOW_FAM 14
-#define IDS_SHOW_ASM 15
-#define IDS_SHOW_FAA 16
-#define IDS_SHOW_FOA 17
-#define IDS_SHOW_PSCOPE 18
-#define IDS_FULL_INFO 19
-#define IDS_BYTES 20
-#define IDS_TOKENS 21
-#define IDS_SOURCELINES 22
-#define IDS_QUOTEALLNAMES 23
-#define IDS_EXPANDTRY 24
-#define IDS_SHOW_HEADER 25
-#define IDS_SHOW_STAT 26
-#define IDS_METAINFO 27
-#define IDS_MI_HEADER 28
-#define IDS_MI_HEX 29
-#define IDS_MI_CSV 30
-#define IDS_MI_UNREX 31
-#define IDS_MI_DEBUG 32
-#define IDS_MI_SCHEMA 33
-#define IDS_MI_RAW 34
-#define IDS_MI_HEAPS 35
-#define IDS_MI_VALIDATE 36
-#define IDS_SHOW_METAINFO 37
-#define IDS_ABOUT 38
-#define IDS_ABOUT_COPYRIGHTINFO 39
-#define IDS_PRODUCTNAME 40
-#define IDS_MAINWINDOWCAPTION 41
-#define IDS_MAINWINDOWCAPTIONAPPEND 42
-#define IDS_NETHEADER 43
-#define IDS_STATISTICS 44
-#define IDS_METAINFOTEXT 45
-#define IDS_FIND 46
-#define IDS_FINDNEXT 47
#define IDS_RTL 48
-#define IDS_TREEVIEWFCN 49
-#define IDS_CAVERBAL 50
-#define IDS_DUMPRTF 51
-
-#define IDI_ICON2 136
-#define IDD_DIALOG1 137
-#define IDD_ABOUT 149
-#define IDR_MAINMENU 149
-#define IDI_ICON1 150
#define IDS_USAGE_TITLE 200
#define IDS_USAGE_01 IDS_USAGE_TITLE + 1
@@ -152,7 +96,6 @@
#define IDS_E_BADCORHDR 404
#define IDS_E_OPENMD 405
#define IDS_E_COPYRIGHT 406
-#define IDS_E_DASMABORT 407
#define IDS_E_DASMOK 408
#define IDS_E_PARTDASM 409
#define IDS_E_INSTRDT 410
diff --git a/src/ildasm/staticfield.bmp b/src/ildasm/staticfield.bmp
deleted file mode 100644
index 70edc432c1..0000000000
--- a/src/ildasm/staticfield.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/staticmethod.bmp b/src/ildasm/staticmethod.bmp
deleted file mode 100644
index bc87d243ae..0000000000
--- a/src/ildasm/staticmethod.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/staticmethodg.bmp b/src/ildasm/staticmethodg.bmp
deleted file mode 100644
index fedc1c56da..0000000000
--- a/src/ildasm/staticmethodg.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/windasm.cpp b/src/ildasm/windasm.cpp
index 57f779fd50..13b56fca42 100644
--- a/src/ildasm/windasm.cpp
+++ b/src/ildasm/windasm.cpp
@@ -13,8 +13,6 @@
#include "dynamicarray.h"
-#define DO_DASM_GUI
-#include "dasmgui.h"
#include "dasmenum.hpp"
#include "dis.h"
#include <ndpversion.h>
@@ -26,7 +24,6 @@
#define MODE_DUMP_CLASS 1
#define MODE_DUMP_CLASS_METHOD 2
#define MODE_DUMP_CLASS_METHOD_SIG 3
-#define MODE_GUI 4
// All externs are defined in DASM.CPP
extern BOOL g_fDumpIL;
@@ -47,7 +44,6 @@ extern BOOL g_fShowSource;
extern BOOL g_fInsertSourceLines;
extern BOOL g_fTryInCode;
extern BOOL g_fQuoteAllNames;
-extern BOOL g_fShowProgressBar;
extern BOOL g_fTDC;
extern BOOL g_fShowCA;
extern BOOL g_fCAVerbal;
@@ -99,13 +95,6 @@ void Cleanup();
void DumpMetaInfo(__in __nullterminated const WCHAR* pszFileName, __in __nullterminated const char* pszObjFileName, void* GUICookie);
FILE* OpenOutput(__in __nullterminated const char* szFileName);
-// Do we only view an IL-dasm window in GUI mode?
-// TRUE when we're in GUI mode and we specified a particular method from the cmd line
-BOOL IsGuiILOnly()
-{
- return (g_Mode & MODE_GUI) && (g_pszMethodToDump[0] != 0);
-}
-
void PrintLogo()
{
printf("Microsoft (R) .NET Framework IL Disassembler. Version " VER_FILEVERSION_STR);
@@ -221,11 +210,7 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam
}
else if (_stricmp(szOpt, "sou") == 0)
{
-#ifdef FEATURE_CORECLR
printf("Warning: 'SOURCE' option is ignored for ildasm on CoreCLR.\n");
-#else
- g_fShowSource = TRUE;
-#endif
}
else if (_stricmp(szOpt, "lin") == 0)
{
@@ -303,10 +288,6 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam
g_fHideFOA ||
g_fHidePrivScope;
}
- else if (_stricmp(szOpt, "nob") == 0)
- {
- g_fShowProgressBar = FALSE;
- }
else if (_stricmp(szOpt, "quo") == 0)
{
g_fQuoteAllNames = TRUE;
@@ -383,29 +364,7 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam
}
else if ((_stricmp(szOpt, "met") == 0)&&g_fTDC)
{
-#ifdef FEATURE_CORECLR
printf("Warning: 'METADATA' option is ignored for ildasm on CoreCLR.\n");
-#else
-
- char *pStr = EqualOrColon(szArg);
- g_fDumpMetaInfo = TRUE;
- if(pStr)
- {
- char szOptn[64];
- strncpy_s(szOptn, 64, pStr+1,10);
- szOptn[3] = 0; // recognize metainfo specifier by first 3 chars
- if (_stricmp(szOptn, "hex") == 0) g_ulMetaInfoFilter |= MDInfo::dumpMoreHex;
- else if(_stricmp(szOptn, "csv") == 0) g_ulMetaInfoFilter |= MDInfo::dumpCSV;
- else if(_stricmp(szOptn, "mdh") == 0) g_ulMetaInfoFilter |= MDInfo::dumpHeader;
- else if(_stricmp(szOptn, "raw") == 0) g_ulMetaInfoFilter |= MDInfo::dumpRaw;
- else if(_stricmp(szOptn, "hea") == 0) g_ulMetaInfoFilter |= MDInfo::dumpRawHeaps;
- else if(_stricmp(szOptn, "sch") == 0) g_ulMetaInfoFilter |= MDInfo::dumpSchema;
- else if(_stricmp(szOptn, "unr") == 0) g_ulMetaInfoFilter |= MDInfo::dumpUnsat;
- else if(_stricmp(szOptn, "val") == 0) g_ulMetaInfoFilter |= MDInfo::dumpValidate;
- else if(_stricmp(szOptn, "sta") == 0) g_ulMetaInfoFilter |= MDInfo::dumpStats;
- else return -1;
- }
-#endif // FEATURE_CORECLR
}
else if (_stricmp(szOpt, "obj") == 0)
{
@@ -428,15 +387,6 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam
strncpy_s(g_szOutputFile, MAX_FILENAME_LENGTH, pStr,MAX_FILENAME_LENGTH-1);
g_szOutputFile[MAX_FILENAME_LENGTH-1] = 0;
}
- else
- g_fShowProgressBar = FALSE;
-
- g_Mode &= ~MODE_GUI;
- }
- else if (_stricmp(szOpt, "tex") == 0)
- {
- g_Mode &= ~MODE_GUI;
- g_fShowProgressBar = FALSE;
}
else
{
@@ -541,16 +491,9 @@ int ParseCmdLineA(__in __nullterminated char* szCmdLine, __out char** ppszObjFil
return ret;
}
-#ifdef FEATURE_CORECLR
int __cdecl main(int nCmdShow, char* lpCmdLine[])
-#else
-int APIENTRY WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- __in LPSTR lpCmdLine,
- int nCmdShow)
-#endif
{
-#if defined(FEATURE_CORECLR) && defined(FEATURE_PAL)
+#if defined(FEATURE_PAL)
if (0 != PAL_Initialize(nCmdShow, lpCmdLine))
{
printError(g_pFile, "Error: Fail to PAL_Initialize\n");
@@ -575,10 +518,6 @@ int APIENTRY WinMain(HINSTANCE hInstance,
g_fUseProperName = TRUE;
-#ifndef FEATURE_CORECLR
- g_hInstance = hInstance;
- g_Mode = MODE_GUI;
-#endif
g_pszClassToDump[0]=0;
g_pszMethodToDump[0]=0;
g_pszSigToDump[0]=0;
@@ -623,7 +562,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,
SyntaxCon();
exit((iCommandLineParsed == 1) ? 0 : 1);
}
- if(!(g_Mode & MODE_GUI))
+
{
DWORD exitCode = 1;
if(g_szInputFile[0] == 0)
@@ -658,75 +597,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,
Uninit();
exit(exitCode);
}
- else // if GUI ordered, restart as WinApp
- {
-#ifdef FEATURE_CORECLR
- _ASSERTE(!"GUI is not supported for ildasm on CoreCLR.");
-#else
- PROCESS_INFORMATION pi;
- STARTUPINFO si;
- memset(&pi, 0, sizeof(PROCESS_INFORMATION) );
- memset(&si, 0, sizeof(STARTUPINFO) );
- si.cb = sizeof(STARTUPINFO);
- si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
- si.wShowWindow = SW_SHOW;
- si.hStdOutput = INVALID_HANDLE_VALUE;
- si.hStdInput = INVALID_HANDLE_VALUE;
- si.hStdError = INVALID_HANDLE_VALUE;
- // Create the child process.
- if(CreateProcessW(NULL,
- wzCommandLine, // command line
- NULL, // process security attributes
- NULL, // primary thread security attributes
- TRUE, // handles are inherited
- DETACHED_PROCESS, // creation flags
- NULL, // use parent's environment
- NULL, // use parent's current directory
- (LPSTARTUPINFOW)&si, // STARTUPINFO pointer
- &pi)==0) // receives PROCESS_INFORMATION
- {
- printf(RstrANSI(IDS_E_CANTCREATEPROC));//"Failed to CreateProcess\n\n");
- exit(1);
- }
- exit(0);
-#endif
- }
- }
-#ifndef FEATURE_CORECLR
- else //Second pass: WinApp
- {
- g_uCodePage = CP_UTF8;
- g_Mode = MODE_GUI;
- g_fDumpHTML = FALSE;
-
- if(g_szInputFile[0])
- {
- char* pch = strrchr(g_szInputFile,'.');
- if(pch && (!_strcmpi(pch+1,"lib") || !_strcmpi(pch+1,"obj")))
- {
- WszMessageBox(NULL,
- RstrW(IDS_ONLYPEINGUI),//"ILDASM supports only PE files in graphic mode",
- RstrW(IDS_BADFILETYPE),//"Invalid File Type",
- MB_OK|MB_ICONERROR|GetDasmMBRTLStyle());
- return 0;
- }
- }
- if (Init() == TRUE)
- {
- CreateGUI();
- if(g_szInputFile[0])
- {
- GUISetModule(g_szInputFile);
- DumpFile();
- }
- GUIMainLoop();
- Cleanup();
- DestroyGUI();
- }
- Uninit();
- return 0 ;
}
-#endif
return 0;
}
diff --git a/src/inc/1031/CORPerfMonSymbols.ini b/src/inc/1031/CORPerfMonSymbols.ini
deleted file mode 100644
index 3c656ef037..0000000000
--- a/src/inc/1031/CORPerfMonSymbols.ini
+++ /dev/null
@@ -1,576 +0,0 @@
-; Licensed to the .NET Foundation under one or more agreements.
-; The .NET Foundation licenses this file to you under the MIT license.
-; See the LICENSE file in the project root for more information.
-
-//------------------------------------------------------------------------
-// WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
-//
-// AUTO GENERATED FILE. DO NOT EDIT. USE $/com99/src/profile/perfmonhelp
-//
-// WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
-//------------------------------------------------------------------------
-
-// CORPerfMonSymbols.ini file
-[info]
-drivername=.NETFramework
-symbolfile=CORPerfMonSymbols.h
-
-[languages]
-009=English
-; 001=Arabic
-; 004=Chinese
- 007=German
-; 00D=Hebrew
-; 011=Japanese
-; 012=Korean
-; 00A=Spanish
-; 00C=French
-; 010=Italian
-
-[objects]
-DotNetCLR_Memory_OBJECT_009_NAME=.NET CLR Memory
-DotNetCLR_Loading_OBJECT_009_NAME=.NET CLR Loading
-DotNetCLR_Jit_OBJECT_009_NAME=.NET CLR Jit
-DotNetCLR_Interop_OBJECT_009_NAME=.NET CLR Interop
-DotNetCLR_LocksAndThreads_OBJECT_009_NAME=.NET CLR LocksAndThreads
-DotNetCLR_Security_OBJECT_009_NAME=.NET CLR Security
-DotNetCLR_Remoting_OBJECT_009_NAME=.NET CLR Remoting
-DotNetCLR_Excep_OBJECT_009_NAME=.NET CLR Exceptions
-DotNetCLR_Memory_OBJECT_007_NAME=.NET CLR-Speicher
-DotNetCLR_Loading_OBJECT_007_NAME=.NET CLR-Ladevorgang
-DotNetCLR_Jit_OBJECT_007_NAME=.NET CLR-Jit
-DotNetCLR_Interop_OBJECT_007_NAME=.NET CLR-Interop
-DotNetCLR_LocksAndThreads_OBJECT_007_NAME=.NET CLR-Sperren und Threads
-DotNetCLR_Security_OBJECT_007_NAME=.NET CLR-Sicherheit
-DotNetCLR_Remoting_OBJECT_007_NAME=.NET CLR-Remote
-DotNetCLR_Excep_OBJECT_007_NAME=.NET CLR-Ausnahmen
-
-[text]
-DotNetCLR_Memory_OBJECT_009_NAME=.NET CLR Memory
-DotNetCLR_Memory_OBJECT_009_HELP=Counters for CLR Garbage Collected heap.
-
-GEN0_COLLECTIONS_COUNTER_009_NAME=# Gen 0 Collections
-GEN0_COLLECTIONS_COUNTER_009_HELP=This counter displays the number of times the generation 0 objects (youngest; most recently allocated) are garbage collected (Gen 0 GC) since the start of the application. Gen 0 GC occurs when the available memory in generation 0 is not sufficient to satisfy an allocation request. This counter is incremented at the end of a Gen 0 GC. Higher generation GCs include all lower generation GCs. This counter is explicitly incremented when a higher generation (Gen 1 or Gen 2) GC occurs. _Global_ counter value is not accurate and should be ignored. This counter displays the last observed value.
-
-GEN1_COLLECTIONS_COUNTER_009_NAME=# Gen 1 Collections
-GEN1_COLLECTIONS_COUNTER_009_HELP=This counter displays the number of times the generation 1 objects are garbage collected since the start of the application. The counter is incremented at the end of a Gen 1 GC. Higher generation GCs include all lower generation GCs. This counter is explicitly incremented when a higher generation (Gen 2) GC occurs. _Global_ counter value is not accurate and should be ignored. This counter displays the last observed value.
-
-GEN2_COLLECTIONS_COUNTER_009_NAME=# Gen 2 Collections
-GEN2_COLLECTIONS_COUNTER_009_HELP=This counter displays the number of times the generation 2 objects (older) are garbage collected since the start of the application. The counter is incremented at the end of a Gen 2 GC (also called full GC). _Global_ counter value is not accurate and should be ignored. This counter displays the last observed value.
-
-GEN0_BYTES_PROMOTED_COUNTER_009_NAME=Promoted Memory from Gen 0
-GEN0_BYTES_PROMOTED_COUNTER_009_HELP=This counter displays the bytes of memory that survive garbage collection (GC) and are promoted from generation 0 to generation 1; objects that are promoted just because they are waiting to be finalized are not included in this counter. This counter displays the value observed at the end of the last GC; its not a cumulative counter.
-
-GEN1_BYTES_PROMOTED_COUNTER_009_NAME=Promoted Memory from Gen 1
-GEN1_BYTES_PROMOTED_COUNTER_009_HELP=This counter displays the bytes of memory that survive garbage collection (GC) and are promoted from generation 1 to generation 2; objects that are promoted just because they are waiting to be finalized are not included in this counter. This counter displays the value observed at the end of the last GC; its not a cumulative counter. This counter is reset to 0 if the last GC was a Gen 0 GC only.
-
-GEN0_PROMOTION_RATE_009_NAME=Gen 0 Promoted Bytes/Sec
-GEN0_PROMOTION_RATE_009_HELP=This counter displays the bytes per second that are promoted from generation 0 (youngest) to generation 1; objects that are promoted just because they are waiting to be finalized are not included in this counter. Memory is promoted when it survives a garbage collection. This counter was designed as an indicator of relatively long-lived objects being created per sec. This counter displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-GEN1_PROMOTION_RATE_009_NAME=Gen 1 Promoted Bytes/Sec
-GEN1_PROMOTION_RATE_009_HELP=This counter displays the bytes per second that are promoted from generation 1 to generation 2 (oldest); objects that are promoted just because they are waiting to be finalized are not included in this counter. Memory is promoted when it survives a garbage collection. Nothing is promoted from generation 2 since it is the oldest. This counter was designed as an indicator of very long-lived objects being created per sec. This counter displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-GEN0_FINALIZATION_BYTES_PROMOTED_COUNTER_009_NAME=Promoted Finalization-Memory from Gen 0
-GEN0_FINALIZATION_BYTES_PROMOTED_COUNTER_009_HELP=This counter displays the bytes of memory that are promoted from generation 0 to generation 1 just because they are waiting to be finalized. This counter displays the value observed at the end of the last GC; its not a cumulative counter.
-
-GEN1_FINALIZATION_BYTES_PROMOTED_COUNTER_009_NAME=Promoted Finalization-Memory from Gen 1
-GEN1_FINALIZATION_BYTES_PROMOTED_COUNTER_009_HELP=This counter displays the bytes of memory that are promoted from generation 1 to generation 2 just because they are waiting to be finalized. This counter displays the value observed at the end of the last GC; its not a cumulative counter. This counter is reset to 0 if the last GC was a Gen 0 GC only.
-
-GEN0_HEAP_SIZE_COUNTER_009_NAME=Gen 0 heap size
-GEN0_HEAP_SIZE_COUNTER_009_HELP=This counter displays the maximum bytes that can be allocated in generation 0 (Gen 0); its does not indicate the current number of bytes allocated in Gen 0. A Gen 0 GC is triggered when the allocations since the last GC exceed this size. The Gen 0 size is tuned by the Garbage Collector and can change during the execution of the application. At the end of a Gen 0 collection the size of the Gen 0 heap is infact 0 bytes; this counter displays the size (in bytes) of allocations that would trigger the next Gen 0 GC. This counter is updated at the end of a GC; its not updated on every allocation.
-
-GEN1_HEAP_SIZE_COUNTER_009_NAME=Gen 1 heap size
-GEN1_HEAP_SIZE_COUNTER_009_HELP=This counter displays the current number of bytes in generation 1 (Gen 1); this counter does not display the maximum size of Gen 1. Objects are not directly allocated in this generation; they are promoted from previous Gen 0 GCs. This counter is updated at the end of a GC; its not updated on every allocation.
-
-GEN2_HEAP_SIZE_COUNTER_009_NAME=Gen 2 heap size
-GEN2_HEAP_SIZE_COUNTER_009_HELP=This counter displays the current number of bytes in generation 2 (Gen 2). Objects are not directly allocated in this generation; they are promoted from Gen 1 during previous Gen 1 GCs. This counter is updated at the end of a GC; its not updated on every allocation.
-
-LARGE_OBJECT_SIZE_COUNTER_009_NAME=Large Object Heap size
-LARGE_OBJECT_SIZE_COUNTER_009_HELP=This counter displays the current size of the Large Object Heap in bytes. Objects greater than 20 KBytes are treated as large objects by the Garbage Collector and are directly allocated in a special heap; they are not promoted through the generations. This counter is updated at the end of a GC; its not updated on every allocation.
-
-SURVIVE_FINALIZE_COUNTER_009_NAME=Finalization Survivors
-SURVIVE_FINALIZE_COUNTER_009_HELP=This counter displays the number of garbage collected objects that survive a collection because they are waiting to be finalized. If these objects hold references to other objects then those objects also survive but are not counted by this counter; the "Promoted Finalization-Memory from Gen 0" and "Promoted Finalization-Memory from Gen 1" counters represent all the memory that survived due to finalization. This counter is not a cumulative counter; its updated at the end of every GC with count of the survivors during that particular GC only. This counter was designed to indicate the extra overhead that the application might incur because of finalization.
-
-NUM_HANDLES_COUNTER_009_NAME=# GC Handles
-NUM_HANDLES_COUNTER_009_HELP=This counter displays the current number of GC Handles in use. GCHandles are handles to resources external to the CLR and the managed environment. Handles occupy small amounts of memory in the GCHeap but potentially expensive unmanaged resources.
-
-ALLOCATION_RATE_COUNTER_009_NAME=Allocated Bytes/sec
-ALLOCATION_RATE_COUNTER_009_HELP=This counter displays the rate of bytes per second allocated on the GC Heap. This counter is updated at the end of every GC; not at each allocation. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-INDUCED_GC_COUNTER_009_NAME=# Induced GC
-INDUCED_GC_COUNTER_009_HELP=This counter displays the peak number of times a garbage collection was performed because of an explicit call to GC.Collect. Its a good practice to let the GC tune the frequency of its collections.
-
-PER_TIME_IN_GC_COUNTER_009_NAME=% Time in GC
-PER_TIME_IN_GC_COUNTER_009_HELP=% Time in GC is the percentage of elapsed time that was spent in performing a garbage collection (GC) since the last GC cycle. This counter is usually an indicator of the work done by the Garbage Collector on behalf of the application to collect and compact memory. This counter is updated only at the end of every GC and the counter value reflects the last observed value; its not an average.
-
-PER_TIME_IN_GC_COUNTER_BASE_009_NAME=Not Displayed
-PER_TIME_IN_GC_COUNTER_BASE_009_HELP=Not Displayed.
-
-TOTAL_HEAP_SIZE_COUNTER_009_NAME=# Bytes in all Heaps
-TOTAL_HEAP_SIZE_COUNTER_009_HELP=This counter is the sum of four other counters; Gen 0 Heap Size; Gen 1 Heap Size; Gen 2 Heap Size and the Large Object Heap Size. This counter indicates the current memory allocated in bytes on the GC Heaps.
-
-TOTAL_COMMITTED_MEM_COUNTER_009_NAME=# Total committed Bytes
-TOTAL_COMMITTED_MEM_COUNTER_009_HELP=This counter displays the amount of virtual memory (in bytes) currently committed by the Garbage Collector. (Committed memory is the physical memory for which space has been reserved on the disk paging file).
-
-TOTAL_RESERVED_MEM_COUNTER_009_NAME=# Total reserved Bytes
-TOTAL_RESERVED_MEM_COUNTER_009_HELP=This counter displays the amount of virtual memory (in bytes) currently reserved by the Garbage Collector. (Reserved memory is the virtual memory space reserved for the application but no disk or main memory pages have been used.)
-
-GC_PINNED_OBJECTS_009_NAME=# of Pinned Objects
-GC_PINNED_OBJECTS_009_HELP=This counter displays the number of pinned objects encountered in the last GC. This counter tracks the pinned objects only in the heaps that were garbage collected e.g. a Gen 0 GC would cause enumeration of pinned objects in the generation 0 heap only. A pinned object is one that the Garbage Collector cannot move in memory.
-
-GC_SINKBLOCKS_009_NAME=# of Sink Blocks in use
-GC_SINKBLOCKS_009_HELP=This counter displays the current number of sync blocks in use. Sync blocks are per-object data structures allocated for storing synchronization information. Sync blocks hold weak references to managed objects and need to be scanned by the Garbage Collector. Sync blocks are not limited to storing synchronization information and can also store COM interop metadata. This counter was designed to indicate performance problems with heavy use of synchronization primitives.
-
-DotNetCLR_Loading_OBJECT_009_NAME=.NET CLR Loading
-DotNetCLR_Loading_OBJECT_009_HELP=Statistics for CLR Class Loader.
-
-LOADING_CLASSES_TOTAL_009_NAME=Total Classes Loaded
-LOADING_CLASSES_TOTAL_009_HELP=This counter displays the cumulative number of classes loaded in all Assemblies since the start of this application.
-
-LOADING_TIME_009_NAME=% Time Loading
-LOADING_TIME_009_HELP=Reserved for future use.
-
-LOADING_ASMSEARCHLEN_009_NAME=Assembly Search Length
-LOADING_ASMSEARCHLEN_009_HELP=Reserved for future use.
-
-LOADING_LOADFAILURES_TOTAL_009_NAME=Total # of Load Failures
-LOADING_LOADFAILURES_TOTAL_009_HELP=This counter displays the peak number of classes that have failed to load since the start of the application. These load failures could be due to many reasons like inadequate security or illegal format. Full details can be found in the profiling services help.
-
-LOADING_LOADFAILURES_INST_009_NAME=Rate of Load Failures
-LOADING_LOADFAILURES_INST_009_HELP=This counter displays the number of classes that failed to load per second. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval. These load failures could be due to many reasons like inadequate security or illegal format. Full details can be found in the profiling services help.
-
-LOADING_HEAPSIZE_009_NAME=Bytes in Loader Heap
-LOADING_HEAPSIZE_009_HELP=This counter displays the current size (in bytes) of the memory committed by the class loader across all AppDomains. (Committed memory is the physical memory for which space has been reserved on the disk paging file.)
-
-LOADING_APPDOMAINS_UNLOADED_TOTAL_009_NAME=Total appdomains unloaded
-LOADING_APPDOMAINS_UNLOADED_TOTAL_009_HELP=This counter displays the total number of AppDomains unloaded since the start of the application. If an AppDomain is loaded and unloaded multiple times this counter would count each of those unloads as separate.
-
-LOADING_APPDOMAINS_UNLOADED_INST_009_NAME=Rate of appdomains unloaded
-LOADING_APPDOMAINS_UNLOADED_INST_009_HELP=This counter displays the number of AppDomains unloaded per second. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-LOADING_CLASSES_CUR_009_NAME=Current Classes Loaded
-LOADING_CLASSES_CUR_009_HELP=This counter displays the current number of classes loaded in all Assemblies.
-
-LOADING_CLASSES_INST_009_NAME=Rate of Classes Loaded
-LOADING_CLASSES_INST_009_HELP=This counter displays the number of classes loaded per second in all Assemblies. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-LOADING_APPDOMAINS_CUR_009_NAME=Current appdomains
-LOADING_APPDOMAINS_CUR_009_HELP=This counter displays the current number of AppDomains loaded in this application. AppDomains (application domains) provide a secure and versatile unit of processing that the CLR can use to provide isolation between applications running in the same process.
-
-LOADING_APPDOMAINS_TOTAL_009_NAME=Total Appdomains
-LOADING_APPDOMAINS_TOTAL_009_HELP=This counter displays the peak number of AppDomains loaded since the start of this application. AppDomains (application domains) provide a secure and versatile unit of processing that the CLR can use to provide isolation between applications running in the same process.
-
-LOADING_APPDOMAINS_INST_009_NAME=Rate of appdomains
-LOADING_APPDOMAINS_INST_009_HELP=This counter displays the number of AppDomains loaded per second. AppDomains (application domains) provide a secure and versatile unit of processing that the CLR can use to provide isolation between applications running in the same process. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-LOADING_ASSEMBLIES_CUR_009_NAME=Current Assemblies
-LOADING_ASSEMBLIES_CUR_009_HELP=This counter displays the current number of Assemblies loaded across all AppDomains in this application. If the Assembly is loaded as domain-neutral from multiple AppDomains then this counter is incremented once only. Assemblies can be loaded as domain-neutral when their code can be shared by all AppDomains or they can be loaded as domain-specific when their code is private to the AppDomain.
-
-LOADING_ASSEMBLIES_TOTAL_009_NAME=Total Assemblies
-LOADING_ASSEMBLIES_TOTAL_009_HELP=This counter displays the total number of Assemblies loaded since the start of this application. If the Assembly is loaded as domain-neutral from multiple AppDomains then this counter is incremented once only. Assemblies can be loaded as domain-neutral when their code can be shared by all AppDomains or they can be loaded as domain-specific when their code is private to the AppDomain.
-
-LOADING_ASSEMBLIES_INST_009_NAME=Rate of Assemblies
-LOADING_ASSEMBLIES_INST_009_HELP=This counter displays the number of Assemblies loaded across all AppDomains per second. If the Assembly is loaded as domain-neutral from multiple AppDomains then this counter is incremented once only. Assemblies can be loaded as domain-neutral when their code can be shared by all AppDomains or they can be loaded as domain-specific when their code is private to the AppDomain. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-DotNetCLR_Jit_OBJECT_009_NAME=.NET CLR Jit
-DotNetCLR_Jit_OBJECT_009_HELP=Stats for CLR Jit.
-
-TOTAL_METHODS_JITTED_009_NAME=# of Methods Jitted
-TOTAL_METHODS_JITTED_009_HELP=This counter displays the total number of methods compiled Just-In-Time (JIT) by the CLR JIT compiler since the start of the application. This counter does not include the pre-jitted methods.
-
-JITTED_IL_CUR_009_NAME=# of IL Bytes Jitted
-JITTED_IL_CUR_009_HELP=This counter displays the total IL bytes jitted since the start of the application. This counter is exactly equivalent to the "Total # of IL Bytes Jitted" counter.
-
-JITTED_IL_TOTAL_009_NAME=Total # of IL Bytes Jitted
-JITTED_IL_TOTAL_009_HELP=This counter displays the total IL bytes jitted since the start of the application. This counter is exactly equivalent to the "# of IL Bytes Jitted" counter.
-
-JITTED_IL_INST_009_NAME=IL Bytes Jitted / sec
-JITTED_IL_INST_009_HELP=This counter displays the rate at which IL bytes are jitted per second. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-JIT_FAILURES_009_NAME=Standard Jit Failures
-JIT_FAILURES_009_HELP=This counter displays the peak number of methods the JIT compiler has failed to JIT since the start of the application. This failure can occur if the IL cannot be verified or if there was an internal error in the JIT compiler.
-
-TIME_IN_JIT_009_NAME=% Time in Jit
-TIME_IN_JIT_009_HELP=This counter displays the percentage of elapsed time spent in JIT compilation since the last JIT compilation phase. This counter is updated at the end of every JIT compilation phase. A JIT compilation phase is the phase when a method and its dependencies are being compiled.
-
-TIME_IN_JIT_BASE_009_NAME=Not Displayed
-TIME_IN_JIT_BASE_009_HELP=Not Displayed.
-
-DotNetCLR_Interop_OBJECT_009_NAME=.NET CLR Interop
-DotNetCLR_Interop_OBJECT_009_HELP=Stats for CLR interop.
-
-CURRENT_CCW_009_NAME=# of CCWs
-CURRENT_CCW_009_HELP=This counter displays the current number of Com-Callable-Wrappers (CCWs). A CCW is a proxy for the .NET managed object being referenced from unmanaged COM client(s). This counter was designed to indicate the number of managed objects being referenced by unmanaged COM code.
-
-CURRENT_STUBS_009_NAME=# of Stubs
-CURRENT_STUBS_009_HELP=This counter displays the current number of stubs created by the CLR. Stubs are responsible for marshalling arguments and return values from managed to unmanaged code and vice versa; during a COM Interop call or PInvoke call.
-
-NUM_MARSHALLING_009_NAME=# of marshalling
-NUM_MARSHALLING_009_HELP=This counter displays the total number of times arguments and return values have been marshaled from managed to unmanaged code and vice versa since the start of the application. This counter is not incremented if the stubs are inlined. (Stubs are responsible for marshalling arguments and return values). Stubs usually get inlined if the marshalling overhead is small.
-
-TOTAL_TLB_IMPORTS_009_NAME=# of TLB imports / sec
-TOTAL_TLB_IMPORTS_009_HELP=Reserved for future use.
-
-TOTAL_TLB_EXPORTS_009_NAME=# of TLB exports / sec
-TOTAL_TLB_EXPORTS_009_HELP=Reserved for future use.
-
-DotNetCLR_LocksAndThreads_OBJECT_009_NAME=.NET CLR LocksAndThreads
-DotNetCLR_LocksAndThreads_OBJECT_009_HELP=Stats for CLR Locks and Threads.
-
-CONTENTION_TOTAL_009_NAME=Total # of Contentions
-CONTENTION_TOTAL_009_HELP=This counter displays the total number of times threads in the CLR have attempted to acquire a managed lock unsuccessfully. Managed locks can be acquired in many ways; by the "lock" statement in C# or by calling System.Monitor.Enter or by using MethodImplOptions.Synchronized custom attribute.
-
-CONTENTION_INST_009_NAME=Contention Rate / sec
-CONTENTION_INST_009_HELP=Rate at which threads in the runtime attempt to acquire a managed lock unsuccessfully. Managed locks can be acquired in many ways; by the "lock" statement in C# or by calling System.Monitor.Enter or by using MethodImplOptions.Synchronized custom attribute.
-
-QUEUE_LENGTH_CUR_009_NAME=Current Queue Length
-QUEUE_LENGTH_CUR_009_HELP=This counter displays the total number of threads currently waiting to acquire some managed lock in the application. This counter is not an average over time; it displays the last observed value.
-
-QUEUE_LENGTH_TOTAL_009_NAME=Queue Length Peak
-QUEUE_LENGTH_TOTAL_009_HELP=This counter displays the total number of threads that waited to acquire some managed lock since the start of the application.
-
-QUEUE_LENGTH_INST_009_NAME=Queue Length / sec
-QUEUE_LENGTH_INST_009_HELP=This counter displays the number of threads per second waiting to acquire some lock in the application. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-CURRENT_LOGICAL_THREADS_009_NAME=# of current logical Threads
-CURRENT_LOGICAL_THREADS_009_HELP=This counter displays the number of current .NET thread objects in the application. A .NET thread object is created either by new System.Threading.Thread or when an unmanaged thread enters the managed environment. This counters maintains the count of both running and stopped threads. This counter is not an average over time; it just displays the last observed value.
-
-CURRENT_PHYSICAL_THREADS_009_NAME=# of current physical Threads
-CURRENT_PHYSICAL_THREADS_009_HELP=This counter displays the number of native OS threads created and owned by the CLR to act as underlying threads for .NET thread objects. This counters value does not include the threads used by the CLR in its internal operations; it is a subset of the threads in the OS process.
-
-RECOGNIZED_THREADS_CUR_009_NAME=# of current recognized threads
-RECOGNIZED_THREADS_CUR_009_HELP=This counter displays the number of threads that are currently recognized by the CLR; they have a corresponding .NET thread object associated with them. These threads are not created by the CLR; they are created outside the CLR but have since run inside the CLR at least once. Only unique threads are tracked; threads with same thread ID re-entering the CLR or recreated after thread exit are not counted twice.
-
-RECOGNIZED_THREADS_TOTAL_009_NAME=# of total recognized threads
-RECOGNIZED_THREADS_TOTAL_009_HELP=This counter displays the total number of threads that have been recognized by the CLR since the start of this application; these threads have a corresponding .NET thread object associated with them. These threads are not created by the CLR; they are created outside the CLR but have since run inside the CLR at least once. Only unique threads are tracked; threads with same thread ID re-entering the CLR or recreated after thread exit are not counted twice.
-
-RECOGNIZED_THREADS_INST_009_NAME=rate of recognized threads / sec
-RECOGNIZED_THREADS_INST_009_HELP=This counter displays the number of threads per second that have been recognized by the CLR; these threads have a corresponding .NET thread object associated with them. These threads are not created by the CLR; they are created outside the CLR but have since run inside the CLR at least once. Only unique threads are tracked; threads with same thread ID re-entering the CLR or recreated after thread exit are not counted twice. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-DotNetCLR_Security_OBJECT_009_NAME=.NET CLR Security
-DotNetCLR_Security_OBJECT_009_HELP=Stats for CLR Security.
-
-SECURITY_TOTALRTCHECKS_009_NAME=Total Runtime Checks
-SECURITY_TOTALRTCHECKS_009_HELP=This counter displays the total number of runtime Code Access Security (CAS) checks performed since the start of the application. Runtime CAS checks are performed when a caller makes a call to a callee demanding a particular permission; the runtime check is made on every call by the caller; the check is done by examining the current thread stack of the caller. This counter used together with "Stack Walk Depth" is indicative of performance penalty for security checks.
-
-SECURITY_TIMEAUTHORIZE_009_NAME=% Time Sig. Authenticating
-SECURITY_TIMEAUTHORIZE_009_HELP=Reserved for future use.
-
-SECURITY_LINKCHECKS_009_NAME=# Link Time Checks
-SECURITY_LINKCHECKS_009_HELP=This counter displays the total number of linktime Code Access Security (CAS) checks since the start of the application. Linktime CAS checks are performed when a caller makes a call to a callee demanding a particular permission at JIT compile time; linktime check is performed once per caller. This count is not indicative of serious performance issues; its indicative of the security system activity.
-
-SECURITY_TIMERTCHECKS_009_NAME=% Time in RT checks
-SECURITY_TIMERTCHECKS_009_HELP=This counter displays the percentage of elapsed time spent in performing runtime Code Access Security (CAS) checks since the last such check. CAS allows code to be trusted to varying degrees and enforces these varying levels of trust depending on code identity. This counter is updated at the end of a runtime security check; it represents the last observed value; its not an average.
-
-SECURITY_TIMERTCHECKS_BASE_009_NAME=Not Displayed
-SECURITY_TIMERTCHECKS_BASE_009_HELP=Not Displayed.
-
-SECURITY_DEPTHSECURITY_009_NAME=Stack Walk Depth
-SECURITY_DEPTHSECURITY_009_HELP=This counter displays the depth of the stack during that last runtime Code Access Security check. Runtime Code Access Security check is performed by crawling the stack. This counter is not an average; it just displays the last observed value.
-
-DotNetCLR_Remoting_OBJECT_009_NAME=.NET CLR Remoting
-DotNetCLR_Remoting_OBJECT_009_HELP=Stats for CLR Remoting.
-
-CONTEXT_REMOTECALLS_INST_009_NAME=Remote Calls/sec
-CONTEXT_REMOTECALLS_INST_009_HELP=This counter displays the number of remote procedure calls invoked per second. A remote procedure call is a call on any object outside the caller;s AppDomain. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-CONTEXT_CHANNELS_009_NAME=Channels
-CONTEXT_CHANNELS_009_HELP=This counter displays the total number of remoting channels registered across all AppDomains since the start of the application. Channels are used to transport messages to and from remote objects.
-
-CONTEXT_PROXIES_009_NAME=Context Proxies
-CONTEXT_PROXIES_009_HELP=This counter displays the total number of remoting proxy objects created in this process since the start of the process. Proxy object acts as a representative of the remote objects and ensures that all calls made on the proxy are forwarded to the correct remote object instance.
-
-CONTEXT_CLASSES_009_NAME=Context-Bound Classes Loaded
-CONTEXT_CLASSES_009_HELP=This counter displays the current number of context-bound classes loaded. Classes that can be bound to a context are called context-bound classes; context-bound classes are marked with Context Attributes which provide usage rules for synchronization; thread affinity; transactions etc.
-
-CONTEXT_OBJALLOC_009_NAME=Context-Bound Objects Alloc / sec
-CONTEXT_OBJALLOC_009_HELP=This counter displays the number of context-bound objects allocated per second. Instances of classes that can be bound to a context are called context-bound objects; context-bound classes are marked with Context Attributes which provide usage rules for synchronization; thread affinity; transactions etc. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-CONTEXT_CONTEXTS_009_NAME=Contexts
-CONTEXT_CONTEXTS_009_HELP=This counter displays the current number of remoting contexts in the application. A context is a boundary containing a collection of objects with the same usage rules like synchronization; thread affinity; transactions etc.
-
-CONTEXT_REMOTECALLS_TOTAL_009_NAME=Total Remote Calls
-CONTEXT_REMOTECALLS_TOTAL_009_HELP=This counter displays the total number of remote procedure calls invoked since the start of this application. A remote procedure call is a call on any object outside the caller;s AppDomain.
-
-DotNetCLR_Excep_OBJECT_009_NAME=.NET CLR Exceptions
-DotNetCLR_Excep_OBJECT_009_HELP=Runtime statistics on CLR exception handling.
-
-EXCEP_THROWN_TOTAL_009_NAME=# of Exceps Thrown
-EXCEP_THROWN_TOTAL_009_HELP=This counter displays the total number of exceptions thrown since the start of the application. These include both .NET exceptions and unmanaged exceptions that get converted into .NET exceptions e.g. null pointer reference exception in unmanaged code would get re-thrown in managed code as a .NET System.NullReferenceException; this counter includes both handled and unhandled exceptions. Exceptions that are re-thrown would get counted again. Exceptions should only occur in rare situations and not in the normal control flow of the program.
-
-EXCEP_THROWN_INST_009_NAME=# of Exceps Thrown / sec
-EXCEP_THROWN_INST_009_HELP=This counter displays the number of exceptions thrown per second. These include both .NET exceptions and unmanaged exceptions that get converted into .NET exceptions e.g. null pointer reference exception in unmanaged code would get re-thrown in managed code as a .NET System.NullReferenceException; this counter includes both handled and unhandled exceptions. Exceptions should only occur in rare situations and not in the normal control flow of the program; this counter was designed as an indicator of potential performance problems due to large (>100s) rate of exceptions thrown. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-TOTAL_EXCEP_FILTERS_RUN_009_NAME=# of Filters / sec
-TOTAL_EXCEP_FILTERS_RUN_009_HELP=This counter displays the number of .NET exception filters executed per second. An exception filter evaluates whether an exception should be handled or not. This counter tracks the rate of exception filters evaluated; irrespective of whether the exception was handled or not. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-TOTAL_EXCEP_FINALLYS_RUN_009_NAME=# of Finallys / sec
-TOTAL_EXCEP_FINALLYS_RUN_009_HELP=This counter displays the number of finally blocks executed per second. A finally block is guaranteed to be executed regardless of how the try block was exited. Only the finally blocks that are executed for an exception are counted; finally blocks on normal code paths are not counted by this counter. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-EXCEPT_STACK_DEPTH_009_NAME=Throw To Catch Depth / sec
-EXCEPT_STACK_DEPTH_009_HELP=This counter displays the number of stack frames traversed from the frame that threw the .NET exception to the frame that handled the exception per second. This counter resets to 0 when an exception handler is entered; so nested exceptions would show the handler to handler stack depth. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-DotNetCLR_Memory_OBJECT_007_NAME=.NET CLR-Speicher
-DotNetCLR_Memory_OBJECT_007_HELP=Zähler für CLR Garbage Collection Heap.
-
-GEN0_COLLECTIONS_COUNTER_007_NAME=Auflistungsanzahl der Generation 0
-GEN0_COLLECTIONS_COUNTER_007_HELP=Dieser Zähler zeigt an, wie oft die Objekte der Generation 0 (die zuletzt zugeordneten Objekte) seit dem Anwendungsstart in die Garbage collection (Gen 0 GC) aufgenommen wurden. Gen 0 GC tritt auf, wenn in Generation 0 nicht genügend Speicher verfügbar ist, um eine Zuordnungsanforderung auszuführen. Der Zähler wird am Ende einer Gen 0 GC erhöht. Die höheren GCs enthalten alle niedrigeren GCs. Der Zähler wird explizit erhöht, wenn eine höhere Generation (Gen 1 oder Gen 2) GC auftritt. Der Zählerwert _Global_ ist falsch und sollte ignoriert werden. Der Zähler zeigt den letzten Wert an.
-
-GEN1_COLLECTIONS_COUNTER_007_NAME=Auflistungsanzahl der Generation 1
-GEN1_COLLECTIONS_COUNTER_007_HELP=Dieser Zähler zeigt an, wie oft die Objekte der Generation 1 seit dem Anwendungsstart in die Garbage collection (Gen 0 GC) aufgenommen wurden. Der Zähler wird am Ende einer Gen 1 GC erhöht. Die höheren GCs enthalten alle niedrigeren GCs. Der Zähler wird explizit erhöht, wenn eine höhere Generation (Gen 2) GC auftritt. Der Zählerwert _Global_ ist falsch und sollte ignoriert werden. Der Zähler zeigt den letzten Wert an.
-
-GEN2_COLLECTIONS_COUNTER_007_NAME=Auflistungsanzahl der Generation 2
-GEN2_COLLECTIONS_COUNTER_007_HELP=Dieser Zähler zeigt an, wie oft die Objekte der Generation 2 (älter) seit dem Anwendungsstart in die Garbage collection (Gen 0 GC) aufgenommen wurden. Der Zähler wird am Ende einer Gen 2 GC (Vollständige GC) erhöht. Der Zählerwert _Global_ ist falsch und sollte ignoriert werden. Der Zähler zeigt den letzten Wert an.
-
-GEN0_BYTES_PROMOTED_COUNTER_007_NAME=Von Generation 0 avancierter Speicher
-GEN0_BYTES_PROMOTED_COUNTER_007_HELP=Dieser Zähler zeigt die Größe des Arbeitsspeichers in Bytes an, der nicht in die Garbage collection (GC) aufgenommen und von Generation 0 zu Generation 1 heraufgestuft wurde. Objekte, die nur heraufgestuft werden, da sie auf die Beendigung warten, sind nicht in diesem Zähler enthalten. Der Zähler zeigt den Wert am Ende der letzten GC an. Der Zähler ist nicht kumulativ.
-
-GEN1_BYTES_PROMOTED_COUNTER_007_NAME=Von Generation 1 avancierter Speicher
-GEN1_BYTES_PROMOTED_COUNTER_007_HELP=Dieser Zähler zeigt die Größe des Arbeitsspeichers in Bytes an, der nicht in die Garbage Collection (GC) aufgenommen und von Generation 1 zu Generation 2 heraufgestuft wurde. Objekte, die nur heraufgestuft werden, da sie auf die Beendigung warten, sind nicht in diesem Zähler enthalten. Der Zähler zeigt den Wert am Ende der letzten GC an. Der Zähler ist nicht kumulativ. Der Zähler wird auf 0 zurückgesetzt, wenn die letzte GC nur eine Gen 0 GC war.
-
-GEN0_PROMOTION_RATE_007_NAME=Von Generation 0 avancierte Bytes/Sek.
-GEN0_PROMOTION_RATE_007_HELP=Dieser Zähler zeigt die Bytes pro Sekunde an, die von Generation 0 (neueste) zu Generation 1 heraufgestuft werden. Objekte, die nur heraufgestuft werden, da sie auf die Beendigung warten, sind nicht in diesem Zähler enthalten. Der Speicher wird heraufgestuft, wenn er nicht in eine Garbage Collection aufgenommen wurde. Der Zähler wurde als Indikator von relativ langlebigen Objekten entworfen, die pro Sekunde erstellt werden. Der Zählen zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-GEN1_PROMOTION_RATE_007_NAME=Von Generation 1 avancierte Bytes/Sek.
-GEN1_PROMOTION_RATE_007_HELP=Dieser Zähler zeigt die Bytes pro Sekunde an, die von Generation 1 zu Generation 2 (älteste) heraufgestuft werden. Objekte, die nur heraufgestuft werden, da sie auf die Beendigung warten, sind nicht in diesem Zähler enthalten. Der Speicher wird heraufgestuft, wenn er nicht in eine Garbage Collection aufgenommen wurde. Von Generation 2 werden keine Objekte heraufgestuft, da sie die älteste Generation ist. Der Zähler wurde als Indikator von sehr langlebigen Objekten entworfen, die pro Sekunde erstellt werden. Der Zählen zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-GEN0_FINALIZATION_BYTES_PROMOTED_COUNTER_007_NAME=Von Gen 0 heraufgestufter Finalization-Speicher
-GEN0_FINALIZATION_BYTES_PROMOTED_COUNTER_007_HELP=Dieser Zähler zeigt die Größe des Arbeitsspeichers in Bytes an, von Generation 0 zu Generation 1 heraufgestuft wurde, da er auf die Beendigung wartet. Der Zähler zeigt den Wert am Ende der letzten GC an. Der Zähler ist nicht kumulativ.
-
-GEN1_FINALIZATION_BYTES_PROMOTED_COUNTER_007_NAME=Von Gen 1 heraufgestufter Finalization-Speicher
-GEN1_FINALIZATION_BYTES_PROMOTED_COUNTER_007_HELP=Dieser Zähler zeigt die Größe des Arbeitsspeichers in Bytes an, von Generation 1 zu Generation 2 heraufgestuft wurde, da er auf die Beendigung wartet. Der Zähler zeigt den Wert am Ende der letzten GC an. Der Zähler ist nicht kumulativ. Der Zähler wird auf 0 zurückgesetzt, wenn die letzte GC nur eine Gen 0 GC war.
-
-GEN0_HEAP_SIZE_COUNTER_007_NAME=Heapgröße der Generation 0
-GEN0_HEAP_SIZE_COUNTER_007_HELP=Dieser Zähler zeigt die maximale Anzahl der Bytes an, die in Generation 0 (Gen 0) zugeordnet werden können. Die aktuelle Anzahl der in Gen 0 zugeordneten Bytes wird nicht angezeigt. Eine Gen 0 GC wird ausgelöst, wenn die Zuordnung seit der letzten GC diesen Wert überschreitet size. Die Größe von Gen 0 wird vom Garbage Collector festgelegt und kann sich während dem Ausführen der Anwendung ändern. Am Ende einer Gen 0-Collection beträgt die Größe des Gen 0-Heaps 0 Bytes. Der Zähler zeigt die Größe (in Bytes) von Zuordnungen an, die die nächste Gen 0 GC auslösen. Der Zähler wird am Ende einer GC aktualisiert; nicht bei jeder Zuordnung.
-
-GEN1_HEAP_SIZE_COUNTER_007_NAME=Heapgröße der Generation 1
-GEN1_HEAP_SIZE_COUNTER_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der Bytes in Generation 1 (Gen 1) an. Die maximale Größe von Gen 1 wird nicht angezeigt. Objekte werden in dieser Generation nicht direkt zugeordnet, sondern von vorherigen Gen 0 GCs heraufgestuft. Der Zähler wird am Ende einer GC aktualisiert; nicht bei jeder Zuordnung.
-
-GEN2_HEAP_SIZE_COUNTER_007_NAME=Heapgröße der Generation 2
-GEN2_HEAP_SIZE_COUNTER_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der Bytes in Generation 2 (Gen 2) an. Objekte werden in dieser Generation nicht direkt zugeordnet, sondern von Gen 1 während vorherigenen Gen 1 GCs heraufgestuft. Der Zähler wird am Ende einer GC aktualisiert; nicht bei jeder Zuordnung.
-
-LARGE_OBJECT_SIZE_COUNTER_007_NAME=Objektheapgröße
-LARGE_OBJECT_SIZE_COUNTER_007_HELP=Dieser Zähler zeigt die aktuelle Größe des großen Objektheaps in Bytes an. Objekte, die größer als 20 KB sind, werden vom Garbage Collector als große Objekte behandelt und direkt in einem speziellen Heap zugeordnet. Sie werden nicht über Generationen heraufgestuft. Der Zähler wird am Ende einer GC aktualisiert; nicht bei jeder Zuordnung.
-
-SURVIVE_FINALIZE_COUNTER_007_NAME=Finalization Survivors
-SURVIVE_FINALIZE_COUNTER_007_HELP=Dieser Zähler zeigt die Anzahl der Objekt in der Garbage Collection an, die beibehalten werden, da sie auf die Beendigung warten. Wenn die Objekte Verweise auf andere Objekte enthalten, werden diese ebenfalls beibehalten, aber nicht gezählt. Die Zähler "Von Gen 0 heraufgestufter Finalization-Speicher" und "Von Gen 1 heraufgestufter Finalization-Speicher" stellen den gesamten Speicher dar, der beibehalten wurde. Der Zähler ist nicht kumulativ. Er wird am Ende einer GC mit den beibehaltenen Objekten aktualisiert. Der Zähler zeigt die zusätzlichen Objekte an, die die Anwendung aufgrund der Beendigung möglicherweise übernimmt.
-
-NUM_HANDLES_COUNTER_007_NAME=Anzahl der GC-Handle
-NUM_HANDLES_COUNTER_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der verwendeten G-Handles an. GCHandles sind Handles für externe CLR-Ressourecen und der verwalteten Umgebung. Die Handles belegeben nur wenig Arbeitsspeicher im GCHeap, aber wertvolle nicht verwaltete Ressourcen.
-
-ALLOCATION_RATE_COUNTER_007_NAME=Zugewiesene Bytes/Sek.
-ALLOCATION_RATE_COUNTER_007_HELP=Dieser Zähle zeigt die Rate der Bytes pro Sekunde an, die im GC-Heap zugeordnet werden. Der Zähler wird am Ende der GC aktualisiert, nicht bei jeder Zuordnung. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-INDUCED_GC_COUNTER_007_NAME=Anzahl der ausgelösten GC
-INDUCED_GC_COUNTER_007_HELP=Dieser Zähler zeigt an, wie oft die Garbage Collection aufgrund eines expliziten Aufrufs an GC.Collect maximal ausgeführt wurde. Die GC sollte die Frequenz ihrer Collections selbst festlegen.
-
-PER_TIME_IN_GC_COUNTER_007_NAME=GC-Zeitdauer in Prozent
-PER_TIME_IN_GC_COUNTER_007_HELP=Die GC-Zeitdauer in Prozent gibt die verstrichene Zeitdauer für eine Garbage Collection (GC) an, die seit dem letzten GC-Zyklus ausgeführt wurde. Der Zähler zeigt gewöhnlich an, wieviel Speicher vom Garbage Collector für die Anwendung gesammelt und komprimiert wurde. Der Zähler wird nur am Ende einer GC aktualisiert. Der Zählerwert reflektiert den letzten Wert; er gibt keinen Durchschnitt an.
-
-PER_TIME_IN_GC_COUNTER_BASE_007_NAME=Nicht angezeigt
-PER_TIME_IN_GC_COUNTER_BASE_007_HELP=Nicht angezeigt.
-
-TOTAL_HEAP_SIZE_COUNTER_007_NAME=Anzahl der Bytes in den Heaps
-TOTAL_HEAP_SIZE_COUNTER_007_HELP=Dieser Zähler stellt die Summe aus den vier anderen Zählern dar: Gen 0-Heapgröße, Gen 1-Heapgröße, Gen 2-Heapgröße und die Large Object-Heapgröße. Dieser Zähler zeigt den in den GC-Heaps zugeordneten Speicher in Bytes an.
-
-TOTAL_COMMITTED_MEM_COUNTER_007_NAME=Festgelegte Bytes insgesamt
-TOTAL_COMMITTED_MEM_COUNTER_007_HELP=Dieser Zähler zeigt den virtuellen Speicher in Bytes an, der vom Garbage Collector reserviert wurde. (Reservierter Arbeitsspeicher ist der physikalische Speicher, der in der Auslagerungsdatei des Datenträgers reserviert wird).
-
-TOTAL_RESERVED_MEM_COUNTER_007_NAME=Gesamtanzahl der reservierten Bytes
-TOTAL_RESERVED_MEM_COUNTER_007_HELP=Dieser Zähler zeigt den virtuellen Speicher in Bytes an, der vom Garbage Collector reserviert wird. (Reservierter Speicher ist der virtuelle Arbeitsspeicher, der für die Anwendung reserviert wird.)
-
-GC_PINNED_OBJECTS_007_NAME=Anzahl der fixierten Objekte
-GC_PINNED_OBJECTS_007_HELP=Dieser Zähler zeigt die Anzahl der fixierten Objekte in der letzten GC an. Der Zähler verfolgt die fixierten Objekte nur in den Heaps in der Garbage Collection. Eine Gen 0 GC verursacht z.B. die Enumeration der fixierten Objekte nur im Generation 0-Heap. Ein fixiertes Objekt kann nicht vom Garbage Collector in den Speicher verschoben werden.
-
-GC_SINKBLOCKS_007_NAME=Anzahl der verwendeten Sinkblöcke
-GC_SINKBLOCKS_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der verwendeten Synchronisierungsblöcke an. Synchronisierungsblöcke sind die Datenstrukturen pro Objekt, die zum Speichern der Synchronisierungsinformationen zugeordnet werden. Synchronisierungsblöcke enthalten Weak-Verweise auf verwaltete Objekte und müssen vom Garbage Collector überprüft werden. In Synchronisierungsblöcken können auch COM-Interop-Metadaten gespeichert werden. Der Zähler zeigt Leistungsprobleme an, die auftreten, wenn die Synchronisierungsprimitiven zu oft verwendet werden.
-
-DotNetCLR_Loading_OBJECT_007_NAME=.NET CLR-Ladevorgang
-DotNetCLR_Loading_OBJECT_007_HELP=Statistiken für das CLR-Klassenladeprogramm.
-
-LOADING_CLASSES_TOTAL_007_NAME=Gesamtanzahl der geladenen Klassen
-LOADING_CLASSES_TOTAL_007_HELP=Dieser Zähler zeigt die kumulative Anzahl der Klassen an, die in allen Assemblys seit dem Start der Anwendung geladen wurden.
-
-LOADING_TIME_007_NAME=Ladezeit in Prozent
-LOADING_TIME_007_HELP=Für die zukünftige Verwendung reserviert.
-
-LOADING_ASMSEARCHLEN_007_NAME=Assemblysuchlänge
-LOADING_ASMSEARCHLEN_007_HELP=Für die zukünftige Verwendung reserviert.
-
-LOADING_LOADFAILURES_TOTAL_007_NAME=Gesamtanzahl der Ladefehler
-LOADING_LOADFAILURES_TOTAL_007_HELP=Dieser Zähler zeigt die Höchstanzahl der Klassen an, die seit dem Start der Anwendung nicht geladen werden konnten. Möglicherweise ist die Sicherheit unangemessen oder das Format ist ungültig. Weitere Informationen finden Sie in der Hilfe.
-
-LOADING_LOADFAILURES_INST_007_NAME=Rate der Ladefehler
-LOADING_LOADFAILURES_INST_007_HELP=Dieser Zähler zeigt die Anzahl der Klassen pro Sekunde an, die nicht geladen werden konnten. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an. Die Ladefehler können mehrere Ursachen haben; z.B. unzureichende Sicherheit oder ein ungültiges Format. Weitere Informationen finden Sie in der Hilfe.
-
-LOADING_HEAPSIZE_007_NAME=Bytes im Lademodulheap
-LOADING_HEAPSIZE_007_HELP=Dieser Zähler zeigt die aktuelle Größe (in Bytes) des Arbeitsspeichers an, der vom Klassenladeprogramm in allen Anwendungsdomänen reserviert wurde. (Reservierter Arbeitsspeicher ist der physikalische Speicher, der in der Auslagerungsdatei des Datenträgers reserviert wird.)
-
-LOADING_APPDOMAINS_UNLOADED_TOTAL_007_NAME=Gesamtanzahl der entladenen Anwendungsdomänen
-LOADING_APPDOMAINS_UNLOADED_TOTAL_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der Anwendungsdomänen an, die seit dem Anwendungsstart entladen wurden. Wenn eine Anwendungsdomäne mehrmals geladen und entladen wird, werden die Entladevorgänge einzeln gezählt.
-
-LOADING_APPDOMAINS_UNLOADED_INST_007_NAME=Rate der entladenen Anwendungsdomänen
-LOADING_APPDOMAINS_UNLOADED_INST_007_HELP=Dieser Zähler zeigt die Anzahl der Anwendungsdomänen an, die pro Sekunde entladen werden. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-LOADING_CLASSES_CUR_007_NAME=Aktuelle geladene Klassen
-LOADING_CLASSES_CUR_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der in allen Assemblys geladenen Klassen an.
-
-LOADING_CLASSES_INST_007_NAME=Rate der geladenen Klassen
-LOADING_CLASSES_INST_007_HELP=Dieser Zähler zeigt die Anzahl der pro Sekunden in allen Assemblys geladenen Klassen an. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-LOADING_APPDOMAINS_CUR_007_NAME=Aktuelle Anwendungsdomänen
-LOADING_APPDOMAINS_CUR_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der Anwendungsdomänen an, die in der Anwendung geladen sind. Anwendungsdomänen stellen eine sichere und vielseitige Verarbeitungseinheit bereit, mit der die CLR Anwendungen isolieren kann, die im gleichen Prozess ausgeführt werden.
-
-LOADING_APPDOMAINS_TOTAL_007_NAME=Anwendungsdomänen insgesamt
-LOADING_APPDOMAINS_TOTAL_007_HELP=Dieser Zähler zeigt die Höchstanzahl der Anwendungsdomänen an, die seit dem Starten Anwendung geladen wurden. Anwendungsdomänen stellen eine sichere und vielseitige Verarbeitungseinheit bereit, mit der die CLR Anwendungen isolieren kann, die im gleichen Prozess ausgeführt werden.
-
-LOADING_APPDOMAINS_INST_007_NAME=Rate der Anwendungsdomänen
-LOADING_APPDOMAINS_INST_007_HELP=Dieser Zähler zeigt die Anzahl der Anwendungsdomänen an, die pro Sekunde geladen werden. Anwendungsdomänen stellen eine sichere und vielseitige Verarbeitungseinheit bereit, mit der die CLR Anwendungen isolieren kann, die im gleichen Prozess ausgeführt werden. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-LOADING_ASSEMBLIES_CUR_007_NAME=Aktuelle Assemblys
-LOADING_ASSEMBLIES_CUR_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der Assemblys an, die in dieser Anwendung in allen Anwendungsdomänen geladen werden. Wenn die Assembly von mehreren Anwendungsdomänen als domänenneutral geladen wird, wird der Zähler nur einmal erhöht. Assemblys können als domänenneutral geladen werden, wenn ihr Code von allen Anwendungsdomänen gemeinsam genutzt werden kann. Assemblys können domänenspezifisch geladen werden, wenn ihr Code in der Anwendungsdomäne privat ist.
-
-LOADING_ASSEMBLIES_TOTAL_007_NAME=Assemblys insgesamt
-LOADING_ASSEMBLIES_TOTAL_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der Assemblys an, die seit dem Start der Anwendung geladen wurden. Wenn die Assembly von mehreren Anwendungsdomänen als domänenneutral geladen wird, wird der Zähler nur einmal erhöht. Assemblys können als domänenneutral geladen werden, wenn ihr Code von allen Anwendungsdomänen gemeinsam genutzt werden kann. Assemblys können domänenspezifisch geladen werden, wenn ihr Code in der Anwendungsdomäne privat ist.
-
-LOADING_ASSEMBLIES_INST_007_NAME=Assemblyrate
-LOADING_ASSEMBLIES_INST_007_HELP=Dieser Zähler zeigt die Anzahl der Assemblys an, die pro Sekunden in allen Anwendungsdomänen geladen werden. Wenn die Assembly von mehreren Anwendungsdomänen als domänenneutral geladen wird, wird der Zähler nur einmal erhöht. Assemblys können als domänenneutral geladen werden, wenn ihr Code von allen Anwendungsdomänen gemeinsam genutzt werden kann. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-DotNetCLR_Jit_OBJECT_007_NAME=.NET CLR-Jit
-DotNetCLR_Jit_OBJECT_007_HELP=Statistik für CLR-Jit.
-
-TOTAL_METHODS_JITTED_007_NAME=Anzahl der mit JIT kompilierten Methoden
-TOTAL_METHODS_JITTED_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der Methoden an, die vom CLR JIT-Compiler seit dem Start der Anwendung kompiliert wurden. Die nicht JIT-Methoden sind in diesem Zähler nicht enthalten.
-
-JITTED_IL_CUR_007_NAME=Anzahl der mit JIT kompilierten IL-Bytes
-JITTED_IL_CUR_007_HELP=Dieser Zeiger zeigt die Gesamtanzahl der mit JIT kompilierten IL-Bytes seit dem Start der Anwendung an. Dieser Zähler ist mit dem Zähler "Gesamtanzahl der mit JIT kompilierten IL-Bytes" identisch.
-
-JITTED_IL_TOTAL_007_NAME=Gesamtanzahl der mit JIT kompilierten IL-Bytes
-JITTED_IL_TOTAL_007_HELP=Dieser Zeiger zeigt die Gesamtanzahl der mit JIT kompilierten IL-Bytes seit dem Start der Anwendung an. Dieser Zähler ist mit dem Zähler "Anzahl der mit JIT kompilierten IL-Bytes" identisch.
-
-JITTED_IL_INST_007_NAME=Mit JIT kompilierte IL-Bytes/Sek.
-JITTED_IL_INST_007_HELP=Dieser Zähler zeigt die JIT-Rate pro Sekunde für IL-Bytes an. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-JIT_FAILURES_007_NAME=JIT-Standardfehler
-JIT_FAILURES_007_HELP=Dieser Zähler zeigt die Höchstanzahl der Methoden an, die seit dem Start der Anwendung nicht mit dem JIT-Compiler kompiliert werden konnten. Dieses Problem kann auftreten, wenn die IL nicht überprüft werden kann, oder wenn ein interner Fehler im JIT-Compiler aufgetreten ist.
-
-TIME_IN_JIT_007_NAME=JIT-Zeitdauer in Prozent
-TIME_IN_JIT_007_HELP=Dieser Zähler zeigt die verstrichene Zeit für die JIT-Kompilierung seit der letzten Kompilierungsphase in Prozent an. Der Zähler wird am Ende jeder JIT-Kompilierungsphase aktualisiert. Während einer JIT-Kompilierungsphase werden eine Methode und ihre Abhängigkeiten kompiliert.
-
-TIME_IN_JIT_BASE_007_NAME=Nicht angezeigt
-TIME_IN_JIT_BASE_007_HELP=Nicht angezeigt.
-
-DotNetCLR_Interop_OBJECT_007_NAME=.NET CLR-Interop
-DotNetCLR_Interop_OBJECT_007_HELP=Statistik für CLR-Interop.
-
-CURRENT_CCW_007_NAME=Anzahl der CCWs
-CURRENT_CCW_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der CCWs (Com-Callable-Wrappers) an. Ein CCW ist ein Proxy für das verwaltete .NET-Objekt, auf das von nicht verwalteten COM-Client verwiesen wird. Der Zähler zeigt die Anzahl der verwalteten Objekte an, auf die von nicht verwaltetem COM-Code verwiesen wird.
-
-CURRENT_STUBS_007_NAME=Anzahl der Stubs
-CURRENT_STUBS_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der Stubs an, die von der CLR erstellt wurden. Stubs sind für das Marshallen von Argumenten und Rückgabewerten zwischen verwaltetem und nicht verwaltetem Code während einem COM-Interopaufruf oder PInvoke-Aufruf verantwortlich.
-
-NUM_MARSHALLING_007_NAME=Anzahl der Marshallvorgänge
-NUM_MARSHALLING_007_HELP=Dieser Zähler zeigt an, wie oft Argumente und Rückgabewerte zwischen verwaltetem und nicht verwaltetem Code seit dem Start der Anwendung gemarshallt wurden. Der Zähler wird nicht erhöht, wenn die Stubs intern sind. (Stubs sind für das Marshallen von Argumenten und Rückgabewerten verantwortlich).
-
-TOTAL_TLB_IMPORTS_007_NAME=Anzahl der TLB-Importe/Sek.
-TOTAL_TLB_IMPORTS_007_HELP=Für die zukünftige Verwendung reserviert.
-
-TOTAL_TLB_EXPORTS_007_NAME=Anzahl der TLB-Exporte/Sek.
-TOTAL_TLB_EXPORTS_007_HELP=Für die zukünftige Verwendung reserviert.
-
-DotNetCLR_LocksAndThreads_OBJECT_007_NAME=.NET CLR-Sperren und Threads
-DotNetCLR_LocksAndThreads_OBJECT_007_HELP=Statistik für CLR-Sperren und Threads.
-
-CONTENTION_TOTAL_007_NAME=Gesamtanzahl der Konflikte
-CONTENTION_TOTAL_007_HELP=Dieser Zähler zeigt an, wie oft die Threads in der CLR versucht haben, erfolglos eine verwaltete Sperre abzurufen. Verwaltete Sperren können mit mehreren Methoden abgerufen werden. Durch die Anweisung "lock" in C#, durch Aufrufen von System.Monitor.Enter oder mit dem benutzerdefinierten Attribut MethodImplOptions.Synchronized.
-
-CONTENTION_INST_007_NAME=Konfliktrate/Sek.
-CONTENTION_INST_007_HELP=Rate mit der die Threads in der Runtime versuchen, erfolglos eine verwaltete Sperre abzurufen. Verwaltete Sperren können mit mehreren Methoden abgerufen werden. Durch die Anweisung "lock" in C#, durch Aufrufen von System.Monitor.Enter oder mit dem benutzerdefinierten Attribut MethodImplOptions.Synchronized.
-
-QUEUE_LENGTH_CUR_007_NAME=Aktuelle Warteschlangenlänge
-QUEUE_LENGTH_CUR_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der Threads an, die auf eine verwaltete Sperrung in der Anwendung warten. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den letzten Wert an.
-
-QUEUE_LENGTH_TOTAL_007_NAME=Maximale Warteschlangenlänge
-QUEUE_LENGTH_TOTAL_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der Threads an, die seit dem Start der Anwendung auf eine verwaltete Sperrung warten.
-
-QUEUE_LENGTH_INST_007_NAME=Warteschlangenlänge/Sek.
-QUEUE_LENGTH_INST_007_HELP=Dieser Zähler zeigt die Anzahl der Threads pro Sekunde an, die auf eine Sperrung der Anwendung warten. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-CURRENT_LOGICAL_THREADS_007_NAME=Anzahl der aktuellen logischen Threads
-CURRENT_LOGICAL_THREADS_007_HELP=Dieser Zähler zeigt die Anzahl der aktuellen .NET-Threadobjekte in der Anwendung an. Ein .NET-Threadobjekt wird von System.Threading.Thread erstellt, oder wenn ein nicht verwalteter Thread in die verwaltete Umgebung aufgenommen wird. Der Zähler verwaltet die Anzahl der ausgeführten und beendeten Threads. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den letzten Wert an.
-
-CURRENT_PHYSICAL_THREADS_007_NAME=Anzahl der aktuellen physikalischen Threads
-CURRENT_PHYSICAL_THREADS_007_HELP=Dieser Zähler zeigt die Anzahl der systemeigenen Betriebssystemthreads an, die von der CLR als untergeordnete .NET-Threadobjekte erstellt werden. Dieser Zählerwert enthält die Threads nicht, die von der CLR für interne Vorgänge verwendet werden. Er ist eine Teilmenge der Threads im Betriebssystemprozess.
-
-RECOGNIZED_THREADS_CUR_007_NAME=Anzahl der aktuellen erkannten Threads
-RECOGNIZED_THREADS_CUR_007_HELP=Dieser Zähler zeigt die Anzahl der Threads an, die von der CLR erkannt werden. Diesen Threads ist ein entsprechendes .NET-Threadobjekt zugewiesen. Die Threads werden außerhalb der CLR erstellt, aber wurden mindestens einmal in der CLR ausgeführt. Nur eindeutige Threads werden verfolgt. Threads mit der gleichen Thread-ID, die erneut in die CLR aufgenommen oder nach dem Beenden erstellt werden, werden nicht zweimal gezählt.
-
-RECOGNIZED_THREADS_TOTAL_007_NAME=Gesamtanzahl der erkannten Threads
-RECOGNIZED_THREADS_TOTAL_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der Threads an, die von der CLR seit dem Start der Anwendung erkannt wurden. Diesen Threads ist ein entsprechendes .NET-Threadobjekt zugewiesen. Die Threads werden außerhalb der CLR erstellt, aber wurden mindestens einmal in der CLR ausgeführt. Nur eindeutige Threads werden verfolgt. Threads mit der gleichen Thread-ID, die erneut in die CLR aufgenommen oder nach dem Beenden erstellt werden, werden nicht zweimal gezählt.
-
-RECOGNIZED_THREADS_INST_007_NAME=Erkannte Threadrate/Sek.
-RECOGNIZED_THREADS_INST_007_HELP=Dieser Zähler zeigt die Anzahl der Threads pro Sekunde an, die von der CLR erkannt wurden. Diesen Threads ist ein entsprechendes .NET-Threadobjekt zugeordnet. Die Threads werden nicht von der CLR, sondern außerhalb der CLR erstellt, aber mindestens einmal in der CLR ausgeführt. Nur eindeutige Threads werden nachverfolgt; Threads mit der gleichen Thread-ID, die in der CLR wiederholt oder erneut erstellt werden, werden nicht zweimal gezählt. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-DotNetCLR_Security_OBJECT_007_NAME=.NET CLR-Sicherheit
-DotNetCLR_Security_OBJECT_007_HELP=Statistik für die CLR-Sicherheit.
-
-SECURITY_TOTALRTCHECKS_007_NAME=Laufzeitüberprüfungen insgesamt
-SECURITY_TOTALRTCHECKS_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der CAS-Laufzeitüberprüfungen (Code Access Security) seit dem Start der Anwendung an. CAS-Laufzeitüberprüfungen werden ausgeführt wenn beim einem Aufruf eine bestimmte Berechtigung angefordert wird. Die Laufzeitüberprüfung wird für jeden Aufruf ausgeführt, indem der aktuelle Threadstapel des Aufrufers überprüft wird. Dieser Zähler gibt zusammen mit "Stapeltiefe" die Leistungseinbußen für Sicherheitsüberprüfungen an.
-
-SECURITY_TIMEAUTHORIZE_007_NAME=Zeit für die Signaturauthentifizierung in Prozent
-SECURITY_TIMEAUTHORIZE_007_HELP=Für die zukünftige Verwendung reserviert.
-
-SECURITY_LINKCHECKS_007_NAME=Anzahl der Verbindungszeitüberprüfungen
-SECURITY_LINKCHECKS_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der CAS-Überprüfungen (Code Access Security) seit dem Anwendungsstart an. CAS-Linktimeüberprüfen werden ausgeführt, wenn eine bestimmte Berechtigung während der JIT-Kompilierung aufgerufen wird. Eine Linktimeüberprüfung wird nur einmal pro Aufrufer ausgeführt. Dieser Wert zeigt keine Leistungsprobleme an, nur die Sicherheitssystemaktivitäten.
-
-SECURITY_TIMERTCHECKS_007_NAME=Zeit für die RT-Überprüfungen in Prozent
-SECURITY_TIMERTCHECKS_007_HELP=Dieser Zähler zeigt den Zeitraum an, der seit der letzten CAS-Überprüfung (Code Access Security) verstrichen ist. CAS ermöglicht unterschiedliche Vertrauensebenen für den Code und erzwingt die Ebenen abhängig von der Codeidentität. Der Zähler wird am Ende einer Sicherheitsüberprüfung aktualisiert. Er zeigt keinen Durchschnittswert, sondern den letzten Wert an.
-
-SECURITY_TIMERTCHECKS_BASE_007_NAME=Nicht angezeigt
-SECURITY_TIMERTCHECKS_BASE_007_HELP=Nicht angezeigt.
-
-SECURITY_DEPTHSECURITY_007_NAME=Stapeltiefe
-SECURITY_DEPTHSECURITY_007_HELP=Dieser Zähler zeigt die Stapeltiefe während der letzten Überprüfung der Codezugriffssicherheit zur Laufzeit an. Beim Überprüfen Codezugriffssicherheit zur Laufzeit wird der Stapel durchsucht. Der Zähler gibt keinen Durchnittswert, sondern nur den letzten Wert an.
-
-DotNetCLR_Remoting_OBJECT_007_NAME=.NET CLR-Remote
-DotNetCLR_Remoting_OBJECT_007_HELP=Statistik für CLR-Remote.
-
-CONTEXT_REMOTECALLS_INST_007_NAME=Remoteaufrufe/Sek.
-CONTEXT_REMOTECALLS_INST_007_HELP=Dieser Zähler zeigt die Anzahl der Remoteprozeduraufrufe pro Sekunde an. Ein Remoteprozeduraufruf ist ein Aufruf eines Objekts außerhalb der Anwendungsdomäne des Aufrufers. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-CONTEXT_CHANNELS_007_NAME=Channel
-CONTEXT_CHANNELS_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der Remotechannel in den Anwendungsdomänen an, die seit dem Start der Anwendung registriert wurden. Channel werden zum Übertragen von Nachrichten zwischen Remoteobjekten verwendet.
-
-CONTEXT_PROXIES_007_NAME=Kontextproxys
-CONTEXT_PROXIES_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der Remoteproxyobjekte an, die in diesem Prozess seit dem Start der Anwendung erstellt wurden. Proxyobjekte stellen die Remoteobjekte dar und stellen sicher, dass alle Proxyaufrufe an die entsprechende Remoteobjektinstanz weitergeleitet werden.
-
-CONTEXT_CLASSES_007_NAME=Geladene kontextgebundene Klassen
-CONTEXT_CLASSES_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der kontextgebundenen geladenen Klassen an. Klassen, die an einen Kontext gebunden werden können, sind kontextgebundene Klassen. Kontextgebundene Klassen werden mit Kontextattributen für die Synchronisierung, Threadaffinität, Transaktionen, usw. markiert.
-
-CONTEXT_OBJALLOC_007_NAME=Kontextgebundene Objektzuordnung/Sek.
-CONTEXT_OBJALLOC_007_HELP=Dieser Zähler zeigt die Anzahl der kontextgebundenen Objekte an, die pro Sekunde zugeordnet werden. Instanzen von Klassen, die an einen Kontext gebunden werden können, sind kontextgebundene Objekte. Kontextgebundene Klassen werden mit Kontextattributen für die Synchronisation, Threadaffinität, Transaktionen, usw. markiert. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-CONTEXT_CONTEXTS_007_NAME=Kontext
-CONTEXT_CONTEXTS_007_HELP=Dieser Zähler zeigt die aktuelle Anzahl der Remotekontexte in der Anwendung an. Ein Kontext enthält eine Auflistung der Objekte mit den gleichen Syntaxregeln; z.B. Synchronisierung, Threadaffinität, Transaktionen, usw.
-
-CONTEXT_REMOTECALLS_TOTAL_007_NAME=Remoteaufrufe insgesamt
-CONTEXT_REMOTECALLS_TOTAL_007_HELP=Dieser Zähle zeigt die Gesamtanzahl der Remoteprozeduraufrufe an, die seit dem Start der Anwendung initialisiert wurden. Ein Remoteprozeduraufruf ist der Aufruf eines Objekts außerhalb der Anwendungsdomäne des Aufrufers.
-
-DotNetCLR_Excep_OBJECT_007_NAME=.NET CLR-Ausnahmen
-DotNetCLR_Excep_OBJECT_007_HELP=Laufzeitstatistik für die CLR-Ausnahmebehandlung.
-
-EXCEP_THROWN_TOTAL_007_NAME=Anzahl der ausgelösten Ausnahmen
-EXCEP_THROWN_TOTAL_007_HELP=Dieser Zähler zeigt die Gesamtanzahl der Ausnahmen an, die seit dem Start der Anwendung ausgelöst wurden. TDiese schließen .NET-Ausnahmen und nicht verwaltete Ausnahmen ein, die in .NET-Ausnahmen konvertiert werden; z.B. wird eine Nullzeigerverweis-Ausnahme in nicht verwaltetem Code in eine .NET System.NullReferenceException in verwaltetem Code konvertiert. Dieser Zähler enthält behandelte und unbehandelte Ausnahmen. Erneut ausgelöste Ausnahmen, werden wieder gezählt. Ausnahmen sollten nur selten und nicht im normalen Programmablauf auftreten.
-
-EXCEP_THROWN_INST_007_NAME=Anzahl der ausgelösten Ausnahmen/Sek.
-EXCEP_THROWN_INST_007_HELP=Dieser Zähler zeigt die Anzahl der Ausnahmen pro Sekunde an. Diese schließen .NET-Ausnahmen und nicht verwaltete Ausnahmen ein, die in .NET-Ausnahmen konvertiert werden; z.B. wird eine Nullzeigerverweis-Ausnahme in nicht verwaltetem Code in eine .NET System.NullReferenceException in verwaltetem Code konvertiert. Dieser Zähler enthält behandelte und unbehandelte Ausnahmen. Ausnahmen sollten nur selten und nicht im normalen Programmablauf auftreten. Der Zähler zeigt potentielle Leistungsprobleme an, die aufgrund einer großen Ausnahmerate auftreten. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-TOTAL_EXCEP_FILTERS_RUN_007_NAME=Anzahl der Filter/Sek.
-TOTAL_EXCEP_FILTERS_RUN_007_HELP=Dieser Zähler zeigt die Anzahl der .NET-Ausnahmefilter an, die pro Sekunde ausgeführt werden. Ein Ausnahmefilter wertet aus, ob eine Ausnahme behandelt werden soll. Der Zähler verfolgt die Rate der ausgewerteten Ausnahmefilter; ungeachtet davon, ob die Ausnahme behandelt wurde oder nicht. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-TOTAL_EXCEP_FINALLYS_RUN_007_NAME=Finallyanzahl/Sek.
-TOTAL_EXCEP_FINALLYS_RUN_007_HELP=Dieser Zähler zeigt die Anzahl der finally-Blöcke an, die pro Sekunde ausgeführt werden. Ein finally-Block wird ausgeführt, unabhängig davon, wie der try-Block beendet wurde. Nur die finally-Blöcke, die für eine Ausnahme ausgeführt werden, werden gezählt. finally-Blöcke in normalen Codepfaden werden nicht gezählt. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
-EXCEPT_STACK_DEPTH_007_NAME=Throw To Catch Depth / sec
-EXCEPT_STACK_DEPTH_007_HELP=Dieser Zähler zeigt die Anzahl der Stapelrahmen an, die vom Rahmen durchlaufen werden, der die .NET-Ausnahme ausgelöst hat. Der Zähler wird auf 0 zurückgesetzt, wenn ein Ausnahmehandler eingegeben wird. Der Zähler bildet nicht den Mittelwert aus der Zeit, sondern zeigt den Unterschied zwischen den Werten in den letzten zwei Beispielen geteilt durch das Beispielintervall an.
-
diff --git a/src/inc/1031/_DataPerfCounters.ini b/src/inc/1031/_DataPerfCounters.ini
deleted file mode 100644
index ecb7a30a69..0000000000
--- a/src/inc/1031/_DataPerfCounters.ini
+++ /dev/null
Binary files differ
diff --git a/src/inc/1031/_NetworkingPerfCounters.ini b/src/inc/1031/_NetworkingPerfCounters.ini
deleted file mode 100644
index 158678829d..0000000000
--- a/src/inc/1031/_NetworkingPerfCounters.ini
+++ /dev/null
Binary files differ
diff --git a/src/inc/1031/aspnet_perf.ini b/src/inc/1031/aspnet_perf.ini
deleted file mode 100644
index a6f386f886..0000000000
--- a/src/inc/1031/aspnet_perf.ini
+++ /dev/null
@@ -1,415 +0,0 @@
-[info]
-drivername=ASP.NET_1.0.3620.0
-symbolfile=aspnet_perf.h
-
-[languages]
-007=German
-009=English
-
-[objects]
-OBJECT_1_009_NAME=ASP.NET v1.0.3620.0
-OBJECT_2_009_NAME=ASP.NET Apps v1.0.3620.0
-
-[text]
-OBJECT_1_009_NAME=ASP.NET v1.0.3620.0
-OBJECT_1_009_HELP=ASP.NET v1.0.3620.0 global performance counters
-OBJECT_2_009_NAME=ASP.NET Apps v1.0.3620.0
-OBJECT_2_009_HELP=ASP.NET v1.0.3620.0 application performance counters
-
-;;
-;; ASP.NET System Counters
-;;
-
-ASPNET_APPLICATION_RESTARTS_009_NAME=Application Restarts
-ASPNET_APPLICATION_RESTARTS_009_HELP=Number of times the application has been restarted during the web server's lifetime.
-
-ASPNET_APPLICATIONS_RUNNING_009_NAME=Applications Running
-ASPNET_APPLICATIONS_RUNNING_009_HELP=Number of currently running web applications.
-
-ASPNET_REQUESTS_DISCONNECTED_009_NAME=Requests Disconnected
-ASPNET_REQUESTS_DISCONNECTED_009_HELP=The number of requests disconnected due to communication errors or user terminated.
-
-ASPNET_REQUEST_EXECUTION_TIME_009_NAME=Request Execution Time
-ASPNET_REQUEST_EXECUTION_TIME_009_HELP=The number of milliseconds that it took to execute the most recent request.
-
-ASPNET_REQUESTS_REJECTED_009_NAME=Requests Rejected
-ASPNET_REQUESTS_REJECTED_009_HELP=The number of requests rejected because the request queue was full.
-
-ASPNET_REQUESTS_QUEUED_009_NAME=Requests Queued
-ASPNET_REQUESTS_QUEUED_009_HELP=The number of requests waiting to be processed.
-
-ASPNET_WPS_RUNNING_009_NAME=Worker Processes Running
-ASPNET_WPS_RUNNING_009_HELP=Number of worker processes running on the machine.
-
-ASPNET_WPS_RESTARTS_009_NAME=Worker Process Restarts
-ASPNET_WPS_RESTARTS_009_HELP=Number of times a worker process has restarted on the machine.
-
-ASPNET_REQUEST_WAIT_TIME_009_NAME=Request Wait Time
-ASPNET_REQUEST_WAIT_TIME_009_HELP=The number of milliseconds the most recent request was waiting in the queue.
-
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_009_NAME=State Server Sessions Active
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_009_HELP=The current number of sessions currently active.
-
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_009_NAME=State Server Sessions Abandoned
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_009_HELP=The number of sessions that have been explicitly abandoned.
-
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_009_NAME=State Server Sessions Timed Out
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_009_HELP=The number of sessions timed out.
-
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_009_NAME=State Server Sessions Total
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_009_HELP=The number of sessions total.
-
-;;
-;; ASP.NET Application Counters
-;;
-
-ASPNET_ANONYMOUS_REQUESTS_009_NAME=Anonymous Requests
-ASPNET_ANONYMOUS_REQUESTS_009_HELP=Number of requests utilizing anonymous authentication.
-
-ASPNET_ANONYMOUS_REQUESTS_RATE_009_NAME=Anonymous Requests/Sec
-ASPNET_ANONYMOUS_REQUESTS_RATE_009_HELP=Number of Authentication Anonymous Requests/Sec
-
-ASPNET_TOTAL_CACHE_ENTRIES_009_NAME=Cache Total Entries
-ASPNET_TOTAL_CACHE_ENTRIES_009_HELP=Total number of entries within the cache (both internal and user added)
-
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_009_NAME=Cache Total Turnover Rate
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the total cache per second.
-
-ASPNET_TOTAL_CACHE_HITS_009_NAME=Cache Total Hits
-ASPNET_TOTAL_CACHE_HITS_009_HELP=Total number of hits from the cache.
-
-ASPNET_TOTAL_CACHE_MISSES_009_NAME=Cache Total Misses
-ASPNET_TOTAL_CACHE_MISSES_009_HELP=Total number of cache misses.
-
-ASPNET_TOTAL_CACHE_RATIO_009_NAME=Cache Total Hit Ratio
-ASPNET_TOTAL_CACHE_RATIO_009_HELP=Ratio of hits from all cache calls.
-
-ASPNET_TOTAL_CACHE_RATIO_BASE_009_NAME=Cache Total Hit Ratio Base
-ASPNET_TOTAL_CACHE_RATIO_BASE_009_HELP=Cache Total Hit Ratio Base
-
-ASPNET_API_CACHE_ENTRIES_009_NAME=Cache API Entries
-ASPNET_API_CACHE_ENTRIES_009_HELP=Total number of entries within the cache added by the user.
-
-ASPNET_API_CACHE_TURNOVER_RATE_009_NAME=Cache API Turnover Rate
-ASPNET_API_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the API cache per second.
-
-ASPNET_API_CACHE_HITS_009_NAME=Cache API Hits
-ASPNET_API_CACHE_HITS_009_HELP=Number of cache hits from user code.
-
-ASPNET_API_CACHE_MISSES_009_NAME=Cache API Misses
-ASPNET_API_CACHE_MISSES_009_HELP=Number of cache misses called from user code.
-
-ASPNET_API_CACHE_RATIO_009_NAME=Cache API Hit Ratio
-ASPNET_API_CACHE_RATIO_009_HELP=Ratio of hits called from user code.
-
-ASPNET_API_CACHE_RATIO_BASE_009_NAME=Cache API Hit Ratio Base
-ASPNET_API_CACHE_RATIO_BASE_009_HELP=Cache API Hit Ratio Base
-
-ASPNET_OUTPUT_CACHE_ENTRIES_009_NAME=Output Cache Entries
-ASPNET_OUTPUT_CACHE_ENTRIES_009_HELP=Current number of entries in the output cache.
-
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_009_NAME=Output Cache Turnover Rate
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the output cache per second.
-
-ASPNET_OUTPUT_CACHE_HITS_009_NAME=Output Cache Hits
-ASPNET_OUTPUT_CACHE_HITS_009_HELP=Total number of ouput cacheable requests served from the output cache.
-
-ASPNET_OUTPUT_CACHE_MISSES_009_NAME=Output Cache Misses
-ASPNET_OUTPUT_CACHE_MISSES_009_HELP=Total number of ouput cacheable requests not served from the output cache.
-
-ASPNET_OUTPUT_CACHE_RATIO_009_NAME=Output Cache Hit Ratio
-ASPNET_OUTPUT_CACHE_RATIO_009_HELP=Ratio of hits to requests for output cacheable requests.
-
-ASPNET_OUTPUT_CACHE_RATIO_BASE_009_NAME=Output Cache Hit Ratio Base
-ASPNET_OUTPUT_CACHE_RATIO_BASE_009_HELP=Output Cache Hit Ratio Base
-
-ASPNET_COMPILATIONS_009_NAME=Compilations Total
-ASPNET_COMPILATIONS_009_HELP=Number of .asax, .ascx, .ashx, .asmx, or .aspx source files dynamically compiled.
-
-ASPNET_DEBUGGING_REQUESTS_009_NAME=Debugging Requests
-ASPNET_DEBUGGING_REQUESTS_009_HELP=Number of debugging requests processed.
-
-ASPNET_ERRORS_PRE_PROCESSING_009_NAME=Errors During Preprocessing
-ASPNET_ERRORS_PRE_PROCESSING_009_HELP=Number of errors that have occurred during parsing and configuration.
-
-ASPNET_ERRORS_COMPILING_009_NAME=Errors During Compilation
-ASPNET_ERRORS_COMPILING_009_HELP=Number of errors that have occurred during compilation.
-
-ASPNET_ERRORS_DURING_REQUEST_009_NAME=Errors During Execution
-ASPNET_ERRORS_DURING_REQUEST_009_HELP=Number of errors that have occurred during the processing of a request.
-
-ASPNET_ERRORS_UNHANDLED_009_NAME=Errors Unhandled During Execution
-ASPNET_ERRORS_UNHANDLED_009_HELP=Number of errors not handled by user code, but by the default error handler.
-
-ASPNET_ERRORS_UNHANDLED_RATE_009_NAME=Errors Unhandled During Execution/Sec
-ASPNET_ERRORS_UNHANDLED_RATE_009_HELP=Rate of unhandled errors.
-
-ASPNET_ERRORS_TOTAL_009_NAME=Errors Total
-ASPNET_ERRORS_TOTAL_009_HELP=Total number of errors occurred.
-
-ASPNET_ERRORS_TOTAL_RATE_009_NAME=Errors Total/Sec
-ASPNET_ERRORS_TOTAL_RATE_009_HELP=Rate of errors occurred.
-
-ASPNET_PIPELINES_009_NAME=Pipeline Instance Count
-ASPNET_PIPELINES_009_HELP=Number of active pipeline instances.
-
-ASPNET_REQUEST_BYTES_IN_009_NAME=Request Bytes In Total
-ASPNET_REQUEST_BYTES_IN_009_HELP=The total size, in bytes, of all requests.
-
-ASPNET_REQUEST_BYTES_OUT_009_NAME=Request Bytes Out Total
-ASPNET_REQUEST_BYTES_OUT_009_HELP=The total size, in bytes, of responses sent to a client. This does not include standard HTTP response headers.
-
-ASPNET_REQUESTS_EXECUTING_009_NAME=Requests Executing
-ASPNET_REQUESTS_EXECUTING_009_HELP=The number of requests currently executing.
-
-ASPNET_REQUESTS_FAILED_009_NAME=Requests Failed
-ASPNET_REQUESTS_FAILED_009_HELP=Total number of failed requests.
-
-ASPNET_REQUESTS_NOT_FOUND_009_NAME=Requests Not Found
-ASPNET_REQUESTS_NOT_FOUND_009_HELP=The number of requests for resources that were not found.
-
-ASPNET_REQUESTS_NOT_AUTHORIZED_009_NAME=Requests Not Authorized
-ASPNET_REQUESTS_NOT_AUTHORIZED_009_HELP=Number of requests failed due to unauthorized access.
-
-ASPNET_REQUESTS_TIMED_OUT_009_NAME=Requests Timed Out
-ASPNET_REQUESTS_TIMED_OUT_009_HELP=The number of requests that timed out.
-
-ASPNET_REQUESTS_SUCCEDED_009_NAME=Requests Succeeded
-ASPNET_REQUESTS_SUCCEDED_009_HELP=The number of requests that executed successfully.
-
-ASPNET_REQUESTS_TOTAL_009_NAME=Requests Total
-ASPNET_REQUESTS_TOTAL_009_HELP=The total number of requests since the application was started.
-
-ASPNET_REQUESTS_TOTAL_RATE_009_NAME=Requests/Sec
-ASPNET_REQUESTS_TOTAL_RATE_009_HELP=The number of requests executed per second.
-
-ASPNET_SESSIONS_ACTIVE_009_NAME=Sessions Active
-ASPNET_SESSIONS_ACTIVE_009_HELP=The current number of sessions currently active.
-
-ASPNET_SESSIONS_ABANDONED_009_NAME=Sessions Abandoned
-ASPNET_SESSIONS_ABANDONED_009_HELP=The number of sessions that have been explicitly abandoned.
-
-ASPNET_SESSIONS_TIMED_OUT_009_NAME=Sessions Timed Out
-ASPNET_SESSIONS_TIMED_OUT_009_HELP=The number of sessions timed out.
-
-ASPNET_SESSIONS_TOTAL_009_NAME=Sessions Total
-ASPNET_SESSIONS_TOTAL_009_HELP=Total number of sessions since the application was started.
-
-ASPNET_TRANSACTIONS_ABORTED_009_NAME=Transactions Aborted
-ASPNET_TRANSACTIONS_ABORTED_009_HELP=The number of transactions aborted.
-
-ASPNET_TRANSACTIONS_COMMITTED_009_NAME=Transactions Committed
-ASPNET_TRANSACTIONS_COMMITTED_009_HELP=The number of transactions committed.
-
-ASPNET_TRANSACTIONS_PENDING_009_NAME=Transactions Pending
-ASPNET_TRANSACTIONS_PENDING_009_HELP=Number of transactions in progress.
-
-ASPNET_TRANSACTIONS_TOTAL_009_NAME=Transactions Total
-ASPNET_TRANSACTIONS_TOTAL_009_HELP=The total number of transactions since the application was started.
-
-ASPNET_TRANSACTIONS_RATE_009_NAME=Transactions/Sec
-ASPNET_TRANSACTIONS_RATE_009_HELP=Transactions started per second.
-
-;;
-;;
-;;
-
-OBJECT_1_007_NAME=ASP.NET v1.0.3620.0
-OBJECT_1_007_HELP=Globale Leistungsindikatoren für ASP.NET v1.0.3620.0
-OBJECT_2_007_NAME=ASP.NET Apps v1.0.3620.0
-OBJECT_2_007_HELP=Programmleistungsindikatoren für ASP.NET v1.0.3620.0
-
-;;
-;; ASP.NET System Counters
-;;
-
-ASPNET_APPLICATION_RESTARTS_007_NAME=Anwendungsneustarts
-ASPNET_APPLICATION_RESTARTS_007_HELP=Gibt an, wie oft die Anwendung während der Gültigkeitsdauer des Webservers neu gestartet wurde.
-
-ASPNET_APPLICATIONS_RUNNING_007_NAME=Ausgeführte Anwendungen
-ASPNET_APPLICATIONS_RUNNING_007_HELP=Die Anzahl der Webanwendungen, die momentan ausgeführt werden.
-
-ASPNET_REQUESTS_DISCONNECTED_007_NAME=Getrennte Anforderungen
-ASPNET_REQUESTS_DISCONNECTED_007_HELP=Die Anzahl der Anforderungen, die aufgrund von Kommunikationsfehlern oder vom Benutzer getrennt wurden.
-
-ASPNET_REQUEST_EXECUTION_TIME_007_NAME=Ausführungszeit der Anforderung
-ASPNET_REQUEST_EXECUTION_TIME_007_HELP=Die Zeitdauer zum Ausführen der letzten Anforderung in Millisekunden.
-
-ASPNET_REQUESTS_REJECTED_007_NAME=Anforderungen wurden abgelehnt
-ASPNET_REQUESTS_REJECTED_007_HELP=Die Anzahl der abgelehnten Anforderungen, da die Anforderungsschlange voll war.
-
-ASPNET_REQUESTS_QUEUED_007_NAME=Anforderungen in Warteschlange
-ASPNET_REQUESTS_QUEUED_007_HELP=Die Anzahl der Anforderungen, die auf die Verarbeitung warten.
-
-ASPNET_WPS_RUNNING_007_NAME=Ausgeführte Workerprozesse
-ASPNET_WPS_RUNNING_007_HELP=Die Anzahl der Workerprozesse, die auf dem Computer ausgeführt werden.
-
-ASPNET_WPS_RESTARTS_007_NAME=Workerprozess-Neustarts
-ASPNET_WPS_RESTARTS_007_HELP=Gibt an, wie oft ein Workerprozess auf dem Computer neu gestartet wurde.
-
-ASPNET_REQUEST_WAIT_TIME_007_NAME=Wartezeit der Anforderung
-ASPNET_REQUEST_WAIT_TIME_007_HELP=Die Anzahl der Millisekunden, die die letzte Anforderung in der Warteschlange wartete.
-
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_007_NAME=Aktive Statusserversitzungen
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_007_HELP=Die Anzahl der Sitzungen, die momentan aktive sind.
-
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_007_NAME=Abgebrochene Statusserversitzungen
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_007_HELP=Die Anzahl der Sitzungen, die explizit abgebrochen wurden.
-
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_007_NAME=Abgelaufene Statusserversitzungen
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_007_HELP=Anzahl der Sitzungen mit Zeitüberschreitung
-
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_007_NAME=Statusserversitzungen insgesamt
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_007_HELP=Gesamtanzahl der Sitzungen.
-
-;;
-;; ASP.NET Application Counters
-;;
-
-ASPNET_ANONYMOUS_REQUESTS_007_NAME=Anonyme Anforderungen
-ASPNET_ANONYMOUS_REQUESTS_007_HELP=Die Anzahl der Anforderungen, die anonyme Authentifizierung verwenden.
-
-ASPNET_ANONYMOUS_REQUESTS_RATE_007_NAME=Anonyme Anforderungen/Sek.
-ASPNET_ANONYMOUS_REQUESTS_RATE_007_HELP=Die Anzahl der Anforderungen mit anonymer Authentifizierung pro Sekunde.
-
-ASPNET_TOTAL_CACHE_ENTRIES_007_NAME=Cacheeinträge gesamt
-ASPNET_TOTAL_CACHE_ENTRIES_007_HELP=Die Gesamtzahl der Cacheeinträge (intern und von Benutzer hinzugefügt).
-
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_007_NAME=Gesamte Cacheturnoverrate
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_007_HELP=Anzahl der Hinzufüge- und Löschvorgänge im gesamten Cache pro Sekunde.
-
-ASPNET_TOTAL_CACHE_HITS_007_NAME=Cachetreffer gesamt
-ASPNET_TOTAL_CACHE_HITS_007_HELP=Die Gesamtzahl der Cachetreffer.
-
-ASPNET_TOTAL_CACHE_MISSES_007_NAME=Fehlgeschlagene Cachezugriffe gesamt
-ASPNET_TOTAL_CACHE_MISSES_007_HELP=Die Gesamtzahl der fehlgeschlagenen Cachezugriffe.
-
-ASPNET_TOTAL_CACHE_RATIO_007_NAME=Cache-Trefferrate gesamt
-ASPNET_TOTAL_CACHE_RATIO_007_HELP=Die Trefferrate aller Cacheaufrufe.
-
-ASPNET_TOTAL_CACHE_RATIO_BASE_007_NAME=Cache-Trefferrate gesamt (Basis)
-ASPNET_TOTAL_CACHE_RATIO_BASE_007_HELP=Cache-Trefferrate gesamt (Basis)
-
-ASPNET_API_CACHE_ENTRIES_007_NAME=Cache-API-Einträge
-ASPNET_API_CACHE_ENTRIES_007_HELP=Die Gesamtzahl der Cacheeinträge, die vom Benutzer hinzugefügt wurden.
-
-ASPNET_API_CACHE_TURNOVER_RATE_007_NAME=Turnoverrate für Cache-API
-ASPNET_API_CACHE_TURNOVER_RATE_007_HELP=Anzahl der Hinzufüge- und Löschvorgänge im API-Cache pro Sekunde.
-
-ASPNET_API_CACHE_HITS_007_NAME=Cache-API-Treffer
-ASPNET_API_CACHE_HITS_007_HELP=Die Anzahl der Cachetreffer vom Benutzercode aus.
-
-ASPNET_API_CACHE_MISSES_007_NAME=Fehlgeschlagene Cache-API-Zugriffe
-ASPNET_API_CACHE_MISSES_007_HELP=Die Anzahl der fehlgeschlagenen Cachezugriffe, die vom Benutzercode aus aufgerufen wurden.
-
-ASPNET_API_CACHE_RATIO_007_NAME=Cache-API-Trefferrate
-ASPNET_API_CACHE_RATIO_007_HELP=Die Trefferrate der Benutzercodeaufrufe.
-
-ASPNET_API_CACHE_RATIO_BASE_007_NAME=API-Cache-Trefferrate (Basis)
-ASPNET_API_CACHE_RATIO_BASE_007_HELP=API-Cache-Trefferrate (Basis)
-
-ASPNET_OUTPUT_CACHE_ENTRIES_007_NAME=Ausgabecacheeinträge
-ASPNET_OUTPUT_CACHE_ENTRIES_007_HELP=Die aktuelle Anzahl der Einträge im Ausgabecache.
-
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_007_NAME=Turnoverrate für den Ausgabecache
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_007_HELP=Anzahl der Hinzufüge- und Löschvorgänge im Ausgabecache pro Sekunde.
-
-ASPNET_OUTPUT_CACHE_HITS_007_NAME=Ausgabecachetreffer
-ASPNET_OUTPUT_CACHE_HITS_007_HELP=Die Gesamtanzahl der zwischenspeicherbaren Anforderungen, die vom Ausgabecache beantwortet werden.
-
-ASPNET_OUTPUT_CACHE_MISSES_007_NAME=Fehlgeschlagene Ausgabecache-Zugriffe
-ASPNET_OUTPUT_CACHE_MISSES_007_HELP=Die Gesamtanzahl der zwischenspeicherbaren Anforderungen, die nicht vom Ausgabecache beantwortet werden.
-
-ASPNET_OUTPUT_CACHE_RATIO_007_NAME=Ausgabecache-Trefferrate
-ASPNET_OUTPUT_CACHE_RATIO_007_HELP=Trefferrate der zwischenspeicherbaren Ausgabeanforderungen.
-
-ASPNET_OUTPUT_CACHE_RATIO_BASE_007_NAME=Ausgabecache-Trefferrate
-ASPNET_OUTPUT_CACHE_RATIO_BASE_007_HELP=Ausgabecache-Trefferrate
-
-ASPNET_COMPILATIONS_007_NAME=Kompilierungen insgesamt
-ASPNET_COMPILATIONS_007_HELP=Die Anzahl der dynamisch kompilierten Quelldateien .asax, .ascx, .ashx, .asmx oder .aspx.
-
-ASPNET_DEBUGGING_REQUESTS_007_NAME=Debug-Anforderungen
-ASPNET_DEBUGGING_REQUESTS_007_HELP=Die Anzahl der Debug-Anforderungen, die verarbeitet wurden.
-
-ASPNET_ERRORS_PRE_PROCESSING_007_NAME=Fehler bei der Vorverarbeitung
-ASPNET_ERRORS_PRE_PROCESSING_007_HELP=Die Anzahl der Fehler, die beim Analysieren und Konfigurieren aufgetreten sind.
-
-ASPNET_ERRORS_COMPILING_007_NAME=Fehler bei der Kompilierung
-ASPNET_ERRORS_COMPILING_007_HELP=Die Anzahl der Fehler, die beim Kompilieren aufgetreten sind.
-
-ASPNET_ERRORS_DURING_REQUEST_007_NAME=Fehler beim Ausführen
-ASPNET_ERRORS_DURING_REQUEST_007_HELP=Die Anzahl der Fehler, die beim Verarbeiten einer Anforderung aufgetreten sind.
-
-ASPNET_ERRORS_UNHANDLED_007_NAME=Unbehandelte Fehler beim Ausführen
-ASPNET_ERRORS_UNHANDLED_007_HELP=Die Anzahl der Fehler, die nicht vom Benutzercode verarbeitet wurden, sondern vom Standardfehlerhandler.
-
-ASPNET_ERRORS_UNHANDLED_RATE_007_NAME=Unbehandelte Fehler während der Ausführung pro Sekunde
-ASPNET_ERRORS_UNHANDLED_RATE_007_HELP=Rate der unbehandelten Fehler.
-
-ASPNET_ERRORS_TOTAL_007_NAME=Fehler gesamt
-ASPNET_ERRORS_TOTAL_007_HELP=Anzahl der aufgetretenen Fehler.
-
-ASPNET_ERRORS_TOTAL_RATE_007_NAME=Fehler gesamt/Sek.
-ASPNET_ERRORS_TOTAL_RATE_007_HELP=Rate der aufgetretenen Fehler.
-
-ASPNET_PIPELINES_007_NAME=Pipeline-Instanzenzahl
-ASPNET_PIPELINES_007_HELP=Die Anzahl der aktiven Pipelineinstanzen.
-
-ASPNET_REQUEST_BYTES_IN_007_NAME=Anforderungsbytes gesamt (einschließl.)
-ASPNET_REQUEST_BYTES_IN_007_HELP=Die Gesamtgröße aller Anforderungen in Bytes.
-
-ASPNET_REQUEST_BYTES_OUT_007_NAME=Anforderungsbytes gesamt (ausschließl.)
-ASPNET_REQUEST_BYTES_OUT_007_HELP=Die Gesamtgröße aller Antworten in Bytes, die an einen Client gesendet wurden, wobei standardmäßige HTTP-Antwortheader ausgeschlossen werden.
-
-ASPNET_REQUESTS_EXECUTING_007_NAME=Ausgeführte Anforderungen
-ASPNET_REQUESTS_EXECUTING_007_HELP=Die Anzahl der Anforderungen, die momentan ausgeführt werden.
-
-ASPNET_REQUESTS_FAILED_007_NAME=Fehlgeschlagene Anforderungen
-ASPNET_REQUESTS_FAILED_007_HELP=Die Gesamtszahl der fehlgeschlagenen Anforderungen.
-
-ASPNET_REQUESTS_NOT_FOUND_007_NAME=Nicht gefundene Anforderungen
-ASPNET_REQUESTS_NOT_FOUND_007_HELP=Die Anzahl der Anforderungen für Ressourcen, die nicht gefunden wurden.
-
-ASPNET_REQUESTS_NOT_AUTHORIZED_007_NAME=Nicht berechtigte Anforderungen
-ASPNET_REQUESTS_NOT_AUTHORIZED_007_HELP=Die Anzahl der Anforderungen, die wegen mangelnder Zugriffsberechtigung fehlgeschlagen sind.
-
-ASPNET_REQUESTS_TIMED_OUT_007_NAME=Anforderungen mit Zeitüberschreitung
-ASPNET_REQUESTS_TIMED_OUT_007_HELP=Die Anzahl der Anforderungen, deren mit Zeitlimit überschritten wurde.
-
-ASPNET_REQUESTS_SUCCEDED_007_NAME=Erfolgreiche Anforderungen
-ASPNET_REQUESTS_SUCCEDED_007_HELP=Die Anzahl der Anforderungen, die erfolgreich ausgeführt wurden.
-
-ASPNET_REQUESTS_TOTAL_007_NAME=Anforderungen gesamt
-ASPNET_REQUESTS_TOTAL_007_HELP=Die Gesamtszahl der Anforderungen seit die Anwendung gestartet wurde.
-
-ASPNET_REQUESTS_TOTAL_RATE_007_NAME=Anforderungen/Sek.
-ASPNET_REQUESTS_TOTAL_RATE_007_HELP=Die Anzahl der Anforderungen, die pro Sekunde ausgeführt werden.
-
-ASPNET_SESSIONS_ACTIVE_007_NAME=Aktive Sitzungen
-ASPNET_SESSIONS_ACTIVE_007_HELP=Die Anzahl der Sitzungen, die momentan aktive sind.
-
-ASPNET_SESSIONS_ABANDONED_007_NAME=Abgebrochene Sitzungen
-ASPNET_SESSIONS_ABANDONED_007_HELP=Die Anzahl der Sitzungen, die explizit abgebrochen wurden.
-
-ASPNET_SESSIONS_TIMED_OUT_007_NAME=Sitzungen mit Zeitüberschreitung
-ASPNET_SESSIONS_TIMED_OUT_007_HELP=Anzahl der Sitzungen mit Zeitüberschreitung
-
-ASPNET_SESSIONS_TOTAL_007_NAME=Sitzungen gesamt
-ASPNET_SESSIONS_TOTAL_007_HELP=Gesamtanzahl der Sitzungen seit die Anwendung gestartet wurde.
-
-ASPNET_TRANSACTIONS_ABORTED_007_NAME=Abgebrochene Transaktionen
-ASPNET_TRANSACTIONS_ABORTED_007_HELP=Die Anzahl der abgebrochenen Transaktionen.
-
-ASPNET_TRANSACTIONS_COMMITTED_007_NAME=Übermittelte Transaktionen
-ASPNET_TRANSACTIONS_COMMITTED_007_HELP=Die Anzahl der Transaktionen, für die ein Commit ausgeführt wurde.
-
-ASPNET_TRANSACTIONS_PENDING_007_NAME=Ausstehende Transaktionen
-ASPNET_TRANSACTIONS_PENDING_007_HELP=Die Anzahl der Transaktionen, die sich Bearbeitung befinden.
-
-ASPNET_TRANSACTIONS_TOTAL_007_NAME=Transaktionen gesamt
-ASPNET_TRANSACTIONS_TOTAL_007_HELP=Die Gesamtanzahl der Transaktionen seit die Anwendung gestartet wurde.
-
-ASPNET_TRANSACTIONS_RATE_007_NAME=Transaktionen/Sek
-ASPNET_TRANSACTIONS_RATE_007_HELP=Die Anzahl der Transaktionen, die pro Sekunde gestartet werden.
-
diff --git a/src/inc/1031/aspnet_perf2.ini b/src/inc/1031/aspnet_perf2.ini
deleted file mode 100644
index 2e82d224bb..0000000000
--- a/src/inc/1031/aspnet_perf2.ini
+++ /dev/null
@@ -1,416 +0,0 @@
-[info]
-drivername=ASP.NET
-symbolfile=aspnet_perf.h
-
-[languages]
-007=German
-009=English
-
-[objects]
-OBJECT_1_009_NAME=ASP.NET
-OBJECT_2_009_NAME=ASP.NET Applications
-
-[text]
-OBJECT_1_009_NAME=ASP.NET
-OBJECT_1_009_HELP=ASP.NET global performance counters
-OBJECT_2_009_NAME=ASP.NET Applications
-OBJECT_2_009_HELP=ASP.NET Application performance counters
-
-;;
-;; ASP.NET System Counters
-;;
-
-ASPNET_APPLICATION_RESTARTS_009_NAME=Application Restarts
-ASPNET_APPLICATION_RESTARTS_009_HELP=Number of times the application has been restarted during the web server's lifetime.
-
-ASPNET_APPLICATIONS_RUNNING_009_NAME=Applications Running
-ASPNET_APPLICATIONS_RUNNING_009_HELP=Number of currently running web applications.
-
-ASPNET_REQUESTS_DISCONNECTED_009_NAME=Requests Disconnected
-ASPNET_REQUESTS_DISCONNECTED_009_HELP=The number of requests disconnected due to communication errors or user terminated.
-
-ASPNET_REQUEST_EXECUTION_TIME_009_NAME=Request Execution Time
-ASPNET_REQUEST_EXECUTION_TIME_009_HELP=The number of milliseconds that it took to execute the most recent request.
-
-ASPNET_REQUESTS_REJECTED_009_NAME=Requests Rejected
-ASPNET_REQUESTS_REJECTED_009_HELP=The number of requests rejected because the request queue was full.
-
-ASPNET_REQUESTS_QUEUED_009_NAME=Requests Queued
-ASPNET_REQUESTS_QUEUED_009_HELP=The number of requests waiting to be processed.
-
-ASPNET_WPS_RUNNING_009_NAME=Worker Processes Running
-ASPNET_WPS_RUNNING_009_HELP=Number of worker processes running on the machine.
-
-ASPNET_WPS_RESTARTS_009_NAME=Worker Process Restarts
-ASPNET_WPS_RESTARTS_009_HELP=Number of times a worker process has restarted on the machine.
-
-ASPNET_REQUEST_WAIT_TIME_009_NAME=Request Wait Time
-ASPNET_REQUEST_WAIT_TIME_009_HELP=The number of milliseconds the most recent request was waiting in the queue.
-
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_009_NAME=State Server Sessions Active
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_009_HELP=The current number of sessions currently active.
-
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_009_NAME=State Server Sessions Abandoned
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_009_HELP=The number of sessions that have been explicitly abandoned.
-
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_009_NAME=State Server Sessions Timed Out
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_009_HELP=The number of sessions timed out.
-
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_009_NAME=State Server Sessions Total
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_009_HELP=The number of sessions total.
-
-;;
-;; ASP.NET Application Counters
-;;
-
-ASPNET_ANONYMOUS_REQUESTS_009_NAME=Anonymous Requests
-ASPNET_ANONYMOUS_REQUESTS_009_HELP=Number of requests utilizing anonymous authentication.
-
-ASPNET_ANONYMOUS_REQUESTS_RATE_009_NAME=Anonymous Requests/Sec
-ASPNET_ANONYMOUS_REQUESTS_RATE_009_HELP=Number of Authentication Anonymous Requests/Sec
-
-ASPNET_TOTAL_CACHE_ENTRIES_009_NAME=Cache Total Entries
-ASPNET_TOTAL_CACHE_ENTRIES_009_HELP=Total number of entries within the cache (both internal and user added)
-
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_009_NAME=Cache Total Turnover Rate
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the total cache per second.
-
-ASPNET_TOTAL_CACHE_HITS_009_NAME=Cache Total Hits
-ASPNET_TOTAL_CACHE_HITS_009_HELP=Total number of hits from the cache.
-
-ASPNET_TOTAL_CACHE_MISSES_009_NAME=Cache Total Misses
-ASPNET_TOTAL_CACHE_MISSES_009_HELP=Total number of cache misses.
-
-ASPNET_TOTAL_CACHE_RATIO_009_NAME=Cache Total Hit Ratio
-ASPNET_TOTAL_CACHE_RATIO_009_HELP=Ratio of hits from all cache calls.
-
-ASPNET_TOTAL_CACHE_RATIO_BASE_009_NAME=Cache Total Hit Ratio Base
-ASPNET_TOTAL_CACHE_RATIO_BASE_009_HELP=Cache Total Hit Ratio Base
-
-ASPNET_API_CACHE_ENTRIES_009_NAME=Cache API Entries
-ASPNET_API_CACHE_ENTRIES_009_HELP=Total number of entries within the cache added by the user.
-
-ASPNET_API_CACHE_TURNOVER_RATE_009_NAME=Cache API Turnover Rate
-ASPNET_API_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the API cache per second.
-
-ASPNET_API_CACHE_HITS_009_NAME=Cache API Hits
-ASPNET_API_CACHE_HITS_009_HELP=Number of cache hits from user code.
-
-ASPNET_API_CACHE_MISSES_009_NAME=Cache API Misses
-ASPNET_API_CACHE_MISSES_009_HELP=Number of cache misses called from user code.
-
-ASPNET_API_CACHE_RATIO_009_NAME=Cache API Hit Ratio
-ASPNET_API_CACHE_RATIO_009_HELP=Ratio of hits called from user code.
-
-ASPNET_API_CACHE_RATIO_BASE_009_NAME=Cache API Hit Ratio Base
-ASPNET_API_CACHE_RATIO_BASE_009_HELP=Cache API Hit Ratio Base
-
-ASPNET_OUTPUT_CACHE_ENTRIES_009_NAME=Output Cache Entries
-ASPNET_OUTPUT_CACHE_ENTRIES_009_HELP=Current number of entries in the output cache.
-
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_009_NAME=Output Cache Turnover Rate
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the output cache per second.
-
-ASPNET_OUTPUT_CACHE_HITS_009_NAME=Output Cache Hits
-ASPNET_OUTPUT_CACHE_HITS_009_HELP=Total number of ouput cacheable requests served from the output cache.
-
-ASPNET_OUTPUT_CACHE_MISSES_009_NAME=Output Cache Misses
-ASPNET_OUTPUT_CACHE_MISSES_009_HELP=Total number of ouput cacheable requests not served from the output cache.
-
-ASPNET_OUTPUT_CACHE_RATIO_009_NAME=Output Cache Hit Ratio
-ASPNET_OUTPUT_CACHE_RATIO_009_HELP=Ratio of hits to requests for output cacheable requests.
-
-ASPNET_OUTPUT_CACHE_RATIO_BASE_009_NAME=Output Cache Hit Ratio Base
-ASPNET_OUTPUT_CACHE_RATIO_BASE_009_HELP=Output Cache Hit Ratio Base
-
-ASPNET_COMPILATIONS_009_NAME=Compilations Total
-ASPNET_COMPILATIONS_009_HELP=Number of .asax, .ascx, .ashx, .asmx, or .aspx source files dynamically compiled.
-
-ASPNET_DEBUGGING_REQUESTS_009_NAME=Debugging Requests
-ASPNET_DEBUGGING_REQUESTS_009_HELP=Number of debugging requests processed.
-
-ASPNET_ERRORS_PRE_PROCESSING_009_NAME=Errors During Preprocessing
-ASPNET_ERRORS_PRE_PROCESSING_009_HELP=Number of errors that have occurred during parsing and configuration.
-
-ASPNET_ERRORS_COMPILING_009_NAME=Errors During Compilation
-ASPNET_ERRORS_COMPILING_009_HELP=Number of errors that have occurred during compilation.
-
-ASPNET_ERRORS_DURING_REQUEST_009_NAME=Errors During Execution
-ASPNET_ERRORS_DURING_REQUEST_009_HELP=Number of errors that have occurred during the processing of a request.
-
-ASPNET_ERRORS_UNHANDLED_009_NAME=Errors Unhandled During Execution
-ASPNET_ERRORS_UNHANDLED_009_HELP=Number of errors not handled by user code, but by the default error handler.
-
-ASPNET_ERRORS_UNHANDLED_RATE_009_NAME=Errors Unhandled During Execution/Sec
-ASPNET_ERRORS_UNHANDLED_RATE_009_HELP=Rate of unhandled errors.
-
-ASPNET_ERRORS_TOTAL_009_NAME=Errors Total
-ASPNET_ERRORS_TOTAL_009_HELP=Total number of errors occurred.
-
-ASPNET_ERRORS_TOTAL_RATE_009_NAME=Errors Total/Sec
-ASPNET_ERRORS_TOTAL_RATE_009_HELP=Rate of errors occurred.
-
-ASPNET_PIPELINES_009_NAME=Pipeline Instance Count
-ASPNET_PIPELINES_009_HELP=Number of active pipeline instances.
-
-ASPNET_REQUEST_BYTES_IN_009_NAME=Request Bytes In Total
-ASPNET_REQUEST_BYTES_IN_009_HELP=The total size, in bytes, of all requests.
-
-ASPNET_REQUEST_BYTES_OUT_009_NAME=Request Bytes Out Total
-ASPNET_REQUEST_BYTES_OUT_009_HELP=The total size, in bytes, of responses sent to a client. This does not include standard HTTP response headers.
-
-ASPNET_REQUESTS_EXECUTING_009_NAME=Requests Executing
-ASPNET_REQUESTS_EXECUTING_009_HELP=The number of requests currently executing.
-
-ASPNET_REQUESTS_FAILED_009_NAME=Requests Failed
-ASPNET_REQUESTS_FAILED_009_HELP=Total number of failed requests.
-
-ASPNET_REQUESTS_NOT_FOUND_009_NAME=Requests Not Found
-ASPNET_REQUESTS_NOT_FOUND_009_HELP=The number of requests for resources that were not found.
-
-ASPNET_REQUESTS_NOT_AUTHORIZED_009_NAME=Requests Not Authorized
-ASPNET_REQUESTS_NOT_AUTHORIZED_009_HELP=Number of requests failed due to unauthorized access.
-
-ASPNET_REQUESTS_TIMED_OUT_009_NAME=Requests Timed Out
-ASPNET_REQUESTS_TIMED_OUT_009_HELP=The number of requests that timed out.
-
-ASPNET_REQUESTS_SUCCEDED_009_NAME=Requests Succeeded
-ASPNET_REQUESTS_SUCCEDED_009_HELP=The number of requests that executed successfully.
-
-ASPNET_REQUESTS_TOTAL_009_NAME=Requests Total
-ASPNET_REQUESTS_TOTAL_009_HELP=The total number of requests since the application was started.
-
-ASPNET_REQUESTS_TOTAL_RATE_009_NAME=Requests/Sec
-ASPNET_REQUESTS_TOTAL_RATE_009_HELP=The number of requests executed per second.
-
-ASPNET_SESSIONS_ACTIVE_009_NAME=Sessions Active
-ASPNET_SESSIONS_ACTIVE_009_HELP=The current number of sessions currently active.
-
-ASPNET_SESSIONS_ABANDONED_009_NAME=Sessions Abandoned
-ASPNET_SESSIONS_ABANDONED_009_HELP=The number of sessions that have been explicitly abandoned.
-
-ASPNET_SESSIONS_TIMED_OUT_009_NAME=Sessions Timed Out
-ASPNET_SESSIONS_TIMED_OUT_009_HELP=The number of sessions timed out.
-
-ASPNET_SESSIONS_TOTAL_009_NAME=Sessions Total
-ASPNET_SESSIONS_TOTAL_009_HELP=Total number of sessions since the application was started.
-
-ASPNET_TRANSACTIONS_ABORTED_009_NAME=Transactions Aborted
-ASPNET_TRANSACTIONS_ABORTED_009_HELP=The number of transactions aborted.
-
-ASPNET_TRANSACTIONS_COMMITTED_009_NAME=Transactions Committed
-ASPNET_TRANSACTIONS_COMMITTED_009_HELP=The number of transactions committed.
-
-ASPNET_TRANSACTIONS_PENDING_009_NAME=Transactions Pending
-ASPNET_TRANSACTIONS_PENDING_009_HELP=Number of transactions in progress.
-
-ASPNET_TRANSACTIONS_TOTAL_009_NAME=Transactions Total
-ASPNET_TRANSACTIONS_TOTAL_009_HELP=The total number of transactions since the application was started.
-
-ASPNET_TRANSACTIONS_RATE_009_NAME=Transactions/Sec
-ASPNET_TRANSACTIONS_RATE_009_HELP=Transactions started per second.
-
-
-;;
-;;
-;;
-
-OBJECT_1_007_NAME=ASP.NET
-OBJECT_1_007_HELP=Globale ASP.NET-Leistungsindikatoren
-OBJECT_2_007_NAME=ASP.NET-Anwendungen
-OBJECT_2_007_HELP=Leistungsindikatoren für ASP.NET-Anwendungen
-
-;;
-;; ASP.NET System Counters
-;;
-
-ASPNET_APPLICATION_RESTARTS_007_NAME=Anwendungsneustarts
-ASPNET_APPLICATION_RESTARTS_007_HELP=Gibt an, wie oft die Anwendung während der Gültigkeitsdauer des Webservers neu gestartet wurde.
-
-ASPNET_APPLICATIONS_RUNNING_007_NAME=Ausgeführte Anwendungen
-ASPNET_APPLICATIONS_RUNNING_007_HELP=Die Anzahl der Webanwendungen, die momentan ausgeführt werden.
-
-ASPNET_REQUESTS_DISCONNECTED_007_NAME=Getrennte Anforderungen
-ASPNET_REQUESTS_DISCONNECTED_007_HELP=Die Anzahl der Anforderungen, die aufgrund von Kommunikationsfehlern oder vom Benutzer getrennt wurden.
-
-ASPNET_REQUEST_EXECUTION_TIME_007_NAME=Ausführungszeit der Anforderung
-ASPNET_REQUEST_EXECUTION_TIME_007_HELP=Die Zeitdauer zum Ausführen der letzten Anforderung in Millisekunden.
-
-ASPNET_REQUESTS_REJECTED_007_NAME=Anforderungen wurden abgelehnt
-ASPNET_REQUESTS_REJECTED_007_HELP=Die Anzahl der abgelehnten Anforderungen, da die Anforderungsschlange voll war.
-
-ASPNET_REQUESTS_QUEUED_007_NAME=Anforderungen in Warteschlange
-ASPNET_REQUESTS_QUEUED_007_HELP=Die Anzahl der Anforderungen, die auf die Verarbeitung warten.
-
-ASPNET_WPS_RUNNING_007_NAME=Ausgeführte Workerprozesse
-ASPNET_WPS_RUNNING_007_HELP=Die Anzahl der Workerprozesse, die auf dem Computer ausgeführt werden.
-
-ASPNET_WPS_RESTARTS_007_NAME=Workerprozess-Neustarts
-ASPNET_WPS_RESTARTS_007_HELP=Gibt an, wie oft ein Workerprozess auf dem Computer neu gestartet wurde.
-
-ASPNET_REQUEST_WAIT_TIME_007_NAME=Wartezeit der Anforderung
-ASPNET_REQUEST_WAIT_TIME_007_HELP=Die Anzahl der Millisekunden, die die letzte Anforderung in der Warteschlange wartete.
-
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_007_NAME=Aktive Statusserversitzungen
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_007_HELP=Die Anzahl der Sitzungen, die momentan aktive sind.
-
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_007_NAME=Abgebrochene Statusserversitzungen
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_007_HELP=Die Anzahl der Sitzungen, die explizit abgebrochen wurden.
-
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_007_NAME=Abgelaufene Statusserversitzungen
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_007_HELP=Anzahl der Sitzungen mit Zeitüberschreitung
-
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_007_NAME=Statusserversitzungen insgesamt
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_007_HELP=Gesamtanzahl der Sitzungen.
-
-;;
-;; ASP.NET Application Counters
-;;
-
-ASPNET_ANONYMOUS_REQUESTS_007_NAME=Anonyme Anforderungen
-ASPNET_ANONYMOUS_REQUESTS_007_HELP=Die Anzahl der Anforderungen, die anonyme Authentifizierung verwenden.
-
-ASPNET_ANONYMOUS_REQUESTS_RATE_007_NAME=Anonyme Anforderungen/Sek.
-ASPNET_ANONYMOUS_REQUESTS_RATE_007_HELP=Die Anzahl der Anforderungen mit anonymer Authentifizierung pro Sekunde.
-
-ASPNET_TOTAL_CACHE_ENTRIES_007_NAME=Cacheeinträge gesamt
-ASPNET_TOTAL_CACHE_ENTRIES_007_HELP=Die Gesamtzahl der Cacheeinträge (intern und von Benutzer hinzugefügt).
-
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_007_NAME=Gesamte Cacheturnoverrate
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_007_HELP=Anzahl der Hinzufüge- und Löschvorgänge im gesamten Cache pro Sekunde.
-
-ASPNET_TOTAL_CACHE_HITS_007_NAME=Cachetreffer gesamt
-ASPNET_TOTAL_CACHE_HITS_007_HELP=Die Gesamtzahl der Cachetreffer.
-
-ASPNET_TOTAL_CACHE_MISSES_007_NAME=Fehlgeschlagene Cachezugriffe gesamt
-ASPNET_TOTAL_CACHE_MISSES_007_HELP=Die Gesamtzahl der fehlgeschlagenen Cachezugriffe.
-
-ASPNET_TOTAL_CACHE_RATIO_007_NAME=Cache-Trefferrate gesamt
-ASPNET_TOTAL_CACHE_RATIO_007_HELP=Die Trefferrate aller Cacheaufrufe.
-
-ASPNET_TOTAL_CACHE_RATIO_BASE_007_NAME=Cache-Trefferrate gesamt (Basis)
-ASPNET_TOTAL_CACHE_RATIO_BASE_007_HELP=Cache-Trefferrate gesamt (Basis)
-
-ASPNET_API_CACHE_ENTRIES_007_NAME=Cache-API-Einträge
-ASPNET_API_CACHE_ENTRIES_007_HELP=Die Gesamtzahl der Cacheeinträge, die vom Benutzer hinzugefügt wurden.
-
-ASPNET_API_CACHE_TURNOVER_RATE_007_NAME=Turnoverrate für Cache-API
-ASPNET_API_CACHE_TURNOVER_RATE_007_HELP=Anzahl der Hinzufüge- und Löschvorgänge im API-Cache pro Sekunde.
-
-ASPNET_API_CACHE_HITS_007_NAME=Cache-API-Treffer
-ASPNET_API_CACHE_HITS_007_HELP=Die Anzahl der Cachetreffer vom Benutzercode aus.
-
-ASPNET_API_CACHE_MISSES_007_NAME=Fehlgeschlagene Cache-API-Zugriffe
-ASPNET_API_CACHE_MISSES_007_HELP=Die Anzahl der fehlgeschlagenen Cachezugriffe, die vom Benutzercode aus aufgerufen wurden.
-
-ASPNET_API_CACHE_RATIO_007_NAME=Cache-API-Trefferrate
-ASPNET_API_CACHE_RATIO_007_HELP=Die Trefferrate der Benutzercodeaufrufe.
-
-ASPNET_API_CACHE_RATIO_BASE_007_NAME=API-Cache-Trefferrate (Basis)
-ASPNET_API_CACHE_RATIO_BASE_007_HELP=API-Cache-Trefferrate (Basis)
-
-ASPNET_OUTPUT_CACHE_ENTRIES_007_NAME=Ausgabecacheeinträge
-ASPNET_OUTPUT_CACHE_ENTRIES_007_HELP=Die aktuelle Anzahl der Einträge im Ausgabecache.
-
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_007_NAME=Turnoverrate für den Ausgabecache
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_007_HELP=Anzahl der Hinzufüge- und Löschvorgänge im Ausgabecache pro Sekunde.
-
-ASPNET_OUTPUT_CACHE_HITS_007_NAME=Ausgabecachetreffer
-ASPNET_OUTPUT_CACHE_HITS_007_HELP=Die Gesamtanzahl der zwischenspeicherbaren Anforderungen, die vom Ausgabecache beantwortet werden.
-
-ASPNET_OUTPUT_CACHE_MISSES_007_NAME=Fehlgeschlagene Ausgabecache-Zugriffe
-ASPNET_OUTPUT_CACHE_MISSES_007_HELP=Die Gesamtanzahl der zwischenspeicherbaren Anforderungen, die nicht vom Ausgabecache beantwortet werden.
-
-ASPNET_OUTPUT_CACHE_RATIO_007_NAME=Ausgabecache-Trefferrate
-ASPNET_OUTPUT_CACHE_RATIO_007_HELP=Trefferrate der zwischenspeicherbaren Ausgabeanforderungen.
-
-ASPNET_OUTPUT_CACHE_RATIO_BASE_007_NAME=Ausgabecache-Trefferrate
-ASPNET_OUTPUT_CACHE_RATIO_BASE_007_HELP=Ausgabecache-Trefferrate
-
-ASPNET_COMPILATIONS_007_NAME=Kompilierungen insgesamt
-ASPNET_COMPILATIONS_007_HELP=Die Anzahl der dynamisch kompilierten Quelldateien .asax, .ascx, .ashx, .asmx oder .aspx.
-
-ASPNET_DEBUGGING_REQUESTS_007_NAME=Debug-Anforderungen
-ASPNET_DEBUGGING_REQUESTS_007_HELP=Die Anzahl der Debug-Anforderungen, die verarbeitet wurden.
-
-ASPNET_ERRORS_PRE_PROCESSING_007_NAME=Fehler bei der Vorverarbeitung
-ASPNET_ERRORS_PRE_PROCESSING_007_HELP=Die Anzahl der Fehler, die beim Analysieren und Konfigurieren aufgetreten sind.
-
-ASPNET_ERRORS_COMPILING_007_NAME=Fehler bei der Kompilierung
-ASPNET_ERRORS_COMPILING_007_HELP=Die Anzahl der Fehler, die beim Kompilieren aufgetreten sind.
-
-ASPNET_ERRORS_DURING_REQUEST_007_NAME=Fehler beim Ausführen
-ASPNET_ERRORS_DURING_REQUEST_007_HELP=Die Anzahl der Fehler, die beim Verarbeiten einer Anforderung aufgetreten sind.
-
-ASPNET_ERRORS_UNHANDLED_007_NAME=Unbehandelte Fehler beim Ausführen
-ASPNET_ERRORS_UNHANDLED_007_HELP=Die Anzahl der Fehler, die nicht vom Benutzercode verarbeitet wurden, sondern vom Standardfehlerhandler.
-
-ASPNET_ERRORS_UNHANDLED_RATE_007_NAME=Unbehandelte Fehler während der Ausführung pro Sekunde
-ASPNET_ERRORS_UNHANDLED_RATE_007_HELP=Rate der unbehandelten Fehler.
-
-ASPNET_ERRORS_TOTAL_007_NAME=Fehler gesamt
-ASPNET_ERRORS_TOTAL_007_HELP=Anzahl der aufgetretenen Fehler.
-
-ASPNET_ERRORS_TOTAL_RATE_007_NAME=Fehler gesamt/Sek.
-ASPNET_ERRORS_TOTAL_RATE_007_HELP=Rate der aufgetretenen Fehler.
-
-ASPNET_PIPELINES_007_NAME=Pipeline-Instanzenzahl
-ASPNET_PIPELINES_007_HELP=Die Anzahl der aktiven Pipelineinstanzen.
-
-ASPNET_REQUEST_BYTES_IN_007_NAME=Anforderungsbytes gesamt (einschließl.)
-ASPNET_REQUEST_BYTES_IN_007_HELP=Die Gesamtgröße aller Anforderungen in Bytes.
-
-ASPNET_REQUEST_BYTES_OUT_007_NAME=Anforderungsbytes gesamt (ausschließl.)
-ASPNET_REQUEST_BYTES_OUT_007_HELP=Die Gesamtgröße aller Antworten in Bytes, die an einen Client gesendet wurden, wobei standardmäßige HTTP-Antwortheader ausgeschlossen werden.
-
-ASPNET_REQUESTS_EXECUTING_007_NAME=Ausgeführte Anforderungen
-ASPNET_REQUESTS_EXECUTING_007_HELP=Die Anzahl der Anforderungen, die momentan ausgeführt werden.
-
-ASPNET_REQUESTS_FAILED_007_NAME=Fehlgeschlagene Anforderungen
-ASPNET_REQUESTS_FAILED_007_HELP=Die Gesamtszahl der fehlgeschlagenen Anforderungen.
-
-ASPNET_REQUESTS_NOT_FOUND_007_NAME=Nicht gefundene Anforderungen
-ASPNET_REQUESTS_NOT_FOUND_007_HELP=Die Anzahl der Anforderungen für Ressourcen, die nicht gefunden wurden.
-
-ASPNET_REQUESTS_NOT_AUTHORIZED_007_NAME=Nicht berechtigte Anforderungen
-ASPNET_REQUESTS_NOT_AUTHORIZED_007_HELP=Die Anzahl der Anforderungen, die wegen mangelnder Zugriffsberechtigung fehlgeschlagen sind.
-
-ASPNET_REQUESTS_TIMED_OUT_007_NAME=Anforderungen mit Zeitüberschreitung
-ASPNET_REQUESTS_TIMED_OUT_007_HELP=Die Anzahl der Anforderungen, deren mit Zeitlimit überschritten wurde.
-
-ASPNET_REQUESTS_SUCCEDED_007_NAME=Erfolgreiche Anforderungen
-ASPNET_REQUESTS_SUCCEDED_007_HELP=Die Anzahl der Anforderungen, die erfolgreich ausgeführt wurden.
-
-ASPNET_REQUESTS_TOTAL_007_NAME=Anforderungen gesamt
-ASPNET_REQUESTS_TOTAL_007_HELP=Die Gesamtszahl der Anforderungen seit die Anwendung gestartet wurde.
-
-ASPNET_REQUESTS_TOTAL_RATE_007_NAME=Anforderungen/Sek.
-ASPNET_REQUESTS_TOTAL_RATE_007_HELP=Die Anzahl der Anforderungen, die pro Sekunde ausgeführt werden.
-
-ASPNET_SESSIONS_ACTIVE_007_NAME=Aktive Sitzungen
-ASPNET_SESSIONS_ACTIVE_007_HELP=Die Anzahl der Sitzungen, die momentan aktive sind.
-
-ASPNET_SESSIONS_ABANDONED_007_NAME=Abgebrochene Sitzungen
-ASPNET_SESSIONS_ABANDONED_007_HELP=Die Anzahl der Sitzungen, die explizit abgebrochen wurden.
-
-ASPNET_SESSIONS_TIMED_OUT_007_NAME=Sitzungen mit Zeitüberschreitung
-ASPNET_SESSIONS_TIMED_OUT_007_HELP=Anzahl der Sitzungen mit Zeitüberschreitung
-
-ASPNET_SESSIONS_TOTAL_007_NAME=Sitzungen gesamt
-ASPNET_SESSIONS_TOTAL_007_HELP=Gesamtanzahl der Sitzungen seit die Anwendung gestartet wurde.
-
-ASPNET_TRANSACTIONS_ABORTED_007_NAME=Abgebrochene Transaktionen
-ASPNET_TRANSACTIONS_ABORTED_007_HELP=Die Anzahl der abgebrochenen Transaktionen.
-
-ASPNET_TRANSACTIONS_COMMITTED_007_NAME=Übermittelte Transaktionen
-ASPNET_TRANSACTIONS_COMMITTED_007_HELP=Die Anzahl der Transaktionen, für die ein Commit ausgeführt wurde.
-
-ASPNET_TRANSACTIONS_PENDING_007_NAME=Ausstehende Transaktionen
-ASPNET_TRANSACTIONS_PENDING_007_HELP=Die Anzahl der Transaktionen, die sich Bearbeitung befinden.
-
-ASPNET_TRANSACTIONS_TOTAL_007_NAME=Transaktionen gesamt
-ASPNET_TRANSACTIONS_TOTAL_007_HELP=Die Gesamtanzahl der Transaktionen seit die Anwendung gestartet wurde.
-
-ASPNET_TRANSACTIONS_RATE_007_NAME=Transaktionen/Sek
-ASPNET_TRANSACTIONS_RATE_007_HELP=Die Anzahl der Transaktionen, die pro Sekunde gestartet werden.
-
diff --git a/src/inc/1041/CORPerfMonSymbols.ini b/src/inc/1041/CORPerfMonSymbols.ini
deleted file mode 100644
index b982b2db39..0000000000
--- a/src/inc/1041/CORPerfMonSymbols.ini
+++ /dev/null
@@ -1,577 +0,0 @@
-; Licensed to the .NET Foundation under one or more agreements.
-; The .NET Foundation licenses this file to you under the MIT license.
-; See the LICENSE file in the project root for more information.
-
-//------------------------------------------------------------------------
-// WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
-//
-// AUTO GENERATED FILE. DO NOT EDIT. USE $/com99/src/profile/perfmonhelp
-//
-// WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
-//------------------------------------------------------------------------
-
-// CORPerfMonSymbols.ini file
-[info]
-drivername=.NETFramework
-symbolfile=CORPerfMonSymbols.h
-
-[languages]
-009=English
-011=Japanese
-; 001=Arabic
-; 004=Chinese
-; 007=German
-; 00D=Hebrew
-; 011=Japanese
-; 012=Korean
-; 00A=Spanish
-; 00C=French
-; 010=Italian
-
-[objects]
-DotNetCLR_Memory_OBJECT_009_NAME=.NET CLR Memory
-DotNetCLR_Loading_OBJECT_009_NAME=.NET CLR Loading
-DotNetCLR_Jit_OBJECT_009_NAME=.NET CLR Jit
-DotNetCLR_Interop_OBJECT_009_NAME=.NET CLR Interop
-DotNetCLR_LocksAndThreads_OBJECT_009_NAME=.NET CLR LocksAndThreads
-DotNetCLR_Security_OBJECT_009_NAME=.NET CLR Security
-DotNetCLR_Remoting_OBJECT_009_NAME=.NET CLR Remoting
-DotNetCLR_Excep_OBJECT_009_NAME=.NET CLR Exceptions
-DotNetCLR_Memory_OBJECT_011_NAME=.NET CLR Memory
-DotNetCLR_Loading_OBJECT_011_NAME=.NET CLR Loading
-DotNetCLR_Jit_OBJECT_011_NAME=.NET CLR Jit
-DotNetCLR_Interop_OBJECT_011_NAME=.NET CLR Interop
-DotNetCLR_LocksAndThreads_OBJECT_011_NAME=.NET CLR LocksAndThreads
-DotNetCLR_Security_OBJECT_011_NAME=.NET CLR Security
-DotNetCLR_Remoting_OBJECT_011_NAME=.NET CLR Remoting
-DotNetCLR_Excep_OBJECT_011_NAME=.NET CLR Exceptions
-
-[text]
-DotNetCLR_Memory_OBJECT_009_NAME=.NET CLR Memory
-DotNetCLR_Memory_OBJECT_009_HELP=Counters for CLR Garbage Collected heap.
-
-GEN0_COLLECTIONS_COUNTER_009_NAME=# Gen 0 Collections
-GEN0_COLLECTIONS_COUNTER_009_HELP=This counter displays the number of times the generation 0 objects (youngest; most recently allocated) are garbage collected (Gen 0 GC) since the start of the application. Gen 0 GC occurs when the available memory in generation 0 is not sufficient to satisfy an allocation request. This counter is incremented at the end of a Gen 0 GC. Higher generation GCs include all lower generation GCs. This counter is explicitly incremented when a higher generation (Gen 1 or Gen 2) GC occurs. _Global_ counter value is not accurate and should be ignored. This counter displays the last observed value.
-
-GEN1_COLLECTIONS_COUNTER_009_NAME=# Gen 1 Collections
-GEN1_COLLECTIONS_COUNTER_009_HELP=This counter displays the number of times the generation 1 objects are garbage collected since the start of the application. The counter is incremented at the end of a Gen 1 GC. Higher generation GCs include all lower generation GCs. This counter is explicitly incremented when a higher generation (Gen 2) GC occurs. _Global_ counter value is not accurate and should be ignored. This counter displays the last observed value.
-
-GEN2_COLLECTIONS_COUNTER_009_NAME=# Gen 2 Collections
-GEN2_COLLECTIONS_COUNTER_009_HELP=This counter displays the number of times the generation 2 objects (older) are garbage collected since the start of the application. The counter is incremented at the end of a Gen 2 GC (also called full GC). _Global_ counter value is not accurate and should be ignored. This counter displays the last observed value.
-
-GEN0_BYTES_PROMOTED_COUNTER_009_NAME=Promoted Memory from Gen 0
-GEN0_BYTES_PROMOTED_COUNTER_009_HELP=This counter displays the bytes of memory that survive garbage collection (GC) and are promoted from generation 0 to generation 1; objects that are promoted just because they are waiting to be finalized are not included in this counter. This counter displays the value observed at the end of the last GC; its not a cumulative counter.
-
-GEN1_BYTES_PROMOTED_COUNTER_009_NAME=Promoted Memory from Gen 1
-GEN1_BYTES_PROMOTED_COUNTER_009_HELP=This counter displays the bytes of memory that survive garbage collection (GC) and are promoted from generation 1 to generation 2; objects that are promoted just because they are waiting to be finalized are not included in this counter. This counter displays the value observed at the end of the last GC; its not a cumulative counter. This counter is reset to 0 if the last GC was a Gen 0 GC only.
-
-GEN0_PROMOTION_RATE_009_NAME=Gen 0 Promoted Bytes/Sec
-GEN0_PROMOTION_RATE_009_HELP=This counter displays the bytes per second that are promoted from generation 0 (youngest) to generation 1; objects that are promoted just because they are waiting to be finalized are not included in this counter. Memory is promoted when it survives a garbage collection. This counter was designed as an indicator of relatively long-lived objects being created per sec. This counter displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-GEN1_PROMOTION_RATE_009_NAME=Gen 1 Promoted Bytes/Sec
-GEN1_PROMOTION_RATE_009_HELP=This counter displays the bytes per second that are promoted from generation 1 to generation 2 (oldest); objects that are promoted just because they are waiting to be finalized are not included in this counter. Memory is promoted when it survives a garbage collection. Nothing is promoted from generation 2 since it is the oldest. This counter was designed as an indicator of very long-lived objects being created per sec. This counter displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-GEN0_FINALIZATION_BYTES_PROMOTED_COUNTER_009_NAME=Promoted Finalization-Memory from Gen 0
-GEN0_FINALIZATION_BYTES_PROMOTED_COUNTER_009_HELP=This counter displays the bytes of memory that are promoted from generation 0 to generation 1 just because they are waiting to be finalized. This counter displays the value observed at the end of the last GC; its not a cumulative counter.
-
-GEN1_FINALIZATION_BYTES_PROMOTED_COUNTER_009_NAME=Promoted Finalization-Memory from Gen 1
-GEN1_FINALIZATION_BYTES_PROMOTED_COUNTER_009_HELP=This counter displays the bytes of memory that are promoted from generation 1 to generation 2 just because they are waiting to be finalized. This counter displays the value observed at the end of the last GC; its not a cumulative counter. This counter is reset to 0 if the last GC was a Gen 0 GC only.
-
-GEN0_HEAP_SIZE_COUNTER_009_NAME=Gen 0 heap size
-GEN0_HEAP_SIZE_COUNTER_009_HELP=This counter displays the maximum bytes that can be allocated in generation 0 (Gen 0); its does not indicate the current number of bytes allocated in Gen 0. A Gen 0 GC is triggered when the allocations since the last GC exceed this size. The Gen 0 size is tuned by the Garbage Collector and can change during the execution of the application. At the end of a Gen 0 collection the size of the Gen 0 heap is infact 0 bytes; this counter displays the size (in bytes) of allocations that would trigger the next Gen 0 GC. This counter is updated at the end of a GC; its not updated on every allocation.
-
-GEN1_HEAP_SIZE_COUNTER_009_NAME=Gen 1 heap size
-GEN1_HEAP_SIZE_COUNTER_009_HELP=This counter displays the current number of bytes in generation 1 (Gen 1); this counter does not display the maximum size of Gen 1. Objects are not directly allocated in this generation; they are promoted from previous Gen 0 GCs. This counter is updated at the end of a GC; its not updated on every allocation.
-
-GEN2_HEAP_SIZE_COUNTER_009_NAME=Gen 2 heap size
-GEN2_HEAP_SIZE_COUNTER_009_HELP=This counter displays the current number of bytes in generation 2 (Gen 2). Objects are not directly allocated in this generation; they are promoted from Gen 1 during previous Gen 1 GCs. This counter is updated at the end of a GC; its not updated on every allocation.
-
-LARGE_OBJECT_SIZE_COUNTER_009_NAME=Large Object Heap size
-LARGE_OBJECT_SIZE_COUNTER_009_HELP=This counter displays the current size of the Large Object Heap in bytes. Objects greater than 20 KBytes are treated as large objects by the Garbage Collector and are directly allocated in a special heap; they are not promoted through the generations. This counter is updated at the end of a GC; its not updated on every allocation.
-
-SURVIVE_FINALIZE_COUNTER_009_NAME=Finalization Survivors
-SURVIVE_FINALIZE_COUNTER_009_HELP=This counter displays the number of garbage collected objects that survive a collection because they are waiting to be finalized. If these objects hold references to other objects then those objects also survive but are not counted by this counter; the "Promoted Finalization-Memory from Gen 0" and "Promoted Finalization-Memory from Gen 1" counters represent all the memory that survived due to finalization. This counter is not a cumulative counter; its updated at the end of every GC with count of the survivors during that particular GC only. This counter was designed to indicate the extra overhead that the application might incur because of finalization.
-
-NUM_HANDLES_COUNTER_009_NAME=# GC Handles
-NUM_HANDLES_COUNTER_009_HELP=This counter displays the current number of GC Handles in use. GCHandles are handles to resources external to the CLR and the managed environment. Handles occupy small amounts of memory in the GCHeap but potentially expensive unmanaged resources.
-
-ALLOCATION_RATE_COUNTER_009_NAME=Allocated Bytes/sec
-ALLOCATION_RATE_COUNTER_009_HELP=This counter displays the rate of bytes per second allocated on the GC Heap. This counter is updated at the end of every GC; not at each allocation. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-INDUCED_GC_COUNTER_009_NAME=# Induced GC
-INDUCED_GC_COUNTER_009_HELP=This counter displays the peak number of times a garbage collection was performed because of an explicit call to GC.Collect. Its a good practice to let the GC tune the frequency of its collections.
-
-PER_TIME_IN_GC_COUNTER_009_NAME=% Time in GC
-PER_TIME_IN_GC_COUNTER_009_HELP=% Time in GC is the percentage of elapsed time that was spent in performing a garbage collection (GC) since the last GC cycle. This counter is usually an indicator of the work done by the Garbage Collector on behalf of the application to collect and compact memory. This counter is updated only at the end of every GC and the counter value reflects the last observed value; its not an average.
-
-PER_TIME_IN_GC_COUNTER_BASE_009_NAME=Not Displayed
-PER_TIME_IN_GC_COUNTER_BASE_009_HELP=Not Displayed.
-
-TOTAL_HEAP_SIZE_COUNTER_009_NAME=# Bytes in all Heaps
-TOTAL_HEAP_SIZE_COUNTER_009_HELP=This counter is the sum of four other counters; Gen 0 Heap Size; Gen 1 Heap Size; Gen 2 Heap Size and the Large Object Heap Size. This counter indicates the current memory allocated in bytes on the GC Heaps.
-
-TOTAL_COMMITTED_MEM_COUNTER_009_NAME=# Total committed Bytes
-TOTAL_COMMITTED_MEM_COUNTER_009_HELP=This counter displays the amount of virtual memory (in bytes) currently committed by the Garbage Collector. (Committed memory is the physical memory for which space has been reserved on the disk paging file).
-
-TOTAL_RESERVED_MEM_COUNTER_009_NAME=# Total reserved Bytes
-TOTAL_RESERVED_MEM_COUNTER_009_HELP=This counter displays the amount of virtual memory (in bytes) currently reserved by the Garbage Collector. (Reserved memory is the virtual memory space reserved for the application but no disk or main memory pages have been used.)
-
-GC_PINNED_OBJECTS_009_NAME=# of Pinned Objects
-GC_PINNED_OBJECTS_009_HELP=This counter displays the number of pinned objects encountered in the last GC. This counter tracks the pinned objects only in the heaps that were garbage collected e.g. a Gen 0 GC would cause enumeration of pinned objects in the generation 0 heap only. A pinned object is one that the Garbage Collector cannot move in memory.
-
-GC_SINKBLOCKS_009_NAME=# of Sink Blocks in use
-GC_SINKBLOCKS_009_HELP=This counter displays the current number of sync blocks in use. Sync blocks are per-object data structures allocated for storing synchronization information. Sync blocks hold weak references to managed objects and need to be scanned by the Garbage Collector. Sync blocks are not limited to storing synchronization information and can also store COM interop metadata. This counter was designed to indicate performance problems with heavy use of synchronization primitives.
-
-DotNetCLR_Loading_OBJECT_009_NAME=.NET CLR Loading
-DotNetCLR_Loading_OBJECT_009_HELP=Statistics for CLR Class Loader.
-
-LOADING_CLASSES_TOTAL_009_NAME=Total Classes Loaded
-LOADING_CLASSES_TOTAL_009_HELP=This counter displays the cumulative number of classes loaded in all Assemblies since the start of this application.
-
-LOADING_TIME_009_NAME=% Time Loading
-LOADING_TIME_009_HELP=Reserved for future use.
-
-LOADING_ASMSEARCHLEN_009_NAME=Assembly Search Length
-LOADING_ASMSEARCHLEN_009_HELP=Reserved for future use.
-
-LOADING_LOADFAILURES_TOTAL_009_NAME=Total # of Load Failures
-LOADING_LOADFAILURES_TOTAL_009_HELP=This counter displays the peak number of classes that have failed to load since the start of the application. These load failures could be due to many reasons like inadequate security or illegal format. Full details can be found in the profiling services help.
-
-LOADING_LOADFAILURES_INST_009_NAME=Rate of Load Failures
-LOADING_LOADFAILURES_INST_009_HELP=This counter displays the number of classes that failed to load per second. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval. These load failures could be due to many reasons like inadequate security or illegal format. Full details can be found in the profiling services help.
-
-LOADING_HEAPSIZE_009_NAME=Bytes in Loader Heap
-LOADING_HEAPSIZE_009_HELP=This counter displays the current size (in bytes) of the memory committed by the class loader across all AppDomains. (Committed memory is the physical memory for which space has been reserved on the disk paging file.)
-
-LOADING_APPDOMAINS_UNLOADED_TOTAL_009_NAME=Total appdomains unloaded
-LOADING_APPDOMAINS_UNLOADED_TOTAL_009_HELP=This counter displays the total number of AppDomains unloaded since the start of the application. If an AppDomain is loaded and unloaded multiple times this counter would count each of those unloads as separate.
-
-LOADING_APPDOMAINS_UNLOADED_INST_009_NAME=Rate of appdomains unloaded
-LOADING_APPDOMAINS_UNLOADED_INST_009_HELP=This counter displays the number of AppDomains unloaded per second. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-LOADING_CLASSES_CUR_009_NAME=Current Classes Loaded
-LOADING_CLASSES_CUR_009_HELP=This counter displays the current number of classes loaded in all Assemblies.
-
-LOADING_CLASSES_INST_009_NAME=Rate of Classes Loaded
-LOADING_CLASSES_INST_009_HELP=This counter displays the number of classes loaded per second in all Assemblies. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-LOADING_APPDOMAINS_CUR_009_NAME=Current appdomains
-LOADING_APPDOMAINS_CUR_009_HELP=This counter displays the current number of AppDomains loaded in this application. AppDomains (application domains) provide a secure and versatile unit of processing that the CLR can use to provide isolation between applications running in the same process.
-
-LOADING_APPDOMAINS_TOTAL_009_NAME=Total Appdomains
-LOADING_APPDOMAINS_TOTAL_009_HELP=This counter displays the peak number of AppDomains loaded since the start of this application. AppDomains (application domains) provide a secure and versatile unit of processing that the CLR can use to provide isolation between applications running in the same process.
-
-LOADING_APPDOMAINS_INST_009_NAME=Rate of appdomains
-LOADING_APPDOMAINS_INST_009_HELP=This counter displays the number of AppDomains loaded per second. AppDomains (application domains) provide a secure and versatile unit of processing that the CLR can use to provide isolation between applications running in the same process. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-LOADING_ASSEMBLIES_CUR_009_NAME=Current Assemblies
-LOADING_ASSEMBLIES_CUR_009_HELP=This counter displays the current number of Assemblies loaded across all AppDomains in this application. If the Assembly is loaded as domain-neutral from multiple AppDomains then this counter is incremented once only. Assemblies can be loaded as domain-neutral when their code can be shared by all AppDomains or they can be loaded as domain-specific when their code is private to the AppDomain.
-
-LOADING_ASSEMBLIES_TOTAL_009_NAME=Total Assemblies
-LOADING_ASSEMBLIES_TOTAL_009_HELP=This counter displays the total number of Assemblies loaded since the start of this application. If the Assembly is loaded as domain-neutral from multiple AppDomains then this counter is incremented once only. Assemblies can be loaded as domain-neutral when their code can be shared by all AppDomains or they can be loaded as domain-specific when their code is private to the AppDomain.
-
-LOADING_ASSEMBLIES_INST_009_NAME=Rate of Assemblies
-LOADING_ASSEMBLIES_INST_009_HELP=This counter displays the number of Assemblies loaded across all AppDomains per second. If the Assembly is loaded as domain-neutral from multiple AppDomains then this counter is incremented once only. Assemblies can be loaded as domain-neutral when their code can be shared by all AppDomains or they can be loaded as domain-specific when their code is private to the AppDomain. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-DotNetCLR_Jit_OBJECT_009_NAME=.NET CLR Jit
-DotNetCLR_Jit_OBJECT_009_HELP=Stats for CLR Jit.
-
-TOTAL_METHODS_JITTED_009_NAME=# of Methods Jitted
-TOTAL_METHODS_JITTED_009_HELP=This counter displays the total number of methods compiled Just-In-Time (JIT) by the CLR JIT compiler since the start of the application. This counter does not include the pre-jitted methods.
-
-JITTED_IL_CUR_009_NAME=# of IL Bytes Jitted
-JITTED_IL_CUR_009_HELP=This counter displays the total IL bytes jitted since the start of the application. This counter is exactly equivalent to the "Total # of IL Bytes Jitted" counter.
-
-JITTED_IL_TOTAL_009_NAME=Total # of IL Bytes Jitted
-JITTED_IL_TOTAL_009_HELP=This counter displays the total IL bytes jitted since the start of the application. This counter is exactly equivalent to the "# of IL Bytes Jitted" counter.
-
-JITTED_IL_INST_009_NAME=IL Bytes Jitted / sec
-JITTED_IL_INST_009_HELP=This counter displays the rate at which IL bytes are jitted per second. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-JIT_FAILURES_009_NAME=Standard Jit Failures
-JIT_FAILURES_009_HELP=This counter displays the peak number of methods the JIT compiler has failed to JIT since the start of the application. This failure can occur if the IL cannot be verified or if there was an internal error in the JIT compiler.
-
-TIME_IN_JIT_009_NAME=% Time in Jit
-TIME_IN_JIT_009_HELP=This counter displays the percentage of elapsed time spent in JIT compilation since the last JIT compilation phase. This counter is updated at the end of every JIT compilation phase. A JIT compilation phase is the phase when a method and its dependencies are being compiled.
-
-TIME_IN_JIT_BASE_009_NAME=Not Displayed
-TIME_IN_JIT_BASE_009_HELP=Not Displayed.
-
-DotNetCLR_Interop_OBJECT_009_NAME=.NET CLR Interop
-DotNetCLR_Interop_OBJECT_009_HELP=Stats for CLR interop.
-
-CURRENT_CCW_009_NAME=# of CCWs
-CURRENT_CCW_009_HELP=This counter displays the current number of Com-Callable-Wrappers (CCWs). A CCW is a proxy for the .NET managed object being referenced from unmanaged COM client(s). This counter was designed to indicate the number of managed objects being referenced by unmanaged COM code.
-
-CURRENT_STUBS_009_NAME=# of Stubs
-CURRENT_STUBS_009_HELP=This counter displays the current number of stubs created by the CLR. Stubs are responsible for marshalling arguments and return values from managed to unmanaged code and vice versa; during a COM Interop call or PInvoke call.
-
-NUM_MARSHALLING_009_NAME=# of marshalling
-NUM_MARSHALLING_009_HELP=This counter displays the total number of times arguments and return values have been marshaled from managed to unmanaged code and vice versa since the start of the application. This counter is not incremented if the stubs are inlined. (Stubs are responsible for marshalling arguments and return values). Stubs usually get inlined if the marshalling overhead is small.
-
-TOTAL_TLB_IMPORTS_009_NAME=# of TLB imports / sec
-TOTAL_TLB_IMPORTS_009_HELP=Reserved for future use.
-
-TOTAL_TLB_EXPORTS_009_NAME=# of TLB exports / sec
-TOTAL_TLB_EXPORTS_009_HELP=Reserved for future use.
-
-DotNetCLR_LocksAndThreads_OBJECT_009_NAME=.NET CLR LocksAndThreads
-DotNetCLR_LocksAndThreads_OBJECT_009_HELP=Stats for CLR Locks and Threads.
-
-CONTENTION_TOTAL_009_NAME=Total # of Contentions
-CONTENTION_TOTAL_009_HELP=This counter displays the total number of times threads in the CLR have attempted to acquire a managed lock unsuccessfully. Managed locks can be acquired in many ways; by the "lock" statement in C# or by calling System.Monitor.Enter or by using MethodImplOptions.Synchronized custom attribute.
-
-CONTENTION_INST_009_NAME=Contention Rate / sec
-CONTENTION_INST_009_HELP=Rate at which threads in the runtime attempt to acquire a managed lock unsuccessfully. Managed locks can be acquired in many ways; by the "lock" statement in C# or by calling System.Monitor.Enter or by using MethodImplOptions.Synchronized custom attribute.
-
-QUEUE_LENGTH_CUR_009_NAME=Current Queue Length
-QUEUE_LENGTH_CUR_009_HELP=This counter displays the total number of threads currently waiting to acquire some managed lock in the application. This counter is not an average over time; it displays the last observed value.
-
-QUEUE_LENGTH_TOTAL_009_NAME=Queue Length Peak
-QUEUE_LENGTH_TOTAL_009_HELP=This counter displays the total number of threads that waited to acquire some managed lock since the start of the application.
-
-QUEUE_LENGTH_INST_009_NAME=Queue Length / sec
-QUEUE_LENGTH_INST_009_HELP=This counter displays the number of threads per second waiting to acquire some lock in the application. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-CURRENT_LOGICAL_THREADS_009_NAME=# of current logical Threads
-CURRENT_LOGICAL_THREADS_009_HELP=This counter displays the number of current .NET thread objects in the application. A .NET thread object is created either by new System.Threading.Thread or when an unmanaged thread enters the managed environment. This counters maintains the count of both running and stopped threads. This counter is not an average over time; it just displays the last observed value.
-
-CURRENT_PHYSICAL_THREADS_009_NAME=# of current physical Threads
-CURRENT_PHYSICAL_THREADS_009_HELP=This counter displays the number of native OS threads created and owned by the CLR to act as underlying threads for .NET thread objects. This counters value does not include the threads used by the CLR in its internal operations; it is a subset of the threads in the OS process.
-
-RECOGNIZED_THREADS_CUR_009_NAME=# of current recognized threads
-RECOGNIZED_THREADS_CUR_009_HELP=This counter displays the number of threads that are currently recognized by the CLR; they have a corresponding .NET thread object associated with them. These threads are not created by the CLR; they are created outside the CLR but have since run inside the CLR at least once. Only unique threads are tracked; threads with same thread ID re-entering the CLR or recreated after thread exit are not counted twice.
-
-RECOGNIZED_THREADS_TOTAL_009_NAME=# of total recognized threads
-RECOGNIZED_THREADS_TOTAL_009_HELP=This counter displays the total number of threads that have been recognized by the CLR since the start of this application; these threads have a corresponding .NET thread object associated with them. These threads are not created by the CLR; they are created outside the CLR but have since run inside the CLR at least once. Only unique threads are tracked; threads with same thread ID re-entering the CLR or recreated after thread exit are not counted twice.
-
-RECOGNIZED_THREADS_INST_009_NAME=rate of recognized threads / sec
-RECOGNIZED_THREADS_INST_009_HELP=This counter displays the number of threads per second that have been recognized by the CLR; these threads have a corresponding .NET thread object associated with them. These threads are not created by the CLR; they are created outside the CLR but have since run inside the CLR at least once. Only unique threads are tracked; threads with same thread ID re-entering the CLR or recreated after thread exit are not counted twice. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-DotNetCLR_Security_OBJECT_009_NAME=.NET CLR Security
-DotNetCLR_Security_OBJECT_009_HELP=Stats for CLR Security.
-
-SECURITY_TOTALRTCHECKS_009_NAME=Total Runtime Checks
-SECURITY_TOTALRTCHECKS_009_HELP=This counter displays the total number of runtime Code Access Security (CAS) checks performed since the start of the application. Runtime CAS checks are performed when a caller makes a call to a callee demanding a particular permission; the runtime check is made on every call by the caller; the check is done by examining the current thread stack of the caller. This counter used together with "Stack Walk Depth" is indicative of performance penalty for security checks.
-
-SECURITY_TIMEAUTHORIZE_009_NAME=% Time Sig. Authenticating
-SECURITY_TIMEAUTHORIZE_009_HELP=Reserved for future use.
-
-SECURITY_LINKCHECKS_009_NAME=# Link Time Checks
-SECURITY_LINKCHECKS_009_HELP=This counter displays the total number of linktime Code Access Security (CAS) checks since the start of the application. Linktime CAS checks are performed when a caller makes a call to a callee demanding a particular permission at JIT compile time; linktime check is performed once per caller. This count is not indicative of serious performance issues; its indicative of the security system activity.
-
-SECURITY_TIMERTCHECKS_009_NAME=% Time in RT checks
-SECURITY_TIMERTCHECKS_009_HELP=This counter displays the percentage of elapsed time spent in performing runtime Code Access Security (CAS) checks since the last such check. CAS allows code to be trusted to varying degrees and enforces these varying levels of trust depending on code identity. This counter is updated at the end of a runtime security check; it represents the last observed value; its not an average.
-
-SECURITY_TIMERTCHECKS_BASE_009_NAME=Not Displayed
-SECURITY_TIMERTCHECKS_BASE_009_HELP=Not Displayed.
-
-SECURITY_DEPTHSECURITY_009_NAME=Stack Walk Depth
-SECURITY_DEPTHSECURITY_009_HELP=This counter displays the depth of the stack during that last runtime Code Access Security check. Runtime Code Access Security check is performed by crawling the stack. This counter is not an average; it just displays the last observed value.
-
-DotNetCLR_Remoting_OBJECT_009_NAME=.NET CLR Remoting
-DotNetCLR_Remoting_OBJECT_009_HELP=Stats for CLR Remoting.
-
-CONTEXT_REMOTECALLS_INST_009_NAME=Remote Calls/sec
-CONTEXT_REMOTECALLS_INST_009_HELP=This counter displays the number of remote procedure calls invoked per second. A remote procedure call is a call on any object outside the caller;s AppDomain. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-CONTEXT_CHANNELS_009_NAME=Channels
-CONTEXT_CHANNELS_009_HELP=This counter displays the total number of remoting channels registered across all AppDomains since the start of the application. Channels are used to transport messages to and from remote objects.
-
-CONTEXT_PROXIES_009_NAME=Context Proxies
-CONTEXT_PROXIES_009_HELP=This counter displays the total number of remoting proxy objects created in this process since the start of the process. Proxy object acts as a representative of the remote objects and ensures that all calls made on the proxy are forwarded to the correct remote object instance.
-
-CONTEXT_CLASSES_009_NAME=Context-Bound Classes Loaded
-CONTEXT_CLASSES_009_HELP=This counter displays the current number of context-bound classes loaded. Classes that can be bound to a context are called context-bound classes; context-bound classes are marked with Context Attributes which provide usage rules for synchronization; thread affinity; transactions etc.
-
-CONTEXT_OBJALLOC_009_NAME=Context-Bound Objects Alloc / sec
-CONTEXT_OBJALLOC_009_HELP=This counter displays the number of context-bound objects allocated per second. Instances of classes that can be bound to a context are called context-bound objects; context-bound classes are marked with Context Attributes which provide usage rules for synchronization; thread affinity; transactions etc. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-CONTEXT_CONTEXTS_009_NAME=Contexts
-CONTEXT_CONTEXTS_009_HELP=This counter displays the current number of remoting contexts in the application. A context is a boundary containing a collection of objects with the same usage rules like synchronization; thread affinity; transactions etc.
-
-CONTEXT_REMOTECALLS_TOTAL_009_NAME=Total Remote Calls
-CONTEXT_REMOTECALLS_TOTAL_009_HELP=This counter displays the total number of remote procedure calls invoked since the start of this application. A remote procedure call is a call on any object outside the caller;s AppDomain.
-
-DotNetCLR_Excep_OBJECT_009_NAME=.NET CLR Exceptions
-DotNetCLR_Excep_OBJECT_009_HELP=Runtime statistics on CLR exception handling.
-
-EXCEP_THROWN_TOTAL_009_NAME=# of Exceps Thrown
-EXCEP_THROWN_TOTAL_009_HELP=This counter displays the total number of exceptions thrown since the start of the application. These include both .NET exceptions and unmanaged exceptions that get converted into .NET exceptions e.g. null pointer reference exception in unmanaged code would get re-thrown in managed code as a .NET System.NullReferenceException; this counter includes both handled and unhandled exceptions. Exceptions that are re-thrown would get counted again. Exceptions should only occur in rare situations and not in the normal control flow of the program.
-
-EXCEP_THROWN_INST_009_NAME=# of Exceps Thrown / sec
-EXCEP_THROWN_INST_009_HELP=This counter displays the number of exceptions thrown per second. These include both .NET exceptions and unmanaged exceptions that get converted into .NET exceptions e.g. null pointer reference exception in unmanaged code would get re-thrown in managed code as a .NET System.NullReferenceException; this counter includes both handled and unhandled exceptions. Exceptions should only occur in rare situations and not in the normal control flow of the program; this counter was designed as an indicator of potential performance problems due to large (>100s) rate of exceptions thrown. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-TOTAL_EXCEP_FILTERS_RUN_009_NAME=# of Filters / sec
-TOTAL_EXCEP_FILTERS_RUN_009_HELP=This counter displays the number of .NET exception filters executed per second. An exception filter evaluates whether an exception should be handled or not. This counter tracks the rate of exception filters evaluated; irrespective of whether the exception was handled or not. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-TOTAL_EXCEP_FINALLYS_RUN_009_NAME=# of Finallys / sec
-TOTAL_EXCEP_FINALLYS_RUN_009_HELP=This counter displays the number of finally blocks executed per second. A finally block is guaranteed to be executed regardless of how the try block was exited. Only the finally blocks that are executed for an exception are counted; finally blocks on normal code paths are not counted by this counter. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-EXCEPT_STACK_DEPTH_009_NAME=Throw To Catch Depth / sec
-EXCEPT_STACK_DEPTH_009_HELP=This counter displays the number of stack frames traversed from the frame that threw the .NET exception to the frame that handled the exception per second. This counter resets to 0 when an exception handler is entered; so nested exceptions would show the handler to handler stack depth. This counter is not an average over time; it displays the difference between the values observed in the last two samples divided by the duration of the sample interval.
-
-DotNetCLR_Memory_OBJECT_011_NAME=.NET CLR Memory
-DotNetCLR_Memory_OBJECT_011_HELP=CLR ƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“ ƒq[ƒv‚̃JƒEƒ“ƒ^‚Å‚·B
-
-GEN0_COLLECTIONS_COUNTER_011_NAME=# Gen 0 Collections
-GEN0_COLLECTIONS_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆA¶¬ 0 ƒIƒuƒWƒFƒNƒg (ÅV‚ÌŠ„‚è“–‚Ăňê”ÔV‚µ‚¢) ‚ªAƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“ (Gen 0 GC) ‚³‚ꂽ‰ñ”‚ð•\Ž¦‚µ‚Ü‚·BGen 0 GC ‚ÍA¶¬ 0 ‚Ì—˜—p‰Â”\‚ȃƒ‚ƒŠ‚ªAŠ„‚è“–‚Ä—v‹‚ð\•ª–ž‚½‚¹‚È‚¢‚Æ‚«‚É”­¶‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í Gen 0 GC ‚ÌÅŒã‚ɃCƒ“ƒNƒŠƒƒ“ƒg‚³‚ê‚Ü‚·BV‚µ‚¢¶¬‚Ì GC ‚͌¢¶¬‚Ì GC ‚ð‚·‚×‚ÄŠÜ‚Ý‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍAV‚µ‚¢¶¬ (Gen 1 ‚Ü‚½‚Í Gen 2) ‚Ì GC ‚ª”­¶‚·‚é‚Æ‚«‚É–¾Ž¦“I‚ɃCƒ“ƒNƒŠƒƒ“ƒg‚³‚ê‚Ü‚·B_Global_ counter ‚Ì’l‚ͳŠm‚Å‚Í‚È‚¢‚Ì‚Å–³Ž‹‚·‚é‚ׂ«‚Å‚·B‚±‚̃JƒEƒ“ƒ^‚ÍÅV‚Ì’l‚ð•\Ž¦‚µ‚Ü‚·B
-
-GEN1_COLLECTIONS_COUNTER_011_NAME=# Gen 1 Collections
-GEN1_COLLECTIONS_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆA¶¬ 1 ƒIƒuƒWƒFƒNƒg‚ªAƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“‚³‚ꂽ‰ñ”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í Gen 1 GC ‚ÌÅŒã‚ɃCƒ“ƒNƒŠƒƒ“ƒg‚³‚ê‚Ü‚·BV‚µ‚¢¶¬‚Ì GC ‚͌¢¶¬‚Ì GC ‚ð‚·‚×‚ÄŠÜ‚Ý‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍAV‚µ‚¢¶¬ (Gen 2) ‚Ì GC ‚ª”­¶‚·‚é‚Æ‚«‚É–¾Ž¦“I‚ɃCƒ“ƒNƒŠƒƒ“ƒg‚³‚ê‚Ü‚·B_Global_ counter ‚Ì’l‚ͳŠm‚Å‚Í‚È‚¢‚Ì‚Å–³Ž‹‚·‚é‚ׂ«‚Å‚·B‚±‚̃JƒEƒ“ƒ^‚ÍÅV‚Ì’l‚ð•\Ž¦‚µ‚Ü‚·B
-
-GEN2_COLLECTIONS_COUNTER_011_NAME=# Gen 2 Collections
-GEN2_COLLECTIONS_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆA¶¬ 2 ƒIƒuƒWƒFƒNƒg (‚æ‚èŒÃ‚¢) ‚ªAƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“‚³‚ꂽ‰ñ”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í Gen 2 GC ‚ÌÅŒã‚ɃCƒ“ƒNƒŠƒƒ“ƒg‚³‚ê‚Ü‚· (ƒtƒ‹ GC ‚Æ‚àŒÄ‚΂ê‚Ü‚·)B_Global_ counter ‚Ì’l‚ͳŠm‚Å‚Í‚È‚¢‚Ì‚Å–³Ž‹‚·‚é‚ׂ«‚Å‚·B‚±‚̃JƒEƒ“ƒ^‚ÍÅŒã‚ÉŠÏŽ@‚³‚ꂽ’l‚ð•\Ž¦‚µ‚Ü‚·B
-
-GEN0_BYTES_PROMOTED_COUNTER_011_NAME=Promoted Memory from Gen 0
-GEN0_BYTES_PROMOTED_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“ (GC) ‚ð‘Ï‚¦”²‚¢‚ÄA¶¬ 0 ‚©‚綬 1 ‚ÉãˆÊ•ÏŠ·‚µ‚½ƒƒ‚ƒŠ‚̃oƒCƒg”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚É‚ÍA’P‚ÉŠ®—¹‚·‚é‚Ì‚ð‘҂‚½‚ß‚¾‚¯‚ÉãˆÊ•ÏŠ·‚µ‚½ƒIƒuƒWƒFƒNƒg‚ÍŠÜ‚Ý‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚ÍAÅŒã‚Ì GC ‚ÌÅŒã‚ÉŠÏŽ@‚³‚ꂽ’l‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚Í—ÝσJƒEƒ“ƒ^‚Å‚Í‚ ‚è‚Ü‚¹‚ñB
-
-GEN1_BYTES_PROMOTED_COUNTER_011_NAME=Promoted Memory from Gen 1
-GEN1_BYTES_PROMOTED_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“ (GC) ‚ð‘Ï‚¦”²‚¢‚ÄA¶¬ 1 ‚©‚綬 2 ‚ÉãˆÊ•ÏŠ·‚µ‚½ƒƒ‚ƒŠ‚̃oƒCƒg”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA’P‚ÉŠ®—¹‚·‚é‚Ì‚ð‘҂‚½‚ß‚¾‚¯‚ÉãˆÊ•ÏŠ·‚µ‚½ƒIƒuƒWƒFƒNƒg‚ÍŠÜ‚Ý‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚ÍÅŒã‚ÉŠÏŽ@‚³‚ꂽ’l‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚Í—ÝσJƒEƒ“ƒ^‚Å‚Í‚ ‚è‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚ÍAÅŒã‚Ì GC ‚ª Gen 0 GC ‚Ì‚Ý‚ÌꇂÍA0 ‚ɃŠƒZƒbƒg‚³‚ê‚Ü‚·B
-
-GEN0_PROMOTION_RATE_011_NAME=Gen 0 Promoted Bytes/Sec
-GEN0_PROMOTION_RATE_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA¶¬ 0 (ˆê”ÔV‚µ‚¢) ‚©‚綬 1 ‚ÉãˆÊ•ÏŠ·‚µ‚½ƒƒ‚ƒŠ‚Ì–ˆ•b‚̃oƒCƒg”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA’P‚ÉŠ®—¹‚·‚é‚Ì‚ð‘҂‚½‚ß‚¾‚¯‚ÉãˆÊ•ÏŠ·‚µ‚½ƒIƒuƒWƒFƒNƒg‚ÍŠÜ‚Ý‚Ü‚¹‚ñBƒƒ‚ƒŠ‚ÍAƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“‚ð‘Ï‚¦”²‚­‚ÆãˆÊ•ÏŠ·‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA–ˆ•b쬂³‚ê‚é”äŠr“I‚É’·‘±‚«‚·‚éƒIƒuƒWƒFƒNƒg‚ÉŠÖ‚·‚éƒCƒ“ƒfƒBƒP[ƒ^‚Æ‚µ‚ăfƒUƒCƒ“‚³‚ê‚Ü‚µ‚½B‚±‚̃JƒEƒ“ƒ^‚ÍAƒTƒ“ƒvƒ‹‚ÌŽžŠÔŠÔŠu‚Å•ª‚¯‚ç‚ꂽAÅŒã‚Ì 2 ‚ ‚̃Tƒ“ƒvƒ‹ŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ•\Ž¦‚µ‚Ü‚·B
-
-GEN1_PROMOTION_RATE_011_NAME=Gen 1 Promoted Bytes/Sec
-GEN1_PROMOTION_RATE_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA¶¬ 1 ‚©‚綬 2 (ˆê”Ԍ¢) ‚Éi‚ñ‚¾ƒƒ‚ƒŠ‚Ì–ˆ•b‚̃oƒCƒg”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA’P‚ÉŠ®—¹‚·‚é‚Ì‚ð‘҂‚½‚ß‚¾‚¯‚ÉãˆÊ•ÏŠ·‚µ‚½ƒIƒuƒWƒFƒNƒg‚ÍŠÜ‚Ý‚Ü‚¹‚ñBƒƒ‚ƒŠ‚ÍAƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“‚ð‘Ï‚¦”²‚­‚ÆãˆÊ•ÏŠ·‚µ‚Ü‚·B¶¬ 2 ‚͈ê”Ԍ¢‚½‚ßA‚±‚ÌŽŸ‚Í‚ ‚è‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚ÍA–ˆ•b쬂³‚ê‚é”ñí‚É’·‘±‚«‚·‚éƒIƒuƒWƒFƒNƒg‚ÉŠÖ‚·‚éƒCƒ“ƒfƒBƒP[ƒ^‚Æ‚µ‚ăfƒUƒCƒ“‚³‚ê‚Ü‚µ‚½B‚±‚̃JƒEƒ“ƒ^‚ÍAƒTƒ“ƒvƒ‹‚ÌŽžŠÔŠÔŠu‚Å•ª‚¯‚ç‚ꂽAÅŒã‚Ì 2 ‚ ‚̃Tƒ“ƒvƒ‹ŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ•\Ž¦‚µ‚Ü‚·B
-
-GEN0_FINALIZATION_BYTES_PROMOTED_COUNTER_011_NAME=Promoted Finalization-Memory from Gen 0
-GEN0_FINALIZATION_BYTES_PROMOTED_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA’P‚ÉŠ®—¹‚·‚é‚Ì‚ð‘҂‚½‚ß‚¾‚¯‚ɶ¬ 0 ‚©‚綬 1 ‚ÉãˆÊ•ÏŠ·‚µ‚½ƒƒ‚ƒŠ‚Ì–ˆ•b‚̃oƒCƒg”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍAÅŒã‚Ì GC ‚ÌÅŒã‚ÉŠÏŽ@‚³‚ꂽ’l‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚Í—ÝσJƒEƒ“ƒ^‚Å‚Í‚ ‚è‚Ü‚¹‚ñB
-
-GEN1_FINALIZATION_BYTES_PROMOTED_COUNTER_011_NAME=Promoted Finalization-Memory from Gen 1
-GEN1_FINALIZATION_BYTES_PROMOTED_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA’P‚ÉŠ®—¹‚·‚é‚Ì‚ð‘҂‚½‚ß‚¾‚¯‚ɶ¬ 1 ‚©‚綬 2 ‚ÉãˆÊ•ÏŠ·‚µ‚½ƒƒ‚ƒŠ‚Ì–ˆ•b‚̃oƒCƒg”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍAÅŒã‚Ì GC ‚ÌÅŒã‚ÉŠÏŽ@‚³‚ꂽ’l‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚Í—ÝσJƒEƒ“ƒ^‚Å‚Í‚ ‚è‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚ÍAÅŒã‚Ì GC ‚ª Gen 0 GC ‚Ì‚Ý‚ÌꇂÍA0 ‚ɃŠƒZƒbƒg‚³‚ê‚Ü‚·B
-
-GEN0_HEAP_SIZE_COUNTER_011_NAME=Gen 0 heap size
-GEN0_HEAP_SIZE_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA¶¬ 0 (Gen 0) ‚ÉŠ„‚è“–‚Ä‚ç‚ê‚éÅ‘å‚̃oƒCƒg”‚ð•\Ž¦‚µ‚Ü‚·B¶¬ 0 ‚ÉŠ„‚è“–‚Ä‚ç‚ꂽŒ»Ý‚̃oƒCƒg”‚ÍŽ¦‚µ‚Ü‚¹‚ñBGen 0 GC ‚ÍAÅŒã‚Ì GC ˆÈ—ˆAŠ„‚è“–‚Ä‚ª‚±‚̃TƒCƒY‚ð’´‚¦‚é‚Æ”­¶‚µ‚Ü‚·BGen 0 ƒTƒCƒY‚̓Kƒx[ƒW ƒRƒŒƒNƒ^‚É‚æ‚Á‚Ä’²®‚³‚êAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŽÀs’†‚É•ÏX‚µ‚Ü‚·BGen 0 ƒRƒŒƒNƒVƒ‡ƒ“‚ÌÅŒã‚É Gen 0 ƒq[ƒv‚̃TƒCƒY‚ÍŽÀÛ‚É 0 ƒoƒCƒg‚Å‚·B‚±‚̃JƒEƒ“ƒ^‚ÍAŽŸ‚Ì Gen 0 GC ‚ð”­¶‚³‚¹‚銄‚è“–‚ẴTƒCƒY‚ðƒoƒCƒg‚Å•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í GC ‚ÌÅŒã‚ÉXV‚³‚ê‚Ü‚·BŠ„‚è“–‚Ä‚²‚Æ‚É‚ÍXV‚³‚ê‚Ü‚¹‚ñB
-
-GEN1_HEAP_SIZE_COUNTER_011_NAME=Gen 1 heap size
-GEN1_HEAP_SIZE_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA¶¬ 1 (Gen 1) ‚ÌŒ»Ý‚̃oƒCƒg”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Å‚Í Gen 1 ‚ÌÅ‘åƒTƒCƒY‚ð•\Ž¦‚µ‚Ü‚¹‚ñBƒIƒuƒWƒFƒNƒg‚Í‚±‚̶¬‚Å‚Í’¼ÚŠ„‚è“–‚Ä‚ç‚ê‚Ü‚¹‚ñBƒIƒuƒWƒFƒNƒg‚Í‘O‚Ì Gen 0 GC ‚©‚çãˆÊ•ÏŠ·‚³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í GC ‚ÌÅŒã‚ÉXV‚³‚ê‚Ü‚·BŠ„‚è“–‚Ä‚²‚Æ‚É‚ÍXV‚³‚ê‚Ü‚¹‚ñB
-
-GEN2_HEAP_SIZE_COUNTER_011_NAME=Gen 2 heap size
-GEN2_HEAP_SIZE_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA¶¬ 2 (Gen 2) ‚ÌŒ»Ý‚̃oƒCƒg”‚ð•\Ž¦‚µ‚Ü‚·BƒIƒuƒWƒFƒNƒg‚Í‚±‚̶¬‚Å‚Í’¼ÚŠ„‚è“–‚Ä‚ç‚ê‚Ü‚¹‚ñBƒIƒuƒWƒFƒNƒg‚Í‘O‚Ì Gen 1 GC ’†‚É Gen 1 ‚©‚çãˆÊ•ÏŠ·‚³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í GC ‚ÌÅŒã‚ÉXV‚³‚ê‚Ü‚·BŠ„‚è“–‚Ä‚²‚Æ‚É‚ÍXV‚³‚ê‚Ü‚¹‚ñB
-
-LARGE_OBJECT_SIZE_COUNTER_011_NAME=Large Object Heap size
-LARGE_OBJECT_SIZE_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍALarge Object Heap ‚ÌŒ»Ý‚̃TƒCƒY‚ðƒoƒCƒg”‚Å•\Ž¦‚µ‚Ü‚·B20 KBytes ‚æ‚è‘å‚«‚¢ƒIƒuƒWƒFƒNƒg‚Í Garbage Collector ‚É‚æ‚Á‚Ä large ƒIƒuƒWƒFƒNƒg‚Æ‚µ‚Ĉµ‚í‚êA“Á•Ê‚ȃq[ƒv“à‚Å’¼ÚŠ„‚è“–‚Ä‚ç‚ê‚Ü‚·B‚±‚ê‚ç‚Ͷ¬‚É‚æ‚Á‚ÄãˆÊ•ÏŠ·‚µ‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚Í GC ‚ÌÅŒã‚ÉXV‚³‚ê‚Ü‚·BŠ„‚è“–‚Ä‚²‚Æ‚É‚ÍXV‚³‚ê‚Ü‚¹‚ñB
-
-SURVIVE_FINALIZE_COUNTER_011_NAME=Finalization Survivors
-SURVIVE_FINALIZE_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAŠ®—¹‚·‚é‚Ì‚ð‘҂‚½‚ß‚ÉAƒKƒx[ƒW ƒRƒŒƒNƒg‚ð‘Ï‚¦”²‚¢‚ăRƒŒƒNƒg‚³‚ꂽƒIƒuƒWƒFƒNƒg‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚ç‚̃IƒuƒWƒFƒNƒg‚ª‘¼‚̃IƒuƒWƒFƒNƒg‚Ö‚ÌŽQÆ‚ðŽ‚Á‚Ä‚¢‚é‚È‚ç‚ÎA‚»‚ê‚ç‚̃IƒuƒWƒFƒNƒg‚à“¯—l‚É‘Ï‚¦”²‚«‚Ü‚·‚ªA‚±‚̃JƒEƒ“ƒ^‚ł̓JƒEƒ“ƒg‚³‚ê‚Ü‚¹‚ñB"Promoted Finalization-Memory from Gen 0" ‚¨‚æ‚Ñ "Promoted Finalization-Memory from Gen 1" ƒJƒEƒ“ƒ^‚ÍAŠ®—¹‚·‚邽‚ß‚É‘Ï‚¦‚Ê‚¢‚½‚·‚ׂăƒ‚ƒŠ‚ð•\‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í—ÝσJƒEƒ“ƒ^‚Å‚Í‚ ‚è‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚ÍA‚±‚Ì“Á’è‚Ì GC ŠÔ‚ɶ‚«Žc‚Á‚½ƒJƒEƒ“ƒg”‚¾‚¯‚ðŽg‚Á‚Ä GC ‚ÌÅŒã‚ÉXV‚³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍAŠ®—¹‚·‚邽‚߂ɃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ª‚±‚¤‚Þ‚é’ljÁ‚̃I[ƒo[ƒwƒbƒh‚ðŽ¦‚·‚悤ƒfƒUƒCƒ“‚³‚ê‚Ü‚µ‚½B
-
-NUM_HANDLES_COUNTER_011_NAME=# GC Handles
-NUM_HANDLES_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍŒ»ÝŽg—p‚³‚ê‚Ä‚¢‚é GC ƒnƒ“ƒhƒ‹‚Ì”Žš‚ð•\Ž¦‚µ‚Ü‚·B GCHandles ‚Í LR ‚ÌŠO•”‚ƃ}ƒl[ƒWŠÂ‹«‚̃Šƒ\[ƒX‚ւ̃nƒ“ƒhƒ‹‚Å‚·Bƒnƒ“ƒhƒ‹‚Í GCHeap ‚É­—ʂ̃ƒ‚ƒŠ‚ð•ÛŽ‚µ‚Ü‚·‚ªA”ï—p‚ÌŠ|‚©‚éƒAƒ“ƒ}ƒl[ƒW ƒŠƒ\[ƒX‚É‚È‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B
-
-ALLOCATION_RATE_COUNTER_011_NAME=Allocated Bytes/sec
-ALLOCATION_RATE_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í GC ƒq[ƒv‚ÉŠ„‚è“–‚Ä‚ç‚ꂽ–ˆ•b‚̃oƒCƒg—¦‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍŠ„‚è“–‚Ä‚²‚Æ‚Å‚Í‚È‚­AŠe GC ‚ÌI—¹‚²‚Æ‚ÉXV‚³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-INDUCED_GC_COUNTER_011_NAME=# Induced GC
-INDUCED_GC_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í GC.Collect ‚Ö‚Ì–¾Ž¦“I‚ȌĂÑo‚µ‚Ì‚½‚߂ɃKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“‚ªs‚í‚ꂽőå‚̉ñ”‚ð•\Ž¦‚µ‚Ü‚·BGC ‚ÌŽü”g”‚ðƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“‚ɇ‚킹‚Ä‚¨‚­‚Ì‚à‚æ‚¢•û–@‚Å‚·B
-
-PER_TIME_IN_GC_COUNTER_011_NAME=% Time in GC
-PER_TIME_IN_GC_COUNTER_011_HELP=GC ‚Ì % Time ‚ÍAÅŒã‚Ì GC ƒTƒCƒNƒ‹ˆÈ—ˆAƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“ (GC) ‚ðs‚¤‚½‚ß‚ÉŒo‰ß‚µ‚½ŽžŠÔ‚̃p[ƒZƒ“ƒe[ƒW‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA’ÊíAƒKƒx[ƒW ƒRƒŒƒNƒVƒ‡ƒ“‚ªAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì‘ã‚í‚è‚Ƀƒ‚ƒŠ‚ðŽûW‚µ‚ăRƒ“ƒpƒNƒg‰»‚ðs‚Á‚½‚Æ‚¢‚¤ƒCƒ“ƒWƒP[ƒ^‚Å‚·B‚±‚̃JƒEƒ“ƒ^‚Í–ˆ‰ñ‚Ì GC ‚ÌÅŒã‚É‚Ì‚ÝXV‚³‚ê‚Ü‚·BƒJƒEƒ“ƒ^‚Ì’l‚Í•½‹Ï’l‚Å‚Í‚È‚­AÅŒã‚ÉŠÏŽ@‚µ‚½’l‚𔽉f‚µ‚Ü‚·B
-
-PER_TIME_IN_GC_COUNTER_BASE_011_NAME=Not Displayed
-PER_TIME_IN_GC_COUNTER_BASE_011_HELP=•\Ž¦‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB
-
-TOTAL_HEAP_SIZE_COUNTER_011_NAME=# Bytes in all Heaps
-TOTAL_HEAP_SIZE_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍŽŸ‚Ì 4 ‚‚̃JƒEƒ“ƒ^‚̇Œv‚Å‚·BGen 0 ƒq[ƒv ƒTƒCƒYAGen 1 ƒq[ƒv ƒTƒCƒYAGen 2 ƒq[ƒv ƒTƒCƒY ‚¨‚æ‚Ñ‘å‚«‚¢ƒIƒuƒWƒFƒNƒg‚̃q[ƒv ƒTƒCƒYB‚±‚̃JƒEƒ“ƒ^‚Í GC ƒq[ƒv‚ÉŠ„‚è“–‚Ä‚ç‚ꂽŒ»Ý‚̃oƒCƒg”‚ðŽ¦‚µ‚Ü‚·B
-
-TOTAL_COMMITTED_MEM_COUNTER_011_NAME=# Total committed Bytes
-TOTAL_COMMITTED_MEM_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAŒ»ÝƒKƒx[ƒW ƒRƒŒƒNƒ^‚É‚æ‚Á‚ăRƒ~ƒbƒg‚³‚ê‚Ä‚¢‚鉼‘zƒƒ‚ƒŠ‚ðƒoƒCƒg”‚Å•\Ž¦‚µ‚Ü‚·B (ƒRƒ~ƒbƒg ƒƒ‚ƒŠ‚ÍAƒfƒBƒXƒN‚̃y[ƒWƒ“ƒO ƒtƒ@ƒCƒ‹‚ɃXƒy[ƒX‚ª—\–ñ‚³‚ê‚Ä‚¢‚镨—“I‚ȃƒ‚ƒŠ‚Å‚·)B
-
-TOTAL_RESERVED_MEM_COUNTER_011_NAME=# Total reserved Bytes
-TOTAL_RESERVED_MEM_COUNTER_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAŒ»ÝƒKƒx[ƒW ƒRƒŒƒNƒ^‚É‚æ‚Á‚ăRƒ~ƒbƒg‚³‚ê‚Ä‚¢‚鉼‘zƒƒ‚ƒŠ‚ðƒoƒCƒg”‚Å•\Ž¦‚µ‚Ü‚·B(—\–ñ‚³‚ꂽƒƒ‚ƒŠ‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“‚É—\–ñ‚³‚ꂽ‰¼‘zƒƒ‚ƒŠ ƒXƒy[ƒX‚ÅAƒfƒBƒXƒNA‚Ü‚½‚̓ƒCƒ“ ƒƒ‚ƒŠ ƒy[ƒW‚͉½‚àŽg—p‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ)B
-
-GC_PINNED_OBJECTS_011_NAME=# of Pinned Objects
-GC_PINNED_OBJECTS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍÅŒã‚Ì GC ‚ÅŒ©‚‚©‚Á‚½ƒsƒ“Ž~‚߃IƒuƒWƒFƒNƒg‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚̓Kƒx[ƒW ƒRƒŒƒNƒg‚³‚ꂽƒq[ƒv‚Ì’†‚̃sƒ“Ž~‚߃IƒuƒWƒFƒNƒg‚Ìî•ñ‚Ì‚Ý‚ð‹L˜^‚µ‚Ü‚·B‚½‚Æ‚¦‚Î Gen 0 GC ‚ÍA¶¬ 0 ƒq[ƒv“à‚ł̂݃sƒ“Ž~‚߃IƒuƒWƒFƒNƒg‚Ì—ñ‹“‚𶂶‚Ü‚·BƒKƒx[ƒW ƒRƒŒƒNƒ^‚ÍAƒsƒ“Ž~‚߃IƒuƒWƒFƒNƒg‚ðƒƒ‚ƒŠ“à‚ňړ®‚·‚邱‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB
-
-GC_SINKBLOCKS_011_NAME=# of Sink Blocks in use
-GC_SINKBLOCKS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍŒ»ÝŽg—p‚³‚ê‚Ä‚¢‚é Sync ƒuƒƒbƒN”‚ð•\Ž¦‚µ‚Ü‚·BSync ƒuƒƒbƒN‚ÍAƒXƒgƒŒ[ƒW‚Ì“¯Šúî•ñ‚É‚½‚ß‚ÉŠ„‚è“–‚Ä‚ç‚ꂽƒIƒuƒWƒFƒNƒg‚²‚Ƃ̃f[ƒ^\‘¢‚Å‚·BSync ƒuƒƒbƒN‚̓}ƒl[ƒW ƒIƒuƒWƒFƒNƒg‚ÉŽã‚¢ŽQÆ‚ð•ÛŽ‚µAƒKƒx[ƒW ƒRƒŒƒNƒ^‚É‚æ‚Á‚ăXƒLƒƒƒ“‚³‚ê‚é•K—v‚ª‚ ‚è‚Ü‚·BSync ƒuƒƒbƒN‚Í“¯Šúî•ñ‚ð•Û‘¶‚·‚邾‚¯‚ÉŒÀ‚炸ACOM ‘ŠŒÝ‰^—p‹@”\ƒƒ^ƒf[ƒ^‚à•Û‘¶‚Å‚«‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA“¯ŠúƒvƒŠƒ~ƒeƒBƒu‚ð•p”É‚ÉŽg—p‚·‚邱‚Æ‚É‚æ‚Á‚Ķ‚¶‚é–â‘è‚ðŽw“E‚·‚é‚悤‚ɃfƒUƒCƒ“‚³‚ê‚Ü‚µ‚½B
-
-DotNetCLR_Loading_OBJECT_011_NAME=.NET CLR Loading
-DotNetCLR_Loading_OBJECT_011_HELP=CLR ƒNƒ‰ƒX ƒ[ƒ_[‚Ì“Œv
-
-LOADING_CLASSES_TOTAL_011_NAME=Total Classes Loaded
-LOADING_CLASSES_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆA‚·‚ׂẴAƒZƒ“ƒuƒŠ‚É“Ç‚Ýž‚܂ꂽƒNƒ‰ƒX‚Ì—ÝÏ”‚ð•\Ž¦‚µ‚Ü‚·B
-
-LOADING_TIME_011_NAME=% Time Loading
-LOADING_TIME_011_HELP=«—ˆ—˜—p‚·‚邽‚ß‚É—\–ñ‚³‚ê‚Ä‚¢‚Ü‚·B
-
-LOADING_ASMSEARCHLEN_011_NAME=Assembly Search Length
-LOADING_ASMSEARCHLEN_011_HELP=«—ˆ—˜—p‚·‚邽‚ß‚É—\–ñ‚³‚ê‚Ä‚¢‚Ü‚·B
-
-LOADING_LOADFAILURES_TOTAL_011_NAME=Total # of Load Failures
-LOADING_LOADFAILURES_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆA“Ç‚Ýž‚Ý‚Å‚«‚È‚©‚Á‚½ƒNƒ‰ƒX‚Ìő唂ð•\Ž¦‚µ‚Ü‚·B“Ç‚Ýž‚Ý‚ÉŽ¸”s‚µ‚½——R‚ÍA\•ª‚ȃZƒLƒ…ƒŠƒeƒBA‚Ü‚½‚ÍŠÔˆá‚Á‚½ƒtƒH[ƒ}ƒbƒg‚Æ‚©A‚¢‚ë‚¢‚ël‚¦‚ç‚ê‚Ü‚·BÚׂɂ‚¢‚Ä‚ÍAƒvƒƒtƒ@ƒCƒ‹ ƒT[ƒrƒX‚̃wƒ‹ƒv‚ÅŽQÆ‚Å‚µ‚Ä‚­‚¾‚³‚¢B
-
-LOADING_LOADFAILURES_INST_011_NAME=Rate of Load Failures
-LOADING_LOADFAILURES_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í“Ç‚Ýž‚Ý‚Å‚«‚È‚©‚Á‚½ƒNƒ‰ƒX‚Ì–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B“Ç‚Ýž‚Ý‚ÉŽ¸”s‚µ‚½——R‚ÍA\•ª‚ȃZƒLƒ…ƒŠƒeƒBA‚Ü‚½‚ÍŠÔˆá‚Á‚½ƒtƒH[ƒ}ƒbƒg‚Æ‚©A‚¢‚ë‚¢‚ël‚¦‚ç‚ê‚Ü‚·BÚׂɂ‚¢‚Ä‚ÍAƒvƒƒtƒ@ƒCƒ‹ ƒT[ƒrƒX‚̃wƒ‹ƒv‚ÅŽQÆ‚Å‚µ‚Ä‚­‚¾‚³‚¢B
-
-LOADING_HEAPSIZE_011_NAME=Bytes in Loader Heap
-LOADING_HEAPSIZE_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAŒ»ÝA‚·‚×‚Ä‚Ì AppDomains ‚ŃNƒ‰ƒX ƒ[ƒ_[‚É‚æ‚Á‚ăRƒ~ƒbƒg‚³‚ê‚Ä‚¢‚郃‚ƒŠ‚ðƒoƒCƒg”‚Å•\Ž¦‚µ‚Ü‚·B (ƒRƒ~ƒbƒg ƒƒ‚ƒŠ‚ÍAƒfƒBƒXƒN‚̃y[ƒWƒ“ƒO ƒtƒ@ƒCƒ‹‚ɃXƒy[ƒX‚ª—\–ñ‚³‚ê‚Ä‚¢‚镨—“I‚ȃƒ‚ƒŠ‚Å‚·)B
-
-LOADING_APPDOMAINS_UNLOADED_TOTAL_011_NAME=Total appdomains unloaded
-LOADING_APPDOMAINS_UNLOADED_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆAƒAƒ“ƒ[ƒh‚³‚ꂽ AppDomains ‚̇Œv”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍAAppDomain ‚ª“Ç‚Ýž‚Ü‚êA‚»‚µ‚Ä•¡”‰ñƒAƒ“ƒ[ƒh‚³‚ꂽꇂÍAŠeƒAƒ“ƒ[ƒh‚ð•ÊX‚ɃJƒEƒ“ƒg‚µ‚Ü‚·B
-
-LOADING_APPDOMAINS_UNLOADED_INST_011_NAME=Rate of appdomains unloaded
-LOADING_APPDOMAINS_UNLOADED_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒ“ƒ[ƒh‚³‚ꂽ AppDomains ‚Ì–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦ ‚µ‚Ü‚·B
-
-LOADING_CLASSES_CUR_011_NAME=Current Classes Loaded
-LOADING_CLASSES_CUR_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í‚·‚ׂẴAƒZƒ“ƒuƒŠ‚É“Ç‚Ýž‚܂ꂽŒ»Ý‚̃Nƒ‰ƒX”‚ð•\Ž¦‚µ‚Ü‚·B
-
-LOADING_CLASSES_INST_011_NAME=Rate of Classes Loaded
-LOADING_CLASSES_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í‚·‚ׂẴAƒZƒ“ƒuƒŠ‚É“Ç‚Ýž‚܂ꂽƒNƒ‰ƒX‚Ì–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-LOADING_APPDOMAINS_CUR_011_NAME=Current appdomains
-LOADING_APPDOMAINS_CUR_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚É“Ç‚Ýž‚܂ꂽŒ»Ý‚Ì AppDomains ”‚ð•\Ž¦‚µ‚Ü‚·BAppDomains (ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ ƒhƒƒCƒ“) ‚͈À‘S‚Å‘½—p“r‚̃vƒƒZƒX ƒ†ƒjƒbƒg‚ð’ñ‹Ÿ‚µ‚Ü‚·BCLR ‚Í‚±‚ê‚ðŽg—p‚µ‚ÄA“¯‚¶ƒvƒƒZƒX“à‚ÅŽÀs‚³‚ê‚Ä‚¢‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŠÔ‚Ì•ª—£‚ð’ñ‹Ÿ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
-
-LOADING_APPDOMAINS_TOTAL_011_NAME=Total Appdomains
-LOADING_APPDOMAINS_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆA“Ç‚Ýž‚܂ꂽőå‚Ì AppDomains ”‚ð•\Ž¦‚µ‚Ü‚·BAppDomains (ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ ƒhƒƒCƒ“) ‚͈À‘S‚Å‘½—p“r‚̃vƒƒZƒX ƒ†ƒjƒbƒg‚ð’ñ‹Ÿ‚µ‚Ü‚·BCLR ‚Í‚±‚ê‚ðŽg—p‚µ‚ÄA“¯‚¶ƒvƒƒZƒX“à‚ÅŽÀs‚³‚ê‚Ä‚¢‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŠÔ‚Ì•ª—£‚ð’ñ‹Ÿ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
-
-LOADING_APPDOMAINS_INST_011_NAME=Rate of appdomains
-LOADING_APPDOMAINS_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í “Ç‚Ýž‚܂ꂽ AppDomains ‚Ì–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·BAppDomains (ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ ƒhƒƒCƒ“) ‚͈À‘S‚Å‘½—p“r‚̃vƒƒZƒX ƒ†ƒjƒbƒg‚ð’ñ‹Ÿ‚µ‚Ü‚·BCLR ‚Í‚±‚ê‚ðŽg—p‚µ‚ÄA“¯‚¶ƒvƒƒZƒX“à‚ÅŽÀs‚³‚ê‚Ä‚¢‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŠÔ‚Ì•ª—£‚ð’ñ‹Ÿ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-LOADING_ASSEMBLIES_CUR_011_NAME=Current Assemblies
-LOADING_ASSEMBLIES_CUR_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì‚·‚×‚Ä‚Ì AppDomains ‚Å“Ç‚Ýž‚܂ꂽƒAƒZƒ“ƒuƒŠ‚ÌŒ»Ý‚Ì”‚ð•\Ž¦‚µ‚Ü‚·BƒAƒZƒ“ƒuƒŠ‚ª•¡”‚Ì AppDomains ‚©‚çƒhƒƒCƒ“’†—§‚Å“Ç‚Ýž‚܂ꂽꇂÍA‚±‚̃JƒEƒ“ƒ^‚Í 1 “x‚¾‚¯ƒCƒ“ƒNƒŠƒƒ“ƒg‚³‚ê‚Ü‚·BƒAƒZƒ“ƒuƒŠ‚ÍAƒR[ƒh‚ª‚·‚×‚Ä‚Ì AppDomains ‚Å‹¤—L‚Å‚«‚éꇂÍAƒhƒƒCƒ“’†—§‚Å“Ç‚Ýž‚Ü‚ê‚Ü‚·B‚Ü‚½‚ÍAƒR[ƒh‚ª AppDomain ‚Ƀvƒ‰ƒCƒx[ƒg‚Å‚ ‚é‚Æ‚«‚ÍAƒhƒƒCƒ“ŒÅ—L‚Æ‚µ‚Ä“Ç‚Ýž‚Ü‚ê‚Ü‚·B
-
-LOADING_ASSEMBLIES_TOTAL_011_NAME=Total Assemblies
-LOADING_ASSEMBLIES_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚Ĉȗˆ“Ç‚Ýž‚܂ꂽ‡Œv‚̃AƒZƒ“ƒuƒŠ”‚ð•\Ž¦‚µ‚Ü‚·BƒAƒZƒ“ƒuƒŠ‚ª•¡”‚Ì AppDomains ‚©‚çƒhƒƒCƒ“’†—§‚Å“Ç‚Ýž‚܂ꂽꇂÍA‚±‚̃JƒEƒ“ƒ^‚Í 1 “x‚¾‚¯ƒCƒ“ƒNƒŠƒƒ“ƒg‚³‚ê‚Ü‚·BƒAƒZƒ“ƒuƒŠ‚ÍAƒR[ƒh‚ª‚·‚×‚Ä‚Ì AppDomains ‚Å‹¤—L‚Å‚«‚éꇂÍAƒhƒƒCƒ“’†—§‚Å“Ç‚Ýž‚Ü‚ê‚Ü‚·B‚Ü‚½‚ÍAƒR[ƒh‚ª AppDomain ‚Ƀvƒ‰ƒCƒx[ƒg‚Å‚ ‚é‚Æ‚«‚ÍAƒhƒƒCƒ“ŒÅ—L‚Æ‚µ‚Ä“Ç‚Ýž‚Ü‚ê‚Ü‚·B
-
-LOADING_ASSEMBLIES_INST_011_NAME=Rate of Assemblies
-LOADING_ASSEMBLIES_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA‚·‚×‚Ä‚Ì AppDomains ‚Å“Ç‚Ýž‚܂ꂽƒAƒZƒ“ƒuƒŠ‚Ì–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·BƒAƒZƒ“ƒuƒŠ‚ª•¡”‚Ì AppDomains ‚©‚çƒhƒƒCƒ“’†—§‚Å“Ç‚Ýž‚܂ꂽꇂÍA‚±‚̃JƒEƒ“ƒ^‚Í 1 “x‚¾‚¯ƒCƒ“ƒNƒŠƒƒ“ƒg‚³‚ê‚Ü‚·BƒAƒZƒ“ƒuƒŠ‚ÍAƒR[ƒh‚ª‚·‚×‚Ä‚Ì AppDomains ‚Å‹¤—L‚Å‚«‚éꇂÍAƒhƒƒCƒ“’†—§‚Å“Ç‚Ýž‚Ü‚ê‚Ü‚·B‚Ü‚½‚ÍAƒR[ƒh‚ª AppDomain ‚Ƀvƒ‰ƒCƒx[ƒg‚Å‚ ‚é‚Æ‚«‚ÍAƒhƒƒCƒ“ŒÅ—L‚Æ‚µ‚Ä“Ç‚Ýž‚Ü‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-DotNetCLR_Jit_OBJECT_011_NAME=.NET CLR Jit
-DotNetCLR_Jit_OBJECT_011_HELP=CLR Jit ‚Ì“Œv‚Å‚·B
-
-TOTAL_METHODS_JITTED_011_NAME=# of Methods Jitted
-TOTAL_METHODS_JITTED_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚Ĉȗˆ CLR JIT ƒRƒ“ƒpƒCƒ‰‚É‚æ‚Á‚Ä Just-In-Time (JIT) ‚ɃRƒ“ƒpƒCƒ‹‚³‚ꂽƒƒ\ƒbƒh‚̇Œv”‚ð•\Ž¦‚µ‚Ü‚·B
-
-JITTED_IL_CUR_011_NAME=# of IL Bytes Jitted
-JITTED_IL_CUR_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚Ä‚©‚çŽg—p‚³‚ꂽ‡Œv‚Ì IL ƒoƒCƒg‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA "Total # of IL Bytes Jitted" ƒJƒEƒ“ƒ^‚Æ‚Ü‚Á‚½‚­“¯’l‚Å‚·B
-
-JITTED_IL_TOTAL_011_NAME=Total # of IL Bytes Jitted
-JITTED_IL_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚Ä‚©‚çŽg—p‚³‚ꂽ‡Œv‚Ì IL ƒoƒCƒg‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA "# of IL Bytes Jitted" ƒJƒEƒ“ƒ^‚ÆŠ®‘S‚É“¯’l‚Å‚·B
-
-JITTED_IL_INST_011_NAME=IL Bytes Jitted / sec
-JITTED_IL_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAŽg—p‚³‚ꂽ IL ƒoƒCƒg‚Ì–ˆ•b‚ÌŠ„‡‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-JIT_FAILURES_011_NAME=Standard Jit Failures
-JIT_FAILURES_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚Ĉȗˆ JIT ƒRƒ“ƒpƒCƒ‰‚ª JIT ‚ÉŽ¸”s‚µ‚½Å‘å‚̃ƒ\ƒbƒh”‚ð•\Ž¦‚µ‚Ü‚·BŽ¸”s‚Í IL ‚ðŒŸØ‚Å‚«‚È‚©‚Á‚½ê‡A‚Ü‚½‚Í JIT ƒRƒ“ƒpƒCƒ‰‚É“à•”ƒGƒ‰[‚ª¶‚¶‚½ê‡‚É”­¶‚µ‚Ü‚·B
-
-TIME_IN_JIT_011_NAME=% Time in Jit
-TIME_IN_JIT_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAÅŒã‚Ì JIT ƒRƒ“ƒpƒCƒ‹‚Ì’iŠKˆÈ—ˆA JIT ƒRƒ“ƒpƒCƒ‰‚ðs‚¤‚½‚ß‚ÉŒo‰ß‚µ‚½ŽžŠÔ‚̃p[ƒZƒ“ƒe[ƒW‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA–ˆ‰ñ‚Ì JIT ƒRƒ“ƒpƒCƒ‹‚Ì’iŠK‚ÌÅŒã‚ÉXV‚³‚ê‚Ü‚·BƒJƒEƒ“ƒ^‚Ì’l‚ÍA•½‹Ï’l‚Å‚Í‚È‚­AÅŒã‚ÉŠÏŽ@‚µ‚½’l‚𔽉f‚µ‚Ü‚·BJIT ƒRƒ“ƒpƒCƒ‹‚Ì’iŠK‚ÍAƒƒ\ƒbƒh‚¨‚æ‚Ñ‚»‚̈ˑ¶ŠÖŒW‚ªƒRƒ“ƒpƒCƒ‹‚³‚ꂽ’iŠK‚ð•\‚µ‚Ü‚·B
-
-TIME_IN_JIT_BASE_011_NAME=Not Displayed
-TIME_IN_JIT_BASE_011_HELP=•\Ž¦‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB
-
-DotNetCLR_Interop_OBJECT_011_NAME=.NET CLR Interop
-DotNetCLR_Interop_OBJECT_011_HELP=CLR ‘ŠŒÝ‰^—p‹@”\‚Ì“Œv‚Å‚·B
-
-CURRENT_CCW_011_NAME=# of CCWs
-CURRENT_CCW_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍACom ŒÄ‚Ño‚µ‰Â”\ƒ‰ƒbƒp[ (CCWs) ‚ÌŒ»Ý‚Ì”‚ð•\Ž¦‚µ‚Ü‚·BCCW ‚ÍAƒAƒ“ƒ}ƒl[ƒW‚Ì COM ƒNƒ‰ƒCƒAƒ“ƒg‚©‚çŽQÆ‚³‚ê‚Ä‚¢‚é .NET ƒ}ƒl[ƒW ƒIƒuƒWƒFƒNƒg‚̃vƒƒLƒV‚Å‚·B‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒ“ƒ}ƒl[ƒW‚Ì COM ƒNƒ‰ƒCƒAƒ“ƒg‚©‚çŽQÆ‚³‚ê‚Ä‚¢‚éƒ}ƒl[ƒW ƒIƒuƒWƒFƒNƒg‚Ì”‚ðŽ¦‚·‚悤‚ɃfƒUƒCƒ“‚³‚ê‚Ü‚µ‚½B
-
-CURRENT_STUBS_011_NAME=# of Stubs
-CURRENT_STUBS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍACLR ‚Å쬂³‚ꂽŒ»Ý‚̃Xƒ^ƒbƒh”‚ð•\Ž¦‚µ‚Ü‚·BƒXƒ^ƒbƒh‚͈ø”‚¨‚æ‚Ñ–ß‚è’l‚ðƒ}ƒl[ƒW‚©‚çƒAƒ“ƒ}ƒl[ƒW ƒR[ƒh‚ÖA‚Ü‚½‚̓Aƒ“ƒ}ƒl[ƒW‚©‚çƒ}ƒl[ƒW ƒR[ƒh‚Öƒ}[ƒVƒƒƒŠƒ“ƒO‚·‚é–ð–Ú‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚±‚ê‚Í COM ‘ŠŒÝ‰^—p‹@”\ŒÄ‚Ño‚µA‚Ü‚½‚Í PInvoke ŒÄ‚Ño‚µ’†‚És‚í‚ê‚Ü‚·B
-
-NUM_MARSHALLING_011_NAME=# of marshalling
-NUM_MARSHALLING_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆAˆø”‚Æ–ß‚è’l‚ªƒ}ƒl[ƒW‚©‚çƒAƒ“ƒ}ƒl[ƒW ƒR[ƒh‚ÉA‚Ü‚½ƒAƒ“ƒ}ƒl[ƒW‚©‚çƒ}ƒl[ƒW ƒR[ƒh‚Ƀ}[ƒVƒƒƒŠƒ“ƒO‚³‚ꂽ‡Œv‰ñ”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒg‚̓Xƒ^ƒbƒh‚ªƒCƒ“ƒ‰ƒCƒ“‚Ìꇂ̓Cƒ“ƒNƒŠƒƒ“ƒg‚³‚ê‚Ü‚¹‚ñB (ƒXƒ^ƒbƒh‚͈ø”‚¨‚æ‚Ñ–ß‚è’l‚ðƒ}[ƒVƒƒƒŠƒ“ƒO‚·‚é–ð–Ú‚ðŽ‚Á‚Ä‚¢‚Ü‚·)BƒXƒ^ƒbƒh‚ÍAƒ}[ƒVƒƒƒŠƒ“ƒO‚̃I[ƒo[ƒwƒbƒh‚ª¬‚³‚¢ê‡‚ÍA’ÊíƒCƒ“ƒ‰ƒCƒ“‚É‚È‚è‚Ü‚·B
-
-TOTAL_TLB_IMPORTS_011_NAME=# of TLB imports / sec
-TOTAL_TLB_IMPORTS_011_HELP=«—ˆ—˜—p‚·‚邽‚ß‚É—\–ñ‚³‚ê‚Ä‚¢‚Ü‚·B
-
-TOTAL_TLB_EXPORTS_011_NAME=# of TLB exports / sec
-TOTAL_TLB_EXPORTS_011_HELP=«—ˆ—˜—p‚·‚邽‚ß‚É—\–ñ‚³‚ê‚Ä‚¢‚Ü‚·B
-
-DotNetCLR_LocksAndThreads_OBJECT_011_NAME=.NET CLR LocksAndThreads
-DotNetCLR_LocksAndThreads_OBJECT_011_HELP=CLR ƒƒbƒN‚¨‚æ‚уXƒŒƒbƒh‚Ì“Œv‚Å‚·B
-
-CONTENTION_TOTAL_011_NAME=Total # of Contentions
-CONTENTION_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍACLR “à‚̃XƒŒƒbƒh‚ªƒ}ƒl[ƒW ƒƒbƒN‚ðŽæ“¾‚µ‚悤‚Æ‚µ‚ÄŽ¸”s‚µ‚½‰ñ”‚̇Œv‚ð•\Ž¦‚µ‚Ü‚·Bƒ}ƒl[ƒW ƒƒbƒN‚ðŽæ“¾‚·‚é‚É‚Í‚¢‚ë‚¢‚ë‚È•û–@‚ª‚ ‚è‚Ü‚·B‚½‚Æ‚¦‚ÎAC# “à‚Ì "lock" ƒXƒe[ƒgƒƒ“ƒg‚ðŽg—p‚·‚éASystem.Monitor.Enter ‚ðŒÄ‚Ño‚·AMethodImplOptions.Synchronized custom ‘®«‚ðŽg—p‚·‚éA‚È‚ÇB
-
-CONTENTION_INST_011_NAME=Contention Rate / sec
-CONTENTION_INST_011_HELP=ƒ‰ƒ“ƒ^ƒCƒ€‚̃XƒŒƒbƒh‚ªƒ}ƒl[ƒW ƒƒbƒN‚ðŽæ“¾‚µ‚悤‚Æ‚µ‚ÄŽ¸”s‚µ‚½Š„‡‚Å‚·Bƒ}ƒl[ƒW ƒƒbƒN‚ðŽæ“¾‚·‚é‚É‚ÍŽŸ‚̂悤‚È•û–@‚ª‚ ‚è‚Ü‚·BC# ‚Ì "lock" ƒXƒe[ƒgƒƒ“ƒg‚ðŽg—p‚·‚éASystem.Monitor.Enter ‚̌ĂÑo‚µ‚ð‚·‚éA‚Ü‚½‚Í MethodImplOptions.Synchronized ƒJƒXƒ^ƒ€‘®«‚ðŽg—p‚·‚éB
-
-QUEUE_LENGTH_CUR_011_NAME=Current Queue Length
-QUEUE_LENGTH_CUR_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍŒ»ÝƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ń}ƒl[ƒW ƒƒbƒN‚ðŽæ“¾‚µ‚悤‚Æ‘Ò‚Á‚Ä‚¢‚éƒXƒŒƒbƒh‚̇Œv”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒg‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AÅŒã‚ÉŠÏŽ@‚³‚ꂽ’l‚ð•\Ž¦‚µ‚Ü‚·B
-
-QUEUE_LENGTH_TOTAL_011_NAME=Queue Length Peak
-QUEUE_LENGTH_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚µ‚Ä‚©‚çAƒ}ƒl[ƒW ƒƒbƒN‚̎擾‚ð‘Ò‚Á‚Ä‚¢‚éƒXƒŒƒbƒh‚̇Œv”‚ð•\Ž¦‚µ‚Ü‚·B
-
-QUEUE_LENGTH_INST_011_NAME=Queue Length / sec
-QUEUE_LENGTH_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ŃƒbƒN‚̎擾‚ð‘Ò‚Á‚Ä‚¢‚éƒXƒŒƒbƒh‚Ì–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-CURRENT_LOGICAL_THREADS_011_NAME=# of current logical Threads
-CURRENT_LOGICAL_THREADS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ““à‚Ì .NET ƒXƒŒƒbƒh ƒIƒuƒWƒFƒNƒg‚ÌŒ»Ý‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B.NET ƒXƒŒƒbƒh ƒIƒuƒWƒFƒNƒg‚ÍV‚µ‚¢ System.Threading.Thread ‚É‚æ‚Á‚Ä쬂³‚ê‚é‚©A‚Ü‚½‚̓Aƒ“ƒ}ƒl[ƒW ƒXƒŒƒbƒh‚ªƒ}ƒl[ƒWŠÂ‹«‚É“ü‚Á‚½‚Æ‚«‚É쬂³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍAŽÀs’†‚̃XƒŒƒbƒh‚¨‚æ‚Ñ’†Ž~‚µ‚½ƒXƒŒƒbƒh‚Ì—¼•û‚̃JƒEƒ“ƒg‚ðˆÛŽ‚µ‚Ü‚·BB‚±‚̃JƒEƒ“ƒg‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AÅŒã‚ÉŠÏŽ@‚³‚ꂽ’l‚ð•\Ž¦‚µ‚Ü‚·B
-
-CURRENT_PHYSICAL_THREADS_011_NAME=# of current physical Threads
-CURRENT_PHYSICAL_THREADS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍACLR ‚É‚æ‚Á‚Ä쬂³‚ꊗL‚³‚ê‚ÄA.NET ƒXƒŒƒbƒh ƒIƒuƒWƒFƒNƒg‚ÌŠî‚É‚È‚éƒXƒŒƒbƒh‚Æ‚µ‚Ä“®ì‚·‚éƒlƒCƒeƒBƒu‚Ì OS ƒXƒŒƒbƒh‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Ì’l‚ÍA“à•”‘€ì‚Å CLR ‚É‚æ‚Á‚ÄŽg—p‚³‚ê‚éƒXƒŒƒbƒh‚ðŠÜ‚Ý‚Ü‚¹‚ñBOS ƒvƒƒZƒX‚̃XƒŒƒbƒh‚̃TƒuƒZƒbƒg‚Å‚·B
-
-RECOGNIZED_THREADS_CUR_011_NAME=# of current recognized threads
-RECOGNIZED_THREADS_CUR_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAŒ»Ý CLR ‚É‚æ‚Á‚Ä”FŽ¯‚³‚ê‚Ä‚¢‚éƒXƒŒƒbƒh”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚ç‚̃XƒŒƒbƒh‚ÍAƒXƒŒƒbƒh‚ÆŠÖ˜A•t‚¯‚ç‚ꂽˆê’v‚·‚é .NET ƒXƒŒƒbƒh ƒIƒuƒWƒFƒNƒg‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚±‚ê‚ç‚̃XƒŒƒbƒh‚Í CLR ‚É‚æ‚Á‚Ä쬂³‚ꂸACLR ‚ÌŠO•”‚Å쬂³‚ê‚Ü‚·‚ªACLR “à‚Å­‚È‚­‚Æ‚à 1 “x‚ÍŽÀs‚³‚ê‚Ä‚¢‚Ü‚·Bî•ñ‚ª‹L˜^‚³‚ê‚é‚͈̂êˆÓ‚̃XƒŒƒbƒh‚Ì‚Ý‚Å‚·B“¯‚¶ƒXƒŒƒbƒh ID ‚Å CLR ‚ÉĂъ܂܂ꂽ‚èA‚Ü‚½I—¹Œã‚ÉÄ쬂³‚ꂽƒXƒŒƒbƒh‚Í 2 “x–ڂ̓JƒEƒ“ƒg‚³‚ê‚Ü‚¹‚ñB
-
-RECOGNIZED_THREADS_TOTAL_011_NAME=# of total recognized threads
-RECOGNIZED_THREADS_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŠJŽnˆÈ—ˆ CLR ‚É‚æ‚Á‚Ä”FŽ¯‚³‚ꂽƒXƒŒƒbƒh‡Œv”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚ç‚̃XƒŒƒbƒh‚ÍAƒXƒŒƒbƒh‚ÆŠÖ˜A•t‚¯‚ç‚ꂽˆê’v‚·‚é .NET ƒXƒŒƒbƒh ƒIƒuƒWƒFƒNƒg‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚±‚ê‚ç‚̃XƒŒƒbƒh‚Í CLR ‚É‚æ‚Á‚Ä쬂³‚ꂸACLR ‚ÌŠO•”‚Å쬂³‚ê‚Ü‚·‚ªACLR “à‚Å­‚È‚­‚Æ‚à 1 “x‚ÍŽÀs‚³‚ê‚Ä‚¢‚Ü‚·Bî•ñ‚ª‹L˜^‚³‚ê‚é‚͈̂êˆÓ‚̃XƒŒƒbƒh‚Ì‚Ý‚Å‚·B“¯‚¶ƒXƒŒƒbƒh ID ‚Å CLR ‚ÉĂъ܂܂ꂽ‚èA‚Ü‚½I—¹Œã‚ÉÄ쬂³‚ꂽƒXƒŒƒbƒh‚Í 2 “x–ڂ̓JƒEƒ“ƒg‚³‚ê‚Ü‚¹‚ñB
-
-RECOGNIZED_THREADS_INST_011_NAME=rate of recognized threads / sec
-RECOGNIZED_THREADS_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA CLR ‚É‚æ‚Á‚Ä”FŽ¯‚³‚ꂽƒXƒŒƒbƒh‚Ì–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚ç‚̃XƒŒƒbƒh‚ÍAƒXƒŒƒbƒh‚ÆŠÖ˜A•t‚¯‚ç‚ꂽˆê’v‚·‚é .NET ƒXƒŒƒbƒh ƒIƒuƒWƒFƒNƒg‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚±‚ê‚ç‚̃XƒŒƒbƒh‚Í CLR ‚É‚æ‚Á‚Ä쬂³‚ꂸACLR ‚ÌŠO•”‚Å쬂³‚ê‚Ü‚·‚ªACLR “à‚Å­‚È‚­‚Æ‚à 1 “x‚ÍŽÀs‚³‚ê‚Ä‚¢‚Ü‚·Bî•ñ‚ª‹L˜^‚³‚ê‚é‚͈̂êˆÓ‚̃XƒŒƒbƒh‚Ì‚Ý‚Å‚·B“¯‚¶ƒXƒŒƒbƒh ID ‚Å CLR ‚ÉĂъ܂܂ꂽ‚èA‚Ü‚½I—¹Œã‚ÉÄ쬂³‚ꂽƒXƒŒƒbƒh‚Í 2 “x–ڂ̓JƒEƒ“ƒg‚³‚ê‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-DotNetCLR_Security_OBJECT_011_NAME=.NET CLR Security
-DotNetCLR_Security_OBJECT_011_HELP=CLR ƒZƒLƒ…ƒŠƒeƒB‚Ì“Œv‚Å‚·B
-
-SECURITY_TOTALRTCHECKS_011_NAME=Total Runtime Checks
-SECURITY_TOTALRTCHECKS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŠJŽnˆÈ—ˆAŽÀs‚³‚ꂽƒ‰ƒ“ƒ^ƒCƒ€ Code Access Security (CAS) ƒ`ƒFƒbƒN‚̇Œv”‚ð•\Ž¦‚µ‚Ü‚·Bƒ‰ƒ“ƒ^ƒCƒ€ Code Access Security (CAS) ƒ`ƒFƒbƒN‚ÍAŒÄ‚Ño‚µŒ³‚ªŒÄ‚Ño‚µæ‚É“Á•Ê‚̃AƒNƒZƒXŒ ŒÀ‚ð—v‹‚µ‚ČĂÑo‚µ‚½‚Æ‚«‚ÉŽÀs‚³‚ê‚Ü‚·BŒÄ‚Ño‚µŒ³‚ª–ˆ‰ñŒÄ‚Ño‚·‚²‚ƂɃ‰ƒ“ƒ^ƒCƒ€ ƒ`ƒFƒbƒN‚ªŽÀs‚³‚ê‚Ü‚·B‚Ü‚½ŒÄ‚Ño‚µŒ³‚ÌŒ»Ý‚̃XƒŒƒbƒh ƒXƒ^ƒbƒN‚𒲂ׂ邱‚Æ‚É‚æ‚Á‚ă`ƒFƒbƒN‚ªŽÀs‚³‚ê‚Ü‚·B"Stack Walk Depth" ‚Æ‹¤‚ÉŽg—p‚³‚ê‚邱‚̃JƒEƒ“ƒ^‚ÍAƒZƒLƒ…ƒŠƒeƒB ƒ`ƒFƒbƒN‚̃pƒtƒH[ƒ}ƒ“ƒX ƒyƒiƒ‹ƒeƒB‚ðŽ¦‚µ‚Ü‚·B
-
-SECURITY_TIMEAUTHORIZE_011_NAME=% Time Sig. Authenticating
-SECURITY_TIMEAUTHORIZE_011_HELP=«—ˆ—˜—p‚·‚邽‚ß‚É—\–ñ‚³‚ê‚Ä‚¢‚Ü‚·B
-
-SECURITY_LINKCHECKS_011_NAME=# Link Time Checks
-SECURITY_LINKCHECKS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚µ‚Ĉȗˆ‚̃Šƒ“ƒNƒ^ƒCƒ€ Code Access Security (CAS) ƒ`ƒFƒbƒN‚̇Œv”‚ð•\Ž¦‚µ‚Ü‚·BƒŠƒ“ƒNƒ^ƒCƒ€ CAS ƒ`ƒFƒbƒN‚ÍAJIT ƒRƒ“ƒpƒCƒ‹Žž‚ÉAŒÄ‚Ño‚µŒ³‚ªŒÄ‚Ño‚µæ‚É“Á•Ê‚̃AƒNƒZƒXŒ ŒÀ‚ð—v‹‚µ‚ČĂÑo‚µ‚½‚Æ‚«‚ÉŽÀs‚³‚ê‚Ü‚·BƒŠƒ“ƒNƒ^ƒCƒ€ CAS ƒ`ƒFƒbƒN‚͌ĂÑo‚µ‚²‚Æ‚É 1 “xŽÀs‚³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒg‚Íd‘å‚ȃpƒtƒH[ƒ}ƒ“ƒX–â‘è‚ðŽ¦‚·‚à‚Ì‚Å‚Í‚È‚­AƒZƒLƒ…ƒŠƒeƒB ƒVƒXƒeƒ€‚Ì“®ì‚ðŽ¦‚·‚à‚Ì‚Å‚·B
-
-SECURITY_TIMERTCHECKS_011_NAME=% Time in RT checks
-SECURITY_TIMERTCHECKS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAÅŒã‚̃`ƒFƒbƒNˆÈ—ˆAƒ‰ƒ“ƒ^ƒCƒ€ Code Access Security (CAS) ƒ`ƒFƒbƒN‚ðs‚¤‚½‚ß‚ÉŒo‰ß‚µ‚½ŽžŠÔ‚̃p[ƒZƒ“ƒe[ƒW‚ð•\Ž¦‚µ‚Ü‚·BCAS ‚̓R[ƒh‚ɈقȂé”͈͂łÌM—Š‚ð—^‚¦‚Ü‚·BƒR[ƒh‚Ì ID ‚É]‚Á‚Ä‚±‚̈قȂéM—ŠƒŒƒxƒ‹‚ð“K—p‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚̓‰ƒ“ƒ^ƒCƒ€‚̃ZƒLƒ…ƒŠƒeƒB ƒ`ƒFƒbƒN‚ÌÅŒã‚ÉXV‚³‚ê‚Ü‚·BƒJƒEƒ“ƒ^‚Ì’l‚Í•½‹Ï’l‚Å‚Í‚È‚­AÅŒã‚ÉŠÏŽ@‚µ‚½’l‚𔽉f‚µ‚Ü‚·B
-
-SECURITY_TIMERTCHECKS_BASE_011_NAME=Not Displayed
-SECURITY_TIMERTCHECKS_BASE_011_HELP=•\Ž¦‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB
-
-SECURITY_DEPTHSECURITY_011_NAME=Stack Walk Depth
-SECURITY_DEPTHSECURITY_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍÅŒã‚̃‰ƒ“ƒ^ƒCƒ€ Code Access Security ƒ`ƒFƒbƒNŽž‚̃Xƒ^ƒbƒN‚Ì[‚³‚ð•\Ž¦‚µ‚Ü‚·Bƒ‰ƒ“ƒ^ƒCƒ€ Code Access Security ƒ`ƒFƒbƒN‚̓Xƒ^ƒbƒN‚ðƒNƒ[ƒ‹‚µ‚ÄŽÀs‚³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒg‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AÅŒã‚ÉŠÏŽ@‚³‚ꂽ’l‚ð•\Ž¦‚µ‚Ü‚·B
-
-DotNetCLR_Remoting_OBJECT_011_NAME=.NET CLR Remoting
-DotNetCLR_Remoting_OBJECT_011_HELP=CLR ƒŠƒ‚[ƒg‚Ì“Œv‚Å‚·B
-
-CONTEXT_REMOTECALLS_INST_011_NAME=Remote Calls/sec
-CONTEXT_REMOTECALLS_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒŠƒ‚[ƒg ƒvƒƒV[ƒWƒƒ‚̌ĂÑo‚µ‚ª‚È‚³‚ꂽ–ˆ•b‚̉ñ”‚ð•\Ž¦‚µ‚Ü‚·BƒŠƒ‚[ƒg ƒvƒƒV[ƒWƒƒ‚̌ĂÑo‚µ‚ÍAŒÄ‚Ño‚µŒ³‚Ì AppDomain ˆÈŠO‚̃IƒuƒWƒFƒNƒg‚É‚È‚³‚ꂽŒÄ‚Ño‚µ‚·‚ׂĂðŠÜ‚Ý‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-CONTEXT_CHANNELS_011_NAME=Channels
-CONTEXT_CHANNELS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆA‚·‚×‚Ä‚Ì AppDomain ‚Å“o˜^‚³‚ê‚Ä‚¢‚郊ƒ‚[ƒg ƒ`ƒƒƒ“ƒlƒ‹‚̇Œv”‚ð•\Ž¦‚µ‚Ü‚·Bƒ`ƒƒƒ“ƒlƒ‹‚̓Šƒ‚[ƒg ƒIƒuƒWƒFƒNƒgŠÔ‚ŃƒbƒZ[ƒW‚ð‘—M‚·‚é‚Ì‚ÉŽg—p‚³‚ê‚Ü‚·B
-
-CONTEXT_PROXIES_011_NAME=Context Proxies
-CONTEXT_PROXIES_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒvƒƒZƒX‚ªŠJŽn‚³‚ê‚ĈȗˆA‚±‚̃vƒƒZƒX‚Å쬂³‚ꂽƒŠƒ‚[ƒg ƒvƒƒLƒV ƒIƒuƒWƒFƒNƒg‚̇Œv”‚ð•\Ž¦‚µ‚Ü‚·BƒvƒƒLƒV ƒIƒuƒWƒFƒNƒg‚̓Šƒ‚[ƒg ƒIƒuƒWƒFƒNƒg‚ð‘ã•\‚µ‚Ä“®ì‚µAƒvƒƒLƒV‚É‚¨‚¯‚é‚·‚ׂĂ̌ĂÑo‚µ‚ÍAƒŠƒ‚[ƒg ƒIƒuƒWƒFƒNƒg ƒCƒ“ƒXƒ^ƒ“ƒX‚ɳŠm‚É“]‘—‚³‚ê‚邱‚Æ‚ðŠmŽÀ‚É‚µ‚Ü‚·B
-
-CONTEXT_CLASSES_011_NAME=Context-Bound Classes Loaded
-CONTEXT_CLASSES_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA“Ç‚Ýž‚܂ꂽ context-bound ƒNƒ‰ƒX‚ÌŒ»Ý”‚ð•\Ž¦‚µ‚Ü‚·BƒRƒ“ƒeƒLƒXƒg‚ÉS‘©‚·‚邱‚Æ‚Ì‚Å‚«‚éƒNƒ‰ƒX‚Í context-bound ƒNƒ‰ƒX‚ƌĂ΂ê‚Ü‚·Bcontext-bound ƒNƒ‰ƒX‚ÍA“¯ŠúAƒXƒŒƒbƒh—ÞŽ—«Aƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚È‚Ç‚Ì‚½‚ß‚ÌŽg—p‹K‘¥‚ð’ñ‹Ÿ‚·‚é Context ‘®«‚Ń}[ƒN‚³‚ê‚Ü‚·B
-
-CONTEXT_OBJALLOC_011_NAME=Context-Bound Objects Alloc / sec
-CONTEXT_OBJALLOC_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAcontext-bound ƒIƒuƒWƒFƒNƒg‚ªŠ„‚è“–‚Ä‚ç‚ꂽ–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·BƒRƒ“ƒeƒLƒXƒg‚ÉS‘©‚·‚邱‚Æ‚Ì‚Å‚«‚éƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX‚Í context-bound ƒIƒuƒWƒFƒNƒg‚ƌĂ΂ê‚Ü‚·Bcontext-bound ƒNƒ‰ƒX‚ÍA“¯ŠúAƒXƒŒƒbƒh—ÞŽ—«Aƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚È‚Ç‚Ì‚½‚ß‚ÌŽg—p‹K‘¥‚ð’ñ‹Ÿ‚·‚é Context ‘®«‚Ń}[ƒN‚³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-CONTEXT_CONTEXTS_011_NAME=Contexts
-CONTEXT_CONTEXTS_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃Šƒ‚[ƒg ƒRƒ“ƒeƒLƒXƒg‚ÌŒ»Ý‚Ì”‚ð•\Ž¦‚µ‚Ü‚·BƒRƒ“ƒeƒLƒXƒg‚ÍA“¯ŠúAƒXƒŒƒbƒh—ÞŽ—«Aƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚È‚Ç‚Æ“¯‚¶Žg—p‹K‘¥‚ðŽ‚ƒIƒuƒWƒFƒNƒg‚̃RƒŒƒNƒVƒ‡ƒ“‚ðŠÜ‚ñ‚Å‚¢‚é‹«ŠEü‚Å‚·B
-
-CONTEXT_REMOTECALLS_TOTAL_011_NAME=Total Remote Calls
-CONTEXT_REMOTECALLS_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚Ĉȗˆ‚È‚³‚ꂽƒŠƒ‚[ƒg ƒvƒƒV[ƒWƒƒ‚̌ĂÑo‚µ‚̇Œv‰ñ”‚ð•\Ž¦‚µ‚Ü‚·BƒŠƒ‚[ƒg ƒvƒƒV[ƒWƒƒ‚̌ĂÑo‚µ‚ÍAŒÄ‚Ño‚µŒ³‚Ì AppDomain ˆÈŠO‚̃IƒuƒWƒFƒNƒg‚É‚È‚³‚ꂽŒÄ‚Ño‚µ‚·‚ׂĂðŠÜ‚Ý‚Ü‚·B
-
-DotNetCLR_Excep_OBJECT_011_NAME=.NET CLR Exceptions
-DotNetCLR_Excep_OBJECT_011_HELP=CLR —áŠOˆ—‚̃‰ƒ“ƒ^ƒCƒ€“Œv‚Å‚·B
-
-EXCEP_THROWN_TOTAL_011_NAME=# of Exceps Thrown
-EXCEP_THROWN_TOTAL_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŠJŽn‚³‚ê‚ĈȗˆAƒXƒ[‚³‚ꂽ—áŠO‚̇Œv”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚É‚Í .NET —áŠOA‚¨‚æ‚Ñ .NET —áŠO‚É•ÏŠ·‚³‚ꂽƒAƒ“ƒ}ƒl[ƒW—áŠO‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·B‚½‚Æ‚¦‚ÎAƒAƒ“ƒ}ƒl[ƒW ƒR[ƒh‚Ì NULL ƒ|ƒCƒ“ƒ^ŽQÆ‚Ì—áŠO‚ÍA.NET System.NullReferenceException ‚Æ‚µ‚ă}ƒl[ƒW ƒR[ƒh‚ÉÄ“xƒXƒ[‚³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚É‚ÍAƒnƒ“ƒhƒ‹‚³‚ꂽ—áŠO‚ƃnƒ“ƒhƒ‹‚³‚ê‚Ä‚¢‚È‚¢—áŠO‚Ì—¼•û‚ðŠÜ‚Ý‚Ü‚·BÄ“xƒXƒ[‚³‚ꂽ—áŠO‚ÍÄ“xƒJƒEƒ“ƒg‚³‚ê‚Ü‚·B—áŠO‚ª”­¶‚·‚é‚Ì‚Í‚Ü‚ê‚Èó‘Ô‚Å‚ ‚èA’Êí‚̃vƒƒOƒ‰ƒ€‚Ì—¬‚ê‚Ì’†‚Å‚Í‹N‚±‚é‚ׂ«‚Å‚Í‚ ‚è‚Ü‚¹‚ñB
-
-EXCEP_THROWN_INST_011_NAME=# of Exceps Thrown / sec
-EXCEP_THROWN_INST_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í—áŠO‚ªƒXƒ[‚³‚ꂽ–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚ê‚É‚Í .NET —áŠOA‚¨‚æ‚Ñ .NET —áŠO‚É•ÏŠ·‚³‚ꂽƒAƒ“ƒ}ƒl[ƒW—áŠO‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·B‚½‚Æ‚¦‚ÎAƒAƒ“ƒ}ƒl[ƒW ƒR[ƒh‚Ì NULL ƒ|ƒCƒ“ƒ^ŽQÆ‚Ì—áŠO‚ÍA.NET System.NullReferenceException ‚Æ‚µ‚ă}ƒl[ƒW ƒR[ƒh‚ÉÄ“xƒXƒ[‚³‚ê‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚É‚ÍAƒnƒ“ƒhƒ‹‚³‚ꂽ—áŠO‚ƃnƒ“ƒhƒ‹‚³‚ê‚Ä‚¢‚È‚¢—áŠO‚Ì—¼•û‚ðŠÜ‚Ý‚Ü‚·BÄ“xƒXƒ[‚³‚ꂽ—áŠO‚ÍÄ“xƒJƒEƒ“ƒg‚³‚ê‚Ü‚·B—áŠO‚ª”­¶‚·‚é‚Ì‚Í‚Ü‚ê‚Èó‘Ô‚Å‚ ‚èA’Êí‚̃vƒƒOƒ‰ƒ€‚Ì—¬‚ê‚Ì’†‚Å‚Í‹N‚±‚é‚ׂ«‚Å‚Í‚ ‚è‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚ÍAƒXƒ[‚³‚ê‚é—áŠO‚Ì”‚ª‘å‚«‚¢‚½‚ß (>100)A‹N‚±‚é‰Â”\«‚Ì‚ ‚éƒpƒtƒH[ƒ}ƒ“ƒX–â‘è‚ðŽw“E‚·‚é‚悤‚ɃfƒUƒCƒ“‚³‚ê‚Ü‚µ‚½B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-TOTAL_EXCEP_FILTERS_RUN_011_NAME=# of Filters / sec
-TOTAL_EXCEP_FILTERS_RUN_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA.NET —áŠOƒtƒBƒ‹ƒ^‚ªŽÀs‚³‚ꂽ–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B—áŠOƒtƒBƒ‹ƒ^‚Í—áŠO‚ªˆ—‚³‚ê‚é‚ׂ«‚©‚Ç‚¤‚©‚ð•]‰¿‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA—áŠO‚ªˆ—‚³‚ꂽ‚©‚Ç‚¤‚©‚É‚ÍŠÖŒW‚È‚­A—áŠOƒtƒBƒ‹ƒ^‚ª•]‰¿‚³‚ꂽŠ„‡‚ð‹L˜^‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-TOTAL_EXCEP_FINALLYS_RUN_011_NAME=# of Finallys / sec
-TOTAL_EXCEP_FINALLYS_RUN_011_HELP=‚±‚̃JƒEƒ“ƒ^‚Í finally ƒuƒƒbƒN‚ªŽÀs‚³‚ꂽ–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·Bfinally ƒuƒƒbƒN‚ÍAtry ƒuƒƒbƒN‚ª‚ǂ̂悤‚ÉŽÀs‚³‚ꂽ‚©‚É‚ÍŠÖŒW‚È‚­•K‚¸ŽÀs‚³‚ê‚é‚悤‚É‚È‚Á‚Ä‚¢‚Ü‚·B—áŠO‚ÉŽÀs‚³‚ꂽ finally ƒuƒƒbƒN‚¾‚¯‚ªƒJƒEƒ“ƒg‚³‚ê‚Ü‚·B’Êí‚̃R[ƒh ƒpƒX‚Ì finally ƒuƒƒbƒN‚Í‚±‚̃JƒEƒ“ƒ^‚ł̓JƒEƒ“ƒg‚³‚ê‚Ü‚¹‚ñB‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
-EXCEPT_STACK_DEPTH_011_NAME=Throw To Catch Depth / sec
-EXCEPT_STACK_DEPTH_011_HELP=‚±‚̃JƒEƒ“ƒ^‚ÍA.NET —áŠO‚ð—áŠO‚ðˆ—‚·‚éƒtƒŒ[ƒ€‚ɃXƒ[‚µ‚½ƒtƒŒ[ƒ€‚©‚çˆÚ‚³‚ꂽƒXƒ^ƒbƒN ƒtƒŒ[ƒ€‚Ì–ˆ•b‚Ì”‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚ÍA—áŠOƒnƒ“ƒhƒ‰‚ª“ü—Í‚³‚ê‚é‚Æ 0 ‚ɃŠƒZƒbƒg‚³‚êA“ü‚êŽq‚É‚È‚Á‚½—áŠO‚̓nƒ“ƒhƒ‰‚ɃXƒ^ƒbƒN‚Ì[‚³‚ð•\Ž¦‚µ‚Ü‚·B‚±‚̃JƒEƒ“ƒ^‚Í‘S‘Ì‚Ì•½‹Ï‚Å‚Í‚È‚­AƒTƒ“ƒvƒ‹ŠÔŠu‚ÌŒp‘±ŽžŠÔ‚ÅŠ„‚Á‚½ÅŒã‚Ì 2 ‚‚̃Tƒ“ƒvƒ‹‚ÌŠÔ‚ÅŠÏŽ@‚³‚ꂽ’l‚̈Ⴂ‚ð•\Ž¦‚µ‚Ü‚·B
-
diff --git a/src/inc/1041/_DataPerfCounters.ini b/src/inc/1041/_DataPerfCounters.ini
deleted file mode 100644
index 53f94b8131..0000000000
--- a/src/inc/1041/_DataPerfCounters.ini
+++ /dev/null
Binary files differ
diff --git a/src/inc/1041/_NetworkingPerfCounters.ini b/src/inc/1041/_NetworkingPerfCounters.ini
deleted file mode 100644
index d75180bf2e..0000000000
--- a/src/inc/1041/_NetworkingPerfCounters.ini
+++ /dev/null
Binary files differ
diff --git a/src/inc/1041/aspnet_perf.ini b/src/inc/1041/aspnet_perf.ini
deleted file mode 100644
index 9c09cc5dcd..0000000000
--- a/src/inc/1041/aspnet_perf.ini
+++ /dev/null
@@ -1,414 +0,0 @@
-[info]
-drivername=ASP.NET_1.0.3430.0
-symbolfile=aspnet_perf.h
-
-[languages]
-011=Japanese
-009=English
-
-[objects]
-OBJECT_1_009_NAME=ASP.NET v1.0.3430.0
-OBJECT_2_009_NAME=ASP.NET Apps v1.0.3430.0
-
-OBJECT_1_011_NAME=ASP.NET v1.0.3430.0
-OBJECT_2_011_NAME=ASP.NET Apps v1.0.3430.0
-
-[text]
-OBJECT_1_009_NAME=ASP.NET v1.0.3430.0
-OBJECT_1_009_HELP=ASP.NET v1.0.3430.0 global performance counters
-OBJECT_2_009_NAME=ASP.NET Apps v1.0.3430.0
-OBJECT_2_009_HELP=ASP.NET v1.0.3430.0 application performance counters
-
-OBJECT_1_011_NAME=ASP.NET v1.0.3430.0
-OBJECT_1_011_HELP=ASP.NET v1.0.3430.0 ƒOƒ[ƒoƒ‹ ƒp[ƒtƒH[ƒ}ƒ“ƒX ƒJƒEƒ“ƒ^
-OBJECT_2_011_NAME=ASP.NET Apps v1.0.3430.0
-OBJECT_2_011_HELP=ASP.NET v1.0.3430.0 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ ƒp[ƒtƒH[ƒ}ƒ“ƒX ƒJƒEƒ“ƒ^
-
-;;
-;; ASP.NET System Counters
-;;
-
-ASPNET_APPLICATION_RESTARTS_009_NAME=Application Restarts
-ASPNET_APPLICATION_RESTARTS_009_HELP=Number of times the application has been restarted during the web server's lifetime.
-
-ASPNET_APPLICATIONS_RUNNING_009_NAME=Applications Running
-ASPNET_APPLICATIONS_RUNNING_009_HELP=Number of currently running web applications.
-
-ASPNET_REQUESTS_DISCONNECTED_009_NAME=Requests Disconnected
-ASPNET_REQUESTS_DISCONNECTED_009_HELP=The number of requests disconnected due to communication errors or user terminated.
-
-ASPNET_REQUEST_EXECUTION_TIME_009_NAME=Request Execution Time
-ASPNET_REQUEST_EXECUTION_TIME_009_HELP=The number of milliseconds that it took to execute the most recent request.
-
-ASPNET_REQUESTS_REJECTED_009_NAME=Requests Rejected
-ASPNET_REQUESTS_REJECTED_009_HELP=The number of requests rejected because the request queue was full.
-
-ASPNET_REQUESTS_QUEUED_009_NAME=Requests Queued
-ASPNET_REQUESTS_QUEUED_009_HELP=The number of requests waiting to be processed.
-
-ASPNET_WPS_RUNNING_009_NAME=Worker Processes Running
-ASPNET_WPS_RUNNING_009_HELP=Number of worker processes running on the machine.
-
-ASPNET_WPS_RESTARTS_009_NAME=Worker Process Restarts
-ASPNET_WPS_RESTARTS_009_HELP=Number of times a worker process has restarted on the machine.
-
-ASPNET_REQUEST_WAIT_TIME_009_NAME=Request Wait Time
-ASPNET_REQUEST_WAIT_TIME_009_HELP=The number of milliseconds the most recent request was waiting in the queue.
-
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_009_NAME=State Server Sessions Active
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_009_HELP=The current number of sessions currently active.
-
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_009_NAME=State Server Sessions Abandoned
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_009_HELP=The number of sessions that have been explicitly abandoned.
-
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_009_NAME=State Server Sessions Timed Out
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_009_HELP=The number of sessions timed out.
-
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_009_NAME=State Server Sessions Total
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_009_HELP=The number of sessions total.
-
-;;
-;; ASP.NET Application Counters
-;;
-
-ASPNET_ANONYMOUS_REQUESTS_009_NAME=Anonymous Requests
-ASPNET_ANONYMOUS_REQUESTS_009_HELP=Number of requests utilizing anonymous authentication.
-
-ASPNET_ANONYMOUS_REQUESTS_RATE_009_NAME=Anonymous Requests/Sec
-ASPNET_ANONYMOUS_REQUESTS_RATE_009_HELP=Number of Authentication Anonymous Requests/Sec
-
-ASPNET_TOTAL_CACHE_ENTRIES_009_NAME=Cache Total Entries
-ASPNET_TOTAL_CACHE_ENTRIES_009_HELP=Total number of entries within the cache (both internal and user added)
-
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_009_NAME=Cache Total Turnover Rate
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the total cache per second.
-
-ASPNET_TOTAL_CACHE_HITS_009_NAME=Cache Total Hits
-ASPNET_TOTAL_CACHE_HITS_009_HELP=Total number of hits from the cache.
-
-ASPNET_TOTAL_CACHE_MISSES_009_NAME=Cache Total Misses
-ASPNET_TOTAL_CACHE_MISSES_009_HELP=Total number of cache misses.
-
-ASPNET_TOTAL_CACHE_RATIO_009_NAME=Cache Total Hit Ratio
-ASPNET_TOTAL_CACHE_RATIO_009_HELP=Ratio of hits from all cache calls.
-
-ASPNET_TOTAL_CACHE_RATIO_BASE_009_NAME=Cache Total Hit Ratio Base
-ASPNET_TOTAL_CACHE_RATIO_BASE_009_HELP=Cache Total Hit Ratio Base
-
-ASPNET_API_CACHE_ENTRIES_009_NAME=Cache API Entries
-ASPNET_API_CACHE_ENTRIES_009_HELP=Total number of entries within the cache added by the user.
-
-ASPNET_API_CACHE_TURNOVER_RATE_009_NAME=Cache API Turnover Rate
-ASPNET_API_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the API cache per second.
-
-ASPNET_API_CACHE_HITS_009_NAME=Cache API Hits
-ASPNET_API_CACHE_HITS_009_HELP=Number of cache hits from user code.
-
-ASPNET_API_CACHE_MISSES_009_NAME=Cache API Misses
-ASPNET_API_CACHE_MISSES_009_HELP=Number of cache misses called from user code.
-
-ASPNET_API_CACHE_RATIO_009_NAME=Cache API Hit Ratio
-ASPNET_API_CACHE_RATIO_009_HELP=Ratio of hits called from user code.
-
-ASPNET_API_CACHE_RATIO_BASE_009_NAME=Cache API Hit Ratio Base
-ASPNET_API_CACHE_RATIO_BASE_009_HELP=Cache API Hit Ratio Base
-
-ASPNET_OUTPUT_CACHE_ENTRIES_009_NAME=Output Cache Entries
-ASPNET_OUTPUT_CACHE_ENTRIES_009_HELP=Current number of entries in the output cache.
-
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_009_NAME=Output Cache Turnover Rate
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the output cache per second.
-
-ASPNET_OUTPUT_CACHE_HITS_009_NAME=Output Cache Hits
-ASPNET_OUTPUT_CACHE_HITS_009_HELP=Total number of ouput cacheable requests served from the output cache.
-
-ASPNET_OUTPUT_CACHE_MISSES_009_NAME=Output Cache Misses
-ASPNET_OUTPUT_CACHE_MISSES_009_HELP=Total number of ouput cacheable requests not served from the output cache.
-
-ASPNET_OUTPUT_CACHE_RATIO_009_NAME=Output Cache Hit Ratio
-ASPNET_OUTPUT_CACHE_RATIO_009_HELP=Ratio of hits to requests for output cacheable requests.
-
-ASPNET_OUTPUT_CACHE_RATIO_BASE_009_NAME=Output Cache Hit Ratio Base
-ASPNET_OUTPUT_CACHE_RATIO_BASE_009_HELP=Output Cache Hit Ratio Base
-
-ASPNET_COMPILATIONS_009_NAME=Compilations Total
-ASPNET_COMPILATIONS_009_HELP=Number of .asax, .ascx, .ashx, .asmx, or .aspx source files dynamically compiled.
-
-ASPNET_DEBUGGING_REQUESTS_009_NAME=Debugging Requests
-ASPNET_DEBUGGING_REQUESTS_009_HELP=Number of debugging requests processed.
-
-ASPNET_ERRORS_PRE_PROCESSING_009_NAME=Errors During Preprocessing
-ASPNET_ERRORS_PRE_PROCESSING_009_HELP=Number of errors that have occurred during parsing and configuration.
-
-ASPNET_ERRORS_COMPILING_009_NAME=Errors During Compilation
-ASPNET_ERRORS_COMPILING_009_HELP=Number of errors that have occurred during compilation.
-
-ASPNET_ERRORS_DURING_REQUEST_009_NAME=Errors During Execution
-ASPNET_ERRORS_DURING_REQUEST_009_HELP=Number of errors that have occurred during the processing of a request.
-
-ASPNET_ERRORS_UNHANDLED_009_NAME=Errors Unhandled During Execution
-ASPNET_ERRORS_UNHANDLED_009_HELP=Number of errors not handled by user code, but by the default error handler.
-
-ASPNET_ERRORS_UNHANDLED_RATE_009_NAME=Errors Unhandled During Execution/Sec
-ASPNET_ERRORS_UNHANDLED_RATE_009_HELP=Rate of unhandled errors.
-
-ASPNET_ERRORS_TOTAL_009_NAME=Errors Total
-ASPNET_ERRORS_TOTAL_009_HELP=Total number of errors occurred.
-
-ASPNET_ERRORS_TOTAL_RATE_009_NAME=Errors Total/Sec
-ASPNET_ERRORS_TOTAL_RATE_009_HELP=Rate of errors occurred.
-
-ASPNET_PIPELINES_009_NAME=Pipeline Instance Count
-ASPNET_PIPELINES_009_HELP=Number of active pipeline instances.
-
-ASPNET_REQUEST_BYTES_IN_009_NAME=Request Bytes In Total
-ASPNET_REQUEST_BYTES_IN_009_HELP=The total size, in bytes, of all requests.
-
-ASPNET_REQUEST_BYTES_OUT_009_NAME=Request Bytes Out Total
-ASPNET_REQUEST_BYTES_OUT_009_HELP=The total size, in bytes, of responses sent to a client. This does not include standard HTTP response headers.
-
-ASPNET_REQUESTS_EXECUTING_009_NAME=Requests Executing
-ASPNET_REQUESTS_EXECUTING_009_HELP=The number of requests currently executing.
-
-ASPNET_REQUESTS_FAILED_009_NAME=Requests Failed
-ASPNET_REQUESTS_FAILED_009_HELP=Total number of failed requests.
-
-ASPNET_REQUESTS_NOT_FOUND_009_NAME=Requests Not Found
-ASPNET_REQUESTS_NOT_FOUND_009_HELP=The number of requests for resources that were not found.
-
-ASPNET_REQUESTS_NOT_AUTHORIZED_009_NAME=Requests Not Authorized
-ASPNET_REQUESTS_NOT_AUTHORIZED_009_HELP=Number of requests failed due to unauthorized access.
-
-ASPNET_REQUESTS_TIMED_OUT_009_NAME=Requests Timed Out
-ASPNET_REQUESTS_TIMED_OUT_009_HELP=The number of requests that timed out.
-
-ASPNET_REQUESTS_SUCCEDED_009_NAME=Requests Succeeded
-ASPNET_REQUESTS_SUCCEDED_009_HELP=The number of requests that executed successfully.
-
-ASPNET_REQUESTS_TOTAL_009_NAME=Requests Total
-ASPNET_REQUESTS_TOTAL_009_HELP=The total number of requests since the application was started.
-
-ASPNET_REQUESTS_TOTAL_RATE_009_NAME=Requests/Sec
-ASPNET_REQUESTS_TOTAL_RATE_009_HELP=The number of requests executed per second.
-
-ASPNET_SESSIONS_ACTIVE_009_NAME=Sessions Active
-ASPNET_SESSIONS_ACTIVE_009_HELP=The current number of sessions currently active.
-
-ASPNET_SESSIONS_ABANDONED_009_NAME=Sessions Abandoned
-ASPNET_SESSIONS_ABANDONED_009_HELP=The number of sessions that have been explicitly abandoned.
-
-ASPNET_SESSIONS_TIMED_OUT_009_NAME=Sessions Timed Out
-ASPNET_SESSIONS_TIMED_OUT_009_HELP=The number of sessions timed out.
-
-ASPNET_SESSIONS_TOTAL_009_NAME=Sessions Total
-ASPNET_SESSIONS_TOTAL_009_HELP=Total number of sessions since the application was started.
-
-ASPNET_TRANSACTIONS_ABORTED_009_NAME=Transactions Aborted
-ASPNET_TRANSACTIONS_ABORTED_009_HELP=The number of transactions aborted.
-
-ASPNET_TRANSACTIONS_COMMITTED_009_NAME=Transactions Committed
-ASPNET_TRANSACTIONS_COMMITTED_009_HELP=The number of transactions committed.
-
-ASPNET_TRANSACTIONS_PENDING_009_NAME=Transactions Pending
-ASPNET_TRANSACTIONS_PENDING_009_HELP=Number of transactions in progress.
-
-ASPNET_TRANSACTIONS_TOTAL_009_NAME=Transactions Total
-ASPNET_TRANSACTIONS_TOTAL_009_HELP=The total number of transactions since the application was started.
-
-ASPNET_TRANSACTIONS_RATE_009_NAME=Transactions/Sec
-ASPNET_TRANSACTIONS_RATE_009_HELP=Transactions started per second.
-
-;;
-;; ASP.NET System Counters
-;;
-
-ASPNET_APPLICATION_RESTARTS_011_NAME=Application Restarts
-ASPNET_APPLICATION_RESTARTS_011_HELP=Web ƒT[ƒo[‚Ì—LŒøŠúŠÔ’†‚ɃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªÄ‹N“®‚³‚ꂽ‰ñ”‚Å‚·B
-
-ASPNET_APPLICATIONS_RUNNING_011_NAME=Applications Running
-ASPNET_APPLICATIONS_RUNNING_011_HELP=Œ»ÝŽÀs’†‚Ì Web ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_DISCONNECTED_011_NAME=Requests Disconnected
-ASPNET_REQUESTS_DISCONNECTED_011_HELP=’ÊMƒGƒ‰[‚Ü‚½‚̓†[ƒU[‘€ì‚É‚æ‚Á‚ÄØ’f‚³‚ꂽ—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUEST_EXECUTION_TIME_011_NAME=Request Execution Time
-ASPNET_REQUEST_EXECUTION_TIME_011_HELP=ÅŒã‚Ì—v‹‚ðŽÀs‚·‚é‚Ì‚É”ï‚₵‚½ƒ~ƒŠ•b”‚Å‚·B
-
-ASPNET_REQUESTS_REJECTED_011_NAME=Requests Rejected
-ASPNET_REQUESTS_REJECTED_011_HELP=—v‹‚ª‚¢‚Á‚Ï‚¢‚É‚È‚Á‚½‚½‚ß‚É‹‘”Û‚³‚ꂽ—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_QUEUED_011_NAME=Requests Queued
-ASPNET_REQUESTS_QUEUED_011_HELP=ˆ—‘Ò‚¿‚Ì—v‹‚Ì”‚Å‚·B
-
-ASPNET_WPS_RUNNING_011_NAME=Worker Processes Running
-ASPNET_WPS_RUNNING_011_HELP=ƒRƒ“ƒsƒ…[ƒ^‚ÅŽÀs’†‚̃[ƒJ[ ƒvƒƒZƒX‚Ì”‚Å‚·B
-
-ASPNET_WPS_RESTARTS_011_NAME=Worker Process Restarts
-ASPNET_WPS_RESTARTS_011_HELP=ƒRƒ“ƒsƒ…[ƒ^‚Ń[ƒJ[ ƒvƒƒZƒX‚ªÄ‹N“®‚³‚ꂽ‰ñ”‚Å‚·B
-
-ASPNET_REQUEST_WAIT_TIME_011_NAME=Request Wait Time
-ASPNET_REQUEST_WAIT_TIME_011_HELP=ÅŒã‚Ì—v‹‚ªAƒLƒ…[‚Å‘Ò‚Á‚Ä‚¢‚鎞ŠÔ (ƒ~ƒŠ•b) ‚Å‚·B
-
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_011_NAME=State Server Sessions Active
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_011_HELP=Œ»ÝƒAƒNƒeƒBƒu‚ȃZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_011_NAME=State Server Sessions Abandoned
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_011_HELP=–¾Ž¦“I‚É”jŠü‚³‚ꂽƒZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_011_NAME=State Server Sessions Timed Out
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_011_HELP=ƒ^ƒCƒ€ƒAƒEƒg‚µ‚½ƒZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_011_NAME=State Server Sessions Total
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_011_HELP=ƒZƒbƒVƒ‡ƒ“‚̇Œv”‚Å‚·B
-
-;;
-;; ASP.NET Application Counters
-;;
-
-ASPNET_ANONYMOUS_REQUESTS_011_NAME=Anonymous Requests
-ASPNET_ANONYMOUS_REQUESTS_011_HELP=“½–¼”FØ‚ðŽg—p‚·‚é—v‹‚Ì”‚Å‚·B
-
-ASPNET_ANONYMOUS_REQUESTS_RATE_011_NAME=Anonymous Requests/Sec
-ASPNET_ANONYMOUS_REQUESTS_RATE_011_HELP=”FØ“½–¼–³–¼—v‹‚Ì” (•b’PˆÊ) ‚Å‚·B
-
-ASPNET_TOTAL_CACHE_ENTRIES_011_NAME=Cache Total Entries
-ASPNET_TOTAL_CACHE_ENTRIES_011_HELP=ƒLƒƒƒbƒVƒ…“à‚̃Gƒ“ƒgƒŠ‚Ì‘” (“à•”‚¨‚æ‚у†[ƒU[‚ª’ljÁ‚µ‚½‚à‚Ì)
-
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_011_NAME=Cache Total Turnover Rate
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_011_HELP=’ljÁ/휂³‚ꂽ‡ŒvƒLƒƒƒbƒVƒ…” (•b’PˆÊ) ‚Å‚·B
-
-ASPNET_TOTAL_CACHE_HITS_011_NAME=Cache Total Hits
-ASPNET_TOTAL_CACHE_HITS_011_HELP=ƒLƒƒƒbƒVƒ…‚©‚ç‚̃qƒbƒg‚Ì‘”‚Å‚·B
-
-ASPNET_TOTAL_CACHE_MISSES_011_NAME=Cache Total Misses
-ASPNET_TOTAL_CACHE_MISSES_011_HELP=ƒLƒƒƒbƒVƒ… ƒ~ƒX‚Ì‘”‚Å‚·B
-
-ASPNET_TOTAL_CACHE_RATIO_011_NAME=Cache Total Hit Ratio
-ASPNET_TOTAL_CACHE_RATIO_011_HELP=‚·‚ׂẴLƒƒƒbƒVƒ…‚̌ĂÑo‚µ‚©‚ç‚̃qƒbƒg‚ÌŠ„‡‚Å‚·B
-
-ASPNET_TOTAL_CACHE_RATIO_BASE_011_NAME=Cache Total Hit Ratio Base
-ASPNET_TOTAL_CACHE_RATIO_BASE_011_HELP=ƒLƒƒƒbƒVƒ…‡Œvƒqƒbƒg—¦ƒx[ƒX‚Å‚·B
-
-ASPNET_API_CACHE_ENTRIES_011_NAME=Cache API Entries
-ASPNET_API_CACHE_ENTRIES_011_HELP=ƒ†[ƒU[‚ª’ljÁ‚µ‚½AƒLƒƒƒbƒVƒ…“à‚̃Gƒ“ƒgƒŠ‚Ì‘”‚Å‚·B
-
-ASPNET_API_CACHE_TURNOVER_RATE_011_NAME=Cache API Turnover Rate
-ASPNET_API_CACHE_TURNOVER_RATE_011_HELP=’ljÁ/휂³‚ꂽ API ƒLƒƒƒbƒVƒ…” (•b’PˆÊ) ‚Å‚·B
-
-ASPNET_API_CACHE_HITS_011_NAME=Cache API Hits
-ASPNET_API_CACHE_HITS_011_HELP=ƒ†[ƒU[ ƒR[ƒh‚©‚ç‚̃LƒƒƒbƒVƒ… ƒqƒbƒg‚Ì”‚Å‚·B
-
-ASPNET_API_CACHE_MISSES_011_NAME=Cache API Misses
-ASPNET_API_CACHE_MISSES_011_HELP=ƒ†[ƒU[ ƒR[ƒh‚©‚ç‚̃LƒƒƒbƒVƒ… ƒ~ƒX‚Ì”‚Å‚·B
-
-ASPNET_API_CACHE_RATIO_011_NAME=Cache API Hit Ratio
-ASPNET_API_CACHE_RATIO_011_HELP=ƒ†[ƒU[ ƒR[ƒh‚©‚çŒÄ‚Ño‚³‚ê‚éAƒqƒbƒg‚ÌŠ„‡‚Å‚·B
-
-ASPNET_API_CACHE_RATIO_BASE_011_NAME=Cache API Hit Ratio Base
-ASPNET_API_CACHE_RATIO_BASE_011_HELP=ƒLƒƒƒbƒVƒ… API ƒqƒbƒg—¦ƒx[ƒX‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_ENTRIES_011_NAME=Output Cache Entries
-ASPNET_OUTPUT_CACHE_ENTRIES_011_HELP=o—̓LƒƒƒbƒVƒ…‚ÌŒ»Ý‚̃Gƒ“ƒgƒŠ‚Ì”‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_011_NAME=Output Cache Turnover Rate
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_011_HELP=’ljÁ/휂³‚ꂽo—̓LƒƒƒbƒVƒ…” (•b’PˆÊ) ‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_HITS_011_NAME=Output Cache Hits
-ASPNET_OUTPUT_CACHE_HITS_011_HELP=o—̓LƒƒƒbƒVƒ…‚©‚ç‘—M‚³‚ꂽo—̓LƒƒƒbƒVƒ…‰Â”\‚È—v‹‚̇Œv”‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_MISSES_011_NAME=Output Cache Misses
-ASPNET_OUTPUT_CACHE_MISSES_011_HELP=o—̓LƒƒƒbƒVƒ…‚©‚ç‘—M‚³‚ê‚È‚©‚Á‚½o—̓LƒƒƒbƒVƒ…‰Â”\‚È—v‹‚̇Œv”‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_RATIO_011_NAME=Output Cache Hit Ratio
-ASPNET_OUTPUT_CACHE_RATIO_011_HELP=o—͂̃LƒƒƒbƒVƒ…‰Â”\—v‹‚ɑ΂·‚é—v‹‚̃qƒbƒg—¦‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_RATIO_BASE_011_NAME=Output Cache Hit Ratio Base
-ASPNET_OUTPUT_CACHE_RATIO_BASE_011_HELP=o—̓LƒƒƒbƒVƒ… ƒqƒbƒg—¦ƒx[ƒX‚Å‚·B
-
-ASPNET_COMPILATIONS_011_NAME=Compilations Total
-ASPNET_COMPILATIONS_011_HELP=“®“I‚ɃRƒ“ƒpƒCƒ‹‚³‚ꂽ .asaxA.ascxA.ashxA.asmx ‚Ü‚½‚Í .aspx ƒ\[ƒX ƒtƒ@ƒCƒ‹‚Ì”‚Å‚·B
-
-ASPNET_DEBUGGING_REQUESTS_011_NAME=Debugging Requests
-ASPNET_DEBUGGING_REQUESTS_011_HELP=ˆ—‚µ‚½ƒfƒoƒbƒO ƒŠƒNƒGƒXƒg‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_PRE_PROCESSING_011_NAME=Errors During Preprocessing
-ASPNET_ERRORS_PRE_PROCESSING_011_HELP=‰ðÍ‚Æ\¬’†‚É”­¶‚µ‚½ƒGƒ‰[‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_COMPILING_011_NAME=Errors During Compilation
-ASPNET_ERRORS_COMPILING_011_HELP=ƒRƒ“ƒpƒCƒ‹’†‚É”­¶‚µ‚½ƒGƒ‰[‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_DURING_REQUEST_011_NAME=Errors During Execution
-ASPNET_ERRORS_DURING_REQUEST_011_HELP=—v‹‚̈—’†‚É”­¶‚µ‚½ƒGƒ‰[‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_UNHANDLED_011_NAME=Errors Unhandled During Execution
-ASPNET_ERRORS_UNHANDLED_011_HELP=ƒ†[ƒU[ ƒR[ƒh‚Å‚È‚­AŠù’è‚̃Gƒ‰[ ƒnƒ“ƒhƒ‰‚É‚æ‚èƒnƒ“ƒhƒ‹‚³‚ꂽƒGƒ‰[‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_UNHANDLED_RATE_011_NAME=Errors Unhandled During Execution/Sec
-ASPNET_ERRORS_UNHANDLED_RATE_011_HELP=–¢ˆ—‚̃Gƒ‰[‚ÌŠ„‡‚Å‚·B
-
-ASPNET_ERRORS_TOTAL_011_NAME=Errors Total
-ASPNET_ERRORS_TOTAL_011_HELP=”­¶‚µ‚½ƒGƒ‰[‚Ì‘”‚Å‚·B
-
-ASPNET_ERRORS_TOTAL_RATE_011_NAME=Errors Total/Sec
-ASPNET_ERRORS_TOTAL_RATE_011_HELP=”­¶‚µ‚½ƒGƒ‰[‚ÌŠ„‡‚Å‚·B
-
-ASPNET_PIPELINES_011_NAME=Pipeline Instance Count
-ASPNET_PIPELINES_011_HELP=ƒAƒNƒeƒBƒu ƒpƒCƒvƒ‰ƒCƒ“ ƒCƒ“ƒXƒ^ƒ“ƒX‚Ì”‚Å‚·B
-
-ASPNET_REQUEST_BYTES_IN_011_NAME=Request Bytes In Total
-ASPNET_REQUEST_BYTES_IN_011_HELP=‚·‚ׂĂ̗v‹‚Ì‘ƒTƒCƒY‚Å‚· (ƒoƒCƒg)B
-
-ASPNET_REQUEST_BYTES_OUT_011_NAME=Request Bytes Out Total
-ASPNET_REQUEST_BYTES_OUT_011_HELP=ƒNƒ‰ƒCƒAƒ“ƒg‚É‘—M‚³‚ꂽ‰ž“š‚Ì‘ƒTƒCƒY‚Å‚· (ƒoƒCƒg)B‚±‚ê‚É‚ÍAHTTP ‰ž“šƒwƒbƒ_[‚ÍŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚¹‚ñB
-
-ASPNET_REQUESTS_EXECUTING_011_NAME=Requests Executing
-ASPNET_REQUESTS_EXECUTING_011_HELP=Œ»ÝŽÀs‚µ‚Ä‚¢‚é—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_FAILED_011_NAME=Requests Failed
-ASPNET_REQUESTS_FAILED_011_HELP=Ž¸”s‚µ‚½—v‹‚Ì‘”‚Å‚·B
-
-ASPNET_REQUESTS_NOT_FOUND_011_NAME=Requests Not Found
-ASPNET_REQUESTS_NOT_FOUND_011_HELP=Œ©‚‚©‚ç‚È‚©‚Á‚½ƒŠƒ\[ƒX‚ð—v‹‚µ‚½”‚Å‚·B
-
-ASPNET_REQUESTS_NOT_AUTHORIZED_011_NAME=Requests Not Authorized
-ASPNET_REQUESTS_NOT_AUTHORIZED_011_HELP=”FØ‚Ì‚È‚¢ƒAƒNƒZƒX‚ðs‚Á‚½‚½‚ßA—v‹‚ÉŽ¸”s‚µ‚Ü‚µ‚½B
-
-ASPNET_REQUESTS_TIMED_OUT_011_NAME=Requests Timed Out
-ASPNET_REQUESTS_TIMED_OUT_011_HELP=ƒ^ƒCƒ€ƒAƒEƒg‚µ‚½—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_SUCCEDED_011_NAME=Requests Succeeded
-ASPNET_REQUESTS_SUCCEDED_011_HELP=ŽÀs‚ɬŒ÷‚µ‚½—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_TOTAL_011_NAME=Requests Total
-ASPNET_REQUESTS_TOTAL_011_HELP=ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ŠJŽnŒã‚Ì—v‹”‚̇Œv‚Å‚·B
-
-ASPNET_REQUESTS_TOTAL_RATE_011_NAME=Requests/Sec
-ASPNET_REQUESTS_TOTAL_RATE_011_HELP=1 •b‚²‚Æ‚ÉŽÀs‚µ‚½—v‹‚Ì”‚Å‚·B
-
-ASPNET_SESSIONS_ACTIVE_011_NAME=Sessions Active
-ASPNET_SESSIONS_ACTIVE_011_HELP=Œ»ÝƒAƒNƒeƒBƒu‚ȃZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_SESSIONS_ABANDONED_011_NAME=Sessions Abandoned
-ASPNET_SESSIONS_ABANDONED_011_HELP=–¾Ž¦“I‚É”jŠü‚³‚ꂽƒZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_SESSIONS_TIMED_OUT_011_NAME=Sessions Timed Out
-ASPNET_SESSIONS_TIMED_OUT_011_HELP=ƒ^ƒCƒ€ƒAƒEƒg‚µ‚½ƒZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_SESSIONS_TOTAL_011_NAME=Sessions Total
-ASPNET_SESSIONS_TOTAL_011_HELP=ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ŠJŽnŒã‚̃ZƒbƒVƒ‡ƒ“”‚̇Œv‚Å‚·B
-
-ASPNET_TRANSACTIONS_ABORTED_011_NAME=Transactions Aborted
-ASPNET_TRANSACTIONS_ABORTED_011_HELP=’†Ž~‚³‚ꂽƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_TRANSACTIONS_COMMITTED_011_NAME=Transactions Committed
-ASPNET_TRANSACTIONS_COMMITTED_011_HELP=ƒRƒ~ƒbƒg‚µ‚½ƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_TRANSACTIONS_PENDING_011_NAME=Transactions Pending
-ASPNET_TRANSACTIONS_PENDING_011_HELP=ˆ—’†‚̃gƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚Å‚·B
-
-ASPNET_TRANSACTIONS_TOTAL_011_NAME=Transactions Total
-ASPNET_TRANSACTIONS_TOTAL_011_HELP=ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ŠJŽnŒã‚̃gƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“”‚̇Œv‚Å‚·B
-
-ASPNET_TRANSACTIONS_RATE_011_NAME=Transactions/Sec
-ASPNET_TRANSACTIONS_RATE_011_HELP=1 •b‚ÉŠJŽn‚³‚ê‚éƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚Å‚·B
-
diff --git a/src/inc/1041/aspnet_perf2.ini b/src/inc/1041/aspnet_perf2.ini
deleted file mode 100644
index d08121b8bb..0000000000
--- a/src/inc/1041/aspnet_perf2.ini
+++ /dev/null
@@ -1,411 +0,0 @@
-[info]
-drivername=ASP.NET
-symbolfile=aspnet_perf.h
-
-[languages]
-011=Japanese
-009=English
-
-[objects]
-OBJECT_1_009_NAME=ASP.NET
-OBJECT_2_009_NAME=ASP.NET Applications
-
-OBJECT_1_011_NAME=ASP.NET
-OBJECT_2_011_NAME=ASP.NET Applications
-
-[text]
-OBJECT_1_009_NAME=ASP.NET
-OBJECT_1_009_HELP=ASP.NET global performance counters
-OBJECT_2_009_NAME=ASP.NET Applications
-OBJECT_2_009_HELP=ASP.NET Application performance counters
-
-OBJECT_1_011_NAME=ASP.NET
-OBJECT_1_011_HELP=ASP.NET ƒOƒ[ƒoƒ‹ ƒp[ƒtƒH[ƒ}ƒ“ƒX ƒJƒEƒ“ƒ^
-OBJECT_2_011_NAME=ASP.NET Applications
-OBJECT_2_011_HELP=ASP.NET ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ ƒp[ƒtƒH[ƒ}ƒ“ƒX ƒJƒEƒ“ƒ^
-
-;;
-;; ASP.NET System Counters
-;;
-
-ASPNET_APPLICATION_RESTARTS_009_NAME=Application Restarts
-ASPNET_APPLICATION_RESTARTS_009_HELP=Number of times the application has been restarted during the web server's lifetime.
-
-ASPNET_APPLICATIONS_RUNNING_009_NAME=Applications Running
-ASPNET_APPLICATIONS_RUNNING_009_HELP=Number of currently running web applications.
-
-ASPNET_REQUESTS_DISCONNECTED_009_NAME=Requests Disconnected
-ASPNET_REQUESTS_DISCONNECTED_009_HELP=The number of requests disconnected due to communication errors or user terminated.
-
-ASPNET_REQUEST_EXECUTION_TIME_009_NAME=Request Execution Time
-ASPNET_REQUEST_EXECUTION_TIME_009_HELP=The number of milliseconds that it took to execute the most recent request.
-
-ASPNET_REQUESTS_REJECTED_009_NAME=Requests Rejected
-ASPNET_REQUESTS_REJECTED_009_HELP=The number of requests rejected because the request queue was full.
-
-ASPNET_REQUESTS_QUEUED_009_NAME=Requests Queued
-ASPNET_REQUESTS_QUEUED_009_HELP=The number of requests waiting to be processed.
-
-ASPNET_WPS_RUNNING_009_NAME=Worker Processes Running
-ASPNET_WPS_RUNNING_009_HELP=Number of worker processes running on the machine.
-
-ASPNET_WPS_RESTARTS_009_NAME=Worker Process Restarts
-ASPNET_WPS_RESTARTS_009_HELP=Number of times a worker process has restarted on the machine.
-
-ASPNET_REQUEST_WAIT_TIME_009_NAME=Request Wait Time
-ASPNET_REQUEST_WAIT_TIME_009_HELP=The number of milliseconds the most recent request was waiting in the queue.
-
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_009_NAME=State Server Sessions Active
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_009_HELP=The current number of sessions currently active.
-
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_009_NAME=State Server Sessions Abandoned
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_009_HELP=The number of sessions that have been explicitly abandoned.
-
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_009_NAME=State Server Sessions Timed Out
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_009_HELP=The number of sessions timed out.
-
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_009_NAME=State Server Sessions Total
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_009_HELP=The number of sessions total.
-
-;;
-;; ASP.NET Application Counters
-;;
-
-ASPNET_ANONYMOUS_REQUESTS_009_NAME=Anonymous Requests
-ASPNET_ANONYMOUS_REQUESTS_009_HELP=Number of requests utilizing anonymous authentication.
-
-ASPNET_ANONYMOUS_REQUESTS_RATE_009_NAME=Anonymous Requests/Sec
-ASPNET_ANONYMOUS_REQUESTS_RATE_009_HELP=Number of Authentication Anonymous Requests/Sec
-
-ASPNET_TOTAL_CACHE_ENTRIES_009_NAME=Cache Total Entries
-ASPNET_TOTAL_CACHE_ENTRIES_009_HELP=Total number of entries within the cache (both internal and user added)
-
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_009_NAME=Cache Total Turnover Rate
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the total cache per second.
-
-ASPNET_TOTAL_CACHE_HITS_009_NAME=Cache Total Hits
-ASPNET_TOTAL_CACHE_HITS_009_HELP=Total number of hits from the cache.
-
-ASPNET_TOTAL_CACHE_MISSES_009_NAME=Cache Total Misses
-ASPNET_TOTAL_CACHE_MISSES_009_HELP=Total number of cache misses.
-
-ASPNET_TOTAL_CACHE_RATIO_009_NAME=Cache Total Hit Ratio
-ASPNET_TOTAL_CACHE_RATIO_009_HELP=Ratio of hits from all cache calls.
-
-ASPNET_TOTAL_CACHE_RATIO_BASE_009_NAME=Cache Total Hit Ratio Base
-ASPNET_TOTAL_CACHE_RATIO_BASE_009_HELP=Cache Total Hit Ratio Base
-
-ASPNET_API_CACHE_ENTRIES_009_NAME=Cache API Entries
-ASPNET_API_CACHE_ENTRIES_009_HELP=Total number of entries within the cache added by the user.
-
-ASPNET_API_CACHE_TURNOVER_RATE_009_NAME=Cache API Turnover Rate
-ASPNET_API_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the API cache per second.
-
-ASPNET_API_CACHE_HITS_009_NAME=Cache API Hits
-ASPNET_API_CACHE_HITS_009_HELP=Number of cache hits from user code.
-
-ASPNET_API_CACHE_MISSES_009_NAME=Cache API Misses
-ASPNET_API_CACHE_MISSES_009_HELP=Number of cache misses called from user code.
-
-ASPNET_API_CACHE_RATIO_009_NAME=Cache API Hit Ratio
-ASPNET_API_CACHE_RATIO_009_HELP=Ratio of hits called from user code.
-
-ASPNET_API_CACHE_RATIO_BASE_009_NAME=Cache API Hit Ratio Base
-ASPNET_API_CACHE_RATIO_BASE_009_HELP=Cache API Hit Ratio Base
-
-ASPNET_OUTPUT_CACHE_ENTRIES_009_NAME=Output Cache Entries
-ASPNET_OUTPUT_CACHE_ENTRIES_009_HELP=Current number of entries in the output cache.
-
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_009_NAME=Output Cache Turnover Rate
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_009_HELP=Number of additions and removals to the output cache per second.
-
-ASPNET_OUTPUT_CACHE_HITS_009_NAME=Output Cache Hits
-ASPNET_OUTPUT_CACHE_HITS_009_HELP=Total number of ouput cacheable requests served from the output cache.
-
-ASPNET_OUTPUT_CACHE_MISSES_009_NAME=Output Cache Misses
-ASPNET_OUTPUT_CACHE_MISSES_009_HELP=Total number of ouput cacheable requests not served from the output cache.
-
-ASPNET_OUTPUT_CACHE_RATIO_009_NAME=Output Cache Hit Ratio
-ASPNET_OUTPUT_CACHE_RATIO_009_HELP=Ratio of hits to requests for output cacheable requests.
-
-ASPNET_OUTPUT_CACHE_RATIO_BASE_009_NAME=Output Cache Hit Ratio Base
-ASPNET_OUTPUT_CACHE_RATIO_BASE_009_HELP=Output Cache Hit Ratio Base
-
-ASPNET_COMPILATIONS_009_NAME=Compilations Total
-ASPNET_COMPILATIONS_009_HELP=Number of .asax, .ascx, .ashx, .asmx, or .aspx source files dynamically compiled.
-
-ASPNET_DEBUGGING_REQUESTS_009_NAME=Debugging Requests
-ASPNET_DEBUGGING_REQUESTS_009_HELP=Number of debugging requests processed.
-
-ASPNET_ERRORS_PRE_PROCESSING_009_NAME=Errors During Preprocessing
-ASPNET_ERRORS_PRE_PROCESSING_009_HELP=Number of errors that have occurred during parsing and configuration.
-
-ASPNET_ERRORS_COMPILING_009_NAME=Errors During Compilation
-ASPNET_ERRORS_COMPILING_009_HELP=Number of errors that have occurred during compilation.
-
-ASPNET_ERRORS_DURING_REQUEST_009_NAME=Errors During Execution
-ASPNET_ERRORS_DURING_REQUEST_009_HELP=Number of errors that have occurred during the processing of a request.
-
-ASPNET_ERRORS_UNHANDLED_009_NAME=Errors Unhandled During Execution
-ASPNET_ERRORS_UNHANDLED_009_HELP=Number of errors not handled by user code, but by the default error handler.
-
-ASPNET_ERRORS_UNHANDLED_RATE_009_NAME=Errors Unhandled During Execution/Sec
-ASPNET_ERRORS_UNHANDLED_RATE_009_HELP=Rate of unhandled errors.
-
-ASPNET_ERRORS_TOTAL_009_NAME=Errors Total
-ASPNET_ERRORS_TOTAL_009_HELP=Total number of errors occurred.
-
-ASPNET_ERRORS_TOTAL_RATE_009_NAME=Errors Total/Sec
-ASPNET_ERRORS_TOTAL_RATE_009_HELP=Rate of errors occurred.
-
-ASPNET_PIPELINES_009_NAME=Pipeline Instance Count
-ASPNET_PIPELINES_009_HELP=Number of active pipeline instances.
-
-ASPNET_REQUEST_BYTES_IN_009_NAME=Request Bytes In Total
-ASPNET_REQUEST_BYTES_IN_009_HELP=The total size, in bytes, of all requests.
-
-ASPNET_REQUEST_BYTES_OUT_009_NAME=Request Bytes Out Total
-ASPNET_REQUEST_BYTES_OUT_009_HELP=The total size, in bytes, of responses sent to a client. This does not include standard HTTP response headers.
-
-ASPNET_REQUESTS_EXECUTING_009_NAME=Requests Executing
-ASPNET_REQUESTS_EXECUTING_009_HELP=The number of requests currently executing.
-
-ASPNET_REQUESTS_FAILED_009_NAME=Requests Failed
-ASPNET_REQUESTS_FAILED_009_HELP=Total number of failed requests.
-
-ASPNET_REQUESTS_NOT_FOUND_009_NAME=Requests Not Found
-ASPNET_REQUESTS_NOT_FOUND_009_HELP=The number of requests for resources that were not found.
-
-ASPNET_REQUESTS_NOT_AUTHORIZED_009_NAME=Requests Not Authorized
-ASPNET_REQUESTS_NOT_AUTHORIZED_009_HELP=Number of requests failed due to unauthorized access.
-
-ASPNET_REQUESTS_TIMED_OUT_009_NAME=Requests Timed Out
-ASPNET_REQUESTS_TIMED_OUT_009_HELP=The number of requests that timed out.
-
-ASPNET_REQUESTS_SUCCEDED_009_NAME=Requests Succeeded
-ASPNET_REQUESTS_SUCCEDED_009_HELP=The number of requests that executed successfully.
-
-ASPNET_REQUESTS_TOTAL_009_NAME=Requests Total
-ASPNET_REQUESTS_TOTAL_009_HELP=The total number of requests since the application was started.
-
-ASPNET_REQUESTS_TOTAL_RATE_009_NAME=Requests/Sec
-ASPNET_REQUESTS_TOTAL_RATE_009_HELP=The number of requests executed per second.
-
-ASPNET_SESSIONS_ACTIVE_009_NAME=Sessions Active
-ASPNET_SESSIONS_ACTIVE_009_HELP=The current number of sessions currently active.
-
-ASPNET_SESSIONS_ABANDONED_009_NAME=Sessions Abandoned
-ASPNET_SESSIONS_ABANDONED_009_HELP=The number of sessions that have been explicitly abandoned.
-
-ASPNET_SESSIONS_TIMED_OUT_009_NAME=Sessions Timed Out
-ASPNET_SESSIONS_TIMED_OUT_009_HELP=The number of sessions timed out.
-
-ASPNET_SESSIONS_TOTAL_009_NAME=Sessions Total
-ASPNET_SESSIONS_TOTAL_009_HELP=Total number of sessions since the application was started.
-
-ASPNET_TRANSACTIONS_ABORTED_009_NAME=Transactions Aborted
-ASPNET_TRANSACTIONS_ABORTED_009_HELP=The number of transactions aborted.
-
-ASPNET_TRANSACTIONS_COMMITTED_009_NAME=Transactions Committed
-ASPNET_TRANSACTIONS_COMMITTED_009_HELP=The number of transactions committed.
-
-ASPNET_TRANSACTIONS_PENDING_009_NAME=Transactions Pending
-ASPNET_TRANSACTIONS_PENDING_009_HELP=Number of transactions in progress.
-
-ASPNET_TRANSACTIONS_TOTAL_009_NAME=Transactions Total
-ASPNET_TRANSACTIONS_TOTAL_009_HELP=The total number of transactions since the application was started.
-
-ASPNET_TRANSACTIONS_RATE_009_NAME=Transactions/Sec
-ASPNET_TRANSACTIONS_RATE_009_HELP=Transactions started per second.
-
-
-ASPNET_APPLICATION_RESTARTS_011_NAME=Application Restarts
-ASPNET_APPLICATION_RESTARTS_011_HELP=Web ƒT[ƒo[‚Ì—LŒøŠúŠÔ’†‚ɃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªÄ‹N“®‚³‚ꂽ‰ñ”‚Å‚·B
-
-ASPNET_APPLICATIONS_RUNNING_011_NAME=Applications Running
-ASPNET_APPLICATIONS_RUNNING_011_HELP=Œ»ÝŽÀs’†‚Ì Web ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_DISCONNECTED_011_NAME=Requests Disconnected
-ASPNET_REQUESTS_DISCONNECTED_011_HELP=’ÊMƒGƒ‰[‚Ü‚½‚̓†[ƒU[‘€ì‚É‚æ‚Á‚ÄØ’f‚³‚ꂽ—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUEST_EXECUTION_TIME_011_NAME=Request Execution Time
-ASPNET_REQUEST_EXECUTION_TIME_011_HELP=ÅŒã‚Ì—v‹‚ðŽÀs‚·‚é‚Ì‚É”ï‚₵‚½ƒ~ƒŠ•b”‚Å‚·B
-
-ASPNET_REQUESTS_REJECTED_011_NAME=Requests Rejected
-ASPNET_REQUESTS_REJECTED_011_HELP=—v‹‚ª‚¢‚Á‚Ï‚¢‚É‚È‚Á‚½‚½‚ß‚É‹‘”Û‚³‚ꂽ—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_QUEUED_011_NAME=Requests Queued
-ASPNET_REQUESTS_QUEUED_011_HELP=ˆ—‘Ò‚¿‚Ì—v‹‚Ì”‚Å‚·B
-
-ASPNET_WPS_RUNNING_011_NAME=Worker Processes Running
-ASPNET_WPS_RUNNING_011_HELP=ƒRƒ“ƒsƒ…[ƒ^‚ÅŽÀs’†‚̃[ƒJ[ ƒvƒƒZƒX‚Ì”‚Å‚·B
-
-ASPNET_WPS_RESTARTS_011_NAME=Worker Process Restarts
-ASPNET_WPS_RESTARTS_011_HELP=ƒRƒ“ƒsƒ…[ƒ^‚Ń[ƒJ[ ƒvƒƒZƒX‚ªÄ‹N“®‚³‚ꂽ‰ñ”‚Å‚·B
-
-ASPNET_REQUEST_WAIT_TIME_011_NAME=Request Wait Time
-ASPNET_REQUEST_WAIT_TIME_011_HELP=ÅŒã‚Ì—v‹‚ªAƒLƒ…[‚Å‘Ò‚Á‚Ä‚¢‚鎞ŠÔ (ƒ~ƒŠ•b) ‚Å‚·B
-
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_011_NAME=State Server Sessions Active
-ASPNET_STATE_SERVER_SESSIONS_ACTIVE_011_HELP=Œ»ÝƒAƒNƒeƒBƒu‚ȃZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_011_NAME=State Server Sessions Abandoned
-ASPNET_STATE_SERVER_SESSIONS_ABANDONED_011_HELP=–¾Ž¦“I‚É”jŠü‚³‚ꂽƒZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_011_NAME=State Server Sessions Timed Out
-ASPNET_STATE_SERVER_SESSIONS_TIMED_OUT_011_HELP=ƒ^ƒCƒ€ƒAƒEƒg‚µ‚½ƒZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_011_NAME=State Server Sessions Total
-ASPNET_STATE_SERVER_SESSIONS_TOTAL_011_HELP=ƒZƒbƒVƒ‡ƒ“‚̇Œv”‚Å‚·B
-
-;;
-;; ASP.NET Application Counters
-;;
-
-ASPNET_ANONYMOUS_REQUESTS_011_NAME=Anonymous Requests
-ASPNET_ANONYMOUS_REQUESTS_011_HELP=“½–¼”FØ‚ðŽg—p‚·‚é—v‹‚Ì”‚Å‚·B
-
-ASPNET_ANONYMOUS_REQUESTS_RATE_011_NAME=Anonymous Requests/Sec
-ASPNET_ANONYMOUS_REQUESTS_RATE_011_HELP=”FØ“½–¼–³–¼—v‹‚Ì” (•b’PˆÊ) ‚Å‚·B
-
-ASPNET_TOTAL_CACHE_ENTRIES_011_NAME=Cache Total Entries
-ASPNET_TOTAL_CACHE_ENTRIES_011_HELP=ƒLƒƒƒbƒVƒ…“à‚̃Gƒ“ƒgƒŠ‚Ì‘” (“à•”‚¨‚æ‚у†[ƒU[‚ª’ljÁ‚µ‚½‚à‚Ì)
-
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_011_NAME=Cache Total Turnover Rate
-ASPNET_TOTAL_CACHE_TURNOVER_RATE_011_HELP=’ljÁ/휂³‚ꂽ‡ŒvƒLƒƒƒbƒVƒ…” (•b’PˆÊ) ‚Å‚·B
-
-ASPNET_TOTAL_CACHE_HITS_011_NAME=Cache Total Hits
-ASPNET_TOTAL_CACHE_HITS_011_HELP=ƒLƒƒƒbƒVƒ…‚©‚ç‚̃qƒbƒg‚Ì‘”‚Å‚·B
-
-ASPNET_TOTAL_CACHE_MISSES_011_NAME=Cache Total Misses
-ASPNET_TOTAL_CACHE_MISSES_011_HELP=ƒLƒƒƒbƒVƒ… ƒ~ƒX‚Ì‘”‚Å‚·B
-
-ASPNET_TOTAL_CACHE_RATIO_011_NAME=Cache Total Hit Ratio
-ASPNET_TOTAL_CACHE_RATIO_011_HELP=‚·‚ׂẴLƒƒƒbƒVƒ…‚̌ĂÑo‚µ‚©‚ç‚̃qƒbƒg‚ÌŠ„‡‚Å‚·B
-
-ASPNET_TOTAL_CACHE_RATIO_BASE_011_NAME=Cache Total Hit Ratio Base
-ASPNET_TOTAL_CACHE_RATIO_BASE_011_HELP=ƒLƒƒƒbƒVƒ…‡Œvƒqƒbƒg—¦ƒx[ƒX‚Å‚·B
-
-ASPNET_API_CACHE_ENTRIES_011_NAME=Cache API Entries
-ASPNET_API_CACHE_ENTRIES_011_HELP=ƒ†[ƒU[‚ª’ljÁ‚µ‚½AƒLƒƒƒbƒVƒ…“à‚̃Gƒ“ƒgƒŠ‚Ì‘”‚Å‚·B
-
-ASPNET_API_CACHE_TURNOVER_RATE_011_NAME=Cache API Turnover Rate
-ASPNET_API_CACHE_TURNOVER_RATE_011_HELP=’ljÁ/휂³‚ꂽ API ƒLƒƒƒbƒVƒ…” (•b’PˆÊ) ‚Å‚·B
-
-ASPNET_API_CACHE_HITS_011_NAME=Cache API Hits
-ASPNET_API_CACHE_HITS_011_HELP=ƒ†[ƒU[ ƒR[ƒh‚©‚ç‚̃LƒƒƒbƒVƒ… ƒqƒbƒg‚Ì”‚Å‚·B
-
-ASPNET_API_CACHE_MISSES_011_NAME=Cache API Misses
-ASPNET_API_CACHE_MISSES_011_HELP=ƒ†[ƒU[ ƒR[ƒh‚©‚ç‚̃LƒƒƒbƒVƒ… ƒ~ƒX‚Ì”‚Å‚·B
-
-ASPNET_API_CACHE_RATIO_011_NAME=Cache API Hit Ratio
-ASPNET_API_CACHE_RATIO_011_HELP=ƒ†[ƒU[ ƒR[ƒh‚©‚çŒÄ‚Ño‚³‚ê‚éAƒqƒbƒg‚ÌŠ„‡‚Å‚·B
-
-ASPNET_API_CACHE_RATIO_BASE_011_NAME=Cache API Hit Ratio Base
-ASPNET_API_CACHE_RATIO_BASE_011_HELP=ƒLƒƒƒbƒVƒ… API ƒqƒbƒg—¦ƒx[ƒX‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_ENTRIES_011_NAME=Output Cache Entries
-ASPNET_OUTPUT_CACHE_ENTRIES_011_HELP=o—̓LƒƒƒbƒVƒ…‚ÌŒ»Ý‚̃Gƒ“ƒgƒŠ‚Ì”‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_011_NAME=Output Cache Turnover Rate
-ASPNET_OUTPUT_CACHE_TURNOVER_RATE_011_HELP=’ljÁ/휂³‚ꂽo—̓LƒƒƒbƒVƒ…” (•b’PˆÊ) ‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_HITS_011_NAME=Output Cache Hits
-ASPNET_OUTPUT_CACHE_HITS_011_HELP=o—̓LƒƒƒbƒVƒ…‚©‚ç‘—M‚³‚ꂽo—̓LƒƒƒbƒVƒ…‰Â”\‚È—v‹‚̇Œv”‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_MISSES_011_NAME=Output Cache Misses
-ASPNET_OUTPUT_CACHE_MISSES_011_HELP=o—̓LƒƒƒbƒVƒ…‚©‚ç‘—M‚³‚ê‚È‚©‚Á‚½o—̓LƒƒƒbƒVƒ…‰Â”\‚È—v‹‚̇Œv”‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_RATIO_011_NAME=Output Cache Hit Ratio
-ASPNET_OUTPUT_CACHE_RATIO_011_HELP=o—͂̃LƒƒƒbƒVƒ…‰Â”\—v‹‚ɑ΂·‚é—v‹‚̃qƒbƒg—¦‚Å‚·B
-
-ASPNET_OUTPUT_CACHE_RATIO_BASE_011_NAME=Output Cache Hit Ratio Base
-ASPNET_OUTPUT_CACHE_RATIO_BASE_011_HELP=o—̓LƒƒƒbƒVƒ… ƒqƒbƒg—¦ƒx[ƒX‚Å‚·B
-
-ASPNET_COMPILATIONS_011_NAME=Compilations Total
-ASPNET_COMPILATIONS_011_HELP=“®“I‚ɃRƒ“ƒpƒCƒ‹‚³‚ꂽ .asaxA.ascxA.ashxA.asmx ‚Ü‚½‚Í .aspx ƒ\[ƒX ƒtƒ@ƒCƒ‹‚Ì”‚Å‚·B
-
-ASPNET_DEBUGGING_REQUESTS_011_NAME=Debugging Requests
-ASPNET_DEBUGGING_REQUESTS_011_HELP=ˆ—‚µ‚½ƒfƒoƒbƒO ƒŠƒNƒGƒXƒg‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_PRE_PROCESSING_011_NAME=Errors During Preprocessing
-ASPNET_ERRORS_PRE_PROCESSING_011_HELP=‰ðÍ‚Æ\¬’†‚É”­¶‚µ‚½ƒGƒ‰[‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_COMPILING_011_NAME=Errors During Compilation
-ASPNET_ERRORS_COMPILING_011_HELP=ƒRƒ“ƒpƒCƒ‹’†‚É”­¶‚µ‚½ƒGƒ‰[‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_DURING_REQUEST_011_NAME=Errors During Execution
-ASPNET_ERRORS_DURING_REQUEST_011_HELP=—v‹‚̈—’†‚É”­¶‚µ‚½ƒGƒ‰[‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_UNHANDLED_011_NAME=Errors Unhandled During Execution
-ASPNET_ERRORS_UNHANDLED_011_HELP=ƒ†[ƒU[ ƒR[ƒh‚Å‚È‚­AŠù’è‚̃Gƒ‰[ ƒnƒ“ƒhƒ‰‚É‚æ‚èƒnƒ“ƒhƒ‹‚³‚ꂽƒGƒ‰[‚Ì”‚Å‚·B
-
-ASPNET_ERRORS_UNHANDLED_RATE_011_NAME=Errors Unhandled During Execution/Sec
-ASPNET_ERRORS_UNHANDLED_RATE_011_HELP=–¢ˆ—‚̃Gƒ‰[‚ÌŠ„‡‚Å‚·B
-
-ASPNET_ERRORS_TOTAL_011_NAME=Errors Total
-ASPNET_ERRORS_TOTAL_011_HELP=”­¶‚µ‚½ƒGƒ‰[‚Ì‘”‚Å‚·B
-
-ASPNET_ERRORS_TOTAL_RATE_011_NAME=Errors Total/Sec
-ASPNET_ERRORS_TOTAL_RATE_011_HELP=”­¶‚µ‚½ƒGƒ‰[‚ÌŠ„‡‚Å‚·B
-
-ASPNET_PIPELINES_011_NAME=Pipeline Instance Count
-ASPNET_PIPELINES_011_HELP=ƒAƒNƒeƒBƒu ƒpƒCƒvƒ‰ƒCƒ“ ƒCƒ“ƒXƒ^ƒ“ƒX‚Ì”‚Å‚·B
-
-ASPNET_REQUEST_BYTES_IN_011_NAME=Request Bytes In Total
-ASPNET_REQUEST_BYTES_IN_011_HELP=‚·‚ׂĂ̗v‹‚Ì‘ƒTƒCƒY‚Å‚· (ƒoƒCƒg)B
-
-ASPNET_REQUEST_BYTES_OUT_011_NAME=Request Bytes Out Total
-ASPNET_REQUEST_BYTES_OUT_011_HELP=ƒNƒ‰ƒCƒAƒ“ƒg‚É‘—M‚³‚ꂽ‰ž“š‚Ì‘ƒTƒCƒY‚Å‚· (ƒoƒCƒg)B‚±‚ê‚É‚ÍAHTTP ‰ž“šƒwƒbƒ_[‚ÍŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚¹‚ñB
-
-ASPNET_REQUESTS_EXECUTING_011_NAME=Requests Executing
-ASPNET_REQUESTS_EXECUTING_011_HELP=Œ»ÝŽÀs‚µ‚Ä‚¢‚é—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_FAILED_011_NAME=Requests Failed
-ASPNET_REQUESTS_FAILED_011_HELP=Ž¸”s‚µ‚½—v‹‚Ì‘”‚Å‚·B
-
-ASPNET_REQUESTS_NOT_FOUND_011_NAME=Requests Not Found
-ASPNET_REQUESTS_NOT_FOUND_011_HELP=Œ©‚‚©‚ç‚È‚©‚Á‚½ƒŠƒ\[ƒX‚ð—v‹‚µ‚½”‚Å‚·B
-
-ASPNET_REQUESTS_NOT_AUTHORIZED_011_NAME=Requests Not Authorized
-ASPNET_REQUESTS_NOT_AUTHORIZED_011_HELP=”FØ‚Ì‚È‚¢ƒAƒNƒZƒX‚ðs‚Á‚½‚½‚ßA—v‹‚ÉŽ¸”s‚µ‚Ü‚µ‚½B
-
-ASPNET_REQUESTS_TIMED_OUT_011_NAME=Requests Timed Out
-ASPNET_REQUESTS_TIMED_OUT_011_HELP=ƒ^ƒCƒ€ƒAƒEƒg‚µ‚½—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_SUCCEDED_011_NAME=Requests Succeeded
-ASPNET_REQUESTS_SUCCEDED_011_HELP=ŽÀs‚ɬŒ÷‚µ‚½—v‹‚Ì”‚Å‚·B
-
-ASPNET_REQUESTS_TOTAL_011_NAME=Requests Total
-ASPNET_REQUESTS_TOTAL_011_HELP=ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ŠJŽnŒã‚Ì—v‹”‚̇Œv‚Å‚·B
-
-ASPNET_REQUESTS_TOTAL_RATE_011_NAME=Requests/Sec
-ASPNET_REQUESTS_TOTAL_RATE_011_HELP=1 •b‚²‚Æ‚ÉŽÀs‚µ‚½—v‹‚Ì”‚Å‚·B
-
-ASPNET_SESSIONS_ACTIVE_011_NAME=Sessions Active
-ASPNET_SESSIONS_ACTIVE_011_HELP=Œ»ÝƒAƒNƒeƒBƒu‚ȃZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_SESSIONS_ABANDONED_011_NAME=Sessions Abandoned
-ASPNET_SESSIONS_ABANDONED_011_HELP=–¾Ž¦“I‚É”jŠü‚³‚ꂽƒZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_SESSIONS_TIMED_OUT_011_NAME=Sessions Timed Out
-ASPNET_SESSIONS_TIMED_OUT_011_HELP=ƒ^ƒCƒ€ƒAƒEƒg‚µ‚½ƒZƒbƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_SESSIONS_TOTAL_011_NAME=Sessions Total
-ASPNET_SESSIONS_TOTAL_011_HELP=ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ŠJŽnŒã‚̃ZƒbƒVƒ‡ƒ“”‚̇Œv‚Å‚·B
-
-ASPNET_TRANSACTIONS_ABORTED_011_NAME=Transactions Aborted
-ASPNET_TRANSACTIONS_ABORTED_011_HELP=’†Ž~‚³‚ꂽƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_TRANSACTIONS_COMMITTED_011_NAME=Transactions Committed
-ASPNET_TRANSACTIONS_COMMITTED_011_HELP=ƒRƒ~ƒbƒg‚µ‚½ƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚Ì”‚Å‚·B
-
-ASPNET_TRANSACTIONS_PENDING_011_NAME=Transactions Pending
-ASPNET_TRANSACTIONS_PENDING_011_HELP=ˆ—’†‚̃gƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚Å‚·B
-
-ASPNET_TRANSACTIONS_TOTAL_011_NAME=Transactions Total
-ASPNET_TRANSACTIONS_TOTAL_011_HELP=ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ŠJŽnŒã‚̃gƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“”‚̇Œv‚Å‚·B
-
-ASPNET_TRANSACTIONS_RATE_011_NAME=Transactions/Sec
-ASPNET_TRANSACTIONS_RATE_011_HELP=1 •b‚ÉŠJŽn‚³‚ê‚éƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“‚Å‚·B
-
diff --git a/src/inc/bitposition.h b/src/inc/bitposition.h
index 392d9a6632..df7915546a 100644
--- a/src/inc/bitposition.h
+++ b/src/inc/bitposition.h
@@ -25,11 +25,11 @@ inline
unsigned BitPosition(unsigned value)
{
_ASSERTE((value != 0) && ((value & (value-1)) == 0));
-#if defined(_TARGET_ARM_) && defined(__llvm__)
+#if defined(_ARM_) && defined(__llvm__)
// use intrinsic functions for arm32
// this is applied for LLVM only but it may work for some compilers
DWORD index = __builtin_clz(__builtin_arm_rbit(value));
-#elif !defined(_TARGET_AMD64_)
+#elif !defined(_AMD64_)
const unsigned PRIME = 37;
static const char hashTable[PRIME] =
diff --git a/src/inc/ceegen.h b/src/inc/ceegen.h
index a2dfadfc00..c7d2af2615 100644
--- a/src/inc/ceegen.h
+++ b/src/inc/ceegen.h
@@ -45,9 +45,6 @@ typedef DWORD StringRef;
Has a bunch of methods to emit signatures, tokens, methods,
etc which are not implemented. These are left over from before
- CeeFileGenWriter, PEWriter and ICeeFileGen are implemented in mscorpe.dll.
- The other types live in mscorwks.dll (src\md\CeeFileGen)
-
+----------------------------+
| ICeeGen |
| |
diff --git a/src/inc/clrconfigvalues.h b/src/inc/clrconfigvalues.h
index a0183d2b51..eb321f3b3b 100644
--- a/src/inc/clrconfigvalues.h
+++ b/src/inc/clrconfigvalues.h
@@ -338,7 +338,7 @@ RETAIL_CONFIG_DWORD_INFO_DIRECT_ACCESS(UNSUPPORTED_GCprnLvl, W("GCprnLvl"), "Spe
RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_GCRetainVM, W("GCRetainVM"), 0, "When set we put the segments that should be deleted on a standby list (instead of releasing them back to the OS) which will be considered to satisfy new segment requests (note that the same thing can be specified via API which is the supported way)")
RETAIL_CONFIG_DWORD_INFO_DIRECT_ACCESS(UNSUPPORTED_GCSegmentSize, W("GCSegmentSize"), "Specifies the managed heap segment size")
RETAIL_CONFIG_DWORD_INFO_DIRECT_ACCESS(UNSUPPORTED_GCLOHCompact, W("GCLOHCompact"), "Specifies the LOH compaction mode")
-RETAIL_CONFIG_DWORD_INFO(EXTERNAL_gcAllowVeryLargeObjects, W("gcAllowVeryLargeObjects"), 0, "allow allocation of 2GB+ objects on GC heap")
+RETAIL_CONFIG_DWORD_INFO(EXTERNAL_gcAllowVeryLargeObjects, W("gcAllowVeryLargeObjects"), 1, "allow allocation of 2GB+ objects on GC heap")
RETAIL_CONFIG_DWORD_INFO_EX(EXTERNAL_GCStress, W("GCStress"), 0, "trigger GCs at regular intervals", CLRConfig::REGUTIL_default)
CONFIG_DWORD_INFO_EX(INTERNAL_GcStressOnDirectCalls, W("GcStressOnDirectCalls"), 0, "whether to trigger a GC on direct calls", CLRConfig::REGUTIL_default)
RETAIL_CONFIG_DWORD_INFO(EXTERNAL_GCStressStart, W("GCStressStart"), 0, "start GCStress after N stress GCs have been attempted")
@@ -562,13 +562,13 @@ CONFIG_DWORD_INFO_EX(INTERNAL_JitLoopHoistStats, W("JitLoopHoistStats"), 0, "Dis
CONFIG_DWORD_INFO_EX(INTERNAL_JitDebugLogLoopCloning, W("JitDebugLogLoopCloning"), 0, "In debug builds log places where loop cloning optimizations are performed on the fast path.", CLRConfig::REGUTIL_default);
CONFIG_DWORD_INFO_EX(INTERNAL_JitVNMapSelLimit, W("JitVNMapSelLimit"), 0, "If non-zero, assert if # of VNF_MapSelect applications considered reaches this", CLRConfig::REGUTIL_default)
RETAIL_CONFIG_DWORD_INFO(INTERNAL_JitVNMapSelBudget, W("JitVNMapSelBudget"), 100, "Max # of MapSelect's considered for a particular top-level invocation.")
-#if defined(_TARGET_AMD64_)
+#if defined(_TARGET_AMD64_) || defined(_TARGET_X86_)
#define EXTERNAL_FeatureSIMD_Default 1
#define EXTERNAL_JitEnableAVX_Default 1
-#else // !defined(_TARGET_AMD64_)
+#else // !defined(_TARGET_AMD64_) && !defined(_TARGET_X86_)
#define EXTERNAL_FeatureSIMD_Default 0
#define EXTERNAL_JitEnableAVX_Default 0
-#endif // !defined(_TARGET_AMD64_)
+#endif // !defined(_TARGET_AMD64_) && !defined(_TARGET_X86_)
RETAIL_CONFIG_DWORD_INFO_EX(EXTERNAL_FeatureSIMD, W("FeatureSIMD"), EXTERNAL_FeatureSIMD_Default, "Enable SIMD support with companion SIMDVector.dll", CLRConfig::REGUTIL_default)
RETAIL_CONFIG_DWORD_INFO_EX(EXTERNAL_EnableAVX, W("EnableAVX"), EXTERNAL_JitEnableAVX_Default, "Enable AVX instruction set for wide operations as default", CLRConfig::REGUTIL_default)
diff --git a/src/inc/clrnt.h b/src/inc/clrnt.h
index 0e082c79d5..08a93a4961 100644
--- a/src/inc/clrnt.h
+++ b/src/inc/clrnt.h
@@ -837,6 +837,13 @@ RtlVirtualUnwind_Unsafe(
#ifdef _TARGET_X86_
#ifndef FEATURE_PAL
+//
+// x86 ABI does not define RUNTIME_FUNCTION. Define our own to allow unification between x86 and other platforms.
+//
+typedef struct _RUNTIME_FUNCTION {
+ DWORD BeginAddress;
+ DWORD UnwindData;
+} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
typedef struct _DISPATCHER_CONTEXT {
_EXCEPTION_REGISTRATION_RECORD* RegistrationPointer;
@@ -845,6 +852,43 @@ typedef struct _DISPATCHER_CONTEXT {
#endif // !FEATURE_PAL
#define RUNTIME_FUNCTION__BeginAddress(prf) (prf)->BeginAddress
+#define RUNTIME_FUNCTION__SetBeginAddress(prf,addr) ((prf)->BeginAddress = (addr))
+
+#ifdef WIN64EXCEPTIONS
+#include "win64unwind.h"
+
+FORCEINLINE
+DWORD
+RtlpGetFunctionEndAddress (
+ __in PT_RUNTIME_FUNCTION FunctionEntry,
+ __in TADDR ImageBase
+ )
+{
+ PUNWIND_INFO pUnwindInfo = (PUNWIND_INFO)(ImageBase + FunctionEntry->UnwindData);
+
+ return FunctionEntry->BeginAddress + pUnwindInfo->FunctionLength;
+}
+
+#define RUNTIME_FUNCTION__EndAddress(prf, ImageBase) RtlpGetFunctionEndAddress(prf, ImageBase)
+
+#define RUNTIME_FUNCTION__GetUnwindInfoAddress(prf) (prf)->UnwindData
+#define RUNTIME_FUNCTION__SetUnwindInfoAddress(prf, addr) do { (prf)->UnwindData = (addr); } while(0)
+
+EXTERN_C
+NTSYSAPI
+PEXCEPTION_ROUTINE
+NTAPI
+RtlVirtualUnwind (
+ __in DWORD HandlerType,
+ __in DWORD ImageBase,
+ __in DWORD ControlPc,
+ __in PRUNTIME_FUNCTION FunctionEntry,
+ __inout PT_CONTEXT ContextRecord,
+ __out PVOID *HandlerData,
+ __out PDWORD EstablisherFrame,
+ __inout_opt PT_KNONVOLATILE_CONTEXT_POINTERS ContextPointers
+ );
+#endif // WIN64EXCEPTIONS
#endif // _TARGET_X86_
diff --git a/src/inc/corcompile.h b/src/inc/corcompile.h
index 3b517ae212..9cd072008a 100644
--- a/src/inc/corcompile.h
+++ b/src/inc/corcompile.h
@@ -22,11 +22,11 @@
#error FEATURE_PREJIT is required for this file
#endif // FEATURE_PREJIT
-#if !defined(_TARGET_X86_)
+#if !defined(_TARGET_X86_) || defined(FEATURE_PAL)
#ifndef WIN64EXCEPTIONS
#define WIN64EXCEPTIONS
#endif
-#endif // !_TARGET_X86_
+#endif // !_TARGET_X86_ || FEATURE_PAL
#include <cor.h>
#include <corhdr.h>
@@ -72,16 +72,6 @@ typedef DPTR(struct CORCOMPILE_IMPORT_SECTION)
PTR_CORCOMPILE_IMPORT_SECTION;
#ifdef _TARGET_X86_
-#ifndef FEATURE_PAL
-//
-// x86 ABI does not define RUNTIME_FUNCTION. Define our own to allow unification between x86 and other platforms.
-//
-typedef struct _RUNTIME_FUNCTION {
- DWORD BeginAddress;
- DWORD UnwindData;
-} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
-
-#endif // !FEATURE_PAL
typedef DPTR(RUNTIME_FUNCTION) PTR_RUNTIME_FUNCTION;
@@ -1466,14 +1456,13 @@ class ICorCompilationDomain
/*********************************************************************************
* ICorCompileInfo is the interface for a compiler
*********************************************************************************/
-
// Define function pointer ENCODEMODULE_CALLBACK
-typedef DWORD (__stdcall *ENCODEMODULE_CALLBACK)(LPVOID pModuleContext, CORINFO_MODULE_HANDLE moduleHandle);
+typedef DWORD (*ENCODEMODULE_CALLBACK)(LPVOID pModuleContext, CORINFO_MODULE_HANDLE moduleHandle);
// Define function pointer DEFINETOKEN_CALLBACK
-typedef void (__stdcall *DEFINETOKEN_CALLBACK)(LPVOID pModuleContext, CORINFO_MODULE_HANDLE moduleHandle, DWORD index, mdTypeRef* token);
+typedef void (*DEFINETOKEN_CALLBACK)(LPVOID pModuleContext, CORINFO_MODULE_HANDLE moduleHandle, DWORD index, mdTypeRef* token);
-typedef HRESULT (__stdcall *CROSS_DOMAIN_CALLBACK)(LPVOID pArgs);
+typedef HRESULT (*CROSS_DOMAIN_CALLBACK)(LPVOID pArgs);
class ICorCompileInfo
{
diff --git a/src/inc/corguids.nativeproj b/src/inc/corguids.nativeproj
deleted file mode 100644
index 762cdf142e..0000000000
--- a/src/inc/corguids.nativeproj
+++ /dev/null
@@ -1,438 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <OutputName>corguids</OutputName>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <Ltcg>false</Ltcg>
- <MidlTlbDir>$(IntermediateOutputDirectory)</MidlTlbDir>
- <NoCrt>true</NoCrt>
- <DevdivPublishFolder>$(EnlistmentRootPath)\public\devdiv\inc</DevdivPublishFolder>
-
- <Mktypliblink>$(LINKER) -Incremental:NO</Mktypliblink>
- <CDefines>$(CDefines);REAL_TLB_FILE=$(IntermediateOutputDirectory)\mscoree_tlb.tlb;REAL_METAHOST_TLB_FILE=$(IntermediateOutputDirectory)\metahost.tlb;REAL_CORDEBUG_TLB_FILE=$(IntermediateOutputDirectory)\cordebug.tlb</CDefines>
- <CrimsonEventsManifest>ClrEtwAll.man</CrimsonEventsManifest>
-
- <!-- Selects the appropriate private events manifest -->
- <CrimsonEventsManifestSourcePath>$(Clrbase)\src\VM\$(CrimsonEventsManifest)</CrimsonEventsManifestSourcePath>
-
- <CrimsonPubliceventsManifest>CLR-ETW.man</CrimsonPubliceventsManifest>
- <MofEventsManifest>ClrEtwAll.mof</MofEventsManifest>
- <MofEventsUninstallmanifest>ClrEtwAll.mof.uninstall</MofEventsUninstallmanifest>
- <MofPubliceventsManifest>CLR.mof</MofPubliceventsManifest>
- <MofPubliceventsTempmanifest>CLR-ETW.mof</MofPubliceventsTempmanifest>
- <MofPubliceventsUninstallmanifest>CLR.mof.uninstall</MofPubliceventsUninstallmanifest>
- <ClrEtwAllHeader>ClrEtwAll.h</ClrEtwAllHeader>
- <ClrEtwAllMainHeader>ClrEtwAllMain.h</ClrEtwAllMainHeader>
- <ClrEtwDummyHeader>etmdummy.h</ClrEtwDummyHeader>
- <EvxmlEventsManifest>ClrEtwAll.evxml</EvxmlEventsManifest>
- <GenetwGeneratePubliceventsManifest>-g publicman</GenetwGeneratePubliceventsManifest>
- <McWinmetapath>$(SdkIncPath)\winmeta.xml</McWinmetapath>
- <McEventmanpath>$(SdkIncPath)\eventman.xsd</McEventmanpath>
- <McFlags>$(McFlags) /w $(McEventmanpath) /W $(McWinmetapath) -b -co</McFlags>
-
- <!-- On desktop CLR 4.5+, only Vista+ is supported, and we can omit the backward-compatible gunk, which also
- frees us up to use Vista+-only syntax, which is required for new events like MethodILToNativeMap -->
- <McAdditionalOptions>$(McFlags) -um -p FireEtw</McAdditionalOptions>
- </PropertyGroup>
-
- <!-- List of files in corguids.lib is shared with cross compilation via corguids.targets -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\inc\corguids.targets" />
-
- <ItemGroup>
- <DataFile Include="$(Clrbase)\src\inc\cor.h" />
- <DataFile Include="$(Clrbase)\src\inc\CorHdr.h" />
- <DataFile Include="$(Clrbase)\src\inc\corhlpr.h" />
- <DataFile Include="$(Clrbase)\src\inc\corhlpr.cpp" />
- <DataFile Include="$(Clrbase)\src\inc\CorTpoolHdr.h" />
- <DataFile Include="$(Clrbase)\src\inc\isolation.h" />
- <DataFile Include="$(Clrbase)\src\inc\ICeeFileGen.h" />
- <DataFile Include="$(Clrbase)\src\inc\openum.h" />
- <DataFile Include="$(Clrbase)\src\inc\VerError.h" />
- <DataFile Include="$(Clrbase)\src\inc\clrdata.idl" />
- <DataFile Include="$(Clrbase)\src\inc\cordebug.idl" />
- <DataFile Include="$(Clrbase)\src\inc\xcordebug.idl" />
- <DataFile Include="$(Clrbase)\src\inc\corprof.idl" />
- <DataFile Include="$(Clrbase)\src\inc\corpub.idl" />
- <DataFile Include="$(Clrbase)\src\inc\fusion.idl" />
- <DataFile Include="$(Clrbase)\src\inc\gchost.idl" />
- <DataFile Include="$(Clrbase)\src\inc\ivalidator.idl" />
- <DataFile Include="$(Clrbase)\src\inc\IVEHandler.idl" />
- <DataFile Include="$(Clrbase)\src\inc\metahost.idl" />
- <DataFile Include="$(Clrbase)\src\inc\MSCOREE.IDL" />
- <DataFile Include="$(Clrbase)\src\inc\opcode.def" />
- <DataFile Include="$(IntermediateOutputDirectory)\CorError.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\clrdata.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\cordebug.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\xcordebug.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\corprof.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\corpub.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\fusion.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\gchost.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\ivalidator.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\ivehandler.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\metahost.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\mscoree.h" />
- <DataFile Include="$(IntermediateOutputDirectory)\\corsym.h" />
- <DataFile Include="$(ClrLibPath)\$(OutputName).lib" />
- <DataFile Include="$(Clrbase)\src\inc\CLRPrivAppXHosting.idl" />
- <DataFile Include="$(IntermediateOutputDirectory)\CLRPrivAppXHosting.h" />
- <DataFile Include="$(Clrbase)\src\inc\CLRPrivHosting.idl" />
- <DataFile Include="$(IntermediateOutputDirectory)\CLRPrivHosting.h" />
- <DataFile Include="$(Clrbase)\src\inc\CLRPrivBinding.idl" />
- <DataFile Include="$(IntermediateOutputDirectory)\CLRPrivBinding.h" />
- <DataFile Include="$(Clrbase)\src\inc\CLRPrivRuntimeBinders.idl" />
- <DataFile Include="$(IntermediateOutputDirectory)\CLRPrivRuntimeBinders.h" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(FeatureCoreClr)' == 'true'">
- <CoreClrSDKHeader Include= "mscoree.h">
- <SrcOverRide>$(IntermediateOutputDirectory)\</SrcOverRide>
- </CoreClrSDKHeader>
- </ItemGroup>
-
- <!-- These files aren't in place until PublishLinked, and we copy from that location to binaries -->
- <ItemGroup Condition="'$(FeatureCoreClr)' != 'true'">
- <PostPublishCopyFile Include="$(IntermediateOutputDirectory)\mscoree.realtlb">
- <PostPublishCopyFileDest>$(ClrInterLibPath)\mscoree.tlb</PostPublishCopyFileDest>
- </PostPublishCopyFile>
- <PostPublishCopyFile Include="$(IntermediateOutputDirectory)\metahost.realtlb">
- <PostPublishCopyFileDest>$(ClrLibPath)\metahost.tlb</PostPublishCopyFileDest>
- </PostPublishCopyFile>
- <PostPublishCopyFile Include="$(IntermediateOutputDirectory)\cordebug.realtlb">
- <PostPublishCopyFileDest>$(ClrLibPath)\cordebug.tlb</PostPublishCopyFileDest>
- </PostPublishCopyFile>
- </ItemGroup>
-
- <ItemGroup Condition="'$(FeatureCoreClr)' != 'true'">
- <PostPublishCopyFile Include="$(ClrInterLibPath)\mscoree.tlb">
- <PostPublishCopyFileDest>$(BinariesDirectory)\mscoree.tlb</PostPublishCopyFileDest>
- </PostPublishCopyFile>
- <PostPublishCopyFile Include="$(ClrLibPath)\metahost.tlb">
- <PostPublishCopyFileDest>$(BinariesDirectory)\metahost.tlb</PostPublishCopyFileDest>
- </PostPublishCopyFile>
- <PostPublishCopyFile Include="$(ClrLibPath)\cordebug.tlb">
- <PostPublishCopyFileDest>$(BinariesDirectory)\cordebug.tlb</PostPublishCopyFileDest>
- </PostPublishCopyFile>
- </ItemGroup>
- <ItemGroup>
- <RCResourceFile Include="$(Clrbase)\src\inc\mscoree_mktlb.rc">
- <IncludeInLib>false</IncludeInLib>
- </RCResourceFile>
- <RCResourceFile Include="$(Clrbase)\src\inc\metahost_mktlb.rc">
- <IncludeInLib>false</IncludeInLib>
- </RCResourceFile>
- <RCResourceFile Include="$(Clrbase)\src\inc\cordebug_mktlb.rc">
- <IncludeInLib>false</IncludeInLib>
- </RCResourceFile>
- </ItemGroup>
- <!-- remove when switching to vctasks-->
- <Target Name="VCLibLinkOptionsMapping" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
- <PropertyGroup>
- <BuildGeneratedDependsOn>
- GenerateOpcodeRefops;
- GenerateCorHdr;
- OptimizeFxRetarget;
- $(BuildGeneratedDependsOn);
- </BuildGeneratedDependsOn>
- </PropertyGroup>
- <Target Name="PostPublishCopy" Inputs="@(PostPublishCopyFile)" AfterTargets="LinkTlbs" BeforeTargets="Publish" Outputs="@(PostPublishCopyFile->'%(PostPublishCopyFileDest)')">
- <Copy SourceFiles="@(PostPublishCopyFile)" DestinationFiles="%(PostPublishCopyFile.PostPublishCopyFileDest)" />
- </Target>
- <ItemGroup>
- <Clean Include="$(IntermediateOutputDirectory)\opcode.refops" />
- </ItemGroup>
- <Target Name="GenerateOpcodeRefops" Inputs="$(Clrbase)\src\inc\opcode.def" Outputs="$(IntermediateOutputDirectory)\opcode.refops" BeforeTargets="PublishGenerated">
- <Exec Command="$(PerlCommand) genrops.pl &lt; opcode.def &gt; $(IntermediateOutputDirectory)\opcode.refops" StandardOutputImportance="Normal" />
- </Target>
- <ItemGroup>
- <Clean Include="$(IntermediateOutputDirectory)\corerror.h;$(IntermediateOutputDirectory)\mscorurt.rc" />
- </ItemGroup>
- <Target Name="GenerateCorHdr" Inputs="$(Clrbase)\src\inc\corerror.xml" Outputs="$(IntermediateOutputDirectory)\corerror.h;$(IntermediateOutputDirectory)\mscorurt.rc">
- <Exec Command="$(ManagedToolsPath)\genheaders.exe $(Clrbase)\src\inc\corerror.xml &quot;$(IntermediateOutputDirectory)\corerror.h&quot; &quot;$(IntermediateOutputDirectory)\mscorurt.rc&quot;" StandardOutputImportance="Normal" />
- </Target>
- <!-- Etw event manifest targets -->
- <ItemGroup>
- <MessageCompile Include="$(CrimsonEventsManifestSourcePath)" />
- <MessageCompile Include="$(IntermediateOutputDirectory)\$(CrimsonPubliceventsManifest)" />
- </ItemGroup>
- <Target Name="GenerateClrEtwMan" Inputs="$(CrimsonEventsManifestSourcePath)" Outputs="$(IntermediateOutputDirectory)\$(CrimsonPubliceventsManifest)" BeforeTargets="MessageCompile">
- <Exec Command="$(PerlCommand) $(Clrbase)\bin\genetw.pl $(GenetwGeneratePubliceventsManifest) -i $(CrimsonEventsManifestSourcePath) -o $(IntermediateOutputDirectory)\$(CrimsonPubliceventsManifest)" StandardOutputImportance="Normal" />
- </Target>
- <Target Name="OptimizeFxRetarget" Inputs="$(Clrbase)\src\inc\fxretarget.h" Outputs="$(IntermediateOutputDirectory)\fxretarget_generated.hpp" BeforeTargets="PublishGenerated">
- <Exec Command="$(Clrbase)\bin\OptimizeFxRetarget.exe $(Clrbase)\src\inc\fxretarget.h $(IntermediateOutputDirectory)\fxretarget_generated.hpp" />
- </Target>
- <ItemGroup>
- <Clean Include="
- $(IntermediateOutputDirectory)\$(ClrEtwAllHeader);
- $(IntermediateOutputDirectory)\$(ClrEtwAllMainHeader);
- $(IntermediateOutputDirectory)\$(ClrEtwDummyHeader);
- $(BinariesDirectory)\$(MofEventsUninstallmanifest);
- $(BinariesDirectory)\$(MofPubliceventsUninstallmanifest);
- $(BinariesDirectory)\$(EvxmlEventsManifest);
- $(BinariesDirectory)\$(CrimsonEventsManifest);
- $(BinariesDirectory)\$(CrimsonPubliceventsManifest)" />
- </ItemGroup>
- <Target Name="GenerateClrEtwAllHeader" Inputs="$(CrimsonEventsManifestSourcePath);$(IntermediateOutputDirectory)\$(ClrEtwAllHeader)" Outputs="$(IntermediateOutputDirectory)\$(ClrEtwAllMainHeader);$(BinariesDirectory)\$(MofEventsUninstallmanifest);$(BinariesDirectory)\$(MofPubliceventsUninstallmanifest);$(BinariesDirectory)\$(EvxmlEventsManifest);$(BinariesDirectory)\$(CrimsonEventsManifest);$(BinariesDirectory)\$(CrimsonPubliceventsManifest);$(IntermediateOutputDirectory)\$(ClrEtwDummyHeader)" AfterTargets="MessageCompile">
- <Exec Command="$(PerlCommand) $(Clrbase)\bin\genetw.pl -g header -i $(CrimsonEventsManifestSourcePath) -o $(IntermediateOutputDirectory)\$(ClrEtwAllMainHeader) -h $(IntermediateOutputDirectory)\$(ClrEtwAllHeader)" StandardOutputImportance="Normal" />
- <Exec Command="$(PerlCommand) $(Clrbase)\bin\genetw.pl -g dummy -i $(IntermediateOutputDirectory)\$(ClrEtwAllHeader) -o $(IntermediateOutputDirectory)\$(ClrEtwDummyHeader)" StandardOutputImportance="Normal"/>
- <Exec Command="$(PerlCommand) $(Clrbase)\bin\genetw.pl -g mofuninstall -i $(CrimsonEventsManifestSourcePath) -o $(BinariesDirectory)\$(MofEventsUninstallmanifest)" StandardOutputImportance="Normal" />
- <Exec Command="$(PerlCommand) $(Clrbase)\bin\genetw.pl -g mofuninstall -i $(IntermediateOutputDirectory)\$(CrimsonPubliceventsManifest) -o $(BinariesDirectory)\$(MofPubliceventsUninstallmanifest)" StandardOutputImportance="Normal" />
- <Exec Command="$(PerlCommand) $(Clrbase)\bin\genetw.pl -g evxml -i $(CrimsonEventsManifestSourcePath) -o $(BinariesDirectory)\$(EvxmlEventsManifest)" StandardOutputImportance="Normal"/>
- <Exec Command="$(PerlCommand) $(Clrbase)\bin\genetw.pl -g batchplaceholders -i $(CrimsonEventsManifestSourcePath) -o $(BinariesDirectory)\$(CrimsonEventsManifest)" StandardOutputImportance="Normal"/>
- <Exec Command="$(PerlCommand) $(Clrbase)\bin\genetw.pl -g exeplaceholders -i $(IntermediateOutputDirectory)\$(CrimsonPubliceventsManifest) -o $(BinariesDirectory)\$(CrimsonPubliceventsManifest) -v $(CLRRuntimeVersion)" StandardOutputImportance="Normal"/>
- </Target>
- <ItemGroup>
- <Clean Include="prep_tlbs" />
- </ItemGroup>
- <PropertyGroup>
- <TlbLinkSeh Condition="'$(BuildArchitecture)' == 'i386'">true</TlbLinkSeh>
- <TlbLinkOptions>/DYNAMICBASE /debug:none</TlbLinkOptions>
- <TlbLinkOptions Condition="'$(BuildArchitecture)' == 'i386'">$(TlbLinkOptions) /NXCOMPAT</TlbLinkOptions>
- <TlbLinkMachineType>$(BuildArchitecture)</TlbLinkMachineType>
- <TlbLinkMachineType Condition="'$(BuildArchitecture)' == 'i386'">x86</TlbLinkMachineType>
- </PropertyGroup>
- <ItemGroup Condition="'$(FeatureCoreClr)' != 'true'">
- <LinkTlb Include="$(IntermediateOutputPath)mscoree_mktlb.res">
- <OutFile>$(IntermediateOutputPath)mscoree.realtlb</OutFile>
- </LinkTlb>
- <LinkTlb Include="$(IntermediateOutputPath)metahost_mktlb.res">
- <OutFile>$(IntermediateOutputPath)metahost.realtlb</OutFile>
- </LinkTlb>
- <LinkTlb Include="$(IntermediateOutputPath)cordebug_mktlb.res">
- <OutFile>$(IntermediateOutputPath)cordebug.realtlb</OutFile>
- </LinkTlb>
- </ItemGroup>
- <Target Name="LinkTlbs" Inputs="@(LinkTlb);" Outputs="@(LinkTlb->'%(OutFile)')" BeforeTargets="PublishFilesLinked" DependsOnTargets="VCLibLinkOptionsMapping">
- <Link
- Sources="%(LinkTlb.Identity)"
- TargetMachine="$(VCLinkLibMachineType)"
- GenerateManifest="true"
- ManifestFile="$(IntermediateOutputPath)prep_tlbs.mt"
- LinkIncremental="false"
- IgnoreAllDefaultLibraries="true"
- NoEntryPoint="true"
- LinkDLL="true"
- OutputFile="%(LinkTlb.OutFile)"
- AdditionalOptions="$(TlbLinkOptions)"
- TreatLinkerWarningAsErrors="$(Internal_TlbLinkWarningsAsErrors)"
- ImageHasSafeExceptionHandlers="$(TlbLinkSeh)"
- StackCommitSize="0"
- StackReserveSize="0"
- HeapCommitSize="0"
- HeapReserveSize="0">
-
- </Link>
-
- <ItemGroup>
- <DataFile Include="@(LinkTlb->'%(OutFile)')" Condition="'$(CopyTlbToOutput)' == 'true'"/>
- </ItemGroup>
- </Target>
-
- <Target Name="EnsureCopyProductFiles"
- Condition="'$(FeatureCoreclr)' == 'true'"
- AfterTargets="MIDL" >
- <CallTarget Targets="CopyProductFiles"/>
- </Target>
-
- <ItemGroup>
- <PublishPartGenerated Include="$(ClrInterLibPath)\mscoree.tlb" Condition="'$(FeatureCoreclr)' != 'true' and Exists('$(ClrLibPath)\mscoree.tlb')">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\binderngen.h" Condition="'$(FeatureFusion)'=='true'">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\fusionpriv.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\assemblyusagelog.h" Condition="'$(FeatureCoreclr)' != 'true'">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(Clrbase)\src\inc\isolationpriv.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(Clrbase)\src\inc\mscoreepriv.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
-
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\clrdata.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\cordebug.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\xcordebug.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\corprof.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\corpub.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\mscorsvc.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\fusion.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(Clrbase)\src\inc\isolation.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\gchost.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ivalidator.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ivehandler.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(Clrbase)\src\inc\LegacyActivationShim.h" Condition="'$(FeatureCoreclr)' != 'true'">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(Clrbase)\src\inc\LegacyActivationShimUtil.h" Condition="'$(FeatureCoreclr)' != 'true'">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(Clrbase)\src\inc\LegacyActivationShimDelayLoad.h" Condition="'$(FeatureCoreclr)' != 'true'">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\metahost.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\sospriv.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\mscoree.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\corsym.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(Clrbase)\src\inc\CLRPrivAppXHosting.idl">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\CLRPrivAppXHosting.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
-
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\CorError.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\CLRInternal.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\xclrdata.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ClrEtwAll.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ClrEtwAllMain.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\etmdummy.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ClrPrivHosting.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\CLRPrivRuntimeBinders.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\CLRPrivBinding.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ClrEtwAll.rc">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ClrEtwAll_MSG00001.bin">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ClrEtwAllTEMP.BIN">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\mscoruef.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\tlbimpexp.h">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\mscorurt.rc">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ClrEtwAll_MSG00001.bin">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\ClrEtwAllTEMP.BIN">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- <PublishPartGenerated Include="$(IntermediateOutputDirectory)\fxretarget_generated.hpp">
- <Visibility>Intra</Visibility>
- <FileType>Include</FileType>
- </PublishPartGenerated>
- </ItemGroup>
- <ItemGroup>
- <PublishPartCompiled Include="$(ClrLibPath)\$(OutputName).lib" Condition="'$(FeatureCoreclr)'!='true'">
- <Visibility>Inter</Visibility>
- <FileType>Binary</FileType>
- </PublishPartCompiled>
- </ItemGroup>
-</Project>
diff --git a/src/inc/corguids.targets b/src/inc/corguids.targets
deleted file mode 100644
index 1479b0ba6d..0000000000
--- a/src/inc/corguids.targets
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <ItemGroup>
- <CCompile Include="$(IntermediateOutputDirectory)/cordebug_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/xcordebug_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/clrdata_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/clrinternal_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/xclrdata_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/corprof_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/corpub_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/IValidator_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/IVEHandler_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/gchost_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/fusionpriv_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/mscorsvc_i.c" Condition="'$(FeaturePrejit)'=='true'" />
- <CCompile Include="$(IntermediateOutputDirectory)/tlbimpexp_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/CLRPrivAppXHosting_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/CLRPrivBinding_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/CLRPrivHosting_i.c" />
- <CCompile Include="$(IntermediateOutputDirectory)/CLRPrivRuntimeBinders_i.c" />
- </ItemGroup>
- <ItemGroup>
- <Idl Include="$(Clrbase)\src\inc\metahost.idl" />
- <Idl Include="$(Clrbase)\src\inc\mscoree.idl" />
- <Idl Include="$(Clrbase)\src\inc\clrinternal.idl" />
- <Idl Include="$(Clrbase)\src\inc\mscoree_tlb.idl" />
- <Idl Include="$(Clrbase)\src\inc\fusion.idl" />
- <Idl Include="$(Clrbase)\src\inc\fusionpriv.idl" />
- <Idl Include="$(Clrbase)\src\inc\binderngen.idl" Condition="'$(FeatureFusion)'=='true'" />
- <Idl Include="$(Clrbase)\src\inc\clrdata.idl" />
- <Idl Include="$(Clrbase)\src\inc\xclrdata.idl" />
- <Idl Include="$(Clrbase)\src\inc\cordebug.idl" />
- <Idl Include="$(Clrbase)\src\inc\xcordebug.idl" />
- <Idl Include="$(Clrbase)\src\inc\sospriv.idl" />
- <Idl Include="$(Clrbase)\src\inc\corprof.idl" />
- <Idl Include="$(Clrbase)\src\inc\corpub.idl" />
- <Idl Include="$(Clrbase)\src\inc\IVEHandler.idl" />
- <Idl Include="$(Clrbase)\src\inc\IValidator.idl" />
- <Idl Include="$(Clrbase)\src\inc\mscorsvc.idl" Condition="'$(FeaturePrejit)'=='true'" />
- <Idl Include="$(Clrbase)\src\inc\TlbImpExp.idl" />
- <Idl Include="$(Clrbase)\src\inc\gchost.idl" />
- <Idl Include="$(Clrbase)\src\inc\mscoruef.idl" />
- <Idl Include="$(Clrbase)\src\inc\assemblyusagelog.idl" Condition="'$(FeatureCoreclr)'!='true'" />
- <Idl Include="$(Clrbase)\src\inc\CLRPrivAppXHosting.idl" />
- <Idl Include="$(Clrbase)\src\inc\CLRPrivBinding.idl" />
- <Idl Include="$(Clrbase)\src\inc\CLRPrivHosting.idl" />
- <Idl Include="$(Clrbase)\src\inc\CLRPrivRuntimeBinders.idl" />
- <Idl Include="$(ClrBase)\src\inc\corsym.idl">
- <CompileInterface>true</CompileInterface>
- <CompileProxy>false</CompileProxy>
- </Idl>
- </ItemGroup>
-</Project>
diff --git a/src/inc/corinfo.h b/src/inc/corinfo.h
index e899a23379..f515fcbd6d 100644
--- a/src/inc/corinfo.h
+++ b/src/inc/corinfo.h
@@ -988,6 +988,8 @@ enum CorInfoIntrinsics
CORINFO_INTRINSIC_MemoryBarrier,
CORINFO_INTRINSIC_GetCurrentManagedThread,
CORINFO_INTRINSIC_GetManagedThreadId,
+ CORINFO_INTRINSIC_ByReference_Ctor,
+ CORINFO_INTRINSIC_ByReference_Value,
CORINFO_INTRINSIC_Count,
CORINFO_INTRINSIC_Illegal = -1, // Not a true intrinsic,
diff --git a/src/inc/crosscomp.h b/src/inc/crosscomp.h
index 3d54166331..494ca7c007 100644
--- a/src/inc/crosscomp.h
+++ b/src/inc/crosscomp.h
@@ -68,7 +68,7 @@ typedef struct DECLSPEC_ALIGN(8) _T_CONTEXT {
NEON128 Q[16];
ULONGLONG D[32];
DWORD S[32];
- } DUMMYUNIONNAME;
+ };
//
// Debug registers
@@ -88,6 +88,7 @@ typedef struct DECLSPEC_ALIGN(8) _T_CONTEXT {
// each frame function.
//
+#ifndef FEATURE_PAL
typedef struct _RUNTIME_FUNCTION {
DWORD BeginAddress;
DWORD UnwindData;
@@ -114,6 +115,7 @@ typedef struct _UNWIND_HISTORY_TABLE {
DWORD HighAddress;
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
+#endif // !FEATURE_PAL
//
diff --git a/src/inc/daccess.h b/src/inc/daccess.h
index 6d9fb3265f..3e3a62c746 100644
--- a/src/inc/daccess.h
+++ b/src/inc/daccess.h
@@ -784,7 +784,7 @@ BOOL DacUnwindStackFrame(T_CONTEXT * pContext, T_KNONVOLATILE_CONTEXT_POINTERS*
#if defined(FEATURE_PAL)
// call back through data target to unwind out-of-process
-HRESULT DacVirtualUnwind(ULONG32 threadId, PCONTEXT context, PT_KNONVOLATILE_CONTEXT_POINTERS contextPointers);
+HRESULT DacVirtualUnwind(ULONG32 threadId, PT_CONTEXT context, PT_KNONVOLATILE_CONTEXT_POINTERS contextPointers);
#endif // FEATURE_PAL
#ifdef FEATURE_MINIMETADATA_IN_TRIAGEDUMPS
diff --git a/src/inc/eetwain.h b/src/inc/eetwain.h
index 502d181962..54e9a34464 100644
--- a/src/inc/eetwain.h
+++ b/src/inc/eetwain.h
@@ -36,6 +36,9 @@
#define USE_GC_INFO_DECODER
#endif
+#if (defined(_TARGET_X86_) && !defined(FEATURE_PAL)) || defined(_TARGET_AMD64_)
+#define HAS_QUICKUNWIND
+#endif
#if CHECK_APP_DOMAIN_LEAKS
#define CHECK_APP_DOMAIN GC_CALL_CHECK_APP_DOMAIN
@@ -161,7 +164,7 @@ enum
};
#ifndef DACCESS_COMPILE
-
+#ifndef WIN64EXCEPTIONS
virtual void FixContext(ContextType ctxType,
EHContext *ctx,
EECodeInfo *pCodeInfo,
@@ -171,9 +174,10 @@ virtual void FixContext(ContextType ctxType,
CodeManState *pState,
size_t ** ppShadowSP, // OUT
size_t ** ppEndRegion) = 0; // OUT
-
+#endif // !WIN64EXCEPTIONS
#endif // #ifndef DACCESS_COMPILE
+#ifdef _TARGET_X86_
/*
Gets the ambient stack pointer value at the given nesting level within
the method.
@@ -183,6 +187,7 @@ virtual TADDR GetAmbientSP(PREGDISPLAY pContext,
DWORD dwRelOffset,
DWORD nestingLevel,
CodeManState *pState) = 0;
+#endif // _TARGET_X86_
/*
Get the number of bytes used for stack parameters.
@@ -190,6 +195,7 @@ virtual TADDR GetAmbientSP(PREGDISPLAY pContext,
*/
virtual ULONG32 GetStackParameterSize(EECodeInfo* pCodeInfo) = 0;
+#ifndef CROSSGEN_COMPILE
/*
Unwind the current stack frame, i.e. update the virtual register
set in pContext. This will be similar to the state after the function
@@ -203,6 +209,7 @@ virtual bool UnwindStackFrame(PREGDISPLAY pContext,
unsigned flags,
CodeManState *pState,
StackwalkCacheUnwindInfo *pUnwindInfo) = 0;
+#endif // CROSSGEN_COMPILE
/*
Is the function currently at a "GC safe point" ?
@@ -222,6 +229,7 @@ virtual unsigned FindEndOfLastInterruptibleRegion(unsigned curOffset,
GCInfoToken gcInfoToken) = 0;
#endif // _TARGET_AMD64_ && _DEBUG
+#ifndef CROSSGEN_COMPILE
/*
Enumerate all live object references in that function using
the virtual register set. Same reference location cannot be enumerated
@@ -235,13 +243,17 @@ virtual bool EnumGcRefs(PREGDISPLAY pContext,
GCEnumCallback pCallback,
LPVOID hCallBack,
DWORD relOffsetOverride = NO_OVERRIDE_OFFSET) = 0;
+#endif // !CROSSGEN_COMPILE
+#if !defined(DACCESS_COMPILE) && !defined(CROSSGEN_COMPILE)
/*
Return the address of the local security object reference
(if available).
*/
virtual OBJECTREF* GetAddrOfSecurityObject(CrawlFrame *pCF) = 0;
+#endif // !DACCESS_COMPILE && !CROSSGEN_COMPILE
+#ifndef CROSSGEN_COMPILE
/*
For a non-static method, "this" pointer is passed in as argument 0.
However, if there is a "ldarga 0" or "starg 0" in the IL,
@@ -254,18 +266,22 @@ virtual OBJECTREF* GetAddrOfSecurityObject(CrawlFrame *pCF) = 0;
*/
virtual OBJECTREF GetInstance(PREGDISPLAY pContext,
EECodeInfo* pCodeInfo) = 0;
+#endif // !CROSSGEN_COMPILE
+#ifndef CROSSGEN_COMPILE
/*
Returns the extra argument passed to to shared generic code if it is still alive.
Returns NULL in all other cases.
*/
virtual PTR_VOID GetParamTypeArg(PREGDISPLAY pContext,
EECodeInfo * pCodeInfo) = 0;
+#endif // !CROSSGEN_COMPILE
// Returns the type of the context parameter (this, methodtable, methoddesc, or none)
virtual GenericParamContextType GetParamContextType(PREGDISPLAY pContext,
EECodeInfo * pCodeInfo) = 0;
+#ifndef CROSSGEN_COMPILE
/*
Returns the offset of the GuardStack cookie if it exists.
Returns NULL if there is no cookie.
@@ -273,7 +289,9 @@ virtual GenericParamContextType GetParamContextType(PREGDISPLAY pContext,
virtual void * GetGSCookieAddr(PREGDISPLAY pContext,
EECodeInfo * pCodeInfo,
CodeManState * pState) = 0;
+#endif
+#ifndef USE_GC_INFO_DECODER
/*
Returns true if the given IP is in the given method's prolog or an epilog.
*/
@@ -288,6 +306,7 @@ virtual bool IsInSynchronizedRegion(
DWORD relOffset,
GCInfoToken gcInfoToken,
unsigned flags) = 0;
+#endif // !USE_GC_INFO_DECODER
/*
Returns the size of a given function as reported in the GC info (does
@@ -302,15 +321,18 @@ Returns the ReturnKind of a given function as reported in the GC info.
virtual ReturnKind GetReturnKind(GCInfoToken gcInfotoken) = 0;
+#ifndef USE_GC_INFO_DECODER
/*
Returns the size of the frame (barring localloc)
*/
virtual unsigned int GetFrameSize(GCInfoToken gcInfoToken) = 0;
+#endif // USE_GC_INFO_DECODER
#ifndef DACCESS_COMPILE
/* Debugger API */
+#ifndef WIN64EXCEPTIONS
virtual const BYTE* GetFinallyReturnAddr(PREGDISPLAY pReg)=0;
virtual BOOL IsInFilter(GCInfoToken gcInfoToken,
@@ -325,6 +347,7 @@ virtual BOOL LeaveFinally(GCInfoToken gcInfoToken,
virtual void LeaveCatch(GCInfoToken gcInfoToken,
unsigned offset,
PCONTEXT pCtx)=0;
+#endif // WIN64EXCEPTIONS
#ifdef EnC_SUPPORTED
@@ -368,7 +391,7 @@ public:
#ifndef DACCESS_COMPILE
-
+#ifndef WIN64EXCEPTIONS
/*
Last chance for the runtime support to do fixups in the context
before execution continues inside a filter, catch handler, or finally
@@ -383,9 +406,10 @@ void FixContext(ContextType ctxType,
CodeManState *pState,
size_t ** ppShadowSP, // OUT
size_t ** ppEndRegion); // OUT
-
+#endif // !WIN64EXCEPTIONS
#endif // #ifndef DACCESS_COMPILE
+#ifdef _TARGET_X86_
/*
Gets the ambient stack pointer value at the given nesting level within
the method.
@@ -396,6 +420,7 @@ TADDR GetAmbientSP(PREGDISPLAY pContext,
DWORD dwRelOffset,
DWORD nestingLevel,
CodeManState *pState);
+#endif // _TARGET_X86_
/*
Get the number of bytes used for stack parameters.
@@ -404,6 +429,7 @@ TADDR GetAmbientSP(PREGDISPLAY pContext,
virtual
ULONG32 GetStackParameterSize(EECodeInfo* pCodeInfo);
+#ifndef CROSSGEN_COMPILE
/*
Unwind the current stack frame, i.e. update the virtual register
set in pContext. This will be similar to the state after the function
@@ -419,7 +445,9 @@ bool UnwindStackFrame(
unsigned flags,
CodeManState *pState,
StackwalkCacheUnwindInfo *pUnwindInfo);
+#endif // CROSSGEN_COMPILE
+#ifdef HAS_QUICKUNWIND
enum QuickUnwindFlag
{
UnwindCurrentStackFrame,
@@ -436,6 +464,7 @@ void QuickUnwindStackFrame(
PREGDISPLAY pRD,
StackwalkCacheEntry *pCacheEntry,
QuickUnwindFlag flag);
+#endif // HAS_QUICKUNWIND
/*
Is the function currently at a "GC safe point" ?
@@ -457,6 +486,7 @@ unsigned FindEndOfLastInterruptibleRegion(unsigned curOffset,
GCInfoToken gcInfoToken);
#endif // _TARGET_AMD64_ && _DEBUG
+#ifndef CROSSGEN_COMPILE
/*
Enumerate all live object references in that function using
the virtual register set. Same reference location cannot be enumerated
@@ -471,6 +501,7 @@ bool EnumGcRefs(PREGDISPLAY pContext,
GCEnumCallback pCallback,
LPVOID hCallBack,
DWORD relOffsetOverride = NO_OVERRIDE_OFFSET);
+#endif // !CROSSGEN_COMPILE
#ifdef FEATURE_CONSERVATIVE_GC
// Temporary conservative collection, for testing purposes, until we have
@@ -482,6 +513,7 @@ bool EnumGcRefsConservative(PREGDISPLAY pRD,
LPVOID hCallBack);
#endif // FEATURE_CONSERVATIVE_GC
+#ifdef _TARGET_X86_
/*
Return the address of the local security object reference
using data that was previously cached before in UnwindStackFrame
@@ -490,15 +522,21 @@ bool EnumGcRefsConservative(PREGDISPLAY pRD,
static OBJECTREF* GetAddrOfSecurityObjectFromCachedInfo(
PREGDISPLAY pRD,
StackwalkCacheUnwindInfo * stackwalkCacheUnwindInfo);
+#endif // _TARGET_X86_
+#if !defined(DACCESS_COMPILE) && !defined(CROSSGEN_COMPILE)
virtual
OBJECTREF* GetAddrOfSecurityObject(CrawlFrame *pCF) DAC_UNEXPECTED();
+#endif // !DACCESS_COMPILE && !CROSSGEN_COMPILE
+#ifndef CROSSGEN_COMPILE
virtual
OBJECTREF GetInstance(
PREGDISPLAY pContext,
EECodeInfo * pCodeInfo);
+#endif // !CROSSGEN_COMPILE
+#ifndef CROSSGEN_COMPILE
/*
Returns the extra argument passed to to shared generic code if it is still alive.
Returns NULL in all other cases.
@@ -506,12 +544,13 @@ OBJECTREF GetInstance(
virtual
PTR_VOID GetParamTypeArg(PREGDISPLAY pContext,
EECodeInfo * pCodeInfo);
+#endif // !CROSSGEN_COMPILE
// Returns the type of the context parameter (this, methodtable, methoddesc, or none)
virtual GenericParamContextType GetParamContextType(PREGDISPLAY pContext,
EECodeInfo * pCodeInfo);
-#if defined(WIN64EXCEPTIONS) && !defined(CROSSGEN_COMPILE)
+#if defined(WIN64EXCEPTIONS) && defined(USE_GC_INFO_DECODER) && !defined(CROSSGEN_COMPILE)
/*
Returns the generics token. This is used by GetInstance() and GetParamTypeArg() on WIN64.
*/
@@ -524,8 +563,9 @@ PTR_VOID GetExactGenericsToken(SIZE_T baseStackSlot,
EECodeInfo * pCodeInfo);
-#endif // WIN64EXCEPTIONS && !CROSSGEN_COMPILE
+#endif // WIN64EXCEPTIONS && USE_GC_INFO_DECODER && !CROSSGEN_COMPILE
+#ifndef CROSSGEN_COMPILE
/*
Returns the offset of the GuardStack cookie if it exists.
Returns NULL if there is no cookie.
@@ -534,8 +574,10 @@ virtual
void * GetGSCookieAddr(PREGDISPLAY pContext,
EECodeInfo * pCodeInfo,
CodeManState * pState);
+#endif
+#ifndef USE_GC_INFO_DECODER
/*
Returns true if the given IP is in the given method's prolog or an epilog.
*/
@@ -553,6 +595,7 @@ bool IsInSynchronizedRegion(
DWORD relOffset,
GCInfoToken gcInfoToken,
unsigned flags);
+#endif // !USE_GC_INFO_DECODER
/*
Returns the size of a given function.
@@ -565,25 +608,29 @@ Returns the ReturnKind of a given function.
*/
virtual ReturnKind GetReturnKind(GCInfoToken gcInfotoken);
+#ifndef USE_GC_INFO_DECODER
/*
Returns the size of the frame (barring localloc)
*/
virtual
unsigned int GetFrameSize(GCInfoToken gcInfoToken);
+#endif // USE_GC_INFO_DECODER
#ifndef DACCESS_COMPILE
+#ifndef WIN64EXCEPTIONS
virtual const BYTE* GetFinallyReturnAddr(PREGDISPLAY pReg);
-virtual BOOL LeaveFinally(GCInfoToken gcInfoToken,
- unsigned offset,
- PCONTEXT pCtx);
virtual BOOL IsInFilter(GCInfoToken gcInfoToken,
unsigned offset,
PCONTEXT pCtx,
DWORD curNestLevel);
+virtual BOOL LeaveFinally(GCInfoToken gcInfoToken,
+ unsigned offset,
+ PCONTEXT pCtx);
virtual void LeaveCatch(GCInfoToken gcInfoToken,
unsigned offset,
PCONTEXT pCtx);
+#endif // WIN64EXCEPTIONS
#ifdef EnC_SUPPORTED
/*
@@ -602,7 +649,7 @@ HRESULT FixContextForEnC(PCONTEXT pCtx,
#endif // #ifndef DACCESS_COMPILE
-#ifndef _TARGET_X86_
+#ifdef WIN64EXCEPTIONS
static void EnsureCallerContextIsValid( PREGDISPLAY pRD, StackwalkCacheEntry* pCacheEntry, EECodeInfo * pCodeInfo = NULL );
static size_t GetCallerSp( PREGDISPLAY pRD );
#endif
@@ -613,6 +660,13 @@ HRESULT FixContextForEnC(PCONTEXT pCtx,
};
+#ifdef _TARGET_X86_
+bool UnwindStackFrame(PREGDISPLAY pContext,
+ EECodeInfo *pCodeInfo,
+ unsigned flags,
+ CodeManState *pState,
+ StackwalkCacheUnwindInfo *pUnwindInfo);
+#endif
/*****************************************************************************
<TODO>ToDo: Do we want to include JIT/IL/target.h? </TODO>
diff --git a/src/inc/gcinfodecoder.h b/src/inc/gcinfodecoder.h
index 6d4850ad67..5151616229 100644
--- a/src/inc/gcinfodecoder.h
+++ b/src/inc/gcinfodecoder.h
@@ -451,6 +451,7 @@ private:
GcSlotDesc* m_pLastSlot;
};
+#ifdef USE_GC_INFO_DECODER
class GcInfoDecoder
{
public:
@@ -678,6 +679,7 @@ private:
}
}
};
+#endif // USE_GC_INFO_DECODER
#endif // _GC_INFO_DECODER_
diff --git a/src/inc/iceefilegen.h b/src/inc/iceefilegen.h
index 58c1ebc249..c33a7b12ee 100644
--- a/src/inc/iceefilegen.h
+++ b/src/inc/iceefilegen.h
@@ -10,8 +10,6 @@
** This will typically be used by compilers to generate their compiled **
** output executable. **
** **
- ** The implemenation lives in mscorpe.dll **
- ** **
*****************************************************************************/
/*
@@ -27,15 +25,8 @@
ICLRRuntimeInfo * pCLRRuntimeInfo;
pMetaHost->GetRuntime(wszClrVersion, IID_ICLRRuntimeInfo, &pCLRRuntimeInfo);
- // Step #2 ... Load mscorpe.dll and get its entrypoints
- HMODULE hModule;
- pCLRRuntimeInfo->LoadLibrary(L"mscorpe.dll", &hModule);
-
- PFN_CreateICeeFileGen pfnCreateICeeFileGen = (PFN_CreateICeeFileGen)::GetProcAddress("CreateICeeFileGen"); // Windows API
- PFN_DestroyICeeFileGen pfnDestroyICeeFileGen = (PFN_DestroyICeeFileGen)::GetProcAddress("DestroyICeeFileGen"); // Windows API
-
- // Step #3 ... Use mscorpe.dll APIs
- pfnCreateICeeFileGen(...); // Get a ICeeFileGen
+ // Step #2 ... use mscorpe APIs to create a file generator
+ CreateICeeFileGen(...); // Get a ICeeFileGen
CreateCeeFile(...); // Get a HCEEFILE (called for every output file needed)
SetOutputFileName(...); // Set the name for the output file
@@ -44,7 +35,7 @@
EmitMetaDataEx(pEmit); // Write out the metadata
GenerateCeeFile(...); // Write out the file. Implicitly calls LinkCeeFile and FixupCeeFile
- pfnDestroyICeeFileGen(...); // Release the ICeeFileGen object
+ DestroyICeeFileGen(...); // Release the ICeeFileGen object
*/
@@ -58,10 +49,8 @@ class ICeeFileGen;
typedef void *HCEEFILE;
-#ifdef FEATURE_CORECLR
EXTERN_C HRESULT __stdcall CreateICeeFileGen(ICeeFileGen** pCeeFileGen);
EXTERN_C HRESULT __stdcall DestroyICeeFileGen(ICeeFileGen ** ppCeeFileGen);
-#endif
typedef HRESULT (__stdcall * PFN_CreateICeeFileGen)(ICeeFileGen ** ceeFileGen); // call this to instantiate an ICeeFileGen interface
typedef HRESULT (__stdcall * PFN_DestroyICeeFileGen)(ICeeFileGen ** ceeFileGen); // call this to delete an ICeeFileGen
diff --git a/src/inc/mscorpesxswrapper.h b/src/inc/mscorpesxswrapper.h
deleted file mode 100644
index 52656f6711..0000000000
--- a/src/inc/mscorpesxswrapper.h
+++ /dev/null
@@ -1,125 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-// File: MscorpeSxSWrapper.h
-//
-
-//
-// This file defines a wrapper for SxS version of mscorpe.dll (dynamically loaded via shim).
-//
-
-#pragma once
-
-#include "utilcode.h"
-
-#include "iceefilegen.h"
-
-//
-// Wrapper for calls into mscorpehost.dll (SxS version of mscorpe.dll).
-// Template parameter will load the DLL as it is required in the context.
-//
-// Note that _LoadMscorpeDll method can be called more than once and in parallel from more threads if race
-// happens.
-//
-template <HRESULT (* _LoadMscorpeDll)(HMODULE * phModule)>
-class MscorpeSxSWrapper
-{
-private:
- // mscorpehost.dll module, if not NULL, entry points are already initialized
- static Volatile<HMODULE> s_hModule;
- // mscorpehost.dll entry points
- static Volatile<PFN_CreateICeeFileGen> s_pfnCreateICeeFileGen;
- static Volatile<PFN_DestroyICeeFileGen> s_pfnDestroyICeeFileGen;
-
- // Loads the DLL and sets all statics
- static HRESULT Init();
-
-public:
-
- // Wrapper of file:ICeeFileGen.cpp#CreateICeeFileGen from mscorpehost.dll
- static HRESULT CreateICeeFileGen(ICeeFileGen ** ppCeeFileGen)
- {
- HRESULT hr = S_OK;
- IfFailGo(Init());
- hr = s_pfnCreateICeeFileGen(ppCeeFileGen);
- ErrExit:
- return hr;
- }
-
- // Wrapper of file:ICeeFileGen.cpp#DestroyICeeFileGen from mscorpehost.dll
- static HRESULT DestroyICeeFileGen(ICeeFileGen ** ppCeeFileGen)
- {
- HRESULT hr = S_OK;
- IfFailGo(Init());
- hr = s_pfnDestroyICeeFileGen(ppCeeFileGen);
- ErrExit:
- return hr;
- }
-
-#ifdef _DEBUG
- // Returns TRUE if the DLL has been already loaded
- static BOOL Debug_IsLoaded()
- {
- return (s_hModule != (HMODULE)NULL);
- }
-#endif //_DEBUG
-}; // class MscorpeSxS
-
-template <HRESULT (* _LoadMscorpeDll)(HMODULE * phModule)>
-// code:MscorpeSxS statics initialization
-Volatile<HMODULE> MscorpeSxSWrapper<_LoadMscorpeDll>::s_hModule = NULL;
-
-template <HRESULT (* _LoadMscorpeDll)(HMODULE * phModule)>
-Volatile<PFN_CreateICeeFileGen> MscorpeSxSWrapper<_LoadMscorpeDll>::s_pfnCreateICeeFileGen = NULL;
-
-template <HRESULT (* _LoadMscorpeDll)(HMODULE * phModule)>
-Volatile<PFN_DestroyICeeFileGen> MscorpeSxSWrapper<_LoadMscorpeDll>::s_pfnDestroyICeeFileGen = NULL;
-
-// Loads the DLL and sets all statics
-//static
-template <HRESULT (* _LoadMscorpeDll)(HMODULE * phModule)>
-HRESULT
-MscorpeSxSWrapper<_LoadMscorpeDll>::Init()
-{
- HRESULT hr = S_OK;
-
- if (s_hModule != (HMODULE)NULL)
- {
- return S_OK;
- }
-
- // Local mscorpehost.dll module
- HMODULE hModule = NULL;
- // Local mscorpehost.dll entry points
- PFN_CreateICeeFileGen pfnCreateICeeFileGen = NULL;
- PFN_DestroyICeeFileGen pfnDestroyICeeFileGen = NULL;
-
- // Load mscorpehost.dll and initialize it
- IfFailGo(_LoadMscorpeDll(&hModule));
- _ASSERTE(hModule != NULL);
-
- pfnCreateICeeFileGen = (PFN_CreateICeeFileGen)GetProcAddress(hModule, "CreateICeeFileGen");
- if (pfnCreateICeeFileGen == NULL)
- {
- IfFailGo(COR_E_EXECUTIONENGINE);
- }
-
- pfnDestroyICeeFileGen = (PFN_DestroyICeeFileGen)GetProcAddress(hModule, "DestroyICeeFileGen");
- if (pfnDestroyICeeFileGen == NULL)
- {
- IfFailGo(COR_E_EXECUTIONENGINE);
- }
-
-ErrExit:
- if (SUCCEEDED(hr))
- {
- // First publish mscorpehost.dll entry points
- s_pfnCreateICeeFileGen = pfnCreateICeeFileGen;
- s_pfnDestroyICeeFileGen = pfnDestroyICeeFileGen;
- // Then we can publish/initialize the mscorpehost.dll module
- s_hModule = hModule;
- }
-
- return hr;
-} // MscorpeSxSWrapper::Init
diff --git a/src/inc/palclr.h b/src/inc/palclr.h
index 85c802f65b..9b78578732 100644
--- a/src/inc/palclr.h
+++ b/src/inc/palclr.h
@@ -617,6 +617,8 @@
#define MAX_PATH_FNAME MAX_PATH /* max. length of full pathname */
#endif
+#define __clr_reserved __reserved
+
#endif // __PALCLR_H__
#include "palclr_win.h"
diff --git a/src/inc/readytorun.h b/src/inc/readytorun.h
index 9204862e17..ebc557b6f1 100644
--- a/src/inc/readytorun.h
+++ b/src/inc/readytorun.h
@@ -279,7 +279,7 @@ enum ReadyToRunHelper
READYTORUN_HELPER_DblRound = 0xE2,
READYTORUN_HELPER_FltRound = 0xE3,
-#ifndef _TARGET_X86_
+#ifdef WIN64EXCEPTIONS
// Personality rountines
READYTORUN_HELPER_PersonalityRoutine = 0xF0,
READYTORUN_HELPER_PersonalityRoutineFilterFunclet = 0xF1,
diff --git a/src/inc/regdisp.h b/src/inc/regdisp.h
index 09a6a38f62..d08c44c904 100644
--- a/src/inc/regdisp.h
+++ b/src/inc/regdisp.h
@@ -8,19 +8,71 @@
#ifdef DEBUG_REGDISPLAY
class Thread;
+struct REGDISPLAY;
+void CheckRegDisplaySP (REGDISPLAY *pRD);
+#endif // DEBUG_REGDISPLAY
+
+struct REGDISPLAY_BASE {
+ PT_CONTEXT pContext; // This is the context of the active call frame;
+ // either returned by GetContext or provided at
+ // exception time.
+ //
+ // This will be used to resume execution, so
+ // do NOT trash it! But DO update any static
+ // registers here.
+
+#ifdef WIN64EXCEPTIONS
+ PT_CONTEXT pCurrentContext; // [trashed] points to current Context of stackwalk
+ PT_CONTEXT pCallerContext; // [trashed] points to the Context of the caller during stackwalk -- used for GC crawls
+
+ // [trashed] points to current context pointers of stackwalk
+ T_KNONVOLATILE_CONTEXT_POINTERS *pCurrentContextPointers;
+ // [trashed] points to the context pointers of the caller during stackwalk -- used for GC crawls
+ T_KNONVOLATILE_CONTEXT_POINTERS *pCallerContextPointers;
+
+ BOOL IsCallerContextValid; // TRUE if pCallerContext really contains the caller's context
+ BOOL IsCallerSPValid; // Don't add usage of this field. This is only temporary.
+
+ T_CONTEXT ctxOne; // used by stackwalk
+ T_CONTEXT ctxTwo; // used by stackwalk
+
+ T_KNONVOLATILE_CONTEXT_POINTERS ctxPtrsOne; // used by stackwalk
+ T_KNONVOLATILE_CONTEXT_POINTERS ctxPtrsTwo; // used by stackwalk
+#endif // WIN64EXCEPTIONS
+
+#ifdef DEBUG_REGDISPLAY
+ Thread *_pThread;
#endif // DEBUG_REGDISPLAY
+ TADDR SP;
+ TADDR ControlPC;
+};
+
+inline PCODE GetControlPC(REGDISPLAY_BASE *pRD) {
+ LIMITED_METHOD_DAC_CONTRACT;
+ return (PCODE)(pRD->ControlPC);
+}
+
+inline TADDR GetRegdisplaySP(REGDISPLAY_BASE *pRD) {
+ LIMITED_METHOD_DAC_CONTRACT;
+
+ return pRD->SP;
+}
+
+inline void SetRegdisplaySP(REGDISPLAY_BASE *pRD, LPVOID sp) {
+ LIMITED_METHOD_DAC_CONTRACT;
+
+ pRD->SP = (TADDR)sp;
+}
#if defined(_TARGET_X86_)
-struct REGDISPLAY {
- PCONTEXT pContext; // points to current Context; either
- // returned by GetContext or provided
- // at exception time.
+struct REGDISPLAY : public REGDISPLAY_BASE {
+#ifndef WIN64EXCEPTIONS
// TODO: Unify with pCurrentContext / pCallerContext used on 64-bit
PCONTEXT pContextForUnwind; // scratch context for unwinding
- // used to preserve context saved in the frame that
+ // used to preserve context saved in the frame that
// could be otherwise wiped by the unwinding
DWORD * pEdi;
@@ -31,52 +83,68 @@ struct REGDISPLAY {
DWORD * pEax;
DWORD * pEbp;
- DWORD Esp; // (Esp) Stack Pointer
- PCODE ControlPC;
- TADDR PCTAddr;
+#endif // !WIN64EXCEPTIONS
-};
+#ifndef WIN64EXCEPTIONS
-inline TADDR GetRegdisplaySP(REGDISPLAY *display) {
- LIMITED_METHOD_DAC_CONTRACT;
+#define REG_METHODS(reg) \
+ inline PDWORD Get##reg##Location(void) { return p##reg; } \
+ inline void Set##reg##Location(PDWORD p##reg) { this->p##reg = p##reg; }
- return (TADDR)display->Esp;
-}
+#else // !WIN64EXCEPTIONS
-inline void SetRegdisplaySP(REGDISPLAY *display, LPVOID sp ) {
- LIMITED_METHOD_DAC_CONTRACT;
+#define REG_METHODS(reg) \
+ inline PDWORD Get##reg##Location(void) { return pCurrentContextPointers->reg; } \
+ inline void Set##reg##Location(PDWORD p##reg) { pCurrentContextPointers->reg = p##reg; }
- (display->Esp) = (DWORD)(size_t)sp;
-}
+#endif // WIN64EXCEPTIONS
+
+ REG_METHODS(Eax)
+ REG_METHODS(Ecx)
+ REG_METHODS(Edx)
+
+ REG_METHODS(Ebx)
+ REG_METHODS(Esi)
+ REG_METHODS(Edi)
+ REG_METHODS(Ebp)
+
+#undef REG_METHODS
+
+ TADDR PCTAddr;
+};
inline TADDR GetRegdisplayFP(REGDISPLAY *display) {
LIMITED_METHOD_DAC_CONTRACT;
- return (TADDR)*(display->pEbp);
+ return (TADDR)*display->GetEbpLocation();
}
inline LPVOID GetRegdisplayFPAddress(REGDISPLAY *display) {
LIMITED_METHOD_CONTRACT;
- return (LPVOID)display->pEbp;
+ return (LPVOID)display->GetEbpLocation();
}
-inline PCODE GetControlPC(REGDISPLAY *display) {
- LIMITED_METHOD_DAC_CONTRACT;
-
- return display->ControlPC;
-}
// This function tells us if the given stack pointer is in one of the frames of the functions called by the given frame
inline BOOL IsInCalleesFrames(REGDISPLAY *display, LPVOID stackPointer) {
LIMITED_METHOD_CONTRACT;
+#ifdef WIN64EXCEPTIONS
+ return stackPointer < ((LPVOID)(display->SP));
+#else
return (TADDR)stackPointer < display->PCTAddr;
+#endif
}
inline TADDR GetRegdisplayStackMark(REGDISPLAY *display) {
LIMITED_METHOD_DAC_CONTRACT;
+#ifdef WIN64EXCEPTIONS
+ _ASSERTE(GetRegdisplaySP(display) == GetSP(display->pCurrentContext));
+ return GetRegdisplaySP(display);
+#else
return display->PCTAddr;
+#endif
}
#elif defined(_WIN64)
@@ -110,42 +178,18 @@ typedef struct _Arm64VolatileContextPointer
};
} Arm64VolatileContextPointer;
#endif //_TARGET_ARM64_
-struct REGDISPLAY {
- PT_CONTEXT pContext; // This is the context of the active call frame. This
- // will be used to resume execution, so do not use trash it!
- // But DO update any static registers here.
-
- PT_CONTEXT pCurrentContext; // [trashed] points to current Context of stackwalk
- PT_CONTEXT pCallerContext; // [trashed] points to the Context of the caller during stackwalk -- used for GC crawls
-
- size_t ControlPC;
-
- size_t SP;
-
- T_KNONVOLATILE_CONTEXT_POINTERS *pCurrentContextPointers; // [trashed] points to current context pointers of stackwalk
- T_KNONVOLATILE_CONTEXT_POINTERS *pCallerContextPointers; // [trashed] points to the context pointers of the caller during stackwalk -- used for GC crawls
+struct REGDISPLAY : public REGDISPLAY_BASE {
#ifdef _TARGET_ARM64_
Arm64VolatileContextPointer volatileCurrContextPointers;
#endif
- BOOL IsCallerContextValid; // TRUE if pCallerContext really contains the caller's context
- BOOL IsCallerSPValid; // Don't add usage of this field. This is only temporary.
-
- T_CONTEXT ctxOne; // used by stackwalk
- T_CONTEXT ctxTwo; // used by stackwalk
-
- T_KNONVOLATILE_CONTEXT_POINTERS ctxPtrsOne; // used by stackwalk
- T_KNONVOLATILE_CONTEXT_POINTERS ctxPtrsTwo; // used by stackwalk
-
-#ifdef DEBUG_REGDISPLAY
- Thread *_pThread;
-#endif // DEBUG_REGDISPLAY
+ REGDISPLAY()
+ {
+ // Initialize
+ memset(this, 0, sizeof(REGDISPLAY));
+ }
};
-inline TADDR GetRegdisplaySP(REGDISPLAY *display) {
- LIMITED_METHOD_DAC_CONTRACT;
- return (TADDR)display->SP;
-}
inline TADDR GetRegdisplayFP(REGDISPLAY *display) {
LIMITED_METHOD_CONTRACT;
@@ -157,28 +201,6 @@ inline TADDR GetRegdisplayFPAddress(REGDISPLAY *display) {
return NULL;
}
-inline PCODE GetControlPC(REGDISPLAY *display) {
- LIMITED_METHOD_DAC_CONTRACT;
- return (PCODE)(display->ControlPC);
-}
-
-#ifdef DEBUG_REGDISPLAY
-void CheckRegDisplaySP (REGDISPLAY *pRD);
-#endif // DEBUG_REGDISPLAY
-
-inline void SyncRegDisplayToCurrentContext(REGDISPLAY* pRD)
-{
- LIMITED_METHOD_CONTRACT;
-
- pRD->SP = (INT_PTR)GetSP(pRD->pCurrentContext);
-
-#ifdef DEBUG_REGDISPLAY
- CheckRegDisplaySP(pRD);
-#endif // DEBUG_REGDISPLAY
-
- pRD->ControlPC = INT_PTR(GetIP(pRD->pCurrentContext));
-}
-
// This function tells us if the given stack pointer is in one of the frames of the functions called by the given frame
inline BOOL IsInCalleesFrames(REGDISPLAY *display, LPVOID stackPointer)
{
@@ -204,21 +226,6 @@ inline TADDR GetRegdisplayStackMark(REGDISPLAY *display)
#endif // _TARGET_AMD64_
}
-// This needs to be implemented for platforms that have funclets.
-inline LPVOID GetRegdisplayReturnValue(REGDISPLAY *display)
-{
- LIMITED_METHOD_CONTRACT;
-
-#if defined(_TARGET_AMD64_)
- return (LPVOID)display->pCurrentContext->Rax;
-#elif defined(_TARGET_ARM64_)
- return (LPVOID)display->pCurrentContext->X0;
-#else
- PORTABILITY_ASSERT("GetRegdisplayReturnValue NYI for this platform (Regdisp.h)");
- return NULL;
-#endif
-}
-
#elif defined(_TARGET_ARM_)
// ResumableFrame is pushed on the stack before
@@ -239,31 +246,11 @@ typedef struct _ArmVolatileContextPointer
PDWORD R12;
} ArmVolatileContextPointer;
-struct REGDISPLAY {
- PT_CONTEXT pContext; // points to current Context; either
- // returned by GetContext or provided
- // at exception time.
-
- PT_CONTEXT pCurrentContext; // [trashed] points to current Context of stackwalk
- PT_CONTEXT pCallerContext; // [trashed] points to the Context of the caller during stackwalk -- used for GC crawls
-
- T_KNONVOLATILE_CONTEXT_POINTERS ctxPtrsOne; // used by stackwalk
- T_KNONVOLATILE_CONTEXT_POINTERS ctxPtrsTwo; // used by stackwalk
-
- PT_KNONVOLATILE_CONTEXT_POINTERS pCurrentContextPointers;
- PT_KNONVOLATILE_CONTEXT_POINTERS pCallerContextPointers;
+struct REGDISPLAY : public REGDISPLAY_BASE {
ArmVolatileContextPointer volatileCurrContextPointers;
- BOOL IsCallerContextValid; // TRUE if pCallerContext really contains the caller's context
- BOOL IsCallerSPValid; // Don't add usage of this field. This is only temporary.
-
- DWORD SP;
- DWORD ControlPC;
DWORD * pPC; // processor neutral name
- T_CONTEXT ctxOne; // used by stackwalk
- T_CONTEXT ctxTwo; // used in ExceptionTracker::InitializeCrawlFrame
-
REGDISPLAY()
{
// Initialize regdisplay
@@ -272,28 +259,8 @@ struct REGDISPLAY {
// Setup the pointer to ControlPC field
pPC = &ControlPC;
}
-
-#ifdef DEBUG_REGDISPLAY
- Thread *_pThread;
-#endif // DEBUG_REGDISPLAY
-
};
-#ifdef DEBUG_REGDISPLAY
-void CheckRegDisplaySP (REGDISPLAY *pRD);
-#endif // DEBUG_REGDISPLAY
-
-inline TADDR GetRegdisplaySP(REGDISPLAY *display) {
- LIMITED_METHOD_DAC_CONTRACT;
- return (TADDR)(size_t)display->SP;
-}
-
-inline PCODE GetControlPC(REGDISPLAY *display) {
- LIMITED_METHOD_DAC_CONTRACT;
- return (PCODE)(display->ControlPC);
-}
-
-
// This function tells us if the given stack pointer is in one of the frames of the functions called by the given frame
inline BOOL IsInCalleesFrames(REGDISPLAY *display, LPVOID stackPointer) {
LIMITED_METHOD_CONTRACT;
@@ -307,42 +274,15 @@ inline TADDR GetRegdisplayStackMark(REGDISPLAY *display) {
return GetSP(display->pCallerContext);
}
-inline void SyncRegDisplayToCurrentContext(REGDISPLAY* pRD)
-{
- LIMITED_METHOD_CONTRACT;
- pRD->SP = (DWORD)GetSP(pRD->pCurrentContext);
- pRD->ControlPC = (DWORD)GetIP(pRD->pCurrentContext);
-}
-
-// This needs to be implemented for platforms that have funclets.
-inline LPVOID GetRegdisplayReturnValue(REGDISPLAY *display)
-{
- LIMITED_METHOD_CONTRACT;
-
- return (LPVOID)display->pCurrentContext->R0;
-}
-
#else // none of the above processors
PORTABILITY_WARNING("RegDisplay functions are not implemented on this platform.")
-struct REGDISPLAY {
- PCONTEXT pContext; // points to current Context
- size_t SP;
+struct REGDISPLAY : public REGDISPLAY_BASE {
size_t * FramePtr;
SLOT * pPC;
};
-inline PCODE GetControlPC(REGDISPLAY *display) {
- LIMITED_METHOD_CONTRACT;
- return (PCODE) NULL;
-}
-
-inline LPVOID GetRegdisplaySP(REGDISPLAY *display) {
- LIMITED_METHOD_DAC_CONTRACT;
- return (LPVOID)display->SP;
-}
-
inline TADDR GetRegdisplayFP(REGDISPLAY *display) {
LIMITED_METHOD_CONTRACT;
return (TADDR)*(display->FramePtr);
@@ -359,6 +299,49 @@ inline LPVOID GetRegdisplayStackMark(REGDISPLAY *display) {
#endif
+#if defined(_WIN64) || defined(_TARGET_ARM_) || (defined(_TARGET_X86_) && defined(WIN64EXCEPTIONS))
+// This needs to be implemented for platforms that have funclets.
+inline LPVOID GetRegdisplayReturnValue(REGDISPLAY *display)
+{
+ LIMITED_METHOD_CONTRACT;
+
+#if defined(_TARGET_AMD64_)
+ return (LPVOID)display->pCurrentContext->Rax;
+#elif defined(_TARGET_ARM64_)
+ return (LPVOID)display->pCurrentContext->X0;
+#elif defined(_TARGET_ARM_)
+ return (LPVOID)display->pCurrentContext->R0;
+#elif defined(_TARGET_X86_)
+ return (LPVOID)display->pCurrentContext->Eax;
+#else
+ PORTABILITY_ASSERT("GetRegdisplayReturnValue NYI for this platform (Regdisp.h)");
+ return NULL;
+#endif
+}
+
+inline void SyncRegDisplayToCurrentContext(REGDISPLAY* pRD)
+{
+ LIMITED_METHOD_CONTRACT;
+
+#if defined(_WIN64)
+ pRD->SP = (INT_PTR)GetSP(pRD->pCurrentContext);
+ pRD->ControlPC = INT_PTR(GetIP(pRD->pCurrentContext));
+#elif defined(_TARGET_ARM_) // _WIN64
+ pRD->SP = (DWORD)GetSP(pRD->pCurrentContext);
+ pRD->ControlPC = (DWORD)GetIP(pRD->pCurrentContext);
+#elif defined(_TARGET_X86_) // _TARGET_ARM_
+ pRD->SP = (DWORD)GetSP(pRD->pCurrentContext);
+ pRD->ControlPC = (DWORD)GetIP(pRD->pCurrentContext);
+#else // _TARGET_X86_
+ PORTABILITY_ASSERT("SyncRegDisplayToCurrentContext");
+#endif // _TARGET_ARM_ || _TARGET_X86_
+
+#ifdef DEBUG_REGDISPLAY
+ CheckRegDisplaySP(pRD);
+#endif // DEBUG_REGDISPLAY
+}
+#endif // _WIN64 || _TARGET_ARM_ || (_TARGET_X86_ && WIN64EXCEPTIONS)
+
typedef REGDISPLAY *PREGDISPLAY;
@@ -368,6 +351,7 @@ inline void FillRegDisplay(const PREGDISPLAY pRD, PT_CONTEXT pctx, PT_CONTEXT pC
SUPPORTS_DAC;
+#ifndef WIN64EXCEPTIONS
#ifdef _TARGET_X86_
pRD->pContext = pctx;
pRD->pContextForUnwind = NULL;
@@ -378,23 +362,17 @@ inline void FillRegDisplay(const PREGDISPLAY pRD, PT_CONTEXT pctx, PT_CONTEXT pC
pRD->pEax = &(pctx->Eax);
pRD->pEcx = &(pctx->Ecx);
pRD->pEdx = &(pctx->Edx);
- pRD->Esp = pctx->Esp;
+ pRD->SP = pctx->Esp;
pRD->ControlPC = (PCODE)(pctx->Eip);
pRD->PCTAddr = (UINT_PTR)&(pctx->Eip);
-#elif defined(_WIN64)
+#else // _TARGET_X86_
+ PORTABILITY_ASSERT("FillRegDisplay");
+#endif // _TARGET_???_ (ELSE)
+
+#else // !WIN64EXCEPTIONS
pRD->pContext = pctx;
-#ifdef _TARGET_AMD64_
- for (int i = 0; i < 16; i++)
- {
- *(&pRD->ctxPtrsOne.Rax + i) = (&pctx->Rax + i);
- }
-#elif defined(_TARGET_ARM64_)
- for (int i = 0; i < 12; i++)
- {
- *(&pRD->ctxPtrsOne.X19 + i) = (&pctx->X19 + i);
- }
-#endif // _TARGET_AMD64_
+ // Setup the references
pRD->pCurrentContextPointers = &pRD->ctxPtrsOne;
pRD->pCallerContextPointers = &pRD->ctxPtrsTwo;
@@ -417,46 +395,33 @@ inline void FillRegDisplay(const PREGDISPLAY pRD, PT_CONTEXT pctx, PT_CONTEXT pC
pRD->IsCallerSPValid = TRUE; // Don't add usage of this field. This is only temporary.
}
-#ifdef DEBUG_REGDISPLAY
- pRD->_pThread = NULL;
-#endif // DEBUG_REGDISPLAY
-
- SyncRegDisplayToCurrentContext(pRD);
-#elif defined(_TARGET_ARM_)
- pRD->pContext = pctx;
-
- // Copy over the nonvolatile integer registers (R4-R11)
- for (int i = 0; i < 8; i++)
+#ifdef _TARGET_AMD64_
+ for (int i = 0; i < 16; i++)
{
- *(&pRD->ctxPtrsOne.R4 + i) = (&pctx->R4 + i);
+ *(&pRD->ctxPtrsOne.Rax + i) = (&pctx->Rax + i);
}
-
- pRD->ctxPtrsOne.Lr = &pctx->Lr;
-
- // Setup the references
- pRD->pCurrentContextPointers = &pRD->ctxPtrsOne;
- pRD->pCallerContextPointers = &pRD->ctxPtrsTwo;
-
- pRD->pCurrentContext = &(pRD->ctxOne);
- pRD->pCallerContext = &(pRD->ctxTwo);
-
- // copy the active context to initialize our stackwalk
- *(pRD->pCurrentContext) = *(pctx);
-
- // copy the caller context as well if it's specified
- if (pCallerCtx == NULL)
+#elif defined(_TARGET_ARM64_) // _TARGET_AMD64_
+ for (int i = 0; i < 12; i++)
{
- pRD->IsCallerContextValid = FALSE;
- pRD->IsCallerSPValid = FALSE; // Don't add usage of this field. This is only temporary.
+ *(&pRD->ctxPtrsOne.X19 + i) = (&pctx->X19 + i);
}
- else
+#elif defined(_TARGET_ARM_) // _TARGET_ARM64_
+ // Copy over the nonvolatile integer registers (R4-R11)
+ for (int i = 0; i < 8; i++)
{
- *(pRD->pCallerContext) = *(pCallerCtx);
- pRD->IsCallerContextValid = TRUE;
- pRD->IsCallerSPValid = TRUE; // Don't add usage of this field. This is only temporary.
+ *(&pRD->ctxPtrsOne.R4 + i) = (&pctx->R4 + i);
}
+ pRD->ctxPtrsOne.Lr = &pctx->Lr;
pRD->pPC = &pRD->pCurrentContext->Pc;
+#elif defined(_TARGET_X86_) // _TARGET_ARM_
+ for (int i = 0; i < 7; i++)
+ {
+ *(&pRD->ctxPtrsOne.Esi + i) = (&pctx->Esi + i);
+ }
+#else // _TARGET_X86_
+ PORTABILITY_ASSERT("FillRegDisplay");
+#endif // _TARGET_???_ (ELSE)
#ifdef DEBUG_REGDISPLAY
pRD->_pThread = NULL;
@@ -464,9 +429,7 @@ inline void FillRegDisplay(const PREGDISPLAY pRD, PT_CONTEXT pctx, PT_CONTEXT pC
// This will setup the PC and SP
SyncRegDisplayToCurrentContext(pRD);
-#else
- PORTABILITY_ASSERT("@NYI Platform - InitRegDisplay (Threads.cpp)");
-#endif
+#endif // !WIN64EXCEPTIONS
}
// Initialize a new REGDISPLAY/CONTEXT pair from an existing valid REGDISPLAY.
@@ -479,7 +442,9 @@ inline void CopyRegDisplay(const PREGDISPLAY pInRD, PREGDISPLAY pOutRD, T_CONTEX
T_CONTEXT* pOutCallerCtx = NULL;
-#ifdef _TARGET_X86_
+#ifndef WIN64EXCEPTIONS
+
+#if defined(_TARGET_X86_)
if (pInRD->pEdi != NULL) {pOutCtx->Edi = *pInRD->pEdi;} else {pInRD->pEdi = NULL;}
if (pInRD->pEsi != NULL) {pOutCtx->Esi = *pInRD->pEsi;} else {pInRD->pEsi = NULL;}
if (pInRD->pEbx != NULL) {pOutCtx->Ebx = *pInRD->pEbx;} else {pInRD->pEbx = NULL;}
@@ -487,15 +452,21 @@ inline void CopyRegDisplay(const PREGDISPLAY pInRD, PREGDISPLAY pOutRD, T_CONTEX
if (pInRD->pEax != NULL) {pOutCtx->Eax = *pInRD->pEax;} else {pInRD->pEax = NULL;}
if (pInRD->pEcx != NULL) {pOutCtx->Ecx = *pInRD->pEcx;} else {pInRD->pEcx = NULL;}
if (pInRD->pEdx != NULL) {pOutCtx->Edx = *pInRD->pEdx;} else {pInRD->pEdx = NULL;}
- pOutCtx->Esp = pInRD->Esp;
+ pOutCtx->Esp = pInRD->SP;
pOutCtx->Eip = pInRD->ControlPC;
-#else
+#else // _TARGET_X86_
+ PORTABILITY_ASSERT("CopyRegDisplay");
+#endif // _TARGET_???_
+
+#else // WIN64EXCEPTIONS
+
*pOutCtx = *(pInRD->pCurrentContext);
if (pInRD->IsCallerContextValid)
{
pOutCallerCtx = pInRD->pCallerContext;
}
-#endif
+
+#endif // WIN64EXCEPTIONS
if (pOutRD)
FillRegDisplay(pOutRD, pOutCtx, pOutCallerCtx);
@@ -562,6 +533,8 @@ inline void UpdateContextFromRegDisp(PREGDISPLAY pRegDisp, PT_CONTEXT pContext)
{
_ASSERTE((pRegDisp != NULL) && (pContext != NULL));
+#ifndef WIN64EXCEPTIONS
+
#if defined(_TARGET_X86_)
pContext->ContextFlags = (CONTEXT_INTEGER | CONTEXT_CONTROL);
pContext->Edi = *pRegDisp->pEdi;
@@ -571,11 +544,17 @@ inline void UpdateContextFromRegDisp(PREGDISPLAY pRegDisp, PT_CONTEXT pContext)
pContext->Eax = *pRegDisp->pEax;
pContext->Ecx = *pRegDisp->pEcx;
pContext->Edx = *pRegDisp->pEdx;
- pContext->Esp = pRegDisp->Esp;
+ pContext->Esp = pRegDisp->SP;
pContext->Eip = pRegDisp->ControlPC;
-#else
+#else // _TARGET_X86_
+ PORTABILITY_ASSERT("UpdateContextFromRegDisp");
+#endif // _TARGET_???_
+
+#else // WIN64EXCEPTIONS
+
*pContext = *pRegDisp->pCurrentContext;
-#endif
+
+#endif // WIN64EXCEPTIONS
}
diff --git a/src/inc/sortversioning.h b/src/inc/sortversioning.h
index fe3e878802..0af8095b81 100644
--- a/src/inc/sortversioning.h
+++ b/src/inc/sortversioning.h
@@ -32,8 +32,9 @@ namespace SortVersioning
__in int cchSrc,
__out_bcount_opt(cbDest) LPBYTE pDest,
__in int cbDest,
- __reserved LPVOID lpReserved,
- __reserved LPARAM lParam);
+
+ __clr_reserved LPVOID lpReserved,
+ __clr_reserved LPARAM lParam);
typedef int (*SORTCHANGECASE) (
__in PSORTHANDLE pSortHandle,
@@ -42,8 +43,8 @@ namespace SortVersioning
__in int cchSrc,
__out_ecount_opt(cchDest) LPWSTR pDest,
__in int cchDest,
- __reserved LPVOID lpReserved,
- __reserved LPARAM lParam);
+ __clr_reserved LPVOID lpReserved,
+ __clr_reserved LPARAM lParam);
typedef int (*SORTCOMPARESTRING) (
__in PSORTHANDLE pSortHandle,
@@ -52,8 +53,8 @@ namespace SortVersioning
__in int cchCount1,
__in LPCWSTR lpString2,
__in int cchCount2,
- __reserved LPVOID lpReserved,
- __reserved LPARAM lParam);
+ __clr_reserved LPVOID lpReserved,
+ __clr_reserved LPARAM lParam);
typedef int (*SORTFINDSTRING) (
__in PSORTHANDLE pSortHandle,
@@ -63,8 +64,8 @@ namespace SortVersioning
__in_ecount(cchValue) LPCWSTR lpStringValue,
__in int cchValue,
__out_opt LPINT pcchFound,
- __reserved LPVOID lpReserved,
- __reserved LPARAM lParam);
+ __clr_reserved LPVOID lpReserved,
+ __clr_reserved LPARAM lParam);
typedef BOOL (*SORTISDEFINEDSTRING) (
__in PSORTHANDLE pSortHandle,
@@ -78,8 +79,8 @@ namespace SortVersioning
__in DWORD dwFlags,
__in_ecount(cchSrc) LPCWSTR pSrc,
__in int cchSrc,
- __reserved LPVOID lpReserved,
- __reserved LPARAM lParam);
+ __clr_reserved LPVOID lpReserved,
+ __clr_reserved LPARAM lParam);
#define SORT_NAME_SIZE 85
@@ -114,8 +115,8 @@ namespace SortVersioning
__in_ecount(cchCount2) LPCWSTR lpString2,
__in int cchCount2,
__in_opt CONST NLSVERSIONINFO * lpVersionInformation,
- __reserved LPVOID lpReserved,
- __reserved LPARAM lParam );
+ __clr_reserved LPVOID lpReserved,
+ __clr_reserved LPARAM lParam );
__success(return != 0) int WINAPI SortDllCompareString(
__in PSORTHANDLE pSort,
__in DWORD dwCmpFlags,
@@ -134,8 +135,8 @@ namespace SortVersioning
__out_ecount_opt(cchDest) LPWSTR lpDestStr, // really this should be __out_awcount_opt(dwMapFlags & LCMAP_SORTKEY, cchDest)
__in int cchDest,
__in_opt CONST NLSVERSIONINFO * lpVersionInformation,
- __reserved LPVOID lpReserved,
- __reserved LPARAM lParam );
+ __clr_reserved LPVOID lpReserved,
+ __clr_reserved LPARAM lParam );
__success(return != 0) int WINAPI SortDllChangeCase(
__in PSORTHANDLE pSort,
@@ -165,8 +166,8 @@ namespace SortVersioning
__in int cchValue,
__out_opt LPINT pcchFound,
__in_opt CONST NLSVERSIONINFO * lpVersionInformation,
- __reserved LPVOID lpReserved,
- __reserved LPARAM lParam);
+ __clr_reserved LPVOID lpReserved,
+ __clr_reserved LPARAM lParam);
__success(return != 0) int WINAPI SortDllFindString(
__in PSORTHANDLE pSort,
diff --git a/src/inc/stackframe.h b/src/inc/stackframe.h
index 11977e9273..940951de31 100644
--- a/src/inc/stackframe.h
+++ b/src/inc/stackframe.h
@@ -115,16 +115,13 @@ struct CallerStackFrame : StackFrame
{
}
+#ifdef WIN64EXCEPTIONS
static inline CallerStackFrame FromRegDisplay(REGDISPLAY* pRD)
{
-#if defined(_TARGET_AMD64_) || defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
_ASSERTE(pRD->IsCallerSPValid || pRD->IsCallerContextValid);
return CallerStackFrame(GetSP(pRD->pCallerContext));
-#else // !_TARGET_AMD64_ && !_TARGET_ARM_ && !_TARGET_ARM64_
- _ASSERTE(!"CallerStackFrame::FromRegDisplay() - NYI on this platform");
- return CallerStackFrame();
-#endif // !_TARGET_AMD64_ && !_TARGET_ARM_ && !_TARGET_ARM64_
}
+#endif // WIN64EXCEPTIONS
};
#endif // __STACKFRAME_H
diff --git a/src/inc/switches.h b/src/inc/switches.h
index f52f24bc67..bb3ca28e12 100644
--- a/src/inc/switches.h
+++ b/src/inc/switches.h
@@ -37,7 +37,7 @@
#define LOGGING
#endif
-#if !defined(_TARGET_X86_)
+#if !defined(_TARGET_X86_) || defined(FEATURE_PAL)
#define WIN64EXCEPTIONS
#endif
diff --git a/src/inc/win64unwind.h b/src/inc/win64unwind.h
index 196052aca9..e4cea023b2 100644
--- a/src/inc/win64unwind.h
+++ b/src/inc/win64unwind.h
@@ -89,6 +89,14 @@ typedef union _UNWIND_CODE {
#define UNW_FLAG_UHANDLER 0x2
#define UNW_FLAG_CHAININFO 0x4
+#ifdef _TARGET_X86_
+
+typedef struct _UNWIND_INFO {
+ ULONG FunctionLength;
+} UNWIND_INFO, *PUNWIND_INFO;
+
+#else // _TARGET_X86_
+
typedef struct _UNWIND_INFO {
UCHAR Version : 3;
UCHAR Flags : 5;
@@ -114,4 +122,5 @@ typedef struct _UNWIND_INFO {
} UNWIND_INFO, *PUNWIND_INFO;
+#endif // _TARGET_X86_
#endif // _WIN64UNWIND_H_
diff --git a/src/ipcman/dirs.proj b/src/ipcman/dirs.proj
deleted file mode 100644
index 04a7daa547..0000000000
--- a/src/ipcman/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="ipcman\ipcman.nativeproj" />
- <ProjectFile Include="ipcman-staticcrt\dirs.proj" />
- <ProjectFile Include="ipcman_dac\dirs.proj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/ipcman/ipcman-staticcrt/dirs.proj b/src/ipcman/ipcman-staticcrt/dirs.proj
deleted file mode 100644
index d6abafb7e2..0000000000
--- a/src/ipcman/ipcman-staticcrt/dirs.proj
+++ /dev/null
@@ -1,17 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(FeatureDbiDebugging)'=='true'" Include="HostLocal\ipcman-staticcrt.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/ipcman/ipcman-staticcrt/ipcman-staticcrt.props b/src/ipcman/ipcman-staticcrt/ipcman-staticcrt.props
deleted file mode 100644
index f4cbade081..0000000000
--- a/src/ipcman/ipcman-staticcrt/ipcman-staticcrt.props
+++ /dev/null
@@ -1,11 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\IPCMan\ipcmanager.props" />
-
- <PropertyGroup>
- <LinkNoLibraries>true</LinkNoLibraries>
- <LinkUseCMT>true</LinkUseCMT>
- <UseMsvcrt>false</UseMsvcrt>
- </PropertyGroup>
-
-</Project>
diff --git a/src/ipcman/ipcmanager.props b/src/ipcman/ipcmanager.props
deleted file mode 100644
index f1f4018d4e..0000000000
--- a/src/ipcman/ipcmanager.props
+++ /dev/null
@@ -1,28 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <UserIncludes>$(UserIncludes);
- $(Clrbase)\src\IPCMan;
- $(Clrbase)\src\vm</UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE -DFEATURE_NO_HOST</ClAdditionalOptions>
- <OutputName>ipcmanager</OutputName>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>$(Clrbase)\src\IPCMan\stdafx.cpp</PCHCompile>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="$(Clrbase)\src\IPCMan\IPCWriterImpl.cpp" />
- <CppCompile Include="$(Clrbase)\src\IPCMan\IPCReaderImpl.cpp" />
- <CppCompile Include="$(Clrbase)\src\IPCMan\IPCSharedSrc.cpp" />
- <CppCompile Include="$(Clrbase)\src\IPCMan\IPCFuncCallImpl.cpp" />
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/src/jit/CMakeLists.txt b/src/jit/CMakeLists.txt
index 96b8c496b9..db6e5973ba 100644
--- a/src/jit/CMakeLists.txt
+++ b/src/jit/CMakeLists.txt
@@ -81,6 +81,7 @@ if(CLR_CMAKE_TARGET_ARCH_AMD64)
codegenxarch.cpp
emitxarch.cpp
lowerxarch.cpp
+ lsraxarch.cpp
simd.cpp
simdcodegenxarch.cpp
targetamd64.cpp
@@ -92,6 +93,7 @@ elseif(CLR_CMAKE_TARGET_ARCH_ARM)
decomposelongs.cpp
emitarm.cpp
lowerarm.cpp
+ lsraarm.cpp
targetarm.cpp
unwindarm.cpp
)
@@ -101,15 +103,18 @@ elseif(CLR_CMAKE_TARGET_ARCH_I386)
decomposelongs.cpp
emitxarch.cpp
lowerxarch.cpp
+ lsraxarch.cpp
simd.cpp
simdcodegenxarch.cpp
targetx86.cpp
+ unwindx86.cpp
)
elseif(CLR_CMAKE_TARGET_ARCH_ARM64)
set( ARCH_SOURCES
codegenarm64.cpp
emitarm64.cpp
lowerarm64.cpp
+ lsraarm64.cpp
targetarm64.cpp
unwindarm.cpp
unwindarm64.cpp
@@ -203,9 +208,9 @@ if (CLR_CMAKE_PLATFORM_ARCH_ARM)
add_subdirectory(protojit)
endif (CLR_CMAKE_PLATFORM_ARCH_ARM)
-if (CLR_CMAKE_PLATFORM_ARCH_I386)
+if (CLR_CMAKE_PLATFORM_ARCH_I386 AND WIN32)
add_subdirectory(legacyjit)
if (NOT CLR_BUILD_JIT32)
add_subdirectory(compatjit)
endif ()
-endif (CLR_CMAKE_PLATFORM_ARCH_I386)
+endif (CLR_CMAKE_PLATFORM_ARCH_I386 AND WIN32)
diff --git a/src/jit/DIRS.proj b/src/jit/DIRS.proj
index 6d1c06d3f0..eb00cc1d64 100644
--- a/src/jit/DIRS.proj
+++ b/src/jit/DIRS.proj
@@ -26,8 +26,8 @@
<ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(BuildProjectName)' != 'CoreSys'">
<!-- Build the "FrankenJit" (RyuJIT front-end, legacy back-end) and "FrankenAltjit". These can't conflict with the names of the JIT32 directory outputs. -->
- <ProjectFile Condition="'$(BuildArchitecture)' == 'i386' or '$(BuildArchitecture)' == 'arm'" Include="frankenjit\frankenjit.nativeproj" />
- <ProjectFile Condition="'$(BuildArchitecture)' == 'i386'" Include="frankenaltjit\frankenaltjit.nativeproj" />
+ <ProjectFile Condition="'$(BuildArchitecture)' == 'arm'" Include="frankenjit\frankenjit.nativeproj" />
+ <ProjectFile Condition="'$(BuildArchitecture)' == 'i386'" Include="frankenaltjit\frankenaltjit.nativeproj" />
<!-- This might be useful, to help make sure JIT devs build all configurations of the JIT (including crossgen), but
it appears to cause problems with the build system, and it slows down normal JIT developer productivity by adding a seldom-useful build.
diff --git a/src/jit/block.cpp b/src/jit/block.cpp
index 47f1052cc8..6d8bc348fd 100644
--- a/src/jit/block.cpp
+++ b/src/jit/block.cpp
@@ -365,6 +365,14 @@ void BasicBlock::dspFlags()
{
printf("KEEP ");
}
+ if (bbFlags & BBF_CLONED_FINALLY_BEGIN)
+ {
+ printf("cfb ");
+ }
+ if (bbFlags & BBF_CLONED_FINALLY_END)
+ {
+ printf("cfe ");
+ }
}
/*****************************************************************************
@@ -564,10 +572,10 @@ void BasicBlock::dspBlockHeader(Compiler* compiler,
#endif // DEBUG
-// Allocation function for HeapPhiArg.
-void* BasicBlock::HeapPhiArg::operator new(size_t sz, Compiler* comp)
+// Allocation function for MemoryPhiArg.
+void* BasicBlock::MemoryPhiArg::operator new(size_t sz, Compiler* comp)
{
- return comp->compGetMem(sz, CMK_HeapPhiArg);
+ return comp->compGetMem(sz, CMK_MemoryPhiArg);
}
//------------------------------------------------------------------------
@@ -664,7 +672,7 @@ bool BasicBlock::IsLIR()
// Return Value:
// The first statement in the block's bbTreeList.
//
-GenTreeStmt* BasicBlock::firstStmt()
+GenTreeStmt* BasicBlock::firstStmt() const
{
if (bbTreeList == nullptr)
{
@@ -683,7 +691,7 @@ GenTreeStmt* BasicBlock::firstStmt()
// Return Value:
// The last statement in the block's bbTreeList.
//
-GenTreeStmt* BasicBlock::lastStmt()
+GenTreeStmt* BasicBlock::lastStmt() const
{
if (bbTreeList == nullptr)
{
@@ -765,7 +773,7 @@ BasicBlock* BasicBlock::GetUniqueSucc()
}
// Static vars.
-BasicBlock::HeapPhiArg* BasicBlock::EmptyHeapPhiDef = (BasicBlock::HeapPhiArg*)0x1;
+BasicBlock::MemoryPhiArg* BasicBlock::EmptyMemoryPhiDef = (BasicBlock::MemoryPhiArg*)0x1;
unsigned PtrKeyFuncs<BasicBlock>::GetHashCode(const BasicBlock* ptr)
{
diff --git a/src/jit/block.h b/src/jit/block.h
index 99c0efc1a7..786b83178f 100644
--- a/src/jit/block.h
+++ b/src/jit/block.h
@@ -144,6 +144,88 @@ struct EntryState
StackEntry* esStack; // ptr to stack
};
+// Enumeration of the kinds of memory whose state changes the compiler tracks
+enum MemoryKind
+{
+ ByrefExposed = 0, // Includes anything byrefs can read/write (everything in GcHeap, address-taken locals,
+ // unmanaged heap, callers' locals, etc.)
+ GcHeap, // Includes actual GC heap, and also static fields
+ MemoryKindCount, // Number of MemoryKinds
+};
+#ifdef DEBUG
+const char* const memoryKindNames[] = {"ByrefExposed", "GcHeap"};
+#endif // DEBUG
+
+// Bitmask describing a set of memory kinds (usable in bitfields)
+typedef unsigned int MemoryKindSet;
+
+// Bitmask for a MemoryKindSet containing just the specified MemoryKind
+inline MemoryKindSet memoryKindSet(MemoryKind memoryKind)
+{
+ return (1U << memoryKind);
+}
+
+// Bitmask for a MemoryKindSet containing the specified MemoryKinds
+template <typename... MemoryKinds>
+inline MemoryKindSet memoryKindSet(MemoryKind memoryKind, MemoryKinds... memoryKinds)
+{
+ return memoryKindSet(memoryKind) | memoryKindSet(memoryKinds...);
+}
+
+// Bitmask containing all the MemoryKinds
+const MemoryKindSet fullMemoryKindSet = (1 << MemoryKindCount) - 1;
+
+// Bitmask containing no MemoryKinds
+const MemoryKindSet emptyMemoryKindSet = 0;
+
+// Standard iterator class for iterating through MemoryKinds
+class MemoryKindIterator
+{
+ int value;
+
+public:
+ explicit inline MemoryKindIterator(int val) : value(val)
+ {
+ }
+ inline MemoryKindIterator& operator++()
+ {
+ ++value;
+ return *this;
+ }
+ inline MemoryKindIterator operator++(int)
+ {
+ return MemoryKindIterator(value++);
+ }
+ inline MemoryKind operator*()
+ {
+ return static_cast<MemoryKind>(value);
+ }
+ friend bool operator==(const MemoryKindIterator& left, const MemoryKindIterator& right)
+ {
+ return left.value == right.value;
+ }
+ friend bool operator!=(const MemoryKindIterator& left, const MemoryKindIterator& right)
+ {
+ return left.value != right.value;
+ }
+};
+
+// Empty struct that allows enumerating memory kinds via `for(MemoryKind kind : allMemoryKinds())`
+struct allMemoryKinds
+{
+ inline allMemoryKinds()
+ {
+ }
+ inline MemoryKindIterator begin()
+ {
+ return MemoryKindIterator(0);
+ }
+ inline MemoryKindIterator end()
+ {
+ return MemoryKindIterator(MemoryKindCount);
+ }
+};
+
// This encapsulates the "exception handling" successors of a block. That is,
// if a basic block BB1 occurs in a try block, we consider the first basic block
// BB2 of the corresponding handler to be an "EH successor" of BB1. Because we
@@ -353,15 +435,18 @@ struct BasicBlock : private LIR::Range
// BBJ_CALLFINALLY block, as well as, on x86, the final step block out of a
// finally.
+#define BBF_CLONED_FINALLY_BEGIN 0x100000000 // First block of a cloned finally region
+#define BBF_CLONED_FINALLY_END 0x200000000 // Last block of a cloned finally region
+
// Flags that relate blocks to loop structure.
#define BBF_LOOP_FLAGS (BBF_LOOP_PREHEADER | BBF_LOOP_HEAD | BBF_LOOP_CALL0 | BBF_LOOP_CALL1)
- bool isRunRarely()
+ bool isRunRarely() const
{
return ((bbFlags & BBF_RUN_RARELY) != 0);
}
- bool isLoopHead()
+ bool isLoopHead() const
{
return ((bbFlags & BBF_LOOP_HEAD) != 0);
}
@@ -388,7 +473,7 @@ struct BasicBlock : private LIR::Range
// For example, the top block might or might not have BBF_GC_SAFE_POINT,
// but we assume it does not have BBF_GC_SAFE_POINT any more.
-#define BBF_SPLIT_LOST (BBF_GC_SAFE_POINT | BBF_HAS_JMP | BBF_KEEP_BBJ_ALWAYS)
+#define BBF_SPLIT_LOST (BBF_GC_SAFE_POINT | BBF_HAS_JMP | BBF_KEEP_BBJ_ALWAYS | BBF_CLONED_FINALLY_END)
// Flags gained by the bottom block when a block is split.
// Note, this is a conservative guess.
@@ -399,7 +484,7 @@ struct BasicBlock : private LIR::Range
#define BBF_SPLIT_GAINED \
(BBF_DONT_REMOVE | BBF_HAS_LABEL | BBF_HAS_JMP | BBF_BACKWARD_JUMP | BBF_HAS_IDX_LEN | BBF_HAS_NEWARRAY | \
- BBF_PROF_WEIGHT | BBF_HAS_NEWOBJ | BBF_KEEP_BBJ_ALWAYS)
+ BBF_PROF_WEIGHT | BBF_HAS_NEWOBJ | BBF_KEEP_BBJ_ALWAYS | BBF_CLONED_FINALLY_END)
#ifndef __GNUC__ // GCC doesn't like C_ASSERT at global scope
static_assert_no_msg((BBF_SPLIT_NONEXIST & BBF_SPLIT_LOST) == 0);
@@ -801,64 +886,46 @@ struct BasicBlock : private LIR::Range
VARSET_TP bbVarUse; // variables used by block (before an assignment)
VARSET_TP bbVarDef; // variables assigned by block (before a use)
- VARSET_TP bbVarTmp; // TEMP: only used by FP enregistering code!
VARSET_TP bbLiveIn; // variables live on entry
VARSET_TP bbLiveOut; // variables live on exit
- // Use, def, live in/out information for the implicit "Heap" variable.
- unsigned bbHeapUse : 1;
- unsigned bbHeapDef : 1;
- unsigned bbHeapLiveIn : 1;
- unsigned bbHeapLiveOut : 1;
- unsigned bbHeapHavoc : 1; // If true, at some point the block does an operation that leaves the heap
- // in an unknown state. (E.g., unanalyzed call, store through unknown
- // pointer...)
+ // Use, def, live in/out information for the implicit memory variable.
+ MemoryKindSet bbMemoryUse : MemoryKindCount; // must be set for any MemoryKinds this block references
+ MemoryKindSet bbMemoryDef : MemoryKindCount; // must be set for any MemoryKinds this block mutates
+ MemoryKindSet bbMemoryLiveIn : MemoryKindCount;
+ MemoryKindSet bbMemoryLiveOut : MemoryKindCount;
+ MemoryKindSet bbMemoryHavoc : MemoryKindCount; // If true, at some point the block does an operation
+ // that leaves memory in an unknown state. (E.g.,
+ // unanalyzed call, store through unknown pointer...)
- // We want to make phi functions for the special implicit var "Heap". But since this is not a real
+ // We want to make phi functions for the special implicit var memory. But since this is not a real
// lclVar, and thus has no local #, we can't use a GenTreePhiArg. Instead, we use this struct.
- struct HeapPhiArg
+ struct MemoryPhiArg
{
- bool m_isSsaNum; // If true, the phi arg is an SSA # for an internal try block heap state, being
- // added to the phi of a catch block. If false, it's a pred block.
- union {
- BasicBlock* m_predBB; // Predecessor block from which the SSA # flows.
- unsigned m_ssaNum; // SSA# for internal block heap state.
- };
- HeapPhiArg* m_nextArg; // Next arg in the list, else NULL.
+ unsigned m_ssaNum; // SSA# for incoming value.
+ MemoryPhiArg* m_nextArg; // Next arg in the list, else NULL.
unsigned GetSsaNum()
{
- if (m_isSsaNum)
- {
- return m_ssaNum;
- }
- else
- {
- assert(m_predBB != nullptr);
- return m_predBB->bbHeapSsaNumOut;
- }
+ return m_ssaNum;
}
- HeapPhiArg(BasicBlock* predBB, HeapPhiArg* nextArg = nullptr)
- : m_isSsaNum(false), m_predBB(predBB), m_nextArg(nextArg)
- {
- }
- HeapPhiArg(unsigned ssaNum, HeapPhiArg* nextArg = nullptr)
- : m_isSsaNum(true), m_ssaNum(ssaNum), m_nextArg(nextArg)
+ MemoryPhiArg(unsigned ssaNum, MemoryPhiArg* nextArg = nullptr) : m_ssaNum(ssaNum), m_nextArg(nextArg)
{
}
void* operator new(size_t sz, class Compiler* comp);
};
- static HeapPhiArg* EmptyHeapPhiDef; // Special value (0x1, FWIW) to represent a to-be-filled in Phi arg list
- // for Heap.
- HeapPhiArg* bbHeapSsaPhiFunc; // If the "in" Heap SSA var is not a phi definition, this value is NULL.
- // Otherwise, it is either the special value EmptyHeapPhiDefn, to indicate
- // that Heap needs a phi definition on entry, or else it is the linked list
- // of the phi arguments.
- unsigned bbHeapSsaNumIn; // The SSA # of "Heap" on entry to the block.
- unsigned bbHeapSsaNumOut; // The SSA # of "Heap" on exit from the block.
+ static MemoryPhiArg* EmptyMemoryPhiDef; // Special value (0x1, FWIW) to represent a to-be-filled in Phi arg list
+ // for Heap.
+ MemoryPhiArg* bbMemorySsaPhiFunc[MemoryKindCount]; // If the "in" Heap SSA var is not a phi definition, this value
+ // is NULL.
+ // Otherwise, it is either the special value EmptyMemoryPhiDefn, to indicate
+ // that Heap needs a phi definition on entry, or else it is the linked list
+ // of the phi arguments.
+ unsigned bbMemorySsaNumIn[MemoryKindCount]; // The SSA # of memory on entry to the block.
+ unsigned bbMemorySsaNumOut[MemoryKindCount]; // The SSA # of memory on exit from the block.
VARSET_TP bbScope; // variables in scope over the block
@@ -981,8 +1048,8 @@ struct BasicBlock : private LIR::Range
return bbNum - 1;
}
- GenTreeStmt* firstStmt();
- GenTreeStmt* lastStmt();
+ GenTreeStmt* firstStmt() const;
+ GenTreeStmt* lastStmt() const;
GenTreeStmt* lastTopLevelStmt();
GenTree* firstNode();
diff --git a/src/jit/codegen.h b/src/jit/codegen.h
index c6e38ab6af..090283ee50 100755
--- a/src/jit/codegen.h
+++ b/src/jit/codegen.h
@@ -390,6 +390,8 @@ protected:
// Save/Restore callee saved float regs to stack
void genPreserveCalleeSavedFltRegs(unsigned lclFrameSize);
void genRestoreCalleeSavedFltRegs(unsigned lclFrameSize);
+ // Generate VZeroupper instruction to avoid AVX/SSE transition penalty
+ void genVzeroupperIfNeeded(bool check256bitOnly = true);
#endif // _TARGET_XARCH_ && FEATURE_STACK_FP_X87
diff --git a/src/jit/codegenarm.cpp b/src/jit/codegenarm.cpp
index 73e51f2ef7..81f5889e3f 100644
--- a/src/jit/codegenarm.cpp
+++ b/src/jit/codegenarm.cpp
@@ -23,15 +23,9 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include "gcinfo.h"
#include "emit.h"
-#ifndef JIT32_GCENCODER
-#include "gcinfoencoder.h"
-#endif
-
-/*****************************************************************************
- *
- * Generate code that will set the given register to the integer constant.
- */
-
+//------------------------------------------------------------------------
+// genSetRegToIcon: Generate code that will set the given register to the integer constant.
+//
void CodeGen::genSetRegToIcon(regNumber reg, ssize_t val, var_types type, insFlags flags)
{
// Reg cannot be a FP reg
@@ -42,41 +36,78 @@ void CodeGen::genSetRegToIcon(regNumber reg, ssize_t val, var_types type, insFla
// code path.
noway_assert(type != TYP_REF || val == 0);
- if (val == 0)
- {
- instGen_Set_Reg_To_Zero(emitActualTypeSize(type), reg, flags);
- }
- else
- {
- // TODO-CQ: needs all the optimized cases
- getEmitter()->emitIns_R_I(INS_mov, emitActualTypeSize(type), reg, val);
- }
+ instGen_Set_Reg_To_Imm(emitActualTypeSize(type), reg, val, flags);
}
-/*****************************************************************************
- *
- * Generate code to check that the GS cookie wasn't thrashed by a buffer
- * overrun. If pushReg is true, preserve all registers around code sequence.
- * Otherwise, ECX maybe modified.
- */
+//------------------------------------------------------------------------
+// genEmitGSCookieCheck: Generate code to check that the GS cookie wasn't thrashed by a buffer overrun.
+//
void CodeGen::genEmitGSCookieCheck(bool pushReg)
{
NYI("ARM genEmitGSCookieCheck");
}
-BasicBlock* CodeGen::genCallFinally(BasicBlock* block, BasicBlock* lblk)
+//------------------------------------------------------------------------
+// genCallFinally: Generate a call to the finally block.
+//
+BasicBlock* CodeGen::genCallFinally(BasicBlock* block)
{
NYI("ARM genCallFinally");
return block;
}
-// move an immediate value into an integer register
-
+//------------------------------------------------------------------------
+// genEHCatchRet:
void CodeGen::genEHCatchRet(BasicBlock* block)
{
NYI("ARM genEHCatchRet");
}
+//---------------------------------------------------------------------
+// genIntrinsic - generate code for a given intrinsic
+//
+// Arguments
+// treeNode - the GT_INTRINSIC node
+//
+// Return value:
+// None
+//
+void CodeGen::genIntrinsic(GenTreePtr treeNode)
+{
+ // Both operand and its result must be of the same floating point type.
+ GenTreePtr srcNode = treeNode->gtOp.gtOp1;
+ assert(varTypeIsFloating(srcNode));
+ assert(srcNode->TypeGet() == treeNode->TypeGet());
+
+ // Right now only Abs/Round/Sqrt are treated as math intrinsics.
+ //
+ switch (treeNode->gtIntrinsic.gtIntrinsicId)
+ {
+ case CORINFO_INTRINSIC_Abs:
+ genConsumeOperands(treeNode->AsOp());
+ getEmitter()->emitInsBinary(INS_vabs, emitTypeSize(treeNode), treeNode, srcNode);
+ break;
+
+ case CORINFO_INTRINSIC_Round:
+ NYI_ARM("genIntrinsic for round - not implemented yet");
+ break;
+
+ case CORINFO_INTRINSIC_Sqrt:
+ genConsumeOperands(treeNode->AsOp());
+ getEmitter()->emitInsBinary(INS_vsqrt, emitTypeSize(treeNode), treeNode, srcNode);
+ break;
+
+ default:
+ assert(!"genIntrinsic: Unsupported intrinsic");
+ unreached();
+ }
+
+ genProduceReg(treeNode);
+}
+
+//------------------------------------------------------------------------
+// instGen_Set_Reg_To_Imm: Move an immediate value into an integer register.
+//
void CodeGen::instGen_Set_Reg_To_Imm(emitAttr size, regNumber reg, ssize_t imm, insFlags flags)
{
// reg cannot be a FP register
@@ -87,23 +118,60 @@ void CodeGen::instGen_Set_Reg_To_Imm(emitAttr size, regNumber reg, ssize_t imm,
size = EA_SIZE(size); // Strip any Reloc flags from size if we aren't doing relocs
}
- if ((imm == 0) && !EA_IS_RELOC(size))
+ if (EA_IS_RELOC(size))
+ {
+ getEmitter()->emitIns_R_I(INS_movw, size, reg, imm);
+ getEmitter()->emitIns_R_I(INS_movt, size, reg, imm);
+ }
+ else if (imm == 0)
{
instGen_Set_Reg_To_Zero(size, reg, flags);
}
else
{
- getEmitter()->emitIns_R_I(INS_mov, size, reg, imm);
+ if (arm_Valid_Imm_For_Mov(imm))
+ {
+ getEmitter()->emitIns_R_I(INS_mov, size, reg, imm, flags);
+ }
+ else // We have to use a movw/movt pair of instructions
+ {
+ ssize_t imm_lo16 = (imm & 0xffff);
+ ssize_t imm_hi16 = (imm >> 16) & 0xffff;
+
+ assert(arm_Valid_Imm_For_Mov(imm_lo16));
+ assert(imm_hi16 != 0);
+
+ getEmitter()->emitIns_R_I(INS_movw, size, reg, imm_lo16);
+
+ // If we've got a low register, the high word is all bits set,
+ // and the high bit of the low word is set, we can sign extend
+ // halfword and save two bytes of encoding. This can happen for
+ // small magnitude negative numbers 'n' for -32768 <= n <= -1.
+
+ if (getEmitter()->isLowRegister(reg) && (imm_hi16 == 0xffff) && ((imm_lo16 & 0x8000) == 0x8000))
+ {
+ getEmitter()->emitIns_R_R(INS_sxth, EA_2BYTE, reg, reg);
+ }
+ else
+ {
+ getEmitter()->emitIns_R_I(INS_movt, size, reg, imm_hi16);
+ }
+
+ if (flags == INS_FLAGS_SET)
+ getEmitter()->emitIns_R_R(INS_mov, size, reg, reg, INS_FLAGS_SET);
+ }
}
+
regTracker.rsTrackRegIntCns(reg, imm);
}
-/*****************************************************************************
- *
- * Generate code to set a register 'targetReg' of type 'targetType' to the constant
- * specified by the constant (GT_CNS_INT or GT_CNS_DBL) in 'tree'. This does not call
- * genProduceReg() on the target register.
- */
+//------------------------------------------------------------------------
+// genSetRegToConst: Generate code to set a register 'targetReg' of type 'targetType'
+// to the constant specified by the constant (GT_CNS_INT or GT_CNS_DBL) in 'tree'.
+//
+// Notes:
+// This does not call genProduceReg() on the target register.
+//
void CodeGen::genSetRegToConst(regNumber targetReg, var_types targetType, GenTreePtr tree)
{
switch (tree->gtOper)
@@ -130,7 +198,42 @@ void CodeGen::genSetRegToConst(regNumber targetReg, var_types targetType, GenTre
case GT_CNS_DBL:
{
- NYI("GT_CNS_DBL");
+ GenTreeDblCon* dblConst = tree->AsDblCon();
+ double constValue = dblConst->gtDblCon.gtDconVal;
+ // TODO-ARM-CQ: Do we have a faster/smaller way to generate 0.0 in thumb2 ISA ?
+ if (targetType == TYP_FLOAT)
+ {
+ // Get a temp integer register
+ regMaskTP tmpRegMask = tree->gtRsvdRegs;
+ regNumber tmpReg = genRegNumFromMask(tmpRegMask);
+ assert(tmpReg != REG_NA);
+
+ float f = forceCastToFloat(constValue);
+ genSetRegToIcon(tmpReg, *((int*)(&f)));
+ getEmitter()->emitIns_R_R(INS_vmov_i2f, EA_4BYTE, targetReg, tmpReg);
+ }
+ else
+ {
+ assert(targetType == TYP_DOUBLE);
+
+ unsigned* cv = (unsigned*)&constValue;
+
+ // Get two temp integer registers
+ regMaskTP tmpRegsMask = tree->gtRsvdRegs;
+ regMaskTP tmpRegMask = genFindHighestBit(tmpRegsMask); // set tmpRegMsk to a one-bit mask
+ regNumber tmpReg1 = genRegNumFromMask(tmpRegMask);
+ assert(tmpReg1 != REG_NA);
+
+ tmpRegsMask &= ~genRegMask(tmpReg1); // remove the bit for 'tmpReg1'
+ tmpRegMask = genFindHighestBit(tmpRegsMask); // set tmpRegMsk to a one-bit mask
+ regNumber tmpReg2 = genRegNumFromMask(tmpRegMask);
+ assert(tmpReg2 != REG_NA);
+
+ genSetRegToIcon(tmpReg1, cv[0]);
+ genSetRegToIcon(tmpReg2, cv[1]);
+
+ getEmitter()->emitIns_R_R_R(INS_vmov_i2d, EA_8BYTE, targetReg, tmpReg1, tmpReg2);
+ }
}
break;
@@ -139,18 +242,22 @@ void CodeGen::genSetRegToConst(regNumber targetReg, var_types targetType, GenTre
}
}
-/*****************************************************************************
- *
- * Generate code for a single node in the tree.
- * Preconditions: All operands have been evaluated
- *
- */
+//------------------------------------------------------------------------
+// genCodeForTreeNode Generate code for a single node in the tree.
+//
+// Preconditions:
+// All operands have been evaluated.
+//
void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
{
regNumber targetReg = treeNode->gtRegNum;
var_types targetType = treeNode->TypeGet();
emitter* emit = getEmitter();
+#ifdef DEBUG
+ lastConsumedNode = nullptr;
+#endif
+
JITDUMP("Generating: ");
DISPNODE(treeNode);
@@ -169,10 +276,33 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
genProduceReg(treeNode);
break;
- case GT_NEG:
case GT_NOT:
+ assert(!varTypeIsFloating(targetType));
+
+ __fallthrough;
+
+ case GT_NEG:
{
- NYI("GT_NEG and GT_NOT");
+ instruction ins = genGetInsForOper(treeNode->OperGet(), targetType);
+
+ // The arithmetic node must be sitting in a register (since it's not contained)
+ assert(!treeNode->isContained());
+ // The dst can only be a register.
+ assert(targetReg != REG_NA);
+
+ GenTreePtr operand = treeNode->gtGetOp1();
+ assert(!operand->isContained());
+ // The src must be a register.
+ regNumber operandReg = genConsumeReg(operand);
+
+ if (ins == INS_vneg)
+ {
+ getEmitter()->emitIns_R_R(ins, emitTypeSize(treeNode), targetReg, operandReg);
+ }
+ else
+ {
+ getEmitter()->emitIns_R_R_I(ins, emitTypeSize(treeNode), targetReg, operandReg, 0);
+ }
}
genProduceReg(treeNode);
break;
@@ -185,9 +315,10 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
case GT_ADD:
case GT_SUB:
+ case GT_MUL:
{
const genTreeOps oper = treeNode->OperGet();
- if ((oper == GT_ADD || oper == GT_SUB) && treeNode->gtOverflow())
+ if ((oper == GT_ADD || oper == GT_SUB || oper == GT_MUL) && treeNode->gtOverflow())
{
// This is also checked in the importer.
NYI("Overflow not yet implemented");
@@ -209,40 +340,47 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
genConsumeIfReg(op1);
genConsumeIfReg(op2);
- // This is the case of reg1 = reg1 op reg2
- // We're ready to emit the instruction without any moves
- if (op1reg == targetReg)
+ if (!varTypeIsFloating(targetType))
{
- dst = op1;
- src = op2;
- }
- // We have reg1 = reg2 op reg1
- // In order for this operation to be correct
- // we need that op is a commutative operation so
- // we can convert it into reg1 = reg1 op reg2 and emit
- // the same code as above
- else if (op2reg == targetReg)
- {
- noway_assert(GenTree::OperIsCommutative(treeNode->OperGet()));
- dst = op2;
- src = op1;
+ // This is the case of reg1 = reg1 op reg2
+ // We're ready to emit the instruction without any moves
+ if (op1reg == targetReg)
+ {
+ dst = op1;
+ src = op2;
+ }
+ // We have reg1 = reg2 op reg1
+ // In order for this operation to be correct
+ // we need that op is a commutative operation so
+ // we can convert it into reg1 = reg1 op reg2 and emit
+ // the same code as above
+ else if (op2reg == targetReg)
+ {
+ assert(GenTree::OperIsCommutative(treeNode->OperGet()));
+ dst = op2;
+ src = op1;
+ }
+ // dest, op1 and op2 registers are different:
+ // reg3 = reg1 op reg2
+ // We can implement this by issuing a mov:
+ // reg3 = reg1
+ // reg3 = reg3 op reg2
+ else
+ {
+ inst_RV_RV(ins_Move_Extend(targetType, true), targetReg, op1reg, op1->gtType);
+ regTracker.rsTrackRegCopy(targetReg, op1reg);
+ gcInfo.gcMarkRegPtrVal(targetReg, targetType);
+ dst = treeNode;
+ src = op2;
+ }
+
+ regNumber r = emit->emitInsBinary(ins, emitTypeSize(treeNode), dst, src);
+ assert(r == targetReg);
}
- // dest, op1 and op2 registers are different:
- // reg3 = reg1 op reg2
- // We can implement this by issuing a mov:
- // reg3 = reg1
- // reg3 = reg3 op reg2
else
{
- inst_RV_RV(ins_Move_Extend(targetType, true), targetReg, op1reg, op1->gtType);
- regTracker.rsTrackRegCopy(targetReg, op1reg);
- gcInfo.gcMarkRegPtrVal(targetReg, targetType);
- dst = treeNode;
- src = op2;
+ emit->emitIns_R_R_R(ins, emitTypeSize(treeNode), targetReg, op1reg, op2reg);
}
-
- regNumber r = emit->emitInsBinary(ins, emitTypeSize(treeNode), dst, src);
- noway_assert(r == targetReg);
}
genProduceReg(treeNode);
break;
@@ -429,17 +567,11 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
break;
case GT_IND:
+ genConsumeAddress(treeNode->AsIndir()->Addr());
emit->emitInsMov(ins_Load(treeNode->TypeGet()), emitTypeSize(treeNode), treeNode);
genProduceReg(treeNode);
break;
- case GT_MUL:
- {
- NYI("GT_MUL");
- }
- genProduceReg(treeNode);
- break;
-
case GT_MOD:
case GT_UDIV:
case GT_UMOD:
@@ -451,17 +583,45 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
case GT_DIV:
{
- NYI("GT_DIV");
- }
+ genConsumeOperands(treeNode->AsOp());
+
+ noway_assert(targetReg != REG_NA);
+
+ GenTreePtr dst = treeNode;
+ GenTreePtr src1 = treeNode->gtGetOp1();
+ GenTreePtr src2 = treeNode->gtGetOp2();
+ instruction ins = genGetInsForOper(treeNode->OperGet(), targetType);
+ emitAttr attr = emitTypeSize(treeNode);
+ regNumber result = REG_NA;
+
+ // dst can only be a reg
+ assert(!dst->isContained());
+
+ // src can be only reg
+ assert(!src1->isContained() || !src2->isContained());
+
+ if (varTypeIsFloating(targetType))
+ {
+ // Floating point divide never raises an exception
+
+ emit->emitIns_R_R_R(ins, attr, dst->gtRegNum, src1->gtRegNum, src2->gtRegNum);
+ }
+ else // an signed integer divide operation
+ {
+ // TODO-ARM-Bug: handle zero division exception.
+
+ emit->emitIns_R_R_R(ins, attr, dst->gtRegNum, src1->gtRegNum, src2->gtRegNum);
+ }
+
genProduceReg(treeNode);
- break;
+ }
+ break;
case GT_INTRINSIC:
{
- NYI("GT_INTRINSIC");
+ genIntrinsic(treeNode);
}
- genProduceReg(treeNode);
- break;
+ break;
case GT_EQ:
case GT_NE:
@@ -485,26 +645,12 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
emitAttr cmpAttr;
if (varTypeIsFloating(op1))
{
- NYI("Floating point compare");
-
- bool isUnordered = ((treeNode->gtFlags & GTF_RELOP_NAN_UN) != 0);
- switch (tree->OperGet())
- {
- case GT_EQ:
- ins = INS_beq;
- case GT_NE:
- ins = INS_bne;
- case GT_LT:
- ins = isUnordered ? INS_blt : INS_blo;
- case GT_LE:
- ins = isUnordered ? INS_ble : INS_bls;
- case GT_GE:
- ins = isUnordered ? INS_bpl : INS_bge;
- case GT_GT:
- ins = isUnordered ? INS_bhi : INS_bgt;
- default:
- unreached();
- }
+ assert(op1->TypeGet() == op2->TypeGet());
+ ins = INS_vcmp;
+ cmpAttr = emitTypeSize(op1->TypeGet());
+ emit->emitInsBinary(ins, cmpAttr, op1, op2);
+ // vmrs with register 0xf has special meaning of transferring flags
+ emit->emitIns_R(INS_vmrs, EA_4BYTE, REG_R15);
}
else
{
@@ -522,12 +668,12 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
bool op1Is64Bit = (varTypeIsLong(op1Type) || op1Type == TYP_REF);
bool op2Is64Bit = (varTypeIsLong(op2Type) || op2Type == TYP_REF);
NYI_IF(op1Is64Bit || op2Is64Bit, "Long compare");
- assert(!op1->isContainedMemoryOp() || op1Type == op2Type);
- assert(!op2->isContainedMemoryOp() || op1Type == op2Type);
+ assert(!op1->isUsedFromMemory() || op1Type == op2Type);
+ assert(!op2->isUsedFromMemory() || op1Type == op2Type);
cmpAttr = emitTypeSize(cmpType);
}
+ emit->emitInsBinary(ins, cmpAttr, op1, op2);
}
- emit->emitInsBinary(ins, cmpAttr, op1, op2);
// Are we evaluating this into a register?
if (targetReg != REG_NA)
@@ -579,7 +725,68 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
case GT_STOREIND:
{
- NYI("GT_STOREIND");
+ GenTreeStoreInd* storeInd = treeNode->AsStoreInd();
+ GenTree* data = storeInd->Data();
+ GenTree* addr = storeInd->Addr();
+ var_types targetType = storeInd->TypeGet();
+
+ assert(!varTypeIsFloating(targetType) || (targetType == data->TypeGet()));
+
+ GCInfo::WriteBarrierForm writeBarrierForm = gcInfo.gcIsWriteBarrierCandidate(treeNode, data);
+ if (writeBarrierForm != GCInfo::WBF_NoBarrier)
+ {
+ // data and addr must be in registers.
+ // Consume both registers so that any copies of interfering
+ // registers are taken care of.
+ genConsumeOperands(storeInd->AsOp());
+
+#if NOGC_WRITE_BARRIERS
+ NYI_ARM("NOGC_WRITE_BARRIERS");
+#else
+ // At this point, we should not have any interference.
+ // That is, 'data' must not be in REG_ARG_0,
+ // as that is where 'addr' must go.
+ noway_assert(data->gtRegNum != REG_ARG_0);
+
+ // addr goes in REG_ARG_0
+ if (addr->gtRegNum != REG_ARG_0)
+ {
+ inst_RV_RV(INS_mov, REG_ARG_0, addr->gtRegNum, addr->TypeGet());
+ }
+
+ // data goes in REG_ARG_1
+ if (data->gtRegNum != REG_ARG_1)
+ {
+ inst_RV_RV(INS_mov, REG_ARG_1, data->gtRegNum, data->TypeGet());
+ }
+#endif // NOGC_WRITE_BARRIERS
+
+ genGCWriteBarrier(storeInd, writeBarrierForm);
+ }
+ else // A normal store, not a WriteBarrier store
+ {
+ bool reverseOps = ((storeInd->gtFlags & GTF_REVERSE_OPS) != 0);
+ bool dataIsUnary = false;
+
+ // We must consume the operands in the proper execution order,
+ // so that liveness is updated appropriately.
+ if (!reverseOps)
+ {
+ genConsumeAddress(addr);
+ }
+
+ if (!data->isContained())
+ {
+ genConsumeRegs(data);
+ }
+
+ if (reverseOps)
+ {
+ genConsumeAddress(addr);
+ }
+
+ emit->emitInsMov(ins_Store(data->TypeGet()), emitTypeSize(storeInd), storeInd);
+ }
}
break;
@@ -682,7 +889,14 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
break;
case GT_NO_OP:
- NYI("GT_NO_OP");
+ if (treeNode->gtFlags & GTF_NO_OP_NO)
+ {
+ noway_assert(!"GTF_NO_OP_NO should not be set");
+ }
+ else
+ {
+ instGen(INS_nop);
+ }
break;
case GT_ARR_BOUNDS_CHECK:
@@ -733,13 +947,22 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
emit->emitIns_R_L(INS_lea, EA_PTRSIZE, genPendingCallLabel, treeNode->gtRegNum);
break;
+ case GT_CLS_VAR_ADDR:
+ emit->emitIns_R_C(INS_lea, EA_PTRSIZE, targetReg, treeNode->gtClsVar.gtClsVarHnd, 0);
+ genProduceReg(treeNode);
+ break;
+
+ case GT_IL_OFFSET:
+ // Do nothing; these nodes are simply markers for debug info.
+ break;
+
default:
{
#ifdef DEBUG
char message[256];
_snprintf_s(message, _countof(message), _TRUNCATE, "NYI: Unimplemented node type %s\n",
GenTree::NodeName(treeNode->OperGet()));
- notYetImplemented(message, __FILE__, __LINE__);
+ NYIRAW(message);
#else
NYI("unimplemented node");
#endif
@@ -748,24 +971,33 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
}
}
-// generate code for the locked operations:
-// GT_LOCKADD, GT_XCHG, GT_XADD
+//------------------------------------------------------------------------
+// genLockedInstructions: Generate code for the locked operations.
+//
+// Notes:
+// Handles GT_LOCKADD, GT_XCHG, GT_XADD nodes.
+//
void CodeGen::genLockedInstructions(GenTreeOp* treeNode)
{
NYI("genLockedInstructions");
}
-// generate code for GT_ARR_BOUNDS_CHECK node
+//------------------------------------------------------------------------
+// genRangeCheck: generate code for GT_ARR_BOUNDS_CHECK node.
+//
void CodeGen::genRangeCheck(GenTreePtr oper)
{
noway_assert(oper->OperGet() == GT_ARR_BOUNDS_CHECK);
GenTreeBoundsChk* bndsChk = oper->AsBoundsChk();
- GenTreePtr arrLen = bndsChk->gtArrLen->gtEffectiveVal();
GenTreePtr arrIdx = bndsChk->gtIndex->gtEffectiveVal();
+ GenTreePtr arrLen = bndsChk->gtArrLen->gtEffectiveVal();
GenTreePtr arrRef = NULL;
int lenOffset = 0;
+ genConsumeIfReg(arrIdx);
+ genConsumeIfReg(arrLen);
+
GenTree * src1, *src2;
emitJumpKind jmpKind;
@@ -784,15 +1016,13 @@ void CodeGen::genRangeCheck(GenTreePtr oper)
jmpKind = genJumpKindForOper(GT_GE, CK_UNSIGNED);
}
- genConsumeIfReg(src1);
- genConsumeIfReg(src2);
-
getEmitter()->emitInsBinary(INS_cmp, emitAttr(TYP_INT), src1, src2);
genJumpToThrowHlpBlk(jmpKind, SCK_RNGCHK_FAIL, bndsChk->gtIndRngFailBB);
}
-// make a temporary indir we can feed to pattern matching routines
-// in cases where we don't want to instantiate all the indirs that happen
+//------------------------------------------------------------------------
+// indirForm: Make a temporary indir we can feed to pattern matching routines
+// in cases where we don't want to instantiate all the indirs that happen.
//
GenTreeIndir CodeGen::indirForm(var_types type, GenTree* base)
{
@@ -804,8 +1034,9 @@ GenTreeIndir CodeGen::indirForm(var_types type, GenTree* base)
return i;
}
-// make a temporary int we can feed to pattern matching routines
-// in cases where we don't want to instantiate
+//------------------------------------------------------------------------
+// intForm: Make a temporary int we can feed to pattern matching routines
+// in cases where we don't want to instantiate.
//
GenTreeIntCon CodeGen::intForm(var_types type, ssize_t value)
{
@@ -817,6 +1048,9 @@ GenTreeIntCon CodeGen::intForm(var_types type, ssize_t value)
return i;
}
+//------------------------------------------------------------------------
+// genGetInsForOper: Return instruction encoding of the operation tree.
+//
instruction CodeGen::genGetInsForOper(genTreeOps oper, var_types type)
{
instruction ins;
@@ -835,6 +1069,9 @@ instruction CodeGen::genGetInsForOper(genTreeOps oper, var_types type)
case GT_MUL:
ins = INS_MUL;
break;
+ case GT_DIV:
+ ins = INS_sdiv;
+ break;
case GT_LSH:
ins = INS_SHIFT_LEFT_LOGICAL;
break;
@@ -878,21 +1115,331 @@ instruction CodeGen::genGetInsForOper(genTreeOps oper, var_types type)
//
void CodeGen::genCodeForShift(GenTreePtr tree)
{
- NYI("genCodeForShift");
+ var_types targetType = tree->TypeGet();
+ genTreeOps oper = tree->OperGet();
+ instruction ins = genGetInsForOper(oper, targetType);
+ emitAttr size = emitTypeSize(tree);
+
+ assert(tree->gtRegNum != REG_NA);
+
+ GenTreePtr operand = tree->gtGetOp1();
+ genConsumeReg(operand);
+
+ GenTreePtr shiftBy = tree->gtGetOp2();
+ if (!shiftBy->IsCnsIntOrI())
+ {
+ genConsumeReg(shiftBy);
+ getEmitter()->emitIns_R_R_R(ins, size, tree->gtRegNum, operand->gtRegNum, shiftBy->gtRegNum);
+ }
+ else
+ {
+ unsigned immWidth = size * BITS_PER_BYTE;
+ ssize_t shiftByImm = shiftBy->gtIntCon.gtIconVal & (immWidth - 1);
+
+ getEmitter()->emitIns_R_R_I(ins, size, tree->gtRegNum, operand->gtRegNum, shiftByImm);
+ }
+
+ genProduceReg(tree);
}
+//------------------------------------------------------------------------
+// genRegCopy: Generate a register copy.
+//
void CodeGen::genRegCopy(GenTree* treeNode)
{
NYI("genRegCopy");
}
-// Produce code for a GT_CALL node
+//------------------------------------------------------------------------
+// genCallInstruction: Produce code for a GT_CALL node
+//
void CodeGen::genCallInstruction(GenTreePtr node)
{
- NYI("Call not implemented");
+ GenTreeCall* call = node->AsCall();
+
+ assert(call->gtOper == GT_CALL);
+
+ gtCallTypes callType = (gtCallTypes)call->gtCallType;
+
+ IL_OFFSETX ilOffset = BAD_IL_OFFSET;
+
+ // all virtuals should have been expanded into a control expression
+ assert(!call->IsVirtual() || call->gtControlExpr || call->gtCallAddr);
+
+ // Consume all the arg regs
+ for (GenTreePtr list = call->gtCallLateArgs; list; list = list->MoveNext())
+ {
+ assert(list->OperIsList());
+
+ GenTreePtr argNode = list->Current();
+
+ fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, argNode->gtSkipReloadOrCopy());
+ assert(curArgTabEntry);
+
+ if (curArgTabEntry->regNum == REG_STK)
+ continue;
+
+ // Deal with multi register passed struct args.
+ if (argNode->OperGet() == GT_FIELD_LIST)
+ {
+ GenTreeArgList* argListPtr = argNode->AsArgList();
+ unsigned iterationNum = 0;
+ regNumber argReg = curArgTabEntry->regNum;
+ for (; argListPtr != nullptr; argListPtr = argListPtr->Rest(), iterationNum++)
+ {
+ GenTreePtr putArgRegNode = argListPtr->gtOp.gtOp1;
+ assert(putArgRegNode->gtOper == GT_PUTARG_REG);
+
+ genConsumeReg(putArgRegNode);
+
+ if (putArgRegNode->gtRegNum != argReg)
+ {
+ inst_RV_RV(ins_Move_Extend(putArgRegNode->TypeGet(), putArgRegNode->InReg()), argReg,
+ putArgRegNode->gtRegNum);
+ }
+
+ argReg = genRegArgNext(argReg);
+ }
+ }
+ else
+ {
+ regNumber argReg = curArgTabEntry->regNum;
+ genConsumeReg(argNode);
+ if (argNode->gtRegNum != argReg)
+ {
+ inst_RV_RV(ins_Move_Extend(argNode->TypeGet(), argNode->InReg()), argReg, argNode->gtRegNum);
+ }
+ }
+
+ // In the case of a varargs call,
+ // the ABI dictates that if we have floating point args,
+ // we must pass the enregistered arguments in both the
+ // integer and floating point registers so, let's do that.
+ if (call->IsVarargs() && varTypeIsFloating(argNode))
+ {
+ NYI_ARM("CodeGen - IsVarargs");
+ }
+ }
+
+ // Insert a null check on "this" pointer if asked.
+ if (call->NeedsNullCheck())
+ {
+ const regNumber regThis = genGetThisArgReg(call);
+ const regNumber tmpReg = genRegNumFromMask(node->gtRsvdRegs);
+ getEmitter()->emitIns_R_R_I(INS_ldr, EA_4BYTE, tmpReg, regThis, 0);
+ }
+
+ // Either gtControlExpr != null or gtCallAddr != null or it is a direct non-virtual call to a user or helper method.
+ CORINFO_METHOD_HANDLE methHnd;
+ GenTree* target = call->gtControlExpr;
+ if (callType == CT_INDIRECT)
+ {
+ assert(target == nullptr);
+ target = call->gtCall.gtCallAddr;
+ methHnd = nullptr;
+ }
+ else
+ {
+ methHnd = call->gtCallMethHnd;
+ }
+
+ CORINFO_SIG_INFO* sigInfo = nullptr;
+#ifdef DEBUG
+ // Pass the call signature information down into the emitter so the emitter can associate
+ // native call sites with the signatures they were generated from.
+ if (callType != CT_HELPER)
+ {
+ sigInfo = call->callSig;
+ }
+#endif // DEBUG
+
+ // If fast tail call, then we are done.
+ if (call->IsFastTailCall())
+ {
+ NYI_ARM("fast tail call");
+ }
+
+ // For a pinvoke to unmanaged code we emit a label to clear
+ // the GC pointer state before the callsite.
+ // We can't utilize the typical lazy killing of GC pointers
+ // at (or inside) the callsite.
+ if (call->IsUnmanaged())
+ {
+ genDefineTempLabel(genCreateTempLabel());
+ }
+
+ // Determine return value size(s).
+ ReturnTypeDesc* pRetTypeDesc = call->GetReturnTypeDesc();
+ emitAttr retSize = EA_PTRSIZE;
+
+ if (call->HasMultiRegRetVal())
+ {
+ NYI_ARM("has multi reg ret val");
+ }
+ else
+ {
+ assert(!varTypeIsStruct(call));
+
+ if (call->gtType == TYP_REF || call->gtType == TYP_ARRAY)
+ {
+ retSize = EA_GCREF;
+ }
+ else if (call->gtType == TYP_BYREF)
+ {
+ retSize = EA_BYREF;
+ }
+ }
+
+ // We need to propagate the IL offset information to the call instruction, so we can emit
+ // an IL to native mapping record for the call, to support managed return value debugging.
+ // We don't want tail call helper calls that were converted from normal calls to get a record,
+ // so we skip this hash table lookup logic in that case.
+ if (compiler->opts.compDbgInfo && compiler->genCallSite2ILOffsetMap != nullptr && !call->IsTailCall())
+ {
+ (void)compiler->genCallSite2ILOffsetMap->Lookup(call, &ilOffset);
+ }
+
+ if (target != nullptr)
+ {
+ // For ARM a call target can not be a contained indirection
+ assert(!target->isContainedIndir());
+
+ // We have already generated code for gtControlExpr evaluating it into a register.
+ // We just need to emit "call reg" in this case.
+ //
+ assert(genIsValidIntReg(target->gtRegNum));
+
+ genEmitCall(emitter::EC_INDIR_R, methHnd,
+ INDEBUG_LDISASM_COMMA(sigInfo) nullptr, // addr
+ retSize, ilOffset, target->gtRegNum);
+ }
+ else
+ {
+ // Generate a direct call to a non-virtual user defined or helper method
+ assert(callType == CT_HELPER || callType == CT_USER_FUNC);
+
+ void* addr = nullptr;
+ if (callType == CT_HELPER)
+ {
+ // Direct call to a helper method.
+ CorInfoHelpFunc helperNum = compiler->eeGetHelperNum(methHnd);
+ noway_assert(helperNum != CORINFO_HELP_UNDEF);
+
+ void* pAddr = nullptr;
+ addr = compiler->compGetHelperFtn(helperNum, (void**)&pAddr);
+
+ if (addr == nullptr)
+ {
+ addr = pAddr;
+ }
+ }
+ else
+ {
+ // Direct call to a non-virtual user function.
+ CORINFO_ACCESS_FLAGS aflags = CORINFO_ACCESS_ANY;
+ if (call->IsSameThis())
+ {
+ aflags = (CORINFO_ACCESS_FLAGS)(aflags | CORINFO_ACCESS_THIS);
+ }
+
+ if ((call->NeedsNullCheck()) == 0)
+ {
+ aflags = (CORINFO_ACCESS_FLAGS)(aflags | CORINFO_ACCESS_NONNULL);
+ }
+
+ CORINFO_CONST_LOOKUP addrInfo;
+ compiler->info.compCompHnd->getFunctionEntryPoint(methHnd, &addrInfo, aflags);
+
+ addr = addrInfo.addr;
+ }
+
+ assert(addr);
+ // Non-virtual direct call to known addresses
+ if (!arm_Valid_Imm_For_BL((ssize_t)addr))
+ {
+ regNumber tmpReg = genRegNumFromMask(node->gtRsvdRegs);
+ instGen_Set_Reg_To_Imm(EA_HANDLE_CNS_RELOC, tmpReg, (ssize_t)addr);
+ genEmitCall(emitter::EC_INDIR_R, methHnd, INDEBUG_LDISASM_COMMA(sigInfo) NULL, retSize, ilOffset, tmpReg);
+ }
+ else
+ {
+ genEmitCall(emitter::EC_FUNC_TOKEN, methHnd, INDEBUG_LDISASM_COMMA(sigInfo) addr, retSize, ilOffset);
+ }
+ }
+
+ // if it was a pinvoke we may have needed to get the address of a label
+ if (genPendingCallLabel)
+ {
+ assert(call->IsUnmanaged());
+ genDefineTempLabel(genPendingCallLabel);
+ genPendingCallLabel = nullptr;
+ }
+
+ // Update GC info:
+ // All Callee arg registers are trashed and no longer contain any GC pointers.
+ // TODO-ARM-Bug?: As a matter of fact shouldn't we be killing all of callee trashed regs here?
+ // For now we will assert that other than arg regs gc ref/byref set doesn't contain any other
+ // registers from RBM_CALLEE_TRASH
+ assert((gcInfo.gcRegGCrefSetCur & (RBM_CALLEE_TRASH & ~RBM_ARG_REGS)) == 0);
+ assert((gcInfo.gcRegByrefSetCur & (RBM_CALLEE_TRASH & ~RBM_ARG_REGS)) == 0);
+ gcInfo.gcRegGCrefSetCur &= ~RBM_ARG_REGS;
+ gcInfo.gcRegByrefSetCur &= ~RBM_ARG_REGS;
+
+ var_types returnType = call->TypeGet();
+ if (returnType != TYP_VOID)
+ {
+ regNumber returnReg;
+
+ if (call->HasMultiRegRetVal())
+ {
+ assert(pRetTypeDesc != nullptr);
+ unsigned regCount = pRetTypeDesc->GetReturnRegCount();
+
+ // If regs allocated to call node are different from ABI return
+ // regs in which the call has returned its result, move the result
+ // to regs allocated to call node.
+ for (unsigned i = 0; i < regCount; ++i)
+ {
+ var_types regType = pRetTypeDesc->GetReturnRegType(i);
+ returnReg = pRetTypeDesc->GetABIReturnReg(i);
+ regNumber allocatedReg = call->GetRegNumByIdx(i);
+ if (returnReg != allocatedReg)
+ {
+ inst_RV_RV(ins_Copy(regType), allocatedReg, returnReg, regType);
+ }
+ }
+ }
+ else
+ {
+ if (varTypeIsFloating(returnType))
+ {
+ returnReg = REG_FLOATRET;
+ }
+ else
+ {
+ returnReg = REG_INTRET;
+ }
+
+ if (call->gtRegNum != returnReg)
+ {
+ inst_RV_RV(ins_Copy(returnType), call->gtRegNum, returnReg, returnType);
+ }
+ }
+
+ genProduceReg(call);
+ }
+
+ // If there is nothing next, that means the result is thrown away, so this value is not live.
+ // However, for minopts or debuggable code, we keep it live to support managed return value debugging.
+ if ((call->gtNext == nullptr) && !compiler->opts.MinOpts() && !compiler->opts.compDbgCode)
+ {
+ gcInfo.gcMarkRegSetNpt(RBM_INTRET);
+ }
}
-// produce code for a GT_LEA subnode
+//------------------------------------------------------------------------
+// genLeaInstruction: Produce code for a GT_LEA subnode.
+//
void CodeGen::genLeaInstruction(GenTreeAddrMode* lea)
{
if (lea->Base() && lea->Index())
@@ -909,12 +1456,44 @@ void CodeGen::genLeaInstruction(GenTreeAddrMode* lea)
genProduceReg(lea);
}
-// Generate code to materialize a condition into a register
-// (the condition codes must already have been appropriately set)
-
+//------------------------------------------------------------------------
+// genSetRegToCond: Generate code to materialize a condition into a register.
+//
+// Arguments:
+// dstReg - The target register to set to 1 or 0
+// tree - The GenTree Relop node that was used to set the Condition codes
+//
+// Return Value: none
+//
+// Preconditions:
+// The condition codes must already have been appropriately set.
+//
void CodeGen::genSetRegToCond(regNumber dstReg, GenTreePtr tree)
{
- NYI("genSetRegToCond");
+ // Emit code like that:
+ // ...
+ // bgt True
+ // movs rD, #0
+ // b Next
+ // True:
+ // movs rD, #1
+ // Next:
+ // ...
+
+ CompareKind compareKind = ((tree->gtFlags & GTF_UNSIGNED) != 0) ? CK_UNSIGNED : CK_SIGNED;
+ emitJumpKind jmpKind = genJumpKindForOper(tree->gtOper, compareKind);
+
+ BasicBlock* labelTrue = genCreateTempLabel();
+ getEmitter()->emitIns_J(emitter::emitJumpKindToIns(jmpKind), labelTrue);
+
+ getEmitter()->emitIns_R_I(INS_mov, emitActualTypeSize(tree->gtType), dstReg, 0);
+
+ BasicBlock* labelNext = genCreateTempLabel();
+ getEmitter()->emitIns_J(INS_b, labelNext);
+
+ genDefineTempLabel(labelTrue);
+ getEmitter()->emitIns_R_I(INS_mov, emitActualTypeSize(tree->gtType), dstReg, 1);
+ genDefineTempLabel(labelNext);
}
//------------------------------------------------------------------------
@@ -933,7 +1512,85 @@ void CodeGen::genSetRegToCond(regNumber dstReg, GenTreePtr tree)
//
void CodeGen::genIntToIntCast(GenTreePtr treeNode)
{
- NYI("Cast");
+ assert(treeNode->OperGet() == GT_CAST);
+
+ GenTreePtr castOp = treeNode->gtCast.CastOp();
+ emitter* emit = getEmitter();
+
+ var_types dstType = treeNode->CastToType();
+ var_types srcType = genActualType(castOp->TypeGet());
+ emitAttr movSize = emitActualTypeSize(dstType);
+ bool movRequired = false;
+
+ regNumber targetReg = treeNode->gtRegNum;
+ regNumber sourceReg = castOp->gtRegNum;
+
+ // For Long to Int conversion we will have a reserved integer register to hold the immediate mask
+ regNumber tmpReg = (treeNode->gtRsvdRegs == RBM_NONE) ? REG_NA : genRegNumFromMask(treeNode->gtRsvdRegs);
+
+ assert(genIsValidIntReg(targetReg));
+ assert(genIsValidIntReg(sourceReg));
+
+ instruction ins = INS_invalid;
+
+ genConsumeReg(castOp);
+ Lowering::CastInfo castInfo;
+
+ // Get information about the cast.
+ Lowering::getCastDescription(treeNode, &castInfo);
+
+ if (castInfo.requiresOverflowCheck)
+ {
+ NYI_ARM("CodeGen::genIntToIntCast for OverflowCheck");
+ }
+ else // Non-overflow checking cast.
+ {
+ if (genTypeSize(srcType) == genTypeSize(dstType))
+ {
+ ins = INS_mov;
+ }
+ else
+ {
+ var_types extendType = TYP_UNKNOWN;
+
+ // If we need to treat a signed type as unsigned
+ if ((treeNode->gtFlags & GTF_UNSIGNED) != 0)
+ {
+ extendType = genUnsignedType(srcType);
+ movSize = emitTypeSize(extendType);
+ movRequired = true;
+ }
+ else
+ {
+ if (genTypeSize(srcType) < genTypeSize(dstType))
+ {
+ extendType = srcType;
+ movSize = emitTypeSize(srcType);
+ if (srcType == TYP_UINT)
+ {
+ movRequired = true;
+ }
+ }
+ else // (genTypeSize(srcType) > genTypeSize(dstType))
+ {
+ extendType = dstType;
+ movSize = emitTypeSize(dstType);
+ }
+ }
+
+ ins = ins_Move_Extend(extendType, castOp->InReg());
+ }
+ }
+
+ // We should never be generating a load from memory instruction here!
+ assert(!emit->emitInsIsLoad(ins));
+
+ if ((ins != INS_mov) || movRequired || (targetReg != sourceReg))
+ {
+ emit->emitIns_R_R(ins, movSize, targetReg, sourceReg);
+ }
+
+ genProduceReg(treeNode);
}
//------------------------------------------------------------------------
@@ -952,7 +1609,39 @@ void CodeGen::genIntToIntCast(GenTreePtr treeNode)
//
void CodeGen::genFloatToFloatCast(GenTreePtr treeNode)
{
- NYI("Cast");
+ // float <--> double conversions are always non-overflow ones
+ assert(treeNode->OperGet() == GT_CAST);
+ assert(!treeNode->gtOverflow());
+
+ regNumber targetReg = treeNode->gtRegNum;
+ assert(genIsValidFloatReg(targetReg));
+
+ GenTreePtr op1 = treeNode->gtOp.gtOp1;
+ assert(!op1->isContained()); // Cannot be contained
+ assert(genIsValidFloatReg(op1->gtRegNum)); // Must be a valid float reg.
+
+ var_types dstType = treeNode->CastToType();
+ var_types srcType = op1->TypeGet();
+ assert(varTypeIsFloating(srcType) && varTypeIsFloating(dstType));
+
+ genConsumeOperands(treeNode->AsOp());
+
+ // treeNode must be a reg
+ assert(!treeNode->isContained());
+
+ if (srcType != dstType)
+ {
+ instruction insVcvt = (srcType == TYP_FLOAT) ? INS_vcvt_f2d // convert Float to Double
+ : INS_vcvt_d2f; // convert Double to Float
+
+ getEmitter()->emitIns_R_R(insVcvt, emitTypeSize(treeNode), treeNode->gtRegNum, op1->gtRegNum);
+ }
+ else if (treeNode->gtRegNum != op1->gtRegNum)
+ {
+ getEmitter()->emitIns_R_R(INS_vmov, emitTypeSize(treeNode), treeNode->gtRegNum, op1->gtRegNum);
+ }
+
+ genProduceReg(treeNode);
}
//------------------------------------------------------------------------
@@ -971,7 +1660,69 @@ void CodeGen::genFloatToFloatCast(GenTreePtr treeNode)
//
void CodeGen::genIntToFloatCast(GenTreePtr treeNode)
{
- NYI("Cast");
+ // int --> float/double conversions are always non-overflow ones
+ assert(treeNode->OperGet() == GT_CAST);
+ assert(!treeNode->gtOverflow());
+
+ regNumber targetReg = treeNode->gtRegNum;
+ assert(genIsValidFloatReg(targetReg));
+
+ GenTreePtr op1 = treeNode->gtOp.gtOp1;
+ assert(!op1->isContained()); // Cannot be contained
+ assert(genIsValidIntReg(op1->gtRegNum)); // Must be a valid int reg.
+
+ var_types dstType = treeNode->CastToType();
+ var_types srcType = op1->TypeGet();
+ assert(!varTypeIsFloating(srcType) && varTypeIsFloating(dstType));
+
+ // force the srcType to unsigned if GT_UNSIGNED flag is set
+ if (treeNode->gtFlags & GTF_UNSIGNED)
+ {
+ srcType = genUnsignedType(srcType);
+ }
+
+ // We should never see a srcType whose size is neither EA_4BYTE or EA_8BYTE
+ // For conversions from small types (byte/sbyte/int16/uint16) to float/double,
+ // we expect the front-end or lowering phase to have generated two levels of cast.
+ //
+ emitAttr srcSize = EA_ATTR(genTypeSize(srcType));
+ noway_assert((srcSize == EA_4BYTE) || (srcSize == EA_8BYTE));
+
+ instruction insVcvt = INS_invalid;
+
+ if (dstType == TYP_DOUBLE)
+ {
+ if (srcSize == EA_4BYTE)
+ {
+ insVcvt = (varTypeIsUnsigned(srcType)) ? INS_vcvt_u2d : INS_vcvt_i2d;
+ }
+ else
+ {
+ assert(srcSize == EA_8BYTE);
+ NYI_ARM("Casting int64/uint64 to double in genIntToFloatCast");
+ }
+ }
+ else
+ {
+ assert(dstType == TYP_FLOAT);
+ if (srcSize == EA_4BYTE)
+ {
+ insVcvt = (varTypeIsUnsigned(srcType)) ? INS_vcvt_u2f : INS_vcvt_i2f;
+ }
+ else
+ {
+ assert(srcSize == EA_8BYTE);
+ NYI_ARM("Casting int64/uint64 to float in genIntToFloatCast");
+ }
+ }
+
+ genConsumeOperands(treeNode->AsOp());
+
+ assert(insVcvt != INS_invalid);
+ getEmitter()->emitIns_R_R(INS_vmov_i2f, srcSize, treeNode->gtRegNum, op1->gtRegNum);
+ getEmitter()->emitIns_R_R(insVcvt, srcSize, treeNode->gtRegNum, treeNode->gtRegNum);
+
+ genProduceReg(treeNode);
}
//------------------------------------------------------------------------
@@ -990,31 +1741,72 @@ void CodeGen::genIntToFloatCast(GenTreePtr treeNode)
//
void CodeGen::genFloatToIntCast(GenTreePtr treeNode)
{
- NYI("Cast");
-}
+ // we don't expect to see overflow detecting float/double --> int type conversions here
+ // as they should have been converted into helper calls by front-end.
+ assert(treeNode->OperGet() == GT_CAST);
+ assert(!treeNode->gtOverflow());
-/*****************************************************************************
- *
- * Create and record GC Info for the function.
- */
-#ifdef JIT32_GCENCODER
-void*
-#else
-void
-#endif
-CodeGen::genCreateAndStoreGCInfo(unsigned codeSize, unsigned prologSize, unsigned epilogSize DEBUGARG(void* codePtr))
-{
-#ifdef JIT32_GCENCODER
- return genCreateAndStoreGCInfoJIT32(codeSize, prologSize, epilogSize DEBUGARG(codePtr));
-#else
- genCreateAndStoreGCInfoX64(codeSize, prologSize DEBUGARG(codePtr));
-#endif
-}
+ regNumber targetReg = treeNode->gtRegNum;
+ assert(genIsValidIntReg(targetReg)); // Must be a valid int reg.
+
+ GenTreePtr op1 = treeNode->gtOp.gtOp1;
+ assert(!op1->isContained()); // Cannot be contained
+ assert(genIsValidFloatReg(op1->gtRegNum)); // Must be a valid float reg.
+
+ var_types dstType = treeNode->CastToType();
+ var_types srcType = op1->TypeGet();
+ assert(varTypeIsFloating(srcType) && !varTypeIsFloating(dstType));
+
+ // We should never see a dstType whose size is neither EA_4BYTE or EA_8BYTE
+ // For conversions to small types (byte/sbyte/int16/uint16) from float/double,
+ // we expect the front-end or lowering phase to have generated two levels of cast.
+ //
+ emitAttr dstSize = EA_ATTR(genTypeSize(dstType));
+ noway_assert((dstSize == EA_4BYTE) || (dstSize == EA_8BYTE));
+
+ instruction insVcvt = INS_invalid;
+
+ if (srcType == TYP_DOUBLE)
+ {
+ if (dstSize == EA_4BYTE)
+ {
+ insVcvt = (varTypeIsUnsigned(dstType)) ? INS_vcvt_d2u : INS_vcvt_d2i;
+ }
+ else
+ {
+ assert(dstSize == EA_8BYTE);
+ NYI_ARM("Casting double to int64/uint64 in genIntToFloatCast");
+ }
+ }
+ else
+ {
+ assert(srcType == TYP_FLOAT);
+ if (dstSize == EA_4BYTE)
+ {
+ insVcvt = (varTypeIsUnsigned(dstType)) ? INS_vcvt_f2u : INS_vcvt_f2i;
+ }
+ else
+ {
+ assert(dstSize == EA_8BYTE);
+ NYI_ARM("Casting float to int64/uint64 in genIntToFloatCast");
+ }
+ }
-// TODO-ARM-Cleanup: It seems that the ARM JIT (classic and otherwise) uses this method, so it seems to be
-// inappropriately named?
+ genConsumeOperands(treeNode->AsOp());
+
+ assert(insVcvt != INS_invalid);
+ getEmitter()->emitIns_R_R(insVcvt, dstSize, op1->gtRegNum, op1->gtRegNum);
+ getEmitter()->emitIns_R_R(INS_vmov_f2i, dstSize, treeNode->gtRegNum, op1->gtRegNum);
+
+ genProduceReg(treeNode);
+}
-void CodeGen::genCreateAndStoreGCInfoX64(unsigned codeSize, unsigned prologSize DEBUGARG(void* codePtr))
+//------------------------------------------------------------------------
+// genCreateAndStoreGCInfo: Create and record GC Info for the function.
+//
+void CodeGen::genCreateAndStoreGCInfo(unsigned codeSize,
+ unsigned prologSize,
+ unsigned epilogSize DEBUGARG(void* codePtr))
{
IAllocator* allowZeroAlloc = new (compiler, CMK_GC) AllowZeroAllocator(compiler->getAllocatorGC());
GcInfoEncoder* gcInfoEncoder = new (compiler, CMK_GC)
@@ -1039,20 +1831,73 @@ void CodeGen::genCreateAndStoreGCInfoX64(unsigned codeSize, unsigned prologSize
compiler->compInfoBlkSize = 0; // not exposed by the GCEncoder interface
}
-/*****************************************************************************
- * Emit a call to a helper function.
- */
-
-void CodeGen::genEmitHelperCall(unsigned helper,
- int argSize,
- emitAttr retSize
-#ifndef LEGACY_BACKEND
- ,
- regNumber callTargetReg /*= REG_NA */
-#endif // !LEGACY_BACKEND
- )
+//------------------------------------------------------------------------
+// genEmitHelperCall: Emit a call to a helper function.
+//
+void CodeGen::genEmitHelperCall(unsigned helper, int argSize, emitAttr retSize, regNumber callTargetReg /*= REG_NA */)
{
- NYI("Helper call");
+ // Can we call the helper function directly
+
+ void *addr = NULL, **pAddr = NULL;
+
+#if defined(DEBUG) && defined(PROFILING_SUPPORTED)
+ // Don't ask VM if it hasn't requested ELT hooks
+ if (!compiler->compProfilerHookNeeded && compiler->opts.compJitELTHookEnabled &&
+ (helper == CORINFO_HELP_PROF_FCN_ENTER || helper == CORINFO_HELP_PROF_FCN_LEAVE ||
+ helper == CORINFO_HELP_PROF_FCN_TAILCALL))
+ {
+ addr = compiler->compProfilerMethHnd;
+ }
+ else
+#endif
+ {
+ addr = compiler->compGetHelperFtn((CorInfoHelpFunc)helper, (void**)&pAddr);
+ }
+
+ if (!addr || !arm_Valid_Imm_For_BL((ssize_t)addr))
+ {
+ if (callTargetReg == REG_NA)
+ {
+ // If a callTargetReg has not been explicitly provided, we will use REG_DEFAULT_HELPER_CALL_TARGET, but
+ // this is only a valid assumption if the helper call is known to kill REG_DEFAULT_HELPER_CALL_TARGET.
+ callTargetReg = REG_DEFAULT_HELPER_CALL_TARGET;
+ }
+
+ // Load the address into a register and call through a register
+ if (addr)
+ {
+ instGen_Set_Reg_To_Imm(EA_HANDLE_CNS_RELOC, callTargetReg, (ssize_t)addr);
+ }
+ else
+ {
+ getEmitter()->emitIns_R_AI(INS_ldr, EA_PTR_DSP_RELOC, callTargetReg, (ssize_t)pAddr);
+ regTracker.rsTrackRegTrash(callTargetReg);
+ }
+
+ getEmitter()->emitIns_Call(emitter::EC_INDIR_R, compiler->eeFindHelper(helper),
+ INDEBUG_LDISASM_COMMA(nullptr) NULL, // addr
+ argSize, retSize, gcInfo.gcVarPtrSetCur, gcInfo.gcRegGCrefSetCur,
+ gcInfo.gcRegByrefSetCur,
+ BAD_IL_OFFSET, // ilOffset
+ callTargetReg, // ireg
+ REG_NA, 0, 0, // xreg, xmul, disp
+ false, // isJump
+ emitter::emitNoGChelper(helper),
+ (CorInfoHelpFunc)helper == CORINFO_HELP_PROF_FCN_LEAVE);
+ }
+ else
+ {
+ getEmitter()->emitIns_Call(emitter::EC_FUNC_TOKEN, compiler->eeFindHelper(helper),
+ INDEBUG_LDISASM_COMMA(nullptr) addr, argSize, retSize, gcInfo.gcVarPtrSetCur,
+ gcInfo.gcRegGCrefSetCur, gcInfo.gcRegByrefSetCur, BAD_IL_OFFSET, REG_NA, REG_NA, 0,
+ 0, /* ilOffset, ireg, xreg, xmul, disp */
+ false, /* isJump */
+ emitter::emitNoGChelper(helper),
+ (CorInfoHelpFunc)helper == CORINFO_HELP_PROF_FCN_LEAVE);
+ }
+
+ regTracker.rsTrashRegSet(RBM_CALLEE_TRASH);
+ regTracker.rsTrashRegsForGCInterruptability();
}
#endif // _TARGET_ARM_
diff --git a/src/jit/codegenarm64.cpp b/src/jit/codegenarm64.cpp
index cc7c5dc524..71c6dd1162 100644
--- a/src/jit/codegenarm64.cpp
+++ b/src/jit/codegenarm64.cpp
@@ -1326,7 +1326,7 @@ void CodeGen::genEmitGSCookieCheck(bool pushReg)
genDefineTempLabel(gsCheckBlk);
}
-BasicBlock* CodeGen::genCallFinally(BasicBlock* block, BasicBlock* lblk)
+BasicBlock* CodeGen::genCallFinally(BasicBlock* block)
{
// Generate a call to the finally, like this:
// mov x0,qword ptr [fp + 10H] / sp // Load x0 with PSPSym, or sp if PSPSym is not used
@@ -1387,8 +1387,6 @@ BasicBlock* CodeGen::genCallFinally(BasicBlock* block, BasicBlock* lblk)
if (!(block->bbFlags & BBF_RETLESS_CALL))
{
assert(block->isBBCallAlwaysPair());
-
- lblk = block;
block = block->bbNext;
}
return block;
@@ -1918,6 +1916,10 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
emitter* emit = getEmitter();
#ifdef DEBUG
+ // Validate that all the operands for the current node are consumed in order.
+ // This is important because LSRA ensures that any necessary copies will be
+ // handled correctly.
+ lastConsumedNode = nullptr;
if (compiler->verbose)
{
unsigned seqNum = treeNode->gtSeqNum; // Useful for setting a conditional break in Visual Studio
@@ -2262,7 +2264,6 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
else
{
assert(!data->isContained());
- genConsumeReg(data);
dataReg = data->gtRegNum;
}
assert(dataReg != REG_NA);
@@ -2314,7 +2315,6 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
else
{
assert(!data->isContained());
- genConsumeReg(data);
dataReg = data->gtRegNum;
}
assert(dataReg != REG_NA);
@@ -2423,8 +2423,8 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
var_types op1Type = op1->TypeGet();
var_types op2Type = op2->TypeGet();
- assert(!op1->isContainedMemoryOp());
- assert(!op2->isContainedMemoryOp());
+ assert(!op1->isUsedFromMemory());
+ assert(!op2->isUsedFromMemory());
genConsumeOperands(tree);
@@ -3798,8 +3798,8 @@ void CodeGen::genRangeCheck(GenTreePtr oper)
GenTree * src1, *src2;
emitJumpKind jmpKind;
- genConsumeRegs(arrLen);
genConsumeRegs(arrIndex);
+ genConsumeRegs(arrLen);
if (arrIndex->isContainedIntOrIImmed())
{
@@ -3951,14 +3951,14 @@ void CodeGen::genCodeForArrOffset(GenTreeArrOffs* arrOffset)
if (!offsetNode->IsIntegralConst(0))
{
- emitter* emit = getEmitter();
- GenTreePtr arrObj = arrOffset->gtArrObj;
- regNumber arrReg = genConsumeReg(arrObj);
- noway_assert(arrReg != REG_NA);
+ emitter* emit = getEmitter();
regNumber offsetReg = genConsumeReg(offsetNode);
noway_assert(offsetReg != REG_NA);
regNumber indexReg = genConsumeReg(indexNode);
noway_assert(indexReg != REG_NA);
+ GenTreePtr arrObj = arrOffset->gtArrObj;
+ regNumber arrReg = genConsumeReg(arrObj);
+ noway_assert(arrReg != REG_NA);
regMaskTP tmpRegMask = arrOffset->gtRsvdRegs;
regNumber tmpReg = genRegNumFromMask(tmpRegMask);
noway_assert(tmpReg != REG_NA);
@@ -4118,12 +4118,11 @@ void CodeGen::genCodeForShift(GenTreePtr tree)
assert(tree->gtRegNum != REG_NA);
GenTreePtr operand = tree->gtGetOp1();
- genConsumeReg(operand);
+ genConsumeOperands(tree->AsOp());
GenTreePtr shiftBy = tree->gtGetOp2();
if (!shiftBy->IsCnsIntOrI())
{
- genConsumeReg(shiftBy);
getEmitter()->emitIns_R_R_R(ins, size, tree->gtRegNum, operand->gtRegNum, shiftBy->gtRegNum);
}
else
diff --git a/src/jit/codegencommon.cpp b/src/jit/codegencommon.cpp
index 240911523f..b1e474b755 100644
--- a/src/jit/codegencommon.cpp
+++ b/src/jit/codegencommon.cpp
@@ -2475,6 +2475,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind
EJ_jle, // GT_LE
EJ_jge, // GT_GE
EJ_jg, // GT_GT
+#ifndef LEGACY_BACKEND
+ EJ_je, // GT_TEST_EQ
+ EJ_jne, // GT_TEST_NE
+#endif
#elif defined(_TARGET_ARMARCH_)
EJ_eq, // GT_EQ
EJ_ne, // GT_NE
@@ -2494,6 +2498,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind
EJ_jbe, // GT_LE
EJ_jae, // GT_GE
EJ_ja, // GT_GT
+#ifndef LEGACY_BACKEND
+ EJ_je, // GT_TEST_EQ
+ EJ_jne, // GT_TEST_NE
+#endif
#elif defined(_TARGET_ARMARCH_)
EJ_eq, // GT_EQ
EJ_ne, // GT_NE
@@ -2513,6 +2521,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind
EJ_NONE, // GT_LE
EJ_jns, // GT_GE (S == 0)
EJ_NONE, // GT_GT
+#ifndef LEGACY_BACKEND
+ EJ_NONE, // GT_TEST_EQ
+ EJ_NONE, // GT_TEST_NE
+#endif
#elif defined(_TARGET_ARMARCH_)
EJ_eq, // GT_EQ (Z == 1)
EJ_ne, // GT_NE (Z == 0)
@@ -2530,6 +2542,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind
assert(genJCCinsSigned[GT_LE - GT_EQ] == EJ_jle);
assert(genJCCinsSigned[GT_GE - GT_EQ] == EJ_jge);
assert(genJCCinsSigned[GT_GT - GT_EQ] == EJ_jg);
+#ifndef LEGACY_BACKEND
+ assert(genJCCinsSigned[GT_TEST_EQ - GT_EQ] == EJ_je);
+ assert(genJCCinsSigned[GT_TEST_NE - GT_EQ] == EJ_jne);
+#endif
assert(genJCCinsUnsigned[GT_EQ - GT_EQ] == EJ_je);
assert(genJCCinsUnsigned[GT_NE - GT_EQ] == EJ_jne);
@@ -2537,6 +2553,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind
assert(genJCCinsUnsigned[GT_LE - GT_EQ] == EJ_jbe);
assert(genJCCinsUnsigned[GT_GE - GT_EQ] == EJ_jae);
assert(genJCCinsUnsigned[GT_GT - GT_EQ] == EJ_ja);
+#ifndef LEGACY_BACKEND
+ assert(genJCCinsUnsigned[GT_TEST_EQ - GT_EQ] == EJ_je);
+ assert(genJCCinsUnsigned[GT_TEST_NE - GT_EQ] == EJ_jne);
+#endif
assert(genJCCinsLogical[GT_EQ - GT_EQ] == EJ_je);
assert(genJCCinsLogical[GT_NE - GT_EQ] == EJ_jne);
@@ -3145,12 +3165,17 @@ void CodeGen::genGenerateCode(void** codePtr, ULONG* nativeSizeOfCode)
/* Check our max stack level. Needed for fgAddCodeRef().
We need to relax the assert as our estimation won't include code-gen
stack changes (which we know don't affect fgAddCodeRef()) */
- noway_assert(getEmitter()->emitMaxStackDepth <=
- (compiler->fgPtrArgCntMax + // Max number of pointer-sized stack arguments.
- compiler->compHndBBtabCount + // Return address for locally-called finallys
- genTypeStSz(TYP_LONG) + // longs/doubles may be transferred via stack, etc
- (compiler->compTailCallUsed ? 4 : 0))); // CORINFO_HELP_TAILCALL args
+ {
+ unsigned maxAllowedStackDepth = compiler->fgPtrArgCntMax + // Max number of pointer-sized stack arguments.
+ compiler->compHndBBtabCount + // Return address for locally-called finallys
+ genTypeStSz(TYP_LONG) + // longs/doubles may be transferred via stack, etc
+ (compiler->compTailCallUsed ? 4 : 0); // CORINFO_HELP_TAILCALL args
+#if defined(UNIX_X86_ABI)
+ maxAllowedStackDepth += genTypeStSz(TYP_INT) * 3; // stack align for x86 - allow up to 3 INT's for padding
#endif
+ noway_assert(getEmitter()->emitMaxStackDepth <= maxAllowedStackDepth);
+ }
+#endif // EMIT_TRACK_STACK_DEPTH
*nativeSizeOfCode = codeSize;
compiler->info.compNativeCodeSize = (UNATIVE_OFFSET)codeSize;
@@ -10241,6 +10266,66 @@ void CodeGen::genCaptureFuncletPrologEpilogInfo()
// Look in CodeGenArm64.cpp
+#elif defined(_TARGET_X86_)
+
+/*****************************************************************************
+ *
+ * Generates code for an EH funclet prolog.
+ */
+
+void CodeGen::genFuncletProlog(BasicBlock* block)
+{
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("*************** In genFuncletProlog()\n");
+ }
+#endif
+
+ ScopedSetVariable<bool> _setGeneratingProlog(&compiler->compGeneratingProlog, true);
+
+ compiler->unwindBegProlog();
+
+ // TODO Save callee-saved registers
+
+ // This is the end of the OS-reported prolog for purposes of unwinding
+ compiler->unwindEndProlog();
+}
+
+/*****************************************************************************
+ *
+ * Generates code for an EH funclet epilog.
+ */
+
+void CodeGen::genFuncletEpilog()
+{
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("*************** In genFuncletEpilog()\n");
+ }
+#endif
+
+ ScopedSetVariable<bool> _setGeneratingEpilog(&compiler->compGeneratingEpilog, true);
+
+ // TODO Restore callee-saved registers
+
+ instGen_Return(0);
+}
+
+/*****************************************************************************
+ *
+ * Capture the information used to generate the funclet prologs and epilogs.
+ */
+
+void CodeGen::genCaptureFuncletPrologEpilogInfo()
+{
+ if (!compiler->ehAnyFunclets())
+ {
+ return;
+ }
+}
+
#else // _TARGET_*
/*****************************************************************************
@@ -10583,6 +10668,7 @@ GenTreePtr CodeGen::genMakeConst(const void* cnsAddr, var_types cnsType, GenTree
// funclet frames: this will be FuncletInfo.fiSpDelta.
void CodeGen::genPreserveCalleeSavedFltRegs(unsigned lclFrameSize)
{
+ genVzeroupperIfNeeded(false);
regMaskTP regMask = compiler->compCalleeFPRegsSavedMask;
// Only callee saved floating point registers should be in regMask
@@ -10621,16 +10707,6 @@ void CodeGen::genPreserveCalleeSavedFltRegs(unsigned lclFrameSize)
offset -= XMM_REGSIZE_BYTES;
}
}
-
-#ifdef FEATURE_AVX_SUPPORT
- // Just before restoring float registers issue a Vzeroupper to zero out upper 128-bits of all YMM regs.
- // This is to avoid penalty if this routine is using AVX-256 and now returning to a routine that is
- // using SSE2.
- if (compiler->getFloatingPointInstructionSet() == InstructionSet_AVX)
- {
- instGen(INS_vzeroupper);
- }
-#endif
}
// Save/Restore compCalleeFPRegsPushed with the smallest register number saved at [RSP+offset], working
@@ -10651,6 +10727,7 @@ void CodeGen::genRestoreCalleeSavedFltRegs(unsigned lclFrameSize)
// fast path return
if (regMask == RBM_NONE)
{
+ genVzeroupperIfNeeded();
return;
}
@@ -10682,16 +10759,6 @@ void CodeGen::genRestoreCalleeSavedFltRegs(unsigned lclFrameSize)
assert((offset % 16) == 0);
#endif // _TARGET_AMD64_
-#ifdef FEATURE_AVX_SUPPORT
- // Just before restoring float registers issue a Vzeroupper to zero out upper 128-bits of all YMM regs.
- // This is to avoid penalty if this routine is using AVX-256 and now returning to a routine that is
- // using SSE2.
- if (compiler->getFloatingPointInstructionSet() == InstructionSet_AVX)
- {
- instGen(INS_vzeroupper);
- }
-#endif
-
for (regNumber reg = REG_FLT_CALLEE_SAVED_FIRST; regMask != RBM_NONE; reg = REG_NEXT(reg))
{
regMaskTP regBit = genRegMask(reg);
@@ -10706,7 +10773,41 @@ void CodeGen::genRestoreCalleeSavedFltRegs(unsigned lclFrameSize)
offset -= XMM_REGSIZE_BYTES;
}
}
+ genVzeroupperIfNeeded();
}
+
+// Generate Vzeroupper instruction as needed to zero out upper 128b-bit of all YMM registers so that the
+// AVX/Legacy SSE transition penalties can be avoided. This function is been used in genPreserveCalleeSavedFltRegs
+// (prolog) and genRestoreCalleeSavedFltRegs (epilog). Issue VZEROUPPER in Prolog if the method contains
+// 128-bit or 256-bit AVX code, to avoid legacy SSE to AVX transition penalty, which could happen when native
+// code contains legacy SSE code calling into JIT AVX code (e.g. reverse pinvoke). Issue VZEROUPPER in Epilog
+// if the method contains 256-bit AVX code, to avoid AVX to legacy SSE transition penalty.
+//
+// Params
+// check256bitOnly - true to check if the function contains 256-bit AVX instruction and generate Vzeroupper
+// instruction, false to check if the function contains AVX instruciton (either 128-bit or 256-bit).
+//
+void CodeGen::genVzeroupperIfNeeded(bool check256bitOnly /* = true*/)
+{
+#ifdef FEATURE_AVX_SUPPORT
+ bool emitVzeroUpper = false;
+ if (check256bitOnly)
+ {
+ emitVzeroUpper = getEmitter()->Contains256bitAVX();
+ }
+ else
+ {
+ emitVzeroUpper = getEmitter()->ContainsAVX();
+ }
+
+ if (emitVzeroUpper)
+ {
+ assert(compiler->getSIMDInstructionSet() == InstructionSet_AVX);
+ instGen(INS_vzeroupper);
+ }
+#endif
+}
+
#endif // defined(_TARGET_XARCH_) && !FEATURE_STACK_FP_X87
//-----------------------------------------------------------------------------------
diff --git a/src/jit/codegenlegacy.cpp b/src/jit/codegenlegacy.cpp
index 667b9d4af8..0530863d81 100644
--- a/src/jit/codegenlegacy.cpp
+++ b/src/jit/codegenlegacy.cpp
@@ -1837,6 +1837,15 @@ void CodeGen::genRangeCheck(GenTreePtr oper)
GenTreePtr arrRef = NULL;
int lenOffset = 0;
+ /* Is the array index a constant value? */
+ GenTreePtr index = bndsChk->gtIndex;
+ if (!index->IsCnsIntOrI())
+ {
+ // No, it's not a constant.
+ genCodeForTree(index, RBM_ALLINT);
+ regSet.rsMarkRegUsed(index);
+ }
+
// If "arrLen" is a ARR_LENGTH operation, get the array whose length that takes in a register.
// Otherwise, if the length is not a constant, get it (the length, not the arr reference) in
// a register.
@@ -1884,14 +1893,8 @@ void CodeGen::genRangeCheck(GenTreePtr oper)
}
}
- /* Is the array index a constant value? */
- GenTreePtr index = bndsChk->gtIndex;
if (!index->IsCnsIntOrI())
{
- // No, it's not a constant.
- genCodeForTree(index, RBM_ALLINT);
- regSet.rsMarkRegUsed(index);
-
// If we need "arrRef" or "arrLen", and evaluating "index" displaced whichever of them we're using
// from its register, get it back in a register.
if (arrRef != NULL)
@@ -1983,6 +1986,11 @@ void CodeGen::genRangeCheck(GenTreePtr oper)
}
// Free the registers that were used.
+ if (!index->IsCnsIntOrI())
+ {
+ regSet.rsMarkRegFree(index->gtRegNum, index);
+ }
+
if (arrRef != NULL)
{
regSet.rsMarkRegFree(arrRef->gtRegNum, arrRef);
@@ -1991,11 +1999,6 @@ void CodeGen::genRangeCheck(GenTreePtr oper)
{
regSet.rsMarkRegFree(arrLen->gtRegNum, arrLen);
}
-
- if (!index->IsCnsIntOrI())
- {
- regSet.rsMarkRegFree(index->gtRegNum, index);
- }
}
/*****************************************************************************
@@ -2590,7 +2593,7 @@ regMaskTP CodeGen::genRestoreAddrMode(GenTreePtr addr, GenTreePtr tree, bool loc
if (tree->gtOp.gtOp1)
regMask |= genRestoreAddrMode(addr, tree->gtOp.gtOp1, lockPhase);
- if (tree->gtGetOp2())
+ if (tree->gtGetOp2IfPresent())
regMask |= genRestoreAddrMode(addr, tree->gtOp.gtOp2, lockPhase);
}
else if (tree->gtOper == GT_ARR_ELEM)
@@ -3039,7 +3042,7 @@ AGAIN:
noway_assert(kind & GTK_SMPOP);
- if (tree->gtGetOp2())
+ if (tree->gtGetOp2IfPresent())
{
genEvalSideEffects(tree->gtOp.gtOp1);
@@ -9689,7 +9692,7 @@ void CodeGen::genCodeForTreeSmpOp(GenTreePtr tree, regMaskTP destReg, regMaskTP
const genTreeOps oper = tree->OperGet();
const var_types treeType = tree->TypeGet();
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
regNumber reg = DUMMY_INIT(REG_CORRUPT);
regMaskTP regs = regSet.rsMaskUsed;
regMaskTP needReg = destReg;
@@ -13394,7 +13397,7 @@ void CodeGen::genCodeForTreeLng(GenTreePtr tree, regMaskTP needReg, regMaskTP av
int helper;
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
switch (oper)
{
@@ -14538,79 +14541,6 @@ void CodeGen::genCodeForTreeLng(GenTreePtr tree, regMaskTP needReg, regMaskTP av
goto DONE;
-#if LONG_ASG_OPS
-
- case GT_ASG_OR:
- insLo = insHi = INS_OR;
- goto ASG_OPR;
- case GT_ASG_XOR:
- insLo = insHi = INS_XOR;
- goto ASG_OPR;
- case GT_ASG_AND:
- insLo = insHi = INS_AND;
- goto ASG_OPR;
- case GT_ASG_SUB:
- insLo = INS_sub;
- insHi = INS_SUBC;
- goto ASG_OPR;
- case GT_ASG_ADD:
- insLo = INS_add;
- insHi = INS_ADDC;
- goto ASG_OPR;
-
- ASG_OPR:
-
- if (op2->gtOper == GT_CNS_LNG)
- {
- __int64 lval = op2->gtLngCon.gtLconVal;
-
- /* Make the target addressable */
-
- addrReg = genMakeAddressable(op1, needReg, RegSet::FREE_REG);
-
- /* Optimize some special cases */
-
- doLo = doHi = true;
-
- /* Check for "(op1 AND -1)" and "(op1 [X]OR 0)" */
-
- switch (oper)
- {
- case GT_ASG_AND:
- if ((int)(lval) == -1)
- doLo = false;
- if ((int)(lval >> 32) == -1)
- doHi = false;
- break;
-
- case GT_ASG_OR:
- case GT_ASG_XOR:
- if (!(lval & 0x00000000FFFFFFFF))
- doLo = false;
- if (!(lval & 0xFFFFFFFF00000000))
- doHi = false;
- break;
- }
-
- if (doLo)
- inst_TT_IV(insLo, op1, (int)(lval), 0);
- if (doHi)
- inst_TT_IV(insHi, op1, (int)(lval >> 32), 4);
-
- bool isArith = (oper == GT_ASG_ADD || oper == GT_ASG_SUB);
- if (doLo || doHi)
- tree->gtFlags |= GTF_ZSF_SET;
-
- genDoneAddressable(op1, addrReg, RegSet::FREE_REG);
- goto DONE_ASSG_REGS;
- }
-
- /* TODO: allow non-const long assignment operators */
-
- noway_assert(!"non-const long asgop NYI");
-
-#endif // LONG_ASG_OPS
-
case GT_IND:
case GT_NULLCHECK:
{
@@ -20725,27 +20655,26 @@ bool CodeGen::genRegTrashable(regNumber reg, GenTreePtr tree)
*/
GenTreePtr Compiler::fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode, // The node to start walking with.
- GenTreePtr relopNode, // The node before the startNode.
+ GenTreePtr relopNode) // The node before the startNode.
// (It should either be NULL or
// a GTF_RELOP_QMARK node.)
- GenTreePtr asgdLclVar)
{
GenTreePtr tree;
VARSET_TP VARSET_INIT(this, defSet_BeforeSplit, fgCurDefSet); // Store the current fgCurDefSet and fgCurUseSet so
VARSET_TP VARSET_INIT(this, useSet_BeforeSplit, fgCurUseSet); // we can restore then before entering the elseTree.
- bool heapUse_BeforeSplit = fgCurHeapUse;
- bool heapDef_BeforeSplit = fgCurHeapDef;
- bool heapHavoc_BeforeSplit = fgCurHeapHavoc;
+ MemoryKindSet memoryUse_BeforeSplit = fgCurMemoryUse;
+ MemoryKindSet memoryDef_BeforeSplit = fgCurMemoryDef;
+ MemoryKindSet memoryHavoc_BeforeSplit = fgCurMemoryHavoc;
VARSET_TP VARSET_INIT_NOCOPY(defSet_AfterThenTree, VarSetOps::MakeEmpty(this)); // These two variables will store
// the USE and DEF sets after
VARSET_TP VARSET_INIT_NOCOPY(useSet_AfterThenTree, VarSetOps::MakeEmpty(this)); // evaluating the thenTree.
- bool heapUse_AfterThenTree = fgCurHeapUse;
- bool heapDef_AfterThenTree = fgCurHeapDef;
- bool heapHavoc_AfterThenTree = fgCurHeapHavoc;
+ MemoryKindSet memoryUse_AfterThenTree = fgCurMemoryUse;
+ MemoryKindSet memoryDef_AfterThenTree = fgCurMemoryDef;
+ MemoryKindSet memoryHavoc_AfterThenTree = fgCurMemoryHavoc;
// relopNode is either NULL or a GTF_RELOP_QMARK node.
assert(!relopNode || (relopNode->OperKind() & GTK_RELOP) && (relopNode->gtFlags & GTF_RELOP_QMARK));
@@ -20772,9 +20701,9 @@ GenTreePtr Compiler::fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode,
VarSetOps::IntersectionD(this, fgCurDefSet, defSet_AfterThenTree);
VarSetOps::UnionD(this, fgCurUseSet, useSet_AfterThenTree);
- fgCurHeapDef = fgCurHeapDef && heapDef_AfterThenTree;
- fgCurHeapHavoc = fgCurHeapHavoc && heapHavoc_AfterThenTree;
- fgCurHeapUse = fgCurHeapUse || heapUse_AfterThenTree;
+ fgCurMemoryDef = fgCurMemoryDef & memoryDef_AfterThenTree;
+ fgCurMemoryHavoc = fgCurMemoryHavoc & memoryHavoc_AfterThenTree;
+ fgCurMemoryUse = fgCurMemoryUse | memoryUse_AfterThenTree;
// Return the GT_QMARK node itself so the caller can continue from there.
// NOTE: the caller will get to the next node by doing the "tree = tree->gtNext"
@@ -20791,16 +20720,16 @@ GenTreePtr Compiler::fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode,
VarSetOps::Assign(this, defSet_AfterThenTree, fgCurDefSet);
VarSetOps::Assign(this, useSet_AfterThenTree, fgCurUseSet);
- heapDef_AfterThenTree = fgCurHeapDef;
- heapHavoc_AfterThenTree = fgCurHeapHavoc;
- heapUse_AfterThenTree = fgCurHeapUse;
+ memoryDef_AfterThenTree = fgCurMemoryDef;
+ memoryHavoc_AfterThenTree = fgCurMemoryHavoc;
+ memoryUse_AfterThenTree = fgCurMemoryUse;
VarSetOps::Assign(this, fgCurDefSet, defSet_BeforeSplit);
VarSetOps::Assign(this, fgCurUseSet, useSet_BeforeSplit);
- fgCurHeapDef = heapDef_BeforeSplit;
- fgCurHeapHavoc = heapHavoc_BeforeSplit;
- fgCurHeapUse = heapUse_BeforeSplit;
+ fgCurMemoryDef = memoryDef_BeforeSplit;
+ fgCurMemoryHavoc = memoryHavoc_BeforeSplit;
+ fgCurMemoryUse = memoryUse_BeforeSplit;
break;
@@ -20810,43 +20739,43 @@ GenTreePtr Compiler::fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode,
case GT_LCL_FLD_ADDR:
case GT_STORE_LCL_VAR:
case GT_STORE_LCL_FLD:
- fgMarkUseDef(tree->AsLclVarCommon(), asgdLclVar);
+ fgMarkUseDef(tree->AsLclVarCommon());
break;
case GT_CLS_VAR:
- // For Volatile indirection, first mutate the global heap
+ // For Volatile indirection, first mutate GcHeap/ByrefExposed
// see comments in ValueNum.cpp (under case GT_CLS_VAR)
// This models Volatile reads as def-then-use of the heap.
// and allows for a CSE of a subsequent non-volatile read
if ((tree->gtFlags & GTF_FLD_VOLATILE) != 0)
{
// For any Volatile indirection, we must handle it as a
- // definition of the global heap
- fgCurHeapDef = true;
+ // definition of GcHeap/ByrefExposed
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
}
// If the GT_CLS_VAR is the lhs of an assignment, we'll handle it as a heap def, when we get to
// assignment.
// Otherwise, we treat it as a use here.
- if (!fgCurHeapDef && (tree->gtFlags & GTF_CLS_VAR_ASG_LHS) == 0)
+ if ((tree->gtFlags & GTF_CLS_VAR_ASG_LHS) == 0)
{
- fgCurHeapUse = true;
+ fgCurMemoryUse |= memoryKindSet(GcHeap, ByrefExposed);
}
break;
case GT_IND:
- // For Volatile indirection, first mutate the global heap
+ // For Volatile indirection, first mutate GcHeap/ByrefExposed
// see comments in ValueNum.cpp (under case GT_CLS_VAR)
// This models Volatile reads as def-then-use of the heap.
// and allows for a CSE of a subsequent non-volatile read
if ((tree->gtFlags & GTF_IND_VOLATILE) != 0)
{
// For any Volatile indirection, we must handle it as a
- // definition of the global heap
- fgCurHeapDef = true;
+ // definition of GcHeap/ByrefExposed
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
}
// If the GT_IND is the lhs of an assignment, we'll handle it
- // as a heap def, when we get to assignment.
+ // as a heap/byref def, when we get to assignment.
// Otherwise, we treat it as a use here.
if ((tree->gtFlags & GTF_IND_ASG_LHS) == 0)
{
@@ -20855,16 +20784,13 @@ GenTreePtr Compiler::fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode,
GenTreePtr addrArg = tree->gtOp.gtOp1->gtEffectiveVal(/*commaOnly*/ true);
if (!addrArg->DefinesLocalAddr(this, /*width doesn't matter*/ 0, &dummyLclVarTree, &dummyIsEntire))
{
- if (!fgCurHeapDef)
- {
- fgCurHeapUse = true;
- }
+ fgCurMemoryUse |= memoryKindSet(GcHeap, ByrefExposed);
}
else
{
// Defines a local addr
assert(dummyLclVarTree != nullptr);
- fgMarkUseDef(dummyLclVarTree->AsLclVarCommon(), asgdLclVar);
+ fgMarkUseDef(dummyLclVarTree->AsLclVarCommon());
}
}
break;
@@ -20875,25 +20801,23 @@ GenTreePtr Compiler::fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode,
unreached();
break;
- // We'll assume these are use-then-defs of the heap.
+ // We'll assume these are use-then-defs of GcHeap/ByrefExposed.
case GT_LOCKADD:
case GT_XADD:
case GT_XCHG:
case GT_CMPXCHG:
- if (!fgCurHeapDef)
- {
- fgCurHeapUse = true;
- }
- fgCurHeapDef = true;
- fgCurHeapHavoc = true;
+ fgCurMemoryUse |= memoryKindSet(GcHeap, ByrefExposed);
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
+ fgCurMemoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
break;
case GT_MEMORYBARRIER:
- // Simliar to any Volatile indirection, we must handle this as a definition of the global heap
- fgCurHeapDef = true;
+ // Simliar to any Volatile indirection, we must handle this as a definition of GcHeap/ByrefExposed
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
break;
- // For now, all calls read/write the heap, the latter in its entirety. Might tighten this case later.
+ // For now, all calls read/write GcHeap/ByrefExposed, writes in their entirety. Might tighten this case
+ // later.
case GT_CALL:
{
GenTreeCall* call = tree->AsCall();
@@ -20909,12 +20833,9 @@ GenTreePtr Compiler::fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode,
}
if (modHeap)
{
- if (!fgCurHeapDef)
- {
- fgCurHeapUse = true;
- }
- fgCurHeapDef = true;
- fgCurHeapHavoc = true;
+ fgCurMemoryUse |= memoryKindSet(GcHeap, ByrefExposed);
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
+ fgCurMemoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
}
}
@@ -20946,14 +20867,26 @@ GenTreePtr Compiler::fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode,
default:
- // Determine whether it defines a heap location.
+ // Determine what memory kinds it defines.
if (tree->OperIsAssignment() || tree->OperIsBlkOp())
{
GenTreeLclVarCommon* dummyLclVarTree = NULL;
- if (!tree->DefinesLocal(this, &dummyLclVarTree))
+ if (tree->DefinesLocal(this, &dummyLclVarTree))
+ {
+ if (lvaVarAddrExposed(dummyLclVarTree->gtLclNum))
+ {
+ fgCurMemoryDef |= memoryKindSet(ByrefExposed);
+
+ // We've found a store that modifies ByrefExposed
+ // memory but not GcHeap memory, so track their
+ // states separately.
+ byrefStatesMatchGcHeapStates = false;
+ }
+ }
+ else
{
- // If it doesn't define a local, then it might update the heap.
- fgCurHeapDef = true;
+ // If it doesn't define a local, then it might update GcHeap/ByrefExposed.
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
}
}
@@ -20967,7 +20900,7 @@ GenTreePtr Compiler::fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode,
// fgCurDefSet and fgCurUseSet into local variables defSet_BeforeSplit and useSet_BeforeSplit.
// The cached values will be used to restore fgCurDefSet and fgCurUseSet once we see the GT_COLON
// node.
- tree = fgLegacyPerStatementLocalVarLiveness(tree->gtNext, tree, asgdLclVar);
+ tree = fgLegacyPerStatementLocalVarLiveness(tree->gtNext, tree);
// We must have been returned here after seeing a GT_QMARK node.
noway_assert(tree->gtOper == GT_QMARK);
diff --git a/src/jit/codegenlinear.cpp b/src/jit/codegenlinear.cpp
index 9713288e08..329c4a755f 100644
--- a/src/jit/codegenlinear.cpp
+++ b/src/jit/codegenlinear.cpp
@@ -133,9 +133,8 @@ void CodeGen::genCodeForBBlist()
*/
BasicBlock* block;
- BasicBlock* lblk; /* previous block */
- for (lblk = nullptr, block = compiler->fgFirstBB; block != nullptr; lblk = block, block = block->bbNext)
+ for (block = compiler->fgFirstBB; block != nullptr; block = block->bbNext)
{
#ifdef DEBUG
if (compiler->verbose)
@@ -284,7 +283,7 @@ void CodeGen::genCodeForBBlist()
}
#endif
// We should never have a block that falls through into the Cold section
- noway_assert(!lblk->bbFallsThrough());
+ noway_assert(!block->bbPrev->bbFallsThrough());
// We require the block that starts the Cold section to have a label
noway_assert(block->bbEmitCookie);
@@ -602,7 +601,7 @@ void CodeGen::genCodeForBBlist()
break;
case BBJ_CALLFINALLY:
- block = genCallFinally(block, lblk);
+ block = genCallFinally(block);
break;
#if FEATURE_EH_FUNCLETS
@@ -906,6 +905,13 @@ void CodeGen::genUnspillRegIfNeeded(GenTree* tree)
// Load local variable from its home location.
inst_RV_TT(ins, dstReg, unspillTree, 0, attr);
+#elif defined(_TARGET_ARM_)
+ var_types targetType = unspillTree->gtType;
+ instruction ins = ins_Load(targetType, compiler->isSIMDTypeLocalAligned(lcl->gtLclNum));
+ emitAttr attr = emitTypeSize(targetType);
+
+ // Load local variable from its home location.
+ inst_RV_TT(ins, dstReg, unspillTree, 0, attr);
#else
NYI("Unspilling not implemented for this target architecture.");
#endif
@@ -1203,22 +1209,16 @@ void CodeGen::genConsumeRegs(GenTree* tree)
}
#endif // !defined(_TARGET_64BIT_)
- if (tree->isContained())
+ if (tree->isUsedFromSpillTemp())
{
- if (tree->isContainedSpillTemp())
- {
- // spill temps are un-tracked and hence no need to update life
- }
- else if (tree->isIndir())
+ // spill temps are un-tracked and hence no need to update life
+ }
+ else if (tree->isContained())
+ {
+ if (tree->isIndir())
{
genConsumeAddress(tree->AsIndir()->Addr());
}
- else if (tree->OperGet() == GT_AND)
- {
- // This is the special contained GT_AND that we created in Lowering::TreeNodeInfoInitCmp()
- // Now we need to consume the operands of the GT_AND node.
- genConsumeOperands(tree->AsOp());
- }
#ifdef _TARGET_XARCH_
else if (tree->OperGet() == GT_LCL_VAR)
{
diff --git a/src/jit/codegenlinear.h b/src/jit/codegenlinear.h
index 406ab779f1..c8a5af657a 100644
--- a/src/jit/codegenlinear.h
+++ b/src/jit/codegenlinear.h
@@ -93,10 +93,11 @@ void genSIMDCheck(GenTree* treeNode);
// their size rounded to TARGET_POINTER_SIZE (which is 8 bytes on 64-bit targets) and hence
// Vector3 locals could be treated as TYP_SIMD16 while reading/writing.
void genStoreIndTypeSIMD12(GenTree* treeNode);
-void genStoreLclFldTypeSIMD12(GenTree* treeNode);
void genLoadIndTypeSIMD12(GenTree* treeNode);
+void genStoreLclTypeSIMD12(GenTree* treeNode);
void genLoadLclTypeSIMD12(GenTree* treeNode);
#ifdef _TARGET_X86_
+void genStoreSIMD12ToStack(regNumber operandReg, regNumber tmpReg);
void genPutArgStkSIMD12(GenTree* treeNode);
#endif // _TARGET_X86_
#endif // FEATURE_SIMD
@@ -217,7 +218,7 @@ void genCallInstruction(GenTreePtr call);
void genJmpMethod(GenTreePtr jmp);
-BasicBlock* genCallFinally(BasicBlock* block, BasicBlock* lblk);
+BasicBlock* genCallFinally(BasicBlock* block);
#if FEATURE_EH_FUNCLETS
void genEHCatchRet(BasicBlock* block);
diff --git a/src/jit/codegenxarch.cpp b/src/jit/codegenxarch.cpp
index 8e0af48799..e893da6035 100644
--- a/src/jit/codegenxarch.cpp
+++ b/src/jit/codegenxarch.cpp
@@ -226,7 +226,7 @@ void CodeGen::genEmitGSCookieCheck(bool pushReg)
genPopRegs(pushedRegs, byrefPushedRegs, norefPushedRegs);
}
-BasicBlock* CodeGen::genCallFinally(BasicBlock* block, BasicBlock* lblk)
+BasicBlock* CodeGen::genCallFinally(BasicBlock* block)
{
#if FEATURE_EH_FUNCLETS
// Generate a call to the finally, like this:
@@ -263,10 +263,14 @@ BasicBlock* CodeGen::genCallFinally(BasicBlock* block, BasicBlock* lblk)
}
else
{
+// TODO-Linux-x86: Do we need to handle the GC information for this NOP or JMP specially, as is done for other
+// architectures?
+#ifndef JIT32_GCENCODER
// Because of the way the flowgraph is connected, the liveness info for this one instruction
// after the call is not (can not be) correct in cases where a variable has a last use in the
// handler. So turn off GC reporting for this single instruction.
getEmitter()->emitDisableGC();
+#endif // JIT32_GCENCODER
// Now go to where the finally funclet needs to return to.
if (block->bbNext->bbJumpDest == block->bbNext->bbNext)
@@ -282,7 +286,9 @@ BasicBlock* CodeGen::genCallFinally(BasicBlock* block, BasicBlock* lblk)
inst_JMP(EJ_jmp, block->bbNext->bbJumpDest);
}
+#ifndef JIT32_GCENCODER
getEmitter()->emitEnableGC();
+#endif // JIT32_GCENCODER
}
#else // !FEATURE_EH_FUNCLETS
@@ -348,8 +354,6 @@ BasicBlock* CodeGen::genCallFinally(BasicBlock* block, BasicBlock* lblk)
if (!(block->bbFlags & BBF_RETLESS_CALL))
{
assert(block->isBBCallAlwaysPair());
-
- lblk = block;
block = block->bbNext;
}
return block;
@@ -515,13 +519,13 @@ void CodeGen::genCodeForMulHi(GenTreeOp* treeNode)
GenTree* regOp = op1;
GenTree* rmOp = op2;
- // Set rmOp to the contained memory operand (if any)
- if (op1->isContained() || (!op2->isContained() && (op2->gtRegNum == REG_RAX)))
+ // Set rmOp to the memory operand (if any)
+ if (op1->isUsedFromMemory() || (op2->isUsedFromReg() && (op2->gtRegNum == REG_RAX)))
{
regOp = op2;
rmOp = op1;
}
- assert(!regOp->isContained());
+ assert(regOp->isUsedFromReg());
// Setup targetReg when neither of the source operands was a matching register
if (regOp->gtRegNum != REG_RAX)
@@ -569,12 +573,12 @@ void CodeGen::genCodeForLongUMod(GenTreeOp* node)
GenTree* const dividendLo = dividend->gtOp1;
GenTree* const dividendHi = dividend->gtOp2;
- assert(!dividendLo->isContained());
- assert(!dividendHi->isContained());
+ assert(dividendLo->isUsedFromReg());
+ assert(dividendHi->isUsedFromReg());
GenTree* const divisor = node->gtOp2;
assert(divisor->gtSkipReloadOrCopy()->OperGet() == GT_CNS_INT);
- assert(!divisor->gtSkipReloadOrCopy()->isContained());
+ assert(divisor->gtSkipReloadOrCopy()->isUsedFromReg());
assert(divisor->gtSkipReloadOrCopy()->AsIntCon()->gtIconVal >= 2);
assert(divisor->gtSkipReloadOrCopy()->AsIntCon()->gtIconVal <= 0x3fffffff);
@@ -656,16 +660,16 @@ void CodeGen::genCodeForDivMod(GenTreeOp* treeNode)
var_types targetType = treeNode->TypeGet();
emitter* emit = getEmitter();
- // dividend is not contained.
- assert(!dividend->isContained());
+ // dividend is in a register.
+ assert(dividend->isUsedFromReg());
genConsumeOperands(treeNode->AsOp());
if (varTypeIsFloating(targetType))
{
- // divisor is not contained or if contained is a memory op.
+ // Check that divisor is a valid operand.
// Note that a reg optional operand is a treated as a memory op
// if no register is allocated to it.
- assert(!divisor->isContained() || divisor->isMemoryOp() || divisor->IsCnsFltOrDbl() ||
+ assert(divisor->isUsedFromReg() || divisor->isMemoryOp() || divisor->IsCnsFltOrDbl() ||
divisor->IsRegOptional());
// Floating point div/rem operation
@@ -675,7 +679,7 @@ void CodeGen::genCodeForDivMod(GenTreeOp* treeNode)
{
emit->emitInsBinary(genGetInsForOper(treeNode->gtOper, targetType), size, treeNode, divisor);
}
- else if (!divisor->isContained() && divisor->gtRegNum == targetReg)
+ else if (divisor->isUsedFromReg() && divisor->gtRegNum == targetReg)
{
// It is not possible to generate 2-operand divss or divsd where reg2 = reg1 / reg2
// because divss/divsd reg1, reg2 will over-write reg1. Therefore, in case of AMD64
@@ -773,8 +777,8 @@ void CodeGen::genCodeForBinary(GenTree* treeNode)
GenTreePtr op1 = treeNode->gtGetOp1();
GenTreePtr op2 = treeNode->gtGetOp2();
- // Commutative operations can mark op1 as contained to generate "op reg, memop/immed"
- if (op1->isContained())
+ // Commutative operations can mark op1 as contained or reg-optional to generate "op reg, memop/immed"
+ if (!op1->isUsedFromReg())
{
assert(treeNode->OperIsCommutative());
assert(op1->isMemoryOp() || op1->IsCnsNonZeroFltOrDbl() || op1->IsIntCnsFitsInI32() || op1->IsRegOptional());
@@ -788,8 +792,8 @@ void CodeGen::genCodeForBinary(GenTree* treeNode)
// The arithmetic node must be sitting in a register (since it's not contained)
noway_assert(targetReg != REG_NA);
- regNumber op1reg = op1->isContained() ? REG_NA : op1->gtRegNum;
- regNumber op2reg = op2->isContained() ? REG_NA : op2->gtRegNum;
+ regNumber op1reg = op1->isUsedFromReg() ? op1->gtRegNum : REG_NA;
+ regNumber op2reg = op2->isUsedFromReg() ? op2->gtRegNum : REG_NA;
GenTreePtr dst;
GenTreePtr src;
@@ -814,7 +818,7 @@ void CodeGen::genCodeForBinary(GenTree* treeNode)
}
// now we know there are 3 different operands so attempt to use LEA
else if (oper == GT_ADD && !varTypeIsFloating(treeNode) && !treeNode->gtOverflowEx() // LEA does not set flags
- && (op2->isContainedIntOrIImmed() || !op2->isContained()) && !treeNode->gtSetFlags())
+ && (op2->isContainedIntOrIImmed() || op2->isUsedFromReg()) && !treeNode->gtSetFlags())
{
if (op2->isContainedIntOrIImmed())
{
@@ -936,7 +940,7 @@ void CodeGen::genStructReturn(GenTreePtr treeNode)
{
// Right now the only enregistrable structs supported are SIMD vector types.
assert(varTypeIsSIMD(op1));
- assert(!op1->isContained());
+ assert(op1->isUsedFromReg());
// This is a case of operand is in a single reg and needs to be
// returned in multiple ABI return registers.
@@ -974,7 +978,7 @@ void CodeGen::genStructReturn(GenTreePtr treeNode)
}
else
{
- assert(op1->isContained());
+ assert(op1->isUsedFromMemory());
// Copy var on stack into ABI return registers
int offset = 0;
@@ -1328,7 +1332,7 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
else
{
GenTreePtr operand = treeNode->gtGetOp1();
- assert(!operand->isContained());
+ assert(operand->isUsedFromReg());
regNumber operandReg = genConsumeReg(operand);
if (operandReg != targetReg)
@@ -1374,7 +1378,7 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
case GT_RSH_LO:
// TODO-X86-CQ: This only handles the case where the operand being shifted is in a register. We don't
// need sourceHi to be always in reg in case of GT_LSH_HI (because it could be moved from memory to
- // targetReg if sourceHi is a contained mem-op). Similarly for GT_RSH_LO, sourceLo could be marked as
+ // targetReg if sourceHi is a memory operand). Similarly for GT_RSH_LO, sourceLo could be marked as
// contained memory-op. Even if not a memory-op, we could mark it as reg-optional.
genCodeForShiftLong(treeNode);
break;
@@ -1423,7 +1427,6 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
if (!treeNode->InReg() && !(treeNode->gtFlags & GTF_SPILLED))
{
assert(!isRegCandidate);
-
#if defined(FEATURE_SIMD) && defined(_TARGET_X86_)
// Loading of TYP_SIMD12 (i.e. Vector3) variable
if (treeNode->TypeGet() == TYP_SIMD12)
@@ -1486,10 +1489,11 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
// storing of TYP_SIMD12 (i.e. Vector3) field
if (treeNode->TypeGet() == TYP_SIMD12)
{
- genStoreLclFldTypeSIMD12(treeNode);
+ genStoreLclTypeSIMD12(treeNode);
break;
}
-#endif
+#endif // FEATURE_SIMD
+
GenTreePtr op1 = treeNode->gtGetOp1();
genConsumeRegs(op1);
emit->emitInsBinary(ins_Store(targetType), emitTypeSize(treeNode), treeNode, op1);
@@ -1526,6 +1530,13 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
#endif // !defined(_TARGET_64BIT_)
#ifdef FEATURE_SIMD
+ // storing of TYP_SIMD12 (i.e. Vector3) field
+ if (treeNode->TypeGet() == TYP_SIMD12)
+ {
+ genStoreLclTypeSIMD12(treeNode);
+ break;
+ }
+
if (varTypeIsSIMD(targetType) && (targetReg != REG_NA) && op1->IsCnsIntOrI())
{
// This is only possible for a zero-init.
@@ -1547,25 +1558,24 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
}
else
{
- bool containedOp1 = op1->isContained();
// Look for the case where we have a constant zero which we've marked for reuse,
// but which isn't actually in the register we want. In that case, it's better to create
// zero in the target register, because an xor is smaller than a copy. Note that we could
// potentially handle this in the register allocator, but we can't always catch it there
// because the target may not have a register allocated for it yet.
- if (!containedOp1 && (op1->gtRegNum != treeNode->gtRegNum) &&
+ if (op1->isUsedFromReg() && (op1->gtRegNum != treeNode->gtRegNum) &&
(op1->IsIntegralConst(0) || op1->IsFPZero()))
{
op1->gtRegNum = REG_NA;
op1->ResetReuseRegVal();
- containedOp1 = true;
}
- if (containedOp1)
+ if (!op1->isUsedFromReg())
{
- // Currently, we assume that the contained source of a GT_STORE_LCL_VAR writing to a register
- // must be a constant. However, in the future we might want to support a contained memory op.
- // This is a bit tricky because we have to decide it's contained before register allocation,
+ // Currently, we assume that the non-reg source of a GT_STORE_LCL_VAR writing to a register
+ // must be a constant. However, in the future we might want to support an operand used from
+ // memory. This is a bit tricky because we have to decide it can be used from memory before
+ // register allocation,
// and this would be a case where, once that's done, we need to mark that node as always
// requiring a register - which we always assume now anyway, but once we "optimize" that
// we'll have to take cases like this into account.
@@ -1682,7 +1692,7 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
// CQ: When possible use LEA for mul by imm 3, 5 or 9
ssize_t imm = immOp->AsIntConCommon()->IconValue();
- if (!requiresOverflowCheck && !rmOp->isContained() && ((imm == 3) || (imm == 5) || (imm == 9)))
+ if (!requiresOverflowCheck && rmOp->isUsedFromReg() && ((imm == 3) || (imm == 5) || (imm == 9)))
{
// We will use the LEA instruction to perform this multiply
// Note that an LEA with base=x, index=x and scale=(imm-1) computes x*imm when imm=3,5 or 9.
@@ -1712,15 +1722,15 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
ins = genGetInsForOper(GT_MUL, targetType);
}
- // Set rmOp to the contain memory operand (if any)
+ // Set rmOp to the memory operand (if any)
// or set regOp to the op2 when it has the matching target register for our multiply op
//
- if (op1->isContained() || (!op2->isContained() && (op2->gtRegNum == mulTargetReg)))
+ if (op1->isUsedFromMemory() || (op2->isUsedFromReg() && (op2->gtRegNum == mulTargetReg)))
{
regOp = op2;
rmOp = op1;
}
- assert(!regOp->isContained());
+ assert(regOp->isUsedFromReg());
// Setup targetReg when neither of the source operands was a matching register
if (regOp->gtRegNum != mulTargetReg)
@@ -1781,6 +1791,8 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
case GT_LE:
case GT_GE:
case GT_GT:
+ case GT_TEST_EQ:
+ case GT_TEST_NE:
{
// TODO-XArch-CQ: Check if we can use the currently set flags.
// TODO-XArch-CQ: Check for the case where we can simply transfer the carry bit to a register
@@ -2089,7 +2101,7 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
case GT_NULLCHECK:
{
- assert(!treeNode->gtOp.gtOp1->isContained());
+ assert(treeNode->gtOp.gtOp1->isUsedFromReg());
regNumber reg = genConsumeReg(treeNode->gtOp.gtOp1);
emit->emitIns_AR_R(INS_cmp, EA_4BYTE, reg, reg, 0);
}
@@ -2180,7 +2192,7 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
#if !defined(_TARGET_64BIT_)
case GT_LONG:
- assert(!treeNode->isContained());
+ assert(treeNode->isUsedFromReg());
genConsumeRegs(treeNode);
break;
#endif
@@ -2631,16 +2643,14 @@ void CodeGen::genLclHeap(GenTreePtr tree)
// Loop:
genDefineTempLabel(loop);
-#if defined(_TARGET_AMD64_)
- // Push two 8-byte zeros. This matches the 16-byte STACK_ALIGN value.
- static_assert_no_msg(STACK_ALIGN == (REGSIZE_BYTES * 2));
- inst_IV(INS_push_hide, 0); // --- push 8-byte 0
- inst_IV(INS_push_hide, 0); // --- push 8-byte 0
-#elif defined(_TARGET_X86_)
- // Push a single 4-byte zero. This matches the 4-byte STACK_ALIGN value.
- static_assert_no_msg(STACK_ALIGN == REGSIZE_BYTES);
- inst_IV(INS_push_hide, 0); // --- push 4-byte 0
-#endif // _TARGET_X86_
+ static_assert_no_msg((STACK_ALIGN % REGSIZE_BYTES) == 0);
+ unsigned const count = (STACK_ALIGN / REGSIZE_BYTES);
+
+ for (unsigned i = 0; i < count; i++)
+ {
+ inst_IV(INS_push_hide, 0); // --- push REG_SIZE bytes of 0
+ }
+ // Note that the stack must always be aligned to STACK_ALIGN bytes
// Decrement the loop counter and loop if not done.
inst_RV(INS_dec, regCnt, TYP_I_IMPL);
@@ -2841,8 +2851,8 @@ void CodeGen::genCodeForInitBlkRepStos(GenTreeBlk* initBlkNode)
}
#ifdef DEBUG
- assert(!dstAddr->isContained());
- assert(!initVal->isContained());
+ assert(dstAddr->isUsedFromReg());
+ assert(initVal->isUsedFromReg());
#ifdef _TARGET_AMD64_
assert(size != 0);
#endif
@@ -2878,8 +2888,8 @@ void CodeGen::genCodeForInitBlkUnroll(GenTreeBlk* initBlkNode)
initVal = initVal->gtGetOp1();
}
- assert(!dstAddr->isContained());
- assert(!initVal->isContained() || (initVal->IsIntegralConst(0) && ((size & 0xf) == 0)));
+ assert(dstAddr->isUsedFromReg());
+ assert(initVal->isUsedFromReg() || (initVal->IsIntegralConst(0) && ((size & 0xf) == 0)));
assert(size != 0);
assert(size <= INITBLK_UNROLL_LIMIT);
assert(initVal->gtSkipReloadOrCopy()->IsCnsIntOrI());
@@ -2979,8 +2989,8 @@ void CodeGen::genCodeForInitBlk(GenTreeBlk* initBlkNode)
initVal = initVal->gtGetOp1();
}
- assert(!dstAddr->isContained());
- assert(!initVal->isContained());
+ assert(dstAddr->isUsedFromReg());
+ assert(initVal->isUsedFromReg());
if (blockSize != 0)
{
@@ -3064,7 +3074,7 @@ void CodeGen::genCodeForCpBlkUnroll(GenTreeBlk* cpBlkNode)
if (source->gtOper == GT_IND)
{
srcAddr = source->gtGetOp1();
- if (!srcAddr->isContained())
+ if (srcAddr->isUsedFromReg())
{
genConsumeReg(srcAddr);
}
@@ -3086,7 +3096,7 @@ void CodeGen::genCodeForCpBlkUnroll(GenTreeBlk* cpBlkNode)
srcAddr = source;
}
- if (!dstAddr->isContained())
+ if (dstAddr->isUsedFromReg())
{
genConsumeReg(dstAddr);
}
@@ -3171,7 +3181,7 @@ void CodeGen::genCodeForCpBlkRepMovs(GenTreeBlk* cpBlkNode)
GenTreePtr srcAddr = nullptr;
#ifdef DEBUG
- assert(!dstAddr->isContained());
+ assert(dstAddr->isUsedFromReg());
assert(source->isContained());
#ifdef _TARGET_X86_
@@ -3352,7 +3362,7 @@ void CodeGen::genStructPutArgUnroll(GenTreePutArgStk* putArgNode)
assert(src->gtOper == GT_OBJ);
- if (!src->gtOp.gtOp1->isContained())
+ if (src->gtOp.gtOp1->isUsedFromReg())
{
genConsumeReg(src->gtOp.gtOp1);
}
@@ -3544,7 +3554,7 @@ void CodeGen::genCodeForCpObj(GenTreeObj* cpObjNode)
if (source->gtOper == GT_IND)
{
srcAddr = source->gtGetOp1();
- assert(!srcAddr->isContained());
+ assert(srcAddr->isUsedFromReg());
}
else
{
@@ -3557,7 +3567,7 @@ void CodeGen::genCodeForCpObj(GenTreeObj* cpObjNode)
#ifdef DEBUG
bool isRepMovspUsed = false;
- assert(!dstAddr->isContained());
+ assert(dstAddr->isUsedFromReg());
// If the GenTree node has data about GC pointers, this means we're dealing
// with CpObj, so this requires special logic.
@@ -3720,7 +3730,7 @@ void CodeGen::genCodeForCpBlk(GenTreeBlk* cpBlkNode)
if (source->gtOper == GT_IND)
{
srcAddr = source->gtGetOp1();
- assert(!srcAddr->isContained());
+ assert(srcAddr->isUsedFromReg());
}
else
{
@@ -3863,16 +3873,16 @@ void CodeGen::genRangeCheck(GenTreePtr oper)
GenTreeBoundsChk* bndsChk = oper->AsBoundsChk();
- GenTreePtr arrLen = bndsChk->gtArrLen;
GenTreePtr arrIndex = bndsChk->gtIndex;
+ GenTreePtr arrLen = bndsChk->gtArrLen;
GenTreePtr arrRef = nullptr;
int lenOffset = 0;
GenTree * src1, *src2;
emitJumpKind jmpKind;
- genConsumeRegs(arrLen);
genConsumeRegs(arrIndex);
+ genConsumeRegs(arrLen);
if (arrIndex->isContainedIntOrIImmed())
{
@@ -3899,7 +3909,7 @@ void CodeGen::genRangeCheck(GenTreePtr oper)
// cmp reg, [mem] (if arrLen is a memory op)
//
// That is only one of arrIndex or arrLen can be a memory op.
- assert(!arrIndex->isContainedMemoryOp() || !arrLen->isContainedMemoryOp());
+ assert(!arrIndex->isUsedFromMemory() || !arrLen->isUsedFromMemory());
src1 = arrIndex;
src2 = arrLen;
@@ -4211,7 +4221,7 @@ void CodeGen::genCodeForShift(GenTreePtr tree)
{
// Only the non-RMW case here.
assert(tree->OperIsShiftOrRotate());
- assert(!tree->gtOp.gtOp1->isContained());
+ assert(tree->gtOp.gtOp1->isUsedFromReg());
assert(tree->gtRegNum != REG_NA);
genConsumeOperands(tree->AsOp());
@@ -4277,8 +4287,8 @@ void CodeGen::genCodeForShiftLong(GenTreePtr tree)
GenTree* operand = tree->gtOp.gtOp1;
assert(operand->OperGet() == GT_LONG);
- assert(!operand->gtOp.gtOp1->isContained());
- assert(!operand->gtOp.gtOp2->isContained());
+ assert(operand->gtOp.gtOp1->isUsedFromReg());
+ assert(operand->gtOp.gtOp2->isUsedFromReg());
GenTree* operandLo = operand->gtGetOp1();
GenTree* operandHi = operand->gtGetOp2();
@@ -4334,7 +4344,7 @@ void CodeGen::genCodeForShiftRMW(GenTreeStoreInd* storeInd)
assert(data->OperIsShiftOrRotate());
// This function only handles the RMW case.
- assert(data->gtOp.gtOp1->isContained());
+ assert(data->gtOp.gtOp1->isUsedFromMemory());
assert(data->gtOp.gtOp1->isIndir());
assert(Lowering::IndirsAreEquivalent(data->gtOp.gtOp1, storeInd));
assert(data->gtRegNum == REG_NA);
@@ -4580,7 +4590,7 @@ void CodeGen::genStoreInd(GenTreePtr node)
assert(storeInd->IsRMWDstOp1());
rmwSrc = data->gtGetOp1();
rmwDst = data->gtGetOp1();
- assert(rmwSrc->isContained());
+ assert(rmwSrc->isUsedFromMemory());
}
assert(rmwSrc != nullptr);
@@ -4616,8 +4626,7 @@ void CodeGen::genStoreInd(GenTreePtr node)
assert(rmwSrc == data->gtGetOp2());
genCodeForShiftRMW(storeInd);
}
- else if (!compiler->opts.compDbgCode && data->OperGet() == GT_ADD &&
- (rmwSrc->IsIntegralConst(1) || rmwSrc->IsIntegralConst(-1)))
+ else if (data->OperGet() == GT_ADD && (rmwSrc->IsIntegralConst(1) || rmwSrc->IsIntegralConst(-1)))
{
// Generate "inc/dec [mem]" instead of "add/sub [mem], 1".
//
@@ -4858,11 +4867,6 @@ void CodeGen::genCallInstruction(GenTreePtr node)
if (arg->OperGet() != GT_ARGPLACE && !(arg->gtFlags & GTF_LATE_ARG))
{
#if defined(_TARGET_X86_)
- assert((arg->OperGet() == GT_PUTARG_STK) || (arg->OperGet() == GT_LONG));
- if (arg->OperGet() == GT_LONG)
- {
- assert((arg->gtGetOp1()->OperGet() == GT_PUTARG_STK) && (arg->gtGetOp2()->OperGet() == GT_PUTARG_STK));
- }
if ((arg->OperGet() == GT_PUTARG_STK) && (arg->gtGetOp1()->OperGet() == GT_FIELD_LIST))
{
fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, arg);
@@ -4886,9 +4890,9 @@ void CodeGen::genCallInstruction(GenTreePtr node)
stackArgBytes += argBytes;
}
else
- {
#endif // FEATURE_PUT_STRUCT_ARG_STK
+ {
stackArgBytes += genTypeSize(genActualType(arg->TypeGet()));
}
}
@@ -5001,6 +5005,20 @@ void CodeGen::genCallInstruction(GenTreePtr node)
#endif // defined(_TARGET_X86_)
+#ifdef FEATURE_AVX_SUPPORT
+ // When it's a PInvoke call and the call type is USER function, we issue VZEROUPPER here
+ // if the function contains 256bit AVX instructions, this is to avoid AVX-256 to Legacy SSE
+ // transition penalty, assuming the user function contains legacy SSE instruction.
+ // To limit code size increase impact: we only issue VZEROUPPER before PInvoke call, not issue
+ // VZEROUPPER after PInvoke call because transition penalty from legacy SSE to AVX only happens
+ // when there's preceding 256-bit AVX to legacy SSE transition penalty.
+ if (call->IsPInvoke() && (call->gtCallType == CT_USER_FUNC) && getEmitter()->Contains256bitAVX())
+ {
+ assert(compiler->getSIMDInstructionSet() == InstructionSet_AVX);
+ instGen(INS_vzeroupper);
+ }
+#endif
+
if (target != nullptr)
{
#ifdef _TARGET_X86_
@@ -5020,7 +5038,7 @@ void CodeGen::genCallInstruction(GenTreePtr node)
assert(target->OperGet() == GT_IND);
GenTree* addr = target->AsIndir()->Addr();
- assert(!addr->isContained());
+ assert(addr->isUsedFromReg());
genConsumeReg(addr);
genCopyRegIfNeeded(addr, REG_VIRTUAL_STUB_TARGET);
@@ -5113,6 +5131,15 @@ void CodeGen::genCallInstruction(GenTreePtr node)
retSize MULTIREG_HAS_SECOND_GC_RET_ONLY_ARG(secondRetSize), ilOffset);
}
+#if defined(UNIX_X86_ABI)
+ // Put back the stack pointer if there was any padding for stack alignment
+ unsigned padStackAlign = call->fgArgInfo->GetPadStackAlign();
+ if (padStackAlign != 0)
+ {
+ inst_RV_IV(INS_add, REG_SPBASE, padStackAlign * TARGET_POINTER_SIZE, EA_PTRSIZE);
+ }
+#endif // UNIX_X86_ABI
+
// if it was a pinvoke we may have needed to get the address of a label
if (genPendingCallLabel)
{
@@ -6064,7 +6091,7 @@ void CodeGen::genCompareInt(GenTreePtr treeNode)
GenTreePtr op2 = tree->gtOp2;
var_types op1Type = op1->TypeGet();
var_types op2Type = op2->TypeGet();
- regNumber targetReg = treeNode->gtRegNum;
+ regNumber targetReg = tree->gtRegNum;
// Case of op1 == 0 or op1 != 0:
// Optimize generation of 'test' instruction if op1 sets flags.
@@ -6081,7 +6108,7 @@ void CodeGen::genCompareInt(GenTreePtr treeNode)
assert(realOp1->gtSetZSFlags());
// Must be (in)equality against zero.
- assert(tree->OperGet() == GT_EQ || tree->OperGet() == GT_NE);
+ assert(tree->OperIs(GT_EQ, GT_NE));
assert(op2->IsIntegralConst(0));
assert(op2->isContained());
@@ -6105,7 +6132,7 @@ void CodeGen::genCompareInt(GenTreePtr treeNode)
// If we have GT_JTRUE(GT_EQ/NE(GT_SIMD((in)Equality, v1, v2), true/false)),
// then we don't need to generate code for GT_EQ/GT_NE, since SIMD (in)Equality intrinsic
// would set or clear Zero flag.
- if ((targetReg == REG_NA) && (tree->OperGet() == GT_EQ || tree->OperGet() == GT_NE))
+ if ((targetReg == REG_NA) && tree->OperIs(GT_EQ, GT_NE))
{
// Is it a SIMD (in)Equality that doesn't need to materialize result into a register?
if ((op1->gtRegNum == REG_NA) && op1->IsSIMDEqualityOrInequality())
@@ -6124,128 +6151,67 @@ void CodeGen::genCompareInt(GenTreePtr treeNode)
genConsumeOperands(tree);
- instruction ins;
- emitAttr cmpAttr;
-
// TODO-CQ: We should be able to support swapping op1 and op2 to generate cmp reg, imm.
// https://github.com/dotnet/coreclr/issues/7270
assert(!op1->isContainedIntOrIImmed()); // We no longer support
assert(!varTypeIsFloating(op2Type));
-#ifdef _TARGET_X86_
- assert(!varTypeIsLong(op1Type) && !varTypeIsLong(op2Type));
-#endif // _TARGET_X86_
-
- // By default we use an int32 sized cmp instruction
- //
- ins = INS_cmp;
- var_types cmpType = TYP_INT;
-
- // In the if/then/else statement below we may change the
- // 'cmpType' and/or 'ins' to generate a smaller instruction
+ instruction ins;
- // Are we comparing two values that are the same size?
- //
- if (genTypeSize(op1Type) == genTypeSize(op2Type))
+ if (tree->OperIs(GT_TEST_EQ, GT_TEST_NE))
{
- if (op1Type == op2Type)
- {
- // If both types are exactly the same we can use that type
- cmpType = op1Type;
- }
- else if (genTypeSize(op1Type) == 8)
- {
- // If we have two different int64 types we need to use a long compare
- cmpType = TYP_LONG;
- }
-
- cmpAttr = emitTypeSize(cmpType);
+ ins = INS_test;
}
- else // Here we know that (op1Type != op2Type)
+ else if (op1->isUsedFromReg() && op2->IsIntegralConst(0))
{
- // Do we have a short compare against a constant in op2?
- //
- // We checked for this case in TreeNodeInfoInitCmp() and if we can perform a small
- // compare immediate we labeled this compare with a GTF_RELOP_SMALL
- // and for unsigned small non-equality compares the GTF_UNSIGNED flag.
- //
- if (op2->isContainedIntOrIImmed() && ((tree->gtFlags & GTF_RELOP_SMALL) != 0))
- {
- assert(varTypeIsSmall(op1Type));
- cmpType = op1Type;
- }
-#ifdef _TARGET_AMD64_
- else // compare two different sized operands
- {
- // For this case we don't want any memory operands, only registers or immediates
- //
- assert(!op1->isContainedMemoryOp());
- assert(!op2->isContainedMemoryOp());
+ // We're comparing a register to 0 so we can generate "test reg1, reg1"
+ // instead of the longer "cmp reg1, 0"
+ ins = INS_test;
+ op2 = op1;
+ }
+ else
+ {
+ ins = INS_cmp;
+ }
- // Check for the case where one operand is an int64 type
- // Lower should have placed 32-bit operand in a register
- // for signed comparisons we will sign extend the 32-bit value in place.
- //
- bool op1Is64Bit = (genTypeSize(op1Type) == 8);
- bool op2Is64Bit = (genTypeSize(op2Type) == 8);
- if (op1Is64Bit)
- {
- cmpType = TYP_LONG;
- if (!(tree->gtFlags & GTF_UNSIGNED) && !op2Is64Bit)
- {
- assert(op2->gtRegNum != REG_NA);
- inst_RV_RV(INS_movsxd, op2->gtRegNum, op2->gtRegNum, op2Type);
- }
- }
- else if (op2Is64Bit)
- {
- cmpType = TYP_LONG;
- if (!(tree->gtFlags & GTF_UNSIGNED) && !op1Is64Bit)
- {
- assert(op1->gtRegNum != REG_NA);
- }
- }
- }
-#endif // _TARGET_AMD64_
+ var_types type;
- cmpAttr = emitTypeSize(cmpType);
+ if (op1Type == op2Type)
+ {
+ type = op1Type;
}
-
- // See if we can generate a "test" instruction instead of a "cmp".
- // For this to generate the correct conditional branch we must have
- // a compare against zero.
- //
- if (op2->IsIntegralConst(0))
+ else if (genTypeSize(op1Type) == genTypeSize(op2Type))
{
- if (op1->isContained())
- {
- // op1 can be a contained memory op
- // or the special contained GT_AND that we created in Lowering::TreeNodeInfoInitCmp()
- //
- if ((op1->OperGet() == GT_AND) && op1->gtGetOp2()->isContainedIntOrIImmed() &&
- ((tree->OperGet() == GT_EQ) || (tree->OperGet() == GT_NE)))
- {
- ins = INS_test; // we will generate "test andOp1, andOp2CnsVal"
- op2 = op1->gtOp.gtOp2; // must assign op2 before we overwrite op1
- op1 = op1->gtOp.gtOp1; // overwrite op1
-
- if (op1->isContainedMemoryOp())
- {
- // use the size andOp1 if it is a contained memoryop.
- cmpAttr = emitTypeSize(op1->TypeGet());
- }
- // fallthrough to emit->emitInsBinary(ins, cmpAttr, op1, op2);
- }
- }
- else // op1 is not contained thus it must be in a register
- {
- ins = INS_test;
- op2 = op1; // we will generate "test reg1,reg1"
- // fallthrough to emit->emitInsBinary(ins, cmpAttr, op1, op2);
- }
+ // If the types are different but have the same size then we'll use TYP_INT or TYP_LONG.
+ // This primarily deals with small type mixes (e.g. byte/ubyte) that need to be widened
+ // and compared as int. We should not get long type mixes here but handle that as well
+ // just in case.
+ type = genTypeSize(op1Type) == 8 ? TYP_LONG : TYP_INT;
}
-
- getEmitter()->emitInsBinary(ins, cmpAttr, op1, op2);
+ else
+ {
+ // In the types are different simply use TYP_INT. This deals with small type/int type
+ // mixes (e.g. byte/short ubyte/int) that need to be widened and compared as int.
+ // Lowering is expected to handle any mixes that involve long types (e.g. int/long).
+ type = TYP_INT;
+ }
+
+ // The common type cannot be larger than the machine word size
+ assert(genTypeSize(type) <= genTypeSize(TYP_I_IMPL));
+ // The common type cannot be smaller than any of the operand types, we're probably mixing int/long
+ assert(genTypeSize(type) >= max(genTypeSize(op1Type), genTypeSize(op2Type)));
+ // TYP_UINT and TYP_ULONG should not appear here, only small types can be unsigned
+ assert(!varTypeIsUnsigned(type) || varTypeIsSmall(type));
+ // Small unsigned int types (TYP_BOOL can use anything) should use unsigned comparisons
+ assert(!(varTypeIsSmallInt(type) && varTypeIsUnsigned(type)) || ((tree->gtFlags & GTF_UNSIGNED) != 0));
+ // If op1 is smaller then it cannot be in memory, we're probably missing a cast
+ assert((genTypeSize(op1Type) >= genTypeSize(type)) || !op1->isUsedFromMemory());
+ // If op2 is smaller then it cannot be in memory, we're probably missing a cast
+ assert((genTypeSize(op2Type) >= genTypeSize(type)) || !op2->isUsedFromMemory());
+ // If op2 is a constant then it should fit in the common type
+ assert(!op2->IsCnsIntOrI() || genTypeCanRepresentValue(type, op2->AsIntCon()->IconValue()));
+
+ getEmitter()->emitInsBinary(ins, emitTypeSize(type), op1, op2);
// Are we evaluating this into a register?
if (targetReg != REG_NA)
@@ -6810,7 +6776,7 @@ void CodeGen::genFloatToFloatCast(GenTreePtr treeNode)
GenTreePtr op1 = treeNode->gtOp.gtOp1;
#ifdef DEBUG
// If not contained, must be a valid float reg.
- if (!op1->isContained())
+ if (op1->isUsedFromReg())
{
assert(genIsValidFloatReg(op1->gtRegNum));
}
@@ -6821,7 +6787,7 @@ void CodeGen::genFloatToFloatCast(GenTreePtr treeNode)
assert(varTypeIsFloating(srcType) && varTypeIsFloating(dstType));
genConsumeOperands(treeNode->AsOp());
- if (srcType == dstType && (!op1->isContained() && (targetReg == op1->gtRegNum)))
+ if (srcType == dstType && (op1->isUsedFromReg() && (targetReg == op1->gtRegNum)))
{
// source and destinations types are the same and also reside in the same register.
// we just need to consume and produce the reg in this case.
@@ -6861,7 +6827,7 @@ void CodeGen::genIntToFloatCast(GenTreePtr treeNode)
GenTreePtr op1 = treeNode->gtOp.gtOp1;
#ifdef DEBUG
- if (!op1->isContained())
+ if (op1->isUsedFromReg())
{
assert(genIsValidIntReg(op1->gtRegNum));
}
@@ -6936,7 +6902,7 @@ void CodeGen::genIntToFloatCast(GenTreePtr treeNode)
// If we change the instructions below, FloatingPointUtils::convertUInt64ToDobule
// should be also updated for consistent conversion result.
assert(dstType == TYP_DOUBLE);
- assert(!op1->isContained());
+ assert(op1->isUsedFromReg());
// Set the flags without modifying op1.
// test op1Reg, op1Reg
@@ -6995,7 +6961,7 @@ void CodeGen::genFloatToIntCast(GenTreePtr treeNode)
GenTreePtr op1 = treeNode->gtOp.gtOp1;
#ifdef DEBUG
- if (!op1->isContained())
+ if (op1->isUsedFromReg())
{
assert(genIsValidFloatReg(op1->gtRegNum));
}
@@ -7374,7 +7340,7 @@ void CodeGen::genSSE2BitwiseOp(GenTreePtr treeNode)
// Move operand into targetReg only if the reg reserved for
// internal purpose is not the same as targetReg.
GenTreePtr op1 = treeNode->gtOp.gtOp1;
- assert(!op1->isContained());
+ assert(op1->isUsedFromReg());
regNumber operandReg = genConsumeReg(op1);
if (tmpReg != targetReg)
{
@@ -7497,7 +7463,7 @@ unsigned CodeGen::getBaseVarForPutArgStk(GenTreePtr treeNode)
#ifdef _TARGET_X86_
//---------------------------------------------------------------------
-// adjustStackForPutArgStk:
+// genAdjustStackForPutArgStk:
// adjust the stack pointer for a putArgStk node if necessary.
//
// Arguments:
@@ -7505,6 +7471,12 @@ unsigned CodeGen::getBaseVarForPutArgStk(GenTreePtr treeNode)
//
// Returns: true if the stack pointer was adjusted; false otherwise.
//
+// Notes:
+// Sets `m_pushStkArg` to true if the stack arg needs to be pushed,
+// false if the stack arg needs to be stored at the current stack
+// pointer address. This is exactly the opposite of the return value
+// of this function.
+//
bool CodeGen::genAdjustStackForPutArgStk(GenTreePutArgStk* putArgStk)
{
#ifdef FEATURE_SIMD
@@ -7562,11 +7534,10 @@ bool CodeGen::genAdjustStackForPutArgStk(GenTreePutArgStk* putArgStk)
}
//---------------------------------------------------------------------
-// genPutArgStkFieldList - generate code for passing an arg on the stack.
+// genPutArgStkFieldList - generate code for passing a GT_FIELD_LIST arg on the stack.
//
// Arguments
-// treeNode - the GT_PUTARG_STK node
-// targetType - the type of the treeNode
+// treeNode - the GT_PUTARG_STK node whose op1 is a GT_FIELD_LIST
//
// Return value:
// None
@@ -7578,24 +7549,36 @@ void CodeGen::genPutArgStkFieldList(GenTreePutArgStk* putArgStk)
// Set m_pushStkArg and pre-adjust the stack if necessary.
const bool preAdjustedStack = genAdjustStackForPutArgStk(putArgStk);
+
// For now, we only support the "push" case; we will push a full slot for the first field of each slot
// within the struct.
assert((putArgStk->isPushKind()) && !preAdjustedStack && m_pushStkArg);
- // If we have pre-adjusted the stack and are simply storing the fields in order) set the offset to 0.
+ // If we have pre-adjusted the stack and are simply storing the fields in order, set the offset to 0.
// (Note that this mode is not currently being used.)
// If we are pushing the arguments (i.e. we have not pre-adjusted the stack), then we are pushing them
// in reverse order, so we start with the current field offset at the size of the struct arg (which must be
// a multiple of the target pointer size).
unsigned currentOffset = (preAdjustedStack) ? 0 : putArgStk->getArgSize();
unsigned prevFieldOffset = currentOffset;
- regNumber tmpReg = REG_NA;
+ regNumber intTmpReg = REG_NA;
+ regNumber simdTmpReg = REG_NA;
if (putArgStk->gtRsvdRegs != RBM_NONE)
{
- assert(genCountBits(putArgStk->gtRsvdRegs) == 1);
- tmpReg = genRegNumFromMask(putArgStk->gtRsvdRegs);
- assert(genIsValidIntReg(tmpReg));
+ regMaskTP rsvdRegs = putArgStk->gtRsvdRegs;
+ if ((rsvdRegs & RBM_ALLINT) != 0)
+ {
+ intTmpReg = genRegNumFromMask(rsvdRegs & RBM_ALLINT);
+ assert(genIsValidIntReg(intTmpReg));
+ }
+ if ((rsvdRegs & RBM_ALLFLOAT) != 0)
+ {
+ simdTmpReg = genRegNumFromMask(rsvdRegs & RBM_ALLFLOAT);
+ assert(genIsValidFloatReg(simdTmpReg));
+ }
+ assert(genCountBits(rsvdRegs) == (unsigned)((intTmpReg == REG_NA) ? 0 : 1) + ((simdTmpReg == REG_NA) ? 0 : 1));
}
+
for (GenTreeFieldList* current = fieldList; current != nullptr; current = current->Rest())
{
GenTree* const fieldNode = current->Current();
@@ -7612,7 +7595,7 @@ void CodeGen::genPutArgStkFieldList(GenTreePutArgStk* putArgStk)
// assigned a register, and which is therefore contained.
// Unlike genConsumeReg(), it handles the case where no registers are being consumed.
genConsumeRegs(fieldNode);
- regNumber argReg = fieldNode->isContainedSpillTemp() ? REG_NA : fieldNode->gtRegNum;
+ regNumber argReg = fieldNode->isUsedFromSpillTemp() ? REG_NA : fieldNode->gtRegNum;
// If the field is slot-like, we can use a push instruction to store the entire register no matter the type.
//
@@ -7623,7 +7606,7 @@ void CodeGen::genPutArgStkFieldList(GenTreePutArgStk* putArgStk)
// able to detect stores into the outgoing argument area of the stack on x86.
const bool fieldIsSlot = ((fieldOffset % 4) == 0) && ((prevFieldOffset - fieldOffset) >= 4);
int adjustment = roundUp(currentOffset - fieldOffset, 4);
- if (fieldIsSlot)
+ if (fieldIsSlot && !varTypeIsSIMD(fieldType))
{
fieldType = genActualType(fieldType);
unsigned pushSize = genTypeSize(fieldType);
@@ -7641,12 +7624,13 @@ void CodeGen::genPutArgStkFieldList(GenTreePutArgStk* putArgStk)
else
{
m_pushStkArg = false;
+
// We always "push" floating point fields (i.e. they are full slot values that don't
// require special handling).
- assert(varTypeIsIntegralOrI(fieldNode));
+ assert(varTypeIsIntegralOrI(fieldNode) || varTypeIsSIMD(fieldNode));
+
// If we can't push this field, it needs to be in a register so that we can store
// it to the stack location.
- assert(tmpReg != REG_NA);
if (adjustment != 0)
{
// This moves the stack pointer to fieldOffset.
@@ -7658,15 +7642,16 @@ void CodeGen::genPutArgStkFieldList(GenTreePutArgStk* putArgStk)
}
// Does it need to be in a byte register?
- // If so, we'll use tmpReg, which must have been allocated as a byte register.
+ // If so, we'll use intTmpReg, which must have been allocated as a byte register.
// If it's already in a register, but not a byteable one, then move it.
if (varTypeIsByte(fieldType) && ((argReg == REG_NA) || ((genRegMask(argReg) & RBM_BYTE_REGS) == 0)))
{
- noway_assert((genRegMask(tmpReg) & RBM_BYTE_REGS) != 0);
+ assert(intTmpReg != REG_NA);
+ noway_assert((genRegMask(intTmpReg) & RBM_BYTE_REGS) != 0);
if (argReg != REG_NA)
{
- inst_RV_RV(INS_mov, tmpReg, argReg, fieldType);
- argReg = tmpReg;
+ inst_RV_RV(INS_mov, intTmpReg, argReg, fieldType);
+ argReg = intTmpReg;
}
}
}
@@ -7675,8 +7660,9 @@ void CodeGen::genPutArgStkFieldList(GenTreePutArgStk* putArgStk)
{
if (m_pushStkArg)
{
- if (fieldNode->isContainedSpillTemp())
+ if (fieldNode->isUsedFromSpillTemp())
{
+ assert(!varTypeIsSIMD(fieldType)); // Q: can we get here with SIMD?
assert(fieldNode->IsRegOptional());
TempDsc* tmp = getSpillTempDsc(fieldNode);
getEmitter()->emitIns_S(INS_push, emitActualTypeSize(fieldNode->TypeGet()), tmp->tdTempNum(), 0);
@@ -7709,25 +7695,35 @@ void CodeGen::genPutArgStkFieldList(GenTreePutArgStk* putArgStk)
}
else
{
- // The stack has been adjusted and we will load the field to tmpReg and then store it on the stack.
+ // The stack has been adjusted and we will load the field to intTmpReg and then store it on the stack.
assert(varTypeIsIntegralOrI(fieldNode));
switch (fieldNode->OperGet())
{
case GT_LCL_VAR:
- inst_RV_TT(INS_mov, tmpReg, fieldNode);
+ inst_RV_TT(INS_mov, intTmpReg, fieldNode);
break;
case GT_CNS_INT:
- genSetRegToConst(tmpReg, fieldNode->TypeGet(), fieldNode);
+ genSetRegToConst(intTmpReg, fieldNode->TypeGet(), fieldNode);
break;
default:
unreached();
}
- genStoreRegToStackArg(fieldType, tmpReg, fieldOffset - currentOffset);
+ genStoreRegToStackArg(fieldType, intTmpReg, fieldOffset - currentOffset);
}
}
else
{
- genStoreRegToStackArg(fieldType, argReg, fieldOffset - currentOffset);
+#if defined(_TARGET_X86_) && defined(FEATURE_SIMD)
+ if (fieldType == TYP_SIMD12)
+ {
+ assert(genIsValidFloatReg(simdTmpReg));
+ genStoreSIMD12ToStack(argReg, simdTmpReg);
+ }
+ else
+#endif // defined(_TARGET_X86_) && defined(FEATURE_SIMD)
+ {
+ genStoreRegToStackArg(fieldType, argReg, fieldOffset - currentOffset);
+ }
if (m_pushStkArg)
{
// We always push a slot-rounded size
@@ -7762,13 +7758,15 @@ void CodeGen::genPutArgStk(GenTreePutArgStk* putArgStk)
#ifdef _TARGET_X86_
-#ifdef FEATURE_SIMD
- if (targetType == TYP_SIMD12)
+#if defined(UNIX_X86_ABI)
+ // For each call, first stack argument has the padding for alignment
+ // if this value is not zero, use it to adjust the ESP
+ unsigned argPadding = putArgStk->getArgPadding();
+ if (argPadding != 0)
{
- genPutArgStkSIMD12(putArgStk);
- return;
+ inst_RV_IV(INS_sub, REG_SPBASE, argPadding * TARGET_POINTER_SIZE, EA_PTRSIZE);
}
-#endif // FEATURE_SIMD
+#endif
if (varTypeIsStruct(targetType))
{
@@ -7782,9 +7780,9 @@ void CodeGen::genPutArgStk(GenTreePutArgStk* putArgStk)
GenTreePtr data = putArgStk->gtOp1;
- // On a 32-bit target, all of the long arguments have been decomposed into
- // a separate putarg_stk for each of the upper and lower halves.
- noway_assert(targetType != TYP_LONG);
+ // On a 32-bit target, all of the long arguments are handled with GT_FIELD_LIST,
+ // and the type of the putArgStk is TYP_VOID.
+ assert(targetType != TYP_LONG);
const unsigned argSize = putArgStk->getArgSize();
assert((argSize % TARGET_POINTER_SIZE) == 0);
@@ -7808,7 +7806,7 @@ void CodeGen::genPutArgStk(GenTreePutArgStk* putArgStk)
else
{
// We should not see any contained nodes that are not immediates.
- assert(!data->isContained());
+ assert(data->isUsedFromReg());
genConsumeReg(data);
genPushReg(targetType, data->gtRegNum);
}
@@ -7844,13 +7842,14 @@ void CodeGen::genPutArgStk(GenTreePutArgStk* putArgStk)
GenTreePtr data = putArgStk->gtOp1;
- if (data->isContained())
+ if (data->isContainedIntOrIImmed())
{
getEmitter()->emitIns_S_I(ins_Store(targetType), emitTypeSize(targetType), baseVarNum, argOffset,
(int)data->AsIntConCommon()->IconValue());
}
else
{
+ assert(data->isUsedFromReg());
genConsumeReg(data);
getEmitter()->emitIns_S_R(ins_Store(targetType), emitTypeSize(targetType), data->gtRegNum, baseVarNum,
argOffset);
@@ -7996,6 +7995,14 @@ void CodeGen::genPutStructArgStk(GenTreePutArgStk* putArgStk)
{
var_types targetType = putArgStk->TypeGet();
+#if defined(_TARGET_X86_) && defined(FEATURE_SIMD)
+ if (targetType == TYP_SIMD12)
+ {
+ genPutArgStkSIMD12(putArgStk);
+ return;
+ }
+#endif // defined(_TARGET_X86_) && defined(FEATURE_SIMD)
+
if (varTypeIsSIMD(targetType))
{
regNumber srcReg = genConsumeReg(putArgStk->gtGetOp1());
@@ -8078,7 +8085,7 @@ void CodeGen::genPutStructArgStk(GenTreePutArgStk* putArgStk)
slotAttr = EA_BYREF;
}
- const unsigned offset = i * 4;
+ const unsigned offset = i * TARGET_POINTER_SIZE;
if (srcAddrInReg)
{
getEmitter()->emitIns_AR_R(INS_push, slotAttr, REG_NA, srcRegNum, offset);
@@ -8087,7 +8094,7 @@ void CodeGen::genPutStructArgStk(GenTreePutArgStk* putArgStk)
{
getEmitter()->emitIns_S(INS_push, slotAttr, srcLclNum, srcLclOffset + offset);
}
- genStackLevel += 4;
+ genStackLevel += TARGET_POINTER_SIZE;
}
#else // !defined(_TARGET_X86_)
@@ -8175,11 +8182,11 @@ void CodeGen::genPutStructArgStk(GenTreePutArgStk* putArgStk)
*
* Create and record GC Info for the function.
*/
-#ifdef _TARGET_AMD64_
+#ifndef JIT32_GCENCODER
void
-#else // !_TARGET_AMD64_
+#else // !JIT32_GCENCODER
void*
-#endif // !_TARGET_AMD64_
+#endif // !JIT32_GCENCODER
CodeGen::genCreateAndStoreGCInfo(unsigned codeSize, unsigned prologSize, unsigned epilogSize DEBUGARG(void* codePtr))
{
#ifdef JIT32_GCENCODER
@@ -8381,6 +8388,14 @@ void CodeGen::genCreateAndStoreGCInfoX64(unsigned codeSize, unsigned prologSize
gcInfoEncoder->SetSizeOfEditAndContinuePreservedArea(preservedAreaSize);
}
+ if (compiler->opts.IsReversePInvoke())
+ {
+ unsigned reversePInvokeFrameVarNumber = compiler->lvaReversePInvokeFrameVar;
+ assert(reversePInvokeFrameVarNumber != BAD_VAR_NUM && reversePInvokeFrameVarNumber < compiler->lvaRefCount);
+ LclVarDsc& reversePInvokeFrameVar = compiler->lvaTable[reversePInvokeFrameVarNumber];
+ gcInfoEncoder->SetReversePInvokeFrameSlot(reversePInvokeFrameVar.lvStkOffs);
+ }
+
gcInfoEncoder->Build();
// GC Encoder automatically puts the GC info in the right spot using ICorJitInfo::allocGCInfo(size_t)
diff --git a/src/jit/compiler.cpp b/src/jit/compiler.cpp
index 114847c0d0..01c7f8d6a7 100644
--- a/src/jit/compiler.cpp
+++ b/src/jit/compiler.cpp
@@ -1635,18 +1635,16 @@ void Compiler::compDisplayStaticSizes(FILE* fout)
sizeof(bbDummy->bbVarUse));
fprintf(fout, "Offset / size of bbVarDef = %3u / %3u\n", offsetof(BasicBlock, bbVarDef),
sizeof(bbDummy->bbVarDef));
- fprintf(fout, "Offset / size of bbVarTmp = %3u / %3u\n", offsetof(BasicBlock, bbVarTmp),
- sizeof(bbDummy->bbVarTmp));
fprintf(fout, "Offset / size of bbLiveIn = %3u / %3u\n", offsetof(BasicBlock, bbLiveIn),
sizeof(bbDummy->bbLiveIn));
fprintf(fout, "Offset / size of bbLiveOut = %3u / %3u\n", offsetof(BasicBlock, bbLiveOut),
sizeof(bbDummy->bbLiveOut));
- fprintf(fout, "Offset / size of bbHeapSsaPhiFunc = %3u / %3u\n", offsetof(BasicBlock, bbHeapSsaPhiFunc),
- sizeof(bbDummy->bbHeapSsaPhiFunc));
- fprintf(fout, "Offset / size of bbHeapSsaNumIn = %3u / %3u\n", offsetof(BasicBlock, bbHeapSsaNumIn),
- sizeof(bbDummy->bbHeapSsaNumIn));
- fprintf(fout, "Offset / size of bbHeapSsaNumOut = %3u / %3u\n", offsetof(BasicBlock, bbHeapSsaNumOut),
- sizeof(bbDummy->bbHeapSsaNumOut));
+ fprintf(fout, "Offset / size of bbMemorySsaPhiFunc = %3u / %3u\n", offsetof(BasicBlock, bbMemorySsaPhiFunc),
+ sizeof(bbDummy->bbMemorySsaPhiFunc));
+ fprintf(fout, "Offset / size of bbMemorySsaNumIn = %3u / %3u\n", offsetof(BasicBlock, bbMemorySsaNumIn),
+ sizeof(bbDummy->bbMemorySsaNumIn));
+ fprintf(fout, "Offset / size of bbMemorySsaNumOut = %3u / %3u\n", offsetof(BasicBlock, bbMemorySsaNumOut),
+ sizeof(bbDummy->bbMemorySsaNumOut));
fprintf(fout, "Offset / size of bbScope = %3u / %3u\n", offsetof(BasicBlock, bbScope),
sizeof(bbDummy->bbScope));
fprintf(fout, "Offset / size of bbCseGen = %3u / %3u\n", offsetof(BasicBlock, bbCseGen),
@@ -1788,9 +1786,9 @@ void Compiler::compInit(ArenaAllocator* pAlloc, InlineInfo* inlineInfo)
impSpillCliquePredMembers = ExpandArray<BYTE>(getAllocator());
impSpillCliqueSuccMembers = ExpandArray<BYTE>(getAllocator());
- memset(&lvHeapPerSsaData, 0, sizeof(PerSsaArray));
- lvHeapPerSsaData.Init(getAllocator());
- lvHeapNumSsaNames = 0;
+ memset(&lvMemoryPerSsaData, 0, sizeof(PerSsaArray));
+ lvMemoryPerSsaData.Init(getAllocator());
+ lvMemoryNumSsaNames = 0;
//
// Initialize all the per-method statistics gathering data structures.
@@ -1871,8 +1869,11 @@ void Compiler::compInit(ArenaAllocator* pAlloc, InlineInfo* inlineInfo)
m_fieldSeqStore = nullptr;
m_zeroOffsetFieldMap = nullptr;
m_arrayInfoMap = nullptr;
- m_heapSsaMap = nullptr;
m_refAnyClass = nullptr;
+ for (MemoryKind memoryKind : allMemoryKinds())
+ {
+ m_memorySsaMap[memoryKind] = nullptr;
+ }
#ifdef DEBUG
if (!compIsForInlining())
@@ -2312,6 +2313,9 @@ void Compiler::compSetProcessor()
if (opts.compCanUseAVX)
{
codeGen->getEmitter()->SetUseAVX(true);
+ // Assume each JITted method does not contain AVX instruction at first
+ codeGen->getEmitter()->SetContainsAVX(false);
+ codeGen->getEmitter()->SetContains256bitAVX(false);
}
else
#endif // FEATURE_AVX_SUPPORT
@@ -3024,6 +3028,7 @@ void Compiler::compInitOptions(JitFlags* jitFlags)
#ifdef FEATURE_SIMD
// Minimum bar for availing SIMD benefits is SSE2 on AMD64/x86.
featureSIMD = jitFlags->IsSet(JitFlags::JIT_FLAG_FEATURE_SIMD);
+ setUsesSIMDTypes(false);
#endif // FEATURE_SIMD
if (compIsForInlining() || compIsForImportOnly())
@@ -3296,8 +3301,6 @@ void Compiler::compInitOptions(JitFlags* jitFlags)
}
#endif
- opts.compMustInlinePInvokeCalli = jitFlags->IsSet(JitFlags::JIT_FLAG_IL_STUB);
-
opts.compScopeInfo = opts.compDbgInfo;
#ifdef LATE_DISASM
@@ -4194,11 +4197,17 @@ void Compiler::compCompile(void** methodCodePtr, ULONG* methodCodeSize, JitFlags
assert(!fgComputePredsDone);
if (fgCheapPredsValid)
{
- // Remove cheap predecessors before inlining; allowing the cheap predecessor lists to be inserted
- // with inlined blocks causes problems.
+ // Remove cheap predecessors before inlining and fat call transformation;
+ // allowing the cheap predecessor lists to be inserted causes problems
+ // with splitting existing blocks.
fgRemovePreds();
}
+ if (IsTargetAbi(CORINFO_CORERT_ABI) && doesMethodHaveFatPointer())
+ {
+ fgTransformFatCalli();
+ }
+
EndPhase(PHASE_IMPORTATION);
if (compIsForInlining())
@@ -4598,6 +4607,10 @@ void Compiler::compCompile(void** methodCodePtr, ULONG* methodCodeSize, JitFlags
codeGen->regSet.rsMaskResvd |= RBM_OPT_RSVD;
assert(REG_OPT_RSVD != REG_FP);
}
+ // compRsvdRegCheck() has read out the FramePointerUsed property, but doLinearScan()
+ // tries to overwrite it later. This violates the PhasedVar rule and triggers an assertion.
+ // TODO-ARM-Bug?: What is the proper way to handle this situation?
+ codeGen->resetFramePointerUsedWritePhase();
#ifdef DEBUG
//
@@ -4718,21 +4731,6 @@ void Compiler::ResetOptAnnotations()
tree->ClearVN();
tree->ClearAssertion();
tree->gtCSEnum = NO_CSE;
-
- // Clear any *_ASG_LHS flags -- these are set during SSA construction,
- // and the heap live-in calculation depends on them being unset coming
- // into SSA construction (without clearing them, a block that has a
- // heap def via one of these before any heap use is treated as not having
- // an upwards-exposed heap use, even though subsequent heap uses may not
- // be killed by the store; this seems to be a bug, worked around here).
- if (tree->OperIsIndir())
- {
- tree->gtFlags &= ~GTF_IND_ASG_LHS;
- }
- else if (tree->OperGet() == GT_CLS_VAR)
- {
- tree->gtFlags &= ~GTF_CLS_VAR_ASG_LHS;
- }
}
}
}
@@ -6708,16 +6706,7 @@ Compiler::NodeToIntMap* Compiler::FindReachableNodesInNodeTestData()
if (arg->gtFlags & GTF_LATE_ARG)
{
// Find the corresponding late arg.
- GenTreePtr lateArg = nullptr;
- for (unsigned j = 0; j < call->fgArgInfo->ArgCount(); j++)
- {
- if (call->fgArgInfo->ArgTable()[j]->argNum == i)
- {
- lateArg = call->fgArgInfo->ArgTable()[j]->node;
- break;
- }
- }
- assert(lateArg != nullptr);
+ GenTreePtr lateArg = call->fgArgInfo->GetLateArg(i);
if (GetNodeTestData()->Lookup(lateArg, &tlAndN))
{
reachable->Set(lateArg, 0);
@@ -6805,14 +6794,14 @@ void Compiler::CopyTestDataToCloneTree(GenTreePtr from, GenTreePtr to)
assert(to->gtOp.gtOp1 == nullptr);
}
- if (from->gtGetOp2() != nullptr)
+ if (from->gtGetOp2IfPresent() != nullptr)
{
- assert(to->gtGetOp2() != nullptr);
+ assert(to->gtGetOp2IfPresent() != nullptr);
CopyTestDataToCloneTree(from->gtGetOp2(), to->gtGetOp2());
}
else
{
- assert(to->gtGetOp2() == nullptr);
+ assert(to->gtGetOp2IfPresent() == nullptr);
}
return;
@@ -6863,8 +6852,8 @@ void Compiler::CopyTestDataToCloneTree(GenTreePtr from, GenTreePtr to)
#ifdef FEATURE_SIMD
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
- CopyTestDataToCloneTree(from->gtBoundsChk.gtArrLen, to->gtBoundsChk.gtArrLen);
CopyTestDataToCloneTree(from->gtBoundsChk.gtIndex, to->gtBoundsChk.gtIndex);
+ CopyTestDataToCloneTree(from->gtBoundsChk.gtArrLen, to->gtBoundsChk.gtArrLen);
return;
default:
@@ -9175,10 +9164,6 @@ int cTreeFlagsIR(Compiler* comp, GenTree* tree)
{
chars += printf("[RELOP_QMARK]");
}
- if (tree->gtFlags & GTF_RELOP_SMALL)
- {
- chars += printf("[RELOP_SMALL]");
- }
break;
case GT_QMARK:
diff --git a/src/jit/compiler.h b/src/jit/compiler.h
index d8cd491063..4239cf613b 100644
--- a/src/jit/compiler.h
+++ b/src/jit/compiler.h
@@ -268,10 +268,6 @@ public:
unsigned char lvDisqualify : 1; // variable is no longer OK for add copy optimization
unsigned char lvVolatileHint : 1; // hint for AssertionProp
#endif
-#if FANCY_ARRAY_OPT
- unsigned char lvAssignOne : 1; // assigned at least once?
- unsigned char lvAssignTwo : 1; // assigned at least twice?
-#endif
unsigned char lvSpilled : 1; // enregistered variable was spilled
#ifndef _TARGET_64BIT_
@@ -322,6 +318,7 @@ public:
// type of an arg node is TYP_BYREF and a local node is TYP_SIMD*.
unsigned char lvSIMDType : 1; // This is a SIMD struct
unsigned char lvUsedInSIMDIntrinsic : 1; // This tells lclvar is used for simd intrinsic
+ var_types lvBaseType : 5; // Note: this only packs because var_types is a typedef of unsigned char
#endif // FEATURE_SIMD
unsigned char lvRegStruct : 1; // This is a reg-sized non-field-addressed struct.
@@ -330,9 +327,6 @@ public:
// local.
unsigned lvParentLcl; // The index of the local var representing the parent (i.e. the promoted struct local).
// Valid on promoted struct local fields.
-#ifdef FEATURE_SIMD
- var_types lvBaseType; // The base type of a SIMD local var. Valid on TYP_SIMD locals.
-#endif // FEATURE_SIMD
};
unsigned char lvFieldCnt; // Number of fields in the promoted VarDsc.
@@ -676,7 +670,7 @@ public:
#endif // defined(_TARGET_64BIT_)
}
- unsigned lvSize() // Size needed for storage representation. Only used for structs or TYP_BLK.
+ unsigned lvSize() const // Size needed for storage representation. Only used for structs or TYP_BLK.
{
// TODO-Review: Sometimes we get called on ARM with HFA struct variables that have been promoted,
// where the struct itself is no longer used because all access is via its member fields.
@@ -694,7 +688,8 @@ public:
#if defined(FEATURE_SIMD) && !defined(_TARGET_64BIT_)
// For 32-bit architectures, we make local variable SIMD12 types 16 bytes instead of just 12. We can't do
- // this for arguments, which must be passed according the defined ABI.
+ // this for arguments, which must be passed according the defined ABI. We don't want to do this for
+ // dependently promoted struct fields, but we don't know that here. See lvaMapSimd12ToSimd16().
if ((lvType == TYP_SIMD12) && !lvIsParam)
{
assert(lvExactSize == 12);
@@ -711,10 +706,6 @@ public:
BYTE* lvGcLayout; // GC layout info for structs
-#if FANCY_ARRAY_OPT
- GenTreePtr lvKnownDim; // array size if known
-#endif
-
#if ASSERTION_PROP
BlockSet lvRefBlks; // Set of blocks that contain refs
GenTreePtr lvDefStmt; // Pointer to the statement with the single definition
@@ -1195,6 +1186,11 @@ struct fgArgTabEntry
unsigned alignment; // 1 or 2 (slots/registers)
unsigned lateArgInx; // index into gtCallLateArgs list
unsigned tmpNum; // the LclVar number if we had to force evaluation of this arg
+#if defined(UNIX_X86_ABI)
+ unsigned padStkAlign; // Count of number of padding slots for stack alignment. For each Call, only the first
+ // argument may have a value to emit "sub esp, n" to adjust the stack before pushing
+ // the argument.
+#endif
bool isSplit : 1; // True when this argument is split between the registers and OutArg area
bool needTmp : 1; // True when we force this argument's evaluation into a temp LclVar
@@ -1272,6 +1268,10 @@ class fgArgInfo
unsigned argCount; // Updatable arg count value
unsigned nextSlotNum; // Updatable slot count value
unsigned stkLevel; // Stack depth when we make this call (for x86)
+#if defined(UNIX_X86_ABI)
+ unsigned padStkAlign; // Count of number of padding slots for stack alignment. This value is used to turn back
+ // stack pointer before it was adjusted after each Call
+#endif
unsigned argTableSize; // size of argTable array (equal to the argCount when done with fgMorphArgs)
bool hasRegArgs; // true if we have one or more register arguments
@@ -1321,6 +1321,10 @@ public:
void ArgsComplete();
+#if defined(UNIX_X86_ABI)
+ void ArgsAlignPadding();
+#endif
+
void SortArgs();
void EvalArgsToTemps();
@@ -1340,6 +1344,12 @@ public:
{
return nextSlotNum;
}
+#if defined(UNIX_X86_ABI)
+ unsigned GetPadStackAlign()
+ {
+ return padStkAlign;
+ }
+#endif
bool HasRegArgs()
{
return hasRegArgs;
@@ -1352,6 +1362,9 @@ public:
{
return argsComplete;
}
+
+ // Get the late arg for arg at position argIndex. Caller must ensure this position has a late arg.
+ GenTreePtr GetLateArg(unsigned argIndex);
};
#ifdef DEBUG
@@ -1771,7 +1784,11 @@ public:
// a PSPSym for functions with any EH.
bool ehNeedsPSPSym() const
{
+#ifdef _TARGET_X86_
+ return false;
+#else // _TARGET_X86_
return compHndBBtabCount > 0;
+#endif // _TARGET_X86_
}
bool ehAnyFunclets(); // Are there any funclets in this function?
@@ -1936,6 +1953,11 @@ public:
GenTreePtr gtNewOneConNode(var_types type);
+#ifdef FEATURE_SIMD
+ GenTreePtr gtNewSIMDVectorZero(var_types simdType, var_types baseType, unsigned size);
+ GenTreePtr gtNewSIMDVectorOne(var_types simdType, var_types baseType, unsigned size);
+#endif
+
GenTreeBlk* gtNewBlkOpNode(
genTreeOps oper, GenTreePtr dst, GenTreePtr srcOrFillVal, GenTreePtr sizeOrClsTok, bool isVolatile);
@@ -1981,6 +2003,7 @@ public:
SIMDIntrinsicID simdIntrinsicID,
var_types baseType,
unsigned size);
+ void SetOpLclRelatedToSIMDIntrinsic(GenTreePtr op);
#endif
GenTreePtr gtNewLclLNode(unsigned lnum, var_types type, IL_OFFSETX ILoffs = BAD_IL_OFFSET);
@@ -2063,13 +2086,13 @@ public:
bool gtHasLocalsWithAddrOp(GenTreePtr tree);
- unsigned gtHashValue(GenTree* tree);
-
unsigned gtSetListOrder(GenTree* list, bool regs, bool isListCallArgs);
void gtWalkOp(GenTree** op1, GenTree** op2, GenTree* adr, bool constOnly);
#ifdef DEBUG
+ unsigned gtHashValue(GenTree* tree);
+
GenTreePtr gtWalkOpEffectiveVal(GenTreePtr op);
#endif
@@ -2653,6 +2676,35 @@ public:
bool lvaIsFieldOfDependentlyPromotedStruct(const LclVarDsc* varDsc);
bool lvaIsGCTracked(const LclVarDsc* varDsc);
+#if defined(FEATURE_SIMD)
+ bool lvaMapSimd12ToSimd16(const LclVarDsc* varDsc)
+ {
+ assert(varDsc->lvType == TYP_SIMD12);
+ assert(varDsc->lvExactSize == 12);
+
+#if defined(_TARGET_64BIT_)
+ assert(varDsc->lvSize() == 16);
+ return true;
+#else // !defined(_TARGET_64BIT_)
+
+ // For 32-bit architectures, we make local variable SIMD12 types 16 bytes instead of just 12. lvSize()
+ // already does this calculation. However, we also need to prevent mapping types if the var is a
+ // depenendently promoted struct field, which must remain its exact size within its parent struct.
+ // However, we don't know this until late, so we may have already pretended the field is bigger
+ // before that.
+ if ((varDsc->lvSize() == 16) && !lvaIsFieldOfDependentlyPromotedStruct(varDsc))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+
+#endif // !defined(_TARGET_64BIT_)
+ }
+#endif // defined(FEATURE_SIMD)
+
BYTE* lvaGetGcLayout(unsigned varNum);
bool lvaTypeIsGC(unsigned varNum);
unsigned lvaGSSecurityCookie; // LclVar number
@@ -2697,21 +2749,21 @@ protected:
static fgWalkPreFn lvaMarkLclRefsCallback;
void lvaMarkLclRefs(GenTreePtr tree);
- // Keeps the mapping from SSA #'s to VN's for the implicit "Heap" variable.
- PerSsaArray lvHeapPerSsaData;
- unsigned lvHeapNumSsaNames;
+ // Keeps the mapping from SSA #'s to VN's for the implicit memory variables.
+ PerSsaArray lvMemoryPerSsaData;
+ unsigned lvMemoryNumSsaNames;
public:
- // Returns the address of the per-Ssa data for "Heap" at the given ssaNum (which is required
+ // Returns the address of the per-Ssa data for memory at the given ssaNum (which is required
// not to be the SsaConfig::RESERVED_SSA_NUM, which indicates that the variable is
// not an SSA variable).
- LclSsaVarDsc* GetHeapPerSsaData(unsigned ssaNum)
+ LclSsaVarDsc* GetMemoryPerSsaData(unsigned ssaNum)
{
assert(ssaNum != SsaConfig::RESERVED_SSA_NUM);
assert(SsaConfig::RESERVED_SSA_NUM == 0);
ssaNum--;
- assert(ssaNum < lvHeapNumSsaNames);
- return &lvHeapPerSsaData.GetRef(ssaNum);
+ assert(ssaNum < lvMemoryNumSsaNames);
+ return &lvMemoryPerSsaData.GetRef(ssaNum);
}
/*
@@ -2780,7 +2832,7 @@ protected:
void impImportNewObjArray(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_CALL_INFO* pCallInfo);
- bool impCanPInvokeInline(BasicBlock* block);
+ bool impCanPInvokeInline();
bool impCanPInvokeInlineCallSite(BasicBlock* block);
void impCheckForPInvokeCall(
GenTreePtr call, CORINFO_METHOD_HANDLE methHnd, CORINFO_SIG_INFO* sig, unsigned mflags, BasicBlock* block);
@@ -2831,7 +2883,8 @@ protected:
void impImportLeave(BasicBlock* block);
void impResetLeaveBlock(BasicBlock* block, unsigned jmpAddr);
- GenTreePtr impIntrinsic(CORINFO_CLASS_HANDLE clsHnd,
+ GenTreePtr impIntrinsic(GenTreePtr newobjThis,
+ CORINFO_CLASS_HANDLE clsHnd,
CORINFO_METHOD_HANDLE method,
CORINFO_SIG_INFO* sig,
int memberRef,
@@ -3425,6 +3478,7 @@ public:
bool fgComputePredsDone; // Have we computed the bbPreds list
bool fgCheapPredsValid; // Is the bbCheapPreds list valid?
bool fgDomsComputed; // Have we computed the dominator sets?
+ bool fgOptimizedFinally; // Did we optimize any try-finallys?
bool fgHasSwitch; // any BBJ_SWITCH jumps?
bool fgHasPostfix; // any postfix ++/-- found?
@@ -3493,8 +3547,20 @@ public:
void fgImport();
+ void fgTransformFatCalli();
+
void fgInline();
+ void fgRemoveEmptyTry();
+
+ void fgRemoveEmptyFinally();
+
+ void fgCloneFinally();
+
+ void fgCleanupContinuation(BasicBlock* continuation);
+
+ void fgUpdateFinallyTargetFlags();
+
GenTreePtr fgGetCritSectOfStaticMethod();
#if !defined(_TARGET_X86_)
@@ -3570,10 +3636,9 @@ public:
void fgLocalVarLivenessInit();
#ifdef LEGACY_BACKEND
- GenTreePtr fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode, GenTreePtr relopNode, GenTreePtr asgdLclVar);
+ GenTreePtr fgLegacyPerStatementLocalVarLiveness(GenTreePtr startNode, GenTreePtr relopNode);
#else
- void fgPerNodeLocalVarLiveness(GenTree* node, GenTree* asgdLclVar);
- void fgPerStatementLocalVarLiveness(GenTree* node, GenTree* asgdLclVar);
+ void fgPerNodeLocalVarLiveness(GenTree* node);
#endif
void fgPerBlockLocalVarLiveness();
@@ -3741,18 +3806,18 @@ public:
// tree node).
void fgValueNumber();
- // Updates "fgCurHeap" via the assignment H[elemTypeEq][arrVN][inx][fldSeq] = rhsVN.
+ // Computes new GcHeap VN via the assignment H[elemTypeEq][arrVN][inx][fldSeq] = rhsVN.
// Assumes that "elemTypeEq" is the (equivalence class rep) of the array element type.
// The 'indType' is the indirection type of the lhs of the assignment and will typically
// match the element type of the array or fldSeq. When this type doesn't match
// or if the fldSeq is 'NotAField' we invalidate the array contents H[elemTypeEq][arrVN]
//
- void fgValueNumberArrIndexAssign(CORINFO_CLASS_HANDLE elemTypeEq,
- ValueNum arrVN,
- ValueNum inxVN,
- FieldSeqNode* fldSeq,
- ValueNum rhsVN,
- var_types indType);
+ ValueNum fgValueNumberArrIndexAssign(CORINFO_CLASS_HANDLE elemTypeEq,
+ ValueNum arrVN,
+ ValueNum inxVN,
+ FieldSeqNode* fldSeq,
+ ValueNum rhsVN,
+ var_types indType);
// Requires that "tree" is a GT_IND marked as an array index, and that its address argument
// has been parsed to yield the other input arguments. If evaluation of the address
@@ -3772,33 +3837,43 @@ public:
// Requires "funcApp" to be a VNF_PtrToArrElem, and "addrXvn" to represent the exception set thrown
// by evaluating the array index expression "tree". Returns the value number resulting from
- // dereferencing the array in the current heap state. If "tree" is non-null, it must be the
+ // dereferencing the array in the current GcHeap state. If "tree" is non-null, it must be the
// "GT_IND" that does the dereference, and it is given the returned value number.
ValueNum fgValueNumberArrIndexVal(GenTreePtr tree, struct VNFuncApp* funcApp, ValueNum addrXvn);
+ // Compute the value number for a byref-exposed load of the given type via the given pointerVN.
+ ValueNum fgValueNumberByrefExposedLoad(var_types type, ValueNum pointerVN);
+
unsigned fgVNPassesCompleted; // Number of times fgValueNumber has been run.
// Utility functions for fgValueNumber.
- // Perform value-numbering for the trees in "blk". When giving VN's to the SSA
- // names defined by phi definitions at the start of "blk", "newVNsForPhis" indicates
- // that these should be given new VN's, irrespective of the values of the LHS.
- // If "false", then we may assume that all inputs to phi RHS's of such definitions
- // have already been assigned value numbers; if they are all assigned the *same* value
- // number, then the LHS SSA name gets the same VN.
- void fgValueNumberBlock(BasicBlock* blk, bool newVNsForPhis);
+ // Perform value-numbering for the trees in "blk".
+ void fgValueNumberBlock(BasicBlock* blk);
// Requires that "entryBlock" is the entry block of loop "loopNum", and that "loopNum" is the
// innermost loop of which "entryBlock" is the entry. Returns the value number that should be
- // assumed for the heap at the start "entryBlk".
- ValueNum fgHeapVNForLoopSideEffects(BasicBlock* entryBlock, unsigned loopNum);
+ // assumed for the memoryKind at the start "entryBlk".
+ ValueNum fgMemoryVNForLoopSideEffects(MemoryKind memoryKind, BasicBlock* entryBlock, unsigned loopNum);
- // Called when an operation (performed by "tree", described by "msg") may cause the global Heap to be mutated.
- void fgMutateHeap(GenTreePtr tree DEBUGARG(const char* msg));
+ // Called when an operation (performed by "tree", described by "msg") may cause the GcHeap to be mutated.
+ // As GcHeap is a subset of ByrefExposed, this will also annotate the ByrefExposed mutation.
+ void fgMutateGcHeap(GenTreePtr tree DEBUGARG(const char* msg));
- // Tree caused an update in the current heap VN. If "tree" has an associated heap SSA #, record that
+ // Called when an operation (performed by "tree", described by "msg") may cause an address-exposed local to be
+ // mutated.
+ void fgMutateAddressExposedLocal(GenTreePtr tree DEBUGARG(const char* msg));
+
+ // For a GC heap store at curTree, record the new curMemoryVN's and update curTree's MemorySsaMap.
+ // As GcHeap is a subset of ByrefExposed, this will also record the ByrefExposed store.
+ void recordGcHeapStore(GenTreePtr curTree, ValueNum gcHeapVN DEBUGARG(const char* msg));
+
+ // For a store to an address-exposed local at curTree, record the new curMemoryVN and update curTree's MemorySsaMap.
+ void recordAddressExposedLocalStore(GenTreePtr curTree, ValueNum memoryVN DEBUGARG(const char* msg));
+
+ // Tree caused an update in the current memory VN. If "tree" has an associated heap SSA #, record that
// value in that SSA #.
- void fgValueNumberRecordHeapSsa(GenTreePtr tree);
+ void fgValueNumberRecordMemorySsa(MemoryKind memoryKind, GenTreePtr tree);
// The input 'tree' is a leaf node that is a constant
// Assign the proper value number to the tree
@@ -3837,11 +3912,11 @@ public:
// Requires "helpFunc" to be pure. Returns the corresponding VNFunc.
VNFunc fgValueNumberHelperMethVNFunc(CorInfoHelpFunc helpFunc);
- // This is the current value number for the "Heap" implicit variable while
- // doing value numbering. This is the value number under the "liberal" interpretation
- // of heap values; the "conservative" interpretation needs no VN, since every access of
- // the heap yields an unknown value.
- ValueNum fgCurHeapVN;
+ // These are the current value number for the memory implicit variables while
+ // doing value numbering. These are the value numbers under the "liberal" interpretation
+ // of memory values; the "conservative" interpretation needs no VN, since every access of
+ // memory yields an unknown value.
+ ValueNum fgCurMemoryVN[MemoryKindCount];
// Return a "pseudo"-class handle for an array element type. If "elemType" is TYP_STRUCT,
// requires "elemStructType" to be non-null (and to have a low-order zero). Otherwise, low order bit
@@ -4272,6 +4347,7 @@ public:
void fgDebugCheckNodeLinks(BasicBlock* block, GenTreePtr stmt);
void fgDebugCheckFlags(GenTreePtr tree);
void fgDebugCheckFlagsHelper(GenTreePtr tree, unsigned treeFlags, unsigned chkFlags);
+ void fgDebugCheckTryFinallyExits();
#endif
#ifdef LEGACY_BACKEND
@@ -4524,7 +4600,6 @@ private:
static MorphAddrContext s_CopyBlockMAC;
#ifdef FEATURE_SIMD
- GenTreePtr fgCopySIMDNode(GenTreeSIMD* simdNode);
GenTreePtr getSIMDStructFromField(GenTreePtr tree,
var_types* baseTypeOut,
unsigned* indexOut,
@@ -4613,11 +4688,13 @@ private:
VARSET_TP fgCurUseSet; // vars used by block (before an assignment)
VARSET_TP fgCurDefSet; // vars assigned by block (before a use)
- bool fgCurHeapUse; // True iff the current basic block uses the heap before defining it.
- bool fgCurHeapDef; // True iff the current basic block defines the heap.
- bool fgCurHeapHavoc; // True if the current basic block is known to set the heap to a "havoc" value.
+ MemoryKindSet fgCurMemoryUse; // True iff the current basic block uses memory.
+ MemoryKindSet fgCurMemoryDef; // True iff the current basic block modifies memory.
+ MemoryKindSet fgCurMemoryHavoc; // True if the current basic block is known to set memory to a "havoc" value.
- void fgMarkUseDef(GenTreeLclVarCommon* tree, GenTree* asgdLclVar = nullptr);
+ bool byrefStatesMatchGcHeapStates; // True iff GcHeap and ByrefExposed memory have all the same def points.
+
+ void fgMarkUseDef(GenTreeLclVarCommon* tree);
void fgBeginScopeLife(VARSET_TP* inScope, VarScopeDsc* var);
void fgEndScopeLife(VARSET_TP* inScope, VarScopeDsc* var);
@@ -4686,6 +4763,9 @@ private:
#ifdef DEBUG
static fgWalkPreFn fgDebugCheckInlineCandidates;
+
+ void CheckNoFatPointerCandidatesLeft();
+ static fgWalkPreFn fgDebugCheckFatPointerCandidates;
#endif
void fgPromoteStructs();
@@ -4968,9 +5048,10 @@ public:
#define LPFLG_ASGVARS_INC 0x8000 // "lpAsgVars" is incomplete -- vars beyond those representable in an AllVarSet
// type are assigned to.
- bool lpLoopHasHeapHavoc; // The loop contains an operation that we assume has arbitrary heap side effects.
- // If this is set, the fields below may not be accurate (since they become irrelevant.)
- bool lpContainsCall; // True if executing the loop body *may* execute a call
+ bool lpLoopHasMemoryHavoc[MemoryKindCount]; // The loop contains an operation that we assume has arbitrary
+ // memory side effects. If this is set, the fields below
+ // may not be accurate (since they become irrelevant.)
+ bool lpContainsCall; // True if executing the loop body *may* execute a call
VARSET_TP lpVarInOut; // The set of variables that are IN or OUT during the execution of this loop
VARSET_TP lpVarUseDef; // The set of variables that are USE or DEF during the execution of this loop
@@ -5307,6 +5388,9 @@ protected:
treeStmtLstPtr csdTreeList; // list of matching tree nodes: head
treeStmtLstPtr csdTreeLast; // list of matching tree nodes: tail
+
+ ValueNum defConservativeVN; // if all def occurrences share the same conservative value
+ // number, this will reflect it; otherwise, NoVN.
};
static const size_t s_optCSEhashSize;
@@ -5462,11 +5546,27 @@ public:
}
};
-#define OMF_HAS_NEWARRAY 0x00000001 // Method contains 'new' of an array
-#define OMF_HAS_NEWOBJ 0x00000002 // Method contains 'new' of an object type.
-#define OMF_HAS_ARRAYREF 0x00000004 // Method contains array element loads or stores.
-#define OMF_HAS_VTABLEREF 0x00000008 // Method contains method table reference.
-#define OMF_HAS_NULLCHECK 0x00000010 // Method contains null check.
+#define OMF_HAS_NEWARRAY 0x00000001 // Method contains 'new' of an array
+#define OMF_HAS_NEWOBJ 0x00000002 // Method contains 'new' of an object type.
+#define OMF_HAS_ARRAYREF 0x00000004 // Method contains array element loads or stores.
+#define OMF_HAS_VTABLEREF 0x00000008 // Method contains method table reference.
+#define OMF_HAS_NULLCHECK 0x00000010 // Method contains null check.
+#define OMF_HAS_FATPOINTER 0x00000020 // Method contains call, that needs fat pointer transformation.
+
+ bool doesMethodHaveFatPointer()
+ {
+ return (optMethodFlags & OMF_HAS_FATPOINTER) != 0;
+ }
+
+ void setMethodHasFatPointer()
+ {
+ optMethodFlags |= OMF_HAS_FATPOINTER;
+ }
+
+ void clearMethodHasFatPointer()
+ {
+ optMethodFlags &= ~OMF_HAS_FATPOINTER;
+ }
unsigned optMethodFlags;
@@ -5931,10 +6031,6 @@ protected:
ssize_t optGetArrayRefScaleAndIndex(GenTreePtr mul, GenTreePtr* pIndex DEBUGARG(bool bRngChk));
GenTreePtr optFindLocalInit(BasicBlock* block, GenTreePtr local, VARSET_TP* pKilledInOut, bool* isKilledAfterInit);
-#if FANCY_ARRAY_OPT
- bool optIsNoMore(GenTreePtr op1, GenTreePtr op2, int add1 = 0, int add2 = 0);
-#endif
-
bool optReachWithoutCall(BasicBlock* srcBB, BasicBlock* dstBB);
protected:
@@ -6845,10 +6941,15 @@ private:
void unwindReserveFunc(FuncInfoDsc* func);
void unwindEmitFunc(FuncInfoDsc* func, void* pHotCode, void* pColdCode);
-#if defined(_TARGET_AMD64_)
+#if defined(_TARGET_AMD64_) || (defined(_TARGET_X86_) && FEATURE_EH_FUNCLETS)
void unwindReserveFuncHelper(FuncInfoDsc* func, bool isHotCode);
void unwindEmitFuncHelper(FuncInfoDsc* func, void* pHotCode, void* pColdCode, bool isHotCode);
+
+#endif // _TARGET_AMD64_ || (_TARGET_X86_ && FEATURE_EH_FUNCLETS)
+
+#if defined(_TARGET_AMD64_)
+
UNATIVE_OFFSET unwindGetCurrentOffset(FuncInfoDsc* func);
void unwindBegPrologWindows();
@@ -6932,6 +7033,20 @@ private:
// Should we support SIMD intrinsics?
bool featureSIMD;
+ // Have we identified any SIMD types?
+ // This is currently used by struct promotion to avoid getting type information for a struct
+ // field to see if it is a SIMD type, if we haven't seen any SIMD types or operations in
+ // the method.
+ bool _usesSIMDTypes;
+ bool usesSIMDTypes()
+ {
+ return _usesSIMDTypes;
+ }
+ void setUsesSIMDTypes(bool value)
+ {
+ _usesSIMDTypes = value;
+ }
+
// This is a temp lclVar allocated on the stack as TYP_SIMD. It is used to implement intrinsics
// that require indexed access to the individual fields of the vector, which is not well supported
// by the hardware. It is allocated when/if such situations are encountered during Lowering.
@@ -7121,6 +7236,9 @@ private:
GenTree** op1,
GenTree** op2);
+ // Creates a GT_SIMD tree for Abs intrinsic.
+ GenTreePtr impSIMDAbs(CORINFO_CLASS_HANDLE typeHnd, var_types baseType, unsigned simdVectorSize, GenTree* op1);
+
#if defined(_TARGET_XARCH_) && !defined(LEGACY_BACKEND)
// Transforms operands and returns the SIMD intrinsic to be applied on
// transformed operands to obtain == comparison result.
@@ -7623,8 +7741,6 @@ public:
static const bool compNoPInvokeInlineCB;
#endif
- bool compMustInlinePInvokeCalli; // Unmanaged CALLI in IL stubs must be inlined
-
#ifdef DEBUG
bool compGcChecks; // Check arguments and return values to ensure they are sane
bool compStackCheckOnRet; // Check ESP on return to ensure it is correct
@@ -7783,11 +7899,22 @@ public:
/* These should not be exhaustively used as they might */ \
/* hide/trivialize other areas */ \
\
- STRESS_MODE(REGS) STRESS_MODE(DBL_ALN) STRESS_MODE(LCL_FLDS) STRESS_MODE(UNROLL_LOOPS) \
- STRESS_MODE(MAKE_CSE) STRESS_MODE(LEGACY_INLINE) STRESS_MODE(CLONE_EXPR) \
- STRESS_MODE(USE_FCOMI) STRESS_MODE(USE_CMOV) STRESS_MODE(FOLD) \
- STRESS_MODE(BB_PROFILE) STRESS_MODE(OPT_BOOLS_GC) STRESS_MODE(REMORPH_TREES) \
- STRESS_MODE(64RSLT_MUL) STRESS_MODE(DO_WHILE_LOOPS) STRESS_MODE(MIN_OPTS) \
+ STRESS_MODE(REGS) \
+ STRESS_MODE(DBL_ALN) \
+ STRESS_MODE(LCL_FLDS) \
+ STRESS_MODE(UNROLL_LOOPS) \
+ STRESS_MODE(MAKE_CSE) \
+ STRESS_MODE(LEGACY_INLINE) \
+ STRESS_MODE(CLONE_EXPR) \
+ STRESS_MODE(USE_FCOMI) \
+ STRESS_MODE(USE_CMOV) \
+ STRESS_MODE(FOLD) \
+ STRESS_MODE(BB_PROFILE) \
+ STRESS_MODE(OPT_BOOLS_GC) \
+ STRESS_MODE(REMORPH_TREES) \
+ STRESS_MODE(64RSLT_MUL) \
+ STRESS_MODE(DO_WHILE_LOOPS) \
+ STRESS_MODE(MIN_OPTS) \
STRESS_MODE(REVERSE_FLAG) /* Will set GTF_REVERSE_OPS whenever we can */ \
STRESS_MODE(REVERSE_COMMA) /* Will reverse commas created with gtNewCommaNode */ \
STRESS_MODE(TAILCALL) /* Will make the call as a tailcall whenever legal */ \
@@ -7796,17 +7923,23 @@ public:
STRESS_MODE(NULL_OBJECT_CHECK) \
STRESS_MODE(PINVOKE_RESTORE_ESP) \
STRESS_MODE(RANDOM_INLINE) \
+ STRESS_MODE(SWITCH_CMP_BR_EXPANSION) \
+ STRESS_MODE(GENERIC_VARN) \
+ \
+ /* After COUNT_VARN, stress level 2 does all of these all the time */ \
\
- STRESS_MODE(GENERIC_VARN) STRESS_MODE(COUNT_VARN) \
+ STRESS_MODE(COUNT_VARN) \
\
/* "Check" stress areas that can be exhaustively used if we */ \
/* dont care about performance at all */ \
\
STRESS_MODE(FORCE_INLINE) /* Treat every method as AggressiveInlining */ \
STRESS_MODE(CHK_FLOW_UPDATE) \
- STRESS_MODE(EMITTER) STRESS_MODE(CHK_REIMPORT) STRESS_MODE(FLATFP) \
- \
- STRESS_MODE(GENERIC_CHECK) STRESS_MODE(COUNT) \
+ STRESS_MODE(EMITTER) \
+ STRESS_MODE(CHK_REIMPORT) \
+ STRESS_MODE(FLATFP) \
+ STRESS_MODE(GENERIC_CHECK) \
+ STRESS_MODE(COUNT)
enum compStressArea
{
@@ -8951,21 +9084,28 @@ public:
return compRoot->m_arrayInfoMap;
}
- NodeToUnsignedMap* m_heapSsaMap;
+ NodeToUnsignedMap* m_memorySsaMap[MemoryKindCount];
- // In some cases, we want to assign intermediate SSA #'s to heap states, and know what nodes create those heap
- // states. (We do this for try blocks, where, if the try block doesn't do a call that loses track of the heap state,
- // all the possible heap states are possible initial states of the corresponding catch block(s).)
- NodeToUnsignedMap* GetHeapSsaMap()
+ // In some cases, we want to assign intermediate SSA #'s to memory states, and know what nodes create those memory
+ // states. (We do this for try blocks, where, if the try block doesn't do a call that loses track of the memory
+ // state, all the possible memory states are possible initial states of the corresponding catch block(s).)
+ NodeToUnsignedMap* GetMemorySsaMap(MemoryKind memoryKind)
{
+ if (memoryKind == GcHeap && byrefStatesMatchGcHeapStates)
+ {
+ // Use the same map for GCHeap and ByrefExposed when their states match.
+ memoryKind = ByrefExposed;
+ }
+
+ assert(memoryKind < MemoryKindCount);
Compiler* compRoot = impInlineRoot();
- if (compRoot->m_heapSsaMap == nullptr)
+ if (compRoot->m_memorySsaMap[memoryKind] == nullptr)
{
// Create a CompAllocator that labels sub-structure with CMK_ArrayInfoMap, and use that for allocation.
- IAllocator* ialloc = new (this, CMK_ArrayInfoMap) CompAllocator(this, CMK_ArrayInfoMap);
- compRoot->m_heapSsaMap = new (ialloc) NodeToUnsignedMap(ialloc);
+ IAllocator* ialloc = new (this, CMK_ArrayInfoMap) CompAllocator(this, CMK_ArrayInfoMap);
+ compRoot->m_memorySsaMap[memoryKind] = new (ialloc) NodeToUnsignedMap(ialloc);
}
- return compRoot->m_heapSsaMap;
+ return compRoot->m_memorySsaMap[memoryKind];
}
// The Refany type is the only struct type whose structure is implicitly assumed by IL. We need its fields.
diff --git a/src/jit/compiler.hpp b/src/jit/compiler.hpp
index e8358fd2ab..6baf601892 100644
--- a/src/jit/compiler.hpp
+++ b/src/jit/compiler.hpp
@@ -500,6 +500,52 @@ inline regNumber genRegNumFromMask(regMaskTP mask)
return regNum;
}
+//------------------------------------------------------------------------------
+// genTypeCanRepresentValue: Checks if a value can be represented by a given type.
+//
+// Arguments:
+// value - the value to check
+// type - the type
+//
+// Return Value:
+// True if the value is representable, false otherwise.
+//
+// Notes:
+// If the type is not integral or ref like (ref/byref/array) then false is
+// always returned.
+
+template <typename TValue>
+inline bool genTypeCanRepresentValue(var_types type, TValue value)
+{
+ switch (type)
+ {
+ case TYP_UBYTE:
+ case TYP_BOOL:
+ return FitsIn<UINT8>(value);
+ case TYP_BYTE:
+ return FitsIn<INT8>(value);
+ case TYP_USHORT:
+ case TYP_CHAR:
+ return FitsIn<UINT16>(value);
+ case TYP_SHORT:
+ return FitsIn<INT16>(value);
+ case TYP_UINT:
+ return FitsIn<UINT32>(value);
+ case TYP_INT:
+ return FitsIn<INT32>(value);
+ case TYP_ULONG:
+ return FitsIn<UINT64>(value);
+ case TYP_LONG:
+ return FitsIn<INT64>(value);
+ case TYP_REF:
+ case TYP_BYREF:
+ case TYP_ARRAY:
+ return FitsIn<UINT_PTR>(value);
+ default:
+ return false;
+ }
+}
+
/*****************************************************************************
*
* Return the size in bytes of the given type.
@@ -1137,7 +1183,6 @@ inline GenTreePtr Compiler::gtNewFieldRef(
tree->gtField.gtFldObj = obj;
tree->gtField.gtFldHnd = fldHnd;
tree->gtField.gtFldOffset = offset;
- tree->gtFlags |= GTF_GLOB_REF;
#ifdef FEATURE_READYTORUN_COMPILER
tree->gtField.gtFieldLookup.addr = nullptr;
@@ -1154,6 +1199,18 @@ inline GenTreePtr Compiler::gtNewFieldRef(
{
unsigned lclNum = obj->gtOp.gtOp1->gtLclVarCommon.gtLclNum;
lvaTable[lclNum].lvFieldAccessed = 1;
+#if defined(_TARGET_AMD64_) || defined(_TARGET_ARM64_)
+ // These structs are passed by reference; we should probably be able to treat these
+ // as non-global refs, but downstream logic expects these to be marked this way.
+ if (lvaTable[lclNum].lvIsParam)
+ {
+ tree->gtFlags |= GTF_GLOB_REF;
+ }
+#endif // defined(_TARGET_AMD64_) || defined(_TARGET_ARM64_)
+ }
+ else
+ {
+ tree->gtFlags |= GTF_GLOB_REF;
}
return tree;
@@ -4626,15 +4683,14 @@ inline void BasicBlock::InitVarSets(Compiler* comp)
{
VarSetOps::AssignNoCopy(comp, bbVarUse, VarSetOps::MakeEmpty(comp));
VarSetOps::AssignNoCopy(comp, bbVarDef, VarSetOps::MakeEmpty(comp));
- VarSetOps::AssignNoCopy(comp, bbVarTmp, VarSetOps::MakeEmpty(comp));
VarSetOps::AssignNoCopy(comp, bbLiveIn, VarSetOps::MakeEmpty(comp));
VarSetOps::AssignNoCopy(comp, bbLiveOut, VarSetOps::MakeEmpty(comp));
VarSetOps::AssignNoCopy(comp, bbScope, VarSetOps::MakeEmpty(comp));
- bbHeapUse = false;
- bbHeapDef = false;
- bbHeapLiveIn = false;
- bbHeapLiveOut = false;
+ bbMemoryUse = emptyMemoryKindSet;
+ bbMemoryDef = emptyMemoryKindSet;
+ bbMemoryLiveIn = emptyMemoryKindSet;
+ bbMemoryLiveOut = emptyMemoryKindSet;
}
// Returns true if the basic block ends with GT_JMP
diff --git a/src/jit/compmemkind.h b/src/jit/compmemkind.h
index e27d2071f7..b22bf6de1e 100644
--- a/src/jit/compmemkind.h
+++ b/src/jit/compmemkind.h
@@ -39,7 +39,7 @@ CompMemKindMacro(IndirAssignMap)
CompMemKindMacro(FieldSeqStore)
CompMemKindMacro(ZeroOffsetFieldMap)
CompMemKindMacro(ArrayInfoMap)
-CompMemKindMacro(HeapPhiArg)
+CompMemKindMacro(MemoryPhiArg)
CompMemKindMacro(CSE)
CompMemKindMacro(GC)
CompMemKindMacro(CorSig)
diff --git a/src/jit/compphases.h b/src/jit/compphases.h
index ac1bb636ff..5038d6e9c9 100644
--- a/src/jit/compphases.h
+++ b/src/jit/compphases.h
@@ -11,9 +11,10 @@
// corresponding array of string names of those phases. This include file undefines CompPhaseNameMacro
// after the last use.
// The arguments are:
-// CompPhaseNameMacro(enumName, stringName, hasChildren, parent)
+// CompPhaseNameMacro(enumName, stringName, shortName, hasChildren, parent)
// "enumName" is an Enumeration-style all-caps name.
// "stringName" is a self-explanatory.
+// "shortName" is an abbreviated form for stringName
// "hasChildren" is true if this phase is broken out into subphases.
// (We should never do EndPhase on a phase that has children, only on 'leaf phases.')
// "parent" is -1 for leaf phases, otherwise it is the "enumName" of the parent phase.
@@ -25,6 +26,9 @@ CompPhaseNameMacro(PHASE_POST_IMPORT, "Post-import",
CompPhaseNameMacro(PHASE_MORPH_INIT, "Morph - Init", "MOR-INIT" ,false, -1)
CompPhaseNameMacro(PHASE_MORPH_INLINE, "Morph - Inlining", "MOR-INL", false, -1)
CompPhaseNameMacro(PHASE_MORPH_IMPBYREF, "Morph - ByRefs", "MOR-BYREF",false, -1)
+CompPhaseNameMacro(PHASE_EMPTY_TRY, "Remove empty try", "EMPTYTRY", false, -1)
+CompPhaseNameMacro(PHASE_EMPTY_FINALLY, "Remove empty finally", "EMPTYFIN", false, -1)
+CompPhaseNameMacro(PHASE_CLONE_FINALLY, "Clone finally", "CLONEFIN", false, -1)
CompPhaseNameMacro(PHASE_STR_ADRLCL, "Morph - Structs/AddrExp", "MOR-STRAL",false, -1)
CompPhaseNameMacro(PHASE_MORPH_GLOBAL, "Morph - Global", "MOR-GLOB", false, -1)
CompPhaseNameMacro(PHASE_MORPH_END, "Morph - Finish", "MOR-END", false, -1)
diff --git a/src/jit/decomposelongs.cpp b/src/jit/decomposelongs.cpp
index 98b8b081fc..407ae1c35b 100644
--- a/src/jit/decomposelongs.cpp
+++ b/src/jit/decomposelongs.cpp
@@ -249,6 +249,12 @@ GenTree* DecomposeLongs::DecomposeNode(GenTree* tree)
nextNode = DecomposeRotate(use);
break;
+#ifdef FEATURE_SIMD
+ case GT_SIMD:
+ nextNode = DecomposeSimd(use);
+ break;
+#endif // FEATURE_SIMD
+
case GT_LOCKADD:
case GT_XADD:
case GT_XCHG:
@@ -411,6 +417,8 @@ GenTree* DecomposeLongs::DecomposeLclFld(LIR::Use& use)
GenTree* hiResult = m_compiler->gtNewLclFldNode(loResult->gtLclNum, TYP_INT, loResult->gtLclOffs + 4);
Range().InsertAfter(loResult, hiResult);
+ m_compiler->lvaIncRefCnts(hiResult);
+
return FinalizeDecomposition(use, loResult, hiResult, hiResult);
}
@@ -1560,6 +1568,163 @@ GenTree* DecomposeLongs::DecomposeUMod(LIR::Use& use)
return FinalizeDecomposition(use, loResult, hiResult, hiResult);
}
+#ifdef FEATURE_SIMD
+
+//------------------------------------------------------------------------
+// DecomposeSimd: Decompose GT_SIMD.
+//
+// Arguments:
+// use - the LIR::Use object for the def that needs to be decomposed.
+//
+// Return Value:
+// The next node to process.
+//
+GenTree* DecomposeLongs::DecomposeSimd(LIR::Use& use)
+{
+ GenTree* tree = use.Def();
+ genTreeOps oper = tree->OperGet();
+
+ assert(oper == GT_SIMD);
+
+ GenTreeSIMD* simdTree = tree->AsSIMD();
+
+ switch (simdTree->gtSIMDIntrinsicID)
+ {
+ case SIMDIntrinsicGetItem:
+ return DecomposeSimdGetItem(use);
+
+ default:
+ noway_assert(!"unexpected GT_SIMD node in long decomposition");
+ break;
+ }
+
+ return nullptr;
+}
+
+//------------------------------------------------------------------------
+// DecomposeSimdGetItem: Decompose GT_SIMD -- SIMDIntrinsicGetItem.
+//
+// Decompose a get[i] node on Vector<long>. For:
+//
+// GT_SIMD{get_item}[long](simd_var, index)
+//
+// create:
+//
+// tmp_simd_var = simd_var
+// tmp_index = index
+// loResult = GT_SIMD{get_item}[int](tmp_simd_var, tmp_index * 2)
+// hiResult = GT_SIMD{get_item}[int](tmp_simd_var, tmp_index * 2 + 1)
+// return: GT_LONG(loResult, hiResult)
+//
+// This isn't optimal codegen, since SIMDIntrinsicGetItem sometimes requires
+// temps that could be shared, for example.
+//
+// Arguments:
+// use - the LIR::Use object for the def that needs to be decomposed.
+//
+// Return Value:
+// The next node to process.
+//
+GenTree* DecomposeLongs::DecomposeSimdGetItem(LIR::Use& use)
+{
+ GenTree* tree = use.Def();
+ genTreeOps oper = tree->OperGet();
+
+ assert(oper == GT_SIMD);
+
+ GenTreeSIMD* simdTree = tree->AsSIMD();
+ var_types baseType = simdTree->gtSIMDBaseType;
+ unsigned simdSize = simdTree->gtSIMDSize;
+
+ assert(simdTree->gtSIMDIntrinsicID == SIMDIntrinsicGetItem);
+ assert(varTypeIsLong(baseType));
+ assert(varTypeIsLong(simdTree));
+ assert(varTypeIsSIMD(simdTree->gtOp.gtOp1->gtType));
+ assert(simdTree->gtOp.gtOp2->gtType == TYP_INT);
+
+ bool indexIsConst = simdTree->gtOp.gtOp2->IsCnsIntOrI();
+ ssize_t index = 0;
+ if (indexIsConst)
+ {
+ index = simdTree->gtOp.gtOp2->gtIntCon.gtIconVal;
+ }
+
+ LIR::Use op1(Range(), &simdTree->gtOp.gtOp1, simdTree);
+ unsigned simdTmpVarNum = op1.ReplaceWithLclVar(m_compiler, m_blockWeight);
+ JITDUMP("[DecomposeSimdGetItem]: Saving op1 tree to a temp var:\n");
+ DISPTREERANGE(Range(), op1.Def());
+
+ unsigned indexTmpVarNum = 0;
+ if (!indexIsConst)
+ {
+ LIR::Use op2(Range(), &simdTree->gtOp.gtOp2, simdTree);
+ indexTmpVarNum = op2.ReplaceWithLclVar(m_compiler, m_blockWeight);
+ JITDUMP("[DecomposeSimdGetItem]: Saving op2 tree to a temp var:\n");
+ DISPTREERANGE(Range(), op2.Def());
+ }
+
+ // Create:
+ // loResult = GT_SIMD{get_item}[int](tmp_simd_var, index * 2)
+
+ GenTree* simdTmpVar1 = m_compiler->gtNewLclLNode(simdTmpVarNum, simdTree->gtOp.gtOp1->gtType);
+ GenTree* indexTimesTwo1;
+
+ if (indexIsConst)
+ {
+ // Reuse the existing index constant node.
+ indexTimesTwo1 = simdTree->gtOp.gtOp2;
+ Range().Remove(indexTimesTwo1);
+ indexTimesTwo1->gtIntCon.gtIconVal = index * 2;
+
+ Range().InsertBefore(simdTree, simdTmpVar1, indexTimesTwo1);
+ }
+ else
+ {
+ GenTree* indexTmpVar1 = m_compiler->gtNewLclLNode(indexTmpVarNum, TYP_INT);
+ GenTree* two1 = m_compiler->gtNewIconNode(2, TYP_INT);
+ indexTimesTwo1 = m_compiler->gtNewOperNode(GT_MUL, TYP_INT, indexTmpVar1, two1);
+ Range().InsertBefore(simdTree, simdTmpVar1, indexTmpVar1, two1, indexTimesTwo1);
+ }
+
+ GenTree* loResult =
+ m_compiler->gtNewSIMDNode(TYP_INT, simdTmpVar1, indexTimesTwo1, SIMDIntrinsicGetItem, TYP_INT, simdSize);
+ Range().InsertBefore(simdTree, loResult);
+
+ // Create:
+ // hiResult = GT_SIMD{get_item}[int](tmp_simd_var, index * 2 + 1)
+
+ GenTree* simdTmpVar2 = m_compiler->gtNewLclLNode(simdTmpVarNum, simdTree->gtOp.gtOp1->gtType);
+ GenTree* indexTimesTwoPlusOne;
+
+ if (indexIsConst)
+ {
+ indexTimesTwoPlusOne = m_compiler->gtNewIconNode(index * 2 + 1, TYP_INT);
+ Range().InsertBefore(simdTree, simdTmpVar2, indexTimesTwoPlusOne);
+ }
+ else
+ {
+ GenTree* indexTmpVar2 = m_compiler->gtNewLclLNode(indexTmpVarNum, TYP_INT);
+ GenTree* two2 = m_compiler->gtNewIconNode(2, TYP_INT);
+ GenTree* indexTimesTwo2 = m_compiler->gtNewOperNode(GT_MUL, TYP_INT, indexTmpVar2, two2);
+ GenTree* one = m_compiler->gtNewIconNode(1, TYP_INT);
+ indexTimesTwoPlusOne = m_compiler->gtNewOperNode(GT_ADD, TYP_INT, indexTimesTwo2, one);
+ Range().InsertBefore(simdTree, simdTmpVar2, indexTmpVar2, two2, indexTimesTwo2);
+ Range().InsertBefore(simdTree, one, indexTimesTwoPlusOne);
+ }
+
+ GenTree* hiResult =
+ m_compiler->gtNewSIMDNode(TYP_INT, simdTmpVar2, indexTimesTwoPlusOne, SIMDIntrinsicGetItem, TYP_INT, simdSize);
+ Range().InsertBefore(simdTree, hiResult);
+
+ // Done with the original tree; remove it.
+
+ Range().Remove(simdTree);
+
+ return FinalizeDecomposition(use, loResult, hiResult, hiResult);
+}
+
+#endif // FEATURE_SIMD
+
//------------------------------------------------------------------------
// StoreNodeToVar: Check if the user is a STORE_LCL_VAR, and if it isn't,
// store the node to a var. Then decompose the new LclVar.
diff --git a/src/jit/decomposelongs.h b/src/jit/decomposelongs.h
index 8965a0b330..ff4f4ac880 100644
--- a/src/jit/decomposelongs.h
+++ b/src/jit/decomposelongs.h
@@ -55,6 +55,8 @@ private:
GenTree* DecomposeRotate(LIR::Use& use);
GenTree* DecomposeMul(LIR::Use& use);
GenTree* DecomposeUMod(LIR::Use& use);
+ GenTree* DecomposeSimd(LIR::Use& use);
+ GenTree* DecomposeSimdGetItem(LIR::Use& use);
// Helper functions
GenTree* FinalizeDecomposition(LIR::Use& use, GenTree* loResult, GenTree* hiResult, GenTree* insertResultAfter);
diff --git a/src/jit/ee_il_dll.cpp b/src/jit/ee_il_dll.cpp
index dcadaa9453..d5705ab353 100644
--- a/src/jit/ee_il_dll.cpp
+++ b/src/jit/ee_il_dll.cpp
@@ -409,13 +409,16 @@ unsigned CILJit::getMaxIntrinsicSIMDVectorLength(DWORD cpuCompileFlags)
{
if (JitConfig.EnableAVX() != 0)
{
+ JITDUMP("getMaxIntrinsicSIMDVectorLength: returning 32\n");
return 32;
}
}
#endif // FEATURE_AVX_SUPPORT
+ JITDUMP("getMaxIntrinsicSIMDVectorLength: returning 16\n");
return 16;
#endif // _TARGET_XARCH_
#else // !FEATURE_SIMD
+ JITDUMP("getMaxIntrinsicSIMDVectorLength: returning 0\n");
return 0;
#endif // !FEATURE_SIMD
}
diff --git a/src/jit/emit.cpp b/src/jit/emit.cpp
index 0929b7392e..1e566b2e76 100644
--- a/src/jit/emit.cpp
+++ b/src/jit/emit.cpp
@@ -1643,12 +1643,10 @@ void emitter::emitCreatePlaceholderIG(insGroupPlaceholderType igType,
{
igPh->igFlags |= IGF_FUNCLET_PROLOG;
}
-#ifdef DEBUG
else if (igType == IGPT_FUNCLET_EPILOG)
{
igPh->igFlags |= IGF_FUNCLET_EPILOG;
}
-#endif // DEBUG
#endif // FEATURE_EH_FUNCLETS
/* Link it into the placeholder list */
diff --git a/src/jit/emit.h b/src/jit/emit.h
index 5b1a395379..f57cc0a0f7 100644
--- a/src/jit/emit.h
+++ b/src/jit/emit.h
@@ -270,16 +270,14 @@ struct insGroup
#define IGF_FINALLY_TARGET 0x0004 // this group is the start of a basic block that is returned to after a finally.
#endif // FEATURE_EH_FUNCLETS && defined(_TARGET_ARM_)
#define IGF_FUNCLET_PROLOG 0x0008 // this group belongs to a funclet prolog
-#ifdef DEBUG
-#define IGF_FUNCLET_EPILOG 0x0010 // this group belongs to a funclet epilog. Currently, this is only needed for DEBUG.
-#endif
-#define IGF_EPILOG 0x0020 // this group belongs to a main function epilog
-#define IGF_NOGCINTERRUPT 0x0040 // this IG is is a no-interrupt region (prolog, epilog, etc.)
-#define IGF_UPD_ISZ 0x0080 // some instruction sizes updated
-#define IGF_PLACEHOLDER 0x0100 // this is a placeholder group, to be filled in later
-#define IGF_EMIT_ADD 0x0200 // this is a block added by the emitter
- // because the codegen block was too big. Also used for
- // placeholder IGs that aren't also labels.
+#define IGF_FUNCLET_EPILOG 0x0010 // this group belongs to a funclet epilog.
+#define IGF_EPILOG 0x0020 // this group belongs to a main function epilog
+#define IGF_NOGCINTERRUPT 0x0040 // this IG is is a no-interrupt region (prolog, epilog, etc.)
+#define IGF_UPD_ISZ 0x0080 // some instruction sizes updated
+#define IGF_PLACEHOLDER 0x0100 // this is a placeholder group, to be filled in later
+#define IGF_EMIT_ADD 0x0200 // this is a block added by the emitter
+ // because the codegen block was too big. Also used for
+ // placeholder IGs that aren't also labels.
// Mask of IGF_* flags that should be propagated to new blocks when they are created.
// This allows prologs and epilogs to be any number of IGs, but still be
@@ -491,12 +489,11 @@ protected:
return (ig != nullptr) && ((ig->igFlags & IGF_FUNCLET_PROLOG) != 0);
}
-#ifdef DEBUG
bool emitIGisInFuncletEpilog(const insGroup* ig)
{
return (ig != nullptr) && ((ig->igFlags & IGF_FUNCLET_EPILOG) != 0);
}
-#endif // DEBUG
+
#endif // FEATURE_EH_FUNCLETS
// If "ig" corresponds to the start of a basic block that is the
diff --git a/src/jit/emitarm.cpp b/src/jit/emitarm.cpp
index 45928ca2d2..1b3ef1bdc7 100644
--- a/src/jit/emitarm.cpp
+++ b/src/jit/emitarm.cpp
@@ -7536,31 +7536,53 @@ void emitter::emitInsMov(instruction ins, emitAttr attr, GenTree* node)
switch (node->OperGet())
{
case GT_IND:
- {
- GenTree* addr = node->gtGetOp1();
- assert(!addr->isContained());
- codeGen->genConsumeReg(addr);
- emitIns_R_R(ins, attr, node->gtRegNum, addr->gtRegNum);
- }
- break;
-
case GT_STOREIND:
{
- GenTree* addr = node->gtGetOp1();
- GenTree* data = node->gtOp.gtOp2;
+ GenTreeIndir* indir = node->AsIndir();
+ GenTree* addr = indir->Addr();
+ GenTree* data = indir->gtOp.gtOp2;
- assert(!addr->isContained());
- assert(!data->isContained());
- codeGen->genConsumeReg(addr);
- codeGen->genConsumeReg(data);
+ regNumber reg = (node->OperGet() == GT_IND) ? node->gtRegNum : data->gtRegNum;
- if (addr->OperGet() == GT_CLS_VAR_ADDR)
+ if (addr->isContained())
{
- emitIns_C_R(ins, attr, addr->gtClsVar.gtClsVarHnd, data->gtRegNum, 0);
+ assert(addr->OperGet() == GT_LCL_VAR_ADDR || addr->OperGet() == GT_LEA);
+
+ int offset = 0;
+ DWORD lsl = 0;
+
+ if (addr->OperGet() == GT_LEA)
+ {
+ offset = (int)addr->AsAddrMode()->gtOffset;
+ if (addr->AsAddrMode()->gtScale > 0)
+ {
+ assert(isPow2(addr->AsAddrMode()->gtScale));
+ BitScanForward(&lsl, addr->AsAddrMode()->gtScale);
+ }
+ }
+
+ GenTree* memBase = indir->Base();
+
+ if (indir->HasIndex())
+ {
+ NYI_ARM("emitInsMov HasIndex");
+ }
+ else
+ {
+ // TODO check offset is valid for encoding
+ emitIns_R_R_I(ins, attr, reg, memBase->gtRegNum, offset);
+ }
}
else
{
- emitIns_R_R(ins, attr, addr->gtRegNum, data->gtRegNum);
+ if (addr->OperGet() == GT_CLS_VAR_ADDR)
+ {
+ emitIns_C_R(ins, attr, addr->gtClsVar.gtClsVarHnd, data->gtRegNum, 0);
+ }
+ else
+ {
+ emitIns_R_R(ins, attr, reg, addr->gtRegNum);
+ }
}
}
break;
@@ -7581,7 +7603,6 @@ void emitter::emitInsMov(instruction ins, emitAttr attr, GenTree* node)
else
{
assert(!data->isContained());
- codeGen->genConsumeReg(data);
emitIns_S_R(ins, attr, data->gtRegNum, varNode->GetLclNum(), 0);
codeGen->genUpdateLife(varNode);
}
diff --git a/src/jit/emitarm64.cpp b/src/jit/emitarm64.cpp
index 12c4087115..dd4bac808a 100644
--- a/src/jit/emitarm64.cpp
+++ b/src/jit/emitarm64.cpp
@@ -10892,7 +10892,6 @@ void emitter::emitInsLoadStoreOp(instruction ins, emitAttr attr, regNumber dataR
}
else // addr is not contained, so we evaluate it into a register
{
- codeGen->genConsumeReg(addr);
// Then load/store dataReg from/to [addrReg]
emitIns_R_R(ins, ldstAttr, dataReg, addr->gtRegNum);
}
diff --git a/src/jit/emitxarch.cpp b/src/jit/emitxarch.cpp
index b6bacfa520..be5cefbfea 100644
--- a/src/jit/emitxarch.cpp
+++ b/src/jit/emitxarch.cpp
@@ -57,10 +57,6 @@ bool emitter::IsAVXInstruction(instruction ins)
#endif
}
-#ifdef _TARGET_AMD64_
-#define REX_PREFIX_MASK 0xFF00000000LL
-#endif // _TARGET_AMD64_
-
#ifdef FEATURE_AVX_SUPPORT
// Returns true if the AVX instruction is a binary operator that requires 3 operands.
// When we emit an instruction with only two operands, we will duplicate the destination
@@ -717,12 +713,10 @@ unsigned emitter::emitGetPrefixSize(code_t code)
return 3;
}
-#ifdef _TARGET_AMD64_
- if (code & REX_PREFIX_MASK)
+ if (hasRexPrefix(code))
{
return 1;
}
-#endif // _TARGET_AMD64_
return 0;
}
@@ -898,7 +892,8 @@ bool emitter::emitInsCanOnlyWriteSSE2OrAVXReg(instrDesc* id)
// The following SSE2 instructions write to a general purpose integer register.
if (!IsSSEOrAVXInstruction(ins) || ins == INS_mov_xmm2i || ins == INS_cvttsd2si
#ifndef LEGACY_BACKEND
- || ins == INS_cvttss2si || ins == INS_cvtsd2si || ins == INS_cvtss2si
+ || ins == INS_cvttss2si || ins == INS_cvtsd2si || ins == INS_cvtss2si || ins == INS_pmovmskb ||
+ ins == INS_pextrw
#endif // !LEGACY_BACKEND
)
{
@@ -1881,10 +1876,9 @@ UNATIVE_OFFSET emitter::emitInsSizeAM(instrDesc* id, code_t code)
}
}
-#ifdef _TARGET_AMD64_
size += emitGetVexPrefixAdjustedSize(ins, attrSize, code);
- if (code & REX_PREFIX_MASK)
+ if (hasRexPrefix(code))
{
// REX prefix
size += emitGetRexPrefixSize(ins);
@@ -1899,7 +1893,6 @@ UNATIVE_OFFSET emitter::emitInsSizeAM(instrDesc* id, code_t code)
// Should have a REX byte
size += emitGetRexPrefixSize(ins);
}
-#endif // _TARGET_AMD64_
if (rgx == REG_NA)
{
@@ -2302,9 +2295,7 @@ void emitter::emitIns(instruction ins)
}
#endif // DEBUG
-#ifdef _TARGET_AMD64_
- assert((code & REX_PREFIX_MASK) == 0); // Can't have a REX bit with no operands, right?
-#endif // _TARGET_AMD64_
+ assert(!hasRexPrefix(code)); // Can't have a REX bit with no operands, right?
if (code & 0xFF000000)
{
@@ -2786,20 +2777,19 @@ CORINFO_FIELD_HANDLE emitter::emitFltOrDblConst(GenTreeDblCon* tree, emitAttr at
regNumber emitter::emitInsBinary(instruction ins, emitAttr attr, GenTree* dst, GenTree* src)
{
// dst can only be a reg or modrm
- assert(!dst->isContained() || dst->isContainedMemoryOp() ||
- instrIs3opImul(ins)); // dst on these isn't really the dst
+ assert(!dst->isContained() || dst->isUsedFromMemory() || instrIs3opImul(ins)); // dst on these isn't really the dst
#ifdef DEBUG
// src can be anything but both src and dst cannot be addr modes
// or at least cannot be contained addr modes
- if (dst->isContainedMemoryOp())
+ if (dst->isUsedFromMemory())
{
- assert(!src->isContainedMemoryOp());
+ assert(!src->isUsedFromMemory());
}
- if (src->isContainedMemoryOp())
+ if (src->isUsedFromMemory())
{
- assert(!dst->isContainedMemoryOp());
+ assert(!dst->isUsedFromMemory());
}
#endif
@@ -2837,7 +2827,7 @@ regNumber emitter::emitInsBinary(instruction ins, emitAttr attr, GenTree* dst, G
// find local field if any
GenTreeLclFld* lclField = nullptr;
- if (src->isContainedLclField())
+ if (src->isLclFldUsedFromMemory())
{
lclField = src->AsLclFld();
}
@@ -2848,12 +2838,12 @@ regNumber emitter::emitInsBinary(instruction ins, emitAttr attr, GenTree* dst, G
// find contained lcl var if any
GenTreeLclVar* lclVar = nullptr;
- if (src->isContainedLclVar())
+ if (src->isLclVarUsedFromMemory())
{
assert(src->IsRegOptional());
lclVar = src->AsLclVar();
}
- else if (dst->isContainedLclVar())
+ if (dst->isLclVarUsedFromMemory())
{
assert(dst->IsRegOptional());
lclVar = dst->AsLclVar();
@@ -2861,12 +2851,12 @@ regNumber emitter::emitInsBinary(instruction ins, emitAttr attr, GenTree* dst, G
// find contained spill tmp if any
TempDsc* tmpDsc = nullptr;
- if (src->isContainedSpillTemp())
+ if (src->isUsedFromSpillTemp())
{
assert(src->IsRegOptional());
tmpDsc = codeGen->getSpillTempDsc(src);
}
- else if (dst->isContainedSpillTemp())
+ else if (dst->isUsedFromSpillTemp())
{
assert(dst->IsRegOptional());
tmpDsc = codeGen->getSpillTempDsc(dst);
@@ -2952,7 +2942,7 @@ regNumber emitter::emitInsBinary(instruction ins, emitAttr attr, GenTree* dst, G
if (varNum != BAD_VAR_NUM || tmpDsc != nullptr)
{
// Is the memory op in the source position?
- if (src->isContainedMemoryOp())
+ if (src->isUsedFromMemory())
{
if (instrHasImplicitRegPairDest(ins))
{
@@ -3997,16 +3987,14 @@ void emitter::emitIns_C_I(instruction ins, emitAttr attr, CORINFO_FIELD_HANDLE f
code_t code = insCodeMI(ins);
UNATIVE_OFFSET sz = emitInsSizeCV(id, code, val);
-#ifdef _TARGET_AMD64_
// Vex prefix
sz += emitGetVexPrefixAdjustedSize(ins, attr, insCodeMI(ins));
// REX prefix, if not already included in "code"
- if (TakesRexWPrefix(ins, attr) && (code & REX_PREFIX_MASK) == 0)
+ if (TakesRexWPrefix(ins, attr) && !hasRexPrefix(code))
{
sz += emitGetRexPrefixSize(ins);
}
-#endif // _TARGET_AMD64_
id->idAddr()->iiaFieldHnd = fldHnd;
id->idCodeSize(sz);
@@ -8055,10 +8043,7 @@ DONE:
}
else
{
- if (emitInsCanOnlyWriteSSE2OrAVXReg(id))
- {
- }
- else
+ if (!emitInsCanOnlyWriteSSE2OrAVXReg(id))
{
switch (id->idInsFmt())
{
@@ -8450,10 +8435,7 @@ BYTE* emitter::emitOutputSV(BYTE* dst, instrDesc* id, code_t code, CnsVal* addc)
}
else
{
- if (emitInsCanOnlyWriteSSE2OrAVXReg(id))
- {
- }
- else
+ if (!emitInsCanOnlyWriteSSE2OrAVXReg(id))
{
switch (id->idInsFmt())
{
@@ -8883,10 +8865,7 @@ BYTE* emitter::emitOutputCV(BYTE* dst, instrDesc* id, code_t code, CnsVal* addc)
}
else
{
- if (emitInsCanOnlyWriteSSE2OrAVXReg(id))
- {
- }
- else
+ if (!emitInsCanOnlyWriteSSE2OrAVXReg(id))
{
switch (id->idInsFmt())
{
@@ -9428,10 +9407,7 @@ BYTE* emitter::emitOutputRR(BYTE* dst, instrDesc* id)
}
else
{
- if (emitInsCanOnlyWriteSSE2OrAVXReg(id))
- {
- }
- else
+ if (!emitInsCanOnlyWriteSSE2OrAVXReg(id))
{
switch (id->idInsFmt())
{
@@ -10832,6 +10808,12 @@ size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp)
dst += emitOutputByte(dst, emitGetInsSC(id));
sz = emitSizeOfInsDsc(id);
+
+ // Kill any GC ref in the destination register if necessary.
+ if (!emitInsCanOnlyWriteSSE2OrAVXReg(id))
+ {
+ emitGCregDeadUpd(id->idReg1(), dst);
+ }
break;
/********************************************************************/
@@ -11202,9 +11184,14 @@ size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp)
assert(sz == emitSizeOfInsDsc(id));
#if !FEATURE_FIXED_OUT_ARGS
+ bool updateStackLevel = !emitIGisInProlog(ig) && !emitIGisInEpilog(ig);
+
+#if FEATURE_EH_FUNCLETS
+ updateStackLevel = updateStackLevel && !emitIGisInFuncletProlog(ig) && !emitIGisInFuncletEpilog(ig);
+#endif // FEATURE_EH_FUNCLETS
// Make sure we keep the current stack level up to date
- if (!emitIGisInProlog(ig) && !emitIGisInEpilog(ig))
+ if (updateStackLevel)
{
switch (ins)
{
diff --git a/src/jit/emitxarch.h b/src/jit/emitxarch.h
index 98256cdaa7..9c435e5d87 100644
--- a/src/jit/emitxarch.h
+++ b/src/jit/emitxarch.h
@@ -109,6 +109,16 @@ void SetUseSSE3_4(bool value)
}
bool Is4ByteSSE4Instruction(instruction ins);
+bool hasRexPrefix(code_t code)
+{
+#ifdef _TARGET_AMD64_
+ const code_t REX_PREFIX_MASK = 0xFF00000000LL;
+ return (code & REX_PREFIX_MASK) != 0;
+#else // !_TARGET_AMD64_
+ return false;
+#endif // !_TARGET_AMD64_
+}
+
#ifdef FEATURE_AVX_SUPPORT
// 3-byte VEX prefix starts with byte 0xC4
@@ -150,6 +160,26 @@ void SetUseAVX(bool value)
useAVXEncodings = value;
}
+bool containsAVXInstruction = false;
+bool ContainsAVX()
+{
+ return containsAVXInstruction;
+}
+void SetContainsAVX(bool value)
+{
+ containsAVXInstruction = value;
+}
+
+bool contains256bitAVXInstruction = false;
+bool Contains256bitAVX()
+{
+ return contains256bitAVXInstruction;
+}
+void SetContains256bitAVX(bool value)
+{
+ contains256bitAVXInstruction = value;
+}
+
bool IsThreeOperandBinaryAVXInstruction(instruction ins);
bool IsThreeOperandMoveAVXInstruction(instruction ins);
bool IsThreeOperandAVXInstruction(instruction ins)
@@ -158,7 +188,15 @@ bool IsThreeOperandAVXInstruction(instruction ins)
}
bool Is4ByteAVXInstruction(instruction ins);
#else // !FEATURE_AVX_SUPPORT
-bool UseAVX()
+bool UseAVX()
+{
+ return false;
+}
+bool ContainsAVX()
+{
+ return false;
+}
+bool Contains256bitAVX()
{
return false;
}
diff --git a/src/jit/flowgraph.cpp b/src/jit/flowgraph.cpp
index 441569c339..50318b0940 100644
--- a/src/jit/flowgraph.cpp
+++ b/src/jit/flowgraph.cpp
@@ -8550,8 +8550,12 @@ void Compiler::fgAddInternal()
GenTreeStmt* Compiler::fgNewStmtFromTree(GenTreePtr tree, BasicBlock* block, IL_OFFSETX offs)
{
GenTreeStmt* stmt = gtNewStmt(tree, offs);
- gtSetStmtInfo(stmt);
- fgSetStmtSeq(stmt);
+
+ if (fgStmtListThreaded)
+ {
+ gtSetStmtInfo(stmt);
+ fgSetStmtSeq(stmt);
+ }
#if DEBUG
if (block != nullptr)
@@ -11654,6 +11658,7 @@ DONE:
void Compiler::fgClearFinallyTargetBit(BasicBlock* block)
{
+ assert(fgComputePredsDone);
assert((block->bbFlags & BBF_FINALLY_TARGET) != 0);
for (flowList* pred = block->bbPreds; pred; pred = pred->flNext)
@@ -12946,6 +12951,12 @@ bool Compiler::fgOptimizeBranchToEmptyUnconditional(BasicBlock* block, BasicBloc
optimizeJump = false;
}
+ // Don't optimize a jump to a cloned finally
+ if (bDest->bbFlags & BBF_CLONED_FINALLY_BEGIN)
+ {
+ optimizeJump = false;
+ }
+
#if FEATURE_EH_FUNCLETS && defined(_TARGET_ARM_)
// Don't optimize a jump to a finally target. For BB1->BB2->BB3, where
// BB2 is a finally target, if we changed BB1 to jump directly to BB3,
@@ -13747,7 +13758,7 @@ bool Compiler::fgOptimizeBranchToNext(BasicBlock* block, BasicBlock* bNext, Basi
{
assert(block->bbJumpKind == BBJ_COND || block->bbJumpKind == BBJ_ALWAYS);
assert(block->bbJumpDest == bNext);
- assert(block->bbNext = bNext);
+ assert(block->bbNext == bNext);
assert(block->bbPrev == bPrev);
if (block->bbJumpKind == BBJ_ALWAYS)
@@ -17782,7 +17793,7 @@ void Compiler::fgSetTreeSeqHelper(GenTreePtr tree, bool isLIR)
if (kind & GTK_SMPOP)
{
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
// Special handling for GT_LIST
if (tree->OperGet() == GT_LIST)
@@ -18004,8 +18015,8 @@ void Compiler::fgSetTreeSeqHelper(GenTreePtr tree, bool isLIR)
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
// Evaluate the trees left to right
- fgSetTreeSeqHelper(tree->gtBoundsChk.gtArrLen, isLIR);
fgSetTreeSeqHelper(tree->gtBoundsChk.gtIndex, isLIR);
+ fgSetTreeSeqHelper(tree->gtBoundsChk.gtArrLen, isLIR);
break;
case GT_STORE_DYN_BLK:
@@ -20318,7 +20329,7 @@ void Compiler::fgDebugCheckFlags(GenTreePtr tree)
else if (kind & GTK_SMPOP)
{
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
// During GS work, we make shadow copies for params.
// In gsParamsToShadows(), we create a shadow var of TYP_INT for every small type param.
@@ -21970,6 +21981,13 @@ _Done:
compNeedsGSSecurityCookie |= InlineeCompiler->compNeedsGSSecurityCookie;
compGSReorderStackLayout |= InlineeCompiler->compGSReorderStackLayout;
+#ifdef FEATURE_SIMD
+ if (InlineeCompiler->usesSIMDTypes())
+ {
+ setUsesSIMDTypes(true);
+ }
+#endif // FEATURE_SIMD
+
// Update unmanaged call count
info.compCallUnmanaged += InlineeCompiler->info.compCallUnmanaged;
@@ -22471,3 +22489,1770 @@ void Compiler::fgLclFldAssign(unsigned lclNum)
lvaSetVarDoNotEnregister(lclNum DEBUGARG(DNER_LocalField));
}
}
+
+//------------------------------------------------------------------------
+// fgRemoveEmptyFinally: Remove try/finallys where the finally is empty
+//
+// Notes:
+// Removes all try/finallys in the method with empty finallys.
+// These typically arise from inlining empty Dispose methods.
+//
+// Converts callfinally to a jump to the finally continuation.
+// Removes the finally, and reparents all blocks in the try to the
+// enclosing try or method region.
+//
+// Currently limited to trivially empty finallys: those with one basic
+// block containing only single RETFILT statement. It is possible but
+// not likely that more complex-looking finallys will eventually become
+// empty (from say subsequent optimization). An SPMI run with
+// just the "detection" part of this phase run after optimization
+// found only one example where a new empty finally was detected.
+
+void Compiler::fgRemoveEmptyFinally()
+{
+ JITDUMP("\n*************** In fgRemoveEmptyFinally()\n");
+
+ if (compHndBBtabCount == 0)
+ {
+ JITDUMP("No EH in this method, nothing to remove.\n");
+ return;
+ }
+
+ if (opts.MinOpts())
+ {
+ JITDUMP("Method compiled with minOpts, no removal.\n");
+ return;
+ }
+
+ if (opts.compDbgCode)
+ {
+ JITDUMP("Method compiled with debug codegen, no removal.\n");
+ return;
+ }
+
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("\n*************** Before fgRemoveEmptyFinally()\n");
+ fgDispBasicBlocks();
+ fgDispHandlerTab();
+ printf("\n");
+ }
+#endif // DEBUG
+
+ // Look for finallys or faults that are empty.
+ unsigned finallyCount = 0;
+ unsigned emptyCount = 0;
+ unsigned XTnum = 0;
+ while (XTnum < compHndBBtabCount)
+ {
+ EHblkDsc* const HBtab = &compHndBBtab[XTnum];
+
+ // Check if this is a try/finally. We could also look for empty
+ // try/fault but presumably those are rare.
+ if (!HBtab->HasFinallyHandler())
+ {
+ JITDUMP("EH#%u is not a try-finally; skipping.\n", XTnum);
+ XTnum++;
+ continue;
+ }
+
+ finallyCount++;
+
+ // Look at blocks involved.
+ BasicBlock* const firstBlock = HBtab->ebdHndBeg;
+ BasicBlock* const lastBlock = HBtab->ebdHndLast;
+
+ // Limit for now to finallys that are single blocks.
+ if (firstBlock != lastBlock)
+ {
+ JITDUMP("EH#%u finally has multiple basic blocks; skipping.\n", XTnum);
+ XTnum++;
+ continue;
+ }
+
+ // Limit for now to finallys that contain only a GT_RETFILT.
+ bool isEmpty = true;
+
+ for (GenTreeStmt* stmt = firstBlock->firstStmt(); stmt != nullptr; stmt = stmt->gtNextStmt)
+ {
+ GenTreePtr stmtExpr = stmt->gtStmtExpr;
+
+ if (stmtExpr->gtOper != GT_RETFILT)
+ {
+ isEmpty = false;
+ break;
+ }
+ }
+
+ if (!isEmpty)
+ {
+ JITDUMP("EH#%u finally is not empty; skipping.\n", XTnum);
+ XTnum++;
+ continue;
+ }
+
+ JITDUMP("EH#%u has empty finally, removing the region.\n", XTnum);
+
+ // Find all the call finallys that invoke this finally,
+ // and modify them to jump to the return point.
+ BasicBlock* firstCallFinallyRangeBlock = nullptr;
+ BasicBlock* endCallFinallyRangeBlock = nullptr;
+ ehGetCallFinallyBlockRange(XTnum, &firstCallFinallyRangeBlock, &endCallFinallyRangeBlock);
+
+ BasicBlock* currentBlock = firstCallFinallyRangeBlock;
+
+ while (currentBlock != endCallFinallyRangeBlock)
+ {
+ BasicBlock* nextBlock = currentBlock->bbNext;
+
+ if ((currentBlock->bbJumpKind == BBJ_CALLFINALLY) && (currentBlock->bbJumpDest == firstBlock))
+ {
+ // Retarget the call finally to jump to the return
+ // point.
+ //
+ // We don't expect to see retless finallys here, since
+ // the finally is empty.
+ noway_assert(currentBlock->isBBCallAlwaysPair());
+
+ BasicBlock* const leaveBlock = currentBlock->bbNext;
+ BasicBlock* const postTryFinallyBlock = leaveBlock->bbJumpDest;
+
+ noway_assert(leaveBlock->bbJumpKind == BBJ_ALWAYS);
+
+ currentBlock->bbJumpDest = postTryFinallyBlock;
+ currentBlock->bbJumpKind = BBJ_ALWAYS;
+
+ // Ref count updates.
+ fgAddRefPred(postTryFinallyBlock, currentBlock);
+ // fgRemoveRefPred(firstBlock, currentBlock);
+
+ // Delete the leave block, which should be marked as
+ // keep always.
+ assert((leaveBlock->bbFlags & BBF_KEEP_BBJ_ALWAYS) != 0);
+ nextBlock = leaveBlock->bbNext;
+
+ leaveBlock->bbFlags &= ~BBF_KEEP_BBJ_ALWAYS;
+ fgRemoveBlock(leaveBlock, true);
+
+ // Cleanup the postTryFinallyBlock
+ fgCleanupContinuation(postTryFinallyBlock);
+
+ // Make sure iteration isn't going off the deep end.
+ assert(leaveBlock != endCallFinallyRangeBlock);
+ }
+
+ currentBlock = nextBlock;
+ }
+
+ // Handler block should now be unreferenced, since the only
+ // explicit references to it were in call finallys.
+ firstBlock->bbRefs = 0;
+
+ // Remove the handler block.
+ const bool unreachable = true;
+ firstBlock->bbFlags &= ~BBF_DONT_REMOVE;
+ fgRemoveBlock(firstBlock, unreachable);
+
+ // Find enclosing try region for the try, if any, and update
+ // the try region. Note the handler region (if any) won't
+ // change.
+ BasicBlock* const firstTryBlock = HBtab->ebdTryBeg;
+ BasicBlock* const lastTryBlock = HBtab->ebdTryLast;
+ assert(firstTryBlock->getTryIndex() == XTnum);
+
+ for (BasicBlock* block = firstTryBlock; block != nullptr; block = block->bbNext)
+ {
+ // Look for blocks directly contained in this try, and
+ // update the try region appropriately.
+ //
+ // Try region for blocks transitively contained (say in a
+ // child try) will get updated by the subsequent call to
+ // fgRemoveEHTableEntry.
+ if (block->getTryIndex() == XTnum)
+ {
+ if (firstBlock->hasTryIndex())
+ {
+ block->setTryIndex(firstBlock->getTryIndex());
+ }
+ else
+ {
+ block->clearTryIndex();
+ }
+ }
+
+ if (block == firstTryBlock)
+ {
+ assert((block->bbFlags & BBF_TRY_BEG) != 0);
+ block->bbFlags &= ~BBF_TRY_BEG;
+ }
+
+ if (block == lastTryBlock)
+ {
+ break;
+ }
+ }
+
+ // Remove the try-finally EH region. This will compact the EH table
+ // so XTnum now points at the next entry.
+ fgRemoveEHTableEntry(XTnum);
+
+ emptyCount++;
+ }
+
+ if (emptyCount > 0)
+ {
+ JITDUMP("fgRemoveEmptyFinally() removed %u try-finally clauses from %u finallys\n", emptyCount, finallyCount);
+ fgOptimizedFinally = true;
+
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("\n*************** After fgRemoveEmptyFinally()\n");
+ fgDispBasicBlocks();
+ fgDispHandlerTab();
+ printf("\n");
+ }
+
+ fgVerifyHandlerTab();
+ fgDebugCheckBBlist(false, false);
+
+#endif // DEBUG
+ }
+}
+
+//------------------------------------------------------------------------
+// fgRemoveEmptyTry: Optimize try/finallys where the try is empty
+//
+// Notes:
+// In runtimes where thread abort is not possible, `try {} finally {S}`
+// can be optimized to simply `S`. This method looks for such
+// cases and removes the try-finally from the EH table, making
+// suitable flow, block flag, statement, and region updates.
+//
+// This optimization is not legal in runtimes that support thread
+// abort because those runtimes ensure that a finally is completely
+// executed before continuing to process the thread abort. With
+// this optimization, the code block `S` can lose special
+// within-finally status and so complete execution is no longer
+// guaranteed.
+
+void Compiler::fgRemoveEmptyTry()
+{
+ JITDUMP("\n*************** In fgRemoveEmptyTry()\n");
+
+#ifdef FEATURE_CORECLR
+ bool enableRemoveEmptyTry = true;
+#else
+ // Code in a finally gets special treatment in the presence of
+ // thread abort.
+ bool enableRemoveEmptyTry = false;
+#endif // FEATURE_CORECLR
+
+#ifdef DEBUG
+ // Allow override to enable/disable.
+ enableRemoveEmptyTry = (JitConfig.JitEnableRemoveEmptyTry() == 1);
+#endif // DEBUG
+
+ if (!enableRemoveEmptyTry)
+ {
+ JITDUMP("Empty try removal disabled.\n");
+ return;
+ }
+
+ if (compHndBBtabCount == 0)
+ {
+ JITDUMP("No EH in this method, nothing to remove.\n");
+ return;
+ }
+
+ if (opts.MinOpts())
+ {
+ JITDUMP("Method compiled with minOpts, no removal.\n");
+ return;
+ }
+
+ if (opts.compDbgCode)
+ {
+ JITDUMP("Method compiled with debug codegen, no removal.\n");
+ return;
+ }
+
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("\n*************** Before fgRemoveEmptyTry()\n");
+ fgDispBasicBlocks();
+ fgDispHandlerTab();
+ printf("\n");
+ }
+#endif // DEBUG
+
+ // Look for try-finallys where the try is empty.
+ unsigned emptyCount = 0;
+ unsigned XTnum = 0;
+ while (XTnum < compHndBBtabCount)
+ {
+ EHblkDsc* const HBtab = &compHndBBtab[XTnum];
+
+ // Check if this is a try/finally. We could also look for empty
+ // try/fault but presumably those are rare.
+ if (!HBtab->HasFinallyHandler())
+ {
+ JITDUMP("EH#%u is not a try-finally; skipping.\n", XTnum);
+ XTnum++;
+ continue;
+ }
+
+ // Examine the try region
+ BasicBlock* const firstTryBlock = HBtab->ebdTryBeg;
+ BasicBlock* const lastTryBlock = HBtab->ebdTryLast;
+ BasicBlock* const firstHandlerBlock = HBtab->ebdHndBeg;
+ BasicBlock* const lastHandlerBlock = HBtab->ebdHndLast;
+ BasicBlock* const endHandlerBlock = lastHandlerBlock->bbNext;
+
+ assert(firstTryBlock->getTryIndex() == XTnum);
+
+ // Limit for now to trys that contain only a callfinally pair
+ // or branch to same.
+ if (!firstTryBlock->isEmpty())
+ {
+ JITDUMP("EH#%u first try block BB%02u not empty; skipping.\n", XTnum, firstTryBlock->bbNum);
+ XTnum++;
+ continue;
+ }
+
+#if FEATURE_EH_CALLFINALLY_THUNKS
+
+ // Look for blocks that are always jumps to a call finally
+ // pair that targets the finally
+ if (firstTryBlock->bbJumpKind != BBJ_ALWAYS)
+ {
+ JITDUMP("EH#%u first try block BB%02u not jump to a callfinally; skipping.\n", XTnum, firstTryBlock->bbNum);
+ XTnum++;
+ continue;
+ }
+
+ BasicBlock* const callFinally = firstTryBlock->bbJumpDest;
+
+ // Look for call always pair. Note this will also disqualify
+ // empty try removal in cases where the finally doesn't
+ // return.
+ if (!callFinally->isBBCallAlwaysPair() || (callFinally->bbJumpDest != firstHandlerBlock))
+ {
+ JITDUMP("EH#%u first try block BB%02u always jumps but not to a callfinally; skipping.\n", XTnum,
+ firstTryBlock->bbNum);
+ XTnum++;
+ continue;
+ }
+
+ // Try itself must be a single block.
+ if (firstTryBlock != lastTryBlock)
+ {
+ JITDUMP("EH#%u first try block BB%02u not only block in try; skipping.\n", XTnum,
+ firstTryBlock->bbNext->bbNum);
+ XTnum++;
+ continue;
+ }
+
+#else
+ // Look for call always pair within the try itself. Note this
+ // will also disqualify empty try removal in cases where the
+ // finally doesn't return.
+ if (!firstTryBlock->isBBCallAlwaysPair() || (firstTryBlock->bbJumpDest != firstHandlerBlock))
+ {
+ JITDUMP("EH#%u first try block BB%02u not a callfinally; skipping.\n", XTnum, firstTryBlock->bbNum);
+ XTnum++;
+ continue;
+ }
+
+ BasicBlock* const callFinally = firstTryBlock;
+
+ // Try must be a callalways pair of blocks.
+ if (firstTryBlock->bbNext != lastTryBlock)
+ {
+ JITDUMP("EH#%u block BB%02u not last block in try; skipping.\n", XTnum, firstTryBlock->bbNext->bbNum);
+ XTnum++;
+ continue;
+ }
+
+#endif // FEATURE_EH_CALLFINALLY_THUNKS
+
+ JITDUMP("EH#%u has empty try, removing the try region and promoting the finally.\n", XTnum);
+
+ // There should be just one callfinally that invokes this
+ // finally, the one we found above. Verify this.
+ BasicBlock* firstCallFinallyRangeBlock = nullptr;
+ BasicBlock* endCallFinallyRangeBlock = nullptr;
+ bool verifiedSingleCallfinally = true;
+ ehGetCallFinallyBlockRange(XTnum, &firstCallFinallyRangeBlock, &endCallFinallyRangeBlock);
+
+ for (BasicBlock* block = firstCallFinallyRangeBlock; block != endCallFinallyRangeBlock; block = block->bbNext)
+ {
+ if ((block->bbJumpKind == BBJ_CALLFINALLY) && (block->bbJumpDest == firstHandlerBlock))
+ {
+ assert(block->isBBCallAlwaysPair());
+
+ if (block != callFinally)
+ {
+ JITDUMP("EH#%u found unexpected callfinally BB%02u; skipping.\n");
+ verifiedSingleCallfinally = false;
+ break;
+ }
+
+ block = block->bbNext;
+ }
+ }
+
+ if (!verifiedSingleCallfinally)
+ {
+ JITDUMP("EH#%u -- unexpectedly -- has multiple callfinallys; skipping.\n");
+ XTnum++;
+ assert(verifiedSingleCallfinally);
+ continue;
+ }
+
+ // Time to optimize.
+ //
+ // (1) Convert the callfinally to a normal jump to the handler
+ callFinally->bbJumpKind = BBJ_ALWAYS;
+
+ // Identify the leave block and the continuation
+ BasicBlock* const leave = callFinally->bbNext;
+ BasicBlock* const continuation = leave->bbJumpDest;
+
+ // (2) Cleanup the leave so it can be deleted by subsequent opts
+ assert((leave->bbFlags & BBF_KEEP_BBJ_ALWAYS) != 0);
+ leave->bbFlags &= ~BBF_KEEP_BBJ_ALWAYS;
+
+ // (3) Cleanup the continuation
+ fgCleanupContinuation(continuation);
+
+ // (4) Find enclosing try region for the try, if any, and
+ // update the try region for the blocks in the try. Note the
+ // handler region (if any) won't change.
+ //
+ // Kind of overkill to loop here, but hey.
+ for (BasicBlock* block = firstTryBlock; block != nullptr; block = block->bbNext)
+ {
+ // Look for blocks directly contained in this try, and
+ // update the try region appropriately.
+ //
+ // The try region for blocks transitively contained (say in a
+ // child try) will get updated by the subsequent call to
+ // fgRemoveEHTableEntry.
+ if (block->getTryIndex() == XTnum)
+ {
+ if (firstHandlerBlock->hasTryIndex())
+ {
+ block->setTryIndex(firstHandlerBlock->getTryIndex());
+ }
+ else
+ {
+ block->clearTryIndex();
+ }
+ }
+
+ if (block == firstTryBlock)
+ {
+ assert((block->bbFlags & BBF_TRY_BEG) != 0);
+ block->bbFlags &= ~BBF_TRY_BEG;
+ }
+
+ if (block == lastTryBlock)
+ {
+ break;
+ }
+ }
+
+ // (5) Update the directly contained handler blocks' handler index.
+ // Handler index of any nested blocks will update when we
+ // remove the EH table entry. Change handler exits to jump to
+ // the continuation. Clear catch type on handler entry.
+ for (BasicBlock* block = firstHandlerBlock; block != endHandlerBlock; block = block->bbNext)
+ {
+ if (block == firstHandlerBlock)
+ {
+ block->bbCatchTyp = BBCT_NONE;
+ }
+
+ if (block->getHndIndex() == XTnum)
+ {
+ if (firstTryBlock->hasHndIndex())
+ {
+ block->setHndIndex(firstTryBlock->getHndIndex());
+ }
+ else
+ {
+ block->clearHndIndex();
+ }
+
+ if (block->bbJumpKind == BBJ_EHFINALLYRET)
+ {
+ GenTreeStmt* finallyRet = block->lastStmt();
+ GenTreePtr finallyRetExpr = finallyRet->gtStmtExpr;
+ assert(finallyRetExpr->gtOper == GT_RETFILT);
+ fgRemoveStmt(block, finallyRet);
+ block->bbJumpKind = BBJ_ALWAYS;
+ block->bbJumpDest = continuation;
+ }
+ }
+ }
+
+ // (6) Remove the try-finally EH region. This will compact the
+ // EH table so XTnum now points at the next entry and will update
+ // the EH region indices of any nested EH in the (former) handler.
+ fgRemoveEHTableEntry(XTnum);
+
+ // Another one bites the dust...
+ emptyCount++;
+ }
+
+ if (emptyCount > 0)
+ {
+ JITDUMP("fgRemoveEmptyTry() optimized %u empty-try try-finally clauses\n", emptyCount);
+ fgOptimizedFinally = true;
+
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("\n*************** After fgRemoveEmptyTry()\n");
+ fgDispBasicBlocks();
+ fgDispHandlerTab();
+ printf("\n");
+ }
+
+ fgVerifyHandlerTab();
+ fgDebugCheckBBlist(false, false);
+
+#endif // DEBUG
+ }
+}
+
+//------------------------------------------------------------------------
+// fgCloneFinally: Optimize normal exit path from a try/finally
+//
+// Notes:
+// Handles finallys that are not enclosed by or enclosing other
+// handler regions.
+//
+// Converts the "normal exit" callfinally to a jump to a cloned copy
+// of the finally, which in turn jumps to the finally continuation.
+//
+// If all callfinallys for a given finally are converted to jump to
+// the clone, the try-finally is modified into a try-fault,
+// distingushable from organic try-faults by handler type
+// EH_HANDLER_FAULT_WAS_FINALLY vs the organic EH_HANDLER_FAULT.
+//
+// Does not yet handle thread abort. The open issues here are how
+// to maintain the proper description of the cloned finally blocks
+// as a handler (for thread abort purposes), how to prevent code
+// motion in or out of these blocks, and how to report this cloned
+// handler to the runtime. Some building blocks for thread abort
+// exist (see below) but more work needed.
+//
+// The first and last blocks of the cloned finally are marked with
+// BBF_CLONED_FINALLY_BEGIN and BBF_CLONED_FINALLY_END. However
+// these markers currently can get lost during subsequent
+// optimizations.
+
+void Compiler::fgCloneFinally()
+{
+ JITDUMP("\n*************** In fgCloneFinally()\n");
+
+#ifdef FEATURE_CORECLR
+ bool enableCloning = true;
+#else
+ // Finally cloning currently doesn't provide sufficient protection
+ // for the cloned code in the presence of thread abort.
+ bool enableCloning = false;
+#endif // FEATURE_CORECLR
+
+#ifdef DEBUG
+ // Allow override to enable/disable.
+ enableCloning = (JitConfig.JitEnableFinallyCloning() == 1);
+#endif // DEBUG
+
+ if (!enableCloning)
+ {
+ JITDUMP("Finally cloning disabled.\n");
+ return;
+ }
+
+ if (compHndBBtabCount == 0)
+ {
+ JITDUMP("No EH in this method, no cloning.\n");
+ return;
+ }
+
+ if (opts.MinOpts())
+ {
+ JITDUMP("Method compiled with minOpts, no cloning.\n");
+ return;
+ }
+
+ if (opts.compDbgCode)
+ {
+ JITDUMP("Method compiled with debug codegen, no cloning.\n");
+ return;
+ }
+
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("\n*************** Before fgCloneFinally()\n");
+ fgDispBasicBlocks();
+ fgDispHandlerTab();
+ printf("\n");
+ }
+
+ // Verify try-finally exits look good before we start.
+ fgDebugCheckTryFinallyExits();
+
+#endif // DEBUG
+
+ // Look for finallys that are not contained within other handlers,
+ // and which do not themselves contain EH.
+ //
+ // Note these cases potentially could be handled, but are less
+ // obviously profitable and require modification of the handler
+ // table.
+ unsigned XTnum = 0;
+ EHblkDsc* HBtab = compHndBBtab;
+ unsigned cloneCount = 0;
+ for (; XTnum < compHndBBtabCount; XTnum++, HBtab++)
+ {
+ // Check if this is a try/finally
+ if (!HBtab->HasFinallyHandler())
+ {
+ JITDUMP("EH#%u is not a try-finally; skipping.\n", XTnum);
+ continue;
+ }
+
+ // Check if enclosed by another handler.
+ const unsigned enclosingHandlerRegion = ehGetEnclosingHndIndex(XTnum);
+
+ if (enclosingHandlerRegion != EHblkDsc::NO_ENCLOSING_INDEX)
+ {
+ JITDUMP("EH#%u is enclosed by handler EH#%u; skipping.\n", XTnum, enclosingHandlerRegion);
+ continue;
+ }
+
+ bool containsEH = false;
+ unsigned exampleEnclosedHandlerRegion = 0;
+
+ // Only need to look at lower numbered regions because the
+ // handler table is ordered by nesting.
+ for (unsigned i = 0; i < XTnum; i++)
+ {
+ if (ehGetEnclosingHndIndex(i) == XTnum)
+ {
+ exampleEnclosedHandlerRegion = i;
+ containsEH = true;
+ break;
+ }
+ }
+
+ if (containsEH)
+ {
+ JITDUMP("Finally for EH#%u encloses handler EH#%u; skipping.\n", XTnum, exampleEnclosedHandlerRegion);
+ continue;
+ }
+
+ // Look at blocks involved.
+ BasicBlock* const firstBlock = HBtab->ebdHndBeg;
+ BasicBlock* const lastBlock = HBtab->ebdHndLast;
+ assert(firstBlock != nullptr);
+ assert(lastBlock != nullptr);
+ BasicBlock* nextBlock = lastBlock->bbNext;
+ unsigned regionBBCount = 0;
+ unsigned regionStmtCount = 0;
+ bool hasFinallyRet = false;
+ bool isAllRare = true;
+ bool hasSwitch = false;
+
+ for (const BasicBlock* block = firstBlock; block != nextBlock; block = block->bbNext)
+ {
+ if (block->bbJumpKind == BBJ_SWITCH)
+ {
+ hasSwitch = true;
+ break;
+ }
+
+ regionBBCount++;
+
+ // Should we compute statement cost here, or is it
+ // premature...? For now just count statements I guess.
+ for (GenTreeStmt* stmt = block->firstStmt(); stmt != nullptr; stmt = stmt->gtNextStmt)
+ {
+ regionStmtCount++;
+ }
+
+ hasFinallyRet = hasFinallyRet || (block->bbJumpKind == BBJ_EHFINALLYRET);
+ isAllRare = isAllRare && block->isRunRarely();
+ }
+
+ // Skip cloning if the finally has a switch.
+ if (hasSwitch)
+ {
+ JITDUMP("Finally in EH#%u has a switch; skipping.\n", XTnum);
+ continue;
+ }
+
+ // Skip cloning if the finally must throw.
+ if (!hasFinallyRet)
+ {
+ JITDUMP("Finally in EH#%u does not return; skipping.\n", XTnum);
+ continue;
+ }
+
+ // Skip cloning if the finally is rarely run code.
+ if (isAllRare)
+ {
+ JITDUMP("Finally in EH#%u is run rarely; skipping.\n", XTnum);
+ continue;
+ }
+
+ // Empirical studies from CoreCLR and CoreFX show that less
+ // that 1% of finally regions have more than 15
+ // statements. So, to avoid potentially excessive code growth,
+ // only clone finallys that have 15 or fewer statements.
+ const unsigned stmtCountLimit = 15;
+ if (regionStmtCount > stmtCountLimit)
+ {
+ JITDUMP("Finally in EH#%u has %u statements, limit is %u; skipping.\n", XTnum, regionStmtCount,
+ stmtCountLimit);
+ continue;
+ }
+
+ JITDUMP("EH#%u is a candidate for finally cloning:"
+ " %u blocks, %u statements\n",
+ XTnum, regionBBCount, regionStmtCount);
+
+ // Walk the try region backwards looking for the last block
+ // that transfers control to a callfinally.
+ BasicBlock* const firstTryBlock = HBtab->ebdTryBeg;
+ BasicBlock* const lastTryBlock = HBtab->ebdTryLast;
+ assert(firstTryBlock->getTryIndex() == XTnum);
+ assert(lastTryBlock->getTryIndex() == XTnum);
+ BasicBlock* const beforeTryBlock = firstTryBlock->bbPrev;
+
+ BasicBlock* normalCallFinallyBlock = nullptr;
+ BasicBlock* normalCallFinallyReturn = nullptr;
+ BasicBlock* cloneInsertAfter = HBtab->ebdTryLast;
+ bool tryToRelocateCallFinally = false;
+
+ for (BasicBlock* block = lastTryBlock; block != beforeTryBlock; block = block->bbPrev)
+ {
+#if FEATURE_EH_CALLFINALLY_THUNKS
+ // Look for blocks that are always jumps to a call finally
+ // pair that targets our finally.
+ if (block->bbJumpKind != BBJ_ALWAYS)
+ {
+ continue;
+ }
+
+ BasicBlock* const jumpDest = block->bbJumpDest;
+
+ if (!jumpDest->isBBCallAlwaysPair() || (jumpDest->bbJumpDest != firstBlock))
+ {
+ continue;
+ }
+#else
+ // Look for call finally pair directly within the try
+ if (!block->isBBCallAlwaysPair() || (block->bbJumpDest != firstBlock))
+ {
+ continue;
+ }
+
+ BasicBlock* const jumpDest = block;
+#endif // FEATURE_EH_CALLFINALLY_THUNKS
+
+ // Found our block.
+ BasicBlock* const finallyReturnBlock = jumpDest->bbNext;
+ BasicBlock* const postTryFinallyBlock = finallyReturnBlock->bbJumpDest;
+
+ normalCallFinallyBlock = jumpDest;
+ normalCallFinallyReturn = postTryFinallyBlock;
+
+#if FEATURE_EH_CALLFINALLY_THUNKS
+ // When there are callfinally thunks, we don't expect to see the
+ // callfinally within a handler region either.
+ assert(!jumpDest->hasHndIndex());
+
+ // Update the clone insertion point to just after the
+ // call always pair.
+ cloneInsertAfter = finallyReturnBlock;
+
+ // We will consider moving the callfinally so we can fall
+ // through from the try into the clone.
+ tryToRelocateCallFinally = true;
+
+ JITDUMP("Chose path to clone: try block BB%02u jumps to callfinally at BB%02u;"
+ " the call returns to BB%02u which jumps to BB%02u\n",
+ block->bbNum, jumpDest->bbNum, finallyReturnBlock->bbNum, postTryFinallyBlock->bbNum);
+#else
+ JITDUMP("Chose path to clone: try block BB%02u is a callfinally;"
+ " the call returns to BB%02u which jumps to BB%02u\n",
+ block->bbNum, finallyReturnBlock->bbNum, postTryFinallyBlock->bbNum);
+#endif // FEATURE_EH_CALLFINALLY_THUNKS
+
+ break;
+ }
+
+ // If there is no call to the finally, don't clone.
+ if (normalCallFinallyBlock == nullptr)
+ {
+ JITDUMP("EH#%u: no calls from the try to the finally, skipping.\n", XTnum);
+ continue;
+ }
+
+ JITDUMP("Will update callfinally block BB%02u to jump to the clone;"
+ " clone will jump to BB%02u\n",
+ normalCallFinallyBlock->bbNum, normalCallFinallyReturn->bbNum);
+
+ // If there are multiple callfinallys and we're in the
+ // callfinally thunk model, all the callfinallys are placed
+ // just outside the try region. We'd like our chosen
+ // callfinally to come first after the try, so we can fall out of the try
+ // into the clone.
+ BasicBlock* firstCallFinallyRangeBlock = nullptr;
+ BasicBlock* endCallFinallyRangeBlock = nullptr;
+ ehGetCallFinallyBlockRange(XTnum, &firstCallFinallyRangeBlock, &endCallFinallyRangeBlock);
+
+ if (tryToRelocateCallFinally)
+ {
+ BasicBlock* firstCallFinallyBlock = nullptr;
+
+ for (BasicBlock* block = firstCallFinallyRangeBlock; block != endCallFinallyRangeBlock;
+ block = block->bbNext)
+ {
+ if (block->isBBCallAlwaysPair())
+ {
+ if (block->bbJumpDest == firstBlock)
+ {
+ firstCallFinallyBlock = block;
+ break;
+ }
+ }
+ }
+
+ // We better have found at least one call finally.
+ assert(firstCallFinallyBlock != nullptr);
+
+ // If there is more than one callfinally, move the one we are
+ // going to retarget to be first in the callfinally range.
+ if (firstCallFinallyBlock != normalCallFinallyBlock)
+ {
+ JITDUMP("Moving callfinally BB%02u to be first in line, before BB%02u\n", normalCallFinallyBlock->bbNum,
+ firstCallFinallyBlock->bbNum);
+
+ BasicBlock* const firstToMove = normalCallFinallyBlock;
+ BasicBlock* const lastToMove = normalCallFinallyBlock->bbNext;
+ BasicBlock* const placeToMoveAfter = firstCallFinallyBlock->bbPrev;
+
+ fgUnlinkRange(firstToMove, lastToMove);
+ fgMoveBlocksAfter(firstToMove, lastToMove, placeToMoveAfter);
+
+#ifdef DEBUG
+ // Sanity checks
+ fgDebugCheckBBlist(false, false);
+ fgVerifyHandlerTab();
+#endif // DEBUG
+
+ assert(nextBlock == lastBlock->bbNext);
+
+ // Update where the callfinally range begins, since we might
+ // have altered this with callfinally rearrangement, and/or
+ // the range begin might have been pretty loose to begin with.
+ firstCallFinallyRangeBlock = normalCallFinallyBlock;
+ }
+ }
+
+ // Clone the finally and retarget the normal return path and
+ // any other path that happens to share that same return
+ // point. For instance a construct like:
+ //
+ // try { } catch { } finally { }
+ //
+ // will have two call finally blocks, one for the normal exit
+ // from the try, and the the other for the exit from the
+ // catch. They'll both pass the same return point which is the
+ // statement after the finally, so they can share the clone.
+ //
+ // Clone the finally body, and splice it into the flow graph
+ // within in the parent region of the try.
+ const unsigned finallyTryIndex = firstBlock->bbTryIndex;
+ BasicBlock* insertAfter = nullptr;
+ BlockToBlockMap blockMap(getAllocator());
+ bool clonedOk = true;
+ unsigned cloneBBCount = 0;
+
+ for (BasicBlock* block = firstBlock; block != nextBlock; block = block->bbNext)
+ {
+ BasicBlock* newBlock;
+
+ if (block == firstBlock)
+ {
+ // Put first cloned finally block into the approprate
+ // region, somewhere within or after the range of
+ // callfinallys, depending on the EH implementation.
+ const unsigned hndIndex = 0;
+ BasicBlock* const nearBlk = cloneInsertAfter;
+ newBlock = fgNewBBinRegion(block->bbJumpKind, finallyTryIndex, hndIndex, nearBlk);
+
+ // If the clone ends up just after the finally, adjust
+ // the stopping point for finally traversal.
+ if (newBlock->bbNext == nextBlock)
+ {
+ assert(newBlock->bbPrev == lastBlock);
+ nextBlock = newBlock;
+ }
+ }
+ else
+ {
+ // Put subsequent blocks in the same region...
+ const bool extendRegion = true;
+ newBlock = fgNewBBafter(block->bbJumpKind, insertAfter, extendRegion);
+ }
+
+ cloneBBCount++;
+ assert(cloneBBCount <= regionBBCount);
+
+ insertAfter = newBlock;
+ blockMap.Set(block, newBlock);
+
+ clonedOk = BasicBlock::CloneBlockState(this, newBlock, block);
+
+ if (!clonedOk)
+ {
+ break;
+ }
+
+ // Update block flags. Note a block can be both first and last.
+ if (block == firstBlock)
+ {
+ // Mark the block as the start of the cloned finally.
+ newBlock->bbFlags |= BBF_CLONED_FINALLY_BEGIN;
+ }
+
+ if (block == lastBlock)
+ {
+ // Mark the block as the end of the cloned finally.
+ newBlock->bbFlags |= BBF_CLONED_FINALLY_END;
+ }
+
+ // Make sure clone block state hasn't munged the try region.
+ assert(newBlock->bbTryIndex == finallyTryIndex);
+
+ // Cloned handler block is no longer within the handler.
+ newBlock->clearHndIndex();
+
+ // Jump dests are set in a post-pass; make sure CloneBlockState hasn't tried to set them.
+ assert(newBlock->bbJumpDest == nullptr);
+ }
+
+ if (!clonedOk)
+ {
+ // TODO: cleanup the partial clone?
+ JITDUMP("Unable to clone the finally; skipping.\n");
+ continue;
+ }
+
+ // We should have cloned all the finally region blocks.
+ assert(cloneBBCount == regionBBCount);
+
+ JITDUMP("Cloned finally blocks are: BB%2u ... BB%2u\n", blockMap[firstBlock]->bbNum,
+ blockMap[lastBlock]->bbNum);
+
+ // Redirect redirect any branches within the newly-cloned
+ // finally, and any finally returns to jump to the return
+ // point.
+ for (BasicBlock* block = firstBlock; block != nextBlock; block = block->bbNext)
+ {
+ BasicBlock* newBlock = blockMap[block];
+
+ if (block->bbJumpKind == BBJ_EHFINALLYRET)
+ {
+ GenTreeStmt* finallyRet = newBlock->lastStmt();
+ GenTreePtr finallyRetExpr = finallyRet->gtStmtExpr;
+ assert(finallyRetExpr->gtOper == GT_RETFILT);
+ fgRemoveStmt(newBlock, finallyRet);
+ newBlock->bbJumpKind = BBJ_ALWAYS;
+ newBlock->bbJumpDest = normalCallFinallyReturn;
+
+ fgAddRefPred(normalCallFinallyReturn, newBlock);
+ }
+ else
+ {
+ optCopyBlkDest(block, newBlock);
+ optRedirectBlock(newBlock, &blockMap);
+ }
+ }
+
+ // Modify the targeting call finallys to branch to the cloned
+ // finally. Make a note if we see some calls that can't be
+ // retargeted (since they want to return to other places).
+ BasicBlock* const firstCloneBlock = blockMap[firstBlock];
+ bool retargetedAllCalls = true;
+ BasicBlock* currentBlock = firstCallFinallyRangeBlock;
+
+ while (currentBlock != endCallFinallyRangeBlock)
+ {
+ BasicBlock* nextBlockToScan = currentBlock->bbNext;
+
+ if (currentBlock->isBBCallAlwaysPair())
+ {
+ if (currentBlock->bbJumpDest == firstBlock)
+ {
+ BasicBlock* const leaveBlock = currentBlock->bbNext;
+ BasicBlock* const postTryFinallyBlock = leaveBlock->bbJumpDest;
+
+ // Note we must retarget all callfinallies that have this
+ // continuation, or we can't clean up the continuation
+ // block properly below, since it will be reachable both
+ // by the cloned finally and by the called finally.
+ if (postTryFinallyBlock == normalCallFinallyReturn)
+ {
+ // This call returns to the expected spot, so
+ // retarget it to branch to the clone.
+ currentBlock->bbJumpDest = firstCloneBlock;
+ currentBlock->bbJumpKind = BBJ_ALWAYS;
+
+ // Ref count updates.
+ fgAddRefPred(firstCloneBlock, currentBlock);
+ // fgRemoveRefPred(firstBlock, currentBlock);
+
+ // Delete the leave block, which should be marked as
+ // keep always.
+ assert((leaveBlock->bbFlags & BBF_KEEP_BBJ_ALWAYS) != 0);
+ nextBlock = leaveBlock->bbNext;
+
+ leaveBlock->bbFlags &= ~BBF_KEEP_BBJ_ALWAYS;
+ fgRemoveBlock(leaveBlock, true);
+
+ // Make sure iteration isn't going off the deep end.
+ assert(leaveBlock != endCallFinallyRangeBlock);
+ }
+ else
+ {
+ // We can't retarget this call since it
+ // returns somewhere else.
+ retargetedAllCalls = false;
+ }
+ }
+ }
+
+ currentBlock = nextBlockToScan;
+ }
+
+ // If we retargeted all calls, modify EH descriptor to be
+ // try-fault instead of try-finally, and then non-cloned
+ // finally catch type to be fault.
+ if (retargetedAllCalls)
+ {
+ JITDUMP("All callfinallys retargeted; changing finally to fault.\n");
+ HBtab->ebdHandlerType = EH_HANDLER_FAULT_WAS_FINALLY;
+ firstBlock->bbCatchTyp = BBCT_FAULT;
+ }
+ else
+ {
+ JITDUMP("Some callfinallys *not* retargeted, so region must remain as a finally.\n");
+ }
+
+ // Modify first block of cloned finally to be a "normal" block.
+ BasicBlock* firstClonedBlock = blockMap[firstBlock];
+ firstClonedBlock->bbCatchTyp = BBCT_NONE;
+
+ // Cleanup the contination
+ fgCleanupContinuation(normalCallFinallyReturn);
+
+ // Todo -- mark cloned blocks as a cloned finally....
+
+ // Done!
+ JITDUMP("\nDone with EH#%u\n\n", XTnum);
+ cloneCount++;
+ }
+
+ if (cloneCount > 0)
+ {
+ JITDUMP("fgCloneFinally() cloned %u finally handlers\n", cloneCount);
+ fgOptimizedFinally = true;
+
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("\n*************** After fgCloneFinally()\n");
+ fgDispBasicBlocks();
+ fgDispHandlerTab();
+ printf("\n");
+ }
+
+ fgVerifyHandlerTab();
+ fgDebugCheckBBlist(false, false);
+ fgDebugCheckTryFinallyExits();
+
+#endif // DEBUG
+ }
+}
+
+#ifdef DEBUG
+
+//------------------------------------------------------------------------
+// fgDebugCheckTryFinallyExits: validate normal flow from try-finally
+// or try-fault-was-finally.
+//
+// Notes:
+//
+// Normal control flow exiting the try block of a try-finally must
+// pass through the finally. This checker attempts to verify that by
+// looking at the control flow graph.
+//
+// Each path that exits the try of a try-finally (including try-faults
+// that were optimized into try-finallys by fgCloneFinally) should
+// thus either execute a callfinally to the associated finally or else
+// jump to a block with the BBF_CLONED_FINALLY_BEGIN flag set.
+//
+// Depending on when this check is done, there may also be an empty
+// block along the path.
+//
+// Depending on the model for invoking finallys, the callfinallies may
+// lie within the try region (callfinally thunks) or in the enclosing
+// region.
+
+void Compiler::fgDebugCheckTryFinallyExits()
+{
+ unsigned XTnum = 0;
+ EHblkDsc* HBtab = compHndBBtab;
+ unsigned cloneCount = 0;
+ bool allTryExitsValid = true;
+ for (; XTnum < compHndBBtabCount; XTnum++, HBtab++)
+ {
+ const EHHandlerType handlerType = HBtab->ebdHandlerType;
+ const bool isFinally = (handlerType == EH_HANDLER_FINALLY);
+ const bool wasFinally = (handlerType == EH_HANDLER_FAULT_WAS_FINALLY);
+
+ // Screen out regions that are or were not finallys.
+ if (!isFinally && !wasFinally)
+ {
+ continue;
+ }
+
+ // Walk blocks of the try, looking for normal control flow to
+ // an ancestor region.
+
+ BasicBlock* const firstTryBlock = HBtab->ebdTryBeg;
+ BasicBlock* const lastTryBlock = HBtab->ebdTryLast;
+ assert(firstTryBlock->getTryIndex() <= XTnum);
+ assert(lastTryBlock->getTryIndex() <= XTnum);
+ BasicBlock* const afterTryBlock = lastTryBlock->bbNext;
+ BasicBlock* const finallyBlock = isFinally ? HBtab->ebdHndBeg : nullptr;
+
+ for (BasicBlock* block = firstTryBlock; block != afterTryBlock; block = block->bbNext)
+ {
+ // Only check the directly contained blocks.
+ assert(block->hasTryIndex());
+
+ if (block->getTryIndex() != XTnum)
+ {
+ continue;
+ }
+
+ // Look at each of the normal control flow possibilities.
+ const unsigned numSuccs = block->NumSucc();
+
+ for (unsigned i = 0; i < numSuccs; i++)
+ {
+ BasicBlock* const succBlock = block->GetSucc(i);
+
+ if (succBlock->hasTryIndex() && succBlock->getTryIndex() <= XTnum)
+ {
+ // Successor does not exit this try region.
+ continue;
+ }
+
+#if FEATURE_EH_CALLFINALLY_THUNKS
+
+ // When there are callfinally thunks, callfinallies
+ // logically "belong" to a child region and the exit
+ // path validity will be checked when looking at the
+ // try blocks in that region.
+ if (block->bbJumpKind == BBJ_CALLFINALLY)
+ {
+ continue;
+ }
+
+#endif // FEATURE_EH_CALLFINALLY_THUNKS
+
+ // Now we know block lies directly within the try of a
+ // try-finally, and succBlock is in an enclosing
+ // region (possibly the method region). So this path
+ // represents flow out of the try and should be
+ // checked.
+ //
+ // There are various ways control can properly leave a
+ // try-finally (or try-fault-was-finally):
+ //
+ // (a1) via a jump to a callfinally (only for finallys, only for call finally thunks)
+ // (a2) via a callfinally (only for finallys, only for !call finally thunks)
+ // (b) via a jump to a begin finally clone block
+ // (c) via a jump to an empty block to (b)
+ // (d) via a fallthrough to an empty block to (b)
+ // (e) via the always half of a callfinally pair
+ // (f) via an always jump clonefinally exit
+ bool isCallToFinally = false;
+
+#if FEATURE_EH_CALLFINALLY_THUNKS
+ if (succBlock->bbJumpKind == BBJ_CALLFINALLY)
+ {
+ // case (a1)
+ isCallToFinally = isFinally && (succBlock->bbJumpDest == finallyBlock);
+ }
+#else
+ if (block->bbJumpKind == BBJ_CALLFINALLY)
+ {
+ // case (a2)
+ isCallToFinally = isFinally && (block->bbJumpDest == finallyBlock);
+ }
+#endif // FEATURE_EH_CALLFINALLY_THUNKS
+
+ bool isJumpToClonedFinally = false;
+
+ if (succBlock->bbFlags & BBF_CLONED_FINALLY_BEGIN)
+ {
+ // case (b)
+ isJumpToClonedFinally = true;
+ }
+ else if (succBlock->bbJumpKind == BBJ_ALWAYS)
+ {
+ if (succBlock->isEmpty())
+ {
+ // case (c)
+ BasicBlock* const succSuccBlock = succBlock->bbJumpDest;
+
+ if (succSuccBlock->bbFlags & BBF_CLONED_FINALLY_BEGIN)
+ {
+ isJumpToClonedFinally = true;
+ }
+ }
+ }
+ else if (succBlock->bbJumpKind == BBJ_NONE)
+ {
+ if (succBlock->isEmpty())
+ {
+ BasicBlock* const succSuccBlock = succBlock->bbNext;
+
+ // case (d)
+ if (succSuccBlock->bbFlags & BBF_CLONED_FINALLY_BEGIN)
+ {
+ isJumpToClonedFinally = true;
+ }
+ }
+ }
+
+ bool isReturnFromFinally = false;
+
+ // Case (e). Ideally we'd have something stronger to
+ // check here -- eg that we are returning from a call
+ // to the right finally -- but there are odd cases
+ // like orphaned second halves of callfinally pairs
+ // that we need to tolerate.
+ if (block->bbFlags & BBF_KEEP_BBJ_ALWAYS)
+ {
+ isReturnFromFinally = true;
+ }
+
+ // Case (f)
+ if (block->bbFlags & BBF_CLONED_FINALLY_END)
+ {
+ isReturnFromFinally = true;
+ }
+
+ const bool thisExitValid = isCallToFinally || isJumpToClonedFinally || isReturnFromFinally;
+
+ if (!thisExitValid)
+ {
+ JITDUMP("fgCheckTryFinallyExitS: EH#%u exit via BB%02u -> BB%02u is invalid\n", XTnum, block->bbNum,
+ succBlock->bbNum);
+ }
+
+ allTryExitsValid = allTryExitsValid & thisExitValid;
+ }
+ }
+ }
+
+ if (!allTryExitsValid)
+ {
+ JITDUMP("fgCheckTryFinallyExits: method contains invalid try exit paths\n");
+ assert(allTryExitsValid);
+ }
+}
+
+#endif // DEBUG
+
+//------------------------------------------------------------------------
+// fgCleanupContinuation: cleanup a finally continuation after a
+// finally is removed or converted to normal control flow.
+//
+// Notes:
+// The continuation is the block targeted by the second half of
+// a callfinally/always pair.
+//
+// Used by finally cloning, empty try removal, and empty
+// finally removal.
+//
+// BBF_FINALLY_TARGET bbFlag is left unchanged by this method
+// since it cannot be incrementally updated. Proper updates happen
+// when fgUpdateFinallyTargetFlags runs after all finally optimizations.
+
+void Compiler::fgCleanupContinuation(BasicBlock* continuation)
+{
+ // The continuation may be a finalStep block.
+ // It is now a normal block, so clear the special keep
+ // always flag.
+ continuation->bbFlags &= ~BBF_KEEP_BBJ_ALWAYS;
+
+#if !FEATURE_EH_FUNCLETS
+ // Remove the GT_END_LFIN from the continuation,
+ // Note we only expect to see one such statement.
+ bool foundEndLFin = false;
+ for (GenTreeStmt* stmt = continuation->firstStmt(); stmt != nullptr; stmt = stmt->gtNextStmt)
+ {
+ GenTreePtr expr = stmt->gtStmtExpr;
+ if (expr->gtOper == GT_END_LFIN)
+ {
+ assert(!foundEndLFin);
+ fgRemoveStmt(continuation, stmt);
+ foundEndLFin = true;
+ }
+ }
+ assert(foundEndLFin);
+#endif // !FEATURE_EH_FUNCLETS
+}
+
+//------------------------------------------------------------------------
+// fgUpdateFinallyTargetFlags: recompute BBF_FINALLY_TARGET bits for all blocks
+// after finally optimizations have run.
+
+void Compiler::fgUpdateFinallyTargetFlags()
+{
+#if FEATURE_EH_FUNCLETS && defined(_TARGET_ARM_)
+
+ // Any fixup required?
+ if (!fgOptimizedFinally)
+ {
+ JITDUMP("In fgUpdateFinallyTargetFlags - no finally opts, no fixup required\n");
+ return;
+ }
+
+ JITDUMP("In fgUpdateFinallyTargetFlags, updating finally target flag bits\n");
+
+ // Walk all blocks, and reset the target bits.
+ for (BasicBlock* block = fgFirstBB; block != nullptr; block = block->bbNext)
+ {
+ block->bbFlags &= ~BBF_FINALLY_TARGET;
+ }
+
+ // Walk all blocks again, and set the target bits.
+ for (BasicBlock* block = fgFirstBB; block != nullptr; block = block->bbNext)
+ {
+ if (block->isBBCallAlwaysPair())
+ {
+ BasicBlock* const leave = block->bbNext;
+ BasicBlock* const continuation = leave->bbJumpDest;
+
+ if ((continuation->bbFlags & BBF_FINALLY_TARGET) == 0)
+ {
+ JITDUMP("Found callfinally BB%02u; setting finally target bit on BB%02u\n", block->bbNum,
+ continuation->bbNum);
+
+ continuation->bbFlags |= BBF_FINALLY_TARGET;
+ }
+ }
+ }
+#endif // FEATURE_EH_FUNCLETS && defined(_TARGET_ARM_)
+}
+
+// FatCalliTransformer transforms calli that can use fat function pointer.
+// Fat function pointer is pointer with the second least significant bit set,
+// if the bit is set, the pointer (after clearing the bit) actually points to
+// a tuple <method pointer, instantiation argument pointer> where
+// instantiationArgument is a hidden first argument required by method pointer.
+//
+// Fat pointers are used in CoreRT as a replacement for instantiating stubs,
+// because CoreRT can't generate stubs in runtime.
+//
+// Jit is responsible for the checking the bit, do the regular call if it is not set
+// or load hidden argument, fix the pointer and make a call with the fixed pointer and
+// the instantiation argument.
+//
+// before:
+// current block
+// {
+// previous statements
+// transforming statement
+// {
+// call with GTF_CALL_M_FAT_POINTER_CHECK flag set in function ptr
+// }
+// subsequent statements
+// }
+//
+// after:
+// current block
+// {
+// previous statements
+// } BBJ_NONE check block
+// check block
+// {
+// jump to else if function ptr has GTF_CALL_M_FAT_POINTER_CHECK set.
+// } BBJ_COND then block, else block
+// then block
+// {
+// original statement
+// } BBJ_ALWAYS remainder block
+// else block
+// {
+// unset GTF_CALL_M_FAT_POINTER_CHECK
+// load actual function pointer
+// load instantiation argument
+// create newArgList = (instantiation argument, original argList)
+// call (actual function pointer, newArgList)
+// } BBJ_NONE remainder block
+// remainder block
+// {
+// subsequent statements
+// }
+//
+class FatCalliTransformer
+{
+public:
+ FatCalliTransformer(Compiler* compiler) : compiler(compiler)
+ {
+ }
+
+ //------------------------------------------------------------------------
+ // Run: run transformation for each block.
+ //
+ void Run()
+ {
+ for (BasicBlock* block = compiler->fgFirstBB; block != nullptr; block = block->bbNext)
+ {
+ TransformBlock(block);
+ }
+ }
+
+private:
+ //------------------------------------------------------------------------
+ // TransformBlock: look through statements and transform statements with fat pointer calls.
+ //
+ void TransformBlock(BasicBlock* block)
+ {
+ for (GenTreeStmt* stmt = block->firstStmt(); stmt != nullptr; stmt = stmt->gtNextStmt)
+ {
+ if (ContainsFatCalli(stmt))
+ {
+ StatementTransformer stmtTransformer(compiler, block, stmt);
+ stmtTransformer.Run();
+ }
+ }
+ }
+
+ //------------------------------------------------------------------------
+ // ContainsFatCalli: check does this statement contain fat pointer call.
+ //
+ // Checks fatPointerCandidate in form of call() or lclVar = call().
+ //
+ // Return Value:
+ // true if contains, false otherwise.
+ //
+ bool ContainsFatCalli(GenTreeStmt* stmt)
+ {
+ GenTreePtr fatPointerCandidate = stmt->gtStmtExpr;
+ if (fatPointerCandidate->OperIsAssignment())
+ {
+ fatPointerCandidate = fatPointerCandidate->gtGetOp2();
+ }
+ return fatPointerCandidate->IsCall() && fatPointerCandidate->AsCall()->IsFatPointerCandidate();
+ }
+
+ class StatementTransformer
+ {
+ public:
+ StatementTransformer(Compiler* compiler, BasicBlock* block, GenTreeStmt* stmt)
+ : compiler(compiler), currBlock(block), stmt(stmt)
+ {
+ remainderBlock = nullptr;
+ checkBlock = nullptr;
+ thenBlock = nullptr;
+ elseBlock = nullptr;
+ doesReturnValue = stmt->gtStmtExpr->OperIsAssignment();
+ origCall = GetCall(stmt);
+ fptrAddress = origCall->gtCallAddr;
+ pointerType = fptrAddress->TypeGet();
+ }
+
+ //------------------------------------------------------------------------
+ // Run: transform the statement as described above.
+ //
+ void Run()
+ {
+ ClearFatFlag();
+ CreateRemainder();
+ CreateCheck();
+ CreateThen();
+ CreateElse();
+
+ RemoveOldStatement();
+ SetWeights();
+ ChainFlow();
+ }
+
+ private:
+ //------------------------------------------------------------------------
+ // GetCall: find a call in a statement.
+ //
+ // Arguments:
+ // callStmt - the statement with the call inside.
+ //
+ // Return Value:
+ // call tree node pointer.
+ GenTreeCall* GetCall(GenTreeStmt* callStmt)
+ {
+ GenTreePtr tree = callStmt->gtStmtExpr;
+ GenTreeCall* call = nullptr;
+ if (doesReturnValue)
+ {
+ assert(tree->OperIsAssignment());
+ call = tree->gtGetOp2()->AsCall();
+ }
+ else
+ {
+ call = tree->AsCall(); // call with void return type.
+ }
+ return call;
+ }
+
+ //------------------------------------------------------------------------
+ // ClearFatFlag: clear fat pointer candidate flag from the original call.
+ //
+ void ClearFatFlag()
+ {
+ origCall->ClearFatPointerCandidate();
+ }
+
+ //------------------------------------------------------------------------
+ // CreateRemainder: split current block at the fat call stmt and
+ // insert statements after the call into remainderBlock.
+ //
+ void CreateRemainder()
+ {
+ remainderBlock = compiler->fgSplitBlockAfterStatement(currBlock, stmt);
+ unsigned propagateFlags = currBlock->bbFlags & BBF_GC_SAFE_POINT;
+ remainderBlock->bbFlags |= BBF_JMP_TARGET | BBF_HAS_LABEL | propagateFlags;
+ }
+
+ //------------------------------------------------------------------------
+ // CreateCheck: create check block, that checks fat pointer bit set.
+ //
+ void CreateCheck()
+ {
+ checkBlock = CreateAndInsertBasicBlock(BBJ_COND, currBlock);
+ GenTreePtr fatPointerMask = new (compiler, GT_CNS_INT) GenTreeIntCon(TYP_I_IMPL, FAT_POINTER_MASK);
+ GenTreePtr fptrAddressCopy = compiler->gtCloneExpr(fptrAddress);
+ GenTreePtr fatPointerAnd = compiler->gtNewOperNode(GT_AND, TYP_I_IMPL, fptrAddressCopy, fatPointerMask);
+ GenTreePtr zero = new (compiler, GT_CNS_INT) GenTreeIntCon(TYP_I_IMPL, 0);
+ GenTreePtr fatPointerCmp = compiler->gtNewOperNode(GT_NE, TYP_INT, fatPointerAnd, zero);
+ GenTreePtr jmpTree = compiler->gtNewOperNode(GT_JTRUE, TYP_VOID, fatPointerCmp);
+ GenTreePtr jmpStmt = compiler->fgNewStmtFromTree(jmpTree, stmt->gtStmt.gtStmtILoffsx);
+ compiler->fgInsertStmtAtEnd(checkBlock, jmpStmt);
+ }
+
+ //------------------------------------------------------------------------
+ // CreateCheck: create then block, that is executed if call address is not fat pointer.
+ //
+ void CreateThen()
+ {
+ thenBlock = CreateAndInsertBasicBlock(BBJ_ALWAYS, checkBlock);
+ GenTreePtr nonFatCallStmt = compiler->gtCloneExpr(stmt)->AsStmt();
+ compiler->fgInsertStmtAtEnd(thenBlock, nonFatCallStmt);
+ }
+
+ //------------------------------------------------------------------------
+ // CreateCheck: create else block, that is executed if call address is fat pointer.
+ //
+ void CreateElse()
+ {
+ elseBlock = CreateAndInsertBasicBlock(BBJ_NONE, thenBlock);
+
+ GenTreePtr fixedFptrAddress = GetFixedFptrAddress();
+ GenTreePtr actualCallAddress = compiler->gtNewOperNode(GT_IND, pointerType, fixedFptrAddress);
+ GenTreePtr hiddenArgument = GetHiddenArgument(fixedFptrAddress);
+
+ GenTreeStmt* fatStmt = CreateFatCallStmt(actualCallAddress, hiddenArgument);
+ compiler->fgInsertStmtAtEnd(elseBlock, fatStmt);
+ }
+
+ //------------------------------------------------------------------------
+ // CreateAndInsertBasicBlock: ask compiler to create new basic block.
+ // and insert in into the basic block list.
+ //
+ // Arguments:
+ // jumpKind - jump kind for the new basic block
+ // insertAfter - basic block, after which compiler has to insert the new one.
+ //
+ // Return Value:
+ // new basic block.
+ BasicBlock* CreateAndInsertBasicBlock(BBjumpKinds jumpKind, BasicBlock* insertAfter)
+ {
+ BasicBlock* block = compiler->fgNewBBafter(jumpKind, insertAfter, true);
+ if ((insertAfter->bbFlags & BBF_INTERNAL) == 0)
+ {
+ block->bbFlags &= ~BBF_INTERNAL;
+ block->bbFlags |= BBF_IMPORTED;
+ }
+ return block;
+ }
+
+ //------------------------------------------------------------------------
+ // GetFixedFptrAddress: clear fat pointer bit from fat pointer address.
+ //
+ // Return Value:
+ // address without fat pointer bit set.
+ GenTreePtr GetFixedFptrAddress()
+ {
+ GenTreePtr fptrAddressCopy = compiler->gtCloneExpr(fptrAddress);
+ GenTreePtr fatPointerMask = new (compiler, GT_CNS_INT) GenTreeIntCon(TYP_I_IMPL, FAT_POINTER_MASK);
+ return compiler->gtNewOperNode(GT_XOR, pointerType, fptrAddressCopy, fatPointerMask);
+ }
+
+ //------------------------------------------------------------------------
+ // GetHiddenArgument: load hidden argument.
+ //
+ // Arguments:
+ // fixedFptrAddress - pointer to the tuple <methodPointer, instantiationArgumentPointer>
+ //
+ // Return Value:
+ // loaded hidden argument.
+ GenTreePtr GetHiddenArgument(GenTreePtr fixedFptrAddress)
+ {
+ GenTreePtr fixedFptrAddressCopy = compiler->gtCloneExpr(fixedFptrAddress);
+ GenTreePtr wordSize = new (compiler, GT_CNS_INT) GenTreeIntCon(TYP_I_IMPL, genTypeSize(TYP_I_IMPL));
+ GenTreePtr hiddenArgumentPtrPtr =
+ compiler->gtNewOperNode(GT_ADD, pointerType, fixedFptrAddressCopy, wordSize);
+ GenTreePtr hiddenArgumentPtr = compiler->gtNewOperNode(GT_IND, pointerType, hiddenArgumentPtrPtr);
+ return compiler->gtNewOperNode(GT_IND, fixedFptrAddressCopy->TypeGet(), hiddenArgumentPtr);
+ }
+
+ //------------------------------------------------------------------------
+ // CreateFatCallStmt: create call with fixed call address and hidden argument in the args list.
+ //
+ // Arguments:
+ // actualCallAddress - fixed call address
+ // hiddenArgument - loaded hidden argument
+ //
+ // Return Value:
+ // created call node.
+ GenTreeStmt* CreateFatCallStmt(GenTreePtr actualCallAddress, GenTreePtr hiddenArgument)
+ {
+ GenTreeStmt* fatStmt = compiler->gtCloneExpr(stmt)->AsStmt();
+ GenTreePtr fatTree = fatStmt->gtStmtExpr;
+ GenTreeCall* fatCall = GetCall(fatStmt);
+ fatCall->gtCallAddr = actualCallAddress;
+ GenTreeArgList* args = fatCall->gtCallArgs;
+ args = compiler->gtNewListNode(hiddenArgument, args);
+ fatCall->gtCallArgs = args;
+ return fatStmt;
+ }
+
+ //------------------------------------------------------------------------
+ // RemoveOldStatement: remove original stmt from current block.
+ //
+ void RemoveOldStatement()
+ {
+ compiler->fgRemoveStmt(currBlock, stmt);
+ }
+
+ //------------------------------------------------------------------------
+ // SetWeights: set weights for new blocks.
+ //
+ void SetWeights()
+ {
+ remainderBlock->inheritWeight(currBlock);
+ checkBlock->inheritWeight(currBlock);
+ thenBlock->inheritWeightPercentage(currBlock, HIGH_PROBABILITY);
+ elseBlock->inheritWeightPercentage(currBlock, 100 - HIGH_PROBABILITY);
+ }
+
+ //------------------------------------------------------------------------
+ // ChainFlow: link new blocks into correct cfg.
+ //
+ void ChainFlow()
+ {
+ assert(!compiler->fgComputePredsDone);
+ checkBlock->bbJumpDest = elseBlock;
+ thenBlock->bbJumpDest = remainderBlock;
+ }
+
+ Compiler* compiler;
+ BasicBlock* currBlock;
+ BasicBlock* remainderBlock;
+ BasicBlock* checkBlock;
+ BasicBlock* thenBlock;
+ BasicBlock* elseBlock;
+ GenTreeStmt* stmt;
+ GenTreeCall* origCall;
+ GenTreePtr fptrAddress;
+ var_types pointerType;
+ bool doesReturnValue;
+
+ const int FAT_POINTER_MASK = 0x2;
+ const int HIGH_PROBABILITY = 80;
+ };
+
+ Compiler* compiler;
+};
+
+#ifdef DEBUG
+
+//------------------------------------------------------------------------
+// fgDebugCheckFatPointerCandidates: callback to make sure there are no more GTF_CALL_M_FAT_POINTER_CHECK calls.
+//
+Compiler::fgWalkResult Compiler::fgDebugCheckFatPointerCandidates(GenTreePtr* pTree, fgWalkData* data)
+{
+ GenTreePtr tree = *pTree;
+ if (tree->IsCall())
+ {
+ assert(!tree->AsCall()->IsFatPointerCandidate());
+ }
+ return WALK_CONTINUE;
+}
+
+//------------------------------------------------------------------------
+// CheckNoFatPointerCandidatesLeft: walk through blocks and check that there are no fat pointer candidates left.
+//
+void Compiler::CheckNoFatPointerCandidatesLeft()
+{
+ assert(!doesMethodHaveFatPointer());
+ for (BasicBlock* block = fgFirstBB; block != nullptr; block = block->bbNext)
+ {
+ for (GenTreeStmt* stmt = fgFirstBB->firstStmt(); stmt != nullptr; stmt = stmt->gtNextStmt)
+ {
+ fgWalkTreePre(&stmt->gtStmtExpr, fgDebugCheckFatPointerCandidates);
+ }
+ }
+}
+#endif
+
+//------------------------------------------------------------------------
+// fgTransformFatCalli: find and transform fat calls.
+//
+void Compiler::fgTransformFatCalli()
+{
+ assert(IsTargetAbi(CORINFO_CORERT_ABI));
+ FatCalliTransformer fatCalliTransformer(this);
+ fatCalliTransformer.Run();
+ clearMethodHasFatPointer();
+#ifdef DEBUG
+ CheckNoFatPointerCandidatesLeft();
+#endif
+}
diff --git a/src/jit/gcencode.cpp b/src/jit/gcencode.cpp
index 128fc4addb..dcca19ebe8 100644
--- a/src/jit/gcencode.cpp
+++ b/src/jit/gcencode.cpp
@@ -3778,8 +3778,10 @@ void GCInfo::gcInfoBlockHdrSave(GcInfoEncoder* gcInfoEncoder, unsigned methodSiz
}
#endif // FEATURE_EH_FUNCLETS
+#if FEATURE_FIXED_OUT_ARGS
// outgoing stack area size
gcInfoEncoderWithLog->SetSizeOfStackOutgoingAndScratchArea(compiler->lvaOutgoingArgSpaceSize);
+#endif // FEATURE_FIXED_OUT_ARGS
#if DISPLAY_SIZES
@@ -3941,13 +3943,6 @@ void GCInfo::gcMakeRegPtrTable(GcInfoEncoder* gcInfoEncoder,
// If we haven't continued to the next variable, we should report this as an untracked local.
CLANG_FORMAT_COMMENT_ANCHOR;
-#if DOUBLE_ALIGN
- // For genDoubleAlign(), locals are addressed relative to ESP and
- // arguments are addressed relative to EBP.
-
- if (genDoubleAlign() && varDsc->lvIsParam && !varDsc->lvIsRegArg)
- offset += compiler->codeGen->genTotalFrameSize();
-#endif
GcSlotFlags flags = GC_SLOT_UNTRACKED;
if (varDsc->TypeGet() == TYP_BYREF)
@@ -3998,7 +3993,7 @@ void GCInfo::gcMakeRegPtrTable(GcInfoEncoder* gcInfoEncoder,
// For genDoubleAlign(), locals are addressed relative to ESP and
// arguments are addressed relative to EBP.
- if (genDoubleAlign() && varDsc->lvIsParam && !varDsc->lvIsRegArg)
+ if (compiler->genDoubleAlign() && varDsc->lvIsParam && !varDsc->lvIsRegArg)
offset += compiler->codeGen->genTotalFrameSize();
#endif
GcSlotFlags flags = GC_SLOT_UNTRACKED;
diff --git a/src/jit/gcinfo.cpp b/src/jit/gcinfo.cpp
index b64fd0a174..e2f76f3b13 100644
--- a/src/jit/gcinfo.cpp
+++ b/src/jit/gcinfo.cpp
@@ -265,6 +265,12 @@ GCInfo::WriteBarrierForm GCInfo::gcIsWriteBarrierCandidate(GenTreePtr tgt, GenTr
case GT_STOREIND:
#endif // !LEGACY_BACKEND
case GT_IND: /* Could be the managed heap */
+ if (tgt->TypeGet() == TYP_BYREF)
+ {
+ // Byref values cannot be in managed heap.
+ // This case occurs for Span<T>.
+ return WBF_NoBarrier;
+ }
return gcWriteBarrierFormFromTargetAddress(tgt->gtOp.gtOp1);
case GT_LEA:
diff --git a/src/jit/gentree.cpp b/src/jit/gentree.cpp
index 4a6cc740c6..7af500f877 100644
--- a/src/jit/gentree.cpp
+++ b/src/jit/gentree.cpp
@@ -678,7 +678,7 @@ Compiler::fgWalkResult Compiler::fgWalkTreePreRec(GenTreePtr* pTree, fgWalkData*
if (kind & GTK_SMPOP)
{
- if (tree->gtGetOp2())
+ if (tree->gtGetOp2IfPresent())
{
if (tree->gtOp.gtOp1 != nullptr)
{
@@ -847,12 +847,12 @@ Compiler::fgWalkResult Compiler::fgWalkTreePreRec(GenTreePtr* pTree, fgWalkData*
#ifdef FEATURE_SIMD
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
- result = fgWalkTreePreRec<computeStack>(&tree->gtBoundsChk.gtArrLen, fgWalkData);
+ result = fgWalkTreePreRec<computeStack>(&tree->gtBoundsChk.gtIndex, fgWalkData);
if (result == WALK_ABORT)
{
return result;
}
- result = fgWalkTreePreRec<computeStack>(&tree->gtBoundsChk.gtIndex, fgWalkData);
+ result = fgWalkTreePreRec<computeStack>(&tree->gtBoundsChk.gtArrLen, fgWalkData);
if (result == WALK_ABORT)
{
return result;
@@ -1102,12 +1102,12 @@ Compiler::fgWalkResult Compiler::fgWalkTreePostRec(GenTreePtr* pTree, fgWalkData
#ifdef FEATURE_SIMD
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
- result = fgWalkTreePostRec<computeStack>(&tree->gtBoundsChk.gtArrLen, fgWalkData);
+ result = fgWalkTreePostRec<computeStack>(&tree->gtBoundsChk.gtIndex, fgWalkData);
if (result == WALK_ABORT)
{
return result;
}
- result = fgWalkTreePostRec<computeStack>(&tree->gtBoundsChk.gtIndex, fgWalkData);
+ result = fgWalkTreePostRec<computeStack>(&tree->gtBoundsChk.gtArrLen, fgWalkData);
if (result == WALK_ABORT)
{
return result;
@@ -1301,7 +1301,7 @@ Compiler::fgWalkResult Compiler::fgWalkTreeRec(GenTreePtr* pTree, fgWalkData* fg
}
}
- if (tree->gtGetOp2())
+ if (tree->gtGetOp2IfPresent())
{
result = fgWalkTreeRec<doPreOrder, doPostOrder>(&tree->gtOp.gtOp2, fgWalkData);
if (result == WALK_ABORT)
@@ -1446,12 +1446,12 @@ Compiler::fgWalkResult Compiler::fgWalkTreeRec(GenTreePtr* pTree, fgWalkData* fg
#ifdef FEATURE_SIMD
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
- result = fgWalkTreeRec<doPreOrder, doPostOrder>(&tree->gtBoundsChk.gtArrLen, fgWalkData);
+ result = fgWalkTreeRec<doPreOrder, doPostOrder>(&tree->gtBoundsChk.gtIndex, fgWalkData);
if (result == WALK_ABORT)
{
return result;
}
- result = fgWalkTreeRec<doPreOrder, doPostOrder>(&tree->gtBoundsChk.gtIndex, fgWalkData);
+ result = fgWalkTreeRec<doPreOrder, doPostOrder>(&tree->gtBoundsChk.gtArrLen, fgWalkData);
if (result == WALK_ABORT)
{
return result;
@@ -2378,8 +2378,8 @@ AGAIN:
#ifdef FEATURE_SIMD
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
- return Compare(op1->gtBoundsChk.gtArrLen, op2->gtBoundsChk.gtArrLen) &&
- Compare(op1->gtBoundsChk.gtIndex, op2->gtBoundsChk.gtIndex) &&
+ return Compare(op1->gtBoundsChk.gtIndex, op2->gtBoundsChk.gtIndex) &&
+ Compare(op1->gtBoundsChk.gtArrLen, op2->gtBoundsChk.gtArrLen) &&
(op1->gtBoundsChk.gtThrowKind == op2->gtBoundsChk.gtThrowKind);
case GT_STORE_DYN_BLK:
@@ -2447,7 +2447,7 @@ AGAIN:
if (kind & GTK_SMPOP)
{
- if (tree->gtGetOp2())
+ if (tree->gtGetOp2IfPresent())
{
if (gtHasRef(tree->gtOp.gtOp1, lclNum, defOnly))
{
@@ -2604,11 +2604,11 @@ AGAIN:
#ifdef FEATURE_SIMD
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
- if (gtHasRef(tree->gtBoundsChk.gtArrLen, lclNum, defOnly))
+ if (gtHasRef(tree->gtBoundsChk.gtIndex, lclNum, defOnly))
{
return true;
}
- if (gtHasRef(tree->gtBoundsChk.gtIndex, lclNum, defOnly))
+ if (gtHasRef(tree->gtBoundsChk.gtArrLen, lclNum, defOnly))
{
return true;
}
@@ -2686,6 +2686,8 @@ bool Compiler::gtHasLocalsWithAddrOp(GenTreePtr tree)
return desc.hasAddrTakenLcl;
}
+#ifdef DEBUG
+
/*****************************************************************************
*
* Helper used to compute hash values for trees.
@@ -2701,11 +2703,6 @@ inline unsigned genTreeHashAdd(unsigned old, void* add)
return genTreeHashAdd(old, (unsigned)(size_t)add);
}
-inline unsigned genTreeHashAdd(unsigned old, unsigned add1, unsigned add2)
-{
- return (old + old / 2) ^ add1 ^ add2;
-}
-
/*****************************************************************************
*
* Given an arbitrary expression tree, compute a hash value for it.
@@ -2900,18 +2897,6 @@ AGAIN:
unsigned hsh1 = gtHashValue(op1);
- /* Special case: addition of two values */
-
- if (GenTree::OperIsCommutative(oper))
- {
- unsigned hsh2 = gtHashValue(op2);
-
- /* Produce a hash that allows swapping the operands */
-
- hash = genTreeHashAdd(hash, hsh1, hsh2);
- goto DONE;
- }
-
/* Add op1's hash to the running value and continue with op2 */
hash = genTreeHashAdd(hash, hsh1);
@@ -3001,8 +2986,8 @@ AGAIN:
#ifdef FEATURE_SIMD
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
- hash = genTreeHashAdd(hash, gtHashValue(tree->gtBoundsChk.gtArrLen));
hash = genTreeHashAdd(hash, gtHashValue(tree->gtBoundsChk.gtIndex));
+ hash = genTreeHashAdd(hash, gtHashValue(tree->gtBoundsChk.gtArrLen));
hash = genTreeHashAdd(hash, tree->gtBoundsChk.gtThrowKind);
break;
@@ -3027,6 +3012,8 @@ DONE:
return hash;
}
+#endif // DEBUG
+
/*****************************************************************************
*
* Given an arbitrary expression tree, attempts to find the set of all local variables
@@ -3194,7 +3181,7 @@ AGAIN:
}
}
- if (tree->gtGetOp2())
+ if (tree->gtGetOp2IfPresent())
{
/* It's a binary operator */
if (!lvaLclVarRefsAccum(tree->gtOp.gtOp1, findPtr, refsPtr, &allVars, &trkdVars))
@@ -3265,12 +3252,12 @@ AGAIN:
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
{
- if (!lvaLclVarRefsAccum(tree->gtBoundsChk.gtArrLen, findPtr, refsPtr, &allVars, &trkdVars))
+ if (!lvaLclVarRefsAccum(tree->gtBoundsChk.gtIndex, findPtr, refsPtr, &allVars, &trkdVars))
{
return false;
}
// Otherwise...
- if (!lvaLclVarRefsAccum(tree->gtBoundsChk.gtIndex, findPtr, refsPtr, &allVars, &trkdVars))
+ if (!lvaLclVarRefsAccum(tree->gtBoundsChk.gtArrLen, findPtr, refsPtr, &allVars, &trkdVars))
{
return false;
}
@@ -3375,6 +3362,10 @@ genTreeOps GenTree::ReverseRelop(genTreeOps relop)
GT_GT, // GT_LE
GT_LT, // GT_GE
GT_LE, // GT_GT
+#ifndef LEGACY_BACKEND
+ GT_TEST_NE, // GT_TEST_EQ
+ GT_TEST_EQ, // GT_TEST_NE
+#endif
};
assert(reverseOps[GT_EQ - GT_EQ] == GT_NE);
@@ -3385,6 +3376,11 @@ genTreeOps GenTree::ReverseRelop(genTreeOps relop)
assert(reverseOps[GT_GE - GT_EQ] == GT_LT);
assert(reverseOps[GT_GT - GT_EQ] == GT_LE);
+#ifndef LEGACY_BACKEND
+ assert(reverseOps[GT_TEST_EQ - GT_EQ] == GT_TEST_NE);
+ assert(reverseOps[GT_TEST_NE - GT_EQ] == GT_TEST_EQ);
+#endif
+
assert(OperIsCompare(relop));
assert(relop >= GT_EQ && (unsigned)(relop - GT_EQ) < sizeof(reverseOps));
@@ -3406,6 +3402,10 @@ genTreeOps GenTree::SwapRelop(genTreeOps relop)
GT_GE, // GT_LE
GT_LE, // GT_GE
GT_LT, // GT_GT
+#ifndef LEGACY_BACKEND
+ GT_TEST_EQ, // GT_TEST_EQ
+ GT_TEST_NE, // GT_TEST_NE
+#endif
};
assert(swapOps[GT_EQ - GT_EQ] == GT_EQ);
@@ -3416,6 +3416,11 @@ genTreeOps GenTree::SwapRelop(genTreeOps relop)
assert(swapOps[GT_GE - GT_EQ] == GT_LE);
assert(swapOps[GT_GT - GT_EQ] == GT_LT);
+#ifndef LEGACY_BACKEND
+ assert(swapOps[GT_TEST_EQ - GT_EQ] == GT_TEST_EQ);
+ assert(swapOps[GT_TEST_NE - GT_EQ] == GT_TEST_NE);
+#endif
+
assert(OperIsCompare(relop));
assert(relop >= GT_EQ && (unsigned)(relop - GT_EQ) < sizeof(swapOps));
@@ -4146,7 +4151,7 @@ unsigned Compiler::gtSetEvalOrder(GenTree* tree)
unsigned lvl2; // scratch variable
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
costEx = 0;
costSz = 0;
@@ -5622,17 +5627,17 @@ unsigned Compiler::gtSetEvalOrder(GenTree* tree)
costEx = 4; // cmp reg,reg and jae throw (not taken)
costSz = 7; // jump to cold section
- level = gtSetEvalOrder(tree->gtBoundsChk.gtArrLen);
- costEx += tree->gtBoundsChk.gtArrLen->gtCostEx;
- costSz += tree->gtBoundsChk.gtArrLen->gtCostSz;
+ level = gtSetEvalOrder(tree->gtBoundsChk.gtIndex);
+ costEx += tree->gtBoundsChk.gtIndex->gtCostEx;
+ costSz += tree->gtBoundsChk.gtIndex->gtCostSz;
- lvl2 = gtSetEvalOrder(tree->gtBoundsChk.gtIndex);
+ lvl2 = gtSetEvalOrder(tree->gtBoundsChk.gtArrLen);
if (level < lvl2)
{
level = lvl2;
}
- costEx += tree->gtBoundsChk.gtIndex->gtCostEx;
- costSz += tree->gtBoundsChk.gtIndex->gtCostSz;
+ costEx += tree->gtBoundsChk.gtArrLen->gtCostEx;
+ costSz += tree->gtBoundsChk.gtArrLen->gtCostSz;
break;
@@ -5761,7 +5766,7 @@ void Compiler::gtComputeFPlvls(GenTreePtr tree)
if (kind & GTK_SMPOP)
{
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
/* Check for some special cases */
@@ -5954,16 +5959,16 @@ void Compiler::gtComputeFPlvls(GenTreePtr tree)
break;
case GT_ARR_BOUNDS_CHECK:
- gtComputeFPlvls(tree->gtBoundsChk.gtArrLen);
gtComputeFPlvls(tree->gtBoundsChk.gtIndex);
+ gtComputeFPlvls(tree->gtBoundsChk.gtArrLen);
noway_assert(!isflt);
break;
-#ifdef DEBUG
default:
+#ifdef DEBUG
noway_assert(!"Unhandled special operator in gtComputeFPlvls()");
- break;
#endif
+ break;
}
DONE:
@@ -6134,14 +6139,14 @@ GenTreePtr* GenTree::gtGetChildPointer(GenTreePtr parent)
#ifdef FEATURE_SIMD
case GT_SIMD_CHK:
#endif // FEATURE_SIMD
- if (this == parent->gtBoundsChk.gtArrLen)
- {
- return &(parent->gtBoundsChk.gtArrLen);
- }
if (this == parent->gtBoundsChk.gtIndex)
{
return &(parent->gtBoundsChk.gtIndex);
}
+ if (this == parent->gtBoundsChk.gtArrLen)
+ {
+ return &(parent->gtBoundsChk.gtArrLen);
+ }
if (this == parent->gtBoundsChk.gtIndRngFailBB)
{
return &(parent->gtBoundsChk.gtIndRngFailBB);
@@ -6787,6 +6792,57 @@ GenTreePtr Compiler::gtNewOneConNode(var_types type)
}
}
+#ifdef FEATURE_SIMD
+//---------------------------------------------------------------------
+// gtNewSIMDVectorZero: create a GT_SIMD node for Vector<T>.Zero
+//
+// Arguments:
+// simdType - simd vector type
+// baseType - element type of vector
+// size - size of vector in bytes
+GenTreePtr Compiler::gtNewSIMDVectorZero(var_types simdType, var_types baseType, unsigned size)
+{
+ baseType = genActualType(baseType);
+ GenTree* initVal = gtNewZeroConNode(baseType);
+ initVal->gtType = baseType;
+ return gtNewSIMDNode(simdType, initVal, nullptr, SIMDIntrinsicInit, baseType, size);
+}
+
+//---------------------------------------------------------------------
+// gtNewSIMDVectorOne: create a GT_SIMD node for Vector<T>.One
+//
+// Arguments:
+// simdType - simd vector type
+// baseType - element type of vector
+// size - size of vector in bytes
+GenTreePtr Compiler::gtNewSIMDVectorOne(var_types simdType, var_types baseType, unsigned size)
+{
+ GenTree* initVal;
+ if (varTypeIsSmallInt(baseType))
+ {
+ unsigned baseSize = genTypeSize(baseType);
+ int val;
+ if (baseSize == 1)
+ {
+ val = 0x01010101;
+ }
+ else
+ {
+ val = 0x00010001;
+ }
+ initVal = gtNewIconNode(val);
+ }
+ else
+ {
+ initVal = gtNewOneConNode(baseType);
+ }
+
+ baseType = genActualType(baseType);
+ initVal->gtType = baseType;
+ return gtNewSIMDNode(simdType, initVal, nullptr, SIMDIntrinsicInit, baseType, size);
+}
+#endif // FEATURE_SIMD
+
GenTreeCall* Compiler::gtNewIndCallNode(GenTreePtr addr, var_types type, GenTreeArgList* args, IL_OFFSETX ilOffset)
{
return gtNewCallNode(CT_INDIRECT, (CORINFO_METHOD_HANDLE)addr, type, args, ilOffset);
@@ -7525,9 +7581,7 @@ void Compiler::gtBlockOpInit(GenTreePtr result, GenTreePtr dst, GenTreePtr srcOr
if (dst->OperIsLocal() && varTypeIsStruct(dst))
{
- unsigned lclNum = dst->AsLclVarCommon()->GetLclNum();
- LclVarDsc* lclVarDsc = &lvaTable[lclNum];
- lclVarDsc->lvUsedInSIMDIntrinsic = true;
+ setLclRelatedToSIMDIntrinsic(dst);
}
}
}
@@ -8031,7 +8085,7 @@ GenTreePtr Compiler::gtCloneExpr(
case GT_SIMD:
{
GenTreeSIMD* simdOp = tree->AsSIMD();
- copy = gtNewSIMDNode(simdOp->TypeGet(), simdOp->gtGetOp1(), simdOp->gtGetOp2(),
+ copy = gtNewSIMDNode(simdOp->TypeGet(), simdOp->gtGetOp1(), simdOp->gtGetOp2IfPresent(),
simdOp->gtSIMDIntrinsicID, simdOp->gtSIMDBaseType, simdOp->gtSIMDSize);
}
break;
@@ -8079,7 +8133,7 @@ GenTreePtr Compiler::gtCloneExpr(
}
}
- if (tree->gtGetOp2())
+ if (tree->gtGetOp2IfPresent())
{
copy->gtOp.gtOp2 = gtCloneExpr(tree->gtOp.gtOp2, addFlags, deepVarNum, deepVarVal);
}
@@ -8130,7 +8184,7 @@ GenTreePtr Compiler::gtCloneExpr(
{
copy->gtFlags |= (copy->gtOp.gtOp1->gtFlags & GTF_ALL_EFFECT);
}
- if (copy->gtGetOp2() != nullptr)
+ if (copy->gtGetOp2IfPresent() != nullptr)
{
copy->gtFlags |= (copy->gtGetOp2()->gtFlags & GTF_ALL_EFFECT);
}
@@ -8290,8 +8344,8 @@ GenTreePtr Compiler::gtCloneExpr(
#endif // FEATURE_SIMD
copy = new (this, oper)
GenTreeBoundsChk(oper, tree->TypeGet(),
- gtCloneExpr(tree->gtBoundsChk.gtArrLen, addFlags, deepVarNum, deepVarVal),
gtCloneExpr(tree->gtBoundsChk.gtIndex, addFlags, deepVarNum, deepVarVal),
+ gtCloneExpr(tree->gtBoundsChk.gtArrLen, addFlags, deepVarNum, deepVarVal),
tree->gtBoundsChk.gtThrowKind);
break;
@@ -9000,9 +9054,9 @@ GenTreePtr GenTree::GetChild(unsigned childNum)
switch (childNum)
{
case 0:
- return AsBoundsChk()->gtArrLen;
- case 1:
return AsBoundsChk()->gtIndex;
+ case 1:
+ return AsBoundsChk()->gtArrLen;
default:
unreached();
}
@@ -9176,9 +9230,9 @@ GenTree** GenTreeUseEdgeIterator::GetNextUseEdge() const
switch (m_state)
{
case 0:
- return &m_node->AsBoundsChk()->gtArrLen;
- case 1:
return &m_node->AsBoundsChk()->gtIndex;
+ case 1:
+ return &m_node->AsBoundsChk()->gtArrLen;
default:
return nullptr;
}
@@ -10208,6 +10262,10 @@ void Compiler::gtDispNode(GenTreePtr tree, IndentStack* indentStack, __in __in_z
case GT_LE:
case GT_GE:
case GT_GT:
+#ifndef LEGACY_BACKEND
+ case GT_TEST_EQ:
+ case GT_TEST_NE:
+#endif
if (tree->gtFlags & GTF_RELOP_NAN_UN)
{
printf("N");
@@ -10226,12 +10284,6 @@ void Compiler::gtDispNode(GenTreePtr tree, IndentStack* indentStack, __in __in_z
--msgLength;
break;
}
- if (tree->gtFlags & GTF_RELOP_SMALL)
- {
- printf("S");
- --msgLength;
- break;
- }
goto DASH;
default:
@@ -10694,7 +10746,17 @@ void Compiler::gtDispConst(GenTree* tree)
case GT_CNS_INT:
if (tree->IsIconHandle(GTF_ICON_STR_HDL))
{
- printf(" 0x%X \"%S\"", dspPtr(tree->gtIntCon.gtIconVal), eeGetCPString(tree->gtIntCon.gtIconVal));
+ const wchar_t* str = eeGetCPString(tree->gtIntCon.gtIconVal);
+ if (str != nullptr)
+ {
+ printf(" 0x%X \"%S\"", dspPtr(tree->gtIntCon.gtIconVal), str);
+ }
+ else
+ {
+ // Note that eGetCPString isn't currently implemented on Linux/ARM
+ // and instead always returns nullptr
+ printf(" 0x%X [ICON_STR_HDL]", dspPtr(tree->gtIntCon.gtIconVal));
+ }
}
else
{
@@ -11255,7 +11317,7 @@ void Compiler::gtDispTree(GenTreePtr tree,
{
if (!topOnly)
{
- if (tree->gtGetOp2())
+ if (tree->gtGetOp2IfPresent())
{
// Label the childMsgs of the GT_COLON operator
// op2 is the then part
@@ -11670,8 +11732,8 @@ void Compiler::gtDispTree(GenTreePtr tree,
printf("\n");
if (!topOnly)
{
- gtDispChild(tree->gtBoundsChk.gtArrLen, indentStack, IIArc, nullptr, topOnly);
- gtDispChild(tree->gtBoundsChk.gtIndex, indentStack, IIArcBottom, nullptr, topOnly);
+ gtDispChild(tree->gtBoundsChk.gtIndex, indentStack, IIArc, nullptr, topOnly);
+ gtDispChild(tree->gtBoundsChk.gtArrLen, indentStack, IIArcBottom, nullptr, topOnly);
}
break;
@@ -11955,6 +12017,10 @@ void Compiler::gtDispLIRNode(GenTree* node)
// 49 spaces for alignment
printf("%-49s", "");
+#ifdef FEATURE_SET_FLAGS
+ // additional flag enlarges the flag field by one character
+ printf(" ");
+#endif
indentStack.Push(operandArc);
indentStack.print();
@@ -12615,7 +12681,7 @@ GenTreePtr Compiler::gtFoldExprConst(GenTreePtr tree)
assert(kind & (GTK_UNOP | GTK_BINOP));
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
if (!opts.OptEnabled(CLFLG_CONSTANTFOLD))
{
@@ -14411,12 +14477,14 @@ GenTreePtr Compiler::gtBuildCommaList(GenTreePtr list, GenTreePtr expr)
result->gtFlags |= (list->gtFlags & GTF_ALL_EFFECT);
result->gtFlags |= (expr->gtFlags & GTF_ALL_EFFECT);
- // 'list' and 'expr' should have valuenumbers defined for both or for neither one
- noway_assert(list->gtVNPair.BothDefined() == expr->gtVNPair.BothDefined());
+ // 'list' and 'expr' should have valuenumbers defined for both or for neither one (unless we are remorphing,
+ // in which case a prior transform involving either node may have discarded or otherwise invalidated the value
+ // numbers).
+ assert((list->gtVNPair.BothDefined() == expr->gtVNPair.BothDefined()) || !fgGlobalMorph);
// Set the ValueNumber 'gtVNPair' for the new GT_COMMA node
//
- if (expr->gtVNPair.BothDefined())
+ if (list->gtVNPair.BothDefined() && expr->gtVNPair.BothDefined())
{
// The result of a GT_COMMA node is op2, the normal value number is op2vnp
// But we also need to include the union of side effects from op1 and op2.
@@ -14505,7 +14573,7 @@ void Compiler::gtExtractSideEffList(GenTreePtr expr,
if (kind & GTK_SMPOP)
{
GenTreePtr op1 = expr->gtOp.gtOp1;
- GenTreePtr op2 = expr->gtGetOp2();
+ GenTreePtr op2 = expr->gtGetOp2IfPresent();
if (flags & GTF_EXCEPT)
{
@@ -14589,8 +14657,8 @@ void Compiler::gtExtractSideEffList(GenTreePtr expr,
#endif // FEATURE_SIMD
)
{
- gtExtractSideEffList(expr->AsBoundsChk()->gtArrLen, pList, flags);
gtExtractSideEffList(expr->AsBoundsChk()->gtIndex, pList, flags);
+ gtExtractSideEffList(expr->AsBoundsChk()->gtArrLen, pList, flags);
}
if (expr->OperGet() == GT_DYN_BLK || expr->OperGet() == GT_STORE_DYN_BLK)
@@ -15046,7 +15114,6 @@ BasicBlock* Compiler::bbNewBasicBlock(BBjumpKinds jumpKind)
{
VarSetOps::AssignNoCopy(this, block->bbVarUse, VarSetOps::MakeEmpty(this));
VarSetOps::AssignNoCopy(this, block->bbVarDef, VarSetOps::MakeEmpty(this));
- VarSetOps::AssignNoCopy(this, block->bbVarTmp, VarSetOps::MakeEmpty(this));
VarSetOps::AssignNoCopy(this, block->bbLiveIn, VarSetOps::MakeEmpty(this));
VarSetOps::AssignNoCopy(this, block->bbLiveOut, VarSetOps::MakeEmpty(this));
VarSetOps::AssignNoCopy(this, block->bbScope, VarSetOps::MakeEmpty(this));
@@ -15055,20 +15122,22 @@ BasicBlock* Compiler::bbNewBasicBlock(BBjumpKinds jumpKind)
{
VarSetOps::AssignNoCopy(this, block->bbVarUse, VarSetOps::UninitVal());
VarSetOps::AssignNoCopy(this, block->bbVarDef, VarSetOps::UninitVal());
- VarSetOps::AssignNoCopy(this, block->bbVarTmp, VarSetOps::UninitVal());
VarSetOps::AssignNoCopy(this, block->bbLiveIn, VarSetOps::UninitVal());
VarSetOps::AssignNoCopy(this, block->bbLiveOut, VarSetOps::UninitVal());
VarSetOps::AssignNoCopy(this, block->bbScope, VarSetOps::UninitVal());
}
- block->bbHeapUse = false;
- block->bbHeapDef = false;
- block->bbHeapLiveIn = false;
- block->bbHeapLiveOut = false;
+ block->bbMemoryUse = emptyMemoryKindSet;
+ block->bbMemoryDef = emptyMemoryKindSet;
+ block->bbMemoryLiveIn = emptyMemoryKindSet;
+ block->bbMemoryLiveOut = emptyMemoryKindSet;
- block->bbHeapSsaPhiFunc = nullptr;
- block->bbHeapSsaNumIn = 0;
- block->bbHeapSsaNumOut = 0;
+ for (MemoryKind memoryKind : allMemoryKinds())
+ {
+ block->bbMemorySsaPhiFunc[memoryKind] = nullptr;
+ block->bbMemorySsaNumIn[memoryKind] = 0;
+ block->bbMemorySsaNumOut[memoryKind] = 0;
+ }
// Make sure we reserve a NOT_IN_LOOP value that isn't a legal table index.
static_assert_no_msg(MAX_LOOP_NUM < BasicBlock::NOT_IN_LOOP);
@@ -15717,18 +15786,21 @@ unsigned GenTree::IsLclVarUpdateTree(GenTree** pOtherTree, genTreeOps* pOper)
return lclNum;
}
-// return true if this tree node is a subcomponent of parent for codegen purposes
-// (essentially, will be rolled into the same instruction)
-// Note that this method relies upon the value of gtRegNum field to determine
-// if the treenode is contained or not. Therefore you can not call this method
-// until after the LSRA phase has allocated physical registers to the treenodes.
+//------------------------------------------------------------------------
+// isContained: check whether this tree node is a subcomponent of its parent for codegen purposes
+//
+// Return Value:
+// Returns true if there is no code generated explicitly for this node.
+// Essentially, it will be rolled into the code generation for the parent.
+//
+// Assumptions:
+// This method relies upon the value of gtRegNum field to determine whether the tree node
+// is contained.
+// Therefore you can not call this method until after the LSRA phase has allocated physical
+// registers to the treenodes.
+//
bool GenTree::isContained() const
{
- if (isContainedSpillTemp())
- {
- return true;
- }
-
if (gtHasReg())
{
return false;
@@ -15747,7 +15819,6 @@ bool GenTree::isContained() const
return false;
}
- // TODO-Cleanup : this is not clean, would be nice to have some way of marking this.
switch (OperGet())
{
case GT_STOREIND:
@@ -16253,8 +16324,15 @@ CORINFO_CLASS_HANDLE Compiler::gtGetStructHandleIfPresent(GenTree* tree)
case GT_ASG:
structHnd = gtGetStructHandleIfPresent(tree->gtGetOp1());
break;
- case GT_LCL_VAR:
case GT_LCL_FLD:
+#ifdef FEATURE_SIMD
+ if (varTypeIsSIMD(tree))
+ {
+ structHnd = gtGetStructHandleForSIMD(tree->gtType, TYP_FLOAT);
+ }
+#endif
+ break;
+ case GT_LCL_VAR:
structHnd = lvaTable[tree->AsLclVarCommon()->gtLclNum].lvVerTypeInfo.GetClassHandle();
break;
case GT_RETURN:
@@ -16792,15 +16870,8 @@ bool FieldSeqNode::IsPseudoField()
GenTreeSIMD* Compiler::gtNewSIMDNode(
var_types type, GenTreePtr op1, SIMDIntrinsicID simdIntrinsicID, var_types baseType, unsigned size)
{
- // TODO-CQ: An operand may be a GT_OBJ(GT_ADDR(GT_LCL_VAR))), in which case it should be
- // marked lvUsedInSIMDIntrinsic.
assert(op1 != nullptr);
- if (op1->OperGet() == GT_LCL_VAR)
- {
- unsigned lclNum = op1->AsLclVarCommon()->GetLclNum();
- LclVarDsc* lclVarDsc = &lvaTable[lclNum];
- lclVarDsc->lvUsedInSIMDIntrinsic = true;
- }
+ SetOpLclRelatedToSIMDIntrinsic(op1);
return new (this, GT_SIMD) GenTreeSIMD(type, op1, simdIntrinsicID, baseType, size);
}
@@ -16808,24 +16879,34 @@ GenTreeSIMD* Compiler::gtNewSIMDNode(
GenTreeSIMD* Compiler::gtNewSIMDNode(
var_types type, GenTreePtr op1, GenTreePtr op2, SIMDIntrinsicID simdIntrinsicID, var_types baseType, unsigned size)
{
- // TODO-CQ: An operand may be a GT_OBJ(GT_ADDR(GT_LCL_VAR))), in which case it should be
- // marked lvUsedInSIMDIntrinsic.
assert(op1 != nullptr);
- if (op1->OperIsLocal())
+ SetOpLclRelatedToSIMDIntrinsic(op1);
+ if (op2 != nullptr)
{
- unsigned lclNum = op1->AsLclVarCommon()->GetLclNum();
- LclVarDsc* lclVarDsc = &lvaTable[lclNum];
- lclVarDsc->lvUsedInSIMDIntrinsic = true;
+ SetOpLclRelatedToSIMDIntrinsic(op2);
}
- if (op2 != nullptr && op2->OperIsLocal())
+ return new (this, GT_SIMD) GenTreeSIMD(type, op1, op2, simdIntrinsicID, baseType, size);
+}
+
+//-------------------------------------------------------------------
+// SetOpLclRelatedToSIMDIntrinsic: Determine if the tree has a local var that needs to be set
+// as used by a SIMD intrinsic, and if so, set that local var appropriately.
+//
+// Arguments:
+// op - The tree, to be an operand of a new GT_SIMD node, to check.
+//
+void Compiler::SetOpLclRelatedToSIMDIntrinsic(GenTreePtr op)
+{
+ if (op->OperIsLocal())
{
- unsigned lclNum = op2->AsLclVarCommon()->GetLclNum();
- LclVarDsc* lclVarDsc = &lvaTable[lclNum];
- lclVarDsc->lvUsedInSIMDIntrinsic = true;
+ setLclRelatedToSIMDIntrinsic(op);
+ }
+ else if ((op->OperGet() == GT_OBJ) && (op->gtOp.gtOp1->OperGet() == GT_ADDR) &&
+ op->gtOp.gtOp1->gtOp.gtOp1->OperIsLocal())
+ {
+ setLclRelatedToSIMDIntrinsic(op->gtOp.gtOp1->gtOp.gtOp1);
}
-
- return new (this, GT_SIMD) GenTreeSIMD(type, op1, op2, simdIntrinsicID, baseType, size);
}
bool GenTree::isCommutativeSIMDIntrinsic()
diff --git a/src/jit/gentree.h b/src/jit/gentree.h
index 4611d35465..0ea8321e77 100644
--- a/src/jit/gentree.h
+++ b/src/jit/gentree.h
@@ -566,7 +566,7 @@ public:
bool isContainedIntOrIImmed() const
{
- return isContained() && IsCnsIntOrI() && !isContainedSpillTemp();
+ return isContained() && IsCnsIntOrI() && !isUsedFromSpillTemp();
}
bool isContainedFltOrDblImmed() const
@@ -579,28 +579,34 @@ public:
return OperGet() == GT_LCL_FLD || OperGet() == GT_STORE_LCL_FLD;
}
- bool isContainedLclField() const
+ bool isUsedFromSpillTemp() const;
+
+ // Indicates whether it is a memory op.
+ // Right now it includes Indir and LclField ops.
+ bool isMemoryOp() const
{
- return isContained() && isLclField();
+ return isIndir() || isLclField();
}
- bool isContainedLclVar() const
+ bool isUsedFromMemory() const
{
- return isContained() && (OperGet() == GT_LCL_VAR);
+ return ((isContained() && (isMemoryOp() || (OperGet() == GT_LCL_VAR) || (OperGet() == GT_CNS_DBL))) ||
+ isUsedFromSpillTemp());
}
- bool isContainedSpillTemp() const;
+ bool isLclVarUsedFromMemory() const
+ {
+ return (OperGet() == GT_LCL_VAR) && (isContained() || isUsedFromSpillTemp());
+ }
- // Indicates whether it is a memory op.
- // Right now it includes Indir and LclField ops.
- bool isMemoryOp() const
+ bool isLclFldUsedFromMemory() const
{
- return isIndir() || isLclField();
+ return isLclField() && (isContained() || isUsedFromSpillTemp());
}
- bool isContainedMemoryOp() const
+ bool isUsedFromReg() const
{
- return (isContained() && isMemoryOp()) || isContainedLclVar() || isContainedSpillTemp();
+ return !isContained() && !isUsedFromSpillTemp();
}
regNumber GetRegNum() const
@@ -903,8 +909,6 @@ public:
#define GTF_RELOP_NAN_UN 0x80000000 // GT_<relop> -- Is branch taken if ops are NaN?
#define GTF_RELOP_JMP_USED 0x40000000 // GT_<relop> -- result of compare used for jump or ?:
#define GTF_RELOP_QMARK 0x20000000 // GT_<relop> -- the node is the condition for ?:
-#define GTF_RELOP_SMALL 0x10000000 // GT_<relop> -- We should use a byte or short sized compare (op1->gtType
- // is the small type)
#define GTF_RELOP_ZTT 0x08000000 // GT_<relop> -- Loop test cloned for converting while-loops into do-while
// with explicit "loop test" in the header block.
@@ -1073,6 +1077,17 @@ public:
}
}
+ bool OperIs(genTreeOps oper)
+ {
+ return OperGet() == oper;
+ }
+
+ template <typename... T>
+ bool OperIs(genTreeOps oper, T... rest)
+ {
+ return OperIs(oper) || OperIs(rest...);
+ }
+
static bool OperIsConst(genTreeOps gtOper)
{
return (OperKind(gtOper) & GTK_CONST) != 0;
@@ -1588,8 +1603,14 @@ public:
inline GenTreePtr gtGetOp1();
+ // Directly return op2. Asserts the node is binary. Might return nullptr if the binary node allows
+ // a nullptr op2, such as GT_LIST. This is more efficient than gtGetOp2IfPresent() if you know what
+ // node type you have.
inline GenTreePtr gtGetOp2();
+ // The returned pointer might be nullptr if the node is not binary, or if non-null op2 is not required.
+ inline GenTreePtr gtGetOp2IfPresent();
+
// Given a tree node, if this is a child of that node, return the pointer to the child node so that it
// can be modified; otherwise, return null.
GenTreePtr* gtGetChildPointer(GenTreePtr parent);
@@ -3248,43 +3269,52 @@ struct GenTreeCall final : public GenTree
#endif
}
-#define GTF_CALL_M_EXPLICIT_TAILCALL \
- 0x0001 // GT_CALL -- the call is "tail" prefixed and importer has performed tail call checks
-#define GTF_CALL_M_TAILCALL 0x0002 // GT_CALL -- the call is a tailcall
-#define GTF_CALL_M_VARARGS 0x0004 // GT_CALL -- the call uses varargs ABI
-#define GTF_CALL_M_RETBUFFARG 0x0008 // GT_CALL -- first parameter is the return buffer argument
-#define GTF_CALL_M_DELEGATE_INV 0x0010 // GT_CALL -- call to Delegate.Invoke
-#define GTF_CALL_M_NOGCCHECK 0x0020 // GT_CALL -- not a call for computing full interruptability
-#define GTF_CALL_M_SPECIAL_INTRINSIC 0x0040 // GT_CALL -- function that could be optimized as an intrinsic
- // in special cases. Used to optimize fast way out in morphing
-#define GTF_CALL_M_UNMGD_THISCALL \
- 0x0080 // "this" pointer (first argument) should be enregistered (only for GTF_CALL_UNMANAGED)
-#define GTF_CALL_M_VIRTSTUB_REL_INDIRECT \
- 0x0080 // the virtstub is indirected through a relative address (only for GTF_CALL_VIRT_STUB)
-#define GTF_CALL_M_NONVIRT_SAME_THIS \
- 0x0080 // callee "this" pointer is equal to caller this pointer (only for GTF_CALL_NONVIRT)
-#define GTF_CALL_M_FRAME_VAR_DEATH 0x0100 // GT_CALL -- the compLvFrameListRoot variable dies here (last use)
+// clang-format off
+
+#define GTF_CALL_M_EXPLICIT_TAILCALL 0x00000001 // GT_CALL -- the call is "tail" prefixed and
+ // importer has performed tail call checks
+#define GTF_CALL_M_TAILCALL 0x00000002 // GT_CALL -- the call is a tailcall
+#define GTF_CALL_M_VARARGS 0x00000004 // GT_CALL -- the call uses varargs ABI
+#define GTF_CALL_M_RETBUFFARG 0x00000008 // GT_CALL -- first parameter is the return buffer argument
+#define GTF_CALL_M_DELEGATE_INV 0x00000010 // GT_CALL -- call to Delegate.Invoke
+#define GTF_CALL_M_NOGCCHECK 0x00000020 // GT_CALL -- not a call for computing full interruptability
+#define GTF_CALL_M_SPECIAL_INTRINSIC 0x00000040 // GT_CALL -- function that could be optimized as an intrinsic
+ // in special cases. Used to optimize fast way out in morphing
+#define GTF_CALL_M_UNMGD_THISCALL 0x00000080 // GT_CALL -- "this" pointer (first argument)
+ // should be enregistered (only for GTF_CALL_UNMANAGED)
+#define GTF_CALL_M_VIRTSTUB_REL_INDIRECT 0x00000080 // the virtstub is indirected through
+ // a relative address (only for GTF_CALL_VIRT_STUB)
+#define GTF_CALL_M_NONVIRT_SAME_THIS 0x00000080 // GT_CALL -- callee "this" pointer is
+ // equal to caller this pointer (only for GTF_CALL_NONVIRT)
+#define GTF_CALL_M_FRAME_VAR_DEATH 0x00000100 // GT_CALL -- the compLvFrameListRoot variable dies here (last use)
#ifndef LEGACY_BACKEND
-#define GTF_CALL_M_TAILCALL_VIA_HELPER 0x0200 // GT_CALL -- call is a tail call dispatched via tail call JIT helper.
-#endif // !LEGACY_BACKEND
+#define GTF_CALL_M_TAILCALL_VIA_HELPER 0x00000200 // GT_CALL -- call is a tail call dispatched via tail call JIT helper.
+#endif
#if FEATURE_TAILCALL_OPT
-#define GTF_CALL_M_IMPLICIT_TAILCALL \
- 0x0400 // GT_CALL -- call is an opportunistic tail call and importer has performed tail call checks
-#define GTF_CALL_M_TAILCALL_TO_LOOP \
- 0x0800 // GT_CALL -- call is a fast recursive tail call that can be converted into a loop
+#define GTF_CALL_M_IMPLICIT_TAILCALL 0x00000400 // GT_CALL -- call is an opportunistic
+ // tail call and importer has performed tail call checks
+#define GTF_CALL_M_TAILCALL_TO_LOOP 0x00000800 // GT_CALL -- call is a fast recursive tail call
+ // that can be converted into a loop
#endif
-#define GTF_CALL_M_PINVOKE 0x1000 // GT_CALL -- call is a pinvoke. This mirrors VM flag CORINFO_FLG_PINVOKE.
- // A call marked as Pinvoke is not necessarily a GT_CALL_UNMANAGED. For e.g.
- // an IL Stub dynamically generated for a PInvoke declaration is flagged as
- // a Pinvoke but not as an unmanaged call. See impCheckForPInvokeCall() to
- // know when these flags are set.
+#define GTF_CALL_M_PINVOKE 0x00001000 // GT_CALL -- call is a pinvoke. This mirrors VM flag CORINFO_FLG_PINVOKE.
+ // A call marked as Pinvoke is not necessarily a GT_CALL_UNMANAGED. For e.g.
+ // an IL Stub dynamically generated for a PInvoke declaration is flagged as
+ // a Pinvoke but not as an unmanaged call. See impCheckForPInvokeCall() to
+ // know when these flags are set.
+
+#define GTF_CALL_M_R2R_REL_INDIRECT 0x00002000 // GT_CALL -- ready to run call is indirected through a relative address
+#define GTF_CALL_M_DOES_NOT_RETURN 0x00004000 // GT_CALL -- call does not return
+#define GTF_CALL_M_SECURE_DELEGATE_INV 0x00008000 // GT_CALL -- call is in secure delegate
+#define GTF_CALL_M_FAT_POINTER_CHECK 0x00010000 // GT_CALL -- CoreRT managed calli needs transformation, that checks
+ // special bit in calli address. If it is set, then it is necessary
+ // to restore real function address and load hidden argument
+ // as the first argument for calli. It is CoreRT replacement for instantiating
+ // stubs, because executable code cannot be generated at runtime.
-#define GTF_CALL_M_R2R_REL_INDIRECT 0x2000 // GT_CALL -- ready to run call is indirected through a relative address
-#define GTF_CALL_M_DOES_NOT_RETURN 0x4000 // GT_CALL -- call does not return
-#define GTF_CALL_M_SECURE_DELEGATE_INV 0x8000 // GT_CALL -- call is in secure delegate
+ // clang-format on
bool IsUnmanaged() const
{
@@ -3482,9 +3512,24 @@ struct GenTreeCall final : public GenTree
return (gtCallMoreFlags & GTF_CALL_M_DOES_NOT_RETURN) != 0;
}
+ bool IsFatPointerCandidate() const
+ {
+ return (gtCallMoreFlags & GTF_CALL_M_FAT_POINTER_CHECK) != 0;
+ }
+
bool IsPure(Compiler* compiler) const;
- unsigned short gtCallMoreFlags; // in addition to gtFlags
+ void ClearFatPointerCandidate()
+ {
+ gtCallMoreFlags &= ~GTF_CALL_M_FAT_POINTER_CHECK;
+ }
+
+ void SetFatPointerCandidate()
+ {
+ gtCallMoreFlags |= GTF_CALL_M_FAT_POINTER_CHECK;
+ }
+
+ unsigned gtCallMoreFlags; // in addition to gtFlags
unsigned char gtCallType : 3; // value from the gtCallTypes enumeration
unsigned char gtReturnType : 5; // exact return type
@@ -3764,8 +3809,8 @@ public:
struct GenTreeBoundsChk : public GenTree
{
- GenTreePtr gtArrLen; // An expression for the length of the array being indexed.
GenTreePtr gtIndex; // The index expression.
+ GenTreePtr gtArrLen; // An expression for the length of the array being indexed.
GenTreePtr gtIndRngFailBB; // Label to jump to for array-index-out-of-range
SpecialCodeKind gtThrowKind; // Kind of throw block to branch to on failure
@@ -3775,10 +3820,10 @@ struct GenTreeBoundsChk : public GenTree
optimizer has a chance of eliminating some of the rng checks */
unsigned gtStkDepth;
- GenTreeBoundsChk(genTreeOps oper, var_types type, GenTreePtr arrLen, GenTreePtr index, SpecialCodeKind kind)
+ GenTreeBoundsChk(genTreeOps oper, var_types type, GenTreePtr index, GenTreePtr arrLen, SpecialCodeKind kind)
: GenTree(oper, type)
- , gtArrLen(arrLen)
, gtIndex(index)
+ , gtArrLen(arrLen)
, gtIndRngFailBB(nullptr)
, gtThrowKind(kind)
, gtStkDepth(0)
@@ -4531,6 +4576,9 @@ struct GenTreePhiArg : public GenTreeLclVarCommon
struct GenTreePutArgStk : public GenTreeUnOp
{
unsigned gtSlotNum; // Slot number of the argument to be passed on stack
+#if defined(UNIX_X86_ABI)
+ unsigned gtPadAlign; // Number of padding slots for stack alignment
+#endif
#if FEATURE_FASTTAILCALL
bool putInIncomingArgArea; // Whether this arg needs to be placed in incoming arg area.
@@ -4546,6 +4594,9 @@ struct GenTreePutArgStk : public GenTreeUnOp
DEBUGARG(bool largeNode = false))
: GenTreeUnOp(oper, type DEBUGARG(largeNode))
, gtSlotNum(slotNum)
+#if defined(UNIX_X86_ABI)
+ , gtPadAlign(0)
+#endif
, putInIncomingArgArea(_putInIncomingArgArea)
#ifdef FEATURE_PUT_STRUCT_ARG_STK
, gtPutArgStkKind(Kind::Invalid)
@@ -4567,6 +4618,9 @@ struct GenTreePutArgStk : public GenTreeUnOp
DEBUGARG(bool largeNode = false))
: GenTreeUnOp(oper, type, op1 DEBUGARG(largeNode))
, gtSlotNum(slotNum)
+#if defined(UNIX_X86_ABI)
+ , gtPadAlign(0)
+#endif
, putInIncomingArgArea(_putInIncomingArgArea)
#ifdef FEATURE_PUT_STRUCT_ARG_STK
, gtPutArgStkKind(Kind::Invalid)
@@ -4588,6 +4642,9 @@ struct GenTreePutArgStk : public GenTreeUnOp
DEBUGARG(GenTreePtr callNode = NULL) DEBUGARG(bool largeNode = false))
: GenTreeUnOp(oper, type DEBUGARG(largeNode))
, gtSlotNum(slotNum)
+#if defined(UNIX_X86_ABI)
+ , gtPadAlign(0)
+#endif
#ifdef FEATURE_PUT_STRUCT_ARG_STK
, gtPutArgStkKind(Kind::Invalid)
, gtNumSlots(numSlots)
@@ -4607,6 +4664,9 @@ struct GenTreePutArgStk : public GenTreeUnOp
DEBUGARG(GenTreePtr callNode = NULL) DEBUGARG(bool largeNode = false))
: GenTreeUnOp(oper, type, op1 DEBUGARG(largeNode))
, gtSlotNum(slotNum)
+#if defined(UNIX_X86_ABI)
+ , gtPadAlign(0)
+#endif
#ifdef FEATURE_PUT_STRUCT_ARG_STK
, gtPutArgStkKind(Kind::Invalid)
, gtNumSlots(numSlots)
@@ -4625,6 +4685,18 @@ struct GenTreePutArgStk : public GenTreeUnOp
return gtSlotNum * TARGET_POINTER_SIZE;
}
+#if defined(UNIX_X86_ABI)
+ unsigned getArgPadding()
+ {
+ return gtPadAlign;
+ }
+
+ void setArgPadding(unsigned padAlign)
+ {
+ gtPadAlign = padAlign;
+ }
+#endif
+
#ifdef FEATURE_PUT_STRUCT_ARG_STK
unsigned getArgSize()
{
@@ -4968,7 +5040,7 @@ inline bool GenTree::IsIntegralConstVector(ssize_t constVal)
if ((gtOper == GT_SIMD) && (gtSIMD.gtSIMDIntrinsicID == SIMDIntrinsicInit) && gtGetOp1()->IsIntegralConst(constVal))
{
assert(varTypeIsIntegral(gtSIMD.gtSIMDBaseType));
- assert(gtGetOp2() == nullptr);
+ assert(gtGetOp2IfPresent() == nullptr);
return true;
}
#endif
@@ -5149,12 +5221,24 @@ inline bool GenTree::RequiresNonNullOp2(genTreeOps oper)
inline GenTreePtr GenTree::gtGetOp2()
{
+ assert(OperIsBinary());
+
+ GenTreePtr op2 = gtOp.gtOp2;
+
+ // Only allow null op2 if the node type allows it, e.g. GT_LIST.
+ assert((op2 != nullptr) || !RequiresNonNullOp2(gtOper));
+
+ return op2;
+}
+
+inline GenTreePtr GenTree::gtGetOp2IfPresent()
+{
/* gtOp.gtOp2 is only valid for GTK_BINOP nodes. */
GenTreePtr op2 = OperIsBinary() ? gtOp.gtOp2 : nullptr;
// This documents the genTreeOps for which gtOp.gtOp2 cannot be nullptr.
- // This helps prefix in its analyis of code which calls gtGetOp2()
+ // This helps prefix in its analysis of code which calls gtGetOp2()
assert((op2 != nullptr) || !RequiresNonNullOp2(gtOper));
@@ -5319,10 +5403,10 @@ inline bool GenTreeBlk::HasGCPtr()
return false;
}
-inline bool GenTree::isContainedSpillTemp() const
+inline bool GenTree::isUsedFromSpillTemp() const
{
#if !defined(LEGACY_BACKEND)
- // If spilled and no reg at use, then it is treated as contained.
+ // If spilled and no reg at use, then it is used from the spill temp location rather than being reloaded.
if (((gtFlags & GTF_SPILLED) != 0) && ((gtFlags & GTF_NOREG_AT_USE) != 0))
{
return true;
diff --git a/src/jit/gschecks.cpp b/src/jit/gschecks.cpp
index 9255d8fd36..e4f1c25e0f 100644
--- a/src/jit/gschecks.cpp
+++ b/src/jit/gschecks.cpp
@@ -409,7 +409,8 @@ void Compiler::gsParamsToShadows()
lvaTable[shadowVar].lvUsedInSIMDIntrinsic = varDsc->lvUsedInSIMDIntrinsic;
if (varDsc->lvSIMDType)
{
- lvaTable[shadowVar].lvBaseType = varDsc->lvBaseType;
+ lvaTable[shadowVar].lvExactSize = varDsc->lvExactSize;
+ lvaTable[shadowVar].lvBaseType = varDsc->lvBaseType;
}
#endif
lvaTable[shadowVar].lvRegStruct = varDsc->lvRegStruct;
diff --git a/src/jit/gtlist.h b/src/jit/gtlist.h
index 92265a7359..2d9255b6ce 100644
--- a/src/jit/gtlist.h
+++ b/src/jit/gtlist.h
@@ -145,6 +145,17 @@ GTNODE(LT , "<" ,GenTreeOp ,0,GTK_BINOP|GTK_RE
GTNODE(LE , "<=" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP)
GTNODE(GE , ">=" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP)
GTNODE(GT , ">" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP)
+#ifndef LEGACY_BACKEND
+// These are similar to GT_EQ/GT_NE but they generate "test" instead of "cmp" instructions.
+// Currently these are generated during lowering for code like ((x & y) eq|ne 0) only on
+// XArch but ARM could too use these for the same purpose as there is a "tst" instruction.
+// Note that the general case of comparing a register against 0 is handled directly by
+// codegen which emits a "test reg, reg" instruction, that would be more difficult to do
+// during lowering because the source operand is used twice so it has to be a lclvar.
+// Because of this there is no need to also add GT_TEST_LT/LE/GE/GT opers.
+GTNODE(TEST_EQ , "testEQ" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP)
+GTNODE(TEST_NE , "testNE" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP)
+#endif
GTNODE(COMMA , "comma" ,GenTreeOp ,0,GTK_BINOP|GTK_NOTLIR)
@@ -269,7 +280,7 @@ GTNODE(EMITNOP , "emitnop" ,GenTree ,0,GTK_LEAF|GTK_NOV
GTNODE(PINVOKE_PROLOG ,"pinvoke_prolog",GenTree ,0,GTK_LEAF|GTK_NOVALUE) // pinvoke prolog seq
GTNODE(PINVOKE_EPILOG ,"pinvoke_epilog",GenTree ,0,GTK_LEAF|GTK_NOVALUE) // pinvoke epilog seq
GTNODE(PUTARG_REG , "putarg_reg" ,GenTreeOp ,0,GTK_UNOP) // operator that places outgoing arg in register
-GTNODE(PUTARG_STK , "putarg_stk" ,GenTreePutArgStk ,0,GTK_UNOP) // operator that places outgoing arg in stack
+GTNODE(PUTARG_STK , "putarg_stk" ,GenTreePutArgStk ,0,GTK_UNOP|GTK_NOVALUE) // operator that places outgoing arg in stack
GTNODE(RETURNTRAP , "returnTrap" ,GenTreeOp ,0,GTK_UNOP|GTK_NOVALUE) // a conditional call to wait on gc
GTNODE(SWAP , "swap" ,GenTreeOp ,0,GTK_BINOP|GTK_NOVALUE) // op1 and op2 swap (registers)
GTNODE(IL_OFFSET , "il_offset" ,GenTreeStmt ,0,GTK_LEAF|GTK_NOVALUE) // marks an IL offset for debugging purposes
diff --git a/src/jit/importer.cpp b/src/jit/importer.cpp
index cb09ff8b8c..b1e0f487ef 100644
--- a/src/jit/importer.cpp
+++ b/src/jit/importer.cpp
@@ -1489,17 +1489,16 @@ var_types Compiler::impNormStructType(CORINFO_CLASS_HANDLE structHnd,
const DWORD structFlags = info.compCompHnd->getClassAttribs(structHnd);
var_types structType = TYP_STRUCT;
-#ifdef FEATURE_CORECLR
- const bool hasGCPtrs = (structFlags & CORINFO_FLG_CONTAINS_GC_PTR) != 0;
-#else
- // Desktop CLR won't report FLG_CONTAINS_GC_PTR for RefAnyClass - need to check explicitly.
- const bool isRefAny = (structHnd == impGetRefAnyClass());
- const bool hasGCPtrs = isRefAny || ((structFlags & CORINFO_FLG_CONTAINS_GC_PTR) != 0);
-#endif
+ // On coreclr the check for GC includes a "may" to account for the special
+ // ByRef like span structs. The added check for "CONTAINS_STACK_PTR" is the particular bit.
+ // When this is set the struct will contain a ByRef that could be a GC pointer or a native
+ // pointer.
+ const bool mayContainGCPtrs =
+ ((structFlags & CORINFO_FLG_CONTAINS_STACK_PTR) != 0 || ((structFlags & CORINFO_FLG_CONTAINS_GC_PTR) != 0));
#ifdef FEATURE_SIMD
// Check to see if this is a SIMD type.
- if (featureSIMD && !hasGCPtrs)
+ if (featureSIMD && !mayContainGCPtrs)
{
unsigned originalSize = info.compCompHnd->getClassSize(structHnd);
@@ -1515,10 +1514,8 @@ var_types Compiler::impNormStructType(CORINFO_CLASS_HANDLE structHnd,
{
*pSimdBaseType = simdBaseType;
}
-#ifdef _TARGET_AMD64_
- // Amd64: also indicate that we use floating point registers
+ // Also indicate that we use floating point registers.
compFloatingPointUsed = true;
-#endif
}
}
}
@@ -1532,9 +1529,10 @@ var_types Compiler::impNormStructType(CORINFO_CLASS_HANDLE structHnd,
// Verify that the quick test up above via the class attributes gave a
// safe view of the type's GCness.
//
- // Note there are cases where hasGCPtrs is true but getClassGClayout
+ // Note there are cases where mayContainGCPtrs is true but getClassGClayout
// does not report any gc fields.
- assert(hasGCPtrs || (numGCVars == 0));
+
+ assert(mayContainGCPtrs || (numGCVars == 0));
if (pNumGCVars != nullptr)
{
@@ -1638,21 +1636,52 @@ GenTreePtr Compiler::impNormStructVal(GenTreePtr structVal,
case GT_COMMA:
{
- // The second thing is the block node.
+ // The second thing could either be a block node or a GT_SIMD or a GT_COMMA node.
GenTree* blockNode = structVal->gtOp.gtOp2;
assert(blockNode->gtType == structType);
- // It had better be a block node - any others should not occur here.
- assert(blockNode->OperIsBlk());
-
- // Sink the GT_COMMA below the blockNode addr.
- GenTree* blockNodeAddr = blockNode->gtOp.gtOp1;
- assert(blockNodeAddr->gtType == TYP_BYREF);
- GenTree* commaNode = structVal;
- commaNode->gtType = TYP_BYREF;
- commaNode->gtOp.gtOp2 = blockNodeAddr;
- blockNode->gtOp.gtOp1 = commaNode;
- structVal = blockNode;
- alreadyNormalized = true;
+
+ // Is this GT_COMMA(op1, GT_COMMA())?
+ GenTree* parent = structVal;
+ if (blockNode->OperGet() == GT_COMMA)
+ {
+ // Find the last node in the comma chain.
+ do
+ {
+ assert(blockNode->gtType == structType);
+ parent = blockNode;
+ blockNode = blockNode->gtOp.gtOp2;
+ } while (blockNode->OperGet() == GT_COMMA);
+ }
+
+#ifdef FEATURE_SIMD
+ if (blockNode->OperGet() == GT_SIMD)
+ {
+ parent->gtOp.gtOp2 = impNormStructVal(blockNode, structHnd, curLevel, forceNormalization);
+ alreadyNormalized = true;
+ }
+ else
+#endif
+ {
+ assert(blockNode->OperIsBlk());
+
+ // Sink the GT_COMMA below the blockNode addr.
+ // That is GT_COMMA(op1, op2=blockNode) is tranformed into
+ // blockNode(GT_COMMA(TYP_BYREF, op1, op2's op1)).
+ //
+ // In case of a chained GT_COMMA case, we sink the last
+ // GT_COMMA below the blockNode addr.
+ GenTree* blockNodeAddr = blockNode->gtOp.gtOp1;
+ assert(blockNodeAddr->gtType == TYP_BYREF);
+ GenTree* commaNode = parent;
+ commaNode->gtType = TYP_BYREF;
+ commaNode->gtOp.gtOp2 = blockNodeAddr;
+ blockNode->gtOp.gtOp1 = commaNode;
+ if (parent == structVal)
+ {
+ structVal = blockNode;
+ }
+ alreadyNormalized = true;
+ }
}
break;
@@ -3240,7 +3269,8 @@ GenTreePtr Compiler::impInitializeArrayIntrinsic(CORINFO_SIG_INFO* sig)
// Returns the GenTree that should be used to do the intrinsic instead of the call.
// Returns NULL if an intrinsic cannot be used
-GenTreePtr Compiler::impIntrinsic(CORINFO_CLASS_HANDLE clsHnd,
+GenTreePtr Compiler::impIntrinsic(GenTreePtr newobjThis,
+ CORINFO_CLASS_HANDLE clsHnd,
CORINFO_METHOD_HANDLE method,
CORINFO_SIG_INFO* sig,
int memberRef,
@@ -3252,7 +3282,7 @@ GenTreePtr Compiler::impIntrinsic(CORINFO_CLASS_HANDLE clsHnd,
#if COR_JIT_EE_VERSION > 460
CorInfoIntrinsics intrinsicID = info.compCompHnd->getIntrinsicID(method, &mustExpand);
#else
- CorInfoIntrinsics intrinsicID = info.compCompHnd->getIntrinsicID(method);
+ CorInfoIntrinsics intrinsicID = info.compCompHnd->getIntrinsicID(method);
#endif
*pIntrinsicID = intrinsicID;
@@ -3576,7 +3606,33 @@ GenTreePtr Compiler::impIntrinsic(CORINFO_CLASS_HANDLE clsHnd,
retNode = op1;
break;
#endif
-
+ // Implement ByReference Ctor. This wraps the assignment of the ref into a byref-like field
+ // in a value type. The canonical example of this is Span<T>. In effect this is just a
+ // substitution. The parameter byref will be assigned into the newly allocated object.
+ case CORINFO_INTRINSIC_ByReference_Ctor:
+ {
+ // Remove call to constructor and directly assign the byref passed
+ // to the call to the first slot of the ByReference struct.
+ op1 = impPopStack().val;
+ GenTreePtr thisptr = newobjThis;
+ CORINFO_FIELD_HANDLE fldHnd = info.compCompHnd->getFieldInClass(clsHnd, 0);
+ GenTreePtr field = gtNewFieldRef(TYP_BYREF, fldHnd, thisptr, 0, false);
+ GenTreePtr assign = gtNewAssignNode(field, op1);
+ GenTreePtr byReferenceStruct = gtCloneExpr(thisptr->gtGetOp1());
+ assert(byReferenceStruct != nullptr);
+ impPushOnStack(byReferenceStruct, typeInfo(TI_STRUCT, clsHnd));
+ retNode = assign;
+ break;
+ }
+ // Implement ptr value getter for ByReference struct.
+ case CORINFO_INTRINSIC_ByReference_Value:
+ {
+ op1 = impPopStack().val;
+ CORINFO_FIELD_HANDLE fldHnd = info.compCompHnd->getFieldInClass(clsHnd, 0);
+ GenTreePtr field = gtNewFieldRef(TYP_BYREF, fldHnd, op1, 0, false);
+ retNode = field;
+ break;
+ }
default:
/* Unknown intrinsic */
break;
@@ -5359,29 +5415,23 @@ GenTreePtr Compiler::impTransformThis(GenTreePtr thisPtr,
}
//------------------------------------------------------------------------
-// impCanPInvokeInline: examine information from a call to see if the call
-// qualifies as an inline pinvoke.
-//
-// Arguments:
-// block - block contaning the call, or for inlinees, block
-// containing the call being inlined
+// impCanPInvokeInline: check whether PInvoke inlining should enabled in current method.
//
// Return Value:
-// true if this call qualifies as an inline pinvoke, false otherwise
+// true if PInvoke inlining should be enabled in current method, false otherwise
//
// Notes:
-// Checks basic legality and then a number of ambient conditions
-// where we could pinvoke but choose not to
+// Checks a number of ambient conditions where we could pinvoke but choose not to
-bool Compiler::impCanPInvokeInline(BasicBlock* block)
+bool Compiler::impCanPInvokeInline()
{
- return impCanPInvokeInlineCallSite(block) && getInlinePInvokeEnabled() && (!opts.compDbgCode) &&
- (compCodeOpt() != SMALL_CODE) && (!opts.compNoPInvokeInlineCB) // profiler is preventing inline pinvoke
+ return getInlinePInvokeEnabled() && (!opts.compDbgCode) && (compCodeOpt() != SMALL_CODE) &&
+ (!opts.compNoPInvokeInlineCB) // profiler is preventing inline pinvoke
;
}
//------------------------------------------------------------------------
-// impCanPInvokeInlineSallSite: basic legality checks using information
+// impCanPInvokeInlineCallSite: basic legality checks using information
// from a call to see if the call qualifies as an inline pinvoke.
//
// Arguments:
@@ -5410,6 +5460,17 @@ bool Compiler::impCanPInvokeInline(BasicBlock* block)
bool Compiler::impCanPInvokeInlineCallSite(BasicBlock* block)
{
+ if (block->hasHndIndex())
+ {
+ return false;
+ }
+
+ // The remaining limitations do not apply to CoreRT
+ if (IsTargetAbi(CORINFO_CORERT_ABI))
+ {
+ return true;
+ }
+
#ifdef _TARGET_AMD64_
// On x64, we disable pinvoke inlining inside of try regions.
// Here is the comment from JIT64 explaining why:
@@ -5431,12 +5492,13 @@ bool Compiler::impCanPInvokeInlineCallSite(BasicBlock* block)
//
// A desktop test case where this seems to matter is
// jit\jit64\ebvts\mcpp\sources2\ijw\__clrcall\vector_ctor_dtor.02\deldtor_clr.exe
- const bool inX64Try = block->hasTryIndex();
-#else
- const bool inX64Try = false;
+ if (block->hasTryIndex())
+ {
+ return false;
+ }
#endif // _TARGET_AMD64_
- return !inX64Try && !block->hasHndIndex();
+ return true;
}
//------------------------------------------------------------------------
@@ -5502,27 +5564,38 @@ void Compiler::impCheckForPInvokeCall(
}
optNativeCallCount++;
- if (opts.compMustInlinePInvokeCalli && methHnd == nullptr)
+ if (opts.jitFlags->IsSet(JitFlags::JIT_FLAG_IL_STUB) && methHnd == nullptr)
{
- // Always inline pinvoke.
+ // PInvoke CALLI in IL stubs must be inlined
}
else
{
- // Check legality and profitability.
- if (!impCanPInvokeInline(block))
+ // Check legality
+ if (!impCanPInvokeInlineCallSite(block))
{
return;
}
- if (info.compCompHnd->pInvokeMarshalingRequired(methHnd, sig))
+ // PInvoke CALL in IL stubs must be inlined on CoreRT. Skip the ambient conditions checks and
+ // profitability checks
+ if (!(opts.jitFlags->IsSet(JitFlags::JIT_FLAG_IL_STUB) && IsTargetAbi(CORINFO_CORERT_ABI)))
{
- return;
+ if (!impCanPInvokeInline())
+ {
+ return;
+ }
+
+ // Size-speed tradeoff: don't use inline pinvoke at rarely
+ // executed call sites. The non-inline version is more
+ // compact.
+ if (block->isRunRarely())
+ {
+ return;
+ }
}
- // Size-speed tradeoff: don't use inline pinvoke at rarely
- // executed call sites. The non-inline version is more
- // compact.
- if (block->isRunRarely())
+ // The expensive check should be last
+ if (info.compCompHnd->pInvokeMarshalingRequired(methHnd, sig))
{
return;
}
@@ -6189,7 +6262,7 @@ bool Compiler::impIsTailCallILPattern(bool tailPrefixed,
((nextOpcode == CEE_NOP) || ((nextOpcode == CEE_POP) && (++cntPop == 1)))); // Next opcode = nop or exactly
// one pop seen so far.
#else
- nextOpcode = (OPCODE)getU1LittleEndian(codeAddrOfNextOpcode);
+ nextOpcode = (OPCODE)getU1LittleEndian(codeAddrOfNextOpcode);
#endif
if (isCallPopAndRet)
@@ -6359,6 +6432,7 @@ var_types Compiler::impImportCall(OPCODE opcode,
eeGetSig(pResolvedToken->token, info.compScopeHnd, impTokenLookupContextHandle, &calliSig);
callRetTyp = JITtype2varType(calliSig.retType);
+ clsHnd = calliSig.retTypeClass;
call = impImportIndirectCall(&calliSig, ilOffset);
@@ -6387,6 +6461,16 @@ var_types Compiler::impImportCall(OPCODE opcode,
call->gtCall.callSig = new (this, CMK_CorSig) CORINFO_SIG_INFO;
*call->gtCall.callSig = calliSig;
#endif // DEBUG
+
+ if (IsTargetAbi(CORINFO_CORERT_ABI))
+ {
+ bool managedCall = (calliSig.callConv & GTF_CALL_UNMANAGED) == 0;
+ if (managedCall)
+ {
+ call->AsCall()->SetFatPointerCandidate();
+ setMethodHasFatPointer();
+ }
+ }
}
else // (opcode != CEE_CALLI)
{
@@ -6435,7 +6519,7 @@ var_types Compiler::impImportCall(OPCODE opcode,
if (mflags & CORINFO_FLG_DONT_INLINE_CALLER)
{
- compInlineResult->NoteFatal(InlineObservation::CALLEE_STACK_CRAWL_MARK);
+ compInlineResult->NoteFatal(InlineObservation::CALLEE_HAS_NOINLINE_CALLEE);
return callRetTyp;
}
@@ -6490,7 +6574,7 @@ var_types Compiler::impImportCall(OPCODE opcode,
// <NICE> Factor this into getCallInfo </NICE>
if ((mflags & CORINFO_FLG_INTRINSIC) && !pConstrainedResolvedToken)
{
- call = impIntrinsic(clsHnd, methHnd, sig, pResolvedToken->token, readonlyCall,
+ call = impIntrinsic(newobjThis, clsHnd, methHnd, sig, pResolvedToken->token, readonlyCall,
(canTailCall && (tailCall != 0)), &intrinsicID);
if (call != nullptr)
@@ -6533,7 +6617,6 @@ var_types Compiler::impImportCall(OPCODE opcode,
if ((mflags & CORINFO_FLG_VIRTUAL) && (mflags & CORINFO_FLG_EnC) && (opcode == CEE_CALLVIRT))
{
NO_WAY("Virtual call to a function added via EnC is not supported");
- goto DONE_CALL;
}
if ((sig->callConv & CORINFO_CALLCONV_MASK) != CORINFO_CALLCONV_DEFAULT &&
@@ -7469,10 +7552,8 @@ DONE:
}
}
-// Note: we assume that small return types are already normalized by the managed callee
-// or by the pinvoke stub for calls to unmanaged code.
-
-DONE_CALL:
+ // Note: we assume that small return types are already normalized by the managed callee
+ // or by the pinvoke stub for calls to unmanaged code.
if (!bIntrinsicImported)
{
@@ -7517,6 +7598,7 @@ DONE_CALL:
impMarkInlineCandidate(call, exactContextHnd, callInfo);
}
+DONE_CALL:
// Push or append the result of the call
if (callRetTyp == TYP_VOID)
{
@@ -7569,9 +7651,11 @@ DONE_CALL:
}
}
- if (call->gtOper == GT_CALL)
+ if (call->IsCall())
{
// Sometimes "call" is not a GT_CALL (if we imported an intrinsic that didn't turn into a call)
+
+ bool fatPointerCandidate = call->AsCall()->IsFatPointerCandidate();
if (varTypeIsStruct(callRetTyp))
{
call = impFixupCallStructReturn(call, sig->retTypeClass);
@@ -7580,6 +7664,7 @@ DONE_CALL:
if ((call->gtFlags & GTF_CALL_INLINE_CANDIDATE) != 0)
{
assert(opts.OptEnabled(CLFLG_INLINING));
+ assert(!fatPointerCandidate); // We should not try to inline calli.
// Make the call its own tree (spill the stack if needed).
impAppendTree(call, (unsigned)CHECK_SPILL_ALL, impCurStmtOffs);
@@ -7589,6 +7674,24 @@ DONE_CALL:
}
else
{
+ if (fatPointerCandidate)
+ {
+ // fatPointer candidates should be in statements of the form call() or var = call().
+ // Such form allows to find statements with fat calls without walking through whole trees
+ // and removes problems with cutting trees.
+ assert(!bIntrinsicImported);
+ assert(IsTargetAbi(CORINFO_CORERT_ABI));
+ if (call->OperGet() != GT_LCL_VAR) // can be already converted by impFixupCallStructReturn.
+ {
+ unsigned calliSlot = lvaGrabTemp(true DEBUGARG("calli"));
+ LclVarDsc* varDsc = &lvaTable[calliSlot];
+ varDsc->lvVerTypeInfo = tiRetVal;
+ impAssignTempGen(calliSlot, call, clsHnd, (unsigned)CHECK_SPILL_NONE);
+ // impAssignTempGen can change src arg list and return type for call that returns struct.
+ var_types type = genActualType(lvaTable[calliSlot].TypeGet());
+ call = gtNewLclvNode(calliSlot, type);
+ }
+ }
// For non-candidates we must also spill, since we
// might have locals live on the eval stack that this
// call can modify.
diff --git a/src/jit/inline.def b/src/jit/inline.def
index ff0b21100e..2a6f5a3f73 100644
--- a/src/jit/inline.def
+++ b/src/jit/inline.def
@@ -39,6 +39,7 @@ INLINE_OBSERVATION(HAS_LEAVE, bool, "has leave",
INLINE_OBSERVATION(HAS_MANAGED_VARARGS, bool, "managed varargs", FATAL, CALLEE)
INLINE_OBSERVATION(HAS_NATIVE_VARARGS, bool, "native varargs", FATAL, CALLEE)
INLINE_OBSERVATION(HAS_NO_BODY, bool, "has no body", FATAL, CALLEE)
+INLINE_OBSERVATION(HAS_NOINLINE_CALLEE, bool, "in corelib, noinline callee", FATAL, CALLEE)
INLINE_OBSERVATION(HAS_NULL_FOR_LDELEM, bool, "has null pointer for ldelem", FATAL, CALLEE)
INLINE_OBSERVATION(IS_ARRAY_METHOD, bool, "is array method", FATAL, CALLEE)
INLINE_OBSERVATION(IS_GENERIC_VIRTUAL, bool, "generic virtual", FATAL, CALLEE)
@@ -55,7 +56,6 @@ INLINE_OBSERVATION(NEEDS_SECURITY_CHECK, bool, "needs security check",
INLINE_OBSERVATION(NO_METHOD_INFO, bool, "cannot get method info", FATAL, CALLEE)
INLINE_OBSERVATION(NOT_PROFITABLE_INLINE, bool, "unprofitable inline", FATAL, CALLEE)
INLINE_OBSERVATION(RANDOM_REJECT, bool, "random reject", FATAL, CALLEE)
-INLINE_OBSERVATION(STACK_CRAWL_MARK, bool, "uses stack crawl mark", FATAL, CALLEE)
INLINE_OBSERVATION(STFLD_NEEDS_HELPER, bool, "stfld needs helper", FATAL, CALLEE)
INLINE_OBSERVATION(THROW_WITH_INVALID_STACK, bool, "throw with invalid stack", FATAL, CALLEE)
INLINE_OBSERVATION(TOO_MANY_ARGUMENTS, bool, "too many arguments", FATAL, CALLEE)
diff --git a/src/jit/instr.cpp b/src/jit/instr.cpp
index edc4483c6b..7332ba6c71 100644
--- a/src/jit/instr.cpp
+++ b/src/jit/instr.cpp
@@ -3513,6 +3513,12 @@ instruction CodeGen::ins_CopyIntToFloat(var_types srcType, var_types dstType)
{
// On SSE2/AVX - the same instruction is used for moving double/quad word to XMM/YMM register.
assert((srcType == TYP_INT) || (srcType == TYP_UINT) || (srcType == TYP_LONG) || (srcType == TYP_ULONG));
+
+#if !defined(_TARGET_64BIT_)
+ // No 64-bit registers on x86.
+ assert((srcType != TYP_LONG) && (srcType != TYP_ULONG));
+#endif // !defined(_TARGET_64BIT_)
+
return INS_mov_i2xmm;
}
@@ -3520,6 +3526,12 @@ instruction CodeGen::ins_CopyFloatToInt(var_types srcType, var_types dstType)
{
// On SSE2/AVX - the same instruction is used for moving double/quad word of XMM/YMM to an integer register.
assert((dstType == TYP_INT) || (dstType == TYP_UINT) || (dstType == TYP_LONG) || (dstType == TYP_ULONG));
+
+#if !defined(_TARGET_64BIT_)
+ // No 64-bit registers on x86.
+ assert((dstType != TYP_LONG) && (dstType != TYP_ULONG));
+#endif // !defined(_TARGET_64BIT_)
+
return INS_mov_xmm2i;
}
diff --git a/src/jit/instrsxarch.h b/src/jit/instrsxarch.h
index 4317334bf2..8ab3a845ba 100644
--- a/src/jit/instrsxarch.h
+++ b/src/jit/instrsxarch.h
@@ -320,6 +320,9 @@ INST3( pcmpgtq, "pcmpgtq" , 0, IUM_WR, 0, 0, BAD_CODE, BAD_CODE, SS
INST3( pmulld, "pmulld" , 0, IUM_WR, 0, 0, BAD_CODE, BAD_CODE, SSE38(0x40)) // Packed multiply 32 bit unsigned integers and store lower 32 bits of each result
INST3( ptest, "ptest" , 0, IUM_WR, 0, 0, BAD_CODE, BAD_CODE, SSE38(0x17)) // Packed logical compare
INST3( phaddd, "phaddd" , 0, IUM_WR, 0, 0, BAD_CODE, BAD_CODE, SSE38(0x02)) // Packed horizontal add
+INST3( pabsb, "pabsb" , 0, IUM_WR, 0, 0, BAD_CODE, BAD_CODE, SSE38(0x1C)) // Packed absolute value of bytes
+INST3( pabsw, "pabsw" , 0, IUM_WR, 0, 0, BAD_CODE, BAD_CODE, SSE38(0x1D)) // Packed absolute value of 16-bit integers
+INST3( pabsd, "pabsd" , 0, IUM_WR, 0, 0, BAD_CODE, BAD_CODE, SSE38(0x1E)) // Packed absolute value of 32-bit integers
INST3(LAST_SSE4_INSTRUCTION, "LAST_SSE4_INSTRUCTION", 0, IUM_WR, 0, 0, BAD_CODE, BAD_CODE, BAD_CODE)
INST3(FIRST_AVX_INSTRUCTION, "FIRST_AVX_INSTRUCTION", 0, IUM_WR, 0, 0, BAD_CODE, BAD_CODE, BAD_CODE)
diff --git a/src/jit/jit.h b/src/jit/jit.h
index 220294f825..05b154e15a 100644
--- a/src/jit/jit.h
+++ b/src/jit/jit.h
@@ -416,14 +416,6 @@ typedef ptrdiff_t ssize_t;
//=============================================================================
-#define FANCY_ARRAY_OPT 0 // optimize more complex index checks
-
-//=============================================================================
-
-#define LONG_ASG_OPS 0 // implementation isn't complete yet
-
-//=============================================================================
-
#define OPT_MULT_ADDSUB 1 // optimize consecutive "lclVar += or -= icon"
#define OPT_BOOL_OPS 1 // optimize boolean operations
@@ -699,11 +691,7 @@ inline unsigned int unsigned_abs(int x)
#ifdef _TARGET_64BIT_
inline size_t unsigned_abs(ssize_t x)
{
-#ifndef FEATURE_PAL
return ((size_t)abs(x));
-#else // !FEATURE_PAL
- return ((size_t)labs(x));
-#endif // !FEATURE_PAL
}
#endif // _TARGET_64BIT_
diff --git a/src/jit/jit.settings.targets b/src/jit/jit.settings.targets
index 6c0474a00c..8749b80242 100644
--- a/src/jit/jit.settings.targets
+++ b/src/jit/jit.settings.targets
@@ -95,9 +95,11 @@
<ItemGroup Condition="'$(TargetArch)'=='i386'">
<CppCompile Include="..\emitXArch.cpp" />
<CppCompile Include="..\TargetX86.cpp" />
+ <CppCompile Include="..\unwindx86.cpp" />
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='True'" Include="..\stackfp.cpp" />
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\DecomposeLongs.cpp" />
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\LowerXArch.cpp" />
+ <CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\lsraxarch.cpp" />
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\CodeGenXArch.cpp" />
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\SIMD.cpp" />
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\SIMDCodeGenXArch.cpp" />
@@ -107,6 +109,7 @@
<CppCompile Include="..\emitXArch.cpp" />
<CppCompile Include="..\TargetAmd64.cpp" />
<CppCompile Include="..\LowerXArch.cpp" />
+ <CppCompile Include="..\lsraxarch.cpp" />
<CppCompile Include="..\CodeGenXArch.cpp" />
<CppCompile Include="..\SIMD.cpp" />
<CppCompile Include="..\SIMDCodeGenXArch.cpp" />
@@ -118,6 +121,7 @@
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='True'" Include="..\registerfp.cpp" />
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\DecomposeLongs.cpp" />
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\LowerArm.cpp" />
+ <CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\lsraarm.cpp" />
<CppCompile Condition="'$(ClDefines.Contains(`LEGACY_BACKEND`))'=='False'" Include="..\CodeGenArm.cpp" />
<CppCompile Include="..\unwindArm.cpp" />
</ItemGroup>
@@ -126,6 +130,7 @@
<CppCompile Include="..\emitarm64.cpp" />
<CppCompile Include="..\TargetArm64.cpp" />
<CppCompile Include="..\LowerArm64.cpp" />
+ <CppCompile Include="..\lsraarm64.cpp" />
<CppCompile Include="..\CodeGenArm64.cpp" />
<CppCompile Include="..\unwindArm.cpp" />
<CppCompile Include="..\unwindArm64.cpp" />
diff --git a/src/jit/jitconfigvalues.h b/src/jit/jitconfigvalues.h
index 39a2505246..4623fe8268 100644
--- a/src/jit/jitconfigvalues.h
+++ b/src/jit/jitconfigvalues.h
@@ -204,13 +204,14 @@ CONFIG_INTEGER(AltJitAssertOnNYI, W("AltJitAssertOnNYI"), 1) // Controls the Alt
CONFIG_INTEGER(EnableSSE3_4, W("EnableSSE3_4"), 1) // Enable SSE3, SSSE3, SSE 4.1 and 4.2 instruction set as default
#endif
-#if defined(_TARGET_AMD64_)
-CONFIG_INTEGER(EnableAVX, W("EnableAVX"), 1) // Enable AVX instruction set for wide operations as default.
-// When both AVX and SSE3_4 are set, we will use the most capable instruction set available
-// which will prefer AVX over SSE3/4.
-#else // !defined(_TARGET_AMD64_)
-CONFIG_INTEGER(EnableAVX, W("EnableAVX"), 0) // Enable AVX instruction set for wide operations as default
-#endif // defined(_TARGET_AMD64_)
+#if defined(_TARGET_AMD64_) || defined(_TARGET_X86_)
+// Enable AVX instruction set for wide operations as default. When both AVX and SSE3_4 are set, we will use the most
+// capable instruction set available which will prefer AVX over SSE3/4.
+CONFIG_INTEGER(EnableAVX, W("EnableAVX"), 1)
+#else // !defined(_TARGET_AMD64_) && !defined(_TARGET_X86_)
+// Enable AVX instruction set for wide operations as default
+CONFIG_INTEGER(EnableAVX, W("EnableAVX"), 0)
+#endif // !defined(_TARGET_AMD64_) && !defined(_TARGET_X86_)
#if !defined(DEBUG) && !defined(_DEBUG)
CONFIG_INTEGER(JitEnableNoWayAssert, W("JitEnableNoWayAssert"), 0)
@@ -274,6 +275,16 @@ CONFIG_INTEGER(JitInlinePolicyModel, W("JitInlinePolicyModel"), 0)
CONFIG_INTEGER(JitEECallTimingInfo, W("JitEECallTimingInfo"), 0)
+#if defined(DEBUG)
+#if defined(FEATURE_CORECLR)
+CONFIG_INTEGER(JitEnableFinallyCloning, W("JitEnableFinallyCloning"), 1)
+CONFIG_INTEGER(JitEnableRemoveEmptyTry, W("JitEnableRemoveEmptyTry"), 1)
+#else
+CONFIG_INTEGER(JitEnableFinallyCloning, W("JitEnableFinallyCloning"), 0)
+CONFIG_INTEGER(JitEnableRemoveEmptyTry, W("JitEnableRemoveEmptyTry"), 0)
+#endif // defined(FEATURE_CORECLR)
+#endif // DEBUG
+
#undef CONFIG_INTEGER
#undef CONFIG_STRING
#undef CONFIG_METHODSET
diff --git a/src/jit/jiteh.cpp b/src/jit/jiteh.cpp
index 4b3ceaecf6..2d0eee366f 100644
--- a/src/jit/jiteh.cpp
+++ b/src/jit/jiteh.cpp
@@ -93,7 +93,7 @@ bool EHblkDsc::HasFinallyHandler()
bool EHblkDsc::HasFaultHandler()
{
- return ebdHandlerType == EH_HANDLER_FAULT;
+ return (ebdHandlerType == EH_HANDLER_FAULT) || (ebdHandlerType == EH_HANDLER_FAULT_WAS_FINALLY);
}
bool EHblkDsc::HasFinallyOrFaultHandler()
@@ -2426,6 +2426,11 @@ bool Compiler::fgNormalizeEHCase2()
// this once per dup.
fgReplaceJumpTarget(predBlock, newTryStart, insertBeforeBlk);
+ // Need to adjust ref counts here since we're retargeting edges.
+ newTryStart->bbRefs++;
+ assert(insertBeforeBlk->countOfInEdges() > 0);
+ insertBeforeBlk->bbRefs--;
+
#ifdef DEBUG
if (verbose)
{
diff --git a/src/jit/jiteh.h b/src/jit/jiteh.h
index 573116282c..502d2153c2 100644
--- a/src/jit/jiteh.h
+++ b/src/jit/jiteh.h
@@ -27,7 +27,8 @@ enum EHHandlerType
EH_HANDLER_CATCH = 0x1, // Don't use zero (to aid debugging uninitialized memory)
EH_HANDLER_FILTER,
EH_HANDLER_FAULT,
- EH_HANDLER_FINALLY
+ EH_HANDLER_FINALLY,
+ EH_HANDLER_FAULT_WAS_FINALLY
};
// ToCORINFO_EH_CLAUSE_FLAGS: Convert an internal EHHandlerType to a CORINFO_EH_CLAUSE_FLAGS value
@@ -41,6 +42,7 @@ inline CORINFO_EH_CLAUSE_FLAGS ToCORINFO_EH_CLAUSE_FLAGS(EHHandlerType type)
case EH_HANDLER_FILTER:
return CORINFO_EH_CLAUSE_FILTER;
case EH_HANDLER_FAULT:
+ case EH_HANDLER_FAULT_WAS_FINALLY:
return CORINFO_EH_CLAUSE_FAULT;
case EH_HANDLER_FINALLY:
return CORINFO_EH_CLAUSE_FINALLY;
diff --git a/src/jit/lclvars.cpp b/src/jit/lclvars.cpp
index ea9c573a02..b4e4cc6e55 100644
--- a/src/jit/lclvars.cpp
+++ b/src/jit/lclvars.cpp
@@ -465,7 +465,7 @@ void Compiler::lvaInitRetBuffArg(InitVarDscInfo* varDscInfo)
varDsc->lvArgReg = genMapIntRegArgNumToRegNum(retBuffArgNum);
}
-#if FEATURE_MULTIREG__ARGS
+#if FEATURE_MULTIREG_ARGS
varDsc->lvOtherArgReg = REG_NA;
#endif
varDsc->setPrefReg(varDsc->lvArgReg, this);
@@ -488,6 +488,16 @@ void Compiler::lvaInitRetBuffArg(InitVarDscInfo* varDscInfo)
varDsc->lvType = TYP_I_IMPL;
}
}
+#ifdef FEATURE_SIMD
+ else if (featureSIMD && varTypeIsSIMD(info.compRetType))
+ {
+ varDsc->lvSIMDType = true;
+ varDsc->lvBaseType =
+ getBaseTypeAndSizeOfSIMDType(info.compMethodInfo->args.retTypeClass, &varDsc->lvExactSize);
+ assert(varDsc->lvBaseType != TYP_UNKNOWN);
+ }
+#endif // FEATURE_SIMD
+
assert(isValidIntArgReg(varDsc->lvArgReg));
#ifdef DEBUG
@@ -1059,7 +1069,7 @@ void Compiler::lvaInitVarArgsHandle(InitVarDscInfo* varDscInfo)
varDsc->lvIsRegArg = 1;
varDsc->lvArgReg = genMapRegArgNumToRegNum(varArgHndArgNum, TYP_I_IMPL);
-#if FEATURE_MULTIREG__ARGS
+#if FEATURE_MULTIREG_ARGS
varDsc->lvOtherArgReg = REG_NA;
#endif
varDsc->setPrefReg(varDsc->lvArgReg, this);
@@ -1414,9 +1424,16 @@ void Compiler::lvaCanPromoteStructType(CORINFO_CLASS_HANDLE typeHnd,
if (typeHnd != StructPromotionInfo->typeHnd)
{
- // sizeof(double) represents the size of the largest primitive type that we can struct promote
- // In the future this may be changing to XMM_REGSIZE_BYTES
- const int MaxOffset = MAX_NumOfFieldsInPromotableStruct * sizeof(double); // must be a compile time constant
+ // sizeof(double) represents the size of the largest primitive type that we can struct promote.
+ // In the future this may be changing to XMM_REGSIZE_BYTES.
+ // Note: MaxOffset is used below to declare a local array, and therefore must be a compile-time constant.
+ CLANG_FORMAT_COMMENT_ANCHOR;
+#ifdef FEATURE_SIMD
+ // This will allow promotion of 2 Vector<T> fields on AVX2, or 4 Vector<T> fields on SSE2.
+ const int MaxOffset = MAX_NumOfFieldsInPromotableStruct * XMM_REGSIZE_BYTES;
+#else // !FEATURE_SIMD
+ const int MaxOffset = MAX_NumOfFieldsInPromotableStruct * sizeof(double);
+#endif // !FEATURE_SIMD
assert((BYTE)MaxOffset == MaxOffset); // because lvaStructFieldInfo.fldOffset is byte-sized
assert((BYTE)MAX_NumOfFieldsInPromotableStruct ==
@@ -1507,13 +1524,31 @@ void Compiler::lvaCanPromoteStructType(CORINFO_CLASS_HANDLE typeHnd,
CorInfoType corType = info.compCompHnd->getFieldType(pFieldInfo->fldHnd, &pFieldInfo->fldTypeHnd);
var_types varType = JITtype2varType(corType);
pFieldInfo->fldType = varType;
- pFieldInfo->fldSize = genTypeSize(varType);
+ unsigned size = genTypeSize(varType);
+ pFieldInfo->fldSize = size;
if (varTypeIsGC(varType))
{
containsGCpointers = true;
}
+#ifdef FEATURE_SIMD
+ // Check to see if this is a SIMD type.
+ // We will only check this if we have already found a SIMD type, which will be true if
+ // we have encountered any SIMD intrinsics.
+ if (usesSIMDTypes() && (pFieldInfo->fldSize == 0) && isSIMDClass(pFieldInfo->fldTypeHnd))
+ {
+ unsigned simdSize;
+ var_types simdBaseType = getBaseTypeAndSizeOfSIMDType(pFieldInfo->fldTypeHnd, &simdSize);
+ if (simdBaseType != TYP_UNKNOWN)
+ {
+ varType = getSIMDTypeForSize(simdSize);
+ pFieldInfo->fldType = varType;
+ pFieldInfo->fldSize = simdSize;
+ }
+ }
+#endif // FEATURE_SIMD
+
if (pFieldInfo->fldSize == 0)
{
// Non-primitive struct field. Don't promote.
@@ -1556,8 +1591,10 @@ void Compiler::lvaCanPromoteStructType(CORINFO_CLASS_HANDLE typeHnd,
#endif // _TARGET_ARM_
}
- // If we saw any GC pointer fields above then the CORINFO_FLG_CONTAINS_GC_PTR has to be set!
- noway_assert((containsGCpointers == false) || ((typeFlags & CORINFO_FLG_CONTAINS_GC_PTR) != 0));
+ // If we saw any GC pointer or by-ref fields above then CORINFO_FLG_CONTAINS_GC_PTR or
+ // CORINFO_FLG_CONTAINS_STACK_PTR has to be set!
+ noway_assert((containsGCpointers == false) ||
+ ((typeFlags & (CORINFO_FLG_CONTAINS_GC_PTR | CORINFO_FLG_CONTAINS_STACK_PTR)) != 0));
// If we have "Custom Layout" then we might have an explicit Size attribute
// Managed C++ uses this for its structs, such C++ types will not contain GC pointers.
@@ -1683,7 +1720,7 @@ void Compiler::lvaPromoteStructVar(unsigned lclNum, lvaStructPromotionInfo* Stru
{
lvaStructFieldInfo* pFieldInfo = &StructPromotionInfo->fields[index];
- if (varTypeIsFloating(pFieldInfo->fldType))
+ if (varTypeIsFloating(pFieldInfo->fldType) || varTypeIsSIMD(pFieldInfo->fldType))
{
lvaTable[lclNum].lvContainsFloatingFields = 1;
// Whenever we promote a struct that contains a floating point field
@@ -1727,12 +1764,32 @@ void Compiler::lvaPromoteStructVar(unsigned lclNum, lvaStructPromotionInfo* Stru
fieldVarDsc->lvIsRegArg = true;
fieldVarDsc->lvArgReg = varDsc->lvArgReg;
fieldVarDsc->setPrefReg(varDsc->lvArgReg, this); // Set the preferred register
+#if FEATURE_MULTIREG_ARGS && defined(FEATURE_SIMD)
+ if (varTypeIsSIMD(fieldVarDsc))
+ {
+ // This field is a SIMD type, and will be considered to be passed in multiple registers
+ // if the parent struct was. Note that this code relies on the fact that if there is
+ // a SIMD field of an enregisterable struct, it is the only field.
+ // We will assert that, in case future changes are made to the ABI.
+ assert(varDsc->lvFieldCnt == 1);
+ fieldVarDsc->lvOtherArgReg = varDsc->lvOtherArgReg;
+ }
+#endif // FEATURE_MULTIREG_ARGS && defined(FEATURE_SIMD)
lvaMarkRefsWeight = BB_UNITY_WEIGHT; // incRefCnts can use this compiler global variable
fieldVarDsc->incRefCnts(BB_UNITY_WEIGHT, this); // increment the ref count for prolog initialization
}
#endif
+#ifdef FEATURE_SIMD
+ if (varTypeIsSIMD(pFieldInfo->fldType))
+ {
+ // Set size to zero so that lvaSetStruct will appropriately set the SIMD-relevant fields.
+ fieldVarDsc->lvExactSize = 0;
+ lvaSetStruct(varNum, pFieldInfo->fldTypeHnd, false, true);
+ }
+#endif // FEATURE_SIMD
+
#ifdef DEBUG
// This temporary should not be converted to a double in stress mode,
// because we introduce assigns to it after the stress conversion
@@ -1947,14 +2004,14 @@ bool Compiler::lvaIsMultiregStruct(LclVarDsc* varDsc)
if (howToPassStruct == SPK_ByValueAsHfa)
{
- assert(type = TYP_STRUCT);
+ assert(type == TYP_STRUCT);
return true;
}
#if defined(FEATURE_UNIX_AMD64_STRUCT_PASSING) || defined(_TARGET_ARM64_)
if (howToPassStruct == SPK_ByValue)
{
- assert(type = TYP_STRUCT);
+ assert(type == TYP_STRUCT);
return true;
}
#endif
@@ -2029,7 +2086,6 @@ void Compiler::lvaSetStruct(unsigned varNum, CORINFO_CLASS_HANDLE typeHnd, bool
}
else
{
- assert(varDsc->lvExactSize != 0);
#if FEATURE_SIMD
assert(!varTypeIsSIMD(varDsc) || (varDsc->lvBaseType != TYP_UNKNOWN));
#endif // FEATURE_SIMD
@@ -3082,37 +3138,6 @@ void Compiler::lvaMarkLclRefs(GenTreePtr tree)
#endif
}
-#if FANCY_ARRAY_OPT
-
- /* Special case: assignment node */
-
- if (tree->gtOper == GT_ASG)
- {
- if (tree->gtType == TYP_INT)
- {
- unsigned lclNum1;
- LclVarDsc* varDsc1;
-
- GenTreePtr op1 = tree->gtOp.gtOp1;
-
- if (op1->gtOper != GT_LCL_VAR)
- return;
-
- lclNum1 = op1->gtLclVarCommon.gtLclNum;
- noway_assert(lclNum1 < lvaCount);
- varDsc1 = lvaTable + lclNum1;
-
- if (varDsc1->lvAssignOne)
- varDsc1->lvAssignTwo = true;
- else
- varDsc1->lvAssignOne = true;
- }
-
- return;
- }
-
-#endif
-
#ifdef _TARGET_XARCH_
/* Special case: integer shift node by a variable amount */
@@ -5750,6 +5775,7 @@ void Compiler::lvaAlignFrame()
#elif defined(_TARGET_X86_)
+#if DOUBLE_ALIGN
if (genDoubleAlign())
{
// Double Frame Alignement for x86 is handled in Compiler::lvaAssignVirtualFrameOffsetsToLocals()
@@ -5760,6 +5786,30 @@ void Compiler::lvaAlignFrame()
lvaIncrementFrameSize(sizeof(void*));
}
}
+#endif
+
+ if (STACK_ALIGN > REGSIZE_BYTES)
+ {
+ if (lvaDoneFrameLayout != FINAL_FRAME_LAYOUT)
+ {
+ // If we are not doing final layout, we don't know the exact value of compLclFrameSize
+ // and thus do not know how much we will need to add in order to be aligned.
+ // We add the maximum pad that we could ever have (which is 12)
+ lvaIncrementFrameSize(STACK_ALIGN - REGSIZE_BYTES);
+ }
+
+ // Align the stack with STACK_ALIGN value.
+ int adjustFrameSize = compLclFrameSize;
+#if defined(UNIX_X86_ABI)
+ // we need to consider spilled register(s) plus return address and/or EBP
+ int adjustCount = compCalleeRegsPushed + 1 + (codeGen->isFramePointerUsed() ? 1 : 0);
+ adjustFrameSize += (adjustCount * REGSIZE_BYTES) % STACK_ALIGN;
+#endif
+ if ((adjustFrameSize % STACK_ALIGN) != 0)
+ {
+ lvaIncrementFrameSize(STACK_ALIGN - (adjustFrameSize % STACK_ALIGN));
+ }
+ }
#else
NYI("TARGET specific lvaAlignFrame");
diff --git a/src/jit/lir.cpp b/src/jit/lir.cpp
index 35dd1815ef..6eb8a49aca 100644
--- a/src/jit/lir.cpp
+++ b/src/jit/lir.cpp
@@ -1494,9 +1494,13 @@ bool LIR::Range::CheckLIR(Compiler* compiler, bool checkUnusedValues) const
}
else if (!def->IsValue())
{
- // Calls may contain "uses" of nodes that do not produce a value. This is an artifact of
- // the HIR and should probably be fixed, but doing so is an unknown amount of work.
- assert(node->OperGet() == GT_CALL);
+ // Stack arguments do not produce a value, but they are considered children of the call.
+ // It may be useful to remove these from being call operands, but that may also impact
+ // other code that relies on being able to reach all the operands from a call node.
+ // The GT_NOP case is because sometimes we eliminate stack argument stores as dead, but
+ // instead of removing them we replace with a NOP.
+ assert((node->OperGet() == GT_CALL) &&
+ (def->OperIsStore() || (def->OperGet() == GT_PUTARG_STK) || (def->OperGet() == GT_NOP)));
continue;
}
diff --git a/src/jit/liveness.cpp b/src/jit/liveness.cpp
index 423d72b9b2..c6663185e4 100644
--- a/src/jit/liveness.cpp
+++ b/src/jit/liveness.cpp
@@ -19,34 +19,15 @@
*
* Helper for Compiler::fgPerBlockLocalVarLiveness().
* The goal is to compute the USE and DEF sets for a basic block.
- * However with the new improvement to the data flow analysis (DFA),
- * we do not mark x as used in x = f(x) when there are no side effects in f(x).
- * 'asgdLclVar' is set when 'tree' is part of an expression with no side-effects
- * which is assigned to asgdLclVar, ie. asgdLclVar = (... tree ...)
*/
-void Compiler::fgMarkUseDef(GenTreeLclVarCommon* tree, GenTree* asgdLclVar)
+void Compiler::fgMarkUseDef(GenTreeLclVarCommon* tree)
{
- bool rhsUSEDEF = false;
- unsigned lclNum;
- unsigned lhsLclNum;
- LclVarDsc* varDsc;
+ assert((tree->OperIsLocal() && (tree->OperGet() != GT_PHI_ARG)) || tree->OperIsLocalAddr());
- noway_assert(tree->gtOper == GT_LCL_VAR || tree->gtOper == GT_LCL_VAR_ADDR || tree->gtOper == GT_LCL_FLD ||
- tree->gtOper == GT_LCL_FLD_ADDR || tree->gtOper == GT_STORE_LCL_VAR ||
- tree->gtOper == GT_STORE_LCL_FLD);
-
- if (tree->gtOper == GT_LCL_VAR || tree->gtOper == GT_LCL_VAR_ADDR || tree->gtOper == GT_STORE_LCL_VAR)
- {
- lclNum = tree->gtLclNum;
- }
- else
- {
- noway_assert(tree->OperIsLocalField());
- lclNum = tree->gtLclFld.gtLclNum;
- }
+ const unsigned lclNum = tree->gtLclNum;
+ assert(lclNum < lvaCount);
- noway_assert(lclNum < lvaCount);
- varDsc = lvaTable + lclNum;
+ LclVarDsc* const varDsc = &lvaTable[lclNum];
// We should never encounter a reference to a lclVar that has a zero refCnt.
if (varDsc->lvRefCnt == 0 && (!varTypeIsPromotable(varDsc) || !varDsc->lvPromoted))
@@ -56,121 +37,80 @@ void Compiler::fgMarkUseDef(GenTreeLclVarCommon* tree, GenTree* asgdLclVar)
varDsc->lvRefCnt = 1;
}
- // NOTE: the analysis done below is neither necessary nor correct for LIR: it depends on
- // the nodes that precede `asgdLclVar` in execution order to factor into the dataflow for the
- // value being assigned to the local var, which is not necessarily the case without tree
- // order. Furthermore, LIR is always traversed in an order that reflects the dataflow for the
- // block.
- if (asgdLclVar != nullptr)
- {
- assert(!compCurBB->IsLIR());
-
- /* we have an assignment to a local var : asgdLclVar = ... tree ...
- * check for x = f(x) case */
+ const bool isDef = (tree->gtFlags & GTF_VAR_DEF) != 0;
+ const bool isUse = !isDef || ((tree->gtFlags & (GTF_VAR_USEASG | GTF_VAR_USEDEF)) != 0);
- noway_assert(asgdLclVar->gtOper == GT_LCL_VAR || asgdLclVar->gtOper == GT_STORE_LCL_VAR);
- noway_assert(asgdLclVar->gtFlags & GTF_VAR_DEF);
+ if (varDsc->lvTracked)
+ {
+ assert(varDsc->lvVarIndex < lvaTrackedCount);
- lhsLclNum = asgdLclVar->gtLclVarCommon.gtLclNum;
+ // We don't treat stores to tracked locals as modifications of ByrefExposed memory;
+ // Make sure no tracked local is addr-exposed, to make sure we don't incorrectly CSE byref
+ // loads aliasing it across a store to it.
+ assert(!varDsc->lvAddrExposed);
- if ((lhsLclNum == lclNum) && ((tree->gtFlags & GTF_VAR_DEF) == 0) && (tree != asgdLclVar))
+ if (isUse && !VarSetOps::IsMember(this, fgCurDefSet, varDsc->lvVarIndex))
{
- /* bingo - we have an x = f(x) case */
- asgdLclVar->gtFlags |= GTF_VAR_USEDEF;
- rhsUSEDEF = true;
+ // This is an exposed use; add it to the set of uses.
+ VarSetOps::AddElemD(this, fgCurUseSet, varDsc->lvVarIndex);
}
- }
- /* Is this a tracked variable? */
-
- if (varDsc->lvTracked)
- {
- noway_assert(varDsc->lvVarIndex < lvaTrackedCount);
-
- if ((tree->gtFlags & GTF_VAR_DEF) != 0 && (tree->gtFlags & (GTF_VAR_USEASG | GTF_VAR_USEDEF)) == 0)
+ if (isDef)
{
- // if (!(fgCurUseSet & bitMask)) printf("V%02u,T%02u def at %08p\n", lclNum, varDsc->lvVarIndex, tree);
+ // This is a def, add it to the set of defs.
VarSetOps::AddElemD(this, fgCurDefSet, varDsc->lvVarIndex);
}
- else
+ }
+ else
+ {
+ if (varDsc->lvAddrExposed)
{
- // if (!(fgCurDefSet & bitMask))
- // {
- // printf("V%02u,T%02u use at ", lclNum, varDsc->lvVarIndex);
- // printTreeID(tree);
- // printf("\n");
- // }
-
- /* We have the following scenarios:
- * 1. "x += something" - in this case x is flagged GTF_VAR_USEASG
- * 2. "x = ... x ..." - the LHS x is flagged GTF_VAR_USEDEF,
- * the RHS x is has rhsUSEDEF = true
- * (both set by the code above)
- *
- * We should not mark an USE of x in the above cases provided the value "x" is not used
- * further up in the tree. For example "while (i++)" is required to mark i as used.
- */
+ // Reflect the effect on ByrefExposed memory
- /* make sure we don't include USEDEF variables in the USE set
- * The first test is for LSH, the second (!rhsUSEDEF) is for any var in the RHS */
-
- if ((tree->gtFlags & (GTF_VAR_USEASG | GTF_VAR_USEDEF)) == 0)
+ if (isUse)
{
- /* Not a special flag - check to see if used to assign to itself */
-
- if (rhsUSEDEF)
- {
- /* assign to itself - do not include it in the USE set */
- if (!opts.MinOpts() && !opts.compDbgCode)
- {
- return;
- }
- }
+ fgCurMemoryUse |= memoryKindSet(ByrefExposed);
}
-
- /* Fall through for the "good" cases above - add the variable to the USE set */
-
- if (!VarSetOps::IsMember(this, fgCurDefSet, varDsc->lvVarIndex))
+ if (isDef)
{
- VarSetOps::AddElemD(this, fgCurUseSet, varDsc->lvVarIndex);
- }
+ fgCurMemoryDef |= memoryKindSet(ByrefExposed);
- // For defs, also add to the (all) def set.
- if ((tree->gtFlags & GTF_VAR_DEF) != 0)
- {
- VarSetOps::AddElemD(this, fgCurDefSet, varDsc->lvVarIndex);
+ // We've found a store that modifies ByrefExposed
+ // memory but not GcHeap memory, so track their
+ // states separately.
+ byrefStatesMatchGcHeapStates = false;
}
}
- }
- else if (varTypeIsStruct(varDsc))
- {
- noway_assert(!varDsc->lvTracked);
- lvaPromotionType promotionType = lvaGetPromotionType(varDsc);
-
- if (promotionType != PROMOTION_TYPE_NONE)
+ if (varTypeIsStruct(varDsc))
{
- VARSET_TP VARSET_INIT_NOCOPY(bitMask, VarSetOps::MakeEmpty(this));
+ lvaPromotionType promotionType = lvaGetPromotionType(varDsc);
- for (unsigned i = varDsc->lvFieldLclStart; i < varDsc->lvFieldLclStart + varDsc->lvFieldCnt; ++i)
+ if (promotionType != PROMOTION_TYPE_NONE)
{
- noway_assert(lvaTable[i].lvIsStructField);
- if (lvaTable[i].lvTracked)
+ VARSET_TP VARSET_INIT_NOCOPY(bitMask, VarSetOps::MakeEmpty(this));
+
+ for (unsigned i = varDsc->lvFieldLclStart; i < varDsc->lvFieldLclStart + varDsc->lvFieldCnt; ++i)
{
- noway_assert(lvaTable[i].lvVarIndex < lvaTrackedCount);
- VarSetOps::AddElemD(this, bitMask, lvaTable[i].lvVarIndex);
+ noway_assert(lvaTable[i].lvIsStructField);
+ if (lvaTable[i].lvTracked)
+ {
+ noway_assert(lvaTable[i].lvVarIndex < lvaTrackedCount);
+ VarSetOps::AddElemD(this, bitMask, lvaTable[i].lvVarIndex);
+ }
}
- }
- // For pure defs (i.e. not an "update" def which is also a use), add to the (all) def set.
- if ((tree->gtFlags & GTF_VAR_DEF) != 0 && (tree->gtFlags & (GTF_VAR_USEASG | GTF_VAR_USEDEF)) == 0)
- {
- VarSetOps::UnionD(this, fgCurDefSet, bitMask);
- }
- else if (!VarSetOps::IsSubset(this, bitMask, fgCurDefSet))
- {
- // Mark as used any struct fields that are not yet defined.
- VarSetOps::UnionD(this, fgCurUseSet, bitMask);
+ // For pure defs (i.e. not an "update" def which is also a use), add to the (all) def set.
+ if (!isUse)
+ {
+ assert(isDef);
+ VarSetOps::UnionD(this, fgCurDefSet, bitMask);
+ }
+ else if (!VarSetOps::IsSubset(this, bitMask, fgCurDefSet))
+ {
+ // Mark as used any struct fields that are not yet defined.
+ VarSetOps::UnionD(this, fgCurUseSet, bitMask);
+ }
}
}
}
@@ -285,18 +225,15 @@ void Compiler::fgLocalVarLivenessInit()
#ifndef LEGACY_BACKEND
//------------------------------------------------------------------------
// fgPerNodeLocalVarLiveness:
-// Set fgCurHeapUse and fgCurHeapDef when the global heap is read or updated
+// Set fgCurMemoryUse and fgCurMemoryDef when memory is read or updated
// Call fgMarkUseDef for any Local variables encountered
//
// Arguments:
// tree - The current node.
-// asgdLclVar - Either nullptr or the assignement's left-hand-side GT_LCL_VAR.
-// Used as an argument to fgMarkUseDef(); only valid for HIR blocks.
//
-void Compiler::fgPerNodeLocalVarLiveness(GenTree* tree, GenTree* asgdLclVar)
+void Compiler::fgPerNodeLocalVarLiveness(GenTree* tree)
{
assert(tree != nullptr);
- assert(asgdLclVar == nullptr || !compCurBB->IsLIR());
switch (tree->gtOper)
{
@@ -312,42 +249,43 @@ void Compiler::fgPerNodeLocalVarLiveness(GenTree* tree, GenTree* asgdLclVar)
case GT_LCL_FLD_ADDR:
case GT_STORE_LCL_VAR:
case GT_STORE_LCL_FLD:
- fgMarkUseDef(tree->AsLclVarCommon(), asgdLclVar);
+ fgMarkUseDef(tree->AsLclVarCommon());
break;
case GT_CLS_VAR:
- // For Volatile indirection, first mutate the global heap
- // see comments in ValueNum.cpp (under case GT_CLS_VAR)
- // This models Volatile reads as def-then-use of the heap.
- // and allows for a CSE of a subsequent non-volatile read
+ // For Volatile indirection, first mutate GcHeap/ByrefExposed.
+ // See comments in ValueNum.cpp (under case GT_CLS_VAR)
+ // This models Volatile reads as def-then-use of memory
+ // and allows for a CSE of a subsequent non-volatile read.
if ((tree->gtFlags & GTF_FLD_VOLATILE) != 0)
{
// For any Volatile indirection, we must handle it as a
- // definition of the global heap
- fgCurHeapDef = true;
+ // definition of GcHeap/ByrefExposed
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
}
- // If the GT_CLS_VAR is the lhs of an assignment, we'll handle it as a heap def, when we get to assignment.
+ // If the GT_CLS_VAR is the lhs of an assignment, we'll handle it as a GcHeap/ByrefExposed def, when we get
+ // to the assignment.
// Otherwise, we treat it as a use here.
- if (!fgCurHeapDef && (tree->gtFlags & GTF_CLS_VAR_ASG_LHS) == 0)
+ if ((tree->gtFlags & GTF_CLS_VAR_ASG_LHS) == 0)
{
- fgCurHeapUse = true;
+ fgCurMemoryUse |= memoryKindSet(GcHeap, ByrefExposed);
}
break;
case GT_IND:
- // For Volatile indirection, first mutate the global heap
+ // For Volatile indirection, first mutate GcHeap/ByrefExposed
// see comments in ValueNum.cpp (under case GT_CLS_VAR)
- // This models Volatile reads as def-then-use of the heap.
+ // This models Volatile reads as def-then-use of memory.
// and allows for a CSE of a subsequent non-volatile read
if ((tree->gtFlags & GTF_IND_VOLATILE) != 0)
{
// For any Volatile indirection, we must handle it as a
- // definition of the global heap
- fgCurHeapDef = true;
+ // definition of the GcHeap/ByrefExposed
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
}
// If the GT_IND is the lhs of an assignment, we'll handle it
- // as a heap def, when we get to assignment.
+ // as a memory def, when we get to assignment.
// Otherwise, we treat it as a use here.
if ((tree->gtFlags & GTF_IND_ASG_LHS) == 0)
{
@@ -356,16 +294,13 @@ void Compiler::fgPerNodeLocalVarLiveness(GenTree* tree, GenTree* asgdLclVar)
GenTreePtr addrArg = tree->gtOp.gtOp1->gtEffectiveVal(/*commaOnly*/ true);
if (!addrArg->DefinesLocalAddr(this, /*width doesn't matter*/ 0, &dummyLclVarTree, &dummyIsEntire))
{
- if (!fgCurHeapDef)
- {
- fgCurHeapUse = true;
- }
+ fgCurMemoryUse |= memoryKindSet(GcHeap, ByrefExposed);
}
else
{
// Defines a local addr
assert(dummyLclVarTree != nullptr);
- fgMarkUseDef(dummyLclVarTree->AsLclVarCommon(), asgdLclVar);
+ fgMarkUseDef(dummyLclVarTree->AsLclVarCommon());
}
}
break;
@@ -376,25 +311,22 @@ void Compiler::fgPerNodeLocalVarLiveness(GenTree* tree, GenTree* asgdLclVar)
unreached();
break;
- // We'll assume these are use-then-defs of the heap.
+ // We'll assume these are use-then-defs of memory.
case GT_LOCKADD:
case GT_XADD:
case GT_XCHG:
case GT_CMPXCHG:
- if (!fgCurHeapDef)
- {
- fgCurHeapUse = true;
- }
- fgCurHeapDef = true;
- fgCurHeapHavoc = true;
+ fgCurMemoryUse |= memoryKindSet(GcHeap, ByrefExposed);
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
+ fgCurMemoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
break;
case GT_MEMORYBARRIER:
- // Simliar to any Volatile indirection, we must handle this as a definition of the global heap
- fgCurHeapDef = true;
+ // Simliar to any Volatile indirection, we must handle this as a definition of GcHeap/ByrefExposed
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
break;
- // For now, all calls read/write the heap, the latter in its entirety. Might tighten this case later.
+ // For now, all calls read/write GcHeap/ByrefExposed, writes in their entirety. Might tighten this case later.
case GT_CALL:
{
GenTreeCall* call = tree->AsCall();
@@ -410,12 +342,9 @@ void Compiler::fgPerNodeLocalVarLiveness(GenTree* tree, GenTree* asgdLclVar)
}
if (modHeap)
{
- if (!fgCurHeapDef)
- {
- fgCurHeapUse = true;
- }
- fgCurHeapDef = true;
- fgCurHeapHavoc = true;
+ fgCurMemoryUse |= memoryKindSet(GcHeap, ByrefExposed);
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
+ fgCurMemoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
}
}
@@ -451,35 +380,32 @@ void Compiler::fgPerNodeLocalVarLiveness(GenTree* tree, GenTree* asgdLclVar)
default:
- // Determine whether it defines a heap location.
+ // Determine what memory locations it defines.
if (tree->OperIsAssignment() || tree->OperIsBlkOp())
{
GenTreeLclVarCommon* dummyLclVarTree = nullptr;
- if (!tree->DefinesLocal(this, &dummyLclVarTree))
+ if (tree->DefinesLocal(this, &dummyLclVarTree))
+ {
+ if (lvaVarAddrExposed(dummyLclVarTree->gtLclNum))
+ {
+ fgCurMemoryDef |= memoryKindSet(ByrefExposed);
+
+ // We've found a store that modifies ByrefExposed
+ // memory but not GcHeap memory, so track their
+ // states separately.
+ byrefStatesMatchGcHeapStates = false;
+ }
+ }
+ else
{
- // If it doesn't define a local, then it might update the heap.
- fgCurHeapDef = true;
+ // If it doesn't define a local, then it might update GcHeap/ByrefExposed.
+ fgCurMemoryDef |= memoryKindSet(GcHeap, ByrefExposed);
}
}
break;
}
}
-void Compiler::fgPerStatementLocalVarLiveness(GenTree* startNode, GenTree* asgdLclVar)
-{
- // The startNode must be the 1st node of the statement.
- assert(startNode == compCurStmt->gtStmt.gtStmtList);
-
- // The asgdLclVar node must be either nullptr or a GT_LCL_VAR or GT_STORE_LCL_VAR
- assert((asgdLclVar == nullptr) || (asgdLclVar->gtOper == GT_LCL_VAR || asgdLclVar->gtOper == GT_STORE_LCL_VAR));
-
- // We always walk every node in statement list
- for (GenTreePtr node = startNode; node != nullptr; node = node->gtNext)
- {
- fgPerNodeLocalVarLiveness(node, asgdLclVar);
- }
-}
-
#endif // !LEGACY_BACKEND
/*****************************************************************************/
@@ -524,10 +450,10 @@ void Compiler::fgPerBlockLocalVarLiveness()
VarSetOps::Assign(this, block->bbVarDef, liveAll);
VarSetOps::Assign(this, block->bbLiveIn, liveAll);
VarSetOps::Assign(this, block->bbLiveOut, liveAll);
- block->bbHeapUse = true;
- block->bbHeapDef = true;
- block->bbHeapLiveIn = true;
- block->bbHeapLiveOut = true;
+ block->bbMemoryUse = fullMemoryKindSet;
+ block->bbMemoryDef = fullMemoryKindSet;
+ block->bbMemoryLiveIn = fullMemoryKindSet;
+ block->bbMemoryLiveOut = fullMemoryKindSet;
switch (block->bbJumpKind)
{
@@ -540,6 +466,11 @@ void Compiler::fgPerBlockLocalVarLiveness()
break;
}
}
+
+ // In minopts, we don't explicitly build SSA or value-number; GcHeap and
+ // ByrefExposed implicitly (conservatively) change state at each instr.
+ byrefStatesMatchGcHeapStates = true;
+
return;
}
@@ -549,77 +480,34 @@ void Compiler::fgPerBlockLocalVarLiveness()
VarSetOps::AssignNoCopy(this, fgCurUseSet, VarSetOps::MakeEmpty(this));
VarSetOps::AssignNoCopy(this, fgCurDefSet, VarSetOps::MakeEmpty(this));
+ // GC Heap and ByrefExposed can share states unless we see a def of byref-exposed
+ // memory that is not a GC Heap def.
+ byrefStatesMatchGcHeapStates = true;
+
for (block = fgFirstBB; block; block = block->bbNext)
{
- GenTreePtr stmt;
- GenTreePtr tree;
- GenTreePtr asgdLclVar;
-
VarSetOps::ClearD(this, fgCurUseSet);
VarSetOps::ClearD(this, fgCurDefSet);
- fgCurHeapUse = false;
- fgCurHeapDef = false;
- fgCurHeapHavoc = false;
+ fgCurMemoryUse = emptyMemoryKindSet;
+ fgCurMemoryDef = emptyMemoryKindSet;
+ fgCurMemoryHavoc = emptyMemoryKindSet;
compCurBB = block;
-
if (!block->IsLIR())
{
- for (stmt = block->FirstNonPhiDef(); stmt; stmt = stmt->gtNext)
+ for (GenTreeStmt* stmt = block->FirstNonPhiDef(); stmt; stmt = stmt->gtNextStmt)
{
- noway_assert(stmt->gtOper == GT_STMT);
-
compCurStmt = stmt;
- asgdLclVar = nullptr;
- tree = stmt->gtStmt.gtStmtExpr;
- noway_assert(tree);
-
- // The following code checks if we have an assignment expression
- // which may become a GTF_VAR_USEDEF - x=f(x).
- // consider if LHS is local var - ignore if RHS contains SIDE_EFFECTS
-
- if ((tree->gtOper == GT_ASG && tree->gtOp.gtOp1->gtOper == GT_LCL_VAR) ||
- tree->gtOper == GT_STORE_LCL_VAR)
- {
- noway_assert(tree->gtOp.gtOp1);
- GenTreePtr rhsNode;
- if (tree->gtOper == GT_ASG)
- {
- noway_assert(tree->gtOp.gtOp2);
- asgdLclVar = tree->gtOp.gtOp1;
- rhsNode = tree->gtOp.gtOp2;
- }
- else
- {
- asgdLclVar = tree;
- rhsNode = tree->gtOp.gtOp1;
- }
-
- // If this is an assignment to local var with no SIDE EFFECTS,
- // set asgdLclVar so that genMarkUseDef will flag potential
- // x=f(x) expressions as GTF_VAR_USEDEF.
- // Reset the flag before recomputing it - it may have been set before,
- // but subsequent optimizations could have removed the rhs reference.
- asgdLclVar->gtFlags &= ~GTF_VAR_USEDEF;
- if ((rhsNode->gtFlags & GTF_SIDE_EFFECT) == 0)
- {
- noway_assert(asgdLclVar->gtFlags & GTF_VAR_DEF);
- }
- else
- {
- asgdLclVar = nullptr;
- }
- }
-
#ifdef LEGACY_BACKEND
- tree = fgLegacyPerStatementLocalVarLiveness(stmt->gtStmt.gtStmtList, NULL, asgdLclVar);
-
- // We must have walked to the end of this statement.
- noway_assert(!tree);
+ GenTree* tree = fgLegacyPerStatementLocalVarLiveness(stmt->gtStmtList, nullptr);
+ assert(tree == nullptr);
#else // !LEGACY_BACKEND
- fgPerStatementLocalVarLiveness(stmt->gtStmt.gtStmtList, asgdLclVar);
+ for (GenTree* node = stmt->gtStmtList; node != nullptr; node = node->gtNext)
+ {
+ fgPerNodeLocalVarLiveness(node);
+ }
#endif // !LEGACY_BACKEND
}
}
@@ -628,13 +516,9 @@ void Compiler::fgPerBlockLocalVarLiveness()
#ifdef LEGACY_BACKEND
unreached();
#else // !LEGACY_BACKEND
- // NOTE: the `asgdLclVar` analysis done above is not correct for LIR: it depends
- // on all of the nodes that precede `asgdLclVar` in execution order to factor into the
- // dataflow for the value being assigned to the local var, which is not necessarily the
- // case without tree order. As a result, we simply pass `nullptr` for `asgdLclVar`.
for (GenTree* node : LIR::AsRange(block).NonPhiNodes())
{
- fgPerNodeLocalVarLiveness(node, nullptr);
+ fgPerNodeLocalVarLiveness(node);
}
#endif // !LEGACY_BACKEND
}
@@ -667,19 +551,25 @@ void Compiler::fgPerBlockLocalVarLiveness()
printf("BB%02u", block->bbNum);
printf(" USE(%d)=", VarSetOps::Count(this, fgCurUseSet));
lvaDispVarSet(fgCurUseSet, allVars);
- if (fgCurHeapUse)
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- printf(" + HEAP");
+ if ((fgCurMemoryUse & memoryKindSet(memoryKind)) != 0)
+ {
+ printf(" + %s", memoryKindNames[memoryKind]);
+ }
}
printf("\n DEF(%d)=", VarSetOps::Count(this, fgCurDefSet));
lvaDispVarSet(fgCurDefSet, allVars);
- if (fgCurHeapDef)
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- printf(" + HEAP");
- }
- if (fgCurHeapHavoc)
- {
- printf("*");
+ if ((fgCurMemoryDef & memoryKindSet(memoryKind)) != 0)
+ {
+ printf(" + %s", memoryKindNames[memoryKind]);
+ }
+ if ((fgCurMemoryHavoc & memoryKindSet(memoryKind)) != 0)
+ {
+ printf("*");
+ }
}
printf("\n\n");
}
@@ -687,15 +577,23 @@ void Compiler::fgPerBlockLocalVarLiveness()
VarSetOps::Assign(this, block->bbVarUse, fgCurUseSet);
VarSetOps::Assign(this, block->bbVarDef, fgCurDefSet);
- block->bbHeapUse = fgCurHeapUse;
- block->bbHeapDef = fgCurHeapDef;
- block->bbHeapHavoc = fgCurHeapHavoc;
+ block->bbMemoryUse = fgCurMemoryUse;
+ block->bbMemoryDef = fgCurMemoryDef;
+ block->bbMemoryHavoc = fgCurMemoryHavoc;
/* also initialize the IN set, just in case we will do multiple DFAs */
VarSetOps::AssignNoCopy(this, block->bbLiveIn, VarSetOps::MakeEmpty(this));
- block->bbHeapLiveIn = false;
+ block->bbMemoryLiveIn = emptyMemoryKindSet;
}
+
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("** Memory liveness computed, GcHeap states and ByrefExposed states %s\n",
+ (byrefStatesMatchGcHeapStates ? "match" : "diverge"));
+ }
+#endif // DEBUG
}
// Helper functions to mark variables live over their entire scope
@@ -1226,181 +1124,218 @@ VARSET_VALRET_TP Compiler::fgGetHandlerLiveVars(BasicBlock* block)
return liveVars;
}
-/*****************************************************************************
- *
- * This is the classic algorithm for Live Variable Analysis.
- * If updateInternalOnly==true, only update BBF_INTERNAL blocks.
- */
-
-void Compiler::fgLiveVarAnalysis(bool updateInternalOnly)
+class LiveVarAnalysis
{
- BasicBlock* block;
- bool change;
-#ifdef DEBUG
- VARSET_TP VARSET_INIT_NOCOPY(extraLiveOutFromFinally, VarSetOps::MakeEmpty(this));
-#endif // DEBUG
- bool keepAliveThis = lvaKeepAliveAndReportThis() && lvaTable[info.compThisArg].lvTracked;
+ Compiler* m_compiler;
- /* Live Variable Analysis - Backward dataflow */
+ bool m_hasPossibleBackEdge;
- bool hasPossibleBackEdge = false;
+ unsigned m_memoryLiveIn;
+ unsigned m_memoryLiveOut;
+ VARSET_TP m_liveIn;
+ VARSET_TP m_liveOut;
- do
+ LiveVarAnalysis(Compiler* compiler)
+ : m_compiler(compiler)
+ , m_hasPossibleBackEdge(false)
+ , m_memoryLiveIn(emptyMemoryKindSet)
+ , m_memoryLiveOut(emptyMemoryKindSet)
+ , m_liveIn(VarSetOps::MakeEmpty(compiler))
+ , m_liveOut(VarSetOps::MakeEmpty(compiler))
{
- change = false;
-
- /* Visit all blocks and compute new data flow values */
-
- VARSET_TP VARSET_INIT_NOCOPY(liveIn, VarSetOps::MakeEmpty(this));
- VARSET_TP VARSET_INIT_NOCOPY(liveOut, VarSetOps::MakeEmpty(this));
-
- bool heapLiveIn = false;
- bool heapLiveOut = false;
+ }
- for (block = fgLastBB; block; block = block->bbPrev)
+ bool PerBlockAnalysis(BasicBlock* block, bool updateInternalOnly, bool keepAliveThis)
+ {
+ /* Compute the 'liveOut' set */
+ VarSetOps::ClearD(m_compiler, m_liveOut);
+ m_memoryLiveOut = emptyMemoryKindSet;
+ if (block->endsWithJmpMethod(m_compiler))
{
- // sometimes block numbers are not monotonically increasing which
- // would cause us not to identify backedges
- if (block->bbNext && block->bbNext->bbNum <= block->bbNum)
+ // A JMP uses all the arguments, so mark them all
+ // as live at the JMP instruction
+ //
+ const LclVarDsc* varDscEndParams = m_compiler->lvaTable + m_compiler->info.compArgsCount;
+ for (LclVarDsc* varDsc = m_compiler->lvaTable; varDsc < varDscEndParams; varDsc++)
{
- hasPossibleBackEdge = true;
+ noway_assert(!varDsc->lvPromoted);
+ if (varDsc->lvTracked)
+ {
+ VarSetOps::AddElemD(m_compiler, m_liveOut, varDsc->lvVarIndex);
+ }
}
+ }
- if (updateInternalOnly)
+ // Additionally, union in all the live-in tracked vars of successors.
+ AllSuccessorIter succsEnd = block->GetAllSuccs(m_compiler).end();
+ for (AllSuccessorIter succs = block->GetAllSuccs(m_compiler).begin(); succs != succsEnd; ++succs)
+ {
+ BasicBlock* succ = (*succs);
+ VarSetOps::UnionD(m_compiler, m_liveOut, succ->bbLiveIn);
+ m_memoryLiveOut |= (*succs)->bbMemoryLiveIn;
+ if (succ->bbNum <= block->bbNum)
{
- /* Only update BBF_INTERNAL blocks as they may be
- syntactically out of sequence. */
+ m_hasPossibleBackEdge = true;
+ }
+ }
- noway_assert(opts.compDbgCode && (info.compVarScopesCount > 0));
+ /* For lvaKeepAliveAndReportThis methods, "this" has to be kept alive everywhere
+ Note that a function may end in a throw on an infinite loop (as opposed to a return).
+ "this" has to be alive everywhere even in such methods. */
- if (!(block->bbFlags & BBF_INTERNAL))
- {
- continue;
- }
- }
+ if (keepAliveThis)
+ {
+ VarSetOps::AddElemD(m_compiler, m_liveOut, m_compiler->lvaTable[m_compiler->info.compThisArg].lvVarIndex);
+ }
- /* Compute the 'liveOut' set */
+ /* Compute the 'm_liveIn' set */
+ VarSetOps::Assign(m_compiler, m_liveIn, m_liveOut);
+ VarSetOps::DiffD(m_compiler, m_liveIn, block->bbVarDef);
+ VarSetOps::UnionD(m_compiler, m_liveIn, block->bbVarUse);
- VarSetOps::ClearD(this, liveOut);
- heapLiveOut = false;
- if (block->endsWithJmpMethod(this))
+ // Even if block->bbMemoryDef is set, we must assume that it doesn't kill memory liveness from m_memoryLiveOut,
+ // since (without proof otherwise) the use and def may touch different memory at run-time.
+ m_memoryLiveIn = m_memoryLiveOut | block->bbMemoryUse;
+
+ /* Can exceptions from this block be handled (in this function)? */
+
+ if (m_compiler->ehBlockHasExnFlowDsc(block))
+ {
+ VARSET_TP VARSET_INIT_NOCOPY(liveVars, m_compiler->fgGetHandlerLiveVars(block));
+
+ VarSetOps::UnionD(m_compiler, m_liveIn, liveVars);
+ VarSetOps::UnionD(m_compiler, m_liveOut, liveVars);
+ }
+
+ /* Has there been any change in either live set? */
+
+ bool liveInChanged = !VarSetOps::Equal(m_compiler, block->bbLiveIn, m_liveIn);
+ if (liveInChanged || !VarSetOps::Equal(m_compiler, block->bbLiveOut, m_liveOut))
+ {
+ if (updateInternalOnly)
{
- // A JMP uses all the arguments, so mark them all
- // as live at the JMP instruction
- //
- const LclVarDsc* varDscEndParams = lvaTable + info.compArgsCount;
- for (LclVarDsc* varDsc = lvaTable; varDsc < varDscEndParams; varDsc++)
+ // Only "extend" liveness over BBF_INTERNAL blocks
+
+ noway_assert(block->bbFlags & BBF_INTERNAL);
+
+ liveInChanged =
+ !VarSetOps::Equal(m_compiler, VarSetOps::Intersection(m_compiler, block->bbLiveIn, m_liveIn),
+ m_liveIn);
+ if (liveInChanged ||
+ !VarSetOps::Equal(m_compiler, VarSetOps::Intersection(m_compiler, block->bbLiveOut, m_liveOut),
+ m_liveOut))
{
- noway_assert(!varDsc->lvPromoted);
- if (varDsc->lvTracked)
+#ifdef DEBUG
+ if (m_compiler->verbose)
{
- VarSetOps::AddElemD(this, liveOut, varDsc->lvVarIndex);
+ printf("Scope info: block BB%02u LiveIn+ ", block->bbNum);
+ dumpConvertedVarSet(m_compiler, VarSetOps::Diff(m_compiler, m_liveIn, block->bbLiveIn));
+ printf(", LiveOut+ ");
+ dumpConvertedVarSet(m_compiler, VarSetOps::Diff(m_compiler, m_liveOut, block->bbLiveOut));
+ printf("\n");
}
- }
- }
+#endif // DEBUG
- // Additionally, union in all the live-in tracked vars of successors.
- AllSuccessorIter succsEnd = block->GetAllSuccs(this).end();
- for (AllSuccessorIter succs = block->GetAllSuccs(this).begin(); succs != succsEnd; ++succs)
- {
- BasicBlock* succ = (*succs);
- VarSetOps::UnionD(this, liveOut, succ->bbLiveIn);
- heapLiveOut = heapLiveOut || (*succs)->bbHeapLiveIn;
- if (succ->bbNum <= block->bbNum)
- {
- hasPossibleBackEdge = true;
+ VarSetOps::UnionD(m_compiler, block->bbLiveIn, m_liveIn);
+ VarSetOps::UnionD(m_compiler, block->bbLiveOut, m_liveOut);
}
}
-
- /* For lvaKeepAliveAndReportThis methods, "this" has to be kept alive everywhere
- Note that a function may end in a throw on an infinite loop (as opposed to a return).
- "this" has to be alive everywhere even in such methods. */
-
- if (keepAliveThis)
+ else
{
- VarSetOps::AddElemD(this, liveOut, lvaTable[info.compThisArg].lvVarIndex);
+ VarSetOps::Assign(m_compiler, block->bbLiveIn, m_liveIn);
+ VarSetOps::Assign(m_compiler, block->bbLiveOut, m_liveOut);
}
+ }
- /* Compute the 'liveIn' set */
+ const bool memoryLiveInChanged = (block->bbMemoryLiveIn != m_memoryLiveIn);
+ if (memoryLiveInChanged || (block->bbMemoryLiveOut != m_memoryLiveOut))
+ {
+ block->bbMemoryLiveIn = m_memoryLiveIn;
+ block->bbMemoryLiveOut = m_memoryLiveOut;
+ }
- VarSetOps::Assign(this, liveIn, liveOut);
- VarSetOps::DiffD(this, liveIn, block->bbVarDef);
- VarSetOps::UnionD(this, liveIn, block->bbVarUse);
+ return liveInChanged || memoryLiveInChanged;
+ }
- heapLiveIn = (heapLiveOut && !block->bbHeapDef) || block->bbHeapUse;
+ void Run(bool updateInternalOnly)
+ {
+ const bool keepAliveThis =
+ m_compiler->lvaKeepAliveAndReportThis() && m_compiler->lvaTable[m_compiler->info.compThisArg].lvTracked;
- /* Can exceptions from this block be handled (in this function)? */
+ /* Live Variable Analysis - Backward dataflow */
+ bool changed;
+ do
+ {
+ changed = false;
- if (ehBlockHasExnFlowDsc(block))
- {
- VARSET_TP VARSET_INIT_NOCOPY(liveVars, fgGetHandlerLiveVars(block));
+ /* Visit all blocks and compute new data flow values */
- VarSetOps::UnionD(this, liveIn, liveVars);
- VarSetOps::UnionD(this, liveOut, liveVars);
- }
+ VarSetOps::ClearD(m_compiler, m_liveIn);
+ VarSetOps::ClearD(m_compiler, m_liveOut);
- /* Has there been any change in either live set? */
+ m_memoryLiveIn = emptyMemoryKindSet;
+ m_memoryLiveOut = emptyMemoryKindSet;
- if (!VarSetOps::Equal(this, block->bbLiveIn, liveIn) || !VarSetOps::Equal(this, block->bbLiveOut, liveOut))
+ for (BasicBlock* block = m_compiler->fgLastBB; block; block = block->bbPrev)
{
+ // sometimes block numbers are not monotonically increasing which
+ // would cause us not to identify backedges
+ if (block->bbNext && block->bbNext->bbNum <= block->bbNum)
+ {
+ m_hasPossibleBackEdge = true;
+ }
+
if (updateInternalOnly)
{
- // Only "extend" liveness over BBF_INTERNAL blocks
+ /* Only update BBF_INTERNAL blocks as they may be
+ syntactically out of sequence. */
- noway_assert(block->bbFlags & BBF_INTERNAL);
+ noway_assert(m_compiler->opts.compDbgCode && (m_compiler->info.compVarScopesCount > 0));
- if (!VarSetOps::Equal(this, VarSetOps::Intersection(this, block->bbLiveIn, liveIn), liveIn) ||
- !VarSetOps::Equal(this, VarSetOps::Intersection(this, block->bbLiveOut, liveOut), liveOut))
+ if (!(block->bbFlags & BBF_INTERNAL))
{
-#ifdef DEBUG
- if (verbose)
- {
- printf("Scope info: block BB%02u LiveIn+ ", block->bbNum);
- dumpConvertedVarSet(this, VarSetOps::Diff(this, liveIn, block->bbLiveIn));
- printf(", LiveOut+ ");
- dumpConvertedVarSet(this, VarSetOps::Diff(this, liveOut, block->bbLiveOut));
- printf("\n");
- }
-#endif // DEBUG
-
- VarSetOps::UnionD(this, block->bbLiveIn, liveIn);
- VarSetOps::UnionD(this, block->bbLiveOut, liveOut);
- change = true;
+ continue;
}
}
- else
+
+ if (PerBlockAnalysis(block, updateInternalOnly, keepAliveThis))
{
- VarSetOps::Assign(this, block->bbLiveIn, liveIn);
- VarSetOps::Assign(this, block->bbLiveOut, liveOut);
- change = true;
+ changed = true;
}
}
-
- if ((block->bbHeapLiveIn == 1) != heapLiveIn || (block->bbHeapLiveOut == 1) != heapLiveOut)
+ // if there is no way we could have processed a block without seeing all of its predecessors
+ // then there is no need to iterate
+ if (!m_hasPossibleBackEdge)
{
- block->bbHeapLiveIn = heapLiveIn;
- block->bbHeapLiveOut = heapLiveOut;
- change = true;
+ break;
}
- }
- // if there is no way we could have processed a block without seeing all of its predecessors
- // then there is no need to iterate
- if (!hasPossibleBackEdge)
- {
- break;
- }
- } while (change);
+ } while (changed);
+ }
-//-------------------------------------------------------------------------
+public:
+ static void Run(Compiler* compiler, bool updateInternalOnly)
+ {
+ LiveVarAnalysis analysis(compiler);
+ analysis.Run(updateInternalOnly);
+ }
+};
-#ifdef DEBUG
+/*****************************************************************************
+ *
+ * This is the classic algorithm for Live Variable Analysis.
+ * If updateInternalOnly==true, only update BBF_INTERNAL blocks.
+ */
+
+void Compiler::fgLiveVarAnalysis(bool updateInternalOnly)
+{
+ LiveVarAnalysis::Run(this, updateInternalOnly);
+#ifdef DEBUG
if (verbose && !updateInternalOnly)
{
printf("\nBB liveness after fgLiveVarAnalysis():\n\n");
fgDispBBLiveness();
}
-
#endif // DEBUG
}
@@ -3090,15 +3025,21 @@ void Compiler::fgDispBBLiveness(BasicBlock* block)
printf("BB%02u", block->bbNum);
printf(" IN (%d)=", VarSetOps::Count(this, block->bbLiveIn));
lvaDispVarSet(block->bbLiveIn, allVars);
- if (block->bbHeapLiveIn)
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- printf(" + HEAP");
+ if ((block->bbMemoryLiveIn & memoryKindSet(memoryKind)) != 0)
+ {
+ printf(" + %s", memoryKindNames[memoryKind]);
+ }
}
printf("\n OUT(%d)=", VarSetOps::Count(this, block->bbLiveOut));
lvaDispVarSet(block->bbLiveOut, allVars);
- if (block->bbHeapLiveOut)
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- printf(" + HEAP");
+ if ((block->bbMemoryLiveOut & memoryKindSet(memoryKind)) != 0)
+ {
+ printf(" + %s", memoryKindNames[memoryKind]);
+ }
}
printf("\n\n");
}
diff --git a/src/jit/lower.cpp b/src/jit/lower.cpp
index a6e50b304c..0316a34a21 100644
--- a/src/jit/lower.cpp
+++ b/src/jit/lower.cpp
@@ -167,8 +167,13 @@ GenTree* Lowering::LowerNode(GenTree* node)
case GT_STORE_BLK:
case GT_STORE_OBJ:
case GT_STORE_DYN_BLK:
- LowerBlockStore(node->AsBlk());
- break;
+ {
+ // TODO-Cleanup: Consider moving this code to LowerBlockStore, which is currently
+ // called from TreeNodeInfoInitBlockStore, and calling that method here.
+ GenTreeBlk* blkNode = node->AsBlk();
+ TryCreateAddrMode(LIR::Use(BlockRange(), &blkNode->Addr(), blkNode), false);
+ }
+ break;
#ifdef FEATURE_SIMD
case GT_SIMD:
@@ -236,20 +241,14 @@ GenTree* Lowering::LowerNode(GenTree* node)
unsigned varNum = node->AsLclVarCommon()->GetLclNum();
LclVarDsc* varDsc = &comp->lvaTable[varNum];
-#if defined(_TARGET_64BIT_)
- assert(varDsc->lvSize() == 16);
- node->gtType = TYP_SIMD16;
-#else // !_TARGET_64BIT_
- if (varDsc->lvSize() == 16)
+ if (comp->lvaMapSimd12ToSimd16(varDsc))
{
+ JITDUMP("Mapping TYP_SIMD12 lclvar node to TYP_SIMD16:\n");
+ DISPNODE(node);
+ JITDUMP("============");
+
node->gtType = TYP_SIMD16;
}
- else
- {
- // The following assert is guaranteed by lvSize().
- assert(varDsc->lvIsParam);
- }
-#endif // !_TARGET_64BIT_
}
#endif // FEATURE_SIMD
__fallthrough;
@@ -549,7 +548,7 @@ GenTree* Lowering::LowerSwitch(GenTree* node)
// If the number of possible destinations is small enough, we proceed to expand the switch
// into a series of conditional branches, otherwise we follow the jump table based switch
// transformation.
- else if (jumpCnt < minSwitchTabJumpCnt)
+ else if ((jumpCnt < minSwitchTabJumpCnt) || comp->compStressCompile(Compiler::STRESS_SWITCH_CMP_BR_EXPANSION, 50))
{
// Lower the switch into a series of compare and branch IR trees.
//
@@ -639,7 +638,7 @@ GenTree* Lowering::LowerSwitch(GenTree* node)
GenTreePtr gtCaseBranch = comp->gtNewOperNode(GT_JTRUE, TYP_VOID, gtCaseCond);
LIR::Range caseRange = LIR::SeqTree(comp, gtCaseBranch);
- currentBBRange->InsertAtEnd(std::move(condRange));
+ currentBBRange->InsertAtEnd(std::move(caseRange));
}
}
@@ -757,16 +756,6 @@ GenTreePtr Lowering::NewPutArg(GenTreeCall* call, GenTreePtr arg, fgArgTabEntryP
GenTreePtr putArg = nullptr;
bool updateArgTable = true;
-#if !defined(_TARGET_64BIT_)
- if (varTypeIsLong(type))
- {
- // For TYP_LONG, we leave the GT_LONG as the arg, and put the putArg below it.
- // Therefore, we don't update the arg table entry.
- updateArgTable = false;
- type = TYP_INT;
- }
-#endif // !defined(_TARGET_64BIT_)
-
bool isOnStack = true;
#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
if (varTypeIsStruct(type))
@@ -954,6 +943,11 @@ GenTreePtr Lowering::NewPutArg(GenTreeCall* call, GenTreePtr arg, fgArgTabEntryP
info->slotNum PUT_STRUCT_ARG_STK_ONLY_ARG(info->numSlots) DEBUGARG(call));
#endif
+#if defined(UNIX_X86_ABI)
+ assert((info->padStkAlign > 0 && info->numSlots > 0) || (info->padStkAlign == 0));
+ putArg->AsPutArgStk()->setArgPadding(info->padStkAlign);
+#endif
+
#ifdef FEATURE_PUT_STRUCT_ARG_STK
// If the ArgTabEntry indicates that this arg is a struct
// get and store the number of slots that are references.
@@ -1084,25 +1078,22 @@ void Lowering::LowerArg(GenTreeCall* call, GenTreePtr* ppArg)
NYI("Lowering of long register argument");
}
- // For longs, we will create two PUTARG_STKs below the GT_LONG. The hi argument needs to
- // be pushed first, so the hi PUTARG_STK will precede the lo PUTARG_STK in execution order.
+ // For longs, we will replace the GT_LONG with a GT_FIELD_LIST, and put that under a PUTARG_STK.
+ // Although the hi argument needs to be pushed first, that will be handled by the general case,
+ // in which the fields will be reversed.
noway_assert(arg->OperGet() == GT_LONG);
- GenTreePtr argLo = arg->gtGetOp1();
- GenTreePtr argHi = arg->gtGetOp2();
-
- GenTreePtr putArgLo = NewPutArg(call, argLo, info, type);
- GenTreePtr putArgHi = NewPutArg(call, argHi, info, type);
-
- arg->gtOp.gtOp1 = putArgLo;
- arg->gtOp.gtOp2 = putArgHi;
-
- BlockRange().InsertBefore(arg, putArgHi, putArgLo);
-
- // The execution order now looks like this:
- // argLoPrev <-> argLoFirst ... argLo <-> argHiFirst ... argHi <-> putArgHi <-> putArgLo <-> arg(GT_LONG)
-
- assert((arg->gtFlags & GTF_REVERSE_OPS) == 0);
- arg->gtFlags |= GTF_REVERSE_OPS; // We consume the high arg (op2) first.
+ assert(info->numSlots == 2);
+ GenTreePtr argLo = arg->gtGetOp1();
+ GenTreePtr argHi = arg->gtGetOp2();
+ GenTreeFieldList* fieldList = new (comp, GT_FIELD_LIST) GenTreeFieldList(argLo, 0, TYP_INT, nullptr);
+ // Only the first fieldList node (GTF_FIELD_LIST_HEAD) is in the instruction sequence.
+ (void)new (comp, GT_FIELD_LIST) GenTreeFieldList(argHi, 4, TYP_INT, fieldList);
+ putArg = NewPutArg(call, fieldList, info, TYP_VOID);
+
+ // We can't call ReplaceArgWithPutArgOrCopy here because it presumes that we are keeping the original arg.
+ BlockRange().InsertBefore(arg, fieldList, putArg);
+ BlockRange().Remove(arg);
+ *ppArg = putArg;
}
else
#endif // !defined(_TARGET_64BIT_)
@@ -1872,6 +1863,7 @@ GenTree* Lowering::LowerTailCallViaHelper(GenTreeCall* call, GenTree* callTarget
bool isClosed;
LIR::ReadOnlyRange secondArgRange = BlockRange().GetTreeRange(arg0, &isClosed);
assert(isClosed);
+ BlockRange().Remove(std::move(secondArgRange));
argEntry->node->gtOp.gtOp1 = callTarget;
@@ -1935,251 +1927,439 @@ GenTree* Lowering::LowerTailCallViaHelper(GenTreeCall* call, GenTree* callTarget
}
//------------------------------------------------------------------------
-// Lowering::LowerCompare: lowers a compare node.
-//
-// For 64-bit targets, this doesn't do much of anything: all comparisons
-// that we support can be handled in code generation on such targets.
-//
-// For 32-bit targets, however, any comparison that feeds a `GT_JTRUE`
-// node must be lowered such that the liveness of the operands to the
-// comparison is properly visible to the rest of the backend. As such,
-// a 64-bit comparison is lowered from something like this:
-//
-// ------------ BB02 [004..014) -> BB02 (cond), preds={BB02,BB01} succs={BB03,BB02}
-// N001 ( 1, 1) [000006] ------------ t6 = lclVar int V02 loc0 u:5 $148
-//
-// /--* t6 int
-// N002 ( 2, 3) [000007] ---------U-- t7 = * cast long <- ulong <- uint $3c0
+// Lowering::LowerCompare: Lowers a compare node.
//
-// N003 ( 3, 10) [000009] ------------ t9 = lconst long 0x0000000000000003 $101
-//
-// /--* t7 long
-// +--* t9 long
-// N004 ( 9, 17) [000010] N------N-U-- t10 = * < int $149
-//
-// /--* t10 int
-// N005 ( 11, 19) [000011] ------------ * jmpTrue void
-//
-// To something like this:
-//
-// ------------ BB02 [004..014) -> BB03 (cond), preds={BB06,BB07,BB01} succs={BB06,BB03}
-// [000099] ------------ t99 = const int 0
-//
-// [000101] ------------ t101 = const int 0
-//
-// /--* t99 int
-// +--* t101 int
-// N004 ( 9, 17) [000010] N------N-U-- t10 = * > int $149
-//
-// /--* t10 int
-// N005 ( 11, 19) [000011] ------------ * jmpTrue void
-//
-//
-// ------------ BB06 [???..???) -> BB02 (cond), preds={BB02} succs={BB07,BB02}
-// [000105] -------N-U-- jcc void cond=<
-//
-//
-// ------------ BB07 [???..???) -> BB02 (cond), preds={BB06} succs={BB03,BB02}
-// N001 ( 1, 1) [000006] ------------ t6 = lclVar int V02 loc0 u:5 $148
-//
-// N003 ( 3, 10) [000009] ------------ t9 = const int 3
-//
-// /--* t6 int
-// +--* t9 int
-// [000106] N------N-U-- t106 = * < int
-//
-// /--* t106 int
-// [000107] ------------ * jmpTrue void
-//
-// Which will eventually generate code similar to the following:
-//
-// 33DB xor ebx, ebx
-// 85DB test ebx, ebx
-// 7707 ja SHORT G_M50523_IG04
-// 72E7 jb SHORT G_M50523_IG03
-// 83F803 cmp eax, 3
-// 72E2 jb SHORT G_M50523_IG03
+// Arguments:
+// cmp - the compare node
//
+// Notes:
+// - Decomposes long comparisons that feed a GT_JTRUE (32 bit specific).
+// - Ensures that we don't have a mix of int/long operands (XARCH specific).
+// - Narrow operands to enable memory operand containment (XARCH specific).
+// - Transform cmp(and(x, y), 0) into test(x, y) (XARCH specific but could
+// be used for ARM as well if support for GT_TEST_EQ/GT_TEST_NE is added).
+
void Lowering::LowerCompare(GenTree* cmp)
{
#ifndef _TARGET_64BIT_
- if (cmp->gtGetOp1()->TypeGet() != TYP_LONG)
- {
- return;
- }
-
LIR::Use cmpUse;
- if (!BlockRange().TryGetUse(cmp, &cmpUse) || cmpUse.User()->OperGet() != GT_JTRUE)
+ if ((cmp->gtGetOp1()->TypeGet() == TYP_LONG) && BlockRange().TryGetUse(cmp, &cmpUse) &&
+ cmpUse.User()->OperIs(GT_JTRUE))
{
- return;
- }
+ // For 32-bit targets any comparison that feeds a `GT_JTRUE` node must be lowered such that
+ // the liveness of the operands to the comparison is properly visible to the rest of the
+ // backend. As such, a 64-bit comparison is lowered from something like this:
+ //
+ // ------------ BB02 [004..014) -> BB02 (cond), preds={BB02,BB01} succs={BB03,BB02}
+ // N001 ( 1, 1) [000006] ------------ t6 = lclVar int V02 loc0 u:5 $148
+ //
+ // /--* t6 int
+ // N002 ( 2, 3) [000007] ---------U-- t7 = * cast long <- ulong <- uint $3c0
+ //
+ // N003 ( 3, 10) [000009] ------------ t9 = lconst long 0x0000000000000003 $101
+ //
+ // /--* t7 long
+ // +--* t9 long
+ // N004 ( 9, 17) [000010] N------N-U-- t10 = * < int $149
+ //
+ // /--* t10 int
+ // N005 ( 11, 19) [000011] ------------ * jmpTrue void
+ //
+ // To something like this:
+ //
+ // ------------ BB02 [004..014) -> BB03 (cond), preds={BB06,BB07,BB01} succs={BB06,BB03}
+ // [000099] ------------ t99 = const int 0
+ //
+ // [000101] ------------ t101 = const int 0
+ //
+ // /--* t99 int
+ // +--* t101 int
+ // N004 ( 9, 17) [000010] N------N-U-- t10 = * > int $149
+ //
+ // /--* t10 int
+ // N005 ( 11, 19) [000011] ------------ * jmpTrue void
+ //
+ //
+ // ------------ BB06 [???..???) -> BB02 (cond), preds={BB02} succs={BB07,BB02}
+ // [000105] -------N-U-- jcc void cond=<
+ //
+ //
+ // ------------ BB07 [???..???) -> BB02 (cond), preds={BB06} succs={BB03,BB02}
+ // N001 ( 1, 1) [000006] ------------ t6 = lclVar int V02 loc0 u:5 $148
+ //
+ // N003 ( 3, 10) [000009] ------------ t9 = const int 3
+ //
+ // /--* t6 int
+ // +--* t9 int
+ // [000106] N------N-U-- t106 = * < int
+ //
+ // /--* t106 int
+ // [000107] ------------ * jmpTrue void
+ //
+ // Which will eventually generate code similar to the following:
+ //
+ // 33DB xor ebx, ebx
+ // 85DB test ebx, ebx
+ // 7707 ja SHORT G_M50523_IG04
+ // 72E7 jb SHORT G_M50523_IG03
+ // 83F803 cmp eax, 3
+ // 72E2 jb SHORT G_M50523_IG03
+ //
- GenTree* src1 = cmp->gtGetOp1();
- GenTree* src2 = cmp->gtGetOp2();
- unsigned weight = m_block->getBBWeight(comp);
+ GenTree* src1 = cmp->gtGetOp1();
+ GenTree* src2 = cmp->gtGetOp2();
+ unsigned weight = m_block->getBBWeight(comp);
- LIR::Use loSrc1(BlockRange(), &(src1->gtOp.gtOp1), src1);
- LIR::Use loSrc2(BlockRange(), &(src2->gtOp.gtOp1), src2);
+ LIR::Use loSrc1(BlockRange(), &(src1->gtOp.gtOp1), src1);
+ LIR::Use loSrc2(BlockRange(), &(src2->gtOp.gtOp1), src2);
- if (loSrc1.Def()->OperGet() != GT_CNS_INT && loSrc1.Def()->OperGet() != GT_LCL_VAR)
- {
- loSrc1.ReplaceWithLclVar(comp, weight);
- }
+ // TODO-CQ-32bit: We should move more code to the new basic block, currently we're only moving
+ // constants and lclvars. In particular, it would be nice to move GT_AND nodes as that would
+ // enable the and-cmp to test transform that happens later in this function. Though that's not
+ // exactly ideal, the and-cmp to test transform should run before this code but:
+ // - it would need to run before decomposition otherwise it won't recognize the 0 constant
+ // because after decomposition it is packed in a GT_LONG
+ // - this code would also need to handle GT_TEST_EQ/GT_TEST_NE
- if (loSrc2.Def()->OperGet() != GT_CNS_INT && loSrc2.Def()->OperGet() != GT_LCL_VAR)
- {
- loSrc2.ReplaceWithLclVar(comp, weight);
- }
+ if (!loSrc1.Def()->OperIs(GT_CNS_INT, GT_LCL_VAR))
+ {
+ loSrc1.ReplaceWithLclVar(comp, weight);
+ }
+
+ if (!loSrc2.Def()->OperIs(GT_CNS_INT, GT_LCL_VAR))
+ {
+ loSrc2.ReplaceWithLclVar(comp, weight);
+ }
- BasicBlock* jumpDest = m_block->bbJumpDest;
- BasicBlock* nextDest = m_block->bbNext;
- BasicBlock* newBlock = comp->fgSplitBlockAtEnd(m_block);
+ BasicBlock* jumpDest = m_block->bbJumpDest;
+ BasicBlock* nextDest = m_block->bbNext;
+ BasicBlock* newBlock = comp->fgSplitBlockAtEnd(m_block);
- cmp->gtType = TYP_INT;
- cmp->gtOp.gtOp1 = src1->gtOp.gtOp2;
- cmp->gtOp.gtOp2 = src2->gtOp.gtOp2;
+ cmp->gtType = TYP_INT;
+ cmp->gtOp.gtOp1 = src1->gtOp.gtOp2;
+ cmp->gtOp.gtOp2 = src2->gtOp.gtOp2;
- if (cmp->OperGet() == GT_EQ || cmp->OperGet() == GT_NE)
- {
- // 64-bit equality comparisons (no matter the polarity) require two 32-bit comparisons: one for the upper 32
- // bits and one for the lower 32 bits. As such, we update the flow graph like so:
- //
- // Before:
- // BB0: cond
- // / \
- // false true
- // | |
- // BB1 BB2
- //
- // After:
- // BB0: cond(hi)
- // / \
- // false true
- // | |
- // | BB3: cond(lo)
- // | / \
- // | false true
- // \ / |
- // BB1 BB2
- //
+ if (cmp->OperIs(GT_EQ, GT_NE))
+ {
+ // 64-bit equality comparisons (no matter the polarity) require two 32-bit comparisons: one for the upper 32
+ // bits and one for the lower 32 bits. As such, we update the flow graph like so:
+ //
+ // Before:
+ // BB0: cond
+ // / \
+ // false true
+ // | |
+ // BB1 BB2
+ //
+ // After:
+ // BB0: cond(hi)
+ // / \
+ // false true
+ // | |
+ // | BB3: cond(lo)
+ // | / \
+ // | false true
+ // \ / |
+ // BB1 BB2
+ //
- BlockRange().Remove(loSrc1.Def());
- BlockRange().Remove(loSrc2.Def());
- GenTree* loCmp = comp->gtNewOperNode(cmp->OperGet(), TYP_INT, loSrc1.Def(), loSrc2.Def());
- loCmp->gtFlags = cmp->gtFlags;
- GenTree* loJtrue = comp->gtNewOperNode(GT_JTRUE, TYP_VOID, loCmp);
- LIR::AsRange(newBlock).InsertAfter(nullptr, loSrc1.Def(), loSrc2.Def(), loCmp, loJtrue);
+ BlockRange().Remove(loSrc1.Def());
+ BlockRange().Remove(loSrc2.Def());
+ GenTree* loCmp = comp->gtNewOperNode(cmp->OperGet(), TYP_INT, loSrc1.Def(), loSrc2.Def());
+ loCmp->gtFlags = cmp->gtFlags;
+ GenTree* loJtrue = comp->gtNewOperNode(GT_JTRUE, TYP_VOID, loCmp);
+ LIR::AsRange(newBlock).InsertAfter(nullptr, loSrc1.Def(), loSrc2.Def(), loCmp, loJtrue);
- m_block->bbJumpKind = BBJ_COND;
+ m_block->bbJumpKind = BBJ_COND;
+
+ if (cmp->OperIs(GT_EQ))
+ {
+ cmp->gtOper = GT_NE;
+ m_block->bbJumpDest = nextDest;
+ nextDest->bbFlags |= BBF_JMP_TARGET;
+ comp->fgAddRefPred(nextDest, m_block);
+ }
+ else
+ {
+ m_block->bbJumpDest = jumpDest;
+ comp->fgAddRefPred(jumpDest, m_block);
+ }
- if (cmp->OperGet() == GT_EQ)
+ assert(newBlock->bbJumpKind == BBJ_COND);
+ assert(newBlock->bbJumpDest == jumpDest);
+ }
+ else
{
- cmp->gtOper = GT_NE;
+ // 64-bit ordinal comparisons are more complicated: they require two comparisons for the upper 32 bits and
+ // one comparison for the lower 32 bits. We update the flowgraph as such:
+ //
+ // Before:
+ // BB0: cond
+ // / \
+ // false true
+ // | |
+ // BB1 BB2
+ //
+ // After:
+ // BB0: (!cond(hi) && !eq(hi))
+ // / \
+ // true false
+ // | |
+ // | BB3: (cond(hi) && !eq(hi))
+ // | / \
+ // | false true
+ // | | |
+ // | BB4: cond(lo) |
+ // | / \ |
+ // | false true |
+ // \ / \ /
+ // BB1 BB2
+ //
+ //
+ // Note that the actual comparisons used to implement "(!cond(hi) && !eq(hi))" and "(cond(hi) && !eq(hi))"
+ // differ based on the original condition, and all consist of a single node. The switch statement below
+ // performs the necessary mapping.
+ //
+
+ genTreeOps hiCmpOper;
+ genTreeOps loCmpOper;
+
+ switch (cmp->OperGet())
+ {
+ case GT_LT:
+ cmp->gtOper = GT_GT;
+ hiCmpOper = GT_LT;
+ loCmpOper = GT_LT;
+ break;
+ case GT_LE:
+ cmp->gtOper = GT_GT;
+ hiCmpOper = GT_LT;
+ loCmpOper = GT_LE;
+ break;
+ case GT_GT:
+ cmp->gtOper = GT_LT;
+ hiCmpOper = GT_GT;
+ loCmpOper = GT_GT;
+ break;
+ case GT_GE:
+ cmp->gtOper = GT_LT;
+ hiCmpOper = GT_GT;
+ loCmpOper = GT_GE;
+ break;
+ default:
+ unreached();
+ }
+
+ BasicBlock* newBlock2 = comp->fgSplitBlockAtEnd(newBlock);
+
+ GenTree* hiJcc = new (comp, GT_JCC) GenTreeJumpCC(hiCmpOper);
+ hiJcc->gtFlags = cmp->gtFlags;
+ LIR::AsRange(newBlock).InsertAfter(nullptr, hiJcc);
+
+ BlockRange().Remove(loSrc1.Def());
+ BlockRange().Remove(loSrc2.Def());
+ GenTree* loCmp = comp->gtNewOperNode(loCmpOper, TYP_INT, loSrc1.Def(), loSrc2.Def());
+ loCmp->gtFlags = cmp->gtFlags | GTF_UNSIGNED;
+ GenTree* loJtrue = comp->gtNewOperNode(GT_JTRUE, TYP_VOID, loCmp);
+ LIR::AsRange(newBlock2).InsertAfter(nullptr, loSrc1.Def(), loSrc2.Def(), loCmp, loJtrue);
+
+ m_block->bbJumpKind = BBJ_COND;
m_block->bbJumpDest = nextDest;
nextDest->bbFlags |= BBF_JMP_TARGET;
comp->fgAddRefPred(nextDest, m_block);
+
+ newBlock->bbJumpKind = BBJ_COND;
+ newBlock->bbJumpDest = jumpDest;
+ comp->fgAddRefPred(jumpDest, newBlock);
+
+ assert(newBlock2->bbJumpKind == BBJ_COND);
+ assert(newBlock2->bbJumpDest == jumpDest);
}
- else
+
+ BlockRange().Remove(src1);
+ BlockRange().Remove(src2);
+ }
+#endif
+
+#ifdef _TARGET_XARCH_
+#ifdef _TARGET_AMD64_
+ if (cmp->gtGetOp1()->TypeGet() != cmp->gtGetOp2()->TypeGet())
+ {
+ bool op1Is64Bit = (genTypeSize(cmp->gtGetOp1()->TypeGet()) == 8);
+ bool op2Is64Bit = (genTypeSize(cmp->gtGetOp2()->TypeGet()) == 8);
+
+ if (op1Is64Bit != op2Is64Bit)
{
- m_block->bbJumpDest = jumpDest;
- comp->fgAddRefPred(jumpDest, m_block);
- }
+ //
+ // Normally this should not happen. IL allows comparing int32 to native int but the importer
+ // automatically inserts a cast from int32 to long on 64 bit architectures. However, the JIT
+ // accidentally generates int/long comparisons internally:
+ // - loop cloning compares int (and even small int) index limits against long constants
+ // - switch lowering compares a 64 bit switch value against a int32 constant
+ //
+ // TODO-Cleanup: The above mentioned issues should be fixed and then the code below may be
+ // replaced with an assert or at least simplified. The special casing of constants in code
+ // below is only necessary to prevent worse code generation for switches and loop cloning.
+ //
- assert(newBlock->bbJumpKind == BBJ_COND);
- assert(newBlock->bbJumpDest == jumpDest);
+ GenTree* longOp = op1Is64Bit ? cmp->gtOp.gtOp1 : cmp->gtOp.gtOp2;
+ GenTree** smallerOpUse = op2Is64Bit ? &cmp->gtOp.gtOp1 : &cmp->gtOp.gtOp2;
+ var_types smallerType = (*smallerOpUse)->TypeGet();
+
+ assert(genTypeSize(smallerType) < 8);
+
+ if (longOp->IsCnsIntOrI() && genTypeCanRepresentValue(smallerType, longOp->AsIntCon()->IconValue()))
+ {
+ longOp->gtType = smallerType;
+ }
+ else if ((*smallerOpUse)->IsCnsIntOrI())
+ {
+ (*smallerOpUse)->gtType = TYP_LONG;
+ }
+ else
+ {
+ GenTree* cast = comp->gtNewCastNode(TYP_LONG, *smallerOpUse, TYP_LONG);
+ *smallerOpUse = cast;
+ BlockRange().InsertAfter(cast->gtGetOp1(), cast);
+ }
+ }
}
- else
+#endif // _TARGET_AMD64_
+
+ if (cmp->gtGetOp2()->IsIntegralConst())
{
- // 64-bit ordinal comparisons are more complicated: they require two comparisons for the upper 32 bits and one
- // comparison for the lower 32 bits. We update the flowgraph as such:
- //
- // Before:
- // BB0: cond
- // / \
- // false true
- // | |
- // BB1 BB2
- //
- // After:
- // BB0: (!cond(hi) && !eq(hi))
- // / \
- // true false
- // | |
- // | BB3: (cond(hi) && !eq(hi))
- // | / \
- // | false true
- // | | |
- // | BB4: cond(lo) |
- // | / \ |
- // | false true |
- // \ / \ /
- // BB1 BB2
- //
- //
- // Note that the actual comparisons used to implement "(!cond(hi) && !eq(hi))" and "(cond(hi) && !eq(hi))"
- // differ based on the original condition, and all consist of a single node. The switch statement below
- // performs the necessary mapping.
- //
+ GenTree* op1 = cmp->gtGetOp1();
+ var_types op1Type = op1->TypeGet();
+ GenTreeIntCon* op2 = cmp->gtGetOp2()->AsIntCon();
+ ssize_t op2Value = op2->IconValue();
- genTreeOps hiCmpOper;
- genTreeOps loCmpOper;
+ if (op1->isMemoryOp() && varTypeIsSmall(op1Type) && genTypeCanRepresentValue(op1Type, op2Value))
+ {
+ //
+ // If op1's type is small then try to narrow op2 so it has the same type as op1.
+ // Small types are usually used by memory loads and if both compare operands have
+ // the same type then the memory load can be contained. In certain situations
+ // (e.g "cmp ubyte, 200") we also get a smaller instruction encoding.
+ //
- switch (cmp->OperGet())
+ op2->gtType = op1Type;
+ }
+ else if (op1->OperIs(GT_CAST) && !op1->gtOverflow())
{
- case GT_LT:
- cmp->gtOper = GT_GT;
- hiCmpOper = GT_LT;
- loCmpOper = GT_LT;
- break;
- case GT_LE:
- cmp->gtOper = GT_GT;
- hiCmpOper = GT_LT;
- loCmpOper = GT_LE;
- break;
- case GT_GT:
- cmp->gtOper = GT_LT;
- hiCmpOper = GT_GT;
- loCmpOper = GT_GT;
- break;
- case GT_GE:
- cmp->gtOper = GT_LT;
- hiCmpOper = GT_GT;
- loCmpOper = GT_GE;
- break;
- default:
- unreached();
+ GenTreeCast* cast = op1->AsCast();
+ var_types castToType = cast->CastToType();
+ GenTree* castOp = cast->gtGetOp1();
+
+ if (((castToType == TYP_BOOL) || (castToType == TYP_UBYTE)) && FitsIn<UINT8>(op2Value))
+ {
+ //
+ // Since we're going to remove the cast we need to be able to narrow the cast operand
+ // to the cast type. This can be done safely only for certain opers (e.g AND, OR, XOR).
+ // Some opers just can't be narrowed (e.g DIV, MUL) while other could be narrowed but
+ // doing so would produce incorrect results (e.g. RSZ, RSH).
+ //
+ // The below list of handled opers is conservative but enough to handle the most common
+ // situations. In particular this include CALL, sometimes the JIT unnecessarilly widens
+ // the result of bool returning calls.
+ //
+
+ if (castOp->OperIs(GT_CALL, GT_LCL_VAR) || castOp->OperIsLogical() || castOp->isMemoryOp())
+ {
+ assert(!castOp->gtOverflowEx()); // Must not be an overflow checking operation
+
+ castOp->gtType = castToType;
+ cmp->gtOp.gtOp1 = castOp;
+ op2->gtType = castToType;
+
+ BlockRange().Remove(cast);
+ }
+ }
}
+ else if (op1->OperIs(GT_AND) && cmp->OperIs(GT_EQ, GT_NE))
+ {
+ //
+ // Transform ((x AND y) EQ|NE 0) into (x TEST_EQ|TEST_NE y) when possible.
+ //
- BasicBlock* newBlock2 = comp->fgSplitBlockAtEnd(newBlock);
+ GenTree* andOp1 = op1->gtGetOp1();
+ GenTree* andOp2 = op1->gtGetOp2();
- GenTree* hiJcc = new (comp, GT_JCC) GenTreeJumpCC(hiCmpOper);
- hiJcc->gtFlags = cmp->gtFlags;
- LIR::AsRange(newBlock).InsertAfter(nullptr, hiJcc);
+ if (op2Value != 0)
+ {
+ //
+ // If we don't have a 0 compare we can get one by transforming ((x AND mask) EQ|NE mask)
+ // into ((x AND mask) NE|EQ 0) when mask is a single bit.
+ //
- BlockRange().Remove(loSrc1.Def());
- BlockRange().Remove(loSrc2.Def());
- GenTree* loCmp = comp->gtNewOperNode(loCmpOper, TYP_INT, loSrc1.Def(), loSrc2.Def());
- loCmp->gtFlags = cmp->gtFlags | GTF_UNSIGNED;
- GenTree* loJtrue = comp->gtNewOperNode(GT_JTRUE, TYP_VOID, loCmp);
- LIR::AsRange(newBlock2).InsertAfter(nullptr, loSrc1.Def(), loSrc2.Def(), loCmp, loJtrue);
+ if (isPow2(static_cast<size_t>(op2Value)) && andOp2->IsIntegralConst(op2Value))
+ {
+ op2Value = 0;
+ op2->SetIconValue(0);
+ cmp->SetOperRaw(GenTree::ReverseRelop(cmp->OperGet()));
+ }
+ }
- m_block->bbJumpKind = BBJ_COND;
- m_block->bbJumpDest = nextDest;
- nextDest->bbFlags |= BBF_JMP_TARGET;
- comp->fgAddRefPred(nextDest, m_block);
+ if (op2Value == 0)
+ {
+ BlockRange().Remove(op1);
+ BlockRange().Remove(op2);
- newBlock->bbJumpKind = BBJ_COND;
- newBlock->bbJumpDest = jumpDest;
- comp->fgAddRefPred(jumpDest, newBlock);
+ cmp->SetOperRaw(cmp->OperIs(GT_EQ) ? GT_TEST_EQ : GT_TEST_NE);
+ cmp->gtOp.gtOp1 = andOp1;
+ cmp->gtOp.gtOp2 = andOp2;
- assert(newBlock2->bbJumpKind == BBJ_COND);
- assert(newBlock2->bbJumpDest == jumpDest);
+ if (andOp1->isMemoryOp() && andOp2->IsIntegralConst())
+ {
+ //
+ // For "test" we only care about the bits that are set in the second operand (mask).
+ // If the mask fits in a small type then we can narrow both operands to generate a "test"
+ // instruction with a smaller encoding ("test" does not have a r/m32, imm8 form) and avoid
+ // a widening load in some cases.
+ //
+ // For 16 bit operands we narrow only if the memory operand is already 16 bit. This matches
+ // the behavior of a previous implementation and avoids adding more cases where we generate
+ // 16 bit instructions that require a length changing prefix (0x66). These suffer from
+ // significant decoder stalls on Intel CPUs.
+ //
+ // We could also do this for 64 bit masks that fit into 32 bit but it doesn't help.
+ // In such cases morph narrows down the existing GT_AND by inserting a cast between it and
+ // the memory operand so we'd need to add more code to recognize and eliminate that cast.
+ //
+
+ size_t mask = static_cast<size_t>(andOp2->AsIntCon()->IconValue());
+
+ if (FitsIn<UINT8>(mask))
+ {
+ andOp1->gtType = TYP_UBYTE;
+ andOp2->gtType = TYP_UBYTE;
+ }
+ else if (FitsIn<UINT16>(mask) && genTypeSize(andOp1) == 2)
+ {
+ andOp1->gtType = TYP_CHAR;
+ andOp2->gtType = TYP_CHAR;
+ }
+ }
+ }
+ }
}
- BlockRange().Remove(src1);
- BlockRange().Remove(src2);
-#endif
+ if (cmp->gtGetOp1()->TypeGet() == cmp->gtGetOp2()->TypeGet())
+ {
+ if (varTypeIsSmall(cmp->gtGetOp1()->TypeGet()) && varTypeIsUnsigned(cmp->gtGetOp1()->TypeGet()))
+ {
+ //
+ // If both operands have the same type then codegen will use the common operand type to
+ // determine the instruction type. For small types this would result in performing a
+ // signed comparison of two small unsigned values without zero extending them to TYP_INT
+ // which is incorrect. Note that making the comparison unsigned doesn't imply that codegen
+ // has to generate a small comparison, it can still correctly generate a TYP_INT comparison.
+ //
+
+ cmp->gtFlags |= GTF_UNSIGNED;
+ }
+ }
+#endif // _TARGET_XARCH_
}
// Lower "jmp <method>" tail call to insert PInvoke method epilog if required.
@@ -3498,18 +3678,19 @@ GenTree* Lowering::TryCreateAddrMode(LIR::Use&& use, bool isIndir)
// make sure there are not any side effects between def of leaves and use
if (!doAddrMode || AreSourcesPossiblyModifiedLocals(addr, base, index))
{
- JITDUMP(" No addressing mode\n");
+ JITDUMP("No addressing mode:\n ");
+ DISPNODE(addr);
return addr;
}
GenTreePtr arrLength = nullptr;
JITDUMP("Addressing mode:\n");
- JITDUMP(" Base\n");
+ JITDUMP(" Base\n ");
DISPNODE(base);
if (index != nullptr)
{
- JITDUMP(" + Index * %u + %u\n", scale, offset);
+ JITDUMP(" + Index * %u + %u\n ", scale, offset);
DISPNODE(index);
}
else
@@ -4023,12 +4204,6 @@ void Lowering::LowerStoreInd(GenTree* node)
node->AsStoreInd()->SetRMWStatusDefault();
}
-void Lowering::LowerBlockStore(GenTreeBlk* blkNode)
-{
- GenTree* src = blkNode->Data();
- TryCreateAddrMode(LIR::Use(BlockRange(), &blkNode->Addr(), blkNode), false);
-}
-
//------------------------------------------------------------------------
// LowerArrElem: Lower a GT_ARR_ELEM node
//
@@ -4303,13 +4478,12 @@ void Lowering::DoPhase()
m_block = block;
for (GenTree* node : BlockRange().NonPhiNodes())
{
-/* We increment the number position of each tree node by 2 to
-* simplify the logic when there's the case of a tree that implicitly
-* does a dual-definition of temps (the long case). In this case
-* is easier to already have an idle spot to handle a dual-def instead
-* of making some messy adjustments if we only increment the
-* number position by one.
-*/
+ // We increment the number position of each tree node by 2 to simplify the logic when there's the case of
+ // a tree that implicitly does a dual-definition of temps (the long case). In this case it is easier to
+ // already have an idle spot to handle a dual-def instead of making some messy adjustments if we only
+ // increment the number position by one.
+ CLANG_FORMAT_COMMENT_ANCHOR;
+
#ifdef DEBUG
node->gtSeqNum = currentLoc;
#endif
@@ -4633,13 +4807,8 @@ bool Lowering::NodesAreEquivalentLeaves(GenTreePtr tree1, GenTreePtr tree2)
}
}
-#ifdef _TARGET_64BIT_
/**
* Get common information required to handle a cast instruction
- *
- * Right now only supports 64 bit targets. In order to support 32 bit targets the
- * switch statement needs work.
- *
*/
void Lowering::getCastDescription(GenTreePtr treeNode, CastInfo* castInfo)
{
@@ -4675,7 +4844,6 @@ void Lowering::getCastDescription(GenTreePtr treeNode, CastInfo* castInfo)
bool signCheckOnly = false;
// Do we need to compare the value, or just check masks
-
switch (dstType)
{
default:
@@ -4709,9 +4877,13 @@ void Lowering::getCastDescription(GenTreePtr treeNode, CastInfo* castInfo)
}
else
{
+#ifdef _TARGET_64BIT_
typeMask = 0xFFFFFFFF80000000LL;
- typeMin = INT_MIN;
- typeMax = INT_MAX;
+#else
+ typeMask = 0x80000000;
+#endif
+ typeMin = INT_MIN;
+ typeMax = INT_MAX;
}
break;
@@ -4722,7 +4894,11 @@ void Lowering::getCastDescription(GenTreePtr treeNode, CastInfo* castInfo)
}
else
{
+#ifdef _TARGET_64BIT_
typeMask = 0xFFFFFFFF00000000LL;
+#else
+ typeMask = 0x00000000;
+#endif
}
break;
@@ -4746,8 +4922,6 @@ void Lowering::getCastDescription(GenTreePtr treeNode, CastInfo* castInfo)
}
}
-#endif // _TARGET_64BIT_
-
#ifdef DEBUG
void Lowering::DumpNodeInfoMap()
{
diff --git a/src/jit/lower.h b/src/jit/lower.h
index c1cafb4ee8..57b4127f26 100644
--- a/src/jit/lower.h
+++ b/src/jit/lower.h
@@ -45,9 +45,7 @@ public:
bool signCheckOnly; // For converting between unsigned/signed int
};
-#ifdef _TARGET_64BIT_
static void getCastDescription(GenTreePtr treeNode, CastInfo* castInfo);
-#endif // _TARGET_64BIT_
private:
#ifdef DEBUG
@@ -168,7 +166,7 @@ private:
// operands.
//
// Arguments:
- // tree - Gentree of a bininary operation.
+ // tree - Gentree of a binary operation.
//
// Returns
// None.
@@ -194,6 +192,7 @@ private:
}
}
#endif // defined(_TARGET_XARCH_)
+ void TreeNodeInfoInitStoreLoc(GenTree* tree);
void TreeNodeInfoInitReturn(GenTree* tree);
void TreeNodeInfoInitShiftRotate(GenTree* tree);
void TreeNodeInfoInitCall(GenTreeCall* call);
@@ -203,14 +202,26 @@ private:
void TreeNodeInfoInitLogicalOp(GenTree* tree);
void TreeNodeInfoInitModDiv(GenTree* tree);
void TreeNodeInfoInitIntrinsic(GenTree* tree);
+ void TreeNodeInfoInitStoreLoc(GenTreeLclVarCommon* tree);
+ void TreeNodeInfoInitIndir(GenTree* indirTree);
+ void TreeNodeInfoInitGCWriteBarrier(GenTree* tree);
+#if !CPU_LOAD_STORE_ARCH
+ bool TreeNodeInfoInitIfRMWMemOp(GenTreePtr storeInd);
+#endif
#ifdef FEATURE_SIMD
void TreeNodeInfoInitSIMD(GenTree* tree);
#endif // FEATURE_SIMD
void TreeNodeInfoInitCast(GenTree* tree);
#ifdef _TARGET_ARM64_
+ void LowerPutArgStk(GenTreePutArgStk* argNode, fgArgTabEntryPtr info);
+ void TreeNodeInfoInitPutArgStk(GenTreePutArgStk* argNode, fgArgTabEntryPtr info);
+#endif // _TARGET_ARM64_
+#ifdef _TARGET_ARM_
+ void LowerPutArgStk(GenTreePutArgStk* argNode, fgArgTabEntryPtr info);
void TreeNodeInfoInitPutArgStk(GenTreePutArgStk* argNode, fgArgTabEntryPtr info);
#endif // _TARGET_ARM64_
#ifdef FEATURE_PUT_STRUCT_ARG_STK
+ void LowerPutArgStk(GenTreePutArgStk* tree);
void TreeNodeInfoInitPutArgStk(GenTreePutArgStk* tree);
#endif // FEATURE_PUT_STRUCT_ARG_STK
void TreeNodeInfoInitLclHeap(GenTree* tree);
@@ -231,18 +242,16 @@ private:
void LowerCast(GenTree* node);
#if defined(_TARGET_XARCH_)
- void SetMulOpCounts(GenTreePtr tree);
+ void TreeNodeInfoInitMul(GenTreePtr tree);
+ void SetContainsAVXFlags(bool isFloatingPointType = true, unsigned sizeOfSIMDVector = 0);
#endif // defined(_TARGET_XARCH_)
#if !CPU_LOAD_STORE_ARCH
bool IsRMWIndirCandidate(GenTree* operand, GenTree* storeInd);
bool IsBinOpInRMWStoreInd(GenTreePtr tree);
bool IsRMWMemOpRootedAtStoreInd(GenTreePtr storeIndTree, GenTreePtr* indirCandidate, GenTreePtr* indirOpSource);
- bool SetStoreIndOpCountsIfRMWMemOp(GenTreePtr storeInd);
#endif
void LowerStoreLoc(GenTreeLclVarCommon* tree);
- void SetIndirAddrOpCounts(GenTree* indirTree);
- void LowerGCWriteBarrier(GenTree* tree);
GenTree* LowerArrElem(GenTree* node);
void LowerRotate(GenTree* tree);
diff --git a/src/jit/lowerarm.cpp b/src/jit/lowerarm.cpp
index 5bf23c4199..9792b8a9c6 100644
--- a/src/jit/lowerarm.cpp
+++ b/src/jit/lowerarm.cpp
@@ -23,8 +23,6 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#ifndef LEGACY_BACKEND // This file is ONLY used for the RyuJIT backend that uses the linear scan register allocator
-// The ARM backend is not yet implemented, so the methods here are all NYI.
-// TODO-ARM-NYI: Lowering for ARM.
#ifdef _TARGET_ARM_
#include "jit.h"
@@ -33,6 +31,68 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include "lsra.h"
//------------------------------------------------------------------------
+// LowerStoreLoc: Lower a store of a lclVar
+//
+// Arguments:
+// storeLoc - the local store (GT_STORE_LCL_FLD or GT_STORE_LCL_VAR)
+//
+// Notes:
+// This involves:
+// - Widening operations of unsigneds.
+//
+void Lowering::LowerStoreLoc(GenTreeLclVarCommon* storeLoc)
+{
+ // Try to widen the ops if they are going into a local var.
+ GenTree* op1 = storeLoc->gtGetOp1();
+ if ((storeLoc->gtOper == GT_STORE_LCL_VAR) && (op1->gtOper == GT_CNS_INT))
+ {
+ GenTreeIntCon* con = op1->AsIntCon();
+ ssize_t ival = con->gtIconVal;
+ unsigned varNum = storeLoc->gtLclNum;
+ LclVarDsc* varDsc = comp->lvaTable + varNum;
+
+ if (varDsc->lvIsSIMDType())
+ {
+ noway_assert(storeLoc->gtType != TYP_STRUCT);
+ }
+ unsigned size = genTypeSize(storeLoc);
+ // If we are storing a constant into a local variable
+ // we extend the size of the store here
+ if ((size < 4) && !varTypeIsStruct(varDsc))
+ {
+ if (!varTypeIsUnsigned(varDsc))
+ {
+ if (genTypeSize(storeLoc) == 1)
+ {
+ if ((ival & 0x7f) != ival)
+ {
+ ival = ival | 0xffffff00;
+ }
+ }
+ else
+ {
+ assert(genTypeSize(storeLoc) == 2);
+ if ((ival & 0x7fff) != ival)
+ {
+ ival = ival | 0xffff0000;
+ }
+ }
+ }
+
+ // A local stack slot is at least 4 bytes in size, regardless of
+ // what the local var is typed as, so auto-promote it here
+ // unless it is a field of a promoted struct
+ // TODO-ARM-CQ: if the field is promoted shouldn't we also be able to do this?
+ if (!varDsc->lvIsStructField)
+ {
+ storeLoc->gtType = TYP_INT;
+ con->SetIconValue(ival);
+ }
+ }
+ }
+}
+
+//------------------------------------------------------------------------
// LowerCast: Lower GT_CAST(srcType, DstType) nodes.
//
// Arguments:
@@ -57,7 +117,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Note that for the overflow conversions we still depend on helper calls and
// don't expect to see them here.
// i) GT_CAST(float/double, int type with overflow detection)
-
+//
void Lowering::LowerCast(GenTree* tree)
{
assert(tree->OperGet() == GT_CAST);
@@ -71,10 +131,8 @@ void Lowering::LowerCast(GenTree* tree)
var_types srcType = op1->TypeGet();
var_types tmpType = TYP_UNDEF;
- // TODO-ARM-Cleanup: Remove following NYI assertions.
if (varTypeIsFloating(srcType))
{
- NYI_ARM("Lowering for cast from float"); // Not tested yet.
noway_assert(!tree->gtOverflow());
}
@@ -104,36 +162,78 @@ void Lowering::LowerCast(GenTree* tree)
}
}
+//------------------------------------------------------------------------
+// LowerRotate: Lower GT_ROL and GT_ROL nodes.
+//
+// Arguments:
+// tree - the node to lower
+//
+// Return Value:
+// None.
+//
void Lowering::LowerRotate(GenTreePtr tree)
{
- NYI_ARM("ARM Lowering for ROL and ROR");
-}
+ if (tree->OperGet() == GT_ROL)
+ {
+ // There is no ROL instruction on ARM. Convert ROL into ROR.
+ GenTreePtr rotatedValue = tree->gtOp.gtOp1;
+ unsigned rotatedValueBitSize = genTypeSize(rotatedValue->gtType) * 8;
+ GenTreePtr rotateLeftIndexNode = tree->gtOp.gtOp2;
-void Lowering::TreeNodeInfoInit(GenTree* stmt)
-{
- NYI("ARM TreeNodInfoInit");
+ if (rotateLeftIndexNode->IsCnsIntOrI())
+ {
+ ssize_t rotateLeftIndex = rotateLeftIndexNode->gtIntCon.gtIconVal;
+ ssize_t rotateRightIndex = rotatedValueBitSize - rotateLeftIndex;
+ rotateLeftIndexNode->gtIntCon.gtIconVal = rotateRightIndex;
+ }
+ else
+ {
+ GenTreePtr tmp =
+ comp->gtNewOperNode(GT_NEG, genActualType(rotateLeftIndexNode->gtType), rotateLeftIndexNode);
+ BlockRange().InsertAfter(rotateLeftIndexNode, tmp);
+ tree->gtOp.gtOp2 = tmp;
+ }
+ tree->ChangeOper(GT_ROR);
+ }
}
-// returns true if the tree can use the read-modify-write memory instruction form
-bool Lowering::isRMWRegOper(GenTreePtr tree)
+//------------------------------------------------------------------------
+// LowerPutArgStk: Lower a GT_PUTARG_STK node
+//
+// Arguments:
+// argNode - a GT_PUTARG_STK node
+//
+// Return Value:
+// None.
+//
+// Notes:
+// There is currently no Lowering required for this on ARM.
+//
+void Lowering::LowerPutArgStk(GenTreePutArgStk* argNode, fgArgTabEntryPtr info)
{
- return false;
}
+//------------------------------------------------------------------------
+// IsCallTargetInRange: Can a call target address be encoded in-place?
+//
+// Return Value:
+// True if the addr fits into the range.
+//
bool Lowering::IsCallTargetInRange(void* addr)
{
return comp->codeGen->validImmForBL((ssize_t)addr);
}
-// return true if the immediate can be folded into an instruction, for example small enough and non-relocatable
+//------------------------------------------------------------------------
+// IsContainableImmed: Is an immediate encodable in-place?
+//
+// Return Value:
+// True if the immediate can be folded into an instruction,
+// for example small enough and non-relocatable.
bool Lowering::IsContainableImmed(GenTree* parentNode, GenTree* childNode)
{
if (varTypeIsFloating(parentNode->TypeGet()))
{
- // TODO-ARM-Cleanup: not tested yet.
- NYI_ARM("ARM IsContainableImmed for floating point type");
-
- // We can contain a floating point 0.0 constant in a compare instruction
switch (parentNode->OperGet())
{
default:
@@ -146,7 +246,12 @@ bool Lowering::IsContainableImmed(GenTree* parentNode, GenTree* childNode)
case GT_GE:
case GT_GT:
if (childNode->IsIntegralConst(0))
+ {
+ // TODO-ARM-Cleanup: not tested yet.
+ NYI_ARM("ARM IsContainableImmed for floating point type");
+ // We can contain a floating point 0.0 constant in a compare instruction
return true;
+ }
break;
}
}
@@ -185,13 +290,6 @@ bool Lowering::IsContainableImmed(GenTree* parentNode, GenTree* childNode)
if (emitter::emitIns_valid_imm_for_alu(immVal))
return true;
break;
-
- case GT_STORE_LCL_VAR:
- // TODO-ARM-Cleanup: not tested yet
- NYI_ARM("ARM IsContainableImmed for GT_STORE_LCL_VAR");
- if (immVal == 0)
- return true;
- break;
}
}
diff --git a/src/jit/lowerarm64.cpp b/src/jit/lowerarm64.cpp
index cc9e2266d2..f5bc55e10c 100644
--- a/src/jit/lowerarm64.cpp
+++ b/src/jit/lowerarm64.cpp
@@ -29,34 +29,20 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include "sideeffects.h"
#include "lower.h"
-// there is not much lowering to do with storing a local but
-// we do some handling of contained immediates and widening operations of unsigneds
+//------------------------------------------------------------------------
+// LowerStoreLoc: Lower a store of a lclVar
+//
+// Arguments:
+// storeLoc - the local store (GT_STORE_LCL_FLD or GT_STORE_LCL_VAR)
+//
+// Notes:
+// This involves:
+// - Widening operations of unsigneds.
+
void Lowering::LowerStoreLoc(GenTreeLclVarCommon* storeLoc)
{
- TreeNodeInfo* info = &(storeLoc->gtLsraInfo);
-
- // Is this the case of var = call where call is returning
- // a value in multiple return registers?
- GenTree* op1 = storeLoc->gtGetOp1();
- if (op1->IsMultiRegCall())
- {
- // backend expects to see this case only for store lclvar.
- assert(storeLoc->OperGet() == GT_STORE_LCL_VAR);
-
- // srcCount = number of registers in which the value is returned by call
- GenTreeCall* call = op1->AsCall();
- ReturnTypeDesc* retTypeDesc = call->GetReturnTypeDesc();
- info->srcCount = retTypeDesc->GetReturnRegCount();
-
- // Call node srcCandidates = Bitwise-OR(allregs(GetReturnRegType(i))) for all i=0..RetRegCount-1
- regMaskTP srcCandidates = m_lsra->allMultiRegCallNodeRegs(call);
- op1->gtLsraInfo.setSrcCandidates(m_lsra, srcCandidates);
- return;
- }
-
- CheckImmedAndMakeContained(storeLoc, op1);
-
// Try to widen the ops if they are going into a local var.
+ GenTree* op1 = storeLoc->gtGetOp1();
if ((storeLoc->gtOper == GT_STORE_LCL_VAR) && (op1->gtOper == GT_CNS_INT))
{
GenTreeIntCon* con = op1->AsIntCon();
@@ -105,1120 +91,8 @@ void Lowering::LowerStoreLoc(GenTreeLclVarCommon* storeLoc)
}
}
-/**
- * Takes care of annotating the register requirements
- * for every TreeNodeInfo struct that maps to each tree node.
- * Preconditions:
- * LSRA has been initialized and there is a TreeNodeInfo node
- * already allocated and initialized for every tree in the IR.
- * Postconditions:
- * Every TreeNodeInfo instance has the right annotations on register
- * requirements needed by LSRA to build the Interval Table (source,
- * destination and internal [temp] register counts).
- * This code is refactored originally from LSRA.
- */
-void Lowering::TreeNodeInfoInit(GenTree* tree)
-{
- LinearScan* l = m_lsra;
- Compiler* compiler = comp;
-
- unsigned kind = tree->OperKind();
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- RegisterType registerType = TypeGet(tree);
-
- JITDUMP("TreeNodeInfoInit for: ");
- DISPNODE(tree);
- JITDUMP("\n");
-
- switch (tree->OperGet())
- {
- GenTree* op1;
- GenTree* op2;
-
- default:
- info->dstCount = (tree->TypeGet() == TYP_VOID) ? 0 : 1;
- if (kind & (GTK_CONST | GTK_LEAF))
- {
- info->srcCount = 0;
- }
- else if (kind & (GTK_SMPOP))
- {
- if (tree->gtGetOp2() != nullptr)
- {
- info->srcCount = 2;
- }
- else
- {
- info->srcCount = 1;
- }
- }
- else
- {
- unreached();
- }
- break;
-
- case GT_STORE_LCL_FLD:
- case GT_STORE_LCL_VAR:
- info->srcCount = 1;
- info->dstCount = 0;
- LowerStoreLoc(tree->AsLclVarCommon());
- break;
-
- case GT_BOX:
- noway_assert(!"box should not exist here");
- // The result of 'op1' is also the final result
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_PHYSREGDST:
- info->srcCount = 1;
- info->dstCount = 0;
- break;
-
- case GT_COMMA:
- {
- GenTreePtr firstOperand;
- GenTreePtr secondOperand;
- if (tree->gtFlags & GTF_REVERSE_OPS)
- {
- firstOperand = tree->gtOp.gtOp2;
- secondOperand = tree->gtOp.gtOp1;
- }
- else
- {
- firstOperand = tree->gtOp.gtOp1;
- secondOperand = tree->gtOp.gtOp2;
- }
- if (firstOperand->TypeGet() != TYP_VOID)
- {
- firstOperand->gtLsraInfo.isLocalDefUse = true;
- firstOperand->gtLsraInfo.dstCount = 0;
- }
- if (tree->TypeGet() == TYP_VOID && secondOperand->TypeGet() != TYP_VOID)
- {
- secondOperand->gtLsraInfo.isLocalDefUse = true;
- secondOperand->gtLsraInfo.dstCount = 0;
- }
- }
-
- __fallthrough;
-
- case GT_LIST:
- case GT_FIELD_LIST:
- case GT_ARGPLACE:
- case GT_NO_OP:
- case GT_START_NONGC:
- case GT_PROF_HOOK:
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_CNS_DBL:
- info->srcCount = 0;
- info->dstCount = 1;
- {
- GenTreeDblCon* dblConst = tree->AsDblCon();
- double constValue = dblConst->gtDblCon.gtDconVal;
-
- if (emitter::emitIns_valid_imm_for_fmov(constValue))
- {
- // Directly encode constant to instructions.
- }
- else
- {
- // Reserve int to load constant from memory (IF_LARGELDC)
- info->internalIntCount = 1;
- }
- }
- break;
-
- case GT_QMARK:
- case GT_COLON:
- info->srcCount = 0;
- info->dstCount = 0;
- unreached();
- break;
-
- case GT_RETURN:
- TreeNodeInfoInitReturn(tree);
- break;
-
- case GT_RETFILT:
- if (tree->TypeGet() == TYP_VOID)
- {
- info->srcCount = 0;
- info->dstCount = 0;
- }
- else
- {
- assert(tree->TypeGet() == TYP_INT);
-
- info->srcCount = 1;
- info->dstCount = 0;
-
- info->setSrcCandidates(l, RBM_INTRET);
- tree->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, RBM_INTRET);
- }
- break;
-
- case GT_NOP:
- // A GT_NOP is either a passthrough (if it is void, or if it has
- // a child), but must be considered to produce a dummy value if it
- // has a type but no child
- info->srcCount = 0;
- if (tree->TypeGet() != TYP_VOID && tree->gtOp.gtOp1 == nullptr)
- {
- info->dstCount = 1;
- }
- else
- {
- info->dstCount = 0;
- }
- break;
-
- case GT_JTRUE:
- info->srcCount = 0;
- info->dstCount = 0;
- l->clearDstCount(tree->gtOp.gtOp1);
- break;
-
- case GT_JMP:
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_SWITCH:
- // This should never occur since switch nodes must not be visible at this
- // point in the JIT.
- info->srcCount = 0;
- info->dstCount = 0; // To avoid getting uninit errors.
- noway_assert(!"Switch must be lowered at this point");
- break;
-
- case GT_JMPTABLE:
- info->srcCount = 0;
- info->dstCount = 1;
- break;
-
- case GT_SWITCH_TABLE:
- info->srcCount = 2;
- info->internalIntCount = 1;
- info->dstCount = 0;
- break;
-
- case GT_ASG:
- case GT_ASG_ADD:
- case GT_ASG_SUB:
- noway_assert(!"We should never hit any assignment operator in lowering");
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_ADD:
- case GT_SUB:
- if (varTypeIsFloating(tree->TypeGet()))
- {
- // overflow operations aren't supported on float/double types.
- assert(!tree->gtOverflow());
-
- // No implicit conversions at this stage as the expectation is that
- // everything is made explicit by adding casts.
- assert(tree->gtOp.gtOp1->TypeGet() == tree->gtOp.gtOp2->TypeGet());
-
- info->srcCount = 2;
- info->dstCount = 1;
-
- break;
- }
-
- __fallthrough;
-
- case GT_AND:
- case GT_OR:
- case GT_XOR:
- info->srcCount = 2;
- info->dstCount = 1;
- // Check and make op2 contained (if it is a containable immediate)
- CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
- break;
-
- case GT_RETURNTRAP:
- // this just turns into a compare of its child with an int
- // + a conditional call
- info->srcCount = 1;
- info->dstCount = 0;
- break;
-
- case GT_MOD:
- case GT_UMOD:
- NYI_IF(varTypeIsFloating(tree->TypeGet()), "FP Remainder in ARM64");
- assert(!"Shouldn't see an integer typed GT_MOD node in ARM64");
- break;
-
- case GT_MUL:
- if (tree->gtOverflow())
- {
- // Need a register different from target reg to check for overflow.
- info->internalIntCount = 2;
- }
- __fallthrough;
-
- case GT_DIV:
- case GT_MULHI:
- case GT_UDIV:
- {
- info->srcCount = 2;
- info->dstCount = 1;
- }
- break;
-
- case GT_INTRINSIC:
- {
- // TODO-ARM64-NYI
- // Right now only Abs/Round/Sqrt are treated as math intrinsics
- noway_assert((tree->gtIntrinsic.gtIntrinsicId == CORINFO_INTRINSIC_Abs) ||
- (tree->gtIntrinsic.gtIntrinsicId == CORINFO_INTRINSIC_Round) ||
- (tree->gtIntrinsic.gtIntrinsicId == CORINFO_INTRINSIC_Sqrt));
-
- // Both operand and its result must be of the same floating point type.
- op1 = tree->gtOp.gtOp1;
- assert(varTypeIsFloating(op1));
- assert(op1->TypeGet() == tree->TypeGet());
-
- info->srcCount = 1;
- info->dstCount = 1;
- }
- break;
-
-#ifdef FEATURE_SIMD
- case GT_SIMD:
- TreeNodeInfoInitSIMD(tree);
- break;
-#endif // FEATURE_SIMD
-
- case GT_CAST:
- {
- // TODO-ARM64-CQ: Int-To-Int conversions - castOp cannot be a memory op and must have an assigned
- // register.
- // see CodeGen::genIntToIntCast()
-
- info->srcCount = 1;
- info->dstCount = 1;
-
- // Non-overflow casts to/from float/double are done using SSE2 instructions
- // and that allow the source operand to be either a reg or memop. Given the
- // fact that casts from small int to float/double are done as two-level casts,
- // the source operand is always guaranteed to be of size 4 or 8 bytes.
- var_types castToType = tree->CastToType();
- GenTreePtr castOp = tree->gtCast.CastOp();
- var_types castOpType = castOp->TypeGet();
- if (tree->gtFlags & GTF_UNSIGNED)
- {
- castOpType = genUnsignedType(castOpType);
- }
-#ifdef DEBUG
- if (!tree->gtOverflow() && (varTypeIsFloating(castToType) || varTypeIsFloating(castOpType)))
- {
- // If converting to float/double, the operand must be 4 or 8 byte in size.
- if (varTypeIsFloating(castToType))
- {
- unsigned opSize = genTypeSize(castOpType);
- assert(opSize == 4 || opSize == 8);
- }
- }
-#endif // DEBUG
- // Some overflow checks need a temp reg
-
- CastInfo castInfo;
-
- // Get information about the cast.
- getCastDescription(tree, &castInfo);
-
- if (castInfo.requiresOverflowCheck)
- {
- var_types srcType = castOp->TypeGet();
- emitAttr cmpSize = EA_ATTR(genTypeSize(srcType));
-
- // If we cannot store the comparisons in an immediate for either
- // comparing against the max or min value, then we will need to
- // reserve a temporary register.
-
- bool canStoreMaxValue = emitter::emitIns_valid_imm_for_cmp(castInfo.typeMax, cmpSize);
- bool canStoreMinValue = emitter::emitIns_valid_imm_for_cmp(castInfo.typeMin, cmpSize);
-
- if (!canStoreMaxValue || !canStoreMinValue)
- {
- info->internalIntCount = 1;
- }
- }
- }
- break;
-
- case GT_NEG:
- info->srcCount = 1;
- info->dstCount = 1;
- break;
-
- case GT_NOT:
- info->srcCount = 1;
- info->dstCount = 1;
- break;
-
- case GT_LSH:
- case GT_RSH:
- case GT_RSZ:
- case GT_ROR:
- {
- info->srcCount = 2;
- info->dstCount = 1;
-
- GenTreePtr shiftBy = tree->gtOp.gtOp2;
- GenTreePtr source = tree->gtOp.gtOp1;
- if (shiftBy->IsCnsIntOrI())
- {
- l->clearDstCount(shiftBy);
- info->srcCount--;
- }
- }
- break;
-
- case GT_EQ:
- case GT_NE:
- case GT_LT:
- case GT_LE:
- case GT_GE:
- case GT_GT:
- TreeNodeInfoInitCmp(tree);
- break;
-
- case GT_CKFINITE:
- info->srcCount = 1;
- info->dstCount = 1;
- info->internalIntCount = 1;
- break;
-
- case GT_CMPXCHG:
- info->srcCount = 3;
- info->dstCount = 1;
-
- // TODO-ARM64-NYI
- NYI("CMPXCHG");
- break;
-
- case GT_LOCKADD:
- info->srcCount = 2;
- info->dstCount = 0;
- CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
- break;
-
- case GT_CALL:
- TreeNodeInfoInitCall(tree->AsCall());
- break;
-
- case GT_ADDR:
- {
- // For a GT_ADDR, the child node should not be evaluated into a register
- GenTreePtr child = tree->gtOp.gtOp1;
- assert(!l->isCandidateLocalRef(child));
- l->clearDstCount(child);
- info->srcCount = 0;
- info->dstCount = 1;
- }
- break;
-
- case GT_BLK:
- case GT_DYN_BLK:
- // These should all be eliminated prior to Lowering.
- assert(!"Non-store block node in Lowering");
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_STORE_BLK:
- case GT_STORE_OBJ:
- case GT_STORE_DYN_BLK:
- TreeNodeInfoInitBlockStore(tree->AsBlk());
- break;
-
- case GT_INIT_VAL:
- // Always a passthrough of its child's value.
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_LCLHEAP:
- {
- info->srcCount = 1;
- info->dstCount = 1;
-
- // Need a variable number of temp regs (see genLclHeap() in codegenamd64.cpp):
- // Here '-' means don't care.
- //
- // Size? Init Memory? # temp regs
- // 0 - 0
- // const and <=6 ptr words - 0
- // const and <PageSize No 0
- // >6 ptr words Yes hasPspSym ? 1 : 0
- // Non-const Yes hasPspSym ? 1 : 0
- // Non-const No 2
- //
- // PSPSym - If the method has PSPSym increment internalIntCount by 1.
- //
- bool hasPspSym;
-#if FEATURE_EH_FUNCLETS
- hasPspSym = (compiler->lvaPSPSym != BAD_VAR_NUM);
-#else
- hasPspSym = false;
-#endif
-
- GenTreePtr size = tree->gtOp.gtOp1;
- if (size->IsCnsIntOrI())
- {
- MakeSrcContained(tree, size);
-
- size_t sizeVal = size->gtIntCon.gtIconVal;
-
- if (sizeVal == 0)
- {
- info->internalIntCount = 0;
- }
- else
- {
- // Compute the amount of memory to properly STACK_ALIGN.
- // Note: The Gentree node is not updated here as it is cheap to recompute stack aligned size.
- // This should also help in debugging as we can examine the original size specified with
- // localloc.
- sizeVal = AlignUp(sizeVal, STACK_ALIGN);
- size_t cntStackAlignedWidthItems = (sizeVal >> STACK_ALIGN_SHIFT);
-
- // For small allocations upto 4 'stp' instructions (i.e. 64 bytes of localloc)
- //
- if (cntStackAlignedWidthItems <= 4)
- {
- info->internalIntCount = 0;
- }
- else if (!compiler->info.compInitMem)
- {
- // No need to initialize allocated stack space.
- if (sizeVal < compiler->eeGetPageSize())
- {
- info->internalIntCount = 0;
- }
- else
- {
- // We need two registers: regCnt and RegTmp
- info->internalIntCount = 2;
- }
- }
- else
- {
- // greater than 4 and need to zero initialize allocated stack space.
- // If the method has PSPSym, we need an internal register to hold regCnt
- // since targetReg allocated to GT_LCLHEAP node could be the same as one of
- // the the internal registers.
- info->internalIntCount = hasPspSym ? 1 : 0;
- }
- }
- }
- else
- {
- if (!compiler->info.compInitMem)
- {
- info->internalIntCount = 2;
- }
- else
- {
- // If the method has PSPSym, we need an internal register to hold regCnt
- // since targetReg allocated to GT_LCLHEAP node could be the same as one of
- // the the internal registers.
- info->internalIntCount = hasPspSym ? 1 : 0;
- }
- }
-
- // If the method has PSPSym, we would need an addtional register to relocate it on stack.
- if (hasPspSym)
- {
- // Exclude const size 0
- if (!size->IsCnsIntOrI() || (size->gtIntCon.gtIconVal > 0))
- info->internalIntCount++;
- }
- }
- break;
-
- case GT_ARR_BOUNDS_CHECK:
-#ifdef FEATURE_SIMD
- case GT_SIMD_CHK:
-#endif // FEATURE_SIMD
- {
- GenTreeBoundsChk* node = tree->AsBoundsChk();
- // Consumes arrLen & index - has no result
- info->srcCount = 2;
- info->dstCount = 0;
-
- GenTree* intCns = nullptr;
- GenTree* other = nullptr;
- if (CheckImmedAndMakeContained(tree, node->gtIndex))
- {
- intCns = node->gtIndex;
- other = node->gtArrLen;
- }
- else if (CheckImmedAndMakeContained(tree, node->gtArrLen))
- {
- intCns = node->gtArrLen;
- other = node->gtIndex;
- }
- else
- {
- other = node->gtIndex;
- }
- }
- break;
-
- case GT_ARR_ELEM:
- // These must have been lowered to GT_ARR_INDEX
- noway_assert(!"We should never see a GT_ARR_ELEM in lowering");
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_ARR_INDEX:
- info->srcCount = 2;
- info->dstCount = 1;
-
- // We need one internal register when generating code for GT_ARR_INDEX, however the
- // register allocator always may just give us the same one as it gives us for the 'dst'
- // as a workaround we will just ask for two internal registers.
- //
- info->internalIntCount = 2;
-
- // For GT_ARR_INDEX, the lifetime of the arrObj must be extended because it is actually used multiple
- // times while the result is being computed.
- tree->AsArrIndex()->ArrObj()->gtLsraInfo.isDelayFree = true;
- info->hasDelayFreeSrc = true;
- break;
-
- case GT_ARR_OFFSET:
- // This consumes the offset, if any, the arrObj and the effective index,
- // and produces the flattened offset for this dimension.
- info->srcCount = 3;
- info->dstCount = 1;
- info->internalIntCount = 1;
-
- // we don't want to generate code for this
- if (tree->gtArrOffs.gtOffset->IsIntegralConst(0))
- {
- MakeSrcContained(tree, tree->gtArrOffs.gtOffset);
- }
- break;
-
- case GT_LEA:
- {
- GenTreeAddrMode* lea = tree->AsAddrMode();
-
- GenTree* base = lea->Base();
- GenTree* index = lea->Index();
- unsigned cns = lea->gtOffset;
-
- // This LEA is instantiating an address,
- // so we set up the srcCount and dstCount here.
- info->srcCount = 0;
- if (base != nullptr)
- {
- info->srcCount++;
- }
- if (index != nullptr)
- {
- info->srcCount++;
- }
- info->dstCount = 1;
-
- // On ARM64 we may need a single internal register
- // (when both conditions are true then we still only need a single internal register)
- if ((index != nullptr) && (cns != 0))
- {
- // ARM64 does not support both Index and offset so we need an internal register
- info->internalIntCount = 1;
- }
- else if (!emitter::emitIns_valid_imm_for_add(cns, EA_8BYTE))
- {
- // This offset can't be contained in the add instruction, so we need an internal register
- info->internalIntCount = 1;
- }
- }
- break;
-
- case GT_STOREIND:
- {
- info->srcCount = 2;
- info->dstCount = 0;
- GenTree* src = tree->gtOp.gtOp2;
-
- if (compiler->codeGen->gcInfo.gcIsWriteBarrierAsgNode(tree))
- {
- LowerGCWriteBarrier(tree);
- break;
- }
- if (!varTypeIsFloating(src->TypeGet()) && src->IsIntegralConst(0))
- {
- // an integer zero for 'src' can be contained.
- MakeSrcContained(tree, src);
- }
-
- SetIndirAddrOpCounts(tree);
- }
- break;
-
- case GT_NULLCHECK:
- info->dstCount = 0;
- info->srcCount = 1;
- info->isLocalDefUse = true;
- // null check is an indirection on an addr
- SetIndirAddrOpCounts(tree);
- break;
-
- case GT_IND:
- info->dstCount = 1;
- info->srcCount = 1;
- SetIndirAddrOpCounts(tree);
- break;
-
- case GT_CATCH_ARG:
- info->srcCount = 0;
- info->dstCount = 1;
- info->setDstCandidates(l, RBM_EXCEPTION_OBJECT);
- break;
-
- case GT_CLS_VAR:
- info->srcCount = 0;
- // GT_CLS_VAR, by the time we reach the backend, must always
- // be a pure use.
- // It will produce a result of the type of the
- // node, and use an internal register for the address.
-
- info->dstCount = 1;
- assert((tree->gtFlags & (GTF_VAR_DEF | GTF_VAR_USEASG | GTF_VAR_USEDEF)) == 0);
- info->internalIntCount = 1;
- break;
- } // end switch (tree->OperGet())
-
- // We need to be sure that we've set info->srcCount and info->dstCount appropriately
- assert((info->dstCount < 2) || tree->IsMultiRegCall());
-}
-//------------------------------------------------------------------------
-// TreeNodeInfoInitReturn: Set the NodeInfo for a GT_RETURN.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitReturn(GenTree* tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- LinearScan* l = m_lsra;
- Compiler* compiler = comp;
-
- GenTree* op1 = tree->gtGetOp1();
- regMaskTP useCandidates = RBM_NONE;
-
- info->srcCount = (tree->TypeGet() == TYP_VOID) ? 0 : 1;
- info->dstCount = 0;
-
- if (varTypeIsStruct(tree))
- {
- // op1 has to be either an lclvar or a multi-reg returning call
- if ((op1->OperGet() == GT_LCL_VAR) || (op1->OperGet() == GT_LCL_FLD))
- {
- GenTreeLclVarCommon* lclVarCommon = op1->AsLclVarCommon();
- LclVarDsc* varDsc = &(compiler->lvaTable[lclVarCommon->gtLclNum]);
- assert(varDsc->lvIsMultiRegRet);
-
- // Mark var as contained if not enregistrable.
- if (!varTypeIsEnregisterableStruct(op1))
- {
- MakeSrcContained(tree, op1);
- }
- }
- else
- {
- noway_assert(op1->IsMultiRegCall());
-
- ReturnTypeDesc* retTypeDesc = op1->AsCall()->GetReturnTypeDesc();
- info->srcCount = retTypeDesc->GetReturnRegCount();
- useCandidates = retTypeDesc->GetABIReturnRegs();
- }
- }
- else
- {
- // Non-struct type return - determine useCandidates
- switch (tree->TypeGet())
- {
- case TYP_VOID:
- useCandidates = RBM_NONE;
- break;
- case TYP_FLOAT:
- useCandidates = RBM_FLOATRET;
- break;
- case TYP_DOUBLE:
- useCandidates = RBM_DOUBLERET;
- break;
- case TYP_LONG:
- useCandidates = RBM_LNGRET;
- break;
- default:
- useCandidates = RBM_INTRET;
- break;
- }
- }
-
- if (useCandidates != RBM_NONE)
- {
- tree->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, useCandidates);
- }
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitCall: Set the NodeInfo for a call.
-//
-// Arguments:
-// call - The call node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitCall(GenTreeCall* call)
-{
- TreeNodeInfo* info = &(call->gtLsraInfo);
- LinearScan* l = m_lsra;
- Compiler* compiler = comp;
- bool hasMultiRegRetVal = false;
- ReturnTypeDesc* retTypeDesc = nullptr;
-
- info->srcCount = 0;
- if (call->TypeGet() != TYP_VOID)
- {
- hasMultiRegRetVal = call->HasMultiRegRetVal();
- if (hasMultiRegRetVal)
- {
- // dst count = number of registers in which the value is returned by call
- retTypeDesc = call->GetReturnTypeDesc();
- info->dstCount = retTypeDesc->GetReturnRegCount();
- }
- else
- {
- info->dstCount = 1;
- }
- }
- else
- {
- info->dstCount = 0;
- }
-
- GenTree* ctrlExpr = call->gtControlExpr;
- if (call->gtCallType == CT_INDIRECT)
- {
- // either gtControlExpr != null or gtCallAddr != null.
- // Both cannot be non-null at the same time.
- assert(ctrlExpr == nullptr);
- assert(call->gtCallAddr != nullptr);
- ctrlExpr = call->gtCallAddr;
- }
-
- // set reg requirements on call target represented as control sequence.
- if (ctrlExpr != nullptr)
- {
- // we should never see a gtControlExpr whose type is void.
- assert(ctrlExpr->TypeGet() != TYP_VOID);
-
- info->srcCount++;
-
- // In case of fast tail implemented as jmp, make sure that gtControlExpr is
- // computed into a register.
- if (call->IsFastTailCall())
- {
- // Fast tail call - make sure that call target is always computed in IP0
- // so that epilog sequence can generate "br xip0" to achieve fast tail call.
- ctrlExpr->gtLsraInfo.setSrcCandidates(l, genRegMask(REG_IP0));
- }
- }
-
- RegisterType registerType = call->TypeGet();
-
- // Set destination candidates for return value of the call.
- if (hasMultiRegRetVal)
- {
- assert(retTypeDesc != nullptr);
- info->setDstCandidates(l, retTypeDesc->GetABIReturnRegs());
- }
- else if (varTypeIsFloating(registerType))
- {
- info->setDstCandidates(l, RBM_FLOATRET);
- }
- else if (registerType == TYP_LONG)
- {
- info->setDstCandidates(l, RBM_LNGRET);
- }
- else
- {
- info->setDstCandidates(l, RBM_INTRET);
- }
-
- // If there is an explicit this pointer, we don't want that node to produce anything
- // as it is redundant
- if (call->gtCallObjp != nullptr)
- {
- GenTreePtr thisPtrNode = call->gtCallObjp;
-
- if (thisPtrNode->gtOper == GT_PUTARG_REG)
- {
- l->clearOperandCounts(thisPtrNode);
- l->clearDstCount(thisPtrNode->gtOp.gtOp1);
- }
- else
- {
- l->clearDstCount(thisPtrNode);
- }
- }
-
- // First, count reg args
- bool callHasFloatRegArgs = false;
-
- for (GenTreePtr list = call->gtCallLateArgs; list; list = list->MoveNext())
- {
- assert(list->OperIsList());
-
- GenTreePtr argNode = list->Current();
-
- fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, argNode);
- assert(curArgTabEntry);
-
- if (curArgTabEntry->regNum == REG_STK)
- {
- // late arg that is not passed in a register
- assert(argNode->gtOper == GT_PUTARG_STK);
-
- TreeNodeInfoInitPutArgStk(argNode->AsPutArgStk(), curArgTabEntry);
- continue;
- }
-
- var_types argType = argNode->TypeGet();
- bool argIsFloat = varTypeIsFloating(argType);
- callHasFloatRegArgs |= argIsFloat;
-
- regNumber argReg = curArgTabEntry->regNum;
- // We will setup argMask to the set of all registers that compose this argument
- regMaskTP argMask = 0;
-
- argNode = argNode->gtEffectiveVal();
-
- // A GT_FIELD_LIST has a TYP_VOID, but is used to represent a multireg struct
- if (varTypeIsStruct(argNode) || (argNode->gtOper == GT_FIELD_LIST))
- {
- GenTreePtr actualArgNode = argNode;
- unsigned originalSize = 0;
-
- if (argNode->gtOper == GT_FIELD_LIST)
- {
- // There could be up to 2-4 PUTARG_REGs in the list (3 or 4 can only occur for HFAs)
- GenTreeFieldList* fieldListPtr = argNode->AsFieldList();
-
- // Initailize the first register and the first regmask in our list
- regNumber targetReg = argReg;
- regMaskTP targetMask = genRegMask(targetReg);
- unsigned iterationNum = 0;
- originalSize = 0;
-
- for (; fieldListPtr; fieldListPtr = fieldListPtr->Rest())
- {
- GenTreePtr putArgRegNode = fieldListPtr->Current();
- assert(putArgRegNode->gtOper == GT_PUTARG_REG);
- GenTreePtr putArgChild = putArgRegNode->gtOp.gtOp1;
-
- originalSize += REGSIZE_BYTES; // 8 bytes
-
- // Record the register requirements for the GT_PUTARG_REG node
- putArgRegNode->gtLsraInfo.setDstCandidates(l, targetMask);
- putArgRegNode->gtLsraInfo.setSrcCandidates(l, targetMask);
-
- // To avoid redundant moves, request that the argument child tree be
- // computed in the register in which the argument is passed to the call.
- putArgChild->gtLsraInfo.setSrcCandidates(l, targetMask);
-
- // We consume one source for each item in this list
- info->srcCount++;
- iterationNum++;
-
- // Update targetReg and targetMask for the next putarg_reg (if any)
- targetReg = genRegArgNext(targetReg);
- targetMask = genRegMask(targetReg);
- }
- }
- else
- {
-#ifdef DEBUG
- compiler->gtDispTreeRange(BlockRange(), argNode);
-#endif
- noway_assert(!"Unsupported TYP_STRUCT arg kind");
- }
-
- unsigned slots = ((unsigned)(roundUp(originalSize, REGSIZE_BYTES))) / REGSIZE_BYTES;
- regNumber curReg = argReg;
- regNumber lastReg = argIsFloat ? REG_ARG_FP_LAST : REG_ARG_LAST;
- unsigned remainingSlots = slots;
-
- while (remainingSlots > 0)
- {
- argMask |= genRegMask(curReg);
- remainingSlots--;
-
- if (curReg == lastReg)
- break;
-
- curReg = genRegArgNext(curReg);
- }
-
- // Struct typed arguments must be fully passed in registers (Reg/Stk split not allowed)
- noway_assert(remainingSlots == 0);
- argNode->gtLsraInfo.internalIntCount = 0;
- }
- else // A scalar argument (not a struct)
- {
- // We consume one source
- info->srcCount++;
-
- argMask |= genRegMask(argReg);
- argNode->gtLsraInfo.setDstCandidates(l, argMask);
- argNode->gtLsraInfo.setSrcCandidates(l, argMask);
-
- if (argNode->gtOper == GT_PUTARG_REG)
- {
- GenTreePtr putArgChild = argNode->gtOp.gtOp1;
-
- // To avoid redundant moves, request that the argument child tree be
- // computed in the register in which the argument is passed to the call.
- putArgChild->gtLsraInfo.setSrcCandidates(l, argMask);
- }
- }
- }
-
- // Now, count stack args
- // Note that these need to be computed into a register, but then
- // they're just stored to the stack - so the reg doesn't
- // need to remain live until the call. In fact, it must not
- // because the code generator doesn't actually consider it live,
- // so it can't be spilled.
-
- GenTreePtr args = call->gtCallArgs;
- while (args)
- {
- GenTreePtr arg = args->gtOp.gtOp1;
-
- // Skip arguments that have been moved to the Late Arg list
- if (!(args->gtFlags & GTF_LATE_ARG))
- {
- if (arg->gtOper == GT_PUTARG_STK)
- {
- fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, arg);
- assert(curArgTabEntry);
-
- assert(curArgTabEntry->regNum == REG_STK);
-
- TreeNodeInfoInitPutArgStk(arg->AsPutArgStk(), curArgTabEntry);
- }
- else
- {
- TreeNodeInfo* argInfo = &(arg->gtLsraInfo);
- if (argInfo->dstCount != 0)
- {
- argInfo->isLocalDefUse = true;
- }
-
- argInfo->dstCount = 0;
- }
- }
- args = args->gtOp.gtOp2;
- }
-
- // If it is a fast tail call, it is already preferenced to use IP0.
- // Therefore, no need set src candidates on call tgt again.
- if (call->IsVarargs() && callHasFloatRegArgs && !call->IsFastTailCall() && (ctrlExpr != nullptr))
- {
- // Don't assign the call target to any of the argument registers because
- // we will use them to also pass floating point arguments as required
- // by Arm64 ABI.
- ctrlExpr->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~(RBM_ARG_REGS));
- }
-}
-
//------------------------------------------------------------------------
-// TreeNodeInfoInitPutArgStk: Set the NodeInfo for a GT_PUTARG_STK node
-//
-// Arguments:
-// argNode - a GT_PUTARG_STK node
-//
-// Return Value:
-// None.
-//
-// Notes:
-// Set the child node(s) to be contained when we have a multireg arg
-//
-void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* argNode, fgArgTabEntryPtr info)
-{
- assert(argNode->gtOper == GT_PUTARG_STK);
-
- GenTreePtr putArgChild = argNode->gtOp.gtOp1;
-
- // Initialize 'argNode' as not contained, as this is both the default case
- // and how MakeSrcContained expects to find things setup.
- //
- argNode->gtLsraInfo.srcCount = 1;
- argNode->gtLsraInfo.dstCount = 0;
-
- // Do we have a TYP_STRUCT argument (or a GT_FIELD_LIST), if so it must be a multireg pass-by-value struct
- if ((putArgChild->TypeGet() == TYP_STRUCT) || (putArgChild->OperGet() == GT_FIELD_LIST))
- {
- // We will use store instructions that each write a register sized value
-
- if (putArgChild->OperGet() == GT_FIELD_LIST)
- {
- // We consume all of the items in the GT_FIELD_LIST
- argNode->gtLsraInfo.srcCount = info->numSlots;
- }
- else
- {
- // We could use a ldp/stp sequence so we need two internal registers
- argNode->gtLsraInfo.internalIntCount = 2;
-
- if (putArgChild->OperGet() == GT_OBJ)
- {
- GenTreePtr objChild = putArgChild->gtOp.gtOp1;
- if (objChild->OperGet() == GT_LCL_VAR_ADDR)
- {
- // We will generate all of the code for the GT_PUTARG_STK, the GT_OBJ and the GT_LCL_VAR_ADDR
- // as one contained operation
- //
- MakeSrcContained(putArgChild, objChild);
- }
- }
-
- // We will generate all of the code for the GT_PUTARG_STK and it's child node
- // as one contained operation
- //
- MakeSrcContained(argNode, putArgChild);
- }
- }
- else
- {
- // We must not have a multi-reg struct
- assert(info->numSlots == 1);
- }
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitBlockStore: Set the NodeInfo for a block store.
+// LowerBlockStore: Set block store type
//
// Arguments:
// blkNode - The block store node of interest
@@ -1226,22 +100,17 @@ void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* argNode, fgArgTabEntr
// Return Value:
// None.
//
-// Notes:
-void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
+void Lowering::LowerBlockStore(GenTreeBlk* blkNode)
{
- GenTree* dstAddr = blkNode->Addr();
- unsigned size = blkNode->gtBlkSize;
- GenTree* source = blkNode->Data();
- LinearScan* l = m_lsra;
- Compiler* compiler = comp;
+ GenTree* dstAddr = blkNode->Addr();
+ unsigned size = blkNode->gtBlkSize;
+ GenTree* source = blkNode->Data();
+ Compiler* compiler = comp;
// Sources are dest address and initVal or source.
- // We may require an additional source or temp register for the size.
- blkNode->gtLsraInfo.srcCount = 2;
- blkNode->gtLsraInfo.dstCount = 0;
- GenTreePtr srcAddrOrFill = nullptr;
- bool isInitBlk = blkNode->OperIsInitBlkOp();
+ GenTreePtr srcAddrOrFill = nullptr;
+ bool isInitBlk = blkNode->OperIsInitBlkOp();
if (!isInitBlk)
{
@@ -1253,20 +122,6 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
if (source->gtOper == GT_IND)
{
srcAddrOrFill = blkNode->Data()->gtGetOp1();
- // We're effectively setting source as contained, but can't call MakeSrcContained, because the
- // "inheritance" of the srcCount is to a child not a parent - it would "just work" but could be misleading.
- // If srcAddr is already non-contained, we don't need to change it.
- if (srcAddrOrFill->gtLsraInfo.getDstCount() == 0)
- {
- srcAddrOrFill->gtLsraInfo.setDstCount(1);
- srcAddrOrFill->gtLsraInfo.setSrcCount(source->gtLsraInfo.srcCount);
- }
- m_lsra->clearOperandCounts(source);
- }
- else if (!source->IsMultiRegCall() && !source->OperIsSIMD())
- {
- assert(source->IsLocal());
- MakeSrcContained(blkNode, source);
}
}
@@ -1303,41 +158,12 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
initVal->gtIntCon.gtIconVal = 0x0101010101010101LL * fill;
initVal->gtType = TYP_LONG;
}
-
- // In case we have a buffer >= 16 bytes
- // we can use SSE2 to do a 128-bit store in a single
- // instruction.
- if (size >= XMM_REGSIZE_BYTES)
- {
- // Reserve an XMM register to fill it with
- // a pack of 16 init value constants.
- blkNode->gtLsraInfo.internalFloatCount = 1;
- blkNode->gtLsraInfo.setInternalCandidates(l, l->internalFloatRegCandidates());
- }
initBlkNode->gtBlkOpKind = GenTreeBlkOp::BlkOpKindUnroll;
- }
}
else
#endif // 0
{
- // The helper follows the regular ABI.
- dstAddr->gtLsraInfo.setSrcCandidates(l, RBM_ARG_0);
- initVal->gtLsraInfo.setSrcCandidates(l, RBM_ARG_1);
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindHelper;
- if (size != 0)
- {
- // Reserve a temp register for the block size argument.
- blkNode->gtLsraInfo.setInternalCandidates(l, RBM_ARG_2);
- blkNode->gtLsraInfo.internalIntCount = 1;
- }
- else
- {
- // The block size argument is a third argument to GT_STORE_DYN_BLK
- noway_assert(blkNode->gtOper == GT_STORE_DYN_BLK);
- blkNode->gtLsraInfo.setSrcCount(3);
- GenTree* sizeNode = blkNode->AsDynBlk()->gtDynamicSize;
- sizeNode->gtLsraInfo.setSrcCandidates(l, RBM_ARG_2);
- }
}
}
else
@@ -1373,18 +199,7 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
assert(objNode->HasGCPtr());
#endif
- // We don't need to materialize the struct size but we still need
- // a temporary register to perform the sequence of loads and stores.
- blkNode->gtLsraInfo.internalIntCount = 1;
-
- dstAddr->gtLsraInfo.setSrcCandidates(l, RBM_WRITE_BARRIER_DST_BYREF);
- // If we have a source address we want it in REG_WRITE_BARRIER_SRC_BYREF.
- // Otherwise, if it is a local, codegen will put its address in REG_WRITE_BARRIER_SRC_BYREF,
- // which is killed by a StoreObj (and thus needn't be reserved).
- if (srcAddrOrFill != nullptr)
- {
- srcAddrOrFill->gtLsraInfo.setSrcCandidates(l, RBM_WRITE_BARRIER_SRC_BYREF);
- }
+ blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindUnroll;
}
else
{
@@ -1395,41 +210,12 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
#if 0
// In case of a CpBlk with a constant size and less than CPBLK_UNROLL_LIMIT size
// we should unroll the loop to improve CQ.
+ // For reference see the code in lowerxarch.cpp.
// TODO-ARM64-CQ: cpblk loop unrolling is currently not implemented.
if ((size != 0) && (size <= INITBLK_UNROLL_LIMIT))
{
- // If we have a buffer between XMM_REGSIZE_BYTES and CPBLK_UNROLL_LIMIT bytes, we'll use SSE2.
- // Structs and buffer with sizes <= CPBLK_UNROLL_LIMIT bytes are occurring in more than 95% of
- // our framework assemblies, so this is the main code generation scheme we'll use.
- if ((size & (XMM_REGSIZE_BYTES - 1)) != 0)
- {
- info->internalIntCount++;
- info->addInternalCandidates(l, l->allRegs(TYP_INT));
- }
-
- if (size >= XMM_REGSIZE_BYTES)
- {
- // If we have a buffer larger than XMM_REGSIZE_BYTES,
- // reserve an XMM register to use it for a
- // series of 16-byte loads and stores.
- blkNode->gtLsraInfo.internalFloatCount = 1;
- blkNode->gtLsraInfo.addInternalCandidates(l, l->internalFloatRegCandidates());
- }
-
- // If src or dst are on stack, we don't have to generate the address into a register
- // because it's just some constant+SP
- if (srcAddr != nullptr && srcAddrOrFill->OperIsLocalAddr())
- {
- MakeSrcContained(blkNode, srcAddrOrFill);
- }
-
- if (dstAddr->OperIsLocalAddr())
- {
- MakeSrcContained(blkNode, dstAddr);
- }
-
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindUnroll;
}
else
@@ -1438,444 +224,10 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
// In case we have a constant integer this means we went beyond
// CPBLK_UNROLL_LIMIT bytes of size, still we should never have the case of
// any GC-Pointers in the src struct.
-
- dstAddr->gtLsraInfo.setSrcCandidates(l, RBM_ARG_0);
- // The srcAddr goes in arg1.
- if (srcAddrOrFill != nullptr)
- {
- srcAddrOrFill->gtLsraInfo.setSrcCandidates(l, RBM_ARG_1);
- }
- if (size != 0)
- {
- // Reserve a temp register for the block size argument.
- internalIntCandidates |= RBM_ARG_2;
- internalIntCount++;
- }
- else
- {
- // The block size argument is a third argument to GT_STORE_DYN_BLK
- noway_assert(blkNode->gtOper == GT_STORE_DYN_BLK);
- blkNode->gtLsraInfo.setSrcCount(3);
- GenTree* blockSize = blkNode->AsDynBlk()->gtDynamicSize;
- blockSize->gtLsraInfo.setSrcCandidates(l, RBM_ARG_2);
- }
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindHelper;
}
- if (internalIntCount != 0)
- {
- blkNode->gtLsraInfo.internalIntCount = internalIntCount;
- blkNode->gtLsraInfo.setInternalCandidates(l, internalIntCandidates);
- }
- }
- }
-}
-
-#ifdef FEATURE_SIMD
-//------------------------------------------------------------------------
-// TreeNodeInfoInitSIMD: Set the NodeInfo for a GT_SIMD tree.
-//
-// Arguments:
-// tree - The GT_SIMD node of interest
-//
-// Return Value:
-// None.
-
-void Lowering::TreeNodeInfoInitSIMD(GenTree* tree)
-{
- NYI("TreeNodeInfoInitSIMD");
- GenTreeSIMD* simdTree = tree->AsSIMD();
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- LinearScan* lsra = m_lsra;
- info->dstCount = 1;
- switch (simdTree->gtSIMDIntrinsicID)
- {
- case SIMDIntrinsicInit:
- {
- // This sets all fields of a SIMD struct to the given value.
- // Mark op1 as contained if it is either zero or int constant of all 1's.
- info->srcCount = 1;
- GenTree* op1 = tree->gtOp.gtOp1;
- if (op1->IsIntegralConst(0) || (simdTree->gtSIMDBaseType == TYP_INT && op1->IsCnsIntOrI() &&
- op1->AsIntConCommon()->IconValue() == 0xffffffff) ||
- (simdTree->gtSIMDBaseType == TYP_LONG && op1->IsCnsIntOrI() &&
- op1->AsIntConCommon()->IconValue() == 0xffffffffffffffffLL))
- {
- MakeSrcContained(tree, tree->gtOp.gtOp1);
- info->srcCount = 0;
- }
- }
- break;
-
- case SIMDIntrinsicInitN:
- info->srcCount = (int)(simdTree->gtSIMDSize / genTypeSize(simdTree->gtSIMDBaseType));
- // Need an internal register to stitch together all the values into a single vector in an XMM reg.
- info->internalFloatCount = 1;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- break;
-
- case SIMDIntrinsicInitArray:
- // We have an array and an index, which may be contained.
- info->srcCount = 2;
- CheckImmedAndMakeContained(tree, tree->gtGetOp2());
- break;
-
- case SIMDIntrinsicDiv:
- // SSE2 has no instruction support for division on integer vectors
- noway_assert(varTypeIsFloating(simdTree->gtSIMDBaseType));
- info->srcCount = 2;
- break;
-
- case SIMDIntrinsicAbs:
- // This gets implemented as bitwise-And operation with a mask
- // and hence should never see it here.
- unreached();
- break;
-
- case SIMDIntrinsicSqrt:
- // SSE2 has no instruction support for sqrt on integer vectors.
- noway_assert(varTypeIsFloating(simdTree->gtSIMDBaseType));
- info->srcCount = 1;
- break;
-
- case SIMDIntrinsicAdd:
- case SIMDIntrinsicSub:
- case SIMDIntrinsicMul:
- case SIMDIntrinsicBitwiseAnd:
- case SIMDIntrinsicBitwiseAndNot:
- case SIMDIntrinsicBitwiseOr:
- case SIMDIntrinsicBitwiseXor:
- case SIMDIntrinsicMin:
- case SIMDIntrinsicMax:
- info->srcCount = 2;
-
- // SSE2 32-bit integer multiplication requires two temp regs
- if (simdTree->gtSIMDIntrinsicID == SIMDIntrinsicMul && simdTree->gtSIMDBaseType == TYP_INT)
- {
- info->internalFloatCount = 2;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- }
- break;
-
- case SIMDIntrinsicEqual:
- info->srcCount = 2;
- break;
-
- // SSE2 doesn't support < and <= directly on int vectors.
- // Instead we need to use > and >= with swapped operands.
- case SIMDIntrinsicLessThan:
- case SIMDIntrinsicLessThanOrEqual:
- info->srcCount = 2;
- noway_assert(!varTypeIsIntegral(simdTree->gtSIMDBaseType));
- break;
-
- // SIMDIntrinsicEqual is supported only on non-floating point base type vectors.
- // SSE2 cmpps/pd doesn't support > and >= directly on float/double vectors.
- // Instead we need to use < and <= with swapped operands.
- case SIMDIntrinsicGreaterThan:
- noway_assert(!varTypeIsFloating(simdTree->gtSIMDBaseType));
- info->srcCount = 2;
- break;
-
- case SIMDIntrinsicGreaterThanOrEqual:
- noway_assert(!varTypeIsFloating(simdTree->gtSIMDBaseType));
- info->srcCount = 2;
-
- // a >= b = (a==b) | (a>b)
- // To hold intermediate result of a==b and a>b we need two distinct
- // registers. We can use targetReg and one internal reg provided
- // they are distinct which is not guaranteed. Therefore, we request
- // two internal registers so that one of the internal registers has
- // to be different from targetReg.
- info->internalFloatCount = 2;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- break;
-
- case SIMDIntrinsicOpEquality:
- case SIMDIntrinsicOpInEquality:
- // Need two SIMD registers as scratch.
- // See genSIMDIntrinsicRelOp() for details on code sequence generate and
- // the need for two scratch registers.
- info->srcCount = 2;
- info->internalFloatCount = 2;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- break;
-
- case SIMDIntrinsicDotProduct:
- // Also need an internal register as scratch. Further we need that targetReg and internal reg
- // are two distinct regs. It is achieved by requesting two internal registers and one of them
- // has to be different from targetReg.
- //
- // See genSIMDIntrinsicDotProduct() for details on code sequence generated and
- // the need for scratch registers.
- info->srcCount = 2;
- info->internalFloatCount = 2;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- break;
-
- case SIMDIntrinsicGetItem:
- // This implements get_Item method. The sources are:
- // - the source SIMD struct
- // - index (which element to get)
- // The result is baseType of SIMD struct.
- info->srcCount = 2;
-
- op2 = tree->gtGetOp2()
- // If the index is a constant, mark it as contained.
- if (CheckImmedAndMakeContained(tree, op2))
- {
- info->srcCount = 1;
- }
-
- // If the index is not a constant, we will use the SIMD temp location to store the vector.
- // Otherwise, if the baseType is floating point, the targetReg will be a xmm reg and we
- // can use that in the process of extracting the element.
- // In all other cases with constant index, we need a temp xmm register to extract the
- // element if index is other than zero.
- if (!op2->IsCnsIntOrI())
- {
- (void)comp->getSIMDInitTempVarNum();
- }
- else if (!varTypeIsFloating(simdTree->gtSIMDBaseType) && !op2->IsIntegralConst(0))
- {
- info->internalFloatCount = 1;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- }
- break;
-
- case SIMDIntrinsicCast:
- info->srcCount = 1;
- break;
-
- // These should have been transformed in terms of other intrinsics
- case SIMDIntrinsicOpEquality:
- case SIMDIntrinsicOpInEquality:
- assert("OpEquality/OpInEquality intrinsics should not be seen during Lowering.");
- unreached();
-
- case SIMDIntrinsicGetX:
- case SIMDIntrinsicGetY:
- case SIMDIntrinsicGetZ:
- case SIMDIntrinsicGetW:
- case SIMDIntrinsicGetOne:
- case SIMDIntrinsicGetZero:
- case SIMDIntrinsicGetLength:
- case SIMDIntrinsicGetAllOnes:
- assert(!"Get intrinsics should not be seen during Lowering.");
- unreached();
-
- default:
- noway_assert(!"Unimplemented SIMD node type.");
- unreached();
- }
-}
-#endif // FEATURE_SIMD
-
-void Lowering::LowerGCWriteBarrier(GenTree* tree)
-{
- GenTreePtr dst = tree;
- GenTreePtr addr = tree->gtOp.gtOp1;
- GenTreePtr src = tree->gtOp.gtOp2;
-
- if (addr->OperGet() == GT_LEA)
- {
- // In the case where we are doing a helper assignment, if the dst
- // is an indir through an lea, we need to actually instantiate the
- // lea in a register
- GenTreeAddrMode* lea = addr->AsAddrMode();
-
- short leaSrcCount = 0;
- if (lea->Base() != nullptr)
- {
- leaSrcCount++;
- }
- if (lea->Index() != nullptr)
- {
- leaSrcCount++;
- }
- lea->gtLsraInfo.srcCount = leaSrcCount;
- lea->gtLsraInfo.dstCount = 1;
- }
-
-#if NOGC_WRITE_BARRIERS
- // For the NOGC JIT Helper calls
- //
- // the 'addr' goes into x14 (REG_WRITE_BARRIER_DST_BYREF)
- // the 'src' goes into x15 (REG_WRITE_BARRIER)
- //
- addr->gtLsraInfo.setSrcCandidates(m_lsra, RBM_WRITE_BARRIER_DST_BYREF);
- src->gtLsraInfo.setSrcCandidates(m_lsra, RBM_WRITE_BARRIER);
-#else
- // For the standard JIT Helper calls
- // op1 goes into REG_ARG_0 and
- // op2 goes into REG_ARG_1
- //
- addr->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_0);
- src->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_1);
-#endif // NOGC_WRITE_BARRIERS
-
- // Both src and dst must reside in a register, which they should since we haven't set
- // either of them as contained.
- assert(addr->gtLsraInfo.dstCount == 1);
- assert(src->gtLsraInfo.dstCount == 1);
-}
-
-//-----------------------------------------------------------------------------------------
-// Specify register requirements for address expression of an indirection operation.
-//
-// Arguments:
-// indirTree - GT_IND, GT_STOREIND, block node or GT_NULLCHECK gentree node
-//
-void Lowering::SetIndirAddrOpCounts(GenTreePtr indirTree)
-{
- assert(indirTree->OperIsIndir());
- // If this is the rhs of a block copy (i.e. non-enregisterable struct),
- // it has no register requirements.
- if (indirTree->TypeGet() == TYP_STRUCT)
- {
- return;
- }
-
- GenTreePtr addr = indirTree->gtGetOp1();
- TreeNodeInfo* info = &(indirTree->gtLsraInfo);
-
- GenTreePtr base = nullptr;
- GenTreePtr index = nullptr;
- unsigned cns = 0;
- unsigned mul;
- bool rev;
- bool modifiedSources = false;
-
- if ((addr->OperGet() == GT_LEA) && IsSafeToContainMem(indirTree, addr))
- {
- GenTreeAddrMode* lea = addr->AsAddrMode();
- base = lea->Base();
- index = lea->Index();
- cns = lea->gtOffset;
-
- m_lsra->clearOperandCounts(addr);
- // The srcCount is decremented because addr is now "contained",
- // then we account for the base and index below, if they are non-null.
- info->srcCount--;
- }
- else if (comp->codeGen->genCreateAddrMode(addr, -1, true, 0, &rev, &base, &index, &mul, &cns, true /*nogen*/) &&
- !(modifiedSources = AreSourcesPossiblyModifiedLocals(indirTree, base, index)))
- {
- // An addressing mode will be constructed that may cause some
- // nodes to not need a register, and cause others' lifetimes to be extended
- // to the GT_IND or even its parent if it's an assignment
-
- assert(base != addr);
- m_lsra->clearOperandCounts(addr);
-
- GenTreePtr arrLength = nullptr;
-
- // Traverse the computation below GT_IND to find the operands
- // for the addressing mode, marking the various constants and
- // intermediate results as not consuming/producing.
- // If the traversal were more complex, we might consider using
- // a traversal function, but the addressing mode is only made
- // up of simple arithmetic operators, and the code generator
- // only traverses one leg of each node.
-
- bool foundBase = (base == nullptr);
- bool foundIndex = (index == nullptr);
- GenTreePtr nextChild = nullptr;
- for (GenTreePtr child = addr; child != nullptr && !child->OperIsLeaf(); child = nextChild)
- {
- nextChild = nullptr;
- GenTreePtr op1 = child->gtOp.gtOp1;
- GenTreePtr op2 = (child->OperIsBinary()) ? child->gtOp.gtOp2 : nullptr;
-
- if (op1 == base)
- {
- foundBase = true;
- }
- else if (op1 == index)
- {
- foundIndex = true;
- }
- else
- {
- m_lsra->clearOperandCounts(op1);
- if (!op1->OperIsLeaf())
- {
- nextChild = op1;
- }
- }
-
- if (op2 != nullptr)
- {
- if (op2 == base)
- {
- foundBase = true;
- }
- else if (op2 == index)
- {
- foundIndex = true;
- }
- else
- {
- m_lsra->clearOperandCounts(op2);
- if (!op2->OperIsLeaf())
- {
- assert(nextChild == nullptr);
- nextChild = op2;
- }
- }
- }
}
- assert(foundBase && foundIndex);
- info->srcCount--; // it gets incremented below.
- }
- else if (addr->gtOper == GT_ARR_ELEM)
- {
- // The GT_ARR_ELEM consumes all the indices and produces the offset.
- // The array object lives until the mem access.
- // We also consume the target register to which the address is
- // computed
-
- info->srcCount++;
- assert(addr->gtLsraInfo.srcCount >= 2);
- addr->gtLsraInfo.srcCount -= 1;
}
- else
- {
- // it is nothing but a plain indir
- info->srcCount--; // base gets added in below
- base = addr;
- }
-
- if (base != nullptr)
- {
- info->srcCount++;
- }
-
- if (index != nullptr && !modifiedSources)
- {
- info->srcCount++;
- }
-
- // On ARM64 we may need a single internal register
- // (when both conditions are true then we still only need a single internal register)
- if ((index != nullptr) && (cns != 0))
- {
- // ARM64 does not support both Index and offset so we need an internal register
- info->internalIntCount = 1;
- }
- else if (!emitter::emitIns_valid_imm_for_ldst_offset(cns, emitTypeSize(indirTree)))
- {
- // This offset can't be contained in the ldr/str instruction, so we need an internal register
- info->internalIntCount = 1;
- }
-}
-
-void Lowering::TreeNodeInfoInitCmp(GenTreePtr tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
-
- info->srcCount = 2;
- info->dstCount = 1;
- CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
}
/* Lower GT_CAST(srcType, DstType) nodes.
diff --git a/src/jit/lowerxarch.cpp b/src/jit/lowerxarch.cpp
index 589cef482e..f89a3dfc7b 100644
--- a/src/jit/lowerxarch.cpp
+++ b/src/jit/lowerxarch.cpp
@@ -42,61 +42,11 @@ void Lowering::LowerRotate(GenTreePtr tree)
//
// Notes:
// This involves:
-// - Setting the appropriate candidates for a store of a multi-reg call return value.
-// - Requesting an internal register for SIMD12 stores.
-// - Handling of contained immediates and widening operations of unsigneds.
+// - Widening operations of unsigneds.
void Lowering::LowerStoreLoc(GenTreeLclVarCommon* storeLoc)
{
- TreeNodeInfo* info = &(storeLoc->gtLsraInfo);
-
- // Is this the case of var = call where call is returning
- // a value in multiple return registers?
GenTree* op1 = storeLoc->gtGetOp1();
- if (op1->IsMultiRegCall())
- {
- // backend expects to see this case only for store lclvar.
- assert(storeLoc->OperGet() == GT_STORE_LCL_VAR);
-
- // srcCount = number of registers in which the value is returned by call
- GenTreeCall* call = op1->AsCall();
- ReturnTypeDesc* retTypeDesc = call->GetReturnTypeDesc();
- info->srcCount = retTypeDesc->GetReturnRegCount();
-
- // Call node srcCandidates = Bitwise-OR(allregs(GetReturnRegType(i))) for all i=0..RetRegCount-1
- regMaskTP srcCandidates = m_lsra->allMultiRegCallNodeRegs(call);
- op1->gtLsraInfo.setSrcCandidates(m_lsra, srcCandidates);
- return;
- }
-
-#ifdef FEATURE_SIMD
- if (varTypeIsSIMD(storeLoc))
- {
- if (op1->IsCnsIntOrI())
- {
- // InitBlk
- MakeSrcContained(storeLoc, op1);
- }
- else if ((storeLoc->TypeGet() == TYP_SIMD12) && (storeLoc->OperGet() == GT_STORE_LCL_FLD))
- {
- // Need an additional register to extract upper 4 bytes of Vector3.
- info->internalFloatCount = 1;
- info->setInternalCandidates(m_lsra, m_lsra->allSIMDRegs());
-
- // In this case don't mark the operand as contained as we want it to
- // be evaluated into an xmm register
- }
- return;
- }
-#endif // FEATURE_SIMD
-
- // If the source is a containable immediate, make it contained, unless it is
- // an int-size or larger store of zero to memory, because we can generate smaller code
- // by zeroing a register and then storing it.
- if (IsContainableImmed(storeLoc, op1) && (!op1->IsIntegralConst(0) || varTypeIsSmall(storeLoc)))
- {
- MakeSrcContained(storeLoc, op1);
- }
// Try to widen the ops if they are going into a local var.
if ((storeLoc->gtOper == GT_STORE_LCL_VAR) && (storeLoc->gtOp1->gtOper == GT_CNS_INT))
@@ -148,1490 +98,8 @@ void Lowering::LowerStoreLoc(GenTreeLclVarCommon* storeLoc)
}
}
-/**
- * Takes care of annotating the register requirements
- * for every TreeNodeInfo struct that maps to each tree node.
- * Preconditions:
- * LSRA Has been initialized and there is a TreeNodeInfo node
- * already allocated and initialized for every tree in the IR.
- * Postconditions:
- * Every TreeNodeInfo instance has the right annotations on register
- * requirements needed by LSRA to build the Interval Table (source,
- * destination and internal [temp] register counts).
- * This code is refactored originally from LSRA.
- */
-void Lowering::TreeNodeInfoInit(GenTree* tree)
-{
- LinearScan* l = m_lsra;
- Compiler* compiler = comp;
-
- TreeNodeInfo* info = &(tree->gtLsraInfo);
-
- switch (tree->OperGet())
- {
- GenTree* op1;
- GenTree* op2;
-
- default:
- TreeNodeInfoInitSimple(tree);
- break;
-
- case GT_LCL_FLD:
- case GT_LCL_VAR:
- info->srcCount = 0;
- info->dstCount = 1;
-
-#ifdef FEATURE_SIMD
- // Need an additional register to read upper 4 bytes of Vector3.
- if (tree->TypeGet() == TYP_SIMD12)
- {
- // We need an internal register different from targetReg in which 'tree' produces its result
- // because both targetReg and internal reg will be in use at the same time.
- info->internalFloatCount = 1;
- info->isInternalRegDelayFree = true;
- info->setInternalCandidates(m_lsra, m_lsra->allSIMDRegs());
- }
-#endif
- break;
-
- case GT_STORE_LCL_FLD:
- case GT_STORE_LCL_VAR:
-#ifdef _TARGET_X86_
- if (tree->gtGetOp1()->OperGet() == GT_LONG)
- {
- info->srcCount = 2;
- }
- else
-#endif // _TARGET_X86_
- {
- info->srcCount = 1;
- }
- info->dstCount = 0;
- LowerStoreLoc(tree->AsLclVarCommon());
- break;
-
- case GT_BOX:
- noway_assert(!"box should not exist here");
- // The result of 'op1' is also the final result
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_PHYSREGDST:
- info->srcCount = 1;
- info->dstCount = 0;
- break;
-
- case GT_COMMA:
- {
- GenTreePtr firstOperand;
- GenTreePtr secondOperand;
- if (tree->gtFlags & GTF_REVERSE_OPS)
- {
- firstOperand = tree->gtOp.gtOp2;
- secondOperand = tree->gtOp.gtOp1;
- }
- else
- {
- firstOperand = tree->gtOp.gtOp1;
- secondOperand = tree->gtOp.gtOp2;
- }
- if (firstOperand->TypeGet() != TYP_VOID)
- {
- firstOperand->gtLsraInfo.isLocalDefUse = true;
- firstOperand->gtLsraInfo.dstCount = 0;
- }
- if (tree->TypeGet() == TYP_VOID && secondOperand->TypeGet() != TYP_VOID)
- {
- secondOperand->gtLsraInfo.isLocalDefUse = true;
- secondOperand->gtLsraInfo.dstCount = 0;
- }
- }
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_LIST:
- case GT_FIELD_LIST:
- case GT_ARGPLACE:
- case GT_NO_OP:
- case GT_START_NONGC:
- case GT_PROF_HOOK:
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_CNS_DBL:
- info->srcCount = 0;
- info->dstCount = 1;
- break;
-
-#if !defined(_TARGET_64BIT_)
-
- case GT_LONG:
- if ((tree->gtLIRFlags & LIR::Flags::IsUnusedValue) != 0)
- {
- // An unused GT_LONG node needs to consume its sources.
- info->srcCount = 2;
- }
- else
- {
- // Passthrough
- info->srcCount = 0;
- }
-
- info->dstCount = 0;
- break;
-
-#endif // !defined(_TARGET_64BIT_)
-
- case GT_QMARK:
- case GT_COLON:
- info->srcCount = 0;
- info->dstCount = 0;
- unreached();
- break;
-
- case GT_RETURN:
- TreeNodeInfoInitReturn(tree);
- break;
-
- case GT_RETFILT:
- if (tree->TypeGet() == TYP_VOID)
- {
- info->srcCount = 0;
- info->dstCount = 0;
- }
- else
- {
- assert(tree->TypeGet() == TYP_INT);
-
- info->srcCount = 1;
- info->dstCount = 0;
-
- info->setSrcCandidates(l, RBM_INTRET);
- tree->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, RBM_INTRET);
- }
- break;
-
- // A GT_NOP is either a passthrough (if it is void, or if it has
- // a child), but must be considered to produce a dummy value if it
- // has a type but no child
- case GT_NOP:
- info->srcCount = 0;
- if (tree->TypeGet() != TYP_VOID && tree->gtOp.gtOp1 == nullptr)
- {
- info->dstCount = 1;
- }
- else
- {
- info->dstCount = 0;
- }
- break;
-
- case GT_JTRUE:
- {
- info->srcCount = 0;
- info->dstCount = 0;
-
- GenTree* cmp = tree->gtGetOp1();
- l->clearDstCount(cmp);
-
-#ifdef FEATURE_SIMD
- // Say we have the following IR
- // simdCompareResult = GT_SIMD((In)Equality, v1, v2)
- // integerCompareResult = GT_EQ/NE(simdCompareResult, true/false)
- // GT_JTRUE(integerCompareResult)
- //
- // In this case we don't need to generate code for GT_EQ_/NE, since SIMD (In)Equality
- // intrinsic would set or clear Zero flag.
-
- genTreeOps cmpOper = cmp->OperGet();
- if (cmpOper == GT_EQ || cmpOper == GT_NE)
- {
- GenTree* cmpOp1 = cmp->gtGetOp1();
- GenTree* cmpOp2 = cmp->gtGetOp2();
-
- if (cmpOp1->IsSIMDEqualityOrInequality() && (cmpOp2->IsIntegralConst(0) || cmpOp2->IsIntegralConst(1)))
- {
- // clear dstCount on SIMD node to indicate that
- // result doesn't need to be materialized into a register.
- l->clearOperandCounts(cmp);
- l->clearDstCount(cmpOp1);
- l->clearOperandCounts(cmpOp2);
-
- // Codegen of SIMD (in)Equality uses target integer reg
- // only for setting flags. Target reg is not needed on AVX
- // when comparing against Vector Zero. In all other cases
- // we need to reserve an int type internal register, since we
- // have cleared dstCount.
- if (compiler->canUseAVX() && cmpOp1->gtGetOp2()->IsIntegralConstVector(0))
- {
- // We don't need an internal register,since we use vptest
- // for setting flags.
- }
- else
- {
- ++(cmpOp1->gtLsraInfo.internalIntCount);
- regMaskTP internalCandidates = cmpOp1->gtLsraInfo.getInternalCandidates(l);
- internalCandidates |= l->allRegs(TYP_INT);
- cmpOp1->gtLsraInfo.setInternalCandidates(l, internalCandidates);
- }
-
- // We would have to reverse compare oper in the following cases:
- // 1) SIMD Equality: Sets Zero flag on equal otherwise clears it.
- // Therefore, if compare oper is == or != against false(0), we will
- // be checking opposite of what is required.
- //
- // 2) SIMD inEquality: Clears Zero flag on true otherwise sets it.
- // Therefore, if compare oper is == or != against true(1), we will
- // be checking opposite of what is required.
- GenTreeSIMD* simdNode = cmpOp1->AsSIMD();
- if (simdNode->gtSIMDIntrinsicID == SIMDIntrinsicOpEquality)
- {
- if (cmpOp2->IsIntegralConst(0))
- {
- cmp->SetOper(GenTree::ReverseRelop(cmpOper));
- }
- }
- else
- {
- assert(simdNode->gtSIMDIntrinsicID == SIMDIntrinsicOpInEquality);
- if (cmpOp2->IsIntegralConst(1))
- {
- cmp->SetOper(GenTree::ReverseRelop(cmpOper));
- }
- }
- }
- }
-#endif // FEATURE_SIMD
- }
- break;
-
- case GT_JCC:
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_JMP:
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_SWITCH:
- // This should never occur since switch nodes must not be visible at this
- // point in the JIT.
- info->srcCount = 0;
- info->dstCount = 0; // To avoid getting uninit errors.
- noway_assert(!"Switch must be lowered at this point");
- break;
-
- case GT_JMPTABLE:
- info->srcCount = 0;
- info->dstCount = 1;
- break;
-
- case GT_SWITCH_TABLE:
- info->srcCount = 2;
- info->internalIntCount = 1;
- info->dstCount = 0;
- break;
-
- case GT_ASG:
- case GT_ASG_ADD:
- case GT_ASG_SUB:
- noway_assert(!"We should never hit any assignment operator in lowering");
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
-#if !defined(_TARGET_64BIT_)
- case GT_ADD_LO:
- case GT_ADD_HI:
- case GT_SUB_LO:
- case GT_SUB_HI:
-#endif
- case GT_ADD:
- case GT_SUB:
- // SSE2 arithmetic instructions doesn't support the form "op mem, xmm".
- // Rather they only support "op xmm, mem/xmm" form.
- if (varTypeIsFloating(tree->TypeGet()))
- {
- // overflow operations aren't supported on float/double types.
- assert(!tree->gtOverflow());
-
- op1 = tree->gtGetOp1();
- op2 = tree->gtGetOp2();
-
- // No implicit conversions at this stage as the expectation is that
- // everything is made explicit by adding casts.
- assert(op1->TypeGet() == op2->TypeGet());
-
- info->srcCount = 2;
- info->dstCount = 1;
-
- if (op2->isMemoryOp() || op2->IsCnsNonZeroFltOrDbl())
- {
- MakeSrcContained(tree, op2);
- }
- else if (tree->OperIsCommutative() &&
- (op1->IsCnsNonZeroFltOrDbl() || (op1->isMemoryOp() && IsSafeToContainMem(tree, op1))))
- {
- // Though we have GT_ADD(op1=memOp, op2=non-memOp, we try to reorder the operands
- // as long as it is safe so that the following efficient code sequence is generated:
- // addss/sd targetReg, memOp (if op1Reg == targetReg) OR
- // movaps targetReg, op2Reg; addss/sd targetReg, [memOp]
- //
- // Instead of
- // movss op1Reg, [memOp]; addss/sd targetReg, Op2Reg (if op1Reg == targetReg) OR
- // movss op1Reg, [memOp]; movaps targetReg, op1Reg, addss/sd targetReg, Op2Reg
- MakeSrcContained(tree, op1);
- }
- else
- {
- // If there are no containable operands, we can make an operand reg optional.
- SetRegOptionalForBinOp(tree);
- }
- break;
- }
-
- __fallthrough;
-
- case GT_AND:
- case GT_OR:
- case GT_XOR:
- TreeNodeInfoInitLogicalOp(tree);
- break;
-
- case GT_RETURNTRAP:
- // this just turns into a compare of its child with an int
- // + a conditional call
- info->srcCount = 1;
- info->dstCount = 0;
- if (tree->gtOp.gtOp1->isIndir())
- {
- MakeSrcContained(tree, tree->gtOp.gtOp1);
- }
- info->internalIntCount = 1;
- info->setInternalCandidates(l, l->allRegs(TYP_INT));
- break;
-
- case GT_MOD:
- case GT_DIV:
- case GT_UMOD:
- case GT_UDIV:
- TreeNodeInfoInitModDiv(tree);
- break;
-
- case GT_MUL:
- case GT_MULHI:
-#if defined(_TARGET_X86_) && !defined(LEGACY_BACKEND)
- case GT_MUL_LONG:
-#endif
- SetMulOpCounts(tree);
- break;
-
- case GT_INTRINSIC:
- TreeNodeInfoInitIntrinsic(tree);
- break;
-
-#ifdef FEATURE_SIMD
- case GT_SIMD:
- TreeNodeInfoInitSIMD(tree);
- break;
-#endif // FEATURE_SIMD
-
- case GT_CAST:
- TreeNodeInfoInitCast(tree);
- break;
-
- case GT_NEG:
- info->srcCount = 1;
- info->dstCount = 1;
-
- // TODO-XArch-CQ:
- // SSE instruction set doesn't have an instruction to negate a number.
- // The recommended way is to xor the float/double number with a bitmask.
- // The only way to xor is using xorps or xorpd both of which operate on
- // 128-bit operands. To hold the bit-mask we would need another xmm
- // register or a 16-byte aligned 128-bit data constant. Right now emitter
- // lacks the support for emitting such constants or instruction with mem
- // addressing mode referring to a 128-bit operand. For now we use an
- // internal xmm register to load 32/64-bit bitmask from data section.
- // Note that by trading additional data section memory (128-bit) we can
- // save on the need for an internal register and also a memory-to-reg
- // move.
- //
- // Note: another option to avoid internal register requirement is by
- // lowering as GT_SUB(0, src). This will generate code different from
- // Jit64 and could possibly result in compat issues (?).
- if (varTypeIsFloating(tree))
- {
- info->internalFloatCount = 1;
- info->setInternalCandidates(l, l->internalFloatRegCandidates());
- }
- else
- {
- // Codegen of this tree node sets ZF and SF flags.
- tree->gtFlags |= GTF_ZSF_SET;
- }
- break;
-
- case GT_NOT:
- info->srcCount = 1;
- info->dstCount = 1;
- break;
-
- case GT_LSH:
- case GT_RSH:
- case GT_RSZ:
- case GT_ROL:
- case GT_ROR:
-#ifdef _TARGET_X86_
- case GT_LSH_HI:
- case GT_RSH_LO:
-#endif
- TreeNodeInfoInitShiftRotate(tree);
- break;
-
- case GT_EQ:
- case GT_NE:
- case GT_LT:
- case GT_LE:
- case GT_GE:
- case GT_GT:
- TreeNodeInfoInitCmp(tree);
- break;
-
- case GT_CKFINITE:
- info->srcCount = 1;
- info->dstCount = 1;
- info->internalIntCount = 1;
- break;
-
- case GT_CMPXCHG:
- info->srcCount = 3;
- info->dstCount = 1;
-
- // comparand is preferenced to RAX.
- // Remaining two operands can be in any reg other than RAX.
- tree->gtCmpXchg.gtOpComparand->gtLsraInfo.setSrcCandidates(l, RBM_RAX);
- tree->gtCmpXchg.gtOpLocation->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~RBM_RAX);
- tree->gtCmpXchg.gtOpValue->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~RBM_RAX);
- tree->gtLsraInfo.setDstCandidates(l, RBM_RAX);
- break;
-
- case GT_LOCKADD:
- info->srcCount = 2;
- info->dstCount = 0;
-
- CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
- break;
-
- case GT_CALL:
- TreeNodeInfoInitCall(tree->AsCall());
- break;
-
- case GT_ADDR:
- {
- // For a GT_ADDR, the child node should not be evaluated into a register
- GenTreePtr child = tree->gtOp.gtOp1;
- assert(!l->isCandidateLocalRef(child));
- l->clearDstCount(child);
- info->srcCount = 0;
- info->dstCount = 1;
- }
- break;
-
-#if !defined(FEATURE_PUT_STRUCT_ARG_STK)
- case GT_OBJ:
-#endif
- case GT_BLK:
- case GT_DYN_BLK:
- // These should all be eliminated prior to Lowering.
- assert(!"Non-store block node in Lowering");
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
-#ifdef FEATURE_PUT_STRUCT_ARG_STK
- case GT_PUTARG_STK:
- TreeNodeInfoInitPutArgStk(tree->AsPutArgStk());
- break;
-#endif // FEATURE_PUT_STRUCT_ARG_STK
-
- case GT_STORE_BLK:
- case GT_STORE_OBJ:
- case GT_STORE_DYN_BLK:
- TreeNodeInfoInitBlockStore(tree->AsBlk());
- break;
-
- case GT_INIT_VAL:
- // Always a passthrough of its child's value.
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_LCLHEAP:
- TreeNodeInfoInitLclHeap(tree);
- break;
-
- case GT_ARR_BOUNDS_CHECK:
-#ifdef FEATURE_SIMD
- case GT_SIMD_CHK:
-#endif // FEATURE_SIMD
- {
- GenTreeBoundsChk* node = tree->AsBoundsChk();
- // Consumes arrLen & index - has no result
- info->srcCount = 2;
- info->dstCount = 0;
-
- GenTreePtr other;
- if (CheckImmedAndMakeContained(tree, node->gtIndex))
- {
- other = node->gtArrLen;
- }
- else if (CheckImmedAndMakeContained(tree, node->gtArrLen))
- {
- other = node->gtIndex;
- }
- else if (node->gtIndex->isMemoryOp())
- {
- other = node->gtIndex;
- }
- else
- {
- other = node->gtArrLen;
- }
-
- if (node->gtIndex->TypeGet() == node->gtArrLen->TypeGet())
- {
- if (other->isMemoryOp())
- {
- MakeSrcContained(tree, other);
- }
- else
- {
- // We can mark 'other' as reg optional, since it is not contained.
- SetRegOptional(other);
- }
- }
- }
- break;
-
- case GT_ARR_ELEM:
- // These must have been lowered to GT_ARR_INDEX
- noway_assert(!"We should never see a GT_ARR_ELEM in lowering");
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-
- case GT_ARR_INDEX:
- info->srcCount = 2;
- info->dstCount = 1;
- // For GT_ARR_INDEX, the lifetime of the arrObj must be extended because it is actually used multiple
- // times while the result is being computed.
- tree->AsArrIndex()->ArrObj()->gtLsraInfo.isDelayFree = true;
- info->hasDelayFreeSrc = true;
- break;
-
- case GT_ARR_OFFSET:
- // This consumes the offset, if any, the arrObj and the effective index,
- // and produces the flattened offset for this dimension.
- info->srcCount = 3;
- info->dstCount = 1;
-
- // we don't want to generate code for this
- if (tree->gtArrOffs.gtOffset->IsIntegralConst(0))
- {
- MakeSrcContained(tree, tree->gtArrOffs.gtOffset);
- }
- else
- {
- // Here we simply need an internal register, which must be different
- // from any of the operand's registers, but may be the same as targetReg.
- info->internalIntCount = 1;
- }
- break;
-
- case GT_LEA:
- // The LEA usually passes its operands through to the GT_IND, in which case we'll
- // clear the info->srcCount and info->dstCount later, but we may be instantiating an address,
- // so we set them here.
- info->srcCount = 0;
- if (tree->AsAddrMode()->HasBase())
- {
- info->srcCount++;
- }
- if (tree->AsAddrMode()->HasIndex())
- {
- info->srcCount++;
- }
- info->dstCount = 1;
- break;
-
- case GT_STOREIND:
- {
- info->srcCount = 2;
- info->dstCount = 0;
- GenTree* src = tree->gtOp.gtOp2;
-
- if (compiler->codeGen->gcInfo.gcIsWriteBarrierAsgNode(tree))
- {
- LowerGCWriteBarrier(tree);
- break;
- }
-
- // If the source is a containable immediate, make it contained, unless it is
- // an int-size or larger store of zero to memory, because we can generate smaller code
- // by zeroing a register and then storing it.
- if (IsContainableImmed(tree, src) &&
- (!src->IsIntegralConst(0) || varTypeIsSmall(tree) || tree->gtGetOp1()->OperGet() == GT_CLS_VAR_ADDR))
- {
- MakeSrcContained(tree, src);
- }
- else if (!varTypeIsFloating(tree))
- {
- // Perform recognition of trees with the following structure:
- // StoreInd(addr, BinOp(expr, GT_IND(addr)))
- // to be able to fold this into an instruction of the form
- // BINOP [addr], register
- // where register is the actual place where 'expr' is computed.
- //
- // SSE2 doesn't support RMW form of instructions.
- if (SetStoreIndOpCountsIfRMWMemOp(tree))
- {
- break;
- }
- }
-
- SetIndirAddrOpCounts(tree);
- }
- break;
-
- case GT_NULLCHECK:
- info->dstCount = 0;
- info->srcCount = 1;
- info->isLocalDefUse = true;
- break;
-
- case GT_IND:
- info->dstCount = 1;
- info->srcCount = 1;
- SetIndirAddrOpCounts(tree);
- break;
-
- case GT_CATCH_ARG:
- info->srcCount = 0;
- info->dstCount = 1;
- info->setDstCandidates(l, RBM_EXCEPTION_OBJECT);
- break;
-
-#if !FEATURE_EH_FUNCLETS
- case GT_END_LFIN:
- info->srcCount = 0;
- info->dstCount = 0;
- break;
-#endif
-
- case GT_CLS_VAR:
- // These nodes are eliminated by rationalizer.
- JITDUMP("Unexpected node %s in Lower.\n", GenTree::NodeName(tree->OperGet()));
- unreached();
- break;
- } // end switch (tree->OperGet())
-
- // If op2 of a binary-op gets marked as contained, then binary-op srcCount will be 1.
- // Even then we would like to set isTgtPref on Op1.
- if (tree->OperIsBinary() && info->srcCount >= 1)
- {
- if (isRMWRegOper(tree))
- {
- GenTree* op1 = tree->gtOp.gtOp1;
- GenTree* op2 = tree->gtOp.gtOp2;
-
- // Commutative opers like add/mul/and/or/xor could reverse the order of
- // operands if it is safe to do so. In such a case we would like op2 to be
- // target preferenced instead of op1.
- if (tree->OperIsCommutative() && op1->gtLsraInfo.dstCount == 0 && op2 != nullptr)
- {
- op1 = op2;
- op2 = tree->gtOp.gtOp1;
- }
-
- // If we have a read-modify-write operation, we want to preference op1 to the target.
- // If op1 is contained, we don't want to preference it, but it won't
- // show up as a source in that case, so it will be ignored.
- op1->gtLsraInfo.isTgtPref = true;
-
- // Is this a non-commutative operator, or is op2 a contained memory op?
- // (Note that we can't call IsContained() at this point because it uses exactly the
- // same information we're currently computing.)
- // In either case, we need to make op2 remain live until the op is complete, by marking
- // the source(s) associated with op2 as "delayFree".
- // Note that if op2 of a binary RMW operator is a memory op, even if the operator
- // is commutative, codegen cannot reverse them.
- // TODO-XArch-CQ: This is not actually the case for all RMW binary operators, but there's
- // more work to be done to correctly reverse the operands if they involve memory
- // operands. Also, we may need to handle more cases than GT_IND, especially once
- // we've modified the register allocator to not require all nodes to be assigned
- // a register (e.g. a spilled lclVar can often be referenced directly from memory).
- // Note that we may have a null op2, even with 2 sources, if op1 is a base/index memory op.
-
- GenTree* delayUseSrc = nullptr;
- // TODO-XArch-Cleanup: We should make the indirection explicit on these nodes so that we don't have
- // to special case them.
- if (tree->OperGet() == GT_XADD || tree->OperGet() == GT_XCHG || tree->OperGet() == GT_LOCKADD)
- {
- delayUseSrc = op1;
- }
- else if ((op2 != nullptr) &&
- (!tree->OperIsCommutative() || (op2->isMemoryOp() && (op2->gtLsraInfo.srcCount == 0))))
- {
- delayUseSrc = op2;
- }
- if (delayUseSrc != nullptr)
- {
- // If delayUseSrc is an indirection and it doesn't produce a result, then we need to set "delayFree'
- // on the base & index, if any.
- // Otherwise, we set it on delayUseSrc itself.
- if (delayUseSrc->isIndir() && (delayUseSrc->gtLsraInfo.dstCount == 0))
- {
- GenTree* base = delayUseSrc->AsIndir()->Base();
- GenTree* index = delayUseSrc->AsIndir()->Index();
- if (base != nullptr)
- {
- base->gtLsraInfo.isDelayFree = true;
- }
- if (index != nullptr)
- {
- index->gtLsraInfo.isDelayFree = true;
- }
- }
- else
- {
- delayUseSrc->gtLsraInfo.isDelayFree = true;
- }
- info->hasDelayFreeSrc = true;
- }
- }
- }
-
- TreeNodeInfoInitCheckByteable(tree);
-
- // We need to be sure that we've set info->srcCount and info->dstCount appropriately
- assert((info->dstCount < 2) || (tree->IsMultiRegCall() && info->dstCount == MAX_RET_REG_COUNT));
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitCheckByteable: Check the tree to see if "byte-able" registers are
-// required, and set the tree node info accordingly.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitCheckByteable(GenTree* tree)
-{
-#ifdef _TARGET_X86_
- LinearScan* l = m_lsra;
- TreeNodeInfo* info = &(tree->gtLsraInfo);
-
- // Exclude RBM_NON_BYTE_REGS from dst candidates of tree node and src candidates of operands
- // if the tree node is a byte type.
- //
- // Though this looks conservative in theory, in practice we could not think of a case where
- // the below logic leads to conservative register specification. In future when or if we find
- // one such case, this logic needs to be fine tuned for that case(s).
-
- if (ExcludeNonByteableRegisters(tree))
- {
- regMaskTP regMask;
- if (info->dstCount > 0)
- {
- regMask = info->getDstCandidates(l);
- assert(regMask != RBM_NONE);
- info->setDstCandidates(l, regMask & ~RBM_NON_BYTE_REGS);
- }
-
- if (tree->OperIsSimple() && (info->srcCount > 0))
- {
- // No need to set src candidates on a contained child operand.
- GenTree* op = tree->gtOp.gtOp1;
- assert(op != nullptr);
- bool containedNode = (op->gtLsraInfo.srcCount == 0) && (op->gtLsraInfo.dstCount == 0);
- if (!containedNode)
- {
- regMask = op->gtLsraInfo.getSrcCandidates(l);
- assert(regMask != RBM_NONE);
- op->gtLsraInfo.setSrcCandidates(l, regMask & ~RBM_NON_BYTE_REGS);
- }
-
- if (tree->OperIsBinary() && (tree->gtOp.gtOp2 != nullptr))
- {
- op = tree->gtOp.gtOp2;
- containedNode = (op->gtLsraInfo.srcCount == 0) && (op->gtLsraInfo.dstCount == 0);
- if (!containedNode)
- {
- regMask = op->gtLsraInfo.getSrcCandidates(l);
- assert(regMask != RBM_NONE);
- op->gtLsraInfo.setSrcCandidates(l, regMask & ~RBM_NON_BYTE_REGS);
- }
- }
- }
- }
-#endif //_TARGET_X86_
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitSimple: Sets the srcCount and dstCount for all the trees
-// without special handling based on the tree node type.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitSimple(GenTree* tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- unsigned kind = tree->OperKind();
- info->dstCount = (tree->TypeGet() == TYP_VOID) ? 0 : 1;
- if (kind & (GTK_CONST | GTK_LEAF))
- {
- info->srcCount = 0;
- }
- else if (kind & (GTK_SMPOP))
- {
- if (tree->gtGetOp2() != nullptr)
- {
- info->srcCount = 2;
- }
- else
- {
- info->srcCount = 1;
- }
- }
- else
- {
- unreached();
- }
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitReturn: Set the NodeInfo for a GT_RETURN.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitReturn(GenTree* tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- LinearScan* l = m_lsra;
- Compiler* compiler = comp;
-
-#if !defined(_TARGET_64BIT_)
- if (tree->TypeGet() == TYP_LONG)
- {
- GenTree* op1 = tree->gtGetOp1();
- noway_assert(op1->OperGet() == GT_LONG);
- GenTree* loVal = op1->gtGetOp1();
- GenTree* hiVal = op1->gtGetOp2();
- info->srcCount = 2;
- loVal->gtLsraInfo.setSrcCandidates(l, RBM_LNGRET_LO);
- hiVal->gtLsraInfo.setSrcCandidates(l, RBM_LNGRET_HI);
- info->dstCount = 0;
- }
- else
-#endif // !defined(_TARGET_64BIT_)
- {
- GenTree* op1 = tree->gtGetOp1();
- regMaskTP useCandidates = RBM_NONE;
-
- info->srcCount = (tree->TypeGet() == TYP_VOID) ? 0 : 1;
- info->dstCount = 0;
-
-#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
- if (varTypeIsStruct(tree))
- {
- // op1 has to be either an lclvar or a multi-reg returning call
- if (op1->OperGet() == GT_LCL_VAR)
- {
- GenTreeLclVarCommon* lclVarCommon = op1->AsLclVarCommon();
- LclVarDsc* varDsc = &(compiler->lvaTable[lclVarCommon->gtLclNum]);
- assert(varDsc->lvIsMultiRegRet);
-
- // Mark var as contained if not enregistrable.
- if (!varTypeIsEnregisterableStruct(op1))
- {
- MakeSrcContained(tree, op1);
- }
- }
- else
- {
- noway_assert(op1->IsMultiRegCall());
-
- ReturnTypeDesc* retTypeDesc = op1->AsCall()->GetReturnTypeDesc();
- info->srcCount = retTypeDesc->GetReturnRegCount();
- useCandidates = retTypeDesc->GetABIReturnRegs();
- }
- }
- else
-#endif // FEATURE_UNIX_AMD64_STRUCT_PASSING
- {
- // Non-struct type return - determine useCandidates
- switch (tree->TypeGet())
- {
- case TYP_VOID:
- useCandidates = RBM_NONE;
- break;
- case TYP_FLOAT:
- useCandidates = RBM_FLOATRET;
- break;
- case TYP_DOUBLE:
- useCandidates = RBM_DOUBLERET;
- break;
-#if defined(_TARGET_64BIT_)
- case TYP_LONG:
- useCandidates = RBM_LNGRET;
- break;
-#endif // defined(_TARGET_64BIT_)
- default:
- useCandidates = RBM_INTRET;
- break;
- }
- }
-
- if (useCandidates != RBM_NONE)
- {
- op1->gtLsraInfo.setSrcCandidates(l, useCandidates);
- }
- }
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitShiftRotate: Set the NodeInfo for a shift or rotate.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitShiftRotate(GenTree* tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- LinearScan* l = m_lsra;
-
- info->srcCount = 2;
- info->dstCount = 1;
-
- // For shift operations, we need that the number
- // of bits moved gets stored in CL in case
- // the number of bits to shift is not a constant.
- GenTreePtr shiftBy = tree->gtOp.gtOp2;
- GenTreePtr source = tree->gtOp.gtOp1;
-
-#ifdef _TARGET_X86_
- // The first operand of a GT_LSH_HI and GT_RSH_LO oper is a GT_LONG so that
- // we can have a three operand form. Increment the srcCount.
- if (tree->OperGet() == GT_LSH_HI || tree->OperGet() == GT_RSH_LO)
- {
- assert(source->OperGet() == GT_LONG);
-
- info->srcCount++;
-
- if (tree->OperGet() == GT_LSH_HI)
- {
- GenTreePtr sourceLo = source->gtOp.gtOp1;
- sourceLo->gtLsraInfo.isDelayFree = true;
- }
- else
- {
- GenTreePtr sourceHi = source->gtOp.gtOp2;
- sourceHi->gtLsraInfo.isDelayFree = true;
- }
-
- source->gtLsraInfo.hasDelayFreeSrc = true;
- info->hasDelayFreeSrc = true;
- }
-#endif
-
- // x64 can encode 8 bits of shift and it will use 5 or 6. (the others are masked off)
- // We will allow whatever can be encoded - hope you know what you are doing.
- if (!IsContainableImmed(tree, shiftBy) || (shiftBy->gtIntConCommon.IconValue() > 255) ||
- (shiftBy->gtIntConCommon.IconValue() < 0))
- {
- source->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~RBM_RCX);
- shiftBy->gtLsraInfo.setSrcCandidates(l, RBM_RCX);
- info->setDstCandidates(l, l->allRegs(TYP_INT) & ~RBM_RCX);
- }
- else
- {
- MakeSrcContained(tree, shiftBy);
-
- // Note that Rotate Left/Right instructions don't set ZF and SF flags.
- //
- // If the operand being shifted is 32-bits then upper three bits are masked
- // by hardware to get actual shift count. Similarly for 64-bit operands
- // shift count is narrowed to [0..63]. If the resulting shift count is zero,
- // then shift operation won't modify flags.
- //
- // TODO-CQ-XARCH: We can optimize generating 'test' instruction for GT_EQ/NE(shift, 0)
- // if the shift count is known to be non-zero and in the range depending on the
- // operand size.
- }
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitCall: Set the NodeInfo for a call.
-//
-// Arguments:
-// call - The call node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitCall(GenTreeCall* call)
-{
- TreeNodeInfo* info = &(call->gtLsraInfo);
- LinearScan* l = m_lsra;
- Compiler* compiler = comp;
- bool hasMultiRegRetVal = false;
- ReturnTypeDesc* retTypeDesc = nullptr;
-
- info->srcCount = 0;
- if (call->TypeGet() != TYP_VOID)
- {
- hasMultiRegRetVal = call->HasMultiRegRetVal();
- if (hasMultiRegRetVal)
- {
- // dst count = number of registers in which the value is returned by call
- retTypeDesc = call->GetReturnTypeDesc();
- info->dstCount = retTypeDesc->GetReturnRegCount();
- }
- else
- {
- info->dstCount = 1;
- }
- }
- else
- {
- info->dstCount = 0;
- }
-
- GenTree* ctrlExpr = call->gtControlExpr;
- if (call->gtCallType == CT_INDIRECT)
- {
- // either gtControlExpr != null or gtCallAddr != null.
- // Both cannot be non-null at the same time.
- assert(ctrlExpr == nullptr);
- assert(call->gtCallAddr != nullptr);
- ctrlExpr = call->gtCallAddr;
-
-#ifdef _TARGET_X86_
- // Fast tail calls aren't currently supported on x86, but if they ever are, the code
- // below that handles indirect VSD calls will need to be fixed.
- assert(!call->IsFastTailCall() || !call->IsVirtualStub());
-#endif // _TARGET_X86_
- }
-
- // set reg requirements on call target represented as control sequence.
- if (ctrlExpr != nullptr)
- {
- // we should never see a gtControlExpr whose type is void.
- assert(ctrlExpr->TypeGet() != TYP_VOID);
-
- // call can take a Rm op on x64
- info->srcCount++;
-
- // In case of fast tail implemented as jmp, make sure that gtControlExpr is
- // computed into a register.
- if (!call->IsFastTailCall())
- {
-#ifdef _TARGET_X86_
- // On x86, we need to generate a very specific pattern for indirect VSD calls:
- //
- // 3-byte nop
- // call dword ptr [eax]
- //
- // Where EAX is also used as an argument to the stub dispatch helper. Make
- // sure that the call target address is computed into EAX in this case.
- if (call->IsVirtualStub() && (call->gtCallType == CT_INDIRECT))
- {
- assert(ctrlExpr->isIndir());
-
- ctrlExpr->gtGetOp1()->gtLsraInfo.setSrcCandidates(l, RBM_VIRTUAL_STUB_TARGET);
- MakeSrcContained(call, ctrlExpr);
- }
- else
-#endif // _TARGET_X86_
- if (ctrlExpr->isIndir())
- {
- MakeSrcContained(call, ctrlExpr);
- }
- }
- else
- {
- // Fast tail call - make sure that call target is always computed in RAX
- // so that epilog sequence can generate "jmp rax" to achieve fast tail call.
- ctrlExpr->gtLsraInfo.setSrcCandidates(l, RBM_RAX);
- }
- }
-
- // If this is a varargs call, we will clear the internal candidates in case we need
- // to reserve some integer registers for copying float args.
- // We have to do this because otherwise the default candidates are allRegs, and adding
- // the individual specific registers will have no effect.
- if (call->IsVarargs())
- {
- info->setInternalCandidates(l, RBM_NONE);
- }
-
- RegisterType registerType = call->TypeGet();
-
- // Set destination candidates for return value of the call.
- CLANG_FORMAT_COMMENT_ANCHOR;
-
-#ifdef _TARGET_X86_
- if (call->IsHelperCall(compiler, CORINFO_HELP_INIT_PINVOKE_FRAME))
- {
- // The x86 CORINFO_HELP_INIT_PINVOKE_FRAME helper uses a custom calling convention that returns with
- // TCB in REG_PINVOKE_TCB. AMD64/ARM64 use the standard calling convention. fgMorphCall() sets the
- // correct argument registers.
- info->setDstCandidates(l, RBM_PINVOKE_TCB);
- }
- else
-#endif // _TARGET_X86_
- if (hasMultiRegRetVal)
- {
- assert(retTypeDesc != nullptr);
- info->setDstCandidates(l, retTypeDesc->GetABIReturnRegs());
- }
- else if (varTypeIsFloating(registerType))
- {
-#ifdef _TARGET_X86_
- // The return value will be on the X87 stack, and we will need to move it.
- info->setDstCandidates(l, l->allRegs(registerType));
-#else // !_TARGET_X86_
- info->setDstCandidates(l, RBM_FLOATRET);
-#endif // !_TARGET_X86_
- }
- else if (registerType == TYP_LONG)
- {
- info->setDstCandidates(l, RBM_LNGRET);
- }
- else
- {
- info->setDstCandidates(l, RBM_INTRET);
- }
-
- // number of args to a call =
- // callRegArgs + (callargs - placeholders, setup, etc)
- // there is an explicit thisPtr but it is redundant
-
- // If there is an explicit this pointer, we don't want that node to produce anything
- // as it is redundant
- if (call->gtCallObjp != nullptr)
- {
- GenTreePtr thisPtrNode = call->gtCallObjp;
-
- if (thisPtrNode->gtOper == GT_PUTARG_REG)
- {
- l->clearOperandCounts(thisPtrNode);
- l->clearDstCount(thisPtrNode->gtOp.gtOp1);
- }
- else
- {
- l->clearDstCount(thisPtrNode);
- }
- }
-
-#if FEATURE_VARARG
- bool callHasFloatRegArgs = false;
-#endif // !FEATURE_VARARG
-
- // First, count reg args
- for (GenTreePtr list = call->gtCallLateArgs; list; list = list->MoveNext())
- {
- assert(list->OperIsList());
-
- GenTreePtr argNode = list->Current();
-
- fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, argNode);
- assert(curArgTabEntry);
-
- if (curArgTabEntry->regNum == REG_STK)
- {
- // late arg that is not passed in a register
- DISPNODE(argNode);
- assert(argNode->gtOper == GT_PUTARG_STK);
- argNode->gtLsraInfo.srcCount = 1;
- argNode->gtLsraInfo.dstCount = 0;
-
-#ifdef FEATURE_PUT_STRUCT_ARG_STK
- // If the node is TYP_STRUCT and it is put on stack with
- // putarg_stk operation, we consume and produce no registers.
- // In this case the embedded Obj node should not produce
- // registers too since it is contained.
- // Note that if it is a SIMD type the argument will be in a register.
- if (argNode->TypeGet() == TYP_STRUCT)
- {
- assert(argNode->gtOp.gtOp1 != nullptr && argNode->gtOp.gtOp1->OperGet() == GT_OBJ);
- argNode->gtOp.gtOp1->gtLsraInfo.dstCount = 0;
- argNode->gtLsraInfo.srcCount = 0;
- }
-#endif // FEATURE_PUT_STRUCT_ARG_STK
- continue;
- }
-
- regNumber argReg = REG_NA;
- regMaskTP argMask = RBM_NONE;
- short regCount = 0;
- bool isOnStack = true;
- if (curArgTabEntry->regNum != REG_STK)
- {
- isOnStack = false;
- var_types argType = argNode->TypeGet();
-
-#if FEATURE_VARARG
- callHasFloatRegArgs |= varTypeIsFloating(argType);
-#endif // !FEATURE_VARARG
-
- argReg = curArgTabEntry->regNum;
- regCount = 1;
-
- // Default case is that we consume one source; modify this later (e.g. for
- // promoted structs)
- info->srcCount++;
-
- argMask = genRegMask(argReg);
- argNode = argNode->gtEffectiveVal();
- }
-
- // If the struct arg is wrapped in CPYBLK the type of the param will be TYP_VOID.
- // Use the curArgTabEntry's isStruct to get whether the param is a struct.
- if (varTypeIsStruct(argNode) PUT_STRUCT_ARG_STK_ONLY(|| curArgTabEntry->isStruct))
- {
- unsigned originalSize = 0;
- LclVarDsc* varDsc = nullptr;
- if (argNode->gtOper == GT_LCL_VAR)
- {
- varDsc = compiler->lvaTable + argNode->gtLclVarCommon.gtLclNum;
- originalSize = varDsc->lvSize();
- }
- else if (argNode->gtOper == GT_MKREFANY)
- {
- originalSize = 2 * TARGET_POINTER_SIZE;
- }
- else if (argNode->gtOper == GT_OBJ)
- {
- noway_assert(!"GT_OBJ not supported for amd64");
- }
-#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
- else if (argNode->gtOper == GT_PUTARG_REG)
- {
- originalSize = genTypeSize(argNode->gtType);
- }
- else if (argNode->gtOper == GT_FIELD_LIST)
- {
- originalSize = 0;
-
- // There could be up to 2 PUTARG_REGs in the list
- GenTreeFieldList* fieldListPtr = argNode->AsFieldList();
- unsigned iterationNum = 0;
- for (; fieldListPtr; fieldListPtr = fieldListPtr->Rest())
- {
- GenTreePtr putArgRegNode = fieldListPtr->Current();
- assert(putArgRegNode->gtOper == GT_PUTARG_REG);
-
- if (iterationNum == 0)
- {
- varDsc = compiler->lvaTable + putArgRegNode->gtOp.gtOp1->gtLclVarCommon.gtLclNum;
- originalSize = varDsc->lvSize();
- assert(originalSize != 0);
- }
- else
- {
- // Need an extra source for every node, but the first in the list.
- info->srcCount++;
-
- // Get the mask for the second putarg_reg
- argMask = genRegMask(curArgTabEntry->otherRegNum);
- }
-
- putArgRegNode->gtLsraInfo.setDstCandidates(l, argMask);
- putArgRegNode->gtLsraInfo.setSrcCandidates(l, argMask);
-
- // To avoid redundant moves, have the argument child tree computed in the
- // register in which the argument is passed to the call.
- putArgRegNode->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, l->getUseCandidates(putArgRegNode));
- iterationNum++;
- }
-
- assert(iterationNum <= CLR_SYSTEMV_MAX_EIGHTBYTES_COUNT_TO_PASS_IN_REGISTERS);
- }
-#endif // FEATURE_UNIX_AMD64_STRUCT_PASSING
- else
- {
- noway_assert(!"Can't predict unsupported TYP_STRUCT arg kind");
- }
-
- unsigned slots = ((unsigned)(roundUp(originalSize, TARGET_POINTER_SIZE))) / REGSIZE_BYTES;
- unsigned remainingSlots = slots;
-
- if (!isOnStack)
- {
- remainingSlots = slots - 1;
-
- regNumber reg = (regNumber)(argReg + 1);
- while (remainingSlots > 0 && reg <= REG_ARG_LAST)
- {
- argMask |= genRegMask(reg);
- reg = (regNumber)(reg + 1);
- remainingSlots--;
- regCount++;
- }
- }
-
- short internalIntCount = 0;
- if (remainingSlots > 0)
- {
-#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
- // This TYP_STRUCT argument is also passed in the outgoing argument area
- // We need a register to address the TYP_STRUCT
- internalIntCount = 1;
-#else // FEATURE_UNIX_AMD64_STRUCT_PASSING
- // And we may need 2
- internalIntCount = 2;
-#endif // FEATURE_UNIX_AMD64_STRUCT_PASSING
- }
- argNode->gtLsraInfo.internalIntCount = internalIntCount;
-
-#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
- if (argNode->gtOper == GT_PUTARG_REG)
- {
- argNode->gtLsraInfo.setDstCandidates(l, argMask);
- argNode->gtLsraInfo.setSrcCandidates(l, argMask);
- }
-#endif // FEATURE_UNIX_AMD64_STRUCT_PASSING
- }
- else
- {
- argNode->gtLsraInfo.setDstCandidates(l, argMask);
- argNode->gtLsraInfo.setSrcCandidates(l, argMask);
- }
-
- // To avoid redundant moves, have the argument child tree computed in the
- // register in which the argument is passed to the call.
- if (argNode->gtOper == GT_PUTARG_REG)
- {
- argNode->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, l->getUseCandidates(argNode));
- }
-
-#if FEATURE_VARARG
- // In the case of a varargs call, the ABI dictates that if we have floating point args,
- // we must pass the enregistered arguments in both the integer and floating point registers.
- // Since the integer register is not associated with this arg node, we will reserve it as
- // an internal register so that it is not used during the evaluation of the call node
- // (e.g. for the target).
- if (call->IsVarargs() && varTypeIsFloating(argNode))
- {
- regNumber targetReg = compiler->getCallArgIntRegister(argReg);
- info->setInternalIntCount(info->internalIntCount + 1);
- info->addInternalCandidates(l, genRegMask(targetReg));
- }
-#endif // FEATURE_VARARG
- }
-
- // Now, count stack args
- // Note that these need to be computed into a register, but then
- // they're just stored to the stack - so the reg doesn't
- // need to remain live until the call. In fact, it must not
- // because the code generator doesn't actually consider it live,
- // so it can't be spilled.
-
- GenTreePtr args = call->gtCallArgs;
- while (args)
- {
- GenTreePtr arg = args->gtOp.gtOp1;
- if (!(args->gtFlags & GTF_LATE_ARG))
- {
- TreeNodeInfo* argInfo = &(arg->gtLsraInfo);
-#if !defined(_TARGET_64BIT_)
- if (arg->TypeGet() == TYP_LONG)
- {
- assert(arg->OperGet() == GT_LONG);
- GenTreePtr loArg = arg->gtGetOp1();
- GenTreePtr hiArg = arg->gtGetOp2();
- assert((loArg->OperGet() == GT_PUTARG_STK) && (hiArg->OperGet() == GT_PUTARG_STK));
- assert((loArg->gtLsraInfo.dstCount == 1) && (hiArg->gtLsraInfo.dstCount == 1));
- loArg->gtLsraInfo.isLocalDefUse = true;
- hiArg->gtLsraInfo.isLocalDefUse = true;
- }
- else
-#endif // !defined(_TARGET_64BIT_)
- {
- if (argInfo->dstCount != 0)
- {
- argInfo->isLocalDefUse = true;
- }
-
- // If the child of GT_PUTARG_STK is a constant, we don't need a register to
- // move it to memory (stack location).
- //
- // On AMD64, we don't want to make 0 contained, because we can generate smaller code
- // by zeroing a register and then storing it. E.g.:
- // xor rdx, rdx
- // mov gword ptr [rsp+28H], rdx
- // is 2 bytes smaller than:
- // mov gword ptr [rsp+28H], 0
- //
- // On x86, we push stack arguments; we don't use 'mov'. So:
- // push 0
- // is 1 byte smaller than:
- // xor rdx, rdx
- // push rdx
-
- argInfo->dstCount = 0;
- if (arg->gtOper == GT_PUTARG_STK)
- {
- GenTree* op1 = arg->gtOp.gtOp1;
- if (IsContainableImmed(arg, op1)
-#if defined(_TARGET_AMD64_)
- && !op1->IsIntegralConst(0)
-#endif // _TARGET_AMD64_
- )
- {
- MakeSrcContained(arg, op1);
- }
- }
- }
- }
- args = args->gtOp.gtOp2;
- }
-
-#if FEATURE_VARARG
- // If it is a fast tail call, it is already preferenced to use RAX.
- // Therefore, no need set src candidates on call tgt again.
- if (call->IsVarargs() && callHasFloatRegArgs && !call->IsFastTailCall() && (ctrlExpr != nullptr))
- {
- // Don't assign the call target to any of the argument registers because
- // we will use them to also pass floating point arguments as required
- // by Amd64 ABI.
- ctrlExpr->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~(RBM_ARG_REGS));
- }
-#endif // !FEATURE_VARARG
-}
-
//------------------------------------------------------------------------
-// TreeNodeInfoInitBlockStore: Set the NodeInfo for a block store.
+// LowerBlockStore: Set block store type
//
// Arguments:
// blkNode - The block store node of interest
@@ -1639,25 +107,15 @@ void Lowering::TreeNodeInfoInitCall(GenTreeCall* call)
// Return Value:
// None.
//
-void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
+void Lowering::LowerBlockStore(GenTreeBlk* blkNode)
{
- GenTree* dstAddr = blkNode->Addr();
- unsigned size = blkNode->gtBlkSize;
- GenTree* source = blkNode->Data();
- LinearScan* l = m_lsra;
- Compiler* compiler = comp;
-
- // Sources are dest address, initVal or source.
- // We may require an additional source or temp register for the size.
- blkNode->gtLsraInfo.srcCount = 2;
- blkNode->gtLsraInfo.dstCount = 0;
- blkNode->gtLsraInfo.setInternalCandidates(l, RBM_NONE);
+ GenTree* dstAddr = blkNode->Addr();
+ unsigned size = blkNode->gtBlkSize;
+ GenTree* source = blkNode->Data();
+ Compiler* compiler = comp;
GenTreePtr srcAddrOrFill = nullptr;
bool isInitBlk = blkNode->OperIsInitBlkOp();
- regMaskTP dstAddrRegMask = RBM_NONE;
- regMaskTP sourceRegMask = RBM_NONE;
- regMaskTP blkSizeRegMask = RBM_NONE;
if (!isInitBlk)
{
// CopyObj or CopyBlk
@@ -1668,20 +126,6 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
if (source->gtOper == GT_IND)
{
srcAddrOrFill = blkNode->Data()->gtGetOp1();
- // We're effectively setting source as contained, but can't call MakeSrcContained, because the
- // "inheritance" of the srcCount is to a child not a parent - it would "just work" but could be misleading.
- // If srcAddr is already non-contained, we don't need to change it.
- if (srcAddrOrFill->gtLsraInfo.getDstCount() == 0)
- {
- srcAddrOrFill->gtLsraInfo.setDstCount(1);
- srcAddrOrFill->gtLsraInfo.setSrcCount(source->gtLsraInfo.srcCount);
- }
- m_lsra->clearOperandCounts(source);
- }
- else if (!source->IsMultiRegCall() && !source->OperIsSIMD())
- {
- assert(source->IsLocal());
- MakeSrcContained(blkNode, source);
}
}
@@ -1735,58 +179,18 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
initVal->gtIntCon.gtIconVal = 0x01010101 * fill;
#endif // !_TARGET_AMD64_
- // In case we have a buffer >= 16 bytes
- // we can use SSE2 to do a 128-bit store in a single
- // instruction.
- if (size >= XMM_REGSIZE_BYTES)
- {
- // Reserve an XMM register to fill it with
- // a pack of 16 init value constants.
- blkNode->gtLsraInfo.internalFloatCount = 1;
- blkNode->gtLsraInfo.setInternalCandidates(l, l->internalFloatRegCandidates());
- if ((fill == 0) && ((size & 0xf) == 0))
- {
- MakeSrcContained(blkNode, source);
- }
- }
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindUnroll;
-
-#ifdef _TARGET_X86_
- if ((size & 1) != 0)
- {
- // On x86, you can't address the lower byte of ESI, EDI, ESP, or EBP when doing
- // a "mov byte ptr [dest], val". If the fill size is odd, we will try to do this
- // when unrolling, so only allow byteable registers as the source value. (We could
- // consider just using BlkOpKindRepInstr instead.)
- sourceRegMask = RBM_BYTE_REGS;
- }
-#endif // _TARGET_X86_
}
else
{
- // rep stos has the following register requirements:
- // a) The memory address to be in RDI.
- // b) The fill value has to be in RAX.
- // c) The buffer size will go in RCX.
- dstAddrRegMask = RBM_RDI;
- srcAddrOrFill = initVal;
- sourceRegMask = RBM_RAX;
- blkSizeRegMask = RBM_RCX;
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindRepInstr;
}
}
else
{
#ifdef _TARGET_AMD64_
- // The helper follows the regular AMD64 ABI.
- dstAddrRegMask = RBM_ARG_0;
- sourceRegMask = RBM_ARG_1;
- blkSizeRegMask = RBM_ARG_2;
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindHelper;
#else // !_TARGET_AMD64_
- dstAddrRegMask = RBM_RDI;
- sourceRegMask = RBM_RAX;
- blkSizeRegMask = RBM_RCX;
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindRepInstr;
#endif // !_TARGET_AMD64_
}
@@ -1870,19 +274,12 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
if (IsRepMovsProfitable)
{
// We need the size of the contiguous Non-GC-region to be in RCX to call rep movsq.
- blkSizeRegMask = RBM_RCX;
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindRepInstr;
}
else
{
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindUnroll;
}
-
- dstAddrRegMask = RBM_RDI;
-
- // The srcAddr must be in a register. If it was under a GT_IND, we need to subsume all of its
- // sources.
- sourceRegMask = RBM_RSI;
}
else
{
@@ -1903,119 +300,31 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
// our framework assemblies, so this is the main code generation scheme we'll use.
if (size <= CPBLK_UNROLL_LIMIT)
{
- // If we have a remainder smaller than XMM_REGSIZE_BYTES, we need an integer temp reg.
- //
- // x86 specific note: if the size is odd, the last copy operation would be of size 1 byte.
- // But on x86 only RBM_BYTE_REGS could be used as byte registers. Therefore, exclude
- // RBM_NON_BYTE_REGS from internal candidates.
- if ((size & (XMM_REGSIZE_BYTES - 1)) != 0)
- {
- blkNode->gtLsraInfo.internalIntCount++;
- regMaskTP regMask = l->allRegs(TYP_INT);
-
-#ifdef _TARGET_X86_
- if ((size % 2) != 0)
- {
- regMask &= ~RBM_NON_BYTE_REGS;
- }
-#endif
- blkNode->gtLsraInfo.setInternalCandidates(l, regMask);
- }
-
- if (size >= XMM_REGSIZE_BYTES)
- {
- // If we have a buffer larger than XMM_REGSIZE_BYTES,
- // reserve an XMM register to use it for a
- // series of 16-byte loads and stores.
- blkNode->gtLsraInfo.internalFloatCount = 1;
- blkNode->gtLsraInfo.addInternalCandidates(l, l->internalFloatRegCandidates());
- }
-
- // If src or dst are on stack, we don't have to generate the address into a register
- // because it's just some constant+SP
- if (srcAddrOrFill != nullptr && srcAddrOrFill->OperIsLocalAddr())
- {
- MakeSrcContained(blkNode, srcAddrOrFill);
- }
-
- if (dstAddr->OperIsLocalAddr())
- {
- MakeSrcContained(blkNode, dstAddr);
- }
-
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindUnroll;
}
else
{
- blkNode->gtLsraInfo.setInternalCandidates(l, RBM_NONE);
- dstAddrRegMask = RBM_RDI;
- sourceRegMask = RBM_RSI;
- blkSizeRegMask = RBM_RCX;
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindRepInstr;
}
}
#ifdef _TARGET_AMD64_
else
{
- // In case we have a constant integer this means we went beyond
- // CPBLK_MOVS_LIMIT bytes of size, still we should never have the case of
- // any GC-Pointers in the src struct.
- blkNode->gtLsraInfo.setInternalCandidates(l, RBM_NONE);
- dstAddrRegMask = RBM_ARG_0;
- sourceRegMask = RBM_ARG_1;
- blkSizeRegMask = RBM_ARG_2;
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindHelper;
}
#elif defined(_TARGET_X86_)
else
{
- dstAddrRegMask = RBM_RDI;
- sourceRegMask = RBM_RSI;
- blkSizeRegMask = RBM_RCX;
blkNode->gtBlkOpKind = GenTreeBlk::BlkOpKindRepInstr;
}
#endif // _TARGET_X86_
assert(blkNode->gtBlkOpKind != GenTreeBlk::BlkOpKindInvalid);
}
- if (dstAddrRegMask != RBM_NONE)
- {
- dstAddr->gtLsraInfo.setSrcCandidates(l, dstAddrRegMask);
- }
- if (sourceRegMask != RBM_NONE)
- {
- if (srcAddrOrFill != nullptr)
- {
- srcAddrOrFill->gtLsraInfo.setSrcCandidates(l, sourceRegMask);
- }
- else
- {
- // This is a local source; we'll use a temp register for its address.
- blkNode->gtLsraInfo.addInternalCandidates(l, sourceRegMask);
- blkNode->gtLsraInfo.internalIntCount++;
- }
- }
- if (blkSizeRegMask != RBM_NONE)
- {
- if (size != 0)
- {
- // Reserve a temp register for the block size argument.
- blkNode->gtLsraInfo.addInternalCandidates(l, blkSizeRegMask);
- blkNode->gtLsraInfo.internalIntCount++;
- }
- else
- {
- // The block size argument is a third argument to GT_STORE_DYN_BLK
- noway_assert(blkNode->gtOper == GT_STORE_DYN_BLK);
- blkNode->gtLsraInfo.setSrcCount(3);
- GenTree* blockSize = blkNode->AsDynBlk()->gtDynamicSize;
- blockSize->gtLsraInfo.setSrcCandidates(l, blkSizeRegMask);
- }
- }
}
#ifdef FEATURE_PUT_STRUCT_ARG_STK
//------------------------------------------------------------------------
-// TreeNodeInfoInitPutArgStk: Set the NodeInfo for a GT_PUTARG_STK.
+// LowerPutArgStk: Lower a GT_PUTARG_STK.
//
// Arguments:
// tree - The node of interest
@@ -2023,11 +332,8 @@ void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
// Return Value:
// None.
//
-void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* putArgStk)
+void Lowering::LowerPutArgStk(GenTreePutArgStk* putArgStk)
{
- TreeNodeInfo* info = &(putArgStk->gtLsraInfo);
- LinearScan* l = m_lsra;
-
#ifdef _TARGET_X86_
if (putArgStk->gtOp1->gtOper == GT_FIELD_LIST)
{
@@ -2070,9 +376,6 @@ void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* putArgStk)
fieldCount++;
}
- info->srcCount = fieldCount;
- info->dstCount = 0;
-
// In theory, the upper bound for the size of a field list is 8: these constructs only appear when passing the
// collection of lclVars that represent the fields of a promoted struct lclVar, and we do not promote struct
// lclVars with more than 4 fields. If each of these lclVars is of type long, decomposition will split the
@@ -2103,9 +406,8 @@ void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* putArgStk)
putArgStk->gtOp1 = fieldList;
}
- // Now that the fields have been sorted, initialize the LSRA info.
+ // Now that the fields have been sorted, the kind of code we will generate.
bool allFieldsAreSlots = true;
- bool needsByteTemp = false;
unsigned prevOffset = putArgStk->getArgSize();
for (GenTreeFieldList* current = fieldList; current != nullptr; current = current->Rest())
{
@@ -2114,56 +416,12 @@ void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* putArgStk)
const unsigned fieldOffset = current->gtFieldOffset;
assert(fieldType != TYP_LONG);
- // For x86 we must mark all integral fields as contained or reg-optional, and handle them
- // accordingly in code generation, since we may have up to 8 fields, which cannot all be in
- // registers to be consumed atomically by the call.
- if (varTypeIsIntegralOrI(fieldNode))
- {
- if (fieldNode->OperGet() == GT_LCL_VAR)
- {
- LclVarDsc* varDsc = &(comp->lvaTable[fieldNode->AsLclVarCommon()->gtLclNum]);
- if (varDsc->lvTracked && !varDsc->lvDoNotEnregister)
- {
- SetRegOptional(fieldNode);
- }
- else
- {
- MakeSrcContained(putArgStk, fieldNode);
- }
- }
- else if (fieldNode->IsIntCnsFitsInI32())
- {
- MakeSrcContained(putArgStk, fieldNode);
- }
- else
- {
- // For the case where we cannot directly push the value, if we run out of registers,
- // it would be better to defer computation until we are pushing the arguments rather
- // than spilling, but this situation is not all that common, as most cases of promoted
- // structs do not have a large number of fields, and of those most are lclVars or
- // copy-propagated constants.
- SetRegOptional(fieldNode);
- }
- }
- else
- {
- assert(varTypeIsFloating(fieldNode));
- }
-
// We can treat as a slot any field that is stored at a slot boundary, where the previous
// field is not in the same slot. (Note that we store the fields in reverse order.)
const bool fieldIsSlot = ((fieldOffset % 4) == 0) && ((prevOffset - fieldOffset) >= 4);
if (!fieldIsSlot)
{
allFieldsAreSlots = false;
- if (varTypeIsByte(fieldType))
- {
- // If this field is a slot--i.e. it is an integer field that is 4-byte aligned and takes up 4 bytes
- // (including padding)--we can store the whole value rather than just the byte. Otherwise, we will
- // need a byte-addressable register for the store. We will enforce this requirement on an internal
- // register, which we can use to copy multiple byte values.
- needsByteTemp = true;
- }
}
if (varTypeIsGC(fieldType))
@@ -2187,35 +445,13 @@ void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* putArgStk)
else
{
putArgStk->gtPutArgStkKind = GenTreePutArgStk::Kind::Push;
- // If any of the fields cannot be stored with an actual push, we may need a temporary
- // register to load the value before storing it to the stack location.
- info->internalIntCount = 1;
- regMaskTP regMask = l->allRegs(TYP_INT);
- if (needsByteTemp)
- {
- regMask &= ~RBM_NON_BYTE_REGS;
- }
- info->setInternalCandidates(l, regMask);
}
return;
}
#endif // _TARGET_X86_
-#if defined(FEATURE_SIMD) && defined(_TARGET_X86_)
- // For PutArgStk of a TYP_SIMD12, we need an extra register.
- if (putArgStk->TypeGet() == TYP_SIMD12)
- {
- info->srcCount = putArgStk->gtOp1->gtLsraInfo.dstCount;
- info->dstCount = 0;
- info->internalFloatCount = 1;
- info->setInternalCandidates(l, l->allSIMDRegs());
- return;
- }
-#endif // defined(FEATURE_SIMD) && defined(_TARGET_X86_)
-
if (putArgStk->TypeGet() != TYP_STRUCT)
{
- TreeNodeInfoInitSimple(putArgStk);
return;
}
@@ -2223,21 +459,6 @@ void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* putArgStk)
GenTreePtr src = putArgStk->gtOp1;
GenTreePtr srcAddr = nullptr;
- bool haveLocalAddr = false;
- if ((src->OperGet() == GT_OBJ) || (src->OperGet() == GT_IND))
- {
- srcAddr = src->gtOp.gtOp1;
- assert(srcAddr != nullptr);
- haveLocalAddr = srcAddr->OperIsLocalAddr();
- }
- else
- {
- assert(varTypeIsSIMD(putArgStk));
- }
-
- info->srcCount = src->gtLsraInfo.dstCount;
- info->dstCount = 0;
-
// In case of a CpBlk we could use a helper call. In case of putarg_stk we
// can't do that since the helper call could kill some already set up outgoing args.
// TODO-Amd64-Unix: converge the code for putarg_stk with cpyblk/cpyobj.
@@ -2257,38 +478,6 @@ void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* putArgStk)
// our framework assemblies, so this is the main code generation scheme we'll use.
if (size <= CPBLK_UNROLL_LIMIT && putArgStk->gtNumberReferenceSlots == 0)
{
- // If we have a remainder smaller than XMM_REGSIZE_BYTES, we need an integer temp reg.
- //
- // x86 specific note: if the size is odd, the last copy operation would be of size 1 byte.
- // But on x86 only RBM_BYTE_REGS could be used as byte registers. Therefore, exclude
- // RBM_NON_BYTE_REGS from internal candidates.
- if ((size & (XMM_REGSIZE_BYTES - 1)) != 0)
- {
- info->internalIntCount++;
- regMaskTP regMask = l->allRegs(TYP_INT);
-
-#ifdef _TARGET_X86_
- if ((size % 2) != 0)
- {
- regMask &= ~RBM_NON_BYTE_REGS;
- }
-#endif
- info->setInternalCandidates(l, regMask);
- }
-
-#ifdef _TARGET_X86_
- if (size >= 8)
-#else // !_TARGET_X86_
- if (size >= XMM_REGSIZE_BYTES)
-#endif // !_TARGET_X86_
- {
- // If we have a buffer larger than or equal to XMM_REGSIZE_BYTES on x64/ux,
- // or larger than or equal to 8 bytes on x86, reserve an XMM register to use it for a
- // series of 16-byte loads and stores.
- info->internalFloatCount = 1;
- info->addInternalCandidates(l, l->internalFloatRegCandidates());
- }
-
#ifdef _TARGET_X86_
if (size < XMM_REGSIZE_BYTES)
{
@@ -2310,1486 +499,11 @@ void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* putArgStk)
#endif // _TARGET_X86_
else
{
- info->internalIntCount += 3;
- info->setInternalCandidates(l, (RBM_RDI | RBM_RCX | RBM_RSI));
-
putArgStk->gtPutArgStkKind = GenTreePutArgStk::Kind::RepInstr;
}
-
- // Always mark the OBJ and ADDR as contained trees by the putarg_stk. The codegen will deal with this tree.
- MakeSrcContained(putArgStk, src);
-
- if (haveLocalAddr)
- {
- // If the source address is the address of a lclVar, make the source address contained to avoid unnecessary
- // copies.
- //
- // To avoid an assertion in MakeSrcContained, increment the parent's source count beforehand and decrement it
- // afterwards.
- info->srcCount++;
- MakeSrcContained(putArgStk, srcAddr);
- info->srcCount--;
- }
}
#endif // FEATURE_PUT_STRUCT_ARG_STK
-//------------------------------------------------------------------------
-// TreeNodeInfoInitLclHeap: Set the NodeInfo for a GT_LCLHEAP.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitLclHeap(GenTree* tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- LinearScan* l = m_lsra;
- Compiler* compiler = comp;
-
- info->srcCount = 1;
- info->dstCount = 1;
-
- // Need a variable number of temp regs (see genLclHeap() in codegenamd64.cpp):
- // Here '-' means don't care.
- //
- // Size? Init Memory? # temp regs
- // 0 - 0 (returns 0)
- // const and <=6 reg words - 0 (pushes '0')
- // const and >6 reg words Yes 0 (pushes '0')
- // const and <PageSize No 0 (amd64) 1 (x86)
- // (x86:tmpReg for sutracting from esp)
- // const and >=PageSize No 2 (regCnt and tmpReg for subtracing from sp)
- // Non-const Yes 0 (regCnt=targetReg and pushes '0')
- // Non-const No 2 (regCnt and tmpReg for subtracting from sp)
- //
- // Note: Here we don't need internal register to be different from targetReg.
- // Rather, require it to be different from operand's reg.
-
- GenTreePtr size = tree->gtOp.gtOp1;
- if (size->IsCnsIntOrI())
- {
- MakeSrcContained(tree, size);
-
- size_t sizeVal = size->gtIntCon.gtIconVal;
-
- if (sizeVal == 0)
- {
- info->internalIntCount = 0;
- }
- else
- {
- // Compute the amount of memory to properly STACK_ALIGN.
- // Note: The Gentree node is not updated here as it is cheap to recompute stack aligned size.
- // This should also help in debugging as we can examine the original size specified with localloc.
- sizeVal = AlignUp(sizeVal, STACK_ALIGN);
-
- // For small allocations up to 6 pointer sized words (i.e. 48 bytes of localloc)
- // we will generate 'push 0'.
- assert((sizeVal % REGSIZE_BYTES) == 0);
- size_t cntRegSizedWords = sizeVal / REGSIZE_BYTES;
- if (cntRegSizedWords <= 6)
- {
- info->internalIntCount = 0;
- }
- else if (!compiler->info.compInitMem)
- {
- // No need to initialize allocated stack space.
- if (sizeVal < compiler->eeGetPageSize())
- {
-#ifdef _TARGET_X86_
- info->internalIntCount = 1; // x86 needs a register here to avoid generating "sub" on ESP.
-#else // !_TARGET_X86_
- info->internalIntCount = 0;
-#endif // !_TARGET_X86_
- }
- else
- {
- // We need two registers: regCnt and RegTmp
- info->internalIntCount = 2;
- }
- }
- else
- {
- // >6 and need to zero initialize allocated stack space.
- info->internalIntCount = 0;
- }
- }
- }
- else
- {
- if (!compiler->info.compInitMem)
- {
- info->internalIntCount = 2;
- }
- else
- {
- info->internalIntCount = 0;
- }
- }
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitLogicalOp: Set the NodeInfo for GT_AND/GT_OR/GT_XOR,
-// as well as GT_ADD/GT_SUB.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitLogicalOp(GenTree* tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- LinearScan* l = m_lsra;
-
- // We're not marking a constant hanging on the left of the add
- // as containable so we assign it to a register having CQ impact.
- // TODO-XArch-CQ: Detect this case and support both generating a single instruction
- // for GT_ADD(Constant, SomeTree)
- info->srcCount = 2;
- info->dstCount = 1;
-
- GenTree* op1 = tree->gtGetOp1();
- GenTree* op2 = tree->gtGetOp2();
-
- // We can directly encode the second operand if it is either a containable constant or a memory-op.
- // In case of memory-op, we can encode it directly provided its type matches with 'tree' type.
- // This is because during codegen, type of 'tree' is used to determine emit Type size. If the types
- // do not match, they get normalized (i.e. sign/zero extended) on load into a register.
- bool directlyEncodable = false;
- bool binOpInRMW = false;
- GenTreePtr operand = nullptr;
-
- if (IsContainableImmed(tree, op2))
- {
- directlyEncodable = true;
- operand = op2;
- }
- else
- {
- binOpInRMW = IsBinOpInRMWStoreInd(tree);
- if (!binOpInRMW)
- {
- if (op2->isMemoryOp() && tree->TypeGet() == op2->TypeGet())
- {
- directlyEncodable = true;
- operand = op2;
- }
- else if (tree->OperIsCommutative())
- {
- if (IsContainableImmed(tree, op1) ||
- (op1->isMemoryOp() && tree->TypeGet() == op1->TypeGet() && IsSafeToContainMem(tree, op1)))
- {
- // If it is safe, we can reverse the order of operands of commutative operations for efficient
- // codegen
- directlyEncodable = true;
- operand = op1;
- }
- }
- }
- }
-
- if (directlyEncodable)
- {
- assert(operand != nullptr);
- MakeSrcContained(tree, operand);
- }
- else if (!binOpInRMW)
- {
- // If this binary op neither has contained operands, nor is a
- // Read-Modify-Write (RMW) operation, we can mark its operands
- // as reg optional.
- SetRegOptionalForBinOp(tree);
- }
-
- // Codegen of this tree node sets ZF and SF flags.
- tree->gtFlags |= GTF_ZSF_SET;
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitModDiv: Set the NodeInfo for GT_MOD/GT_DIV/GT_UMOD/GT_UDIV.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitModDiv(GenTree* tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- LinearScan* l = m_lsra;
-
- GenTree* op1 = tree->gtGetOp1();
- GenTree* op2 = tree->gtGetOp2();
-
- info->srcCount = 2;
- info->dstCount = 1;
-
- switch (tree->OperGet())
- {
- case GT_MOD:
- case GT_DIV:
- if (varTypeIsFloating(tree->TypeGet()))
- {
- // No implicit conversions at this stage as the expectation is that
- // everything is made explicit by adding casts.
- assert(op1->TypeGet() == op2->TypeGet());
-
- if (op2->isMemoryOp() || op2->IsCnsNonZeroFltOrDbl())
- {
- MakeSrcContained(tree, op2);
- }
- else
- {
- // If there are no containable operands, we can make an operand reg optional.
- // SSE2 allows only op2 to be a memory-op.
- SetRegOptional(op2);
- }
-
- return;
- }
- break;
-
- default:
- break;
- }
-
- // Amd64 Div/Idiv instruction:
- // Dividend in RAX:RDX and computes
- // Quotient in RAX, Remainder in RDX
-
- if (tree->OperGet() == GT_MOD || tree->OperGet() == GT_UMOD)
- {
- // We are interested in just the remainder.
- // RAX is used as a trashable register during computation of remainder.
- info->setDstCandidates(l, RBM_RDX);
- }
- else
- {
- // We are interested in just the quotient.
- // RDX gets used as trashable register during computation of quotient
- info->setDstCandidates(l, RBM_RAX);
- }
-
- bool op2CanBeRegOptional = true;
-#ifdef _TARGET_X86_
- if (op1->OperGet() == GT_LONG)
- {
- // To avoid reg move would like to have op1's low part in RAX and high part in RDX.
- GenTree* loVal = op1->gtGetOp1();
- GenTree* hiVal = op1->gtGetOp2();
-
- // Src count is actually 3, so increment.
- assert(op2->IsCnsIntOrI());
- assert(tree->OperGet() == GT_UMOD);
- info->srcCount++;
- op2CanBeRegOptional = false;
-
- // This situation also requires an internal register.
- info->internalIntCount = 1;
- info->setInternalCandidates(l, l->allRegs(TYP_INT));
-
- loVal->gtLsraInfo.setSrcCandidates(l, RBM_EAX);
- hiVal->gtLsraInfo.setSrcCandidates(l, RBM_EDX);
- }
- else
-#endif
- {
- // If possible would like to have op1 in RAX to avoid a register move
- op1->gtLsraInfo.setSrcCandidates(l, RBM_RAX);
- }
-
- // divisor can be an r/m, but the memory indirection must be of the same size as the divide
- if (op2->isMemoryOp() && (op2->TypeGet() == tree->TypeGet()))
- {
- MakeSrcContained(tree, op2);
- }
- else if (op2CanBeRegOptional)
- {
- op2->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~(RBM_RAX | RBM_RDX));
-
- // If there are no containable operands, we can make an operand reg optional.
- // Div instruction allows only op2 to be a memory op.
- SetRegOptional(op2);
- }
-}
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitIntrinsic: Set the NodeInfo for a GT_INTRINSIC.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitIntrinsic(GenTree* tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- LinearScan* l = m_lsra;
-
- // Both operand and its result must be of floating point type.
- GenTree* op1 = tree->gtGetOp1();
- assert(varTypeIsFloating(op1));
- assert(op1->TypeGet() == tree->TypeGet());
-
- info->srcCount = 1;
- info->dstCount = 1;
-
- switch (tree->gtIntrinsic.gtIntrinsicId)
- {
- case CORINFO_INTRINSIC_Sqrt:
- if (op1->isMemoryOp() || op1->IsCnsNonZeroFltOrDbl())
- {
- MakeSrcContained(tree, op1);
- }
- else
- {
- // Mark the operand as reg optional since codegen can still
- // generate code if op1 is on stack.
- SetRegOptional(op1);
- }
- break;
-
- case CORINFO_INTRINSIC_Abs:
- // Abs(float x) = x & 0x7fffffff
- // Abs(double x) = x & 0x7ffffff ffffffff
-
- // In case of Abs we need an internal register to hold mask.
-
- // TODO-XArch-CQ: avoid using an internal register for the mask.
- // Andps or andpd both will operate on 128-bit operands.
- // The data section constant to hold the mask is a 64-bit size.
- // Therefore, we need both the operand and mask to be in
- // xmm register. When we add support in emitter to emit 128-bit
- // data constants and instructions that operate on 128-bit
- // memory operands we can avoid the need for an internal register.
- if (tree->gtIntrinsic.gtIntrinsicId == CORINFO_INTRINSIC_Abs)
- {
- info->internalFloatCount = 1;
- info->setInternalCandidates(l, l->internalFloatRegCandidates());
- }
- break;
-
-#ifdef _TARGET_X86_
- case CORINFO_INTRINSIC_Cos:
- case CORINFO_INTRINSIC_Sin:
- case CORINFO_INTRINSIC_Round:
- NYI_X86("Math intrinsics Cos, Sin and Round");
- break;
-#endif // _TARGET_X86_
-
- default:
- // Right now only Sqrt/Abs are treated as math intrinsics
- noway_assert(!"Unsupported math intrinsic");
- unreached();
- break;
- }
-}
-
-#ifdef FEATURE_SIMD
-//------------------------------------------------------------------------
-// TreeNodeInfoInitSIMD: Set the NodeInfo for a GT_SIMD tree.
-//
-// Arguments:
-// tree - The GT_SIMD node of interest
-//
-// Return Value:
-// None.
-
-void Lowering::TreeNodeInfoInitSIMD(GenTree* tree)
-{
- GenTreeSIMD* simdTree = tree->AsSIMD();
- TreeNodeInfo* info = &(tree->gtLsraInfo);
- LinearScan* lsra = m_lsra;
- info->dstCount = 1;
- switch (simdTree->gtSIMDIntrinsicID)
- {
- GenTree* op1;
- GenTree* op2;
-
- case SIMDIntrinsicInit:
- {
- info->srcCount = 1;
- op1 = tree->gtOp.gtOp1;
-
- // This sets all fields of a SIMD struct to the given value.
- // Mark op1 as contained if it is either zero or int constant of all 1's,
- // or a float constant with 16 or 32 byte simdType (AVX case)
- //
- // Should never see small int base type vectors except for zero initialization.
- assert(!varTypeIsSmallInt(simdTree->gtSIMDBaseType) || op1->IsIntegralConst(0));
-
- if (op1->IsFPZero() || op1->IsIntegralConst(0) ||
- (varTypeIsIntegral(simdTree->gtSIMDBaseType) && op1->IsIntegralConst(-1)))
- {
- MakeSrcContained(tree, tree->gtOp.gtOp1);
- info->srcCount = 0;
- }
- else if ((comp->getSIMDInstructionSet() == InstructionSet_AVX) &&
- ((simdTree->gtSIMDSize == 16) || (simdTree->gtSIMDSize == 32)))
- {
- // Either op1 is a float or dbl constant or an addr
- if (op1->IsCnsFltOrDbl() || op1->OperIsLocalAddr())
- {
- MakeSrcContained(tree, tree->gtOp.gtOp1);
- info->srcCount = 0;
- }
- }
- }
- break;
-
- case SIMDIntrinsicInitN:
- {
- info->srcCount = (short)(simdTree->gtSIMDSize / genTypeSize(simdTree->gtSIMDBaseType));
-
- // Need an internal register to stitch together all the values into a single vector in a SIMD reg.
- info->internalFloatCount = 1;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- }
- break;
-
- case SIMDIntrinsicInitArray:
- // We have an array and an index, which may be contained.
- info->srcCount = 2;
- CheckImmedAndMakeContained(tree, tree->gtGetOp2());
- break;
-
- case SIMDIntrinsicDiv:
- // SSE2 has no instruction support for division on integer vectors
- noway_assert(varTypeIsFloating(simdTree->gtSIMDBaseType));
- info->srcCount = 2;
- break;
-
- case SIMDIntrinsicAbs:
- // This gets implemented as bitwise-And operation with a mask
- // and hence should never see it here.
- unreached();
- break;
-
- case SIMDIntrinsicSqrt:
- // SSE2 has no instruction support for sqrt on integer vectors.
- noway_assert(varTypeIsFloating(simdTree->gtSIMDBaseType));
- info->srcCount = 1;
- break;
-
- case SIMDIntrinsicAdd:
- case SIMDIntrinsicSub:
- case SIMDIntrinsicMul:
- case SIMDIntrinsicBitwiseAnd:
- case SIMDIntrinsicBitwiseAndNot:
- case SIMDIntrinsicBitwiseOr:
- case SIMDIntrinsicBitwiseXor:
- case SIMDIntrinsicMin:
- case SIMDIntrinsicMax:
- info->srcCount = 2;
-
- // SSE2 32-bit integer multiplication requires two temp regs
- if (simdTree->gtSIMDIntrinsicID == SIMDIntrinsicMul && simdTree->gtSIMDBaseType == TYP_INT &&
- comp->getSIMDInstructionSet() == InstructionSet_SSE2)
- {
- info->internalFloatCount = 2;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- }
- break;
-
- case SIMDIntrinsicEqual:
- info->srcCount = 2;
- break;
-
- // SSE2 doesn't support < and <= directly on int vectors.
- // Instead we need to use > and >= with swapped operands.
- case SIMDIntrinsicLessThan:
- case SIMDIntrinsicLessThanOrEqual:
- info->srcCount = 2;
- noway_assert(!varTypeIsIntegral(simdTree->gtSIMDBaseType));
- break;
-
- // SIMDIntrinsicEqual is supported only on non-floating point base type vectors.
- // SSE2 cmpps/pd doesn't support > and >= directly on float/double vectors.
- // Instead we need to use < and <= with swapped operands.
- case SIMDIntrinsicGreaterThan:
- noway_assert(!varTypeIsFloating(simdTree->gtSIMDBaseType));
- info->srcCount = 2;
- break;
-
- case SIMDIntrinsicOpEquality:
- case SIMDIntrinsicOpInEquality:
- info->srcCount = 2;
-
- // On SSE4/AVX, we can generate optimal code for (in)equality
- // against zero using ptest. We can safely do the this optimization
- // for integral vectors but not for floating-point for the reason
- // that we have +0.0 and -0.0 and +0.0 == -0.0
- op2 = tree->gtGetOp2();
- if ((comp->getSIMDInstructionSet() >= InstructionSet_SSE3_4) && op2->IsIntegralConstVector(0))
- {
- MakeSrcContained(tree, op2);
- }
- else
- {
-
- // Need one SIMD register as scratch.
- // See genSIMDIntrinsicRelOp() for details on code sequence generated and
- // the need for one scratch register.
- //
- // Note these intrinsics produce a BOOL result, hence internal float
- // registers reserved are guaranteed to be different from target
- // integer register without explicitly specifying.
- info->internalFloatCount = 1;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- }
- break;
-
- case SIMDIntrinsicDotProduct:
- // Float/Double vectors:
- // For SSE, or AVX with 32-byte vectors, we also need an internal register
- // as scratch. Further we need the targetReg and internal reg to be distinct
- // registers. Note that if this is a TYP_SIMD16 or smaller on AVX, then we
- // don't need a tmpReg.
- //
- // 32-byte integer vector on SSE4/AVX:
- // will take advantage of phaddd, which operates only on 128-bit xmm reg.
- // This will need 1 (in case of SSE4) or 2 (in case of AVX) internal
- // registers since targetReg is an int type register.
- //
- // See genSIMDIntrinsicDotProduct() for details on code sequence generated
- // and the need for scratch registers.
- if (varTypeIsFloating(simdTree->gtSIMDBaseType))
- {
- if ((comp->getSIMDInstructionSet() == InstructionSet_SSE2) ||
- (simdTree->gtOp.gtOp1->TypeGet() == TYP_SIMD32))
- {
- info->internalFloatCount = 1;
- info->isInternalRegDelayFree = true;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- }
- // else don't need scratch reg(s).
- }
- else
- {
- assert(simdTree->gtSIMDBaseType == TYP_INT && comp->getSIMDInstructionSet() >= InstructionSet_SSE3_4);
-
- // No need to set isInternalRegDelayFree since targetReg is a
- // an int type reg and guaranteed to be different from xmm/ymm
- // regs.
- info->internalFloatCount = comp->canUseAVX() ? 2 : 1;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- }
- info->srcCount = 2;
- break;
-
- case SIMDIntrinsicGetItem:
- {
- // This implements get_Item method. The sources are:
- // - the source SIMD struct
- // - index (which element to get)
- // The result is baseType of SIMD struct.
- info->srcCount = 2;
- op1 = tree->gtOp.gtOp1;
- op2 = tree->gtOp.gtOp2;
-
- // If the index is a constant, mark it as contained.
- if (CheckImmedAndMakeContained(tree, op2))
- {
- info->srcCount = 1;
- }
-
- if (op1->isMemoryOp())
- {
- MakeSrcContained(tree, op1);
-
- // Although GT_IND of TYP_SIMD12 reserves an internal float
- // register for reading 4 and 8 bytes from memory and
- // assembling them into target XMM reg, it is not required
- // in this case.
- op1->gtLsraInfo.internalIntCount = 0;
- op1->gtLsraInfo.internalFloatCount = 0;
- }
- else
- {
- // If the index is not a constant, we will use the SIMD temp location to store the vector.
- // Otherwise, if the baseType is floating point, the targetReg will be a xmm reg and we
- // can use that in the process of extracting the element.
- //
- // If the index is a constant and base type is a small int we can use pextrw, but on AVX
- // we will need a temp if are indexing into the upper half of the AVX register.
- // In all other cases with constant index, we need a temp xmm register to extract the
- // element if index is other than zero.
-
- if (!op2->IsCnsIntOrI())
- {
- (void)comp->getSIMDInitTempVarNum();
- }
- else if (!varTypeIsFloating(simdTree->gtSIMDBaseType))
- {
- bool needFloatTemp;
- if (varTypeIsSmallInt(simdTree->gtSIMDBaseType) &&
- (comp->getSIMDInstructionSet() == InstructionSet_AVX))
- {
- int byteShiftCnt = (int)op2->AsIntCon()->gtIconVal * genTypeSize(simdTree->gtSIMDBaseType);
- needFloatTemp = (byteShiftCnt >= 16);
- }
- else
- {
- needFloatTemp = !op2->IsIntegralConst(0);
- }
-
- if (needFloatTemp)
- {
- info->internalFloatCount = 1;
- info->setInternalCandidates(lsra, lsra->allSIMDRegs());
- }
- }
- }
- }
- break;
-
- case SIMDIntrinsicSetX:
- case SIMDIntrinsicSetY:
- case SIMDIntrinsicSetZ:
- case SIMDIntrinsicSetW:
- info->srcCount = 2;
-
- // We need an internal integer register for SSE2 codegen
- if (comp->getSIMDInstructionSet() == InstructionSet_SSE2)
- {
- info->internalIntCount = 1;
- info->setInternalCandidates(lsra, lsra->allRegs(TYP_INT));
- }
-
- break;
-
- case SIMDIntrinsicCast:
- info->srcCount = 1;
- break;
-
- case SIMDIntrinsicShuffleSSE2:
- info->srcCount = 2;
- // Second operand is an integer constant and marked as contained.
- op2 = tree->gtOp.gtOp2;
- noway_assert(op2->IsCnsIntOrI());
- MakeSrcContained(tree, op2);
- break;
-
- case SIMDIntrinsicGetX:
- case SIMDIntrinsicGetY:
- case SIMDIntrinsicGetZ:
- case SIMDIntrinsicGetW:
- case SIMDIntrinsicGetOne:
- case SIMDIntrinsicGetZero:
- case SIMDIntrinsicGetCount:
- case SIMDIntrinsicGetAllOnes:
- assert(!"Get intrinsics should not be seen during Lowering.");
- unreached();
-
- default:
- noway_assert(!"Unimplemented SIMD node type.");
- unreached();
- }
-}
-#endif // FEATURE_SIMD
-
-//------------------------------------------------------------------------
-// TreeNodeInfoInitCast: Set the NodeInfo for a GT_CAST.
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// None.
-//
-void Lowering::TreeNodeInfoInitCast(GenTree* tree)
-{
- TreeNodeInfo* info = &(tree->gtLsraInfo);
-
- // TODO-XArch-CQ: Int-To-Int conversions - castOp cannot be a memory op and must have an assigned register.
- // see CodeGen::genIntToIntCast()
-
- info->srcCount = 1;
- info->dstCount = 1;
-
- // Non-overflow casts to/from float/double are done using SSE2 instructions
- // and that allow the source operand to be either a reg or memop. Given the
- // fact that casts from small int to float/double are done as two-level casts,
- // the source operand is always guaranteed to be of size 4 or 8 bytes.
- var_types castToType = tree->CastToType();
- GenTreePtr castOp = tree->gtCast.CastOp();
- var_types castOpType = castOp->TypeGet();
- if (tree->gtFlags & GTF_UNSIGNED)
- {
- castOpType = genUnsignedType(castOpType);
- }
-
- if (!tree->gtOverflow() && (varTypeIsFloating(castToType) || varTypeIsFloating(castOpType)))
- {
-#ifdef DEBUG
- // If converting to float/double, the operand must be 4 or 8 byte in size.
- if (varTypeIsFloating(castToType))
- {
- unsigned opSize = genTypeSize(castOpType);
- assert(opSize == 4 || opSize == 8);
- }
-#endif // DEBUG
-
- // U8 -> R8 conversion requires that the operand be in a register.
- if (castOpType != TYP_ULONG)
- {
- if (castOp->isMemoryOp() || castOp->IsCnsNonZeroFltOrDbl())
- {
- MakeSrcContained(tree, castOp);
- }
- else
- {
- // Mark castOp as reg optional to indicate codegen
- // can still generate code if it is on stack.
- SetRegOptional(castOp);
- }
- }
- }
-
-#if !defined(_TARGET_64BIT_)
- if (varTypeIsLong(castOpType))
- {
- noway_assert(castOp->OperGet() == GT_LONG);
- info->srcCount = 2;
- }
-#endif // !defined(_TARGET_64BIT_)
-
- // some overflow checks need a temp reg:
- // - GT_CAST from INT64/UINT64 to UINT32
- if (tree->gtOverflow() && (castToType == TYP_UINT))
- {
- if (genTypeSize(castOpType) == 8)
- {
- // Here we don't need internal register to be different from targetReg,
- // rather require it to be different from operand's reg.
- info->internalIntCount = 1;
- }
- }
-}
-
-void Lowering::LowerGCWriteBarrier(GenTree* tree)
-{
- assert(tree->OperGet() == GT_STOREIND);
-
- GenTreeStoreInd* dst = tree->AsStoreInd();
- GenTreePtr addr = dst->Addr();
- GenTreePtr src = dst->Data();
-
- if (addr->OperGet() == GT_LEA)
- {
- // In the case where we are doing a helper assignment, if the dst
- // is an indir through an lea, we need to actually instantiate the
- // lea in a register
- GenTreeAddrMode* lea = addr->AsAddrMode();
-
- int leaSrcCount = 0;
- if (lea->HasBase())
- {
- leaSrcCount++;
- }
- if (lea->HasIndex())
- {
- leaSrcCount++;
- }
- lea->gtLsraInfo.srcCount = leaSrcCount;
- lea->gtLsraInfo.dstCount = 1;
- }
-
- bool useOptimizedWriteBarrierHelper = false; // By default, assume no optimized write barriers.
-
-#if NOGC_WRITE_BARRIERS
-
-#if defined(_TARGET_X86_)
-
- useOptimizedWriteBarrierHelper = true; // On x86, use the optimized write barriers by default.
-#ifdef DEBUG
- GCInfo::WriteBarrierForm wbf = comp->codeGen->gcInfo.gcIsWriteBarrierCandidate(tree, src);
- if (wbf == GCInfo::WBF_NoBarrier_CheckNotHeapInDebug) // This one is always a call to a C++ method.
- {
- useOptimizedWriteBarrierHelper = false;
- }
-#endif
-
- if (useOptimizedWriteBarrierHelper)
- {
- // Special write barrier:
- // op1 (addr) goes into REG_WRITE_BARRIER (rdx) and
- // op2 (src) goes into any int register.
- addr->gtLsraInfo.setSrcCandidates(m_lsra, RBM_WRITE_BARRIER);
- src->gtLsraInfo.setSrcCandidates(m_lsra, RBM_WRITE_BARRIER_SRC);
- }
-
-#else // !defined(_TARGET_X86_)
-#error "NOGC_WRITE_BARRIERS is not supported"
-#endif // !defined(_TARGET_X86_)
-
-#endif // NOGC_WRITE_BARRIERS
-
- if (!useOptimizedWriteBarrierHelper)
- {
- // For the standard JIT Helper calls:
- // op1 (addr) goes into REG_ARG_0 and
- // op2 (src) goes into REG_ARG_1
- addr->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_0);
- src->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_1);
- }
-
- // Both src and dst must reside in a register, which they should since we haven't set
- // either of them as contained.
- assert(addr->gtLsraInfo.dstCount == 1);
- assert(src->gtLsraInfo.dstCount == 1);
-}
-
-//-----------------------------------------------------------------------------------------
-// Specify register requirements for address expression of an indirection operation.
-//
-// Arguments:
-// indirTree - GT_IND or GT_STOREIND gentree node
-//
-void Lowering::SetIndirAddrOpCounts(GenTreePtr indirTree)
-{
- assert(indirTree->isIndir());
- // If this is the rhs of a block copy (i.e. non-enregisterable struct),
- // it has no register requirements.
- if (indirTree->TypeGet() == TYP_STRUCT)
- {
- return;
- }
-
- GenTreePtr addr = indirTree->gtGetOp1();
- TreeNodeInfo* info = &(indirTree->gtLsraInfo);
-
- GenTreePtr base = nullptr;
- GenTreePtr index = nullptr;
- unsigned mul, cns;
- bool rev;
-
-#ifdef FEATURE_SIMD
- // If indirTree is of TYP_SIMD12, don't mark addr as contained
- // so that it always get computed to a register. This would
- // mean codegen side logic doesn't need to handle all possible
- // addr expressions that could be contained.
- //
- // TODO-XArch-CQ: handle other addr mode expressions that could be marked
- // as contained.
- if (indirTree->TypeGet() == TYP_SIMD12)
- {
- // Vector3 is read/written as two reads/writes: 8 byte and 4 byte.
- // To assemble the vector properly we would need an additional
- // XMM register.
- info->internalFloatCount = 1;
-
- // In case of GT_IND we need an internal register different from targetReg and
- // both of the registers are used at the same time.
- if (indirTree->OperGet() == GT_IND)
- {
- info->isInternalRegDelayFree = true;
- }
-
- info->setInternalCandidates(m_lsra, m_lsra->allSIMDRegs());
-
- return;
- }
-#endif // FEATURE_SIMD
-
- if ((indirTree->gtFlags & GTF_IND_REQ_ADDR_IN_REG) != 0)
- {
- // The address of an indirection that requires its address in a reg.
- // Skip any further processing that might otherwise make it contained.
- }
- else if ((addr->OperGet() == GT_CLS_VAR_ADDR) || (addr->OperGet() == GT_LCL_VAR_ADDR))
- {
- // These nodes go into an addr mode:
- // - GT_CLS_VAR_ADDR turns into a constant.
- // - GT_LCL_VAR_ADDR is a stack addr mode.
-
- // make this contained, it turns into a constant that goes into an addr mode
- MakeSrcContained(indirTree, addr);
- }
- else if (addr->IsCnsIntOrI() && addr->AsIntConCommon()->FitsInAddrBase(comp))
- {
- // Amd64:
- // We can mark any pc-relative 32-bit addr as containable, except for a direct VSD call address.
- // (i.e. those VSD calls for which stub addr is known during JIT compilation time). In this case,
- // VM requires us to pass stub addr in REG_VIRTUAL_STUB_PARAM - see LowerVirtualStubCall(). For
- // that reason we cannot mark such an addr as contained. Note that this is not an issue for
- // indirect VSD calls since morphArgs() is explicitly materializing hidden param as a non-standard
- // argument.
- //
- // Workaround:
- // Note that LowerVirtualStubCall() sets addr->gtRegNum to REG_VIRTUAL_STUB_PARAM and Lowering::doPhase()
- // sets destination candidates on such nodes and resets addr->gtRegNum to REG_NA before calling
- // TreeNodeInfoInit(). Ideally we should set a flag on addr nodes that shouldn't be marked as contained
- // (in LowerVirtualStubCall()), but we don't have any GTF_* flags left for that purpose. As a workaround
- // an explicit check is made here.
- //
- // On x86, direct VSD is done via a relative branch, and in fact it MUST be contained.
- MakeSrcContained(indirTree, addr);
- }
- else if ((addr->OperGet() == GT_LEA) && IsSafeToContainMem(indirTree, addr))
- {
- MakeSrcContained(indirTree, addr);
- }
- else if (comp->codeGen->genCreateAddrMode(addr, -1, true, 0, &rev, &base, &index, &mul, &cns, true /*nogen*/) &&
- !AreSourcesPossiblyModifiedLocals(indirTree, base, index))
- {
- // An addressing mode will be constructed that may cause some
- // nodes to not need a register, and cause others' lifetimes to be extended
- // to the GT_IND or even its parent if it's an assignment
-
- assert(base != addr);
- m_lsra->clearOperandCounts(addr);
-
- const bool hasBase = base != nullptr;
- const bool hasIndex = index != nullptr;
- assert(hasBase || hasIndex); // At least one of a base or an index must be present.
-
- // If the addressing mode has both a base and an index, bump its source count by one. If it only has one or the
- // other, its source count is already correct (due to the source for the address itself).
- if (hasBase && hasIndex)
- {
- info->srcCount++;
- }
-
- // Traverse the computation below GT_IND to find the operands
- // for the addressing mode, marking the various constants and
- // intermediate results as not consuming/producing.
- // If the traversal were more complex, we might consider using
- // a traversal function, but the addressing mode is only made
- // up of simple arithmetic operators, and the code generator
- // only traverses one leg of each node.
-
- bool foundBase = !hasBase;
- bool foundIndex = !hasIndex;
- for (GenTree *child = addr, *nextChild = nullptr; child != nullptr && !child->OperIsLeaf(); child = nextChild)
- {
- nextChild = nullptr;
- GenTree* op1 = child->gtOp.gtOp1;
- GenTree* op2 = (child->OperIsBinary()) ? child->gtOp.gtOp2 : nullptr;
-
- if (op1 == base)
- {
- foundBase = true;
- }
- else if (op1 == index)
- {
- foundIndex = true;
- }
- else
- {
- m_lsra->clearOperandCounts(op1);
- if (!op1->OperIsLeaf())
- {
- nextChild = op1;
- }
- }
-
- if (op2 != nullptr)
- {
- if (op2 == base)
- {
- foundBase = true;
- }
- else if (op2 == index)
- {
- foundIndex = true;
- }
- else
- {
- m_lsra->clearOperandCounts(op2);
- if (!op2->OperIsLeaf())
- {
- assert(nextChild == nullptr);
- nextChild = op2;
- }
- }
- }
- }
- assert(foundBase && foundIndex);
- }
- else if (addr->gtOper == GT_ARR_ELEM)
- {
- // The GT_ARR_ELEM consumes all the indices and produces the offset.
- // The array object lives until the mem access.
- // We also consume the target register to which the address is
- // computed
-
- info->srcCount++;
- assert(addr->gtLsraInfo.srcCount >= 2);
- addr->gtLsraInfo.srcCount -= 1;
- }
-}
-
-void Lowering::TreeNodeInfoInitCmp(GenTreePtr tree)
-{
- assert(tree->OperIsCompare());
-
- TreeNodeInfo* info = &(tree->gtLsraInfo);
-
- info->srcCount = 2;
- info->dstCount = 1;
-
-#ifdef _TARGET_X86_
- // If the compare is used by a jump, we just need to set the condition codes. If not, then we need
- // to store the result into the low byte of a register, which requires the dst be a byteable register.
- // We always set the dst candidates, though, because if this is compare is consumed by a jump, they
- // won't be used. We might be able to use GTF_RELOP_JMP_USED to determine this case, but it's not clear
- // that flag is maintained until this location (especially for decomposed long compares).
- info->setDstCandidates(m_lsra, RBM_BYTE_REGS);
-#endif // _TARGET_X86_
-
- GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtOp.gtOp2;
- var_types op1Type = op1->TypeGet();
- var_types op2Type = op2->TypeGet();
-
-#if !defined(_TARGET_64BIT_)
- // Long compares will consume GT_LONG nodes, each of which produces two results.
- // Thus for each long operand there will be an additional source.
- // TODO-X86-CQ: Mark hiOp2 and loOp2 as contained if it is a constant or a memory op.
- if (varTypeIsLong(op1Type))
- {
- info->srcCount++;
- }
- if (varTypeIsLong(op2Type))
- {
- info->srcCount++;
- }
-#endif // !defined(_TARGET_64BIT_)
-
- // If either of op1 or op2 is floating point values, then we need to use
- // ucomiss or ucomisd to compare, both of which support the following form:
- // ucomis[s|d] xmm, xmm/mem
- // That is only the second operand can be a memory op.
- //
- // Second operand is a memory Op: Note that depending on comparison operator,
- // the operands of ucomis[s|d] need to be reversed. Therefore, either op1 or
- // op2 can be a memory op depending on the comparison operator.
- if (varTypeIsFloating(op1Type))
- {
- // The type of the operands has to be the same and no implicit conversions at this stage.
- assert(op1Type == op2Type);
-
- bool reverseOps;
- if ((tree->gtFlags & GTF_RELOP_NAN_UN) != 0)
- {
- // Unordered comparison case
- reverseOps = (tree->gtOper == GT_GT || tree->gtOper == GT_GE);
- }
- else
- {
- reverseOps = (tree->gtOper == GT_LT || tree->gtOper == GT_LE);
- }
-
- GenTreePtr otherOp;
- if (reverseOps)
- {
- otherOp = op1;
- }
- else
- {
- otherOp = op2;
- }
-
- assert(otherOp != nullptr);
- if (otherOp->IsCnsNonZeroFltOrDbl())
- {
- MakeSrcContained(tree, otherOp);
- }
- else if (otherOp->isMemoryOp() && ((otherOp == op2) || IsSafeToContainMem(tree, otherOp)))
- {
- MakeSrcContained(tree, otherOp);
- }
- else
- {
- // SSE2 allows only otherOp to be a memory-op. Since otherOp is not
- // contained, we can mark it reg-optional.
- SetRegOptional(otherOp);
- }
-
- return;
- }
-
- // TODO-XArch-CQ: factor out cmp optimization in 'genCondSetFlags' to be used here
- // or in other backend.
-
- bool hasShortCast = false;
- if (CheckImmedAndMakeContained(tree, op2))
- {
- // If the types are the same, or if the constant is of the correct size,
- // we can treat the isMemoryOp as contained.
- bool op1CanBeContained = (genTypeSize(op1Type) == genTypeSize(op2Type));
-
- // Do we have a short compare against a constant in op2
- //
- if (varTypeIsSmall(op1Type))
- {
- GenTreeIntCon* con = op2->AsIntCon();
- ssize_t ival = con->gtIconVal;
-
- bool isEqualityCompare = (tree->gtOper == GT_EQ || tree->gtOper == GT_NE);
- bool useTest = isEqualityCompare && (ival == 0);
-
- if (!useTest)
- {
- ssize_t lo = 0; // minimum imm value allowed for cmp reg,imm
- ssize_t hi = 0; // maximum imm value allowed for cmp reg,imm
- bool isUnsigned = false;
-
- switch (op1Type)
- {
- case TYP_BOOL:
- op1Type = TYP_UBYTE;
- __fallthrough;
- case TYP_UBYTE:
- lo = 0;
- hi = 0x7f;
- isUnsigned = true;
- break;
- case TYP_BYTE:
- lo = -0x80;
- hi = 0x7f;
- break;
- case TYP_CHAR:
- lo = 0;
- hi = 0x7fff;
- isUnsigned = true;
- break;
- case TYP_SHORT:
- lo = -0x8000;
- hi = 0x7fff;
- break;
- default:
- unreached();
- }
-
- if ((ival >= lo) && (ival <= hi))
- {
- // We can perform a small compare with the immediate 'ival'
- tree->gtFlags |= GTF_RELOP_SMALL;
- if (isUnsigned && !isEqualityCompare)
- {
- tree->gtFlags |= GTF_UNSIGNED;
- }
- // We can treat the isMemoryOp as "contained"
- op1CanBeContained = true;
- }
- }
- }
-
- if (op1CanBeContained)
- {
- if (op1->isMemoryOp())
- {
- MakeSrcContained(tree, op1);
- }
- else
- {
- bool op1IsMadeContained = false;
-
- // When op1 is a GT_AND we can often generate a single "test" instruction
- // instead of two instructions (an "and" instruction followed by a "cmp"/"test").
- //
- // This instruction can only be used for equality or inequality comparisons.
- // and we must have a compare against zero.
- //
- // If we have a postive test for a single bit we can reverse the condition and
- // make the compare be against zero.
- //
- // Example:
- // GT_EQ GT_NE
- // / \ / \
- // GT_AND GT_CNS (0x100) ==>> GT_AND GT_CNS (0)
- // / \ / \
- // andOp1 GT_CNS (0x100) andOp1 GT_CNS (0x100)
- //
- // We will mark the GT_AND node as contained if the tree is an equality compare with zero.
- // Additionally, when we do this we also allow for a contained memory operand for "andOp1".
- //
- bool isEqualityCompare = (tree->gtOper == GT_EQ || tree->gtOper == GT_NE);
-
- if (isEqualityCompare && (op1->OperGet() == GT_AND))
- {
- GenTreePtr andOp2 = op1->gtOp.gtOp2;
- if (IsContainableImmed(op1, andOp2))
- {
- ssize_t andOp2CnsVal = andOp2->AsIntConCommon()->IconValue();
- ssize_t relOp2CnsVal = op2->AsIntConCommon()->IconValue();
-
- if ((relOp2CnsVal == andOp2CnsVal) && isPow2(andOp2CnsVal))
- {
- // We have a single bit test, so now we can change the
- // tree into the alternative form,
- // so that we can generate a test instruction.
-
- // Reverse the equality comparison
- tree->SetOperRaw((tree->gtOper == GT_EQ) ? GT_NE : GT_EQ);
-
- // Change the relOp2CnsVal to zero
- relOp2CnsVal = 0;
- op2->AsIntConCommon()->SetIconValue(0);
- }
-
- // Now do we have a equality compare with zero?
- //
- if (relOp2CnsVal == 0)
- {
- // Note that child nodes must be made contained before parent nodes
-
- // Check for a memory operand for op1 with the test instruction
- //
- GenTreePtr andOp1 = op1->gtOp.gtOp1;
- if (andOp1->isMemoryOp())
- {
- // If the type of value memoryOp (andOp1) is not the same as the type of constant
- // (andOp2) check to see whether it is safe to mark AndOp1 as contained. For e.g. in
- // the following case it is not safe to mark andOp1 as contained
- // AndOp1 = signed byte and andOp2 is an int constant of value 512.
- //
- // If it is safe, we update the type and value of andOp2 to match with andOp1.
- bool containable = (andOp1->TypeGet() == op1->TypeGet());
- if (!containable)
- {
- ssize_t newIconVal = 0;
-
- switch (andOp1->TypeGet())
- {
- default:
- break;
- case TYP_BYTE:
- newIconVal = (signed char)andOp2CnsVal;
- containable = FitsIn<signed char>(andOp2CnsVal);
- break;
- case TYP_BOOL:
- case TYP_UBYTE:
- newIconVal = andOp2CnsVal & 0xFF;
- containable = true;
- break;
- case TYP_SHORT:
- newIconVal = (signed short)andOp2CnsVal;
- containable = FitsIn<signed short>(andOp2CnsVal);
- break;
- case TYP_CHAR:
- newIconVal = andOp2CnsVal & 0xFFFF;
- containable = true;
- break;
- case TYP_INT:
- newIconVal = (INT32)andOp2CnsVal;
- containable = FitsIn<INT32>(andOp2CnsVal);
- break;
- case TYP_UINT:
- newIconVal = andOp2CnsVal & 0xFFFFFFFF;
- containable = true;
- break;
-
-#ifdef _TARGET_64BIT_
- case TYP_LONG:
- newIconVal = (INT64)andOp2CnsVal;
- containable = true;
- break;
- case TYP_ULONG:
- newIconVal = (UINT64)andOp2CnsVal;
- containable = true;
- break;
-#endif //_TARGET_64BIT_
- }
-
- if (containable)
- {
- andOp2->gtType = andOp1->TypeGet();
- andOp2->AsIntConCommon()->SetIconValue(newIconVal);
- }
- }
-
- // Mark the 'andOp1' memory operand as contained
- // Note that for equality comparisons we don't need
- // to deal with any signed or unsigned issues.
- if (containable)
- {
- MakeSrcContained(op1, andOp1);
- }
- }
- // Mark the 'op1' (the GT_AND) operand as contained
- MakeSrcContained(tree, op1);
- op1IsMadeContained = true;
-
- // During Codegen we will now generate "test andOp1, andOp2CnsVal"
- }
- }
- }
- else if (op1->OperGet() == GT_CAST)
- {
- // If the op1 is a cast operation, and cast type is one byte sized unsigned type,
- // we can directly use the number in register, instead of doing an extra cast step.
- var_types dstType = op1->CastToType();
- bool isUnsignedDst = varTypeIsUnsigned(dstType);
- emitAttr castSize = EA_ATTR(genTypeSize(dstType));
- GenTreePtr castOp1 = op1->gtOp.gtOp1;
- genTreeOps castOp1Oper = castOp1->OperGet();
- bool safeOper = false;
-
- // It is not always safe to change the gtType of 'castOp1' to TYP_UBYTE.
- // For example when 'castOp1Oper' is a GT_RSZ or GT_RSH then we are shifting
- // bits from the left into the lower bits. If we change the type to a TYP_UBYTE
- // we will instead generate a byte sized shift operation: shr al, 24
- // For the following ALU operations is it safe to change the gtType to the
- // smaller type:
- //
- if ((castOp1Oper == GT_CNS_INT) || (castOp1Oper == GT_CALL) || // the return value from a Call
- (castOp1Oper == GT_LCL_VAR) || castOp1->OperIsLogical() || // GT_AND, GT_OR, GT_XOR
- castOp1->isMemoryOp()) // isIndir() || isLclField();
- {
- safeOper = true;
- }
-
- if ((castSize == EA_1BYTE) && isUnsignedDst && // Unsigned cast to TYP_UBYTE
- safeOper && // Must be a safe operation
- !op1->gtOverflow()) // Must not be an overflow checking cast
- {
- // Currently all of the Oper accepted as 'safeOper' are
- // non-overflow checking operations. If we were to add
- // an overflow checking operation then this assert needs
- // to be moved above to guard entry to this block.
- //
- assert(!castOp1->gtOverflowEx()); // Must not be an overflow checking operation
-
- // TODO-Cleanup: we're within "if (CheckImmedAndMakeContained(tree, op2))", so isn't
- // the following condition always true?
- if (op2->isContainedIntOrIImmed())
- {
- ssize_t val = (ssize_t)op2->AsIntConCommon()->IconValue();
- if (val >= 0 && val <= 255)
- {
- GenTreePtr removeTreeNode = op1;
- tree->gtOp.gtOp1 = castOp1;
- op1 = castOp1;
- castOp1->gtType = TYP_UBYTE;
-
- // trim down the value if castOp1 is an int constant since its type changed to UBYTE.
- if (castOp1Oper == GT_CNS_INT)
- {
- castOp1->gtIntCon.gtIconVal = (UINT8)castOp1->gtIntCon.gtIconVal;
- }
-
- op2->gtType = TYP_UBYTE;
- tree->gtFlags |= GTF_UNSIGNED;
-
- // right now the op1's type is the same as op2's type.
- // if op1 is MemoryOp, we should make the op1 as contained node.
- if (castOp1->isMemoryOp())
- {
- MakeSrcContained(tree, op1);
- op1IsMadeContained = true;
- }
-
- BlockRange().Remove(removeTreeNode);
-
- // We've changed the type on op1 to TYP_UBYTE, but we already processed that node.
- // We need to go back and mark it byteable.
- // TODO-Cleanup: it might be better to move this out of the TreeNodeInfoInit pass to
- // the earlier "lower" pass, in which case the byteable check would just fall out.
- // But that is quite complex!
- TreeNodeInfoInitCheckByteable(op1);
-
-#ifdef DEBUG
- if (comp->verbose)
- {
- printf("TreeNodeInfoInitCmp: Removing a GT_CAST to TYP_UBYTE and changing "
- "castOp1->gtType to TYP_UBYTE\n");
- comp->gtDispTreeRange(BlockRange(), tree);
- }
-#endif
- }
- }
- }
- }
-
- // If not made contained, op1 can be marked as reg-optional.
- if (!op1IsMadeContained)
- {
- SetRegOptional(op1);
-
- // If op1 codegen sets ZF and SF flags and ==/!= against
- // zero, we don't need to generate test instruction,
- // provided we don't have another GenTree node between op1
- // and tree that could potentially modify flags.
- //
- // TODO-CQ: right now the below peep is inexpensive and
- // gets the benefit in most of cases because in majority
- // of cases op1, op2 and tree would be in that order in
- // execution. In general we should be able to check that all
- // the nodes that come after op1 in execution order do not
- // modify the flags so that it is safe to avoid generating a
- // test instruction. Such a check requires that on each
- // GenTree node we need to set the info whether its codegen
- // will modify flags.
- //
- // TODO-CQ: We can optimize compare against zero in the
- // following cases by generating the branch as indicated
- // against each case.
- // 1) unsigned compare
- // < 0 - always FALSE
- // <= 0 - ZF=1 and jne
- // > 0 - ZF=0 and je
- // >= 0 - always TRUE
- //
- // 2) signed compare
- // < 0 - SF=1 and js
- // >= 0 - SF=0 and jns
- if (isEqualityCompare && op1->gtSetZSFlags() && op2->IsIntegralConst(0) && (op1->gtNext == op2) &&
- (op2->gtNext == tree))
- {
- // Require codegen of op1 to set the flags.
- assert(!op1->gtSetFlags());
- op1->gtFlags |= GTF_SET_FLAGS;
- }
- }
- }
- }
- }
- else if (op1Type == op2Type)
- {
- if (op2->isMemoryOp())
- {
- MakeSrcContained(tree, op2);
- }
- else if (op1->isMemoryOp() && IsSafeToContainMem(tree, op1))
- {
- MakeSrcContained(tree, op1);
- }
- else if (op1->IsCnsIntOrI())
- {
- // TODO-CQ: We should be able to support swapping op1 and op2 to generate cmp reg, imm,
- // but there is currently an assert in CodeGen::genCompareInt().
- // https://github.com/dotnet/coreclr/issues/7270
- SetRegOptional(op2);
- }
- else
- {
- // One of op1 or op2 could be marked as reg optional
- // to indicate that codegen can still generate code
- // if one of them is on stack.
- SetRegOptional(PreferredRegOptionalOperand(tree));
- }
-
- if (varTypeIsSmall(op1Type) && varTypeIsUnsigned(op1Type))
- {
- // Mark the tree as doing unsigned comparison if
- // both the operands are small and unsigned types.
- // Otherwise we will end up performing a signed comparison
- // of two small unsigned values without zero extending them to
- // TYP_INT size and which is incorrect.
- tree->gtFlags |= GTF_UNSIGNED;
- }
- }
-}
-
/* Lower GT_CAST(srcType, DstType) nodes.
*
* Casts from small int type to float/double are transformed as follows:
@@ -4236,312 +950,6 @@ bool Lowering::IsRMWMemOpRootedAtStoreInd(GenTreePtr tree, GenTreePtr* outIndirC
return true;
}
-//--------------------------------------------------------------------------------------------
-// SetStoreIndOpCountsIfRMWMemOp checks to see if there is a RMW memory operation rooted at
-// GT_STOREIND node and if so will mark register requirements for nodes under storeInd so
-// that CodeGen will generate a single instruction of the form:
-//
-// binOp [addressing mode], reg
-//
-// Parameters
-// storeInd - GT_STOREIND node
-//
-// Return value
-// True, if RMW memory op tree pattern is recognized and op counts are set.
-// False otherwise.
-//
-bool Lowering::SetStoreIndOpCountsIfRMWMemOp(GenTreePtr storeInd)
-{
- assert(storeInd->OperGet() == GT_STOREIND);
-
- // SSE2 doesn't support RMW on float values
- assert(!varTypeIsFloating(storeInd));
-
- // Terminology:
- // indirDst = memory write of an addr mode (i.e. storeind destination)
- // indirSrc = value being written to memory (i.e. storeind source which could a binary/unary op)
- // indirCandidate = memory read i.e. a gtInd of an addr mode
- // indirOpSource = source operand used in binary/unary op (i.e. source operand of indirSrc node)
-
- GenTreePtr indirCandidate = nullptr;
- GenTreePtr indirOpSource = nullptr;
-
- if (!IsRMWMemOpRootedAtStoreInd(storeInd, &indirCandidate, &indirOpSource))
- {
- JITDUMP("Lower of StoreInd didn't mark the node as self contained for reason: %d\n",
- storeInd->AsStoreInd()->GetRMWStatus());
- DISPTREERANGE(BlockRange(), storeInd);
- return false;
- }
-
- GenTreePtr indirDst = storeInd->gtGetOp1();
- GenTreePtr indirSrc = storeInd->gtGetOp2();
- genTreeOps oper = indirSrc->OperGet();
-
- // At this point we have successfully detected a RMW memory op of one of the following forms
- // storeInd(indirDst, indirSrc(indirCandidate, indirOpSource)) OR
- // storeInd(indirDst, indirSrc(indirOpSource, indirCandidate) in case of commutative operations OR
- // storeInd(indirDst, indirSrc(indirCandidate) in case of unary operations
- //
- // Here indirSrc = one of the supported binary or unary operation for RMW of memory
- // indirCandidate = a GT_IND node
- // indirCandidateChild = operand of GT_IND indirCandidate
- //
- // The logic below essentially does the following
- // set storeInd src count to that of the dst count of indirOpSource
- // clear operand counts on indirSrc (i.e. marked as contained and storeInd will generate code for it)
- // clear operand counts on indirCandidate
- // clear operand counts on indirDst except when it is a GT_LCL_VAR or GT_CNS_INT that doesn't fit within addr
- // base
- // Increment src count of storeInd to account for the registers required to form indirDst addr mode
- // clear operand counts on indirCandidateChild
-
- TreeNodeInfo* info = &(storeInd->gtLsraInfo);
- info->dstCount = 0;
-
- if (GenTree::OperIsBinary(oper))
- {
- // On Xarch RMW operations require that the source memory-op be in a register.
- assert(!indirOpSource->isMemoryOp() || indirOpSource->gtLsraInfo.dstCount == 1);
- JITDUMP("Lower succesfully detected an assignment of the form: *addrMode BinOp= source\n");
- info->srcCount = indirOpSource->gtLsraInfo.dstCount;
- }
- else
- {
- assert(GenTree::OperIsUnary(oper));
- JITDUMP("Lower succesfully detected an assignment of the form: *addrMode = UnaryOp(*addrMode)\n");
- info->srcCount = 0;
- }
- DISPTREERANGE(BlockRange(), storeInd);
-
- m_lsra->clearOperandCounts(indirSrc);
- m_lsra->clearOperandCounts(indirCandidate);
-
- GenTreePtr indirCandidateChild = indirCandidate->gtGetOp1();
- if (indirCandidateChild->OperGet() == GT_LEA)
- {
- GenTreeAddrMode* addrMode = indirCandidateChild->AsAddrMode();
-
- if (addrMode->HasBase())
- {
- assert(addrMode->Base()->OperIsLeaf());
- m_lsra->clearOperandCounts(addrMode->Base());
- info->srcCount++;
- }
-
- if (addrMode->HasIndex())
- {
- assert(addrMode->Index()->OperIsLeaf());
- m_lsra->clearOperandCounts(addrMode->Index());
- info->srcCount++;
- }
-
- m_lsra->clearOperandCounts(indirDst);
- }
- else
- {
- assert(indirCandidateChild->OperGet() == GT_LCL_VAR || indirCandidateChild->OperGet() == GT_LCL_VAR_ADDR ||
- indirCandidateChild->OperGet() == GT_CLS_VAR_ADDR || indirCandidateChild->OperGet() == GT_CNS_INT);
-
- // If it is a GT_LCL_VAR, it still needs the reg to hold the address.
- // We would still need a reg for GT_CNS_INT if it doesn't fit within addressing mode base.
- // For GT_CLS_VAR_ADDR, we don't need a reg to hold the address, because field address value is known at jit
- // time. Also, we don't need a reg for GT_CLS_VAR_ADDR.
- if (indirCandidateChild->OperGet() == GT_LCL_VAR_ADDR || indirCandidateChild->OperGet() == GT_CLS_VAR_ADDR)
- {
- m_lsra->clearOperandCounts(indirDst);
- }
- else if (indirCandidateChild->IsCnsIntOrI() && indirCandidateChild->AsIntConCommon()->FitsInAddrBase(comp))
- {
- m_lsra->clearOperandCounts(indirDst);
- }
- else
- {
- // Need a reg and hence increment src count of storeind
- info->srcCount += indirCandidateChild->gtLsraInfo.dstCount;
- }
- }
- m_lsra->clearOperandCounts(indirCandidateChild);
-
-#ifdef _TARGET_X86_
- if (varTypeIsByte(storeInd))
- {
- // If storeInd is of TYP_BYTE, set indirOpSources to byteable registers.
- bool containedNode = indirOpSource->gtLsraInfo.dstCount == 0;
- if (!containedNode)
- {
- regMaskTP regMask = indirOpSource->gtLsraInfo.getSrcCandidates(m_lsra);
- assert(regMask != RBM_NONE);
- indirOpSource->gtLsraInfo.setSrcCandidates(m_lsra, regMask & ~RBM_NON_BYTE_REGS);
- }
- }
-#endif
-
- return true;
-}
-
-/**
- * Takes care of annotating the src and dst register
- * requirements for a GT_MUL treenode.
- */
-void Lowering::SetMulOpCounts(GenTreePtr tree)
-{
-#if defined(_TARGET_X86_)
- assert(tree->OperGet() == GT_MUL || tree->OperGet() == GT_MULHI || tree->OperGet() == GT_MUL_LONG);
-#else
- assert(tree->OperGet() == GT_MUL || tree->OperGet() == GT_MULHI);
-#endif
- TreeNodeInfo* info = &(tree->gtLsraInfo);
-
- info->srcCount = 2;
- info->dstCount = 1;
-
- GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtOp.gtOp2;
-
- // Case of float/double mul.
- if (varTypeIsFloating(tree->TypeGet()))
- {
- assert(tree->OperGet() == GT_MUL);
-
- if (op2->isMemoryOp() || op2->IsCnsNonZeroFltOrDbl())
- {
- MakeSrcContained(tree, op2);
- }
- else if (op1->IsCnsNonZeroFltOrDbl() || (op1->isMemoryOp() && IsSafeToContainMem(tree, op1)))
- {
- // Since GT_MUL is commutative, we will try to re-order operands if it is safe to
- // generate more efficient code sequence for the case of GT_MUL(op1=memOp, op2=non-memOp)
- MakeSrcContained(tree, op1);
- }
- else
- {
- // If there are no containable operands, we can make an operand reg optional.
- SetRegOptionalForBinOp(tree);
- }
- return;
- }
-
- bool isUnsignedMultiply = ((tree->gtFlags & GTF_UNSIGNED) != 0);
- bool requiresOverflowCheck = tree->gtOverflowEx();
- bool useLeaEncoding = false;
- GenTreePtr memOp = nullptr;
-
- bool hasImpliedFirstOperand = false;
- GenTreeIntConCommon* imm = nullptr;
- GenTreePtr other = nullptr;
-
-// There are three forms of x86 multiply:
-// one-op form: RDX:RAX = RAX * r/m
-// two-op form: reg *= r/m
-// three-op form: reg = r/m * imm
-
-// This special widening 32x32->64 MUL is not used on x64
-#if defined(_TARGET_X86_)
- if (tree->OperGet() != GT_MUL_LONG)
-#endif
- {
- assert((tree->gtFlags & GTF_MUL_64RSLT) == 0);
- }
-
- // Multiply should never be using small types
- assert(!varTypeIsSmall(tree->TypeGet()));
-
- // We do use the widening multiply to implement
- // the overflow checking for unsigned multiply
- //
- if (isUnsignedMultiply && requiresOverflowCheck)
- {
- // The only encoding provided is RDX:RAX = RAX * rm
- //
- // Here we set RAX as the only destination candidate
- // In LSRA we set the kill set for this operation to RBM_RAX|RBM_RDX
- //
- info->setDstCandidates(m_lsra, RBM_RAX);
- hasImpliedFirstOperand = true;
- }
- else if (tree->OperGet() == GT_MULHI)
- {
- // Have to use the encoding:RDX:RAX = RAX * rm. Since we only care about the
- // upper 32 bits of the result set the destination candidate to REG_RDX.
- info->setDstCandidates(m_lsra, RBM_RDX);
- hasImpliedFirstOperand = true;
- }
-#if defined(_TARGET_X86_)
- else if (tree->OperGet() == GT_MUL_LONG)
- {
- // have to use the encoding:RDX:RAX = RAX * rm
- info->setDstCandidates(m_lsra, RBM_RAX);
- hasImpliedFirstOperand = true;
- }
-#endif
- else if (IsContainableImmed(tree, op2) || IsContainableImmed(tree, op1))
- {
- if (IsContainableImmed(tree, op2))
- {
- imm = op2->AsIntConCommon();
- other = op1;
- }
- else
- {
- imm = op1->AsIntConCommon();
- other = op2;
- }
-
- // CQ: We want to rewrite this into a LEA
- ssize_t immVal = imm->AsIntConCommon()->IconValue();
- if (!requiresOverflowCheck && (immVal == 3 || immVal == 5 || immVal == 9))
- {
- useLeaEncoding = true;
- }
-
- MakeSrcContained(tree, imm); // The imm is always contained
- if (other->isMemoryOp())
- {
- memOp = other; // memOp may be contained below
- }
- }
-
- // We allow one operand to be a contained memory operand.
- // The memory op type must match with the 'tree' type.
- // This is because during codegen we use 'tree' type to derive EmitTypeSize.
- // E.g op1 type = byte, op2 type = byte but GT_MUL tree type is int.
- //
- if (memOp == nullptr && op2->isMemoryOp())
- {
- memOp = op2;
- }
-
- // To generate an LEA we need to force memOp into a register
- // so don't allow memOp to be 'contained'
- //
- if (!useLeaEncoding)
- {
- if ((memOp != nullptr) && (memOp->TypeGet() == tree->TypeGet()) && IsSafeToContainMem(tree, memOp))
- {
- MakeSrcContained(tree, memOp);
- }
- else if (imm != nullptr)
- {
- // Has a contained immediate operand.
- // Only 'other' operand can be marked as reg optional.
- assert(other != nullptr);
- SetRegOptional(other);
- }
- else if (hasImpliedFirstOperand)
- {
- // Only op2 can be marke as reg optional.
- SetRegOptional(op2);
- }
- else
- {
- // If there are no containable operands, we can make either of op1 or op2
- // as reg optional.
- SetRegOptionalForBinOp(tree);
- }
- }
-}
-
//------------------------------------------------------------------------------
// isRMWRegOper: Can this binary tree node be used in a Read-Modify-Write format
//
@@ -4732,71 +1140,6 @@ GenTree* Lowering::PreferredRegOptionalOperand(GenTree* tree)
return preferredOp;
}
-#ifdef _TARGET_X86_
-//------------------------------------------------------------------------
-// ExcludeNonByteableRegisters: Determines if we need to exclude non-byteable registers for
-// various reasons
-//
-// Arguments:
-// tree - The node of interest
-//
-// Return Value:
-// If we need to exclude non-byteable registers
-//
-bool Lowering::ExcludeNonByteableRegisters(GenTree* tree)
-{
- // Example1: GT_STOREIND(byte, addr, op2) - storeind of byte sized value from op2 into mem 'addr'
- // Storeind itself will not produce any value and hence dstCount=0. But op2 could be TYP_INT
- // value. In this case we need to exclude esi/edi from the src candidates of op2.
- if (varTypeIsByte(tree))
- {
- return true;
- }
- // Example2: GT_CAST(int <- bool <- int) - here type of GT_CAST node is int and castToType is bool.
- else if ((tree->OperGet() == GT_CAST) && varTypeIsByte(tree->CastToType()))
- {
- return true;
- }
- else if (tree->OperIsCompare())
- {
- GenTree* op1 = tree->gtGetOp1();
- GenTree* op2 = tree->gtGetOp2();
-
- // Example3: GT_EQ(int, op1 of type ubyte, op2 of type ubyte) - in this case codegen uses
- // ubyte as the result of comparison and if the result needs to be materialized into a reg
- // simply zero extend it to TYP_INT size. Here is an example of generated code:
- // cmp dl, byte ptr[addr mode]
- // movzx edx, dl
- if (varTypeIsByte(op1) && varTypeIsByte(op2))
- {
- return true;
- }
- // Example4: GT_EQ(int, op1 of type ubyte, op2 is GT_CNS_INT) - in this case codegen uses
- // ubyte as the result of the comparison and if the result needs to be materialized into a reg
- // simply zero extend it to TYP_INT size.
- else if (varTypeIsByte(op1) && op2->IsCnsIntOrI())
- {
- return true;
- }
- // Example4: GT_EQ(int, op1 is GT_CNS_INT, op2 of type ubyte) - in this case codegen uses
- // ubyte as the result of the comparison and if the result needs to be materialized into a reg
- // simply zero extend it to TYP_INT size.
- else if (op1->IsCnsIntOrI() && varTypeIsByte(op2))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
-}
-#endif // _TARGET_X86_
-
#endif // _TARGET_XARCH_
#endif // !LEGACY_BACKEND
diff --git a/src/jit/lsra.cpp b/src/jit/lsra.cpp
index accfd6ee78..ac76e29364 100644
--- a/src/jit/lsra.cpp
+++ b/src/jit/lsra.cpp
@@ -1914,6 +1914,14 @@ bool LinearScan::isRegCandidate(LclVarDsc* varDsc)
void LinearScan::identifyCandidates()
{
+
+ // Initialize the sets of lclVars that are used to determine whether, and for which lclVars,
+ // we need to perform resolution across basic blocks.
+ // Note that we can't do this in the constructor because the number of tracked lclVars may
+ // change between the constructor and the actual allocation.
+ VarSetOps::AssignNoCopy(compiler, resolutionCandidateVars, VarSetOps::MakeEmpty(compiler));
+ VarSetOps::AssignNoCopy(compiler, splitOrSpilledVars, VarSetOps::MakeEmpty(compiler));
+
if (compiler->lvaCount == 0)
{
return;
@@ -1950,8 +1958,6 @@ void LinearScan::identifyCandidates()
// for vectors on Arm64, though the actual value may differ.
VarSetOps::AssignNoCopy(compiler, fpCalleeSaveCandidateVars, VarSetOps::MakeEmpty(compiler));
- VarSetOps::AssignNoCopy(compiler, resolutionCandidateVars, VarSetOps::MakeEmpty(compiler));
- VarSetOps::AssignNoCopy(compiler, splitOrSpilledVars, VarSetOps::MakeEmpty(compiler));
VARSET_TP VARSET_INIT_NOCOPY(fpMaybeCandidateVars, VarSetOps::MakeEmpty(compiler));
unsigned int floatVarCount = 0;
unsigned int thresholdFPRefCntWtd = 4 * BB_UNITY_WEIGHT;
@@ -3411,7 +3417,7 @@ static int ComputeOperandDstCount(GenTree* operand)
// ComputeAvailableSrcCount: computes the number of registers available as
// sources for a node.
//
-// This is simply the sum of the number of registers prduced by each
+// This is simply the sum of the number of registers produced by each
// operand to the node.
//
// Arguments:
@@ -3430,7 +3436,7 @@ static int ComputeAvailableSrcCount(GenTree* node)
return numSources;
}
-#endif
+#endif // DEBUG
void LinearScan::buildRefPositionsForNode(GenTree* tree,
BasicBlock* block,
@@ -10412,11 +10418,21 @@ void LinearScan::lsraDispNode(GenTreePtr tree, LsraTupleDumpMode mode, bool hasD
}
if (!hasDest && tree->gtHasReg())
{
- // This can be true for the "localDefUse" case - defining a reg, but
- // pushing it on the stack
- assert(spillChar == ' ');
- spillChar = '*';
- hasDest = true;
+ // A node can define a register, but not produce a value for a parent to consume,
+ // i.e. in the "localDefUse" case.
+ // There used to be an assert here that we wouldn't spill such a node.
+ // However, we can have unused lclVars that wind up being the node at which
+ // it is spilled. This probably indicates a bug, but we don't realy want to
+ // assert during a dump.
+ if (spillChar == 'S')
+ {
+ spillChar = '$';
+ }
+ else
+ {
+ spillChar = '*';
+ }
+ hasDest = true;
}
}
printf("%c N%03u. ", spillChar, tree->gtSeqNum);
diff --git a/src/jit/lsraarm.cpp b/src/jit/lsraarm.cpp
new file mode 100644
index 0000000000..57f0096b35
--- /dev/null
+++ b/src/jit/lsraarm.cpp
@@ -0,0 +1,1073 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XX XX
+XX Register Requirements for ARM XX
+XX XX
+XX This encapsulates all the logic for setting register requirements for XX
+XX the ARM architecture. XX
+XX XX
+XX XX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+*/
+
+#include "jitpch.h"
+#ifdef _MSC_VER
+#pragma hdrstop
+#endif
+
+#ifndef LEGACY_BACKEND // This file is ONLY used for the RyuJIT backend that uses the linear scan register allocator
+
+#ifdef _TARGET_ARM_
+
+#include "jit.h"
+#include "sideeffects.h"
+#include "lower.h"
+#include "lsra.h"
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitStoreLoc: Lower a store of a lclVar
+//
+// Arguments:
+// storeLoc - the local store (GT_STORE_LCL_FLD or GT_STORE_LCL_VAR)
+//
+// Notes:
+// This involves:
+// - Setting the appropriate candidates for a store of a multi-reg call return value.
+// - Handling of contained immediates and widening operations of unsigneds.
+//
+void Lowering::TreeNodeInfoInitStoreLoc(GenTreeLclVarCommon* storeLoc)
+{
+ TreeNodeInfo* info = &(storeLoc->gtLsraInfo);
+
+ // Is this the case of var = call where call is returning
+ // a value in multiple return registers?
+ GenTree* op1 = storeLoc->gtGetOp1();
+ if (op1->IsMultiRegCall())
+ {
+ // backend expects to see this case only for store lclvar.
+ assert(storeLoc->OperGet() == GT_STORE_LCL_VAR);
+
+ // srcCount = number of registers in which the value is returned by call
+ GenTreeCall* call = op1->AsCall();
+ ReturnTypeDesc* retTypeDesc = call->GetReturnTypeDesc();
+ info->srcCount = retTypeDesc->GetReturnRegCount();
+
+ // Call node srcCandidates = Bitwise-OR(allregs(GetReturnRegType(i))) for all i=0..RetRegCount-1
+ regMaskTP srcCandidates = m_lsra->allMultiRegCallNodeRegs(call);
+ op1->gtLsraInfo.setSrcCandidates(m_lsra, srcCandidates);
+ return;
+ }
+
+ CheckImmedAndMakeContained(storeLoc, op1);
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitCmp: Lower a GT comparison node.
+//
+// Arguments:
+// tree - the node to lower
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitCmp(GenTreePtr tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+
+ info->srcCount = 2;
+ info->dstCount = 1;
+ CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitGCWriteBarrier: GC lowering helper.
+//
+// Arguments:
+// tree - the node to lower
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitGCWriteBarrier(GenTree* tree)
+{
+ GenTreePtr dst = tree;
+ GenTreePtr addr = tree->gtOp.gtOp1;
+ GenTreePtr src = tree->gtOp.gtOp2;
+
+ if (addr->OperGet() == GT_LEA)
+ {
+ // In the case where we are doing a helper assignment, if the dst
+ // is an indir through an lea, we need to actually instantiate the
+ // lea in a register
+ GenTreeAddrMode* lea = addr->AsAddrMode();
+
+ short leaSrcCount = 0;
+ if (lea->Base() != nullptr)
+ {
+ leaSrcCount++;
+ }
+ if (lea->Index() != nullptr)
+ {
+ leaSrcCount++;
+ }
+ lea->gtLsraInfo.srcCount = leaSrcCount;
+ lea->gtLsraInfo.dstCount = 1;
+ }
+
+#if NOGC_WRITE_BARRIERS
+ NYI_ARM("NOGC_WRITE_BARRIERS");
+#else
+ // For the standard JIT Helper calls
+ // op1 goes into REG_ARG_0 and
+ // op2 goes into REG_ARG_1
+ //
+ addr->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_0);
+ src->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_1);
+#endif // NOGC_WRITE_BARRIERS
+
+ // Both src and dst must reside in a register, which they should since we haven't set
+ // either of them as contained.
+ assert(addr->gtLsraInfo.dstCount == 1);
+ assert(src->gtLsraInfo.dstCount == 1);
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitIndir: Specify register requirements for address expression
+// of an indirection operation.
+//
+// Arguments:
+// indirTree - GT_IND, GT_STOREIND, block node or GT_NULLCHECK gentree node
+//
+void Lowering::TreeNodeInfoInitIndir(GenTreePtr indirTree)
+{
+ assert(indirTree->OperIsIndir());
+ // If this is the rhs of a block copy (i.e. non-enregisterable struct),
+ // it has no register requirements.
+ if (indirTree->TypeGet() == TYP_STRUCT)
+ {
+ return;
+ }
+
+ GenTreePtr addr = indirTree->gtGetOp1();
+ TreeNodeInfo* info = &(indirTree->gtLsraInfo);
+
+ GenTreePtr base = nullptr;
+ GenTreePtr index = nullptr;
+ unsigned cns = 0;
+ unsigned mul;
+ bool rev;
+ bool modifiedSources = false;
+
+ if ((addr->OperGet() == GT_LEA) && IsSafeToContainMem(indirTree, addr))
+ {
+ GenTreeAddrMode* lea = addr->AsAddrMode();
+ base = lea->Base();
+ index = lea->Index();
+ cns = lea->gtOffset;
+
+ m_lsra->clearOperandCounts(addr);
+ // The srcCount is decremented because addr is now "contained",
+ // then we account for the base and index below, if they are non-null.
+ info->srcCount--;
+ }
+ else if (comp->codeGen->genCreateAddrMode(addr, -1, true, 0, &rev, &base, &index, &mul, &cns, true /*nogen*/) &&
+ !(modifiedSources = AreSourcesPossiblyModifiedLocals(indirTree, base, index)))
+ {
+ // An addressing mode will be constructed that may cause some
+ // nodes to not need a register, and cause others' lifetimes to be extended
+ // to the GT_IND or even its parent if it's an assignment
+
+ assert(base != addr);
+ m_lsra->clearOperandCounts(addr);
+
+ GenTreePtr arrLength = nullptr;
+
+ // Traverse the computation below GT_IND to find the operands
+ // for the addressing mode, marking the various constants and
+ // intermediate results as not consuming/producing.
+ // If the traversal were more complex, we might consider using
+ // a traversal function, but the addressing mode is only made
+ // up of simple arithmetic operators, and the code generator
+ // only traverses one leg of each node.
+
+ bool foundBase = (base == nullptr);
+ bool foundIndex = (index == nullptr);
+ GenTreePtr nextChild = nullptr;
+ for (GenTreePtr child = addr; child != nullptr && !child->OperIsLeaf(); child = nextChild)
+ {
+ nextChild = nullptr;
+ GenTreePtr op1 = child->gtOp.gtOp1;
+ GenTreePtr op2 = (child->OperIsBinary()) ? child->gtOp.gtOp2 : nullptr;
+
+ if (op1 == base)
+ {
+ foundBase = true;
+ }
+ else if (op1 == index)
+ {
+ foundIndex = true;
+ }
+ else
+ {
+ m_lsra->clearOperandCounts(op1);
+ if (!op1->OperIsLeaf())
+ {
+ nextChild = op1;
+ }
+ }
+
+ if (op2 != nullptr)
+ {
+ if (op2 == base)
+ {
+ foundBase = true;
+ }
+ else if (op2 == index)
+ {
+ foundIndex = true;
+ }
+ else
+ {
+ m_lsra->clearOperandCounts(op2);
+ if (!op2->OperIsLeaf())
+ {
+ assert(nextChild == nullptr);
+ nextChild = op2;
+ }
+ }
+ }
+ }
+ assert(foundBase && foundIndex);
+ info->srcCount--; // it gets incremented below.
+ }
+ else if (addr->gtOper == GT_ARR_ELEM)
+ {
+ // The GT_ARR_ELEM consumes all the indices and produces the offset.
+ // The array object lives until the mem access.
+ // We also consume the target register to which the address is
+ // computed
+
+ info->srcCount++;
+ assert(addr->gtLsraInfo.srcCount >= 2);
+ addr->gtLsraInfo.srcCount -= 1;
+ }
+ else
+ {
+ // it is nothing but a plain indir
+ info->srcCount--; // base gets added in below
+ base = addr;
+ }
+
+ if (base != nullptr)
+ {
+ info->srcCount++;
+ }
+
+ if (index != nullptr && !modifiedSources)
+ {
+ info->srcCount++;
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitReturn: Set the NodeInfo for a GT_RETURN.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitReturn(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+ GenTree* op1 = tree->gtGetOp1();
+ regMaskTP useCandidates = RBM_NONE;
+
+ info->srcCount = (tree->TypeGet() == TYP_VOID) ? 0 : 1;
+ info->dstCount = 0;
+
+ if (varTypeIsStruct(tree))
+ {
+ NYI_ARM("struct return");
+ }
+ else
+ {
+ // Non-struct type return - determine useCandidates
+ switch (tree->TypeGet())
+ {
+ case TYP_VOID:
+ useCandidates = RBM_NONE;
+ break;
+ case TYP_FLOAT:
+ useCandidates = RBM_FLOATRET;
+ break;
+ case TYP_DOUBLE:
+ useCandidates = RBM_DOUBLERET;
+ break;
+ case TYP_LONG:
+ useCandidates = RBM_LNGRET;
+ break;
+ default:
+ useCandidates = RBM_INTRET;
+ break;
+ }
+ }
+
+ if (useCandidates != RBM_NONE)
+ {
+ tree->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, useCandidates);
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitCall: Set the NodeInfo for a call.
+//
+// Arguments:
+// call - The call node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitCall(GenTreeCall* call)
+{
+ TreeNodeInfo* info = &(call->gtLsraInfo);
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+ bool hasMultiRegRetVal = false;
+ ReturnTypeDesc* retTypeDesc = nullptr;
+
+ info->srcCount = 0;
+ if (call->TypeGet() != TYP_VOID)
+ {
+ hasMultiRegRetVal = call->HasMultiRegRetVal();
+ if (hasMultiRegRetVal)
+ {
+ // dst count = number of registers in which the value is returned by call
+ retTypeDesc = call->GetReturnTypeDesc();
+ info->dstCount = retTypeDesc->GetReturnRegCount();
+ }
+ else
+ {
+ info->dstCount = 1;
+ }
+ }
+ else
+ {
+ info->dstCount = 0;
+ }
+
+ GenTree* ctrlExpr = call->gtControlExpr;
+ if (call->gtCallType == CT_INDIRECT)
+ {
+ // either gtControlExpr != null or gtCallAddr != null.
+ // Both cannot be non-null at the same time.
+ assert(ctrlExpr == nullptr);
+ assert(call->gtCallAddr != nullptr);
+ ctrlExpr = call->gtCallAddr;
+ }
+
+ // set reg requirements on call target represented as control sequence.
+ if (ctrlExpr != nullptr)
+ {
+ // we should never see a gtControlExpr whose type is void.
+ assert(ctrlExpr->TypeGet() != TYP_VOID);
+
+ info->srcCount++;
+ // In case of fast tail implemented as jmp, make sure that gtControlExpr is
+ // computed into a register.
+ if (call->IsFastTailCall())
+ {
+ NYI_ARM("tail call");
+ }
+ }
+ else
+ {
+ info->internalIntCount = 1;
+ }
+
+ RegisterType registerType = call->TypeGet();
+
+ // Set destination candidates for return value of the call.
+ if (hasMultiRegRetVal)
+ {
+ assert(retTypeDesc != nullptr);
+ info->setDstCandidates(l, retTypeDesc->GetABIReturnRegs());
+ }
+ else if (varTypeIsFloating(registerType))
+ {
+ info->setDstCandidates(l, RBM_FLOATRET);
+ }
+ else if (registerType == TYP_LONG)
+ {
+ info->setDstCandidates(l, RBM_LNGRET);
+ }
+ else
+ {
+ info->setDstCandidates(l, RBM_INTRET);
+ }
+
+ // If there is an explicit this pointer, we don't want that node to produce anything
+ // as it is redundant
+ if (call->gtCallObjp != nullptr)
+ {
+ GenTreePtr thisPtrNode = call->gtCallObjp;
+
+ if (thisPtrNode->gtOper == GT_PUTARG_REG)
+ {
+ l->clearOperandCounts(thisPtrNode);
+ l->clearDstCount(thisPtrNode->gtOp.gtOp1);
+ }
+ else
+ {
+ l->clearDstCount(thisPtrNode);
+ }
+ }
+
+ // First, count reg args
+ bool callHasFloatRegArgs = false;
+
+ for (GenTreePtr list = call->gtCallLateArgs; list; list = list->MoveNext())
+ {
+ assert(list->OperIsList());
+
+ GenTreePtr argNode = list->Current();
+
+ fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, argNode);
+ assert(curArgTabEntry);
+
+ if (curArgTabEntry->regNum == REG_STK)
+ {
+ // late arg that is not passed in a register
+ assert(argNode->gtOper == GT_PUTARG_STK);
+
+ TreeNodeInfoInitPutArgStk(argNode->AsPutArgStk(), curArgTabEntry);
+ continue;
+ }
+
+ var_types argType = argNode->TypeGet();
+ bool argIsFloat = varTypeIsFloating(argType);
+ callHasFloatRegArgs |= argIsFloat;
+
+ regNumber argReg = curArgTabEntry->regNum;
+ // We will setup argMask to the set of all registers that compose this argument
+ regMaskTP argMask = 0;
+
+ argNode = argNode->gtEffectiveVal();
+
+ // A GT_FIELD_LIST has a TYP_VOID, but is used to represent a multireg struct
+ if (varTypeIsStruct(argNode) || (argNode->gtOper == GT_FIELD_LIST))
+ {
+ GenTreePtr actualArgNode = argNode;
+ unsigned originalSize = 0;
+
+ if (argNode->gtOper == GT_FIELD_LIST)
+ {
+ // There could be up to 2-4 PUTARG_REGs in the list (3 or 4 can only occur for HFAs)
+ GenTreeFieldList* fieldListPtr = argNode->AsFieldList();
+
+ // Initailize the first register and the first regmask in our list
+ regNumber targetReg = argReg;
+ regMaskTP targetMask = genRegMask(targetReg);
+ unsigned iterationNum = 0;
+ originalSize = 0;
+
+ for (; fieldListPtr; fieldListPtr = fieldListPtr->Rest())
+ {
+ GenTreePtr putArgRegNode = fieldListPtr->Current();
+ assert(putArgRegNode->gtOper == GT_PUTARG_REG);
+ GenTreePtr putArgChild = putArgRegNode->gtOp.gtOp1;
+
+ originalSize += REGSIZE_BYTES; // 8 bytes
+
+ // Record the register requirements for the GT_PUTARG_REG node
+ putArgRegNode->gtLsraInfo.setDstCandidates(l, targetMask);
+ putArgRegNode->gtLsraInfo.setSrcCandidates(l, targetMask);
+
+ // To avoid redundant moves, request that the argument child tree be
+ // computed in the register in which the argument is passed to the call.
+ putArgChild->gtLsraInfo.setSrcCandidates(l, targetMask);
+
+ // We consume one source for each item in this list
+ info->srcCount++;
+ iterationNum++;
+
+ // Update targetReg and targetMask for the next putarg_reg (if any)
+ targetReg = genRegArgNext(targetReg);
+ targetMask = genRegMask(targetReg);
+ }
+ }
+ else
+ {
+#ifdef DEBUG
+ compiler->gtDispTreeRange(BlockRange(), argNode);
+#endif
+ noway_assert(!"Unsupported TYP_STRUCT arg kind");
+ }
+
+ unsigned slots = ((unsigned)(roundUp(originalSize, REGSIZE_BYTES))) / REGSIZE_BYTES;
+ regNumber curReg = argReg;
+ regNumber lastReg = argIsFloat ? REG_ARG_FP_LAST : REG_ARG_LAST;
+ unsigned remainingSlots = slots;
+
+ while (remainingSlots > 0)
+ {
+ argMask |= genRegMask(curReg);
+ remainingSlots--;
+
+ if (curReg == lastReg)
+ break;
+
+ curReg = genRegArgNext(curReg);
+ }
+
+ // Struct typed arguments must be fully passed in registers (Reg/Stk split not allowed)
+ noway_assert(remainingSlots == 0);
+ argNode->gtLsraInfo.internalIntCount = 0;
+ }
+ else // A scalar argument (not a struct)
+ {
+ // We consume one source
+ info->srcCount++;
+
+ argMask |= genRegMask(argReg);
+ argNode->gtLsraInfo.setDstCandidates(l, argMask);
+ argNode->gtLsraInfo.setSrcCandidates(l, argMask);
+
+ if (argNode->gtOper == GT_PUTARG_REG)
+ {
+ GenTreePtr putArgChild = argNode->gtOp.gtOp1;
+
+ // To avoid redundant moves, request that the argument child tree be
+ // computed in the register in which the argument is passed to the call.
+ putArgChild->gtLsraInfo.setSrcCandidates(l, argMask);
+ }
+ }
+ }
+
+ // Now, count stack args
+ // Note that these need to be computed into a register, but then
+ // they're just stored to the stack - so the reg doesn't
+ // need to remain live until the call. In fact, it must not
+ // because the code generator doesn't actually consider it live,
+ // so it can't be spilled.
+
+ GenTreePtr args = call->gtCallArgs;
+ while (args)
+ {
+ GenTreePtr arg = args->gtOp.gtOp1;
+
+ // Skip arguments that have been moved to the Late Arg list
+ if (!(args->gtFlags & GTF_LATE_ARG))
+ {
+ if (arg->gtOper == GT_PUTARG_STK)
+ {
+ fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, arg);
+ assert(curArgTabEntry);
+
+ assert(curArgTabEntry->regNum == REG_STK);
+
+ TreeNodeInfoInitPutArgStk(arg->AsPutArgStk(), curArgTabEntry);
+ }
+ else
+ {
+ TreeNodeInfo* argInfo = &(arg->gtLsraInfo);
+ if (argInfo->dstCount != 0)
+ {
+ argInfo->isLocalDefUse = true;
+ }
+
+ argInfo->dstCount = 0;
+ }
+ }
+ args = args->gtOp.gtOp2;
+ }
+
+ if (call->IsVarargs() && callHasFloatRegArgs && !call->IsFastTailCall() && (ctrlExpr != nullptr))
+ {
+ NYI_ARM("float reg varargs");
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitPutArgStk: Set the NodeInfo for a GT_PUTARG_STK node
+//
+// Arguments:
+// argNode - a GT_PUTARG_STK node
+//
+// Return Value:
+// None.
+//
+// Notes:
+// Set the child node(s) to be contained when we have a multireg arg
+//
+void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* argNode, fgArgTabEntryPtr info)
+{
+ assert(argNode->gtOper == GT_PUTARG_STK);
+
+ GenTreePtr putArgChild = argNode->gtOp.gtOp1;
+
+ // Initialize 'argNode' as not contained, as this is both the default case
+ // and how MakeSrcContained expects to find things setup.
+ //
+ argNode->gtLsraInfo.srcCount = 1;
+ argNode->gtLsraInfo.dstCount = 0;
+
+ // Do we have a TYP_STRUCT argument (or a GT_FIELD_LIST), if so it must be a multireg pass-by-value struct
+ if ((putArgChild->TypeGet() == TYP_STRUCT) || (putArgChild->OperGet() == GT_FIELD_LIST))
+ {
+ // We will use store instructions that each write a register sized value
+
+ if (putArgChild->OperGet() == GT_FIELD_LIST)
+ {
+ // We consume all of the items in the GT_FIELD_LIST
+ argNode->gtLsraInfo.srcCount = info->numSlots;
+ }
+ else
+ {
+ // We could use a ldp/stp sequence so we need two internal registers
+ argNode->gtLsraInfo.internalIntCount = 2;
+
+ if (putArgChild->OperGet() == GT_OBJ)
+ {
+ GenTreePtr objChild = putArgChild->gtOp.gtOp1;
+ if (objChild->OperGet() == GT_LCL_VAR_ADDR)
+ {
+ // We will generate all of the code for the GT_PUTARG_STK, the GT_OBJ and the GT_LCL_VAR_ADDR
+ // as one contained operation
+ //
+ MakeSrcContained(putArgChild, objChild);
+ }
+ }
+
+ // We will generate all of the code for the GT_PUTARG_STK and it's child node
+ // as one contained operation
+ //
+ MakeSrcContained(argNode, putArgChild);
+ }
+ }
+ else
+ {
+ // We must not have a multi-reg struct
+ assert(info->numSlots == 1);
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInit: Set the register requirements for RA.
+//
+// Notes:
+// Takes care of annotating the register requirements
+// for every TreeNodeInfo struct that maps to each tree node.
+//
+// Preconditions:
+// LSRA has been initialized and there is a TreeNodeInfo node
+// already allocated and initialized for every tree in the IR.
+//
+// Postconditions:
+// Every TreeNodeInfo instance has the right annotations on register
+// requirements needed by LSRA to build the Interval Table (source,
+// destination and internal [temp] register counts).
+//
+void Lowering::TreeNodeInfoInit(GenTree* tree)
+{
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+ unsigned kind = tree->OperKind();
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ RegisterType registerType = TypeGet(tree);
+
+ JITDUMP("TreeNodeInfoInit for: ");
+ DISPNODE(tree);
+
+ switch (tree->OperGet())
+ {
+ GenTree* op1;
+ GenTree* op2;
+
+ case GT_STORE_LCL_FLD:
+ case GT_STORE_LCL_VAR:
+ info->srcCount = 1;
+ info->dstCount = 0;
+ LowerStoreLoc(tree->AsLclVarCommon());
+ TreeNodeInfoInitStoreLoc(tree->AsLclVarCommon());
+ break;
+
+ case GT_NOP:
+ // A GT_NOP is either a passthrough (if it is void, or if it has
+ // a child), but must be considered to produce a dummy value if it
+ // has a type but no child
+ info->srcCount = 0;
+ if (tree->TypeGet() != TYP_VOID && tree->gtOp.gtOp1 == nullptr)
+ {
+ info->dstCount = 1;
+ }
+ else
+ {
+ info->dstCount = 0;
+ }
+ break;
+
+ case GT_INTRINSIC:
+ {
+ // TODO-ARM: Implement other type of intrinsics (round, sqrt and etc.)
+ // Both operand and its result must be of the same floating point type.
+ op1 = tree->gtOp.gtOp1;
+ assert(varTypeIsFloating(op1));
+ assert(op1->TypeGet() == tree->TypeGet());
+
+ switch (tree->gtIntrinsic.gtIntrinsicId)
+ {
+ case CORINFO_INTRINSIC_Abs:
+ case CORINFO_INTRINSIC_Sqrt:
+ info->srcCount = 1;
+ info->dstCount = 1;
+ break;
+ default:
+ NYI_ARM("Lowering::TreeNodeInfoInit for GT_INTRINSIC");
+ break;
+ }
+ }
+ break;
+
+ case GT_CAST:
+ {
+ info->srcCount = 1;
+ info->dstCount = 1;
+
+ // Non-overflow casts to/from float/double are done using SSE2 instructions
+ // and that allow the source operand to be either a reg or memop. Given the
+ // fact that casts from small int to float/double are done as two-level casts,
+ // the source operand is always guaranteed to be of size 4 or 8 bytes.
+ var_types castToType = tree->CastToType();
+ GenTreePtr castOp = tree->gtCast.CastOp();
+ var_types castOpType = castOp->TypeGet();
+ if (tree->gtFlags & GTF_UNSIGNED)
+ {
+ castOpType = genUnsignedType(castOpType);
+ }
+#ifdef DEBUG
+ if (!tree->gtOverflow() && (varTypeIsFloating(castToType) || varTypeIsFloating(castOpType)))
+ {
+ // If converting to float/double, the operand must be 4 or 8 byte in size.
+ if (varTypeIsFloating(castToType))
+ {
+ unsigned opSize = genTypeSize(castOpType);
+ assert(opSize == 4 || opSize == 8);
+ }
+ }
+#endif // DEBUG
+
+ if (tree->gtOverflow())
+ {
+ NYI_ARM("overflow checks");
+ }
+ }
+ break;
+
+ case GT_JTRUE:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ l->clearDstCount(tree->gtOp.gtOp1);
+ break;
+
+ case GT_JMP:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_SWITCH:
+ // This should never occur since switch nodes must not be visible at this
+ // point in the JIT.
+ info->srcCount = 0;
+ info->dstCount = 0; // To avoid getting uninit errors.
+ noway_assert(!"Switch must be lowered at this point");
+ break;
+
+ case GT_JMPTABLE:
+ info->srcCount = 0;
+ info->dstCount = 1;
+ break;
+
+ case GT_SWITCH_TABLE:
+ info->srcCount = 2;
+ info->internalIntCount = 1;
+ info->dstCount = 0;
+ break;
+
+ case GT_ASG:
+ case GT_ASG_ADD:
+ case GT_ASG_SUB:
+ noway_assert(!"We should never hit any assignment operator in lowering");
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_ADD:
+ case GT_SUB:
+ if (varTypeIsFloating(tree->TypeGet()))
+ {
+ // overflow operations aren't supported on float/double types.
+ assert(!tree->gtOverflow());
+
+ // No implicit conversions at this stage as the expectation is that
+ // everything is made explicit by adding casts.
+ assert(tree->gtOp.gtOp1->TypeGet() == tree->gtOp.gtOp2->TypeGet());
+
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ break;
+ }
+
+ __fallthrough;
+
+ case GT_AND:
+ case GT_OR:
+ case GT_XOR:
+ info->srcCount = 2;
+ info->dstCount = 1;
+ // Check and make op2 contained (if it is a containable immediate)
+ CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
+ break;
+
+ case GT_MUL:
+ if (tree->gtOverflow())
+ {
+ // Need a register different from target reg to check for overflow.
+ info->internalIntCount = 2;
+ }
+ __fallthrough;
+
+ case GT_DIV:
+ case GT_MULHI:
+ case GT_UDIV:
+ {
+ info->srcCount = 2;
+ info->dstCount = 1;
+ }
+ break;
+
+ case GT_LIST:
+ case GT_FIELD_LIST:
+ case GT_ARGPLACE:
+ case GT_NO_OP:
+ case GT_START_NONGC:
+ case GT_PROF_HOOK:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_CNS_DBL:
+ info->srcCount = 0;
+ info->dstCount = 1;
+ if (tree->TypeGet() == TYP_FLOAT)
+ {
+ // An int register for float constant
+ info->internalIntCount = 1;
+ }
+ else
+ {
+ // TYP_DOUBLE
+ assert(tree->TypeGet() == TYP_DOUBLE);
+
+ // Two int registers for double constant
+ info->internalIntCount = 2;
+ }
+ break;
+
+ case GT_RETURN:
+ TreeNodeInfoInitReturn(tree);
+ break;
+
+ case GT_RETFILT:
+ if (tree->TypeGet() == TYP_VOID)
+ {
+ info->srcCount = 0;
+ info->dstCount = 0;
+ }
+ else
+ {
+ assert(tree->TypeGet() == TYP_INT);
+
+ info->srcCount = 1;
+ info->dstCount = 0;
+
+ info->setSrcCandidates(l, RBM_INTRET);
+ tree->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, RBM_INTRET);
+ }
+ break;
+
+ case GT_LEA:
+ {
+ GenTreeAddrMode* lea = tree->AsAddrMode();
+
+ GenTree* base = lea->Base();
+ GenTree* index = lea->Index();
+ unsigned cns = lea->gtOffset;
+
+ // This LEA is instantiating an address,
+ // so we set up the srcCount and dstCount here.
+ info->srcCount = 0;
+ if (base != nullptr)
+ {
+ info->srcCount++;
+ }
+ if (index != nullptr)
+ {
+ info->srcCount++;
+ }
+ info->dstCount = 1;
+
+ if ((index != nullptr) && (cns != 0))
+ {
+ NYI_ARM("GT_LEA: index and cns are not nil");
+ }
+ else if (!emitter::emitIns_valid_imm_for_add(cns, INS_FLAGS_DONT_CARE))
+ {
+ NYI_ARM("GT_LEA: invalid imm");
+ }
+ }
+ break;
+
+ case GT_NEG:
+ info->srcCount = 1;
+ info->dstCount = 1;
+ break;
+
+ case GT_NOT:
+ info->srcCount = 1;
+ info->dstCount = 1;
+ break;
+
+ case GT_LSH:
+ case GT_RSH:
+ case GT_RSZ:
+ case GT_ROR:
+ {
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ GenTreePtr shiftBy = tree->gtOp.gtOp2;
+ GenTreePtr source = tree->gtOp.gtOp1;
+ if (shiftBy->IsCnsIntOrI())
+ {
+ l->clearDstCount(shiftBy);
+ info->srcCount--;
+ }
+ }
+ break;
+
+ case GT_EQ:
+ case GT_NE:
+ case GT_LT:
+ case GT_LE:
+ case GT_GE:
+ case GT_GT:
+ TreeNodeInfoInitCmp(tree);
+ break;
+
+ case GT_CALL:
+ TreeNodeInfoInitCall(tree->AsCall());
+ break;
+
+ case GT_STOREIND:
+ {
+ info->srcCount = 2;
+ info->dstCount = 0;
+ GenTree* src = tree->gtOp.gtOp2;
+
+ if (compiler->codeGen->gcInfo.gcIsWriteBarrierAsgNode(tree))
+ {
+ TreeNodeInfoInitGCWriteBarrier(tree);
+ break;
+ }
+
+ TreeNodeInfoInitIndir(tree);
+ }
+ break;
+
+ case GT_NULLCHECK:
+ info->dstCount = 0;
+ info->srcCount = 1;
+ info->isLocalDefUse = true;
+ // null check is an indirection on an addr
+ TreeNodeInfoInitIndir(tree);
+ break;
+
+ case GT_IND:
+ info->dstCount = 1;
+ info->srcCount = 1;
+ TreeNodeInfoInitIndir(tree);
+ break;
+
+ case GT_CATCH_ARG:
+ info->srcCount = 0;
+ info->dstCount = 1;
+ info->setDstCandidates(l, RBM_EXCEPTION_OBJECT);
+ break;
+
+ case GT_CLS_VAR:
+ info->srcCount = 0;
+ // GT_CLS_VAR, by the time we reach the backend, must always
+ // be a pure use.
+ // It will produce a result of the type of the
+ // node, and use an internal register for the address.
+
+ info->dstCount = 1;
+ assert((tree->gtFlags & (GTF_VAR_DEF | GTF_VAR_USEASG | GTF_VAR_USEDEF)) == 0);
+ info->internalIntCount = 1;
+ break;
+
+ default:
+#ifdef DEBUG
+ JitTls::GetCompiler()->gtDispTree(tree);
+#endif
+ NYI_ARM("TreeNodeInfoInit default case");
+ case GT_LCL_FLD:
+ case GT_LCL_VAR:
+ case GT_LCL_VAR_ADDR:
+ case GT_CLS_VAR_ADDR:
+ case GT_IL_OFFSET:
+ case GT_CNS_INT:
+ case GT_PUTARG_REG:
+ case GT_PUTARG_STK:
+ info->dstCount = tree->IsValue() ? 1 : 0;
+ if (kind & (GTK_CONST | GTK_LEAF))
+ {
+ info->srcCount = 0;
+ }
+ else if (kind & (GTK_SMPOP))
+ {
+ if (tree->gtGetOp2IfPresent() != nullptr)
+ {
+ info->srcCount = 2;
+ }
+ else
+ {
+ info->srcCount = 1;
+ }
+ }
+ else
+ {
+ unreached();
+ }
+ break;
+ } // end switch (tree->OperGet())
+
+ // We need to be sure that we've set info->srcCount and info->dstCount appropriately
+ assert((info->dstCount < 2) || tree->IsMultiRegCall());
+}
+
+#endif // _TARGET_ARM_
+
+#endif // !LEGACY_BACKEND
diff --git a/src/jit/lsraarm64.cpp b/src/jit/lsraarm64.cpp
new file mode 100644
index 0000000000..0db30e1811
--- /dev/null
+++ b/src/jit/lsraarm64.cpp
@@ -0,0 +1,1766 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XX XX
+XX Register Requirements for ARM64 XX
+XX XX
+XX This encapsulates all the logic for setting register requirements for XX
+XX the ARM64 architecture. XX
+XX XX
+XX XX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+*/
+
+#include "jitpch.h"
+#ifdef _MSC_VER
+#pragma hdrstop
+#endif
+
+#ifndef LEGACY_BACKEND // This file is ONLY used for the RyuJIT backend that uses the linear scan register allocator
+
+#ifdef _TARGET_ARM64_
+
+#include "jit.h"
+#include "sideeffects.h"
+#include "lower.h"
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitStoreLoc: Set register requirements for a store of a lclVar
+//
+// Arguments:
+// storeLoc - the local store (GT_STORE_LCL_FLD or GT_STORE_LCL_VAR)
+//
+// Notes:
+// This involves:
+// - Setting the appropriate candidates for a store of a multi-reg call return value.
+// - Handling of contained immediates.
+
+void Lowering::TreeNodeInfoInitStoreLoc(GenTreeLclVarCommon* storeLoc)
+{
+ TreeNodeInfo* info = &(storeLoc->gtLsraInfo);
+
+ // Is this the case of var = call where call is returning
+ // a value in multiple return registers?
+ GenTree* op1 = storeLoc->gtGetOp1();
+ if (op1->IsMultiRegCall())
+ {
+ // backend expects to see this case only for store lclvar.
+ assert(storeLoc->OperGet() == GT_STORE_LCL_VAR);
+
+ // srcCount = number of registers in which the value is returned by call
+ GenTreeCall* call = op1->AsCall();
+ ReturnTypeDesc* retTypeDesc = call->GetReturnTypeDesc();
+ info->srcCount = retTypeDesc->GetReturnRegCount();
+
+ // Call node srcCandidates = Bitwise-OR(allregs(GetReturnRegType(i))) for all i=0..RetRegCount-1
+ regMaskTP srcCandidates = m_lsra->allMultiRegCallNodeRegs(call);
+ op1->gtLsraInfo.setSrcCandidates(m_lsra, srcCandidates);
+ return;
+ }
+
+ CheckImmedAndMakeContained(storeLoc, op1);
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInit: Set the register requirements for RA.
+//
+// Notes:
+// Takes care of annotating the register requirements
+// for every TreeNodeInfo struct that maps to each tree node.
+//
+// Preconditions:
+// LSRA has been initialized and there is a TreeNodeInfo node
+// already allocated and initialized for every tree in the IR.
+//
+// Postconditions:
+// Every TreeNodeInfo instance has the right annotations on register
+// requirements needed by LSRA to build the Interval Table (source,
+// destination and internal [temp] register counts).
+//
+void Lowering::TreeNodeInfoInit(GenTree* tree)
+{
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+ unsigned kind = tree->OperKind();
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ RegisterType registerType = TypeGet(tree);
+
+ JITDUMP("TreeNodeInfoInit for: ");
+ DISPNODE(tree);
+ JITDUMP("\n");
+
+ switch (tree->OperGet())
+ {
+ GenTree* op1;
+ GenTree* op2;
+
+ default:
+ info->dstCount = tree->IsValue() ? 1 : 0;
+ if (kind & (GTK_CONST | GTK_LEAF))
+ {
+ info->srcCount = 0;
+ }
+ else if (kind & (GTK_SMPOP))
+ {
+ if (tree->gtGetOp2IfPresent() != nullptr)
+ {
+ info->srcCount = 2;
+ }
+ else
+ {
+ info->srcCount = 1;
+ }
+ }
+ else
+ {
+ unreached();
+ }
+ break;
+
+ case GT_STORE_LCL_FLD:
+ case GT_STORE_LCL_VAR:
+ info->srcCount = 1;
+ info->dstCount = 0;
+ LowerStoreLoc(tree->AsLclVarCommon());
+ TreeNodeInfoInitStoreLoc(tree->AsLclVarCommon());
+ break;
+
+ case GT_BOX:
+ noway_assert(!"box should not exist here");
+ // The result of 'op1' is also the final result
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_PHYSREGDST:
+ info->srcCount = 1;
+ info->dstCount = 0;
+ break;
+
+ case GT_COMMA:
+ {
+ GenTreePtr firstOperand;
+ GenTreePtr secondOperand;
+ if (tree->gtFlags & GTF_REVERSE_OPS)
+ {
+ firstOperand = tree->gtOp.gtOp2;
+ secondOperand = tree->gtOp.gtOp1;
+ }
+ else
+ {
+ firstOperand = tree->gtOp.gtOp1;
+ secondOperand = tree->gtOp.gtOp2;
+ }
+ if (firstOperand->TypeGet() != TYP_VOID)
+ {
+ firstOperand->gtLsraInfo.isLocalDefUse = true;
+ firstOperand->gtLsraInfo.dstCount = 0;
+ }
+ if (tree->TypeGet() == TYP_VOID && secondOperand->TypeGet() != TYP_VOID)
+ {
+ secondOperand->gtLsraInfo.isLocalDefUse = true;
+ secondOperand->gtLsraInfo.dstCount = 0;
+ }
+ }
+
+ __fallthrough;
+
+ case GT_LIST:
+ case GT_FIELD_LIST:
+ case GT_ARGPLACE:
+ case GT_NO_OP:
+ case GT_START_NONGC:
+ case GT_PROF_HOOK:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_CNS_DBL:
+ info->srcCount = 0;
+ info->dstCount = 1;
+ {
+ GenTreeDblCon* dblConst = tree->AsDblCon();
+ double constValue = dblConst->gtDblCon.gtDconVal;
+
+ if (emitter::emitIns_valid_imm_for_fmov(constValue))
+ {
+ // Directly encode constant to instructions.
+ }
+ else
+ {
+ // Reserve int to load constant from memory (IF_LARGELDC)
+ info->internalIntCount = 1;
+ }
+ }
+ break;
+
+ case GT_QMARK:
+ case GT_COLON:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ unreached();
+ break;
+
+ case GT_RETURN:
+ TreeNodeInfoInitReturn(tree);
+ break;
+
+ case GT_RETFILT:
+ if (tree->TypeGet() == TYP_VOID)
+ {
+ info->srcCount = 0;
+ info->dstCount = 0;
+ }
+ else
+ {
+ assert(tree->TypeGet() == TYP_INT);
+
+ info->srcCount = 1;
+ info->dstCount = 0;
+
+ info->setSrcCandidates(l, RBM_INTRET);
+ tree->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, RBM_INTRET);
+ }
+ break;
+
+ case GT_NOP:
+ // A GT_NOP is either a passthrough (if it is void, or if it has
+ // a child), but must be considered to produce a dummy value if it
+ // has a type but no child
+ info->srcCount = 0;
+ if (tree->TypeGet() != TYP_VOID && tree->gtOp.gtOp1 == nullptr)
+ {
+ info->dstCount = 1;
+ }
+ else
+ {
+ info->dstCount = 0;
+ }
+ break;
+
+ case GT_JTRUE:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ l->clearDstCount(tree->gtOp.gtOp1);
+ break;
+
+ case GT_JMP:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_SWITCH:
+ // This should never occur since switch nodes must not be visible at this
+ // point in the JIT.
+ info->srcCount = 0;
+ info->dstCount = 0; // To avoid getting uninit errors.
+ noway_assert(!"Switch must be lowered at this point");
+ break;
+
+ case GT_JMPTABLE:
+ info->srcCount = 0;
+ info->dstCount = 1;
+ break;
+
+ case GT_SWITCH_TABLE:
+ info->srcCount = 2;
+ info->internalIntCount = 1;
+ info->dstCount = 0;
+ break;
+
+ case GT_ASG:
+ case GT_ASG_ADD:
+ case GT_ASG_SUB:
+ noway_assert(!"We should never hit any assignment operator in lowering");
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_ADD:
+ case GT_SUB:
+ if (varTypeIsFloating(tree->TypeGet()))
+ {
+ // overflow operations aren't supported on float/double types.
+ assert(!tree->gtOverflow());
+
+ // No implicit conversions at this stage as the expectation is that
+ // everything is made explicit by adding casts.
+ assert(tree->gtOp.gtOp1->TypeGet() == tree->gtOp.gtOp2->TypeGet());
+
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ break;
+ }
+
+ __fallthrough;
+
+ case GT_AND:
+ case GT_OR:
+ case GT_XOR:
+ info->srcCount = 2;
+ info->dstCount = 1;
+ // Check and make op2 contained (if it is a containable immediate)
+ CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
+ break;
+
+ case GT_RETURNTRAP:
+ // this just turns into a compare of its child with an int
+ // + a conditional call
+ info->srcCount = 1;
+ info->dstCount = 0;
+ break;
+
+ case GT_MOD:
+ case GT_UMOD:
+ NYI_IF(varTypeIsFloating(tree->TypeGet()), "FP Remainder in ARM64");
+ assert(!"Shouldn't see an integer typed GT_MOD node in ARM64");
+ break;
+
+ case GT_MUL:
+ if (tree->gtOverflow())
+ {
+ // Need a register different from target reg to check for overflow.
+ info->internalIntCount = 2;
+ }
+ __fallthrough;
+
+ case GT_DIV:
+ case GT_MULHI:
+ case GT_UDIV:
+ {
+ info->srcCount = 2;
+ info->dstCount = 1;
+ }
+ break;
+
+ case GT_INTRINSIC:
+ {
+ // TODO-ARM64-NYI
+ // Right now only Abs/Round/Sqrt are treated as math intrinsics
+ noway_assert((tree->gtIntrinsic.gtIntrinsicId == CORINFO_INTRINSIC_Abs) ||
+ (tree->gtIntrinsic.gtIntrinsicId == CORINFO_INTRINSIC_Round) ||
+ (tree->gtIntrinsic.gtIntrinsicId == CORINFO_INTRINSIC_Sqrt));
+
+ // Both operand and its result must be of the same floating point type.
+ op1 = tree->gtOp.gtOp1;
+ assert(varTypeIsFloating(op1));
+ assert(op1->TypeGet() == tree->TypeGet());
+
+ info->srcCount = 1;
+ info->dstCount = 1;
+ }
+ break;
+
+#ifdef FEATURE_SIMD
+ case GT_SIMD:
+ TreeNodeInfoInitSIMD(tree);
+ break;
+#endif // FEATURE_SIMD
+
+ case GT_CAST:
+ {
+ // TODO-ARM64-CQ: Int-To-Int conversions - castOp cannot be a memory op and must have an assigned
+ // register.
+ // see CodeGen::genIntToIntCast()
+
+ info->srcCount = 1;
+ info->dstCount = 1;
+
+ // Non-overflow casts to/from float/double are done using SSE2 instructions
+ // and that allow the source operand to be either a reg or memop. Given the
+ // fact that casts from small int to float/double are done as two-level casts,
+ // the source operand is always guaranteed to be of size 4 or 8 bytes.
+ var_types castToType = tree->CastToType();
+ GenTreePtr castOp = tree->gtCast.CastOp();
+ var_types castOpType = castOp->TypeGet();
+ if (tree->gtFlags & GTF_UNSIGNED)
+ {
+ castOpType = genUnsignedType(castOpType);
+ }
+#ifdef DEBUG
+ if (!tree->gtOverflow() && (varTypeIsFloating(castToType) || varTypeIsFloating(castOpType)))
+ {
+ // If converting to float/double, the operand must be 4 or 8 byte in size.
+ if (varTypeIsFloating(castToType))
+ {
+ unsigned opSize = genTypeSize(castOpType);
+ assert(opSize == 4 || opSize == 8);
+ }
+ }
+#endif // DEBUG
+ // Some overflow checks need a temp reg
+
+ CastInfo castInfo;
+
+ // Get information about the cast.
+ getCastDescription(tree, &castInfo);
+
+ if (castInfo.requiresOverflowCheck)
+ {
+ var_types srcType = castOp->TypeGet();
+ emitAttr cmpSize = EA_ATTR(genTypeSize(srcType));
+
+ // If we cannot store the comparisons in an immediate for either
+ // comparing against the max or min value, then we will need to
+ // reserve a temporary register.
+
+ bool canStoreMaxValue = emitter::emitIns_valid_imm_for_cmp(castInfo.typeMax, cmpSize);
+ bool canStoreMinValue = emitter::emitIns_valid_imm_for_cmp(castInfo.typeMin, cmpSize);
+
+ if (!canStoreMaxValue || !canStoreMinValue)
+ {
+ info->internalIntCount = 1;
+ }
+ }
+ }
+ break;
+
+ case GT_NEG:
+ info->srcCount = 1;
+ info->dstCount = 1;
+ break;
+
+ case GT_NOT:
+ info->srcCount = 1;
+ info->dstCount = 1;
+ break;
+
+ case GT_LSH:
+ case GT_RSH:
+ case GT_RSZ:
+ case GT_ROR:
+ {
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ GenTreePtr shiftBy = tree->gtOp.gtOp2;
+ GenTreePtr source = tree->gtOp.gtOp1;
+ if (shiftBy->IsCnsIntOrI())
+ {
+ l->clearDstCount(shiftBy);
+ info->srcCount--;
+ }
+ }
+ break;
+
+ case GT_EQ:
+ case GT_NE:
+ case GT_LT:
+ case GT_LE:
+ case GT_GE:
+ case GT_GT:
+ TreeNodeInfoInitCmp(tree);
+ break;
+
+ case GT_CKFINITE:
+ info->srcCount = 1;
+ info->dstCount = 1;
+ info->internalIntCount = 1;
+ break;
+
+ case GT_CMPXCHG:
+ info->srcCount = 3;
+ info->dstCount = 1;
+
+ // TODO-ARM64-NYI
+ NYI("CMPXCHG");
+ break;
+
+ case GT_LOCKADD:
+ info->srcCount = 2;
+ info->dstCount = 0;
+ CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
+ break;
+
+ case GT_CALL:
+ TreeNodeInfoInitCall(tree->AsCall());
+ break;
+
+ case GT_ADDR:
+ {
+ // For a GT_ADDR, the child node should not be evaluated into a register
+ GenTreePtr child = tree->gtOp.gtOp1;
+ assert(!l->isCandidateLocalRef(child));
+ l->clearDstCount(child);
+ info->srcCount = 0;
+ info->dstCount = 1;
+ }
+ break;
+
+ case GT_BLK:
+ case GT_DYN_BLK:
+ // These should all be eliminated prior to Lowering.
+ assert(!"Non-store block node in Lowering");
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_STORE_BLK:
+ case GT_STORE_OBJ:
+ case GT_STORE_DYN_BLK:
+ LowerBlockStore(tree->AsBlk());
+ TreeNodeInfoInitBlockStore(tree->AsBlk());
+ break;
+
+ case GT_INIT_VAL:
+ // Always a passthrough of its child's value.
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_LCLHEAP:
+ {
+ info->srcCount = 1;
+ info->dstCount = 1;
+
+ // Need a variable number of temp regs (see genLclHeap() in codegenamd64.cpp):
+ // Here '-' means don't care.
+ //
+ // Size? Init Memory? # temp regs
+ // 0 - 0
+ // const and <=6 ptr words - 0
+ // const and <PageSize No 0
+ // >6 ptr words Yes hasPspSym ? 1 : 0
+ // Non-const Yes hasPspSym ? 1 : 0
+ // Non-const No 2
+ //
+ // PSPSym - If the method has PSPSym increment internalIntCount by 1.
+ //
+ bool hasPspSym;
+#if FEATURE_EH_FUNCLETS
+ hasPspSym = (compiler->lvaPSPSym != BAD_VAR_NUM);
+#else
+ hasPspSym = false;
+#endif
+
+ GenTreePtr size = tree->gtOp.gtOp1;
+ if (size->IsCnsIntOrI())
+ {
+ MakeSrcContained(tree, size);
+
+ size_t sizeVal = size->gtIntCon.gtIconVal;
+
+ if (sizeVal == 0)
+ {
+ info->internalIntCount = 0;
+ }
+ else
+ {
+ // Compute the amount of memory to properly STACK_ALIGN.
+ // Note: The Gentree node is not updated here as it is cheap to recompute stack aligned size.
+ // This should also help in debugging as we can examine the original size specified with
+ // localloc.
+ sizeVal = AlignUp(sizeVal, STACK_ALIGN);
+ size_t cntStackAlignedWidthItems = (sizeVal >> STACK_ALIGN_SHIFT);
+
+ // For small allocations upto 4 'stp' instructions (i.e. 64 bytes of localloc)
+ //
+ if (cntStackAlignedWidthItems <= 4)
+ {
+ info->internalIntCount = 0;
+ }
+ else if (!compiler->info.compInitMem)
+ {
+ // No need to initialize allocated stack space.
+ if (sizeVal < compiler->eeGetPageSize())
+ {
+ info->internalIntCount = 0;
+ }
+ else
+ {
+ // We need two registers: regCnt and RegTmp
+ info->internalIntCount = 2;
+ }
+ }
+ else
+ {
+ // greater than 4 and need to zero initialize allocated stack space.
+ // If the method has PSPSym, we need an internal register to hold regCnt
+ // since targetReg allocated to GT_LCLHEAP node could be the same as one of
+ // the the internal registers.
+ info->internalIntCount = hasPspSym ? 1 : 0;
+ }
+ }
+ }
+ else
+ {
+ if (!compiler->info.compInitMem)
+ {
+ info->internalIntCount = 2;
+ }
+ else
+ {
+ // If the method has PSPSym, we need an internal register to hold regCnt
+ // since targetReg allocated to GT_LCLHEAP node could be the same as one of
+ // the the internal registers.
+ info->internalIntCount = hasPspSym ? 1 : 0;
+ }
+ }
+
+ // If the method has PSPSym, we would need an addtional register to relocate it on stack.
+ if (hasPspSym)
+ {
+ // Exclude const size 0
+ if (!size->IsCnsIntOrI() || (size->gtIntCon.gtIconVal > 0))
+ info->internalIntCount++;
+ }
+ }
+ break;
+
+ case GT_ARR_BOUNDS_CHECK:
+#ifdef FEATURE_SIMD
+ case GT_SIMD_CHK:
+#endif // FEATURE_SIMD
+ {
+ GenTreeBoundsChk* node = tree->AsBoundsChk();
+ // Consumes arrLen & index - has no result
+ info->srcCount = 2;
+ info->dstCount = 0;
+
+ GenTree* intCns = nullptr;
+ GenTree* other = nullptr;
+ if (CheckImmedAndMakeContained(tree, node->gtIndex))
+ {
+ intCns = node->gtIndex;
+ other = node->gtArrLen;
+ }
+ else if (CheckImmedAndMakeContained(tree, node->gtArrLen))
+ {
+ intCns = node->gtArrLen;
+ other = node->gtIndex;
+ }
+ else
+ {
+ other = node->gtIndex;
+ }
+ }
+ break;
+
+ case GT_ARR_ELEM:
+ // These must have been lowered to GT_ARR_INDEX
+ noway_assert(!"We should never see a GT_ARR_ELEM in lowering");
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_ARR_INDEX:
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ // We need one internal register when generating code for GT_ARR_INDEX, however the
+ // register allocator always may just give us the same one as it gives us for the 'dst'
+ // as a workaround we will just ask for two internal registers.
+ //
+ info->internalIntCount = 2;
+
+ // For GT_ARR_INDEX, the lifetime of the arrObj must be extended because it is actually used multiple
+ // times while the result is being computed.
+ tree->AsArrIndex()->ArrObj()->gtLsraInfo.isDelayFree = true;
+ info->hasDelayFreeSrc = true;
+ break;
+
+ case GT_ARR_OFFSET:
+ // This consumes the offset, if any, the arrObj and the effective index,
+ // and produces the flattened offset for this dimension.
+ info->srcCount = 3;
+ info->dstCount = 1;
+ info->internalIntCount = 1;
+
+ // we don't want to generate code for this
+ if (tree->gtArrOffs.gtOffset->IsIntegralConst(0))
+ {
+ MakeSrcContained(tree, tree->gtArrOffs.gtOffset);
+ }
+ break;
+
+ case GT_LEA:
+ {
+ GenTreeAddrMode* lea = tree->AsAddrMode();
+
+ GenTree* base = lea->Base();
+ GenTree* index = lea->Index();
+ unsigned cns = lea->gtOffset;
+
+ // This LEA is instantiating an address,
+ // so we set up the srcCount and dstCount here.
+ info->srcCount = 0;
+ if (base != nullptr)
+ {
+ info->srcCount++;
+ }
+ if (index != nullptr)
+ {
+ info->srcCount++;
+ }
+ info->dstCount = 1;
+
+ // On ARM64 we may need a single internal register
+ // (when both conditions are true then we still only need a single internal register)
+ if ((index != nullptr) && (cns != 0))
+ {
+ // ARM64 does not support both Index and offset so we need an internal register
+ info->internalIntCount = 1;
+ }
+ else if (!emitter::emitIns_valid_imm_for_add(cns, EA_8BYTE))
+ {
+ // This offset can't be contained in the add instruction, so we need an internal register
+ info->internalIntCount = 1;
+ }
+ }
+ break;
+
+ case GT_STOREIND:
+ {
+ info->srcCount = 2;
+ info->dstCount = 0;
+ GenTree* src = tree->gtOp.gtOp2;
+
+ if (compiler->codeGen->gcInfo.gcIsWriteBarrierAsgNode(tree))
+ {
+ TreeNodeInfoInitGCWriteBarrier(tree);
+ break;
+ }
+ if (!varTypeIsFloating(src->TypeGet()) && src->IsIntegralConst(0))
+ {
+ // an integer zero for 'src' can be contained.
+ MakeSrcContained(tree, src);
+ }
+
+ TreeNodeInfoInitIndir(tree);
+ }
+ break;
+
+ case GT_NULLCHECK:
+ info->dstCount = 0;
+ info->srcCount = 1;
+ info->isLocalDefUse = true;
+ // null check is an indirection on an addr
+ TreeNodeInfoInitIndir(tree);
+ break;
+
+ case GT_IND:
+ info->dstCount = 1;
+ info->srcCount = 1;
+ TreeNodeInfoInitIndir(tree);
+ break;
+
+ case GT_CATCH_ARG:
+ info->srcCount = 0;
+ info->dstCount = 1;
+ info->setDstCandidates(l, RBM_EXCEPTION_OBJECT);
+ break;
+
+ case GT_CLS_VAR:
+ info->srcCount = 0;
+ // GT_CLS_VAR, by the time we reach the backend, must always
+ // be a pure use.
+ // It will produce a result of the type of the
+ // node, and use an internal register for the address.
+
+ info->dstCount = 1;
+ assert((tree->gtFlags & (GTF_VAR_DEF | GTF_VAR_USEASG | GTF_VAR_USEDEF)) == 0);
+ info->internalIntCount = 1;
+ break;
+ } // end switch (tree->OperGet())
+
+ // We need to be sure that we've set info->srcCount and info->dstCount appropriately
+ assert((info->dstCount < 2) || tree->IsMultiRegCall());
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitReturn: Set the NodeInfo for a GT_RETURN.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitReturn(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+ GenTree* op1 = tree->gtGetOp1();
+ regMaskTP useCandidates = RBM_NONE;
+
+ info->srcCount = (tree->TypeGet() == TYP_VOID) ? 0 : 1;
+ info->dstCount = 0;
+
+ if (varTypeIsStruct(tree))
+ {
+ // op1 has to be either an lclvar or a multi-reg returning call
+ if ((op1->OperGet() == GT_LCL_VAR) || (op1->OperGet() == GT_LCL_FLD))
+ {
+ GenTreeLclVarCommon* lclVarCommon = op1->AsLclVarCommon();
+ LclVarDsc* varDsc = &(compiler->lvaTable[lclVarCommon->gtLclNum]);
+ assert(varDsc->lvIsMultiRegRet);
+
+ // Mark var as contained if not enregistrable.
+ if (!varTypeIsEnregisterableStruct(op1))
+ {
+ MakeSrcContained(tree, op1);
+ }
+ }
+ else
+ {
+ noway_assert(op1->IsMultiRegCall());
+
+ ReturnTypeDesc* retTypeDesc = op1->AsCall()->GetReturnTypeDesc();
+ info->srcCount = retTypeDesc->GetReturnRegCount();
+ useCandidates = retTypeDesc->GetABIReturnRegs();
+ }
+ }
+ else
+ {
+ // Non-struct type return - determine useCandidates
+ switch (tree->TypeGet())
+ {
+ case TYP_VOID:
+ useCandidates = RBM_NONE;
+ break;
+ case TYP_FLOAT:
+ useCandidates = RBM_FLOATRET;
+ break;
+ case TYP_DOUBLE:
+ useCandidates = RBM_DOUBLERET;
+ break;
+ case TYP_LONG:
+ useCandidates = RBM_LNGRET;
+ break;
+ default:
+ useCandidates = RBM_INTRET;
+ break;
+ }
+ }
+
+ if (useCandidates != RBM_NONE)
+ {
+ tree->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, useCandidates);
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitCall: Set the NodeInfo for a call.
+//
+// Arguments:
+// call - The call node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitCall(GenTreeCall* call)
+{
+ TreeNodeInfo* info = &(call->gtLsraInfo);
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+ bool hasMultiRegRetVal = false;
+ ReturnTypeDesc* retTypeDesc = nullptr;
+
+ info->srcCount = 0;
+ if (call->TypeGet() != TYP_VOID)
+ {
+ hasMultiRegRetVal = call->HasMultiRegRetVal();
+ if (hasMultiRegRetVal)
+ {
+ // dst count = number of registers in which the value is returned by call
+ retTypeDesc = call->GetReturnTypeDesc();
+ info->dstCount = retTypeDesc->GetReturnRegCount();
+ }
+ else
+ {
+ info->dstCount = 1;
+ }
+ }
+ else
+ {
+ info->dstCount = 0;
+ }
+
+ GenTree* ctrlExpr = call->gtControlExpr;
+ if (call->gtCallType == CT_INDIRECT)
+ {
+ // either gtControlExpr != null or gtCallAddr != null.
+ // Both cannot be non-null at the same time.
+ assert(ctrlExpr == nullptr);
+ assert(call->gtCallAddr != nullptr);
+ ctrlExpr = call->gtCallAddr;
+ }
+
+ // set reg requirements on call target represented as control sequence.
+ if (ctrlExpr != nullptr)
+ {
+ // we should never see a gtControlExpr whose type is void.
+ assert(ctrlExpr->TypeGet() != TYP_VOID);
+
+ info->srcCount++;
+
+ // In case of fast tail implemented as jmp, make sure that gtControlExpr is
+ // computed into a register.
+ if (call->IsFastTailCall())
+ {
+ // Fast tail call - make sure that call target is always computed in IP0
+ // so that epilog sequence can generate "br xip0" to achieve fast tail call.
+ ctrlExpr->gtLsraInfo.setSrcCandidates(l, genRegMask(REG_IP0));
+ }
+ }
+
+ RegisterType registerType = call->TypeGet();
+
+ // Set destination candidates for return value of the call.
+ if (hasMultiRegRetVal)
+ {
+ assert(retTypeDesc != nullptr);
+ info->setDstCandidates(l, retTypeDesc->GetABIReturnRegs());
+ }
+ else if (varTypeIsFloating(registerType))
+ {
+ info->setDstCandidates(l, RBM_FLOATRET);
+ }
+ else if (registerType == TYP_LONG)
+ {
+ info->setDstCandidates(l, RBM_LNGRET);
+ }
+ else
+ {
+ info->setDstCandidates(l, RBM_INTRET);
+ }
+
+ // If there is an explicit this pointer, we don't want that node to produce anything
+ // as it is redundant
+ if (call->gtCallObjp != nullptr)
+ {
+ GenTreePtr thisPtrNode = call->gtCallObjp;
+
+ if (thisPtrNode->gtOper == GT_PUTARG_REG)
+ {
+ l->clearOperandCounts(thisPtrNode);
+ l->clearDstCount(thisPtrNode->gtOp.gtOp1);
+ }
+ else
+ {
+ l->clearDstCount(thisPtrNode);
+ }
+ }
+
+ // First, count reg args
+ bool callHasFloatRegArgs = false;
+
+ for (GenTreePtr list = call->gtCallLateArgs; list; list = list->MoveNext())
+ {
+ assert(list->OperIsList());
+
+ GenTreePtr argNode = list->Current();
+
+ fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, argNode);
+ assert(curArgTabEntry);
+
+ if (curArgTabEntry->regNum == REG_STK)
+ {
+ // late arg that is not passed in a register
+ assert(argNode->gtOper == GT_PUTARG_STK);
+
+ TreeNodeInfoInitPutArgStk(argNode->AsPutArgStk(), curArgTabEntry);
+ continue;
+ }
+
+ var_types argType = argNode->TypeGet();
+ bool argIsFloat = varTypeIsFloating(argType);
+ callHasFloatRegArgs |= argIsFloat;
+
+ regNumber argReg = curArgTabEntry->regNum;
+ // We will setup argMask to the set of all registers that compose this argument
+ regMaskTP argMask = 0;
+
+ argNode = argNode->gtEffectiveVal();
+
+ // A GT_FIELD_LIST has a TYP_VOID, but is used to represent a multireg struct
+ if (varTypeIsStruct(argNode) || (argNode->gtOper == GT_FIELD_LIST))
+ {
+ GenTreePtr actualArgNode = argNode;
+ unsigned originalSize = 0;
+
+ if (argNode->gtOper == GT_FIELD_LIST)
+ {
+ // There could be up to 2-4 PUTARG_REGs in the list (3 or 4 can only occur for HFAs)
+ GenTreeFieldList* fieldListPtr = argNode->AsFieldList();
+
+ // Initailize the first register and the first regmask in our list
+ regNumber targetReg = argReg;
+ regMaskTP targetMask = genRegMask(targetReg);
+ unsigned iterationNum = 0;
+ originalSize = 0;
+
+ for (; fieldListPtr; fieldListPtr = fieldListPtr->Rest())
+ {
+ GenTreePtr putArgRegNode = fieldListPtr->Current();
+ assert(putArgRegNode->gtOper == GT_PUTARG_REG);
+ GenTreePtr putArgChild = putArgRegNode->gtOp.gtOp1;
+
+ originalSize += REGSIZE_BYTES; // 8 bytes
+
+ // Record the register requirements for the GT_PUTARG_REG node
+ putArgRegNode->gtLsraInfo.setDstCandidates(l, targetMask);
+ putArgRegNode->gtLsraInfo.setSrcCandidates(l, targetMask);
+
+ // To avoid redundant moves, request that the argument child tree be
+ // computed in the register in which the argument is passed to the call.
+ putArgChild->gtLsraInfo.setSrcCandidates(l, targetMask);
+
+ // We consume one source for each item in this list
+ info->srcCount++;
+ iterationNum++;
+
+ // Update targetReg and targetMask for the next putarg_reg (if any)
+ targetReg = genRegArgNext(targetReg);
+ targetMask = genRegMask(targetReg);
+ }
+ }
+ else
+ {
+#ifdef DEBUG
+ compiler->gtDispTreeRange(BlockRange(), argNode);
+#endif
+ noway_assert(!"Unsupported TYP_STRUCT arg kind");
+ }
+
+ unsigned slots = ((unsigned)(roundUp(originalSize, REGSIZE_BYTES))) / REGSIZE_BYTES;
+ regNumber curReg = argReg;
+ regNumber lastReg = argIsFloat ? REG_ARG_FP_LAST : REG_ARG_LAST;
+ unsigned remainingSlots = slots;
+
+ while (remainingSlots > 0)
+ {
+ argMask |= genRegMask(curReg);
+ remainingSlots--;
+
+ if (curReg == lastReg)
+ break;
+
+ curReg = genRegArgNext(curReg);
+ }
+
+ // Struct typed arguments must be fully passed in registers (Reg/Stk split not allowed)
+ noway_assert(remainingSlots == 0);
+ argNode->gtLsraInfo.internalIntCount = 0;
+ }
+ else // A scalar argument (not a struct)
+ {
+ // We consume one source
+ info->srcCount++;
+
+ argMask |= genRegMask(argReg);
+ argNode->gtLsraInfo.setDstCandidates(l, argMask);
+ argNode->gtLsraInfo.setSrcCandidates(l, argMask);
+
+ if (argNode->gtOper == GT_PUTARG_REG)
+ {
+ GenTreePtr putArgChild = argNode->gtOp.gtOp1;
+
+ // To avoid redundant moves, request that the argument child tree be
+ // computed in the register in which the argument is passed to the call.
+ putArgChild->gtLsraInfo.setSrcCandidates(l, argMask);
+ }
+ }
+ }
+
+ // Now, count stack args
+ // Note that these need to be computed into a register, but then
+ // they're just stored to the stack - so the reg doesn't
+ // need to remain live until the call. In fact, it must not
+ // because the code generator doesn't actually consider it live,
+ // so it can't be spilled.
+
+ GenTreePtr args = call->gtCallArgs;
+ while (args)
+ {
+ GenTreePtr arg = args->gtOp.gtOp1;
+
+ // Skip arguments that have been moved to the Late Arg list
+ if (!(args->gtFlags & GTF_LATE_ARG))
+ {
+ if (arg->gtOper == GT_PUTARG_STK)
+ {
+ fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, arg);
+ assert(curArgTabEntry);
+
+ assert(curArgTabEntry->regNum == REG_STK);
+
+ TreeNodeInfoInitPutArgStk(arg->AsPutArgStk(), curArgTabEntry);
+ }
+ else
+ {
+ TreeNodeInfo* argInfo = &(arg->gtLsraInfo);
+ if (argInfo->dstCount != 0)
+ {
+ argInfo->isLocalDefUse = true;
+ }
+
+ argInfo->dstCount = 0;
+ }
+ }
+ args = args->gtOp.gtOp2;
+ }
+
+ // If it is a fast tail call, it is already preferenced to use IP0.
+ // Therefore, no need set src candidates on call tgt again.
+ if (call->IsVarargs() && callHasFloatRegArgs && !call->IsFastTailCall() && (ctrlExpr != nullptr))
+ {
+ // Don't assign the call target to any of the argument registers because
+ // we will use them to also pass floating point arguments as required
+ // by Arm64 ABI.
+ ctrlExpr->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~(RBM_ARG_REGS));
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitPutArgStk: Set the NodeInfo for a GT_PUTARG_STK node
+//
+// Arguments:
+// argNode - a GT_PUTARG_STK node
+//
+// Return Value:
+// None.
+//
+// Notes:
+// Set the child node(s) to be contained when we have a multireg arg
+//
+void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* argNode, fgArgTabEntryPtr info)
+{
+ assert(argNode->gtOper == GT_PUTARG_STK);
+
+ GenTreePtr putArgChild = argNode->gtOp.gtOp1;
+
+ // Initialize 'argNode' as not contained, as this is both the default case
+ // and how MakeSrcContained expects to find things setup.
+ //
+ argNode->gtLsraInfo.srcCount = 1;
+ argNode->gtLsraInfo.dstCount = 0;
+
+ // Do we have a TYP_STRUCT argument (or a GT_FIELD_LIST), if so it must be a multireg pass-by-value struct
+ if ((putArgChild->TypeGet() == TYP_STRUCT) || (putArgChild->OperGet() == GT_FIELD_LIST))
+ {
+ // We will use store instructions that each write a register sized value
+
+ if (putArgChild->OperGet() == GT_FIELD_LIST)
+ {
+ // We consume all of the items in the GT_FIELD_LIST
+ argNode->gtLsraInfo.srcCount = info->numSlots;
+ }
+ else
+ {
+ // We could use a ldp/stp sequence so we need two internal registers
+ argNode->gtLsraInfo.internalIntCount = 2;
+
+ if (putArgChild->OperGet() == GT_OBJ)
+ {
+ GenTreePtr objChild = putArgChild->gtOp.gtOp1;
+ if (objChild->OperGet() == GT_LCL_VAR_ADDR)
+ {
+ // We will generate all of the code for the GT_PUTARG_STK, the GT_OBJ and the GT_LCL_VAR_ADDR
+ // as one contained operation
+ //
+ MakeSrcContained(putArgChild, objChild);
+ }
+ }
+
+ // We will generate all of the code for the GT_PUTARG_STK and it's child node
+ // as one contained operation
+ //
+ MakeSrcContained(argNode, putArgChild);
+ }
+ }
+ else
+ {
+ // We must not have a multi-reg struct
+ assert(info->numSlots == 1);
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitBlockStore: Set the NodeInfo for a block store.
+//
+// Arguments:
+// blkNode - The block store node of interest
+//
+// Return Value:
+// None.
+//
+// Notes:
+
+void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
+{
+ GenTree* dstAddr = blkNode->Addr();
+ unsigned size = blkNode->gtBlkSize;
+ GenTree* source = blkNode->Data();
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+ // Sources are dest address and initVal or source.
+ // We may require an additional source or temp register for the size.
+ blkNode->gtLsraInfo.srcCount = 2;
+ blkNode->gtLsraInfo.dstCount = 0;
+ GenTreePtr srcAddrOrFill = nullptr;
+ bool isInitBlk = blkNode->OperIsInitBlkOp();
+
+ if (!isInitBlk)
+ {
+ // CopyObj or CopyBlk
+ if (source->gtOper == GT_IND)
+ {
+ srcAddrOrFill = blkNode->Data()->gtGetOp1();
+ // We're effectively setting source as contained, but can't call MakeSrcContained, because the
+ // "inheritance" of the srcCount is to a child not a parent - it would "just work" but could be misleading.
+ // If srcAddr is already non-contained, we don't need to change it.
+ if (srcAddrOrFill->gtLsraInfo.getDstCount() == 0)
+ {
+ srcAddrOrFill->gtLsraInfo.setDstCount(1);
+ srcAddrOrFill->gtLsraInfo.setSrcCount(source->gtLsraInfo.srcCount);
+ }
+ m_lsra->clearOperandCounts(source);
+ }
+ else if (!source->IsMultiRegCall() && !source->OperIsSIMD())
+ {
+ assert(source->IsLocal());
+ MakeSrcContained(blkNode, source);
+ }
+ }
+
+ if (isInitBlk)
+ {
+ GenTreePtr initVal = source;
+ if (initVal->OperIsInitVal())
+ {
+ initVal = initVal->gtGetOp1();
+ }
+ srcAddrOrFill = initVal;
+
+#if 0
+ if (blkNode->gtBlkOpKind == GenTreeBlk::BlkOpKindUnroll)
+ {
+ // TODO-ARM64-CQ: Currently we generate a helper call for every
+ // initblk we encounter. Later on we should implement loop unrolling
+ // code sequences to improve CQ.
+ // For reference see the code in lsraxarch.cpp.
+ }
+ else
+#endif // 0
+ {
+ assert(blkNode->gtBlkOpKind == GenTreeBlk::BlkOpKindHelper);
+ // The helper follows the regular ABI.
+ dstAddr->gtLsraInfo.setSrcCandidates(l, RBM_ARG_0);
+ initVal->gtLsraInfo.setSrcCandidates(l, RBM_ARG_1);
+ if (size != 0)
+ {
+ // Reserve a temp register for the block size argument.
+ blkNode->gtLsraInfo.setInternalCandidates(l, RBM_ARG_2);
+ blkNode->gtLsraInfo.internalIntCount = 1;
+ }
+ else
+ {
+ // The block size argument is a third argument to GT_STORE_DYN_BLK
+ noway_assert(blkNode->gtOper == GT_STORE_DYN_BLK);
+ blkNode->gtLsraInfo.setSrcCount(3);
+ GenTree* sizeNode = blkNode->AsDynBlk()->gtDynamicSize;
+ sizeNode->gtLsraInfo.setSrcCandidates(l, RBM_ARG_2);
+ }
+ }
+ }
+ else
+ {
+ // CopyObj or CopyBlk
+ // Sources are src and dest and size if not constant.
+
+ if (blkNode->OperGet() == GT_STORE_OBJ)
+ {
+ // CopyObj
+
+ // We don't need to materialize the struct size but we still need
+ // a temporary register to perform the sequence of loads and stores.
+ blkNode->gtLsraInfo.internalIntCount = 1;
+
+ dstAddr->gtLsraInfo.setSrcCandidates(l, RBM_WRITE_BARRIER_DST_BYREF);
+ // If we have a source address we want it in REG_WRITE_BARRIER_SRC_BYREF.
+ // Otherwise, if it is a local, codegen will put its address in REG_WRITE_BARRIER_SRC_BYREF,
+ // which is killed by a StoreObj (and thus needn't be reserved).
+ if (srcAddrOrFill != nullptr)
+ {
+ srcAddrOrFill->gtLsraInfo.setSrcCandidates(l, RBM_WRITE_BARRIER_SRC_BYREF);
+ }
+ }
+ else
+ {
+ // CopyBlk
+ short internalIntCount = 0;
+ regMaskTP internalIntCandidates = RBM_NONE;
+
+#if 0
+ if (blkNode->gtBlkOpKind == GenTreeBlk::BlkOpKindUnroll)
+ {
+ // TODO-ARM64-CQ: cpblk loop unrolling is currently not implemented.
+ // In case of a CpBlk with a constant size and less than CPBLK_UNROLL_LIMIT size
+ // we should unroll the loop to improve CQ.
+ // For reference see the code in lsraxarch.cpp.
+ }
+ else
+#endif // 0
+ {
+ assert(blkNode->gtBlkOpKind == GenTreeBlk::BlkOpKindHelper);
+ dstAddr->gtLsraInfo.setSrcCandidates(l, RBM_ARG_0);
+ // The srcAddr goes in arg1.
+ if (srcAddrOrFill != nullptr)
+ {
+ srcAddrOrFill->gtLsraInfo.setSrcCandidates(l, RBM_ARG_1);
+ }
+ if (size != 0)
+ {
+ // Reserve a temp register for the block size argument.
+ internalIntCandidates |= RBM_ARG_2;
+ internalIntCount++;
+ }
+ else
+ {
+ // The block size argument is a third argument to GT_STORE_DYN_BLK
+ noway_assert(blkNode->gtOper == GT_STORE_DYN_BLK);
+ blkNode->gtLsraInfo.setSrcCount(3);
+ GenTree* blockSize = blkNode->AsDynBlk()->gtDynamicSize;
+ blockSize->gtLsraInfo.setSrcCandidates(l, RBM_ARG_2);
+ }
+ }
+ if (internalIntCount != 0)
+ {
+ blkNode->gtLsraInfo.internalIntCount = internalIntCount;
+ blkNode->gtLsraInfo.setInternalCandidates(l, internalIntCandidates);
+ }
+ }
+ }
+}
+
+#ifdef FEATURE_SIMD
+//------------------------------------------------------------------------
+// TreeNodeInfoInitSIMD: Set the NodeInfo for a GT_SIMD tree.
+//
+// Arguments:
+// tree - The GT_SIMD node of interest
+//
+// Return Value:
+// None.
+
+void Lowering::TreeNodeInfoInitSIMD(GenTree* tree)
+{
+ NYI("TreeNodeInfoInitSIMD");
+ GenTreeSIMD* simdTree = tree->AsSIMD();
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* lsra = m_lsra;
+ info->dstCount = 1;
+ switch (simdTree->gtSIMDIntrinsicID)
+ {
+ case SIMDIntrinsicInit:
+ {
+ // This sets all fields of a SIMD struct to the given value.
+ // Mark op1 as contained if it is either zero or int constant of all 1's.
+ info->srcCount = 1;
+ GenTree* op1 = tree->gtOp.gtOp1;
+ if (op1->IsIntegralConst(0) || (simdTree->gtSIMDBaseType == TYP_INT && op1->IsCnsIntOrI() &&
+ op1->AsIntConCommon()->IconValue() == 0xffffffff) ||
+ (simdTree->gtSIMDBaseType == TYP_LONG && op1->IsCnsIntOrI() &&
+ op1->AsIntConCommon()->IconValue() == 0xffffffffffffffffLL))
+ {
+ MakeSrcContained(tree, tree->gtOp.gtOp1);
+ info->srcCount = 0;
+ }
+ }
+ break;
+
+ case SIMDIntrinsicInitN:
+ info->srcCount = (int)(simdTree->gtSIMDSize / genTypeSize(simdTree->gtSIMDBaseType));
+ // Need an internal register to stitch together all the values into a single vector in an XMM reg.
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ break;
+
+ case SIMDIntrinsicInitArray:
+ // We have an array and an index, which may be contained.
+ info->srcCount = 2;
+ CheckImmedAndMakeContained(tree, tree->gtGetOp2());
+ break;
+
+ case SIMDIntrinsicDiv:
+ // SSE2 has no instruction support for division on integer vectors
+ noway_assert(varTypeIsFloating(simdTree->gtSIMDBaseType));
+ info->srcCount = 2;
+ break;
+
+ case SIMDIntrinsicAbs:
+ // This gets implemented as bitwise-And operation with a mask
+ // and hence should never see it here.
+ unreached();
+ break;
+
+ case SIMDIntrinsicSqrt:
+ // SSE2 has no instruction support for sqrt on integer vectors.
+ noway_assert(varTypeIsFloating(simdTree->gtSIMDBaseType));
+ info->srcCount = 1;
+ break;
+
+ case SIMDIntrinsicAdd:
+ case SIMDIntrinsicSub:
+ case SIMDIntrinsicMul:
+ case SIMDIntrinsicBitwiseAnd:
+ case SIMDIntrinsicBitwiseAndNot:
+ case SIMDIntrinsicBitwiseOr:
+ case SIMDIntrinsicBitwiseXor:
+ case SIMDIntrinsicMin:
+ case SIMDIntrinsicMax:
+ info->srcCount = 2;
+
+ // SSE2 32-bit integer multiplication requires two temp regs
+ if (simdTree->gtSIMDIntrinsicID == SIMDIntrinsicMul && simdTree->gtSIMDBaseType == TYP_INT)
+ {
+ info->internalFloatCount = 2;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ }
+ break;
+
+ case SIMDIntrinsicEqual:
+ info->srcCount = 2;
+ break;
+
+ // SSE2 doesn't support < and <= directly on int vectors.
+ // Instead we need to use > and >= with swapped operands.
+ case SIMDIntrinsicLessThan:
+ case SIMDIntrinsicLessThanOrEqual:
+ info->srcCount = 2;
+ noway_assert(!varTypeIsIntegral(simdTree->gtSIMDBaseType));
+ break;
+
+ // SIMDIntrinsicEqual is supported only on non-floating point base type vectors.
+ // SSE2 cmpps/pd doesn't support > and >= directly on float/double vectors.
+ // Instead we need to use < and <= with swapped operands.
+ case SIMDIntrinsicGreaterThan:
+ noway_assert(!varTypeIsFloating(simdTree->gtSIMDBaseType));
+ info->srcCount = 2;
+ break;
+
+ case SIMDIntrinsicGreaterThanOrEqual:
+ noway_assert(!varTypeIsFloating(simdTree->gtSIMDBaseType));
+ info->srcCount = 2;
+
+ // a >= b = (a==b) | (a>b)
+ // To hold intermediate result of a==b and a>b we need two distinct
+ // registers. We can use targetReg and one internal reg provided
+ // they are distinct which is not guaranteed. Therefore, we request
+ // two internal registers so that one of the internal registers has
+ // to be different from targetReg.
+ info->internalFloatCount = 2;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ break;
+
+ case SIMDIntrinsicOpEquality:
+ case SIMDIntrinsicOpInEquality:
+ // Need two SIMD registers as scratch.
+ // See genSIMDIntrinsicRelOp() for details on code sequence generate and
+ // the need for two scratch registers.
+ info->srcCount = 2;
+ info->internalFloatCount = 2;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ break;
+
+ case SIMDIntrinsicDotProduct:
+ // Also need an internal register as scratch. Further we need that targetReg and internal reg
+ // are two distinct regs. It is achieved by requesting two internal registers and one of them
+ // has to be different from targetReg.
+ //
+ // See genSIMDIntrinsicDotProduct() for details on code sequence generated and
+ // the need for scratch registers.
+ info->srcCount = 2;
+ info->internalFloatCount = 2;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ break;
+
+ case SIMDIntrinsicGetItem:
+ // This implements get_Item method. The sources are:
+ // - the source SIMD struct
+ // - index (which element to get)
+ // The result is baseType of SIMD struct.
+ info->srcCount = 2;
+
+ op2 = tree->gtGetOp2();
+
+ // If the index is a constant, mark it as contained.
+ if (CheckImmedAndMakeContained(tree, op2))
+ {
+ info->srcCount = 1;
+ }
+
+ // If the index is not a constant, we will use the SIMD temp location to store the vector.
+ // Otherwise, if the baseType is floating point, the targetReg will be a xmm reg and we
+ // can use that in the process of extracting the element.
+ // In all other cases with constant index, we need a temp xmm register to extract the
+ // element if index is other than zero.
+ if (!op2->IsCnsIntOrI())
+ {
+ (void)comp->getSIMDInitTempVarNum();
+ }
+ else if (!varTypeIsFloating(simdTree->gtSIMDBaseType) && !op2->IsIntegralConst(0))
+ {
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ }
+ break;
+
+ case SIMDIntrinsicCast:
+ info->srcCount = 1;
+ break;
+
+ // These should have been transformed in terms of other intrinsics
+ case SIMDIntrinsicOpEquality:
+ case SIMDIntrinsicOpInEquality:
+ assert("OpEquality/OpInEquality intrinsics should not be seen during Lowering.");
+ unreached();
+
+ case SIMDIntrinsicGetX:
+ case SIMDIntrinsicGetY:
+ case SIMDIntrinsicGetZ:
+ case SIMDIntrinsicGetW:
+ case SIMDIntrinsicGetOne:
+ case SIMDIntrinsicGetZero:
+ case SIMDIntrinsicGetLength:
+ case SIMDIntrinsicGetAllOnes:
+ assert(!"Get intrinsics should not be seen during Lowering.");
+ unreached();
+
+ default:
+ noway_assert(!"Unimplemented SIMD node type.");
+ unreached();
+ }
+}
+#endif // FEATURE_SIMD
+
+void Lowering::TreeNodeInfoInitGCWriteBarrier(GenTree* tree)
+{
+ GenTreePtr dst = tree;
+ GenTreePtr addr = tree->gtOp.gtOp1;
+ GenTreePtr src = tree->gtOp.gtOp2;
+
+ if (addr->OperGet() == GT_LEA)
+ {
+ // In the case where we are doing a helper assignment, if the dst
+ // is an indir through an lea, we need to actually instantiate the
+ // lea in a register
+ GenTreeAddrMode* lea = addr->AsAddrMode();
+
+ short leaSrcCount = 0;
+ if (lea->Base() != nullptr)
+ {
+ leaSrcCount++;
+ }
+ if (lea->Index() != nullptr)
+ {
+ leaSrcCount++;
+ }
+ lea->gtLsraInfo.srcCount = leaSrcCount;
+ lea->gtLsraInfo.dstCount = 1;
+ }
+
+#if NOGC_WRITE_BARRIERS
+ // For the NOGC JIT Helper calls
+ //
+ // the 'addr' goes into x14 (REG_WRITE_BARRIER_DST_BYREF)
+ // the 'src' goes into x15 (REG_WRITE_BARRIER)
+ //
+ addr->gtLsraInfo.setSrcCandidates(m_lsra, RBM_WRITE_BARRIER_DST_BYREF);
+ src->gtLsraInfo.setSrcCandidates(m_lsra, RBM_WRITE_BARRIER);
+#else
+ // For the standard JIT Helper calls
+ // op1 goes into REG_ARG_0 and
+ // op2 goes into REG_ARG_1
+ //
+ addr->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_0);
+ src->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_1);
+#endif // NOGC_WRITE_BARRIERS
+
+ // Both src and dst must reside in a register, which they should since we haven't set
+ // either of them as contained.
+ assert(addr->gtLsraInfo.dstCount == 1);
+ assert(src->gtLsraInfo.dstCount == 1);
+}
+
+//-----------------------------------------------------------------------------------------
+// TreeNodeInfoInitIndir: Specify register requirements for address expression of an indirection operation.
+//
+// Arguments:
+// indirTree - GT_IND or GT_STOREIND gentree node
+//
+void Lowering::TreeNodeInfoInitIndir(GenTreePtr indirTree)
+{
+ assert(indirTree->OperIsIndir());
+ // If this is the rhs of a block copy (i.e. non-enregisterable struct),
+ // it has no register requirements.
+ if (indirTree->TypeGet() == TYP_STRUCT)
+ {
+ return;
+ }
+
+ GenTreePtr addr = indirTree->gtGetOp1();
+ TreeNodeInfo* info = &(indirTree->gtLsraInfo);
+
+ GenTreePtr base = nullptr;
+ GenTreePtr index = nullptr;
+ unsigned cns = 0;
+ unsigned mul;
+ bool rev;
+ bool modifiedSources = false;
+
+ if ((addr->OperGet() == GT_LEA) && IsSafeToContainMem(indirTree, addr))
+ {
+ GenTreeAddrMode* lea = addr->AsAddrMode();
+ base = lea->Base();
+ index = lea->Index();
+ cns = lea->gtOffset;
+
+ m_lsra->clearOperandCounts(addr);
+ // The srcCount is decremented because addr is now "contained",
+ // then we account for the base and index below, if they are non-null.
+ info->srcCount--;
+ }
+ else if (comp->codeGen->genCreateAddrMode(addr, -1, true, 0, &rev, &base, &index, &mul, &cns, true /*nogen*/) &&
+ !(modifiedSources = AreSourcesPossiblyModifiedLocals(indirTree, base, index)))
+ {
+ // An addressing mode will be constructed that may cause some
+ // nodes to not need a register, and cause others' lifetimes to be extended
+ // to the GT_IND or even its parent if it's an assignment
+
+ assert(base != addr);
+ m_lsra->clearOperandCounts(addr);
+
+ GenTreePtr arrLength = nullptr;
+
+ // Traverse the computation below GT_IND to find the operands
+ // for the addressing mode, marking the various constants and
+ // intermediate results as not consuming/producing.
+ // If the traversal were more complex, we might consider using
+ // a traversal function, but the addressing mode is only made
+ // up of simple arithmetic operators, and the code generator
+ // only traverses one leg of each node.
+
+ bool foundBase = (base == nullptr);
+ bool foundIndex = (index == nullptr);
+ GenTreePtr nextChild = nullptr;
+ for (GenTreePtr child = addr; child != nullptr && !child->OperIsLeaf(); child = nextChild)
+ {
+ nextChild = nullptr;
+ GenTreePtr op1 = child->gtOp.gtOp1;
+ GenTreePtr op2 = (child->OperIsBinary()) ? child->gtOp.gtOp2 : nullptr;
+
+ if (op1 == base)
+ {
+ foundBase = true;
+ }
+ else if (op1 == index)
+ {
+ foundIndex = true;
+ }
+ else
+ {
+ m_lsra->clearOperandCounts(op1);
+ if (!op1->OperIsLeaf())
+ {
+ nextChild = op1;
+ }
+ }
+
+ if (op2 != nullptr)
+ {
+ if (op2 == base)
+ {
+ foundBase = true;
+ }
+ else if (op2 == index)
+ {
+ foundIndex = true;
+ }
+ else
+ {
+ m_lsra->clearOperandCounts(op2);
+ if (!op2->OperIsLeaf())
+ {
+ assert(nextChild == nullptr);
+ nextChild = op2;
+ }
+ }
+ }
+ }
+ assert(foundBase && foundIndex);
+ info->srcCount--; // it gets incremented below.
+ }
+ else if (addr->gtOper == GT_ARR_ELEM)
+ {
+ // The GT_ARR_ELEM consumes all the indices and produces the offset.
+ // The array object lives until the mem access.
+ // We also consume the target register to which the address is
+ // computed
+
+ info->srcCount++;
+ assert(addr->gtLsraInfo.srcCount >= 2);
+ addr->gtLsraInfo.srcCount -= 1;
+ }
+ else
+ {
+ // it is nothing but a plain indir
+ info->srcCount--; // base gets added in below
+ base = addr;
+ }
+
+ if (base != nullptr)
+ {
+ info->srcCount++;
+ }
+
+ if (index != nullptr && !modifiedSources)
+ {
+ info->srcCount++;
+ }
+
+ // On ARM64 we may need a single internal register
+ // (when both conditions are true then we still only need a single internal register)
+ if ((index != nullptr) && (cns != 0))
+ {
+ // ARM64 does not support both Index and offset so we need an internal register
+ info->internalIntCount = 1;
+ }
+ else if (!emitter::emitIns_valid_imm_for_ldst_offset(cns, emitTypeSize(indirTree)))
+ {
+ // This offset can't be contained in the ldr/str instruction, so we need an internal register
+ info->internalIntCount = 1;
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitCmp: Set the register requirements for a compare.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitCmp(GenTreePtr tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+
+ info->srcCount = 2;
+ info->dstCount = 1;
+ CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
+}
+
+#endif // _TARGET_ARM64_
+
+#endif // !LEGACY_BACKEND
diff --git a/src/jit/lsraxarch.cpp b/src/jit/lsraxarch.cpp
new file mode 100644
index 0000000000..a4da2b7ce6
--- /dev/null
+++ b/src/jit/lsraxarch.cpp
@@ -0,0 +1,3684 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XX XX
+XX Register Requirements for AMD64 XX
+XX XX
+XX This encapsulates all the logic for setting register requirements for XX
+XX the AMD64 architecture. XX
+XX XX
+XX XX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+*/
+
+#include "jitpch.h"
+#ifdef _MSC_VER
+#pragma hdrstop
+#endif
+
+#ifndef LEGACY_BACKEND // This file is ONLY used for the RyuJIT backend that uses the linear scan register allocator
+
+#ifdef _TARGET_XARCH_
+
+#include "jit.h"
+#include "sideeffects.h"
+#include "lower.h"
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitStoreLoc: Set register requirements for a store of a lclVar
+//
+// Arguments:
+// storeLoc - the local store (GT_STORE_LCL_FLD or GT_STORE_LCL_VAR)
+//
+// Notes:
+// This involves:
+// - Setting the appropriate candidates for a store of a multi-reg call return value.
+// - Requesting an internal register for SIMD12 stores.
+// - Handling of contained immediates.
+// - Widening operations of unsigneds. (TODO: Move to 1st phase of Lowering)
+
+void Lowering::TreeNodeInfoInitStoreLoc(GenTreeLclVarCommon* storeLoc)
+{
+ TreeNodeInfo* info = &(storeLoc->gtLsraInfo);
+
+ // Is this the case of var = call where call is returning
+ // a value in multiple return registers?
+ GenTree* op1 = storeLoc->gtGetOp1();
+ if (op1->IsMultiRegCall())
+ {
+ // backend expects to see this case only for store lclvar.
+ assert(storeLoc->OperGet() == GT_STORE_LCL_VAR);
+
+ // srcCount = number of registers in which the value is returned by call
+ GenTreeCall* call = op1->AsCall();
+ ReturnTypeDesc* retTypeDesc = call->GetReturnTypeDesc();
+ info->srcCount = retTypeDesc->GetReturnRegCount();
+
+ // Call node srcCandidates = Bitwise-OR(allregs(GetReturnRegType(i))) for all i=0..RetRegCount-1
+ regMaskTP srcCandidates = m_lsra->allMultiRegCallNodeRegs(call);
+ op1->gtLsraInfo.setSrcCandidates(m_lsra, srcCandidates);
+ return;
+ }
+
+#ifdef FEATURE_SIMD
+ if (varTypeIsSIMD(storeLoc))
+ {
+ if (op1->IsCnsIntOrI())
+ {
+ // InitBlk
+ MakeSrcContained(storeLoc, op1);
+ }
+ else if (storeLoc->TypeGet() == TYP_SIMD12)
+ {
+ // Need an additional register to extract upper 4 bytes of Vector3.
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(m_lsra, m_lsra->allSIMDRegs());
+
+ // In this case don't mark the operand as contained as we want it to
+ // be evaluated into an xmm register
+ }
+ return;
+ }
+#endif // FEATURE_SIMD
+
+ // If the source is a containable immediate, make it contained, unless it is
+ // an int-size or larger store of zero to memory, because we can generate smaller code
+ // by zeroing a register and then storing it.
+ if (IsContainableImmed(storeLoc, op1) && (!op1->IsIntegralConst(0) || varTypeIsSmall(storeLoc)))
+ {
+ MakeSrcContained(storeLoc, op1);
+ }
+
+ // TODO: This should be moved to Lowering, but it widens the types, which changes the behavior
+ // of the above condition.
+ LowerStoreLoc(storeLoc);
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInit: Set register requirements for a node
+//
+// Arguments:
+// treeNode - the node of interest
+//
+// Notes:
+// Preconditions:
+// LSRA Has been initialized and there is a TreeNodeInfo node
+// already allocated and initialized for every tree in the IR.
+// Postconditions:
+// Every TreeNodeInfo instance has the right annotations on register
+// requirements needed by LSRA to build the Interval Table (source,
+// destination and internal [temp] register counts).
+//
+void Lowering::TreeNodeInfoInit(GenTree* tree)
+{
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+#ifdef DEBUG
+ if (comp->verbose)
+ {
+ printf("TreeNodeInfoInit:\n");
+ comp->gtDispTreeRange(BlockRange(), tree);
+ }
+#endif
+ // floating type generates AVX instruction (vmovss etc.), set the flag
+ SetContainsAVXFlags(varTypeIsFloating(tree->TypeGet()));
+ switch (tree->OperGet())
+ {
+ GenTree* op1;
+ GenTree* op2;
+
+ default:
+ TreeNodeInfoInitSimple(tree);
+ break;
+
+ case GT_LCL_FLD:
+ case GT_LCL_VAR:
+ info->srcCount = 0;
+ info->dstCount = 1;
+
+#ifdef FEATURE_SIMD
+ // Need an additional register to read upper 4 bytes of Vector3.
+ if (tree->TypeGet() == TYP_SIMD12)
+ {
+ // We need an internal register different from targetReg in which 'tree' produces its result
+ // because both targetReg and internal reg will be in use at the same time.
+ info->internalFloatCount = 1;
+ info->isInternalRegDelayFree = true;
+ info->setInternalCandidates(m_lsra, m_lsra->allSIMDRegs());
+ }
+#endif
+ break;
+
+ case GT_STORE_LCL_FLD:
+ case GT_STORE_LCL_VAR:
+#ifdef _TARGET_X86_
+ if (tree->gtGetOp1()->OperGet() == GT_LONG)
+ {
+ info->srcCount = 2;
+ }
+ else
+#endif // _TARGET_X86_
+ {
+ info->srcCount = 1;
+ }
+ info->dstCount = 0;
+ TreeNodeInfoInitStoreLoc(tree->AsLclVarCommon());
+ break;
+
+ case GT_BOX:
+ noway_assert(!"box should not exist here");
+ // The result of 'op1' is also the final result
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_PHYSREGDST:
+ info->srcCount = 1;
+ info->dstCount = 0;
+ break;
+
+ case GT_COMMA:
+ {
+ GenTreePtr firstOperand;
+ GenTreePtr secondOperand;
+ if (tree->gtFlags & GTF_REVERSE_OPS)
+ {
+ firstOperand = tree->gtOp.gtOp2;
+ secondOperand = tree->gtOp.gtOp1;
+ }
+ else
+ {
+ firstOperand = tree->gtOp.gtOp1;
+ secondOperand = tree->gtOp.gtOp2;
+ }
+ if (firstOperand->TypeGet() != TYP_VOID)
+ {
+ firstOperand->gtLsraInfo.isLocalDefUse = true;
+ firstOperand->gtLsraInfo.dstCount = 0;
+ }
+ if (tree->TypeGet() == TYP_VOID && secondOperand->TypeGet() != TYP_VOID)
+ {
+ secondOperand->gtLsraInfo.isLocalDefUse = true;
+ secondOperand->gtLsraInfo.dstCount = 0;
+ }
+ }
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_LIST:
+ case GT_FIELD_LIST:
+ case GT_ARGPLACE:
+ case GT_NO_OP:
+ case GT_START_NONGC:
+ case GT_PROF_HOOK:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_CNS_DBL:
+ info->srcCount = 0;
+ info->dstCount = 1;
+ break;
+
+#if !defined(_TARGET_64BIT_)
+
+ case GT_LONG:
+ if ((tree->gtLIRFlags & LIR::Flags::IsUnusedValue) != 0)
+ {
+ // An unused GT_LONG node needs to consume its sources.
+ info->srcCount = 2;
+ }
+ else
+ {
+ // Passthrough
+ info->srcCount = 0;
+ }
+
+ info->dstCount = 0;
+ break;
+
+#endif // !defined(_TARGET_64BIT_)
+
+ case GT_QMARK:
+ case GT_COLON:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ unreached();
+ break;
+
+ case GT_RETURN:
+ TreeNodeInfoInitReturn(tree);
+ break;
+
+ case GT_RETFILT:
+ if (tree->TypeGet() == TYP_VOID)
+ {
+ info->srcCount = 0;
+ info->dstCount = 0;
+ }
+ else
+ {
+ assert(tree->TypeGet() == TYP_INT);
+
+ info->srcCount = 1;
+ info->dstCount = 0;
+
+ info->setSrcCandidates(l, RBM_INTRET);
+ tree->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, RBM_INTRET);
+ }
+ break;
+
+ // A GT_NOP is either a passthrough (if it is void, or if it has
+ // a child), but must be considered to produce a dummy value if it
+ // has a type but no child
+ case GT_NOP:
+ info->srcCount = 0;
+ if (tree->TypeGet() != TYP_VOID && tree->gtOp.gtOp1 == nullptr)
+ {
+ info->dstCount = 1;
+ }
+ else
+ {
+ info->dstCount = 0;
+ }
+ break;
+
+ case GT_JTRUE:
+ {
+ info->srcCount = 0;
+ info->dstCount = 0;
+
+ GenTree* cmp = tree->gtGetOp1();
+ l->clearDstCount(cmp);
+
+#ifdef FEATURE_SIMD
+ // Say we have the following IR
+ // simdCompareResult = GT_SIMD((In)Equality, v1, v2)
+ // integerCompareResult = GT_EQ/NE(simdCompareResult, true/false)
+ // GT_JTRUE(integerCompareResult)
+ //
+ // In this case we don't need to generate code for GT_EQ_/NE, since SIMD (In)Equality
+ // intrinsic will set or clear the Zero flag.
+
+ genTreeOps cmpOper = cmp->OperGet();
+ if (cmpOper == GT_EQ || cmpOper == GT_NE)
+ {
+ GenTree* cmpOp1 = cmp->gtGetOp1();
+ GenTree* cmpOp2 = cmp->gtGetOp2();
+
+ if (cmpOp1->IsSIMDEqualityOrInequality() && (cmpOp2->IsIntegralConst(0) || cmpOp2->IsIntegralConst(1)))
+ {
+ // We always generate code for a SIMD equality comparison, but the compare
+ // is contained (evaluated as part of the GT_JTRUE).
+ // Neither the SIMD node nor the immediate need to be evaluated into a register.
+ l->clearOperandCounts(cmp);
+ l->clearDstCount(cmpOp1);
+ l->clearOperandCounts(cmpOp2);
+
+ // Codegen of SIMD (in)Equality uses target integer reg only for setting flags.
+ // A target reg is not needed on AVX when comparing against Vector Zero.
+ // In all other cases we need to reserve an int type internal register, since we
+ // have cleared dstCount.
+ if (!compiler->canUseAVX() || !cmpOp1->gtGetOp2()->IsIntegralConstVector(0))
+ {
+ ++(cmpOp1->gtLsraInfo.internalIntCount);
+ regMaskTP internalCandidates = cmpOp1->gtLsraInfo.getInternalCandidates(l);
+ internalCandidates |= l->allRegs(TYP_INT);
+ cmpOp1->gtLsraInfo.setInternalCandidates(l, internalCandidates);
+ }
+
+ // We have to reverse compare oper in the following cases:
+ // 1) SIMD Equality: Sets Zero flag on equal otherwise clears it.
+ // Therefore, if compare oper is == or != against false(0), we will
+ // be checking opposite of what is required.
+ //
+ // 2) SIMD inEquality: Clears Zero flag on true otherwise sets it.
+ // Therefore, if compare oper is == or != against true(1), we will
+ // be checking opposite of what is required.
+ GenTreeSIMD* simdNode = cmpOp1->AsSIMD();
+ if (simdNode->gtSIMDIntrinsicID == SIMDIntrinsicOpEquality)
+ {
+ if (cmpOp2->IsIntegralConst(0))
+ {
+ cmp->SetOper(GenTree::ReverseRelop(cmpOper));
+ }
+ }
+ else
+ {
+ assert(simdNode->gtSIMDIntrinsicID == SIMDIntrinsicOpInEquality);
+ if (cmpOp2->IsIntegralConst(1))
+ {
+ cmp->SetOper(GenTree::ReverseRelop(cmpOper));
+ }
+ }
+ }
+ }
+#endif // FEATURE_SIMD
+ }
+ break;
+
+ case GT_JCC:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_JMP:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_SWITCH:
+ // This should never occur since switch nodes must not be visible at this
+ // point in the JIT.
+ info->srcCount = 0;
+ info->dstCount = 0; // To avoid getting uninit errors.
+ noway_assert(!"Switch must be lowered at this point");
+ break;
+
+ case GT_JMPTABLE:
+ info->srcCount = 0;
+ info->dstCount = 1;
+ break;
+
+ case GT_SWITCH_TABLE:
+ info->srcCount = 2;
+ info->internalIntCount = 1;
+ info->dstCount = 0;
+ break;
+
+ case GT_ASG:
+ case GT_ASG_ADD:
+ case GT_ASG_SUB:
+ noway_assert(!"We should never hit any assignment operator in lowering");
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+#if !defined(_TARGET_64BIT_)
+ case GT_ADD_LO:
+ case GT_ADD_HI:
+ case GT_SUB_LO:
+ case GT_SUB_HI:
+#endif
+ case GT_ADD:
+ case GT_SUB:
+ // SSE2 arithmetic instructions doesn't support the form "op mem, xmm".
+ // Rather they only support "op xmm, mem/xmm" form.
+ if (varTypeIsFloating(tree->TypeGet()))
+ {
+ // overflow operations aren't supported on float/double types.
+ assert(!tree->gtOverflow());
+
+ op1 = tree->gtGetOp1();
+ op2 = tree->gtGetOp2();
+
+ // No implicit conversions at this stage as the expectation is that
+ // everything is made explicit by adding casts.
+ assert(op1->TypeGet() == op2->TypeGet());
+
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ if (op2->isMemoryOp() || op2->IsCnsNonZeroFltOrDbl())
+ {
+ MakeSrcContained(tree, op2);
+ }
+ else if (tree->OperIsCommutative() &&
+ (op1->IsCnsNonZeroFltOrDbl() || (op1->isMemoryOp() && IsSafeToContainMem(tree, op1))))
+ {
+ // Though we have GT_ADD(op1=memOp, op2=non-memOp, we try to reorder the operands
+ // as long as it is safe so that the following efficient code sequence is generated:
+ // addss/sd targetReg, memOp (if op1Reg == targetReg) OR
+ // movaps targetReg, op2Reg; addss/sd targetReg, [memOp]
+ //
+ // Instead of
+ // movss op1Reg, [memOp]; addss/sd targetReg, Op2Reg (if op1Reg == targetReg) OR
+ // movss op1Reg, [memOp]; movaps targetReg, op1Reg, addss/sd targetReg, Op2Reg
+ MakeSrcContained(tree, op1);
+ }
+ else
+ {
+ // If there are no containable operands, we can make an operand reg optional.
+ SetRegOptionalForBinOp(tree);
+ }
+ break;
+ }
+
+ __fallthrough;
+
+ case GT_AND:
+ case GT_OR:
+ case GT_XOR:
+ TreeNodeInfoInitLogicalOp(tree);
+ break;
+
+ case GT_RETURNTRAP:
+ // This just turns into a compare of its child with an int + a conditional call
+ info->srcCount = 1;
+ info->dstCount = 0;
+ if (tree->gtOp.gtOp1->isIndir())
+ {
+ MakeSrcContained(tree, tree->gtOp.gtOp1);
+ }
+ info->internalIntCount = 1;
+ info->setInternalCandidates(l, l->allRegs(TYP_INT));
+ break;
+
+ case GT_MOD:
+ case GT_DIV:
+ case GT_UMOD:
+ case GT_UDIV:
+ TreeNodeInfoInitModDiv(tree);
+ break;
+
+ case GT_MUL:
+ case GT_MULHI:
+#if defined(_TARGET_X86_) && !defined(LEGACY_BACKEND)
+ case GT_MUL_LONG:
+#endif
+ TreeNodeInfoInitMul(tree);
+ break;
+
+ case GT_INTRINSIC:
+ TreeNodeInfoInitIntrinsic(tree);
+ break;
+
+#ifdef FEATURE_SIMD
+ case GT_SIMD:
+ TreeNodeInfoInitSIMD(tree);
+ break;
+#endif // FEATURE_SIMD
+
+ case GT_CAST:
+ TreeNodeInfoInitCast(tree);
+ break;
+
+ case GT_NEG:
+ info->srcCount = 1;
+ info->dstCount = 1;
+
+ // TODO-XArch-CQ:
+ // SSE instruction set doesn't have an instruction to negate a number.
+ // The recommended way is to xor the float/double number with a bitmask.
+ // The only way to xor is using xorps or xorpd both of which operate on
+ // 128-bit operands. To hold the bit-mask we would need another xmm
+ // register or a 16-byte aligned 128-bit data constant. Right now emitter
+ // lacks the support for emitting such constants or instruction with mem
+ // addressing mode referring to a 128-bit operand. For now we use an
+ // internal xmm register to load 32/64-bit bitmask from data section.
+ // Note that by trading additional data section memory (128-bit) we can
+ // save on the need for an internal register and also a memory-to-reg
+ // move.
+ //
+ // Note: another option to avoid internal register requirement is by
+ // lowering as GT_SUB(0, src). This will generate code different from
+ // Jit64 and could possibly result in compat issues (?).
+ if (varTypeIsFloating(tree))
+ {
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(l, l->internalFloatRegCandidates());
+ }
+ else
+ {
+ // Codegen of this tree node sets ZF and SF flags.
+ tree->gtFlags |= GTF_ZSF_SET;
+ }
+ break;
+
+ case GT_NOT:
+ info->srcCount = 1;
+ info->dstCount = 1;
+ break;
+
+ case GT_LSH:
+ case GT_RSH:
+ case GT_RSZ:
+ case GT_ROL:
+ case GT_ROR:
+#ifdef _TARGET_X86_
+ case GT_LSH_HI:
+ case GT_RSH_LO:
+#endif
+ TreeNodeInfoInitShiftRotate(tree);
+ break;
+
+ case GT_EQ:
+ case GT_NE:
+ case GT_LT:
+ case GT_LE:
+ case GT_GE:
+ case GT_GT:
+ case GT_TEST_EQ:
+ case GT_TEST_NE:
+ TreeNodeInfoInitCmp(tree);
+ break;
+
+ case GT_CKFINITE:
+ info->srcCount = 1;
+ info->dstCount = 1;
+ info->internalIntCount = 1;
+ break;
+
+ case GT_CMPXCHG:
+ info->srcCount = 3;
+ info->dstCount = 1;
+
+ // comparand is preferenced to RAX.
+ // Remaining two operands can be in any reg other than RAX.
+ tree->gtCmpXchg.gtOpComparand->gtLsraInfo.setSrcCandidates(l, RBM_RAX);
+ tree->gtCmpXchg.gtOpLocation->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~RBM_RAX);
+ tree->gtCmpXchg.gtOpValue->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~RBM_RAX);
+ tree->gtLsraInfo.setDstCandidates(l, RBM_RAX);
+ break;
+
+ case GT_LOCKADD:
+ info->srcCount = 2;
+ info->dstCount = (tree->TypeGet() == TYP_VOID) ? 0 : 1;
+
+ CheckImmedAndMakeContained(tree, tree->gtOp.gtOp2);
+ break;
+
+ case GT_CALL:
+ TreeNodeInfoInitCall(tree->AsCall());
+ break;
+
+ case GT_ADDR:
+ {
+ // For a GT_ADDR, the child node should not be evaluated into a register
+ GenTreePtr child = tree->gtOp.gtOp1;
+ assert(!l->isCandidateLocalRef(child));
+ l->clearDstCount(child);
+ info->srcCount = 0;
+ info->dstCount = 1;
+ }
+ break;
+
+#if !defined(FEATURE_PUT_STRUCT_ARG_STK)
+ case GT_OBJ:
+#endif
+ case GT_BLK:
+ case GT_DYN_BLK:
+ // These should all be eliminated prior to Lowering.
+ assert(!"Non-store block node in Lowering");
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+#ifdef FEATURE_PUT_STRUCT_ARG_STK
+ case GT_PUTARG_STK:
+ LowerPutArgStk(tree->AsPutArgStk());
+ TreeNodeInfoInitPutArgStk(tree->AsPutArgStk());
+ break;
+#endif // FEATURE_PUT_STRUCT_ARG_STK
+
+ case GT_STORE_BLK:
+ case GT_STORE_OBJ:
+ case GT_STORE_DYN_BLK:
+ LowerBlockStore(tree->AsBlk());
+ TreeNodeInfoInitBlockStore(tree->AsBlk());
+ break;
+
+ case GT_INIT_VAL:
+ // Always a passthrough of its child's value.
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_LCLHEAP:
+ TreeNodeInfoInitLclHeap(tree);
+ break;
+
+ case GT_ARR_BOUNDS_CHECK:
+#ifdef FEATURE_SIMD
+ case GT_SIMD_CHK:
+#endif // FEATURE_SIMD
+ {
+ GenTreeBoundsChk* node = tree->AsBoundsChk();
+ // Consumes arrLen & index - has no result
+ info->srcCount = 2;
+ info->dstCount = 0;
+
+ GenTreePtr other;
+ if (CheckImmedAndMakeContained(tree, node->gtIndex))
+ {
+ other = node->gtArrLen;
+ }
+ else if (CheckImmedAndMakeContained(tree, node->gtArrLen))
+ {
+ other = node->gtIndex;
+ }
+ else if (node->gtIndex->isMemoryOp())
+ {
+ other = node->gtIndex;
+ }
+ else
+ {
+ other = node->gtArrLen;
+ }
+
+ if (node->gtIndex->TypeGet() == node->gtArrLen->TypeGet())
+ {
+ if (other->isMemoryOp())
+ {
+ MakeSrcContained(tree, other);
+ }
+ else
+ {
+ // We can mark 'other' as reg optional, since it is not contained.
+ SetRegOptional(other);
+ }
+ }
+ }
+ break;
+
+ case GT_ARR_ELEM:
+ // These must have been lowered to GT_ARR_INDEX
+ noway_assert(!"We should never see a GT_ARR_ELEM in lowering");
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+
+ case GT_ARR_INDEX:
+ info->srcCount = 2;
+ info->dstCount = 1;
+ // For GT_ARR_INDEX, the lifetime of the arrObj must be extended because it is actually used multiple
+ // times while the result is being computed.
+ tree->AsArrIndex()->ArrObj()->gtLsraInfo.isDelayFree = true;
+ info->hasDelayFreeSrc = true;
+ break;
+
+ case GT_ARR_OFFSET:
+ // This consumes the offset, if any, the arrObj and the effective index,
+ // and produces the flattened offset for this dimension.
+ info->srcCount = 3;
+ info->dstCount = 1;
+
+ // we don't want to generate code for this
+ if (tree->gtArrOffs.gtOffset->IsIntegralConst(0))
+ {
+ MakeSrcContained(tree, tree->gtArrOffs.gtOffset);
+ }
+ else
+ {
+ // Here we simply need an internal register, which must be different
+ // from any of the operand's registers, but may be the same as targetReg.
+ info->internalIntCount = 1;
+ }
+ break;
+
+ case GT_LEA:
+ // The LEA usually passes its operands through to the GT_IND, in which case we'll
+ // clear the info->srcCount and info->dstCount later, but we may be instantiating an address,
+ // so we set them here.
+ info->srcCount = 0;
+ if (tree->AsAddrMode()->HasBase())
+ {
+ info->srcCount++;
+ }
+ if (tree->AsAddrMode()->HasIndex())
+ {
+ info->srcCount++;
+ }
+ info->dstCount = 1;
+ break;
+
+ case GT_STOREIND:
+ {
+ info->srcCount = 2;
+ info->dstCount = 0;
+ GenTree* src = tree->gtOp.gtOp2;
+
+ if (compiler->codeGen->gcInfo.gcIsWriteBarrierAsgNode(tree))
+ {
+ TreeNodeInfoInitGCWriteBarrier(tree);
+ break;
+ }
+
+ // If the source is a containable immediate, make it contained, unless it is
+ // an int-size or larger store of zero to memory, because we can generate smaller code
+ // by zeroing a register and then storing it.
+ if (IsContainableImmed(tree, src) &&
+ (!src->IsIntegralConst(0) || varTypeIsSmall(tree) || tree->gtGetOp1()->OperGet() == GT_CLS_VAR_ADDR))
+ {
+ MakeSrcContained(tree, src);
+ }
+ else if (!varTypeIsFloating(tree))
+ {
+ // Perform recognition of trees with the following structure:
+ // StoreInd(addr, BinOp(expr, GT_IND(addr)))
+ // to be able to fold this into an instruction of the form
+ // BINOP [addr], register
+ // where register is the actual place where 'expr' is computed.
+ //
+ // SSE2 doesn't support RMW form of instructions.
+ if (TreeNodeInfoInitIfRMWMemOp(tree))
+ {
+ break;
+ }
+ }
+
+ TreeNodeInfoInitIndir(tree);
+ }
+ break;
+
+ case GT_NULLCHECK:
+ info->dstCount = 0;
+ info->srcCount = 1;
+ info->isLocalDefUse = true;
+ break;
+
+ case GT_IND:
+ info->dstCount = 1;
+ info->srcCount = 1;
+ TreeNodeInfoInitIndir(tree);
+ break;
+
+ case GT_CATCH_ARG:
+ info->srcCount = 0;
+ info->dstCount = 1;
+ info->setDstCandidates(l, RBM_EXCEPTION_OBJECT);
+ break;
+
+#if !FEATURE_EH_FUNCLETS
+ case GT_END_LFIN:
+ info->srcCount = 0;
+ info->dstCount = 0;
+ break;
+#endif
+
+ case GT_CLS_VAR:
+ // These nodes are eliminated by rationalizer.
+ JITDUMP("Unexpected node %s in Lower.\n", GenTree::NodeName(tree->OperGet()));
+ unreached();
+ break;
+ } // end switch (tree->OperGet())
+
+ // If op2 of a binary-op gets marked as contained, then binary-op srcCount will be 1.
+ // Even then we would like to set isTgtPref on Op1.
+ if (tree->OperIsBinary() && info->srcCount >= 1)
+ {
+ if (isRMWRegOper(tree))
+ {
+ GenTree* op1 = tree->gtOp.gtOp1;
+ GenTree* op2 = tree->gtOp.gtOp2;
+
+ // Commutative opers like add/mul/and/or/xor could reverse the order of
+ // operands if it is safe to do so. In such a case we would like op2 to be
+ // target preferenced instead of op1.
+ if (tree->OperIsCommutative() && op1->gtLsraInfo.dstCount == 0 && op2 != nullptr)
+ {
+ op1 = op2;
+ op2 = tree->gtOp.gtOp1;
+ }
+
+ // If we have a read-modify-write operation, we want to preference op1 to the target.
+ // If op1 is contained, we don't want to preference it, but it won't
+ // show up as a source in that case, so it will be ignored.
+ op1->gtLsraInfo.isTgtPref = true;
+
+ // Is this a non-commutative operator, or is op2 a contained memory op?
+ // (Note that we can't call IsContained() at this point because it uses exactly the
+ // same information we're currently computing.)
+ // In either case, we need to make op2 remain live until the op is complete, by marking
+ // the source(s) associated with op2 as "delayFree".
+ // Note that if op2 of a binary RMW operator is a memory op, even if the operator
+ // is commutative, codegen cannot reverse them.
+ // TODO-XArch-CQ: This is not actually the case for all RMW binary operators, but there's
+ // more work to be done to correctly reverse the operands if they involve memory
+ // operands. Also, we may need to handle more cases than GT_IND, especially once
+ // we've modified the register allocator to not require all nodes to be assigned
+ // a register (e.g. a spilled lclVar can often be referenced directly from memory).
+ // Note that we may have a null op2, even with 2 sources, if op1 is a base/index memory op.
+
+ GenTree* delayUseSrc = nullptr;
+ // TODO-XArch-Cleanup: We should make the indirection explicit on these nodes so that we don't have
+ // to special case them.
+ if (tree->OperGet() == GT_XADD || tree->OperGet() == GT_XCHG || tree->OperGet() == GT_LOCKADD)
+ {
+ // These tree nodes will have their op1 marked as isDelayFree=true.
+ // Hence these tree nodes should have a Def position so that op1's reg
+ // gets freed at DefLoc+1.
+ if (tree->TypeGet() == TYP_VOID)
+ {
+ // Right now a GT_XADD node could be morphed into a
+ // GT_LOCKADD of TYP_VOID. See gtExtractSideEffList().
+ // Note that it is advantageous to use GT_LOCKADD
+ // instead of of GT_XADD as the former uses lock.add,
+ // which allows its second operand to be a contained
+ // immediate wheres xadd instruction requires its
+ // second operand to be in a register.
+ assert(tree->gtLsraInfo.dstCount == 0);
+
+ // Give it an artificial type and mark it isLocalDefUse = true.
+ // This would result in a Def position created but not considered
+ // consumed by its parent node.
+ tree->gtType = TYP_INT;
+ tree->gtLsraInfo.isLocalDefUse = true;
+ }
+ else
+ {
+ assert(tree->gtLsraInfo.dstCount != 0);
+ }
+
+ delayUseSrc = op1;
+ }
+ else if ((op2 != nullptr) &&
+ (!tree->OperIsCommutative() || (op2->isMemoryOp() && (op2->gtLsraInfo.srcCount == 0))))
+ {
+ delayUseSrc = op2;
+ }
+ if (delayUseSrc != nullptr)
+ {
+ // If delayUseSrc is an indirection and it doesn't produce a result, then we need to set "delayFree'
+ // on the base & index, if any.
+ // Otherwise, we set it on delayUseSrc itself.
+ if (delayUseSrc->isIndir() && (delayUseSrc->gtLsraInfo.dstCount == 0))
+ {
+ GenTree* base = delayUseSrc->AsIndir()->Base();
+ GenTree* index = delayUseSrc->AsIndir()->Index();
+ if (base != nullptr)
+ {
+ base->gtLsraInfo.isDelayFree = true;
+ }
+ if (index != nullptr)
+ {
+ index->gtLsraInfo.isDelayFree = true;
+ }
+ }
+ else
+ {
+ delayUseSrc->gtLsraInfo.isDelayFree = true;
+ }
+ info->hasDelayFreeSrc = true;
+ }
+ }
+ }
+
+ TreeNodeInfoInitCheckByteable(tree);
+
+ // We need to be sure that we've set info->srcCount and info->dstCount appropriately
+ assert((info->dstCount < 2) || (tree->IsMultiRegCall() && info->dstCount == MAX_RET_REG_COUNT));
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitCheckByteable: Check the tree to see if "byte-able" registers are
+// required, and set the tree node info accordingly.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitCheckByteable(GenTree* tree)
+{
+#ifdef _TARGET_X86_
+ LinearScan* l = m_lsra;
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+
+ // Exclude RBM_NON_BYTE_REGS from dst candidates of tree node and src candidates of operands
+ // if the tree node is a byte type.
+ //
+ // Though this looks conservative in theory, in practice we could not think of a case where
+ // the below logic leads to conservative register specification. In future when or if we find
+ // one such case, this logic needs to be fine tuned for that case(s).
+
+ if (ExcludeNonByteableRegisters(tree))
+ {
+ regMaskTP regMask;
+ if (info->dstCount > 0)
+ {
+ regMask = info->getDstCandidates(l);
+ assert(regMask != RBM_NONE);
+ info->setDstCandidates(l, regMask & ~RBM_NON_BYTE_REGS);
+ }
+
+ if (tree->OperIsSimple() && (info->srcCount > 0))
+ {
+ // No need to set src candidates on a contained child operand.
+ GenTree* op = tree->gtOp.gtOp1;
+ assert(op != nullptr);
+ bool containedNode = (op->gtLsraInfo.srcCount == 0) && (op->gtLsraInfo.dstCount == 0);
+ if (!containedNode)
+ {
+ regMask = op->gtLsraInfo.getSrcCandidates(l);
+ assert(regMask != RBM_NONE);
+ op->gtLsraInfo.setSrcCandidates(l, regMask & ~RBM_NON_BYTE_REGS);
+ }
+
+ if (tree->OperIsBinary() && (tree->gtOp.gtOp2 != nullptr))
+ {
+ op = tree->gtOp.gtOp2;
+ containedNode = (op->gtLsraInfo.srcCount == 0) && (op->gtLsraInfo.dstCount == 0);
+ if (!containedNode)
+ {
+ regMask = op->gtLsraInfo.getSrcCandidates(l);
+ assert(regMask != RBM_NONE);
+ op->gtLsraInfo.setSrcCandidates(l, regMask & ~RBM_NON_BYTE_REGS);
+ }
+ }
+ }
+ }
+#endif //_TARGET_X86_
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitSimple: Sets the srcCount and dstCount for all the trees
+// without special handling based on the tree node type.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitSimple(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ unsigned kind = tree->OperKind();
+ info->dstCount = tree->IsValue() ? 1 : 0;
+ if (kind & (GTK_CONST | GTK_LEAF))
+ {
+ info->srcCount = 0;
+ }
+ else if (kind & (GTK_SMPOP))
+ {
+ if (tree->gtGetOp2IfPresent() != nullptr)
+ {
+ info->srcCount = 2;
+ }
+ else
+ {
+ info->srcCount = 1;
+ }
+ }
+ else
+ {
+ unreached();
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitReturn: Set the NodeInfo for a GT_RETURN.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitReturn(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+#if !defined(_TARGET_64BIT_)
+ if (tree->TypeGet() == TYP_LONG)
+ {
+ GenTree* op1 = tree->gtGetOp1();
+ noway_assert(op1->OperGet() == GT_LONG);
+ GenTree* loVal = op1->gtGetOp1();
+ GenTree* hiVal = op1->gtGetOp2();
+ info->srcCount = 2;
+ loVal->gtLsraInfo.setSrcCandidates(l, RBM_LNGRET_LO);
+ hiVal->gtLsraInfo.setSrcCandidates(l, RBM_LNGRET_HI);
+ info->dstCount = 0;
+ }
+ else
+#endif // !defined(_TARGET_64BIT_)
+ {
+ GenTree* op1 = tree->gtGetOp1();
+ regMaskTP useCandidates = RBM_NONE;
+
+ info->srcCount = (tree->TypeGet() == TYP_VOID) ? 0 : 1;
+ info->dstCount = 0;
+
+#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
+ if (varTypeIsStruct(tree))
+ {
+ // op1 has to be either an lclvar or a multi-reg returning call
+ if (op1->OperGet() == GT_LCL_VAR)
+ {
+ GenTreeLclVarCommon* lclVarCommon = op1->AsLclVarCommon();
+ LclVarDsc* varDsc = &(compiler->lvaTable[lclVarCommon->gtLclNum]);
+ assert(varDsc->lvIsMultiRegRet);
+
+ // Mark var as contained if not enregistrable.
+ if (!varTypeIsEnregisterableStruct(op1))
+ {
+ MakeSrcContained(tree, op1);
+ }
+ }
+ else
+ {
+ noway_assert(op1->IsMultiRegCall());
+
+ ReturnTypeDesc* retTypeDesc = op1->AsCall()->GetReturnTypeDesc();
+ info->srcCount = retTypeDesc->GetReturnRegCount();
+ useCandidates = retTypeDesc->GetABIReturnRegs();
+ }
+ }
+ else
+#endif // FEATURE_UNIX_AMD64_STRUCT_PASSING
+ {
+ // Non-struct type return - determine useCandidates
+ switch (tree->TypeGet())
+ {
+ case TYP_VOID:
+ useCandidates = RBM_NONE;
+ break;
+ case TYP_FLOAT:
+ useCandidates = RBM_FLOATRET;
+ break;
+ case TYP_DOUBLE:
+ useCandidates = RBM_DOUBLERET;
+ break;
+#if defined(_TARGET_64BIT_)
+ case TYP_LONG:
+ useCandidates = RBM_LNGRET;
+ break;
+#endif // defined(_TARGET_64BIT_)
+ default:
+ useCandidates = RBM_INTRET;
+ break;
+ }
+ }
+
+ if (useCandidates != RBM_NONE)
+ {
+ op1->gtLsraInfo.setSrcCandidates(l, useCandidates);
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitShiftRotate: Set the NodeInfo for a shift or rotate.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitShiftRotate(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* l = m_lsra;
+
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ // For shift operations, we need that the number
+ // of bits moved gets stored in CL in case
+ // the number of bits to shift is not a constant.
+ GenTreePtr shiftBy = tree->gtOp.gtOp2;
+ GenTreePtr source = tree->gtOp.gtOp1;
+
+#ifdef _TARGET_X86_
+ // The first operand of a GT_LSH_HI and GT_RSH_LO oper is a GT_LONG so that
+ // we can have a three operand form. Increment the srcCount.
+ if (tree->OperGet() == GT_LSH_HI || tree->OperGet() == GT_RSH_LO)
+ {
+ assert(source->OperGet() == GT_LONG);
+
+ info->srcCount++;
+
+ if (tree->OperGet() == GT_LSH_HI)
+ {
+ GenTreePtr sourceLo = source->gtOp.gtOp1;
+ sourceLo->gtLsraInfo.isDelayFree = true;
+ }
+ else
+ {
+ GenTreePtr sourceHi = source->gtOp.gtOp2;
+ sourceHi->gtLsraInfo.isDelayFree = true;
+ }
+
+ source->gtLsraInfo.hasDelayFreeSrc = true;
+ info->hasDelayFreeSrc = true;
+ }
+#endif
+
+ // x64 can encode 8 bits of shift and it will use 5 or 6. (the others are masked off)
+ // We will allow whatever can be encoded - hope you know what you are doing.
+ if (!IsContainableImmed(tree, shiftBy) || (shiftBy->gtIntConCommon.IconValue() > 255) ||
+ (shiftBy->gtIntConCommon.IconValue() < 0))
+ {
+ source->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~RBM_RCX);
+ shiftBy->gtLsraInfo.setSrcCandidates(l, RBM_RCX);
+ info->setDstCandidates(l, l->allRegs(TYP_INT) & ~RBM_RCX);
+ }
+ else
+ {
+ MakeSrcContained(tree, shiftBy);
+
+ // Note that Rotate Left/Right instructions don't set ZF and SF flags.
+ //
+ // If the operand being shifted is 32-bits then upper three bits are masked
+ // by hardware to get actual shift count. Similarly for 64-bit operands
+ // shift count is narrowed to [0..63]. If the resulting shift count is zero,
+ // then shift operation won't modify flags.
+ //
+ // TODO-CQ-XARCH: We can optimize generating 'test' instruction for GT_EQ/NE(shift, 0)
+ // if the shift count is known to be non-zero and in the range depending on the
+ // operand size.
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitCall: Set the NodeInfo for a call.
+//
+// Arguments:
+// call - The call node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitCall(GenTreeCall* call)
+{
+ TreeNodeInfo* info = &(call->gtLsraInfo);
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+ bool hasMultiRegRetVal = false;
+ ReturnTypeDesc* retTypeDesc = nullptr;
+
+ info->srcCount = 0;
+ if (call->TypeGet() != TYP_VOID)
+ {
+ hasMultiRegRetVal = call->HasMultiRegRetVal();
+ if (hasMultiRegRetVal)
+ {
+ // dst count = number of registers in which the value is returned by call
+ retTypeDesc = call->GetReturnTypeDesc();
+ info->dstCount = retTypeDesc->GetReturnRegCount();
+ }
+ else
+ {
+ info->dstCount = 1;
+ }
+ }
+ else
+ {
+ info->dstCount = 0;
+ }
+
+ GenTree* ctrlExpr = call->gtControlExpr;
+ if (call->gtCallType == CT_INDIRECT)
+ {
+ // either gtControlExpr != null or gtCallAddr != null.
+ // Both cannot be non-null at the same time.
+ assert(ctrlExpr == nullptr);
+ assert(call->gtCallAddr != nullptr);
+ ctrlExpr = call->gtCallAddr;
+
+#ifdef _TARGET_X86_
+ // Fast tail calls aren't currently supported on x86, but if they ever are, the code
+ // below that handles indirect VSD calls will need to be fixed.
+ assert(!call->IsFastTailCall() || !call->IsVirtualStub());
+#endif // _TARGET_X86_
+ }
+
+ // set reg requirements on call target represented as control sequence.
+ if (ctrlExpr != nullptr)
+ {
+ // we should never see a gtControlExpr whose type is void.
+ assert(ctrlExpr->TypeGet() != TYP_VOID);
+
+ // call can take a Rm op on x64
+ info->srcCount++;
+
+ // In case of fast tail implemented as jmp, make sure that gtControlExpr is
+ // computed into a register.
+ if (!call->IsFastTailCall())
+ {
+#ifdef _TARGET_X86_
+ // On x86, we need to generate a very specific pattern for indirect VSD calls:
+ //
+ // 3-byte nop
+ // call dword ptr [eax]
+ //
+ // Where EAX is also used as an argument to the stub dispatch helper. Make
+ // sure that the call target address is computed into EAX in this case.
+ if (call->IsVirtualStub() && (call->gtCallType == CT_INDIRECT))
+ {
+ assert(ctrlExpr->isIndir());
+
+ ctrlExpr->gtGetOp1()->gtLsraInfo.setSrcCandidates(l, RBM_VIRTUAL_STUB_TARGET);
+ MakeSrcContained(call, ctrlExpr);
+ }
+ else
+#endif // _TARGET_X86_
+ if (ctrlExpr->isIndir())
+ {
+ MakeSrcContained(call, ctrlExpr);
+ }
+ }
+ else
+ {
+ // Fast tail call - make sure that call target is always computed in RAX
+ // so that epilog sequence can generate "jmp rax" to achieve fast tail call.
+ ctrlExpr->gtLsraInfo.setSrcCandidates(l, RBM_RAX);
+ }
+ }
+
+ // If this is a varargs call, we will clear the internal candidates in case we need
+ // to reserve some integer registers for copying float args.
+ // We have to do this because otherwise the default candidates are allRegs, and adding
+ // the individual specific registers will have no effect.
+ if (call->IsVarargs())
+ {
+ info->setInternalCandidates(l, RBM_NONE);
+ }
+
+ RegisterType registerType = call->TypeGet();
+
+ // Set destination candidates for return value of the call.
+ CLANG_FORMAT_COMMENT_ANCHOR;
+
+#ifdef _TARGET_X86_
+ if (call->IsHelperCall(compiler, CORINFO_HELP_INIT_PINVOKE_FRAME))
+ {
+ // The x86 CORINFO_HELP_INIT_PINVOKE_FRAME helper uses a custom calling convention that returns with
+ // TCB in REG_PINVOKE_TCB. AMD64/ARM64 use the standard calling convention. fgMorphCall() sets the
+ // correct argument registers.
+ info->setDstCandidates(l, RBM_PINVOKE_TCB);
+ }
+ else
+#endif // _TARGET_X86_
+ if (hasMultiRegRetVal)
+ {
+ assert(retTypeDesc != nullptr);
+ info->setDstCandidates(l, retTypeDesc->GetABIReturnRegs());
+ }
+ else if (varTypeIsFloating(registerType))
+ {
+#ifdef _TARGET_X86_
+ // The return value will be on the X87 stack, and we will need to move it.
+ info->setDstCandidates(l, l->allRegs(registerType));
+#else // !_TARGET_X86_
+ info->setDstCandidates(l, RBM_FLOATRET);
+#endif // !_TARGET_X86_
+ }
+ else if (registerType == TYP_LONG)
+ {
+ info->setDstCandidates(l, RBM_LNGRET);
+ }
+ else
+ {
+ info->setDstCandidates(l, RBM_INTRET);
+ }
+
+ // number of args to a call =
+ // callRegArgs + (callargs - placeholders, setup, etc)
+ // there is an explicit thisPtr but it is redundant
+
+ // If there is an explicit this pointer, we don't want that node to produce anything
+ // as it is redundant
+ if (call->gtCallObjp != nullptr)
+ {
+ GenTreePtr thisPtrNode = call->gtCallObjp;
+
+ if (thisPtrNode->gtOper == GT_PUTARG_REG)
+ {
+ l->clearOperandCounts(thisPtrNode);
+ l->clearDstCount(thisPtrNode->gtOp.gtOp1);
+ }
+ else
+ {
+ l->clearDstCount(thisPtrNode);
+ }
+ }
+
+#if FEATURE_VARARG
+ bool callHasFloatRegArgs = false;
+#endif // !FEATURE_VARARG
+
+ // First, count reg args
+ for (GenTreePtr list = call->gtCallLateArgs; list; list = list->MoveNext())
+ {
+ assert(list->OperIsList());
+
+ GenTreePtr argNode = list->Current();
+
+ fgArgTabEntryPtr curArgTabEntry = compiler->gtArgEntryByNode(call, argNode);
+ assert(curArgTabEntry);
+
+ if (curArgTabEntry->regNum == REG_STK)
+ {
+ // late arg that is not passed in a register
+ DISPNODE(argNode);
+ assert(argNode->gtOper == GT_PUTARG_STK);
+ argNode->gtLsraInfo.srcCount = 1;
+ argNode->gtLsraInfo.dstCount = 0;
+
+#ifdef FEATURE_PUT_STRUCT_ARG_STK
+ // If the node is TYP_STRUCT and it is put on stack with
+ // putarg_stk operation, we consume and produce no registers.
+ // In this case the embedded Obj node should not produce
+ // registers too since it is contained.
+ // Note that if it is a SIMD type the argument will be in a register.
+ if (argNode->TypeGet() == TYP_STRUCT)
+ {
+ assert(argNode->gtOp.gtOp1 != nullptr && argNode->gtOp.gtOp1->OperGet() == GT_OBJ);
+ argNode->gtOp.gtOp1->gtLsraInfo.dstCount = 0;
+ argNode->gtLsraInfo.srcCount = 0;
+ }
+#endif // FEATURE_PUT_STRUCT_ARG_STK
+ continue;
+ }
+
+ regNumber argReg = REG_NA;
+ regMaskTP argMask = RBM_NONE;
+ short regCount = 0;
+ bool isOnStack = true;
+ if (curArgTabEntry->regNum != REG_STK)
+ {
+ isOnStack = false;
+ var_types argType = argNode->TypeGet();
+
+#if FEATURE_VARARG
+ callHasFloatRegArgs |= varTypeIsFloating(argType);
+#endif // !FEATURE_VARARG
+
+ argReg = curArgTabEntry->regNum;
+ regCount = 1;
+
+ // Default case is that we consume one source; modify this later (e.g. for
+ // promoted structs)
+ info->srcCount++;
+
+ argMask = genRegMask(argReg);
+ argNode = argNode->gtEffectiveVal();
+ }
+
+ // If the struct arg is wrapped in CPYBLK the type of the param will be TYP_VOID.
+ // Use the curArgTabEntry's isStruct to get whether the param is a struct.
+ if (varTypeIsStruct(argNode) PUT_STRUCT_ARG_STK_ONLY(|| curArgTabEntry->isStruct))
+ {
+ unsigned originalSize = 0;
+ LclVarDsc* varDsc = nullptr;
+ if (argNode->gtOper == GT_LCL_VAR)
+ {
+ varDsc = compiler->lvaTable + argNode->gtLclVarCommon.gtLclNum;
+ originalSize = varDsc->lvSize();
+ }
+ else if (argNode->gtOper == GT_MKREFANY)
+ {
+ originalSize = 2 * TARGET_POINTER_SIZE;
+ }
+ else if (argNode->gtOper == GT_OBJ)
+ {
+ noway_assert(!"GT_OBJ not supported for amd64");
+ }
+#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
+ else if (argNode->gtOper == GT_PUTARG_REG)
+ {
+ originalSize = genTypeSize(argNode->gtType);
+ }
+ else if (argNode->gtOper == GT_FIELD_LIST)
+ {
+ originalSize = 0;
+
+ // There could be up to 2 PUTARG_REGs in the list
+ GenTreeFieldList* fieldListPtr = argNode->AsFieldList();
+ unsigned iterationNum = 0;
+ for (; fieldListPtr; fieldListPtr = fieldListPtr->Rest())
+ {
+ GenTreePtr putArgRegNode = fieldListPtr->Current();
+ assert(putArgRegNode->gtOper == GT_PUTARG_REG);
+
+ if (iterationNum == 0)
+ {
+ varDsc = compiler->lvaTable + putArgRegNode->gtOp.gtOp1->gtLclVarCommon.gtLclNum;
+ originalSize = varDsc->lvSize();
+ assert(originalSize != 0);
+ }
+ else
+ {
+ // Need an extra source for every node, but the first in the list.
+ info->srcCount++;
+
+ // Get the mask for the second putarg_reg
+ argMask = genRegMask(curArgTabEntry->otherRegNum);
+ }
+
+ putArgRegNode->gtLsraInfo.setDstCandidates(l, argMask);
+ putArgRegNode->gtLsraInfo.setSrcCandidates(l, argMask);
+
+ // To avoid redundant moves, have the argument child tree computed in the
+ // register in which the argument is passed to the call.
+ putArgRegNode->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, l->getUseCandidates(putArgRegNode));
+ iterationNum++;
+ }
+
+ assert(iterationNum <= CLR_SYSTEMV_MAX_EIGHTBYTES_COUNT_TO_PASS_IN_REGISTERS);
+ }
+#endif // FEATURE_UNIX_AMD64_STRUCT_PASSING
+ else
+ {
+ noway_assert(!"Can't predict unsupported TYP_STRUCT arg kind");
+ }
+
+ unsigned slots = ((unsigned)(roundUp(originalSize, TARGET_POINTER_SIZE))) / REGSIZE_BYTES;
+ unsigned remainingSlots = slots;
+
+ if (!isOnStack)
+ {
+ remainingSlots = slots - 1;
+
+ regNumber reg = (regNumber)(argReg + 1);
+ while (remainingSlots > 0 && reg <= REG_ARG_LAST)
+ {
+ argMask |= genRegMask(reg);
+ reg = (regNumber)(reg + 1);
+ remainingSlots--;
+ regCount++;
+ }
+ }
+
+ short internalIntCount = 0;
+ if (remainingSlots > 0)
+ {
+#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
+ // This TYP_STRUCT argument is also passed in the outgoing argument area
+ // We need a register to address the TYP_STRUCT
+ internalIntCount = 1;
+#else // FEATURE_UNIX_AMD64_STRUCT_PASSING
+ // And we may need 2
+ internalIntCount = 2;
+#endif // FEATURE_UNIX_AMD64_STRUCT_PASSING
+ }
+ argNode->gtLsraInfo.internalIntCount = internalIntCount;
+
+#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
+ if (argNode->gtOper == GT_PUTARG_REG)
+ {
+ argNode->gtLsraInfo.setDstCandidates(l, argMask);
+ argNode->gtLsraInfo.setSrcCandidates(l, argMask);
+ }
+#endif // FEATURE_UNIX_AMD64_STRUCT_PASSING
+ }
+ else
+ {
+ argNode->gtLsraInfo.setDstCandidates(l, argMask);
+ argNode->gtLsraInfo.setSrcCandidates(l, argMask);
+ }
+
+ // To avoid redundant moves, have the argument child tree computed in the
+ // register in which the argument is passed to the call.
+ if (argNode->gtOper == GT_PUTARG_REG)
+ {
+ argNode->gtOp.gtOp1->gtLsraInfo.setSrcCandidates(l, l->getUseCandidates(argNode));
+ }
+
+#if FEATURE_VARARG
+ // In the case of a varargs call, the ABI dictates that if we have floating point args,
+ // we must pass the enregistered arguments in both the integer and floating point registers.
+ // Since the integer register is not associated with this arg node, we will reserve it as
+ // an internal register so that it is not used during the evaluation of the call node
+ // (e.g. for the target).
+ if (call->IsVarargs() && varTypeIsFloating(argNode))
+ {
+ regNumber targetReg = compiler->getCallArgIntRegister(argReg);
+ info->setInternalIntCount(info->internalIntCount + 1);
+ info->addInternalCandidates(l, genRegMask(targetReg));
+ }
+#endif // FEATURE_VARARG
+ }
+
+ // Now, count stack args
+ // Note that these need to be computed into a register, but then
+ // they're just stored to the stack - so the reg doesn't
+ // need to remain live until the call. In fact, it must not
+ // because the code generator doesn't actually consider it live,
+ // so it can't be spilled.
+
+ GenTreePtr args = call->gtCallArgs;
+ while (args)
+ {
+ GenTreePtr arg = args->gtOp.gtOp1;
+ if (!(args->gtFlags & GTF_LATE_ARG))
+ {
+ TreeNodeInfo* argInfo = &(arg->gtLsraInfo);
+ if (argInfo->dstCount != 0)
+ {
+ argInfo->isLocalDefUse = true;
+ }
+
+ // If the child of GT_PUTARG_STK is a constant, we don't need a register to
+ // move it to memory (stack location).
+ //
+ // On AMD64, we don't want to make 0 contained, because we can generate smaller code
+ // by zeroing a register and then storing it. E.g.:
+ // xor rdx, rdx
+ // mov gword ptr [rsp+28H], rdx
+ // is 2 bytes smaller than:
+ // mov gword ptr [rsp+28H], 0
+ //
+ // On x86, we push stack arguments; we don't use 'mov'. So:
+ // push 0
+ // is 1 byte smaller than:
+ // xor rdx, rdx
+ // push rdx
+
+ argInfo->dstCount = 0;
+ if (arg->gtOper == GT_PUTARG_STK)
+ {
+ GenTree* op1 = arg->gtOp.gtOp1;
+ if (IsContainableImmed(arg, op1)
+#if defined(_TARGET_AMD64_)
+ && !op1->IsIntegralConst(0)
+#endif // _TARGET_AMD64_
+ )
+ {
+ MakeSrcContained(arg, op1);
+ }
+ }
+ }
+ args = args->gtOp.gtOp2;
+ }
+
+#if FEATURE_VARARG
+ // If it is a fast tail call, it is already preferenced to use RAX.
+ // Therefore, no need set src candidates on call tgt again.
+ if (call->IsVarargs() && callHasFloatRegArgs && !call->IsFastTailCall() && (ctrlExpr != nullptr))
+ {
+ // Don't assign the call target to any of the argument registers because
+ // we will use them to also pass floating point arguments as required
+ // by Amd64 ABI.
+ ctrlExpr->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~(RBM_ARG_REGS));
+ }
+#endif // !FEATURE_VARARG
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitBlockStore: Set the NodeInfo for a block store.
+//
+// Arguments:
+// blkNode - The block store node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitBlockStore(GenTreeBlk* blkNode)
+{
+ GenTree* dstAddr = blkNode->Addr();
+ unsigned size = blkNode->gtBlkSize;
+ GenTree* source = blkNode->Data();
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+ // Sources are dest address, initVal or source.
+ // We may require an additional source or temp register for the size.
+ blkNode->gtLsraInfo.srcCount = 2;
+ blkNode->gtLsraInfo.dstCount = 0;
+ blkNode->gtLsraInfo.setInternalCandidates(l, RBM_NONE);
+ GenTreePtr srcAddrOrFill = nullptr;
+ bool isInitBlk = blkNode->OperIsInitBlkOp();
+
+ regMaskTP dstAddrRegMask = RBM_NONE;
+ regMaskTP sourceRegMask = RBM_NONE;
+ regMaskTP blkSizeRegMask = RBM_NONE;
+
+ if (isInitBlk)
+ {
+ GenTree* initVal = source;
+ if (initVal->OperIsInitVal())
+ {
+ initVal = initVal->gtGetOp1();
+ }
+ srcAddrOrFill = initVal;
+
+ switch (blkNode->gtBlkOpKind)
+ {
+ case GenTreeBlk::BlkOpKindUnroll:
+ assert(initVal->IsCnsIntOrI());
+ if (size >= XMM_REGSIZE_BYTES)
+ {
+ // Reserve an XMM register to fill it with
+ // a pack of 16 init value constants.
+ ssize_t fill = initVal->gtIntCon.gtIconVal & 0xFF;
+ blkNode->gtLsraInfo.internalFloatCount = 1;
+ blkNode->gtLsraInfo.setInternalCandidates(l, l->internalFloatRegCandidates());
+ if ((fill == 0) && ((size & 0xf) == 0))
+ {
+ MakeSrcContained(blkNode, source);
+ }
+ // use XMM register to fill with constants, it's AVX instruction and set the flag
+ SetContainsAVXFlags();
+ }
+#ifdef _TARGET_X86_
+ if ((size & 1) != 0)
+ {
+ // On x86, you can't address the lower byte of ESI, EDI, ESP, or EBP when doing
+ // a "mov byte ptr [dest], val". If the fill size is odd, we will try to do this
+ // when unrolling, so only allow byteable registers as the source value. (We could
+ // consider just using BlkOpKindRepInstr instead.)
+ sourceRegMask = RBM_BYTE_REGS;
+ }
+#endif // _TARGET_X86_
+ break;
+
+ case GenTreeBlk::BlkOpKindRepInstr:
+ // rep stos has the following register requirements:
+ // a) The memory address to be in RDI.
+ // b) The fill value has to be in RAX.
+ // c) The buffer size will go in RCX.
+ dstAddrRegMask = RBM_RDI;
+ srcAddrOrFill = initVal;
+ sourceRegMask = RBM_RAX;
+ blkSizeRegMask = RBM_RCX;
+ break;
+
+ case GenTreeBlk::BlkOpKindHelper:
+#ifdef _TARGET_AMD64_
+ // The helper follows the regular AMD64 ABI.
+ dstAddrRegMask = RBM_ARG_0;
+ sourceRegMask = RBM_ARG_1;
+ blkSizeRegMask = RBM_ARG_2;
+#else // !_TARGET_AMD64_
+ dstAddrRegMask = RBM_RDI;
+ sourceRegMask = RBM_RAX;
+ blkSizeRegMask = RBM_RCX;
+#endif // !_TARGET_AMD64_
+ break;
+
+ default:
+ unreached();
+ }
+ }
+ else
+ {
+ // CopyObj or CopyBlk
+ if (source->gtOper == GT_IND)
+ {
+ srcAddrOrFill = blkNode->Data()->gtGetOp1();
+ // We're effectively setting source as contained, but can't call MakeSrcContained, because the
+ // "inheritance" of the srcCount is to a child not a parent - it would "just work" but could be misleading.
+ // If srcAddr is already non-contained, we don't need to change it.
+ if (srcAddrOrFill->gtLsraInfo.getDstCount() == 0)
+ {
+ srcAddrOrFill->gtLsraInfo.setDstCount(1);
+ srcAddrOrFill->gtLsraInfo.setSrcCount(source->gtLsraInfo.srcCount);
+ }
+ m_lsra->clearOperandCounts(source);
+ }
+ else if (!source->IsMultiRegCall() && !source->OperIsSIMD())
+ {
+ assert(source->IsLocal());
+ MakeSrcContained(blkNode, source);
+ }
+ if (blkNode->OperGet() == GT_STORE_OBJ)
+ {
+ if (blkNode->gtBlkOpKind == GenTreeBlk::BlkOpKindRepInstr)
+ {
+ // We need the size of the contiguous Non-GC-region to be in RCX to call rep movsq.
+ blkSizeRegMask = RBM_RCX;
+ }
+ // The srcAddr must be in a register. If it was under a GT_IND, we need to subsume all of its
+ // sources.
+ sourceRegMask = RBM_RSI;
+ dstAddrRegMask = RBM_RDI;
+ }
+ else
+ {
+ switch (blkNode->gtBlkOpKind)
+ {
+ case GenTreeBlk::BlkOpKindUnroll:
+ // If we have a remainder smaller than XMM_REGSIZE_BYTES, we need an integer temp reg.
+ //
+ // x86 specific note: if the size is odd, the last copy operation would be of size 1 byte.
+ // But on x86 only RBM_BYTE_REGS could be used as byte registers. Therefore, exclude
+ // RBM_NON_BYTE_REGS from internal candidates.
+ if ((size & (XMM_REGSIZE_BYTES - 1)) != 0)
+ {
+ blkNode->gtLsraInfo.internalIntCount++;
+ regMaskTP regMask = l->allRegs(TYP_INT);
+
+#ifdef _TARGET_X86_
+ if ((size & 1) != 0)
+ {
+ regMask &= ~RBM_NON_BYTE_REGS;
+ }
+#endif
+ blkNode->gtLsraInfo.setInternalCandidates(l, regMask);
+ }
+
+ if (size >= XMM_REGSIZE_BYTES)
+ {
+ // If we have a buffer larger than XMM_REGSIZE_BYTES,
+ // reserve an XMM register to use it for a
+ // series of 16-byte loads and stores.
+ blkNode->gtLsraInfo.internalFloatCount = 1;
+ blkNode->gtLsraInfo.addInternalCandidates(l, l->internalFloatRegCandidates());
+ // Uses XMM reg for load and store and hence check to see whether AVX instructions
+ // are used for codegen, set ContainsAVX flag
+ SetContainsAVXFlags();
+ }
+ // If src or dst are on stack, we don't have to generate the address
+ // into a register because it's just some constant+SP.
+ if ((srcAddrOrFill != nullptr) && srcAddrOrFill->OperIsLocalAddr())
+ {
+ MakeSrcContained(blkNode, srcAddrOrFill);
+ }
+
+ if (dstAddr->OperIsLocalAddr())
+ {
+ MakeSrcContained(blkNode, dstAddr);
+ }
+
+ break;
+
+ case GenTreeBlk::BlkOpKindRepInstr:
+ // rep stos has the following register requirements:
+ // a) The dest address has to be in RDI.
+ // b) The src address has to be in RSI.
+ // c) The buffer size will go in RCX.
+ dstAddrRegMask = RBM_RDI;
+ sourceRegMask = RBM_RSI;
+ blkSizeRegMask = RBM_RCX;
+ break;
+
+ case GenTreeBlk::BlkOpKindHelper:
+#ifdef _TARGET_AMD64_
+ // The helper follows the regular AMD64 ABI.
+ dstAddrRegMask = RBM_ARG_0;
+ sourceRegMask = RBM_ARG_1;
+ blkSizeRegMask = RBM_ARG_2;
+#else // !_TARGET_AMD64_
+ dstAddrRegMask = RBM_RDI;
+ sourceRegMask = RBM_RAX;
+ blkSizeRegMask = RBM_RCX;
+#endif // !_TARGET_AMD64_
+ break;
+
+ default:
+ unreached();
+ }
+ }
+ }
+
+ if (dstAddrRegMask != RBM_NONE)
+ {
+ dstAddr->gtLsraInfo.setSrcCandidates(l, dstAddrRegMask);
+ }
+ if (sourceRegMask != RBM_NONE)
+ {
+ if (srcAddrOrFill != nullptr)
+ {
+ srcAddrOrFill->gtLsraInfo.setSrcCandidates(l, sourceRegMask);
+ }
+ else
+ {
+ // This is a local source; we'll use a temp register for its address.
+ blkNode->gtLsraInfo.addInternalCandidates(l, sourceRegMask);
+ blkNode->gtLsraInfo.internalIntCount++;
+ }
+ }
+ if (blkSizeRegMask != RBM_NONE)
+ {
+ if (size != 0)
+ {
+ // Reserve a temp register for the block size argument.
+ blkNode->gtLsraInfo.addInternalCandidates(l, blkSizeRegMask);
+ blkNode->gtLsraInfo.internalIntCount++;
+ }
+ else
+ {
+ // The block size argument is a third argument to GT_STORE_DYN_BLK
+ noway_assert(blkNode->gtOper == GT_STORE_DYN_BLK);
+ blkNode->gtLsraInfo.setSrcCount(3);
+ GenTree* blockSize = blkNode->AsDynBlk()->gtDynamicSize;
+ blockSize->gtLsraInfo.setSrcCandidates(l, blkSizeRegMask);
+ }
+ }
+}
+
+#ifdef FEATURE_PUT_STRUCT_ARG_STK
+//------------------------------------------------------------------------
+// TreeNodeInfoInitPutArgStk: Set the NodeInfo for a GT_PUTARG_STK.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitPutArgStk(GenTreePutArgStk* putArgStk)
+{
+ TreeNodeInfo* info = &(putArgStk->gtLsraInfo);
+ LinearScan* l = m_lsra;
+ info->srcCount = 0;
+
+#ifdef _TARGET_X86_
+ if (putArgStk->gtOp1->gtOper == GT_FIELD_LIST)
+ {
+ unsigned fieldCount = 0;
+ bool needsByteTemp = false;
+ bool needsSimdTemp = false;
+ unsigned prevOffset = putArgStk->getArgSize();
+ for (GenTreeFieldList* current = putArgStk->gtOp1->AsFieldList(); current != nullptr; current = current->Rest())
+ {
+ GenTree* const fieldNode = current->Current();
+ const var_types fieldType = fieldNode->TypeGet();
+ const unsigned fieldOffset = current->gtFieldOffset;
+ assert(fieldType != TYP_LONG);
+ info->srcCount++;
+
+ // For x86 we must mark all integral fields as contained or reg-optional, and handle them
+ // accordingly in code generation, since we may have up to 8 fields, which cannot all be in
+ // registers to be consumed atomically by the call.
+ if (varTypeIsIntegralOrI(fieldNode))
+ {
+ if (fieldNode->OperGet() == GT_LCL_VAR)
+ {
+ LclVarDsc* varDsc = &(comp->lvaTable[fieldNode->AsLclVarCommon()->gtLclNum]);
+ if (varDsc->lvTracked && !varDsc->lvDoNotEnregister)
+ {
+ SetRegOptional(fieldNode);
+ }
+ else
+ {
+ MakeSrcContained(putArgStk, fieldNode);
+ }
+ }
+ else if (fieldNode->IsIntCnsFitsInI32())
+ {
+ MakeSrcContained(putArgStk, fieldNode);
+ }
+ else
+ {
+ // For the case where we cannot directly push the value, if we run out of registers,
+ // it would be better to defer computation until we are pushing the arguments rather
+ // than spilling, but this situation is not all that common, as most cases of promoted
+ // structs do not have a large number of fields, and of those most are lclVars or
+ // copy-propagated constants.
+ SetRegOptional(fieldNode);
+ }
+ }
+#if defined(FEATURE_SIMD)
+ // Note that we need to check the GT_FIELD_LIST type, not the fieldType. This is because the
+ // GT_FIELD_LIST will be TYP_SIMD12 whereas the fieldType might be TYP_SIMD16 for lclVar, where
+ // we "round up" to 16.
+ else if (current->gtFieldType == TYP_SIMD12)
+ {
+ needsSimdTemp = true;
+ }
+#endif // defined(FEATURE_SIMD)
+ else
+ {
+ assert(varTypeIsFloating(fieldNode) || varTypeIsSIMD(fieldNode));
+ }
+
+ // We can treat as a slot any field that is stored at a slot boundary, where the previous
+ // field is not in the same slot. (Note that we store the fields in reverse order.)
+ const bool fieldIsSlot = ((fieldOffset % 4) == 0) && ((prevOffset - fieldOffset) >= 4);
+ if (!fieldIsSlot)
+ {
+ if (varTypeIsByte(fieldType))
+ {
+ // If this field is a slot--i.e. it is an integer field that is 4-byte aligned and takes up 4 bytes
+ // (including padding)--we can store the whole value rather than just the byte. Otherwise, we will
+ // need a byte-addressable register for the store. We will enforce this requirement on an internal
+ // register, which we can use to copy multiple byte values.
+ needsByteTemp = true;
+ }
+ }
+
+ if (varTypeIsGC(fieldType))
+ {
+ putArgStk->gtNumberReferenceSlots++;
+ }
+ prevOffset = fieldOffset;
+ fieldCount++;
+ }
+
+ info->dstCount = 0;
+
+ if (putArgStk->gtPutArgStkKind == GenTreePutArgStk::Kind::Push)
+ {
+ // If any of the fields cannot be stored with an actual push, we may need a temporary
+ // register to load the value before storing it to the stack location.
+ info->internalIntCount = 1;
+ regMaskTP regMask = l->allRegs(TYP_INT);
+ if (needsByteTemp)
+ {
+ regMask &= ~RBM_NON_BYTE_REGS;
+ }
+ info->setInternalCandidates(l, regMask);
+ }
+
+#if defined(FEATURE_SIMD)
+ // For PutArgStk of a TYP_SIMD12, we need a SIMD temp register.
+ if (needsSimdTemp)
+ {
+ info->internalFloatCount += 1;
+ info->addInternalCandidates(l, l->allSIMDRegs());
+ }
+#endif // defined(FEATURE_SIMD)
+
+ return;
+ }
+#endif // _TARGET_X86_
+
+#if defined(FEATURE_SIMD) && defined(_TARGET_X86_)
+ // For PutArgStk of a TYP_SIMD12, we need an extra register.
+ if (putArgStk->TypeGet() == TYP_SIMD12)
+ {
+ info->srcCount = putArgStk->gtOp1->gtLsraInfo.dstCount;
+ info->dstCount = 0;
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(l, l->allSIMDRegs());
+ return;
+ }
+#endif // defined(FEATURE_SIMD) && defined(_TARGET_X86_)
+
+ if (putArgStk->TypeGet() != TYP_STRUCT)
+ {
+ TreeNodeInfoInitSimple(putArgStk);
+ return;
+ }
+
+ GenTreePtr dst = putArgStk;
+ GenTreePtr src = putArgStk->gtOp1;
+ GenTreePtr srcAddr = nullptr;
+
+ bool haveLocalAddr = false;
+ if ((src->OperGet() == GT_OBJ) || (src->OperGet() == GT_IND))
+ {
+ srcAddr = src->gtOp.gtOp1;
+ assert(srcAddr != nullptr);
+ haveLocalAddr = srcAddr->OperIsLocalAddr();
+ }
+ else
+ {
+ assert(varTypeIsSIMD(putArgStk));
+ }
+
+ info->srcCount = src->gtLsraInfo.dstCount;
+ info->dstCount = 0;
+
+ // If we have a buffer between XMM_REGSIZE_BYTES and CPBLK_UNROLL_LIMIT bytes, we'll use SSE2.
+ // Structs and buffer with sizes <= CPBLK_UNROLL_LIMIT bytes are occurring in more than 95% of
+ // our framework assemblies, so this is the main code generation scheme we'll use.
+ ssize_t size = putArgStk->gtNumSlots * TARGET_POINTER_SIZE;
+ switch (putArgStk->gtPutArgStkKind)
+ {
+ case GenTreePutArgStk::Kind::Push:
+ case GenTreePutArgStk::Kind::PushAllSlots:
+ case GenTreePutArgStk::Kind::Unroll:
+ // If we have a remainder smaller than XMM_REGSIZE_BYTES, we need an integer temp reg.
+ //
+ // x86 specific note: if the size is odd, the last copy operation would be of size 1 byte.
+ // But on x86 only RBM_BYTE_REGS could be used as byte registers. Therefore, exclude
+ // RBM_NON_BYTE_REGS from internal candidates.
+ if ((putArgStk->gtNumberReferenceSlots == 0) && (size & (XMM_REGSIZE_BYTES - 1)) != 0)
+ {
+ info->internalIntCount++;
+ regMaskTP regMask = l->allRegs(TYP_INT);
+
+#ifdef _TARGET_X86_
+ if ((size % 2) != 0)
+ {
+ regMask &= ~RBM_NON_BYTE_REGS;
+ }
+#endif
+ info->setInternalCandidates(l, regMask);
+ }
+
+#ifdef _TARGET_X86_
+ if (size >= 8)
+#else // !_TARGET_X86_
+ if (size >= XMM_REGSIZE_BYTES)
+#endif // !_TARGET_X86_
+ {
+ // If we have a buffer larger than or equal to XMM_REGSIZE_BYTES on x64/ux,
+ // or larger than or equal to 8 bytes on x86, reserve an XMM register to use it for a
+ // series of 16-byte loads and stores.
+ info->internalFloatCount = 1;
+ info->addInternalCandidates(l, l->internalFloatRegCandidates());
+ SetContainsAVXFlags();
+ }
+ break;
+
+ case GenTreePutArgStk::Kind::RepInstr:
+ info->internalIntCount += 3;
+ info->setInternalCandidates(l, (RBM_RDI | RBM_RCX | RBM_RSI));
+ break;
+
+ default:
+ unreached();
+ }
+
+ // Always mark the OBJ and ADDR as contained trees by the putarg_stk. The codegen will deal with this tree.
+ MakeSrcContained(putArgStk, src);
+
+ if (haveLocalAddr)
+ {
+ // If the source address is the address of a lclVar, make the source address contained to avoid unnecessary
+ // copies.
+ //
+ // To avoid an assertion in MakeSrcContained, increment the parent's source count beforehand and decrement it
+ // afterwards.
+ info->srcCount++;
+ MakeSrcContained(putArgStk, srcAddr);
+ info->srcCount--;
+ }
+}
+#endif // FEATURE_PUT_STRUCT_ARG_STK
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitLclHeap: Set the NodeInfo for a GT_LCLHEAP.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitLclHeap(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+ info->srcCount = 1;
+ info->dstCount = 1;
+
+ // Need a variable number of temp regs (see genLclHeap() in codegenamd64.cpp):
+ // Here '-' means don't care.
+ //
+ // Size? Init Memory? # temp regs
+ // 0 - 0 (returns 0)
+ // const and <=6 reg words - 0 (pushes '0')
+ // const and >6 reg words Yes 0 (pushes '0')
+ // const and <PageSize No 0 (amd64) 1 (x86)
+ // (x86:tmpReg for sutracting from esp)
+ // const and >=PageSize No 2 (regCnt and tmpReg for subtracing from sp)
+ // Non-const Yes 0 (regCnt=targetReg and pushes '0')
+ // Non-const No 2 (regCnt and tmpReg for subtracting from sp)
+ //
+ // Note: Here we don't need internal register to be different from targetReg.
+ // Rather, require it to be different from operand's reg.
+
+ GenTreePtr size = tree->gtOp.gtOp1;
+ if (size->IsCnsIntOrI())
+ {
+ MakeSrcContained(tree, size);
+
+ size_t sizeVal = size->gtIntCon.gtIconVal;
+
+ if (sizeVal == 0)
+ {
+ info->internalIntCount = 0;
+ }
+ else
+ {
+ // Compute the amount of memory to properly STACK_ALIGN.
+ // Note: The Gentree node is not updated here as it is cheap to recompute stack aligned size.
+ // This should also help in debugging as we can examine the original size specified with localloc.
+ sizeVal = AlignUp(sizeVal, STACK_ALIGN);
+
+ // For small allocations up to 6 pointer sized words (i.e. 48 bytes of localloc)
+ // we will generate 'push 0'.
+ assert((sizeVal % REGSIZE_BYTES) == 0);
+ size_t cntRegSizedWords = sizeVal / REGSIZE_BYTES;
+ if (cntRegSizedWords <= 6)
+ {
+ info->internalIntCount = 0;
+ }
+ else if (!compiler->info.compInitMem)
+ {
+ // No need to initialize allocated stack space.
+ if (sizeVal < compiler->eeGetPageSize())
+ {
+#ifdef _TARGET_X86_
+ info->internalIntCount = 1; // x86 needs a register here to avoid generating "sub" on ESP.
+#else // !_TARGET_X86_
+ info->internalIntCount = 0;
+#endif // !_TARGET_X86_
+ }
+ else
+ {
+ // We need two registers: regCnt and RegTmp
+ info->internalIntCount = 2;
+ }
+ }
+ else
+ {
+ // >6 and need to zero initialize allocated stack space.
+ info->internalIntCount = 0;
+ }
+ }
+ }
+ else
+ {
+ if (!compiler->info.compInitMem)
+ {
+ info->internalIntCount = 2;
+ }
+ else
+ {
+ info->internalIntCount = 0;
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitLogicalOp: Set the NodeInfo for GT_AND/GT_OR/GT_XOR,
+// as well as GT_ADD/GT_SUB.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitLogicalOp(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* l = m_lsra;
+
+ // We're not marking a constant hanging on the left of the add
+ // as containable so we assign it to a register having CQ impact.
+ // TODO-XArch-CQ: Detect this case and support both generating a single instruction
+ // for GT_ADD(Constant, SomeTree)
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ GenTree* op1 = tree->gtGetOp1();
+ GenTree* op2 = tree->gtGetOp2();
+
+ // We can directly encode the second operand if it is either a containable constant or a memory-op.
+ // In case of memory-op, we can encode it directly provided its type matches with 'tree' type.
+ // This is because during codegen, type of 'tree' is used to determine emit Type size. If the types
+ // do not match, they get normalized (i.e. sign/zero extended) on load into a register.
+ bool directlyEncodable = false;
+ bool binOpInRMW = false;
+ GenTreePtr operand = nullptr;
+
+ if (IsContainableImmed(tree, op2))
+ {
+ directlyEncodable = true;
+ operand = op2;
+ }
+ else
+ {
+ binOpInRMW = IsBinOpInRMWStoreInd(tree);
+ if (!binOpInRMW)
+ {
+ if (op2->isMemoryOp() && tree->TypeGet() == op2->TypeGet())
+ {
+ directlyEncodable = true;
+ operand = op2;
+ }
+ else if (tree->OperIsCommutative())
+ {
+ if (IsContainableImmed(tree, op1) ||
+ (op1->isMemoryOp() && tree->TypeGet() == op1->TypeGet() && IsSafeToContainMem(tree, op1)))
+ {
+ // If it is safe, we can reverse the order of operands of commutative operations for efficient
+ // codegen
+ directlyEncodable = true;
+ operand = op1;
+ }
+ }
+ }
+ }
+
+ if (directlyEncodable)
+ {
+ assert(operand != nullptr);
+ MakeSrcContained(tree, operand);
+ }
+ else if (!binOpInRMW)
+ {
+ // If this binary op neither has contained operands, nor is a
+ // Read-Modify-Write (RMW) operation, we can mark its operands
+ // as reg optional.
+ SetRegOptionalForBinOp(tree);
+ }
+
+ // Codegen of this tree node sets ZF and SF flags.
+ tree->gtFlags |= GTF_ZSF_SET;
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitModDiv: Set the NodeInfo for GT_MOD/GT_DIV/GT_UMOD/GT_UDIV.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitModDiv(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* l = m_lsra;
+
+ GenTree* op1 = tree->gtGetOp1();
+ GenTree* op2 = tree->gtGetOp2();
+
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ switch (tree->OperGet())
+ {
+ case GT_MOD:
+ case GT_DIV:
+ if (varTypeIsFloating(tree->TypeGet()))
+ {
+ // No implicit conversions at this stage as the expectation is that
+ // everything is made explicit by adding casts.
+ assert(op1->TypeGet() == op2->TypeGet());
+
+ if (op2->isMemoryOp() || op2->IsCnsNonZeroFltOrDbl())
+ {
+ MakeSrcContained(tree, op2);
+ }
+ else
+ {
+ // If there are no containable operands, we can make an operand reg optional.
+ // SSE2 allows only op2 to be a memory-op.
+ SetRegOptional(op2);
+ }
+
+ return;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ // Amd64 Div/Idiv instruction:
+ // Dividend in RAX:RDX and computes
+ // Quotient in RAX, Remainder in RDX
+
+ if (tree->OperGet() == GT_MOD || tree->OperGet() == GT_UMOD)
+ {
+ // We are interested in just the remainder.
+ // RAX is used as a trashable register during computation of remainder.
+ info->setDstCandidates(l, RBM_RDX);
+ }
+ else
+ {
+ // We are interested in just the quotient.
+ // RDX gets used as trashable register during computation of quotient
+ info->setDstCandidates(l, RBM_RAX);
+ }
+
+ bool op2CanBeRegOptional = true;
+#ifdef _TARGET_X86_
+ if (op1->OperGet() == GT_LONG)
+ {
+ // To avoid reg move would like to have op1's low part in RAX and high part in RDX.
+ GenTree* loVal = op1->gtGetOp1();
+ GenTree* hiVal = op1->gtGetOp2();
+
+ // Src count is actually 3, so increment.
+ assert(op2->IsCnsIntOrI());
+ assert(tree->OperGet() == GT_UMOD);
+ info->srcCount++;
+ op2CanBeRegOptional = false;
+
+ // This situation also requires an internal register.
+ info->internalIntCount = 1;
+ info->setInternalCandidates(l, l->allRegs(TYP_INT));
+
+ loVal->gtLsraInfo.setSrcCandidates(l, RBM_EAX);
+ hiVal->gtLsraInfo.setSrcCandidates(l, RBM_EDX);
+ }
+ else
+#endif
+ {
+ // If possible would like to have op1 in RAX to avoid a register move
+ op1->gtLsraInfo.setSrcCandidates(l, RBM_RAX);
+ }
+
+ // divisor can be an r/m, but the memory indirection must be of the same size as the divide
+ if (op2->isMemoryOp() && (op2->TypeGet() == tree->TypeGet()))
+ {
+ MakeSrcContained(tree, op2);
+ }
+ else if (op2CanBeRegOptional)
+ {
+ op2->gtLsraInfo.setSrcCandidates(l, l->allRegs(TYP_INT) & ~(RBM_RAX | RBM_RDX));
+
+ // If there are no containable operands, we can make an operand reg optional.
+ // Div instruction allows only op2 to be a memory op.
+ SetRegOptional(op2);
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitIntrinsic: Set the NodeInfo for a GT_INTRINSIC.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitIntrinsic(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* l = m_lsra;
+
+ // Both operand and its result must be of floating point type.
+ GenTree* op1 = tree->gtGetOp1();
+ assert(varTypeIsFloating(op1));
+ assert(op1->TypeGet() == tree->TypeGet());
+
+ info->srcCount = 1;
+ info->dstCount = 1;
+
+ switch (tree->gtIntrinsic.gtIntrinsicId)
+ {
+ case CORINFO_INTRINSIC_Sqrt:
+ if (op1->isMemoryOp() || op1->IsCnsNonZeroFltOrDbl())
+ {
+ MakeSrcContained(tree, op1);
+ }
+ else
+ {
+ // Mark the operand as reg optional since codegen can still
+ // generate code if op1 is on stack.
+ SetRegOptional(op1);
+ }
+ break;
+
+ case CORINFO_INTRINSIC_Abs:
+ // Abs(float x) = x & 0x7fffffff
+ // Abs(double x) = x & 0x7ffffff ffffffff
+
+ // In case of Abs we need an internal register to hold mask.
+
+ // TODO-XArch-CQ: avoid using an internal register for the mask.
+ // Andps or andpd both will operate on 128-bit operands.
+ // The data section constant to hold the mask is a 64-bit size.
+ // Therefore, we need both the operand and mask to be in
+ // xmm register. When we add support in emitter to emit 128-bit
+ // data constants and instructions that operate on 128-bit
+ // memory operands we can avoid the need for an internal register.
+ if (tree->gtIntrinsic.gtIntrinsicId == CORINFO_INTRINSIC_Abs)
+ {
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(l, l->internalFloatRegCandidates());
+ }
+ break;
+
+#ifdef _TARGET_X86_
+ case CORINFO_INTRINSIC_Cos:
+ case CORINFO_INTRINSIC_Sin:
+ case CORINFO_INTRINSIC_Round:
+ NYI_X86("Math intrinsics Cos, Sin and Round");
+ break;
+#endif // _TARGET_X86_
+
+ default:
+ // Right now only Sqrt/Abs are treated as math intrinsics
+ noway_assert(!"Unsupported math intrinsic");
+ unreached();
+ break;
+ }
+}
+
+#ifdef FEATURE_SIMD
+//------------------------------------------------------------------------
+// TreeNodeInfoInitSIMD: Set the NodeInfo for a GT_SIMD tree.
+//
+// Arguments:
+// tree - The GT_SIMD node of interest
+//
+// Return Value:
+// None.
+
+void Lowering::TreeNodeInfoInitSIMD(GenTree* tree)
+{
+ GenTreeSIMD* simdTree = tree->AsSIMD();
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* lsra = m_lsra;
+ info->dstCount = 1;
+ SetContainsAVXFlags(true, simdTree->gtSIMDSize);
+ switch (simdTree->gtSIMDIntrinsicID)
+ {
+ GenTree* op1;
+ GenTree* op2;
+
+ case SIMDIntrinsicInit:
+ {
+ op1 = tree->gtOp.gtOp1;
+
+#if !defined(_TARGET_64BIT_)
+ if (op1->OperGet() == GT_LONG)
+ {
+ info->srcCount = 2;
+ }
+ else
+#endif // !defined(_TARGET_64BIT_)
+ {
+ info->srcCount = 1;
+ }
+
+ // This sets all fields of a SIMD struct to the given value.
+ // Mark op1 as contained if it is either zero or int constant of all 1's,
+ // or a float constant with 16 or 32 byte simdType (AVX case)
+ //
+ // Should never see small int base type vectors except for zero initialization.
+ assert(!varTypeIsSmallInt(simdTree->gtSIMDBaseType) || op1->IsIntegralConst(0));
+
+#if !defined(_TARGET_64BIT_)
+ if (op1->OperGet() == GT_LONG)
+ {
+ GenTree* op1lo = op1->gtGetOp1();
+ GenTree* op1hi = op1->gtGetOp2();
+
+ if ((op1lo->IsIntegralConst(0) && op1hi->IsIntegralConst(0)) ||
+ (op1lo->IsIntegralConst(-1) && op1hi->IsIntegralConst(-1)))
+ {
+ assert(op1->gtLsraInfo.srcCount == 0);
+ assert(op1->gtLsraInfo.dstCount == 0);
+ assert(op1lo->gtLsraInfo.srcCount == 0);
+ assert(op1lo->gtLsraInfo.dstCount == 1);
+ assert(op1hi->gtLsraInfo.srcCount == 0);
+ assert(op1hi->gtLsraInfo.dstCount == 1);
+
+ op1lo->gtLsraInfo.dstCount = 0;
+ op1hi->gtLsraInfo.dstCount = 0;
+ info->srcCount = 0;
+ }
+ else
+ {
+ // need a temp
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ info->isInternalRegDelayFree = true;
+ }
+ }
+ else
+#endif // !defined(_TARGET_64BIT_)
+ if (op1->IsFPZero() || op1->IsIntegralConst(0) ||
+ (varTypeIsIntegral(simdTree->gtSIMDBaseType) && op1->IsIntegralConst(-1)))
+ {
+ MakeSrcContained(tree, op1);
+ info->srcCount = 0;
+ }
+ else if ((comp->getSIMDInstructionSet() == InstructionSet_AVX) &&
+ ((simdTree->gtSIMDSize == 16) || (simdTree->gtSIMDSize == 32)))
+ {
+ // Either op1 is a float or dbl constant or an addr
+ if (op1->IsCnsFltOrDbl() || op1->OperIsLocalAddr())
+ {
+ MakeSrcContained(tree, op1);
+ info->srcCount = 0;
+ }
+ }
+ }
+ break;
+
+ case SIMDIntrinsicInitN:
+ {
+ info->srcCount = (short)(simdTree->gtSIMDSize / genTypeSize(simdTree->gtSIMDBaseType));
+
+ // Need an internal register to stitch together all the values into a single vector in a SIMD reg.
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ }
+ break;
+
+ case SIMDIntrinsicInitArray:
+ // We have an array and an index, which may be contained.
+ info->srcCount = 2;
+ CheckImmedAndMakeContained(tree, tree->gtGetOp2());
+ break;
+
+ case SIMDIntrinsicDiv:
+ // SSE2 has no instruction support for division on integer vectors
+ noway_assert(varTypeIsFloating(simdTree->gtSIMDBaseType));
+ info->srcCount = 2;
+ break;
+
+ case SIMDIntrinsicAbs:
+ // float/double vectors: This gets implemented as bitwise-And operation
+ // with a mask and hence should never see here.
+ //
+ // Must be a Vector<int> or Vector<short> Vector<sbyte>
+ assert(simdTree->gtSIMDBaseType == TYP_INT || simdTree->gtSIMDBaseType == TYP_SHORT ||
+ simdTree->gtSIMDBaseType == TYP_BYTE);
+ assert(comp->getSIMDInstructionSet() >= InstructionSet_SSE3_4);
+ info->srcCount = 1;
+ break;
+
+ case SIMDIntrinsicSqrt:
+ // SSE2 has no instruction support for sqrt on integer vectors.
+ noway_assert(varTypeIsFloating(simdTree->gtSIMDBaseType));
+ info->srcCount = 1;
+ break;
+
+ case SIMDIntrinsicAdd:
+ case SIMDIntrinsicSub:
+ case SIMDIntrinsicMul:
+ case SIMDIntrinsicBitwiseAnd:
+ case SIMDIntrinsicBitwiseAndNot:
+ case SIMDIntrinsicBitwiseOr:
+ case SIMDIntrinsicBitwiseXor:
+ case SIMDIntrinsicMin:
+ case SIMDIntrinsicMax:
+ info->srcCount = 2;
+
+ // SSE2 32-bit integer multiplication requires two temp regs
+ if (simdTree->gtSIMDIntrinsicID == SIMDIntrinsicMul && simdTree->gtSIMDBaseType == TYP_INT &&
+ comp->getSIMDInstructionSet() == InstructionSet_SSE2)
+ {
+ info->internalFloatCount = 2;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ }
+ break;
+
+ case SIMDIntrinsicEqual:
+ info->srcCount = 2;
+ break;
+
+ // SSE2 doesn't support < and <= directly on int vectors.
+ // Instead we need to use > and >= with swapped operands.
+ case SIMDIntrinsicLessThan:
+ case SIMDIntrinsicLessThanOrEqual:
+ info->srcCount = 2;
+ noway_assert(!varTypeIsIntegral(simdTree->gtSIMDBaseType));
+ break;
+
+ // SIMDIntrinsicEqual is supported only on non-floating point base type vectors.
+ // SSE2 cmpps/pd doesn't support > and >= directly on float/double vectors.
+ // Instead we need to use < and <= with swapped operands.
+ case SIMDIntrinsicGreaterThan:
+ noway_assert(!varTypeIsFloating(simdTree->gtSIMDBaseType));
+ info->srcCount = 2;
+ break;
+
+ case SIMDIntrinsicOpEquality:
+ case SIMDIntrinsicOpInEquality:
+ info->srcCount = 2;
+
+ // On SSE4/AVX, we can generate optimal code for (in)equality
+ // against zero using ptest. We can safely do this optimization
+ // for integral vectors but not for floating-point for the reason
+ // that we have +0.0 and -0.0 and +0.0 == -0.0
+ op2 = tree->gtGetOp2();
+ if ((comp->getSIMDInstructionSet() >= InstructionSet_SSE3_4) && op2->IsIntegralConstVector(0))
+ {
+ MakeSrcContained(tree, op2);
+ }
+ else
+ {
+ // Need one SIMD register as scratch.
+ // See genSIMDIntrinsicRelOp() for details on code sequence generated and
+ // the need for one scratch register.
+ //
+ // Note these intrinsics produce a BOOL result, hence internal float
+ // registers reserved are guaranteed to be different from target
+ // integer register without explicitly specifying.
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ }
+ break;
+
+ case SIMDIntrinsicDotProduct:
+ // Float/Double vectors:
+ // For SSE, or AVX with 32-byte vectors, we also need an internal register
+ // as scratch. Further we need the targetReg and internal reg to be distinct
+ // registers. Note that if this is a TYP_SIMD16 or smaller on AVX, then we
+ // don't need a tmpReg.
+ //
+ // 32-byte integer vector on SSE4/AVX:
+ // will take advantage of phaddd, which operates only on 128-bit xmm reg.
+ // This will need 1 (in case of SSE4) or 2 (in case of AVX) internal
+ // registers since targetReg is an int type register.
+ //
+ // See genSIMDIntrinsicDotProduct() for details on code sequence generated
+ // and the need for scratch registers.
+ if (varTypeIsFloating(simdTree->gtSIMDBaseType))
+ {
+ if ((comp->getSIMDInstructionSet() == InstructionSet_SSE2) ||
+ (simdTree->gtOp.gtOp1->TypeGet() == TYP_SIMD32))
+ {
+ info->internalFloatCount = 1;
+ info->isInternalRegDelayFree = true;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ }
+ // else don't need scratch reg(s).
+ }
+ else
+ {
+ assert(simdTree->gtSIMDBaseType == TYP_INT && comp->getSIMDInstructionSet() >= InstructionSet_SSE3_4);
+
+ // No need to set isInternalRegDelayFree since targetReg is a
+ // an int type reg and guaranteed to be different from xmm/ymm
+ // regs.
+ info->internalFloatCount = comp->canUseAVX() ? 2 : 1;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ }
+ info->srcCount = 2;
+ break;
+
+ case SIMDIntrinsicGetItem:
+ {
+ // This implements get_Item method. The sources are:
+ // - the source SIMD struct
+ // - index (which element to get)
+ // The result is baseType of SIMD struct.
+ info->srcCount = 2;
+ op1 = tree->gtOp.gtOp1;
+ op2 = tree->gtOp.gtOp2;
+
+ // If the index is a constant, mark it as contained.
+ if (CheckImmedAndMakeContained(tree, op2))
+ {
+ info->srcCount = 1;
+ }
+
+ if (op1->isMemoryOp())
+ {
+ MakeSrcContained(tree, op1);
+
+ // Although GT_IND of TYP_SIMD12 reserves an internal float
+ // register for reading 4 and 8 bytes from memory and
+ // assembling them into target XMM reg, it is not required
+ // in this case.
+ op1->gtLsraInfo.internalIntCount = 0;
+ op1->gtLsraInfo.internalFloatCount = 0;
+ }
+ else
+ {
+ // If the index is not a constant, we will use the SIMD temp location to store the vector.
+ // Otherwise, if the baseType is floating point, the targetReg will be a xmm reg and we
+ // can use that in the process of extracting the element.
+ //
+ // If the index is a constant and base type is a small int we can use pextrw, but on AVX
+ // we will need a temp if are indexing into the upper half of the AVX register.
+ // In all other cases with constant index, we need a temp xmm register to extract the
+ // element if index is other than zero.
+
+ if (!op2->IsCnsIntOrI())
+ {
+ (void)comp->getSIMDInitTempVarNum();
+ }
+ else if (!varTypeIsFloating(simdTree->gtSIMDBaseType))
+ {
+ bool needFloatTemp;
+ if (varTypeIsSmallInt(simdTree->gtSIMDBaseType) &&
+ (comp->getSIMDInstructionSet() == InstructionSet_AVX))
+ {
+ int byteShiftCnt = (int)op2->AsIntCon()->gtIconVal * genTypeSize(simdTree->gtSIMDBaseType);
+ needFloatTemp = (byteShiftCnt >= 16);
+ }
+ else
+ {
+ needFloatTemp = !op2->IsIntegralConst(0);
+ }
+
+ if (needFloatTemp)
+ {
+ info->internalFloatCount = 1;
+ info->setInternalCandidates(lsra, lsra->allSIMDRegs());
+ }
+ }
+ }
+ }
+ break;
+
+ case SIMDIntrinsicSetX:
+ case SIMDIntrinsicSetY:
+ case SIMDIntrinsicSetZ:
+ case SIMDIntrinsicSetW:
+ info->srcCount = 2;
+
+ // We need an internal integer register for SSE2 codegen
+ if (comp->getSIMDInstructionSet() == InstructionSet_SSE2)
+ {
+ info->internalIntCount = 1;
+ info->setInternalCandidates(lsra, lsra->allRegs(TYP_INT));
+ }
+
+ break;
+
+ case SIMDIntrinsicCast:
+ info->srcCount = 1;
+ break;
+
+ case SIMDIntrinsicShuffleSSE2:
+ info->srcCount = 2;
+ // Second operand is an integer constant and marked as contained.
+ op2 = tree->gtOp.gtOp2;
+ noway_assert(op2->IsCnsIntOrI());
+ MakeSrcContained(tree, op2);
+ break;
+
+ case SIMDIntrinsicGetX:
+ case SIMDIntrinsicGetY:
+ case SIMDIntrinsicGetZ:
+ case SIMDIntrinsicGetW:
+ case SIMDIntrinsicGetOne:
+ case SIMDIntrinsicGetZero:
+ case SIMDIntrinsicGetCount:
+ case SIMDIntrinsicGetAllOnes:
+ assert(!"Get intrinsics should not be seen during Lowering.");
+ unreached();
+
+ default:
+ noway_assert(!"Unimplemented SIMD node type.");
+ unreached();
+ }
+}
+#endif // FEATURE_SIMD
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitCast: Set the NodeInfo for a GT_CAST.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitCast(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+
+ // TODO-XArch-CQ: Int-To-Int conversions - castOp cannot be a memory op and must have an assigned register.
+ // see CodeGen::genIntToIntCast()
+
+ info->srcCount = 1;
+ info->dstCount = 1;
+
+ // Non-overflow casts to/from float/double are done using SSE2 instructions
+ // and that allow the source operand to be either a reg or memop. Given the
+ // fact that casts from small int to float/double are done as two-level casts,
+ // the source operand is always guaranteed to be of size 4 or 8 bytes.
+ var_types castToType = tree->CastToType();
+ GenTreePtr castOp = tree->gtCast.CastOp();
+ var_types castOpType = castOp->TypeGet();
+ if (tree->gtFlags & GTF_UNSIGNED)
+ {
+ castOpType = genUnsignedType(castOpType);
+ }
+
+ if (!tree->gtOverflow() && (varTypeIsFloating(castToType) || varTypeIsFloating(castOpType)))
+ {
+#ifdef DEBUG
+ // If converting to float/double, the operand must be 4 or 8 byte in size.
+ if (varTypeIsFloating(castToType))
+ {
+ unsigned opSize = genTypeSize(castOpType);
+ assert(opSize == 4 || opSize == 8);
+ }
+#endif // DEBUG
+
+ // U8 -> R8 conversion requires that the operand be in a register.
+ if (castOpType != TYP_ULONG)
+ {
+ if (castOp->isMemoryOp() || castOp->IsCnsNonZeroFltOrDbl())
+ {
+ MakeSrcContained(tree, castOp);
+ }
+ else
+ {
+ // Mark castOp as reg optional to indicate codegen
+ // can still generate code if it is on stack.
+ SetRegOptional(castOp);
+ }
+ }
+ }
+
+#if !defined(_TARGET_64BIT_)
+ if (varTypeIsLong(castOpType))
+ {
+ noway_assert(castOp->OperGet() == GT_LONG);
+ info->srcCount = 2;
+ }
+#endif // !defined(_TARGET_64BIT_)
+
+ // some overflow checks need a temp reg:
+ // - GT_CAST from INT64/UINT64 to UINT32
+ if (tree->gtOverflow() && (castToType == TYP_UINT))
+ {
+ if (genTypeSize(castOpType) == 8)
+ {
+ // Here we don't need internal register to be different from targetReg,
+ // rather require it to be different from operand's reg.
+ info->internalIntCount = 1;
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitGCWriteBarrier: Set the NodeInfo for a GT_STOREIND requiring a write barrier.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitGCWriteBarrier(GenTree* tree)
+{
+ assert(tree->OperGet() == GT_STOREIND);
+
+ GenTreeStoreInd* dst = tree->AsStoreInd();
+ GenTreePtr addr = dst->Addr();
+ GenTreePtr src = dst->Data();
+
+ if (addr->OperGet() == GT_LEA)
+ {
+ // In the case where we are doing a helper assignment, if the dst
+ // is an indir through an lea, we need to actually instantiate the
+ // lea in a register
+ GenTreeAddrMode* lea = addr->AsAddrMode();
+
+ int leaSrcCount = 0;
+ if (lea->HasBase())
+ {
+ leaSrcCount++;
+ }
+ if (lea->HasIndex())
+ {
+ leaSrcCount++;
+ }
+ lea->gtLsraInfo.srcCount = leaSrcCount;
+ lea->gtLsraInfo.dstCount = 1;
+ }
+
+ bool useOptimizedWriteBarrierHelper = false; // By default, assume no optimized write barriers.
+
+#if NOGC_WRITE_BARRIERS
+
+#if defined(_TARGET_X86_)
+
+ useOptimizedWriteBarrierHelper = true; // On x86, use the optimized write barriers by default.
+#ifdef DEBUG
+ GCInfo::WriteBarrierForm wbf = comp->codeGen->gcInfo.gcIsWriteBarrierCandidate(tree, src);
+ if (wbf == GCInfo::WBF_NoBarrier_CheckNotHeapInDebug) // This one is always a call to a C++ method.
+ {
+ useOptimizedWriteBarrierHelper = false;
+ }
+#endif
+
+ if (useOptimizedWriteBarrierHelper)
+ {
+ // Special write barrier:
+ // op1 (addr) goes into REG_WRITE_BARRIER (rdx) and
+ // op2 (src) goes into any int register.
+ addr->gtLsraInfo.setSrcCandidates(m_lsra, RBM_WRITE_BARRIER);
+ src->gtLsraInfo.setSrcCandidates(m_lsra, RBM_WRITE_BARRIER_SRC);
+ }
+
+#else // !defined(_TARGET_X86_)
+#error "NOGC_WRITE_BARRIERS is not supported"
+#endif // !defined(_TARGET_X86_)
+
+#endif // NOGC_WRITE_BARRIERS
+
+ if (!useOptimizedWriteBarrierHelper)
+ {
+ // For the standard JIT Helper calls:
+ // op1 (addr) goes into REG_ARG_0 and
+ // op2 (src) goes into REG_ARG_1
+ addr->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_0);
+ src->gtLsraInfo.setSrcCandidates(m_lsra, RBM_ARG_1);
+ }
+
+ // Both src and dst must reside in a register, which they should since we haven't set
+ // either of them as contained.
+ assert(addr->gtLsraInfo.dstCount == 1);
+ assert(src->gtLsraInfo.dstCount == 1);
+}
+
+//-----------------------------------------------------------------------------------------
+// TreeNodeInfoInitIndir: Specify register requirements for address expression of an indirection operation.
+//
+// Arguments:
+// indirTree - GT_IND or GT_STOREIND gentree node
+//
+void Lowering::TreeNodeInfoInitIndir(GenTreePtr indirTree)
+{
+ assert(indirTree->isIndir());
+ // If this is the rhs of a block copy (i.e. non-enregisterable struct),
+ // it has no register requirements.
+ if (indirTree->TypeGet() == TYP_STRUCT)
+ {
+ return;
+ }
+
+ GenTreePtr addr = indirTree->gtGetOp1();
+ TreeNodeInfo* info = &(indirTree->gtLsraInfo);
+
+ GenTreePtr base = nullptr;
+ GenTreePtr index = nullptr;
+ unsigned mul, cns;
+ bool rev;
+
+#ifdef FEATURE_SIMD
+ // If indirTree is of TYP_SIMD12, don't mark addr as contained
+ // so that it always get computed to a register. This would
+ // mean codegen side logic doesn't need to handle all possible
+ // addr expressions that could be contained.
+ //
+ // TODO-XArch-CQ: handle other addr mode expressions that could be marked
+ // as contained.
+ if (indirTree->TypeGet() == TYP_SIMD12)
+ {
+ // Vector3 is read/written as two reads/writes: 8 byte and 4 byte.
+ // To assemble the vector properly we would need an additional
+ // XMM register.
+ info->internalFloatCount = 1;
+
+ // In case of GT_IND we need an internal register different from targetReg and
+ // both of the registers are used at the same time.
+ if (indirTree->OperGet() == GT_IND)
+ {
+ info->isInternalRegDelayFree = true;
+ }
+
+ info->setInternalCandidates(m_lsra, m_lsra->allSIMDRegs());
+
+ return;
+ }
+#endif // FEATURE_SIMD
+
+ if ((indirTree->gtFlags & GTF_IND_REQ_ADDR_IN_REG) != 0)
+ {
+ // The address of an indirection that requires its address in a reg.
+ // Skip any further processing that might otherwise make it contained.
+ }
+ else if ((addr->OperGet() == GT_CLS_VAR_ADDR) || (addr->OperGet() == GT_LCL_VAR_ADDR))
+ {
+ // These nodes go into an addr mode:
+ // - GT_CLS_VAR_ADDR turns into a constant.
+ // - GT_LCL_VAR_ADDR is a stack addr mode.
+
+ // make this contained, it turns into a constant that goes into an addr mode
+ MakeSrcContained(indirTree, addr);
+ }
+ else if (addr->IsCnsIntOrI() && addr->AsIntConCommon()->FitsInAddrBase(comp))
+ {
+ // Amd64:
+ // We can mark any pc-relative 32-bit addr as containable, except for a direct VSD call address.
+ // (i.e. those VSD calls for which stub addr is known during JIT compilation time). In this case,
+ // VM requires us to pass stub addr in REG_VIRTUAL_STUB_PARAM - see LowerVirtualStubCall(). For
+ // that reason we cannot mark such an addr as contained. Note that this is not an issue for
+ // indirect VSD calls since morphArgs() is explicitly materializing hidden param as a non-standard
+ // argument.
+ //
+ // Workaround:
+ // Note that LowerVirtualStubCall() sets addr->gtRegNum to REG_VIRTUAL_STUB_PARAM and Lowering::doPhase()
+ // sets destination candidates on such nodes and resets addr->gtRegNum to REG_NA before calling
+ // TreeNodeInfoInit(). Ideally we should set a flag on addr nodes that shouldn't be marked as contained
+ // (in LowerVirtualStubCall()), but we don't have any GTF_* flags left for that purpose. As a workaround
+ // an explicit check is made here.
+ //
+ // On x86, direct VSD is done via a relative branch, and in fact it MUST be contained.
+ MakeSrcContained(indirTree, addr);
+ }
+ else if ((addr->OperGet() == GT_LEA) && IsSafeToContainMem(indirTree, addr))
+ {
+ MakeSrcContained(indirTree, addr);
+ }
+ else if (addr->gtOper == GT_ARR_ELEM)
+ {
+ // The GT_ARR_ELEM consumes all the indices and produces the offset.
+ // The array object lives until the mem access.
+ // We also consume the target register to which the address is
+ // computed
+
+ info->srcCount++;
+ assert(addr->gtLsraInfo.srcCount >= 2);
+ addr->gtLsraInfo.srcCount -= 1;
+ }
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitCmp: Set the register requirements for a compare.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitCmp(GenTreePtr tree)
+{
+ assert(tree->OperIsCompare());
+
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+#ifdef _TARGET_X86_
+ // If the compare is used by a jump, we just need to set the condition codes. If not, then we need
+ // to store the result into the low byte of a register, which requires the dst be a byteable register.
+ // We always set the dst candidates, though, because if this is compare is consumed by a jump, they
+ // won't be used. We might be able to use GTF_RELOP_JMP_USED to determine this case, but it's not clear
+ // that flag is maintained until this location (especially for decomposed long compares).
+ info->setDstCandidates(m_lsra, RBM_BYTE_REGS);
+#endif // _TARGET_X86_
+
+ GenTreePtr op1 = tree->gtOp.gtOp1;
+ GenTreePtr op2 = tree->gtOp.gtOp2;
+ var_types op1Type = op1->TypeGet();
+ var_types op2Type = op2->TypeGet();
+
+#if !defined(_TARGET_64BIT_)
+ // Long compares will consume GT_LONG nodes, each of which produces two results.
+ // Thus for each long operand there will be an additional source.
+ // TODO-X86-CQ: Mark hiOp2 and loOp2 as contained if it is a constant or a memory op.
+ if (varTypeIsLong(op1Type))
+ {
+ info->srcCount++;
+ }
+ if (varTypeIsLong(op2Type))
+ {
+ info->srcCount++;
+ }
+#endif // !defined(_TARGET_64BIT_)
+
+ // If either of op1 or op2 is floating point values, then we need to use
+ // ucomiss or ucomisd to compare, both of which support the following form:
+ // ucomis[s|d] xmm, xmm/mem
+ // That is only the second operand can be a memory op.
+ //
+ // Second operand is a memory Op: Note that depending on comparison operator,
+ // the operands of ucomis[s|d] need to be reversed. Therefore, either op1 or
+ // op2 can be a memory op depending on the comparison operator.
+ if (varTypeIsFloating(op1Type))
+ {
+ // The type of the operands has to be the same and no implicit conversions at this stage.
+ assert(op1Type == op2Type);
+
+ bool reverseOps;
+ if ((tree->gtFlags & GTF_RELOP_NAN_UN) != 0)
+ {
+ // Unordered comparison case
+ reverseOps = tree->OperIs(GT_GT, GT_GE);
+ }
+ else
+ {
+ reverseOps = tree->OperIs(GT_LT, GT_LE);
+ }
+
+ GenTreePtr otherOp;
+ if (reverseOps)
+ {
+ otherOp = op1;
+ }
+ else
+ {
+ otherOp = op2;
+ }
+
+ assert(otherOp != nullptr);
+ if (otherOp->IsCnsNonZeroFltOrDbl())
+ {
+ MakeSrcContained(tree, otherOp);
+ }
+ else if (otherOp->isMemoryOp() && ((otherOp == op2) || IsSafeToContainMem(tree, otherOp)))
+ {
+ MakeSrcContained(tree, otherOp);
+ }
+ else
+ {
+ // SSE2 allows only otherOp to be a memory-op. Since otherOp is not
+ // contained, we can mark it reg-optional.
+ SetRegOptional(otherOp);
+ }
+
+ return;
+ }
+
+ // TODO-XArch-CQ: factor out cmp optimization in 'genCondSetFlags' to be used here
+ // or in other backend.
+
+ if (CheckImmedAndMakeContained(tree, op2))
+ {
+ // If the types are the same, or if the constant is of the correct size,
+ // we can treat the isMemoryOp as contained.
+ if (op1Type == op2Type)
+ {
+ if (op1->isMemoryOp())
+ {
+ MakeSrcContained(tree, op1);
+ }
+ // If op1 codegen sets ZF and SF flags and ==/!= against
+ // zero, we don't need to generate test instruction,
+ // provided we don't have another GenTree node between op1
+ // and tree that could potentially modify flags.
+ //
+ // TODO-CQ: right now the below peep is inexpensive and
+ // gets the benefit in most of cases because in majority
+ // of cases op1, op2 and tree would be in that order in
+ // execution. In general we should be able to check that all
+ // the nodes that come after op1 in execution order do not
+ // modify the flags so that it is safe to avoid generating a
+ // test instruction. Such a check requires that on each
+ // GenTree node we need to set the info whether its codegen
+ // will modify flags.
+ //
+ // TODO-CQ: We can optimize compare against zero in the
+ // following cases by generating the branch as indicated
+ // against each case.
+ // 1) unsigned compare
+ // < 0 - always FALSE
+ // <= 0 - ZF=1 and jne
+ // > 0 - ZF=0 and je
+ // >= 0 - always TRUE
+ //
+ // 2) signed compare
+ // < 0 - SF=1 and js
+ // >= 0 - SF=0 and jns
+ else if (tree->OperIs(GT_EQ, GT_NE) && op1->gtSetZSFlags() && op2->IsIntegralConst(0) &&
+ (op1->gtNext == op2) && (op2->gtNext == tree))
+ {
+ // Require codegen of op1 to set the flags.
+ assert(!op1->gtSetFlags());
+ op1->gtFlags |= GTF_SET_FLAGS;
+ }
+ else
+ {
+ SetRegOptional(op1);
+ }
+ }
+ }
+ else if (op1Type == op2Type)
+ {
+ // Note that TEST does not have a r,rm encoding like CMP has but we can still
+ // contain the second operand because the emitter maps both r,rm and rm,r to
+ // the same instruction code. This avoids the need to special case TEST here.
+ if (op2->isMemoryOp())
+ {
+ MakeSrcContained(tree, op2);
+ }
+ else if (op1->isMemoryOp() && IsSafeToContainMem(tree, op1))
+ {
+ MakeSrcContained(tree, op1);
+ }
+ else if (op1->IsCnsIntOrI())
+ {
+ // TODO-CQ: We should be able to support swapping op1 and op2 to generate cmp reg, imm,
+ // but there is currently an assert in CodeGen::genCompareInt().
+ // https://github.com/dotnet/coreclr/issues/7270
+ SetRegOptional(op2);
+ }
+ else
+ {
+ // One of op1 or op2 could be marked as reg optional
+ // to indicate that codegen can still generate code
+ // if one of them is on stack.
+ SetRegOptional(PreferredRegOptionalOperand(tree));
+ }
+ }
+}
+
+//--------------------------------------------------------------------------------------------
+// TreeNodeInfoInitIfRMWMemOp: Checks to see if there is a RMW memory operation rooted at
+// GT_STOREIND node and if so will mark register requirements for nodes under storeInd so
+// that CodeGen will generate a single instruction of the form:
+//
+// binOp [addressing mode], reg
+//
+// Parameters
+// storeInd - GT_STOREIND node
+//
+// Return value
+// True, if RMW memory op tree pattern is recognized and op counts are set.
+// False otherwise.
+//
+bool Lowering::TreeNodeInfoInitIfRMWMemOp(GenTreePtr storeInd)
+{
+ assert(storeInd->OperGet() == GT_STOREIND);
+
+ // SSE2 doesn't support RMW on float values
+ assert(!varTypeIsFloating(storeInd));
+
+ // Terminology:
+ // indirDst = memory write of an addr mode (i.e. storeind destination)
+ // indirSrc = value being written to memory (i.e. storeind source which could a binary/unary op)
+ // indirCandidate = memory read i.e. a gtInd of an addr mode
+ // indirOpSource = source operand used in binary/unary op (i.e. source operand of indirSrc node)
+
+ GenTreePtr indirCandidate = nullptr;
+ GenTreePtr indirOpSource = nullptr;
+
+ if (!IsRMWMemOpRootedAtStoreInd(storeInd, &indirCandidate, &indirOpSource))
+ {
+ JITDUMP("Lower of StoreInd didn't mark the node as self contained for reason: %d\n",
+ storeInd->AsStoreInd()->GetRMWStatus());
+ DISPTREERANGE(BlockRange(), storeInd);
+ return false;
+ }
+
+ GenTreePtr indirDst = storeInd->gtGetOp1();
+ GenTreePtr indirSrc = storeInd->gtGetOp2();
+ genTreeOps oper = indirSrc->OperGet();
+
+ // At this point we have successfully detected a RMW memory op of one of the following forms
+ // storeInd(indirDst, indirSrc(indirCandidate, indirOpSource)) OR
+ // storeInd(indirDst, indirSrc(indirOpSource, indirCandidate) in case of commutative operations OR
+ // storeInd(indirDst, indirSrc(indirCandidate) in case of unary operations
+ //
+ // Here indirSrc = one of the supported binary or unary operation for RMW of memory
+ // indirCandidate = a GT_IND node
+ // indirCandidateChild = operand of GT_IND indirCandidate
+ //
+ // The logic below essentially does the following
+ // Make indirOpSource contained.
+ // Make indirSrc contained.
+ // Make indirCandidate contained.
+ // Make indirCandidateChild contained.
+ // Make indirDst contained except when it is a GT_LCL_VAR or GT_CNS_INT that doesn't fit within addr
+ // base.
+ // Note that due to the way containment is supported, we accomplish some of the above by clearing operand counts
+ // and directly propagating them upward.
+ //
+
+ TreeNodeInfo* info = &(storeInd->gtLsraInfo);
+ info->dstCount = 0;
+
+ if (GenTree::OperIsBinary(oper))
+ {
+ // On Xarch RMW operations require that the source memory-op be in a register.
+ assert(!indirOpSource->isMemoryOp() || indirOpSource->gtLsraInfo.dstCount == 1);
+ JITDUMP("Lower succesfully detected an assignment of the form: *addrMode BinOp= source\n");
+ info->srcCount = indirOpSource->gtLsraInfo.dstCount;
+ }
+ else
+ {
+ assert(GenTree::OperIsUnary(oper));
+ JITDUMP("Lower succesfully detected an assignment of the form: *addrMode = UnaryOp(*addrMode)\n");
+ info->srcCount = 0;
+ }
+ DISPTREERANGE(BlockRange(), storeInd);
+
+ m_lsra->clearOperandCounts(indirSrc);
+ m_lsra->clearOperandCounts(indirCandidate);
+
+ GenTreePtr indirCandidateChild = indirCandidate->gtGetOp1();
+ if (indirCandidateChild->OperGet() == GT_LEA)
+ {
+ GenTreeAddrMode* addrMode = indirCandidateChild->AsAddrMode();
+
+ if (addrMode->HasBase())
+ {
+ assert(addrMode->Base()->OperIsLeaf());
+ m_lsra->clearOperandCounts(addrMode->Base());
+ info->srcCount++;
+ }
+
+ if (addrMode->HasIndex())
+ {
+ assert(addrMode->Index()->OperIsLeaf());
+ m_lsra->clearOperandCounts(addrMode->Index());
+ info->srcCount++;
+ }
+
+ m_lsra->clearOperandCounts(indirDst);
+ }
+ else
+ {
+ assert(indirCandidateChild->OperGet() == GT_LCL_VAR || indirCandidateChild->OperGet() == GT_LCL_VAR_ADDR ||
+ indirCandidateChild->OperGet() == GT_CLS_VAR_ADDR || indirCandidateChild->OperGet() == GT_CNS_INT);
+
+ // If it is a GT_LCL_VAR, it still needs the reg to hold the address.
+ // We would still need a reg for GT_CNS_INT if it doesn't fit within addressing mode base.
+ // For GT_CLS_VAR_ADDR, we don't need a reg to hold the address, because field address value is known at jit
+ // time. Also, we don't need a reg for GT_CLS_VAR_ADDR.
+ if (indirCandidateChild->OperGet() == GT_LCL_VAR_ADDR || indirCandidateChild->OperGet() == GT_CLS_VAR_ADDR)
+ {
+ m_lsra->clearOperandCounts(indirDst);
+ }
+ else if (indirCandidateChild->IsCnsIntOrI() && indirCandidateChild->AsIntConCommon()->FitsInAddrBase(comp))
+ {
+ m_lsra->clearOperandCounts(indirDst);
+ }
+ else
+ {
+ // Need a reg and hence increment src count of storeind
+ info->srcCount += indirCandidateChild->gtLsraInfo.dstCount;
+ }
+ }
+ m_lsra->clearOperandCounts(indirCandidateChild);
+
+#ifdef _TARGET_X86_
+ if (varTypeIsByte(storeInd))
+ {
+ // If storeInd is of TYP_BYTE, set indirOpSources to byteable registers.
+ bool containedNode = indirOpSource->gtLsraInfo.dstCount == 0;
+ if (!containedNode)
+ {
+ regMaskTP regMask = indirOpSource->gtLsraInfo.getSrcCandidates(m_lsra);
+ assert(regMask != RBM_NONE);
+ indirOpSource->gtLsraInfo.setSrcCandidates(m_lsra, regMask & ~RBM_NON_BYTE_REGS);
+ }
+ }
+#endif
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+// TreeNodeInfoInitMul: Set the NodeInfo for a multiply.
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// None.
+//
+void Lowering::TreeNodeInfoInitMul(GenTreePtr tree)
+{
+#if defined(_TARGET_X86_)
+ assert(tree->OperGet() == GT_MUL || tree->OperGet() == GT_MULHI || tree->OperGet() == GT_MUL_LONG);
+#else
+ assert(tree->OperGet() == GT_MUL || tree->OperGet() == GT_MULHI);
+#endif
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+
+ info->srcCount = 2;
+ info->dstCount = 1;
+
+ GenTreePtr op1 = tree->gtOp.gtOp1;
+ GenTreePtr op2 = tree->gtOp.gtOp2;
+
+ // Case of float/double mul.
+ if (varTypeIsFloating(tree->TypeGet()))
+ {
+ assert(tree->OperGet() == GT_MUL);
+
+ if (op2->isMemoryOp() || op2->IsCnsNonZeroFltOrDbl())
+ {
+ MakeSrcContained(tree, op2);
+ }
+ else if (op1->IsCnsNonZeroFltOrDbl() || (op1->isMemoryOp() && IsSafeToContainMem(tree, op1)))
+ {
+ // Since GT_MUL is commutative, we will try to re-order operands if it is safe to
+ // generate more efficient code sequence for the case of GT_MUL(op1=memOp, op2=non-memOp)
+ MakeSrcContained(tree, op1);
+ }
+ else
+ {
+ // If there are no containable operands, we can make an operand reg optional.
+ SetRegOptionalForBinOp(tree);
+ }
+ return;
+ }
+
+ bool isUnsignedMultiply = ((tree->gtFlags & GTF_UNSIGNED) != 0);
+ bool requiresOverflowCheck = tree->gtOverflowEx();
+ bool useLeaEncoding = false;
+ GenTreePtr memOp = nullptr;
+
+ bool hasImpliedFirstOperand = false;
+ GenTreeIntConCommon* imm = nullptr;
+ GenTreePtr other = nullptr;
+
+ // There are three forms of x86 multiply:
+ // one-op form: RDX:RAX = RAX * r/m
+ // two-op form: reg *= r/m
+ // three-op form: reg = r/m * imm
+
+ // This special widening 32x32->64 MUL is not used on x64
+ CLANG_FORMAT_COMMENT_ANCHOR;
+#if defined(_TARGET_X86_)
+ if (tree->OperGet() != GT_MUL_LONG)
+#endif
+ {
+ assert((tree->gtFlags & GTF_MUL_64RSLT) == 0);
+ }
+
+ // Multiply should never be using small types
+ assert(!varTypeIsSmall(tree->TypeGet()));
+
+ // We do use the widening multiply to implement
+ // the overflow checking for unsigned multiply
+ //
+ if (isUnsignedMultiply && requiresOverflowCheck)
+ {
+ // The only encoding provided is RDX:RAX = RAX * rm
+ //
+ // Here we set RAX as the only destination candidate
+ // In LSRA we set the kill set for this operation to RBM_RAX|RBM_RDX
+ //
+ info->setDstCandidates(m_lsra, RBM_RAX);
+ hasImpliedFirstOperand = true;
+ }
+ else if (tree->OperGet() == GT_MULHI)
+ {
+ // Have to use the encoding:RDX:RAX = RAX * rm. Since we only care about the
+ // upper 32 bits of the result set the destination candidate to REG_RDX.
+ info->setDstCandidates(m_lsra, RBM_RDX);
+ hasImpliedFirstOperand = true;
+ }
+#if defined(_TARGET_X86_)
+ else if (tree->OperGet() == GT_MUL_LONG)
+ {
+ // have to use the encoding:RDX:RAX = RAX * rm
+ info->setDstCandidates(m_lsra, RBM_RAX);
+ hasImpliedFirstOperand = true;
+ }
+#endif
+ else if (IsContainableImmed(tree, op2) || IsContainableImmed(tree, op1))
+ {
+ if (IsContainableImmed(tree, op2))
+ {
+ imm = op2->AsIntConCommon();
+ other = op1;
+ }
+ else
+ {
+ imm = op1->AsIntConCommon();
+ other = op2;
+ }
+
+ // CQ: We want to rewrite this into a LEA
+ ssize_t immVal = imm->AsIntConCommon()->IconValue();
+ if (!requiresOverflowCheck && (immVal == 3 || immVal == 5 || immVal == 9))
+ {
+ useLeaEncoding = true;
+ }
+
+ MakeSrcContained(tree, imm); // The imm is always contained
+ if (other->isMemoryOp())
+ {
+ memOp = other; // memOp may be contained below
+ }
+ }
+
+ // We allow one operand to be a contained memory operand.
+ // The memory op type must match with the 'tree' type.
+ // This is because during codegen we use 'tree' type to derive EmitTypeSize.
+ // E.g op1 type = byte, op2 type = byte but GT_MUL tree type is int.
+ //
+ if (memOp == nullptr && op2->isMemoryOp())
+ {
+ memOp = op2;
+ }
+
+ // To generate an LEA we need to force memOp into a register
+ // so don't allow memOp to be 'contained'
+ //
+ if (!useLeaEncoding)
+ {
+ if ((memOp != nullptr) && (memOp->TypeGet() == tree->TypeGet()) && IsSafeToContainMem(tree, memOp))
+ {
+ MakeSrcContained(tree, memOp);
+ }
+ else if (imm != nullptr)
+ {
+ // Has a contained immediate operand.
+ // Only 'other' operand can be marked as reg optional.
+ assert(other != nullptr);
+ SetRegOptional(other);
+ }
+ else if (hasImpliedFirstOperand)
+ {
+ // Only op2 can be marke as reg optional.
+ SetRegOptional(op2);
+ }
+ else
+ {
+ // If there are no containable operands, we can make either of op1 or op2
+ // as reg optional.
+ SetRegOptionalForBinOp(tree);
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+// SetContainsAVXFlags: Set ContainsAVX flag when it is floating type, set
+// Contains256bitAVX flag when SIMD vector size is 32 bytes
+//
+// Arguments:
+// isFloatingPointType - true if it is floating point type
+// sizeOfSIMDVector - SIMD Vector size
+//
+void Lowering::SetContainsAVXFlags(bool isFloatingPointType /* = true */, unsigned sizeOfSIMDVector /* = 0*/)
+{
+#ifdef FEATURE_AVX_SUPPORT
+ if (isFloatingPointType)
+ {
+ if (comp->getFloatingPointInstructionSet() == InstructionSet_AVX)
+ {
+ comp->getEmitter()->SetContainsAVX(true);
+ }
+ if (sizeOfSIMDVector == 32 && comp->getSIMDInstructionSet() == InstructionSet_AVX)
+ {
+ comp->getEmitter()->SetContains256bitAVX(true);
+ }
+ }
+#endif
+}
+
+#ifdef _TARGET_X86_
+//------------------------------------------------------------------------
+// ExcludeNonByteableRegisters: Determines if we need to exclude non-byteable registers for
+// various reasons
+//
+// Arguments:
+// tree - The node of interest
+//
+// Return Value:
+// If we need to exclude non-byteable registers
+//
+bool Lowering::ExcludeNonByteableRegisters(GenTree* tree)
+{
+ // Example1: GT_STOREIND(byte, addr, op2) - storeind of byte sized value from op2 into mem 'addr'
+ // Storeind itself will not produce any value and hence dstCount=0. But op2 could be TYP_INT
+ // value. In this case we need to exclude esi/edi from the src candidates of op2.
+ if (varTypeIsByte(tree))
+ {
+ return true;
+ }
+ // Example2: GT_CAST(int <- bool <- int) - here type of GT_CAST node is int and castToType is bool.
+ else if ((tree->OperGet() == GT_CAST) && varTypeIsByte(tree->CastToType()))
+ {
+ return true;
+ }
+ else if (tree->OperIsCompare())
+ {
+ GenTree* op1 = tree->gtGetOp1();
+ GenTree* op2 = tree->gtGetOp2();
+
+ // Example3: GT_EQ(int, op1 of type ubyte, op2 of type ubyte) - in this case codegen uses
+ // ubyte as the result of comparison and if the result needs to be materialized into a reg
+ // simply zero extend it to TYP_INT size. Here is an example of generated code:
+ // cmp dl, byte ptr[addr mode]
+ // movzx edx, dl
+ if (varTypeIsByte(op1) && varTypeIsByte(op2))
+ {
+ return true;
+ }
+ // Example4: GT_EQ(int, op1 of type ubyte, op2 is GT_CNS_INT) - in this case codegen uses
+ // ubyte as the result of the comparison and if the result needs to be materialized into a reg
+ // simply zero extend it to TYP_INT size.
+ else if (varTypeIsByte(op1) && op2->IsCnsIntOrI())
+ {
+ return true;
+ }
+ // Example4: GT_EQ(int, op1 is GT_CNS_INT, op2 of type ubyte) - in this case codegen uses
+ // ubyte as the result of the comparison and if the result needs to be materialized into a reg
+ // simply zero extend it to TYP_INT size.
+ else if (op1->IsCnsIntOrI() && varTypeIsByte(op2))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+#ifdef FEATURE_SIMD
+ else if (tree->OperGet() == GT_SIMD)
+ {
+ GenTreeSIMD* simdNode = tree->AsSIMD();
+ switch (simdNode->gtSIMDIntrinsicID)
+ {
+ case SIMDIntrinsicOpEquality:
+ case SIMDIntrinsicOpInEquality:
+ // We manifest it into a byte register, so the target must be byteable.
+ return true;
+
+ case SIMDIntrinsicGetItem:
+ {
+ // This logic is duplicated from genSIMDIntrinsicGetItem().
+ // When we generate code for a SIMDIntrinsicGetItem, under certain circumstances we need to
+ // generate a movzx/movsx. On x86, these require byteable registers. So figure out which
+ // cases will require this, so the non-byteable registers can be excluded.
+
+ GenTree* op1 = simdNode->gtGetOp1();
+ GenTree* op2 = simdNode->gtGetOp2();
+ var_types baseType = simdNode->gtSIMDBaseType;
+ if (!op1->isMemoryOp() && op2->IsCnsIntOrI() && varTypeIsSmallInt(baseType))
+ {
+ bool ZeroOrSignExtnReqd = true;
+ unsigned baseSize = genTypeSize(baseType);
+ if (baseSize == 1)
+ {
+ if ((op2->gtIntCon.gtIconVal % 2) == 1)
+ {
+ ZeroOrSignExtnReqd = (baseType == TYP_BYTE);
+ }
+ }
+ else
+ {
+ assert(baseSize == 2);
+ ZeroOrSignExtnReqd = (baseType == TYP_SHORT);
+ }
+ return ZeroOrSignExtnReqd;
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+ return false;
+ }
+#endif // FEATURE_SIMD
+ else
+ {
+ return false;
+ }
+}
+#endif // _TARGET_X86_
+
+#endif // _TARGET_XARCH_
+
+#endif // !LEGACY_BACKEND
diff --git a/src/jit/morph.cpp b/src/jit/morph.cpp
index 678bb34c54..dabca57710 100644
--- a/src/jit/morph.cpp
+++ b/src/jit/morph.cpp
@@ -855,9 +855,12 @@ fgArgInfo::fgArgInfo(Compiler* comp, GenTreePtr call, unsigned numArgs)
compiler = comp;
callTree = call;
assert(call->IsCall());
- argCount = 0; // filled in arg count, starts at zero
- nextSlotNum = INIT_ARG_STACK_SLOT;
- stkLevel = 0;
+ argCount = 0; // filled in arg count, starts at zero
+ nextSlotNum = INIT_ARG_STACK_SLOT;
+ stkLevel = 0;
+#if defined(UNIX_X86_ABI)
+ padStkAlign = 0;
+#endif
argTableSize = numArgs; // the allocated table size
hasRegArgs = false;
@@ -897,9 +900,12 @@ fgArgInfo::fgArgInfo(GenTreePtr newCall, GenTreePtr oldCall)
;
callTree = newCall;
assert(newCall->IsCall());
- argCount = 0; // filled in arg count, starts at zero
- nextSlotNum = INIT_ARG_STACK_SLOT;
- stkLevel = oldArgInfo->stkLevel;
+ argCount = 0; // filled in arg count, starts at zero
+ nextSlotNum = INIT_ARG_STACK_SLOT;
+ stkLevel = oldArgInfo->stkLevel;
+#if defined(UNIX_X86_ABI)
+ padStkAlign = oldArgInfo->padStkAlign;
+#endif
argTableSize = oldArgInfo->argTableSize;
argsComplete = false;
argTable = nullptr;
@@ -1079,16 +1085,19 @@ fgArgTabEntryPtr fgArgInfo::AddRegArg(
{
fgArgTabEntryPtr curArgTabEntry = new (compiler, CMK_fgArgInfo) fgArgTabEntry;
- curArgTabEntry->argNum = argNum;
- curArgTabEntry->node = node;
- curArgTabEntry->parent = parent;
- curArgTabEntry->regNum = regNum;
- curArgTabEntry->slotNum = 0;
- curArgTabEntry->numRegs = numRegs;
- curArgTabEntry->numSlots = 0;
- curArgTabEntry->alignment = alignment;
- curArgTabEntry->lateArgInx = (unsigned)-1;
- curArgTabEntry->tmpNum = (unsigned)-1;
+ curArgTabEntry->argNum = argNum;
+ curArgTabEntry->node = node;
+ curArgTabEntry->parent = parent;
+ curArgTabEntry->regNum = regNum;
+ curArgTabEntry->slotNum = 0;
+ curArgTabEntry->numRegs = numRegs;
+ curArgTabEntry->numSlots = 0;
+ curArgTabEntry->alignment = alignment;
+ curArgTabEntry->lateArgInx = (unsigned)-1;
+ curArgTabEntry->tmpNum = (unsigned)-1;
+#if defined(UNIX_X86_ABI)
+ curArgTabEntry->padStkAlign = 0;
+#endif
curArgTabEntry->isSplit = false;
curArgTabEntry->isTmp = false;
curArgTabEntry->needTmp = false;
@@ -1154,16 +1163,19 @@ fgArgTabEntryPtr fgArgInfo::AddStkArg(unsigned argNum,
curArgTabEntry->isStruct = isStruct; // is this a struct arg
#endif // defined(FEATURE_UNIX_AMD64_STRUCT_PASSING)
- curArgTabEntry->argNum = argNum;
- curArgTabEntry->node = node;
- curArgTabEntry->parent = parent;
- curArgTabEntry->regNum = REG_STK;
- curArgTabEntry->slotNum = nextSlotNum;
- curArgTabEntry->numRegs = 0;
- curArgTabEntry->numSlots = numSlots;
- curArgTabEntry->alignment = alignment;
- curArgTabEntry->lateArgInx = (unsigned)-1;
- curArgTabEntry->tmpNum = (unsigned)-1;
+ curArgTabEntry->argNum = argNum;
+ curArgTabEntry->node = node;
+ curArgTabEntry->parent = parent;
+ curArgTabEntry->regNum = REG_STK;
+ curArgTabEntry->slotNum = nextSlotNum;
+ curArgTabEntry->numRegs = 0;
+ curArgTabEntry->numSlots = numSlots;
+ curArgTabEntry->alignment = alignment;
+ curArgTabEntry->lateArgInx = (unsigned)-1;
+ curArgTabEntry->tmpNum = (unsigned)-1;
+#if defined(UNIX_X86_ABI)
+ curArgTabEntry->padStkAlign = 0;
+#endif
curArgTabEntry->isSplit = false;
curArgTabEntry->isTmp = false;
curArgTabEntry->needTmp = false;
@@ -1689,6 +1701,52 @@ void fgArgInfo::ArgsComplete()
argsComplete = true;
}
+#if defined(UNIX_X86_ABI)
+// Get the stack alignment value for a Call holding this object
+//
+// NOTE: This function will calculate number of padding slots, to align the
+// stack before pushing arguments to the stack. Padding value is stored in
+// the first argument in fgArgTabEntry structure padStkAlign member so that
+// code (sub esp, n) can be emitted before generating argument push in
+// fgArgTabEntry node. As of result stack will be aligned right before
+// making a "Call". After the Call, stack is re-adjusted to the value it
+// was with fgArgInfo->padStkAlign value as we cann't use the one in fgArgTabEntry.
+//
+void fgArgInfo::ArgsAlignPadding()
+{
+ // To get the padding amount, sum up all the slots and get the remainder for padding
+ unsigned curInx;
+ unsigned numSlots = 0;
+ fgArgTabEntryPtr firstArgTabEntry = nullptr;
+
+ for (curInx = 0; curInx < argCount; curInx++)
+ {
+ fgArgTabEntryPtr curArgTabEntry = argTable[curInx];
+ if (curArgTabEntry->numSlots > 0)
+ {
+ // The argument may be REG_STK or constant or register that goes to stack
+ assert(nextSlotNum >= curArgTabEntry->slotNum);
+
+ numSlots += curArgTabEntry->numSlots;
+ if (firstArgTabEntry == nullptr)
+ {
+ // First argument will be used to hold the padding amount
+ firstArgTabEntry = curArgTabEntry;
+ }
+ }
+ }
+
+ if (firstArgTabEntry != nullptr)
+ {
+ const int numSlotsAligned = STACK_ALIGN / TARGET_POINTER_SIZE;
+ // Set stack align pad for the first argument
+ firstArgTabEntry->padStkAlign = AlignmentPad(numSlots, numSlotsAligned);
+ // Set also for fgArgInfo that will be used to reset stack pointer after the Call
+ this->padStkAlign = firstArgTabEntry->padStkAlign;
+ }
+}
+#endif // UNIX_X86_ABI
+
void fgArgInfo::SortArgs()
{
assert(argsComplete == true);
@@ -2431,6 +2489,22 @@ void fgArgInfo::EvalArgsToTemps()
#endif
}
+// Get the late arg for arg at position argIndex.
+// argIndex - 0-based position to get late arg for.
+// Caller must ensure this position has a late arg.
+GenTreePtr fgArgInfo::GetLateArg(unsigned argIndex)
+{
+ for (unsigned j = 0; j < this->ArgCount(); j++)
+ {
+ if (this->ArgTable()[j]->argNum == argIndex)
+ {
+ return this->ArgTable()[j]->node;
+ }
+ }
+ // Caller must ensure late arg exists.
+ unreached();
+}
+
void fgArgInfo::RecordStkLevel(unsigned stkLvl)
{
assert(!IsUninitialized(stkLvl));
@@ -4211,6 +4285,11 @@ GenTreeCall* Compiler::fgMorphArgs(GenTreeCall* callNode)
if (!reMorphing)
{
call->fgArgInfo->ArgsComplete();
+
+#if defined(UNIX_X86_ABI)
+ call->fgArgInfo->ArgsAlignPadding();
+#endif // UNIX_X86_ABI
+
#ifdef LEGACY_BACKEND
call->gtCallRegUsedMask = genIntAllRegArgMask(intArgRegNum);
#if defined(_TARGET_ARM_)
@@ -5629,8 +5708,13 @@ GenTreePtr Compiler::fgMorphArrayIndex(GenTreePtr tree)
// to ensure that the same values are used in the bounds check and the actual
// dereference.
// Also we allocate the temporary when the arrRef is sufficiently complex/expensive.
+ // Note that if 'arrRef' is a GT_FIELD, it has not yet been morphed so its true
+ // complexity is not exposed. (Without that condition there are cases of local struct
+ // fields that were previously, needlessly, marked as GTF_GLOB_REF, and when that was
+ // fixed, there were some regressions that were mostly ameliorated by adding this condition.)
//
- if ((arrRef->gtFlags & (GTF_ASG | GTF_CALL | GTF_GLOB_REF)) || gtComplexityExceeds(&arrRef, MAX_ARR_COMPLEXITY))
+ if ((arrRef->gtFlags & (GTF_ASG | GTF_CALL | GTF_GLOB_REF)) ||
+ gtComplexityExceeds(&arrRef, MAX_ARR_COMPLEXITY) || (arrRef->OperGet() == GT_FIELD))
{
unsigned arrRefTmpNum = lvaGrabTemp(true DEBUGARG("arr expr"));
arrRefDefn = gtNewTempAssign(arrRefTmpNum, arrRef);
@@ -5649,7 +5733,8 @@ GenTreePtr Compiler::fgMorphArrayIndex(GenTreePtr tree)
// dereference.
// Also we allocate the temporary when the index is sufficiently complex/expensive.
//
- if ((index->gtFlags & (GTF_ASG | GTF_CALL | GTF_GLOB_REF)) || gtComplexityExceeds(&index, MAX_ARR_COMPLEXITY))
+ if ((index->gtFlags & (GTF_ASG | GTF_CALL | GTF_GLOB_REF)) || gtComplexityExceeds(&index, MAX_ARR_COMPLEXITY) ||
+ (arrRef->OperGet() == GT_FIELD))
{
unsigned indexTmpNum = lvaGrabTemp(true DEBUGARG("arr expr"));
indexDefn = gtNewTempAssign(indexTmpNum, index);
@@ -5683,7 +5768,7 @@ GenTreePtr Compiler::fgMorphArrayIndex(GenTreePtr tree)
}
GenTreeBoundsChk* arrBndsChk = new (this, GT_ARR_BOUNDS_CHECK)
- GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, arrLen, index, SCK_RNGCHK_FAIL);
+ GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, index, arrLen, SCK_RNGCHK_FAIL);
bndsChk = arrBndsChk;
@@ -6051,14 +6136,15 @@ GenTreePtr Compiler::fgMorphField(GenTreePtr tree, MorphAddrContext* mac)
{
assert(tree->gtOper == GT_FIELD);
- noway_assert(tree->gtFlags & GTF_GLOB_REF);
-
CORINFO_FIELD_HANDLE symHnd = tree->gtField.gtFldHnd;
unsigned fldOffset = tree->gtField.gtFldOffset;
GenTreePtr objRef = tree->gtField.gtFldObj;
bool fieldMayOverlap = false;
bool objIsLocal = false;
+ noway_assert(((objRef != nullptr) && (objRef->IsLocalAddrExpr() != nullptr)) ||
+ ((tree->gtFlags & GTF_GLOB_REF) != 0));
+
if (tree->gtField.gtFldMayOverlap)
{
fieldMayOverlap = true;
@@ -6067,8 +6153,8 @@ GenTreePtr Compiler::fgMorphField(GenTreePtr tree, MorphAddrContext* mac)
}
#ifdef FEATURE_SIMD
- // if this field belongs to simd struct, tranlate it to simd instrinsic.
- if (mac == nullptr || mac->m_kind != MACK_Addr)
+ // if this field belongs to simd struct, translate it to simd instrinsic.
+ if (mac == nullptr)
{
GenTreePtr newTree = fgMorphFieldToSIMDIntrinsicGet(tree);
if (newTree != tree)
@@ -6077,13 +6163,6 @@ GenTreePtr Compiler::fgMorphField(GenTreePtr tree, MorphAddrContext* mac)
return newTree;
}
}
- else if (objRef != nullptr && objRef->OperGet() == GT_ADDR && objRef->OperIsSIMD())
- {
- // We have a field of an SIMD intrinsic in an address-taken context.
- // We need to copy the SIMD result to a temp, and take the field of that.
- GenTree* copy = fgCopySIMDNode(objRef->gtOp.gtOp1->AsSIMD());
- objRef->gtOp.gtOp1 = copy;
- }
#endif
/* Is this an instance data member? */
@@ -6468,6 +6547,11 @@ GenTreePtr Compiler::fgMorphField(GenTreePtr tree, MorphAddrContext* mac)
addr->gtIntCon.gtFieldSeq = fieldSeq;
tree->SetOper(GT_IND);
+ // The GTF_FLD_NULLCHECK is the same bit as GTF_IND_ARR_LEN.
+ // We must clear it when we transform the node.
+ // TODO-Cleanup: It appears that the GTF_FLD_NULLCHECK flag is never checked, and note
+ // that the logic above does its own checking to determine whether a nullcheck is needed.
+ tree->gtFlags &= ~GTF_IND_ARR_LEN;
tree->gtOp.gtOp1 = addr;
return fgMorphSmpOp(tree);
@@ -6507,6 +6591,11 @@ GenTreePtr Compiler::fgMorphField(GenTreePtr tree, MorphAddrContext* mac)
}
}
noway_assert(tree->gtOper == GT_IND);
+ // The GTF_FLD_NULLCHECK is the same bit as GTF_IND_ARR_LEN.
+ // We must clear it when we transform the node.
+ // TODO-Cleanup: It appears that the GTF_FLD_NULLCHECK flag is never checked, and note
+ // that the logic above does its own checking to determine whether a nullcheck is needed.
+ tree->gtFlags &= ~GTF_IND_ARR_LEN;
GenTreePtr res = fgMorphSmpOp(tree);
@@ -8467,7 +8556,7 @@ GenTreePtr Compiler::fgMorphOneAsgBlockOp(GenTreePtr tree)
// The SIMD type in question could be Vector2f which is 8-bytes in size.
// The below check is to make sure that we don't turn that copyblk
// into a assignment, since rationalizer logic will transform the
- // copyblk apropriately. Otherwise, the transormation made in this
+ // copyblk appropriately. Otherwise, the transformation made in this
// routine will prevent rationalizer logic and we might end up with
// GT_ADDR(GT_SIMD) node post rationalization, leading to a noway assert
// in codegen.
@@ -8495,6 +8584,12 @@ GenTreePtr Compiler::fgMorphOneAsgBlockOp(GenTreePtr tree)
}
else
{
+ // Is this an enregisterable struct that is already a simple assignment?
+ // This can happen if we are re-morphing.
+ if ((dest->OperGet() == GT_IND) && (dest->TypeGet() != TYP_STRUCT) && isCopyBlock)
+ {
+ return tree;
+ }
noway_assert(dest->OperIsLocal());
lclVarTree = dest;
destVarNum = lclVarTree->AsLclVarCommon()->gtLclNum;
@@ -9185,7 +9280,7 @@ GenTree* Compiler::fgMorphBlkNode(GenTreePtr tree, bool isDest)
// Therefore, we insert a GT_ADDR just above the node, and wrap it in an obj or ind.
// TODO-1stClassStructs: Consider whether this can be improved.
// Also consider whether some of this can be included in gtNewBlockVal (though note
- // that doing so may cause us to query the type system before we otherwise would.
+ // that doing so may cause us to query the type system before we otherwise would).
GenTree* lastComma = nullptr;
for (GenTree* next = tree; next != nullptr && next->gtOper == GT_COMMA; next = next->gtGetOp2())
{
@@ -10223,31 +10318,46 @@ _Done:
// FP architectures
GenTree* Compiler::fgMorphForRegisterFP(GenTree* tree)
{
- GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
-
- if (tree->OperIsArithmetic() && varTypeIsFloating(tree))
+ if (tree->OperIsArithmetic())
{
- if (op1->TypeGet() != tree->TypeGet())
- {
- tree->gtOp.gtOp1 = gtNewCastNode(tree->TypeGet(), tree->gtOp.gtOp1, tree->TypeGet());
- }
- if (op2->TypeGet() != tree->TypeGet())
+ if (varTypeIsFloating(tree))
{
- tree->gtOp.gtOp2 = gtNewCastNode(tree->TypeGet(), tree->gtOp.gtOp2, tree->TypeGet());
+ GenTreePtr op1 = tree->gtOp.gtOp1;
+ GenTreePtr op2 = tree->gtGetOp2();
+
+ if (op1->TypeGet() != tree->TypeGet())
+ {
+ tree->gtOp.gtOp1 = gtNewCastNode(tree->TypeGet(), op1, tree->TypeGet());
+ }
+ if (op2->TypeGet() != tree->TypeGet())
+ {
+ tree->gtOp.gtOp2 = gtNewCastNode(tree->TypeGet(), op2, tree->TypeGet());
+ }
}
}
- else if (tree->OperIsCompare() && varTypeIsFloating(op1) && op1->TypeGet() != op2->TypeGet())
+ else if (tree->OperIsCompare())
{
- // both had better be floating, just one bigger than other
- assert(varTypeIsFloating(op2));
- if (op1->TypeGet() == TYP_FLOAT)
- {
- tree->gtOp.gtOp1 = gtNewCastNode(TYP_DOUBLE, tree->gtOp.gtOp1, TYP_DOUBLE);
- }
- else if (op2->TypeGet() == TYP_FLOAT)
+ GenTreePtr op1 = tree->gtOp.gtOp1;
+
+ if (varTypeIsFloating(op1))
{
- tree->gtOp.gtOp2 = gtNewCastNode(TYP_DOUBLE, tree->gtOp.gtOp2, TYP_DOUBLE);
+ GenTreePtr op2 = tree->gtGetOp2();
+ assert(varTypeIsFloating(op2));
+
+ if (op1->TypeGet() != op2->TypeGet())
+ {
+ // both had better be floating, just one bigger than other
+ if (op1->TypeGet() == TYP_FLOAT)
+ {
+ assert(op2->TypeGet() == TYP_DOUBLE);
+ tree->gtOp.gtOp1 = gtNewCastNode(TYP_DOUBLE, op1, TYP_DOUBLE);
+ }
+ else if (op2->TypeGet() == TYP_FLOAT)
+ {
+ assert(op1->TypeGet() == TYP_DOUBLE);
+ tree->gtOp.gtOp2 = gtNewCastNode(TYP_DOUBLE, op2, TYP_DOUBLE);
+ }
+ }
}
}
@@ -10323,50 +10433,6 @@ GenTree* Compiler::fgMorphRecognizeBoxNullable(GenTree* compare)
#ifdef FEATURE_SIMD
-//--------------------------------------------------------------------------------------
-// fgCopySIMDNode: make a copy of a SIMD intrinsic node, e.g. so that a field can be accessed.
-//
-// Arguments:
-// simdNode - The GenTreeSIMD node to be copied
-//
-// Return Value:
-// A comma node where op1 is the assignment of the simd node to a temp, and op2 is the temp lclVar.
-//
-GenTree* Compiler::fgCopySIMDNode(GenTreeSIMD* simdNode)
-{
- // Copy the result of the SIMD intrinsic into a temp.
- unsigned lclNum = lvaGrabTemp(true DEBUGARG("Copy of SIMD intrinsic with field access"));
-
- CORINFO_CLASS_HANDLE simdHandle = NO_CLASS_HANDLE;
- // We only have fields of the fixed float vectors.
- noway_assert(simdNode->gtSIMDBaseType == TYP_FLOAT);
- switch (simdNode->gtSIMDSize)
- {
- case 8:
- simdHandle = SIMDVector2Handle;
- break;
- case 12:
- simdHandle = SIMDVector3Handle;
- break;
- case 16:
- simdHandle = SIMDVector4Handle;
- break;
- default:
- noway_assert(!"field of unexpected SIMD type");
- break;
- }
- assert(simdHandle != NO_CLASS_HANDLE);
-
- lvaSetStruct(lclNum, simdHandle, false, true);
- lvaTable[lclNum].lvFieldAccessed = true;
-
- GenTree* asg = gtNewTempAssign(lclNum, simdNode);
- GenTree* newLclVarNode = new (this, GT_LCL_VAR) GenTreeLclVar(simdNode->TypeGet(), lclNum, BAD_IL_OFFSET);
-
- GenTree* comma = gtNewOperNode(GT_COMMA, simdNode->TypeGet(), asg, newLclVarNode);
- return comma;
-}
-
//--------------------------------------------------------------------------------------------------------------
// getSIMDStructFromField:
// Checking whether the field belongs to a simd struct or not. If it is, return the GenTreePtr for
@@ -10449,12 +10515,12 @@ GenTreePtr Compiler::getSIMDStructFromField(GenTreePtr tree,
}
/*****************************************************************************
-* If a read operation tries to access simd struct field, then transform the this
-* operation to to the SIMD intrinsic SIMDIntrinsicGetItem, and return the new tree.
+* If a read operation tries to access simd struct field, then transform the
+* operation to the SIMD intrinsic SIMDIntrinsicGetItem, and return the new tree.
* Otherwise, return the old tree.
* Argument:
* tree - GenTreePtr. If this pointer points to simd struct which is used for simd
-* intrinsic. We will morph it as simd intrinsic SIMDIntrinsicGetItem.
+* intrinsic, we will morph it as simd intrinsic SIMDIntrinsicGetItem.
* Return:
* A GenTreePtr which points to the new tree. If the tree is not for simd intrinsic,
* return nullptr.
@@ -10468,7 +10534,6 @@ GenTreePtr Compiler::fgMorphFieldToSIMDIntrinsicGet(GenTreePtr tree)
GenTreePtr simdStructNode = getSIMDStructFromField(tree, &baseType, &index, &simdSize);
if (simdStructNode != nullptr)
{
-
assert(simdSize >= ((index + 1) * genTypeSize(baseType)));
GenTree* op2 = gtNewIconNode(index);
tree = gtNewSIMDNode(baseType, simdStructNode, op2, SIMDIntrinsicGetItem, baseType, simdSize);
@@ -10481,11 +10546,11 @@ GenTreePtr Compiler::fgMorphFieldToSIMDIntrinsicGet(GenTreePtr tree)
/*****************************************************************************
* Transform an assignment of a SIMD struct field to SIMD intrinsic
-* SIMDIntrinsicGetItem, and return a new tree. If If it is not such an assignment,
+* SIMDIntrinsicSet*, and return a new tree. If it is not such an assignment,
* then return the old tree.
* Argument:
* tree - GenTreePtr. If this pointer points to simd struct which is used for simd
-* intrinsic. We will morph it as simd intrinsic set.
+* intrinsic, we will morph it as simd intrinsic set.
* Return:
* A GenTreePtr which points to the new tree. If the tree is not for simd intrinsic,
* return nullptr.
@@ -10538,7 +10603,8 @@ GenTreePtr Compiler::fgMorphFieldAssignToSIMDIntrinsicSet(GenTreePtr tree)
return tree;
}
-#endif
+#endif // FEATURE_SIMD
+
/*****************************************************************************
*
* Transform the given GTK_SMPOP tree for code generation.
@@ -10584,7 +10650,7 @@ GenTreePtr Compiler::fgMorphSmpOp(GenTreePtr tree, MorphAddrContext* mac)
genTreeOps oper = tree->OperGet();
var_types typ = tree->TypeGet();
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
/*-------------------------------------------------------------------------
* First do any PRE-ORDER processing
@@ -10998,6 +11064,9 @@ GenTreePtr Compiler::fgMorphSmpOp(GenTreePtr tree, MorphAddrContext* mac)
//
// a % b = a - (a / b) * b;
//
+ // NOTE: we should never need to perform this transformation when remorphing, since global morphing
+ // should already have done so and we do not introduce new modulus nodes in later phases.
+ assert(!optValnumCSE_phase);
tree = fgMorphModToSubMulDiv(tree->AsOp());
op1 = tree->gtOp.gtOp1;
op2 = tree->gtOp.gtOp2;
@@ -11010,7 +11079,7 @@ GenTreePtr Compiler::fgMorphSmpOp(GenTreePtr tree, MorphAddrContext* mac)
// the redundant division. If there's no redundant division then
// nothing is lost, lowering would have done this transform anyway.
- if ((tree->OperGet() == GT_MOD) && op2->IsIntegralConst())
+ if (!optValnumCSE_phase && ((tree->OperGet() == GT_MOD) && op2->IsIntegralConst()))
{
ssize_t divisorValue = op2->AsIntCon()->IconValue();
size_t absDivisorValue = (divisorValue == SSIZE_T_MIN) ? static_cast<size_t>(divisorValue)
@@ -11206,7 +11275,7 @@ GenTreePtr Compiler::fgMorphSmpOp(GenTreePtr tree, MorphAddrContext* mac)
}
fgMorphRecognizeBoxNullable(tree);
op1 = tree->gtOp.gtOp1;
- op2 = tree->gtGetOp2();
+ op2 = tree->gtGetOp2IfPresent();
break;
@@ -11297,12 +11366,6 @@ GenTreePtr Compiler::fgMorphSmpOp(GenTreePtr tree, MorphAddrContext* mac)
// comma list. The left arg (op1) gets a fresh context.
subMac1 = nullptr;
break;
- case GT_ASG:
- if (tree->OperIsBlkOp())
- {
- subMac1 = &subIndMac1;
- }
- break;
case GT_OBJ:
case GT_BLK:
case GT_DYN_BLK:
@@ -11440,12 +11503,6 @@ GenTreePtr Compiler::fgMorphSmpOp(GenTreePtr tree, MorphAddrContext* mac)
}
}
break;
- case GT_ASG:
- if (tree->OperIsBlkOp())
- {
- mac = &subIndMac2;
- }
- break;
default:
break;
}
@@ -11611,7 +11668,7 @@ GenTreePtr Compiler::fgMorphSmpOp(GenTreePtr tree, MorphAddrContext* mac)
/* gtFoldExpr could have changed op1 and op2 */
op1 = tree->gtOp.gtOp1;
- op2 = tree->gtGetOp2();
+ op2 = tree->gtGetOp2IfPresent();
// Do we have an integer compare operation?
//
@@ -13508,12 +13565,10 @@ GenTree* Compiler::fgMorphSmpOpOptional(GenTreeOp* tree)
/* and also "a = x <op> a" into "a <op>= x" for communative ops */
CLANG_FORMAT_COMMENT_ANCHOR;
-#if !LONG_ASG_OPS
if (typ == TYP_LONG)
{
break;
}
-#endif
if (varTypeIsStruct(typ) && !tree->IsPhiDefn())
{
@@ -13669,25 +13724,9 @@ GenTree* Compiler::fgMorphSmpOpOptional(GenTreeOp* tree)
case GT_LSH:
case GT_RSH:
case GT_RSZ:
-
-#if LONG_ASG_OPS
-
- if (typ == TYP_LONG)
- break;
-#endif
-
case GT_OR:
case GT_XOR:
case GT_AND:
-
-#if LONG_ASG_OPS
-
- /* TODO: allow non-const long assignment operators */
-
- if (typ == TYP_LONG && op2->gtOp.gtOp2->gtOper != GT_CNS_LNG)
- break;
-#endif
-
ASG_OP:
{
bool bReverse = false;
@@ -14048,11 +14087,21 @@ GenTree* Compiler::fgMorphModToSubMulDiv(GenTreeOp* tree)
{
numerator = fgMakeMultiUse(&tree->gtOp1);
}
+ else if (lvaLocalVarRefCounted && numerator->OperIsLocal())
+ {
+ // Morphing introduces new lclVar references. Increase ref counts
+ lvaIncRefCnts(numerator);
+ }
if (!denominator->OperIsLeaf())
{
denominator = fgMakeMultiUse(&tree->gtOp2);
}
+ else if (lvaLocalVarRefCounted && denominator->OperIsLocal())
+ {
+ // Morphing introduces new lclVar references. Increase ref counts
+ lvaIncRefCnts(denominator);
+ }
// The numerator and denominator may have been assigned to temps, in which case
// their defining assignments are in the current tree. Therefore, we need to
@@ -14335,7 +14384,7 @@ GenTreePtr Compiler::fgMorphToEmulatedFP(GenTreePtr tree)
genTreeOps oper = tree->OperGet();
var_types typ = tree->TypeGet();
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
/*
We have to use helper calls for all FP operations:
@@ -14683,8 +14732,8 @@ GenTreePtr Compiler::fgMorphTree(GenTreePtr tree, MorphAddrContext* mac)
fgSetRngChkTarget(tree);
GenTreeBoundsChk* bndsChk = tree->AsBoundsChk();
- bndsChk->gtArrLen = fgMorphTree(bndsChk->gtArrLen);
bndsChk->gtIndex = fgMorphTree(bndsChk->gtIndex);
+ bndsChk->gtArrLen = fgMorphTree(bndsChk->gtArrLen);
// If the index is a comma(throw, x), just return that.
if (!optValnumCSE_phase && fgIsCommaThrow(bndsChk->gtIndex))
{
@@ -14692,8 +14741,8 @@ GenTreePtr Compiler::fgMorphTree(GenTreePtr tree, MorphAddrContext* mac)
}
// Propagate effects flags upwards
- bndsChk->gtFlags |= (bndsChk->gtArrLen->gtFlags & GTF_ALL_EFFECT);
bndsChk->gtFlags |= (bndsChk->gtIndex->gtFlags & GTF_ALL_EFFECT);
+ bndsChk->gtFlags |= (bndsChk->gtArrLen->gtFlags & GTF_ALL_EFFECT);
// Otherwise, we don't change the tree.
}
@@ -15972,7 +16021,6 @@ void Compiler::fgMorphBlocks()
// genReturnLocal
noway_assert(ret->OperGet() == GT_RETURN);
noway_assert(ret->gtGetOp1() != nullptr);
- noway_assert(ret->gtGetOp2() == nullptr);
GenTreePtr tree = gtNewTempAssign(genReturnLocal, ret->gtGetOp1());
@@ -15991,7 +16039,6 @@ void Compiler::fgMorphBlocks()
// Must be a void GT_RETURN with null operand; delete it as this block branches to oneReturn block
noway_assert(ret->TypeGet() == TYP_VOID);
noway_assert(ret->gtGetOp1() == nullptr);
- noway_assert(ret->gtGetOp2() == nullptr);
fgRemoveStmt(block, last);
}
@@ -16897,6 +16944,20 @@ void Compiler::fgMorph()
fgDebugCheckBBlist(false, false);
#endif // DEBUG
+ fgRemoveEmptyTry();
+
+ EndPhase(PHASE_EMPTY_TRY);
+
+ fgRemoveEmptyFinally();
+
+ EndPhase(PHASE_EMPTY_FINALLY);
+
+ fgCloneFinally();
+
+ EndPhase(PHASE_CLONE_FINALLY);
+
+ fgUpdateFinallyTargetFlags();
+
/* For x64 and ARM64 we need to mark irregular parameters early so that they don't get promoted */
fgMarkImplicitByRefArgs();
@@ -17002,6 +17063,14 @@ void Compiler::fgPromoteStructs()
return;
}
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("\nlvaTable before fgPromoteStructs\n");
+ lvaTableDump();
+ }
+#endif // DEBUG
+
// The lvaTable might grow as we grab temps. Make a local copy here.
unsigned startLvaCount = lvaCount;
@@ -17019,17 +17088,13 @@ void Compiler::fgPromoteStructs()
bool promotedVar = false;
LclVarDsc* varDsc = &lvaTable[lclNum];
-#ifdef FEATURE_SIMD
- if (varDsc->lvSIMDType && varDsc->lvUsedInSIMDIntrinsic)
+ if (varDsc->lvIsSIMDType() && varDsc->lvIsUsedInSIMDIntrinsic())
{
// If we have marked this as lvUsedInSIMDIntrinsic, then we do not want to promote
// its fields. Instead, we will attempt to enregister the entire struct.
varDsc->lvRegStruct = true;
}
- else
-#endif // FEATURE_SIMD
- // Don't promote if we have reached the tracking limit.
- if (lvaHaveManyLocals())
+ else if (lvaHaveManyLocals()) // Don't promote if we have reached the tracking limit.
{
// Print the message first time when we detected this condition
if (!tooManyLocals)
@@ -17060,7 +17125,6 @@ void Compiler::fgPromoteStructs()
if (canPromote)
{
-
// We *can* promote; *should* we promote?
// We should only do so if promotion has potential savings. One source of savings
// is if a field of the struct is accessed, since this access will be turned into
@@ -17068,9 +17132,17 @@ void Compiler::fgPromoteStructs()
// field accesses, but only block-level operations on the whole struct, if the struct
// has only one or two fields, then doing those block operations field-wise is probably faster
// than doing a whole-variable block operation (e.g., a hardware "copy loop" on x86).
- // So if no fields are accessed independently, and there are three or more fields,
+ // Struct promotion also provides the following benefits: reduce stack frame size,
+ // reduce the need for zero init of stack frame and fine grained constant/copy prop.
+ // Asm diffs indicate that promoting structs up to 3 fields is a net size win.
+ // So if no fields are accessed independently, and there are four or more fields,
// then do not promote.
- if (structPromotionInfo.fieldCnt > 2 && !varDsc->lvFieldAccessed)
+ //
+ // TODO: Ideally we would want to consider the impact of whether the struct is
+ // passed as a parameter or assigned the return value of a call. Because once promoted,
+ // struct copying is done by field by field assignment instead of a more efficient
+ // rep.stos or xmm reg based copy.
+ if (structPromotionInfo.fieldCnt > 3 && !varDsc->lvFieldAccessed)
{
JITDUMP("Not promoting promotable struct local V%02u: #fields = %d, fieldAccessed = %d.\n", lclNum,
structPromotionInfo.fieldCnt, varDsc->lvFieldAccessed);
@@ -17185,114 +17257,115 @@ void Compiler::fgPromoteStructs()
}
#endif // FEATURE_SIMD
}
+
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf("\nlvaTable after fgPromoteStructs\n");
+ lvaTableDump();
+ }
+#endif // DEBUG
}
Compiler::fgWalkResult Compiler::fgMorphStructField(GenTreePtr tree, fgWalkData* fgWalkPre)
{
noway_assert(tree->OperGet() == GT_FIELD);
- noway_assert(tree->gtFlags & GTF_GLOB_REF);
GenTreePtr objRef = tree->gtField.gtFldObj;
+ GenTreePtr obj = ((objRef != nullptr) && (objRef->gtOper == GT_ADDR)) ? objRef->gtOp.gtOp1 : nullptr;
+ noway_assert((tree->gtFlags & GTF_GLOB_REF) || ((obj != nullptr) && (obj->gtOper == GT_LCL_VAR)));
/* Is this an instance data member? */
- if (objRef)
+ if ((obj != nullptr) && (obj->gtOper == GT_LCL_VAR))
{
- if (objRef->gtOper == GT_ADDR)
- {
- GenTreePtr obj = objRef->gtOp.gtOp1;
+ unsigned lclNum = obj->gtLclVarCommon.gtLclNum;
+ LclVarDsc* varDsc = &lvaTable[lclNum];
- if (obj->gtOper == GT_LCL_VAR)
+ if (varTypeIsStruct(obj))
+ {
+ if (varDsc->lvPromoted)
{
- unsigned lclNum = obj->gtLclVarCommon.gtLclNum;
- LclVarDsc* varDsc = &lvaTable[lclNum];
+ // Promoted struct
+ unsigned fldOffset = tree->gtField.gtFldOffset;
+ unsigned fieldLclIndex = lvaGetFieldLocal(varDsc, fldOffset);
+ noway_assert(fieldLclIndex != BAD_VAR_NUM);
+
+ tree->SetOper(GT_LCL_VAR);
+ tree->gtLclVarCommon.SetLclNum(fieldLclIndex);
+ tree->gtType = lvaTable[fieldLclIndex].TypeGet();
+ tree->gtFlags &= GTF_NODE_MASK;
+ tree->gtFlags &= ~GTF_GLOB_REF;
- if (varTypeIsStruct(obj))
+ GenTreePtr parent = fgWalkPre->parentStack->Index(1);
+ if ((parent->gtOper == GT_ASG) && (parent->gtOp.gtOp1 == tree))
{
- if (varDsc->lvPromoted)
- {
- // Promoted struct
- unsigned fldOffset = tree->gtField.gtFldOffset;
- unsigned fieldLclIndex = lvaGetFieldLocal(varDsc, fldOffset);
- noway_assert(fieldLclIndex != BAD_VAR_NUM);
-
- tree->SetOper(GT_LCL_VAR);
- tree->gtLclVarCommon.SetLclNum(fieldLclIndex);
- tree->gtType = lvaTable[fieldLclIndex].TypeGet();
- tree->gtFlags &= GTF_NODE_MASK;
- tree->gtFlags &= ~GTF_GLOB_REF;
-
- GenTreePtr parent = fgWalkPre->parentStack->Index(1);
- if ((parent->gtOper == GT_ASG) && (parent->gtOp.gtOp1 == tree))
- {
- tree->gtFlags |= GTF_VAR_DEF;
- tree->gtFlags |= GTF_DONT_CSE;
- }
-#ifdef DEBUG
- if (verbose)
- {
- printf("Replacing the field in promoted struct with a local var:\n");
- fgWalkPre->printModified = true;
- }
-#endif // DEBUG
- return WALK_SKIP_SUBTREES;
- }
+ tree->gtFlags |= GTF_VAR_DEF;
+ tree->gtFlags |= GTF_DONT_CSE;
}
- else
+#ifdef DEBUG
+ if (verbose)
{
- // Normed struct
- // A "normed struct" is a struct that the VM tells us is a basic type. This can only happen if
- // the struct contains a single element, and that element is 4 bytes (on x64 it can also be 8
- // bytes). Normally, the type of the local var and the type of GT_FIELD are equivalent. However,
- // there is one extremely rare case where that won't be true. An enum type is a special value type
- // that contains exactly one element of a primitive integer type (that, for CLS programs is named
- // "value__"). The VM tells us that a local var of that enum type is the primitive type of the
- // enum's single field. It turns out that it is legal for IL to access this field using ldflda or
- // ldfld. For example:
- //
- // .class public auto ansi sealed mynamespace.e_t extends [mscorlib]System.Enum
- // {
- // .field public specialname rtspecialname int16 value__
- // .field public static literal valuetype mynamespace.e_t one = int16(0x0000)
- // }
- // .method public hidebysig static void Main() cil managed
- // {
- // .locals init (valuetype mynamespace.e_t V_0)
- // ...
- // ldloca.s V_0
- // ldflda int16 mynamespace.e_t::value__
- // ...
- // }
- //
- // Normally, compilers will not generate the ldflda, since it is superfluous.
- //
- // In the example, the lclVar is short, but the JIT promotes all trees using this local to the
- // "actual type", that is, INT. But the GT_FIELD is still SHORT. So, in the case of a type
- // mismatch like this, don't do this morphing. The local var may end up getting marked as
- // address taken, and the appropriate SHORT load will be done from memory in that case.
+ printf("Replacing the field in promoted struct with a local var:\n");
+ fgWalkPre->printModified = true;
+ }
+#endif // DEBUG
+ return WALK_SKIP_SUBTREES;
+ }
+ }
+ else
+ {
+ // Normed struct
+ // A "normed struct" is a struct that the VM tells us is a basic type. This can only happen if
+ // the struct contains a single element, and that element is 4 bytes (on x64 it can also be 8
+ // bytes). Normally, the type of the local var and the type of GT_FIELD are equivalent. However,
+ // there is one extremely rare case where that won't be true. An enum type is a special value type
+ // that contains exactly one element of a primitive integer type (that, for CLS programs is named
+ // "value__"). The VM tells us that a local var of that enum type is the primitive type of the
+ // enum's single field. It turns out that it is legal for IL to access this field using ldflda or
+ // ldfld. For example:
+ //
+ // .class public auto ansi sealed mynamespace.e_t extends [mscorlib]System.Enum
+ // {
+ // .field public specialname rtspecialname int16 value__
+ // .field public static literal valuetype mynamespace.e_t one = int16(0x0000)
+ // }
+ // .method public hidebysig static void Main() cil managed
+ // {
+ // .locals init (valuetype mynamespace.e_t V_0)
+ // ...
+ // ldloca.s V_0
+ // ldflda int16 mynamespace.e_t::value__
+ // ...
+ // }
+ //
+ // Normally, compilers will not generate the ldflda, since it is superfluous.
+ //
+ // In the example, the lclVar is short, but the JIT promotes all trees using this local to the
+ // "actual type", that is, INT. But the GT_FIELD is still SHORT. So, in the case of a type
+ // mismatch like this, don't do this morphing. The local var may end up getting marked as
+ // address taken, and the appropriate SHORT load will be done from memory in that case.
- if (tree->TypeGet() == obj->TypeGet())
- {
- tree->ChangeOper(GT_LCL_VAR);
- tree->gtLclVarCommon.SetLclNum(lclNum);
- tree->gtFlags &= GTF_NODE_MASK;
+ if (tree->TypeGet() == obj->TypeGet())
+ {
+ tree->ChangeOper(GT_LCL_VAR);
+ tree->gtLclVarCommon.SetLclNum(lclNum);
+ tree->gtFlags &= GTF_NODE_MASK;
- GenTreePtr parent = fgWalkPre->parentStack->Index(1);
- if ((parent->gtOper == GT_ASG) && (parent->gtOp.gtOp1 == tree))
- {
- tree->gtFlags |= GTF_VAR_DEF;
- tree->gtFlags |= GTF_DONT_CSE;
- }
+ GenTreePtr parent = fgWalkPre->parentStack->Index(1);
+ if ((parent->gtOper == GT_ASG) && (parent->gtOp.gtOp1 == tree))
+ {
+ tree->gtFlags |= GTF_VAR_DEF;
+ tree->gtFlags |= GTF_DONT_CSE;
+ }
#ifdef DEBUG
- if (verbose)
- {
- printf("Replacing the field in normed struct with the local var:\n");
- fgWalkPre->printModified = true;
- }
-#endif // DEBUG
- return WALK_SKIP_SUBTREES;
- }
+ if (verbose)
+ {
+ printf("Replacing the field in normed struct with the local var:\n");
+ fgWalkPre->printModified = true;
}
+#endif // DEBUG
+ return WALK_SKIP_SUBTREES;
}
}
}
diff --git a/src/jit/optcse.cpp b/src/jit/optcse.cpp
index 3ff4cea385..5ee6d84920 100644
--- a/src/jit/optcse.cpp
+++ b/src/jit/optcse.cpp
@@ -996,6 +996,17 @@ void Compiler::optValnumCSE_Availablity()
/* This is a CSE def */
+ if (desc->csdDefCount == 0)
+ {
+ // This is the first def visited, so copy its conservative VN
+ desc->defConservativeVN = tree->gtVNPair.GetConservative();
+ }
+ else if (tree->gtVNPair.GetConservative() != desc->defConservativeVN)
+ {
+ // This candidate has defs with differing conservative VNs
+ desc->defConservativeVN = ValueNumStore::NoVN;
+ }
+
desc->csdDefCount += 1;
desc->csdDefWtCnt += stmw;
@@ -1778,6 +1789,8 @@ public:
m_addCSEcount++; // Record that we created a new LclVar for use as a CSE temp
m_pCompiler->optCSEcount++;
+ ValueNum defConservativeVN = successfulCandidate->CseDsc()->defConservativeVN;
+
/* Walk all references to this CSE, adding an assignment
to the CSE temp to all defs and changing all refs to
a simple use of the CSE temp.
@@ -1890,6 +1903,13 @@ public:
//
cse = m_pCompiler->gtNewLclvNode(cseLclVarNum, cseLclVarTyp);
cse->gtVNPair = exp->gtVNPair; // assign the proper Value Numbers
+ if (defConservativeVN != ValueNumStore::NoVN)
+ {
+ // All defs of this CSE share the same conservative VN, and we are rewriting this
+ // use to fetch the same value with no reload, so we can safely propagate that
+ // conservative VN to this use. This can help range check elimination later on.
+ cse->gtVNPair.SetConservative(defConservativeVN);
+ }
#ifdef DEBUG
cse->gtDebugFlags |= GTF_DEBUG_VAR_CSE_REF;
#endif // DEBUG
diff --git a/src/jit/optimizer.cpp b/src/jit/optimizer.cpp
index bd82f6a6f3..92edf62890 100644
--- a/src/jit/optimizer.cpp
+++ b/src/jit/optimizer.cpp
@@ -1193,7 +1193,10 @@ void Compiler::optRecordLoop(BasicBlock* head,
optLoopTable[loopInd].lpFlags = 0;
// We haven't yet recorded any side effects.
- optLoopTable[loopInd].lpLoopHasHeapHavoc = false;
+ for (MemoryKind memoryKind : allMemoryKinds())
+ {
+ optLoopTable[loopInd].lpLoopHasMemoryHavoc[memoryKind] = false;
+ }
optLoopTable[loopInd].lpFieldsModified = nullptr;
optLoopTable[loopInd].lpArrayElemTypesModified = nullptr;
@@ -6397,7 +6400,7 @@ bool Compiler::optVNIsLoopInvariant(ValueNum vn, unsigned lnum, VNToBoolMap* loo
res = !optLoopContains(lnum, ssaDef->m_defLoc.m_blk->bbNatLoopNum);
}
}
- else if (funcApp.m_func == VNF_PhiHeapDef)
+ else if (funcApp.m_func == VNF_PhiMemoryDef)
{
BasicBlock* defnBlk = reinterpret_cast<BasicBlock*>(vnStore->ConstantValue<ssize_t>(funcApp.m_args[0]));
res = !optLoopContains(lnum, defnBlk->bbNatLoopNum);
@@ -6837,7 +6840,8 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
AddVariableLivenessAllContainingLoops(mostNestedLoop, blk);
- bool heapHavoc = false; // True ==> there's a call or a memory store that has arbitrary heap effects.
+ // MemoryKinds for which an in-loop call or store has arbitrary effects.
+ MemoryKindSet memoryHavoc = emptyMemoryKindSet;
// Now iterate over the remaining statements, and their trees.
for (GenTreePtr stmts = blk->FirstNonPhiDef(); (stmts != nullptr); stmts = stmts->gtNext)
@@ -6846,8 +6850,8 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
{
genTreeOps oper = tree->OperGet();
- // Even after we set heapHavoc we still may want to know if a loop contains calls
- if (heapHavoc)
+ // Even after we set memoryHavoc we still may want to know if a loop contains calls
+ if (memoryHavoc == fullMemoryKindSet)
{
if (oper == GT_CALL)
{
@@ -6858,18 +6862,18 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
// If we just set lpContainsCall or it was previously set
if (optLoopTable[mostNestedLoop].lpContainsCall)
{
- // We can early exit after both heapHavoc and lpContainsCall are both set to true.
+ // We can early exit after both memoryHavoc and lpContainsCall are both set to true.
break;
}
- // We are just looking for GT_CALL nodes after heapHavoc was set.
+ // We are just looking for GT_CALL nodes after memoryHavoc was set.
continue;
}
- // otherwise heapHavoc is not set
- assert(!heapHavoc);
+ // otherwise memoryHavoc is not set for at least one heap ID
+ assert(memoryHavoc != fullMemoryKindSet);
- // This body is a distillation of the heap-side effect code of value numbering.
+ // This body is a distillation of the memory side-effect code of value numbering.
// We also do a very limited analysis if byref PtrTo values, to cover some cases
// that the compiler creates.
@@ -6884,7 +6888,7 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
if ((tree->gtFlags & GTF_IND_VOLATILE) != 0)
{
- heapHavoc = true;
+ memoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
continue;
}
@@ -6906,12 +6910,14 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
CORINFO_CLASS_HANDLE elemType =
CORINFO_CLASS_HANDLE(vnStore->ConstantValue<size_t>(funcApp.m_args[0]));
AddModifiedElemTypeAllContainingLoops(mostNestedLoop, elemType);
- // Don't set heapHavoc below.
+ // Don't set memoryHavoc for GcHeap below. Do set memoryHavoc for ByrefExposed
+ // (conservatively assuming that a byref may alias the array element)
+ memoryHavoc |= memoryKindSet(ByrefExposed);
continue;
}
}
// Otherwise...
- heapHavoc = true;
+ memoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
}
// Is the LHS an array index expression?
else if (lhs->ParseArrayElemForm(this, &arrInfo, &fldSeqArrElem))
@@ -6920,6 +6926,8 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
// field of "S", will lose all information about the array type.
CORINFO_CLASS_HANDLE elemTypeEq = EncodeElemType(arrInfo.m_elemType, arrInfo.m_elemStructType);
AddModifiedElemTypeAllContainingLoops(mostNestedLoop, elemTypeEq);
+ // Conservatively assume byrefs may alias this array element
+ memoryHavoc |= memoryKindSet(ByrefExposed);
}
else
{
@@ -6932,7 +6940,7 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
if (arg->IsFieldAddr(this, &obj, &staticOffset, &fldSeq) &&
(fldSeq != FieldSeqStore::NotAField()))
{
- // Get the first (object) field from field seq. Heap[field] will yield the "field map".
+ // Get the first (object) field from field seq. GcHeap[field] will yield the "field map".
assert(fldSeq != nullptr);
if (fldSeq->IsFirstElemFieldSeq())
{
@@ -6941,10 +6949,12 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
}
AddModifiedFieldAllContainingLoops(mostNestedLoop, fldSeq->m_fieldHnd);
+ // Conservatively assume byrefs may alias this object.
+ memoryHavoc |= memoryKindSet(ByrefExposed);
}
else
{
- heapHavoc = true;
+ memoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
}
}
}
@@ -6954,13 +6964,19 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
bool isEntire;
if (!tree->DefinesLocal(this, &lclVarTree, &isEntire))
{
- // For now, assume arbitrary side effects on the heap...
- heapHavoc = true;
+ // For now, assume arbitrary side effects on GcHeap/ByrefExposed...
+ memoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
+ }
+ else if (lvaVarAddrExposed(lclVarTree->gtLclNum))
+ {
+ memoryHavoc |= memoryKindSet(ByrefExposed);
}
}
else if (lhs->OperGet() == GT_CLS_VAR)
{
AddModifiedFieldAllContainingLoops(mostNestedLoop, lhs->gtClsVar.gtClsVarHnd);
+ // Conservatively assume byrefs may alias this static field
+ memoryHavoc |= memoryKindSet(ByrefExposed);
}
// Otherwise, must be local lhs form. I should assert that.
else if (lhs->OperGet() == GT_LCL_VAR)
@@ -6979,6 +6995,11 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
->m_vnPair.SetLiberal(rhsVN);
}
}
+ // If the local is address-exposed, count this as ByrefExposed havoc
+ if (lvaVarAddrExposed(lhsLcl->gtLclNum))
+ {
+ memoryHavoc |= memoryKindSet(ByrefExposed);
+ }
}
}
else // not GenTree::OperIsAssignment(oper)
@@ -7019,7 +7040,7 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
case GT_XCHG: // Binop
case GT_CMPXCHG: // Specialop
{
- heapHavoc = true;
+ memoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
}
break;
@@ -7035,7 +7056,7 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
CorInfoHelpFunc helpFunc = eeGetHelperNum(call->gtCallMethHnd);
if (s_helperCallProperties.MutatesHeap(helpFunc))
{
- heapHavoc = true;
+ memoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
}
else if (s_helperCallProperties.MayRunCctor(helpFunc))
{
@@ -7045,33 +7066,39 @@ void Compiler::optComputeLoopSideEffectsOfBlock(BasicBlock* blk)
// and might have arbitrary side effects.
if ((tree->gtFlags & GTF_CALL_HOISTABLE) == 0)
{
- heapHavoc = true;
+ memoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
}
}
}
else
{
- heapHavoc = true;
+ memoryHavoc |= memoryKindSet(GcHeap, ByrefExposed);
}
break;
}
default:
- // All other gtOper node kinds, leave 'heapHavoc' unchanged (i.e. false)
+ // All other gtOper node kinds, leave 'memoryHavoc' unchanged (i.e. false)
break;
}
}
}
}
- if (heapHavoc)
+ if (memoryHavoc != emptyMemoryKindSet)
{
- // Record that all loops containing this block have heap havoc effects.
+ // Record that all loops containing this block have memory havoc effects.
unsigned lnum = mostNestedLoop;
while (lnum != BasicBlock::NOT_IN_LOOP)
{
- optLoopTable[lnum].lpLoopHasHeapHavoc = true;
- lnum = optLoopTable[lnum].lpParent;
+ for (MemoryKind memoryKind : allMemoryKinds())
+ {
+ if ((memoryHavoc & memoryKindSet(memoryKind)) != 0)
+ {
+ optLoopTable[lnum].lpLoopHasMemoryHavoc[memoryKind] = true;
+ }
+ }
+ lnum = optLoopTable[lnum].lpParent;
}
}
}
@@ -7426,57 +7453,6 @@ GenTreePtr Compiler::optFindLocalInit(BasicBlock* block,
return rhs;
}
-/*****************************************************************************
- *
- * Return true if "op1" is guaranteed to be less then or equal to "op2".
- */
-
-#if FANCY_ARRAY_OPT
-
-bool Compiler::optIsNoMore(GenTreePtr op1, GenTreePtr op2, int add1, int add2)
-{
- if (op1->gtOper == GT_CNS_INT && op2->gtOper == GT_CNS_INT)
- {
- add1 += op1->gtIntCon.gtIconVal;
- add2 += op2->gtIntCon.gtIconVal;
- }
- else
- {
- /* Check for +/- constant on either operand */
-
- if (op1->gtOper == GT_ADD && op1->gtOp.gtOp2->gtOper == GT_CNS_INT)
- {
- add1 += op1->gtOp.gtOp2->gtIntCon.gtIconVal;
- op1 = op1->gtOp.gtOp1;
- }
-
- if (op2->gtOper == GT_ADD && op2->gtOp.gtOp2->gtOper == GT_CNS_INT)
- {
- add2 += op2->gtOp.gtOp2->gtIntCon.gtIconVal;
- op2 = op2->gtOp.gtOp1;
- }
-
- /* We only allow local variable references */
-
- if (op1->gtOper != GT_LCL_VAR)
- return false;
- if (op2->gtOper != GT_LCL_VAR)
- return false;
- if (op1->gtLclVarCommon.gtLclNum != op2->gtLclVarCommon.gtLclNum)
- return false;
-
- /* NOTE: Caller ensures that this variable has only one def */
-
- // printf("limit [%d]:\n", add1); gtDispTree(op1);
- // printf("size [%d]:\n", add2); gtDispTree(op2);
- // printf("\n");
- }
-
- return (bool)(add1 <= add2);
-}
-
-#endif
-
//------------------------------------------------------------------------------
// optObtainLoopCloningOpts: Identify optimization candidates and update
// the "context" for array optimizations.
@@ -7662,11 +7638,11 @@ bool Compiler::optExtractArrIndex(GenTreePtr tree, ArrIndex* result, unsigned lh
return false;
}
GenTreeBoundsChk* arrBndsChk = before->AsBoundsChk();
- if (arrBndsChk->gtArrLen->gtGetOp1()->gtOper != GT_LCL_VAR)
+ if (arrBndsChk->gtIndex->gtOper != GT_LCL_VAR)
{
return false;
}
- if (arrBndsChk->gtIndex->gtOper != GT_LCL_VAR)
+ if (arrBndsChk->gtArrLen->gtGetOp1()->gtOper != GT_LCL_VAR)
{
return false;
}
diff --git a/src/jit/rationalize.cpp b/src/jit/rationalize.cpp
index 7f5a26fa1f..00e0bec6f7 100644
--- a/src/jit/rationalize.cpp
+++ b/src/jit/rationalize.cpp
@@ -7,6 +7,7 @@
#pragma hdrstop
#endif
+#ifndef LEGACY_BACKEND
// state carried over the tree walk, to be used in making
// a splitting decision.
struct SplitData
@@ -116,17 +117,14 @@ void Rationalizer::RewriteSIMDOperand(LIR::Use& use, bool keepBlk)
addr->gtType = simdType;
use.ReplaceWith(comp, addr);
}
-#if defined(_TARGET_X86_)
- // For x86, if we have GT_IND(GT_ADDR(GT_SIMD)), remove the GT_IND(GT_ADDR()), leaving just
- // the GT_SIMD.
else if ((addr->OperGet() == GT_ADDR) && (addr->gtGetOp1()->OperGet() == GT_SIMD))
{
+ // if we have GT_IND(GT_ADDR(GT_SIMD)), remove the GT_IND(GT_ADDR()), leaving just the GT_SIMD.
BlockRange().Remove(tree);
BlockRange().Remove(addr);
use.ReplaceWith(comp, addr->gtGetOp1());
}
-#endif // defined(_TARGET_X86_)
else if (!keepBlk)
{
tree->SetOper(GT_IND);
@@ -729,6 +727,11 @@ Compiler::fgWalkResult Rationalizer::RewriteNode(GenTree** useEdge, ArrayStack<G
case GT_IND:
// Clear the `GTF_IND_ASG_LHS` flag, which overlaps with `GTF_IND_REQ_ADDR_IN_REG`.
node->gtFlags &= ~GTF_IND_ASG_LHS;
+
+ if (varTypeIsSIMD(node))
+ {
+ RewriteSIMDOperand(use, false);
+ }
break;
case GT_NOP:
@@ -795,7 +798,7 @@ Compiler::fgWalkResult Rationalizer::RewriteNode(GenTree** useEdge, ArrayStack<G
BlockRange().Remove(node);
break;
-#ifdef _TARGET_XARCH_
+#if defined(_TARGET_XARCH_) || defined(_TARGET_ARM_)
case GT_CLS_VAR:
{
// Class vars that are the target of an assignment will get rewritten into
@@ -910,7 +913,7 @@ Compiler::fgWalkResult Rationalizer::RewriteNode(GenTree** useEdge, ArrayStack<G
op1->gtType = simdType;
}
- GenTree* op2 = simdNode->gtGetOp2();
+ GenTree* op2 = simdNode->gtGetOp2IfPresent();
if (op2 != nullptr && op2->gtType == TYP_STRUCT)
{
op2->gtType = simdType;
@@ -1052,3 +1055,4 @@ void Rationalizer::DoPhase()
comp->compRationalIRForm = true;
}
+#endif // LEGACY_BACKEND
diff --git a/src/jit/regalloc.cpp b/src/jit/regalloc.cpp
index 8a7ad5a163..5c3895b4f2 100644
--- a/src/jit/regalloc.cpp
+++ b/src/jit/regalloc.cpp
@@ -1724,7 +1724,7 @@ regMaskTP Compiler::rpPredictBlkAsgRegUse(GenTreePtr tree,
bool useBarriers = false;
GenTreeBlk* dst = tree->gtGetOp1()->AsBlk();
GenTreePtr dstAddr = dst->Addr();
- GenTreePtr srcAddrOrFill = tree->gtGetOp2();
+ GenTreePtr srcAddrOrFill = tree->gtGetOp2IfPresent();
size_t blkSize = dst->gtBlkSize;
@@ -2478,7 +2478,7 @@ regMaskTP Compiler::rpPredictTreeRegUse(GenTreePtr tree,
if (kind & GTK_SMPOP)
{
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
GenTreePtr opsPtr[3];
regMaskTP regsPtr[3];
diff --git a/src/jit/registerfp.cpp b/src/jit/registerfp.cpp
index 3a3143e629..ed71886cae 100644
--- a/src/jit/registerfp.cpp
+++ b/src/jit/registerfp.cpp
@@ -243,7 +243,7 @@ void CodeGen::genFloatSimple(GenTree* tree, RegSet::RegisterPreference* pref)
case GT_COMMA:
{
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
if (tree->gtFlags & GTF_REVERSE_OPS)
{
@@ -318,7 +318,7 @@ void CodeGen::genFloatAssign(GenTree* tree)
{
var_types type = tree->TypeGet();
GenTreePtr op1 = tree->gtGetOp1();
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
regMaskTP needRegOp1 = RBM_ALLINT;
regMaskTP addrReg = RBM_NONE;
@@ -846,7 +846,7 @@ void CodeGen::genFloatArith(GenTreePtr tree, RegSet::RegisterPreference* tgtPref
var_types type = tree->TypeGet();
genTreeOps oper = tree->OperGet();
GenTreePtr op1 = tree->gtGetOp1();
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
regNumber tgtReg;
unsigned varNum;
diff --git a/src/jit/simd.cpp b/src/jit/simd.cpp
index 39664c47bf..fb190c4fa1 100644
--- a/src/jit/simd.cpp
+++ b/src/jit/simd.cpp
@@ -347,6 +347,7 @@ var_types Compiler::getBaseTypeAndSizeOfSIMDType(CORINFO_CLASS_HANDLE typeHnd, u
}
*sizeBytes = size;
+ setUsesSIMDTypes(true);
}
return simdBaseType;
@@ -426,16 +427,6 @@ const SIMDIntrinsicInfo* Compiler::getSIMDIntrinsicInfo(CORINFO_CLASS_HANDLE* in
return nullptr;
}
-#ifdef _TARGET_X86_
- // NYI: support LONG type SIMD intrinsics. Need support in long decomposition.
- // (Don't use NYI fallback mechanism; just call the function.)
- if ((*baseType == TYP_LONG) || (*baseType == TYP_ULONG))
- {
- JITDUMP("NYI: x86 long base type SIMD intrinsics\n");
- return nullptr;
- }
-#endif // _TARGET_X86_
-
// account for implicit "this" arg
*argCount = sig->numArgs;
if (sig->hasThis())
@@ -1156,6 +1147,154 @@ SIMDIntrinsicID Compiler::impSIMDRelOp(SIMDIntrinsicID relOpIntrinsicId,
#endif // !_TARGET_XARCH_
}
+//-------------------------------------------------------------------------
+// impSIMDAbs: creates GT_SIMD node to compute Abs value of a given vector.
+//
+// Arguments:
+// typeHnd - type handle of SIMD vector
+// baseType - base type of vector
+// size - vector size in bytes
+// op1 - operand of Abs intrinsic
+//
+GenTreePtr Compiler::impSIMDAbs(CORINFO_CLASS_HANDLE typeHnd, var_types baseType, unsigned size, GenTree* op1)
+{
+ assert(varTypeIsSIMD(op1));
+
+ var_types simdType = op1->TypeGet();
+ GenTreePtr retVal = nullptr;
+
+#ifdef _TARGET_XARCH_
+ // When there is no direct support, Abs(v) could be computed
+ // on integer vectors as follows:
+ // BitVector = v < vector.Zero
+ // result = ConditionalSelect(BitVector, vector.Zero - v, v)
+
+ bool useConditionalSelect = false;
+ if (getSIMDInstructionSet() == InstructionSet_SSE2)
+ {
+ // SSE2 doesn't support abs on signed integer type vectors.
+ if (baseType == TYP_LONG || baseType == TYP_INT || baseType == TYP_SHORT || baseType == TYP_BYTE)
+ {
+ useConditionalSelect = true;
+ }
+ }
+ else
+ {
+ assert(getSIMDInstructionSet() >= InstructionSet_SSE3_4);
+ if (baseType == TYP_LONG)
+ {
+ // SSE3_4/AVX2 don't support abs on long type vector.
+ useConditionalSelect = true;
+ }
+ }
+
+ if (useConditionalSelect)
+ {
+ // This works only on integer vectors not on float/double vectors.
+ assert(varTypeIsIntegral(baseType));
+
+ GenTreePtr op1Assign;
+ unsigned op1LclNum;
+
+ if (op1->OperGet() == GT_LCL_VAR)
+ {
+ op1LclNum = op1->gtLclVarCommon.gtLclNum;
+ op1Assign = nullptr;
+ }
+ else
+ {
+ op1LclNum = lvaGrabTemp(true DEBUGARG("SIMD Abs op1"));
+ lvaSetStruct(op1LclNum, typeHnd, false);
+ op1Assign = gtNewTempAssign(op1LclNum, op1);
+ op1 = gtNewLclvNode(op1LclNum, op1->TypeGet());
+ }
+
+ // Assign Vector.Zero to a temp since it is needed more than once
+ GenTreePtr vecZero = gtNewSIMDVectorZero(simdType, baseType, size);
+ unsigned vecZeroLclNum = lvaGrabTemp(true DEBUGARG("SIMD Abs VecZero"));
+ lvaSetStruct(vecZeroLclNum, typeHnd, false);
+ GenTreePtr vecZeroAssign = gtNewTempAssign(vecZeroLclNum, vecZero);
+
+ // Construct BitVector = v < vector.Zero
+ GenTreePtr bitVecOp1 = op1;
+ GenTreePtr bitVecOp2 = gtNewLclvNode(vecZeroLclNum, vecZero->TypeGet());
+ var_types relOpBaseType = baseType;
+ SIMDIntrinsicID relOpIntrinsic =
+ impSIMDRelOp(SIMDIntrinsicLessThan, typeHnd, size, &relOpBaseType, &bitVecOp1, &bitVecOp2);
+ GenTreePtr bitVec = gtNewSIMDNode(simdType, bitVecOp1, bitVecOp2, relOpIntrinsic, relOpBaseType, size);
+ unsigned bitVecLclNum = lvaGrabTemp(true DEBUGARG("SIMD Abs bitVec"));
+ lvaSetStruct(bitVecLclNum, typeHnd, false);
+ GenTreePtr bitVecAssign = gtNewTempAssign(bitVecLclNum, bitVec);
+ bitVec = gtNewLclvNode(bitVecLclNum, bitVec->TypeGet());
+
+ // Construct condSelectOp1 = vector.Zero - v
+ GenTreePtr subOp1 = gtNewLclvNode(vecZeroLclNum, vecZero->TypeGet());
+ GenTreePtr subOp2 = gtNewLclvNode(op1LclNum, op1->TypeGet());
+ GenTreePtr negVec = gtNewSIMDNode(simdType, subOp1, subOp2, SIMDIntrinsicSub, baseType, size);
+
+ // Construct ConditionalSelect(bitVec, vector.Zero - v, v)
+ GenTreePtr vec = gtNewLclvNode(op1LclNum, op1->TypeGet());
+ retVal = impSIMDSelect(typeHnd, baseType, size, bitVec, negVec, vec);
+
+ // Prepend bitVec assignment to retVal.
+ // retVal = (tmp2 = v < tmp1), CondSelect(tmp2, tmp1 - v, v)
+ retVal = gtNewOperNode(GT_COMMA, simdType, bitVecAssign, retVal);
+
+ // Prepend vecZero assignment to retVal.
+ // retVal = (tmp1 = vector.Zero), (tmp2 = v < tmp1), CondSelect(tmp2, tmp1 - v, v)
+ retVal = gtNewOperNode(GT_COMMA, simdType, vecZeroAssign, retVal);
+
+ // If op1 was assigned to a temp, prepend that to retVal.
+ if (op1Assign != nullptr)
+ {
+ // retVal = (v=op1), (tmp1 = vector.Zero), (tmp2 = v < tmp1), CondSelect(tmp2, tmp1 - v, v)
+ retVal = gtNewOperNode(GT_COMMA, simdType, op1Assign, retVal);
+ }
+ }
+ else if (varTypeIsFloating(baseType))
+ {
+ // Abs(vf) = vf & new SIMDVector<float>(0x7fffffff);
+ // Abs(vd) = vf & new SIMDVector<double>(0x7fffffffffffffff);
+ GenTree* bitMask = nullptr;
+ if (baseType == TYP_FLOAT)
+ {
+ float f;
+ static_assert_no_msg(sizeof(float) == sizeof(int));
+ *((int*)&f) = 0x7fffffff;
+ bitMask = gtNewDconNode(f);
+ }
+ else if (baseType == TYP_DOUBLE)
+ {
+ double d;
+ static_assert_no_msg(sizeof(double) == sizeof(__int64));
+ *((__int64*)&d) = 0x7fffffffffffffffLL;
+ bitMask = gtNewDconNode(d);
+ }
+
+ assert(bitMask != nullptr);
+ bitMask->gtType = baseType;
+ GenTree* bitMaskVector = gtNewSIMDNode(simdType, bitMask, SIMDIntrinsicInit, baseType, size);
+ retVal = gtNewSIMDNode(simdType, op1, bitMaskVector, SIMDIntrinsicBitwiseAnd, baseType, size);
+ }
+ else if (baseType == TYP_CHAR || baseType == TYP_UBYTE || baseType == TYP_UINT || baseType == TYP_ULONG)
+ {
+ // Abs is a no-op on unsigned integer type vectors
+ retVal = op1;
+ }
+ else
+ {
+ assert(getSIMDInstructionSet() >= InstructionSet_SSE3_4);
+ assert(baseType != TYP_LONG);
+
+ retVal = gtNewSIMDNode(simdType, op1, SIMDIntrinsicAbs, baseType, size);
+ }
+#else // !_TARGET_XARCH_
+ assert(!"Abs intrinsic on non-xarch target not implemented");
+#endif // !_TARGET_XARCH_
+
+ return retVal;
+}
+
// Creates a GT_SIMD tree for Select operation
//
// Argumens:
@@ -1645,7 +1784,7 @@ GenTreePtr Compiler::createAddressNodeForSIMDInit(GenTreePtr tree, unsigned simd
GenTreeArrLen* arrLen =
new (this, GT_ARR_LENGTH) GenTreeArrLen(TYP_INT, arrayRef, (int)offsetof(CORINFO_Array, length));
GenTreeBoundsChk* arrBndsChk = new (this, GT_ARR_BOUNDS_CHECK)
- GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, arrLen, checkIndexExpr, SCK_RNGCHK_FAIL);
+ GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, checkIndexExpr, arrLen, SCK_RNGCHK_FAIL);
offset += offsetof(CORINFO_Array, u1Elems);
byrefNode = gtNewOperNode(GT_COMMA, arrayRef->TypeGet(), arrBndsChk, gtCloneExpr(arrayRef));
@@ -1820,43 +1959,12 @@ GenTreePtr Compiler::impSIMDIntrinsic(OPCODE opcode,
break;
case SIMDIntrinsicGetZero:
- {
- baseType = genActualType(baseType);
- GenTree* initVal = gtNewZeroConNode(baseType);
- initVal->gtType = baseType;
- simdTree = gtNewSIMDNode(simdType, initVal, nullptr, SIMDIntrinsicInit, baseType, size);
- retVal = simdTree;
- }
- break;
+ retVal = gtNewSIMDVectorZero(simdType, baseType, size);
+ break;
case SIMDIntrinsicGetOne:
- {
- GenTree* initVal;
- if (varTypeIsSmallInt(baseType))
- {
- unsigned baseSize = genTypeSize(baseType);
- int val;
- if (baseSize == 1)
- {
- val = 0x01010101;
- }
- else
- {
- val = 0x00010001;
- }
- initVal = gtNewIconNode(val);
- }
- else
- {
- initVal = gtNewOneConNode(baseType);
- }
-
- baseType = genActualType(baseType);
- initVal->gtType = baseType;
- simdTree = gtNewSIMDNode(simdType, initVal, nullptr, SIMDIntrinsicInit, baseType, size);
- retVal = simdTree;
- }
- break;
+ retVal = gtNewSIMDVectorOne(simdType, baseType, size);
+ break;
case SIMDIntrinsicGetAllOnes:
{
@@ -2130,7 +2238,7 @@ GenTreePtr Compiler::impSIMDIntrinsic(OPCODE opcode,
GenTreeArrLen* arrLen = new (this, GT_ARR_LENGTH)
GenTreeArrLen(TYP_INT, arrayRefForArgRngChk, (int)offsetof(CORINFO_Array, length));
argRngChk = new (this, GT_ARR_BOUNDS_CHECK)
- GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, arrLen, index, op3CheckKind);
+ GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, index, arrLen, op3CheckKind);
// Now, clone op3 to create another node for the argChk
GenTree* index2 = gtCloneExpr(op3);
assert(index != nullptr);
@@ -2151,7 +2259,7 @@ GenTreePtr Compiler::impSIMDIntrinsic(OPCODE opcode,
GenTreeArrLen* arrLen = new (this, GT_ARR_LENGTH)
GenTreeArrLen(TYP_INT, arrayRefForArgChk, (int)offsetof(CORINFO_Array, length));
GenTreeBoundsChk* argChk = new (this, GT_ARR_BOUNDS_CHECK)
- GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, arrLen, checkIndexExpr, op2CheckKind);
+ GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, checkIndexExpr, arrLen, op2CheckKind);
// Create a GT_COMMA tree for the bounds check(s).
op2 = gtNewOperNode(GT_COMMA, op2->TypeGet(), argChk, op2);
@@ -2383,7 +2491,7 @@ GenTreePtr Compiler::impSIMDIntrinsic(OPCODE opcode,
GenTree* lengthNode = new (this, GT_CNS_INT) GenTreeIntCon(TYP_INT, vectorLength);
GenTreeBoundsChk* simdChk =
- new (this, GT_SIMD_CHK) GenTreeBoundsChk(GT_SIMD_CHK, TYP_VOID, lengthNode, index, SCK_RNGCHK_FAIL);
+ new (this, GT_SIMD_CHK) GenTreeBoundsChk(GT_SIMD_CHK, TYP_VOID, index, lengthNode, SCK_RNGCHK_FAIL);
// Create a GT_COMMA tree for the bounds check.
op2 = gtNewOperNode(GT_COMMA, op2->TypeGet(), simdChk, op2);
@@ -2443,54 +2551,9 @@ GenTreePtr Compiler::impSIMDIntrinsic(OPCODE opcode,
break;
case SIMDIntrinsicAbs:
- {
- op1 = impSIMDPopStack(simdType);
-
-#ifdef _TARGET_XARCH_
- if (varTypeIsFloating(baseType))
- {
- // Abs(vf) = vf & new SIMDVector<float>(0x7fffffff);
- // Abs(vd) = vf & new SIMDVector<double>(0x7fffffffffffffff);
- GenTree* bitMask = nullptr;
- if (baseType == TYP_FLOAT)
- {
- float f;
- static_assert_no_msg(sizeof(float) == sizeof(int));
- *((int*)&f) = 0x7fffffff;
- bitMask = gtNewDconNode(f);
- }
- else if (baseType == TYP_DOUBLE)
- {
- double d;
- static_assert_no_msg(sizeof(double) == sizeof(__int64));
- *((__int64*)&d) = 0x7fffffffffffffffLL;
- bitMask = gtNewDconNode(d);
- }
-
- assert(bitMask != nullptr);
- bitMask->gtType = baseType;
- GenTree* bitMaskVector = gtNewSIMDNode(simdType, bitMask, SIMDIntrinsicInit, baseType, size);
- retVal = gtNewSIMDNode(simdType, op1, bitMaskVector, SIMDIntrinsicBitwiseAnd, baseType, size);
- }
- else if (baseType == TYP_CHAR || baseType == TYP_UBYTE || baseType == TYP_UINT || baseType == TYP_ULONG)
- {
- // Abs is a no-op on unsigned integer type vectors
- retVal = op1;
- }
- else
- {
- // SSE/AVX doesn't support abs on signed integer vectors and hence
- // should never be seen as an intrinsic here. See SIMDIntrinsicList.h
- // for supported base types for this intrinsic.
- unreached();
- }
-
-#else // !_TARGET_XARCH_
- assert(!"Abs intrinsic on non-xarch target not implemented");
- unreached();
-#endif // !_TARGET_XARCH_
- }
- break;
+ op1 = impSIMDPopStack(simdType);
+ retVal = impSIMDAbs(clsHnd, baseType, size, op1);
+ break;
case SIMDIntrinsicGetW:
retVal = impSIMDGetFixed(simdType, baseType, size, 3);
diff --git a/src/jit/simdcodegenxarch.cpp b/src/jit/simdcodegenxarch.cpp
index ec933fd5d7..ace36422fb 100644
--- a/src/jit/simdcodegenxarch.cpp
+++ b/src/jit/simdcodegenxarch.cpp
@@ -75,22 +75,20 @@ instruction CodeGen::getOpForSIMDIntrinsic(SIMDIntrinsicID intrinsicId, var_type
result = INS_vbroadcastsd;
break;
case TYP_ULONG:
- __fallthrough;
case TYP_LONG:
+ // NOTE: for x86, this instruction is valid if the src is xmm2/m64, but NOT if it is supposed
+ // to be TYP_LONG reg.
result = INS_vpbroadcastq;
break;
case TYP_UINT:
- __fallthrough;
case TYP_INT:
result = INS_vpbroadcastd;
break;
case TYP_CHAR:
- __fallthrough;
case TYP_SHORT:
result = INS_vpbroadcastw;
break;
case TYP_UBYTE:
- __fallthrough;
case TYP_BYTE:
result = INS_vpbroadcastb;
break;
@@ -99,8 +97,10 @@ instruction CodeGen::getOpForSIMDIntrinsic(SIMDIntrinsicID intrinsicId, var_type
}
break;
}
+
// For SSE, SIMDIntrinsicInit uses the same instruction as the SIMDIntrinsicShuffleSSE2 intrinsic.
__fallthrough;
+
case SIMDIntrinsicShuffleSSE2:
if (baseType == TYP_FLOAT)
{
@@ -116,7 +116,7 @@ instruction CodeGen::getOpForSIMDIntrinsic(SIMDIntrinsicID intrinsicId, var_type
}
else if (baseType == TYP_LONG || baseType == TYP_ULONG)
{
- // We don't have a seperate SSE2 instruction and will
+ // We don't have a separate SSE2 instruction and will
// use the instruction meant for doubles since it is
// of the same size as a long.
result = INS_shufpd;
@@ -272,6 +272,24 @@ instruction CodeGen::getOpForSIMDIntrinsic(SIMDIntrinsicID intrinsicId, var_type
}
break;
+ case SIMDIntrinsicAbs:
+ if (compiler->getSIMDInstructionSet() >= InstructionSet_SSE3_4)
+ {
+ if (baseType == TYP_INT)
+ {
+ result = INS_pabsd;
+ }
+ else if (baseType == TYP_SHORT)
+ {
+ result = INS_pabsw;
+ }
+ else if (baseType == TYP_BYTE)
+ {
+ result = INS_pabsb;
+ }
+ }
+ break;
+
case SIMDIntrinsicEqual:
if (baseType == TYP_FLOAT)
{
@@ -601,7 +619,73 @@ void CodeGen::genSIMDIntrinsicInit(GenTreeSIMD* simdNode)
noway_assert(!varTypeIsSmallInt(baseType) || op1->IsIntegralConst(0));
instruction ins = INS_invalid;
- if (op1->isContained())
+
+#if !defined(_TARGET_64BIT_)
+ if (op1->OperGet() == GT_LONG)
+ {
+ assert(varTypeIsLong(baseType));
+
+ GenTree* op1lo = op1->gtGetOp1();
+ GenTree* op1hi = op1->gtGetOp2();
+
+ if (op1lo->IsIntegralConst(0) && op1hi->IsIntegralConst(0))
+ {
+ genSIMDZero(targetType, baseType, targetReg);
+ }
+ else if (op1lo->IsIntegralConst(-1) && op1hi->IsIntegralConst(-1))
+ {
+ // Initialize elements of vector with all 1's: generate pcmpeqd reg, reg.
+ ins = getOpForSIMDIntrinsic(SIMDIntrinsicEqual, TYP_INT);
+ inst_RV_RV(ins, targetReg, targetReg, targetType, emitActualTypeSize(targetType));
+ }
+ else
+ {
+ // Generate:
+ // mov_i2xmm targetReg, op1lo
+ // mov_i2xmm xmmtmp, op1hi
+ // shl xmmtmp, 4 bytes
+ // por targetReg, xmmtmp
+ // Now, targetReg has the long in the low 64 bits. For SSE2, move it to the high 64 bits using:
+ // shufpd targetReg, targetReg, 0 // move the long to all the lanes
+ // For AVX2, move it to all 4 of the 64-bit lanes using:
+ // vpbroadcastq targetReg, targetReg
+
+ instruction ins;
+
+ regNumber op1loReg = genConsumeReg(op1lo);
+ ins = ins_CopyIntToFloat(TYP_INT, TYP_FLOAT);
+ inst_RV_RV(ins, targetReg, op1loReg, TYP_INT, emitTypeSize(TYP_INT));
+
+ assert(simdNode->gtRsvdRegs != RBM_NONE);
+ assert(genCountBits(simdNode->gtRsvdRegs) == 1);
+ regNumber tmpReg = genRegNumFromMask(simdNode->gtRsvdRegs);
+
+ regNumber op1hiReg = genConsumeReg(op1hi);
+ ins = ins_CopyIntToFloat(TYP_INT, TYP_FLOAT);
+ inst_RV_RV(ins, tmpReg, op1hiReg, TYP_INT, emitTypeSize(TYP_INT));
+
+ ins = getOpForSIMDIntrinsic(SIMDIntrinsicShiftLeftInternal, baseType);
+ getEmitter()->emitIns_R_I(ins, EA_16BYTE, tmpReg, 4); // shift left by 4 bytes
+
+ ins = getOpForSIMDIntrinsic(SIMDIntrinsicBitwiseOr, baseType);
+ inst_RV_RV(ins, targetReg, tmpReg, targetType, emitActualTypeSize(targetType));
+
+#ifdef FEATURE_AVX_SUPPORT
+ if (compiler->canUseAVX())
+ {
+ inst_RV_RV(INS_vpbroadcastq, targetReg, targetReg, TYP_SIMD32, emitTypeSize(TYP_SIMD32));
+ }
+ else
+#endif // FEATURE_AVX_SUPPORT
+ {
+ ins = getOpForSIMDIntrinsic(SIMDIntrinsicShuffleSSE2, baseType);
+ getEmitter()->emitIns_R_R_I(ins, emitActualTypeSize(targetType), targetReg, targetReg, 0);
+ }
+ }
+ }
+ else
+#endif // !defined(_TARGET_64BIT_)
+ if (op1->isContained())
{
if (op1->IsIntegralConst(0) || op1->IsFPZero())
{
@@ -811,7 +895,8 @@ void CodeGen::genSIMDIntrinsicInitN(GenTreeSIMD* simdNode)
//
void CodeGen::genSIMDIntrinsicUnOp(GenTreeSIMD* simdNode)
{
- assert(simdNode->gtSIMDIntrinsicID == SIMDIntrinsicSqrt || simdNode->gtSIMDIntrinsicID == SIMDIntrinsicCast);
+ assert(simdNode->gtSIMDIntrinsicID == SIMDIntrinsicSqrt || simdNode->gtSIMDIntrinsicID == SIMDIntrinsicCast ||
+ simdNode->gtSIMDIntrinsicID == SIMDIntrinsicAbs);
GenTree* op1 = simdNode->gtGetOp1();
var_types baseType = simdNode->gtSIMDBaseType;
@@ -1665,6 +1750,7 @@ void CodeGen::genSIMDIntrinsicGetItem(GenTreeSIMD* simdNode)
}
noway_assert(op2->isContained());
+ noway_assert(op2->IsCnsIntOrI());
unsigned int index = (unsigned int)op2->gtIntCon.gtIconVal;
unsigned int byteShiftCnt = index * genTypeSize(baseType);
@@ -1809,7 +1895,7 @@ void CodeGen::genSIMDIntrinsicGetItem(GenTreeSIMD* simdNode)
assert(tmpReg != REG_NA);
ins = ins_CopyFloatToInt(TYP_FLOAT, baseType);
- // (Note that for mov_xmm2i, the int register is always in the reg2 position.
+ // (Note that for mov_xmm2i, the int register is always in the reg2 position.)
inst_RV_RV(ins, tmpReg, targetReg, baseType);
}
}
@@ -2036,7 +2122,7 @@ void CodeGen::genLoadIndTypeSIMD12(GenTree* treeNode)
}
//-----------------------------------------------------------------------------
-// genStoreLclFldTypeSIMD12: store a TYP_SIMD12 (i.e. Vector3) type field.
+// genStoreLclTypeSIMD12: store a TYP_SIMD12 (i.e. Vector3) type field.
// Since Vector3 is not a hardware supported write size, it is performed
// as two stores: 8 byte followed by 4-byte.
//
@@ -2046,14 +2132,19 @@ void CodeGen::genLoadIndTypeSIMD12(GenTree* treeNode)
// Return Value:
// None.
//
-void CodeGen::genStoreLclFldTypeSIMD12(GenTree* treeNode)
+void CodeGen::genStoreLclTypeSIMD12(GenTree* treeNode)
{
- assert(treeNode->OperGet() == GT_STORE_LCL_FLD);
+ assert((treeNode->OperGet() == GT_STORE_LCL_FLD) || (treeNode->OperGet() == GT_STORE_LCL_VAR));
- unsigned offs = treeNode->gtLclFld.gtLclOffs;
+ unsigned offs = 0;
unsigned varNum = treeNode->gtLclVarCommon.gtLclNum;
assert(varNum < compiler->lvaCount);
+ if (treeNode->OperGet() == GT_LCL_FLD)
+ {
+ offs = treeNode->gtLclFld.gtLclOffs;
+ }
+
GenTreePtr op1 = treeNode->gtOp.gtOp1;
assert(!op1->isContained());
regNumber operandReg = genConsumeReg(op1);
@@ -2121,9 +2212,38 @@ void CodeGen::genLoadLclTypeSIMD12(GenTree* treeNode)
#ifdef _TARGET_X86_
//-----------------------------------------------------------------------------
+// genStoreSIMD12ToStack: store a TYP_SIMD12 (i.e. Vector3) type field to the stack.
+// Since Vector3 is not a hardware supported write size, it is performed
+// as two stores: 8 byte followed by 4-byte. The stack is assumed to have
+// already been adjusted.
+//
+// Arguments:
+// operandReg - the xmm register containing the SIMD12 to store.
+// tmpReg - an xmm register that can be used as a temporary for the operation.
+//
+// Return Value:
+// None.
+//
+void CodeGen::genStoreSIMD12ToStack(regNumber operandReg, regNumber tmpReg)
+{
+ assert(genIsValidFloatReg(operandReg));
+ assert(genIsValidFloatReg(tmpReg));
+
+ // 8-byte write
+ getEmitter()->emitIns_AR_R(ins_Store(TYP_DOUBLE), EA_8BYTE, operandReg, REG_SPBASE, 0);
+
+ // Extract upper 4-bytes from data
+ getEmitter()->emitIns_R_R_I(INS_pshufd, emitActualTypeSize(TYP_SIMD16), tmpReg, operandReg, 0x02);
+
+ // 4-byte write
+ getEmitter()->emitIns_AR_R(ins_Store(TYP_FLOAT), EA_4BYTE, tmpReg, REG_SPBASE, 8);
+}
+
+//-----------------------------------------------------------------------------
// genPutArgStkSIMD12: store a TYP_SIMD12 (i.e. Vector3) type field.
// Since Vector3 is not a hardware supported write size, it is performed
-// as two stores: 8 byte followed by 4-byte.
+// as two stores: 8 byte followed by 4-byte. The stack is assumed to have
+// already been adjusted.
//
// Arguments:
// treeNode - tree node that is attempting to store TYP_SIMD12 field
@@ -2144,19 +2264,7 @@ void CodeGen::genPutArgStkSIMD12(GenTree* treeNode)
assert(genCountBits(treeNode->gtRsvdRegs) == 1);
regNumber tmpReg = genRegNumFromMask(treeNode->gtRsvdRegs);
- // Subtract from ESP; create space for argument.
- // TODO-CQ: use 'push' instead?
- inst_RV_IV(INS_sub, REG_SPBASE, 12, EA_PTRSIZE);
- genStackLevel += 12;
-
- // 8-byte write
- getEmitter()->emitIns_AR_R(ins_Store(TYP_DOUBLE), EA_8BYTE, operandReg, REG_SPBASE, 0);
-
- // Extract upper 4-bytes from data
- getEmitter()->emitIns_R_R_I(INS_pshufd, emitActualTypeSize(TYP_SIMD16), tmpReg, operandReg, 0x02);
-
- // 4-byte write
- getEmitter()->emitIns_AR_R(ins_Store(TYP_FLOAT), EA_4BYTE, tmpReg, REG_SPBASE, 8);
+ genStoreSIMD12ToStack(operandReg, tmpReg);
}
#endif // _TARGET_X86_
@@ -2274,6 +2382,7 @@ void CodeGen::genSIMDIntrinsic(GenTreeSIMD* simdNode)
case SIMDIntrinsicSqrt:
case SIMDIntrinsicCast:
+ case SIMDIntrinsicAbs:
genSIMDIntrinsicUnOp(simdNode);
break;
diff --git a/src/jit/simdintrinsiclist.h b/src/jit/simdintrinsiclist.h
index c81f7b4bf0..0160582892 100644
--- a/src/jit/simdintrinsiclist.h
+++ b/src/jit/simdintrinsiclist.h
@@ -89,13 +89,12 @@ SIMD_INTRINSIC("op_Subtraction", false, Sub,
SIMD_INTRINSIC("op_Multiply", false, Mul, "*", TYP_STRUCT, 2, {TYP_STRUCT, TYP_STRUCT, TYP_UNDEF}, {TYP_INT, TYP_FLOAT, TYP_DOUBLE, TYP_SHORT,TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
SIMD_INTRINSIC("op_Division", false, Div, "/", TYP_STRUCT, 2, {TYP_STRUCT, TYP_STRUCT, TYP_UNDEF}, {TYP_FLOAT, TYP_DOUBLE, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
-// Abs and SquareRoot are recognized as intrinsics only in case of float or double vectors
-SIMD_INTRINSIC("Abs", false, Abs, "abs", TYP_STRUCT, 1, {TYP_STRUCT, TYP_UNDEF, TYP_UNDEF}, {TYP_FLOAT, TYP_DOUBLE, TYP_CHAR, TYP_UBYTE, TYP_UINT, TYP_ULONG, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
+// SquareRoot is recognized as an intrinsic only for float or double vectors
SIMD_INTRINSIC("SquareRoot", false, Sqrt, "sqrt", TYP_STRUCT, 1, {TYP_STRUCT, TYP_UNDEF, TYP_UNDEF}, {TYP_FLOAT, TYP_DOUBLE, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
-// Min and max methods are recognized as intrinsics only in case of float or double vectors
SIMD_INTRINSIC("Min", false, Min, "min", TYP_STRUCT, 2, {TYP_STRUCT, TYP_STRUCT, TYP_UNDEF}, {TYP_INT, TYP_FLOAT, TYP_DOUBLE, TYP_LONG, TYP_CHAR, TYP_UBYTE, TYP_BYTE, TYP_SHORT, TYP_UINT, TYP_ULONG})
SIMD_INTRINSIC("Max", false, Max, "max", TYP_STRUCT, 2, {TYP_STRUCT, TYP_STRUCT, TYP_UNDEF}, {TYP_INT, TYP_FLOAT, TYP_DOUBLE, TYP_LONG, TYP_CHAR, TYP_UBYTE, TYP_BYTE, TYP_SHORT, TYP_UINT, TYP_ULONG})
+SIMD_INTRINSIC("Abs", false, Abs, "abs", TYP_STRUCT, 1, {TYP_STRUCT, TYP_UNDEF, TYP_UNDEF }, {TYP_INT, TYP_FLOAT, TYP_DOUBLE, TYP_LONG, TYP_CHAR, TYP_UBYTE, TYP_BYTE, TYP_SHORT, TYP_UINT, TYP_ULONG})
// Vector Relational operators
SIMD_INTRINSIC("Equals", false, Equal, "eq", TYP_STRUCT, 2, {TYP_STRUCT, TYP_STRUCT, TYP_UNDEF}, {TYP_INT, TYP_FLOAT, TYP_DOUBLE, TYP_LONG, TYP_CHAR, TYP_UBYTE, TYP_BYTE, TYP_SHORT, TYP_UINT, TYP_ULONG})
diff --git a/src/jit/sm.cpp b/src/jit/sm.cpp
index 859b238ec8..b016899761 100644
--- a/src/jit/sm.cpp
+++ b/src/jit/sm.cpp
@@ -51,11 +51,6 @@ void CodeSeqSM::Start(Compiler* comp)
void CodeSeqSM::Reset()
{
curState = SM_STATE_ID_START;
-
-#ifdef DEBUG
- // Reset the state occurence counts
- memset(StateMatchedCounts, 0, sizeof(StateMatchedCounts));
-#endif
}
void CodeSeqSM::End()
diff --git a/src/jit/sm.h b/src/jit/sm.h
index 33d65092bb..8c90e0b7f9 100644
--- a/src/jit/sm.h
+++ b/src/jit/sm.h
@@ -42,9 +42,7 @@ public:
inline void TermStateMatch(SM_STATE_ID stateID DEBUGARG(bool verbose))
{
assert(States[stateID].term);
- assert(StateMatchedCounts[stateID] < _UI16_MAX);
#ifdef DEBUG
- ++StateMatchedCounts[stateID];
#ifndef SMGEN_COMPILE
if (verbose)
{
@@ -65,7 +63,6 @@ public:
}
#ifdef DEBUG
- WORD StateMatchedCounts[NUM_SM_STATES];
const char* StateDesc(SM_STATE_ID stateID);
#endif
diff --git a/src/jit/ssabuilder.cpp b/src/jit/ssabuilder.cpp
index f0ee461c45..3d74234b26 100644
--- a/src/jit/ssabuilder.cpp
+++ b/src/jit/ssabuilder.cpp
@@ -103,12 +103,19 @@ void Compiler::fgResetForSsa()
{
lvaTable[i].lvPerSsaData.Reset();
}
- lvHeapPerSsaData.Reset();
- m_heapSsaMap = nullptr;
+ lvMemoryPerSsaData.Reset();
+ for (MemoryKind memoryKind : allMemoryKinds())
+ {
+ m_memorySsaMap[memoryKind] = nullptr;
+ }
+
for (BasicBlock* blk = fgFirstBB; blk != nullptr; blk = blk->bbNext)
{
// Eliminate phis.
- blk->bbHeapSsaPhiFunc = nullptr;
+ for (MemoryKind memoryKind : allMemoryKinds())
+ {
+ blk->bbMemorySsaPhiFunc[memoryKind] = nullptr;
+ }
if (blk->bbTreeList != nullptr)
{
GenTreePtr last = blk->bbTreeList->gtPrev;
@@ -804,29 +811,48 @@ void SsaBuilder::InsertPhiFunctions(BasicBlock** postOrder, int count)
}
}
- // Now make a similar phi definition if the block defines Heap.
- if (block->bbHeapDef)
+ // Now make a similar phi definition if the block defines memory.
+ if (block->bbMemoryDef != 0)
{
// For each block "bbInDomFront" that is in the dominance frontier of "block".
for (BlkSet::KeyIterator iterBlk = blkIdf->Begin(); !iterBlk.Equal(blkIdf->End()); ++iterBlk)
{
BasicBlock* bbInDomFront = iterBlk.Get();
- DBG_SSA_JITDUMP(" Considering BB%02u in dom frontier of BB%02u for Heap phis:\n",
+ DBG_SSA_JITDUMP(" Considering BB%02u in dom frontier of BB%02u for Memory phis:\n",
bbInDomFront->bbNum, block->bbNum);
- // Check if Heap is live into block "*iterBlk".
- if (!bbInDomFront->bbHeapLiveIn)
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- continue;
- }
+ if ((memoryKind == GcHeap) && m_pCompiler->byrefStatesMatchGcHeapStates)
+ {
+ // Share the PhiFunc with ByrefExposed.
+ assert(memoryKind > ByrefExposed);
+ bbInDomFront->bbMemorySsaPhiFunc[memoryKind] = bbInDomFront->bbMemorySsaPhiFunc[ByrefExposed];
+ continue;
+ }
- // Check if we've already inserted a phi node.
- if (bbInDomFront->bbHeapSsaPhiFunc == nullptr)
- {
- // We have a variable i that is defined in block j and live at l, and l belongs to dom frontier of
- // j. So insert a phi node at l.
- JITDUMP("Inserting phi definition for Heap at start of BB%02u.\n", bbInDomFront->bbNum);
- bbInDomFront->bbHeapSsaPhiFunc = BasicBlock::EmptyHeapPhiDef;
+ // Check if this memoryKind is defined in this block.
+ if ((block->bbMemoryDef & memoryKindSet(memoryKind)) == 0)
+ {
+ continue;
+ }
+
+ // Check if memoryKind is live into block "*iterBlk".
+ if ((bbInDomFront->bbMemoryLiveIn & memoryKindSet(memoryKind)) == 0)
+ {
+ continue;
+ }
+
+ // Check if we've already inserted a phi node.
+ if (bbInDomFront->bbMemorySsaPhiFunc[memoryKind] == nullptr)
+ {
+ // We have a variable i that is defined in block j and live at l, and l belongs to dom frontier
+ // of
+ // j. So insert a phi node at l.
+ JITDUMP("Inserting phi definition for %s at start of BB%02u.\n", memoryKindNames[memoryKind],
+ bbInDomFront->bbNum);
+ bbInDomFront->bbMemorySsaPhiFunc[memoryKind] = BasicBlock::EmptyMemoryPhiDef;
+ }
}
}
}
@@ -944,31 +970,63 @@ void SsaBuilder::TreeRenameVariables(GenTree* tree, BasicBlock* block, SsaRename
}
}
- // Figure out if "tree" may make a new heap state (if we care for this block).
- if (!block->bbHeapHavoc)
+ // Figure out if "tree" may make a new GC heap state (if we care for this block).
+ if ((block->bbMemoryHavoc & memoryKindSet(GcHeap)) == 0)
{
if (tree->OperIsAssignment() || tree->OperIsBlkOp())
{
if (m_pCompiler->ehBlockHasExnFlowDsc(block))
{
GenTreeLclVarCommon* lclVarNode;
- if (!tree->DefinesLocal(m_pCompiler, &lclVarNode))
+
+ bool isLocal = tree->DefinesLocal(m_pCompiler, &lclVarNode);
+ bool isAddrExposedLocal = isLocal && m_pCompiler->lvaVarAddrExposed(lclVarNode->gtLclNum);
+ bool hasByrefHavoc = ((block->bbMemoryHavoc & memoryKindSet(ByrefExposed)) != 0);
+ if (!isLocal || (isAddrExposedLocal && !hasByrefHavoc))
{
- // It *may* define the heap in a non-havoc way. Make a new SSA # -- associate with this node.
- unsigned count = pRenameState->CountForHeapDef();
- pRenameState->PushHeap(block, count);
- m_pCompiler->GetHeapSsaMap()->Set(tree, count);
-#ifdef DEBUG
- if (JitTls::GetCompiler()->verboseSsa)
+ // It *may* define byref memory in a non-havoc way. Make a new SSA # -- associate with this node.
+ unsigned count = pRenameState->CountForMemoryDef();
+ if (!hasByrefHavoc)
{
- printf("Node ");
- Compiler::printTreeID(tree);
- printf(" (in try block) may define heap; ssa # = %d.\n", count);
- }
+ pRenameState->PushMemory(ByrefExposed, block, count);
+ m_pCompiler->GetMemorySsaMap(ByrefExposed)->Set(tree, count);
+#ifdef DEBUG
+ if (JitTls::GetCompiler()->verboseSsa)
+ {
+ printf("Node ");
+ Compiler::printTreeID(tree);
+ printf(" (in try block) may define memory; ssa # = %d.\n", count);
+ }
#endif // DEBUG
- // Now add this SSA # to all phis of the reachable catch blocks.
- AddHeapDefToHandlerPhis(block, count);
+ // Now add this SSA # to all phis of the reachable catch blocks.
+ AddMemoryDefToHandlerPhis(ByrefExposed, block, count);
+ }
+
+ if (!isLocal)
+ {
+ // Add a new def for GcHeap as well
+ if (m_pCompiler->byrefStatesMatchGcHeapStates)
+ {
+ // GcHeap and ByrefExposed share the same stacks, SsaMap, and phis
+ assert(!hasByrefHavoc);
+ assert(pRenameState->CountForMemoryUse(GcHeap) == count);
+ assert(*m_pCompiler->GetMemorySsaMap(GcHeap)->LookupPointer(tree) == count);
+ assert(block->bbMemorySsaPhiFunc[GcHeap] == block->bbMemorySsaPhiFunc[ByrefExposed]);
+ }
+ else
+ {
+ if (!hasByrefHavoc)
+ {
+ // Allocate a distinct defnum for the GC Heap
+ count = pRenameState->CountForMemoryDef();
+ }
+
+ pRenameState->PushMemory(GcHeap, block, count);
+ m_pCompiler->GetMemorySsaMap(GcHeap)->Set(tree, count);
+ AddMemoryDefToHandlerPhis(GcHeap, block, count);
+ }
+ }
}
}
}
@@ -1154,7 +1212,7 @@ void SsaBuilder::AddDefToHandlerPhis(BasicBlock* block, unsigned lclNum, unsigne
}
}
-void SsaBuilder::AddHeapDefToHandlerPhis(BasicBlock* block, unsigned count)
+void SsaBuilder::AddMemoryDefToHandlerPhis(MemoryKind memoryKind, BasicBlock* block, unsigned count)
{
if (m_pCompiler->ehBlockHasExnFlowDsc(block))
{
@@ -1165,39 +1223,60 @@ void SsaBuilder::AddHeapDefToHandlerPhis(BasicBlock* block, unsigned count)
}
// Otherwise...
- DBG_SSA_JITDUMP("Definition of Heap/d:%d in block BB%02u has exn handler; adding as phi arg to handlers.\n",
- count, block->bbNum);
+ DBG_SSA_JITDUMP("Definition of %s/d:%d in block BB%02u has exn handler; adding as phi arg to handlers.\n",
+ memoryKindNames[memoryKind], count, block->bbNum);
EHblkDsc* tryBlk = m_pCompiler->ehGetBlockExnFlowDsc(block);
while (true)
{
BasicBlock* handler = tryBlk->ExFlowBlock();
- // Is Heap live on entry to the handler?
- if (handler->bbHeapLiveIn)
+ // Is memoryKind live on entry to the handler?
+ if ((handler->bbMemoryLiveIn & memoryKindSet(memoryKind)) != 0)
{
- assert(handler->bbHeapSsaPhiFunc != nullptr);
+ assert(handler->bbMemorySsaPhiFunc != nullptr);
+
+ // Add "count" to the phi args of memoryKind.
+ BasicBlock::MemoryPhiArg*& handlerMemoryPhi = handler->bbMemorySsaPhiFunc[memoryKind];
+
+#if DEBUG
+ if (m_pCompiler->byrefStatesMatchGcHeapStates)
+ {
+ // When sharing phis for GcHeap and ByrefExposed, callers should ask to add phis
+ // for ByrefExposed only.
+ assert(memoryKind != GcHeap);
+ if (memoryKind == ByrefExposed)
+ {
+ // The GcHeap and ByrefExposed phi funcs should always be in sync.
+ assert(handlerMemoryPhi == handler->bbMemorySsaPhiFunc[GcHeap]);
+ }
+ }
+#endif
- // Add "count" to the phi args of Heap.
- if (handler->bbHeapSsaPhiFunc == BasicBlock::EmptyHeapPhiDef)
+ if (handlerMemoryPhi == BasicBlock::EmptyMemoryPhiDef)
{
- handler->bbHeapSsaPhiFunc = new (m_pCompiler) BasicBlock::HeapPhiArg(count);
+ handlerMemoryPhi = new (m_pCompiler) BasicBlock::MemoryPhiArg(count);
}
else
{
#ifdef DEBUG
- BasicBlock::HeapPhiArg* curArg = handler->bbHeapSsaPhiFunc;
+ BasicBlock::MemoryPhiArg* curArg = handler->bbMemorySsaPhiFunc[memoryKind];
while (curArg != nullptr)
{
assert(curArg->GetSsaNum() != count);
curArg = curArg->m_nextArg;
}
#endif // DEBUG
- handler->bbHeapSsaPhiFunc =
- new (m_pCompiler) BasicBlock::HeapPhiArg(count, handler->bbHeapSsaPhiFunc);
+ handlerMemoryPhi = new (m_pCompiler) BasicBlock::MemoryPhiArg(count, handlerMemoryPhi);
}
- DBG_SSA_JITDUMP(" Added phi arg u:%d for Heap to phi defn in handler block BB%02u.\n", count,
- handler->bbNum);
+ DBG_SSA_JITDUMP(" Added phi arg u:%d for %s to phi defn in handler block BB%02u.\n", count,
+ memoryKindNames[memoryKind], memoryKind, handler->bbNum);
+
+ if ((memoryKind == ByrefExposed) && m_pCompiler->byrefStatesMatchGcHeapStates)
+ {
+ // Share the phi between GcHeap and ByrefExposed.
+ handler->bbMemorySsaPhiFunc[GcHeap] = handlerMemoryPhi;
+ }
}
unsigned tryInd = tryBlk->ebdEnclosingTryIndex;
if (tryInd == EHblkDsc::NO_ENCLOSING_INDEX)
@@ -1221,19 +1300,33 @@ void SsaBuilder::BlockRenameVariables(BasicBlock* block, SsaRenameState* pRename
{
// Walk the statements of the block and rename the tree variables.
- // First handle the incoming Heap state.
-
- // Is there an Phi definition for heap at the start of this block?
- if (block->bbHeapSsaPhiFunc != nullptr)
+ // First handle the incoming memory states.
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- unsigned count = pRenameState->CountForHeapDef();
- pRenameState->PushHeap(block, count);
+ if ((memoryKind == GcHeap) && m_pCompiler->byrefStatesMatchGcHeapStates)
+ {
+ // ByrefExposed and GcHeap share any phi this block may have,
+ assert(block->bbMemorySsaPhiFunc[memoryKind] == block->bbMemorySsaPhiFunc[ByrefExposed]);
+ // so we will have already allocated a defnum for it if needed.
+ assert(memoryKind > ByrefExposed);
+ assert(pRenameState->CountForMemoryUse(memoryKind) == pRenameState->CountForMemoryUse(ByrefExposed));
+ }
+ else
+ {
+ // Is there an Phi definition for memoryKind at the start of this block?
+ if (block->bbMemorySsaPhiFunc[memoryKind] != nullptr)
+ {
+ unsigned count = pRenameState->CountForMemoryDef();
+ pRenameState->PushMemory(memoryKind, block, count);
- DBG_SSA_JITDUMP("Ssa # for Heap phi on entry to BB%02u is %d.\n", block->bbNum, count);
- }
+ DBG_SSA_JITDUMP("Ssa # for %s phi on entry to BB%02u is %d.\n", memoryKindNames[memoryKind],
+ block->bbNum, count);
+ }
+ }
- // Record the "in" Ssa # for Heap.
- block->bbHeapSsaNumIn = pRenameState->CountForHeapUse();
+ // Record the "in" Ssa # for memoryKind.
+ block->bbMemorySsaNumIn[memoryKind] = pRenameState->CountForMemoryUse(memoryKind);
+ }
// We need to iterate over phi definitions, to give them SSA names, but we need
// to know which are which, so we don't add phi definitions to handler phi arg lists.
@@ -1253,22 +1346,38 @@ void SsaBuilder::BlockRenameVariables(BasicBlock* block, SsaRenameState* pRename
}
}
- // Now handle the final heap state.
-
- // If the block defines Heap, allocate an SSA variable for the final heap state in the block.
- // (This may be redundant with the last SSA var explicitly created, but there's no harm in that.)
- if (block->bbHeapDef)
+ // Now handle the final memory states.
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- unsigned count = pRenameState->CountForHeapDef();
- pRenameState->PushHeap(block, count);
- AddHeapDefToHandlerPhis(block, count);
- }
+ MemoryKindSet memorySet = memoryKindSet(memoryKind);
+
+ // If the block defines memory, allocate an SSA variable for the final memory state in the block.
+ // (This may be redundant with the last SSA var explicitly created, but there's no harm in that.)
+ if ((memoryKind == GcHeap) && m_pCompiler->byrefStatesMatchGcHeapStates)
+ {
+ // We've already allocated the SSA num and propagated it to shared phis, if needed,
+ // when processing ByrefExposed.
+ assert(memoryKind > ByrefExposed);
+ assert(((block->bbMemoryDef & memorySet) != 0) ==
+ ((block->bbMemoryDef & memoryKindSet(ByrefExposed)) != 0));
+ assert(pRenameState->CountForMemoryUse(memoryKind) == pRenameState->CountForMemoryUse(ByrefExposed));
+ }
+ else
+ {
+ if ((block->bbMemoryDef & memorySet) != 0)
+ {
+ unsigned count = pRenameState->CountForMemoryDef();
+ pRenameState->PushMemory(memoryKind, block, count);
+ AddMemoryDefToHandlerPhis(memoryKind, block, count);
+ }
+ }
- // Record the "out" Ssa" # for Heap.
- block->bbHeapSsaNumOut = pRenameState->CountForHeapUse();
+ // Record the "out" Ssa" # for memoryKind.
+ block->bbMemorySsaNumOut[memoryKind] = pRenameState->CountForMemoryUse(memoryKind);
- DBG_SSA_JITDUMP("Ssa # for Heap on entry to BB%02u is %d; on exit is %d.\n", block->bbNum, block->bbHeapSsaNumIn,
- block->bbHeapSsaNumOut);
+ DBG_SSA_JITDUMP("Ssa # for %s on entry to BB%02u is %d; on exit is %d.\n", memoryKindNames[memoryKind],
+ block->bbNum, block->bbMemorySsaNumIn[memoryKind], block->bbMemorySsaNumOut[memoryKind]);
+ }
}
/**
@@ -1328,34 +1437,54 @@ void SsaBuilder::AssignPhiNodeRhsVariables(BasicBlock* block, SsaRenameState* pR
m_pCompiler->fgSetStmtSeq(stmt);
}
- // Now handle Heap.
- if (succ->bbHeapSsaPhiFunc != nullptr)
+ // Now handle memory.
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- if (succ->bbHeapSsaPhiFunc == BasicBlock::EmptyHeapPhiDef)
- {
- succ->bbHeapSsaPhiFunc = new (m_pCompiler) BasicBlock::HeapPhiArg(block);
- }
- else
+ BasicBlock::MemoryPhiArg*& succMemoryPhi = succ->bbMemorySsaPhiFunc[memoryKind];
+ if (succMemoryPhi != nullptr)
{
- BasicBlock::HeapPhiArg* curArg = succ->bbHeapSsaPhiFunc;
- bool found = false;
- // This is a quadratic algorithm. We might need to consider some switch over to a hash table
- // representation for the arguments of a phi node, to make this linear.
- while (curArg != nullptr)
+ if ((memoryKind == GcHeap) && m_pCompiler->byrefStatesMatchGcHeapStates)
{
- if (curArg->m_predBB == block)
- {
- found = true;
- break;
- }
- curArg = curArg->m_nextArg;
+ // We've already propagated the "out" number to the phi shared with ByrefExposed,
+ // but still need to update bbMemorySsaPhiFunc to be in sync between GcHeap and ByrefExposed.
+ assert(memoryKind > ByrefExposed);
+ assert(block->bbMemorySsaNumOut[memoryKind] == block->bbMemorySsaNumOut[ByrefExposed]);
+ assert((succ->bbMemorySsaPhiFunc[ByrefExposed] == succMemoryPhi) ||
+ (succ->bbMemorySsaPhiFunc[ByrefExposed]->m_nextArg ==
+ (succMemoryPhi == BasicBlock::EmptyMemoryPhiDef ? nullptr : succMemoryPhi)));
+ succMemoryPhi = succ->bbMemorySsaPhiFunc[ByrefExposed];
+
+ continue;
+ }
+
+ if (succMemoryPhi == BasicBlock::EmptyMemoryPhiDef)
+ {
+ succMemoryPhi = new (m_pCompiler) BasicBlock::MemoryPhiArg(block->bbMemorySsaNumOut[memoryKind]);
}
- if (!found)
+ else
{
- succ->bbHeapSsaPhiFunc = new (m_pCompiler) BasicBlock::HeapPhiArg(block, succ->bbHeapSsaPhiFunc);
+ BasicBlock::MemoryPhiArg* curArg = succMemoryPhi;
+ unsigned ssaNum = block->bbMemorySsaNumOut[memoryKind];
+ bool found = false;
+ // This is a quadratic algorithm. We might need to consider some switch over to a hash table
+ // representation for the arguments of a phi node, to make this linear.
+ while (curArg != nullptr)
+ {
+ if (curArg->m_ssaNum == ssaNum)
+ {
+ found = true;
+ break;
+ }
+ curArg = curArg->m_nextArg;
+ }
+ if (!found)
+ {
+ succMemoryPhi = new (m_pCompiler) BasicBlock::MemoryPhiArg(ssaNum, succMemoryPhi);
+ }
}
+ DBG_SSA_JITDUMP(" Added phi arg for %s u:%d from BB%02u in BB%02u.\n", memoryKindNames[memoryKind],
+ block->bbMemorySsaNumOut[memoryKind], block->bbNum, succ->bbNum);
}
- DBG_SSA_JITDUMP(" Added phi arg for Heap from BB%02u in BB%02u.\n", block->bbNum, succ->bbNum);
}
// If "succ" is the first block of a try block (and "block" is not also in that try block)
@@ -1461,28 +1590,44 @@ void SsaBuilder::AssignPhiNodeRhsVariables(BasicBlock* block, SsaRenameState* pR
}
}
- // Now handle Heap.
- if (handlerStart->bbHeapSsaPhiFunc != nullptr)
+ // Now handle memory.
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- if (handlerStart->bbHeapSsaPhiFunc == BasicBlock::EmptyHeapPhiDef)
- {
- handlerStart->bbHeapSsaPhiFunc = new (m_pCompiler) BasicBlock::HeapPhiArg(block);
- }
- else
+ BasicBlock::MemoryPhiArg*& handlerMemoryPhi = handlerStart->bbMemorySsaPhiFunc[memoryKind];
+ if (handlerMemoryPhi != nullptr)
{
-#ifdef DEBUG
- BasicBlock::HeapPhiArg* curArg = handlerStart->bbHeapSsaPhiFunc;
- while (curArg != nullptr)
+ if ((memoryKind == GcHeap) && m_pCompiler->byrefStatesMatchGcHeapStates)
{
- assert(curArg->m_predBB != block);
- curArg = curArg->m_nextArg;
+ // We've already added the arg to the phi shared with ByrefExposed if needed,
+ // but still need to update bbMemorySsaPhiFunc to stay in sync.
+ assert(memoryKind > ByrefExposed);
+ assert(block->bbMemorySsaNumOut[memoryKind] == block->bbMemorySsaNumOut[ByrefExposed]);
+ assert(handlerStart->bbMemorySsaPhiFunc[ByrefExposed]->m_ssaNum ==
+ block->bbMemorySsaNumOut[memoryKind]);
+ handlerMemoryPhi = handlerStart->bbMemorySsaPhiFunc[ByrefExposed];
+
+ continue;
}
-#endif // DEBUG
- handlerStart->bbHeapSsaPhiFunc =
- new (m_pCompiler) BasicBlock::HeapPhiArg(block, handlerStart->bbHeapSsaPhiFunc);
+
+ if (handlerMemoryPhi == BasicBlock::EmptyMemoryPhiDef)
+ {
+ handlerMemoryPhi =
+ new (m_pCompiler) BasicBlock::MemoryPhiArg(block->bbMemorySsaNumOut[memoryKind]);
+ }
+ else
+ {
+ // This path has a potential to introduce redundant phi args, due to multiple
+ // preds of the same try-begin block having the same live-out memory def, and/or
+ // due to nested try-begins each having preds with the same live-out memory def.
+ // Avoid doing quadratic processing on handler phis, and instead live with the
+ // occasional redundancy.
+ handlerMemoryPhi = new (m_pCompiler)
+ BasicBlock::MemoryPhiArg(block->bbMemorySsaNumOut[memoryKind], handlerMemoryPhi);
+ }
+ DBG_SSA_JITDUMP(" Added phi arg for %s u:%d from BB%02u in BB%02u.\n",
+ memoryKindNames[memoryKind], block->bbMemorySsaNumOut[memoryKind], block->bbNum,
+ handlerStart->bbNum);
}
- DBG_SSA_JITDUMP(" Added phi arg for Heap from BB%02u in BB%02u.\n", block->bbNum,
- handlerStart->bbNum);
}
tryInd = succTry->ebdEnclosingTryIndex;
@@ -1503,8 +1648,17 @@ void SsaBuilder::BlockPopStacks(BasicBlock* block, SsaRenameState* pRenameState)
// Pop the names given to the non-phi nodes.
pRenameState->PopBlockStacks(block);
- // And for Heap.
- pRenameState->PopBlockHeapStack(block);
+ // And for memory.
+ for (MemoryKind memoryKind : allMemoryKinds())
+ {
+ if ((memoryKind == GcHeap) && m_pCompiler->byrefStatesMatchGcHeapStates)
+ {
+ // GcHeap and ByrefExposed share a rename stack, so don't try
+ // to pop it a second time.
+ continue;
+ }
+ pRenameState->PopBlockMemoryStack(memoryKind, block);
+ }
}
/**
@@ -1553,20 +1707,32 @@ void SsaBuilder::RenameVariables(BlkToBlkSetMap* domTree, SsaRenameState* pRenam
pRenameState->Push(nullptr, i, count);
}
}
- // In ValueNum we'd assume un-inited heap gets FIRST_SSA_NUM.
- // The heap is a parameter. Use FIRST_SSA_NUM as first SSA name.
- unsigned initHeapCount = pRenameState->CountForHeapDef();
- assert(initHeapCount == SsaConfig::FIRST_SSA_NUM);
- pRenameState->PushHeap(m_pCompiler->fgFirstBB, initHeapCount);
-
- // Initialize the heap ssa numbers for unreachable blocks. ValueNum expects
- // heap ssa numbers to have some intitial value.
+
+ // In ValueNum we'd assume un-inited memory gets FIRST_SSA_NUM.
+ // The memory is a parameter. Use FIRST_SSA_NUM as first SSA name.
+ unsigned initMemoryCount = pRenameState->CountForMemoryDef();
+ assert(initMemoryCount == SsaConfig::FIRST_SSA_NUM);
+ for (MemoryKind memoryKind : allMemoryKinds())
+ {
+ if ((memoryKind == GcHeap) && m_pCompiler->byrefStatesMatchGcHeapStates)
+ {
+ // GcHeap shares its stack with ByrefExposed; don't re-push.
+ continue;
+ }
+ pRenameState->PushMemory(memoryKind, m_pCompiler->fgFirstBB, initMemoryCount);
+ }
+
+ // Initialize the memory ssa numbers for unreachable blocks. ValueNum expects
+ // memory ssa numbers to have some intitial value.
for (BasicBlock* block = m_pCompiler->fgFirstBB; block; block = block->bbNext)
{
if (block->bbIDom == nullptr)
{
- block->bbHeapSsaNumIn = initHeapCount;
- block->bbHeapSsaNumOut = initHeapCount;
+ for (MemoryKind memoryKind : allMemoryKinds())
+ {
+ block->bbMemorySsaNumIn[memoryKind] = initMemoryCount;
+ block->bbMemorySsaNumOut[memoryKind] = initMemoryCount;
+ }
}
}
@@ -1625,8 +1791,8 @@ void SsaBuilder::RenameVariables(BlkToBlkSetMap* domTree, SsaRenameState* pRenam
}
}
- // Remember the number of Heap SSA names.
- m_pCompiler->lvHeapNumSsaNames = pRenameState->HeapCount();
+ // Remember the number of memory SSA names.
+ m_pCompiler->lvMemoryNumSsaNames = pRenameState->MemoryCount();
}
#ifdef DEBUG
@@ -1733,7 +1899,7 @@ void SsaBuilder::Build()
// Rename local variables and collect UD information for each ssa var.
SsaRenameState* pRenameState = new (jitstd::utility::allocate<SsaRenameState>(m_allocator), jitstd::placement_t())
- SsaRenameState(m_allocator, m_pCompiler->lvaCount);
+ SsaRenameState(m_allocator, m_pCompiler->lvaCount, m_pCompiler->byrefStatesMatchGcHeapStates);
RenameVariables(domTree, pRenameState);
EndPhase(PHASE_BUILD_SSA_RENAME);
diff --git a/src/jit/ssabuilder.h b/src/jit/ssabuilder.h
index 2fff06573e..e82a4007e3 100644
--- a/src/jit/ssabuilder.h
+++ b/src/jit/ssabuilder.h
@@ -164,8 +164,8 @@ private:
// block of those handlers.
void AddDefToHandlerPhis(BasicBlock* block, unsigned lclNum, unsigned count);
- // Same as above, for "Heap".
- void AddHeapDefToHandlerPhis(BasicBlock* block, unsigned count);
+ // Same as above, for memory.
+ void AddMemoryDefToHandlerPhis(MemoryKind memoryKind, BasicBlock* block, unsigned count);
// Requires "block" to be non-NULL. Requires "pRenameState" to be non-NULL and be currently used
// for variables renaming. Assigns the rhs arguments to the phi, i.e., block's phi node arguments.
diff --git a/src/jit/ssarenamestate.cpp b/src/jit/ssarenamestate.cpp
index a1e05f192f..4ccac05a48 100644
--- a/src/jit/ssarenamestate.cpp
+++ b/src/jit/ssarenamestate.cpp
@@ -28,14 +28,17 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
*
* @params alloc The allocator class used to allocate jitstd data.
*/
-SsaRenameState::SsaRenameState(const jitstd::allocator<int>& alloc, unsigned lvaCount)
+SsaRenameState::SsaRenameState(const jitstd::allocator<int>& alloc,
+ unsigned lvaCount,
+ bool byrefStatesMatchGcHeapStates)
: counts(nullptr)
, stacks(nullptr)
, definedLocs(alloc)
- , heapStack(alloc)
- , heapCount(0)
+ , memoryStack(alloc)
+ , memoryCount(0)
, lvaCount(lvaCount)
, m_alloc(alloc)
+ , byrefStatesMatchGcHeapStates(byrefStatesMatchGcHeapStates)
{
}
@@ -200,11 +203,12 @@ void SsaRenameState::PopBlockStacks(BasicBlock* block)
#endif // DEBUG
}
-void SsaRenameState::PopBlockHeapStack(BasicBlock* block)
+void SsaRenameState::PopBlockMemoryStack(MemoryKind memoryKind, BasicBlock* block)
{
- while (heapStack.size() > 0 && heapStack.back().m_bb == block)
+ auto& stack = memoryStack[memoryKind];
+ while (stack.size() > 0 && stack.back().m_bb == block)
{
- heapStack.pop_back();
+ stack.pop_back();
}
}
diff --git a/src/jit/ssarenamestate.h b/src/jit/ssarenamestate.h
index 1db36c5b37..a8496b6386 100644
--- a/src/jit/ssarenamestate.h
+++ b/src/jit/ssarenamestate.h
@@ -23,6 +23,53 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include "jitstd.h"
+// Fixed-size array that can hold elements with no default constructor;
+// it will construct them all by forwarding whatever arguments are
+// supplied to its constructor.
+template <typename T, int N>
+class ConstructedArray
+{
+ union {
+ // Storage that gets used to hold the T objects.
+ unsigned char bytes[N * sizeof(T)];
+
+#if defined(_MSC_VER) && (_MSC_VER < 1900)
+ // With MSVC pre-VS2015, the code in the #else branch would hit error C2621,
+ // so in that case just count on pointer alignment being sufficient
+ // (currently T is only ever instantiated as jitstd::list<SsaRenameStateForBlock>)
+
+ // Unused (except to impart alignment requirement)
+ void* pointer;
+#else
+ // Unused (except to impart alignment requirement)
+ T alignedArray[N];
+#endif // defined(_MSC_VER) && (_MSC_VER < 1900)
+ };
+
+public:
+ T& operator[](size_t i)
+ {
+ return *(reinterpret_cast<T*>(bytes + i * sizeof(T)));
+ }
+
+ template <typename... Args>
+ ConstructedArray(Args&&... args)
+ {
+ for (int i = 0; i < N; ++i)
+ {
+ new (bytes + i * sizeof(T), jitstd::placement_t()) T(jitstd::forward<Args>(args)...);
+ }
+ }
+
+ ~ConstructedArray()
+ {
+ for (int i = 0; i < N; ++i)
+ {
+ operator[](i).~T();
+ }
+ }
+};
+
struct SsaRenameStateForBlock
{
BasicBlock* m_bb;
@@ -54,7 +101,7 @@ struct SsaRenameState
typedef unsigned* Counts;
typedef jitstd::list<SsaRenameStateLocDef> DefStack;
- SsaRenameState(const jitstd::allocator<int>& allocator, unsigned lvaCount);
+ SsaRenameState(const jitstd::allocator<int>& allocator, unsigned lvaCount, bool byrefStatesMatchGcHeapStates);
void EnsureCounts();
void EnsureStacks();
@@ -74,32 +121,42 @@ struct SsaRenameState
// Pop all stacks that have an entry for "bb" on top.
void PopBlockStacks(BasicBlock* bb);
- // Similar functions for the special implicit "Heap" variable.
- unsigned CountForHeapDef()
+ // Similar functions for the special implicit memory variable.
+ unsigned CountForMemoryDef()
{
- if (heapCount == 0)
+ if (memoryCount == 0)
{
- heapCount = SsaConfig::FIRST_SSA_NUM;
+ memoryCount = SsaConfig::FIRST_SSA_NUM;
}
- unsigned res = heapCount;
- heapCount++;
+ unsigned res = memoryCount;
+ memoryCount++;
return res;
}
- unsigned CountForHeapUse()
+ unsigned CountForMemoryUse(MemoryKind memoryKind)
{
- return heapStack.back().m_count;
+ if ((memoryKind == GcHeap) && byrefStatesMatchGcHeapStates)
+ {
+ // Share rename stacks in this configuration.
+ memoryKind = ByrefExposed;
+ }
+ return memoryStack[memoryKind].back().m_count;
}
- void PushHeap(BasicBlock* bb, unsigned count)
+ void PushMemory(MemoryKind memoryKind, BasicBlock* bb, unsigned count)
{
- heapStack.push_back(SsaRenameStateForBlock(bb, count));
+ if ((memoryKind == GcHeap) && byrefStatesMatchGcHeapStates)
+ {
+ // Share rename stacks in this configuration.
+ memoryKind = ByrefExposed;
+ }
+ memoryStack[memoryKind].push_back(SsaRenameStateForBlock(bb, count));
}
- void PopBlockHeapStack(BasicBlock* bb);
+ void PopBlockMemoryStack(MemoryKind memoryKind, BasicBlock* bb);
- unsigned HeapCount()
+ unsigned MemoryCount()
{
- return heapCount;
+ return memoryCount;
}
#ifdef DEBUG
@@ -117,13 +174,16 @@ private:
// This list represents the set of locals defined in the current block.
DefStack definedLocs;
- // Same state for the special implicit Heap variable.
- Stack heapStack;
- unsigned heapCount;
+ // Same state for the special implicit memory variables.
+ ConstructedArray<Stack, MemoryKindCount> memoryStack;
+ unsigned memoryCount;
// Number of stacks/counts to allocate.
unsigned lvaCount;
// Allocator to allocate stacks.
jitstd::allocator<void> m_alloc;
+
+ // Indicates whether GcHeap and ByrefExposed use the same state.
+ bool byrefStatesMatchGcHeapStates;
};
diff --git a/src/jit/stackfp.cpp b/src/jit/stackfp.cpp
index 43c463039e..3e0eceabb7 100644
--- a/src/jit/stackfp.cpp
+++ b/src/jit/stackfp.cpp
@@ -1376,7 +1376,7 @@ void CodeGen::genCodeForTreeStackFP_Asg(GenTreePtr tree)
emitAttr size;
unsigned offs;
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
assert(tree->OperGet() == GT_ASG);
@@ -1693,14 +1693,14 @@ void CodeGen::genCodeForTreeStackFP_Arithm(GenTreePtr tree)
if (tree->gtFlags & GTF_REVERSE_OPS)
{
bReverse = true;
- op1 = tree->gtGetOp2();
+ op1 = tree->gtGetOp2IfPresent();
op2 = tree->gtOp.gtOp1;
}
else
{
bReverse = false;
op1 = tree->gtOp.gtOp1;
- op2 = tree->gtGetOp2();
+ op2 = tree->gtGetOp2IfPresent();
}
regNumber result;
@@ -1928,7 +1928,7 @@ void CodeGen::genCodeForTreeStackFP_AsgArithm(GenTreePtr tree)
GenTreePtr op1, op2;
op1 = tree->gtOp.gtOp1;
- op2 = tree->gtGetOp2();
+ op2 = tree->gtGetOp2IfPresent();
genSetupForOpStackFP(op1, op2, (tree->gtFlags & GTF_REVERSE_OPS) ? true : false, true, false, true);
@@ -2208,7 +2208,7 @@ void CodeGen::genCodeForTreeStackFP_SmpOp(GenTreePtr tree)
case GT_COMMA:
{
GenTreePtr op1 = tree->gtOp.gtOp1;
- GenTreePtr op2 = tree->gtGetOp2();
+ GenTreePtr op2 = tree->gtGetOp2IfPresent();
if (tree->gtFlags & GTF_REVERSE_OPS)
{
diff --git a/src/jit/target.h b/src/jit/target.h
index a726525488..5b608ddfac 100644
--- a/src/jit/target.h
+++ b/src/jit/target.h
@@ -13,6 +13,13 @@
#endif
#endif
+// If the UNIX_X86_ABI is defined make sure that _TARGET_X86_ is also defined.
+#if defined(UNIX_X86_ABI)
+#if !defined(_TARGET_X86_)
+#error When UNIX_X86_ABI is defined you must define _TARGET_X86_ defined as well.
+#endif
+#endif
+
#if (defined(FEATURE_CORECLR) && defined(PLATFORM_UNIX))
#define FEATURE_VARARG 0
#else // !(defined(FEATURE_CORECLR) && defined(PLATFORM_UNIX))
@@ -402,7 +409,11 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
// target
#define FEATURE_EH 1 // To aid platform bring-up, eliminate exceptional EH clauses (catch, filter,
// filter-handler, fault) and directly execute 'finally' clauses.
+#if defined(FEATURE_PAL) && !defined(LEGACY_BACKEND)
+ #define FEATURE_EH_FUNCLETS 1
+#else // FEATURE_PAL && !LEGACY_BACKEND
#define FEATURE_EH_FUNCLETS 0
+#endif // FEATURE_PAL && !LEGACY_BACKEND
#define FEATURE_EH_CALLFINALLY_THUNKS 0 // Generate call-to-finally code in "thunks" in the enclosing EH region,
// protected by "cloned finally" clauses.
#ifndef LEGACY_BACKEND
@@ -484,9 +495,15 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
#define MIN_ARG_AREA_FOR_CALL 0 // Minimum required outgoing argument space for a call.
#define CODE_ALIGN 1 // code alignment requirement
+#if !defined(UNIX_X86_ABI)
#define STACK_ALIGN 4 // stack alignment requirement
#define STACK_ALIGN_SHIFT 2 // Shift-right amount to convert stack size in bytes to size in DWORD_PTRs
#define STACK_ALIGN_SHIFT_ALL 2 // Shift-right amount to convert stack size in bytes to size in STACK_ALIGN units
+#else
+ #define STACK_ALIGN 16 // stack alignment requirement
+ #define STACK_ALIGN_SHIFT 4 // Shift-right amount to convert stack size in bytes to size in DWORD_PTRs
+ #define STACK_ALIGN_SHIFT_ALL 4 // Shift-right amount to convert stack size in bytes to size in STACK_ALIGN units
+#endif // !UNIX_X86_ABI
#define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_ESI|RBM_EDI)
#define RBM_INT_CALLEE_TRASH (RBM_EAX|RBM_ECX|RBM_EDX)
@@ -1226,6 +1243,7 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
#define RBM_CALLEE_SAVED (RBM_INT_CALLEE_SAVED | RBM_FLT_CALLEE_SAVED)
#define RBM_CALLEE_TRASH (RBM_INT_CALLEE_TRASH | RBM_FLT_CALLEE_TRASH)
#define RBM_CALLEE_TRASH_NOGC (RBM_R2|RBM_R3|RBM_LR)
+ #define REG_DEFAULT_HELPER_CALL_TARGET REG_R12
#define RBM_ALLINT (RBM_INT_CALLEE_SAVED | RBM_INT_CALLEE_TRASH)
#define RBM_ALLFLOAT (RBM_FLT_CALLEE_SAVED | RBM_FLT_CALLEE_TRASH)
@@ -1433,6 +1451,8 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
#define REG_ARG_FIRST REG_R0
#define REG_ARG_LAST REG_R3
+ #define REG_ARG_FP_FIRST REG_F0
+ #define REG_ARG_FP_LAST REG_F7
#define INIT_ARG_STACK_SLOT 0 // No outgoing reserved stack slots
#define REG_ARG_0 REG_R0
diff --git a/src/jit/unwind.cpp b/src/jit/unwind.cpp
index 4568fed75a..b354504bb7 100644
--- a/src/jit/unwind.cpp
+++ b/src/jit/unwind.cpp
@@ -132,37 +132,7 @@ void Compiler::unwindGetFuncLocations(FuncInfoDsc* func,
#elif defined(_TARGET_X86_)
-// Stub routines that do nothing
-void Compiler::unwindBegProlog()
-{
-}
-void Compiler::unwindEndProlog()
-{
-}
-void Compiler::unwindBegEpilog()
-{
-}
-void Compiler::unwindEndEpilog()
-{
-}
-void Compiler::unwindReserve()
-{
-}
-void Compiler::unwindEmit(void* pHotCode, void* pColdCode)
-{
-}
-void Compiler::unwindPush(regNumber reg)
-{
-}
-void Compiler::unwindAllocStack(unsigned size)
-{
-}
-void Compiler::unwindSetFrameReg(regNumber reg, unsigned offset)
-{
-}
-void Compiler::unwindSaveReg(regNumber reg, unsigned offset)
-{
-}
+// See unwindX86.cpp
#else // _TARGET_*
diff --git a/src/jit/unwindx86.cpp b/src/jit/unwindx86.cpp
new file mode 100644
index 0000000000..516155c6a2
--- /dev/null
+++ b/src/jit/unwindx86.cpp
@@ -0,0 +1,249 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XX XX
+XX UnwindInfo XX
+XX XX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+*/
+
+#include "jitpch.h"
+#ifdef _MSC_VER
+#pragma hdrstop
+#endif
+
+#ifndef _TARGET_X86_
+#error "This should be included only for x86"
+#endif // _TARGET_X86_
+
+void Compiler::unwindBegProlog()
+{
+}
+
+void Compiler::unwindEndProlog()
+{
+}
+
+void Compiler::unwindBegEpilog()
+{
+}
+
+void Compiler::unwindEndEpilog()
+{
+}
+
+void Compiler::unwindPush(regNumber reg)
+{
+}
+
+void Compiler::unwindAllocStack(unsigned size)
+{
+}
+
+void Compiler::unwindSetFrameReg(regNumber reg, unsigned offset)
+{
+}
+
+void Compiler::unwindSaveReg(regNumber reg, unsigned offset)
+{
+}
+
+//------------------------------------------------------------------------
+// Compiler::unwindReserve: Ask the VM to reserve space for the unwind information
+// for the function and all its funclets. Called once, just before asking the VM
+// for memory and emitting the generated code. Calls unwindReserveFunc() to handle
+// the main function and each of the funclets, in turn.
+//
+void Compiler::unwindReserve()
+{
+#if FEATURE_EH_FUNCLETS
+ assert(!compGeneratingProlog);
+ assert(!compGeneratingEpilog);
+
+ assert(compFuncInfoCount > 0);
+ for (unsigned funcIdx = 0; funcIdx < compFuncInfoCount; funcIdx++)
+ {
+ unwindReserveFunc(funGetFunc(funcIdx));
+ }
+#endif
+}
+
+//------------------------------------------------------------------------
+// Compiler::unwindEmit: Report all the unwind information to the VM.
+//
+// Arguments:
+// pHotCode - Pointer to the beginning of the memory with the function and funclet hot code.
+// pColdCode - Pointer to the beginning of the memory with the function and funclet cold code.
+//
+void Compiler::unwindEmit(void* pHotCode, void* pColdCode)
+{
+#if FEATURE_EH_FUNCLETS
+ assert(!compGeneratingProlog);
+ assert(!compGeneratingEpilog);
+
+ assert(compFuncInfoCount > 0);
+ for (unsigned funcIdx = 0; funcIdx < compFuncInfoCount; funcIdx++)
+ {
+ unwindEmitFunc(funGetFunc(funcIdx), pHotCode, pColdCode);
+ }
+#endif // FEATURE_EH_FUNCLETS
+}
+
+#if FEATURE_EH_FUNCLETS
+//------------------------------------------------------------------------
+// Compiler::unwindReserveFunc: Reserve the unwind information from the VM for a
+// given main function or funclet.
+//
+// Arguments:
+// func - The main function or funclet to reserve unwind info for.
+//
+void Compiler::unwindReserveFunc(FuncInfoDsc* func)
+{
+ unwindReserveFuncHelper(func, true);
+
+ if (fgFirstColdBlock != nullptr)
+ {
+ unwindReserveFuncHelper(func, false);
+ }
+}
+
+//------------------------------------------------------------------------
+// Compiler::unwindReserveFuncHelper: Reserve the unwind information from the VM for a
+// given main function or funclet, for either the hot or the cold section.
+//
+// Arguments:
+// func - The main function or funclet to reserve unwind info for.
+// isHotCode - 'true' to reserve the hot section, 'false' to reserve the cold section.
+//
+void Compiler::unwindReserveFuncHelper(FuncInfoDsc* func, bool isHotCode)
+{
+ BOOL isFunclet = (func->funKind != FUNC_ROOT);
+ BOOL isColdCode = isHotCode ? FALSE : TRUE;
+
+ eeReserveUnwindInfo(isFunclet, isColdCode, sizeof(UNWIND_INFO));
+}
+
+//------------------------------------------------------------------------
+// Compiler::unwindEmitFunc: Report the unwind information to the VM for a
+// given main function or funclet. Reports the hot section, then the cold
+// section if necessary.
+//
+// Arguments:
+// func - The main function or funclet to reserve unwind info for.
+// pHotCode - Pointer to the beginning of the memory with the function and funclet hot code.
+// pColdCode - Pointer to the beginning of the memory with the function and funclet cold code.
+//
+void Compiler::unwindEmitFunc(FuncInfoDsc* func, void* pHotCode, void* pColdCode)
+{
+ // Verify that the JIT enum is in sync with the JIT-EE interface enum
+ static_assert_no_msg(FUNC_ROOT == (FuncKind)CORJIT_FUNC_ROOT);
+ static_assert_no_msg(FUNC_HANDLER == (FuncKind)CORJIT_FUNC_HANDLER);
+ static_assert_no_msg(FUNC_FILTER == (FuncKind)CORJIT_FUNC_FILTER);
+
+ unwindEmitFuncHelper(func, pHotCode, pColdCode, true);
+
+ if (pColdCode != nullptr)
+ {
+ unwindEmitFuncHelper(func, pHotCode, pColdCode, false);
+ }
+}
+
+//------------------------------------------------------------------------
+// Compiler::unwindEmitFuncHelper: Report the unwind information to the VM for a
+// given main function or funclet, for either the hot or cold section.
+//
+// Arguments:
+// func - The main function or funclet to reserve unwind info for.
+// pHotCode - Pointer to the beginning of the memory with the function and funclet hot code.
+// pColdCode - Pointer to the beginning of the memory with the function and funclet cold code.
+// Ignored if 'isHotCode' is true.
+// isHotCode - 'true' to report the hot section, 'false' to report the cold section.
+//
+void Compiler::unwindEmitFuncHelper(FuncInfoDsc* func, void* pHotCode, void* pColdCode, bool isHotCode)
+{
+ UNATIVE_OFFSET startOffset;
+ UNATIVE_OFFSET endOffset;
+
+ if (isHotCode)
+ {
+ emitLocation* startLoc;
+ emitLocation* endLoc;
+
+ unwindGetFuncLocations(func, true, &startLoc, &endLoc);
+
+ if (startLoc == nullptr)
+ {
+ startOffset = 0;
+ }
+ else
+ {
+ startOffset = startLoc->CodeOffset(genEmitter);
+ }
+
+ if (endLoc == nullptr)
+ {
+ endOffset = info.compNativeCodeSize;
+ }
+ else
+ {
+ endOffset = endLoc->CodeOffset(genEmitter);
+ }
+ }
+ else
+ {
+ emitLocation* coldStartLoc;
+ emitLocation* coldEndLoc;
+
+ assert(fgFirstColdBlock != nullptr);
+ assert(func->funKind == FUNC_ROOT); // No splitting of funclets.
+
+ unwindGetFuncLocations(func, false, &coldStartLoc, &coldEndLoc);
+
+ if (coldStartLoc == nullptr)
+ {
+ startOffset = 0;
+ }
+ else
+ {
+ startOffset = coldStartLoc->CodeOffset(genEmitter);
+ }
+
+ if (coldEndLoc == nullptr)
+ {
+ endOffset = info.compNativeCodeSize;
+ }
+ else
+ {
+ endOffset = coldEndLoc->CodeOffset(genEmitter);
+ }
+ }
+
+ // Adjust for cold or hot code:
+ // 1. The VM doesn't want the cold code pointer unless this is cold code.
+ // 2. The startOffset and endOffset need to be from the base of the hot section for hot code
+ // and from the base of the cold section for cold code
+
+ if (isHotCode)
+ {
+ assert(endOffset <= info.compTotalHotCodeSize);
+ pColdCode = nullptr;
+ }
+ else
+ {
+ assert(startOffset >= info.compTotalHotCodeSize);
+ startOffset -= info.compTotalHotCodeSize;
+ endOffset -= info.compTotalHotCodeSize;
+ }
+
+ UNWIND_INFO unwindInfo;
+
+ unwindInfo.FunctionLength = (ULONG)(endOffset - startOffset);
+
+ eeAllocUnwindInfo((BYTE*)pHotCode, (BYTE*)pColdCode, startOffset, endOffset, sizeof(UNWIND_INFO),
+ (BYTE*)&unwindInfo, (CorJitFuncKind)func->funKind);
+}
+#endif // FEATURE_EH_FUNCLETS
diff --git a/src/jit/valuenum.cpp b/src/jit/valuenum.cpp
index f7cc0c9a23..aba29c4411 100644
--- a/src/jit/valuenum.cpp
+++ b/src/jit/valuenum.cpp
@@ -1373,10 +1373,10 @@ TailCall:
goto TailCall;
}
}
- else if (funcApp.m_func == VNF_PhiDef || funcApp.m_func == VNF_PhiHeapDef)
+ else if (funcApp.m_func == VNF_PhiDef || funcApp.m_func == VNF_PhiMemoryDef)
{
- unsigned lclNum = BAD_VAR_NUM;
- bool isHeap = false;
+ unsigned lclNum = BAD_VAR_NUM;
+ bool isMemory = false;
VNFuncApp phiFuncApp;
bool defArgIsFunc = false;
if (funcApp.m_func == VNF_PhiDef)
@@ -1386,8 +1386,8 @@ TailCall:
}
else
{
- assert(funcApp.m_func == VNF_PhiHeapDef);
- isHeap = true;
+ assert(funcApp.m_func == VNF_PhiMemoryDef);
+ isMemory = true;
defArgIsFunc = GetVNFunc(funcApp.m_args[1], &phiFuncApp);
}
if (defArgIsFunc && phiFuncApp.m_func == VNF_Phi)
@@ -1401,9 +1401,9 @@ TailCall:
assert(IsVNConstant(phiFuncApp.m_args[0]));
unsigned phiArgSsaNum = ConstantValue<unsigned>(phiFuncApp.m_args[0]);
ValueNum phiArgVN;
- if (isHeap)
+ if (isMemory)
{
- phiArgVN = m_pComp->GetHeapPerSsaData(phiArgSsaNum)->m_vnPair.Get(vnk);
+ phiArgVN = m_pComp->GetMemoryPerSsaData(phiArgSsaNum)->m_vnPair.Get(vnk);
}
else
{
@@ -1430,9 +1430,9 @@ TailCall:
}
assert(IsVNConstant(cur));
phiArgSsaNum = ConstantValue<unsigned>(cur);
- if (isHeap)
+ if (isMemory)
{
- phiArgVN = m_pComp->GetHeapPerSsaData(phiArgSsaNum)->m_vnPair.Get(vnk);
+ phiArgVN = m_pComp->GetMemoryPerSsaData(phiArgSsaNum)->m_vnPair.Get(vnk);
}
else
{
@@ -2465,9 +2465,10 @@ ValueNum ValueNumStore::VNApplySelectorsAssignTypeCoerce(ValueNum elem, var_type
//------------------------------------------------------------------------
// VNApplySelectorsAssign: Compute the value number corresponding to "map" but with
-// the element at "fieldSeq" updated to have type "elem"; this is the new heap
-// value for an assignment of value "elem" into the heap at location "fieldSeq"
-// that occurs in block "block" and has type "indType".
+// the element at "fieldSeq" updated to have type "elem"; this is the new memory
+// value for an assignment of value "elem" into the memory at location "fieldSeq"
+// that occurs in block "block" and has type "indType" (so long as the selectors
+// into that memory occupy disjoint locations, which is true for GcHeap).
//
// Arguments:
// vnk - Identifies whether to recurse to Conservative or Liberal value numbers
@@ -2478,7 +2479,7 @@ ValueNum ValueNumStore::VNApplySelectorsAssignTypeCoerce(ValueNum elem, var_type
// block - Block where the assignment occurs
//
// Return Value:
-// The value number corresopnding to the heap after the assignment.
+// The value number corresponding to memory after the assignment.
ValueNum ValueNumStore::VNApplySelectorsAssign(
ValueNumKind vnk, ValueNum map, FieldSeqNode* fieldSeq, ValueNum elem, var_types indType, BasicBlock* block)
@@ -2712,17 +2713,17 @@ ValueNum ValueNumStore::ExtendPtrVN(GenTreePtr opA, FieldSeqNode* fldSeq)
return res;
}
-void Compiler::fgValueNumberArrIndexAssign(CORINFO_CLASS_HANDLE elemTypeEq,
- ValueNum arrVN,
- ValueNum inxVN,
- FieldSeqNode* fldSeq,
- ValueNum rhsVN,
- var_types indType)
+ValueNum Compiler::fgValueNumberArrIndexAssign(CORINFO_CLASS_HANDLE elemTypeEq,
+ ValueNum arrVN,
+ ValueNum inxVN,
+ FieldSeqNode* fldSeq,
+ ValueNum rhsVN,
+ var_types indType)
{
bool invalidateArray = false;
ValueNum elemTypeEqVN = vnStore->VNForHandle(ssize_t(elemTypeEq), GTF_ICON_CLASS_HDL);
var_types arrElemType = DecodeElemType(elemTypeEq);
- ValueNum hAtArrType = vnStore->VNForMapSelect(VNK_Liberal, TYP_REF, fgCurHeapVN, elemTypeEqVN);
+ ValueNum hAtArrType = vnStore->VNForMapSelect(VNK_Liberal, TYP_REF, fgCurMemoryVN[GcHeap], elemTypeEqVN);
ValueNum hAtArrTypeAtArr = vnStore->VNForMapSelect(VNK_Liberal, TYP_REF, hAtArrType, arrVN);
ValueNum hAtArrTypeAtArrAtInx = vnStore->VNForMapSelect(VNK_Liberal, arrElemType, hAtArrTypeAtArr, inxVN);
@@ -2779,7 +2780,7 @@ void Compiler::fgValueNumberArrIndexAssign(CORINFO_CLASS_HANDLE elemTypeEq,
#ifdef DEBUG
if (verbose)
{
- printf(" hAtArrType " STR_VN "%x is MapSelect(curHeap(" STR_VN "%x), ", hAtArrType, fgCurHeapVN);
+ printf(" hAtArrType " STR_VN "%x is MapSelect(curGcHeap(" STR_VN "%x), ", hAtArrType, fgCurMemoryVN[GcHeap]);
if (arrElemType == TYP_STRUCT)
{
@@ -2809,14 +2810,11 @@ void Compiler::fgValueNumberArrIndexAssign(CORINFO_CLASS_HANDLE elemTypeEq,
vnStore->vnDump(this, newValAtArrType);
printf("\n");
- printf(" fgCurHeapVN assigned:\n");
+ printf(" fgCurMemoryVN assigned:\n");
}
#endif // DEBUG
- // bbHeapDef must be set to true for any block that Mutates the global Heap
- assert(compCurBB->bbHeapDef);
-
- fgCurHeapVN = vnStore->VNForMapStore(TYP_REF, fgCurHeapVN, elemTypeEqVN, newValAtArrType);
+ return vnStore->VNForMapStore(TYP_REF, fgCurMemoryVN[GcHeap], elemTypeEqVN, newValAtArrType);
}
ValueNum Compiler::fgValueNumberArrIndexVal(GenTreePtr tree, VNFuncApp* pFuncApp, ValueNum addrXvn)
@@ -2869,14 +2867,15 @@ ValueNum Compiler::fgValueNumberArrIndexVal(GenTreePtr tree,
else
{
ValueNum elemTypeEqVN = vnStore->VNForHandle(ssize_t(elemTypeEq), GTF_ICON_CLASS_HDL);
- ValueNum hAtArrType = vnStore->VNForMapSelect(VNK_Liberal, TYP_REF, fgCurHeapVN, elemTypeEqVN);
+ ValueNum hAtArrType = vnStore->VNForMapSelect(VNK_Liberal, TYP_REF, fgCurMemoryVN[GcHeap], elemTypeEqVN);
ValueNum hAtArrTypeAtArr = vnStore->VNForMapSelect(VNK_Liberal, TYP_REF, hAtArrType, arrVN);
ValueNum wholeElem = vnStore->VNForMapSelect(VNK_Liberal, elemTyp, hAtArrTypeAtArr, inxVN);
#ifdef DEBUG
if (verbose)
{
- printf(" hAtArrType " STR_VN "%x is MapSelect(curHeap(" STR_VN "%x), ", hAtArrType, fgCurHeapVN);
+ printf(" hAtArrType " STR_VN "%x is MapSelect(curGcHeap(" STR_VN "%x), ", hAtArrType,
+ fgCurMemoryVN[GcHeap]);
if (elemTyp == TYP_STRUCT)
{
printf("%s[]).\n", eeGetClassName(elemTypeEq));
@@ -2923,6 +2922,17 @@ ValueNum Compiler::fgValueNumberArrIndexVal(GenTreePtr tree,
return selectedElem;
}
+ValueNum Compiler::fgValueNumberByrefExposedLoad(var_types type, ValueNum pointerVN)
+{
+ ValueNum memoryVN = fgCurMemoryVN[ByrefExposed];
+ // The memoization for VNFunc applications does not factor in the result type, so
+ // VNF_ByrefExposedLoad takes the loaded type as an explicit parameter.
+ ValueNum typeVN = vnStore->VNForIntCon(type);
+ ValueNum loadVN = vnStore->VNForFunc(type, VNF_ByrefExposedLoad, typeVN, vnStore->VNNormVal(pointerVN), memoryVN);
+
+ return loadVN;
+}
+
var_types ValueNumStore::TypeOfVN(ValueNum vn)
{
if (vn == NoVN)
@@ -4200,10 +4210,10 @@ void Compiler::fgValueNumber()
else
{
ValueNumPair noVnp;
- // Make sure the heap SSA names have no value numbers.
- for (unsigned i = 0; i < lvHeapNumSsaNames; i++)
+ // Make sure the memory SSA names have no value numbers.
+ for (unsigned i = 0; i < lvMemoryNumSsaNames; i++)
{
- lvHeapPerSsaData.GetRef(i).m_vnPair = noVnp;
+ lvMemoryPerSsaData.GetRef(i).m_vnPair = noVnp;
}
for (BasicBlock* blk = fgFirstBB; blk != nullptr; blk = blk->bbNext)
{
@@ -4309,13 +4319,13 @@ void Compiler::fgValueNumber()
ssaDef->m_defLoc.m_blk = fgFirstBB;
}
}
- // Give "Heap" an initial value number (about which we know nothing).
- ValueNum heapInitVal = vnStore->VNForFunc(TYP_REF, VNF_InitVal, vnStore->VNForIntCon(-1)); // Use -1 for the heap.
- GetHeapPerSsaData(SsaConfig::FIRST_SSA_NUM)->m_vnPair.SetBoth(heapInitVal);
+ // Give memory an initial value number (about which we know nothing).
+ ValueNum memoryInitVal = vnStore->VNForFunc(TYP_REF, VNF_InitVal, vnStore->VNForIntCon(-1)); // Use -1 for memory.
+ GetMemoryPerSsaData(SsaConfig::FIRST_SSA_NUM)->m_vnPair.SetBoth(memoryInitVal);
#ifdef DEBUG
if (verbose)
{
- printf("Heap Initial Value in BB01 is: " STR_VN "%x\n", heapInitVal);
+ printf("Memory Initial Value in BB01 is: " STR_VN "%x\n", memoryInitVal);
}
#endif // DEBUG
@@ -4329,7 +4339,7 @@ void Compiler::fgValueNumber()
while (vs.m_toDoAllPredsDone.Size() > 0)
{
BasicBlock* toDo = vs.m_toDoAllPredsDone.Pop();
- fgValueNumberBlock(toDo, /*newVNsForPhis*/ false);
+ fgValueNumberBlock(toDo);
// Record that we've visited "toDo", and add successors to the right sets.
vs.FinishVisit(toDo);
}
@@ -4344,7 +4354,7 @@ void Compiler::fgValueNumber()
continue; // We may have run out, because of completed blocks on the not-all-preds done list.
}
- fgValueNumberBlock(toDo, /*newVNsForPhis*/ true);
+ fgValueNumberBlock(toDo);
// Record that we've visited "toDo", and add successors to the right sest.
vs.FinishVisit(toDo);
}
@@ -4357,7 +4367,7 @@ void Compiler::fgValueNumber()
fgVNPassesCompleted++;
}
-void Compiler::fgValueNumberBlock(BasicBlock* blk, bool newVNsForPhis)
+void Compiler::fgValueNumberBlock(BasicBlock* blk)
{
compCurBB = blk;
@@ -4488,75 +4498,93 @@ void Compiler::fgValueNumberBlock(BasicBlock* blk, bool newVNsForPhis)
}
}
- // Now do the same for "Heap".
- // Is there a phi for this block?
- if (blk->bbHeapSsaPhiFunc == nullptr)
+ // Now do the same for each MemoryKind.
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- fgCurHeapVN = GetHeapPerSsaData(blk->bbHeapSsaNumIn)->m_vnPair.GetLiberal();
- assert(fgCurHeapVN != ValueNumStore::NoVN);
- }
- else
- {
- unsigned loopNum;
- ValueNum newHeapVN;
- if (optBlockIsLoopEntry(blk, &loopNum))
+ // Is there a phi for this block?
+ if (blk->bbMemorySsaPhiFunc[memoryKind] == nullptr)
{
- newHeapVN = fgHeapVNForLoopSideEffects(blk, loopNum);
+ fgCurMemoryVN[memoryKind] = GetMemoryPerSsaData(blk->bbMemorySsaNumIn[memoryKind])->m_vnPair.GetLiberal();
+ assert(fgCurMemoryVN[memoryKind] != ValueNumStore::NoVN);
}
else
{
- // Are all the VN's the same?
- BasicBlock::HeapPhiArg* phiArgs = blk->bbHeapSsaPhiFunc;
- assert(phiArgs != BasicBlock::EmptyHeapPhiDef);
- // There should be > 1 args to a phi.
- assert(phiArgs->m_nextArg != nullptr);
- ValueNum phiAppVN = vnStore->VNForIntCon(phiArgs->GetSsaNum());
- JITDUMP(" Building phi application: $%x = SSA# %d.\n", phiAppVN, phiArgs->GetSsaNum());
- bool allSame = true;
- ValueNum sameVN = GetHeapPerSsaData(phiArgs->GetSsaNum())->m_vnPair.GetLiberal();
- if (sameVN == ValueNumStore::NoVN)
+ if ((memoryKind == ByrefExposed) && byrefStatesMatchGcHeapStates)
{
- allSame = false;
+ // The update for GcHeap will copy its result to ByrefExposed.
+ assert(memoryKind < GcHeap);
+ assert(blk->bbMemorySsaPhiFunc[memoryKind] == blk->bbMemorySsaPhiFunc[GcHeap]);
+ continue;
}
- phiArgs = phiArgs->m_nextArg;
- while (phiArgs != nullptr)
+
+ unsigned loopNum;
+ ValueNum newMemoryVN;
+ if (optBlockIsLoopEntry(blk, &loopNum))
{
- ValueNum phiArgVN = GetHeapPerSsaData(phiArgs->GetSsaNum())->m_vnPair.GetLiberal();
- if (phiArgVN == ValueNumStore::NoVN || phiArgVN != sameVN)
+ newMemoryVN = fgMemoryVNForLoopSideEffects(memoryKind, blk, loopNum);
+ }
+ else
+ {
+ // Are all the VN's the same?
+ BasicBlock::MemoryPhiArg* phiArgs = blk->bbMemorySsaPhiFunc[memoryKind];
+ assert(phiArgs != BasicBlock::EmptyMemoryPhiDef);
+ // There should be > 1 args to a phi.
+ assert(phiArgs->m_nextArg != nullptr);
+ ValueNum phiAppVN = vnStore->VNForIntCon(phiArgs->GetSsaNum());
+ JITDUMP(" Building phi application: $%x = SSA# %d.\n", phiAppVN, phiArgs->GetSsaNum());
+ bool allSame = true;
+ ValueNum sameVN = GetMemoryPerSsaData(phiArgs->GetSsaNum())->m_vnPair.GetLiberal();
+ if (sameVN == ValueNumStore::NoVN)
{
allSame = false;
}
+ phiArgs = phiArgs->m_nextArg;
+ while (phiArgs != nullptr)
+ {
+ ValueNum phiArgVN = GetMemoryPerSsaData(phiArgs->GetSsaNum())->m_vnPair.GetLiberal();
+ if (phiArgVN == ValueNumStore::NoVN || phiArgVN != sameVN)
+ {
+ allSame = false;
+ }
#ifdef DEBUG
- ValueNum oldPhiAppVN = phiAppVN;
+ ValueNum oldPhiAppVN = phiAppVN;
#endif
- unsigned phiArgSSANum = phiArgs->GetSsaNum();
- ValueNum phiArgSSANumVN = vnStore->VNForIntCon(phiArgSSANum);
- JITDUMP(" Building phi application: $%x = SSA# %d.\n", phiArgSSANumVN, phiArgSSANum);
- phiAppVN = vnStore->VNForFunc(TYP_REF, VNF_Phi, phiArgSSANumVN, phiAppVN);
- JITDUMP(" Building phi application: $%x = phi($%x, $%x).\n", phiAppVN, phiArgSSANumVN, oldPhiAppVN);
- phiArgs = phiArgs->m_nextArg;
- }
- if (allSame)
- {
- newHeapVN = sameVN;
+ unsigned phiArgSSANum = phiArgs->GetSsaNum();
+ ValueNum phiArgSSANumVN = vnStore->VNForIntCon(phiArgSSANum);
+ JITDUMP(" Building phi application: $%x = SSA# %d.\n", phiArgSSANumVN, phiArgSSANum);
+ phiAppVN = vnStore->VNForFunc(TYP_REF, VNF_Phi, phiArgSSANumVN, phiAppVN);
+ JITDUMP(" Building phi application: $%x = phi($%x, $%x).\n", phiAppVN, phiArgSSANumVN,
+ oldPhiAppVN);
+ phiArgs = phiArgs->m_nextArg;
+ }
+ if (allSame)
+ {
+ newMemoryVN = sameVN;
+ }
+ else
+ {
+ newMemoryVN =
+ vnStore->VNForFunc(TYP_REF, VNF_PhiMemoryDef, vnStore->VNForHandle(ssize_t(blk), 0), phiAppVN);
+ }
}
- else
+ GetMemoryPerSsaData(blk->bbMemorySsaNumIn[memoryKind])->m_vnPair.SetLiberal(newMemoryVN);
+ fgCurMemoryVN[memoryKind] = newMemoryVN;
+ if ((memoryKind == GcHeap) && byrefStatesMatchGcHeapStates)
{
- newHeapVN =
- vnStore->VNForFunc(TYP_REF, VNF_PhiHeapDef, vnStore->VNForHandle(ssize_t(blk), 0), phiAppVN);
+ // Keep the CurMemoryVNs in sync
+ fgCurMemoryVN[ByrefExposed] = newMemoryVN;
}
}
- GetHeapPerSsaData(blk->bbHeapSsaNumIn)->m_vnPair.SetLiberal(newHeapVN);
- fgCurHeapVN = newHeapVN;
- }
#ifdef DEBUG
- if (verbose)
- {
- printf("The SSA definition for heap (#%d) at start of BB%02u is ", blk->bbHeapSsaNumIn, blk->bbNum);
- vnPrint(fgCurHeapVN, 1);
- printf("\n");
- }
+ if (verbose)
+ {
+ printf("The SSA definition for %s (#%d) at start of BB%02u is ", memoryKindNames[memoryKind],
+ blk->bbMemorySsaNumIn[memoryKind], blk->bbNum);
+ vnPrint(fgCurMemoryVN[memoryKind], 1);
+ printf("\n");
+ }
#endif // DEBUG
+ }
// Now iterate over the remaining statements, and their trees.
for (GenTreePtr stmt = firstNonPhi; stmt != nullptr; stmt = stmt->gtNext)
@@ -4592,15 +4620,30 @@ void Compiler::fgValueNumberBlock(BasicBlock* blk, bool newVNsForPhis)
#endif
}
- if (blk->bbHeapSsaNumOut != blk->bbHeapSsaNumIn)
+ for (MemoryKind memoryKind : allMemoryKinds())
{
- GetHeapPerSsaData(blk->bbHeapSsaNumOut)->m_vnPair.SetLiberal(fgCurHeapVN);
+ if ((memoryKind == GcHeap) && byrefStatesMatchGcHeapStates)
+ {
+ // The update to the shared SSA data will have already happened for ByrefExposed.
+ assert(memoryKind > ByrefExposed);
+ assert(blk->bbMemorySsaNumOut[memoryKind] == blk->bbMemorySsaNumOut[ByrefExposed]);
+ assert(GetMemoryPerSsaData(blk->bbMemorySsaNumOut[memoryKind])->m_vnPair.GetLiberal() ==
+ fgCurMemoryVN[memoryKind]);
+ continue;
+ }
+
+ if (blk->bbMemorySsaNumOut[memoryKind] != blk->bbMemorySsaNumIn[memoryKind])
+ {
+ GetMemoryPerSsaData(blk->bbMemorySsaNumOut[memoryKind])->m_vnPair.SetLiberal(fgCurMemoryVN[memoryKind]);
+ }
}
compCurBB = nullptr;
}
-ValueNum Compiler::fgHeapVNForLoopSideEffects(BasicBlock* entryBlock, unsigned innermostLoopNum)
+ValueNum Compiler::fgMemoryVNForLoopSideEffects(MemoryKind memoryKind,
+ BasicBlock* entryBlock,
+ unsigned innermostLoopNum)
{
// "loopNum" is the innermost loop for which "blk" is the entry; find the outermost one.
assert(innermostLoopNum != BasicBlock::NOT_IN_LOOP);
@@ -4619,27 +4662,27 @@ ValueNum Compiler::fgHeapVNForLoopSideEffects(BasicBlock* entryBlock, unsigned i
#ifdef DEBUG
if (verbose)
{
- printf("Computing heap state for block BB%02u, entry block for loops %d to %d:\n", entryBlock->bbNum,
- innermostLoopNum, loopNum);
+ printf("Computing %s state for block BB%02u, entry block for loops %d to %d:\n", memoryKindNames[memoryKind],
+ entryBlock->bbNum, innermostLoopNum, loopNum);
}
#endif // DEBUG
- // If this loop has heap havoc effects, just use a new, unique VN.
- if (optLoopTable[loopNum].lpLoopHasHeapHavoc)
+ // If this loop has memory havoc effects, just use a new, unique VN.
+ if (optLoopTable[loopNum].lpLoopHasMemoryHavoc[memoryKind])
{
ValueNum res = vnStore->VNForExpr(entryBlock, TYP_REF);
#ifdef DEBUG
if (verbose)
{
- printf(" Loop %d has heap havoc effect; heap state is new fresh $%x.\n", loopNum, res);
+ printf(" Loop %d has memory havoc effect; heap state is new fresh $%x.\n", loopNum, res);
}
#endif // DEBUG
return res;
}
// Otherwise, find the predecessors of the entry block that are not in the loop.
- // If there is only one such, use its heap value as the "base." If more than one,
- // use a new unique heap VN.
+ // If there is only one such, use its memory value as the "base." If more than one,
+ // use a new unique VN.
BasicBlock* nonLoopPred = nullptr;
bool multipleNonLoopPreds = false;
for (flowList* pred = BlockPredsWithEH(entryBlock); pred != nullptr; pred = pred->flNext)
@@ -4671,122 +4714,187 @@ ValueNum Compiler::fgHeapVNForLoopSideEffects(BasicBlock* entryBlock, unsigned i
#ifdef DEBUG
if (verbose)
{
- printf(" Therefore, heap state is new, fresh $%x.\n", res);
+ printf(" Therefore, memory state is new, fresh $%x.\n", res);
}
#endif // DEBUG
return res;
}
// Otherwise, there is a single non-loop pred.
assert(nonLoopPred != nullptr);
- // What is it's heap post-state?
- ValueNum newHeapVN = GetHeapPerSsaData(nonLoopPred->bbHeapSsaNumOut)->m_vnPair.GetLiberal();
- assert(newHeapVN !=
+ // What is its memory post-state?
+ ValueNum newMemoryVN = GetMemoryPerSsaData(nonLoopPred->bbMemorySsaNumOut[memoryKind])->m_vnPair.GetLiberal();
+ assert(newMemoryVN !=
ValueNumStore::NoVN); // We must have processed the single non-loop pred before reaching the loop entry.
#ifdef DEBUG
if (verbose)
{
- printf(" Init heap state is $%x, with new, fresh VN at:\n", newHeapVN);
+ printf(" Init %s state is $%x, with new, fresh VN at:\n", memoryKindNames[memoryKind], newMemoryVN);
}
#endif // DEBUG
// Modify "base" by setting all the modified fields/field maps/array maps to unknown values.
- // First the fields/field maps.
-
- Compiler::LoopDsc::FieldHandleSet* fieldsMod = optLoopTable[loopNum].lpFieldsModified;
- if (fieldsMod != nullptr)
+ // These annotations apply specifically to the GcHeap, where we disambiguate across such stores.
+ if (memoryKind == GcHeap)
{
- for (Compiler::LoopDsc::FieldHandleSet::KeyIterator ki = fieldsMod->Begin(); !ki.Equal(fieldsMod->End()); ++ki)
+ // First the fields/field maps.
+ Compiler::LoopDsc::FieldHandleSet* fieldsMod = optLoopTable[loopNum].lpFieldsModified;
+ if (fieldsMod != nullptr)
{
- CORINFO_FIELD_HANDLE fldHnd = ki.Get();
- ValueNum fldHndVN = vnStore->VNForHandle(ssize_t(fldHnd), GTF_ICON_FIELD_HDL);
+ for (Compiler::LoopDsc::FieldHandleSet::KeyIterator ki = fieldsMod->Begin(); !ki.Equal(fieldsMod->End());
+ ++ki)
+ {
+ CORINFO_FIELD_HANDLE fldHnd = ki.Get();
+ ValueNum fldHndVN = vnStore->VNForHandle(ssize_t(fldHnd), GTF_ICON_FIELD_HDL);
#ifdef DEBUG
- if (verbose)
- {
- const char* modName;
- const char* fldName = eeGetFieldName(fldHnd, &modName);
- printf(" VNForHandle(Fseq[%s]) is " STR_VN "%x\n", fldName, fldHndVN);
+ if (verbose)
+ {
+ const char* modName;
+ const char* fldName = eeGetFieldName(fldHnd, &modName);
+ printf(" VNForHandle(Fseq[%s]) is " STR_VN "%x\n", fldName, fldHndVN);
- printf(" fgCurHeapVN assigned:\n");
- }
+ printf(" fgCurMemoryVN assigned:\n");
+ }
#endif // DEBUG
- newHeapVN = vnStore->VNForMapStore(TYP_REF, newHeapVN, fldHndVN, vnStore->VNForExpr(entryBlock, TYP_REF));
+ newMemoryVN =
+ vnStore->VNForMapStore(TYP_REF, newMemoryVN, fldHndVN, vnStore->VNForExpr(entryBlock, TYP_REF));
+ }
}
- }
- // Now do the array maps.
- Compiler::LoopDsc::ClassHandleSet* elemTypesMod = optLoopTable[loopNum].lpArrayElemTypesModified;
- if (elemTypesMod != nullptr)
- {
- for (Compiler::LoopDsc::ClassHandleSet::KeyIterator ki = elemTypesMod->Begin(); !ki.Equal(elemTypesMod->End());
- ++ki)
+ // Now do the array maps.
+ Compiler::LoopDsc::ClassHandleSet* elemTypesMod = optLoopTable[loopNum].lpArrayElemTypesModified;
+ if (elemTypesMod != nullptr)
{
- CORINFO_CLASS_HANDLE elemClsHnd = ki.Get();
+ for (Compiler::LoopDsc::ClassHandleSet::KeyIterator ki = elemTypesMod->Begin();
+ !ki.Equal(elemTypesMod->End()); ++ki)
+ {
+ CORINFO_CLASS_HANDLE elemClsHnd = ki.Get();
#ifdef DEBUG
- if (verbose)
- {
- var_types elemTyp = DecodeElemType(elemClsHnd);
- if (varTypeIsStruct(elemTyp))
- {
- printf(" Array map %s[]\n", eeGetClassName(elemClsHnd));
- }
- else
+ if (verbose)
{
- printf(" Array map %s[]\n", varTypeName(elemTyp));
+ var_types elemTyp = DecodeElemType(elemClsHnd);
+ if (varTypeIsStruct(elemTyp))
+ {
+ printf(" Array map %s[]\n", eeGetClassName(elemClsHnd));
+ }
+ else
+ {
+ printf(" Array map %s[]\n", varTypeName(elemTyp));
+ }
+ printf(" fgCurMemoryVN assigned:\n");
}
- printf(" fgCurHeapVN assigned:\n");
- }
#endif // DEBUG
- ValueNum elemTypeVN = vnStore->VNForHandle(ssize_t(elemClsHnd), GTF_ICON_CLASS_HDL);
- ValueNum uniqueVN = vnStore->VNForExpr(entryBlock, TYP_REF);
- newHeapVN = vnStore->VNForMapStore(TYP_REF, newHeapVN, elemTypeVN, uniqueVN);
+ ValueNum elemTypeVN = vnStore->VNForHandle(ssize_t(elemClsHnd), GTF_ICON_CLASS_HDL);
+ ValueNum uniqueVN = vnStore->VNForExpr(entryBlock, TYP_REF);
+ newMemoryVN = vnStore->VNForMapStore(TYP_REF, newMemoryVN, elemTypeVN, uniqueVN);
+ }
}
}
+ else
+ {
+ // If there were any fields/elements modified, this should have been recorded as havoc
+ // for ByrefExposed.
+ assert(memoryKind == ByrefExposed);
+ assert((optLoopTable[loopNum].lpFieldsModified == nullptr) ||
+ optLoopTable[loopNum].lpLoopHasMemoryHavoc[memoryKind]);
+ assert((optLoopTable[loopNum].lpArrayElemTypesModified == nullptr) ||
+ optLoopTable[loopNum].lpLoopHasMemoryHavoc[memoryKind]);
+ }
#ifdef DEBUG
if (verbose)
{
- printf(" Final heap state is $%x.\n", newHeapVN);
+ printf(" Final %s state is $%x.\n", memoryKindNames[memoryKind], newMemoryVN);
}
#endif // DEBUG
- return newHeapVN;
+ return newMemoryVN;
+}
+
+void Compiler::fgMutateGcHeap(GenTreePtr tree DEBUGARG(const char* msg))
+{
+ // Update the current memory VN, and if we're tracking the heap SSA # caused by this node, record it.
+ recordGcHeapStore(tree, vnStore->VNForExpr(compCurBB, TYP_REF) DEBUGARG(msg));
}
-void Compiler::fgMutateHeap(GenTreePtr tree DEBUGARG(const char* msg))
+void Compiler::fgMutateAddressExposedLocal(GenTreePtr tree DEBUGARG(const char* msg))
{
- // bbHeapDef must be set to true for any block that Mutates the global Heap
- assert(compCurBB->bbHeapDef);
+ // Update the current ByrefExposed VN, and if we're tracking the heap SSA # caused by this node, record it.
+ recordAddressExposedLocalStore(tree, vnStore->VNForExpr(compCurBB) DEBUGARG(msg));
+}
- fgCurHeapVN = vnStore->VNForExpr(compCurBB, TYP_REF);
+void Compiler::recordGcHeapStore(GenTreePtr curTree, ValueNum gcHeapVN DEBUGARG(const char* msg))
+{
+ // bbMemoryDef must include GcHeap for any block that mutates the GC Heap
+ // and GC Heap mutations are also ByrefExposed mutations
+ assert((compCurBB->bbMemoryDef & memoryKindSet(GcHeap, ByrefExposed)) == memoryKindSet(GcHeap, ByrefExposed));
+ fgCurMemoryVN[GcHeap] = gcHeapVN;
- // If we're tracking the heap SSA # caused by this node, record it.
- fgValueNumberRecordHeapSsa(tree);
+ if (byrefStatesMatchGcHeapStates)
+ {
+ // Since GcHeap and ByrefExposed share SSA nodes, they need to share
+ // value numbers too.
+ fgCurMemoryVN[ByrefExposed] = gcHeapVN;
+ }
+ else
+ {
+ // GcHeap and ByrefExposed have different defnums and VNs. We conservatively
+ // assume that this GcHeap store may alias any byref load/store, so don't
+ // bother trying to record the map/select stuff, and instead just an opaque VN
+ // for ByrefExposed
+ fgCurMemoryVN[ByrefExposed] = vnStore->VNForExpr(compCurBB);
+ }
#ifdef DEBUG
if (verbose)
{
- printf(" fgCurHeapVN assigned by %s at ", msg);
- Compiler::printTreeID(tree);
- printf(" to new unique VN: " STR_VN "%x.\n", fgCurHeapVN);
+ printf(" fgCurMemoryVN[GcHeap] assigned by %s at ", msg);
+ Compiler::printTreeID(curTree);
+ printf(" to VN: " STR_VN "%x.\n", gcHeapVN);
}
#endif // DEBUG
+
+ // If byrefStatesMatchGcHeapStates is true, then since GcHeap and ByrefExposed share
+ // their SSA map entries, the below will effectively update both.
+ fgValueNumberRecordMemorySsa(GcHeap, curTree);
}
-void Compiler::fgValueNumberRecordHeapSsa(GenTreePtr tree)
+void Compiler::recordAddressExposedLocalStore(GenTreePtr curTree, ValueNum memoryVN DEBUGARG(const char* msg))
+{
+ // This should only happen if GcHeap and ByrefExposed are being tracked separately;
+ // otherwise we'd go through recordGcHeapStore.
+ assert(!byrefStatesMatchGcHeapStates);
+
+ // bbMemoryDef must include ByrefExposed for any block that mutates an address-exposed local
+ assert((compCurBB->bbMemoryDef & memoryKindSet(ByrefExposed)) != 0);
+ fgCurMemoryVN[ByrefExposed] = memoryVN;
+
+#ifdef DEBUG
+ if (verbose)
+ {
+ printf(" fgCurMemoryVN[ByrefExposed] assigned by %s at ", msg);
+ Compiler::printTreeID(curTree);
+ printf(" to VN: " STR_VN "%x.\n", memoryVN);
+ }
+#endif // DEBUG
+
+ fgValueNumberRecordMemorySsa(ByrefExposed, curTree);
+}
+
+void Compiler::fgValueNumberRecordMemorySsa(MemoryKind memoryKind, GenTreePtr tree)
{
unsigned ssaNum;
- if (GetHeapSsaMap()->Lookup(tree, &ssaNum))
+ if (GetMemorySsaMap(memoryKind)->Lookup(tree, &ssaNum))
{
- GetHeapPerSsaData(ssaNum)->m_vnPair.SetLiberal(fgCurHeapVN);
+ GetMemoryPerSsaData(ssaNum)->m_vnPair.SetLiberal(fgCurMemoryVN[memoryKind]);
#ifdef DEBUG
if (verbose)
{
printf("Node ");
Compiler::printTreeID(tree);
- printf(" sets heap SSA # %d to VN $%x: ", ssaNum, fgCurHeapVN);
- vnStore->vnDump(this, fgCurHeapVN);
+ printf(" sets %s SSA # %d to VN $%x: ", memoryKindNames[memoryKind], ssaNum, fgCurMemoryVN[memoryKind]);
+ vnStore->vnDump(this, fgCurMemoryVN[memoryKind]);
printf("\n");
}
#endif // DEBUG
@@ -4890,8 +4998,8 @@ void Compiler::fgValueNumberBlockAssignment(GenTreePtr tree, bool evalAsgLhsInd)
GenTree* lhs = tree->gtGetOp1();
GenTree* rhs = tree->gtGetOp2();
#ifdef DEBUG
- // Sometimes we query the heap ssa map, and need a dummy location for the ignored result.
- unsigned heapSsaNum;
+ // Sometimes we query the memory ssa map in an assertion, and need a dummy location for the ignored result.
+ unsigned memorySsaNum;
#endif
if (tree->OperIsInitBlkOp())
@@ -4902,8 +5010,8 @@ void Compiler::fgValueNumberBlockAssignment(GenTreePtr tree, bool evalAsgLhsInd)
if (tree->DefinesLocal(this, &lclVarTree, &isEntire))
{
assert(lclVarTree->gtFlags & GTF_VAR_DEF);
- // Should not have been recorded as updating the heap.
- assert(!GetHeapSsaMap()->Lookup(tree, &heapSsaNum));
+ // Should not have been recorded as updating the GC heap.
+ assert(!GetMemorySsaMap(GcHeap)->Lookup(tree, &memorySsaNum));
unsigned lclNum = lclVarTree->GetLclNum();
@@ -4911,6 +5019,9 @@ void Compiler::fgValueNumberBlockAssignment(GenTreePtr tree, bool evalAsgLhsInd)
// SSA names in which to store VN's on defs. We'll yield unique VN's when we read from them.
if (!fgExcludeFromSsa(lclNum))
{
+ // Should not have been recorded as updating ByrefExposed.
+ assert(!GetMemorySsaMap(ByrefExposed)->Lookup(tree, &memorySsaNum));
+
unsigned lclDefSsaNum = GetSsaNumForLocalVarDef(lclVarTree);
ValueNum initBlkVN = ValueNumStore::NoVN;
@@ -4941,12 +5052,16 @@ void Compiler::fgValueNumberBlockAssignment(GenTreePtr tree, bool evalAsgLhsInd)
}
#endif // DEBUG
}
+ else if (lvaVarAddrExposed(lclVarTree->gtLclNum))
+ {
+ fgMutateAddressExposedLocal(tree DEBUGARG("INITBLK - address-exposed local"));
+ }
}
else
{
- // For now, arbitrary side effect on Heap.
+ // For now, arbitrary side effect on GcHeap/ByrefExposed.
// TODO-CQ: Why not be complete, and get this case right?
- fgMutateHeap(tree DEBUGARG("INITBLK - non local"));
+ fgMutateGcHeap(tree DEBUGARG("INITBLK - non local"));
}
// Initblock's are of type void. Give them the void "value" -- they may occur in argument lists, which we
// want to be able to give VN's to.
@@ -4956,7 +5071,7 @@ void Compiler::fgValueNumberBlockAssignment(GenTreePtr tree, bool evalAsgLhsInd)
{
assert(tree->OperIsCopyBlkOp());
// TODO-Cleanup: We should factor things so that we uniformly rely on "PtrTo" VN's, and
- // the heap cases can be shared with assignments.
+ // the memory cases can be shared with assignments.
GenTreeLclVarCommon* lclVarTree = nullptr;
bool isEntire = false;
// Note that we don't care about exceptions here, since we're only using the values
@@ -4964,14 +5079,17 @@ void Compiler::fgValueNumberBlockAssignment(GenTreePtr tree, bool evalAsgLhsInd)
if (tree->DefinesLocal(this, &lclVarTree, &isEntire))
{
- // Should not have been recorded as updating the heap.
- assert(!GetHeapSsaMap()->Lookup(tree, &heapSsaNum));
+ // Should not have been recorded as updating the GC heap.
+ assert(!GetMemorySsaMap(GcHeap)->Lookup(tree, &memorySsaNum));
unsigned lhsLclNum = lclVarTree->GetLclNum();
FieldSeqNode* lhsFldSeq = nullptr;
// If it's excluded from SSA, don't need to do anything.
if (!fgExcludeFromSsa(lhsLclNum))
{
+ // Should not have been recorded as updating ByrefExposed.
+ assert(!GetMemorySsaMap(ByrefExposed)->Lookup(tree, &memorySsaNum));
+
unsigned lclDefSsaNum = GetSsaNumForLocalVarDef(lclVarTree);
if (lhs->IsLocalExpr(this, &lclVarTree, &lhsFldSeq) ||
@@ -5082,10 +5200,10 @@ void Compiler::fgValueNumberBlockAssignment(GenTreePtr tree, bool evalAsgLhsInd)
if (fldSeqForStaticVar != FieldSeqStore::NotAField())
{
- // We model statics as indices into the heap variable.
+ // We model statics as indices into GcHeap (which is a subset of ByrefExposed).
ValueNum selectedStaticVar;
size_t structSize = 0;
- selectedStaticVar = vnStore->VNApplySelectors(VNK_Liberal, fgCurHeapVN,
+ selectedStaticVar = vnStore->VNApplySelectors(VNK_Liberal, fgCurMemoryVN[GcHeap],
fldSeqForStaticVar, &structSize);
selectedStaticVar =
vnStore->VNApplySelectorsTypeCheck(selectedStaticVar, indType, structSize);
@@ -5162,12 +5280,16 @@ void Compiler::fgValueNumberBlockAssignment(GenTreePtr tree, bool evalAsgLhsInd)
}
#endif // DEBUG
}
+ else if (lvaVarAddrExposed(lhsLclNum))
+ {
+ fgMutateAddressExposedLocal(tree DEBUGARG("COPYBLK - address-exposed local"));
+ }
}
else
{
- // For now, arbitrary side effect on Heap.
+ // For now, arbitrary side effect on GcHeap/ByrefExposed.
// TODO-CQ: Why not be complete, and get this case right?
- fgMutateHeap(tree DEBUGARG("COPYBLK - non local"));
+ fgMutateGcHeap(tree DEBUGARG("COPYBLK - non local"));
}
// Copyblock's are of type void. Give them the void "value" -- they may occur in argument lists, which we want
// to be able to give VN's to.
@@ -5223,8 +5345,22 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
if (lcl->gtSsaNum == SsaConfig::RESERVED_SSA_NUM)
{
- // Not an SSA variable. Assign each occurrence a new, unique, VN.
- lcl->gtVNPair.SetBoth(vnStore->VNForExpr(compCurBB, lcl->TypeGet()));
+ // Not an SSA variable.
+
+ if (lvaVarAddrExposed(lclNum))
+ {
+ // Address-exposed locals are part of ByrefExposed.
+ ValueNum addrVN = vnStore->VNForFunc(TYP_BYREF, VNF_PtrToLoc, vnStore->VNForIntCon(lclNum),
+ vnStore->VNForFieldSeq(nullptr));
+ ValueNum loadVN = fgValueNumberByrefExposedLoad(typ, addrVN);
+
+ lcl->gtVNPair.SetBoth(loadVN);
+ }
+ else
+ {
+ // Assign odd cases a new, unique, VN.
+ lcl->gtVNPair.SetBoth(vnStore->VNForExpr(compCurBB, lcl->TypeGet()));
+ }
}
else
{
@@ -5366,11 +5502,11 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
if (isVolatile)
{
- // For Volatile indirection, first mutate the global heap
- fgMutateHeap(tree DEBUGARG("GTF_FLD_VOLATILE - read"));
+ // For Volatile indirection, first mutate GcHeap/ByrefExposed
+ fgMutateGcHeap(tree DEBUGARG("GTF_FLD_VOLATILE - read"));
}
- // We just mutate the heap if isVolatile is true, and then do the read as normal.
+ // We just mutate GcHeap/ByrefExposed if isVolatile is true, and then do the read as normal.
//
// This allows:
// 1: read s;
@@ -5399,13 +5535,13 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
else
{
// This is a reference to heap memory.
- // We model statics as indices into the heap variable.
+ // We model statics as indices into GcHeap (which is a subset of ByrefExposed).
FieldSeqNode* fldSeqForStaticVar =
GetFieldSeqStore()->CreateSingleton(tree->gtClsVar.gtClsVarHnd);
size_t structSize = 0;
- selectedStaticVar =
- vnStore->VNApplySelectors(VNK_Liberal, fgCurHeapVN, fldSeqForStaticVar, &structSize);
+ selectedStaticVar = vnStore->VNApplySelectors(VNK_Liberal, fgCurMemoryVN[GcHeap],
+ fldSeqForStaticVar, &structSize);
selectedStaticVar =
vnStore->VNApplySelectorsTypeCheck(selectedStaticVar, tree->TypeGet(), structSize);
@@ -5429,8 +5565,8 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
break;
case GT_MEMORYBARRIER: // Leaf
- // For MEMORYBARRIER add an arbitrary side effect on Heap.
- fgMutateHeap(tree DEBUGARG("MEMORYBARRIER"));
+ // For MEMORYBARRIER add an arbitrary side effect on GcHeap/ByrefExposed.
+ fgMutateGcHeap(tree DEBUGARG("MEMORYBARRIER"));
break;
// These do not represent values.
@@ -5462,8 +5598,8 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
else if (GenTree::OperIsSimple(oper))
{
#ifdef DEBUG
- // Sometimes we query the heap ssa map, and need a dummy location for the ignored result.
- unsigned heapSsaNum;
+ // Sometimes we query the memory ssa map in an assertion, and need a dummy location for the ignored result.
+ unsigned memorySsaNum;
#endif
if (GenTree::OperIsAssignment(oper) && !varTypeIsStruct(tree))
@@ -5482,7 +5618,7 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
// If the LHS is an IND, we didn't evaluate it when we visited it previously.
// But we didn't know that the parent was an op=. We do now, so go back and evaluate it.
// (We actually check if the effective val is the IND. We will have evaluated any non-last
- // args of an LHS comma already -- including their heap effects.)
+ // args of an LHS comma already -- including their memory effects.)
GenTreePtr lhsVal = lhs->gtEffectiveVal(/*commaOnly*/ true);
if (lhsVal->OperIsIndir() || (lhsVal->OperGet() == GT_CLS_VAR))
{
@@ -5567,11 +5703,14 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
GenTreeLclVarCommon* lcl = lhs->AsLclVarCommon();
unsigned lclDefSsaNum = GetSsaNumForLocalVarDef(lcl);
- // Should not have been recorded as updating the heap.
- assert(!GetHeapSsaMap()->Lookup(tree, &heapSsaNum));
+ // Should not have been recorded as updating the GC heap.
+ assert(!GetMemorySsaMap(GcHeap)->Lookup(tree, &memorySsaNum));
if (lclDefSsaNum != SsaConfig::RESERVED_SSA_NUM)
{
+ // Should not have been recorded as updating ByrefExposed mem.
+ assert(!GetMemorySsaMap(ByrefExposed)->Lookup(tree, &memorySsaNum));
+
assert(rhsVNPair.GetLiberal() != ValueNumStore::NoVN);
lhs->gtVNPair = rhsVNPair;
@@ -5591,6 +5730,16 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
}
#endif // DEBUG
}
+ else if (lvaVarAddrExposed(lcl->gtLclNum))
+ {
+ // We could use MapStore here and MapSelect on reads of address-exposed locals
+ // (using the local nums as selectors) to get e.g. propagation of values
+ // through address-taken locals in regions of code with no calls or byref
+ // writes.
+ // For now, just use a new opaque VN.
+ ValueNum heapVN = vnStore->VNForExpr(compCurBB);
+ recordAddressExposedLocalStore(tree, heapVN DEBUGARG("local assign"));
+ }
#ifdef DEBUG
else
{
@@ -5598,7 +5747,8 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
{
JITDUMP("Tree ");
Compiler::printTreeID(tree);
- printf(" assigns to local var V%02u; excluded from SSA, so value not tracked.\n",
+ printf(" assigns to non-address-taken local var V%02u; excluded from SSA, so value not "
+ "tracked.\n",
lcl->GetLclNum());
}
}
@@ -5610,8 +5760,8 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
GenTreeLclFld* lclFld = lhs->AsLclFld();
unsigned lclDefSsaNum = GetSsaNumForLocalVarDef(lclFld);
- // Should not have been recorded as updating the heap.
- assert(!GetHeapSsaMap()->Lookup(tree, &heapSsaNum));
+ // Should not have been recorded as updating the GC heap.
+ assert(!GetMemorySsaMap(GcHeap)->Lookup(tree, &memorySsaNum));
if (lclDefSsaNum != SsaConfig::RESERVED_SSA_NUM)
{
@@ -5664,6 +5814,15 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
}
#endif // DEBUG
}
+ else if (lvaVarAddrExposed(lclFld->gtLclNum))
+ {
+ // This side-effects ByrefExposed. Just use a new opaque VN.
+ // As with GT_LCL_VAR, we could probably use MapStore here and MapSelect at corresponding
+ // loads, but to do so would have to identify the subset of address-exposed locals
+ // whose fields can be disambiguated.
+ ValueNum heapVN = vnStore->VNForExpr(compCurBB);
+ recordAddressExposedLocalStore(tree, heapVN DEBUGARG("local field assign"));
+ }
}
break;
@@ -5678,8 +5837,8 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
if (isVolatile)
{
- // For Volatile store indirection, first mutate the global heap
- fgMutateHeap(lhs DEBUGARG("GTF_IND_VOLATILE - store"));
+ // For Volatile store indirection, first mutate GcHeap/ByrefExposed
+ fgMutateGcHeap(lhs DEBUGARG("GTF_IND_VOLATILE - store"));
tree->gtVNPair.SetBoth(vnStore->VNForExpr(compCurBB, lhs->TypeGet()));
}
@@ -5797,6 +5956,17 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
}
#endif // DEBUG
}
+ else if (lvaVarAddrExposed(lclNum))
+ {
+ // Need to record the effect on ByrefExposed.
+ // We could use MapStore here and MapSelect on reads of address-exposed locals
+ // (using the local nums as selectors) to get e.g. propagation of values
+ // through address-taken locals in regions of code with no calls or byref
+ // writes.
+ // For now, just use a new opaque VN.
+ ValueNum heapVN = vnStore->VNForExpr(compCurBB);
+ recordAddressExposedLocalStore(tree, heapVN DEBUGARG("PtrToLoc indir"));
+ }
}
}
@@ -5832,9 +6002,9 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
}
#endif // DEBUG
- fgValueNumberArrIndexAssign(elemTypeEq, arrVN, inxVN, fldSeq, rhsVNPair.GetLiberal(),
- lhs->TypeGet());
- fgValueNumberRecordHeapSsa(tree);
+ ValueNum heapVN = fgValueNumberArrIndexAssign(elemTypeEq, arrVN, inxVN, fldSeq,
+ rhsVNPair.GetLiberal(), lhs->TypeGet());
+ recordGcHeapStore(tree, heapVN DEBUGARG("Array element assignment"));
}
// It may be that we haven't parsed it yet. Try.
else if (lhs->gtFlags & GTF_IND_ARR_INDEX)
@@ -5851,7 +6021,7 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
arg->ParseArrayAddress(this, &arrInfo, &arr, &inxVN, &fldSeq);
if (arr == nullptr)
{
- fgMutateHeap(tree DEBUGARG("assignment to unparseable array expression"));
+ fgMutateGcHeap(tree DEBUGARG("assignment to unparseable array expression"));
return;
}
// Otherwise, parsing succeeded.
@@ -5869,15 +6039,15 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
fldSeq = GetFieldSeqStore()->Append(fldSeq, zeroOffsetFldSeq);
}
- fgValueNumberArrIndexAssign(elemTypeEq, arrVN, inxVN, fldSeq, rhsVNPair.GetLiberal(),
- lhs->TypeGet());
- fgValueNumberRecordHeapSsa(tree);
+ ValueNum heapVN = fgValueNumberArrIndexAssign(elemTypeEq, arrVN, inxVN, fldSeq,
+ rhsVNPair.GetLiberal(), lhs->TypeGet());
+ recordGcHeapStore(tree, heapVN DEBUGARG("assignment to unparseable array expression"));
}
else if (arg->IsFieldAddr(this, &obj, &staticOffset, &fldSeq))
{
if (fldSeq == FieldSeqStore::NotAField())
{
- fgMutateHeap(tree DEBUGARG("NotAField"));
+ fgMutateGcHeap(tree DEBUGARG("NotAField"));
}
else
{
@@ -5892,8 +6062,8 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
assert(staticOffset == nullptr);
}
#endif // DEBUG
- // Get the first (instance or static) field from field seq. Heap[field] will yield the
- // "field map".
+ // Get the first (instance or static) field from field seq. GcHeap[field] will yield
+ // the "field map".
if (fldSeq->IsFirstElemFieldSeq())
{
fldSeq = fldSeq->m_next;
@@ -5906,7 +6076,8 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
// The final field in the sequence will need to match the 'indType'
var_types indType = lhs->TypeGet();
- ValueNum fldMapVN = vnStore->VNApplySelectors(VNK_Liberal, fgCurHeapVN, firstFieldOnly);
+ ValueNum fldMapVN =
+ vnStore->VNApplySelectors(VNK_Liberal, fgCurMemoryVN[GcHeap], firstFieldOnly);
// The type of the field is "struct" if there are more fields in the sequence,
// otherwise it is the type returned from VNApplySelectors above.
@@ -5962,8 +6133,8 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
storeVal, indType, compCurBB);
}
- newFldMapVN = vnStore->VNApplySelectorsAssign(VNK_Liberal, fgCurHeapVN, fldSeq,
- storeVal, indType, compCurBB);
+ newFldMapVN = vnStore->VNApplySelectorsAssign(VNK_Liberal, fgCurMemoryVN[GcHeap],
+ fldSeq, storeVal, indType, compCurBB);
}
// It is not strictly necessary to set the lhs value number,
@@ -5973,26 +6144,47 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
#ifdef DEBUG
if (verbose)
{
- printf(" fgCurHeapVN assigned:\n");
+ printf(" fgCurMemoryVN assigned:\n");
}
#endif // DEBUG
- // bbHeapDef must be set to true for any block that Mutates the global Heap
- assert(compCurBB->bbHeapDef);
+ // bbMemoryDef must include GcHeap for any block that mutates the GC heap
+ assert((compCurBB->bbMemoryDef & memoryKindSet(GcHeap)) != 0);
- // Update the field map for firstField in Heap to this new value.
- fgCurHeapVN = vnStore->VNApplySelectorsAssign(VNK_Liberal, fgCurHeapVN, firstFieldOnly,
- newFldMapVN, indType, compCurBB);
+ // Update the field map for firstField in GcHeap to this new value.
+ ValueNum heapVN =
+ vnStore->VNApplySelectorsAssign(VNK_Liberal, fgCurMemoryVN[GcHeap], firstFieldOnly,
+ newFldMapVN, indType, compCurBB);
- fgValueNumberRecordHeapSsa(tree);
+ recordGcHeapStore(tree, heapVN DEBUGARG("StoreField"));
}
}
else
{
- GenTreeLclVarCommon* dummyLclVarTree = nullptr;
- if (!tree->DefinesLocal(this, &dummyLclVarTree))
+ GenTreeLclVarCommon* lclVarTree = nullptr;
+ bool isLocal = tree->DefinesLocal(this, &lclVarTree);
+
+ if (isLocal && lvaVarAddrExposed(lclVarTree->gtLclNum))
+ {
+ // Store to address-exposed local; need to record the effect on ByrefExposed.
+ // We could use MapStore here and MapSelect on reads of address-exposed locals
+ // (using the local nums as selectors) to get e.g. propagation of values
+ // through address-taken locals in regions of code with no calls or byref
+ // writes.
+ // For now, just use a new opaque VN.
+ ValueNum memoryVN = vnStore->VNForExpr(compCurBB);
+ recordAddressExposedLocalStore(tree, memoryVN DEBUGARG("PtrToLoc indir"));
+ }
+ else if (!isLocal)
{
- // If it doesn't define a local, then it might update the heap.
- fgMutateHeap(tree DEBUGARG("assign-of-IND"));
+ // If it doesn't define a local, then it might update GcHeap/ByrefExposed.
+ // For the new ByrefExposed VN, we could use an operator here like
+ // VNF_ByrefExposedStore that carries the VNs of the pointer and RHS, then
+ // at byref loads if the current ByrefExposed VN happens to be
+ // VNF_ByrefExposedStore with the same pointer VN, we could propagate the
+ // VN from the RHS to the VN for the load. This would e.g. allow tracking
+ // values through assignments to out params. For now, just model this
+ // as an opaque GcHeap/ByrefExposed mutation.
+ fgMutateGcHeap(tree DEBUGARG("assign-of-IND"));
}
}
}
@@ -6008,17 +6200,17 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
if (isVolatile)
{
- // For Volatile store indirection, first mutate the global heap
- fgMutateHeap(lhs DEBUGARG("GTF_CLS_VAR - store")); // always change fgCurHeapVN
+ // For Volatile store indirection, first mutate GcHeap/ByrefExposed
+ fgMutateGcHeap(lhs DEBUGARG("GTF_CLS_VAR - store")); // always change fgCurMemoryVN
}
- // We model statics as indices into the heap variable.
+ // We model statics as indices into GcHeap (which is a subset of ByrefExposed).
FieldSeqNode* fldSeqForStaticVar = GetFieldSeqStore()->CreateSingleton(lhs->gtClsVar.gtClsVarHnd);
assert(fldSeqForStaticVar != FieldSeqStore::NotAField());
ValueNum storeVal = rhsVNPair.GetLiberal(); // The value number from the rhs of the assignment
- storeVal = vnStore->VNApplySelectorsAssign(VNK_Liberal, fgCurHeapVN, fldSeqForStaticVar, storeVal,
- lhs->TypeGet(), compCurBB);
+ storeVal = vnStore->VNApplySelectorsAssign(VNK_Liberal, fgCurMemoryVN[GcHeap], fldSeqForStaticVar,
+ storeVal, lhs->TypeGet(), compCurBB);
// It is not strictly necessary to set the lhs value number,
// but the dumps read better with it set to the 'storeVal' that we just computed
@@ -6026,23 +6218,22 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
#ifdef DEBUG
if (verbose)
{
- printf(" fgCurHeapVN assigned:\n");
+ printf(" fgCurMemoryVN assigned:\n");
}
#endif // DEBUG
- // bbHeapDef must be set to true for any block that Mutates the global Heap
- assert(compCurBB->bbHeapDef);
+ // bbMemoryDef must include GcHeap for any block that mutates the GC heap
+ assert((compCurBB->bbMemoryDef & memoryKindSet(GcHeap)) != 0);
- // Update the field map for the fgCurHeapVN
- fgCurHeapVN = storeVal;
- fgValueNumberRecordHeapSsa(tree);
+ // Update the field map for the fgCurMemoryVN and SSA for the tree
+ recordGcHeapStore(tree, storeVal DEBUGARG("Static Field store"));
}
break;
default:
assert(!"Unknown node for lhs of assignment!");
- // For Unknown stores, mutate the global heap
- fgMutateHeap(lhs DEBUGARG("Unkwown Assignment - store")); // always change fgCurHeapVN
+ // For Unknown stores, mutate GcHeap/ByrefExposed
+ fgMutateGcHeap(lhs DEBUGARG("Unkwown Assignment - store")); // always change fgCurMemoryVN
break;
}
}
@@ -6123,7 +6314,9 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
else if ((oper == GT_IND) || GenTree::OperIsBlk(oper))
{
// So far, we handle cases in which the address is a ptr-to-local, or if it's
- // a pointer to an object field.
+ // a pointer to an object field or array alement. Other cases become uses of
+ // the current ByrefExposed value and the pointer value, so that at least we
+ // can recognize redundant loads with no stores between them.
GenTreePtr addr = tree->AsIndir()->Addr();
GenTreeLclVarCommon* lclVarTree = nullptr;
FieldSeqNode* fldSeq1 = nullptr;
@@ -6150,8 +6343,8 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
}
else if (isVolatile)
{
- // For Volatile indirection, mutate the global heap
- fgMutateHeap(tree DEBUGARG("GTF_IND_VOLATILE - read"));
+ // For Volatile indirection, mutate GcHeap/ByrefExposed
+ fgMutateGcHeap(tree DEBUGARG("GTF_IND_VOLATILE - read"));
// The value read by the GT_IND can immediately change
ValueNum newUniq = vnStore->VNForExpr(compCurBB, tree->TypeGet());
@@ -6226,6 +6419,39 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
fgValueNumberArrIndexVal(tree, elemTypeEq, arrVN, inxVN, addrXvnp.GetLiberal(), fldSeq);
}
}
+ else if (tree->gtFlags & GTF_IND_ARR_LEN)
+ {
+ // It's an array length. The argument is the sum of an array ref with some integer values...
+ ValueNum arrRefLib = vnStore->VNForRefInAddr(tree->gtOp.gtOp1->gtVNPair.GetLiberal());
+ ValueNum arrRefCons = vnStore->VNForRefInAddr(tree->gtOp.gtOp1->gtVNPair.GetConservative());
+
+ assert(vnStore->TypeOfVN(arrRefLib) == TYP_REF || vnStore->TypeOfVN(arrRefLib) == TYP_BYREF);
+ if (vnStore->IsVNConstant(arrRefLib))
+ {
+ // (or in weird cases, a REF or BYREF constant, in which case the result is an exception).
+ tree->gtVNPair.SetLiberal(
+ vnStore->VNWithExc(ValueNumStore::VNForVoid(),
+ vnStore->VNExcSetSingleton(
+ vnStore->VNForFunc(TYP_REF, VNF_NullPtrExc, arrRefLib))));
+ }
+ else
+ {
+ tree->gtVNPair.SetLiberal(vnStore->VNForFunc(TYP_INT, VNFunc(GT_ARR_LENGTH), arrRefLib));
+ }
+ assert(vnStore->TypeOfVN(arrRefCons) == TYP_REF || vnStore->TypeOfVN(arrRefCons) == TYP_BYREF);
+ if (vnStore->IsVNConstant(arrRefCons))
+ {
+ // (or in weird cases, a REF or BYREF constant, in which case the result is an exception).
+ tree->gtVNPair.SetConservative(
+ vnStore->VNWithExc(ValueNumStore::VNForVoid(),
+ vnStore->VNExcSetSingleton(
+ vnStore->VNForFunc(TYP_REF, VNF_NullPtrExc, arrRefCons))));
+ }
+ else
+ {
+ tree->gtVNPair.SetConservative(vnStore->VNForFunc(TYP_INT, VNFunc(GT_ARR_LENGTH), arrRefCons));
+ }
+ }
// In general we skip GT_IND nodes on that are the LHS of an assignment. (We labeled these earlier.)
// We will "evaluate" this as part of the assignment. (Unless we're explicitly told by
@@ -6266,10 +6492,10 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
if (fldSeqForStaticVar != FieldSeqStore::NotAField())
{
ValueNum selectedStaticVar;
- // We model statics as indices into the heap variable.
+ // We model statics as indices into the GcHeap (which is a subset of ByrefExposed).
size_t structSize = 0;
- selectedStaticVar =
- vnStore->VNApplySelectors(VNK_Liberal, fgCurHeapVN, fldSeqForStaticVar, &structSize);
+ selectedStaticVar = vnStore->VNApplySelectors(VNK_Liberal, fgCurMemoryVN[GcHeap],
+ fldSeqForStaticVar, &structSize);
selectedStaticVar = vnStore->VNApplySelectorsTypeCheck(selectedStaticVar, indType, structSize);
tree->gtVNPair.SetLiberal(selectedStaticVar);
@@ -6294,7 +6520,7 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
}
else if (fldSeq2 != nullptr)
{
- // Get the first (instance or static) field from field seq. Heap[field] will yield the "field
+ // Get the first (instance or static) field from field seq. GcHeap[field] will yield the "field
// map".
CLANG_FORMAT_COMMENT_ANCHOR;
@@ -6313,7 +6539,7 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
FieldSeqNode* firstFieldOnly = GetFieldSeqStore()->CreateSingleton(fldSeq2->m_fieldHnd);
size_t structSize = 0;
ValueNum fldMapVN =
- vnStore->VNApplySelectors(VNK_Liberal, fgCurHeapVN, firstFieldOnly, &structSize);
+ vnStore->VNApplySelectors(VNK_Liberal, fgCurMemoryVN[GcHeap], firstFieldOnly, &structSize);
// The final field in the sequence will need to match the 'indType'
var_types indType = tree->TypeGet();
@@ -6357,9 +6583,12 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
tree->gtVNPair = vnStore->VNPWithExc(tree->gtVNPair, addrXvnp);
}
}
- else // We don't know where the address points.
+ else // We don't know where the address points, so it is an ByrefExposed load.
{
- tree->gtVNPair.SetBoth(vnStore->VNForExpr(compCurBB, tree->TypeGet()));
+ ValueNum addrVN = addr->gtVNPair.GetLiberal();
+ ValueNum loadVN = fgValueNumberByrefExposedLoad(typ, addrVN);
+ tree->gtVNPair.SetLiberal(loadVN);
+ tree->gtVNPair.SetConservative(vnStore->VNForExpr(compCurBB, tree->TypeGet()));
tree->gtVNPair = vnStore->VNPWithExc(tree->gtVNPair, addrXvnp);
}
}
@@ -6506,62 +6735,16 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
tree->gtOp.gtOp1->gtVNPair)));
break;
- case GT_BLK:
- case GT_OBJ:
- case GT_IND:
- if (tree->gtFlags & GTF_IND_ARR_LEN)
- {
- // It's an array length. The argument is the sum of an array ref with some integer values...
- ValueNum arrRefLib = vnStore->VNForRefInAddr(tree->gtOp.gtOp1->gtVNPair.GetLiberal());
- ValueNum arrRefCons = vnStore->VNForRefInAddr(tree->gtOp.gtOp1->gtVNPair.GetConservative());
-
- assert(vnStore->TypeOfVN(arrRefLib) == TYP_REF || vnStore->TypeOfVN(arrRefLib) == TYP_BYREF);
- if (vnStore->IsVNConstant(arrRefLib))
- {
- // (or in weird cases, a REF or BYREF constant, in which case the result is an exception).
- tree->gtVNPair.SetLiberal(
- vnStore->VNWithExc(ValueNumStore::VNForVoid(),
- vnStore->VNExcSetSingleton(
- vnStore->VNForFunc(TYP_REF, VNF_NullPtrExc, arrRefLib))));
- }
- else
- {
- tree->gtVNPair.SetLiberal(vnStore->VNForFunc(TYP_INT, VNFunc(GT_ARR_LENGTH), arrRefLib));
- }
- assert(vnStore->TypeOfVN(arrRefCons) == TYP_REF || vnStore->TypeOfVN(arrRefCons) == TYP_BYREF);
- if (vnStore->IsVNConstant(arrRefCons))
- {
- // (or in weird cases, a REF or BYREF constant, in which case the result is an exception).
- tree->gtVNPair.SetConservative(
- vnStore->VNWithExc(ValueNumStore::VNForVoid(),
- vnStore->VNExcSetSingleton(
- vnStore->VNForFunc(TYP_REF, VNF_NullPtrExc, arrRefCons))));
- }
- else
- {
- tree->gtVNPair.SetConservative(
- vnStore->VNForFunc(TYP_INT, VNFunc(GT_ARR_LENGTH), arrRefCons));
- }
- }
- else
- {
- tree->gtVNPair.SetBoth(vnStore->VNForExpr(compCurBB, tree->TypeGet()));
- }
- break;
-
case GT_LOCKADD: // Binop
case GT_XADD: // Binop
case GT_XCHG: // Binop
- // For CMPXCHG and other intrinsics add an arbitrary side effect on Heap.
- fgMutateHeap(tree DEBUGARG("Interlocked intrinsic"));
+ // For CMPXCHG and other intrinsics add an arbitrary side effect on GcHeap/ByrefExposed.
+ fgMutateGcHeap(tree DEBUGARG("Interlocked intrinsic"));
tree->gtVNPair.SetBoth(vnStore->VNForExpr(compCurBB, tree->TypeGet()));
break;
case GT_JTRUE:
case GT_LIST:
-#ifndef LEGACY_BACKEND
- case GT_FIELD_LIST:
-#endif // !LEGACY_BACKEND
// These nodes never need to have a ValueNumber
tree->gtVNPair.SetBoth(ValueNumStore::NoVN);
break;
@@ -6592,18 +6775,18 @@ void Compiler::fgValueNumberTree(GenTreePtr tree, bool evalAsgLhsInd)
// A bounds check node has no value, but may throw exceptions.
ValueNumPair excSet = vnStore->VNPExcSetSingleton(
vnStore->VNPairForFunc(TYP_REF, VNF_IndexOutOfRangeExc,
- vnStore->VNPNormVal(tree->AsBoundsChk()->gtArrLen->gtVNPair),
- vnStore->VNPNormVal(tree->AsBoundsChk()->gtIndex->gtVNPair)));
- excSet = vnStore->VNPExcSetUnion(excSet, vnStore->VNPExcVal(tree->AsBoundsChk()->gtArrLen->gtVNPair));
+ vnStore->VNPNormVal(tree->AsBoundsChk()->gtIndex->gtVNPair),
+ vnStore->VNPNormVal(tree->AsBoundsChk()->gtArrLen->gtVNPair)));
excSet = vnStore->VNPExcSetUnion(excSet, vnStore->VNPExcVal(tree->AsBoundsChk()->gtIndex->gtVNPair));
+ excSet = vnStore->VNPExcSetUnion(excSet, vnStore->VNPExcVal(tree->AsBoundsChk()->gtArrLen->gtVNPair));
tree->gtVNPair = vnStore->VNPWithExc(vnStore->VNPForVoid(), excSet);
}
break;
case GT_CMPXCHG: // Specialop
- // For CMPXCHG and other intrinsics add an arbitrary side effect on Heap.
- fgMutateHeap(tree DEBUGARG("Interlocked intrinsic"));
+ // For CMPXCHG and other intrinsics add an arbitrary side effect on GcHeap/ByrefExposed.
+ fgMutateGcHeap(tree DEBUGARG("Interlocked intrinsic"));
tree->gtVNPair.SetBoth(vnStore->VNForExpr(compCurBB, tree->TypeGet()));
break;
@@ -6896,6 +7079,24 @@ void Compiler::fgValueNumberHelperCallFunc(GenTreeCall* call, VNFunc vnf, ValueN
}
else
{
+ auto getCurrentArg = [call, &args, useEntryPointAddrAsArg0](int currentIndex) {
+ GenTreePtr arg = args->Current();
+ if ((arg->gtFlags & GTF_LATE_ARG) != 0)
+ {
+ // This arg is a setup node that moves the arg into position.
+ // Value-numbering will have visited the separate late arg that
+ // holds the actual value, and propagated/computed the value number
+ // for this arg there.
+ if (useEntryPointAddrAsArg0)
+ {
+ // The args in the fgArgInfo don't include the entry point, so
+ // index into them using one less than the requested index.
+ --currentIndex;
+ }
+ return call->fgArgInfo->GetLateArg(currentIndex);
+ }
+ return arg;
+ };
// Has at least one argument.
ValueNumPair vnp0;
ValueNumPair vnp0x = ValueNumStore::VNPForEmptyExcSet();
@@ -6909,7 +7110,7 @@ void Compiler::fgValueNumberHelperCallFunc(GenTreeCall* call, VNFunc vnf, ValueN
#endif
{
assert(!useEntryPointAddrAsArg0);
- ValueNumPair vnp0wx = args->Current()->gtVNPair;
+ ValueNumPair vnp0wx = getCurrentArg(0)->gtVNPair;
vnStore->VNPUnpackExc(vnp0wx, &vnp0, &vnp0x);
// Also include in the argument exception sets
@@ -6931,7 +7132,7 @@ void Compiler::fgValueNumberHelperCallFunc(GenTreeCall* call, VNFunc vnf, ValueN
else
{
// Has at least two arguments.
- ValueNumPair vnp1wx = args->Current()->gtVNPair;
+ ValueNumPair vnp1wx = getCurrentArg(1)->gtVNPair;
ValueNumPair vnp1;
ValueNumPair vnp1x = ValueNumStore::VNPForEmptyExcSet();
vnStore->VNPUnpackExc(vnp1wx, &vnp1, &vnp1x);
@@ -6951,7 +7152,7 @@ void Compiler::fgValueNumberHelperCallFunc(GenTreeCall* call, VNFunc vnf, ValueN
}
else
{
- ValueNumPair vnp2wx = args->Current()->gtVNPair;
+ ValueNumPair vnp2wx = getCurrentArg(2)->gtVNPair;
ValueNumPair vnp2;
ValueNumPair vnp2x = ValueNumStore::VNPForEmptyExcSet();
vnStore->VNPUnpackExc(vnp2wx, &vnp2, &vnp2x);
@@ -6988,16 +7189,7 @@ void Compiler::fgValueNumberCall(GenTreeCall* call)
if (arg->OperGet() == GT_ARGPLACE)
{
// Find the corresponding late arg.
- GenTreePtr lateArg = nullptr;
- for (unsigned j = 0; j < call->fgArgInfo->ArgCount(); j++)
- {
- if (call->fgArgInfo->ArgTable()[j]->argNum == i)
- {
- lateArg = call->fgArgInfo->ArgTable()[j]->node;
- break;
- }
- }
- assert(lateArg != nullptr);
+ GenTreePtr lateArg = call->fgArgInfo->GetLateArg(i);
assert(lateArg->gtVNPair.BothDefined());
arg->gtVNPair = lateArg->gtVNPair;
updatedArgPlace = true;
@@ -7028,8 +7220,8 @@ void Compiler::fgValueNumberCall(GenTreeCall* call)
if (modHeap)
{
- // For now, arbitrary side effect on Heap.
- fgMutateHeap(call DEBUGARG("HELPER - modifies heap"));
+ // For now, arbitrary side effect on GcHeap/ByrefExposed.
+ fgMutateGcHeap(call DEBUGARG("HELPER - modifies heap"));
}
}
else
@@ -7043,8 +7235,8 @@ void Compiler::fgValueNumberCall(GenTreeCall* call)
call->gtVNPair.SetBoth(vnStore->VNForExpr(compCurBB, call->TypeGet()));
}
- // For now, arbitrary side effect on Heap.
- fgMutateHeap(call DEBUGARG("CALL"));
+ // For now, arbitrary side effect on GcHeap/ByrefExposed.
+ fgMutateGcHeap(call DEBUGARG("CALL"));
}
}
diff --git a/src/jit/valuenum.h b/src/jit/valuenum.h
index c8a57ff210..e6e0e43a33 100644
--- a/src/jit/valuenum.h
+++ b/src/jit/valuenum.h
@@ -217,7 +217,7 @@ private:
#ifdef DEBUG
// This helps test some performance pathologies related to "evaluation" of VNF_MapSelect terms,
- // especially relating to the heap. We count the number of applications of such terms we consider,
+ // especially relating to GcHeap/ByrefExposed. We count the number of applications of such terms we consider,
// and if this exceeds a limit, indicated by a COMPlus_ variable, we assert.
unsigned m_numMapSels;
#endif
@@ -762,7 +762,7 @@ public:
// the function application it represents; otherwise, return "false."
bool GetVNFunc(ValueNum vn, VNFuncApp* funcApp);
- // Requires that "vn" represents a "heap address" the sum of a "TYP_REF" value and some integer
+ // Requires that "vn" represents a "GC heap address" the sum of a "TYP_REF" value and some integer
// value. Returns the TYP_REF value.
ValueNum VNForRefInAddr(ValueNum vn);
diff --git a/src/jit/valuenumfuncs.h b/src/jit/valuenumfuncs.h
index eb17aedf28..cb99507921 100644
--- a/src/jit/valuenumfuncs.h
+++ b/src/jit/valuenumfuncs.h
@@ -18,10 +18,10 @@ ValueNumFuncDef(PtrToLoc, 2, false, false, false) // Pointer (byref) t
ValueNumFuncDef(PtrToArrElem, 4, false, false, false) // Pointer (byref) to an array element. Args: 0: array elem type eq class var_types value, VN's of: 1: array, 2: index, 3: FieldSeq.
ValueNumFuncDef(PtrToStatic, 1, false, false, false) // Pointer (byref) to a static variable (or possibly a field thereof, if the static variable is a struct). Args: 0: FieldSeq, first element
// of which is the static var.
-ValueNumFuncDef(Phi, 2, false, false, false) // A phi function. Only occurs as arg of PhiDef or PhiHeapDef. Arguments are SSA numbers of var being defined.
-ValueNumFuncDef(PhiDef, 3, false, false, false) // Args: 0: local var # (or -1 for Heap), 1: SSA #, 2: VN of definition.
-// Wouldn't need this if I'd made Heap a regular local variable...
-ValueNumFuncDef(PhiHeapDef, 2, false, false, false) // Args: 0: VN for basic block pointer, 1: VN of definition
+ValueNumFuncDef(Phi, 2, false, false, false) // A phi function. Only occurs as arg of PhiDef or PhiMemoryDef. Arguments are SSA numbers of var being defined.
+ValueNumFuncDef(PhiDef, 3, false, false, false) // Args: 0: local var # (or -1 for memory), 1: SSA #, 2: VN of definition.
+// Wouldn't need this if I'd made memory a regular local variable...
+ValueNumFuncDef(PhiMemoryDef, 2, false, false, false) // Args: 0: VN for basic block pointer, 1: VN of definition
ValueNumFuncDef(InitVal, 1, false, false, false) // An input arg, or init val of a local Args: 0: a constant VN.
@@ -37,6 +37,8 @@ ValueNumFuncDef(ReadyToRunIsInstanceOf, 2, false, false, false) // Args: 0
ValueNumFuncDef(LdElemA, 3, false, false, false) // Args: 0: array value; 1: index value; 2: type handle of element.
+ValueNumFuncDef(ByrefExposedLoad, 3, false, false, false) // Args: 0: type handle/id, 1: pointer value; 2: ByrefExposed heap value
+
ValueNumFuncDef(GetRefanyVal, 2, false, false, false) // Args: 0: type handle; 1: typedref value. Returns the value (asserting that the type is right).
ValueNumFuncDef(GetClassFromMethodParam, 1, false, true, false) // Args: 0: method generic argument.
diff --git a/src/jit/valuenumtype.h b/src/jit/valuenumtype.h
index f898d87532..b2ebba69c5 100644
--- a/src/jit/valuenumtype.h
+++ b/src/jit/valuenumtype.h
@@ -17,9 +17,9 @@
typedef UINT32 ValueNum;
// There are two "kinds" of value numbers, which differ in their modeling of the actions of other threads.
-// "Liberal" value numbers assume that the other threads change contents of heap locations only at
+// "Liberal" value numbers assume that the other threads change contents of memory locations only at
// synchronization points. Liberal VNs are appropriate, for example, in identifying CSE opportunities.
-// "Conservative" value numbers assume that the contents of heap locations change arbitrarily between
+// "Conservative" value numbers assume that the contents of memory locations change arbitrarily between
// every two accesses. Conservative VNs are appropriate, for example, in assertion prop, where an observation
// of a property of the value in some storage location is used to perform an optimization downstream on
// an operation involving the contents of that storage location. If other threads may modify the storage
diff --git a/src/md/MD.props b/src/md/MD.props
deleted file mode 100644
index 69f817f846..0000000000
--- a/src/md/MD.props
+++ /dev/null
@@ -1,158 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--
- MetadataFlavor has to be set prior to including this file:
- wks (Desktop or CoreCLR - base on FeatureCoreclr setting)
- dac
- mscordbi
- WinRT-RO
- WinRT-RW
- -->
- <!--
- MetaData features and defines:
- FeatureMetadataEmit ... Basic set of emit APIs (IMetaDataEmit*, etc.).
- FEATURE_METADATA_EMIT
- Enabled for: Desktop, CoreCLR, dac, mscordbi, WinRT-RW.
- Disabled for: WinRT-RO.
- FeatureMetadataEmitAll ... Additional emit APIs (Merging, saving EnC, etc.) mostly for compiler support.
- Note: Requires FeatureMetadataEmit=true (definition of IMetaDataEmit* APIs).
- FEATURE_METADATA_EMIT_ALL
- Enabled for: Desktop.
- Disabled for: CoreCLR, dac, mscordbi, WinRT-RO, WinRT-RW.
- FeatureMetadataEmitInDebugger ... Most emit APIs are E_NOTIMPL (as we shipped them in 3.5 and 4.0)
- Note: Requires FeatureMetadataEmit=true (definition of IMetaDataEmit* APIs) and
- FeatureMetadataEmitAll=false (some E_NOTIMPL for debuggers are rather under #ifdef *_EMIT_ALL).
- FEATURE_METADATA_EMIT_IN_DEBUGGER
- Enabled for: dac, mscordbi
- Disabled for: Desktop, CoreCLR, WinRT-RO, WinRT-RW
- List of APIs that return E_NOTIMPL is defined by what we shipped in 3.5/4.0:
- IMetaDataAssemblyEmit - All methods supported.
- IMetaDataEmit - Most methods return E_NOTIMPL, except:
- Save
- SaveToStream
- SaveToMemory
- GetSaveSize
- TranslateSigWithScope
- DefineTypeDef
- SetModuleProps
- SetHandler
- IMetaDataEmit2 - All methods return E_NOTIMPL.
- FeatureMetadataInternalAPIs ... IMDInternalRO and IMDInternalRW implementation.
- FEATURE_METADATA_INTERNAL_APIS
- Enabled for: Desktop, CoreCLR, dac, mscordbi.
- Disabled for: WinRT-RO, WinRT-RW.
- FeatureMetadataInVM ... Implementation depending on VM (e.g. code:IMetaDataAssemblyImport::FindAssembliesByName - Fusion dependency, IMetaDataValidator).
- FEATURE_METADATA_IN_VM
- Enabled for: Desktop, CoreCLR.
- Disabled for: dac, mscordbi, WinRT-RO, WinRT-RW.
- FeatureMetadataStandaloneWinRT ... Specifics for both WinRT DLLs (e.g. disabling old formats - v1.x, 2.0 Beta1, NT 5 Beta).
- FEATURE_METADATA_STANDALONE_WINRT
- Enabled for: WinRT-RO, WinRT-RW.
- Disabled for: Desktop, CoreCLR, dac, mscordbi.
- FeatureMetadataStandaloneWinRTReadOnly ... Specifics for WinRT-RO DLL (no dependencies on ole32.dll).
- FEATURE_METADATA_STANDALONE_WINRT_RO
- Enabled for: WinRT-RO.
- Disabled for: Desktop, CoreCLR, dac, mscordbi, WinRT-RW.
-
- FEATURE_METADATA_LOAD_TRUSTED_IMAGES ... Enabled only by mscordbi.
- FEATURE_METADATA_RELEASE_MEMORY_ON_REOPEN ... Enabled only by mscordbi
- Normally Reopening the MD on a new block of memory does not delete any previous memory. In scenarios where the MD is updated
- many times (reflection.emit), the debugger continually updates the MD and memory growth becomes N^2 relative to the size of metadata.
- This feature deletes old memory blocks during re-open if we can determine that we haven't given out pointers to their data.
- See bug .net 4.5 bug 458597 as an example of 1.5GB memory growth.
- FEATURE_METADATA_CUSTOM_DATA_SOURCE ... Enabled only by mscordbi.
- This allows a metadata reader to be initialized with an implementation of IMDCustomDataSource which provides more flexibility for
- how the data flows into the metadata reader.
- FEATURE_METADATA_DEBUGGEE_DATA_SOURCE ... Enabled only by mscordbi.
- This is a data source implementation that marshals data out of the debuggee's implementation of MDInternalRW and provides it
- as a custom data source to a debugger hosted implementation of the metadata reader.
- FEATURE_METADATA_VERIFY_LAYOUTS ... Enabled only by wks.
- A set of static asserts that verify the data structures used in MD match the layouts expected in the debuggee data source.
-
- FEATURE_METADATA_PERF_STATS ... Optional flavor of MetaData for MD perf investigations (not used for a very long time).
-
- Note: FeatureMetadata* settings and MetadataFlavor value will be checked in file:MD.targets which is included by all subdirectories.
- -->
-
- <PropertyGroup Condition="'$(MetadataFlavor)' == 'WinRT-RO' or '$(MetadataFlavor)' == 'WinRT-RW'">
- <!-- Standalone CLR product (no features enabled by default in clr.props) -->
- <ClrProduct>Standalone</ClrProduct>
- </PropertyGroup>
-
- <!--Import the settings. It has to be done early before FeatureCoreclr is used. -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup Condition="'$(MetadataFlavor)' == 'wks'">
- <!-- Enable all features -->
- <FeatureMetadataEmit>true</FeatureMetadataEmit>
-
- <!-- Desktop -->
- <FeatureMetadataEmitAll Condition="'$(FeatureCoreclr)' != 'true'">true</FeatureMetadataEmitAll>
- <FeatureMetadataValidator Condition="'$(FeatureCoreclr)' != 'true'">true</FeatureMetadataValidator>
-
- <FeatureMetadataInternalAPIs>true</FeatureMetadataInternalAPIs>
- <FeatureMetadataInVM>true</FeatureMetadataInVM>
- <FeatureMetadataVerifyLayouts>true</FeatureMetadataVerifyLayouts>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(MetadataFlavor)' == 'dac'">
- <!-- Disable all APIs except Public Import and Internal Import&Emit -->
- <FeatureMetadataEmit>true</FeatureMetadataEmit>
- <FeatureMetadataEmitInDebugger>true</FeatureMetadataEmitInDebugger>
- <FeatureMetadataInternalAPIs>true</FeatureMetadataInternalAPIs>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(MetadataFlavor)' == 'mscordbi'">
- <!-- Enable all internal APIs and all public APIs (with some some implemented as E_NOTIMPL) -->
- <FeatureMetadataEmit>true</FeatureMetadataEmit>
- <FeatureMetadataEmitInDebugger>true</FeatureMetadataEmitInDebugger>
- <FeatureMetadataInternalAPIs>true</FeatureMetadataInternalAPIs>
- <FeatureMetadataCustomDataSource>true</FeatureMetadataCustomDataSource>
- <FeatureMetadataDebuggeeDataSource>true</FeatureMetadataDebuggeeDataSource>
- <!-- Enable mscordbi-only (perf) feature -->
- <CDefines>$(CDefines);FEATURE_METADATA_LOAD_TRUSTED_IMAGES;FEATURE_METADATA_RELEASE_MEMORY_ON_REOPEN</CDefines>
-
- <!-- Changing defaults set by clr.props -->
- <LinkNoLibraries>true</LinkNoLibraries>
- <LinkUseCMT>true</LinkUseCMT>
- <UseMsvcrt>false</UseMsvcrt>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(MetadataFlavor)' == 'WinRT-RO' or '$(MetadataFlavor)' == 'WinRT-RW'">
- <!-- Standalone CLR product (no features enabled by default in clr.props) -->
- <ClrProduct>Standalone</ClrProduct>
-
- <FeatureUtilcodeNoDependencies>true</FeatureUtilcodeNoDependencies>
- <FeatureUseLcid>true</FeatureUseLcid>
-
- <FeatureMetadataStandaloneWinRT>true</FeatureMetadataStandaloneWinRT>
- <FeatureMetadataStandaloneWinRTReadOnly Condition="'$(MetadataFlavor)' == 'WinRT-RO'">true</FeatureMetadataStandaloneWinRTReadOnly>
-
- <FeatureMetadataEmit Condition="'$(MetadataFlavor)' == 'WinRT-RW'">true</FeatureMetadataEmit>
-
- <!-- Link static CRT -->
- <LinkNoLibraries>true</LinkNoLibraries>
- <LinkUseCMT>true</LinkUseCMT>
- <UseMsvcrt>false</UseMsvcrt>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(CrossGenCompile)' == 'true'">
- <!-- Override settings of certain features to disable them for crossgen unconditionally -->
- <FeatureMetadataEmitAll>false</FeatureMetadataEmitAll>
- <FeatureMetadataValidator>false</FeatureMetadataValidator>
- </PropertyGroup>
-
- <!-- Verification of FeatureMetadata* and MetadataFlavor set - hook it up early in the build process (e.g. ResolveProjectReferencesForCompile) -->
- <Target Name="MetadataFlavorAndFeaturesCheck"
- BeforeTargets="ResolveProjectReferencesForCompile">
- <Error Condition="'$(MetadataFlavor)' != 'wks' and '$(MetadataFlavor)' != 'dac' and '$(MetadataFlavor)' != 'mscordbi' and '$(MetadataFlavor)' != 'WinRT-RO' and '$(MetadataFlavor)' != 'WinRT-RW'"
- Text="Unrecognized MetadataFlavor value '$(MetadataFlavor)'." />
-
- <Error Condition="'$(FeatureMetadataEmitAll)' == 'true' and '$(FeatureMetadataEmit)' != 'true'"
- Text="FeatureMetadataEmitAll (compiler support) depends on FeatureMetadataEmit (IMetaDataEmit interfaces) - see file:MD.props" />
- <Error Condition="'$(FeatureMetadataEmitInDebugger)' == 'true' and '$(FeatureMetadataEmit)' != 'true'"
- Text="FeatureMetadataEmitInDebugger (bunch of E_NOTIMPLs) depends on FeatureMetadataEmit (IMetaDataEmit interfaces) - see file:MD.props" />
- <Error Condition="'$(FeatureMetadataEmitInDebugger)' == 'true' and '$(FeatureMetadataEmitAll)' == 'true'"
- Text="FeatureMetadataEmitInDebugger (bunch of E_NOTIMPLs) depends on FeatureMetadataEmitAll (compiler support) disabled - see file:MD.props" />
- </Target>
-
-</Project> \ No newline at end of file
diff --git a/src/md/ceefilegen/ceefgen.nativeproj b/src/md/ceefilegen/ceefgen.nativeproj
deleted file mode 100644
index ddaf673d2d..0000000000
--- a/src/md/ceefilegen/ceefgen.nativeproj
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <UserIncludes>$(UserIncludes);
- .;
- ..\inc</UserIncludes>
- <!--OK to delete NO_NTDLL for devdiv builds.-->
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
- <ClAdditionalOptions>$(ClAdditionalOptions) -D__TODO_PORT_TO_WRAPPERS__</ClAdditionalOptions>
- <OutputName>ceefgen</OutputName>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>stdafx.cpp</PCHCompile>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="BlobFetcher.cpp" />
- <CppCompile Include="CCeeGen.cpp" />
- <CppCompile Include="CeeGenTokenMapper.cpp" />
- <CppCompile Include="CeeSectionString.cpp" />
- <CppCompile Include="PESectionMan.cpp" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/compiler/Compiler.settings.targets b/src/md/compiler/Compiler.settings.targets
deleted file mode 100644
index 97f2504796..0000000000
--- a/src/md/compiler/Compiler.settings.targets
+++ /dev/null
@@ -1,68 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <!--
- We build MetaData in several flavors:
- - Full version (wks) - part of clr.dll/coreclr.dll.
- - dac version - does not need Emit APIs.
- - Standalone versions for:
- * mscordbi.dll (hands the interfaces over to debugger client (e.g. VS) - does not need Emit APIs.
- * CorDbg - does not need Emit APIs.
- * WinRT
- - Read-Only version (ships in Windows) - does not need Emit and Internal APIs.
- - Read-Writer version (ships as private component of MidlRt.exe SDK tool) - does not need Internal APIs.
- -->
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\MD.props" />
-
- <PropertyGroup>
- <MDCompilerSrcDirectory>$(ClrSrcDirectory)\MD\Compiler\</MDCompilerSrcDirectory>
- <UserIncludes>
- $(UserIncludes);
- $(ClrSrcDirectory)\md\inc;
- $(ClrSrcDirectory)\vm;
- $(ClrSrcDirectory)\strongname\inc
- </UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <!--OK to delete NO_NTDLL for devdiv builds.-->
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <!--PCH: Both precompiled header and cpp are on the same $(MDCompilerSrcDirectory)\ path this is likely to be wrong.-->
- <PCHCompile>$(MDCompilerSrcDirectory)\stdafx.cpp</PCHCompile>
- <PCHObject>stdafx_compiler.obj</PCHObject>
- <LinkUseCMT>false</LinkUseCMT>
- </PropertyGroup>
-
- <ItemGroup>
- <ProjectReference Include="$(ClrSrcDirectory)inc\corguids.nativeproj">
- <Comment>clrinternal.h</Comment>
- </ProjectReference>
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="$(MDCompilerSrcDirectory)\AssemblyMD.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\AssemblyMD_Emit.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\ClassFactory.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\CustAttr_Import.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\CustAttr_Emit.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\Disp.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\Emit.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\FilterManager.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\Helper.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\Import.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\ImportHelper.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\MDPerf.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\MDUtil.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\MDValidator.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\NewMerger.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\RegMeta.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\RegMeta_CompilerSupport.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\RegMeta_Emit.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\RegMeta_Import.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\RegMeta_IMetaDataTables.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\RegMeta_VM.cpp" />
- <CppCompile Include="$(MDCompilerSrcDirectory)\VerifyLayouts.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/md/compiler/crossgen/MDCompiler_crossgen.nativeproj b/src/md/compiler/crossgen/MDCompiler_crossgen.nativeproj
deleted file mode 100644
index 8ea56d2cdc..0000000000
--- a/src/md/compiler/crossgen/MDCompiler_crossgen.nativeproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <BuildSysBinaries>true</BuildSysBinaries>
- <MetadataFlavor>wks</MetadataFlavor>
- <OutputName>mdcompiler_crossgen</OutputName>
- </PropertyGroup>
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\Compiler\Compiler.settings.targets" />
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/compiler/dac/dirs.proj b/src/md/compiler/dac/dirs.proj
deleted file mode 100644
index cf39ab9ea2..0000000000
--- a/src/md/compiler/dac/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\mdcompiler_dac.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/compiler/dbi/MDCompiler-dbi.props b/src/md/compiler/dbi/MDCompiler-dbi.props
deleted file mode 100644
index a9c469c98e..0000000000
--- a/src/md/compiler/dbi/MDCompiler-dbi.props
+++ /dev/null
@@ -1,9 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>mscordbi</MetadataFlavor>
- </PropertyGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\Compiler\Compiler.settings.targets" />
-
-</Project>
diff --git a/src/md/compiler/dbi/dirs.proj b/src/md/compiler/dbi/dirs.proj
deleted file mode 100644
index 89a842727c..0000000000
--- a/src/md/compiler/dbi/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(FeatureDbiDebugging)'=='true'" Include="HostLocal\mdcompiler-dbi.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/compiler/dirs.proj b/src/md/compiler/dirs.proj
deleted file mode 100644
index 2e97d62490..0000000000
--- a/src/md/compiler/dirs.proj
+++ /dev/null
@@ -1,27 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="wks\mdcompiler_wks.nativeproj" />
- <ProjectFile Include="dac\dirs.proj" />
- <ProjectFile Include="dbi\dirs.proj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 of the Desktop build -->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreClr)' != 'true'">
- <ProjectFile Include="winrt-ro\mdcompiler-winrt-ro.nativeproj" />
- <ProjectFile Include="winrt-rw\mdcompiler-winrt-rw.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/compiler/regmeta.cpp b/src/md/compiler/regmeta.cpp
index 230d1e4ff0..feb1cdd31b 100644
--- a/src/md/compiler/regmeta.cpp
+++ b/src/md/compiler/regmeta.cpp
@@ -829,7 +829,10 @@ int DumpMD_VWriteMarker(__in __in_z const char *str, va_list marker)
{
if (FAILED(hr = m_output.ReSizeNoThrow(STRING_BUFFER_LEN * i)))
return 0;
- count = _vsnprintf((char *)m_output.Ptr(), STRING_BUFFER_LEN * i, str, marker);
+ va_list markerCopy;
+ va_copy(markerCopy, marker);
+ count = _vsnprintf_s((char *)m_output.Ptr(), STRING_BUFFER_LEN * i, _TRUNCATE, str, markerCopy);
+ va_end(markerCopy);
i *= 2;
}
OutputDebugStringA((LPCSTR)m_output.Ptr());
diff --git a/src/md/compiler/wks/MDCompiler_wks.nativeproj b/src/md/compiler/wks/MDCompiler_wks.nativeproj
deleted file mode 100644
index 8457d87c19..0000000000
--- a/src/md/compiler/wks/MDCompiler_wks.nativeproj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>wks</MetadataFlavor>
- </PropertyGroup>
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\Compiler\Compiler.settings.targets" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>MDCompiler_wks</OutputName>
- </PropertyGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/datasource/DataSource.settings.targets b/src/md/datasource/DataSource.settings.targets
deleted file mode 100644
index 9211b2fc67..0000000000
--- a/src/md/datasource/DataSource.settings.targets
+++ /dev/null
@@ -1,42 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <!--
- We build MetaData in several flavors:
- - Full version (wks) - part of clr.dll/coreclr.dll.
- - dac version - does not need Emit APIs.
- - Standalone versions for:
- * mscordbi.dll (hands the interfaces over to debugger client (e.g. VS) - does not need Emit APIs.
- * CorDbg - does not need Emit APIs.
- * WinRT
- - Read-Only version (ships in Windows) - does not need Emit and Internal APIs.
- - Read-Writer version (ships as private component of MidlRt.exe SDK tool) - does not need Internal APIs.
- -->
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\MD.props" />
-
- <PropertyGroup>
- <MDDataSourceSrcDirectory>$(ClrSrcDirectory)\MD\DataSource\</MDDataSourceSrcDirectory>
- <UserIncludes>
- $(UserIncludes);
- $(ClrSrcDirectory)\MD\inc;
- </UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <!--OK to delete NO_NTDLL for devdiv builds.-->
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <!--PCH: Both precompiled header and cpp are on the same ..\ path this is likely to be wrong.-->
- <PCHCompile>$(MDDataSourceSrcDirectory)\stdafx.cpp</PCHCompile>
- <PCHObject>stdafx_datasource.obj</PCHObject>
- <LinkUseCMT>false</LinkUseCMT>
- </PropertyGroup>
-
- <ItemGroup>
- <CppCompile Include="$(MDDataSourceSrcDirectory)\api.cpp" />
- <CppCompile Include="$(MDDataSourceSrcDirectory)\DataTargetReader.cpp" />
- <CppCompile Include="$(MDDataSourceSrcDirectory)\RemoteMDInternalRWSource.cpp" />
- <CppCompile Include="$(MDDataSourceSrcDirectory)\TargetTypes.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/md/datasource/dbi/DataSource-dbi.props b/src/md/datasource/dbi/DataSource-dbi.props
deleted file mode 100644
index e2a980f790..0000000000
--- a/src/md/datasource/dbi/DataSource-dbi.props
+++ /dev/null
@@ -1,9 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>mscordbi</MetadataFlavor>
- </PropertyGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\DataSource\DataSource.settings.targets" />
-
-</Project>
diff --git a/src/md/datasource/dbi/dirs.proj b/src/md/datasource/dbi/dirs.proj
deleted file mode 100644
index 2a3f4e0252..0000000000
--- a/src/md/datasource/dbi/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(FeatureDbiDebugging)'=='true'" Include="HostLocal\DataSource-dbi.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/datasource/dirs.proj b/src/md/datasource/dirs.proj
deleted file mode 100644
index 1d397301eb..0000000000
--- a/src/md/datasource/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="dbi\dirs.proj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/dirs.proj b/src/md/dirs.proj
deleted file mode 100644
index 31626b9906..0000000000
--- a/src/md/dirs.proj
+++ /dev/null
@@ -1,25 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="hotdata\dirs.proj" />
- <ProjectFile Include="enc\dirs.proj" />
- <ProjectFile Include="runtime\dirs.proj" />
- <ProjectFile Include="compiler\dirs.proj" />
- <ProjectFile Include="winmd\dirs.proj" />
- <ProjectFile Include="datasource\dirs.proj" />
- <ProjectFile Include="ceefilegen\ceefgen.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/enc/crossgen/MDRuntimeRW_crossgen.nativeproj b/src/md/enc/crossgen/MDRuntimeRW_crossgen.nativeproj
deleted file mode 100644
index d47053fac6..0000000000
--- a/src/md/enc/crossgen/MDRuntimeRW_crossgen.nativeproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <BuildSysBinaries>true</BuildSysBinaries>
- <MetadataFlavor>wks</MetadataFlavor>
- <OutputName>mdruntimerw_crossgen</OutputName>
- </PropertyGroup>
-
- <!--Leaf project Properties-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\enc\enc.settings.targets" />
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/enc/dac/dirs.proj b/src/md/enc/dac/dirs.proj
deleted file mode 100644
index eb38212025..0000000000
--- a/src/md/enc/dac/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\mdruntimerw_dac.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/enc/dbi/MDRuntimeRW-dbi.props b/src/md/enc/dbi/MDRuntimeRW-dbi.props
deleted file mode 100644
index eb5a7d44b9..0000000000
--- a/src/md/enc/dbi/MDRuntimeRW-dbi.props
+++ /dev/null
@@ -1,10 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>mscordbi</MetadataFlavor>
- </PropertyGroup>
-
- <!--Leaf project Properties-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\enc\enc.settings.targets" />
-
-</Project>
diff --git a/src/md/enc/dbi/dirs.proj b/src/md/enc/dbi/dirs.proj
deleted file mode 100644
index 6a153f09a0..0000000000
--- a/src/md/enc/dbi/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\mdruntimerw-dbi.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/enc/dirs.proj b/src/md/enc/dirs.proj
deleted file mode 100644
index 32ac18cb68..0000000000
--- a/src/md/enc/dirs.proj
+++ /dev/null
@@ -1,23 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="wks\mdruntimerw.nativeproj" />
- <ProjectFile Include="dbi\dirs.proj" />
- <ProjectFile Include="dac\dirs.proj" />
- <ProjectFile Include="winrt-ro\mdruntimerw-winrt-ro.nativeproj" />
- <ProjectFile Include="winrt-rw\mdruntimerw-winrt-rw.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/enc/enc.settings.targets b/src/md/enc/enc.settings.targets
deleted file mode 100644
index 1c92bb5086..0000000000
--- a/src/md/enc/enc.settings.targets
+++ /dev/null
@@ -1,45 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\MD.props" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <MDEncSrcDirectory>$(ClrSrcDirectory)\MD\enc\</MDEncSrcDirectory>
- <UserIncludes>$(UserIncludes);
- $(ClrSrcDirectory)\MD\inc;
- $(ClrSrcDirectory)\vm;
- $(ClrSrcDirectory)\strongname\inc
- </UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <!--PCH: Both precompiled header and cpp are on the same ..\ path this is likely to be wrong.-->
- <PCHCompile>$(MDEncSrcDirectory)\stdafx.cpp</PCHCompile>
- <PCHObject>stdafx_mdruntimerw.obj</PCHObject>
- </PropertyGroup>
-
- <ItemGroup>
- <ProjectReference Include="$(ClrSrcDirectory)inc\corguids.nativeproj">
- <Comment>clrinternal.h</Comment>
- </ProjectReference>
- </ItemGroup>
-
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="$(MDEncSrcDirectory)\LiteWeightStgdbRW.cpp" />
- <CppCompile Include="$(MDEncSrcDirectory)\MetaModelENC.cpp" />
- <CppCompile Include="$(MDEncSrcDirectory)\MetaModelRW.cpp" />
- <CppCompile Include="$(MDEncSrcDirectory)\peparse.cpp" />
- <CppCompile Include="$(MDEncSrcDirectory)\RWUtil.cpp" />
- <CppCompile Include="$(MDEncSrcDirectory)\StgIO.cpp" />
- <CppCompile Include="$(MDEncSrcDirectory)\StgTiggerStorage.cpp" />
- <CppCompile Include="$(MDEncSrcDirectory)\StgTiggerStream.cpp" />
-
- <CppCompile Include="$(MDEncSrcDirectory)\ImpTlb.cpp" Condition="'$(FeatureCominteropTlbSupport)' == 'true'" />
-
- <!-- Content is under #ifdef FEATURE_METADATA_INTERNAL_APIS -->
- <CppCompile Include="$(MDEncSrcDirectory)\MDInternalRW.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/md/enc/wks/MDRuntimeRW.nativeproj b/src/md/enc/wks/MDRuntimeRW.nativeproj
deleted file mode 100644
index b3116c5abb..0000000000
--- a/src/md/enc/wks/MDRuntimeRW.nativeproj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>wks</MetadataFlavor>
- </PropertyGroup>
-
- <!--Leaf project Properties-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\enc\enc.settings.targets" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>MDRuntimeRW</OutputName>
- </PropertyGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/hotdata/HotData.settings.targets b/src/md/hotdata/HotData.settings.targets
deleted file mode 100644
index c8bde7d372..0000000000
--- a/src/md/hotdata/HotData.settings.targets
+++ /dev/null
@@ -1,28 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <!--OK to delete NO_NTDLL for devdiv builds.-->
- <MDHotDataSrcDirectory>$(ClrSrcDirectory)\MD\HotData\</MDHotDataSrcDirectory>
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>external.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <!--PCH: Both precompiled header and cpp are on the same ..\ path this is likely to be wrong.-->
- <PCHCompile>$(MDHotDataSrcDirectory)\external.cpp</PCHCompile>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="$(MDHotDataSrcDirectory)\HotMetaData.cpp" />
- <CppCompile Include="$(MDHotDataSrcDirectory)\HotTable.cpp" />
- <CppCompile Include="$(MDHotDataSrcDirectory)\HotHeapsDirectoryIterator.cpp" />
- <CppCompile Include="$(MDHotDataSrcDirectory)\HotHeap.cpp" />
- <CppCompile Include="$(MDHotDataSrcDirectory)\HotHeapWriter.cpp" />
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/src/md/hotdata/crossgen/MDHotData_crossgen.nativeproj b/src/md/hotdata/crossgen/MDHotData_crossgen.nativeproj
deleted file mode 100644
index 1e6087e594..0000000000
--- a/src/md/hotdata/crossgen/MDHotData_crossgen.nativeproj
+++ /dev/null
@@ -1,18 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>mdhotdata_crossgen</OutputName>
- </PropertyGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\HotData\HotData.settings.targets" />
-
- <!--Leaf Project Items-->
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/hotdata/dac/dirs.proj b/src/md/hotdata/dac/dirs.proj
deleted file mode 100644
index 730c0c89d6..0000000000
--- a/src/md/hotdata/dac/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\mdhotdata_dac.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/hotdata/dirs.proj b/src/md/hotdata/dirs.proj
deleted file mode 100644
index 1ad2cf969f..0000000000
--- a/src/md/hotdata/dirs.proj
+++ /dev/null
@@ -1,21 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="full\mdhotdata.nativeproj" />
- <ProjectFile Include="full-staticcrt\dirs.proj" />
- <ProjectFile Include="dac\dirs.proj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/hotdata/full-staticcrt/MDHotData-staticcrt.props b/src/md/hotdata/full-staticcrt/MDHotData-staticcrt.props
deleted file mode 100644
index a9ac42bf5f..0000000000
--- a/src/md/hotdata/full-staticcrt/MDHotData-staticcrt.props
+++ /dev/null
@@ -1,11 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\HotData\HotData.settings.targets" />
-
- <PropertyGroup>
- <LinkNoLibraries>true</LinkNoLibraries>
- <LinkUseCMT>true</LinkUseCMT>
- <UseMsvcrt>false</UseMsvcrt>
- </PropertyGroup>
-
-</Project>
diff --git a/src/md/hotdata/full-staticcrt/dirs.proj b/src/md/hotdata/full-staticcrt/dirs.proj
deleted file mode 100644
index cf4651a468..0000000000
--- a/src/md/hotdata/full-staticcrt/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(FeatureDbiDebugging)'=='true'" Include="HostLocal\mdhotdata-staticcrt.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/hotdata/full/MDHotData.nativeproj b/src/md/hotdata/full/MDHotData.nativeproj
deleted file mode 100644
index b85a064343..0000000000
--- a/src/md/hotdata/full/MDHotData.nativeproj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Leaf project Properties-->
- <!--Leaf project Properties-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\HotData\HotData.settings.targets" />
-
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>MDHotData</OutputName>
- </PropertyGroup>
-
- <!--Leaf Project Items-->
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/runtime/Runtime.settings.targets b/src/md/runtime/Runtime.settings.targets
deleted file mode 100644
index 1ac62d7181..0000000000
--- a/src/md/runtime/Runtime.settings.targets
+++ /dev/null
@@ -1,43 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\MD.props" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <MDRuntimeSrcDirectory>$(ClrSrcDirectory)\MD\Runtime\</MDRuntimeSrcDirectory>
- <UserIncludes>
- $(UserIncludes);
- $(ClrSrcDirectory)\MD\inc;
- $(ClrSrcDirectory)\vm;
- $(ClrSrcDirectory)\strongname\inc</UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE -DNO_COR</ClAdditionalOptions>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <!--PCH: Both precompiled header and cpp are on the same ..\ path this is likely to be wrong.-->
- <PCHCompile>$(MDRuntimeSrcDirectory)\stdafx.cpp</PCHCompile>
- <PCHObject>stdafx_mdruntime.obj</PCHObject>
- <LinkUseCMT>false</LinkUseCMT>
- </PropertyGroup>
-
- <ItemGroup>
- <ProjectReference Include="$(ClrSrcDirectory)inc\corguids.nativeproj">
- <Comment>clrinternal.h</Comment>
- </ProjectReference>
- </ItemGroup>
-
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="$(MDRuntimeSrcDirectory)\MDColumnDescriptors.cpp" />
- <CppCompile Include="$(MDRuntimeSrcDirectory)\LiteWeightStgdb.cpp" />
- <CppCompile Include="$(MDRuntimeSrcDirectory)\MDFileFormat.cpp" />
- <CppCompile Include="$(MDRuntimeSrcDirectory)\MetaModel.cpp" />
- <CppCompile Include="$(MDRuntimeSrcDirectory)\MetaModelRO.cpp" />
- <CppCompile Include="$(MDRuntimeSrcDirectory)\RecordPool.cpp" />
-
- <!-- These sources contain internal Read-Only API implementation (IMDInternalRO) -->
- <CppCompile Include="$(MDRuntimeSrcDirectory)\MDInternalDisp.cpp" />
- <CppCompile Include="$(MDRuntimeSrcDirectory)\MDInternalRO.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/md/runtime/crossgen/MDRuntime_crossgen.nativeproj b/src/md/runtime/crossgen/MDRuntime_crossgen.nativeproj
deleted file mode 100644
index 6b8cc00ffc..0000000000
--- a/src/md/runtime/crossgen/MDRuntime_crossgen.nativeproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>wks</MetadataFlavor>
- <OutputName>mdruntime_crossgen</OutputName>
- </PropertyGroup>
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\Runtime\Runtime.settings.targets" />
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/runtime/dac/dirs.proj b/src/md/runtime/dac/dirs.proj
deleted file mode 100644
index cc9e7a722c..0000000000
--- a/src/md/runtime/dac/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--The following projects will build during PHASE 1-->
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\mdruntime_dac.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/runtime/dbi/MDRuntime-dbi.props b/src/md/runtime/dbi/MDRuntime-dbi.props
deleted file mode 100644
index ce3ff3224b..0000000000
--- a/src/md/runtime/dbi/MDRuntime-dbi.props
+++ /dev/null
@@ -1,10 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>mscordbi</MetadataFlavor>
- </PropertyGroup>
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\Runtime\Runtime.settings.targets" />
-
-</Project>
diff --git a/src/md/runtime/dbi/dirs.proj b/src/md/runtime/dbi/dirs.proj
deleted file mode 100644
index 0f2f9b0613..0000000000
--- a/src/md/runtime/dbi/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--The following projects will build during PHASE 1-->
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(FeatureDbiDebugging)'=='true'" Include="HostLocal\mdruntime-dbi.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/runtime/dirs.proj b/src/md/runtime/dirs.proj
deleted file mode 100644
index 2bd75ad013..0000000000
--- a/src/md/runtime/dirs.proj
+++ /dev/null
@@ -1,22 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--The following projects will build during PHASE 1-->
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="wks\mdruntime.nativeproj" />
- <ProjectFile Include="dbi\dirs.proj" />
- <ProjectFile Include="dac\dirs.proj" />
- <ProjectFile Include="winrt\mdruntime-winrt.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/runtime/wks/MDRuntime.nativeproj b/src/md/runtime/wks/MDRuntime.nativeproj
deleted file mode 100644
index bc95bf65f2..0000000000
--- a/src/md/runtime/wks/MDRuntime.nativeproj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>wks</MetadataFlavor>
- </PropertyGroup>
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\Runtime\Runtime.settings.targets" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>MDRuntime</OutputName>
- </PropertyGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/winmd/WinMD.settings.targets b/src/md/winmd/WinMD.settings.targets
deleted file mode 100644
index 58fa8ee682..0000000000
--- a/src/md/winmd/WinMD.settings.targets
+++ /dev/null
@@ -1,49 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <!--
- We build MetaData in several flavors:
- - Full version (wks) - part of clr.dll/coreclr.dll.
- - dac version - does not need Emit APIs.
- - Standalone versions for:
- * mscordbi.dll (hands the interfaces over to debugger client (e.g. VS) - does not need Emit APIs.
- * CorDbg - does not need Emit APIs.
- * WinRT
- - Read-Only version (ships in Windows) - does not need Emit and Internal APIs.
- - Read-Writer version (ships as private component of MidlRt.exe SDK tool) - does not need Internal APIs.
- -->
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\MD.props" />
-
- <PropertyGroup>
- <MDWinMDSrcDirectory>$(ClrSrcDirectory)\MD\WinMD\</MDWinMDSrcDirectory>
- <UserIncludes>
- $(UserIncludes);
- $(ClrSrcDirectory)\MD\inc;
- $(ClrSrcDirectory)\vm;
- $(ClrSrcDirectory)\strongname\inc
- </UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <!--OK to delete NO_NTDLL for devdiv builds.-->
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <!--PCH: Both precompiled header and cpp are on the same ..\ path this is likely to be wrong.-->
- <PCHCompile>$(MDWinMDSrcDirectory)\stdafx.cpp</PCHCompile>
- <PCHObject>stdafx_winmd.obj</PCHObject>
- <LinkUseCMT>false</LinkUseCMT>
- </PropertyGroup>
-
- <ItemGroup>
- <ProjectReference Include="$(ClrSrcDirectory)inc\corguids.nativeproj">
- <Comment>clrinternal.h</Comment>
- </ProjectReference>
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="$(MDWinMDSrcDirectory)\Adapter.cpp" />
- <CppCompile Include="$(MDWinMDSrcDirectory)\WinMDImport.cpp" />
- <CppCompile Include="$(MDWinMDSrcDirectory)\WinMDInternalImportRO.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/md/winmd/crossgen/MDWinMD_crossgen.nativeproj b/src/md/winmd/crossgen/MDWinMD_crossgen.nativeproj
deleted file mode 100644
index 88520924f6..0000000000
--- a/src/md/winmd/crossgen/MDWinMD_crossgen.nativeproj
+++ /dev/null
@@ -1,14 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>wks</MetadataFlavor>
- <OutputName>mdwinmd_crossgen</OutputName>
- </PropertyGroup>
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\WinMD\WinMD.settings.targets" />
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/winmd/dac/dirs.proj b/src/md/winmd/dac/dirs.proj
deleted file mode 100644
index c73e2390db..0000000000
--- a/src/md/winmd/dac/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\mdwinmd_dac.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/winmd/dbi/MDWinMD-dbi.props b/src/md/winmd/dbi/MDWinMD-dbi.props
deleted file mode 100644
index 829e1d7c6d..0000000000
--- a/src/md/winmd/dbi/MDWinMD-dbi.props
+++ /dev/null
@@ -1,9 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>mscordbi</MetadataFlavor>
- </PropertyGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\WinMD\WinMD.settings.targets" />
-
-</Project>
diff --git a/src/md/winmd/dbi/MDWinMD_dbi.nativeproj b/src/md/winmd/dbi/MDWinMD_dbi.nativeproj
deleted file mode 100644
index 3223689415..0000000000
--- a/src/md/winmd/dbi/MDWinMD_dbi.nativeproj
+++ /dev/null
@@ -1,17 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>mscordbi</MetadataFlavor>
- </PropertyGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\WinMD\WinMD.settings.targets" />
-
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>MDWinMD_dbi</OutputName>
- </PropertyGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/md/winmd/dbi/dirs.proj b/src/md/winmd/dbi/dirs.proj
deleted file mode 100644
index 88863b561f..0000000000
--- a/src/md/winmd/dbi/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Condition="'$(FeatureDbiDebugging)'=='true'" Include="HostLocal\MDWinMD-dbi.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/winmd/dirs.proj b/src/md/winmd/dirs.proj
deleted file mode 100644
index 7788116cc7..0000000000
--- a/src/md/winmd/dirs.proj
+++ /dev/null
@@ -1,21 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="wks\mdwinmd_wks.nativeproj" />
- <ProjectFile Include="dbi\dirs.proj" />
- <ProjectFile Include="dac\dirs.proj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/md/winmd/wks/MDWinMD_wks.nativeproj b/src/md/winmd/wks/MDWinMD_wks.nativeproj
deleted file mode 100644
index cc0a6f2bc1..0000000000
--- a/src/md/winmd/wks/MDWinMD_wks.nativeproj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <!-- All features are set in file:..\..\MD.props -->
- <MetadataFlavor>wks</MetadataFlavor>
- </PropertyGroup>
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\MD\WinMD\WinMD.settings.targets" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>MDWinMD_wks</OutputName>
- </PropertyGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/mscorlib/Common/PinnableBufferCache.cs b/src/mscorlib/Common/PinnableBufferCache.cs
index fc6e13a899..6c85a5a2f6 100644
--- a/src/mscorlib/Common/PinnableBufferCache.cs
+++ b/src/mscorlib/Common/PinnableBufferCache.cs
@@ -11,7 +11,6 @@ using System.Collections.Concurrent;
using System.Threading;
using System.Runtime.CompilerServices;
using System.Diagnostics;
-using System.Security.Permissions;
#if PINNABLEBUFFERCACHE_MSCORLIB
namespace System.Threading
@@ -21,22 +20,6 @@ namespace System
{
internal sealed class PinnableBufferCache
{
- /// <summary>
- /// Create a new cache for pinned byte[] buffers
- /// </summary>
- /// <param name="cacheName">A name used in diagnostic messages</param>
- /// <param name="numberOfElements">The size of byte[] buffers in the cache (they are all the same size)</param>
- public PinnableBufferCache(string cacheName, int numberOfElements) : this(cacheName, () => new byte[numberOfElements]) { }
-
- /// <summary>
- /// Get a buffer from the buffer manager. If no buffers exist, allocate a new one.
- /// </summary>
- public byte[] AllocateBuffer() { return (byte[])Allocate(); }
-
- /// <summary>
- /// Return a buffer back to the buffer manager.
- /// </summary>
- public void FreeBuffer(byte[] buffer) { Free(buffer); }
/// <summary>
/// Create a PinnableBufferCache that works on any object (it is intended for OverlappedData)
@@ -537,9 +520,6 @@ namespace System
public bool IsEnabled() { return false; }
public void DebugMessage(string message) {}
- public void DebugMessage1(string message, long value) {}
- public void DebugMessage2(string message, long value1, long value2) {}
- public void DebugMessage3(string message, long value1, long value2, long value3) {}
public void Create(string cacheName) {}
public void AllocateBuffer(string cacheName, ulong objectId, int objectHash, int objectGen, int freeCountAfter) {}
public void AllocateBufferFromNotGen2(string cacheName, int notGen2CountAfter) {}
@@ -560,10 +540,5 @@ namespace System
{
return 0;
}
-
- static internal unsafe long AddressOfObject(byte[] array)
- {
- return 0;
- }
}
}
diff --git a/src/mscorlib/Common/Preprocessed/AssemblyRefs.g.cs b/src/mscorlib/Common/Preprocessed/AssemblyRefs.g.cs
index 24a1866a5d..d5866a4bcd 100644
--- a/src/mscorlib/Common/Preprocessed/AssemblyRefs.g.cs
+++ b/src/mscorlib/Common/Preprocessed/AssemblyRefs.g.cs
@@ -15,1068 +15,19 @@ using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
-
-// #line 1 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-/**
- * Version strings for Frameworks.
- *
- */
-
-//
-// Insert just the #defines in winver.h, so that the
-// C# compiler can include this file after macro preprocessing.
-//
-
-
-
-
-
-
-
-
-
-// #line 21 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-
-//
-// winver.h is bad for rc.exe & csc.exe whereas verrsrc.h does not have an include guard
-// yet defines the same structure twice if RC_INVOKED is not #defined.
-// Temporarily enable RC_INVOKED protection around the #include.
-//
-
-
-
-
-
-
-// #line 1 "c:\\program files (x86)\\windows kits\\8.1\\include\\um\\verrsrc.h"
-// #line 1 "c:\\program files (x86)\\windows kits\\8.1\\include\\shared\\winapifamily.h"
-/*
-
-
-
-Module Name:
-
- winapifamily.h
-
-Abstract:
-
- Master include file for API family partitioning.
-
-*/
-
-
-
-
-
-// #pragma once
-// #line 21 "c:\\program files (x86)\\windows kits\\8.1\\include\\shared\\winapifamily.h"
-
-/*
- * When compiling C and C++ code using SDK header files, the development
- * environment can specify a target platform by #define-ing the
- * pre-processor symbol WINAPI_FAMILY to one of the following values.
- * Each FAMILY value denotes an application family for which a different
- * subset of the total set of header-file-defined APIs are available.
- * Setting the WINAPI_FAMILY value will effectively hide from the
- * editing and compilation environments the existence of APIs that
- * are not applicable to the family of applications targeting a
- * specific platform.
- */
-
-/*
- * The WINAPI_FAMILY values of 0 and 1 are reserved to ensure that
- * an error will occur if WINAPI_FAMILY is set to any
- * WINAPI_PARTITION value (which must be 0 or 1, see below).
- */
-
-
-
-/* The value of WINAPI_FAMILY_DESKTOP_APP may change in future SDKs. */
-/* Additional WINAPI_FAMILY values may be defined in future SDKs. */
-
-/*
- * For compatibility with Windows 8 header files, the following
- * synonym for WINAPI_FAMILY_PC_APP is temporarily #define'd.
- * Use of this symbol should be considered deprecated.
- */
-
-
-/*
- * If no WINAPI_FAMILY value is specified, then all APIs available to
- * Windows desktop applications are exposed.
- */
-
-
-// #line 59 "c:\\program files (x86)\\windows kits\\8.1\\include\\shared\\winapifamily.h"
-
-/*
- * API PARTITONs are part of an indirection mechanism for mapping between
- * individual APIs and the FAMILYs to which they apply.
- * Each PARTITION is a category or subset of named APIs. PARTITIONs
- * are permitted to have overlapping membership -- some single API
- * might be part of more than one PARTITION. In support of new
- * FAMILYs that might be added in future SDKs, any single current
- * PARTITION might in that future SDK be split into two or more new PARTITIONs.
- * Accordingly, application developers should avoid taking dependencies on
- * PARTITION names; developers' only dependency upon the symbols defined
- * in this file should be their reliance on the WINAPI_FAMILY names and values.
- */
-
-/*
- * Current PARTITIONS are each #undef'ed below, and then will be #define-ed
- * to be either 1 or 0 or depending on the active WINAPI_FAMILY.
- */
-
-
-
-
-
-
-
-/*
- * The mapping between families and partitions is summarized here.
- * An X indicates that the given partition is active for the given
- * platform/family.
- *
- * +---------------+
- * | *Partition* |
- * +---+---+---+---+
- * | | | | P |
- * | | | | H |
- * | D | | | O |
- * | E | | P | N |
- * | S | | C | E |
- * | K | | _ | _ |
- * | T | A | A | A |
- * +-------------------------+-+ O | P | P | P |
- * | *Platform/Family* \| P | P | P | P |
- * +---------------------------+---+---+---+---+
- * | WINAPI_FAMILY_DESKTOP_APP | X | X | X | |
- * +---------------------------+---+---+---+---+
- * | WINAPI_FAMILY_PC_APP | | X | X | |
- * +---------------------------+---+---+---+---+
- * | WINAPI_FAMILY_PHONE_APP | | X | | X |
- * +---------------------------+---+---+---+---+
- *
- * The table above is encoded in the following expressions,
- * each of which evaluates to 1 or 0.
- *
- * Whenever a new family is added, all of these expressions
- * need to be reconsidered.
- */
-
-
-// #line 118 "c:\\program files (x86)\\windows kits\\8.1\\include\\shared\\winapifamily.h"
-
-
-
-
-
-/*
- * For compatibility with Windows Phone 8 header files, the following
- * synonym for WINAPI_PARTITION_PHONE_APP is temporarily #define'd.
- * Use of this symbol should be regarded as deprecated.
- */
-
-
-/*
- * Header files use the WINAPI_FAMILY_PARTITION macro to assign one or
- * more declarations to some group of partitions. The macro chooses
- * whether the preprocessor will emit or omit a sequence of declarations
- * bracketed by an #if/#endif pair. All header file references to the
- * WINAPI_PARTITION_* values should be in the form of occurrences of
- * WINAPI_FAMILY_PARTITION(...).
- *
- * For example, the following usage of WINAPI_FAMILY_PARTITION identifies
- * a sequence of declarations that are part of both the Windows Desktop
- * Partition and the Windows-Phone-Specific Store Partition:
- *
- * #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PHONE_APP)
- * ...
- * #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PHONE_APP)
- *
- * The comment on the closing #endif allow tools as well as people to find the
- * matching #ifdef properly.
- *
- * Usages of WINAPI_FAMILY_PARTITION may be combined, when the partitition definitions are
- * related. In particular one might use declarations like
- *
- * #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
- *
- * or
- *
- * #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
- *
- * Direct references to WINAPI_PARTITION_ values (eg #if !WINAPI_FAMILY_PARTITION_...)
- * should not be used.
- */
-
-
-/*
- * Macro used to #define or typedef a symbol used for selective deprecation
- * of individual methods of a COM interfaces that are otherwise available
- * for a given set of partitions.
- */
-
-
-/*
- * For compatibility with Windows 8 header files, the following
- * symbol is temporarily conditionally #define'd. Additional symbols
- * like this should be not defined in winapifamily.h, but rather should be
- * introduced locally to the header files of the component that needs them.
- */
-
-
-// #line 179 "c:\\program files (x86)\\windows kits\\8.1\\include\\shared\\winapifamily.h"
-
-// #line 181 "c:\\program files (x86)\\windows kits\\8.1\\include\\shared\\winapifamily.h"
-// #line 2 "c:\\program files (x86)\\windows kits\\8.1\\include\\um\\verrsrc.h"
-
-/****************************************************************************
-** *
-* verrsrc.h - Version Resource definitions *
-* *
-* Include file declaring version resources in rc files *
-* *
-* *
-* *
-\*****************************************************************************/
-
-// #pragma region Application Family
-
-
-/* ----- Symbols ----- */
-
-
-
-
-/* ----- VS_VERSION.dwFileFlags ----- */
-
-
-
-
-// #line 27 "c:\\program files (x86)\\windows kits\\8.1\\include\\um\\verrsrc.h"
-
-
-
-/* ----- VS_VERSION.dwFileFlags ----- */
-
-
-
-
-
-
-
-/* ----- VS_VERSION.dwFileOS ----- */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/* ----- VS_VERSION.dwFileType ----- */
-
-
-
-
-
-
-
-
-/* ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV ----- */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/* ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT ----- */
-
-
-
-
-// #line 88 "c:\\program files (x86)\\windows kits\\8.1\\include\\um\\verrsrc.h"
-// // #pragma region
-
-// #pragma region Desktop Family
-
-
-/* ----- VerFindFile() flags ----- */
-
-
-
-
-
-
-/* ----- VerInstallFile() flags ----- */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// #line 171 "c:\\program files (x86)\\windows kits\\8.1\\include\\um\\verrsrc.h"
-// #pragma region
-
-// #line 37 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-
-
-
-//
-// Include the definitions for rmj, rmm, rup, rpt
-//
-
-// #line 1 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\product_version.h"
-
-
-
-
-// #line 6 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\product_version.h"
-
-// #line 1 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\version.h"
-// #line 1 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\ndpversion_generated.h"
-
-
-
-
-// #line 6 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\ndpversion_generated.h"
-
-
-
-
-
-// #line 1 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\buildnumber.h"
-
-
-
-
-// #line 6 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\buildnumber.h"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// #line 12 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\ndpversion_generated.h"
-// #line 2 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\version.h"
-
-
-
-
-
-
-
-
-
-
-
-
-// #line 8 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\product_version.h"
-
-
-
-// #line 1 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\asm_version.h"
-
-
-
-
-
-
-
-
-
-
-
-// #line 13 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\asm_version.h"
-
-
-
-
-
-// #line 19 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\asm_version.h"
-
-// #line 12 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\product_version.h"
-// #line 13 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\product_version.h"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// #line 161 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\product_version.h"
-
-
-
-
-
-// #line 167 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\product_version.h"
-
-
-
-
-
-// #line 173 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\product_version.h"
-
-
-
-
-
-
-// #line 180 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\product_version.h"
-
-// #line 48 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-/*
- * Product version, name and copyright
- */
-
-// #line 1 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-
-
-
-
-// #line 6 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-
-
-
-// #line 10 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-
-
-
-
-// #line 15 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-// #line 16 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-
-// The following copyright is intended for display in the Windows Explorer property box for a DLL or EXE
-// See \\lca\pdm\TMGUIDE\Copyright\Crt_Tmk_Notices.xls for copyright guidelines
-//
-
-
-
-
-// #line 25 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-
-
-
-// #line 29 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-
-
-
-
-
-
-
-// #line 37 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-// #line 38 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-
-// VSWhidbey #495749
-// Note: The following legal copyright is intended for situations where the copyright symbol doesn't display
-// properly. For example, the following copyright should be displayed as part of the logo for DOS command-line
-// applications. If you change the format or wording of the following copyright, you should apply the same
-// change to fxresstrings.txt (for managed applications).
-
-
-
-// #line 48 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxverstrings.h"
-// #line 54 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-/*
- * File version, names, description.
- */
-
-// FX_VER_INTERNALNAME_STR is passed in by the build environment.
-
-
-
-
-
-
-
-// FX_VER_FILEDESCRIPTION_STR is defined in RC files that include fxver.h
-
-
-
-// #line 72 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-
-
-// #line 78 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-
-
-
-// #line 85 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-//URT_VFT passed in by the build environment.
-
-
-
-
-
-
-
-/* default is nodebug */
-
-
-
-
-// #line 102 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-// DEBUG flag is set for debug build, not set for retail build
-// #if defined(DEBUG) || defined(_DEBUG)
-// #define VER_DEBUG VS_FF_DEBUG
-// #else // DEBUG
-// #define VER_DEBUG 0
-// #endif // DEBUG
-
-
-/* default is prerelease */
-
-
-// #line 115 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-// #line 117 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-// PRERELEASE flag is always set unless building SHIP version
-// #ifndef _SHIP
-// #define VER_PRERELEASE VS_FF_PRERELEASE
-// #else
-// #define VER_PRERELEASE 0
-// #endif // _SHIP
-
-
-
-// #line 128 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-// #line 130 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-// PRIVATEBUILD flag is set if not built by build lab
-// #ifndef _VSBUILD
-// #define VER_PRIVATEBUILD VS_FF_PRIVATEBUILD
-// #else // _VSBUILD
-// #define VER_PRIVATEBUILD 0
-// #endif // _VSBUILD
-
-
-
-// #line 141 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-// #line 143 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// #line 164 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-
-
-
-
-
-
-// #line 174 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-
-
-// #line 180 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-
-
-
-
-
-// #line 189 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-// #line 193 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// #line 248 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-// #line 250 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-
-
-// #line 254 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-
-// #line 256 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\include\\fxver.h"
-// #line 24 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\assemblyrefs.cspp"
-
internal static class FXAssembly {
internal const string Version = "4.0.0.0";
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// #line 44 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\assemblyrefs.cspp"
-
internal static class ThisAssembly {
- internal const string Title = "System.Private.CoreLib.dll";
- internal const string Description = "System.Private.CoreLib.dll";
- internal const string DefaultAlias = "System.Private.CoreLib.dll";
- internal const string Copyright = "\u00A9 Microsoft Corporation. All rights reserved.";
internal const string Version = "4.0.0.0";
- internal const string InformationalVersion = "4.0.22306.0";
- internal const string DailyBuildNumberStr = "22306";
- internal const string BuildRevisionStr = "0";
internal const int DailyBuildNumber = 22306;
}
-
-#pragma warning disable 436
internal static class AssemblyRef {
internal const string EcmaPublicKey = "b77a5c561934e089";
internal const string EcmaPublicKeyToken = "b77a5c561934e089";
- internal const string EcmaPublicKeyFull = "00000000000000000400000000000000";
-
- internal const string SilverlightPublicKey = "31bf3856ad364e35";
- internal const string SilverlightPublicKeyToken = "31bf3856ad364e35";
- internal const string SilverlightPublicKeyFull = "0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9";
-
- internal const string SilverlightPlatformPublicKey = "7cec85d7bea7798e";
- internal const string SilverlightPlatformPublicKeyToken = "7cec85d7bea7798e";
- internal const string SilverlightPlatformPublicKeyFull = "00240000048000009400000006020000002400005253413100040000010001008D56C76F9E8649383049F383C44BE0EC204181822A6C31CF5EB7EF486944D032188EA1D3920763712CCB12D75FB77E9811149E6148E5D32FBAAB37611C1878DDC19E20EF135D0CB2CFF2BFEC3D115810C3D9069638FE4BE215DBF795861920E5AB6F7DB2E2CEEF136AC23D5DD2BF031700AEC232F6C6B1C785B4305C123B37AB";
-
-
- internal const string PlatformPublicKey = SilverlightPlatformPublicKey;
- internal const string PlatformPublicKeyToken = SilverlightPlatformPublicKeyToken;
- internal const string PlatformPublicKeyFull = SilverlightPlatformPublicKeyFull;
-
-
-
-
-// #line 81 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\assemblyrefs.cspp"
-
- internal const string Mscorlib = "mscorlib, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + PlatformPublicKey;
- internal const string SystemData = "System.Data, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + EcmaPublicKey;
- internal const string SystemDataOracleClient = "System.Data.OracleClient, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + EcmaPublicKey;
- internal const string System = "System, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + PlatformPublicKey;
- internal const string SystemCore = "System.Core, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + PlatformPublicKey;
- internal const string SystemNumerics = "System.Numerics, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + PlatformPublicKey;
- internal const string SystemRuntimeRemoting = "System.Runtime.Remoting, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + EcmaPublicKey;
- internal const string SystemThreadingTasksDataflow = "System.Threading.Tasks.Dataflow, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + PlatformPublicKey;
- internal const string SystemWindowsForms = "System.Windows.Forms, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + EcmaPublicKey;
- internal const string SystemXml = "System.Xml, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + EcmaPublicKey;
-
- internal const string MicrosoftPublicKey = "b03f5f7f11d50a3a";
internal const string MicrosoftPublicKeyToken = "b03f5f7f11d50a3a";
- internal const string MicrosoftPublicKeyFull = "002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293";
-
- internal const string SharedLibPublicKey = "31bf3856ad364e35";
- internal const string SharedLibPublicKeyToken = "31bf3856ad364e35";
- internal const string SharedLibPublicKeyFull = "0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9";
-
- internal const string SystemComponentModelDataAnnotations = "System.ComponentModel.DataAnnotations, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + SharedLibPublicKey;
- internal const string SystemConfiguration = "System.Configuration, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemConfigurationInstall = "System.Configuration.Install, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemDeployment = "System.Deployment, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemDesign = "System.Design, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemDirectoryServices = "System.DirectoryServices, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemDrawingDesign = "System.Drawing.Design, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemDrawing = "System.Drawing, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemEnterpriseServices = "System.EnterpriseServices, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemManagement = "System.Management, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemMessaging = "System.Messaging, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemNetHttp = "System.Net.Http, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemNetHttpWebRequest = "System.Net.Http.WebRequest, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemRuntimeSerializationFormattersSoap = "System.Runtime.Serialization.Formatters.Soap, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
internal const string SystemRuntimeWindowsRuntime = "System.Runtime.WindowsRuntime, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + EcmaPublicKey;
- internal const string SystemRuntimeWindowsRuntimeUIXaml = "System.Runtime.WindowsRuntimeUIXaml, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + EcmaPublicKey;
- internal const string SystemSecurity = "System.Security, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemServiceModelWeb = "System.ServiceModel.Web, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + SharedLibPublicKey;
- internal const string SystemServiceProcess = "System.ServiceProcess, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemWeb = "System.Web, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemWebAbstractions = "System.Web.Abstractions, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + SharedLibPublicKey;
- internal const string SystemWebDynamicData = "System.Web.DynamicData, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + SharedLibPublicKey;
- internal const string SystemWebDynamicDataDesign = "System.Web.DynamicData.Design, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + SharedLibPublicKey;
- internal const string SystemWebEntityDesign = "System.Web.Entity.Design, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + EcmaPublicKey;
- internal const string SystemWebExtensions = "System.Web.Extensions, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + SharedLibPublicKey;
- internal const string SystemWebExtensionsDesign = "System.Web.Extensions.Design, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + SharedLibPublicKey;
- internal const string SystemWebMobile = "System.Web.Mobile, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemWebRegularExpressions = "System.Web.RegularExpressions, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string SystemWebRouting = "System.Web.Routing, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + SharedLibPublicKey;
- internal const string SystemWebServices = "System.Web.Services, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
-
- internal const string WindowsBase = "WindowsBase, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + SharedLibPublicKey;
-
- internal const string MicrosoftVisualStudio = "Microsoft.VisualStudio, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string MicrosoftVisualStudioWindowsForms = "Microsoft.VisualStudio.Windows.Forms, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string VJSharpCodeProvider = "VJSharpCodeProvider, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
-
- internal const string ASPBrowserCapsPublicKey = "b7bd7678b977bd8f";
- internal const string ASPBrowserCapsFactory = "ASP.BrowserCapsFactory, Version=" + FXAssembly.Version + ", Culture=neutral, PublicKeyToken=" + ASPBrowserCapsPublicKey;
-
-
- // We do not want these sitting in non-VS specific files. If you need them,
- // add this line to sources:
- // C_DEFINES=$(C_DEFINES) /DINCLUDE_VSREFS
- //
- // M.VS.dll and M.VSDesigner.dll should also be included here, but it
- // turns out that everyone, from Data, to XSP to Winforms to diagnostics
- // has thrown some designer-specific code into M.VS.dll or M.VSDesigner.dll.
- //
-
-
-
-
-
-
-// #line 157 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\assemblyrefs.cspp"
- // VS Provided Assemblies... we can't strong bind to these, they
- // update their assembly versions too often
- //
- internal const string MicrosoftVSDesigner = "Microsoft.VSDesigner, Version=10.0.0.0, Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string MicrosoftVisualStudioWeb = "Microsoft.VisualStudio.Web, Version=10.0.0.0, Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string MicrosoftWebDesign = "Microsoft.Web.Design.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string MicrosoftVSDesignerMobile = "Microsoft.VSDesigner.Mobile, Version=8.0.0.0, Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- internal const string MicrosoftJScript = "Microsoft.JScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
-
- //internal const string MicrosoftVSDesigner = "Microsoft.VSDesigner, Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
- //internal const string MicrosoftJScript = "Microsoft.JScript, Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
}
-#pragma warning restore 436
-// #line 172 "d:\\projectk_2\\src\\ndp\\clr\\src\\bcl.oss\\open\\src\\common\\assemblyrefs.cspp"
diff --git a/src/mscorlib/System.Private.CoreLib.csproj b/src/mscorlib/System.Private.CoreLib.csproj
index f1f944a6f6..3ac5dbd287 100644
--- a/src/mscorlib/System.Private.CoreLib.csproj
+++ b/src/mscorlib/System.Private.CoreLib.csproj
@@ -2,7 +2,7 @@
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Always use latest Roslyn compiler -->
- <Import Project="..\..\Tools\net45\roslyn\build\Microsoft.Net.Compilers.props" Condition="'$(OS)'=='Windows_NT' and '$(UseLegacyCompiler)'!='true'" />
+ <Import Project="..\..\Tools\net45\roslyn\build\Microsoft.Net.Compilers.props" Condition="'$(OS)'=='Windows_NT'" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
@@ -11,13 +11,13 @@
<!-- Compilation options -->
<PropertyGroup>
- <AvailablePlatforms>amd64,x86,arm,arm-softfp,arm64</AvailablePlatforms>
+ <AvailablePlatforms>amd64,x86,arm,armel,arm64</AvailablePlatforms>
<Configuration Condition=" '$(Configuration)' == '' ">$(BuildType)</Configuration>
<Platform Condition=" '$(Platform)' == '' ">$(BuildArch)</Platform>
<!-- The CLR properties use amd64 as their platform string, we want to keep in sync with those, so set Platform appropriately,
though still use the 'x64' output path (see use of BuildArch below) -->
<Platform Condition=" '$(Platform)' == 'x64' ">amd64</Platform>
- <Platform Condition=" '$(Platform)' == 'arm-softfp' ">arm</Platform>
+ <Platform Condition=" '$(Platform)' == 'armel' ">arm</Platform>
<ProjectGuid>{3DA06C3A-2E7B-4CB7-80ED-9B12916013F9}</ProjectGuid>
<OutputType>Library</OutputType>
@@ -40,12 +40,10 @@
<NoWarn>649,3019,414,169,3015</NoWarn>
<GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute>
- <BclRewriterModelFile>$(MSBuildThisFileDirectory)model.xml</BclRewriterModelFile>
-
<SignAssembly>true</SignAssembly>
<DelaySign>true</DelaySign>
- <DefineConstants>$(DefineConstants);_USE_NLS_PLUS_TABLE;RESOURCE_SATELLITE_CONFIG;INSIDE_CLR;CODE_ANALYSIS_BASELINE</DefineConstants>
+ <DefineConstants>$(DefineConstants);CORECLR;_USE_NLS_PLUS_TABLE;RESOURCE_SATELLITE_CONFIG;INSIDE_CLR;CODE_ANALYSIS_BASELINE</DefineConstants>
</PropertyGroup>
<!-- Add Serviceable attribute to the project's metadata -->
@@ -116,7 +114,6 @@
Helper Paths
-->
<PropertyGroup>
- <PostProcessingToolsPath Condition="'$(PostProcessingToolsPath)'==''">$(MSBuildThisFileDirectory)Tools\PostProcessingTools.targets</PostProcessingToolsPath>
<CommonPath>$(MSBuildThisFileDirectory)Common</CommonPath>
<BclSourcesRoot>$(MSBuildThisFileDirectory)src</BclSourcesRoot>
<CoreFxSourcesRoot>$(MSBuildThisFileDirectory)corefx</CoreFxSourcesRoot>
@@ -128,19 +125,13 @@
<PropertyGroup>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)' == ''">$(RootBinDir)obj</BaseIntermediateOutputPath>
<IntermediateOutputPath Condition="'$(IntermediateOutputPath)' == ''">$(BaseIntermediateOutputPath)\$(BuildOS).$(BuildArch).$(Configuration)</IntermediateOutputPath>
- <OutputPath Condition="'$(OutputPath)' == ''">$(BaseIntermediateOutputPath)\$(BuildOS).$(BuildArch).$(Configuration)</OutputPath>
- <FinalOutputPath Condition="'$(FinalOutputPath)' == ''">$(BinDir)</FinalOutputPath>
+ <OutputPath Condition="'$(OutputPath)' == ''">$(BinDir)</OutputPath>
</PropertyGroup>
<!-- Msbuild variables needed to get CoreCLR features to be set properly. -->
<PropertyGroup>
<ClrProduct>core_clr</ClrProduct>
<BuildForCoreSystem>true</BuildForCoreSystem>
-
- <!-- These are needed by BCLRewriter -->
- <_BuildType Condition="'$(Configuration)' == 'Debug'">chk</_BuildType>
- <_BuildType Condition="'$(Configuration)' == 'Checked'">chk</_BuildType>
- <_BuildType Condition="'$(Configuration)' == 'Release'">ret</_BuildType>
<!-- These are needed to make sure we have the right set of defines -->
<TargetArch Condition="'$(Platform)'=='x86'">i386</TargetArch>
@@ -152,7 +143,1076 @@
<Import Project="$(MSBuildThisFileDirectory)..\..\clr.defines.targets" />
<!-- Sources -->
- <Import Project="$(MSBuildThisFileDirectory)\mscorlib.shared.sources.props" />
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AccessedThroughPropertyAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\RuntimeHelpers.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CompilerGeneratedAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CustomConstantAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\DateTimeConstantAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\DiscardableAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\DecimalConstantAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\DisablePrivateReflectionAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CompilationRelaxations.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CompilerGlobalScopeAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ExtensionAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\FormattableStringFactory.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\FixedBufferAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\IndexerNameAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\InternalsVisibleToAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\IsVolatile.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\MethodImplAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\FixedAddressValueTypeAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\UnsafeValueTypeAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AssemblySettingAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\TypeDependencyAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CompilerMarshalOverride.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\jithelpers.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\Unsafe.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\SpecialNameAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\SuppressMergeCheckAttribute.cs" />
+ <MscorlibSources Condition="'$(FeatureICastable)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ICastable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\SuppressIldasmAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\TypeForwardedToAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\TypeForwardedFromAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ReferenceAssemblyAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\RuntimeCompatibilityAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\RuntimeWrappedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ConditionalWeakTable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CallerFilePathAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CallerLineNumberAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CallerMemberNameAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\StateMachineAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\IteratorStateMachineAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AsyncStateMachineAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AsyncMethodBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\IAsyncStateMachine.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\INotifyCompletion.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\TaskAwaiter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\YieldAwaitable.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Reliability\CriticalFinalizerObject.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Reliability\ReliabilityContractAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Reliability\PrePrepareMethodAttribute.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\MemoryFailPoint.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\GcSettings.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\CollectionBase.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\ArrayList.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Comparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\CompatibleComparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\ListDictionaryInternal.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\EmptyReadOnlyDictionaryInternal.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Hashtable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\DictionaryEntry.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\ICollection.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IComparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IDictionary.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IDictionaryEnumerator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IEnumerable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IEnumerator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IEqualityComparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IHashCodeProvider.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IList.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IStructuralEquatable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\IStructuralComparable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\StructuralComparisons.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ComponentModel\EditorBrowsableAttribute.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ArrayWithOffset.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\Attributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\CallingConvention.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\CharSet.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\COMException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\CriticalHandle.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ExternalException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\GcHandle.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\GCHandleCookieTable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\HandleRef.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ICustomMarshaler.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\InvalidOleVariantTypeException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\LayoutKind.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\Marshal.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\MarshalDirectiveException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\PInvokeMap.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\RuntimeEnvironment.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SEHException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SafeBuffer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SafeHandle.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\BStrWrapper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\CurrencyWrapper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ErrorWrapper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UnknownWrapper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\VariantWrapper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComMemberType.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ICustomAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ICustomQueryInterface.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\InvalidComObjectException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SafeArrayRankMismatchException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SafeArrayTypeMismatchException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\NativeCallableAttribute.cs" />
+ <MscorlibSources Condition="'$(FeatureCominterop)' != 'true'" Include="$(BclSourcesRoot)\System\Runtime\InteropServices\NonPortable.cs" />
+ <MscorlibSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\InteropServices\DispatchWrapper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ICustomFactory.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Runtime\InteropServices\StringBuffer.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(FeatureClassicCominterop)' == 'true'">
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ITypeLibConverter.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\Expando\IExpando.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(FeatureClassicCominterop)' == 'true'">
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComEventsHelper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComEventsInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComEventsMethod.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComEventsSink.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\NativeMethods.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IBindCtx.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IConnectionPointContainer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IConnectionPoint.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumMoniker.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumConnections.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumConnectionPoints.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumString.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumVARIANT.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IMoniker.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IPersistFile.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IRunningObjectTable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IStream.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeComp.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeLib.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeLib2.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeInfo2.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(FeatureCominterop)' == 'true'">
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\Attributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ConstantSplittableMap.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\DictionaryKeyCollection.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\DictionaryValueCollection.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\EnumeratorToIteratorAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\VectorToListAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\VectorToCollectionAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\VectorViewToReadOnlyCollectionAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\MapToDictionaryAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\MapToCollectionAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\MapViewToReadOnlyCollectionAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ListToVectorAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\DictionaryToMapAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\BindableVectorToListAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\BindableVectorToCollectionAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ListToBindableVectorAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ListToBindableVectorViewAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\EventRegistrationToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\EventRegistrationTokenTable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IActivationFactory.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IRestrictedErrorInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IMapViewToIReadOnlyDictionaryAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IVectorViewToIReadOnlyListAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IReadOnlyDictionaryToIMapViewAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IReadOnlyListToIVectorViewAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IteratorToEnumeratorAdapter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ManagedActivationFactory.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\NativeMethods.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\PropertyValue.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\WindowsRuntimeMarshal.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\WindowsRuntimeMetadata.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IClosable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\RuntimeClass.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(FeatureCominterop)' == 'true'">
+ <MscorlibSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\CLRIPropertyValueImpl.cs' />
+ <MscorlibSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\CLRIReferenceImpl.cs' />
+ <MscorlibSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IPropertyValue.cs' />
+ <MscorlibSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IReference.cs' />
+ <MscorlibSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\WindowsFoundationEventHandler.cs' />
+ <MscorlibSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ICustomPropertyProvider.cs' />
+ <MscorlibSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ICustomProperty.cs' />
+ <MscorlibSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\CustomPropertyImpl.cs' />
+ <MscorlibSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\WindowsRuntimeBufferHelper.cs' />
+ </ItemGroup>
+ <ItemGroup Condition="'$(FeatureCominterop)' == 'true'">
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IIterable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IIterator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IVector.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IMap.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\CLRIKeyValuePairImpl.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AggregateException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppContext\AppContext.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppContext\AppContextSwitches.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.CoreClrOverrides.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.Defaults.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.Defaults.Central.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\CurrentTimeZone.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeZone.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Object.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ICloneable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Action.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Array.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ArraySegment.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IComparable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IEquatable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ThrowHelper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Tuple.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\String.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\String.Comparison.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\String.Manipulation.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\String.Searching.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\StringComparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\StringComparison.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\StringSplitOptions.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\StringBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\StringBuilderCache.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Exception.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\FormattableString.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DateTime.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DateTimeKind.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DateTimeOffset.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\SystemException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\OutOfMemoryException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\StackOverflowException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DataMisalignedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ExecutionEngineException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Delegate.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MulticastDelegate.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\__Filters.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\__HResults.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\BCLDebug.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MemberAccessException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Activator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AccessViolationException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ApplicationException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppDomain.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppDomainSetup.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppDomainManager.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IAppDomainPauseManager.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppDomainAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AppDomainUnloadedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ArgumentException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ArgumentNullException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ArgumentOutOfRangeException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ArgIterator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ArithmeticException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ArrayTypeMismatchException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AsyncCallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Attribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AttributeTargets.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\AttributeUsageAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\BadImageFormatException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\BitConverter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Boolean.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Buffer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Byte.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Char.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\CharEnumerator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\CLSCompliantAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TypeUnloadedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\CompatibilitySwitches.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\LowLevelConsole.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Convert.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\StringFreezingAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Currency.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DayOfWeek.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DBNull.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Decimal.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DefaultBinder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DelegateSerializationHolder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DivideByZeroException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Double.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DuplicateWaitObjectException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Empty.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Enum.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\EntryPointNotFoundException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\DllNotFoundException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Environment.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\EventArgs.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\EventHandler.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\FieldAccessException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\FlagsAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\FormatException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\GC.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Guid.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IAsyncResult.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ICustomFormatter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IDisposable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IFormatProvider.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IFormattable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IndexOutOfRangeException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IObservable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IObserver.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IProgress.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\InsufficientMemoryException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\InsufficientExecutionStackException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Lazy.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Int16.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Int32.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Int64.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IntPtr.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Internal.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\InvalidCastException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\InvalidOperationException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\InvalidProgramException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\InvalidTimeZoneException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IConvertible.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IServiceObjectProvider.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MarshalByRefObject.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Math.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MathF.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\mda.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MethodAccessException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MidpointRounding.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MissingFieldException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MissingMemberException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MissingMethodException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\MulticastNotSupportedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\NonSerializedAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\NotFiniteNumberException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\NotImplementedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\NotSupportedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\NullReferenceException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Number.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ObjectDisposedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ObsoleteAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\OperatingSystem.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\OperationCanceledException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\OverflowException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ParamArrayAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ParamsArray.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ParseNumbers.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\PlatformID.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\PlatformNotSupportedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Progress.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Random.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\RankException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ResId.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\RtType.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\RuntimeArgumentHandle.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\RuntimeHandles.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\SByte.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\SerializableAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\SharedStatics.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Single.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\StubHelpers.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ThreadAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeoutException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeSpan.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeZoneInfo.AdjustmentRule.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeZoneInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeZoneInfo.StringSerializer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeZoneInfo.TransitionTime.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeZoneNotFoundException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Type.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TypeAccessException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TypeNameParser.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TypeCode.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TypedReference.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TypeInitializationException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TypeLoadException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\UInt16.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\UInt32.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\UInt64.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\UIntPtr.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\UnauthorizedAccessException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\UnitySerializationHolder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\UnhandledExceptionEventArgs.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\UnhandledExceptionEventHandler.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ValueType.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Version.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Void.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\WeakReference.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\WeakReferenceOfT.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\XmlIgnoreMemberAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\CLRConfig.cs" />
+ <MscorlibSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\__ComObject.cs" />
+ <MscorlibSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\Variant.cs" />
+ <MscorlibSources Condition="'$(FeatureClassicCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\OleAutBinder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ByReference.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Span.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ReadOnlySpan.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' == 'true'">
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeZoneInfo.Unix.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' != 'true'">
+ <MscorlibSources Include="$(BclSourcesRoot)\System\TimeZoneInfo.Win32.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\Internal\Runtime\Augments\EnvironmentAugments.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\Internal\Runtime\Augments\RuntimeThread.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\__Filters.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\AmbiguousMatchException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Assembly.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\AssemblyAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\AssemblyName.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\AssemblyNameFlags.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Associates.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\CustomAttributeExtensions.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\CustomAttributeFormatException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Binder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\BindingFlags.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\CallingConventions.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ConstructorInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\CustomAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\DefaultMemberAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\EventAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\EventInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\FieldAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\FieldInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\GenericParameterAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ICustomAttributeProvider.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\IReflectableType.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\IntrospectionExtensions.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\RuntimeReflectionExtensions.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\InterfaceMapping.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\InvalidFilterCriteriaException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\IReflect.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\LoaderAllocator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ManifestResourceInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MdConstant.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MdImport.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MemberFilter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MemberInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MemberInfoSerializationHolder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MemberTypes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MethodAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MethodBase.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MethodImplAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MethodInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Missing.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Module.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ObfuscateAssemblyAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ObfuscationAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\MethodBody.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ParameterAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ParameterInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ParameterModifier.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Pointer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\PropertyAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\PropertyInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ReflectionContext.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ReflectionTypeLoadException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\ResourceAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\StrongNameKeyPair.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\TargetException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\TargetInvocationException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\TargetParameterCountException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\TypeAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\TypeDelegator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\TypeFilter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\TypeInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\AssemblyBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\AssemblyBuilderData.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\AssemblyBuilderAccess.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\AQNBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ConstructorBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\DynamicILGenerator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\DynamicMethod.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\EventBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\EventToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\FieldBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\FieldToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ILGenerator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ISymWrapperCore.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\Label.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\LocalBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\MethodBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\MethodBuilderInstantiation.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\SymbolType.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\SymbolMethod.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\CustomAttributeBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\MethodToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ModuleBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ModuleBuilderData.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\PEFileKinds.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\OpCodes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\Opcode.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\OpcodeType.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\StackBehaviour.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\OperandType.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\FlowControl.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ParameterBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ParameterToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\PropertyBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\PropertyToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\SignatureHelper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\SignatureToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\StringToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\TypeBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\TypeBuilderInstantiation.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\GenericTypeParameterBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\EnumBuilder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\TypeToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Emit\XXXOnTypeBuilderInstantiation.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Reflection\Metadata\AssemblyExtensions.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeFormat.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeParse.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeStyles.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\NumberStyles.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\TimeSpanFormat.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\TimeSpanParse.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\DaylightTime.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(FeatureCoreFxGlobalization)' != 'true'">
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\BidiCategory.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\Calendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CalendarData.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CalendarAlgorithmType.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CalendarWeekRule.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CalendricalCalculationsHelper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CharUnicodeInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CompareInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CultureInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CultureNotFoundException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CultureTypes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeFormatInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeFormatInfoScanner.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\DigitShapes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\EncodingDataItem.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\EncodingTable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\GlobalizationAssembly.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\GregorianCalendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\GregorianCalendarTypes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\GregorianCalendarHelper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\HebrewCalendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\HijriCalendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\UmAlQuraCalendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\PersianCalendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\IdnMapping.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\JapaneseCalendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\KoreanCalendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\RegionInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\SortKey.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\SortVersion.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\StringInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\TaiwanCalendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\TextElementEnumerator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\TextInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\ThaiBuddhistCalendar.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\TimeSpanStyles.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\NumberFormatInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\UnicodeCategory.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\CultureData.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\HebrewNumber.cs" />
+ <MscorlibSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\ChineseLunisolarCalendar.cs" />
+ <MscorlibSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\EastAsianLunisolarCalendar.cs" />
+ <MscorlibSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\JapaneseLunisolarCalendar.cs" />
+ <MscorlibSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\JulianCalendar.cs" />
+ <MscorlibSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\KoreanLunisolarCalendar.cs" />
+ <MscorlibSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\TaiwanLunisolarCalendar.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\SR.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(FeatureCoreFxGlobalization)' == 'true'">
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\Calendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendarAlgorithmType.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendarData.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendarWeekRule.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendricalCalculationsHelper.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CharUnicodeInfo.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CharUnicodeInfoData.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\ChineseLunisolarCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CompareInfo.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureData.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureInfo.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureTypes.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureNotFoundException.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\DateTimeFormatInfo.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\DateTimeFormatInfoScanner.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\EastAsianLunisolarCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\GregorianCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\GregorianCalendarHelper.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\GregorianCalendarTypes.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\HebrewCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\HebrewNumber.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\HijriCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\IdnMapping.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\InternalGlobalizationHelper.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\JapaneseCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\JapaneseLunisolarCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\JulianCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\KoreanCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\KoreanLunisolarCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\NumberFormatInfo.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\PersianCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\RegionInfo.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\SortKey.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\SortVersion.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\StringInfo.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\TaiwanCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\TaiwanLunisolarCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\TextElementEnumerator.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\TextInfo.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\ThaiBuddhistCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\TimeSpanStyles.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\UmAlQuraCalendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\UnicodeCategory.cs " />
+ </ItemGroup>
+ <ItemGroup Condition="'$(FeatureCoreFxGlobalization)' == 'true' and '$(TargetsUnix)' == 'true'">
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\EncodingTable.Unix.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Globalization\EncodingDataItem.Unix.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\Normalization.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Calendar.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Casing.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Collation.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Idna.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Locale.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Normalization.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.ResultCode.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.TimeZoneInfo.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Utils.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendarData.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CompareInfo.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureData.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureInfo.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\DigitShapes.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\HijriCalendar.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\IdnMapping.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\JapaneseCalendar.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\LocaleData.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Globalization\TextInfo.Unix.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\AbandonedMutexException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\AsyncLocal.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\AutoResetEvent.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\SendOrPostCallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\SynchronizationContext.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\EventResetMode.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\EventWaitHandle.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ExecutionContext.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Interlocked.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\LockRecursionException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ManualResetEvent.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Monitor.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Mutex.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Overlapped.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ParameterizedThreadStart.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Semaphore.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\SemaphoreFullException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\SynchronizationLockException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Thread.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ThreadAbortException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ThreadInterruptedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ThreadPool.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ThreadPriority.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ThreadStart.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ThreadState.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ThreadStateException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\ThreadStaticAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ThreadStartException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Timeout.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Timer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Volatile.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\WaitHandle.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\WaitHandleCannotBeOpenedException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ApartmentState.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\SpinLock.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\SpinWait.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\CountdownEvent.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\LazyInitializer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ThreadLocal.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\SemaphoreSlim.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\ManualResetEventSlim.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\CancellationTokenRegistration.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\CancellationTokenSource.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\CancellationToken.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\future.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\FutureFactory.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\Task.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskContinuation.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskCanceledException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskSchedulerException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskExceptionHolder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskFactory.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskScheduler.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\ThreadPoolTaskScheduler.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskCompletionSource.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\AsyncCausalityTracer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\ConcurrentExclusiveSchedulerPair.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\ProducerConsumerQueues.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TPLETWProvider.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskToApm.cs" />
+ <MscorlibSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\Threading\Tasks\IAsyncCausalityTracerStatics.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\Error.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' == 'true'">
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Microsoft\Win32\SafeHandles\SafeFileHandle.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.Unix.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' != 'true'">
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Microsoft\Win32\SafeHandles\SafeFileHandle.Windows.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.Win32.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\FileStreamCompletionSource.Win32.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\Win32Marshal.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\Path.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\PathInternal.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' == 'true'">
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\Path.Unix.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\PathInternal.Unix.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' != 'true'">
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\Path.Win32.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\Path.Windows.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\PathHelper.Windows.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\PathInternal.Windows.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\PathInternal.Windows.StringBuffer.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Threading\DeferredDisposableLifetime.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Threading\ClrThreadPoolBoundHandle.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Threading\ClrThreadPoolBoundHandleOverlapped.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Threading\ClrThreadPoolPreAllocatedOverlapped.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\__Error.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\__HResults.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\BinaryReader.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\BinaryWriter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\Directory.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\SearchOption.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\DirectoryNotFoundException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\DriveNotFoundException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\EncodingCache.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\EndOfStreamException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\File.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\FileAccess.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\FileLoadException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\FileMode.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\FileNotFoundException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\FileOptions.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\FileShare.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\FileSystemEnumerable.cs" Condition="'$(TargetsUnix)' == 'true'" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\IOException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\MemoryStream.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\PathTooLongException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\PinnedBufferMemoryStream.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\SeekOrigin.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\Stream.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\StreamHelpers.CopyValidation.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\TextReader.cs" Condition="'$(TargetsUnix)' == 'true'" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\StreamReader.cs" Condition="'$(TargetsUnix)' == 'true'" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\UnmanagedMemoryAccessor.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\UnmanagedMemoryStream.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\IO\UnmanagedMemoryStreamWrapper.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Security\Attributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Security\SecurityException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Security\SecurityState.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Security\VerificationException.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Security\Util\URLString.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Assert.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\AssertFilter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\AssertFilters.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\ConditionalAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Debugger.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\DebuggerAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\ICustomDebuggerNotification.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\log.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\LoggingLevels.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\LogSwitch.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Stacktrace.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Stackframe.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\EditAndContinueHelper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\ActivityTracker.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventActivityOptions.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventDescriptor.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventProvider.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventSource.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventSource_CoreCLR.cs" />
+ <MscorlibSources Condition="'$(FeatureXplatEventSource)' == 'true'" Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\XplatEventLogger.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventSourceException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\FrameworkEventSource.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\StubEnvironment.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\Winmeta.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\ArrayTypeInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\ConcurrentSet.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\ConcurrentSetItem.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\DataCollector.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EmptyStruct.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EnumerableTypeInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EnumHelper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventDataAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventFieldAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventFieldFormat.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventIgnoreAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventPayload.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventSourceOptions.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\FieldMetadata.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\InvokeTypeInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\NameInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\PropertyValue.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\PropertyAnalysis.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\SimpleEventTypes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\SimpleTypeInfos.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\Statics.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingDataCollector.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingDataType.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingEventSource.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingEventTraits.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingEventTypes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingMetadataCollector.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingTypeInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TypeAnalysis.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\CodeAnalysis\SuppressMessageAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Contracts\Contracts.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\Contracts\ContractsBCL.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymDocumentWriter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymWriter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\SymAddressKind.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\Token.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\ExceptionServices\CorruptingExceptionCommon.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\ExceptionServices\ExceptionServicesCommon.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\ExceptionServices\ExceptionNotification.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Loader\AssemblyLoadContext.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\FormatterConverter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\FormatterServices.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\IDeserializationCallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\IFormatterConverter.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\IObjectReference.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\ISerializable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationAttributes.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationInfoEnumerator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\StreamingContext.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SafeSerializationManager.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Versioning\TargetFrameworkAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Versioning\CompatibilitySwitch.cs" Condition="'$(TargetsUnix)' == 'true'" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Versioning\NonVersionableAttribute.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Configuration\Assemblies\AssemblyHashAlgorithm.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Configuration\Assemblies\AssemblyVersionCompatibility.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Runtime\Remoting\ObjectHandle.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\ASCIIEncoding.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\Decoder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\DecoderNLS.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\DecoderBestFitFallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\DecoderExceptionFallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\DecoderFallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\DecoderReplacementFallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\Encoder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\EncoderNLS.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\EncoderBestFitFallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\EncoderExceptionFallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\EncoderFallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\EncoderReplacementFallback.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\Encoding.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\EncodingForwarder.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\EncodingInfo.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\EncodingNLS.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\EncodingProvider.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\Latin1Encoding.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\Normalization.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\Normalization.Windows.cs" Condition="'$(TargetsUnix)' != 'true'"/>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\UnicodeEncoding.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\UTF7Encoding.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\UTF8Encoding.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Text\UTF32Encoding.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\Microsoft\Win32\UnsafeNativeMethods.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\Microsoft\Win32\Win32Native.cs" />
+ <MscorlibSources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\Registry.cs" />
+ <MscorlibSources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryKey.cs" />
+ <MscorlibSources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryValueKind.cs" />
+ <MscorlibSources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryView.cs" />
+ <MscorlibSources Condition="'$(FeatureClassicCominterop)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\OAVariantLib.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\__FastResourceComparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\__HResults.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\FileBasedResourceGroveler.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\IResourceGroveler.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\IResourceReader.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\LooselyLinkedResourceReference.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\ManifestBasedResourceGroveler.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\MissingManifestResourceException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\MissingSatelliteAssemblyException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\NeutralResourcesLanguageAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\ResourceFallbackManager.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\ResourceManager.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\ResourceReader.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\ResourceSet.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\ResourceTypeCode.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\RuntimeResourceSet.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\SatelliteContractVersionAttribute.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Resources\UltimateResourceFallbackLocation.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Nullable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\Comparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\Dictionary.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\EqualityComparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\DebugView.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\ICollection.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\IComparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\IDictionary.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\IEnumerable.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\IEnumerator.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\IEqualityComparer.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\IList.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\IReadOnlyCollection.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\IReadOnlyList.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\IReadOnlyDictionary.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\KeyNotFoundException.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\KeyValuePair.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\List.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Generic\ArraySortHelper.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\ObjectModel\Collection.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\ObjectModel\ReadOnlyCollection.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\ObjectModel\ReadOnlyDictionary.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\ObjectModel\KeyedCollection.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\ConcurrentStack.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\IProducerConsumerCollection.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\ConcurrentDictionary.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\ConcurrentQueue.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeFindHandle.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeLibraryHandle.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeWaitHandle.cs" />
+ <MscorlibSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\Win32SafeHandles.cs" />
+ <MscorlibSources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeRegistryHandle.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(BclSourcesRoot)\System\Numerics\Hashing\HashHelpers.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Buffers\ArrayPool.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Buffers\ArrayPoolEventSource.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Buffers\ConfigurableArrayPool.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Buffers\TlsOverPerCoreLockedStacksArrayPool.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Buffers\Utilities.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Security\CryptographicException.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' != 'true'">
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\HResults.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\Interop.BOOL.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\Interop.Errors.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\Interop.Libraries.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\BCrypt\Interop.BCryptGenRandom.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\BCrypt\Interop.NTSTATUS.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.CancelIoEx.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.CloseHandle.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.CreateFile.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.FileTypes.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.FileOperations.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.FlushFileBuffers.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.FormatMessage.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.GetFileInformationByHandleEx.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.GetFileType_SafeHandle.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.GetFullPathNameW.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.GetLongPathNameW.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.GetTempFileNameW.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.GetTempPathW.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.LockFile.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.ReadFile_SafeHandle_IntPtr.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.ReadFile_SafeHandle_NativeOverlapped.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.SafeCreateFile.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.SECURITY_ATTRIBUTES.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.SecurityOptions.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.SetEndOfFile.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.SetErrorMode.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.SetFileInformationByHandle.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.SetFilePointerEx.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.UnsafeCreateFile.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.WriteFile_SafeHandle_IntPtr.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.WriteFile_SafeHandle_NativeOverlapped.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Security\SecureString.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' != 'true'">
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Security\SafeBSTRHandle.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Security\SecureString.Windows.cs" />
+ <!-- Interop sources -->
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\Crypt32\Interop.CryptProtectMemory.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\NtDll\Interop.ZeroMemory.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\kernel32\Interop.WideCharToMultiByte.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\oleaut32\Interop.SysAllocStringLen.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Windows\oleaut32\Interop.SysStringLen.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' == 'true'">
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\Security\SecureString.Unix.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetsUnix)' == 'true'">
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\System\HResults.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\Interop.Errors.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\Interop.IOErrors.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\Interop.Libraries.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Close.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.GetCwd.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.GetUnixName.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Fcntl.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.FLock.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.FSync.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.FTruncate.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.LSeek.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.MksTemps.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Open.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.OpenFlags.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.PathConf.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Permissions.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.PosixFAdvise.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Read.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Stat.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Unlink.cs" />
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Write.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <MscorlibSources Include="$(CoreFxSourcesRoot)\Debug.cs" />
+ </ItemGroup>
<!-- Include additional sources shared files in the compilation -->
<ItemGroup>
@@ -164,12 +1224,19 @@
<!-- Include Internals visible to file in the compilation -->
<MscorlibSources Include="$(BclSourcesRoot)\mscorlib.Friends.cs" />
+
+ <!-- TODO list of types to be cleaned up from CoreLib -->
+ <MscorlibSources Include="$(BclSourcesRoot)\CleanupToDoList.cs" />
</ItemGroup>
<ItemGroup>
<!-- We want the sources to show up nicely in VS-->
<Compile Include="@(MscorlibSources)">
</Compile>
+ <Compile Include="src\System\Runtime\CompilerServices\ITuple.cs" />
+ <Compile Include="src\System\Runtime\CompilerServices\TupleElementNamesAttribute.cs" />
+ <Compile Include="src\System\TupleExtensions.cs" />
+ <Compile Include="src\System\ValueTuple.cs" />
</ItemGroup>
<!-- Resources -->
@@ -201,7 +1268,14 @@
</EmbeddedResource>
</ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.Targets" />
+ <PropertyGroup Condition="'$(BuildOS)' == 'Windows_NT'">
+ <EnableDotnetAnalyzers Condition="'$(EnableDotnetAnalyzers)'==''">true</EnableDotnetAnalyzers>
+ <UseWin32Apis>true</UseWin32Apis>
+ <OSGroup>Windows_NT</OSGroup>
+ </PropertyGroup>
+ <Import Project="$(ToolsDir)\codeAnalysis.targets" />
+
+ <Import Project="$(ToolsDir)\Microsoft.CSharp.Targets" />
<PropertyGroup>
<StrongNameSig>Silverlight</StrongNameSig>
@@ -226,5 +1300,4 @@
<Import Project="GenerateSplitStringResources.targets"/>
<Import Project="GenerateCompilerResponseFile.targets"/>
- <Import Project="$(PostProcessingToolsPath)" />
</Project>
diff --git a/src/mscorlib/System.Private.CoreLib.sln b/src/mscorlib/System.Private.CoreLib.sln
index 60a2316957..4ab28af2d9 100644
--- a/src/mscorlib/System.Private.CoreLib.sln
+++ b/src/mscorlib/System.Private.CoreLib.sln
@@ -5,11 +5,6 @@ VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Private.CoreLib", "System.Private.CoreLib.csproj", "{3DA06C3A-2E7B-4CB7-80ED-9B12916013F9}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E16B1C86-C275-495B-80D6-7CE8196A18B4}"
- ProjectSection(SolutionItems) = preProject
- model.xml = model.xml
- EndProjectSection
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Checked|amd64 = Checked|amd64
diff --git a/src/mscorlib/Tools/BclRewriter/BclRewriter.targets b/src/mscorlib/Tools/BclRewriter/BclRewriter.targets
deleted file mode 100644
index 5515b000a7..0000000000
--- a/src/mscorlib/Tools/BclRewriter/BclRewriter.targets
+++ /dev/null
@@ -1,35 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
-
- <!-- ********************************************************************************************* -->
- <!-- *** Task -->
- <!-- ********************************************************************************************* -->
-
- <PropertyGroup>
- <BclRewriterModelFile Condition="'$(BclRewriterModelFile)'==''">$(MscorlibDir)model.xml</BclRewriterModelFile>
- <BclRewriterWorkDir>$(IntermediateOutputPath)\BclRewriter</BclRewriterWorkDir>
- <BclRewriterSymbolOutput>$(IntermediateOutputPath)\BclRewriter\$(TargetName).pdb</BclRewriterSymbolOutput>
- <BclRewriterOutput>$(IntermediateOutputPath)\BclRewriter\$(TargetName)$(TargetExt)</BclRewriterOutput>
- <TargetPath>$(BclRewriterOutput)</TargetPath>
- </PropertyGroup>
-
- <ItemGroup>
- <RewrittenAssembly Include="$(BclRewriterOutput)" />
- </ItemGroup>
-
- <Target Name="RewriteWithBclRewriter"
- Inputs="$(BclRewriterModelFile);@(AnnotatedAssembly)" Outputs="@(RewrittenAssembly)" DependsOnTargets="$(BclRewriterDependencyTargets)">
-
- <PropertyGroup>
- <OSPlatform Condition="'$(TargetsWindows)' == 'true'">win</OSPlatform>
- <OSPlatform Condition="'$(TargetsWindows)' != 'true'">unix</OSPlatform>
- <BclRewriterCommand Condition="'$(BclRewriterCommand)'==''">"$(ToolRuntimePath)dotnetcli/$(ToolHost)" "$(ToolsDir)BclRewriter.exe"</BclRewriterCommand>
- </PropertyGroup>
-
- <Exec Command="$(BclRewriterCommand) -in:&quot;@(AnnotatedAssembly)&quot; -out:&quot;$(BclRewriterOutput)&quot; -include:&quot;$(BclRewriterModelFile)&quot; -platform:$(OSPlatform) -architecture:$(Platform) -flavor:$(_BuildType) -removeSerializable- -define:&quot;$(DefineConstants)&quot; -keepTempFiles+" StandardOutputImportance="Normal" />
-
- <!-- Update the location of the symbol file-->
- <PropertyGroup>
- <CurrentAssemblyPdb>$(BclRewriterSymbolOutput)</CurrentAssemblyPdb>
- </PropertyGroup>
- </Target>
-</Project> \ No newline at end of file
diff --git a/src/mscorlib/Tools/PostProcessingTools.targets b/src/mscorlib/Tools/PostProcessingTools.targets
deleted file mode 100644
index 2f48efcecb..0000000000
--- a/src/mscorlib/Tools/PostProcessingTools.targets
+++ /dev/null
@@ -1,28 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
- <Import Project="$(MSBuildThisFileDirectory)\BclRewriter\BclRewriter.targets" />
-
- <ItemGroup>
- <AnnotatedAssembly Include="$(IntermediateOutputPath)$(TargetName)$(TargetExt)"/>
-
- <Clean Include="@(RewrittenAssembly->'$(FinalOutputPath)\%(Filename)%(Extension)')" />
- <Clean Include="$(FinalOutputPath)\$(TargetName).pdb" />
- </ItemGroup>
-
- <Import Project="$(ToolsDir)toolruntime.targets" />
-
- <PropertyGroup>
- <CurrentAssemblyPdb>$(IntermediateOutputPath)$(TargetName).pdb</CurrentAssemblyPdb>
- <PostProcessingTargets>RewriteWithBclRewriter</PostProcessingTargets>
- <BclRewriterDependencyTargets>EnsureBuildToolsRuntime</BclRewriterDependencyTargets>
- </PropertyGroup>
-
- <Target Name="AfterBuild" DependsOnTargets="$(PostProcessingTargets)"
- Inputs="@(RewrittenAssembly)" Outputs="$(FinalOutputPath)\%(RewrittenAssembly.FileName)%(RewrittenAssembly.Extension)">
-
- <!-- Copy to the final output location -->
- <Copy Retries="3" SourceFiles="@(RewrittenAssembly)" DestinationFiles="$(FinalOutputPath)\%(RewrittenAssembly.FileName)%(RewrittenAssembly.Extension)"/>
- <Message Importance="High" Text="$(MSBuildProjectName) -&gt; $(FinalOutputPath)%(RewrittenAssembly.FileName)%(RewrittenAssembly.Extension)" />
- <Copy Condition="Exists('$(CurrentAssemblyPdb)')" Retries="3" SourceFiles="$(CurrentAssemblyPdb)" DestinationFiles="$(FinalOutputPath)\$(TargetName).pdb"/>
- </Target>
-
-</Project> \ No newline at end of file
diff --git a/src/mscorlib/corefx/Interop/Unix/Interop.Libraries.cs b/src/mscorlib/corefx/Interop/Unix/Interop.Libraries.cs
index a11a23ce8c..1b6d26e40f 100644
--- a/src/mscorlib/corefx/Interop/Unix/Interop.Libraries.cs
+++ b/src/mscorlib/corefx/Interop/Unix/Interop.Libraries.cs
@@ -7,12 +7,6 @@ internal static partial class Interop
private static partial class Libraries
{
internal const string GlobalizationInterop = "System.Globalization.Native"; // CoreFX wrappers for ICU
- // Shims
internal const string SystemNative = "System.Native";
- internal const string HttpNative = "System.Net.Http.Native";
- internal const string NetSecurityNative = "System.Net.Security.Native";
- internal const string CryptoNative = "System.Security.Cryptography.Native.OpenSsl";
- internal const string GlobalizationNative = "System.Globalization.Native";
- internal const string CompressionNative = "System.IO.Compression.Native";
}
}
diff --git a/src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Casing.cs b/src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Casing.cs
index 115a8393be..769506b8f6 100644
--- a/src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Casing.cs
+++ b/src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Casing.cs
@@ -11,15 +11,12 @@ internal static partial class Interop
{
internal static partial class GlobalizationInterop
{
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_ChangeCase")]
internal unsafe static extern void ChangeCase(char* src, int srcLen, char* dstBuffer, int dstBufferCapacity, bool bToUpper);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_ChangeCaseInvariant")]
internal unsafe static extern void ChangeCaseInvariant(char* src, int srcLen, char* dstBuffer, int dstBufferCapacity, bool bToUpper);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_ChangeCaseTurkish")]
internal unsafe static extern void ChangeCaseTurkish(char* src, int srcLen, char* dstBuffer, int dstBufferCapacity, bool bToUpper);
}
diff --git a/src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Collation.cs b/src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Collation.cs
index eb9e0743bc..25585c6dfb 100644
--- a/src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Collation.cs
+++ b/src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Collation.cs
@@ -11,52 +11,41 @@ internal static partial class Interop
{
internal static partial class GlobalizationInterop
{
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetSortHandle")]
internal unsafe static extern ResultCode GetSortHandle(byte[] localeName, out SafeSortHandle sortHandle);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_CloseSortHandle")]
internal unsafe static extern void CloseSortHandle(IntPtr handle);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_CompareString")]
internal unsafe static extern int CompareString(SafeSortHandle sortHandle, char* lpStr1, int cwStr1Len, char* lpStr2, int cwStr2Len, CompareOptions options);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_IndexOf")]
internal unsafe static extern int IndexOf(SafeSortHandle sortHandle, string target, int cwTargetLength, char* pSource, int cwSourceLength, CompareOptions options);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_LastIndexOf")]
internal unsafe static extern int LastIndexOf(SafeSortHandle sortHandle, string target, int cwTargetLength, char* pSource, int cwSourceLength, CompareOptions options);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_IndexOfOrdinalIgnoreCase")]
internal unsafe static extern int IndexOfOrdinalIgnoreCase(string target, int cwTargetLength, char* pSource, int cwSourceLength, bool findLast);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_StartsWith")]
[return: MarshalAs(UnmanagedType.Bool)]
internal unsafe static extern bool StartsWith(SafeSortHandle sortHandle, string target, int cwTargetLength, string source, int cwSourceLength, CompareOptions options);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_EndsWith")]
[return: MarshalAs(UnmanagedType.Bool)]
internal unsafe static extern bool EndsWith(SafeSortHandle sortHandle, string target, int cwTargetLength, string source, int cwSourceLength, CompareOptions options);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetSortKey")]
internal unsafe static extern int GetSortKey(SafeSortHandle sortHandle, string str, int strLength, byte* sortKey, int sortKeyLength, CompareOptions options);
- [SecurityCritical]
[DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_CompareStringOrdinalIgnoreCase")]
internal unsafe static extern int CompareStringOrdinalIgnoreCase(char* lpStr1, int cwStr1Len, char* lpStr2, int cwStr2Len);
[DllImport(Libraries.GlobalizationInterop, EntryPoint = "GlobalizationNative_GetSortVersion")]
internal static extern int GetSortVersion();
- [SecurityCritical]
internal class SafeSortHandle : SafeHandle
{
private SafeSortHandle() :
@@ -66,11 +55,9 @@ internal static partial class Interop
public override bool IsInvalid
{
- [SecurityCritical]
get { return handle == IntPtr.Zero; }
}
- [SecurityCritical]
protected override bool ReleaseHandle()
{
CloseSortHandle(handle);
diff --git a/src/mscorlib/corefx/Interop/Windows/Interop.Errors.cs b/src/mscorlib/corefx/Interop/Windows/Interop.Errors.cs
new file mode 100644
index 0000000000..7eeb18de01
--- /dev/null
+++ b/src/mscorlib/corefx/Interop/Windows/Interop.Errors.cs
@@ -0,0 +1,71 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+internal partial class Interop
+{
+ internal partial class Errors
+ {
+ internal const int ERROR_SUCCESS = 0x0;
+ internal const int ERROR_INVALID_FUNCTION = 0x1;
+ internal const int ERROR_FILE_NOT_FOUND = 0x2;
+ internal const int ERROR_PATH_NOT_FOUND = 0x3;
+ internal const int ERROR_ACCESS_DENIED = 0x5;
+ internal const int ERROR_INVALID_HANDLE = 0x6;
+ internal const int ERROR_NOT_ENOUGH_MEMORY = 0x8;
+ internal const int ERROR_INVALID_DATA = 0xD;
+ internal const int ERROR_INVALID_DRIVE = 0xF;
+ internal const int ERROR_NO_MORE_FILES = 0x12;
+ internal const int ERROR_NOT_READY = 0x15;
+ internal const int ERROR_BAD_LENGTH = 0x18;
+ internal const int ERROR_SHARING_VIOLATION = 0x20;
+ internal const int ERROR_LOCK_VIOLATION = 0x21;
+ internal const int ERROR_HANDLE_EOF = 0x26;
+ internal const int ERROR_FILE_EXISTS = 0x50;
+ internal const int ERROR_INVALID_PARAMETER = 0x57;
+ internal const int ERROR_BROKEN_PIPE = 0x6D;
+ internal const int ERROR_INSUFFICIENT_BUFFER = 0x7A;
+ internal const int ERROR_INVALID_NAME = 0x7B;
+ internal const int ERROR_NEGATIVE_SEEK = 0x83;
+ internal const int ERROR_DIR_NOT_EMPTY = 0x91;
+ internal const int ERROR_BAD_PATHNAME = 0xA1;
+ internal const int ERROR_LOCK_FAILED = 0xA7;
+ internal const int ERROR_BUSY = 0xAA;
+ internal const int ERROR_ALREADY_EXISTS = 0xB7;
+ internal const int ERROR_BAD_EXE_FORMAT = 0xC1;
+ internal const int ERROR_ENVVAR_NOT_FOUND = 0xCB;
+ internal const int ERROR_FILENAME_EXCED_RANGE = 0xCE;
+ internal const int ERROR_EXE_MACHINE_TYPE_MISMATCH = 0xD8;
+ internal const int ERROR_PIPE_BUSY = 0xE7;
+ internal const int ERROR_NO_DATA = 0xE8;
+ internal const int ERROR_PIPE_NOT_CONNECTED = 0xE9;
+ internal const int ERROR_MORE_DATA = 0xEA;
+ internal const int ERROR_NO_MORE_ITEMS = 0x103;
+ internal const int ERROR_PARTIAL_COPY = 0x12B;
+ internal const int ERROR_ARITHMETIC_OVERFLOW = 0x216;
+ internal const int ERROR_PIPE_CONNECTED = 0x217;
+ internal const int ERROR_PIPE_LISTENING = 0x218;
+ internal const int ERROR_OPERATION_ABORTED = 0x3E3;
+ internal const int ERROR_IO_PENDING = 0x3E5;
+ internal const int ERROR_NO_TOKEN = 0x3f0;
+ internal const int ERROR_DLL_INIT_FAILED = 0x45A;
+ internal const int ERROR_NOT_FOUND = 0x490;
+ internal const int ERROR_NON_ACCOUNT_SID = 0x4E9;
+ internal const int ERROR_NOT_ALL_ASSIGNED = 0x514;
+ internal const int ERROR_UNKNOWN_REVISION = 0x519;
+ internal const int ERROR_INVALID_OWNER = 0x51B;
+ internal const int ERROR_INVALID_PRIMARY_GROUP = 0x51C;
+ internal const int ERROR_NO_SUCH_PRIVILEGE = 0x521;
+ internal const int ERROR_PRIVILEGE_NOT_HELD = 0x522;
+ internal const int ERROR_INVALID_ACL = 0x538;
+ internal const int ERROR_INVALID_SECURITY_DESCR = 0x53A;
+ internal const int ERROR_INVALID_SID = 0x539;
+ internal const int ERROR_BAD_IMPERSONATION_LEVEL = 0x542;
+ internal const int ERROR_CANT_OPEN_ANONYMOUS = 0x543;
+ internal const int ERROR_NO_SECURITY_ON_OBJECT = 0x546;
+ internal const int ERROR_TRUSTED_RELATIONSHIP_FAILURE = 0x6FD;
+ internal const int ERROR_RESOURCE_LANG_NOT_FOUND = 0x717;
+ internal const int EFail = unchecked((int)0x80004005);
+ internal const int E_FILENOTFOUND = unchecked((int)0x80070002);
+ }
+}
diff --git a/src/mscorlib/corefx/Interop/Windows/Interop.Libraries.cs b/src/mscorlib/corefx/Interop/Windows/Interop.Libraries.cs
index 1165a2da95..f19f9dcf52 100644
--- a/src/mscorlib/corefx/Interop/Windows/Interop.Libraries.cs
+++ b/src/mscorlib/corefx/Interop/Windows/Interop.Libraries.cs
@@ -6,77 +6,10 @@ internal static partial class Interop
{
internal static class Libraries
{
- internal const string Advapi32 = "advapi32.dll";
internal const string BCrypt = "BCrypt.dll";
- internal const string Combase = "combase.dll";
- internal const string Console_L1 = "api-ms-win-core-console-l1-1-0.dll";
- internal const string Console_L2 = "api-ms-win-core-console-l2-1-0.dll";
- internal const string CoreFile_L1 = "api-ms-win-core-file-l1-1-0.dll";
- internal const string CoreFile_L1_2 = "api-ms-win-core-file-l1-2-0.dll";
- internal const string CoreFile_L2 = "api-ms-win-core-file-l2-1-0.dll";
internal const string Crypt32 = "crypt32.dll";
- internal const string Debug = "api-ms-win-core-debug-l1-1-0.dll";
- internal const string Error_L1 = "api-ms-win-core-winrt-error-l1-1-0.dll";
- internal const string ErrorHandling = "api-ms-win-core-errorhandling-l1-1-0.dll";
- internal const string Eventing = "api-ms-win-eventing-provider-l1-1-0.dll";
- internal const string Handle = "api-ms-win-core-handle-l1-1-0.dll";
- internal const string Heap = "api-ms-win-core-heap-obsolete-l1-1-0.dll";
- internal const string Heap_L1 = "api-ms-win-core-heap-l1-1-0.dll";
- internal const string IO = "api-ms-win-core-io-l1-1-0.dll";
- internal const string IpHlpApi = "iphlpapi.dll";
internal const string Kernel32 = "kernel32.dll";
- internal const string Kernel32_L1 = "api-ms-win-core-kernel32-legacy-l1-1-1.dll";
- internal const string Kernel32_L2 = "api-ms-win-core-kernel32-legacy-l1-1-0.dll";
- internal const string Keyboard = "ext-ms-win-ntuser-keyboard-l1-2-1.dll";
- internal const string LibraryLoader = "api-ms-win-core-libraryloader-l1-1-0.dll";
- internal const string Localization = "api-ms-win-core-localization-l1-2-0.dll";
- internal const string Memory_L1_0 = "api-ms-win-core-memory-l1-1-0.dll";
- internal const string Memory_L1_1 = "api-ms-win-core-memory-l1-1-1.dll";
- internal const string Memory_L1_2 = "api-ms-win-core-memory-l1-1-2.dll";
- internal const string Memory_L1_3 = "api-ms-win-core-memory-l1-1-3.dll";
- internal const string NCrypt = "ncrypt.dll";
internal const string NtDll = "ntdll.dll";
internal const string OleAut32 = "oleaut32.dll";
- internal const string Pipe = "api-ms-win-core-namedpipe-l1-1-0.dll";
- internal const string Pipe_L2 = "api-ms-win-core-namedpipe-l1-2-1.dll";
- internal const string ProcessEnvironment = "api-ms-win-core-processenvironment-l1-1-0.dll";
- internal const string ProcessThread_L1 = "api-ms-win-core-processthreads-l1-1-0.dll";
- internal const string ProcessThread_L1_1 = "api-ms-win-core-processthreads-l1-1-1.dll";
- internal const string ProcessThread_L1_2 = "api-ms-win-core-processthreads-l1-1-2.dll";
- internal const string ProcessTopology = "api-ms-win-core-processtopology-obsolete-l1-1-0.dll";
- internal const string Profile = "api-ms-win-core-profile-l1-1-0.dll";
- internal const string Psapi = "api-ms-win-core-psapi-l1-1-0.dll";
- internal const string Psapi_Obsolete = "api-ms-win-core-psapi-obsolete-l1-1-0.dll";
- internal const string Registry_L1 = "api-ms-win-core-registry-l1-1-0.dll";
- internal const string Registry_L2 = "api-ms-win-core-registry-l2-1-0.dll";
- internal const string RoBuffer = "api-ms-win-core-winrt-robuffer-l1-1-0.dll";
- internal const string SecurityBase = "api-ms-win-security-base-l1-1-0.dll";
- internal const string SecurityCpwl = "api-ms-win-security-cpwl-l1-1-0.dll";
- internal const string SecurityCryptoApi = "api-ms-win-security-cryptoapi-l1-1-0.dll";
- internal const string SecurityLsa = "api-ms-win-security-lsalookup-l2-1-0.dll";
- internal const string SecurityLsaPolicy = "api-ms-win-security-lsapolicy-l1-1-0.dll";
- internal const string SecurityProvider = "api-ms-win-security-provider-l1-1-0.dll";
- internal const string SecuritySddl = "api-ms-win-security-sddl-l1-1-0.dll";
- internal const string ServiceCore = "api-ms-win-service-core-l1-1-1.dll";
- internal const string ServiceMgmt_L1 = "api-ms-win-service-management-l1-1-0.dll";
- internal const string ServiceMgmt_L2 = "api-ms-win-service-management-l2-1-0.dll";
- internal const string ServiceWinSvc = "api-ms-win-service-winsvc-l1-1-0.dll";
- internal const string Shell = "shell32.dll";
- internal const string ShellFolders = "ext-ms-win-shell32-shellfolders-l1-1-0.dll";
- internal const string Sspi = "sspicli.dll";
- internal const string String_L1 = "api-ms-win-core-string-l1-1-0.dll";
- internal const string Synch = "api-ms-win-core-synch-l1-1-0.dll";
- internal const string SystemInfo_L1_1 = "api-ms-win-core-sysinfo-l1-1-0.dll";
- internal const string SystemInfo_L1_2 = "api-ms-win-core-sysinfo-l1-2-0.dll";
- internal const string SystemInfo_L2_1 = "api-ms-win-core-sysinfo-l2-1-0.dll";
- internal const string ThreadPool = "api-ms-win-core-threadpool-l1-2-0.dll";
- internal const string User32 = "user32.dll";
- internal const string Util = "api-ms-win-core-util-l1-1-0.dll";
- internal const string Version = "api-ms-win-core-version-l1-1-0.dll";
- internal const string WinHttp = "winhttp.dll";
- internal const string Winsock = "Ws2_32.dll";
- internal const string Wow64 = "api-ms-win-core-wow64-l1-1-0.dll";
- internal const string Ws2_32 = "ws2_32.dll";
- internal const string Zlib = "clrcompression.dll";
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/NtDll/Interop.ZeroMemory.cs b/src/mscorlib/corefx/Interop/Windows/NtDll/Interop.ZeroMemory.cs
index caa0329bd0..bd2a64cf14 100644
--- a/src/mscorlib/corefx/Interop/Windows/NtDll/Interop.ZeroMemory.cs
+++ b/src/mscorlib/corefx/Interop/Windows/NtDll/Interop.ZeroMemory.cs
@@ -10,8 +10,6 @@ internal partial class Interop
{
internal partial class NtDll
{
- [DllImport(Libraries.NtDll, CharSet = CharSet.Unicode, EntryPoint = "RtlZeroMemory")]
- internal static extern void ZeroMemory(SafeBSTRHandle address, uint length);
[DllImport(Libraries.NtDll, CharSet = CharSet.Unicode, EntryPoint = "RtlZeroMemory")]
internal static extern void ZeroMemory(IntPtr address, UIntPtr length);
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.CancelIoEx.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.CancelIoEx.cs
index 868d409321..fc99e3052f 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.CancelIoEx.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.CancelIoEx.cs
@@ -8,9 +8,9 @@ using System.Threading;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.IO, SetLastError = true)]
- internal static unsafe extern bool CancelIoEx(SafeHandle handle, NativeOverlapped* lpOverlapped);
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
+ internal static extern unsafe bool CancelIoEx(SafeHandle handle, NativeOverlapped* lpOverlapped);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.CloseHandle.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.CloseHandle.cs
index 029937b6d5..96ed922a84 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.CloseHandle.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.CloseHandle.cs
@@ -7,9 +7,9 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.Handle, SetLastError = true)]
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool CloseHandle(IntPtr handle);
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.CreateFile.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.CreateFile.cs
index 670037d52e..5f6f6115ab 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.CreateFile.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.CreateFile.cs
@@ -9,12 +9,12 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
/// <summary>
/// WARNING: This method does not implicitly handle long paths. Use CreateFile.
/// </summary>
- [DllImport(Libraries.CoreFile_L1, EntryPoint = "CreateFileW", SetLastError = true, CharSet = CharSet.Unicode, BestFitMapping = false)]
+ [DllImport(Libraries.Kernel32, EntryPoint = "CreateFileW", SetLastError = true, CharSet = CharSet.Unicode, BestFitMapping = false)]
private static extern SafeFileHandle CreateFilePrivate(
string lpFileName,
int dwDesiredAccess,
diff --git a/src/mscorlib/src/System/Security/IEvidenceFactory.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FileOperations.cs
index 592ab533be..6e3ebb9ae9 100644
--- a/src/mscorlib/src/System/Security/IEvidenceFactory.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FileOperations.cs
@@ -2,10 +2,11 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System.Security
+internal partial class Interop
{
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface IEvidenceFactory
+ internal partial class Kernel32
{
+
+ internal const uint SEM_FAILCRITICALERRORS = 1;
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.FileTypes.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FileTypes.cs
index a24813e8d6..1d306665b1 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.FileTypes.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FileTypes.cs
@@ -4,7 +4,7 @@
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
internal partial class FileTypes
{
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.FlushFileBuffers.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FlushFileBuffers.cs
index 69f4fe07ce..e10a2279cf 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.FlushFileBuffers.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FlushFileBuffers.cs
@@ -8,9 +8,9 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool FlushFileBuffers(SafeHandle hHandle);
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.FormatMessage.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FormatMessage.cs
index 02ecbb8a63..94722b6c8b 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.FormatMessage.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.FormatMessage.cs
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
private const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
private const int FORMAT_MESSAGE_FROM_HMODULE = 0x00000800;
@@ -18,7 +18,7 @@ internal partial class Interop
private const int ERROR_INSUFFICIENT_BUFFER = 0x7A;
- [DllImport(Libraries.Localization, CharSet = CharSet.Unicode, EntryPoint = "FormatMessageW", SetLastError = true, BestFitMapping = true)]
+ [DllImport(Libraries.Kernel32, CharSet = CharSet.Unicode, EntryPoint = "FormatMessageW", SetLastError = true, BestFitMapping = true)]
private static extern int FormatMessage(
int dwFlags,
IntPtr lpSource,
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetFileInformationByHandleEx.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetFileInformationByHandleEx.cs
index c4739a5ddc..146c4638ee 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetFileInformationByHandleEx.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetFileInformationByHandleEx.cs
@@ -8,9 +8,9 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L2, SetLastError = true)]
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
internal static extern bool GetFileInformationByHandleEx(SafeFileHandle hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, out FILE_STANDARD_INFO lpFileInformation, uint dwBufferSize);
internal partial struct FILE_STANDARD_INFO
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetFileType_SafeHandle.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetFileType_SafeHandle.cs
index 3e2567b6bf..c07a1683a5 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetFileType_SafeHandle.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetFileType_SafeHandle.cs
@@ -7,9 +7,9 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
internal extern static int GetFileType(SafeHandle hFile);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetFullPathNameW.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetFullPathNameW.cs
index a34cc33db3..15dd581113 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetFullPathNameW.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetFullPathNameW.cs
@@ -7,12 +7,12 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
/// <summary>
/// WARNING: This method does not implicitly handle long paths. Use GetFullPathName or PathHelper.
/// </summary>
- [DllImport(Libraries.CoreFile_L1, SetLastError = true, CharSet = CharSet.Unicode, BestFitMapping = false, ExactSpelling = true)]
- unsafe internal static extern uint GetFullPathNameW(char* path, uint numBufferChars, SafeHandle buffer, IntPtr mustBeZero);
+ [DllImport(Libraries.Kernel32, SetLastError = true, CharSet = CharSet.Unicode, BestFitMapping = false, ExactSpelling = true)]
+ unsafe internal static extern uint GetFullPathNameW(char* path, uint numBufferChars, char[] buffer, IntPtr mustBeZero);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetLongPathNameW.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetLongPathNameW.cs
index d50db6650b..a58d1013ca 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetLongPathNameW.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetLongPathNameW.cs
@@ -7,12 +7,12 @@ using System.Runtime.InteropServices;
partial class Interop
{
- partial class mincore
+ partial class Kernel32
{
/// <summary>
/// WARNING: This method does not implicitly handle long paths. Use GetFullPath/PathHelper.
/// </summary>
- [DllImport(Libraries.CoreFile_L1, SetLastError = true, CharSet = CharSet.Unicode, BestFitMapping = false, ExactSpelling = true)]
- internal static extern uint GetLongPathNameW(SafeHandle lpszShortPath, SafeHandle lpszLongPath, uint cchBuffer);
+ [DllImport(Libraries.Kernel32, SetLastError = true, CharSet = CharSet.Unicode, BestFitMapping = false, ExactSpelling = true)]
+ internal static extern uint GetLongPathNameW(char[] lpszShortPath, char[] lpszLongPath, uint cchBuffer);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetTempFileNameW.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetTempFileNameW.cs
index f06d11be52..d157a29c92 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetTempFileNameW.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetTempFileNameW.cs
@@ -8,9 +8,9 @@ using System.Runtime.InteropServices;
partial class Interop
{
- partial class mincore
+ partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L1, CharSet = CharSet.Unicode, SetLastError = true, BestFitMapping = false)]
+ [DllImport(Libraries.Kernel32, CharSet = CharSet.Unicode, SetLastError = true, BestFitMapping = false)]
internal static extern uint GetTempFileNameW(string tmpPath, string prefix, uint uniqueIdOrZero, [Out]StringBuilder tmpFileName);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetTempPathW.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetTempPathW.cs
index 0ccc27c9ec..25ffcd55b0 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.GetTempPathW.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.GetTempPathW.cs
@@ -8,9 +8,9 @@ using System.Runtime.InteropServices;
partial class Interop
{
- partial class mincore
+ partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L1_2, CharSet = CharSet.Unicode, BestFitMapping = false)]
+ [DllImport(Libraries.Kernel32, CharSet = CharSet.Unicode, BestFitMapping = false)]
internal static extern uint GetTempPathW(int bufferLen, [Out]StringBuilder buffer);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.LockFile.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.LockFile.cs
index ee9a98ecce..a21d00f4f6 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.LockFile.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.LockFile.cs
@@ -9,12 +9,12 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
internal static extern bool LockFile(SafeFileHandle handle, int offsetLow, int offsetHigh, int countLow, int countHigh);
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
internal static extern bool UnlockFile(SafeFileHandle handle, int offsetLow, int offsetHigh, int countLow, int countHigh);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.ReadFile_SafeHandle_IntPtr.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.ReadFile_SafeHandle_IntPtr.cs
index 093a993c10..076f7f136f 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.ReadFile_SafeHandle_IntPtr.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.ReadFile_SafeHandle_IntPtr.cs
@@ -8,10 +8,10 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
- unsafe internal static extern int ReadFile(
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
+ internal static extern unsafe int ReadFile(
SafeHandle handle,
byte* bytes,
int numBytesToRead,
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.ReadFile_SafeHandle_NativeOverlapped.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.ReadFile_SafeHandle_NativeOverlapped.cs
index ac238cb802..3ae65a8806 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.ReadFile_SafeHandle_NativeOverlapped.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.ReadFile_SafeHandle_NativeOverlapped.cs
@@ -9,10 +9,10 @@ using System.Threading;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
- unsafe internal static extern int ReadFile(
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
+ internal static extern unsafe int ReadFile(
SafeHandle handle,
byte* bytes,
int numBytesToRead,
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SECURITY_ATTRIBUTES.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SECURITY_ATTRIBUTES.cs
index 0f5c224022..8d31f8622f 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SECURITY_ATTRIBUTES.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SECURITY_ATTRIBUTES.cs
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
[StructLayout(LayoutKind.Sequential)]
internal struct SECURITY_ATTRIBUTES
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SafeCreateFile.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SafeCreateFile.cs
index edfc66d2c9..4192f569e0 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SafeCreateFile.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SafeCreateFile.cs
@@ -9,7 +9,7 @@ using Microsoft.Win32.SafeHandles;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
internal static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1); // WinBase.h
@@ -22,7 +22,7 @@ internal partial class Interop
String lpFileName,
int dwDesiredAccess,
System.IO.FileShare dwShareMode,
- ref Interop.mincore.SECURITY_ATTRIBUTES securityAttrs,
+ ref Interop.Kernel32.SECURITY_ATTRIBUTES securityAttrs,
FileMode dwCreationDisposition,
int dwFlagsAndAttributes,
IntPtr hTemplateFile)
@@ -31,8 +31,8 @@ internal partial class Interop
if (!handle.IsInvalid)
{
- int fileType = Interop.mincore.GetFileType(handle);
- if (fileType != Interop.mincore.FileTypes.FILE_TYPE_DISK)
+ int fileType = Interop.Kernel32.GetFileType(handle);
+ if (fileType != Interop.Kernel32.FileTypes.FILE_TYPE_DISK)
{
handle.Dispose();
throw new NotSupportedException(SR.NotSupported_FileStreamOnNonFiles);
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SecurityOptions.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SecurityOptions.cs
index 767d7f528f..4a4402484f 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SecurityOptions.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SecurityOptions.cs
@@ -4,7 +4,7 @@
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
internal partial class SecurityOptions
{
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetEndOfFile.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetEndOfFile.cs
index ee0d3b4bc8..e5d60041a8 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetEndOfFile.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetEndOfFile.cs
@@ -7,9 +7,9 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
internal static extern bool SetEndOfFile(SafeFileHandle hFile);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetErrorMode.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetErrorMode.cs
index a845990ded..caa2ce5bfa 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetErrorMode.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetErrorMode.cs
@@ -6,9 +6,9 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.ErrorHandling, SetLastError = false, EntryPoint = "SetErrorMode", ExactSpelling = true)]
+ [DllImport(Libraries.Kernel32, SetLastError = false, EntryPoint = "SetErrorMode", ExactSpelling = true)]
internal static extern uint SetErrorMode(uint newMode);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetFileInformationByHandle.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetFileInformationByHandle.cs
new file mode 100644
index 0000000000..e31a453ba9
--- /dev/null
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetFileInformationByHandle.cs
@@ -0,0 +1,39 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using Microsoft.Win32.SafeHandles;
+using System;
+using System.Runtime.InteropServices;
+
+internal partial class Interop
+{
+ internal partial class Kernel32
+ {
+ internal enum FILE_INFO_BY_HANDLE_CLASS : uint
+ {
+ FileBasicInfo = 0x0u,
+ FileStandardInfo = 0x1u,
+ FileNameInfo = 0x2u,
+ FileRenameInfo = 0x3u,
+ FileDispositionInfo = 0x4u,
+ FileAllocationInfo = 0x5u,
+ FileEndOfFileInfo = 0x6u,
+ FileStreamInfo = 0x7u,
+ FileCompressionInfo = 0x8u,
+ FileAttributeTagInfo = 0x9u,
+ FileIdBothDirectoryInfo = 0xAu,
+ FileIdBothDirectoryRestartInfo = 0xBu,
+ FileIoPriorityHintInfo = 0xCu,
+ FileRemoteProtocolInfo = 0xDu,
+ FileFullDirectoryInfo = 0xEu,
+ FileFullDirectoryRestartInfo = 0xFu,
+ FileStorageInfo = 0x10u,
+ FileAlignmentInfo = 0x11u,
+ FileIdInfo = 0x12u,
+ FileIdExtdDirectoryInfo = 0x13u,
+ FileIdExtdDirectoryRestartInfo = 0x14u,
+ MaximumFileInfoByHandleClass = 0x15u,
+ }
+ }
+}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetFilePointerEx.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetFilePointerEx.cs
index 09f8e1feb3..c0e5247a52 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetFilePointerEx.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.SetFilePointerEx.cs
@@ -7,9 +7,9 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
internal static extern bool SetFilePointerEx(SafeFileHandle hFile, long liDistanceToMove, out long lpNewFilePointer, uint dwMoveMethod);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.UnsafeCreateFile.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.UnsafeCreateFile.cs
index e7e4f0513a..9a5cd2834d 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.UnsafeCreateFile.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.UnsafeCreateFile.cs
@@ -8,13 +8,13 @@ using Microsoft.Win32.SafeHandles;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
internal static SafeFileHandle UnsafeCreateFile(
string lpFileName,
int dwDesiredAccess,
FileShare dwShareMode,
- ref Interop.mincore.SECURITY_ATTRIBUTES securityAttrs,
+ ref Interop.Kernel32.SECURITY_ATTRIBUTES securityAttrs,
FileMode dwCreationDisposition,
int dwFlagsAndAttributes,
IntPtr hTemplateFile)
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.WideCharToMultiByte.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.WideCharToMultiByte.cs
index b1a2975696..07271cae33 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.WideCharToMultiByte.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.WideCharToMultiByte.cs
@@ -7,9 +7,9 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
- [DllImport(Libraries.String_L1)]
+ [DllImport(Libraries.Kernel32)]
internal static extern unsafe int WideCharToMultiByte(
uint CodePage, uint dwFlags,
char* lpWideCharStr, int cchWideChar,
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.WriteFile_SafeHandle_IntPtr.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.WriteFile_SafeHandle_IntPtr.cs
index 052ba3ce7d..e7e868e142 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.WriteFile_SafeHandle_IntPtr.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.WriteFile_SafeHandle_IntPtr.cs
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
// Note there are two different WriteFile prototypes - this is to use
// the type system to force you to not trip across a "feature" in
@@ -17,8 +17,8 @@ internal partial class Interop
// struct in a callback (or an EndWrite method called by that callback),
// and pass in an address for the numBytesRead parameter.
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
- internal static unsafe extern int WriteFile(SafeHandle handle, byte* bytes, int numBytesToWrite, out int numBytesWritten, IntPtr mustBeZero);
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
+ internal static extern unsafe int WriteFile(SafeHandle handle, byte* bytes, int numBytesToWrite, out int numBytesWritten, IntPtr mustBeZero);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.WriteFile_SafeHandle_NativeOverlapped.cs b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.WriteFile_SafeHandle_NativeOverlapped.cs
index e9d2953045..dc1e97555b 100644
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.WriteFile_SafeHandle_NativeOverlapped.cs
+++ b/src/mscorlib/corefx/Interop/Windows/kernel32/Interop.WriteFile_SafeHandle_NativeOverlapped.cs
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
using System.Threading;
internal partial class Interop
{
- internal partial class mincore
+ internal partial class Kernel32
{
// Note there are two different WriteFile prototypes - this is to use
// the type system to force you to not trip across a "feature" in
@@ -16,7 +16,7 @@ internal partial class Interop
// simultaneously: overlapped IO, free the memory for the overlapped
// struct in a callback (or an EndWrite method called by that callback),
// and pass in an address for the numBytesRead parameter.
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
- internal static unsafe extern int WriteFile(SafeHandle handle, byte* bytes, int numBytesToWrite, IntPtr numBytesWritten_mustBeZero, NativeOverlapped* lpOverlapped);
+ [DllImport(Libraries.Kernel32, SetLastError = true)]
+ internal static extern unsafe int WriteFile(SafeHandle handle, byte* bytes, int numBytesToWrite, IntPtr numBytesWritten_mustBeZero, NativeOverlapped* lpOverlapped);
}
}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.Errors.cs b/src/mscorlib/corefx/Interop/Windows/mincore/Interop.Errors.cs
deleted file mode 100644
index 05b2250830..0000000000
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.Errors.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-internal partial class Interop
-{
- internal partial class mincore
- {
- internal partial class Errors
- {
- internal const int ERROR_SUCCESS = 0x0;
- internal const int ERROR_INVALID_FUNCTION = 0x1;
- internal const int ERROR_FILE_NOT_FOUND = 0x2;
- internal const int ERROR_PATH_NOT_FOUND = 0x3;
- internal const int ERROR_ACCESS_DENIED = 0x5;
- internal const int ERROR_INVALID_HANDLE = 0x6;
- internal const int ERROR_NOT_ENOUGH_MEMORY = 0x8;
- internal const int ERROR_INVALID_DATA = 0xD;
- internal const int ERROR_INVALID_DRIVE = 0xF;
- internal const int ERROR_NO_MORE_FILES = 0x12;
- internal const int ERROR_NOT_READY = 0x15;
- internal const int ERROR_BAD_LENGTH = 0x18;
- internal const int ERROR_SHARING_VIOLATION = 0x20;
- internal const int ERROR_LOCK_VIOLATION = 0x21;
- internal const int ERROR_HANDLE_EOF = 0x26;
- internal const int ERROR_FILE_EXISTS = 0x50;
- internal const int ERROR_INVALID_PARAMETER = 0x57;
- internal const int ERROR_BROKEN_PIPE = 0x6D;
- internal const int ERROR_INSUFFICIENT_BUFFER = 0x7A;
- internal const int ERROR_INVALID_NAME = 0x7B;
- internal const int ERROR_NEGATIVE_SEEK = 0x83;
- internal const int ERROR_DIR_NOT_EMPTY = 0x91;
- internal const int ERROR_BAD_PATHNAME = 0xA1;
- internal const int ERROR_LOCK_FAILED = 0xA7;
- internal const int ERROR_BUSY = 0xAA;
- internal const int ERROR_ALREADY_EXISTS = 0xB7;
- internal const int ERROR_BAD_EXE_FORMAT = 0xC1;
- internal const int ERROR_ENVVAR_NOT_FOUND = 0xCB;
- internal const int ERROR_FILENAME_EXCED_RANGE = 0xCE;
- internal const int ERROR_EXE_MACHINE_TYPE_MISMATCH = 0xD8;
- internal const int ERROR_PIPE_BUSY = 0xE7;
- internal const int ERROR_NO_DATA = 0xE8;
- internal const int ERROR_PIPE_NOT_CONNECTED = 0xE9;
- internal const int ERROR_MORE_DATA = 0xEA;
- internal const int ERROR_NO_MORE_ITEMS = 0x103;
- internal const int ERROR_PARTIAL_COPY = 0x12B;
- internal const int ERROR_ARITHMETIC_OVERFLOW = 0x216;
- internal const int ERROR_PIPE_CONNECTED = 0x217;
- internal const int ERROR_PIPE_LISTENING = 0x218;
- internal const int ERROR_OPERATION_ABORTED = 0x3E3;
- internal const int ERROR_IO_PENDING = 0x3E5;
- internal const int ERROR_NO_TOKEN = 0x3f0;
- internal const int ERROR_DLL_INIT_FAILED = 0x45A;
- internal const int ERROR_NOT_FOUND = 0x490;
- internal const int ERROR_NON_ACCOUNT_SID = 0x4E9;
- internal const int ERROR_NOT_ALL_ASSIGNED = 0x514;
- internal const int ERROR_UNKNOWN_REVISION = 0x519;
- internal const int ERROR_INVALID_OWNER = 0x51B;
- internal const int ERROR_INVALID_PRIMARY_GROUP = 0x51C;
- internal const int ERROR_NO_SUCH_PRIVILEGE = 0x521;
- internal const int ERROR_PRIVILEGE_NOT_HELD = 0x522;
- internal const int ERROR_INVALID_ACL = 0x538;
- internal const int ERROR_INVALID_SECURITY_DESCR = 0x53A;
- internal const int ERROR_INVALID_SID = 0x539;
- internal const int ERROR_BAD_IMPERSONATION_LEVEL = 0x542;
- internal const int ERROR_CANT_OPEN_ANONYMOUS = 0x543;
- internal const int ERROR_NO_SECURITY_ON_OBJECT = 0x546;
- internal const int ERROR_TRUSTED_RELATIONSHIP_FAILURE = 0x6FD;
- internal const int ERROR_RESOURCE_LANG_NOT_FOUND = 0x717;
- internal const int EFail = unchecked((int)0x80004005);
- internal const int E_FILENOTFOUND = unchecked((int)0x80070002);
- }
- }
-}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.FileOperations.cs b/src/mscorlib/corefx/Interop/Windows/mincore/Interop.FileOperations.cs
deleted file mode 100644
index 4369760042..0000000000
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.FileOperations.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-internal partial class Interop
-{
- internal partial class mincore
- {
- internal partial class IOReparseOptions
- {
- internal const uint IO_REPARSE_TAG_FILE_PLACEHOLDER = 0x80000015;
- internal const uint IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003;
- }
-
- internal partial class FileOperations
- {
- internal const int OPEN_EXISTING = 3;
- internal const int COPY_FILE_FAIL_IF_EXISTS = 0x00000001;
-
- internal const int FILE_ACTION_ADDED = 1;
- internal const int FILE_ACTION_REMOVED = 2;
- internal const int FILE_ACTION_MODIFIED = 3;
- internal const int FILE_ACTION_RENAMED_OLD_NAME = 4;
- internal const int FILE_ACTION_RENAMED_NEW_NAME = 5;
-
- internal const int FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
- internal const int FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000;
- internal const int FILE_FLAG_OVERLAPPED = 0x40000000;
-
- internal const int FILE_LIST_DIRECTORY = 0x0001;
- }
-
- internal const uint SEM_FAILCRITICALERRORS = 1;
- }
-}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.Idna.cs b/src/mscorlib/corefx/Interop/Windows/mincore/Interop.Idna.cs
deleted file mode 100644
index e14f16b048..0000000000
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.Idna.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-
-internal partial class Interop
-{
- internal partial class mincore
- {
- //
- // Idn APIs
- //
-
- [DllImport("api-ms-win-core-localization-l1-2-0.dll", CharSet = CharSet.Unicode, SetLastError = true)]
- internal static extern int IdnToAscii(
- uint dwFlags,
- IntPtr lpUnicodeCharStr,
- int cchUnicodeChar,
- [System.Runtime.InteropServices.OutAttribute()]
- IntPtr lpASCIICharStr,
- int cchASCIIChar);
-
- [DllImport("api-ms-win-core-localization-l1-2-0.dll", CharSet = CharSet.Unicode, SetLastError = true)]
- internal static extern int IdnToUnicode(
- uint dwFlags,
- IntPtr lpASCIICharStr,
- int cchASCIIChar,
- [System.Runtime.InteropServices.OutAttribute()]
- IntPtr lpUnicodeCharStr,
- int cchUnicodeChar);
-
- internal const int IDN_ALLOW_UNASSIGNED = 0x1;
- internal const int IDN_USE_STD3_ASCII_RULES = 0x2;
- }
-}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetFileInformationByHandle.cs b/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetFileInformationByHandle.cs
deleted file mode 100644
index 0519219132..0000000000
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.SetFileInformationByHandle.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Microsoft.Win32.SafeHandles;
-using System;
-using System.Runtime.InteropServices;
-
-internal partial class Interop
-{
- internal partial class mincore
- {
- [DllImport(Libraries.CoreFile_L1, SetLastError = true)]
- internal static extern bool SetFileInformationByHandle(SafeFileHandle hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, ref FILE_BASIC_INFO lpFileInformation, uint dwBufferSize);
-
- // Default values indicate "no change". Use defaults so that we don't force callsites to be aware of the default values
- internal unsafe static bool SetFileTime(
- SafeFileHandle hFile,
- long creationTime = -1,
- long lastAccessTime = -1,
- long lastWriteTime = -1,
- long changeTime = -1,
- uint fileAttributes = 0)
- {
- FILE_BASIC_INFO basicInfo = new FILE_BASIC_INFO()
- {
- CreationTime = creationTime,
- LastAccessTime = lastAccessTime,
- LastWriteTime = lastWriteTime,
- ChangeTime = changeTime,
- FileAttributes = fileAttributes
- };
-
- return SetFileInformationByHandle(hFile, FILE_INFO_BY_HANDLE_CLASS.FileBasicInfo, ref basicInfo, (uint)Marshal.SizeOf<FILE_BASIC_INFO>());
- }
-
- internal struct FILE_BASIC_INFO
- {
- internal long CreationTime;
- internal long LastAccessTime;
- internal long LastWriteTime;
- internal long ChangeTime;
- internal uint FileAttributes;
- }
-
- internal enum FILE_INFO_BY_HANDLE_CLASS : uint
- {
- FileBasicInfo = 0x0u,
- FileStandardInfo = 0x1u,
- FileNameInfo = 0x2u,
- FileRenameInfo = 0x3u,
- FileDispositionInfo = 0x4u,
- FileAllocationInfo = 0x5u,
- FileEndOfFileInfo = 0x6u,
- FileStreamInfo = 0x7u,
- FileCompressionInfo = 0x8u,
- FileAttributeTagInfo = 0x9u,
- FileIdBothDirectoryInfo = 0xAu,
- FileIdBothDirectoryRestartInfo = 0xBu,
- FileIoPriorityHintInfo = 0xCu,
- FileRemoteProtocolInfo = 0xDu,
- FileFullDirectoryInfo = 0xEu,
- FileFullDirectoryRestartInfo = 0xFu,
- FileStorageInfo = 0x10u,
- FileAlignmentInfo = 0x11u,
- FileIdInfo = 0x12u,
- FileIdExtdDirectoryInfo = 0x13u,
- FileIdExtdDirectoryRestartInfo = 0x14u,
- MaximumFileInfoByHandleClass = 0x15u,
- }
- }
-}
diff --git a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.ThreadPoolIO.cs b/src/mscorlib/corefx/Interop/Windows/mincore/Interop.ThreadPoolIO.cs
deleted file mode 100644
index a0afed5d1a..0000000000
--- a/src/mscorlib/corefx/Interop/Windows/mincore/Interop.ThreadPoolIO.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-using Microsoft.Win32.SafeHandles;
-
-internal static partial class Interop
-{
- internal static partial class mincore
- {
- [DllImport(Libraries.ThreadPool, SetLastError = true)]
- internal static unsafe extern SafeThreadPoolIOHandle CreateThreadpoolIo(SafeHandle fl, [MarshalAs(UnmanagedType.FunctionPtr)] NativeIoCompletionCallback pfnio, IntPtr context, IntPtr pcbe);
-
- [DllImport(Libraries.ThreadPool)]
- internal static unsafe extern void CloseThreadpoolIo(IntPtr pio);
-
- [DllImport(Libraries.ThreadPool)]
- internal static unsafe extern void StartThreadpoolIo(SafeThreadPoolIOHandle pio);
-
- [DllImport(Libraries.ThreadPool)]
- internal static unsafe extern void CancelThreadpoolIo(SafeThreadPoolIOHandle pio);
- }
-
- internal delegate void NativeIoCompletionCallback(IntPtr instance, IntPtr context, IntPtr overlapped, uint ioResult, UIntPtr numberOfBytesTransferred, IntPtr io);
-}
diff --git a/src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Unix.cs b/src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Unix.cs
index 5ddb31ad36..d13b536204 100644
--- a/src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Unix.cs
+++ b/src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Unix.cs
@@ -8,7 +8,6 @@ using System.Runtime.InteropServices;
namespace Microsoft.Win32.SafeHandles
{
- [System.Security.SecurityCritical]
public sealed class SafeFileHandle : SafeHandleZeroOrMinusOneIsInvalid
{
/// <summary>A handle value of -1.</summary>
@@ -83,7 +82,6 @@ namespace Microsoft.Win32.SafeHandles
return handle;
}
- [System.Security.SecurityCritical]
protected override bool ReleaseHandle()
{
// When the SafeFileHandle was opened, we likely issued an flock on the created descriptor in order to add
@@ -111,7 +109,6 @@ namespace Microsoft.Win32.SafeHandles
public override bool IsInvalid
{
- [System.Security.SecurityCritical]
get
{
long h = (long)handle;
diff --git a/src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs b/src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs
index 7d4dd444c7..4eabe8f08c 100644
--- a/src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs
+++ b/src/mscorlib/corefx/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs
@@ -43,7 +43,7 @@ namespace Microsoft.Win32.SafeHandles
override protected bool ReleaseHandle()
{
- return Interop.mincore.CloseHandle(handle);
+ return Interop.Kernel32.CloseHandle(handle);
}
}
}
diff --git a/src/mscorlib/corefx/SR.cs b/src/mscorlib/corefx/SR.cs
index d820613f7e..012bb86a66 100644
--- a/src/mscorlib/corefx/SR.cs
+++ b/src/mscorlib/corefx/SR.cs
@@ -175,7 +175,7 @@ internal static class SR
{
get { return Environment.GetResourceString("Argument_CustomCultureCannotBePassedByNumber"); }
}
-
+
public static string Argument_EmptyDecString
{
get { return Environment.GetResourceString("Argument_EmptyDecString"); }
@@ -525,23 +525,23 @@ internal static class SR
{
get { return Environment.GetResourceString("InvalidOperation_NativeOverlappedReused"); }
}
-
+
public static string ArgumentOutOfRange_Length
{
get { return Environment.GetResourceString("ArgumentOutOfRange_Length"); }
}
- public static string ArgumentOutOfRange_IndexString
+ public static string ArgumentOutOfRange_IndexString
{
get { return Environment.GetResourceString("ArgumentOutOfRange_IndexString"); }
}
- public static string ArgumentOutOfRange_Capacity
+ public static string ArgumentOutOfRange_Capacity
{
get { return Environment.GetResourceString("ArgumentOutOfRange_Capacity"); }
}
- public static string Arg_CryptographyException
+ public static string Arg_CryptographyException
{
get { return Environment.GetResourceString("Arg_CryptographyException"); }
}
@@ -585,4 +585,234 @@ internal static class SR
{
return string.Format(CultureInfo.CurrentCulture, formatString, args);
}
+
+ internal static string ArgumentException_ValueTupleIncorrectType
+ {
+ get { return Environment.GetResourceString("ArgumentException_ValueTupleIncorrectType"); }
+ }
+
+ internal static string ArgumentException_ValueTupleLastArgumentNotATuple
+ {
+ get { return Environment.GetResourceString("ArgumentException_ValueTupleLastArgumentNotATuple"); }
+ }
+
+ internal static string SpinLock_TryEnter_ArgumentOutOfRange
+ {
+ get { return Environment.GetResourceString("SpinLock_TryEnter_ArgumentOutOfRange"); }
+ }
+
+ internal static string SpinLock_TryReliableEnter_ArgumentException
+ {
+ get { return Environment.GetResourceString("SpinLock_TryReliableEnter_ArgumentException"); }
+ }
+
+ internal static string SpinLock_TryEnter_LockRecursionException
+ {
+ get { return Environment.GetResourceString("SpinLock_TryEnter_LockRecursionException"); }
+ }
+
+ internal static string SpinLock_Exit_SynchronizationLockException
+ {
+ get { return Environment.GetResourceString("SpinLock_Exit_SynchronizationLockException"); }
+ }
+
+ internal static string SpinLock_IsHeldByCurrentThread
+ {
+ get { return Environment.GetResourceString("SpinLock_IsHeldByCurrentThread"); }
+ }
+
+ internal static string ObjectDisposed_StreamIsClosed
+ {
+ get { return Environment.GetResourceString("ObjectDisposed_StreamIsClosed"); }
+ }
+
+ internal static string Arg_SystemException
+ {
+ get { return Environment.GetResourceString("Arg_SystemException"); }
+ }
+
+ internal static string Arg_StackOverflowException
+ {
+ get { return Environment.GetResourceString("Arg_StackOverflowException"); }
+ }
+
+ internal static string Arg_DataMisalignedException
+ {
+ get { return Environment.GetResourceString("Arg_DataMisalignedException"); }
+ }
+
+ internal static string Arg_ExecutionEngineException
+ {
+ get { return Environment.GetResourceString("Arg_ExecutionEngineException"); }
+ }
+
+ internal static string Arg_AccessException
+ {
+ get { return Environment.GetResourceString("Arg_AccessException"); }
+ }
+
+ internal static string Arg_AccessViolationException
+ {
+ get { return Environment.GetResourceString("Arg_AccessViolationException"); }
+ }
+
+ internal static string Arg_ApplicationException
+ {
+ get { return Environment.GetResourceString("Arg_ApplicationException"); }
+ }
+
+ internal static string Arg_ArgumentException
+ {
+ get { return Environment.GetResourceString("Arg_ArgumentException"); }
+ }
+
+ internal static string Arg_ParamName_Name
+ {
+ get { return Environment.GetResourceString("Arg_ParamName_Name"); }
+ }
+
+ internal static string ArgumentNull_Generic
+ {
+ get { return Environment.GetResourceString("ArgumentNull_Generic"); }
+ }
+
+ internal static string Arg_ArithmeticException
+ {
+ get { return Environment.GetResourceString("Arg_ArithmeticException"); }
+ }
+
+ internal static string Arg_ArrayTypeMismatchException
+ {
+ get { return Environment.GetResourceString("Arg_ArrayTypeMismatchException"); }
+ }
+
+ internal static string Arg_DivideByZero
+ {
+ get { return Environment.GetResourceString("Arg_DivideByZero"); }
+ }
+
+ internal static string Arg_DuplicateWaitObjectException
+ {
+ get { return Environment.GetResourceString("Arg_DuplicateWaitObjectException"); }
+ }
+
+ internal static string Arg_EntryPointNotFoundException
+ {
+ get { return Environment.GetResourceString("Arg_EntryPointNotFoundException"); }
+ }
+
+ internal static string Arg_FieldAccessException
+ {
+ get { return Environment.GetResourceString("Arg_FieldAccessException"); }
+ }
+
+ internal static string Arg_FormatException
+ {
+ get { return Environment.GetResourceString("Arg_FormatException"); }
+ }
+
+ internal static string Arg_IndexOutOfRangeException
+ {
+ get { return Environment.GetResourceString("Arg_IndexOutOfRangeException"); }
+ }
+
+ internal static string Arg_InsufficientExecutionStackException
+ {
+ get { return Environment.GetResourceString("Arg_InsufficientExecutionStackException"); }
+ }
+
+ internal static string Arg_InvalidCastException
+ {
+ get { return Environment.GetResourceString("Arg_InvalidCastException"); }
+ }
+
+ internal static string Arg_InvalidOperationException
+ {
+ get { return Environment.GetResourceString("Arg_InvalidOperationException"); }
+ }
+
+ internal static string InvalidProgram_Default
+ {
+ get { return Environment.GetResourceString("InvalidProgram_Default"); }
+ }
+
+ internal static string Arg_MethodAccessException
+ {
+ get { return Environment.GetResourceString("Arg_MethodAccessException"); }
+ }
+
+ internal static string Arg_MulticastNotSupportedException
+ {
+ get { return Environment.GetResourceString("Arg_MulticastNotSupportedException"); }
+ }
+
+ internal static string Arg_NotFiniteNumberException
+ {
+ get { return Environment.GetResourceString("Arg_NotFiniteNumberException"); }
+ }
+
+ internal static string Arg_NotImplementedException
+ {
+ get { return Environment.GetResourceString("Arg_NotImplementedException"); }
+ }
+
+ internal static string Arg_NotSupportedException
+ {
+ get { return Environment.GetResourceString("Arg_NotSupportedException"); }
+ }
+
+ internal static string Arg_NullReferenceException
+ {
+ get { return Environment.GetResourceString("Arg_NullReferenceException"); }
+ }
+
+ internal static string ObjectDisposed_Generic
+ {
+ get { return Environment.GetResourceString("ObjectDisposed_Generic"); }
+ }
+
+ internal static string ObjectDisposed_ObjectName_Name
+ {
+ get { return Environment.GetResourceString("ObjectDisposed_ObjectName_Name"); }
+ }
+
+ internal static string Arg_OverflowException
+ {
+ get { return Environment.GetResourceString("Arg_OverflowException"); }
+ }
+
+ internal static string Arg_PlatformNotSupported
+ {
+ get { return Environment.GetResourceString("Arg_PlatformNotSupported"); }
+ }
+
+ internal static string Arg_RankException
+ {
+ get { return Environment.GetResourceString("Arg_RankException"); }
+ }
+
+ internal static string Arg_TimeoutException
+ {
+ get { return Environment.GetResourceString("Arg_TimeoutException"); }
+ }
+
+ internal static string Arg_TypeAccessException
+ {
+ get { return Environment.GetResourceString("Arg_TypeAccessException"); }
+ }
+
+ internal static string TypeInitialization_Default
+ {
+ get { return Environment.GetResourceString("TypeInitialization_Default"); }
+ }
+
+ internal static string TypeInitialization_Type
+ {
+ get { return Environment.GetResourceString("TypeInitialization_Type"); }
+ }
+
+ internal static string Arg_UnauthorizedAccessException
+ {
+ get { return Environment.GetResourceString("Arg_UnauthorizedAccessException"); }
+ }
}
diff --git a/src/mscorlib/corefx/System/Buffers/ArrayPool.cs b/src/mscorlib/corefx/System/Buffers/ArrayPool.cs
index 441e48dab4..77a07f7fa5 100644
--- a/src/mscorlib/corefx/System/Buffers/ArrayPool.cs
+++ b/src/mscorlib/corefx/System/Buffers/ArrayPool.cs
@@ -29,26 +29,13 @@ namespace System.Buffers
/// array than was requested. Renting a buffer from it with <see cref="Rent"/> will result in an
/// existing buffer being taken from the pool if an appropriate buffer is available or in a new
/// buffer being allocated if one is not available.
+ /// byte[] and char[] are the most commonly pooled array types. For these we use a special pool type
+ /// optimized for very fast access speeds, at the expense of more memory consumption.
+ /// The shared pool instance is created lazily on first access.
/// </remarks>
- public static ArrayPool<T> Shared => SharedPool.Value;
-
- /// <summary>Stores a cached pool instance for T[].</summary>
- /// <remarks>
- /// Separated out into a nested class to enable lazy-initialization of the pool provided by
- /// the runtime, only forced when Shared is used (and not when Create is called or when
- /// other non-Shared accesses happen).
- /// </remarks>
- private static class SharedPool
- {
- /// <summary>Per-type cached pool.</summary>
- /// <remarks>
- /// byte[] and char[] are the most commonly pooled array types. For these we use a special pool type
- /// optimized for very fast access speeds, at the expense of more memory consumption.
- /// </remarks>
- internal readonly static ArrayPool<T> Value =
- typeof(T) == typeof(byte) || typeof(T) == typeof(char) ? new TlsOverPerCoreLockedStacksArrayPool<T>() :
- Create();
- }
+ public static ArrayPool<T> Shared { get; } =
+ typeof(T) == typeof(byte) || typeof(T) == typeof(char) ? new TlsOverPerCoreLockedStacksArrayPool<T>() :
+ Create();
/// <summary>
/// Creates a new <see cref="ArrayPool{T}"/> instance using default configuration options.
diff --git a/src/mscorlib/corefx/System/Buffers/ConfigurableArrayPool.cs b/src/mscorlib/corefx/System/Buffers/ConfigurableArrayPool.cs
index 1e0e769530..f7b6034d20 100644
--- a/src/mscorlib/corefx/System/Buffers/ConfigurableArrayPool.cs
+++ b/src/mscorlib/corefx/System/Buffers/ConfigurableArrayPool.cs
@@ -70,7 +70,7 @@ namespace System.Buffers
{
// No need for events with the empty array. Our pool is effectively infinite
// and we'll never allocate for rents and never store for returns.
- return EmptyArray<T>.Value;
+ return Array.Empty<T>();
}
var log = ArrayPoolEventSource.Log;
diff --git a/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.Unix.cs b/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.Unix.cs
deleted file mode 100644
index 8a1d006b12..0000000000
--- a/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.Unix.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Microsoft.Win32;
-using System.Runtime.CompilerServices;
-
-namespace System.Buffers
-{
- internal sealed partial class TlsOverPerCoreLockedStacksArrayPool<T>
- {
- /// <summary>Get an identifier for the current thread to use to index into the stacks.</summary>
- private static int ExecutionId
- {
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- get
- {
- // On Unix, CurrentProcessorNumber is implemented in terms of sched_getcpu, which
- // doesn't exist on all platforms. On those it doesn't exist on, GetCurrentProcessorNumber
- // returns -1. As a fallback in that case and to spread the threads across the buckets
- // by default, we use the current managed thread ID as a proxy.
- int id = CurrentProcessorNumber;
- if (id < 0) id = Environment.CurrentManagedThreadId;
- return id;
- }
- }
- }
-}
diff --git a/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.Windows.cs b/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.Windows.cs
deleted file mode 100644
index d42242c910..0000000000
--- a/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.Windows.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Microsoft.Win32;
-using System.Runtime.CompilerServices;
-using System.Threading;
-
-namespace System.Buffers
-{
- internal sealed partial class TlsOverPerCoreLockedStacksArrayPool<T> : ArrayPool<T>
- {
- /// <summary>Get an identifier for the current thread to use to index into the stacks.</summary>
- private static int ExecutionId
- {
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- get { return CurrentProcessorNumber; }
- }
- }
-}
diff --git a/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.cs b/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.cs
index debc33615f..64c5cebe85 100644
--- a/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.cs
+++ b/src/mscorlib/corefx/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.cs
@@ -45,11 +45,6 @@ namespace System.Buffers
/// <summary>A per-thread array of arrays, to cache one array per array size per thread.</summary>
[ThreadStatic]
private static T[][] t_tlsBuckets;
- /// <summary>
- /// Cached processor number used as a hint for which per-core stack to access.
- /// </summary>
- [ThreadStatic]
- private static int? t_cachedProcessorNumber;
/// <summary>Initialize the pool.</summary>
public TlsOverPerCoreLockedStacksArrayPool()
@@ -72,22 +67,6 @@ namespace System.Buffers
/// <summary>Gets an ID for the pool to use with events.</summary>
private int Id => GetHashCode();
- /// <summary>Gets the processor number associated with the current thread.</summary>
- /// <remarks>Uses a cached value if one exists on the current thread.</remarks>
- private static int CurrentProcessorNumber
- {
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- get
- {
- int? num = t_cachedProcessorNumber;
- if (!num.HasValue)
- {
- t_cachedProcessorNumber = num = Environment.CurrentProcessorNumber;
- }
- return num.GetValueOrDefault();
- }
- }
-
public override T[] Rent(int minimumLength)
{
// Arrays can't be smaller than zero. We allow requesting zero-length arrays (even though
@@ -101,7 +80,7 @@ namespace System.Buffers
{
// No need to log the empty array. Our pool is effectively infinite
// and we'll never allocate for rents and never store for returns.
- return EmptyArray<T>.Value;
+ return Array.Empty<T>();
}
ArrayPoolEventSource log = ArrayPoolEventSource.Log;
@@ -249,7 +228,7 @@ namespace System.Buffers
// Try to push on to the associated stack first. If that fails,
// round-robin through the other stacks.
LockedStack[] stacks = _perCoreStacks;
- int index = ExecutionId % stacks.Length;
+ int index = Environment.CurrentExecutionId % stacks.Length;
for (int i = 0; i < stacks.Length; i++)
{
if (stacks[index].TryPush(array)) return;
@@ -265,7 +244,7 @@ namespace System.Buffers
// round-robin through the other stacks.
T[] arr;
LockedStack[] stacks = _perCoreStacks;
- int index = ExecutionId % stacks.Length;
+ int index = Environment.CurrentExecutionId % stacks.Length;
for (int i = 0; i < stacks.Length; i++)
{
if ((arr = stacks[index].TryPop()) != null) return arr;
@@ -285,7 +264,7 @@ namespace System.Buffers
public bool TryPush(T[] array)
{
bool enqueued = false;
- MonitorEnterWithProcNumberFlush(this);
+ Monitor.Enter(this);
if (_count < MaxBuffersPerArraySizePerCore)
{
_arrays[_count++] = array;
@@ -299,7 +278,7 @@ namespace System.Buffers
public T[] TryPop()
{
T[] arr = null;
- MonitorEnterWithProcNumberFlush(this);
+ Monitor.Enter(this);
if (_count > 0)
{
arr = _arrays[--_count];
@@ -308,21 +287,6 @@ namespace System.Buffers
Monitor.Exit(this);
return arr;
}
-
- /// <summary>
- /// Enters the monitor on the object. If there is any contention while trying
- /// to acquire the monitor, it flushes the cached processor number so that subsequent
- /// attempts to access the per-core stacks will use an updated processor number.
- /// </summary>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- private static void MonitorEnterWithProcNumberFlush(object obj)
- {
- if (!Monitor.TryEnter(obj))
- {
- t_cachedProcessorNumber = null;
- Monitor.Enter(obj);
- }
- }
}
}
}
diff --git a/src/mscorlib/corefx/System/Globalization/Calendar.cs b/src/mscorlib/corefx/System/Globalization/Calendar.cs
index 78e9f00d08..0ff5040c74 100644
--- a/src/mscorlib/corefx/System/Globalization/Calendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/Calendar.cs
@@ -29,7 +29,6 @@ namespace System.Globalization
// since most of the calendars (or all?) have the same way of calcuating hour/minute/second.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public abstract partial class Calendar : ICloneable
{
// Number of 100ns (10E-7 second) ticks per time unit
@@ -77,7 +76,6 @@ namespace System.Globalization
// The minimum supported DateTime range for the calendar.
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual DateTime MinSupportedDateTime
{
get
@@ -88,7 +86,6 @@ namespace System.Globalization
// The maximum supported DateTime range for the calendar.
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual DateTime MaxSupportedDateTime
{
get
@@ -97,7 +94,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual CalendarAlgorithmType AlgorithmType
{
get
@@ -138,7 +134,6 @@ namespace System.Globalization
// Detect if the object is readonly.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public bool IsReadOnly
{
get { return (_isReadOnly); }
@@ -151,7 +146,6 @@ namespace System.Globalization
// Is the implementation of ICloneable.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual object Clone()
{
object o = MemberwiseClone();
@@ -167,7 +161,6 @@ namespace System.Globalization
// readonly.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public static Calendar ReadOnly(Calendar calendar)
{
if (calendar == null) { throw new ArgumentNullException(nameof(calendar)); }
@@ -708,7 +701,6 @@ namespace System.Globalization
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetLeapMonth(int year)
{
return (GetLeapMonth(year, CurrentEra));
@@ -718,7 +710,6 @@ namespace System.Globalization
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetLeapMonth(int year, int era)
{
if (!IsLeapYear(year, era))
diff --git a/src/mscorlib/corefx/System/Globalization/CalendarData.Unix.cs b/src/mscorlib/corefx/System/Globalization/CalendarData.Unix.cs
index 270d62f143..19c81f17b0 100644
--- a/src/mscorlib/corefx/System/Globalization/CalendarData.Unix.cs
+++ b/src/mscorlib/corefx/System/Globalization/CalendarData.Unix.cs
@@ -64,7 +64,6 @@ namespace System.Globalization
}
// Call native side to figure out which calendars are allowed
- [SecuritySafeCritical]
internal static int GetCalendars(string localeName, bool useUserOverride, CalendarId[] calendars)
{
// NOTE: there are no 'user overrides' on Linux
@@ -87,7 +86,6 @@ namespace System.Globalization
// PAL Layer ends here
- [SecuritySafeCritical]
private static bool GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string calendarString)
{
return Interop.CallStringMethod(
@@ -239,7 +237,6 @@ namespace System.Globalization
return index - startIndex;
}
- [SecuritySafeCritical]
private static bool EnumMonthNames(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] monthNames)
{
monthNames = null;
@@ -261,7 +258,6 @@ namespace System.Globalization
return result;
}
- [SecuritySafeCritical]
private static bool EnumEraNames(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] eraNames)
{
bool result = EnumCalendarInfo(localeName, calendarId, dataType, out eraNames);
@@ -277,7 +273,6 @@ namespace System.Globalization
return result;
}
- [SecuritySafeCritical]
internal static bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] calendarData)
{
calendarData = null;
@@ -292,7 +287,6 @@ namespace System.Globalization
return result;
}
- [SecuritySafeCritical]
private static bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, CallbackContext callbackContext)
{
GCHandle context = GCHandle.Alloc(callbackContext);
@@ -306,7 +300,6 @@ namespace System.Globalization
}
}
- [SecuritySafeCritical]
private static void EnumCalendarInfoCallback(string calendarString, IntPtr context)
{
CallbackContext callbackContext = (CallbackContext)((GCHandle)context).Target;
diff --git a/src/mscorlib/corefx/System/Globalization/CalendarWeekRule.cs b/src/mscorlib/corefx/System/Globalization/CalendarWeekRule.cs
index 490951e1f0..4013ce7237 100644
--- a/src/mscorlib/corefx/System/Globalization/CalendarWeekRule.cs
+++ b/src/mscorlib/corefx/System/Globalization/CalendarWeekRule.cs
@@ -7,7 +7,6 @@ using System;
namespace System.Globalization
{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum CalendarWeekRule
{
FirstDay = 0, // Week 1 begins on the first day of the year
diff --git a/src/mscorlib/corefx/System/Globalization/CalendricalCalculationsHelper.cs b/src/mscorlib/corefx/System/Globalization/CalendricalCalculationsHelper.cs
index 149e63c689..7de75d6aee 100644
--- a/src/mscorlib/corefx/System/Globalization/CalendricalCalculationsHelper.cs
+++ b/src/mscorlib/corefx/System/Globalization/CalendricalCalculationsHelper.cs
@@ -22,8 +22,8 @@ namespace System.Globalization
private const int SecondsPerMinute = 60;
private const int MinutesPerDegree = 60;
- private static readonly long StartOf1810 = GetNumberOfDays(new DateTime(1810, 1, 1));
- private static readonly long StartOf1900Century = GetNumberOfDays(new DateTime(1900, 1, 1));
+ private static readonly long s_startOf1810 = GetNumberOfDays(new DateTime(1810, 1, 1));
+ private static readonly long s_startOf1900Century = GetNumberOfDays(new DateTime(1900, 1, 1));
private static readonly double[] s_coefficients1900to1987 = new double[] { -0.00002, 0.000297, 0.025184, -0.181133, 0.553040, -0.861938, 0.677066, -0.212591 };
private static readonly double[] s_coefficients1800to1899 = new double[] { -0.000009, 0.003844, 0.083563, 0.865736, 4.867575, 15.845535, 31.332267, 38.291999, 28.316289, 11.636204, 2.043794 };
@@ -146,7 +146,7 @@ namespace System.Globalization
private static double CenturiesFrom1900(int gregorianYear)
{
long july1stOfYear = GetNumberOfDays(new DateTime(gregorianYear, 7, 1));
- return (double)(july1stOfYear - StartOf1900Century) / DaysInUniformLengthCentury;
+ return (double)(july1stOfYear - s_startOf1900Century) / DaysInUniformLengthCentury;
}
// the following formulas defines a polynomial function which gives us the amount that the earth is slowing down for specific year ranges
@@ -154,7 +154,7 @@ namespace System.Globalization
{
Debug.Assert(gregorianYear < 1620 || 2020 <= gregorianYear);
long january1stOfYear = GetNumberOfDays(new DateTime(gregorianYear, 1, 1));
- double daysSinceStartOf1810 = january1stOfYear - StartOf1810;
+ double daysSinceStartOf1810 = january1stOfYear - s_startOf1810;
double x = TwelveHours + daysSinceStartOf1810;
return ((Math.Pow(x, 2) / 41048480) - 15) / SecondsPerDay;
}
diff --git a/src/mscorlib/corefx/System/Globalization/CharUnicodeInfo.cs b/src/mscorlib/corefx/System/Globalization/CharUnicodeInfo.cs
index dc38ca405b..38ce441a78 100644
--- a/src/mscorlib/corefx/System/Globalization/CharUnicodeInfo.cs
+++ b/src/mscorlib/corefx/System/Globalization/CharUnicodeInfo.cs
@@ -194,7 +194,7 @@ namespace System.Globalization
// Get the level 2 WORD offset from the 4 - 7 bit of ch. This provides the base offset of the level 3 table.
// Note that & has the lower precedence than addition, so don't forget the parathesis.
index = s_pNumericLevel1Index[index + ((ch >> 4) & 0x000f)];
-
+
fixed (ushort* pUshortPtr = &(s_pNumericLevel1Index[index]))
{
byte* pBytePtr = (byte*)pUshortPtr;
@@ -238,46 +238,46 @@ namespace System.Globalization
return (InternalGetNumericValue(InternalConvertToUtf32(s, index)));
}
- public static int GetDecimalDigitValue(char ch)
+ public static int GetDecimalDigitValue(char ch)
{
- return (sbyte) (InternalGetDigitValues(ch) >> 8);
+ return (sbyte)(InternalGetDigitValues(ch) >> 8);
}
- public static int GetDecimalDigitValue(String s, int index)
+ public static int GetDecimalDigitValue(String s, int index)
{
- if (s == null)
+ if (s == null)
{
throw new ArgumentNullException(nameof(s));
}
-
- if (index < 0 || index >= s.Length)
+
+ if (index < 0 || index >= s.Length)
{
throw new ArgumentOutOfRangeException(nameof(index), SR.ArgumentOutOfRange_Index);
}
Contract.EndContractBlock();
- return (sbyte) (InternalGetDigitValues(InternalConvertToUtf32(s, index)) >> 8);
+ return (sbyte)(InternalGetDigitValues(InternalConvertToUtf32(s, index)) >> 8);
}
-
+
public static int GetDigitValue(char ch)
{
- return (sbyte) (InternalGetDigitValues(ch) & 0x00FF);
+ return (sbyte)(InternalGetDigitValues(ch) & 0x00FF);
}
- public static int GetDigitValue(String s, int index)
+ public static int GetDigitValue(String s, int index)
{
- if (s == null)
+ if (s == null)
{
throw new ArgumentNullException(nameof(s));
}
-
- if (index < 0 || index >= s.Length)
+
+ if (index < 0 || index >= s.Length)
{
throw new ArgumentOutOfRangeException(nameof(index), SR.ArgumentOutOfRange_Index);
}
-
+
Contract.EndContractBlock();
- return (sbyte) (InternalGetDigitValues(InternalConvertToUtf32(s, index)) & 0x00FF);
+ return (sbyte)(InternalGetDigitValues(InternalConvertToUtf32(s, index)) & 0x00FF);
}
public static UnicodeCategory GetUnicodeCategory(char ch)
diff --git a/src/mscorlib/corefx/System/Globalization/ChineseLunisolarCalendar.cs b/src/mscorlib/corefx/System/Globalization/ChineseLunisolarCalendar.cs
index 271d9802ce..5002555384 100644
--- a/src/mscorlib/corefx/System/Globalization/ChineseLunisolarCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/ChineseLunisolarCalendar.cs
@@ -42,7 +42,6 @@ namespace System.Globalization
internal static DateTime minDate = new DateTime(MIN_GREGORIAN_YEAR, MIN_GREGORIAN_MONTH, MIN_GREGORIAN_DAY);
internal static DateTime maxDate = new DateTime((new DateTime(MAX_GREGORIAN_YEAR, MAX_GREGORIAN_MONTH, MAX_GREGORIAN_DAY, 23, 59, 59, 999)).Ticks + 9999);
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -52,7 +51,6 @@ namespace System.Globalization
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -318,9 +316,9 @@ namespace System.Globalization
}
}
- internal override int GetYearInfo(int LunarYear, int Index)
+ internal override int GetYearInfo(int lunarYear, int index)
{
- if ((LunarYear < MIN_LUNISOLAR_YEAR) || (LunarYear > MAX_LUNISOLAR_YEAR))
+ if ((lunarYear < MIN_LUNISOLAR_YEAR) || (lunarYear > MAX_LUNISOLAR_YEAR))
{
throw new ArgumentOutOfRangeException(
"year",
@@ -330,7 +328,7 @@ namespace System.Globalization
}
Contract.EndContractBlock();
- return s_yinfo[LunarYear - MIN_LUNISOLAR_YEAR, Index];
+ return s_yinfo[lunarYear - MIN_LUNISOLAR_YEAR, index];
}
internal override int GetYear(int year, DateTime time)
@@ -362,7 +360,6 @@ namespace System.Globalization
{
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetEra(DateTime time)
{
CheckTicksRange(time.Ticks);
@@ -387,7 +384,6 @@ namespace System.Globalization
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override int[] Eras
{
get
diff --git a/src/mscorlib/corefx/System/Globalization/CompareInfo.Windows.cs b/src/mscorlib/corefx/System/Globalization/CompareInfo.Windows.cs
index 4ebaf9cb10..d4936522dd 100644
--- a/src/mscorlib/corefx/System/Globalization/CompareInfo.Windows.cs
+++ b/src/mscorlib/corefx/System/Globalization/CompareInfo.Windows.cs
@@ -351,7 +351,7 @@ namespace System.Globalization
private unsafe SortKey CreateSortKey(String source, CompareOptions options)
{
- if (source==null) { throw new ArgumentNullException(nameof(source)); }
+ if (source == null) { throw new ArgumentNullException(nameof(source)); }
Contract.EndContractBlock();
if ((options & ValidSortkeyCtorMaskOffFlags) != 0)
@@ -362,7 +362,7 @@ namespace System.Globalization
throw new NotImplementedException();
}
- private static unsafe bool IsSortable(char *text, int length)
+ private static unsafe bool IsSortable(char* text, int length)
{
// CompareInfo c = CultureInfo.InvariantCulture.CompareInfo;
// return (InternalIsSortable(c.m_dataHandle, c.m_handleOrigin, c.m_sortName, text, text.Length));
diff --git a/src/mscorlib/corefx/System/Globalization/CultureData.Unix.cs b/src/mscorlib/corefx/System/Globalization/CultureData.Unix.cs
index 7f2f17d9f5..ba96189458 100644
--- a/src/mscorlib/corefx/System/Globalization/CultureData.Unix.cs
+++ b/src/mscorlib/corefx/System/Globalization/CultureData.Unix.cs
@@ -24,7 +24,6 @@ namespace System.Globalization
/// This method uses the sRealName field (which is initialized by the constructor before this is called) to
/// initialize the rest of the state of CultureData based on the underlying OS globalization library.
/// </summary>
- [SecuritySafeCritical]
private unsafe bool InitCultureData()
{
Debug.Assert(_sRealName != null);
@@ -87,7 +86,6 @@ namespace System.Globalization
return true;
}
- [SecuritySafeCritical]
internal static bool GetLocaleName(string localeName, out string windowsName)
{
// Get the locale name from ICU
@@ -104,7 +102,6 @@ namespace System.Globalization
return true;
}
- [SecuritySafeCritical]
internal static bool GetDefaultLocaleName(out string windowsName)
{
// Get the default (system) locale name from ICU
@@ -129,7 +126,6 @@ namespace System.Globalization
// For LOCALE_SPARENT we need the option of using the "real" name (forcing neutral names) instead of the
// "windows" name, which can be specific for downlevel (< windows 7) os's.
- [SecuritySafeCritical]
private string GetLocaleInfo(string localeName, LocaleStringData type)
{
Debug.Assert(localeName != null, "[CultureData.GetLocaleInfo] Expected localeName to be not be null");
@@ -155,7 +151,6 @@ namespace System.Globalization
return StringBuilderCache.GetStringAndRelease(sb);
}
- [SecuritySafeCritical]
private int GetLocaleInfo(LocaleNumberData type)
{
Debug.Assert(_sWindowsName != null, "[CultureData.GetLocaleInfo(LocaleNumberData)] Expected _sWindowsName to be populated already");
@@ -179,7 +174,6 @@ namespace System.Globalization
return value;
}
- [SecuritySafeCritical]
private int[] GetLocaleInfo(LocaleGroupingData type)
{
Debug.Assert(_sWindowsName != null, "[CultureData.GetLocaleInfo(LocaleGroupingData)] Expected _sWindowsName to be populated already");
@@ -205,7 +199,6 @@ namespace System.Globalization
return GetTimeFormatString(false);
}
- [SecuritySafeCritical]
private string GetTimeFormatString(bool shortFormat)
{
Debug.Assert(_sWindowsName != null, "[CultureData.GetTimeFormatString(bool shortFormat)] Expected _sWindowsName to be populated already");
diff --git a/src/mscorlib/corefx/System/Globalization/CultureData.Windows.cs b/src/mscorlib/corefx/System/Globalization/CultureData.Windows.cs
index d1c99da607..0c264e5f8b 100644
--- a/src/mscorlib/corefx/System/Globalization/CultureData.Windows.cs
+++ b/src/mscorlib/corefx/System/Globalization/CultureData.Windows.cs
@@ -663,11 +663,10 @@ namespace System.Globalization
{
get { throw new NotImplementedException(); }
}
-
+
internal bool IsReplacementCulture
{
get { throw new NotImplementedException(); }
}
-
}
}
diff --git a/src/mscorlib/corefx/System/Globalization/CultureNotFoundException.cs b/src/mscorlib/corefx/System/Globalization/CultureNotFoundException.cs
index 64782d28c0..d296ad88e5 100644
--- a/src/mscorlib/corefx/System/Globalization/CultureNotFoundException.cs
+++ b/src/mscorlib/corefx/System/Globalization/CultureNotFoundException.cs
@@ -3,14 +3,13 @@
// See the LICENSE file in the project root for more information.
using System;
-using System.Threading;
using System.Runtime.Serialization;
+using System.Threading;
namespace System.Globalization
{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public partial class CultureNotFoundException : ArgumentException, ISerializable
+ public class CultureNotFoundException : ArgumentException, ISerializable
{
private string _invalidCultureName; // unrecognized culture name
private int? _invalidCultureId; // unrecognized culture Lcid
@@ -66,14 +65,8 @@ namespace System.Globalization
_invalidCultureName = (string)info.GetValue("InvalidCultureName", typeof(string));
}
- [System.Security.SecurityCritical] // auto-generated_required
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
- if (info == null)
- {
- throw new ArgumentNullException(nameof(info));
- }
-
base.GetObjectData(info, context);
info.AddValue("InvalidCultureId", _invalidCultureId, typeof(int?));
info.AddValue("InvalidCultureName", _invalidCultureName, typeof(string));
diff --git a/src/mscorlib/corefx/System/Globalization/CultureTypes.cs b/src/mscorlib/corefx/System/Globalization/CultureTypes.cs
index 80b588aabb..35ddff6086 100644
--- a/src/mscorlib/corefx/System/Globalization/CultureTypes.cs
+++ b/src/mscorlib/corefx/System/Globalization/CultureTypes.cs
@@ -7,7 +7,7 @@
// the rest are obsolete or not valid on Linux
namespace System.Globalization
-{
+{
[Serializable]
[Flags]
public enum CultureTypes
@@ -25,4 +25,4 @@ namespace System.Globalization
[Obsolete("This value has been deprecated. Please use other values in CultureTypes.")]
FrameworkCultures = 0x0040, // will return only the v2 cultures marked as Framework culture.
}
-}
+}
diff --git a/src/mscorlib/corefx/System/Globalization/DateTimeFormatInfo.cs b/src/mscorlib/corefx/System/Globalization/DateTimeFormatInfo.cs
index 216fc603d0..b79ce90424 100644
--- a/src/mscorlib/corefx/System/Globalization/DateTimeFormatInfo.cs
+++ b/src/mscorlib/corefx/System/Globalization/DateTimeFormatInfo.cs
@@ -514,7 +514,6 @@ namespace System.Globalization
public String AMDesignator
{
- // auto-generated
get
{
if (this.amDesignator == null)
@@ -1031,7 +1030,6 @@ namespace System.Globalization
public String PMDesignator
{
- // auto-generated
get
{
if (this.pmDesignator == null)
@@ -2163,7 +2161,7 @@ namespace System.Globalization
//
// Positive TimeSpan Pattern
//
-
+ [NonSerialized]
private string _fullTimeSpanPositivePattern;
internal String FullTimeSpanPositivePattern
{
@@ -2187,7 +2185,7 @@ namespace System.Globalization
//
// Negative TimeSpan Pattern
//
-
+ [NonSerialized]
private string _fullTimeSpanNegativePattern;
internal String FullTimeSpanNegativePattern
{
@@ -2343,7 +2341,7 @@ namespace System.Globalization
//
// DateTimeFormatInfo tokenizer. This is used by DateTime.Parse() to break input string into tokens.
//
-
+ [NonSerialized]
private TokenHashValue[] _dtfiTokenHash;
private const int TOKEN_HASH_SIZE = 199;
diff --git a/src/mscorlib/corefx/System/Globalization/DigitShapes.cs b/src/mscorlib/corefx/System/Globalization/DigitShapes.cs
index 7e40033a2f..0e4dcc87c3 100644
--- a/src/mscorlib/corefx/System/Globalization/DigitShapes.cs
+++ b/src/mscorlib/corefx/System/Globalization/DigitShapes.cs
@@ -5,6 +5,7 @@
//
// The enumeration constants used in NumberFormatInfo.DigitSubstitution.
//
+
namespace System.Globalization
{
[Serializable]
diff --git a/src/mscorlib/corefx/System/Globalization/EastAsianLunisolarCalendar.cs b/src/mscorlib/corefx/System/Globalization/EastAsianLunisolarCalendar.cs
index 84a44a990d..f82fad8e5b 100644
--- a/src/mscorlib/corefx/System/Globalization/EastAsianLunisolarCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/EastAsianLunisolarCalendar.cs
@@ -14,7 +14,6 @@ namespace System.Globalization
////////////////////////////////////////////////////////////////////////////
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public abstract class EastAsianLunisolarCalendar : Calendar
{
internal const int LeapMonth = 0;
diff --git a/src/mscorlib/corefx/System/Globalization/GregorianCalendar.cs b/src/mscorlib/corefx/System/Globalization/GregorianCalendar.cs
index c2ed2e012b..be5b65b385 100644
--- a/src/mscorlib/corefx/System/Globalization/GregorianCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/GregorianCalendar.cs
@@ -19,7 +19,6 @@ namespace System.Globalization
// 1 BeforeCurrentEra (BC)
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class GregorianCalendar : Calendar
{
@@ -66,7 +65,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -75,7 +73,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -84,7 +81,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -510,7 +506,6 @@ namespace System.Globalization
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
if (era != CurrentEra && era != ADEra)
diff --git a/src/mscorlib/corefx/System/Globalization/HebrewCalendar.cs b/src/mscorlib/corefx/System/Globalization/HebrewCalendar.cs
index 7e63708382..b4f54f8fbb 100644
--- a/src/mscorlib/corefx/System/Globalization/HebrewCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/HebrewCalendar.cs
@@ -63,7 +63,6 @@ namespace System.Globalization
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class HebrewCalendar : Calendar
{
public static readonly int HebrewEra = 1;
diff --git a/src/mscorlib/corefx/System/Globalization/HijriCalendar.Win32.cs b/src/mscorlib/corefx/System/Globalization/HijriCalendar.Win32.cs
index 5f46dce61d..869b809bff 100644
--- a/src/mscorlib/corefx/System/Globalization/HijriCalendar.Win32.cs
+++ b/src/mscorlib/corefx/System/Globalization/HijriCalendar.Win32.cs
@@ -8,9 +8,10 @@ namespace System.Globalization
{
public partial class HijriCalendar : Calendar
{
- private static int GetHijriDateAdjustment()
+ private int GetHijriDateAdjustment()
{
- if (_hijriAdvance == Int32.MinValue) {
+ if (_hijriAdvance == Int32.MinValue)
+ {
// Never been set before. Use the system value from registry.
_hijriAdvance = GetAdvanceHijriDate();
}
@@ -36,11 +37,13 @@ namespace System.Globalization
** "AddHijriDate+1" => Add +1 days to the current calculated Hijri date.
** "AddHijriDate+2" => Add +2 days to the current calculated Hijri date.
============================================================================*/
- private static int GetAdvanceHijriDate() {
+ private static int GetAdvanceHijriDate()
+ {
int hijriAdvance = 0;
Microsoft.Win32.RegistryKey key = null;
- try {
+ try
+ {
// Open in read-only mode.
// Use InternalOpenSubKey so that we avoid the security check.
key = RegistryKey.GetBaseKey(RegistryKey.HKEY_CURRENT_USER).OpenSubKey(InternationalRegKey, false);
@@ -49,21 +52,28 @@ namespace System.Globalization
catch (ObjectDisposedException) { return 0; }
catch (ArgumentException) { return 0; }
- if (key != null) {
- try {
+ if (key != null)
+ {
+ try
+ {
Object value = key.InternalGetValue(HijriAdvanceRegKeyEntry, null, false, false);
- if (value == null) {
+ if (value == null)
+ {
return (0);
}
String str = value.ToString();
- if (String.Compare(str, 0, HijriAdvanceRegKeyEntry, 0, HijriAdvanceRegKeyEntry.Length, StringComparison.OrdinalIgnoreCase) == 0) {
+ if (String.Compare(str, 0, HijriAdvanceRegKeyEntry, 0, HijriAdvanceRegKeyEntry.Length, StringComparison.OrdinalIgnoreCase) == 0)
+ {
if (str.Length == HijriAdvanceRegKeyEntry.Length)
hijriAdvance = -1;
- else {
+ else
+ {
str = str.Substring(HijriAdvanceRegKeyEntry.Length);
- try {
+ try
+ {
int advance = Int32.Parse(str.ToString(), CultureInfo.InvariantCulture);
- if ((advance >= MinAdvancedHijri) && (advance <= MaxAdvancedHijri)) {
+ if ((advance >= MinAdvancedHijri) && (advance <= MaxAdvancedHijri))
+ {
hijriAdvance = advance;
}
}
@@ -75,10 +85,10 @@ namespace System.Globalization
}
}
}
- finally {
+ finally
+ {
key.Close();
}
-
}
return (hijriAdvance);
}
diff --git a/src/mscorlib/corefx/System/Globalization/HijriCalendar.cs b/src/mscorlib/corefx/System/Globalization/HijriCalendar.cs
index 156b2104bd..0c72d9eaf5 100644
--- a/src/mscorlib/corefx/System/Globalization/HijriCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/HijriCalendar.cs
@@ -45,7 +45,6 @@ namespace System.Globalization
*/
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public partial class HijriCalendar : Calendar
{
public static readonly int HijriEra = 1;
@@ -72,7 +71,6 @@ namespace System.Globalization
internal static readonly DateTime calendarMaxValue = DateTime.MaxValue;
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -82,7 +80,6 @@ namespace System.Globalization
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -91,7 +88,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -565,7 +561,6 @@ namespace System.Globalization
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
CheckYearRange(year, era);
diff --git a/src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs b/src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs
index f39457b750..3d3292e3db 100644
--- a/src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs
+++ b/src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs
@@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
namespace System.Globalization
{
- sealed partial class IdnMapping
+ public sealed partial class IdnMapping
{
private unsafe string GetAsciiCore(char* unicode, int count)
{
diff --git a/src/mscorlib/corefx/System/Globalization/JapaneseCalendar.Win32.cs b/src/mscorlib/corefx/System/Globalization/JapaneseCalendar.Win32.cs
index bbde320041..a83c4fad9e 100644
--- a/src/mscorlib/corefx/System/Globalization/JapaneseCalendar.Win32.cs
+++ b/src/mscorlib/corefx/System/Globalization/JapaneseCalendar.Win32.cs
@@ -33,7 +33,7 @@ namespace System.Globalization
// Look in the registry key and see if we can find any ranges
int iFoundEras = 0;
EraInfo[] registryEraRanges = null;
-
+
try
{
// Need to access registry
@@ -59,7 +59,7 @@ namespace System.Globalization
// Remember we found one.
registryEraRanges[iFoundEras] = era;
- iFoundEras++;
+ iFoundEras++;
}
}
}
@@ -109,7 +109,7 @@ namespace System.Globalization
else
{
// Rest are until the next era (remember most recent era is first in array)
- registryEraRanges[i].maxEraYear = registryEraRanges[i-1].yearOffset + 1 - registryEraRanges[i].yearOffset;
+ registryEraRanges[i].maxEraYear = registryEraRanges[i - 1].yearOffset + 1 - registryEraRanges[i].yearOffset;
}
}
@@ -147,7 +147,7 @@ namespace System.Globalization
{
// Need inputs
if (value == null || data == null) return null;
-
+
//
// Get Date
//
@@ -159,9 +159,9 @@ namespace System.Globalization
int month;
int day;
- if (!Int32.TryParse(value.Substring(0,4), NumberStyles.None, NumberFormatInfo.InvariantInfo, out year) ||
- !Int32.TryParse(value.Substring(5,2), NumberStyles.None, NumberFormatInfo.InvariantInfo, out month) ||
- !Int32.TryParse(value.Substring(8,2), NumberStyles.None, NumberFormatInfo.InvariantInfo, out day))
+ if (!Int32.TryParse(value.Substring(0, 4), NumberStyles.None, NumberFormatInfo.InvariantInfo, out year) ||
+ !Int32.TryParse(value.Substring(5, 2), NumberStyles.None, NumberFormatInfo.InvariantInfo, out month) ||
+ !Int32.TryParse(value.Substring(8, 2), NumberStyles.None, NumberFormatInfo.InvariantInfo, out day))
{
// Couldn't convert integer, fail
return null;
@@ -171,7 +171,7 @@ namespace System.Globalization
// Get Strings
//
// Needs to be a certain length e_a_E_A at least (7 chars, exactly 4 groups)
- String[] names = data.Split(new char[] {'_'});
+ String[] names = data.Split('_');
// Should have exactly 4 parts
// 0 - Era Name
@@ -192,18 +192,18 @@ namespace System.Globalization
// Note that the era # and max era year need cleaned up after sorting
// Don't use the full English Era Name (names[2])
//
- return new EraInfo( 0, year, month, day, year - 1, 1, 0,
+ return new EraInfo(0, year, month, day, year - 1, 1, 0,
names[0], names[1], names[3]);
}
// PAL Layer ends here
- private static string[] JapaneseErasEnglishNames = new String[] { "M", "T", "S", "H" };
+ private static string[] s_japaneseErasEnglishNames = new String[] { "M", "T", "S", "H" };
private static string GetJapaneseEnglishEraName(int era)
{
Debug.Assert(era > 0);
- return era <= JapaneseErasEnglishNames.Length ? JapaneseErasEnglishNames[era - 1] : " ";
+ return era <= s_japaneseErasEnglishNames.Length ? s_japaneseErasEnglishNames[era - 1] : " ";
}
}
}
diff --git a/src/mscorlib/corefx/System/Globalization/JapaneseCalendar.cs b/src/mscorlib/corefx/System/Globalization/JapaneseCalendar.cs
index 0b0fa77fc0..f0216c8f51 100644
--- a/src/mscorlib/corefx/System/Globalization/JapaneseCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/JapaneseCalendar.cs
@@ -39,13 +39,11 @@ namespace System.Globalization
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public partial class JapaneseCalendar : Calendar
{
internal static readonly DateTime calendarMinValue = new DateTime(1868, 9, 8);
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -54,7 +52,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -63,7 +60,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -233,7 +229,6 @@ namespace System.Globalization
[SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
{
return (helper.GetWeekOfYear(time, rule, firstDayOfWeek));
@@ -281,7 +276,6 @@ namespace System.Globalization
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
return (helper.GetLeapMonth(year, era));
diff --git a/src/mscorlib/corefx/System/Globalization/JapaneseLunisolarCalendar.cs b/src/mscorlib/corefx/System/Globalization/JapaneseLunisolarCalendar.cs
index ecdaced2d7..cc3d34954d 100644
--- a/src/mscorlib/corefx/System/Globalization/JapaneseLunisolarCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/JapaneseLunisolarCalendar.cs
@@ -206,9 +206,9 @@ namespace System.Globalization
}
}
- internal override int GetYearInfo(int LunarYear, int Index)
+ internal override int GetYearInfo(int lunarYear, int index)
{
- if ((LunarYear < MIN_LUNISOLAR_YEAR) || (LunarYear > MAX_LUNISOLAR_YEAR))
+ if ((lunarYear < MIN_LUNISOLAR_YEAR) || (lunarYear > MAX_LUNISOLAR_YEAR))
{
throw new ArgumentOutOfRangeException(
"year",
@@ -220,7 +220,7 @@ namespace System.Globalization
}
Contract.EndContractBlock();
- return s_yinfo[LunarYear - MIN_LUNISOLAR_YEAR, Index];
+ return s_yinfo[lunarYear - MIN_LUNISOLAR_YEAR, index];
}
internal override int GetYear(int year, DateTime time)
diff --git a/src/mscorlib/corefx/System/Globalization/JulianCalendar.cs b/src/mscorlib/corefx/System/Globalization/JulianCalendar.cs
index a4277c6d49..43e6ad07a2 100644
--- a/src/mscorlib/corefx/System/Globalization/JulianCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/JulianCalendar.cs
@@ -19,7 +19,6 @@ namespace System.Globalization
//* Julia 0001/01/03 9999/10/19
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class JulianCalendar : Calendar
{
public static readonly int JulianEra = 1;
@@ -49,7 +48,6 @@ namespace System.Globalization
internal int MaxYear = 9999;
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -58,7 +56,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -67,7 +64,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -346,7 +342,6 @@ namespace System.Globalization
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
CheckYearEraRange(year, era);
diff --git a/src/mscorlib/corefx/System/Globalization/KoreanCalendar.cs b/src/mscorlib/corefx/System/Globalization/KoreanCalendar.cs
index 27d0aa812a..b015aa0716 100644
--- a/src/mscorlib/corefx/System/Globalization/KoreanCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/KoreanCalendar.cs
@@ -25,7 +25,6 @@ namespace System.Globalization
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class KoreanCalendar : Calendar
{
//
@@ -51,7 +50,6 @@ namespace System.Globalization
internal GregorianCalendarHelper helper;
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -60,7 +58,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -69,7 +66,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -160,7 +156,6 @@ namespace System.Globalization
[SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
{
return (helper.GetWeekOfYear(time, rule, firstDayOfWeek));
@@ -199,7 +194,6 @@ namespace System.Globalization
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
return (helper.GetLeapMonth(year, era));
diff --git a/src/mscorlib/corefx/System/Globalization/KoreanLunisolarCalendar.cs b/src/mscorlib/corefx/System/Globalization/KoreanLunisolarCalendar.cs
index 07d85a461e..6d091285b2 100644
--- a/src/mscorlib/corefx/System/Globalization/KoreanLunisolarCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/KoreanLunisolarCalendar.cs
@@ -1251,9 +1251,9 @@ namespace System.Globalization
}
}
- internal override int GetYearInfo(int LunarYear, int Index)
+ internal override int GetYearInfo(int lunarYear, int index)
{
- if ((LunarYear < MIN_LUNISOLAR_YEAR) || (LunarYear > MAX_LUNISOLAR_YEAR))
+ if ((lunarYear < MIN_LUNISOLAR_YEAR) || (lunarYear > MAX_LUNISOLAR_YEAR))
{
throw new ArgumentOutOfRangeException(
"year",
@@ -1264,7 +1264,7 @@ namespace System.Globalization
MAX_LUNISOLAR_YEAR));
}
Contract.EndContractBlock();
- return s_yinfo[LunarYear - MIN_LUNISOLAR_YEAR, Index];
+ return s_yinfo[lunarYear - MIN_LUNISOLAR_YEAR, index];
}
internal override int GetYear(int year, DateTime time)
diff --git a/src/mscorlib/corefx/System/Globalization/NumberFormatInfo.cs b/src/mscorlib/corefx/System/Globalization/NumberFormatInfo.cs
index 813554fd21..54cf492135 100644
--- a/src/mscorlib/corefx/System/Globalization/NumberFormatInfo.cs
+++ b/src/mscorlib/corefx/System/Globalization/NumberFormatInfo.cs
@@ -289,7 +289,7 @@ namespace System.Globalization
if (value < 0 || value > 99)
{
throw new ArgumentOutOfRangeException(
- "CurrencyDecimalDigits",
+ nameof(CurrencyDecimalDigits),
String.Format(
CultureInfo.CurrentCulture,
SR.ArgumentOutOfRange_Range,
@@ -357,14 +357,14 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("CurrencyGroupSizes",
+ throw new ArgumentNullException(nameof(CurrencyGroupSizes),
SR.ArgumentNull_Obj);
}
Contract.EndContractBlock();
VerifyWritable();
Int32[] inputSizes = (Int32[])value.Clone();
- CheckGroupSize("CurrencyGroupSizes", inputSizes);
+ CheckGroupSize(nameof(CurrencyGroupSizes), inputSizes);
currencyGroupSizes = inputSizes;
}
}
@@ -381,14 +381,14 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("NumberGroupSizes",
+ throw new ArgumentNullException(nameof(NumberGroupSizes),
SR.ArgumentNull_Obj);
}
Contract.EndContractBlock();
VerifyWritable();
Int32[] inputSizes = (Int32[])value.Clone();
- CheckGroupSize("NumberGroupSizes", inputSizes);
+ CheckGroupSize(nameof(NumberGroupSizes), inputSizes);
numberGroupSizes = inputSizes;
}
}
@@ -422,7 +422,7 @@ namespace System.Globalization
set
{
VerifyWritable();
- VerifyGroupSeparator(value, "CurrencyGroupSeparator");
+ VerifyGroupSeparator(value, nameof(CurrencyGroupSeparator));
currencyGroupSeparator = value;
}
}
@@ -435,7 +435,7 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("CurrencySymbol",
+ throw new ArgumentNullException(nameof(CurrencySymbol),
SR.ArgumentNull_String);
}
Contract.EndContractBlock();
@@ -475,7 +475,7 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("NaNSymbol",
+ throw new ArgumentNullException(nameof(NaNSymbol),
SR.ArgumentNull_String);
}
Contract.EndContractBlock();
@@ -494,7 +494,7 @@ namespace System.Globalization
if (value < 0 || value > 15)
{
throw new ArgumentOutOfRangeException(
- "CurrencyNegativePattern",
+ nameof(CurrencyNegativePattern),
String.Format(
CultureInfo.CurrentCulture,
SR.ArgumentOutOfRange_Range,
@@ -519,7 +519,7 @@ namespace System.Globalization
if (value < 0 || value > 4)
{
throw new ArgumentOutOfRangeException(
- "NumberNegativePattern",
+ nameof(NumberNegativePattern),
String.Format(
CultureInfo.CurrentCulture,
SR.ArgumentOutOfRange_Range,
@@ -544,7 +544,7 @@ namespace System.Globalization
if (value < 0 || value > 3)
{
throw new ArgumentOutOfRangeException(
- "PercentPositivePattern",
+ nameof(PercentPositivePattern),
String.Format(
CultureInfo.CurrentCulture,
SR.ArgumentOutOfRange_Range,
@@ -569,7 +569,7 @@ namespace System.Globalization
if (value < 0 || value > 11)
{
throw new ArgumentOutOfRangeException(
- "PercentNegativePattern",
+ nameof(PercentNegativePattern),
String.Format(
CultureInfo.CurrentCulture,
SR.ArgumentOutOfRange_Range,
@@ -593,7 +593,7 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("NegativeInfinitySymbol",
+ throw new ArgumentNullException(nameof(NegativeInfinitySymbol),
SR.ArgumentNull_String);
}
Contract.EndContractBlock();
@@ -610,7 +610,7 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("NegativeSign",
+ throw new ArgumentNullException(nameof(NegativeSign),
SR.ArgumentNull_String);
}
Contract.EndContractBlock();
@@ -628,7 +628,7 @@ namespace System.Globalization
if (value < 0 || value > 99)
{
throw new ArgumentOutOfRangeException(
- "NumberDecimalDigits",
+ nameof(NumberDecimalDigits),
String.Format(
CultureInfo.CurrentCulture,
SR.ArgumentOutOfRange_Range,
@@ -648,7 +648,7 @@ namespace System.Globalization
set
{
VerifyWritable();
- VerifyDecimalSeparator(value, "NumberDecimalSeparator");
+ VerifyDecimalSeparator(value, nameof(NumberDecimalSeparator));
numberDecimalSeparator = value;
}
}
@@ -660,7 +660,7 @@ namespace System.Globalization
set
{
VerifyWritable();
- VerifyGroupSeparator(value, "NumberGroupSeparator");
+ VerifyGroupSeparator(value, nameof(NumberGroupSeparator));
numberGroupSeparator = value;
}
}
@@ -674,7 +674,7 @@ namespace System.Globalization
if (value < 0 || value > 3)
{
throw new ArgumentOutOfRangeException(
- "CurrencyPositivePattern",
+ nameof(CurrencyPositivePattern),
String.Format(
CultureInfo.CurrentCulture,
SR.ArgumentOutOfRange_Range,
@@ -698,7 +698,7 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("PositiveInfinitySymbol",
+ throw new ArgumentNullException(nameof(PositiveInfinitySymbol),
SR.ArgumentNull_String);
}
Contract.EndContractBlock();
@@ -715,7 +715,7 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("PositiveSign",
+ throw new ArgumentNullException(nameof(PositiveSign),
SR.ArgumentNull_String);
}
Contract.EndContractBlock();
@@ -733,7 +733,7 @@ namespace System.Globalization
if (value < 0 || value > 99)
{
throw new ArgumentOutOfRangeException(
- "PercentDecimalDigits",
+ nameof(PercentDecimalDigits),
String.Format(
CultureInfo.CurrentCulture,
SR.ArgumentOutOfRange_Range,
@@ -753,7 +753,7 @@ namespace System.Globalization
set
{
VerifyWritable();
- VerifyDecimalSeparator(value, "PercentDecimalSeparator");
+ VerifyDecimalSeparator(value, nameof(PercentDecimalSeparator));
percentDecimalSeparator = value;
}
}
@@ -765,7 +765,7 @@ namespace System.Globalization
set
{
VerifyWritable();
- VerifyGroupSeparator(value, "PercentGroupSeparator");
+ VerifyGroupSeparator(value, nameof(PercentGroupSeparator));
percentGroupSeparator = value;
}
}
@@ -781,7 +781,7 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("PercentSymbol",
+ throw new ArgumentNullException(nameof(PercentSymbol),
SR.ArgumentNull_String);
}
Contract.EndContractBlock();
@@ -798,7 +798,7 @@ namespace System.Globalization
{
if (value == null)
{
- throw new ArgumentNullException("PerMilleSymbol",
+ throw new ArgumentNullException(nameof(PerMilleSymbol),
SR.ArgumentNull_String);
}
Contract.EndContractBlock();
@@ -813,7 +813,7 @@ namespace System.Globalization
set
{
VerifyWritable();
- VerifyNativeDigits(value, "NativeDigits");
+ VerifyNativeDigits(value, nameof(NativeDigits));
nativeDigits = value;
}
}
@@ -824,7 +824,7 @@ namespace System.Globalization
set
{
VerifyWritable();
- VerifyDigitSubstitution(value, "DigitSubstitution");
+ VerifyDigitSubstitution(value, nameof(DigitSubstitution));
digitSubstitution = (int) value;
}
}
diff --git a/src/mscorlib/corefx/System/Globalization/RegionInfo.cs b/src/mscorlib/corefx/System/Globalization/RegionInfo.cs
index 0645ded0ab..15679d24dd 100644
--- a/src/mscorlib/corefx/System/Globalization/RegionInfo.cs
+++ b/src/mscorlib/corefx/System/Globalization/RegionInfo.cs
@@ -87,7 +87,6 @@ namespace System.Globalization
SetName(name);
}
- [System.Security.SecuritySafeCritical] // auto-generated
public RegionInfo(int culture)
{
if (culture == CultureInfo.LOCALE_INVARIANT) //The InvariantCulture has no matching region
@@ -132,7 +131,6 @@ namespace System.Globalization
[OnSerializing]
private void OnSerializing(StreamingContext ctx) { }
- [System.Security.SecurityCritical] // auto-generated
[OnDeserialized]
private void OnDeserialized(StreamingContext ctx)
{
diff --git a/src/mscorlib/corefx/System/Globalization/SortKey.cs b/src/mscorlib/corefx/System/Globalization/SortKey.cs
index fc151fa37e..9e22a6f332 100644
--- a/src/mscorlib/corefx/System/Globalization/SortKey.cs
+++ b/src/mscorlib/corefx/System/Globalization/SortKey.cs
@@ -19,7 +19,6 @@ namespace System.Globalization {
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public partial class SortKey
{
diff --git a/src/mscorlib/corefx/System/Globalization/SortVersion.cs b/src/mscorlib/corefx/System/Globalization/SortVersion.cs
index 72aa6d6b7b..983179c149 100644
--- a/src/mscorlib/corefx/System/Globalization/SortVersion.cs
+++ b/src/mscorlib/corefx/System/Globalization/SortVersion.cs
@@ -5,7 +5,7 @@
using System;
using System.Diagnostics.Contracts;
-namespace System.Globalization
+namespace System.Globalization
{
[Serializable]
public sealed class SortVersion : IEquatable<SortVersion>
@@ -13,48 +13,48 @@ namespace System.Globalization
private int _nlsVersion;
private Guid _sortId;
- public int FullVersion
+ public int FullVersion
{
- get
+ get
{
return _nlsVersion;
}
}
- public Guid SortId
+ public Guid SortId
{
- get
+ get
{
return _sortId;
}
}
- public SortVersion(int fullVersion, Guid sortId)
- {
+ public SortVersion(int fullVersion, Guid sortId)
+ {
_sortId = sortId;
_nlsVersion = fullVersion;
}
- internal SortVersion(int nlsVersion, int effectiveId, Guid customVersion)
+ internal SortVersion(int nlsVersion, int effectiveId, Guid customVersion)
{
_nlsVersion = nlsVersion;
- if (customVersion == Guid.Empty)
+ if (customVersion == Guid.Empty)
{
- byte b1 = (byte) (effectiveId >> 24);
- byte b2 = (byte) ((effectiveId & 0x00FF0000) >> 16);
- byte b3 = (byte) ((effectiveId & 0x0000FF00) >> 8);
- byte b4 = (byte) (effectiveId & 0xFF);
- customVersion = new Guid(0,0,0,0,0,0,0,b1,b2,b3,b4);
+ byte b1 = (byte)(effectiveId >> 24);
+ byte b2 = (byte)((effectiveId & 0x00FF0000) >> 16);
+ byte b3 = (byte)((effectiveId & 0x0000FF00) >> 8);
+ byte b4 = (byte)(effectiveId & 0xFF);
+ customVersion = new Guid(0, 0, 0, 0, 0, 0, 0, b1, b2, b3, b4);
}
_sortId = customVersion;
}
- public override bool Equals(object obj)
+ public override bool Equals(object obj)
{
SortVersion n = obj as SortVersion;
- if (n != null)
+ if (n != null)
{
return this.Equals(n);
}
@@ -62,9 +62,9 @@ namespace System.Globalization
return false;
}
- public bool Equals(SortVersion other)
+ public bool Equals(SortVersion other)
{
- if (other == null)
+ if (other == null)
{
return false;
}
@@ -72,19 +72,19 @@ namespace System.Globalization
return _nlsVersion == other._nlsVersion && _sortId == other._sortId;
}
- public override int GetHashCode()
- {
- return _nlsVersion * 7 | _sortId.GetHashCode();
+ public override int GetHashCode()
+ {
+ return _nlsVersion * 7 | _sortId.GetHashCode();
}
- public static bool operator ==(SortVersion left, SortVersion right)
+ public static bool operator ==(SortVersion left, SortVersion right)
{
- if (((object) left) != null)
+ if (((object)left) != null)
{
return left.Equals(right);
}
- if (((object) right) != null)
+ if (((object)right) != null)
{
return right.Equals(left);
}
@@ -93,7 +93,7 @@ namespace System.Globalization
return true;
}
- public static bool operator !=(SortVersion left, SortVersion right)
+ public static bool operator !=(SortVersion left, SortVersion right)
{
return !(left == right);
}
diff --git a/src/mscorlib/corefx/System/Globalization/StringInfo.cs b/src/mscorlib/corefx/System/Globalization/StringInfo.cs
index 7558002413..f1dd30561b 100644
--- a/src/mscorlib/corefx/System/Globalization/StringInfo.cs
+++ b/src/mscorlib/corefx/System/Globalization/StringInfo.cs
@@ -20,7 +20,6 @@ using System.Runtime.Serialization;
namespace System.Globalization
{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class StringInfo
{
[OptionalField(VersionAdded = 2)]
@@ -53,7 +52,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override bool Equals(Object value)
{
StringInfo that = value as StringInfo;
@@ -64,7 +62,6 @@ namespace System.Globalization
return (false);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetHashCode()
{
return _str.GetHashCode();
diff --git a/src/mscorlib/corefx/System/Globalization/TaiwanCalendar.cs b/src/mscorlib/corefx/System/Globalization/TaiwanCalendar.cs
index 36edd5b2fd..2e735e0cb9 100644
--- a/src/mscorlib/corefx/System/Globalization/TaiwanCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/TaiwanCalendar.cs
@@ -22,7 +22,6 @@ namespace System.Globalization
============================================================================*/
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class TaiwanCalendar : Calendar
{
//
@@ -65,7 +64,6 @@ namespace System.Globalization
internal static readonly DateTime calendarMinValue = new DateTime(1912, 1, 1);
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -74,7 +72,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -83,7 +80,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -166,7 +162,6 @@ namespace System.Globalization
[SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
{
return (helper.GetWeekOfYear(time, rule, firstDayOfWeek));
@@ -205,7 +200,6 @@ namespace System.Globalization
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
return (helper.GetLeapMonth(year, era));
diff --git a/src/mscorlib/corefx/System/Globalization/TaiwanLunisolarCalendar.cs b/src/mscorlib/corefx/System/Globalization/TaiwanLunisolarCalendar.cs
index 42b7f2473b..1f75ac9a04 100644
--- a/src/mscorlib/corefx/System/Globalization/TaiwanLunisolarCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/TaiwanLunisolarCalendar.cs
@@ -264,9 +264,9 @@ namespace System.Globalization
}
}
- internal override int GetYearInfo(int LunarYear, int Index)
+ internal override int GetYearInfo(int lunarYear, int index)
{
- if ((LunarYear < MIN_LUNISOLAR_YEAR) || (LunarYear > MAX_LUNISOLAR_YEAR))
+ if ((lunarYear < MIN_LUNISOLAR_YEAR) || (lunarYear > MAX_LUNISOLAR_YEAR))
{
throw new ArgumentOutOfRangeException(
"year",
@@ -278,7 +278,7 @@ namespace System.Globalization
}
Contract.EndContractBlock();
- return s_yinfo[LunarYear - MIN_LUNISOLAR_YEAR, Index];
+ return s_yinfo[lunarYear - MIN_LUNISOLAR_YEAR, index];
}
internal override int GetYear(int year, DateTime time)
diff --git a/src/mscorlib/corefx/System/Globalization/TextElementEnumerator.cs b/src/mscorlib/corefx/System/Globalization/TextElementEnumerator.cs
index c0ffc65307..464897b03f 100644
--- a/src/mscorlib/corefx/System/Globalization/TextElementEnumerator.cs
+++ b/src/mscorlib/corefx/System/Globalization/TextElementEnumerator.cs
@@ -21,7 +21,6 @@ namespace System.Globalization
//
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class TextElementEnumerator : IEnumerator
{
private String _str;
diff --git a/src/mscorlib/corefx/System/Globalization/TextInfo.Unix.cs b/src/mscorlib/corefx/System/Globalization/TextInfo.Unix.cs
index 3d9b777f64..67836d89d6 100644
--- a/src/mscorlib/corefx/System/Globalization/TextInfo.Unix.cs
+++ b/src/mscorlib/corefx/System/Globalization/TextInfo.Unix.cs
@@ -33,7 +33,6 @@ namespace System.Globalization
{
}
- [SecuritySafeCritical]
private unsafe string ChangeCase(string s, bool toUpper)
{
Debug.Assert(s != null);
@@ -78,7 +77,6 @@ namespace System.Globalization
return result;
}
- [SecuritySafeCritical]
private unsafe char ChangeCase(char c, bool toUpper)
{
char dst = default(char);
diff --git a/src/mscorlib/corefx/System/Globalization/TextInfo.cs b/src/mscorlib/corefx/System/Globalization/TextInfo.cs
index 5bb376f19c..172bbd25b2 100644
--- a/src/mscorlib/corefx/System/Globalization/TextInfo.cs
+++ b/src/mscorlib/corefx/System/Globalization/TextInfo.cs
@@ -188,7 +188,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public int LCID
{
get
@@ -220,7 +219,6 @@ namespace System.Globalization
// Detect if the object is readonly.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public bool IsReadOnly
{
get { return (_isReadOnly); }
@@ -248,7 +246,6 @@ namespace System.Globalization
// readonly.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public static TextInfo ReadOnly(TextInfo textInfo)
{
if (textInfo == null) { throw new ArgumentNullException(nameof(textInfo)); }
diff --git a/src/mscorlib/corefx/System/Globalization/ThaiBuddhistCalendar.cs b/src/mscorlib/corefx/System/Globalization/ThaiBuddhistCalendar.cs
index 8ebbfa0a69..9e6e30406c 100644
--- a/src/mscorlib/corefx/System/Globalization/ThaiBuddhistCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/ThaiBuddhistCalendar.cs
@@ -21,7 +21,6 @@ namespace System.Globalization
============================================================================*/
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class ThaiBuddhistCalendar : Calendar
{
// Initialize our era info.
@@ -38,7 +37,6 @@ namespace System.Globalization
internal GregorianCalendarHelper helper;
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -47,7 +45,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -56,7 +53,6 @@ namespace System.Globalization
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -128,7 +124,6 @@ namespace System.Globalization
[SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
{
return (helper.GetWeekOfYear(time, rule, firstDayOfWeek));
@@ -167,7 +162,6 @@ namespace System.Globalization
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
return (helper.GetLeapMonth(year, era));
diff --git a/src/mscorlib/corefx/System/Globalization/UmAlQuraCalendar.cs b/src/mscorlib/corefx/System/Globalization/UmAlQuraCalendar.cs
index 997c5f2316..7b47d9c02b 100644
--- a/src/mscorlib/corefx/System/Globalization/UmAlQuraCalendar.cs
+++ b/src/mscorlib/corefx/System/Globalization/UmAlQuraCalendar.cs
@@ -41,7 +41,7 @@ namespace System.Globalization
private static DateMapping[] InitDateMapping()
{
- short[] rawData = new short[]
+ short[] rawData = new short[]
{
//These data is taken from Tables/Excel/UmAlQura.xls please make sure that the two places are in sync
/* DaysPerM GY GM GD D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12
diff --git a/src/mscorlib/corefx/System/IO/FileStream.NetStandard17.cs b/src/mscorlib/corefx/System/IO/FileStream.NetStandard17.cs
deleted file mode 100644
index dc1385fbc0..0000000000
--- a/src/mscorlib/corefx/System/IO/FileStream.NetStandard17.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Microsoft.Win32.SafeHandles;
-using System.Threading.Tasks;
-using System.Diagnostics;
-using System.Threading;
-
-namespace System.IO
-{
- public partial class FileStream : Stream
- {
- public override IAsyncResult BeginRead(byte[] array, int offset, int numBytes, AsyncCallback callback, object state)
- {
- if (array == null)
- throw new ArgumentNullException(nameof(array));
- if (offset < 0)
- throw new ArgumentOutOfRangeException(nameof(offset), SR.ArgumentOutOfRange_NeedNonNegNum);
- if (numBytes < 0)
- throw new ArgumentOutOfRangeException(nameof(numBytes), SR.ArgumentOutOfRange_NeedNonNegNum);
- if (array.Length - offset < numBytes)
- throw new ArgumentException(SR.Argument_InvalidOffLen);
-
- if (IsClosed) throw new ObjectDisposedException(SR.ObjectDisposed_FileClosed);
- if (!CanRead) throw new NotSupportedException(SR.NotSupported_UnreadableStream);
-
- if (!IsAsync)
- return base.BeginRead(array, offset, numBytes, callback, state);
- else
- return TaskToApm.Begin(ReadAsyncInternal(array, offset, numBytes, CancellationToken.None), callback, state);
- }
-
- public override IAsyncResult BeginWrite(byte[] array, int offset, int numBytes, AsyncCallback callback, object state)
- {
- if (array == null)
- throw new ArgumentNullException(nameof(array));
- if (offset < 0)
- throw new ArgumentOutOfRangeException(nameof(offset), SR.ArgumentOutOfRange_NeedNonNegNum);
- if (numBytes < 0)
- throw new ArgumentOutOfRangeException(nameof(numBytes), SR.ArgumentOutOfRange_NeedNonNegNum);
- if (array.Length - offset < numBytes)
- throw new ArgumentException(SR.Argument_InvalidOffLen);
-
- if (IsClosed) throw new ObjectDisposedException(SR.ObjectDisposed_FileClosed);
- if (!CanWrite) throw new NotSupportedException(SR.NotSupported_UnwritableStream);
-
- if (!IsAsync)
- return base.BeginWrite(array, offset, numBytes, callback, state);
- else
- return TaskToApm.Begin(WriteAsyncInternal(array, offset, numBytes, CancellationToken.None), callback, state);
- }
-
- public override int EndRead(IAsyncResult asyncResult)
- {
- if (asyncResult == null)
- throw new ArgumentNullException(nameof(asyncResult));
-
- if (!IsAsync)
- return base.EndRead(asyncResult);
- else
- return TaskToApm.End<int>(asyncResult);
- }
-
- public override void EndWrite(IAsyncResult asyncResult)
- {
- if (asyncResult == null)
- throw new ArgumentNullException(nameof(asyncResult));
-
- if (!IsAsync)
- base.EndWrite(asyncResult);
- else
- TaskToApm.End(asyncResult);
- }
- }
-}
diff --git a/src/mscorlib/corefx/System/IO/FileStream.Win32.cs b/src/mscorlib/corefx/System/IO/FileStream.Win32.cs
index 350d948b00..683eef5e43 100644
--- a/src/mscorlib/corefx/System/IO/FileStream.Win32.cs
+++ b/src/mscorlib/corefx/System/IO/FileStream.Win32.cs
@@ -55,7 +55,7 @@ namespace System.IO
private SafeFileHandle OpenHandle(FileMode mode, FileShare share, FileOptions options)
{
- Interop.mincore.SECURITY_ATTRIBUTES secAttrs = GetSecAttrs(share);
+ Interop.Kernel32.SECURITY_ATTRIBUTES secAttrs = GetSecAttrs(share);
int fAccess =
((_access & FileAccess.Read) == FileAccess.Read ? GENERIC_READ : 0) |
@@ -74,13 +74,13 @@ namespace System.IO
// For mitigating local elevation of privilege attack through named pipes
// make sure we always call CreateFile with SECURITY_ANONYMOUS so that the
// named pipe server can't impersonate a high privileged client security context
- flagsAndAttributes |= (Interop.mincore.SecurityOptions.SECURITY_SQOS_PRESENT | Interop.mincore.SecurityOptions.SECURITY_ANONYMOUS);
+ flagsAndAttributes |= (Interop.Kernel32.SecurityOptions.SECURITY_SQOS_PRESENT | Interop.Kernel32.SecurityOptions.SECURITY_ANONYMOUS);
// Don't pop up a dialog for reading from an empty floppy drive
- uint oldMode = Interop.mincore.SetErrorMode(Interop.mincore.SEM_FAILCRITICALERRORS);
+ uint oldMode = Interop.Kernel32.SetErrorMode(Interop.Kernel32.SEM_FAILCRITICALERRORS);
try
{
- SafeFileHandle fileHandle = Interop.mincore.SafeCreateFile(_path, fAccess, share, ref secAttrs, mode, flagsAndAttributes, IntPtr.Zero);
+ SafeFileHandle fileHandle = Interop.Kernel32.SafeCreateFile(_path, fAccess, share, ref secAttrs, mode, flagsAndAttributes, IntPtr.Zero);
fileHandle.IsAsync = _useAsyncIO;
if (fileHandle.IsInvalid)
@@ -92,8 +92,8 @@ namespace System.IO
// probably be consistent w/ every other directory.
int errorCode = Marshal.GetLastWin32Error();
- if (errorCode == Interop.mincore.Errors.ERROR_PATH_NOT_FOUND && _path.Equals(Directory.InternalGetDirectoryRoot(_path)))
- errorCode = Interop.mincore.Errors.ERROR_ACCESS_DENIED;
+ if (errorCode == Interop.Errors.ERROR_PATH_NOT_FOUND && _path.Equals(Directory.InternalGetDirectoryRoot(_path)))
+ errorCode = Interop.Errors.ERROR_ACCESS_DENIED;
throw Win32Marshal.GetExceptionForWin32Error(errorCode, _path);
}
@@ -102,7 +102,7 @@ namespace System.IO
}
finally
{
- Interop.mincore.SetErrorMode(oldMode);
+ Interop.Kernel32.SetErrorMode(oldMode);
}
}
@@ -112,8 +112,8 @@ namespace System.IO
// constructors that take a String. Everyone else can call
// CreateFile themselves then use the constructor that takes an
// IntPtr. Disallows "con:", "com1:", "lpt1:", etc.
- int fileType = Interop.mincore.GetFileType(_fileHandle);
- if (fileType != Interop.mincore.FileTypes.FILE_TYPE_DISK)
+ int fileType = Interop.Kernel32.GetFileType(_fileHandle);
+ if (fileType != Interop.Kernel32.FileTypes.FILE_TYPE_DISK)
{
_fileHandle.Dispose();
throw new NotSupportedException(SR.NotSupported_FileStreamOnNonFiles);
@@ -163,11 +163,11 @@ namespace System.IO
private void InitFromHandle(SafeFileHandle handle)
{
- int handleType = Interop.mincore.GetFileType(_fileHandle);
- Debug.Assert(handleType == Interop.mincore.FileTypes.FILE_TYPE_DISK || handleType == Interop.mincore.FileTypes.FILE_TYPE_PIPE || handleType == Interop.mincore.FileTypes.FILE_TYPE_CHAR, "FileStream was passed an unknown file type!");
+ int handleType = Interop.Kernel32.GetFileType(_fileHandle);
+ Debug.Assert(handleType == Interop.Kernel32.FileTypes.FILE_TYPE_DISK || handleType == Interop.Kernel32.FileTypes.FILE_TYPE_PIPE || handleType == Interop.Kernel32.FileTypes.FILE_TYPE_CHAR, "FileStream was passed an unknown file type!");
- _canSeek = handleType == Interop.mincore.FileTypes.FILE_TYPE_DISK;
- _isPipe = handleType == Interop.mincore.FileTypes.FILE_TYPE_PIPE;
+ _canSeek = handleType == Interop.Kernel32.FileTypes.FILE_TYPE_DISK;
+ _isPipe = handleType == Interop.Kernel32.FileTypes.FILE_TYPE_PIPE;
// This is necessary for async IO using IO Completion ports via our
// managed Threadpool API's. This calls the OS's
@@ -196,7 +196,7 @@ namespace System.IO
}
else if (!_useAsyncIO)
{
- if (handleType != Interop.mincore.FileTypes.FILE_TYPE_PIPE)
+ if (handleType != Interop.Kernel32.FileTypes.FILE_TYPE_PIPE)
VerifyHandleIsSync();
}
@@ -211,13 +211,13 @@ namespace System.IO
return handle.IsAsync.HasValue ? handle.IsAsync.Value : false;
}
- private unsafe static Interop.mincore.SECURITY_ATTRIBUTES GetSecAttrs(FileShare share)
+ private unsafe static Interop.Kernel32.SECURITY_ATTRIBUTES GetSecAttrs(FileShare share)
{
- Interop.mincore.SECURITY_ATTRIBUTES secAttrs = default(Interop.mincore.SECURITY_ATTRIBUTES);
+ Interop.Kernel32.SECURITY_ATTRIBUTES secAttrs = default(Interop.Kernel32.SECURITY_ATTRIBUTES);
if ((share & FileShare.Inheritable) != 0)
{
- secAttrs = new Interop.mincore.SECURITY_ATTRIBUTES();
- secAttrs.nLength = (uint)sizeof(Interop.mincore.SECURITY_ATTRIBUTES);
+ secAttrs = new Interop.Kernel32.SECURITY_ATTRIBUTES();
+ secAttrs.nLength = (uint)sizeof(Interop.Kernel32.SECURITY_ATTRIBUTES);
secAttrs.bInheritHandle = Interop.BOOL.TRUE;
}
@@ -234,7 +234,7 @@ namespace System.IO
// cause an app to block incorrectly, introducing a deadlock (depending
// on whether a write will wake up an already-blocked thread or this
// Win32FileStream's thread).
- Debug.Assert(Interop.mincore.GetFileType(_fileHandle) != Interop.mincore.FileTypes.FILE_TYPE_PIPE);
+ Debug.Assert(Interop.Kernel32.GetFileType(_fileHandle) != Interop.Kernel32.FileTypes.FILE_TYPE_PIPE);
byte* bytes = stackalloc byte[1];
int numBytesReadWritten;
@@ -246,11 +246,11 @@ namespace System.IO
// accidentally read synchronously from an async pipe.
if ((_access & FileAccess.Read) != 0) // don't use the virtual CanRead or CanWrite, as this may be used in the ctor
{
- r = Interop.mincore.ReadFile(_fileHandle, bytes, 0, out numBytesReadWritten, IntPtr.Zero);
+ r = Interop.Kernel32.ReadFile(_fileHandle, bytes, 0, out numBytesReadWritten, IntPtr.Zero);
}
else if ((_access & FileAccess.Write) != 0) // don't use the virtual CanRead or CanWrite, as this may be used in the ctor
{
- r = Interop.mincore.WriteFile(_fileHandle, bytes, 0, out numBytesReadWritten, IntPtr.Zero);
+ r = Interop.Kernel32.WriteFile(_fileHandle, bytes, 0, out numBytesReadWritten, IntPtr.Zero);
}
if (r == 0)
@@ -273,9 +273,9 @@ namespace System.IO
private long GetLengthInternal()
{
- Interop.mincore.FILE_STANDARD_INFO info = new Interop.mincore.FILE_STANDARD_INFO();
+ Interop.Kernel32.FILE_STANDARD_INFO info = new Interop.Kernel32.FILE_STANDARD_INFO();
- if (!Interop.mincore.GetFileInformationByHandleEx(_fileHandle, Interop.mincore.FILE_INFO_BY_HANDLE_CLASS.FileStandardInfo, out info, (uint)Marshal.SizeOf<Interop.mincore.FILE_STANDARD_INFO>()))
+ if (!Interop.Kernel32.GetFileInformationByHandleEx(_fileHandle, Interop.Kernel32.FILE_INFO_BY_HANDLE_CLASS.FileStandardInfo, out info, (uint)Marshal.SizeOf<Interop.Kernel32.FILE_STANDARD_INFO>()))
throw Win32Marshal.GetExceptionForLastWin32Error();
long len = info.EndOfFile;
// If we're writing near the end of the file, we must include our
@@ -334,7 +334,7 @@ namespace System.IO
private void FlushOSBuffer()
{
- if (!Interop.mincore.FlushFileBuffers(_fileHandle))
+ if (!Interop.Kernel32.FlushFileBuffers(_fileHandle))
{
throw Win32Marshal.GetExceptionForLastWin32Error();
}
@@ -426,10 +426,10 @@ namespace System.IO
VerifyOSHandlePosition();
if (_filePosition != value)
SeekCore(value, SeekOrigin.Begin);
- if (!Interop.mincore.SetEndOfFile(_fileHandle))
+ if (!Interop.Kernel32.SetEndOfFile(_fileHandle))
{
int errorCode = Marshal.GetLastWin32Error();
- if (errorCode == Interop.mincore.Errors.ERROR_INVALID_PARAMETER)
+ if (errorCode == Interop.Errors.ERROR_INVALID_PARAMETER)
throw new ArgumentOutOfRangeException(nameof(value), SR.ArgumentOutOfRange_FileLengthTooBig);
throw Win32Marshal.GetExceptionForWin32Error(errorCode);
}
@@ -658,7 +658,7 @@ namespace System.IO
Debug.Assert(origin >= SeekOrigin.Begin && origin <= SeekOrigin.End, "origin>=SeekOrigin.Begin && origin<=SeekOrigin.End");
long ret = 0;
- if (!Interop.mincore.SetFilePointerEx(_fileHandle, offset, out ret, (uint)origin))
+ if (!Interop.Kernel32.SetFilePointerEx(_fileHandle, offset, out ret, (uint)origin))
{
int errorCode = GetLastWin32ErrorAndDisposeHandleIfInvalid();
throw Win32Marshal.GetExceptionForWin32Error(errorCode);
@@ -1277,12 +1277,12 @@ namespace System.IO
int r = 0;
int numBytesRead = 0;
- fixed (byte* p = bytes)
+ fixed (byte* p = &bytes[0])
{
if (_useAsyncIO)
- r = Interop.mincore.ReadFile(handle, p + offset, count, IntPtr.Zero, overlapped);
+ r = Interop.Kernel32.ReadFile(handle, p + offset, count, IntPtr.Zero, overlapped);
else
- r = Interop.mincore.ReadFile(handle, p + offset, count, out numBytesRead, IntPtr.Zero);
+ r = Interop.Kernel32.ReadFile(handle, p + offset, count, out numBytesRead, IntPtr.Zero);
}
if (r == 0)
@@ -1322,12 +1322,12 @@ namespace System.IO
int numBytesWritten = 0;
int r = 0;
- fixed (byte* p = bytes)
+ fixed (byte* p = &bytes[0])
{
if (_useAsyncIO)
- r = Interop.mincore.WriteFile(handle, p + offset, count, IntPtr.Zero, overlapped);
+ r = Interop.Kernel32.WriteFile(handle, p + offset, count, IntPtr.Zero, overlapped);
else
- r = Interop.mincore.WriteFile(handle, p + offset, count, out numBytesWritten, IntPtr.Zero);
+ r = Interop.Kernel32.WriteFile(handle, p + offset, count, out numBytesWritten, IntPtr.Zero);
}
if (r == 0)
@@ -1363,7 +1363,7 @@ namespace System.IO
// Note that _parent.Dispose doesn't throw so we don't need to special case.
// SetHandleAsInvalid only sets _closed field to true (without
// actually closing handle) so we don't need to call that as well.
- if (errorCode == Interop.mincore.Errors.ERROR_INVALID_HANDLE)
+ if (errorCode == Interop.Errors.ERROR_INVALID_HANDLE)
{
_fileHandle.Dispose();
@@ -1473,7 +1473,7 @@ namespace System.IO
{
// Try to cancel the I/O. We ignore the return value, as cancellation is opportunistic and we
// don't want to fail the operation because we couldn't cancel it.
- Interop.mincore.CancelIoEx(innerAwaitable._fileStream._fileHandle, innerAwaitable._nativeOverlapped);
+ Interop.Kernel32.CancelIoEx(innerAwaitable._fileStream._fileHandle, innerAwaitable._nativeOverlapped);
}
}
}
@@ -1538,7 +1538,7 @@ namespace System.IO
case ERROR_HANDLE_EOF: // logically success with 0 bytes read (read at end of file)
Debug.Assert(readAwaitable._numBytes == 0, $"Expected 0 bytes read, got {readAwaitable._numBytes}");
break;
- case Interop.mincore.Errors.ERROR_OPERATION_ABORTED: // canceled
+ case Interop.Errors.ERROR_OPERATION_ABORTED: // canceled
throw new OperationCanceledException(cancellationToken.IsCancellationRequested ? cancellationToken : new CancellationToken(true));
default: // error
throw Win32Marshal.GetExceptionForWin32Error((int)readAwaitable._errorCode);
@@ -1748,7 +1748,7 @@ namespace System.IO
int lengthLow = unchecked((int)(length));
int lengthHigh = unchecked((int)(length >> 32));
- if (!Interop.mincore.LockFile(_fileHandle, positionLow, positionHigh, lengthLow, lengthHigh))
+ if (!Interop.Kernel32.LockFile(_fileHandle, positionLow, positionHigh, lengthLow, lengthHigh))
{
throw Win32Marshal.GetExceptionForLastWin32Error();
}
@@ -1761,7 +1761,7 @@ namespace System.IO
int lengthLow = unchecked((int)(length));
int lengthHigh = unchecked((int)(length >> 32));
- if (!Interop.mincore.UnlockFile(_fileHandle, positionLow, positionHigh, lengthLow, lengthHigh))
+ if (!Interop.Kernel32.UnlockFile(_fileHandle, positionLow, positionHigh, lengthLow, lengthHigh))
{
throw Win32Marshal.GetExceptionForLastWin32Error();
}
diff --git a/src/mscorlib/corefx/System/IO/FileStream.cs b/src/mscorlib/corefx/System/IO/FileStream.cs
index 398f5a6162..7db8518435 100644
--- a/src/mscorlib/corefx/System/IO/FileStream.cs
+++ b/src/mscorlib/corefx/System/IO/FileStream.cs
@@ -139,20 +139,6 @@ namespace System.IO
this(path, mode, access, share, bufferSize, useAsync ? FileOptions.Asynchronous : FileOptions.None)
{ }
- internal FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options, string msgPath, bool bFromProxy)
- : this(path, mode, access, share, bufferSize, options, msgPath, bFromProxy, useLongPath: false)
- {
- }
-
- internal FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options, string msgPath, bool bFromProxy, bool useLongPath)
- : this(path, mode, access, share, bufferSize, options)
- {
- // msgPath is the path that is handed back to untrusted code, CoreCLR is always full trust
- // bFromProxy is also related to asserting rights for limited trust and also can be ignored
- // useLongPath was used to get around the legacy MaxPath check, this is no longer applicable as everything supports long paths
- // checkHost is also related to limited trust scenarios
- }
-
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options)
{
if (path == null)
@@ -225,24 +211,6 @@ namespace System.IO
return handle.IsAsync.HasValue ? handle.IsAsync.Value : false;
}
- // InternalOpen, InternalCreate, and InternalAppend:
- // Factory methods for FileStream used by File, FileInfo, and ReadLinesIterator
- // Specifies default access and sharing options for FileStreams created by those classes
- internal static FileStream InternalOpen(string path, int bufferSize = DefaultBufferSize, bool useAsync = DefaultIsAsync)
- {
- return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, useAsync);
- }
-
- internal static FileStream InternalCreate(string path, int bufferSize = DefaultBufferSize, bool useAsync = DefaultIsAsync)
- {
- return new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, bufferSize, useAsync);
- }
-
- internal static FileStream InternalAppend(string path, int bufferSize = DefaultBufferSize, bool useAsync = DefaultIsAsync)
- {
- return new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Read, bufferSize, useAsync);
- }
-
[Obsolete("This property has been deprecated. Please use FileStream's SafeFileHandle property instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public virtual IntPtr Handle { get { return SafeFileHandle.DangerousGetHandle(); } }
@@ -650,5 +618,67 @@ namespace System.IO
// on Dispose(false) call.
Dispose(false);
}
+
+ public override IAsyncResult BeginRead(byte[] array, int offset, int numBytes, AsyncCallback callback, object state)
+ {
+ if (array == null)
+ throw new ArgumentNullException(nameof(array));
+ if (offset < 0)
+ throw new ArgumentOutOfRangeException(nameof(offset), SR.ArgumentOutOfRange_NeedNonNegNum);
+ if (numBytes < 0)
+ throw new ArgumentOutOfRangeException(nameof(numBytes), SR.ArgumentOutOfRange_NeedNonNegNum);
+ if (array.Length - offset < numBytes)
+ throw new ArgumentException(SR.Argument_InvalidOffLen);
+
+ if (IsClosed) throw new ObjectDisposedException(SR.ObjectDisposed_FileClosed);
+ if (!CanRead) throw new NotSupportedException(SR.NotSupported_UnreadableStream);
+
+ if (!IsAsync)
+ return base.BeginRead(array, offset, numBytes, callback, state);
+ else
+ return TaskToApm.Begin(ReadAsyncInternal(array, offset, numBytes, CancellationToken.None), callback, state);
+ }
+
+ public override IAsyncResult BeginWrite(byte[] array, int offset, int numBytes, AsyncCallback callback, object state)
+ {
+ if (array == null)
+ throw new ArgumentNullException(nameof(array));
+ if (offset < 0)
+ throw new ArgumentOutOfRangeException(nameof(offset), SR.ArgumentOutOfRange_NeedNonNegNum);
+ if (numBytes < 0)
+ throw new ArgumentOutOfRangeException(nameof(numBytes), SR.ArgumentOutOfRange_NeedNonNegNum);
+ if (array.Length - offset < numBytes)
+ throw new ArgumentException(SR.Argument_InvalidOffLen);
+
+ if (IsClosed) throw new ObjectDisposedException(SR.ObjectDisposed_FileClosed);
+ if (!CanWrite) throw new NotSupportedException(SR.NotSupported_UnwritableStream);
+
+ if (!IsAsync)
+ return base.BeginWrite(array, offset, numBytes, callback, state);
+ else
+ return TaskToApm.Begin(WriteAsyncInternal(array, offset, numBytes, CancellationToken.None), callback, state);
+ }
+
+ public override int EndRead(IAsyncResult asyncResult)
+ {
+ if (asyncResult == null)
+ throw new ArgumentNullException(nameof(asyncResult));
+
+ if (!IsAsync)
+ return base.EndRead(asyncResult);
+ else
+ return TaskToApm.End<int>(asyncResult);
+ }
+
+ public override void EndWrite(IAsyncResult asyncResult)
+ {
+ if (asyncResult == null)
+ throw new ArgumentNullException(nameof(asyncResult));
+
+ if (!IsAsync)
+ base.EndWrite(asyncResult);
+ else
+ TaskToApm.End(asyncResult);
+ }
}
}
diff --git a/src/mscorlib/corefx/System/IO/FileStreamCompletionSource.Win32.cs b/src/mscorlib/corefx/System/IO/FileStreamCompletionSource.Win32.cs
index 532dbb0615..159e416e63 100644
--- a/src/mscorlib/corefx/System/IO/FileStreamCompletionSource.Win32.cs
+++ b/src/mscorlib/corefx/System/IO/FileStreamCompletionSource.Win32.cs
@@ -178,7 +178,7 @@ namespace System.IO
if (result == ResultError)
{
int errorCode = unchecked((int)(packedResult & uint.MaxValue));
- if (errorCode == Interop.mincore.Errors.ERROR_OPERATION_ABORTED)
+ if (errorCode == Interop.Errors.ERROR_OPERATION_ABORTED)
{
TrySetCanceled(_cancellationToken.IsCancellationRequested ? _cancellationToken : new CancellationToken(true));
}
@@ -204,13 +204,13 @@ namespace System.IO
// If the handle is still valid, attempt to cancel the IO
if (!completionSource._stream._fileHandle.IsInvalid &&
- !Interop.mincore.CancelIoEx(completionSource._stream._fileHandle, completionSource._overlapped))
+ !Interop.Kernel32.CancelIoEx(completionSource._stream._fileHandle, completionSource._overlapped))
{
int errorCode = Marshal.GetLastWin32Error();
// ERROR_NOT_FOUND is returned if CancelIoEx cannot find the request to cancel.
// This probably means that the IO operation has completed.
- if (errorCode != Interop.mincore.Errors.ERROR_NOT_FOUND)
+ if (errorCode != Interop.Errors.ERROR_NOT_FOUND)
{
throw Win32Marshal.GetExceptionForWin32Error(errorCode);
}
diff --git a/src/mscorlib/corefx/System/IO/Path.Unix.cs b/src/mscorlib/corefx/System/IO/Path.Unix.cs
index 2dd1907007..c566fa0066 100644
--- a/src/mscorlib/corefx/System/IO/Path.Unix.cs
+++ b/src/mscorlib/corefx/System/IO/Path.Unix.cs
@@ -10,16 +10,11 @@ namespace System.IO
{
public static partial class Path
{
- public static readonly char DirectorySeparatorChar = '/';
- public static readonly char VolumeSeparatorChar = '/';
- public static readonly char PathSeparator = ':';
-
- private const string DirectorySeparatorCharAsString = "/";
-
public static char[] GetInvalidFileNameChars() => new char[] { '\0', '/' };
- internal static readonly int MaxPath = Interop.Sys.MaxPath;
- private static readonly int MaxLongPath = MaxPath;
+ public static char[] GetInvalidPathChars() => new char[] { '\0' };
+
+ internal static int MaxPath => Interop.Sys.MaxPath;
private static readonly bool s_isMac = Interop.Sys.GetUnixName() == "OSX";
@@ -47,12 +42,12 @@ namespace System.IO
Debug.Assert(collapsedString.Length < path.Length || collapsedString.ToString() == path,
"Either we've removed characters, or the string should be unmodified from the input path.");
- if (collapsedString.Length > MaxPath)
+ if (collapsedString.Length > Interop.Sys.MaxPath)
{
throw new PathTooLongException(SR.IO_PathTooLong);
}
- string result = collapsedString.Length == 0 ? DirectorySeparatorCharAsString : collapsedString;
+ string result = collapsedString.Length == 0 ? PathInternal.DirectorySeparatorCharAsString : collapsedString;
return result;
}
@@ -125,15 +120,15 @@ namespace System.IO
}
}
- if (++componentCharCount > PathInternal.MaxComponentLength)
+ if (++componentCharCount > Interop.Sys.MaxName)
{
throw new PathTooLongException(SR.IO_PathTooLong);
}
// Normalize the directory separator if needed
- if (c != Path.DirectorySeparatorChar && c == Path.AltDirectorySeparatorChar)
+ if (c != PathInternal.DirectorySeparatorChar && c == PathInternal.AltDirectorySeparatorChar)
{
- c = Path.DirectorySeparatorChar;
+ c = PathInternal.DirectorySeparatorChar;
flippedSeparator = true;
}
@@ -169,7 +164,7 @@ namespace System.IO
return
string.IsNullOrEmpty(path) ? DefaultTempPath :
PathInternal.IsDirectorySeparator(path[path.Length - 1]) ? path :
- path + DirectorySeparatorChar;
+ path + PathInternal.DirectorySeparatorChar;
}
public static string GetTempFileName()
@@ -197,58 +192,23 @@ namespace System.IO
return false;
PathInternal.CheckInvalidPathChars(path);
- return path.Length > 0 && path[0] == DirectorySeparatorChar;
+ return path.Length > 0 && path[0] == PathInternal.DirectorySeparatorChar;
}
public static string GetPathRoot(string path)
{
if (path == null) return null;
- return IsPathRooted(path) ? DirectorySeparatorCharAsString : String.Empty;
+ return IsPathRooted(path) ? PathInternal.DirectorySeparatorCharAsString : String.Empty;
}
private static unsafe void GetCryptoRandomBytes(byte* bytes, int byteCount)
{
-#if FEATURE_CORECLR
// We want to avoid dependencies on the Crypto library when compiling in CoreCLR. This
// will use the existing PAL implementation.
byte[] buffer = new byte[KeyLength];
Microsoft.Win32.Win32Native.Random(bStrong: true, buffer: buffer, length: KeyLength);
Runtime.InteropServices.Marshal.Copy(buffer, 0, (IntPtr)bytes, KeyLength);
-#else
- if (s_isMac)
- {
- GetCryptoRandomBytesApple(bytes, byteCount);
- }
- else
- {
- GetCryptoRandomBytesOpenSsl(bytes, byteCount);
- }
-#endif
- }
-
-#if !FEATURE_CORECLR
- private static unsafe void GetCryptoRandomBytesApple(byte* bytes, int byteCount)
- {
- Debug.Assert(bytes != null);
- Debug.Assert(byteCount >= 0);
-
- if (Interop.CommonCrypto.CCRandomGenerateBytes(bytes, byteCount) != 0)
- {
- throw new InvalidOperationException(SR.InvalidOperation_Cryptography);
- }
- }
-
- private static unsafe void GetCryptoRandomBytesOpenSsl(byte* bytes, int byteCount)
- {
- Debug.Assert(bytes != null);
- Debug.Assert(byteCount >= 0);
-
- if (!Interop.Crypto.GetRandomBytes(bytes, byteCount))
- {
- throw new InvalidOperationException(SR.InvalidOperation_Cryptography);
- }
}
-#endif
/// <summary>Gets whether the system is case-sensitive.</summary>
internal static bool IsCaseSensitive { get { return !s_isMac; } }
diff --git a/src/mscorlib/corefx/System/IO/Path.Windows.cs b/src/mscorlib/corefx/System/IO/Path.Windows.cs
index b597efc54e..ce867efd2c 100644
--- a/src/mscorlib/corefx/System/IO/Path.Windows.cs
+++ b/src/mscorlib/corefx/System/IO/Path.Windows.cs
@@ -9,14 +9,8 @@ namespace System.IO
{
public static partial class Path
{
- public static readonly char DirectorySeparatorChar = '\\';
- public static readonly char VolumeSeparatorChar = ':';
- public static readonly char PathSeparator = ';';
-
- private const string DirectorySeparatorCharAsString = "\\";
-
public static char[] GetInvalidFileNameChars() => new char[]
- {
+ {
'\"', '<', '>', '|', '\0',
(char)1, (char)2, (char)3, (char)4, (char)5, (char)6, (char)7, (char)8, (char)9, (char)10,
(char)11, (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, (char)18, (char)19, (char)20,
@@ -24,10 +18,18 @@ namespace System.IO
(char)31, ':', '*', '?', '\\', '/'
};
+ public static char[] GetInvalidPathChars() => new char[]
+ {
+ '|', '\0',
+ (char)1, (char)2, (char)3, (char)4, (char)5, (char)6, (char)7, (char)8, (char)9, (char)10,
+ (char)11, (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, (char)18, (char)19, (char)20,
+ (char)21, (char)22, (char)23, (char)24, (char)25, (char)26, (char)27, (char)28, (char)29, (char)30,
+ (char)31
+ };
+
// The max total path is 260, and the max individual component length is 255.
// For example, D:\<256 char file name> isn't legal, even though it's under 260 chars.
- internal static readonly int MaxPath = 260;
- internal static readonly int MaxLongPath = short.MaxValue;
+ internal const int MaxPath = 260;
// Expands the given path to a fully qualified path.
public static string GetFullPath(string path)
@@ -64,9 +66,9 @@ namespace System.IO
// Move past the colon
startIndex += 2;
- if ((path.Length > 0 && path[0] == VolumeSeparatorChar)
- || (path.Length >= startIndex && path[startIndex - 1] == VolumeSeparatorChar && !PathInternal.IsValidDriveChar(path[startIndex - 2]))
- || (path.Length > startIndex && path.IndexOf(VolumeSeparatorChar, startIndex) != -1))
+ if ((path.Length > 0 && path[0] == PathInternal.VolumeSeparatorChar)
+ || (path.Length >= startIndex && path[startIndex - 1] == PathInternal.VolumeSeparatorChar && !PathInternal.IsValidDriveChar(path[startIndex - 2]))
+ || (path.Length > startIndex && path.IndexOf(PathInternal.VolumeSeparatorChar, startIndex) != -1))
{
throw new NotSupportedException(SR.Argument_PathFormatNotSupported);
}
@@ -92,7 +94,7 @@ namespace System.IO
public static string GetTempPath()
{
StringBuilder sb = StringBuilderCache.Acquire(MaxPath);
- uint r = Interop.mincore.GetTempPathW(MaxPath, sb);
+ uint r = Interop.Kernel32.GetTempPathW(MaxPath, sb);
if (r == 0)
throw Win32Marshal.GetExceptionForLastWin32Error();
return GetFullPath(StringBuilderCache.GetStringAndRelease(sb));
@@ -105,7 +107,7 @@ namespace System.IO
string path = GetTempPath();
StringBuilder sb = StringBuilderCache.Acquire(MaxPath);
- uint r = Interop.mincore.GetTempFileNameW(path, "tmp", 0, sb);
+ uint r = Interop.Kernel32.GetTempFileNameW(path, "tmp", 0, sb);
if (r == 0)
throw Win32Marshal.GetExceptionForLastWin32Error();
return StringBuilderCache.GetStringAndRelease(sb);
@@ -121,7 +123,7 @@ namespace System.IO
int length = path.Length;
if ((length >= 1 && PathInternal.IsDirectorySeparator(path[0])) ||
- (length >= 2 && path[1] == VolumeSeparatorChar))
+ (length >= 2 && path[1] == PathInternal.VolumeSeparatorChar))
return true;
}
return false;
diff --git a/src/mscorlib/corefx/System/IO/Path.cs b/src/mscorlib/corefx/System/IO/Path.cs
index 3b1ba6b07d..77b213968b 100644
--- a/src/mscorlib/corefx/System/IO/Path.cs
+++ b/src/mscorlib/corefx/System/IO/Path.cs
@@ -13,10 +13,12 @@ namespace System.IO
// but they will handle most string operations.
public static partial class Path
{
- // Platform specific alternate directory separator character.
- // There is only one directory separator char on Unix, which is the same
- // as the alternate separator on Windows, so same definition is used for both.
- public static readonly char AltDirectorySeparatorChar = '/';
+ // Public static readonly variant of the separators. The Path implementation itself is using
+ // internal const variant of the separators for better performance.
+ public static readonly char DirectorySeparatorChar = PathInternal.DirectorySeparatorChar;
+ public static readonly char AltDirectorySeparatorChar = PathInternal.AltDirectorySeparatorChar;
+ public static readonly char VolumeSeparatorChar = PathInternal.VolumeSeparatorChar;
+ public static readonly char PathSeparator = PathInternal.PathSeparator;
// For generating random file names
// 8 random bytes provides 12 chars in our encoding for the 8.3 name.
@@ -90,11 +92,6 @@ namespace System.IO
return null;
}
- public static char[] GetInvalidPathChars()
- {
- return PathInternal.GetInvalidPathChars();
- }
-
// Returns the extension of the given path. The returned value includes the
// period (".") character of the extension except when you have a terminal period when you get string.Empty, such as ".exe" or
// ".cpp". The returned value is null if the given path is
@@ -290,7 +287,7 @@ namespace System.IO
char ch = finalPath[finalPath.Length - 1];
if (!PathInternal.IsDirectoryOrVolumeSeparator(ch))
{
- finalPath.Append(DirectorySeparatorChar);
+ finalPath.Append(PathInternal.DirectorySeparatorChar);
}
finalPath.Append(paths[i]);
@@ -314,7 +311,7 @@ namespace System.IO
char ch = path1[path1.Length - 1];
return PathInternal.IsDirectoryOrVolumeSeparator(ch) ?
path1 + path2 :
- path1 + DirectorySeparatorCharAsString + path2;
+ path1 + PathInternal.DirectorySeparatorCharAsString + path2;
}
private static string CombineNoChecks(string path1, string path2, string path3)
@@ -340,11 +337,11 @@ namespace System.IO
}
else if (hasSep1)
{
- return path1 + path2 + DirectorySeparatorCharAsString + path3;
+ return path1 + path2 + PathInternal.DirectorySeparatorCharAsString + path3;
}
else if (hasSep2)
{
- return path1 + DirectorySeparatorCharAsString + path2 + path3;
+ return path1 + PathInternal.DirectorySeparatorCharAsString + path2 + path3;
}
else
{
@@ -352,9 +349,9 @@ namespace System.IO
// a params string[]. Instead, try to use a cached StringBuilder.
StringBuilder sb = StringBuilderCache.Acquire(path1.Length + path2.Length + path3.Length + 2);
sb.Append(path1)
- .Append(DirectorySeparatorChar)
+ .Append(PathInternal.DirectorySeparatorChar)
.Append(path2)
- .Append(DirectorySeparatorChar)
+ .Append(PathInternal.DirectorySeparatorChar)
.Append(path3);
return StringBuilderCache.GetStringAndRelease(sb);
}
@@ -396,19 +393,19 @@ namespace System.IO
sb.Append(path1);
if (!hasSep1)
{
- sb.Append(DirectorySeparatorChar);
+ sb.Append(PathInternal.DirectorySeparatorChar);
}
sb.Append(path2);
if (!hasSep2)
{
- sb.Append(DirectorySeparatorChar);
+ sb.Append(PathInternal.DirectorySeparatorChar);
}
sb.Append(path3);
if (!hasSep3)
{
- sb.Append(DirectorySeparatorChar);
+ sb.Append(PathInternal.DirectorySeparatorChar);
}
sb.Append(path4);
diff --git a/src/mscorlib/corefx/System/IO/PathHelper.Windows.cs b/src/mscorlib/corefx/System/IO/PathHelper.Windows.cs
index 4c2cdff45e..e2ead93185 100644
--- a/src/mscorlib/corefx/System/IO/PathHelper.Windows.cs
+++ b/src/mscorlib/corefx/System/IO/PathHelper.Windows.cs
@@ -11,7 +11,7 @@ namespace System.IO
/// <summary>
/// Wrapper to help with path normalization.
/// </summary>
- unsafe internal class PathHelper
+ internal class PathHelper
{
// Can't be over 8.3 and be a short name
private const int MaxShortName = 12;
@@ -19,9 +19,6 @@ namespace System.IO
private const char LastAnsi = (char)255;
private const char Delete = (char)127;
- [ThreadStatic]
- private static StringBuffer t_fullPathBuffer;
-
/// <summary>
/// Normalize the given path.
/// </summary>
@@ -44,10 +41,11 @@ namespace System.IO
internal static string Normalize(string path, bool checkInvalidCharacters, bool expandShortPaths)
{
// Get the full path
- StringBuffer fullPath = t_fullPathBuffer ?? (t_fullPathBuffer = new StringBuffer(PathInternal.MaxShortPath));
+ StringBuffer fullPath = new StringBuffer(PathInternal.MaxShortPath);
+
try
{
- GetFullPathName(path, fullPath);
+ GetFullPathName(path, ref fullPath);
// Trim whitespace off the end of the string. Win32 normalization trims only U+0020.
fullPath.TrimEnd(PathInternal.s_trimEndChars);
@@ -82,17 +80,16 @@ namespace System.IO
// path that contains UNC or to see if the path was doing something like \\.\GLOBALROOT\Device\Mup\,
// \\.\GLOBAL\UNC\, \\.\GLOBALROOT\GLOBAL??\UNC\, etc.
bool specialPath = fullPath.Length > 1 && fullPath[0] == '\\' && fullPath[1] == '\\';
- bool isDevice = PathInternal.IsDevice(fullPath);
+ bool isDevice = PathInternal.IsDevice(ref fullPath);
bool possibleBadUnc = specialPath && !isDevice;
- uint index = specialPath ? 2u : 0;
- uint lastSeparator = specialPath ? 1u : 0;
- uint segmentLength;
- char* start = fullPath.CharPointer;
+ int index = specialPath ? 2 : 0;
+ int lastSeparator = specialPath ? 1 : 0;
+ int segmentLength;
char current;
while (index < fullPath.Length)
{
- current = start[index];
+ current = fullPath[index];
// Try to skip deeper analysis. '?' and higher are valid/ignorable except for '\', '|', and '~'
if (current < '?' || current == '\\' || current == '|' || current == '~')
@@ -111,7 +108,7 @@ namespace System.IO
break;
case '\\':
segmentLength = index - lastSeparator - 1;
- if (segmentLength > (uint)PathInternal.MaxComponentLength)
+ if (segmentLength > PathInternal.MaxComponentLength)
throw new PathTooLongException(SR.IO_PathTooLong + fullPath.ToString());
lastSeparator = index;
@@ -151,7 +148,7 @@ namespace System.IO
throw new ArgumentException(SR.Arg_PathIllegalUNC);
segmentLength = fullPath.Length - lastSeparator - 1;
- if (segmentLength > (uint)PathInternal.MaxComponentLength)
+ if (segmentLength > PathInternal.MaxComponentLength)
throw new PathTooLongException(SR.IO_PathTooLong);
if (foundTilde && segmentLength <= MaxShortName)
@@ -161,11 +158,11 @@ namespace System.IO
// this is how we've always done this. This expansion is costly so we'll continue to let other short paths slide.
if (expandShortPaths && possibleShortPath)
{
- return TryExpandShortFileName(fullPath, originalPath: path);
+ return TryExpandShortFileName(ref fullPath, originalPath: path);
}
else
{
- if (fullPath.Length == (uint)path.Length && fullPath.StartsWith(path))
+ if (fullPath.Length == path.Length && fullPath.StartsWith(path))
{
// If we have the exact same string we were passed in, don't bother to allocate another string from the StringBuilder.
return path;
@@ -184,12 +181,12 @@ namespace System.IO
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- private static bool IsDosUnc(StringBuffer buffer)
+ private static bool IsDosUnc(ref StringBuffer buffer)
{
- return !PathInternal.IsDevice(buffer) && buffer.Length > 1 && buffer[0] == '\\' && buffer[1] == '\\';
+ return !PathInternal.IsDevice(ref buffer) && buffer.Length > 1 && buffer[0] == '\\' && buffer[1] == '\\';
}
- private static void GetFullPathName(string path, StringBuffer fullPath)
+ private static unsafe void GetFullPathName(string path, ref StringBuffer fullPath)
{
// If the string starts with an extended prefix we would need to remove it from the path before we call GetFullPathName as
// it doesn't root extended paths correctly. We don't currently resolve extended paths, so we'll just assert here.
@@ -201,10 +198,10 @@ namespace System.IO
fixed (char* pathStart = path)
{
uint result = 0;
- while ((result = Interop.mincore.GetFullPathNameW(pathStart + startIndex, fullPath.CharCapacity, fullPath.GetHandle(), IntPtr.Zero)) > fullPath.CharCapacity)
+ while ((result = Interop.Kernel32.GetFullPathNameW(pathStart + startIndex, (uint)fullPath.Capacity, fullPath.UnderlyingArray, IntPtr.Zero)) > fullPath.Capacity)
{
- // Reported size (which does not include the null) is greater than the buffer size. Increase the capacity.
- fullPath.EnsureCharCapacity(result);
+ // Reported size is greater than the buffer size. Increase the capacity.
+ fullPath.EnsureCapacity(checked((int)result));
}
if (result == 0)
@@ -212,23 +209,23 @@ namespace System.IO
// Failure, get the error and throw
int errorCode = Marshal.GetLastWin32Error();
if (errorCode == 0)
- errorCode = Interop.mincore.Errors.ERROR_BAD_PATHNAME;
+ errorCode = Interop.Errors.ERROR_BAD_PATHNAME;
throw Win32Marshal.GetExceptionForWin32Error(errorCode, path);
}
- fullPath.Length = result;
+ fullPath.Length = checked((int)result);
}
}
- private static uint GetInputBuffer(StringBuffer content, bool isDosUnc, out StringBuffer buffer)
+ private static int GetInputBuffer(ref StringBuffer content, bool isDosUnc, ref StringBuffer buffer)
{
- uint length = content.Length;
+ int length = content.Length;
length += isDosUnc
- ? (uint)PathInternal.UncExtendedPrefixLength - PathInternal.UncPrefixLength
+ ? PathInternal.UncExtendedPrefixLength - PathInternal.UncPrefixLength
: PathInternal.DevicePrefixLength;
- buffer = new StringBuffer(length);
+ buffer.EnsureCapacity(length + 1);
if (isDosUnc)
{
@@ -238,28 +235,28 @@ namespace System.IO
// Copy the source buffer over after the existing UNC prefix
content.CopyTo(
bufferIndex: PathInternal.UncPrefixLength,
- destination: buffer,
+ destination: ref buffer,
destinationIndex: PathInternal.UncExtendedPrefixLength,
count: content.Length - PathInternal.UncPrefixLength);
// Return the prefix difference
- return (uint)PathInternal.UncExtendedPrefixLength - PathInternal.UncPrefixLength;
+ return PathInternal.UncExtendedPrefixLength - PathInternal.UncPrefixLength;
}
else
{
- uint prefixSize = (uint)PathInternal.ExtendedPathPrefix.Length;
+ int prefixSize = PathInternal.ExtendedPathPrefix.Length;
buffer.CopyFrom(bufferIndex: 0, source: PathInternal.ExtendedPathPrefix);
- content.CopyTo(bufferIndex: 0, destination: buffer, destinationIndex: prefixSize, count: content.Length);
+ content.CopyTo(bufferIndex: 0, destination: ref buffer, destinationIndex: prefixSize, count: content.Length);
return prefixSize;
}
}
- private static string TryExpandShortFileName(StringBuffer outputBuffer, string originalPath)
+ private static string TryExpandShortFileName(ref StringBuffer outputBuffer, string originalPath)
{
// We guarantee we'll expand short names for paths that only partially exist. As such, we need to find the part of the path that actually does exist. To
// avoid allocating like crazy we'll create only one input array and modify the contents with embedded nulls.
- Debug.Assert(!PathInternal.IsPartiallyQualified(outputBuffer), "should have resolved by now");
+ Debug.Assert(!PathInternal.IsPartiallyQualified(ref outputBuffer), "should have resolved by now");
// We'll have one of a few cases by now (the normalized path will have already:
//
@@ -271,119 +268,131 @@ namespace System.IO
//
// Note that we will never get \??\ here as GetFullPathName() does not recognize \??\ and will return it as C:\??\ (or whatever the current drive is).
- uint rootLength = PathInternal.GetRootLength(outputBuffer);
- bool isDevice = PathInternal.IsDevice(outputBuffer);
+ int rootLength = PathInternal.GetRootLength(ref outputBuffer);
+ bool isDevice = PathInternal.IsDevice(ref outputBuffer);
- StringBuffer inputBuffer = null;
- bool isDosUnc = false;
- uint rootDifference = 0;
- bool wasDotDevice = false;
-
- // Add the extended prefix before expanding to allow growth over MAX_PATH
- if (isDevice)
+ StringBuffer inputBuffer = new StringBuffer(0);
+ try
{
- // We have one of the following (\\?\ or \\.\)
- inputBuffer = new StringBuffer();
- inputBuffer.Append(outputBuffer);
+ bool isDosUnc = false;
+ int rootDifference = 0;
+ bool wasDotDevice = false;
- if (outputBuffer[2] == '.')
+ // Add the extended prefix before expanding to allow growth over MAX_PATH
+ if (isDevice)
{
- wasDotDevice = true;
- inputBuffer[2] = '?';
+ // We have one of the following (\\?\ or \\.\)
+ inputBuffer.Append(ref outputBuffer);
+
+ if (outputBuffer[2] == '.')
+ {
+ wasDotDevice = true;
+ inputBuffer[2] = '?';
+ }
+ }
+ else
+ {
+ isDosUnc = IsDosUnc(ref outputBuffer);
+ rootDifference = GetInputBuffer(ref outputBuffer, isDosUnc, ref inputBuffer);
}
- }
- else
- {
- isDosUnc = IsDosUnc(outputBuffer);
- rootDifference = GetInputBuffer(outputBuffer, isDosUnc, out inputBuffer);
- }
- rootLength += rootDifference;
- uint inputLength = inputBuffer.Length;
+ rootLength += rootDifference;
+ int inputLength = inputBuffer.Length;
- bool success = false;
- uint foundIndex = inputBuffer.Length - 1;
+ bool success = false;
+ int foundIndex = inputBuffer.Length - 1;
- while (!success)
- {
- uint result = Interop.mincore.GetLongPathNameW(inputBuffer.GetHandle(), outputBuffer.GetHandle(), outputBuffer.CharCapacity);
+ while (!success)
+ {
+ uint result = Interop.Kernel32.GetLongPathNameW(inputBuffer.UnderlyingArray, outputBuffer.UnderlyingArray, (uint)outputBuffer.Capacity);
- // Replace any temporary null we added
- if (inputBuffer[foundIndex] == '\0') inputBuffer[foundIndex] = '\\';
+ // Replace any temporary null we added
+ if (inputBuffer[foundIndex] == '\0') inputBuffer[foundIndex] = '\\';
- if (result == 0)
- {
- // Look to see if we couldn't find the file
- int error = Marshal.GetLastWin32Error();
- if (error != Interop.mincore.Errors.ERROR_FILE_NOT_FOUND && error != Interop.mincore.Errors.ERROR_PATH_NOT_FOUND)
+ if (result == 0)
{
- // Some other failure, give up
- break;
- }
+ // Look to see if we couldn't find the file
+ int error = Marshal.GetLastWin32Error();
+ if (error != Interop.Errors.ERROR_FILE_NOT_FOUND && error != Interop.Errors.ERROR_PATH_NOT_FOUND)
+ {
+ // Some other failure, give up
+ break;
+ }
- // We couldn't find the path at the given index, start looking further back in the string.
- foundIndex--;
+ // We couldn't find the path at the given index, start looking further back in the string.
+ foundIndex--;
- for (; foundIndex > rootLength && inputBuffer[foundIndex] != '\\'; foundIndex--) ;
- if (foundIndex == rootLength)
+ for (; foundIndex > rootLength && inputBuffer[foundIndex] != '\\'; foundIndex--) ;
+ if (foundIndex == rootLength)
+ {
+ // Can't trim the path back any further
+ break;
+ }
+ else
+ {
+ // Temporarily set a null in the string to get Windows to look further up the path
+ inputBuffer[foundIndex] = '\0';
+ }
+ }
+ else if (result > outputBuffer.Capacity)
{
- // Can't trim the path back any further
- break;
+ // Not enough space. The result count for this API does not include the null terminator.
+ outputBuffer.EnsureCapacity(checked((int)result));
+ result = Interop.Kernel32.GetLongPathNameW(inputBuffer.UnderlyingArray, outputBuffer.UnderlyingArray, (uint)outputBuffer.Capacity);
}
else
{
- // Temporarily set a null in the string to get Windows to look further up the path
- inputBuffer[foundIndex] = '\0';
+ // Found the path
+ success = true;
+ outputBuffer.Length = checked((int)result);
+ if (foundIndex < inputLength - 1)
+ {
+ // It was a partial find, put the non-existent part of the path back
+ outputBuffer.Append(ref inputBuffer, foundIndex, inputBuffer.Length - foundIndex);
+ }
}
}
- else if (result > outputBuffer.CharCapacity)
+
+ // Strip out the prefix and return the string
+ ref StringBuffer bufferToUse = ref Choose(success, ref outputBuffer, ref inputBuffer);
+
+ // Switch back from \\?\ to \\.\ if necessary
+ if (wasDotDevice)
+ bufferToUse[2] = '.';
+
+ string returnValue = null;
+
+ int newLength = (int)(bufferToUse.Length - rootDifference);
+ if (isDosUnc)
{
- // Not enough space. The result count for this API does not include the null terminator.
- outputBuffer.EnsureCharCapacity(result);
- result = Interop.mincore.GetLongPathNameW(inputBuffer.GetHandle(), outputBuffer.GetHandle(), outputBuffer.CharCapacity);
+ // Need to go from \\?\UNC\ to \\?\UN\\
+ bufferToUse[PathInternal.UncExtendedPrefixLength - PathInternal.UncPrefixLength] = '\\';
+ }
+
+ // We now need to strip out any added characters at the front of the string
+ if (bufferToUse.SubstringEquals(originalPath, rootDifference, newLength))
+ {
+ // Use the original path to avoid allocating
+ returnValue = originalPath;
}
else
{
- // Found the path
- success = true;
- outputBuffer.Length = result;
- if (foundIndex < inputLength - 1)
- {
- // It was a partial find, put the non-existent part of the path back
- outputBuffer.Append(inputBuffer, foundIndex, inputBuffer.Length - foundIndex);
- }
+ returnValue = bufferToUse.Substring(rootDifference, newLength);
}
- }
- // Strip out the prefix and return the string
- StringBuffer bufferToUse = success ? outputBuffer : inputBuffer;
-
- // Switch back from \\?\ to \\.\ if necessary
- if (wasDotDevice)
- bufferToUse[2] = '.';
-
- string returnValue = null;
-
- int newLength = (int)(bufferToUse.Length - rootDifference);
- if (isDosUnc)
- {
- // Need to go from \\?\UNC\ to \\?\UN\\
- bufferToUse[PathInternal.UncExtendedPrefixLength - PathInternal.UncPrefixLength] = '\\';
- }
-
- // We now need to strip out any added characters at the front of the string
- if (bufferToUse.SubstringEquals(originalPath, rootDifference, newLength))
- {
- // Use the original path to avoid allocating
- returnValue = originalPath;
+ return returnValue;
}
- else
+ finally
{
- returnValue = bufferToUse.Substring(rootDifference, newLength);
+ inputBuffer.Free();
}
+ }
- inputBuffer.Dispose();
- return returnValue;
+ // Helper method to workaround lack of operator ? support for ref values
+ private static ref StringBuffer Choose(bool condition, ref StringBuffer s1, ref StringBuffer s2)
+ {
+ if (condition) return ref s1;
+ else return ref s2;
}
}
}
diff --git a/src/mscorlib/corefx/System/IO/PathInternal.CaseSensitivity.cs b/src/mscorlib/corefx/System/IO/PathInternal.CaseSensitivity.cs
deleted file mode 100644
index bea2df93b9..0000000000
--- a/src/mscorlib/corefx/System/IO/PathInternal.CaseSensitivity.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Diagnostics;
-
-namespace System.IO
-{
- /// <summary>Contains internal path helpers that are shared between many projects.</summary>
- internal static partial class PathInternal
- {
- private enum Tristate : byte
- {
- NotInitialized,
- True,
- False,
- }
-
- private static Tristate s_isCaseSensitive = Tristate.NotInitialized;
-
- /// <summary>Returns a comparison that can be used to compare file and directory names for equality.</summary>
- internal static StringComparison StringComparison
- {
- get
- {
- return IsCaseSensitive ?
- StringComparison.Ordinal :
- StringComparison.OrdinalIgnoreCase;
- }
- }
-
- /// <summary>Gets whether the system is case-sensitive.</summary>
- internal static bool IsCaseSensitive
- {
- get
- {
- // This must be lazily initialized as there are dependencies on PathInternal's static constructor
- // being fully initialized. (GetIsCaseSensitive() calls GetFullPath() which needs to use PathInternal)
- if (s_isCaseSensitive == Tristate.NotInitialized)
- s_isCaseSensitive = GetIsCaseSensitive() ? Tristate.True : Tristate.False;
-
- return s_isCaseSensitive == Tristate.True;
- }
- }
-
- /// <summary>
- /// Determines whether the file system is case sensitive.
- /// </summary>
- /// <remarks>
- /// Ideally we'd use something like pathconf with _PC_CASE_SENSITIVE, but that is non-portable,
- /// not supported on Windows or Linux, etc. For now, this function creates a tmp file with capital letters
- /// and then tests for its existence with lower-case letters. This could return invalid results in corner
- /// cases where, for example, different file systems are mounted with differing sensitivities.
- /// </remarks>
- private static bool GetIsCaseSensitive()
- {
- try
- {
- string pathWithUpperCase = Path.Combine(Path.GetTempPath(), "CASESENSITIVETEST" + Guid.NewGuid().ToString("N"));
- using (new FileStream(pathWithUpperCase, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None, 0x1000, FileOptions.DeleteOnClose))
- {
- string lowerCased = pathWithUpperCase.ToLowerInvariant();
- return !File.Exists(lowerCased);
- }
- }
- catch (Exception exc)
- {
- // In case something goes terribly wrong, we don't want to fail just because
- // of a casing test, so we assume case-insensitive-but-preserving.
- Debug.Fail("Casing test failed: " + exc);
- return false;
- }
- }
- }
-}
diff --git a/src/mscorlib/corefx/System/IO/PathInternal.Unix.cs b/src/mscorlib/corefx/System/IO/PathInternal.Unix.cs
index 6c39f99556..08dc1d0251 100644
--- a/src/mscorlib/corefx/System/IO/PathInternal.Unix.cs
+++ b/src/mscorlib/corefx/System/IO/PathInternal.Unix.cs
@@ -10,11 +10,15 @@ namespace System.IO
/// <summary>Contains internal path helpers that are shared between many projects.</summary>
internal static partial class PathInternal
{
+ internal const char DirectorySeparatorChar = '/';
+ internal const char AltDirectorySeparatorChar = '/';
+ internal const char VolumeSeparatorChar = '/';
+ internal const char PathSeparator = ':';
+
+ internal const string DirectorySeparatorCharAsString = "/";
+
// There is only one invalid path character in Unix
private const char InvalidPathChar = '\0';
- internal static char[] GetInvalidPathChars() => new char[] { InvalidPathChar };
-
- internal static readonly int MaxComponentLength = Interop.Sys.MaxName;
internal const string ParentDirectoryPrefix = @"../";
@@ -34,24 +38,8 @@ namespace System.IO
{
// The alternate directory separator char is the same as the directory separator,
// so we only need to check one.
- Debug.Assert(Path.DirectorySeparatorChar == Path.AltDirectorySeparatorChar);
- return c == Path.DirectorySeparatorChar;
- }
-
- /// <summary>
- /// Returns true if the path is too long
- /// </summary>
- internal static bool IsPathTooLong(string fullPath)
- {
- return fullPath.Length >= Interop.Sys.MaxPath;
- }
-
- /// <summary>
- /// Returns true if the directory is too long
- /// </summary>
- internal static bool IsDirectoryTooLong(string fullPath)
- {
- return fullPath.Length >= Interop.Sys.MaxPath;
+ Debug.Assert(DirectorySeparatorChar == AltDirectorySeparatorChar);
+ return c == DirectorySeparatorChar;
}
/// <summary>
@@ -101,15 +89,9 @@ namespace System.IO
{
// The directory separator, volume separator, and the alternate directory
// separator should be the same on Unix, so we only need to check one.
- Debug.Assert(Path.DirectorySeparatorChar == Path.AltDirectorySeparatorChar);
- Debug.Assert(Path.DirectorySeparatorChar == Path.VolumeSeparatorChar);
- return ch == Path.DirectorySeparatorChar;
- }
-
- internal static bool HasInvalidVolumeSeparator(string path)
- {
- // This is only ever true for Windows
- return false;
+ Debug.Assert(DirectorySeparatorChar == AltDirectorySeparatorChar);
+ Debug.Assert(DirectorySeparatorChar == VolumeSeparatorChar);
+ return ch == DirectorySeparatorChar;
}
internal static bool IsPartiallyQualified(string path)
diff --git a/src/mscorlib/corefx/System/IO/PathInternal.Windows.StringBuffer.cs b/src/mscorlib/corefx/System/IO/PathInternal.Windows.StringBuffer.cs
index fec2218844..84953df37b 100644
--- a/src/mscorlib/corefx/System/IO/PathInternal.Windows.StringBuffer.cs
+++ b/src/mscorlib/corefx/System/IO/PathInternal.Windows.StringBuffer.cs
@@ -13,7 +13,7 @@ namespace System.IO
/// <summary>
/// Returns true if the path uses the extended syntax (\\?\)
/// </summary>
- internal static bool IsExtended(StringBuffer path)
+ internal static bool IsExtended(ref StringBuffer path)
{
// While paths like "//?/C:/" will work, they're treated the same as "\\.\" paths.
// Skipping of normalization will *only* occur if back slashes ('\') are used.
@@ -27,20 +27,24 @@ namespace System.IO
/// <summary>
/// Gets the length of the root of the path (drive, share, etc.).
/// </summary>
- internal unsafe static uint GetRootLength(StringBuffer path)
+ internal unsafe static int GetRootLength(ref StringBuffer path)
{
if (path.Length == 0) return 0;
- return GetRootLength(path.CharPointer, path.Length);
+
+ fixed (char* value = path.UnderlyingArray)
+ {
+ return GetRootLength(value, path.Length);
+ }
}
/// <summary>
/// Returns true if the path uses any of the DOS device path syntaxes. ("\\.\", "\\?\", or "\??\")
/// </summary>
- internal static bool IsDevice(StringBuffer path)
+ internal static bool IsDevice(ref StringBuffer path)
{
// If the path begins with any two separators is will be recognized and normalized and prepped with
// "\??\" for internal usage correctly. "\??\" is recognized and handled, "/??/" is not.
- return IsExtended(path)
+ return IsExtended(ref path)
||
(
path.Length >= DevicePrefixLength
@@ -63,7 +67,7 @@ namespace System.IO
/// for C: (rooted, but relative). "C:\a" is rooted and not relative (the current directory
/// will not be used to modify the path).
/// </remarks>
- internal static bool IsPartiallyQualified(StringBuffer path)
+ internal static bool IsPartiallyQualified(ref StringBuffer path)
{
if (path.Length < 2)
{
@@ -82,7 +86,7 @@ namespace System.IO
// The only way to specify a fixed path that doesn't begin with two slashes
// is the drive, colon, slash format- i.e. C:\
return !((path.Length >= 3)
- && (path[1] == Path.VolumeSeparatorChar)
+ && (path[1] == VolumeSeparatorChar)
&& IsDirectorySeparator(path[2]));
}
}
diff --git a/src/mscorlib/corefx/System/IO/PathInternal.Windows.cs b/src/mscorlib/corefx/System/IO/PathInternal.Windows.cs
index bd7f1eae41..0ec9b30f99 100644
--- a/src/mscorlib/corefx/System/IO/PathInternal.Windows.cs
+++ b/src/mscorlib/corefx/System/IO/PathInternal.Windows.cs
@@ -40,6 +40,13 @@ namespace System.IO
// Local and Global MS-DOS Device Names
// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554302.aspx
+ internal const char DirectorySeparatorChar = '\\';
+ internal const char AltDirectorySeparatorChar = '/';
+ internal const char VolumeSeparatorChar = ':';
+ internal const char PathSeparator = ';';
+
+ internal const string DirectorySeparatorCharAsString = "\\";
+
internal const string ExtendedPathPrefix = @"\\?\";
internal const string UncPathPrefix = @"\\";
internal const string UncExtendedPrefixToInsert = @"?\UNC\";
@@ -58,22 +65,6 @@ namespace System.IO
internal const int UncExtendedPrefixLength = 8;
internal const int MaxComponentLength = 255;
- internal static char[] GetInvalidPathChars() => new char[]
- {
- '|', '\0',
- (char)1, (char)2, (char)3, (char)4, (char)5, (char)6, (char)7, (char)8, (char)9, (char)10,
- (char)11, (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, (char)18, (char)19, (char)20,
- (char)21, (char)22, (char)23, (char)24, (char)25, (char)26, (char)27, (char)28, (char)29, (char)30,
- (char)31
- };
-
- // [MS - FSA] 2.1.4.4 Algorithm for Determining if a FileName Is in an Expression
- // https://msdn.microsoft.com/en-us/library/ff469270.aspx
- private static readonly char[] s_wildcardChars =
- {
- '\"', '<', '>', '*', '?'
- };
-
/// <summary>
/// Returns true if the given character is a valid drive letter
/// </summary>
@@ -83,24 +74,6 @@ namespace System.IO
}
/// <summary>
- /// Returns true if the path is too long
- /// </summary>
- internal static bool IsPathTooLong(string fullPath)
- {
- // We'll never know precisely what will fail as paths get changed internally in Windows and
- // may grow to exceed MaxLongPath.
- return fullPath.Length >= MaxLongPath;
- }
-
- /// <summary>
- /// Returns true if the directory is too long
- /// </summary>
- internal static bool IsDirectoryTooLong(string fullPath)
- {
- return IsPathTooLong(fullPath);
- }
-
- /// <summary>
/// Adds the extended path prefix (\\?\) if not already a device path, IF the path is not relative,
/// AND the path is more than 259 characters. (> MAX_PATH + null)
/// </summary>
@@ -193,10 +166,12 @@ namespace System.IO
for (int i = 0; i < path.Length; i++)
{
char c = path[i];
-
- if (c <= '\u001f' || c == '|')
+ if (c <= '|') // fast path for common case - '|' is highest illegal character
{
- return true;
+ if (c <= '\u001f' || c == '|')
+ {
+ return true;
+ }
}
}
@@ -206,13 +181,24 @@ namespace System.IO
/// <summary>
/// Check for known wildcard characters. '*' and '?' are the most common ones.
/// </summary>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal unsafe static bool HasWildCardCharacters(string path)
+ internal static bool HasWildCardCharacters(string path)
{
// Question mark is part of dos device syntax so we have to skip if we are
int startIndex = IsDevice(path) ? ExtendedPathPrefix.Length : 0;
- return path.IndexOfAny(s_wildcardChars, startIndex) >= 0;
+ // [MS - FSA] 2.1.4.4 Algorithm for Determining if a FileName Is in an Expression
+ // https://msdn.microsoft.com/en-us/library/ff469270.aspx
+ for (int i = startIndex; i < path.Length; i++)
+ {
+ char c = path[i];
+ if (c <= '?') // fast path for common case - '?' is highest wildcard character
+ {
+ if (c == '\"' || c == '<' || c == '>' || c == '*' || c == '?')
+ return true;
+ }
+ }
+
+ return false;
}
/// <summary>
@@ -222,15 +208,15 @@ namespace System.IO
{
fixed(char* value = path)
{
- return (int)GetRootLength(value, (uint)path.Length);
+ return GetRootLength(value, path.Length);
}
}
- private unsafe static uint GetRootLength(char* path, uint pathLength)
+ private unsafe static int GetRootLength(char* path, int pathLength)
{
- uint i = 0;
- uint volumeSeparatorLength = 2; // Length to the colon "C:"
- uint uncRootLength = 2; // Length to the start of the server name "\\"
+ int i = 0;
+ int volumeSeparatorLength = 2; // Length to the colon "C:"
+ int uncRootLength = 2; // Length to the start of the server name "\\"
bool extendedSyntax = StartsWithOrdinal(path, pathLength, ExtendedPathPrefix);
bool extendedUncSyntax = StartsWithOrdinal(path, pathLength, UncExtendedPathPrefix);
@@ -240,12 +226,12 @@ namespace System.IO
if (extendedUncSyntax)
{
// "\\" -> "\\?\UNC\"
- uncRootLength = (uint)UncExtendedPathPrefix.Length;
+ uncRootLength = UncExtendedPathPrefix.Length;
}
else
{
// "C:" -> "\\?\C:"
- volumeSeparatorLength += (uint)ExtendedPathPrefix.Length;
+ volumeSeparatorLength += ExtendedPathPrefix.Length;
}
}
@@ -263,7 +249,7 @@ namespace System.IO
while (i < pathLength && (!IsDirectorySeparator(path[i]) || --n > 0)) i++;
}
}
- else if (pathLength >= volumeSeparatorLength && path[volumeSeparatorLength - 1] == Path.VolumeSeparatorChar)
+ else if (pathLength >= volumeSeparatorLength && path[volumeSeparatorLength - 1] == VolumeSeparatorChar)
{
// Path is at least longer than where we expect a colon, and has a colon (\\?\A:, A:)
// If the colon is followed by a directory separator, move past it
@@ -273,9 +259,9 @@ namespace System.IO
return i;
}
- private unsafe static bool StartsWithOrdinal(char* source, uint sourceLength, string value)
+ private unsafe static bool StartsWithOrdinal(char* source, int sourceLength, string value)
{
- if (sourceLength < (uint)value.Length) return false;
+ if (sourceLength < value.Length) return false;
for (int i = 0; i < value.Length; i++)
{
if (value[i] != source[i]) return false;
@@ -314,7 +300,7 @@ namespace System.IO
// The only way to specify a fixed path that doesn't begin with two slashes
// is the drive, colon, slash format- i.e. C:\
return !((path.Length >= 3)
- && (path[1] == Path.VolumeSeparatorChar)
+ && (path[1] == VolumeSeparatorChar)
&& IsDirectorySeparator(path[2])
// To match old behavior we'll check the drive character for validity as the path is technically
// not qualified if you don't have a valid drive. "=:\" is the "=" file's default data stream.
@@ -350,7 +336,7 @@ namespace System.IO
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static bool IsDirectorySeparator(char c)
{
- return c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar;
+ return c == DirectorySeparatorChar || c == AltDirectorySeparatorChar;
}
/// <summary>
@@ -401,7 +387,7 @@ namespace System.IO
{
current = path[i];
if (IsDirectorySeparator(current)
- && (current != Path.DirectorySeparatorChar
+ && (current != DirectorySeparatorChar
// Check for sequential separators past the first position (we need to keep initial two for UNC/extended)
|| (i > 0 && i + 1 < path.Length && IsDirectorySeparator(path[i + 1]))))
{
@@ -418,7 +404,7 @@ namespace System.IO
if (IsDirectorySeparator(path[start]))
{
start++;
- builder.Append(Path.DirectorySeparatorChar);
+ builder.Append(DirectorySeparatorChar);
}
for (int i = start; i < path.Length; i++)
@@ -435,7 +421,7 @@ namespace System.IO
}
// Ensure it is the primary separator
- current = Path.DirectorySeparatorChar;
+ current = DirectorySeparatorChar;
}
builder.Append(current);
@@ -450,33 +436,7 @@ namespace System.IO
/// <param name="ch">The character to test.</param>
internal static bool IsDirectoryOrVolumeSeparator(char ch)
{
- return IsDirectorySeparator(ch) || Path.VolumeSeparatorChar == ch;
- }
-
- /// <summary>
- /// Validates volume separator only occurs as C: or \\?\C:. This logic is meant to filter out Alternate Data Streams.
- /// </summary>
- /// <returns>True if the path has an invalid volume separator.</returns>
- internal static bool HasInvalidVolumeSeparator(string path)
- {
- // Toss out paths with colons that aren't a valid drive specifier.
- // Cannot start with a colon and can only be of the form "C:" or "\\?\C:".
- // (Note that we used to explicitly check "http:" and "file:"- these are caught by this check now.)
-
- // We don't care about skipping starting space for extended paths. Assume no knowledge of extended paths if we're forcing old path behavior.
- int startIndex = IsExtended(path) ? ExtendedPathPrefix.Length : PathStartSkip(path);
-
- // If we start with a colon
- if ((path.Length > startIndex && path[startIndex] == Path.VolumeSeparatorChar)
- // Or have an invalid drive letter and colon
- || (path.Length >= startIndex + 2 && path[startIndex + 1] == Path.VolumeSeparatorChar && !IsValidDriveChar(path[startIndex]))
- // Or have any colons beyond the drive colon
- || (path.Length > startIndex + 2 && path.IndexOf(Path.VolumeSeparatorChar, startIndex + 2) != -1))
- {
- return true;
- }
-
- return false;
+ return IsDirectorySeparator(ch) || VolumeSeparatorChar == ch;
}
}
}
diff --git a/src/mscorlib/corefx/System/IO/PathInternal.cs b/src/mscorlib/corefx/System/IO/PathInternal.cs
index ee67680df5..6b4c3b2d30 100644
--- a/src/mscorlib/corefx/System/IO/PathInternal.cs
+++ b/src/mscorlib/corefx/System/IO/PathInternal.cs
@@ -40,64 +40,6 @@ namespace System.IO
if (HasIllegalCharacters(path))
throw new ArgumentException(SR.Argument_InvalidPathChars, nameof(path));
}
-
-
- /// <summary>
- /// Returns true if the given StringBuilder starts with the given value.
- /// </summary>
- /// <param name="value">The string to compare against the start of the StringBuilder.</param>
- internal static bool StartsWithOrdinal(this StringBuilder builder, string value)
- {
- if (value == null || builder.Length < value.Length)
- return false;
-
- for (int i = 0; i < value.Length; i++)
- {
- if (builder[i] != value[i]) return false;
- }
- return true;
- }
-
- /// <summary>
- /// Returns true if the given string starts with the given value.
- /// </summary>
- /// <param name="value">The string to compare against the start of the source string.</param>
- internal static bool StartsWithOrdinal(this string source, string value)
- {
- if (value == null || source.Length < value.Length)
- return false;
-
- return source.StartsWith(value, StringComparison.Ordinal);
- }
-
- /// <summary>
- /// Trims the specified characters from the end of the StringBuilder.
- /// </summary>
- internal static StringBuilder TrimEnd(this StringBuilder builder, params char[] trimChars)
- {
- if (trimChars == null || trimChars.Length == 0)
- return builder;
-
- int end = builder.Length - 1;
-
- for (; end >= 0; end--)
- {
- int i = 0;
- char ch = builder[end];
- for (; i < trimChars.Length; i++)
- {
- if (trimChars[i] == ch) break;
- }
- if (i == trimChars.Length)
- {
- // Not a trim char
- break;
- }
- }
-
- builder.Length = end + 1;
- return builder;
- }
/// <summary>
/// Returns the start index of the filename
diff --git a/src/mscorlib/corefx/System/IO/Win32Marshal.cs b/src/mscorlib/corefx/System/IO/Win32Marshal.cs
index b4dfa04468..ef76c27010 100644
--- a/src/mscorlib/corefx/System/IO/Win32Marshal.cs
+++ b/src/mscorlib/corefx/System/IO/Win32Marshal.cs
@@ -23,16 +23,6 @@ namespace System.IO
}
/// <summary>
- /// Converts, resetting it, the last Win32 error into a corresponding <see cref="Exception"/> object, optionally
- /// including the specified path in the error message.
- /// </summary>
- internal static Exception GetExceptionForLastWin32Error(string path)
- {
- int errorCode = Marshal.GetLastWin32Error();
- return GetExceptionForWin32Error(errorCode, path);
- }
-
- /// <summary>
/// Converts the specified Win32 error into a corresponding <see cref="Exception"/> object.
/// </summary>
internal static Exception GetExceptionForWin32Error(int errorCode)
@@ -48,49 +38,49 @@ namespace System.IO
{
switch (errorCode)
{
- case Interop.mincore.Errors.ERROR_FILE_NOT_FOUND:
+ case Interop.Errors.ERROR_FILE_NOT_FOUND:
if (path.Length == 0)
return new FileNotFoundException(SR.IO_FileNotFound);
else
return new FileNotFoundException(SR.Format(SR.IO_FileNotFound_FileName, path), path);
- case Interop.mincore.Errors.ERROR_PATH_NOT_FOUND:
+ case Interop.Errors.ERROR_PATH_NOT_FOUND:
if (path.Length == 0)
return new DirectoryNotFoundException(SR.IO_PathNotFound_NoPathName);
else
return new DirectoryNotFoundException(SR.Format(SR.IO_PathNotFound_Path, path));
- case Interop.mincore.Errors.ERROR_ACCESS_DENIED:
+ case Interop.Errors.ERROR_ACCESS_DENIED:
if (path.Length == 0)
return new UnauthorizedAccessException(SR.UnauthorizedAccess_IODenied_NoPathName);
else
return new UnauthorizedAccessException(SR.Format(SR.UnauthorizedAccess_IODenied_Path, path));
- case Interop.mincore.Errors.ERROR_ALREADY_EXISTS:
+ case Interop.Errors.ERROR_ALREADY_EXISTS:
if (path.Length == 0)
goto default;
return new IOException(SR.Format(SR.IO_AlreadyExists_Name, path), MakeHRFromErrorCode(errorCode));
- case Interop.mincore.Errors.ERROR_FILENAME_EXCED_RANGE:
+ case Interop.Errors.ERROR_FILENAME_EXCED_RANGE:
return new PathTooLongException(SR.IO_PathTooLong);
- case Interop.mincore.Errors.ERROR_INVALID_PARAMETER:
+ case Interop.Errors.ERROR_INVALID_PARAMETER:
return new IOException(GetMessage(errorCode), MakeHRFromErrorCode(errorCode));
- case Interop.mincore.Errors.ERROR_SHARING_VIOLATION:
+ case Interop.Errors.ERROR_SHARING_VIOLATION:
if (path.Length == 0)
return new IOException(SR.IO_SharingViolation_NoFileName, MakeHRFromErrorCode(errorCode));
else
return new IOException(SR.Format(SR.IO_SharingViolation_File, path), MakeHRFromErrorCode(errorCode));
- case Interop.mincore.Errors.ERROR_FILE_EXISTS:
+ case Interop.Errors.ERROR_FILE_EXISTS:
if (path.Length == 0)
goto default;
return new IOException(SR.Format(SR.IO_FileExists_Name, path), MakeHRFromErrorCode(errorCode));
- case Interop.mincore.Errors.ERROR_OPERATION_ABORTED:
+ case Interop.Errors.ERROR_OPERATION_ABORTED:
return new OperationCanceledException();
default:
@@ -109,26 +99,11 @@ namespace System.IO
}
/// <summary>
- /// Returns a Win32 error code for the specified HRESULT if it came from FACILITY_WIN32
- /// If not, returns the HRESULT unchanged
- /// </summary>
- internal static int TryMakeWin32ErrorCodeFromHR(int hr)
- {
- if ((0xFFFF0000 & hr) == 0x80070000)
- {
- // Win32 error, Win32Marshal.GetExceptionForWin32Error expects the Win32 format
- hr &= 0x0000FFFF;
- }
-
- return hr;
- }
-
- /// <summary>
/// Returns a string message for the specified Win32 error code.
/// </summary>
internal static string GetMessage(int errorCode)
{
- return Interop.mincore.GetMessage(errorCode);
+ return Interop.Kernel32.GetMessage(errorCode);
}
}
}
diff --git a/src/mscorlib/corefx/System/Runtime/InteropServices/NativeBuffer.cs b/src/mscorlib/corefx/System/Runtime/InteropServices/NativeBuffer.cs
deleted file mode 100644
index 875009aee2..0000000000
--- a/src/mscorlib/corefx/System/Runtime/InteropServices/NativeBuffer.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Runtime.CompilerServices;
-
-namespace System.Runtime.InteropServices
-{
- /// <summary>
- /// Wrapper for access to the native heap. Dispose to free the memory. Try to use with using statements.
- /// Does not allocate zero size buffers, and will free the existing native buffer if capacity is dropped to zero.
- ///
- /// NativeBuffer utilizes a cache of heap buffers.
- /// </summary>
- /// <remarks>
- /// Suggested use through P/Invoke: define DllImport arguments that take a byte buffer as SafeHandle.
- ///
- /// Using SafeHandle will ensure that the buffer will not get collected during a P/Invoke.
- /// (Notably AddRef and ReleaseRef will be called by the interop layer.)
- ///
- /// This class is not threadsafe, changing the capacity or disposing on multiple threads risks duplicate heap
- /// handles or worse.
- /// </remarks>
- internal class NativeBuffer : IDisposable
- {
- private readonly static SafeHeapHandleCache s_handleCache = new SafeHeapHandleCache();
- private readonly static SafeHandle s_emptyHandle = new EmptySafeHandle();
- private SafeHeapHandle _handle;
- private ulong _capacity;
-
- /// <summary>
- /// Create a buffer with at least the specified initial capacity in bytes.
- /// </summary>
- public NativeBuffer(ulong initialMinCapacity = 0)
- {
- EnsureByteCapacity(initialMinCapacity);
- }
-
- protected unsafe void* VoidPointer
- {
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- get
- {
- return _handle == null ? null : _handle.DangerousGetHandle().ToPointer();
- }
- }
-
- protected unsafe byte* BytePointer
- {
- get
- {
- return (byte*)VoidPointer;
- }
- }
-
- /// <summary>
- /// Get the handle for the buffer.
- /// </summary>
- public SafeHandle GetHandle()
- {
- // Marshalling code will throw on null for SafeHandle
- return _handle ?? s_emptyHandle;
- }
-
- /// <summary>
- /// The capacity of the buffer in bytes.
- /// </summary>
- public ulong ByteCapacity
- {
- get { return _capacity; }
- }
-
- /// <summary>
- /// Ensure capacity in bytes is at least the given minimum.
- /// </summary>
- /// <exception cref="OutOfMemoryException">Thrown if unable to allocate memory when setting.</exception>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if attempting to set <paramref name="nameof(minCapacity)"/> to a value that is larger than the maximum addressable memory.</exception>
- public void EnsureByteCapacity(ulong minCapacity)
- {
- if (_capacity < minCapacity)
- {
- Resize(minCapacity);
- _capacity = minCapacity;
- }
- }
-
- public unsafe byte this[ulong index]
- {
- get
- {
- if (index >= _capacity) throw new ArgumentOutOfRangeException();
- return BytePointer[index];
- }
- set
- {
- if (index >= _capacity) throw new ArgumentOutOfRangeException();
- BytePointer[index] = value;
- }
- }
-
- private unsafe void Resize(ulong byteLength)
- {
- if (byteLength == 0)
- {
- ReleaseHandle();
- return;
- }
-
- if (_handle == null)
- {
- _handle = s_handleCache.Acquire(byteLength);
- }
- else
- {
- _handle.Resize(byteLength);
- }
- }
-
- private void ReleaseHandle()
- {
- if (_handle != null)
- {
- s_handleCache.Release(_handle);
- _capacity = 0;
- _handle = null;
- }
- }
-
- /// <summary>
- /// Release the backing buffer
- /// </summary>
- public virtual void Free()
- {
- ReleaseHandle();
- }
-
- public void Dispose()
- {
- Free();
- }
-
- private sealed class EmptySafeHandle : SafeHandle
- {
- public EmptySafeHandle() : base(IntPtr.Zero, true) { }
-
- public override bool IsInvalid
- {
- get { return true; }
- }
-
- protected override bool ReleaseHandle()
- {
- return true;
- }
- }
- }
-}
diff --git a/src/mscorlib/corefx/System/Runtime/InteropServices/SafeHeapHandle.cs b/src/mscorlib/corefx/System/Runtime/InteropServices/SafeHeapHandle.cs
deleted file mode 100644
index 92b3d980db..0000000000
--- a/src/mscorlib/corefx/System/Runtime/InteropServices/SafeHeapHandle.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices
-{
- /// <summary>
- /// Handle for heap memory that allows tracking of capacity and reallocating.
- /// </summary>
- internal sealed class SafeHeapHandle : SafeBuffer
- {
- /// <summary>
- /// Allocate a buffer of the given size if requested.
- /// </summary>
- /// <param name="byteLength">Required size in bytes. Must be less than UInt32.MaxValue for 32 bit or UInt64.MaxValue for 64 bit.</param>
- /// <exception cref="OutOfMemoryException">Thrown if the requested memory size cannot be allocated.</exception>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if size is greater than the maximum memory size.</exception>
- public SafeHeapHandle(ulong byteLength) : base(ownsHandle: true)
- {
- Resize(byteLength);
- }
-
- public override bool IsInvalid
- {
- get { return handle == IntPtr.Zero; }
- }
-
- /// <summary>
- /// Resize the buffer to the given size if requested.
- /// </summary>
- /// <param name="byteLength">Required size in bytes. Must be less than UInt32.MaxValue for 32 bit or UInt64.MaxValue for 64 bit.</param>
- /// <exception cref="OutOfMemoryException">Thrown if the requested memory size cannot be allocated.</exception>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if size is greater than the maximum memory size.</exception>
- public void Resize(ulong byteLength)
- {
- if (IsClosed) throw new ObjectDisposedException(nameof(SafeHeapHandle));
-
- ulong originalLength = 0;
- if (handle == IntPtr.Zero)
- {
- handle = Marshal.AllocHGlobal((IntPtr)byteLength);
- }
- else
- {
- originalLength = ByteLength;
-
- // This may or may not be the same handle, may realloc in place. If the
- // handle changes Windows will deal with the old handle, trying to free it will
- // cause an error.
- handle = Marshal.ReAllocHGlobal(pv: handle, cb: (IntPtr)byteLength);
- }
-
- if (handle == IntPtr.Zero)
- {
- // Only real plausible answer
- throw new OutOfMemoryException();
- }
-
- if (byteLength > originalLength)
- {
- // Add pressure
- ulong addedBytes = byteLength - originalLength;
- if (addedBytes > long.MaxValue)
- {
- GC.AddMemoryPressure(long.MaxValue);
- GC.AddMemoryPressure((long)(addedBytes - long.MaxValue));
- }
- else
- {
- GC.AddMemoryPressure((long)addedBytes);
- }
- }
- else
- {
- // Shrank or did nothing, release pressure if needed
- RemoveMemoryPressure(originalLength - byteLength);
- }
-
- Initialize(byteLength);
- }
-
- private void RemoveMemoryPressure(ulong removedBytes)
- {
- if (removedBytes == 0) return;
-
- if (removedBytes > long.MaxValue)
- {
- GC.RemoveMemoryPressure(long.MaxValue);
- GC.RemoveMemoryPressure((long)(removedBytes - long.MaxValue));
- }
- else
- {
- GC.RemoveMemoryPressure((long)removedBytes);
- }
- }
-
- protected override bool ReleaseHandle()
- {
- if (handle != IntPtr.Zero)
- {
- RemoveMemoryPressure(ByteLength);
- Marshal.FreeHGlobal(handle);
- }
-
- handle = IntPtr.Zero;
- return true;
- }
- }
-}
diff --git a/src/mscorlib/corefx/System/Runtime/InteropServices/SafeHeapHandleCache.cs b/src/mscorlib/corefx/System/Runtime/InteropServices/SafeHeapHandleCache.cs
deleted file mode 100644
index 725076ed66..0000000000
--- a/src/mscorlib/corefx/System/Runtime/InteropServices/SafeHeapHandleCache.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Threading;
-
-namespace System.Runtime.InteropServices
-{
- /// <summary>
- /// Allows limited thread safe reuse of heap buffers to limit memory pressure.
- ///
- /// This cache does not ensure that multiple copies of handles are not released back into the cache.
- /// </summary>
- internal sealed class SafeHeapHandleCache : IDisposable
- {
- private readonly ulong _minSize;
- private readonly ulong _maxSize;
-
- // internal for testing
- internal readonly SafeHeapHandle[] _handleCache;
-
- /// <param name="minSize">Smallest buffer size to allocate in bytes.</param>
- /// <param name="maxSize">The largest buffer size to cache in bytes.</param>
- /// <param name="maxHandles">The maximum number of handles to cache.</param>
- public SafeHeapHandleCache(ulong minSize = 64, ulong maxSize = 1024 * 2, int maxHandles = 0)
- {
- _minSize = minSize;
- _maxSize = maxSize;
- _handleCache = new SafeHeapHandle[maxHandles > 0 ? maxHandles : Environment.ProcessorCount * 4];
- }
-
- /// <summary>
- /// Get a HeapHandle
- /// </summary>
- public SafeHeapHandle Acquire(ulong minSize = 0)
- {
- if (minSize < _minSize) minSize = _minSize;
-
- SafeHeapHandle handle = null;
-
- for (int i = 0; i < _handleCache.Length; i++)
- {
- handle = Interlocked.Exchange(ref _handleCache[i], null);
- if (handle != null) break;
- }
-
- if (handle != null)
- {
- // One possible future consideration is to attempt cycling through to
- // find one that might already have sufficient capacity
- if (handle.ByteLength < minSize)
- handle.Resize(minSize);
- }
- else
- {
- handle = new SafeHeapHandle(minSize);
- }
-
- return handle;
- }
-
- /// <summary>
- /// Give a HeapHandle back for potential reuse
- /// </summary>
- public void Release(SafeHeapHandle handle)
- {
- if (handle.ByteLength <= _maxSize)
- {
- for (int i = 0; i < _handleCache.Length; i++)
- {
- // Push the handles down, walking the last one off the end to keep
- // the top of the "stack" fresh
- handle = Interlocked.Exchange(ref _handleCache[i], handle);
- if (handle == null) return;
- }
- }
-
- handle.Dispose();
- }
-
- public void Dispose()
- {
- Dispose(disposing: true);
- }
-
- private void Dispose(bool disposing)
- {
- if (disposing && _handleCache != null)
- {
- foreach (SafeHeapHandle handle in _handleCache)
- {
- if (handle != null) handle.Dispose();
- }
- }
- }
- }
-}
diff --git a/src/mscorlib/corefx/System/Runtime/InteropServices/StringBuffer.cs b/src/mscorlib/corefx/System/Runtime/InteropServices/StringBuffer.cs
index 29cef08b6c..fdd0b95590 100644
--- a/src/mscorlib/corefx/System/Runtime/InteropServices/StringBuffer.cs
+++ b/src/mscorlib/corefx/System/Runtime/InteropServices/StringBuffer.cs
@@ -2,69 +2,81 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System.Buffers;
+using System.Runtime.CompilerServices;
+
namespace System.Runtime.InteropServices
{
/// <summary>
- /// Native buffer that deals in char size increments. Dispose to free memory. Allows buffers larger
- /// than a maximum size string to enable working with very large string arrays. Always makes ordinal
- /// comparisons.
+ /// Buffer that deals in char size increments. Dispose to free memory. Always makes ordinal
+ /// comparisons. Not thread safe.
///
/// A more performant replacement for StringBuilder when performing native interop.
+ ///
+ /// "No copy" valuetype. Has to be passed as "ref".
+ ///
/// </summary>
/// <remarks>
/// Suggested use through P/Invoke: define DllImport arguments that take a character buffer as SafeHandle and pass StringBuffer.GetHandle().
/// </remarks>
- internal class StringBuffer : NativeBuffer
+ internal struct StringBuffer
{
- private uint _length;
+ private char[] _buffer;
+ private int _length;
/// <summary>
/// Instantiate the buffer with capacity for at least the specified number of characters. Capacity
/// includes the trailing null character.
/// </summary>
- public StringBuffer(uint initialCapacity = 0)
- : base(initialCapacity * (ulong)sizeof(char))
+ public StringBuffer(int initialCapacity)
{
+ _buffer = ArrayPool<char>.Shared.Rent(initialCapacity);
+ _length = 0;
}
/// <summary>
/// Get/set the character at the given index.
/// </summary>
/// <exception cref="ArgumentOutOfRangeException">Thrown if attempting to index outside of the buffer length.</exception>
- public unsafe char this[uint index]
+ public char this[int index]
{
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
if (index >= _length) throw new ArgumentOutOfRangeException(nameof(index));
- return CharPointer[index];
+ return _buffer[index];
}
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
set
{
if (index >= _length) throw new ArgumentOutOfRangeException(nameof(index));
- CharPointer[index] = value;
+ _buffer[index] = value;
}
}
/// <summary>
+ /// Underlying storage of the buffer. Used for interop.
+ /// </summary>
+ public char[] UnderlyingArray => _buffer;
+
+ /// <summary>
/// Character capacity of the buffer. Includes the count for the trailing null character.
/// </summary>
- public uint CharCapacity
- {
- get
- {
- ulong byteCapacity = ByteCapacity;
- ulong charCapacity = byteCapacity == 0 ? 0 : byteCapacity / sizeof(char);
- return charCapacity > uint.MaxValue ? uint.MaxValue : (uint)charCapacity;
- }
- }
+ public int Capacity => _buffer.Length;
/// <summary>
/// Ensure capacity in characters is at least the given minimum.
/// </summary>
/// <exception cref="OutOfMemoryException">Thrown if unable to allocate memory when setting.</exception>
- public void EnsureCharCapacity(uint minCapacity)
+ public void EnsureCapacity(int minCapacity)
{
- EnsureByteCapacity(minCapacity * (ulong)sizeof(char));
+ if (minCapacity > Capacity)
+ {
+ char[] oldBuffer = _buffer;
+ _buffer = ArrayPool<char>.Shared.Rent(minCapacity);
+ Array.Copy(oldBuffer, 0, _buffer, 0, oldBuffer.Length);
+ ArrayPool<char>.Shared.Return(oldBuffer);
+ }
}
/// <summary>
@@ -72,59 +84,32 @@ namespace System.Runtime.InteropServices
/// This is where the usable data ends.
/// </summary>
/// <exception cref="OutOfMemoryException">Thrown if unable to allocate memory when setting.</exception>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if the set size in bytes is uint.MaxValue (as space is implicitly reserved for the trailing null).</exception>
- public unsafe uint Length
+ /// <exception cref="ArgumentOutOfRangeException">Thrown if the set size in bytes is int.MaxValue (as space is implicitly reserved for the trailing null).</exception>
+ public int Length
{
get { return _length; }
set
{
- if (value == uint.MaxValue) throw new ArgumentOutOfRangeException(nameof(Length));
-
// Null terminate
- EnsureCharCapacity(value + 1);
- CharPointer[value] = '\0';
+ EnsureCapacity(checked(value + 1));
+ _buffer[value] = '\0';
_length = value;
}
}
/// <summary>
- /// For use when the native api null terminates but doesn't return a length.
- /// If no null is found, the length will not be changed.
- /// </summary>
- public unsafe void SetLengthToFirstNull()
- {
- char* buffer = CharPointer;
- uint capacity = CharCapacity;
- for (uint i = 0; i < capacity; i++)
- {
- if (buffer[i] == '\0')
- {
- _length = i;
- break;
- }
- }
- }
-
- internal unsafe char* CharPointer
- {
- get
- {
- return (char*)VoidPointer;
- }
- }
-
- /// <summary>
/// True if the buffer contains the given character.
/// </summary>
public unsafe bool Contains(char value)
{
- char* start = CharPointer;
- uint length = _length;
-
- for (uint i = 0; i < length; i++)
+ fixed (char* start = _buffer)
{
- if (*start++ == value) return true;
+ int length = _length;
+ for (int i = 0; i < length; i++)
+ {
+ if (start[i] == value) return true;
+ }
}
return false;
@@ -136,7 +121,7 @@ namespace System.Runtime.InteropServices
public bool StartsWith(string value)
{
if (value == null) throw new ArgumentNullException(nameof(value));
- if (_length < (uint)value.Length) return false;
+ if (_length < value.Length) return false;
return SubstringEquals(value, startIndex: 0, count: value.Length);
}
@@ -150,27 +135,28 @@ namespace System.Runtime.InteropServices
/// Thrown if <paramref name="startIndex"/> or <paramref name="count"/> are outside the range
/// of the buffer's length.
/// </exception>
- public unsafe bool SubstringEquals(string value, uint startIndex = 0, int count = -1)
+ public unsafe bool SubstringEquals(string value, int startIndex = 0, int count = -1)
{
if (value == null) return false;
if (count < -1) throw new ArgumentOutOfRangeException(nameof(count));
if (startIndex > _length) throw new ArgumentOutOfRangeException(nameof(startIndex));
- uint realCount = count == -1 ? _length - startIndex : (uint)count;
+ int realCount = count == -1 ? _length - startIndex : (int)count;
if (checked(startIndex + realCount) > _length) throw new ArgumentOutOfRangeException(nameof(count));
int length = value.Length;
// Check the substring length against the input length
- if (realCount != (uint)length) return false;
+ if (realCount != length) return false;
fixed (char* valueStart = value)
+ fixed (char* bufferStart = _buffer)
{
- char* bufferStart = CharPointer + startIndex;
+ char* subStringStart = bufferStart + startIndex;
+
for (int i = 0; i < length; i++)
{
- // Note that indexing in this case generates faster code than trying to copy the pointer and increment it
- if (*bufferStart++ != valueStart[i]) return false;
+ if (subStringStart[i] != valueStart[i]) return false;
}
}
@@ -178,26 +164,6 @@ namespace System.Runtime.InteropServices
}
/// <summary>
- /// Append the given string.
- /// </summary>
- /// <param name="value">The string to append.</param>
- /// <param name="startIndex">The index in the input string to start appending from.</param>
- /// <param name="count">The count of characters to copy from the input string, or -1 for all remaining.</param>
- /// <exception cref="ArgumentNullException">Thrown if <paramref name="value"/> is null.</exception>
- /// <exception cref="ArgumentOutOfRangeException">
- /// Thrown if <paramref name="startIndex"/> or <paramref name="count"/> are outside the range
- /// of <paramref name="value"/> characters.
- /// </exception>
- public void Append(string value, int startIndex = 0, int count = -1)
- {
- CopyFrom(
- bufferIndex: _length,
- source: value,
- sourceIndex: startIndex,
- count: count);
- }
-
- /// <summary>
/// Append the given buffer.
/// </summary>
/// <param name="value">The buffer to append.</param>
@@ -208,14 +174,13 @@ namespace System.Runtime.InteropServices
/// Thrown if <paramref name="startIndex"/> or <paramref name="count"/> are outside the range
/// of <paramref name="value"/> characters.
/// </exception>
- public void Append(StringBuffer value, uint startIndex = 0)
+ public void Append(ref StringBuffer value, int startIndex = 0)
{
- if (value == null) throw new ArgumentNullException(nameof(value));
if (value.Length == 0) return;
value.CopyTo(
bufferIndex: startIndex,
- destination: this,
+ destination: ref this,
destinationIndex: _length,
count: value.Length);
}
@@ -231,14 +196,13 @@ namespace System.Runtime.InteropServices
/// Thrown if <paramref name="startIndex"/> or <paramref name="count"/> are outside the range
/// of <paramref name="value"/> characters.
/// </exception>
- public void Append(StringBuffer value, uint startIndex, uint count)
+ public void Append(ref StringBuffer value, int startIndex, int count)
{
- if (value == null) throw new ArgumentNullException(nameof(value));
if (count == 0) return;
value.CopyTo(
bufferIndex: startIndex,
- destination: this,
+ destination: ref this,
destinationIndex: _length,
count: count);
}
@@ -252,29 +216,24 @@ namespace System.Runtime.InteropServices
/// of <paramref name="value"/> characters.
/// </exception>
/// <exception cref="ArgumentNullException">Thrown if <paramref name="destination"/> is null.</exception>
- public unsafe void CopyTo(uint bufferIndex, StringBuffer destination, uint destinationIndex, uint count)
+ public void CopyTo(int bufferIndex, ref StringBuffer destination, int destinationIndex, int count)
{
- if (destination == null) throw new ArgumentNullException(nameof(destination));
if (destinationIndex > destination._length) throw new ArgumentOutOfRangeException(nameof(destinationIndex));
if (bufferIndex >= _length) throw new ArgumentOutOfRangeException(nameof(bufferIndex));
if (_length < checked(bufferIndex + count)) throw new ArgumentOutOfRangeException(nameof(count));
if (count == 0) return;
- uint lastIndex = checked(destinationIndex + count);
- if (destination._length < lastIndex) destination.Length = lastIndex;
-
- Buffer.MemoryCopy(
- source: CharPointer + bufferIndex,
- destination: destination.CharPointer + destinationIndex,
- destinationSizeInBytes: checked((long)(destination.ByteCapacity - (destinationIndex * sizeof(char)))),
- sourceBytesToCopy: checked((long)count * sizeof(char)));
+ int lastIndex = checked(destinationIndex + count);
+ if (destination.Length < lastIndex) destination.Length = lastIndex;
+
+ Array.Copy(UnderlyingArray, bufferIndex, destination.UnderlyingArray, destinationIndex, count);
}
/// <summary>
/// Copy contents from the specified string into the buffer at the given index. Start index must be within the current length of
/// the buffer, will grow as necessary.
/// </summary>
- public unsafe void CopyFrom(uint bufferIndex, string source, int sourceIndex = 0, int count = -1)
+ public void CopyFrom(int bufferIndex, string source, int sourceIndex = 0, int count = -1)
{
if (source == null) throw new ArgumentNullException(nameof(source));
if (bufferIndex > _length) throw new ArgumentOutOfRangeException(nameof(bufferIndex));
@@ -283,32 +242,22 @@ namespace System.Runtime.InteropServices
if (count < 0 || source.Length - count < sourceIndex) throw new ArgumentOutOfRangeException(nameof(count));
if (count == 0) return;
- uint lastIndex = bufferIndex + (uint)count;
+ int lastIndex = bufferIndex + (int)count;
if (_length < lastIndex) Length = lastIndex;
- fixed (char* content = source)
- {
- Buffer.MemoryCopy(
- source: content + sourceIndex,
- destination: CharPointer + bufferIndex,
- destinationSizeInBytes: checked((long)(ByteCapacity - (bufferIndex * sizeof(char)))),
- sourceBytesToCopy: (long)count * sizeof(char));
- }
+ source.CopyTo(sourceIndex, UnderlyingArray, bufferIndex, count);
}
/// <summary>
/// Trim the specified values from the end of the buffer. If nothing is specified, nothing is trimmed.
/// </summary>
- public unsafe void TrimEnd(char[] values)
+ public void TrimEnd(char[] values)
{
if (values == null || values.Length == 0 || _length == 0) return;
- char* end = CharPointer + _length - 1;
-
- while (_length > 0 && Array.IndexOf(values, *end) >= 0)
+ while (_length > 0 && Array.IndexOf(values, _buffer[_length - 1]) >= 0)
{
Length = _length - 1;
- end--;
}
}
@@ -316,11 +265,9 @@ namespace System.Runtime.InteropServices
/// String representation of the entire buffer. If the buffer is larger than the maximum size string (int.MaxValue) this will throw.
/// </summary>
/// <exception cref="InvalidOperationException">Thrown if the buffer is too big to fit into a string.</exception>
- public unsafe override string ToString()
+ public override string ToString()
{
- if (_length == 0) return string.Empty;
- if (_length > int.MaxValue) throw new InvalidOperationException();
- return new string(CharPointer, startIndex: 0, length: (int)_length);
+ return new string(_buffer, startIndex: 0, length: _length);
}
/// <summary>
@@ -331,23 +278,23 @@ namespace System.Runtime.InteropServices
/// Thrown if <paramref name="startIndex"/> or <paramref name="count"/> are outside the range of the buffer's length
/// or count is greater than the maximum string size (int.MaxValue).
/// </exception>
- public unsafe string Substring(uint startIndex, int count = -1)
+ public string Substring(int startIndex, int count = -1)
{
if (startIndex > (_length == 0 ? 0 : _length - 1)) throw new ArgumentOutOfRangeException(nameof(startIndex));
if (count < -1) throw new ArgumentOutOfRangeException(nameof(count));
- uint realCount = count == -1 ? _length - startIndex : (uint)count;
+ int realCount = count == -1 ? _length - startIndex : (int)count;
if (realCount > int.MaxValue || checked(startIndex + realCount) > _length) throw new ArgumentOutOfRangeException(nameof(count));
- if (realCount == 0) return string.Empty;
// The buffer could be bigger than will fit into a string, but the substring might fit. As the starting
// index might be bigger than int we need to index ourselves.
- return new string(value: CharPointer + startIndex, startIndex: 0, length: (int)realCount);
+ return new string(_buffer, startIndex: startIndex, length: realCount);
}
- public override void Free()
+ public void Free()
{
- base.Free();
+ ArrayPool<char>.Shared.Return(_buffer);
+ _buffer = null;
_length = 0;
}
}
diff --git a/src/mscorlib/corefx/System/Security/SecureString.Windows.cs b/src/mscorlib/corefx/System/Security/SecureString.Windows.cs
index 5f56353647..7ed0c6a15b 100644
--- a/src/mscorlib/corefx/System/Security/SecureString.Windows.cs
+++ b/src/mscorlib/corefx/System/Security/SecureString.Windows.cs
@@ -206,11 +206,11 @@ namespace System.Security
else
{
uint defaultChar = '?';
- int resultByteLength = 1 + Interop.mincore.WideCharToMultiByte(
- Interop.mincore.CP_ACP, Interop.mincore.WC_NO_BEST_FIT_CHARS, (char*)bufferPtr, length, null, 0, (IntPtr)(&defaultChar), IntPtr.Zero);
+ int resultByteLength = 1 + Interop.Kernel32.WideCharToMultiByte(
+ Interop.Kernel32.CP_ACP, Interop.Kernel32.WC_NO_BEST_FIT_CHARS, (char*)bufferPtr, length, null, 0, (IntPtr)(&defaultChar), IntPtr.Zero);
ptr = globalAlloc ? Marshal.AllocHGlobal(resultByteLength) : Marshal.AllocCoTaskMem(resultByteLength);
- Interop.mincore.WideCharToMultiByte(
- Interop.mincore.CP_ACP, Interop.mincore.WC_NO_BEST_FIT_CHARS, (char*)bufferPtr, length, (byte*)ptr, resultByteLength - 1, (IntPtr)(&defaultChar), IntPtr.Zero);
+ Interop.Kernel32.WideCharToMultiByte(
+ Interop.Kernel32.CP_ACP, Interop.Kernel32.WC_NO_BEST_FIT_CHARS, (char*)bufferPtr, length, (byte*)ptr, resultByteLength - 1, (IntPtr)(&defaultChar), IntPtr.Zero);
*(resultByteLength - 1 + (byte*)ptr) = 0;
}
result = ptr;
diff --git a/src/mscorlib/facade/mscorlib.csproj b/src/mscorlib/facade/mscorlib.csproj
index 7d0133af39..038a698f23 100644
--- a/src/mscorlib/facade/mscorlib.csproj
+++ b/src/mscorlib/facade/mscorlib.csproj
@@ -10,6 +10,7 @@
<IsPartialFacadeAssembly>true</IsPartialFacadeAssembly>
<OutputType>Library</OutputType>
<ExcludeMscorlibFacade>true</ExcludeMscorlibFacade>
+ <HighEntropyVA>true</HighEntropyVA>
<!-- This prevents the default MsBuild targets from referencing System.Core.dll -->
<AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>
@@ -19,13 +20,13 @@
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
- <AvailablePlatforms>amd64,x86,arm,arm-softfp,arm64</AvailablePlatforms>
+ <AvailablePlatforms>amd64,x86,arm,armel,arm64</AvailablePlatforms>
<Configuration Condition=" '$(Configuration)' == '' ">$(BuildType)</Configuration>
<Platform Condition=" '$(Platform)' == '' ">$(BuildArch)</Platform>
<!-- The CLR properties use amd64 as their platform string, we want to keep in sync with those, so set Platform appropriately,
though still use the 'x64' output path (see use of BuildArch below) -->
<Platform Condition=" '$(Platform)' == 'x64' ">amd64</Platform>
- <Platform Condition=" '$(Platform)' == 'arm-softfp' ">arm</Platform>
+ <Platform Condition=" '$(Platform)' == 'armel' ">arm</Platform>
<!-- We want to exclude the transitive closure of the packages pulled in via project.json as that introduces ambiguity -->
<OmitTransitiveCompileReferences>true</OmitTransitiveCompileReferences>
diff --git a/src/mscorlib/facade/project.json b/src/mscorlib/facade/project.json
index 37f8c1ba57..b0b39a1264 100644
--- a/src/mscorlib/facade/project.json
+++ b/src/mscorlib/facade/project.json
@@ -4,6 +4,7 @@
"System.IO": "4.1.0",
"System.Security.Cryptography.Primitives": "4.0.0",
"System.Security.Claims": "4.0.0",
+ "System.Security.Principal": "4.0.0"
},
"frameworks": {
"netstandard1.3": {
diff --git a/src/mscorlib/model.xml b/src/mscorlib/model.xml
deleted file mode 100644
index c0e9746306..0000000000
--- a/src/mscorlib/model.xml
+++ /dev/null
@@ -1,12486 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ThinModel>
- <Assembly Status="ApiRoot" Name="System.Private.CoreLib">
- <Type Name="System.AccessViolationException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member MemberType="Field" Name="_accessType" />
- <Member MemberType="Field" Name="_ip" />
- <Member MemberType="Field" Name="_target" />
- </Type>
- <Type Status="ApiRoot" Name="System.Action">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke" />
- </Type>
- <Type Name="System.Action&lt;T&gt;">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(T,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(T)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Action&lt;T1,T2&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Action&lt;T1,T2,T3&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Action&lt;T1,T2,T3,T4&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Action&lt;T1,T2,T3,T4,T5&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,T5,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4,T5)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Action&lt;T1,T2,T3,T4,T5,T6&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,T5,T6,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4,T5,T6)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Action&lt;T1,T2,T3,T4,T5,T6,T7&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,T5,T6,T7,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4,T5,T6,T7)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Action&lt;T1,T2,T3,T4,T5,T6,T7,T8&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,T5,T6,T7,T8,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4,T5,T6,T7,T8)" />
- </Type>
- <Type Name="System.Activator">
- <Member Name="CreateComInstanceFrom(System.String,System.String)" />
- <Member Name="CreateComInstanceFrom(System.String,System.String,System.Byte[],System.Configuration.Assemblies.AssemblyHashAlgorithm)" />
- <Member Name="CreateInstance(System.AppDomain,System.String,System.String)" />
- <Member Name="CreateInstance(System.AppDomain,System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[])" />
- <Member Name="CreateInstance(System.String,System.String)" />
- <Member Name="CreateInstance(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[])" />
- <Member Name="CreateInstance(System.String,System.String,System.Object[])" />
- <Member Name="CreateInstance(System.Type)" />
- <Member Name="CreateInstance(System.Type,System.Boolean)" />
- <Member Name="CreateInstance(System.Type,System.Object[])" />
- <Member Name="CreateInstance(System.Type,System.Object[],System.Object[])" />
- <Member Name="CreateInstance(System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member Name="CreateInstance(System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[])" />
- <Member Name="CreateInstance&lt;T&gt;" />
- <Member Name="CreateInstanceFrom(System.AppDomain,System.String,System.String)" />
- <Member Name="CreateInstanceFrom(System.AppDomain,System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[])" />
- <Member Name="CreateInstanceFrom(System.String,System.String)" />
- <Member Name="CreateInstanceFrom(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[])" />
- <Member Name="CreateInstanceFrom(System.String,System.String,System.Object[])" />
- <Member Status="ImplRoot" Name="System.Runtime.InteropServices._Activator.GetIDsOfNames(System.Guid@,System.IntPtr,System.UInt32,System.UInt32,System.IntPtr)" />
- <Member Status="ImplRoot" Name="System.Runtime.InteropServices._Activator.GetTypeInfo(System.UInt32,System.UInt32,System.IntPtr)" />
- <Member Status="ImplRoot" Name="System.Runtime.InteropServices._Activator.GetTypeInfoCount(System.UInt32@)" />
- <Member Status="ImplRoot" Name="System.Runtime.InteropServices._Activator.Invoke(System.UInt32,System.Guid@,System.UInt32,System.Int16,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr)" />
- </Type>
- <Type Name="System.AppDomain">
- <Member Name="get_CurrentDomain" />
- <Member Status="ImplRoot" Name="get_MonitoringIsEnabled" />
- <Member Status="ImplRoot" Name="set_MonitoringIsEnabled(System.Boolean)" />
- <Member Status="ImplRoot" Name="get_MonitoringTotalProcessorTime" />
- <Member Status="ImplRoot" Name="get_MonitoringTotalAllocatedMemorySize" />
- <Member Status="ImplRoot" Name="get_MonitoringSurvivedMemorySize" />
- <Member Status="ImplRoot" Name="get_MonitoringSurvivedProcessMemorySize" />
- <Member Status="ImplRoot" MemberType="Property" Name="MonitoringIsEnabled" />
- <Member Status="ImplRoot" MemberType="Property" Name="MonitoringTotalProcessorTime" />
- <Member Status="ImplRoot" MemberType="Property" Name="MonitoringTotalAllocatedMemorySize" />
- <Member Status="ImplRoot" MemberType="Property" Name="MonitoringSurvivedMemorySize" />
- <Member Status="ImplRoot" MemberType="Property" Name="MonitoringSurvivedProcessMemorySize" />
- <Member MemberType="Property" Name="IsFullyTrusted" />
- <Member Name="GetData(System.String)" />
- <Member Name="ToString" />
- <Member Status="ImplRoot" Name="SetupDomainSecurity(System.Security.Policy.Evidence,System.IntPtr,System.Boolean)" />
- <Member Status="ImplRoot" Name="SetupDomainSecurity(System.AppDomainHandle,System.Runtime.CompilerServices.ObjectHandleOnStack,System.IntPtr,System.Boolean)" />
- <Member Status="ImplRoot" MemberType="Event" Name="AssemblyResolve" />
- <Member Status="ImplRoot" Name="OnAssemblyResolveEvent(System.Reflection.RuntimeAssembly,System.String)" />
- <Member Status="ImplRoot" MemberType="Event" Name="AssemblyLoad" />
- <Member Status="ImplRoot" MemberType="Event" Name="ResourceResolve" />
- <Member Status="ImplRoot" MemberType="Event" Name="TypeResolve" />
- <Member Status="ImplRoot" MemberType="Event" Name="DomainUnload" />
- <Member Status="ImplRoot" MemberType="Field" Name="_applicationTrust" />
- <Member Status="ImplRoot" MemberType="Field" Name="_FusionStore" />
- <Member Status="ImplRoot" MemberType="Field" Name="_HasSetPolicy" />
- <Member Status="ImplRoot" MemberType="Field" Name="_LocalStore" />
- <Member Status="ImplRoot" MemberType="Field" Name="_processExit" />
- <Member Status="ImplRoot" MemberType="Field" Name="_SecurityIdentity" />
- <Member Status="ImplRoot" MemberType="Field" Name="_unhandledException" />
- <Member Status="ImplRoot" Name="OnAssemblyLoadEvent(System.Reflection.RuntimeAssembly)" />
- <Member Status="ImplRoot" Name="OnResourceResolveEvent(System.Reflection.RuntimeAssembly,System.String)" />
- <Member Status="ImplRoot" Name="OnTypeResolveEvent(System.Reflection.RuntimeAssembly,System.String)" />
- <Member Status="ImplRoot" Name="PrepareDataForSetup(System.String,System.AppDomainSetup,System.Security.Policy.Evidence,System.Security.Policy.Evidence,System.IntPtr,System.String,System.String[],System.String[])" />
- <Member Status="ImplRoot" Name="Setup(System.Object)" />
- <Member Status="ImplRoot" Name="SetupDomain(System.Boolean,System.String,System.String,System.String[],System.String[])" />
- <Member Status="ImplRoot" Name="nCreateContext" />
- <Member Name="OnDesignerNamespaceResolveEvent(System.String)" Condition="FEATURE_COMINTEROP" />
- <Member MemberType="Property" Name="BaseDirectory" />
- <Member Name="get_BaseDirectory" />
- </Type>
- <Type Name="System.AppDomainManager">
- <Member Name="#ctor" />
- <Member Name="InitializeNewDomain(System.AppDomainSetup)" />
- <Member Name="CheckSecuritySettings(System.Security.SecurityState)" />
- </Type>
- <Type Name="System.AppDomainUnloadedException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.AppContext">
- <Member MemberType="Event" Name="FirstChanceException" />
- <Member MemberType="Event" Name="ProcessExit" />
- <Member MemberType="Event" Name="UnhandledException" />
- <Member Name="add_FirstChanceException(System.EventHandler&lt;System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs&gt;)" />
- <Member Name="add_ProcessExit(System.EventHandler)" />
- <Member Name="add_UnhandledException(System.UnhandledExceptionEventHandler)" />
- <Member Name="get_BaseDirectory" />
- <Member Name="get_TargetFrameworkName" />
- <Member Name="GetData(System.String)" />
- <Member Name="remove_FirstChanceException(System.EventHandler&lt;System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs&gt;)" />
- <Member Name="remove_ProcessExit(System.EventHandler)" />
- <Member Name="remove_UnhandledException(System.UnhandledExceptionEventHandler)" />
- <Member Name="SetData(System.String,System.Object)" />
- <Member Name="SetSwitch(System.String,System.Boolean)" />
- <Member Name="TryGetSwitch(System.String,System.Boolean@)" />
- <Member MemberType="Property" Name="BaseDirectory" />
- <Member MemberType="Property" Name="TargetFrameworkName" />
- </Type>
- <Type Name="System.ApplicationException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.ApplicationId">
- <Member Name="#ctor(System.Byte[],System.String,System.Version,System.String,System.String)" />
- <Member Name="Copy" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Culture" />
- <Member Name="get_Name" />
- <Member Name="get_ProcessorArchitecture" />
- <Member Name="get_PublicKeyToken" />
- <Member Name="get_Version" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Culture" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ProcessorArchitecture" />
- <Member MemberType="Property" Name="PublicKeyToken" />
- <Member MemberType="Property" Name="Version" />
- </Type>
- <Type Status="ImplRoot" Name="System.Collections.ArrayList">
- <Member Name="ReadOnly(System.Collections.IList)" />
- </Type>
- <Type Name="System.ArgumentException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.String,System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_ParamName" />
- <Member MemberType="Property" Name="ParamName" />
- </Type>
- <Type Name="System.ArgumentNullException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.ArgumentOutOfRangeException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Object,System.String)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_ActualValue" />
- <Member MemberType="Property" Name="ActualValue" />
- </Type>
- <Type Name="System.ArithmeticException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Array">
- <Member Name="AsReadOnly&lt;T&gt;(T[])" />
- <Member Name="BinarySearch(System.Array,System.Int32,System.Int32,System.Object)" />
- <Member Name="BinarySearch(System.Array,System.Int32,System.Int32,System.Object,System.Collections.IComparer)" />
- <Member Name="BinarySearch(System.Array,System.Object)" />
- <Member Name="BinarySearch(System.Array,System.Object,System.Collections.IComparer)" />
- <Member Name="BinarySearch&lt;T&gt;(T[],System.Int32,System.Int32,T)" />
- <Member Name="BinarySearch&lt;T&gt;(T[],System.Int32,System.Int32,T,System.Collections.Generic.IComparer&lt;T&gt;)" />
- <Member Name="BinarySearch&lt;T&gt;(T[],T)" />
- <Member Name="BinarySearch&lt;T&gt;(T[],T,System.Collections.Generic.IComparer&lt;T&gt;)" />
- <Member Name="Clear(System.Array,System.Int32,System.Int32)" />
- <Member Name="Clone" />
- <Member Name="ConstrainedCopy(System.Array,System.Int32,System.Array,System.Int32,System.Int32)" />
- <Member Name="ConvertAll&lt;TInput,TOutput&gt;(TInput[],System.Converter&lt;TInput,TOutput&gt;)" />
- <Member Name="Copy(System.Array,System.Array,System.Int32)" />
- <Member Name="Copy(System.Array,System.Array,System.Int64)" />
- <Member Name="Copy(System.Array,System.Int32,System.Array,System.Int32,System.Int32)" />
- <Member Name="Copy(System.Array,System.Int64,System.Array,System.Int64,System.Int64)" />
- <Member Name="CopyTo(System.Array,System.Int32)" />
- <Member Name="CopyTo(System.Array,System.Int64)" />
- <Member Name="CreateInstance(System.Type,System.Int32)" />
- <Member Name="CreateInstance(System.Type,System.Int32,System.Int32)" />
- <Member Name="CreateInstance(System.Type,System.Int32,System.Int32,System.Int32)" />
- <Member Name="CreateInstance(System.Type,System.Int32[])" />
- <Member Name="CreateInstance(System.Type,System.Int32[],System.Int32[])" />
- <Member Name="CreateInstance(System.Type,System.Int64[])" />
- <Member Name="Empty&lt;T&gt;" />
- <Member Name="Exists&lt;T&gt;(T[],System.Predicate&lt;T&gt;)" />
- <Member Name="Fill&lt;T&gt;(T[],T)" />
- <Member Name="Fill&lt;T&gt;(T[],T,System.Int32,System.Int32)" />
- <Member Name="Find&lt;T&gt;(T[],System.Predicate&lt;T&gt;)" />
- <Member Name="FindAll&lt;T&gt;(T[],System.Predicate&lt;T&gt;)" />
- <Member Name="FindIndex&lt;T&gt;(T[],System.Int32,System.Int32,System.Predicate&lt;T&gt;)" />
- <Member Name="FindIndex&lt;T&gt;(T[],System.Int32,System.Predicate&lt;T&gt;)" />
- <Member Name="FindIndex&lt;T&gt;(T[],System.Predicate&lt;T&gt;)" />
- <Member Name="FindLast&lt;T&gt;(T[],System.Predicate&lt;T&gt;)" />
- <Member Name="FindLastIndex&lt;T&gt;(T[],System.Int32,System.Int32,System.Predicate&lt;T&gt;)" />
- <Member Name="FindLastIndex&lt;T&gt;(T[],System.Int32,System.Predicate&lt;T&gt;)" />
- <Member Name="FindLastIndex&lt;T&gt;(T[],System.Predicate&lt;T&gt;)" />
- <Member Name="ForEach&lt;T&gt;(T[],System.Action&lt;T&gt;)" />
- <Member Name="get_IsFixedSize" />
- <Member Name="get_IsReadOnly" />
- <Member Name="get_IsSynchronized" />
- <Member Name="get_Length" />
- <Member Name="get_LongLength" />
- <Member Name="get_Rank" />
- <Member Name="get_SyncRoot" />
- <Member Name="GetEnumerator" />
- <Member Name="GetLength(System.Int32)" />
- <Member Name="GetLongLength(System.Int32)" />
- <Member Name="GetLowerBound(System.Int32)" />
- <Member Name="GetUpperBound(System.Int32)" />
- <Member Name="GetValue(System.Int32)" />
- <Member Name="GetValue(System.Int32,System.Int32)" />
- <Member Name="GetValue(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetValue(System.Int32[])" />
- <Member Name="GetValue(System.Int64)" />
- <Member Name="GetValue(System.Int64,System.Int64)" />
- <Member Name="GetValue(System.Int64,System.Int64,System.Int64)" />
- <Member Name="GetValue(System.Int64[])" />
- <Member Name="IndexOf(System.Array,System.Object)" />
- <Member Name="IndexOf(System.Array,System.Object,System.Int32)" />
- <Member Name="IndexOf(System.Array,System.Object,System.Int32,System.Int32)" />
- <Member Name="IndexOf&lt;T&gt;(T[],T)" />
- <Member Name="IndexOf&lt;T&gt;(T[],T,System.Int32)" />
- <Member Name="IndexOf&lt;T&gt;(T[],T,System.Int32,System.Int32)" />
- <Member Name="Initialize" />
- <Member Name="LastIndexOf(System.Array,System.Object)" />
- <Member Name="LastIndexOf(System.Array,System.Object,System.Int32)" />
- <Member Name="LastIndexOf(System.Array,System.Object,System.Int32,System.Int32)" />
- <Member Name="LastIndexOf&lt;T&gt;(T[],T)" />
- <Member Name="LastIndexOf&lt;T&gt;(T[],T,System.Int32)" />
- <Member Name="LastIndexOf&lt;T&gt;(T[],T,System.Int32,System.Int32)" />
- <Member Name="Resize&lt;T&gt;(T[]@,System.Int32)" />
- <Member Name="Reverse(System.Array)" />
- <Member Name="Reverse(System.Array,System.Int32,System.Int32)" />
- <Member Name="Reverse&lt;T&gt;(T[])" />
- <Member Name="Reverse&lt;T&gt;(T[],System.Int32,System.Int32)" />
- <Member Name="SetValue(System.Object,System.Int32)" />
- <Member Name="SetValue(System.Object,System.Int32,System.Int32)" />
- <Member Name="SetValue(System.Object,System.Int32,System.Int32,System.Int32)" />
- <Member Name="SetValue(System.Object,System.Int32[])" />
- <Member Name="SetValue(System.Object,System.Int64)" />
- <Member Name="SetValue(System.Object,System.Int64,System.Int64)" />
- <Member Name="SetValue(System.Object,System.Int64,System.Int64,System.Int64)" />
- <Member Name="SetValue(System.Object,System.Int64[])" />
- <Member Name="Sort(System.Array)" />
- <Member Name="Sort(System.Array,System.Array)" />
- <Member Name="Sort(System.Array,System.Array,System.Collections.IComparer)" />
- <Member Name="Sort(System.Array,System.Array,System.Int32,System.Int32)" />
- <Member Name="Sort(System.Array,System.Array,System.Int32,System.Int32,System.Collections.IComparer)" />
- <Member Name="Sort(System.Array,System.Collections.IComparer)" />
- <Member Name="Sort(System.Array,System.Int32,System.Int32)" />
- <Member Name="Sort(System.Array,System.Int32,System.Int32,System.Collections.IComparer)" />
- <Member Name="Sort&lt;T&gt;(T[])" />
- <Member Name="Sort&lt;T&gt;(T[],System.Collections.Generic.IComparer&lt;T&gt;)" />
- <Member Name="Sort&lt;T&gt;(T[],System.Comparison&lt;T&gt;)" />
- <Member Name="Sort&lt;T&gt;(T[],System.Int32,System.Int32)" />
- <Member Name="Sort&lt;T&gt;(T[],System.Int32,System.Int32,System.Collections.Generic.IComparer&lt;T&gt;)" />
- <Member Name="Sort&lt;TKey,TValue&gt;(TKey[],TValue[])" />
- <Member Name="Sort&lt;TKey,TValue&gt;(TKey[],TValue[],System.Collections.Generic.IComparer&lt;TKey&gt;)" />
- <Member Name="Sort&lt;TKey,TValue&gt;(TKey[],TValue[],System.Int32,System.Int32)" />
- <Member Name="Sort&lt;TKey,TValue&gt;(TKey[],TValue[],System.Int32,System.Int32,System.Collections.Generic.IComparer&lt;TKey&gt;)" />
- <Member Name="TrueForAll&lt;T&gt;(T[],System.Predicate&lt;T&gt;)" />
- <Member MemberType="Property" Name="IsFixedSize" />
- <Member MemberType="Property" Name="IsReadOnly" />
- <Member MemberType="Property" Name="IsSynchronized" />
- <Member MemberType="Property" Name="Length" />
- <Member MemberType="Property" Name="LongLength" />
- <Member MemberType="Property" Name="Rank" />
- <Member MemberType="Property" Name="SyncRoot" />
- <Member Status="ImplRoot" Name="GetDataPtrOffsetInternal" /> <!-- EE -->
- </Type>
- <Type Name="System.ArraySegment&lt;T&gt;">
- <Member Name="#ctor(T[])" />
- <Member Name="#ctor(T[],System.Int32,System.Int32)" />
- <Member Name="Equals(System.ArraySegment&lt;T&gt;)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Array" />
- <Member Name="get_Count" />
- <Member Name="get_Offset" />
- <Member Name="GetEnumerator" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.ArraySegment&lt;T&gt;,System.ArraySegment&lt;T&gt;)" />
- <Member Name="op_Inequality(System.ArraySegment&lt;T&gt;,System.ArraySegment&lt;T&gt;)" />
- <Member MemberType="Property" Name="Array" />
- <Member MemberType="Property" Name="Count" />
- <Member MemberType="Property" Name="Offset" />
- </Type>
- <Type Name="System.ArraySegment&lt;T&gt;+Enumerator">
- <Member Name="Dispose" />
- <Member Name="get_Current" />
- <Member Name="MoveNext" />
- <Member MemberType="Property" Name="Current" />
- <Member Name="System.Collections.IEnumerator.Reset" />
- </Type>
- <Type Name="System.ArrayTypeMismatchException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.AssemblyLoadEventHandler">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,System.AssemblyLoadEventArgs,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object,System.AssemblyLoadEventArgs)" />
- </Type>
- <Type Name="System.AssemblyLoadEventArgs">
- <Member Name="#ctor(System.Reflection.Assembly)" />
- <Member Name="get_LoadedAssembly" />
- <Member MemberType="Property" Name="LoadedAssembly" />
- </Type>
- <Type Name="System.AsyncCallback">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.IAsyncResult,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.IAsyncResult)" />
- </Type>
- <Type Name="System.Attribute">
- <Member Name="#ctor" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_TypeId" />
- <Member Name="GetCustomAttribute(System.Reflection.Assembly,System.Type)" />
- <Member Name="GetCustomAttribute(System.Reflection.Assembly,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttribute(System.Reflection.MemberInfo,System.Type)" />
- <Member Name="GetCustomAttribute(System.Reflection.MemberInfo,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttribute(System.Reflection.Module,System.Type)" />
- <Member Name="GetCustomAttribute(System.Reflection.Module,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttribute(System.Reflection.ParameterInfo,System.Type)" />
- <Member Name="GetCustomAttribute(System.Reflection.ParameterInfo,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.Assembly)" />
- <Member Name="GetCustomAttributes(System.Reflection.Assembly,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.Assembly,System.Type)" />
- <Member Name="GetCustomAttributes(System.Reflection.Assembly,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.MemberInfo)" />
- <Member Name="GetCustomAttributes(System.Reflection.MemberInfo,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.MemberInfo,System.Type)" />
- <Member Name="GetCustomAttributes(System.Reflection.MemberInfo,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.Module)" />
- <Member Name="GetCustomAttributes(System.Reflection.Module,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.Module,System.Type)" />
- <Member Name="GetCustomAttributes(System.Reflection.Module,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.ParameterInfo)" />
- <Member Name="GetCustomAttributes(System.Reflection.ParameterInfo,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.ParameterInfo,System.Type)" />
- <Member Name="GetCustomAttributes(System.Reflection.ParameterInfo,System.Type,System.Boolean)" />
- <Member Name="GetHashCode" />
- <Member Name="IsDefaultAttribute" />
- <Member Name="IsDefined(System.Reflection.Assembly,System.Type)" />
- <Member Name="IsDefined(System.Reflection.Assembly,System.Type,System.Boolean)" />
- <Member Name="IsDefined(System.Reflection.MemberInfo,System.Type)" />
- <Member Name="IsDefined(System.Reflection.MemberInfo,System.Type,System.Boolean)" />
- <Member Name="IsDefined(System.Reflection.Module,System.Type)" />
- <Member Name="IsDefined(System.Reflection.Module,System.Type,System.Boolean)" />
- <Member Name="IsDefined(System.Reflection.ParameterInfo,System.Type)" />
- <Member Name="IsDefined(System.Reflection.ParameterInfo,System.Type,System.Boolean)" />
- <Member Name="Match(System.Object)" />
- <Member MemberType="Property" Name="TypeId" />
- </Type>
- <Type Name="System.AttributeTargets">
- <Member MemberType="Field" Name="All" />
- <Member MemberType="Field" Name="Assembly" />
- <Member MemberType="Field" Name="Class" />
- <Member MemberType="Field" Name="Constructor" />
- <Member MemberType="Field" Name="Delegate" />
- <Member MemberType="Field" Name="Enum" />
- <Member MemberType="Field" Name="Event" />
- <Member MemberType="Field" Name="Field" />
- <Member MemberType="Field" Name="GenericParameter" />
- <Member MemberType="Field" Name="Interface" />
- <Member MemberType="Field" Name="Method" />
- <Member MemberType="Field" Name="Module" />
- <Member MemberType="Field" Name="Parameter" />
- <Member MemberType="Field" Name="Property" />
- <Member MemberType="Field" Name="ReturnValue" />
- <Member MemberType="Field" Name="Struct" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.AttributeUsageAttribute">
- <Member Name="#ctor(System.AttributeTargets)" />
- <Member Name="get_AllowMultiple" />
- <Member Name="get_Inherited" />
- <Member Name="get_ValidOn" />
- <Member Name="set_AllowMultiple(System.Boolean)" />
- <Member Name="set_Inherited(System.Boolean)" />
- <Member MemberType="Property" Name="AllowMultiple" />
- <Member MemberType="Property" Name="Inherited" />
- <Member MemberType="Property" Name="ValidOn" />
- </Type>
- <Type Name="System.Base64FormattingOptions">
- <Member MemberType="Field" Name="InsertLineBreaks" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.BitConverter">
- <Member Name="DoubleToInt64Bits(System.Double)" />
- <Member Name="Int32BitsToSingle(System.Int32)" />
- <Member Name="Int64BitsToDouble(System.Int64)" />
- <Member MemberType="Field" Name="IsLittleEndian" />
- <Member Name="GetBytes(System.Boolean)" />
- <Member Name="GetBytes(System.Char)" />
- <Member Name="GetBytes(System.Double)" />
- <Member Name="GetBytes(System.Single)" />
- <Member Name="GetBytes(System.Int32)" />
- <Member Name="GetBytes(System.Int64)" />
- <Member Name="GetBytes(System.Int16)" />
- <Member Name="GetBytes(System.UInt32)" />
- <Member Name="GetBytes(System.UInt64)" />
- <Member Name="GetBytes(System.UInt16)" />
- <Member Name="SingleToInt32Bits(System.Single)" />
- <Member Name="ToBoolean(System.Byte[],System.Int32)" />
- <Member Name="ToChar(System.Byte[],System.Int32)" />
- <Member Name="ToDouble(System.Byte[],System.Int32)" />
- <Member Name="ToInt16(System.Byte[],System.Int32)" />
- <Member Name="ToInt32(System.Byte[],System.Int32)" />
- <Member Name="ToInt64(System.Byte[],System.Int32)" />
- <Member Name="ToSingle(System.Byte[],System.Int32)" />
- <Member Name="ToString(System.Byte[])" />
- <Member Name="ToString(System.Byte[],System.Int32)" />
- <Member Name="ToString(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="ToUInt16(System.Byte[],System.Int32)" />
- <Member Name="ToUInt32(System.Byte[],System.Int32)" />
- <Member Name="ToUInt64(System.Byte[],System.Int32)" />
- </Type>
- <Type Name="System.BadImageFormatException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.String,System.String,System.Int32)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.String,System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_FileName" />
- <Member Name="get_FusionLog" />
- <Member Name="GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member MemberType="Property" Name="FileName" />
- <Member MemberType="Property" Name="FusionLog" />
- </Type>
- <Type Name="System.Boolean">
- <Member MemberType="Field" Name="FalseString" />
- <Member MemberType="Field" Name="TrueString" />
- <Member Name="CompareTo(System.Boolean)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="Equals(System.Boolean)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Parse(System.String)" />
- <Member Name="TryParse(System.String,System.Boolean@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- </Type>
- <Type Name="System.Buffer">
- <Member Name="BlockCopy(System.Array,System.Int32,System.Array,System.Int32,System.Int32)" />
- <Member Name="ByteLength(System.Array)" />
- <Member Name="GetByte(System.Array,System.Int32)" />
- <Member Name="SetByte(System.Array,System.Int32,System.Byte)" />
- <Member Name="MemoryCopy(System.Void*,System.Void*,System.Int64,System.Int64)" />
- <Member Name="MemoryCopy(System.Void*,System.Void*,System.UInt64,System.UInt64)" />
- </Type>
- <Type Name="System.Buffers.ArrayPool&lt;T&gt;">
- <Member Name="#ctor" />
- <Member Name="Create" />
- <Member Name="Create(System.Int32,System.Int32)" />
- <Member Name="get_Shared" />
- <Member MemberType="Property" Name="Shared" />
- <Member Name="Rent(System.Int32)" />
- <Member Name="Return(T[],System.Boolean)" />
- </Type>
- <Type Name="System.Byte">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="CompareTo(System.Byte)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="Equals(System.Byte)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.Byte@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Byte@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.CannotUnloadAppDomainException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Char">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="CompareTo(System.Char)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="ConvertFromUtf32(System.Int32)" />
- <Member Name="ConvertToUtf32(System.Char,System.Char)" />
- <Member Name="ConvertToUtf32(System.String,System.Int32)" />
- <Member Name="Equals(System.Char)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="GetNumericValue(System.Char)" />
- <Member Name="GetNumericValue(System.String,System.Int32)" />
- <Member Name="GetTypeCode" />
- <Member Name="GetUnicodeCategory(System.Char)" />
- <Member Name="GetUnicodeCategory(System.String,System.Int32)" />
- <Member Name="IsControl(System.Char)" />
- <Member Name="IsControl(System.String,System.Int32)" />
- <Member Name="IsDigit(System.Char)" />
- <Member Name="IsDigit(System.String,System.Int32)" />
- <Member Name="IsHighSurrogate(System.Char)" />
- <Member Name="IsHighSurrogate(System.String,System.Int32)" />
- <Member Name="IsLetter(System.Char)" />
- <Member Name="IsLetter(System.String,System.Int32)" />
- <Member Name="IsLetterOrDigit(System.Char)" />
- <Member Name="IsLetterOrDigit(System.String,System.Int32)" />
- <Member Name="IsLower(System.Char)" />
- <Member Name="IsLower(System.String,System.Int32)" />
- <Member Name="IsLowSurrogate(System.Char)" />
- <Member Name="IsLowSurrogate(System.String,System.Int32)" />
- <Member Name="IsNumber(System.Char)" />
- <Member Name="IsNumber(System.String,System.Int32)" />
- <Member Name="IsPunctuation(System.Char)" />
- <Member Name="IsPunctuation(System.String,System.Int32)" />
- <Member Name="IsSeparator(System.Char)" />
- <Member Name="IsSeparator(System.String,System.Int32)" />
- <Member Name="IsSurrogate(System.Char)" />
- <Member Name="IsSurrogate(System.String,System.Int32)" />
- <Member Name="IsSurrogatePair(System.Char,System.Char)" />
- <Member Name="IsSurrogatePair(System.String,System.Int32)" />
- <Member Name="IsSymbol(System.Char)" />
- <Member Name="IsSymbol(System.String,System.Int32)" />
- <Member Name="IsUpper(System.Char)" />
- <Member Name="IsUpper(System.String,System.Int32)" />
- <Member Name="IsWhiteSpace(System.Char)" />
- <Member Name="IsWhiteSpace(System.String,System.Int32)" />
- <Member Name="Parse(System.String)" />
- <Member Name="ToLower(System.Char)" />
- <Member Name="ToLower(System.Char,System.Globalization.CultureInfo)" />
- <Member Name="ToLowerInvariant(System.Char)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.Char)" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToUpper(System.Char)" />
- <Member Name="ToUpper(System.Char,System.Globalization.CultureInfo)" />
- <Member Name="ToUpperInvariant(System.Char)" />
- <Member Name="TryParse(System.String,System.Char@)" />
- </Type>
- <Type Name="System.CharEnumerator">
- <Member Name="Clone" />
- <Member Name="Dispose" />
- <Member Name="get_Current" />
- <Member Name="MoveNext" />
- <Member Name="Reset" />
- <Member MemberType="Property" Name="Current" />
- <Member Name="System.Collections.IEnumerator.get_Current" />
- <Member MemberType="Property" Name="System.Collections.IEnumerator.Current" />
- </Type>
- <Type Name="System.CLSCompliantAttribute">
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="get_IsCompliant" />
- <Member MemberType="Property" Name="IsCompliant" />
- </Type>
- <Type Name="System.Collections.CollectionBase">
- <Member Name="#ctor" />
- <Member Name="get_List" />
- <Member MemberType="Property" Name="List" />
- </Type>
- <Type Name="System.Collections.DictionaryEntry">
- <Member Name="#ctor(System.Object,System.Object)" />
- <Member Name="get_Key" />
- <Member Name="get_Value" />
- <Member Name="set_Key(System.Object)" />
- <Member Name="set_Value(System.Object)" />
- <Member Name="Deconstruct(System.Object@,System.Object@)" />
- <Member MemberType="Property" Name="Key" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Collections.Generic.Comparer&lt;T&gt;">
- <Member Name="#ctor" />
- <Member Name="Compare(T,T)" />
- <Member Name="Create(System.Comparison&lt;T&gt;)" />
- <Member Name="get_Default" />
- <Member MemberType="Property" Name="Default" />
- </Type>
- <Type Name="System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Collections.Generic.IDictionary&lt;TKey,TValue&gt;)" />
- <Member Name="#ctor(System.Collections.Generic.IDictionary&lt;TKey,TValue&gt;,System.Collections.Generic.IEqualityComparer&lt;TKey&gt;)" />
- <Member Name="#ctor(System.Collections.Generic.IEnumerable&lt;System.Collections.Generic.KeyValuePair&lt;TKey,TValue&gt;&gt;)" />
- <Member Name="#ctor(System.Collections.Generic.IEnumerable&lt;System.Collections.Generic.KeyValuePair&lt;TKey,TValue&gt;&gt;,System.Collections.Generic.IEqualityComparer&lt;TKey&gt;)" />
- <Member Name="#ctor(System.Collections.Generic.IEqualityComparer&lt;TKey&gt;)" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Collections.Generic.IEqualityComparer&lt;TKey&gt;)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Add(TKey,TValue)" />
- <Member Name="Clear" />
- <Member Name="ContainsKey(TKey)" />
- <Member Name="ContainsValue(TValue)" />
- <Member Name="get_Comparer" />
- <Member Name="get_Count" />
- <Member Name="get_Item(TKey)" />
- <Member Name="get_Keys" />
- <Member Name="get_Values" />
- <Member Name="GetEnumerator" />
- <Member Name="GetValueOrDefault(TKey)" />
- <Member Name="GetValueOrDefault(TKey,TValue)" />
- <Member Name="Remove(TKey)" />
- <Member Name="set_Item(TKey,TValue)" />
- <Member Name="TryGetValue(TKey,TValue@)" />
- <Member MemberType="Property" Name="Comparer" />
- <Member MemberType="Property" Name="Count" />
- <Member MemberType="Property" Name="Item(TKey)" />
- <Member MemberType="Property" Name="Keys" />
- <Member MemberType="Property" Name="Values" />
- </Type>
- <Type Name="System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;+Enumerator">
- <Member Name="Dispose" />
- <Member Name="get_Current" />
- <Member Name="MoveNext" />
- <Member MemberType="Property" Name="Current" />
- </Type>
- <Type Name="System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;+KeyCollection">
- <Member Name="#ctor(System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;)" />
- <Member Name="CopyTo(TKey[],System.Int32)" />
- <Member Name="get_Count" />
- <Member Name="GetEnumerator" />
- <Member MemberType="Property" Name="Count" />
- </Type>
- <Type Name="System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;+KeyCollection+Enumerator">
- <Member Name="Dispose" />
- <Member Name="get_Current" />
- <Member Name="MoveNext" />
- <Member MemberType="Property" Name="Current" />
- </Type>
- <Type Name="System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;+ValueCollection">
- <Member Name="#ctor(System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;)" />
- <Member Name="CopyTo(TValue[],System.Int32)" />
- <Member Name="get_Count" />
- <Member Name="GetEnumerator" />
- <Member MemberType="Property" Name="Count" />
- </Type>
- <Type Name="System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;+ValueCollection+Enumerator">
- <Member Name="Dispose" />
- <Member Name="get_Current" />
- <Member Name="MoveNext" />
- <Member MemberType="Property" Name="Current" />
- </Type>
- <Type Name="System.Collections.Generic.EqualityComparer&lt;T&gt;">
- <Member Name="#ctor" />
- <Member Name="Equals(T,T)" />
- <Member Name="get_Default" />
- <Member Name="GetHashCode(T)" />
- <Member MemberType="Property" Name="Default" />
- </Type>
- <Type Name="System.Collections.Generic.ICollection&lt;T&gt;">
- <Member Name="Add(T)" />
- <Member Name="Clear" />
- <Member Name="Contains(T)" />
- <Member Name="CopyTo(T[],System.Int32)" />
- <Member Name="get_Count" />
- <Member Name="get_IsReadOnly" />
- <Member Name="Remove(T)" />
- <Member MemberType="Property" Name="Count" />
- <Member MemberType="Property" Name="IsReadOnly" />
- </Type>
- <Type Name="System.Collections.Generic.IComparer&lt;T&gt;">
- <Member Name="Compare(T,T)" />
- </Type>
- <Type Name="System.Collections.Generic.IDictionary&lt;TKey,TValue&gt;">
- <Member Name="Add(TKey,TValue)" />
- <Member Name="ContainsKey(TKey)" />
- <Member Name="get_Item(TKey)" />
- <Member Name="get_Keys" />
- <Member Name="get_Values" />
- <Member Name="Remove(TKey)" />
- <Member Name="set_Item(TKey,TValue)" />
- <Member Name="TryGetValue(TKey,TValue@)" />
- <Member MemberType="Property" Name="Item(TKey)" />
- <Member MemberType="Property" Name="Keys" />
- <Member MemberType="Property" Name="Values" />
- </Type>
- <Type Name="System.Collections.Generic.IEnumerable&lt;T&gt;">
- <Member Name="GetEnumerator" />
- </Type>
- <Type Name="System.Collections.Generic.IEnumerator&lt;T&gt;">
- <Member Name="get_Current" />
- <Member MemberType="Property" Name="Current" />
- </Type>
- <Type Name="System.Collections.Generic.IEqualityComparer&lt;T&gt;">
- <Member Name="Equals(T,T)" />
- <Member Name="GetHashCode(T)" />
- </Type>
- <Type Name="System.Collections.Generic.IList&lt;T&gt;">
- <Member Name="get_Item(System.Int32)" />
- <Member Name="IndexOf(T)" />
- <Member Name="Insert(System.Int32,T)" />
- <Member Name="RemoveAt(System.Int32)" />
- <Member Name="set_Item(System.Int32,T)" />
- <Member MemberType="Property" Name="Item(System.Int32)" />
- </Type>
- <Type Name="System.Collections.Generic.IReadOnlyDictionary&lt;TKey,TValue&gt;">
- <Member Name="ContainsKey(TKey)" />
- <Member Name="get_Item(TKey)" />
- <Member Name="get_Keys" />
- <Member Name="get_Values" />
- <Member Name="TryGetValue(TKey,TValue@)" />
- <Member MemberType="Property" Name="Item(TKey)" />
- <Member MemberType="Property" Name="Keys" />
- <Member MemberType="Property" Name="Values" />
- </Type>
- <Type Name="System.Collections.Generic.IReadOnlyList&lt;T&gt;">
- <Member Name="get_Item(System.Int32)" />
- <Member MemberType="Property" Name="Item(System.Int32)" />
- </Type>
- <Type Name="System.Collections.Generic.IReadOnlyCollection&lt;T&gt;">
- <Member MemberType="Property" Name="Count" />
- </Type>
- <Type Name="System.Collections.Generic.KeyNotFoundException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Collections.Generic.KeyValuePair">
- <Member Name="Create&lt;TKey,TValue&gt;(TKey,TValue)" />
- </Type>
- <Type Name="System.Collections.Generic.KeyValuePair&lt;TKey,TValue&gt;">
- <Member Name="#ctor(TKey,TValue)" />
- <Member Name="get_Key" />
- <Member Name="get_Value" />
- <Member Name="ToString" />
- <Member Name="Deconstruct(TKey@,TValue@)" />
- <Member MemberType="Property" Name="Key" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Collections.Generic.List&lt;T&gt;">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Collections.Generic.IEnumerable&lt;T&gt;)" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="Add(T)" />
- <Member Name="AddRange(System.Collections.Generic.IEnumerable&lt;T&gt;)" />
- <Member Name="AsReadOnly" />
- <Member Name="BinarySearch(System.Int32,System.Int32,T,System.Collections.Generic.IComparer&lt;T&gt;)" />
- <Member Name="BinarySearch(T)" />
- <Member Name="BinarySearch(T,System.Collections.Generic.IComparer&lt;T&gt;)" />
- <Member Name="Clear" />
- <Member Name="Contains(T)" />
- <Member Name="ConvertAll&lt;TOutput&gt;(System.Converter&lt;T,TOutput&gt;)" />
- <Member Name="CopyTo(System.Int32,T[],System.Int32,System.Int32)" />
- <Member Name="CopyTo(T[])" />
- <Member Name="CopyTo(T[],System.Int32)" />
- <Member Name="Exists(System.Predicate&lt;T&gt;)" />
- <Member Name="Find(System.Predicate&lt;T&gt;)" />
- <Member Name="FindAll(System.Predicate&lt;T&gt;)" />
- <Member Name="FindIndex(System.Int32,System.Int32,System.Predicate&lt;T&gt;)" />
- <Member Name="FindIndex(System.Int32,System.Predicate&lt;T&gt;)" />
- <Member Name="FindIndex(System.Predicate&lt;T&gt;)" />
- <Member Name="FindLast(System.Predicate&lt;T&gt;)" />
- <Member Name="FindLastIndex(System.Int32,System.Int32,System.Predicate&lt;T&gt;)" />
- <Member Name="FindLastIndex(System.Int32,System.Predicate&lt;T&gt;)" />
- <Member Name="FindLastIndex(System.Predicate&lt;T&gt;)" />
- <Member Name="ForEach(System.Action&lt;T&gt;)" />
- <Member Name="get_Capacity" />
- <Member Name="get_Count" />
- <Member Name="get_Item(System.Int32)" />
- <Member Name="GetEnumerator" />
- <Member Name="GetRange(System.Int32,System.Int32)" />
- <Member Name="IndexOf(T)" />
- <Member Name="IndexOf(T,System.Int32)" />
- <Member Name="IndexOf(T,System.Int32,System.Int32)" />
- <Member Name="Insert(System.Int32,T)" />
- <Member Name="InsertRange(System.Int32,System.Collections.Generic.IEnumerable&lt;T&gt;)" />
- <Member Name="LastIndexOf(T)" />
- <Member Name="LastIndexOf(T,System.Int32)" />
- <Member Name="LastIndexOf(T,System.Int32,System.Int32)" />
- <Member Name="Remove(T)" />
- <Member Name="RemoveAll(System.Predicate&lt;T&gt;)" />
- <Member Name="RemoveAt(System.Int32)" />
- <Member Name="RemoveRange(System.Int32,System.Int32)" />
- <Member Name="Reverse" />
- <Member Name="Reverse(System.Int32,System.Int32)" />
- <Member Name="set_Capacity(System.Int32)" />
- <Member Name="set_Item(System.Int32,T)" />
- <Member Name="Sort" />
- <Member Name="Sort(System.Collections.Generic.IComparer&lt;T&gt;)" />
- <Member Name="Sort(System.Comparison&lt;T&gt;)" />
- <Member Name="Sort(System.Int32,System.Int32,System.Collections.Generic.IComparer&lt;T&gt;)" />
- <Member Name="ToArray" />
- <Member Name="TrimExcess" />
- <Member MemberType="Property" Name="Capacity" />
- <Member MemberType="Property" Name="Count" />
- <Member MemberType="Property" Name="Item(System.Int32)" />
- <Member Name="TrueForAll(System.Predicate&lt;T&gt;)" />
- </Type>
- <Type Name="System.Collections.Generic.List&lt;T&gt;+Enumerator">
- <Member Name="Dispose" />
- <Member Name="get_Current" />
- <Member Name="MoveNext" />
- <Member MemberType="Property" Name="Current" />
- <Member Name="System.Collections.IEnumerator.Reset" />
- </Type>
- <Type Status="ImplRoot" Name="System.Collections.Generic.Mscorlib_CollectionDebugView&lt;T&gt;">
- <Member Status="ImplRoot" Name="#ctor(System.Collections.Generic.ICollection&lt;T&gt;)" />
- <Member Status="ImplRoot" Name="get_Items" />
- <Member Status="ImplRoot" MemberType="Property" Name="Items" />
- </Type>
- <Type Status="ImplRoot" Name="System.Collections.Generic.Mscorlib_DictionaryKeyCollectionDebugView&lt;TKey,TValue&gt;">
- <Member Status="ImplRoot" Name="#ctor(System.Collections.Generic.ICollection&lt;TKey&gt;)" />
- <Member Status="ImplRoot" Name="get_Items" />
- <Member Status="ImplRoot" MemberType="Property" Name="Items" />
- </Type>
- <Type Status="ImplRoot" Name="System.Collections.Generic.Mscorlib_DictionaryValueCollectionDebugView&lt;TKey,TValue&gt;">
- <Member Status="ImplRoot" Name="#ctor(System.Collections.Generic.ICollection&lt;TValue&gt;)" />
- <Member Status="ImplRoot" Name="get_Items" />
- <Member Status="ImplRoot" MemberType="Property" Name="Items" />
- </Type>
- <Type Status="ImplRoot" Name="System.Collections.Generic.Mscorlib_DictionaryDebugView&lt;K,V&gt;">
- <Member Status="ImplRoot" Name="#ctor(System.Collections.Generic.IDictionary&lt;K,V&gt;)" />
- <Member Status="ImplRoot" Name="get_Items" />
- <Member Status="ImplRoot" MemberType="Property" Name="Items" />
- </Type>
- <Type Status="ImplRoot" Name="System.Collections.Generic.Mscorlib_KeyedCollectionDebugView&lt;K,T&gt;">
- <Member Status="ImplRoot" Name="#ctor(System.Collections.ObjectModel.KeyedCollection&lt;K,T&gt;)" />
- <Member Status="ImplRoot" Name="get_Items" />
- <Member Status="ImplRoot" MemberType="Property" Name="Items" />
- </Type>
- <Type Name="System.Collections.ICollection">
- <Member Name="CopyTo(System.Array,System.Int32)" />
- <Member Name="get_Count" />
- <Member Name="get_IsSynchronized" />
- <Member Name="get_SyncRoot" />
- <Member MemberType="Property" Name="Count" />
- <Member MemberType="Property" Name="IsSynchronized" />
- <Member MemberType="Property" Name="SyncRoot" />
- </Type>
- <Type Name="System.Collections.IComparer">
- <Member Name="Compare(System.Object,System.Object)" />
- </Type>
- <Type Name="System.Collections.IDictionary">
- <Member Name="Add(System.Object,System.Object)" />
- <Member Name="Clear" />
- <Member Name="Contains(System.Object)" />
- <Member Name="get_IsFixedSize" />
- <Member Name="get_IsReadOnly" />
- <Member Name="get_Item(System.Object)" />
- <Member Name="get_Keys" />
- <Member Name="get_Values" />
- <Member Name="GetEnumerator" />
- <Member Name="Remove(System.Object)" />
- <Member Name="set_Item(System.Object,System.Object)" />
- <Member MemberType="Property" Name="IsFixedSize" />
- <Member MemberType="Property" Name="IsReadOnly" />
- <Member MemberType="Property" Name="Item(System.Object)" />
- <Member MemberType="Property" Name="Keys" />
- <Member MemberType="Property" Name="Values" />
- </Type>
- <Type Name="System.Collections.IDictionaryEnumerator">
- <Member Name="get_Entry" />
- <Member Name="get_Key" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Entry" />
- <Member MemberType="Property" Name="Key" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Collections.IEnumerable">
- <Member Name="GetEnumerator" />
- </Type>
- <Type Name="System.Collections.IEnumerator">
- <Member Name="get_Current" />
- <Member Name="MoveNext" />
- <Member Name="Reset" />
- <Member MemberType="Property" Name="Current" />
- </Type>
- <Type Name="System.Collections.IEqualityComparer">
- <Member Name="Equals(System.Object,System.Object)" />
- <Member Name="GetHashCode(System.Object)" />
- </Type>
- <Type Name="System.Collections.IList">
- <Member Name="Add(System.Object)" />
- <Member Name="Clear" />
- <Member Name="Contains(System.Object)" />
- <Member Name="get_IsFixedSize" />
- <Member Name="get_IsReadOnly" />
- <Member Name="get_Item(System.Int32)" />
- <Member Name="IndexOf(System.Object)" />
- <Member Name="Insert(System.Int32,System.Object)" />
- <Member Name="Remove(System.Object)" />
- <Member Name="RemoveAt(System.Int32)" />
- <Member Name="set_Item(System.Int32,System.Object)" />
- <Member MemberType="Property" Name="IsFixedSize" />
- <Member MemberType="Property" Name="IsReadOnly" />
- <Member MemberType="Property" Name="Item(System.Int32)" />
- </Type>
- <Type Name="System.Collections.IStructuralComparable">
- <Member Name="CompareTo(System.Object,System.Collections.IComparer)" />
- </Type>
- <Type Name="System.Collections.IStructuralEquatable">
- <Member Name="Equals(System.Object,System.Collections.IEqualityComparer)" />
- <Member Name="GetHashCode(System.Collections.IEqualityComparer)" />
- </Type>
- <Type Name="System.Collections.ObjectModel.Collection&lt;T&gt;">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Collections.Generic.IList&lt;T&gt;)" />
- <Member Name="Add(T)" />
- <Member Name="Clear" />
- <Member Name="ClearItems" />
- <Member Name="Contains(T)" />
- <Member Name="CopyTo(T[],System.Int32)" />
- <Member Name="get_Count" />
- <Member Name="get_Item(System.Int32)" />
- <Member Name="get_Items" />
- <Member Name="GetEnumerator" />
- <Member Name="IndexOf(T)" />
- <Member Name="Insert(System.Int32,T)" />
- <Member Name="InsertItem(System.Int32,T)" />
- <Member Name="Remove(T)" />
- <Member Name="RemoveAt(System.Int32)" />
- <Member Name="RemoveItem(System.Int32)" />
- <Member Name="set_Item(System.Int32,T)" />
- <Member Name="SetItem(System.Int32,T)" />
- <Member MemberType="Property" Name="Count" />
- <Member MemberType="Property" Name="Item(System.Int32)" />
- <Member MemberType="Property" Name="Items" />
- </Type>
- <Type Name="System.Collections.ObjectModel.KeyedCollection&lt;TKey,TItem&gt;">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Collections.Generic.IEqualityComparer&lt;TKey&gt;)" />
- <Member Name="#ctor(System.Collections.Generic.IEqualityComparer&lt;TKey&gt;,System.Int32)" />
- <Member Name="ChangeItemKey(TItem,TKey)" />
- <Member Name="ClearItems" />
- <Member Name="Contains(TKey)" />
- <Member Name="get_Comparer" />
- <Member Name="get_Dictionary" />
- <Member Name="get_Item(TKey)" />
- <Member Name="GetKeyForItem(TItem)" />
- <Member Name="InsertItem(System.Int32,TItem)" />
- <Member Name="Remove(TKey)" />
- <Member Name="RemoveItem(System.Int32)" />
- <Member Name="SetItem(System.Int32,TItem)" />
- <Member MemberType="Property" Name="Comparer" />
- <Member MemberType="Property" Name="Dictionary" />
- <Member MemberType="Property" Name="Item(TKey)" />
- </Type>
- <Type Name="System.Collections.ObjectModel.ReadOnlyCollection&lt;T&gt;">
- <Member Name="#ctor(System.Collections.Generic.IList&lt;T&gt;)" />
- <Member Name="Contains(T)" />
- <Member Name="CopyTo(T[],System.Int32)" />
- <Member Name="get_Count" />
- <Member Name="get_Item(System.Int32)" />
- <Member Name="get_Items" />
- <Member Name="GetEnumerator" />
- <Member Name="IndexOf(T)" />
- <Member MemberType="Property" Name="Count" />
- <Member MemberType="Property" Name="Item(System.Int32)" />
- <Member MemberType="Property" Name="Items" />
- </Type>
-
- <Type Name="System.Collections.ObjectModel.ReadOnlyDictionary&lt;TKey,TValue&gt;">
- <Member Name="#ctor(System.Collections.Generic.IDictionary&lt;TKey,TValue&gt;)" />
- <Member Name="ContainsKey(TKey)" />
- <Member Name="get_Count" />
- <Member Name="get_Item(TKey)" />
- <Member Name="GetEnumerator" />
- <Member Name="TryGetValue(TKey,TValue@)" />
- <Member MemberType="Property" Name="Count" />
- <Member MemberType="Property" Name="Keys" />
- <Member MemberType="Property" Name="Values" />
- <Member MemberType="Property" Name="Dictionary" />
- <Member MemberType="Property" Name="Item(TKey)" />
- </Type>
- <Type Name="System.GCCollectionMode">
- <Member MemberType="Field" Name="Default" />
- <Member MemberType="Field" Name="Optimized" />
- <Member MemberType="Field" Name="Forced" />
- </Type>
-
- <Type Name="System.Comparison&lt;T&gt;">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(T,T,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(T,T)" />
- </Type>
- <Type Name="System.Runtime.Loader.AssemblyLoadContext" condition="FEATURE_HOST_ASSEMBLY_RESOLVER">
- <Member Name="#ctor" />
- <Member MemberType="Property" Name="Default" />
- <Member Name="GetAssemblyName(System.String)" />
- <Member Name="GetLoadContext(System.Reflection.Assembly)" />
- <Member Name="LoadFromAssemblyName(System.Reflection.AssemblyName)" />
- <Member Name="Load(System.Reflection.AssemblyName)" />
- <Member Name="LoadFromAssemblyPath(System.String)" />
- <Member Name="LoadFromNativeImagePath(System.String,System.String)" />
- <Member Name="LoadFromStream(System.IO.Stream)" />
- <Member Name="LoadFromStream(System.IO.Stream,System.IO.Stream)" />
- <Member Name="Resolve(System.IntPtr,System.Reflection.AssemblyName)" />
- <Member Name="ResolveUsingResolvingEvent(System.IntPtr,System.Reflection.AssemblyName)" />
- <Member Name="ResolveUnmanagedDll(System.String,System.IntPtr)" />
- <Member Name="LoadUnmanagedDll(System.String)" />
- <Member Name="LoadUnmanagedDllFromPath(System.String)" />
- <Member Name="GetLoadedAssemblies" />
- <Member Name="get_Default" />
- <Member Name="SetProfileOptimizationRoot(System.String)" />
- <Member Name="StartProfileOptimization(System.String)" />
- <Member MemberType="Event" Name="AssemblyLoad" />
- <Member MemberType="Event" Name="AssemblyResolve" />
- <Member MemberType="Event" Name="Resolving" />
- <Member MemberType="Event" Name="ResourceResolve" />
- <Member MemberType="Event" Name="TypeResolve" />
- <Member MemberType="Event" Name="Unloading" />
- </Type>
- <Type Name="System.Runtime.MemoryFailPoint">
- <Member Name="#ctor(System.Int32)" />
- <Member Name="Dispose" />
- <Member Status="ImplRoot" Name="Finalize" />
- </Type>
- <Type Name="System.Reflection.Metadata.AssemblyExtensions">
- <Member Name="TryGetRawMetadata(System.Reflection.Assembly,System.Byte*@,System.Int32@)"/>
- </Type>
- <Type Name="System.Convert">
- <Member MemberType="Field" Name="DBNull" />
- <Member Name="ChangeType(System.Object,System.Type)" />
- <Member Name="ChangeType(System.Object,System.Type,System.IFormatProvider)" />
- <Member Name="ChangeType(System.Object,System.TypeCode)" />
- <Member Name="ChangeType(System.Object,System.TypeCode,System.IFormatProvider)" />
- <Member Name="FromBase64CharArray(System.Char[],System.Int32,System.Int32)" />
- <Member Name="FromBase64String(System.String)" />
- <Member Name="GetTypeCode(System.Object)" />
- <Member Name="IsDBNull(System.Object)" />
- <Member Name="ToBase64CharArray(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)" />
- <Member Name="ToBase64CharArray(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions)" />
- <Member Name="ToBase64String(System.Byte[])" />
- <Member Name="ToBase64String(System.Byte[],System.Base64FormattingOptions)" />
- <Member Name="ToBase64String(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="ToBase64String(System.Byte[],System.Int32,System.Int32,System.Base64FormattingOptions)" />
- <Member Name="ToBoolean(System.Boolean)" />
- <Member Name="ToBoolean(System.Byte)" />
- <Member Name="ToBoolean(System.Char)" />
- <Member Name="ToBoolean(System.DateTime)" />
- <Member Name="ToBoolean(System.Decimal)" />
- <Member Name="ToBoolean(System.Double)" />
- <Member Name="ToBoolean(System.Int16)" />
- <Member Name="ToBoolean(System.Int32)" />
- <Member Name="ToBoolean(System.Int64)" />
- <Member Name="ToBoolean(System.Object)" />
- <Member Name="ToBoolean(System.Object,System.IFormatProvider)" />
- <Member Name="ToBoolean(System.SByte)" />
- <Member Name="ToBoolean(System.Single)" />
- <Member Name="ToBoolean(System.String)" />
- <Member Name="ToBoolean(System.String,System.IFormatProvider)" />
- <Member Name="ToBoolean(System.UInt16)" />
- <Member Name="ToBoolean(System.UInt32)" />
- <Member Name="ToBoolean(System.UInt64)" />
- <Member Name="ToByte(System.Boolean)" />
- <Member Name="ToByte(System.Byte)" />
- <Member Name="ToByte(System.Char)" />
- <Member Name="ToByte(System.DateTime)" />
- <Member Name="ToByte(System.Decimal)" />
- <Member Name="ToByte(System.Double)" />
- <Member Name="ToByte(System.Int16)" />
- <Member Name="ToByte(System.Int32)" />
- <Member Name="ToByte(System.Int64)" />
- <Member Name="ToByte(System.Object)" />
- <Member Name="ToByte(System.Object,System.IFormatProvider)" />
- <Member Name="ToByte(System.SByte)" />
- <Member Name="ToByte(System.Single)" />
- <Member Name="ToByte(System.String)" />
- <Member Name="ToByte(System.String,System.IFormatProvider)" />
- <Member Name="ToByte(System.String,System.Int32)" />
- <Member Name="ToByte(System.UInt16)" />
- <Member Name="ToByte(System.UInt32)" />
- <Member Name="ToByte(System.UInt64)" />
- <Member Name="ToChar(System.Boolean)" />
- <Member Name="ToChar(System.Byte)" />
- <Member Name="ToChar(System.Char)" />
- <Member Name="ToChar(System.DateTime)" />
- <Member Name="ToChar(System.Decimal)" />
- <Member Name="ToChar(System.Double)" />
- <Member Name="ToChar(System.Int16)" />
- <Member Name="ToChar(System.Int32)" />
- <Member Name="ToChar(System.Int64)" />
- <Member Name="ToChar(System.Object)" />
- <Member Name="ToChar(System.Object,System.IFormatProvider)" />
- <Member Name="ToChar(System.SByte)" />
- <Member Name="ToChar(System.Single)" />
- <Member Name="ToChar(System.String)" />
- <Member Name="ToChar(System.String,System.IFormatProvider)" />
- <Member Name="ToChar(System.UInt16)" />
- <Member Name="ToChar(System.UInt32)" />
- <Member Name="ToChar(System.UInt64)" />
- <Member Name="ToDateTime(System.Boolean)" />
- <Member Name="ToDateTime(System.Byte)" />
- <Member Name="ToDateTime(System.Char)" />
- <Member Name="ToDateTime(System.DateTime)" />
- <Member Name="ToDateTime(System.Decimal)" />
- <Member Name="ToDateTime(System.Double)" />
- <Member Name="ToDateTime(System.Int16)" />
- <Member Name="ToDateTime(System.Int32)" />
- <Member Name="ToDateTime(System.Int64)" />
- <Member Name="ToDateTime(System.Object)" />
- <Member Name="ToDateTime(System.Object,System.IFormatProvider)" />
- <Member Name="ToDateTime(System.SByte)" />
- <Member Name="ToDateTime(System.Single)" />
- <Member Name="ToDateTime(System.String)" />
- <Member Name="ToDateTime(System.String,System.IFormatProvider)" />
- <Member Name="ToDateTime(System.UInt16)" />
- <Member Name="ToDateTime(System.UInt32)" />
- <Member Name="ToDateTime(System.UInt64)" />
- <Member Name="ToDecimal(System.Boolean)" />
- <Member Name="ToDecimal(System.Byte)" />
- <Member Name="ToDecimal(System.Char)" />
- <Member Name="ToDecimal(System.DateTime)" />
- <Member Name="ToDecimal(System.Decimal)" />
- <Member Name="ToDecimal(System.Double)" />
- <Member Name="ToDecimal(System.Int16)" />
- <Member Name="ToDecimal(System.Int32)" />
- <Member Name="ToDecimal(System.Int64)" />
- <Member Name="ToDecimal(System.Object)" />
- <Member Name="ToDecimal(System.Object,System.IFormatProvider)" />
- <Member Name="ToDecimal(System.SByte)" />
- <Member Name="ToDecimal(System.Single)" />
- <Member Name="ToDecimal(System.String)" />
- <Member Name="ToDecimal(System.String,System.IFormatProvider)" />
- <Member Name="ToDecimal(System.UInt16)" />
- <Member Name="ToDecimal(System.UInt32)" />
- <Member Name="ToDecimal(System.UInt64)" />
- <Member Name="ToDouble(System.Boolean)" />
- <Member Name="ToDouble(System.Byte)" />
- <Member Name="ToDouble(System.Char)" />
- <Member Name="ToDouble(System.DateTime)" />
- <Member Name="ToDouble(System.Decimal)" />
- <Member Name="ToDouble(System.Double)" />
- <Member Name="ToDouble(System.Int16)" />
- <Member Name="ToDouble(System.Int32)" />
- <Member Name="ToDouble(System.Int64)" />
- <Member Name="ToDouble(System.Object)" />
- <Member Name="ToDouble(System.Object,System.IFormatProvider)" />
- <Member Name="ToDouble(System.SByte)" />
- <Member Name="ToDouble(System.Single)" />
- <Member Name="ToDouble(System.String)" />
- <Member Name="ToDouble(System.String,System.IFormatProvider)" />
- <Member Name="ToDouble(System.UInt16)" />
- <Member Name="ToDouble(System.UInt32)" />
- <Member Name="ToDouble(System.UInt64)" />
- <Member Name="ToInt16(System.Boolean)" />
- <Member Name="ToInt16(System.Byte)" />
- <Member Name="ToInt16(System.Char)" />
- <Member Name="ToInt16(System.DateTime)" />
- <Member Name="ToInt16(System.Decimal)" />
- <Member Name="ToInt16(System.Double)" />
- <Member Name="ToInt16(System.Int16)" />
- <Member Name="ToInt16(System.Int32)" />
- <Member Name="ToInt16(System.Int64)" />
- <Member Name="ToInt16(System.Object)" />
- <Member Name="ToInt16(System.Object,System.IFormatProvider)" />
- <Member Name="ToInt16(System.SByte)" />
- <Member Name="ToInt16(System.Single)" />
- <Member Name="ToInt16(System.String)" />
- <Member Name="ToInt16(System.String,System.IFormatProvider)" />
- <Member Name="ToInt16(System.String,System.Int32)" />
- <Member Name="ToInt16(System.UInt16)" />
- <Member Name="ToInt16(System.UInt32)" />
- <Member Name="ToInt16(System.UInt64)" />
- <Member Name="ToInt32(System.Boolean)" />
- <Member Name="ToInt32(System.Byte)" />
- <Member Name="ToInt32(System.Char)" />
- <Member Name="ToInt32(System.DateTime)" />
- <Member Name="ToInt32(System.Decimal)" />
- <Member Name="ToInt32(System.Double)" />
- <Member Name="ToInt32(System.Int16)" />
- <Member Name="ToInt32(System.Int32)" />
- <Member Name="ToInt32(System.Int64)" />
- <Member Name="ToInt32(System.Object)" />
- <Member Name="ToInt32(System.Object,System.IFormatProvider)" />
- <Member Name="ToInt32(System.SByte)" />
- <Member Name="ToInt32(System.Single)" />
- <Member Name="ToInt32(System.String)" />
- <Member Name="ToInt32(System.String,System.IFormatProvider)" />
- <Member Name="ToInt32(System.String,System.Int32)" />
- <Member Name="ToInt32(System.UInt16)" />
- <Member Name="ToInt32(System.UInt32)" />
- <Member Name="ToInt32(System.UInt64)" />
- <Member Name="ToInt64(System.Boolean)" />
- <Member Name="ToInt64(System.Byte)" />
- <Member Name="ToInt64(System.Char)" />
- <Member Name="ToInt64(System.DateTime)" />
- <Member Name="ToInt64(System.Decimal)" />
- <Member Name="ToInt64(System.Double)" />
- <Member Name="ToInt64(System.Int16)" />
- <Member Name="ToInt64(System.Int32)" />
- <Member Name="ToInt64(System.Int64)" />
- <Member Name="ToInt64(System.Object)" />
- <Member Name="ToInt64(System.Object,System.IFormatProvider)" />
- <Member Name="ToInt64(System.SByte)" />
- <Member Name="ToInt64(System.Single)" />
- <Member Name="ToInt64(System.String)" />
- <Member Name="ToInt64(System.String,System.IFormatProvider)" />
- <Member Name="ToInt64(System.String,System.Int32)" />
- <Member Name="ToInt64(System.UInt16)" />
- <Member Name="ToInt64(System.UInt32)" />
- <Member Name="ToInt64(System.UInt64)" />
- <Member Name="ToSByte(System.Boolean)" />
- <Member Name="ToSByte(System.Byte)" />
- <Member Name="ToSByte(System.Char)" />
- <Member Name="ToSByte(System.DateTime)" />
- <Member Name="ToSByte(System.Decimal)" />
- <Member Name="ToSByte(System.Double)" />
- <Member Name="ToSByte(System.Int16)" />
- <Member Name="ToSByte(System.Int32)" />
- <Member Name="ToSByte(System.Int64)" />
- <Member Name="ToSByte(System.Object)" />
- <Member Name="ToSByte(System.Object,System.IFormatProvider)" />
- <Member Name="ToSByte(System.SByte)" />
- <Member Name="ToSByte(System.Single)" />
- <Member Name="ToSByte(System.String)" />
- <Member Name="ToSByte(System.String,System.IFormatProvider)" />
- <Member Name="ToSByte(System.String,System.Int32)" />
- <Member Name="ToSByte(System.UInt16)" />
- <Member Name="ToSByte(System.UInt32)" />
- <Member Name="ToSByte(System.UInt64)" />
- <Member Name="ToSingle(System.Boolean)" />
- <Member Name="ToSingle(System.Byte)" />
- <Member Name="ToSingle(System.Char)" />
- <Member Name="ToSingle(System.DateTime)" />
- <Member Name="ToSingle(System.Decimal)" />
- <Member Name="ToSingle(System.Double)" />
- <Member Name="ToSingle(System.Int16)" />
- <Member Name="ToSingle(System.Int32)" />
- <Member Name="ToSingle(System.Int64)" />
- <Member Name="ToSingle(System.Object)" />
- <Member Name="ToSingle(System.Object,System.IFormatProvider)" />
- <Member Name="ToSingle(System.SByte)" />
- <Member Name="ToSingle(System.Single)" />
- <Member Name="ToSingle(System.String)" />
- <Member Name="ToSingle(System.String,System.IFormatProvider)" />
- <Member Name="ToSingle(System.UInt16)" />
- <Member Name="ToSingle(System.UInt32)" />
- <Member Name="ToSingle(System.UInt64)" />
- <Member Name="ToString(System.Boolean)" />
- <Member Name="ToString(System.Boolean,System.IFormatProvider)" />
- <Member Name="ToString(System.Byte)" />
- <Member Name="ToString(System.Byte,System.IFormatProvider)" />
- <Member Name="ToString(System.Byte,System.Int32)" />
- <Member Name="ToString(System.Char)" />
- <Member Name="ToString(System.Char,System.IFormatProvider)" />
- <Member Name="ToString(System.DateTime)" />
- <Member Name="ToString(System.DateTime,System.IFormatProvider)" />
- <Member Name="ToString(System.Decimal)" />
- <Member Name="ToString(System.Decimal,System.IFormatProvider)" />
- <Member Name="ToString(System.Double)" />
- <Member Name="ToString(System.Double,System.IFormatProvider)" />
- <Member Name="ToString(System.Int16)" />
- <Member Name="ToString(System.Int16,System.IFormatProvider)" />
- <Member Name="ToString(System.Int16,System.Int32)" />
- <Member Name="ToString(System.Int32)" />
- <Member Name="ToString(System.Int32,System.IFormatProvider)" />
- <Member Name="ToString(System.Int32,System.Int32)" />
- <Member Name="ToString(System.Int64)" />
- <Member Name="ToString(System.Int64,System.IFormatProvider)" />
- <Member Name="ToString(System.Int64,System.Int32)" />
- <Member Name="ToString(System.Object)" />
- <Member Name="ToString(System.Object,System.IFormatProvider)" />
- <Member Name="ToString(System.SByte)" />
- <Member Name="ToString(System.SByte,System.IFormatProvider)" />
- <Member Name="ToString(System.Single)" />
- <Member Name="ToString(System.Single,System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- <Member Name="ToString(System.UInt16)" />
- <Member Name="ToString(System.UInt16,System.IFormatProvider)" />
- <Member Name="ToString(System.UInt32)" />
- <Member Name="ToString(System.UInt32,System.IFormatProvider)" />
- <Member Name="ToString(System.UInt64)" />
- <Member Name="ToString(System.UInt64,System.IFormatProvider)" />
- <Member Name="ToUInt16(System.Boolean)" />
- <Member Name="ToUInt16(System.Byte)" />
- <Member Name="ToUInt16(System.Char)" />
- <Member Name="ToUInt16(System.DateTime)" />
- <Member Name="ToUInt16(System.Decimal)" />
- <Member Name="ToUInt16(System.Double)" />
- <Member Name="ToUInt16(System.Int16)" />
- <Member Name="ToUInt16(System.Int32)" />
- <Member Name="ToUInt16(System.Int64)" />
- <Member Name="ToUInt16(System.Object)" />
- <Member Name="ToUInt16(System.Object,System.IFormatProvider)" />
- <Member Name="ToUInt16(System.SByte)" />
- <Member Name="ToUInt16(System.Single)" />
- <Member Name="ToUInt16(System.String)" />
- <Member Name="ToUInt16(System.String,System.IFormatProvider)" />
- <Member Name="ToUInt16(System.String,System.Int32)" />
- <Member Name="ToUInt16(System.UInt16)" />
- <Member Name="ToUInt16(System.UInt32)" />
- <Member Name="ToUInt16(System.UInt64)" />
- <Member Name="ToUInt32(System.Boolean)" />
- <Member Name="ToUInt32(System.Byte)" />
- <Member Name="ToUInt32(System.Char)" />
- <Member Name="ToUInt32(System.DateTime)" />
- <Member Name="ToUInt32(System.Decimal)" />
- <Member Name="ToUInt32(System.Double)" />
- <Member Name="ToUInt32(System.Int16)" />
- <Member Name="ToUInt32(System.Int32)" />
- <Member Name="ToUInt32(System.Int64)" />
- <Member Name="ToUInt32(System.Object)" />
- <Member Name="ToUInt32(System.Object,System.IFormatProvider)" />
- <Member Name="ToUInt32(System.SByte)" />
- <Member Name="ToUInt32(System.Single)" />
- <Member Name="ToUInt32(System.String)" />
- <Member Name="ToUInt32(System.String,System.IFormatProvider)" />
- <Member Name="ToUInt32(System.String,System.Int32)" />
- <Member Name="ToUInt32(System.UInt16)" />
- <Member Name="ToUInt32(System.UInt32)" />
- <Member Name="ToUInt32(System.UInt64)" />
- <Member Name="ToUInt64(System.Boolean)" />
- <Member Name="ToUInt64(System.Byte)" />
- <Member Name="ToUInt64(System.Char)" />
- <Member Name="ToUInt64(System.DateTime)" />
- <Member Name="ToUInt64(System.Decimal)" />
- <Member Name="ToUInt64(System.Double)" />
- <Member Name="ToUInt64(System.Int16)" />
- <Member Name="ToUInt64(System.Int32)" />
- <Member Name="ToUInt64(System.Int64)" />
- <Member Name="ToUInt64(System.Object)" />
- <Member Name="ToUInt64(System.Object,System.IFormatProvider)" />
- <Member Name="ToUInt64(System.SByte)" />
- <Member Name="ToUInt64(System.Single)" />
- <Member Name="ToUInt64(System.String)" />
- <Member Name="ToUInt64(System.String,System.IFormatProvider)" />
- <Member Name="ToUInt64(System.String,System.Int32)" />
- <Member Name="ToUInt64(System.UInt16)" />
- <Member Name="ToUInt64(System.UInt32)" />
- <Member Name="ToUInt64(System.UInt64)" />
- </Type>
- <Type Name="System.Converter&lt;TInput,TOutput&gt;">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(TInput,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(TInput)" />
- </Type>
- <Type Name="System.DataMisalignedException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.DateTime">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Globalization.Calendar)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.DateTimeKind)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.DateTimeKind)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar,System.DateTimeKind)" />
- <Member Name="#ctor(System.Int64)" />
- <Member Name="#ctor(System.Int64,System.DateTimeKind)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Add(System.TimeSpan)" />
- <Member Name="AddDays(System.Double)" />
- <Member Name="AddHours(System.Double)" />
- <Member Name="AddMilliseconds(System.Double)" />
- <Member Name="AddMinutes(System.Double)" />
- <Member Name="AddMonths(System.Int32)" />
- <Member Name="AddSeconds(System.Double)" />
- <Member Name="AddTicks(System.Int64)" />
- <Member Name="AddYears(System.Int32)" />
- <Member Name="Compare(System.DateTime,System.DateTime)" />
- <Member Name="CompareTo(System.DateTime)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="DaysInMonth(System.Int32,System.Int32)" />
- <Member Name="Equals(System.DateTime)" />
- <Member Name="Equals(System.DateTime,System.DateTime)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="FromBinary(System.Int64)" />
- <Member Name="FromFileTime(System.Int64)" />
- <Member Name="FromFileTimeUtc(System.Int64)" />
- <Member Name="FromOADate(System.Double)" />
- <Member Name="get_Date" />
- <Member Name="get_Day" />
- <Member Name="get_DayOfWeek" />
- <Member Name="get_DayOfYear" />
- <Member Name="get_Hour" />
- <Member Name="get_Kind" />
- <Member Name="get_Millisecond" />
- <Member Name="get_Minute" />
- <Member Name="get_Month" />
- <Member Name="get_Now" />
- <Member Name="get_Second" />
- <Member Name="get_Ticks" />
- <Member Name="get_TimeOfDay" />
- <Member Name="get_Today" />
- <Member Name="get_UtcNow" />
- <Member Name="get_Year" />
- <Member Name="GetDateTimeFormats" />
- <Member Name="GetDateTimeFormats(System.Char)" />
- <Member Name="GetDateTimeFormats(System.Char,System.IFormatProvider)" />
- <Member Name="GetDateTimeFormats(System.IFormatProvider)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="IsDaylightSavingTime" />
- <Member Name="IsLeapYear(System.Int32)" />
- <Member Name="op_Addition(System.DateTime,System.TimeSpan)" />
- <Member Name="op_Equality(System.DateTime,System.DateTime)" />
- <Member Name="op_GreaterThan(System.DateTime,System.DateTime)" />
- <Member Name="op_GreaterThanOrEqual(System.DateTime,System.DateTime)" />
- <Member Name="op_Inequality(System.DateTime,System.DateTime)" />
- <Member Name="op_LessThan(System.DateTime,System.DateTime)" />
- <Member Name="op_LessThanOrEqual(System.DateTime,System.DateTime)" />
- <Member Name="op_Subtraction(System.DateTime,System.DateTime)" />
- <Member Name="op_Subtraction(System.DateTime,System.TimeSpan)" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles)" />
- <Member Name="ParseExact(System.String,System.String,System.IFormatProvider)" />
- <Member Name="ParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles)" />
- <Member Name="ParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles)" />
- <Member Name="SpecifyKind(System.DateTime,System.DateTimeKind)" />
- <Member Name="Subtract(System.DateTime)" />
- <Member Name="Subtract(System.TimeSpan)" />
- <Member Name="ToBinary" />
- <Member Name="ToFileTime" />
- <Member Name="ToFileTimeUtc" />
- <Member Name="ToLocalTime" />
- <Member Name="ToLongDateString" />
- <Member Name="ToLongTimeString" />
- <Member Name="ToOADate" />
- <Member Name="ToShortDateString" />
- <Member Name="ToShortTimeString" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- <Member Name="ToUniversalTime" />
- <Member Name="TryParse(System.String,System.DateTime@)" />
- <Member Name="TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@)" />
- <Member Name="TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@)" />
- <Member Name="TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@)" />
- <Member MemberType="Property" Name="Date" />
- <Member MemberType="Property" Name="Day" />
- <Member MemberType="Property" Name="DayOfWeek" />
- <Member MemberType="Property" Name="DayOfYear" />
- <Member MemberType="Property" Name="Hour" />
- <Member MemberType="Property" Name="Kind" />
- <Member MemberType="Property" Name="Millisecond" />
- <Member MemberType="Property" Name="Minute" />
- <Member MemberType="Property" Name="Month" />
- <Member MemberType="Property" Name="Now" />
- <Member MemberType="Property" Name="Second" />
- <Member MemberType="Property" Name="Ticks" />
- <Member MemberType="Property" Name="TimeOfDay" />
- <Member MemberType="Property" Name="Today" />
- <Member MemberType="Property" Name="UtcNow" />
- <Member MemberType="Property" Name="Year" />
- </Type>
- <Type Name="System.DateTimeKind">
- <Member MemberType="Field" Name="Local" />
- <Member MemberType="Field" Name="Unspecified" />
- <Member MemberType="Field" Name="Utc" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.DateTimeOffset">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="#ctor(System.DateTime)" />
- <Member Name="#ctor(System.DateTime,System.TimeSpan)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.TimeSpan)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.TimeSpan)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar,System.TimeSpan)" />
- <Member Name="#ctor(System.Int64,System.TimeSpan)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Add(System.TimeSpan)" />
- <Member Name="AddDays(System.Double)" />
- <Member Name="AddHours(System.Double)" />
- <Member Name="AddMilliseconds(System.Double)" />
- <Member Name="AddMinutes(System.Double)" />
- <Member Name="AddMonths(System.Int32)" />
- <Member Name="AddSeconds(System.Double)" />
- <Member Name="AddTicks(System.Int64)" />
- <Member Name="AddYears(System.Int32)" />
- <Member Name="Compare(System.DateTimeOffset,System.DateTimeOffset)" />
- <Member Name="CompareTo(System.DateTimeOffset)" />
- <Member Name="Equals(System.DateTimeOffset)" />
- <Member Name="Equals(System.DateTimeOffset,System.DateTimeOffset)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="EqualsExact(System.DateTimeOffset)" />
- <Member Name="FromFileTime(System.Int64)" />
- <Member Name="FromUnixTimeSeconds(System.Int64)" />
- <Member Name="FromUnixTimeMilliseconds(System.Int64)" />
- <Member Name="get_DateTime" />
- <Member Name="get_UtcDateTime" />
- <Member Name="get_LocalDateTime" />
- <Member Name="get_UtcTicks" />
- <Member Name="get_Offset" />
- <Member Name="get_Date" />
- <Member Name="get_Day" />
- <Member Name="get_DayOfWeek" />
- <Member Name="get_DayOfYear" />
- <Member Name="get_Hour" />
- <Member Name="get_Millisecond" />
- <Member Name="get_Minute" />
- <Member Name="get_Month" />
- <Member Name="get_Now" />
- <Member Name="get_Second" />
- <Member Name="get_Ticks" />
- <Member Name="get_TimeOfDay" />
- <Member Name="get_UtcNow" />
- <Member Name="get_Year" />
- <Member Name="GetHashCode" />
- <Member Name="op_Addition(System.DateTimeOffset,System.TimeSpan)" />
- <Member Name="op_Equality(System.DateTimeOffset,System.DateTimeOffset)" />
- <Member Name="op_GreaterThan(System.DateTimeOffset,System.DateTimeOffset)" />
- <Member Name="op_GreaterThanOrEqual(System.DateTimeOffset,System.DateTimeOffset)" />
- <Member Name="op_Inequality(System.DateTimeOffset,System.DateTimeOffset)" />
- <Member Name="op_LessThan(System.DateTimeOffset,System.DateTimeOffset)" />
- <Member Name="op_LessThanOrEqual(System.DateTimeOffset,System.DateTimeOffset)" />
- <Member Name="op_Subtraction(System.DateTimeOffset,System.DateTimeOffset)" />
- <Member Name="op_Subtraction(System.DateTimeOffset,System.TimeSpan)" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles)" />
- <Member Name="ParseExact(System.String,System.String,System.IFormatProvider)" />
- <Member Name="ParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles)" />
- <Member Name="ParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles)" />
- <Member Name="TryParse(System.String,System.DateTimeOffset@)" />
- <Member Name="TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTimeOffset@)" />
- <Member Name="TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTimeOffset@)" />
- <Member Name="TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTimeOffset@)" />
- <Member Name="Subtract(System.DateTimeOffset)" />
- <Member Name="Subtract(System.TimeSpan)" />
- <Member Name="ToFileTime" />
- <Member Name="ToUnixTimeSeconds" />
- <Member Name="ToUnixTimeMilliseconds" />
- <Member Name="ToLocalTime" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- <Member Name="ToUniversalTime" />
- <Member Name="ToOffset(System.TimeSpan)" />
- <Member Name="op_Implicit(System.DateTime)" ReturnType="System.DateTimeOffset" />
- <Member MemberType="Property" Name="DateTime" />
- <Member MemberType="Property" Name="UtcDateTime" />
- <Member MemberType="Property" Name="LocalDateTime" />
- <Member MemberType="Property" Name="UtcTicks" />
- <Member MemberType="Property" Name="Offset" />
- <Member MemberType="Property" Name="Date" />
- <Member MemberType="Property" Name="Day" />
- <Member MemberType="Property" Name="DayOfWeek" />
- <Member MemberType="Property" Name="DayOfYear" />
- <Member MemberType="Property" Name="Hour" />
- <Member MemberType="Property" Name="Millisecond" />
- <Member MemberType="Property" Name="Minute" />
- <Member MemberType="Property" Name="Month" />
- <Member MemberType="Property" Name="Now" />
- <Member MemberType="Property" Name="Second" />
- <Member MemberType="Property" Name="Ticks" />
- <Member MemberType="Property" Name="TimeOfDay" />
- <Member MemberType="Property" Name="UtcNow" />
- <Member MemberType="Property" Name="Year" />
- </Type>
- <Type Name="System.DayOfWeek">
- <Member MemberType="Field" Name="Friday" />
- <Member MemberType="Field" Name="Monday" />
- <Member MemberType="Field" Name="Saturday" />
- <Member MemberType="Field" Name="Sunday" />
- <Member MemberType="Field" Name="Thursday" />
- <Member MemberType="Field" Name="Tuesday" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="Wednesday" />
- </Type>
- <Type Name="System.DBNull" >
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member MemberType="Field" Name="Value" />
- <Member Name="GetTypeCode" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- </Type>
- <Type Name="System.Diagnostics.StackFrame">
- <Member MemberType="Field" Name="OFFSET_UNKNOWN" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Boolean)" />
- <Member Name="#ctor(System.String,System.Int32)" />
- <Member Name="#ctor(System.String,System.Int32,System.Int32)" />
- <Member Name="GetFileColumnNumber" />
- <Member Name="GetFileLineNumber" />
- <Member Name="GetFileName" />
- <Member Name="GetILOffset" />
- <Member Name="GetMethod" />
- <Member Name="GetNativeOffset" />
- <Member Name="ToString" />
- </Type>
- <Type Name="System.Diagnostics.StackTrace">
- <Member MemberType="Field" Name="METHODS_TO_SKIP" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="#ctor(System.Diagnostics.StackFrame)" />
- <Member Name="#ctor(System.Exception)" />
- <Member Name="#ctor(System.Exception,System.Boolean)" />
- <Member Name="#ctor(System.Exception,System.Int32)" />
- <Member Name="#ctor(System.Exception,System.Int32,System.Boolean)" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Boolean)" />
- <Member Name="#ctor(System.Threading.Thread,System.Boolean)" />
- <Member Name="get_FrameCount" />
- <Member Name="GetFrame(System.Int32)" />
- <Member Name="GetFrames" />
- <Member Name="GetManagedStackTraceStringHelper(System.Boolean)"/>
- <Member Name="ToString" />
- <Member MemberType="Property" Name="FrameCount" />
- </Type>
- <Type Name="System.Decimal">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinusOne" />
- <Member MemberType="Field" Name="MinValue" />
- <Member MemberType="Field" Name="One" />
- <Member MemberType="Field" Name="Zero" />
- <Member Name="#ctor(System.Double)" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Boolean,System.Byte)" />
- <Member Name="#ctor(System.Int32[])" />
- <Member Name="#ctor(System.Int64)" />
- <Member Name="#ctor(System.Single)" />
- <Member Name="#ctor(System.UInt32)" />
- <Member Name="#ctor(System.UInt64)" />
- <Member Status="ImplRoot" Name="#ctor(System.Currency)" /> <!-- EE - il stubs -->
- <Member Name="Add(System.Decimal,System.Decimal)" />
- <Member Name="Ceiling(System.Decimal)" />
- <Member Name="Compare(System.Decimal,System.Decimal)" />
- <Member Name="CompareTo(System.Decimal)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="Divide(System.Decimal,System.Decimal)" />
- <Member Name="Equals(System.Decimal)" />
- <Member Name="Equals(System.Decimal,System.Decimal)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Floor(System.Decimal)" />
- <Member Name="FromOACurrency(System.Int64)" />
- <Member Name="GetBits(System.Decimal)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Multiply(System.Decimal,System.Decimal)" />
- <Member Name="Negate(System.Decimal)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="op_Addition(System.Decimal,System.Decimal)" />
- <Member Name="op_Decrement(System.Decimal)" />
- <Member Name="op_Division(System.Decimal,System.Decimal)" />
- <Member Name="op_Equality(System.Decimal,System.Decimal)" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.Byte" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.Char" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.Double" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.Int16" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.Int32" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.Int64" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.SByte" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.Single" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.UInt16" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.UInt32" />
- <Member Name="op_Explicit(System.Decimal)" ReturnType="System.UInt64" />
- <Member Name="op_Explicit(System.Double)" ReturnType="System.Decimal" />
- <Member Name="op_Explicit(System.Single)" ReturnType="System.Decimal" />
- <Member Name="op_GreaterThan(System.Decimal,System.Decimal)" />
- <Member Name="op_GreaterThanOrEqual(System.Decimal,System.Decimal)" />
- <Member Name="op_Implicit(System.Byte)" ReturnType="System.Decimal" />
- <Member Name="op_Implicit(System.Char)" ReturnType="System.Decimal" />
- <Member Name="op_Implicit(System.Int16)" ReturnType="System.Decimal" />
- <Member Name="op_Implicit(System.Int32)" ReturnType="System.Decimal" />
- <Member Name="op_Implicit(System.Int64)" ReturnType="System.Decimal" />
- <Member Name="op_Implicit(System.SByte)" ReturnType="System.Decimal" />
- <Member Name="op_Implicit(System.UInt16)" ReturnType="System.Decimal" />
- <Member Name="op_Implicit(System.UInt32)" ReturnType="System.Decimal" />
- <Member Name="op_Implicit(System.UInt64)" ReturnType="System.Decimal" />
- <Member Name="op_Increment(System.Decimal)" />
- <Member Name="op_Inequality(System.Decimal,System.Decimal)" />
- <Member Name="op_LessThan(System.Decimal,System.Decimal)" />
- <Member Name="op_LessThanOrEqual(System.Decimal,System.Decimal)" />
- <Member Name="op_Modulus(System.Decimal,System.Decimal)" />
- <Member Name="op_Multiply(System.Decimal,System.Decimal)" />
- <Member Name="op_Subtraction(System.Decimal,System.Decimal)" />
- <Member Name="op_UnaryNegation(System.Decimal)" />
- <Member Name="op_UnaryPlus(System.Decimal)" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.Decimal@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Decimal@)" />
- <Member Name="Remainder(System.Decimal,System.Decimal)" />
- <Member Name="Round(System.Decimal)" />
- <Member Name="Round(System.Decimal,System.Int32)" />
- <Member Name="Round(System.Decimal,System.Int32,System.MidpointRounding)" />
- <Member Name="Round(System.Decimal,System.MidpointRounding)" />
- <Member Name="Subtract(System.Decimal,System.Decimal)" />
- <Member Name="ToByte(System.Decimal)" />
- <Member Name="ToDouble(System.Decimal)" />
- <Member Name="ToInt16(System.Decimal)" />
- <Member Name="ToInt32(System.Decimal)" />
- <Member Name="ToInt64(System.Decimal)" />
- <Member Name="ToOACurrency(System.Decimal)" />
- <Member Name="ToSByte(System.Decimal)" />
- <Member Name="ToSingle(System.Decimal)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- <Member Name="ToUInt16(System.Decimal)" />
- <Member Name="ToUInt32(System.Decimal)" />
- <Member Name="ToUInt64(System.Decimal)" />
- <Member Name="Truncate(System.Decimal)" />
- </Type>
- <Type Name="System.Delegate">
- <Member Name="#ctor(System.Object,System.String)" />
- <Member Name="#ctor(System.Type,System.String)" />
- <Member Name="Clone" />
- <Member Name="Combine(System.Delegate,System.Delegate)" />
- <Member Name="Combine(System.Delegate[])" />
- <Member Name="CombineImpl(System.Delegate)" />
- <Member Name="CreateDelegate(System.Type,System.Object,System.Reflection.MethodInfo)" />
- <Member Name="CreateDelegate(System.Type,System.Object,System.Reflection.MethodInfo,System.Boolean)" />
- <Member Name="CreateDelegate(System.Type,System.Object,System.String)" />
- <Member Name="CreateDelegate(System.Type,System.Object,System.String,System.Boolean)" />
- <Member Name="CreateDelegate(System.Type,System.Object,System.String,System.Boolean,System.Boolean)" />
- <Member Name="CreateDelegate(System.Type,System.Reflection.MethodInfo)" />
- <Member Name="CreateDelegate(System.Type,System.Reflection.MethodInfo,System.Boolean)" />
- <Member Name="CreateDelegate(System.Type,System.Type,System.String)" />
- <Member Name="CreateDelegate(System.Type,System.Type,System.String,System.Boolean)" />
- <Member Name="CreateDelegate(System.Type,System.Type,System.String,System.Boolean,System.Boolean)" />
- <Member Name="DynamicInvoke(System.Object[])" />
- <Member Name="DynamicInvokeImpl(System.Object[])" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Method" />
- <Member Name="get_Target" />
- <Member Name="GetHashCode" />
- <Member Name="GetInvocationList" />
- <Member Name="GetMethodImpl" />
- <Member Name="op_Equality(System.Delegate,System.Delegate)" />
- <Member Name="op_Inequality(System.Delegate,System.Delegate)" />
- <Member Name="Remove(System.Delegate,System.Delegate)" />
- <Member Name="RemoveAll(System.Delegate,System.Delegate)" />
- <Member Name="RemoveImpl(System.Delegate)" />
- <Member MemberType="Property" Name="Target" />
- <Member MemberType="Property" Name="Method" />
- <Member Status="ImplRoot" Name="DelegateConstruct(System.Object,System.IntPtr)" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.DelegateSerializationHolder">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Diagnostics.ConditionalAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_ConditionString" />
- <Member MemberType="Property" Name="ConditionString" />
- </Type>
- <Type Name="System.Diagnostics.DebuggableAttribute">
- <Member Name="#ctor(System.Boolean,System.Boolean)" />
- <Member Name="#ctor(System.Diagnostics.DebuggableAttribute+DebuggingModes)" />
- <Member Name="get_IsJITTrackingEnabled" />
- <Member Name="get_IsJITOptimizerDisabled" />
- <Member Name="get_DebuggingFlags" />
- <Member MemberType="Property" Name="IsJITTrackingEnabled" />
- <Member MemberType="Property" Name="IsJITOptimizerDisabled" />
- <Member MemberType="Property" Name="DebuggingFlags" />
- </Type>
- <Type Name="System.Diagnostics.DebuggableAttribute+DebuggingModes">
- <Member MemberType="Field" Name="Default" />
- <Member MemberType="Field" Name="DisableOptimizations" />
- <Member MemberType="Field" Name="EnableEditAndContinue" />
- <Member MemberType="Field" Name="IgnoreSymbolStoreSequencePoints" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Diagnostics.Debugger">
- <Member MemberType="Field" Name="DefaultCategory" />
- <Member Name="#ctor" />
- <Member Name="Break" />
- <Member Name="get_IsAttached" />
- <Member Name="Launch" />
- <Member Name="IsLogging" />
- <Member Name="Log(System.Int32,System.String,System.String)" />
- <Member MemberType="Property" Name="IsAttached" />
- <Member Status="ImplRoot" Name="BreakCanThrow" /> <!-- EE -->
- <Member Name="NotifyOfCrossThreadDependency" />
- </Type>
- <Type Name="System.Diagnostics.DebuggerBrowsableAttribute">
- <Member Name="#ctor(System.Diagnostics.DebuggerBrowsableState)" />
- <Member Name="get_State" />
- <Member MemberType="Property" Name="State" />
- </Type>
- <Type Name="System.Diagnostics.DebuggerHiddenAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Diagnostics.DebuggerNonUserCodeAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Diagnostics.DebuggerStepThroughAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Diagnostics.DebuggerDisplayAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Name" />
- <Member Name="get_Target" />
- <Member Name="get_TargetTypeName" />
- <Member Name="get_Type" />
- <Member Name="get_Value" />
- <Member Name="set_Name(System.String)" />
- <Member Name="set_Target(System.Type)" />
- <Member Name="set_TargetTypeName(System.String)" />
- <Member Name="set_Type(System.String)" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Target" />
- <Member MemberType="Property" Name="TargetTypeName" />
- <Member MemberType="Property" Name="Type" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Diagnostics.DebuggerTypeProxyAttribute">
- <Member Name="#ctor(System.Type)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="get_ProxyTypeName" />
- <Member Name="get_Target" />
- <Member Name="get_TargetTypeName" />
- <Member Name="set_Target(System.Type)" />
- <Member Name="set_TargetTypeName(System.String)" />
- <Member MemberType="Property" Name="ProxyTypeName" />
- <Member MemberType="Property" Name="Target" />
- <Member MemberType="Property" Name="TargetTypeName" />
- </Type>
- <Type Name="System.DivideByZeroException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.DllNotFoundException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Double">
- <Member MemberType="Field" Name="Epsilon" />
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member MemberType="Field" Name="NaN" />
- <Member MemberType="Field" Name="NegativeInfinity" />
- <Member MemberType="Field" Name="PositiveInfinity" />
- <Member Name="CompareTo(System.Double)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="Equals(System.Double)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="IsInfinity(System.Double)" />
- <Member Name="IsNaN(System.Double)" />
- <Member Name="IsNegativeInfinity(System.Double)" />
- <Member Name="IsPositiveInfinity(System.Double)" />
- <Member Name="op_Equality(System.Double,System.Double)" />
- <Member Name="op_GreaterThan(System.Double,System.Double)" />
- <Member Name="op_GreaterThanOrEqual(System.Double,System.Double)" />
- <Member Name="op_Inequality(System.Double,System.Double)" />
- <Member Name="op_LessThan(System.Double,System.Double)" />
- <Member Name="op_LessThanOrEqual(System.Double,System.Double)" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.Double@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Double@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.DuplicateWaitObjectException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.String)" />
- </Type>
- <Type Name="System.EntryPointNotFoundException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Enum">
- <Member Name="#ctor" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Format(System.Type,System.Object,System.String)" />
- <Member Name="GetHashCode" />
- <Member Name="GetName(System.Type,System.Object)" />
- <Member Name="GetNames(System.Type)" />
- <Member Name="GetTypeCode" />
- <Member Name="GetValues(System.Type)" />
- <Member Name="GetUnderlyingType(System.Type)" />
- <Member Name="HasFlag(System.Enum)" />
- <Member Name="IsDefined(System.Type,System.Object)" />
- <Member Name="Parse(System.Type,System.String)" />
- <Member Name="Parse(System.Type,System.String,System.Boolean)" />
- <Member Name="Parse&lt;TEnum&gt;(System.String)" />
- <Member Name="Parse&lt;TEnum&gt;(System.String,System.Boolean)" />
- <Member Name="ToObject(System.Type,System.Byte)" />
- <Member Name="ToObject(System.Type,System.Int16)" />
- <Member Name="ToObject(System.Type,System.Int32)" />
- <Member Name="ToObject(System.Type,System.Int64)" />
- <Member Name="ToObject(System.Type,System.Object)" />
- <Member Name="ToObject(System.Type,System.SByte)" />
- <Member Name="ToObject(System.Type,System.UInt16)" />
- <Member Name="ToObject(System.Type,System.UInt32)" />
- <Member Name="ToObject(System.Type,System.UInt64)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.Type,System.String,System.Object@)" />
- <Member Name="TryParse(System.Type,System.String,System.Boolean,System.Object@)" />
- <Member Name="TryParse&lt;TEnum&gt;(System.String,TEnum@)" />
- <Member Name="TryParse&lt;TEnum&gt;(System.String,System.Boolean,TEnum@)" />
- </Type>
- <Type Name="System.Environment">
- <Member Name="get_CurrentManagedThreadId" />
- <Member Name="get_MachineName" />
- <Member Name="get_OSVersion" />
- <Member Name="get_ProcessorCount" />
- <Member Name="get_StackTrace" />
- <Member Name="GetEnvironmentVariable(System.String)" />
- <Member Name="GetEnvironmentVariables" />
- <Member Name="GetCommandLineArgs" />
- <Member Name="SetEnvironmentVariable(System.String,System.String)" />
- <Member Name="ExpandEnvironmentVariables(System.String)" />
- <Member MemberType="Property" Name="OSVersion" />
- <Member MemberType="Property" Name="ProcessorCount" />
- <Member MemberType="Property" Name="CurrentManagedThreadId" />
- <Member MemberType="Property" Name="HasShutdownStarted" />
- <Member MemberType="Property" Name="NewLine" />
- <Member MemberType="Property" Name="StackTrace" />
- <Member MemberType="Property" Name="TickCount" />
- <Member MemberType="Property" Name="Version" />
- <Member MemberType="Property" Name="ExitCode" />
- <Member Status="ImplRoot" Name="GetResourceStringLocal(System.String)" />
- <Member Status="ImplRoot" Name="SetCommandLineArgs(System.String[])" />
- <Member Name="FailFast(System.String)" />
- <Member Name="FailFast(System.String,System.Exception)" />
- <Member Name="Exit(System.Int32)" />
- </Type>
- <Type Name="Internal.Runtime.Augments.EnvironmentAugments">
- <Member MemberType="Property" Name="CurrentManagedThreadId" />
- <Member MemberType="Property" Name="ExitCode" />
- <Member MemberType="Property" Name="HasShutdownStarted" />
- <Member MemberType="Property" Name="StackTrace" />
- <Member MemberType="Property" Name="TickCount" />
- <Member Name="get_CurrentManagedThreadId" />
- <Member Name="get_ExitCode" />
- <Member Name="set_ExitCode(System.Int32)" />
- <Member Name="get_HasShutdownStarted" />
- <Member Name="get_StackTrace" />
- <Member Name="get_TickCount" />
- <Member Name="Exit(System.Int32)" />
- <Member Name="FailFast(System.String,System.Exception)" />
- <Member Name="GetCommandLineArgs" />
- <Member Name="GetEnvironmentVariable(System.String)" />
- <Member Name="GetEnvironmentVariable(System.String,System.EnvironmentVariableTarget)" />
- <Member Name="GetEnvironmentVariables" />
- <Member Name="GetEnvironmentVariables(System.EnvironmentVariableTarget)" />
- <Member Name="SetEnvironmentVariable(System.String,System.String)" />
- <Member Name="SetEnvironmentVariable(System.String,System.String,System.EnvironmentVariableTarget)" />
- </Type>
- <Type Name="System.EventArgs">
- <Member MemberType="Field" Name="Empty" />
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.EventHandler">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,System.EventArgs,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object,System.EventArgs)" />
- </Type>
- <Type Name="System.EventHandler&lt;TEventArgs&gt;">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,TEventArgs,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object,TEventArgs)" />
- </Type>
- <Type Name="System.Exception">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_Data" />
- <Member Name="get_HelpLink" />
- <Member Name="get_HResult" />
- <Member Name="get_InnerException" />
- <Member Name="get_Message" />
- <Member Name="get_StackTrace" />
- <Member Name="get_Source" />
- <Member Name="get_TargetSite" />
- <Member Name="GetBaseException" />
- <Member Name="GetType" />
- <Member Name="set_HelpLink(System.String)" />
- <Member Name="set_HResult(System.Int32)" />
- <Member Name="set_Source(System.String)" />
- <Member Name="ToString" />
- <Member Name="add_SerializeObjectState(System.EventHandler&lt;System.Runtime.Serialization.SafeSerializationEventArgs&gt;)" />
- <Member Name="remove_SerializeObjectState(System.EventHandler&lt;System.Runtime.Serialization.SafeSerializationEventArgs&gt;)" />
- <Member MemberType="Property" Name="Data" />
- <Member MemberType="Property" Name="HelpLink" />
- <Member MemberType="Property" Name="HResult" />
- <Member MemberType="Property" Name="InnerException" />
- <Member MemberType="Property" Name="Message" />
- <Member MemberType="Property" Name="Source" />
- <Member MemberType="Property" Name="StackTrace" />
- <Member MemberType="Property" Name="TargetSite" />
- <Member MemberType="Event" Name="SerializeObjectState" />
- <Member Status="ImplRoot" Name="InternalToString" />
- <Member Status="ImplRoot" Name="InternalPreserveStackTrace" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" MemberType="Field" Name="_remoteStackIndex" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="_exceptionMethod" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="_exceptionMethodString" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="_source" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="_xptrs" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="_xcode" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="_HResult" /> <!-- EE -->
- <Member Status="ImplRoot" Name="AddExceptionDataForRestrictedErrorInfo(System.String,System.String,System.String,System.Object,System.Boolean)" Condition="FEATURE_COMINTEROP" />
- <Member Status="ImplRoot" Name="TryGetRestrictedLanguageErrorObject(System.Object@)" Condition="FEATURE_COMINTEROP" />
- </Type>
- <Type Name="System.ExecutionEngineException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.FieldAccessException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.FlagsAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.FormatException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.FormattableString">
- <Member Name="#ctor" />
- <Member Name="get_Format" />
- <Member MemberType="Property" Name="Format" />
- <Member Name="GetArguments" />
- <Member Name="get_ArgumentCount" />
- <Member MemberType="Property" Name="ArgumentCount" />
- <Member Name="GetArgument(System.Int32)" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="Invariant(System.FormattableString)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Func&lt;TResult&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke" />
- </Type>
- <Type Status="ApiRoot" Name="System.Func&lt;T,TResult&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Func&lt;T1,T2,TResult&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Func&lt;T1,T2,T3,TResult&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Func&lt;T1,T2,T3,T4,TResult&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Func&lt;T1,T2,T3,T4,T5,TResult&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,T5,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4,T5)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Func&lt;T1,T2,T3,T4,T5,T6,TResult&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,T5,T6,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4,T5,T6)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Func&lt;T1,T2,T3,T4,T5,T6,T7,TResult&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,T5,T6,T7,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4,T5,T6,T7)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Func&lt;T1,T2,T3,T4,T5,T6,T7,T8,TResult&gt;">
- <Member Status="ApiRoot" Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(T1,T2,T3,T4,T5,T6,T7,T8,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(T1,T2,T3,T4,T5,T6,T7,T8)" />
- </Type>
- <Type Name="System.GC">
- <Member Name="AddMemoryPressure(System.Int64)" />
- <Member Name="CancelFullGCNotification" />
- <Member Name="Collect" />
- <Member Name="Collect(System.Int32)" />
- <Member Name="Collect(System.Int32,System.GCCollectionMode)" />
- <Member Name="Collect(System.Int32,System.GCCollectionMode,System.Boolean)" />
- <Member Name="Collect(System.Int32,System.GCCollectionMode,System.Boolean,System.Boolean)" />
- <Member Name="CollectionCount(System.Int32)" />
- <Member Name="EndNoGCRegion" />
- <Member Name="GetAllocatedBytesForCurrentThread" />
- <Member Name="GetGeneration(System.Object)" />
- <Member Name="GetGeneration(System.WeakReference)" />
- <Member Name="get_MaxGeneration" />
- <Member Name="GetTotalMemory(System.Boolean)" />
- <Member Name="KeepAlive(System.Object)" />
- <Member Name="RegisterForFullGCNotification(System.Int32,System.Int32)" />
- <Member Name="RemoveMemoryPressure(System.Int64)" />
- <Member Name="ReRegisterForFinalize(System.Object)" />
- <Member Name="SuppressFinalize(System.Object)" />
- <Member Name="TryStartNoGCRegion(System.Int64)" />
- <Member Name="TryStartNoGCRegion(System.Int64,System.Boolean)" />
- <Member Name="TryStartNoGCRegion(System.Int64,System.Int64)" />
- <Member Name="TryStartNoGCRegion(System.Int64,System.Int64,System.Boolean)" />
- <Member Name="WaitForFullGCApproach" />
- <Member Name="WaitForFullGCApproach(System.Int32)" />
- <Member Name="WaitForFullGCComplete" />
- <Member Name="WaitForFullGCComplete(System.Int32)" />
- <Member Name="WaitForPendingFinalizers" />
- <Member MemberType="Property" Name="MaxGeneration" />
- </Type>
- <Type Name="System.GCNotificationStatus">
- <Member MemberType="Field" Name="Canceled" />
- <Member MemberType="Field" Name="Failed" />
- <Member MemberType="Field" Name="NotApplicable" />
- <Member MemberType="Field" Name="Succeeded" />
- <Member MemberType="Field" Name="Timeout" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Globalization.Calendar">
- <Member MemberType="Field" Name="CurrentEra" />
- <Member Name="#ctor" />
- <Member Name="AddDays(System.DateTime,System.Int32)" />
- <Member Name="AddHours(System.DateTime,System.Int32)" />
- <Member Name="AddMilliseconds(System.DateTime,System.Double)" />
- <Member Name="AddMinutes(System.DateTime,System.Int32)" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddSeconds(System.DateTime,System.Int32)" />
- <Member Name="AddWeeks(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="Clone" />
- <Member Name="get_Eras" />
- <Member Name="get_IsReadOnly" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetHour(System.DateTime)" />
- <Member Name="GetLeapMonth(System.Int32)" />
- <Member Name="GetMilliseconds(System.DateTime)" />
- <Member Name="GetMinute(System.DateTime)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetSecond(System.DateTime)" />
- <Member Name="GetWeekOfYear(System.DateTime,System.Globalization.CalendarWeekRule,System.DayOfWeek)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="ReadOnly(System.Globalization.Calendar)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="IsReadOnly" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- <Member Status="ImplRoot" MemberType="Field" Name="CAL_GREGORIAN" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- <Member Status="ImplRoot" MemberType="Field" Name="CAL_GREGORIAN_ARABIC" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- <Member Status="ImplRoot" MemberType="Field" Name="CAL_GREGORIAN_ME_FRENCH" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- <Member Status="ImplRoot" MemberType="Field" Name="CAL_GREGORIAN_US" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- <Member Status="ImplRoot" MemberType="Field" Name="CAL_GREGORIAN_XLIT_ENGLISH" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- <Member Status="ImplRoot" MemberType="Field" Name="CAL_GREGORIAN_XLIT_FRENCH" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- </Type>
- <Type Name="System.Globalization.CalendarAlgorithmType">
- <Member MemberType="Field" Name="LunarCalendar" />
- <Member MemberType="Field" Name="LunisolarCalendar" />
- <Member MemberType="Field" Name="SolarCalendar" />
- <Member MemberType="Field" Name="Unknown" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Globalization.CalendarWeekRule">
- <Member MemberType="Field" Name="FirstDay" />
- <Member MemberType="Field" Name="FirstFourDayWeek" />
- <Member MemberType="Field" Name="FirstFullWeek" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Globalization.CharUnicodeInfo">
- <Member Name="GetDecimalDigitValue(System.Char)" />
- <Member Name="GetDecimalDigitValue(System.String,System.Int32)" />
- <Member Name="GetDigitValue(System.Char)" />
- <Member Name="GetDigitValue(System.String,System.Int32)" />
- <Member Name="GetNumericValue(System.Char)" />
- <Member Name="GetNumericValue(System.String,System.Int32)" />
- <Member Name="GetUnicodeCategory(System.Char)" />
- <Member Name="GetUnicodeCategory(System.String,System.Int32)" />
- </Type>
- <Type Name="System.Globalization.ChineseLunisolarCalendar">
- <Member MemberType="Field" Name="ChineseEra" />
- <Member Name="#ctor" />
- <Member Name="get_DaysInYearBeforeMinSupportedYear" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="GetEra(System.DateTime)" />
- <Member MemberType="Property" Name="DaysInYearBeforeMinSupportedYear" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- </Type>
- <Type Name="System.Globalization.CompareInfo">
- <Member Name="Compare(System.String,System.Int32,System.Int32,System.String,System.Int32,System.Int32)" />
- <Member Name="Compare(System.String,System.Int32,System.Int32,System.String,System.Int32,System.Int32,System.Globalization.CompareOptions)" />
- <Member Name="Compare(System.String,System.Int32,System.String,System.Int32)" />
- <Member Name="Compare(System.String,System.Int32,System.String,System.Int32,System.Globalization.CompareOptions)" />
- <Member Name="Compare(System.String,System.String)" />
- <Member Name="Compare(System.String,System.String,System.Globalization.CompareOptions)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_LCID" />
- <Member Name="get_Name" />
- <Member Name="get_Version" />
- <Member Name="GetCompareInfo(System.Int32)" />
- <Member Name="GetCompareInfo(System.Int32,System.Reflection.Assembly)" />
- <Member Name="GetCompareInfo(System.String)" />
- <Member Name="GetCompareInfo(System.String,System.Reflection.Assembly)" />
- <Member Name="GetHashCode" />
- <Member Name="GetHashCode(System.String,System.Globalization.CompareOptions)" />
- <Member Name="GetSortKey(System.String)" />
- <Member Name="GetSortKey(System.String,System.Globalization.CompareOptions)" />
- <Member Name="IndexOf(System.String,System.Char)" />
- <Member Name="IndexOf(System.String,System.Char,System.Globalization.CompareOptions)" />
- <Member Name="IndexOf(System.String,System.Char,System.Int32)" />
- <Member Name="IndexOf(System.String,System.Char,System.Int32,System.Globalization.CompareOptions)" />
- <Member Name="IndexOf(System.String,System.Char,System.Int32,System.Int32)" />
- <Member Name="IndexOf(System.String,System.Char,System.Int32,System.Int32,System.Globalization.CompareOptions)" />
- <Member Name="IndexOf(System.String,System.String)" />
- <Member Name="IndexOf(System.String,System.String,System.Globalization.CompareOptions)" />
- <Member Name="IndexOf(System.String,System.String,System.Int32)" />
- <Member Name="IndexOf(System.String,System.String,System.Int32,System.Globalization.CompareOptions)" />
- <Member Name="IndexOf(System.String,System.String,System.Int32,System.Int32)" />
- <Member Name="IndexOf(System.String,System.String,System.Int32,System.Int32,System.Globalization.CompareOptions)" />
- <Member Name="IsPrefix(System.String,System.String)" />
- <Member Name="IsPrefix(System.String,System.String,System.Globalization.CompareOptions)" />
- <Member Name="IsSortable(System.Char)" />
- <Member Name="IsSortable(System.String)" />
- <Member Name="IsSuffix(System.String,System.String)" />
- <Member Name="IsSuffix(System.String,System.String,System.Globalization.CompareOptions)" />
- <Member Name="LastIndexOf(System.String,System.Char)" />
- <Member Name="LastIndexOf(System.String,System.Char,System.Globalization.CompareOptions)" />
- <Member Name="LastIndexOf(System.String,System.Char,System.Int32)" />
- <Member Name="LastIndexOf(System.String,System.Char,System.Int32,System.Globalization.CompareOptions)" />
- <Member Name="LastIndexOf(System.String,System.Char,System.Int32,System.Int32)" />
- <Member Name="LastIndexOf(System.String,System.Char,System.Int32,System.Int32,System.Globalization.CompareOptions)" />
- <Member Name="LastIndexOf(System.String,System.String)" />
- <Member Name="LastIndexOf(System.String,System.String,System.Globalization.CompareOptions)" />
- <Member Name="LastIndexOf(System.String,System.String,System.Int32)" />
- <Member Name="LastIndexOf(System.String,System.String,System.Int32,System.Globalization.CompareOptions)" />
- <Member Name="LastIndexOf(System.String,System.String,System.Int32,System.Int32)" />
- <Member Name="LastIndexOf(System.String,System.String,System.Int32,System.Int32,System.Globalization.CompareOptions)" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnDeserializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="System.Runtime.Serialization.IDeserializationCallback.OnDeserialization(System.Object)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="LCID" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Version" />
- </Type>
- <Type Name="System.Globalization.CompareOptions">
- <Member MemberType="Field" Name="IgnoreCase" />
- <Member MemberType="Field" Name="IgnoreKanaType" />
- <Member MemberType="Field" Name="IgnoreNonSpace" />
- <Member MemberType="Field" Name="IgnoreSymbols" />
- <Member MemberType="Field" Name="IgnoreWidth" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="Ordinal" />
- <Member MemberType="Field" Name="OrdinalIgnoreCase" />
- <Member MemberType="Field" Name="StringSort" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Globalization.CultureInfo">
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Boolean)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Boolean)" />
- <Member Name="ClearCachedData" />
- <Member Name="Clone" />
- <Member Name="CreateSpecificCulture(System.String)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Calendar" />
- <Member Name="get_CompareInfo" />
- <Member Name="get_CurrentCulture" />
- <Member Name="get_CurrentUICulture" />
- <Member Name="get_CultureTypes" />
- <Member Name="get_DefaultThreadCurrentCulture" />
- <Member Name="get_DefaultThreadCurrentUICulture" />
- <Member Name="get_DateTimeFormat" />
- <Member Name="get_DisplayName" />
- <Member Name="get_EnglishName" />
- <Member Name="get_IetfLanguageTag" />
- <Member Name="get_InstalledUICulture" />
- <Member Name="get_InvariantCulture" />
- <Member Name="get_IsNeutralCulture" />
- <Member Name="get_IsReadOnly" />
- <Member Name="get_KeyboardLayoutId" />
- <Member Name="get_LCID" />
- <Member Name="get_Name" />
- <Member Name="get_NativeName" />
- <Member Name="get_NumberFormat" />
- <Member Name="get_OptionalCalendars" />
- <Member Name="get_Parent" />
- <Member Name="get_TextInfo" />
- <Member Name="get_ThreeLetterISOLanguageName" />
- <Member Name="get_ThreeLetterWindowsLanguageName" />
- <Member Name="get_TwoLetterISOLanguageName" />
- <Member Name="get_UseUserOverride" />
- <Member Name="GetConsoleFallbackUICulture" />
- <Member Name="GetCultureInfo(System.Int32)" />
- <Member Name="GetCultureInfo(System.String)" />
- <Member Name="GetCultureInfo(System.String,System.String)" />
- <Member Name="GetCultureInfoByIetfLanguageTag(System.String)" />
- <Member Name="GetCultures(System.Globalization.CultureTypes)" />
- <Member Name="GetFormat(System.Type)" />
- <Member Name="GetHashCode" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="ReadOnly(System.Globalization.CultureInfo)" />
- <Member Name="set_CurrentCulture(System.Globalization.CultureInfo)" />
- <Member Name="set_CurrentUICulture(System.Globalization.CultureInfo)" />
- <Member Name="set_DateTimeFormat(System.Globalization.DateTimeFormatInfo)" />
- <Member Name="set_DefaultThreadCurrentCulture(System.Globalization.CultureInfo)" />
- <Member Name="set_DefaultThreadCurrentUICulture(System.Globalization.CultureInfo)" />
- <Member Name="set_NumberFormat(System.Globalization.NumberFormatInfo)" />
- <Member Name="ToString" />
- <Member Status="ImplRoot" Name="get_SortName" />
- <Member MemberType="Property" Name="Calendar" />
- <Member MemberType="Property" Name="CompareInfo" />
- <Member MemberType="Property" Name="CurrentCulture" />
- <Member MemberType="Property" Name="CurrentUICulture" />
- <Member MemberType="Property" Name="CultureTypes" />
- <Member MemberType="Property" Name="DateTimeFormat" />
- <Member MemberType="Property" Name="DefaultThreadCurrentCulture" />
- <Member MemberType="Property" Name="DefaultThreadCurrentUICulture"/>
- <Member MemberType="Property" Name="DisplayName" />
- <Member MemberType="Property" Name="EnglishName" />
- <Member MemberType="Property" Name="IetfLanguageTag" />
- <Member MemberType="Property" Name="InstalledUICulture" />
- <Member MemberType="Property" Name="InvariantCulture" />
- <Member MemberType="Property" Name="IsNeutralCulture" />
- <Member MemberType="Property" Name="IsReadOnly" />
- <Member MemberType="Property" Name="KeyboardLayoutId" />
- <Member MemberType="Property" Name="LCID" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="NativeName" />
- <Member MemberType="Property" Name="NumberFormat" />
- <Member MemberType="Property" Name="OptionalCalendars" />
- <Member MemberType="Property" Name="Parent" />
- <Member MemberType="Property" Name="TextInfo" />
- <Member MemberType="Property" Name="ThreeLetterISOLanguageName" />
- <Member MemberType="Property" Name="ThreeLetterWindowsLanguageName" />
- <Member MemberType="Property" Name="TwoLetterISOLanguageName" />
- <Member MemberType="Property" Name="UseUserOverride" />
- <Member Status="ImplRoot" MemberType="Property" Name="SortName" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_parent" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_useUserOverride" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- </Type>
- <Type Name="System.Globalization.CultureNotFoundException">
- <Member Name="#ctor"/>
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Int32,System.Exception)" />
- <Member Name="#ctor(System.String,System.Int32,System.String)" />
- <Member Name="#ctor(System.String,System.String,System.String)" />
- <Member Name="#ctor(System.String,System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_InvalidCultureId" />
- <Member Name="get_InvalidCultureName" />
- <Member Name="get_Message" />
- <Member Name="GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member MemberType="Property" Name="InvalidCultureId" />
- <Member MemberType="Property" Name="InvalidCultureName" />
- <Member MemberType="Property" Name="Message" />
- </Type>
- <Type Name="System.Globalization.CultureTypes">
- <Member MemberType="Field" Name="AllCultures" />
- <Member MemberType="Field" Name="FrameworkCultures" />
- <Member MemberType="Field" Name="InstalledWin32Cultures" />
- <Member MemberType="Field" Name="NeutralCultures" />
- <Member MemberType="Field" Name="ReplacementCultures" />
- <Member MemberType="Field" Name="SpecificCultures" />
- <Member MemberType="Field" Name="UserCustomCulture" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="WindowsOnlyCultures" />
- </Type>
- <Type Name="System.Globalization.DateTimeFormatInfo">
- <Member Name="#ctor" />
- <Member Name="Clone" />
- <Member Name="get_AbbreviatedDayNames" />
- <Member Name="get_AbbreviatedMonthGenitiveNames" />
- <Member Name="get_AbbreviatedMonthNames" />
- <Member Name="get_AMDesignator" />
- <Member Name="get_Calendar" />
- <Member Name="get_CalendarWeekRule" />
- <Member Name="get_CurrentInfo" />
- <Member Name="get_DateSeparator" />
- <Member Name="get_DayNames" />
- <Member Name="get_FirstDayOfWeek" />
- <Member Name="get_FullDateTimePattern" />
- <Member Name="get_InvariantInfo" />
- <Member Name="get_IsReadOnly" />
- <Member Name="get_LongDatePattern" />
- <Member Name="get_LongTimePattern" />
- <Member Name="get_MonthDayPattern" />
- <Member Name="get_MonthGenitiveNames" />
- <Member Name="get_MonthNames" />
- <Member Name="get_NativeCalendarName" />
- <Member Name="get_PMDesignator" />
- <Member Name="get_RFC1123Pattern" />
- <Member Name="get_ShortDatePattern" />
- <Member Name="get_ShortestDayNames" />
- <Member Name="get_ShortTimePattern" />
- <Member Name="get_SortableDateTimePattern" />
- <Member Name="get_TimeSeparator" />
- <Member Name="get_UniversalSortableDateTimePattern" />
- <Member Name="get_YearMonthPattern" />
- <Member Name="GetAbbreviatedDayName(System.DayOfWeek)" />
- <Member Name="GetAbbreviatedEraName(System.Int32)" />
- <Member Name="GetAbbreviatedMonthName(System.Int32)" />
- <Member Name="GetAllDateTimePatterns" />
- <Member Name="GetAllDateTimePatterns(System.Char)" />
- <Member Name="GetDayName(System.DayOfWeek)" />
- <Member Name="GetEra(System.String)" />
- <Member Name="GetEraName(System.Int32)" />
- <Member Name="GetFormat(System.Type)" />
- <Member Name="GetInstance(System.IFormatProvider)" />
- <Member Name="GetMonthName(System.Int32)" />
- <Member Name="GetShortestDayName(System.DayOfWeek)" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="ReadOnly(System.Globalization.DateTimeFormatInfo)" />
- <Member Name="set_AbbreviatedDayNames(System.String[])" />
- <Member Name="set_AbbreviatedMonthGenitiveNames(System.String[])" />
- <Member Name="set_AbbreviatedMonthNames(System.String[])" />
- <Member Name="set_AMDesignator(System.String)" />
- <Member Name="set_Calendar(System.Globalization.Calendar)" />
- <Member Name="set_CalendarWeekRule(System.Globalization.CalendarWeekRule)" />
- <Member Name="set_DateSeparator(System.String)" />
- <Member Name="set_DayNames(System.String[])" />
- <Member Name="set_FirstDayOfWeek(System.DayOfWeek)" />
- <Member Name="set_FullDateTimePattern(System.String)" />
- <Member Name="set_LongDatePattern(System.String)" />
- <Member Name="set_LongTimePattern(System.String)" />
- <Member Name="set_MonthDayPattern(System.String)" />
- <Member Name="set_MonthGenitiveNames(System.String[])" />
- <Member Name="set_MonthNames(System.String[])" />
- <Member Name="set_PMDesignator(System.String)" />
- <Member Name="set_ShortDatePattern(System.String)" />
- <Member Name="set_ShortestDayNames(System.String[])" />
- <Member Name="set_ShortTimePattern(System.String)" />
- <Member Name="set_TimeSeparator(System.String)" />
- <Member Name="set_YearMonthPattern(System.String)" />
- <Member Name="SetAllDateTimePatterns(System.String[],System.Char)" />
- <Member MemberType="Property" Name="AbbreviatedDayNames" />
- <Member MemberType="Property" Name="AbbreviatedMonthGenitiveNames" />
- <Member MemberType="Property" Name="AbbreviatedMonthNames" />
- <Member MemberType="Property" Name="AMDesignator" />
- <Member MemberType="Property" Name="Calendar" />
- <Member MemberType="Property" Name="CalendarWeekRule" />
- <Member MemberType="Property" Name="CurrentInfo" />
- <Member MemberType="Property" Name="DateSeparator" />
- <Member MemberType="Property" Name="DayNames" />
- <Member MemberType="Property" Name="FirstDayOfWeek" />
- <Member MemberType="Property" Name="FullDateTimePattern" />
- <Member MemberType="Property" Name="InvariantInfo" />
- <Member MemberType="Property" Name="IsReadOnly" />
- <Member MemberType="Property" Name="LongDatePattern" />
- <Member MemberType="Property" Name="LongTimePattern" />
- <Member MemberType="Property" Name="MonthDayPattern" />
- <Member MemberType="Property" Name="MonthGenitiveNames" />
- <Member MemberType="Property" Name="MonthNames" />
- <Member MemberType="Property" Name="NativeCalendarName" />
- <Member MemberType="Property" Name="PMDesignator" />
- <Member MemberType="Property" Name="RFC1123Pattern" />
- <Member MemberType="Property" Name="ShortDatePattern" />
- <Member MemberType="Property" Name="ShortestDayNames" />
- <Member MemberType="Property" Name="ShortTimePattern" />
- <Member MemberType="Property" Name="SortableDateTimePattern" />
- <Member MemberType="Property" Name="TimeSeparator" />
- <Member MemberType="Property" Name="UniversalSortableDateTimePattern" />
- <Member MemberType="Property" Name="YearMonthPattern" />
- </Type>
- <Type Name="System.Globalization.DateTimeStyles">
- <Member MemberType="Field" Name="AdjustToUniversal" />
- <Member MemberType="Field" Name="AllowInnerWhite" />
- <Member MemberType="Field" Name="AllowLeadingWhite" />
- <Member MemberType="Field" Name="AllowTrailingWhite" />
- <Member MemberType="Field" Name="AllowWhiteSpaces" />
- <Member MemberType="Field" Name="AssumeLocal" />
- <Member MemberType="Field" Name="AssumeUniversal" />
- <Member MemberType="Field" Name="NoCurrentDateDefault" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="RoundtripKind" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Globalization.DaylightTime">
- <Member Name="#ctor(System.DateTime,System.DateTime,System.TimeSpan)" />
- <Member Name="get_Delta" />
- <Member Name="get_End" />
- <Member Name="get_Start" />
- <Member MemberType="Property" Name="Delta" />
- <Member MemberType="Property" Name="End" />
- <Member MemberType="Property" Name="Start" />
- </Type>
- <Type Name="System.Globalization.DigitShapes">
- <Member MemberType="Field" Name="Context" />
- <Member MemberType="Field" Name="NativeNational" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Globalization.PersianCalendar">
- <Member MemberType="Field" Name="PersianEra" />
- <Member Name="#ctor" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_AlgorithmType" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetLeapMonth(System.Int32,System.Int32)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="AlgorithmType" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
-
- <Type Name="System.Globalization.TimeSpanStyles">
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="AssumeNegative" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Globalization.EastAsianLunisolarCalendar">
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_AlgorithmType" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetCelestialStem(System.Int32)" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetLeapMonth(System.Int32,System.Int32)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetSexagenaryYear(System.DateTime)" />
- <Member Name="GetTerrestrialBranch(System.Int32)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="AlgorithmType" Condition="not FEATURE_COREFX_GLOBALIZATION"/>
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.GregorianCalendar">
- <Member MemberType="Field" Name="ADEra" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Globalization.GregorianCalendarTypes)" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_CalendarType" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="set_CalendarType(System.Globalization.GregorianCalendarTypes)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="CalendarType" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.GregorianCalendarTypes">
- <Member MemberType="Field" Name="Arabic" />
- <Member MemberType="Field" Name="Localized" />
- <Member MemberType="Field" Name="MiddleEastFrench" />
- <Member MemberType="Field" Name="TransliteratedEnglish" />
- <Member MemberType="Field" Name="TransliteratedFrench" />
- <Member MemberType="Field" Name="USEnglish" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Globalization.JapaneseCalendar">
- <Member Name="#ctor" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetWeekOfYear(System.DateTime,System.Globalization.CalendarWeekRule,System.DayOfWeek)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.JapaneseLunisolarCalendar">
- <Member MemberType="Field" Name="JapaneseEra" />
- <Member Name="#ctor" />
- <Member Name="get_DaysInYearBeforeMinSupportedYear" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="GetEra(System.DateTime)" />
- <Member MemberType="Property" Name="DaysInYearBeforeMinSupportedYear" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- </Type>
- <Type Name="System.Globalization.JulianCalendar">
- <Member MemberType="Field" Name="JulianEra" />
- <Member Name="#ctor" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_AlgorithmType" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetLeapMonth(System.Int32,System.Int32)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="AlgorithmType" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.HebrewCalendar">
- <Member MemberType="Field" Name="HebrewEra" />
- <Member Name="#ctor" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetLeapMonth(System.Int32,System.Int32)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.HijriCalendar">
- <Member MemberType="Field" Name="HijriEra" />
- <Member Name="#ctor" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_Eras" />
- <Member Name="get_HijriAdjustment" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetLeapMonth(System.Int32,System.Int32)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_HijriAdjustment(System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="HijriAdjustment" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.IdnMapping">
- <Member Name="#ctor" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_AllowUnassigned" />
- <Member Name="get_UseStd3AsciiRules" />
- <Member Name="GetAscii(System.String)" />
- <Member Name="GetAscii(System.String,System.Int32)" />
- <Member Name="GetAscii(System.String,System.Int32,System.Int32)" />
- <Member Name="GetHashCode" />
- <Member Name="GetUnicode(System.String)" />
- <Member Name="GetUnicode(System.String,System.Int32)" />
- <Member Name="GetUnicode(System.String,System.Int32,System.Int32)" />
- <Member Name="set_AllowUnassigned(System.Boolean)" />
- <Member Name="set_UseStd3AsciiRules(System.Boolean)" />
- <Member MemberType="Property" Name="AllowUnassigned" />
- <Member MemberType="Property" Name="UseStd3AsciiRules" />
- </Type>
- <Type Name="System.Globalization.KoreanCalendar">
- <Member MemberType="Field" Name="KoreanEra" />
- <Member Name="#ctor" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetWeekOfYear(System.DateTime,System.Globalization.CalendarWeekRule,System.DayOfWeek)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.KoreanLunisolarCalendar">
- <Member MemberType="Field" Name="GregorianEra" />
- <Member Name="#ctor" />
- <Member Name="get_DaysInYearBeforeMinSupportedYear" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="GetEra(System.DateTime)" />
- <Member MemberType="Property" Name="DaysInYearBeforeMinSupportedYear" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- </Type>
- <Type Name="System.Globalization.UmAlQuraCalendar">
- <Member MemberType="Field" Name="UmAlQuraEra" />
- <Member Name="#ctor" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetLeapMonth(System.Int32,System.Int32)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.NumberFormatInfo">
- <Member Name="#ctor" />
- <Member Name="Clone" />
- <Member Name="get_CurrencyDecimalDigits" />
- <Member Name="get_CurrencyDecimalSeparator" />
- <Member Name="get_CurrencyGroupSeparator" />
- <Member Name="get_CurrencyGroupSizes" />
- <Member Name="get_CurrencyNegativePattern" />
- <Member Name="get_CurrencyPositivePattern" />
- <Member Name="get_CurrencySymbol" />
- <Member Name="get_CurrentInfo" />
- <Member Name="get_DigitSubstitution" />
- <Member Name="get_InvariantInfo" />
- <Member Name="get_IsReadOnly" />
- <Member Name="get_NaNSymbol" />
- <Member Name="get_NativeDigits" />
- <Member Name="get_NegativeInfinitySymbol" />
- <Member Name="get_NegativeSign" />
- <Member Name="get_NumberDecimalDigits" />
- <Member Name="get_NumberDecimalSeparator" />
- <Member Name="get_NumberGroupSeparator" />
- <Member Name="get_NumberGroupSizes" />
- <Member Name="get_NumberNegativePattern" />
- <Member Name="get_PercentDecimalDigits" />
- <Member Name="get_PercentDecimalSeparator" />
- <Member Name="get_PercentGroupSeparator" />
- <Member Name="get_PercentGroupSizes" />
- <Member Name="get_PercentNegativePattern" />
- <Member Name="get_PercentPositivePattern" />
- <Member Name="get_PercentSymbol" />
- <Member Name="get_PerMilleSymbol" />
- <Member Name="get_PositiveInfinitySymbol" />
- <Member Name="get_PositiveSign" />
- <Member Name="GetFormat(System.Type)" />
- <Member Name="GetInstance(System.IFormatProvider)" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnDeserializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="ReadOnly(System.Globalization.NumberFormatInfo)" />
- <Member Name="set_CurrencyDecimalDigits(System.Int32)" />
- <Member Name="set_CurrencyDecimalSeparator(System.String)" />
- <Member Name="set_CurrencyGroupSeparator(System.String)" />
- <Member Name="set_CurrencyGroupSizes(System.Int32[])" />
- <Member Name="set_CurrencyNegativePattern(System.Int32)" />
- <Member Name="set_CurrencyPositivePattern(System.Int32)" />
- <Member Name="set_CurrencySymbol(System.String)" />
- <Member Name="set_DigitSubstitution(System.Globalization.DigitShapes)" />
- <Member Name="set_NaNSymbol(System.String)" />
- <Member Name="set_NativeDigits(System.String[])" />
- <Member Name="set_NegativeInfinitySymbol(System.String)" />
- <Member Name="set_NegativeSign(System.String)" />
- <Member Name="set_NumberDecimalDigits(System.Int32)" />
- <Member Name="set_NumberDecimalSeparator(System.String)" />
- <Member Name="set_NumberGroupSeparator(System.String)" />
- <Member Name="set_NumberGroupSizes(System.Int32[])" />
- <Member Name="set_NumberNegativePattern(System.Int32)" />
- <Member Name="set_PercentDecimalDigits(System.Int32)" />
- <Member Name="set_PercentDecimalSeparator(System.String)" />
- <Member Name="set_PercentGroupSeparator(System.String)" />
- <Member Name="set_PercentGroupSizes(System.Int32[])" />
- <Member Name="set_PercentNegativePattern(System.Int32)" />
- <Member Name="set_PercentPositivePattern(System.Int32)" />
- <Member Name="set_PercentSymbol(System.String)" />
- <Member Name="set_PerMilleSymbol(System.String)" />
- <Member Name="set_PositiveInfinitySymbol(System.String)" />
- <Member Name="set_PositiveSign(System.String)" />
- <Member MemberType="Property" Name="CurrencyDecimalDigits" />
- <Member MemberType="Property" Name="CurrencyDecimalSeparator" />
- <Member MemberType="Property" Name="CurrencyGroupSeparator" />
- <Member MemberType="Property" Name="CurrencyGroupSizes" />
- <Member MemberType="Property" Name="CurrencyNegativePattern" />
- <Member MemberType="Property" Name="CurrencyPositivePattern" />
- <Member MemberType="Property" Name="CurrencySymbol" />
- <Member MemberType="Property" Name="CurrentInfo" />
- <Member MemberType="Property" Name="DigitSubstitution" />
- <Member MemberType="Property" Name="InvariantInfo" />
- <Member MemberType="Property" Name="IsReadOnly" />
- <Member MemberType="Property" Name="NaNSymbol" />
- <Member MemberType="Property" Name="NativeDigits" />
- <Member MemberType="Property" Name="NegativeInfinitySymbol" />
- <Member MemberType="Property" Name="NegativeSign" />
- <Member MemberType="Property" Name="NumberDecimalDigits" />
- <Member MemberType="Property" Name="NumberDecimalSeparator" />
- <Member MemberType="Property" Name="NumberGroupSeparator" />
- <Member MemberType="Property" Name="NumberGroupSizes" />
- <Member MemberType="Property" Name="NumberNegativePattern" />
- <Member MemberType="Property" Name="PercentDecimalDigits" />
- <Member MemberType="Property" Name="PercentDecimalSeparator" />
- <Member MemberType="Property" Name="PercentGroupSeparator" />
- <Member MemberType="Property" Name="PercentGroupSizes" />
- <Member MemberType="Property" Name="PercentNegativePattern" />
- <Member MemberType="Property" Name="PercentPositivePattern" />
- <Member MemberType="Property" Name="PercentSymbol" />
- <Member MemberType="Property" Name="PerMilleSymbol" />
- <Member MemberType="Property" Name="PositiveInfinitySymbol" />
- <Member MemberType="Property" Name="PositiveSign" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_dataItem" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_useUserOverride" Condition="not FEATURE_COREFX_GLOBALIZATION" />
- </Type>
- <Type Name="System.Globalization.NumberStyles">
- <Member MemberType="Field" Name="AllowCurrencySymbol" />
- <Member MemberType="Field" Name="AllowDecimalPoint" />
- <Member MemberType="Field" Name="AllowExponent" />
- <Member MemberType="Field" Name="AllowHexSpecifier" />
- <Member MemberType="Field" Name="AllowLeadingSign" />
- <Member MemberType="Field" Name="AllowLeadingWhite" />
- <Member MemberType="Field" Name="AllowParentheses" />
- <Member MemberType="Field" Name="AllowThousands" />
- <Member MemberType="Field" Name="AllowTrailingSign" />
- <Member MemberType="Field" Name="AllowTrailingWhite" />
- <Member MemberType="Field" Name="Any" />
- <Member MemberType="Field" Name="Currency" />
- <Member MemberType="Field" Name="Float" />
- <Member MemberType="Field" Name="HexNumber" />
- <Member MemberType="Field" Name="Integer" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="Number" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Globalization.RegionInfo">
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_CurrencySymbol" />
- <Member Name="get_CurrencyEnglishName" />
- <Member Name="get_CurrencyNativeName" />
- <Member Name="get_CurrentRegion" />
- <Member Name="get_DisplayName" />
- <Member Name="get_EnglishName" />
- <Member Name="get_GeoId" />
- <Member Name="get_IsMetric" />
- <Member Name="get_ISOCurrencySymbol" />
- <Member Name="get_Name" />
- <Member Name="get_NativeName" />
- <Member Name="get_ThreeLetterISORegionName" />
- <Member Name="get_ThreeLetterWindowsRegionName" />
- <Member Name="get_TwoLetterISORegionName" />
- <Member Name="GetHashCode" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="CurrencySymbol" />
- <Member MemberType="Property" Name="CurrencyEnglishName" />
- <Member MemberType="Property" Name="CurrencyNativeName" />
- <Member MemberType="Property" Name="CurrentRegion" />
- <Member MemberType="Property" Name="DisplayName" />
- <Member MemberType="Property" Name="EnglishName" />
- <Member MemberType="Property" Name="GeoId" />
- <Member MemberType="Property" Name="IsMetric" />
- <Member MemberType="Property" Name="ISOCurrencySymbol" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="NativeName" />
- <Member MemberType="Property" Name="ThreeLetterISORegionName" />
- <Member MemberType="Property" Name="ThreeLetterWindowsRegionName" />
- <Member MemberType="Property" Name="TwoLetterISORegionName" />
- </Type>
- <Type Name="System.Globalization.SortKey">
- <Member Name="Compare(System.Globalization.SortKey,System.Globalization.SortKey)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_KeyData" />
- <Member Name="get_OriginalString" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="KeyData" />
- <Member MemberType="Property" Name="OriginalString" />
- </Type>
- <Type Name="System.Globalization.SortVersion">
- <Member Name="#ctor(System.Int32,System.Guid)" />
- <Member Name="Equals(System.Globalization.SortVersion)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_FullVersion" />
- <Member Name="get_SortId" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Globalization.SortVersion,System.Globalization.SortVersion)" />
- <Member Name="op_Inequality(System.Globalization.SortVersion,System.Globalization.SortVersion)" />
- <Member MemberType="Property" Name="FullVersion" />
- <Member MemberType="Property" Name="SortId" />
- </Type>
- <Type Name="System.Globalization.StringInfo">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_LengthInTextElements" />
- <Member Name="get_String" />
- <Member Name="GetHashCode" />
- <Member Name="GetNextTextElement(System.String)" />
- <Member Name="GetNextTextElement(System.String,System.Int32)" />
- <Member Name="GetTextElementEnumerator(System.String)" />
- <Member Name="GetTextElementEnumerator(System.String,System.Int32)" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnDeserializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="ParseCombiningCharacters(System.String)" />
- <Member Name="set_String(System.String)" />
- <Member Name="SubstringByTextElements(System.Int32)" />
- <Member Name="SubstringByTextElements(System.Int32,System.Int32)" />
- <Member MemberType="Property" Name="LengthInTextElements" />
- <Member MemberType="Property" Name="String" />
- </Type>
- <Type Name="System.Globalization.TaiwanCalendar">
- <Member Name="#ctor" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetWeekOfYear(System.DateTime,System.Globalization.CalendarWeekRule,System.DayOfWeek)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.TaiwanLunisolarCalendar">
- <Member Name="#ctor" />
- <Member Name="get_DaysInYearBeforeMinSupportedYear" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="GetEra(System.DateTime)" />
- <Member MemberType="Property" Name="DaysInYearBeforeMinSupportedYear" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- </Type>
- <Type Name="System.Globalization.TextElementEnumerator">
- <Member Name="get_Current" />
- <Member Name="get_ElementIndex" />
- <Member Name="GetTextElement" />
- <Member Name="MoveNext" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnDeserializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Reset" />
- <Member MemberType="Property" Name="Current" />
- <Member MemberType="Property" Name="ElementIndex" />
- </Type>
- <Type Name="System.Globalization.TextInfo">
- <Member Name="Clone" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_ANSICodePage" />
- <Member Name="get_CultureName" />
- <Member Name="get_EBCDICCodePage" />
- <Member Name="get_IsReadOnly" />
- <Member Name="get_IsRightToLeft" />
- <Member Name="get_LCID" />
- <Member Name="get_ListSeparator" />
- <Member Name="get_MacCodePage" />
- <Member Name="get_OEMCodePage" />
- <Member Name="GetHashCode" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnDeserializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="System.Runtime.Serialization.IDeserializationCallback.OnDeserialization(System.Object)" />
- <Member Name="ReadOnly(System.Globalization.TextInfo)" />
- <Member Name="set_ListSeparator(System.String)" />
- <Member Name="ToLower(System.Char)" />
- <Member Name="ToLower(System.String)" />
- <Member Name="ToString" />
- <Member Name="ToTitleCase(System.String)" />
- <Member Name="ToUpper(System.Char)" />
- <Member Name="ToUpper(System.String)" />
- <Member MemberType="Property" Name="ANSICodePage" />
- <Member MemberType="Property" Name="CultureName" />
- <Member MemberType="Property" Name="EBCDICCodePage" />
- <Member MemberType="Property" Name="IsReadOnly" />
- <Member MemberType="Property" Name="IsRightToLeft" />
- <Member MemberType="Property" Name="LCID" />
- <Member MemberType="Property" Name="ListSeparator" />
- <Member MemberType="Property" Name="MacCodePage" />
- <Member MemberType="Property" Name="OEMCodePage" />
- </Type>
- <Type Name="System.Globalization.ThaiBuddhistCalendar">
- <Member MemberType="Field" Name="ThaiBuddhistEra" />
- <Member Name="#ctor" />
- <Member Name="AddMonths(System.DateTime,System.Int32)" />
- <Member Name="AddYears(System.DateTime,System.Int32)" />
- <Member Name="get_Eras" />
- <Member Name="get_MaxSupportedDateTime" />
- <Member Name="get_MinSupportedDateTime" />
- <Member Name="get_TwoDigitYearMax" />
- <Member Name="GetDayOfMonth(System.DateTime)" />
- <Member Name="GetDayOfWeek(System.DateTime)" />
- <Member Name="GetDayOfYear(System.DateTime)" />
- <Member Name="GetDaysInMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="GetDaysInYear(System.Int32,System.Int32)" />
- <Member Name="GetEra(System.DateTime)" />
- <Member Name="GetMonth(System.DateTime)" />
- <Member Name="GetMonthsInYear(System.Int32,System.Int32)" />
- <Member Name="GetWeekOfYear(System.DateTime,System.Globalization.CalendarWeekRule,System.DayOfWeek)" />
- <Member Name="GetYear(System.DateTime)" />
- <Member Name="IsLeapDay(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapMonth(System.Int32,System.Int32,System.Int32)" />
- <Member Name="IsLeapYear(System.Int32,System.Int32)" />
- <Member Name="set_TwoDigitYearMax(System.Int32)" />
- <Member Name="ToDateTime(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="ToFourDigitYear(System.Int32)" />
- <Member MemberType="Property" Name="Eras" />
- <Member MemberType="Property" Name="MaxSupportedDateTime" />
- <Member MemberType="Property" Name="MinSupportedDateTime" />
- <Member MemberType="Property" Name="TwoDigitYearMax" />
- </Type>
- <Type Name="System.Globalization.UnicodeCategory">
- <Member MemberType="Field" Name="ClosePunctuation" />
- <Member MemberType="Field" Name="ConnectorPunctuation" />
- <Member MemberType="Field" Name="Control" />
- <Member MemberType="Field" Name="CurrencySymbol" />
- <Member MemberType="Field" Name="DashPunctuation" />
- <Member MemberType="Field" Name="DecimalDigitNumber" />
- <Member MemberType="Field" Name="EnclosingMark" />
- <Member MemberType="Field" Name="FinalQuotePunctuation" />
- <Member MemberType="Field" Name="Format" />
- <Member MemberType="Field" Name="InitialQuotePunctuation" />
- <Member MemberType="Field" Name="LetterNumber" />
- <Member MemberType="Field" Name="LineSeparator" />
- <Member MemberType="Field" Name="LowercaseLetter" />
- <Member MemberType="Field" Name="MathSymbol" />
- <Member MemberType="Field" Name="ModifierLetter" />
- <Member MemberType="Field" Name="ModifierSymbol" />
- <Member MemberType="Field" Name="NonSpacingMark" />
- <Member MemberType="Field" Name="OpenPunctuation" />
- <Member MemberType="Field" Name="OtherLetter" />
- <Member MemberType="Field" Name="OtherNotAssigned" />
- <Member MemberType="Field" Name="OtherNumber" />
- <Member MemberType="Field" Name="OtherPunctuation" />
- <Member MemberType="Field" Name="OtherSymbol" />
- <Member MemberType="Field" Name="ParagraphSeparator" />
- <Member MemberType="Field" Name="PrivateUse" />
- <Member MemberType="Field" Name="SpaceSeparator" />
- <Member MemberType="Field" Name="SpacingCombiningMark" />
- <Member MemberType="Field" Name="Surrogate" />
- <Member MemberType="Field" Name="TitlecaseLetter" />
- <Member MemberType="Field" Name="UppercaseLetter" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Guid">
- <Member MemberType="Field" Name="Empty" />
- <Member Name="#ctor(System.Byte[])" />
- <Member Name="#ctor(System.UInt32,System.UInt16,System.UInt16,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte)" />
- <Member Name="#ctor(System.Int32,System.Int16,System.Int16,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte)" />
- <Member Name="#ctor(System.Int32,System.Int16,System.Int16,System.Byte[])" />
- <Member Name="#ctor(System.String)" />
- <Member Name="CompareTo(System.Guid)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="Equals(System.Guid)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="NewGuid" />
- <Member Name="op_Equality(System.Guid,System.Guid)" />
- <Member Name="op_Inequality(System.Guid,System.Guid)" />
- <Member Name="Parse(System.String)" />
- <Member Name="ParseExact(System.String,System.String)" />
- <Member Name="ToByteArray" />
- <Member Name="ToString" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.Guid@)" />
- <Member Name="TryParseExact(System.String,System.String,System.Guid@)" />
- </Type>
- <Type Name="System.IAsyncResult">
- <Member Name="get_AsyncState" />
- <Member Name="get_AsyncWaitHandle" />
- <Member Name="get_CompletedSynchronously" />
- <Member Name="get_IsCompleted" />
- <Member MemberType="Property" Name="AsyncState" />
- <Member MemberType="Property" Name="AsyncWaitHandle" />
- <Member MemberType="Property" Name="CompletedSynchronously" />
- <Member MemberType="Property" Name="IsCompleted" />
- </Type>
- <Type Name="System.ICloneable">
- <Member Name="Clone" />
- </Type>
- <Type Name="System.IComparable">
- <Member Name="CompareTo(System.Object)" />
- </Type>
- <Type Name="System.IComparable&lt;T&gt;">
- <Member Name="CompareTo(T)" />
- </Type>
- <Type Name="System.IConvertible">
- <Member Name="GetTypeCode" />
- <Member Name="ToBoolean(System.IFormatProvider)" />
- <Member Name="ToByte(System.IFormatProvider)" />
- <Member Name="ToChar(System.IFormatProvider)" />
- <Member Name="ToDateTime(System.IFormatProvider)" />
- <Member Name="ToDecimal(System.IFormatProvider)" />
- <Member Name="ToDouble(System.IFormatProvider)" />
- <Member Name="ToInt16(System.IFormatProvider)" />
- <Member Name="ToInt32(System.IFormatProvider)" />
- <Member Name="ToInt64(System.IFormatProvider)" />
- <Member Name="ToSByte(System.IFormatProvider)" />
- <Member Name="ToSingle(System.IFormatProvider)" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToType(System.Type,System.IFormatProvider)" />
- <Member Name="ToUInt16(System.IFormatProvider)" />
- <Member Name="ToUInt32(System.IFormatProvider)" />
- <Member Name="ToUInt64(System.IFormatProvider)" />
- </Type>
- <Type Name="System.ICustomFormatter">
- <Member Name="Format(System.String,System.Object,System.IFormatProvider)" />
- </Type>
- <Type Name="System.IDisposable">
- <Member Name="Dispose" />
- </Type>
- <Type Name="System.IEquatable&lt;T&gt;">
- <Member Name="Equals(T)" />
- </Type>
- <Type Name="System.IFormatProvider">
- <Member Name="GetFormat(System.Type)" />
- </Type>
- <Type Name="System.IFormattable">
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.IndexOutOfRangeException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.InsufficientExecutionStackException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Internal">
- <Member Status="ImplRoot" Name="CommonlyUsedGenericInstantiations" />
- <Member Status="ImplRoot" Name="CommonlyUsedWinRTRedirectedInterfaceStubs" Condition="FEATURE_COMINTEROP" />
- </Type>
- <Type Name="System.InsufficientMemoryException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- </Type>
- <Type Name="System.Int16">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="CompareTo(System.Int16)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="Equals(System.Int16)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.Int16@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int16@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.Int32">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="CompareTo(System.Int32)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="Equals(System.Int32)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.Int32@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int32@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.Int64">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="CompareTo(System.Int64)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="Equals(System.Int64)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.Int64@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int64@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.IntPtr">
- <Member MemberType="Field" Name="Zero" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Int64)" />
- <Member Name="#ctor(System.Void*)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Add(System.IntPtr,System.Int32)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Size" />
- <Member Name="GetHashCode" />
- <Member Name="op_Addition(System.IntPtr,System.Int32)" />
- <Member Name="op_Equality(System.IntPtr,System.IntPtr)" />
- <Member Name="op_Explicit(System.Int32)" ReturnType="System.IntPtr" />
- <Member Name="op_Explicit(System.Int64)" ReturnType="System.IntPtr" />
- <Member Name="op_Explicit(System.IntPtr)" ReturnType="System.Int32" />
- <Member Name="op_Explicit(System.IntPtr)" ReturnType="System.Int64" />
- <Member Name="op_Explicit(System.IntPtr)" ReturnType="System.Void*" />
- <Member Name="op_Explicit(System.Void*)" ReturnType="System.IntPtr" />
- <Member Name="op_Inequality(System.IntPtr,System.IntPtr)" />
- <Member Name="op_Subtraction(System.IntPtr,System.Int32)" />
- <Member Name="Subtract(System.IntPtr,System.Int32)" />
- <Member Name="ToInt32" />
- <Member Name="ToInt64" />
- <Member Name="ToPointer" />
- <Member Name="ToString" />
- <Member Name="ToString(System.String)" />
- <Member MemberType="Property" Name="Size" />
- </Type>
- <Type Name="System.InvalidCastException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Int32)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.InvalidOperationException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.InvalidProgramException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.InvalidTimeZoneException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.IO.FileLoadException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.String,System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.String,System.Int32)" /> <!-- Used by EE, do not remove -->
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_FileName" />
- <Member Name="get_FusionLog" />
- <Member MemberType="Property" Name="FusionLog" />
- </Type>
- <Type Name="System.IObservable&lt;T&gt;">
- <Member Name="Subscribe(System.IObserver&lt;T&gt;)"/>
- </Type>
- <Type Name="System.IObserver&lt;T&gt;">
- <Member Name="OnCompleted"/>
- <Member Name="OnError(System.Exception)"/>
- <Member Name="OnNext(T)"/>
- </Type>
- <Type Name="System.IProgress&lt;T&gt;">
- <Member Name="Report(T)" />
- </Type>
- <Type Name="System.IServiceProvider">
- <Member Name="GetService(System.Type)" />
- </Type>
- <Type Name="System.Lazy&lt;T&gt;">
- <Member Name="#ctor"/>
- <Member Name="#ctor(T)"/>
- <Member Name="#ctor(System.Func&lt;T&gt;)"/>
- <Member Name="#ctor(System.Boolean)"/>
- <Member Name="#ctor(System.Threading.LazyThreadSafetyMode)"/>
- <Member Name="#ctor(System.Func&lt;T&gt;,System.Boolean)"/>
- <Member Name="#ctor(System.Func&lt;T&gt;,System.Threading.LazyThreadSafetyMode)"/>
- <Member MemberType="Property" Name="IsValueCreated"/>
- <Member Name="get_IsValueCreated"/>
- <Member MemberType="Property" Name="Value"/>
- <Member Name="get_Value"/>
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.LoaderOptimization">
- <Member MemberType="Field" Name="DisallowBindings" />
- <Member MemberType="Field" Name="DomainMask" />
- <Member MemberType="Field" Name="MultiDomain" />
- <Member MemberType="Field" Name="MultiDomainHost" />
- <Member MemberType="Field" Name="NotSpecified" />
- <Member MemberType="Field" Name="SingleDomain" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.LoaderOptimizationAttribute">
- <Member Name="#ctor(System.Byte)" />
- <Member Name="#ctor(System.LoaderOptimization)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.LocalDataStoreSlot">
- <Member Status="ImplRoot" Name="Finalize" />
- </Type>
- <Type Name="System.MarshalByRefObject">
- <Member Name="#ctor" />
- <Member Name="GetLifetimeService" />
- <Member Name="InitializeLifetimeService" />
- <Member Name="MemberwiseClone(System.Boolean)" />
- </Type>
- <Type Status="ImplRoot" Name="System.System_LazyDebugView&lt;T&gt;">
- <Member Status="ImplRoot" Name="#ctor(System.Lazy&lt;T&gt;)"/>
- <Member Status="ImplRoot" MemberType="Property" Name="IsValueCreated"/>
- <Member Status="ImplRoot" Name="get_IsValueCreated"/>
- <Member Status="ImplRoot" MemberType="Property" Name="Value"/>
- <Member Status="ImplRoot" Name="get_Value"/>
- <Member Status="ImplRoot" MemberType="Property" Name="Mode"/>
- <Member Status="ImplRoot" Name="get_Mode"/>
- <Member Status="ImplRoot" MemberType="Property" Name="IsValueFaulted"/>
- <Member Status="ImplRoot" Name="get_IsValueFaulted"/>
- </Type>
- <Type Name="System.Math">
- <Member MemberType="Field" Name="E" />
- <Member MemberType="Field" Name="PI" />
- <Member Name="Abs(System.Decimal)" />
- <Member Name="Abs(System.Double)" />
- <Member Name="Abs(System.Int16)" />
- <Member Name="Abs(System.Int32)" />
- <Member Name="Abs(System.Int64)" />
- <Member Name="Abs(System.SByte)" />
- <Member Name="Abs(System.Single)" />
- <Member Name="Acos(System.Double)" />
- <Member Name="Asin(System.Double)" />
- <Member Name="Atan(System.Double)" />
- <Member Name="Atan2(System.Double,System.Double)" />
- <Member Name="BigMul(System.Int32,System.Int32)" />
- <Member Name="Ceiling(System.Decimal)" />
- <Member Name="Ceiling(System.Double)"/>
- <Member Name="Clamp(System.Byte,System.Byte,System.Byte)" />
- <Member Name="Clamp(System.Decimal,System.Decimal,System.Decimal)" />
- <Member Name="Clamp(System.Double,System.Double,System.Double)" />
- <Member Name="Clamp(System.Int16,System.Int16,System.Int16)" />
- <Member Name="Clamp(System.Int32,System.Int32,System.Int32)" />
- <Member Name="Clamp(System.Int64,System.Int64,System.Int64)" />
- <Member Name="Clamp(System.SByte,System.SByte,System.SByte)" />
- <Member Name="Clamp(System.Single,System.Single,System.Single)" />
- <Member Name="Clamp(System.UInt16,System.UInt16,System.UInt16)" />
- <Member Name="Clamp(System.UInt32,System.UInt32,System.UInt32)" />
- <Member Name="Clamp(System.UInt64,System.UInt64,System.UInt64)" />
- <Member Name="Cos(System.Double)" />
- <Member Name="Cosh(System.Double)" />
- <Member Name="DivRem(System.Int32,System.Int32,System.Int32@)" />
- <Member Name="DivRem(System.Int64,System.Int64,System.Int64@)" />
- <Member Name="Exp(System.Double)" />
- <Member Name="Floor(System.Decimal)" />
- <Member Name="Floor(System.Double)" />
- <Member Name="IEEERemainder(System.Double,System.Double)" />
- <Member Name="Log(System.Double)" />
- <Member Name="Log(System.Double,System.Double)" />
- <Member Name="Log10(System.Double)" />
- <Member Name="Max(System.Byte,System.Byte)" />
- <Member Name="Max(System.Decimal,System.Decimal)" />
- <Member Name="Max(System.Double,System.Double)" />
- <Member Name="Max(System.Int16,System.Int16)" />
- <Member Name="Max(System.Int32,System.Int32)" />
- <Member Name="Max(System.Int64,System.Int64)" />
- <Member Name="Max(System.SByte,System.SByte)" />
- <Member Name="Max(System.Single,System.Single)" />
- <Member Name="Max(System.UInt16,System.UInt16)" />
- <Member Name="Max(System.UInt32,System.UInt32)" />
- <Member Name="Max(System.UInt64,System.UInt64)" />
- <Member Name="Min(System.Byte,System.Byte)" />
- <Member Name="Min(System.Decimal,System.Decimal)" />
- <Member Name="Min(System.Double,System.Double)" />
- <Member Name="Min(System.Int16,System.Int16)" />
- <Member Name="Min(System.Int32,System.Int32)" />
- <Member Name="Min(System.Int64,System.Int64)" />
- <Member Name="Min(System.SByte,System.SByte)" />
- <Member Name="Min(System.Single,System.Single)" />
- <Member Name="Min(System.UInt16,System.UInt16)" />
- <Member Name="Min(System.UInt32,System.UInt32)" />
- <Member Name="Min(System.UInt64,System.UInt64)" />
- <Member Name="Pow(System.Double,System.Double)" />
- <Member Name="Round(System.Decimal)" />
- <Member Name="Round(System.Decimal,System.Int32)" />
- <Member Name="Round(System.Decimal,System.Int32,System.MidpointRounding)" />
- <Member Name="Round(System.Decimal,System.MidpointRounding)" />
- <Member Name="Round(System.Double)" />
- <Member Name="Round(System.Double,System.Int32)" />
- <Member Name="Round(System.Double,System.Int32,System.MidpointRounding)" />
- <Member Name="Round(System.Double,System.MidpointRounding)" />
- <Member Name="Sign(System.Decimal)" />
- <Member Name="Sign(System.Double)" />
- <Member Name="Sign(System.Int16)" />
- <Member Name="Sign(System.Int32)" />
- <Member Name="Sign(System.Int64)" />
- <Member Name="Sign(System.SByte)" />
- <Member Name="Sign(System.Single)" />
- <Member Name="Sin(System.Double)" />
- <Member Name="Sinh(System.Double)" />
- <Member Name="Sqrt(System.Double)" />
- <Member Name="Tan(System.Double)" />
- <Member Name="Tanh(System.Double)" />
- <Member Name="Truncate(System.Decimal)" />
- <Member Name="Truncate(System.Double)" />
- </Type>
- <Type Name="System.MathF">
- <Member MemberType="Field" Name="E" />
- <Member MemberType="Field" Name="PI" />
- <Member Name="Abs(System.Single)" />
- <Member Name="Acos(System.Single)" />
- <Member Name="Asin(System.Single)" />
- <Member Name="Atan(System.Single)" />
- <Member Name="Atan2(System.Single,System.Single)" />
- <Member Name="Ceiling(System.Single)"/>
- <Member Name="Cos(System.Single)" />
- <Member Name="Cosh(System.Single)" />
- <Member Name="Exp(System.Single)" />
- <Member Name="Floor(System.Single)" />
- <Member Name="IEEERemainder(System.Single,System.Single)" />
- <Member Name="Log(System.Single)" />
- <Member Name="Log(System.Single,System.Single)" />
- <Member Name="Log10(System.Single)" />
- <Member Name="Max(System.Single,System.Single)" />
- <Member Name="Min(System.Single,System.Single)" />
- <Member Name="Pow(System.Single,System.Single)" />
- <Member Name="Round(System.Single)" />
- <Member Name="Round(System.Single,System.Int32)" />
- <Member Name="Round(System.Single,System.Int32,System.MidpointRounding)" />
- <Member Name="Round(System.Single,System.MidpointRounding)" />
- <Member Name="Sign(System.Single)" />
- <Member Name="Sin(System.Single)" />
- <Member Name="Sinh(System.Single)" />
- <Member Name="Sqrt(System.Single)" />
- <Member Name="Tan(System.Single)" />
- <Member Name="Tanh(System.Single)" />
- <Member Name="Truncate(System.Single)" />
- </Type>
- <Type Name="System.MemberAccessException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.MethodAccessException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.MidpointRounding">
- <Member MemberType="Field" Name="AwayFromZero" />
- <Member MemberType="Field" Name="ToEven" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.MissingFieldException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.MissingMemberException">
- <Member MemberType="Field" Name="ClassName" />
- <Member MemberType="Field" Name="MemberName" />
- <Member MemberType="Field" Name="Signature" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.MissingMethodException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.ModuleHandle">
- <Member MemberType="Field" Name="EmptyHandle" />
- <Member Name="GetHashCode" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.ModuleHandle)" />
- <Member Name="get_MDStreamVersion" />
- <Member Name="op_Equality(System.ModuleHandle,System.ModuleHandle)" />
- <Member Name="op_Inequality(System.ModuleHandle,System.ModuleHandle)" />
- <Member Name="GetRuntimeTypeHandleFromMetadataToken(System.Int32)" />
- <Member Name="GetRuntimeMethodHandleFromMetadataToken(System.Int32)" />
- <Member Name="GetRuntimeFieldHandleFromMetadataToken(System.Int32)" />
- <Member Name="ResolveTypeHandle(System.Int32)" />
- <Member Name="ResolveTypeHandle(System.Int32,System.RuntimeTypeHandle[],System.RuntimeTypeHandle[])" />
- <Member Name="ResolveMethodHandle(System.Int32)" />
- <Member Name="ResolveMethodHandle(System.Int32,System.RuntimeTypeHandle[],System.RuntimeTypeHandle[])" />
- <Member Name="ResolveFieldHandle(System.Int32)" />
- <Member Name="ResolveFieldHandle(System.Int32,System.RuntimeTypeHandle[],System.RuntimeTypeHandle[])" />
- <Member MemberType="Property" Name="MDStreamVersion" />
- </Type>
- <Type Name="System.MTAThreadAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.MulticastDelegate">
- <Member Name="#ctor(System.Object,System.String)" />
- <Member Name="#ctor(System.Type,System.String)" />
- <Member Name="CombineImpl(System.Delegate)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="GetInvocationList" />
- <Member Name="GetMethodImpl" />
- <Member Name="GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="op_Equality(System.MulticastDelegate,System.MulticastDelegate)" />
- <Member Name="op_Inequality(System.MulticastDelegate,System.MulticastDelegate)" />
- <Member Name="RemoveImpl(System.Delegate)" />
- <Member Status="ImplRoot" Name="CtorClosed(System.Object,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorClosedStatic(System.Object,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorOpened(System.Object,System.IntPtr,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorRTClosed(System.Object,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorSecureClosed(System.Object,System.IntPtr,System.IntPtr,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorSecureClosedStatic(System.Object,System.IntPtr,System.IntPtr,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorSecureOpened(System.Object,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorSecureRTClosed(System.Object,System.IntPtr,System.IntPtr,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorSecureVirtualDispatch(System.Object,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorVirtualDispatch(System.Object,System.IntPtr,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorCollectibleClosedStatic(System.Object,System.IntPtr,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorCollectibleOpened(System.Object,System.IntPtr,System.IntPtr,System.IntPtr)" />
- <Member Status="ImplRoot" Name="CtorCollectibleVirtualDispatch(System.Object,System.IntPtr,System.IntPtr,System.IntPtr)" />
- </Type>
- <Type Name="System.MulticastNotSupportedException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.NonSerializedAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.NotFiniteNumberException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Double)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Double)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Double,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_OffendingNumber" />
- <Member MemberType="Property" Name="OffendingNumber" />
- </Type>
- <Type Name="System.NotImplementedException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.NotSupportedException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Nullable">
- <Member Name="Compare&lt;T&gt;(System.Nullable&lt;T&gt;,System.Nullable&lt;T&gt;)" />
- <Member Name="Equals&lt;T&gt;(System.Nullable&lt;T&gt;,System.Nullable&lt;T&gt;)" />
- <Member Name="GetUnderlyingType(System.Type)" />
- </Type>
- <Type Name="System.Nullable&lt;T&gt;">
- <Member Name="#ctor(T)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_HasValue" />
- <Member Name="get_Value" />
- <Member Name="GetHashCode" />
- <Member Name="GetValueOrDefault" />
- <Member Name="GetValueOrDefault(T)" />
- <Member Name="op_Explicit(System.Nullable&lt;T&gt;)" ReturnType="T" />
- <Member Name="op_Implicit(T)" ReturnType="System.Nullable&lt;T&gt;" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="HasValue" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.NullReferenceException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Object">
- <Member Name="#ctor" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Object,System.Object)" />
- <Member Name="Finalize" />
- <Member Name="GetHashCode" />
- <Member Name="GetType" />
- <Member Name="MemberwiseClone" />
- <Member Name="ReferenceEquals(System.Object,System.Object)" />
- <Member Name="ToString" />
- <Member Status="ImplRoot" Name="FieldSetter(System.String,System.String,System.Object)" /> <!-- EE -->
- <Member Status="ImplRoot" Name="FieldGetter(System.String,System.String,System.Object@)" /> <!-- EE -->
- </Type>
- <Type Name="System.ObjectDisposedException">
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_ObjectName" />
- <Member MemberType="Property" Name="ObjectName" />
- </Type>
- <Type Name="System.ObsoleteAttribute">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Boolean)" />
- <Member Name="get_IsError" />
- <Member Name="get_Message" />
- <Member MemberType="Property" Name="IsError" />
- <Member MemberType="Property" Name="Message" />
- </Type>
- <Type Status="ImplRoot" Name="System.OleAutBinder" Condition="FEATURE_COMINTEROP" />
- <Type Name="System.OperatingSystem">
- <Member Name="#ctor(System.PlatformID,System.Version)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Clone" />
- <Member Name="get_Platform" />
- <Member Name="get_Version" />
- <Member Name="get_ServicePack" />
- <Member Name="get_VersionString" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Platform" />
- <Member MemberType="Property" Name="Version" />
- <Member MemberType="Property" Name="ServicePack" />
- <Member MemberType="Property" Name="VersionString" />
- </Type>
- <Type Name="System.OutOfMemoryException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.OverflowException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.ParamArrayAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ImplRoot" Name="System.ParseNumbers">
- <Member Status="ImplRoot" Name="StringToInt(System.String,System.Int32,System.Int32,System.Int32@)" />
- <Member Status="ImplRoot" Name="StringToInt(System.String,System.Int32,System.Int32,System.Int32*)" />
- <Member Status="ImplRoot" Name="StringToLong(System.String,System.Int32,System.Int32,System.Int32@)" />
- <Member Status="ImplRoot" Name="StringToLong(System.String,System.Int32,System.Int32,System.Int32*)" />
- </Type>
- <Type Name="System.PlatformNotSupportedException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Predicate&lt;T&gt;">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(T,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(T)" />
- </Type>
- <Type Name="System.Progress&lt;T&gt;">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Action&lt;T&gt;)" />
- <Member MemberType="Event" Name="ProgressChanged" />
- <Member Name="OnReport(T)" />
- </Type>
- <Type Name="System.Random">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="Next" />
- <Member Name="Next(System.Int32)" />
- <Member Name="Next(System.Int32,System.Int32)" />
- <Member Name="NextBytes(System.Byte[])" />
- <Member Name="NextDouble" />
- <Member Name="Sample" />
- </Type>
- <Type Name="System.RankException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Reflection.AmbiguousMatchException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Reflection.AssemblyContentType">
- <Member MemberType="Field" Name="Default"/>
- <Member MemberType="Field" Name="WindowsRuntime"/>
- <Member MemberType="Field" Name="value__"/>
- </Type>
- <Type Name="System.Reflection.Assembly">
- <Member Name="#ctor" />
- <Member Name="CreateInstance(System.String)" />
- <Member Name="CreateInstance(System.String,System.Boolean)" />
- <Member Name="CreateInstance(System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[])" />
- <Member Name="CreateQualifiedName(System.String,System.String)" />
- <Member Name="GetReferencedAssemblies" />
- <Member Name="get_EntryPoint" />
- <Member Name="get_FullName" />
- <Member Name="get_GlobalAssemblyCache" />
- <Member Name="get_HostContext" />
- <Member Name="get_ImageRuntimeVersion" />
- <Member Name="get_IsFullyTrusted" />
- <Member Name="get_IsDynamic" />
- <Member Name="get_CodeBase" />
- <Member Name="get_EscapedCodeBase" />
- <Member Name="get_Location" />
- <Member Name="get_ManifestModule" />
- <Member Name="get_CustomAttributes" />
- <Member Name="get_Modules" />
- <Member Name="get_ReflectionOnly" />
- <Member Name="get_SecurityRuleSet" />
- <Member Name="GetAssembly(System.Type)" />
- <Member Name="op_Equality(System.Reflection.Assembly,System.Reflection.Assembly)" />
- <Member Name="op_Inequality(System.Reflection.Assembly,System.Reflection.Assembly)" />
- <Member Name="GetCallingAssembly" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributesData" />
- <Member Name="GetExecutingAssembly" />
- <Member Name="GetEntryAssembly" />
- <Member Name="GetExportedTypes" />
- <Member Name="GetFile(System.String)" />
- <Member Name="GetFiles" />
- <Member Name="GetFiles(System.Boolean)" />
- <Member Name="GetLoadedModules" />
- <Member Name="GetLoadedModules(System.Boolean)" />
- <Member Name="GetManifestResourceNames" />
- <Member Name="GetManifestResourceStream(System.String)" />
- <Member Name="GetManifestResourceInfo(System.String)" />
- <Member Name="GetManifestResourceStream(System.Type,System.String)" />
- <Member Name="GetModule(System.String)" />
- <Member Name="GetModules" />
- <Member Name="GetModules(System.Boolean)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="GetName(System.Boolean)" />
- <Member Name="GetName" />
- <Member Name="GetSatelliteAssembly(System.Globalization.CultureInfo)" />
- <Member Name="GetSatelliteAssembly(System.Globalization.CultureInfo,System.Version)" />
- <Member Name="GetType(System.String)" />
- <Member Name="GetType(System.String,System.Boolean)" />
- <Member Name="GetType(System.String,System.Boolean,System.Boolean)" />
- <Member Name="GetTypes" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="IsDynamic" MemberType="Property" />
- <Member Name="Load(System.Reflection.AssemblyName)" />
- <Member Name="Load(System.String)" />
- <Member Name="Load(System.Byte[])" />
- <Member Name="Load(System.Byte[],System.Byte[])" />
- <Member Name="LoadFile(System.String)" />
- <Member Name="LoadFrom(System.String)" />
- <Member Name="LoadFrom(System.String,System.Byte[],System.Configuration.Assemblies.AssemblyHashAlgorithm)" />
- <Member Name="LoadModule(System.String,System.Byte[])" />
- <Member Name="LoadModule(System.String,System.Byte[],System.Byte[])" />
- <Member Name="LoadWithPartialName(System.String)" />
- <Member Name="ReflectionOnlyLoad(System.String)" />
- <Member Name="ReflectionOnlyLoad(System.Byte[])" />
- <Member Name="ReflectionOnlyLoadFrom(System.String)" />
- <Member Name="ToString" />
- <Member Name="UnsafeLoadFrom(System.String)" />
- <Member MemberType="Property" Name="DefinedTypes" />
- <Member MemberType="Property" Name="CustomAttributes" />
- <Member MemberType="Property" Name="Modules" />
- <Member MemberType="Property" Name="ExportedTypes" />
- <Member MemberType="Property" Name="EntryPoint" />
- <Member MemberType="Property" Name="FullName" />
- <Member MemberType="Property" Name="GlobalAssemblyCache" />
- <Member MemberType="Property" Name="HostContext" />
- <Member MemberType="Property" Name="CodeBase" />
- <Member MemberType="Property" Name="EscapedCodeBase" />
- <Member MemberType="Property" Name="ImageRuntimeVersion" />
- <Member MemberType="Property" Name="IsFullyTrusted" />
- <Member MemberType="Property" Name="Location" />
- <Member MemberType="Property" Name="ManifestModule" />
- <Member MemberType="Property" Name="SecurityRuleSet" />
- <Member MemberType="Event" Name="ModuleResolve" />
- <Member Name="add_ModuleResolve(System.Reflection.ModuleResolveEventHandler)" />
- <Member Name="remove_ModuleResolve(System.Reflection.ModuleResolveEventHandler)" />
- </Type>
- <Type Name="System.Reflection.IntrospectionExtensions">
- <Member Name="GetTypeInfo(System.Type)" />
- </Type>
- <Type Name="System.Reflection.IReflectableType">
- <Member Name="GetTypeInfo" />
- </Type>
- <Type Name="System.Reflection.ProcessorArchitecture">
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="MSIL" />
- <Member MemberType="Field" Name="X86" />
- <Member MemberType="Field" Name="IA64" />
- <Member MemberType="Field" Name="Amd64" />
- <Member MemberType="Field" Name="Arm" />
- </Type>
- <Type Name="System.Reflection.ReflectionContext">
- <Member Name="#ctor" />
- <Member Name="MapAssembly(System.Reflection.Assembly)" />
- <Member Name="MapType(System.Reflection.TypeInfo)" />
- <Member Name="GetTypeForObject(System.Object)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Reflection.ResourceLocation">
- <Member MemberType="Field" Name="ContainedInAnotherAssembly" />
- <Member MemberType="Field" Name="ContainedInManifestFile" />
- <Member MemberType="Field" Name="Embedded" />
- </Type>
- <Type Status="ImplRoot" Name="System.Reflection.RuntimeAssembly">
- <Member Status="ImplRoot" MemberType="Event" Name="_ModuleResolve" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_assembly" />
- <Member Status="ImplRoot" Name="OnModuleResolveEvent(System.String)" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Property" Name="DefinedTypes" />
- <!-- On Windows Phone Assembly.LoadFrom throws a NotSupportedException. Prevent this internal helper from being stripped by the rewriter so that tests may reflect and call it since they need LoadFrom functionality -->
- <Member Status="ImplRoot" Name="InternalLoadFrom(System.String,System.Security.Policy.Evidence,System.Byte[],System.Configuration.Assemblies.AssemblyHashAlgorithm,System.Boolean,System.Boolean,System.Threading.StackCrawlMark@)" Condition="FEATURE_WINDOWSPHONE" />
- </Type>
- <Type Name="System.Reflection.TypeInfo">
- <Member Name="#ctor" />
- <Member Name="AsType" />
- <Member MemberType="Property" Name="GenericTypeParameters" />
- <Member Name="IsAssignableFrom(System.Reflection.TypeInfo)" />
- <Member Name="GetDeclaredEvent(System.String)" />
- <Member Name="GetDeclaredField(System.String)" />
- <Member Name="GetDeclaredMethod(System.String)" />
- <Member Name="GetDeclaredMethods(System.String)" />
- <Member Name="GetDeclaredNestedType(System.String)" />
- <Member Name="GetDeclaredProperty(System.String)" />
- <Member MemberType="Property" Name="DeclaredConstructors" />
- <Member MemberType="Property" Name="DeclaredEvents" />
- <Member MemberType="Property" Name="DeclaredFields" />
- <Member MemberType="Property" Name="DeclaredMembers" />
- <Member MemberType="Property" Name="DeclaredMethods" />
- <Member MemberType="Property" Name="DeclaredNestedTypes" />
- <Member MemberType="Property" Name="DeclaredProperties" />
- <Member MemberType="Property" Name="ImplementedInterfaces" />
- </Type>
- <Type Name="System.Reflection.AssemblyAlgorithmIdAttribute">
- <Member Name="#ctor(System.Configuration.Assemblies.AssemblyHashAlgorithm)" />
- <Member Name="#ctor(System.UInt32)" />
- <Member Name="get_AlgorithmId" />
- <Member MemberType="Property" Name="AlgorithmId" />
- </Type>
- <Type Name="System.Reflection.AssemblyCompanyAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Company" />
- <Member MemberType="Property" Name="Company" />
- </Type>
- <Type Name="System.Reflection.AssemblyConfigurationAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Configuration" />
- <Member MemberType="Property" Name="Configuration" />
- </Type>
- <Type Name="System.Reflection.AssemblyCopyrightAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Copyright" />
- <Member MemberType="Property" Name="Copyright" />
- </Type>
- <Type Name="System.Reflection.AssemblyCultureAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Culture" />
- <Member MemberType="Property" Name="Culture" />
- </Type>
- <Type Name="System.Reflection.AssemblyDefaultAliasAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_DefaultAlias" />
- <Member MemberType="Property" Name="DefaultAlias" />
- </Type>
- <Type Name="System.Reflection.AssemblyDelaySignAttribute">
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="get_DelaySign" />
- <Member MemberType="Property" Name="DelaySign" />
- </Type>
- <Type Name="System.Reflection.AssemblyDescriptionAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Description" />
- <Member MemberType="Property" Name="Description" />
- </Type>
- <Type Name="System.Reflection.AssemblyMetadataAttribute">
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="get_Key" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Key" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Reflection.AssemblyFlagsAttribute">
- <Member Name="#ctor(System.UInt32)" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Reflection.AssemblyNameFlags)" />
- <Member Name="get_AssemblyFlags" />
- <Member Name="get_Flags" />
- <Member MemberType="Property" Name="AssemblyFlags" />
- </Type>
- <Type Name="System.Reflection.AssemblyInformationalVersionAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_InformationalVersion" />
- <Member MemberType="Property" Name="InformationalVersion" />
- </Type>
- <Type Name="System.Reflection.AssemblyKeyFileAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_KeyFile" />
- <Member MemberType="Property" Name="KeyFile" />
- </Type>
- <Type Name="System.Reflection.AssemblyKeyNameAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_KeyName" />
- <Member MemberType="Property" Name="KeyName" />
- </Type>
- <Type Name="System.Reflection.AssemblyName">
- <Member Name="#ctor" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_CultureInfo" />
- <Member Name="get_CultureName" />
- <Member Name="get_CodeBase" />
- <Member Name="get_EscapedCodeBase" />
- <Member Name="get_ContentType" />
- <Member Name="get_Flags" />
- <Member Name="get_FullName" />
- <Member Name="get_HashAlgorithm" />
- <Member Name="get_VersionCompatibility" />
- <Member Name="get_Name" />
- <Member Name="get_ProcessorArchitecture" />
- <Member Name="get_Version" />
- <Member Name="get_KeyPair" />
- <Member Name="GetAssemblyName(System.String)" />
- <Member Name="GetPublicKey" />
- <Member Name="GetPublicKeyToken" />
- <Member Name="set_CultureInfo(System.Globalization.CultureInfo)" />
- <Member Name="set_CodeBase(System.String)" />
- <Member Name="set_Flags(System.Reflection.AssemblyNameFlags)" />
- <Member Name="set_HashAlgorithm(System.Configuration.Assemblies.AssemblyHashAlgorithm)" />
- <Member Name="set_VersionCompatibility(System.Configuration.Assemblies.AssemblyVersionCompatibility)" />
- <Member Name="set_Name(System.String)" />
- <Member Name="set_ProcessorArchitecture(System.Reflection.ProcessorArchitecture)" />
- <Member Name="set_Version(System.Version)" />
- <Member Name="set_KeyPair(System.Reflection.StrongNameKeyPair)" />
- <Member Name="Clone" />
- <Member Name="SetPublicKey(System.Byte[])" />
- <Member Name="SetPublicKeyToken(System.Byte[])" />
- <Member Name="ToString" />
- <Member Name="GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="OnDeserialization(System.Object)" />
- <Member Name="ReferenceMatchesDefinition(System.Reflection.AssemblyName,System.Reflection.AssemblyName)" />
- <Member Name="#ctor(System.String)" />
- <Member MemberType="Property" Name="CodeBase" />
- <Member MemberType="Property" Name="CultureInfo" />
- <Member MemberType="Property" Name="CultureName" />
- <Member MemberType="Property" Name="ContentType" />
- <Member MemberType="Property" Name="EscapedCodeBase" />
- <Member MemberType="Property" Name="Flags" />
- <Member MemberType="Property" Name="FullName" />
- <Member MemberType="Property" Name="HashAlgorithm" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ProcessorArchitecture" />
- <Member MemberType="Property" Name="Version" />
- <Member MemberType="Property" Name="VersionCompatibility" />
- <Member MemberType="Property" Name="KeyPair" />
- </Type>
- <Type Name="System.Reflection.AssemblyNameFlags">
- <Member MemberType="Field" Name="EnableJITcompileOptimizer" />
- <Member MemberType="Field" Name="EnableJITcompileTracking" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="PublicKey" />
- <Member MemberType="Field" Name="Retargetable" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.AssemblyProductAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Product" />
- <Member MemberType="Property" Name="Product" />
- </Type>
- <Type Name="System.Reflection.AssemblySignatureKeyAttribute">
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="get_Countersignature" />
- <Member Name="get_PublicKey" />
- <Member MemberType="Property" Name="Countersignature" />
- <Member MemberType="Property" Name="PublicKey" />
- </Type>
- <Type Name="System.Reflection.AssemblyTitleAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Title" />
- <Member MemberType="Property" Name="Title" />
- </Type>
- <Type Name="System.Reflection.AssemblyTrademarkAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Trademark" />
- <Member MemberType="Property" Name="Trademark" />
- </Type>
- <Type Name="System.Reflection.AssemblyVersionAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Version" />
- <Member MemberType="Property" Name="Version" />
- </Type>
- <Type Name="System.Reflection.Binder">
- <Member Name="#ctor" />
- <Member Name="BindToField(System.Reflection.BindingFlags,System.Reflection.FieldInfo[],System.Object,System.Globalization.CultureInfo)" />
- <Member Name="BindToMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[]@,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object@)" />
- <Member Name="ChangeType(System.Object,System.Type,System.Globalization.CultureInfo)" />
- <Member Name="ReorderArgumentArray(System.Object[]@,System.Object)" />
- <Member Name="SelectMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="SelectProperty(System.Reflection.BindingFlags,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[])" />
- </Type>
- <Type Name="System.Reflection.BindingFlags">
- <Member MemberType="Field" Name="CreateInstance" />
- <Member MemberType="Field" Name="DeclaredOnly" />
- <Member MemberType="Field" Name="Default" />
- <Member MemberType="Field" Name="ExactBinding" />
- <Member MemberType="Field" Name="FlattenHierarchy" />
- <Member MemberType="Field" Name="GetField" />
- <Member MemberType="Field" Name="GetProperty" />
- <Member MemberType="Field" Name="IgnoreCase" />
- <Member MemberType="Field" Name="IgnoreReturn" />
- <Member MemberType="Field" Name="Instance" />
- <Member MemberType="Field" Name="InvokeMethod" />
- <Member MemberType="Field" Name="NonPublic" />
- <Member MemberType="Field" Name="OptionalParamBinding" />
- <Member MemberType="Field" Name="Public" />
- <Member MemberType="Field" Name="PutDispProperty" />
- <Member MemberType="Field" Name="PutRefDispProperty" />
- <Member MemberType="Field" Name="SetField" />
- <Member MemberType="Field" Name="SetProperty" />
- <Member MemberType="Field" Name="Static" />
- <Member MemberType="Field" Name="SuppressChangeType" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.CallingConventions">
- <Member MemberType="Field" Name="Any" />
- <Member MemberType="Field" Name="ExplicitThis" />
- <Member MemberType="Field" Name="HasThis" />
- <Member MemberType="Field" Name="Standard" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="VarArgs" />
- </Type>
- <Type Name="System.Reflection.ConstructorInfo">
- <Member Name="#ctor" />
- <Member Name="op_Equality(System.Reflection.ConstructorInfo,System.Reflection.ConstructorInfo)" />
- <Member Name="op_Inequality(System.Reflection.ConstructorInfo,System.Reflection.ConstructorInfo)" />
- <Member MemberType="Field" Name="ConstructorName" />
- <Member MemberType="Field" Name="TypeConstructorName" />
- <Member Name="get_MemberType" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="Invoke(System.Object[])" />
- <Member Name="Invoke(System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member MemberType="Property" Name="MemberType" />
- </Type>
- <Type Name="System.Reflection.CustomAttributeData">
- <Member Name="#ctor" />
- <Member Name="get_AttributeType" />
- <Member Name="get_ConstructorArguments" />
- <Member Name="get_NamedArguments" />
- <Member Name="get_Constructor" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetCustomAttributes(System.Reflection.Assembly)" />
- <Member Name="GetCustomAttributes(System.Reflection.MemberInfo)" />
- <Member Name="GetCustomAttributes(System.Reflection.Module)" />
- <Member Name="GetCustomAttributes(System.Reflection.ParameterInfo)" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="AttributeType" />
- <Member MemberType="Property" Name="Constructor" />
- <Member MemberType="Property" Name="ConstructorArguments" />
- <Member MemberType="Property" Name="NamedArguments" />
- </Type>
- <Type Name="System.Reflection.CustomAttributeExtensions">
- <Member Name="GetCustomAttribute(System.Reflection.Assembly,System.Type)" />
- <Member Name="GetCustomAttribute(System.Reflection.MemberInfo,System.Type)" />
- <Member Name="GetCustomAttribute(System.Reflection.MemberInfo,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttribute(System.Reflection.Module,System.Type)" />
- <Member Name="GetCustomAttribute(System.Reflection.ParameterInfo,System.Type)" />
- <Member Name="GetCustomAttribute(System.Reflection.ParameterInfo,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttribute&lt;T&gt;(System.Reflection.Assembly)" />
- <Member Name="GetCustomAttribute&lt;T&gt;(System.Reflection.MemberInfo)" />
- <Member Name="GetCustomAttribute&lt;T&gt;(System.Reflection.MemberInfo,System.Boolean)" />
- <Member Name="GetCustomAttribute&lt;T&gt;(System.Reflection.Module)" />
- <Member Name="GetCustomAttribute&lt;T&gt;(System.Reflection.ParameterInfo)" />
- <Member Name="GetCustomAttribute&lt;T&gt;(System.Reflection.ParameterInfo,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.Assembly)" />
- <Member Name="GetCustomAttributes(System.Reflection.Assembly,System.Type)" />
- <Member Name="GetCustomAttributes(System.Reflection.MemberInfo)" />
- <Member Name="GetCustomAttributes(System.Reflection.MemberInfo,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.MemberInfo,System.Type)" />
- <Member Name="GetCustomAttributes(System.Reflection.MemberInfo,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.Module)" />
- <Member Name="GetCustomAttributes(System.Reflection.Module,System.Type)" />
- <Member Name="GetCustomAttributes(System.Reflection.ParameterInfo)" />
- <Member Name="GetCustomAttributes(System.Reflection.ParameterInfo,System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Reflection.ParameterInfo,System.Type)" />
- <Member Name="GetCustomAttributes(System.Reflection.ParameterInfo,System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributes&lt;T&gt;(System.Reflection.Assembly)" />
- <Member Name="GetCustomAttributes&lt;T&gt;(System.Reflection.MemberInfo)" />
- <Member Name="GetCustomAttributes&lt;T&gt;(System.Reflection.MemberInfo,System.Boolean)" />
- <Member Name="GetCustomAttributes&lt;T&gt;(System.Reflection.Module)" />
- <Member Name="GetCustomAttributes&lt;T&gt;(System.Reflection.ParameterInfo)" />
- <Member Name="GetCustomAttributes&lt;T&gt;(System.Reflection.ParameterInfo,System.Boolean)" />
- <Member Name="IsDefined(System.Reflection.Assembly,System.Type)" />
- <Member Name="IsDefined(System.Reflection.MemberInfo,System.Type)" />
- <Member Name="IsDefined(System.Reflection.MemberInfo,System.Type,System.Boolean)" />
- <Member Name="IsDefined(System.Reflection.Module,System.Type)" />
- <Member Name="IsDefined(System.Reflection.ParameterInfo,System.Type)" />
- <Member Name="IsDefined(System.Reflection.ParameterInfo,System.Type,System.Boolean)" />
- </Type>
- <Type Name="System.Reflection.RuntimeReflectionExtensions">
- <Member Name="GetMethodInfo(System.Delegate)" />
- <Member Name="GetRuntimeBaseDefinition(System.Reflection.MethodInfo)" />
- <Member Name="GetRuntimeEvent(System.Type,System.String)" />
- <Member Name="GetRuntimeEvents(System.Type)" />
- <Member Name="GetRuntimeField(System.Type,System.String)" />
- <Member Name="GetRuntimeFields(System.Type)" />
- <Member Name="GetRuntimeInterfaceMap(System.Reflection.TypeInfo,System.Type)" />
- <Member Name="GetRuntimeMethod(System.Type,System.String,System.Type[])" />
- <Member Name="GetRuntimeMethods(System.Type)" />
- <Member Name="GetRuntimeProperties(System.Type)" />
- <Member Name="GetRuntimeProperty(System.Type,System.String)" />
- </Type>
- <Type Name="System.Reflection.CustomAttributeNamedArgument">
- <Member Name="#ctor(System.Reflection.MemberInfo,System.Object)" />
- <Member Name="#ctor(System.Reflection.MemberInfo,System.Reflection.CustomAttributeTypedArgument)" />
- <Member Name="get_IsField" />
- <Member Name="get_MemberInfo" />
- <Member Name="get_MemberName" />
- <Member Name="get_TypedValue" />
- <Member Name="op_Equality(System.Reflection.CustomAttributeNamedArgument,System.Reflection.CustomAttributeNamedArgument)" />
- <Member Name="op_Inequality(System.Reflection.CustomAttributeNamedArgument,System.Reflection.CustomAttributeNamedArgument)" />
- <Member MemberType="Property" Name="IsField" />
- <Member MemberType="Property" Name="MemberName" />
- <Member MemberType="Property" Name="TypedValue" />
- </Type>
- <Type Name="System.Reflection.CustomAttributeTypedArgument">
- <Member Name="#ctor(System.Object)" />
- <Member Name="#ctor(System.Type,System.Object)" />
- <Member Name="get_ArgumentType" />
- <Member Name="get_Value" />
- <Member Name="op_Equality(System.Reflection.CustomAttributeTypedArgument,System.Reflection.CustomAttributeTypedArgument)" />
- <Member Name="op_Inequality(System.Reflection.CustomAttributeTypedArgument,System.Reflection.CustomAttributeTypedArgument)" />
- <Member MemberType="Property" Name="ArgumentType" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Reflection.CustomAttributeFormatException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Reflection.DefaultMemberAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_MemberName" />
- <Member MemberType="Property" Name="MemberName" />
- </Type>
- <Type Name="System.Reflection.Emit.AssemblyBuilder">
- <Member Name="DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess)" />
- <Member Name="DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.Collections.Generic.IEnumerable&lt;System.Reflection.Emit.CustomAttributeBuilder&gt;)" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="DefineDynamicModule(System.String)" />
- <Member Name="DefineDynamicModule(System.String,System.Boolean)" />
- <Member Name="get_EntryPoint" />
- <Member Name="get_ImageRuntimeVersion" />
- <Member Name="GetDynamicModule(System.String)" />
- <Member Name="GetExportedTypes" />
- <Member Name="GetManifestResourceNames" />
- <Member Name="GetManifestResourceStream(System.String)" />
- <Member Name="GetManifestResourceStream(System.Type,System.String)" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member MemberType="Property" Name="EntryPoint" />
- <Member MemberType="Property" Name="ImageRuntimeVersion" />
- </Type>
- <Type Name="System.Reflection.Emit.AssemblyBuilderAccess">
- <Member MemberType="Field" Name="Run" />
- <Member MemberType="Field" Name="RunAndCollect" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.Emit.ConstructorBuilder">
- <Member Name="DefineParameter(System.Int32,System.Reflection.ParameterAttributes,System.String)" />
- <Member Name="get_Attributes" />
- <Member Name="get_CallingConvention" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_InitLocals" />
- <Member Name="get_MethodHandle" />
- <Member Name="get_Module" />
- <Member Name="get_Name" />
- <Member Name="get_ReflectedType" />
- <Member Name="get_Signature" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetILGenerator" />
- <Member Name="GetILGenerator(System.Int32)" />
- <Member Name="GetMethodImplementationFlags" />
- <Member Name="GetModule" />
- <Member Name="GetParameters" />
- <Member Name="GetToken" />
- <Member Name="Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member Name="Invoke(System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="set_InitLocals(System.Boolean)" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member Name="SetImplementationFlags(System.Reflection.MethodImplAttributes)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="CallingConvention" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="InitLocals" />
- <Member MemberType="Property" Name="MethodHandle" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ReflectedType" />
- <Member MemberType="Property" Name="Signature" />
- </Type>
- <Type Name="System.Reflection.Emit.CustomAttributeBuilder">
- <Member Name="#ctor(System.Reflection.ConstructorInfo,System.Object[])" />
- <Member Name="#ctor(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[])" />
- <Member Name="#ctor(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[])" />
- <Member Name="#ctor(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[])" />
- </Type>
- <Type Name="System.RuntimeArgumentHandle"> <!-- MC++ compiler asserts for no particularly good reason if this type is not public -->
- </Type>
- <Type Status="ImplRoot" Name="System.RuntimeFieldInfoStub">
- <Member Status="ImplRoot" MemberType="Field" Name="m_keepalive" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_b" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_c" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_d" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_e" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_fieldHandle" />
- </Type>
- <Type Status="ImplRoot" Name="System.RuntimeMethodInfoStub">
- <Member Status="ImplRoot" MemberType="Field" Name="m_a" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_b" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_c" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_d" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_e" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_f" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_g" />
- </Type>
- <Type Name="System.RuntimeTypeHandle">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Equals(System.RuntimeTypeHandle)" />
- <Member Name="op_Equality(System.Object,System.RuntimeTypeHandle)" />
- <Member Name="op_Equality(System.RuntimeTypeHandle,System.Object)" />
- <Member Name="GetModuleHandle" />
- <Member Name="op_Inequality(System.Object,System.RuntimeTypeHandle)" />
- <Member Name="op_Inequality(System.RuntimeTypeHandle,System.Object)" />
- <Member Status="ImplRoot" Name="GetTypeHelper(System.Type,System.Type[],System.IntPtr,System.Int32)" /> <!-- EE -->
- <Member Status="ImplRoot" Name="GetValueInternal(System.RuntimeTypeHandle)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- <!-- EE -->
- </Type>
- <Type Name="System.Reflection.Emit.DynamicMethod">
- <Member Name="#ctor(System.String,System.Type,System.Type[])" />
- <Member Name="#ctor(System.String,System.Type,System.Type[],System.Boolean)" />
- <Member Name="#ctor(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Reflection.Module,System.Boolean)" />
- <Member Name="#ctor(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type,System.Boolean)" />
- <Member Name="#ctor(System.String,System.Type,System.Type[],System.Reflection.Module)" />
- <Member Name="#ctor(System.String,System.Type,System.Type[],System.Reflection.Module,System.Boolean)" />
- <Member Name="#ctor(System.String,System.Type,System.Type[],System.Type)" />
- <Member Name="#ctor(System.String,System.Type,System.Type[],System.Type,System.Boolean)" />
- <Member Name="CreateDelegate(System.Type)" />
- <Member Name="CreateDelegate(System.Type,System.Object)" />
- <Member Name="DefineParameter(System.Int32,System.Reflection.ParameterAttributes,System.String)" />
- <Member Name="get_Attributes" />
- <Member Name="get_CallingConvention" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_InitLocals" />
- <Member Name="get_MethodHandle" />
- <Member Name="get_Module" />
- <Member Name="get_Name" />
- <Member Name="get_ReflectedType" />
- <Member Name="get_ReturnParameter" />
- <Member Name="get_ReturnType" />
- <Member Name="get_ReturnTypeCustomAttributes" />
- <Member Name="GetBaseDefinition" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetILGenerator" />
- <Member Name="GetILGenerator(System.Int32)" />
- <Member Name="GetMethodImplementationFlags" />
- <Member Name="GetParameters" />
- <Member Name="Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="set_InitLocals(System.Boolean)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="CallingConvention" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="InitLocals" />
- <Member MemberType="Property" Name="MethodHandle" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ReflectedType" />
- <Member MemberType="Property" Name="ReturnParameter" />
- <Member MemberType="Property" Name="ReturnType" />
- <Member MemberType="Property" Name="ReturnTypeCustomAttributes" />
- </Type>
- <Type Name="System.Reflection.Emit.EnumBuilder">
- <Member Name="CreateType" />
- <Member Name="CreateTypeInfo" />
- <Member Name="DefineLiteral(System.String,System.Object)" />
- <Member Name="get_Assembly" />
- <Member Name="get_AssemblyQualifiedName" />
- <Member Name="get_BaseType" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_FullName" />
- <Member Name="get_GUID" />
- <Member Name="get_Module" />
- <Member Name="get_Name" />
- <Member Name="get_Namespace" />
- <Member Name="get_ReflectedType" />
- <Member Name="get_TypeHandle" />
- <Member Name="get_TypeToken" />
- <Member Name="get_UnderlyingField" />
- <Member Name="get_UnderlyingSystemType" />
- <Member Name="GetAttributeFlagsImpl" />
- <Member Name="GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetConstructors(System.Reflection.BindingFlags)" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetElementType" />
- <Member Name="GetEvent(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetEvents" />
- <Member Name="GetEvents(System.Reflection.BindingFlags)" />
- <Member Name="GetField(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetFields(System.Reflection.BindingFlags)" />
- <Member Name="GetInterface(System.String,System.Boolean)" />
- <Member Name="GetInterfaceMap(System.Type)" />
- <Member Name="GetInterfaces" />
- <Member Name="GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags)" />
- <Member Name="GetMembers(System.Reflection.BindingFlags)" />
- <Member Name="GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethods(System.Reflection.BindingFlags)" />
- <Member Name="GetNestedType(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetNestedTypes(System.Reflection.BindingFlags)" />
- <Member Name="GetProperties(System.Reflection.BindingFlags)" />
- <Member Name="GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="HasElementTypeImpl" />
- <Member Name="InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[])" />
- <Member Name="IsArrayImpl" />
- <Member Name="IsByRefImpl" />
- <Member Name="IsCOMObjectImpl" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="IsPointerImpl" />
- <Member Name="IsPrimitiveImpl" />
- <Member Name="IsValueTypeImpl" />
- <Member Name="MakeArrayType" />
- <Member Name="MakeArrayType(System.Int32)" />
- <Member Name="MakeByRefType" />
- <Member Name="MakePointerType" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member MemberType="Property" Name="Assembly" />
- <Member MemberType="Property" Name="AssemblyQualifiedName" />
- <Member MemberType="Property" Name="BaseType" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="FullName" />
- <Member MemberType="Property" Name="GUID" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Namespace" />
- <Member MemberType="Property" Name="ReflectedType" />
- <Member MemberType="Property" Name="TypeHandle" />
- <Member MemberType="Property" Name="TypeToken" />
- <Member MemberType="Property" Name="UnderlyingField" />
- <Member MemberType="Property" Name="UnderlyingSystemType" />
- </Type>
- <Type Name="System.Reflection.Emit.EventBuilder">
- <Member Name="AddOtherMethod(System.Reflection.Emit.MethodBuilder)" />
- <Member Name="GetEventToken" />
- <Member Name="SetAddOnMethod(System.Reflection.Emit.MethodBuilder)" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member Name="SetRaiseMethod(System.Reflection.Emit.MethodBuilder)" />
- <Member Name="SetRemoveOnMethod(System.Reflection.Emit.MethodBuilder)" />
- </Type>
- <Type Name="System.Reflection.Emit.EventToken">
- <Member MemberType="Field" Name="Empty" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.EventToken)" />
- <Member Name="get_Token" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.EventToken,System.Reflection.Emit.EventToken)" />
- <Member Name="op_Inequality(System.Reflection.Emit.EventToken,System.Reflection.Emit.EventToken)" />
- <Member MemberType="Property" Name="Token" />
- </Type>
- <Type Name="System.Reflection.Emit.FieldBuilder">
- <Member Name="get_Attributes" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_FieldHandle" />
- <Member Name="get_FieldType" />
- <Member Name="get_Module" />
- <Member Name="get_Name" />
- <Member Name="get_ReflectedType" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetToken" />
- <Member Name="GetValue(System.Object)" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="SetConstant(System.Object)" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member Name="SetOffset(System.Int32)" />
- <Member Name="SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo)" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="FieldHandle" />
- <Member MemberType="Property" Name="FieldType" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ReflectedType" />
- </Type>
- <Type Name="System.Reflection.Emit.FieldToken">
- <Member MemberType="Field" Name="Empty" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.FieldToken)" />
- <Member Name="get_Token" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.FieldToken,System.Reflection.Emit.FieldToken)" />
- <Member Name="op_Inequality(System.Reflection.Emit.FieldToken,System.Reflection.Emit.FieldToken)" />
- <Member MemberType="Property" Name="Token" />
- </Type>
- <Type Name="System.Reflection.Emit.FlowControl">
- <Member MemberType="Field" Name="Branch" />
- <Member MemberType="Field" Name="Break" />
- <Member MemberType="Field" Name="Call" />
- <Member MemberType="Field" Name="Cond_Branch" />
- <Member MemberType="Field" Name="Meta" />
- <Member MemberType="Field" Name="Next" />
- <Member MemberType="Field" Name="Phi" />
- <Member MemberType="Field" Name="Return" />
- <Member MemberType="Field" Name="Throw" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.Emit.GenericTypeParameterBuilder">
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Assembly" />
- <Member Name="get_AssemblyQualifiedName" />
- <Member Name="get_BaseType" />
- <Member Name="get_ContainsGenericParameters" />
- <Member Name="get_DeclaringMethod" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_FullName" />
- <Member Name="get_GenericParameterPosition" />
- <Member Name="get_GUID" />
- <Member Name="get_IsGenericParameter" />
- <Member Name="get_IsGenericType" />
- <Member Name="get_IsGenericTypeDefinition" />
- <Member Name="get_Module" />
- <Member Name="get_Name" />
- <Member Name="get_Namespace" />
- <Member Name="get_ReflectedType" />
- <Member Name="get_TypeHandle" />
- <Member Name="get_UnderlyingSystemType" />
- <Member Name="GetAttributeFlagsImpl" />
- <Member Name="GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetConstructors(System.Reflection.BindingFlags)" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetElementType" />
- <Member Name="GetEvent(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetEvents" />
- <Member Name="GetEvents(System.Reflection.BindingFlags)" />
- <Member Name="GetField(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetFields(System.Reflection.BindingFlags)" />
- <Member Name="GetGenericArguments" />
- <Member Name="GetGenericTypeDefinition" />
- <Member Name="GetHashCode" />
- <Member Name="GetInterface(System.String,System.Boolean)" />
- <Member Name="GetInterfaceMap(System.Type)" />
- <Member Name="GetInterfaces" />
- <Member Name="GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags)" />
- <Member Name="GetMembers(System.Reflection.BindingFlags)" />
- <Member Name="GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethods(System.Reflection.BindingFlags)" />
- <Member Name="GetNestedType(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetNestedTypes(System.Reflection.BindingFlags)" />
- <Member Name="GetProperties(System.Reflection.BindingFlags)" />
- <Member Name="GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="HasElementTypeImpl" />
- <Member Name="InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[])" />
- <Member Name="IsArrayImpl" />
- <Member Name="IsAssignableFrom(System.Type)" />
- <Member Name="IsAssignableFrom(System.Reflection.TypeInfo)" />
- <Member Name="IsByRefImpl" />
- <Member Name="IsCOMObjectImpl" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="IsPointerImpl" />
- <Member Name="IsPrimitiveImpl" />
- <Member Name="IsSubclassOf(System.Type)" />
- <Member Name="IsValueTypeImpl" />
- <Member Name="MakeArrayType" />
- <Member Name="MakeArrayType(System.Int32)" />
- <Member Name="MakeByRefType" />
- <Member Name="MakeGenericType(System.Type[])" />
- <Member Name="MakePointerType" />
- <Member Name="SetBaseTypeConstraint(System.Type)" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member Name="SetGenericParameterAttributes(System.Reflection.GenericParameterAttributes)" />
- <Member Name="SetInterfaceConstraints(System.Type[])" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Assembly" />
- <Member MemberType="Property" Name="AssemblyQualifiedName" />
- <Member MemberType="Property" Name="BaseType" />
- <Member MemberType="Property" Name="ContainsGenericParameters" />
- <Member MemberType="Property" Name="DeclaringMethod" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="FullName" />
- <Member MemberType="Property" Name="GenericParameterPosition" />
- <Member MemberType="Property" Name="GUID" />
- <Member MemberType="Property" Name="IsGenericParameter" />
- <Member MemberType="Property" Name="IsGenericType" />
- <Member MemberType="Property" Name="IsGenericTypeDefinition" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Namespace" />
- <Member MemberType="Property" Name="ReflectedType" />
- <Member MemberType="Property" Name="TypeHandle" />
- <Member MemberType="Property" Name="UnderlyingSystemType" />
- </Type>
- <Type Name="System.Reflection.Emit.ILGenerator">
- <Member Name="BeginCatchBlock(System.Type)" />
- <Member Name="BeginExceptFilterBlock" />
- <Member Name="BeginExceptionBlock" />
- <Member Name="BeginFaultBlock" />
- <Member Name="BeginFinallyBlock" />
- <Member Name="BeginScope" />
- <Member Name="DeclareLocal(System.Type)" />
- <Member Name="DeclareLocal(System.Type,System.Boolean)" />
- <Member Name="DefineLabel" />
- <Member Name="Emit(System.Reflection.Emit.OpCode)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Byte)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Double)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Int16)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Int32)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Int64)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.SignatureHelper)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Reflection.ConstructorInfo)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.Label)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.Label[])" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Reflection.FieldInfo)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Reflection.MethodInfo)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.SByte)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Single)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.String)" />
- <Member Name="Emit(System.Reflection.Emit.OpCode,System.Type)" />
- <Member Name="EmitCall(System.Reflection.Emit.OpCode,System.Reflection.MethodInfo,System.Type[])" />
- <Member Name="EmitCalli(System.Reflection.Emit.OpCode,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[])" />
- <Member Name="EmitWriteLine(System.Reflection.Emit.LocalBuilder)" />
- <Member Name="EmitWriteLine(System.Reflection.FieldInfo)" />
- <Member Name="EmitWriteLine(System.String)" />
- <Member Name="EndExceptionBlock" />
- <Member Name="EndScope" />
- <Member Name="MarkLabel(System.Reflection.Emit.Label)" />
- <Member Name="MarkSequencePoint(System.Diagnostics.SymbolStore.ISymbolDocumentWriter,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="get_ILOffset" />
- <Member Name="ThrowException(System.Type)" />
- <Member Name="UsingNamespace(System.String)" />
- <Member MemberType="Property" Name="ILOffset" />
- </Type>
- <Type Name="System.Diagnostics.CodeAnalysis.SuppressMessageAttribute">
- <Member Name="#ctor(System.String,System.String)" />
- <Member MemberType="Property" Name="Category" />
- <Member MemberType="Property" Name="CheckId" />
- <Member MemberType="Property" Name="Scope" />
- <Member MemberType="Property" Name="Target" />
- <Member MemberType="Property" Name="MessageId" />
- <Member MemberType="Property" Name="Justification" />
- </Type>
- <Type Name="System.Diagnostics.SymbolStore.ISymbolDocumentWriter">
- <Member Name="SetSource(System.Byte[])" />
- <Member Name="SetCheckSum(System.Guid,System.Byte[])" />
- </Type>
- <Type Name="System.Reflection.Emit.Label">
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.Label)" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.Label,System.Reflection.Emit.Label)" />
- <Member Name="op_Inequality(System.Reflection.Emit.Label,System.Reflection.Emit.Label)" />
- </Type>
- <Type Name="System.Reflection.Emit.LocalBuilder">
- <Member Name="get_IsPinned" />
- <Member Name="get_LocalIndex" />
- <Member Name="get_LocalType" />
- <Member Name="SetLocalSymInfo(System.String)" />
- <Member Name="SetLocalSymInfo(System.String,System.Int32,System.Int32)" />
- <Member MemberType="Property" Name="IsPinned" />
- <Member MemberType="Property" Name="LocalIndex" />
- <Member MemberType="Property" Name="LocalType" />
- </Type>
- <Type Name="System.Reflection.Emit.MethodBuilder">
- <Member Name="DefineGenericParameters(System.String[])" />
- <Member Name="DefineParameter(System.Int32,System.Reflection.ParameterAttributes,System.String)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Attributes" />
- <Member Name="get_CallingConvention" />
- <Member Name="get_ContainsGenericParameters" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_InitLocals" />
- <Member Name="get_IsGenericMethod" />
- <Member Name="get_IsGenericMethodDefinition" />
- <Member Name="get_MethodHandle" />
- <Member Name="get_Module" />
- <Member Name="get_Name" />
- <Member Name="get_ReflectedType" />
- <Member Name="get_ReturnParameter" />
- <Member Name="get_ReturnTypeCustomAttributes" />
- <Member Name="get_Signature" />
- <Member Name="GetBaseDefinition" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetGenericArguments" />
- <Member Name="GetGenericMethodDefinition" />
- <Member Name="GetHashCode" />
- <Member Name="GetILGenerator" />
- <Member Name="GetILGenerator(System.Int32)" />
- <Member Name="GetMethodImplementationFlags" />
- <Member Name="GetModule" />
- <Member Name="GetParameters" />
- <Member Name="GetToken" />
- <Member Name="Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="MakeGenericMethod(System.Type[])" />
- <Member Name="set_InitLocals(System.Boolean)" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member Name="SetImplementationFlags(System.Reflection.MethodImplAttributes)" />
- <Member Name="SetParameters(System.Type[])" />
- <Member Name="SetReturnType(System.Type)" />
- <Member Name="SetSignature(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][])" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="CallingConvention" />
- <Member MemberType="Property" Name="ContainsGenericParameters" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="InitLocals" />
- <Member MemberType="Property" Name="IsGenericMethod" />
- <Member MemberType="Property" Name="IsGenericMethodDefinition" />
- <Member MemberType="Property" Name="MethodHandle" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ReflectedType" />
- <Member MemberType="Property" Name="ReturnParameter" />
- <Member MemberType="Property" Name="ReturnTypeCustomAttributes" />
- <Member MemberType="Property" Name="Signature" />
- </Type>
- <Type Name="System.Reflection.Emit.MethodToken">
- <Member MemberType="Field" Name="Empty" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.MethodToken)" />
- <Member Name="get_Token" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.MethodToken,System.Reflection.Emit.MethodToken)" />
- <Member Name="op_Inequality(System.Reflection.Emit.MethodToken,System.Reflection.Emit.MethodToken)" />
- <Member MemberType="Property" Name="Token" />
- </Type>
- <Type Name="System.Reflection.Emit.ModuleBuilder">
- <Member Name="CreateGlobalFunctions" />
- <Member Name="DefineDocument(System.String,System.Guid,System.Guid,System.Guid)" />
- <Member Name="DefineEnum(System.String,System.Reflection.TypeAttributes,System.Type)" />
- <Member Name="DefineGlobalMethod(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[])" />
- <Member Name="DefineGlobalMethod(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][])" />
- <Member Name="DefineGlobalMethod(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[])" />
- <Member Name="DefineInitializedData(System.String,System.Byte[],System.Reflection.FieldAttributes)" />
- <Member Name="DefineType(System.String)" />
- <Member Name="DefineType(System.String,System.Reflection.TypeAttributes)" />
- <Member Name="DefineType(System.String,System.Reflection.TypeAttributes,System.Type)" />
- <Member Name="DefineType(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32)" />
- <Member Name="DefineType(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize)" />
- <Member Name="DefineType(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32)" />
- <Member Name="DefineType(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[])" />
- <Member Name="DefineUninitializedData(System.String,System.Int32,System.Reflection.FieldAttributes)" />
- <Member Name="get_FullyQualifiedName" />
- <Member Name="GetArrayMethod(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[])" />
- <Member Name="GetArrayMethodToken(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[])" />
- <Member Name="GetConstructorToken(System.Reflection.ConstructorInfo)" />
- <Member Name="GetFieldToken(System.Reflection.FieldInfo)" />
- <Member Name="GetMethodToken(System.Reflection.MethodInfo)" />
- <Member Name="GetSignatureToken(System.Byte[],System.Int32)" />
- <Member Name="GetSignatureToken(System.Reflection.Emit.SignatureHelper)" />
- <Member Name="GetStringConstant(System.String)" />
- <Member Name="GetType(System.String)" />
- <Member Name="GetType(System.String,System.Boolean)" />
- <Member Name="GetType(System.String,System.Boolean,System.Boolean)" />
- <Member Name="GetTypes" />
- <Member Name="GetTypeToken(System.String)" />
- <Member Name="GetTypeToken(System.Type)" />
- <Member Name="IsTransient" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member MemberType="Property" Name="FullyQualifiedName" />
- </Type>
- <Type Name="System.Reflection.Emit.OpCode">
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.OpCode)" />
- <Member Name="get_FlowControl" />
- <Member Name="get_Name" />
- <Member Name="get_OpCodeType" />
- <Member Name="get_OperandType" />
- <Member Name="get_Size" />
- <Member Name="get_StackBehaviourPop" />
- <Member Name="get_StackBehaviourPush" />
- <Member Name="get_Value" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.OpCode,System.Reflection.Emit.OpCode)" />
- <Member Name="op_Inequality(System.Reflection.Emit.OpCode,System.Reflection.Emit.OpCode)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="FlowControl" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="OpCodeType" />
- <Member MemberType="Property" Name="OperandType" />
- <Member MemberType="Property" Name="Size" />
- <Member MemberType="Property" Name="StackBehaviourPop" />
- <Member MemberType="Property" Name="StackBehaviourPush" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Reflection.Emit.OpCodes">
- <Member MemberType="Field" Name="Add" />
- <Member MemberType="Field" Name="Add_Ovf" />
- <Member MemberType="Field" Name="Add_Ovf_Un" />
- <Member MemberType="Field" Name="And" />
- <Member MemberType="Field" Name="Arglist" />
- <Member MemberType="Field" Name="Beq" />
- <Member MemberType="Field" Name="Beq_S" />
- <Member MemberType="Field" Name="Bge" />
- <Member MemberType="Field" Name="Bge_S" />
- <Member MemberType="Field" Name="Bge_Un" />
- <Member MemberType="Field" Name="Bge_Un_S" />
- <Member MemberType="Field" Name="Bgt" />
- <Member MemberType="Field" Name="Bgt_S" />
- <Member MemberType="Field" Name="Bgt_Un" />
- <Member MemberType="Field" Name="Bgt_Un_S" />
- <Member MemberType="Field" Name="Ble" />
- <Member MemberType="Field" Name="Ble_S" />
- <Member MemberType="Field" Name="Ble_Un" />
- <Member MemberType="Field" Name="Ble_Un_S" />
- <Member MemberType="Field" Name="Blt" />
- <Member MemberType="Field" Name="Blt_S" />
- <Member MemberType="Field" Name="Blt_Un" />
- <Member MemberType="Field" Name="Blt_Un_S" />
- <Member MemberType="Field" Name="Bne_Un" />
- <Member MemberType="Field" Name="Bne_Un_S" />
- <Member MemberType="Field" Name="Box" />
- <Member MemberType="Field" Name="Br" />
- <Member MemberType="Field" Name="Br_S" />
- <Member MemberType="Field" Name="Break" />
- <Member MemberType="Field" Name="Brfalse" />
- <Member MemberType="Field" Name="Brfalse_S" />
- <Member MemberType="Field" Name="Brtrue" />
- <Member MemberType="Field" Name="Brtrue_S" />
- <Member MemberType="Field" Name="Call" />
- <Member MemberType="Field" Name="Calli" />
- <Member MemberType="Field" Name="Callvirt" />
- <Member MemberType="Field" Name="Castclass" />
- <Member MemberType="Field" Name="Ceq" />
- <Member MemberType="Field" Name="Cgt" />
- <Member MemberType="Field" Name="Cgt_Un" />
- <Member MemberType="Field" Name="Ckfinite" />
- <Member MemberType="Field" Name="Clt" />
- <Member MemberType="Field" Name="Clt_Un" />
- <Member MemberType="Field" Name="Constrained" />
- <Member MemberType="Field" Name="Conv_I" />
- <Member MemberType="Field" Name="Conv_I1" />
- <Member MemberType="Field" Name="Conv_I2" />
- <Member MemberType="Field" Name="Conv_I4" />
- <Member MemberType="Field" Name="Conv_I8" />
- <Member MemberType="Field" Name="Conv_Ovf_I" />
- <Member MemberType="Field" Name="Conv_Ovf_I_Un" />
- <Member MemberType="Field" Name="Conv_Ovf_I1" />
- <Member MemberType="Field" Name="Conv_Ovf_I1_Un" />
- <Member MemberType="Field" Name="Conv_Ovf_I2" />
- <Member MemberType="Field" Name="Conv_Ovf_I2_Un" />
- <Member MemberType="Field" Name="Conv_Ovf_I4" />
- <Member MemberType="Field" Name="Conv_Ovf_I4_Un" />
- <Member MemberType="Field" Name="Conv_Ovf_I8" />
- <Member MemberType="Field" Name="Conv_Ovf_I8_Un" />
- <Member MemberType="Field" Name="Conv_Ovf_U" />
- <Member MemberType="Field" Name="Conv_Ovf_U_Un" />
- <Member MemberType="Field" Name="Conv_Ovf_U1" />
- <Member MemberType="Field" Name="Conv_Ovf_U1_Un" />
- <Member MemberType="Field" Name="Conv_Ovf_U2" />
- <Member MemberType="Field" Name="Conv_Ovf_U2_Un" />
- <Member MemberType="Field" Name="Conv_Ovf_U4" />
- <Member MemberType="Field" Name="Conv_Ovf_U4_Un" />
- <Member MemberType="Field" Name="Conv_Ovf_U8" />
- <Member MemberType="Field" Name="Conv_Ovf_U8_Un" />
- <Member MemberType="Field" Name="Conv_R_Un" />
- <Member MemberType="Field" Name="Conv_R4" />
- <Member MemberType="Field" Name="Conv_R8" />
- <Member MemberType="Field" Name="Conv_U" />
- <Member MemberType="Field" Name="Conv_U1" />
- <Member MemberType="Field" Name="Conv_U2" />
- <Member MemberType="Field" Name="Conv_U4" />
- <Member MemberType="Field" Name="Conv_U8" />
- <Member MemberType="Field" Name="Cpblk" />
- <Member MemberType="Field" Name="Cpobj" />
- <Member MemberType="Field" Name="Div" />
- <Member MemberType="Field" Name="Div_Un" />
- <Member MemberType="Field" Name="Dup" />
- <Member MemberType="Field" Name="Endfilter" />
- <Member MemberType="Field" Name="Endfinally" />
- <Member MemberType="Field" Name="Initblk" />
- <Member MemberType="Field" Name="Initobj" />
- <Member MemberType="Field" Name="Isinst" />
- <Member MemberType="Field" Name="Jmp" />
- <Member MemberType="Field" Name="Ldarg" />
- <Member MemberType="Field" Name="Ldarg_0" />
- <Member MemberType="Field" Name="Ldarg_1" />
- <Member MemberType="Field" Name="Ldarg_2" />
- <Member MemberType="Field" Name="Ldarg_3" />
- <Member MemberType="Field" Name="Ldarg_S" />
- <Member MemberType="Field" Name="Ldarga" />
- <Member MemberType="Field" Name="Ldarga_S" />
- <Member MemberType="Field" Name="Ldc_I4" />
- <Member MemberType="Field" Name="Ldc_I4_0" />
- <Member MemberType="Field" Name="Ldc_I4_1" />
- <Member MemberType="Field" Name="Ldc_I4_2" />
- <Member MemberType="Field" Name="Ldc_I4_3" />
- <Member MemberType="Field" Name="Ldc_I4_4" />
- <Member MemberType="Field" Name="Ldc_I4_5" />
- <Member MemberType="Field" Name="Ldc_I4_6" />
- <Member MemberType="Field" Name="Ldc_I4_7" />
- <Member MemberType="Field" Name="Ldc_I4_8" />
- <Member MemberType="Field" Name="Ldc_I4_M1" />
- <Member MemberType="Field" Name="Ldc_I4_S" />
- <Member MemberType="Field" Name="Ldc_I8" />
- <Member MemberType="Field" Name="Ldc_R4" />
- <Member MemberType="Field" Name="Ldc_R8" />
- <Member MemberType="Field" Name="Ldelem" />
- <Member MemberType="Field" Name="Ldelem_I" />
- <Member MemberType="Field" Name="Ldelem_I1" />
- <Member MemberType="Field" Name="Ldelem_I2" />
- <Member MemberType="Field" Name="Ldelem_I4" />
- <Member MemberType="Field" Name="Ldelem_I8" />
- <Member MemberType="Field" Name="Ldelem_R4" />
- <Member MemberType="Field" Name="Ldelem_R8" />
- <Member MemberType="Field" Name="Ldelem_Ref" />
- <Member MemberType="Field" Name="Ldelem_U1" />
- <Member MemberType="Field" Name="Ldelem_U2" />
- <Member MemberType="Field" Name="Ldelem_U4" />
- <Member MemberType="Field" Name="Ldelema" />
- <Member MemberType="Field" Name="Ldfld" />
- <Member MemberType="Field" Name="Ldflda" />
- <Member MemberType="Field" Name="Ldftn" />
- <Member MemberType="Field" Name="Ldind_I" />
- <Member MemberType="Field" Name="Ldind_I1" />
- <Member MemberType="Field" Name="Ldind_I2" />
- <Member MemberType="Field" Name="Ldind_I4" />
- <Member MemberType="Field" Name="Ldind_I8" />
- <Member MemberType="Field" Name="Ldind_R4" />
- <Member MemberType="Field" Name="Ldind_R8" />
- <Member MemberType="Field" Name="Ldind_Ref" />
- <Member MemberType="Field" Name="Ldind_U1" />
- <Member MemberType="Field" Name="Ldind_U2" />
- <Member MemberType="Field" Name="Ldind_U4" />
- <Member MemberType="Field" Name="Ldlen" />
- <Member MemberType="Field" Name="Ldloc" />
- <Member MemberType="Field" Name="Ldloc_0" />
- <Member MemberType="Field" Name="Ldloc_1" />
- <Member MemberType="Field" Name="Ldloc_2" />
- <Member MemberType="Field" Name="Ldloc_3" />
- <Member MemberType="Field" Name="Ldloc_S" />
- <Member MemberType="Field" Name="Ldloca" />
- <Member MemberType="Field" Name="Ldloca_S" />
- <Member MemberType="Field" Name="Ldnull" />
- <Member MemberType="Field" Name="Ldobj" />
- <Member MemberType="Field" Name="Ldsfld" />
- <Member MemberType="Field" Name="Ldsflda" />
- <Member MemberType="Field" Name="Ldstr" />
- <Member MemberType="Field" Name="Ldtoken" />
- <Member MemberType="Field" Name="Ldvirtftn" />
- <Member MemberType="Field" Name="Leave" />
- <Member MemberType="Field" Name="Leave_S" />
- <Member MemberType="Field" Name="Localloc" />
- <Member MemberType="Field" Name="Mkrefany" />
- <Member MemberType="Field" Name="Mul" />
- <Member MemberType="Field" Name="Mul_Ovf" />
- <Member MemberType="Field" Name="Mul_Ovf_Un" />
- <Member MemberType="Field" Name="Neg" />
- <Member MemberType="Field" Name="Newarr" />
- <Member MemberType="Field" Name="Newobj" />
- <Member MemberType="Field" Name="Nop" />
- <Member MemberType="Field" Name="Not" />
- <Member MemberType="Field" Name="Or" />
- <Member MemberType="Field" Name="Pop" />
- <Member MemberType="Field" Name="Prefix1" />
- <Member MemberType="Field" Name="Prefix2" />
- <Member MemberType="Field" Name="Prefix3" />
- <Member MemberType="Field" Name="Prefix4" />
- <Member MemberType="Field" Name="Prefix5" />
- <Member MemberType="Field" Name="Prefix6" />
- <Member MemberType="Field" Name="Prefix7" />
- <Member MemberType="Field" Name="Prefixref" />
- <Member MemberType="Field" Name="Readonly" />
- <Member MemberType="Field" Name="Refanytype" />
- <Member MemberType="Field" Name="Refanyval" />
- <Member MemberType="Field" Name="Rem" />
- <Member MemberType="Field" Name="Rem_Un" />
- <Member MemberType="Field" Name="Ret" />
- <Member MemberType="Field" Name="Rethrow" />
- <Member MemberType="Field" Name="Shl" />
- <Member MemberType="Field" Name="Shr" />
- <Member MemberType="Field" Name="Shr_Un" />
- <Member MemberType="Field" Name="Sizeof" />
- <Member MemberType="Field" Name="Starg" />
- <Member MemberType="Field" Name="Starg_S" />
- <Member MemberType="Field" Name="Stelem" />
- <Member MemberType="Field" Name="Stelem_I" />
- <Member MemberType="Field" Name="Stelem_I1" />
- <Member MemberType="Field" Name="Stelem_I2" />
- <Member MemberType="Field" Name="Stelem_I4" />
- <Member MemberType="Field" Name="Stelem_I8" />
- <Member MemberType="Field" Name="Stelem_R4" />
- <Member MemberType="Field" Name="Stelem_R8" />
- <Member MemberType="Field" Name="Stelem_Ref" />
- <Member MemberType="Field" Name="Stfld" />
- <Member MemberType="Field" Name="Stind_I" />
- <Member MemberType="Field" Name="Stind_I1" />
- <Member MemberType="Field" Name="Stind_I2" />
- <Member MemberType="Field" Name="Stind_I4" />
- <Member MemberType="Field" Name="Stind_I8" />
- <Member MemberType="Field" Name="Stind_R4" />
- <Member MemberType="Field" Name="Stind_R8" />
- <Member MemberType="Field" Name="Stind_Ref" />
- <Member MemberType="Field" Name="Stloc" />
- <Member MemberType="Field" Name="Stloc_0" />
- <Member MemberType="Field" Name="Stloc_1" />
- <Member MemberType="Field" Name="Stloc_2" />
- <Member MemberType="Field" Name="Stloc_3" />
- <Member MemberType="Field" Name="Stloc_S" />
- <Member MemberType="Field" Name="Stobj" />
- <Member MemberType="Field" Name="Stsfld" />
- <Member MemberType="Field" Name="Sub" />
- <Member MemberType="Field" Name="Sub_Ovf" />
- <Member MemberType="Field" Name="Sub_Ovf_Un" />
- <Member MemberType="Field" Name="Switch" />
- <Member MemberType="Field" Name="Tailcall" />
- <Member MemberType="Field" Name="Throw" />
- <Member MemberType="Field" Name="Unaligned" />
- <Member MemberType="Field" Name="Unbox" />
- <Member MemberType="Field" Name="Unbox_Any" />
- <Member MemberType="Field" Name="Volatile" />
- <Member MemberType="Field" Name="Xor" />
- <Member Name="TakesSingleByteArgument(System.Reflection.Emit.OpCode)" />
- </Type>
- <Type Name="System.Reflection.Emit.OpCodeType">
- <Member MemberType="Field" Name="Annotation" />
- <Member MemberType="Field" Name="Macro" />
- <Member MemberType="Field" Name="Nternal" />
- <Member MemberType="Field" Name="Objmodel" />
- <Member MemberType="Field" Name="Prefix" />
- <Member MemberType="Field" Name="Primitive" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.Emit.OperandType">
- <Member MemberType="Field" Name="InlineBrTarget" />
- <Member MemberType="Field" Name="InlineField" />
- <Member MemberType="Field" Name="InlineI" />
- <Member MemberType="Field" Name="InlineI8" />
- <Member MemberType="Field" Name="InlineMethod" />
- <Member MemberType="Field" Name="InlineNone" />
- <Member MemberType="Field" Name="InlinePhi" />
- <Member MemberType="Field" Name="InlineR" />
- <Member MemberType="Field" Name="InlineSig" />
- <Member MemberType="Field" Name="InlineString" />
- <Member MemberType="Field" Name="InlineSwitch" />
- <Member MemberType="Field" Name="InlineTok" />
- <Member MemberType="Field" Name="InlineType" />
- <Member MemberType="Field" Name="InlineVar" />
- <Member MemberType="Field" Name="ShortInlineBrTarget" />
- <Member MemberType="Field" Name="ShortInlineI" />
- <Member MemberType="Field" Name="ShortInlineR" />
- <Member MemberType="Field" Name="ShortInlineVar" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.Emit.PackingSize">
- <Member MemberType="Field" Name="Size1" />
- <Member MemberType="Field" Name="Size128" />
- <Member MemberType="Field" Name="Size16" />
- <Member MemberType="Field" Name="Size2" />
- <Member MemberType="Field" Name="Size32" />
- <Member MemberType="Field" Name="Size4" />
- <Member MemberType="Field" Name="Size64" />
- <Member MemberType="Field" Name="Size8" />
- <Member MemberType="Field" Name="Unspecified" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.Emit.ParameterBuilder">
- <Member Name="get_Attributes" />
- <Member Name="get_IsIn" />
- <Member Name="get_IsOptional" />
- <Member Name="get_IsOut" />
- <Member Name="get_Name" />
- <Member Name="get_Position" />
- <Member Name="GetToken" />
- <Member Name="SetConstant(System.Object)" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="IsIn" />
- <Member MemberType="Property" Name="IsOptional" />
- <Member MemberType="Property" Name="IsOut" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Position" />
- </Type>
- <Type Name="System.Reflection.Emit.ParameterToken">
- <Member MemberType="Field" Name="Empty" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.ParameterToken)" />
- <Member Name="get_Token" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.ParameterToken,System.Reflection.Emit.ParameterToken)" />
- <Member Name="op_Inequality(System.Reflection.Emit.ParameterToken,System.Reflection.Emit.ParameterToken)" />
- <Member MemberType="Property" Name="Token" />
- </Type>
- <Type Name="System.Reflection.Emit.PEFileKinds">
- <Member MemberType="Field" Name="ConsoleApplication" />
- <Member MemberType="Field" Name="Dll" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="WindowApplication" />
- </Type>
- <Type Name="System.Reflection.Emit.PropertyBuilder">
- <Member Name="AddOtherMethod(System.Reflection.Emit.MethodBuilder)" />
- <Member Name="get_Attributes" />
- <Member Name="get_CanRead" />
- <Member Name="get_CanWrite" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_Module" />
- <Member Name="get_Name" />
- <Member Name="get_PropertyToken" />
- <Member Name="get_PropertyType" />
- <Member Name="get_ReflectedType" />
- <Member Name="GetAccessors(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetGetMethod(System.Boolean)" />
- <Member Name="GetIndexParameters" />
- <Member Name="GetSetMethod(System.Boolean)" />
- <Member Name="GetValue(System.Object,System.Object[])" />
- <Member Name="GetValue(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="SetConstant(System.Object)" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member Name="SetGetMethod(System.Reflection.Emit.MethodBuilder)" />
- <Member Name="SetSetMethod(System.Reflection.Emit.MethodBuilder)" />
- <Member Name="SetValue(System.Object,System.Object,System.Object[])" />
- <Member Name="SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="CanRead" />
- <Member MemberType="Property" Name="CanWrite" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="PropertyToken" />
- <Member MemberType="Property" Name="PropertyType" />
- <Member MemberType="Property" Name="ReflectedType" />
- </Type>
- <Type Name="System.Reflection.Emit.PropertyToken">
- <Member MemberType="Field" Name="Empty" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.PropertyToken)" />
- <Member Name="get_Token" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.PropertyToken,System.Reflection.Emit.PropertyToken)" />
- <Member Name="op_Inequality(System.Reflection.Emit.PropertyToken,System.Reflection.Emit.PropertyToken)" />
- <Member MemberType="Property" Name="Token" />
- </Type>
- <Type Name="System.Reflection.Emit.SignatureHelper">
- <Member Name="AddArgument(System.Type)" />
- <Member Name="AddArgument(System.Type,System.Boolean)" />
- <Member Name="AddArgument(System.Type,System.Type[],System.Type[])" />
- <Member Name="AddArguments(System.Type[],System.Type[][],System.Type[][])" />
- <Member Name="AddSentinel" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetFieldSigHelper(System.Reflection.Module)" />
- <Member Name="GetHashCode" />
- <Member Name="GetLocalVarSigHelper" />
- <Member Name="GetLocalVarSigHelper(System.Reflection.Module)" />
- <Member Name="GetMethodSigHelper(System.Reflection.CallingConventions,System.Type)" />
- <Member Name="GetMethodSigHelper(System.Reflection.Module,System.Reflection.CallingConventions,System.Type)" />
- <Member Name="GetMethodSigHelper(System.Reflection.Module,System.Runtime.InteropServices.CallingConvention,System.Type)" />
- <Member Name="GetMethodSigHelper(System.Reflection.Module,System.Type,System.Type[])" />
- <Member Name="GetMethodSigHelper(System.Runtime.InteropServices.CallingConvention,System.Type)" />
- <Member Name="GetPropertySigHelper(System.Reflection.Module,System.Type,System.Type[])" />
- <Member Name="GetPropertySigHelper(System.Reflection.Module,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][])" />
- <Member Name="GetPropertySigHelper(System.Reflection.Module,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][])" />
- <Member Name="GetSignature" />
- <Member Name="ToString" />
- </Type>
- <Type Name="System.Reflection.Emit.SignatureToken">
- <Member MemberType="Field" Name="Empty" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.SignatureToken)" />
- <Member Name="get_Token" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.SignatureToken,System.Reflection.Emit.SignatureToken)" />
- <Member Name="op_Inequality(System.Reflection.Emit.SignatureToken,System.Reflection.Emit.SignatureToken)" />
- <Member MemberType="Property" Name="Token" />
- </Type>
- <Type Name="System.Reflection.Emit.StackBehaviour">
- <Member MemberType="Field" Name="Pop0" />
- <Member MemberType="Field" Name="Pop1" />
- <Member MemberType="Field" Name="Pop1_pop1" />
- <Member MemberType="Field" Name="Popi" />
- <Member MemberType="Field" Name="Popi_pop1" />
- <Member MemberType="Field" Name="Popi_popi" />
- <Member MemberType="Field" Name="Popi_popi_popi" />
- <Member MemberType="Field" Name="Popi_popi8" />
- <Member MemberType="Field" Name="Popi_popr4" />
- <Member MemberType="Field" Name="Popi_popr8" />
- <Member MemberType="Field" Name="Popref" />
- <Member MemberType="Field" Name="Popref_pop1" />
- <Member MemberType="Field" Name="Popref_popi" />
- <Member MemberType="Field" Name="Popref_popi_pop1" />
- <Member MemberType="Field" Name="Popref_popi_popi" />
- <Member MemberType="Field" Name="Popref_popi_popi8" />
- <Member MemberType="Field" Name="Popref_popi_popr4" />
- <Member MemberType="Field" Name="Popref_popi_popr8" />
- <Member MemberType="Field" Name="Popref_popi_popref" />
- <Member MemberType="Field" Name="Push0" />
- <Member MemberType="Field" Name="Push1" />
- <Member MemberType="Field" Name="Push1_push1" />
- <Member MemberType="Field" Name="Pushi" />
- <Member MemberType="Field" Name="Pushi8" />
- <Member MemberType="Field" Name="Pushr4" />
- <Member MemberType="Field" Name="Pushr8" />
- <Member MemberType="Field" Name="Pushref" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="Varpop" />
- <Member MemberType="Field" Name="Varpush" />
- </Type>
- <Type Name="System.Reflection.Emit.StringToken">
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.StringToken)" />
- <Member Name="get_Token" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.StringToken,System.Reflection.Emit.StringToken)" />
- <Member Name="op_Inequality(System.Reflection.Emit.StringToken,System.Reflection.Emit.StringToken)" />
- <Member MemberType="Property" Name="Token" />
- </Type>
- <Type Name="System.Reflection.Emit.TypeBuilder">
- <Member MemberType="Field" Name="UnspecifiedTypeSize" />
- <Member Name="AddInterfaceImplementation(System.Type)" />
- <Member Name="CreateType" />
- <Member Name="IsAssignableFrom(System.Reflection.TypeInfo)" />
- <Member Name="CreateTypeInfo" />
- <Member Name="DefineConstructor(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[])" />
- <Member Name="DefineConstructor(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][])" />
- <Member Name="DefineDefaultConstructor(System.Reflection.MethodAttributes)" />
- <Member Name="DefineEvent(System.String,System.Reflection.EventAttributes,System.Type)" />
- <Member Name="DefineField(System.String,System.Type,System.Reflection.FieldAttributes)" />
- <Member Name="DefineField(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes)" />
- <Member Name="DefineGenericParameters(System.String[])" />
- <Member Name="DefineInitializedData(System.String,System.Byte[],System.Reflection.FieldAttributes)" />
- <Member Name="DefineMethod(System.String,System.Reflection.MethodAttributes)" />
- <Member Name="DefineMethod(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions)" />
- <Member Name="DefineMethod(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[])" />
- <Member Name="DefineMethod(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][])" />
- <Member Name="DefineMethod(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[])" />
- <Member Name="DefineMethodOverride(System.Reflection.MethodInfo,System.Reflection.MethodInfo)" />
- <Member Name="DefineNestedType(System.String)" />
- <Member Name="DefineNestedType(System.String,System.Reflection.TypeAttributes)" />
- <Member Name="DefineNestedType(System.String,System.Reflection.TypeAttributes,System.Type)" />
- <Member Name="DefineNestedType(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32)" />
- <Member Name="DefineNestedType(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize)" />
- <Member Name="DefineNestedType(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32)" />
- <Member Name="DefineNestedType(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[])" />
- <Member Name="DefineProperty(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[])" />
- <Member Name="DefineProperty(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][])" />
- <Member Name="DefineProperty(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[])" />
- <Member Name="DefineProperty(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][])" />
- <Member Name="DefineTypeInitializer" />
- <Member Name="DefineUninitializedData(System.String,System.Int32,System.Reflection.FieldAttributes)" />
- <Member Name="get_Assembly" />
- <Member Name="get_AssemblyQualifiedName" />
- <Member Name="get_BaseType" />
- <Member Name="get_DeclaringMethod" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_FullName" />
- <Member Name="get_GenericParameterAttributes" />
- <Member Name="get_GenericParameterPosition" />
- <Member Name="get_GUID" />
- <Member Name="get_IsGenericParameter" />
- <Member Name="get_IsGenericType" />
- <Member Name="get_IsGenericTypeDefinition" />
- <Member Name="get_Module" />
- <Member Name="get_Name" />
- <Member Name="get_Namespace" />
- <Member Name="get_PackingSize" />
- <Member Name="get_ReflectedType" />
- <Member Name="get_Size" />
- <Member Name="get_TypeHandle" />
- <Member Name="get_TypeToken" />
- <Member Name="get_UnderlyingSystemType" />
- <Member Name="GetAttributeFlagsImpl" />
- <Member Name="GetConstructor(System.Type,System.Reflection.ConstructorInfo)" />
- <Member Name="GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetConstructors(System.Reflection.BindingFlags)" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetElementType" />
- <Member Name="GetEvent(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetEvents" />
- <Member Name="GetEvents(System.Reflection.BindingFlags)" />
- <Member Name="GetField(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetField(System.Type,System.Reflection.FieldInfo)" />
- <Member Name="GetFields(System.Reflection.BindingFlags)" />
- <Member Name="GetGenericArguments" />
- <Member Name="GetGenericTypeDefinition" />
- <Member Name="GetInterface(System.String,System.Boolean)" />
- <Member Name="GetInterfaceMap(System.Type)" />
- <Member Name="GetInterfaces" />
- <Member Name="GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags)" />
- <Member Name="GetMembers(System.Reflection.BindingFlags)" />
- <Member Name="GetMethod(System.Type,System.Reflection.MethodInfo)" />
- <Member Name="GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethods(System.Reflection.BindingFlags)" />
- <Member Name="GetNestedType(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetNestedTypes(System.Reflection.BindingFlags)" />
- <Member Name="GetProperties(System.Reflection.BindingFlags)" />
- <Member Name="GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="HasElementTypeImpl" />
- <Member Name="InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[])" />
- <Member Name="IsArrayImpl" />
- <Member Name="IsAssignableFrom(System.Type)" />
- <Member Name="IsByRefImpl" />
- <Member Name="IsCOMObjectImpl" />
- <Member Name="IsCreated" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="IsPointerImpl" />
- <Member Name="IsPrimitiveImpl" />
- <Member Name="IsSubclassOf(System.Type)" />
- <Member Name="MakeArrayType" />
- <Member Name="MakeArrayType(System.Int32)" />
- <Member Name="MakeByRefType" />
- <Member Name="MakeGenericType(System.Type[])" />
- <Member Name="MakePointerType" />
- <Member Name="SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[])" />
- <Member Name="SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder)" />
- <Member Name="SetParent(System.Type)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Assembly" />
- <Member MemberType="Property" Name="AssemblyQualifiedName" />
- <Member MemberType="Property" Name="BaseType" />
- <Member MemberType="Property" Name="DeclaringMethod" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="FullName" />
- <Member MemberType="Property" Name="GenericParameterAttributes" />
- <Member MemberType="Property" Name="GenericParameterPosition" />
- <Member MemberType="Property" Name="GUID" />
- <Member MemberType="Property" Name="IsGenericParameter" />
- <Member MemberType="Property" Name="IsGenericType" />
- <Member MemberType="Property" Name="IsGenericTypeDefinition" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Namespace" />
- <Member MemberType="Property" Name="PackingSize" />
- <Member MemberType="Property" Name="ReflectedType" />
- <Member MemberType="Property" Name="Size" />
- <Member MemberType="Property" Name="TypeHandle" />
- <Member MemberType="Property" Name="TypeToken" />
- <Member MemberType="Property" Name="UnderlyingSystemType" />
- </Type>
- <Type Name="System.Reflection.Emit.TypeToken">
- <Member MemberType="Field" Name="Empty" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Reflection.Emit.TypeToken)" />
- <Member Name="get_Token" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Reflection.Emit.TypeToken,System.Reflection.Emit.TypeToken)" />
- <Member Name="op_Inequality(System.Reflection.Emit.TypeToken,System.Reflection.Emit.TypeToken)" />
- <Member MemberType="Property" Name="Token" />
- </Type>
- <Type Name="System.Reflection.EventAttributes">
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="ReservedMask" />
- <Member MemberType="Field" Name="RTSpecialName" />
- <Member MemberType="Field" Name="SpecialName" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.EventInfo">
- <Member Name="#ctor" />
- <Member Name="op_Equality(System.Reflection.EventInfo,System.Reflection.EventInfo)" />
- <Member Name="op_Inequality(System.Reflection.EventInfo,System.Reflection.EventInfo)" />
- <Member Name="AddEventHandler(System.Object,System.Delegate)" />
- <Member Name="get_Attributes" />
- <Member Name="get_AddMethod" />
- <Member Name="get_RaiseMethod" />
- <Member Name="get_RemoveMethod" />
- <Member Name="get_EventHandlerType" />
- <Member Name="get_IsMulticast" />
- <Member Name="get_IsSpecialName" />
- <Member Name="get_MemberType" />
- <Member Name="GetAddMethod" />
- <Member Name="GetAddMethod(System.Boolean)" />
- <Member Name="GetOtherMethods" />
- <Member Name="GetOtherMethods(System.Boolean)" />
- <Member Name="GetRaiseMethod" />
- <Member Name="GetRaiseMethod(System.Boolean)" />
- <Member Name="GetRemoveMethod" />
- <Member Name="GetRemoveMethod(System.Boolean)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="RemoveEventHandler(System.Object,System.Delegate)" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="AddMethod" />
- <Member MemberType="Property" Name="RaiseMethod" />
- <Member MemberType="Property" Name="RemoveMethod" />
- <Member MemberType="Property" Name="EventHandlerType" />
- <Member MemberType="Property" Name="IsMulticast" />
- <Member MemberType="Property" Name="IsSpecialName" />
- <Member MemberType="Property" Name="MemberType" />
- </Type>
- <Type Name="System.Reflection.FieldAttributes">
- <Member MemberType="Field" Name="Assembly" />
- <Member MemberType="Field" Name="FamANDAssem" />
- <Member MemberType="Field" Name="Family" />
- <Member MemberType="Field" Name="FamORAssem" />
- <Member MemberType="Field" Name="FieldAccessMask" />
- <Member MemberType="Field" Name="HasDefault" />
- <Member MemberType="Field" Name="HasFieldMarshal" />
- <Member MemberType="Field" Name="HasFieldRVA" />
- <Member MemberType="Field" Name="InitOnly" />
- <Member MemberType="Field" Name="Literal" />
- <Member MemberType="Field" Name="NotSerialized" />
- <Member MemberType="Field" Name="PinvokeImpl" />
- <Member MemberType="Field" Name="Private" />
- <Member MemberType="Field" Name="PrivateScope" />
- <Member MemberType="Field" Name="Public" />
- <Member MemberType="Field" Name="ReservedMask" />
- <Member MemberType="Field" Name="RTSpecialName" />
- <Member MemberType="Field" Name="SpecialName" />
- <Member MemberType="Field" Name="Static" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.FieldInfo">
- <Member Name="#ctor" />
- <Member Name="op_Equality(System.Reflection.FieldInfo,System.Reflection.FieldInfo)" />
- <Member Name="op_Inequality(System.Reflection.FieldInfo,System.Reflection.FieldInfo)" />
- <Member Name="get_Attributes" />
- <Member Name="get_FieldHandle" />
- <Member Name="get_FieldType" />
- <Member Name="get_IsAssembly" />
- <Member Name="get_IsFamily" />
- <Member Name="get_IsFamilyAndAssembly" />
- <Member Name="get_IsFamilyOrAssembly" />
- <Member Name="get_IsInitOnly" />
- <Member Name="get_IsLiteral" />
- <Member Name="get_IsNotSerialized" />
- <Member Name="get_IsPinvokeImpl" />
- <Member Name="get_IsPrivate" />
- <Member Name="get_IsPublic" />
- <Member Name="get_IsSecurityCritical" />
- <Member Name="get_IsSecuritySafeCritical" />
- <Member Name="get_IsSecurityTransparent" />
- <Member Name="get_IsSpecialName" />
- <Member Name="get_IsStatic" />
- <Member Name="get_MemberType" />
- <Member Name="GetFieldFromHandle(System.RuntimeFieldHandle)" />
- <Member Name="GetFieldFromHandle(System.RuntimeFieldHandle,System.RuntimeTypeHandle)" />
- <Member Name="GetValue(System.Object)" />
- <Member Name="GetOptionalCustomModifiers" />
- <Member Name="GetRequiredCustomModifiers" />
- <Member Name="GetRawConstantValue" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="SetValue(System.Object,System.Object)" />
- <Member Name="SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo)" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="FieldHandle" />
- <Member MemberType="Property" Name="FieldType" />
- <Member MemberType="Property" Name="IsAssembly" />
- <Member MemberType="Property" Name="IsFamily" />
- <Member MemberType="Property" Name="IsFamilyAndAssembly" />
- <Member MemberType="Property" Name="IsFamilyOrAssembly" />
- <Member MemberType="Property" Name="IsInitOnly" />
- <Member MemberType="Property" Name="IsLiteral" />
- <Member MemberType="Property" Name="IsNotSerialized" />
- <Member MemberType="Property" Name="IsPinvokeImpl" />
- <Member MemberType="Property" Name="IsPrivate" />
- <Member MemberType="Property" Name="IsPublic" />
- <Member MemberType="Property" Name="IsSecurityCritical" />
- <Member MemberType="Property" Name="IsSecuritySafeCritical" />
- <Member MemberType="Property" Name="IsSecurityTransparent" />
- <Member MemberType="Property" Name="IsSpecialName" />
- <Member MemberType="Property" Name="IsStatic" />
- <Member MemberType="Property" Name="MemberType" />
- </Type>
- <Type Name="System.Reflection.ICustomAttributeProvider">
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- </Type>
- <Type Name="System.Reflection.ImageFileMachine">
- <Member MemberType="Field" Name="I386" />
- <Member MemberType="Field" Name="IA64" />
- <Member MemberType="Field" Name="AMD64" />
- <Member MemberType="Field" Name="ARM" />
- </Type>
- <Type Name="System.Reflection.InvalidFilterCriteriaException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Reflection.InterfaceMapping">
- <Member MemberType="Field" Name="InterfaceMethods" />
- <Member MemberType="Field" Name="InterfaceType" />
- <Member MemberType="Field" Name="TargetMethods" />
- <Member MemberType="Field" Name="TargetType" />
- </Type>
- <Type Name="System.Reflection.IReflect" >
- <Member Name="get_UnderlyingSystemType" />
- <Member Name="GetField(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetFields(System.Reflection.BindingFlags)" />
- <Member Name="GetMember(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetMembers(System.Reflection.BindingFlags)" />
- <Member Name="GetMethod(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethods(System.Reflection.BindingFlags)" />
- <Member Name="GetProperty(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetProperty(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetProperties(System.Reflection.BindingFlags)" />
- <Member Name="InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[])" />
- </Type>
- <Type Status="ImplRoot" Name="System.Reflection.LoaderAllocator">
- <Member Status="ImplRoot" Name="#ctor" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_slots" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_slotsUsed" />
- </Type>
- <Type Status="ApiRoot" Name="System.Reflection.ManifestResourceInfo">
- <Member Name="#ctor(System.Reflection.Assembly,System.String,System.Reflection.ResourceLocation)" />
- <Member MemberType="Property" Name="FileName" />
- <Member MemberType="Property" Name="ReferencedAssembly" />
- <Member MemberType="Property" Name="ResourceLocation" />
- </Type>
- <Type Name="System.Reflection.MemberInfo">
- <Member Name="#ctor" />
- <Member Name="op_Equality(System.Reflection.MemberInfo,System.Reflection.MemberInfo)" />
- <Member Name="op_Inequality(System.Reflection.MemberInfo,System.Reflection.MemberInfo)" />
- <Member Name="get_CustomAttributes" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_MemberType" />
- <Member Name="get_MetadataToken" />
- <Member Name="get_Name" />
- <Member Name="get_ReflectedType" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributesData" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member MemberType="Property" Name="CustomAttributes" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="MemberType" />
- <Member MemberType="Property" Name="MetadataToken" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ReflectedType" />
- </Type>
- <Type Name="System.Reflection.MemberTypes">
- <Member MemberType="Field" Name="All" />
- <Member MemberType="Field" Name="Constructor" />
- <Member MemberType="Field" Name="Custom" />
- <Member MemberType="Field" Name="Event" />
- <Member MemberType="Field" Name="Field" />
- <Member MemberType="Field" Name="Method" />
- <Member MemberType="Field" Name="NestedType" />
- <Member MemberType="Field" Name="Property" />
- <Member MemberType="Field" Name="TypeInfo" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.MethodAttributes">
- <Member MemberType="Field" Name="Abstract" />
- <Member MemberType="Field" Name="Assembly" />
- <Member MemberType="Field" Name="FamANDAssem" />
- <Member MemberType="Field" Name="Family" />
- <Member MemberType="Field" Name="FamORAssem" />
- <Member MemberType="Field" Name="Final" />
- <Member MemberType="Field" Name="HasSecurity" />
- <Member MemberType="Field" Name="HideBySig" />
- <Member MemberType="Field" Name="MemberAccessMask" />
- <Member MemberType="Field" Name="NewSlot" />
- <Member MemberType="Field" Name="PinvokeImpl" />
- <Member MemberType="Field" Name="Private" />
- <Member MemberType="Field" Name="PrivateScope" />
- <Member MemberType="Field" Name="Public" />
- <Member MemberType="Field" Name="RequireSecObject" />
- <Member MemberType="Field" Name="ReservedMask" />
- <Member MemberType="Field" Name="ReuseSlot" />
- <Member MemberType="Field" Name="RTSpecialName" />
- <Member MemberType="Field" Name="SpecialName" />
- <Member MemberType="Field" Name="Static" />
- <Member MemberType="Field" Name="UnmanagedExport" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="Virtual" />
- <Member MemberType="Field" Name="VtableLayoutMask" />
- </Type>
- <Type Name="System.Reflection.MethodBase">
- <Member Name="#ctor" />
- <Member Name="get_Attributes" />
- <Member Name="get_CallingConvention" />
- <Member Name="get_ContainsGenericParameters" />
- <Member Name="get_IsAbstract" />
- <Member Name="get_IsAssembly" />
- <Member Name="get_IsConstructor" />
- <Member Name="get_IsFamily" />
- <Member Name="get_IsFamilyAndAssembly" />
- <Member Name="get_IsFamilyOrAssembly" />
- <Member Name="get_IsFinal" />
- <Member Name="get_IsGenericMethod" />
- <Member Name="get_IsGenericMethodDefinition" />
- <Member Name="get_IsHideBySig" />
- <Member Name="get_IsPrivate" />
- <Member Name="get_IsPublic" />
- <Member Name="get_IsSpecialName" />
- <Member Name="get_IsStatic" />
- <Member Name="get_IsVirtual" />
- <Member Name="get_IsSecurityCritical" />
- <Member Name="get_IsSecuritySafeCritical" />
- <Member Name="get_IsSecurityTransparent" />
- <Member Name="get_MethodHandle" />
- <Member Name="get_MethodImplementationFlags" />
- <Member Name="GetGenericArguments" />
- <Member Status="ImplRoot" Name="GetMethodDesc" />
- <Member Name="GetMethodFromHandle(System.RuntimeMethodHandle)" />
- <Member Name="GetMethodFromHandle(System.RuntimeMethodHandle,System.RuntimeTypeHandle)" />
- <Member Name="GetMethodImplementationFlags" />
- <Member Name="GetParameters" />
- <Member Name="Equals(System.Object)" />
- <Member Name="op_Equality(System.Reflection.MethodBase,System.Reflection.MethodBase)" />
- <Member Name="op_Inequality(System.Reflection.MethodBase,System.Reflection.MethodBase)" />
- <Member Name="GetHashCode" />
- <Member Name="GetMethodBody" />
- <Member Name="Invoke(System.Object,System.Object[])" />
- <Member Name="Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="CallingConvention" />
- <Member MemberType="Property" Name="ContainsGenericParameters" />
- <Member MemberType="Property" Name="IsAbstract" />
- <Member MemberType="Property" Name="IsAssembly" />
- <Member MemberType="Property" Name="IsConstructor" />
- <Member MemberType="Property" Name="IsFamily" />
- <Member MemberType="Property" Name="IsFamilyAndAssembly" />
- <Member MemberType="Property" Name="IsFamilyOrAssembly" />
- <Member MemberType="Property" Name="IsFinal" />
- <Member MemberType="Property" Name="IsGenericMethod" />
- <Member MemberType="Property" Name="IsGenericMethodDefinition" />
- <Member MemberType="Property" Name="IsHideBySig" />
- <Member MemberType="Property" Name="IsPrivate" />
- <Member MemberType="Property" Name="IsPublic" />
- <Member MemberType="Property" Name="IsSpecialName" />
- <Member MemberType="Property" Name="IsStatic" />
- <Member MemberType="Property" Name="IsVirtual" />
- <Member MemberType="Property" Name="IsSecurityCritical" />
- <Member MemberType="Property" Name="IsSecuritySafeCritical" />
- <Member MemberType="Property" Name="IsSecurityTransparent" />
- <Member MemberType="Property" Name="MethodHandle" />
- <Member MemberType="Property" Name="MethodImplementationFlags" />
- <Member Name="GetCurrentMethod" />
- </Type>
- <Type Name="System.Reflection.MethodImplAttributes">
- <Member MemberType="Field" Name="AggressiveInlining" />
- <Member MemberType="Field" Name="CodeTypeMask" />
- <Member MemberType="Field" Name="ForwardRef" />
- <Member MemberType="Field" Name="IL" />
- <Member MemberType="Field" Name="InternalCall" />
- <Member MemberType="Field" Name="Managed" />
- <Member MemberType="Field" Name="ManagedMask" />
- <Member MemberType="Field" Name="MaxMethodImplVal" />
- <Member MemberType="Field" Name="Native" />
- <Member MemberType="Field" Name="NoInlining" />
- <Member MemberType="Field" Name="OPTIL" />
- <Member MemberType="Field" Name="PreserveSig" />
- <Member MemberType="Field" Name="Runtime" />
- <Member MemberType="Field" Name="Synchronized" />
- <Member MemberType="Field" Name="Unmanaged" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.MethodInfo">
- <Member Name="#ctor" />
- <Member Name="op_Equality(System.Reflection.MethodInfo,System.Reflection.MethodInfo)" />
- <Member Name="op_Inequality(System.Reflection.MethodInfo,System.Reflection.MethodInfo)" />
- <Member Name="get_MemberType" />
- <Member Name="get_ReturnParameter" />
- <Member Name="get_ReturnType" />
- <Member Name="get_ReturnTypeCustomAttributes" />
- <Member Name="GetBaseDefinition" />
- <Member Name="GetGenericArguments" />
- <Member Name="GetGenericMethodDefinition" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="MakeGenericMethod(System.Type[])" />
- <Member MemberType="Property" Name="MemberType" />
- <Member MemberType="Property" Name="ReturnParameter" />
- <Member MemberType="Property" Name="ReturnType" />
- <Member MemberType="Property" Name="ReturnTypeCustomAttributes" />
- </Type>
- <Type Name="System.Reflection.Missing">
- <Member MemberType="Field" Name="Value" />
- <Member Name="System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Reflection.Module">
- <Member Name="#ctor" />
- <Member Name="op_Equality(System.Reflection.Module,System.Reflection.Module)" />
- <Member Name="op_Inequality(System.Reflection.Module,System.Reflection.Module)" />
- <Member Name="get_Assembly" />
- <Member Name="get_CustomAttributes" />
- <Member Name="get_FullyQualifiedName" />
- <Member Name="get_MDStreamVersion" />
- <Member Name="get_MetadataToken" />
- <Member Name="get_ModuleHandle" />
- <Member Name="get_ModuleVersionId" />
- <Member Name="get_Name" />
- <Member Name="get_ScopeName" />
- <Member Name="FindTypes(System.Reflection.TypeFilter,System.Object)" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributesData" />
- <Member Name="GetField(System.String)" />
- <Member Name="GetField(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetFields" />
- <Member Name="GetFields(System.Reflection.BindingFlags)" />
- <Member Name="GetMethod(System.String)" />
- <Member Name="GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethod(System.String,System.Type[])" />
- <Member Name="GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethods" />
- <Member Name="GetMethods(System.Reflection.BindingFlags)" />
- <Member Name="GetPEKind(System.Reflection.PortableExecutableKinds@,System.Reflection.ImageFileMachine@)" />
- <Member Name="GetType(System.String)" />
- <Member Name="GetType(System.String,System.Boolean)" />
- <Member Name="GetType(System.String,System.Boolean,System.Boolean)" />
- <Member Name="GetTypes" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="IsResource" />
- <Member Name="ResolveMember(System.Int32)" />
- <Member Name="ResolveMember(System.Int32,System.Type[],System.Type[])" />
- <Member Name="ResolveMethod(System.Int32)" />
- <Member Name="ResolveMethod(System.Int32,System.Type[],System.Type[])" />
- <Member Name="ResolveField(System.Int32)" />
- <Member Name="ResolveField(System.Int32,System.Type[],System.Type[])" />
- <Member Name="ResolveSignature(System.Int32)" />
- <Member Name="ResolveString(System.Int32)" />
- <Member Name="ResolveType(System.Int32)" />
- <Member Name="ResolveType(System.Int32,System.Type[],System.Type[])" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Assembly" />
- <Member MemberType="Property" Name="CustomAttributes" />
- <Member MemberType="Property" Name="FullyQualifiedName" />
- <Member MemberType="Property" Name="MetadataToken" />
- <Member MemberType="Property" Name="ModuleVersionId" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ScopeName" />
- <Member MemberType="Field" Name="FilterTypeName" />
- <Member MemberType="Field" Name="FilterTypeNameIgnoreCase" />
- </Type>
- <Type Status="ImplRoot" Name="System.Reflection.RuntimeModule">
- <Member Status="ImplRoot" MemberType="Field" Name="m_pData" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="m_pFields" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="m_pGlobals" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="m_pRefClass" /> <!-- EE -->
- <Member Status="ImplRoot" MemberType="Field" Name="m_runtimeType" /> <!-- EE -->
- </Type>
- <Type Name="System.Reflection.ModuleResolveEventHandler">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,System.ResolveEventArgs,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object,System.ResolveEventArgs)" />
- </Type>
- <Type Name="System.Reflection.ObfuscateAssemblyAttribute">
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="get_AssemblyIsPrivate" />
- <Member Name="get_StripAfterObfuscation" />
- <Member Name="set_StripAfterObfuscation(System.Boolean)" />
- <Member MemberType="Property" Name="AssemblyIsPrivate" />
- <Member MemberType="Property" Name="StripAfterObfuscation" />
- </Type>
- <Type Name="System.Reflection.ObfuscationAttribute">
- <Member Name="#ctor" />
- <Member Name="get_ApplyToMembers" />
- <Member Name="get_Exclude" />
- <Member Name="get_Feature" />
- <Member Name="get_StripAfterObfuscation" />
- <Member Name="set_ApplyToMembers(System.Boolean)" />
- <Member Name="set_Exclude(System.Boolean)" />
- <Member Name="set_Feature(System.String)" />
- <Member Name="set_StripAfterObfuscation(System.Boolean)" />
- <Member MemberType="Property" Name="ApplyToMembers" />
- <Member MemberType="Property" Name="Exclude" />
- <Member MemberType="Property" Name="Feature" />
- <Member MemberType="Property" Name="StripAfterObfuscation" />
- </Type>
- <Type Name="System.Reflection.ParameterAttributes">
- <Member MemberType="Field" Name="HasDefault" />
- <Member MemberType="Field" Name="HasFieldMarshal" />
- <Member MemberType="Field" Name="In" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="Optional" />
- <Member MemberType="Field" Name="Out" />
- <Member MemberType="Field" Name="Reserved3" />
- <Member MemberType="Field" Name="Reserved4" />
- <Member MemberType="Field" Name="ReservedMask" />
- <Member MemberType="Field" Name="Retval" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.ParameterInfo">
- <Member MemberType="Field" Name="AttrsImpl" />
- <Member MemberType="Field" Name="ClassImpl" />
- <Member MemberType="Field" Name="DefaultValueImpl" />
- <Member MemberType="Field" Name="MemberImpl" />
- <Member MemberType="Field" Name="NameImpl" />
- <Member MemberType="Field" Name="PositionImpl" />
- <Member Name="#ctor" />
- <Member Name="get_Attributes" />
- <Member Name="get_CustomAttributes" />
- <Member Name="get_DefaultValue" />
- <Member Name="get_HasDefaultValue" />
- <Member Name="get_IsOptional" />
- <Member Name="get_IsOut" />
- <Member Name="get_IsIn" />
- <Member Name="get_IsLcid" />
- <Member Name="get_IsRetval" />
- <Member Name="get_Member" />
- <Member Name="get_MetadataToken" />
- <Member Name="get_Name" />
- <Member Name="get_ParameterType" />
- <Member Name="get_Position" />
- <Member Name="get_RawDefaultValue" />
- <Member Name="GetOptionalCustomModifiers" />
- <Member Name="GetRequiredCustomModifiers" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="GetCustomAttributesData" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="CustomAttributes" />
- <Member MemberType="Property" Name="DefaultValue" />
- <Member MemberType="Property" Name="HasDefaultValue" />
- <Member MemberType="Property" Name="IsOptional" />
- <Member MemberType="Property" Name="IsOut" />
- <Member MemberType="Property" Name="IsIn" />
- <Member MemberType="Property" Name="IsRetval" />
- <Member MemberType="Property" Name="Member" />
- <Member MemberType="Property" Name="MetadataToken" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ParameterType" />
- <Member MemberType="Property" Name="Position" />
- <Member MemberType="Property" Name="RawDefaultValue" />
- </Type>
- <Type Name="System.Reflection.ParameterModifier">
- <Member Name="#ctor(System.Int32)" />
- <Member Name="get_Item(System.Int32)" />
- <Member Name="set_Item(System.Int32,System.Boolean)" />
- <Member MemberType="Property" Name="Item(System.Int32)" />
- </Type>
- <Type Name="System.Reflection.Pointer" >
- <Member Name="Box(System.Void*,System.Type)" />
- <Member Name="Unbox(System.Object)" />
- <Member Name="System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Reflection.PortableExecutableKinds">
- <Member MemberType="Field" Name="NotAPortableExecutableImage" />
- <Member MemberType="Field" Name="ILOnly" />
- <Member MemberType="Field" Name="Required32Bit" />
- <Member MemberType="Field" Name="PE32Plus" />
- <Member MemberType="Field" Name="Unmanaged32Bit" />
- <Member MemberType="Field" Name="Preferred32Bit" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.PropertyAttributes">
- <Member MemberType="Field" Name="HasDefault" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="Reserved2" />
- <Member MemberType="Field" Name="Reserved3" />
- <Member MemberType="Field" Name="Reserved4" />
- <Member MemberType="Field" Name="ReservedMask" />
- <Member MemberType="Field" Name="RTSpecialName" />
- <Member MemberType="Field" Name="SpecialName" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Reflection.PropertyInfo">
- <Member Name="#ctor" />
- <Member Name="op_Equality(System.Reflection.PropertyInfo,System.Reflection.PropertyInfo)" />
- <Member Name="op_Inequality(System.Reflection.PropertyInfo,System.Reflection.PropertyInfo)" />
- <Member Name="get_Attributes" />
- <Member Name="get_CanRead" />
- <Member Name="get_CanWrite" />
- <Member Name="get_GetMethod" />
- <Member Name="get_IsSpecialName" />
- <Member Name="get_MemberType" />
- <Member Name="get_PropertyType" />
- <Member Name="get_SetMethod" />
- <Member Name="GetAccessors" />
- <Member Name="GetAccessors(System.Boolean)" />
- <Member Name="GetConstantValue" />
- <Member Name="GetGetMethod" />
- <Member Name="GetGetMethod(System.Boolean)" />
- <Member Name="GetIndexParameters" />
- <Member Name="GetOptionalCustomModifiers" />
- <Member Name="GetRequiredCustomModifiers" />
- <Member Name="GetRawConstantValue" />
- <Member Name="GetSetMethod" />
- <Member Name="GetSetMethod(System.Boolean)" />
- <Member Name="GetValue(System.Object)" />
- <Member Name="GetValue(System.Object,System.Object[])" />
- <Member Name="GetValue(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="SetValue(System.Object,System.Object)" />
- <Member Name="SetValue(System.Object,System.Object,System.Object[])" />
- <Member Name="SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="CanRead" />
- <Member MemberType="Property" Name="CanWrite" />
- <Member MemberType="Property" Name="GetMethod" />
- <Member MemberType="Property" Name="SetMethod" />
- <Member MemberType="Property" Name="IsSpecialName" />
- <Member MemberType="Property" Name="MemberType" />
- <Member MemberType="Property" Name="PropertyType" />
- </Type>
- <Type Name="System.Reflection.TargetException" >
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Reflection.TargetInvocationException">
- <Member Name="#ctor(System.Exception)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Reflection.TargetParameterCountException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Reflection.TypeAttributes">
- <Member MemberType="Field" Name="Abstract" />
- <Member MemberType="Field" Name="AnsiClass" />
- <Member MemberType="Field" Name="AutoClass" />
- <Member MemberType="Field" Name="AutoLayout" />
- <Member MemberType="Field" Name="BeforeFieldInit" />
- <Member MemberType="Field" Name="Class" />
- <Member MemberType="Field" Name="ClassSemanticsMask" />
- <Member MemberType="Field" Name="ExplicitLayout" />
- <Member MemberType="Field" Name="HasSecurity" />
- <Member MemberType="Field" Name="Import" />
- <Member MemberType="Field" Name="Interface" />
- <Member MemberType="Field" Name="LayoutMask" />
- <Member MemberType="Field" Name="NestedAssembly" />
- <Member MemberType="Field" Name="NestedFamANDAssem" />
- <Member MemberType="Field" Name="NestedFamily" />
- <Member MemberType="Field" Name="NestedFamORAssem" />
- <Member MemberType="Field" Name="NestedPrivate" />
- <Member MemberType="Field" Name="NestedPublic" />
- <Member MemberType="Field" Name="NotPublic" />
- <Member MemberType="Field" Name="Public" />
- <Member MemberType="Field" Name="ReservedMask" />
- <Member MemberType="Field" Name="RTSpecialName" />
- <Member MemberType="Field" Name="Sealed" />
- <Member MemberType="Field" Name="SequentialLayout" />
- <Member MemberType="Field" Name="Serializable" />
- <Member MemberType="Field" Name="SpecialName" />
- <Member MemberType="Field" Name="StringFormatMask" />
- <Member MemberType="Field" Name="UnicodeClass" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="VisibilityMask" />
- </Type>
- <Type Name="System.Reflection.TypeDelegator">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Type)" />
- <Member Name="get_GUID" />
- <Member Name="get_MetadataToken" />
- <Member Name="InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[])" />
- <Member Name="get_Module" />
- <Member Name="get_Assembly" />
- <Member Name="get_TypeHandle" />
- <Member Name="get_Name" />
- <Member Name="get_FullName" />
- <Member Name="get_Namespace" />
- <Member Name="get_AssemblyQualifiedName" />
- <Member Name="get_BaseType" />
- <Member Name="GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetConstructors(System.Reflection.BindingFlags)" />
- <Member Name="GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethods(System.Reflection.BindingFlags)" />
- <Member Name="GetField(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetFields(System.Reflection.BindingFlags)" />
- <Member Name="GetInterface(System.String,System.Boolean)" />
- <Member Name="GetInterfaces" />
- <Member Name="GetEvent(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetEvents" />
- <Member Name="GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetProperties(System.Reflection.BindingFlags)" />
- <Member Name="GetEvents(System.Reflection.BindingFlags)" />
- <Member Name="GetNestedTypes(System.Reflection.BindingFlags)" />
- <Member Name="GetNestedType(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags)" />
- <Member Name="GetMembers(System.Reflection.BindingFlags)" />
- <Member Name="GetAttributeFlagsImpl" />
- <Member Name="IsArrayImpl" />
- <Member Name="IsPrimitiveImpl" />
- <Member Name="IsByRefImpl" />
- <Member Name="IsPointerImpl" />
- <Member Name="IsValueTypeImpl" />
- <Member Name="IsCOMObjectImpl" />
- <Member Name="get_IsConstructedGenericType" />
- <Member Name="GetElementType" />
- <Member Name="HasElementTypeImpl" />
- <Member Name="get_UnderlyingSystemType" />
- <Member Name="GetCustomAttributes(System.Boolean)" />
- <Member Name="GetCustomAttributes(System.Type,System.Boolean)" />
- <Member Name="IsDefined(System.Type,System.Boolean)" />
- <Member Name="IsAssignableFrom(System.Reflection.TypeInfo)" />
- <Member Name="GetInterfaceMap(System.Type)" />
- <Member MemberType="Field" Name="typeImpl" />
- <Member MemberType="Property" Name="GUID" />
- <Member MemberType="Property" Name="MetadataToken" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Assembly" />
- <Member MemberType="Property" Name="TypeHandle" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="FullName" />
- <Member MemberType="Property" Name="Namespace" />
- <Member MemberType="Property" Name="AssemblyQualifiedName" />
- <Member MemberType="Property" Name="BaseType" />
- <Member MemberType="Property" Name="IsConstructedGenericType" />
- <Member MemberType="Property" Name="UnderlyingSystemType" />
- </Type>
- <Type Name="System.ResolveEventArgs">
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Reflection.Assembly)" />
- <Member Name="get_Name" />
- <Member MemberType="Property" Name="Name" />
- <Member Name="get_RequestingAssembly" />
- <Member MemberType="Property" Name="RequestingAssembly" />
- </Type>
- <Type Name="System.ResolveEventHandler">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,System.ResolveEventArgs,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object,System.ResolveEventArgs)" />
- </Type>
- <Type Name="System.Resources.MissingManifestResourceException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Resources.MissingSatelliteAssemblyException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_CultureName" />
- <Member MemberType="Property" Name="CultureName"/>
- </Type>
- <Type Name="System.Resources.NeutralResourcesLanguageAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Resources.UltimateResourceFallbackLocation)" />
- <Member Name="get_CultureName" />
- <Member MemberType="Property" Name="CultureName" />
- <Member Name="get_Location" />
- <Member MemberType="Property" Name="Location" />
- </Type>
- <Type Name="System.Resources.IResourceReader">
- <Member Name="Close"/>
- <Member Name="GetEnumerator"/>
- </Type>
- <Type Name="System.Resources.ResourceReader">
- <Member Name="#ctor(System.IO.Stream)"/>
- <Member Name="#ctor(System.String)"/>
- <Member Name="Close"/>
- <Member Name="Dispose"/>
- <Member Name="GetResourceData(System.String,System.String@,System.Byte[]@)"/>
- <Member Name="GetEnumerator"/>
- <Member Name="System.Collections.IEnumerable.GetEnumerator"/>
- </Type>
- <Type Name="System.Resources.ResourceManager">
- <Member MemberType="Field" Name="BaseNameField" />
- <Member MemberType="Field" Name="HeaderVersionNumber" />
- <Member MemberType="Field" Name="MagicNumber" />
- <Member MemberType="Field" Name="MainAssembly" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String,System.Reflection.Assembly)" />
- <Member Name="#ctor(System.String,System.Reflection.Assembly,System.Type)" />
- <Member Name="#ctor(System.Type)" />
- <Member Name="get_BaseName" />
- <Member Name="get_IgnoreCase" />
- <Member Name="get_ResourceSetType" />
- <Member Name="get_FallbackLocation" />
- <Member Name="GetNeutralResourcesLanguage(System.Reflection.Assembly)" />
- <Member Name="GetObject(System.String)" />
- <Member Name="GetObject(System.String,System.Globalization.CultureInfo)" />
- <Member Name="GetResourceFileName(System.Globalization.CultureInfo)" />
- <Member Name="GetResourceSet(System.Globalization.CultureInfo,System.Boolean,System.Boolean)" />
- <Member Name="GetSatelliteContractVersion(System.Reflection.Assembly)" />
- <Member Name="GetStream(System.String)" />
- <Member Name="GetStream(System.String,System.Globalization.CultureInfo)" />
- <Member Name="GetString(System.String)" />
- <Member Name="GetString(System.String,System.Globalization.CultureInfo)" />
- <Member Name="InternalGetResourceSet(System.Globalization.CultureInfo,System.Boolean,System.Boolean)" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnDeserializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="ReleaseAllResources" />
- <Member Name="set_IgnoreCase(System.Boolean)" />
- <Member Name="set_FallbackLocation(System.Resources.UltimateResourceFallbackLocation)" />
- <Member MemberType="Property" Name="BaseName" />
- <Member MemberType="Property" Name="IgnoreCase" />
- <Member MemberType="Property" Name="ResourceSetType" />
- <Member MemberType="Property" Name="FallbackLocation" />
- <Member Name="CreateFileBasedResourceManager(System.String,System.String,System.Type)" />
- </Type>
- <Type Name="System.Resources.ResourceSet">
- <Member MemberType="Field" Name="Reader" />
- <Member MemberType="Field" Name="Table" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.IO.Stream)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.Resources.IResourceReader)" />
- <Member Name="Close" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="GetDefaultReader" />
- <Member Name="GetDefaultWriter" />
- <Member Name="GetEnumerator" />
- <Member Name="GetObject(System.String)" />
- <Member Name="GetObject(System.String,System.Boolean)" />
- <Member Name="GetString(System.String)" />
- <Member Name="GetString(System.String,System.Boolean)" />
- <Member Name="ReadResources" />
- </Type>
- <Type Name="System.Resources.SatelliteContractVersionAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Version" />
- <Member MemberType="Property" Name="Version" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.AccessedThroughPropertyAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_PropertyName" />
- <Member MemberType="Property" Name="PropertyName" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.CompilationRelaxations">
- <Member MemberType="Field" Name="NoStringInterning" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.CompilationRelaxationsAttribute">
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Runtime.CompilerServices.CompilationRelaxations)" />
- <Member MemberType="Property" Name="CompilationRelaxations" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.CompilerMarshalOverride" />
- <Type Name="System.Runtime.CompilerServices.CustomConstantAttribute">
- <Member Name="#ctor" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <!-- If we do a Silverlight 6 release, this ContractHelper should be public in Silverlight. Tools may be able to work without it, but it helps if it's there. -->
- <Type Name="System.Runtime.CompilerServices.ContractHelper">
- <Member Name="RaiseContractFailedEvent(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception)" />
- <Member Name="TriggerFailure(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.String,System.Exception)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.DateTimeConstantAttribute">
- <Member Name="#ctor(System.Int64)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.DecimalConstantAttribute">
- <Member Name="#ctor(System.Byte,System.Byte,System.Int32,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Byte,System.Byte,System.UInt32,System.UInt32,System.UInt32)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.DefaultDependencyAttribute">
- <Member Name="#ctor(System.Runtime.CompilerServices.LoadHint)" />
- <Member Name="get_LoadHint" />
- <Member MemberType="Property" Name="LoadHint" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.DependencyAttribute">
- <Member Name="#ctor(System.String,System.Runtime.CompilerServices.LoadHint)" />
- <Member Name="get_DependentAssembly" />
- <Member Name="get_LoadHint" />
- <Member MemberType="Property" Name="DependentAssembly" />
- <Member MemberType="Property" Name="LoadHint" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.DiscardableAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.DisablePrivateReflectionAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.ExtensionAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.FixedBufferAttribute">
- <Member Name="#ctor(System.Type,System.Int32)" />
- <Member Name="get_ElementType" />
- <Member Name="get_Length" />
- <Member MemberType="Property" Name="ElementType" />
- <Member MemberType="Property" Name="Length" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.FixedAddressValueTypeAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.FormattableStringFactory">
- <Member Name="Create(System.String,System.Object[])" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.CompilerServices.FriendAccessAllowedAttribute" />
- <Type Name="System.Runtime.CompilerServices.IndexerNameAttribute">
- <Member Name="#ctor(System.String)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_AssemblyName" />
- <Member MemberType="Property" Name="AllInternalsVisible" />
- <Member MemberType="Property" Name="AssemblyName" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.CompilerServices.JitHelpers">
- <Member Status="ImplRoot" Name="UnsafeEnumCastLong&lt;T&gt;(T)" />
- <Member Status="ImplRoot" Name="UnsafeEnumCastLongInternal&lt;T&gt;(T)" Condition="DEBUG" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.SpecialNameAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.UnsafeValueTypeAttribute"> <!-- C# 3.0 compiler requires this type -->
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.SuppressMergeCheckAttribute"> <!-- for MC++ -->
- </Type>
- <Type Name="System.Runtime.CompilerServices.ICastable">
- <Member Name="IsInstanceOfInterface(System.RuntimeTypeHandle,System.Exception@)" /> <!-- EE -->
- <Member Name="GetImplType(System.RuntimeTypeHandle)" /> <!-- EE -->
- </Type>
- <Type Name="System.Runtime.CompilerServices.ICastableHelpers">
- <Member Name="IsInstanceOfInterface(System.Runtime.CompilerServices.ICastable,System.RuntimeType,System.Exception@)" /> <!-- EE -->
- <Member Name="GetImplType(System.Runtime.CompilerServices.ICastable,System.RuntimeType)" /> <!-- EE -->
- </Type>
- <Type Name="System.Runtime.CompilerServices.IsVolatile" /> <!-- for All Compilers, [ C# and MC++ uses it] -->
- <Type Name="System.Runtime.CompilerServices.MethodCodeType">
- <Member MemberType="Field" Name="IL" />
- <Member MemberType="Field" Name="Native" />
- <Member MemberType="Field" Name="OPTIL" />
- <Member MemberType="Field" Name="Runtime" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.MethodImplAttribute">
- <Member MemberType="Field" Name="MethodCodeType" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Int16)" />
- <Member Name="#ctor(System.Runtime.CompilerServices.MethodImplOptions)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- <Member Status="ImplRoot" Name="#ctor(System.Reflection.MethodImplAttributes)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.MethodImplOptions">
- <Member MemberType="Field" Name="AggressiveInlining" />
- <Member MemberType="Field" Name="ForwardRef" />
- <Member MemberType="Field" Name="InternalCall" />
- <Member MemberType="Field" Name="NoInlining" />
- <Member MemberType="Field" Name="PreserveSig" />
- <Member MemberType="Field" Name="Synchronized" />
- <Member MemberType="Field" Name="Unmanaged" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.RuntimeHelpers">
- <Member Name="Equals(System.Object,System.Object)" />
- <Member Name="GetUninitializedObject(System.Type)" />
- <Member Name="EnsureSufficientExecutionStack" />
- <Member Name="TryEnsureSufficientExecutionStack" />
- <Member Name="get_OffsetToStringData" />
- <Member Name="GetObjectValue(System.Object)" />
- <Member Name="InitializeArray(System.Array,System.RuntimeFieldHandle)" />
- <Member Name="GetHashCode(System.Object)" />
- <Member Name="RunClassConstructor(System.RuntimeTypeHandle)" />
- <Member Name="RunModuleConstructor(System.ModuleHandle)" />
- <Member Name="ExecuteCodeWithGuaranteedCleanup(System.Runtime.CompilerServices.RuntimeHelpers+TryCode,System.Runtime.CompilerServices.RuntimeHelpers+CleanupCode,System.Object)" />
- <Member MemberType="Property" Name="OffsetToStringData" />
- <Member Status="ImplRoot" Name="ExecuteBackoutCodeHelper(System.Object,System.Object,System.Boolean)" />
- <Member Name="PrepareConstrainedRegions" />
- <Member Name="PrepareConstrainedRegionsNoOP" />
- <Member Name="PrepareContractedDelegate(System.Delegate)" />
- <Member Name="PrepareDelegate(System.Delegate)" />
- <Member Name="PrepareMethod(System.RuntimeMethodHandle)" />
- <Member Name="PrepareMethod(System.RuntimeMethodHandle,System.RuntimeTypeHandle[])" />
- <Member Name="ProbeForSufficientStack" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.RuntimeHelpers+CleanupCode">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,System.Boolean,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object,System.Boolean)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.RuntimeHelpers+TryCode">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.ConditionalWeakTable&lt;TKey,TValue&gt;">
- <Member Name="#ctor" />
- <Member Name="Add(TKey,TValue)" />
- <Member Name="AddOrUpdate(TKey,TValue)" />
- <Member Name="Remove(TKey)" />
- <Member Name="TryGetValue(TKey,TValue@)" />
- <Member Name="GetValue(TKey,System.Runtime.CompilerServices.ConditionalWeakTable+CreateValueCallback)" />
- <Member Name="GetOrCreateValue(TKey)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.ConditionalWeakTable&lt;TKey,TValue&gt;+CreateValueCallback">
- </Type>
- <Type Name="System.Runtime.CompilerServices.ReferenceAssemblyAttribute">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member MemberType="Property" Name="Description" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.TypeForwardedToAttribute">
- <Member Name="#ctor(System.Type)" />
- <Member MemberType="Property" Name="Destination" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.TypeForwardedFromAttribute">
- <Member Name="#ctor(System.String)" />
- <Member MemberType="Property" Name="AssemblyFullName" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.SuppressIldasmAttribute">
- <Member Name="#ctor" />
- </Type>
- <!-- #if FEATURE_CORRUPTING_EXCEPTIONS -->
- <Type Name="System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute">
- <Member Name="#ctor" />
- </Type>
- <!-- #endif FEATURE_CORRUPTING_EXCEPTIONS -->
- <!-- #if FEATURE_EXCEPTIONDISPATCHINFO -->
- <Type Status="ApiRoot" Name="System.Runtime.ExceptionServices.ExceptionDispatchInfo">
- <Member Status="ApiRoot" Name="Capture(System.Exception)" />
- <Member Status="ApiRoot" Name="Throw" />
- <Member Name="get_SourceException" />
- <Member MemberType="Property" Name="SourceException" />
- </Type>
- <!-- #endif FEATURE_EXCEPTIONDISPATCHINFO -->
- <Type Name="System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs">
- <Member Name="#ctor(System.Exception)" />
- <Member Name="get_Exception" />
- <Member MemberType="Property" Name="Exception" />
- </Type>
- <Type Name="System.Runtime.GCLatencyMode">
- <Member MemberType="Field" Name="Batch" />
- <Member MemberType="Field" Name="Interactive" />
- <Member MemberType="Field" Name="LowLatency" />
- <Member MemberType="Field" Name="NoGCRegion" />
- <Member MemberType="Field" Name="SustainedLowLatency" />
- </Type>
- <Type Name="System.Runtime.GCSettings">
- <Member Name="get_IsServerGC" />
- <Member Name="get_LargeObjectHeapCompactionMode" />
- <Member Name="set_LargeObjectHeapCompactionMode(System.Runtime.GCLargeObjectHeapCompactionMode)" />
- <Member Name="get_LatencyMode" />
- <Member Name="set_LatencyMode(System.Runtime.GCLatencyMode)" />
- <Member MemberType="Property" Name="IsServerGC" />
- <Member MemberType="Property" Name="LargeObjectHeapCompactionMode" />
- <Member MemberType="Property" Name="LatencyMode" />
- </Type>
- <Type Name="System.Runtime.GCLargeObjectHeapCompactionMode">
- <Member MemberType="Field" Name="Default" />
- <Member MemberType="Field" Name="CompactOnce" />
- </Type>
- <Type Name="System.Runtime.InteropServices.BStrWrapper">
- <Member Name="#ctor(System.Object)" />
- <Member Name="#ctor(System.String)" />
- <Member MemberType="Property" Name="WrappedObject" />
- <Member Name="get_WrappedObject" />
- </Type>
- <Type Name="System.Runtime.InteropServices.CurrencyWrapper">
- <Member Name="#ctor(System.Decimal)" />
- <Member Name="#ctor(System.Object)" />
- <Member Name="get_WrappedObject" />
- <Member MemberType="Property" Name="WrappedObject" />
- </Type>
- <Type Name="System.Runtime.InteropServices.DispatchWrapper">
- <Member Name="#ctor(System.Object)" />
- <Member Name="get_WrappedObject" />
- <Member MemberType="Property" Name="WrappedObject" />
- </Type>
- <Type Name="System.Runtime.InteropServices.UnknownWrapper">
- <Member Name="#ctor(System.Object)" />
- <Member MemberType="Property" Name="WrappedObject" />
- <Member Name="get_WrappedObject" />
- </Type>
- <Type Name="System.Runtime.InteropServices.VariantWrapper">
- <Member Name="#ctor(System.Object)" />
- <Member MemberType="Property" Name="WrappedObject" />
- <Member Name="get_WrappedObject" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ErrorWrapper">
- <Member Name="#ctor(System.Exception)" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Object)" />
- <Member MemberType="Property" Name="ErrorCode" />
- <Member Name="get_ErrorCode" />
- </Type>
- <Type Name="System.Runtime.InteropServices.CallingConvention">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="Winapi" />
- <Member MemberType="Field" Name="Cdecl" />
- <Member MemberType="Field" Name="StdCall" />
- <Member MemberType="Field" Name="ThisCall" />
- </Type>
- <Type Name="System.Runtime.InteropServices.CharSet">
- <Member MemberType="Field" Name="Ansi" />
- <Member MemberType="Field" Name="Auto" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="Unicode" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ClassInterfaceAttribute"> <!-- for VB -->
- <Member Name="#ctor(System.Int16)" />
- <Member Name="#ctor(System.Runtime.InteropServices.ClassInterfaceType)" />
- <Member MemberType="Property" Name="Value" />
- <Member Name="get_Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ClassInterfaceType"> <!-- for VB -->
- <Member MemberType="Field" Name="AutoDispatch" />
- <Member MemberType="Field" Name="AutoDual" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Runtime.InteropServices.CoClassAttribute"> <!-- MC++ compiler asserts for no particularly good reason if this type is not public -->
- <Member Name="#ctor(System.Type)" />
- <Member MemberType="Property" Name="CoClass" />
- <Member Name="get_CoClass" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComDefaultInterfaceAttribute">
- <Member Name="#ctor(System.Type)" />
- <Member MemberType="Property" Name="Value" />
- <Member Name="get_Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.COMException">
- <Member Name="#ctor(System.String,System.Int32)" />
- <Member Name="ToString" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComImportAttribute"> <!-- MC++ compiler asserts for no particularly good reason if this type is not public -->
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComInterfaceType">
- <Member MemberType="Field" Name="InterfaceIsDual" />
- <Member MemberType="Field" Name="InterfaceIsIUnknown" />
- <Member MemberType="Field" Name="InterfaceIsIDispatch" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="InterfaceIsIInspectable" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.FILETIME">
- <Member MemberType="Field" Name="dwHighDateTime" />
- <Member MemberType="Field" Name="dwLowDateTime" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.STATSTG">
- <Member MemberType="Field" Name="atime" />
- <Member MemberType="Field" Name="cbSize" />
- <Member MemberType="Field" Name="clsid" />
- <Member MemberType="Field" Name="ctime" />
- <Member MemberType="Field" Name="grfLocksSupported" />
- <Member MemberType="Field" Name="grfMode" />
- <Member MemberType="Field" Name="grfStateBits" />
- <Member MemberType="Field" Name="mtime" />
- <Member MemberType="Field" Name="pwcsName" />
- <Member MemberType="Field" Name="reserved" />
- <Member MemberType="Field" Name="type" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IStream">
- <Member Name="Read(System.Byte[],System.Int32,System.IntPtr)" />
- <Member Name="Write(System.Byte[],System.Int32,System.IntPtr)" />
- <Member Name="Seek(System.Int64,System.Int32,System.IntPtr)" />
- <Member Name="SetSize(System.Int64)" />
- <Member Name="CopyTo(System.Runtime.InteropServices.ComTypes.IStream,System.Int64,System.IntPtr,System.IntPtr)" />
- <Member Name="Commit(System.Int32)" />
- <Member Name="Revert" />
- <Member Name="LockRegion(System.Int64,System.Int64,System.Int32)" />
- <Member Name="UnlockRegion(System.Int64,System.Int64,System.Int32)" />
- <Member Name="Stat(System.Runtime.InteropServices.ComTypes.STATSTG@,System.Int32)" />
- <Member Name="Clone(System.Runtime.InteropServices.ComTypes.IStream@)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.DefaultCharSetAttribute"> <!-- MC++ compiler asserts for no particularly good reason if this type is not public -->
- <Member Name="#ctor(System.Runtime.InteropServices.CharSet)" />
- <Member MemberType="Property" Name="CharSet" />
- <Member Name="get_CharSet" />
- </Type>
- <Type Name="System.Runtime.InteropServices.DispIdAttribute">
- <Member Name="#ctor(System.Int32)" />
- <Member MemberType="Property" Name="Value" />
- <Member Name="get_Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.DllImportAttribute">
- <Member MemberType="Field" Name="CallingConvention" />
- <Member MemberType="Field" Name="CharSet" />
- <Member MemberType="Field" Name="EntryPoint" />
- <Member MemberType="Field" Name="PreserveSig" />
- <Member MemberType="Field" Name="SetLastError" />
- <Member MemberType="Field" Name="BestFitMapping" /> <!-- forced by desktop implementation -->
- <Member MemberType="Field" Name="ExactSpelling" /> <!-- forced by desktop implementation -->
- <!-- <Member MemberType="Field" Name="ThrowOnUnmappableChar" /><!- - forced by desktop implementation -->
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- <Member MemberType="Field" Name="ThrowOnUnmappableChar" />
- </Type>
- <Type Name="System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.AutomationProxyAttribute">
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComAliasNameAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComCompatibleVersionAttribute">
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="get_MajorVersion" />
- <Member MemberType="Property" Name="MajorVersion" />
- <Member Name="get_MinorVersion" />
- <Member MemberType="Property" Name="MinorVersion" />
- <Member Name="get_BuildNumber" />
- <Member MemberType="Property" Name="BuildNumber" />
- <Member Name="get_RevisionNumber" />
- <Member MemberType="Property" Name="RevisionNumber" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComConversionLossAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComRegisterFunctionAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComUnregisterFunctionAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ExternalException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Int32)" />
- <Member Name="get_ErrorCode" />
- <Member MemberType="Property" Name="ErrorCode" />
- <Member Name="ToString" />
- </Type>
- <Type Name="System.Runtime.InteropServices.FieldOffsetAttribute">
- <Member Name="#ctor(System.Int32)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.GCHandle">
- <Member Name="AddrOfPinnedObject" />
- <Member Name="Alloc(System.Object)" />
- <Member Name="Alloc(System.Object,System.Runtime.InteropServices.GCHandleType)" />
- <Member Name="Free" />
- <Member Name="FromIntPtr(System.IntPtr)" />
- <Member Name="get_IsAllocated" />
- <Member Name="get_Target" />
- <Member Name="op_Explicit(System.IntPtr)" ReturnType="System.Runtime.InteropServices.GCHandle" />
- <Member Name="op_Explicit(System.Runtime.InteropServices.GCHandle)" ReturnType="System.IntPtr" />
- <Member Name="set_Target(System.Object)" />
- <Member Name="ToIntPtr(System.Runtime.InteropServices.GCHandle)" />
- <Member MemberType="Property" Name="IsAllocated" />
- <Member MemberType="Property" Name="Target" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Runtime.InteropServices.GCHandle,System.Runtime.InteropServices.GCHandle)" />
- <Member Name="op_Inequality(System.Runtime.InteropServices.GCHandle,System.Runtime.InteropServices.GCHandle)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.GCHandleType">
- <Member MemberType="Field" Name="Normal" />
- <Member MemberType="Field" Name="Pinned" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="Weak" />
- <Member MemberType="Field" Name="WeakTrackResurrection" />
- </Type>
- <Type Name="System.Runtime.InteropServices.GuidAttribute">
- <Member Name="#ctor(System.String)" />
- <Member MemberType="Property" Name="Value" />
- <Member Name="get_Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.HandleRef">
- <Member Name="#ctor(System.Object,System.IntPtr)"/>
- <Member MemberType="Property" Name="Handle"/>
- <Member Name="get_Handle"/>
- <Member MemberType="Property" Name="Wrapper"/>
- <Member Name="get_Wrapper"/>
- <Member Name="op_Explicit(System.Runtime.InteropServices.HandleRef)" ReturnType="System.IntPtr" />
- <Member Name="ToIntPtr(System.Runtime.InteropServices.HandleRef)"/>
- </Type>
- <Type Name="System.Runtime.InteropServices.ICustomQueryInterface">
- <Member Name="GetInterface(System.Guid@,System.IntPtr@)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ICustomFactory">
- <Member Name="CreateInstance(System.Type)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ImportedFromTypeLibAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.InAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.InterfaceTypeAttribute">
- <Member Name="#ctor(System.Runtime.InteropServices.ComInterfaceType)" />
- <Member Name="#ctor(System.Int16)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.InvalidComObjectException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.SafeArrayRankMismatchException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.SafeArrayTypeMismatchException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.LayoutKind">
- <Member MemberType="Field" Name="Auto" />
- <Member MemberType="Field" Name="Explicit" />
- <Member MemberType="Field" Name="Sequential" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Runtime.InteropServices.LCIDConversionAttribute">
- <Member Name="#ctor(System.Int32)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.Marshal">
- <Member MemberType="Field" Name="SystemDefaultCharSize" />
- <Member Name="AddRef(System.IntPtr)" />
- <Member Name="AllocHGlobal(System.Int32)" />
- <Member Name="AllocCoTaskMem(System.Int32)" />
- <Member Name="BindToMoniker(System.String)" />
- <Member Name="ChangeWrapperHandleStrength(System.Object,System.Boolean)" />
- <Member Name="CleanupUnusedObjectsInCurrentContext" />
- <Member Name="Copy(System.Byte[],System.Int32,System.IntPtr,System.Int32)" />
- <Member Name="Copy(System.Char[],System.Int32,System.IntPtr,System.Int32)" />
- <Member Name="Copy(System.Double[],System.Int32,System.IntPtr,System.Int32)" />
- <Member Name="Copy(System.Int16[],System.Int32,System.IntPtr,System.Int32)" />
- <Member Name="Copy(System.Int32[],System.Int32,System.IntPtr,System.Int32)" />
- <Member Name="Copy(System.Int64[],System.Int32,System.IntPtr,System.Int32)" />
- <Member Name="Copy(System.IntPtr,System.Byte[],System.Int32,System.Int32)" />
- <Member Name="Copy(System.IntPtr,System.Char[],System.Int32,System.Int32)" />
- <Member Name="Copy(System.IntPtr,System.Double[],System.Int32,System.Int32)" />
- <Member Name="Copy(System.IntPtr,System.Int16[],System.Int32,System.Int32)" />
- <Member Name="Copy(System.IntPtr,System.Int32[],System.Int32,System.Int32)" />
- <Member Name="Copy(System.IntPtr,System.Int64[],System.Int32,System.Int32)" />
- <Member Name="Copy(System.IntPtr,System.Single[],System.Int32,System.Int32)" />
- <Member Name="Copy(System.Single[],System.Int32,System.IntPtr,System.Int32)" />
- <Member Name="FinalReleaseComObject(System.Object)" />
- <Member Name="FreeHGlobal(System.IntPtr)" />
- <Member Name="FreeCoTaskMem(System.IntPtr)" />
- <Member Name="GenerateGuidForType(System.Type)" />
- <Member Name="GenerateProgIdForType(System.Type)" />
- <Member Name="GetComInterfaceForObject(System.Object,System.Type)" />
- <Member Name="GetComInterfaceForObject(System.Object,System.Type,System.Runtime.InteropServices.CustomQueryInterfaceMode)" />
- <Member Name="GetComObjectData(System.Object,System.Object)" />
- <Member Name="GetDelegateForFunctionPointer(System.IntPtr,System.Type)" />
- <Member Name="GetExceptionForHR(System.Int32)" />
- <Member Name="GetExceptionForHR(System.Int32,System.IntPtr)" />
- <Member Name="GetFunctionPointerForDelegate(System.Delegate)" />
- <Member Name="GetHRForException(System.Exception)" />
- <Member Name="GetHINSTANCE(System.Reflection.Module)" />
- <Member Name="GetIDispatchForObject(System.Object)" />
- <Member Name="GetIUnknownForObject(System.Object)" />
- <Member Name="GetLastWin32Error" />
- <Member Name="GetHRForLastWin32Error" />
- <Member Name="GetNativeVariantForObject(System.Object,System.IntPtr)" />
- <Member Name="GetObjectForIUnknown(System.IntPtr)" />
- <Member Name="GetObjectForNativeVariant(System.IntPtr)" />
- <Member Name="GetUniqueObjectForIUnknown(System.IntPtr)" />
- <Member Name="InitializeManagedWinRTFactoryObject(System.Object,System.RuntimeType)" Condition="FEATURE_COMINTEROP" />
- <Member Name="IsComObject(System.Object)" />
- <Member Name="OffsetOf(System.Type,System.String)" />
- <Member Name="Prelink(System.Reflection.MethodInfo)" />
- <Member Name="PrelinkAll(System.Type)" />
- <Member Name="PtrToStringAnsi(System.IntPtr)" />
- <Member Name="PtrToStringAnsi(System.IntPtr,System.Int32)" />
- <Member Name="PtrToStringAuto(System.IntPtr)" />
- <Member Name="PtrToStringAuto(System.IntPtr,System.Int32)" />
- <Member Name="PtrToStringUTF8(System.IntPtr)" />
- <Member Name="PtrToStringUTF8(System.IntPtr,System.Int32)" />
- <Member Name="PtrToStringUni(System.IntPtr)" />
- <Member Name="PtrToStringUni(System.IntPtr,System.Int32)" />
- <Member Name="PtrToStructure(System.IntPtr,System.Object)" />
- <Member Name="PtrToStructure(System.IntPtr,System.Type)" />
- <Member Name="QueryInterface(System.IntPtr,System.Guid@,System.IntPtr@)" />
- <Member Name="ReadByte(System.IntPtr)" />
- <Member Name="ReadByte(System.IntPtr,System.Int32)" />
- <Member Name="ReadInt16(System.IntPtr)" />
- <Member Name="ReadInt16(System.IntPtr,System.Int32)" />
- <Member Name="ReadInt32(System.IntPtr)" />
- <Member Name="ReadInt32(System.IntPtr,System.Int32)" />
- <Member Name="ReadInt64(System.IntPtr)" />
- <Member Name="ReadInt64(System.IntPtr,System.Int32)" />
- <Member Name="ReadIntPtr(System.IntPtr)" />
- <Member Name="ReadIntPtr(System.IntPtr,System.Int32)" />
- <Member Name="Release(System.IntPtr)" />
- <Member Name="ReleaseComObject(System.Object)" />
- <Member Name="SetComObjectData(System.Object,System.Object,System.Object)" />
- <Member Name="SetLastWin32Error(System.Int32)" />
- <Member Name="SizeOf(System.Object)" />
- <Member Name="SizeOf(System.Type)" />
- <Member Name="StructureToPtr(System.Object,System.IntPtr,System.Boolean)" />
- <Member Name="ThrowExceptionForHR(System.Int32)" />
- <Member Name="ThrowExceptionForHR(System.Int32,System.IntPtr)" />
- <Member Name="GetTypedObjectForIUnknown(System.IntPtr,System.Type)" />
- <Member Name="UnsafeAddrOfPinnedArrayElement(System.Array,System.Int32)" />
- <Member Name="WriteByte(System.IntPtr,System.Byte)" />
- <Member Name="WriteByte(System.IntPtr,System.Int32,System.Byte)" />
- <Member Name="WriteInt16(System.IntPtr,System.Char)" />
- <Member Name="WriteInt16(System.IntPtr,System.Int16)" />
- <Member Name="WriteInt16(System.IntPtr,System.Int32,System.Char)" />
- <Member Name="WriteInt16(System.IntPtr,System.Int32,System.Int16)" />
- <Member Name="WriteInt32(System.IntPtr,System.Int32)" />
- <Member Name="WriteInt32(System.IntPtr,System.Int32,System.Int32)" />
- <Member Name="WriteInt64(System.IntPtr,System.Int32,System.Int64)" />
- <Member Name="WriteInt64(System.IntPtr,System.Int64)" />
- <Member Name="WriteIntPtr(System.IntPtr,System.Int32,System.IntPtr)" />
- <Member Name="WriteIntPtr(System.IntPtr,System.IntPtr)" />
- <Member Name="ZeroFreeCoTaskMemUnicode(System.IntPtr)" />
- <Member Status="ImplRoot" Name="InitializeWrapperForWinRT(System.Object,System.IntPtr@)" Condition="FEATURE_COMINTEROP" />
- <Member Status="ImplRoot" Name="LoadLicenseManager" Condition="FEATURE_COMINTEROP" /><Member MemberType="Field" Name="SystemMaxDBCSCharSize" />
- <Member Name="AllocHGlobal(System.IntPtr)" />
- <Member Name="AreComObjectsAvailableForCleanup" />
- <Member Name="Copy(System.IntPtr,System.IntPtr[],System.Int32,System.Int32)" />
- <Member Name="Copy(System.IntPtr[],System.Int32,System.IntPtr,System.Int32)" />
- <Member Name="CreateAggregatedObject(System.IntPtr,System.Object)" />
- <Member Name="CreateAggregatedObject&lt;T&gt;(System.IntPtr,T)" />
- <Member Name="CreateWrapperOfType(System.Object,System.Type)" />
- <Member Name="CreateWrapperOfType&lt;T,TWrapper&gt;(T)" />
- <Member Name="DestroyStructure(System.IntPtr,System.Type)" />
- <Member Name="DestroyStructure&lt;T&gt;(System.IntPtr)" />
- <Member Name="FreeBSTR(System.IntPtr)" />
- <Member Name="GetComInterfaceForObject&lt;T,TInterface&gt;(T)" />
- <Member Name="GetDelegateForFunctionPointer&lt;TDelegate&gt;(System.IntPtr)" />
- <Member Name="GetExceptionCode" />
- <Member Name="GetFunctionPointerForDelegate&lt;TDelegate&gt;(TDelegate)" />
- <Member Name="GetNativeVariantForObject&lt;T&gt;(T,System.IntPtr)" />
- <Member Name="GetObjectForNativeVariant&lt;T&gt;(System.IntPtr)" />
- <Member Name="GetObjectsForNativeVariants(System.IntPtr,System.Int32)" />
- <Member Name="GetObjectsForNativeVariants&lt;T&gt;(System.IntPtr,System.Int32)" />
- <Member Name="GetStartComSlot(System.Type)" />
- <Member Name="GetTypeFromCLSID(System.Guid)" />
- <Member Name="GetTypeInfoName(System.Runtime.InteropServices.ComTypes.ITypeInfo)" />
- <Member Name="OffsetOf&lt;T&gt;(System.String)" />
- <Member Name="PtrToStringBSTR(System.IntPtr)" />
- <Member Name="PtrToStructure&lt;T&gt;(System.IntPtr)" />
- <Member Name="PtrToStructure&lt;T&gt;(System.IntPtr,T)" />
- <Member Name="ReadByte(System.Object,System.Int32)" />
- <Member Name="ReadInt16(System.Object,System.Int32)" />
- <Member Name="ReadInt32(System.Object,System.Int32)" />
- <Member Name="ReadInt64(System.Object,System.Int32)" />
- <Member Name="ReadIntPtr(System.Object,System.Int32)" />
- <Member Name="ReAllocCoTaskMem(System.IntPtr,System.Int32)" />
- <Member Name="ReAllocHGlobal(System.IntPtr,System.IntPtr)" />
- <Member Name="SizeOf&lt;T&gt;" />
- <Member Name="SizeOf&lt;T&gt;(T)" />
- <Member Name="StringToBSTR(System.String)" />
- <Member Name="StringToCoTaskMemAnsi(System.String)" />
- <Member Name="StringToCoTaskMemAuto(System.String)" />
- <Member Name="StringToCoTaskMemUni(System.String)" />
- <Member Name="StringToHGlobalAnsi(System.String)" />
- <Member Name="StringToHGlobalAuto(System.String)" />
- <Member Name="StringToHGlobalUni(System.String)" />
- <Member Name="StringToCoTaskMemUTF8(System.String)" />
- <Member Name="StructureToPtr&lt;T&gt;(T,System.IntPtr,System.Boolean)" />
- <Member Name="UnsafeAddrOfPinnedArrayElement&lt;T&gt;(T[],System.Int32)" />
- <Member Name="WriteByte(System.Object,System.Int32,System.Byte)" />
- <Member Name="WriteInt16(System.Object,System.Int32,System.Char)" />
- <Member Name="WriteInt16(System.Object,System.Int32,System.Int16)" />
- <Member Name="WriteInt32(System.Object,System.Int32,System.Int32)" />
- <Member Name="WriteInt64(System.Object,System.Int32,System.Int64)" />
- <Member Name="WriteIntPtr(System.Object,System.Int32,System.IntPtr)" />
- <Member Name="ZeroFreeBSTR(System.IntPtr)" />
- <Member Name="ZeroFreeCoTaskMemAnsi(System.IntPtr)" />
- <Member Name="ZeroFreeGlobalAllocAnsi(System.IntPtr)" />
- <Member Name="ZeroFreeGlobalAllocUnicode(System.IntPtr)" />
- <Member Name="ZeroFreeCoTaskMemUTF8(System.IntPtr)" />
- <Member Name="SecureStringToCoTaskMemAnsi(System.Security.SecureString)" />
- <Member Name="SecureStringToCoTaskMemUnicode(System.Security.SecureString)" />
- <Member Name="SecureStringToGlobalAllocAnsi(System.Security.SecureString)" />
- <Member Name="SecureStringToGlobalAllocUnicode(System.Security.SecureString)" />
- <Member Name="SecureStringToBSTR(System.Security.SecureString)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.MarshalAsAttribute">
- <Member MemberType="Field" Name="ArraySubType" />
- <Member MemberType="Field" Name="MarshalCookie" />
- <Member MemberType="Field" Name="MarshalType" />
- <Member MemberType="Field" Name="MarshalTypeRef" />
- <Member MemberType="Field" Name="SizeConst" />
- <Member MemberType="Field" Name="SizeParamIndex" />
- <Member Name="#ctor(System.Int16)" />
- <Member Name="#ctor(System.Runtime.InteropServices.UnmanagedType)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- <Member MemberType="Field" Name="IidParameterIndex" />
- <Member MemberType="Field" Name="SafeArraySubType" />
- <Member MemberType="Field" Name="SafeArrayUserDefinedSubType" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ManagedToNativeComInteropStubAttribute">
- <Member Name="#ctor(System.Type,System.String)" />
- <Member Name="get_ClassType" />
- <Member MemberType="Property" Name="ClassType" />
- <Member Name="get_MethodName" />
- <Member MemberType="Property" Name="MethodName" />
- </Type>
- <Type Name="System.Runtime.InteropServices.MarshalDirectiveException" >
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.NativeCallableAttribute">
- <Member Name="#ctor" />
- <Member MemberType="Field" Name="CallingConvention" /> <!-- EE -->
- <Member MemberType="Field" Name="EntryPoint" /> <!-- EE -->
- </Type>
- <Type Name="System.Runtime.InteropServices.OptionalAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.OutAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.PreserveSigAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute">
- <Member Name="#ctor(System.Int32,System.Int32)" />
- <Member Name="get_MajorVersion" />
- <Member MemberType="Property" Name="MajorVersion" />
- <Member Name="get_MinorVersion" />
- <Member MemberType="Property" Name="MinorVersion" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ProgIdAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.SafeHandle">
- <Member MemberType="Field" Name="handle" />
- <Member Name="#ctor(System.IntPtr,System.Boolean)" />
- <Member Name="#ctor" />
- <Member Name="Close" />
- <Member Name="DangerousAddRef(System.Boolean@)" />
- <Member Name="DangerousGetHandle" />
- <Member Name="DangerousRelease" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="Finalize" />
- <Member Name="get_IsClosed" />
- <Member Name="get_IsInvalid" />
- <Member Name="ReleaseHandle" />
- <Member Name="SetHandle(System.IntPtr)" />
- <Member Name="SetHandleAsInvalid" />
- <Member MemberType="Property" Name="IsClosed" />
- <Member MemberType="Property" Name="IsInvalid" />
- </Type>
- <Type Name="System.Runtime.InteropServices.TypeLibImportClassAttribute">
- <Member Name="#ctor(System.Type)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.TypeLibVersionAttribute">
- <Member Name="#ctor(System.Int32,System.Int32)" />
- <Member Name="get_MajorVersion" />
- <Member MemberType="Property" Name="MajorVersion" />
- <Member Name="get_MinorVersion" />
- <Member MemberType="Property" Name="MinorVersion" />
- </Type>
- <Type Name="System.Runtime.InteropServices.CriticalHandle">
- <Member MemberType="Field" Name="handle" />
- <Member MemberType="Field" Name="_stackTrace" Flavor="chk,dbg" />
- <Member Name="#ctor(System.IntPtr)" />
- <Member Name="#ctor" />
- <Member Name="Close" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="Finalize" />
- <Member Name="get_IsClosed" />
- <Member Name="get_IsInvalid" />
- <Member Name="ReleaseHandle" />
- <Member Name="SetHandle(System.IntPtr)" />
- <Member Name="SetHandleAsInvalid" />
- <Member MemberType="Property" Name="IsClosed" />
- <Member MemberType="Property" Name="IsInvalid" />
- </Type>
- <Type Name="Microsoft.Win32.SafeHandles.CriticalHandleMinusOneIsInvalid">
- <Member Name="#ctor" />
- <Member Name="get_IsInvalid" />
- </Type>
- <Type Name="Microsoft.Win32.SafeHandles.CriticalHandleZeroOrMinusOneIsInvalid">
- <Member Name="#ctor" />
- <Member Name="get_IsInvalid" />
- </Type>
- <Type Name="Microsoft.Win32.SafeHandles.SafeHandleMinusOneIsInvalid">
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="get_IsInvalid" />
- </Type>
- <Type Name="Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid">
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="get_IsInvalid" />
- </Type>
- <Type Name="Microsoft.Win32.SafeHandles.SafeFileHandle">
- <Member Name="#ctor(System.IntPtr,System.Boolean)" />
- </Type>
- <Type Name="Microsoft.Win32.SafeHandles.SafeWaitHandle">
- <Member Name="#ctor(System.IntPtr,System.Boolean)" />
- <Member Status="ApiRoot" Name="ReleaseHandle" />
- </Type>
- <Type Name="System.Runtime.InteropServices.SEHException" >
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="CanResume" />
- </Type>
- <Type Name="System.Runtime.InteropServices.StructLayoutAttribute">
- <Member MemberType="Field" Name="CharSet" />
- <Member MemberType="Field" Name="Pack" />
- <Member MemberType="Field" Name="Size" />
- <Member Name="#ctor(System.Int16)" />
- <Member Name="#ctor(System.Runtime.InteropServices.LayoutKind)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute">
- <Member Name="#ctor(System.Runtime.InteropServices.CallingConvention)" />
- <Member MemberType="Property" Name="CallingConvention" />
- <Member Name="get_CallingConvention" />
- <Member MemberType="Field" Name="BestFitMapping" />
- <Member MemberType="Field" Name="CharSet" />
- <Member MemberType="Field" Name="SetLastError" />
- <Member MemberType="Field" Name="ThrowOnUnmappableChar" />
- </Type>
- <Type Name="System.Runtime.InteropServices.UnmanagedType">
- <Member MemberType="Field" Name="AnsiBStr" />
- <Member MemberType="Field" Name="AsAny" />
- <Member MemberType="Field" Name="Bool" />
- <Member MemberType="Field" Name="BStr" />
- <Member MemberType="Field" Name="ByValArray" />
- <Member MemberType="Field" Name="ByValTStr" />
- <Member MemberType="Field" Name="Currency" />
- <Member MemberType="Field" Name="CustomMarshaler" />
- <Member MemberType="Field" Name="Error" />
- <Member MemberType="Field" Name="FunctionPtr" />
- <Member MemberType="Field" Name="I1" />
- <Member MemberType="Field" Name="I2" />
- <Member MemberType="Field" Name="I4" />
- <Member MemberType="Field" Name="I8" />
- <Member MemberType="Field" Name="IDispatch" />
- <Member MemberType="Field" Name="Interface" />
- <Member MemberType="Field" Name="LPArray" />
- <Member MemberType="Field" Name="LPStr" />
- <Member MemberType="Field" Name="LPStruct" />
- <Member MemberType="Field" Name="LPTStr" />
- <Member MemberType="Field" Name="LPWStr" />
- <Member MemberType="Field" Name="LPUTF8Str" />
- <Member MemberType="Field" Name="R4" />
- <Member MemberType="Field" Name="R8" />
- <Member MemberType="Field" Name="SafeArray" />
- <Member MemberType="Field" Name="Struct" />
- <Member MemberType="Field" Name="SysInt" />
- <Member MemberType="Field" Name="SysUInt" />
- <Member MemberType="Field" Name="TBStr" />
- <Member MemberType="Field" Name="U1" />
- <Member MemberType="Field" Name="U2" />
- <Member MemberType="Field" Name="U4" />
- <Member MemberType="Field" Name="U8" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="VariantBool" />
- <Member MemberType="Field" Name="VBByRefStr" />
- <Member MemberType="Field" Name="HString" />
- <Member MemberType="Field" Name="IInspectable" />
- <Member MemberType="Field" Name="IUnknown" />
- </Type>
- <Type Name="System.RuntimeFieldHandle">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Equals(System.RuntimeFieldHandle)" />
- <Member Name="get_Value" />
- <Member Name="op_Equality(System.RuntimeFieldHandle,System.RuntimeFieldHandle)" />
- <Member Name="op_Inequality(System.RuntimeFieldHandle,System.RuntimeFieldHandle)" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.RuntimeMethodHandle">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Equals(System.RuntimeMethodHandle)" />
- <Member Status="ImplRoot" Name="GetValueInternal(System.RuntimeMethodHandle)" />
- <Member Name="get_Value" />
- <Member Name="GetFunctionPointer" />
- <Member MemberType="Property" Name="Value" />
- <Member Name="op_Equality(System.RuntimeMethodHandle,System.RuntimeMethodHandle)" />
- <Member Name="op_Inequality(System.RuntimeMethodHandle,System.RuntimeMethodHandle)" />
- </Type>
- <Type Name="System.SByte">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="CompareTo(System.SByte)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.SByte)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.SByte@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.SByte@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.Security.AllowPartiallyTrustedCallersAttribute">
- <Member Name="#ctor" />
- <Member Name="get_PartialTrustVisibilityLevel" />
- <Member Name="set_PartialTrustVisibilityLevel(System.Security.PartialTrustVisibilityLevel)" />
- <Member MemberType="Property" Name="PartialTrustVisibilityLevel" />
- </Type>
- <Type Name="System.Security.PartialTrustVisibilityLevel">
- <Member MemberType="Field" Name="NotVisibleByDefault" />
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="VisibleToAllHosts" />
- </Type>
- <Type Name="System.Security.SecureString">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Char*,System.Int32)" />
- <Member Name="get_Length" />
- <Member MemberType="Property" Name="Length" />
- <Member Name="AppendChar(System.Char)" />
- <Member Name="Clear" />
- <Member Name="Copy" />
- <Member Name="Dispose" />
- <Member Name="InsertAt(System.Int32,System.Char)" />
- <Member Name="IsReadOnly" />
- <Member Name="MakeReadOnly" />
- <Member Name="RemoveAt(System.Int32)" />
- <Member Name="SetAt(System.Int32,System.Char)" />
- </Type>
- <Type Name="System.Security.SecurityCriticalAttribute">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Security.SecurityCriticalScope)" />
- <Member Name="get_Scope" />
- <Member MemberType="Property" Name="Scope" />
- </Type>
- <Type Name="System.Security.SecurityCriticalScope">
- <Member MemberType="Field" Name="Everything" />
- <Member MemberType="Field" Name="Explicit" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Security.SecurityException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Type)" />
- <Member Name="#ctor(System.String,System.Type,System.String)" />
- <Member Name="get_Demanded" />
- <Member Name="get_DenySetInstance" />
- <Member Name="get_FailedAssemblyInfo" />
- <Member Name="get_GrantedSet" />
- <Member Name="get_Method" />
- <Member Name="get_PermissionState" />
- <Member Name="get_PermissionType" />
- <Member Name="get_PermitOnlySetInstance" />
- <Member Name="get_RefusedSet" />
- <Member Name="get_Url" />
- <Member Name="GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="set_Demanded(System.Object)" />
- <Member Name="set_DenySetInstance(System.Object)" />
- <Member Name="set_FailedAssemblyInfo(System.Reflection.AssemblyName)" />
- <Member Name="set_GrantedSet(System.String)" />
- <Member Name="set_Method(System.Reflection.MethodInfo)" />
- <Member Name="set_PermissionState(System.String)" />
- <Member Name="set_PermissionType(System.Type)" />
- <Member Name="set_PermitOnlySetInstance(System.Object)" />
- <Member Name="set_RefusedSet(System.String)" />
- <Member Name="set_Url(System.String)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Demanded" />
- <Member MemberType="Property" Name="DenySetInstance" />
- <Member MemberType="Property" Name="FailedAssemblyInfo" />
- <Member MemberType="Property" Name="GrantedSet" />
- <Member MemberType="Property" Name="Method" />
- <Member MemberType="Property" Name="PermissionState" />
- <Member MemberType="Property" Name="PermissionType" />
- <Member MemberType="Property" Name="PermitOnlySetInstance" />
- <Member MemberType="Property" Name="RefusedSet" />
- <Member MemberType="Property" Name="Url" />
- </Type>
- <Type Name="System.Security.SecurityState">
- <Member Name="#ctor" />
- <Member Name="IsStateAvailable" />
- <Member Name="EnsureState" />
- </Type>
- <Type Name="System.SerializableAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Single">
- <Member MemberType="Field" Name="Epsilon" />
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member MemberType="Field" Name="NaN" />
- <Member MemberType="Field" Name="NegativeInfinity" />
- <Member MemberType="Field" Name="PositiveInfinity" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="CompareTo(System.Single)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Single)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="IsInfinity(System.Single)" />
- <Member Name="IsNaN(System.Single)" />
- <Member Name="IsNegativeInfinity(System.Single)" />
- <Member Name="IsPositiveInfinity(System.Single)" />
- <Member Name="op_Equality(System.Single,System.Single)" />
- <Member Name="op_GreaterThan(System.Single,System.Single)" />
- <Member Name="op_GreaterThanOrEqual(System.Single,System.Single)" />
- <Member Name="op_Inequality(System.Single,System.Single)" />
- <Member Name="op_LessThan(System.Single,System.Single)" />
- <Member Name="op_LessThanOrEqual(System.Single,System.Single)" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.Single@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Single@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.StackOverflowException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.STAThreadAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.String">
- <Member Status="ImplRoot" MemberType="Field" Name="m_stringLength" />
- <Member MemberType="Field" Name="Empty" />
- <Member Name="#ctor(System.Char*)" />
- <Member Name="#ctor(System.Char*,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Char,System.Int32)" />
- <Member Name="#ctor(System.Char[])" />
- <Member Name="#ctor(System.Char[],System.Int32,System.Int32)" />
- <Member Name="#ctor(System.SByte*)" />
- <Member Name="#ctor(System.SByte*,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.SByte*,System.Int32,System.Int32,System.Text.Encoding)" />
- <Member Name="Clone" />
- <Member Name="Compare(System.String,System.Int32,System.String,System.Int32,System.Int32)" />
- <Member Name="Compare(System.String,System.Int32,System.String,System.Int32,System.Int32,System.Boolean)" />
- <Member Name="Compare(System.String,System.Int32,System.String,System.Int32,System.Int32,System.Boolean,System.Globalization.CultureInfo)" />
- <Member Name="Compare(System.String,System.Int32,System.String,System.Int32,System.Int32,System.Globalization.CultureInfo,System.Globalization.CompareOptions)" />
- <Member Name="Compare(System.String,System.Int32,System.String,System.Int32,System.Int32,System.StringComparison)" />
- <Member Name="Compare(System.String,System.String)" />
- <Member Name="Compare(System.String,System.String,System.Boolean)" />
- <Member Name="Compare(System.String,System.String,System.Boolean,System.Globalization.CultureInfo)" />
- <Member Name="Compare(System.String,System.String,System.Globalization.CultureInfo,System.Globalization.CompareOptions)" />
- <Member Name="Compare(System.String,System.String,System.StringComparison)" />
- <Member Name="CompareOrdinal(System.String,System.Int32,System.String,System.Int32,System.Int32)" />
- <Member Name="CompareOrdinal(System.String,System.String)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="CompareTo(System.String)" />
- <Member Name="Concat(System.Collections.Generic.IEnumerable&lt;System.String&gt;)" />
- <Member Name="Concat(System.Object)" />
- <Member Name="Concat(System.Object,System.Object)" />
- <Member Name="Concat(System.Object,System.Object,System.Object)" />
- <Member Name="Concat(System.Object[])" />
- <Member Name="Concat(System.String,System.String)" />
- <Member Name="Concat(System.String,System.String,System.String)" />
- <Member Name="Concat(System.String,System.String,System.String,System.String)" />
- <Member Name="Concat(System.String[])" />
- <Member Name="Concat&lt;T&gt;(System.Collections.Generic.IEnumerable&lt;T&gt;)" />
- <Member Name="Contains(System.String)" />
- <Member Name="Copy(System.String)" />
- <Member Name="CopyTo(System.Int32,System.Char[],System.Int32,System.Int32)" />
- <Member Name="EndsWith(System.String)" />
- <Member Name="EndsWith(System.String,System.Boolean,System.Globalization.CultureInfo)" />
- <Member Name="EndsWith(System.String,System.StringComparison)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.String)" />
- <Member Name="Equals(System.String,System.String)" />
- <Member Name="Equals(System.String,System.String,System.StringComparison)" />
- <Member Name="Equals(System.String,System.StringComparison)" />
- <Member Name="Format(System.IFormatProvider,System.String,System.Object)" />
- <Member Name="Format(System.IFormatProvider,System.String,System.Object,System.Object)" />
- <Member Name="Format(System.IFormatProvider,System.String,System.Object,System.Object,System.Object)" />
- <Member Name="Format(System.IFormatProvider,System.String,System.Object[])" />
- <Member Name="Format(System.String,System.Object)" />
- <Member Name="Format(System.String,System.Object,System.Object)" />
- <Member Name="Format(System.String,System.Object,System.Object,System.Object)" />
- <Member Name="Format(System.String,System.Object[])" />
- <Member Name="get_Chars(System.Int32)" />
- <Member Name="get_Length" />
- <Member Name="GetEnumerator" />
- <Member Name="GetHashCode" />
- <Member Name="GetHashCode(System.StringComparison)" />
- <Member Name="GetTypeCode" />
- <Member Name="IndexOf(System.Char)" />
- <Member Name="IndexOf(System.Char,System.Int32)" />
- <Member Name="IndexOf(System.Char,System.Int32,System.Int32)" />
- <Member Name="IndexOf(System.String)" />
- <Member Name="IndexOf(System.String,System.Int32)" />
- <Member Name="IndexOf(System.String,System.Int32,System.Int32)" />
- <Member Name="IndexOf(System.String,System.Int32,System.Int32,System.StringComparison)" />
- <Member Name="IndexOf(System.String,System.Int32,System.StringComparison)" />
- <Member Name="IndexOf(System.String,System.StringComparison)" />
- <Member Name="IndexOfAny(System.Char[])" />
- <Member Name="IndexOfAny(System.Char[],System.Int32)" />
- <Member Name="IndexOfAny(System.Char[],System.Int32,System.Int32)" />
- <Member Name="Insert(System.Int32,System.String)" />
- <Member Name="Intern(System.String)" />
- <Member Name="IsInterned(System.String)" />
- <Member Name="IsNormalized" />
- <Member Name="IsNormalized(System.Text.NormalizationForm)" />
- <Member Name="IsNullOrEmpty(System.String)" />
- <Member Name="IsNullOrWhiteSpace(System.String)" />
- <Member Name="Join(System.Char,System.Object[])" />
- <Member Name="Join&lt;T&gt;(System.Char,System.Collections.Generic.IEnumerable&lt;T&gt;)" />
- <Member Name="Join(System.Char,System.String[])" />
- <Member Name="Join(System.Char,System.String[],System.Int32,System.Int32)" />
- <Member Name="Join(System.String,System.Object[])" />
- <Member Name="Join&lt;T&gt;(System.String,System.Collections.Generic.IEnumerable&lt;T&gt;)" />
- <Member Name="Join(System.String,System.Collections.Generic.IEnumerable&lt;System.String&gt;)" />
- <Member Name="Join(System.String,System.String[])" />
- <Member Name="Join(System.String,System.String[],System.Int32,System.Int32)" />
- <Member Name="LastIndexOf(System.Char)" />
- <Member Name="LastIndexOf(System.Char,System.Int32)" />
- <Member Name="LastIndexOf(System.Char,System.Int32,System.Int32)" />
- <Member Name="LastIndexOf(System.String)" />
- <Member Name="LastIndexOf(System.String,System.Int32)" />
- <Member Name="LastIndexOf(System.String,System.Int32,System.Int32)" />
- <Member Name="LastIndexOf(System.String,System.Int32,System.Int32,System.StringComparison)" />
- <Member Name="LastIndexOf(System.String,System.Int32,System.StringComparison)" />
- <Member Name="LastIndexOf(System.String,System.StringComparison)" />
- <Member Name="LastIndexOfAny(System.Char[])" />
- <Member Name="LastIndexOfAny(System.Char[],System.Int32)" />
- <Member Name="LastIndexOfAny(System.Char[],System.Int32,System.Int32)" />
- <Member Name="Normalize" />
- <Member Name="Normalize(System.Text.NormalizationForm)" />
- <Member Name="op_Equality(System.String,System.String)" />
- <Member Name="op_Inequality(System.String,System.String)" />
- <Member Name="PadLeft(System.Int32)" />
- <Member Name="PadLeft(System.Int32,System.Char)" />
- <Member Name="PadRight(System.Int32)" />
- <Member Name="PadRight(System.Int32,System.Char)" />
- <Member Name="Remove(System.Int32)" />
- <Member Name="Remove(System.Int32,System.Int32)" />
- <Member Name="Replace(System.Char,System.Char)" />
- <Member Name="Replace(System.String,System.String)" />
- <Member Name="Split(System.Char,System.Int32,System.StringSplitOptions)" />
- <Member Name="Split(System.Char,System.StringSplitOptions)"/>
- <Member Name="Split(System.Char[])" />
- <Member Name="Split(System.Char[],System.Int32)" />
- <Member Name="Split(System.Char[],System.Int32,System.StringSplitOptions)" />
- <Member Name="Split(System.Char[],System.StringSplitOptions)"/>
- <Member Name="Split(System.String,System.Int32,System.StringSplitOptions)" />
- <Member Name="Split(System.String,System.StringSplitOptions)"/>
- <Member Name="Split(System.String[],System.Int32,System.StringSplitOptions)" />
- <Member Name="Split(System.String[],System.StringSplitOptions)"/>
- <Member Name="StartsWith(System.String)" />
- <Member Name="StartsWith(System.String,System.Boolean,System.Globalization.CultureInfo)" />
- <Member Name="StartsWith(System.String,System.StringComparison)" />
- <Member Name="Substring(System.Int32)" />
- <Member Name="Substring(System.Int32,System.Int32)" />
- <Member Name="ToCharArray" />
- <Member Name="ToCharArray(System.Int32,System.Int32)" />
- <Member Name="ToLower" />
- <Member Name="ToLower(System.Globalization.CultureInfo)" />
- <Member Name="ToLowerInvariant" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToUpper" />
- <Member Name="ToUpper(System.Globalization.CultureInfo)" />
- <Member Name="ToUpperInvariant" />
- <Member Name="Trim" />
- <Member Name="Trim(System.Char[])" />
- <Member Name="TrimEnd(System.Char[])" />
- <Member Name="TrimStart(System.Char[])" />
- <Member MemberType="Property" Name="Chars(System.Int32)" />
- <Member MemberType="Property" Name="Length" />
- <Member Status="ImplRoot" Name="System.Collections.IEnumerable.GetEnumerator" />
- <Member Status="ImplRoot" Name="System.Collections.Generic.IEnumerable&lt;System.Char&gt;.GetEnumerator" />
- <Member Status="ImplRoot" Name="CtorCharArray(System.Char[])" />
- <Member Status="ImplRoot" Name="CtorCharArrayStartLength(System.Char[],System.Int32,System.Int32)" />
- <Member Status="ImplRoot" Name="CtorCharCount(System.Char,System.Int32)" />
- <Member Status="ImplRoot" Name="CtorCharPtr(System.Char*)" />
- <Member Status="ImplRoot" Name="CtorCharPtrStartLength(System.Char*,System.Int32,System.Int32)" />
- <Member Status="ImplRoot" Name="CreateString(System.SByte*,System.Int32,System.Int32,System.Text.Encoding)" /> <!-- EE -->
- <Member Status="ImplRoot" Name="InternalCopy(System.String,System.IntPtr,System.Int32)" /> <!-- EE -->
- </Type>
- <Type Name="System.Collections.StructuralComparisons">
- <Member Name="get_StructuralComparer" />
- <Member Name="get_StructuralEqualityComparer" />
- <Member MemberType="Property" Name="StructuralComparer" />
- <Member MemberType="Property" Name="StructuralEqualityComparer" />
- </Type>
- <Type Name="System.StringComparer">
- <Member Name="#ctor" />
- <Member Name="Compare(System.Object,System.Object)" />
- <Member Name="Compare(System.String,System.String)" />
- <Member Name="Create(System.Globalization.CultureInfo,System.Boolean)" />
- <Member Name="Equals(System.Object,System.Object)" />
- <Member Name="Equals(System.String,System.String)" />
- <Member Name="FromComparison(System.StringComparison)" />
- <Member Name="get_CurrentCulture" />
- <Member Name="get_CurrentCultureIgnoreCase" />
- <Member Name="get_InvariantCulture" />
- <Member Name="get_InvariantCultureIgnoreCase" />
- <Member Name="get_Ordinal" />
- <Member Name="get_OrdinalIgnoreCase" />
- <Member Name="GetHashCode(System.Object)" />
- <Member Name="GetHashCode(System.String)" />
- <Member MemberType="Property" Name="CurrentCulture" />
- <Member MemberType="Property" Name="CurrentCultureIgnoreCase" />
- <Member MemberType="Property" Name="InvariantCulture" />
- <Member MemberType="Property" Name="InvariantCultureIgnoreCase" />
- <Member MemberType="Property" Name="Ordinal" />
- <Member MemberType="Property" Name="OrdinalIgnoreCase" />
- </Type>
- <Type Name="System.StringComparison">
- <Member MemberType="Field" Name="CurrentCulture" />
- <Member MemberType="Field" Name="CurrentCultureIgnoreCase" />
- <Member MemberType="Field" Name="InvariantCulture" />
- <Member MemberType="Field" Name="InvariantCultureIgnoreCase" />
- <Member MemberType="Field" Name="Ordinal" />
- <Member MemberType="Field" Name="OrdinalIgnoreCase" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.SystemException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Text.ASCIIEncoding">
- <Member Name="#ctor" />
- <Member Name="get_IsSingleByte" />
- <Member Name="GetByteCount(System.Char*,System.Int32)" />
- <Member Name="GetByteCount(System.Char[],System.Int32,System.Int32)" />
- <Member Name="GetByteCount(System.String)" />
- <Member Name="GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32)" />
- <Member Name="GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetBytes(System.String,System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetCharCount(System.Byte*,System.Int32)" />
- <Member Name="GetCharCount(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="GetChars(System.Byte*,System.Int32,System.Char*,System.Int32)" />
- <Member Name="GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)" />
- <Member Name="GetDecoder" />
- <Member Name="GetEncoder" />
- <Member Name="GetMaxByteCount(System.Int32)" />
- <Member Name="GetMaxCharCount(System.Int32)" />
- <Member Name="GetString(System.Byte[],System.Int32,System.Int32)" />
- <Member MemberType="Property" Name="IsSingleByte" />
- </Type>
- <Type Name="System.Text.Decoder">
- <Member Name="#ctor" />
- <Member Name="Convert(System.Byte*,System.Int32,System.Char*,System.Int32,System.Boolean,System.Int32@,System.Int32@,System.Boolean@)" />
- <Member Name="Convert(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Int32,System.Boolean,System.Int32@,System.Int32@,System.Boolean@)" />
- <Member Name="get_Fallback" />
- <Member Name="get_FallbackBuffer" />
- <Member Name="GetCharCount(System.Byte*,System.Int32,System.Boolean)" />
- <Member Name="GetCharCount(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="GetCharCount(System.Byte[],System.Int32,System.Int32,System.Boolean)" />
- <Member Name="GetChars(System.Byte*,System.Int32,System.Char*,System.Int32,System.Boolean)" />
- <Member Name="GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)" />
- <Member Name="GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Boolean)" />
- <Member Name="Reset" />
- <Member Name="set_Fallback(System.Text.DecoderFallback)" />
- <Member MemberType="Property" Name="Fallback" />
- <Member MemberType="Property" Name="FallbackBuffer" />
- </Type>
- <Type Name="System.Text.DecoderExceptionFallbackBuffer">
- <Member Name="#ctor" />
- <Member Name="Fallback(System.Byte[],System.Int32)" />
- <Member Name="get_Remaining" />
- <Member Name="GetNextChar" />
- <Member Name="MovePrevious" />
- <Member MemberType="Property" Name="Remaining" />
- </Type>
- <Type Name="System.Text.DecoderFallback">
- <Member Name="#ctor" />
- <Member Name="CreateFallbackBuffer" />
- <Member Name="get_MaxCharCount" />
- <Member Name="get_ReplacementFallback" />
- <Member MemberType="Property" Name="MaxCharCount" />
- <Member MemberType="Property" Name="ReplacementFallback" />
- <Member Name="get_ExceptionFallback" />
- <Member MemberType="Property" Name="ExceptionFallback" />
- </Type>
- <Type Name="System.Text.DecoderFallbackBuffer">
- <Member Name="#ctor" />
- <Member Name="Fallback(System.Byte[],System.Int32)" />
- <Member Name="get_Remaining" />
- <Member Name="GetNextChar" />
- <Member Name="MovePrevious" />
- <Member Name="Reset" />
- <Member MemberType="Property" Name="Remaining" />
- </Type>
- <Type Name="System.Text.DecoderReplacementFallback">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="CreateFallbackBuffer" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_DefaultString" />
- <Member Name="get_MaxCharCount" />
- <Member Name="GetHashCode" />
- <Member MemberType="Property" Name="DefaultString" />
- <Member MemberType="Property" Name="MaxCharCount" />
- </Type>
- <Type Name="System.Text.DecoderReplacementFallbackBuffer">
- <Member Name="#ctor(System.Text.DecoderReplacementFallback)" />
- <Member Name="Fallback(System.Byte[],System.Int32)" />
- <Member Name="get_Remaining" />
- <Member Name="GetNextChar" />
- <Member Name="MovePrevious" />
- <Member Name="Reset" />
- <Member MemberType="Property" Name="Remaining" />
- </Type>
- <Type Name="System.Text.DecoderExceptionFallback">
- <Member Name="#ctor" />
- <Member Name="CreateFallbackBuffer" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_MaxCharCount" />
- <Member Name="GetHashCode" />
- <Member MemberType="Property" Name="MaxCharCount" />
- </Type>
- <Type Name="System.Text.DecoderFallbackException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Byte[],System.Int32)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_BytesUnknown" />
- <Member Name="get_Index" />
- <Member MemberType="Property" Name="BytesUnknown" />
- <Member MemberType="Property" Name="Index" />
- </Type>
- <Type Name="System.Text.Encoder">
- <Member Name="#ctor" />
- <Member Name="Convert(System.Char*,System.Int32,System.Byte*,System.Int32,System.Boolean,System.Int32@,System.Int32@,System.Boolean@)" />
- <Member Name="Convert(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@,System.Int32@,System.Boolean@)" />
- <Member Name="get_Fallback" />
- <Member Name="get_FallbackBuffer" />
- <Member Name="GetByteCount(System.Char*,System.Int32,System.Boolean)" />
- <Member Name="GetByteCount(System.Char[],System.Int32,System.Int32,System.Boolean)" />
- <Member Name="GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32,System.Boolean)" />
- <Member Name="GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32,System.Boolean)" />
- <Member Name="Reset" />
- <Member Name="set_Fallback(System.Text.EncoderFallback)" />
- <Member MemberType="Property" Name="Fallback" />
- <Member MemberType="Property" Name="FallbackBuffer" />
- </Type>
- <Type Name="System.Text.EncoderFallback">
- <Member Name="#ctor" />
- <Member Name="CreateFallbackBuffer" />
- <Member Name="get_MaxCharCount" />
- <Member Name="get_ReplacementFallback" />
- <Member MemberType="Property" Name="MaxCharCount" />
- <Member MemberType="Property" Name="ReplacementFallback" />
- <Member Name="get_ExceptionFallback" />
- <Member MemberType="Property" Name="ExceptionFallback" />
- </Type>
- <Type Name="System.Text.EncoderFallbackBuffer">
- <Member Name="#ctor" />
- <Member Name="Fallback(System.Char,System.Char,System.Int32)" />
- <Member Name="Fallback(System.Char,System.Int32)" />
- <Member Name="get_Remaining" />
- <Member Name="GetNextChar" />
- <Member Name="MovePrevious" />
- <Member Name="Reset" />
- <Member MemberType="Property" Name="Remaining" />
- </Type>
- <Type Name="System.Text.EncoderReplacementFallback">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="CreateFallbackBuffer" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_DefaultString" />
- <Member Name="get_MaxCharCount" />
- <Member Name="GetHashCode" />
- <Member MemberType="Property" Name="DefaultString" />
- <Member MemberType="Property" Name="MaxCharCount" />
- </Type>
- <Type Name="System.Text.EncoderExceptionFallback">
- <Member Name="#ctor" />
- <Member Name="CreateFallbackBuffer" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_MaxCharCount" />
- <Member Name="GetHashCode" />
- <Member MemberType="Property" Name="MaxCharCount" />
- </Type>
- <Type Name="System.Text.EncoderExceptionFallbackBuffer">
- <Member Name="#ctor" />
- <Member Name="Fallback(System.Char,System.Char,System.Int32)" />
- <Member Name="Fallback(System.Char,System.Int32)" />
- <Member Name="get_Remaining" />
- <Member Name="GetNextChar" />
- <Member Name="MovePrevious" />
- <Member MemberType="Property" Name="Remaining" />
- </Type>
- <Type Name="System.Text.EncoderFallbackException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Char,System.Int32)" />
- <Member Name="#ctor(System.String,System.Char,System.Char,System.Int32)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="IsUnknownSurrogate" />
- <Member Name="get_CharUnknown" />
- <Member Name="get_CharUnknownHigh" />
- <Member Name="get_CharUnknownLow" />
- <Member Name="get_Index" />
- <Member MemberType="Property" Name="CharUnknown" />
- <Member MemberType="Property" Name="CharUnknownHigh" />
- <Member MemberType="Property" Name="CharUnknownLow" />
- <Member MemberType="Property" Name="Index" />
- </Type>
- <Type Name="System.Text.EncoderReplacementFallbackBuffer">
- <Member Name="#ctor(System.Text.EncoderReplacementFallback)" />
- <Member Name="Fallback(System.Char,System.Char,System.Int32)" />
- <Member Name="Fallback(System.Char,System.Int32)" />
- <Member Name="get_Remaining" />
- <Member Name="GetNextChar" />
- <Member Name="MovePrevious" />
- <Member Name="Reset" />
- <Member MemberType="Property" Name="Remaining" />
- </Type>
- <Type Name="System.Text.EncodingProvider">
- <Member Name="#ctor" />
- <Member Name="GetEncoding(System.Int32)" />
- <Member Name="GetEncoding(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback)" />
- <Member Name="GetEncoding(System.String)" />
- <Member Name="GetEncoding(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback)" />
- </Type>
- <Type Name="System.Text.Encoding">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback)" />
- <Member Name="Clone" />
- <Member Name="Convert(System.Text.Encoding,System.Text.Encoding,System.Byte[])" />
- <Member Name="Convert(System.Text.Encoding,System.Text.Encoding,System.Byte[],System.Int32,System.Int32)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_ASCII" />
- <Member Name="get_BigEndianUnicode" />
- <Member Name="get_BodyName" />
- <Member Name="get_CodePage" />
- <Member Name="get_DecoderFallback" />
- <Member Name="get_Default" />
- <Member Name="get_EncoderFallback" />
- <Member Name="get_EncodingName" />
- <Member Name="get_HeaderName" />
- <Member Name="get_IsBrowserDisplay" />
- <Member Name="get_IsBrowserSave" />
- <Member Name="get_IsMailNewsDisplay" />
- <Member Name="get_IsMailNewsSave" />
- <Member Name="get_IsReadOnly" />
- <Member Name="get_IsSingleByte" />
- <Member Name="get_Unicode" />
- <Member Name="get_UTF32" />
- <Member Name="get_UTF7" />
- <Member Name="get_UTF8" />
- <Member Name="get_WebName" />
- <Member Name="get_WindowsCodePage" />
- <Member Name="GetByteCount(System.Char*,System.Int32)" />
- <Member Name="GetByteCount(System.Char[])" />
- <Member Name="GetByteCount(System.Char[],System.Int32,System.Int32)" />
- <Member Name="GetByteCount(System.String)" />
- <Member Name="GetByteCount(System.String,System.Int32,System.Int32)" />
- <Member Name="GetBytes(System.Char[])" />
- <Member Name="GetBytes(System.Char[],System.Int32,System.Int32)" />
- <Member Name="GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetBytes(System.String)" />
- <Member Name="GetBytes(System.String,System.Int32,System.Int32)" />
- <Member Name="GetBytes(System.String,System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32)" />
- <Member Name="GetCharCount(System.Byte[])" />
- <Member Name="GetCharCount(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="GetChars(System.Byte*,System.Int32,System.Char*,System.Int32)" />
- <Member Name="GetChars(System.Byte[])" />
- <Member Name="GetChars(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)" />
- <Member Name="GetString(System.Byte*,System.Int32)" /> <!-- New exposed API in ProjectK -->
- <Member Name="GetDecoder" />
- <Member Name="GetEncoder" />
- <Member Name="RegisterProvider(System.Text.EncodingProvider)" />
- <Member Name="GetEncoding(System.Int32)"/> <!-- For use in Framework assemblies, but not public in Win8P reference assemblies. -->
- <Member Name="GetEncoding(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback)" />
- <Member Name="GetEncoding(System.String)" />
- <Member Name="GetEncoding(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback)" />
- <Member Name="GetEncodings" />
- <Member Name="GetHashCode" />
- <Member Name="GetMaxByteCount(System.Int32)" />
- <Member Name="GetMaxCharCount(System.Int32)" />
- <Member Name="GetPreamble" />
- <Member Name="GetString(System.Byte[])" />
- <Member Name="GetString(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="IsAlwaysNormalized" />
- <Member Name="IsAlwaysNormalized(System.Text.NormalizationForm)" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnDeserializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- <Member Name="set_DecoderFallback(System.Text.DecoderFallback)" />
- <Member Name="set_EncoderFallback(System.Text.EncoderFallback)" />
- <Member MemberType="Property" Name="ASCII" />
- <Member MemberType="Property" Name="BigEndianUnicode" />
- <Member MemberType="Property" Name="BodyName" />
- <Member MemberType="Property" Name="CodePage" />
- <Member MemberType="Property" Name="DecoderFallback" />
- <Member MemberType="Property" Name="Default" />
- <Member MemberType="Property" Name="EncoderFallback" />
- <Member MemberType="Property" Name="EncodingName" />
- <Member MemberType="Property" Name="HeaderName" />
- <Member MemberType="Property" Name="IsBrowserDisplay" />
- <Member MemberType="Property" Name="IsBrowserSave" />
- <Member MemberType="Property" Name="IsMailNewsDisplay" />
- <Member MemberType="Property" Name="IsMailNewsSave" />
- <Member MemberType="Property" Name="IsReadOnly" />
- <Member MemberType="Property" Name="IsSingleByte" />
- <Member MemberType="Property" Name="Unicode" />
- <Member MemberType="Property" Name="UTF32" />
- <Member MemberType="Property" Name="UTF7" />
- <Member MemberType="Property" Name="UTF8" />
- <Member MemberType="Property" Name="WebName" />
- </Type>
- <Type Name="System.Text.EncodingInfo">
- <Member Name="Equals(System.Object)" />
- <Member Name="get_CodePage" />
- <Member Name="get_DisplayName" />
- <Member Name="get_Name" />
- <Member Name="GetEncoding" />
- <Member Name="GetHashCode" />
- <Member MemberType="Property" Name="CodePage" />
- <Member MemberType="Property" Name="DisplayName" />
- <Member MemberType="Property" Name="Name" />
- </Type>
- <Type Name="System.Text.NormalizationForm">
- <Member MemberType="Field" Name="FormC" />
- <Member MemberType="Field" Name="FormD" />
- <Member MemberType="Field" Name="FormKC" />
- <Member MemberType="Field" Name="FormKD" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Text.StringBuilder">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Int32)" />
- <Member Name="#ctor(System.String,System.Int32,System.Int32,System.Int32)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Append(System.Boolean)" />
- <Member Name="Append(System.Byte)" />
- <Member Name="Append(System.Char)" />
- <Member Name="Append(System.Char,System.Int32)" />
- <Member Name="Append(System.Char[])" />
- <Member Name="Append(System.Char[],System.Int32,System.Int32)" />
- <Member Name="Append(System.Char*,System.Int32)" />
- <Member Name="Append(System.Decimal)" />
- <Member Name="Append(System.Double)" />
- <Member Name="Append(System.Int16)" />
- <Member Name="Append(System.Int32)" />
- <Member Name="Append(System.Int64)" />
- <Member Name="Append(System.Object)" />
- <Member Name="Append(System.SByte)" />
- <Member Name="Append(System.Single)" />
- <Member Name="Append(System.String)" />
- <Member Name="Append(System.String,System.Int32,System.Int32)" />
- <Member Name="Append(System.UInt16)" />
- <Member Name="Append(System.UInt32)" />
- <Member Name="Append(System.UInt64)" />
- <Member Name="AppendFormat(System.IFormatProvider,System.String,System.Object)" />
- <Member Name="AppendFormat(System.IFormatProvider,System.String,System.Object,System.Object)" />
- <Member Name="AppendFormat(System.IFormatProvider,System.String,System.Object,System.Object,System.Object)" />
- <Member Name="AppendFormat(System.IFormatProvider,System.String,System.Object[])" />
- <Member Name="AppendFormat(System.String,System.Object)" />
- <Member Name="AppendFormat(System.String,System.Object,System.Object)" />
- <Member Name="AppendFormat(System.String,System.Object,System.Object,System.Object)" />
- <Member Name="AppendFormat(System.String,System.Object[])" />
- <Member Name="AppendJoin&lt;T&gt;(System.Char,System.Collections.Generic.IEnumerable&lt;T&gt;)" />
- <Member Name="AppendJoin&lt;T&gt;(System.Char,T[])" />
- <Member Name="AppendJoin&lt;T&gt;(System.String,System.Collections.Generic.IEnumerable&lt;T&gt;)" />
- <Member Name="AppendJoin&lt;T&gt;(System.String,T[])" />
- <Member Name="AppendLine" />
- <Member Name="AppendLine(System.String)" />
- <Member Name="Clear" />
- <Member Name="CopyTo(System.Int32,System.Char[],System.Int32,System.Int32)" />
- <Member Name="EnsureCapacity(System.Int32)" />
- <Member Name="Equals(System.Text.StringBuilder)" />
- <Member Name="get_Capacity" />
- <Member Name="get_Chars(System.Int32)" />
- <Member Name="get_Length" />
- <Member Name="get_MaxCapacity" />
- <Member Name="Insert(System.Int32,System.Boolean)" />
- <Member Name="Insert(System.Int32,System.Byte)" />
- <Member Name="Insert(System.Int32,System.Char)" />
- <Member Name="Insert(System.Int32,System.Char[])" />
- <Member Name="Insert(System.Int32,System.Char[],System.Int32,System.Int32)" />
- <Member Name="Insert(System.Int32,System.Decimal)" />
- <Member Name="Insert(System.Int32,System.Double)" />
- <Member Name="Insert(System.Int32,System.Int16)" />
- <Member Name="Insert(System.Int32,System.Int32)" />
- <Member Name="Insert(System.Int32,System.Int64)" />
- <Member Name="Insert(System.Int32,System.Object)" />
- <Member Name="Insert(System.Int32,System.SByte)" />
- <Member Name="Insert(System.Int32,System.Single)" />
- <Member Name="Insert(System.Int32,System.String)" />
- <Member Name="Insert(System.Int32,System.String,System.Int32)" />
- <Member Name="Insert(System.Int32,System.UInt16)" />
- <Member Name="Insert(System.Int32,System.UInt32)" />
- <Member Name="Insert(System.Int32,System.UInt64)" />
- <Member Name="Remove(System.Int32,System.Int32)" />
- <Member Name="Replace(System.Char,System.Char)" />
- <Member Name="Replace(System.Char,System.Char,System.Int32,System.Int32)" />
- <Member Name="Replace(System.String,System.String)" />
- <Member Name="Replace(System.String,System.String,System.Int32,System.Int32)" />
- <Member Name="set_Capacity(System.Int32)" />
- <Member Name="set_Chars(System.Int32,System.Char)" />
- <Member Name="set_Length(System.Int32)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.Int32,System.Int32)" />
- <Member MemberType="Property" Name="Capacity" />
- <Member MemberType="Property" Name="Chars(System.Int32)" />
- <Member MemberType="Property" Name="Length" />
- <Member MemberType="Property" Name="MaxCapacity" />
- <Member Status="ImplRoot" Name="InternalCopy(System.IntPtr,System.Int32)" /> <!-- EE - il stubs -->
- <Member Status="ImplRoot" Name="ReplaceBufferInternal(System.Char*,System.Int32)" /> <!-- EE - il stubs -->
- <Member Status="ImplRoot" Name="ReplaceBufferAnsiInternal(System.SByte*,System.Int32)" /> <!-- EE - il stubs -->
- </Type>
- <Type Name="System.Text.UnicodeEncoding">
- <Member MemberType="Field" Name="CharSize" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Boolean,System.Boolean)" />
- <Member Name="#ctor(System.Boolean,System.Boolean,System.Boolean)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetByteCount(System.Char*,System.Int32)" />
- <Member Name="GetByteCount(System.Char[],System.Int32,System.Int32)" />
- <Member Name="GetByteCount(System.String)" />
- <Member Name="GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32)" />
- <Member Name="GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetBytes(System.String,System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetCharCount(System.Byte*,System.Int32)" />
- <Member Name="GetCharCount(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="GetChars(System.Byte*,System.Int32,System.Char*,System.Int32)" />
- <Member Name="GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)" />
- <Member Name="GetDecoder" />
- <Member Name="GetHashCode" />
- <Member Name="GetMaxByteCount(System.Int32)" />
- <Member Name="GetMaxCharCount(System.Int32)" />
- <Member Name="GetPreamble" />
- <Member Status="ImplRoot" Name="OnDeserializing(System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Text.UTF32Encoding">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Boolean,System.Boolean)" />
- <Member Name="#ctor(System.Boolean,System.Boolean,System.Boolean)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetByteCount(System.Char*,System.Int32)" />
- <Member Name="GetByteCount(System.Char[],System.Int32,System.Int32)" />
- <Member Name="GetByteCount(System.String)" />
- <Member Name="GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32)" />
- <Member Name="GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetBytes(System.String,System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetCharCount(System.Byte*,System.Int32)" />
- <Member Name="GetCharCount(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="GetChars(System.Byte*,System.Int32,System.Char*,System.Int32)" />
- <Member Name="GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)" />
- <Member Name="GetDecoder" />
- <Member Name="GetEncoder" />
- <Member Name="GetHashCode" />
- <Member Name="GetMaxByteCount(System.Int32)" />
- <Member Name="GetMaxCharCount(System.Int32)" />
- <Member Name="GetPreamble" />
- <Member Name="GetString(System.Byte[],System.Int32,System.Int32)" />
- </Type>
- <Type Name="System.Text.UTF7Encoding">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetByteCount(System.Char*,System.Int32)" />
- <Member Name="GetByteCount(System.Char[],System.Int32,System.Int32)" />
- <Member Name="GetByteCount(System.String)" />
- <Member Name="GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32)" />
- <Member Name="GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetBytes(System.String,System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetCharCount(System.Byte*,System.Int32)" />
- <Member Name="GetCharCount(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="GetChars(System.Byte*,System.Int32,System.Char*,System.Int32)" />
- <Member Name="GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)" />
- <Member Name="GetDecoder" />
- <Member Name="GetEncoder" />
- <Member Name="GetHashCode" />
- <Member Name="GetMaxByteCount(System.Int32)" />
- <Member Name="GetMaxCharCount(System.Int32)" />
- <Member Name="GetString(System.Byte[],System.Int32,System.Int32)" />
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnDeserializing(System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Text.UTF8Encoding">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="#ctor(System.Boolean,System.Boolean)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetByteCount(System.Char[],System.Int32,System.Int32)" />
- <Member Name="GetByteCount(System.String)" />
- <Member Name="GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetBytes(System.String,System.Int32,System.Int32,System.Byte[],System.Int32)" />
- <Member Name="GetCharCount(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)" />
- <Member Name="GetDecoder" />
- <Member Name="GetEncoder" />
- <Member Name="GetHashCode" />
- <Member Name="GetMaxByteCount(System.Int32)" />
- <Member Name="GetMaxCharCount(System.Int32)" />
- <Member Name="GetPreamble" />
- </Type>
- <Type Name="System.Threading.AbandonedMutexException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Int32,System.Threading.WaitHandle)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Exception,System.Int32,System.Threading.WaitHandle)" />
- <Member Name="#ctor(System.String,System.Int32,System.Threading.WaitHandle)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member MemberType="Property" Name="Mutex" />
- <Member MemberType="Property" Name="MutexIndex" />
- </Type>
- <Type Name="System.Threading.ApartmentState">
- <Member MemberType="Field" Name="MTA" />
- <Member MemberType="Field" Name="STA" />
- <Member MemberType="Field" Name="Unknown" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Threading.AsyncFlowControl">
- <Member Name="Dispose" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Threading.AsyncFlowControl)" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Threading.AsyncFlowControl,System.Threading.AsyncFlowControl)" />
- <Member Name="op_Inequality(System.Threading.AsyncFlowControl,System.Threading.AsyncFlowControl)" />
- <Member Name="Undo" />
- </Type>
- <Type Name="System.Threading.AutoResetEvent">
- <Member Name="#ctor(System.Boolean)" />
- </Type>
- <Type Name="System.Threading.EventWaitHandle">
- <Member Name="#ctor(System.Boolean,System.Threading.EventResetMode)" />
- <Member Name="#ctor(System.Boolean,System.Threading.EventResetMode,System.String)" />
- <Member Name="#ctor(System.Boolean,System.Threading.EventResetMode,System.String,System.Boolean@)" />
- <Member Name="OpenExisting(System.String)" />
- <Member Name="Reset" />
- <Member Name="Set" />
- <Member Name="TryOpenExisting(System.String,System.Threading.EventWaitHandle@)" />
- </Type>
- <Type Name="System.Threading.Interlocked">
- <Member Name="Add(System.Int32@,System.Int32)" />
- <Member Name="Add(System.Int64@,System.Int64)" />
- <Member Name="CompareExchange(System.Double@,System.Double,System.Double)" />
- <Member Name="CompareExchange(System.Int32@,System.Int32,System.Int32)" />
- <Member Name="CompareExchange(System.Int64@,System.Int64,System.Int64)" />
- <Member Name="CompareExchange(System.IntPtr@,System.IntPtr,System.IntPtr)" />
- <Member Name="CompareExchange(System.Object@,System.Object,System.Object)" />
- <Member Name="CompareExchange(System.Single@,System.Single,System.Single)" />
- <Member Name="CompareExchange&lt;T&gt;(T@,T,T)" />
- <Member Name="Decrement(System.Int32@)" />
- <Member Name="Decrement(System.Int64@)" />
- <Member Name="Exchange(System.Double@,System.Double)" />
- <Member Name="Exchange(System.Int32@,System.Int32)" />
- <Member Name="Exchange(System.Int64@,System.Int64)" />
- <Member Name="Exchange(System.IntPtr@,System.IntPtr)" />
- <Member Name="Exchange(System.Object@,System.Object)" />
- <Member Name="Exchange(System.Single@,System.Single)" />
- <Member Name="Exchange&lt;T&gt;(T@,T)" />
- <Member Name="Increment(System.Int32@)" />
- <Member Name="Increment(System.Int64@)" />
- <Member Name="MemoryBarrier" />
- <Member Name="Read(System.Int64@)" />
- </Type>
- <Type Name="System.Threading.LockRecursionException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Threading.Mutex">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="#ctor(System.Boolean,System.String)" />
- <Member Name="#ctor(System.Boolean,System.String,System.Boolean@)" />
- <Member Name="OpenExisting(System.String)" />
- <Member Name="ReleaseMutex" />
- <Member Name="TryOpenExisting(System.String,System.Threading.Mutex@)" />
- </Type>
- <Type Name="System.Threading.Volatile">
- <Member Name="Read(System.Boolean@)"/>
- <Member Name="Read(System.SByte@)"/>
- <Member Name="Read(System.Byte@)"/>
- <Member Name="Read(System.Int16@)"/>
- <Member Name="Read(System.UInt16@)"/>
- <Member Name="Read(System.Int32@)"/>
- <Member Name="Read(System.UInt32@)"/>
- <Member Name="Read(System.Int64@)"/>
- <Member Name="Read(System.UInt64@)"/>
- <Member Name="Read(System.IntPtr@)"/>
- <Member Name="Read(System.UIntPtr@)"/>
- <Member Name="Read(System.Single@)"/>
- <Member Name="Read(System.Double@)"/>
- <Member Name="Read&lt;T&gt;(T@)"/>
- <Member Name="Write(System.Boolean@,System.Boolean)"/>
- <Member Name="Write(System.SByte@,System.SByte)"/>
- <Member Name="Write(System.Byte@,System.Byte)"/>
- <Member Name="Write(System.Int16@,System.Int16)"/>
- <Member Name="Write(System.UInt16@,System.UInt16)"/>
- <Member Name="Write(System.Int32@,System.Int32)"/>
- <Member Name="Write(System.UInt32@,System.UInt32)"/>
- <Member Name="Write(System.Int64@,System.Int64)"/>
- <Member Name="Write(System.UInt64@,System.UInt64)"/>
- <Member Name="Write(System.IntPtr@,System.IntPtr)"/>
- <Member Name="Write(System.UIntPtr@,System.UIntPtr)"/>
- <Member Name="Write(System.Single@,System.Single)"/>
- <Member Name="Write(System.Double@,System.Double)"/>
- <Member Name="Write&lt;T&gt;(T@,T)"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.IThreadPoolWorkItem">
- <Member Status="ImplRoot" Name="ExecuteWorkItem"/>
- </Type>
- <Type Name="System.Threading.Monitor">
- <Member Name="Enter(System.Object)" />
- <Member Name="Enter(System.Object,System.Boolean@)" />
- <Member Name="IsEntered(System.Object)" />
- <Member Name="Exit(System.Object)" />
- <Member Name="Pulse(System.Object)" />
- <Member Name="PulseAll(System.Object)" />
- <Member Name="TryEnter(System.Object)" />
- <Member Name="TryEnter(System.Object,System.Int32)" />
- <Member Name="TryEnter(System.Object,System.TimeSpan)" />
- <Member Name="TryEnter(System.Object,System.Boolean@)" />
- <Member Name="TryEnter(System.Object,System.Int32,System.Boolean@)" />
- <Member Name="TryEnter(System.Object,System.TimeSpan,System.Boolean@)" />
- <Member Name="Wait(System.Object)" />
- <Member Name="Wait(System.Object,System.Int32)" />
- <Member Name="Wait(System.Object,System.Int32,System.Boolean)" />
- <Member Name="Wait(System.Object,System.TimeSpan)" />
- <Member Name="Wait(System.Object,System.TimeSpan,System.Boolean)" />
- </Type>
- <Type Name="System.Threading.ManualResetEvent">
- <Member Name="#ctor(System.Boolean)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.QueueUserWorkItemCallback">
- <Member Status="ImplRoot" Name="#ctor(System.Threading.WaitCallback,System.Object,System.Threading.ExecutionContext)"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.QueueUserWorkItemCallbackDefaultContext">
- <Member Status="ImplRoot" Name="#ctor(System.Threading.WaitCallback,System.Object)"/>
- </Type>
- <Type Name="System.Threading.SynchronizationContext">
- <Member Name="#ctor"/>
- <Member Name="CreateCopy"/>
- <Member MemberType="Property" Name="Current"/>
- <Member Status="ImplRoot" Name="InvokeWaitMethodHelper(System.Threading.SynchronizationContext,System.IntPtr[],System.Boolean,System.Int32)"/>
- <Member Name="IsWaitNotificationRequired"/>
- <Member Name="OperationCompleted"/>
- <Member Name="OperationStarted"/>
- <Member Name="Post(System.Threading.SendOrPostCallback,System.Object)"/>
- <Member Name="Send(System.Threading.SendOrPostCallback,System.Object)"/>
- <Member Name="SetSynchronizationContext(System.Threading.SynchronizationContext)"/>
- <Member Name="SetWaitNotificationRequired"/>
- <Member Name="Wait(System.IntPtr[],System.Boolean,System.Int32)"/>
- <Member Name="WaitHelper(System.IntPtr[],System.Boolean,System.Int32)"/>
- </Type>
- <Type Name="System.Threading.SynchronizationLockException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Threading.Thread">
- <Member Name="#ctor(System.Threading.ThreadStart)" />
- <Member Name="#ctor(System.Threading.ParameterizedThreadStart)" />
- <Member Name="MemoryBarrier" />
- <Member Name="Finalize" />
- <Member Name="get_CurrentCulture" />
- <Member Name="get_CurrentThread" />
- <Member Name="get_CurrentUICulture" />
- <Member Name="GetDomain" />
- <Member Name="get_ManagedThreadId" />
- <Member Name="get_Name" />
- <Member Name="set_Name(System.String)" />
- <Member Name="Sleep(System.Int32)" />
- <Member Name="Sleep(System.TimeSpan)" />
- <Member Name="SpinWait(System.Int32)" />
- <Member Name="Start" />
- <Member Name="Start(System.Object)" />
- <Member MemberType="Property" Name="CurrentCulture" />
- <Member MemberType="Property" Name="CurrentThread" />
- <Member MemberType="Property" Name="CurrentUICulture" />
- <Member MemberType="Property" Name="ManagedThreadId" />
- <Member MemberType="Property" Name="Name" />
- <Member Status="ImplRoot" Name="InternalGetCurrentThread" />
- <Member Status="ImplRoot" MemberType="Field" Name="DONT_USE_InternalThread" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_Priority" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_ThreadStartArg" />
- </Type>
- <Type Name="Internal.Runtime.Augments.RuntimeThread">
- <Member MemberType="Property" Name="CurrentThread" />
- <Member MemberType="Property" Name="IsAlive" />
- <Member MemberType="Property" Name="IsBackground" />
- <Member MemberType="Property" Name="IsThreadPoolThread" />
- <Member MemberType="Property" Name="ManagedThreadId" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Priority" />
- <Member MemberType="Property" Name="ThreadState" />
- <Member Name="Create(System.Threading.ThreadStart)" />
- <Member Name="Create(System.Threading.ThreadStart,System.Int32)" />
- <Member Name="Create(System.Threading.ParameterizedThreadStart)" />
- <Member Name="Create(System.Threading.ParameterizedThreadStart,System.Int32)" />
- <Member Name="DisableComObjectEagerCleanup" />
- <Member Name="GetApartmentState" />
- <Member Name="Interrupt" />
- <Member Name="Join" />
- <Member Name="Join(System.Int32)" />
- <Member Name="Sleep(System.Int32)" />
- <Member Name="SpinWait(System.Int32)" />
- <Member Name="Start" />
- <Member Name="Start(System.Object)" />
- <Member Name="TrySetApartmentState(System.Threading.ApartmentState)" />
- <Member Name="Yield" />
- </Type>
- <Type Name="System.Threading.ThreadAbortException">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Threading.ThreadPool">
- <Member Name="BindHandle(System.IntPtr)" />
- <Member Name="BindHandle(System.Runtime.InteropServices.SafeHandle)" />
- <Member Status="ImplRoot" Name="GetGloballyQueuedWorkItemsForDebugger"/>
- <Member Status="ImplRoot" Name="GetLocallyQueuedWorkItemsForDebugger"/>
- <Member Name="GetAvailableThreads(System.Int32@,System.Int32@)" />
- <Member Name="GetMaxThreads(System.Int32@,System.Int32@)" />
- <Member Name="GetMinThreads(System.Int32@,System.Int32@)" />
- <Member Status="ImplRoot" Name="GetQueuedWorkItemsForDebugger"/>
- <Member Status="ImplRoot" Name="NotifyWorkItemProgress"/>
- <Member Name="QueueUserWorkItem(System.Threading.WaitCallback)" />
- <Member Name="QueueUserWorkItem(System.Threading.WaitCallback,System.Object)" />
- <Member Name="RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.Int32,System.Boolean)" />
- <Member Name="RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.Int64,System.Boolean)" />
- <Member Name="RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.TimeSpan,System.Boolean)" />
- <Member Name="RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.UInt32,System.Boolean)" />
- <Member Status="ImplRoot" Name="RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.UInt32,System.Boolean,System.Threading.StackCrawlMark@,System.Boolean)" />
- <Member Status="ImplRoot" Name="RegisterWaitForSingleObjectNative(System.Threading.WaitHandle,System.Object,System.UInt32,System.Boolean,System.Threading.RegisteredWaitHandle,System.Threading.StackCrawlMark@,System.Boolean)" />
- <Member Name="SetMaxThreads(System.Int32,System.Int32)" />
- <Member Name="SetMinThreads(System.Int32,System.Int32)" />
- <Member Status="ImplRoot" Name="TryPopCustomWorkItem(System.Threading.IThreadPoolWorkItem)"/>
- <Member Status="ImplRoot" Name="UnsafeQueueCustomWorkItem(System.Threading.IThreadPoolWorkItem,System.Boolean)"/>
- <Member Name="UnsafeQueueNativeOverlapped(System.Threading.NativeOverlapped*)" />
- <Member Name="UnsafeQueueUserWorkItem(System.Threading.WaitCallback,System.Object)" />
- <Member Name="UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.Int32,System.Boolean)" />
- <Member Name="UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.Int64,System.Boolean)" />
- <Member Name="UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.TimeSpan,System.Boolean)" />
- <Member Name="UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.UInt32,System.Boolean)" />
- </Type>
- <Type Name="System.Threading.ThreadPriority">
- <Member MemberType="Field" Name="AboveNormal" />
- <Member MemberType="Field" Name="BelowNormal" />
- <Member MemberType="Field" Name="Highest" />
- <Member MemberType="Field" Name="Lowest" />
- <Member MemberType="Field" Name="Normal" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.StackCrawlMark">
- <Member MemberType="Field" Name="LookForMe" />
- <Member MemberType="Field" Name="LookForMyCaller" />
- <Member MemberType="Field" Name="LookForMyCallersCaller" />
- <Member MemberType="Field" Name="LookForThread" />
- </Type>
- <Type Name="System.Threading.NativeOverlapped">
- <Member MemberType="Field" Name="InternalLow" />
- <Member MemberType="Field" Name="InternalHigh" />
- <Member MemberType="Field" Name="OffsetLow" />
- <Member MemberType="Field" Name="OffsetHigh" />
- <Member MemberType="Field" Name="EventHandle" />
- </Type>
- <Type Name="System.Threading.Overlapped">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.IAsyncResult)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.IntPtr,System.IAsyncResult)" />
- <Member MemberType="Property" Name="AsyncResult" />
- <Member MemberType="Property" Name="EventHandle" />
- <Member MemberType="Property" Name="EventHandleIntPtr" />
- <Member MemberType="Property" Name="OffsetLow" />
- <Member MemberType="Property" Name="OffsetHigh" />
- <Member Name="Free(System.Threading.NativeOverlapped*)" />
- <Member Name="Pack(System.Threading.IOCompletionCallback)" />
- <Member Name="Pack(System.Threading.IOCompletionCallback,System.Object)" />
- <Member Name="Unpack(System.Threading.NativeOverlapped*)" />
- <Member Name="UnsafePack(System.Threading.IOCompletionCallback)" />
- <Member Name="UnsafePack(System.Threading.IOCompletionCallback,System.Object)" Condition="FEATURE_COMINTEROP" />
- </Type>
- <Type Name="System.Threading.IOCompletionCallback">
- </Type>
- <Type Name="System.Threading.RegisteredWaitHandle">
- <Member Name="Unregister(System.Threading.WaitHandle)" />
- <Member Status="ImplRoot" Name="SetHandle(System.IntPtr)" />
- <Member Status="ImplRoot" Name="SetWaitObject(System.Threading.WaitHandle)" />
- </Type>
- <Type Name="System.Threading.ThreadState">
- <Member MemberType="Field" Name="Running" />
- <Member MemberType="Field" Name="StopRequested" />
- <Member MemberType="Field" Name="SuspendRequested" />
- <Member MemberType="Field" Name="Background" />
- <Member MemberType="Field" Name="Unstarted" />
- <Member MemberType="Field" Name="Stopped" />
- <Member MemberType="Field" Name="WaitSleepJoin" />
- <Member MemberType="Field" Name="Suspended" />
- <Member MemberType="Field" Name="AbortRequested" />
- <Member MemberType="Field" Name="Aborted" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Threading.ThreadStart">
- </Type>
- <Type Name="System.Threading.ParameterizedThreadStart">
- </Type>
- <Type Name="System.Threading.SendOrPostCallback">
- </Type>
- <Type Name="System.Threading.ThreadStartException">
- <Member Status="ImplRoot" Name="#ctor(System.Exception)" /><!-- EE -->
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Threading.ThreadStateException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Threading.Timeout">
- <Member MemberType="Field" Name="Infinite" />
- <Member MemberType="Field" Name="InfiniteTimeSpan" />
- </Type>
- <Type Name="System.Threading.Timer">
- <Member Name="#ctor(System.Threading.TimerCallback)" />
- <Member Name="#ctor(System.Threading.TimerCallback,System.Object,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Threading.TimerCallback,System.Object,System.Int64,System.Int64)" />
- <Member Name="#ctor(System.Threading.TimerCallback,System.Object,System.TimeSpan,System.TimeSpan)" />
- <Member Name="#ctor(System.Threading.TimerCallback,System.Object,System.UInt32,System.UInt32)" />
- <Member Name="Change(System.Int32,System.Int32)" />
- <Member Name="Change(System.Int64,System.Int64)" />
- <Member Name="Change(System.TimeSpan,System.TimeSpan)" />
- <Member Name="Change(System.UInt32,System.UInt32)" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Threading.WaitHandle)" />
- </Type>
- <Type Name="System.Threading.TimerCallback">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object)" />
- </Type>
- <Type Name="System.Threading.WaitCallback">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object)" />
- </Type>
- <Type Name="System.Threading.WaitOrTimerCallback">
- </Type>
- <Type Name="System.Threading.WaitHandle">
- <Member MemberType="Field" Name="InvalidHandle" />
- <Member MemberType="Field" Name="WaitTimeout" />
- <Member Name="#ctor" />
- <Member Name="Close" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="get_Handle" />
- <Member Name="set_Handle(System.IntPtr)" />
- <Member Name="get_SafeWaitHandle" />
- <Member Name="set_SafeWaitHandle(Microsoft.Win32.SafeHandles.SafeWaitHandle)" />
- <Member Name="SignalAndWait(System.Threading.WaitHandle,System.Threading.WaitHandle)" />
- <Member Name="SignalAndWait(System.Threading.WaitHandle,System.Threading.WaitHandle,System.Int32,System.Boolean)" />
- <Member Name="SignalAndWait(System.Threading.WaitHandle,System.Threading.WaitHandle,System.TimeSpan,System.Boolean)" />
- <Member Name="WaitAny(System.Threading.WaitHandle[])" />
- <Member Name="WaitAny(System.Threading.WaitHandle[],System.Int32)" />
- <Member Name="WaitAny(System.Threading.WaitHandle[],System.Int32,System.Boolean)" />
- <Member Name="WaitAny(System.Threading.WaitHandle[],System.TimeSpan)" />
- <Member Name="WaitAny(System.Threading.WaitHandle[],System.TimeSpan,System.Boolean)" />
- <Member Name="WaitAll(System.Threading.WaitHandle[])" />
- <Member Name="WaitAll(System.Threading.WaitHandle[],System.Int32)" />
- <Member Name="WaitAll(System.Threading.WaitHandle[],System.Int32,System.Boolean)" />
- <Member Name="WaitAll(System.Threading.WaitHandle[],System.TimeSpan)" />
- <Member Name="WaitAll(System.Threading.WaitHandle[],System.TimeSpan,System.Boolean)" />
- <Member Name="WaitOne" />
- <Member Name="WaitOne(System.Int32)" />
- <Member Name="WaitOne(System.Int32,System.Boolean)" />
- <Member Name="WaitOne(System.TimeSpan)" />
- <Member Name="WaitOne(System.TimeSpan,System.Boolean)" />
- <Member MemberType="Property" Name="SafeWaitHandle" />
- </Type>
- <Type Name="System.Threading.WaitHandleCannotBeOpenedException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.TimeoutException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.TimeSpan">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member MemberType="Field" Name="TicksPerDay" />
- <Member MemberType="Field" Name="TicksPerHour" />
- <Member MemberType="Field" Name="TicksPerMillisecond" />
- <Member MemberType="Field" Name="TicksPerMinute" />
- <Member MemberType="Field" Name="TicksPerSecond" />
- <Member MemberType="Field" Name="Zero" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Int64)" />
- <Member Name="Add(System.TimeSpan)" />
- <Member Name="Compare(System.TimeSpan,System.TimeSpan)" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="CompareTo(System.TimeSpan)" />
- <Member Name="Duration" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.TimeSpan)" />
- <Member Name="Equals(System.TimeSpan,System.TimeSpan)" />
- <Member Name="FromDays(System.Double)" />
- <Member Name="FromHours(System.Double)" />
- <Member Name="FromMilliseconds(System.Double)" />
- <Member Name="FromMinutes(System.Double)" />
- <Member Name="FromSeconds(System.Double)" />
- <Member Name="FromTicks(System.Int64)" />
- <Member Name="get_Days" />
- <Member Name="get_Hours" />
- <Member Name="get_Milliseconds" />
- <Member Name="get_Minutes" />
- <Member Name="get_Seconds" />
- <Member Name="get_Ticks" />
- <Member Name="get_TotalDays" />
- <Member Name="get_TotalHours" />
- <Member Name="get_TotalMilliseconds" />
- <Member Name="get_TotalMinutes" />
- <Member Name="get_TotalSeconds" />
- <Member Name="GetHashCode" />
- <Member Name="Negate" />
- <Member Name="op_Addition(System.TimeSpan,System.TimeSpan)" />
- <Member Name="op_Equality(System.TimeSpan,System.TimeSpan)" />
- <Member Name="op_GreaterThan(System.TimeSpan,System.TimeSpan)" />
- <Member Name="op_GreaterThanOrEqual(System.TimeSpan,System.TimeSpan)" />
- <Member Name="op_Inequality(System.TimeSpan,System.TimeSpan)" />
- <Member Name="op_LessThan(System.TimeSpan,System.TimeSpan)" />
- <Member Name="op_LessThanOrEqual(System.TimeSpan,System.TimeSpan)" />
- <Member Name="op_Subtraction(System.TimeSpan,System.TimeSpan)" />
- <Member Name="op_UnaryPlus(System.TimeSpan)" />
- <Member Name="op_UnaryNegation(System.TimeSpan)" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="ParseExact(System.String,System.String,System.IFormatProvider)" />
- <Member Name="ParseExact(System.String,System.String[],System.IFormatProvider)" />
- <Member Name="ParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.TimeSpanStyles)" />
- <Member Name="ParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.TimeSpanStyles)" />
- <Member Name="TryParse(System.String,System.TimeSpan@)" />
- <Member Name="TryParse(System.String,System.IFormatProvider,System.TimeSpan@)" />
- <Member Name="TryParseExact(System.String,System.String,System.IFormatProvider,System.TimeSpan@)" />
- <Member Name="TryParseExact(System.String,System.String[],System.IFormatProvider,System.TimeSpan@)" />
- <Member Name="TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.TimeSpanStyles,System.TimeSpan@)" />
- <Member Name="TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.TimeSpanStyles,System.TimeSpan@)" />
- <Member Name="Subtract(System.TimeSpan)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.String)" />
- <Member MemberType="Property" Name="Days" />
- <Member MemberType="Property" Name="Hours" />
- <Member MemberType="Property" Name="Milliseconds" />
- <Member MemberType="Property" Name="Minutes" />
- <Member MemberType="Property" Name="Seconds" />
- <Member MemberType="Property" Name="Ticks" />
- <Member MemberType="Property" Name="TotalDays" />
- <Member MemberType="Property" Name="TotalHours" />
- <Member MemberType="Property" Name="TotalMilliseconds" />
- <Member MemberType="Property" Name="TotalMinutes" />
- <Member MemberType="Property" Name="TotalSeconds" />
- </Type>
- <Type Name="System.TimeZone">
- <Member Name="#ctor" />
- <Member Name="get_CurrentTimeZone" />
- <Member Name="get_DaylightName" />
- <Member Name="get_StandardName" />
- <Member Name="GetDaylightChanges(System.Int32)" />
- <Member Name="GetUtcOffset(System.DateTime)" />
- <Member Name="IsDaylightSavingTime(System.DateTime)" />
- <Member Name="IsDaylightSavingTime(System.DateTime,System.Globalization.DaylightTime)" />
- <Member Name="ToLocalTime(System.DateTime)" />
- <Member Name="ToUniversalTime(System.DateTime)" />
- <Member MemberType="Property" Name="CurrentTimeZone" />
- <Member MemberType="Property" Name="DaylightName" />
- <Member MemberType="Property" Name="StandardName" />
- </Type>
- <Type Name="System.TimeZoneInfo">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="ClearCachedData" />
- <Member Name="ConvertTime(System.DateTime,System.TimeZoneInfo)" />
- <Member Name="ConvertTime(System.DateTime,System.TimeZoneInfo,System.TimeZoneInfo)" />
- <Member Name="ConvertTime(System.DateTimeOffset,System.TimeZoneInfo)" />
- <Member Name="ConvertTimeBySystemTimeZoneId(System.DateTime,System.String)" />
- <Member Name="ConvertTimeBySystemTimeZoneId(System.DateTime,System.String,System.String)" />
- <Member Name="ConvertTimeBySystemTimeZoneId(System.DateTimeOffset,System.String)" />
- <Member Name="ConvertTimeFromUtc(System.DateTime,System.TimeZoneInfo)" />
- <Member Name="ConvertTimeToUtc(System.DateTime)" />
- <Member Name="ConvertTimeToUtc(System.DateTime,System.TimeZoneInfo)" />
- <Member Name="CreateCustomTimeZone(System.String,System.TimeSpan,System.String,System.String)" />
- <Member Name="CreateCustomTimeZone(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[])" />
- <Member Name="CreateCustomTimeZone(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.TimeZoneInfo)" />
- <Member Name="FindSystemTimeZoneById(System.String)" />
- <Member Name="FromSerializedString(System.String)" />
- <Member Name="get_BaseUtcOffset" />
- <Member Name="get_DisplayName" />
- <Member Name="get_DaylightName" />
- <Member Name="get_StandardName" />
- <Member Name="get_Id" />
- <Member Name="get_Local" />
- <Member Name="get_SupportsDaylightSavingTime" />
- <Member Name="get_Utc" />
- <Member Name="GetAdjustmentRules" />
- <Member Name="GetAmbiguousTimeOffsets(System.DateTimeOffset)" />
- <Member Name="GetAmbiguousTimeOffsets(System.DateTime)" />
- <Member Name="GetUtcOffset(System.DateTimeOffset)" />
- <Member Name="GetUtcOffset(System.DateTime)" />
- <Member Name="HasSameRules(System.TimeZoneInfo)" />
- <Member Name="IsAmbiguousTime(System.DateTimeOffset)" />
- <Member Name="IsAmbiguousTime(System.DateTime)" />
- <Member Name="IsDaylightSavingTime(System.DateTimeOffset)" />
- <Member Name="IsDaylightSavingTime(System.DateTime)" />
- <Member Name="IsInvalidTime(System.DateTime)" />
- <Member Name="ToSerializedString" />
- <Member Name="GetHashCode" />
- <Member Name="GetSystemTimeZones" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="DaylightName" />
- <Member MemberType="Property" Name="DisplayName" />
- <Member MemberType="Property" Name="Id" />
- <Member MemberType="Property" Name="Local" />
- <Member MemberType="Property" Name="StandardName" />
- <Member MemberType="Property" Name="BaseUtcOffset" />
- <Member MemberType="Property" Name="SupportsDaylightSavingTime" />
- <Member MemberType="Property" Name="Utc" />
- </Type>
- <Type Name="System.TimeZoneInfo+AdjustmentRule">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <!-- CreateAdjustmentRule doesn't have a public contract, but tests and other callers can use Reflection to invoke it, so ensure it is left in mscorlib. -->
- <Member Status="ApiRoot" Name="CreateAdjustmentRule(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime)" />
- <Member Name="get_DateEnd" />
- <Member Name="get_DateStart" />
- <Member Name="get_DaylightDelta" />
- <Member Name="get_DaylightTransitionEnd" />
- <Member Name="get_DaylightTransitionStart" />
- <Member MemberType="Property" Name="DateEnd" />
- <Member MemberType="Property" Name="DateStart" />
- <Member MemberType="Property" Name="DaylightDelta" />
- <Member MemberType="Property" Name="DaylightTransitionEnd" />
- <Member MemberType="Property" Name="DaylightTransitionStart" />
- </Type>
- <Type Name="System.TimeZoneInfo+TransitionTime">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="CreateFixedDateRule(System.DateTime,System.Int32,System.Int32)" />
- <Member Name="CreateFloatingDateRule(System.DateTime,System.Int32,System.Int32,System.DayOfWeek)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.TimeZoneInfo+TransitionTime)" />
- <Member Name="get_Day" />
- <Member Name="get_DayOfWeek" />
- <Member Name="get_IsFixedDateRule" />
- <Member Name="get_Month" />
- <Member Name="get_TimeOfDay" />
- <Member Name="get_Week" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime)" />
- <Member Name="op_Inequality(System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime)" />
- <Member MemberType="Property" Name="Day" />
- <Member MemberType="Property" Name="DayOfWeek" />
- <Member MemberType="Property" Name="IsFixedDateRule" />
- <Member MemberType="Property" Name="Month" />
- <Member MemberType="Property" Name="TimeOfDay" />
- <Member MemberType="Property" Name="Week" />
- </Type>
- <Type Name="System.TimeZoneNotFoundException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- </Type>
- <Type Name="System.Tuple">
- <Member Name="Create&lt;T1&gt;(T1)" />
- <Member Name="Create&lt;T1,T2&gt;(T1,T2)" />
- <Member Name="Create&lt;T1,T2,T3&gt;(T1,T2,T3)" />
- <Member Name="Create&lt;T1,T2,T3,T4&gt;(T1,T2,T3,T4)" />
- <Member Name="Create&lt;T1,T2,T3,T4,T5&gt;(T1,T2,T3,T4,T5)" />
- <Member Name="Create&lt;T1,T2,T3,T4,T5,T6&gt;(T1,T2,T3,T4,T5,T6)" />
- <Member Name="Create&lt;T1,T2,T3,T4,T5,T6,T7&gt;(T1,T2,T3,T4,T5,T6,T7)" />
- <Member Name="Create&lt;T1,T2,T3,T4,T5,T6,T7,T8&gt;(T1,T2,T3,T4,T5,T6,T7,T8)" />
- </Type>
- <Type Name="System.Tuple&lt;T1&gt;">
- <Member Name="#ctor(T1)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Item1" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Item1" />
- </Type>
- <Type Name="System.Tuple&lt;T1,T2&gt;">
- <Member Name="#ctor(T1,T2)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Item1" />
- <Member Name="get_Item2" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Item1" />
- <Member MemberType="Property" Name="Item2" />
- </Type>
- <Type Name="System.Tuple&lt;T1,T2,T3&gt;">
- <Member Name="#ctor(T1,T2,T3)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Item1" />
- <Member Name="get_Item2" />
- <Member Name="get_Item3" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Item1" />
- <Member MemberType="Property" Name="Item2" />
- <Member MemberType="Property" Name="Item3" />
- </Type>
- <Type Name="System.Tuple&lt;T1,T2,T3,T4&gt;">
- <Member Name="#ctor(T1,T2,T3,T4)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Item1" />
- <Member Name="get_Item2" />
- <Member Name="get_Item3" />
- <Member Name="get_Item4" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Item1" />
- <Member MemberType="Property" Name="Item2" />
- <Member MemberType="Property" Name="Item3" />
- <Member MemberType="Property" Name="Item4" />
- </Type>
- <Type Name="System.Tuple&lt;T1,T2,T3,T4,T5&gt;">
- <Member Name="#ctor(T1,T2,T3,T4,T5)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Item1" />
- <Member Name="get_Item2" />
- <Member Name="get_Item3" />
- <Member Name="get_Item4" />
- <Member Name="get_Item5" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Item1" />
- <Member MemberType="Property" Name="Item2" />
- <Member MemberType="Property" Name="Item3" />
- <Member MemberType="Property" Name="Item4" />
- <Member MemberType="Property" Name="Item5" />
- </Type>
- <Type Name="System.Tuple&lt;T1,T2,T3,T4,T5,T6&gt;">
- <Member Name="#ctor(T1,T2,T3,T4,T5,T6)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Item1" />
- <Member Name="get_Item2" />
- <Member Name="get_Item3" />
- <Member Name="get_Item4" />
- <Member Name="get_Item5" />
- <Member Name="get_Item6" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Item1" />
- <Member MemberType="Property" Name="Item2" />
- <Member MemberType="Property" Name="Item3" />
- <Member MemberType="Property" Name="Item4" />
- <Member MemberType="Property" Name="Item5" />
- <Member MemberType="Property" Name="Item6" />
- </Type>
- <Type Name="System.Tuple&lt;T1,T2,T3,T4,T5,T6,T7&gt;">
- <Member Name="#ctor(T1,T2,T3,T4,T5,T6,T7)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Item1" />
- <Member Name="get_Item2" />
- <Member Name="get_Item3" />
- <Member Name="get_Item4" />
- <Member Name="get_Item5" />
- <Member Name="get_Item6" />
- <Member Name="get_Item7" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Item1" />
- <Member MemberType="Property" Name="Item2" />
- <Member MemberType="Property" Name="Item3" />
- <Member MemberType="Property" Name="Item4" />
- <Member MemberType="Property" Name="Item5" />
- <Member MemberType="Property" Name="Item6" />
- <Member MemberType="Property" Name="Item7" />
- </Type>
- <Type Name="System.Tuple&lt;T1,T2,T3,T4,T5,T6,T7,TRest&gt;">
- <Member Name="#ctor(T1,T2,T3,T4,T5,T6,T7,TRest)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Item1" />
- <Member Name="get_Item2" />
- <Member Name="get_Item3" />
- <Member Name="get_Item4" />
- <Member Name="get_Item5" />
- <Member Name="get_Item6" />
- <Member Name="get_Item7" />
- <Member Name="get_Rest" />
- <Member Name="GetHashCode" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Item1" />
- <Member MemberType="Property" Name="Item2" />
- <Member MemberType="Property" Name="Item3" />
- <Member MemberType="Property" Name="Item4" />
- <Member MemberType="Property" Name="Item5" />
- <Member MemberType="Property" Name="Item6" />
- <Member MemberType="Property" Name="Item7" />
- <Member MemberType="Property" Name="Rest" />
- </Type>
- <Type Name="System.Type">
- <Member Name="#ctor" />
- <Member Name="op_Equality(System.Type,System.Type)" />
- <Member Name="op_Inequality(System.Type,System.Type)" />
- <Member MemberType="Field" Name="Delimiter" />
- <Member MemberType="Field" Name="EmptyTypes" />
- <Member MemberType="Field" Name="FilterAttribute" />
- <Member MemberType="Field" Name="FilterName" />
- <Member MemberType="Field" Name="FilterNameIgnoreCase" />
- <Member MemberType="Field" Name="Missing" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Type)" />
- <Member Name="FindMembers(System.Reflection.MemberTypes,System.Reflection.BindingFlags,System.Reflection.MemberFilter,System.Object)" />
- <Member Name="get_Assembly" />
- <Member Name="get_AssemblyQualifiedName" />
- <Member Name="get_Attributes" />
- <Member Name="get_BaseType" />
- <Member Name="get_ContainsGenericParameters" />
- <Member Name="get_DeclaringType" />
- <Member Name="get_DeclaringMethod" />
- <Member Name="get_DefaultBinder" />
- <Member Name="get_FullName" />
- <Member Name="get_GenericParameterAttributes" />
- <Member Name="get_GenericParameterPosition" />
- <Member Name="get_GenericTypeArguments" />
- <Member Name="get_GUID" />
- <Member Name="get_HasElementType" />
- <Member Name="get_IsAbstract" />
- <Member Name="get_IsAnsiClass" />
- <Member Name="get_IsArray" />
- <Member Name="get_IsAutoClass" />
- <Member Name="get_IsAutoLayout" />
- <Member Name="get_IsByRef" />
- <Member Name="get_IsConstructedGenericType" />
- <Member Name="get_IsClass" />
- <Member Name="get_IsCOMObject" />
- <Member Name="get_IsEnum" />
- <Member Name="get_IsExplicitLayout" />
- <Member Name="get_IsGenericParameter" />
- <Member Name="get_IsGenericType" />
- <Member Name="get_IsGenericTypeDefinition" />
- <Member Name="get_IsImport" />
- <Member Name="get_IsInterface" />
- <Member Name="get_IsLayoutSequential" />
- <Member Name="get_IsMarshalByRef" />
- <Member Name="get_IsNested" />
- <Member Name="get_IsNestedAssembly" />
- <Member Name="get_IsNestedFamANDAssem" />
- <Member Name="get_IsNestedFamily" />
- <Member Name="get_IsNestedFamORAssem" />
- <Member Name="get_IsNestedPrivate" />
- <Member Name="get_IsNestedPublic" />
- <Member Name="get_IsNotPublic" />
- <Member Name="get_IsPointer" />
- <Member Name="get_IsPrimitive" />
- <Member Name="get_IsPublic" />
- <Member Name="get_IsSealed" />
- <Member Name="get_IsSecurityCritical" />
- <Member Name="get_IsSecuritySafeCritical" />
- <Member Name="get_IsSecurityTransparent" />
- <Member Name="get_IsSerializable" />
- <Member Name="get_IsSpecialName" />
- <Member Name="get_IsUnicodeClass" />
- <Member Name="get_IsValueType" />
- <Member Name="get_IsVisible" />
- <Member Name="get_MemberType" />
- <Member Name="get_Module" />
- <Member Name="get_Namespace" />
- <Member Name="get_ReflectedType" />
- <Member Name="get_TypeHandle" />
- <Member Name="get_UnderlyingSystemType" />
- <Member Name="GetArrayRank" />
- <Member Name="GetAttributeFlagsImpl" />
- <Member Name="GetConstructor(System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetConstructor(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetConstructor(System.Type[])" />
- <Member Name="GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetConstructors" />
- <Member Name="GetConstructors(System.Reflection.BindingFlags)" />
- <Member Name="GetDefaultMembers" />
- <Member Name="GetElementType" />
- <Member Name="GetEvent(System.String)" />
- <Member Name="GetEvent(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetEvents" />
- <Member Name="GetEvents(System.Reflection.BindingFlags)" />
- <Member Name="GetField(System.String)" />
- <Member Name="GetField(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetFields" />
- <Member Name="GetFields(System.Reflection.BindingFlags)" />
- <Member Name="GetGenericArguments" />
- <Member Name="GetGenericParameterConstraints" />
- <Member Name="GetGenericTypeDefinition" />
- <Member Name="GetHashCode" />
- <Member Name="GetInterface(System.String,System.Boolean)" />
- <Member Name="GetInterfaceMap(System.Type)" />
- <Member Name="GetInterfaces" />
- <Member Name="GetMember(System.String)" />
- <Member Name="GetMember(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags)" />
- <Member Name="GetMembers" />
- <Member Name="GetMembers(System.Reflection.BindingFlags)" />
- <Member Name="GetMethod(System.String)" />
- <Member Name="GetMethod(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethod(System.String,System.Type[])" />
- <Member Name="GetMethod(System.String,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetMethods" />
- <Member Name="GetMethods(System.Reflection.BindingFlags)" />
- <Member Name="GetNestedType(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetNestedTypes(System.Reflection.BindingFlags)" />
- <Member Name="GetProperties" />
- <Member Name="GetProperties(System.Reflection.BindingFlags)" />
- <Member Name="GetProperty(System.String)" />
- <Member Name="GetProperty(System.String,System.Reflection.BindingFlags)" />
- <Member Name="GetProperty(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetProperty(System.String,System.Type)" />
- <Member Name="GetProperty(System.String,System.Type,System.Type[])" />
- <Member Name="GetProperty(System.String,System.Type,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[])" />
- <Member Name="GetType" />
- <Member Name="GetType(System.String)" />
- <Member Name="GetType(System.String,System.Boolean)" />
- <Member Name="GetType(System.String,System.Boolean,System.Boolean)" />
- <Member Name="GetType(System.String,System.Func&lt;System.Reflection.AssemblyName,System.Reflection.Assembly&gt;,System.Func&lt;System.Reflection.Assembly,System.String,System.Boolean,System.Type&gt;)" />
- <Member Name="GetType(System.String,System.Func&lt;System.Reflection.AssemblyName,System.Reflection.Assembly&gt;,System.Func&lt;System.Reflection.Assembly,System.String,System.Boolean,System.Type&gt;,System.Boolean)" />
- <Member Name="GetType(System.String,System.Func&lt;System.Reflection.AssemblyName,System.Reflection.Assembly&gt;,System.Func&lt;System.Reflection.Assembly,System.String,System.Boolean,System.Type&gt;,System.Boolean,System.Boolean)" />
- <Member Name="GetTypeArray(System.Object[])" />
- <Member Name="GetTypeCode(System.Type)" />
- <Member Name="GetTypeCodeImpl" />
- <Member Name="GetTypeFromCLSID(System.Guid)" />
- <Member Name="GetTypeFromCLSID(System.Guid,System.Boolean)" />
- <Member Name="GetTypeFromCLSID(System.Guid,System.String)" />
- <Member Name="GetTypeFromCLSID(System.Guid,System.String,System.Boolean)" />
- <Member Name="GetTypeFromHandle(System.RuntimeTypeHandle)" />
- <Member Status="ImplRoot" Name="GetTypeFromHandleUnsafe(System.IntPtr)" /> <!-- Used by System.Linq.Expressions tests -->
- <Member Name="GetTypeFromProgID(System.String)" />
- <Member Name="GetTypeFromProgID(System.String,System.Boolean)" />
- <Member Name="GetTypeFromProgID(System.String,System.String)" />
- <Member Name="GetTypeFromProgID(System.String,System.String,System.Boolean)" />
- <Member Name="GetTypeHandle(System.Object)" />
- <Member Name="HasElementTypeImpl" />
- <Member Name="InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[])" />
- <Member Name="InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Globalization.CultureInfo)" />
- <Member Name="InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[])" />
- <Member Name="IsArrayImpl" />
- <Member Name="IsAssignableFrom(System.Type)" />
- <Member Name="IsByRefImpl" />
- <Member Name="IsCOMObjectImpl" />
- <Member Name="get_IsContextful" />
- <Member MemberType="Property" Name="IsContextful" />
- <Member Name="IsContextfulImpl" />
- <Member Name="IsInstanceOfType(System.Object)" />
- <Member Name="IsMarshalByRefImpl" />
- <Member Name="IsPointerImpl" />
- <Member Name="IsPrimitiveImpl" />
- <Member Name="IsSubclassOf(System.Type)" />
- <Member Name="IsEquivalentTo(System.Type)" />
- <Member Name="IsValueTypeImpl" />
- <Member Name="MakeArrayType" />
- <Member Name="MakeArrayType(System.Int32)" />
- <Member Name="MakeByRefType" />
- <Member Name="MakeGenericType(System.Type[])" />
- <Member Name="MakePointerType" />
- <Member Name="ReflectionOnlyGetType(System.String,System.Boolean,System.Boolean)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Assembly" />
- <Member MemberType="Property" Name="AssemblyQualifiedName" />
- <Member MemberType="Property" Name="Attributes" />
- <Member MemberType="Property" Name="BaseType" />
- <Member MemberType="Property" Name="ContainsGenericParameters" />
- <Member MemberType="Property" Name="DeclaringType" />
- <Member MemberType="Property" Name="DeclaringMethod" />
- <Member MemberType="Property" Name="DefaultBinder" />
- <Member MemberType="Property" Name="FullName" />
- <Member MemberType="Property" Name="GenericParameterAttributes" />
- <Member MemberType="Property" Name="GenericParameterPosition" />
- <Member MemberType="Property" Name="GenericTypeArguments" />
- <Member MemberType="Property" Name="GUID" />
- <Member MemberType="Property" Name="HasElementType" />
- <Member MemberType="Property" Name="IsAbstract" />
- <Member MemberType="Property" Name="IsAnsiClass" />
- <Member MemberType="Property" Name="IsArray" />
- <Member MemberType="Property" Name="IsAutoClass" />
- <Member MemberType="Property" Name="IsAutoLayout" />
- <Member MemberType="Property" Name="IsByRef" />
- <Member MemberType="Property" Name="IsConstructedGenericType" />
- <Member MemberType="Property" Name="IsClass" />
- <Member MemberType="Property" Name="IsCOMObject" />
- <Member MemberType="Property" Name="IsEnum" />
- <Member MemberType="Property" Name="IsExplicitLayout" />
- <Member MemberType="Property" Name="IsGenericParameter" />
- <Member MemberType="Property" Name="IsGenericType" />
- <Member MemberType="Property" Name="IsGenericTypeDefinition" />
- <Member MemberType="Property" Name="IsImport" />
- <Member MemberType="Property" Name="IsInterface" />
- <Member MemberType="Property" Name="IsLayoutSequential" />
- <Member MemberType="Property" Name="IsMarshalByRef" />
- <Member MemberType="Property" Name="IsNested" />
- <Member MemberType="Property" Name="IsNestedAssembly" />
- <Member MemberType="Property" Name="IsNestedFamANDAssem" />
- <Member MemberType="Property" Name="IsNestedFamily" />
- <Member MemberType="Property" Name="IsNestedFamORAssem" />
- <Member MemberType="Property" Name="IsNestedPrivate" />
- <Member MemberType="Property" Name="IsNestedPublic" />
- <Member MemberType="Property" Name="IsNotPublic" />
- <Member MemberType="Property" Name="IsPointer" />
- <Member MemberType="Property" Name="IsPrimitive" />
- <Member MemberType="Property" Name="IsPublic" />
- <Member MemberType="Property" Name="IsSealed" />
- <Member MemberType="Property" Name="IsSerializable" />
- <Member MemberType="Property" Name="IsSpecialName" />
- <Member MemberType="Property" Name="IsUnicodeClass" />
- <Member MemberType="Property" Name="IsValueType" />
- <Member MemberType="Property" Name="IsVisible" />
- <Member MemberType="Property" Name="MemberType" />
- <Member MemberType="Property" Name="Module" />
- <Member MemberType="Property" Name="Namespace" />
- <Member MemberType="Property" Name="ReflectedType" />
- <Member MemberType="Property" Name="TypeHandle" />
- <Member MemberType="Property" Name="UnderlyingSystemType" />
- <Member Name="GetEnumName(System.Object)" />
- <Member Name="GetEnumNames" />
- <Member Name="GetEnumUnderlyingType" />
- <Member Name="GetEnumValues" />
- <Member Name="GetInterface(System.String)" />
- <Member Name="GetNestedType(System.String)" />
- <Member Name="GetNestedTypes" />
- <Member Name="GetProperty(System.String,System.Type[])" />
- <Member Name="IsEnumDefined(System.Object)" />
- <Member Name="get_StructLayoutAttribute" />
- <Member Name="get_TypeInitializer" />
- <Member Name="FindInterfaces(System.Reflection.TypeFilter,System.Object)" />
- <Member MemberType="Property" Name="TypeInitializer" />
- <Member MemberType="Property" Name="StructLayoutAttribute" />
- </Type>
- <Type Name="System.TypeAccessException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.TypeCode">
- <Member MemberType="Field" Name="Boolean" />
- <Member MemberType="Field" Name="Byte" />
- <Member MemberType="Field" Name="Char" />
- <Member MemberType="Field" Name="DateTime" />
- <Member MemberType="Field" Name="DBNull" />
- <Member MemberType="Field" Name="Decimal" />
- <Member MemberType="Field" Name="Double" />
- <Member MemberType="Field" Name="Empty" />
- <Member MemberType="Field" Name="Int16" />
- <Member MemberType="Field" Name="Int32" />
- <Member MemberType="Field" Name="Int64" />
- <Member MemberType="Field" Name="Object" />
- <Member MemberType="Field" Name="SByte" />
- <Member MemberType="Field" Name="Single" />
- <Member MemberType="Field" Name="String" />
- <Member MemberType="Field" Name="UInt16" />
- <Member MemberType="Field" Name="UInt32" />
- <Member MemberType="Field" Name="UInt64" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.TypeInitializationException" >
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_TypeName" />
- <Member MemberType="Property" Name="TypeName" />
- </Type>
- <Type Name="System.TypedReference" />
- <Type Name="System.TypeLoadException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.String,System.String,System.String,System.Int32)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_TypeName" />
- <Member MemberType="Property" Name="TypeName" />
- </Type>
- <Type Name="System.TypeUnloadedException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- </Type>
- <Type Name="System.UInt16">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="CompareTo(System.UInt16)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.UInt16)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.UInt16@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.UInt16@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.UInt32">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="CompareTo(System.UInt32)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.UInt32)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.UInt32@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.UInt32@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.UInt64">
- <Member MemberType="Field" Name="MaxValue" />
- <Member MemberType="Field" Name="MinValue" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="CompareTo(System.UInt64)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.UInt64)" />
- <Member Name="GetHashCode" />
- <Member Name="GetTypeCode" />
- <Member Name="Parse(System.String)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles)" />
- <Member Name="Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)" />
- <Member Name="Parse(System.String,System.IFormatProvider)" />
- <Member Name="TryParse(System.String,System.UInt64@)" />
- <Member Name="TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.UInt64@)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.IFormatProvider)" />
- <Member Name="ToString(System.String)" />
- <Member Name="ToString(System.String,System.IFormatProvider)" />
- </Type>
- <Type Name="System.UIntPtr">
- <Member MemberType="Field" Name="Zero" />
- <Member Name="#ctor(System.UInt32)" />
- <Member Name="#ctor(System.UInt64)" />
- <Member Name="#ctor(System.Void*)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Add(System.UIntPtr,System.Int32)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="get_Size" />
- <Member Name="GetHashCode" />
- <Member Name="op_Addition(System.UIntPtr,System.Int32)" />
- <Member Name="op_Equality(System.UIntPtr,System.UIntPtr)" />
- <Member Name="op_Explicit(System.UInt32)" ReturnType="System.UIntPtr" />
- <Member Name="op_Explicit(System.UInt64)" ReturnType="System.UIntPtr" />
- <Member Name="op_Explicit(System.UIntPtr)" ReturnType="System.UInt32" />
- <Member Name="op_Explicit(System.UIntPtr)" ReturnType="System.UInt64" />
- <Member Name="op_Explicit(System.UIntPtr)" ReturnType="System.Void*" />
- <Member Name="op_Explicit(System.Void*)" ReturnType="System.UIntPtr" />
- <Member Name="op_Inequality(System.UIntPtr,System.UIntPtr)" />
- <Member Name="op_Subtraction(System.UIntPtr,System.Int32)" />
- <Member Name="Subtract(System.UIntPtr,System.Int32)" />
- <Member Name="ToPointer" />
- <Member Name="ToString" />
- <Member Name="ToUInt32" />
- <Member Name="ToUInt64" />
- <Member MemberType="Property" Name="Size" />
- </Type>
- <Type Name="System.UnauthorizedAccessException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.UnhandledExceptionEventArgs">
- <Member Name="#ctor(System.Object,System.Boolean)" />
- <Member Name="get_ExceptionObject" />
- <Member Name="get_IsTerminating" />
- <Member MemberType="Property" Name="ExceptionObject" />
- <Member MemberType="Property" Name="IsTerminating" />
- </Type>
- <Type Name="System.UnhandledExceptionEventHandler">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,System.UnhandledExceptionEventArgs,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object,System.UnhandledExceptionEventArgs)" />
- </Type>
- <Type Status="ImplRoot" Name="System.UnitySerializationHolder">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.ValueType">
- <Member Name="#ctor" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- </Type>
- <Type Name="System.Variant" Condition="FEATURE_COMINTEROP">
- <Member Status="ImplRoot" MemberType="Field" Name="m_objref" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_data1" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_data2" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_flags" />
- <Member Status="ImplRoot" Name="MarshalHelperConvertObjectToVariant(System.Object,System.Variant@)" />
- <Member Status="ImplRoot" Name="MarshalHelperCastVariant(System.Object,System.Int32,System.Variant@)" />
- <Member Status="ImplRoot" Name="MarshalHelperConvertVariantToObject(System.Variant@)" />
- </Type>
- <Type Name="System.Version">
- <Member Name="#ctor(System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor" />
- <Member Name="Clone" />
- <Member Name="CompareTo(System.Object)" />
- <Member Name="CompareTo(System.Version)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Version)" />
- <Member Name="get_Build" />
- <Member Name="get_Major" />
- <Member Name="get_MajorRevision" />
- <Member Name="get_Minor" />
- <Member Name="get_MinorRevision" />
- <Member Name="get_Revision" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Version,System.Version)" />
- <Member Name="op_GreaterThan(System.Version,System.Version)" />
- <Member Name="op_GreaterThanOrEqual(System.Version,System.Version)" />
- <Member Name="op_Inequality(System.Version,System.Version)" />
- <Member Name="op_LessThan(System.Version,System.Version)" />
- <Member Name="op_LessThanOrEqual(System.Version,System.Version)" />
- <Member Name="Parse(System.String)" />
- <Member Name="ToString" />
- <Member Name="ToString(System.Int32)" />
- <Member Name="TryParse(System.String,System.Version@)" />
- <Member MemberType="Property" Name="Build" />
- <Member MemberType="Property" Name="Major" />
- <Member MemberType="Property" Name="MajorRevision" />
- <Member MemberType="Property" Name="Minor" />
- <Member MemberType="Property" Name="MinorRevision" />
- <Member MemberType="Property" Name="Revision" />
- </Type>
- <Type Name="System.Void" />
- <Type Name="System.WeakReference">
- <Member Name="#ctor(System.Object)" />
- <Member Name="#ctor(System.Object,System.Boolean)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="#ctor" />
- <Member Name="get_IsAlive" />
- <Member Name="get_Target" />
- <Member Name="get_TrackResurrection" />
- <Member Name="set_Target(System.Object)" />
- <Member MemberType="Property" Name="IsAlive" />
- <Member MemberType="Property" Name="Target" />
- <Member MemberType="Property" Name="TrackResurrection" />
- </Type>
- <Type Status="ApiRoot" Name="System.WeakReference&lt;T&gt;">
- <Member Name="#ctor(T)" />
- <Member Name="#ctor(T,System.Boolean)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="SetTarget(T)" />
- <Member Name="TryGetTarget(T@)" />
- <Member Status="ImplRoot" Name="Finalize" />
- </Type>
-<!-- SMOSIER ADDED API ROOTS FOR C# -->
- <Type Name="System.Runtime.CompilerServices.RuntimeCompatibilityAttribute">
- <Member MemberType="Property" Name="WrapNonExceptionThrows" />
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.AsyncStateMachineAttribute">
- <Member Name="#ctor(System.Type)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.IteratorStateMachineAttribute">
- <Member Name="#ctor(System.Type)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.StateMachineAttribute">
- <Member Name="#ctor(System.Type)" />
- <Member Name="get_StateMachineType" />
- <Member MemberType="Property" Name="StateMachineType" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.CallerFilePathAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.CallerLineNumberAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.CallerMemberNameAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.CompilerGeneratedAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.CompilerGlobalScopeAttribute">
- <Member Name="#ctor" />
- </Type>
-<!-- SMOSIER ADDED API ROOTS FOR our build process -->
- <Type Name="System.Runtime.InteropServices.ComVisibleAttribute">
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Name="System.Reflection.AssemblyFileVersionAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="get_Version" />
- <Member MemberType="Property" Name="Version" />
- </Type>
- <Type Status="ImplRoot" Name="System.Security.Permissions.HostProtectionAttribute">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Security.Permissions.SecurityAction)" />
- <Member Name="get_ExternalProcessMgmt" />
- <Member Name="get_ExternalThreading" />
- <Member Name="get_MayLeakOnAbort" />
- <Member Name="get_Resources" />
- <Member Name="get_SecurityInfrastructure" />
- <Member Name="get_SelfAffectingProcessMgmt" />
- <Member Name="get_SelfAffectingThreading" />
- <Member Name="get_SharedState" />
- <Member Name="get_Synchronization" />
- <Member Name="get_UI" />
- <Member Name="set_ExternalProcessMgmt(System.Boolean)" />
- <Member Name="set_ExternalThreading(System.Boolean)" />
- <Member Name="set_MayLeakOnAbort(System.Boolean)" />
- <Member Name="set_Resources(System.Security.Permissions.HostProtectionResource)" />
- <Member Name="set_SecurityInfrastructure(System.Boolean)" />
- <Member Name="set_SelfAffectingProcessMgmt(System.Boolean)" />
- <Member Name="set_SelfAffectingThreading(System.Boolean)" />
- <Member Name="set_SharedState(System.Boolean)" />
- <Member Name="set_Synchronization(System.Boolean)" />
- <Member Name="set_UI(System.Boolean)" />
- <Member MemberType="Property" Name="ExternalProcessMgmt" />
- <Member MemberType="Property" Name="ExternalThreading" />
- <Member MemberType="Property" Name="MayLeakOnAbort" />
- <Member MemberType="Property" Name="Resources" />
- <Member MemberType="Property" Name="SecurityInfrastructure" />
- <Member MemberType="Property" Name="SelfAffectingProcessMgmt" />
- <Member MemberType="Property" Name="SelfAffectingThreading" />
- <Member MemberType="Property" Name="SharedState" />
- <Member MemberType="Property" Name="Synchronization" />
- <Member MemberType="Property" Name="UI" />
- </Type>
- <Type Status="ImplRoot" Name="System.Security.Permissions.HostProtectionResource" />
- <Type Name="System.IO.BinaryReader">
- <Member Name="#ctor(System.IO.Stream)" />
- <Member Name="#ctor(System.IO.Stream,System.Text.Encoding)" />
- <Member Name="#ctor(System.IO.Stream,System.Text.Encoding,System.Boolean)" />
- <Member Name="Close" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="FillBuffer(System.Int32)" />
- <Member Name="get_BaseStream" />
- <Member Name="PeekChar" />
- <Member Name="Read" />
- <Member Name="Read7BitEncodedInt" />
- <Member Name="Read(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="Read(System.Char[],System.Int32,System.Int32)" />
- <Member Name="ReadBoolean" />
- <Member Name="ReadByte" />
- <Member Name="ReadBytes(System.Int32)" />
- <Member Name="ReadChar" />
- <Member Name="ReadChars(System.Int32)" />
- <Member Name="ReadDecimal" />
- <Member Name="ReadDouble" />
- <Member Name="ReadInt16" />
- <Member Name="ReadInt32" />
- <Member Name="ReadInt64" />
- <Member Name="ReadSByte" />
- <Member Name="ReadSingle" />
- <Member Name="ReadString" />
- <Member Name="ReadUInt16" />
- <Member Name="ReadUInt32" />
- <Member Name="ReadUInt64" />
- <Member MemberType="Property" Name="BaseStream" />
- </Type>
- <Type Name="System.IO.BinaryWriter">
- <Member MemberType="Field" Name="Null" />
- <Member MemberType="Field" Name="OutStream" />
- <Member Name="#ctor" />
- <Member Name="#ctor(System.IO.Stream)" />
- <Member Name="#ctor(System.IO.Stream,System.Text.Encoding)" />
- <Member Name="#ctor(System.IO.Stream,System.Text.Encoding,System.Boolean)" />
- <Member Name="Close" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="Flush" />
- <Member Name="get_BaseStream" />
- <Member Name="Seek(System.Int32,System.IO.SeekOrigin)" />
- <Member Name="Write(System.Boolean)" />
- <Member Name="Write(System.Byte)" />
- <Member Name="Write(System.Byte[])" />
- <Member Name="Write(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="Write(System.Char)" />
- <Member Name="Write(System.Char[])" />
- <Member Name="Write(System.Char[],System.Int32,System.Int32)" />
- <Member Name="Write(System.Decimal)" />
- <Member Name="Write(System.Double)" />
- <Member Name="Write(System.Int16)" />
- <Member Name="Write(System.Int32)" />
- <Member Name="Write(System.Int64)" />
- <Member Name="Write(System.SByte)" />
- <Member Name="Write(System.Single)" />
- <Member Name="Write(System.String)" />
- <Member Name="Write(System.UInt16)" />
- <Member Name="Write(System.UInt32)" />
- <Member Name="Write(System.UInt64)" />
- <Member Name="Write7BitEncodedInt(System.Int32)" />
- <Member MemberType="Property" Name="BaseStream" />
- </Type>
- <Type Name="System.IO.DirectoryNotFoundException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.IO.EndOfStreamException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.IO.FileNotFoundException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member Name="#ctor(System.String,System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_FileName" />
- <Member Name="get_FusionLog" />
- <Member MemberType="Property" Name="FileName" />
- <Member MemberType="Property" Name="FusionLog" />
- <Member Status="ImplRoot" Name="#ctor(System.String,System.String,System.Int32)" />
- </Type>
- <Type Name="System.IO.FileStream">
- <Member Name="#ctor(System.IntPtr,System.IO.FileAccess)" />
- <Member Name="#ctor(System.IntPtr,System.IO.FileAccess,System.Boolean)" />
- <Member Name="#ctor(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32)" />
- <Member Name="#ctor(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32,System.Boolean)" />
- <Member Name="#ctor(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess)" />
- <Member Name="#ctor(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32)" />
- <Member Name="#ctor(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32,System.Boolean)" />
- <Member Name="#ctor(System.String,System.IO.FileMode)" />
- <Member Name="#ctor(System.String,System.IO.FileMode,System.IO.FileAccess)" />
- <Member Name="#ctor(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare)" />
- <Member Name="#ctor(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32)" />
- <Member Name="#ctor(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.Boolean)" />
- <Member Name="#ctor(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.IO.FileOptions)" />
- <Member Name="BeginRead(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)" />
- <Member Name="BeginWrite(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="EndRead(System.IAsyncResult)" />
- <Member Name="EndWrite(System.IAsyncResult)" />
- <Member Name="Finalize" />
- <Member Name="Flush" />
- <Member Name="Flush(System.Boolean)" />
- <Member Name="FlushAsync(System.Threading.CancellationToken)" />
- <Member Name="get_CanRead" />
- <Member Name="get_CanSeek" />
- <Member Name="get_CanWrite" />
- <Member Name="get_Handle" />
- <Member Name="get_IsAsync" />
- <Member Name="get_Length" />
- <Member Name="get_Name" />
- <Member Name="get_Position" />
- <Member Name="get_SafeFileHandle" />
- <Member Name="Lock(System.Int64,System.Int64)" />
- <Member Name="Read(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="ReadAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)" />
- <Member Name="ReadByte" />
- <Member Name="Seek(System.Int64,System.IO.SeekOrigin)" />
- <Member Name="set_Position(System.Int64)" />
- <Member Name="SetLength(System.Int64)" />
- <Member Name="Unlock(System.Int64,System.Int64)" />
- <Member Name="Write(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="WriteAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)" />
- <Member Name="WriteByte(System.Byte)" />
- <Member MemberType="Property" Name="CanRead" />
- <Member MemberType="Property" Name="CanSeek" />
- <Member MemberType="Property" Name="CanWrite" />
- <Member MemberType="Property" Name="Handle" />
- <Member MemberType="Property" Name="IsAsync" />
- <Member MemberType="Property" Name="Length" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Position" />
- <Member MemberType="Property" Name="SafeFileHandle" />
- </Type>
- <Type Name="System.IO.IOException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.String,System.Int32)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.IO.MemoryStream">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Byte[])" />
- <Member Name="#ctor(System.Byte[],System.Boolean)" />
- <Member Name="#ctor(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Byte[],System.Int32,System.Int32,System.Boolean)" />
- <Member Name="#ctor(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Boolean)" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="CopyToAsync(System.IO.Stream,System.Int32,System.Threading.CancellationToken)" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="Flush" />
- <Member Name="FlushAsync(System.Threading.CancellationToken)" />
- <Member Name="get_CanRead" />
- <Member Name="get_CanSeek" />
- <Member Name="get_CanWrite" />
- <Member Name="get_Capacity" />
- <Member Name="get_Length" />
- <Member Name="get_Position" />
- <Member Name="GetBuffer" />
- <Member Name="TryGetBuffer(System.ArraySegment&lt;System.Byte&gt;@)" />
- <Member Name="Read(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="ReadAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)" />
- <Member Name="ReadByte" />
- <Member Name="Seek(System.Int64,System.IO.SeekOrigin)" />
- <Member Name="set_Capacity(System.Int32)" />
- <Member Name="set_Position(System.Int64)" />
- <Member Name="SetLength(System.Int64)" />
- <Member Name="ToArray" />
- <Member Name="Write(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="WriteAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)" />
- <Member Name="WriteByte(System.Byte)" />
- <Member Name="WriteTo(System.IO.Stream)" />
- <Member MemberType="Property" Name="CanRead" />
- <Member MemberType="Property" Name="CanSeek" />
- <Member MemberType="Property" Name="CanWrite" />
- <Member MemberType="Property" Name="Capacity" />
- <Member MemberType="Property" Name="Length" />
- <Member MemberType="Property" Name="Position" />
- <Member Status="ApiFxInternal" Name="InternalGetOriginAndLength(System.Int32@,System.Int32@)" Condition="FEATURE_COMINTEROP" />
- </Type>
- <Type Name="System.IO.Path">
- <Member MemberType="Field" Name="AltDirectorySeparatorChar" />
- <Member MemberType="Field" Name="DirectorySeparatorChar" />
- <Member MemberType="Field" Name="PathSeparator" />
- <Member MemberType="Field" Name="VolumeSeparatorChar" />
- <Member MemberType="Field" Name="InvalidPathChars" />
- <Member Name="ChangeExtension(System.String,System.String)" />
- <Member Name="Combine(System.String,System.String)" />
- <Member Name="Combine(System.String,System.String,System.String)" />
- <Member Name="Combine(System.String,System.String,System.String,System.String)" />
- <Member Name="Combine(System.String[])" />
- <Member Name="GetDirectoryName(System.String)" />
- <Member Name="GetExtension(System.String)" />
- <Member Name="GetFileName(System.String)" />
- <Member Name="GetFileNameWithoutExtension(System.String)" />
- <Member Name="GetFullPath(System.String)" />
- <Member Name="GetRelativePath(System.String,System.String)" />
- <Member Name="GetInvalidPathChars" />
- <Member Name="GetInvalidFileNameChars" />
- <Member Name="GetPathRoot(System.String)" />
- <Member Name="HasExtension(System.String)" />
- <Member Name="IsPathRooted(System.String)" />
- <Member Name="GetRandomFileName" />
- <Member Name="GetTempFileName" />
- <Member Name="GetTempPath" />
- </Type>
- <Type Name="System.IO.PathTooLongException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.IO.SearchOption" Condition="FEATURE_LEGACYSURFACE">
- <Member MemberType="Field" Name="TopDirectoryOnly" />
- <Member MemberType="Field" Name="AllDirectories" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.IO.SeekOrigin" Condition="FEATURE_LEGACYSURFACE">
- <Member MemberType="Field" Name="Begin" />
- <Member MemberType="Field" Name="Current" />
- <Member MemberType="Field" Name="End" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.IO.Stream">
- <Member MemberType="Field" Name="Null" />
- <Member Name="#ctor" />
- <Member Name="BeginRead(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)" />
- <Member Name="BeginWrite(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)" />
- <Member Name="CopyTo(System.IO.Stream)" />
- <Member Name="CopyTo(System.IO.Stream,System.Int32)" />
- <Member Name="CopyToAsync(System.IO.Stream)" />
- <Member Name="CopyToAsync(System.IO.Stream,System.Int32)" />
- <Member Name="CopyToAsync(System.IO.Stream,System.Int32,System.Threading.CancellationToken)" />
- <Member Name="Close" />
- <Member Name="CreateWaitHandle" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="EndRead(System.IAsyncResult)" />
- <Member Name="EndWrite(System.IAsyncResult)" />
- <Member Name="Flush" />
- <Member Name="FlushAsync" />
- <Member Name="FlushAsync(System.Threading.CancellationToken)" />
- <Member Name="get_CanRead" />
- <Member Name="get_CanSeek" />
- <Member Name="get_CanTimeout" />
- <Member Name="get_CanWrite" />
- <Member Name="get_Length" />
- <Member Name="get_Position" />
- <Member Name="get_ReadTimeout" />
- <Member Name="get_WriteTimeout" />
- <Member Name="ObjectInvariant" />
- <Member Name="Read(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="ReadByte" />
- <Member Name="ReadAsync(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="ReadAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)" />
- <Member Name="Seek(System.Int64,System.IO.SeekOrigin)" />
- <Member Name="set_Position(System.Int64)" />
- <Member Name="set_ReadTimeout(System.Int32)" />
- <Member Name="set_WriteTimeout(System.Int32)" />
- <Member Name="SetLength(System.Int64)" />
- <Member Name="Synchronized(System.IO.Stream)" />
- <Member Name="Write(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="WriteAsync(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="WriteAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)" />
- <Member Name="WriteByte(System.Byte)" />
- <Member MemberType="Property" Name="CanRead" />
- <Member MemberType="Property" Name="CanSeek" />
- <Member MemberType="Property" Name="CanTimeout" />
- <Member MemberType="Property" Name="CanWrite" />
- <Member MemberType="Property" Name="Length" />
- <Member MemberType="Property" Name="Position" />
- <Member MemberType="Property" Name="ReadTimeout" />
- <Member MemberType="Property" Name="WriteTimeout" />
- </Type>
- <Type Name="System.IO.UnmanagedMemoryAccessor">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64)" />
- <Member Name="#ctor(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess)" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="get_CanRead" />
- <Member Name="get_CanWrite" />
- <Member Name="get_Capacity" />
- <Member Name="get_IsOpen" />
- <Member Name="Initialize(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess)" />
- <Member Name="Read&lt;T&gt;(System.Int64,T@)" />
- <Member Name="ReadArray&lt;T&gt;(System.Int64,T[],System.Int32,System.Int32)" />
- <Member Name="ReadBoolean(System.Int64)" />
- <Member Name="ReadByte(System.Int64)" />
- <Member Name="ReadChar(System.Int64)" />
- <Member Name="ReadDecimal(System.Int64)" />
- <Member Name="ReadDouble(System.Int64)" />
- <Member Name="ReadInt16(System.Int64)" />
- <Member Name="ReadInt32(System.Int64)" />
- <Member Name="ReadInt64(System.Int64)" />
- <Member Name="ReadSByte(System.Int64)" />
- <Member Name="ReadSingle(System.Int64)" />
- <Member Name="ReadUInt16(System.Int64)" />
- <Member Name="ReadUInt32(System.Int64)" />
- <Member Name="ReadUInt64(System.Int64)" />
- <Member Name="Write(System.Int64,System.Boolean)" />
- <Member Name="Write(System.Int64,System.Byte)" />
- <Member Name="Write(System.Int64,System.Char)" />
- <Member Name="Write(System.Int64,System.Decimal)" />
- <Member Name="Write(System.Int64,System.Double)" />
- <Member Name="Write(System.Int64,System.Int16)" />
- <Member Name="Write(System.Int64,System.Int32)" />
- <Member Name="Write(System.Int64,System.Int64)" />
- <Member Name="Write(System.Int64,System.SByte)" />
- <Member Name="Write(System.Int64,System.Single)" />
- <Member Name="Write(System.Int64,System.UInt16)" />
- <Member Name="Write(System.Int64,System.UInt32)" />
- <Member Name="Write(System.Int64,System.UInt64)" />
- <Member Name="Write&lt;T&gt;(System.Int64,T@)" />
- <Member Name="WriteArray&lt;T&gt;(System.Int64,T[],System.Int32,System.Int32)" />
- <Member MemberType="Property" Name="CanRead" />
- <Member MemberType="Property" Name="CanWrite" />
- <Member MemberType="Property" Name="Capacity" />
- <Member MemberType="Property" Name="IsOpen" />
- </Type>
- <Type Name="System.IO.UnmanagedMemoryStream">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Byte*,System.Int64)" />
- <Member Name="#ctor(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess)" />
- <Member Name="#ctor(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64)" />
- <Member Name="#ctor(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess)" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="Flush" />
- <Member Name="get_CanRead" />
- <Member Name="get_CanSeek" />
- <Member Name="get_CanWrite" />
- <Member Name="get_Capacity" />
- <Member Name="get_Length" />
- <Member Name="get_Position" />
- <Member Name="get_PositionPointer" />
- <Member Name="Initialize(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess)" />
- <Member Name="Initialize(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess)" />
- <Member Name="Read(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="ReadByte" />
- <Member Name="Seek(System.Int64,System.IO.SeekOrigin)" />
- <Member Name="set_Position(System.Int64)" />
- <Member Name="SetLength(System.Int64)" />
- <Member Name="Write(System.Byte[],System.Int32,System.Int32)" />
- <Member Name="WriteByte(System.Byte)" />
- <Member MemberType="Property" Name="CanRead" />
- <Member MemberType="Property" Name="CanSeek" />
- <Member MemberType="Property" Name="CanWrite" />
- <Member MemberType="Property" Name="Capacity" />
- <Member MemberType="Property" Name="Length" />
- <Member MemberType="Property" Name="Position" />
- <Member MemberType="Property" Name="PositionPointer" />
- </Type>
- <Type Name="System.Security.Permissions.SecurityAttribute">
- <Member Name="#ctor(System.Security.Permissions.SecurityAction)" />
- <Member Name="get_Action" />
- <Member Name="get_Unrestricted" />
- <Member Name="set_Action(System.Security.Permissions.SecurityAction)" />
- <Member Name="set_Unrestricted(System.Boolean)" />
- <Member Name="FindSecurityAttributeTypeHandle(System.String)"/>
- <Member MemberType="Property" Name="Action" />
- <Member MemberType="Property" Name="Unrestricted" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.Contract" >
- <Member MemberType="Event" Name="ContractFailed" />
- <Member Name="Assert(System.Boolean)" />
- <Member Name="Assert(System.Boolean,System.String)" />
- <Member Name="Assume(System.Boolean)" />
- <Member Name="Assume(System.Boolean,System.String)" />
- <Member Name="EndContractBlock" />
- <Member Name="Ensures(System.Boolean,System.String)" />
- <Member Name="Ensures(System.Boolean)" />
- <Member Name="EnsuresOnThrow&lt;TException&gt;(System.Boolean)" />
- <Member Name="EnsuresOnThrow&lt;TException&gt;(System.Boolean,System.String)" />
- <Member Name="Exists&lt;T&gt;(System.Collections.Generic.IEnumerable&lt;T&gt;,System.Predicate&lt;T&gt;)" />
- <Member Name="Exists(System.Int32,System.Int32,System.Predicate&lt;System.Int32&gt;)" />
- <Member Name="ForAll&lt;T&gt;(System.Collections.Generic.IEnumerable&lt;T&gt;,System.Predicate&lt;T&gt;)" />
- <Member Name="ForAll(System.Int32,System.Int32,System.Predicate&lt;System.Int32&gt;)" />
- <Member Name="Invariant(System.Boolean)" />
- <Member Name="Invariant(System.Boolean,System.String)" />
- <Member Name="OldValue&lt;T&gt;(T)" />
- <Member Name="Requires(System.Boolean)" />
- <Member Name="Requires(System.Boolean,System.String)" />
- <Member Name="Requires&lt;TException&gt;(System.Boolean)" />
- <Member Name="Requires&lt;TException&gt;(System.Boolean,System.String)" />
- <Member Name="Result&lt;T&gt;" />
- <Member Name="ValueAtReturn&lt;T&gt;(T@)" />
- </Type>
- <Type Name="System.Diagnostics.Contracts.ContractAbbreviatorAttribute" >
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Diagnostics.Contracts.ContractArgumentValidatorAttribute" >
- <Member Name="#ctor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.ContractPublicPropertyNameAttribute">
- <Member Name="#ctor(System.String)" />
- <Member MemberType="Property" Name="Name" />
- </Type>
- <Type Name="System.Diagnostics.Contracts.ContractFailedEventArgs" >
- <Member Name="#ctor(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception)" />
- <Member Name="get_Condition" />
- <Member Name="get_FailureKind" />
- <Member Name="get_Handled" />
- <Member Name="get_Message" />
- <Member Name="get_OriginalException" />
- <Member Name="get_Unwind" />
- <Member Name="SetHandled" />
- <Member Name="SetUnwind" />
- <Member MemberType="Property" Name="Condition" />
- <Member MemberType="Property" Name="FailureKind" />
- <Member MemberType="Property" Name="Handled" />
- <Member MemberType="Property" Name="Message" />
- <Member MemberType="Property" Name="OriginalException" />
- <Member MemberType="Property" Name="Unwind" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.ContractOptionAttribute" >
- <Member Name="#ctor(System.String,System.String,System.Boolean)" />
- <Member Name="#ctor(System.String,System.String,System.String)" />
- <Member MemberType="Property" Name="Category" />
- <Member MemberType="Property" Name="Setting" />
- <Member MemberType="Property" Name="Enabled" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.PureAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.ContractInvariantMethodAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.ContractReferenceAssemblyAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.ContractClassAttribute">
- <Member Name="#ctor(System.Type)" />
- <Member MemberType="Property" Name="TypeContainingContracts" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.ContractClassForAttribute">
- <Member Name="#ctor(System.Type)" />
- <Member MemberType="Property" Name="TypeContractsAreFor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.ContractRuntimeIgnoredAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.ContractVerificationAttribute">
- <Member Name="#ctor(System.Boolean)" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Status="ApiRoot" Name="System.Diagnostics.Contracts.Internal.ContractHelper">
- <Member Name="RaiseContractFailedEvent(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception)" />
- <Member Name="TriggerFailure(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.String,System.Exception)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Diagnostics.Contracts.ContractException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.String,System.Exception)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member MemberType="Property" Name="Condition" />
- <Member MemberType="Property" Name="Failure" />
- <Member MemberType="Property" Name="Kind" />
- <Member MemberType="Property" Name="UserMessage" />
- </Type>
- <Type Name="System.StringSplitOptions" />
- <Type Status="ImplRoot" Name="System.__Canon" />
- <Type Status="ImplRoot" Name="System.__ComObject" Condition="FEATURE_COMINTEROP">
- <Member MemberType="Field" Name="m_ObjectToDataMap" />
- <Member Name="ReleaseSelf" />
- <Member Name="ReleaseAllData" />
- <Member Name="GetEventProvider(System.RuntimeType)" />
- </Type>
- <Type Status="ImplRoot" Name="System.BCLDebug">
- <Member Name="GetRegistryLoggingValues(System.Boolean@,System.Boolean@,System.Int32@,System.Boolean@,System.Boolean@,System.Boolean@)" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.Configuration.Assemblies.AssemblyHashAlgorithm" />
- <Type Status="ImplRoot" Name="System.Configuration.Assemblies.AssemblyVersionCompatibility" />
- <Type Status="ImplRoot" Name="System.CrossAppDomainMarshaledException">
- <Member Name="#ctor(System.String,System.Int32)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Currency">
- <Member Status="ImplRoot" Name="#ctor(System.Decimal)" /> <!-- EE - il stubs -->
- </Type>
- <Type Status="ImplRoot" Name="System.Diagnostics.EditAndContinueHelper">
- <Member MemberType="Field" Name="_objectReference" />
- </Type>
- <Type Status="ImplRoot" Name="System.Diagnostics.StackFrameHelper">
- <Member Status="ImplRoot" Name="OnDeserialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerialized(System.Runtime.Serialization.StreamingContext)" />
- <Member Status="ImplRoot" Name="OnSerializing(System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventAttribute">
- <Member Name="#ctor(System.Int32)" />
- <Member Name="get_EventId" />
- <Member MemberType="Property" Name="ActivityOptions" />
- <Member MemberType="Property" Name="Channel" />
- <Member MemberType="Property" Name="Keywords" />
- <Member MemberType="Property" Name="Level" />
- <Member MemberType="Property" Name="Message" />
- <Member MemberType="Property" Name="Opcode" />
- <Member MemberType="Property" Name="Task" />
- <Member MemberType="Property" Name="Version" />
- <Member MemberType="Property" Name="Tags" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventActivityOptions">
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="Detachable" />
- <Member MemberType="Field" Name="Disable" />
- <Member MemberType="Field" Name="Recursive" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventFieldFormat">
- <Member MemberType="Field" Name="Boolean" />
- <Member MemberType="Field" Name="Default" />
- <Member MemberType="Field" Name="Hexadecimal" />
- <Member MemberType="Field" Name="HResult" />
- <Member MemberType="Field" Name="Json" />
- <Member MemberType="Field" Name="String" />
- <Member MemberType="Field" Name="Xml" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventDescriptor">
- <Member Name="#ctor(System.Int32,System.Byte,System.Byte,System.Int64)" />
- <Member Name="#ctor(System.Int32,System.Byte,System.Byte,System.Byte,System.Byte,System.Int32,System.Int64)" />
- <Member Name="get_EventId" />
- <Member Name="get_Channel" />
- <Member Name="get_Level" />
- <Member Name="get_Opcode" />
- <Member Name="get_Task" />
- <Member Name="get_Version" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Diagnostics.Tracing.EventDescriptor)" />
- </Type>
-
- <Type Name="System.Diagnostics.Tracing.EventChannel">
- <Member MemberType="Field" Name="Admin" />
- <Member MemberType="Field" Name="Analytic" />
- <Member MemberType="Field" Name="Debug" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="Operational" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventCommand">
- <Member MemberType="Field" Name="Disable" />
- <Member MemberType="Field" Name="Enable" />
- <Member MemberType="Field" Name="SendManifest" />
- <Member MemberType="Field" Name="Update" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventCommandEventArgs">
- <Member Name="get_Arguments" />
- <Member Name="get_Command" />
- <Member Name="DisableEvent(System.Int32)" />
- <Member Name="EnableEvent(System.Int32)" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventDataAttribute">
- <Member Name="#ctor" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Level" />
- <Member MemberType="Property" Name="Opcode" />
- <Member MemberType="Property" Name="Keywords" />
- <Member MemberType="Property" Name="Tags" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventKeywords">
- <Member MemberType="Field" Name="AuditFailure" />
- <Member MemberType="Field" Name="AuditSuccess" />
- <Member MemberType="Field" Name="CorrelationHint" />
- <Member MemberType="Field" Name="EventLogClassic" />
- <Member MemberType="Field" Name="MicrosoftTelemetry" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="Sqm" />
- <Member MemberType="Field" Name="WdiContext" />
- <Member MemberType="Field" Name="WdiDiagnostic" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventLevel">
- <Member MemberType="Field" Name="Critical" />
- <Member MemberType="Field" Name="Error" />
- <Member MemberType="Field" Name="Informational" />
- <Member MemberType="Field" Name="LogAlways" />
- <Member MemberType="Field" Name="Verbose" />
- <Member MemberType="Field" Name="Warning" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventListener">
- <Member Name="#ctor" />
- <Member Name="DisableEvents(System.Diagnostics.Tracing.EventSource)" />
- <Member Name="Dispose" />
- <Member Name="EnableEvents(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel)" />
- <Member Name="EnableEvents(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords)" />
- <Member Name="EnableEvents(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords,System.Collections.Generic.IDictionary&lt;System.String,System.String&gt;)" />
- <Member Name="EventSourceIndex(System.Diagnostics.Tracing.EventSource)" />
- <Member Name="OnEventSourceCreated(System.Diagnostics.Tracing.EventSource)" />
- <Member Name="OnEventWritten(System.Diagnostics.Tracing.EventWrittenEventArgs)" />
- </Type>
-
- <Type Name="System.Diagnostics.Tracing.EventManifestOptions">
- <Member MemberType="Field" Name="AllCultures" />
- <Member MemberType="Field" Name="AllowEventSourceOverride" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="OnlyIfNeededForRegistration" />
- <Member MemberType="Field" Name="Strict" />
- </Type>
-
- <Type Name="System.Diagnostics.Tracing.EventOpcode">
- <Member MemberType="Field" Name="DataCollectionStart" />
- <Member MemberType="Field" Name="DataCollectionStop" />
- <Member MemberType="Field" Name="Extension" />
- <Member MemberType="Field" Name="Info" />
- <Member MemberType="Field" Name="Receive" />
- <Member MemberType="Field" Name="Reply" />
- <Member MemberType="Field" Name="Resume" />
- <Member MemberType="Field" Name="Send" />
- <Member MemberType="Field" Name="Start" />
- <Member MemberType="Field" Name="Stop" />
- <Member MemberType="Field" Name="Suspend" />
- </Type>
-
- <Type Name="System.Diagnostics.Tracing.EventSource">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Boolean)" />
- <Member Name="#ctor(System.Diagnostics.Tracing.EventSourceSettings)" />
- <Member Name="#ctor(System.Diagnostics.Tracing.EventSourceSettings,System.String[])" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Diagnostics.Tracing.EventSourceSettings)" />
- <Member Name="#ctor(System.String,System.Diagnostics.Tracing.EventSourceSettings,System.String[])" />
- <Member Name="get_Guid" />
- <Member Name="get_Name" />
- <Member MemberType="Property" Name="ConstructionException" />
- <Member MemberType="Property" Name="CurrentThreadActivityId" />
- <Member MemberType="Event" Name="EventCommandExecuted" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="GenerateManifest(System.Type,System.String)" />
- <Member Name="GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions)" />
- <Member Name="GetGuid(System.Type)" />
- <Member Name="GetName(System.Type)" />
- <Member Name="GetTrait(System.String)" />
- <Member Name="GetSources" />
- <Member Name="IsEnabled" />
- <Member Name="IsEnabled(System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords)" />
- <Member Name="IsEnabled(System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords,System.Diagnostics.Tracing.EventChannel)" />
- <Member Name="OnEventCommand(System.Diagnostics.Tracing.EventCommandEventArgs)" />
- <Member Name="SendCommand(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventCommand,System.Collections.Generic.IDictionary&lt;System.String,System.String&gt;)" />
- <Member Name="SetCurrentThreadActivityId(System.Guid)" />
- <Member Name="SetCurrentThreadActivityId(System.Guid,System.Guid@)" />
- <Member MemberType="Property" Name="Settings" />
- <Member Name="ToString" />
- <Member Name="Write(System.String)" />
- <Member Name="Write(System.String,System.Diagnostics.Tracing.EventSourceOptions)" />
- <Member Name="Write&lt;T&gt;(System.String,T)" />
- <Member Name="Write&lt;T&gt;(System.String,System.Diagnostics.Tracing.EventSourceOptions,T)" />
- <Member Name="Write&lt;T&gt;(System.String,System.Diagnostics.Tracing.EventSourceOptions@,System.Guid@,System.Guid@,T@)" />
- <Member Name="Write&lt;T&gt;(System.String,System.Diagnostics.Tracing.EventSourceOptions@,T@)" />
- <Member Name="WriteEvent(System.Int32)" />
- <Member Name="WriteEvent(System.Int32,System.Byte[])" />
- <Member Name="WriteEvent(System.Int32,System.Int32)" />
- <Member Name="WriteEvent(System.Int32,System.Int32,System.Int32)" />
- <Member Name="WriteEvent(System.Int32,System.Int32,System.Int32,System.Int32)" />
- <Member Name="WriteEvent(System.Int32,System.Int32,System.String)" />
- <Member Name="WriteEvent(System.Int32,System.Int64)" />
- <Member Name="WriteEvent(System.Int32,System.Int64,System.Byte[])" />
- <Member Name="WriteEvent(System.Int32,System.Int64,System.Int64)" />
- <Member Name="WriteEvent(System.Int32,System.Int64,System.Int64,System.Int64)" />
- <Member Name="WriteEvent(System.Int32,System.Int64,System.String)" />
- <Member Name="WriteEvent(System.Int32,System.Object[])" />
- <Member Name="WriteEvent(System.Int32,System.String)" />
- <Member Name="WriteEvent(System.Int32,System.String,System.Int32)" />
- <Member Name="WriteEvent(System.Int32,System.String,System.Int32,System.Int32)" />
- <Member Name="WriteEvent(System.Int32,System.String,System.Int64)" />
- <Member Name="WriteEvent(System.Int32,System.String,System.String)" />
- <Member Name="WriteEvent(System.Int32,System.String,System.String,System.String)" />
- <Member Name="WriteEventCore(System.Int32,System.Int32,System.Diagnostics.Tracing.EventSource+EventData*)" />
- <Member Name="WriteEventWithRelatedActivityId(System.Int32,System.Guid,System.Object[])" />
- <Member Name="WriteEventWithRelatedActivityIdCore(System.Int32,System.Guid*,System.Int32,System.Diagnostics.Tracing.EventSource+EventData*)" />
- <Member Name="get_Settings" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventSource+EventData">
- <Member MemberType="Property" Name="DataPointer" />
- <Member MemberType="Property" Name="Size" />
- </Type>
-
- <Type Name="System.Diagnostics.Tracing.EventSourceAttribute">
- <Member Name="#ctor" />
- <Member MemberType="Property" Name="Guid" />
- <Member MemberType="Property" Name="LocalizationResources" />
- <Member MemberType="Property" Name="Name" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventIgnoreAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventSourceException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventSourceOptions">
- <Member MemberType="Property" Name="Keywords" />
- <Member MemberType="Property" Name="Level" />
- <Member MemberType="Property" Name="Opcode" />
- <Member MemberType="Property" Name="Tags" />
- <Member MemberType="Property" Name="ActivityOptions" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventSourceSettings">
- <Member MemberType="Field" Name="Default" />
- <Member MemberType="Field" Name="EtwManifestEventFormat" />
- <Member MemberType="Field" Name="EtwSelfDescribingEventFormat" />
- <Member MemberType="Field" Name="ThrowOnEventWriteErrors" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventTask">
- <Member MemberType="Field" Name="None" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventTags">
- <Member MemberType="Field" Name="None" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventFieldTags">
- <Member MemberType="Field" Name="None" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventFieldAttribute">
- <Member Name="#ctor" />
- <Member MemberType="Property" Name="Tags" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Format" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.EventWrittenEventArgs">
- <Member Name="get_Channel" />
- <Member Name="get_EventId" />
- <Member Name="get_EventSource" />
- <Member Name="get_Keywords" />
- <Member Name="get_Level" />
- <Member Name="get_Message" />
- <Member Name="get_Opcode" />
- <Member Name="get_Payload" />
- <Member Name="get_PayloadNames" />
- <Member Name="get_Task" />
- <Member Name="get_Version" />
- <Member Name="get_Tags" />
- <Member MemberType="Property" Name="ActivityId" />
- <Member MemberType="Property" Name="EventName" />
- <Member MemberType="Property" Name="RelatedActivityId" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.NonEventAttribute">
- <Member Name="#ctor" />
- </Type>
-
- <Type Name="System.Diagnostics.Tracing.FrameworkEventSource+Tasks">
- <Member MemberType="Field" Name="GetResponse" />
- <Member MemberType="Field" Name="GetRequestStream" />
- <Member MemberType="Field" Name="ThreadTransfer" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.FrameworkEventSource+Keywords">
- <Member MemberType="Field" Name="Loader" />
- <Member MemberType="Field" Name="NetClient" />
- <Member MemberType="Field" Name="DynamicTypeUsage" />
- <Member MemberType="Field" Name="ThreadTransfer" />
- </Type>
- <Type Name="System.Diagnostics.Tracing.FrameworkEventSource+Opcodes">
- <Member MemberType="Field" Name="ReceiveHandled" />
- </Type>
- <Type Status="ImplRoot" Name="System.IO.Stream+SynchronousAsyncResult">
- <Member Name="get_AsyncState" />
- <Member Name="get_AsyncWaitHandle" />
- <Member Name="get_CompletedSynchronously" />
- <Member Name="get_IsCompleted" />
- <Member MemberType="Property" Name="AsyncState" />
- <Member MemberType="Property" Name="AsyncWaitHandle" />
- <Member MemberType="Property" Name="CompletedSynchronously" />
- <Member MemberType="Property" Name="IsCompleted" />
- </Type>
- <Type Name="System.OperationCanceledException" >
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Threading.CancellationToken)" />
- <Member Name="#ctor(System.String,System.Threading.CancellationToken)" />
- <Member Name="#ctor(System.String,System.Exception,System.Threading.CancellationToken)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_CancellationToken" />
- </Type>
- <Type Status="ImplRoot" Name="System.Reflection.CustomAttributeCtorParameter" />
- <Type Status="ImplRoot" Name="System.Reflection.CustomAttributeEncodedArgument" />
- <Type Status="ImplRoot" Name="System.Reflection.CustomAttributeNamedParameter" />
- <Type Status="ImplRoot" Name="System.Reflection.CustomAttributeType" />
- <Type Status="ImplRoot" Name="System.Reflection.Emit.DynamicResolver" />
- <Type Status="ImplRoot" Name="System.Reflection.Emit.DynamicResolver+SecurityControlFlags" />
- <Type Status="ImplRoot" Name="System.Reflection.Emit.DynamicScope" />
- <Type Name="System.Reflection.ExceptionHandlingClause" >
- <Member Name="#ctor" />
- <Member Name="get_CatchType" />
- <Member Name="get_FilterOffset" />
- <Member Name="get_Flags" />
- <Member Name="get_HandlerLength" />
- <Member Name="get_HandlerOffset" />
- <Member Name="get_TryLength" />
- <Member Name="get_TryOffset" />
- <Member Name="ToString" />
- </Type>
- <Type Name="System.Reflection.ExceptionHandlingClauseOptions" >
- <Member MemberType="Field" Name="Clause" />
- <Member MemberType="Field" Name="Fault" />
- <Member MemberType="Field" Name="Filter" />
- <Member MemberType="Field" Name="Finally" />
- </Type>
- <Type Status="ApiRoot" Name="System.Reflection.LocalVariableInfo">
- <Member Name="#ctor" />
- <Member Name="get_IsPinned" />
- <Member Name="get_LocalIndex" />
- <Member Name="get_LocalType" />
- <Member MemberType="Property" Name="IsPinned" />
- <Member MemberType="Property" Name="LocalIndex" />
- <Member MemberType="Property" Name="LocalType" />
- </Type>
- <Type Status="ImplRoot" Name="System.Reflection.MetadataImport">
- <Member Name="ThrowError(System.Int32)" /> <!-- EE -->
- </Type>
- <Type Name="System.Reflection.MethodBody">
- <Member Name="#ctor" />
- <Member Name="get_ExceptionHandlingClauses" />
- <Member Name="get_InitLocals" />
- <Member Name="get_LocalSignatureMetadataToken" />
- <Member Name="get_LocalVariables" />
- <Member Name="get_MaxStackSize" />
- <Member Name="GetILAsByteArray" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_exceptionHandlingClauses" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_IL" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_initLocals" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_localSignatureMetadataToken" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_localVariables" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_maxStackSize" />
- </Type>
- <Type Status="ImplRoot" Name="System.Reflection.Emit.ExceptionHandler">
- <Member Name="op_Equality(System.Reflection.Emit.ExceptionHandler,System.Reflection.Emit.ExceptionHandler)" />
- <Member Name="op_Inequality(System.Reflection.Emit.ExceptionHandler,System.Reflection.Emit.ExceptionHandler)" />
- </Type>
- <Type Name="System.Reflection.ReflectionTypeLoadException">
- <Member Name="#ctor(System.Type[],System.Exception[])" />
- <Member Name="#ctor(System.Type[],System.Exception[],System.String)" />
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member MemberType="Property" Name="LoaderExceptions" />
- <Member MemberType="Property" Name="Types" />
- <Member Name="get_LoaderExceptions" />
- <Member Name="get_Types" />
- </Type>
- <Type Name="System.Reflection.ResourceAttributes">
- <Member MemberType="Field" Name="Private" />
- <Member MemberType="Field" Name="Public" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Status="ImplRoot" Name="System.Reflection.RtFieldInfo">
- <Member Status="ImplRoot" Name="GetFieldHandle" />
- </Type>
- <Type Status="ImplRoot" Name="System.Reflection.RuntimeConstructorInfo">
- <Member Status="ImplRoot" MemberType="Field" Name="_empty1" />
- <Member Status="ImplRoot" MemberType="Field" Name="_empty2" />
- <Member Status="ImplRoot" MemberType="Field" Name="_empty3" />
- </Type>
- <Type Name="System.Reflection.TypeFilter">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Status="ApiRoot" Name="BeginInvoke(System.Type,System.Object,System.AsyncCallback,System.Object)" />
- <Member Status="ApiRoot" Name="EndInvoke(System.IAsyncResult)" />
- <Member Status="ApiRoot" Name="Invoke(System.Type,System.Object)" />
- </Type>
- <Type Name="System.Reflection.StrongNameKeyPair">
- <Member Name="#ctor(System.Byte[])" />
- <Member Name="#ctor(System.IO.FileStream)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="get_PublicKey" />
- <Member MemberType="Property" Name="PublicKey" />
- <Member Status="ImplRoot" Name="System.Runtime.Serialization.IDeserializationCallback.OnDeserialization(System.Object)" />
- <Member Status="ImplRoot" Name="System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Status="ImplRoot" Name="System.ReflectionOnlyType" />
- <Type Status="ImplRoot" Name="System.ResId" />
- <Type Status="ImplRoot" Name="System.Resolver">
- <Member Name="GetJitContext(System.Int32@)" /> <!-- EE -->
- <Member Name="GetCodeInfo(System.Int32@,System.Int32@,System.Int32@)" /> <!-- EE -->
- <Member Name="GetLocalsSignature" /> <!-- EE -->
- <Member Name="GetEHInfo(System.Int32,System.Void*)" /> <!-- EE -->
- <Member Name="GetRawEHInfo" /> <!-- EE -->
- <Member Name="GetStringLiteral(System.Int32)" /> <!-- EE -->
- <Member Name="ResolveToken(System.Int32,System.IntPtr@,System.IntPtr@,System.IntPtr@)" /> <!-- EE -->
- <Member Name="ResolveSignature(System.Int32,System.Int32)" /> <!-- EE -->
- </Type>
- <Type Name="System.Runtime.CompilerServices.RuntimeWrappedException">
- <Member Name="#ctor(System.Object)" /> <!-- EE -->
- <Member Name="get_WrappedException" />
- <Member Name="GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member MemberType="Property" Name="WrappedException" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.StringFreezingAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.CompilerServices.TypeDependencyAttribute">
- <Member Name="#ctor(System.String)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ArrayWithOffset">
- <Member Name="#ctor(System.Object,System.Int32)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="Equals(System.Runtime.InteropServices.ArrayWithOffset)" />
- <Member Name="GetArray" />
- <Member Name="GetHashCode" />
- <Member Name="GetOffset" />
- <Member Name="op_Equality(System.Runtime.InteropServices.ArrayWithOffset,System.Runtime.InteropServices.ArrayWithOffset)" />
- <Member Name="op_Inequality(System.Runtime.InteropServices.ArrayWithOffset,System.Runtime.InteropServices.ArrayWithOffset)" />
- </Type>
- <Type Name="System.Runtime.ConstrainedExecution.ReliabilityContractAttribute">
- <Member Name="#ctor(System.Runtime.ConstrainedExecution.Consistency,System.Runtime.ConstrainedExecution.Cer)" />
- <Member Name="get_Cer" />
- <Member Name="get_ConsistencyGuarantee" />
- <Member MemberType="Property" Name="Cer" />
- <Member MemberType="Property" Name="ConsistencyGuarantee" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.ConstrainedExecution.PrePrepareMethodAttribute" />
- <Type Name="System.Runtime.ConstrainedExecution.CriticalFinalizerObject">
- <Member Name="#ctor"/>
- <Member Name="Finalize" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.Expando.IExpando">
- <Member Name="AddField(System.String)" /> <!-- EE -->
- <Member Name="RemoveMember(System.Reflection.MemberInfo)" /> <!-- EE -->
- </Type>
- <Type Name="System.Runtime.InteropServices.ICustomMarshaler">
- <Member Name="MarshalNativeToManaged(System.IntPtr)" /> <!-- EE -->
- <Member Name="MarshalManagedToNative(System.Object)" /> <!-- EE -->
- <Member Name="CleanUpNativeData(System.IntPtr)" /> <!-- EE -->
- <Member Name="CleanUpManagedData(System.Object)" /> <!-- EE -->
- <Member Name="GetNativeDataSize" /> <!-- EE -->
- </Type>
- <Type Name="System.Runtime.InteropServices.InvalidOleVariantTypeException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IStringable" Condition="FEATURE_COMINTEROP">
- <Member Name="ToString"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IIterator&lt;T&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="get_Current"/>
- <Member Name="get_HasCurrent" />
- <Member Name="MoveNext"/>
- <Member Name="GetMany(T[])"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.BindableIterableToEnumerableAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="GetEnumerator_Stub" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.BindableVectorToCollectionAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Count" />
- <Member Name="IsSynchronized" />
- <Member Name="SyncRoot" />
- <Member Name="CopyTo(System.Array,System.Int32)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.BindableVectorToListAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Indexer_Get(System.Int32)" />
- <Member Name="Indexer_Set(System.Int32,System.Object)" />
- <Member Name="Add(System.Object)" />
- <Member Name="Contains(System.Object)" />
- <Member Name="Clear" />
- <Member Name="IsFixedSize" />
- <Member Name="IsReadOnly" />
- <Member Name="IndexOf(System.Object)" />
- <Member Name="Insert(System.Int32,System.Object)" />
- <Member Name="Remove(System.Object)" />
- <Member Name="RemoveAt(System.Int32)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.CLRIReferenceImpl&lt;T&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="UnboxHelper(System.Object)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.CLRIKeyValuePairImpl&lt;K,V&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="BoxHelper(System.Object)" />
- <Member Name="UnboxHelper(System.Object)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.CLRIReferenceArrayImpl&lt;T&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="UnboxHelper(System.Object)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.WindowsRuntime.DefaultInterfaceAttribute" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor(System.Type)" />
- <Member MemberType="Property" Name="DefaultInterface" />
- </Type>
- <Type Name="System.Runtime.InteropServices.WindowsRuntime.ReadOnlyArrayAttribute" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.WindowsRuntime.ReturnValueNameAttribute" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor(System.String)" />
- <Member MemberType="Property" Name="Name" />
- </Type>
- <Type Name="System.Runtime.InteropServices.WindowsRuntime.WriteOnlyArrayAttribute" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.DictionaryToMapAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Lookup&lt;K,V&gt;(K)" />
- <Member Name="Size&lt;K,V&gt;" />
- <Member Name="HasKey&lt;K,V&gt;(K)" />
- <Member Name="GetView&lt;K,V&gt;" />
- <Member Name="Insert&lt;K,V&gt;(K,V)" />
- <Member Name="Remove&lt;K,V&gt;(K)" />
- <Member Name="Clear&lt;K,V&gt;" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.VectorViewToReadOnlyCollectionAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Count&lt;T&gt;" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.MapViewToReadOnlyCollectionAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Count&lt;K,V&gt;" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.EnumerableToBindableIterableAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="First_Stub" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.EnumerableToIterableAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="First_Stub&lt;T&gt;" />
- </Type>
- <Type Name="System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken" Condition="FEATURE_COMINTEROP">
- <Member Name="op_Equality(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken,System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)" />
- <Member Name="op_Inequality(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken,System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable&lt;T&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor"/>
- <Member Name="get_InvocationList"/>
- <Member Name="set_InvocationList(T)"/>
- <Member MemberType="Property" Name="InvocationList"/>
- <Member Name="AddEventHandler(T)"/>
- <Member Name="RemoveEventHandler(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"/>
- <Member Name="RemoveEventHandler(T)"/>
- <Member Status="ApiFxInternal" Name="ExtractHandler(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)" />
- <Member Name="GetOrCreateEventRegistrationTokenTable(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable&lt;T&gt;@)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.GetEnumerator_Delegate&lt;T@&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke" />
- </Type>
- <Type Status="ApiRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IActivationFactory" Condition="FEATURE_COMINTEROP">
- <Member Name="ActivateInstance"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IBindableIterable" Condition="FEATURE_COMINTEROP">
- <Member Name="First" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IBindableIterator" Condition="FEATURE_COMINTEROP">
- <Member Name="get_Current" />
- <Member MemberType="Property" Name="Current" />
- <Member Name="get_HasCurrent" />
- <Member MemberType="Property" Name="HasCurrent" />
- <Member Name="MoveNext" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IBindableVector" Condition="FEATURE_COMINTEROP">
- <Member Name="GetAt(System.UInt32)" />
- <Member Name="get_Size" />
- <Member MemberType="Property" Name="Size" />
- <Member Name="GetView" />
- <Member Name="IndexOf(System.Object,System.UInt32@)" />
- <Member Name="SetAt(System.UInt32,System.Object)" />
- <Member Name="InsertAt(System.UInt32,System.Object)" />
- <Member Name="RemoveAt(System.UInt32)" />
- <Member Name="Append(System.Object)" />
- <Member Name="RemoveAtEnd" />
- <Member Name="Clear" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IBindableVectorView" Condition="FEATURE_COMINTEROP">
- <Member Name="GetAt(System.UInt32)" />
- <Member Name="get_Size" />
- <Member MemberType="Property" Name="Size" />
- <Member Name="IndexOf(System.Object,System.UInt32@)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IClosable" Condition="FEATURE_COMINTEROP">
- <Member Name="Close"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IDisposableToIClosableAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor"/>
- <Member Name="Close"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IClosableToIDisposableAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor"/>
- <Member Name="Dispose"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.ICustomProperty" Condition="FEATURE_COMINTEROP">
- <Member Name="GetValue(System.Object)"/>
- <Member Name="GetValue(System.Object,System.Object)"/>
- <Member Name="SetValue(System.Object,System.Object)"/>
- <Member Name="SetValue(System.Object,System.Object,System.Object)"/>
- <Member Name="get_CanRead"/>
- <Member Name="get_CanWrite"/>
- <Member Name="get_Name"/>
- <Member Name="get_Type"/>
- <Member MemberType="Property" Name="CanRead"/>
- <Member MemberType="Property" Name="CanWrite"/>
- <Member MemberType="Property" Name="Name"/>
- <Member MemberType="Property" Name="Type"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.ICustomPropertyProviderImpl" Condition="FEATURE_COMINTEROP">
- <Member Name="CreateProperty(System.Object,System.String)" />
- <Member Name="CreateIndexedProperty(System.Object,System.String,System.StubHelpers.TypeNameNative*)" />
- <Member Name="GetType(System.Object,System.StubHelpers.TypeNameNative*)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.ICustomPropertyProviderProxy" Condition="FEATURE_COMINTEROP">
- <Member Name="CreateInstance(System.Object)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IIterable&lt;T&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="First" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IKeyValuePair&lt;K,V&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="get_Key" />
- <Member Name="get_Value" />
- <Member MemberType="Property" Name="Key" />
- <Member MemberType="Property" Name="Value" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IMap&lt;K,V&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="Lookup(K)" />
- <Member Name="get_Size" />
- <Member Name="Size" MemberType="Property" />
- <Member Name="HasKey(K)" />
- <Member Name="GetView" />
- <Member Name="Insert(K,V)" />
- <Member Name="Remove(K)" />
- <Member Name="Clear" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.Indexer_Get_Delegate&lt;T@&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Int32,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Int32)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Runtime.InteropServices.WindowsRuntime.InterfaceImplementedInVersionAttribute" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor(System.Type,System.Byte,System.Byte,System.Byte,System.Byte)"/>
- <Member MemberType="Property" Name="BuildVersion" />
- <Member MemberType="Property" Name="MajorVersion" />
- <Member MemberType="Property" Name="MinorVersion" />
- <Member MemberType="Property" Name="RevisionVersion" />
- <Member MemberType="Property" Name="InterfaceType" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IterableToEnumerableAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="GetEnumerator_Stub&lt;T&gt;" />
- <Member Name="GetEnumerator_Variance_Stub&lt;T&gt;" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IMapView&lt;K,V&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="Lookup(K)" />
- <Member Name="get_Size" />
- <Member Name="Size" MemberType="Property" />
- <Member Name="HasKey(K)" />
- <Member Name="Split(System.Runtime.InteropServices.WindowsRuntime.IMapView&lt;K,V&gt;@,System.Runtime.InteropServices.WindowsRuntime.IMapView&lt;K,V&gt;@)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IMapViewToIReadOnlyDictionaryAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Indexer_Get&lt;K,V&gt;(K)" />
- <Member Name="Keys&lt;K,V&gt;" />
- <Member Name="Values&lt;K,V&gt;" />
- <Member Name="ContainsKey&lt;K,V&gt;(K)" />
- <Member Name="TryGetValue&lt;K,V&gt;(K,V@)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IPropertyValue" Condition="FEATURE_COMINTEROP">
- <Member Name="get_Type"/>
- <Member MemberType="Property" Name="Type"/>
- <Member Name="get_IsNumericScalar"/>
- <Member MemberType="Property" Name="IsNumericScalar"/>
- <Member Name="GetUInt8" />
- <Member Name="GetInt16" />
- <Member Name="GetUInt16" />
- <Member Name="GetInt32" />
- <Member Name="GetUInt32" />
- <Member Name="GetInt64" />
- <Member Name="GetUInt64" />
- <Member Name="GetSingle" />
- <Member Name="GetDouble" />
- <Member Name="GetChar16" />
- <Member Name="GetBoolean" />
- <Member Name="GetString" />
- <Member Name="GetGuid" />
- <Member Name="GetDateTime" />
- <Member Name="GetTimeSpan" />
- <Member Name="GetPoint" />
- <Member Name="GetSize" />
- <Member Name="GetRect" />
- <Member Name="GetUInt8Array" />
- <Member Name="GetInt16Array" />
- <Member Name="GetUInt16Array" />
- <Member Name="GetInt32Array" />
- <Member Name="GetUInt32Array" />
- <Member Name="GetInt64Array" />
- <Member Name="GetUInt64Array" />
- <Member Name="GetSingleArray" />
- <Member Name="GetDoubleArray" />
- <Member Name="GetChar16Array" />
- <Member Name="GetBooleanArray" />
- <Member Name="GetStringArray" />
- <Member Name="GetInspectableArray" />
- <Member Name="GetGuidArray" />
- <Member Name="GetDateTimeArray" />
- <Member Name="GetTimeSpanArray" />
- <Member Name="GetPointArray" />
- <Member Name="GetSizeArray" />
- <Member Name="GetRectArray" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IReadOnlyDictionaryToIMapViewAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Lookup&lt;K,V&gt;(K)" />
- <Member Name="Size&lt;K,V&gt;" />
- <Member Name="HasKey&lt;K,V&gt;(K)" />
- <Member Name="Split&lt;K,V&gt;(System.Runtime.InteropServices.WindowsRuntime.IMapView&lt;K,V&gt;@,System.Runtime.InteropServices.WindowsRuntime.IMapView&lt;K,V&gt;@)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IReadOnlyListToIVectorViewAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="GetAt&lt;T&gt;(System.UInt32)" />
- <Member Name="Size&lt;T&gt;" />
- <Member Name="IndexOf&lt;T&gt;(T,System.UInt32@)" />
- <Member Name="GetMany&lt;T&gt;(System.UInt32,T[])" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IReferenceFactory" Condition="FEATURE_COMINTEROP">
- <Member Name="CreateIReference(System.Object)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IRestrictedErrorInfo" Condition="FEATURE_COMINTEROP">
- <Member Name="GetErrorDetails(System.String@,System.Int32@,System.String@,System.String@)" />
- <Member Name="GetReference(System.String@)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IVector&lt;T&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="GetAt(System.UInt32)" />
- <Member Name="get_Size" />
- <Member Name="Size" MemberType="Property" />
- <Member Name="GetView" />
- <Member Name="IndexOf(T,System.UInt32@)" />
- <Member Name="SetAt(System.UInt32,T)" />
- <Member Name="RemoveAt(System.UInt32)" />
- <Member Name="Append(T)" />
- <Member Name="RemoveAtEnd" />
- <Member Name="Clear" />
- <Member Name="GetMany(System.UInt32,T[])" />
- <Member Name="ReplaceAll(T[])" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IVectorView&lt;T&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="GetAt(System.UInt32)" />
- <Member Name="get_Size" />
- <Member Name="Size" MemberType="Property" />
- <Member Name="IndexOf(T,System.UInt32@)" />
- <Member Name="GetMany(System.UInt32,T[])" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IVectorViewToIReadOnlyListAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Indexer_Get&lt;T&gt;(System.Int32)" />
- <Member Name="Indexer_Get_Variance&lt;T&gt;(System.Int32)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.ListToBindableVectorAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="GetAt(System.UInt32)" />
- <Member Name="Size" />
- <Member Name="GetView" />
- <Member Name="IndexOf(System.Object,System.UInt32@)" />
- <Member Name="SetAt(System.UInt32,System.Object)" />
- <Member Name="InsertAt(System.UInt32,System.Object)" />
- <Member Name="RemoveAt(System.UInt32)" />
- <Member Name="Append(System.Object)" />
- <Member Name="RemoveAtEnd" />
- <Member Name="Clear" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.ListToVectorAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="GetAt&lt;T&gt;(System.UInt32)" />
- <Member Name="Size&lt;T&gt;" />
- <Member Name="GetView&lt;T&gt;" />
- <Member Name="IndexOf&lt;T&gt;(T,System.UInt32@)" />
- <Member Name="SetAt&lt;T&gt;(System.UInt32,T)" />
- <Member Name="InsertAt&lt;T&gt;(System.UInt32,T)" />
- <Member Name="RemoveAt&lt;T&gt;(System.UInt32)" />
- <Member Name="Append&lt;T&gt;(T)" />
- <Member Name="RemoveAtEnd&lt;T&gt;" />
- <Member Name="Clear&lt;T&gt;" />
- <Member Name="GetMany&lt;T&gt;(System.UInt32,T[])" />
- <Member Name="ReplaceAll&lt;T&gt;(T[])" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.MapToCollectionAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Count&lt;K,V&gt;" />
- <Member Name="IsReadOnly&lt;K,V&gt;" />
- <Member Name="Add&lt;K,V&gt;(System.Collections.Generic.KeyValuePair&lt;K,V&gt;)" />
- <Member Name="Clear&lt;K,V&gt;" />
- <Member Name="Contains&lt;K,V&gt;(System.Collections.Generic.KeyValuePair&lt;K,V&gt;)" />
- <Member Name="CopyTo&lt;K,V&gt;(System.Collections.Generic.KeyValuePair&lt;K,V&gt;[],System.Int32)" />
- <Member Name="Remove&lt;K,V&gt;(System.Collections.Generic.KeyValuePair&lt;K,V&gt;)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.MapToDictionaryAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Indexer_Get&lt;K,V&gt;(K)" />
- <Member Name="Indexer_Set&lt;K,V&gt;(K,V)" />
- <Member Name="Keys&lt;K,V&gt;" />
- <Member Name="Values&lt;K,V&gt;" />
- <Member Name="ContainsKey&lt;K,V&gt;(K)" />
- <Member Name="Add&lt;K,V&gt;(K,V)" />
- <Member Name="Remove&lt;K,V&gt;(K)" />
- <Member Name="TryGetValue&lt;K,V&gt;(K,V@)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.RuntimeClass" Condition="FEATURE_COMINTEROP" />
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.VectorToCollectionAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Count&lt;T&gt;" />
- <Member Name="IsReadOnly&lt;T&gt;" />
- <Member Name="Add&lt;T&gt;(T)" />
- <Member Name="Clear&lt;T&gt;" />
- <Member Name="Contains&lt;T&gt;(T)" />
- <Member Name="CopyTo&lt;T&gt;(T[],System.Int32)" />
- <Member Name="Remove&lt;T&gt;(T)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.VectorToListAdapter" Condition="FEATURE_COMINTEROP">
- <Member Name="Indexer_Get&lt;T&gt;(System.Int32)" />
- <Member Name="Indexer_Set&lt;T&gt;(System.Int32,T)" />
- <Member Name="IndexOf&lt;T&gt;(T)" />
- <Member Name="Insert&lt;T&gt;(System.Int32,T)" />
- <Member Name="RemoveAt&lt;T&gt;(System.Int32)" />
- </Type>
- <Type Status="ApiFxInternal" Name="System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeImportAttribute" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.WindowsFoundationEventHandler&lt;T&gt;" Condition="FEATURE_COMINTEROP">
- <Member Name="#ctor(System.Object,System.IntPtr)" />
- <Member Name="BeginInvoke(System.Object,T,System.AsyncCallback,System.Object)" />
- <Member Name="EndInvoke(System.IAsyncResult)" />
- <Member Name="Invoke(System.Object,T)" />
- </Type>
- <Type Status="ApiFxInternal" Name="System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferHelper" Condition="FEATURE_COMINTEROP">
- <Member Name="StoreOverlappedPtrInCCW(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Threading.NativeOverlapped*)" />
- <Member Name="StoreOverlappedInCCW(System.Object,System.Threading.NativeOverlapped*)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.WindowsRuntime.IManagedActivationFactory" Condition="FEATURE_COMINTEROP">
- <Member Name="RunClassConstructor" />
- </Type>
- <Type Name="System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal" Condition="FEATURE_COMINTEROP">
- <Member Status="ApiRoot" Name="GetRegistrationTokenCacheSize" />
- <Member Name="AddEventHandler&lt;T&gt;(System.Func&lt;T,System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken&gt;,System.Action&lt;System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken&gt;,T)" />
- <Member Name="FreeHString(System.IntPtr)" />
- <Member Name="GetActivationFactory(System.Type)" />
- <Member Name="GetActivationFactoryForType(System.Type)" />
- <Member Name="GetManagedActivationFactory(System.Type)" />
- <Member Name="PtrToStringHString(System.IntPtr)" />
- <Member Name="RemoveAllEventHandlers(System.Action&lt;System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken&gt;)" />
- <Member Name="RemoveEventHandler&lt;T&gt;(System.Action&lt;System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken&gt;,T)" />
- <Member Name="StringToHString(System.String)" />
- </Type>
- <Type Status="ApiRoot" Name="System.Runtime.Versioning.TargetFrameworkAttribute">
- <Member Name="#ctor(System.String)" />
- <Member MemberType="Property" Name="FrameworkName" />
- <Member MemberType="Property" Name="FrameworkDisplayName" />
- </Type>
- <Type Name="System.Runtime.Serialization.FormatterServices">
- <Member Name="GetUninitializedObject(System.Type)" />
- </Type>
- <Type Name="System.Runtime.Serialization.OptionalFieldAttribute">
- <Member Name="#ctor" />
- <Member MemberType="Property" Name="VersionAdded" />
- </Type>
- <Type Name="System.Runtime.Serialization.SerializationEntry">
- <Member MemberType="Property" Name="Value" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="ObjectType" />
- </Type>
- <Type Name="System.Runtime.Serialization.SerializationException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Runtime.Serialization.SerializationInfo">
- <Member Name="#ctor(System.Type,System.Runtime.Serialization.IFormatterConverter)" />
- <Member Name="#ctor(System.Type,System.Runtime.Serialization.IFormatterConverter,System.Boolean)" />
- <Member Name="SetType(System.Type)" />
- <Member Name="GetEnumerator" />
- <Member Name="AddValue(System.String,System.Object,System.Type)" />
- <Member Name="AddValue(System.String,System.Object)" />
- <Member Name="AddValue(System.String,System.Boolean)" />
- <Member Name="AddValue(System.String,System.Char)" />
- <Member Name="AddValue(System.String,System.SByte)" />
- <Member Name="AddValue(System.String,System.Byte)" />
- <Member Name="AddValue(System.String,System.Int16)" />
- <Member Name="AddValue(System.String,System.UInt16)" />
- <Member Name="AddValue(System.String,System.Int32)" />
- <Member Name="AddValue(System.String,System.UInt32)" />
- <Member Name="AddValue(System.String,System.Int64)" />
- <Member Name="AddValue(System.String,System.UInt64)" />
- <Member Name="AddValue(System.String,System.Single)" />
- <Member Name="AddValue(System.String,System.Double)" />
- <Member Name="AddValue(System.String,System.Decimal)" />
- <Member Name="AddValue(System.String,System.DateTime)" />
- <Member Name="GetValue(System.String,System.Type)" />
- <Member Name="GetBoolean(System.String)" />
- <Member Name="GetChar(System.String)" />
- <Member Name="GetSByte(System.String)" />
- <Member Name="GetByte(System.String)" />
- <Member Name="GetInt16(System.String)" />
- <Member Name="GetUInt16(System.String)" />
- <Member Name="GetInt32(System.String)" />
- <Member Name="GetUInt32(System.String)" />
- <Member Name="GetInt64(System.String)" />
- <Member Name="GetUInt64(System.String)" />
- <Member Name="GetSingle(System.String)" />
- <Member Name="GetDouble(System.String)" />
- <Member Name="GetDecimal(System.String)" />
- <Member Name="GetDateTime(System.String)" />
- <Member Name="GetString(System.String)" />
- <Member Name="UpdateValue(System.String,System.Object,System.Type)" />
- <Member MemberType="Property" Name="FullTypeName" />
- <Member MemberType="Property" Name="AssemblyName" />
- <Member MemberType="Property" Name="MemberCount" />
- <Member MemberType="Property" Name="ObjectType" />
- <Member MemberType="Property" Name="IsFullTypeNameSetExplicit" />
- <Member MemberType="Property" Name="IsAssemblyNameSetExplicit" />
- </Type>
- <Type Name="System.Runtime.Serialization.SerializationInfoEnumerator">
- <Member Name="MoveNext" />
- <Member Name="Reset" />
- <Member Name="System.Collections.IEnumerator.get_Current" />
- <Member MemberType="Property" Name="Current" />
- <Member MemberType="Property" Name="Name" />
- <Member MemberType="Property" Name="Value" />
- <Member MemberType="Property" Name="ObjectType" />
- </Type>
- <Type Name="System.Runtime.Serialization.IObjectReference">
- <Member Name="GetRealObject(System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Runtime.Serialization.ISerializable">
- <Member Name="GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Runtime.Serialization.IFormatterConverter">
- <Member Name="Convert(System.Object,System.Type)" />
- <Member Name="Convert(System.Object,System.TypeCode)" />
- <Member Name="ToBoolean(System.Object)" />
- <Member Name="ToChar(System.Object)" />
- <Member Name="ToSByte(System.Object)" />
- <Member Name="ToByte(System.Object)" />
- <Member Name="ToInt16(System.Object)" />
- <Member Name="ToUInt16(System.Object)" />
- <Member Name="ToInt32(System.Object)" />
- <Member Name="ToUInt32(System.Object)" />
- <Member Name="ToInt64(System.Object)" />
- <Member Name="ToUInt64(System.Object)" />
- <Member Name="ToSingle(System.Object)" />
- <Member Name="ToDouble(System.Object)" />
- <Member Name="ToDecimal(System.Object)" />
- <Member Name="ToDateTime(System.Object)" />
- <Member Name="ToString(System.Object)" />
- </Type>
- <Type Name="System.Runtime.Serialization.IDeserializationCallback">
- <Member Name="OnDeserialization(System.Object)" />
- </Type>
- <Type Name="System.Runtime.Serialization.ISafeSerializationData">
- <Member Name="CompleteDeserialization(System.Object)" />
- </Type>
- <Type Name="System.Runtime.Serialization.SafeSerializationEventArgs">
- <Member Name="AddSerializedState(System.Runtime.Serialization.ISafeSerializationData)" />
- <Member Name="get_StreamingContext" />
- <Member MemberType="Property" Name="StreamingContext" />
- </Type>
- <Type Status="ApiRoot" Name="System.Runtime.Serialization.OnSerializingAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Runtime.Serialization.OnSerializedAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Runtime.Serialization.OnDeserializingAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Runtime.Serialization.OnDeserializedAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ApiRoot" Name="System.Runtime.Serialization.StreamingContext">
- <Member Name="#ctor(System.Runtime.Serialization.StreamingContextStates)" />
- <Member Name="#ctor(System.Runtime.Serialization.StreamingContextStates,System.Object)" />
- <Member MemberType="Property" Name="Context" />
- <Member MemberType="Property" Name="State" />
- </Type>
- <Type Status="ApiRoot" Name="System.Runtime.Serialization.StreamingContextStates">
- <Member MemberType="Field" Name="CrossProcess" />
- <Member MemberType="Field" Name="CrossMachine" />
- <Member MemberType="Field" Name="File" />
- <Member MemberType="Field" Name="Persistence" />
- <Member MemberType="Field" Name="Remoting" />
- <Member MemberType="Field" Name="Other" />
- <Member MemberType="Field" Name="Clone" />
- <Member MemberType="Field" Name="CrossAppDomain" />
- <Member MemberType="Field" Name="All" />
- </Type>
- <Type Status="ImplRoot" Name="System.RuntimeType">
- <Member Status="ImplRoot" MemberType="Field" Name="m_keepalive" />
- <Member Name="GetPropertyInfo(System.RuntimeType,System.Int32)" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.Security.CodeAccessPermission" />
- <Type Status="ImplRoot" Name="System.Security.PermissionType" />
- <Type Status="ImplRoot" Name="System.Security.CodeAccessSecurityEngine">
- <Member Name="CheckHelper(System.Object,System.Security.PermissionSet,System.Security.PermissionSet,System.Security.CodeAccessPermission,System.Security.PermissionToken,System.RuntimeMethodHandleInternal,System.Reflection.RuntimeAssembly,System.Security.Permissions.SecurityAction)" /> <!-- EE -->
- <Member Name="CheckSetHelper(System.Object,System.Security.PermissionSet,System.Security.PermissionSet,System.Security.PermissionSet,System.RuntimeMethodHandleInternal,System.Reflection.RuntimeAssembly,System.Security.Permissions.SecurityAction)" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.Security.DynamicSecurityMethodAttribute" />
- <Type Status="ImplRoot" Name="System.Security.FrameSecurityDescriptor">
- <Member MemberType="Field" Name="m_callerToken" Condition="not FEATURE_PAL" />
- <Member MemberType="Field" Name="m_DeclarativeDenials" />
- <Member MemberType="Field" Name="m_DeclarativeRestrictions" />
- <Member MemberType="Field" Name="m_denials" />
- <Member MemberType="Field" Name="m_impToken" Condition="not FEATURE_PAL" />
- <Member MemberType="Field" Name="m_restriction" />
- </Type>
- <Type Status="ImplRoot" Name="System.Security.PermissionListSet">
- <Member Name="CheckDemandNoThrow(System.Security.CodeAccessPermission)" /> <!-- EE -->
- <Member Name="CheckSetDemandNoThrow(System.Security.PermissionSet)" /> <!-- EE -->
- <Member Name="Update(System.Security.PermissionSet)" /> <!-- EE -->
- </Type>
- <Type Name="System.Security.Cryptography.CryptographicException">
- <Member Name="#ctor"/>
- <Member Name="#ctor(System.Int32)"/>
- <Member Name="#ctor(System.String)"/>
- <Member Name="#ctor(System.String,System.Exception)"/>
- <Member Name="#ctor(System.String,System.String)"/>
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
-
- <Type Status="ImplRoot" Name="System.Security.Permissions.PermissionState" />
- <Type Name="System.Security.Permissions.SecurityAction" />
- <Type Status="ImplRoot" Name="System.Security.Permissions.SecurityPermission" />
- <Type Name="System.Security.Permissions.CodeAccessSecurityAttribute">
- <Member Name="#ctor(System.Security.Permissions.SecurityAction)" />
- </Type>
- <Type Name="System.Security.Permissions.SecurityPermissionAttribute">
- <Member Name="#ctor(System.Security.Permissions.SecurityAction)" />
- <Member MemberType="Property" Name="ControlAppDomain" />
- <Member MemberType="Property" Name="ControlDomainPolicy" />
- <Member MemberType="Property" Name="ControlEvidence" />
- <Member MemberType="Property" Name="ControlPolicy" />
- <Member MemberType="Property" Name="ControlThread" />
- <Member MemberType="Property" Name="Flags" />
- <Member MemberType="Property" Name="UnmanagedCode" />
- <Member MemberType="Property" Name="SkipVerification" />
- </Type>
- <Type Status="ImplRoot" Name="System.Security.PermissionSet">
- <Member MemberType="Field" Name="m_serializedPermissionSet" /> <!-- smosier: avoid changing layout of objects mirrored in EE for now -->
- <Member MemberType="Field" Name="m_unrestrictedPermSet" /> <!-- smosier: avoid changing layout of objects mirrored in EE for now -->
- <Member MemberType="Field" Name="m_normalPermSet" /> <!-- smosier: avoid changing layout of objects mirrored in EE for now -->
- <Member MemberType="Field" Name="readableonly" /> <!-- smosier: avoid changing layout of objects mirrored in EE for now -->
- <Member Name="CreateSerialized(System.Object[],System.Boolean,System.Byte[]@,System.Security.PermissionSet@,System.Security.Permissions.HostProtectionResource,System.Boolean)" /> <!-- EE -->
- <Member Name="Contains(System.Security.IPermission)" /> <!-- EE -->
- <Member Name="Demand" /> <!-- EE -->
- <Member Name="DemandNonCAS" /> <!-- EE -->
- <Member Name="Union(System.Security.PermissionSet)" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.Security.PermissionToken" />
- <Type Status="ImplRoot" Name="System.Security.Policy.Evidence" />
- <Type Name="System.Security.Principal.IIdentity">
- <Member MemberType="Property" Name="AuthenticationType" />
- <Member MemberType="Property" Name="IsAuthenticated" />
- <Member MemberType="Property" Name="Name" />
- <Member Name="get_AuthenticationType" />
- <Member Name="get_IsAuthenticated" />
- <Member Name="get_Name" />
- </Type>
- <Type Name="System.Security.Principal.IPrincipal">
- <Member MemberType="Property" Name="Identity" />
- <Member Name="IsInRole(System.String)" />
- <Member Name ="get_Identity" />
- </Type>
- <Type Name="System.Security.Principal.TokenImpersonationLevel">
- <Member MemberType="Field" Name="Anonymous" />
- <Member MemberType="Field" Name="Delegation" />
- <Member MemberType="Field" Name="Identification" />
- <Member MemberType="Field" Name="Impersonation" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Status="ImplRoot" Name="System.Security.SecurityRuntime">
- <Member Name="FrameDescHelper(System.Security.FrameSecurityDescriptor,System.Security.IPermission,System.Security.PermissionToken,System.RuntimeMethodHandleInternal)" /> <!-- EE -->
- <Member Name="FrameDescSetHelper(System.Security.FrameSecurityDescriptor,System.Security.PermissionSet,System.Security.PermissionSet@,System.RuntimeMethodHandleInternal)" /> <!-- EE -->
- </Type>
- <Type Name="System.Security.SecurityRulesAttribute">
- <Member Name="#ctor(System.Security.SecurityRuleSet)" />
- <Member Name="get_RuleSet" />
- <Member Name="get_SkipVerificationInFullTrust" />
- <Member Name="set_SkipVerificationInFullTrust(System.Boolean)" />
- <Member MemberType="Property" Name="RuleSet" />
- <Member MemberType="Property" Name="SkipVerificationInFullTrust" />
- </Type>
- <Type Name="System.Security.SecurityRuleSet">
- <Member MemberType="Field" Name="Level1" />
- <Member MemberType="Field" Name="Level2" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Security.SecuritySafeCriticalAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Security.SecurityTransparentAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Security.SecurityTreatAsSafeAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Security.SuppressUnmanagedCodeSecurityAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Security.UnverifiableCodeAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Name="System.Security.VerificationException" >
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Status="ImplRoot" Name="System.SharedStatics">
- <Member MemberType="Field" Name="_sharedStatics" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.SZArrayHelper">
- <Member Name="Add&lt;T&gt;(T)" />
- <Member Name="Clear&lt;T&gt;" />
- <Member Name="Contains&lt;T&gt;(T)" />
- <Member Name="CopyTo&lt;T&gt;(T[],System.Int32)" />
- <Member Name="get_Count&lt;T&gt;" />
- <Member Name="get_IsReadOnly&lt;T&gt;" />
- <Member Name="get_Item&lt;T&gt;(System.Int32)" />
- <Member Name="GetEnumerator&lt;T&gt;" />
- <Member Name="IndexOf&lt;T&gt;(T)" />
- <Member Name="Insert&lt;T&gt;(System.Int32,T)" />
- <Member Name="Remove&lt;T&gt;(T)" />
- <Member Name="RemoveAt&lt;T&gt;(System.Int32)" />
- <Member Name="set_Item&lt;T&gt;(System.Int32,T)" />
- </Type>
- <Type Status="ImplRoot" Name="System.Threading._IOCompletionCallback">
- <Member Name="PerformIOCompletionCallback(System.UInt32,System.UInt32,System.Threading.NativeOverlapped*)" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.Threading._ThreadPoolWaitCallback">
- <Member Name="PerformWaitCallback" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.Threading._ThreadPoolWaitOrTimerCallback">
- <Member Name="PerformWaitOrTimerCallback(System.Object,System.Boolean)" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.TimerQueue">
- <Member Name="AppDomainTimerCallback" /> <!-- EE -->
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.InternalCrossContextDelegate" />
- <Type Status="ImplRoot" Name="System.Threading.OverlappedData" />
- <Type Name="System.Threading.ThreadInterruptedException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.ThreadStaticAttribute">
- <Member Name="#ctor" />
- </Type>
- <Type Status="ImplRoot" Name="System.Runtime.InteropServices.PInvokeMap" />
- <Type Name="System.ArgIterator"> <!-- for MC++ -->
- <Member Status="ImplRoot" Name="#ctor(System.RuntimeArgumentHandle,System.Void*)" /> <!-- EE - il stubs -->
- </Type>
- <Type Name="System.Runtime.InteropServices.BestFitMappingAttribute">
- <Member MemberType="Field" Name="ThrowOnUnmappableChar" />
- <Member Name="#ctor(System.Boolean)" />
- <Member MemberType="Property" Name="BestFitMapping" />
- <Member Name="get_BestFitMapping" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComEventInterfaceAttribute">
- <Member Name="#ctor(System.Type,System.Type)" />
- <Member MemberType="Property" Name="EventProvider" />
- <Member MemberType="Property" Name="SourceInterface" />
- <Member Name="get_EventProvider" />
- <Member Name="get_SourceInterface" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComEventsHelper">
- <Member Name="Combine(System.Object,System.Guid,System.Int32,System.Delegate)" />
- <Member Name="Remove(System.Object,System.Guid,System.Int32,System.Delegate)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComMemberType">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="Method" />
- <Member MemberType="Field" Name="PropGet" />
- <Member MemberType="Field" Name="PropSet" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComSourceInterfacesAttribute">
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.Type)" />
- <Member Name="#ctor(System.Type,System.Type)" />
- <Member Name="#ctor(System.Type,System.Type,System.Type)" />
- <Member Name="#ctor(System.Type,System.Type,System.Type,System.Type)" />
- <Member MemberType="Property" Name="Value" />
- <Member Name="get_Value" />
- </Type>
- <Type Name="System.Runtime.InteropServices.CustomQueryInterfaceMode">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="Allow" />
- <Member MemberType="Field" Name="Ignore" />
- </Type>
- <Type Name="System.Runtime.InteropServices.CustomQueryInterfaceResult">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="Failed" />
- <Member MemberType="Field" Name="Handled" />
- <Member MemberType="Field" Name="NotHandled" />
- </Type>
- <Type Name="System.Runtime.InteropServices.DefaultDllImportSearchPathsAttribute">
- <Member Name="#ctor(System.Runtime.InteropServices.DllImportSearchPath)" />
- <Member MemberType="Property" Name="Paths" />
- <Member Name="get_Paths" />
- </Type>
- <Type Name="System.Runtime.InteropServices.DllImportSearchPath">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="ApplicationDirectory" />
- <Member MemberType="Field" Name="AssemblyDirectory" />
- <Member MemberType="Field" Name="LegacyBehavior" />
- <Member MemberType="Field" Name="SafeDirectories" />
- <Member MemberType="Field" Name="System32" />
- <Member MemberType="Field" Name="UseDllDirectoryForDependencies" />
- <Member MemberType="Field" Name="UserDirectories" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ICustomAdapter">
- <Member Name="GetUnderlyingObject" />
- </Type>
- <Type Name="System.Runtime.InteropServices.SafeBuffer">
- <Member Name="#ctor(System.Boolean)" />
- <Member MemberType="Property" Name="ByteLength" />
- <Member Name="AcquirePointer(System.Byte*@)" />
- <Member Name="get_ByteLength" />
- <Member Name="Initialize(System.UInt32,System.UInt32)" />
- <Member Name="Initialize(System.UInt64)" />
- <Member Name="Initialize&lt;T&gt;(System.UInt32)" />
- <Member Name="Read&lt;T&gt;(System.UInt64)" />
- <Member Name="ReadArray&lt;T&gt;(System.UInt64,T[],System.Int32,System.Int32)" />
- <Member Name="ReleasePointer" />
- <Member Name="Write&lt;T&gt;(System.UInt64,T)" />
- <Member Name="WriteArray&lt;T&gt;(System.UInt64,T[],System.Int32,System.Int32)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.TypeIdentifierAttribute">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String,System.String)" />
- <Member MemberType="Property" Name="Identifier" />
- <Member MemberType="Property" Name="Scope" />
- <Member Name="get_Identifier" />
- <Member Name="get_Scope" />
- </Type>
- <Type Name="System.Runtime.InteropServices.VarEnum">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="VT_ARRAY" />
- <Member MemberType="Field" Name="VT_BLOB" />
- <Member MemberType="Field" Name="VT_BLOB_OBJECT" />
- <Member MemberType="Field" Name="VT_BOOL" />
- <Member MemberType="Field" Name="VT_BSTR" />
- <Member MemberType="Field" Name="VT_BYREF" />
- <Member MemberType="Field" Name="VT_CARRAY" />
- <Member MemberType="Field" Name="VT_CF" />
- <Member MemberType="Field" Name="VT_CLSID" />
- <Member MemberType="Field" Name="VT_CY" />
- <Member MemberType="Field" Name="VT_DATE" />
- <Member MemberType="Field" Name="VT_DECIMAL" />
- <Member MemberType="Field" Name="VT_DISPATCH" />
- <Member MemberType="Field" Name="VT_EMPTY" />
- <Member MemberType="Field" Name="VT_ERROR" />
- <Member MemberType="Field" Name="VT_FILETIME" />
- <Member MemberType="Field" Name="VT_HRESULT" />
- <Member MemberType="Field" Name="VT_I1" />
- <Member MemberType="Field" Name="VT_I2" />
- <Member MemberType="Field" Name="VT_I4" />
- <Member MemberType="Field" Name="VT_I8" />
- <Member MemberType="Field" Name="VT_INT" />
- <Member MemberType="Field" Name="VT_LPSTR" />
- <Member MemberType="Field" Name="VT_LPWSTR" />
- <Member MemberType="Field" Name="VT_NULL" />
- <Member MemberType="Field" Name="VT_PTR" />
- <Member MemberType="Field" Name="VT_R4" />
- <Member MemberType="Field" Name="VT_R8" />
- <Member MemberType="Field" Name="VT_RECORD" />
- <Member MemberType="Field" Name="VT_SAFEARRAY" />
- <Member MemberType="Field" Name="VT_STORAGE" />
- <Member MemberType="Field" Name="VT_STORED_OBJECT" />
- <Member MemberType="Field" Name="VT_STREAM" />
- <Member MemberType="Field" Name="VT_STREAMED_OBJECT" />
- <Member MemberType="Field" Name="VT_UI1" />
- <Member MemberType="Field" Name="VT_UI2" />
- <Member MemberType="Field" Name="VT_UI4" />
- <Member MemberType="Field" Name="VT_UI8" />
- <Member MemberType="Field" Name="VT_UINT" />
- <Member MemberType="Field" Name="VT_UNKNOWN" />
- <Member MemberType="Field" Name="VT_USERDEFINED" />
- <Member MemberType="Field" Name="VT_VARIANT" />
- <Member MemberType="Field" Name="VT_VECTOR" />
- <Member MemberType="Field" Name="VT_VOID" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.BIND_OPTS">
- <Member MemberType="Field" Name="cbStruct" />
- <Member MemberType="Field" Name="dwTickCountDeadline" />
- <Member MemberType="Field" Name="grfFlags" />
- <Member MemberType="Field" Name="grfMode" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.BINDPTR">
- <Member MemberType="Field" Name="lpfuncdesc" />
- <Member MemberType="Field" Name="lptcomp" />
- <Member MemberType="Field" Name="lpvardesc" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.CALLCONV">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="CC_CDECL" />
- <Member MemberType="Field" Name="CC_MACPASCAL" />
- <Member MemberType="Field" Name="CC_MAX" />
- <Member MemberType="Field" Name="CC_MPWCDECL" />
- <Member MemberType="Field" Name="CC_MPWPASCAL" />
- <Member MemberType="Field" Name="CC_MSCPASCAL" />
- <Member MemberType="Field" Name="CC_PASCAL" />
- <Member MemberType="Field" Name="CC_RESERVED" />
- <Member MemberType="Field" Name="CC_STDCALL" />
- <Member MemberType="Field" Name="CC_SYSCALL" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.CONNECTDATA">
- <Member MemberType="Field" Name="dwCookie" />
- <Member MemberType="Field" Name="pUnk" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.DESCKIND">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="DESCKIND_FUNCDESC" />
- <Member MemberType="Field" Name="DESCKIND_IMPLICITAPPOBJ" />
- <Member MemberType="Field" Name="DESCKIND_MAX" />
- <Member MemberType="Field" Name="DESCKIND_NONE" />
- <Member MemberType="Field" Name="DESCKIND_TYPECOMP" />
- <Member MemberType="Field" Name="DESCKIND_VARDESC" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.DISPPARAMS">
- <Member MemberType="Field" Name="cArgs" />
- <Member MemberType="Field" Name="cNamedArgs" />
- <Member MemberType="Field" Name="rgdispidNamedArgs" />
- <Member MemberType="Field" Name="rgvarg" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.ELEMDESC">
- <Member MemberType="Field" Name="desc" />
- <Member MemberType="Field" Name="tdesc" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.ELEMDESC+DESCUNION">
- <Member MemberType="Field" Name="idldesc" />
- <Member MemberType="Field" Name="paramdesc" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.EXCEPINFO">
- <Member MemberType="Field" Name="wCode" />
- <Member MemberType="Field" Name="wReserved" />
- <Member MemberType="Field" Name="dwHelpContext" />
- <Member MemberType="Field" Name="scode" />
- <Member MemberType="Field" Name="pfnDeferredFillIn" />
- <Member MemberType="Field" Name="pvReserved" />
- <Member MemberType="Field" Name="bstrDescription" />
- <Member MemberType="Field" Name="bstrHelpFile" />
- <Member MemberType="Field" Name="bstrSource" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.FUNCDESC">
- <Member MemberType="Field" Name="cParams" />
- <Member MemberType="Field" Name="cParamsOpt" />
- <Member MemberType="Field" Name="cScodes" />
- <Member MemberType="Field" Name="oVft" />
- <Member MemberType="Field" Name="wFuncFlags" />
- <Member MemberType="Field" Name="memid" />
- <Member MemberType="Field" Name="lprgelemdescParam" />
- <Member MemberType="Field" Name="lprgscode" />
- <Member MemberType="Field" Name="callconv" />
- <Member MemberType="Field" Name="elemdescFunc" />
- <Member MemberType="Field" Name="funckind" />
- <Member MemberType="Field" Name="invkind" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.FUNCFLAGS">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="FUNCFLAG_FBINDABLE" />
- <Member MemberType="Field" Name="FUNCFLAG_FDEFAULTBIND" />
- <Member MemberType="Field" Name="FUNCFLAG_FDEFAULTCOLLELEM" />
- <Member MemberType="Field" Name="FUNCFLAG_FDISPLAYBIND" />
- <Member MemberType="Field" Name="FUNCFLAG_FHIDDEN" />
- <Member MemberType="Field" Name="FUNCFLAG_FIMMEDIATEBIND" />
- <Member MemberType="Field" Name="FUNCFLAG_FNONBROWSABLE" />
- <Member MemberType="Field" Name="FUNCFLAG_FREPLACEABLE" />
- <Member MemberType="Field" Name="FUNCFLAG_FREQUESTEDIT" />
- <Member MemberType="Field" Name="FUNCFLAG_FRESTRICTED" />
- <Member MemberType="Field" Name="FUNCFLAG_FSOURCE" />
- <Member MemberType="Field" Name="FUNCFLAG_FUIDEFAULT" />
- <Member MemberType="Field" Name="FUNCFLAG_FUSESGETLASTERROR" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.FUNCKIND">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="FUNC_DISPATCH" />
- <Member MemberType="Field" Name="FUNC_NONVIRTUAL" />
- <Member MemberType="Field" Name="FUNC_PUREVIRTUAL" />
- <Member MemberType="Field" Name="FUNC_STATIC" />
- <Member MemberType="Field" Name="FUNC_VIRTUAL" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IBindCtx">
- <Member Name="EnumObjectParam(System.Runtime.InteropServices.ComTypes.IEnumString@)" />
- <Member Name="GetBindOptions(System.Runtime.InteropServices.ComTypes.BIND_OPTS@)" />
- <Member Name="GetObjectParam(System.String,System.Object@)" />
- <Member Name="GetRunningObjectTable(System.Runtime.InteropServices.ComTypes.IRunningObjectTable@)" />
- <Member Name="RegisterObjectBound(System.Object)" />
- <Member Name="RegisterObjectParam(System.String,System.Object)" />
- <Member Name="ReleaseBoundObjects" />
- <Member Name="RevokeObjectBound(System.Object)" />
- <Member Name="RevokeObjectParam(System.String)" />
- <Member Name="SetBindOptions(System.Runtime.InteropServices.ComTypes.BIND_OPTS@)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IConnectionPoint">
- <Member Name="Advise(System.Object,System.Int32@)" />
- <Member Name="EnumConnections(System.Runtime.InteropServices.ComTypes.IEnumConnections@)" />
- <Member Name="GetConnectionInterface(System.Guid@)" />
- <Member Name="GetConnectionPointContainer(System.Runtime.InteropServices.ComTypes.IConnectionPointContainer@)" />
- <Member Name="Unadvise(System.Int32)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IConnectionPointContainer">
- <Member Name="EnumConnectionPoints(System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints@)" />
- <Member Name="FindConnectionPoint(System.Guid@,System.Runtime.InteropServices.ComTypes.IConnectionPoint@)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IDLDESC">
- <Member MemberType="Field" Name="dwReserved" />
- <Member MemberType="Field" Name="wIDLFlags" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IDLFLAG">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="IDLFLAG_FIN" />
- <Member MemberType="Field" Name="IDLFLAG_FLCID" />
- <Member MemberType="Field" Name="IDLFLAG_FOUT" />
- <Member MemberType="Field" Name="IDLFLAG_FRETVAL" />
- <Member MemberType="Field" Name="IDLFLAG_NONE" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints">
- <Member Name="Clone(System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints@)" />
- <Member Name="Next(System.Int32,System.Runtime.InteropServices.ComTypes.IConnectionPoint[],System.IntPtr)" />
- <Member Name="Reset" />
- <Member Name="Skip(System.Int32)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IEnumConnections">
- <Member Name="Clone(System.Runtime.InteropServices.ComTypes.IEnumConnections@)" />
- <Member Name="Next(System.Int32,System.Runtime.InteropServices.ComTypes.CONNECTDATA[],System.IntPtr)" />
- <Member Name="Reset" />
- <Member Name="Skip(System.Int32)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IEnumMoniker">
- <Member Name="Clone(System.Runtime.InteropServices.ComTypes.IEnumMoniker@)" />
- <Member Name="Next(System.Int32,System.Runtime.InteropServices.ComTypes.IMoniker[],System.IntPtr)" />
- <Member Name="Reset" />
- <Member Name="Skip(System.Int32)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IEnumString">
- <Member Name="Clone(System.Runtime.InteropServices.ComTypes.IEnumString@)" />
- <Member Name="Next(System.Int32,System.String[],System.IntPtr)" />
- <Member Name="Reset" />
- <Member Name="Skip(System.Int32)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IEnumVARIANT">
- <Member Name="Clone" />
- <Member Name="Next(System.Int32,System.Object[],System.IntPtr)" />
- <Member Name="Reset" />
- <Member Name="Skip(System.Int32)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IMoniker">
- <Member Name="BindToObject(System.Runtime.InteropServices.ComTypes.IBindCtx,System.Runtime.InteropServices.ComTypes.IMoniker,System.Guid@,System.Object@)" />
- <Member Name="BindToStorage(System.Runtime.InteropServices.ComTypes.IBindCtx,System.Runtime.InteropServices.ComTypes.IMoniker,System.Guid@,System.Object@)" />
- <Member Name="CommonPrefixWith(System.Runtime.InteropServices.ComTypes.IMoniker,System.Runtime.InteropServices.ComTypes.IMoniker@)" />
- <Member Name="ComposeWith(System.Runtime.InteropServices.ComTypes.IMoniker,System.Boolean,System.Runtime.InteropServices.ComTypes.IMoniker@)" />
- <Member Name="Enum(System.Boolean,System.Runtime.InteropServices.ComTypes.IEnumMoniker@)" />
- <Member Name="GetClassID(System.Guid@)" />
- <Member Name="GetDisplayName(System.Runtime.InteropServices.ComTypes.IBindCtx,System.Runtime.InteropServices.ComTypes.IMoniker,System.String@)" />
- <Member Name="GetSizeMax(System.Int64@)" />
- <Member Name="GetTimeOfLastChange(System.Runtime.InteropServices.ComTypes.IBindCtx,System.Runtime.InteropServices.ComTypes.IMoniker,System.Runtime.InteropServices.ComTypes.FILETIME@)" />
- <Member Name="Hash(System.Int32@)" />
- <Member Name="Inverse(System.Runtime.InteropServices.ComTypes.IMoniker@)" />
- <Member Name="IsDirty" />
- <Member Name="IsEqual(System.Runtime.InteropServices.ComTypes.IMoniker)" />
- <Member Name="IsRunning(System.Runtime.InteropServices.ComTypes.IBindCtx,System.Runtime.InteropServices.ComTypes.IMoniker,System.Runtime.InteropServices.ComTypes.IMoniker)" />
- <Member Name="IsSystemMoniker(System.Int32@)" />
- <Member Name="Load(System.Runtime.InteropServices.ComTypes.IStream)" />
- <Member Name="ParseDisplayName(System.Runtime.InteropServices.ComTypes.IBindCtx,System.Runtime.InteropServices.ComTypes.IMoniker,System.String,System.Int32@,System.Runtime.InteropServices.ComTypes.IMoniker@)" />
- <Member Name="Reduce(System.Runtime.InteropServices.ComTypes.IBindCtx,System.Int32,System.Runtime.InteropServices.ComTypes.IMoniker@,System.Runtime.InteropServices.ComTypes.IMoniker@)" />
- <Member Name="RelativePathTo(System.Runtime.InteropServices.ComTypes.IMoniker,System.Runtime.InteropServices.ComTypes.IMoniker@)" />
- <Member Name="Save(System.Runtime.InteropServices.ComTypes.IStream,System.Boolean)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IMPLTYPEFLAGS">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="IMPLTYPEFLAG_FDEFAULT" />
- <Member MemberType="Field" Name="IMPLTYPEFLAG_FDEFAULTVTABLE" />
- <Member MemberType="Field" Name="IMPLTYPEFLAG_FRESTRICTED" />
- <Member MemberType="Field" Name="IMPLTYPEFLAG_FSOURCE" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.INVOKEKIND">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="INVOKE_FUNC" />
- <Member MemberType="Field" Name="INVOKE_PROPERTYGET" />
- <Member MemberType="Field" Name="INVOKE_PROPERTYPUT" />
- <Member MemberType="Field" Name="INVOKE_PROPERTYPUTREF" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IPersistFile">
- <Member Name="GetClassID(System.Guid@)" />
- <Member Name="GetCurFile(System.String@)" />
- <Member Name="IsDirty" />
- <Member Name="Load(System.String,System.Int32)" />
- <Member Name="Save(System.String,System.Boolean)" />
- <Member Name="SaveCompleted(System.String)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.IRunningObjectTable">
- <Member Name="EnumRunning(System.Runtime.InteropServices.ComTypes.IEnumMoniker@)" />
- <Member Name="GetObject(System.Runtime.InteropServices.ComTypes.IMoniker,System.Object@)" />
- <Member Name="GetTimeOfLastChange(System.Runtime.InteropServices.ComTypes.IMoniker,System.Runtime.InteropServices.ComTypes.FILETIME@)" />
- <Member Name="IsRunning(System.Runtime.InteropServices.ComTypes.IMoniker)" />
- <Member Name="NoteChangeTime(System.Int32,System.Runtime.InteropServices.ComTypes.FILETIME@)" />
- <Member Name="Register(System.Int32,System.Object,System.Runtime.InteropServices.ComTypes.IMoniker)" />
- <Member Name="Revoke(System.Int32)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.ITypeComp">
- <Member Name="Bind(System.String,System.Int32,System.Int16,System.Runtime.InteropServices.ComTypes.ITypeInfo@,System.Runtime.InteropServices.ComTypes.DESCKIND@,System.Runtime.InteropServices.ComTypes.BINDPTR@)" />
- <Member Name="BindType(System.String,System.Int32,System.Runtime.InteropServices.ComTypes.ITypeInfo@,System.Runtime.InteropServices.ComTypes.ITypeComp@)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.ITypeInfo">
- <Member Name="AddressOfMember(System.Int32,System.Runtime.InteropServices.ComTypes.INVOKEKIND,System.IntPtr@)" />
- <Member Name="CreateInstance(System.Object,System.Guid@,System.Object@)" />
- <Member Name="GetContainingTypeLib(System.Runtime.InteropServices.ComTypes.ITypeLib@,System.Int32@)" />
- <Member Name="GetDllEntry(System.Int32,System.Runtime.InteropServices.ComTypes.INVOKEKIND,System.IntPtr,System.IntPtr,System.IntPtr)" />
- <Member Name="GetDocumentation(System.Int32,System.String@,System.String@,System.Int32@,System.String@)" />
- <Member Name="GetFuncDesc(System.Int32,System.IntPtr@)" />
- <Member Name="GetIDsOfNames(System.String[],System.Int32,System.Int32[])" />
- <Member Name="GetImplTypeFlags(System.Int32,System.Runtime.InteropServices.ComTypes.IMPLTYPEFLAGS@)" />
- <Member Name="GetMops(System.Int32,System.String@)" />
- <Member Name="GetNames(System.Int32,System.String[],System.Int32,System.Int32@)" />
- <Member Name="GetRefTypeInfo(System.Int32,System.Runtime.InteropServices.ComTypes.ITypeInfo@)" />
- <Member Name="GetRefTypeOfImplType(System.Int32,System.Int32@)" />
- <Member Name="GetTypeAttr(System.IntPtr@)" />
- <Member Name="GetTypeComp(System.Runtime.InteropServices.ComTypes.ITypeComp@)" />
- <Member Name="GetVarDesc(System.Int32,System.IntPtr@)" />
- <Member Name="Invoke(System.Object,System.Int32,System.Int16,System.Runtime.InteropServices.ComTypes.DISPPARAMS@,System.IntPtr,System.IntPtr,System.Int32@)" />
- <Member Name="ReleaseFuncDesc(System.IntPtr)" />
- <Member Name="ReleaseTypeAttr(System.IntPtr)" />
- <Member Name="ReleaseVarDesc(System.IntPtr)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.ITypeInfo2">
- <Member Name="AddressOfMember(System.Int32,System.Runtime.InteropServices.ComTypes.INVOKEKIND,System.IntPtr@)" />
- <Member Name="CreateInstance(System.Object,System.Guid@,System.Object@)" />
- <Member Name="GetAllCustData(System.IntPtr)" />
- <Member Name="GetAllFuncCustData(System.Int32,System.IntPtr)" />
- <Member Name="GetAllImplTypeCustData(System.Int32,System.IntPtr)" />
- <Member Name="GetAllParamCustData(System.Int32,System.Int32,System.IntPtr)" />
- <Member Name="GetAllVarCustData(System.Int32,System.IntPtr)" />
- <Member Name="GetContainingTypeLib(System.Runtime.InteropServices.ComTypes.ITypeLib@,System.Int32@)" />
- <Member Name="GetCustData(System.Guid@,System.Object@)" />
- <Member Name="GetDllEntry(System.Int32,System.Runtime.InteropServices.ComTypes.INVOKEKIND,System.IntPtr,System.IntPtr,System.IntPtr)" />
- <Member Name="GetDocumentation(System.Int32,System.String@,System.String@,System.Int32@,System.String@)" />
- <Member Name="GetDocumentation2(System.Int32,System.String@,System.Int32@,System.String@)" />
- <Member Name="GetFuncCustData(System.Int32,System.Guid@,System.Object@)" />
- <Member Name="GetFuncDesc(System.Int32,System.IntPtr@)" />
- <Member Name="GetFuncIndexOfMemId(System.Int32,System.Runtime.InteropServices.ComTypes.INVOKEKIND,System.Int32@)" />
- <Member Name="GetIDsOfNames(System.String[],System.Int32,System.Int32[])" />
- <Member Name="GetImplTypeCustData(System.Int32,System.Guid@,System.Object@)" />
- <Member Name="GetImplTypeFlags(System.Int32,System.Runtime.InteropServices.ComTypes.IMPLTYPEFLAGS@)" />
- <Member Name="GetMops(System.Int32,System.String@)" />
- <Member Name="GetNames(System.Int32,System.String[],System.Int32,System.Int32@)" />
- <Member Name="GetParamCustData(System.Int32,System.Int32,System.Guid@,System.Object@)" />
- <Member Name="GetRefTypeInfo(System.Int32,System.Runtime.InteropServices.ComTypes.ITypeInfo@)" />
- <Member Name="GetRefTypeOfImplType(System.Int32,System.Int32@)" />
- <Member Name="GetTypeAttr(System.IntPtr@)" />
- <Member Name="GetTypeComp(System.Runtime.InteropServices.ComTypes.ITypeComp@)" />
- <Member Name="GetTypeFlags(System.Int32@)" />
- <Member Name="GetTypeKind(System.Runtime.InteropServices.ComTypes.TYPEKIND@)" />
- <Member Name="GetVarCustData(System.Int32,System.Guid@,System.Object@)" />
- <Member Name="GetVarDesc(System.Int32,System.IntPtr@)" />
- <Member Name="GetVarIndexOfMemId(System.Int32,System.Int32@)" />
- <Member Name="Invoke(System.Object,System.Int32,System.Int16,System.Runtime.InteropServices.ComTypes.DISPPARAMS@,System.IntPtr,System.IntPtr,System.Int32@)" />
- <Member Name="ReleaseFuncDesc(System.IntPtr)" />
- <Member Name="ReleaseTypeAttr(System.IntPtr)" />
- <Member Name="ReleaseVarDesc(System.IntPtr)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.ITypeLib">
- <Member Name="FindName(System.String,System.Int32,System.Runtime.InteropServices.ComTypes.ITypeInfo[],System.Int32[],System.Int16@)" />
- <Member Name="GetDocumentation(System.Int32,System.String@,System.String@,System.Int32@,System.String@)" />
- <Member Name="GetLibAttr(System.IntPtr@)" />
- <Member Name="GetTypeComp(System.Runtime.InteropServices.ComTypes.ITypeComp@)" />
- <Member Name="GetTypeInfo(System.Int32,System.Runtime.InteropServices.ComTypes.ITypeInfo@)" />
- <Member Name="GetTypeInfoCount" />
- <Member Name="GetTypeInfoOfGuid(System.Guid@,System.Runtime.InteropServices.ComTypes.ITypeInfo@)" />
- <Member Name="GetTypeInfoType(System.Int32,System.Runtime.InteropServices.ComTypes.TYPEKIND@)" />
- <Member Name="IsName(System.String,System.Int32)" />
- <Member Name="ReleaseTLibAttr(System.IntPtr)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.ITypeLib2">
- <Member Name="FindName(System.String,System.Int32,System.Runtime.InteropServices.ComTypes.ITypeInfo[],System.Int32[],System.Int16@)" />
- <Member Name="GetAllCustData(System.IntPtr)" />
- <Member Name="GetCustData(System.Guid@,System.Object@)" />
- <Member Name="GetDocumentation(System.Int32,System.String@,System.String@,System.Int32@,System.String@)" />
- <Member Name="GetDocumentation2(System.Int32,System.String@,System.Int32@,System.String@)" />
- <Member Name="GetLibAttr(System.IntPtr@)" />
- <Member Name="GetLibStatistics(System.IntPtr,System.Int32@)" />
- <Member Name="GetTypeComp(System.Runtime.InteropServices.ComTypes.ITypeComp@)" />
- <Member Name="GetTypeInfo(System.Int32,System.Runtime.InteropServices.ComTypes.ITypeInfo@)" />
- <Member Name="GetTypeInfoCount" />
- <Member Name="GetTypeInfoOfGuid(System.Guid@,System.Runtime.InteropServices.ComTypes.ITypeInfo@)" />
- <Member Name="GetTypeInfoType(System.Int32,System.Runtime.InteropServices.ComTypes.TYPEKIND@)" />
- <Member Name="IsName(System.String,System.Int32)" />
- <Member Name="ReleaseTLibAttr(System.IntPtr)" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.LIBFLAGS">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="LIBFLAG_FCONTROL" />
- <Member MemberType="Field" Name="LIBFLAG_FHASDISKIMAGE" />
- <Member MemberType="Field" Name="LIBFLAG_FHIDDEN" />
- <Member MemberType="Field" Name="LIBFLAG_FRESTRICTED" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.PARAMDESC">
- <Member MemberType="Field" Name="lpVarValue" />
- <Member MemberType="Field" Name="wParamFlags" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.PARAMFLAG">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="PARAMFLAG_FHASCUSTDATA" />
- <Member MemberType="Field" Name="PARAMFLAG_FHASDEFAULT" />
- <Member MemberType="Field" Name="PARAMFLAG_FIN" />
- <Member MemberType="Field" Name="PARAMFLAG_FLCID" />
- <Member MemberType="Field" Name="PARAMFLAG_FOPT" />
- <Member MemberType="Field" Name="PARAMFLAG_FOUT" />
- <Member MemberType="Field" Name="PARAMFLAG_FRETVAL" />
- <Member MemberType="Field" Name="PARAMFLAG_NONE" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.SYSKIND">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="SYS_MAC" />
- <Member MemberType="Field" Name="SYS_WIN16" />
- <Member MemberType="Field" Name="SYS_WIN32" />
- <Member MemberType="Field" Name="SYS_WIN64" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.TYPEATTR">
- <Member MemberType="Field" Name="guid" />
- <Member MemberType="Field" Name="cbAlignment" />
- <Member MemberType="Field" Name="cbSizeVft" />
- <Member MemberType="Field" Name="cFuncs" />
- <Member MemberType="Field" Name="cImplTypes" />
- <Member MemberType="Field" Name="cVars" />
- <Member MemberType="Field" Name="wMajorVerNum" />
- <Member MemberType="Field" Name="wMinorVerNum" />
- <Member MemberType="Field" Name="cbSizeInstance" />
- <Member MemberType="Field" Name="dwReserved" />
- <Member MemberType="Field" Name="lcid" />
- <Member MemberType="Field" Name="MEMBER_ID_NIL" />
- <Member MemberType="Field" Name="memidConstructor" />
- <Member MemberType="Field" Name="memidDestructor" />
- <Member MemberType="Field" Name="lpstrSchema" />
- <Member MemberType="Field" Name="idldescType" />
- <Member MemberType="Field" Name="tdescAlias" />
- <Member MemberType="Field" Name="wTypeFlags" />
- <Member MemberType="Field" Name="typekind" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.TYPEDESC">
- <Member MemberType="Field" Name="vt" />
- <Member MemberType="Field" Name="lpValue" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.TYPEFLAGS">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="TYPEFLAG_FAGGREGATABLE" />
- <Member MemberType="Field" Name="TYPEFLAG_FAPPOBJECT" />
- <Member MemberType="Field" Name="TYPEFLAG_FCANCREATE" />
- <Member MemberType="Field" Name="TYPEFLAG_FCONTROL" />
- <Member MemberType="Field" Name="TYPEFLAG_FDISPATCHABLE" />
- <Member MemberType="Field" Name="TYPEFLAG_FDUAL" />
- <Member MemberType="Field" Name="TYPEFLAG_FHIDDEN" />
- <Member MemberType="Field" Name="TYPEFLAG_FLICENSED" />
- <Member MemberType="Field" Name="TYPEFLAG_FNONEXTENSIBLE" />
- <Member MemberType="Field" Name="TYPEFLAG_FOLEAUTOMATION" />
- <Member MemberType="Field" Name="TYPEFLAG_FPREDECLID" />
- <Member MemberType="Field" Name="TYPEFLAG_FPROXY" />
- <Member MemberType="Field" Name="TYPEFLAG_FREPLACEABLE" />
- <Member MemberType="Field" Name="TYPEFLAG_FRESTRICTED" />
- <Member MemberType="Field" Name="TYPEFLAG_FREVERSEBIND" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.TYPEKIND">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="TKIND_ALIAS" />
- <Member MemberType="Field" Name="TKIND_COCLASS" />
- <Member MemberType="Field" Name="TKIND_DISPATCH" />
- <Member MemberType="Field" Name="TKIND_ENUM" />
- <Member MemberType="Field" Name="TKIND_INTERFACE" />
- <Member MemberType="Field" Name="TKIND_MAX" />
- <Member MemberType="Field" Name="TKIND_MODULE" />
- <Member MemberType="Field" Name="TKIND_RECORD" />
- <Member MemberType="Field" Name="TKIND_UNION" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.TYPELIBATTR">
- <Member MemberType="Field" Name="guid" />
- <Member MemberType="Field" Name="wMajorVerNum" />
- <Member MemberType="Field" Name="wMinorVerNum" />
- <Member MemberType="Field" Name="lcid" />
- <Member MemberType="Field" Name="wLibFlags" />
- <Member MemberType="Field" Name="syskind" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.VARDESC">
- <Member MemberType="Field" Name="desc" />
- <Member MemberType="Field" Name="wVarFlags" />
- <Member MemberType="Field" Name="memid" />
- <Member MemberType="Field" Name="elemdescVar" />
- <Member MemberType="Field" Name="varkind" />
- <Member MemberType="Field" Name="lpstrSchema" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.VARDESC+DESCUNION">
- <Member MemberType="Field" Name="oInst" />
- <Member MemberType="Field" Name="lpvarValue" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.VARFLAGS">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="VARFLAG_FBINDABLE" />
- <Member MemberType="Field" Name="VARFLAG_FDEFAULTBIND" />
- <Member MemberType="Field" Name="VARFLAG_FDEFAULTCOLLELEM" />
- <Member MemberType="Field" Name="VARFLAG_FDISPLAYBIND" />
- <Member MemberType="Field" Name="VARFLAG_FHIDDEN" />
- <Member MemberType="Field" Name="VARFLAG_FIMMEDIATEBIND" />
- <Member MemberType="Field" Name="VARFLAG_FNONBROWSABLE" />
- <Member MemberType="Field" Name="VARFLAG_FREADONLY" />
- <Member MemberType="Field" Name="VARFLAG_FREPLACEABLE" />
- <Member MemberType="Field" Name="VARFLAG_FREQUESTEDIT" />
- <Member MemberType="Field" Name="VARFLAG_FRESTRICTED" />
- <Member MemberType="Field" Name="VARFLAG_FSOURCE" />
- <Member MemberType="Field" Name="VARFLAG_FUIDEFAULT" />
- </Type>
- <Type Name="System.Runtime.InteropServices.ComTypes.VARKIND">
- <Member MemberType="Field" Name="value__" />
- <Member MemberType="Field" Name="VAR_CONST" />
- <Member MemberType="Field" Name="VAR_DISPATCH" />
- <Member MemberType="Field" Name="VAR_PERINSTANCE" />
- <Member MemberType="Field" Name="VAR_STATIC" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.StubHelpers">
- <Member Name="ClearLastError" />
- <Member Name="SetLastError" />
- <Member Name="IsQCall(System.IntPtr)" />
- <Member Name="InitDeclaringType(System.IntPtr)" />
- <Member Name="GetNDirectTarget(System.IntPtr)" />
- <Member Name="GetDelegateTarget(System.Delegate,System.IntPtr@)" />
- <Member Name="ThrowInteropParamException(System.Int32,System.Int32)" />
- <Member Name="AddToCleanupList(System.StubHelpers.CleanupWorkList@,System.Runtime.InteropServices.SafeHandle)" />
- <Member Name="DestroyCleanupList(System.StubHelpers.CleanupWorkList@)" />
- <Member Name="GetHRExceptionObject(System.Int32)" />
- <Member Name="CreateCustomMarshalerHelper(System.IntPtr,System.Int32,System.IntPtr)" />
- <Member Name="CheckStringLength(System.Int32)" />
- <Member Name="DecimalCanonicalizeInternal(System.Decimal@)" />
- <Member Name="FmtClassUpdateNativeInternal(System.Object,System.Byte*,System.StubHelpers.CleanupWorkList@)" />
- <Member Name="FmtClassUpdateCLRInternal(System.Object,System.Byte*)" />
- <Member Name="LayoutDestroyNativeInternal(System.Byte*,System.IntPtr)" />
- <Member Name="AllocateInternal(System.IntPtr)" />
- <Member Name="strlen(System.SByte*)" />
- <Member Name="MarshalToManagedVaListInternal(System.IntPtr,System.IntPtr)" />
- <Member Name="MarshalToUnmanagedVaListInternal(System.IntPtr,System.UInt32,System.IntPtr)" />
- <Member Name="CalcVaListSize(System.IntPtr)" />
- <Member Name="ProfilerBeginTransitionCallback(System.IntPtr,System.IntPtr,System.Object)" /> <!-- EE -->
- <Member Name="ProfilerEndTransitionCallback(System.IntPtr,System.IntPtr)" /> <!-- EE -->
- <Member Name="SafeHandleAddRef(System.Runtime.InteropServices.SafeHandle,System.Boolean@)" />
- <Member Name="SafeHandleRelease(System.Runtime.InteropServices.SafeHandle)" />
- <Member Name="ValidateObject(System.Object,System.IntPtr,System.Object)" />
- <Member Name="ValidateByref(System.IntPtr,System.IntPtr,System.Object)" />
- <Member Name="LogPinnedArgument(System.IntPtr,System.IntPtr)" />
- <Member Name="GetStubContext" />
- <Member Name="GetStubContextAddr" Architecture="amd64" />
- <Member Name="GetStubContextAddr" Architecture="arm64" />
- <Member Name="ArrayTypeCheck(System.Object,System.Object[])" Condition="FEATURE_ARRAYSTUB_AS_IL" />
- <Member Name="MulticastDebuggerTraceHelper(System.Object,System.Int32)" Condition="FEATURE_STUBS_AS_IL" />
- <Member Name="GetCOMHRExceptionObject(System.Int32,System.IntPtr,System.Object)" Condition="FEATURE_COMINTEROP" />
- <Member Name="GetCOMHRExceptionObject_WinRT(System.Int32,System.IntPtr,System.Object)" Condition="FEATURE_COMINTEROP" />
- <Member Name="GetCOMIPFromRCW(System.Object,System.IntPtr,System.IntPtr@,System.Boolean@)" Condition="FEATURE_COMINTEROP" />
- <Member Name="GetCOMIPFromRCW_WinRT(System.Object,System.IntPtr,System.IntPtr@)" Condition="FEATURE_COMINTEROP" />
- <Member Name="GetCOMIPFromRCW_WinRTSharedGeneric(System.Object,System.IntPtr,System.IntPtr@)" Condition="FEATURE_COMINTEROP" />
- <Member Name="GetCOMIPFromRCW_WinRTDelegate(System.Object,System.IntPtr,System.IntPtr@)" Condition="FEATURE_COMINTEROP" />
- <Member Name="ShouldCallWinRTInterface(System.Object,System.IntPtr)" Condition="FEATURE_COMINTEROP" />
- <Member Name="StubRegisterRCW(System.Object)" Condition="FEATURE_COMINTEROP" />
- <Member Name="StubUnregisterRCW(System.Object)" Condition="FEATURE_COMINTEROP" />
- <Member Name="GetDelegateInvokeMethod(System.Delegate)" Condition="FEATURE_COMINTEROP" />
- <Member Name="GetWinRTFactoryObject(System.IntPtr)" Condition="FEATURE_COMINTEROP" />
- <Member Name="GetWinRTFactoryReturnValue(System.Object,System.IntPtr)" Condition="FEATURE_COMINTEROP" />
- <Member Name="GetOuterInspectable(System.Object,System.IntPtr)" Condition="FEATURE_COMINTEROP" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.AnsiCharMarshaler">
- <Member Name="ConvertToNative(System.Char,System.Boolean,System.Boolean)" />
- <Member Name="ConvertToManaged(System.Byte)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.AnsiBSTRMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="ConvertToNative(System.Int32,System.String)" />
- <Member Name="ConvertToManaged(System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.BSTRMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="ConvertToNative(System.String,System.IntPtr)" />
- <Member Name="ConvertToManaged(System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.CSTRMarshaler">
- <Member Name="ConvertToNative(System.Int32,System.String,System.IntPtr)" />
- <Member Name="ConvertToManaged(System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.UTF8Marshaler">
- <Member Name="ConvertToNative(System.Int32,System.String,System.IntPtr)" />
- <Member Name="ConvertToManaged(System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.UTF8BufferMarshaler">
- <Member Name="ConvertToNative(System.Text.StringBuilder,System.IntPtr,System.Int32)" />
- <Member Name="ConvertToManaged(System.Text.StringBuilder,System.IntPtr)" />
- </Type>
- <Type Status="ApiFxInternal" Name="System.StubHelpers.EventArgsMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="CreateNativeNCCEventArgsInstance(System.Int32,System.Object,System.Object,System.Int32,System.Int32)"/>
- <Member Name="CreateNativePCEventArgsInstance(System.String)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.HResultExceptionMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="ConvertToNative(System.Exception)" />
- <Member Name="ConvertToManaged(System.Int32)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.KeyValuePairMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="ConvertToNative&lt;K,V&gt;(System.Collections.Generic.KeyValuePair&lt;K,V&gt;@)" />
- <Member Name="ConvertToManaged&lt;K,V&gt;(System.IntPtr)" />
- <Member Name="ConvertToManagedBox&lt;K,V&gt;(System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.MngdSafeArrayMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="CreateMarshaler(System.IntPtr,System.IntPtr,System.Int32,System.Int32)" />
- <Member Name="ConvertSpaceToNative(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ConvertContentsToNative(System.IntPtr,System.Object@,System.IntPtr,System.Object)" />
- <Member Name="ConvertSpaceToManaged(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ConvertContentsToManaged(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr,System.Object@,System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.MngdHiddenLengthArrayMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="CreateMarshaler(System.IntPtr,System.IntPtr,System.IntPtr,System.UInt16)" />
- <Member Name="ConvertSpaceToManaged(System.IntPtr,System.Object@,System.IntPtr,System.Int32)" />
- <Member Name="ConvertContentsToManaged(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ConvertSpaceToNative(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ConvertContentsToNative(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ClearNativeContents(System.IntPtr,System.IntPtr,System.Int32)" />
- <Member Name="ClearNativeContents_Type(System.IntPtr,System.Int32)" />
- <Member Name="ConvertContentsToManaged_DateTime(System.DateTimeOffset[]@,System.IntPtr)" />
- <Member Name="ConvertContentsToManaged_Type(System.Type[]@,System.IntPtr)" />
- <Member Name="ConvertContentsToManaged_Exception(System.Exception[]@,System.IntPtr)" />
- <Member Name="ConvertContentsToManaged_Nullable&lt;T&gt;(System.Nullable&lt;T&gt;[]@,System.IntPtr)" />
- <Member Name="ConvertContentsToManaged_KeyValuePair&lt;K,V&gt;(System.Collections.Generic.KeyValuePair&lt;K,V&gt;[]@,System.IntPtr)" />
- <Member Name="ConvertContentsToNative_DateTime(System.DateTimeOffset[]@,System.IntPtr)" />
- <Member Name="ConvertContentsToNative_Type(System.Type[]@,System.IntPtr)" />
- <Member Name="ConvertContentsToNative_Exception(System.Exception[]@,System.IntPtr)" />
- <Member Name="ConvertContentsToNative_Nullable&lt;T&gt;(System.Nullable&lt;T&gt;[]@,System.IntPtr)" />
- <Member Name="ConvertContentsToNative_KeyValuePair&lt;K,V&gt;(System.Collections.Generic.KeyValuePair&lt;K,V&gt;[]@,System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.NullableMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="ConvertToNative&lt;T&gt;(System.Nullable&lt;T&gt;@)" />
- <Member Name="ConvertToManaged&lt;T&gt;(System.IntPtr)" />
- <Member Name="ConvertToManagedRetVoid&lt;T&gt;(System.IntPtr,System.Nullable&lt;T&gt;@)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.WSTRBufferMarshaler">
- <Member Name="ConvertToNative(System.String)" />
- <Member Name="ConvertToManaged(System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.ValueClassMarshaler">
- <Member Name="ConvertToNative(System.IntPtr,System.IntPtr,System.IntPtr,System.StubHelpers.CleanupWorkList@)" />
- <Member Name="ConvertToManaged(System.IntPtr,System.IntPtr,System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr,System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.DateMarshaler">
- <Member Name="ConvertToNative(System.DateTime)" />
- <Member Name="ConvertToManaged(System.Double)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.DateTimeOffsetMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="ConvertToNative(System.DateTimeOffset@,System.StubHelpers.DateTimeNative@)"/>
- <Member Name="ConvertToManaged(System.DateTimeOffset@,System.StubHelpers.DateTimeNative@)"/>
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.HStringMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="ConvertToNative(System.String)"/>
- <Member Name="ConvertToNativeReference(System.String,System.Runtime.InteropServices.WindowsRuntime.HSTRING_HEADER*)"/>
- <Member Name="ConvertToManaged(System.IntPtr)"/>
- <Member Name="ClearNative(System.IntPtr)"/>
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.ObjectMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="ConvertToNative(System.Object,System.IntPtr)"/>
- <Member Name="ConvertToManaged(System.IntPtr)"/>
- <Member Name="ClearNative(System.IntPtr)"/>
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.InterfaceMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="ConvertToNative(System.Object,System.IntPtr,System.IntPtr,System.Int32)"/>
- <Member Name="ConvertToManaged(System.IntPtr,System.IntPtr,System.IntPtr,System.Int32)"/>
- <Member Name="ClearNative(System.IntPtr)"/>
- <Member Name="ConvertToManagedWithoutUnboxing(System.IntPtr)"/>
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.UriMarshaler" Condition="FEATURE_COMINTEROP">
- <Member Name="GetRawUriFromNative(System.IntPtr)"/>
- <Member Name="CreateNativeUriInstance(System.String)"/>
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.VBByValStrMarshaler">
- <Member Name="ConvertToNative(System.String,System.Boolean,System.Boolean,System.Int32@)" />
- <Member Name="ConvertToManaged(System.IntPtr,System.Int32)" />
- <Member Name="ClearNative(System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.MngdNativeArrayMarshaler">
- <Member Name="CreateMarshaler(System.IntPtr,System.IntPtr,System.Int32)" />
- <Member Name="ConvertSpaceToNative(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ConvertContentsToNative(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ConvertSpaceToManaged(System.IntPtr,System.Object@,System.IntPtr,System.Int32)" />
- <Member Name="ConvertContentsToManaged(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr,System.IntPtr,System.Int32)" />
- <Member Name="ClearNativeContents(System.IntPtr,System.IntPtr,System.Int32)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.MngdRefCustomMarshaler">
- <Member Name="CreateMarshaler(System.IntPtr,System.IntPtr)" />
- <Member Name="ConvertContentsToNative(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ConvertContentsToManaged(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr,System.Object@,System.IntPtr)" />
- <Member Name="ClearManaged(System.IntPtr,System.Object@,System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.AsAnyMarshaler">
- <Member Name="#ctor(System.IntPtr)" />
- <Member Name="ConvertToNative(System.Object,System.Int32)" />
- <Member Name="ConvertToManaged(System.Object,System.IntPtr)" />
- <Member Name="ClearNative(System.IntPtr)" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.NativeVariant" />
- <Type Status="ImplRoot" Name="Microsoft.Win32.Win32Native+OSVERSIONINFOEX">
- <Member MemberType="Field" Name="OSVersionInfoSize" />
- <Member MemberType="Field" Name="MajorVersion" />
- <Member MemberType="Field" Name="MinorVersion" />
- <Member MemberType="Field" Name="BuildNumber" />
- <Member MemberType="Field" Name="PlatformId" />
- <Member MemberType="Field" Name="CSDVersion" />
- <Member MemberType="Field" Name="ServicePackMajor" />
- <Member MemberType="Field" Name="ServicePackMinor" />
- <Member MemberType="Field" Name="SuiteMask" />
- <Member MemberType="Field" Name="ProductType" />
- <Member MemberType="Field" Name="Reserved" />
- <Member Name="#ctor" />
- </Type>
- <Type Status="ImplRoot" Name="System.StubHelpers.TypeNameNative" Condition="FEATURE_COMINTEROP">
- <Member MemberType="Field" Name="typeName" />
- <Member MemberType="Field" Name="typeKind" />
- </Type>
- <Type Status="ImplRoot" Name="Microsoft.Win32.Win32Native+WIN32_FIND_DATA">
- <Member MemberType="Field" Name="cFileName" />
- <Member MemberType="Field" Name="dwFileAttributes" />
- <Member MemberType="Field" Name="dwReserved0" />
- <Member MemberType="Field" Name="dwReserved1" />
- <Member MemberType="Field" Name="ftCreationTime_dwHighDateTime" />
- <Member MemberType="Field" Name="ftCreationTime_dwLowDateTime" />
- <Member MemberType="Field" Name="ftLastAccessTime_dwHighDateTime" />
- <Member MemberType="Field" Name="ftLastAccessTime_dwLowDateTime" />
- <Member MemberType="Field" Name="ftLastWriteTime_dwHighDateTime" />
- <Member MemberType="Field" Name="ftLastWriteTime_dwLowDateTime" />
- <Member MemberType="Field" Name="nFileSizeHigh" />
- <Member MemberType="Field" Name="nFileSizeLow" />
- <Member MemberType="Field" Name="cAlternateFileName" />
- <Member Name="#ctor" />
- </Type>
- <!-- PFX Types -->
- <!-- System.Threading.Tasks namespace -->
- <Type Name="System.Threading.Tasks.TaskScheduler">
- <Member Name="#ctor" />
- <Member Name="TryExecuteTaskInline(System.Threading.Tasks.Task,System.Boolean)" />
- <Member Name="TryExecuteTask(System.Threading.Tasks.Task)" />
- <Member Name="get_MaximumConcurrencyLevel" />
- <Member Name="get_Default" />
- <Member Name="get_Current" />
- <Member Name="get_Id" />
- <Member Name="QueueTask(System.Threading.Tasks.Task)" />
- <Member Name="TryDequeue(System.Threading.Tasks.Task)" />
- <Member Name="GetScheduledTasks" />
- <Member Name="FromCurrentSynchronizationContext" />
- <Member Status="ImplRoot" Name="GetTaskSchedulersForDebugger" />
- <Member Status="ImplRoot" Name="GetScheduledTasksForDebugger" />
- <Member MemberType="Event" Name="UnobservedTaskException" />
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.Tasks.TaskScheduler+SystemThreadingTasks_TaskSchedulerDebugView">
- <Member Status="ImplRoot" Name="#ctor(System.Threading.Tasks.TaskScheduler)" />
- <Member Status="ImplRoot" Name="get_ScheduledTasks" />
- <Member Status="ImplRoot" Name="get_Id" />
- </Type>
- <Type Name="System.Threading.Tasks.TaskSchedulerException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Exception)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Threading.Tasks.Task">
- <Member Name="#ctor(System.Action)" />
- <Member Name="#ctor(System.Action,System.Threading.CancellationToken)" />
- <Member Name="#ctor(System.Action&lt;System.Object&gt;,System.Object)" />
- <Member Name="#ctor(System.Action,System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="#ctor(System.Action&lt;System.Object&gt;,System.Object,System.Threading.CancellationToken)" />
- <Member Name="#ctor(System.Action,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="#ctor(System.Action&lt;System.Object&gt;,System.Object,System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="#ctor(System.Action&lt;System.Object&gt;,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&gt;)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&gt;,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task,System.Object&gt;,System.Object)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task,System.Object&gt;,System.Object,System.Threading.CancellationToken)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task,System.Object&gt;,System.Object,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task,System.Object&gt;,System.Object,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task,System.Object&gt;,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,TResult&gt;)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,System.Object,TResult&gt;,System.Object)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,System.Object,TResult&gt;,System.Object,System.Threading.CancellationToken)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,System.Object,TResult&gt;,System.Object,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,System.Object,TResult&gt;,System.Object,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task,System.Object,TResult&gt;,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="FromResult&lt;TResult&gt;(TResult)" />
- <Member Name="FromException(System.Exception)" />
- <Member Name="FromException&lt;TResult&gt;(System.Exception)" />
- <Member Name="FromCanceled(System.Threading.CancellationToken)" />
- <Member Name="FromCanceled&lt;TResult&gt;(System.Threading.CancellationToken)" />
- <Member Status="ApiFxInternal" Name="FromCancellation(System.Threading.CancellationToken)" />
- <Member Status="ApiFxInternal" Name="FromCancellation&lt;TResult&gt;(System.Threading.CancellationToken)" />
- <Member Name="Run(System.Action)" />
- <Member Name="Run(System.Action,System.Threading.CancellationToken)" />
- <Member Name="Run&lt;TResult&gt;(System.Func&lt;TResult&gt;)" />
- <Member Name="Run&lt;TResult&gt;(System.Func&lt;TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="Run(System.Func&lt;System.Threading.Tasks.Task&gt;)" />
- <Member Name="Run(System.Func&lt;System.Threading.Tasks.Task&gt;,System.Threading.CancellationToken)" />
- <Member Name="Run&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;&gt;)" />
- <Member Name="Run&lt;TResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;&gt;,System.Threading.CancellationToken)" />
- <Member Name="Delay(System.TimeSpan)" />
- <Member Name="Delay(System.TimeSpan,System.Threading.CancellationToken)" />
- <Member Name="Delay(System.Int32)" />
- <Member Name="Delay(System.Int32,System.Threading.CancellationToken)" />
- <Member Name="WhenAll(System.Collections.Generic.IEnumerable&lt;System.Threading.Tasks.Task&gt;)" />
- <Member Name="WhenAll(System.Threading.Tasks.Task[])" />
- <Member Name="WhenAll&lt;TResult&gt;(System.Collections.Generic.IEnumerable&lt;System.Threading.Tasks.Task&lt;TResult&gt;&gt;)" />
- <Member Name="WhenAll&lt;TResult&gt;(System.Threading.Tasks.Task&lt;TResult&gt;[])" />
- <Member Name="WhenAny(System.Collections.Generic.IEnumerable&lt;System.Threading.Tasks.Task&gt;)" />
- <Member Name="WhenAny(System.Threading.Tasks.Task[])" />
- <Member Name="WhenAny&lt;TResult&gt;(System.Collections.Generic.IEnumerable&lt;System.Threading.Tasks.Task&lt;TResult&gt;&gt;)" />
- <Member Name="WhenAny&lt;TResult&gt;(System.Threading.Tasks.Task&lt;TResult&gt;[])" />
- <Member Name="Dispose" />
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="RunSynchronously" />
- <Member Name="RunSynchronously(System.Threading.Tasks.TaskScheduler)" />
- <Member Name="Start" />
- <Member Name="Start(System.Threading.Tasks.TaskScheduler)" />
- <Member Name="Wait" />
- <Member Name="Wait(System.Int32)" />
- <Member Name="Wait(System.Threading.CancellationToken)" />
- <Member Name="Wait(System.TimeSpan)" />
- <Member Name="Wait(System.Int32,System.Threading.CancellationToken)" />
- <Member Name="WaitAll(System.Threading.Tasks.Task[])" />
- <Member Name="WaitAll(System.Threading.Tasks.Task[],System.Int32)" />
- <Member Name="WaitAll(System.Threading.Tasks.Task[],System.Threading.CancellationToken)" />
- <Member Name="WaitAll(System.Threading.Tasks.Task[],System.TimeSpan)" />
- <Member Name="WaitAll(System.Threading.Tasks.Task[],System.Int32,System.Threading.CancellationToken)" />
- <Member Name="WaitAny(System.Threading.Tasks.Task[])" />
- <Member Name="WaitAny(System.Threading.Tasks.Task[],System.Int32)" />
- <Member Name="WaitAny(System.Threading.Tasks.Task[],System.Threading.CancellationToken)" />
- <Member Name="WaitAny(System.Threading.Tasks.Task[],System.TimeSpan)" />
- <Member Name="WaitAny(System.Threading.Tasks.Task[],System.Int32,System.Threading.CancellationToken)" />
- <Member Name="GetAwaiter" />
- <Member Name="ConfigureAwait(System.Boolean)" />
- <Member Name="Yield" />
- <Member Name="get_AsyncState" />
- <Member Name="get_CompletedTask" />
- <Member Name="get_CreationOptions" />
- <Member Name="get_CurrentId" />
- <Member Name="get_Exception" />
- <Member Name="get_Factory" />
- <Member Name="get_Id" />
- <Member Name="get_IsCanceled" />
- <Member Name="get_IsCompleted" />
- <Member Name="get_IsFaulted" />
- <Member Name="get_Status" />
- <Member Status="ImplRoot" Name="get_DebuggerDisplayMethodDescription" />
- <!--Internal members exposed to be used by Unwrap extension method in System.Core.dll-->
- <Member Status="ImplRoot" Name="CreateUnwrapPromise&lt;TResult&gt;(System.Threading.Tasks.Task,System.Boolean)" />
- <Member Status="ImplRoot" Name="NotifyDebuggerOfWaitCompletion" />
- <Member Status="ImplRoot" Name="SetNotificationForWaitCompletion(System.Boolean)" />
- <!--Internal helper members exposed to be used by VS Debugger-->
- <Member Status="ImplRoot" Name="GetDelegateContinuationsForDebugger" />
- <Member Status="ImplRoot" Name="GetActiveTaskFromId(System.Int32)" />
- <Member Status="ImplRoot" Name="GetActiveTasks" />
- <Member Status="ImplRoot" Name="get_ParentForDebugger" />
- <Member Status="ImplRoot" Name="get_StateFlagsForDebugger" />
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.Tasks.SystemThreadingTasks_TaskDebugView">
- <Member Status="ImplRoot" Name="#ctor(System.Threading.Tasks.Task)" />
- <Member Status="ImplRoot" Name="get_AsyncState" />
- <Member Status="ImplRoot" Name="get_CreationOptions" />
- <Member Status="ImplRoot" Name="get_Exception" />
- <Member Status="ImplRoot" Name="get_Id" />
- <Member Status="ImplRoot" Name="get_Status" />
- <Member Status="ImplRoot" Name="get_CancellationPending" />
- </Type>
- <Type Name="System.Threading.Tasks.Task&lt;TResult&gt;">
- <Member Name="#ctor(System.Func&lt;TResult&gt;)" />
- <Member Name="#ctor(System.Func&lt;TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="#ctor(System.Func&lt;System.Object,TResult&gt;,System.Object)" />
- <Member Name="#ctor(System.Func&lt;TResult&gt;,System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="#ctor(System.Func&lt;System.Object,TResult&gt;,System.Object,System.Threading.CancellationToken)" />
- <Member Name="#ctor(System.Func&lt;TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="#ctor(System.Func&lt;System.Object,TResult&gt;,System.Object,System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="#ctor(System.Func&lt;System.Object,TResult&gt;,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;&gt;)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;&gt;,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object&gt;,System.Object)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object&gt;,System.Object,System.Threading.CancellationToken)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object&gt;,System.Object,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object&gt;,System.Object,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith(System.Action&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object&gt;,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,TNewResult&gt;)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,TNewResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,TNewResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,TNewResult&gt;,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,TNewResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object,TNewResult&gt;,System.Object)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object,TNewResult&gt;,System.Object,System.Threading.CancellationToken)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object,TNewResult&gt;,System.Object,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object,TNewResult&gt;,System.Object,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWith&lt;TNewResult&gt;(System.Func&lt;System.Threading.Tasks.Task&lt;TResult&gt;,System.Object,TNewResult&gt;,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ConfigureAwait(System.Boolean)" />
- <Member Name="GetAwaiter" />
- <Member Name="get_Factory" />
- <Member Name="get_Result" />
- <!-- DebuggerDisplayMethodDescription ysed by the debugger display-->
- <Member Status="ImplRoot" Name="get_DebuggerDisplayMethodDescription" />
- <Member Status="ImplRoot" Name="get_DebuggerDisplayResultDescription" />
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.Tasks.SystemThreadingTasks_FutureDebugView&lt;TResult&gt;">
- <Member Status="ImplRoot" Name="#ctor(System.Threading.Tasks.Task&lt;TResult&gt;)" />
- <Member Status="ImplRoot" Name="get_AsyncState" />
- <Member Status="ImplRoot" Name="get_CreationOptions" />
- <Member Status="ImplRoot" Name="get_Exception" />
- <Member Status="ImplRoot" Name="get_Id" />
- <Member Status="ImplRoot" Name="get_Status" />
- <Member Status="ImplRoot" Name="get_Result" />
- <Member Status="ImplRoot" Name="get_CancellationPending" />
- </Type>
- <Type Name="System.Threading.Tasks.VoidTaskResult"/>
- <Type Name="System.Threading.Tasks.TaskCanceledException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Threading.Tasks.Task)" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_Task" />
- </Type>
- <Type Name="System.Threading.Tasks.TaskCompletionSource&lt;TResult&gt;">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Object)" />
- <Member Name="#ctor(System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="#ctor(System.Object,System.Threading.Tasks.TaskCreationOptions)" />
- <Member Name="SetCanceled" />
- <Member Name="SetException(System.Exception)" />
- <Member Name="SetException(System.Collections.Generic.IEnumerable&lt;System.Exception&gt;)" />
- <Member Name="SetResult(TResult)" />
- <Member Name="TrySetCanceled" />
- <Member Name="TrySetCanceled(System.Threading.CancellationToken)" />
- <Member Name="TrySetException(System.Exception)" />
- <Member Name="TrySetException(System.Collections.Generic.IEnumerable&lt;System.Exception&gt;)" />
- <Member Name="TrySetResult(TResult)" />
- <Member Name="get_Task" />
- </Type>
- <Type Name="System.Threading.Tasks.TaskFactory">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Threading.CancellationToken)" />
- <Member Name="#ctor(System.Threading.Tasks.TaskScheduler)" />
- <Member Name="#ctor(System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="#ctor(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAll(System.Threading.Tasks.Task[],System.Action&lt;System.Threading.Tasks.Task[]&gt;)" />
- <Member Name="ContinueWhenAll(System.Threading.Tasks.Task[],System.Action&lt;System.Threading.Tasks.Task[]&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAll(System.Threading.Tasks.Task[],System.Action&lt;System.Threading.Tasks.Task[]&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAll(System.Threading.Tasks.Task[],System.Action&lt;System.Threading.Tasks.Task[]&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAll&lt;TResult&gt;(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task[],TResult&gt;)" />
- <Member Name="ContinueWhenAll&lt;TResult&gt;(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task[],TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAll&lt;TResult&gt;(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task[],TResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAll&lt;TResult&gt;(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task[],TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Action&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[]&gt;)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Action&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[]&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Action&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[]&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Action&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[]&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult,TResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],TResult&gt;)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult,TResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult,TResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],TResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult,TResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAny(System.Threading.Tasks.Task[],System.Action&lt;System.Threading.Tasks.Task&gt;)" />
- <Member Name="ContinueWhenAny(System.Threading.Tasks.Task[],System.Action&lt;System.Threading.Tasks.Task&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAny(System.Threading.Tasks.Task[],System.Action&lt;System.Threading.Tasks.Task&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAny(System.Threading.Tasks.Task[],System.Action&lt;System.Threading.Tasks.Task&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAny&lt;TResult&gt;(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task,TResult&gt;)" />
- <Member Name="ContinueWhenAny&lt;TResult&gt;(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAny&lt;TResult&gt;(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAny&lt;TResult&gt;(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Action&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;&gt;)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Action&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Action&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Action&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult,TResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;,TResult&gt;)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult,TResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;,TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult,TResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;,TResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult,TResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;,TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="FromAsync(System.IAsyncResult,System.Action&lt;System.IAsyncResult&gt;)"/>
- <Member Name="FromAsync(System.IAsyncResult,System.Action&lt;System.IAsyncResult&gt;,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync(System.IAsyncResult,System.Action&lt;System.IAsyncResult&gt;,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)"/>
- <Member Name="FromAsync&lt;TResult&gt;(System.IAsyncResult,System.Func&lt;System.IAsyncResult,TResult&gt;)"/>
- <Member Name="FromAsync&lt;TResult&gt;(System.IAsyncResult,System.Func&lt;System.IAsyncResult,TResult&gt;,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TResult&gt;(System.IAsyncResult,System.Func&lt;System.IAsyncResult,TResult&gt;,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)"/>
- <Member Name="FromAsync(System.Func&lt;System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Action&lt;System.IAsyncResult&gt;,System.Object)"/>
- <Member Name="FromAsync(System.Func&lt;System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Action&lt;System.IAsyncResult&gt;,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TResult&gt;(System.Func&lt;System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,System.Object)"/>
- <Member Name="FromAsync&lt;TResult&gt;(System.Func&lt;System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TArg1&gt;(System.Func&lt;TArg1,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Action&lt;System.IAsyncResult&gt;,TArg1,System.Object)"/>
- <Member Name="FromAsync&lt;TArg1&gt;(System.Func&lt;TArg1,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Action&lt;System.IAsyncResult&gt;,TArg1,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TArg1,TResult&gt;(System.Func&lt;TArg1,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,System.Object)"/>
- <Member Name="FromAsync&lt;TArg1,TResult&gt;(System.Func&lt;TArg1,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2&gt;(System.Func&lt;TArg1,TArg2,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Action&lt;System.IAsyncResult&gt;,TArg1,TArg2,System.Object)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2&gt;(System.Func&lt;TArg1,TArg2,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Action&lt;System.IAsyncResult&gt;,TArg1,TArg2,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2,TResult&gt;(System.Func&lt;TArg1,TArg2,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,TArg2,System.Object)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2,TResult&gt;(System.Func&lt;TArg1,TArg2,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,TArg2,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2,TArg3&gt;(System.Func&lt;TArg1,TArg2,TArg3,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Action&lt;System.IAsyncResult&gt;,TArg1,TArg2,TArg3,System.Object)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2,TArg3&gt;(System.Func&lt;TArg1,TArg2,TArg3,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Action&lt;System.IAsyncResult&gt;,TArg1,TArg2,TArg3,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2,TArg3,TResult&gt;(System.Func&lt;TArg1,TArg2,TArg3,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,TArg2,TArg3,System.Object)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2,TArg3,TResult&gt;(System.Func&lt;TArg1,TArg2,TArg3,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,TArg2,TArg3,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="StartNew(System.Action)"/>
- <Member Name="StartNew(System.Action,System.Threading.CancellationToken)"/>
- <Member Name="StartNew(System.Action,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="StartNew(System.Action,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)"/>
- <Member Name="StartNew(System.Action&lt;System.Object&gt;,System.Object)"/>
- <Member Name="StartNew(System.Action&lt;System.Object&gt;,System.Object,System.Threading.CancellationToken)"/>
- <Member Name="StartNew(System.Action&lt;System.Object&gt;,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="StartNew(System.Action&lt;System.Object&gt;,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)"/>
- <Member Name="StartNew&lt;TResult&gt;(System.Func&lt;TResult&gt;)"/>
- <Member Name="StartNew&lt;TResult&gt;(System.Func&lt;TResult&gt;,System.Threading.CancellationToken)"/>
- <Member Name="StartNew&lt;TResult&gt;(System.Func&lt;TResult&gt;,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="StartNew&lt;TResult&gt;(System.Func&lt;TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)"/>
- <Member Name="StartNew&lt;TResult&gt;(System.Func&lt;System.Object,TResult&gt;,System.Object)"/>
- <Member Name="StartNew&lt;TResult&gt;(System.Func&lt;System.Object,TResult&gt;,System.Object,System.Threading.CancellationToken)"/>
- <Member Name="StartNew&lt;TResult&gt;(System.Func&lt;System.Object,TResult&gt;,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="StartNew&lt;TResult&gt;(System.Func&lt;System.Object,TResult&gt;,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)"/>
- <Member Name="get_CancellationToken" />
- <Member Name="get_CreationOptions" />
- <Member Name="get_ContinuationOptions" />
- <Member Name="get_Scheduler" />
- </Type>
- <Type Name="System.Threading.Tasks.TaskFactory&lt;TResult&gt;">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Threading.CancellationToken)" />
- <Member Name="#ctor(System.Threading.Tasks.TaskScheduler)" />
- <Member Name="#ctor(System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="#ctor(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAll(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task[],TResult&gt;)" />
- <Member Name="ContinueWhenAll(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task[],TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAll(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task[],TResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAll(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task[],TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],TResult&gt;)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],TResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAll&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAny(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task,TResult&gt;)" />
- <Member Name="ContinueWhenAny(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAny(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAny(System.Threading.Tasks.Task[],System.Func&lt;System.Threading.Tasks.Task,TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;,TResult&gt;)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;,TResult&gt;,System.Threading.CancellationToken)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;,TResult&gt;,System.Threading.Tasks.TaskContinuationOptions)" />
- <Member Name="ContinueWhenAny&lt;TAntecedentResult&gt;(System.Threading.Tasks.Task&lt;TAntecedentResult&gt;[],System.Func&lt;System.Threading.Tasks.Task&lt;TAntecedentResult&gt;,TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)" />
- <Member Name="FromAsync(System.IAsyncResult,System.Func&lt;System.IAsyncResult,TResult&gt;)"/>
- <Member Name="FromAsync(System.IAsyncResult,System.Func&lt;System.IAsyncResult,TResult&gt;,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync(System.IAsyncResult,System.Func&lt;System.IAsyncResult,TResult&gt;,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)"/>
- <Member Name="FromAsync(System.Func&lt;System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,System.Object)"/>
- <Member Name="FromAsync(System.Func&lt;System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TArg1&gt;(System.Func&lt;TArg1,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,System.Object)"/>
- <Member Name="FromAsync&lt;TArg1&gt;(System.Func&lt;TArg1,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2&gt;(System.Func&lt;TArg1,TArg2,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,TArg2,System.Object)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2&gt;(System.Func&lt;TArg1,TArg2,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,TArg2,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2,TArg3&gt;(System.Func&lt;TArg1,TArg2,TArg3,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,TArg2,TArg3,System.Object)"/>
- <Member Name="FromAsync&lt;TArg1,TArg2,TArg3&gt;(System.Func&lt;TArg1,TArg2,TArg3,System.AsyncCallback,System.Object,System.IAsyncResult&gt;,System.Func&lt;System.IAsyncResult,TResult&gt;,TArg1,TArg2,TArg3,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="StartNew(System.Func&lt;TResult&gt;)"/>
- <Member Name="StartNew(System.Func&lt;TResult&gt;,System.Threading.CancellationToken)"/>
- <Member Name="StartNew(System.Func&lt;TResult&gt;,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="StartNew(System.Func&lt;TResult&gt;,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)"/>
- <Member Name="StartNew(System.Func&lt;System.Object,TResult&gt;,System.Object)"/>
- <Member Name="StartNew(System.Func&lt;System.Object,TResult&gt;,System.Object,System.Threading.CancellationToken)"/>
- <Member Name="StartNew(System.Func&lt;System.Object,TResult&gt;,System.Object,System.Threading.Tasks.TaskCreationOptions)"/>
- <Member Name="StartNew(System.Func&lt;System.Object,TResult&gt;,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)"/>
- <Member Name="get_CancellationToken" />
- <Member Name="get_CreationOptions" />
- <Member Name="get_ContinuationOptions" />
- <Member Name="get_Scheduler" />
- </Type>
- <Type Name="System.Threading.Tasks.UnobservedTaskExceptionEventArgs">
- <Member Name="#ctor(System.AggregateException)" />
- <Member Name="SetObserved" />
- <Member Name="get_Exception" />
- <Member Name="get_Observed" />
- </Type>
- <Type Name="System.Threading.Tasks.TaskContinuationOptions">
- <Member MemberType="Field" Name="AttachedToParent" />
- <Member MemberType="Field" Name="ExecuteSynchronously" />
- <Member MemberType="Field" Name="LongRunning" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="NotOnCanceled" />
- <Member MemberType="Field" Name="NotOnFaulted" />
- <Member MemberType="Field" Name="NotOnRanToCompletion" />
- <Member MemberType="Field" Name="OnlyOnCanceled" />
- <Member MemberType="Field" Name="OnlyOnFaulted" />
- <Member MemberType="Field" Name="OnlyOnRanToCompletion" />
- <Member MemberType="Field" Name="PreferFairness" />
- <Member MemberType="Field" Name="DenyChildAttach" />
- <Member MemberType="Field" Name="HideScheduler" />
- <Member MemberType="Field" Name="LazyCancellation" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Threading.Tasks.TaskCreationOptions">
- <Member MemberType="Field" Name="AttachedToParent" />
- <Member MemberType="Field" Name="LongRunning" />
- <Member MemberType="Field" Name="None" />
- <Member MemberType="Field" Name="PreferFairness" />
- <Member MemberType="Field" Name="DenyChildAttach" />
- <Member MemberType="Field" Name="HideScheduler" />
- <Member MemberType="Field" Name="RunContinuationsAsynchronously" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Threading.Tasks.TaskStatus">
- <Member MemberType="Field" Name="Created" />
- <Member MemberType="Field" Name="WaitingForActivation" />
- <Member MemberType="Field" Name="WaitingToRun" />
- <Member MemberType="Field" Name="Running" />
- <Member MemberType="Field" Name="WaitingForChildrenToComplete" />
- <Member MemberType="Field" Name="RanToCompletion" />
- <Member MemberType="Field" Name="Canceled" />
- <Member MemberType="Field" Name="Faulted" />
- <Member MemberType="Field" Name="value__" />
- </Type>
- <Type Name="System.Threading.Tasks.ConcurrentExclusiveSchedulerPair">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.Threading.Tasks.TaskScheduler)" />
- <Member Name="#ctor(System.Threading.Tasks.TaskScheduler,System.Int32)" />
- <Member Name="#ctor(System.Threading.Tasks.TaskScheduler,System.Int32,System.Int32)" />
- <Member Name="Complete" />
- <Member MemberType="Property" Name="Completion" />
- <Member MemberType="Property" Name="ConcurrentScheduler" />
- <Member MemberType="Property" Name="ExclusiveScheduler" />
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.Tasks.ConcurrentExclusiveSchedulerPair+DebugView">
- <Member Status="ImplRoot" Name="#ctor(System.Threading.Tasks.ConcurrentExclusiveSchedulerPair)" />
- <Member Status="ImplRoot" MemberType="Property" Name="Mode" />
- <Member Status="ImplRoot" MemberType="Property" Name="ScheduledExclusive" />
- <Member Status="ImplRoot" MemberType="Property" Name="ScheduledConcurrent" />
- <Member Status="ImplRoot" MemberType="Property" Name="CurrentlyExecutingTaskCount" />
- <Member Status="ImplRoot" MemberType="Property" Name="TargetScheduler" />
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.Tasks.ConcurrentExclusiveSchedulerPair+ConcurrentExclusiveTaskScheduler+DebugView">
- <Member Status="ImplRoot" Name="#ctor(System.Threading.Tasks.ConcurrentExclusiveSchedulerPair+ConcurrentExclusiveTaskScheduler)" />
- <Member Status="ImplRoot" MemberType="Property" Name="MaximumConcurrencyLevel" />
- <Member Status="ImplRoot" MemberType="Property" Name="ScheduledTasks" />
- <Member Status="ImplRoot" MemberType="Property" Name="SchedulerPair" />
- </Type>
- <Type Name="System.Threading.Tasks.TplEtwProvider+Tasks">
- <Member MemberType="Field" Name="Loop" />
- <Member MemberType="Field" Name="Invoke" />
- <Member MemberType="Field" Name="TaskExecute" />
- <Member MemberType="Field" Name="TaskWait" />
- <Member MemberType="Field" Name="ForkJoin" />
- <Member MemberType="Field" Name="TaskScheduled" />
- <Member MemberType="Field" Name="AwaitTaskContinuationScheduled" />
- </Type>
- <Type Name="System.Threading.Tasks.TplEtwProvider+Keywords">
- <Member MemberType="Field" Name="TaskTransfer" />
- <Member MemberType="Field" Name="Tasks" />
- <Member MemberType="Field" Name="Parallel" />
- </Type>
-
- <!-- System.Runtime.CompilerServices namespace -->
- <Type Name="System.Runtime.CompilerServices.TaskAwaiter">
- <Member Name="get_IsCompleted" />
- <Member Name="OnCompleted(System.Action)" />
- <Member Name="UnsafeOnCompleted(System.Action)" />
- <Member Name="GetResult" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.TaskAwaiter&lt;TResult&gt;">
- <Member Name="get_IsCompleted" />
- <Member Name="OnCompleted(System.Action)" />
- <Member Name="UnsafeOnCompleted(System.Action)" />
- <Member Name="GetResult" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.ConfiguredTaskAwaitable">
- <Member Name="GetAwaiter" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter">
- <Member Name="get_IsCompleted" />
- <Member Name="OnCompleted(System.Action)" />
- <Member Name="UnsafeOnCompleted(System.Action)" />
- <Member Name="GetResult" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.ConfiguredTaskAwaitable&lt;TResult&gt;">
- <Member Name="GetAwaiter" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.ConfiguredTaskAwaitable&lt;TResult&gt;+ConfiguredTaskAwaiter">
- <Member Name="get_IsCompleted" />
- <Member Name="OnCompleted(System.Action)" />
- <Member Name="UnsafeOnCompleted(System.Action)" />
- <Member Name="GetResult" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.INotifyCompletion">
- <Member Name="OnCompleted(System.Action)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.ICriticalNotifyCompletion">
- <Member Name="UnsafeOnCompleted(System.Action)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.YieldAwaitable">
- <Member Name="GetAwaiter" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.YieldAwaitable+YieldAwaiter">
- <Member Name="get_IsCompleted" />
- <Member Name="OnCompleted(System.Action)" />
- <Member Name="UnsafeOnCompleted(System.Action)" />
- <Member Name="GetResult" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.IAsyncStateMachine">
- <Member Name="MoveNext" />
- <Member Name="SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.AsyncVoidMethodBuilder">
- <Member Name="Create" />
- <Member Name="Start&lt;TStateMachine&gt;(TStateMachine@)" />
- <Member Name="SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" />
- <Member Name="AwaitOnCompleted&lt;TAwaiter,TStateMachine&gt;(TAwaiter@,TStateMachine@)" />
- <Member Name="AwaitUnsafeOnCompleted&lt;TAwaiter,TStateMachine&gt;(TAwaiter@,TStateMachine@)" />
- <Member Name="SetResult" />
- <Member Name="SetException(System.Exception)" />
- <!-- These are required by the debugger team. Adding to the model file to prevent inadvertant thinning -->
- <Member Status="ImplRoot" MemberType="Property" Name="ObjectIdForDebugger" />
- <Member Status="ImplRoot" Name="get_ObjectIdForDebugger" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.AsyncTaskMethodBuilder">
- <Member Name="Create" />
- <Member Name="Start&lt;TStateMachine&gt;(TStateMachine@)" />
- <Member Name="SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" />
- <Member Name="AwaitOnCompleted&lt;TAwaiter,TStateMachine&gt;(TAwaiter@,TStateMachine@)" />
- <Member Name="AwaitUnsafeOnCompleted&lt;TAwaiter,TStateMachine&gt;(TAwaiter@,TStateMachine@)" />
- <Member Name="SetResult" />
- <Member Name="SetException(System.Exception)" />
- <Member Name="get_Task" />
- <!-- These are required by the debugger team. Adding to the model file to prevent inadvertant thinning -->
- <Member Status="ImplRoot" MemberType="Property" Name="ObjectIdForDebugger" />
- <Member Status="ImplRoot" Name="get_ObjectIdForDebugger" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_builder" />
- </Type>
- <Type Name="System.Runtime.CompilerServices.AsyncTaskMethodBuilder&lt;TResult&gt;" >
- <Member Name="Create" />
- <Member Name="Start&lt;TStateMachine&gt;(TStateMachine@)" />
- <Member Name="SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" />
- <Member Name="AwaitOnCompleted&lt;TAwaiter,TStateMachine&gt;(TAwaiter@,TStateMachine@)" />
- <Member Name="AwaitUnsafeOnCompleted&lt;TAwaiter,TStateMachine&gt;(TAwaiter@,TStateMachine@)" />
- <Member Name="SetResult(TResult)" />
- <Member Name="SetException(System.Exception)" />
- <Member Name="get_Task" />
- <!-- These are required by the debugger team. Adding to the model file to prevent inadvertant thinning -->
- <Member Status="ImplRoot" MemberType="Property" Name="ObjectIdForDebugger" />
- <Member Status="ImplRoot" Name="get_ObjectIdForDebugger" />
- <Member Status="ImplRoot" MemberType="Field" Name="m_task" />
- </Type>
-
- <!-- System namespace -->
- <Type Name="System.AggregateException">
- <Member Name="#ctor"/>
- <Member Name="#ctor(System.Collections.Generic.IEnumerable&lt;System.Exception&gt;)"/>
- <Member Name="#ctor(System.Exception[])"/>
- <Member Name="#ctor(System.String)"/>
- <Member Name="#ctor(System.String,System.Collections.Generic.IEnumerable&lt;System.Exception&gt;)"/>
- <Member Name="#ctor(System.String,System.Exception[])"/>
- <Member Name="#ctor(System.String,System.Collections.Generic.IList&lt;System.Exception&gt;)"/>
- <Member Name="#ctor(System.String,System.Exception)"/>
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="get_InnerExceptions" />
- <Member Name="Handle(System.Func&lt;System.Exception,System.Boolean&gt;)"/>
- <Member Name="Flatten"/>
- <Member Name="GetBaseException"/>
- <Member Name="ToString"/>
- </Type>
- <!-- System.Threading namespace -->
- <Type Name="System.Threading.AsyncLocal&lt;T&gt;">
- <Member Name="#ctor"/>
- <Member Name="#ctor(System.Action&lt;System.Threading.AsyncLocalValueChangedArgs&lt;T&gt;&gt;)"/>
- <Member Name="get_Value"/>
- <Member Name="set_Value(T)"/>
- </Type>
- <Type Name="System.Threading.AsyncLocalValueChangedArgs&lt;T&gt;">
- <Member Name="get_PreviousValue"/>
- <Member Name="get_CurrentValue"/>
- <Member Name="get_ThreadContextChanged"/>
- </Type>
- <Type Name="System.Threading.ExecutionContext">
- <Member Status="ImplRoot" Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="Capture" />
- <Member Name="CreateCopy" />
- <Member Name="Dispose" />
- <Member Name="GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- <Member Name="IsFlowSuppressed" />
- <Member Name="RestoreFlow" />
- <Member Name="Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object)"/>
- <Member Name="SuppressFlow" />
- </Type>
- <Type Name="System.Threading.CancellationToken">
- <Member Name="#ctor(System.Boolean)"/>
- <Member Name="get_None" />
- <Member Name="get_IsCancellationRequested" />
- <Member Name="get_CanBeCanceled" />
- <Member Name="get_WaitHandle" />
- <Member Name="Register(System.Action)" />
- <Member Name="Register(System.Action,System.Boolean)" />
- <Member Name="Register(System.Action&lt;System.Object&gt;,System.Object)" />
- <Member Name="Register(System.Action&lt;System.Object&gt;,System.Object,System.Boolean)" />
- <Member Name="Equals(System.Threading.CancellationToken)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Threading.CancellationToken,System.Threading.CancellationToken)" />
- <Member Name="op_Inequality(System.Threading.CancellationToken,System.Threading.CancellationToken)" />
- <Member Name="ThrowIfCancellationRequested" />
- </Type>
- <Type Name="System.Threading.CancellationTokenSource">
- <Member Name="#ctor"/>
- <Member Name="#ctor(System.TimeSpan)" />
- <Member Name="#ctor(System.Int32)" />
- <Member Name="Cancel"/>
- <Member Name="Cancel(System.Boolean)"/>
- <Member Name="CancelAfter(System.TimeSpan)" />
- <Member Name="CancelAfter(System.Int32)" />
- <Member Name="CreateLinkedTokenSource(System.Threading.CancellationToken,System.Threading.CancellationToken)"/>
- <Member Name="CreateLinkedTokenSource(System.Threading.CancellationToken[])"/>
- <Member Name="Dispose"/>
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="get_Token"/>
- <Member Name="get_IsCancellationRequested"/>
- <Member Status="ImplRoot" Name="get_CallbackCount" Condition="DEBUG"/>
- </Type>
- <Type Name="System.Threading.CancellationTokenRegistration">
- <Member Name="Dispose"/>
- <Member Name="Equals(System.Threading.CancellationTokenRegistration)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="GetHashCode" />
- <Member Name="op_Equality(System.Threading.CancellationTokenRegistration,System.Threading.CancellationTokenRegistration)" />
- <Member Name="op_Inequality(System.Threading.CancellationTokenRegistration,System.Threading.CancellationTokenRegistration)" />
- </Type>
- <Type Name="System.Threading.SpinWait">
- <Member Name="SpinOnce"/>
- <Member Name="Reset" />
- <Member Name="get_Count" />
- <Member Name="get_NextSpinWillYield" />
- <Member Name="SpinUntil(System.Func&lt;System.Boolean&gt;)" />
- <Member Name="SpinUntil(System.Func&lt;System.Boolean&gt;,System.TimeSpan)" />
- <Member Name="SpinUntil(System.Func&lt;System.Boolean&gt;,System.Int32)" />
- </Type>
- <Type Name="System.Threading.SpinLock">
- <Member Name="#ctor(System.Boolean)"/>
- <Member Name="Enter(System.Boolean@)" />
- <Member Name="TryEnter(System.Boolean@)" />
- <Member Name="TryEnter(System.TimeSpan,System.Boolean@)" />
- <Member Name="TryEnter(System.Int32,System.Boolean@)" />
- <Member Name="Exit" />
- <Member Name="Exit(System.Boolean)" />
- <Member Name="get_IsHeld"/>
- <Member Name="get_IsHeldByCurrentThread"/>
- <Member Name="get_IsThreadOwnerTrackingEnabled"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.SpinLock+SystemThreading_SpinLockDebugView">
- <Member Status="ImplRoot" Name="#ctor(System.Threading.SpinLock)"/>
- <Member Status="ImplRoot" Name="get_IsHeld"/>
- <Member Status="ImplRoot" Name="get_IsHeldByCurrentThread"/>
- <Member Status="ImplRoot" Name="get_OwnerThreadID"/>
- </Type>
- <Type Name="System.Threading.ManualResetEventSlim">
- <Member Name="#ctor"/>
- <Member Name="#ctor(System.Boolean)"/>
- <Member Name="#ctor(System.Boolean,System.Int32)"/>
- <Member Name="Dispose"/>
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="Set" />
- <Member Name="Reset" />
- <Member Name="Wait" />
- <Member Name="Wait(System.TimeSpan)" />
- <Member Name="Wait(System.Int32)" />
- <Member Name="Wait(System.Threading.CancellationToken)" />
- <Member Name="Wait(System.TimeSpan,System.Threading.CancellationToken)" />
- <Member Name="Wait(System.Int32,System.Threading.CancellationToken)" />
- <Member Name="get_IsSet"/>
- <Member Name="get_SpinCount"/>
- <Member Name="get_WaitHandle"/>
- </Type>
- <Type Name="System.Threading.CountdownEvent">
- <Member Name="#ctor(System.Int32)"/>
- <Member Name="AddCount"/>
- <Member Name="AddCount(System.Int32)"/>
- <Member Name="Dispose"/>
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="Reset" />
- <Member Name="Reset(System.Int32)" />
- <Member Name="Signal" />
- <Member Name="Signal(System.Int32)" />
- <Member Name="TryAddCount"/>
- <Member Name="TryAddCount(System.Int32)"/>
- <Member Name="Wait" />
- <Member Name="Wait(System.TimeSpan)" />
- <Member Name="Wait(System.Int32)" />
- <Member Name="Wait(System.Threading.CancellationToken)" />
- <Member Name="Wait(System.TimeSpan,System.Threading.CancellationToken)" />
- <Member Name="Wait(System.Int32,System.Threading.CancellationToken)" />
- <Member Name="get_CurrentCount"/>
- <Member Name="get_InitialCount"/>
- <Member Name="get_IsSet"/>
- <Member Name="get_WaitHandle"/>
- </Type>
- <Type Name="System.Threading.Semaphore">
- <Member Name="#ctor(System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.String)" />
- <Member Name="#ctor(System.Int32,System.Int32,System.String,System.Boolean@)" />
- <Member Name="OpenExisting(System.String)" />
- <Member Name="Release" />
- <Member Name="Release(System.Int32)" />
- <Member Name="TryOpenExisting(System.String,System.Threading.Semaphore@)" />
- </Type>
- <Type Name="System.Threading.SemaphoreSlim">
- <Member Name="#ctor(System.Int32)"/>
- <Member Name="#ctor(System.Int32,System.Int32)"/>
- <Member Name="Dispose"/>
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="Release" />
- <Member Name="Release(System.Int32)" />
- <Member Name="Wait" />
- <Member Name="Wait(System.TimeSpan)" />
- <Member Name="Wait(System.Int32)" />
- <Member Name="Wait(System.Threading.CancellationToken)" />
- <Member Name="Wait(System.TimeSpan,System.Threading.CancellationToken)" />
- <Member Name="Wait(System.Int32,System.Threading.CancellationToken)" />
- <!--WaitAsync only supported in CoreSys bcause CoreCLR build is still using V4.0 tools -->
- <Member Name="WaitAsync" />
- <Member Name="WaitAsync(System.TimeSpan)" />
- <Member Name="WaitAsync(System.Int32)" />
- <Member Name="WaitAsync(System.Threading.CancellationToken)" />
- <Member Name="WaitAsync(System.TimeSpan,System.Threading.CancellationToken)" />
- <Member Name="WaitAsync(System.Int32,System.Threading.CancellationToken)" />
- <Member Name="get_CurrentCount"/>
- <Member Name="get_AvailableWaitHandle"/>
- </Type>
- <Type Name="System.Threading.SemaphoreFullException">
- <Member Name="#ctor" />
- <Member Name="#ctor(System.String)" />
- <Member Name="#ctor(System.String,System.Exception)" />
- <Member Name="#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)" />
- </Type>
- <Type Name="System.Threading.ThreadLocal&lt;T&gt;">
- <Member Name="#ctor"/>
- <Member Name="#ctor(System.Boolean)"/>
- <Member Name="#ctor(System.Func&lt;T&gt;)"/>
- <Member Name="#ctor(System.Func&lt;T&gt;,System.Boolean)"/>
- <Member Name="Dispose"/>
- <Member Name="Dispose(System.Boolean)" />
- <Member Name="ToString" />
- <Member MemberType="Property" Name="Value" />
- <Member Name="get_Values"/>
- <Member Name="get_IsValueCreated"/>
- </Type>
- <Type Status="ImplRoot" Name="System.Threading.SystemThreading_ThreadLocalDebugView&lt;T&gt;">
- <Member Name="#ctor(System.Threading.ThreadLocal&lt;T&gt;)"/>
- <Member Status="ImplRoot" Name="get_Value"/>
- <Member Status="ImplRoot" Name="get_IsValueCreated"/>
- <Member Status="ImplRoot" Name="get_Values"/>
- </Type>
- <Type Name="System.Threading.LazyInitializer">
- <Member Name="EnsureInitialized&lt;T&gt;(T@)"/>
- <Member Name="EnsureInitialized&lt;T&gt;(T@,System.Func&lt;T&gt;)"/>
- <Member Name="EnsureInitialized&lt;T&gt;(T@,System.Boolean@,System.Object@)"/>
- <Member Name="EnsureInitialized&lt;T&gt;(T@,System.Boolean@,System.Object@,System.Func&lt;T&gt;)"/>
- </Type>
- <Type Status="ImplRoot" Name="Windows.Foundation.Diagnostics.ITracingStatusChangedEventArgs" Condition="FEATURE_COMINTEROP">
- <Member Name="get_Enabled" />
- <Member Name="get_TraceLevel" />
- </Type>
- <!--End of PFX types -->
- <Type Name="System.Console">
- <Member Name="Write(System.String)" />
- <Member Name="WriteLine(System.String)" />
- <Member Name="WriteLine" />
- </Type>
- <Type Name="System.Span&lt;T&gt;" Condition="FEATURE_SPAN_OF_T">
- <Member Name="#ctor(T[])" />
- <Member Name="#ctor(T[],System.Int32)" />
- <Member Name="#ctor(T[],System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Void*,System.Int32)" />
- <Member Name="DangerousGetPinnableReference" />
- <Member Name="op_Implicit(T[])" ReturnType="System.Span&lt;T&gt;" />
- <Member Name="op_Implicit(System.ArraySegment&lt;T&gt;)" ReturnType="System.Span&lt;T&gt;" />
- <Member Name="op_Implicit(System.Span&lt;T&gt;)" ReturnType="System.ReadOnlySpan&lt;T&gt;" />
- <Member Name="op_Equality(System.Span&lt;T&gt;,System.Span&lt;T&gt;)" />
- <Member Name="op_Inequality(System.Span&lt;T&gt;,System.Span&lt;T&gt;)" />
- <Member Name="get_Length" />
- <Member Name="get_Empty" />
- <Member Name="get_IsEmpty" />
- <Member Name="get_Item(System.Int32)" />
- <Member Name="set_Item(System.Int32,T)" />
- <Member Name="ToArray" />
- <Member Name="Slice(System.Int32)" />
- <Member Name="Slice(System.Int32,System.Int32)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="DangerousCreate(System.Object,T@,System.Int32)" />
- <Member Name="GetHashCode" />
- <Member Name="CopyTo(System.Span&lt;T&gt;)" />
- <Member Name="TryCopyTo(System.Span&lt;T&gt;)" />
- </Type>
- <Type Name="System.ReadOnlySpan&lt;T&gt;" Condition="FEATURE_SPAN_OF_T">
- <Member Name="#ctor(T[])" />
- <Member Name="#ctor(T[],System.Int32)" />
- <Member Name="#ctor(T[],System.Int32,System.Int32)" />
- <Member Name="#ctor(System.Void*,System.Int32)" />
- <Member Name="DangerousGetPinnableReference" />
- <Member Name="op_Implicit(System.Span&lt;T&gt;)" ReturnType="System.ReadOnlySpan&lt;T&gt;" />
- <Member Name="op_Implicit(T[])" ReturnType="System.ReadOnlySpan&lt;T&gt;" />
- <Member Name="op_Implicit(System.ArraySegment&lt;T&gt;)" ReturnType="System.ReadOnlySpan&lt;T&gt;" />
- <Member Name="op_Equality(System.ReadOnlySpan&lt;T&gt;,System.ReadOnlySpan&lt;T&gt;)" />
- <Member Name="op_Inequality(System.ReadOnlySpan&lt;T&gt;,System.ReadOnlySpan&lt;T&gt;)" />
- <Member Name="get_Length" />
- <Member Name="get_Empty" />
- <Member Name="get_IsEmpty" />
- <Member Name="get_Item(System.Int32)" />
- <Member Name="ToArray" />
- <Member Name="Slice(System.Int32)" />
- <Member Name="Slice(System.Int32,System.Int32)" />
- <Member Name="Equals(System.Object)" />
- <Member Name="DangerousCreate(System.Object,T@,System.Int32)" />
- <Member Name="GetHashCode" />
- <Member Name="TryCopyTo(System.Span&lt;T&gt;)" />
- <Member Name="CopyTo(System.Span&lt;T&gt;)" />
- </Type>
- <Type Name="System.SpanExtensions" Condition="FEATURE_SPAN_OF_T">
- <Member Name="AsBytes&lt;T&gt;(System.Span&lt;T&gt;)" />
- <Member Name="AsBytes&lt;T&gt;(System.ReadOnlySpan&lt;T&gt;)" />
- <Member Name="NonPortableCast&lt;TFrom,TTo&gt;(System.Span&lt;TFrom&gt;)" />
- <Member Name="NonPortableCast&lt;TFrom,TTo&gt;(System.ReadOnlySpan&lt;TFrom&gt;)" />
- </Type>
- <Type Name="System.ReadOnlySpanExtensions" Condition="FEATURE_SPAN_OF_T">
- <Member Name="Slice(System.String)" />
- <Member Name="Slice(System.String,System.Int32)" />
- <Member Name="Slice(System.String,System.Int32,System.Int32)" />
- </Type>
- </Assembly>
-</ThinModel>
diff --git a/src/mscorlib/mscorlib.shared.sources.props b/src/mscorlib/mscorlib.shared.sources.props
deleted file mode 100644
index 3c4b1bce4a..0000000000
--- a/src/mscorlib/mscorlib.shared.sources.props
+++ /dev/null
@@ -1,1317 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AccessedThroughPropertyAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AssemblyAttributesGoHere.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\RuntimeHelpers.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CompilerGeneratedAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CustomConstantAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\DateTimeConstantAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\DiscardableAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\DecimalConstantAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\DisablePrivateReflectionAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CompilationRelaxations.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CompilerGlobalScopeAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ExtensionAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\FormattableStringFactory.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\FixedBufferAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\IndexerNameAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\InternalsVisibleToAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\IsVolatile.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\MethodImplAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\FixedAddressValueTypeAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\UnsafeValueTypeAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AssemblySettingAttributes.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\TypeDependencyAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CompilerMarshalOverride.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\jithelpers.cs" />
- <CompilerServicesSources Condition="'$(FeatureSpanOfT)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\Unsafe.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\SpecialNameAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\SuppressMergeCheckAttribute.cs" />
- <CompilerServicesSources Condition="'$(FeatureICastable)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ICastable.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\SuppressIldasmAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\DecoratedNameAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\TypeForwardedToAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\TypeForwardedFromAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ReferenceAssemblyAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\RuntimeCompatibilityAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\RuntimeWrappedException.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ConditionalWeakTable.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CallerFilePathAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CallerLineNumberAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\CallerMemberNameAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\StateMachineAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\IteratorStateMachineAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AsyncStateMachineAttribute.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AsyncMethodBuilder.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\IAsyncStateMachine.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\INotifyCompletion.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\TaskAwaiter.cs" />
- <CompilerServicesSources Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\YieldAwaitable.cs" />
- </ItemGroup>
- <ItemGroup>
- <ReliabilitySources Include="$(BclSourcesRoot)\System\Runtime\Reliability\CriticalFinalizerObject.cs" />
- <ReliabilitySources Include="$(BclSourcesRoot)\System\Runtime\Reliability\ReliabilityContractAttribute.cs" />
- <ReliabilitySources Include="$(BclSourcesRoot)\System\Runtime\Reliability\PrePrepareMethodAttribute.cs" />
- </ItemGroup>
- <ItemGroup>
- <RuntimeSources Include="$(BclSourcesRoot)\System\Runtime\MemoryFailPoint.cs" />
- <RuntimeSources Include="$(BclSourcesRoot)\System\Runtime\GcSettings.cs" />
- <RuntimeSources Condition="'$(FeatureMulticoreJIT)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\ProfileOptimization.cs" />
- </ItemGroup>
- <ItemGroup>
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\CollectionBase.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\ArrayList.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\Stack.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\Comparer.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\CompatibleComparer.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\ListDictionaryInternal.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\EmptyReadOnlyDictionaryInternal.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\Hashtable.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\DictionaryEntry.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\ICollection.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IComparer.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IDictionary.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IDictionaryEnumerator.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IEnumerable.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IEnumerator.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IEqualityComparer.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IHashCodeProvider.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IList.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\KeyValuePairs.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\SortedList.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IStructuralEquatable.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\IStructuralComparable.cs" />
- <CollectionsSources Include="$(BclSourcesRoot)\System\Collections\StructuralComparisons.cs" />
- </ItemGroup>
- <ItemGroup>
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ArrayWithOffset.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\Attributes.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\CallingConvention.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\CharSet.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\COMException.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\CriticalHandle.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ExternalException.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\GcHandle.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\GCHandleCookieTable.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\HandleRef.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ICustomMarshaler.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\IException.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\InvalidOleVariantTypeException.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\LayoutKind.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\Marshal.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\MarshalDirectiveException.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\PInvokeMap.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\RuntimeEnvironment.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SEHException.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SafeBuffer.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SafeHandle.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\BStrWrapper.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\CurrencyWrapper.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ErrorWrapper.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UnknownWrapper.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\VariantWrapper.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComMemberType.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ICustomAdapter.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ICustomQueryInterface.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\InvalidComObjectException.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SafeArrayRankMismatchException.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\SafeArrayTypeMismatchException.cs" />
- <InteropSources Condition="'$(FeatureCoreClr)'=='true'" Include="$(BclSourcesRoot)\System\Runtime\InteropServices\NativeCallableAttribute.cs" />
- <InteropSources Condition="'$(FeatureCominterop)' != 'true'" Include="$(BclSourcesRoot)\System\Runtime\InteropServices\NonPortable.cs" />
- <InteropSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\InteropServices\DispatchWrapper.cs" />
- <InteropSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ExtensibleClassFactory.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ICustomFactory.cs" />
- <InteropSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ObjectCreationDelegate.cs" />
- </ItemGroup>
- <ItemGroup>
- <InteropSources Include="$(CoreFxSourcesRoot)\System\Runtime\InteropServices\NativeBuffer.cs" />
- <InteropSources Include="$(CoreFxSourcesRoot)\System\Runtime\InteropServices\StringBuffer.cs" />
- <InteropSources Include="$(CoreFxSourcesRoot)\System\Runtime\InteropServices\SafeHeapHandle.cs" />
- <InteropSources Include="$(CoreFxSourcesRoot)\System\Runtime\InteropServices\SafeHeapHandleCache.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureClassicCominterop)' == 'true'">
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\IRegistrationServices.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ITypeLibConverter.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\RegistrationServices.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIBindCtx.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIConnectionPointContainer.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIConnectionPoint.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIEnumerable.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIEnumerator.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIEnumMoniker.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIEnumConnections.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIEnumConnectionPoints.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIEnumString.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIEnumVARIANT.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIExpando.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIMoniker.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIPersistFile.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIReflect.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIRunningObjectTable.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMIStream.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMITypeComp.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMITypeInfo.cs" />
- <InteropSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\UCOMITypeLib.cs" />
- </ItemGroup>
- <ItemGroup>
- <InteropExpandoSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\Expando\IExpando.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureClassicCominterop)' == 'true'">
- <InteropComeventsSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComEventsHelper.cs" />
- <InteropComeventsSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComEventsInfo.cs" />
- <InteropComeventsSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComEventsMethod.cs" />
- <InteropComeventsSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComEventsSink.cs" />
- <InteropComeventsSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\NativeMethods.cs" />
- <InteropComeventsSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\Variant.cs" />
- </ItemGroup>
- <ItemGroup>
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IBindCtx.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IConnectionPointContainer.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IConnectionPoint.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumerable.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumerator.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumMoniker.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumConnections.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumConnectionPoints.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumString.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IEnumVARIANT.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IExpando.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IMoniker.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IPersistFile.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IReflect.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IRunningObjectTable.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\IStream.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeComp.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeInfo.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeLib.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeLib2.cs" />
- <InteropComtypesSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ComTypes\ITypeInfo2.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureCominterop)' == 'true'">
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\Attributes.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ConstantSplittableMap.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\DictionaryKeyCollection.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\DictionaryValueCollection.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\EnumeratorToIteratorAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\VectorToListAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\VectorToCollectionAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\VectorViewToReadOnlyCollectionAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\MapToDictionaryAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\MapToCollectionAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\MapViewToReadOnlyCollectionAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ListToVectorAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\DictionaryToMapAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\BindableVectorToListAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\BindableVectorToCollectionAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ListToBindableVectorAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ListToBindableVectorViewAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\EventRegistrationToken.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\EventRegistrationTokenTable.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IActivationFactory.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IRestrictedErrorInfo.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IMapViewToIReadOnlyDictionaryAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IVectorViewToIReadOnlyListAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IReadOnlyDictionaryToIMapViewAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IReadOnlyListToIVectorViewAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IteratorToEnumeratorAdapter.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ManagedActivationFactory.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\NativeMethods.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\PropertyValue.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\WindowsRuntimeMarshal.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\WindowsRuntimeMetadata.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IClosable.cs" />
- <InteropWinRTSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\RuntimeClass.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureCominterop)' == 'true'">
- <WinRTTSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\CLRIPropertyValueImpl.cs' />
- <WinRTTSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\CLRIReferenceImpl.cs' />
- <WinRTTSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IPropertyValue.cs' />
- <WinRTTSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IReference.cs' />
- <WinRTTSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\WindowsFoundationEventHandler.cs' />
- <WinRTTSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ICustomPropertyProvider.cs' />
- <WinRTTSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\ICustomProperty.cs' />
- <WinRTTSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\CustomPropertyImpl.cs' />
- <WinRTTSources Include='$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\WindowsRuntimeBufferHelper.cs' />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureCominterop)' == 'true'">
- <WinRTCollectionSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IIterable.cs" />
- <WinRTCollectionSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IIterator.cs" />
- <WinRTCollectionSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IVector.cs" />
- <WinRTCollectionSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\IMap.cs" />
- <WinRTCollectionSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\WindowsRuntime\CLRIKeyValuePairImpl.cs" />
- </ItemGroup>
- <ItemGroup>
- <SystemSources Include="$(BclSourcesRoot)\System\AggregateException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppContext\AppContext.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppContext\AppContextSwitches.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.cs" />
- <SystemSources Condition="'$(FeatureCoreClr)'=='true'" Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.CoreClrOverrides.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.Defaults.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.Defaults.Central.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\CurrentTimeZone.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TimeZone.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Object.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ICloneable.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Action.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Array.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ArraySegment.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IComparable.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IEquatable.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ThrowHelper.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Tuple.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\String.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\String.Comparison.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\String.Manipulation.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\String.Searching.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\StringComparer.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\StringComparison.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\StringSplitOptions.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Text\StringBuilder.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Text\StringBuilderCache.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Exception.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\FormattableString.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DateTime.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DateTimeKind.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DateTimeOffset.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\SystemException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\OutOfMemoryException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\StackOverflowException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DataMisalignedException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ExecutionEngineException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Delegate.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MulticastDelegate.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\__Filters.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\__HResults.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\BCLDebug.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MemberAccessException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Activator.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AccessViolationException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ApplicationException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppDomain.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppDomainSetup.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppDomainManager.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IAppDomainPauseManager.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IAppDomain.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IAppDomainSetup.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppDomainAttributes.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AppDomainUnloadedException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ApplicationId.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ArgumentException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ArgumentNullException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ArgumentOutOfRangeException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ArgIterator.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ArithmeticException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ArrayTypeMismatchException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AsyncCallback.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Attribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AttributeTargets.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\AttributeUsageAttribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\BadImageFormatException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\BitConverter.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Boolean.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Buffer.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Byte.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\CannotUnloadAppDomainException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Char.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\CharEnumerator.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\CfgParser.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\CLSCompliantAttribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TypeUnloadedException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\cominterfaces.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\CompatibilitySwitches.cs" />
- <SystemSources Condition="'$(FeatureCoreClr)'=='true'" Include="$(BclSourcesRoot)\System\LowLevelConsole.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ContextMarshalException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Convert.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\StringFreezingAttribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Currency.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DayOfWeek.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DBNull.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Decimal.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DefaultBinder.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DelegateSerializationHolder.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DivideByZeroException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Double.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DuplicateWaitObjectException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Empty.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Enum.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\EntryPointNotFoundException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\DllNotFoundException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Environment.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\EventArgs.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\EventHandler.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\FieldAccessException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\FlagsAttribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\FormatException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\GC.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Guid.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IAsyncResult.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ICustomFormatter.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IDisposable.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IFormatProvider.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IFormattable.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IndexOutOfRangeException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IObservable.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IObserver.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IProgress.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\InsufficientMemoryException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\InsufficientExecutionStackException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Lazy.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Int16.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Int32.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Int64.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IntPtr.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Internal.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\InvalidCastException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\InvalidOperationException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\InvalidProgramException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\InvalidTimeZoneException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IConvertible.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\IServiceObjectProvider.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\_LocalDataStore.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\_LocalDataStoreMgr.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MarshalByRefObject.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Math.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MathF.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\mda.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MethodAccessException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MidpointRounding.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MissingFieldException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MissingMemberException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MissingMethodException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\MulticastNotSupportedException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\NonSerializedAttribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\NotFiniteNumberException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\NotImplementedException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\NotSupportedException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\NullReferenceException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Number.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ObjectDisposedException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ObsoleteAttribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\OperatingSystem.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\OperationCanceledException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\OverflowException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ParamArrayAttribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ParamsArray.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ParseNumbers.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\PlatformID.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\PlatformNotSupportedException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Progress.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Random.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\RankException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ResId.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\RtType.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\RuntimeArgumentHandle.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\RuntimeHandles.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\SByte.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\SerializableAttribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\SharedStatics.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Single.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\StubHelpers.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ThreadAttributes.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TimeoutException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TimeSpan.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TimeZoneInfo.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TimeZoneNotFoundException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Type.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TypeAccessException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TypeNameParser.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TypeCode.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TypedReference.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TypeInitializationException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\TypeLoadException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\UInt16.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\UInt32.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\UInt64.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\UIntPtr.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\UnauthorizedAccessException.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\UnitySerializationHolder.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\UnhandledExceptionEventArgs.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\UnhandledExceptionEventHandler.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\ValueType.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Version.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\Void.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\WeakReference.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\WeakReferenceOfT.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\XmlIgnoreMemberAttribute.cs" />
- <SystemSources Include="$(BclSourcesRoot)\System\CLRConfig.cs" />
- <SystemSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\__ComObject.cs" />
- <SystemSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\Variant.cs" />
- <SystemSources Condition="'$(FeatureClassicCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\OleAutBinder.cs" />
- <SystemSources Condition="'$(FeatureSpanOfT)' == 'true'" Include="$(BclSourcesRoot)\System\ByReference.cs" />
- <SystemSources Condition="'$(FeatureSpanOfT)' == 'true'" Include="$(BclSourcesRoot)\System\Span.cs" />
- <SystemSources Condition="'$(FeatureSpanOfT)' == 'true'" Include="$(BclSourcesRoot)\System\ReadOnlySpan.cs" />
- </ItemGroup>
- <ItemGroup>
- <InternalSources Condition="'$(FeatureCoreclr)' == 'true'" Include="$(BclSourcesRoot)\Internal\Runtime\Augments\EnvironmentAugments.cs" />
- <InternalSources Include="$(BclSourcesRoot)\Internal\Runtime\Augments\RuntimeThread.cs" />
- </ItemGroup>
- <ItemGroup>
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\__Filters.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\AmbiguousMatchException.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\Assembly.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\AssemblyAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\AssemblyName.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\AssemblyNameProxy.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\AssemblyNameFlags.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\Associates.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\CustomAttributeExtensions.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\CustomAttributeFormatException.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\Binder.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\BindingFlags.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\CallingConventions.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ComInterfaces.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ConstructorInfo.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\CustomAttribute.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\DefaultMemberAttribute.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\EventAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\EventInfo.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\FieldAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\FieldInfo.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\GenericParameterAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ICustomAttributeProvider.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\IReflectableType.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\IntrospectionExtensions.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\RuntimeReflectionExtensions.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\InterfaceMapping.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\InvalidFilterCriteriaException.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\IReflect.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\LoaderAllocator.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ManifestResourceInfo.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MdConstant.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MdImport.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MemberFilter.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MemberInfo.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MemberInfoSerializationHolder.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MemberTypes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MethodAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MethodBase.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MethodImplAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MethodInfo.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\Missing.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\Module.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ObfuscateAssemblyAttribute.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ObfuscationAttribute.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\MethodBody.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ParameterAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ParameterInfo.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ParameterModifier.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\Pointer.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\PropertyAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\PropertyInfo.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ReflectionContext.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ReflectionTypeLoadException.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\ResourceAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\StrongNameKeyPair.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\TargetException.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\TargetInvocationException.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\TargetParameterCountException.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\TypeAttributes.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\TypeDelegator.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\TypeFilter.cs" />
- <ReflectionSources Include="$(BclSourcesRoot)\System\Reflection\TypeInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\AssemblyBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\AssemblyBuilderData.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\AssemblyBuilderAccess.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\AQNBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ComInterfaces.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ConstructorBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\DynamicILGenerator.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\DynamicMethod.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\EventBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\EventToken.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\FieldBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\FieldToken.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ILGenerator.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ISymWrapperCore.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\Label.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\LocalBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\MethodBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\MethodBuilderInstantiation.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\SymbolType.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\SymbolMethod.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\CustomAttributeBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\MethodToken.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ModuleBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ModuleBuilderData.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\PEFileKinds.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\OpCodes.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\Opcode.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\OpcodeType.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\StackBehaviour.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\OperandType.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\FlowControl.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ParameterBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\ParameterToken.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\PropertyBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\PropertyToken.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\SignatureHelper.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\SignatureToken.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\StringToken.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\TypeBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\TypeBuilderInstantiation.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\GenericTypeParameterBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\EnumBuilder.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\TypeToken.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\XXXOnTypeBuilderInstantiation.cs" />
- <ReflectionEmitSources Include="$(BclSourcesRoot)\System\Reflection\Emit\UnmanagedMarshal.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureCoreclr)' == 'true'">
- <ReflectionMetadataSources Include="$(BclSourcesRoot)\System\Reflection\Metadata\AssemblyExtensions.cs" />
- </ItemGroup>
- <ItemGroup>
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeFormat.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeParse.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeStyles.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\NumberStyles.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\TimeSpanFormat.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\TimeSpanParse.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\DaylightTime.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureCoreFxGlobalization)' != 'true'">
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\BidiCategory.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\Calendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CalendarData.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CalendarAlgorithmType.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CalendarWeekRule.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CalendricalCalculationsHelper.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CharUnicodeInfo.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CompareInfo.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CultureInfo.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CultureNotFoundException.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CultureTypes.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeFormatInfo.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\DateTimeFormatInfoScanner.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\DigitShapes.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\EncodingDataItem.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\EncodingTable.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\GlobalizationAssembly.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\GregorianCalendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\GregorianCalendarTypes.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\GregorianCalendarHelper.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\HebrewCalendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\HijriCalendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\UmAlQuraCalendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\PersianCalendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\IdnMapping.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\JapaneseCalendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\KoreanCalendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\RegionInfo.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\SortKey.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\SortVersion.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\StringInfo.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\TaiwanCalendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\TextElementEnumerator.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\TextInfo.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\ThaiBuddhistCalendar.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\TimeSpanStyles.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\NumberFormatInfo.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\UnicodeCategory.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\CultureData.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\HebrewNumber.cs" />
- <GlobalizationSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\ChineseLunisolarCalendar.cs" />
- <GlobalizationSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\EastAsianLunisolarCalendar.cs" />
- <GlobalizationSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\JapaneseLunisolarCalendar.cs" />
- <GlobalizationSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\JulianCalendar.cs" />
- <GlobalizationSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\KoreanLunisolarCalendar.cs" />
- <GlobalizationSources Condition="'$(FeatureOnlyCoreCalendars)'==''" Include="$(BclSourcesRoot)\System\Globalization\TaiwanLunisolarCalendar.cs" />
- </ItemGroup>
- <ItemGroup>
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\SR.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureCoreFxGlobalization)' == 'true'">
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\Calendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendarAlgorithmType.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendarData.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendarWeekRule.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendricalCalculationsHelper.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CharUnicodeInfo.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CharUnicodeInfoData.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\ChineseLunisolarCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CompareInfo.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureData.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureInfo.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureTypes.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureNotFoundException.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\DateTimeFormatInfo.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\DateTimeFormatInfoScanner.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\EastAsianLunisolarCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\GregorianCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\GregorianCalendarHelper.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\GregorianCalendarTypes.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\HebrewCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\HebrewNumber.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\HijriCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\IdnMapping.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\InternalGlobalizationHelper.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\JapaneseCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\JapaneseLunisolarCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\JulianCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\KoreanCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\KoreanLunisolarCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\NumberFormatInfo.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\PersianCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\RegionInfo.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\SortKey.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\SortVersion.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\StringInfo.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\TaiwanCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\TaiwanLunisolarCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\TextElementEnumerator.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\TextInfo.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\ThaiBuddhistCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\TimeSpanStyles.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\UmAlQuraCalendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\UnicodeCategory.cs " />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureCoreFxGlobalization)' == 'true' and '$(TargetsUnix)' == 'true'">
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\EncodingTable.Unix.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Globalization\EncodingDataItem.Unix.cs" />
- <GlobalizationSources Include="$(BclSourcesRoot)\System\Text\Normalization.Unix.cs" />
-
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Calendar.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Casing.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Collation.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Idna.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Locale.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Normalization.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.ResultCode.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.TimeZoneInfo.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Globalization.Native\Interop.Utils.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CalendarData.Unix.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CompareInfo.Unix.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureData.Unix.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureInfo.Unix.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\DigitShapes.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\HijriCalendar.Unix.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\IdnMapping.Unix.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\JapaneseCalendar.Unix.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\LocaleData.Unix.cs" />
- <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\TextInfo.Unix.cs" />
- </ItemGroup>
- <ItemGroup>
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\AbandonedMutexException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\AsyncLocal.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\AutoResetEvent.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\SendOrPostCallback.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\SynchronizationContext.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\EventResetMode.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\EventWaitHandle.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ExecutionContext.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Interlocked.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\IObjectHandle.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\LockCookie.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\LockRecursionException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ManualResetEvent.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Monitor.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Mutex.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Overlapped.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ParameterizedThreadStart.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ReaderWriterLock.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Semaphore.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\SemaphoreFullException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\SynchronizationLockException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Thread.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ThreadAbortException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ThreadInterruptedException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ThreadPool.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ThreadPriority.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ThreadStart.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ThreadState.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ThreadStateException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\ThreadStaticAttribute.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ThreadStartException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Timeout.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Timer.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Volatile.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\WaitHandle.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\WaitHandleCannotBeOpenedException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ApartmentState.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\SpinLock.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\SpinWait.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\CountdownEvent.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\LazyInitializer.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ThreadLocal.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\SemaphoreSlim.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\ManualResetEventSlim.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\CancellationTokenRegistration.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\CancellationTokenSource.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\CancellationToken.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\future.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\FutureFactory.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\Parallel.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\ParallelRangeManager.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\ParallelLoopState.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\Task.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskContinuation.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskCanceledException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskSchedulerException.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskExceptionHolder.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskFactory.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskScheduler.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\ThreadPoolTaskScheduler.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskCompletionSource.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\AsyncCausalityTracer.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\ConcurrentExclusiveSchedulerPair.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\ProducerConsumerQueues.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TPLETWProvider.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\BeginEndAwaitableAdapter.cs" />
- <ThreadingSources Include="$(BclSourcesRoot)\System\Threading\Tasks\TaskToApm.cs" />
- <ThreadingSources Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\System\Threading\Tasks\IAsyncCausalityTracerStatics.cs" />
- </ItemGroup>
- <ItemGroup>
- <FileStreamSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.cs" />
- <FileStreamSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.NetStandard17.cs" />
- <FileStreamSources Include="$(CoreFxSourcesRoot)\System\IO\Error.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(TargetsUnix)' == 'true'">
- <SafehandleSources Include="$(CoreFxSourcesRoot)\Microsoft\Win32\SafeHandles\SafeFileHandle.Unix.cs" />
- <FileStreamSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.Unix.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(TargetsUnix)' != 'true'">
- <SafehandleSources Include="$(CoreFxSourcesRoot)\Microsoft\Win32\SafeHandles\SafeFileHandle.Windows.cs" />
- <FileStreamSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.Win32.cs" />
- <FileStreamSources Include="$(CoreFxSourcesRoot)\System\IO\FileStreamCompletionSource.Win32.cs" />
- <FileStreamSources Include="$(CoreFxSourcesRoot)\System\IO\Win32Marshal.cs" />
- </ItemGroup>
- <ItemGroup>
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\Path.cs" />
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\PathInternal.cs" />
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\PathInternal.CaseSensitivity.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(TargetsUnix)' == 'true'">
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\Path.Unix.cs" />
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\PathInternal.Unix.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(TargetsUnix)' != 'true'">
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\Path.Win32.cs" />
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\Path.Windows.cs" />
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\PathHelper.Windows.cs" />
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\PathInternal.Windows.cs" />
- <IoSources Include="$(CoreFxSourcesRoot)\System\IO\PathInternal.Windows.StringBuffer.cs" />
- </ItemGroup>
- <ItemGroup>
- <ThreadingSources Include="$(CoreFxSourcesRoot)\System\Threading\DeferredDisposableLifetime.cs" />
- <ThreadingSources Include="$(CoreFxSourcesRoot)\System\Threading\ClrThreadPoolBoundHandle.cs" />
- <ThreadingSources Include="$(CoreFxSourcesRoot)\System\Threading\ClrThreadPoolBoundHandleOverlapped.cs" />
- <ThreadingSources Include="$(CoreFxSourcesRoot)\System\Threading\ClrThreadPoolPreAllocatedOverlapped.cs" />
- </ItemGroup>
- <ItemGroup>
- <IoSources Include="$(BclSourcesRoot)\System\IO\__Error.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\__HResults.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\BinaryReader.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\BinaryWriter.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\Directory.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\DirectoryInfo.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\SearchOption.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\DirectoryNotFoundException.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\DriveNotFoundException.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\EncodingCache.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\EndOfStreamException.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\File.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileAccess.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileInfo.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileLoadException.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileMode.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileNotFoundException.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileOptions.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileShare.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileSystemEnumerable.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileSystemInfo.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\FileAttributes.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\IOException.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\MemoryStream.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\PathTooLongException.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\PinnedBufferMemoryStream.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\ReadLinesIterator.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\SeekOrigin.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\Stream.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\StreamHelpers.CopyValidation.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\StreamReader.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\StreamWriter.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\TextReader.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\TextWriter.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\UnmanagedMemoryAccessor.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\UnmanagedMemoryStream.cs" />
- <IoSources Include="$(BclSourcesRoot)\System\IO\UnmanagedMemoryStreamWrapper.cs" />
- </ItemGroup>
- <ItemGroup>
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\Attributes.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\BuiltInPermissionSets.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\CodeAccessPermission.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\CodeAccessSecurityEngine.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\IEvidenceFactory.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\IPermission.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\ISecurityEncodable.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\ISecurityPolicyEncodable.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\IStackWalk.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\FrameSecurityDescriptor.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\HostSecurityManager.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\NamedPermissionSet.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\PermissionSetEnumerator.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\PermissionSet.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\PermissionToken.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\PermissionSetTriple.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\PermissionListSet.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\SafeSecurityHandles.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\SecurityContext.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\SecurityException.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\SecurityState.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\HostProtectionException.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\SecurityManager.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\SecurityRuntime.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\SecurityZone.cs" />
- <SecuritySources Include="$(BclSourcesRoot)\System\Security\VerificationException.cs" />
- <SecuritySources Condition="'$(FeatureLegacySurface)' == 'true'" Include="$(BclSourcesRoot)\System\Security\securestring.cs" />
- </ItemGroup>
-
- <ItemGroup>
- <SecUtilSources Include="$(BclSourcesRoot)\System\Security\Util\Config.cs" />
- <SecUtilSources Include="$(BclSourcesRoot)\System\Security\Util\Hex.cs" />
- <SecUtilSources Include="$(BclSourcesRoot)\System\Security\Util\sitestring.cs" />
- <SecUtilSources Include="$(BclSourcesRoot)\System\Security\Util\StringExpressionSet.cs" />
- <SecUtilSources Include="$(BclSourcesRoot)\System\Security\Util\TokenBasedSet.cs" />
- <SecUtilSources Include="$(BclSourcesRoot)\System\Security\Util\TokenBasedSetEnumerator.cs" />
- <SecUtilSources Include="$(BclSourcesRoot)\System\Security\Util\URLString.cs" />
- <SecUtilSources Include="$(BclSourcesRoot)\System\Security\Util\XMLUtil.cs" />
- </ItemGroup>
- <ItemGroup>
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Assert.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\AssertFilter.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\AssertFilters.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\ConditionalAttribute.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Debugger.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\DebuggerAttributes.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\ICustomDebuggerNotification.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\log.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\LoggingLevels.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\LogSwitch.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Stacktrace.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Stackframe.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\EditAndContinueHelper.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\ActivityTracker.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventActivityOptions.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventDescriptor.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventProvider.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventSource.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventSource_CoreCLR.cs" />
- <DiagnosticsSources Condition="'$(FeatureXplatEventSource)' == 'true'" Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\XplatEventLogger.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\EventSourceException.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\FrameworkEventSource.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\StubEnvironment.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\Winmeta.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\ArrayTypeInfo.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\ConcurrentSet.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\ConcurrentSetItem.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\DataCollector.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EmptyStruct.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EnumerableTypeInfo.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EnumHelper.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventDataAttribute.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventFieldAttribute.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventFieldFormat.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventIgnoreAttribute.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventPayload.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventSourceActivity.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\EventSourceOptions.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\FieldMetadata.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\InvokeTypeInfo.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\NameInfo.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\PropertyValue.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\PropertyAnalysis.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\SimpleEventTypes.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\SimpleTypeInfos.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\Statics.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingDataCollector.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingDataType.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingEventSource.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingEventTraits.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingEventTypes.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingMetadataCollector.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TraceLoggingTypeInfo.cs" />
- <DiagnosticsSources Include="$(BclSourcesRoot)\System\Diagnostics\Eventing\TraceLogging\TypeAnalysis.cs" />
- </ItemGroup>
- <ItemGroup>
- <DiagnosticsCodeanalysisSources Include="$(BclSourcesRoot)\System\Diagnostics\CodeAnalysis\SuppressMessageAttribute.cs" />
- <DiagnosticsCodeanalysisSources Include="$(BclSourcesRoot)\System\Diagnostics\Contracts\Contracts.cs" />
- <DiagnosticsCodeanalysisSources Include="$(BclSourcesRoot)\System\Diagnostics\Contracts\ContractsBCL.cs" />
- </ItemGroup>
- <ItemGroup>
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymBinder.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymDocument.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymDocumentWriter.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymMethod.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymNamespace.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymReader.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymScope.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymVariable.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\ISymWriter.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\SymAddressKind.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\SymDocumentType.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\SymLanguageType.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\SymLanguageVendor.cs" />
- <DiagnosticsSymbolstoreSources Include="$(BclSourcesRoot)\System\Diagnostics\SymbolStore\Token.cs" />
- </ItemGroup>
- <ItemGroup>
- <ExceptionservicesSources Condition="'$(FeatureCorruptingExceptions)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\ExceptionServices\CorruptingExceptionCommon.cs" />
- <ExceptionservicesSources Condition="'$(FeatureExceptionDispatchInfo)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\ExceptionServices\ExceptionServicesCommon.cs" />
- <ExceptionservicesSources Condition="'$(FeatureExceptionNotifications)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\ExceptionServices\ExceptionNotification.cs" />
- </ItemGroup>
- <ItemGroup>
- <HostingSources Condition="'$(FeatureHostAssemblyResolver)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\Loader\AssemblyLoadContext.cs" />
- </ItemGroup>
- <ItemGroup>
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\FormatterConverter.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\FormatterServices.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\IDeserializationCallback.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\IFormatter.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\IFormatterConverter.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\IObjectReference.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\ISerializable.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\ISerializationSurrogate.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\ISurrogateSelector.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\MemberHolder.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationAttributes.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationBinder.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationException.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationFieldInfo.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationInfo.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationInfoEnumerator.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\StreamingContext.cs" />
- <SerializationSources Include="$(BclSourcesRoot)\System\Runtime\Serialization\SafeSerializationManager.cs" />
- </ItemGroup>
- <ItemGroup>
- <VersioningSources Include="$(BclSourcesRoot)\System\Runtime\Versioning\TargetFrameworkAttribute.cs" />
- <VersioningSources Include="$(BclSourcesRoot)\System\Runtime\Versioning\TargetFrameworkId.cs" />
- <VersioningSources Include="$(BclSourcesRoot)\System\Runtime\Versioning\CompatibilitySwitch.cs" />
- <VersioningSources Include="$(BclSourcesRoot)\System\Runtime\Versioning\NonVersionableAttribute.cs" />
- </ItemGroup>
-
- <ItemGroup>
- <ConfigurationAssembliesSources Include="$(BclSourcesRoot)\System\Configuration\Assemblies\AssemblyHash.cs" />
- <ConfigurationAssembliesSources Include="$(BclSourcesRoot)\System\Configuration\Assemblies\AssemblyHashAlgorithm.cs" />
- <ConfigurationAssembliesSources Include="$(BclSourcesRoot)\System\Configuration\Assemblies\AssemblyVersionCompatibility.cs" />
- </ItemGroup>
-
- <ItemGroup>
- <RemotingSources Include="$(BclSourcesRoot)\System\Runtime\Remoting\ObjectHandle.cs" />
- </ItemGroup>
- <ItemGroup>
- <TextSources Include="$(BclSourcesRoot)\System\Text\ASCIIEncoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\BaseCodePageEncoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\CodePageEncoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\Decoder.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\DecoderNLS.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\DecoderBestFitFallback.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\DecoderExceptionFallback.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\DecoderFallback.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\DecoderReplacementFallback.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\Encoder.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EncoderNLS.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EncoderBestFitFallback.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EncoderExceptionFallback.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EncoderFallback.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EncoderReplacementFallback.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\Encoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EncodingForwarder.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EncodingInfo.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EncodingNLS.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EncodingProvider.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\ISCIIEncoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\Latin1Encoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\MLangCodePageEncoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\Normalization.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\Normalization.Windows.cs" Condition="'$(TargetsUnix)' != 'true'"/>
- <TextSources Include="$(BclSourcesRoot)\System\Text\DBCSCodePageEncoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\SBCSCodePageEncoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\SurrogateEncoder.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\UnicodeEncoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\UTF7Encoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\UTF8Encoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\UTF32Encoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\GB18030Encoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\ISO2022Encoding.cs" />
- <TextSources Include="$(BclSourcesRoot)\System\Text\EUCJPEncoding.cs" />
- </ItemGroup>
- <ItemGroup>
- <SecurityAclSources Include="$(BclSourcesRoot)\System\Security\AccessControl\Enums.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureCasPolicy)' != 'true'">
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\ApplicationTrust.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\Evidence.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\EvidenceBase.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\EvidenceTypeDescriptor.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\IDelayEvaluatedEvidence.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\IIdentityPermissionFactory.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\IRuntimeEvidenceFactory.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\PolicyException.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\PolicyStatement.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\Site.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\StrongName.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\URL.cs" />
- <SecurityPolicySources Include="$(BclSourcesRoot)\System\Security\Policy\Zone.cs" />
- </ItemGroup>
- <ItemGroup>
- <XmlSources Include="$(BclSourcesRoot)\System\Security\SecurityElement.cs" />
- </ItemGroup>
- <ItemGroup>
- <Win32Sources Include="$(BclSourcesRoot)\Microsoft\Win32\UnsafeNativeMethods.cs" />
- <Win32Sources Include="$(BclSourcesRoot)\Microsoft\Win32\Win32Native.cs" />
- <Win32Sources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\Registry.cs" />
- <Win32Sources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryKey.cs" />
- <Win32Sources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryOptions.cs" />
- <Win32Sources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryValueKind.cs" />
- <Win32Sources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryView.cs" />
- <Win32Sources Condition="'$(FeatureClassicCominterop)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\OAVariantLib.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureClassicCominterop)' == 'true'" >
- <InteropTceadaptergenSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\TCEAdapterGen\EventProviderWriter.cs" />
- <InteropTceadaptergenSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\TCEAdapterGen\EventSinkHelperWriter.cs" />
- <InteropTceadaptergenSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\TCEAdapterGen\EventItfInfo.cs" />
- <InteropTceadaptergenSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\TCEAdapterGen\NameSpaceExtractor.cs" />
- <InteropTceadaptergenSources Include="$(BclSourcesRoot)\System\Runtime\InteropServices\TCEAdapterGen\TCEAdapterGenerator.cs" />
- </ItemGroup>
- <ItemGroup>
- <SecurityPrincipalSources Include="$(BclSourcesRoot)\System\Security\Principal\IIdentity.cs" />
- <SecurityPrincipalSources Include="$(BclSourcesRoot)\System\Security\Principal\IPrincipal.cs" />
- <SecurityPrincipalSources Include="$(BclSourcesRoot)\System\Security\Principal\TokenImpersonationLevel.cs" />
- </ItemGroup>
- <ItemGroup>
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\__FastResourceComparer.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\__HResults.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\FileBasedResourceGroveler.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\IResourceGroveler.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\IResourceReader.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\IResourceWriter.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\LooselyLinkedResourceReference.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\ManifestBasedResourceGroveler.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\MissingManifestResourceException.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\MissingSatelliteAssemblyException.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\NeutralResourcesLanguageAttribute.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\ResourceFallbackManager.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\ResourceManager.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\ResourceReader.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\ResourceSet.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\ResourceTypeCode.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\RuntimeResourceSet.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\SatelliteContractVersionAttribute.cs" />
- <ResourcesSources Include="$(BclSourcesRoot)\System\Resources\UltimateResourceFallbackLocation.cs" />
- </ItemGroup>
- <ItemGroup>
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\EnvironmentPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\FileDialogPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\FileIOPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\HostProtectionPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\IBuiltInPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\IsolatedStoragePermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\IsolatedStorageFilePermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\PermissionState.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\PermissionAttributes.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\ReflectionPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\SecurityPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\SiteIdentityPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\StrongNameIdentityPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\StrongNamePublicKeyBlob.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\UIPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\URLIdentityPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\ZoneIdentityPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\GACIdentityPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\IUnrestrictedPermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\keycontainerpermission.cs" />
- <PermissionsSources Include="$(BclSourcesRoot)\System\Security\Permissions\RegistryPermission.cs" />
- </ItemGroup>
- <ItemGroup>
- <GenericsSources Include="$(BclSourcesRoot)\System\Nullable.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\Comparer.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\Dictionary.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\EqualityComparer.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\DebugView.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\ICollection.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\IComparer.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\IDictionary.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\IEnumerable.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\IEnumerator.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\IEqualityComparer.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\IList.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\IReadOnlyCollection.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\IReadOnlyList.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\IReadOnlyDictionary.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\KeyNotFoundException.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\KeyValuePair.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\List.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Generic\ArraySortHelper.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\ObjectModel\Collection.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\ObjectModel\ReadOnlyCollection.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\ObjectModel\ReadOnlyDictionary.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\ObjectModel\KeyedCollection.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\ConcurrentStack.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\IProducerConsumerCollection.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\ConcurrentDictionary.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\ConcurrentQueue.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\Partitioner.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\OrderablePartitioner.cs" />
- <GenericsSources Include="$(BclSourcesRoot)\System\Collections\Concurrent\PartitionerStatic.cs" />
- </ItemGroup>
- <ItemGroup>
- <SafehandleSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeFileMappingHandle.cs" />
- <SafehandleSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeFindHandle.cs" />
- <SafehandleSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeLocalAllocHandle.cs" />
- <SafehandleSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeLibraryHandle.cs" />
- <SafehandleSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeViewOfFileHandle.cs" />
- <SafehandleSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeWaitHandle.cs" />
- <SafehandleSources Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\Win32SafeHandles.cs" />
- <SafehandleSources Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\SafeHandles\SafeRegistryHandle.cs" />
- </ItemGroup>
- <ItemGroup>
- <NumericsSources Include="$(BclSourcesRoot)\System\Numerics\Hashing\HashHelpers.cs" />
- </ItemGroup>
- <ItemGroup>
- <BuffersSources Include="$(CoreFxSourcesRoot)\System\Buffers\ArrayPool.cs" />
- <BuffersSources Include="$(CoreFxSourcesRoot)\System\Buffers\ArrayPoolEventSource.cs" />
- <BuffersSources Include="$(CoreFxSourcesRoot)\System\Buffers\ConfigurableArrayPool.cs" />
- <BuffersSources Include="$(CoreFxSourcesRoot)\System\Buffers\TlsOverPerCoreLockedStacksArrayPool.cs" />
- <BuffersSources Include="$(CoreFxSourcesRoot)\System\Buffers\TlsOverPerCoreLockedStacksArrayPool.Windows.cs" Condition="'$(TargetsUnix)' != 'true'" />
- <BuffersSources Include="$(CoreFxSourcesRoot)\System\Buffers\TlsOverPerCoreLockedStacksArrayPool.Unix.cs" Condition="'$(TargetsUnix)' == 'true'" />
- <BuffersSources Include="$(CoreFxSourcesRoot)\System\Buffers\Utilities.cs" />
- <SecuritySources Include="$(CoreFxSourcesRoot)\System\Security\CryptographicException.cs" />
- </ItemGroup>
- <ItemGroup Condition="'$(TargetsUnix)' != 'true'">
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\System\HResults.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\Interop.BOOL.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\Interop.Libraries.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\BCrypt\Interop.BCryptGenRandom.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\BCrypt\Interop.NTSTATUS.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.CancelIoEx.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.CloseHandle.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.CreateFile.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.Errors.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.FileTypes.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.FileOperations.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.FlushFileBuffers.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.FormatMessage.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.GetFileInformationByHandleEx.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.GetFileType_SafeHandle.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.GetFullPathNameW.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.GetLongPathNameW.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.GetTempFileNameW.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.GetTempPathW.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.LockFile.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.ReadFile_SafeHandle_IntPtr.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.ReadFile_SafeHandle_NativeOverlapped.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.SafeCreateFile.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.SECURITY_ATTRIBUTES.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.SecurityOptions.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.SetEndOfFile.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.SetErrorMode.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.SetFileInformationByHandle.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.SetFilePointerEx.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.UnsafeCreateFile.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.WriteFile_SafeHandle_IntPtr.cs" />
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.WriteFile_SafeHandle_NativeOverlapped.cs" />
- </ItemGroup>
-
- <ItemGroup>
- <SecuritySources Include="$(CoreFxSourcesRoot)\System\Security\SecureString.cs" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetsUnix)' != 'true'">
- <SecuritySources Include="$(CoreFxSourcesRoot)\System\Security\SafeBSTRHandle.cs" />
- <SecuritySources Include="$(CoreFxSourcesRoot)\System\Security\SecureString.Windows.cs" />
- <!-- Interop sources -->
- <SecuritySources Include="$(CoreFxSourcesRoot)\Interop\Windows\Crypt32\Interop.CryptProtectMemory.cs" />
- <SecuritySources Include="$(CoreFxSourcesRoot)\Interop\Windows\NtDll\Interop.ZeroMemory.cs" />
- <SecuritySources Include="$(CoreFxSourcesRoot)\Interop\Windows\mincore\Interop.WideCharToMultiByte.cs" />
- <SecuritySources Include="$(CoreFxSourcesRoot)\Interop\Windows\oleaut32\Interop.SysAllocStringLen.cs" />
- <SecuritySources Include="$(CoreFxSourcesRoot)\Interop\Windows\oleaut32\Interop.SysStringLen.cs" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetsUnix)' == 'true'">
- <SecuritySources Include="$(CoreFxSourcesRoot)\System\Security\SecureString.Unix.cs" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetsUnix)' == 'true'">
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\System\HResults.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\Interop.Errors.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\Interop.IOErrors.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\Interop.Libraries.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Close.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.GetCwd.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.GetUnixName.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Fcntl.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.FLock.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.FSync.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.FTruncate.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.LSeek.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.MksTemps.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Open.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.OpenFlags.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.PathConf.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Permissions.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.PosixFAdvise.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Read.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Stat.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Unlink.cs" />
- <UnixInteropSources Include="$(CoreFxSourcesRoot)\Interop\Unix\System.Native\Interop.Write.cs" />
- </ItemGroup>
- <ItemGroup>
- <WindowsInteropSources Include="$(CoreFxSourcesRoot)\Debug.cs" />
- </ItemGroup>
- <ItemGroup>
- <MscorlibSources Include="@(SystemSources)"/>
- <MscorlibSources Include="@(ThreadingSources)"/>
- <MscorlibSources Include="@(DeploymentSources)"/>
- <MscorlibSources Include="@(CollectionsSources)"/>
- <MscorlibSources Include="@(GenericsSources)"/>
- <MscorlibSources Include="@(DiagnosticsSources)"/>
- <MscorlibSources Include="@(DiagnosticsCodeanalysisSources)"/>
- <MscorlibSources Include="@(DiagnosticsSymbolstoreSources)"/>
- <MscorlibSources Include="@(ReflectionSources)"/>
- <MscorlibSources Include="@(ExceptionservicesSources)"/>
- <MscorlibSources Include="@(HostingSources)"/>
- <MscorlibSources Include="@(SerializationSources)"/>
- <MscorlibSources Include="@(GlobalizationSources)"/>
- <MscorlibSources Include="@(TextSources)"/>
- <MscorlibSources Include="@(ResourcesSources)"/>
- <MscorlibSources Include="@(Win32Sources)"/>
- <MscorlibSources Include="@(SafehandleSources)"/>
- <MscorlibSources Include="@(SecUtilSources)"/>
- <MscorlibSources Include="@(SecurityPolicySources)"/>
- <MscorlibSources Include="@(SecurityPrincipalSources)"/>
- <MscorlibSources Include="@(ReliabilitySources)"/>
- <MscorlibSources Include="@(InteropSources)"/>
- <MscorlibSources Include="@(InteropComtypesSources)"/>
- <MscorlibSources Include="@(InteropComeventsSources)"/>
- <MscorlibSources Include="@(InteropExpandoSources)"/>
- <MscorlibSources Include="@(InteropWinRTSources)"/>
- <MscorlibSources Include="@(WinRTTSources)"/>
- <MscorlibSources Include="@(WinRTCollectionSources)"/>
- <MscorlibSources Include="@(IoSources)"/>
- <MscorlibSources Include="@(FileStreamSources)"/>
- <MscorlibSources Include="@(CompilerServicesSources)"/>
- <MscorlibSources Include="@(RuntimeSources)"/>
- <MscorlibSources Include="@(XmlSources)"/>
- <MscorlibSources Include="@(PermissionsSources)"/>
- <MscorlibSources Include="@(SecuritySources)"/>
- <MscorlibSources Include="@(RemotingSources)"/>
- <MscorlibSources Include="@(IsostoreSources)"/>
- <MscorlibSources Include="@(SerializationFormattersSources)"/>
- <MscorlibSources Include="@(SerializationFormattersBinarySources)"/>
- <MscorlibSources Include="@(ReflectionEmitSources)"/>
- <MscorlibSources Include="@(ReflectionMetadataSources)"/>
- <MscorlibSources Include="@(ConfigurationAssembliesSources)"/>
- <MscorlibSources Include="@(SecCryptographySources)"/>
- <MscorlibSources Include="@(SecPublickeySources)"/>
- <MscorlibSources Include="@(InteropTceadaptergenSources)"/>
- <MscorlibSources Include="@(SecurityAclSources)"/>
- <MscorlibSources Include="@(IdentitySources)"/>
- <MscorlibSources Include="@(VersioningSources)"/>
- <MscorlibSources Include="@(DesignerServicesSources)"/>
- <MscorlibSources Include="@(InternalSources)"/>
- <MscorlibSources Include="@(NumericsSources)"/>
- <MscorlibSources Include="$(BclSourcesRoot)\GlobalSuppressions.cs"/>
- <MscorlibSources Include="@(BuffersSources)"/>
- <MscorlibSources Include="@(WindowsInteropSources)"/>
- <MscorlibSources Include="@(UnixInteropSources)"/>
- </ItemGroup>
-</Project>
diff --git a/src/mscorlib/ref/mscorlib.cs b/src/mscorlib/ref/mscorlib.cs
index da378777c9..680bf20675 100644
--- a/src/mscorlib/ref/mscorlib.cs
+++ b/src/mscorlib/ref/mscorlib.cs
@@ -115,9 +115,6 @@ namespace System
public static System.Runtime.Remoting.ObjectHandle CreateComInstanceFrom(string assemblyName, string typeName) { throw null; }
public static System.Runtime.Remoting.ObjectHandle CreateComInstanceFrom(string assemblyName, string typeName, byte[] hashValue, System.Configuration.Assemblies.AssemblyHashAlgorithm hashAlgorithm) { throw null; }
[System.Security.SecurityCriticalAttribute]
- public static System.Runtime.Remoting.ObjectHandle CreateInstance(System.AppDomain domain, string assemblyName, string typeName) { throw null; }
- [System.Security.SecurityCriticalAttribute]
- public static System.Runtime.Remoting.ObjectHandle CreateInstance(System.AppDomain domain, string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes) { throw null; }
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
[System.Security.SecuritySafeCriticalAttribute]
public static System.Runtime.Remoting.ObjectHandle CreateInstance(string assemblyName, string typeName) { throw null; }
@@ -139,9 +136,6 @@ namespace System
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
public static T CreateInstance<T>() { throw null; }
[System.Security.SecurityCriticalAttribute]
- public static System.Runtime.Remoting.ObjectHandle CreateInstanceFrom(System.AppDomain domain, string assemblyFile, string typeName) { throw null; }
- [System.Security.SecurityCriticalAttribute]
- public static System.Runtime.Remoting.ObjectHandle CreateInstanceFrom(System.AppDomain domain, string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes) { throw null; }
public static System.Runtime.Remoting.ObjectHandle CreateInstanceFrom(string assemblyFile, string typeName) { throw null; }
public static System.Runtime.Remoting.ObjectHandle CreateInstanceFrom(string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes) { throw null; }
public static System.Runtime.Remoting.ObjectHandle CreateInstanceFrom(string assemblyFile, string typeName, object[] activationAttributes) { throw null; }
@@ -180,56 +174,6 @@ namespace System
public static event System.EventHandler<System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs> FirstChanceException { add { } remove { } }
public static event System.EventHandler ProcessExit { add { } remove { } }
}
- [System.Runtime.InteropServices.ClassInterfaceAttribute((System.Runtime.InteropServices.ClassInterfaceType)(0))]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class AppDomain
- {
- internal AppDomain() { }
- public string BaseDirectory { [System.Security.SecurityCriticalAttribute]get { throw null; } }
- public static System.AppDomain CurrentDomain { get { throw null; } }
- public bool IsFullyTrusted { [System.Security.SecuritySafeCriticalAttribute]get { throw null; } }
- [System.Security.SecurityCriticalAttribute]
- public object GetData(string name) { throw null; }
- [System.Security.SecuritySafeCriticalAttribute]
- public override string ToString() { throw null; }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- [System.Security.SecurityCriticalAttribute]
- public partial class AppDomainManager
- {
- public AppDomainManager() { }
- public virtual bool CheckSecuritySettings(System.Security.SecurityState state) { throw null; }
- [System.Security.SecurityCriticalAttribute]
- public virtual void InitializeNewDomain(System.AppDomainSetup appDomainInfo) { }
- }
- [System.Runtime.InteropServices.ClassInterfaceAttribute((System.Runtime.InteropServices.ClassInterfaceType)(0))]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class AppDomainSetup
- {
- internal AppDomainSetup() { }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public partial class AppDomainUnloadedException : System.SystemException
- {
- public AppDomainUnloadedException() { }
- public AppDomainUnloadedException(string message) { }
- public AppDomainUnloadedException(string message, System.Exception innerException) { }
- protected AppDomainUnloadedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class ApplicationId
- {
- public ApplicationId(byte[] publicKeyToken, string name, System.Version version, string processorArchitecture, string culture) { }
- public string Culture { get { throw null; } }
- public string Name { get { throw null; } }
- public string ProcessorArchitecture { get { throw null; } }
- public byte[] PublicKeyToken { get { throw null; } }
- public System.Version Version { get { throw null; } }
- public System.ApplicationId Copy() { throw null; }
- public override bool Equals(object o) { throw null; }
- public override int GetHashCode() { throw null; }
- public override string ToString() { throw null; }
- }
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class ApplicationException : System.Exception
{
@@ -731,14 +675,6 @@ namespace System
public static bool TryParse(string s, System.Globalization.NumberStyles style, System.IFormatProvider provider, out System.Byte result) { result = default(byte); throw null; }
}
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public partial class CannotUnloadAppDomainException : System.SystemException
- {
- public CannotUnloadAppDomainException() { }
- public CannotUnloadAppDomainException(string message) { }
- public CannotUnloadAppDomainException(string message, System.Exception innerException) { }
- protected CannotUnloadAppDomainException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public partial struct Char : System.IComparable, System.IComparable<char>, System.IConvertible, System.IEquatable<char>
{
@@ -1947,13 +1883,11 @@ namespace System
public static bool HasShutdownStarted { [System.Security.SecuritySafeCriticalAttribute][System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]get { throw null; } }
public static string MachineName { [System.Security.SecuritySafeCriticalAttribute]get { throw null; } }
public static string NewLine { get { throw null; } }
- public static System.OperatingSystem OSVersion { [System.Security.SecuritySafeCriticalAttribute]get { throw null; } }
public static int ProcessorCount { [System.Security.SecuritySafeCriticalAttribute]get { throw null; } }
public static string StackTrace { [System.Security.SecuritySafeCriticalAttribute]get { throw null; } }
public static int TickCount { [System.Security.SecuritySafeCriticalAttribute][System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]get { throw null; } }
public static System.Version Version { get { throw null; } }
[System.Security.SecuritySafeCriticalAttribute]
- [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Flags=(System.Security.Permissions.SecurityPermissionFlag)(2))]
public static void Exit(int exitCode) { }
[System.Security.SecuritySafeCriticalAttribute]
public static string ExpandEnvironmentVariables(string name) { throw null; }
@@ -2480,32 +2414,6 @@ namespace System
public override string ToString() { throw null; }
}
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public enum LoaderOptimization
- {
- [System.ObsoleteAttribute("This method has been deprecated. Please use Assembly.Load() instead. http://go.microsoft.com/fwlink/?linkid=14202")]
- DisallowBindings = 4,
- [System.ObsoleteAttribute("This method has been deprecated. Please use Assembly.Load() instead. http://go.microsoft.com/fwlink/?linkid=14202")]
- DomainMask = 3,
- MultiDomain = 2,
- MultiDomainHost = 3,
- NotSpecified = 0,
- SingleDomain = 1,
- }
- [System.AttributeUsageAttribute((System.AttributeTargets)(64))]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class LoaderOptimizationAttribute : System.Attribute
- {
- public LoaderOptimizationAttribute(byte value) { }
- public LoaderOptimizationAttribute(System.LoaderOptimization value) { }
- public System.LoaderOptimization Value { get { throw null; } }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class LocalDataStoreSlot
- {
- internal LocalDataStoreSlot() { }
- ~LocalDataStoreSlot() { }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
public abstract partial class MarshalByRefObject
{
protected MarshalByRefObject() { }
@@ -2904,19 +2812,6 @@ namespace System
public string Message { get { throw null; } }
}
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class OperatingSystem : System.ICloneable, System.Runtime.Serialization.ISerializable
- {
- public OperatingSystem(System.PlatformID platform, System.Version version) { }
- public System.PlatformID Platform { get { throw null; } }
- public string ServicePack { get { throw null; } }
- public System.Version Version { get { throw null; } }
- public string VersionString { get { throw null; } }
- public object Clone() { throw null; }
- [System.Security.SecurityCriticalAttribute]
- public void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) { }
- public override string ToString() { throw null; }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class OperationCanceledException : System.SystemException
{
public OperationCanceledException() { }
@@ -2951,17 +2846,6 @@ namespace System
public ParamArrayAttribute() { }
}
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public enum PlatformID
- {
- MacOSX = 6,
- Unix = 4,
- Win32NT = 2,
- Win32S = 0,
- Win32Windows = 1,
- WinCE = 3,
- Xbox = 5,
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class PlatformNotSupportedException : System.NotSupportedException
{
public PlatformNotSupportedException() { }
@@ -3419,7 +3303,9 @@ namespace System
public System.String Trim() { throw null; }
public System.String Trim(params char[] trimChars) { throw null; }
public System.String TrimEnd(params char[] trimChars) { throw null; }
+ public System.String TrimEnd() { throw null; }
public System.String TrimStart(params char[] trimChars) { throw null; }
+ public System.String TrimStart() { throw null; }
}
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public abstract partial class StringComparer : System.Collections.Generic.IComparer<string>, System.Collections.Generic.IEqualityComparer<string>, System.Collections.IComparer, System.Collections.IEqualityComparer
@@ -6937,43 +6823,6 @@ namespace System.IO
public virtual void WriteByte(byte value) { }
}
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public partial class StreamReader : System.IO.TextReader
- {
- public static readonly new System.IO.StreamReader Null;
- public StreamReader(System.IO.Stream stream) { }
- public StreamReader(System.IO.Stream stream, bool detectEncodingFromByteOrderMarks) { }
- public StreamReader(System.IO.Stream stream, System.Text.Encoding encoding) { }
- public StreamReader(System.IO.Stream stream, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks) { }
- public StreamReader(System.IO.Stream stream, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) { }
- public StreamReader(System.IO.Stream stream, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize, bool leaveOpen) { }
- public StreamReader(string path) { }
- public StreamReader(string path, bool detectEncodingFromByteOrderMarks) { }
- public StreamReader(string path, System.Text.Encoding encoding) { }
- public StreamReader(string path, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks) { }
- [System.Security.SecuritySafeCriticalAttribute]
- public StreamReader(string path, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) { }
- public virtual System.IO.Stream BaseStream { get { throw null; } }
- public virtual System.Text.Encoding CurrentEncoding { get { throw null; } }
- public bool EndOfStream { get { throw null; } }
- public override void Close() { }
- public void DiscardBufferedData() { }
- protected override void Dispose(bool disposing) { }
- public override int Peek() { throw null; }
- public override int Read() { throw null; }
- public override int Read(char[] buffer, int index, int count) { buffer = default(char[]); throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public override System.Threading.Tasks.Task<int> ReadAsync(char[] buffer, int index, int count) { throw null; }
- public override int ReadBlock(char[] buffer, int index, int count) { buffer = default(char[]); throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public override System.Threading.Tasks.Task<int> ReadBlockAsync(char[] buffer, int index, int count) { throw null; }
- public override string ReadLine() { throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public override System.Threading.Tasks.Task<string> ReadLineAsync() { throw null; }
- public override string ReadToEnd() { throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public override System.Threading.Tasks.Task<string> ReadToEndAsync() { throw null; }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class StreamWriter : System.IO.TextWriter
{
public static readonly new System.IO.StreamWriter Null;
@@ -7014,26 +6863,6 @@ namespace System.IO
public override System.Threading.Tasks.Task WriteLineAsync(string value) { throw null; }
}
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public partial class StringReader : System.IO.TextReader
- {
- public StringReader(string s) { }
- public override void Close() { }
- protected override void Dispose(bool disposing) { }
- public override int Peek() { throw null; }
- public override int Read() { throw null; }
- public override int Read(char[] buffer, int index, int count) { buffer = default(char[]); throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public override System.Threading.Tasks.Task<int> ReadAsync(char[] buffer, int index, int count) { throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public override System.Threading.Tasks.Task<int> ReadBlockAsync(char[] buffer, int index, int count) { throw null; }
- public override string ReadLine() { throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public override System.Threading.Tasks.Task<string> ReadLineAsync() { throw null; }
- public override string ReadToEnd() { throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public override System.Threading.Tasks.Task<string> ReadToEndAsync() { throw null; }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class StringWriter : System.IO.TextWriter
{
public StringWriter() { }
@@ -7064,31 +6893,6 @@ namespace System.IO
public override System.Threading.Tasks.Task WriteLineAsync(string value) { throw null; }
}
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public abstract partial class TextReader : System.IDisposable
- {
- public static readonly System.IO.TextReader Null;
- protected TextReader() { }
- public virtual void Close() { }
- public void Dispose() { }
- protected virtual void Dispose(bool disposing) { }
- public virtual int Peek() { throw null; }
- public virtual int Read() { throw null; }
- public virtual int Read(char[] buffer, int index, int count) { buffer = default(char[]); throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public virtual System.Threading.Tasks.Task<int> ReadAsync(char[] buffer, int index, int count) { throw null; }
- public virtual int ReadBlock(char[] buffer, int index, int count) { buffer = default(char[]); throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public virtual System.Threading.Tasks.Task<int> ReadBlockAsync(char[] buffer, int index, int count) { throw null; }
- public virtual string ReadLine() { throw null; }
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public virtual System.Threading.Tasks.Task<string> ReadLineAsync() { throw null; }
- public virtual string ReadToEnd() { throw null; }
- [System.Diagnostics.DebuggerStepThroughAttribute]
- [System.Runtime.InteropServices.ComVisibleAttribute(false)]
- public virtual System.Threading.Tasks.Task<string> ReadToEndAsync() { throw null; }
- public static System.IO.TextReader Synchronized(System.IO.TextReader reader) { throw null; }
- }
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
public abstract partial class TextWriter : System.IDisposable
{
protected char[] CoreNewLine;
@@ -7177,7 +6981,6 @@ namespace System.IO
public void Dispose() { }
protected virtual void Dispose(bool disposing) { }
[System.Security.SecuritySafeCriticalAttribute]
- [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Flags=(System.Security.Permissions.SecurityPermissionFlag)(2))]
protected void Initialize(System.Runtime.InteropServices.SafeBuffer buffer, long offset, long capacity, System.IO.FileAccess access) { }
[System.Security.SecurityCriticalAttribute]
public void Read<T>(long position, out T structure) where T : struct { structure = default(T); throw null; }
@@ -10454,13 +10257,6 @@ namespace System.Runtime.InteropServices
{
public AllowReversePInvokeCallsAttribute() { }
}
- [System.AttributeUsageAttribute((System.AttributeTargets)(1029), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class AutomationProxyAttribute : System.Attribute
- {
- public AutomationProxyAttribute(bool val) { }
- public bool Value { get { throw null; } }
- }
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public partial struct ArrayWithOffset
@@ -10487,10 +10283,8 @@ namespace System.Runtime.InteropServices
public sealed partial class BStrWrapper
{
[System.Security.SecuritySafeCriticalAttribute]
- [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Flags=(System.Security.Permissions.SecurityPermissionFlag)(2))]
public BStrWrapper(object value) { }
[System.Security.SecuritySafeCriticalAttribute]
- [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Flags=(System.Security.Permissions.SecurityPermissionFlag)(2))]
public BStrWrapper(string value) { }
public string WrappedObject { get { throw null; } }
}
@@ -10533,29 +10327,6 @@ namespace System.Runtime.InteropServices
public CoClassAttribute(System.Type coClass) { }
public System.Type CoClass { get { throw null; } }
}
- [System.AttributeUsageAttribute((System.AttributeTargets)(10624), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class ComAliasNameAttribute : System.Attribute
- {
- public ComAliasNameAttribute(String val) { }
- public String Value { get { throw null; } }
- }
- [System.AttributeUsageAttribute((System.AttributeTargets)(1), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class ComCompatibleVersionAttribute : System.Attribute
- {
- public ComCompatibleVersionAttribute(System.Int32 major, System.Int32 minor, System.Int32 build, System.Int32 revision) { }
- public System.Int32 MajorVersion { get { throw null; } }
- public System.Int32 MinorVersion { get { throw null; } }
- public System.Int32 BuildNumber { get { throw null;} }
- public System.Int32 RevisionNumber { get { throw null; } }
- }
- [System.AttributeUsageAttribute((System.AttributeTargets)(32767), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class ComConversionLossAttribute : Attribute
- {
- public ComConversionLossAttribute() { }
- }
[System.AttributeUsageAttribute((System.AttributeTargets)(4), Inherited=false)]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public sealed partial class ComDefaultInterfaceAttribute : System.Attribute
@@ -10563,14 +10334,6 @@ namespace System.Runtime.InteropServices
public ComDefaultInterfaceAttribute(System.Type defaultInterface) { }
public System.Type Value { get { throw null; } }
}
- [System.AttributeUsageAttribute((System.AttributeTargets)(1024), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class ComEventInterfaceAttribute : System.Attribute
- {
- public ComEventInterfaceAttribute(System.Type SourceInterface, System.Type EventProvider) { }
- public System.Type EventProvider { get { throw null; } }
- public System.Type SourceInterface { get { throw null; } }
- }
public static partial class ComEventsHelper
{
[System.Security.SecurityCriticalAttribute]
@@ -10610,12 +10373,6 @@ namespace System.Runtime.InteropServices
PropGet = 1,
PropSet = 2,
}
- [System.AttributeUsageAttribute((System.AttributeTargets)(64), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class ComRegisterFunctionAttribute : Attribute
- {
- public ComRegisterFunctionAttribute() { }
- }
[System.AttributeUsageAttribute((System.AttributeTargets)(4), Inherited=true)]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public sealed partial class ComSourceInterfacesAttribute : System.Attribute
@@ -10627,12 +10384,6 @@ namespace System.Runtime.InteropServices
public ComSourceInterfacesAttribute(System.Type sourceInterface1, System.Type sourceInterface2, System.Type sourceInterface3, System.Type sourceInterface4) { }
public string Value { get { throw null; } }
}
- [System.AttributeUsageAttribute((System.AttributeTargets)(64), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class ComUnregisterFunctionAttribute : Attribute
- {
- public ComUnregisterFunctionAttribute() { }
- }
[System.AttributeUsageAttribute((System.AttributeTargets)(5597), Inherited=false)]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public sealed partial class ComVisibleAttribute : System.Attribute
@@ -10695,7 +10446,6 @@ namespace System.Runtime.InteropServices
public sealed partial class DispatchWrapper
{
[System.Security.SecuritySafeCriticalAttribute]
- [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Flags=(System.Security.Permissions.SecurityPermissionFlag)(2))]
public DispatchWrapper(object obj) { }
public object WrappedObject { get { throw null; } }
}
@@ -10736,7 +10486,6 @@ namespace System.Runtime.InteropServices
public sealed partial class ErrorWrapper
{
[System.Security.SecuritySafeCriticalAttribute]
- [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Flags=(System.Security.Permissions.SecurityPermissionFlag)(2))]
public ErrorWrapper(System.Exception e) { }
public ErrorWrapper(int errorCode) { }
public ErrorWrapper(object errorCode) { }
@@ -10835,13 +10584,6 @@ namespace System.Runtime.InteropServices
[System.Security.SecurityCriticalAttribute]
System.Runtime.InteropServices.CustomQueryInterfaceResult GetInterface(ref System.Guid iid, out System.IntPtr ppv);
}
- [System.AttributeUsageAttribute((System.AttributeTargets)(1), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class ImportedFromTypeLibAttribute : System.Attribute
- {
- public ImportedFromTypeLibAttribute(String val) { }
- public String Value { get { throw null; } }
- }
[System.AttributeUsageAttribute((System.AttributeTargets)(2048), Inherited=false)]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public sealed partial class InAttribute : System.Attribute
@@ -10885,7 +10627,7 @@ namespace System.Runtime.InteropServices
{
public LCIDConversionAttribute(System.Int32 val) { }
public System.Int32 Value { get { throw null; } }
- }
+ }
[System.Security.SecurityCriticalAttribute]
public static partial class Marshal
{
@@ -11181,14 +10923,6 @@ namespace System.Runtime.InteropServices
[System.Security.SecurityCriticalAttribute]
public static void ZeroFreeGlobalAllocUnicode(System.IntPtr s) { }
}
- [System.AttributeUsageAttribute((System.AttributeTargets)(64), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class ManagedToNativeComInteropStubAttribute : System.Attribute
- {
- public ManagedToNativeComInteropStubAttribute(System.Type classType, System.String methodName) { }
- public System.Type ClassType { get { throw null; } }
- public System.String MethodName { get { throw null; } }
- }
[System.AttributeUsageAttribute((System.AttributeTargets)(10496), Inherited=false)]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public sealed partial class MarshalAsAttribute : System.Attribute
@@ -11241,21 +10975,13 @@ namespace System.Runtime.InteropServices
{
public PreserveSigAttribute() { }
}
- [System.AttributeUsageAttribute((System.AttributeTargets)(1), Inherited=false, AllowMultiple = true)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class PrimaryInteropAssemblyAttribute : System.Attribute
- {
- public PrimaryInteropAssemblyAttribute(System.Int32 major, System.Int32 minor) { }
- public System.Int32 MajorVersion { get { throw null; } }
- public System.Int32 MinorVersion { get { throw null; } }
- }
[System.AttributeUsageAttribute((System.AttributeTargets)(4), Inherited=false)]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public sealed partial class ProgIdAttribute : System.Attribute
{
public ProgIdAttribute(String val) { }
public String Value { get { throw null; } }
- }
+ }
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class SafeArrayRankMismatchException : System.SystemException
{
@@ -11350,21 +11076,6 @@ namespace System.Runtime.InteropServices
public string Identifier { get { throw null; } }
public string Scope { get { throw null; } }
}
- [System.AttributeUsageAttribute((System.AttributeTargets)(1024), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class TypeLibImportClassAttribute : System.Attribute
- {
- public TypeLibImportClassAttribute(System.Type val) { }
- public String Value { get { throw null; } }
- }
- [System.AttributeUsageAttribute((System.AttributeTargets)(1), Inherited=false)]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class TypeLibVersionAttribute : System.Attribute
- {
- public TypeLibVersionAttribute(System.Int32 major, System.Int32 minor) { }
- public System.Int32 MajorVersion { get { throw null; } }
- public System.Int32 MinorVersion { get { throw null; } }
- }
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public sealed partial class UnknownWrapper
{
@@ -12405,80 +12116,6 @@ namespace System.Security
protected VerificationException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
}
}
-namespace System.Security.Permissions
-{
- [System.AttributeUsageAttribute((System.AttributeTargets)(109), AllowMultiple=true, Inherited=false)]
- [System.ObsoleteAttribute("CodeAccessSecurityAttribute is no longer accessible to application code.")]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public abstract partial class CodeAccessSecurityAttribute : System.Security.Permissions.SecurityAttribute
- {
- protected CodeAccessSecurityAttribute(System.Security.Permissions.SecurityAction action) : base (default(System.Security.Permissions.SecurityAction)) { }
- }
- [System.ObsoleteAttribute("SecurityAction is no longer accessible to application code.")]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public enum SecurityAction
- {
- Assert = 3,
- Demand = 2,
- [System.ObsoleteAttribute("Deny is obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- Deny = 4,
- InheritanceDemand = 7,
- LinkDemand = 6,
- PermitOnly = 5,
- [System.ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- RequestMinimum = 8,
- [System.ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- RequestOptional = 9,
- [System.ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- RequestRefuse = 10,
- }
- [System.AttributeUsageAttribute((System.AttributeTargets)(109), AllowMultiple=true, Inherited=false)]
- [System.ObsoleteAttribute("SecurityAttribute is no longer accessible to application code.")]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public abstract partial class SecurityAttribute : System.Attribute
- {
- protected SecurityAttribute(System.Security.Permissions.SecurityAction action) { }
- public System.Security.Permissions.SecurityAction Action { get { throw null; } set { } }
- public bool Unrestricted { get { throw null; } set { } }
- }
- [System.AttributeUsageAttribute((System.AttributeTargets)(109), AllowMultiple=true, Inherited=false)]
- [System.ObsoleteAttribute("SecurityPermissionAttribute is no longer accessible to application code.")]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public sealed partial class SecurityPermissionAttribute : System.Security.Permissions.CodeAccessSecurityAttribute
- {
- public SecurityPermissionAttribute(System.Security.Permissions.SecurityAction action) : base (default(System.Security.Permissions.SecurityAction)) { }
- public bool ControlAppDomain { get { throw null; } set { } }
- public bool ControlDomainPolicy { get { throw null; } set { } }
- public bool ControlEvidence { get { throw null; } set { } }
- public bool ControlPolicy { get { throw null; } set { } }
- public bool ControlThread { get { throw null; } set { } }
- public System.Security.Permissions.SecurityPermissionFlag Flags { get { throw null; } set { } }
- public bool SkipVerification { get { throw null; } set { } }
- public bool UnmanagedCode { get { throw null; } set { } }
- }
- [System.FlagsAttribute]
- [System.ObsoleteAttribute("SecurityPermissionFlag is no longer accessible to application code.")]
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public enum SecurityPermissionFlag
- {
- AllFlags = 16383,
- Assertion = 1,
- BindingRedirects = 8192,
- ControlAppDomain = 1024,
- ControlDomainPolicy = 256,
- ControlEvidence = 32,
- ControlPolicy = 64,
- ControlPrincipal = 512,
- ControlThread = 16,
- Execution = 8,
- Infrastructure = 4096,
- NoFlags = 0,
- RemotingConfiguration = 2048,
- SerializationFormatter = 128,
- SkipVerification = 4,
- UnmanagedCode = 2,
- }
-}
namespace System.Security.Principal
{
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
@@ -13535,7 +13172,6 @@ namespace System.Threading
public new string Name { get { throw null; } [System.Security.SecuritySafeCriticalAttribute]set { } }
~Thread() { }
[System.Security.SecuritySafeCriticalAttribute]
- public static System.AppDomain GetDomain() { throw null; }
[System.Runtime.InteropServices.ComVisibleAttribute(false)]
public override int GetHashCode() { throw null; }
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
@@ -13582,7 +13218,6 @@ namespace System.Threading
public static partial class ThreadPool
{
[System.Security.SecurityCriticalAttribute]
- [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Flags=(System.Security.Permissions.SecurityPermissionFlag)(2))]
public static bool BindHandle(System.Runtime.InteropServices.SafeHandle osHandle) { throw null; }
[System.Security.SecuritySafeCriticalAttribute]
public static void GetMaxThreads(out int workerThreads, out int completionPortThreads) { workerThreads = default(int); completionPortThreads = default(int); }
@@ -13602,10 +13237,8 @@ namespace System.Threading
[System.Security.SecuritySafeCriticalAttribute]
public static System.Threading.RegisteredWaitHandle RegisterWaitForSingleObject(System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce) { throw null; }
[System.Security.SecurityCriticalAttribute]
- [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, ControlThread=true)]
public static bool SetMaxThreads(int workerThreads, int completionPortThreads) { throw null; }
[System.Security.SecurityCriticalAttribute]
- [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, ControlThread=true)]
public static bool SetMinThreads(int workerThreads, int completionPortThreads) { throw null; }
}
public enum ThreadPriority
diff --git a/src/mscorlib/src/CleanupToDoList.cs b/src/mscorlib/src/CleanupToDoList.cs
new file mode 100644
index 0000000000..f07d23f8ae
--- /dev/null
+++ b/src/mscorlib/src/CleanupToDoList.cs
@@ -0,0 +1,27 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+//
+// Stubbed out types to be cleanup from CoreLib
+//
+
+namespace System.Security
+{
+ internal enum SecurityContextSource
+ {
+ CurrentAppDomain = 0,
+ CurrentAssembly
+ }
+}
+
+namespace System.Security.Policy
+{
+ internal sealed class Evidence
+ {
+ }
+
+ internal sealed class ApplicationTrust
+ {
+ }
+}
diff --git a/src/mscorlib/src/Internal/Runtime/Augments/RuntimeThread.cs b/src/mscorlib/src/Internal/Runtime/Augments/RuntimeThread.cs
index 3aafe01a2c..58eff98dec 100644
--- a/src/mscorlib/src/Internal/Runtime/Augments/RuntimeThread.cs
+++ b/src/mscorlib/src/Internal/Runtime/Augments/RuntimeThread.cs
@@ -9,13 +9,14 @@ using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Security;
-using System.Security.Permissions;
using System.Threading;
namespace Internal.Runtime.Augments
{
public class RuntimeThread : CriticalFinalizerObject
{
+ internal RuntimeThread() {}
+
public static RuntimeThread Create(ThreadStart start) => new Thread(start);
public static RuntimeThread Create(ThreadStart start, int maxStackSize) => new Thread(start, maxStackSize);
public static RuntimeThread Create(ParameterizedThreadStart start) => new Thread(start);
@@ -147,11 +148,9 @@ namespace Internal.Runtime.Augments
#endif // FEATURE_COMINTEROP_APARTMENT_SUPPORT
#if FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImpl(MethodImplOptions.InternalCall)]
public extern void DisableComObjectEagerCleanup();
#else // !FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void DisableComObjectEagerCleanup()
{
Debug.Assert(false); // the Thread class in CoreFX should have handled this case
@@ -163,8 +162,6 @@ namespace Internal.Runtime.Augments
** thread is not currently blocked in that manner, it will be interrupted
** when it next begins to block.
=========================================================================*/
-#pragma warning disable 618 // obsolete types: SecurityPermissionAttribute, SecurityAction
-#pragma warning restore 618 // obsolete types: SecurityPermissionAttribute, SecurityAction
public void Interrupt() => InterruptInternal();
// Internal helper (since we can't place security demands on
diff --git a/src/mscorlib/src/Microsoft/Win32/Registry.cs b/src/mscorlib/src/Microsoft/Win32/Registry.cs
index 3ee5f4648b..bf4f73949a 100644
--- a/src/mscorlib/src/Microsoft/Win32/Registry.cs
+++ b/src/mscorlib/src/Microsoft/Win32/Registry.cs
@@ -15,8 +15,7 @@ namespace Microsoft.Win32 {
* @security(checkClassLinking=on)
*/
//This class contains only static members and does not need to be serializable.
- [ComVisible(true)]
- public static class Registry {
+ internal static class Registry {
static Registry()
{
}
@@ -130,24 +129,6 @@ namespace Microsoft.Win32 {
key.Close();
}
}
-
- public static void SetValue(string keyName, string valueName, object value ) {
- SetValue(keyName, valueName, value, RegistryValueKind.Unknown);
- }
-
- public static void SetValue(string keyName, string valueName, object value, RegistryValueKind valueKind ) {
- string subKeyName;
- RegistryKey basekey = GetBaseKeyFromKeyName(keyName, out subKeyName);
- BCLDebug.Assert(basekey != null, "basekey can't be null!");
- RegistryKey key = basekey.CreateSubKey(subKeyName);
- BCLDebug.Assert(key != null, "An exception should be thrown if failed!");
- try {
- key.SetValue(valueName, value, valueKind);
- }
- finally {
- key.Close();
- }
- }
}
}
diff --git a/src/mscorlib/src/Microsoft/Win32/RegistryKey.cs b/src/mscorlib/src/Microsoft/Win32/RegistryKey.cs
index ff678f132c..f82b276059 100644
--- a/src/mscorlib/src/Microsoft/Win32/RegistryKey.cs
+++ b/src/mscorlib/src/Microsoft/Win32/RegistryKey.cs
@@ -55,7 +55,6 @@ namespace Microsoft.Win32
using System.Collections;
using System.Collections.Generic;
using System.Security;
- using System.Security.Permissions;
using System.Text;
using System.Threading;
using System.IO;
@@ -68,21 +67,6 @@ namespace Microsoft.Win32
using System.Diagnostics.CodeAnalysis;
/**
- * Registry hive values. Useful only for GetRemoteBaseKey
- */
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum RegistryHive
- {
- ClassesRoot = unchecked((int)0x80000000),
- CurrentUser = unchecked((int)0x80000001),
- LocalMachine = unchecked((int)0x80000002),
- Users = unchecked((int)0x80000003),
- PerformanceData = unchecked((int)0x80000004),
- CurrentConfig = unchecked((int)0x80000005),
- }
-
- /**
* Registry encapsulation. To get an instance of a RegistryKey use the
* Registry class's static members then call OpenSubKey.
*
@@ -90,8 +74,7 @@ namespace Microsoft.Win32
* @security(checkDllCalls=off)
* @security(checkClassLinking=on)
*/
- [ComVisible(true)]
- public sealed class RegistryKey : MarshalByRefObject, IDisposable
+ internal sealed class RegistryKey : MarshalByRefObject, IDisposable
{
// We could use const here, if C# supported ELEMENT_TYPE_I fully.
@@ -168,17 +151,6 @@ namespace Microsoft.Win32
* Creates a RegistryKey.
*
* This key is bound to hkey, if writable is <b>false</b> then no write operations
- * will be allowed.
- */
- private RegistryKey(SafeRegistryHandle hkey, bool writable, RegistryView view)
- : this(hkey, writable, false, false, false, view) {
- }
-
-
- /**
- * Creates a RegistryKey.
- *
- * This key is bound to hkey, if writable is <b>false</b> then no write operations
* will be allowed. If systemkey is set then the hkey won't be released
* when the object is GC'ed.
* The remoteKey flag when set to true indicates that we are dealing with registry entries
@@ -239,262 +211,11 @@ namespace Microsoft.Win32
}
}
- public void Flush() {
- if (hkey != null) {
- if (IsDirty()) {
- Win32Native.RegFlushKey(hkey);
- }
- }
- }
-
void IDisposable.Dispose()
{
Dispose(true);
}
- /**
- * Creates a new subkey, or opens an existing one.
- *
- * @param subkey Name or path to subkey to create or open.
- *
- * @return the subkey, or <b>null</b> if the operation failed.
- */
- [SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "Reviewed for thread safety")]
- public RegistryKey CreateSubKey(String subkey) {
- return CreateSubKey(subkey, checkMode);
- }
-
- [ComVisible(false)]
- public RegistryKey CreateSubKey(String subkey, RegistryKeyPermissionCheck permissionCheck)
- {
- return CreateSubKeyInternal(subkey, permissionCheck, null, RegistryOptions.None);
- }
-
- [ComVisible(false)]
- public RegistryKey CreateSubKey(String subkey, RegistryKeyPermissionCheck permissionCheck, RegistryOptions options)
- {
- return CreateSubKeyInternal(subkey, permissionCheck, null, options);
- }
-
- [ComVisible(false)]
- public RegistryKey CreateSubKey(String subkey, bool writable)
- {
- return CreateSubKeyInternal(subkey, writable ? RegistryKeyPermissionCheck.ReadWriteSubTree : RegistryKeyPermissionCheck.ReadSubTree, null, RegistryOptions.None);
- }
-
- [ComVisible(false)]
- public RegistryKey CreateSubKey(String subkey, bool writable, RegistryOptions options)
- {
- return CreateSubKeyInternal(subkey, writable ? RegistryKeyPermissionCheck.ReadWriteSubTree : RegistryKeyPermissionCheck.ReadSubTree, null, options);
- }
-
- [ComVisible(false)]
- private unsafe RegistryKey CreateSubKeyInternal(String subkey, RegistryKeyPermissionCheck permissionCheck, object registrySecurityObj, RegistryOptions registryOptions)
- {
- ValidateKeyOptions(registryOptions);
- ValidateKeyName(subkey);
- ValidateKeyMode(permissionCheck);
- EnsureWriteable();
- subkey = FixupName(subkey); // Fixup multiple slashes to a single slash
-
- // only keys opened under read mode is not writable
- if (!remoteKey) {
- RegistryKey key = InternalOpenSubKey(subkey, (permissionCheck != RegistryKeyPermissionCheck.ReadSubTree));
- if (key != null) { // Key already exits
- CheckPermission(RegistryInternalCheck.CheckSubKeyWritePermission, subkey, false, RegistryKeyPermissionCheck.Default);
- CheckPermission(RegistryInternalCheck.CheckSubTreePermission, subkey, false, permissionCheck);
- key.checkMode = permissionCheck;
- return key;
- }
- }
-
- CheckPermission(RegistryInternalCheck.CheckSubKeyCreatePermission, subkey, false, RegistryKeyPermissionCheck.Default);
-
- Win32Native.SECURITY_ATTRIBUTES secAttrs = null;
-
- int disposition = 0;
-
- // By default, the new key will be writable.
- SafeRegistryHandle result = null;
- int ret = Win32Native.RegCreateKeyEx(hkey,
- subkey,
- 0,
- null,
- (int)registryOptions /* specifies if the key is volatile */,
- GetRegistryKeyAccess(permissionCheck != RegistryKeyPermissionCheck.ReadSubTree) | (int)regView,
- secAttrs,
- out result,
- out disposition);
-
- if (ret == 0 && !result.IsInvalid) {
- RegistryKey key = new RegistryKey(result, (permissionCheck != RegistryKeyPermissionCheck.ReadSubTree), false, remoteKey, false, regView);
- CheckPermission(RegistryInternalCheck.CheckSubTreePermission, subkey, false, permissionCheck);
- key.checkMode = permissionCheck;
-
- if (subkey.Length == 0)
- key.keyName = keyName;
- else
- key.keyName = keyName + "\\" + subkey;
- return key;
- }
- else if (ret != 0) // syscall failed, ret is an error code.
- Win32Error(ret, keyName + "\\" + subkey); // Access denied?
-
- BCLDebug.Assert(false, "Unexpected code path in RegistryKey::CreateSubKey");
- return null;
- }
-
- /**
- * Deletes the specified subkey. Will throw an exception if the subkey has
- * subkeys. To delete a tree of subkeys use, DeleteSubKeyTree.
- *
- * @param subkey SubKey to delete.
- *
- * @exception InvalidOperationException thrown if the subkey has child subkeys.
- */
- public void DeleteSubKey(String subkey) {
- DeleteSubKey(subkey, true);
- }
-
- public void DeleteSubKey(String subkey, bool throwOnMissingSubKey) {
- ValidateKeyName(subkey);
- EnsureWriteable();
- subkey = FixupName(subkey); // Fixup multiple slashes to a single slash
- CheckPermission(RegistryInternalCheck.CheckSubKeyWritePermission, subkey, false, RegistryKeyPermissionCheck.Default);
-
- // Open the key we are deleting and check for children. Be sure to
- // explicitly call close to avoid keeping an extra HKEY open.
- //
- RegistryKey key = InternalOpenSubKey(subkey,false);
- if (key != null) {
- try {
- if (key.InternalSubKeyCount() > 0) {
- ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_RegRemoveSubKey);
- }
- }
- finally {
- key.Close();
- }
-
- int ret;
-
- try {
- ret = Win32Native.RegDeleteKeyEx(hkey, subkey, (int)regView, 0);
- }
- catch (EntryPointNotFoundException) {
- ret = Win32Native.RegDeleteKey(hkey, subkey);
- }
-
- if (ret!=0) {
- if (ret == Win32Native.ERROR_FILE_NOT_FOUND) {
- if (throwOnMissingSubKey)
- ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RegSubKeyAbsent);
- }
- else
- Win32Error(ret, null);
- }
- }
- else { // there is no key which also means there is no subkey
- if (throwOnMissingSubKey)
- ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RegSubKeyAbsent);
- }
- }
-
- /**
- * Recursively deletes a subkey and any child subkeys.
- *
- * @param subkey SubKey to delete.
- */
- public void DeleteSubKeyTree(String subkey) {
- DeleteSubKeyTree(subkey, true /*throwOnMissingSubKey*/);
- }
-
- [ComVisible(false)]
- public void DeleteSubKeyTree(String subkey, Boolean throwOnMissingSubKey) {
- ValidateKeyName(subkey);
-
- // Security concern: Deleting a hive's "" subkey would delete all
- // of that hive's contents. Don't allow "".
- if (subkey.Length==0 && IsSystemKey()) {
- ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RegKeyDelHive);
- }
-
- EnsureWriteable();
-
- subkey = FixupName(subkey); // Fixup multiple slashes to a single slash
- CheckPermission(RegistryInternalCheck.CheckSubTreeWritePermission, subkey, false, RegistryKeyPermissionCheck.Default);
-
- RegistryKey key = InternalOpenSubKey(subkey, true);
- if (key != null) {
- try {
- if (key.InternalSubKeyCount() > 0) {
- String[] keys = key.InternalGetSubKeyNames();
-
- for (int i=0; i<keys.Length; i++) {
- key.DeleteSubKeyTreeInternal(keys[i]);
- }
- }
- }
- finally {
- key.Close();
- }
-
- int ret;
- try {
- ret = Win32Native.RegDeleteKeyEx(hkey, subkey, (int)regView, 0);
- }
- catch (EntryPointNotFoundException) {
- ret = Win32Native.RegDeleteKey(hkey, subkey);
- }
-
- if (ret!=0) Win32Error(ret, null);
- }
- else if(throwOnMissingSubKey) {
- ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RegSubKeyAbsent);
- }
- }
-
- // An internal version which does no security checks or argument checking. Skipping the
- // security checks should give us a slight perf gain on large trees.
- private void DeleteSubKeyTreeInternal(string subkey) {
- RegistryKey key = InternalOpenSubKey(subkey, true);
- if (key != null) {
- try {
- if (key.InternalSubKeyCount() > 0) {
- String[] keys = key.InternalGetSubKeyNames();
-
- for (int i=0; i<keys.Length; i++) {
- key.DeleteSubKeyTreeInternal(keys[i]);
- }
- }
- }
- finally {
- key.Close();
- }
-
- int ret;
- try {
- ret = Win32Native.RegDeleteKeyEx(hkey, subkey, (int)regView, 0);
- }
- catch (EntryPointNotFoundException) {
- ret = Win32Native.RegDeleteKey(hkey, subkey);
- }
- if (ret!=0) Win32Error(ret, null);
- }
- else {
- ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RegSubKeyAbsent);
- }
- }
-
- /**
- * Deletes the specified value from this key.
- *
- * @param name Name of value to delete.
- */
- public void DeleteValue(String name) {
- DeleteValue(name, true);
- }
-
public void DeleteValue(String name, bool throwOnMissingValue) {
EnsureWriteable();
CheckPermission(RegistryInternalCheck.CheckValueWritePermission, name, false, RegistryKeyPermissionCheck.Default);
@@ -552,68 +273,6 @@ namespace Microsoft.Win32
return key;
}
-
- [ComVisible(false)]
- public static RegistryKey OpenBaseKey(RegistryHive hKey, RegistryView view) {
- ValidateKeyView(view);
- CheckUnmanagedCodePermission();
- return GetBaseKey((IntPtr)((int)hKey), view);
- }
-
- /**
- * Retrieves a new RegistryKey that represents the requested key on a foreign
- * machine. Valid values for hKey are members of the RegistryHive enum, or
- * Win32 integers such as:
- *
- * HKEY_CLASSES_ROOT,
- * HKEY_CURRENT_USER,
- * HKEY_LOCAL_MACHINE,
- * HKEY_USERS,
- * HKEY_PERFORMANCE_DATA,
- * HKEY_CURRENT_CONFIG,
- * HKEY_DYN_DATA.
- *
- * @param hKey HKEY_* to open.
- * @param machineName the machine to connect to
- *
- * @return the RegistryKey requested.
- */
- public static RegistryKey OpenRemoteBaseKey(RegistryHive hKey, String machineName) {
- return OpenRemoteBaseKey(hKey, machineName, RegistryView.Default);
- }
-
- [ComVisible(false)]
- public static RegistryKey OpenRemoteBaseKey(RegistryHive hKey, String machineName, RegistryView view) {
- if (machineName==null)
- throw new ArgumentNullException(nameof(machineName));
- int index = (int)hKey & 0x0FFFFFFF;
- if (index < 0 || index >= hkeyNames.Length || ((int)hKey & 0xFFFFFFF0) != 0x80000000) {
- throw new ArgumentException(Environment.GetResourceString("Arg_RegKeyOutOfRange"));
- }
- ValidateKeyView(view);
-
- CheckUnmanagedCodePermission();
- // connect to the specified remote registry
- SafeRegistryHandle foreignHKey = null;
- int ret = Win32Native.RegConnectRegistry(machineName, new SafeRegistryHandle(new IntPtr((int)hKey), false), out foreignHKey);
-
- if (ret == Win32Native.ERROR_DLL_INIT_FAILED)
- // return value indicates an error occurred
- throw new ArgumentException(Environment.GetResourceString("Arg_DllInitFailure"));
-
- if (ret != 0)
- Win32ErrorStatic(ret, null);
-
- if (foreignHKey.IsInvalid)
- // return value indicates an error occurred
- throw new ArgumentException(Environment.GetResourceString("Arg_RegKeyNoRemoteConnect", machineName));
-
- RegistryKey key = new RegistryKey(foreignHKey, true, false, true, ((IntPtr) hKey) == HKEY_PERFORMANCE_DATA, view);
- key.checkMode = RegistryKeyPermissionCheck.Default;
- key.keyName = hkeyNames[index];
- return key;
- }
-
/**
* Retrieves a subkey. If readonly is <b>true</b>, then the subkey is opened with
* read-only access.
@@ -685,26 +344,6 @@ namespace Microsoft.Win32
return OpenSubKey(name, false);
}
- /**
- * Retrieves the count of subkeys.
- *
- * @return a count of subkeys.
- */
- public int SubKeyCount {
- get {
- CheckPermission(RegistryInternalCheck.CheckKeyReadPermission, null, false, RegistryKeyPermissionCheck.Default);
- return InternalSubKeyCount();
- }
- }
-
- [ComVisible(false)]
- public RegistryView View {
- get {
- EnsureNotDisposed();
- return regView;
- }
- }
-
internal int InternalSubKeyCount() {
EnsureNotDisposed();
@@ -770,18 +409,6 @@ namespace Microsoft.Win32
return names;
}
- /**
- * Retrieves the count of values.
- *
- * @return a count of values.
- */
- public int ValueCount {
- get {
- CheckPermission(RegistryInternalCheck.CheckKeyReadPermission, null, false, RegistryKeyPermissionCheck.Default);
- return InternalValueCount();
- }
- }
-
internal int InternalValueCount() {
EnsureNotDisposed();
int values = 0;
@@ -883,7 +510,6 @@ namespace Microsoft.Win32
return InternalGetValue(name, defaultValue, false, true);
}
- [ComVisible(false)]
public Object GetValue(String name, Object defaultValue, RegistryValueOptions options) {
if( options < RegistryValueOptions.None || options > RegistryValueOptions.DoNotExpandEnvironmentNames) {
throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)options), nameof(options));
@@ -1110,37 +736,6 @@ namespace Microsoft.Win32
return data;
}
-
- [ComVisible(false)]
- public RegistryValueKind GetValueKind(string name) {
- CheckPermission(RegistryInternalCheck.CheckValueReadPermission, name, false, RegistryKeyPermissionCheck.Default);
- EnsureNotDisposed();
-
- int type = 0;
- int datasize = 0;
- int ret = Win32Native.RegQueryValueEx(hkey, name, null, ref type, (byte[])null, ref datasize);
- if (ret != 0)
- Win32Error(ret, null);
- if (type == Win32Native.REG_NONE)
- return RegistryValueKind.None;
- else if (!Enum.IsDefined(typeof(RegistryValueKind), type))
- return RegistryValueKind.Unknown;
- else
- return (RegistryValueKind) type;
- }
-
- /**
- * Retrieves the current state of the dirty property.
- *
- * A key is marked as dirty if any operation has occurred that modifies the
- * contents of the key.
- *
- * @return <b>true</b> if the key has been modified.
- */
- private bool IsDirty() {
- return (this.state & STATE_DIRTY) != 0;
- }
-
private bool IsSystemKey() {
return (this.state & STATE_SYSTEMKEY) != 0;
}
@@ -1153,13 +748,6 @@ namespace Microsoft.Win32
return (this.state & STATE_PERF_DATA) != 0;
}
- public String Name {
- get {
- EnsureNotDisposed();
- return keyName;
- }
- }
-
private void SetDirty() {
this.state |= STATE_DIRTY;
}
@@ -1174,7 +762,6 @@ namespace Microsoft.Win32
SetValue(name, value, RegistryValueKind.Unknown);
}
- [ComVisible(false)]
public unsafe void SetValue(String name, Object value, RegistryValueKind valueKind) {
if (value==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value);
@@ -1392,19 +979,6 @@ namespace Microsoft.Win32
}
}
- internal static void Win32ErrorStatic(int errorCode, String str) {
- switch (errorCode) {
- case Win32Native.ERROR_ACCESS_DENIED:
- if (str != null)
- throw new UnauthorizedAccessException(Environment.GetResourceString("UnauthorizedAccess_RegistryKeyGeneric_Key", str));
- else
- throw new UnauthorizedAccessException();
-
- default:
- throw new IOException(Win32Native.GetMessage(errorCode), errorCode);
- }
- }
-
internal static String FixupName(String name)
{
BCLDebug.Assert(name!=null,"[FixupName]name!=null");
@@ -1469,301 +1043,9 @@ namespace Microsoft.Win32
}
- //
- // Read/Write/Create SubKey Permission
- //
- private void GetSubKeyReadPermission(string subkeyName, out RegistryPermissionAccess access, out string path) {
- access = RegistryPermissionAccess.Read;
- path = keyName + "\\" + subkeyName + "\\.";
- }
- private void GetSubKeyWritePermission(string subkeyName, out RegistryPermissionAccess access, out string path) {
- // If we want to open a subkey of a read-only key as writeable, we need to do the check.
- access = RegistryPermissionAccess.Write;
- path = keyName + "\\" + subkeyName + "\\.";
- }
- private void GetSubKeyCreatePermission(string subkeyName, out RegistryPermissionAccess access, out string path) {
- access = RegistryPermissionAccess.Create;
- path = keyName + "\\" + subkeyName + "\\.";
- }
-
- //
- // Read/Write/ReadWrite SubTree Permission
- //
- private void GetSubTreeReadPermission(string subkeyName, out RegistryPermissionAccess access, out string path) {
- access = RegistryPermissionAccess.Read;
- path = keyName + "\\" + subkeyName + "\\";
- }
- private void GetSubTreeWritePermission(string subkeyName, out RegistryPermissionAccess access, out string path) {
- access = RegistryPermissionAccess.Write;
- path = keyName + "\\" + subkeyName + "\\";
- }
- private void GetSubTreeReadWritePermission(string subkeyName, out RegistryPermissionAccess access, out string path) {
- access = RegistryPermissionAccess.Write | RegistryPermissionAccess.Read;
- path = keyName + "\\" + subkeyName;
- }
-
- //
- // Read/Write/Create Value Permission
- //
- private void GetValueReadPermission(string valueName, out RegistryPermissionAccess access, out string path) {
- access = RegistryPermissionAccess.Read;
- path = keyName+"\\"+valueName;
- }
- private void GetValueWritePermission(string valueName, out RegistryPermissionAccess access, out string path) {
- access = RegistryPermissionAccess.Write;
- path = keyName+"\\"+valueName;
- }
- private void GetValueCreatePermission(string valueName, out RegistryPermissionAccess access, out string path) {
- access = RegistryPermissionAccess.Create;
- path = keyName+"\\"+valueName;
- }
-
- // Read Key Permission
- private void GetKeyReadPermission(out RegistryPermissionAccess access, out string path) {
- access = RegistryPermissionAccess.Read;
- path = keyName + "\\.";
- }
-
private void CheckPermission(RegistryInternalCheck check, string item, bool subKeyWritable, RegistryKeyPermissionCheck subKeyCheck)
{
- bool demand = false;
- RegistryPermissionAccess access = RegistryPermissionAccess.NoAccess;
- string path = null;
-
- switch (check) {
- //
- // Read/Write/Create SubKey Permission
- //
- case RegistryInternalCheck.CheckSubKeyReadPermission:
- if (remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- BCLDebug.Assert(checkMode == RegistryKeyPermissionCheck.Default, "Should be called from a key opened under default mode only!");
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- demand = true;
- GetSubKeyReadPermission(item, out access, out path);
- }
- break;
- case RegistryInternalCheck.CheckSubKeyWritePermission:
- if (remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- BCLDebug.Assert(checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow creating sub key under read-only key!");
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- demand = true;
- GetSubKeyWritePermission(item, out access, out path);
- }
- }
- break;
- case RegistryInternalCheck.CheckSubKeyCreatePermission:
- if (remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- BCLDebug.Assert(checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow creating sub key under read-only key!");
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- demand = true;
- GetSubKeyCreatePermission(item, out access, out path);
- }
- }
- break;
- //
- // Read/Write/ReadWrite SubTree Permission
- //
- case RegistryInternalCheck.CheckSubTreeReadPermission:
- if (remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- demand = true;
- GetSubTreeReadPermission(item, out access, out path);
- }
- }
- break;
- case RegistryInternalCheck.CheckSubTreeWritePermission:
- if (remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- BCLDebug.Assert(checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow writing value to read-only key!");
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- demand = true;
- GetSubTreeWritePermission(item, out access, out path);
- }
- }
- break;
- case RegistryInternalCheck.CheckSubTreeReadWritePermission:
- if (remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- // If we want to open a subkey of a read-only key as writeable, we need to do the check.
- demand = true;
- GetSubTreeReadWritePermission(item, out access, out path);
- }
- break;
- //
- // Read/Write/Create Value Permission
- //
- case RegistryInternalCheck.CheckValueReadPermission:
- ///*** no remoteKey check ***///
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- // only need to check for default mode (dynamice check)
- demand = true;
- GetValueReadPermission(item, out access, out path);
- }
- break;
- case RegistryInternalCheck.CheckValueWritePermission:
- if (remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- BCLDebug.Assert(checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow writing value to read-only key!");
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- // skip the security check if the key is opened under write mode
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- demand = true;
- GetValueWritePermission(item, out access, out path);
- }
- }
- break;
- case RegistryInternalCheck.CheckValueCreatePermission:
- if (remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- BCLDebug.Assert(checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow creating value under read-only key!");
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- // skip the security check if the key is opened under write mode
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- demand = true;
- GetValueCreatePermission(item, out access, out path);
- }
- }
- break;
- //
- // CheckKeyReadPermission
- //
- case RegistryInternalCheck.CheckKeyReadPermission:
- ///*** no remoteKey check ***///
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- BCLDebug.Assert(item == null, "CheckKeyReadPermission should never have a non-null item parameter!");
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
-
- // only need to check for default mode (dynamice check)
- demand = true;
- GetKeyReadPermission(out access, out path);
- }
- break;
- //
- // CheckSubTreePermission
- //
- case RegistryInternalCheck.CheckSubTreePermission:
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- if( subKeyCheck == RegistryKeyPermissionCheck.ReadSubTree) {
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- if( remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- demand = true;
- GetSubTreeReadPermission(item, out access, out path);
- }
- }
- }
- else if(subKeyCheck == RegistryKeyPermissionCheck.ReadWriteSubTree) {
- if( checkMode != RegistryKeyPermissionCheck.ReadWriteSubTree) {
- if( remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- demand = true;
- GetSubTreeReadWritePermission(item, out access, out path);
- }
- }
- }
- break;
-
- //
- // CheckOpenSubKeyWithWritablePermission uses the 'subKeyWritable' parameter
- //
- case RegistryInternalCheck.CheckOpenSubKeyWithWritablePermission:
- BCLDebug.Assert(subKeyCheck == RegistryKeyPermissionCheck.Default, "subKeyCheck should be Default (unused)");
- // If the parent key is not opened under default mode, we have access already.
- // If the parent key is opened under default mode, we need to check for permission.
- if(checkMode == RegistryKeyPermissionCheck.Default) {
- if( remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- demand = true;
- GetSubKeyReadPermission(item, out access, out path);
- }
- break;
- }
- if( subKeyWritable && (checkMode == RegistryKeyPermissionCheck.ReadSubTree)) {
- if( remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- demand = true;
- GetSubTreeReadWritePermission(item, out access, out path);
- }
- break;
- }
- break;
-
- //
- // CheckOpenSubKeyPermission uses the 'subKeyCheck' parameter
- //
- case RegistryInternalCheck.CheckOpenSubKeyPermission:
- BCLDebug.Assert(subKeyWritable == false, "subKeyWritable should be false (unused)");
- if(subKeyCheck == RegistryKeyPermissionCheck.Default) {
- if( checkMode == RegistryKeyPermissionCheck.Default) {
- if(remoteKey) {
- CheckUnmanagedCodePermission();
- }
- else {
- demand = true;
- GetSubKeyReadPermission(item, out access, out path);
- }
- }
- }
- break;
-
- default:
- BCLDebug.Assert(false, "CheckPermission default switch case should never be hit!");
- break;
- }
-
- if (demand) {
- new RegistryPermission(access, path).Demand();
- }
- }
-
- static private void CheckUnmanagedCodePermission() {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-#pragma warning restore 618
+ // TODO: Cleanup
}
private bool ContainsRegistryValue(string name) {
@@ -1798,26 +1080,6 @@ namespace Microsoft.Win32
return winAccess;
}
- static int GetRegistryKeyAccess(RegistryKeyPermissionCheck mode) {
- int winAccess = 0;
- switch(mode) {
- case RegistryKeyPermissionCheck.ReadSubTree:
- case RegistryKeyPermissionCheck.Default:
- winAccess = Win32Native.KEY_READ;
- break;
-
- case RegistryKeyPermissionCheck.ReadWriteSubTree:
- winAccess = Win32Native.KEY_READ| Win32Native.KEY_WRITE;
- break;
-
- default:
- BCLDebug.Assert(false, "unexpected code path");
- break;
- }
-
- return winAccess;
- }
-
private RegistryKeyPermissionCheck GetSubKeyPermissonCheck(bool subkeyWritable) {
if( checkMode == RegistryKeyPermissionCheck.Default) {
return checkMode;
@@ -1851,18 +1113,6 @@ namespace Microsoft.Win32
ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RegKeyStrLenBug);
}
-
- static private void ValidateKeyMode(RegistryKeyPermissionCheck mode) {
- if( mode < RegistryKeyPermissionCheck.Default || mode > RegistryKeyPermissionCheck.ReadWriteSubTree) {
- ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidRegistryKeyPermissionCheck, ExceptionArgument.mode);
- }
- }
-
- static private void ValidateKeyOptions(RegistryOptions options) {
- if (options < RegistryOptions.None || options > RegistryOptions.Volatile) {
- ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidRegistryOptionsCheck, ExceptionArgument.options);
- }
- }
static private void ValidateKeyView(RegistryView view) {
if (view != RegistryView.Default && view != RegistryView.Registry32 && view != RegistryView.Registry64) {
@@ -1877,14 +1127,14 @@ namespace Microsoft.Win32
}
[Flags]
- public enum RegistryValueOptions {
+ internal enum RegistryValueOptions {
None = 0,
DoNotExpandEnvironmentNames = 1
}
// the name for this API is meant to mimic FileMode, which has similar values
- public enum RegistryKeyPermissionCheck {
+ internal enum RegistryKeyPermissionCheck {
Default = 0,
ReadSubTree = 1,
ReadWriteSubTree = 2
diff --git a/src/mscorlib/src/Microsoft/Win32/RegistryOptions.cs b/src/mscorlib/src/Microsoft/Win32/RegistryOptions.cs
deleted file mode 100644
index 4d5e3aaab1..0000000000
--- a/src/mscorlib/src/Microsoft/Win32/RegistryOptions.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-//
-// Implements Microsoft.Win32.RegistryOptions
-//
-// ======================================================================================
-namespace Microsoft.Win32 {
- using System;
-
- [Flags]
- public enum RegistryOptions {
- None = Win32Native.REG_OPTION_NON_VOLATILE, // 0x0000
- Volatile = Win32Native.REG_OPTION_VOLATILE, // 0x0001
-///
-/// Consider exposing more options in a future release. Users can access this
-/// functionality by calling [RegistryKey].Handle and pinvoking
-///
-/// CreateLink = Win32Native.REG_OPTION_CREATE_LINK, // 0x0002
-/// BackupRestore = Win32Native.REG_OPTION_BACKUP_RESTORE,// 0x0004
- };
-}
diff --git a/src/mscorlib/src/Microsoft/Win32/RegistryValueKind.cs b/src/mscorlib/src/Microsoft/Win32/RegistryValueKind.cs
index c88d5f920a..5e22275332 100644
--- a/src/mscorlib/src/Microsoft/Win32/RegistryValueKind.cs
+++ b/src/mscorlib/src/Microsoft/Win32/RegistryValueKind.cs
@@ -4,8 +4,7 @@
namespace Microsoft.Win32 {
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum RegistryValueKind {
+ internal enum RegistryValueKind {
String = Win32Native.REG_SZ,
ExpandString = Win32Native.REG_EXPAND_SZ,
Binary = Win32Native.REG_BINARY,
@@ -13,7 +12,6 @@ namespace Microsoft.Win32 {
MultiString = Win32Native.REG_MULTI_SZ,
QWord = Win32Native.REG_QWORD,
Unknown = 0, // REG_NONE is defined as zero but BCL
- [System.Runtime.InteropServices.ComVisible(false)]
None = unchecked((int)0xFFFFFFFF), // mistakingly overrode this value.
} // Now instead of using Win32Native.REG_NONE we use "-1" and play games internally.
}
diff --git a/src/mscorlib/src/Microsoft/Win32/RegistryView.cs b/src/mscorlib/src/Microsoft/Win32/RegistryView.cs
index 7fbc2b3391..302a603e0c 100644
--- a/src/mscorlib/src/Microsoft/Win32/RegistryView.cs
+++ b/src/mscorlib/src/Microsoft/Win32/RegistryView.cs
@@ -11,7 +11,7 @@
namespace Microsoft.Win32 {
using System;
- public enum RegistryView {
+ internal enum RegistryView {
Default = 0, // 0x0000 operate on the default registry view
Registry64 = Win32Native.KEY_WOW64_64KEY, // 0x0100 operate on the 64-bit registry view
Registry32 = Win32Native.KEY_WOW64_32KEY, // 0x0200 operate on the 32-bit registry view
diff --git a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeFileMappingHandle.cs b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeFileMappingHandle.cs
deleted file mode 100644
index cb915fe7c3..0000000000
--- a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeFileMappingHandle.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** A wrapper for file handles
-**
-**
-===========================================================*/
-using System;
-using System.Security;
-using System.Security.Permissions;
-using System.Runtime.InteropServices;
-using System.Runtime.CompilerServices;
-using System.Runtime.ConstrainedExecution;
-using System.Runtime.Versioning;
-
-namespace Microsoft.Win32.SafeHandles
-{
- internal sealed class SafeFileMappingHandle : SafeHandleZeroOrMinusOneIsInvalid
- {
- internal SafeFileMappingHandle() : base(true) {}
-
- // 0 is an Invalid Handle
- internal SafeFileMappingHandle(IntPtr handle, bool ownsHandle) : base (ownsHandle)
- {
- SetHandle(handle);
- }
-
- override protected bool ReleaseHandle()
- {
- return Win32Native.CloseHandle(handle);
- }
- }
-}
-
diff --git a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeFindHandle.cs b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeFindHandle.cs
index 219fb77001..89ea22b855 100644
--- a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeFindHandle.cs
+++ b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeFindHandle.cs
@@ -13,7 +13,6 @@
using System;
using System.Security;
-using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
diff --git a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeLibraryHandle.cs b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeLibraryHandle.cs
index 23631987a5..603558c51a 100644
--- a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeLibraryHandle.cs
+++ b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeLibraryHandle.cs
@@ -4,7 +4,6 @@
namespace Microsoft.Win32 {
using Microsoft.Win32.SafeHandles;
- using System.Security.Permissions;
sealed internal class SafeLibraryHandle : SafeHandleZeroOrMinusOneIsInvalid {
internal SafeLibraryHandle() : base(true) {}
diff --git a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeLocalAllocHandle.cs b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeLocalAllocHandle.cs
deleted file mode 100644
index d6c1577eeb..0000000000
--- a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeLocalAllocHandle.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace Microsoft.Win32.SafeHandles
-{
- using System;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Runtime.ConstrainedExecution;
-
- internal sealed class SafeLocalAllocHandle : SafeBuffer {
- private SafeLocalAllocHandle () : base(true) {}
-
- // 0 is an Invalid Handle
- internal SafeLocalAllocHandle (IntPtr handle) : base (true) {
- SetHandle(handle);
- }
-
- internal static SafeLocalAllocHandle InvalidHandle {
- get { return new SafeLocalAllocHandle(IntPtr.Zero); }
- }
-
- override protected bool ReleaseHandle()
- {
- return Win32Native.LocalFree(handle) == IntPtr.Zero;
- }
- }
-}
diff --git a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs
index 4f96b81e72..a1e5bc4263 100644
--- a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs
+++ b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs
@@ -11,13 +11,12 @@
namespace Microsoft.Win32.SafeHandles {
using System;
using System.Security;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
using System.Runtime.Versioning;
- public sealed class SafeRegistryHandle : SafeHandleZeroOrMinusOneIsInvalid {
+ internal sealed class SafeRegistryHandle : SafeHandleZeroOrMinusOneIsInvalid {
internal SafeRegistryHandle() : base(true) {}
public SafeRegistryHandle(IntPtr preexistingHandle, bool ownsHandle) : base(ownsHandle) {
@@ -30,7 +29,6 @@ namespace Microsoft.Win32.SafeHandles {
[DllImport(Win32Native.ADVAPI32)]
[SuppressUnmanagedCodeSecurity]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern int RegCloseKey(IntPtr hKey);
}
}
diff --git a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeViewOfFileHandle.cs b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeViewOfFileHandle.cs
deleted file mode 100644
index 38a9323c0b..0000000000
--- a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeViewOfFileHandle.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** A wrapper for file handles
-**
-**
-===========================================================*/
-using System;
-using System.Security;
-using System.Security.Permissions;
-using System.Runtime.InteropServices;
-using System.Runtime.CompilerServices;
-using System.Runtime.ConstrainedExecution;
-using System.Runtime.Versioning;
-using Microsoft.Win32;
-using Microsoft.Win32.SafeHandles;
-
-namespace Microsoft.Win32.SafeHandles
-{
- internal sealed class SafeViewOfFileHandle : SafeHandleZeroOrMinusOneIsInvalid
- {
- internal SafeViewOfFileHandle() : base(true) {}
-
- // 0 is an Invalid Handle
- internal SafeViewOfFileHandle(IntPtr handle, bool ownsHandle) : base (ownsHandle) {
- SetHandle(handle);
- }
-
- override protected bool ReleaseHandle()
- {
- if (Win32Native.UnmapViewOfFile(handle))
- {
- handle = IntPtr.Zero;
- return true;
- }
-
- return false;
- }
- }
-}
-
diff --git a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeWaitHandle.cs b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeWaitHandle.cs
index 0e57136952..0ebcd5c09e 100644
--- a/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeWaitHandle.cs
+++ b/src/mscorlib/src/Microsoft/Win32/SafeHandles/SafeWaitHandle.cs
@@ -14,7 +14,6 @@
using System;
using System.Security;
-using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
@@ -31,7 +30,6 @@ namespace Microsoft.Win32.SafeHandles {
{
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public SafeWaitHandle(IntPtr existingHandle, bool ownsHandle) : base(ownsHandle)
{
SetHandle(existingHandle);
diff --git a/src/mscorlib/src/Microsoft/Win32/SafeHandles/Win32SafeHandles.cs b/src/mscorlib/src/Microsoft/Win32/SafeHandles/Win32SafeHandles.cs
index 08ae0955a8..62418131f3 100644
--- a/src/mscorlib/src/Microsoft/Win32/SafeHandles/Win32SafeHandles.cs
+++ b/src/mscorlib/src/Microsoft/Win32/SafeHandles/Win32SafeHandles.cs
@@ -18,13 +18,11 @@ namespace Microsoft.Win32.SafeHandles
using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
- using System.Security.Permissions;
using System.Runtime.ConstrainedExecution;
// Class of safe handle which uses 0 or -1 as an invalid handle.
public abstract class SafeHandleZeroOrMinusOneIsInvalid : SafeHandle
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected SafeHandleZeroOrMinusOneIsInvalid(bool ownsHandle) : base(IntPtr.Zero, ownsHandle)
{
}
@@ -43,7 +41,6 @@ namespace Microsoft.Win32.SafeHandles
// Class of safe handle which uses only -1 as an invalid handle.
public abstract class SafeHandleMinusOneIsInvalid : SafeHandle
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected SafeHandleMinusOneIsInvalid(bool ownsHandle) : base(new IntPtr(-1), ownsHandle)
{
}
@@ -62,7 +59,6 @@ namespace Microsoft.Win32.SafeHandles
// Class of critical handle which uses 0 or -1 as an invalid handle.
public abstract class CriticalHandleZeroOrMinusOneIsInvalid : CriticalHandle
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected CriticalHandleZeroOrMinusOneIsInvalid() : base(IntPtr.Zero)
{
}
@@ -75,7 +71,6 @@ namespace Microsoft.Win32.SafeHandles
// Class of critical handle which uses only -1 as an invalid handle.
public abstract class CriticalHandleMinusOneIsInvalid : CriticalHandle
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected CriticalHandleMinusOneIsInvalid() : base(new IntPtr(-1))
{
}
diff --git a/src/mscorlib/src/Microsoft/Win32/UnsafeNativeMethods.cs b/src/mscorlib/src/Microsoft/Win32/UnsafeNativeMethods.cs
index 19d638d61a..6e37b9c878 100644
--- a/src/mscorlib/src/Microsoft/Win32/UnsafeNativeMethods.cs
+++ b/src/mscorlib/src/Microsoft/Win32/UnsafeNativeMethods.cs
@@ -12,7 +12,6 @@ namespace Microsoft.Win32 {
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
- using System.Security.Permissions;
using System.Text;
using System.Diagnostics.Tracing;
@@ -59,7 +58,6 @@ namespace Microsoft.Win32 {
[DllImport(Win32Native.KERNEL32, CharSet=System.Runtime.InteropServices.CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.Bool)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern bool FreeLibrary(IntPtr hModule);
@@ -120,19 +118,6 @@ namespace Microsoft.Win32 {
[DllImport(Win32Native.ADVAPI32, ExactSpelling = true, EntryPoint = "EventUnregister", CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
internal static extern uint EventUnregister([In] long registrationHandle);
- //
- // Writing (Publishing/Logging) APIs
- //
- //
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage")]
- [DllImport(Win32Native.ADVAPI32, ExactSpelling = true, EntryPoint = "EventWrite", CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
- internal static extern unsafe int EventWrite(
- [In] long registrationHandle,
- [In] ref EventDescriptor eventDescriptor,
- [In] int userDataCount,
- [In] EventProvider.EventData* userData
- );
-
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage")]
[DllImport(Win32Native.ADVAPI32, ExactSpelling = true, EntryPoint = "EventWriteString", CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
internal static extern unsafe int EventWriteString(
diff --git a/src/mscorlib/src/Microsoft/Win32/Win32Native.cs b/src/mscorlib/src/Microsoft/Win32/Win32Native.cs
index b5b808b424..b081b16ca1 100644
--- a/src/mscorlib/src/Microsoft/Win32/Win32Native.cs
+++ b/src/mscorlib/src/Microsoft/Win32/Win32Native.cs
@@ -155,42 +155,6 @@ namespace Microsoft.Win32 {
internal const int HWND_BROADCAST = 0xffff;
internal const int WM_SETTINGCHANGE = 0x001A;
- // CryptProtectMemory and CryptUnprotectMemory.
- internal const uint CRYPTPROTECTMEMORY_BLOCK_SIZE = 16;
- internal const uint CRYPTPROTECTMEMORY_SAME_PROCESS = 0x00;
- internal const uint CRYPTPROTECTMEMORY_CROSS_PROCESS = 0x01;
- internal const uint CRYPTPROTECTMEMORY_SAME_LOGON = 0x02;
-
- // Security Quality of Service flags
- internal const int SECURITY_ANONYMOUS = ((int)SECURITY_IMPERSONATION_LEVEL.Anonymous << 16);
- internal const int SECURITY_SQOS_PRESENT = 0x00100000;
-
- // Access Control library.
- internal const string MICROSOFT_KERBEROS_NAME = "Kerberos";
- internal const uint ANONYMOUS_LOGON_LUID = 0x3e6;
-
- internal const int SECURITY_ANONYMOUS_LOGON_RID = 0x00000007;
- internal const int SECURITY_AUTHENTICATED_USER_RID = 0x0000000B;
- internal const int SECURITY_LOCAL_SYSTEM_RID = 0x00000012;
- internal const int SECURITY_BUILTIN_DOMAIN_RID = 0x00000020;
-
- internal const uint SE_PRIVILEGE_DISABLED = 0x00000000;
- internal const uint SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001;
- internal const uint SE_PRIVILEGE_ENABLED = 0x00000002;
- internal const uint SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000;
-
- internal const uint SE_GROUP_MANDATORY = 0x00000001;
- internal const uint SE_GROUP_ENABLED_BY_DEFAULT = 0x00000002;
- internal const uint SE_GROUP_ENABLED = 0x00000004;
- internal const uint SE_GROUP_OWNER = 0x00000008;
- internal const uint SE_GROUP_USE_FOR_DENY_ONLY = 0x00000010;
- internal const uint SE_GROUP_LOGON_ID = 0xC0000000;
- internal const uint SE_GROUP_RESOURCE = 0x20000000;
-
- internal const uint DUPLICATE_CLOSE_SOURCE = 0x00000001;
- internal const uint DUPLICATE_SAME_ACCESS = 0x00000002;
- internal const uint DUPLICATE_SAME_ATTRIBUTES = 0x00000004;
-
// TimeZone
internal const int TIME_ZONE_ID_INVALID = -1;
internal const int TIME_ZONE_ID_UNKNOWN = 0;
@@ -416,20 +380,6 @@ namespace Microsoft.Win32 {
}
[StructLayout(LayoutKind.Sequential)]
- internal struct SYSTEM_INFO {
- internal int dwOemId; // This is a union of a DWORD and a struct containing 2 WORDs.
- internal int dwPageSize;
- internal IntPtr lpMinimumApplicationAddress;
- internal IntPtr lpMaximumApplicationAddress;
- internal IntPtr dwActiveProcessorMask;
- internal int dwNumberOfProcessors;
- internal int dwProcessorType;
- internal int dwAllocationGranularity;
- internal short wProcessorLevel;
- internal short wProcessorRevision;
- }
-
- [StructLayout(LayoutKind.Sequential)]
internal class SECURITY_ATTRIBUTES {
internal int nLength = 0;
// don't remove null, or this field will disappear in bcl.small
@@ -465,206 +415,6 @@ namespace Microsoft.Win32 {
}
[StructLayout(LayoutKind.Sequential)]
- internal struct FILE_TIME {
- public FILE_TIME(long fileTime) {
- ftTimeLow = (uint) fileTime;
- ftTimeHigh = (uint) (fileTime >> 32);
- }
-
- public long ToTicks() {
- return ((long) ftTimeHigh << 32) + ftTimeLow;
- }
-
- internal uint ftTimeLow;
- internal uint ftTimeHigh;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct KERB_S4U_LOGON {
- internal uint MessageType;
- internal uint Flags;
- internal UNICODE_INTPTR_STRING ClientUpn; // REQUIRED: UPN for client
- internal UNICODE_INTPTR_STRING ClientRealm; // Optional: Client Realm, if known
- }
-
- [StructLayoutAttribute(LayoutKind.Sequential)]
- internal struct LSA_OBJECT_ATTRIBUTES {
- internal int Length;
- internal IntPtr RootDirectory;
- internal IntPtr ObjectName;
- internal int Attributes;
- internal IntPtr SecurityDescriptor;
- internal IntPtr SecurityQualityOfService;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct UNICODE_STRING {
- internal ushort Length;
- internal ushort MaximumLength;
- [MarshalAs(UnmanagedType.LPWStr)] internal string Buffer;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct UNICODE_INTPTR_STRING {
- /// <remarks>
- /// Note - this constructor extracts the raw pointer from the safe handle, so any
- /// strings created with this version of the constructor will be unsafe to use after the buffer
- /// has been freed.
- /// </remarks>
- internal UNICODE_INTPTR_STRING (int stringBytes, SafeLocalAllocHandle buffer) {
- BCLDebug.Assert(buffer == null || (stringBytes >= 0 && (ulong)stringBytes <= buffer.ByteLength),
- "buffer == null || (stringBytes >= 0 && stringBytes <= buffer.ByteLength)");
-
- this.Length = (ushort) stringBytes;
- this.MaxLength = (ushort) buffer.ByteLength;
-
- // Marshaling with a SafePointer does not work correctly, so unfortunately we need to extract
- // the raw handle here.
- this.Buffer = buffer.DangerousGetHandle();
- }
-
- /// <remarks>
- /// This constructor should be used for constructing UNICODE_STRING structures with pointers
- /// into a block of memory managed by a SafeHandle or the GC. It shouldn't be used to own
- /// any memory on its own.
- /// </remarks>
- internal UNICODE_INTPTR_STRING(int stringBytes, IntPtr buffer) {
- BCLDebug.Assert((stringBytes == 0 && buffer == IntPtr.Zero) || (stringBytes > 0 && stringBytes <= UInt16.MaxValue && buffer != IntPtr.Zero),
- "(stringBytes == 0 && buffer == IntPtr.Zero) || (stringBytes > 0 && stringBytes <= UInt16.MaxValue && buffer != IntPtr.Zero)");
-
- this.Length = (ushort)stringBytes;
- this.MaxLength = (ushort)stringBytes;
- this.Buffer = buffer;
- }
-
- internal ushort Length;
- internal ushort MaxLength;
- internal IntPtr Buffer;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- internal struct LSA_TRANSLATED_NAME {
- internal int Use;
- internal UNICODE_INTPTR_STRING Name;
- internal int DomainIndex;
- }
-
- [StructLayoutAttribute(LayoutKind.Sequential)]
- internal struct LSA_TRANSLATED_SID {
- internal int Use;
- internal uint Rid;
- internal int DomainIndex;
- }
-
- [StructLayoutAttribute(LayoutKind.Sequential)]
- internal struct LSA_TRANSLATED_SID2 {
- internal int Use;
- internal IntPtr Sid;
- internal int DomainIndex;
- uint Flags;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- internal struct LSA_TRUST_INFORMATION {
- internal UNICODE_INTPTR_STRING Name;
- internal IntPtr Sid;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- internal struct LSA_REFERENCED_DOMAIN_LIST {
- internal int Entries;
- internal IntPtr Domains;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct LUID {
- internal uint LowPart;
- internal uint HighPart;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct LUID_AND_ATTRIBUTES {
- internal LUID Luid;
- internal uint Attributes;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct QUOTA_LIMITS {
- internal IntPtr PagedPoolLimit;
- internal IntPtr NonPagedPoolLimit;
- internal IntPtr MinimumWorkingSetSize;
- internal IntPtr MaximumWorkingSetSize;
- internal IntPtr PagefileLimit;
- internal IntPtr TimeLimit;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct SECURITY_LOGON_SESSION_DATA {
- internal uint Size;
- internal LUID LogonId;
- internal UNICODE_INTPTR_STRING UserName;
- internal UNICODE_INTPTR_STRING LogonDomain;
- internal UNICODE_INTPTR_STRING AuthenticationPackage;
- internal uint LogonType;
- internal uint Session;
- internal IntPtr Sid;
- internal long LogonTime;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct SID_AND_ATTRIBUTES {
- internal IntPtr Sid;
- internal uint Attributes;
- internal static readonly long SizeOf = (long)Marshal.SizeOf(typeof(SID_AND_ATTRIBUTES));
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct TOKEN_GROUPS {
- internal uint GroupCount;
- internal SID_AND_ATTRIBUTES Groups; // SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
- internal struct TOKEN_PRIMARY_GROUP
- {
- internal IntPtr PrimaryGroup;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct TOKEN_PRIVILEGE {
- internal uint PrivilegeCount;
- internal LUID_AND_ATTRIBUTES Privilege;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct TOKEN_SOURCE {
- private const int TOKEN_SOURCE_LENGTH = 8;
-
- [MarshalAs(UnmanagedType.ByValArray, SizeConst=TOKEN_SOURCE_LENGTH)]
- internal char[] Name;
- internal LUID SourceIdentifier;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct TOKEN_STATISTICS {
- internal LUID TokenId;
- internal LUID AuthenticationId;
- internal long ExpirationTime;
- internal uint TokenType;
- internal uint ImpersonationLevel;
- internal uint DynamicCharged;
- internal uint DynamicAvailable;
- internal uint GroupCount;
- internal uint PrivilegeCount;
- internal LUID ModifiedId;
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- internal struct TOKEN_USER {
- internal SID_AND_ATTRIBUTES User;
- }
-
- [StructLayout(LayoutKind.Sequential)]
internal struct MEMORYSTATUSEX {
// The length field must be set to the size of this data structure.
internal int length;
@@ -707,18 +457,11 @@ namespace Microsoft.Win32 {
internal const String SHIM = "mscoree.dll";
internal const String CRYPT32 = "crypt32.dll";
internal const String SECUR32 = "secur32.dll";
-#if FEATURE_MAIN_CLR_MODULE_USES_CORE_NAME
internal const String MSCORWKS = "coreclr.dll";
-#else //FEATURE_MAIN_CLR_MODULE_USES_CORE_NAME
- internal const String MSCORWKS = "clr.dll";
-#endif //FEATURE_MAIN_CLR_MODULE_USES_CORE_NAME
// From WinBase.h
internal const int SEM_FAILCRITICALERRORS = 1;
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern void GetSystemInfo(ref SYSTEM_INFO lpSystemInfo);
-
[DllImport(KERNEL32, CharSet=CharSet.Auto, BestFitMapping=true)]
internal static extern int FormatMessage(int dwFlags, IntPtr lpSource,
int dwMessageId, int dwLanguageId, [Out]StringBuilder lpBuffer,
@@ -741,22 +484,13 @@ namespace Microsoft.Win32 {
}
[DllImport(KERNEL32, EntryPoint="LocalAlloc")]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static extern IntPtr LocalAlloc_NoSafeHandle(int uFlags, UIntPtr sizetdwBytes);
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- SafeLocalAllocHandle LocalAlloc(
- [In] int uFlags,
- [In] UIntPtr sizetdwBytes);
-
[DllImport(KERNEL32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern IntPtr LocalFree(IntPtr handle);
// MSDN says the length is a SIZE_T.
[DllImport(NTDLL, EntryPoint = "RtlZeroMemory")]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern void ZeroMemory(IntPtr address, UIntPtr length);
internal static bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX buffer)
@@ -775,52 +509,11 @@ namespace Microsoft.Win32 {
// the MemoryFailPoint implementation (within a CER) to increase the
// size of the page file, ignoring any host memory allocators.
[DllImport(KERNEL32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
unsafe internal static extern void * VirtualAlloc(void* address, UIntPtr numBytes, int commitOrReserve, int pageProtectionMode);
[DllImport(KERNEL32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
unsafe internal static extern bool VirtualFree(void* address, UIntPtr numBytes, int pageFreeMode);
-
-
- // Note - do NOT use this to call methods. Use P/Invoke, which will
- // do much better things w.r.t. marshaling, pinning memory, security
- // stuff, better interactions with thread aborts, etc. This is used
- // solely by DoesWin32MethodExist for avoiding try/catch EntryPointNotFoundException
- // in scenarios where an OS Version check is insufficient
- [DllImport(KERNEL32, CharSet=CharSet.Ansi, BestFitMapping=false, SetLastError=true, ExactSpelling=true)]
- private static extern IntPtr GetProcAddress(IntPtr hModule, String methodName);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, BestFitMapping=false, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- private static extern IntPtr GetModuleHandle(String moduleName);
-
- internal static bool DoesWin32MethodExist(String moduleName, String methodName)
- {
- // GetModuleHandle does not increment the module's ref count, so we don't need to call FreeLibrary.
- IntPtr hModule = Win32Native.GetModuleHandle(moduleName);
- if (hModule == IntPtr.Zero) {
- BCLDebug.Assert(hModule != IntPtr.Zero, "GetModuleHandle failed. Dll isn't loaded?");
- return false;
- }
- IntPtr functionPointer = Win32Native.GetProcAddress(hModule, methodName);
- return (functionPointer != IntPtr.Zero);
- }
-
- // There is no need to call CloseProcess or to use a SafeHandle if you get the handle
- // using GetCurrentProcess as it returns a pseudohandle
- [DllImport(KERNEL32, SetLastError = true, CallingConvention = CallingConvention.Winapi)]
- [return: MarshalAs(UnmanagedType.Bool)]
- internal static extern bool IsWow64Process(
- [In]
- IntPtr hSourceProcessHandle,
- [Out, MarshalAs(UnmanagedType.Bool)]
- out bool isWow64);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern uint GetTempPath(int bufferLen, [Out]StringBuilder buffer);
-
[DllImport(KERNEL32, CharSet=CharSet.Ansi, ExactSpelling=true, EntryPoint="lstrlenA")]
internal static extern int lstrlenA(IntPtr ptr);
@@ -828,37 +521,23 @@ namespace Microsoft.Win32 {
internal static extern int lstrlenW(IntPtr ptr);
[DllImport(Win32Native.OLEAUT32, CharSet = CharSet.Unicode)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static extern IntPtr SysAllocStringLen(String src, int len); // BSTR
[DllImport(Win32Native.OLEAUT32)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern uint SysStringLen(IntPtr bstr);
[DllImport(Win32Native.OLEAUT32)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern void SysFreeString(IntPtr bstr);
#if FEATURE_COMINTEROP
[DllImport(Win32Native.OLEAUT32)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static extern IntPtr SysAllocStringByteLen(byte[] str, uint len); // BSTR
[DllImport(Win32Native.OLEAUT32)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern uint SysStringByteLen(IntPtr bstr);
-#if FEATURE_LEGACYSURFACE
- [DllImport(Win32Native.OLEAUT32)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static extern uint SysStringLen(SafeBSTRHandle bstr);
#endif
-#endif
-
- [DllImport(KERNEL32)]
- internal static extern int GetACP();
-
[DllImport(KERNEL32, SetLastError=true)]
internal static extern bool SetEvent(SafeWaitHandle handle);
@@ -872,134 +551,24 @@ namespace Microsoft.Win32 {
internal static extern SafeWaitHandle OpenEvent(/* DWORD */ int desiredAccess, bool inheritHandle, String name);
[DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static extern SafeWaitHandle CreateMutex(SECURITY_ATTRIBUTES lpSecurityAttributes, bool initialOwner, String name);
[DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
internal static extern SafeWaitHandle OpenMutex(/* DWORD */ int desiredAccess, bool inheritHandle, String name);
[DllImport(KERNEL32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static extern bool ReleaseMutex(SafeWaitHandle handle);
- [DllImport(KERNEL32, SetLastError = true, CharSet = CharSet.Auto, BestFitMapping = false)]
- internal unsafe static extern int GetFullPathName(char* path, int numBufferChars, char* buffer, IntPtr mustBeZero);
-
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal unsafe static extern int GetFullPathName(String path, int numBufferChars, [Out]StringBuilder buffer, IntPtr mustBeZero);
-
- [DllImport(KERNEL32, SetLastError = true, CharSet = CharSet.Auto, BestFitMapping = false)]
- internal unsafe static extern int GetLongPathName(char* path, char* longPathBuffer, int bufferLength);
-
- [DllImport(KERNEL32, SetLastError = true, ExactSpelling = true)]
- internal unsafe static extern uint GetFullPathNameW(char* path, uint numBufferChars, SafeHandle buffer, IntPtr mustBeZero);
-
- [DllImport(KERNEL32, SetLastError = true, CharSet = CharSet.Auto, BestFitMapping = false)]
- internal static extern int GetLongPathName(String path, [Out]StringBuilder longPathBuffer, int bufferLength);
-
- [DllImport(KERNEL32, SetLastError = true, ExactSpelling = true)]
- internal static extern uint GetLongPathNameW(SafeHandle lpszShortPath, SafeHandle lpszLongPath, uint cchBuffer);
-
- [DllImport(KERNEL32, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true)]
- internal static extern uint GetLongPathNameW(string lpszShortPath, SafeHandle lpszLongPath, uint cchBuffer);
-
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern SafeFileMappingHandle CreateFileMapping(SafeFileHandle hFile, IntPtr lpAttributes, uint fProtect, uint dwMaximumSizeHigh, uint dwMaximumSizeLow, String lpName);
-
- [DllImport(KERNEL32, SetLastError=true, ExactSpelling=true)]
- internal static extern IntPtr MapViewOfFile(
- SafeFileMappingHandle handle, uint dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, UIntPtr dwNumerOfBytesToMap);
-
- [DllImport(KERNEL32, ExactSpelling=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static extern bool UnmapViewOfFile(IntPtr lpBaseAddress );
-
[DllImport(KERNEL32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern bool CloseHandle(IntPtr handle);
- [DllImport(KERNEL32)]
- internal static extern int GetFileType(SafeFileHandle handle);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool SetEndOfFile(SafeFileHandle hFile);
-
- [DllImport(KERNEL32, SetLastError = true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- internal static extern bool FlushFileBuffers(SafeFileHandle hFile);
-
- [DllImport(KERNEL32, SetLastError=true, EntryPoint="SetFilePointer")]
- private unsafe static extern int SetFilePointerWin32(SafeFileHandle handle, int lo, int * hi, int origin);
-
- internal unsafe static long SetFilePointer(SafeFileHandle handle, long offset, System.IO.SeekOrigin origin, out int hr) {
- hr = 0;
- int lo = (int) offset;
- int hi = (int) (offset >> 32);
- lo = SetFilePointerWin32(handle, lo, &hi, (int) origin);
-
- if (lo == -1 && ((hr = Marshal.GetLastWin32Error()) != 0))
- return -1;
- return (long) (((ulong) ((uint) hi)) << 32) | ((uint) lo);
- }
-
- // Note there are two different ReadFile prototypes - this is to use
- // the type system to force you to not trip across a "feature" in
- // Win32's async IO support. You can't do the following three things
- // simultaneously: overlapped IO, free the memory for the overlapped
- // struct in a callback (or an EndRead method called by that callback),
- // and pass in an address for the numBytesRead parameter.
-
- [DllImport(KERNEL32, SetLastError=true)]
- unsafe internal static extern int ReadFile(SafeFileHandle handle, byte* bytes, int numBytesToRead, IntPtr numBytesRead_mustBeZero, NativeOverlapped* overlapped);
-
- [DllImport(KERNEL32, SetLastError=true)]
- unsafe internal static extern int ReadFile(SafeFileHandle handle, byte* bytes, int numBytesToRead, out int numBytesRead, IntPtr mustBeZero);
-
- // Note there are two different WriteFile prototypes - this is to use
- // the type system to force you to not trip across a "feature" in
- // Win32's async IO support. You can't do the following three things
- // simultaneously: overlapped IO, free the memory for the overlapped
- // struct in a callback (or an EndWrite method called by that callback),
- // and pass in an address for the numBytesRead parameter.
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static unsafe extern int WriteFile(SafeFileHandle handle, byte* bytes, int numBytesToWrite, IntPtr numBytesWritten_mustBeZero, NativeOverlapped* lpOverlapped);
-
[DllImport(KERNEL32, SetLastError=true)]
internal static unsafe extern int WriteFile(SafeFileHandle handle, byte* bytes, int numBytesToWrite, out int numBytesWritten, IntPtr mustBeZero);
- // This is only available on Vista or higher
- [DllImport(KERNEL32, SetLastError=true)]
- internal static unsafe extern bool CancelIoEx(SafeFileHandle handle, NativeOverlapped* lpOverlapped);
-
- // NOTE: The out parameters are PULARGE_INTEGERs and may require
- // some byte munging magic.
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
- internal static extern bool GetDiskFreeSpaceEx(String drive, out long freeBytesForUser, out long totalBytes, out long freeBytes);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
- internal static extern int GetDriveType(String drive);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
- internal static extern bool GetVolumeInformation(String drive, [Out]StringBuilder volumeName, int volumeNameBufLen, out int volSerialNumber, out int maxFileNameLen, out int fileSystemFlags, [Out]StringBuilder fileSystemName, int fileSystemNameBufLen);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
- internal static extern bool SetVolumeLabel(String driveLetter, String volumeName);
-
- // The following 4 methods are used by Microsoft.WlcProfile
- [DllImport(KERNEL32)]
- [return: MarshalAs(UnmanagedType.Bool)]
- internal static extern bool QueryPerformanceCounter(out long value);
-
- [DllImport(KERNEL32)]
- [return: MarshalAs(UnmanagedType.Bool)]
- internal static extern bool QueryPerformanceFrequency(out long value);
-
[DllImport(KERNEL32, SetLastError = true, CharSet = CharSet.Auto, BestFitMapping = false)]
internal static extern SafeWaitHandle CreateSemaphore(SECURITY_ATTRIBUTES lpSecurityAttributes, int initialCount, int maximumCount, String name);
[DllImport(KERNEL32, SetLastError = true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool ReleaseSemaphore(SafeWaitHandle handle, int releaseCount, out int previousCount);
@@ -1023,24 +592,8 @@ namespace Microsoft.Win32 {
}
[DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
- internal static extern int GetWindowsDirectory([Out]StringBuilder sb, int length);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
internal static extern int GetSystemDirectory([Out]StringBuilder sb, int length);
- [DllImport(KERNEL32, SetLastError=true)]
- internal unsafe static extern bool SetFileTime(SafeFileHandle hFile, FILE_TIME* creationTime,
- FILE_TIME* lastAccessTime, FILE_TIME* lastWriteTime);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern int GetFileSize(SafeFileHandle hFile, out int highSize);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool LockFile(SafeFileHandle handle, int offsetLow, int offsetHigh, int countLow, int countHigh);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool UnlockFile(SafeFileHandle handle, int offsetLow, int offsetHigh, int countLow, int countHigh);
-
internal static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1); // WinBase.h
// Note, these are #defines used to extract handles, and are NOT handles.
@@ -1188,42 +741,6 @@ namespace Microsoft.Win32 {
internal String cAlternateFileName = null;
}
-#if FEATURE_CORESYSTEM
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- private static extern bool CopyFileEx(String src,
- String dst,
- IntPtr progressRoutine,
- IntPtr progressData,
- ref uint cancel,
- uint flags);
-
- internal static bool CopyFile(String src, String dst, bool failIfExists)
- {
- uint cancel = 0;
- return CopyFileEx(src, dst, IntPtr.Zero, IntPtr.Zero, ref cancel, failIfExists ? 1U : 0U);
- }
-#else // FEATURE_CORESYSTEM
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool CopyFile(
- String src, String dst, bool failIfExists);
-#endif // FEATURE_CORESYSTEM
-
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool CreateDirectory(
- String path, SECURITY_ATTRIBUTES lpSecurityAttributes);
-
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool DeleteFile(String path);
-
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool ReplaceFile(String replacedFileName, String replacementFileName, String backupFileName, int dwReplaceFlags, IntPtr lpExclude, IntPtr lpReserved);
-
- [DllImport(ADVAPI32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool DecryptFile(String path, int reservedMustBeZero);
-
- [DllImport(ADVAPI32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool EncryptFile(String path);
-
[DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
internal static extern SafeFindHandle FindFirstFile(String fileName, [In, Out] Win32Native.WIN32_FIND_DATA data);
@@ -1234,71 +751,26 @@ namespace Microsoft.Win32 {
WIN32_FIND_DATA lpFindFileData);
[DllImport(KERNEL32)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern bool FindClose(IntPtr handle);
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern int GetCurrentDirectory(
- int nBufferLength,
- [Out]StringBuilder lpBuffer);
-
[DllImport(KERNEL32, SetLastError = true, ExactSpelling = true)]
- internal static extern uint GetCurrentDirectoryW(uint nBufferLength, SafeHandle lpBuffer);
+ internal static extern uint GetCurrentDirectoryW(uint nBufferLength, char[] lpBuffer);
[DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
internal static extern bool GetFileAttributesEx(String name, int fileInfoLevel, ref WIN32_FILE_ATTRIBUTE_DATA lpFileInformation);
[DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool SetFileAttributes(String name, int attr);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern int GetLogicalDrives();
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
- internal static extern uint GetTempFileName(String tmpPath, String prefix, uint uniqueIdOrZero, [Out]StringBuilder tmpFileName);
-
-#if FEATURE_CORESYSTEM
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- private static extern bool MoveFileEx(String src, String dst, uint flags);
-
- internal static bool MoveFile(String src, String dst)
- {
- return MoveFileEx(src, dst, 2 /* MOVEFILE_COPY_ALLOWED */);
- }
-#else // FEATURE_CORESYSTEM
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool MoveFile(String src, String dst);
-#endif // FEATURE_CORESYSTEM
-
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool DeleteVolumeMountPoint(String mountPoint);
-
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern bool RemoveDirectory(String path);
-
- [DllImport(KERNEL32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
internal static extern bool SetCurrentDirectory(String path);
[DllImport(KERNEL32, SetLastError=false, EntryPoint="SetErrorMode", ExactSpelling=true)]
private static extern int SetErrorMode_VistaAndOlder(int newMode);
- [DllImport(KERNEL32, SetLastError=true, EntryPoint="SetThreadErrorMode")]
- private static extern bool SetErrorMode_Win7AndNewer(int newMode, out int oldMode);
-
// RTM versions of Win7 and Windows Server 2008 R2
private static readonly Version ThreadErrorModeMinOsVersion = new Version(6, 1, 7600);
// this method uses the thread-safe version of SetErrorMode on Windows 7 / Windows Server 2008 R2 operating systems.
internal static int SetErrorMode(int newMode)
{
-#if !FEATURE_CORESYSTEM // ARMSTUB
- if (Environment.OSVersion.Version >= ThreadErrorModeMinOsVersion)
- {
- int oldMode;
- SetErrorMode_Win7AndNewer(newMode, out oldMode);
- return oldMode;
- }
-#endif
return SetErrorMode_VistaAndOlder(newMode);
}
@@ -1307,13 +779,6 @@ namespace Microsoft.Win32 {
[DllImport(KERNEL32)]
internal static extern unsafe int WideCharToMultiByte(uint cp, uint flags, char* pwzSource, int cchSource, byte* pbDestBuffer, int cbDestBuffer, IntPtr null1, IntPtr null2);
- // A Win32 HandlerRoutine
- internal delegate bool ConsoleCtrlHandlerRoutine(int controlType);
-
- [DllImport(KERNEL32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static extern bool SetConsoleCtrlHandler(ConsoleCtrlHandlerRoutine handler, bool addOrRemove);
-
[DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
internal static extern bool SetEnvironmentVariable(string lpName, string lpValue);
@@ -1329,9 +794,6 @@ namespace Microsoft.Win32 {
[DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true)]
internal static extern uint GetCurrentProcessId();
- [DllImport(ADVAPI32, CharSet=CharSet.Auto)]
- internal static extern bool GetUserName([Out]StringBuilder lpBuffer, ref int nSize);
-
[DllImport(KERNEL32, CharSet=CharSet.Auto, BestFitMapping=false)]
internal extern static int GetComputerName([Out]StringBuilder nameBuffer, ref int bufferSize);
@@ -1347,195 +809,7 @@ namespace Microsoft.Win32 {
[DllImport(OLE32)]
internal static extern IntPtr CoTaskMemRealloc(IntPtr pv, UIntPtr cb);
- [StructLayoutAttribute(LayoutKind.Sequential)]
- internal struct COORD
- {
- internal short X;
- internal short Y;
- }
-
- [StructLayoutAttribute(LayoutKind.Sequential)]
- internal struct SMALL_RECT
- {
- internal short Left;
- internal short Top;
- internal short Right;
- internal short Bottom;
- }
-
- [StructLayoutAttribute(LayoutKind.Sequential)]
- internal struct CONSOLE_SCREEN_BUFFER_INFO
- {
- internal COORD dwSize;
- internal COORD dwCursorPosition;
- internal short wAttributes;
- internal SMALL_RECT srWindow;
- internal COORD dwMaximumWindowSize;
- }
-
- [StructLayoutAttribute(LayoutKind.Sequential)]
- internal struct CONSOLE_CURSOR_INFO
- {
- internal int dwSize;
- internal bool bVisible;
- }
-
- // Win32's KEY_EVENT_RECORD
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
- internal struct KeyEventRecord
- {
- internal bool keyDown;
- internal short repeatCount;
- internal short virtualKeyCode;
- internal short virtualScanCode;
- internal char uChar; // Union between WCHAR and ASCII char
- internal int controlKeyState;
- }
-
- // Really, this is a union of KeyEventRecords and other types.
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
- internal struct InputRecord
- {
- internal short eventType;
- internal KeyEventRecord keyEvent;
- // This struct is a union! Word alighment should take care of padding!
- }
-
-[Serializable]
- [Flags]
- internal enum Color : short
- {
- Black = 0,
- ForegroundBlue = 0x1,
- ForegroundGreen = 0x2,
- ForegroundRed = 0x4,
- ForegroundYellow = 0x6,
- ForegroundIntensity = 0x8,
- BackgroundBlue = 0x10,
- BackgroundGreen = 0x20,
- BackgroundRed = 0x40,
- BackgroundYellow = 0x60,
- BackgroundIntensity = 0x80,
-
- ForegroundMask = 0xf,
- BackgroundMask = 0xf0,
- ColorMask = 0xff
- }
-
- [StructLayout(LayoutKind.Sequential)]
- internal struct CHAR_INFO
- {
- ushort charData; // Union between WCHAR and ASCII char
- short attributes;
- }
-
- internal const int ENABLE_PROCESSED_INPUT = 0x0001;
- internal const int ENABLE_LINE_INPUT = 0x0002;
- internal const int ENABLE_ECHO_INPUT = 0x0004;
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool SetConsoleMode(IntPtr hConsoleHandle, int mode);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool GetConsoleMode(IntPtr hConsoleHandle, out int mode);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool Beep(int frequency, int duration);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool GetConsoleScreenBufferInfo(IntPtr hConsoleOutput,
- out CONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool SetConsoleScreenBufferSize(IntPtr hConsoleOutput, COORD size);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern COORD GetLargestConsoleWindowSize(IntPtr hConsoleOutput);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern bool FillConsoleOutputCharacter(IntPtr hConsoleOutput,
- char character, int nLength, COORD dwWriteCoord, out int pNumCharsWritten);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool FillConsoleOutputAttribute(IntPtr hConsoleOutput,
- short wColorAttribute, int numCells, COORD startCoord, out int pNumBytesWritten);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static unsafe extern bool SetConsoleWindowInfo(IntPtr hConsoleOutput,
- bool absolute, SMALL_RECT* consoleWindow);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool SetConsoleTextAttribute(IntPtr hConsoleOutput, short attributes);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool SetConsoleCursorPosition(IntPtr hConsoleOutput,
- COORD cursorPosition);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool GetConsoleCursorInfo(IntPtr hConsoleOutput,
- out CONSOLE_CURSOR_INFO cci);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool SetConsoleCursorInfo(IntPtr hConsoleOutput,
- ref CONSOLE_CURSOR_INFO cci);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=true)]
- internal static extern bool SetConsoleTitle(String title);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern bool ReadConsoleInput(IntPtr hConsoleInput, out InputRecord buffer, int numInputRecords_UseOne, out int numEventsRead);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern bool PeekConsoleInput(IntPtr hConsoleInput, out InputRecord buffer, int numInputRecords_UseOne, out int numEventsRead);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static unsafe extern bool ReadConsoleOutput(IntPtr hConsoleOutput, CHAR_INFO* pBuffer, COORD bufferSize, COORD bufferCoord, ref SMALL_RECT readRegion);
-
- [DllImport(KERNEL32, CharSet=CharSet.Unicode, SetLastError=true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- internal static unsafe extern bool ReadConsoleW(SafeFileHandle hConsoleInput, Byte* lpBuffer, Int32 nNumberOfCharsToRead, out Int32 lpNumberOfCharsRead, IntPtr pInputControl);
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static unsafe extern bool WriteConsoleOutput(IntPtr hConsoleOutput, CHAR_INFO* buffer, COORD bufferSize, COORD bufferCoord, ref SMALL_RECT writeRegion);
-
- [DllImport(KERNEL32, CharSet=CharSet.Unicode, SetLastError=true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- internal static unsafe extern bool WriteConsoleW(SafeFileHandle hConsoleOutput, Byte* lpBuffer, Int32 nNumberOfCharsToWrite, out Int32 lpNumberOfCharsWritten, IntPtr lpReservedMustBeNull);
-
- [DllImport(USER32)] // Appears to always succeed
- internal static extern short GetKeyState(int virtualKeyCode);
-
- [DllImport(KERNEL32, SetLastError=false)]
- internal static extern uint GetConsoleCP();
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool SetConsoleCP(uint codePage);
-
- [DllImport(KERNEL32, SetLastError=false)]
- internal static extern uint GetConsoleOutputCP();
-
- [DllImport(KERNEL32, SetLastError=true)]
- internal static extern bool SetConsoleOutputCP(uint codePage);
-
#if FEATURE_WIN32_REGISTRY
- [DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern int RegConnectRegistry(String machineName,
- SafeRegistryHandle key, out SafeRegistryHandle result);
-
- // Note: RegCreateKeyEx won't set the last error on failure - it returns
- // an error code if it fails.
- [DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern int RegCreateKeyEx(SafeRegistryHandle hKey, String lpSubKey,
- int Reserved, String lpClass, int dwOptions,
- int samDesired, SECURITY_ATTRIBUTES lpSecurityAttributes,
- out SafeRegistryHandle hkResult, out int lpdwDisposition);
-
- [DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern int RegDeleteKey(SafeRegistryHandle hKey, String lpSubKey);
-
- [DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern int RegDeleteKeyEx(SafeRegistryHandle hKey, String lpSubKey,
- int samDesired, int Reserved);
[DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
internal static extern int RegDeleteValue(SafeRegistryHandle hKey, String lpValueName);
@@ -1552,17 +826,9 @@ namespace Microsoft.Win32 {
IntPtr lpReserved_MustBeZero, int[] lpType, byte[] lpData,
int[] lpcbData);
-
- [DllImport(ADVAPI32)]
- internal static extern int RegFlushKey(SafeRegistryHandle hKey);
-
[DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
internal static extern int RegOpenKeyEx(SafeRegistryHandle hKey, String lpSubKey,
int ulOptions, int samDesired, out SafeRegistryHandle hkResult);
-
- [DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern int RegOpenKeyEx(IntPtr hKey, String lpSubKey,
- int ulOptions, int samDesired, out SafeRegistryHandle hkResult);
[DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
internal static extern int RegQueryInfoKey(SafeRegistryHandle hKey, [Out]StringBuilder lpClass,
@@ -1593,11 +859,6 @@ namespace Microsoft.Win32 {
ref int lpcbData);
[DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern int RegQueryValueEx(SafeRegistryHandle hKey, String lpValueName,
- int[] lpReserved, ref int lpType, [Out]StringBuilder lpData,
- ref int lpcbData);
-
- [DllImport(ADVAPI32, CharSet=CharSet.Auto, BestFitMapping=false)]
internal static extern int RegSetValueEx(SafeRegistryHandle hKey, String lpValueName,
int Reserved, RegistryValueKind dwType, byte[] lpData, int cbData);
@@ -1676,640 +937,11 @@ namespace Microsoft.Win32 {
internal const int CSIDL_MYMUSIC = 0x000d;
internal const int CSIDL_MYPICTURES = 0x0027;
- [DllImport(SHELL32, CharSet=CharSet.Auto, BestFitMapping=false)]
- internal static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, [Out]StringBuilder lpszPath);
-
internal const int NameSamCompatible = 2;
-
- [DllImport(SECUR32, CharSet=CharSet.Unicode, SetLastError=true)]
- // Win32 return type is BOOLEAN (which is 1 byte and not BOOL which is 4bytes)
- internal static extern byte GetUserNameEx(int format, [Out]StringBuilder domainName, ref uint domainNameLen);
-
- [DllImport(ADVAPI32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
- internal static extern bool LookupAccountName(string machineName, string accountName, byte[] sid,
- ref int sidLen, [Out]StringBuilder domainName, ref uint domainNameLen, out int peUse);
-
- // Note: This returns a handle, but it shouldn't be closed. The Avalon
- // team says CloseWindowStation would ignore this handle. So there
- // isn't a lot of value to switching to SafeHandle here.
- [DllImport(USER32, ExactSpelling=true)]
- internal static extern IntPtr GetProcessWindowStation();
-
- [DllImport(USER32, SetLastError=true)]
- internal static extern bool GetUserObjectInformation(IntPtr hObj, int nIndex,
- [MarshalAs(UnmanagedType.LPStruct)] USEROBJECTFLAGS pvBuffer, int nLength, ref int lpnLengthNeeded);
[DllImport(USER32, SetLastError=true, BestFitMapping=false)]
internal static extern IntPtr SendMessageTimeout(IntPtr hWnd, int Msg, IntPtr wParam, String lParam, uint fuFlags, uint uTimeout, IntPtr lpdwResult);
- [StructLayout(LayoutKind.Sequential)]
- internal class USEROBJECTFLAGS {
- internal int fInherit = 0;
- internal int fReserved = 0;
- internal int dwFlags = 0;
- }
-
- //
- // DPAPI
- //
-
-#if FEATURE_LEGACYSURFACE
- //
- // RtlEncryptMemory and RtlDecryptMemory are declared in the internal header file crypt.h.
- // They were also recently declared in the public header file ntsecapi.h (in the Platform SDK as well as the current build of Server 2003).
- // We use them instead of CryptProtectMemory and CryptUnprotectMemory because
- // they are available in both WinXP and in Windows Server 2003.
- //
-
- [DllImport(Win32Native.ADVAPI32, CharSet=CharSet.Unicode, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static extern
- int SystemFunction040 (
- [In,Out] SafeBSTRHandle pDataIn,
- [In] uint cbDataIn, // multiple of RTL_ENCRYPT_MEMORY_SIZE
- [In] uint dwFlags);
-
- [DllImport(Win32Native.ADVAPI32, CharSet=CharSet.Unicode, SetLastError=true)]
- internal static extern
- int SystemFunction041 (
- [In,Out] SafeBSTRHandle pDataIn,
- [In] uint cbDataIn, // multiple of RTL_ENCRYPT_MEMORY_SIZE
- [In] uint dwFlags);
-#endif // FEATURE_LEGACYSURFACE
-
- [DllImport(NTDLL, CharSet=CharSet.Unicode, SetLastError=true)]
- internal static extern
- int RtlNtStatusToDosError (
- [In] int status);
-
- // Get the current FIPS policy setting on Vista and above
- [DllImport("bcrypt.dll")]
- internal static extern uint BCryptGetFipsAlgorithmMode(
- [MarshalAs(UnmanagedType.U1), Out]out bool pfEnabled);
-
- //
- // Managed ACLs
- //
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- [DllImport(ADVAPI32, CharSet=CharSet.Unicode, SetLastError=true)]
- internal static extern
- bool AdjustTokenPrivileges (
- [In] SafeAccessTokenHandle TokenHandle,
- [In] bool DisableAllPrivileges,
- [In] ref TOKEN_PRIVILEGE NewState,
- [In] uint BufferLength,
- [In,Out] ref TOKEN_PRIVILEGE PreviousState,
- [In,Out] ref uint ReturnLength);
-
- [DllImport(ADVAPI32, CharSet=CharSet.Unicode, SetLastError=true)]
- internal static extern
- bool AllocateLocallyUniqueId(
- [In,Out] ref LUID Luid);
-
- [DllImport(ADVAPI32, CharSet=CharSet.Unicode, SetLastError=true)]
- internal static extern
- bool CheckTokenMembership(
- [In] SafeAccessTokenHandle TokenHandle,
- [In] byte[] SidToCheck,
- [In,Out] ref bool IsMember);
-
- [DllImport(
- ADVAPI32,
- EntryPoint="ConvertSecurityDescriptorToStringSecurityDescriptorW",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern BOOL ConvertSdToStringSd(
- byte[] securityDescriptor,
- /* DWORD */ uint requestedRevision,
- ULONG securityInformation,
- out IntPtr resultString,
- ref ULONG resultStringLength );
-
- [DllImport(
- ADVAPI32,
- EntryPoint="ConvertStringSecurityDescriptorToSecurityDescriptorW",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern BOOL ConvertStringSdToSd(
- string stringSd,
- /* DWORD */ uint stringSdRevision,
- out IntPtr resultSd,
- ref ULONG resultSdLength );
-
- [DllImport(
- ADVAPI32,
- EntryPoint="ConvertStringSidToSidW",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern BOOL ConvertStringSidToSid(
- string stringSid,
- out IntPtr ByteArray
- );
-
- [DllImport(
- ADVAPI32,
- EntryPoint = "ConvertSidToStringSidW",
- CallingConvention = CallingConvention.Winapi,
- SetLastError = true,
- ExactSpelling = true,
- CharSet = CharSet.Unicode)]
- [return: MarshalAs(UnmanagedType.Bool)]
- internal static extern bool ConvertSidToStringSid(
- IntPtr Sid,
- ref IntPtr StringSid
- );
-
-
- [DllImport(
- ADVAPI32,
- EntryPoint="CreateWellKnownSid",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern BOOL CreateWellKnownSid(
- int sidType,
- byte[] domainSid,
- [Out] byte[] resultSid,
- ref /*DWORD*/ uint resultSidLength );
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- bool DuplicateHandle (
- [In] IntPtr hSourceProcessHandle,
- [In] IntPtr hSourceHandle,
- [In] IntPtr hTargetProcessHandle,
- [In,Out] ref SafeAccessTokenHandle lpTargetHandle,
- [In] uint dwDesiredAccess,
- [In] bool bInheritHandle,
- [In] uint dwOptions);
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- bool DuplicateHandle (
- [In] IntPtr hSourceProcessHandle,
- [In] SafeAccessTokenHandle hSourceHandle,
- [In] IntPtr hTargetProcessHandle,
- [In,Out] ref SafeAccessTokenHandle lpTargetHandle,
- [In] uint dwDesiredAccess,
- [In] bool bInheritHandle,
- [In] uint dwOptions);
-
- [DllImport(
- ADVAPI32,
- EntryPoint="EqualDomainSid",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern BOOL IsEqualDomainSid(
- byte[] sid1,
- byte[] sid2,
- out bool result);
-
- [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern IntPtr GetCurrentProcess();
-
- [DllImport(KERNEL32, CharSet = CharSet.Auto, SetLastError = true)]
- internal static extern IntPtr GetCurrentThread();
-
- [DllImport(
- ADVAPI32,
- EntryPoint="GetSecurityDescriptorLength",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern /*DWORD*/ uint GetSecurityDescriptorLength(
- IntPtr byteArray );
-
- [DllImport(
- ADVAPI32,
- EntryPoint="GetSecurityInfo",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern /*DWORD*/ uint GetSecurityInfoByHandle(
- SafeHandle handle,
- /*DWORD*/ uint objectType,
- /*DWORD*/ uint securityInformation,
- out IntPtr sidOwner,
- out IntPtr sidGroup,
- out IntPtr dacl,
- out IntPtr sacl,
- out IntPtr securityDescriptor );
-
- [DllImport(
- ADVAPI32,
- EntryPoint="GetNamedSecurityInfoW",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern /*DWORD*/ uint GetSecurityInfoByName(
- string name,
- /*DWORD*/ uint objectType,
- /*DWORD*/ uint securityInformation,
- out IntPtr sidOwner,
- out IntPtr sidGroup,
- out IntPtr dacl,
- out IntPtr sacl,
- out IntPtr securityDescriptor );
-
- [DllImport(ADVAPI32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- bool GetTokenInformation (
- [In] IntPtr TokenHandle,
- [In] uint TokenInformationClass,
- [In] SafeLocalAllocHandle TokenInformation,
- [In] uint TokenInformationLength,
- [Out] out uint ReturnLength);
-
- [DllImport(ADVAPI32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- bool GetTokenInformation (
- [In] SafeAccessTokenHandle TokenHandle,
- [In] uint TokenInformationClass,
- [In] SafeLocalAllocHandle TokenInformation,
- [In] uint TokenInformationLength,
- [Out] out uint ReturnLength);
-
- [DllImport(
- ADVAPI32,
- EntryPoint="GetWindowsAccountDomainSid",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern BOOL GetWindowsAccountDomainSid(
- byte[] sid,
- [Out] byte[] resultSid,
- ref /*DWORD*/ uint resultSidLength );
-
- internal enum SECURITY_IMPERSONATION_LEVEL
- {
- Anonymous = 0,
- Identification = 1,
- Impersonation = 2,
- Delegation = 3,
- }
-
- // Structures and definitions for Claims that are being introduced in Win8
- // inside the NTTOken - see winnt.h. They will be surfaced through WindowsIdentity.Claims
-
- // CLAIM_SECURITY_ATTRIBUTE_TYPE_INVALID -> 0x00
- internal const int CLAIM_SECURITY_ATTRIBUTE_TYPE_INVALID = 0;
-
- // CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64 -> 0x01
- internal const int CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64 = 1;
-
- // CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64 -> 0x02
- internal const int CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64 = 2;
-
- // CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING -> 0x03
- internal const int CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING = 3;
-
- // CLAIM_SECURITY_ATTRIBUTE_TYPE_FQBN -> 0x04
- internal const int CLAIM_SECURITY_ATTRIBUTE_TYPE_FQBN = 4;
-
- // CLAIM_SECURITY_ATTRIBUTE_TYPE_SID -> 0x05
- internal const int CLAIM_SECURITY_ATTRIBUTE_TYPE_SID = 5;
-
- // CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN -> 0x06
- internal const int CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN = 6;
-
- // CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING -> 0x10
- internal const int CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING = 16;
-
- // CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE -> 0x0001
- internal const int CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE = 1;
-
- // CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE -> 0x0002
- internal const int CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE = 2;
-
- // CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY -> 0x0004
- internal const int CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY = 4;
-
- // CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT -> 0x0008
- internal const int CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT = 8;
-
- // CLAIM_SECURITY_ATTRIBUTE_DISABLED -> 0x0010
- internal const int CLAIM_SECURITY_ATTRIBUTE_DISABLED = 16;
-
- // CLAIM_SECURITY_ATTRIBUTE_MANDATORY -> 0x0020
- internal const int CLAIM_SECURITY_ATTRIBUTE_MANDATORY = 32;
-
- internal const int CLAIM_SECURITY_ATTRIBUTE_VALID_FLAGS =
- CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE
- | CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE
- | CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY
- | CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT
- | CLAIM_SECURITY_ATTRIBUTE_DISABLED
- | CLAIM_SECURITY_ATTRIBUTE_MANDATORY;
-
-
- [StructLayoutAttribute( LayoutKind.Explicit )]
- internal struct CLAIM_SECURITY_ATTRIBUTE_INFORMATION_V1
- {
- // defined as union in CLAIM_SECURITY_ATTRIBUTES_INFORMATION
- [FieldOffsetAttribute( 0 )]
- public IntPtr pAttributeV1;
- }
-
- [StructLayoutAttribute( LayoutKind.Sequential )]
- internal struct CLAIM_SECURITY_ATTRIBUTES_INFORMATION
- {
- /// WORD->unsigned short
- public ushort Version;
-
- /// WORD->unsigned short
- public ushort Reserved;
-
- /// DWORD->unsigned int
- public uint AttributeCount;
-
- /// CLAIM_SECURITY_ATTRIBUTE_V1
- public CLAIM_SECURITY_ATTRIBUTE_INFORMATION_V1 Attribute;
- }
-
- //
- // Fully-qualified binary name.
- //
- [StructLayoutAttribute( LayoutKind.Sequential, CharSet = CharSet.Unicode )]
- internal struct CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE
- {
- // DWORD64->unsigned __int64
- public ulong Version;
-
- // PWSTR->WCHAR*
- [MarshalAsAttribute( UnmanagedType.LPWStr )]
- public string Name;
- }
-
- [StructLayoutAttribute( LayoutKind.Sequential, CharSet = CharSet.Unicode )]
- internal struct CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE
- {
- /// PVOID->void*
- public IntPtr pValue;
-
- /// DWORD->unsigned int
- public uint ValueLength;
- }
-
- [StructLayoutAttribute( LayoutKind.Explicit, CharSet = CharSet.Unicode )]
- internal struct CLAIM_VALUES_ATTRIBUTE_V1
- {
- // PLONG64->__int64*
- [FieldOffsetAttribute( 0 )]
- public IntPtr pInt64;
-
- // PDWORD64->unsigned __int64*
- [FieldOffsetAttribute( 0 )]
- public IntPtr pUint64;
-
- // PWSTR*
- [FieldOffsetAttribute( 0 )]
- public IntPtr ppString;
-
- // PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE->_CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE*
- [FieldOffsetAttribute( 0 )]
- public IntPtr pFqbn;
-
- // PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE->_CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE*
- [FieldOffsetAttribute( 0 )]
- public IntPtr pOctetString;
- }
-
- [StructLayoutAttribute( LayoutKind.Sequential, CharSet = CharSet.Unicode )]
- internal struct CLAIM_SECURITY_ATTRIBUTE_V1
- {
- // PWSTR->WCHAR*
- [MarshalAsAttribute( UnmanagedType.LPWStr )]
- public string Name;
-
- // WORD->unsigned short
- public ushort ValueType;
-
- // WORD->unsigned short
- public ushort Reserved;
-
- // DWORD->unsigned int
- public uint Flags;
-
- // DWORD->unsigned int
- public uint ValueCount;
-
- // struct CLAIM_VALUES - a union of 4 possible values
- public CLAIM_VALUES_ATTRIBUTE_V1 Values;
- }
-
- [DllImport(
- ADVAPI32,
- EntryPoint="IsWellKnownSid",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern BOOL IsWellKnownSid(
- byte[] sid,
- int type );
-
- [DllImport(
- ADVAPI32,
- EntryPoint="LsaOpenPolicy",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern /*DWORD*/ uint LsaOpenPolicy(
- string systemName,
- ref LSA_OBJECT_ATTRIBUTES attributes,
- int accessMask,
- out SafeLsaPolicyHandle handle
- );
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- [DllImport(
- ADVAPI32,
- EntryPoint="LookupPrivilegeValueW",
- CharSet=CharSet.Auto,
- SetLastError=true,
- ExactSpelling=true,
- BestFitMapping=false)]
- internal static extern
- bool LookupPrivilegeValue (
- [In] string lpSystemName,
- [In] string lpName,
- [In,Out] ref LUID Luid);
-
- [DllImport(
- ADVAPI32,
- EntryPoint="LsaLookupSids",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern /*DWORD*/ uint LsaLookupSids(
- SafeLsaPolicyHandle handle,
- int count,
- IntPtr[] sids,
- ref SafeLsaMemoryHandle referencedDomains,
- ref SafeLsaMemoryHandle names
- );
-
- [DllImport(ADVAPI32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static extern int LsaFreeMemory( IntPtr handle );
-
- [DllImport(
- ADVAPI32,
- EntryPoint="LsaLookupNames",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern /*DWORD*/ uint LsaLookupNames(
- SafeLsaPolicyHandle handle,
- int count,
- UNICODE_STRING[] names,
- ref SafeLsaMemoryHandle referencedDomains,
- ref SafeLsaMemoryHandle sids
- );
-
- [DllImport(
- ADVAPI32,
- EntryPoint="LsaLookupNames2",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern /*DWORD*/ uint LsaLookupNames2(
- SafeLsaPolicyHandle handle,
- int flags,
- int count,
- UNICODE_STRING[] names,
- ref SafeLsaMemoryHandle referencedDomains,
- ref SafeLsaMemoryHandle sids
- );
-
- [DllImport(SECUR32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- int LsaConnectUntrusted (
- [In,Out] ref SafeLsaLogonProcessHandle LsaHandle);
-
- [DllImport(SECUR32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- int LsaGetLogonSessionData (
- [In] ref LUID LogonId,
- [In,Out] ref SafeLsaReturnBufferHandle ppLogonSessionData);
-
- [DllImport(SECUR32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- int LsaLogonUser (
- [In] SafeLsaLogonProcessHandle LsaHandle,
- [In] ref UNICODE_INTPTR_STRING OriginName,
- [In] uint LogonType,
- [In] uint AuthenticationPackage,
- [In] IntPtr AuthenticationInformation,
- [In] uint AuthenticationInformationLength,
- [In] IntPtr LocalGroups,
- [In] ref TOKEN_SOURCE SourceContext,
- [In,Out] ref SafeLsaReturnBufferHandle ProfileBuffer,
- [In,Out] ref uint ProfileBufferLength,
- [In,Out] ref LUID LogonId,
- [In,Out] ref SafeAccessTokenHandle Token,
- [In,Out] ref QUOTA_LIMITS Quotas,
- [In,Out] ref int SubStatus);
-
- [DllImport(SECUR32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- int LsaLookupAuthenticationPackage (
- [In] SafeLsaLogonProcessHandle LsaHandle,
- [In] ref UNICODE_INTPTR_STRING PackageName,
- [In,Out] ref uint AuthenticationPackage);
-
- [DllImport(SECUR32, CharSet=CharSet.Auto, SetLastError=true)]
- internal static extern
- int LsaRegisterLogonProcess (
- [In] ref UNICODE_INTPTR_STRING LogonProcessName,
- [In,Out] ref SafeLsaLogonProcessHandle LsaHandle,
- [In,Out] ref IntPtr SecurityMode);
-
- [DllImport(SECUR32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static extern int LsaDeregisterLogonProcess(IntPtr handle);
-
- [DllImport(ADVAPI32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static extern int LsaClose( IntPtr handle );
-
- [DllImport(SECUR32, SetLastError=true)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static extern int LsaFreeReturnBuffer(IntPtr handle);
-
- [DllImport(
- ADVAPI32,
- EntryPoint="SetNamedSecurityInfoW",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern /*DWORD*/ uint SetSecurityInfoByName(
- string name,
- /*DWORD*/ uint objectType,
- /*DWORD*/ uint securityInformation,
- byte[] owner,
- byte[] group,
- byte[] dacl,
- byte[] sacl );
-
- [DllImport(
- ADVAPI32,
- EntryPoint="SetSecurityInfo",
- CallingConvention=CallingConvention.Winapi,
- SetLastError=true,
- ExactSpelling=true,
- CharSet=CharSet.Unicode)]
- internal static extern /*DWORD*/ uint SetSecurityInfoByHandle(
- SafeHandle handle,
- /*DWORD*/ uint objectType,
- /*DWORD*/ uint securityInformation,
- byte[] owner,
- byte[] group,
- byte[] dacl,
- byte[] sacl );
-
- [DllImport(KERNEL32, CharSet=CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurityAttribute()]
- internal unsafe static extern int WideCharToMultiByte(
- int CodePage,
- UInt32 dwFlags,
- char* lpWideCharStr,
- int cchWideChar,
- byte* lpMultiByteStr,
- int cchMultiByte,
- char* lpDefaultChar,
- bool* lpUsedDefaultChar);
-
- [DllImport(KERNEL32, CharSet=CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurityAttribute()]
- internal unsafe static extern int MultiByteToWideChar(
- int CodePage,
- UInt32 dwFlags,
- byte* lpMultiByteStr,
- int cchMultiByte,
- char* lpWideCharStr,
- int cchWideChar);
-
[DllImport(KERNEL32, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal extern static bool QueryUnbiasedInterruptTime(out ulong UnbiasedTime);
@@ -2320,25 +952,6 @@ namespace Microsoft.Win32 {
[Out, MarshalAs(UnmanagedType.LPArray)] byte[] buffer, int length);
#else
private const int BCRYPT_USE_SYSTEM_PREFERRED_RNG = 0x00000002;
-
- [DllImport("BCrypt.dll", CharSet = CharSet.Unicode)]
- private static extern uint BCryptGenRandom(IntPtr hAlgorithm, [In, Out] byte[] pbBuffer, int cbBuffer, int dwFlags);
-
- internal static void Random(bool bStrong, byte[] buffer, int length)
- {
- uint status = BCryptGenRandom(IntPtr.Zero, buffer, length, BCRYPT_USE_SYSTEM_PREFERRED_RNG);
- if (status != STATUS_SUCCESS)
- {
- if (status == STATUS_NO_MEMORY)
- {
- throw new OutOfMemoryException();
- }
- else
- {
- throw new InvalidOperationException();
- }
- }
- }
#endif
}
}
diff --git a/src/mscorlib/src/System.Private.CoreLib.txt b/src/mscorlib/src/System.Private.CoreLib.txt
index cf17dae96f..b4e9e297d9 100644
--- a/src/mscorlib/src/System.Private.CoreLib.txt
+++ b/src/mscorlib/src/System.Private.CoreLib.txt
@@ -330,8 +330,8 @@ Arg_MemberInfoNullModule = The Module object containing the member cannot be nul
Arg_ParameterInfoNullMember = The MemberInfo object defining the parameter cannot be null.
Arg_ParameterInfoNullModule = The Module object containing the parameter cannot be null.
Arg_AssemblyNullModule = The manifest module of the assembly cannot be null.
-Arg_LongerThanSrcArray = Source array was not long enough. Check srcIndex and length, and the array's lower bounds.
-Arg_LongerThanDestArray = Destination array was not long enough. Check destIndex and length, and the array's lower bounds.
+Arg_LongerThanSrcArray = Source array was not long enough. Check the source index, length, and the array's lower bounds.
+Arg_LongerThanDestArray = Destination array was not long enough. Check the destination index, length, and the array's lower bounds.
Arg_LowerBoundsMustMatch = The arrays' lower bounds must be identical.
Arg_MustBeBoolean = Object must be of type Boolean.
Arg_MustBeByte = Object must be of type Byte.
@@ -590,10 +590,8 @@ Argument_PreAllocatedAlreadyAllocated = 'preAllocated' is already in use.
Argument_NativeOverlappedWrongBoundHandle = 'overlapped' was not allocated by this ThreadPoolBoundHandle instance.
Argument_NativeOverlappedAlreadyFree = 'overlapped' has already been freed.
Argument_AlreadyBoundOrSyncHandle = 'handle' has already been bound to the thread pool, or was not opened for asynchronous I/O.
-#if FEATURE_SPAN_OF_T
Argument_InvalidTypeWithPointersNotSupported = Cannot use type '{0}'. Only value types without pointers or references are supported.
Argument_DestinationTooShort = Destination is too short.
-#endif // FEATURE_SPAN_OF_T
;
; =====================================================
@@ -895,44 +893,6 @@ Cryptography_PasswordDerivedBytes_FewBytesSalt = Salt is not at least eight byte
Cryptography_PKCS7_InvalidPadding = Padding is invalid and cannot be removed.
Cryptography_UnknownHashAlgorithm='{0}' is not a known hash algorithm.
-#if FEATURE_CRYPTO
-Cryptography_Config_EncodedOIDError = Encoded OID length is too large (greater than 0x7f bytes).
-Cryptography_CSP_AlgKeySizeNotAvailable = Algorithm implementation does not support a key size of {0}.
-Cryptography_CSP_AlgorithmNotAvailable = Cryptographic service provider (CSP) could not be found for this algorithm.
-Cryptography_CSP_CFBSizeNotSupported = Feedback size for the cipher feedback mode (CFB) must be 8 bits.
-Cryptography_CSP_NotFound = The requested key container was not found.
-Cryptography_CSP_NoPrivateKey = Object contains only the public half of a key pair. A private key must also be provided.
-Cryptography_CSP_OFBNotSupported = Output feedback mode (OFB) is not supported by this implementation.
-Cryptography_CSP_WrongKeySpec = The specified cryptographic service provider (CSP) does not support this key algorithm.
-Cryptography_HashNameSet = Hash name cannot be changed after the first write to the stream.
-Cryptography_HashAlgorithmNameNullOrEmpty = The hash algorithm name cannot be null or empty.
-Cryptography_InvalidHashSize = {0} algorithm hash size is {1} bytes.
-Cryptography_InvalidKey_Weak = Specified key is a known weak key for '{0}' and cannot be used.
-Cryptography_InvalidKey_SemiWeak = Specified key is a known semi-weak key for '{0}' and cannot be used.
-Cryptography_InvalidKeyParameter = Parameter '{0}' is not a valid key parameter.
-Cryptography_InvalidFeedbackSize = Specified feedback size is invalid.
-Cryptography_InvalidOperation = This operation is not supported for this class.
-Cryptography_InvalidPaddingMode = Specified padding mode is not valid for this algorithm.
-Cryptography_InvalidFromXmlString = Input string does not contain a valid encoding of the '{0}' '{1}' parameter.
-Cryptography_MissingKey = No asymmetric key object has been associated with this formatter object.
-Cryptography_MissingOID = Required object identifier (OID) cannot be found.
-Cryptography_NotInteractive = The current session is not interactive.
-Cryptography_NonCompliantFIPSAlgorithm = This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.
-Cryptography_Padding_Win2KEnhOnly = Direct Encryption and decryption using RSA are not available on this platform.
-Cryptography_Padding_EncDataTooBig = The data to be encrypted exceeds the maximum for this modulus of {0} bytes.
-Cryptography_Padding_DecDataTooBig = The data to be decrypted exceeds the maximum for this modulus of {0} bytes.
-Cryptography_PasswordDerivedBytes_ValuesFixed = Value of '{0}' cannot be changed after the bytes have been retrieved.
-Cryptography_PasswordDerivedBytes_TooManyBytes = Requested number of bytes exceeds the maximum.
-Cryptography_PasswordDerivedBytes_InvalidAlgorithm = Algorithm is unavailable or is not supported for this operation.
-Cryptography_PKCS1Decoding = Error occurred while decoding PKCS1 padding.
-Cryptography_RC2_EKSKS = EffectiveKeySize value must be at least as large as the KeySize value.
-Cryptography_RC2_EKSKS2 = EffectiveKeySize must be the same as KeySize in this implementation.
-Cryptography_RC2_EKS40 = EffectiveKeySize value must be at least 40 bits.
-Cryptography_SSD_InvalidDataSize = Length of the data to decrypt is invalid.
-Cryptography_AddNullOrEmptyName = CryptoConfig cannot add a mapping for a null or empty name.
-Cryptography_AlgorithmTypesMustBeVisible = Algorithms added to CryptoConfig must be accessable from outside their assembly.
-#endif // FEATURE_CRYPTO
-
; EventSource
EventSource_ToString = EventSource({0}, {1})
EventSource_EventSourceGuidInUse = An instance of EventSource with Guid {0} already exists.
@@ -1092,7 +1052,6 @@ InvalidOperation_CantCancelCtrlBreak = Applications may not prevent control-brea
InvalidOperation_CalledTwice = The method cannot be called twice on the same instance.
InvalidOperation_CollectionCorrupted = A prior operation on this collection was interrupted by an exception. Collection's state is no longer trusted.
InvalidOperation_CriticalTransparentAreMutuallyExclusive = SecurityTransparent and SecurityCritical attributes cannot be applied to the assembly scope at the same time.
-InvalidOperation_SubclassedObject = Cannot set sub-classed {0} object to {1} object.
InvalidOperation_ExceptionStateCrossAppDomain = Thread.ExceptionState cannot access an ExceptionState from a different AppDomain.
InvalidOperation_DebuggerLaunchFailed = Debugger unable to launch.
InvalidOperation_ApartmentStateSwitchFailed = Failed to set the specified COM apartment state.
@@ -1410,10 +1369,9 @@ NotSupported_NativeCallableTarget = Methods with NativeCallableAttribute cannot
NotSupported_GenericMethod = Generic methods with NativeCallableAttribute are not supported.
NotSupported_NonBlittableTypes = Non-blittable parameter types are not supported for NativeCallable methods.
-#if FEATURE_WINDOWSPHONE
NotSupported_UserDllImport = DllImport cannot be used on user-defined methods.
NotSupported_UserCOM = COM Interop is not supported for user-defined types.
-#endif //FEATURE_WINDOWSPHONE
+
#if FEATURE_APPX
NotSupported_AppX = {0} is not supported in AppX.
LoadOfFxAssemblyNotSupported_AppX = {0} of .NET Framework assemblies is not supported in AppX.
@@ -1426,16 +1384,12 @@ ReflectionTypeLoad_LoadFailed = Unable to load one or more of the requested type
#if FEATURE_COMINTEROP
NotSupported_PIAInAppxProcess = A Primary Interop Assembly is not supported in AppX.
#endif
-#if FEATURE_WINDOWSPHONE
-; Not referring to "Windows Phone" in the messages, as FEATURE_WINDOWSPHONE is defined for .NET Core as well.
-NotSupported_WindowsPhone = {0} is not supported.
NotSupported_AssemblyLoadCodeBase = Assembly.Load with a Codebase is not supported.
NotSupported_AssemblyLoadFromHash = Assembly.LoadFrom with hashValue is not supported.
-#endif
-#if FEATURE_SPAN_OF_T
NotSupported_CannotCallEqualsOnSpan = Equals() on Span and ReadOnlySpan is not supported. Use operator== instead.
NotSupported_CannotCallGetHashCodeOnSpan = GetHashCode() on Span and ReadOnlySpan is not supported.
-#endif // FEATURE_SPAN_OF_T
+NotSupported_ReflectionOnlyLoad = Assembly.ReflectionOnlyLoad is not supported.
+NotSupported_ReflectionOnlyGetType = Type.ReflectionOnlyGetType is not supported.
; TypeLoadException
TypeLoad_ResolveType = Could not resolve type '{0}'.
@@ -1991,10 +1945,6 @@ WeakReference_NoLongerValid = The weak reference is no longer valid.
Interop.COM_TypeMismatch = Type mismatch between source and destination types.
Interop_Marshal_Unmappable_Char = Cannot marshal: Encountered unmappable character.
-#if FEATURE_COMINTEROP_WINRT_DESKTOP_HOST
-WinRTHostDomainName = Windows Runtime Object Host Domain for '{0}'
-#endif
-
;
; Loader Exceptions
;
@@ -2007,11 +1957,9 @@ Loader_ContextPolicies = Context Policies:
; AppDomain Exceptions
AppDomain_RequireApplicationName = ApplicationName must be set before the DynamicBase can be set.
AppDomain_AppBaseNotSet = The ApplicationBase must be set before retrieving this property.
-
-#if FEATURE_HOST_ASSEMBLY_RESOLVER
AppDomain_BindingModelIsLocked = Binding model is already locked for the AppDomain and cannot be reset.
Argument_CustomAssemblyLoadContextRequestedNameMismatch = Resolved assembly's simple name should be the same as of the requested assembly.
-#endif // FEATURE_HOST_ASSEMBLY_RESOLVER
+
;
; XMLSyntaxExceptions
XMLSyntax_UnexpectedEndOfFile = Unexpected end of file.
@@ -2282,3 +2230,6 @@ Globalization.cp_57011 = ISCII Punjabi
;------------------
+; ValueTuple
+ArgumentException_ValueTupleIncorrectType=Argument must be of type {0}.
+ArgumentException_ValueTupleLastArgumentNotAValueTuple=The last element of an eight element ValueTuple must be a ValueTuple.
diff --git a/src/mscorlib/src/System/AccessViolationException.cs b/src/mscorlib/src/System/AccessViolationException.cs
index 308d52e9ed..12911c1b17 100644
--- a/src/mscorlib/src/System/AccessViolationException.cs
+++ b/src/mscorlib/src/System/AccessViolationException.cs
@@ -11,41 +11,38 @@
**
=============================================================================*/
-namespace System
-{
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System;
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public class AccessViolationException : SystemException
+ public class AccessViolationException : SystemException
{
- public AccessViolationException()
- : base(Environment.GetResourceString("Arg_AccessViolationException"))
+ public AccessViolationException()
+ : base(SR.Arg_AccessViolationException)
{
- SetErrorCode(__HResults.E_POINTER);
+ HResult = __HResults.E_POINTER;
}
-
- public AccessViolationException(String message)
- : base(message)
+
+ public AccessViolationException(String message)
+ : base(message)
{
- SetErrorCode(__HResults.E_POINTER);
+ HResult = __HResults.E_POINTER;
}
-
- public AccessViolationException(String message, Exception innerException)
- : base(message, innerException)
+
+ public AccessViolationException(String message, Exception innerException)
+ : base(message, innerException)
{
- SetErrorCode(__HResults.E_POINTER);
+ HResult = __HResults.E_POINTER;
}
- protected AccessViolationException(SerializationInfo info, StreamingContext context) : base(info, context) {}
+ protected AccessViolationException(SerializationInfo info, StreamingContext context) : base(info, context) { }
#pragma warning disable 169 // Field is not used from managed.
private IntPtr _ip; // Address of faulting instruction.
private IntPtr _target; // Address that could not be accessed.
private int _accessType; // 0:read, 1:write
#pragma warning restore 169
-
}
-
}
diff --git a/src/mscorlib/src/System/Action.cs b/src/mscorlib/src/System/Action.cs
index 27f7fafe5c..23c7e93194 100644
--- a/src/mscorlib/src/System/Action.cs
+++ b/src/mscorlib/src/System/Action.cs
@@ -6,8 +6,6 @@ namespace System
{
public delegate void Action<in T>(T obj);
- // Action/Func delegates first shipped with .NET Framework 3.5 in System.Core.dll as part of LINQ
- // These were type forwarded to mscorlib.dll in .NET Framework 4.0 and in Silverlight 5.0
public delegate void Action();
public delegate void Action<in T1,in T2>(T1 arg1, T2 arg2);
public delegate void Action<in T1,in T2,in T3>(T1 arg1, T2 arg2, T3 arg3);
@@ -32,8 +30,6 @@ namespace System
public delegate int Comparison<in T>(T x, T y);
public delegate TOutput Converter<in TInput, out TOutput>(TInput input);
-
- public delegate bool Predicate<in T>(T obj);
+ public delegate bool Predicate<in T>(T obj);
}
-
diff --git a/src/mscorlib/src/System/Activator.cs b/src/mscorlib/src/System/Activator.cs
index 6fad8f3173..323fbba9cc 100644
--- a/src/mscorlib/src/System/Activator.cs
+++ b/src/mscorlib/src/System/Activator.cs
@@ -22,16 +22,12 @@ namespace System {
using StackCrawlMark = System.Threading.StackCrawlMark;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
- using System.Security.Permissions;
using AssemblyHashAlgorithm = System.Configuration.Assemblies.AssemblyHashAlgorithm;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
// Only statics, does not need to be marked with the serializable attribute
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_Activator))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class Activator : _Activator
+ public sealed class Activator
{
internal const int LookupMask = 0x000000FF;
internal const BindingFlags ConLookup = (BindingFlags) (BindingFlags.Instance | BindingFlags.Public);
@@ -209,31 +205,6 @@ namespace System {
null,
activationAttributes);
}
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- static public ObjectHandle CreateInstance(String assemblyName,
- String typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityInfo)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return CreateInstance(assemblyName,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes,
- securityInfo,
- ref stackMark);
- }
[MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public static ObjectHandle CreateInstance(string assemblyName,
@@ -286,7 +257,7 @@ namespace System {
// Classic managed type
assembly = RuntimeAssembly.InternalLoadAssemblyName(
assemblyName, securityInfo, null, ref stackMark,
- true /*thrownOnFileNotFound*/, false /*forIntrospection*/, false /*suppressSecurityChecks*/);
+ true /*thrownOnFileNotFound*/, false /*forIntrospection*/);
}
}
@@ -314,29 +285,6 @@ namespace System {
}
}
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- static public ObjectHandle CreateInstanceFrom(String assemblyFile,
- String typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityInfo)
-
- {
- return CreateInstanceFromInternal(assemblyFile,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes,
- securityInfo);
- }
-
public static ObjectHandle CreateInstanceFrom(string assemblyFile,
string typeName,
bool ignoreCase,
@@ -388,120 +336,6 @@ namespace System {
}
}
- //
- // This API is designed to be used when a host needs to execute code in an AppDomain
- // with restricted security permissions. In that case, we demand in the client domain
- // and assert in the server domain because the server domain might not be trusted enough
- // to pass the security checks when activating the type.
- //
-
- public static ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName) {
- if (domain == null)
- throw new ArgumentNullException(nameof(domain));
- Contract.EndContractBlock();
- return domain.InternalCreateInstanceWithNoSecurity(assemblyName, typeName);
- }
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public static ObjectHandle CreateInstance (AppDomain domain,
- string assemblyName,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityAttributes) {
- if (domain == null)
- throw new ArgumentNullException(nameof(domain));
- Contract.EndContractBlock();
-
- return domain.InternalCreateInstanceWithNoSecurity(assemblyName, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, securityAttributes);
- }
-
- public static ObjectHandle CreateInstance(AppDomain domain,
- string assemblyName,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- object[] args,
- CultureInfo culture,
- object[] activationAttributes)
- {
- if (domain == null)
- throw new ArgumentNullException(nameof(domain));
- Contract.EndContractBlock();
-
- return domain.InternalCreateInstanceWithNoSecurity(assemblyName,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes,
- null);
- }
-
- //
- // This API is designed to be used when a host needs to execute code in an AppDomain
- // with restricted security permissions. In that case, we demand in the client domain
- // and assert in the server domain because the server domain might not be trusted enough
- // to pass the security checks when activating the type.
- //
-
- public static ObjectHandle CreateInstanceFrom (AppDomain domain, string assemblyFile, string typeName) {
- if (domain == null)
- throw new ArgumentNullException(nameof(domain));
- Contract.EndContractBlock();
- return domain.InternalCreateInstanceFromWithNoSecurity(assemblyFile, typeName);
- }
-
- [Obsolete("Methods which use Evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public static ObjectHandle CreateInstanceFrom (AppDomain domain,
- string assemblyFile,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityAttributes) {
- if (domain == null)
- throw new ArgumentNullException(nameof(domain));
- Contract.EndContractBlock();
-
- return domain.InternalCreateInstanceFromWithNoSecurity(assemblyFile, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, securityAttributes);
- }
-
- public static ObjectHandle CreateInstanceFrom(AppDomain domain,
- string assemblyFile,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- object[] args,
- CultureInfo culture,
- object[] activationAttributes)
- {
- if (domain == null)
- throw new ArgumentNullException(nameof(domain));
- Contract.EndContractBlock();
-
- return domain.InternalCreateInstanceFromWithNoSecurity(assemblyFile,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes,
- null);
- }
-
public static ObjectHandle CreateComInstanceFrom(String assemblyName,
String typeName)
{
@@ -553,28 +387,6 @@ namespace System {
private static void Log(bool test, string title, string success, string failure)
{
}
-
- void _Activator.GetTypeInfoCount(out uint pcTInfo)
- {
- throw new NotImplementedException();
- }
-
- void _Activator.GetTypeInfo(uint iTInfo, uint lcid, IntPtr ppTInfo)
- {
- throw new NotImplementedException();
- }
-
- void _Activator.GetIDsOfNames([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
- {
- throw new NotImplementedException();
- }
-
- // If you implement this method, make sure to include _Activator.Invoke in VM\DangerousAPIs.h and
- // include _Activator in SystemDomain::IsReflectionInvocationMethod in AppDomain.cpp.
- void _Activator.Invoke(uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
- {
- throw new NotImplementedException();
- }
}
}
diff --git a/src/mscorlib/src/System/AppContext/AppContext.cs b/src/mscorlib/src/System/AppContext/AppContext.cs
index 41e44508f0..5a3b732fa8 100644
--- a/src/mscorlib/src/System/AppContext/AppContext.cs
+++ b/src/mscorlib/src/System/AppContext/AppContext.cs
@@ -19,6 +19,16 @@ namespace System
}
private static readonly Dictionary<string, SwitchValueState> s_switchMap = new Dictionary<string, SwitchValueState>();
+ static AppContext()
+ {
+ // Unloading event must happen before ProcessExit event
+ AppDomain.CurrentDomain.ProcessExit += OnUnloading;
+ AppDomain.CurrentDomain.ProcessExit += OnProcessExit;
+
+ // populate the AppContext with the default set of values
+ AppContextDefaultValues.PopulateDefaultValues();
+ }
+
public static string BaseDirectory
{
get
@@ -73,25 +83,28 @@ namespace System
}
}
- public static event System.EventHandler ProcessExit
- {
- add
- {
- AppDomain.CurrentDomain.ProcessExit += value;
- }
- remove
- {
- AppDomain.CurrentDomain.ProcessExit -= value;
- }
+ public static event System.EventHandler ProcessExit;
+ internal static event System.EventHandler Unloading;
+
+ private static void OnProcessExit(object sender, EventArgs e)
+ {
+ var processExit = ProcessExit;
+ if (processExit != null)
+ {
+ processExit(null, EventArgs.Empty);
+ }
}
- #region Switch APIs
- static AppContext()
+ private static void OnUnloading(object sender, EventArgs e)
{
- // populate the AppContext with the default set of values
- AppContextDefaultValues.PopulateDefaultValues();
+ var unloading = Unloading;
+ if (unloading != null)
+ {
+ unloading(null, EventArgs.Empty);
+ }
}
+ #region Switch APIs
/// <summary>
/// Try to get the value of the switch.
/// </summary>
diff --git a/src/mscorlib/src/System/AppDomain.cs b/src/mscorlib/src/System/AppDomain.cs
index fe524c4dc5..c6987392d5 100644
--- a/src/mscorlib/src/System/AppDomain.cs
+++ b/src/mscorlib/src/System/AppDomain.cs
@@ -20,9 +20,7 @@ namespace System
using System.Runtime;
using System.Runtime.CompilerServices;
using System.Security;
- using System.Security.Permissions;
using System.Security.Policy;
- using System.Security.Util;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
@@ -37,11 +35,8 @@ namespace System
using System.Runtime.Versioning;
using System.Diagnostics;
using System.Diagnostics.Contracts;
-#if FEATURE_EXCEPTION_NOTIFICATIONS
using System.Runtime.ExceptionServices;
-#endif // FEATURE_EXCEPTION_NOTIFICATIONS
- [ComVisible(true)]
public class ResolveEventArgs : EventArgs
{
private String _Name;
@@ -73,7 +68,6 @@ namespace System
}
}
- [ComVisible(true)]
public class AssemblyLoadEventArgs : EventArgs
{
private Assembly _LoadedAssembly;
@@ -91,16 +85,13 @@ namespace System
}
[Serializable]
- [ComVisible(true)]
public delegate Assembly ResolveEventHandler(Object sender, ResolveEventArgs args);
[Serializable]
- [ComVisible(true)]
public delegate void AssemblyLoadEventHandler(Object sender, AssemblyLoadEventArgs args);
[Serializable]
- [ComVisible(true)]
- public delegate void AppDomainInitializer(string[] args);
+ internal delegate void AppDomainInitializer(string[] args);
internal class AppDomainInitializerInfo
{
@@ -161,7 +152,6 @@ namespace System
if (Info==null)
return null;
AppDomainInitializer retVal=null;
- new ReflectionPermission(ReflectionPermissionFlag.MemberAccess).Assert();
for (int i=0;i<Info.Length;i++)
{
Assembly assembly=Assembly.Load(Info[i].TargetTypeAssembly);
@@ -177,12 +167,7 @@ namespace System
}
}
-
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(System._AppDomain))]
- [ComVisible(true)]
- public sealed class AppDomain :
- _AppDomain, IEvidenceFactory
+ internal sealed class AppDomain
{
// Domain security information
// These fields initialized from the other side only. (NOTE: order
@@ -190,13 +175,12 @@ namespace System
// the EE- AppDomainBaseObject in this case)
private AppDomainManager _domainManager;
- private Dictionary<String, Object[]> _LocalStore;
+ private Dictionary<String, Object> _LocalStore;
private AppDomainSetup _FusionStore;
private Evidence _SecurityIdentity;
#pragma warning disable 169
private Object[] _Policies; // Called from the VM.
#pragma warning restore 169
- [method: System.Security.SecurityCritical]
public event AssemblyLoadEventHandler AssemblyLoad;
private ResolveEventHandler _TypeResolve;
@@ -263,7 +247,6 @@ namespace System
}
#if FEATURE_REFLECTION_ONLY_LOAD
- [method: System.Security.SecurityCritical]
public event ResolveEventHandler ReflectionOnlyAssemblyResolve;
#endif // FEATURE_REFLECTION_ONLY
@@ -279,10 +262,8 @@ namespace System
// keys, the vhe values are ignored.
private Dictionary<String, object> _compatFlags;
-#if FEATURE_EXCEPTION_NOTIFICATIONS
// Delegate that will hold references to FirstChance exception notifications
private EventHandler<FirstChanceExceptionEventArgs> _firstChanceException;
-#endif // FEATURE_EXCEPTION_NOTIFICATIONS
private IntPtr _pDomain; // this is an unmanaged pointer (AppDomain * m_pDomain)` used from the VM.
@@ -366,9 +347,6 @@ namespace System
string assembly,
string type);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void nSetHostSecurityManagerFlags (HostSecurityManagerOptions flags);
-
[SuppressUnmanagedCodeSecurity]
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
private static extern void SetSecurityHomogeneousFlag(AppDomainHandle domain,
@@ -398,7 +376,6 @@ namespace System
Debug.Assert(_domainManager == null, "_domainManager == null");
AppDomainSetup adSetup = FusionStore;
-#if FEATURE_VERSIONING
String trustedPlatformAssemblies = (String)(GetData("TRUSTED_PLATFORM_ASSEMBLIES"));
if (trustedPlatformAssemblies != null)
{
@@ -427,7 +404,6 @@ namespace System
}
SetupBindingPaths(trustedPlatformAssemblies, platformResourceRoots, appPaths, appNiPaths, appLocalWinMD);
}
-#endif // FEATURE_VERSIONING
string domainManagerAssembly;
string domainManagerType;
@@ -437,9 +413,7 @@ namespace System
{
try
{
- new PermissionSet(PermissionState.Unrestricted).Assert();
_domainManager = CreateInstanceAndUnwrap(domainManagerAssembly, domainManagerType) as AppDomainManager;
- CodeAccessPermission.RevertAssert();
}
catch (FileNotFoundException e)
{
@@ -505,35 +479,6 @@ namespace System
CompatibilitySwitches.InitializeSwitches();
}
- // Retrieves a possibly-cached target framework name for this appdomain. This could be set
- // either by a host in native, a host in managed using an AppDomainSetup, or by the
- // TargetFrameworkAttribute on the executable (VS emits its target framework moniker using this
- // attribute starting in version 4).
- internal String GetTargetFrameworkName()
- {
- String targetFrameworkName = _FusionStore.TargetFrameworkName;
-
- if (targetFrameworkName == null && IsDefaultAppDomain() && !_FusionStore.CheckedForTargetFrameworkName)
- {
- // This should only be run in the default appdomain. All other appdomains should have
- // values copied from the default appdomain and/or specified by the host.
- Assembly assembly = Assembly.GetEntryAssembly();
- if (assembly != null)
- {
- TargetFrameworkAttribute[] attrs = (TargetFrameworkAttribute[])assembly.GetCustomAttributes(typeof(TargetFrameworkAttribute));
- if (attrs != null && attrs.Length > 0)
- {
- Debug.Assert(attrs.Length == 1);
- targetFrameworkName = attrs[0].FrameworkName;
- _FusionStore.TargetFrameworkName = targetFrameworkName;
- }
- }
- _FusionStore.CheckedForTargetFrameworkName = true;
- }
-
- return targetFrameworkName;
- }
-
/// <summary>
/// Returns the setting of the corresponding compatibility config switch (see CreateAppDomainManager for the impact).
/// </summary>
@@ -605,38 +550,6 @@ namespace System
}
/// <summary>
- /// Checks (and throws on failure) if the domain supports Assembly.LoadWithPartialName.
- /// </summary>
- [Pure]
- internal static void CheckLoadWithPartialNameSupported(StackCrawlMark stackMark)
- {
-#if FEATURE_APPX
- if (IsAppXModel())
- {
- RuntimeAssembly callingAssembly = RuntimeAssembly.GetExecutingAssembly(ref stackMark);
- bool callerIsFxAssembly = callingAssembly != null && callingAssembly.IsFrameworkAssembly();
- if (!callerIsFxAssembly)
- {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "Assembly.LoadWithPartialName"));
- }
- }
-#endif
- }
-
- /// <summary>
- /// Checks (and throws on failure) if the domain supports DefinePInvokeMethod.
- /// </summary>
- [Pure]
- internal static void CheckDefinePInvokeSupported()
- {
- // We don't want users to use DefinePInvokeMethod in RefEmit to bypass app store validation on allowed native libraries.
-#if FEATURE_APPX
- if (IsAppXModel())
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "DefinePInvokeMethod"));
-#endif
- }
-
- /// <summary>
/// Checks (and throws on failure) if the domain supports Assembly.Load(byte[] ...).
/// </summary>
[Pure]
@@ -649,26 +562,6 @@ namespace System
}
/// <summary>
- /// Checks (and throws on failure) if the domain supports AppDomain.CreateDomain.
- /// </summary>
- [Pure]
- internal static void CheckCreateDomainSupported()
- {
-#if FEATURE_APPX
- // Can create a new domain in an AppX process only when DevMode is enabled and
- // AssemblyLoadingCompat is not enabled (since there is no multi-domain support
- // for LoadFrom and LoadFile in AppX.
- if(IsAppXModel())
- {
- if (!IsAppXDesignMode())
- {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "AppDomain.CreateDomain"));
- }
- }
-#endif
- }
-
- /// <summary>
/// Get the name of the assembly and type that act as the AppDomainManager for this domain
/// </summary>
internal void GetAppDomainManagerType(out string assembly, out string type)
@@ -811,319 +704,6 @@ namespace System
}
#endif // FEATURE_REFLECTION_ONLY_LOAD
-
- /**********************************************
- * If an AssemblyName has a public key specified, the assembly is assumed
- * to have a strong name and a hash will be computed when the assembly
- * is saved.
- **********************************************/
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name, access, null,
- null, null, null, null, ref stackMark, null, SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- IEnumerable<CustomAttributeBuilder> assemblyAttributes)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name,
- access,
- null, null, null, null, null,
- ref stackMark,
- assemblyAttributes, SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Due to the stack crawl mark
- public AssemblyBuilder DefineDynamicAssembly(AssemblyName name,
- AssemblyBuilderAccess access,
- IEnumerable<CustomAttributeBuilder> assemblyAttributes,
- SecurityContextSource securityContextSource)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name,
- access,
- null, null, null, null, null,
- ref stackMark,
- assemblyAttributes,
- securityContextSource);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- String dir)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name, access, dir,
- null, null, null, null,
- ref stackMark,
- null,
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- Evidence evidence)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name, access, null,
- evidence, null, null, null,
- ref stackMark,
- null,
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name, access, null, null,
- requiredPermissions,
- optionalPermissions,
- refusedPermissions,
- ref stackMark,
- null,
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- String dir,
- Evidence evidence)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name, access, dir, evidence,
- null, null, null, ref stackMark, null, SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- String dir,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name, access, dir, null,
- requiredPermissions,
- optionalPermissions,
- refusedPermissions,
- ref stackMark,
- null,
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- Evidence evidence,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name, access, null,
- evidence,
- requiredPermissions,
- optionalPermissions,
- refusedPermissions,
- ref stackMark,
- null,
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. Please see http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- String dir,
- Evidence evidence,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name, access, dir,
- evidence,
- requiredPermissions,
- optionalPermissions,
- refusedPermissions,
- ref stackMark,
- null,
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- String dir,
- Evidence evidence,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions,
- bool isSynchronized)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name,
- access,
- dir,
- evidence,
- requiredPermissions,
- optionalPermissions,
- refusedPermissions,
- ref stackMark,
- null,
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- String dir,
- Evidence evidence,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions,
- bool isSynchronized,
- IEnumerable<CustomAttributeBuilder> assemblyAttributes)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name,
- access,
- dir,
- evidence,
- requiredPermissions,
- optionalPermissions,
- refusedPermissions,
- ref stackMark,
- assemblyAttributes,
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public AssemblyBuilder DefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- String dir,
- bool isSynchronized,
- IEnumerable<CustomAttributeBuilder> assemblyAttributes)
- {
- Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalDefineDynamicAssembly(name,
- access,
- dir,
- null,
- null,
- null,
- null,
- ref stackMark,
- assemblyAttributes,
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- private AssemblyBuilder InternalDefineDynamicAssembly(
- AssemblyName name,
- AssemblyBuilderAccess access,
- String dir,
- Evidence evidence,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions,
- ref StackCrawlMark stackMark,
- IEnumerable<CustomAttributeBuilder> assemblyAttributes,
- SecurityContextSource securityContextSource)
- {
- return AssemblyBuilder.InternalDefineDynamicAssembly(name,
- access,
- dir,
- evidence,
- requiredPermissions,
- optionalPermissions,
- refusedPermissions,
- ref stackMark,
- assemblyAttributes,
- securityContextSource);
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern String nApplyPolicy(AssemblyName an);
-
- // Return the assembly name that results from applying policy.
- [ComVisible(false)]
- public String ApplyPolicy(String assemblyName)
- {
- AssemblyName asmName = new AssemblyName(assemblyName);
-
- byte[] pk = asmName.GetPublicKeyToken();
- if (pk == null)
- pk = asmName.GetPublicKey();
-
- // Simply-named assemblies cannot have policy, so for those,
- // we simply return the passed-in assembly name.
- if ((pk == null) || (pk.Length == 0))
- return assemblyName;
- else
- return nApplyPolicy(asmName);
- }
-
public ObjectHandle CreateInstance(String assemblyName,
String typeName)
@@ -1140,437 +720,6 @@ namespace System
typeName);
}
- internal ObjectHandle InternalCreateInstanceWithNoSecurity (string assemblyName, string typeName) {
- PermissionSet.s_fullTrust.Assert();
- return CreateInstance(assemblyName, typeName);
- }
-
- public ObjectHandle CreateInstanceFrom(String assemblyFile,
- String typeName)
-
- {
- // jit does not check for that, so we should do it ...
- if (this == null)
- throw new NullReferenceException();
- Contract.EndContractBlock();
-
- return Activator.CreateInstanceFrom(assemblyFile,
- typeName);
- }
-
- internal ObjectHandle InternalCreateInstanceFromWithNoSecurity (string assemblyName, string typeName) {
- PermissionSet.s_fullTrust.Assert();
- return CreateInstanceFrom(assemblyName, typeName);
- }
-
-#if FEATURE_COMINTEROP
- // The first parameter should be named assemblyFile, but it was incorrectly named in a previous
- // release, and the compatibility police won't let us change the name now.
- public ObjectHandle CreateComInstanceFrom(String assemblyName,
- String typeName)
-
- {
- if (this == null)
- throw new NullReferenceException();
- Contract.EndContractBlock();
-
- return Activator.CreateComInstanceFrom(assemblyName,
- typeName);
- }
-
- public ObjectHandle CreateComInstanceFrom(String assemblyFile,
- String typeName,
- byte[] hashValue,
- AssemblyHashAlgorithm hashAlgorithm)
-
- {
- if (this == null)
- throw new NullReferenceException();
- Contract.EndContractBlock();
-
- return Activator.CreateComInstanceFrom(assemblyFile,
- typeName,
- hashValue,
- hashAlgorithm);
- }
-
-#endif // FEATURE_COMINTEROP
-
- public ObjectHandle CreateInstance(String assemblyName,
- String typeName,
- Object[] activationAttributes)
-
- {
- // jit does not check for that, so we should do it ...
- if (this == null)
- throw new NullReferenceException();
-
- if (assemblyName == null)
- throw new ArgumentNullException(nameof(assemblyName));
- Contract.EndContractBlock();
-
- return Activator.CreateInstance(assemblyName,
- typeName,
- activationAttributes);
- }
-
- public ObjectHandle CreateInstanceFrom(String assemblyFile,
- String typeName,
- Object[] activationAttributes)
-
- {
- // jit does not check for that, so we should do it ...
- if (this == null)
- throw new NullReferenceException();
- Contract.EndContractBlock();
-
- return Activator.CreateInstanceFrom(assemblyFile,
- typeName,
- activationAttributes);
- }
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public ObjectHandle CreateInstance(String assemblyName,
- String typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityAttributes)
- {
- // jit does not check for that, so we should do it ...
- if (this == null)
- throw new NullReferenceException();
-
- if (assemblyName == null)
- throw new ArgumentNullException(nameof(assemblyName));
- Contract.EndContractBlock();
-
-#pragma warning disable 618
- return Activator.CreateInstance(assemblyName,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes,
- securityAttributes);
-#pragma warning restore 618
- }
-
- public ObjectHandle CreateInstance(string assemblyName,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- object[] args,
- CultureInfo culture,
- object[] activationAttributes)
- {
- // jit does not check for that, so we should do it ...
- if (this == null)
- throw new NullReferenceException();
-
- if (assemblyName == null)
- throw new ArgumentNullException(nameof(assemblyName));
- Contract.EndContractBlock();
-
- return Activator.CreateInstance(assemblyName,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes);
- }
-
- internal ObjectHandle InternalCreateInstanceWithNoSecurity (string assemblyName,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityAttributes)
- {
- PermissionSet.s_fullTrust.Assert();
-#pragma warning disable 618
- return CreateInstance(assemblyName, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, securityAttributes);
-#pragma warning restore 618
- }
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public ObjectHandle CreateInstanceFrom(String assemblyFile,
- String typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityAttributes)
-
- {
- // jit does not check for that, so we should do it ...
- if (this == null)
- throw new NullReferenceException();
- Contract.EndContractBlock();
-
- return Activator.CreateInstanceFrom(assemblyFile,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes,
- securityAttributes);
- }
-
- public ObjectHandle CreateInstanceFrom(string assemblyFile,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- object[] args,
- CultureInfo culture,
- object[] activationAttributes)
- {
- // jit does not check for that, so we should do it ...
- if (this == null)
- throw new NullReferenceException();
- Contract.EndContractBlock();
-
- return Activator.CreateInstanceFrom(assemblyFile,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes);
- }
-
- internal ObjectHandle InternalCreateInstanceFromWithNoSecurity (string assemblyName,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityAttributes)
- {
- PermissionSet.s_fullTrust.Assert();
-#pragma warning disable 618
- return CreateInstanceFrom(assemblyName, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, securityAttributes);
-#pragma warning restore 618
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public Assembly Load(AssemblyName assemblyRef)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, null, null, ref stackMark, true /*thrownOnFileNotFound*/, false, false);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public Assembly Load(String assemblyString)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoad(assemblyString, null, ref stackMark, false);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public Assembly Load(byte[] rawAssembly)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.nLoadImage(rawAssembly,
- null, // symbol store
- null, // evidence
- ref stackMark,
- false,
- SecurityContextSource.CurrentAssembly);
-
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public Assembly Load(byte[] rawAssembly,
- byte[] rawSymbolStore)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.nLoadImage(rawAssembly,
- rawSymbolStore,
- null, // evidence
- ref stackMark,
- false, // fIntrospection
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
- public Assembly Load(byte[] rawAssembly,
- byte[] rawSymbolStore,
- Evidence securityEvidence)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.nLoadImage(rawAssembly,
- rawSymbolStore,
- securityEvidence,
- ref stackMark,
- false, // fIntrospection
- SecurityContextSource.CurrentAssembly);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public Assembly Load(AssemblyName assemblyRef,
- Evidence assemblySecurity)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, assemblySecurity, null, ref stackMark, true /*thrownOnFileNotFound*/, false, false);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public Assembly Load(String assemblyString,
- Evidence assemblySecurity)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoad(assemblyString, assemblySecurity, ref stackMark, false);
- }
-
- public int ExecuteAssembly(String assemblyFile)
- {
- return ExecuteAssembly(assemblyFile, (string[])null);
- }
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public int ExecuteAssembly(String assemblyFile,
- Evidence assemblySecurity)
- {
- return ExecuteAssembly(assemblyFile, assemblySecurity, null);
- }
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public int ExecuteAssembly(String assemblyFile,
- Evidence assemblySecurity,
- String[] args)
- {
- RuntimeAssembly assembly = (RuntimeAssembly)Assembly.LoadFrom(assemblyFile, assemblySecurity);
-
- if (args == null)
- args = new String[0];
-
- return nExecuteAssembly(assembly, args);
- }
-
- public int ExecuteAssembly(string assemblyFile, string[] args)
- {
- RuntimeAssembly assembly = (RuntimeAssembly)Assembly.LoadFrom(assemblyFile);
-
- if (args == null)
- args = new String[0];
-
- return nExecuteAssembly(assembly, args);
- }
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public int ExecuteAssembly(String assemblyFile,
- Evidence assemblySecurity,
- String[] args,
- byte[] hashValue,
- AssemblyHashAlgorithm hashAlgorithm)
- {
- RuntimeAssembly assembly = (RuntimeAssembly)Assembly.LoadFrom(assemblyFile,
- assemblySecurity,
- hashValue,
- hashAlgorithm);
- if (args == null)
- args = new String[0];
-
- return nExecuteAssembly(assembly, args);
- }
-
- public int ExecuteAssembly(string assemblyFile,
- string[] args,
- byte[] hashValue,
- AssemblyHashAlgorithm hashAlgorithm)
- {
- RuntimeAssembly assembly = (RuntimeAssembly)Assembly.LoadFrom(assemblyFile,
- hashValue,
- hashAlgorithm);
- if (args == null)
- args = new String[0];
-
- return nExecuteAssembly(assembly, args);
- }
-
- public int ExecuteAssemblyByName(String assemblyName)
- {
- return ExecuteAssemblyByName(assemblyName, (string[])null);
- }
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public int ExecuteAssemblyByName(String assemblyName,
- Evidence assemblySecurity)
- {
-#pragma warning disable 618
- return ExecuteAssemblyByName(assemblyName, assemblySecurity, null);
-#pragma warning restore 618
- }
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public int ExecuteAssemblyByName(String assemblyName,
- Evidence assemblySecurity,
- params String[] args)
- {
- RuntimeAssembly assembly = (RuntimeAssembly)Assembly.Load(assemblyName, assemblySecurity);
-
- if (args == null)
- args = new String[0];
-
- return nExecuteAssembly(assembly, args);
- }
-
- public int ExecuteAssemblyByName(string assemblyName, params string[] args)
- {
- RuntimeAssembly assembly = (RuntimeAssembly)Assembly.Load(assemblyName);
-
- if (args == null)
- args = new String[0];
-
- return nExecuteAssembly(assembly, args);
- }
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public int ExecuteAssemblyByName(AssemblyName assemblyName,
- Evidence assemblySecurity,
- params String[] args)
- {
- RuntimeAssembly assembly = (RuntimeAssembly)Assembly.Load(assemblyName, assemblySecurity);
-
- if (args == null)
- args = new String[0];
-
- return nExecuteAssembly(assembly, args);
- }
-
- public int ExecuteAssemblyByName(AssemblyName assemblyName, params string[] args)
- {
- RuntimeAssembly assembly = (RuntimeAssembly)Assembly.Load(assemblyName);
-
- if (args == null)
- args = new String[0];
-
- return nExecuteAssembly(assembly, args);
- }
-
public static AppDomain CurrentDomain
{
get {
@@ -1579,11 +728,6 @@ namespace System
}
}
- public String FriendlyName
- {
- get { return nGetFriendlyName(); }
- }
-
public String BaseDirectory
{
get {
@@ -1616,19 +760,6 @@ namespace System
return StringBuilderCache.GetStringAndRelease(sb);
}
- public Assembly[] GetAssemblies()
- {
- return nGetAssemblies(false /* forIntrospection */);
- }
-
- public Assembly[] ReflectionOnlyGetAssemblies()
- {
- return nGetAssemblies(true /* forIntrospection */);
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern Assembly[] nGetAssemblies(bool forIntrospection);
-
// this is true when we've removed the handles etc so really can't do anything
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern bool IsUnloadingForcedFinalize();
@@ -1642,38 +773,22 @@ namespace System
internal static extern void PublishAnonymouslyHostedDynamicMethodsAssembly(RuntimeAssembly assemblyHandle);
public void SetData (string name, object data) {
- SetDataHelper(name, data, null);
- }
-
- public void SetData (string name, object data, IPermission permission)
- {
- if (!name.Equals("LOCATION_URI"))
- {
- // Only LOCATION_URI can be set using AppDomain.SetData
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SetData_OnlyLocationURI", name));
- }
-
- SetDataHelper(name, data, permission);
- }
-
- private void SetDataHelper (string name, object data, IPermission permission)
- {
if (name == null)
throw new ArgumentNullException(nameof(name));
Contract.EndContractBlock();
// SetData should only be used to set values that don't already exist.
- object[] currentVal;
+ object currentVal;
lock (((ICollection)LocalStore).SyncRoot) {
LocalStore.TryGetValue(name, out currentVal);
}
- if (currentVal != null && currentVal[0] != null)
+ if (currentVal != null)
{
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SetData_OnlyOnce"));
}
lock (((ICollection)LocalStore).SyncRoot) {
- LocalStore[name] = new object[] {data, permission};
+ LocalStore[name] = data;
}
}
@@ -1687,23 +802,17 @@ namespace System
int key = AppDomainSetup.Locate(name);
if(key == -1)
{
-#if FEATURE_LOADER_OPTIMIZATION
if(name.Equals(AppDomainSetup.LoaderOptimizationKey))
return FusionStore.LoaderOptimization;
else
-#endif // FEATURE_LOADER_OPTIMIZATION
{
- object[] data;
+ object data;
lock (((ICollection)LocalStore).SyncRoot) {
LocalStore.TryGetValue(name, out data);
}
if (data == null)
return null;
- if (data[1] != null) {
- IPermission permission = (IPermission) data[1];
- permission.Demand();
- }
- return data[0];
+ return data;
}
}
else {
@@ -1720,71 +829,16 @@ namespace System
}
}
}
-
- // The compat flags are set at domain creation time to indicate that the given breaking
- // change should not be used in this domain.
- //
- // After the domain has been created, this Nullable boolean returned by this method should
- // always have a value. Code in the runtime uses this to know if it is safe to cache values
- // that might change if the compatibility switches have not been set yet.
- public Nullable<bool> IsCompatibilitySwitchSet(String value)
- {
- Nullable<bool> fReturn;
-
- if (_compatFlagsInitialized == false)
- {
- fReturn = new Nullable<bool>();
- }
- else
- {
- fReturn = new Nullable<bool>(_compatFlags != null && _compatFlags.ContainsKey(value));
- }
-
- return fReturn;
- }
[Obsolete("AppDomain.GetCurrentThreadId has been deprecated because it does not provide a stable Id when managed threads are running on fibers (aka lightweight threads). To get a stable identifier for a managed thread, use the ManagedThreadId property on Thread. http://go.microsoft.com/fwlink/?linkid=14202", false)]
[DllImport(Microsoft.Win32.Win32Native.KERNEL32)]
public static extern int GetCurrentThreadId();
- internal ApplicationTrust ApplicationTrust
- {
- get {
- if (_applicationTrust == null && _IsFastFullTrustDomain) {
- _applicationTrust = new ApplicationTrust(new PermissionSet(PermissionState.Unrestricted));
- }
-
- return _applicationTrust;
- }
- }
-
- public String DynamicDirectory
- {
- get {
- String dyndir = GetDynamicDir();
- if (dyndir != null)
- new FileIOPermission( FileIOPermissionAccess.PathDiscovery, dyndir ).Demand();
-
- return dyndir;
- }
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- extern private String GetDynamicDir();
-
private AppDomain() {
throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_Constructor));
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern int _nExecuteAssembly(RuntimeAssembly assembly, String[] args);
- internal int nExecuteAssembly(RuntimeAssembly assembly, String[] args)
- {
- return _nExecuteAssembly(assembly, args);
- }
-
-#if FEATURE_VERSIONING
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern void nCreateContext();
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
@@ -1795,12 +849,9 @@ namespace System
{
nSetupBindingPaths(trustedPlatformAssemblies, platformResourceRoots, appPath, appNiPaths, appLocalWinMD);
}
-#endif // FEATURE_VERSIONING
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern String nGetFriendlyName();
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern bool nIsDefaultAppDomainForEvidence();
// support reliability for certain event handlers, if the target
// methods also participate in this discipline. If caller passes
@@ -1864,7 +915,6 @@ namespace System
}
}
-#if FEATURE_EXCEPTION_NOTIFICATIONS
// This is the event managed code can wireup against to be notified
// about first chance exceptions.
//
@@ -1886,7 +936,6 @@ namespace System
_firstChanceException -= value;
}
}
-#endif // FEATURE_EXCEPTION_NOTIFICATIONS
private void OnAssemblyLoadEvent(RuntimeAssembly LoadedAssembly)
{
@@ -1990,24 +1039,18 @@ namespace System
return null;
}
- private Dictionary<String, Object[]> LocalStore
+ private Dictionary<String, Object> LocalStore
{
get {
if (_LocalStore != null)
return _LocalStore;
else {
- _LocalStore = new Dictionary<String, Object[]>();
+ _LocalStore = new Dictionary<String, Object>();
return _LocalStore;
}
}
}
- // Used to determine if server object context is valid in
- // x-domain remoting scenarios.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static extern bool IsDomainIdValid(Int32 id);
-
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
private static extern void nSetNativeDllSearchDirectories(string paths);
@@ -2021,27 +1064,14 @@ namespace System
info.SetupDefaults(RuntimeEnvironment.GetModuleFileName(), imageLocationAlreadyNormalized : true);
}
-#if FEATURE_VERSIONING
nCreateContext();
-#endif // FEATURE_VERSIONING
-#if FEATURE_LOADER_OPTIMIZATION
if (info.LoaderOptimization != LoaderOptimization.NotSpecified || (oldInfo != null && info.LoaderOptimization != oldInfo.LoaderOptimization))
UpdateLoaderOptimization(info.LoaderOptimization);
-#endif
// This must be the last action taken
_FusionStore = info;
}
- // used to package up evidence, so it can be serialized
- // for the call to InternalRemotelySetupRemoteDomain
- [Serializable]
- private class EvidenceCollection
- {
- public Evidence ProvidedSecurityInfo;
- public Evidence CreatorsSecurityInfo;
- }
-
private static void RunInitializer(AppDomainSetup setup)
{
if (setup.AppDomainInitializer!=null)
@@ -2172,7 +1202,6 @@ namespace System
newSetup.ApplicationBase = NormalizePath(propertyValues[i], fullCheck: true);
}
-#if FEATURE_LOADER_OPTIMIZATION
else if(propertyNames[i]=="LOADER_OPTIMIZATION")
{
if(propertyValues[i]==null)
@@ -2187,7 +1216,6 @@ namespace System
default: throw new ArgumentException(Environment.GetResourceString("Argument_UnrecognizedLoaderOptimization"), "LOADER_OPTIMIZATION");
}
}
-#endif // FEATURE_LOADER_OPTIMIZATION
else if(propertyNames[i]=="TRUSTED_PLATFORM_ASSEMBLIES" ||
propertyNames[i]=="PLATFORM_RESOURCE_ROOTS" ||
propertyNames[i]=="APP_PATHS" ||
@@ -2197,11 +1225,11 @@ namespace System
if(values == null)
throw new ArgumentNullException(propertyNames[i]);
- ad.SetDataHelper(propertyNames[i], NormalizeAppPaths(values), null);
+ ad.SetData(propertyNames[i], NormalizeAppPaths(values));
}
else if(propertyNames[i]!= null)
{
- ad.SetDataHelper(propertyNames[i],propertyValues[i],null); // just propagate
+ ad.SetData(propertyNames[i],propertyValues[i]); // just propagate
}
}
}
@@ -2312,22 +1340,6 @@ namespace System
}
}
-#if FEATURE_LOADER_OPTIMIZATION
- private void SetupLoaderOptimization(LoaderOptimization policy)
- {
- if(policy != LoaderOptimization.NotSpecified) {
- Debug.Assert(FusionStore.LoaderOptimization == LoaderOptimization.NotSpecified,
- "It is illegal to change the Loader optimization on a domain");
-
- FusionStore.LoaderOptimization = policy;
- UpdateLoaderOptimization(FusionStore.LoaderOptimization);
- }
- }
-#endif
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal extern IntPtr GetSecurityDescriptor();
-
private void SetupDomainSecurity(Evidence appDomainEvidence,
IntPtr creatorsSecurityDescriptor,
bool publishAppDomain)
@@ -2355,10 +1367,8 @@ namespace System
private extern void nSetDisableInterfaceCache();
#endif // FEATURE_COMINTEROP
-#if FEATURE_LOADER_OPTIMIZATION
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern void UpdateLoaderOptimization(LoaderOptimization optimization);
-#endif
public AppDomainSetup SetupInformation
{
@@ -2377,52 +1387,14 @@ namespace System
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
private static extern void GetGrantSet(AppDomainHandle domain, ObjectHandleOnStack retGrantSet);
- public PermissionSet PermissionSet
- {
- // SecurityCritical because permissions can contain sensitive information such as paths
- get
- {
- PermissionSet grantSet = null;
- GetGrantSet(GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref grantSet));
-
- if (grantSet != null)
- {
- return grantSet.Copy();
- }
- else
- {
- return new PermissionSet(PermissionState.Unrestricted);
- }
- }
- }
-
public bool IsFullyTrusted
{
get
{
- PermissionSet grantSet = null;
- GetGrantSet(GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref grantSet));
-
- return grantSet == null || grantSet.IsUnrestricted();
- }
- }
-
- public bool IsHomogenous
- {
- get
- {
- // Homogenous AppDomains always have an ApplicationTrust associated with them
- return _IsFastFullTrustDomain || _applicationTrust != null;
+ return true;
}
}
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void nChangeSecurityPolicy();
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.MayCorruptAppDomain, Cer.MayFail)]
- internal static extern void nUnload(Int32 domainInternal);
-
public Object CreateInstanceAndUnwrap(String assemblyName,
String typeName)
{
@@ -2433,269 +1405,16 @@ namespace System
return oh.Unwrap();
} // CreateInstanceAndUnwrap
- public Object CreateInstanceAndUnwrap(String assemblyName,
- String typeName,
- Object[] activationAttributes)
- {
- ObjectHandle oh = CreateInstance(assemblyName, typeName, activationAttributes);
- if (oh == null)
- return null;
-
- return oh.Unwrap();
- } // CreateInstanceAndUnwrap
-
-
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public Object CreateInstanceAndUnwrap(String assemblyName,
- String typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityAttributes)
- {
-#pragma warning disable 618
- ObjectHandle oh = CreateInstance(assemblyName, typeName, ignoreCase, bindingAttr,
- binder, args, culture, activationAttributes, securityAttributes);
-#pragma warning restore 618
-
- if (oh == null)
- return null;
-
- return oh.Unwrap();
- } // CreateInstanceAndUnwrap
-
- public object CreateInstanceAndUnwrap(string assemblyName,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- object[] args,
- CultureInfo culture,
- object[] activationAttributes)
- {
- ObjectHandle oh = CreateInstance(assemblyName,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes);
-
- if (oh == null)
- {
- return null;
- }
-
- return oh.Unwrap();
- }
-
- // The first parameter should be named assemblyFile, but it was incorrectly named in a previous
- // release, and the compatibility police won't let us change the name now.
- public Object CreateInstanceFromAndUnwrap(String assemblyName,
- String typeName)
- {
- ObjectHandle oh = CreateInstanceFrom(assemblyName, typeName);
- if (oh == null)
- return null;
-
- return oh.Unwrap();
- } // CreateInstanceAndUnwrap
-
-
- // The first parameter should be named assemblyFile, but it was incorrectly named in a previous
- // release, and the compatibility police won't let us change the name now.
- public Object CreateInstanceFromAndUnwrap(String assemblyName,
- String typeName,
- Object[] activationAttributes)
- {
- ObjectHandle oh = CreateInstanceFrom(assemblyName, typeName, activationAttributes);
- if (oh == null)
- return null;
-
- return oh.Unwrap();
- } // CreateInstanceAndUnwrap
-
-
- // The first parameter should be named assemblyFile, but it was incorrectly named in a previous
- // release, and the compatibility police won't let us change the name now.
- [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFromAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public Object CreateInstanceFromAndUnwrap(String assemblyName,
- String typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes,
- Evidence securityAttributes)
- {
-#pragma warning disable 618
- ObjectHandle oh = CreateInstanceFrom(assemblyName, typeName, ignoreCase, bindingAttr,
- binder, args, culture, activationAttributes, securityAttributes);
-#pragma warning restore 618
-
- if (oh == null)
- return null;
-
- return oh.Unwrap();
- } // CreateInstanceAndUnwrap
-
- public object CreateInstanceFromAndUnwrap(string assemblyFile,
- string typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- object[] args,
- CultureInfo culture,
- object[] activationAttributes)
- {
- ObjectHandle oh = CreateInstanceFrom(assemblyFile,
- typeName,
- ignoreCase,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes);
- if (oh == null)
- {
- return null;
- }
-
- return oh.Unwrap();
- }
-
public Int32 Id
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get {
return GetId();
}
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal extern Int32 GetId();
-
- internal const Int32 DefaultADID = 1;
-
- public bool IsDefaultAppDomain()
- {
- if (GetId()==DefaultADID)
- return true;
- return false;
- }
-
-#if FEATURE_APPDOMAIN_RESOURCE_MONITORING
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void nEnableMonitoring();
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern bool nMonitoringIsEnabled();
-
- // return -1 if ARM is not supported.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern Int64 nGetTotalProcessorTime();
-
- // return -1 if ARM is not supported.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern Int64 nGetTotalAllocatedMemorySize();
-
- // return -1 if ARM is not supported.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern Int64 nGetLastSurvivedMemorySize();
-
- // return -1 if ARM is not supported.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern Int64 nGetLastSurvivedProcessMemorySize();
-
- public static bool MonitoringIsEnabled
- {
- get {
- return nMonitoringIsEnabled();
- }
-
- set {
- if (value == false)
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_MustBeTrue"));
- }
- else
- {
- nEnableMonitoring();
- }
- }
- }
- // Gets the total processor time for this AppDomain.
- // Throws NotSupportedException if ARM is not enabled.
- public TimeSpan MonitoringTotalProcessorTime
- {
- get {
- Int64 i64ProcessorTime = nGetTotalProcessorTime();
- if (i64ProcessorTime == -1)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WithoutARM"));
- }
- return new TimeSpan(i64ProcessorTime);
- }
- }
-
- // Gets the number of bytes allocated in this AppDomain since
- // the AppDomain was created.
- // Throws NotSupportedException if ARM is not enabled.
- public Int64 MonitoringTotalAllocatedMemorySize
- {
- get {
- Int64 i64AllocatedMemory = nGetTotalAllocatedMemorySize();
- if (i64AllocatedMemory == -1)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WithoutARM"));
- }
- return i64AllocatedMemory;
- }
- }
-
- // Gets the number of bytes survived after the last collection
- // that are known to be held by this AppDomain. After a full
- // collection this number is accurate and complete. After an
- // ephemeral collection this number is potentially incomplete.
- // Throws NotSupportedException if ARM is not enabled.
- public Int64 MonitoringSurvivedMemorySize
- {
- get {
- Int64 i64LastSurvivedMemory = nGetLastSurvivedMemorySize();
- if (i64LastSurvivedMemory == -1)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WithoutARM"));
- }
- return i64LastSurvivedMemory;
- }
- }
-
- // Gets the total bytes survived from the last collection. After
- // a full collection this number represents the number of the bytes
- // being held live in managed heaps. (This number should be close
- // to the number obtained from GC.GetTotalMemory for a full collection.)
- // After an ephemeral collection this number represents the number
- // of bytes being held live in ephemeral generations.
- // Throws NotSupportedException if ARM is not enabled.
- public static Int64 MonitoringSurvivedProcessMemorySize
- {
- get {
- Int64 i64LastSurvivedProcessMemory = nGetLastSurvivedProcessMemorySize();
- if (i64LastSurvivedProcessMemory == -1)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WithoutARM"));
- }
- return i64LastSurvivedProcessMemory;
- }
- }
-#endif
}
/// <summary>
diff --git a/src/mscorlib/src/System/AppDomainAttributes.cs b/src/mscorlib/src/System/AppDomainAttributes.cs
index 0980b5fe90..960f9c1cac 100644
--- a/src/mscorlib/src/System/AppDomainAttributes.cs
+++ b/src/mscorlib/src/System/AppDomainAttributes.cs
@@ -14,8 +14,7 @@
namespace System {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum LoaderOptimization
+ internal enum LoaderOptimization
{
NotSpecified = 0,
SingleDomain = 1,
@@ -26,23 +25,5 @@ namespace System {
[Obsolete("This method has been deprecated. Please use Assembly.Load() instead. http://go.microsoft.com/fwlink/?linkid=14202")]
DisallowBindings = 4
}
-
- [AttributeUsage (AttributeTargets.Method)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class LoaderOptimizationAttribute : Attribute
- {
- internal byte _val;
-
- public LoaderOptimizationAttribute(byte value)
- {
- _val = value;
- }
- public LoaderOptimizationAttribute(LoaderOptimization value)
- {
- _val = (byte) value;
- }
- public LoaderOptimization Value
- { get {return (LoaderOptimization) _val;} }
- }
}
diff --git a/src/mscorlib/src/System/AppDomainManager.cs b/src/mscorlib/src/System/AppDomainManager.cs
index 71bc088d1d..bd2faa0110 100644
--- a/src/mscorlib/src/System/AppDomainManager.cs
+++ b/src/mscorlib/src/System/AppDomainManager.cs
@@ -15,8 +15,7 @@ namespace System
using System.Security;
using System.Runtime.InteropServices;
- [System.Runtime.InteropServices.ComVisible(true)]
- public class AppDomainManager : MarshalByRefObject
+ internal class AppDomainManager : MarshalByRefObject
{
public AppDomainManager () {}
diff --git a/src/mscorlib/src/System/AppDomainSetup.cs b/src/mscorlib/src/System/AppDomainSetup.cs
index fc8a64c192..0d19ad237f 100644
--- a/src/mscorlib/src/System/AppDomainSetup.cs
+++ b/src/mscorlib/src/System/AppDomainSetup.cs
@@ -26,10 +26,7 @@ namespace System
using System.Collections.Generic;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class AppDomainSetup :
- IAppDomainSetup
+ internal sealed class AppDomainSetup
{
[Serializable]
internal enum LoaderInformation
@@ -55,7 +52,7 @@ namespace System
ConfigurationBytesValue = 15, // LOADER_CONFIGURATION_BYTES
LoaderMaximum = 18 // LOADER_MAXIMUM
}
-
+
// Constants from fusionsetup.h.
private const string LOADER_OPTIMIZATION = "LOADER_OPTIMIZATION";
private const string CONFIGURATION_EXTENSION = ".config";
@@ -439,22 +436,6 @@ namespace System
return path;
}
- private bool IsFilePath(String path)
- {
-#if !PLATFORM_UNIX
- return (path[1] == ':') || ( (path[0] == '\\') && (path[1] == '\\') );
-#else
- return (path[0] == '/');
-#endif // !PLATFORM_UNIX
- }
-
- internal static String ApplicationBaseKey
- {
- get {
- return ACTAG_APP_BASE_URL;
- }
- }
-
public String ConfigurationFile
{
get {
@@ -466,22 +447,6 @@ namespace System
}
}
- // Used by the ResourceManager internally. This must not do any
- // security checks to avoid infinite loops.
- internal String ConfigurationFileInternal
- {
- get {
- return NormalizePath(Value[(int) LoaderInformation.ConfigurationFileValue], true);
- }
- }
-
- internal static String ConfigurationFileKey
- {
- get {
- return ACTAG_APP_CONFIG_FILE;
- }
- }
-
public byte[] GetConfigurationBytes()
{
if (_ConfigurationBytes == null)
@@ -490,18 +455,6 @@ namespace System
return (byte[]) _ConfigurationBytes.Clone();
}
- public void SetConfigurationBytes(byte[] value)
- {
- _ConfigurationBytes = value;
- }
-
- private static String ConfigurationBytesKey
- {
- get {
- return ACTAG_APP_CONFIG_BLOB;
- }
- }
-
// only needed by AppDomain.Setup(). Not really needed by users.
internal Dictionary<string, object> GetCompatibilityFlags()
{
@@ -543,105 +496,6 @@ namespace System
}
}
- internal bool CheckedForTargetFrameworkName
- {
- get { return _CheckedForTargetFrameworkName; }
- set { _CheckedForTargetFrameworkName = value; }
- }
-
- public String DynamicBase
- {
- get {
- return VerifyDir(Value[(int) LoaderInformation.DynamicBaseValue], true);
- }
-
- set {
- if (value == null)
- Value[(int) LoaderInformation.DynamicBaseValue] = null;
- else {
- if(ApplicationName == null)
- throw new MemberAccessException(Environment.GetResourceString("AppDomain_RequireApplicationName"));
-
- StringBuilder s = new StringBuilder( NormalizePath(value, false) );
- s.Append('\\');
- string h = ParseNumbers.IntToString(ApplicationName.GetLegacyNonRandomizedHashCode(),
- 16, 8, '0', ParseNumbers.PrintAsI4);
- s.Append(h);
-
- Value[(int) LoaderInformation.DynamicBaseValue] = s.ToString();
- }
- }
- }
-
- internal static String DynamicBaseKey
- {
- get {
- return ACTAG_APP_DYNAMIC_BASE;
- }
- }
-
- public bool DisallowPublisherPolicy
- {
- get
- {
- return (Value[(int) LoaderInformation.DisallowPublisherPolicyValue] != null);
- }
- set
- {
- if (value)
- Value[(int) LoaderInformation.DisallowPublisherPolicyValue]="true";
- else
- Value[(int) LoaderInformation.DisallowPublisherPolicyValue]=null;
- }
- }
-
-
- public bool DisallowBindingRedirects
- {
- get
- {
- return (Value[(int) LoaderInformation.DisallowBindingRedirectsValue] != null);
- }
- set
- {
- if (value)
- Value[(int) LoaderInformation.DisallowBindingRedirectsValue] = "true";
- else
- Value[(int) LoaderInformation.DisallowBindingRedirectsValue] = null;
- }
- }
-
- public bool DisallowCodeDownload
- {
- get
- {
- return (Value[(int) LoaderInformation.DisallowCodeDownloadValue] != null);
- }
- set
- {
- if (value)
- Value[(int) LoaderInformation.DisallowCodeDownloadValue] = "true";
- else
- Value[(int) LoaderInformation.DisallowCodeDownloadValue] = null;
- }
- }
-
-
- public bool DisallowApplicationBaseProbing
- {
- get
- {
- return (Value[(int) LoaderInformation.DisallowAppBaseProbingValue] != null);
- }
- set
- {
- if (value)
- Value[(int) LoaderInformation.DisallowAppBaseProbingValue] = "true";
- else
- Value[(int) LoaderInformation.DisallowAppBaseProbingValue] = null;
- }
- }
-
private String VerifyDir(String dir, bool normalize)
{
if (dir != null) {
@@ -656,93 +510,6 @@ namespace System
return dir;
}
- private void VerifyDirList(String dirs)
- {
- if (dirs != null) {
- String[] dirArray = dirs.Split(';');
- int len = dirArray.Length;
-
- for (int i = 0; i < len; i++)
- VerifyDir(dirArray[i], true);
- }
- }
-
- internal String DeveloperPath
- {
- get {
- String dirs = Value[(int) LoaderInformation.DevPathValue];
- VerifyDirList(dirs);
- return dirs;
- }
-
- set {
- if(value == null)
- Value[(int) LoaderInformation.DevPathValue] = null;
- else {
- String[] directories = value.Split(';');
- int size = directories.Length;
- StringBuilder newPath = StringBuilderCache.Acquire();
- bool fDelimiter = false;
-
- for(int i = 0; i < size; i++) {
- if(directories[i].Length != 0) {
- if(fDelimiter)
- newPath.Append(";");
- else
- fDelimiter = true;
-
- newPath.Append(Path.GetFullPath(directories[i]));
- }
- }
-
- String newString = StringBuilderCache.GetStringAndRelease(newPath);
- if (newString.Length == 0)
- Value[(int) LoaderInformation.DevPathValue] = null;
- else
- Value[(int) LoaderInformation.DevPathValue] = newString;
- }
- }
- }
-
- internal static String DisallowPublisherPolicyKey
- {
- get
- {
- return ACTAG_DISALLOW_APPLYPUBLISHERPOLICY;
- }
- }
-
- internal static String DisallowCodeDownloadKey
- {
- get
- {
- return ACTAG_CODE_DOWNLOAD_DISABLED;
- }
- }
-
- internal static String DisallowBindingRedirectsKey
- {
- get
- {
- return ACTAG_DISALLOW_APP_BINDING_REDIRECTS;
- }
- }
-
- internal static String DeveloperPathKey
- {
- get {
- return ACTAG_DEV_PATH;
- }
- }
-
- internal static String DisallowAppBaseProbingKey
- {
- get
- {
- return ACTAG_DISALLOW_APP_BASE_PROBING;
- }
- }
-
public String ApplicationName
{
get {
@@ -754,13 +521,6 @@ namespace System
}
}
- internal static String ApplicationNameKey
- {
- get {
- return ACTAG_APP_NAME;
- }
- }
-
[XmlIgnoreMember]
public AppDomainInitializer AppDomainInitializer
{
@@ -786,7 +546,7 @@ namespace System
internal ApplicationTrust InternalGetApplicationTrust()
{
if (_ApplicationTrust == null) return null;
- ApplicationTrust grantSet = new ApplicationTrust(NamedPermissionSet.GetBuiltInSet(_ApplicationTrust));
+ ApplicationTrust grantSet = new ApplicationTrust();
return grantSet;
}
@@ -804,115 +564,6 @@ namespace System
}
}
- public String PrivateBinPath
- {
- get {
- String dirs = Value[(int) LoaderInformation.PrivateBinPathValue];
- VerifyDirList(dirs);
- return dirs;
- }
-
- set {
- Value[(int) LoaderInformation.PrivateBinPathValue] = value;
- }
- }
-
- internal static String PrivateBinPathKey
- {
- get {
- return ACTAG_APP_PRIVATE_BINPATH;
- }
- }
-
- public String PrivateBinPathProbe
- {
- get {
- return Value[(int) LoaderInformation.PrivateBinPathProbeValue];
- }
-
- set {
- Value[(int) LoaderInformation.PrivateBinPathProbeValue] = value;
- }
- }
-
- internal static String PrivateBinPathProbeKey
- {
- get {
- return ACTAG_BINPATH_PROBE_ONLY;
- }
- }
-
- public String ShadowCopyDirectories
- {
- get {
- String dirs = Value[(int) LoaderInformation.ShadowCopyDirectoriesValue];
- VerifyDirList(dirs);
- return dirs;
- }
-
- set {
- Value[(int) LoaderInformation.ShadowCopyDirectoriesValue] = value;
- }
- }
-
- internal static String ShadowCopyDirectoriesKey
- {
- get {
- return ACTAG_APP_SHADOW_COPY_DIRS;
- }
- }
-
- public String ShadowCopyFiles
- {
- get {
- return Value[(int) LoaderInformation.ShadowCopyFilesValue];
- }
-
- set {
- if((value != null) &&
- (String.Compare(value, "true", StringComparison.OrdinalIgnoreCase) == 0))
- Value[(int) LoaderInformation.ShadowCopyFilesValue] = value;
- else
- Value[(int) LoaderInformation.ShadowCopyFilesValue] = null;
- }
- }
-
- internal static String ShadowCopyFilesKey
- {
- get {
- return ACTAG_FORCE_CACHE_INSTALL;
- }
- }
-
- public String CachePath
- {
- get {
- return VerifyDir(Value[(int) LoaderInformation.CachePathValue], false);
- }
-
- set {
- Value[(int) LoaderInformation.CachePathValue] = NormalizePath(value, false);
- }
- }
-
- internal static String CachePathKey
- {
- get {
- return ACTAG_APP_CACHE_BASE;
- }
- }
-
- public String LicenseFile
- {
- get {
- return VerifyDir(Value[(int) LoaderInformation.LicenseFileValue], true);
- }
-
- set {
- Value[(int) LoaderInformation.LicenseFileValue] = value;
- }
- }
-
public LoaderOptimization LoaderOptimization
{
get {
@@ -938,34 +589,6 @@ namespace System
}
}
- internal static String PrivateBinPathEnvironmentVariable
- {
- get {
- return APPENV_RELATIVEPATH;
- }
- }
-
- internal static string RuntimeConfigurationFile
- {
- get {
- return MACHINE_CONFIGURATION_FILE;
- }
- }
-
- internal static string MachineConfigKey
- {
- get {
- return ACTAG_MACHINE_CONFIG;
- }
- }
-
- internal static string HostBindingKey
- {
- get {
- return ACTAG_HOST_CONFIG_FILE;
- }
- }
-
static internal int Locate(String s)
{
if(String.IsNullOrEmpty(s))
diff --git a/src/mscorlib/src/System/AppDomainUnloadedException.cs b/src/mscorlib/src/System/AppDomainUnloadedException.cs
index 8ba37dc4c5..30bee7c7de 100644
--- a/src/mscorlib/src/System/AppDomainUnloadedException.cs
+++ b/src/mscorlib/src/System/AppDomainUnloadedException.cs
@@ -15,23 +15,12 @@ namespace System {
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
- public class AppDomainUnloadedException : SystemException {
+ internal class AppDomainUnloadedException : SystemException {
public AppDomainUnloadedException()
: base(Environment.GetResourceString("Arg_AppDomainUnloadedException")) {
SetErrorCode(__HResults.COR_E_APPDOMAINUNLOADED);
}
-
- public AppDomainUnloadedException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_APPDOMAINUNLOADED);
- }
-
- public AppDomainUnloadedException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_APPDOMAINUNLOADED);
- }
//
//This constructor is required for serialization.
diff --git a/src/mscorlib/src/System/ApplicationException.cs b/src/mscorlib/src/System/ApplicationException.cs
index c56746fae0..900feb57f9 100644
--- a/src/mscorlib/src/System/ApplicationException.cs
+++ b/src/mscorlib/src/System/ApplicationException.cs
@@ -12,9 +12,10 @@
**
=============================================================================*/
-namespace System {
-
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
+
+namespace System
+{
// The ApplicationException is the base class for nonfatal,
// application errors that occur. These exceptions are generated
// (i.e., thrown) by an application, not the Runtime. Applications that need
@@ -22,35 +23,34 @@ namespace System {
// ApplicationException extends but adds no new functionality to
// RecoverableException.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
- public class ApplicationException : Exception {
-
+ public class ApplicationException : Exception
+ {
// Creates a new ApplicationException with its message string set to
// the empty string, its HRESULT set to COR_E_APPLICATION,
// and its ExceptionInfo reference set to null.
- public ApplicationException()
- : base(Environment.GetResourceString("Arg_ApplicationException")) {
- SetErrorCode(__HResults.COR_E_APPLICATION);
+ public ApplicationException()
+ : base(SR.Arg_ApplicationException)
+ {
+ HResult = __HResults.COR_E_APPLICATION;
}
-
+
// Creates a new ApplicationException with its message string set to
// message, its HRESULT set to COR_E_APPLICATION,
// and its ExceptionInfo reference set to null.
//
- public ApplicationException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_APPLICATION);
- }
-
- public ApplicationException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_APPLICATION);
+ public ApplicationException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_APPLICATION;
}
- protected ApplicationException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public ApplicationException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_APPLICATION;
}
+ protected ApplicationException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/ApplicationId.cs b/src/mscorlib/src/System/ApplicationId.cs
deleted file mode 100644
index 93fc37dd99..0000000000
--- a/src/mscorlib/src/System/ApplicationId.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-
-//
-//
-// This class identifies a deployment or manifest identity.
-//
-
-namespace System {
- using System.Reflection;
- using System.Security;
- using System.Security.Policy;
- using System.Security.Util;
- using System.Text;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ApplicationId {
- private string m_name;
- private Version m_version;
- private string m_processorArchitecture;
- private string m_culture;
- internal byte[] m_publicKeyToken;
-
- internal ApplicationId () {}
-
- //
- // Public.
- //
-
- public ApplicationId (byte[] publicKeyToken, string name, Version version, string processorArchitecture, string culture) {
- if (name == null)
- throw new ArgumentNullException(nameof(name));
- if (name.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyApplicationName"));
- if (version == null)
- throw new ArgumentNullException(nameof(version));
- if (publicKeyToken == null)
- throw new ArgumentNullException(nameof(publicKeyToken));
- Contract.EndContractBlock();
-
- m_publicKeyToken = new byte[publicKeyToken.Length];
- Array.Copy(publicKeyToken, 0, m_publicKeyToken, 0, publicKeyToken.Length);
- m_name = name;
- m_version = version;
- m_processorArchitecture = processorArchitecture;
- m_culture = culture;
- }
-
- public byte[] PublicKeyToken {
- get {
- byte[] publicKeyToken = new byte[m_publicKeyToken.Length];
- Array.Copy(m_publicKeyToken, 0, publicKeyToken, 0, m_publicKeyToken.Length);
- return publicKeyToken;
- }
- }
-
- public string Name {
- get {
- return m_name;
- }
- }
-
- public Version Version {
- get {
- return m_version;
- }
- }
-
- public string ProcessorArchitecture {
- get {
- return m_processorArchitecture;
- }
- }
-
- public string Culture {
- get {
- return m_culture;
- }
- }
-
- public ApplicationId Copy () {
- return new ApplicationId(m_publicKeyToken, m_name, m_version, m_processorArchitecture, m_culture);
- }
-
- public override string ToString () {
- StringBuilder sb = StringBuilderCache.Acquire();
- sb.Append(this.m_name);
- if (m_culture != null) {
- sb.Append(", culture=\"");
- sb.Append(m_culture);
- sb.Append("\"");
- }
- sb.Append(", version=\"");
- sb.Append(m_version.ToString());
- sb.Append("\"");
- if (m_publicKeyToken != null) {
- sb.Append(", publicKeyToken=\"");
- sb.Append(Hex.EncodeHexString(m_publicKeyToken));
- sb.Append("\"");
- }
- if (m_processorArchitecture != null) {
- sb.Append(", processorArchitecture =\"");
- sb.Append(this.m_processorArchitecture);
- sb.Append("\"");
- }
- return StringBuilderCache.GetStringAndRelease(sb);
- }
-
- public override bool Equals (Object o) {
- ApplicationId other = (o as ApplicationId);
- if (other == null)
- return false;
-
- if (!(Equals(this.m_name, other.m_name) &&
- Equals(this.m_version, other.m_version) &&
- Equals(this.m_processorArchitecture, other.m_processorArchitecture) &&
- Equals(this.m_culture, other.m_culture)))
- return false;
-
- if (this.m_publicKeyToken.Length != other.m_publicKeyToken.Length)
- return false;
-
- for (int i = 0; i < this.m_publicKeyToken.Length; ++i) {
- if (this.m_publicKeyToken[i] != other.m_publicKeyToken[i])
- return false;
- }
-
- return true;
- }
-
- public override int GetHashCode() {
- // Note: purposely skipping publicKeyToken, processor architecture and culture as they
- // are less likely to make things not equal than name and version.
- return m_name.GetHashCode() ^ m_version.GetHashCode();
- }
- }
-}
diff --git a/src/mscorlib/src/System/ArgIterator.cs b/src/mscorlib/src/System/ArgIterator.cs
index c5bc379505..83a60b95e1 100644
--- a/src/mscorlib/src/System/ArgIterator.cs
+++ b/src/mscorlib/src/System/ArgIterator.cs
@@ -16,6 +16,19 @@ namespace System {
[StructLayout(LayoutKind.Sequential)]
public struct ArgIterator
{
+ private IntPtr ArgCookie; // Cookie from the EE.
+
+ // The SigPointer structure consists of the following members. (Note: this is an inline native SigPointer data type)
+ private IntPtr sigPtr; // Pointer to remaining signature.
+ private IntPtr sigPtrLen; // Remaining length of the pointer
+
+ // Note, sigPtrLen is actually a DWORD, but on 64bit systems this structure becomes
+ // 8-byte aligned, which requires us to pad it.
+
+ private IntPtr ArgPtr; // Pointer to remaining args.
+ private int RemainingArgs; // # of remaining args.
+
+#if VARARGS_ENABLED //The JIT doesn't support Varargs calling convention.
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern ArgIterator(IntPtr arglist);
@@ -34,7 +47,6 @@ namespace System {
// This is much like the C va_start macro
[CLSCompliant(false)]
-
public unsafe ArgIterator(RuntimeArgumentHandle arglist, void* ptr) : this(arglist.Value, ptr)
{
}
@@ -121,17 +133,54 @@ namespace System {
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_NYI"));
}
+#else
+ public ArgIterator(RuntimeArgumentHandle arglist)
+ {
+ throw new PlatformNotSupportedException(); //The JIT requires work to enable ArgIterator see: https://github.com/dotnet/coreclr/issues/9204.
+ }
- private IntPtr ArgCookie; // Cookie from the EE.
+ [CLSCompliant(false)]
+ public unsafe ArgIterator(RuntimeArgumentHandle arglist, void* ptr)
+ {
+ throw new PlatformNotSupportedException(); //The JIT requires work to enable ArgIterator see: https://github.com/dotnet/coreclr/issues/9204.
+ }
- // The SigPointer structure consists of the following members. (Note: this is an inline native SigPointer data type)
- private IntPtr sigPtr; // Pointer to remaining signature.
- private IntPtr sigPtrLen; // Remaining length of the pointer
+ public void End()
+ {
+ throw new PlatformNotSupportedException(); //The JIT requires work to enable ArgIterator see: https://github.com/dotnet/coreclr/issues/9204.
+ }
- // Note, sigPtrLen is actually a DWORD, but on 64bit systems this structure becomes
- // 8-byte aligned, which requires us to pad it.
-
- private IntPtr ArgPtr; // Pointer to remaining args.
- private int RemainingArgs; // # of remaining args.
+ public override bool Equals(Object o)
+ {
+ throw new PlatformNotSupportedException(); //The JIT requires work to enable ArgIterator see: https://github.com/dotnet/coreclr/issues/9204.
+ }
+
+ public override int GetHashCode()
+ {
+ throw new PlatformNotSupportedException(); //The JIT requires work to enable ArgIterator see: https://github.com/dotnet/coreclr/issues/9204.
+ }
+
+ [System.CLSCompliantAttribute(false)]
+ public System.TypedReference GetNextArg()
+ {
+ throw new PlatformNotSupportedException(); //The JIT requires work to enable ArgIterator see: https://github.com/dotnet/coreclr/issues/9204.
+ }
+
+ [System.CLSCompliantAttribute(false)]
+ public System.TypedReference GetNextArg(System.RuntimeTypeHandle rth)
+ {
+ throw new PlatformNotSupportedException(); //The JIT requires work to enable ArgIterator see: https://github.com/dotnet/coreclr/issues/9204.
+ }
+
+ public unsafe System.RuntimeTypeHandle GetNextArgType()
+ {
+ throw new PlatformNotSupportedException(); //The JIT requires work to enable ArgIterator see: https://github.com/dotnet/coreclr/issues/9204.
+ }
+
+ public int GetRemainingCount()
+ {
+ throw new PlatformNotSupportedException(); //The JIT requires work to enable ArgIterator see: https://github.com/dotnet/coreclr/issues/9204.
+ }
+#endif //VARARGS_ENABLED
}
}
diff --git a/src/mscorlib/src/System/ArgumentException.cs b/src/mscorlib/src/System/ArgumentException.cs
index f37b7690a8..fe054a9aa0 100644
--- a/src/mscorlib/src/System/ArgumentException.cs
+++ b/src/mscorlib/src/System/ArgumentException.cs
@@ -11,84 +11,87 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Remoting;
- using System.Runtime.Serialization;
- using System.Globalization;
- using System.Security.Permissions;
- using System.Diagnostics.Contracts;
+using System.Globalization;
+using System.Runtime.Serialization;
+
+namespace System
+{
// The ArgumentException is thrown when an argument does not meet
// the contract of the method. Ideally it should give a meaningful error
// message describing what was wrong and which parameter is incorrect.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
- public class ArgumentException : SystemException, ISerializable {
- private String m_paramName;
-
+ public class ArgumentException : SystemException, ISerializable
+ {
+ private String _paramName;
+
// Creates a new ArgumentException with its message
// string set to the empty string.
- public ArgumentException()
- : base(Environment.GetResourceString("Arg_ArgumentException")) {
- SetErrorCode(__HResults.COR_E_ARGUMENT);
+ public ArgumentException()
+ : base(SR.Arg_ArgumentException)
+ {
+ HResult = __HResults.COR_E_ARGUMENT;
}
-
+
// Creates a new ArgumentException with its message
// string set to message.
//
- public ArgumentException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_ARGUMENT);
+ public ArgumentException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_ARGUMENT;
}
-
- public ArgumentException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_ARGUMENT);
+
+ public ArgumentException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_ARGUMENT;
}
- public ArgumentException(String message, String paramName, Exception innerException)
- : base(message, innerException) {
- m_paramName = paramName;
- SetErrorCode(__HResults.COR_E_ARGUMENT);
+ public ArgumentException(String message, String paramName, Exception innerException)
+ : base(message, innerException)
+ {
+ _paramName = paramName;
+ HResult = __HResults.COR_E_ARGUMENT;
}
-
- public ArgumentException (String message, String paramName)
-
- : base (message) {
- m_paramName = paramName;
- SetErrorCode(__HResults.COR_E_ARGUMENT);
+
+ public ArgumentException(String message, String paramName)
+ : base(message)
+ {
+ _paramName = paramName;
+ HResult = __HResults.COR_E_ARGUMENT;
}
- protected ArgumentException(SerializationInfo info, StreamingContext context) : base(info, context) {
- m_paramName = info.GetString("ParamName");
+ protected ArgumentException(SerializationInfo info, StreamingContext context)
+ : base(info, context)
+ {
+ _paramName = info.GetString("ParamName");
}
-
+
+ public override void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ base.GetObjectData(info, context);
+ info.AddValue("ParamName", _paramName, typeof(String));
+ }
+
public override String Message
{
- get {
+ get
+ {
String s = base.Message;
- if (!String.IsNullOrEmpty(m_paramName)) {
- String resourceString = Environment.GetResourceString("Arg_ParamName_Name", m_paramName);
+ if (!String.IsNullOrEmpty(_paramName))
+ {
+ String resourceString = SR.Format(SR.Arg_ParamName_Name, _paramName);
return s + Environment.NewLine + resourceString;
}
else
return s;
}
}
-
- public virtual String ParamName {
- get { return m_paramName; }
- }
-
- public override void GetObjectData(SerializationInfo info, StreamingContext context) {
- if (info==null) {
- throw new ArgumentNullException(nameof(info));
- }
- Contract.EndContractBlock();
- base.GetObjectData(info, context);
- info.AddValue("ParamName", m_paramName, typeof(String));
+
+ public virtual String ParamName
+ {
+ get { return _paramName; }
}
}
}
diff --git a/src/mscorlib/src/System/ArgumentNullException.cs b/src/mscorlib/src/System/ArgumentNullException.cs
index 661ebd29af..3a86223ccf 100644
--- a/src/mscorlib/src/System/ArgumentNullException.cs
+++ b/src/mscorlib/src/System/ArgumentNullException.cs
@@ -11,44 +11,43 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- using System.Runtime.Remoting;
- using System.Security.Permissions;
-
+using System.Runtime.Serialization;
+
+namespace System
+{
// The ArgumentException is thrown when an argument
// is null when it shouldn't be.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class ArgumentNullException : ArgumentException
{
// Creates a new ArgumentNullException with its message
// string set to a default message explaining an argument was null.
- public ArgumentNullException()
- : base(Environment.GetResourceString("ArgumentNull_Generic")) {
- // Use E_POINTER - COM used that for null pointers. Description is "invalid pointer"
- SetErrorCode(__HResults.E_POINTER);
+ public ArgumentNullException()
+ : base(SR.ArgumentNull_Generic)
+ {
+ // Use E_POINTER - COM used that for null pointers. Description is "invalid pointer"
+ HResult = __HResults.E_POINTER;
}
- public ArgumentNullException(String paramName)
- : base(Environment.GetResourceString("ArgumentNull_Generic"), paramName) {
- SetErrorCode(__HResults.E_POINTER);
+ public ArgumentNullException(String paramName)
+ : base(SR.ArgumentNull_Generic, paramName)
+ {
+ HResult = __HResults.E_POINTER;
}
- public ArgumentNullException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.E_POINTER);
- }
-
- public ArgumentNullException(String paramName, String message)
- : base(message, paramName) {
- SetErrorCode(__HResults.E_POINTER);
+ public ArgumentNullException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.E_POINTER;
}
- protected ArgumentNullException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public ArgumentNullException(String paramName, String message)
+ : base(message, paramName)
+ {
+ HResult = __HResults.E_POINTER;
}
+
+ protected ArgumentNullException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/ArgumentOutOfRangeException.cs b/src/mscorlib/src/System/ArgumentOutOfRangeException.cs
index 78a90db34e..59a8434089 100644
--- a/src/mscorlib/src/System/ArgumentOutOfRangeException.cs
+++ b/src/mscorlib/src/System/ArgumentOutOfRangeException.cs
@@ -17,12 +17,10 @@ namespace System {
using System.Runtime.Remoting;
using System.Runtime.Serialization;
using System.Globalization;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
// The ArgumentOutOfRangeException is thrown when an argument
// is outside the legal range for that argument.
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class ArgumentOutOfRangeException : ArgumentException, ISerializable {
diff --git a/src/mscorlib/src/System/ArithmeticException.cs b/src/mscorlib/src/System/ArithmeticException.cs
index f5360939cc..081ba454f5 100644
--- a/src/mscorlib/src/System/ArithmeticException.cs
+++ b/src/mscorlib/src/System/ArithmeticException.cs
@@ -11,42 +11,41 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
+
+namespace System
+{
// The ArithmeticException is thrown when overflow or underflow
// occurs.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class ArithmeticException : SystemException
- {
+ {
// Creates a new ArithmeticException with its message string set to
// the empty string, its HRESULT set to COR_E_ARITHMETIC,
// and its ExceptionInfo reference set to null.
- public ArithmeticException()
- : base(Environment.GetResourceString("Arg_ArithmeticException")) {
- SetErrorCode(__HResults.COR_E_ARITHMETIC);
+ public ArithmeticException()
+ : base(SR.Arg_ArithmeticException)
+ {
+ HResult = __HResults.COR_E_ARITHMETIC;
}
-
+
// Creates a new ArithmeticException with its message string set to
// message, its HRESULT set to COR_E_ARITHMETIC,
// and its ExceptionInfo reference set to null.
//
- public ArithmeticException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_ARITHMETIC);
- }
-
- public ArithmeticException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_ARITHMETIC);
+ public ArithmeticException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_ARITHMETIC;
}
- protected ArithmeticException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public ArithmeticException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_ARITHMETIC;
}
+ protected ArithmeticException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/Array.cs b/src/mscorlib/src/System/Array.cs
index 7bb6ebbdd3..23989f30fb 100644
--- a/src/mscorlib/src/System/Array.cs
+++ b/src/mscorlib/src/System/Array.cs
@@ -20,13 +20,11 @@ namespace System {
using System.Runtime.Versioning;
using System.Security;
using System.Diagnostics;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
// Note that we make a T[] (single-dimensional w/ zero as the lower bound) implement both
// IList<U> and IReadOnlyList<U>, where T : U dynamically. See the SZArrayHelper class for details.
[Serializable]
- [ComVisible(true)]
public abstract class Array : ICloneable, IList, IStructuralComparable, IStructuralEquatable
{
// This ctor exists solely to prevent C# from generating a protected .ctor that violates the surface area. I really want this to be a
@@ -43,7 +41,6 @@ namespace System {
return new ReadOnlyCollection<T>(array);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static void Resize<T>(ref T[] array, int newSize) {
if (newSize < 0)
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.newSize, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
@@ -154,7 +151,7 @@ namespace System {
if (lengths[i] < 0)
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.lengths, i, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
- fixed (int* pLengths = lengths)
+ fixed (int* pLengths = &lengths[0])
return InternalCreate((void*)t.TypeHandle.Value,lengths.Length,pLengths,null);
}
@@ -211,8 +208,8 @@ namespace System {
if (lengths[i] < 0)
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.lengths, i, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
- fixed (int* pLengths = lengths)
- fixed(int* pLowerBounds = lowerBounds)
+ fixed (int* pLengths = &lengths[0])
+ fixed(int* pLowerBounds = &lowerBounds[0])
return InternalCreate((void*)t.TypeHandle.Value,lengths.Length,pLengths,pLowerBounds);
}
@@ -224,25 +221,9 @@ namespace System {
return CreateInstance(elementType, length);
}
- internal static Array UnsafeCreateInstance(Type elementType, int length1, int length2)
- {
- return CreateInstance(elementType, length1, length2);
- }
-
- internal static Array UnsafeCreateInstance(Type elementType, params int[] lengths)
- {
- return CreateInstance(elementType, lengths);
- }
-
- internal static Array UnsafeCreateInstance(Type elementType, int[] lengths, int[] lowerBounds)
- {
- return CreateInstance(elementType, lengths, lowerBounds);
- }
-
// Copies length elements from sourceArray, starting at index 0, to
// destinationArray, starting at index 0.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Copy(Array sourceArray, Array destinationArray, int length)
{
if (sourceArray == null)
@@ -263,7 +244,6 @@ namespace System {
// Copies length elements from sourceArray, starting at sourceIndex, to
// destinationArray, starting at destinationIndex.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length)
{
Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length, false);
@@ -273,7 +253,6 @@ namespace System {
// instance & might fail when called from within a CER, or if the
// reliable flag is true, it will either always succeed or always
// throw an exception with no side effects.
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length, bool reliable);
@@ -282,13 +261,11 @@ namespace System {
// compatible array types based on the array element type - this
// method does not support casting, boxing, or primitive widening.
// It will up-cast, assuming the array types are correct.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static void ConstrainedCopy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length)
{
Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length, true);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Copy(Array sourceArray, Array destinationArray, long length)
{
if (length > Int32.MaxValue || length < Int32.MinValue)
@@ -297,7 +274,6 @@ namespace System {
Array.Copy(sourceArray, destinationArray, (int) length);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Copy(Array sourceArray, long sourceIndex, Array destinationArray, long destinationIndex, long length)
{
if (sourceIndex > Int32.MaxValue || sourceIndex < Int32.MinValue)
@@ -315,7 +291,6 @@ namespace System {
// at index.
//
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern void Clear(Array array, int index, int length);
// The various Get values...
@@ -328,7 +303,7 @@ namespace System {
Contract.EndContractBlock();
TypedReference elemref = new TypedReference();
- fixed(int* pIndices = indices)
+ fixed(int* pIndices = &indices[0])
InternalGetReference(&elemref, indices.Length, pIndices);
return TypedReference.InternalToObject(&elemref);
}
@@ -375,7 +350,6 @@ namespace System {
return TypedReference.InternalToObject(&elemref);
}
- [ComVisible(false)]
public Object GetValue(long index)
{
if (index > Int32.MaxValue || index < Int32.MinValue)
@@ -385,7 +359,6 @@ namespace System {
return this.GetValue((int) index);
}
- [ComVisible(false)]
public Object GetValue(long index1, long index2)
{
if (index1 > Int32.MaxValue || index1 < Int32.MinValue)
@@ -397,7 +370,6 @@ namespace System {
return this.GetValue((int) index1, (int) index2);
}
- [ComVisible(false)]
public Object GetValue(long index1, long index2, long index3)
{
if (index1 > Int32.MaxValue || index1 < Int32.MinValue)
@@ -411,7 +383,6 @@ namespace System {
return this.GetValue((int) index1, (int) index2, (int) index3);
}
- [ComVisible(false)]
public Object GetValue(params long[] indices)
{
if (indices == null)
@@ -485,12 +456,11 @@ namespace System {
Contract.EndContractBlock();
TypedReference elemref = new TypedReference();
- fixed(int* pIndices = indices)
+ fixed(int* pIndices = &indices[0])
InternalGetReference(&elemref, indices.Length, pIndices);
InternalSetValue(&elemref,value);
}
- [ComVisible(false)]
public void SetValue(Object value, long index)
{
if (index > Int32.MaxValue || index < Int32.MinValue)
@@ -500,7 +470,6 @@ namespace System {
this.SetValue(value, (int) index);
}
- [ComVisible(false)]
public void SetValue(Object value, long index1, long index2)
{
if (index1 > Int32.MaxValue || index1 < Int32.MinValue)
@@ -512,7 +481,6 @@ namespace System {
this.SetValue(value, (int) index1, (int) index2);
}
- [ComVisible(false)]
public void SetValue(Object value, long index1, long index2, long index3)
{
if (index1 > Int32.MaxValue || index1 < Int32.MinValue)
@@ -526,7 +494,6 @@ namespace System {
this.SetValue(value, (int) index1, (int) index2, (int) index3);
}
- [ComVisible(false)]
public void SetValue(Object value, params long[] indices)
{
if (indices == null)
@@ -559,12 +526,10 @@ namespace System {
public extern int Length {
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImpl(MethodImplOptions.InternalCall)]
get;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static int GetMedian(int low, int hi) {
// Note both may be negative, if we are dealing with arrays w/ negative lower bounds.
Contract.Requires(low <= hi);
@@ -580,10 +545,8 @@ namespace System {
internal const int MaxArrayLength = 0X7FEFFFFF;
internal const int MaxByteArrayLength = 0x7FFFFFC7;
- [ComVisible(false)]
public extern long LongLength {
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImpl(MethodImplOptions.InternalCall)]
get;
}
@@ -593,7 +556,6 @@ namespace System {
public extern int GetLength(int dimension);
[Pure]
- [ComVisible(false)]
public long GetLongLength(int dimension) {
//This method should throw an IndexOufOfRangeException for compat if dimension < 0 or >= Rank
return GetLength(dimension);
@@ -601,22 +563,18 @@ namespace System {
public extern int Rank {
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
get;
}
[Pure]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public extern int GetUpperBound(int dimension);
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern int GetLowerBound(int dimension);
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern int GetDataPtrOffsetInternal();
@@ -783,7 +741,6 @@ namespace System {
// is larger than the given search value.
//
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int BinarySearch(Array array, Object value) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -807,7 +764,6 @@ namespace System {
// is larger than the given search value.
//
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int BinarySearch(Array array, int index, int length, Object value) {
return BinarySearch(array, index, length, value, null);
}
@@ -827,7 +783,6 @@ namespace System {
// is larger than the given search value.
//
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int BinarySearch(Array array, Object value, IComparer comparer) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -852,7 +807,6 @@ namespace System {
// is larger than the given search value.
//
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int BinarySearch(Array array, int index, int length, Object value, IComparer comparer) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -923,11 +877,9 @@ namespace System {
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private static extern bool TrySZBinarySearch(Array sourceArray, int sourceIndex, int count, Object value, out int retVal);
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int BinarySearch<T>(T[] array, T value) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -936,7 +888,6 @@ namespace System {
}
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int BinarySearch<T>(T[] array, T value, System.Collections.Generic.IComparer<T> comparer) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -945,13 +896,11 @@ namespace System {
}
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int BinarySearch<T>(T[] array, int index, int length, T value) {
return BinarySearch<T>(array, index, length, value, null);
}
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int BinarySearch<T>(T[] array, int index, int length, T value, System.Collections.Generic.IComparer<T> comparer) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1004,7 +953,6 @@ namespace System {
}
[Pure]
- [ComVisible(false)]
public void CopyTo(Array array, long index)
{
if (index > Int32.MaxValue || index < Int32.MinValue)
@@ -1015,7 +963,6 @@ namespace System {
}
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static T[] Empty<T>()
{
Contract.Ensures(Contract.Result<T[]>() != null);
@@ -1253,7 +1200,6 @@ namespace System {
// The array is searched forwards, and the elements of the array are
// compared to the given value using the Object.Equals method.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int IndexOf(Array array, Object value) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1269,7 +1215,6 @@ namespace System {
// elements of the array are compared to the given value using the
// Object.Equals method.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int IndexOf(Array array, Object value, int startIndex) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1285,7 +1230,6 @@ namespace System {
// elements of the array are compared to the given value using the
// Object.Equals method.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int IndexOf(Array array, Object value, int startIndex, int count) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1380,7 +1324,6 @@ namespace System {
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private static extern bool TrySZIndexOf(Array sourceArray, int sourceIndex, int count, Object value, out int retVal);
@@ -1388,7 +1331,6 @@ namespace System {
// The array is searched backwards, and the elements of the array are
// compared to the given value using the Object.Equals method.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int LastIndexOf(Array array, Object value) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1403,7 +1345,6 @@ namespace System {
// startIndex and ending at index 0. The elements of the array are
// compared to the given value using the Object.Equals method.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int LastIndexOf(Array array, Object value, int startIndex) {
if (array == null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1419,7 +1360,6 @@ namespace System {
// the array are compared to the given value using the Object.Equals
// method.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int LastIndexOf(Array array, Object value, int startIndex, int count) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1531,7 +1471,6 @@ namespace System {
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private static extern bool TrySZLastIndexOf(Array sourceArray, int sourceIndex, int count, Object value, out int retVal);
@@ -1540,7 +1479,6 @@ namespace System {
// located at index length - i - 1, where length is the
// length of the array.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Reverse(Array array) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1554,7 +1492,6 @@ namespace System {
// index index + (index + count - i - 1).
// Reliability note: This may fail because it may have to box objects.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Reverse(Array array, int index, int length) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1598,10 +1535,8 @@ namespace System {
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
private static extern bool TrySZReverse(Array array, int index, int count);
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Reverse<T>(T[] array)
{
if (array == null)
@@ -1610,7 +1545,6 @@ namespace System {
Reverse(array, 0, array.Length);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Reverse<T>(T[] array, int index, int length)
{
if (array == null)
@@ -1639,7 +1573,6 @@ namespace System {
// other using the IComparable interface, which must be implemented
// by all elements of the array.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort(Array array) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1653,7 +1586,6 @@ namespace System {
// keys to each other using the IComparable interface, which must be
// implemented by all elements of the keys array.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort(Array keys, Array items) {
if (keys==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.keys);
@@ -1665,7 +1597,6 @@ namespace System {
// elements to each other using the IComparable interface, which
// must be implemented by all elements in the given section of the array.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort(Array array, int index, int length) {
Sort(array, null, index, length, null);
}
@@ -1676,7 +1607,6 @@ namespace System {
// keys to each other using the IComparable interface, which must be
// implemented by all elements of the keys array.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort(Array keys, Array items, int index, int length) {
Sort(keys, items, index, length, null);
}
@@ -1687,7 +1617,6 @@ namespace System {
// IComparable interface, which in that case must be implemented by
// all elements of the array.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort(Array array, IComparer comparer) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1703,7 +1632,6 @@ namespace System {
// the IComparable interface, which in that case must be implemented
// by all elements of the keys array.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort(Array keys, Array items, IComparer comparer) {
if (keys==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.keys);
@@ -1717,7 +1645,6 @@ namespace System {
// the IComparable interface, which in that case must be implemented
// by all elements in the given section of the array.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort(Array array, int index, int length, IComparer comparer) {
Sort(array, null, index, length, comparer);
}
@@ -1730,7 +1657,6 @@ namespace System {
// the IComparable interface, which in that case must be implemented
// by all elements of the given section of the keys array.
//
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort(Array keys, Array items, int index, int length, IComparer comparer) {
if (keys==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.keys);
@@ -1772,10 +1698,8 @@ namespace System {
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
private static extern bool TrySZSort(Array keys, Array items, int left, int right);
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort<T>(T[] array) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1783,7 +1707,6 @@ namespace System {
Sort<T>(array, 0, array.Length, null);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort<TKey, TValue>(TKey[] keys, TValue[] items) {
if (keys==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.keys);
@@ -1791,17 +1714,14 @@ namespace System {
Sort<TKey, TValue>(keys, items, 0, keys.Length, null);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort<T>(T[] array, int index, int length) {
Sort<T>(array, index, length, null);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort<TKey, TValue>(TKey[] keys, TValue[] items, int index, int length) {
Sort<TKey, TValue>(keys, items, index, length, null);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort<T>(T[] array, System.Collections.Generic.IComparer<T> comparer) {
if (array == null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1809,7 +1729,6 @@ namespace System {
Sort<T>(array, 0, array.Length, comparer);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort<TKey, TValue>(TKey[] keys, TValue[] items, System.Collections.Generic.IComparer<TKey> comparer) {
if (keys==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.keys);
@@ -1817,7 +1736,6 @@ namespace System {
Sort<TKey, TValue>(keys, items, 0, keys.Length, comparer);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort<T>(T[] array, int index, int length, System.Collections.Generic.IComparer<T> comparer) {
if (array==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
@@ -1840,7 +1758,6 @@ namespace System {
}
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Sort<TKey, TValue>(TKey[] keys, TValue[] items, int index, int length, System.Collections.Generic.IComparer<TKey> comparer) {
if (keys==null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.keys);
diff --git a/src/mscorlib/src/System/ArraySegment.cs b/src/mscorlib/src/System/ArraySegment.cs
index b767e7bd77..03556e492a 100644
--- a/src/mscorlib/src/System/ArraySegment.cs
+++ b/src/mscorlib/src/System/ArraySegment.cs
@@ -15,8 +15,6 @@
using System.Collections;
using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using System.Diagnostics;
using System.Diagnostics.Contracts;
namespace System
@@ -46,14 +44,10 @@ namespace System
public ArraySegment(T[] array, int offset, int count)
{
- if (array == null)
- ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
- if (offset < 0)
- ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.offset, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
- if (count < 0)
- ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
- if (array.Length - offset < count)
- ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
+ // Validate arguments, check is minimal instructions with reduced branching for inlinable fast-path
+ // Failure should be rare and location determination and message is delegated to failure functions
+ if (array == null || (offset | count) < 0 || (array.Length - offset < count))
+ ThrowHelper.ThrowArraySegmentCtorValidationFailedExceptions(array, offset, count);
Contract.EndContractBlock();
_array = array;
diff --git a/src/mscorlib/src/System/ArrayTypeMismatchException.cs b/src/mscorlib/src/System/ArrayTypeMismatchException.cs
index 4f24b9d3c7..3e941fdf8e 100644
--- a/src/mscorlib/src/System/ArrayTypeMismatchException.cs
+++ b/src/mscorlib/src/System/ArrayTypeMismatchException.cs
@@ -11,42 +11,41 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
+
+namespace System
+{
// The ArrayMismatchException is thrown when an attempt to store
// an object of the wrong type within an array occurs.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
- public class ArrayTypeMismatchException : SystemException {
-
+ public class ArrayTypeMismatchException : SystemException
+ {
// Creates a new ArrayMismatchException with its message string set to
// the empty string, its HRESULT set to COR_E_ARRAYTYPEMISMATCH,
// and its ExceptionInfo reference set to null.
- public ArrayTypeMismatchException()
- : base(Environment.GetResourceString("Arg_ArrayTypeMismatchException")) {
- SetErrorCode(__HResults.COR_E_ARRAYTYPEMISMATCH);
+ public ArrayTypeMismatchException()
+ : base(SR.Arg_ArrayTypeMismatchException)
+ {
+ HResult = __HResults.COR_E_ARRAYTYPEMISMATCH;
}
-
+
// Creates a new ArrayMismatchException with its message string set to
// message, its HRESULT set to COR_E_ARRAYTYPEMISMATCH,
// and its ExceptionInfo reference set to null.
//
- public ArrayTypeMismatchException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_ARRAYTYPEMISMATCH);
- }
-
- public ArrayTypeMismatchException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_ARRAYTYPEMISMATCH);
+ public ArrayTypeMismatchException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_ARRAYTYPEMISMATCH;
}
- protected ArrayTypeMismatchException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public ArrayTypeMismatchException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_ARRAYTYPEMISMATCH;
}
+ protected ArrayTypeMismatchException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/AsyncCallback.cs b/src/mscorlib/src/System/AsyncCallback.cs
index 69a03812e1..5c49535cff 100644
--- a/src/mscorlib/src/System/AsyncCallback.cs
+++ b/src/mscorlib/src/System/AsyncCallback.cs
@@ -9,9 +9,9 @@
** Purpose: Type of callback for async operations
**
===========================================================*/
-namespace System {
+
+namespace System
+{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate void AsyncCallback(IAsyncResult ar);
-
}
diff --git a/src/mscorlib/src/System/Attribute.cs b/src/mscorlib/src/System/Attribute.cs
index e77450e972..b44e13f959 100644
--- a/src/mscorlib/src/System/Attribute.cs
+++ b/src/mscorlib/src/System/Attribute.cs
@@ -13,14 +13,10 @@ namespace System {
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.Security;
- using System.Security.Permissions;
[Serializable]
[AttributeUsageAttribute(AttributeTargets.All, Inherited = true, AllowMultiple=false)]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_Attribute))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class Attribute : _Attribute
+ public abstract class Attribute
{
#region Private Statics
diff --git a/src/mscorlib/src/System/AttributeTargets.cs b/src/mscorlib/src/System/AttributeTargets.cs
index 33617e9623..fdfa4ab730 100644
--- a/src/mscorlib/src/System/AttributeTargets.cs
+++ b/src/mscorlib/src/System/AttributeTargets.cs
@@ -4,37 +4,33 @@
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
-namespace System {
-
- using System;
-
+
+namespace System
+{
// Enum used to indicate all the elements of the
// VOS it is valid to attach this element to.
-[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
+ [Serializable]
public enum AttributeTargets
{
- Assembly = 0x0001,
- Module = 0x0002,
- Class = 0x0004,
- Struct = 0x0008,
- Enum = 0x0010,
- Constructor = 0x0020,
- Method = 0x0040,
- Property = 0x0080,
- Field = 0x0100,
- Event = 0x0200,
- Interface = 0x0400,
- Parameter = 0x0800,
- Delegate = 0x1000,
- ReturnValue = 0x2000,
- //@todo GENERICS: document GenericParameter
+ Assembly = 0x0001,
+ Module = 0x0002,
+ Class = 0x0004,
+ Struct = 0x0008,
+ Enum = 0x0010,
+ Constructor = 0x0020,
+ Method = 0x0040,
+ Property = 0x0080,
+ Field = 0x0100,
+ Event = 0x0200,
+ Interface = 0x0400,
+ Parameter = 0x0800,
+ Delegate = 0x1000,
+ ReturnValue = 0x2000,
GenericParameter = 0x4000,
-
-
- All = Assembly | Module | Class | Struct | Enum | Constructor |
- Method | Property | Field | Event | Interface | Parameter |
- Delegate | ReturnValue | GenericParameter,
+
+ All = Assembly | Module | Class | Struct | Enum | Constructor |
+ Method | Property | Field | Event | Interface | Parameter |
+ Delegate | ReturnValue | GenericParameter
}
}
diff --git a/src/mscorlib/src/System/AttributeUsageAttribute.cs b/src/mscorlib/src/System/AttributeUsageAttribute.cs
index 0c2e11caff..33f7fd805e 100644
--- a/src/mscorlib/src/System/AttributeUsageAttribute.cs
+++ b/src/mscorlib/src/System/AttributeUsageAttribute.cs
@@ -16,7 +16,6 @@ namespace System {
/* By default, attributes are inherited and multiple attributes are not allowed */
[Serializable]
[AttributeUsage(AttributeTargets.Class, Inherited = true)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AttributeUsageAttribute : Attribute
{
internal AttributeTargets m_attributeTarget = AttributeTargets.All; // Defaults to all
diff --git a/src/mscorlib/src/System/BCLDebug.cs b/src/mscorlib/src/System/BCLDebug.cs
index 0ca6e616f2..7556b85789 100644
--- a/src/mscorlib/src/System/BCLDebug.cs
+++ b/src/mscorlib/src/System/BCLDebug.cs
@@ -20,7 +20,6 @@ namespace System {
using Microsoft.Win32;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
- using System.Security.Permissions;
using System.Security;
using System.Diagnostics.Contracts;
@@ -54,7 +53,6 @@ namespace System {
#if _DEBUG
internal static volatile bool m_domainUnloadAdded;
#endif
- internal static volatile PermissionSet m_MakeConsoleErrorLoggingWork;
static readonly SwitchStructure[] switches = {
new SwitchStructure("NLS", 0x00000001),
@@ -263,40 +261,6 @@ namespace System {
System.Diagnostics.Log.LogMessage((LoggingLevels)((int)level), logSwitch, StringBuilderCache.GetStringAndRelease(sb));
}
- // Note this overload doesn't take a format string. You probably don't
- // want this one.
- [Pure]
- [Conditional("_LOGGING")]
- public static void Trace(String switchName, params Object[]messages) {
- if (m_loggingNotEnabled) {
- return;
- }
-
- LogSwitch logSwitch;
- if (!CheckEnabled(switchName, LogLevel.Trace, out logSwitch)) {
- return;
- }
-
- StringBuilder sb = StringBuilderCache.Acquire();
-
- for (int i=0; i<messages.Length; i++) {
- String s;
- try {
- if (messages[i]==null) {
- s = "<null>";
- } else {
- s = messages[i].ToString();
- }
- } catch {
- s = "<unable to convert>";
- }
- sb.Append(s);
- }
-
- sb.Append(Environment.NewLine);
- System.Diagnostics.Log.LogMessage(LoggingLevels.TraceLevel0, logSwitch, StringBuilderCache.GetStringAndRelease(sb));
- }
-
[Pure]
[Conditional("_LOGGING")]
public static void Trace(String switchName, String format, params Object[] messages) {
@@ -316,22 +280,6 @@ namespace System {
System.Diagnostics.Log.LogMessage(LoggingLevels.TraceLevel0, logSwitch, StringBuilderCache.GetStringAndRelease(sb));
}
- [Conditional("_LOGGING")]
- public static void DumpStack(String switchName) {
- LogSwitch logSwitch;
-
- if (!m_registryChecked) {
- CheckRegistry();
- }
-
- if (!CheckEnabled(switchName, LogLevel.Trace, out logSwitch)) {
- return;
- }
-
- StackTrace trace = new StackTrace();
- System.Diagnostics.Log.LogMessage(LoggingLevels.TraceLevel0, logSwitch, trace.ToString());
- }
-
// For perf-related asserts. On a debug build, set the registry key
// BCLPerfWarnings to non-zero.
[Conditional("_DEBUG")]
@@ -377,21 +325,6 @@ namespace System {
#endif
}
-#if !BIT64 // 32
-#endif
- internal static bool CorrectnessEnabled()
- {
-#if BIT64
- return false;
-#else // 32
- if (AppDomain.CurrentDomain.IsUnloadingForcedFinalize())
- return false;
- if (!m_registryChecked)
- CheckRegistry();
- return m_correctnessWarnings;
-#endif // BIT64
- }
-
// Whether SafeHandles include a stack trace showing where they
// were allocated. Only useful in checked & debug builds.
internal static bool SafeHandleStackTracesEnabled {
diff --git a/src/mscorlib/src/System/BadImageFormatException.cs b/src/mscorlib/src/System/BadImageFormatException.cs
index 3f3f4a5b6e..51a6c40771 100644
--- a/src/mscorlib/src/System/BadImageFormatException.cs
+++ b/src/mscorlib/src/System/BadImageFormatException.cs
@@ -16,11 +16,9 @@ namespace System {
using System;
using System.Runtime.Serialization;
using FileLoadException = System.IO.FileLoadException;
- using System.Security.Permissions;
using SecurityException = System.Security.SecurityException;
using System.Globalization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class BadImageFormatException : SystemException {
diff --git a/src/mscorlib/src/System/BitConverter.cs b/src/mscorlib/src/System/BitConverter.cs
index 3a6d1c03b0..07af5a8178 100644
--- a/src/mscorlib/src/System/BitConverter.cs
+++ b/src/mscorlib/src/System/BitConverter.cs
@@ -63,7 +63,7 @@ namespace System {
Contract.Ensures(Contract.Result<byte[]>().Length == 2);
byte[] bytes = new byte[2];
- fixed(byte* b = bytes)
+ fixed(byte* b = &bytes[0])
*((short*)b) = value;
return bytes;
}
@@ -76,7 +76,7 @@ namespace System {
Contract.Ensures(Contract.Result<byte[]>().Length == 4);
byte[] bytes = new byte[4];
- fixed(byte* b = bytes)
+ fixed(byte* b = &bytes[0])
*((int*)b) = value;
return bytes;
}
@@ -89,7 +89,7 @@ namespace System {
Contract.Ensures(Contract.Result<byte[]>().Length == 8);
byte[] bytes = new byte[8];
- fixed(byte* b = bytes)
+ fixed(byte* b = &bytes[0])
*((long*)b) = value;
return bytes;
}
diff --git a/src/mscorlib/src/System/Boolean.cs b/src/mscorlib/src/System/Boolean.cs
index 9aaec9a345..c085b0a020 100644
--- a/src/mscorlib/src/System/Boolean.cs
+++ b/src/mscorlib/src/System/Boolean.cs
@@ -19,7 +19,6 @@ namespace System {
// The Boolean class provides the
// object representation of the boolean primitive type.
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct Boolean : IComparable, IConvertible, IComparable<Boolean>, IEquatable<Boolean>
{
diff --git a/src/mscorlib/src/System/Buffer.cs b/src/mscorlib/src/System/Buffer.cs
index eee2a81b51..662b240b34 100644
--- a/src/mscorlib/src/System/Buffer.cs
+++ b/src/mscorlib/src/System/Buffer.cs
@@ -22,7 +22,6 @@ namespace System {
using nuint = System.UInt32;
#endif // BIT64
-[System.Runtime.InteropServices.ComVisible(true)]
public static class Buffer
{
// Copies from one primitive array to another primitive array without
@@ -205,7 +204,6 @@ namespace System {
*(src + len) = 0;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal unsafe static void Memcpy(byte[] dest, int destIndex, byte* src, int srcIndex, int len) {
Debug.Assert( (srcIndex >= 0) && (destIndex >= 0) && (len >= 0), "Index and length must be non-negative!");
Debug.Assert(dest.Length - destIndex >= len, "not enough bytes in dest");
@@ -218,7 +216,6 @@ namespace System {
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal unsafe static void Memcpy(byte* pDest, int destIndex, byte[] src, int srcIndex, int len)
{
Debug.Assert( (srcIndex >= 0) && (destIndex >= 0) && (len >= 0), "Index and length must be non-negative!");
@@ -242,7 +239,6 @@ namespace System {
// 1. This method is given access to other internal dlls and this close to release we do not want to change it.
// 2. It is difficult to get this right for arm and again due to release dates we would like to visit it later.
[FriendAccessAllowed]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
#if ARM
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal unsafe static extern void Memcpy(byte* dest, byte* src, int len);
@@ -255,7 +251,6 @@ namespace System {
#endif // ARM
// This method has different signature for x64 and other platforms and is done for performance reasons.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal unsafe static void Memmove(byte* dest, byte* src, nuint len)
{
// P/Invoke into the native version when the buffers are overlapping and the copy needs to be performed backwards
@@ -581,7 +576,6 @@ namespace System {
// Non-inlinable wrapper around the QCall that avoids poluting the fast path
// with P/Invoke prolog/epilog.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.NoInlining)]
private unsafe static void _Memmove(byte* dest, byte* src, nuint len)
{
@@ -590,7 +584,6 @@ namespace System {
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
extern private unsafe static void __Memmove(byte* dest, byte* src, nuint len);
// The attributes on this method are chosen for best JIT performance.
diff --git a/src/mscorlib/src/System/ByReference.cs b/src/mscorlib/src/System/ByReference.cs
index 6f8bb2281e..833dab0d55 100644
--- a/src/mscorlib/src/System/ByReference.cs
+++ b/src/mscorlib/src/System/ByReference.cs
@@ -15,16 +15,20 @@ namespace System
public ByReference(ref T value)
{
- // TODO-SPAN: This has GC hole. It needs to be JIT intrinsic instead
- unsafe { _value = (IntPtr)Unsafe.AsPointer(ref value); }
+ // Implemented as a JIT intrinsic - This default implementation is for
+ // completeness and to provide a concrete error if called via reflection
+ // or if intrinsic is missed.
+ throw new System.PlatformNotSupportedException();
}
public ref T Value
{
get
{
- // TODO-SPAN: This has GC hole. It needs to be JIT intrinsic instead
- unsafe { return ref Unsafe.As<IntPtr, T>(ref *(IntPtr*)_value); }
+ // Implemented as a JIT intrinsic - This default implementation is for
+ // completeness and to provide a concrete error if called via reflection
+ // or if the intrinsic is missed.
+ throw new System.PlatformNotSupportedException();
}
}
}
diff --git a/src/mscorlib/src/System/Byte.cs b/src/mscorlib/src/System/Byte.cs
index 980412b69e..666fdda75b 100644
--- a/src/mscorlib/src/System/Byte.cs
+++ b/src/mscorlib/src/System/Byte.cs
@@ -22,7 +22,6 @@ namespace System {
// The Byte class extends the Value class and
// provides object representation of the byte primitive type.
//
-[System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
public struct Byte : IComparable, IFormattable, IConvertible
diff --git a/src/mscorlib/src/System/CLRConfig.cs b/src/mscorlib/src/System/CLRConfig.cs
index 01ad7c31ab..16c610b82b 100644
--- a/src/mscorlib/src/System/CLRConfig.cs
+++ b/src/mscorlib/src/System/CLRConfig.cs
@@ -9,26 +9,6 @@ using System.Security;
namespace System {
-/// <summary>
-/// For now, this class should be the central point to collect all managed declarations
-/// of native functions designed to expose config switches.
-/// In Dev11 M2.2 we will redesign this class to expose CLRConfig from within the CLR
-/// and refactor managed Fx code to access all compat switches through here.
-/// </summary>
-[FriendAccessAllowed]
-internal class CLRConfig {
-
- [FriendAccessAllowed]
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [SuppressUnmanagedCodeSecurity]
- internal static extern bool CheckLegacyManagedDeflateStream();
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [SuppressUnmanagedCodeSecurity]
- internal static extern bool CheckThrowUnobservedTaskExceptions();
-
-} // internal class CLRConfig
-
} // namespace System
// file CLRConfig
diff --git a/src/mscorlib/src/System/CLSCompliantAttribute.cs b/src/mscorlib/src/System/CLSCompliantAttribute.cs
index e902049558..e03600d132 100644
--- a/src/mscorlib/src/System/CLSCompliantAttribute.cs
+++ b/src/mscorlib/src/System/CLSCompliantAttribute.cs
@@ -11,23 +11,23 @@
**
=============================================================================*/
-namespace System {
-[Serializable]
- [AttributeUsage (AttributeTargets.All, Inherited=true, AllowMultiple=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
- public sealed class CLSCompliantAttribute : Attribute
+namespace System
+{
+ [Serializable]
+ [AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
+ public sealed class CLSCompliantAttribute : Attribute
{
- private bool m_compliant;
+ private bool _compliant;
- public CLSCompliantAttribute (bool isCompliant)
+ public CLSCompliantAttribute(bool isCompliant)
{
- m_compliant = isCompliant;
+ _compliant = isCompliant;
}
- public bool IsCompliant
+ public bool IsCompliant
{
- get
+ get
{
- return m_compliant;
+ return _compliant;
}
}
}
diff --git a/src/mscorlib/src/System/CannotUnloadAppDomainException.cs b/src/mscorlib/src/System/CannotUnloadAppDomainException.cs
deleted file mode 100644
index 6b07eae5e2..0000000000
--- a/src/mscorlib/src/System/CannotUnloadAppDomainException.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: Exception class for failed attempt to unload an AppDomain.
-**
-**
-=============================================================================*/
-
-namespace System {
-
- using System.Runtime.Serialization;
-
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- public class CannotUnloadAppDomainException : SystemException {
- public CannotUnloadAppDomainException()
- : base(Environment.GetResourceString("Arg_CannotUnloadAppDomainException")) {
- SetErrorCode(__HResults.COR_E_CANNOTUNLOADAPPDOMAIN);
- }
-
- public CannotUnloadAppDomainException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_CANNOTUNLOADAPPDOMAIN);
- }
-
- public CannotUnloadAppDomainException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_CANNOTUNLOADAPPDOMAIN);
- }
-
- //
- //This constructor is required for serialization.
- //
- protected CannotUnloadAppDomainException(SerializationInfo info, StreamingContext context) : base(info, context) {
- }
- }
-}
-
-
-
-
-
-
-
diff --git a/src/mscorlib/src/System/CfgParser.cs b/src/mscorlib/src/System/CfgParser.cs
deleted file mode 100644
index b21da7fe94..0000000000
--- a/src/mscorlib/src/System/CfgParser.cs
+++ /dev/null
@@ -1,564 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
- **
- **
- **
- ** Purpose: XMLParser and Tree builder internal to BCL
- **
- **
- ===========================================================*/
-
-namespace System
-{
- using System.Runtime.InteropServices;
- using System.Collections;
- using System.Collections.Generic;
- using System.Runtime.CompilerServices;
- using System.Security.Permissions;
- using System.Security;
- using System.Globalization;
- using System.IO;
- using System.Runtime.Versioning;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- internal enum ConfigEvents
- {
- StartDocument = 0,
- StartDTD = StartDocument + 1,
- EndDTD = StartDTD + 1,
- StartDTDSubset = EndDTD + 1,
- EndDTDSubset = StartDTDSubset + 1,
- EndProlog = EndDTDSubset + 1,
- StartEntity = EndProlog + 1,
- EndEntity = StartEntity + 1,
- EndDocument = EndEntity + 1,
- DataAvailable = EndDocument + 1,
- LastEvent = DataAvailable
- }
-
- [Serializable]
- internal enum ConfigNodeType
- {
- Element = 1,
- Attribute = Element + 1,
- Pi = Attribute + 1,
- XmlDecl = Pi + 1,
- DocType = XmlDecl + 1,
- DTDAttribute = DocType + 1,
- EntityDecl = DTDAttribute + 1,
- ElementDecl = EntityDecl + 1,
- AttlistDecl = ElementDecl + 1,
- Notation = AttlistDecl + 1,
- Group = Notation + 1,
- IncludeSect = Group + 1,
- PCData = IncludeSect + 1,
- CData = PCData + 1,
- IgnoreSect = CData + 1,
- Comment = IgnoreSect + 1,
- EntityRef = Comment + 1,
- Whitespace = EntityRef + 1,
- Name = Whitespace + 1,
- NMToken = Name + 1,
- String = NMToken + 1,
- Peref = String + 1,
- Model = Peref + 1,
- ATTDef = Model + 1,
- ATTType = ATTDef + 1,
- ATTPresence = ATTType + 1,
- DTDSubset = ATTPresence + 1,
- LastNodeType = DTDSubset + 1
- }
-
- [Serializable]
- internal enum ConfigNodeSubType
- {
- Version = (int)ConfigNodeType.LastNodeType,
- Encoding = Version + 1,
- Standalone = Encoding + 1,
- NS = Standalone + 1,
- XMLSpace = NS + 1,
- XMLLang = XMLSpace + 1,
- System = XMLLang + 1,
- Public = System + 1,
- NData = Public + 1,
- AtCData = NData + 1,
- AtId = AtCData + 1,
- AtIdref = AtId + 1,
- AtIdrefs = AtIdref + 1,
- AtEntity = AtIdrefs + 1,
- AtEntities = AtEntity + 1,
- AtNmToken = AtEntities + 1,
- AtNmTokens = AtNmToken + 1,
- AtNotation = AtNmTokens + 1,
- AtRequired = AtNotation + 1,
- AtImplied = AtRequired + 1,
- AtFixed = AtImplied + 1,
- PentityDecl = AtFixed + 1,
- Empty = PentityDecl + 1,
- Any = Empty + 1,
- Mixed = Any + 1,
- Sequence = Mixed + 1,
- Choice = Sequence + 1,
- Star = Choice + 1,
- Plus = Star + 1,
- Questionmark = Plus + 1,
- LastSubNodeType = Questionmark + 1
- }
-
- internal abstract class BaseConfigHandler
- {
- // These delegates must be at the very start of the object
- // This is necessary because unmanaged code takes a dependency on this layout
- // Any changes made to this must be reflected in ConfigHelper.h in ConfigFactory class
- protected Delegate[] eventCallbacks;
- public BaseConfigHandler()
- {
- InitializeCallbacks();
- }
- private void InitializeCallbacks()
- {
- if (eventCallbacks == null)
- {
- eventCallbacks = new Delegate[6];
- eventCallbacks[0] = new NotifyEventCallback(this.NotifyEvent);
- eventCallbacks[1] = new BeginChildrenCallback(this.BeginChildren);
- eventCallbacks[2] = new EndChildrenCallback(this.EndChildren);
- eventCallbacks[3] = new ErrorCallback(this.Error);
- eventCallbacks[4] = new CreateNodeCallback(this.CreateNode);
- eventCallbacks[5] = new CreateAttributeCallback(this.CreateAttribute);
- }
- }
-
- private delegate void NotifyEventCallback(ConfigEvents nEvent);
- public abstract void NotifyEvent(ConfigEvents nEvent);
-
- private delegate void BeginChildrenCallback(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)] String text,
- int textLength,
- int prefixLength);
- public abstract void BeginChildren(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)] String text,
- int textLength,
- int prefixLength);
-
- private delegate void EndChildrenCallback(int fEmpty,
- int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)] String text,
- int textLength,
- int prefixLength);
- public abstract void EndChildren(int fEmpty,
- int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)] String text,
- int textLength,
- int prefixLength);
-
- private delegate void ErrorCallback(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength);
- public abstract void Error(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength);
-
- private delegate void CreateNodeCallback(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength);
- public abstract void CreateNode(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength);
-
- private delegate void CreateAttributeCallback(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength);
- public abstract void CreateAttribute(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal extern void RunParser(String fileName);
- }
-
- // Class used to build a DOM like tree of parsed XML
- internal class ConfigTreeParser : BaseConfigHandler
- {
- ConfigNode rootNode = null;
- ConfigNode currentNode = null;
- String fileName = null;
- int attributeEntry;
- String key = null;
- String [] treeRootPath = null; // element to start tree
- bool parsing = false;
- int depth = 0;
- int pathDepth = 0;
- int searchDepth = 0;
- bool bNoSearchPath = false;
-
- // Track state for error message formatting
- String lastProcessed = null;
- bool lastProcessedEndElement;
-
-
- // NOTE: This parser takes a path eg. /configuration/system.runtime.remoting
- // and will return a node which matches this.
- internal ConfigNode Parse(String fileName, String configPath)
- {
- return Parse(fileName, configPath, false);
- }
-
- internal ConfigNode Parse(String fileName, String configPath, bool skipSecurityStuff)
- {
- if (fileName == null)
- throw new ArgumentNullException(nameof(fileName));
- Contract.EndContractBlock();
- this.fileName = fileName;
- if (configPath[0] == '/'){
- treeRootPath = configPath.Substring(1).Split('/');
- pathDepth = treeRootPath.Length - 1;
- bNoSearchPath = false;
- }
- else{
- treeRootPath = new String[1];
- treeRootPath[0] = configPath;
- bNoSearchPath = true;
- }
-
- if (!skipSecurityStuff) {
- (new FileIOPermission(FileIOPermissionAccess.Read, Path.GetFullPath(fileName))).Demand();
- }
-#pragma warning disable 618
- (new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)).Assert();
-#pragma warning restore 618
-
- try
- {
- RunParser(fileName);
- }
- catch(FileNotFoundException) {
- throw; // Pass these through unadulterated.
- }
- catch(DirectoryNotFoundException) {
- throw; // Pass these through unadulterated.
- }
- catch(UnauthorizedAccessException) {
- throw;
- }
- catch(FileLoadException) {
- throw;
- }
- catch(Exception inner) {
- String message = GetInvalidSyntaxMessage();
- // Neither Exception nor ApplicationException are the "right" exceptions here.
- // Desktop throws ApplicationException for backwards compatibility.
- // On Silverlight we don't have ApplicationException, so fall back to Exception.
- throw new Exception(message, inner);
- }
- return rootNode;
- }
-
- public override void NotifyEvent(ConfigEvents nEvent)
- {
- BCLDebug.Trace("REMOTE", "NotifyEvent "+((Enum)nEvent).ToString()+"\n");
- }
-
- public override void BeginChildren(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)] String text,
- int textLength,
- int prefixLength)
- {
- //Trace("BeginChildren",size,subType,nType,terminal,text,textLength,prefixLength,0);
- if (!parsing &&
- (!bNoSearchPath
- && depth == (searchDepth + 1)
- && String.Compare(text, treeRootPath[searchDepth], StringComparison.Ordinal) == 0))
- {
- searchDepth++;
- }
- }
-
- public override void EndChildren(int fEmpty,
- int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)] String text,
- int textLength,
- int prefixLength)
- {
- lastProcessed = text;
- lastProcessedEndElement = true;
- if (parsing)
- {
- //Trace("EndChildren",size,subType,nType,terminal,text,textLength,prefixLength,fEmpty);
-
- if (currentNode == rootNode)
- {
- // End of section of tree which is parsed
- parsing = false;
- }
-
- currentNode = currentNode.Parent;
- }
- else if (nType == ConfigNodeType.Element){
- if(depth == searchDepth && String.Compare(text, treeRootPath[searchDepth - 1], StringComparison.Ordinal) == 0)
- {
- searchDepth--;
- depth--;
- }
- else
- depth--;
- }
- }
-
- public override void Error(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength)
- {
- //Trace("Error",size,subType,nType,terminal,text,textLength,prefixLength,0);
- }
-
- public override void CreateNode(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength)
- {
- //Trace("CreateNode",size,subType,nType,terminal,text,textLength,prefixLength,0);
-
- if (nType == ConfigNodeType.Element)
- {
- // New Node
- lastProcessed = text;
- lastProcessedEndElement = false;
-
- if (parsing
- || (bNoSearchPath &&
- String.Compare(text, treeRootPath[0], StringComparison.OrdinalIgnoreCase) == 0)
- || (depth == searchDepth && searchDepth == pathDepth &&
- String.Compare(text, treeRootPath[pathDepth], StringComparison.OrdinalIgnoreCase) == 0 ))
- {
- parsing = true;
-
- ConfigNode parentNode = currentNode;
- currentNode = new ConfigNode(text, parentNode);
- if (rootNode == null)
- rootNode = currentNode;
- else
- parentNode.AddChild(currentNode);
- }
- else
- depth++;
- }
- else if (nType == ConfigNodeType.PCData)
- {
- // Data node
- if (currentNode != null)
- {
- currentNode.Value = text;
- }
- }
- }
-
- public override void CreateAttribute(int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength)
- {
- //Trace("CreateAttribute",size,subType,nType,terminal,text,textLength,prefixLength,0);
- if (parsing)
- {
- // if the value of the attribute is null, the parser doesn't come back, so need to store the attribute when the
- // attribute name is encountered
- if (nType == ConfigNodeType.Attribute)
- {
- attributeEntry = currentNode.AddAttribute(text, "");
- key = text;
- }
- else if (nType == ConfigNodeType.PCData)
- {
- currentNode.ReplaceAttribute(attributeEntry, key, text);
- }
- else
- {
- String message = GetInvalidSyntaxMessage();
- // Neither Exception nor ApplicationException are the "right" exceptions here.
- // Desktop throws ApplicationException for backwards compatibility.
- // On Silverlight we don't have ApplicationException, so fall back to Exception.
- throw new Exception(message);
- }
- }
- }
-
-#if _DEBUG
- [System.Diagnostics.Conditional("_LOGGING")]
- private void Trace(String name,
- int size,
- ConfigNodeSubType subType,
- ConfigNodeType nType,
- int terminal,
- [MarshalAs(UnmanagedType.LPWStr)]String text,
- int textLength,
- int prefixLength, int fEmpty)
- {
-
- BCLDebug.Trace("REMOTE","Node "+name);
- BCLDebug.Trace("REMOTE","text "+text);
- BCLDebug.Trace("REMOTE","textLength "+textLength);
- BCLDebug.Trace("REMOTE","size "+size);
- BCLDebug.Trace("REMOTE","subType "+((Enum)subType).ToString());
- BCLDebug.Trace("REMOTE","nType "+((Enum)nType).ToString());
- BCLDebug.Trace("REMOTE","terminal "+terminal);
- BCLDebug.Trace("REMOTE","prefixLength "+prefixLength);
- BCLDebug.Trace("REMOTE","fEmpty "+fEmpty+"\n");
- }
-#endif
-
- private String GetInvalidSyntaxMessage()
- {
- String lastProcessedTag = null;
-
- if (lastProcessed != null)
- lastProcessedTag = (lastProcessedEndElement ? "</" : "<") + lastProcessed + ">";
-
- return Environment.GetResourceString("XML_Syntax_InvalidSyntaxInFile", fileName, lastProcessedTag);
- }
- }
-
- // Node in Tree produced by ConfigTreeParser
- internal class ConfigNode
- {
- String m_name = null;
- String m_value = null;
- ConfigNode m_parent = null;
- List<ConfigNode> m_children = new List<ConfigNode>(5);
- List<DictionaryEntry> m_attributes = new List<DictionaryEntry>(5);
-
- internal ConfigNode(String name, ConfigNode parent)
- {
- m_name = name;
- m_parent = parent;
- }
-
- internal String Name
- {
- get {return m_name;}
- }
-
- internal String Value
- {
- get {return m_value;}
- set {m_value = value;}
- }
-
- internal ConfigNode Parent
- {
- get {return m_parent;}
- }
-
- internal List<ConfigNode> Children
- {
- get {return m_children;}
- }
-
- internal List<DictionaryEntry> Attributes
- {
- get {return m_attributes;}
- }
-
- internal void AddChild(ConfigNode child)
- {
- child.m_parent = this;
- m_children.Add(child);
- }
-
- internal int AddAttribute(String key, String value)
- {
- m_attributes.Add(new DictionaryEntry(key, value));
- return m_attributes.Count-1;
- }
-
- internal void ReplaceAttribute(int index, String key, String value)
- {
- m_attributes[index] = new DictionaryEntry(key, value);
- }
-
-#if _DEBUG
- [System.Diagnostics.Conditional("_LOGGING")]
- internal void Trace()
- {
- BCLDebug.Trace("REMOTE","************ConfigNode************");
- BCLDebug.Trace("REMOTE","Name = "+m_name);
- if (m_value != null)
- BCLDebug.Trace("REMOTE","Value = "+m_value);
- if (m_parent != null)
- BCLDebug.Trace("REMOTE","Parent = "+m_parent.Name);
- for (int i=0; i<m_attributes.Count; i++)
- {
- DictionaryEntry de = (DictionaryEntry)m_attributes[i];
- BCLDebug.Trace("REMOTE","Key = "+de.Key+" Value = "+de.Value);
- }
-
- for (int i=0; i<m_children.Count; i++)
- {
- ((ConfigNode)m_children[i]).Trace();
- }
- }
-#endif
- }
-}
-
-
-
-
-
-
diff --git a/src/mscorlib/src/System/Char.cs b/src/mscorlib/src/System/Char.cs
index b9c9305932..7fe1c08715 100644
--- a/src/mscorlib/src/System/Char.cs
+++ b/src/mscorlib/src/System/Char.cs
@@ -21,7 +21,6 @@ namespace System {
using System.Diagnostics;
using System.Diagnostics.Contracts;
-[System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)] public struct Char : IComparable, IConvertible
, IComparable<Char>, IEquatable<Char>
diff --git a/src/mscorlib/src/System/CharEnumerator.cs b/src/mscorlib/src/System/CharEnumerator.cs
index d25294c7e2..689ed7e488 100644
--- a/src/mscorlib/src/System/CharEnumerator.cs
+++ b/src/mscorlib/src/System/CharEnumerator.cs
@@ -11,65 +11,71 @@
**
**
============================================================*/
-namespace System {
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics.Contracts;
+using System.Collections;
+using System.Collections.Generic;
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- public sealed class CharEnumerator : IEnumerator, ICloneable, IEnumerator<char>, IDisposable {
- private String str;
- private int index;
- private char currentElement;
+namespace System
+{
+ public sealed class CharEnumerator : IEnumerator, IEnumerator<char>, IDisposable, ICloneable
+ {
+ private String _str;
+ private int _index;
+ private char _currentElement;
- internal CharEnumerator(String str) {
- Contract.Requires(str != null);
- this.str = str;
- this.index = -1;
+ internal CharEnumerator(String str)
+ {
+ _str = str;
+ _index = -1;
}
- public Object Clone() {
+ public object Clone()
+ {
return MemberwiseClone();
}
-
- public bool MoveNext() {
- if (index < (str.Length-1)) {
- index++;
- currentElement = str[index];
+
+ public bool MoveNext()
+ {
+ if (_index < (_str.Length - 1))
+ {
+ _index++;
+ _currentElement = _str[_index];
return true;
}
else
- index = str.Length;
+ _index = _str.Length;
return false;
-
}
- public void Dispose() {
- if (str != null)
- index = str.Length;
- str = null;
+ public void Dispose()
+ {
+ if (_str != null)
+ _index = _str.Length;
+ _str = null;
}
-
+
/// <internalonly/>
- Object IEnumerator.Current {
+ Object IEnumerator.Current
+ {
get { return Current; }
}
-
- public char Current {
- get {
- if (index == -1)
- throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumNotStarted));
- if (index >= str.Length)
- throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumEnded));
- return currentElement;
+
+ public char Current
+ {
+ get
+ {
+ if (_index == -1)
+ throw new InvalidOperationException(SR.InvalidOperation_EnumNotStarted);
+ if (_index >= _str.Length)
+ throw new InvalidOperationException(SR.InvalidOperation_EnumEnded);
+ return _currentElement;
}
}
- public void Reset() {
- currentElement = (char)0;
- index = -1;
+ public void Reset()
+ {
+ _currentElement = (char)0;
+ _index = -1;
}
}
}
diff --git a/src/mscorlib/src/System/Collections/ArrayList.cs b/src/mscorlib/src/System/Collections/ArrayList.cs
index e7f121370b..53746e224e 100644
--- a/src/mscorlib/src/System/Collections/ArrayList.cs
+++ b/src/mscorlib/src/System/Collections/ArrayList.cs
@@ -18,7 +18,6 @@ namespace System.Collections {
using System;
using System.Runtime;
using System.Security;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
@@ -35,8 +34,7 @@ namespace System.Collections {
[DebuggerTypeProxy(typeof(System.Collections.ArrayList.ArrayListDebugView))]
[DebuggerDisplay("Count = {Count}")]
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class ArrayList : IList, ICloneable
+ internal class ArrayList : IList, ICloneable
{
private Object[] _items;
[ContractPublicPropertyName("Count")]
@@ -47,12 +45,6 @@ namespace System.Collections {
private const int _defaultCapacity = 4;
private static readonly Object[] emptyArray = EmptyArray<Object>.Value;
-
- // Note: this constructor is a bogus constructor that does nothing
- // and is for use only with SyncArrayList.
- internal ArrayList( bool trash )
- {
- }
// Constructs a ArrayList. The list is initially empty and has a capacity
// of zero. Upon adding the first element to the list the capacity is
@@ -175,22 +167,6 @@ namespace System.Collections {
_version++;
}
}
-
- // Creates a ArrayList wrapper for a particular IList. This does not
- // copy the contents of the IList, but only wraps the ILIst. So any
- // changes to the underlying list will affect the ArrayList. This would
- // be useful if you want to Reverse a subrange of an IList, or want to
- // use a generic BinarySearch or Sort method without implementing one yourself.
- // However, since these methods are generic, the performance may not be
- // nearly as good for some operations as they would be on the IList itself.
- //
- public static ArrayList Adapter(IList list) {
- if (list==null)
- throw new ArgumentNullException(nameof(list));
- Contract.Ensures(Contract.Result<ArrayList>() != null);
- Contract.EndContractBlock();
- return new IListWrapper(list);
- }
// Adds the given object to the end of this list. The size of the list is
// increased by one. If required, the capacity of the list is doubled
@@ -211,52 +187,6 @@ namespace System.Collections {
public virtual void AddRange(ICollection c) {
InsertRange(_size, c);
}
-
- // Searches a section of the list for a given element using a binary search
- // algorithm. Elements of the list are compared to the search value using
- // the given IComparer interface. If comparer is null, elements of
- // the list are compared to the search value using the IComparable
- // interface, which in that case must be implemented by all elements of the
- // list and the given search value. This method assumes that the given
- // section of the list is already sorted; if this is not the case, the
- // result will be incorrect.
- //
- // The method returns the index of the given value in the list. If the
- // list does not contain the given value, the method returns a negative
- // integer. The bitwise complement operator (~) can be applied to a
- // negative result to produce the index of the first element (if any) that
- // is larger than the given search value. This is also the index at which
- // the search value should be inserted into the list in order for the list
- // to remain sorted.
- //
- // The method uses the Array.BinarySearch method to perform the
- // search.
- //
- public virtual int BinarySearch(int index, int count, Object value, IComparer comparer) {
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_size - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.Ensures(Contract.Result<int>() < Count);
- Contract.Ensures(Contract.Result<int>() < index + count);
- Contract.EndContractBlock();
-
- return Array.BinarySearch((Array)_items, index, count, value, comparer);
- }
-
- public virtual int BinarySearch(Object value)
- {
- Contract.Ensures(Contract.Result<int>() < Count);
- return BinarySearch(0, Count, value, null);
- }
-
- public virtual int BinarySearch(Object value, IComparer comparer)
- {
- Contract.Ensures(Contract.Result<int>() < Count);
- return BinarySearch(0, Count, value, comparer);
- }
// Clears the contents of ArrayList.
@@ -301,13 +231,6 @@ namespace System.Collections {
return false;
}
}
-
- // Copies this ArrayList into array, which must be of a
- // compatible array type.
- //
- public virtual void CopyTo(Array array) {
- CopyTo(array, 0);
- }
// Copies this ArrayList into array, which must be of a
// compatible array type.
@@ -319,20 +242,6 @@ namespace System.Collections {
// Delegate rest of error checking to Array.Copy.
Array.Copy(_items, 0, array, arrayIndex, _size);
}
-
- // Copies a section of this list to the given array at the given index.
- //
- // The method uses the Array.Copy method to copy the elements.
- //
- public virtual void CopyTo(int index, Array array, int arrayIndex, int count) {
- if (_size - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- if ((array != null) && (array.Rank != 1))
- throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
- Contract.EndContractBlock();
- // Delegate rest of error checking to Array.Copy.
- Array.Copy(_items, index, array, arrayIndex, count);
- }
// Ensures that the capacity of this list is at least the given minimum
// value. If the currect capacity of the list is less than min, the
@@ -349,28 +258,6 @@ namespace System.Collections {
}
}
- // Returns a list wrapper that is fixed at the current size. Operations
- // that add or remove items will fail, however, replacing items is allowed.
- //
- public static IList FixedSize(IList list) {
- if (list==null)
- throw new ArgumentNullException(nameof(list));
- Contract.Ensures(Contract.Result<IList>() != null);
- Contract.EndContractBlock();
- return new FixedSizeList(list);
- }
-
- // Returns a list wrapper that is fixed at the current size. Operations
- // that add or remove items will fail, however, replacing items is allowed.
- //
- public static ArrayList FixedSize(ArrayList list) {
- if (list==null)
- throw new ArgumentNullException(nameof(list));
- Contract.Ensures(Contract.Result<ArrayList>() != null);
- Contract.EndContractBlock();
- return new FixedSizeArrayList(list);
- }
-
// Returns an enumerator for this list with the given
// permission for removal of elements. If modifications made to the list
// while an enumeration is in progress, the MoveNext and
@@ -381,24 +268,6 @@ namespace System.Collections {
return new ArrayListEnumeratorSimple(this);
}
- // Returns an enumerator for a section of this list with the given
- // permission for removal of elements. If modifications made to the list
- // while an enumeration is in progress, the MoveNext and
- // GetObject methods of the enumerator will throw an exception.
- //
- public virtual IEnumerator GetEnumerator(int index, int count) {
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_size - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.Ensures(Contract.Result<IEnumerator>() != null);
- Contract.EndContractBlock();
-
- return new ArrayListEnumerator(this, index, count);
- }
-
// Returns the index of the first occurrence of a given value in a range of
// this list. The list is searched forwards from beginning to end.
// The elements of the list are compared to the given value using the
@@ -412,41 +281,6 @@ namespace System.Collections {
return Array.IndexOf((Array)_items, value, 0, _size);
}
- // Returns the index of the first occurrence of a given value in a range of
- // this list. The list is searched forwards, starting at index
- // startIndex and ending at count number of elements. The
- // elements of the list are compared to the given value using the
- // Object.Equals method.
- //
- // This method uses the Array.IndexOf method to perform the
- // search.
- //
- public virtual int IndexOf(Object value, int startIndex) {
- if (startIndex > _size)
- throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.Ensures(Contract.Result<int>() < Count);
- Contract.EndContractBlock();
- return Array.IndexOf((Array)_items, value, startIndex, _size - startIndex);
- }
-
- // Returns the index of the first occurrence of a given value in a range of
- // this list. The list is searched forwards, starting at index
- // startIndex and upto count number of elements. The
- // elements of the list are compared to the given value using the
- // Object.Equals method.
- //
- // This method uses the Array.IndexOf method to perform the
- // search.
- //
- public virtual int IndexOf(Object value, int startIndex, int count) {
- if (startIndex > _size)
- throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- if (count <0 || startIndex > _size - count) throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_Count"));
- Contract.Ensures(Contract.Result<int>() < Count);
- Contract.EndContractBlock();
- return Array.IndexOf((Array)_items, value, startIndex, count);
- }
-
// Inserts an element into this list at a given index. The size of the list
// is increased by one. If required, the capacity of the list is doubled
// before inserting the new element.
@@ -494,62 +328,6 @@ namespace System.Collections {
}
}
- // Returns the index of the last occurrence of a given value in a range of
- // this list. The list is searched backwards, starting at the end
- // and ending at the first element in the list. The elements of the list
- // are compared to the given value using the Object.Equals method.
- //
- // This method uses the Array.LastIndexOf method to perform the
- // search.
- //
- public virtual int LastIndexOf(Object value)
- {
- Contract.Ensures(Contract.Result<int>() < _size);
- return LastIndexOf(value, _size - 1, _size);
- }
-
- // Returns the index of the last occurrence of a given value in a range of
- // this list. The list is searched backwards, starting at index
- // startIndex and ending at the first element in the list. The
- // elements of the list are compared to the given value using the
- // Object.Equals method.
- //
- // This method uses the Array.LastIndexOf method to perform the
- // search.
- //
- public virtual int LastIndexOf(Object value, int startIndex)
- {
- if (startIndex >= _size)
- throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.Ensures(Contract.Result<int>() < Count);
- Contract.EndContractBlock();
- return LastIndexOf(value, startIndex, startIndex + 1);
- }
-
- // Returns the index of the last occurrence of a given value in a range of
- // this list. The list is searched backwards, starting at index
- // startIndex and upto count elements. The elements of
- // the list are compared to the given value using the Object.Equals
- // method.
- //
- // This method uses the Array.LastIndexOf method to perform the
- // search.
- //
- public virtual int LastIndexOf(Object value, int startIndex, int count) {
- if (Count != 0 && (startIndex < 0 || count < 0))
- throw new ArgumentOutOfRangeException((startIndex<0 ? nameof(startIndex) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.Ensures(Contract.Result<int>() < Count);
- Contract.EndContractBlock();
-
- if (_size == 0) // Special case for an empty list
- return -1;
-
- if (startIndex >= _size || count > startIndex + 1)
- throw new ArgumentOutOfRangeException((startIndex>=_size ? nameof(startIndex) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_BiggerThanCollection"));
-
- return Array.LastIndexOf((Array)_items, value, startIndex, count);
- }
-
// Returns a read-only IList wrapper for the given IList.
//
[FriendAccessAllowed]
@@ -560,16 +338,6 @@ namespace System.Collections {
Contract.EndContractBlock();
return new ReadOnlyList(list);
}
-
- // Returns a read-only ArrayList wrapper for the given ArrayList.
- //
- public static ArrayList ReadOnly(ArrayList list) {
- if (list==null)
- throw new ArgumentNullException(nameof(list));
- Contract.Ensures(Contract.Result<ArrayList>() != null);
- Contract.EndContractBlock();
- return new ReadOnlyArrayList(list);
- }
// Removes the element at the given index. The size of the list is
// decreased by one.
@@ -600,159 +368,6 @@ namespace System.Collections {
_version++;
}
- // Removes a range of elements from this list.
- //
- public virtual void RemoveRange(int index, int count) {
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_size - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.Ensures(Count >= 0);
- //Contract.Ensures(Count == Contract.OldValue(Count) - count);
- Contract.EndContractBlock();
-
- if (count > 0) {
- int i = _size;
- _size -= count;
- if (index < _size) {
- Array.Copy(_items, index + count, _items, index, _size - index);
- }
- while (i > _size) _items[--i] = null;
- _version++;
- }
- }
-
- // Returns an IList that contains count copies of value.
- //
- public static ArrayList Repeat(Object value, int count) {
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count),Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.Ensures(Contract.Result<ArrayList>() != null);
- Contract.EndContractBlock();
-
- ArrayList list = new ArrayList((count>_defaultCapacity)?count:_defaultCapacity);
- for(int i=0; i<count; i++)
- list.Add(value);
- return list;
- }
-
- // Reverses the elements in this list.
- public virtual void Reverse() {
- Reverse(0, Count);
- }
-
- // Reverses the elements in a range of this list. Following a call to this
- // method, an element in the range given by index and count
- // which was previously located at index i will now be located at
- // index index + (index + count - i - 1).
- //
- // This method uses the Array.Reverse method to reverse the
- // elements.
- //
- public virtual void Reverse(int index, int count) {
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_size - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
- Array.Reverse(_items, index, count);
- _version++;
- }
-
- // Sets the elements starting at the given index to the elements of the
- // given collection.
- //
- public virtual void SetRange(int index, ICollection c) {
- if (c==null) throw new ArgumentNullException(nameof(c), Environment.GetResourceString("ArgumentNull_Collection"));
- Contract.EndContractBlock();
- int count = c.Count;
- if (index < 0 || index > _size - count) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
-
- if (count > 0) {
- c.CopyTo(_items, index);
- _version++;
- }
- }
-
- public virtual ArrayList GetRange(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_size - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.Ensures(Contract.Result<ArrayList>() != null);
- Contract.EndContractBlock();
- return new Range(this,index, count);
- }
-
- // Sorts the elements in this list. Uses the default comparer and
- // Array.Sort.
- public virtual void Sort()
- {
- Sort(0, Count, Comparer.Default);
- }
-
- // Sorts the elements in this list. Uses Array.Sort with the
- // provided comparer.
- public virtual void Sort(IComparer comparer)
- {
- Sort(0, Count, comparer);
- }
-
- // Sorts the elements in a section of this list. The sort compares the
- // elements to each other using the given IComparer interface. If
- // comparer is null, the elements are compared to each other using
- // the IComparable interface, which in that case must be implemented by all
- // elements of the list.
- //
- // This method uses the Array.Sort method to sort the elements.
- //
- public virtual void Sort(int index, int count, IComparer comparer) {
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_size - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- Array.Sort(_items, index, count, comparer);
- _version++;
- }
-
- // Returns a thread-safe wrapper around an IList.
- //
- public static IList Synchronized(IList list) {
- if (list==null)
- throw new ArgumentNullException(nameof(list));
- Contract.Ensures(Contract.Result<IList>() != null);
- Contract.EndContractBlock();
- return new SyncIList(list);
- }
-
- // Returns a thread-safe wrapper around a ArrayList.
- //
- public static ArrayList Synchronized(ArrayList list) {
- if (list==null)
- throw new ArgumentNullException(nameof(list));
- Contract.Ensures(Contract.Result<ArrayList>() != null);
- Contract.EndContractBlock();
- return new SyncArrayList(list);
- }
-
- // ToArray returns a new Object array containing the contents of the ArrayList.
- // This requires copying the ArrayList, which is an O(n) operation.
- public virtual Object[] ToArray() {
- Contract.Ensures(Contract.Result<Object[]>() != null);
-
- Object[] array = new Object[_size];
- Array.Copy(_items, 0, array, 0, _size);
- return array;
- }
-
// ToArray returns a new array of a particular type containing the contents
// of the ArrayList. This requires copying the ArrayList and potentially
// downcasting all elements. This copy may fail and is an O(n) operation.
@@ -768,1070 +383,6 @@ namespace System.Collections {
return array;
}
- // Sets the capacity of this list to the size of the list. This method can
- // be used to minimize a list's memory overhead once it is known that no
- // new elements will be added to the list. To completely clear a list and
- // release all memory referenced by the list, execute the following
- // statements:
- //
- // list.Clear();
- // list.TrimToSize();
- //
- public virtual void TrimToSize() {
- Capacity = _size;
- }
-
-
- // This class wraps an IList, exposing it as a ArrayList
- // Note this requires reimplementing half of ArrayList...
- [Serializable]
- private class IListWrapper : ArrayList
- {
- private IList _list;
-
- internal IListWrapper(IList list) {
- _list = list;
- _version = 0; // list doesn't not contain a version number
- }
-
- public override int Capacity {
- get { return _list.Count; }
- set {
- if (value < Count) throw new ArgumentOutOfRangeException(nameof(value), Environment.GetResourceString("ArgumentOutOfRange_SmallCapacity"));
- Contract.EndContractBlock();
- }
- }
-
- public override int Count {
- get { return _list.Count; }
- }
-
- public override bool IsReadOnly {
- get { return _list.IsReadOnly; }
- }
-
- public override bool IsFixedSize {
- get { return _list.IsFixedSize; }
- }
-
-
- public override bool IsSynchronized {
- get { return _list.IsSynchronized; }
- }
-
- public override Object this[int index] {
- get {
- return _list[index];
- }
- set {
- _list[index] = value;
- _version++;
- }
- }
-
- public override Object SyncRoot {
- get { return _list.SyncRoot; }
- }
-
- public override int Add(Object obj) {
- int i = _list.Add(obj);
- _version++;
- return i;
- }
-
- public override void AddRange(ICollection c) {
- InsertRange(Count, c);
- }
-
- // Other overloads with automatically work
- public override int BinarySearch(int index, int count, Object value, IComparer comparer)
- {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (this.Count - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
- if (comparer == null)
- comparer = Comparer.Default;
-
- int lo = index;
- int hi = index + count - 1;
- int mid;
- while (lo <= hi) {
- mid = (lo+hi)/2;
- int r = comparer.Compare(value, _list[mid]);
- if (r == 0)
- return mid;
- if (r < 0)
- hi = mid-1;
- else
- lo = mid+1;
- }
- // return bitwise complement of the first element greater than value.
- // Since hi is less than lo now, ~lo is the correct item.
- return ~lo;
- }
-
- public override void Clear() {
- // If _list is an array, it will support Clear method.
- // We shouldn't allow clear operation on a FixedSized ArrayList
- if(_list.IsFixedSize) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- _list.Clear();
- _version++;
- }
-
- public override Object Clone() {
- // This does not do a shallow copy of _list into a ArrayList!
- // This clones the IListWrapper, creating another wrapper class!
- return new IListWrapper(_list);
- }
-
- public override bool Contains(Object obj) {
- return _list.Contains(obj);
- }
-
- public override void CopyTo(Array array, int index) {
- _list.CopyTo(array, index);
- }
-
- public override void CopyTo(int index, Array array, int arrayIndex, int count) {
- if (array==null)
- throw new ArgumentNullException(nameof(array));
- if (index < 0 || arrayIndex < 0)
- throw new ArgumentOutOfRangeException((index < 0) ? nameof(index) : nameof(arrayIndex), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if( count < 0)
- throw new ArgumentOutOfRangeException( nameof(count) , Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (array.Length - arrayIndex < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- if (array.Rank != 1)
- throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
- Contract.EndContractBlock();
-
- if (_list.Count - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
-
- for(int i=index; i<index+count; i++)
- array.SetValue(_list[i], arrayIndex++);
- }
-
- public override IEnumerator GetEnumerator() {
- return _list.GetEnumerator();
- }
-
- public override IEnumerator GetEnumerator(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
- if (_list.Count - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
-
- return new IListWrapperEnumWrapper(this, index, count);
- }
-
- public override int IndexOf(Object value) {
- return _list.IndexOf(value);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int IndexOf(Object value, int startIndex) {
- return IndexOf(value, startIndex, _list.Count - startIndex);
- }
-
- public override int IndexOf(Object value, int startIndex, int count) {
- if (startIndex < 0 || startIndex > this.Count) throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- if (count < 0 || startIndex > this.Count - count) throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_Count"));
- Contract.EndContractBlock();
-
- int endIndex = startIndex + count;
- if (value == null) {
- for(int i=startIndex; i<endIndex; i++)
- if (_list[i] == null)
- return i;
- return -1;
- } else {
- for(int i=startIndex; i<endIndex; i++)
- if (_list[i] != null && _list[i].Equals(value))
- return i;
- return -1;
- }
- }
-
- public override void Insert(int index, Object obj) {
- _list.Insert(index, obj);
- _version++;
- }
-
- public override void InsertRange(int index, ICollection c) {
- if (c==null)
- throw new ArgumentNullException(nameof(c), Environment.GetResourceString("ArgumentNull_Collection"));
- if (index < 0 || index > this.Count) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.EndContractBlock();
-
- if( c.Count > 0) {
- ArrayList al = _list as ArrayList;
- if( al != null) {
- // We need to special case ArrayList.
- // When c is a range of _list, we need to handle this in a special way.
- // See ArrayList.InsertRange for details.
- al.InsertRange(index, c);
- }
- else {
- IEnumerator en = c.GetEnumerator();
- while(en.MoveNext()) {
- _list.Insert(index++, en.Current);
- }
- }
- _version++;
- }
- }
-
- public override int LastIndexOf(Object value) {
- return LastIndexOf(value,_list.Count - 1, _list.Count);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex) {
- return LastIndexOf(value, startIndex, startIndex + 1);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex, int count) {
- if (_list.Count == 0)
- return -1;
-
- if (startIndex < 0 || startIndex >= _list.Count) throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- if (count < 0 || count > startIndex + 1) throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_Count"));
-
- int endIndex = startIndex - count + 1;
- if (value == null) {
- for(int i=startIndex; i >= endIndex; i--)
- if (_list[i] == null)
- return i;
- return -1;
- } else {
- for(int i=startIndex; i >= endIndex; i--)
- if (_list[i] != null && _list[i].Equals(value))
- return i;
- return -1;
- }
- }
-
- public override void Remove(Object value) {
- int index = IndexOf(value);
- if (index >=0)
- RemoveAt(index);
- }
-
- public override void RemoveAt(int index) {
- _list.RemoveAt(index);
- _version++;
- }
-
- public override void RemoveRange(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
- if (_list.Count - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
-
- if( count > 0) // be consistent with ArrayList
- _version++;
-
- while(count > 0) {
- _list.RemoveAt(index);
- count--;
- }
- }
-
- public override void Reverse(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
- if (_list.Count - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
-
- int i = index;
- int j = index + count - 1;
- while (i < j)
- {
- Object tmp = _list[i];
- _list[i++] = _list[j];
- _list[j--] = tmp;
- }
- _version++;
- }
-
- public override void SetRange(int index, ICollection c) {
- if (c==null) {
- throw new ArgumentNullException(nameof(c), Environment.GetResourceString("ArgumentNull_Collection"));
- }
- Contract.EndContractBlock();
-
- if (index < 0 || index > _list.Count - c.Count) {
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- }
-
- if( c.Count > 0) {
- IEnumerator en = c.GetEnumerator();
- while(en.MoveNext()) {
- _list[index++] = en.Current;
- }
- _version++;
- }
- }
-
- public override ArrayList GetRange(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
- if (_list.Count - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- return new Range(this,index, count);
- }
-
- public override void Sort(int index, int count, IComparer comparer) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
- if (_list.Count - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
-
- Object [] array = new Object[count];
- CopyTo(index, array, 0, count);
- Array.Sort(array, 0, count, comparer);
- for(int i=0; i<count; i++)
- _list[i+index] = array[i];
-
- _version++;
- }
-
-
- public override Object[] ToArray() {
- Object[] array = new Object[Count];
- _list.CopyTo(array, 0);
- return array;
- }
-
- public override Array ToArray(Type type)
- {
- if (type==null)
- throw new ArgumentNullException(nameof(type));
- Contract.EndContractBlock();
- Array array = Array.UnsafeCreateInstance(type, _list.Count);
- _list.CopyTo(array, 0);
- return array;
- }
-
- public override void TrimToSize()
- {
- // Can't really do much here...
- }
-
- // This is the enumerator for an IList that's been wrapped in another
- // class that implements all of ArrayList's methods.
- [Serializable]
- private sealed class IListWrapperEnumWrapper : IEnumerator, ICloneable
- {
- private IEnumerator _en;
- private int _remaining;
- private int _initialStartIndex; // for reset
- private int _initialCount; // for reset
- private bool _firstCall; // firstCall to MoveNext
-
- private IListWrapperEnumWrapper()
- {
- }
-
- internal IListWrapperEnumWrapper(IListWrapper listWrapper, int startIndex, int count)
- {
- _en = listWrapper.GetEnumerator();
- _initialStartIndex = startIndex;
- _initialCount = count;
- while(startIndex-- > 0 && _en.MoveNext());
- _remaining = count;
- _firstCall = true;
- }
-
- public Object Clone() {
- // We must clone the underlying enumerator, I think.
- IListWrapperEnumWrapper clone = new IListWrapperEnumWrapper();
- clone._en = (IEnumerator) ((ICloneable)_en).Clone();
- clone._initialStartIndex = _initialStartIndex;
- clone._initialCount = _initialCount;
- clone._remaining = _remaining;
- clone._firstCall = _firstCall;
- return clone;
- }
-
- public bool MoveNext() {
- if (_firstCall) {
- _firstCall = false;
- return _remaining-- > 0 && _en.MoveNext();
- }
- if (_remaining < 0)
- return false;
- bool r = _en.MoveNext();
- return r && _remaining-- > 0;
- }
-
- public Object Current {
- get {
- if (_firstCall)
- throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumNotStarted));
- if (_remaining < 0)
- throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumEnded));
- return _en.Current;
- }
- }
-
- public void Reset() {
- _en.Reset();
- int startIndex = _initialStartIndex;
- while(startIndex-- > 0 && _en.MoveNext());
- _remaining = _initialCount;
- _firstCall = true;
- }
- }
- }
-
-
- [Serializable]
- private class SyncArrayList : ArrayList
- {
- private ArrayList _list;
- private Object _root;
-
- internal SyncArrayList(ArrayList list)
- : base( false )
- {
- _list = list;
- _root = list.SyncRoot;
- }
-
- public override int Capacity {
- get {
- lock(_root) {
- return _list.Capacity;
- }
- }
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- set {
- lock(_root) {
- _list.Capacity = value;
- }
- }
- }
-
- public override int Count {
- get { lock(_root) { return _list.Count; } }
- }
-
- public override bool IsReadOnly {
- get { return _list.IsReadOnly; }
- }
-
- public override bool IsFixedSize {
- get { return _list.IsFixedSize; }
- }
-
-
- public override bool IsSynchronized {
- get { return true; }
- }
-
- public override Object this[int index] {
- get {
- lock(_root) {
- return _list[index];
- }
- }
- set {
- lock(_root) {
- _list[index] = value;
- }
- }
- }
-
- public override Object SyncRoot {
- get { return _root; }
- }
-
- public override int Add(Object value) {
- lock(_root) {
- return _list.Add(value);
- }
- }
-
- public override void AddRange(ICollection c) {
- lock(_root) {
- _list.AddRange(c);
- }
- }
-
- public override int BinarySearch(Object value) {
- lock(_root) {
- return _list.BinarySearch(value);
- }
- }
-
- public override int BinarySearch(Object value, IComparer comparer) {
- lock(_root) {
- return _list.BinarySearch(value, comparer);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int BinarySearch(int index, int count, Object value, IComparer comparer) {
- lock(_root) {
- return _list.BinarySearch(index, count, value, comparer);
- }
- }
-
- public override void Clear() {
- lock(_root) {
- _list.Clear();
- }
- }
-
- public override Object Clone() {
- lock(_root) {
- return new SyncArrayList((ArrayList)_list.Clone());
- }
- }
-
- public override bool Contains(Object item) {
- lock(_root) {
- return _list.Contains(item);
- }
- }
-
- public override void CopyTo(Array array) {
- lock(_root) {
- _list.CopyTo(array);
- }
- }
-
- public override void CopyTo(Array array, int index) {
- lock(_root) {
- _list.CopyTo(array, index);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void CopyTo(int index, Array array, int arrayIndex, int count) {
- lock(_root) {
- _list.CopyTo(index, array, arrayIndex, count);
- }
- }
-
- public override IEnumerator GetEnumerator() {
- lock(_root) {
- return _list.GetEnumerator();
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override IEnumerator GetEnumerator(int index, int count) {
- lock(_root) {
- return _list.GetEnumerator(index, count);
- }
- }
-
- public override int IndexOf(Object value) {
- lock(_root) {
- return _list.IndexOf(value);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int IndexOf(Object value, int startIndex) {
- lock(_root) {
- return _list.IndexOf(value, startIndex);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int IndexOf(Object value, int startIndex, int count) {
- lock(_root) {
- return _list.IndexOf(value, startIndex, count);
- }
- }
-
- public override void Insert(int index, Object value) {
- lock(_root) {
- _list.Insert(index, value);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void InsertRange(int index, ICollection c) {
- lock(_root) {
- _list.InsertRange(index, c);
- }
- }
-
- public override int LastIndexOf(Object value) {
- lock(_root) {
- return _list.LastIndexOf(value);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex) {
- lock(_root) {
- return _list.LastIndexOf(value, startIndex);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex, int count) {
- lock(_root) {
- return _list.LastIndexOf(value, startIndex, count);
- }
- }
-
- public override void Remove(Object value) {
- lock(_root) {
- _list.Remove(value);
- }
- }
-
- public override void RemoveAt(int index) {
- lock(_root) {
- _list.RemoveAt(index);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void RemoveRange(int index, int count) {
- lock(_root) {
- _list.RemoveRange(index, count);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void Reverse(int index, int count) {
- lock(_root) {
- _list.Reverse(index, count);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void SetRange(int index, ICollection c) {
- lock(_root) {
- _list.SetRange(index, c);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override ArrayList GetRange(int index, int count) {
- lock(_root) {
- return _list.GetRange(index, count);
- }
- }
-
- public override void Sort() {
- lock(_root) {
- _list.Sort();
- }
- }
-
- public override void Sort(IComparer comparer) {
- lock(_root) {
- _list.Sort(comparer);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void Sort(int index, int count, IComparer comparer) {
- lock(_root) {
- _list.Sort(index, count, comparer);
- }
- }
-
- public override Object[] ToArray() {
- lock(_root) {
- return _list.ToArray();
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override Array ToArray(Type type) {
- lock(_root) {
- return _list.ToArray(type);
- }
- }
-
- public override void TrimToSize() {
- lock(_root) {
- _list.TrimToSize();
- }
- }
- }
-
-
- [Serializable]
- private class SyncIList : IList
- {
- private IList _list;
- private Object _root;
-
- internal SyncIList(IList list) {
- _list = list;
- _root = list.SyncRoot;
- }
-
- public virtual int Count {
- get { lock(_root) { return _list.Count; } }
- }
-
- public virtual bool IsReadOnly {
- get { return _list.IsReadOnly; }
- }
-
- public virtual bool IsFixedSize {
- get { return _list.IsFixedSize; }
- }
-
-
- public virtual bool IsSynchronized {
- get { return true; }
- }
-
- public virtual Object this[int index] {
- get {
- lock(_root) {
- return _list[index];
- }
- }
- set {
- lock(_root) {
- _list[index] = value;
- }
- }
- }
-
- public virtual Object SyncRoot {
- get { return _root; }
- }
-
- public virtual int Add(Object value) {
- lock(_root) {
- return _list.Add(value);
- }
- }
-
-
- public virtual void Clear() {
- lock(_root) {
- _list.Clear();
- }
- }
-
- public virtual bool Contains(Object item) {
- lock(_root) {
- return _list.Contains(item);
- }
- }
-
- public virtual void CopyTo(Array array, int index) {
- lock(_root) {
- _list.CopyTo(array, index);
- }
- }
-
- public virtual IEnumerator GetEnumerator() {
- lock(_root) {
- return _list.GetEnumerator();
- }
- }
-
- public virtual int IndexOf(Object value) {
- lock(_root) {
- return _list.IndexOf(value);
- }
- }
-
- public virtual void Insert(int index, Object value) {
- lock(_root) {
- _list.Insert(index, value);
- }
- }
-
- public virtual void Remove(Object value) {
- lock(_root) {
- _list.Remove(value);
- }
- }
-
- public virtual void RemoveAt(int index) {
- lock(_root) {
- _list.RemoveAt(index);
- }
- }
- }
-
- [Serializable]
- private class FixedSizeList : IList
- {
- private IList _list;
-
- internal FixedSizeList(IList l) {
- _list = l;
- }
-
- public virtual int Count {
- get { return _list.Count; }
- }
-
- public virtual bool IsReadOnly {
- get { return _list.IsReadOnly; }
- }
-
- public virtual bool IsFixedSize {
- get { return true; }
- }
-
- public virtual bool IsSynchronized {
- get { return _list.IsSynchronized; }
- }
-
- public virtual Object this[int index] {
- get {
- return _list[index];
- }
- set {
- _list[index] = value;
- }
- }
-
- public virtual Object SyncRoot {
- get { return _list.SyncRoot; }
- }
-
- public virtual int Add(Object obj) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- public virtual void Clear() {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- public virtual bool Contains(Object obj) {
- return _list.Contains(obj);
- }
-
- public virtual void CopyTo(Array array, int index) {
- _list.CopyTo(array, index);
- }
-
- public virtual IEnumerator GetEnumerator() {
- return _list.GetEnumerator();
- }
-
- public virtual int IndexOf(Object value) {
- return _list.IndexOf(value);
- }
-
- public virtual void Insert(int index, Object obj) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- public virtual void Remove(Object value) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- public virtual void RemoveAt(int index) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
- }
-
- [Serializable]
- private class FixedSizeArrayList : ArrayList
- {
- private ArrayList _list;
-
- internal FixedSizeArrayList(ArrayList l) {
- _list = l;
- _version = _list._version;
- }
-
- public override int Count {
- get { return _list.Count; }
- }
-
- public override bool IsReadOnly {
- get { return _list.IsReadOnly; }
- }
-
- public override bool IsFixedSize {
- get { return true; }
- }
-
- public override bool IsSynchronized {
- get { return _list.IsSynchronized; }
- }
-
- public override Object this[int index] {
- get {
- return _list[index];
- }
- set {
- _list[index] = value;
- _version = _list._version;
- }
- }
-
- public override Object SyncRoot {
- get { return _list.SyncRoot; }
- }
-
- public override int Add(Object obj) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- public override void AddRange(ICollection c) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int BinarySearch(int index, int count, Object value, IComparer comparer) {
- return _list.BinarySearch(index, count, value, comparer);
- }
-
- public override int Capacity {
- get { return _list.Capacity; }
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- set { throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection")); }
- }
-
- public override void Clear() {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- public override Object Clone() {
- FixedSizeArrayList arrayList = new FixedSizeArrayList(_list);
- arrayList._list = (ArrayList)_list.Clone();
- return arrayList;
- }
-
- public override bool Contains(Object obj) {
- return _list.Contains(obj);
- }
-
- public override void CopyTo(Array array, int index) {
- _list.CopyTo(array, index);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void CopyTo(int index, Array array, int arrayIndex, int count) {
- _list.CopyTo(index, array, arrayIndex, count);
- }
-
- public override IEnumerator GetEnumerator() {
- return _list.GetEnumerator();
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override IEnumerator GetEnumerator(int index, int count) {
- return _list.GetEnumerator(index, count);
- }
-
- public override int IndexOf(Object value) {
- return _list.IndexOf(value);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int IndexOf(Object value, int startIndex) {
- return _list.IndexOf(value, startIndex);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int IndexOf(Object value, int startIndex, int count) {
- return _list.IndexOf(value, startIndex, count);
- }
-
- public override void Insert(int index, Object obj) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void InsertRange(int index, ICollection c) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- public override int LastIndexOf(Object value) {
- return _list.LastIndexOf(value);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex) {
- return _list.LastIndexOf(value, startIndex);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex, int count) {
- return _list.LastIndexOf(value, startIndex, count);
- }
-
- public override void Remove(Object value) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- public override void RemoveAt(int index) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void RemoveRange(int index, int count) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void SetRange(int index, ICollection c) {
- _list.SetRange(index, c);
- _version = _list._version;
- }
-
- public override ArrayList GetRange(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (Count - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- return new Range(this,index, count);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void Reverse(int index, int count) {
- _list.Reverse(index, count);
- _version = _list._version;
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void Sort(int index, int count, IComparer comparer) {
- _list.Sort(index, count, comparer);
- _version = _list._version;
- }
-
- public override Object[] ToArray() {
- return _list.ToArray();
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override Array ToArray(Type type) {
- return _list.ToArray(type);
- }
-
- public override void TrimToSize() {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
- }
- }
-
[Serializable]
private class ReadOnlyList : IList
{
@@ -1908,626 +459,6 @@ namespace System.Collections {
}
[Serializable]
- private class ReadOnlyArrayList : ArrayList
- {
- private ArrayList _list;
-
- internal ReadOnlyArrayList(ArrayList l) {
- _list = l;
- }
-
- public override int Count {
- get { return _list.Count; }
- }
-
- public override bool IsReadOnly {
- get { return true; }
- }
-
- public override bool IsFixedSize {
- get { return true; }
- }
-
- public override bool IsSynchronized {
- get { return _list.IsSynchronized; }
- }
-
- public override Object this[int index] {
- get {
- return _list[index];
- }
- set {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
- }
-
- public override Object SyncRoot {
- get { return _list.SyncRoot; }
- }
-
- public override int Add(Object obj) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- public override void AddRange(ICollection c) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int BinarySearch(int index, int count, Object value, IComparer comparer) {
- return _list.BinarySearch(index, count, value, comparer);
- }
-
-
- public override int Capacity {
- get { return _list.Capacity; }
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- set { throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection")); }
- }
-
- public override void Clear() {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- public override Object Clone() {
- ReadOnlyArrayList arrayList = new ReadOnlyArrayList(_list);
- arrayList._list = (ArrayList)_list.Clone();
- return arrayList;
- }
-
- public override bool Contains(Object obj) {
- return _list.Contains(obj);
- }
-
- public override void CopyTo(Array array, int index) {
- _list.CopyTo(array, index);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void CopyTo(int index, Array array, int arrayIndex, int count) {
- _list.CopyTo(index, array, arrayIndex, count);
- }
-
- public override IEnumerator GetEnumerator() {
- return _list.GetEnumerator();
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override IEnumerator GetEnumerator(int index, int count) {
- return _list.GetEnumerator(index, count);
- }
-
- public override int IndexOf(Object value) {
- return _list.IndexOf(value);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int IndexOf(Object value, int startIndex) {
- return _list.IndexOf(value, startIndex);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int IndexOf(Object value, int startIndex, int count) {
- return _list.IndexOf(value, startIndex, count);
- }
-
- public override void Insert(int index, Object obj) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void InsertRange(int index, ICollection c) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- public override int LastIndexOf(Object value) {
- return _list.LastIndexOf(value);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex) {
- return _list.LastIndexOf(value, startIndex);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex, int count) {
- return _list.LastIndexOf(value, startIndex, count);
- }
-
- public override void Remove(Object value) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- public override void RemoveAt(int index) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void RemoveRange(int index, int count) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void SetRange(int index, ICollection c) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- public override ArrayList GetRange(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (Count - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- return new Range(this,index, count);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void Reverse(int index, int count) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void Sort(int index, int count, IComparer comparer) {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
-
- public override Object[] ToArray() {
- return _list.ToArray();
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override Array ToArray(Type type) {
- return _list.ToArray(type);
- }
-
- public override void TrimToSize() {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReadOnlyCollection"));
- }
- }
-
-
- // Implements an enumerator for a ArrayList. The enumerator uses the
- // internal version number of the list to ensure that no modifications are
- // made to the list while an enumeration is in progress.
- [Serializable]
- private sealed class ArrayListEnumerator : IEnumerator, ICloneable
- {
- private ArrayList list;
- private int index;
- private int endIndex; // Where to stop.
- private int version;
- private Object currentElement;
- private int startIndex; // Save this for Reset.
-
- internal ArrayListEnumerator(ArrayList list, int index, int count) {
- this.list = list;
- startIndex = index;
- this.index = index - 1;
- endIndex = this.index + count; // last valid index
- version = list._version;
- currentElement = null;
- }
-
- public Object Clone() {
- return MemberwiseClone();
- }
-
- public bool MoveNext() {
- if (version != list._version) throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumFailedVersion));
- if (index < endIndex) {
- currentElement = list[++index];
- return true;
- }
- else {
- index = endIndex + 1;
- }
-
- return false;
- }
-
- public Object Current {
- get {
- if (index < startIndex)
- throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumNotStarted));
- else if (index > endIndex) {
- throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumEnded));
- }
- return currentElement;
- }
- }
-
- public void Reset() {
- if (version != list._version) throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumFailedVersion));
- index = startIndex - 1;
- }
- }
-
- // Implementation of a generic list subrange. An instance of this class
- // is returned by the default implementation of List.GetRange.
- [Serializable]
- private class Range: ArrayList
- {
- private ArrayList _baseList;
- private int _baseIndex;
- [ContractPublicPropertyName("Count")]
- private int _baseSize;
- private int _baseVersion;
-
- internal Range(ArrayList list, int index, int count) : base(false) {
- _baseList = list;
- _baseIndex = index;
- _baseSize = count;
- _baseVersion = list._version;
- // we also need to update _version field to make Range of Range work
- _version = list._version;
- }
-
- private void InternalUpdateRange()
- {
- if (_baseVersion != _baseList._version)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_UnderlyingArrayListChanged"));
- }
-
- private void InternalUpdateVersion() {
- _baseVersion++;
- _version++;
- }
-
- public override int Add(Object value) {
- InternalUpdateRange();
- _baseList.Insert(_baseIndex + _baseSize, value);
- InternalUpdateVersion();
- return _baseSize++;
- }
-
- public override void AddRange(ICollection c) {
- if( c == null ) {
- throw new ArgumentNullException(nameof(c));
- }
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- int count = c.Count;
- if( count > 0) {
- _baseList.InsertRange(_baseIndex + _baseSize, c);
- InternalUpdateVersion();
- _baseSize += count;
- }
- }
-
- // Other overloads with automatically work
- public override int BinarySearch(int index, int count, Object value, IComparer comparer) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_baseSize - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
- InternalUpdateRange();
-
- int i = _baseList.BinarySearch(_baseIndex + index, count, value, comparer);
- if (i >= 0) return i - _baseIndex;
- return i + _baseIndex;
- }
-
- public override int Capacity {
- get {
- return _baseList.Capacity;
- }
-
- set {
- if (value < Count) throw new ArgumentOutOfRangeException(nameof(value), Environment.GetResourceString("ArgumentOutOfRange_SmallCapacity"));
- Contract.EndContractBlock();
- }
- }
-
-
- public override void Clear() {
- InternalUpdateRange();
- if (_baseSize != 0)
- {
- _baseList.RemoveRange(_baseIndex, _baseSize);
- InternalUpdateVersion();
- _baseSize = 0;
- }
- }
-
- public override Object Clone() {
- InternalUpdateRange();
- Range arrayList = new Range(_baseList,_baseIndex,_baseSize);
- arrayList._baseList = (ArrayList)_baseList.Clone();
- return arrayList;
- }
-
- public override bool Contains(Object item) {
- InternalUpdateRange();
- if (item==null) {
- for(int i=0; i<_baseSize; i++)
- if (_baseList[_baseIndex + i]==null)
- return true;
- return false;
- }
- else {
- for(int i=0; i<_baseSize; i++)
- if (_baseList[_baseIndex + i] != null && _baseList[_baseIndex + i].Equals(item))
- return true;
- return false;
- }
- }
-
- public override void CopyTo(Array array, int index) {
- if (array==null)
- throw new ArgumentNullException(nameof(array));
- if (array.Rank != 1)
- throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (array.Length - index < _baseSize)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- _baseList.CopyTo(_baseIndex, array, index, _baseSize);
- }
-
- public override void CopyTo(int index, Array array, int arrayIndex, int count) {
- if (array==null)
- throw new ArgumentNullException(nameof(array));
- if (array.Rank != 1)
- throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (array.Length - arrayIndex < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- if (_baseSize - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- _baseList.CopyTo(_baseIndex + index, array, arrayIndex, count);
- }
-
- public override int Count {
- get {
- InternalUpdateRange();
- return _baseSize;
- }
- }
-
- public override bool IsReadOnly {
- get { return _baseList.IsReadOnly; }
- }
-
- public override bool IsFixedSize {
- get { return _baseList.IsFixedSize; }
- }
-
- public override bool IsSynchronized {
- get { return _baseList.IsSynchronized; }
- }
-
- public override IEnumerator GetEnumerator() {
- return GetEnumerator(0,_baseSize);
- }
-
- public override IEnumerator GetEnumerator(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_baseSize - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- return _baseList.GetEnumerator(_baseIndex + index, count);
- }
-
- public override ArrayList GetRange(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_baseSize - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- return new Range(this, index, count);
- }
-
- public override Object SyncRoot {
- get {
- return _baseList.SyncRoot;
- }
- }
-
-
- public override int IndexOf(Object value) {
- InternalUpdateRange();
- int i = _baseList.IndexOf(value, _baseIndex, _baseSize);
- if (i >= 0) return i - _baseIndex;
- return -1;
- }
-
- public override int IndexOf(Object value, int startIndex) {
- if (startIndex < 0)
- throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (startIndex > _baseSize)
- throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- int i = _baseList.IndexOf(value, _baseIndex + startIndex, _baseSize - startIndex);
- if (i >= 0) return i - _baseIndex;
- return -1;
- }
-
- public override int IndexOf(Object value, int startIndex, int count) {
- if (startIndex < 0 || startIndex > _baseSize)
- throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_Index"));
-
- if (count < 0 || (startIndex > _baseSize - count))
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_Count"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- int i = _baseList.IndexOf(value, _baseIndex + startIndex, count);
- if (i >= 0) return i - _baseIndex;
- return -1;
- }
-
- public override void Insert(int index, Object value) {
- if (index < 0 || index > _baseSize) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- _baseList.Insert(_baseIndex + index, value);
- InternalUpdateVersion();
- _baseSize++;
- }
-
- public override void InsertRange(int index, ICollection c) {
- if (index < 0 || index > _baseSize) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- if( c == null) {
- throw new ArgumentNullException(nameof(c));
- }
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- int count = c.Count;
- if( count > 0) {
- _baseList.InsertRange(_baseIndex + index, c);
- _baseSize += count;
- InternalUpdateVersion();
- }
- }
-
- public override int LastIndexOf(Object value) {
- InternalUpdateRange();
- int i = _baseList.LastIndexOf(value, _baseIndex + _baseSize - 1, _baseSize);
- if (i >= 0) return i - _baseIndex;
- return -1;
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex) {
- return LastIndexOf(value, startIndex, startIndex + 1);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int LastIndexOf(Object value, int startIndex, int count) {
- InternalUpdateRange();
- if (_baseSize == 0)
- return -1;
-
- if (startIndex >= _baseSize)
- throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- if (startIndex < 0)
- throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
-
- int i = _baseList.LastIndexOf(value, _baseIndex + startIndex, count);
- if (i >= 0) return i - _baseIndex;
- return -1;
- }
-
- // Don't need to override Remove
-
- public override void RemoveAt(int index) {
- if (index < 0 || index >= _baseSize) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- _baseList.RemoveAt(_baseIndex + index);
- InternalUpdateVersion();
- _baseSize--;
- }
-
- public override void RemoveRange(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_baseSize - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- // No need to call _bastList.RemoveRange if count is 0.
- // In addition, _baseList won't change the vresion number if count is 0.
- if( count > 0) {
- _baseList.RemoveRange(_baseIndex + index, count);
- InternalUpdateVersion();
- _baseSize -= count;
- }
- }
-
- public override void Reverse(int index, int count) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_baseSize - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- _baseList.Reverse(_baseIndex + index, count);
- InternalUpdateVersion();
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void SetRange(int index, ICollection c) {
- InternalUpdateRange();
- if (index < 0 || index >= _baseSize) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- _baseList.SetRange(_baseIndex + index, c);
- if( c.Count > 0) {
- InternalUpdateVersion();
- }
- }
-
- public override void Sort(int index, int count, IComparer comparer) {
- if (index < 0 || count < 0)
- throw new ArgumentOutOfRangeException((index<0 ? nameof(index) : nameof(count)), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (_baseSize - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- _baseList.Sort(_baseIndex + index, count, comparer);
- InternalUpdateVersion();
- }
-
- public override Object this[int index] {
- get {
- InternalUpdateRange();
- if (index < 0 || index >= _baseSize) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- return _baseList[_baseIndex + index];
- }
- set {
- InternalUpdateRange();
- if (index < 0 || index >= _baseSize) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- _baseList[_baseIndex + index] = value;
- InternalUpdateVersion();
- }
- }
-
- public override Object[] ToArray() {
- InternalUpdateRange();
- Object[] array = new Object[_baseSize];
- Array.Copy(_baseList._items, _baseIndex, array, 0, _baseSize);
- return array;
- }
-
- public override Array ToArray(Type type) {
- if (type==null)
- throw new ArgumentNullException(nameof(type));
- Contract.EndContractBlock();
-
- InternalUpdateRange();
- Array array = Array.UnsafeCreateInstance(type, _baseSize);
- _baseList.CopyTo(_baseIndex, array, 0, _baseSize);
- return array;
- }
-
- public override void TrimToSize() {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_RangeCollection"));
- }
- }
-
- [Serializable]
private sealed class ArrayListEnumeratorSimple : IEnumerator, ICloneable {
private ArrayList list;
private int index;
@@ -2607,20 +538,6 @@ namespace System.Collections {
internal class ArrayListDebugView {
private ArrayList arrayList;
-
- public ArrayListDebugView( ArrayList arrayList) {
- if( arrayList == null)
- throw new ArgumentNullException(nameof(arrayList));
-
- this.arrayList = arrayList;
- }
-
- [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
- public Object[] Items {
- get {
- return arrayList.ToArray();
- }
- }
}
}
}
diff --git a/src/mscorlib/src/System/Collections/CollectionBase.cs b/src/mscorlib/src/System/Collections/CollectionBase.cs
index ae0c0d302d..a3dd88a7b3 100644
--- a/src/mscorlib/src/System/Collections/CollectionBase.cs
+++ b/src/mscorlib/src/System/Collections/CollectionBase.cs
@@ -12,20 +12,14 @@ namespace System.Collections {
// Useful base class for typed read/write collections where items derive from object
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CollectionBase : IList {
- ArrayList list;
+ private ArrayList list;
protected CollectionBase() {
list = new ArrayList();
}
-
- protected CollectionBase(int capacity) {
- list = new ArrayList(capacity);
- }
-
- protected ArrayList InnerList {
+ internal ArrayList InnerList {
get {
if (list == null)
list = new ArrayList();
@@ -37,16 +31,6 @@ namespace System.Collections {
get { return (IList)this; }
}
- [System.Runtime.InteropServices.ComVisible(false)]
- public int Capacity {
- get {
- return InnerList.Capacity;
- }
- set {
- InnerList.Capacity = value;
- }
- }
-
public int Count {
get {
diff --git a/src/mscorlib/src/System/Collections/Comparer.cs b/src/mscorlib/src/System/Collections/Comparer.cs
index 0e3c78b529..928b0f9f9a 100644
--- a/src/mscorlib/src/System/Collections/Comparer.cs
+++ b/src/mscorlib/src/System/Collections/Comparer.cs
@@ -17,12 +17,10 @@ namespace System.Collections {
using System;
using System.Globalization;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class Comparer : IComparer , ISerializable
+ internal sealed class Comparer : IComparer , ISerializable
{
private CompareInfo m_compareInfo;
public static readonly Comparer Default = new Comparer(CultureInfo.CurrentCulture);
diff --git a/src/mscorlib/src/System/Collections/Concurrent/ConcurrentDictionary.cs b/src/mscorlib/src/System/Collections/Concurrent/ConcurrentDictionary.cs
index c1a6f7564c..8b9014a103 100644
--- a/src/mscorlib/src/System/Collections/Concurrent/ConcurrentDictionary.cs
+++ b/src/mscorlib/src/System/Collections/Concurrent/ConcurrentDictionary.cs
@@ -24,7 +24,6 @@ using System.Runtime.Serialization;
using System.Text;
using System.Threading;
using System.Security;
-using System.Security.Permissions;
namespace System.Collections.Concurrent
{
@@ -37,10 +36,9 @@ namespace System.Collections.Concurrent
/// All public and protected members of <see cref="ConcurrentDictionary{TKey,TValue}"/> are thread-safe and may be used
/// concurrently from multiple threads.
/// </remarks>
- [ComVisible(false)]
[DebuggerTypeProxy(typeof(Mscorlib_DictionaryDebugView<,>))]
[DebuggerDisplay("Count = {Count}")]
- public class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IDictionary, IReadOnlyDictionary<TKey, TValue>
+ internal class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IDictionary, IReadOnlyDictionary<TKey, TValue>
{
/// <summary>
/// Tables that hold the internal state of the ConcurrentDictionary
@@ -139,149 +137,6 @@ namespace System.Collections.Concurrent
/// </summary>
public ConcurrentDictionary() : this(DefaultConcurrencyLevel, DEFAULT_CAPACITY, true, EqualityComparer<TKey>.Default) { }
- /// <summary>
- /// Initializes a new instance of the <see
- /// cref="ConcurrentDictionary{TKey,TValue}"/>
- /// class that is empty, has the specified concurrency level and capacity, and uses the default
- /// comparer for the key type.
- /// </summary>
- /// <param name="concurrencyLevel">The estimated number of threads that will update the
- /// <see cref="ConcurrentDictionary{TKey,TValue}"/> concurrently.</param>
- /// <param name="capacity">The initial number of elements that the <see
- /// cref="ConcurrentDictionary{TKey,TValue}"/>
- /// can contain.</param>
- /// <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="concurrencyLevel"/> is
- /// less than 1.</exception>
- /// <exception cref="T:System.ArgumentOutOfRangeException"> <paramref name="capacity"/> is less than
- /// 0.</exception>
- public ConcurrentDictionary(int concurrencyLevel, int capacity) : this(concurrencyLevel, capacity, false, EqualityComparer<TKey>.Default) { }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ConcurrentDictionary{TKey,TValue}"/>
- /// class that contains elements copied from the specified <see
- /// cref="T:System.Collections.IEnumerable{KeyValuePair{TKey,TValue}}"/>, has the default concurrency
- /// level, has the default initial capacity, and uses the default comparer for the key type.
- /// </summary>
- /// <param name="collection">The <see
- /// cref="T:System.Collections.IEnumerable{KeyValuePair{TKey,TValue}}"/> whose elements are copied to
- /// the new
- /// <see cref="ConcurrentDictionary{TKey,TValue}"/>.</param>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="T:System.ArgumentException"><paramref name="collection"/> contains one or more
- /// duplicate keys.</exception>
- public ConcurrentDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection) : this(collection, EqualityComparer<TKey>.Default) { }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ConcurrentDictionary{TKey,TValue}"/>
- /// class that is empty, has the specified concurrency level and capacity, and uses the specified
- /// <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>.
- /// </summary>
- /// <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>
- /// implementation to use when comparing keys.</param>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="comparer"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- public ConcurrentDictionary(IEqualityComparer<TKey> comparer) : this(DefaultConcurrencyLevel, DEFAULT_CAPACITY, true, comparer) { }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ConcurrentDictionary{TKey,TValue}"/>
- /// class that contains elements copied from the specified <see
- /// cref="T:System.Collections.IEnumerable"/>, has the default concurrency level, has the default
- /// initial capacity, and uses the specified
- /// <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>.
- /// </summary>
- /// <param name="collection">The <see
- /// cref="T:System.Collections.IEnumerable{KeyValuePair{TKey,TValue}}"/> whose elements are copied to
- /// the new
- /// <see cref="ConcurrentDictionary{TKey,TValue}"/>.</param>
- /// <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>
- /// implementation to use when comparing keys.</param>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is a null reference
- /// (Nothing in Visual Basic). -or-
- /// <paramref name="comparer"/> is a null reference (Nothing in Visual Basic).
- /// </exception>
- public ConcurrentDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection, IEqualityComparer<TKey> comparer)
- : this(comparer)
- {
- if (collection == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
-
- InitializeFromCollection(collection);
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ConcurrentDictionary{TKey,TValue}"/>
- /// class that contains elements copied from the specified <see cref="T:System.Collections.IEnumerable"/>,
- /// has the specified concurrency level, has the specified initial capacity, and uses the specified
- /// <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>.
- /// </summary>
- /// <param name="concurrencyLevel">The estimated number of threads that will update the
- /// <see cref="ConcurrentDictionary{TKey,TValue}"/> concurrently.</param>
- /// <param name="collection">The <see cref="T:System.Collections.IEnumerable{KeyValuePair{TKey,TValue}}"/> whose elements are copied to the new
- /// <see cref="ConcurrentDictionary{TKey,TValue}"/>.</param>
- /// <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/> implementation to use
- /// when comparing keys.</param>
- /// <exception cref="T:System.ArgumentNullException">
- /// <paramref name="collection"/> is a null reference (Nothing in Visual Basic).
- /// -or-
- /// <paramref name="comparer"/> is a null reference (Nothing in Visual Basic).
- /// </exception>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// <paramref name="concurrencyLevel"/> is less than 1.
- /// </exception>
- /// <exception cref="T:System.ArgumentException"><paramref name="collection"/> contains one or more duplicate keys.</exception>
- public ConcurrentDictionary(
- int concurrencyLevel, IEnumerable<KeyValuePair<TKey, TValue>> collection, IEqualityComparer<TKey> comparer)
- : this(concurrencyLevel, DEFAULT_CAPACITY, false, comparer)
- {
- if (collection == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
- if (comparer == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.comparer);
-
- InitializeFromCollection(collection);
- }
-
- private void InitializeFromCollection(IEnumerable<KeyValuePair<TKey, TValue>> collection)
- {
- TValue dummy;
- foreach (KeyValuePair<TKey, TValue> pair in collection)
- {
- if (pair.Key == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
-
- if (!TryAddInternal(pair.Key, pair.Value, false, false, out dummy))
- {
- ThrowHelper.ThrowArgumentException(ExceptionResource.ConcurrentDictionary_SourceContainsDuplicateKeys);
- }
- }
-
- if (m_budget == 0)
- {
- m_budget = m_tables.m_buckets.Length / m_tables.m_locks.Length;
- }
-
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ConcurrentDictionary{TKey,TValue}"/>
- /// class that is empty, has the specified concurrency level, has the specified initial capacity, and
- /// uses the specified <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>.
- /// </summary>
- /// <param name="concurrencyLevel">The estimated number of threads that will update the
- /// <see cref="ConcurrentDictionary{TKey,TValue}"/> concurrently.</param>
- /// <param name="capacity">The initial number of elements that the <see
- /// cref="ConcurrentDictionary{TKey,TValue}"/>
- /// can contain.</param>
- /// <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>
- /// implementation to use when comparing keys.</param>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// <paramref name="concurrencyLevel"/> is less than 1. -or-
- /// <paramref name="capacity"/> is less than 0.
- /// </exception>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="comparer"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- public ConcurrentDictionary(int concurrencyLevel, int capacity, IEqualityComparer<TKey> comparer)
- : this(concurrencyLevel, capacity, false, comparer)
- {
- }
-
internal ConcurrentDictionary(int concurrencyLevel, int capacity, bool growLockArray, IEqualityComparer<TKey> comparer)
{
if (concurrencyLevel < 1)
@@ -488,91 +343,6 @@ namespace System.Collections.Concurrent
}
/// <summary>
- /// Compares the existing value for the specified key with a specified value, and if they're equal,
- /// updates the key with a third value.
- /// </summary>
- /// <param name="key">The key whose value is compared with <paramref name="comparisonValue"/> and
- /// possibly replaced.</param>
- /// <param name="newValue">The value that replaces the value of the element with <paramref
- /// name="key"/> if the comparison results in equality.</param>
- /// <param name="comparisonValue">The value that is compared to the value of the element with
- /// <paramref name="key"/>.</param>
- /// <returns>true if the value with <paramref name="key"/> was equal to <paramref
- /// name="comparisonValue"/> and replaced with <paramref name="newValue"/>; otherwise,
- /// false.</returns>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null
- /// reference.</exception>
- [SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "Reviewed for thread safety")]
- public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
- {
- if (key == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
-
- IEqualityComparer<TValue> valueComparer = EqualityComparer<TValue>.Default;
-
- while (true)
- {
- int bucketNo;
- int lockNo;
- int hashcode;
-
- Tables tables = m_tables;
- IEqualityComparer<TKey> comparer = tables.m_comparer;
-
- hashcode = comparer.GetHashCode(key);
- GetBucketAndLockNo(hashcode, out bucketNo, out lockNo, tables.m_buckets.Length, tables.m_locks.Length);
-
- lock (tables.m_locks[lockNo])
- {
- // If the table just got resized, we may not be holding the right lock, and must retry.
- // This should be a rare occurence.
- if (tables != m_tables)
- {
- continue;
- }
-
- // Try to find this key in the bucket
- Node prev = null;
- for (Node node = tables.m_buckets[bucketNo]; node != null; node = node.m_next)
- {
- Assert((prev == null && node == tables.m_buckets[bucketNo]) || prev.m_next == node);
- if (comparer.Equals(node.m_key, key))
- {
- if (valueComparer.Equals(node.m_value, comparisonValue))
- {
- if (s_isValueWriteAtomic)
- {
- node.m_value = newValue;
- }
- else
- {
- Node newNode = new Node(node.m_key, newValue, hashcode, node.m_next);
-
- if (prev == null)
- {
- tables.m_buckets[bucketNo] = newNode;
- }
- else
- {
- prev.m_next = newNode;
- }
- }
-
- return true;
- }
-
- return false;
- }
-
- prev = node;
- }
-
- //didn't find the key
- return false;
- }
- }
- }
-
- /// <summary>
/// Removes all keys and values from the <see cref="ConcurrentDictionary{TKey,TValue}"/>.
/// </summary>
public void Clear()
@@ -947,149 +717,6 @@ namespace System.Collections.Concurrent
}
}
- /// <summary>
- /// Adds a key/value pair to the <see cref="ConcurrentDictionary{TKey,TValue}"/>
- /// if the key does not already exist.
- /// </summary>
- /// <param name="key">The key of the element to add.</param>
- /// <param name="valueFactory">The function used to generate a value for the key</param>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="valueFactory"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="T:System.OverflowException">The dictionary contains too many
- /// elements.</exception>
- /// <returns>The value for the key. This will be either the existing value for the key if the
- /// key is already in the dictionary, or the new value for the key as returned by valueFactory
- /// if the key was not in the dictionary.</returns>
- public TValue GetOrAdd(TKey key, Func<TKey, TValue> valueFactory)
- {
- if (key == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
- if (valueFactory == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.valueFactory);
-
- TValue resultingValue;
- if (TryGetValue(key, out resultingValue))
- {
- return resultingValue;
- }
- TryAddInternal(key, valueFactory(key), false, true, out resultingValue);
- return resultingValue;
- }
-
- /// <summary>
- /// Adds a key/value pair to the <see cref="ConcurrentDictionary{TKey,TValue}"/>
- /// if the key does not already exist.
- /// </summary>
- /// <param name="key">The key of the element to add.</param>
- /// <param name="value">the value to be added, if the key does not already exist</param>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="T:System.OverflowException">The dictionary contains too many
- /// elements.</exception>
- /// <returns>The value for the key. This will be either the existing value for the key if the
- /// key is already in the dictionary, or the new value if the key was not in the dictionary.</returns>
- public TValue GetOrAdd(TKey key, TValue value)
- {
- if (key == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
-
- TValue resultingValue;
- TryAddInternal(key, value, false, true, out resultingValue);
- return resultingValue;
- }
-
- /// <summary>
- /// Adds a key/value pair to the <see cref="ConcurrentDictionary{TKey,TValue}"/> if the key does not already
- /// exist, or updates a key/value pair in the <see cref="ConcurrentDictionary{TKey,TValue}"/> if the key
- /// already exists.
- /// </summary>
- /// <param name="key">The key to be added or whose value should be updated</param>
- /// <param name="addValueFactory">The function used to generate a value for an absent key</param>
- /// <param name="updateValueFactory">The function used to generate a new value for an existing key
- /// based on the key's existing value</param>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="addValueFactory"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="updateValueFactory"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="T:System.OverflowException">The dictionary contains too many
- /// elements.</exception>
- /// <returns>The new value for the key. This will be either be the result of addValueFactory (if the key was
- /// absent) or the result of updateValueFactory (if the key was present).</returns>
- public TValue AddOrUpdate(TKey key, Func<TKey, TValue> addValueFactory, Func<TKey, TValue, TValue> updateValueFactory)
- {
- if (key == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
- if (addValueFactory == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.addValueFactory);
- if (updateValueFactory == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.updateValueFactory);
-
- TValue newValue, resultingValue;
- while (true)
- {
- TValue oldValue;
- if (TryGetValue(key, out oldValue))
- //key exists, try to update
- {
- newValue = updateValueFactory(key, oldValue);
- if (TryUpdate(key, newValue, oldValue))
- {
- return newValue;
- }
- }
- else //try add
- {
- newValue = addValueFactory(key);
- if (TryAddInternal(key, newValue, false, true, out resultingValue))
- {
- return resultingValue;
- }
- }
- }
- }
-
- /// <summary>
- /// Adds a key/value pair to the <see cref="ConcurrentDictionary{TKey,TValue}"/> if the key does not already
- /// exist, or updates a key/value pair in the <see cref="ConcurrentDictionary{TKey,TValue}"/> if the key
- /// already exists.
- /// </summary>
- /// <param name="key">The key to be added or whose value should be updated</param>
- /// <param name="addValue">The value to be added for an absent key</param>
- /// <param name="updateValueFactory">The function used to generate a new value for an existing key based on
- /// the key's existing value</param>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="T:System.ArgumentNullException"><paramref name="updateValueFactory"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="T:System.OverflowException">The dictionary contains too many
- /// elements.</exception>
- /// <returns>The new value for the key. This will be either be the result of addValueFactory (if the key was
- /// absent) or the result of updateValueFactory (if the key was present).</returns>
- public TValue AddOrUpdate(TKey key, TValue addValue, Func<TKey, TValue, TValue> updateValueFactory)
- {
- if (key == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
- if (updateValueFactory == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.updateValueFactory);
- TValue newValue, resultingValue;
- while (true)
- {
- TValue oldValue;
- if (TryGetValue(key, out oldValue))
- //key exists, try to update
- {
- newValue = updateValueFactory(key, oldValue);
- if (TryUpdate(key, newValue, oldValue))
- {
- return newValue;
- }
- }
- else //try add
- {
- if (TryAddInternal(key, addValue, false, true, out resultingValue))
- {
- return resultingValue;
- }
- }
- }
- }
-
/// <summary>
diff --git a/src/mscorlib/src/System/Collections/Concurrent/ConcurrentQueue.cs b/src/mscorlib/src/System/Collections/Concurrent/ConcurrentQueue.cs
index 7aa5971690..90ada007dd 100644
--- a/src/mscorlib/src/System/Collections/Concurrent/ConcurrentQueue.cs
+++ b/src/mscorlib/src/System/Collections/Concurrent/ConcurrentQueue.cs
@@ -1,67 +1,100 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-#pragma warning disable 0420
-
-// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
-//
-//
-//
-// A lock-free, concurrent queue primitive, and its associated debugger view type.
-//
-// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-using System;
-using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
-using System.Security;
-using System.Security.Permissions;
using System.Threading;
namespace System.Collections.Concurrent
{
-
/// <summary>
/// Represents a thread-safe first-in, first-out collection of objects.
/// </summary>
/// <typeparam name="T">Specifies the type of elements in the queue.</typeparam>
/// <remarks>
- /// All public and protected members of <see cref="ConcurrentQueue{T}"/> are thread-safe and may be used
+ /// All public and protected members of <see cref="ConcurrentQueue{T}"/> are thread-safe and may be used
/// concurrently from multiple threads.
/// </remarks>
- [ComVisible(false)]
[DebuggerDisplay("Count = {Count}")]
[DebuggerTypeProxy(typeof(SystemCollectionsConcurrent_ProducerConsumerCollectionDebugView<>))]
[Serializable]
- public class ConcurrentQueue<T> : IProducerConsumerCollection<T>, IReadOnlyCollection<T>
+ internal class ConcurrentQueue<T> : IProducerConsumerCollection<T>, IReadOnlyCollection<T>
{
- //fields of ConcurrentQueue
- [NonSerialized]
- private volatile Segment m_head;
+ // This implementation provides an unbounded, multi-producer multi-consumer queue
+ // that supports the standard Enqueue/TryDequeue operations, as well as support for
+ // snapshot enumeration (GetEnumerator, ToArray, CopyTo), peeking, and Count/IsEmpty.
+ // It is composed of a linked list of bounded ring buffers, each of which has a head
+ // and a tail index, isolated from each other to minimize false sharing. As long as
+ // the number of elements in the queue remains less than the size of the current
+ // buffer (Segment), no additional allocations are required for enqueued items. When
+ // the number of items exceeds the size of the current segment, the current segment is
+ // "frozen" to prevent further enqueues, and a new segment is linked from it and set
+ // as the new tail segment for subsequent enqueues. As old segments are consumed by
+ // dequeues, the head reference is updated to point to the segment that dequeuers should
+ // try next. To support snapshot enumeration, segments also support the notion of
+ // preserving for observation, whereby they avoid overwriting state as part of dequeues.
+ // Any operation that requires a snapshot results in all current segments being
+ // both frozen for enqueues and preserved for observation: any new enqueues will go
+ // to new segments, and dequeuers will consume from the existing segments but without
+ // overwriting the existing data.
+
+ /// <summary>Initial length of the segments used in the queue.</summary>
+ private const int InitialSegmentLength = 32;
+ /// <summary>
+ /// Maximum length of the segments used in the queue. This is a somewhat arbitrary limit:
+ /// larger means that as long as we don't exceed the size, we avoid allocating more segments,
+ /// but if we do exceed it, then the segment becomes garbage.
+ /// </summary>
+ private const int MaxSegmentLength = 1024 * 1024;
+ /// <summary>
+ /// Lock used to protect cross-segment operations, including any updates to <see cref="_tail"/> or <see cref="_head"/>
+ /// and any operations that need to get a consistent view of them.
+ /// </summary>
[NonSerialized]
- private volatile Segment m_tail;
-
- private T[] m_serializationArray; // Used for custom serialization.
-
- private const int SEGMENT_SIZE = 32;
-
- //number of snapshot takers, GetEnumerator(), ToList() and ToArray() operations take snapshot.
+ private object _crossSegmentLock;
+ /// <summary>The current tail segment.</summary>
[NonSerialized]
- internal volatile int m_numSnapshotTakers = 0;
+ private volatile Segment _tail;
+ /// <summary>The current head segment.</summary>
+ [NonSerialized]
+ private volatile Segment _head;
+ /// <summary>Field used to temporarily store the contents of the queue for serialization.</summary>
+ private T[] _serializationArray;
/// <summary>
/// Initializes a new instance of the <see cref="ConcurrentQueue{T}"/> class.
/// </summary>
public ConcurrentQueue()
{
- m_head = m_tail = new Segment(0, this);
+ _crossSegmentLock = new object();
+ _tail = _head = new Segment(InitialSegmentLength);
+ }
+
+ /// <summary>Set the data array to be serialized.</summary>
+ [OnSerializing]
+ private void OnSerializing(StreamingContext context)
+ {
+ _serializationArray = ToArray();
+ }
+
+ /// <summary>Clear the data array that was serialized.</summary>
+ [OnSerialized]
+ private void OnSerialized(StreamingContext context)
+ {
+ _serializationArray = null;
+ }
+
+ /// <summary>Construct the queue from the deserialized <see cref="_serializationArray"/>.</summary>
+ [OnDeserialized]
+ private void OnDeserialized(StreamingContext context)
+ {
+ Debug.Assert(_serializationArray != null);
+ InitializeFromCollection(_serializationArray);
+ _serializationArray = null;
}
/// <summary>
@@ -70,34 +103,39 @@ namespace System.Collections.Concurrent
/// <param name="collection">A collection from which to copy elements.</param>
private void InitializeFromCollection(IEnumerable<T> collection)
{
- Segment localTail = new Segment(0, this);//use this local variable to avoid the extra volatile read/write. this is safe because it is only called from ctor
- m_head = localTail;
-
- int index = 0;
- foreach (T element in collection)
+ _crossSegmentLock = new object();
+
+ // Determine the initial segment size. We'll use the default,
+ // unless the collection is known to be larger than than, in which
+ // case we round its length up to a power of 2, as all segments must
+ // be a power of 2 in length.
+ int length = InitialSegmentLength;
+ var c = collection as ICollection<T>;
+ if (c != null)
{
- Debug.Assert(index >= 0 && index < SEGMENT_SIZE);
- localTail.UnsafeAdd(element);
- index++;
-
- if (index >= SEGMENT_SIZE)
+ int count = c.Count;
+ if (count > length)
{
- localTail = localTail.UnsafeGrow();
- index = 0;
+ length = RoundUpToPowerOf2(count);
}
}
- m_tail = localTail;
+ // Initialize the segment and add all of the data to it.
+ _tail = _head = new Segment(length);
+ foreach (T item in collection)
+ {
+ Enqueue(item);
+ }
}
/// <summary>
- /// Initializes a new instance of the <see cref="ConcurrentQueue{T}"/>
- /// class that contains elements copied from the specified collection
+ /// Initializes a new instance of the <see cref="ConcurrentQueue{T}"/> class that contains elements copied
+ /// from the specified collection.
/// </summary>
- /// <param name="collection">The collection whose elements are copied to the new <see
- /// cref="ConcurrentQueue{T}"/>.</param>
- /// <exception cref="T:System.ArgumentNullException">The <paramref name="collection"/> argument is
- /// null.</exception>
+ /// <param name="collection">
+ /// The collection whose elements are copied to the new <see cref="ConcurrentQueue{T}"/>.
+ /// </param>
+ /// <exception cref="System.ArgumentNullException">The <paramref name="collection"/> argument is null.</exception>
public ConcurrentQueue(IEnumerable<T> collection)
{
if (collection == null)
@@ -109,37 +147,15 @@ namespace System.Collections.Concurrent
}
/// <summary>
- /// Get the data array to be serialized
- /// </summary>
- [OnSerializing]
- private void OnSerializing(StreamingContext context)
- {
- // save the data into the serialization array to be saved
- m_serializationArray = ToArray();
- }
-
- /// <summary>
- /// Construct the queue from a previously seiralized one
- /// </summary>
- [OnDeserialized]
- private void OnDeserialized(StreamingContext context)
- {
- Debug.Assert(m_serializationArray != null);
- InitializeFromCollection(m_serializationArray);
- m_serializationArray = null;
- }
-
- /// <summary>
- /// Copies the elements of the <see cref="T:System.Collections.ICollection"/> to an <see
- /// cref="T:System.Array"/>, starting at a particular
- /// <see cref="T:System.Array"/> index.
+ /// Copies the elements of the <see cref="ICollection"/> to an <see
+ /// cref="Array"/>, starting at a particular <see cref="Array"/> index.
/// </summary>
- /// <param name="array">The one-dimensional <see cref="T:System.Array">Array</see> that is the
- /// destination of the elements copied from the
- /// <see cref="T:System.Collections.Concurrent.ConcurrentBag"/>. The <see
- /// cref="T:System.Array">Array</see> must have zero-based indexing.</param>
- /// <param name="index">The zero-based index in <paramref name="array"/> at which copying
- /// begins.</param>
+ /// <param name="array">
+ /// The one-dimensional <see cref="Array">Array</see> that is the destination of the
+ /// elements copied from the <see cref="ConcurrentQueue{T}"/>. <paramref name="array"/> must have
+ /// zero-based indexing.
+ /// </param>
+ /// <param name="index">The zero-based index in <paramref name="array"/> at which copying begins.</param>
/// <exception cref="ArgumentNullException"><paramref name="array"/> is a null reference (Nothing in
/// Visual Basic).</exception>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="index"/> is less than
@@ -148,100 +164,52 @@ namespace System.Collections.Concurrent
/// <paramref name="array"/> is multidimensional. -or-
/// <paramref name="array"/> does not have zero-based indexing. -or-
/// <paramref name="index"/> is equal to or greater than the length of the <paramref name="array"/>
- /// -or- The number of elements in the source <see cref="T:System.Collections.ICollection"/> is
+ /// -or- The number of elements in the source <see cref="ICollection"/> is
/// greater than the available space from <paramref name="index"/> to the end of the destination
/// <paramref name="array"/>. -or- The type of the source <see
- /// cref="T:System.Collections.ICollection"/> cannot be cast automatically to the type of the
+ /// cref="ICollection"/> cannot be cast automatically to the type of the
/// destination <paramref name="array"/>.
/// </exception>
void ICollection.CopyTo(Array array, int index)
{
+ // Special-case when the Array is actually a T[], taking a faster path
+ T[] szArray = array as T[];
+ if (szArray != null)
+ {
+ CopyTo(szArray, index);
+ return;
+ }
+
// Validate arguments.
if (array == null)
{
throw new ArgumentNullException(nameof(array));
}
- // We must be careful not to corrupt the array, so we will first accumulate an
- // internal list of elements that we will then copy to the array. This requires
- // some extra allocation, but is necessary since we don't know up front whether
- // the array is sufficiently large to hold the stack's contents.
- ((ICollection)ToList()).CopyTo(array, index);
+ // Otherwise, fall back to the slower path that first copies the contents
+ // to an array, and then uses that array's non-generic CopyTo to do the copy.
+ ToArray().CopyTo(array, index);
}
/// <summary>
- /// Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"/> is
+ /// Gets a value indicating whether access to the <see cref="ICollection"/> is
/// synchronized with the SyncRoot.
/// </summary>
- /// <value>true if access to the <see cref="T:System.Collections.ICollection"/> is synchronized
+ /// <value>true if access to the <see cref="ICollection"/> is synchronized
/// with the SyncRoot; otherwise, false. For <see cref="ConcurrentQueue{T}"/>, this property always
/// returns false.</value>
- bool ICollection.IsSynchronized
- {
- // Gets a value indicating whether access to this collection is synchronized. Always returns
- // false. The reason is subtle. While access is in face thread safe, it's not the case that
- // locking on the SyncRoot would have prevented concurrent pushes and pops, as this property
- // would typically indicate; that's because we internally use CAS operations vs. true locks.
- get { return false; }
- }
-
+ bool ICollection.IsSynchronized => false; // always false, as true implies synchronization via SyncRoot
/// <summary>
/// Gets an object that can be used to synchronize access to the <see
- /// cref="T:System.Collections.ICollection"/>. This property is not supported.
- /// </summary>
- /// <exception cref="T:System.NotSupportedException">The SyncRoot property is not supported.</exception>
- object ICollection.SyncRoot
- {
- get
- {
- throw new NotSupportedException(Environment.GetResourceString("ConcurrentCollection_SyncRoot_NotSupported"));
- }
- }
-
- /// <summary>
- /// Returns an enumerator that iterates through a collection.
- /// </summary>
- /// <returns>An <see cref="T:System.Collections.IEnumerator"/> that can be used to iterate through the collection.</returns>
- IEnumerator IEnumerable.GetEnumerator()
- {
- return ((IEnumerable<T>)this).GetEnumerator();
- }
-
- /// <summary>
- /// Attempts to add an object to the <see
- /// cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>.
+ /// cref="ICollection"/>. This property is not supported.
/// </summary>
- /// <param name="item">The object to add to the <see
- /// cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>. The value can be a null
- /// reference (Nothing in Visual Basic) for reference types.
- /// </param>
- /// <returns>true if the object was added successfully; otherwise, false.</returns>
- /// <remarks>For <see cref="ConcurrentQueue{T}"/>, this operation will always add the object to the
- /// end of the <see cref="ConcurrentQueue{T}"/>
- /// and return true.</remarks>
- bool IProducerConsumerCollection<T>.TryAdd(T item)
- {
- Enqueue(item);
- return true;
- }
+ /// <exception cref="NotSupportedException">The SyncRoot property is not supported.</exception>
+ object ICollection.SyncRoot { get { throw new NotSupportedException(Environment.GetResourceString("ConcurrentCollection_SyncRoot_NotSupported")); } }
- /// <summary>
- /// Attempts to remove and return an object from the <see
- /// cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>.
- /// </summary>
- /// <param name="item">
- /// When this method returns, if the operation was successful, <paramref name="item"/> contains the
- /// object removed. If no object was available to be removed, the value is unspecified.
- /// </param>
- /// <returns>true if an element was removed and returned succesfully; otherwise, false.</returns>
- /// <remarks>For <see cref="ConcurrentQueue{T}"/>, this operation will attempt to remove the object
- /// from the beginning of the <see cref="ConcurrentQueue{T}"/>.
- /// </remarks>
- bool IProducerConsumerCollection<T>.TryTake(out T item)
- {
- return TryDequeue(out item);
- }
+ /// <summary>Returns an enumerator that iterates through a collection.</summary>
+ /// <returns>An <see cref="IEnumerator"/> that can be used to iterate through the collection.</returns>
+ IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable<T>)this).GetEnumerator();
/// <summary>
/// Gets a value that indicates whether the <see cref="ConcurrentQueue{T}"/> is empty.
@@ -258,126 +226,43 @@ namespace System.Collections.Concurrent
{
get
{
- Segment head = m_head;
- if (!head.IsEmpty)
- //fast route 1:
- //if current head is not empty, then queue is not empty
- return false;
- else if (head.Next == null)
- //fast route 2:
- //if current head is empty and it's the last segment
- //then queue is empty
- return true;
- else
- //slow route:
- //current head is empty and it is NOT the last segment,
- //it means another thread is growing new segment
- {
- SpinWait spin = new SpinWait();
- while (head.IsEmpty)
- {
- if (head.Next == null)
- return true;
-
- spin.SpinOnce();
- head = m_head;
- }
- return false;
- }
+ // IsEmpty == !TryPeek. We use a "resultUsed:false" peek in order to avoid marking
+ // segments as preserved for observation, making IsEmpty a cheaper way than either
+ // TryPeek(out T) or Count == 0 to check whether any elements are in the queue.
+ T ignoredResult;
+ return !TryPeek(out ignoredResult, resultUsed: false);
}
}
- /// <summary>
- /// Copies the elements stored in the <see cref="ConcurrentQueue{T}"/> to a new array.
- /// </summary>
- /// <returns>A new array containing a snapshot of elements copied from the <see
- /// cref="ConcurrentQueue{T}"/>.</returns>
+ /// <summary>Copies the elements stored in the <see cref="ConcurrentQueue{T}"/> to a new array.</summary>
+ /// <returns>A new array containing a snapshot of elements copied from the <see cref="ConcurrentQueue{T}"/>.</returns>
public T[] ToArray()
{
- return ToList().ToArray();
- }
+ // Snap the current contents for enumeration.
+ Segment head, tail;
+ int headHead, tailTail;
+ SnapForObservation(out head, out headHead, out tail, out tailTail);
- /// <summary>
- /// Copies the <see cref="ConcurrentQueue{T}"/> elements to a new <see
- /// cref="T:System.Collections.Generic.List{T}"/>.
- /// </summary>
- /// <returns>A new <see cref="T:System.Collections.Generic.List{T}"/> containing a snapshot of
- /// elements copied from the <see cref="ConcurrentQueue{T}"/>.</returns>
- private List<T> ToList()
- {
- // Increments the number of active snapshot takers. This increment must happen before the snapshot is
- // taken. At the same time, Decrement must happen after list copying is over. Only in this way, can it
- // eliminate race condition when Segment.TryRemove() checks whether m_numSnapshotTakers == 0.
- Interlocked.Increment(ref m_numSnapshotTakers);
+ // Count the number of items in that snapped set, and use it to allocate an
+ // array of the right size.
+ long count = GetCount(head, headHead, tail, tailTail);
+ T[] arr = new T[count];
- List<T> list = new List<T>();
- try
+ // Now enumerate the contents, copying each element into the array.
+ using (IEnumerator<T> e = Enumerate(head, headHead, tail, tailTail))
{
- //store head and tail positions in buffer,
- Segment head, tail;
- int headLow, tailHigh;
- GetHeadTailPositions(out head, out tail, out headLow, out tailHigh);
-
- if (head == tail)
- {
- head.AddToList(list, headLow, tailHigh);
- }
- else
+ int i = 0;
+ while (e.MoveNext())
{
- head.AddToList(list, headLow, SEGMENT_SIZE - 1);
- Segment curr = head.Next;
- while (curr != tail)
- {
- curr.AddToList(list, 0, SEGMENT_SIZE - 1);
- curr = curr.Next;
- }
- //Add tail segment
- tail.AddToList(list, 0, tailHigh);
+ arr[i++] = e.Current;
}
+ Debug.Assert(count == i);
}
- finally
- {
- // This Decrement must happen after copying is over.
- Interlocked.Decrement(ref m_numSnapshotTakers);
- }
- return list;
- }
- /// <summary>
- /// Store the position of the current head and tail positions.
- /// </summary>
- /// <param name="head">return the head segment</param>
- /// <param name="tail">return the tail segment</param>
- /// <param name="headLow">return the head offset, value range [0, SEGMENT_SIZE]</param>
- /// <param name="tailHigh">return the tail offset, value range [-1, SEGMENT_SIZE-1]</param>
- private void GetHeadTailPositions(out Segment head, out Segment tail,
- out int headLow, out int tailHigh)
- {
- head = m_head;
- tail = m_tail;
- headLow = head.Low;
- tailHigh = tail.High;
- SpinWait spin = new SpinWait();
-
- //we loop until the observed values are stable and sensible.
- //This ensures that any update order by other methods can be tolerated.
- while (
- //if head and tail changed, retry
- head != m_head || tail != m_tail
- //if low and high pointers, retry
- || headLow != head.Low || tailHigh != tail.High
- //if head jumps ahead of tail because of concurrent grow and dequeue, retry
- || head.m_index > tail.m_index)
- {
- spin.SpinOnce();
- head = m_head;
- tail = m_tail;
- headLow = head.Low;
- tailHigh = tail.High;
- }
+ // And return it.
+ return arr;
}
-
/// <summary>
/// Gets the number of elements contained in the <see cref="ConcurrentQueue{T}"/>.
/// </summary>
@@ -391,38 +276,140 @@ namespace System.Collections.Concurrent
{
get
{
- //store head and tail positions in buffer,
Segment head, tail;
- int headLow, tailHigh;
- GetHeadTailPositions(out head, out tail, out headLow, out tailHigh);
-
- if (head == tail)
+ int headHead, headTail, tailHead, tailTail;
+ var spinner = new SpinWait();
+ while (true)
{
- return tailHigh - headLow + 1;
+ // Capture the head and tail, as well as the head's head and tail.
+ head = _head;
+ tail = _tail;
+ headHead = Volatile.Read(ref head._headAndTail.Head);
+ headTail = Volatile.Read(ref head._headAndTail.Tail);
+
+ if (head == tail)
+ {
+ // There was a single segment in the queue. If the captured
+ // values still (or again) represent reality, return the segment's
+ // count. A single segment should be the most common case once the
+ // queue's size has stabilized after segments have grown to
+ // the point where growing is no longer needed.
+ if (head == _head &&
+ head == _tail &&
+ headHead == Volatile.Read(ref head._headAndTail.Head) &&
+ headTail == Volatile.Read(ref head._headAndTail.Tail))
+ {
+ return GetCount(head, headHead, headTail);
+ }
+ }
+ else if (head._nextSegment == tail)
+ {
+ // There were two segments in the queue. Get the positions
+ // from the tail, and if the captured values still (or again) match
+ // reality, return the sum of the counts from both segments.
+ tailHead = Volatile.Read(ref tail._headAndTail.Head);
+ tailTail = Volatile.Read(ref tail._headAndTail.Tail);
+ if (head == _head &&
+ tail == _tail &&
+ headHead == Volatile.Read(ref head._headAndTail.Head) &&
+ headTail == Volatile.Read(ref head._headAndTail.Tail) &&
+ tailHead == Volatile.Read(ref tail._headAndTail.Head) &&
+ tailTail == Volatile.Read(ref tail._headAndTail.Tail))
+ {
+ // We got stable values, so we can just compute the sizes based on those
+ // values and return the sum of the counts of the segments.
+ return GetCount(head, headHead, headTail) + GetCount(tail, tailHead, tailTail);
+ }
+ }
+ else
+ {
+ // There were more than two segments. Take the slower path, where we freeze the
+ // queue and then count the now stable segments.
+ SnapForObservation(out head, out headHead, out tail, out tailTail);
+ return unchecked((int)GetCount(head, headHead, tail, tailTail));
+ }
+
+ // We raced with enqueues/dequeues and captured an inconsistent picture of the queue.
+ // Spin and try again.
+ spinner.SpinOnce();
}
+ }
+ }
- //head segment
- int count = SEGMENT_SIZE - headLow;
+ /// <summary>Computes the number of items in a segment based on a fixed head and tail in that segment.</summary>
+ private static int GetCount(Segment s, int head, int tail)
+ {
+ if (head != tail && head != tail - s.FreezeOffset)
+ {
+ head &= s._slotsMask;
+ tail &= s._slotsMask;
+ return head < tail ? tail - head : s._slots.Length - head + tail;
+ }
+ return 0;
+ }
- //middle segment(s), if any, are full.
- //We don't deal with overflow to be consistent with the behavior of generic types in CLR.
- count += SEGMENT_SIZE * ((int)(tail.m_index - head.m_index - 1));
+ /// <summary>Gets the number of items in snapped region.</summary>
+ private static long GetCount(Segment head, int headHead, Segment tail, int tailTail)
+ {
+ // All of the segments should have been both frozen for enqueues and preserved for observation.
+ // Validate that here for head and tail; we'll validate it for intermediate segments later.
+ Debug.Assert(head._preservedForObservation);
+ Debug.Assert(head._frozenForEnqueues);
+ Debug.Assert(tail._preservedForObservation);
+ Debug.Assert(tail._frozenForEnqueues);
+
+ long count = 0;
+
+ // Head segment. We've already marked it as frozen for enqueues, so its tail position is fixed,
+ // and we've already marked it as preserved for observation (before we grabbed the head), so we
+ // can safely enumerate from its head to its tail and access its elements.
+ int headTail = (head == tail ? tailTail : Volatile.Read(ref head._headAndTail.Tail)) - head.FreezeOffset;
+ if (headHead < headTail)
+ {
+ // Mask the head and tail for the head segment
+ headHead &= head._slotsMask;
+ headTail &= head._slotsMask;
+
+ // Increase the count by either the one or two regions, based on whether tail
+ // has wrapped to be less than head.
+ count += headHead < headTail ?
+ headTail - headHead :
+ head._slots.Length - headHead + headTail;
+ }
- //tail segment
- count += tailHigh + 1;
+ // We've enumerated the head. If the tail is different from the head, we need to
+ // enumerate the remaining segments.
+ if (head != tail)
+ {
+ // Count the contents of each segment between head and tail, not including head and tail.
+ // Since there were segments before these, for our purposes we consider them to start at
+ // the 0th element, and since there is at least one segment after each, each was frozen
+ // by the time we snapped it, so we can iterate until each's frozen tail.
+ for (Segment s = head._nextSegment; s != tail; s = s._nextSegment)
+ {
+ Debug.Assert(s._preservedForObservation);
+ Debug.Assert(s._frozenForEnqueues);
+ count += s._headAndTail.Tail - s.FreezeOffset;
+ }
- return count;
+ // Finally, enumerate the tail. As with the intermediate segments, there were segments
+ // before this in the snapped region, so we can start counting from the beginning. Unlike
+ // the intermediate segments, we can't just go until the Tail, as that could still be changing;
+ // instead we need to go until the tail we snapped for observation.
+ count += tailTail - tail.FreezeOffset;
}
- }
+ // Return the computed count.
+ return count;
+ }
/// <summary>
/// Copies the <see cref="ConcurrentQueue{T}"/> elements to an existing one-dimensional <see
- /// cref="T:System.Array">Array</see>, starting at the specified array index.
+ /// cref="Array">Array</see>, starting at the specified array index.
/// </summary>
- /// <param name="array">The one-dimensional <see cref="T:System.Array">Array</see> that is the
+ /// <param name="array">The one-dimensional <see cref="Array">Array</see> that is the
/// destination of the elements copied from the
- /// <see cref="ConcurrentQueue{T}"/>. The <see cref="T:System.Array">Array</see> must have zero-based
+ /// <see cref="ConcurrentQueue{T}"/>. The <see cref="Array">Array</see> must have zero-based
/// indexing.</param>
/// <param name="index">The zero-based index in <paramref name="array"/> at which copying
/// begins.</param>
@@ -442,19 +429,36 @@ namespace System.Collections.Concurrent
{
throw new ArgumentNullException(nameof(array));
}
+ if (index < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
- // We must be careful not to corrupt the array, so we will first accumulate an
- // internal list of elements that we will then copy to the array. This requires
- // some extra allocation, but is necessary since we don't know up front whether
- // the array is sufficiently large to hold the stack's contents.
- ToList().CopyTo(array, index);
- }
+ // Snap for enumeration
+ Segment head, tail;
+ int headHead, tailTail;
+ SnapForObservation(out head, out headHead, out tail, out tailTail);
+ // Get the number of items to be enumerated
+ long count = GetCount(head, headHead, tail, tailTail);
+ if (index > array.Length - count)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Arg_ArrayPlusOffTooSmall"));
+ }
- /// <summary>
- /// Returns an enumerator that iterates through the <see
- /// cref="ConcurrentQueue{T}"/>.
- /// </summary>
+ // Copy the items to the target array
+ int i = index;
+ using (IEnumerator<T> e = Enumerate(head, headHead, tail, tailTail))
+ {
+ while (e.MoveNext())
+ {
+ array[i++] = e.Current;
+ }
+ }
+ Debug.Assert(count == i - index);
+ }
+
+ /// <summary>Returns an enumerator that iterates through the <see cref="ConcurrentQueue{T}"/>.</summary>
/// <returns>An enumerator for the contents of the <see
/// cref="ConcurrentQueue{T}"/>.</returns>
/// <remarks>
@@ -465,124 +469,195 @@ namespace System.Collections.Concurrent
/// </remarks>
public IEnumerator<T> GetEnumerator()
{
- // Increments the number of active snapshot takers. This increment must happen before the snapshot is
- // taken. At the same time, Decrement must happen after the enumeration is over. Only in this way, can it
- // eliminate race condition when Segment.TryRemove() checks whether m_numSnapshotTakers == 0.
- Interlocked.Increment(ref m_numSnapshotTakers);
-
- // Takes a snapshot of the queue.
- // A design flaw here: if a Thread.Abort() happens, we cannot decrement m_numSnapshotTakers. But we cannot
- // wrap the following with a try/finally block, otherwise the decrement will happen before the yield return
- // statements in the GetEnumerator (head, tail, headLow, tailHigh) method.
Segment head, tail;
- int headLow, tailHigh;
- GetHeadTailPositions(out head, out tail, out headLow, out tailHigh);
-
- //If we put yield-return here, the iterator will be lazily evaluated. As a result a snapshot of
- // the queue is not taken when GetEnumerator is initialized but when MoveNext() is first called.
- // This is inconsistent with existing generic collections. In order to prevent it, we capture the
- // value of m_head in a buffer and call out to a helper method.
- //The old way of doing this was to return the ToList().GetEnumerator(), but ToList() was an
- // unnecessary perfomance hit.
- return GetEnumerator(head, tail, headLow, tailHigh);
+ int headHead, tailTail;
+ SnapForObservation(out head, out headHead, out tail, out tailTail);
+ return Enumerate(head, headHead, tail, tailTail);
}
/// <summary>
- /// Helper method of GetEnumerator to seperate out yield return statement, and prevent lazy evaluation.
+ /// Gets the head and tail information of the current contents of the queue.
+ /// After this call returns, the specified region can be enumerated any number
+ /// of times and will not change.
/// </summary>
- private IEnumerator<T> GetEnumerator(Segment head, Segment tail, int headLow, int tailHigh)
+ private void SnapForObservation(out Segment head, out int headHead, out Segment tail, out int tailTail)
{
- try
+ lock (_crossSegmentLock) // _head and _tail may only change while the lock is held.
{
- SpinWait spin = new SpinWait();
+ // Snap the head and tail
+ head = _head;
+ tail = _tail;
+ Debug.Assert(head != null);
+ Debug.Assert(tail != null);
+ Debug.Assert(tail._nextSegment == null);
+
+ // Mark them and all segments in between as preserving, and ensure no additional items
+ // can be added to the tail.
+ for (Segment s = head; ; s = s._nextSegment)
+ {
+ s._preservedForObservation = true;
+ if (s == tail) break;
+ Debug.Assert(s._frozenForEnqueues); // any non-tail should already be marked
+ }
+ tail.EnsureFrozenForEnqueues(); // we want to prevent the tailTail from moving
- if (head == tail)
+ // At this point, any dequeues from any segment won't overwrite the value, and
+ // none of the existing segments can have new items enqueued.
+
+ headHead = Volatile.Read(ref head._headAndTail.Head);
+ tailTail = Volatile.Read(ref tail._headAndTail.Tail);
+ }
+ }
+
+ /// <summary>Gets the item stored in the <paramref name="i"/>th entry in <paramref name="segment"/>.</summary>
+ private T GetItemWhenAvailable(Segment segment, int i)
+ {
+ Debug.Assert(segment._preservedForObservation);
+
+ // Get the expected value for the sequence number
+ int expectedSequenceNumberAndMask = (i + 1) & segment._slotsMask;
+
+ // If the expected sequence number is not yet written, we're still waiting for
+ // an enqueuer to finish storing it. Spin until it's there.
+ if ((segment._slots[i].SequenceNumber & segment._slotsMask) != expectedSequenceNumberAndMask)
+ {
+ var spinner = new SpinWait();
+ while ((Volatile.Read(ref segment._slots[i].SequenceNumber) & segment._slotsMask) != expectedSequenceNumberAndMask)
{
- for (int i = headLow; i <= tailHigh; i++)
- {
- // If the position is reserved by an Enqueue operation, but the value is not written into,
- // spin until the value is available.
- spin.Reset();
- while (!head.m_state[i].m_value)
- {
- spin.SpinOnce();
- }
- yield return head.m_array[i];
- }
+ spinner.SpinOnce();
+ }
+ }
+
+ // Return the value from the slot.
+ return segment._slots[i].Item;
+ }
+
+ private IEnumerator<T> Enumerate(Segment head, int headHead, Segment tail, int tailTail)
+ {
+ Debug.Assert(head._preservedForObservation);
+ Debug.Assert(head._frozenForEnqueues);
+ Debug.Assert(tail._preservedForObservation);
+ Debug.Assert(tail._frozenForEnqueues);
+
+ // Head segment. We've already marked it as not accepting any more enqueues,
+ // so its tail position is fixed, and we've already marked it as preserved for
+ // enumeration (before we grabbed its head), so we can safely enumerate from
+ // its head to its tail.
+ int headTail = (head == tail ? tailTail : Volatile.Read(ref head._headAndTail.Tail)) - head.FreezeOffset;
+ if (headHead < headTail)
+ {
+ headHead &= head._slotsMask;
+ headTail &= head._slotsMask;
+
+ if (headHead < headTail)
+ {
+ for (int i = headHead; i < headTail; i++) yield return GetItemWhenAvailable(head, i);
}
else
{
- //iterate on head segment
- for (int i = headLow; i < SEGMENT_SIZE; i++)
- {
- // If the position is reserved by an Enqueue operation, but the value is not written into,
- // spin until the value is available.
- spin.Reset();
- while (!head.m_state[i].m_value)
- {
- spin.SpinOnce();
- }
- yield return head.m_array[i];
- }
- //iterate on middle segments
- Segment curr = head.Next;
- while (curr != tail)
- {
- for (int i = 0; i < SEGMENT_SIZE; i++)
- {
- // If the position is reserved by an Enqueue operation, but the value is not written into,
- // spin until the value is available.
- spin.Reset();
- while (!curr.m_state[i].m_value)
- {
- spin.SpinOnce();
- }
- yield return curr.m_array[i];
- }
- curr = curr.Next;
- }
+ for (int i = headHead; i < head._slots.Length; i++) yield return GetItemWhenAvailable(head, i);
+ for (int i = 0; i < headTail; i++) yield return GetItemWhenAvailable(head, i);
+ }
+ }
- //iterate on tail segment
- for (int i = 0; i <= tailHigh; i++)
+ // We've enumerated the head. If the tail is the same, we're done.
+ if (head != tail)
+ {
+ // Each segment between head and tail, not including head and tail. Since there were
+ // segments before these, for our purposes we consider it to start at the 0th element.
+ for (Segment s = head._nextSegment; s != tail; s = s._nextSegment)
+ {
+ Debug.Assert(s._preservedForObservation, "Would have had to been preserved as a segment part of enumeration");
+ Debug.Assert(s._frozenForEnqueues, "Would have had to be frozen for enqueues as it's intermediate");
+
+ int sTail = s._headAndTail.Tail - s.FreezeOffset;
+ for (int i = 0; i < sTail; i++)
{
- // If the position is reserved by an Enqueue operation, but the value is not written into,
- // spin until the value is available.
- spin.Reset();
- while (!tail.m_state[i].m_value)
- {
- spin.SpinOnce();
- }
- yield return tail.m_array[i];
+ yield return GetItemWhenAvailable(s, i);
}
}
- }
- finally
- {
- // This Decrement must happen after the enumeration is over.
- Interlocked.Decrement(ref m_numSnapshotTakers);
+
+ // Enumerate the tail. Since there were segments before this, we can just start at
+ // its beginning, and iterate until the tail we already grabbed.
+ tailTail -= tail.FreezeOffset;
+ for (int i = 0; i < tailTail; i++)
+ {
+ yield return GetItemWhenAvailable(tail, i);
+ }
}
}
- /// <summary>
- /// Adds an object to the end of the <see cref="ConcurrentQueue{T}"/>.
- /// </summary>
- /// <param name="item">The object to add to the end of the <see
- /// cref="ConcurrentQueue{T}"/>. The value can be a null reference
- /// (Nothing in Visual Basic) for reference types.
+ /// <summary>Round the specified value up to the next power of 2, if it isn't one already.</summary>
+ private static int RoundUpToPowerOf2(int i)
+ {
+ --i;
+ i |= i >> 1;
+ i |= i >> 2;
+ i |= i >> 4;
+ i |= i >> 8;
+ i |= i >> 16;
+ return i + 1;
+ }
+
+ /// <summary>Adds an object to the end of the <see cref="ConcurrentQueue{T}"/>.</summary>
+ /// <param name="item">
+ /// The object to add to the end of the <see cref="ConcurrentQueue{T}"/>.
+ /// The value can be a null reference (Nothing in Visual Basic) for reference types.
/// </param>
public void Enqueue(T item)
{
- SpinWait spin = new SpinWait();
+ // Try to enqueue to the current tail.
+ if (!_tail.TryEnqueue(item))
+ {
+ // If we're unable to, we need to take a slow path that will
+ // try to add a new tail segment.
+ EnqueueSlow(item);
+ }
+ }
+
+ /// <summary>Adds to the end of the queue, adding a new segment if necessary.</summary>
+ private void EnqueueSlow(T item)
+ {
while (true)
{
- Segment tail = m_tail;
- if (tail.TryAppend(item))
+ Segment tail = _tail;
+
+ // Try to append to the existing tail.
+ if (tail.TryEnqueue(item))
+ {
return;
- spin.SpinOnce();
+ }
+
+ // If we were unsuccessful, take the lock so that we can compare and manipulate
+ // the tail. Assuming another enqueuer hasn't already added a new segment,
+ // do so, then loop around to try enqueueing again.
+ lock (_crossSegmentLock)
+ {
+ if (tail == _tail)
+ {
+ // Make sure no one else can enqueue to this segment.
+ tail.EnsureFrozenForEnqueues();
+
+ // We determine the new segment's length based on the old length.
+ // In general, we double the size of the segment, to make it less likely
+ // that we'll need to grow again. However, if the tail segment is marked
+ // as preserved for observation, something caused us to avoid reusing this
+ // segment, and if that happens a lot and we grow, we'll end up allocating
+ // lots of wasted space. As such, in such situations we reset back to the
+ // initial segment length; if these observations are happening frequently,
+ // this will help to avoid wasted memory, and if they're not, we'll
+ // relatively quickly grow again to a larger size.
+ int nextSize = tail._preservedForObservation ? InitialSegmentLength : tail.Capacity * 2;
+ var newTail = new Segment(nextSize);
+
+ // Hook up the new tail.
+ tail._nextSegment = newTail;
+ _tail = newTail;
+ }
+ }
}
}
-
/// <summary>
/// Attempts to remove and return the object at the beginning of the <see
/// cref="ConcurrentQueue{T}"/>.
@@ -591,369 +666,456 @@ namespace System.Collections.Concurrent
/// When this method returns, if the operation was successful, <paramref name="result"/> contains the
/// object removed. If no object was available to be removed, the value is unspecified.
/// </param>
- /// <returns>true if an element was removed and returned from the beggining of the <see
- /// cref="ConcurrentQueue{T}"/>
- /// succesfully; otherwise, false.</returns>
- public bool TryDequeue(out T result)
+ /// <returns>
+ /// true if an element was removed and returned from the beginning of the
+ /// <see cref="ConcurrentQueue{T}"/> successfully; otherwise, false.
+ /// </returns>
+ public bool TryDequeue(out T result) =>
+ _head.TryDequeue(out result) || // fast-path that operates just on the head segment
+ TryDequeueSlow(out result); // slow path that needs to fix up segments
+
+ /// <summary>Tries to dequeue an item, removing empty segments as needed.</summary>
+ private bool TryDequeueSlow(out T item)
{
- while (!IsEmpty)
+ while (true)
{
- Segment head = m_head;
- if (head.TryRemove(out result))
+ // Get the current head
+ Segment head = _head;
+
+ // Try to take. If we're successful, we're done.
+ if (head.TryDequeue(out item))
+ {
+ return true;
+ }
+
+ // Check to see whether this segment is the last. If it is, we can consider
+ // this to be a moment-in-time empty condition (even though between the TryDequeue
+ // check and this check, another item could have arrived).
+ if (head._nextSegment == null)
+ {
+ item = default(T);
+ return false;
+ }
+
+ // At this point we know that head.Next != null, which means
+ // this segment has been frozen for additional enqueues. But between
+ // the time that we ran TryDequeue and checked for a next segment,
+ // another item could have been added. Try to dequeue one more time
+ // to confirm that the segment is indeed empty.
+ Debug.Assert(head._frozenForEnqueues);
+ if (head.TryDequeue(out item))
+ {
return true;
- //since method IsEmpty spins, we don't need to spin in the while loop
+ }
+
+ // This segment is frozen (nothing more can be added) and empty (nothing is in it).
+ // Update head to point to the next segment in the list, assuming no one's beat us to it.
+ lock (_crossSegmentLock)
+ {
+ if (head == _head)
+ {
+ _head = head._nextSegment;
+ }
+ }
}
- result = default(T);
- return false;
}
/// <summary>
/// Attempts to return an object from the beginning of the <see cref="ConcurrentQueue{T}"/>
/// without removing it.
/// </summary>
- /// <param name="result">When this method returns, <paramref name="result"/> contains an object from
- /// the beginning of the <see cref="T:System.Collections.Concurrent.ConccurrentQueue{T}"/> or an
- /// unspecified value if the operation failed.</param>
+ /// <param name="result">
+ /// When this method returns, <paramref name="result"/> contains an object from
+ /// the beginning of the <see cref="Concurrent.ConcurrentQueue{T}"/> or default(T)
+ /// if the operation failed.
+ /// </param>
/// <returns>true if and object was returned successfully; otherwise, false.</returns>
- public bool TryPeek(out T result)
- {
- Interlocked.Increment(ref m_numSnapshotTakers);
+ /// <remarks>
+ /// For determining whether the collection contains any items, use of the <see cref="IsEmpty"/>
+ /// property is recommended rather than peeking.
+ /// </remarks>
+ public bool TryPeek(out T result) => TryPeek(out result, resultUsed: true);
- while (!IsEmpty)
+ /// <summary>Attempts to retrieve the value for the first element in the queue.</summary>
+ /// <param name="result">The value of the first element, if found.</param>
+ /// <param name="resultUsed">true if the result is neede; otherwise false if only the true/false outcome is needed.</param>
+ /// <returns>true if an element was found; otherwise, false.</returns>
+ private bool TryPeek(out T result, bool resultUsed)
+ {
+ // Starting with the head segment, look through all of the segments
+ // for the first one we can find that's not empty.
+ Segment s = _head;
+ while (true)
{
- Segment head = m_head;
- if (head.TryPeek(out result))
+ // Grab the next segment from this one, before we peek.
+ // This is to be able to see whether the value has changed
+ // during the peek operation.
+ Segment next = Volatile.Read(ref s._nextSegment);
+
+ // Peek at the segment. If we find an element, we're done.
+ if (s.TryPeek(out result, resultUsed))
{
- Interlocked.Decrement(ref m_numSnapshotTakers);
return true;
}
- //since method IsEmpty spins, we don't need to spin in the while loop
+
+ // The current segment was empty at the moment we checked.
+
+ if (next != null)
+ {
+ // If prior to the peek there was already a next segment, then
+ // during the peek no additional items could have been enqueued
+ // to it and we can just move on to check the next segment.
+ Debug.Assert(next == s._nextSegment);
+ s = next;
+ }
+ else if (Volatile.Read(ref s._nextSegment) == null)
+ {
+ // The next segment is null. Nothing more to peek at.
+ break;
+ }
+
+ // The next segment was null before we peeked but non-null after.
+ // That means either when we peeked the first segment had
+ // already been frozen but the new segment not yet added,
+ // or that the first segment was empty and between the time
+ // that we peeked and then checked _nextSegment, so many items
+ // were enqueued that we filled the first segment and went
+ // into the next. Since we need to peek in order, we simply
+ // loop around again to peek on the same segment. The next
+ // time around on this segment we'll then either successfully
+ // peek or we'll find that next was non-null before peeking,
+ // and we'll traverse to that segment.
}
+
result = default(T);
- Interlocked.Decrement(ref m_numSnapshotTakers);
return false;
}
-
/// <summary>
- /// private class for ConcurrentQueue.
- /// a queue is a linked list of small arrays, each node is called a segment.
- /// A segment contains an array, a pointer to the next segment, and m_low, m_high indices recording
- /// the first and last valid elements of the array.
+ /// Removes all objects from the <see cref="ConcurrentQueue{T}"/>.
/// </summary>
- private class Segment
+ public void Clear()
{
- //we define two volatile arrays: m_array and m_state. Note that the accesses to the array items
- //do not get volatile treatment. But we don't need to worry about loading adjacent elements or
- //store/load on adjacent elements would suffer reordering.
- // - Two stores: these are at risk, but CLRv2 memory model guarantees store-release hence we are safe.
- // - Two loads: because one item from two volatile arrays are accessed, the loads of the array references
- // are sufficient to prevent reordering of the loads of the elements.
- internal volatile T[] m_array;
-
- // For each entry in m_array, the corresponding entry in m_state indicates whether this position contains
- // a valid value. m_state is initially all false.
- internal volatile VolatileBool[] m_state;
-
- //pointer to the next segment. null if the current segment is the last segment
- private volatile Segment m_next;
-
- //We use this zero based index to track how many segments have been created for the queue, and
- //to compute how many active segments are there currently.
- // * The number of currently active segments is : m_tail.m_index - m_head.m_index + 1;
- // * m_index is incremented with every Segment.Grow operation. We use Int64 type, and we can safely
- // assume that it never overflows. To overflow, we need to do 2^63 increments, even at a rate of 4
- // billion (2^32) increments per second, it takes 2^31 seconds, which is about 64 years.
- internal readonly long m_index;
-
- //indices of where the first and last valid values
- // - m_low points to the position of the next element to pop from this segment, range [0, infinity)
- // m_low >= SEGMENT_SIZE implies the segment is disposable
- // - m_high points to the position of the latest pushed element, range [-1, infinity)
- // m_high == -1 implies the segment is new and empty
- // m_high >= SEGMENT_SIZE-1 means this segment is ready to grow.
- // and the thread who sets m_high to SEGMENT_SIZE-1 is responsible to grow the segment
- // - Math.Min(m_low, SEGMENT_SIZE) > Math.Min(m_high, SEGMENT_SIZE-1) implies segment is empty
- // - initially m_low =0 and m_high=-1;
- private volatile int m_low;
- private volatile int m_high;
-
- private volatile ConcurrentQueue<T> m_source;
-
- /// <summary>
- /// Create and initialize a segment with the specified index.
- /// </summary>
- internal Segment(long index, ConcurrentQueue<T> source)
+ lock (_crossSegmentLock)
{
- m_array = new T[SEGMENT_SIZE];
- m_state = new VolatileBool[SEGMENT_SIZE]; //all initialized to false
- m_high = -1;
- Debug.Assert(index >= 0);
- m_index = index;
- m_source = source;
- }
-
- /// <summary>
- /// return the next segment
- /// </summary>
- internal Segment Next
- {
- get { return m_next; }
- }
-
-
- /// <summary>
- /// return true if the current segment is empty (doesn't have any element available to dequeue,
- /// false otherwise
- /// </summary>
- internal bool IsEmpty
- {
- get { return (Low > High); }
- }
-
- /// <summary>
- /// Add an element to the tail of the current segment
- /// exclusively called by ConcurrentQueue.InitializedFromCollection
- /// InitializeFromCollection is responsible to guaratee that there is no index overflow,
- /// and there is no contention
- /// </summary>
- /// <param name="value"></param>
- internal void UnsafeAdd(T value)
- {
- Debug.Assert(m_high < SEGMENT_SIZE - 1);
- m_high++;
- m_array[m_high] = value;
- m_state[m_high].m_value = true;
+ // Simply substitute a new segment for the existing head/tail,
+ // as is done in the constructor. Operations currently in flight
+ // may still read from or write to an existing segment that's
+ // getting dropped, meaning that in flight operations may not be
+ // linear with regards to this clear operation. To help mitigate
+ // in-flight operations enqueuing onto the tail that's about to
+ // be dropped, we first freeze it; that'll force enqueuers to take
+ // this lock to synchronize and see the new tail.
+ _tail.EnsureFrozenForEnqueues();
+ _tail = _head = new Segment(InitialSegmentLength);
}
+ }
- /// <summary>
- /// Create a new segment and append to the current one
- /// Does not update the m_tail pointer
- /// exclusively called by ConcurrentQueue.InitializedFromCollection
- /// InitializeFromCollection is responsible to guaratee that there is no index overflow,
- /// and there is no contention
- /// </summary>
- /// <returns>the reference to the new Segment</returns>
- internal Segment UnsafeGrow()
+ /// <summary>
+ /// Provides a multi-producer, multi-consumer thread-safe bounded segment. When the queue is full,
+ /// enqueues fail and return false. When the queue is empty, dequeues fail and return null.
+ /// These segments are linked together to form the unbounded <see cref="ConcurrentQueue{T}"/>.
+ /// </summary>
+ [DebuggerDisplay("Capacity = {Capacity}")]
+ private sealed class Segment
+ {
+ // Segment design is inspired by the algorithm outlined at:
+ // http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue
+
+ /// <summary>The array of items in this queue. Each slot contains the item in that slot and its "sequence number".</summary>
+ internal readonly Slot[] _slots;
+ /// <summary>Mask for quickly accessing a position within the queue's array.</summary>
+ internal readonly int _slotsMask;
+ /// <summary>The head and tail positions, with padding to help avoid false sharing contention.</summary>
+ /// <remarks>Dequeueing happens from the head, enqueueing happens at the tail.</remarks>
+ internal PaddedHeadAndTail _headAndTail; // mutable struct: do not make this readonly
+
+ /// <summary>Indicates whether the segment has been marked such that dequeues don't overwrite the removed data.</summary>
+ internal bool _preservedForObservation;
+ /// <summary>Indicates whether the segment has been marked such that no additional items may be enqueued.</summary>
+ internal bool _frozenForEnqueues;
+ /// <summary>The segment following this one in the queue, or null if this segment is the last in the queue.</summary>
+ internal Segment _nextSegment;
+
+ /// <summary>Creates the segment.</summary>
+ /// <param name="boundedLength">
+ /// The maximum number of elements the segment can contain. Must be a power of 2.
+ /// </param>
+ public Segment(int boundedLength)
{
- Debug.Assert(m_high >= SEGMENT_SIZE - 1);
- Segment newSegment = new Segment(m_index + 1, m_source); //m_index is Int64, we don't need to worry about overflow
- m_next = newSegment;
- return newSegment;
+ // Validate the length
+ Debug.Assert(boundedLength >= 2, $"Must be >= 2, got {boundedLength}");
+ Debug.Assert((boundedLength & (boundedLength - 1)) == 0, $"Must be a power of 2, got {boundedLength}");
+
+ // Initialize the slots and the mask. The mask is used as a way of quickly doing "% _slots.Length",
+ // instead letting us do "& _slotsMask".
+ _slots = new Slot[boundedLength];
+ _slotsMask = boundedLength - 1;
+
+ // Initialize the sequence number for each slot. The sequence number provides a ticket that
+ // allows dequeuers to know whether they can dequeue and enqueuers to know whether they can
+ // enqueue. An enqueuer at position N can enqueue when the sequence number is N, and a dequeuer
+ // for position N can dequeue when the sequence number is N + 1. When an enqueuer is done writing
+ // at position N, it sets the sequence number to N so that a dequeuer will be able to dequeue,
+ // and when a dequeuer is done dequeueing at position N, it sets the sequence number to N + _slots.Length,
+ // so that when an enqueuer loops around the slots, it'll find that the sequence number at
+ // position N is N. This also means that when an enqueuer finds that at position N the sequence
+ // number is < N, there is still a value in that slot, i.e. the segment is full, and when a
+ // dequeuer finds that the value in a slot is < N + 1, there is nothing currently available to
+ // dequeue. (It is possible for multiple enqueuers to enqueue concurrently, writing into
+ // subsequent slots, and to have the first enqueuer take longer, so that the slots for 1, 2, 3, etc.
+ // may have values, but the 0th slot may still be being filled... in that case, TryDequeue will
+ // return false.)
+ for (int i = 0; i < _slots.Length; i++)
+ {
+ _slots[i].SequenceNumber = i;
+ }
}
- /// <summary>
- /// Create a new segment and append to the current one
- /// Update the m_tail pointer
- /// This method is called when there is no contention
- /// </summary>
- internal void Grow()
- {
- //no CAS is needed, since there is no contention (other threads are blocked, busy waiting)
- Segment newSegment = new Segment(m_index + 1, m_source); //m_index is Int64, we don't need to worry about overflow
- m_next = newSegment;
- Debug.Assert(m_source.m_tail == this);
- m_source.m_tail = m_next;
- }
+ /// <summary>Gets the number of elements this segment can store.</summary>
+ internal int Capacity => _slots.Length;
+ /// <summary>Gets the "freeze offset" for this segment.</summary>
+ internal int FreezeOffset => _slots.Length * 2;
/// <summary>
- /// Try to append an element at the end of this segment.
+ /// Ensures that the segment will not accept any subsequent enqueues that aren't already underway.
/// </summary>
- /// <param name="value">the element to append</param>
- /// <param name="tail">The tail.</param>
- /// <returns>true if the element is appended, false if the current segment is full</returns>
- /// <remarks>if appending the specified element succeeds, and after which the segment is full,
- /// then grow the segment</remarks>
- internal bool TryAppend(T value)
+ /// <remarks>
+ /// When we mark a segment as being frozen for additional enqueues,
+ /// we set the <see cref="_frozenForEnqueues"/> bool, but that's mostly
+ /// as a small helper to avoid marking it twice. The real marking comes
+ /// by modifying the Tail for the segment, increasing it by this
+ /// <see cref="FreezeOffset"/>. This effectively knocks it off the
+ /// sequence expected by future enqueuers, such that any additional enqueuer
+ /// will be unable to enqueue due to it not lining up with the expected
+ /// sequence numbers. This value is chosen specially so that Tail will grow
+ /// to a value that maps to the same slot but that won't be confused with
+ /// any other enqueue/dequeue sequence number.
+ /// </remarks>
+ internal void EnsureFrozenForEnqueues() // must only be called while queue's segment lock is held
{
- //quickly check if m_high is already over the boundary, if so, bail out
- if (m_high >= SEGMENT_SIZE - 1)
+ if (!_frozenForEnqueues) // flag used to ensure we don't increase the Tail more than once if frozen more than once
{
- return false;
- }
+ _frozenForEnqueues = true;
- //Now we will use a CAS to increment m_high, and store the result in newhigh.
- //Depending on how many free spots left in this segment and how many threads are doing this Increment
- //at this time, the returning "newhigh" can be
- // 1) < SEGMENT_SIZE - 1 : we took a spot in this segment, and not the last one, just insert the value
- // 2) == SEGMENT_SIZE - 1 : we took the last spot, insert the value AND grow the segment
- // 3) > SEGMENT_SIZE - 1 : we failed to reserve a spot in this segment, we return false to
- // Queue.Enqueue method, telling it to try again in the next segment.
-
- int newhigh = SEGMENT_SIZE; //initial value set to be over the boundary
-
- //We need do Interlocked.Increment and value/state update in a finally block to ensure that they run
- //without interuption. This is to prevent anything from happening between them, and another dequeue
- //thread maybe spinning forever to wait for m_state[] to be true;
- try
- { }
- finally
- {
- newhigh = Interlocked.Increment(ref m_high);
- if (newhigh <= SEGMENT_SIZE - 1)
+ // Increase the tail by FreezeOffset, spinning until we're successful in doing so.
+ var spinner = new SpinWait();
+ while (true)
{
- m_array[newhigh] = value;
- m_state[newhigh].m_value = true;
- }
-
- //if this thread takes up the last slot in the segment, then this thread is responsible
- //to grow a new segment. Calling Grow must be in the finally block too for reliability reason:
- //if thread abort during Grow, other threads will be left busy spinning forever.
- if (newhigh == SEGMENT_SIZE - 1)
- {
- Grow();
+ int tail = Volatile.Read(ref _headAndTail.Tail);
+ if (Interlocked.CompareExchange(ref _headAndTail.Tail, tail + FreezeOffset, tail) == tail)
+ {
+ break;
+ }
+ spinner.SpinOnce();
}
}
-
- //if newhigh <= SEGMENT_SIZE-1, it means the current thread successfully takes up a spot
- return newhigh <= SEGMENT_SIZE - 1;
}
-
- /// <summary>
- /// try to remove an element from the head of current segment
- /// </summary>
- /// <param name="result">The result.</param>
- /// <param name="head">The head.</param>
- /// <returns>return false only if the current segment is empty</returns>
- internal bool TryRemove(out T result)
+ /// <summary>Tries to dequeue an element from the queue.</summary>
+ public bool TryDequeue(out T item)
{
- SpinWait spin = new SpinWait();
- int lowLocal = Low, highLocal = High;
- while (lowLocal <= highLocal)
+ // Loop in case of contention...
+ var spinner = new SpinWait();
+ while (true)
{
- //try to update m_low
- if (Interlocked.CompareExchange(ref m_low, lowLocal + 1, lowLocal) == lowLocal)
- {
- //if the specified value is not available (this spot is taken by a push operation,
- // but the value is not written into yet), then spin
- SpinWait spinLocal = new SpinWait();
- while (!m_state[lowLocal].m_value)
- {
- spinLocal.SpinOnce();
- }
- result = m_array[lowLocal];
+ // Get the head at which to try to dequeue.
+ int currentHead = Volatile.Read(ref _headAndTail.Head);
+ int slotsIndex = currentHead & _slotsMask;
- // If there is no other thread taking snapshot (GetEnumerator(), ToList(), etc), reset the deleted entry to null.
- // It is ok if after this conditional check m_numSnapshotTakers becomes > 0, because new snapshots won't include
- // the deleted entry at m_array[lowLocal].
- if (m_source.m_numSnapshotTakers <= 0)
- {
- m_array[lowLocal] = default(T); //release the reference to the object.
- }
+ // Read the sequence number for the head position.
+ int sequenceNumber = Volatile.Read(ref _slots[slotsIndex].SequenceNumber);
- //if the current thread sets m_low to SEGMENT_SIZE, which means the current segment becomes
- //disposable, then this thread is responsible to dispose this segment, and reset m_head
- if (lowLocal + 1 >= SEGMENT_SIZE)
+ // We can dequeue from this slot if it's been filled by an enqueuer, which
+ // would have left the sequence number at pos+1.
+ int diff = sequenceNumber - (currentHead + 1);
+ if (diff == 0)
+ {
+ // We may be racing with other dequeuers. Try to reserve the slot by incrementing
+ // the head. Once we've done that, no one else will be able to read from this slot,
+ // and no enqueuer will be able to read from this slot until we've written the new
+ // sequence number. WARNING: The next few lines are not reliable on a runtime that
+ // supports thread aborts. If a thread abort were to sneak in after the CompareExchange
+ // but before the Volatile.Write, enqueuers trying to enqueue into this slot would
+ // spin indefinitely. If this implementation is ever used on such a platform, this
+ // if block should be wrapped in a finally / prepared region.
+ if (Interlocked.CompareExchange(ref _headAndTail.Head, currentHead + 1, currentHead) == currentHead)
{
- // Invariant: we only dispose the current m_head, not any other segment
- // In usual situation, disposing a segment is simply seting m_head to m_head.m_next
- // But there is one special case, where m_head and m_tail points to the same and ONLY
- //segment of the queue: Another thread A is doing Enqueue and finds that it needs to grow,
- //while the *current* thread is doing *this* Dequeue operation, and finds that it needs to
- //dispose the current (and ONLY) segment. Then we need to wait till thread A finishes its
- //Grow operation, this is the reason of having the following while loop
- spinLocal = new SpinWait();
- while (m_next == null)
+ // Successfully reserved the slot. Note that after the above CompareExchange, other threads
+ // trying to dequeue from this slot will end up spinning until we do the subsequent Write.
+ item = _slots[slotsIndex].Item;
+ if (!Volatile.Read(ref _preservedForObservation))
{
- spinLocal.SpinOnce();
+ // If we're preserving, though, we don't zero out the slot, as we need it for
+ // enumerations, peeking, ToArray, etc. And we don't update the sequence number,
+ // so that an enqueuer will see it as full and be forced to move to a new segment.
+ _slots[slotsIndex].Item = default(T);
+ Volatile.Write(ref _slots[slotsIndex].SequenceNumber, currentHead + _slots.Length);
}
- Debug.Assert(m_source.m_head == this);
- m_source.m_head = m_next;
+ return true;
}
- return true;
}
- else
+ else if (diff < 0)
{
- //CAS failed due to contention: spin briefly and retry
- spin.SpinOnce();
- lowLocal = Low; highLocal = High;
+ // The sequence number was less than what we needed, which means this slot doesn't
+ // yet contain a value we can dequeue, i.e. the segment is empty. Technically it's
+ // possible that multiple enqueuers could have written concurrently, with those
+ // getting later slots actually finishing first, so there could be elements after
+ // this one that are available, but we need to dequeue in order. So before declaring
+ // failure and that the segment is empty, we check the tail to see if we're actually
+ // empty or if we're just waiting for items in flight or after this one to become available.
+ bool frozen = _frozenForEnqueues;
+ int currentTail = Volatile.Read(ref _headAndTail.Tail);
+ if (currentTail - currentHead <= 0 || (frozen && (currentTail - FreezeOffset - currentHead <= 0)))
+ {
+ item = default(T);
+ return false;
+ }
+
+ // It's possible it could have become frozen after we checked _frozenForEnqueues
+ // and before reading the tail. That's ok: in that rare race condition, we just
+ // loop around again.
}
- }//end of while
- result = default(T);
- return false;
+
+ // Lost a race. Spin a bit, then try again.
+ spinner.SpinOnce();
+ }
}
- /// <summary>
- /// try to peek the current segment
- /// </summary>
- /// <param name="result">holds the return value of the element at the head position,
- /// value set to default(T) if there is no such an element</param>
- /// <returns>true if there are elements in the current segment, false otherwise</returns>
- internal bool TryPeek(out T result)
+ /// <summary>Tries to peek at an element from the queue, without removing it.</summary>
+ public bool TryPeek(out T result, bool resultUsed)
{
- result = default(T);
- int lowLocal = Low;
- if (lowLocal > High)
- return false;
- SpinWait spin = new SpinWait();
- while (!m_state[lowLocal].m_value)
+ if (resultUsed)
{
- spin.SpinOnce();
+ // In order to ensure we don't get a torn read on the value, we mark the segment
+ // as preserving for observation. Additional items can still be enqueued to this
+ // segment, but no space will be freed during dequeues, such that the segment will
+ // no longer be reusable.
+ _preservedForObservation = true;
+ Interlocked.MemoryBarrier();
}
- result = m_array[lowLocal];
- return true;
- }
- /// <summary>
- /// Adds part or all of the current segment into a List.
- /// </summary>
- /// <param name="list">the list to which to add</param>
- /// <param name="start">the start position</param>
- /// <param name="end">the end position</param>
- internal void AddToList(List<T> list, int start, int end)
- {
- for (int i = start; i <= end; i++)
+ // Loop in case of contention...
+ var spinner = new SpinWait();
+ while (true)
{
- SpinWait spin = new SpinWait();
- while (!m_state[i].m_value)
+ // Get the head at which to try to peek.
+ int currentHead = Volatile.Read(ref _headAndTail.Head);
+ int slotsIndex = currentHead & _slotsMask;
+
+ // Read the sequence number for the head position.
+ int sequenceNumber = Volatile.Read(ref _slots[slotsIndex].SequenceNumber);
+
+ // We can peek from this slot if it's been filled by an enqueuer, which
+ // would have left the sequence number at pos+1.
+ int diff = sequenceNumber - (currentHead + 1);
+ if (diff == 0)
{
- spin.SpinOnce();
+ result = resultUsed ? _slots[slotsIndex].Item : default(T);
+ return true;
+ }
+ else if (diff < 0)
+ {
+ // The sequence number was less than what we needed, which means this slot doesn't
+ // yet contain a value we can peek, i.e. the segment is empty. Technically it's
+ // possible that multiple enqueuers could have written concurrently, with those
+ // getting later slots actually finishing first, so there could be elements after
+ // this one that are available, but we need to peek in order. So before declaring
+ // failure and that the segment is empty, we check the tail to see if we're actually
+ // empty or if we're just waiting for items in flight or after this one to become available.
+ bool frozen = _frozenForEnqueues;
+ int currentTail = Volatile.Read(ref _headAndTail.Tail);
+ if (currentTail - currentHead <= 0 || (frozen && (currentTail - FreezeOffset - currentHead <= 0)))
+ {
+ result = default(T);
+ return false;
+ }
+
+ // It's possible it could have become frozen after we checked _frozenForEnqueues
+ // and before reading the tail. That's ok: in that rare race condition, we just
+ // loop around again.
}
- list.Add(m_array[i]);
+
+ // Lost a race. Spin a bit, then try again.
+ spinner.SpinOnce();
}
}
/// <summary>
- /// return the position of the head of the current segment
- /// Value range [0, SEGMENT_SIZE], if it's SEGMENT_SIZE, it means this segment is exhausted and thus empty
+ /// Attempts to enqueue the item. If successful, the item will be stored
+ /// in the queue and true will be returned; otherwise, the item won't be stored, and false
+ /// will be returned.
/// </summary>
- internal int Low
+ public bool TryEnqueue(T item)
{
- get
+ // Loop in case of contention...
+ var spinner = new SpinWait();
+ while (true)
{
- return Math.Min(m_low, SEGMENT_SIZE);
+ // Get the tail at which to try to return.
+ int currentTail = Volatile.Read(ref _headAndTail.Tail);
+ int slotsIndex = currentTail & _slotsMask;
+
+ // Read the sequence number for the tail position.
+ int sequenceNumber = Volatile.Read(ref _slots[slotsIndex].SequenceNumber);
+
+ // The slot is empty and ready for us to enqueue into it if its sequence
+ // number matches the slot.
+ int diff = sequenceNumber - currentTail;
+ if (diff == 0)
+ {
+ // We may be racing with other enqueuers. Try to reserve the slot by incrementing
+ // the tail. Once we've done that, no one else will be able to write to this slot,
+ // and no dequeuer will be able to read from this slot until we've written the new
+ // sequence number. WARNING: The next few lines are not reliable on a runtime that
+ // supports thread aborts. If a thread abort were to sneak in after the CompareExchange
+ // but before the Volatile.Write, other threads will spin trying to access this slot.
+ // If this implementation is ever used on such a platform, this if block should be
+ // wrapped in a finally / prepared region.
+ if (Interlocked.CompareExchange(ref _headAndTail.Tail, currentTail + 1, currentTail) == currentTail)
+ {
+ // Successfully reserved the slot. Note that after the above CompareExchange, other threads
+ // trying to return will end up spinning until we do the subsequent Write.
+ _slots[slotsIndex].Item = item;
+ Volatile.Write(ref _slots[slotsIndex].SequenceNumber, currentTail + 1);
+ return true;
+ }
+ }
+ else if (diff < 0)
+ {
+ // The sequence number was less than what we needed, which means this slot still
+ // contains a value, i.e. the segment is full. Technically it's possible that multiple
+ // dequeuers could have read concurrently, with those getting later slots actually
+ // finishing first, so there could be spaces after this one that are available, but
+ // we need to enqueue in order.
+ return false;
+ }
+
+ // Lost a race. Spin a bit, then try again.
+ spinner.SpinOnce();
}
}
- /// <summary>
- /// return the logical position of the tail of the current segment
- /// Value range [-1, SEGMENT_SIZE-1]. When it's -1, it means this is a new segment and has no elemnet yet
- /// </summary>
- internal int High
+ /// <summary>Represents a slot in the queue.</summary>
+ [StructLayout(LayoutKind.Auto)]
+ [DebuggerDisplay("Item = {Item}, SequenceNumber = {SequenceNumber}")]
+ internal struct Slot
{
- get
- {
- //if m_high > SEGMENT_SIZE, it means it's out of range, we should return
- //SEGMENT_SIZE-1 as the logical position
- return Math.Min(m_high, SEGMENT_SIZE - 1);
- }
+ /// <summary>The item.</summary>
+ public T Item;
+ /// <summary>The sequence number for this slot, used to synchronize between enqueuers and dequeuers.</summary>
+ public int SequenceNumber;
}
-
}
- }//end of class Segment
+ }
- /// <summary>
- /// A wrapper struct for volatile bool, please note the copy of the struct it self will not be volatile
- /// for example this statement will not include in volatilness operation volatileBool1 = volatileBool2 the jit will copy the struct and will ignore the volatile
- /// </summary>
- struct VolatileBool
+ /// <summary>Padded head and tail indices, to avoid false sharing between producers and consumers.</summary>
+ [DebuggerDisplay("Head = {Head}, Tail = {Tail}")]
+ [StructLayout(LayoutKind.Explicit, Size = 192)] // padding before/between/after fields based on typical cache line size of 64
+ internal struct PaddedHeadAndTail
{
- public VolatileBool(bool value)
- {
- m_value = value;
- }
- public volatile bool m_value;
+ [FieldOffset(64)] public int Head;
+ [FieldOffset(128)] public int Tail;
}
}
diff --git a/src/mscorlib/src/System/Collections/Concurrent/ConcurrentStack.cs b/src/mscorlib/src/System/Collections/Concurrent/ConcurrentStack.cs
index c36d96c26c..10a5201f6c 100644
--- a/src/mscorlib/src/System/Collections/Concurrent/ConcurrentStack.cs
+++ b/src/mscorlib/src/System/Collections/Concurrent/ConcurrentStack.cs
@@ -20,7 +20,6 @@ using System.Diagnostics.Contracts;
using System.Runtime.ConstrainedExecution;
using System.Runtime.Serialization;
using System.Security;
-using System.Security.Permissions;
using System.Threading;
namespace System.Collections.Concurrent
@@ -45,7 +44,7 @@ namespace System.Collections.Concurrent
/// </remarks>
[DebuggerDisplay("Count = {Count}")]
[DebuggerTypeProxy(typeof(SystemCollectionsConcurrent_ProducerConsumerCollectionDebugView<>))]
- public class ConcurrentStack<T> : IProducerConsumerCollection<T>, IReadOnlyCollection<T>
+ internal class ConcurrentStack<T> : IProducerConsumerCollection<T>, IReadOnlyCollection<T>
{
/// <summary>
/// A simple (internal) node type used to store elements of concurrent stacks and queues.
@@ -79,61 +78,6 @@ namespace System.Collections.Concurrent
}
/// <summary>
- /// Initializes a new instance of the <see cref="ConcurrentStack{T}"/>
- /// class that contains elements copied from the specified collection
- /// </summary>
- /// <param name="collection">The collection whose elements are copied to the new <see
- /// cref="ConcurrentStack{T}"/>.</param>
- /// <exception cref="T:System.ArgumentNullException">The <paramref name="collection"/> argument is
- /// null.</exception>
- public ConcurrentStack(IEnumerable<T> collection)
- {
- if (collection == null)
- {
- throw new ArgumentNullException(nameof(collection));
- }
- InitializeFromCollection(collection);
- }
-
- /// <summary>
- /// Initializes the contents of the stack from an existing collection.
- /// </summary>
- /// <param name="collection">A collection from which to copy elements.</param>
- private void InitializeFromCollection(IEnumerable<T> collection)
- {
- // We just copy the contents of the collection to our stack.
- Node lastNode = null;
- foreach (T element in collection)
- {
- Node newNode = new Node(element);
- newNode.m_next = lastNode;
- lastNode = newNode;
- }
-
- m_head = lastNode;
- }
-
- /// <summary>
- /// Gets a value that indicates whether the <see cref="ConcurrentStack{T}"/> is empty.
- /// </summary>
- /// <value>true if the <see cref="ConcurrentStack{T}"/> is empty; otherwise, false.</value>
- /// <remarks>
- /// For determining whether the collection contains any items, use of this property is recommended
- /// rather than retrieving the number of items from the <see cref="Count"/> property and comparing it
- /// to 0. However, as this collection is intended to be accessed concurrently, it may be the case
- /// that another thread will modify the collection after <see cref="IsEmpty"/> returns, thus invalidating
- /// the result.
- /// </remarks>
- public bool IsEmpty
- {
- // Checks whether the stack is empty. Clearly the answer may be out of date even prior to
- // the function returning (i.e. if another thread concurrently adds to the stack). It does
- // guarantee, however, that, if another thread does not mutate the stack, a subsequent call
- // to TryPop will return true -- i.e. it will also read the stack as non-empty.
- get { return m_head == null; }
- }
-
- /// <summary>
/// Gets the number of elements contained in the <see cref="ConcurrentStack{T}"/>.
/// </summary>
/// <value>The number of elements contained in the <see cref="ConcurrentStack{T}"/>.</value>
@@ -196,18 +140,6 @@ namespace System.Collections.Concurrent
}
/// <summary>
- /// Removes all objects from the <see cref="ConcurrentStack{T}"/>.
- /// </summary>
- public void Clear()
- {
- // Clear the list by setting the head to null. We don't need to use an atomic
- // operation for this: anybody who is mutating the head by pushing or popping
- // will need to use an atomic operation to guarantee they serialize and don't
- // overwrite our setting of the head to null.
- m_head = null;
- }
-
- /// <summary>
/// Copies the elements of the <see cref="T:System.Collections.ICollection"/> to an <see
/// cref="T:System.Array"/>, starting at a particular
/// <see cref="T:System.Array"/> index.
@@ -306,79 +238,6 @@ namespace System.Collections.Concurrent
PushCore(newNode, newNode);
}
- /// <summary>
- /// Inserts multiple objects at the top of the <see cref="ConcurrentStack{T}"/> atomically.
- /// </summary>
- /// <param name="items">The objects to push onto the <see cref="ConcurrentStack{T}"/>.</param>
- /// <exception cref="ArgumentNullException"><paramref name="items"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <remarks>
- /// When adding multiple items to the stack, using PushRange is a more efficient
- /// mechanism than using <see cref="Push"/> one item at a time. Additionally, PushRange
- /// guarantees that all of the elements will be added atomically, meaning that no other threads will
- /// be able to inject elements between the elements being pushed. Items at lower indices in
- /// the <paramref name="items"/> array will be pushed before items at higher indices.
- /// </remarks>
- public void PushRange(T[] items)
- {
- if (items == null)
- {
- throw new ArgumentNullException(nameof(items));
- }
- PushRange(items, 0, items.Length);
- }
-
- /// <summary>
- /// Inserts multiple objects at the top of the <see cref="ConcurrentStack{T}"/> atomically.
- /// </summary>
- /// <param name="items">The objects to push onto the <see cref="ConcurrentStack{T}"/>.</param>
- /// <param name="startIndex">The zero-based offset in <paramref name="items"/> at which to begin
- /// inserting elements onto the top of the <see cref="ConcurrentStack{T}"/>.</param>
- /// <param name="count">The number of elements to be inserted onto the top of the <see
- /// cref="ConcurrentStack{T}"/>.</param>
- /// <exception cref="ArgumentNullException"><paramref name="items"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="ArgumentOutOfRangeException"><paramref name="startIndex"/> or <paramref
- /// name="count"/> is negative. Or <paramref name="startIndex"/> is greater than or equal to the length
- /// of <paramref name="items"/>.</exception>
- /// <exception cref="ArgumentException"><paramref name="startIndex"/> + <paramref name="count"/> is
- /// greater than the length of <paramref name="items"/>.</exception>
- /// <remarks>
- /// When adding multiple items to the stack, using PushRange is a more efficient
- /// mechanism than using <see cref="Push"/> one item at a time. Additionally, PushRange
- /// guarantees that all of the elements will be added atomically, meaning that no other threads will
- /// be able to inject elements between the elements being pushed. Items at lower indices in the
- /// <paramref name="items"/> array will be pushed before items at higher indices.
- /// </remarks>
- public void PushRange(T[] items, int startIndex, int count)
- {
- ValidatePushPopRangeInput(items, startIndex, count);
-
- // No op if the count is zero
- if (count == 0)
- return;
-
-
- Node head, tail;
- head = tail = new Node(items[startIndex]);
- for (int i = startIndex + 1; i < startIndex + count; i++)
- {
- Node node = new Node(items[i]);
- node.m_next = head;
- head = node;
- }
-
- tail.m_next = m_head;
- if (Interlocked.CompareExchange(ref m_head, head, tail.m_next) == tail.m_next)
- {
- return;
- }
-
- // If we failed, go to the slow path and loop around until we succeed.
- PushCore(head, tail);
-
- }
-
/// <summary>
/// Push one or many nodes into the stack, if head and tails are equal then push one node to the stack other wise push the list between head
@@ -402,73 +261,6 @@ namespace System.Collections.Concurrent
}
/// <summary>
- /// Local helper function to validate the Pop Push range methods input
- /// </summary>
- private void ValidatePushPopRangeInput(T[] items, int startIndex, int count)
- {
- if (items == null)
- {
- throw new ArgumentNullException(nameof(items));
- }
- if (count < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ConcurrentStack_PushPopRange_CountOutOfRange"));
- }
- int length = items.Length;
- if (startIndex >= length || startIndex < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ConcurrentStack_PushPopRange_StartOutOfRange"));
- }
- if (length - count < startIndex) //instead of (startIndex + count > items.Length) to prevent overflow
- {
- throw new ArgumentException(Environment.GetResourceString("ConcurrentStack_PushPopRange_InvalidCount"));
- }
- }
-
- /// <summary>
- /// Attempts to add an object to the <see
- /// cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>.
- /// </summary>
- /// <param name="item">The object to add to the <see
- /// cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>. The value can be a null
- /// reference (Nothing in Visual Basic) for reference types.
- /// </param>
- /// <returns>true if the object was added successfully; otherwise, false.</returns>
- /// <remarks>For <see cref="ConcurrentStack{T}"/>, this operation
- /// will always insert the object onto the top of the <see cref="ConcurrentStack{T}"/>
- /// and return true.</remarks>
- bool IProducerConsumerCollection<T>.TryAdd(T item)
- {
- Push(item);
- return true;
- }
-
- /// <summary>
- /// Attempts to return an object from the top of the <see cref="ConcurrentStack{T}"/>
- /// without removing it.
- /// </summary>
- /// <param name="result">When this method returns, <paramref name="result"/> contains an object from
- /// the top of the <see cref="T:System.Collections.Concurrent.ConccurrentStack{T}"/> or an
- /// unspecified value if the operation failed.</param>
- /// <returns>true if and object was returned successfully; otherwise, false.</returns>
- public bool TryPeek(out T result)
- {
- Node head = m_head;
-
- // If the stack is empty, return false; else return the element and true.
- if (head == null)
- {
- result = default(T);
- return false;
- }
- else
- {
- result = head.m_value;
- return true;
- }
- }
-
- /// <summary>
/// Attempts to pop and return the object at the top of the <see cref="ConcurrentStack{T}"/>.
/// </summary>
/// <param name="result">
@@ -498,83 +290,6 @@ namespace System.Collections.Concurrent
}
/// <summary>
- /// Attempts to pop and return multiple objects from the top of the <see cref="ConcurrentStack{T}"/>
- /// atomically.
- /// </summary>
- /// <param name="items">
- /// The <see cref="T:System.Array"/> to which objects popped from the top of the <see
- /// cref="ConcurrentStack{T}"/> will be added.
- /// </param>
- /// <returns>The number of objects successfully popped from the top of the <see
- /// cref="ConcurrentStack{T}"/> and inserted in
- /// <paramref name="items"/>.</returns>
- /// <exception cref="ArgumentNullException"><paramref name="items"/> is a null argument (Nothing
- /// in Visual Basic).</exception>
- /// <remarks>
- /// When popping multiple items, if there is little contention on the stack, using
- /// TryPopRange can be more efficient than using <see cref="TryPop"/>
- /// once per item to be removed. Nodes fill the <paramref name="items"/>
- /// with the first node to be popped at the startIndex, the second node to be popped
- /// at startIndex + 1, and so on.
- /// </remarks>
- public int TryPopRange(T[] items)
- {
- if (items == null)
- {
- throw new ArgumentNullException(nameof(items));
- }
-
- return TryPopRange(items, 0, items.Length);
- }
-
- /// <summary>
- /// Attempts to pop and return multiple objects from the top of the <see cref="ConcurrentStack{T}"/>
- /// atomically.
- /// </summary>
- /// <param name="items">
- /// The <see cref="T:System.Array"/> to which objects popped from the top of the <see
- /// cref="ConcurrentStack{T}"/> will be added.
- /// </param>
- /// <param name="startIndex">The zero-based offset in <paramref name="items"/> at which to begin
- /// inserting elements from the top of the <see cref="ConcurrentStack{T}"/>.</param>
- /// <param name="count">The number of elements to be popped from top of the <see
- /// cref="ConcurrentStack{T}"/> and inserted into <paramref name="items"/>.</param>
- /// <returns>The number of objects successfully popped from the top of
- /// the <see cref="ConcurrentStack{T}"/> and inserted in <paramref name="items"/>.</returns>
- /// <exception cref="ArgumentNullException"><paramref name="items"/> is a null reference
- /// (Nothing in Visual Basic).</exception>
- /// <exception cref="ArgumentOutOfRangeException"><paramref name="startIndex"/> or <paramref
- /// name="count"/> is negative. Or <paramref name="startIndex"/> is greater than or equal to the length
- /// of <paramref name="items"/>.</exception>
- /// <exception cref="ArgumentException"><paramref name="startIndex"/> + <paramref name="count"/> is
- /// greater than the length of <paramref name="items"/>.</exception>
- /// <remarks>
- /// When popping multiple items, if there is little contention on the stack, using
- /// TryPopRange can be more efficient than using <see cref="TryPop"/>
- /// once per item to be removed. Nodes fill the <paramref name="items"/>
- /// with the first node to be popped at the startIndex, the second node to be popped
- /// at startIndex + 1, and so on.
- /// </remarks>
- public int TryPopRange(T[] items, int startIndex, int count)
- {
- ValidatePushPopRangeInput(items, startIndex, count);
-
- // No op if the count is zero
- if (count == 0)
- return 0;
-
- Node poppedHead;
- int nodesCount = TryPopCore(count, out poppedHead);
- if (nodesCount > 0)
- {
- CopyRemovedItems(poppedHead, items, startIndex, nodesCount);
-
- }
- return nodesCount;
-
- }
-
- /// <summary>
/// Local helper function to Pop an item from the stack, slow path
/// </summary>
/// <param name="result">The popped item</param>
@@ -648,42 +363,6 @@ namespace System.Collections.Concurrent
}
}
-
- /// <summary>
- /// Local helper function to copy the poped elements into a given collection
- /// </summary>
- /// <param name="head">The head of the list to be copied</param>
- /// <param name="collection">The collection to place the popped items in</param>
- /// <param name="startIndex">the beginning of index of where to place the popped items</param>
- /// <param name="nodesCount">The number of nodes.</param>
- private void CopyRemovedItems(Node head, T[] collection, int startIndex, int nodesCount)
- {
- Node current = head;
- for (int i = startIndex; i < startIndex + nodesCount; i++)
- {
- collection[i] = current.m_value;
- current = current.m_next;
- }
-
- }
-
- /// <summary>
- /// Attempts to remove and return an object from the <see
- /// cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>.
- /// </summary>
- /// <param name="item">
- /// When this method returns, if the operation was successful, <paramref name="item"/> contains the
- /// object removed. If no object was available to be removed, the value is unspecified.
- /// </param>
- /// <returns>true if an element was removed and returned succesfully; otherwise, false.</returns>
- /// <remarks>For <see cref="ConcurrentStack{T}"/>, this operation will attempt to pope the object at
- /// the top of the <see cref="ConcurrentStack{T}"/>.
- /// </remarks>
- bool IProducerConsumerCollection<T>.TryTake(out T item)
- {
- return TryPop(out item);
- }
-
/// <summary>
/// Copies the items stored in the <see cref="ConcurrentStack{T}"/> to a new array.
/// </summary>
diff --git a/src/mscorlib/src/System/Collections/Concurrent/IProducerConsumerCollection.cs b/src/mscorlib/src/System/Collections/Concurrent/IProducerConsumerCollection.cs
index 56be7759c9..0347ece0ec 100644
--- a/src/mscorlib/src/System/Collections/Concurrent/IProducerConsumerCollection.cs
+++ b/src/mscorlib/src/System/Collections/Concurrent/IProducerConsumerCollection.cs
@@ -25,9 +25,8 @@ namespace System.Collections.Concurrent
/// All implementations of this interface must enable all members of this interface
/// to be used concurrently from multiple threads.
/// </remarks>
- public interface IProducerConsumerCollection<T> : IEnumerable<T>, ICollection
+ internal interface IProducerConsumerCollection<T> : IEnumerable<T>, ICollection
{
-
/// <summary>
/// Copies the elements of the <see cref="IProducerConsumerCollection{T}"/> to
/// an
@@ -51,35 +50,12 @@ namespace System.Collections.Concurrent
void CopyTo(T[] array, int index);
/// <summary>
- /// Attempts to add an object to the <see
- /// cref="IProducerConsumerCollection{T}"/>.
- /// </summary>
- /// <param name="item">The object to add to the <see
- /// cref="IProducerConsumerCollection{T}"/>.</param>
- /// <returns>true if the object was added successfully; otherwise, false.</returns>
- /// <exception cref="T:System.ArgumentException">The <paramref name="item"/> was invalid for this collection.</exception>
- bool TryAdd(T item);
-
- /// <summary>
- /// Attempts to remove and return an object from the <see cref="IProducerConsumerCollection{T}"/>.
- /// </summary>
- /// <param name="item">
- /// When this method returns, if the object was removed and returned successfully, <paramref
- /// name="item"/> contains the removed object. If no object was available to be removed, the value is
- /// unspecified.
- /// </param>
- /// <returns>true if an object was removed and returned successfully; otherwise, false.</returns>
- bool TryTake(out T item);
-
- /// <summary>
/// Copies the elements contained in the <see cref="IProducerConsumerCollection{T}"/> to a new array.
/// </summary>
/// <returns>A new array containing the elements copied from the <see cref="IProducerConsumerCollection{T}"/>.</returns>
T[] ToArray();
-
}
-
/// <summary>
/// A debugger view of the IProducerConsumerCollection that makes it simple to browse the
/// collection's contents at a point in time.
@@ -89,28 +65,5 @@ namespace System.Collections.Concurrent
{
private IProducerConsumerCollection<T> m_collection; // The collection being viewed.
- /// <summary>
- /// Constructs a new debugger view object for the provided collection object.
- /// </summary>
- /// <param name="collection">A collection to browse in the debugger.</param>
- public SystemCollectionsConcurrent_ProducerConsumerCollectionDebugView(IProducerConsumerCollection<T> collection)
- {
- if (collection == null)
- {
- throw new ArgumentNullException(nameof(collection));
- }
-
- m_collection = collection;
- }
-
- /// <summary>
- /// Returns a snapshot of the underlying collection's elements.
- /// </summary>
- [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
- public T[] Items
- {
- get { return m_collection.ToArray(); }
- }
-
}
}
diff --git a/src/mscorlib/src/System/Collections/Concurrent/OrderablePartitioner.cs b/src/mscorlib/src/System/Collections/Concurrent/OrderablePartitioner.cs
deleted file mode 100644
index 33e3c88e9a..0000000000
--- a/src/mscorlib/src/System/Collections/Concurrent/OrderablePartitioner.cs
+++ /dev/null
@@ -1,280 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
-//
-//
-//
-//
-//
-// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-using System;
-using System.Collections.Generic;
-using System.Security.Permissions;
-using System.Threading;
-
-namespace System.Collections.Concurrent
-{
-
- /// <summary>
- /// Represents a particular manner of splitting an orderable data source into multiple partitions.
- /// </summary>
- /// <typeparam name="TSource">Type of the elements in the collection.</typeparam>
- /// <remarks>
- /// <para>
- /// Each element in each partition has an integer index associated with it, which determines the relative
- /// order of that element against elements in other partitions.
- /// </para>
- /// <para>
- /// Inheritors of <see cref="OrderablePartitioner{TSource}"/> must adhere to the following rules:
- /// <ol>
- /// <li>All indices must be unique, such that there may not be duplicate indices. If all indices are not
- /// unique, the output ordering may be scrambled.</li>
- /// <li>All indices must be non-negative. If any indices are negative, consumers of the implementation
- /// may throw exceptions.</li>
- /// <li><see cref="GetPartitions"/> and <see cref="GetOrderablePartitions"/> should throw a
- /// <see cref="T:System.ArgumentOutOfRangeException"/> if the requested partition count is less than or
- /// equal to zero.</li>
- /// <li><see cref="GetPartitions"/> and <see cref="GetOrderablePartitions"/> should always return a number
- /// of enumerables equal to the requested partition count. If the partitioner runs out of data and cannot
- /// create as many partitions as requested, an empty enumerator should be returned for each of the
- /// remaining partitions. If this rule is not followed, consumers of the implementation may throw a <see
- /// cref="T:System.InvalidOperationException"/>.</li>
- /// <li><see cref="GetPartitions"/>, <see cref="GetOrderablePartitions"/>,
- /// <see cref="GetDynamicPartitions"/>, and <see cref="GetOrderableDynamicPartitions"/>
- /// should never return null. If null is returned, a consumer of the implementation may throw a
- /// <see cref="T:System.InvalidOperationException"/>.</li>
- /// <li><see cref="GetPartitions"/>, <see cref="GetOrderablePartitions"/>,
- /// <see cref="GetDynamicPartitions"/>, and <see cref="GetOrderableDynamicPartitions"/>
- /// should always return partitions that can fully and uniquely enumerate the input data source. All of
- /// the data and only the data contained in the input source should be enumerated, with no duplication
- /// that was not already in the input, unless specifically required by the particular partitioner's
- /// design. If this is not followed, the output ordering may be scrambled.</li>
- /// <li>If <see cref="KeysOrderedInEachPartition"/> returns true, each partition must return elements
- /// with increasing key indices.</li>
- /// <li>If <see cref="KeysOrderedAcrossPartitions"/> returns true, all the keys in partition numbered N
- /// must be larger than all the keys in partition numbered N-1.</li>
- /// <li>If <see cref="KeysNormalized"/> returns true, all indices must be monotonically increasing from
- /// 0, though not necessarily within a single partition.</li>
- /// </ol>
- /// </para>
- /// </remarks>
- public abstract class OrderablePartitioner<TSource> : Partitioner<TSource>
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="OrderablePartitioner{TSource}"/> class with the
- /// specified constraints on the index keys.
- /// </summary>
- /// <param name="keysOrderedInEachPartition">
- /// Indicates whether the elements in each partition are yielded in the order of
- /// increasing keys.
- /// </param>
- /// <param name="keysOrderedAcrossPartitions">
- /// Indicates whether elements in an earlier partition always come before
- /// elements in a later partition. If true, each element in partition 0 has a smaller order key than
- /// any element in partition 1, each element in partition 1 has a smaller order key than any element
- /// in partition 2, and so on.
- /// </param>
- /// <param name="keysNormalized">
- /// Indicates whether keys are normalized. If true, all order keys are distinct
- /// integers in the range [0 .. numberOfElements-1]. If false, order keys must still be dictinct, but
- /// only their relative order is considered, not their absolute values.
- /// </param>
- protected OrderablePartitioner(bool keysOrderedInEachPartition, bool keysOrderedAcrossPartitions, bool keysNormalized)
- {
- KeysOrderedInEachPartition = keysOrderedInEachPartition;
- KeysOrderedAcrossPartitions = keysOrderedAcrossPartitions;
- KeysNormalized = keysNormalized;
- }
-
- /// <summary>
- /// Partitions the underlying collection into the specified number of orderable partitions.
- /// </summary>
- /// <remarks>
- /// Each partition is represented as an enumerator over key-value pairs.
- /// The value of the pair is the element itself, and the key is an integer which determines
- /// the relative ordering of this element against other elements in the data source.
- /// </remarks>
- /// <param name="partitionCount">The number of partitions to create.</param>
- /// <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
- public abstract IList<IEnumerator<KeyValuePair<long, TSource>>> GetOrderablePartitions(int partitionCount);
-
- /// <summary>
- /// Creates an object that can partition the underlying collection into a variable number of
- /// partitions.
- /// </summary>
- /// <remarks>
- /// <para>
- /// The returned object implements the <see
- /// cref="T:System.Collections.Generic.IEnumerable{TSource}"/> interface. Calling <see
- /// cref="System.Collections.Generic.IEnumerable{TSource}.GetEnumerator">GetEnumerator</see> on the
- /// object creates another partition over the sequence.
- /// </para>
- /// <para>
- /// Each partition is represented as an enumerator over key-value pairs. The value in the pair is the element
- /// itself, and the key is an integer which determines the relative ordering of this element against
- /// other elements.
- /// </para>
- /// <para>
- /// The <see cref="GetOrderableDynamicPartitions"/> method is only supported if the <see
- /// cref="System.Collections.Concurrent.Partitioner{TSource}.SupportsDynamicPartitions">SupportsDynamicPartitions</see>
- /// property returns true.
- /// </para>
- /// </remarks>
- /// <returns>An object that can create partitions over the underlying data source.</returns>
- /// <exception cref="NotSupportedException">Dynamic partitioning is not supported by this
- /// partitioner.</exception>
- public virtual IEnumerable<KeyValuePair<long, TSource>> GetOrderableDynamicPartitions()
- {
- throw new NotSupportedException(Environment.GetResourceString("Partitioner_DynamicPartitionsNotSupported"));
- }
-
- /// <summary>
- /// Gets whether elements in each partition are yielded in the order of increasing keys.
- /// </summary>
- public bool KeysOrderedInEachPartition { get; private set; }
-
- /// <summary>
- /// Gets whether elements in an earlier partition always come before elements in a later partition.
- /// </summary>
- /// <remarks>
- /// If <see cref="KeysOrderedAcrossPartitions"/> returns true, each element in partition 0 has a
- /// smaller order key than any element in partition 1, each element in partition 1 has a smaller
- /// order key than any element in partition 2, and so on.
- /// </remarks>
- public bool KeysOrderedAcrossPartitions { get; private set; }
-
- /// <summary>
- /// Gets whether order keys are normalized.
- /// </summary>
- /// <remarks>
- /// If <see cref="KeysNormalized"/> returns true, all order keys are distinct integers in the range
- /// [0 .. numberOfElements-1]. If the property returns false, order keys must still be dictinct, but
- /// only their relative order is considered, not their absolute values.
- /// </remarks>
- public bool KeysNormalized { get; private set; }
-
- /// <summary>
- /// Partitions the underlying collection into the given number of ordered partitions.
- /// </summary>
- /// <remarks>
- /// The default implementation provides the same behavior as <see cref="GetOrderablePartitions"/> except
- /// that the returned set of partitions does not provide the keys for the elements.
- /// </remarks>
- /// <param name="partitionCount">The number of partitions to create.</param>
- /// <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
- public override IList<IEnumerator<TSource>> GetPartitions(int partitionCount)
- {
- IList<IEnumerator<KeyValuePair<long, TSource>>> orderablePartitions = GetOrderablePartitions(partitionCount);
-
- if (orderablePartitions.Count != partitionCount)
- {
- throw new InvalidOperationException("OrderablePartitioner_GetPartitions_WrongNumberOfPartitions");
- }
-
- IEnumerator<TSource>[] partitions = new IEnumerator<TSource>[partitionCount];
- for (int i = 0; i < partitionCount; i++)
- {
- partitions[i] = new EnumeratorDropIndices(orderablePartitions[i]);
- }
- return partitions;
- }
-
- /// <summary>
- /// Creates an object that can partition the underlying collection into a variable number of
- /// partitions.
- /// </summary>
- /// <remarks>
- /// <para>
- /// The returned object implements the <see
- /// cref="T:System.Collections.Generic.IEnumerable{TSource}"/> interface. Calling <see
- /// cref="System.Collections.Generic.IEnumerable{TSource}.GetEnumerator">GetEnumerator</see> on the
- /// object creates another partition over the sequence.
- /// </para>
- /// <para>
- /// The default implementation provides the same behavior as <see cref="GetOrderableDynamicPartitions"/> except
- /// that the returned set of partitions does not provide the keys for the elements.
- /// </para>
- /// <para>
- /// The <see cref="GetDynamicPartitions"/> method is only supported if the <see
- /// cref="System.Collections.Concurrent.Partitioner{TSource}.SupportsDynamicPartitions"/>
- /// property returns true.
- /// </para>
- /// </remarks>
- /// <returns>An object that can create partitions over the underlying data source.</returns>
- /// <exception cref="NotSupportedException">Dynamic partitioning is not supported by this
- /// partitioner.</exception>
- public override IEnumerable<TSource> GetDynamicPartitions()
- {
- IEnumerable<KeyValuePair<long, TSource>> orderablePartitions = GetOrderableDynamicPartitions();
- return new EnumerableDropIndices(orderablePartitions);
- }
-
- /// <summary>
- /// Converts an enumerable over key-value pairs to an enumerable over values.
- /// </summary>
- private class EnumerableDropIndices : IEnumerable<TSource>, IDisposable
- {
- private readonly IEnumerable<KeyValuePair<long, TSource>> m_source;
- public EnumerableDropIndices(IEnumerable<KeyValuePair<long, TSource>> source)
- {
- m_source = source;
- }
- public IEnumerator<TSource> GetEnumerator()
- {
- return new EnumeratorDropIndices(m_source.GetEnumerator());
- }
- IEnumerator IEnumerable.GetEnumerator()
- {
- return ((EnumerableDropIndices)this).GetEnumerator();
- }
- public void Dispose()
- {
- IDisposable d = m_source as IDisposable;
- if (d != null)
- {
- d.Dispose();
- }
- }
- }
-
- private class EnumeratorDropIndices : IEnumerator<TSource>
- {
- private readonly IEnumerator<KeyValuePair<long, TSource>> m_source;
- public EnumeratorDropIndices(IEnumerator<KeyValuePair<long, TSource>> source)
- {
- m_source = source;
- }
- public bool MoveNext()
- {
- return m_source.MoveNext();
- }
- public TSource Current
- {
- get
- {
- return m_source.Current.Value;
- }
- }
- Object IEnumerator.Current
- {
- get
- {
- return ((EnumeratorDropIndices)this).Current;
- }
- }
- public void Dispose()
- {
- m_source.Dispose();
- }
- public void Reset()
- {
- m_source.Reset();
- }
- }
-
- }
-
-}
diff --git a/src/mscorlib/src/System/Collections/Concurrent/Partitioner.cs b/src/mscorlib/src/System/Collections/Concurrent/Partitioner.cs
deleted file mode 100644
index 0192b1942c..0000000000
--- a/src/mscorlib/src/System/Collections/Concurrent/Partitioner.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
-//
-//
-//
-// Represents a particular way of splitting a collection into multiple partitions.
-//
-// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-using System;
-using System.Collections.Generic;
-using System.Security.Permissions;
-using System.Threading;
-
-namespace System.Collections.Concurrent
-{
- /// <summary>
- /// Represents a particular manner of splitting a data source into multiple partitions.
- /// </summary>
- /// <typeparam name="TSource">Type of the elements in the collection.</typeparam>
- /// <remarks>
- /// <para>
- /// Inheritors of <see cref="Partitioner{TSource}"/> must adhere to the following rules:
- /// <ol>
- /// <li><see cref="GetPartitions"/> should throw a
- /// <see cref="T:System.ArgumentOutOfRangeException"/> if the requested partition count is less than or
- /// equal to zero.</li>
- /// <li><see cref="GetPartitions"/> should always return a number of enumerables equal to the requested
- /// partition count. If the partitioner runs out of data and cannot create as many partitions as
- /// requested, an empty enumerator should be returned for each of the remaining partitions. If this rule
- /// is not followed, consumers of the implementation may throw a <see
- /// cref="T:System.InvalidOperationException"/>.</li>
- /// <li><see cref="GetPartitions"/> and <see cref="GetDynamicPartitions"/>
- /// should never return null. If null is returned, a consumer of the implementation may throw a
- /// <see cref="T:System.InvalidOperationException"/>.</li>
- /// <li><see cref="GetPartitions"/> and <see cref="GetDynamicPartitions"/> should always return
- /// partitions that can fully and uniquely enumerate the input data source. All of the data and only the
- /// data contained in the input source should be enumerated, with no duplication that was not already in
- /// the input, unless specifically required by the particular partitioner's design. If this is not
- /// followed, the output ordering may be scrambled.</li>
- /// </ol>
- /// </para>
- /// </remarks>
- public abstract class Partitioner<TSource>
- {
- /// <summary>
- /// Partitions the underlying collection into the given number of partitions.
- /// </summary>
- /// <param name="partitionCount">The number of partitions to create.</param>
- /// <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
- public abstract IList<IEnumerator<TSource>> GetPartitions(int partitionCount);
-
- /// <summary>
- /// Gets whether additional partitions can be created dynamically.
- /// </summary>
- /// <returns>
- /// true if the <see cref="Partitioner{TSource}"/> can create partitions dynamically as they are
- /// requested; false if the <see cref="Partitioner{TSource}"/> can only allocate
- /// partitions statically.
- /// </returns>
- /// <remarks>
- /// <para>
- /// If a derived class does not override and implement <see cref="GetDynamicPartitions"/>,
- /// <see cref="SupportsDynamicPartitions"/> should return false. The value of <see
- /// cref="SupportsDynamicPartitions"/> should not vary over the lifetime of this instance.
- /// </para>
- /// </remarks>
- public virtual bool SupportsDynamicPartitions
- {
- get { return false; }
- }
-
- /// <summary>
- /// Creates an object that can partition the underlying collection into a variable number of
- /// partitions.
- /// </summary>
- /// <remarks>
- /// <para>
- /// The returned object implements the <see
- /// cref="T:System.Collections.Generic.IEnumerable{TSource}"/> interface. Calling <see
- /// cref="System.Collections.Generic.IEnumerable{TSource}.GetEnumerator">GetEnumerator</see> on the
- /// object creates another partition over the sequence.
- /// </para>
- /// <para>
- /// The <see cref="GetDynamicPartitions"/> method is only supported if the <see
- /// cref="SupportsDynamicPartitions"/>
- /// property returns true.
- /// </para>
- /// </remarks>
- /// <returns>An object that can create partitions over the underlying data source.</returns>
- /// <exception cref="NotSupportedException">Dynamic partitioning is not supported by this
- /// partitioner.</exception>
- public virtual IEnumerable<TSource> GetDynamicPartitions()
- {
- throw new NotSupportedException(Environment.GetResourceString("Partitioner_DynamicPartitionsNotSupported"));
- }
- }
-}
diff --git a/src/mscorlib/src/System/Collections/Concurrent/PartitionerStatic.cs b/src/mscorlib/src/System/Collections/Concurrent/PartitionerStatic.cs
deleted file mode 100644
index 9b36c053ad..0000000000
--- a/src/mscorlib/src/System/Collections/Concurrent/PartitionerStatic.cs
+++ /dev/null
@@ -1,1715 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-#pragma warning disable 0420
-
-// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
-//
-//
-//
-// A class of default partitioners for Partitioner<TSource>
-//
-// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-using System.Collections.Generic;
-using System.Security.Permissions;
-using System.Threading;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.Runtime.InteropServices;
-
-namespace System.Collections.Concurrent
-{
- /// <summary>
- /// Out-of-the-box partitioners are created with a set of default behaviors.
- /// For example, by default, some form of buffering and chunking will be employed to achieve
- /// optimal performance in the common scenario where an IEnumerable<> implementation is fast and
- /// non-blocking. These behaviors can be overridden via this enumeration.
- /// </summary>
- [Flags]
- public enum EnumerablePartitionerOptions
- {
- /// <summary>
- /// Use the default behavior (i.e., use buffering to achieve optimal performance)
- /// </summary>
- None = 0x0,
-
- /// <summary>
- /// Creates a partitioner that will take items from the source enumerable one at a time
- /// and will not use intermediate storage that can be accessed more efficiently by multiple threads.
- /// This option provides support for low latency (items will be processed as soon as they are available from
- /// the source) and partial support for dependencies between items (a thread cannot deadlock waiting for an item
- /// that it, itself, is responsible for processing).
- /// </summary>
- NoBuffering = 0x1
- }
-
- // The static class Partitioners implements 3 default partitioning strategies:
- // 1. dynamic load balance partitioning for indexable data source (IList and arrays)
- // 2. static partitioning for indexable data source (IList and arrays)
- // 3. dynamic load balance partitioning for enumerables. Enumerables have indexes, which are the natural order
- // of elements, but enuemrators are not indexable
- // - data source of type IList/arrays have both dynamic and static partitioning, as 1 and 3.
- // We assume that the source data of IList/Array is not changing concurrently.
- // - data source of type IEnumerable can only be partitioned dynamically (load-balance)
- // - Dynamic partitioning methods 1 and 3 are same, both being dynamic and load-balance. But the
- // implementation is different for data source of IList/Array vs. IEnumerable:
- // * When the source collection is IList/Arrays, we use Interlocked on the shared index;
- // * When the source collection is IEnumerable, we use Monitor to wrap around the access to the source
- // enumerator.
-
- /// <summary>
- /// Provides common partitioning strategies for arrays, lists, and enumerables.
- /// </summary>
- /// <remarks>
- /// <para>
- /// The static methods on <see cref="Partitioner"/> are all thread-safe and may be used concurrently
- /// from multiple threads. However, while a created partitioner is in use, the underlying data source
- /// should not be modified, whether from the same thread that's using a partitioner or from a separate
- /// thread.
- /// </para>
- /// </remarks>
- public static class Partitioner
- {
- /// <summary>
- /// Creates an orderable partitioner from an <see cref="System.Collections.Generic.IList{T}"/>
- /// instance.
- /// </summary>
- /// <typeparam name="TSource">Type of the elements in source list.</typeparam>
- /// <param name="list">The list to be partitioned.</param>
- /// <param name="loadBalance">
- /// A Boolean value that indicates whether the created partitioner should dynamically
- /// load balance between partitions rather than statically partition.
- /// </param>
- /// <returns>
- /// An orderable partitioner based on the input list.
- /// </returns>
- public static OrderablePartitioner<TSource> Create<TSource>(IList<TSource> list, bool loadBalance)
- {
- if (list == null)
- {
- throw new ArgumentNullException(nameof(list));
- }
- if (loadBalance)
- {
- return (new DynamicPartitionerForIList<TSource>(list));
- }
- else
- {
- return (new StaticIndexRangePartitionerForIList<TSource>(list));
- }
- }
-
- /// <summary>
- /// Creates an orderable partitioner from a <see cref="System.Array"/> instance.
- /// </summary>
- /// <typeparam name="TSource">Type of the elements in source array.</typeparam>
- /// <param name="array">The array to be partitioned.</param>
- /// <param name="loadBalance">
- /// A Boolean value that indicates whether the created partitioner should dynamically load balance
- /// between partitions rather than statically partition.
- /// </param>
- /// <returns>
- /// An orderable partitioner based on the input array.
- /// </returns>
- public static OrderablePartitioner<TSource> Create<TSource>(TSource[] array, bool loadBalance)
- {
- // This implementation uses 'ldelem' instructions for element retrieval, rather than using a
- // method call.
-
- if (array == null)
- {
- throw new ArgumentNullException(nameof(array));
- }
- if (loadBalance)
- {
- return (new DynamicPartitionerForArray<TSource>(array));
- }
- else
- {
- return (new StaticIndexRangePartitionerForArray<TSource>(array));
- }
- }
-
- /// <summary>
- /// Creates an orderable partitioner from a <see cref="System.Collections.Generic.IEnumerable{TSource}"/> instance.
- /// </summary>
- /// <typeparam name="TSource">Type of the elements in source enumerable.</typeparam>
- /// <param name="source">The enumerable to be partitioned.</param>
- /// <returns>
- /// An orderable partitioner based on the input array.
- /// </returns>
- /// <remarks>
- /// The ordering used in the created partitioner is determined by the natural order of the elements
- /// as retrieved from the source enumerable.
- /// </remarks>
- public static OrderablePartitioner<TSource> Create<TSource>(IEnumerable<TSource> source)
- {
- return Create<TSource>(source, EnumerablePartitionerOptions.None);
- }
-
- /// <summary>
- /// Creates an orderable partitioner from a <see cref="System.Collections.Generic.IEnumerable{TSource}"/> instance.
- /// </summary>
- /// <typeparam name="TSource">Type of the elements in source enumerable.</typeparam>
- /// <param name="source">The enumerable to be partitioned.</param>
- /// <param name="partitionerOptions">Options to control the buffering behavior of the partitioner.</param>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The <paramref name="partitionerOptions"/> argument specifies an invalid value for <see
- /// cref="T:System.Collections.Concurrent.EnumerablePartitionerOptions"/>.
- /// </exception>
- /// <returns>
- /// An orderable partitioner based on the input array.
- /// </returns>
- /// <remarks>
- /// The ordering used in the created partitioner is determined by the natural order of the elements
- /// as retrieved from the source enumerable.
- /// </remarks>
- public static OrderablePartitioner<TSource> Create<TSource>(IEnumerable<TSource> source, EnumerablePartitionerOptions partitionerOptions)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
-
- if ((partitionerOptions & (~EnumerablePartitionerOptions.NoBuffering)) != 0)
- throw new ArgumentOutOfRangeException(nameof(partitionerOptions));
-
- return (new DynamicPartitionerForIEnumerable<TSource>(source, partitionerOptions));
- }
-
- /// <summary>Creates a partitioner that chunks the user-specified range.</summary>
- /// <param name="fromInclusive">The lower, inclusive bound of the range.</param>
- /// <param name="toExclusive">The upper, exclusive bound of the range.</param>
- /// <returns>A partitioner.</returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException"> The <paramref name="toExclusive"/> argument is
- /// less than or equal to the <paramref name="fromInclusive"/> argument.</exception>
- public static OrderablePartitioner<Tuple<long, long>> Create(long fromInclusive, long toExclusive)
- {
- // How many chunks do we want to divide the range into? If this is 1, then the
- // answer is "one chunk per core". Generally, though, you'll achieve better
- // load balancing on a busy system if you make it higher than 1.
- int coreOversubscriptionRate = 3;
-
- if (toExclusive <= fromInclusive) throw new ArgumentOutOfRangeException(nameof(toExclusive));
- long rangeSize = (toExclusive - fromInclusive) /
- (PlatformHelper.ProcessorCount * coreOversubscriptionRate);
- if (rangeSize == 0) rangeSize = 1;
- return Partitioner.Create(CreateRanges(fromInclusive, toExclusive, rangeSize), EnumerablePartitionerOptions.NoBuffering); // chunk one range at a time
- }
-
- /// <summary>Creates a partitioner that chunks the user-specified range.</summary>
- /// <param name="fromInclusive">The lower, inclusive bound of the range.</param>
- /// <param name="toExclusive">The upper, exclusive bound of the range.</param>
- /// <param name="rangeSize">The size of each subrange.</param>
- /// <returns>A partitioner.</returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException"> The <paramref name="toExclusive"/> argument is
- /// less than or equal to the <paramref name="fromInclusive"/> argument.</exception>
- /// <exception cref="T:System.ArgumentOutOfRangeException"> The <paramref name="rangeSize"/> argument is
- /// less than or equal to 0.</exception>
- public static OrderablePartitioner<Tuple<long, long>> Create(long fromInclusive, long toExclusive, long rangeSize)
- {
- if (toExclusive <= fromInclusive) throw new ArgumentOutOfRangeException(nameof(toExclusive));
- if (rangeSize <= 0) throw new ArgumentOutOfRangeException(nameof(rangeSize));
- return Partitioner.Create(CreateRanges(fromInclusive, toExclusive, rangeSize), EnumerablePartitionerOptions.NoBuffering); // chunk one range at a time
- }
-
- // Private method to parcel out range tuples.
- private static IEnumerable<Tuple<long, long>> CreateRanges(long fromInclusive, long toExclusive, long rangeSize)
- {
- // Enumerate all of the ranges
- long from, to;
- bool shouldQuit = false;
-
- for (long i = fromInclusive; (i < toExclusive) && !shouldQuit; i += rangeSize)
- {
- from = i;
- try { checked { to = i + rangeSize; } }
- catch (OverflowException)
- {
- to = toExclusive;
- shouldQuit = true;
- }
- if (to > toExclusive) to = toExclusive;
- yield return new Tuple<long, long>(from, to);
- }
- }
-
- /// <summary>Creates a partitioner that chunks the user-specified range.</summary>
- /// <param name="fromInclusive">The lower, inclusive bound of the range.</param>
- /// <param name="toExclusive">The upper, exclusive bound of the range.</param>
- /// <returns>A partitioner.</returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException"> The <paramref name="toExclusive"/> argument is
- /// less than or equal to the <paramref name="fromInclusive"/> argument.</exception>
- public static OrderablePartitioner<Tuple<int, int>> Create(int fromInclusive, int toExclusive)
- {
- // How many chunks do we want to divide the range into? If this is 1, then the
- // answer is "one chunk per core". Generally, though, you'll achieve better
- // load balancing on a busy system if you make it higher than 1.
- int coreOversubscriptionRate = 3;
-
- if (toExclusive <= fromInclusive) throw new ArgumentOutOfRangeException(nameof(toExclusive));
- int rangeSize = (toExclusive - fromInclusive) /
- (PlatformHelper.ProcessorCount * coreOversubscriptionRate);
- if (rangeSize == 0) rangeSize = 1;
- return Partitioner.Create(CreateRanges(fromInclusive, toExclusive, rangeSize), EnumerablePartitionerOptions.NoBuffering); // chunk one range at a time
- }
-
- /// <summary>Creates a partitioner that chunks the user-specified range.</summary>
- /// <param name="fromInclusive">The lower, inclusive bound of the range.</param>
- /// <param name="toExclusive">The upper, exclusive bound of the range.</param>
- /// <param name="rangeSize">The size of each subrange.</param>
- /// <returns>A partitioner.</returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException"> The <paramref name="toExclusive"/> argument is
- /// less than or equal to the <paramref name="fromInclusive"/> argument.</exception>
- /// <exception cref="T:System.ArgumentOutOfRangeException"> The <paramref name="rangeSize"/> argument is
- /// less than or equal to 0.</exception>
- public static OrderablePartitioner<Tuple<int, int>> Create(int fromInclusive, int toExclusive, int rangeSize)
- {
- if (toExclusive <= fromInclusive) throw new ArgumentOutOfRangeException(nameof(toExclusive));
- if (rangeSize <= 0) throw new ArgumentOutOfRangeException(nameof(rangeSize));
- return Partitioner.Create(CreateRanges(fromInclusive, toExclusive, rangeSize), EnumerablePartitionerOptions.NoBuffering); // chunk one range at a time
- }
-
- // Private method to parcel out range tuples.
- private static IEnumerable<Tuple<int, int>> CreateRanges(int fromInclusive, int toExclusive, int rangeSize)
- {
- // Enumerate all of the ranges
- int from, to;
- bool shouldQuit = false;
-
- for (int i = fromInclusive; (i < toExclusive) && !shouldQuit; i += rangeSize)
- {
- from = i;
- try { checked { to = i + rangeSize; } }
- catch (OverflowException)
- {
- to = toExclusive;
- shouldQuit = true;
- }
- if (to > toExclusive) to = toExclusive;
- yield return new Tuple<int, int>(from, to);
- }
- }
-
- #region DynamicPartitionEnumerator_Abstract class
- /// <summary>
- /// DynamicPartitionEnumerator_Abstract defines the enumerator for each partition for the dynamic load-balance
- /// partitioning algorithm.
- /// - Partition is an enumerator of KeyValuePairs, each corresponding to an item in the data source:
- /// the key is the index in the source collection; the value is the item itself.
- /// - a set of such partitions share a reader over data source. The type of the reader is specified by
- /// TSourceReader.
- /// - each partition requests a contiguous chunk of elements at a time from the source data. The chunk
- /// size is initially 1, and doubles every time until it reaches the maximum chunk size.
- /// The implementation for GrabNextChunk() method has two versions: one for data source of IndexRange
- /// types (IList and the array), one for data source of IEnumerable.
- /// - The method "Reset" is not supported for any partitioning algorithm.
- /// - The implementation for MoveNext() method is same for all dynanmic partitioners, so we provide it
- /// in this abstract class.
- /// </summary>
- /// <typeparam name="TSource">Type of the elements in the data source</typeparam>
- /// <typeparam name="TSourceReader">Type of the reader on the data source</typeparam>
- //TSourceReader is
- // - IList<TSource>, when source data is IList<TSource>, the shared reader is source data itself
- // - TSource[], when source data is TSource[], the shared reader is source data itself
- // - IEnumerator<TSource>, when source data is IEnumerable<TSource>, and the shared reader is an
- // enumerator of the source data
- private abstract class DynamicPartitionEnumerator_Abstract<TSource, TSourceReader> : IEnumerator<KeyValuePair<long, TSource>>
- {
- //----------------- common fields and constructor for all dynamic partitioners -----------------
- //--- shared by all dervied class with souce data type: IList, Array, and IEnumerator
- protected readonly TSourceReader m_sharedReader;
-
- protected static int s_defaultMaxChunkSize = GetDefaultChunkSize<TSource>();
-
- //deferred allocating in MoveNext() with initial value 0, to avoid false sharing
- //we also use the fact that: (m_currentChunkSize==null) means MoveNext is never called on this enumerator
- protected SharedInt m_currentChunkSize;
-
- //deferring allocation in MoveNext() with initial value -1, to avoid false sharing
- protected SharedInt m_localOffset;
-
- private const int CHUNK_DOUBLING_RATE = 3; // Double the chunk size every this many grabs
- private int m_doublingCountdown; // Number of grabs remaining until chunk size doubles
- protected readonly int m_maxChunkSize; // s_defaultMaxChunkSize unless single-chunking is requested by the caller
-
- // m_sharedIndex shared by this set of partitions, and particularly when m_sharedReader is IEnuerable
- // it serves as tracking of the natual order of elements in m_sharedReader
- // the value of this field is passed in from outside (already initialized) by the constructor,
- protected readonly SharedLong m_sharedIndex;
-
- protected DynamicPartitionEnumerator_Abstract(TSourceReader sharedReader, SharedLong sharedIndex)
- : this(sharedReader, sharedIndex, false)
- {
- }
-
- protected DynamicPartitionEnumerator_Abstract(TSourceReader sharedReader, SharedLong sharedIndex, bool useSingleChunking)
- {
- m_sharedReader = sharedReader;
- m_sharedIndex = sharedIndex;
- m_maxChunkSize = useSingleChunking ? 1 : s_defaultMaxChunkSize;
- }
-
- // ---------------- abstract method declarations --------------
-
- /// <summary>
- /// Abstract method to request a contiguous chunk of elements from the source collection
- /// </summary>
- /// <param name="requestedChunkSize">specified number of elements requested</param>
- /// <returns>
- /// true if we successfully reserved at least one element (up to #=requestedChunkSize)
- /// false if all elements in the source collection have been reserved.
- /// </returns>
- //GrabNextChunk does the following:
- // - grab # of requestedChunkSize elements from source data through shared reader,
- // - at the time of function returns, m_currentChunkSize is updated with the number of
- // elements actually got assigned (<=requestedChunkSize).
- // - GrabNextChunk returns true if at least one element is assigned to this partition;
- // false if the shared reader already hits the last element of the source data before
- // we call GrabNextChunk
- protected abstract bool GrabNextChunk(int requestedChunkSize);
-
- /// <summary>
- /// Abstract property, returns whether or not the shared reader has already read the last
- /// element of the source data
- /// </summary>
- protected abstract bool HasNoElementsLeft { get; set; }
-
- /// <summary>
- /// Get the current element in the current partition. Property required by IEnumerator interface
- /// This property is abstract because the implementation is different depending on the type
- /// of the source data: IList, Array or IEnumerable
- /// </summary>
- public abstract KeyValuePair<long, TSource> Current { get; }
-
- /// <summary>
- /// Dispose is abstract, and depends on the type of the source data:
- /// - For source data type IList and Array, the type of the shared reader is just the dataitself.
- /// We don't do anything in Dispose method for IList and Array.
- /// - For source data type IEnumerable, the type of the shared reader is an enumerator we created.
- /// Thus we need to dispose this shared reader enumerator, when there is no more active partitions
- /// left.
- /// </summary>
- public abstract void Dispose();
-
- /// <summary>
- /// Reset on partitions is not supported
- /// </summary>
- public void Reset()
- {
- throw new NotSupportedException();
- }
-
-
- /// <summary>
- /// Get the current element in the current partition. Property required by IEnumerator interface
- /// </summary>
- Object IEnumerator.Current
- {
- get
- {
- return ((DynamicPartitionEnumerator_Abstract<TSource, TSourceReader>)this).Current;
- }
- }
-
- /// <summary>
- /// Moves to the next element if any.
- /// Try current chunk first, if the current chunk do not have any elements left, then we
- /// attempt to grab a chunk from the source collection.
- /// </summary>
- /// <returns>
- /// true if successfully moving to the next position;
- /// false otherwise, if and only if there is no more elements left in the current chunk
- /// AND the source collection is exhausted.
- /// </returns>
- public bool MoveNext()
- {
- //perform deferred allocating of the local variables.
- if (m_localOffset == null)
- {
- Debug.Assert(m_currentChunkSize == null);
- m_localOffset = new SharedInt(-1);
- m_currentChunkSize = new SharedInt(0);
- m_doublingCountdown = CHUNK_DOUBLING_RATE;
- }
-
- if (m_localOffset.Value < m_currentChunkSize.Value - 1)
- //attempt to grab the next element from the local chunk
- {
- m_localOffset.Value++;
- return true;
- }
- else
- //otherwise it means we exhausted the local chunk
- //grab a new chunk from the source enumerator
- {
- // The second part of the || condition is necessary to handle the case when MoveNext() is called
- // after a previous MoveNext call returned false.
- Debug.Assert(m_localOffset.Value == m_currentChunkSize.Value - 1 || m_currentChunkSize.Value == 0);
-
- //set the requested chunk size to a proper value
- int requestedChunkSize;
- if (m_currentChunkSize.Value == 0) //first time grabbing from source enumerator
- {
- requestedChunkSize = 1;
- }
- else if (m_doublingCountdown > 0)
- {
- requestedChunkSize = m_currentChunkSize.Value;
- }
- else
- {
- requestedChunkSize = Math.Min(m_currentChunkSize.Value * 2, m_maxChunkSize);
- m_doublingCountdown = CHUNK_DOUBLING_RATE; // reset
- }
-
- // Decrement your doubling countdown
- m_doublingCountdown--;
-
- Debug.Assert(requestedChunkSize > 0 && requestedChunkSize <= m_maxChunkSize);
- //GrabNextChunk will update the value of m_currentChunkSize
- if (GrabNextChunk(requestedChunkSize))
- {
- Debug.Assert(m_currentChunkSize.Value <= requestedChunkSize && m_currentChunkSize.Value > 0);
- m_localOffset.Value = 0;
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- }
- #endregion
-
- #region Dynamic Partitioner for source data of IEnuemrable<> type
- /// <summary>
- /// Inherits from DynamicPartitioners
- /// Provides customized implementation of GetOrderableDynamicPartitions_Factory method, to return an instance
- /// of EnumerableOfPartitionsForIEnumerator defined internally
- /// </summary>
- /// <typeparam name="TSource">Type of elements in the source data</typeparam>
- private class DynamicPartitionerForIEnumerable<TSource> : OrderablePartitioner<TSource>
- {
- IEnumerable<TSource> m_source;
- readonly bool m_useSingleChunking;
-
- //constructor
- internal DynamicPartitionerForIEnumerable(IEnumerable<TSource> source, EnumerablePartitionerOptions partitionerOptions)
- : base(true, false, true)
- {
- m_source = source;
- m_useSingleChunking = ((partitionerOptions & EnumerablePartitionerOptions.NoBuffering) != 0);
- }
-
- /// <summary>
- /// Overrides OrderablePartitioner.GetOrderablePartitions.
- /// Partitions the underlying collection into the given number of orderable partitions.
- /// </summary>
- /// <param name="partitionCount">number of partitions requested</param>
- /// <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
- override public IList<IEnumerator<KeyValuePair<long, TSource>>> GetOrderablePartitions(int partitionCount)
- {
- if (partitionCount <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(partitionCount));
- }
- IEnumerator<KeyValuePair<long, TSource>>[] partitions
- = new IEnumerator<KeyValuePair<long, TSource>>[partitionCount];
-
- IEnumerable<KeyValuePair<long, TSource>> partitionEnumerable = new InternalPartitionEnumerable(m_source.GetEnumerator(), m_useSingleChunking, true);
- for (int i = 0; i < partitionCount; i++)
- {
- partitions[i] = partitionEnumerable.GetEnumerator();
- }
- return partitions;
- }
-
- /// <summary>
- /// Overrides OrderablePartitioner.GetOrderableDyanmicPartitions
- /// </summary>
- /// <returns>a enumerable collection of orderable partitions</returns>
- override public IEnumerable<KeyValuePair<long, TSource>> GetOrderableDynamicPartitions()
- {
- return new InternalPartitionEnumerable(m_source.GetEnumerator(), m_useSingleChunking, false);
- }
-
- /// <summary>
- /// Whether additional partitions can be created dynamically.
- /// </summary>
- override public bool SupportsDynamicPartitions
- {
- get { return true; }
- }
-
- #region Internal classes: InternalPartitionEnumerable, InternalPartitionEnumerator
- /// <summary>
- /// Provides customized implementation for source data of IEnumerable
- /// Different from the counterpart for IList/Array, this enumerable maintains several additional fields
- /// shared by the partitions it owns, including a boolean "m_hasNoElementsLef", a shared lock, and a
- /// shared count "m_activePartitionCount" used to track active partitions when they were created statically
- /// </summary>
- private class InternalPartitionEnumerable : IEnumerable<KeyValuePair<long, TSource>>, IDisposable
- {
- //reader through which we access the source data
- private readonly IEnumerator<TSource> m_sharedReader;
- private SharedLong m_sharedIndex;//initial value -1
-
- private volatile KeyValuePair<long, TSource>[] m_FillBuffer; // intermediate buffer to reduce locking
- private volatile int m_FillBufferSize; // actual number of elements in m_FillBuffer. Will start
- // at m_FillBuffer.Length, and might be reduced during the last refill
- private volatile int m_FillBufferCurrentPosition; //shared value to be accessed by Interlock.Increment only
- private volatile int m_activeCopiers; //number of active copiers
-
- //fields shared by all partitions that this Enumerable owns, their allocation is deferred
- private SharedBool m_hasNoElementsLeft; // no elements left at all.
- private SharedBool m_sourceDepleted; // no elements left in the enumerator, but there may be elements in the Fill Buffer
-
- //shared synchronization lock, created by this Enumerable
- private object m_sharedLock;//deferring allocation by enumerator
-
- private bool m_disposed;
-
- // If dynamic partitioning, then m_activePartitionCount == null
- // If static partitioning, then it keeps track of active partition count
- private SharedInt m_activePartitionCount;
-
- // records whether or not the user has requested single-chunking behavior
- private readonly bool m_useSingleChunking;
-
- internal InternalPartitionEnumerable(IEnumerator<TSource> sharedReader, bool useSingleChunking, bool isStaticPartitioning)
- {
- m_sharedReader = sharedReader;
- m_sharedIndex = new SharedLong(-1);
- m_hasNoElementsLeft = new SharedBool(false);
- m_sourceDepleted = new SharedBool(false);
- m_sharedLock = new object();
- m_useSingleChunking = useSingleChunking;
-
- // Only allocate the fill-buffer if single-chunking is not in effect
- if (!m_useSingleChunking)
- {
- // Time to allocate the fill buffer which is used to reduce the contention on the shared lock.
- // First pick the buffer size multiplier. We use 4 for when there are more than 4 cores, and just 1 for below. This is based on empirical evidence.
- int fillBufferMultiplier = (PlatformHelper.ProcessorCount > 4) ? 4 : 1;
-
- // and allocate the fill buffer using these two numbers
- m_FillBuffer = new KeyValuePair<long, TSource>[fillBufferMultiplier * Partitioner.GetDefaultChunkSize<TSource>()];
- }
-
- if (isStaticPartitioning)
- {
- // If this object is created for static partitioning (ie. via GetPartitions(int partitionCount),
- // GetOrderablePartitions(int partitionCount)), we track the active partitions, in order to dispose
- // this object when all the partitions have been disposed.
- m_activePartitionCount = new SharedInt(0);
- }
- else
- {
- // Otherwise this object is created for dynamic partitioning (ie, via GetDynamicPartitions(),
- // GetOrderableDynamicPartitions()), we do not need tracking. This object must be disposed
- // explicitly
- m_activePartitionCount = null;
- }
- }
-
- public IEnumerator<KeyValuePair<long, TSource>> GetEnumerator()
- {
- if (m_disposed)
- {
- throw new ObjectDisposedException(Environment.GetResourceString("PartitionerStatic_CanNotCallGetEnumeratorAfterSourceHasBeenDisposed"));
- }
- else
- {
- return new InternalPartitionEnumerator(m_sharedReader, m_sharedIndex,
- m_hasNoElementsLeft, m_sharedLock, m_activePartitionCount, this, m_useSingleChunking);
- }
- }
-
-
- IEnumerator IEnumerable.GetEnumerator()
- {
- return ((InternalPartitionEnumerable)this).GetEnumerator();
- }
-
-
- ///////////////////
- //
- // Used by GrabChunk_Buffered()
- private void TryCopyFromFillBuffer(KeyValuePair<long, TSource>[] destArray,
- int requestedChunkSize,
- ref int actualNumElementsGrabbed)
- {
- actualNumElementsGrabbed = 0;
-
-
- // making a local defensive copy of the fill buffer reference, just in case it gets nulled out
- KeyValuePair<long, TSource>[] fillBufferLocalRef = m_FillBuffer;
- if (fillBufferLocalRef == null) return;
-
- // first do a quick check, and give up if the current position is at the end
- // so that we don't do an unncessary pair of Interlocked.Increment / Decrement calls
- if (m_FillBufferCurrentPosition >= m_FillBufferSize)
- {
- return; // no elements in the buffer to copy from
- }
-
- // We might have a chance to grab elements from the buffer. We will know for sure
- // when we do the Interlocked.Add below.
- // But first we must register as a potential copier in order to make sure
- // the elements we're copying from don't get overwritten by another thread
- // that starts refilling the buffer right after our Interlocked.Add.
- Interlocked.Increment(ref m_activeCopiers);
-
- int endPos = Interlocked.Add(ref m_FillBufferCurrentPosition, requestedChunkSize);
- int beginPos = endPos - requestedChunkSize;
-
- if (beginPos < m_FillBufferSize)
- {
- // adjust index and do the actual copy
- actualNumElementsGrabbed = (endPos < m_FillBufferSize) ? endPos : m_FillBufferSize - beginPos;
- Array.Copy(fillBufferLocalRef, beginPos, destArray, 0, actualNumElementsGrabbed);
- }
-
- // let the record show we are no longer accessing the buffer
- Interlocked.Decrement(ref m_activeCopiers);
- }
-
- /// <summary>
- /// This is the common entry point for consuming items from the source enumerable
- /// </summary>
- /// <returns>
- /// true if we successfully reserved at least one element
- /// false if all elements in the source collection have been reserved.
- /// </returns>
- internal bool GrabChunk(KeyValuePair<long, TSource>[] destArray, int requestedChunkSize, ref int actualNumElementsGrabbed)
- {
- actualNumElementsGrabbed = 0;
-
- if (m_hasNoElementsLeft.Value)
- {
- return false;
- }
-
- if (m_useSingleChunking)
- {
- return GrabChunk_Single(destArray, requestedChunkSize, ref actualNumElementsGrabbed);
- }
- else
- {
- return GrabChunk_Buffered(destArray, requestedChunkSize, ref actualNumElementsGrabbed);
- }
- }
-
- /// <summary>
- /// Version of GrabChunk that grabs a single element at a time from the source enumerable
- /// </summary>
- /// <returns>
- /// true if we successfully reserved an element
- /// false if all elements in the source collection have been reserved.
- /// </returns>
- internal bool GrabChunk_Single(KeyValuePair<long,TSource>[] destArray, int requestedChunkSize, ref int actualNumElementsGrabbed)
- {
- Debug.Assert(m_useSingleChunking, "Expected m_useSingleChecking to be true");
- Debug.Assert(requestedChunkSize == 1, "Got requested chunk size of " + requestedChunkSize + " when single-chunking was on");
- Debug.Assert(actualNumElementsGrabbed == 0, "Expected actualNumElementsGrabbed == 0, instead it is " + actualNumElementsGrabbed);
- Debug.Assert(destArray.Length == 1, "Expected destArray to be of length 1, instead its length is " + destArray.Length);
-
- lock (m_sharedLock)
- {
- if (m_hasNoElementsLeft.Value) return false;
-
- try
- {
- if (m_sharedReader.MoveNext())
- {
- m_sharedIndex.Value = checked(m_sharedIndex.Value + 1);
- destArray[0]
- = new KeyValuePair<long, TSource>(m_sharedIndex.Value,
- m_sharedReader.Current);
- actualNumElementsGrabbed = 1;
- return true;
- }
- else
- {
- //if MoveNext() return false, we set the flag to inform other partitions
- m_sourceDepleted.Value = true;
- m_hasNoElementsLeft.Value = true;
- return false;
- }
- }
- catch
- {
- // On an exception, make sure that no additional items are hereafter enumerated
- m_sourceDepleted.Value = true;
- m_hasNoElementsLeft.Value = true;
- throw;
- }
- }
- }
-
-
-
- /// <summary>
- /// Version of GrabChunk that uses buffering scheme to grab items out of source enumerable
- /// </summary>
- /// <returns>
- /// true if we successfully reserved at least one element (up to #=requestedChunkSize)
- /// false if all elements in the source collection have been reserved.
- /// </returns>
- internal bool GrabChunk_Buffered(KeyValuePair<long,TSource>[] destArray, int requestedChunkSize, ref int actualNumElementsGrabbed)
- {
- Debug.Assert(requestedChunkSize > 0);
- Debug.Assert(!m_useSingleChunking, "Did not expect to be in single-chunking mode");
-
- TryCopyFromFillBuffer(destArray, requestedChunkSize, ref actualNumElementsGrabbed);
-
- if (actualNumElementsGrabbed == requestedChunkSize)
- {
- // that was easy.
- return true;
- }
- else if (m_sourceDepleted.Value)
- {
- // looks like we both reached the end of the fill buffer, and the source was depleted previously
- // this means no more work to do for any other worker
- m_hasNoElementsLeft.Value = true;
- m_FillBuffer = null;
- return (actualNumElementsGrabbed > 0);
- }
-
-
- //
- // now's the time to take the shared lock and enumerate
- //
- lock (m_sharedLock)
- {
- if (m_sourceDepleted.Value)
- {
- return (actualNumElementsGrabbed > 0);
- }
-
- try
- {
- // we need to make sure all array copiers are finished
- if (m_activeCopiers > 0)
- {
- SpinWait sw = new SpinWait();
- while( m_activeCopiers > 0) sw.SpinOnce();
- }
-
- Debug.Assert(m_sharedIndex != null); //already been allocated in MoveNext() before calling GrabNextChunk
-
- // Now's the time to actually enumerate the source
-
- // We first fill up the requested # of elements in the caller's array
- // continue from the where TryCopyFromFillBuffer() left off
- for (; actualNumElementsGrabbed < requestedChunkSize; actualNumElementsGrabbed++)
- {
- if (m_sharedReader.MoveNext())
- {
- m_sharedIndex.Value = checked(m_sharedIndex.Value + 1);
- destArray[actualNumElementsGrabbed]
- = new KeyValuePair<long, TSource>(m_sharedIndex.Value,
- m_sharedReader.Current);
- }
- else
- {
- //if MoveNext() return false, we set the flag to inform other partitions
- m_sourceDepleted.Value = true;
- break;
- }
- }
-
- // taking a local snapshot of m_FillBuffer in case some other thread decides to null out m_FillBuffer
- // in the entry of this method after observing m_sourceCompleted = true
- var localFillBufferRef = m_FillBuffer;
-
- // If the big buffer seems to be depleted, we will also fill that up while we are under the lock
- // Note that this is the only place that m_FillBufferCurrentPosition can be reset
- if (m_sourceDepleted.Value == false && localFillBufferRef != null &&
- m_FillBufferCurrentPosition >= localFillBufferRef.Length)
- {
- for (int i = 0; i < localFillBufferRef.Length; i++)
- {
- if( m_sharedReader.MoveNext())
- {
- m_sharedIndex.Value = checked(m_sharedIndex.Value + 1);
- localFillBufferRef[i]
- = new KeyValuePair<long, TSource>(m_sharedIndex.Value,
- m_sharedReader.Current);
- }
- else
- {
- // No more elements left in the enumerator.
- // Record this, so that the next request can skip the lock
- m_sourceDepleted.Value = true;
-
- // also record the current count in m_FillBufferSize
- m_FillBufferSize = i;
-
- // and exit the for loop so that we don't keep incrementing m_FillBufferSize
- break;
- }
-
- }
-
- m_FillBufferCurrentPosition = 0;
- }
-
-
- }
- catch
- {
- // If an exception occurs, don't let the other enumerators try to enumerate.
- // NOTE: this could instead throw an InvalidOperationException, but that would be unexpected
- // and not helpful to the end user. We know the root cause is being communicated already.)
- m_sourceDepleted.Value = true;
- m_hasNoElementsLeft.Value = true;
- throw;
- }
- }
-
- return (actualNumElementsGrabbed > 0);
- }
-
- public void Dispose()
- {
- if (!m_disposed)
- {
- m_disposed = true;
- m_sharedReader.Dispose();
- }
- }
- }
-
- /// <summary>
- /// Inherits from DynamicPartitionEnumerator_Abstract directly
- /// Provides customized implementation for: GrabNextChunk, HasNoElementsLeft, Current, Dispose
- /// </summary>
- private class InternalPartitionEnumerator : DynamicPartitionEnumerator_Abstract<TSource, IEnumerator<TSource>>
- {
- //---- fields ----
- //cached local copy of the current chunk
- private KeyValuePair<long, TSource>[] m_localList; //defer allocating to avoid false sharing
-
- // the values of the following two fields are passed in from
- // outside(already initialized) by the constructor,
- private readonly SharedBool m_hasNoElementsLeft;
- private readonly object m_sharedLock;
- private readonly SharedInt m_activePartitionCount;
- private InternalPartitionEnumerable m_enumerable;
-
- //constructor
- internal InternalPartitionEnumerator(
- IEnumerator<TSource> sharedReader,
- SharedLong sharedIndex,
- SharedBool hasNoElementsLeft,
- object sharedLock,
- SharedInt activePartitionCount,
- InternalPartitionEnumerable enumerable,
- bool useSingleChunking)
- : base(sharedReader, sharedIndex, useSingleChunking)
- {
- m_hasNoElementsLeft = hasNoElementsLeft;
- m_sharedLock = sharedLock;
- m_enumerable = enumerable;
- m_activePartitionCount = activePartitionCount;
-
- if (m_activePartitionCount != null)
- {
- // If static partitioning, we need to increase the active partition count.
- Interlocked.Increment(ref m_activePartitionCount.Value);
- }
- }
-
- //overriding methods
-
- /// <summary>
- /// Reserves a contiguous range of elements from source data
- /// </summary>
- /// <param name="requestedChunkSize">specified number of elements requested</param>
- /// <returns>
- /// true if we successfully reserved at least one element (up to #=requestedChunkSize)
- /// false if all elements in the source collection have been reserved.
- /// </returns>
- override protected bool GrabNextChunk(int requestedChunkSize)
- {
- Debug.Assert(requestedChunkSize > 0);
-
- if (HasNoElementsLeft)
- {
- return false;
- }
-
- // defer allocation to avoid false sharing
- if (m_localList == null)
- {
- m_localList = new KeyValuePair<long, TSource>[m_maxChunkSize];
- }
-
- // make the actual call to the enumerable that grabs a chunk
- return m_enumerable.GrabChunk(m_localList, requestedChunkSize, ref m_currentChunkSize.Value);
- }
-
- /// <summary>
- /// Returns whether or not the shared reader has already read the last
- /// element of the source data
- /// </summary>
- /// <remarks>
- /// We cannot call m_sharedReader.MoveNext(), to see if it hits the last element
- /// or not, because we can't undo MoveNext(). Thus we need to maintain a shared
- /// boolean value m_hasNoElementsLeft across all partitions
- /// </remarks>
- override protected bool HasNoElementsLeft
- {
- get { return m_hasNoElementsLeft.Value; }
- set
- {
- //we only set it from false to true once
- //we should never set it back in any circumstances
- Debug.Assert(value);
- Debug.Assert(!m_hasNoElementsLeft.Value);
- m_hasNoElementsLeft.Value = true;
- }
- }
-
- override public KeyValuePair<long, TSource> Current
- {
- get
- {
- //verify that MoveNext is at least called once before Current is called
- if (m_currentChunkSize == null)
- {
- throw new InvalidOperationException(Environment.GetResourceString("PartitionerStatic_CurrentCalledBeforeMoveNext"));
- }
- Debug.Assert(m_localList != null);
- Debug.Assert(m_localOffset.Value >= 0 && m_localOffset.Value < m_currentChunkSize.Value);
- return (m_localList[m_localOffset.Value]);
- }
- }
-
- override public void Dispose()
- {
- // If this is static partitioning, ie. m_activePartitionCount != null, since the current partition
- // is disposed, we decrement the number of active partitions for the shared reader.
- if (m_activePartitionCount != null && Interlocked.Decrement(ref m_activePartitionCount.Value) == 0)
- {
- // If the number of active partitions becomes 0, we need to dispose the shared
- // reader we created in the m_enumerable object.
- m_enumerable.Dispose();
- }
- // If this is dynamic partitioning, ie. m_activePartitionCount != null, then m_enumerable needs to
- // be disposed explicitly by the user, and we do not need to anything here
- }
- }
- #endregion
-
- }
- #endregion
-
- #region Dynamic Partitioner for source data of IndexRange types (IList<> and Array<>)
- /// <summary>
- /// Dynamic load-balance partitioner. This class is abstract and to be derived from by
- /// the customized partitioner classes for IList, Array, and IEnumerable
- /// </summary>
- /// <typeparam name="TSource">Type of the elements in the source data</typeparam>
- /// <typeparam name="TCollection"> Type of the source data collection</typeparam>
- private abstract class DynamicPartitionerForIndexRange_Abstract<TSource, TCollection> : OrderablePartitioner<TSource>
- {
- // TCollection can be: IList<TSource>, TSource[] and IEnumerable<TSource>
- // Derived classes specify TCollection, and implement the abstract method GetOrderableDynamicPartitions_Factory accordingly
- TCollection m_data;
-
- /// <summary>
- /// Constructs a new orderable partitioner
- /// </summary>
- /// <param name="data">source data collection</param>
- protected DynamicPartitionerForIndexRange_Abstract(TCollection data)
- : base(true, false, true)
- {
- m_data = data;
- }
-
- /// <summary>
- /// Partition the source data and create an enumerable over the resulting partitions.
- /// </summary>
- /// <param name="data">the source data collection</param>
- /// <returns>an enumerable of partitions of </returns>
- protected abstract IEnumerable<KeyValuePair<long, TSource>> GetOrderableDynamicPartitions_Factory(TCollection data);
-
- /// <summary>
- /// Overrides OrderablePartitioner.GetOrderablePartitions.
- /// Partitions the underlying collection into the given number of orderable partitions.
- /// </summary>
- /// <param name="partitionCount">number of partitions requested</param>
- /// <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
- override public IList<IEnumerator<KeyValuePair<long, TSource>>> GetOrderablePartitions(int partitionCount)
- {
- if (partitionCount <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(partitionCount));
- }
- IEnumerator<KeyValuePair<long, TSource>>[] partitions
- = new IEnumerator<KeyValuePair<long, TSource>>[partitionCount];
- IEnumerable<KeyValuePair<long, TSource>> partitionEnumerable = GetOrderableDynamicPartitions_Factory(m_data);
- for (int i = 0; i < partitionCount; i++)
- {
- partitions[i] = partitionEnumerable.GetEnumerator();
- }
- return partitions;
- }
-
- /// <summary>
- /// Overrides OrderablePartitioner.GetOrderableDyanmicPartitions
- /// </summary>
- /// <returns>a enumerable collection of orderable partitions</returns>
- override public IEnumerable<KeyValuePair<long, TSource>> GetOrderableDynamicPartitions()
- {
- return GetOrderableDynamicPartitions_Factory(m_data);
- }
-
- /// <summary>
- /// Whether additional partitions can be created dynamically.
- /// </summary>
- override public bool SupportsDynamicPartitions
- {
- get { return true; }
- }
-
- }
-
- /// <summary>
- /// Defines dynamic partition for source data of IList and Array.
- /// This class inherits DynamicPartitionEnumerator_Abstract
- /// - implements GrabNextChunk, HasNoElementsLeft, and Dispose methods for IList and Array
- /// - Current property still remains abstract, implementation is different for IList and Array
- /// - introduces another abstract method SourceCount, which returns the number of elements in
- /// the source data. Implementation differs for IList and Array
- /// </summary>
- /// <typeparam name="TSource">Type of the elements in the data source</typeparam>
- /// <typeparam name="TSourceReader">Type of the reader on the source data</typeparam>
- private abstract class DynamicPartitionEnumeratorForIndexRange_Abstract<TSource, TSourceReader> : DynamicPartitionEnumerator_Abstract<TSource, TSourceReader>
- {
- //fields
- protected int m_startIndex; //initially zero
-
- //constructor
- protected DynamicPartitionEnumeratorForIndexRange_Abstract(TSourceReader sharedReader, SharedLong sharedIndex)
- : base(sharedReader, sharedIndex)
- {
- }
-
- //abstract methods
- //the Current property is still abstract, and will be implemented by derived classes
- //we add another abstract method SourceCount to get the number of elements from the source reader
-
- /// <summary>
- /// Get the number of elements from the source reader.
- /// It calls IList.Count or Array.Length
- /// </summary>
- protected abstract int SourceCount { get; }
-
- //overriding methods
-
- /// <summary>
- /// Reserves a contiguous range of elements from source data
- /// </summary>
- /// <param name="requestedChunkSize">specified number of elements requested</param>
- /// <returns>
- /// true if we successfully reserved at least one element (up to #=requestedChunkSize)
- /// false if all elements in the source collection have been reserved.
- /// </returns>
- override protected bool GrabNextChunk(int requestedChunkSize)
- {
- Debug.Assert(requestedChunkSize > 0);
-
- while (!HasNoElementsLeft)
- {
- Debug.Assert(m_sharedIndex != null);
- // use the new Volatile.Read method because it is cheaper than Interlocked.Read on AMD64 architecture
- long oldSharedIndex = Volatile.Read(ref m_sharedIndex.Value);
-
- if (HasNoElementsLeft)
- {
- //HasNoElementsLeft situation changed from false to true immediately
- //and oldSharedIndex becomes stale
- return false;
- }
-
- //there won't be overflow, because the index of IList/array is int, and we
- //have casted it to long.
- long newSharedIndex = Math.Min(SourceCount - 1, oldSharedIndex + requestedChunkSize);
-
-
- //the following CAS, if successful, reserves a chunk of elements [oldSharedIndex+1, newSharedIndex]
- //inclusive in the source collection
- if (Interlocked.CompareExchange(ref m_sharedIndex.Value, newSharedIndex, oldSharedIndex)
- == oldSharedIndex)
- {
- //set up local indexes.
- //m_currentChunkSize is always set to requestedChunkSize when source data had
- //enough elements of what we requested
- m_currentChunkSize.Value = (int)(newSharedIndex - oldSharedIndex);
- m_localOffset.Value = -1;
- m_startIndex = (int)(oldSharedIndex + 1);
- return true;
- }
- }
- //didn't get any element, return false;
- return false;
- }
-
- /// <summary>
- /// Returns whether or not the shared reader has already read the last
- /// element of the source data
- /// </summary>
- override protected bool HasNoElementsLeft
- {
- get
- {
- Debug.Assert(m_sharedIndex != null);
- // use the new Volatile.Read method because it is cheaper than Interlocked.Read on AMD64 architecture
- return Volatile.Read(ref m_sharedIndex.Value) >= SourceCount - 1;
- }
- set
- {
- Debug.Assert(false);
- }
- }
-
- /// <summary>
- /// For source data type IList and Array, the type of the shared reader is just the data itself.
- /// We don't do anything in Dispose method for IList and Array.
- /// </summary>
- override public void Dispose()
- { }
- }
-
-
- /// <summary>
- /// Inherits from DynamicPartitioners
- /// Provides customized implementation of GetOrderableDynamicPartitions_Factory method, to return an instance
- /// of EnumerableOfPartitionsForIList defined internally
- /// </summary>
- /// <typeparam name="TSource">Type of elements in the source data</typeparam>
- private class DynamicPartitionerForIList<TSource> : DynamicPartitionerForIndexRange_Abstract<TSource, IList<TSource>>
- {
- //constructor
- internal DynamicPartitionerForIList(IList<TSource> source)
- : base(source)
- { }
-
- //override methods
- override protected IEnumerable<KeyValuePair<long, TSource>> GetOrderableDynamicPartitions_Factory(IList<TSource> m_data)
- {
- //m_data itself serves as shared reader
- return new InternalPartitionEnumerable(m_data);
- }
-
- /// <summary>
- /// Inherits from PartitionList_Abstract
- /// Provides customized implementation for source data of IList
- /// </summary>
- private class InternalPartitionEnumerable : IEnumerable<KeyValuePair<long, TSource>>
- {
- //reader through which we access the source data
- private readonly IList<TSource> m_sharedReader;
- private SharedLong m_sharedIndex;
-
- internal InternalPartitionEnumerable(IList<TSource> sharedReader)
- {
- m_sharedReader = sharedReader;
- m_sharedIndex = new SharedLong(-1);
- }
-
- public IEnumerator<KeyValuePair<long, TSource>> GetEnumerator()
- {
- return new InternalPartitionEnumerator(m_sharedReader, m_sharedIndex);
- }
-
- IEnumerator IEnumerable.GetEnumerator()
- {
- return ((InternalPartitionEnumerable)this).GetEnumerator();
- }
- }
-
- /// <summary>
- /// Inherits from DynamicPartitionEnumeratorForIndexRange_Abstract
- /// Provides customized implementation of SourceCount property and Current property for IList
- /// </summary>
- private class InternalPartitionEnumerator : DynamicPartitionEnumeratorForIndexRange_Abstract<TSource, IList<TSource>>
- {
- //constructor
- internal InternalPartitionEnumerator(IList<TSource> sharedReader, SharedLong sharedIndex)
- : base(sharedReader, sharedIndex)
- { }
-
- //overriding methods
- override protected int SourceCount
- {
- get { return m_sharedReader.Count; }
- }
- /// <summary>
- /// return a KeyValuePair of the current element and its key
- /// </summary>
- override public KeyValuePair<long, TSource> Current
- {
- get
- {
- //verify that MoveNext is at least called once before Current is called
- if (m_currentChunkSize == null)
- {
- throw new InvalidOperationException(Environment.GetResourceString("PartitionerStatic_CurrentCalledBeforeMoveNext"));
- }
-
- Debug.Assert(m_localOffset.Value >= 0 && m_localOffset.Value < m_currentChunkSize.Value);
- return new KeyValuePair<long, TSource>(m_startIndex + m_localOffset.Value,
- m_sharedReader[m_startIndex + m_localOffset.Value]);
- }
- }
- }
- }
-
-
-
- /// <summary>
- /// Inherits from DynamicPartitioners
- /// Provides customized implementation of GetOrderableDynamicPartitions_Factory method, to return an instance
- /// of EnumerableOfPartitionsForArray defined internally
- /// </summary>
- /// <typeparam name="TSource">Type of elements in the source data</typeparam>
- private class DynamicPartitionerForArray<TSource> : DynamicPartitionerForIndexRange_Abstract<TSource, TSource[]>
- {
- //constructor
- internal DynamicPartitionerForArray(TSource[] source)
- : base(source)
- { }
-
- //override methods
- override protected IEnumerable<KeyValuePair<long, TSource>> GetOrderableDynamicPartitions_Factory(TSource[] m_data)
- {
- return new InternalPartitionEnumerable(m_data);
- }
-
- /// <summary>
- /// Inherits from PartitionList_Abstract
- /// Provides customized implementation for source data of Array
- /// </summary>
- private class InternalPartitionEnumerable : IEnumerable<KeyValuePair<long, TSource>>
- {
- //reader through which we access the source data
- private readonly TSource[] m_sharedReader;
- private SharedLong m_sharedIndex;
-
- internal InternalPartitionEnumerable(TSource[] sharedReader)
- {
- m_sharedReader = sharedReader;
- m_sharedIndex = new SharedLong(-1);
- }
-
- IEnumerator IEnumerable.GetEnumerator()
- {
- return ((InternalPartitionEnumerable)this).GetEnumerator();
- }
-
-
- public IEnumerator<KeyValuePair<long, TSource>> GetEnumerator()
- {
- return new InternalPartitionEnumerator(m_sharedReader, m_sharedIndex);
- }
- }
-
- /// <summary>
- /// Inherits from DynamicPartitionEnumeratorForIndexRange_Abstract
- /// Provides customized implementation of SourceCount property and Current property for Array
- /// </summary>
- private class InternalPartitionEnumerator : DynamicPartitionEnumeratorForIndexRange_Abstract<TSource, TSource[]>
- {
- //constructor
- internal InternalPartitionEnumerator(TSource[] sharedReader, SharedLong sharedIndex)
- : base(sharedReader, sharedIndex)
- { }
-
- //overriding methods
- override protected int SourceCount
- {
- get { return m_sharedReader.Length; }
- }
-
- override public KeyValuePair<long, TSource> Current
- {
- get
- {
- //verify that MoveNext is at least called once before Current is called
- if (m_currentChunkSize == null)
- {
- throw new InvalidOperationException(Environment.GetResourceString("PartitionerStatic_CurrentCalledBeforeMoveNext"));
- }
-
- Debug.Assert(m_localOffset.Value >= 0 && m_localOffset.Value < m_currentChunkSize.Value);
- return new KeyValuePair<long, TSource>(m_startIndex + m_localOffset.Value,
- m_sharedReader[m_startIndex + m_localOffset.Value]);
- }
- }
- }
- }
- #endregion
-
-
- #region Static partitioning for IList and Array, abstract classes
- /// <summary>
- /// Static partitioning over IList.
- /// - dynamic and load-balance
- /// - Keys are ordered within each partition
- /// - Keys are ordered across partitions
- /// - Keys are normalized
- /// - Number of partitions is fixed once specified, and the elements of the source data are
- /// distributed to each partition as evenly as possible.
- /// </summary>
- /// <typeparam name="TSource">type of the elements</typeparam>
- /// <typeparam name="TCollection">Type of the source data collection</typeparam>
- private abstract class StaticIndexRangePartitioner<TSource, TCollection> : OrderablePartitioner<TSource>
- {
- protected StaticIndexRangePartitioner()
- : base(true, true, true)
- { }
-
- /// <summary>
- /// Abstract method to return the number of elements in the source data
- /// </summary>
- protected abstract int SourceCount { get; }
-
- /// <summary>
- /// Abstract method to create a partition that covers a range over source data,
- /// starting from "startIndex", ending at "endIndex"
- /// </summary>
- /// <param name="startIndex">start index of the current partition on the source data</param>
- /// <param name="endIndex">end index of the current partition on the source data</param>
- /// <returns>a partition enumerator over the specified range</returns>
- // The partitioning algorithm is implemented in GetOrderablePartitions method
- // This method delegates according to source data type IList/Array
- protected abstract IEnumerator<KeyValuePair<long, TSource>> CreatePartition(int startIndex, int endIndex);
-
- /// <summary>
- /// Overrides OrderablePartitioner.GetOrderablePartitions
- /// Return a list of partitions, each of which enumerate a fixed part of the source data
- /// The elements of the source data are distributed to each partition as evenly as possible.
- /// Specifically, if the total number of elements is N, and number of partitions is x, and N = a*x +b,
- /// where a is the quotient, and b is the remainder. Then the first b partitions each has a + 1 elements,
- /// and the last x-b partitions each has a elements.
- /// For example, if N=10, x =3, then
- /// partition 0 ranges [0,3],
- /// partition 1 ranges [4,6],
- /// partition 2 ranges [7,9].
- /// This also takes care of the situation of (x&gt;N), the last x-N partitions are empty enumerators.
- /// An empty enumerator is indicated by
- /// (m_startIndex == list.Count &amp;&amp; m_endIndex == list.Count -1)
- /// </summary>
- /// <param name="partitionCount">specified number of partitions</param>
- /// <returns>a list of partitions</returns>
- override public IList<IEnumerator<KeyValuePair<long, TSource>>> GetOrderablePartitions(int partitionCount)
- {
- if (partitionCount <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(partitionCount));
- }
-
- int quotient, remainder;
- quotient = Math.DivRem(SourceCount, partitionCount, out remainder);
-
- IEnumerator<KeyValuePair<long, TSource>>[] partitions = new IEnumerator<KeyValuePair<long, TSource>>[partitionCount];
- int lastEndIndex = -1;
- for (int i = 0; i < partitionCount; i++)
- {
- int startIndex = lastEndIndex + 1;
-
- if (i < remainder)
- {
- lastEndIndex = startIndex + quotient;
- }
- else
- {
- lastEndIndex = startIndex + quotient - 1;
- }
- partitions[i] = CreatePartition(startIndex, lastEndIndex);
- }
- return partitions;
- }
- }
-
- /// <summary>
- /// Static Partition for IList/Array.
- /// This class implements all methods required by IEnumerator interface, except for the Current property.
- /// Current Property is different for IList and Array. Arrays calls 'ldelem' instructions for faster element
- /// retrieval.
- /// </summary>
- //We assume the source collection is not being updated concurrently. Otherwise it will break the
- //static partitioning, since each partition operates on the source collection directly, it does
- //not have a local cache of the elements assigned to them.
- private abstract class StaticIndexRangePartition<TSource> : IEnumerator<KeyValuePair<long, TSource>>
- {
- //the start and end position in the source collection for the current partition
- //the partition is empty if and only if
- // (m_startIndex == m_data.Count && m_endIndex == m_data.Count-1)
- protected readonly int m_startIndex;
- protected readonly int m_endIndex;
-
- //the current index of the current partition while enumerating on the source collection
- protected volatile int m_offset;
-
- /// <summary>
- /// Constructs an instance of StaticIndexRangePartition
- /// </summary>
- /// <param name="startIndex">the start index in the source collection for the current partition </param>
- /// <param name="endIndex">the end index in the source collection for the current partition</param>
- protected StaticIndexRangePartition(int startIndex, int endIndex)
- {
- m_startIndex = startIndex;
- m_endIndex = endIndex;
- m_offset = startIndex - 1;
- }
-
- /// <summary>
- /// Current Property is different for IList and Array. Arrays calls 'ldelem' instructions for faster
- /// element retrieval.
- /// </summary>
- public abstract KeyValuePair<long, TSource> Current { get; }
-
- /// <summary>
- /// We don't dispose the source for IList and array
- /// </summary>
- public void Dispose()
- { }
-
- public void Reset()
- {
- throw new NotSupportedException();
- }
-
- /// <summary>
- /// Moves to the next item
- /// Before the first MoveNext is called: m_offset == m_startIndex-1;
- /// </summary>
- /// <returns>true if successful, false if there is no item left</returns>
- public bool MoveNext()
- {
- if (m_offset < m_endIndex)
- {
- m_offset++;
- return true;
- }
- else
- {
- //After we have enumerated over all elements, we set m_offset to m_endIndex +1.
- //The reason we do this is, for an empty enumerator, we need to tell the Current
- //property whether MoveNext has been called or not.
- //For an empty enumerator, it starts with (m_offset == m_startIndex-1 == m_endIndex),
- //and we don't set a new value to m_offset, then the above condition will always be
- //true, and the Current property will mistakenly assume MoveNext is never called.
- m_offset = m_endIndex + 1;
- return false;
- }
- }
-
- Object IEnumerator.Current
- {
- get
- {
- return ((StaticIndexRangePartition<TSource>)this).Current;
- }
- }
- }
- #endregion
-
- #region Static partitioning for IList
- /// <summary>
- /// Inherits from StaticIndexRangePartitioner
- /// Provides customized implementation of SourceCount and CreatePartition
- /// </summary>
- /// <typeparam name="TSource"></typeparam>
- private class StaticIndexRangePartitionerForIList<TSource> : StaticIndexRangePartitioner<TSource, IList<TSource>>
- {
- IList<TSource> m_list;
- internal StaticIndexRangePartitionerForIList(IList<TSource> list)
- : base()
- {
- Debug.Assert(list != null);
- m_list = list;
- }
- override protected int SourceCount
- {
- get { return m_list.Count; }
- }
- override protected IEnumerator<KeyValuePair<long, TSource>> CreatePartition(int startIndex, int endIndex)
- {
- return new StaticIndexRangePartitionForIList<TSource>(m_list, startIndex, endIndex);
- }
- }
-
- /// <summary>
- /// Inherits from StaticIndexRangePartition
- /// Provides customized implementation of Current property
- /// </summary>
- /// <typeparam name="TSource"></typeparam>
- private class StaticIndexRangePartitionForIList<TSource> : StaticIndexRangePartition<TSource>
- {
- //the source collection shared by all partitions
- private volatile IList<TSource> m_list;
-
- internal StaticIndexRangePartitionForIList(IList<TSource> list, int startIndex, int endIndex)
- : base(startIndex, endIndex)
- {
- Debug.Assert(startIndex >= 0 && endIndex <= list.Count - 1);
- m_list = list;
- }
-
- override public KeyValuePair<long, TSource> Current
- {
- get
- {
- //verify that MoveNext is at least called once before Current is called
- if (m_offset < m_startIndex)
- {
- throw new InvalidOperationException(Environment.GetResourceString("PartitionerStatic_CurrentCalledBeforeMoveNext"));
- }
-
- Debug.Assert(m_offset >= m_startIndex && m_offset <= m_endIndex);
- return (new KeyValuePair<long, TSource>(m_offset, m_list[m_offset]));
- }
- }
- }
- #endregion
-
- #region static partitioning for Arrays
- /// <summary>
- /// Inherits from StaticIndexRangePartitioner
- /// Provides customized implementation of SourceCount and CreatePartition for Array
- /// </summary>
- private class StaticIndexRangePartitionerForArray<TSource> : StaticIndexRangePartitioner<TSource, TSource[]>
- {
- TSource[] m_array;
- internal StaticIndexRangePartitionerForArray(TSource[] array)
- : base()
- {
- Debug.Assert(array != null);
- m_array = array;
- }
- override protected int SourceCount
- {
- get { return m_array.Length; }
- }
- override protected IEnumerator<KeyValuePair<long, TSource>> CreatePartition(int startIndex, int endIndex)
- {
- return new StaticIndexRangePartitionForArray<TSource>(m_array, startIndex, endIndex);
- }
- }
-
- /// <summary>
- /// Inherits from StaticIndexRangePartitioner
- /// Provides customized implementation of SourceCount and CreatePartition
- /// </summary>
- private class StaticIndexRangePartitionForArray<TSource> : StaticIndexRangePartition<TSource>
- {
- //the source collection shared by all partitions
- private volatile TSource[] m_array;
-
- internal StaticIndexRangePartitionForArray(TSource[] array, int startIndex, int endIndex)
- : base(startIndex, endIndex)
- {
- Debug.Assert(startIndex >= 0 && endIndex <= array.Length - 1);
- m_array = array;
- }
-
- override public KeyValuePair<long, TSource> Current
- {
- get
- {
- //verify that MoveNext is at least called once before Current is called
- if (m_offset < m_startIndex)
- {
- throw new InvalidOperationException(Environment.GetResourceString("PartitionerStatic_CurrentCalledBeforeMoveNext"));
- }
-
- Debug.Assert(m_offset >= m_startIndex && m_offset <= m_endIndex);
- return (new KeyValuePair<long, TSource>(m_offset, m_array[m_offset]));
- }
- }
- }
- #endregion
-
-
- #region Utility functions
- /// <summary>
- /// A very simple primitive that allows us to share a value across multiple threads.
- /// </summary>
- /// <typeparam name="TSource"></typeparam>
- private class SharedInt
- {
- internal volatile int Value;
-
- internal SharedInt(int value)
- {
- this.Value = value;
- }
-
- }
-
- /// <summary>
- /// A very simple primitive that allows us to share a value across multiple threads.
- /// </summary>
- private class SharedBool
- {
- internal volatile bool Value;
-
- internal SharedBool(bool value)
- {
- this.Value = value;
- }
-
- }
-
- /// <summary>
- /// A very simple primitive that allows us to share a value across multiple threads.
- /// </summary>
- private class SharedLong
- {
- internal long Value;
- internal SharedLong(long value)
- {
- this.Value = value;
- }
-
- }
-
- //--------------------
- // The following part calculates the default chunk size. It is copied from System.Linq.Parallel.Scheduling,
- // because mscorlib.dll cannot access System.Linq.Parallel.Scheduling
- //--------------------
-
- // The number of bytes we want "chunks" to be, when partitioning, etc. We choose 4 cache
- // lines worth, assuming 128b cache line. Most (popular) architectures use 64b cache lines,
- // but choosing 128b works for 64b too whereas a multiple of 64b isn't necessarily sufficient
- // for 128b cache systems. So 128b it is.
- private const int DEFAULT_BYTES_PER_CHUNK = 128 * 4;
-
- private static int GetDefaultChunkSize<TSource>()
- {
- int chunkSize;
-
- if (typeof(TSource).IsValueType)
- {
- chunkSize = 128;
- }
- else
- {
- Debug.Assert((DEFAULT_BYTES_PER_CHUNK % IntPtr.Size) == 0, "bytes per chunk should be a multiple of pointer size");
- chunkSize = (DEFAULT_BYTES_PER_CHUNK / IntPtr.Size);
- }
- return chunkSize;
- }
- #endregion
- }
-}
diff --git a/src/mscorlib/src/System/Collections/DictionaryEntry.cs b/src/mscorlib/src/System/Collections/DictionaryEntry.cs
index 3ee392bb0d..0c5d8b2387 100644
--- a/src/mscorlib/src/System/Collections/DictionaryEntry.cs
+++ b/src/mscorlib/src/System/Collections/DictionaryEntry.cs
@@ -16,9 +16,9 @@
namespace System.Collections {
using System;
+ using System.ComponentModel;
// A DictionaryEntry holds a key and a value from a dictionary.
// It is returned by IDictionaryEnumerator::GetEntry().
-[System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public struct DictionaryEntry
{
@@ -52,7 +52,7 @@ namespace System.Collections {
}
}
- // BLOCKED (do not add now): [EditorBrowsable(EditorBrowsableState.Never)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public void Deconstruct(out object key, out object value)
{
key = Key;
diff --git a/src/mscorlib/src/System/Collections/Generic/Comparer.cs b/src/mscorlib/src/System/Collections/Generic/Comparer.cs
index 4f06b0af69..056843a606 100644
--- a/src/mscorlib/src/System/Collections/Generic/Comparer.cs
+++ b/src/mscorlib/src/System/Collections/Generic/Comparer.cs
@@ -265,9 +265,6 @@ namespace System.Collections.Generic
Debug.Assert(typeof(T).IsEnum, "This type is only intended to be used to compare enums!");
}
- // Used by the serialization engine.
- private Int64EnumComparer(SerializationInfo info, StreamingContext context) { }
-
public override int Compare(T x, T y)
{
long lx = JitHelpers.UnsafeEnumCastLong(x);
diff --git a/src/mscorlib/src/System/Collections/Generic/DebugView.cs b/src/mscorlib/src/System/Collections/Generic/DebugView.cs
index d0711e551e..27c5011147 100644
--- a/src/mscorlib/src/System/Collections/Generic/DebugView.cs
+++ b/src/mscorlib/src/System/Collections/Generic/DebugView.cs
@@ -16,7 +16,6 @@
namespace System.Collections.Generic {
using System;
using System.Collections.ObjectModel;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
diff --git a/src/mscorlib/src/System/Collections/Generic/Dictionary.cs b/src/mscorlib/src/System/Collections/Generic/Dictionary.cs
index c2b2da9ad2..7b60e31031 100644
--- a/src/mscorlib/src/System/Collections/Generic/Dictionary.cs
+++ b/src/mscorlib/src/System/Collections/Generic/Dictionary.cs
@@ -48,12 +48,10 @@ namespace System.Collections.Generic {
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.Runtime.Serialization;
- using System.Security.Permissions;
[DebuggerTypeProxy(typeof(Mscorlib_DictionaryDebugView<,>))]
[DebuggerDisplay("Count = {Count}")]
[Serializable]
- [System.Runtime.InteropServices.ComVisible(false)]
public class Dictionary<TKey,TValue>: IDictionary<TKey,TValue>, IDictionary, IReadOnlyDictionary<TKey, TValue>, ISerializable, IDeserializationCallback {
private struct Entry {
diff --git a/src/mscorlib/src/System/Collections/Generic/EqualityComparer.cs b/src/mscorlib/src/System/Collections/Generic/EqualityComparer.cs
index 3731114119..0f9259d2f3 100644
--- a/src/mscorlib/src/System/Collections/Generic/EqualityComparer.cs
+++ b/src/mscorlib/src/System/Collections/Generic/EqualityComparer.cs
@@ -6,7 +6,6 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Security;
-using System.Runtime.Serialization;
namespace System.Collections.Generic
{
@@ -367,7 +366,7 @@ namespace System.Collections.Generic
}
[Serializable]
- internal class EnumEqualityComparer<T> : EqualityComparer<T>, ISerializable where T : struct
+ internal class EnumEqualityComparer<T> : EqualityComparer<T> where T : struct
{
[Pure]
public override bool Equals(T x, T y) {
@@ -384,16 +383,6 @@ namespace System.Collections.Generic
public EnumEqualityComparer() { }
- // This is used by the serialization engine.
- protected EnumEqualityComparer(SerializationInfo information, StreamingContext context) { }
-
- public void GetObjectData(SerializationInfo info, StreamingContext context) {
- // For back-compat we need to serialize the comparers for enums with underlying types other than int as ObjectEqualityComparer
- if (Type.GetTypeCode(Enum.GetUnderlyingType(typeof(T))) != TypeCode.Int32) {
- info.SetType(typeof(ObjectEqualityComparer<T>));
- }
- }
-
// Equals method for the comparer itself.
public override bool Equals(Object obj) =>
obj != null && GetType() == obj.GetType();
@@ -427,13 +416,10 @@ namespace System.Collections.Generic
}
[Serializable]
- internal sealed class SByteEnumEqualityComparer<T> : EnumEqualityComparer<T>, ISerializable where T : struct
+ internal sealed class SByteEnumEqualityComparer<T> : EnumEqualityComparer<T> where T : struct
{
public SByteEnumEqualityComparer() { }
- // This is used by the serialization engine.
- public SByteEnumEqualityComparer(SerializationInfo information, StreamingContext context) { }
-
[Pure]
public override int GetHashCode(T obj) {
int x_final = System.Runtime.CompilerServices.JitHelpers.UnsafeEnumCast(obj);
@@ -442,13 +428,10 @@ namespace System.Collections.Generic
}
[Serializable]
- internal sealed class ShortEnumEqualityComparer<T> : EnumEqualityComparer<T>, ISerializable where T : struct
+ internal sealed class ShortEnumEqualityComparer<T> : EnumEqualityComparer<T> where T : struct
{
public ShortEnumEqualityComparer() { }
- // This is used by the serialization engine.
- public ShortEnumEqualityComparer(SerializationInfo information, StreamingContext context) { }
-
[Pure]
public override int GetHashCode(T obj) {
int x_final = System.Runtime.CompilerServices.JitHelpers.UnsafeEnumCast(obj);
@@ -457,7 +440,7 @@ namespace System.Collections.Generic
}
[Serializable]
- internal sealed class LongEnumEqualityComparer<T> : EqualityComparer<T>, ISerializable where T : struct
+ internal sealed class LongEnumEqualityComparer<T> : EqualityComparer<T> where T : struct
{
[Pure]
public override bool Equals(T x, T y) {
@@ -481,16 +464,6 @@ namespace System.Collections.Generic
public LongEnumEqualityComparer() { }
- // This is used by the serialization engine.
- public LongEnumEqualityComparer(SerializationInfo information, StreamingContext context) { }
-
- public void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // The LongEnumEqualityComparer does not exist on 4.0 so we need to serialize this comparer as ObjectEqualityComparer
- // to allow for roundtrip between 4.0 and 4.5.
- info.SetType(typeof(ObjectEqualityComparer<T>));
- }
-
internal override int IndexOf(T[] array, T value, int startIndex, int count)
{
long toFind = JitHelpers.UnsafeEnumCastLong(value);
@@ -515,122 +488,4 @@ namespace System.Collections.Generic
return -1;
}
}
-
-#if FEATURE_RANDOMIZED_STRING_HASHING
- // This type is not serializeable by design. It does not exist in previous versions and will be removed
- // Once we move the framework to using secure hashing by default.
- internal sealed class RandomizedStringEqualityComparer : IEqualityComparer<String>, IEqualityComparer, IWellKnownStringEqualityComparer
- {
- private long _entropy;
-
- public RandomizedStringEqualityComparer() {
- _entropy = HashHelpers.GetEntropy();
- }
-
- public new bool Equals(object x, object y) {
- if (x == y) return true;
- if (x == null || y == null) return false;
- if ((x is string) && (y is string)) return Equals((string)x, (string)y);
- ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidArgumentForComparison);
- return false;
- }
-
- [Pure]
- public bool Equals(string x, string y) {
- if (x != null) {
- if (y != null) return x.Equals(y);
- return false;
- }
- if (y != null) return false;
- return true;
- }
-
- [Pure]
- public int GetHashCode(String obj) {
- if(obj == null) return 0;
- return String.InternalMarvin32HashString(obj, obj.Length, _entropy);
- }
-
- [Pure]
- public int GetHashCode(Object obj) {
- if(obj == null) return 0;
-
- string sObj = obj as string;
- if(sObj != null) return String.InternalMarvin32HashString(sObj, sObj.Length, _entropy);
-
- return obj.GetHashCode();
- }
-
- // Equals method for the comparer itself.
- public override bool Equals(Object obj) {
- RandomizedStringEqualityComparer comparer = obj as RandomizedStringEqualityComparer;
- return (comparer != null) && (this._entropy == comparer._entropy);
- }
-
- public override int GetHashCode() {
- return (this.GetType().GetHashCode() ^ ((int) (_entropy & 0x7FFFFFFF)));
- }
-
-
- IEqualityComparer IWellKnownStringEqualityComparer.GetRandomizedEqualityComparer() {
- return new RandomizedStringEqualityComparer();
- }
-
- // We want to serialize the old comparer.
- IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() {
- return EqualityComparer<string>.Default;
- }
- }
-
- // This type is not serializeable by design. It does not exist in previous versions and will be removed
- // Once we move the framework to using secure hashing by default.
- internal sealed class RandomizedObjectEqualityComparer : IEqualityComparer, IWellKnownStringEqualityComparer
- {
- private long _entropy;
-
- public RandomizedObjectEqualityComparer() {
- _entropy = HashHelpers.GetEntropy();
- }
-
- [Pure]
- public new bool Equals(Object x, Object y) {
- if (x != null) {
- if (y != null) return x.Equals(y);
- return false;
- }
- if (y != null) return false;
- return true;
- }
-
- [Pure]
- public int GetHashCode(Object obj) {
- if(obj == null) return 0;
-
- string sObj = obj as string;
- if(sObj != null) return String.InternalMarvin32HashString(sObj, sObj.Length, _entropy);
-
- return obj.GetHashCode();
- }
-
- // Equals method for the comparer itself.
- public override bool Equals(Object obj){
- RandomizedObjectEqualityComparer comparer = obj as RandomizedObjectEqualityComparer;
- return (comparer != null) && (this._entropy == comparer._entropy);
- }
-
- public override int GetHashCode() {
- return (this.GetType().GetHashCode() ^ ((int) (_entropy & 0x7FFFFFFF)));
- }
-
- IEqualityComparer IWellKnownStringEqualityComparer.GetRandomizedEqualityComparer() {
- return new RandomizedObjectEqualityComparer();
- }
-
- // We want to serialize the old comparer, which in this case was null.
- IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() {
- return null;
- }
- }
-#endif
}
-
diff --git a/src/mscorlib/src/System/Collections/Generic/KeyNotFoundException.cs b/src/mscorlib/src/System/Collections/Generic/KeyNotFoundException.cs
index ffcd0405fd..1cd18cf808 100644
--- a/src/mscorlib/src/System/Collections/Generic/KeyNotFoundException.cs
+++ b/src/mscorlib/src/System/Collections/Generic/KeyNotFoundException.cs
@@ -20,7 +20,6 @@ namespace System.Collections.Generic {
using System.Runtime.Serialization;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class KeyNotFoundException : SystemException, ISerializable {
public KeyNotFoundException ()
diff --git a/src/mscorlib/src/System/Collections/Generic/KeyValuePair.cs b/src/mscorlib/src/System/Collections/Generic/KeyValuePair.cs
index ad9f7472aa..ba98adad7d 100644
--- a/src/mscorlib/src/System/Collections/Generic/KeyValuePair.cs
+++ b/src/mscorlib/src/System/Collections/Generic/KeyValuePair.cs
@@ -16,6 +16,7 @@
namespace System.Collections.Generic {
using System;
+ using System.ComponentModel;
using System.Text;
// Provides the Create factory method for KeyValuePair<TKey, TValue>.
@@ -63,7 +64,7 @@ namespace System.Collections.Generic {
return StringBuilderCache.GetStringAndRelease(s);
}
- // BLOCKED (do not add now): [EditorBrowsable(EditorBrowsableState.Never)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public void Deconstruct(out TKey key, out TValue value)
{
key = Key;
diff --git a/src/mscorlib/src/System/Collections/Generic/List.cs b/src/mscorlib/src/System/Collections/Generic/List.cs
index 3e2947f5f9..362e26599d 100644
--- a/src/mscorlib/src/System/Collections/Generic/List.cs
+++ b/src/mscorlib/src/System/Collections/Generic/List.cs
@@ -20,7 +20,6 @@ namespace System.Collections.Generic {
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.Collections.ObjectModel;
- using System.Security.Permissions;
// Implements a variable-size List that uses an array of objects to store the
// elements. A List has a capacity, which is the allocated length
@@ -927,7 +926,9 @@ namespace System.Collections.Generic {
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
Contract.EndContractBlock();
- Array.Reverse(_items, index, count);
+ if (count > 1) {
+ Array.Reverse(_items, index, count);
+ }
_version++;
}
@@ -966,7 +967,9 @@ namespace System.Collections.Generic {
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
Contract.EndContractBlock();
- Array.Sort<T>(_items, index, count, comparer);
+ if (count > 1) {
+ Array.Sort<T>(_items, index, count, comparer);
+ }
_version++;
}
@@ -976,9 +979,10 @@ namespace System.Collections.Generic {
}
Contract.EndContractBlock();
- if( _size > 0) {
+ if (_size > 1) {
ArraySortHelper<T>.Sort(_items, 0, _size, comparison);
}
+ _version++;
}
// ToArray returns an array containing the contents of the List.
diff --git a/src/mscorlib/src/System/Collections/Hashtable.cs b/src/mscorlib/src/System/Collections/Hashtable.cs
index d4c7d8d673..d1831dd97d 100644
--- a/src/mscorlib/src/System/Collections/Hashtable.cs
+++ b/src/mscorlib/src/System/Collections/Hashtable.cs
@@ -17,7 +17,6 @@ namespace System.Collections {
using System;
using System.Runtime;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Threading;
using System.Runtime.CompilerServices;
@@ -66,9 +65,8 @@ namespace System.Collections {
//
[DebuggerTypeProxy(typeof(System.Collections.Hashtable.HashtableDebugView))]
[DebuggerDisplay("Count = {Count}")]
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
- public class Hashtable : IDictionary, ISerializable, IDeserializationCallback, ICloneable {
+ internal class Hashtable : IDictionary, ISerializable, IDeserializationCallback, ICloneable {
/*
Implementation Notes:
The generic Dictionary was copied from Hashtable's source - any bug
@@ -165,75 +163,6 @@ namespace System.Collections {
private IEqualityComparer _keycomparer;
private Object _syncRoot;
- [Obsolete("Please use EqualityComparer property.")]
- protected IHashCodeProvider hcp
- {
- get
- {
- if( _keycomparer is CompatibleComparer) {
- return ((CompatibleComparer)_keycomparer).HashCodeProvider;
- }
- else if( _keycomparer == null) {
- return null;
- }
- else {
- throw new ArgumentException(Environment.GetResourceString("Arg_CannotMixComparisonInfrastructure"));
- }
- }
- set
- {
- if (_keycomparer is CompatibleComparer) {
- CompatibleComparer keyComparer = (CompatibleComparer)_keycomparer;
- _keycomparer = new CompatibleComparer(keyComparer.Comparer, value);
- }
- else if( _keycomparer == null) {
- _keycomparer = new CompatibleComparer((IComparer)null, value);
- }
- else {
- throw new ArgumentException(Environment.GetResourceString("Arg_CannotMixComparisonInfrastructure"));
- }
- }
- }
-
-
- [Obsolete("Please use KeyComparer properties.")]
- protected IComparer comparer
- {
- get
- {
- if( _keycomparer is CompatibleComparer) {
- return ((CompatibleComparer)_keycomparer).Comparer;
- }
- else if( _keycomparer == null) {
- return null;
- }
- else {
- throw new ArgumentException(Environment.GetResourceString("Arg_CannotMixComparisonInfrastructure"));
- }
- }
- set
- {
- if (_keycomparer is CompatibleComparer) {
- CompatibleComparer keyComparer = (CompatibleComparer)_keycomparer;
- _keycomparer = new CompatibleComparer(value, keyComparer.HashCodeProvider);
- }
- else if( _keycomparer == null) {
- _keycomparer = new CompatibleComparer(value, (IHashCodeProvider)null);
- }
- else {
- throw new ArgumentException(Environment.GetResourceString("Arg_CannotMixComparisonInfrastructure"));
- }
- }
- }
-
- protected IEqualityComparer EqualityComparer
- {
- get
- {
- return _keycomparer;
- }
- }
-
// Note: this constructor is a bogus constructor that does nothing
// and is for use only with SyncHashtable.
internal Hashtable( bool trash )
@@ -290,126 +219,31 @@ namespace System.Collections {
Debug.Assert( loadsize < hashsize, "Invalid hashtable loadsize!");
}
- // Constructs a new hashtable with the given initial capacity and load
- // factor. The capacity argument serves as an indication of the
- // number of entries the hashtable will contain. When this number (or an
- // approximation) is known, specifying it in the constructor can eliminate
- // a number of resizing operations that would otherwise be performed when
- // elements are added to the hashtable. The loadFactor argument
- // indicates the maximum ratio of hashtable entries to hashtable buckets.
- // Smaller load factors cause faster average lookup times at the cost of
- // increased memory consumption. A load factor of 1.0 generally provides
- // the best balance between speed and size. The hcp argument
- // is used to specify an Object that will provide hash codes for all
- // the Objects in the table. Using this, you can in effect override
- // GetHashCode() on each Object using your own hash function. The
- // comparer argument will let you specify a custom function for
- // comparing keys. By specifying user-defined objects for hcp
- // and comparer, users could make a hash table using strings
- // as keys do case-insensitive lookups.
- //
- [Obsolete("Please use Hashtable(int, float, IEqualityComparer) instead.")]
- public Hashtable(int capacity, float loadFactor, IHashCodeProvider hcp, IComparer comparer) : this(capacity, loadFactor) {
- if (hcp == null && comparer == null) {
- this._keycomparer = null;
- }
- else {
- this._keycomparer = new CompatibleComparer(comparer,hcp);
- }
- }
-
public Hashtable(int capacity, float loadFactor, IEqualityComparer equalityComparer) : this(capacity, loadFactor) {
this._keycomparer = equalityComparer;
}
-
- // Constructs a new hashtable using a custom hash function
- // and a custom comparison function for keys. This will enable scenarios
- // such as doing lookups with case-insensitive strings.
- //
- [Obsolete("Please use Hashtable(IEqualityComparer) instead.")]
- public Hashtable(IHashCodeProvider hcp, IComparer comparer) : this(0, 1.0f, hcp, comparer) {
- }
public Hashtable(IEqualityComparer equalityComparer) : this(0, 1.0f, equalityComparer) {
}
-
- // Constructs a new hashtable using a custom hash function
- // and a custom comparison function for keys. This will enable scenarios
- // such as doing lookups with case-insensitive strings.
- //
- [Obsolete("Please use Hashtable(int, IEqualityComparer) instead.")]
- public Hashtable(int capacity, IHashCodeProvider hcp, IComparer comparer)
- : this(capacity, 1.0f, hcp, comparer) {
- }
public Hashtable(int capacity, IEqualityComparer equalityComparer)
: this(capacity, 1.0f, equalityComparer) {
}
-
- // Constructs a new hashtable containing a copy of the entries in the given
- // dictionary. The hashtable is created with a load factor of 1.0.
- //
- public Hashtable(IDictionary d) : this(d, 1.0f) {
- }
-
- // Constructs a new hashtable containing a copy of the entries in the given
- // dictionary. The hashtable is created with the given load factor.
- //
- public Hashtable(IDictionary d, float loadFactor)
- : this(d, loadFactor, (IEqualityComparer)null) {
- }
-
- [Obsolete("Please use Hashtable(IDictionary, IEqualityComparer) instead.")]
- public Hashtable(IDictionary d, IHashCodeProvider hcp, IComparer comparer)
- : this(d, 1.0f, hcp, comparer) {
- }
-
- public Hashtable(IDictionary d, IEqualityComparer equalityComparer)
- : this(d, 1.0f, equalityComparer) {
- }
- [Obsolete("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")]
- public Hashtable(IDictionary d, float loadFactor, IHashCodeProvider hcp, IComparer comparer)
- : this((d != null ? d.Count : 0), loadFactor, hcp, comparer) {
- if (d==null)
- throw new ArgumentNullException(nameof(d), Environment.GetResourceString("ArgumentNull_Dictionary"));
- Contract.EndContractBlock();
-
- IDictionaryEnumerator e = d.GetEnumerator();
- while (e.MoveNext()) Add(e.Key, e.Value);
- }
-
- public Hashtable(IDictionary d, float loadFactor, IEqualityComparer equalityComparer)
- : this((d != null ? d.Count : 0), loadFactor, equalityComparer) {
- if (d==null)
- throw new ArgumentNullException(nameof(d), Environment.GetResourceString("ArgumentNull_Dictionary"));
- Contract.EndContractBlock();
-
- IDictionaryEnumerator e = d.GetEnumerator();
- while (e.MoveNext()) Add(e.Key, e.Value);
- }
-
- protected Hashtable(SerializationInfo info, StreamingContext context) {
- //We can't do anything with the keys and values until the entire graph has been deserialized
- //and we have a reasonable estimate that GetHashCode is not going to fail. For the time being,
- //we'll just cache this. The graph is not valid until OnDeserialization has been called.
- HashHelpers.SerializationInfoTable.Add(this, info);
- }
-
- // ‘InitHash’ is basically an implementation of classic DoubleHashing (see http://en.wikipedia.org/wiki/Double_hashing)
+ // InitHash is basically an implementation of classic DoubleHashing (see http://en.wikipedia.org/wiki/Double_hashing)
//
- // 1) The only ‘correctness’ requirement is that the ‘increment’ used to probe
+ // 1) The only correctness requirement is that the increment used to probe
// a. Be non-zero
- // b. Be relatively prime to the table size ‘hashSize’. (This is needed to insure you probe all entries in the table before you ‘wrap’ and visit entries already probed)
+ // b. Be relatively prime to the table size hashSize. (This is needed to insure you probe all entries in the table before you wrap and visit entries already probed)
// 2) Because we choose table sizes to be primes, we just need to insure that the increment is 0 < incr < hashSize
//
// Thus this function would work: Incr = 1 + (seed % (hashSize-1))
//
- // While this works well for ‘uniformly distributed’ keys, in practice, non-uniformity is common.
- // In particular in practice we can see ‘mostly sequential’ where you get long clusters of keys that ‘pack’.
- // To avoid bad behavior you want it to be the case that the increment is ‘large’ even for ‘small’ values (because small
- // values tend to happen more in practice). Thus we multiply ‘seed’ by a number that will make these small values
- // bigger (and not hurt large values). We picked HashPrime (101) because it was prime, and if ‘hashSize-1’ is not a multiple of HashPrime
+ // While this works well for uniformly distributed keys, in practice, non-uniformity is common.
+ // In particular in practice we can see mostly sequential where you get long clusters of keys that pack.
+ // To avoid bad behavior you want it to be the case that the increment is large even for small values (because small
+ // values tend to happen more in practice). Thus we multiply seed by a number that will make these small values
+ // bigger (and not hurt large values). We picked HashPrime (101) because it was prime, and if hashSize-1 is not a multiple of HashPrime
// (enforced in GetPrime), then incr has the potential of being every value from 1 to hashSize-1. The choice was largely arbitrary.
//
// Computes the hash function: H(key, i) = h1(key) + i*h2(key, hashSize).
@@ -439,7 +273,6 @@ namespace System.Collections {
}
// Removes all entries from this hashtable.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public virtual void Clear() {
Debug.Assert(!isWriterInProgress, "Race condition detected in usages of Hashtable - multiple threads appear to be writing to a Hashtable instance simultaneously! Don't do that - use Hashtable.Synchronized.");
@@ -517,29 +350,6 @@ namespace System.Collections {
} while (b.hash_coll < 0 && ++ntry < lbuckets.Length);
return false;
}
-
- // Checks if this hashtable contains an entry with the given value. The
- // values of the entries of the hashtable are compared to the given value
- // using the Object.Equals method. This method performs a linear
- // search and is thus be substantially slower than the ContainsKey
- // method.
- //
- public virtual bool ContainsValue(Object value) {
-
- if (value == null) {
- for (int i = buckets.Length; --i >= 0;) {
- if (buckets[i].key != null && buckets[i].key != buckets && buckets[i].val == null)
- return true;
- }
- }
- else {
- for (int i = buckets.Length; --i >= 0;) {
- Object val = buckets[i].val;
- if (val!=null && val.Equals(value)) return true;
- }
- }
- return false;
- }
// Copies the keys of this hashtable to a given array starting at a given
// index. This method is used by the implementation of the CopyTo method in
@@ -590,25 +400,6 @@ namespace System.Collections {
CopyEntries(array, arrayIndex);
}
- // Copies the values in this Hashtable to an KeyValuePairs array.
- // KeyValuePairs is different from Dictionary Entry in that it has special
- // debugger attributes on its fields.
-
- internal virtual KeyValuePairs[] ToKeyValuePairsArray() {
-
- KeyValuePairs[] array = new KeyValuePairs[count];
- int index = 0;
- bucket[] lbuckets = buckets;
- for (int i = lbuckets.Length; --i >= 0;) {
- Object keyv = lbuckets[i].key;
- if ((keyv != null) && (keyv != buckets)){
- array[index++] = new KeyValuePairs(keyv,lbuckets[i].val);
- }
- }
-
- return array;
- }
-
// Copies the values of this hashtable to a given array starting at a given
// index. This method is used by the implementation of the CopyTo method in
@@ -720,7 +511,6 @@ namespace System.Collections {
version++;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private void rehash( int newsize, bool forceNewHashCode ) {
// reset occupancy
@@ -853,7 +643,6 @@ namespace System.Collections {
// Inserts an entry into this hashtable. This method is called from the Set
// and Add methods. If the add parameter is true and the given key already
// exists in the hashtable, an exception is thrown.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private void Insert (Object key, Object nvalue, bool add) {
if (key == null) {
throw new ArgumentNullException(nameof(key), Environment.GetResourceString("ArgumentNull_Key"));
@@ -987,7 +776,6 @@ namespace System.Collections {
// key exists in the hashtable, it is removed. An ArgumentException is
// thrown if the key is null.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public virtual void Remove(Object key) {
if (key == null) {
throw new ArgumentNullException(nameof(key), Environment.GetResourceString("ArgumentNull_Key"));
@@ -1293,13 +1081,6 @@ namespace System.Collections {
internal SyncHashtable(Hashtable table) : base(false) {
_table = table;
}
-
- internal SyncHashtable(SerializationInfo info, StreamingContext context) : base (info, context) {
- _table = (Hashtable)info.GetValue("ParentTable", typeof(Hashtable));
- if (_table==null) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState"));
- }
- }
/*================================GetObjectData=================================
@@ -1379,12 +1160,6 @@ namespace System.Collections {
return _table.ContainsKey(key);
}
- public override bool ContainsValue(Object key) {
- lock(_table.SyncRoot) {
- return _table.ContainsValue(key);
- }
- }
-
public override void CopyTo(Array array, int arrayIndex) {
lock (_table.SyncRoot) {
_table.CopyTo(array, arrayIndex);
@@ -1438,10 +1213,6 @@ namespace System.Collections {
public override void OnDeserialization(Object sender) {
return;
}
-
- internal override KeyValuePairs[] ToKeyValuePairsArray() {
- return _table.ToKeyValuePairsArray();
- }
}
@@ -1539,23 +1310,6 @@ namespace System.Collections {
// internal debug view class for hashtable
internal class HashtableDebugView {
private Hashtable hashtable;
-
- public HashtableDebugView( Hashtable hashtable) {
- if( hashtable == null) {
- throw new ArgumentNullException(nameof(hashtable));
- }
- Contract.EndContractBlock();
-
- this.hashtable = hashtable;
- }
-
-
- [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
- public KeyValuePairs[] Items {
- get {
- return hashtable.ToKeyValuePairsArray();
- }
- }
}
}
@@ -1605,7 +1359,6 @@ namespace System.Collections {
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static bool IsPrime(int candidate)
{
if ((candidate & 1) != 0)
@@ -1621,7 +1374,6 @@ namespace System.Collections {
return (candidate == 2);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static int GetPrime(int min)
{
if (min < 0)
@@ -1644,11 +1396,6 @@ namespace System.Collections {
return min;
}
- public static int GetMinPrime()
- {
- return primes[0];
- }
-
// Returns size of hashtable to grow to.
public static int ExpandPrime(int oldSize)
{
@@ -1670,33 +1417,6 @@ namespace System.Collections {
public const int MaxPrimeArrayLength = 0x7FEFFFFD;
#if FEATURE_RANDOMIZED_STRING_HASHING
- public static bool IsWellKnownEqualityComparer(object comparer)
- {
- return (comparer == null || comparer == System.Collections.Generic.EqualityComparer<string>.Default || comparer is IWellKnownStringEqualityComparer);
- }
-
- public static IEqualityComparer GetRandomizedEqualityComparer(object comparer)
- {
- Debug.Assert(comparer == null || comparer == System.Collections.Generic.EqualityComparer<string>.Default || comparer is IWellKnownStringEqualityComparer);
-
- if(comparer == null) {
- return new System.Collections.Generic.RandomizedObjectEqualityComparer();
- }
-
- if(comparer == System.Collections.Generic.EqualityComparer<string>.Default) {
- return new System.Collections.Generic.RandomizedStringEqualityComparer();
- }
-
- IWellKnownStringEqualityComparer cmp = comparer as IWellKnownStringEqualityComparer;
-
- if(cmp != null) {
- return cmp.GetRandomizedEqualityComparer();
- }
-
- Debug.Assert(false, "Missing case in GetRandomizedEqualityComparer!");
-
- return null;
- }
public static object GetEqualityComparerForSerialization(object comparer)
{
@@ -1716,33 +1436,8 @@ namespace System.Collections {
}
private const int bufferSize = 1024;
- private static byte[] data;
private static int currentIndex = bufferSize;
private static readonly object lockObj = new Object();
-
- internal static long GetEntropy()
- {
- lock(lockObj) {
- long ret;
-
- if(currentIndex == bufferSize)
- {
- if(data == null)
- {
- data = new byte[bufferSize];
- Debug.Assert(bufferSize % 8 == 0, "We increment our current index by 8, so our buffer size must be a multiple of 8");
- }
-
- Microsoft.Win32.Win32Native.Random(true, data, data.Length);
- currentIndex = 0;
- }
-
- ret = BitConverter.ToInt64(data, currentIndex);
- currentIndex += 8;
-
- return ret;
- }
- }
#endif // FEATURE_RANDOMIZED_STRING_HASHING
}
}
diff --git a/src/mscorlib/src/System/Collections/ICollection.cs b/src/mscorlib/src/System/Collections/ICollection.cs
index 6d4d6e1a93..088928a0ef 100644
--- a/src/mscorlib/src/System/Collections/ICollection.cs
+++ b/src/mscorlib/src/System/Collections/ICollection.cs
@@ -19,7 +19,6 @@ namespace System.Collections {
// Base interface for all collections, defining enumerators, size, and
// synchronization methods.
- [System.Runtime.InteropServices.ComVisible(true)]
public interface ICollection : IEnumerable
{
// Interfaces are not serialable
diff --git a/src/mscorlib/src/System/Collections/IComparer.cs b/src/mscorlib/src/System/Collections/IComparer.cs
index d5a3448934..574af1a768 100644
--- a/src/mscorlib/src/System/Collections/IComparer.cs
+++ b/src/mscorlib/src/System/Collections/IComparer.cs
@@ -21,7 +21,6 @@ namespace System.Collections {
// the Array and List classes.
//
// Interfaces are not serializable
- [System.Runtime.InteropServices.ComVisible(true)]
public interface IComparer {
// Compares two objects. An implementation of this method must return a
// value less than zero if x is less than y, zero if x is equal to y, or a
diff --git a/src/mscorlib/src/System/Collections/IDictionary.cs b/src/mscorlib/src/System/Collections/IDictionary.cs
index 4da89d6983..519d53ed55 100644
--- a/src/mscorlib/src/System/Collections/IDictionary.cs
+++ b/src/mscorlib/src/System/Collections/IDictionary.cs
@@ -21,7 +21,6 @@ namespace System.Collections {
// Keys can be any non-null object. Values can be any object.
// You can look up a value in an IDictionary via the default indexed
// property, Items.
- [System.Runtime.InteropServices.ComVisible(true)]
public interface IDictionary : ICollection
{
// Interfaces are not serializable
diff --git a/src/mscorlib/src/System/Collections/IDictionaryEnumerator.cs b/src/mscorlib/src/System/Collections/IDictionaryEnumerator.cs
index b995a04a0e..2f1add682c 100644
--- a/src/mscorlib/src/System/Collections/IDictionaryEnumerator.cs
+++ b/src/mscorlib/src/System/Collections/IDictionaryEnumerator.cs
@@ -44,7 +44,6 @@ namespace System.Collections {
// return the same DictionaryEntry and avoids boxing the DictionaryEntry (boxing
// is somewhat expensive).
//
-[System.Runtime.InteropServices.ComVisible(true)]
public interface IDictionaryEnumerator : IEnumerator
{
// Returns the key of the current element of the enumeration. The returned
diff --git a/src/mscorlib/src/System/Collections/IEnumerable.cs b/src/mscorlib/src/System/Collections/IEnumerable.cs
index 5fa63f15d0..1d8e71cf07 100644
--- a/src/mscorlib/src/System/Collections/IEnumerable.cs
+++ b/src/mscorlib/src/System/Collections/IEnumerable.cs
@@ -21,7 +21,6 @@ namespace System.Collections {
// Implement this interface if you need to support VB's foreach semantics.
// Also, COM classes that support an enumerator will also implement this interface.
[Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
- [System.Runtime.InteropServices.ComVisible(true)]
public interface IEnumerable
{
// Interfaces are not serializable
diff --git a/src/mscorlib/src/System/Collections/IEnumerator.cs b/src/mscorlib/src/System/Collections/IEnumerator.cs
index 99509d15ea..4c4fc085e8 100644
--- a/src/mscorlib/src/System/Collections/IEnumerator.cs
+++ b/src/mscorlib/src/System/Collections/IEnumerator.cs
@@ -20,7 +20,6 @@ namespace System.Collections {
// Base interface for all enumerators, providing a simple approach
// to iterating over a collection.
[Guid("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
- [System.Runtime.InteropServices.ComVisible(true)]
public interface IEnumerator
{
// Interfaces are not serializable
diff --git a/src/mscorlib/src/System/Collections/IEqualityComparer.cs b/src/mscorlib/src/System/Collections/IEqualityComparer.cs
index 50c732f47c..f591b11152 100644
--- a/src/mscorlib/src/System/Collections/IEqualityComparer.cs
+++ b/src/mscorlib/src/System/Collections/IEqualityComparer.cs
@@ -19,7 +19,6 @@ namespace System.Collections {
using System;
// An IEqualityComparer is a mechanism to consume custom performant comparison infrastructure
// that can be consumed by some of the common collections.
- [System.Runtime.InteropServices.ComVisible(true)]
public interface IEqualityComparer {
bool Equals(Object x, Object y);
int GetHashCode(Object obj);
diff --git a/src/mscorlib/src/System/Collections/IHashCodeProvider.cs b/src/mscorlib/src/System/Collections/IHashCodeProvider.cs
index aefa15e1e5..0ae1e3295b 100644
--- a/src/mscorlib/src/System/Collections/IHashCodeProvider.cs
+++ b/src/mscorlib/src/System/Collections/IHashCodeProvider.cs
@@ -19,8 +19,7 @@ namespace System.Collections {
// Provides a mechanism for a hash table user to override the default
// GetHashCode() function on Objects, providing their own hash function.
[Obsolete("Please use IEqualityComparer instead.")]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface IHashCodeProvider
+ internal interface IHashCodeProvider
{
// Interfaces are not serializable
// Returns a hash code for the given object.
diff --git a/src/mscorlib/src/System/Collections/IList.cs b/src/mscorlib/src/System/Collections/IList.cs
index 8bdfe4c1d0..8b63400852 100644
--- a/src/mscorlib/src/System/Collections/IList.cs
+++ b/src/mscorlib/src/System/Collections/IList.cs
@@ -21,7 +21,6 @@ namespace System.Collections {
// An IList is an ordered collection of objects. The exact ordering
// is up to the implementation of the list, ranging from a sorted
// order to insertion order.
- [System.Runtime.InteropServices.ComVisible(true)]
public interface IList : ICollection
{
// The Item property provides methods to read and edit entries in the List.
diff --git a/src/mscorlib/src/System/Collections/KeyValuePairs.cs b/src/mscorlib/src/System/Collections/KeyValuePairs.cs
deleted file mode 100644
index 22bf92c456..0000000000
--- a/src/mscorlib/src/System/Collections/KeyValuePairs.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-**
-**
-** Purpose: KeyValuePairs to display items in collection class under debugger
-**
-**
-===========================================================*/
-
-namespace System.Collections {
- using System.Diagnostics;
-
- [DebuggerDisplay("{value}", Name = "[{key}]", Type = "" )]
- internal class KeyValuePairs {
- [DebuggerBrowsable(DebuggerBrowsableState.Never)]
- private object key;
-
- [DebuggerBrowsable(DebuggerBrowsableState.Never)]
- private object value;
-
- public KeyValuePairs(object key, object value) {
- this.value = value;
- this.key = key;
- }
-
- public object Key {
- get { return key; }
- }
-
- public object Value {
- get { return value; }
- }
- }
-}
diff --git a/src/mscorlib/src/System/Collections/ListDictionaryInternal.cs b/src/mscorlib/src/System/Collections/ListDictionaryInternal.cs
index be5490b194..617c33707a 100644
--- a/src/mscorlib/src/System/Collections/ListDictionaryInternal.cs
+++ b/src/mscorlib/src/System/Collections/ListDictionaryInternal.cs
@@ -49,13 +49,6 @@ namespace System.Collections {
}
Contract.EndContractBlock();
-#if FEATURE_SERIALIZATION
- if (!key.GetType().IsSerializable)
- throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), nameof(key));
-
- if( (value != null) && (!value.GetType().IsSerializable ) )
- throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), nameof(value));
-#endif
version++;
DictionaryNode last = null;
@@ -136,13 +129,6 @@ namespace System.Collections {
}
Contract.EndContractBlock();
-#if FEATURE_SERIALIZATION
- if (!key.GetType().IsSerializable)
- throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), nameof(key) );
-
- if( (value != null) && (!value.GetType().IsSerializable) )
- throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), nameof(value));
-#endif
version++;
DictionaryNode last = null;
diff --git a/src/mscorlib/src/System/Collections/ObjectModel/Collection.cs b/src/mscorlib/src/System/Collections/ObjectModel/Collection.cs
index a3804ad7ab..b3b19fb616 100644
--- a/src/mscorlib/src/System/Collections/ObjectModel/Collection.cs
+++ b/src/mscorlib/src/System/Collections/ObjectModel/Collection.cs
@@ -13,7 +13,6 @@ namespace System.Collections.ObjectModel
using System.Runtime;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(false)]
[DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))]
[DebuggerDisplay("Count = {Count}")]
public class Collection<T>: IList<T>, IList, IReadOnlyList<T>
diff --git a/src/mscorlib/src/System/Collections/ObjectModel/KeyedCollection.cs b/src/mscorlib/src/System/Collections/ObjectModel/KeyedCollection.cs
index b6fe6ded29..3fe7716203 100644
--- a/src/mscorlib/src/System/Collections/ObjectModel/KeyedCollection.cs
+++ b/src/mscorlib/src/System/Collections/ObjectModel/KeyedCollection.cs
@@ -12,7 +12,6 @@ namespace System.Collections.ObjectModel
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(false)]
[DebuggerTypeProxy(typeof(Mscorlib_KeyedCollectionDebugView<,>))]
[DebuggerDisplay("Count = {Count}")]
public abstract class KeyedCollection<TKey,TItem>: Collection<TItem>
diff --git a/src/mscorlib/src/System/Collections/ObjectModel/ReadOnlyCollection.cs b/src/mscorlib/src/System/Collections/ObjectModel/ReadOnlyCollection.cs
index a0b8b3b459..10c48cf76d 100644
--- a/src/mscorlib/src/System/Collections/ObjectModel/ReadOnlyCollection.cs
+++ b/src/mscorlib/src/System/Collections/ObjectModel/ReadOnlyCollection.cs
@@ -13,7 +13,6 @@ namespace System.Collections.ObjectModel
using System.Runtime;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(false)]
[DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))]
[DebuggerDisplay("Count = {Count}")]
public class ReadOnlyCollection<T>: IList<T>, IList, IReadOnlyList<T>
diff --git a/src/mscorlib/src/System/Collections/SortedList.cs b/src/mscorlib/src/System/Collections/SortedList.cs
deleted file mode 100644
index 4a480a2c37..0000000000
--- a/src/mscorlib/src/System/Collections/SortedList.cs
+++ /dev/null
@@ -1,1008 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-**
-** Purpose: A sorted dictionary.
-**
-**
-===========================================================*/
-namespace System.Collections {
- using System;
- using System.Security.Permissions;
- using System.Diagnostics;
- using System.Diagnostics.CodeAnalysis;
- using System.Diagnostics.Contracts;
- using System.Globalization;
-
- // The SortedList class implements a sorted list of keys and values. Entries in
- // a sorted list are sorted by their keys and are accessible both by key and by
- // index. The keys of a sorted list can be ordered either according to a
- // specific IComparer implementation given when the sorted list is
- // instantiated, or according to the IComparable implementation provided
- // by the keys themselves. In either case, a sorted list does not allow entries
- // with duplicate keys.
- //
- // A sorted list internally maintains two arrays that store the keys and
- // values of the entries. The capacity of a sorted list is the allocated
- // length of these internal arrays. As elements are added to a sorted list, the
- // capacity of the sorted list is automatically increased as required by
- // reallocating the internal arrays. The capacity is never automatically
- // decreased, but users can call either TrimToSize or
- // Capacity explicitly.
- //
- // The GetKeyList and GetValueList methods of a sorted list
- // provides access to the keys and values of the sorted list in the form of
- // List implementations. The List objects returned by these
- // methods are aliases for the underlying sorted list, so modifications
- // made to those lists are directly reflected in the sorted list, and vice
- // versa.
- //
- // The SortedList class provides a convenient way to create a sorted
- // copy of another dictionary, such as a Hashtable. For example:
- //
- // Hashtable h = new Hashtable();
- // h.Add(...);
- // h.Add(...);
- // ...
- // SortedList s = new SortedList(h);
- //
- // The last line above creates a sorted list that contains a copy of the keys
- // and values stored in the hashtable. In this particular example, the keys
- // will be ordered according to the IComparable interface, which they
- // all must implement. To impose a different ordering, SortedList also
- // has a constructor that allows a specific IComparer implementation to
- // be specified.
- //
- [DebuggerTypeProxy(typeof(System.Collections.SortedList.SortedListDebugView))]
- [DebuggerDisplay("Count = {Count}")]
- [System.Runtime.InteropServices.ComVisible(true)]
- [Obsolete("Non-generic collections have been deprecated. Please use collections in System.Collections.Generic.")]
- [Serializable]
- public class SortedList : IDictionary, ICloneable
- {
- private Object[] keys;
- private Object[] values;
- private int _size;
- private int version;
- private IComparer comparer;
- private KeyList keyList;
- private ValueList valueList;
- [NonSerialized]
- private Object _syncRoot;
-
- private const int _defaultCapacity = 16;
-
- private static Object[] emptyArray = EmptyArray<Object>.Value;
-
- // Constructs a new sorted list. The sorted list is initially empty and has
- // a capacity of zero. Upon adding the first element to the sorted list the
- // capacity is increased to 16, and then increased in multiples of two as
- // required. The elements of the sorted list are ordered according to the
- // IComparable interface, which must be implemented by the keys of
- // all entries added to the sorted list.
- public SortedList() {
- Init();
- }
- private void Init()
- {
- keys = emptyArray;
- values = emptyArray;
- _size = 0;
- comparer = new Comparer(CultureInfo.CurrentCulture);
- }
-
- // Constructs a new sorted list. The sorted list is initially empty and has
- // a capacity of zero. Upon adding the first element to the sorted list the
- // capacity is increased to 16, and then increased in multiples of two as
- // required. The elements of the sorted list are ordered according to the
- // IComparable interface, which must be implemented by the keys of
- // all entries added to the sorted list.
- //
- public SortedList(int initialCapacity) {
- if (initialCapacity < 0)
- throw new ArgumentOutOfRangeException(nameof(initialCapacity), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
- keys = new Object[initialCapacity];
- values = new Object[initialCapacity];
- comparer = new Comparer(CultureInfo.CurrentCulture);
- }
-
- // Constructs a new sorted list with a given IComparer
- // implementation. The sorted list is initially empty and has a capacity of
- // zero. Upon adding the first element to the sorted list the capacity is
- // increased to 16, and then increased in multiples of two as required. The
- // elements of the sorted list are ordered according to the given
- // IComparer implementation. If comparer is null, the
- // elements are compared to each other using the IComparable
- // interface, which in that case must be implemented by the keys of all
- // entries added to the sorted list.
- //
- public SortedList(IComparer comparer)
- : this() {
- if (comparer != null) this.comparer = comparer;
- }
-
- // Constructs a new sorted list with a given IComparer
- // implementation and a given initial capacity. The sorted list is
- // initially empty, but will have room for the given number of elements
- // before any reallocations are required. The elements of the sorted list
- // are ordered according to the given IComparer implementation. If
- // comparer is null, the elements are compared to each other using
- // the IComparable interface, which in that case must be implemented
- // by the keys of all entries added to the sorted list.
- //
- public SortedList(IComparer comparer, int capacity)
- : this(comparer) {
- Capacity = capacity;
- }
-
- // Constructs a new sorted list containing a copy of the entries in the
- // given dictionary. The elements of the sorted list are ordered according
- // to the IComparable interface, which must be implemented by the
- // keys of all entries in the the given dictionary as well as keys
- // subsequently added to the sorted list.
- //
- public SortedList(IDictionary d)
- : this(d, null) {
- }
-
- // Constructs a new sorted list containing a copy of the entries in the
- // given dictionary. The elements of the sorted list are ordered according
- // to the given IComparer implementation. If comparer is
- // null, the elements are compared to each other using the
- // IComparable interface, which in that case must be implemented
- // by the keys of all entries in the the given dictionary as well as keys
- // subsequently added to the sorted list.
- //
- public SortedList(IDictionary d, IComparer comparer)
- : this(comparer, (d != null ? d.Count : 0)) {
- if (d==null)
- throw new ArgumentNullException(nameof(d), Environment.GetResourceString("ArgumentNull_Dictionary"));
- Contract.EndContractBlock();
- d.Keys.CopyTo(keys, 0);
- d.Values.CopyTo(values, 0);
- Array.Sort(keys, values, comparer);
- _size = d.Count;
- }
-
- // Adds an entry with the given key and value to this sorted list. An
- // ArgumentException is thrown if the key is already present in the sorted list.
- //
- public virtual void Add(Object key, Object value) {
- if (key == null) throw new ArgumentNullException(nameof(key), Environment.GetResourceString("ArgumentNull_Key"));
- Contract.EndContractBlock();
- int i = Array.BinarySearch(keys, 0, _size, key, comparer);
- if (i >= 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_AddingDuplicate__", GetKey(i), key));
- Insert(~i, key, value);
- }
-
- // Returns the capacity of this sorted list. The capacity of a sorted list
- // represents the allocated length of the internal arrays used to store the
- // keys and values of the list, and thus also indicates the maximum number
- // of entries the list can contain before a reallocation of the internal
- // arrays is required.
- //
- public virtual int Capacity {
- get {
- return keys.Length;
- }
- set {
- if (value < Count) {
- throw new ArgumentOutOfRangeException(nameof(value), Environment.GetResourceString("ArgumentOutOfRange_SmallCapacity"));
- }
- Contract.EndContractBlock();
-
- if (value != keys.Length) {
- if (value > 0) {
- Object[] newKeys = new Object[value];
- Object[] newValues = new Object[value];
- if (_size > 0) {
- Array.Copy(keys, 0, newKeys, 0, _size);
- Array.Copy(values, 0, newValues, 0, _size);
- }
- keys = newKeys;
- values = newValues;
- }
- else {
- // size can only be zero here.
- Debug.Assert( _size == 0, "Size is not zero");
- keys = emptyArray;
- values = emptyArray;
- }
- }
- }
- }
-
- // Returns the number of entries in this sorted list.
- //
- public virtual int Count {
- get {
- return _size;
- }
- }
-
- // Returns a collection representing the keys of this sorted list. This
- // method returns the same object as GetKeyList, but typed as an
- // ICollection instead of an IList.
- //
- public virtual ICollection Keys {
- get {
- return GetKeyList();
- }
- }
-
- // Returns a collection representing the values of this sorted list. This
- // method returns the same object as GetValueList, but typed as an
- // ICollection instead of an IList.
- //
- public virtual ICollection Values {
- get {
- return GetValueList();
- }
- }
-
- // Is this SortedList read-only?
- public virtual bool IsReadOnly {
- get { return false; }
- }
-
- public virtual bool IsFixedSize {
- get { return false; }
- }
-
- // Is this SortedList synchronized (thread-safe)?
- public virtual bool IsSynchronized {
- get { return false; }
- }
-
- // Synchronization root for this object.
- public virtual Object SyncRoot {
- get {
- if( _syncRoot == null) {
- System.Threading.Interlocked.CompareExchange<Object>(ref _syncRoot, new Object(), null);
- }
- return _syncRoot;
- }
- }
-
- // Removes all entries from this sorted list.
- public virtual void Clear() {
- // clear does not change the capacity
- version++;
- Array.Clear(keys, 0, _size); // Don't need to doc this but we clear the elements so that the gc can reclaim the references.
- Array.Clear(values, 0, _size); // Don't need to doc this but we clear the elements so that the gc can reclaim the references.
- _size = 0;
-
- }
-
- // Makes a virtually identical copy of this SortedList. This is a shallow
- // copy. IE, the Objects in the SortedList are not cloned - we copy the
- // references to those objects.
- public virtual Object Clone()
- {
- SortedList sl = new SortedList(_size);
- Array.Copy(keys, 0, sl.keys, 0, _size);
- Array.Copy(values, 0, sl.values, 0, _size);
- sl._size = _size;
- sl.version = version;
- sl.comparer = comparer;
- // Don't copy keyList nor valueList.
- return sl;
- }
-
-
- // Checks if this sorted list contains an entry with the given key.
- //
- public virtual bool Contains(Object key) {
- return IndexOfKey(key) >= 0;
- }
-
- // Checks if this sorted list contains an entry with the given key.
- //
- public virtual bool ContainsKey(Object key) {
- // Yes, this is a SPEC'ed duplicate of Contains().
- return IndexOfKey(key) >= 0;
- }
-
- // Checks if this sorted list contains an entry with the given value. The
- // values of the entries of the sorted list are compared to the given value
- // using the Object.Equals method. This method performs a linear
- // search and is substantially slower than the Contains
- // method.
- //
- public virtual bool ContainsValue(Object value) {
- return IndexOfValue(value) >= 0;
- }
-
- // Copies the values in this SortedList to an array.
- public virtual void CopyTo(Array array, int arrayIndex) {
- if (array == null)
- throw new ArgumentNullException(nameof(array), Environment.GetResourceString("ArgumentNull_Array"));
- if (array.Rank != 1)
- throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
- if (arrayIndex < 0)
- throw new ArgumentOutOfRangeException(nameof(arrayIndex), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (array.Length - arrayIndex < Count)
- throw new ArgumentException(Environment.GetResourceString("Arg_ArrayPlusOffTooSmall"));
- Contract.EndContractBlock();
- for (int i = 0; i<Count; i++) {
- DictionaryEntry entry = new DictionaryEntry(keys[i],values[i]);
- array.SetValue(entry, i + arrayIndex);
- }
- }
-
- // Copies the values in this SortedList to an KeyValuePairs array.
- // KeyValuePairs is different from Dictionary Entry in that it has special
- // debugger attributes on its fields.
-
- internal virtual KeyValuePairs[] ToKeyValuePairsArray() {
- KeyValuePairs[] array = new KeyValuePairs[Count];
- for (int i = 0; i < Count; i++) {
- array[i] = new KeyValuePairs(keys[i],values[i]);
- }
- return array;
- }
-
- // Ensures that the capacity of this sorted list is at least the given
- // minimum value. If the currect capacity of the list is less than
- // min, the capacity is increased to twice the current capacity or
- // to min, whichever is larger.
- private void EnsureCapacity(int min) {
- int newCapacity = keys.Length == 0? 16: keys.Length * 2;
- // Allow the list to grow to maximum possible capacity (~2G elements) before encountering overflow.
- // Note that this check works even when _items.Length overflowed thanks to the (uint) cast
- if ((uint)newCapacity > Array.MaxArrayLength) newCapacity = Array.MaxArrayLength;
- if (newCapacity < min) newCapacity = min;
- Capacity = newCapacity;
- }
-
- // Returns the value of the entry at the given index.
- //
- public virtual Object GetByIndex(int index) {
- if (index < 0 || index >= Count)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.EndContractBlock();
- return values[index];
- }
-
- // Returns an IEnumerator for this sorted list. If modifications
- // made to the sorted list while an enumeration is in progress,
- // the MoveNext and Remove methods
- // of the enumerator will throw an exception.
- //
- IEnumerator IEnumerable.GetEnumerator() {
- return new SortedListEnumerator(this, 0, _size, SortedListEnumerator.DictEntry);
- }
-
- // Returns an IDictionaryEnumerator for this sorted list. If modifications
- // made to the sorted list while an enumeration is in progress,
- // the MoveNext and Remove methods
- // of the enumerator will throw an exception.
- //
- public virtual IDictionaryEnumerator GetEnumerator() {
- return new SortedListEnumerator(this, 0, _size, SortedListEnumerator.DictEntry);
- }
-
- // Returns the key of the entry at the given index.
- //
- public virtual Object GetKey(int index) {
- if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.EndContractBlock();
- return keys[index];
- }
-
- // Returns an IList representing the keys of this sorted list. The
- // returned list is an alias for the keys of this sorted list, so
- // modifications made to the returned list are directly reflected in the
- // underlying sorted list, and vice versa. The elements of the returned
- // list are ordered in the same way as the elements of the sorted list. The
- // returned list does not support adding, inserting, or modifying elements
- // (the Add, AddRange, Insert, InsertRange,
- // Reverse, Set, SetRange, and Sort methods
- // throw exceptions), but it does allow removal of elements (through the
- // Remove and RemoveRange methods or through an enumerator).
- // Null is an invalid key value.
- //
- public virtual IList GetKeyList() {
- if (keyList == null) keyList = new KeyList(this);
- return keyList;
- }
-
- // Returns an IList representing the values of this sorted list. The
- // returned list is an alias for the values of this sorted list, so
- // modifications made to the returned list are directly reflected in the
- // underlying sorted list, and vice versa. The elements of the returned
- // list are ordered in the same way as the elements of the sorted list. The
- // returned list does not support adding or inserting elements (the
- // Add, AddRange, Insert and InsertRange
- // methods throw exceptions), but it does allow modification and removal of
- // elements (through the Remove, RemoveRange, Set and
- // SetRange methods or through an enumerator).
- //
- public virtual IList GetValueList() {
- if (valueList == null) valueList = new ValueList(this);
- return valueList;
- }
-
- // Returns the value associated with the given key. If an entry with the
- // given key is not found, the returned value is null.
- //
- public virtual Object this[Object key] {
- get {
- int i = IndexOfKey(key);
- if (i >= 0) return values[i];
- return null;
- }
- set {
- if (key == null) throw new ArgumentNullException(nameof(key), Environment.GetResourceString("ArgumentNull_Key"));
- Contract.EndContractBlock();
- int i = Array.BinarySearch(keys, 0, _size, key, comparer);
- if (i >= 0) {
- values[i] = value;
- version++;
- return;
- }
- Insert(~i, key, value);
- }
- }
-
- // Returns the index of the entry with a given key in this sorted list. The
- // key is located through a binary search, and thus the average execution
- // time of this method is proportional to Log2(size), where
- // size is the size of this sorted list. The returned value is -1 if
- // the given key does not occur in this sorted list. Null is an invalid
- // key value.
- //
- public virtual int IndexOfKey(Object key) {
- if (key == null)
- throw new ArgumentNullException(nameof(key), Environment.GetResourceString("ArgumentNull_Key"));
- Contract.EndContractBlock();
- int ret = Array.BinarySearch(keys, 0, _size, key, comparer);
- return ret >=0 ? ret : -1;
- }
-
- // Returns the index of the first occurrence of an entry with a given value
- // in this sorted list. The entry is located through a linear search, and
- // thus the average execution time of this method is proportional to the
- // size of this sorted list. The elements of the list are compared to the
- // given value using the Object.Equals method.
- //
- public virtual int IndexOfValue(Object value) {
- return Array.IndexOf(values, value, 0, _size);
- }
-
- // Inserts an entry with a given key and value at a given index.
- private void Insert(int index, Object key, Object value) {
- if (_size == keys.Length) EnsureCapacity(_size + 1);
- if (index < _size) {
- Array.Copy(keys, index, keys, index + 1, _size - index);
- Array.Copy(values, index, values, index + 1, _size - index);
- }
- keys[index] = key;
- values[index] = value;
- _size++;
- version++;
- }
-
- // Removes the entry at the given index. The size of the sorted list is
- // decreased by one.
- //
- public virtual void RemoveAt(int index) {
- if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.EndContractBlock();
- _size--;
- if (index < _size) {
- Array.Copy(keys, index + 1, keys, index, _size - index);
- Array.Copy(values, index + 1, values, index, _size - index);
- }
- keys[_size] = null;
- values[_size] = null;
- version++;
- }
-
- // Removes an entry from this sorted list. If an entry with the specified
- // key exists in the sorted list, it is removed. An ArgumentException is
- // thrown if the key is null.
- //
- public virtual void Remove(Object key) {
- int i = IndexOfKey(key);
- if (i >= 0)
- RemoveAt(i);
- }
-
- // Sets the value at an index to a given value. The previous value of
- // the given entry is overwritten.
- //
- public virtual void SetByIndex(int index, Object value) {
- if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.EndContractBlock();
- values[index] = value;
- version++;
- }
-
- // Returns a thread-safe SortedList.
- //
- public static SortedList Synchronized(SortedList list) {
- if (list==null)
- throw new ArgumentNullException(nameof(list));
- Contract.EndContractBlock();
- return new SyncSortedList(list);
- }
-
- // Sets the capacity of this sorted list to the size of the sorted list.
- // This method can be used to minimize a sorted list's memory overhead once
- // it is known that no new elements will be added to the sorted list. To
- // completely clear a sorted list and release all memory referenced by the
- // sorted list, execute the following statements:
- //
- // sortedList.Clear();
- // sortedList.TrimToSize();
- //
- public virtual void TrimToSize() {
- Capacity = _size;
- }
-
- [Serializable]
- private class SyncSortedList : SortedList
- {
- private SortedList _list;
- private Object _root;
-
-
- internal SyncSortedList(SortedList list) {
- _list = list;
- _root = list.SyncRoot;
- }
-
- public override int Count {
- get { lock(_root) { return _list.Count; } }
- }
-
- public override Object SyncRoot {
- get { return _root; }
- }
-
- public override bool IsReadOnly {
- get { return _list.IsReadOnly; }
- }
-
- public override bool IsFixedSize {
- get { return _list.IsFixedSize; }
- }
-
-
- public override bool IsSynchronized {
- get { return true; }
- }
-
- public override Object this[Object key] {
- get {
- lock(_root) {
- return _list[key];
- }
- }
- set {
- lock(_root) {
- _list[key] = value;
- }
- }
- }
-
- public override void Add(Object key, Object value) {
- lock(_root) {
- _list.Add(key, value);
- }
- }
-
- public override int Capacity {
- get{ lock(_root) { return _list.Capacity; } }
- }
-
- public override void Clear() {
- lock(_root) {
- _list.Clear();
- }
- }
-
- public override Object Clone() {
- lock(_root) {
- return _list.Clone();
- }
- }
-
- public override bool Contains(Object key) {
- lock(_root) {
- return _list.Contains(key);
- }
- }
-
- public override bool ContainsKey(Object key) {
- lock(_root) {
- return _list.ContainsKey(key);
- }
- }
-
- public override bool ContainsValue(Object key) {
- lock(_root) {
- return _list.ContainsValue(key);
- }
- }
-
- public override void CopyTo(Array array, int index) {
- lock(_root) {
- _list.CopyTo(array, index);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override Object GetByIndex(int index) {
- lock(_root) {
- return _list.GetByIndex(index);
- }
- }
-
- public override IDictionaryEnumerator GetEnumerator() {
- lock(_root) {
- return _list.GetEnumerator();
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override Object GetKey(int index) {
- lock(_root) {
- return _list.GetKey(index);
- }
- }
-
- public override IList GetKeyList() {
- lock(_root) {
- return _list.GetKeyList();
- }
- }
-
- public override IList GetValueList() {
- lock(_root) {
- return _list.GetValueList();
- }
- }
-
- public override int IndexOfKey(Object key) {
- if (key == null)
- throw new ArgumentNullException(nameof(key), Environment.GetResourceString("ArgumentNull_Key"));
- Contract.EndContractBlock();
-
- lock(_root) {
- return _list.IndexOfKey(key);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override int IndexOfValue(Object value) {
- lock(_root) {
- return _list.IndexOfValue(value);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void RemoveAt(int index) {
- lock(_root) {
- _list.RemoveAt(index);
- }
- }
-
- public override void Remove(Object key) {
- lock(_root) {
- _list.Remove(key);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void SetByIndex(int index, Object value) {
- lock(_root) {
- _list.SetByIndex(index, value);
- }
- }
-
- internal override KeyValuePairs[] ToKeyValuePairsArray() {
- return _list.ToKeyValuePairsArray();
- }
-
- public override void TrimToSize() {
- lock(_root) {
- _list.TrimToSize();
- }
- }
- }
-
-
- [Serializable]
- private class SortedListEnumerator : IDictionaryEnumerator, ICloneable
- {
- private SortedList sortedList;
- private Object key;
- private Object value;
- private int index;
- private int startIndex; // Store for Reset.
- private int endIndex;
- private int version;
- private bool current; // Is the current element valid?
- private int getObjectRetType; // What should GetObject return?
-
- internal const int Keys = 1;
- internal const int Values = 2;
- internal const int DictEntry = 3;
-
- internal SortedListEnumerator(SortedList sortedList, int index, int count,
- int getObjRetType) {
- this.sortedList = sortedList;
- this.index = index;
- startIndex = index;
- endIndex = index + count;
- version = sortedList.version;
- getObjectRetType = getObjRetType;
- current = false;
- }
-
- public Object Clone()
- {
- return MemberwiseClone();
- }
-
- public virtual Object Key {
- get {
- if (version != sortedList.version) throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumFailedVersion"));
- if (current == false) throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
- return key;
- }
- }
-
- public virtual bool MoveNext() {
- if (version != sortedList.version) throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumFailedVersion"));
- if (index < endIndex) {
- key = sortedList.keys[index];
- value = sortedList.values[index];
- index++;
- current = true;
- return true;
- }
- key = null;
- value = null;
- current = false;
- return false;
- }
-
- public virtual DictionaryEntry Entry {
- get {
- if (version != sortedList.version) throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumFailedVersion"));
- if (current == false) throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
- return new DictionaryEntry(key, value);
- }
- }
-
- public virtual Object Current {
- get {
- if (current == false) throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
-
- if (getObjectRetType==Keys)
- return key;
- else if (getObjectRetType==Values)
- return value;
- else
- return new DictionaryEntry(key, value);
- }
- }
-
- public virtual Object Value {
- get {
- if (version != sortedList.version) throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumFailedVersion));
- if (current == false) throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
- return value;
- }
- }
-
- public virtual void Reset() {
- if (version != sortedList.version) throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumFailedVersion));
- index = startIndex;
- current = false;
- key = null;
- value = null;
- }
- }
-
- [Serializable]
- private class KeyList : IList
- {
- private SortedList sortedList;
-
- internal KeyList(SortedList sortedList) {
- this.sortedList = sortedList;
- }
-
- public virtual int Count {
- get { return sortedList._size; }
- }
-
- public virtual bool IsReadOnly {
- get { return true; }
- }
-
- public virtual bool IsFixedSize {
- get { return true; }
- }
-
- public virtual bool IsSynchronized {
- get { return sortedList.IsSynchronized; }
- }
-
- public virtual Object SyncRoot {
- get { return sortedList.SyncRoot; }
- }
-
- public virtual int Add(Object key) {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- // return 0; // suppress compiler warning
- }
-
- public virtual void Clear() {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
-
- public virtual bool Contains(Object key) {
- return sortedList.Contains(key);
- }
-
- public virtual void CopyTo(Array array, int arrayIndex) {
- if (array != null && array.Rank != 1)
- throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
- Contract.EndContractBlock();
-
- // defer error checking to Array.Copy
- Array.Copy(sortedList.keys, 0, array, arrayIndex, sortedList.Count);
- }
-
- public virtual void Insert(int index, Object value) {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
-
- public virtual Object this[int index] {
- get {
- return sortedList.GetKey(index);
- }
- set {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_KeyCollectionSet"));
- }
- }
-
- public virtual IEnumerator GetEnumerator() {
- return new SortedListEnumerator(sortedList, 0, sortedList.Count, SortedListEnumerator.Keys);
- }
-
- public virtual int IndexOf(Object key) {
- if (key==null)
- throw new ArgumentNullException(nameof(key), Environment.GetResourceString("ArgumentNull_Key"));
- Contract.EndContractBlock();
-
- int i = Array.BinarySearch(sortedList.keys, 0,
- sortedList.Count, key, sortedList.comparer);
- if (i >= 0) return i;
- return -1;
- }
-
- public virtual void Remove(Object key) {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
-
- public virtual void RemoveAt(int index) {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
- }
-
- [Serializable]
- private class ValueList : IList
- {
- private SortedList sortedList;
-
- internal ValueList(SortedList sortedList) {
- this.sortedList = sortedList;
- }
-
- public virtual int Count {
- get { return sortedList._size; }
- }
-
- public virtual bool IsReadOnly {
- get { return true; }
- }
-
- public virtual bool IsFixedSize {
- get { return true; }
- }
-
- public virtual bool IsSynchronized {
- get { return sortedList.IsSynchronized; }
- }
-
- public virtual Object SyncRoot {
- get { return sortedList.SyncRoot; }
- }
-
- public virtual int Add(Object key) {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
-
- public virtual void Clear() {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
-
- public virtual bool Contains(Object value) {
- return sortedList.ContainsValue(value);
- }
-
- public virtual void CopyTo(Array array, int arrayIndex) {
- if (array != null && array.Rank != 1)
- throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
- Contract.EndContractBlock();
-
- // defer error checking to Array.Copy
- Array.Copy(sortedList.values, 0, array, arrayIndex, sortedList.Count);
- }
-
- public virtual void Insert(int index, Object value) {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
-
- public virtual Object this[int index] {
- get {
- return sortedList.GetByIndex(index);
- }
- set {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
- }
-
- public virtual IEnumerator GetEnumerator() {
- return new SortedListEnumerator(sortedList, 0, sortedList.Count, SortedListEnumerator.Values);
- }
-
- public virtual int IndexOf(Object value) {
- return Array.IndexOf(sortedList.values, value, 0, sortedList.Count);
- }
-
- public virtual void Remove(Object value) {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
-
- public virtual void RemoveAt(int index) {
- throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_SortedListNestedWrite));
- }
-
- }
-
- // internal debug view class for sorted list
- internal class SortedListDebugView {
- private SortedList sortedList;
-
- public SortedListDebugView( SortedList sortedList) {
- if( sortedList == null) {
- throw new ArgumentNullException(nameof(sortedList));
- }
- Contract.EndContractBlock();
-
- this.sortedList = sortedList;
- }
-
- [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
- public KeyValuePairs[] Items {
- get {
- return sortedList.ToKeyValuePairsArray();
- }
- }
- }
- }
-}
diff --git a/src/mscorlib/src/System/Collections/Stack.cs b/src/mscorlib/src/System/Collections/Stack.cs
deleted file mode 100644
index c3ad15abd8..0000000000
--- a/src/mscorlib/src/System/Collections/Stack.cs
+++ /dev/null
@@ -1,379 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-**
-** Purpose: An array implementation of a stack.
-**
-**
-=============================================================================*/
-namespace System.Collections {
- using System;
- using System.Security.Permissions;
- using System.Diagnostics;
- using System.Diagnostics.CodeAnalysis;
- using System.Diagnostics.Contracts;
-
- // A simple stack of objects. Internally it is implemented as an array,
- // so Push can be O(n). Pop is O(1).
- [DebuggerTypeProxy(typeof(System.Collections.Stack.StackDebugView))]
- [DebuggerDisplay("Count = {Count}")]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- public class Stack : ICollection, ICloneable {
- private Object[] _array; // Storage for stack elements
- [ContractPublicPropertyName("Count")]
- private int _size; // Number of items in the stack.
- private int _version; // Used to keep enumerator in sync w/ collection.
- [NonSerialized]
- private Object _syncRoot;
-
- private const int _defaultCapacity = 10;
-
- public Stack() {
- _array = new Object[_defaultCapacity];
- _size = 0;
- _version = 0;
- }
-
- // Create a stack with a specific initial capacity. The initial capacity
- // must be a non-negative number.
- public Stack(int initialCapacity) {
- if (initialCapacity < 0)
- throw new ArgumentOutOfRangeException(nameof(initialCapacity), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
- if (initialCapacity < _defaultCapacity)
- initialCapacity = _defaultCapacity; // Simplify doubling logic in Push.
- _array = new Object[initialCapacity];
- _size = 0;
- _version = 0;
- }
-
- // Fills a Stack with the contents of a particular collection. The items are
- // pushed onto the stack in the same order they are read by the enumerator.
- //
- public Stack(ICollection col) : this((col==null ? 32 : col.Count))
- {
- if (col==null)
- throw new ArgumentNullException(nameof(col));
- Contract.EndContractBlock();
- IEnumerator en = col.GetEnumerator();
- while(en.MoveNext())
- Push(en.Current);
- }
-
- public virtual int Count {
- get {
- Contract.Ensures(Contract.Result<int>() >= 0);
- return _size;
- }
- }
-
- public virtual bool IsSynchronized {
- get { return false; }
- }
-
- public virtual Object SyncRoot {
- get {
- if( _syncRoot == null) {
- System.Threading.Interlocked.CompareExchange<Object>(ref _syncRoot, new Object(), null);
- }
- return _syncRoot;
- }
- }
-
- // Removes all Objects from the Stack.
- public virtual void Clear() {
- Array.Clear(_array, 0, _size); // Don't need to doc this but we clear the elements so that the gc can reclaim the references.
- _size = 0;
- _version++;
- }
-
- public virtual Object Clone() {
- Contract.Ensures(Contract.Result<Object>() != null);
-
- Stack s = new Stack(_size);
- s._size = _size;
- Array.Copy(_array, 0, s._array, 0, _size);
- s._version = _version;
- return s;
- }
-
- public virtual bool Contains(Object obj) {
- int count = _size;
-
- while (count-- > 0) {
- if (obj == null) {
- if (_array[count] == null)
- return true;
- }
- else if (_array[count] != null && _array[count].Equals(obj)) {
- return true;
- }
- }
- return false;
- }
-
- // Copies the stack into an array.
- public virtual void CopyTo(Array array, int index) {
- if (array==null)
- throw new ArgumentNullException(nameof(array));
- if (array.Rank != 1)
- throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (array.Length - index < _size)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- int i = 0;
- if (array is Object[]) {
- Object[] objArray = (Object[]) array;
- while(i < _size) {
- objArray[i+index] = _array[_size-i-1];
- i++;
- }
- }
- else {
- while(i < _size) {
- array.SetValue(_array[_size-i-1], i+index);
- i++;
- }
- }
- }
-
- // Returns an IEnumerator for this Stack.
- public virtual IEnumerator GetEnumerator() {
- Contract.Ensures(Contract.Result<IEnumerator>() != null);
- return new StackEnumerator(this);
- }
-
- // Returns the top object on the stack without removing it. If the stack
- // is empty, Peek throws an InvalidOperationException.
- public virtual Object Peek() {
- if (_size==0)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EmptyStack"));
- Contract.EndContractBlock();
- return _array[_size-1];
- }
-
- // Pops an item from the top of the stack. If the stack is empty, Pop
- // throws an InvalidOperationException.
- public virtual Object Pop() {
- if (_size == 0)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EmptyStack"));
- //Contract.Ensures(Count == Contract.OldValue(Count) - 1);
- Contract.EndContractBlock();
- _version++;
- Object obj = _array[--_size];
- _array[_size] = null; // Free memory quicker.
- return obj;
- }
-
- // Pushes an item to the top of the stack.
- //
- public virtual void Push(Object obj) {
- //Contract.Ensures(Count == Contract.OldValue(Count) + 1);
- if (_size == _array.Length) {
- Object[] newArray = new Object[2*_array.Length];
- Array.Copy(_array, 0, newArray, 0, _size);
- _array = newArray;
- }
- _array[_size++] = obj;
- _version++;
- }
-
- // Returns a synchronized Stack.
- //
- public static Stack Synchronized(Stack stack) {
- if (stack==null)
- throw new ArgumentNullException(nameof(stack));
- Contract.Ensures(Contract.Result<Stack>() != null);
- Contract.EndContractBlock();
- return new SyncStack(stack);
- }
-
-
- // Copies the Stack to an array, in the same order Pop would return the items.
- public virtual Object[] ToArray()
- {
- Contract.Ensures(Contract.Result<Object[]>() != null);
-
- Object[] objArray = new Object[_size];
- int i = 0;
- while(i < _size) {
- objArray[i] = _array[_size-i-1];
- i++;
- }
- return objArray;
- }
-
- [Serializable]
- private class SyncStack : Stack
- {
- private Stack _s;
- private Object _root;
-
- internal SyncStack(Stack stack) {
- _s = stack;
- _root = stack.SyncRoot;
- }
-
- public override bool IsSynchronized {
- get { return true; }
- }
-
- public override Object SyncRoot {
- get {
- return _root;
- }
- }
-
- public override int Count {
- get {
- lock (_root) {
- return _s.Count;
- }
- }
- }
-
- public override bool Contains(Object obj) {
- lock (_root) {
- return _s.Contains(obj);
- }
- }
-
- public override Object Clone()
- {
- lock (_root) {
- return new SyncStack((Stack)_s.Clone());
- }
- }
-
- public override void Clear() {
- lock (_root) {
- _s.Clear();
- }
- }
-
- public override void CopyTo(Array array, int arrayIndex) {
- lock (_root) {
- _s.CopyTo(array, arrayIndex);
- }
- }
-
- public override void Push(Object value) {
- lock (_root) {
- _s.Push(value);
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Thread safety problems with precondition - can't express the precondition as of Dev10.
- public override Object Pop() {
- lock (_root) {
- return _s.Pop();
- }
- }
-
- public override IEnumerator GetEnumerator() {
- lock (_root) {
- return _s.GetEnumerator();
- }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Thread safety problems with precondition - can't express the precondition as of Dev10.
- public override Object Peek() {
- lock (_root) {
- return _s.Peek();
- }
- }
-
- public override Object[] ToArray() {
- lock (_root) {
- return _s.ToArray();
- }
- }
- }
-
-
- [Serializable]
- private class StackEnumerator : IEnumerator, ICloneable
- {
- private Stack _stack;
- private int _index;
- private int _version;
- private Object currentElement;
-
- internal StackEnumerator(Stack stack) {
- _stack = stack;
- _version = _stack._version;
- _index = -2;
- currentElement = null;
- }
-
- public Object Clone()
- {
- return MemberwiseClone();
- }
-
- public virtual bool MoveNext() {
- bool retval;
- if (_version != _stack._version) throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumFailedVersion));
- if (_index == -2) { // First call to enumerator.
- _index = _stack._size-1;
- retval = ( _index >= 0);
- if (retval)
- currentElement = _stack._array[_index];
- return retval;
- }
- if (_index == -1) { // End of enumeration.
- return false;
- }
-
- retval = (--_index >= 0);
- if (retval)
- currentElement = _stack._array[_index];
- else
- currentElement = null;
- return retval;
- }
-
- public virtual Object Current {
- get {
- if (_index == -2) throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumNotStarted));
- if (_index == -1) throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumEnded));
- return currentElement;
- }
- }
-
- public virtual void Reset() {
- if (_version != _stack._version) throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumFailedVersion));
- _index = -2;
- currentElement = null;
- }
- }
-
- internal class StackDebugView {
- private Stack stack;
-
- public StackDebugView( Stack stack) {
- if( stack == null)
- throw new ArgumentNullException(nameof(stack));
- Contract.EndContractBlock();
-
- this.stack = stack;
- }
-
- [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
- public Object[] Items {
- get {
- return stack.ToArray();
- }
- }
- }
- }
-}
diff --git a/src/mscorlib/src/System/CompatibilitySwitches.cs b/src/mscorlib/src/System/CompatibilitySwitches.cs
index bb2f02a679..58dd640f88 100644
--- a/src/mscorlib/src/System/CompatibilitySwitches.cs
+++ b/src/mscorlib/src/System/CompatibilitySwitches.cs
@@ -10,7 +10,6 @@ namespace System
internal static class CompatibilitySwitches
{
private static bool s_AreSwitchesSet;
- private static bool s_useLatestBehaviorWhenTFMNotSpecified; // Which behavior to use when the TFM is not specified.
public static bool IsCompatibilityBehaviorDefined
{
@@ -20,39 +19,9 @@ namespace System
}
}
- private static bool IsCompatibilitySwitchSet(string compatibilitySwitch)
- {
- bool? result = AppDomain.CurrentDomain.IsCompatibilitySwitchSet(compatibilitySwitch);
- return (result.HasValue && result.Value);
- }
-
internal static void InitializeSwitches()
{
s_AreSwitchesSet = true;
}
-
- public static bool IsNetFx40TimeSpanLegacyFormatMode
- {
- get
- {
- return false;
- }
- }
-
- public static bool IsNetFx40LegacySecurityPolicy
- {
- get
- {
- return false;
- }
- }
-
- public static bool IsNetFx45LegacyManagedDeflateStream
- {
- get
- {
- return false;
- }
- }
}
}
diff --git a/src/mscorlib/src/System/ComponentModel/EditorBrowsableAttribute.cs b/src/mscorlib/src/System/ComponentModel/EditorBrowsableAttribute.cs
new file mode 100644
index 0000000000..a7946f8203
--- /dev/null
+++ b/src/mscorlib/src/System/ComponentModel/EditorBrowsableAttribute.cs
@@ -0,0 +1,48 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace System.ComponentModel
+{
+ [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Delegate | AttributeTargets.Interface)]
+ public sealed class EditorBrowsableAttribute : Attribute
+ {
+ private EditorBrowsableState browsableState;
+
+ public EditorBrowsableAttribute(EditorBrowsableState state)
+ {
+ browsableState = state;
+ }
+
+ public EditorBrowsableAttribute () : this(EditorBrowsableState.Always) { }
+
+ public EditorBrowsableState State
+ {
+ get { return browsableState; }
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj == this)
+ {
+ return true;
+ }
+
+ EditorBrowsableAttribute other = obj as EditorBrowsableAttribute;
+
+ return (other != null) && other.browsableState == browsableState;
+ }
+
+ public override int GetHashCode()
+ {
+ return base.GetHashCode();
+ }
+ }
+
+ public enum EditorBrowsableState
+ {
+ Always,
+ Never,
+ Advanced
+ }
+}
diff --git a/src/mscorlib/src/System/Configuration/Assemblies/AssemblyHash.cs b/src/mscorlib/src/System/Configuration/Assemblies/AssemblyHash.cs
deleted file mode 100644
index a7b0e70266..0000000000
--- a/src/mscorlib/src/System/Configuration/Assemblies/AssemblyHash.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** Purpose:
-**
-**
-===========================================================*/
-namespace System.Configuration.Assemblies {
- using System;
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- [Obsolete("The AssemblyHash class has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- public struct AssemblyHash : ICloneable
- {
- private AssemblyHashAlgorithm _Algorithm;
- private byte[] _Value;
-
- [Obsolete("The AssemblyHash class has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- public static readonly AssemblyHash Empty = new AssemblyHash(AssemblyHashAlgorithm.None, null);
-
- [Obsolete("The AssemblyHash class has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- public AssemblyHash(byte[] value) {
- _Algorithm = AssemblyHashAlgorithm.SHA1;
- _Value = null;
-
- if (value != null) {
- int length = value.Length;
- _Value = new byte[length];
- Array.Copy(value, _Value, length);
- }
- }
-
- [Obsolete("The AssemblyHash class has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- public AssemblyHash(AssemblyHashAlgorithm algorithm, byte[] value) {
- _Algorithm = algorithm;
- _Value = null;
-
- if (value != null) {
- int length = value.Length;
- _Value = new byte[length];
- Array.Copy(value, _Value, length);
- }
- }
-
- // Hash is made up of a byte array and a value from a class of supported
- // algorithm types.
- [Obsolete("The AssemblyHash class has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- public AssemblyHashAlgorithm Algorithm {
- get { return _Algorithm; }
- set { _Algorithm = value; }
- }
-
- [Obsolete("The AssemblyHash class has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- public byte[] GetValue() {
- return _Value;
- }
-
- [Obsolete("The AssemblyHash class has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- public void SetValue(byte[] value) {
- _Value = value;
- }
-
- [Obsolete("The AssemblyHash class has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- public Object Clone() {
- return new AssemblyHash(_Algorithm, _Value);
- }
- }
-
-}
diff --git a/src/mscorlib/src/System/Configuration/Assemblies/AssemblyHashAlgorithm.cs b/src/mscorlib/src/System/Configuration/Assemblies/AssemblyHashAlgorithm.cs
index 6c4fb3febf..a19d0344b1 100644
--- a/src/mscorlib/src/System/Configuration/Assemblies/AssemblyHashAlgorithm.cs
+++ b/src/mscorlib/src/System/Configuration/Assemblies/AssemblyHashAlgorithm.cs
@@ -16,17 +16,13 @@ namespace System.Configuration.Assemblies {
using System;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum AssemblyHashAlgorithm
{
None = 0,
MD5 = 0x8003,
SHA1 = 0x8004,
- [ComVisible(false)]
SHA256 = 0x800c,
- [ComVisible(false)]
SHA384 = 0x800d,
- [ComVisible(false)]
SHA512 = 0x800e,
}
}
diff --git a/src/mscorlib/src/System/Configuration/Assemblies/AssemblyVersionCompatibility.cs b/src/mscorlib/src/System/Configuration/Assemblies/AssemblyVersionCompatibility.cs
index 4b0f1e4236..b7e9c30c62 100644
--- a/src/mscorlib/src/System/Configuration/Assemblies/AssemblyVersionCompatibility.cs
+++ b/src/mscorlib/src/System/Configuration/Assemblies/AssemblyVersionCompatibility.cs
@@ -14,7 +14,6 @@ namespace System.Configuration.Assemblies {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum AssemblyVersionCompatibility
{
SameMachine = 1,
diff --git a/src/mscorlib/src/System/ContextMarshalException.cs b/src/mscorlib/src/System/ContextMarshalException.cs
deleted file mode 100644
index f74a62b991..0000000000
--- a/src/mscorlib/src/System/ContextMarshalException.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: Exception class for attempting to pass an instance through a context
-** boundary, when the formal type and the instance's marshal style are
-** incompatible or cannot be marshaled.
-**
-** This is thrown by the VM when attempts to marshal the exception
-** object at the AppDomain transition boundary fails.
-=============================================================================*/
-
-namespace System {
- using System.Runtime.InteropServices;
- using System.Runtime.Remoting;
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- public class ContextMarshalException : SystemException {
- public ContextMarshalException()
- : base(Environment.GetResourceString("Arg_ContextMarshalException")) {
- SetErrorCode(__HResults.COR_E_CONTEXTMARSHAL);
- }
-
- public ContextMarshalException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_CONTEXTMARSHAL);
- }
-
- public ContextMarshalException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.COR_E_CONTEXTMARSHAL);
- }
-
- protected ContextMarshalException(SerializationInfo info, StreamingContext context) : base(info, context) {
- }
-
- }
-
-}
diff --git a/src/mscorlib/src/System/Convert.cs b/src/mscorlib/src/System/Convert.cs
index 0e14f93fee..0cd3c5d715 100644
--- a/src/mscorlib/src/System/Convert.cs
+++ b/src/mscorlib/src/System/Convert.cs
@@ -2158,7 +2158,6 @@ namespace System {
return ToBase64String(inArray, 0, inArray.Length, Base64FormattingOptions.None);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public static String ToBase64String(byte[] inArray, Base64FormattingOptions options) {
if (inArray==null) {
throw new ArgumentNullException(nameof(inArray));
@@ -2172,7 +2171,6 @@ namespace System {
return ToBase64String(inArray, offset, length, Base64FormattingOptions.None);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public static unsafe String ToBase64String(byte[] inArray, int offset, int length, Base64FormattingOptions options) {
//Do data verfication
if (inArray==null)
@@ -2202,7 +2200,7 @@ namespace System {
string returnString = string.FastAllocateString(stringLength);
fixed (char* outChars = returnString){
- fixed (byte* inData = inArray) {
+ fixed (byte* inData = &inArray[0]) {
int j = ConvertToBase64Array(outChars,inData,offset,length, insertLineBreaks);
BCLDebug.Assert(returnString.Length == j, "returnString.Length == j");
return returnString;
@@ -2218,7 +2216,6 @@ namespace System {
return ToBase64CharArray(inArray, offsetIn, length, outArray, offsetOut, Base64FormattingOptions.None);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public static unsafe int ToBase64CharArray(byte[] inArray, int offsetIn, int length, char[] outArray, int offsetOut, Base64FormattingOptions options) {
//Do data verfication
if (inArray==null)
@@ -2265,7 +2262,7 @@ namespace System {
throw new ArgumentOutOfRangeException(nameof(offsetOut), Environment.GetResourceString("ArgumentOutOfRange_OffsetOut"));
fixed (char* outChars = &outArray[offsetOut]) {
- fixed (byte* inData = inArray) {
+ fixed (byte* inData = &inArray[0]) {
retVal = ConvertToBase64Array(outChars,inData,offsetIn,length, insertLineBreaks);
}
}
@@ -2282,7 +2279,7 @@ namespace System {
int i;
// get a pointer to the base64Table to avoid unnecessary range checking
- fixed(char* base64 = base64Table) {
+ fixed(char* base64 = &base64Table[0]) {
for (i=offset; i<calcLength; i+=3)
{
if (insertLineBreaks) {
diff --git a/src/mscorlib/src/System/DBNull.cs b/src/mscorlib/src/System/DBNull.cs
index 6f80af7e21..65c85ba968 100644
--- a/src/mscorlib/src/System/DBNull.cs
+++ b/src/mscorlib/src/System/DBNull.cs
@@ -11,8 +11,6 @@ namespace System {
using System;
using System.Runtime.Remoting;
using System.Runtime.Serialization;
- using System.Security.Permissions;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public sealed class DBNull : ISerializable, IConvertible {
diff --git a/src/mscorlib/src/System/DataMisalignedException.cs b/src/mscorlib/src/System/DataMisalignedException.cs
index e5332bb9b7..a3653e7219 100644
--- a/src/mscorlib/src/System/DataMisalignedException.cs
+++ b/src/mscorlib/src/System/DataMisalignedException.cs
@@ -9,37 +9,31 @@
**
=============================================================================*/
-namespace System
-{
- using System;
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
+namespace System
+{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class DataMisalignedException : SystemException
{
- public DataMisalignedException()
- : base(Environment.GetResourceString("Arg_DataMisalignedException"))
- {
- SetErrorCode(__HResults.COR_E_DATAMISALIGNED);
- }
-
- public DataMisalignedException(String message)
- : base(message)
+ public DataMisalignedException()
+ : base(SR.Arg_DataMisalignedException)
{
- SetErrorCode(__HResults.COR_E_DATAMISALIGNED);
+ HResult = __HResults.COR_E_DATAMISALIGNED;
}
- public DataMisalignedException(String message, Exception innerException)
- : base(message, innerException)
+ public DataMisalignedException(String message)
+ : base(message)
{
- SetErrorCode(__HResults.COR_E_DATAMISALIGNED);
+ HResult = __HResults.COR_E_DATAMISALIGNED;
}
- internal DataMisalignedException(SerializationInfo info, StreamingContext context)
- : base (info, context)
+ public DataMisalignedException(String message, Exception innerException)
+ : base(message, innerException)
{
+ HResult = __HResults.COR_E_DATAMISALIGNED;
}
- }
+ internal DataMisalignedException(SerializationInfo info, StreamingContext context) : base(info, context) { }
+ }
}
diff --git a/src/mscorlib/src/System/DateTime.cs b/src/mscorlib/src/System/DateTime.cs
index e93346c42f..3de50336a9 100644
--- a/src/mscorlib/src/System/DateTime.cs
+++ b/src/mscorlib/src/System/DateTime.cs
@@ -13,7 +13,6 @@ namespace System {
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
using CultureInfo = System.Globalization.CultureInfo;
using Calendar = System.Globalization.Calendar;
@@ -461,7 +460,12 @@ namespace System {
// parts of the result are the same as those of this DateTime.
//
public DateTime AddYears(int value) {
- if (value < -10000 || value > 10000) throw new ArgumentOutOfRangeException("years", Environment.GetResourceString("ArgumentOutOfRange_DateTimeBadYears"));
+ if (value < -10000 || value > 10000)
+ {
+ // DateTimeOffset.AddYears(int years) is implemented on top of DateTime.AddYears(int value). Use the more appropriate
+ // parameter name out of the two for the exception.
+ throw new ArgumentOutOfRangeException("years", Environment.GetResourceString("ArgumentOutOfRange_DateTimeBadYears"));
+ }
Contract.EndContractBlock();
return AddMonths(value * 12);
}
@@ -658,7 +662,6 @@ namespace System {
return new DateTime(DoubleDateToTicks(d), DateTimeKind.Unspecified);
}
- [System.Security.SecurityCritical /*auto-generated_required*/]
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
if (info==null) {
throw new ArgumentNullException(nameof(info));
@@ -705,12 +708,6 @@ namespace System {
return (Int64)dateData;
}
}
-
- // Return the underlying data, without adjust local times to the right time zone. Needed if performance
- // or compatibility are important.
- internal Int64 ToBinaryRaw() {
- return (Int64)dateData;
- }
// Returns the date part of this DateTime. The resulting value
// corresponds to this DateTime with the time-of-day part set to
diff --git a/src/mscorlib/src/System/DateTimeKind.cs b/src/mscorlib/src/System/DateTimeKind.cs
index 1a8a4ff6b4..6b5e690df0 100644
--- a/src/mscorlib/src/System/DateTimeKind.cs
+++ b/src/mscorlib/src/System/DateTimeKind.cs
@@ -2,14 +2,12 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-
-namespace System {
-
+namespace System
+{
// This enum is used to indentify DateTime instances in cases when they are known to be in local time,
// UTC time or if this information has not been specified or is not applicable.
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum DateTimeKind
{
Unspecified = 0,
diff --git a/src/mscorlib/src/System/DateTimeOffset.cs b/src/mscorlib/src/System/DateTimeOffset.cs
index 5bdaa18aaa..d64ba1582e 100644
--- a/src/mscorlib/src/System/DateTimeOffset.cs
+++ b/src/mscorlib/src/System/DateTimeOffset.cs
@@ -10,7 +10,6 @@ namespace System {
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
diff --git a/src/mscorlib/src/System/DayOfWeek.cs b/src/mscorlib/src/System/DayOfWeek.cs
index 37b8f8975d..5d84257158 100644
--- a/src/mscorlib/src/System/DayOfWeek.cs
+++ b/src/mscorlib/src/System/DayOfWeek.cs
@@ -10,11 +10,12 @@
**
**
============================================================*/
-namespace System {
+namespace System
+{
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum DayOfWeek {
+ public enum DayOfWeek
+ {
Sunday = 0,
Monday = 1,
Tuesday = 2,
diff --git a/src/mscorlib/src/System/Decimal.cs b/src/mscorlib/src/System/Decimal.cs
index fd16697199..a01ed19753 100644
--- a/src/mscorlib/src/System/Decimal.cs
+++ b/src/mscorlib/src/System/Decimal.cs
@@ -57,7 +57,6 @@ namespace System {
// the range of the Decimal type.
[StructLayout(LayoutKind.Sequential)]
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.Versioning.NonVersionable] // This only applies to field layout
public struct Decimal : IFormattable, IComparable, IConvertible, IComparable<Decimal>, IEquatable<Decimal>, IDeserializationCallback
{
@@ -346,9 +345,6 @@ namespace System {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern void FCallAddSub(ref Decimal d1, ref Decimal d2, byte bSign);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void FCallAddSubOverflowed(ref Decimal d1, ref Decimal d2, byte bSign, ref bool overflowed);
-
// Rounds a Decimal to an integer value. The Decimal argument is rounded
// towards positive infinity.
public static Decimal Ceiling(Decimal d) {
@@ -358,13 +354,11 @@ namespace System {
// Compares two Decimal values, returning an integer that indicates their
// relationship.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static int Compare(Decimal d1, Decimal d2) {
return FCallCompare(ref d1, ref d2);
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern int FCallCompare(ref Decimal d1, ref Decimal d2);
// Compares this object to another object, returning an integer that
@@ -403,9 +397,6 @@ namespace System {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern void FCallDivide(ref Decimal d1, ref Decimal d2);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void FCallDivideOverflowed(ref Decimal d1, ref Decimal d2, ref bool overflowed);
-
// Checks if this Decimal is equal to a given object. Returns true
// if the given object is a boxed Decimal and its value is equal to the
@@ -628,14 +619,12 @@ namespace System {
// Returns the larger of two Decimal values.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static Decimal Max(Decimal d1, Decimal d2) {
return FCallCompare(ref d1, ref d2) >= 0? d1: d2;
}
// Returns the smaller of two Decimal values.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static Decimal Min(Decimal d1, Decimal d2) {
return FCallCompare(ref d1, ref d2) < 0? d1: d2;
}
@@ -697,9 +686,6 @@ namespace System {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern void FCallMultiply(ref Decimal d1, ref Decimal d2);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void FCallMultiplyOverflowed(ref Decimal d1, ref Decimal d2, ref bool overflowed);
-
// Returns the negated value of the given Decimal. If d is non-zero,
// the result is -d. If d is zero, the result is zero.
//
diff --git a/src/mscorlib/src/System/Delegate.cs b/src/mscorlib/src/System/Delegate.cs
index bca88c18e9..fb9dc4b110 100644
--- a/src/mscorlib/src/System/Delegate.cs
+++ b/src/mscorlib/src/System/Delegate.cs
@@ -191,7 +191,6 @@ namespace System {
return a.CombineImpl(b);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Delegate Combine(params Delegate[] delegates)
{
if (delegates == null || delegates.Length == 0)
diff --git a/src/mscorlib/src/System/DelegateSerializationHolder.cs b/src/mscorlib/src/System/DelegateSerializationHolder.cs
index 83fe35ad1e..061f92d42e 100644
--- a/src/mscorlib/src/System/DelegateSerializationHolder.cs
+++ b/src/mscorlib/src/System/DelegateSerializationHolder.cs
@@ -7,7 +7,6 @@ using System;
using System.Reflection;
using System.Runtime.Remoting;
using System.Runtime.Serialization;
-using System.Security.Permissions;
using System.Globalization;
using System.Diagnostics.Contracts;
@@ -25,10 +24,7 @@ namespace System
if (method == null)
throw new ArgumentNullException(nameof(method));
Contract.EndContractBlock();
-
- if (!method.IsPublic || (method.DeclaringType != null && !method.DeclaringType.IsVisible))
- new ReflectionPermission(ReflectionPermissionFlag.MemberAccess).Demand();
-
+
Type c = delegateType.BaseType;
if (c == null || (c != typeof(Delegate) && c != typeof(MulticastDelegate)))
@@ -231,9 +227,6 @@ namespace System
else
d = Delegate.CreateDelegate(type, targetType, de.methodName);
}
-
- if ((d.Method != null && !d.Method.IsPublic) || (d.Method.DeclaringType != null && !d.Method.DeclaringType.IsVisible))
- new ReflectionPermission(ReflectionPermissionFlag.MemberAccess).Demand();
}
catch (Exception e)
{
diff --git a/src/mscorlib/src/System/Diagnostics/Assert.cs b/src/mscorlib/src/System/Diagnostics/Assert.cs
index 77cc6d8e46..9f4b86b7e4 100644
--- a/src/mscorlib/src/System/Diagnostics/Assert.cs
+++ b/src/mscorlib/src/System/Diagnostics/Assert.cs
@@ -4,7 +4,6 @@
namespace System.Diagnostics {
using System;
- using System.Security.Permissions;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
@@ -36,14 +35,6 @@ namespace System.Diagnostics {
}
}
- internal static void Check(bool condition, String conditionString, String message, int exitCode)
- {
- if (!condition)
- {
- Fail(conditionString, message, null, exitCode);
- }
- }
-
internal static void Fail(String conditionString, String message)
{
Fail(conditionString, message, null, COR_E_FAILFAST);
diff --git a/src/mscorlib/src/System/Diagnostics/ConditionalAttribute.cs b/src/mscorlib/src/System/Diagnostics/ConditionalAttribute.cs
index b20931f9c3..c57fb59319 100644
--- a/src/mscorlib/src/System/Diagnostics/ConditionalAttribute.cs
+++ b/src/mscorlib/src/System/Diagnostics/ConditionalAttribute.cs
@@ -7,7 +7,6 @@ using System;
namespace System.Diagnostics {
[Serializable]
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple=true)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class ConditionalAttribute : Attribute
{
public ConditionalAttribute(String conditionString)
diff --git a/src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs b/src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs
index 27f4f4cdaa..93d6c48701 100644
--- a/src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs
+++ b/src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs
@@ -41,7 +41,6 @@ using System.Runtime.ConstrainedExecution;
#endif
#if FEATURE_UNTRUSTED_CALLERS
using System.Security;
-using System.Security.Permissions;
#endif
namespace System.Diagnostics.Contracts {
@@ -294,7 +293,6 @@ namespace System.Diagnostics.Contracts {
[Conditional("DEBUG")]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Assume(bool condition)
{
@@ -315,7 +313,6 @@ namespace System.Diagnostics.Contracts {
[Conditional("DEBUG")]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Assume(bool condition, String userMessage)
{
@@ -336,7 +333,6 @@ namespace System.Diagnostics.Contracts {
[Conditional("DEBUG")]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Assert(bool condition)
{
@@ -353,7 +349,6 @@ namespace System.Diagnostics.Contracts {
[Conditional("DEBUG")]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Assert(bool condition, String userMessage)
{
@@ -377,7 +372,6 @@ namespace System.Diagnostics.Contracts {
[Pure]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Requires(bool condition)
{
@@ -397,7 +391,6 @@ namespace System.Diagnostics.Contracts {
[Pure]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Requires(bool condition, String userMessage)
{
@@ -417,7 +410,6 @@ namespace System.Diagnostics.Contracts {
[SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter")]
[Pure]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Requires<TException>(bool condition) where TException : Exception
{
@@ -439,7 +431,6 @@ namespace System.Diagnostics.Contracts {
[SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter")]
[Pure]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Requires<TException>(bool condition, String userMessage) where TException : Exception
{
@@ -462,7 +453,6 @@ namespace System.Diagnostics.Contracts {
[Pure]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Ensures(bool condition)
{
@@ -482,7 +472,6 @@ namespace System.Diagnostics.Contracts {
[Pure]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Ensures(bool condition, String userMessage)
{
@@ -503,7 +492,6 @@ namespace System.Diagnostics.Contracts {
[Conditional("CONTRACTS_FULL")]
[SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification = "Exception type used in tools.")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void EnsuresOnThrow<TException>(bool condition) where TException : Exception
{
@@ -525,7 +513,6 @@ namespace System.Diagnostics.Contracts {
[Conditional("CONTRACTS_FULL")]
[SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification = "Exception type used in tools.")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void EnsuresOnThrow<TException>(bool condition, String userMessage) where TException : Exception
{
@@ -545,7 +532,6 @@ namespace System.Diagnostics.Contracts {
[SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification = "Not intended to be called at runtime.")]
[Pure]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
#endif
public static T Result<T>() { return default(T); }
@@ -561,7 +547,6 @@ namespace System.Diagnostics.Contracts {
[SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "0#", Justification = "Not intended to be called at runtime.")]
[Pure]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
#endif
public static T ValueAtReturn<T>(out T value) { value = default(T); return value; }
@@ -577,7 +562,6 @@ namespace System.Diagnostics.Contracts {
[SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "value")]
[Pure]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
#endif
public static T OldValue<T>(T value) { return default(T); }
@@ -599,7 +583,6 @@ namespace System.Diagnostics.Contracts {
[Pure]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Invariant(bool condition)
{
@@ -619,7 +602,6 @@ namespace System.Diagnostics.Contracts {
[Pure]
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static void Invariant(bool condition, String userMessage)
{
@@ -644,7 +626,6 @@ namespace System.Diagnostics.Contracts {
/// <seealso cref="System.Collections.Generic.List&lt;T&gt;.TrueForAll"/>
[Pure]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] // Assumes predicate obeys CER rules.
#endif
public static bool ForAll(int fromInclusive, int toExclusive, Predicate<int> predicate)
{
@@ -675,7 +656,6 @@ namespace System.Diagnostics.Contracts {
/// <seealso cref="System.Collections.Generic.List&lt;T&gt;.TrueForAll"/>
[Pure]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] // Assumes predicate & collection enumerator obey CER rules.
#endif
public static bool ForAll<T>(IEnumerable<T> collection, Predicate<T> predicate)
{
@@ -706,7 +686,6 @@ namespace System.Diagnostics.Contracts {
/// <seealso cref="System.Collections.Generic.List&lt;T&gt;.Exists"/>
[Pure]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] // Assumes predicate obeys CER rules.
#endif
public static bool Exists(int fromInclusive, int toExclusive, Predicate<int> predicate)
{
@@ -736,7 +715,6 @@ namespace System.Diagnostics.Contracts {
/// <seealso cref="System.Collections.Generic.List&lt;T&gt;.Exists"/>
[Pure]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] // Assumes predicate & collection enumerator obey CER rules.
#endif
public static bool Exists<T>(IEnumerable<T> collection, Predicate<T> predicate)
{
@@ -756,107 +734,6 @@ namespace System.Diagnostics.Contracts {
#endregion Quantifiers
#region Pointers
-#if FEATURE_UNSAFE_CONTRACTS
- /// <summary>
- /// Runtime checking for pointer bounds is not currently feasible. Thus, at runtime, we just return
- /// a very long extent for each pointer that is writable. As long as assertions are of the form
- /// WritableBytes(ptr) >= ..., the runtime assertions will not fail.
- /// The runtime value is 2^64 - 1 or 2^32 - 1.
- /// </summary>
- [SuppressMessage("Microsoft.Performance", "CA1802", Justification = "FxCop is confused")]
- static readonly ulong MaxWritableExtent = (UIntPtr.Size == 4) ? UInt32.MaxValue : UInt64.MaxValue;
-
- /// <summary>
- /// Allows specifying a writable extent for a UIntPtr, similar to SAL's writable extent.
- /// NOTE: this is for static checking only. No useful runtime code can be generated for this
- /// at the moment.
- /// </summary>
- /// <param name="startAddress">Start of memory region</param>
- /// <returns>The result is the number of bytes writable starting at <paramref name="startAddress"/></returns>
- [CLSCompliant(false)]
- [Pure]
- [ContractRuntimeIgnored]
-#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
-#endif
- public static ulong WritableBytes(UIntPtr startAddress) { return MaxWritableExtent - startAddress.ToUInt64(); }
-
- /// <summary>
- /// Allows specifying a writable extent for a UIntPtr, similar to SAL's writable extent.
- /// NOTE: this is for static checking only. No useful runtime code can be generated for this
- /// at the moment.
- /// </summary>
- /// <param name="startAddress">Start of memory region</param>
- /// <returns>The result is the number of bytes writable starting at <paramref name="startAddress"/></returns>
- [CLSCompliant(false)]
- [Pure]
- [ContractRuntimeIgnored]
-#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
-#endif
- public static ulong WritableBytes(IntPtr startAddress) { return MaxWritableExtent - (ulong)startAddress; }
-
- /// <summary>
- /// Allows specifying a writable extent for a UIntPtr, similar to SAL's writable extent.
- /// NOTE: this is for static checking only. No useful runtime code can be generated for this
- /// at the moment.
- /// </summary>
- /// <param name="startAddress">Start of memory region</param>
- /// <returns>The result is the number of bytes writable starting at <paramref name="startAddress"/></returns>
- [CLSCompliant(false)]
- [Pure]
- [ContractRuntimeIgnored]
-#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
-#endif
-
- unsafe public static ulong WritableBytes(void* startAddress) { return MaxWritableExtent - (ulong)startAddress; }
-
- /// <summary>
- /// Allows specifying a readable extent for a UIntPtr, similar to SAL's readable extent.
- /// NOTE: this is for static checking only. No useful runtime code can be generated for this
- /// at the moment.
- /// </summary>
- /// <param name="startAddress">Start of memory region</param>
- /// <returns>The result is the number of bytes readable starting at <paramref name="startAddress"/></returns>
- [CLSCompliant(false)]
- [Pure]
- [ContractRuntimeIgnored]
-#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
-#endif
- public static ulong ReadableBytes(UIntPtr startAddress) { return MaxWritableExtent - startAddress.ToUInt64(); }
-
- /// <summary>
- /// Allows specifying a readable extent for a UIntPtr, similar to SAL's readable extent.
- /// NOTE: this is for static checking only. No useful runtime code can be generated for this
- /// at the moment.
- /// </summary>
- /// <param name="startAddress">Start of memory region</param>
- /// <returns>The result is the number of bytes readable starting at <paramref name="startAddress"/></returns>
- [CLSCompliant(false)]
- [Pure]
- [ContractRuntimeIgnored]
-#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
-#endif
- public static ulong ReadableBytes(IntPtr startAddress) { return MaxWritableExtent - (ulong)startAddress; }
-
- /// <summary>
- /// Allows specifying a readable extent for a UIntPtr, similar to SAL's readable extent.
- /// NOTE: this is for static checking only. No useful runtime code can be generated for this
- /// at the moment.
- /// </summary>
- /// <param name="startAddress">Start of memory region</param>
- /// <returns>The result is the number of bytes readable starting at <paramref name="startAddress"/></returns>
- [CLSCompliant(false)]
- [Pure]
- [ContractRuntimeIgnored]
-#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
-#endif
- unsafe public static ulong ReadableBytes(void* startAddress) { return MaxWritableExtent - (ulong)startAddress; }
-#endif // FEATURE_UNSAFE_CONTRACTS
#endregion
#region Misc.
@@ -866,7 +743,6 @@ namespace System.Diagnostics.Contracts {
/// </summary>
[Conditional("CONTRACTS_FULL")]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
#endif
public static void EndContractBlock() { }
@@ -927,7 +803,6 @@ namespace System.Diagnostics.Contracts.Internal
[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate")]
[System.Diagnostics.DebuggerNonUserCode]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static string RaiseContractFailedEvent(ContractFailureKind failureKind, String userMessage, String conditionText, Exception innerException)
{
@@ -939,7 +814,6 @@ namespace System.Diagnostics.Contracts.Internal
/// </summary>
[System.Diagnostics.DebuggerNonUserCode]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
#endif
public static void TriggerFailure(ContractFailureKind kind, String displayMessage, String userMessage, String conditionText, Exception innerException)
{
@@ -966,7 +840,6 @@ namespace System.Runtime.CompilerServices
[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate")]
[System.Diagnostics.DebuggerNonUserCode]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public static string RaiseContractFailedEvent(ContractFailureKind failureKind, String userMessage, String conditionText, Exception innerException)
{
@@ -981,7 +854,6 @@ namespace System.Runtime.CompilerServices
/// </summary>
[System.Diagnostics.DebuggerNonUserCode]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
#endif
public static void TriggerFailure(ContractFailureKind kind, String displayMessage, String userMessage, String conditionText, Exception innerException)
{
diff --git a/src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs b/src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs
index d5e3f29e6c..5f4de4f666 100644
--- a/src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs
+++ b/src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs
@@ -35,7 +35,6 @@ using System.Runtime.ConstrainedExecution;
#endif
#if FEATURE_UNTRUSTED_CALLERS
using System.Security;
-using System.Security.Permissions;
#endif
namespace System.Diagnostics.Contracts {
@@ -93,7 +92,6 @@ namespace System.Diagnostics.Contracts {
[SuppressMessage("Microsoft.Portability", "CA1903:UseOnlyApiFromTargetedFramework", MessageId = "System.Security.SecuritySafeCriticalAttribute")]
[System.Diagnostics.DebuggerNonUserCode]
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
static partial void ReportFailure(ContractFailureKind failureKind, String userMessage, String conditionText, Exception innerException)
{
@@ -120,15 +118,11 @@ namespace System.Diagnostics.Contracts {
/// </summary>
public static event EventHandler<ContractFailedEventArgs> ContractFailed {
#if FEATURE_UNTRUSTED_CALLERS
-#if FEATURE_LINK_DEMAND
-#endif
#endif
add {
System.Runtime.CompilerServices.ContractHelper.InternalContractFailed += value;
}
#if FEATURE_UNTRUSTED_CALLERS
-#if FEATURE_LINK_DEMAND
-#endif
#endif
remove {
System.Runtime.CompilerServices.ContractHelper.InternalContractFailed -= value;
@@ -149,7 +143,6 @@ namespace System.Diagnostics.Contracts {
internal Exception thrownDuringHandler;
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
public ContractFailedEventArgs(ContractFailureKind failureKind, String message, String condition, Exception originalException)
{
@@ -171,8 +164,6 @@ namespace System.Diagnostics.Contracts {
}
#if FEATURE_UNTRUSTED_CALLERS
-#if FEATURE_LINK_DEMAND
-#endif
#endif
public void SetHandled()
{
@@ -184,8 +175,6 @@ namespace System.Diagnostics.Contracts {
}
#if FEATURE_UNTRUSTED_CALLERS
-#if FEATURE_LINK_DEMAND
-#endif
#endif
public void SetUnwind()
{
@@ -233,10 +222,6 @@ namespace System.Diagnostics.Contracts {
_Condition = info.GetString("Condition");
}
-#if FEATURE_UNTRUSTED_CALLERS && FEATURE_SERIALIZATION
-#if FEATURE_LINK_DEMAND && FEATURE_SERIALIZATION
-#endif // FEATURE_LINK_DEMAND
-#endif // FEATURE_UNTRUSTED_CALLERS
public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
{
base.GetObjectData(info, context);
@@ -434,7 +419,6 @@ namespace System.Runtime.CompilerServices
}
#if FEATURE_RELIABILITY_CONTRACTS
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
#endif
private static String GetDisplayMessage(ContractFailureKind failureKind, String userMessage, String conditionText)
{
diff --git a/src/mscorlib/src/System/Diagnostics/Debugger.cs b/src/mscorlib/src/System/Diagnostics/Debugger.cs
index 8ebbc0a354..21c57dbfaf 100644
--- a/src/mscorlib/src/System/Diagnostics/Debugger.cs
+++ b/src/mscorlib/src/System/Diagnostics/Debugger.cs
@@ -13,11 +13,9 @@ namespace System.Diagnostics
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
- using System.Security.Permissions;
using System.Runtime.Versioning;
// No data, does not need to be marked with the serializable attribute
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class Debugger
{
// This should have been a static class, but wasn't as of v3.5. Clearly, this is
@@ -34,42 +32,12 @@ namespace System.Diagnostics
// debugger is launched.
public static void Break()
{
- if (!Debugger.IsAttached)
- {
- // Try and demand UnmanagedCodePermission. This is done in a try block because if this
- // fails we want to be able to silently eat the exception and just return so
- // that the call to Break does not possibly cause an unhandled exception.
- // The idea here is that partially trusted code shouldn't be able to launch a debugger
- // without the user going through Watson.
- try
- {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-#pragma warning restore 618
- }
-
- // If we enter this block, we do not have permission to break into the debugger
- // and so we just return.
- catch (SecurityException)
- {
- return;
- }
- }
-
// Causing a break is now allowed.
BreakInternal();
}
static void BreakCanThrow()
{
- if (!Debugger.IsAttached)
- {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-#pragma warning restore 618
- }
-
- // Causing a break is now allowed.
BreakInternal();
}
@@ -84,25 +52,6 @@ namespace System.Diagnostics
if (Debugger.IsAttached)
return (true);
- // Try and demand UnmanagedCodePermission. This is done in a try block because if this
- // fails we want to be able to silently eat the exception and just return so
- // that the call to Break does not possibly cause an unhandled exception.
- // The idea here is that partially trusted code shouldn't be able to launch a debugger
- // without the user going through Watson.
- try
- {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-#pragma warning restore 618
- }
-
- // If we enter this block, we do not have permission to break into the debugger
- // and so we just return.
- catch (SecurityException)
- {
- return (false);
- }
-
// Causing the debugger to launch is now allowed.
return (LaunchInternal());
}
@@ -134,7 +83,6 @@ namespace System.Diagnostics
// notification will apprise the debugger that it will need to slip a thread or abort the funceval
// in such a situation. The notification is subject to collection after this function returns.
//
- [method:System.Runtime.InteropServices.ComVisible(false)]
public static void NotifyOfCrossThreadDependency()
{
if (Debugger.IsAttached)
diff --git a/src/mscorlib/src/System/Diagnostics/DebuggerAttributes.cs b/src/mscorlib/src/System/Diagnostics/DebuggerAttributes.cs
index e75b653a0b..ce9987b9e2 100644
--- a/src/mscorlib/src/System/Diagnostics/DebuggerAttributes.cs
+++ b/src/mscorlib/src/System/Diagnostics/DebuggerAttributes.cs
@@ -19,23 +19,13 @@ namespace System.Diagnostics {
[Serializable]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Constructor, Inherited = false)]
- [ComVisible(true)]
public sealed class DebuggerStepThroughAttribute : Attribute
{
public DebuggerStepThroughAttribute () {}
}
[Serializable]
-[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor, Inherited = false)]
- [ComVisible(true)]
- public sealed class DebuggerStepperBoundaryAttribute : Attribute
- {
- public DebuggerStepperBoundaryAttribute () {}
- }
-
-[Serializable]
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Constructor, Inherited = false)]
- [ComVisible(true)]
public sealed class DebuggerHiddenAttribute : Attribute
{
public DebuggerHiddenAttribute () {}
@@ -43,7 +33,6 @@ namespace System.Diagnostics {
[Serializable]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Constructor |AttributeTargets.Struct, Inherited = false)]
- [ComVisible(true)]
public sealed class DebuggerNonUserCodeAttribute : Attribute
{
public DebuggerNonUserCodeAttribute () {}
@@ -58,11 +47,9 @@ namespace System.Diagnostics {
// won't preserve the debugging info, which will make debugging after
// a JIT attach difficult.
[AttributeUsage(AttributeTargets.Assembly|AttributeTargets.Module, AllowMultiple = false)]
- [ComVisible(true)]
public sealed class DebuggableAttribute : Attribute
{
[Flags]
- [ComVisible(true)]
public enum DebuggingModes
{
None = 0x0,
@@ -121,7 +108,6 @@ namespace System.Diagnostics {
// Please also change the code which validates DebuggerBrowsableState variable (in this file)
// if you change this enum.
- [ComVisible(true)]
public enum DebuggerBrowsableState
{
Never = 0,
@@ -135,7 +121,6 @@ namespace System.Diagnostics {
// the one currently supported with the csee.dat
// (mcee.dat, autoexp.dat) file.
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]
- [ComVisible(true)]
public sealed class DebuggerBrowsableAttribute: Attribute
{
private DebuggerBrowsableState state;
@@ -156,7 +141,6 @@ namespace System.Diagnostics {
// DebuggerTypeProxyAttribute
[AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)]
- [ComVisible(true)]
public sealed class DebuggerTypeProxyAttribute: Attribute
{
private string typeName;
@@ -215,7 +199,6 @@ namespace System.Diagnostics {
// however: there is no access to aliases, locals, or pointers.
// In addition, attributes on properties referenced in the expression are not processed.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Delegate | AttributeTargets.Enum | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Assembly, AllowMultiple = true)]
- [ComVisible(true)]
public sealed class DebuggerDisplayAttribute : Attribute
{
private string name;
@@ -274,105 +257,6 @@ namespace System.Diagnostics {
}
}
-
-
- /// <summary>
- /// Signifies that the attributed type has a visualizer which is pointed
- /// to by the parameter type name strings.
- /// </summary>
- [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)]
- [ComVisible(true)]
- public sealed class DebuggerVisualizerAttribute: Attribute
- {
- private string visualizerObjectSourceName;
- private string visualizerName;
- private string description;
- private string targetName;
- private Type target;
-
- public DebuggerVisualizerAttribute(string visualizerTypeName)
- {
- this.visualizerName = visualizerTypeName;
- }
- public DebuggerVisualizerAttribute(string visualizerTypeName, string visualizerObjectSourceTypeName)
- {
- this.visualizerName = visualizerTypeName;
- this.visualizerObjectSourceName = visualizerObjectSourceTypeName;
- }
- public DebuggerVisualizerAttribute(string visualizerTypeName, Type visualizerObjectSource)
- {
- if (visualizerObjectSource == null) {
- throw new ArgumentNullException(nameof(visualizerObjectSource));
- }
- Contract.EndContractBlock();
- this.visualizerName = visualizerTypeName;
- this.visualizerObjectSourceName = visualizerObjectSource.AssemblyQualifiedName;
- }
- public DebuggerVisualizerAttribute(Type visualizer)
- {
- if (visualizer == null) {
- throw new ArgumentNullException(nameof(visualizer));
- }
- Contract.EndContractBlock();
- this.visualizerName = visualizer.AssemblyQualifiedName;
- }
- public DebuggerVisualizerAttribute(Type visualizer, Type visualizerObjectSource)
- {
- if (visualizer == null) {
- throw new ArgumentNullException(nameof(visualizer));
- }
- if (visualizerObjectSource == null) {
- throw new ArgumentNullException(nameof(visualizerObjectSource));
- }
- Contract.EndContractBlock();
- this.visualizerName = visualizer.AssemblyQualifiedName;
- this.visualizerObjectSourceName = visualizerObjectSource.AssemblyQualifiedName;
- }
- public DebuggerVisualizerAttribute(Type visualizer, string visualizerObjectSourceTypeName)
- {
- if (visualizer == null) {
- throw new ArgumentNullException(nameof(visualizer));
- }
- Contract.EndContractBlock();
- this.visualizerName = visualizer.AssemblyQualifiedName;
- this.visualizerObjectSourceName = visualizerObjectSourceTypeName;
- }
-
- public string VisualizerObjectSourceTypeName
- {
- get { return visualizerObjectSourceName; }
- }
- public string VisualizerTypeName
- {
- get { return visualizerName; }
- }
- public string Description
- {
- get { return description; }
- set { description = value; }
- }
-
- public Type Target
- {
- set {
- if( value == null) {
- throw new ArgumentNullException(nameof(value));
- }
- Contract.EndContractBlock();
-
- targetName = value.AssemblyQualifiedName;
- target = value;
- }
-
- get { return target; }
- }
-
- public string TargetTypeName
- {
- set { targetName = value; }
- get { return targetName; }
- }
- }
}
diff --git a/src/mscorlib/src/System/Diagnostics/Eventing/EventDescriptor.cs b/src/mscorlib/src/System/Diagnostics/Eventing/EventDescriptor.cs
index 11b6e6bac2..116b50f86c 100644
--- a/src/mscorlib/src/System/Diagnostics/Eventing/EventDescriptor.cs
+++ b/src/mscorlib/src/System/Diagnostics/Eventing/EventDescriptor.cs
@@ -22,7 +22,9 @@ namespace System.Diagnostics.Tracing
#endif
{
[StructLayout(LayoutKind.Explicit, Size = 16)]
+#if !CORECLR
[System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
+#endif // CORECLR
internal struct EventDescriptor
{
# region private
diff --git a/src/mscorlib/src/System/Diagnostics/Eventing/EventProvider.cs b/src/mscorlib/src/System/Diagnostics/Eventing/EventProvider.cs
index ce0fcb6acb..1da6a46707 100644
--- a/src/mscorlib/src/System/Diagnostics/Eventing/EventProvider.cs
+++ b/src/mscorlib/src/System/Diagnostics/Eventing/EventProvider.cs
@@ -8,7 +8,9 @@ using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Security;
+#if !CORECLR
using System.Security.Permissions;
+#endif // !CORECLR
using System.Threading;
using System;
@@ -43,7 +45,9 @@ namespace System.Diagnostics.Tracing
/// Only here because System.Diagnostics.EventProvider needs one more extensibility hook (when it gets a
/// controller callback)
/// </summary>
+#if !CORECLR
[System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
+#endif // CORECLR
internal partial class EventProvider : IDisposable
{
// This is the windows EVENT_DATA_DESCRIPTOR structure. We expose it because this is what
@@ -341,9 +345,10 @@ namespace System.Diagnostics.Tracing
{
List<SessionInfo> liveSessionList = null;
- GetSessionInfo((Action<int, long>)
- ((etwSessionId, matchAllKeywords) =>
- GetSessionInfoCallback(etwSessionId, matchAllKeywords, ref liveSessionList)));
+ GetSessionInfo(
+ (int etwSessionId, long matchAllKeywords, ref List<SessionInfo> sessionList) =>
+ GetSessionInfoCallback(etwSessionId, matchAllKeywords, ref sessionList),
+ ref liveSessionList);
List<Tuple<SessionInfo, bool>> changedSessionList = new List<Tuple<SessionInfo, bool>>();
@@ -407,12 +412,14 @@ namespace System.Diagnostics.Tracing
}
}
+ private delegate void SessionInfoCallback(int etwSessionId, long matchAllKeywords, ref List<SessionInfo> sessionList);
+
/// <summary>
/// This method enumerates over all active ETW sessions that have enabled 'this.m_Guid'
/// for the current process ID, calling 'action' for each session, and passing it the
/// ETW session and the 'AllKeywords' the session enabled for the current provider.
/// </summary>
- private unsafe void GetSessionInfo(Action<int, long> action)
+ private unsafe void GetSessionInfo(SessionInfoCallback action, ref List<SessionInfo> sessionList)
{
// We wish the EventSource package to be legal for Windows Store applications.
// Currently EnumerateTraceGuidsEx is not an allowed API, so we avoid its use here
@@ -453,7 +460,7 @@ namespace System.Diagnostics.Tracing
var enabledInfos = (UnsafeNativeMethods.ManifestEtw.TRACE_ENABLE_INFO*)&providerInstance[1];
// iterate over the list of active ETW sessions "listening" to the current provider
for (int j = 0; j < providerInstance->EnableCount; j++)
- action(enabledInfos[j].LoggerId, enabledInfos[j].MatchAllKeyword);
+ action(enabledInfos[j].LoggerId, enabledInfos[j].MatchAllKeyword, ref sessionList);
}
if (providerInstance->NextOffset == 0)
break;
@@ -503,7 +510,7 @@ namespace System.Diagnostics.Tracing
string keywordBitString = dataAsString.Substring(startIdx, endIdx-startIdx);
int keywordBit;
if (0 < endIdx && int.TryParse(keywordBitString, out keywordBit))
- action(etwSessionId, 1L << keywordBit);
+ action(etwSessionId, 1L << keywordBit, ref sessionList);
}
}
}
@@ -556,7 +563,9 @@ namespace System.Diagnostics.Tracing
string valueName = "ControllerData_Session_" + etwSessionId.ToString(CultureInfo.InvariantCulture);
// we need to assert this permission for partial trust scenarios
+#if !CORECLR
(new RegistryPermission(RegistryPermissionAccess.Read, regKey)).Assert();
+#endif
data = Microsoft.Win32.Registry.GetValue(regKey, valueName, null) as byte[];
if (data != null)
{
diff --git a/src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs b/src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs
index aa0d8d72d1..a558a1647e 100644
--- a/src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs
+++ b/src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs
@@ -187,7 +187,9 @@ using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Security;
+#if !CORECLR
using System.Security.Permissions;
+#endif // !CORECLR
using System.Text;
using System.Threading;
@@ -3047,7 +3049,7 @@ namespace System.Diagnostics.Tracing
}
if (s_currentPid == 0)
{
-#if ES_BUILD_STANDALONE && !ES_BUILD_PCL
+#if ES_BUILD_STANDALONE && !ES_BUILD_PCL && !CORECLR
// for non-BCL EventSource we must assert SecurityPermission
new SecurityPermission(PermissionState.Unrestricted).Assert();
#endif
@@ -3803,7 +3805,9 @@ namespace System.Diagnostics.Tracing
// RET
//
// If we find this pattern we return the XXX. Otherwise we return -1.
+#if !CORECLR
(new ReflectionPermission(ReflectionPermissionFlag.MemberAccess)).Assert();
+#endif
byte[] instrs = method.GetMethodBody().GetILAsByteArray();
int retVal = -1;
for (int idx = 0; idx < instrs.Length;)
@@ -4221,7 +4225,7 @@ namespace System.Diagnostics.Tracing
public EventListener()
{
// This will cause the OnEventSourceCreated callback to fire.
- CallBackForExistingEventSources(true, (obj, args) => args.EventSource.AddListener(this));
+ CallBackForExistingEventSources(true, (obj, args) => args.EventSource.AddListener((EventListener)obj));
}
/// <summary>
@@ -6741,6 +6745,7 @@ namespace System.Diagnostics.Tracing
stringBuilder.Append(eventMessage, startIndex, count);
}
+ private static readonly string[] s_escapes = { "&amp;", "&lt;", "&gt;", "&apos;", "&quot;", "%r", "%n", "%t" };
// Manifest messages use %N conventions for their message substitutions. Translate from
// .NET conventions. We can't use RegEx for this (we are in mscorlib), so we do it 'by hand'
private string TranslateToManifestConvention(string eventMessage, string evtName)
@@ -6808,16 +6813,10 @@ namespace System.Diagnostics.Tracing
}
else if ((chIdx = "&<>'\"\r\n\t".IndexOf(eventMessage[i])) >= 0)
{
- string[] escapes = { "&amp;", "&lt;", "&gt;", "&apos;", "&quot;", "%r", "%n", "%t" };
- var update = new Action<char, string>(
- (ch, escape) =>
- {
- UpdateStringBuilder(ref stringBuilder, eventMessage, writtenSoFar, i - writtenSoFar);
- i++;
- stringBuilder.Append(escape);
- writtenSoFar = i;
- });
- update(eventMessage[i], escapes[chIdx]);
+ UpdateStringBuilder(ref stringBuilder, eventMessage, writtenSoFar, i - writtenSoFar);
+ i++;
+ stringBuilder.Append(s_escapes[chIdx]);
+ writtenSoFar = i;
}
else
i++;
diff --git a/src/mscorlib/src/System/Diagnostics/Eventing/FrameworkEventSource.cs b/src/mscorlib/src/System/Diagnostics/Eventing/FrameworkEventSource.cs
index 6d3e28fcab..80c524b350 100644
--- a/src/mscorlib/src/System/Diagnostics/Eventing/FrameworkEventSource.cs
+++ b/src/mscorlib/src/System/Diagnostics/Eventing/FrameworkEventSource.cs
@@ -86,7 +86,10 @@ namespace System.Diagnostics.Tracing {
// WriteEvent overloads (to avoid the "params" EventSource.WriteEvent
// optimized for common signatures (used by the ThreadTransferSend/Receive events)
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "This does not need to be correct when racing with other threads")]
private unsafe void WriteEvent(int eventId, long arg1, int arg2, string arg3, bool arg4)
{
@@ -110,7 +113,10 @@ namespace System.Diagnostics.Tracing {
}
// optimized for common signatures (used by the ThreadTransferSend/Receive events)
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "This does not need to be correct when racing with other threads")]
private unsafe void WriteEvent(int eventId, long arg1, int arg2, string arg3)
{
@@ -132,7 +138,10 @@ namespace System.Diagnostics.Tracing {
}
// optimized for common signatures (used by the BeginGetResponse/BeginGetRequestStream events)
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "This does not need to be correct when racing with other threads")]
private unsafe void WriteEvent(int eventId, long arg1, string arg2, bool arg3, bool arg4)
{
@@ -156,7 +165,10 @@ namespace System.Diagnostics.Tracing {
}
// optimized for common signatures (used by the EndGetRequestStream event)
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "This does not need to be correct when racing with other threads")]
private unsafe void WriteEvent(int eventId, long arg1, bool arg2, bool arg3)
{
@@ -174,7 +186,10 @@ namespace System.Diagnostics.Tracing {
}
// optimized for common signatures (used by the EndGetResponse event)
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "This does not need to be correct when racing with other threads")]
private unsafe void WriteEvent(int eventId, long arg1, bool arg2, bool arg3, int arg4)
{
@@ -479,7 +494,10 @@ namespace System.Diagnostics.Tracing {
public void ThreadPoolEnqueueWork(long workID) {
WriteEvent(30, workID);
}
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
public unsafe void ThreadPoolEnqueueWorkObject(object workID) {
// convert the Object Id to a long
ThreadPoolEnqueueWork((long) *((void**) JitHelpers.UnsafeCastToStackPointer(ref workID)));
@@ -490,7 +508,10 @@ namespace System.Diagnostics.Tracing {
WriteEvent(31, workID);
}
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
public unsafe void ThreadPoolDequeueWorkObject(object workID) {
// convert the Object Id to a long
ThreadPoolDequeueWork((long) *((void**) JitHelpers.UnsafeCastToStackPointer(ref workID)));
@@ -524,25 +545,37 @@ namespace System.Diagnostics.Tracing {
WriteEvent(143, id, success, synchronous);
}
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
public unsafe void BeginGetResponse(object id, string uri, bool success, bool synchronous) {
if (IsEnabled())
GetResponseStart(IdForObject(id), uri, success, synchronous);
}
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
public unsafe void EndGetResponse(object id, bool success, bool synchronous, int statusCode) {
if (IsEnabled())
GetResponseStop(IdForObject(id), success, synchronous, statusCode);
}
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
public unsafe void BeginGetRequestStream(object id, string uri, bool success, bool synchronous) {
if (IsEnabled())
GetRequestStreamStart(IdForObject(id), uri, success, synchronous);
}
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
public unsafe void EndGetRequestStream(object id, bool success, bool synchronous) {
if (IsEnabled())
GetRequestStreamStop(IdForObject(id), success, synchronous);
@@ -563,7 +596,10 @@ namespace System.Diagnostics.Tracing {
// id - is a managed object. it gets translated to the object's address. ETW listeners must
// keep track of GC movements in order to correlate the value passed to XyzSend with the
// (possibly changed) value passed to XyzReceive
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
public unsafe void ThreadTransferSendObj(object id, int kind, string info, bool multiDequeues) {
ThreadTransferSend((long) *((void**) JitHelpers.UnsafeCastToStackPointer(ref id)), kind, info, multiDequeues);
}
@@ -583,7 +619,10 @@ namespace System.Diagnostics.Tracing {
// id - is a managed object. it gets translated to the object's address. ETW listeners must
// keep track of GC movements in order to correlate the value passed to XyzSend with the
// (possibly changed) value passed to XyzReceive
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
public unsafe void ThreadTransferReceiveObj(object id, int kind, string info) {
ThreadTransferReceive((long) *((void**) JitHelpers.UnsafeCastToStackPointer(ref id)), kind, info);
}
@@ -603,7 +642,10 @@ namespace System.Diagnostics.Tracing {
// id - is a managed object. it gets translated to the object's address. ETW listeners must
// keep track of GC movements in order to correlate the value passed to XyzSend with the
// (possibly changed) value passed to XyzReceive
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
+#if !CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif // !CORECLR
public unsafe void ThreadTransferReceiveHandledObj(object id, int kind, string info) {
ThreadTransferReceive((long) *((void**) JitHelpers.UnsafeCastToStackPointer(ref id)), kind, info);
}
diff --git a/src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingTypeInfo.cs b/src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingTypeInfo.cs
index 0cc17e02f3..d68e106b0b 100644
--- a/src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingTypeInfo.cs
+++ b/src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingTypeInfo.cs
@@ -61,7 +61,7 @@ namespace System.Diagnostics.Tracing
if (name == null)
{
- throw new ArgumentNullException("eventName");
+ throw new ArgumentNullException(nameof(name));
}
Contract.EndContractBlock();
diff --git a/src/mscorlib/src/System/Diagnostics/Eventing/XplatEventLogger.cs b/src/mscorlib/src/System/Diagnostics/Eventing/XplatEventLogger.cs
index c96d2129f0..00155d72a0 100644
--- a/src/mscorlib/src/System/Diagnostics/Eventing/XplatEventLogger.cs
+++ b/src/mscorlib/src/System/Diagnostics/Eventing/XplatEventLogger.cs
@@ -23,7 +23,6 @@ namespace System.Diagnostics.Tracing
private static bool initializedPersistentListener = false;
- [System.Security.SecuritySafeCritical]
public static EventListener InitializePersistentListener()
{
try{
@@ -150,7 +149,6 @@ namespace System.Diagnostics.Tracing
}
}
- [System.Security.SecuritySafeCritical]
private void LogOnEventWritten(EventWrittenEventArgs eventData)
{
string payload = "";
diff --git a/src/mscorlib/src/System/Diagnostics/LogSwitch.cs b/src/mscorlib/src/System/Diagnostics/LogSwitch.cs
index 84f6b91f65..14f0f26d98 100644
--- a/src/mscorlib/src/System/Diagnostics/LogSwitch.cs
+++ b/src/mscorlib/src/System/Diagnostics/LogSwitch.cs
@@ -79,19 +79,6 @@ namespace System.Diagnostics {
get { return strName;}
}
- // Get property returns the description of the switch
- public virtual String Description
- {
- get {return strDescription;}
- }
-
-
- // Get property returns the parent of the switch
- public virtual LogSwitch Parent
- {
- get { return ParentSwitch; }
- }
-
// Property to Get/Set the level of log messages which are "on" for the switch.
//
diff --git a/src/mscorlib/src/System/Diagnostics/Stackframe.cs b/src/mscorlib/src/System/Diagnostics/Stackframe.cs
index 06d675ea08..13d8f5cdcc 100644
--- a/src/mscorlib/src/System/Diagnostics/Stackframe.cs
+++ b/src/mscorlib/src/System/Diagnostics/Stackframe.cs
@@ -8,12 +8,10 @@ namespace System.Diagnostics {
using System;
using System.IO;
using System.Reflection;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
// There is no good reason for the methods of this class to be virtual.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class StackFrame
{
private MethodBase method;
@@ -23,10 +21,8 @@ namespace System.Diagnostics {
private int iLineNumber;
private int iColumnNumber;
-#if FEATURE_EXCEPTIONDISPATCHINFO
[System.Runtime.Serialization.OptionalField]
private bool fIsLastFrameFromForeignExceptionStackTrace;
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
internal void InitMembers()
{
@@ -36,9 +32,7 @@ namespace System.Diagnostics {
strFileName = null;
iLineNumber = 0;
iColumnNumber = 0;
-#if FEATURE_EXCEPTIONDISPATCHINFO
fIsLastFrameFromForeignExceptionStackTrace = false;
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
}
@@ -142,7 +136,6 @@ namespace System.Diagnostics {
iColumnNumber = iCol;
}
-#if FEATURE_EXCEPTIONDISPATCHINFO
internal virtual void SetIsLastFrameFromForeignExceptionStackTrace (bool fIsLastFrame)
{
fIsLastFrameFromForeignExceptionStackTrace = fIsLastFrame;
@@ -152,7 +145,6 @@ namespace System.Diagnostics {
{
return fIsLastFrameFromForeignExceptionStackTrace;
}
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
// Returns the method the frame is executing
//
@@ -187,17 +179,6 @@ namespace System.Diagnostics {
//
public virtual String GetFileName()
{
- if (strFileName != null)
- {
- // This isn't really correct, but we don't have
- // a permission that protects discovery of potentially
- // local urls so we'll use this.
-
- FileIOPermission perm = new FileIOPermission( PermissionState.None );
- perm.AllFiles = FileIOPermissionAccess.PathDiscovery;
- perm.Demand();
- }
-
return strFileName;
}
@@ -262,24 +243,6 @@ namespace System.Diagnostics {
bool useFileName = (strFileName != null);
- if (useFileName)
- {
- try
- {
- // This isn't really correct, but we don't have
- // a permission that protects discovery of potentially
- // local urls so we'll use this.
-
- FileIOPermission perm = new FileIOPermission(PermissionState.None);
- perm.AllFiles = FileIOPermissionAccess.PathDiscovery;
- perm.Demand();
- }
- catch (System.Security.SecurityException)
- {
- useFileName = false;
- }
- }
-
if (!useFileName)
sb.Append("<filename unknown>");
else
diff --git a/src/mscorlib/src/System/Diagnostics/Stacktrace.cs b/src/mscorlib/src/System/Diagnostics/Stacktrace.cs
index 7dc5d9df09..cd88f5108f 100644
--- a/src/mscorlib/src/System/Diagnostics/Stacktrace.cs
+++ b/src/mscorlib/src/System/Diagnostics/Stacktrace.cs
@@ -8,7 +8,6 @@ namespace System.Diagnostics {
using System.Text;
using System.Threading;
using System.Security;
- using System.Security.Permissions;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
@@ -49,10 +48,8 @@ namespace System.Diagnostics {
private String[] rgFilename;
private int[] rgiLineNumber;
private int[] rgiColumnNumber;
-#if FEATURE_EXCEPTIONDISPATCHINFO
[OptionalField]
private bool[] rgiLastFrameFromForeignExceptionStackTrace;
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
private GetSourceLineInfoDelegate getSourceLineInfo;
private int iFrameCount;
#pragma warning restore 414
@@ -86,9 +83,7 @@ namespace System.Diagnostics {
rgiColumnNumber = null;
getSourceLineInfo = null;
-#if FEATURE_EXCEPTIONDISPATCHINFO
rgiLastFrameFromForeignExceptionStackTrace = null;
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
// 0 means capture all frames. For StackTraces from an Exception, the EE always
// captures all frames. For other uses of StackTraces, we can abort stack walking after
@@ -198,15 +193,12 @@ namespace System.Diagnostics {
public virtual int GetLineNumber(int i) { return rgiLineNumber == null ? 0 : rgiLineNumber[i];}
public virtual int GetColumnNumber(int i) { return rgiColumnNumber == null ? 0 : rgiColumnNumber[i];}
-#if FEATURE_EXCEPTIONDISPATCHINFO
public virtual bool IsLastFrameFromForeignExceptionStackTrace(int i)
{
return (rgiLastFrameFromForeignExceptionStackTrace == null)?false:rgiLastFrameFromForeignExceptionStackTrace[i];
}
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
public virtual int GetNumberOfFrames() { return iFrameCount;}
- public virtual void SetNumberOfFrames(int i) { iFrameCount = i;}
//
// serialization implementation
@@ -259,7 +251,6 @@ namespace System.Diagnostics {
// StackTrace, we use an InheritanceDemand to prevent partially-trusted
// subclasses.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class StackTrace
{
private StackFrame[] frames;
@@ -468,9 +459,7 @@ namespace System.Diagnostics {
sfTemp.SetOffset(StackF.GetOffset(i));
sfTemp.SetILOffset(StackF.GetILOffset(i));
-#if FEATURE_EXCEPTIONDISPATCHINFO
sfTemp.SetIsLastFrameFromForeignExceptionStackTrace(StackF.IsLastFrameFromForeignExceptionStackTrace(i));
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
if (fNeedFileInfo)
{
@@ -524,7 +513,6 @@ namespace System.Diagnostics {
// The nth element of this array is the same as GetFrame(n).
// The length of the array is the same as FrameCount.
//
- [ComVisible(false)]
public virtual StackFrame [] GetFrames()
{
if (frames == null || m_iNumOfFrames <= 0)
@@ -680,13 +668,11 @@ namespace System.Diagnostics {
}
}
-#if FEATURE_EXCEPTIONDISPATCHINFO
if (sf.GetIsLastFrameFromForeignExceptionStackTrace())
{
sb.Append(Environment.NewLine);
sb.Append(Environment.GetResourceString("Exception_EndStackTraceFromPreviousThrow"));
}
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
}
}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymBinder.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymBinder.cs
deleted file mode 100644
index 1ce870f983..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymBinder.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-
-/*============================================================
-**
-**
-**
-** Represents a symbol binder for managed code.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
-
- using System;
- using System.Text;
- using System.Runtime.InteropServices;
-
- // Interface does not need to be marked with the serializable attribute
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISymbolBinder
- {
- // The importer parameter should be an IntPtr, not an int. This interface can not be modified without
- // a breaking change, and so ISymbolBinderEx.GetReader() has been added with the correct marshalling layout.
- [Obsolete("The recommended alternative is ISymbolBinder1.GetReader. ISymbolBinder1.GetReader takes the importer interface pointer as an IntPtr instead of an Int32, and thus works on both 32-bit and 64-bit architectures. http://go.microsoft.com/fwlink/?linkid=14202=14202")]
- ISymbolReader GetReader(int importer, String filename,
- String searchPath);
- }
-
- // This interface has a revised ISymbolBinder.GetReader() with the proper signature.
- // It is not called ISymbolBinder2 because it maps to the IUnmanagedSymbolBinder interfaces, and
- // does not wrap the IUnmanagedSymbolBinder2 interfaces declared in CorSym.idl.
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISymbolBinder1
- {
-
- ISymbolReader GetReader(IntPtr importer, String filename,
- String searchPath);
- }
-
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocument.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocument.cs
deleted file mode 100644
index c458b8e8a9..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocument.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** Represents a document referenced by a symbol store. A document is
-** defined by a URL and a document type GUID. Using the document type
-** GUID and the URL, one can locate the document however it is
-** stored. Document source can optionally be stored in the symbol
-** store. This interface also provides access to that source if it is
-** present.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
-
- using System;
-
- // Interface does not need to be marked with the serializable attribute
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISymbolDocument
- {
- // Properties of the document.
- String URL { get; }
- Guid DocumentType { get; }
-
- // Language of the document.
- Guid Language { get; }
- Guid LanguageVendor { get; }
-
- // Check sum information.
- Guid CheckSumAlgorithmId { get; }
- byte[] GetCheckSum();
-
- // Given a line in this document that may or may not be a sequence
- // point, return the closest line that is a sequence point.
- int FindClosestLine(int line);
-
- // Access to embedded source.
- bool HasEmbeddedSource { get; }
- int SourceLength { get; }
- byte[] GetSourceRange(int startLine, int startColumn,
- int endLine, int endColumn);
- }
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocumentWriter.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocumentWriter.cs
index 2b7b078dbc..a1a2366c0a 100644
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocumentWriter.cs
+++ b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocumentWriter.cs
@@ -17,7 +17,6 @@ namespace System.Diagnostics.SymbolStore {
using System;
// Interface does not need to be marked with the serializable attribute
- [System.Runtime.InteropServices.ComVisible(true)]
public interface ISymbolDocumentWriter
{
// SetSource will store the raw source for a document into the
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymMethod.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymMethod.cs
deleted file mode 100644
index 5edabb1194..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymMethod.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** Represents a method within a symbol reader. This provides access to
-** only the symbol-related attributes of a method, such as sequence
-** points, lexical scopes, and parameter information. Use it in
-** conjucntion with other means to read the type-related attrbiutes of
-** a method, such as Reflections.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
- using System.Runtime.InteropServices;
- using System;
-
- // Interface does not need to be marked with the serializable attribute
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISymbolMethod
- {
- // Get the token for this method.
- SymbolToken Token { get; }
-
- // Get the count of sequence points.
- int SequencePointCount { get; }
-
- // Get the sequence points for this method. The sequence points
- // are sorted by offset and are for all documents in the
- // method. Use GetSequencePointCount to retrieve the count of all
- // sequence points and create arrays of the proper size.
- // GetSequencePoints will verify the size of each array and place
- // the sequence point information into each. If any array is NULL,
- // then the data for that array is simply not returned.
- void GetSequencePoints(int[] offsets,
- ISymbolDocument[] documents,
- int[] lines,
- int[] columns,
- int[] endLines,
- int[] endColumns);
-
- // Get the root lexical scope for this method. This scope encloses
- // the entire method.
- ISymbolScope RootScope { get; }
-
- // Given an offset within the method, returns the most enclosing
- // lexical scope. This can be used to start local variable
- // searches.
- ISymbolScope GetScope(int offset);
-
- // Given a position in a document, return the offset within the
- // method that corresponds to the position.
- int GetOffset(ISymbolDocument document,
- int line,
- int column);
-
- // Given a position in a document, return an array of start/end
- // offset paris that correspond to the ranges of IL that the
- // position covers within this method. The array is an array of
- // integers and is [start,end,start,end]. The number of range
- // pairs is the length of the array / 2.
- int[] GetRanges(ISymbolDocument document,
- int line,
- int column);
-
- // Get the parameters for this method. The paraemeters are
- // returned in the order they are defined within the method's
- // signature.
- ISymbolVariable[] GetParameters();
-
- // Get the namespace that this method is defined within.
- ISymbolNamespace GetNamespace();
-
- // Get the start/end document positions for the source of this
- // method. The first array position is the start while the second
- // is the end. Returns true if positions were defined, false
- // otherwise.
- bool GetSourceStartEnd(ISymbolDocument[] docs,
- int[] lines,
- int[] columns);
- }
-
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymNamespace.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymNamespace.cs
deleted file mode 100644
index 1dee13ef69..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymNamespace.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** Represents a namespace within a symbol reader.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
-
- using System;
-
- // Interface does not need to be marked with the serializable attribute
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISymbolNamespace
- {
- // Get the name of this namespace
- String Name { get; }
-
- // Get the children of this namespace
- ISymbolNamespace[] GetNamespaces();
-
- // Get the variables in this namespace
- ISymbolVariable[] GetVariables();
- }
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymReader.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymReader.cs
deleted file mode 100644
index 8bc75e5aba..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymReader.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** Represents a symbol reader for managed code. Provides access to
-** documents, methods, and variables.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
- // Interface does not need to be marked with the serializable attribute
- using System;
- using System.Runtime.InteropServices;
-
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISymbolReader
- {
- // Find a document. Language, vendor, and document type are
- // optional.
- ISymbolDocument GetDocument(String url,
- Guid language,
- Guid languageVendor,
- Guid documentType);
-
- // Return an array of all of the documents defined in the symbol
- // store.
- ISymbolDocument[] GetDocuments();
-
- // Return the method that was specified as the user entry point
- // for the module, if any. This would be, perhaps, the user's main
- // method rather than compiler generated stubs before main.
- SymbolToken UserEntryPoint { get; }
-
- // Get a symbol reader method given the id of a method.
- ISymbolMethod GetMethod(SymbolToken method);
-
- // Get a symbol reader method given the id of a method and an E&C
- // version number. Version numbers start a 1 and are incremented
- // each time the method is changed due to an E&C operation.
- ISymbolMethod GetMethod(SymbolToken method, int version);
-
- // Return a non-local variable given its parent and name.
- ISymbolVariable[] GetVariables(SymbolToken parent);
-
- // Return a non-local variable given its parent and name.
- ISymbolVariable[] GetGlobalVariables();
-
- // Given a position in a document, return the ISymbolMethod that
- // contains that position.
- ISymbolMethod GetMethodFromDocumentPosition(ISymbolDocument document,
- int line,
- int column);
-
- // Gets a custom attribute based upon its name. Not to be
- // confused with Metadata custom attributes, these attributes are
- // held in the symbol store.
- byte[] GetSymAttribute(SymbolToken parent, String name);
-
- // Get the namespaces defined at global scope within this symbol store.
- ISymbolNamespace[] GetNamespaces();
- }
-
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymScope.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymScope.cs
deleted file mode 100644
index 859d7d42c8..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymScope.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** Represents a lexical scope within a ISymbolMethod. Provides access to
-** the start and end offsets of the scope, as well as its child and
-** parent scopes. Also provides access to all the locals defined
-** within this scope.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
- // Interface does not need to be marked with the serializable attribute
- using System;
- using System.Text;
- using System.Runtime.InteropServices;
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISymbolScope
- {
- // Get the method that contains this scope.
- ISymbolMethod Method { get; }
-
- // Get the parent scope of this scope.
- ISymbolScope Parent { get; }
-
- // Get any child scopes of this scope.
- ISymbolScope[] GetChildren();
-
- // Get the start and end offsets for this scope.
- int StartOffset { get; }
- int EndOffset { get; }
-
- // Get the locals within this scope. They are returned in no
- // particular order. Note: if a local variable changes its address
- // within this scope then that variable will be returned multiple
- // times, each with a different offset range.
- ISymbolVariable[] GetLocals();
-
- // Get the namespaces that are being "used" within this scope.
- ISymbolNamespace[] GetNamespaces();
- }
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymVariable.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymVariable.cs
deleted file mode 100644
index 857d24b2b6..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymVariable.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** Represents a variable within a symbol store. This could be a
-** parameter, local variable, or some other non-local variable.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
- // Interface does not need to be marked with the serializable attribute
- using System;
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISymbolVariable
- {
- // Get the name of this variable.
- String Name { get; }
-
- // Get the attributes of this variable.
- Object Attributes { get; }
-
- // Get the signature of this variable.
- byte[] GetSignature();
-
- SymAddressKind AddressKind { get; }
- int AddressField1 { get; }
- int AddressField2 { get; }
- int AddressField3 { get; }
-
- // Get the start/end offsets of this variable within its
- // parent. If this is a local variable within a scope, these will
- // fall within the offsets defined for the scope.
- int StartOffset { get; }
- int EndOffset { get; }
- }
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymWriter.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymWriter.cs
index a0d3640c2c..bfe9133aee 100644
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymWriter.cs
+++ b/src/mscorlib/src/System/Diagnostics/SymbolStore/ISymWriter.cs
@@ -20,13 +20,8 @@ namespace System.Diagnostics.SymbolStore {
using System.Runtime.Versioning;
// Interface does not need to be marked with the serializable attribute
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISymbolWriter
+ internal interface ISymbolWriter
{
- // Set the IMetadataEmitter that this symbol writer is associated
- // with. This must be done only once before any other ISymbolWriter
- // methods are called.
- void Initialize(IntPtr emitter, String filename, bool fFullBuild);
// Define a source document. Guid's will be provided for the
// languages, vendors, and document types that we currently know
@@ -36,11 +31,6 @@ namespace System.Diagnostics.SymbolStore {
Guid languageVendor,
Guid documentType);
- // Define the method that the user has defined as their entrypoint
- // for this module. This would be, perhaps, the user's main method
- // rather than compiler generated stubs before main.
- void SetUserEntryPoint(SymbolToken entryMethod);
-
// Open a method to emit symbol information into. The given method
// becomes the current method for calls do define sequence points,
// parameters and lexical scopes. There is an implicit lexical
@@ -88,9 +78,6 @@ namespace System.Diagnostics.SymbolStore {
// last instruction in the scope.
void CloseScope(int endOffset);
- // Define the offset range for a given lexical scope.
- void SetScopeRange(int scopeID, int startOffset, int endOffset);
-
// Define a single variable in the current lexical
// scope. startOffset and endOffset are optional. If 0, then they
// are ignored and the variable is defined over the entire
@@ -109,80 +96,17 @@ namespace System.Diagnostics.SymbolStore {
int startOffset,
int endOffset);
- // Define a single parameter in the current method. The type of
- // each parameter is taken from its position (sequence) within the
- // method's signature.
- //
- // Note: if parameters are defined in the metadata for a given
- // method, then clearly one would not have to define them again
- // with calls to this method. The symbol readers will have to be
- // smart enough to check the normal metadata for these first then
- // fall back to the symbol store.
- void DefineParameter(String name,
- ParameterAttributes attributes,
- int sequence,
- SymAddressKind addrKind,
- int addr1,
- int addr2,
- int addr3);
-
- // Define a single variable not within a method. This is used for
- // certian fields in classes, bitfields, etc.
- void DefineField(SymbolToken parent,
- String name,
- FieldAttributes attributes,
- byte[] signature,
- SymAddressKind addrKind,
- int addr1,
- int addr2,
- int addr3);
-
- // Define a single global variable.
- void DefineGlobalVariable(String name,
- FieldAttributes attributes,
- byte[] signature,
- SymAddressKind addrKind,
- int addr1,
- int addr2,
- int addr3);
-
- // Close will close the ISymbolWriter and commit the symbols
- // to the symbol store. The ISymbolWriter becomes invalid
- // after this call for further updates.
- void Close();
-
// Defines a custom attribute based upon its name. Not to be
// confused with Metadata custom attributes, these attributes are
// held in the symbol store.
void SetSymAttribute(SymbolToken parent, String name, byte[] data);
- // Opens a new namespace. Call this before defining methods or
- // variables that live within a namespace. Namespaces can be nested.
- void OpenNamespace(String name);
-
- // Close the most recently opened namespace.
- void CloseNamespace();
-
// Specifies that the given, fully qualified namespace name is
// being used within the currently open lexical scope. Closing the
// current scope will also stop using the namespace, and the
// namespace will be in use in all scopes that inherit from the
// currently open scope.
void UsingNamespace(String fullName);
-
- // Specifies the true start and end of a method within a source
- // file. Use this to specify the extent of a method independently
- // of what sequence points exist within the method.
- void SetMethodSourceRange(ISymbolDocumentWriter startDoc,
- int startLine,
- int startColumn,
- ISymbolDocumentWriter endDoc,
- int endLine,
- int endColumn);
-
- // Used to set the underlying ISymUnmanagedWriter that a
- // managed ISymbolWriter may use to emit symbols with.
- void SetUnderlyingWriter(IntPtr underlyingWriter);
}
}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/SymAddressKind.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/SymAddressKind.cs
index a7f866f2ec..bb50d9841b 100644
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/SymAddressKind.cs
+++ b/src/mscorlib/src/System/Diagnostics/SymbolStore/SymAddressKind.cs
@@ -16,8 +16,7 @@ namespace System.Diagnostics.SymbolStore {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum SymAddressKind
+ internal enum SymAddressKind
{
// ILOffset: addr1 = IL local var or param index.
ILOffset = 1,
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/SymDocumentType.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/SymDocumentType.cs
deleted file mode 100644
index f7c7fea867..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/SymDocumentType.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-[System.Runtime.InteropServices.ComVisible(true)]
-** A class to hold public guids for document types to be used with the
-** symbol store.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
- // Only statics does not need to be marked with the serializable attribute
- using System;
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public class SymDocumentType
- {
- public static readonly Guid Text = new Guid(0x5a869d0b, 0x6611, 0x11d3, 0xbd, 0x2a, 0x0, 0x0, 0xf8, 0x8, 0x49, 0xbd);
- }
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageType.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageType.cs
deleted file mode 100644
index a67ba297af..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageType.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-[System.Runtime.InteropServices.ComVisible(true)]
-** A class to hold public guids for languages types.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
- // Only statics, does not need to be marked with the serializable attribute
- using System;
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public class SymLanguageType
- {
- public static readonly Guid C = new Guid(0x63a08714, unchecked((short) 0xfc37), 0x11d2, 0x90, 0x4c, 0x0, 0xc0, 0x4f, 0xa3, 0x02, 0xa1);
- public static readonly Guid CPlusPlus = new Guid(0x3a12d0b7, unchecked((short)0xc26c), 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2);
-
- public static readonly Guid CSharp = new Guid(0x3f5162f8, unchecked((short)0x07c6), 0x11d3, 0x90, 0x53, 0x0, 0xc0, 0x4f, 0xa3, 0x02, 0xa1);
-
- public static readonly Guid Basic = new Guid(0x3a12d0b8, unchecked((short)0xc26c), 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2);
-
- public static readonly Guid Java = new Guid(0x3a12d0b4, unchecked((short)0xc26c), 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2);
-
- public static readonly Guid Cobol = new Guid(unchecked((int)0xaf046cd1), unchecked((short)0xd0e1), 0x11d2, 0x97, 0x7c, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc);
-
- public static readonly Guid Pascal = new Guid(unchecked((int)0xaf046cd2), unchecked((short) 0xd0e1), 0x11d2, 0x97, 0x7c, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc);
-
- public static readonly Guid ILAssembly = new Guid(unchecked((int)0xaf046cd3), unchecked((short)0xd0e1), 0x11d2, 0x97, 0x7c, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc);
-
- public static readonly Guid JScript = new Guid(0x3a12d0b6, unchecked((short)0xc26c), 0x11d0, 0xb4, 0x42, 0x00, 0xa0, 0x24, 0x4a, 0x1d, 0xd2);
-
- public static readonly Guid SMC = new Guid(unchecked((int)0xd9b9f7b), 0x6611, unchecked((short)0x11d3), 0xbd, 0x2a, 0x0, 0x0, 0xf8, 0x8, 0x49, 0xbd);
-
- public static readonly Guid MCPlusPlus = new Guid(0x4b35fde8, unchecked((short)0x07c6), 0x11d3, 0x90, 0x53, 0x0, 0xc0, 0x4f, 0xa3, 0x02, 0xa1);
- }
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageVendor.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageVendor.cs
deleted file mode 100644
index 8bef10bdad..0000000000
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageVendor.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-[System.Runtime.InteropServices.ComVisible(true)]
-** A class to hold public guids for language vendors.
-**
-**
-===========================================================*/
-namespace System.Diagnostics.SymbolStore {
- // Only statics, does not need to be marked with the serializable attribute
- using System;
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public class SymLanguageVendor
- {
- public static readonly Guid Microsoft = new Guid(unchecked((int)0x994b45c4), unchecked((short) 0xe6e9), 0x11d2, 0x90, 0x3f, 0x00, 0xc0, 0x4f, 0xa3, 0x02, 0xa1);
- }
-}
diff --git a/src/mscorlib/src/System/Diagnostics/SymbolStore/Token.cs b/src/mscorlib/src/System/Diagnostics/SymbolStore/Token.cs
index a8a6675a2f..cc1e4a865f 100644
--- a/src/mscorlib/src/System/Diagnostics/SymbolStore/Token.cs
+++ b/src/mscorlib/src/System/Diagnostics/SymbolStore/Token.cs
@@ -14,8 +14,7 @@ namespace System.Diagnostics.SymbolStore {
using System;
using System.Runtime.InteropServices;
- [ComVisible(true)]
- public struct SymbolToken
+ internal struct SymbolToken
{
internal int m_token;
@@ -37,15 +36,5 @@ namespace System.Diagnostics.SymbolStore {
{
return obj.m_token == m_token;
}
-
- public static bool operator ==(SymbolToken a, SymbolToken b)
- {
- return a.Equals(b);
- }
-
- public static bool operator !=(SymbolToken a, SymbolToken b)
- {
- return !(a == b);
- }
}
}
diff --git a/src/mscorlib/src/System/Diagnostics/log.cs b/src/mscorlib/src/System/Diagnostics/log.cs
index 6916ce3a0a..d297b8fa08 100644
--- a/src/mscorlib/src/System/Diagnostics/log.cs
+++ b/src/mscorlib/src/System/Diagnostics/log.cs
@@ -5,7 +5,6 @@
namespace System.Diagnostics {
using System.Runtime.Remoting;
using System;
- using System.Security.Permissions;
using System.IO;
using System.Collections;
using System.Runtime.CompilerServices;
@@ -13,18 +12,6 @@ namespace System.Diagnostics {
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
using System.Diagnostics.CodeAnalysis;
-
- // LogMessageEventHandlers are triggered when a message is generated which is
- // "on" per its switch.
- //
- // By default, the debugger (if attached) is the only event handler.
- // There is also a "built-in" console device which can be enabled
- // programatically, by registry (specifics....) or environment
- // variables.
- [Serializable]
- internal delegate void LogMessageEventHandler(LoggingLevels level, LogSwitch category,
- String message,
- StackTrace location);
// LogSwitchLevelHandlers are triggered when the level of a LogSwitch is modified
@@ -49,7 +36,6 @@ namespace System.Diagnostics {
// desired events are actually reported to the debugger.
internal static Hashtable m_Hashtable;
private static volatile bool m_fConsoleDeviceEnabled;
- private static LogMessageEventHandler _LogMessageEventHandler;
private static volatile LogSwitchLevelHandler _LogSwitchLevelHandler;
private static Object locker;
@@ -72,35 +58,6 @@ namespace System.Diagnostics {
GlobalSwitch.MinimumLevel = LoggingLevels.ErrorLevel;
}
- public static void AddOnLogMessage(LogMessageEventHandler handler)
- {
- lock (locker)
- _LogMessageEventHandler =
- (LogMessageEventHandler) MulticastDelegate.Combine(_LogMessageEventHandler, handler);
- }
-
- public static void RemoveOnLogMessage(LogMessageEventHandler handler)
- {
-
- lock (locker)
- _LogMessageEventHandler =
- (LogMessageEventHandler) MulticastDelegate.Remove(_LogMessageEventHandler, handler);
- }
-
- public static void AddOnLogSwitchLevel(LogSwitchLevelHandler handler)
- {
- lock (locker)
- _LogSwitchLevelHandler =
- (LogSwitchLevelHandler) MulticastDelegate.Combine(_LogSwitchLevelHandler, handler);
- }
-
- public static void RemoveOnLogSwitchLevel(LogSwitchLevelHandler handler)
- {
- lock (locker)
- _LogSwitchLevelHandler =
- (LogSwitchLevelHandler) MulticastDelegate.Remove(_LogSwitchLevelHandler, handler);
- }
-
internal static void InvokeLogSwitchLevelHandlers (LogSwitch ls, LoggingLevels newLevel)
{
LogSwitchLevelHandler handler = _LogSwitchLevelHandler;
@@ -119,15 +76,6 @@ namespace System.Diagnostics {
get { return m_fConsoleDeviceEnabled; }
set { m_fConsoleDeviceEnabled = value; }
}
-
- // Generates a log message. If its switch (or a parent switch) allows the
- // level for the message, it is "broadcast" to all of the log
- // devices.
- //
- public static void LogMessage(LoggingLevels level, String message)
- {
- LogMessage (level, GlobalSwitch, message);
- }
// Generates a log message. If its switch (or a parent switch) allows the
// level for the message, it is "broadcast" to all of the log
@@ -168,74 +116,10 @@ namespace System.Diagnostics {
LogMessage (LoggingLevels.TraceLevel0, logswitch, message);
}
- public static void Trace(String switchname, String message)
- {
- LogSwitch ls;
- ls = LogSwitch.GetSwitch (switchname);
- LogMessage (LoggingLevels.TraceLevel0, ls, message);
- }
-
public static void Trace(String message)
{
LogMessage (LoggingLevels.TraceLevel0, GlobalSwitch, message);
}
-
- public static void Status(LogSwitch logswitch, String message)
- {
- LogMessage (LoggingLevels.StatusLevel0, logswitch, message);
- }
-
- public static void Status(String switchname, String message)
- {
- LogSwitch ls;
- ls = LogSwitch.GetSwitch (switchname);
- LogMessage (LoggingLevels.StatusLevel0, ls, message);
- }
-
- public static void Status(String message)
- {
- LogMessage (LoggingLevels.StatusLevel0, GlobalSwitch, message);
- }
-
- public static void Warning(LogSwitch logswitch, String message)
- {
- LogMessage (LoggingLevels.WarningLevel, logswitch, message);
- }
-
- public static void Warning(String switchname, String message)
- {
- LogSwitch ls;
- ls = LogSwitch.GetSwitch (switchname);
- LogMessage (LoggingLevels.WarningLevel, ls, message);
- }
-
- public static void Warning(String message)
- {
- LogMessage (LoggingLevels.WarningLevel, GlobalSwitch, message);
- }
-
- public static void Error(LogSwitch logswitch, String message)
- {
- LogMessage (LoggingLevels.ErrorLevel, logswitch, message);
- }
-
- public static void Error(String switchname, String message)
- {
- LogSwitch ls;
- ls = LogSwitch.GetSwitch (switchname);
- LogMessage (LoggingLevels.ErrorLevel, ls, message);
-
- }
-
- public static void Error(String message)
- {
- LogMessage (LoggingLevels.ErrorLevel, GlobalSwitch, message);
- }
-
- public static void Panic(String message)
- {
- LogMessage (LoggingLevels.PanicLevel, GlobalSwitch, message);
- }
// Native method to inform the EE about the creation of a new LogSwitch
diff --git a/src/mscorlib/src/System/DivideByZeroException.cs b/src/mscorlib/src/System/DivideByZeroException.cs
index b975e81df6..4abd43adaf 100644
--- a/src/mscorlib/src/System/DivideByZeroException.cs
+++ b/src/mscorlib/src/System/DivideByZeroException.cs
@@ -11,29 +11,31 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
-[System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public class DivideByZeroException : ArithmeticException {
- public DivideByZeroException()
- : base(Environment.GetResourceString("Arg_DivideByZero")) {
- SetErrorCode(__HResults.COR_E_DIVIDEBYZERO);
- }
-
- public DivideByZeroException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_DIVIDEBYZERO);
+ public class DivideByZeroException : ArithmeticException
+ {
+ public DivideByZeroException()
+ : base(SR.Arg_DivideByZero)
+ {
+ HResult = __HResults.COR_E_DIVIDEBYZERO;
}
-
- public DivideByZeroException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_DIVIDEBYZERO);
+
+ public DivideByZeroException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_DIVIDEBYZERO;
}
- protected DivideByZeroException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public DivideByZeroException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_DIVIDEBYZERO;
}
+
+ protected DivideByZeroException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/DllNotFoundException.cs b/src/mscorlib/src/System/DllNotFoundException.cs
index f860904f3f..43bb57fec2 100644
--- a/src/mscorlib/src/System/DllNotFoundException.cs
+++ b/src/mscorlib/src/System/DllNotFoundException.cs
@@ -16,7 +16,6 @@ namespace System {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class DllNotFoundException : TypeLoadException {
public DllNotFoundException()
diff --git a/src/mscorlib/src/System/Double.cs b/src/mscorlib/src/System/Double.cs
index ce146a1227..1e4e477366 100644
--- a/src/mscorlib/src/System/Double.cs
+++ b/src/mscorlib/src/System/Double.cs
@@ -22,7 +22,6 @@ namespace System {
[Serializable]
[StructLayout(LayoutKind.Sequential)]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct Double : IComparable, IFormattable, IConvertible
, IComparable<Double>, IEquatable<Double>
{
@@ -83,7 +82,6 @@ namespace System {
}
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public unsafe static bool IsNaN(double d)
{
diff --git a/src/mscorlib/src/System/DuplicateWaitObjectException.cs b/src/mscorlib/src/System/DuplicateWaitObjectException.cs
index d358d964c2..da29e2ad76 100644
--- a/src/mscorlib/src/System/DuplicateWaitObjectException.cs
+++ b/src/mscorlib/src/System/DuplicateWaitObjectException.cs
@@ -11,53 +11,55 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Remoting;
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
+namespace System
+{
// The DuplicateWaitObjectException is thrown when an object
// appears more than once in the list of objects to WaitAll or WaitAny.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
- public class DuplicateWaitObjectException : ArgumentException {
+ public class DuplicateWaitObjectException : ArgumentException
+ {
+ private static volatile String s_duplicateWaitObjectMessage = null;
- private static volatile String _duplicateWaitObjectMessage = null;
-
- private static String DuplicateWaitObjectMessage {
- get {
- if (_duplicateWaitObjectMessage == null)
- _duplicateWaitObjectMessage = Environment.GetResourceString("Arg_DuplicateWaitObjectException");
- return _duplicateWaitObjectMessage;
+ private static String DuplicateWaitObjectMessage
+ {
+ get
+ {
+ if (s_duplicateWaitObjectMessage == null)
+ s_duplicateWaitObjectMessage = SR.Arg_DuplicateWaitObjectException;
+ return s_duplicateWaitObjectMessage;
}
}
// Creates a new DuplicateWaitObjectException with its message
// string set to a default message.
- public DuplicateWaitObjectException()
- : base(DuplicateWaitObjectMessage) {
- SetErrorCode(__HResults.COR_E_DUPLICATEWAITOBJECT);
+ public DuplicateWaitObjectException()
+ : base(DuplicateWaitObjectMessage)
+ {
+ HResult = __HResults.COR_E_DUPLICATEWAITOBJECT;
}
- public DuplicateWaitObjectException(String parameterName)
- : base(DuplicateWaitObjectMessage, parameterName) {
- SetErrorCode(__HResults.COR_E_DUPLICATEWAITOBJECT);
+ public DuplicateWaitObjectException(String parameterName)
+ : base(DuplicateWaitObjectMessage, parameterName)
+ {
+ HResult = __HResults.COR_E_DUPLICATEWAITOBJECT;
}
- public DuplicateWaitObjectException(String parameterName, String message)
- : base(message, parameterName) {
- SetErrorCode(__HResults.COR_E_DUPLICATEWAITOBJECT);
+ public DuplicateWaitObjectException(String parameterName, String message)
+ : base(message, parameterName)
+ {
+ HResult = __HResults.COR_E_DUPLICATEWAITOBJECT;
}
- public DuplicateWaitObjectException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_DUPLICATEWAITOBJECT);
+ public DuplicateWaitObjectException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_DUPLICATEWAITOBJECT;
}
// This constructor is required for serialization
- protected DuplicateWaitObjectException(SerializationInfo info, StreamingContext context) : base (info, context) {
- }
+ protected DuplicateWaitObjectException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/EntryPointNotFoundException.cs b/src/mscorlib/src/System/EntryPointNotFoundException.cs
index a65d80058e..835d33413d 100644
--- a/src/mscorlib/src/System/EntryPointNotFoundException.cs
+++ b/src/mscorlib/src/System/EntryPointNotFoundException.cs
@@ -11,32 +11,32 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System;
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public class EntryPointNotFoundException : TypeLoadException {
- public EntryPointNotFoundException()
- : base(Environment.GetResourceString("Arg_EntryPointNotFoundException")) {
- SetErrorCode(__HResults.COR_E_ENTRYPOINTNOTFOUND);
- }
-
- public EntryPointNotFoundException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_ENTRYPOINTNOTFOUND);
+ public class EntryPointNotFoundException : TypeLoadException
+ {
+ public EntryPointNotFoundException()
+ : base(SR.Arg_EntryPointNotFoundException)
+ {
+ HResult = __HResults.COR_E_ENTRYPOINTNOTFOUND;
}
-
- public EntryPointNotFoundException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.COR_E_ENTRYPOINTNOTFOUND);
+
+ public EntryPointNotFoundException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_ENTRYPOINTNOTFOUND;
}
- protected EntryPointNotFoundException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public EntryPointNotFoundException(String message, Exception inner)
+ : base(message, inner)
+ {
+ HResult = __HResults.COR_E_ENTRYPOINTNOTFOUND;
}
-
-
- }
+ protected EntryPointNotFoundException(SerializationInfo info, StreamingContext context) : base(info, context) { }
+ }
}
diff --git a/src/mscorlib/src/System/Enum.cs b/src/mscorlib/src/System/Enum.cs
index d39e005d48..97cfdf1b23 100644
--- a/src/mscorlib/src/System/Enum.cs
+++ b/src/mscorlib/src/System/Enum.cs
@@ -15,7 +15,6 @@ using System.Diagnostics.Contracts;
namespace System
{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public abstract class Enum : ValueType, IComparable, IFormattable, IConvertible
{
#region Private Constants
@@ -70,7 +69,6 @@ namespace System
case CorElementType.U8:
return (*(ulong*)pValue).ToString("X16", null);
default:
- Debug.Assert(false, "Invalid Object type in Format");
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_UnknownEnumType"));
}
}
@@ -105,7 +103,6 @@ namespace System
return ((UInt64)(Int64)value).ToString("X16", null);
// All unsigned types will be directly cast
default:
- Debug.Assert(false, "Invalid Object type in Format");
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_UnknownEnumType"));
}
}
@@ -159,7 +156,7 @@ namespace System
Debug.Assert(names.Length == values.Length);
int index = values.Length - 1;
- StringBuilder retval = new StringBuilder();
+ StringBuilder sb = StringBuilderCache.Acquire();
bool firstTime = true;
ulong saveResult = result;
@@ -175,31 +172,40 @@ namespace System
{
result -= values[index];
if (!firstTime)
- retval.Insert(0, enumSeparatorString);
+ sb.Insert(0, enumSeparatorString);
- retval.Insert(0, names[index]);
+ sb.Insert(0, names[index]);
firstTime = false;
}
index--;
}
- // We were unable to represent this number as a bitwise or of valid flags
+ string returnString;
if (result != 0)
- return null; // return null so the caller knows to .ToString() the input
-
- // For the case when we have zero
- if (saveResult == 0)
{
+ // We were unable to represent this number as a bitwise or of valid flags
+ returnString = null; // return null so the caller knows to .ToString() the input
+ }
+ else if (saveResult == 0)
+ {
+ // For the cases when we have zero
if (values.Length > 0 && values[0] == 0)
- return names[0]; // Zero was one of the enum values.
+ {
+ returnString = names[0]; // Zero was one of the enum values.
+ }
else
- return "0";
+ {
+ returnString = "0";
+ }
}
else
{
- return retval.ToString(); // Return the string representation
+ returnString = sb.ToString(); // Return the string representation
}
+
+ StringBuilderCache.Release(sb);
+ return returnString;
}
internal static ulong ToUInt64(Object value)
@@ -244,7 +250,6 @@ namespace System
break;
// All unsigned types will be directly cast
default:
- Debug.Assert(false, "Invalid Object type in ToUInt64");
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_UnknownEnumType"));
}
@@ -361,13 +366,11 @@ namespace System
return retValue;
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object Parse(Type enumType, String value)
{
return Parse(enumType, value, false);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object Parse(Type enumType, String value, bool ignoreCase)
{
EnumResult parseResult = new EnumResult() { canThrow = true };
@@ -525,7 +528,6 @@ namespace System
}
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Type GetUnderlyingType(Type enumType)
{
if (enumType == null)
@@ -536,7 +538,6 @@ namespace System
return enumType.GetEnumUnderlyingType();
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Array GetValues(Type enumType)
{
if (enumType == null)
@@ -553,7 +554,6 @@ namespace System
return GetCachedValuesAndNames(enumType, false).Values;
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static String GetName(Type enumType, Object value)
{
if (enumType == null)
@@ -563,7 +563,6 @@ namespace System
return enumType.GetEnumName(value);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static String[] GetNames(Type enumType)
{
if (enumType == null)
@@ -580,7 +579,6 @@ namespace System
return GetCachedValuesAndNames(enumType, true).Names;
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object ToObject(Type enumType, Object value)
{
if (value == null)
@@ -629,7 +627,6 @@ namespace System
}
[Pure]
- [System.Runtime.InteropServices.ComVisible(true)]
public static bool IsDefined(Type enumType, Object value)
{
if (enumType == null)
@@ -639,7 +636,6 @@ namespace System
return enumType.IsEnumDefined(value);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static String Format(Type enumType, Object value, String format)
{
if (enumType == null)
@@ -899,8 +895,8 @@ namespace System
public int CompareTo(Object target)
{
const int retIncompatibleMethodTables = 2; // indicates that the method tables did not match
- const int retInvalidEnumType = 3; // indicates that the enum was of an unknown/unsupported unerlying type
-
+ const int retInvalidEnumType = 3; // indicates that the enum was of an unknown/unsupported underlying type
+
if (this == null)
throw new NullReferenceException();
Contract.EndContractBlock();
@@ -978,61 +974,31 @@ namespace System
#region IConvertable
public TypeCode GetTypeCode()
{
- Type enumType = this.GetType();
- Type underlyingType = GetUnderlyingType(enumType);
-
- if (underlyingType == typeof(Int32))
- {
- return TypeCode.Int32;
- }
-
- if (underlyingType == typeof(sbyte))
- {
- return TypeCode.SByte;
- }
-
- if (underlyingType == typeof(Int16))
- {
- return TypeCode.Int16;
- }
-
- if (underlyingType == typeof(Int64))
+ switch (InternalGetCorElementType())
{
- return TypeCode.Int64;
- }
-
- if (underlyingType == typeof(UInt32))
- {
- return TypeCode.UInt32;
- }
-
- if (underlyingType == typeof(byte))
- {
- return TypeCode.Byte;
- }
-
- if (underlyingType == typeof(UInt16))
- {
- return TypeCode.UInt16;
- }
-
- if (underlyingType == typeof(UInt64))
- {
- return TypeCode.UInt64;
- }
-
- if (underlyingType == typeof(Boolean))
- {
- return TypeCode.Boolean;
- }
-
- if (underlyingType == typeof(Char))
- {
- return TypeCode.Char;
+ case CorElementType.I1:
+ return TypeCode.SByte;
+ case CorElementType.U1:
+ return TypeCode.Byte;
+ case CorElementType.Boolean:
+ return TypeCode.Boolean;
+ case CorElementType.I2:
+ return TypeCode.Int16;
+ case CorElementType.U2:
+ return TypeCode.UInt16;
+ case CorElementType.Char:
+ return TypeCode.Char;
+ case CorElementType.I4:
+ return TypeCode.Int32;
+ case CorElementType.U4:
+ return TypeCode.UInt32;
+ case CorElementType.I8:
+ return TypeCode.Int64;
+ case CorElementType.U8:
+ return TypeCode.UInt64;
+ default:
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_UnknownEnumType"));
}
-
- Debug.Assert(false, "Unknown underlying type.");
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_UnknownEnumType"));
}
/// <internalonly/>
@@ -1128,7 +1094,6 @@ namespace System
#region ToObject
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object ToObject(Type enumType, sbyte value)
{
if (enumType == null)
@@ -1142,7 +1107,6 @@ namespace System
return InternalBoxEnum(rtType, value);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object ToObject(Type enumType, short value)
{
if (enumType == null)
@@ -1156,7 +1120,6 @@ namespace System
return InternalBoxEnum(rtType, value);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object ToObject(Type enumType, int value)
{
if (enumType == null)
@@ -1170,7 +1133,6 @@ namespace System
return InternalBoxEnum(rtType, value);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object ToObject(Type enumType, byte value)
{
if (enumType == null)
@@ -1185,7 +1147,6 @@ namespace System
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object ToObject(Type enumType, ushort value)
{
if (enumType == null)
@@ -1200,7 +1161,6 @@ namespace System
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object ToObject(Type enumType, uint value)
{
if (enumType == null)
@@ -1214,7 +1174,6 @@ namespace System
return InternalBoxEnum(rtType, value);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object ToObject(Type enumType, long value)
{
if (enumType == null)
@@ -1229,7 +1188,6 @@ namespace System
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public static Object ToObject(Type enumType, ulong value)
{
if (enumType == null)
diff --git a/src/mscorlib/src/System/Environment.cs b/src/mscorlib/src/System/Environment.cs
index 835219a01c..8fa4ce4ff5 100644
--- a/src/mscorlib/src/System/Environment.cs
+++ b/src/mscorlib/src/System/Environment.cs
@@ -18,7 +18,6 @@ namespace System {
using System.Globalization;
using System.Collections;
using System.Collections.Generic;
- using System.Security.Permissions;
using System.Text;
using System.Configuration.Assemblies;
using System.Runtime.InteropServices;
@@ -31,7 +30,6 @@ namespace System {
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
- [ComVisible(true)]
public enum EnvironmentVariableTarget
{
Process = 0,
@@ -39,7 +37,6 @@ namespace System {
Machine = 2,
}
- [ComVisible(true)]
public static partial class Environment
{
// Assume the following constants include the terminating '\0' - use <, not <=
@@ -72,23 +69,7 @@ namespace System {
// Is this thread currently doing infinite resource lookups?
private int infinitelyRecursingCount;
-
- // Data representing one individual resource lookup on a thread.
- internal class GetResourceStringUserData
- {
- public ResourceHelper m_resourceHelper;
- public String m_key;
- public String m_retVal;
- public bool m_lockWasTaken;
-
- public GetResourceStringUserData(ResourceHelper resourceHelper, String key)
- {
- m_resourceHelper = resourceHelper;
- m_key = key;
- }
- }
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal String GetResourceString(String key) {
if (key == null || key.Length == 0) {
Debug.Assert(false, "Environment::GetResourceString with null or empty key. Bug in caller, or weird recursive loading problem?");
@@ -114,111 +95,85 @@ namespace System {
// returning, we're going into an infinite loop and we should
// return a bogus string.
- GetResourceStringUserData userData = new GetResourceStringUserData(this, key);
-
- RuntimeHelpers.TryCode tryCode = new RuntimeHelpers.TryCode(GetResourceStringCode);
- RuntimeHelpers.CleanupCode cleanupCode = new RuntimeHelpers.CleanupCode(GetResourceStringBackoutCode);
-
- RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(tryCode, cleanupCode, userData);
- return userData.m_retVal;
- }
-
- private void GetResourceStringCode(Object userDataIn)
- {
- GetResourceStringUserData userData = (GetResourceStringUserData) userDataIn;
- ResourceHelper rh = userData.m_resourceHelper;
- String key = userData.m_key;
-
- Monitor.Enter(rh, ref userData.m_lockWasTaken);
-
- // Are we recursively looking up the same resource? Note - our backout code will set
- // the ResourceHelper's currentlyLoading stack to null if an exception occurs.
- if (rh.currentlyLoading != null && rh.currentlyLoading.Count > 0 && rh.currentlyLoading.LastIndexOf(key) != -1) {
- // We can start infinitely recursing for one resource lookup,
- // then during our failure reporting, start infinitely recursing again.
- // avoid that.
- if (rh.infinitelyRecursingCount > 0) {
- userData.m_retVal = "[Resource lookup failed - infinite recursion or critical failure detected.]";
- return;
- }
- rh.infinitelyRecursingCount++;
+ bool lockTaken = false;
+ try
+ {
+ Monitor.Enter(this, ref lockTaken);
- // Note: our infrastructure for reporting this exception will again cause resource lookup.
- // This is the most direct way of dealing with that problem.
- String message = "Infinite recursion during resource lookup within "+System.CoreLib.Name+". This may be a bug in "+System.CoreLib.Name+", or potentially in certain extensibility points such as assembly resolve events or CultureInfo names. Resource name: " + key;
- Assert.Fail("[Recursive resource lookup bug]", message, Assert.COR_E_FAILFAST, System.Diagnostics.StackTrace.TraceFormat.NoResourceLookup);
- Environment.FailFast(message);
- }
- if (rh.currentlyLoading == null)
- rh.currentlyLoading = new List<string>();
+ // Are we recursively looking up the same resource? Note - our backout code will set
+ // the ResourceHelper's currentlyLoading stack to null if an exception occurs.
+ if (currentlyLoading != null && currentlyLoading.Count > 0 && currentlyLoading.LastIndexOf(key) != -1)
+ {
+ // We can start infinitely recursing for one resource lookup,
+ // then during our failure reporting, start infinitely recursing again.
+ // avoid that.
+ if (infinitelyRecursingCount > 0)
+ {
+ return "[Resource lookup failed - infinite recursion or critical failure detected.]";
+ }
+ infinitelyRecursingCount++;
- // Call class constructors preemptively, so that we cannot get into an infinite
- // loop constructing a TypeInitializationException. If this were omitted,
- // we could get the Infinite recursion assert above by failing type initialization
- // between the Push and Pop calls below.
-
- if (!rh.resourceManagerInited)
- {
- // process-critical code here. No ThreadAbortExceptions
- // can be thrown here. Other exceptions percolate as normal.
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
+ // Note: our infrastructure for reporting this exception will again cause resource lookup.
+ // This is the most direct way of dealing with that problem.
+ string message = $"Infinite recursion during resource lookup within {System.CoreLib.Name}. This may be a bug in {System.CoreLib.Name}, or potentially in certain extensibility points such as assembly resolve events or CultureInfo names. Resource name: {key}";
+ Assert.Fail("[Recursive resource lookup bug]", message, Assert.COR_E_FAILFAST, System.Diagnostics.StackTrace.TraceFormat.NoResourceLookup);
+ Environment.FailFast(message);
}
- finally {
+ if (currentlyLoading == null)
+ currentlyLoading = new List<string>();
+
+ // Call class constructors preemptively, so that we cannot get into an infinite
+ // loop constructing a TypeInitializationException. If this were omitted,
+ // we could get the Infinite recursion assert above by failing type initialization
+ // between the Push and Pop calls below.
+ if (!resourceManagerInited)
+ {
RuntimeHelpers.RunClassConstructor(typeof(ResourceManager).TypeHandle);
RuntimeHelpers.RunClassConstructor(typeof(ResourceReader).TypeHandle);
RuntimeHelpers.RunClassConstructor(typeof(RuntimeResourceSet).TypeHandle);
RuntimeHelpers.RunClassConstructor(typeof(BinaryReader).TypeHandle);
- rh.resourceManagerInited = true;
+ resourceManagerInited = true;
}
-
- }
-
- rh.currentlyLoading.Add(key); // Push
-
- if (rh.SystemResMgr == null) {
- rh.SystemResMgr = new ResourceManager(m_name, typeof(Object).Assembly);
- }
- String s = rh.SystemResMgr.GetString(key, null);
- rh.currentlyLoading.RemoveAt(rh.currentlyLoading.Count - 1); // Pop
- Debug.Assert(s!=null, "Managed resource string lookup failed. Was your resource name misspelled? Did you rebuild mscorlib after adding a resource to resources.txt? Debug this w/ cordbg and bug whoever owns the code that called Environment.GetResourceString. Resource name was: \""+key+"\"");
+ currentlyLoading.Add(key); // Push
- userData.m_retVal = s;
- }
-
- [PrePrepareMethod]
- private void GetResourceStringBackoutCode(Object userDataIn, bool exceptionThrown)
- {
- GetResourceStringUserData userData = (GetResourceStringUserData) userDataIn;
- ResourceHelper rh = userData.m_resourceHelper;
+ if (SystemResMgr == null)
+ {
+ SystemResMgr = new ResourceManager(m_name, typeof(Object).Assembly);
+ }
+ string s = SystemResMgr.GetString(key, null);
+ currentlyLoading.RemoveAt(currentlyLoading.Count - 1); // Pop
- if (exceptionThrown)
+ Debug.Assert(s != null, "Managed resource string lookup failed. Was your resource name misspelled? Did you rebuild mscorlib after adding a resource to resources.txt? Debug this w/ cordbg and bug whoever owns the code that called Environment.GetResourceString. Resource name was: \"" + key + "\"");
+ return s;
+ }
+ catch
{
- if (userData.m_lockWasTaken)
+ if (lockTaken)
{
// Backout code - throw away potentially corrupt state
- rh.SystemResMgr = null;
- rh.currentlyLoading = null;
+ SystemResMgr = null;
+ currentlyLoading = null;
}
+ throw;
}
- // Release the lock, if we took it.
- if (userData.m_lockWasTaken)
+ finally
{
- Monitor.Exit(rh);
+ if (lockTaken)
+ {
+ Monitor.Exit(this);
+ }
}
}
-
}
- private static volatile ResourceHelper m_resHelper; // Doesn't need to be initialized as they're zero-init.
+ private static volatile ResourceHelper m_resHelper; // Doesn't need to be initialized as they're zero-init.
private const int MaxMachineNameLength = 256;
// Private object for locking instead of locking on a public type for SQL reliability work.
private static Object s_InternalSyncObject;
private static Object InternalSyncObject {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
get {
if (s_InternalSyncObject == null) {
Object o = new Object();
@@ -266,9 +221,6 @@ namespace System {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern void FailFast(String message);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern void FailFast(String message, uint exitCode);
-
// This overload of FailFast will allow you to specify the exception object
// whose bucket details *could* be used when undergoing the failfast process.
// To be specific:
@@ -292,7 +244,7 @@ namespace System {
**Arguments: The current directory to which to switch to the setter.
**Exceptions:
==============================================================================*/
- public static String CurrentDirectory
+ internal static String CurrentDirectory
{
get{
return Directory.GetCurrentDirectory();
@@ -304,7 +256,7 @@ namespace System {
}
// Returns the system directory (ie, C:\WinNT\System32).
- public static String SystemDirectory {
+ internal static String SystemDirectory {
get {
StringBuilder sb = new StringBuilder(Path.MaxPath);
int r = Win32Native.GetSystemDirectory(sb, Path.MaxPath);
@@ -316,20 +268,6 @@ namespace System {
}
}
- // Returns the windows directory (ie, C:\WinNT).
- // Used by NLS+ custom culures only at the moment.
- internal static String InternalWindowsDirectory {
- get {
- StringBuilder sb = new StringBuilder(Path.MaxPath);
- int r = Win32Native.GetWindowsDirectory(sb, Path.MaxPath);
- Debug.Assert(r < Path.MaxPath, "r < Path.MaxPath");
- if (r==0) __Error.WinIOError();
- String path = sb.ToString();
-
- return path;
- }
- }
-
public static String ExpandEnvironmentVariables(String name)
{
if (name == null)
@@ -421,15 +359,6 @@ namespace System {
}
}
- public static int SystemPageSize {
- get {
- (new EnvironmentPermission(PermissionState.Unrestricted)).Demand();
- Win32Native.SYSTEM_INFO info = new Win32Native.SYSTEM_INFO();
- Win32Native.GetSystemInfo(ref info);
- return info.dwPageSize;
- }
- }
-
/*==============================GetCommandLineArgs==============================
**Action: Gets the command line and splits it appropriately to deal with whitespace,
** quotes, and escape characters.
@@ -439,7 +368,6 @@ namespace System {
==============================================================================*/
public static String[] GetCommandLineArgs()
{
- new EnvironmentPermission(EnvironmentPermissionAccess.Read, "Path").Demand();
/*
* There are multiple entry points to a hosted app.
* The host could use ::ExecuteAssembly() or ::CreateDelegate option
@@ -515,38 +443,6 @@ namespace System {
return block;
}
- /*===============================GetLogicalDrives===============================
- **Action: Retrieves the names of the logical drives on this machine in the form "C:\".
- **Arguments: None.
- **Exceptions: IOException.
- **Permissions: SystemInfo Permission.
- ==============================================================================*/
- public static String[] GetLogicalDrives() {
- new EnvironmentPermission(PermissionState.Unrestricted).Demand();
-
- int drives = Win32Native.GetLogicalDrives();
- if (drives==0)
- __Error.WinIOError();
- uint d = (uint)drives;
- int count = 0;
- while (d != 0) {
- if (((int)d & 1) != 0) count++;
- d >>= 1;
- }
- String[] result = new String[count];
- char[] root = new char[] {'A', ':', '\\'};
- d = (uint)drives;
- count = 0;
- while (d != 0) {
- if (((int)d & 1) != 0) {
- result[count++] = new String(root);
- }
- d >>= 1;
- root[0]++;
- }
- return result;
- }
-
/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the given
** platform.
@@ -583,31 +479,13 @@ namespace System {
}
}
-
- /*==================================WorkingSet==================================
- **Action:
- **Returns:
- **Arguments:
- **Exceptions:
- ==============================================================================*/
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
- private static extern long GetWorkingSet();
-
- public static long WorkingSet {
- get {
- new EnvironmentPermission(PermissionState.Unrestricted).Demand();
- return GetWorkingSet();
- }
- }
-
-
/*==================================OSVersion===================================
**Action:
**Returns:
**Arguments:
**Exceptions:
==============================================================================*/
- public static OperatingSystem OSVersion {
+ internal static OperatingSystem OSVersion {
get {
Contract.Ensures(Contract.Result<OperatingSystem>() != null);
@@ -636,7 +514,6 @@ namespace System {
}
}
-#if FEATURE_CORESYSTEM
internal static bool IsWindows8OrAbove {
get {
@@ -652,47 +529,6 @@ namespace System {
}
#endif // FEATURE_COMINTEROP
-#else // FEATURE_CORESYSTEM
-
- private static volatile bool s_IsWindows8OrAbove;
- private static volatile bool s_CheckedOSWin8OrAbove;
-
- // Windows 8 version is 6.2
- internal static bool IsWindows8OrAbove {
- get {
- if (!s_CheckedOSWin8OrAbove) {
- OperatingSystem OS = Environment.OSVersion;
- s_IsWindows8OrAbove = (OS.Platform == PlatformID.Win32NT &&
- ((OS.Version.Major == 6 && OS.Version.Minor >= 2) || (OS.Version.Major > 6)));
- s_CheckedOSWin8OrAbove = true;
- }
- return s_IsWindows8OrAbove;
- }
- }
-
-#if FEATURE_COMINTEROP
- private static volatile bool s_WinRTSupported;
- private static volatile bool s_CheckedWinRT;
-
- // Does the current version of Windows have Windows Runtime suppport?
- internal static bool IsWinRTSupported {
- get {
- if (!s_CheckedWinRT) {
- s_WinRTSupported = WinRTSupported();
- s_CheckedWinRT = true;
- }
-
- return s_WinRTSupported;
- }
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.Bool)]
- private static extern bool WinRTSupported();
-#endif // FEATURE_COMINTEROP
-
-#endif // FEATURE_CORESYSTEM
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern bool GetVersion(Microsoft.Win32.Win32Native.OSVERSIONINFO osVer);
@@ -711,7 +547,6 @@ namespace System {
get {
Contract.Ensures(Contract.Result<String>() != null);
- new EnvironmentPermission(PermissionState.Unrestricted).Demand();
return GetStackTrace(null, true);
}
}
@@ -806,16 +641,6 @@ namespace System {
return GetResourceStringFormatted(key, new object[] { val0, val1, val2, val3 });
}
- internal static string GetResourceString(string key, object val0, object val1, object val2, object val3, object val4)
- {
- return GetResourceStringFormatted(key, new object[] { val0, val1, val2, val3, val4 });
- }
-
- internal static string GetResourceString(string key, object val0, object val1, object val2, object val3, object val4, object val5)
- {
- return GetResourceStringFormatted(key, new object[] { val0, val1, val2, val3, val4, val5 });
- }
-
internal static String GetResourceString(string key, params object[] values)
{
return GetResourceStringFormatted(key, values);
@@ -829,321 +654,74 @@ namespace System {
return String.Format(CultureInfo.CurrentCulture, rs, values);
}
- // The following two internal methods are not used anywhere within the framework,
- // but are being kept around as external platforms built on top of us have taken
- // dependency by using private reflection on them for getting system resource strings
- private static String GetRuntimeResourceString(String key) {
- return GetResourceString(key);
- }
-
- private static String GetRuntimeResourceString(String key, params Object[] values) {
- return GetResourceStringFormatted(key,values);
- }
-
- public static bool Is64BitProcess {
- get {
-#if BIT64
- return true;
-#else // 32
- return false;
-#endif
- }
- }
-
- public static bool Is64BitOperatingSystem {
- get {
-#if BIT64
- // 64-bit programs run only on 64-bit
- return true;
-#else // 32
- bool isWow64; // WinXP SP2+ and Win2k3 SP1+
- return Win32Native.DoesWin32MethodExist(Win32Native.KERNEL32, "IsWow64Process")
- && Win32Native.IsWow64Process(Win32Native.GetCurrentProcess(), out isWow64)
- && isWow64;
-#endif
- }
- }
-
public static extern bool HasShutdownStarted {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
get;
}
- public static string UserName {
- get {
- new EnvironmentPermission(EnvironmentPermissionAccess.Read,"UserName").Demand();
-
- StringBuilder sb = new StringBuilder(256);
- int size = sb.Capacity;
- if (Win32Native.GetUserName(sb, ref size))
- {
- return sb.ToString();
- }
- return String.Empty;
- }
- }
-
- public static bool UserInteractive
+ internal static bool UserInteractive
{
get {
return true;
}
}
-
- public static string GetFolderPath(SpecialFolder folder) {
- if (!Enum.IsDefined(typeof(SpecialFolder), folder))
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)folder));
- Contract.EndContractBlock();
-
- return InternalGetFolderPath(folder, SpecialFolderOption.None);
- }
-
- public static string GetFolderPath(SpecialFolder folder, SpecialFolderOption option) {
- if (!Enum.IsDefined(typeof(SpecialFolder),folder))
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)folder));
- if (!Enum.IsDefined(typeof(SpecialFolderOption),option))
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)option));
- Contract.EndContractBlock();
-
- return InternalGetFolderPath(folder, option);
+ public static int CurrentManagedThreadId
+ {
+ get
+ {
+ return Thread.CurrentThread.ManagedThreadId;
+ }
}
- internal static string UnsafeGetFolderPath(SpecialFolder folder)
+ internal static extern int CurrentProcessorNumber
{
- return InternalGetFolderPath(folder, SpecialFolderOption.None, suppressSecurityChecks: true);
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ get;
}
- private static string InternalGetFolderPath(SpecialFolder folder, SpecialFolderOption option, bool suppressSecurityChecks = false)
- {
-#if FEATURE_CORESYSTEM
- // This is currently customized for Windows Phone since CoreSystem doesn't support
- // SHGetFolderPath. The allowed folder values are based on the version of .NET CF WP7 was using.
- switch (folder)
- {
- case SpecialFolder.System:
- return SystemDirectory;
- case SpecialFolder.ApplicationData:
- case SpecialFolder.Favorites:
- case SpecialFolder.Programs:
- case SpecialFolder.StartMenu:
- case SpecialFolder.Startup:
- case SpecialFolder.Personal:
- throw new PlatformNotSupportedException();
- default:
- throw new PlatformNotSupportedException();
- }
-#else // FEATURE_CORESYSTEM
-
- StringBuilder sb = new StringBuilder(Path.MaxPath);
- int hresult = Win32Native.SHGetFolderPath(IntPtr.Zero, /* hwndOwner: [in] Reserved */
- ((int)folder | (int)option), /* nFolder: [in] CSIDL */
- IntPtr.Zero, /* hToken: [in] access token */
- Win32Native.SHGFP_TYPE_CURRENT, /* dwFlags: [in] retrieve current path */
- sb); /* pszPath: [out]resultant path */
- String s;
- if (hresult < 0)
- {
- switch (hresult)
- {
- default:
- // The previous incarnation threw away all errors. In order to limit
- // breaking changes, we will be permissive about these errors
- // instead of calling ThowExceptionForHR.
- //Runtime.InteropServices.Marshal.ThrowExceptionForHR(hresult);
- break;
- case __HResults.COR_E_PLATFORMNOTSUPPORTED:
- // This one error is the one we do want to throw.
+ // The upper bits of t_executionIdCache are the executionId. The lower bits of
+ // the t_executionIdCache are counting down to get it periodically refreshed.
+ // TODO: Consider flushing the executionIdCache on Wait operations or similar
+ // actions that are likely to result in changing the executing core
+ [ThreadStatic]
+ static int t_executionIdCache;
- throw new PlatformNotSupportedException();
- }
+ const int ExecutionIdCacheShift = 16;
+ const int ExecutionIdCacheCountDownMask = (1 << ExecutionIdCacheShift) - 1;
+ const int ExecutionIdRefreshRate = 5000;
- // SHGetFolderPath does not initialize the output buffer on error
- s = String.Empty;
- }
- else
- {
- s = sb.ToString();
- }
+ private static int RefreshExecutionId()
+ {
+ int executionId = CurrentProcessorNumber;
- if (!suppressSecurityChecks)
- {
- // On CoreCLR we can check with the host if we're not trying to use any special options.
- // Otherwise, we need to do a full demand since hosts aren't expecting to handle requests to
- // create special folders.
- if (option == SpecialFolderOption.None)
- {
- FileSecurityState state = new FileSecurityState(FileSecurityStateAccess.PathDiscovery, String.Empty, s);
- state.EnsureState();
- }
- else
- {
- new FileIOPermission(FileIOPermissionAccess.PathDiscovery, s).Demand();
- }
- }
- return s;
-#endif // FEATURE_CORESYSTEM
- }
+ // On Unix, CurrentProcessorNumber is implemented in terms of sched_getcpu, which
+ // doesn't exist on all platforms. On those it doesn't exist on, GetCurrentProcessorNumber
+ // returns -1. As a fallback in that case and to spread the threads across the buckets
+ // by default, we use the current managed thread ID as a proxy.
+ if (executionId < 0) executionId = Environment.CurrentManagedThreadId;
- public static string UserDomainName
- {
- get {
- new EnvironmentPermission(EnvironmentPermissionAccess.Read,"UserDomain").Demand();
-
- byte[] sid = new byte[1024];
- int sidLen = sid.Length;
- StringBuilder domainName = new StringBuilder(1024);
- uint domainNameLen = (uint) domainName.Capacity;
- int peUse;
-
- byte ret = Win32Native.GetUserNameEx(Win32Native.NameSamCompatible, domainName, ref domainNameLen);
- if (ret == 1) {
- string samName = domainName.ToString();
- int index = samName.IndexOf('\\');
- if( index != -1) {
- return samName.Substring(0, index);
- }
- }
- domainNameLen = (uint) domainName.Capacity;
-
- bool success = Win32Native.LookupAccountName(null, UserName, sid, ref sidLen, domainName, ref domainNameLen, out peUse);
- if (!success) {
- int errorCode = Marshal.GetLastWin32Error();
- throw new InvalidOperationException(Win32Native.GetMessage(errorCode));
- }
+ Debug.Assert(ExecutionIdRefreshRate <= ExecutionIdCacheCountDownMask);
- return domainName.ToString();
- }
- }
+ // Mask with Int32.MaxValue to ensure the execution Id is not negative
+ t_executionIdCache = ((executionId << ExecutionIdCacheShift) & Int32.MaxValue) | ExecutionIdRefreshRate;
- public enum SpecialFolderOption {
- None = 0,
- Create = Win32Native.CSIDL_FLAG_CREATE,
- DoNotVerify = Win32Native.CSIDL_FLAG_DONT_VERIFY,
- }
-
-//////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!////////
-//////!!!!!! Keep the following locations synchronized !!!!!!////////
-//////!!!!!! 1) ndp\clr\src\BCL\Microsoft\Win32\Win32Native.cs !!!!!!////////
-//////!!!!!! 2) ndp\clr\src\BCL\System\Environment.cs !!!!!!////////
-//////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!////////
- [ComVisible(true)]
- public enum SpecialFolder {
- //
- // Represents the file system directory that serves as a common repository for
- // application-specific data for the current, roaming user.
- // A roaming user works on more than one computer on a network. A roaming user's
- // profile is kept on a server on the network and is loaded onto a system when the
- // user logs on.
- //
- ApplicationData = Win32Native.CSIDL_APPDATA,
- //
- // Represents the file system directory that serves as a common repository for application-specific data that
- // is used by all users.
- //
- CommonApplicationData = Win32Native.CSIDL_COMMON_APPDATA,
- //
- // Represents the file system directory that serves as a common repository for application specific data that
- // is used by the current, non-roaming user.
- //
- LocalApplicationData = Win32Native.CSIDL_LOCAL_APPDATA,
- //
- // Represents the file system directory that serves as a common repository for Internet
- // cookies.
- //
- Cookies = Win32Native.CSIDL_COOKIES,
- Desktop = Win32Native.CSIDL_DESKTOP,
- //
- // Represents the file system directory that serves as a common repository for the user's
- // favorite items.
- //
- Favorites = Win32Native.CSIDL_FAVORITES,
- //
- // Represents the file system directory that serves as a common repository for Internet
- // history items.
- //
- History = Win32Native.CSIDL_HISTORY,
- //
- // Represents the file system directory that serves as a common repository for temporary
- // Internet files.
- //
- InternetCache = Win32Native.CSIDL_INTERNET_CACHE,
- //
- // Represents the file system directory that contains
- // the user's program groups.
- //
- Programs = Win32Native.CSIDL_PROGRAMS,
- MyComputer = Win32Native.CSIDL_DRIVES,
- MyMusic = Win32Native.CSIDL_MYMUSIC,
- MyPictures = Win32Native.CSIDL_MYPICTURES,
- // "My Videos" folder
- MyVideos = Win32Native.CSIDL_MYVIDEO,
- //
- // Represents the file system directory that contains the user's most recently used
- // documents.
- //
- Recent = Win32Native.CSIDL_RECENT,
- //
- // Represents the file system directory that contains Send To menu items.
- //
- SendTo = Win32Native.CSIDL_SENDTO,
- //
- // Represents the file system directory that contains the Start menu items.
- //
- StartMenu = Win32Native.CSIDL_STARTMENU,
- //
- // Represents the file system directory that corresponds to the user's Startup program group. The system
- // starts these programs whenever any user logs on to Windows NT, or
- // starts Windows 95 or Windows 98.
- //
- Startup = Win32Native.CSIDL_STARTUP,
- //
- // System directory.
- //
- System = Win32Native.CSIDL_SYSTEM,
- //
- // Represents the file system directory that serves as a common repository for document
- // templates.
- //
- Templates = Win32Native.CSIDL_TEMPLATES,
- //
- // Represents the file system directory used to physically store file objects on the desktop.
- // This should not be confused with the desktop folder itself, which is
- // a virtual folder.
- //
- DesktopDirectory = Win32Native.CSIDL_DESKTOPDIRECTORY,
- //
- // Represents the file system directory that serves as a common repository for documents.
- //
- Personal = Win32Native.CSIDL_PERSONAL,
- //
- // "MyDocuments" is a better name than "Personal"
- //
- MyDocuments = Win32Native.CSIDL_PERSONAL,
- //
- // Represents the program files folder.
- //
- ProgramFiles = Win32Native.CSIDL_PROGRAM_FILES,
- //
- // Represents the folder for components that are shared across applications.
- //
- CommonProgramFiles = Win32Native.CSIDL_PROGRAM_FILES_COMMON,
+ return executionId;
}
- public static int CurrentManagedThreadId
+ // Cached processor number used as a hint for which per-core stack to access. It is periodically
+ // refreshed to trail the actual thread core affinity.
+ internal static int CurrentExecutionId
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
- return Thread.CurrentThread.ManagedThreadId;
+ int executionIdCache = t_executionIdCache--;
+ if ((executionIdCache & ExecutionIdCacheCountDownMask) == 0)
+ return RefreshExecutionId();
+ return (executionIdCache >> ExecutionIdCacheShift);
}
}
- internal static extern int CurrentProcessorNumber
- {
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- get;
- }
-
public static string GetEnvironmentVariable(string variable)
{
if (variable == null)
@@ -1155,7 +733,7 @@ namespace System {
return GetEnvironmentVariableCore(variable);
}
- public static string GetEnvironmentVariable(string variable, EnvironmentVariableTarget target)
+ internal static string GetEnvironmentVariable(string variable, EnvironmentVariableTarget target)
{
if (variable == null)
{
@@ -1173,7 +751,7 @@ namespace System {
return GetEnvironmentVariablesCore();
}
- public static IDictionary GetEnvironmentVariables(EnvironmentVariableTarget target)
+ internal static IDictionary GetEnvironmentVariables(EnvironmentVariableTarget target)
{
ValidateTarget(target);
@@ -1188,7 +766,7 @@ namespace System {
SetEnvironmentVariableCore(variable, value);
}
- public static void SetEnvironmentVariable(string variable, string value, EnvironmentVariableTarget target)
+ internal static void SetEnvironmentVariable(string variable, string value, EnvironmentVariableTarget target)
{
ValidateVariableAndValue(variable, ref value);
ValidateTarget(target);
diff --git a/src/mscorlib/src/System/EventArgs.cs b/src/mscorlib/src/System/EventArgs.cs
index 349de857d8..c0356613de 100644
--- a/src/mscorlib/src/System/EventArgs.cs
+++ b/src/mscorlib/src/System/EventArgs.cs
@@ -2,16 +2,17 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
- using System;
+using System;
+
+namespace System
+{
// The base class for all event classes.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class EventArgs {
+ public class EventArgs
+ {
public static readonly EventArgs Empty = new EventArgs();
-
- public EventArgs()
+
+ public EventArgs()
{
}
}
diff --git a/src/mscorlib/src/System/EventHandler.cs b/src/mscorlib/src/System/EventHandler.cs
index 517e1f7c26..e6923cf637 100644
--- a/src/mscorlib/src/System/EventHandler.cs
+++ b/src/mscorlib/src/System/EventHandler.cs
@@ -2,10 +2,11 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
+using System;
+
+namespace System
+{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate void EventHandler(Object sender, EventArgs e);
[Serializable]
diff --git a/src/mscorlib/src/System/Exception.cs b/src/mscorlib/src/System/Exception.cs
index a8ee328f1c..a166c1ab0a 100644
--- a/src/mscorlib/src/System/Exception.cs
+++ b/src/mscorlib/src/System/Exception.cs
@@ -18,7 +18,6 @@ namespace System {
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Diagnostics;
- using System.Security.Permissions;
using System.Security;
using System.IO;
using System.Text;
@@ -27,11 +26,8 @@ namespace System {
using System.Globalization;
using System.Diagnostics.Contracts;
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_Exception))]
[Serializable]
- [ComVisible(true)]
- public class Exception : ISerializable, _Exception
+ public class Exception : ISerializable
{
private void Init()
{
@@ -48,9 +44,6 @@ namespace System {
// Initialize the watson bucketing IP
_ipForWatsonBuckets = UIntPtr.Zero;
-#if FEATURE_SERIALIZATION
- _safeSerializationManager = new SafeSerializationManager();
-#endif // FEATURE_SERIALIZATION
}
public Exception() {
@@ -100,9 +93,6 @@ namespace System {
// get null.
_watsonBuckets = (Object)info.GetValueNoThrow("WatsonBuckets", typeof(byte[]));
-#if FEATURE_SERIALIZATION
- _safeSerializationManager = info.GetValueNoThrow("SafeSerializationManager", typeof(SafeSerializationManager)) as SafeSerializationManager;
-#endif // FEATURE_SERIALIZATION
if (_className == null || HResult==0)
throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState"));
@@ -493,19 +483,11 @@ namespace System {
return result;
}
-#if FEATURE_SERIALIZATION
- protected event EventHandler<SafeSerializationEventArgs> SerializeObjectState
- {
- add { _safeSerializationManager.SerializeObjectState += value; }
- remove { _safeSerializationManager.SerializeObjectState -= value; }
- }
-#else
protected event EventHandler<SafeSerializationEventArgs> SerializeObjectState
{
add { throw new PlatformNotSupportedException();}
remove { throw new PlatformNotSupportedException();}
}
-#endif // FEATURE_SERIALIZATION
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
@@ -549,50 +531,6 @@ namespace System {
// Serialize the Watson bucket details as well
info.AddValue("WatsonBuckets", _watsonBuckets, typeof(byte[]));
-#if FEATURE_SERIALIZATION
- if (_safeSerializationManager != null && _safeSerializationManager.IsActive)
- {
- info.AddValue("SafeSerializationManager", _safeSerializationManager, typeof(SafeSerializationManager));
-
- // User classes derived from Exception must have a valid _safeSerializationManager.
- // Exceptions defined in mscorlib don't use this field might not have it initalized (since they are
- // often created in the VM with AllocateObject instead if the managed construtor)
- // If you are adding code to use a SafeSerializationManager from an mscorlib exception, update
- // this assert to ensure that it fails when that exception's _safeSerializationManager is NULL
- Debug.Assert(((_safeSerializationManager != null) || (this.GetType().Assembly == typeof(object).Assembly)),
- "User defined exceptions must have a valid _safeSerializationManager");
-
- // Handle serializing any transparent or partial trust subclass data
- _safeSerializationManager.CompleteSerialization(this, info, context);
- }
-#endif // FEATURE_SERIALIZATION
- }
-
- // This is used by remoting to preserve the server side stack trace
- // by appending it to the message ... before the exception is rethrown
- // at the client call site.
- internal Exception PrepForRemoting()
- {
- String tmp = null;
-
- if (_remoteStackIndex == 0)
- {
- tmp = Environment.NewLine+ "Server stack trace: " + Environment.NewLine
- + StackTrace
- + Environment.NewLine + Environment.NewLine
- + "Exception rethrown at ["+_remoteStackIndex+"]: " + Environment.NewLine;
- }
- else
- {
- tmp = StackTrace
- + Environment.NewLine + Environment.NewLine
- + "Exception rethrown at ["+_remoteStackIndex+"]: " + Environment.NewLine;
- }
-
- _remoteStackTraceString = tmp;
- _remoteStackIndex++;
-
- return this;
}
// This method will clear the _stackTrace of the exception object upon deserialization
@@ -610,16 +548,6 @@ namespace System {
// Hence, we set it to zero when deserialization takes place.
_ipForWatsonBuckets = UIntPtr.Zero;
-#if FEATURE_SERIALIZATION
- if (_safeSerializationManager == null)
- {
- _safeSerializationManager = new SafeSerializationManager();
- }
- else
- {
- _safeSerializationManager.CompleteDeserialization(this);
- }
-#endif // FEATURE_SERIALIZATION
}
// This is used by the runtime when re-throwing a managed exception. It will
@@ -642,11 +570,9 @@ namespace System {
}
else
#else // FEATURE_APPX
-#if FEATURE_CORESYSTEM
// Preinitialize _source on CoreSystem as well. The legacy behavior is not ideal and
// we keep it for back compat but we can afford to make the change on the Phone.
string source = Source;
-#endif // FEATURE_CORESYSTEM
#endif // FEATURE_APPX
{
// Call the StackTrace getter in classic for compat.
@@ -662,7 +588,6 @@ namespace System {
_stackTraceString = null;
}
-#if FEATURE_EXCEPTIONDISPATCHINFO
// This is the object against which a lock will be taken
// when attempt to restore the EDI. Since its static, its possible
@@ -786,7 +711,6 @@ namespace System {
}
}
}
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
private String _className; //Needed for serialization.
private MethodBase _exceptionMethod; //Needed for serialization.
@@ -834,10 +758,6 @@ namespace System {
[OptionalField]
private UIntPtr _ipForWatsonBuckets; // Used to persist the IP for Watson Bucketing
-#if FEATURE_SERIALIZATION
- [OptionalField(VersionAdded = 4)]
- private SafeSerializationManager _safeSerializationManager;
-#endif // FEATURE_SERIALIZATION
// See src\inc\corexcep.h's EXCEPTION_COMPLUS definition:
private const int _COMPlusExceptionCode = unchecked((int)0xe0434352); // Win32 exception code for COM+ exceptions
@@ -846,19 +766,6 @@ namespace System {
// and create a corresponding CrossAppDomainMarshaledException
internal virtual String InternalToString()
{
- try
- {
-#pragma warning disable 618
- SecurityPermission sp= new SecurityPermission(SecurityPermissionFlag.ControlEvidence | SecurityPermissionFlag.ControlPolicy);
-#pragma warning restore 618
- sp.Assert();
- }
- catch
- {
- //under normal conditions there should be no exceptions
- //however if something wrong happens we still can call the usual ToString
- }
-
// Get the current stack trace string.
return ToString(true, true);
}
@@ -917,9 +824,6 @@ namespace System {
// The Message field is set to the ToString() output of the original exception.
//--------------------------------------------------------------------------
-#if FEATURE_SERIALIZATION
- [Serializable]
-#endif
internal sealed class CrossAppDomainMarshaledException : SystemException
{
public CrossAppDomainMarshaledException(String message, int errorCode)
diff --git a/src/mscorlib/src/System/ExecutionEngineException.cs b/src/mscorlib/src/System/ExecutionEngineException.cs
index 5b2592cca9..bebfd493a0 100644
--- a/src/mscorlib/src/System/ExecutionEngineException.cs
+++ b/src/mscorlib/src/System/ExecutionEngineException.cs
@@ -15,30 +15,33 @@
**
=============================================================================*/
-namespace System {
+using System;
+using System.Runtime.Serialization;
- using System;
- using System.Runtime.Serialization;
+namespace System
+{
[Obsolete("This type previously indicated an unspecified fatal error in the runtime. The runtime no longer raises this exception so this type is obsolete.")]
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
- public sealed class ExecutionEngineException : SystemException {
- public ExecutionEngineException()
- : base(Environment.GetResourceString("Arg_ExecutionEngineException")) {
- SetErrorCode(__HResults.COR_E_EXECUTIONENGINE);
+ public sealed class ExecutionEngineException : SystemException
+ {
+ public ExecutionEngineException()
+ : base(SR.Arg_ExecutionEngineException)
+ {
+ HResult = __HResults.COR_E_EXECUTIONENGINE;
}
-
- public ExecutionEngineException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_EXECUTIONENGINE);
- }
-
- public ExecutionEngineException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_EXECUTIONENGINE);
+
+ public ExecutionEngineException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_EXECUTIONENGINE;
}
- internal ExecutionEngineException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public ExecutionEngineException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_EXECUTIONENGINE;
}
+
+ internal ExecutionEngineException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/FieldAccessException.cs b/src/mscorlib/src/System/FieldAccessException.cs
index fbc3b1f592..ac62c0fcac 100644
--- a/src/mscorlib/src/System/FieldAccessException.cs
+++ b/src/mscorlib/src/System/FieldAccessException.cs
@@ -9,31 +9,31 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public class FieldAccessException : MemberAccessException {
- public FieldAccessException()
- : base(Environment.GetResourceString("Arg_FieldAccessException")) {
- SetErrorCode(__HResults.COR_E_FIELDACCESS);
- }
-
- public FieldAccessException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_FIELDACCESS);
+ public class FieldAccessException : MemberAccessException
+ {
+ public FieldAccessException()
+ : base(SR.Arg_FieldAccessException)
+ {
+ HResult = __HResults.COR_E_FIELDACCESS;
}
-
- public FieldAccessException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.COR_E_FIELDACCESS);
+
+ public FieldAccessException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_FIELDACCESS;
}
- protected FieldAccessException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public FieldAccessException(String message, Exception inner)
+ : base(message, inner)
+ {
+ HResult = __HResults.COR_E_FIELDACCESS;
}
+ protected FieldAccessException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/FlagsAttribute.cs b/src/mscorlib/src/System/FlagsAttribute.cs
index cb955cf3a1..5f8c108ae4 100644
--- a/src/mscorlib/src/System/FlagsAttribute.cs
+++ b/src/mscorlib/src/System/FlagsAttribute.cs
@@ -4,16 +4,15 @@
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
-namespace System {
-
- using System;
+
+namespace System
+{
// Custom attribute to indicate that the enum
// should be treated as a bitfield (or set of flags).
// An IDE may use this information to provide a richer
// development experience.
[Serializable]
[AttributeUsage(AttributeTargets.Enum, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public class FlagsAttribute : Attribute
{
public FlagsAttribute()
diff --git a/src/mscorlib/src/System/FormatException.cs b/src/mscorlib/src/System/FormatException.cs
index 2e1c8a9cd4..c5758e11cd 100644
--- a/src/mscorlib/src/System/FormatException.cs
+++ b/src/mscorlib/src/System/FormatException.cs
@@ -10,30 +10,32 @@
**
**
===========================================================*/
-namespace System {
-
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public class FormatException : SystemException {
- public FormatException()
- : base(Environment.GetResourceString("Arg_FormatException")) {
- SetErrorCode(__HResults.COR_E_FORMAT);
- }
-
- public FormatException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_FORMAT);
+ public class FormatException : SystemException
+ {
+ public FormatException()
+ : base(SR.Arg_FormatException)
+ {
+ HResult = __HResults.COR_E_FORMAT;
}
-
- public FormatException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_FORMAT);
+
+ public FormatException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_FORMAT;
}
- protected FormatException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public FormatException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_FORMAT;
}
+ protected FormatException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/FormattableString.cs b/src/mscorlib/src/System/FormattableString.cs
index 294b2c1846..6369363b5d 100644
--- a/src/mscorlib/src/System/FormattableString.cs
+++ b/src/mscorlib/src/System/FormattableString.cs
@@ -4,13 +4,13 @@
/*============================================================
**
-** Class: FormattableString
**
**
** Purpose: implementation of the FormattableString
** class.
**
===========================================================*/
+
namespace System
{
/// <summary>
diff --git a/src/mscorlib/src/System/GC.cs b/src/mscorlib/src/System/GC.cs
index e338e44526..fd09ef7984 100644
--- a/src/mscorlib/src/System/GC.cs
+++ b/src/mscorlib/src/System/GC.cs
@@ -16,7 +16,6 @@ namespace System {
//This class only static members and doesn't require the serializable keyword.
using System;
- using System.Security.Permissions;
using System.Reflection;
using System.Security;
using System.Threading;
@@ -98,7 +97,6 @@ namespace System {
private static extern int GetMaxGeneration();
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern int _CollectionCount (int generation, int getSpecialGCCount);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -206,7 +204,6 @@ namespace System {
_Collect(generation, iInternalModes);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static int CollectionCount (int generation)
{
if (generation<0)
@@ -216,18 +213,6 @@ namespace System {
Contract.EndContractBlock();
return _CollectionCount(generation, 0);
}
-
- // pass in true to get the BGC or FGC count.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal static int CollectionCount (int generation, bool getSpecialGCCount)
- {
- if (generation<0)
- {
- throw new ArgumentOutOfRangeException(nameof(generation), Environment.GetResourceString("ArgumentOutOfRange_GenericPositive"));
- }
- Contract.EndContractBlock();
- return _CollectionCount(generation, (getSpecialGCCount ? 1 : 0));
- }
// This method DOES NOT DO ANYTHING in and of itself. It's used to
// prevent a finalizable object from losing any outstanding references
@@ -265,7 +250,6 @@ namespace System {
// If we insert a call to GC.KeepAlive(this) at the end of Problem(), then
// Foo doesn't get finalized and the stream stays open.
[MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static void KeepAlive(Object obj)
{
}
@@ -296,10 +280,8 @@ namespace System {
// Indicates that the system should not call the Finalize() method on
// an object that would normally require this call.
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern void _SuppressFinalize(Object o);
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static void SuppressFinalize(Object obj) {
if (obj == null)
throw new ArgumentNullException(nameof(obj));
diff --git a/src/mscorlib/src/System/Globalization/Calendar.cs b/src/mscorlib/src/System/Globalization/Calendar.cs
index d0460386b6..1ff795ddc5 100644
--- a/src/mscorlib/src/System/Globalization/Calendar.cs
+++ b/src/mscorlib/src/System/Globalization/Calendar.cs
@@ -31,7 +31,6 @@ namespace System.Globalization {
// since most of the calendars (or all?) have the same way of calcuating hour/minute/second.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public abstract class Calendar : ICloneable
{
@@ -98,7 +97,6 @@ namespace System.Globalization {
// The minimum supported DateTime range for the calendar.
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual DateTime MinSupportedDateTime
{
get
@@ -109,7 +107,6 @@ namespace System.Globalization {
// The maximum supported DateTime range for the calendar.
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual DateTime MaxSupportedDateTime
{
get
@@ -145,7 +142,6 @@ namespace System.Globalization {
// Returns the type of the calendar.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual CalendarAlgorithmType AlgorithmType
{
get
@@ -161,7 +157,6 @@ namespace System.Globalization {
// Detect if the object is readonly.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public bool IsReadOnly
{
get { return (m_isReadOnly); }
@@ -174,7 +169,6 @@ namespace System.Globalization {
// Is the implementation of ICloneable.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual Object Clone()
{
object o = MemberwiseClone();
@@ -190,7 +184,6 @@ namespace System.Globalization {
// readonly.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public static Calendar ReadOnly(Calendar calendar)
{
if (calendar == null) { throw new ArgumentNullException(nameof(calendar)); }
@@ -709,7 +702,6 @@ namespace System.Globalization {
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetLeapMonth(int year)
{
return (GetLeapMonth(year, CurrentEra));
@@ -719,7 +711,6 @@ namespace System.Globalization {
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetLeapMonth(int year, int era)
{
if (!IsLeapYear(year, era))
diff --git a/src/mscorlib/src/System/Globalization/CalendarAlgorithmType.cs b/src/mscorlib/src/System/Globalization/CalendarAlgorithmType.cs
index 4bf636656f..33b5035a8d 100644
--- a/src/mscorlib/src/System/Globalization/CalendarAlgorithmType.cs
+++ b/src/mscorlib/src/System/Globalization/CalendarAlgorithmType.cs
@@ -5,7 +5,6 @@
namespace System.Globalization {
using System;
-[System.Runtime.InteropServices.ComVisible(true)]
public enum CalendarAlgorithmType {
Unknown = 0, // This is the default value to return in the Calendar base class.
SolarCalendar = 1, // Solar-base calendar, such as GregorianCalendar, jaoaneseCalendar, JulianCalendar, etc.
diff --git a/src/mscorlib/src/System/Globalization/CalendarData.cs b/src/mscorlib/src/System/Globalization/CalendarData.cs
index 6f583fbcbc..d66331b31d 100644
--- a/src/mscorlib/src/System/Globalization/CalendarData.cs
+++ b/src/mscorlib/src/System/Globalization/CalendarData.cs
@@ -400,41 +400,6 @@ namespace System.Globalization
return "en-US";
}
- internal void FixupWin7MonthDaySemicolonBug()
- {
- int unescapedCharacterIndex = FindUnescapedCharacter(sMonthDay, ';');
- if (unescapedCharacterIndex > 0)
- {
- sMonthDay = sMonthDay.Substring(0, unescapedCharacterIndex);
- }
- }
- private static int FindUnescapedCharacter(string s, char charToFind)
- {
- bool inComment = false;
- int length = s.Length;
- for (int i = 0; i < length; i++)
- {
- char c = s[i];
-
- switch (c)
- {
- case '\'':
- inComment = !inComment;
- break;
- case '\\':
- i++; // escape sequence -- skip next character
- break;
- default:
- if (!inComment && charToFind == c)
- {
- return i;
- }
- break;
- }
- }
- return -1;
- }
-
// Get native two digit year max
[MethodImplAttribute(MethodImplOptions.InternalCall)]
diff --git a/src/mscorlib/src/System/Globalization/CalendarWeekRule.cs b/src/mscorlib/src/System/Globalization/CalendarWeekRule.cs
index 578b5672fc..fa2a6429f1 100644
--- a/src/mscorlib/src/System/Globalization/CalendarWeekRule.cs
+++ b/src/mscorlib/src/System/Globalization/CalendarWeekRule.cs
@@ -7,7 +7,6 @@ namespace System.Globalization {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum CalendarWeekRule
{
diff --git a/src/mscorlib/src/System/Globalization/ChineseLunisolarCalendar.cs b/src/mscorlib/src/System/Globalization/ChineseLunisolarCalendar.cs
index 6479152e09..374ed0dcfa 100644
--- a/src/mscorlib/src/System/Globalization/ChineseLunisolarCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/ChineseLunisolarCalendar.cs
@@ -44,7 +44,6 @@ namespace System.Globalization {
internal static DateTime minDate = new DateTime(MIN_GREGORIAN_YEAR, MIN_GREGORIAN_MONTH, MIN_GREGORIAN_DAY);
internal static DateTime maxDate = new DateTime((new DateTime(MAX_GREGORIAN_YEAR, MAX_GREGORIAN_MONTH, MAX_GREGORIAN_DAY, 23, 59, 59, 999)).Ticks + 9999);
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime {
get
{
@@ -53,7 +52,6 @@ namespace System.Globalization {
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime {
get
{
@@ -371,7 +369,6 @@ namespace System.Globalization {
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetEra(DateTime time) {
CheckTicksRange(time.Ticks);
return (ChineseEra);
@@ -391,7 +388,6 @@ namespace System.Globalization {
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override int[] Eras {
get {
return (new int[] {ChineseEra});
diff --git a/src/mscorlib/src/System/Globalization/CompareInfo.cs b/src/mscorlib/src/System/Globalization/CompareInfo.cs
index dcf1f32e4a..6c2230b66b 100644
--- a/src/mscorlib/src/System/Globalization/CompareInfo.cs
+++ b/src/mscorlib/src/System/Globalization/CompareInfo.cs
@@ -29,7 +29,6 @@ namespace System.Globalization {
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading;
- using System.Security.Permissions;
using Microsoft.Win32;
using System.Security;
using System.Diagnostics;
@@ -45,7 +44,6 @@ namespace System.Globalization {
[Serializable]
[Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum CompareOptions
{
None = 0x00000000,
@@ -66,7 +64,6 @@ namespace System.Globalization {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public partial class CompareInfo : IDeserializationCallback
{
// Mask used to check if IndexOf()/LastIndexOf()/IsPrefix()/IsPostfix() has the right flags.
@@ -217,12 +214,10 @@ namespace System.Globalization {
return CultureInfo.GetCultureInfo(name).CompareInfo;
}
- [System.Runtime.InteropServices.ComVisible(false)]
public static bool IsSortable(char ch) {
return(IsSortable(ch.ToString()));
}
- [System.Runtime.InteropServices.ComVisible(false)]
public static bool IsSortable(String text) {
if (text == null) {
// A null param is invalid here.
@@ -316,7 +311,6 @@ namespace System.Globalization {
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual String Name
{
get
diff --git a/src/mscorlib/src/System/Globalization/CultureData.cs b/src/mscorlib/src/System/Globalization/CultureData.cs
index 0bcb796152..a93b7d43bb 100644
--- a/src/mscorlib/src/System/Globalization/CultureData.cs
+++ b/src/mscorlib/src/System/Globalization/CultureData.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
@@ -1102,15 +1102,6 @@ namespace System.Globalization
}
}
- // (user can override) country code (RegionInfo)
- internal int ICOUNTRY
- {
- get
- {
- return DoGetLocaleInfoInt(LOCALE_ICOUNTRY);
- }
- }
-
// GeoId
internal int IGEOID
{
@@ -1214,15 +1205,6 @@ namespace System.Globalization
}
}
- // Default Country
- private int IDEFAULTCOUNTRY
- {
- get
- {
- return DoGetLocaleInfoInt(LOCALE_IDEFAULTCOUNTRY);
- }
- }
-
// Console fallback name (ie: locale to use for console apps for unicode-only locales)
internal int IINPUTLANGUAGEHANDLE
{
@@ -1262,26 +1244,6 @@ namespace System.Globalization
}
}
- /////////////
- // Numbers //
- ////////////
-
- // internal String sPositiveSign ; // (user can override) positive sign
- // internal String sNegativeSign ; // (user can override) negative sign
- // internal String[] saNativeDigits ; // (user can override) native characters for digits 0-9
- // internal int iDigitSubstitution ; // (user can override) Digit substitution 0=context, 1=none/arabic, 2=Native/national (2 seems to be unused) (Windows Only)
- // internal int iDigits ; // (user can override) number of fractional digits
- // internal int iNegativeNumber ; // (user can override) negative number format
-
- // Leading zeroes
- private bool ILEADINGZEROS
- {
- get
- {
- return (DoGetLocaleInfoInt(LOCALE_ILZERO) == 1);
- }
- }
-
// (user can override) grouping of digits
internal int[] WAGROUPING
@@ -1506,15 +1468,6 @@ namespace System.Globalization
}
}
- // Paper size
- private int IPAPERSIZE
- {
- get
- {
- return DoGetLocaleInfoInt(LOCALE_IPAPERSIZE);
- }
- }
-
////////////////////////////
// Calendar/Time (Gregorian) //
////////////////////////////
@@ -1712,20 +1665,6 @@ namespace System.Globalization
return index;
}
- // time duration format
- internal String[] SADURATION
- {
- get
- {
- if (this.saDurationFormats == null)
- {
- String durationFormat = DoGetLocaleInfo(LOCALE_SDURATION);
- this.saDurationFormats = new String[] { ReescapeWin32String(durationFormat) };
- }
- return this.saDurationFormats;
- }
- }
-
// (user can override) first day of week
internal int IFIRSTDAYOFWEEK
{
@@ -1944,11 +1883,6 @@ namespace System.Globalization
return calendarData;
}
- internal int CurrentEra(int calendarId)
- {
- return GetCalendar(calendarId).iCurrentEra;
- }
-
///////////////////
// Text Information //
///////////////////
@@ -2054,48 +1988,6 @@ namespace System.Globalization
}
}
- // Typical Scripts for this locale (latn;cyrl; etc)
-
- private String SSCRIPTS
- {
- get
- {
- if (this.sScripts == null)
- {
- this.sScripts = DoGetLocaleInfo(LOCALE_SSCRIPTS);
- }
- return this.sScripts;
- }
- }
-
- private String SOPENTYPELANGUAGETAG
- {
- get
- {
- return DoGetLocaleInfo(LOCALE_SOPENTYPELANGUAGETAG);
- }
- }
-
- private String FONTSIGNATURE
- {
- get
- {
- if (this.fontSignature == null)
- {
- this.fontSignature = DoGetLocaleInfo(LOCALE_FONTSIGNATURE);
- }
- return this.fontSignature;
- }
- }
-
- private String SKEYBOARDSTOINSTALL
- {
- get
- {
- return DoGetLocaleInfo(LOCALE_SKEYBOARDSTOINSTALL);
- }
- }
-
internal int IDEFAULTANSICODEPAGE // default ansi code page ID (ACP)
{
diff --git a/src/mscorlib/src/System/Globalization/CultureInfo.cs b/src/mscorlib/src/System/Globalization/CultureInfo.cs
index 9f306c3c99..ba61c146f6 100644
--- a/src/mscorlib/src/System/Globalization/CultureInfo.cs
+++ b/src/mscorlib/src/System/Globalization/CultureInfo.cs
@@ -36,7 +36,6 @@ namespace System.Globalization {
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
- using System.Security.Permissions;
using System.Reflection;
using Microsoft.Win32;
using System.Diagnostics;
@@ -44,7 +43,6 @@ namespace System.Globalization {
using System.Resources;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public partial class CultureInfo : ICloneable, IFormatProvider {
//--------------------------------------------------------------------//
// Internal Information //
@@ -82,10 +80,6 @@ namespace System.Globalization {
[NonSerialized]internal CultureData m_cultureData;
[NonSerialized]internal bool m_isInherited;
-#if FEATURE_LEAK_CULTURE_INFO
- [NonSerialized]private bool m_isSafeCrossDomain;
- [NonSerialized]private int m_createdDomainID;
-#endif // !FEATURE_LEAK_CULTURE_INFO
[NonSerialized]private CultureInfo m_consoleFallbackCulture;
// Names are confusing. Here are 3 names we have:
@@ -370,25 +364,6 @@ namespace System.Globalization {
}
#endif // FEATURE_USE_LCID
- //
- // CheckDomainSafetyObject throw if the object is customized object which cannot be attached to
- // other object (like CultureInfo or DateTimeFormatInfo).
- //
-
- internal static void CheckDomainSafetyObject(Object obj, Object container)
- {
- if (obj.GetType().Assembly != typeof(System.Globalization.CultureInfo).Assembly) {
-
- throw new InvalidOperationException(
- String.Format(
- CultureInfo.CurrentCulture,
- Environment.GetResourceString("InvalidOperation_SubclassedObject"),
- obj.GetType(),
- container.GetType()));
- }
- Contract.EndContractBlock();
- }
-
#region Serialization
// We need to store the override from the culture data record.
private bool m_useUserOverride;
@@ -421,21 +396,6 @@ namespace System.Globalization {
}
#endif
m_isInherited = (this.GetType() != typeof(System.Globalization.CultureInfo));
-
- // in case we have non customized CultureInfo object we shouldn't allow any customized object
- // to be attached to it for cross app domain safety.
- if (this.GetType().Assembly == typeof(System.Globalization.CultureInfo).Assembly)
- {
- if (textInfo != null)
- {
- CheckDomainSafetyObject(textInfo, this);
- }
-
- if (compareInfo != null)
- {
- CheckDomainSafetyObject(compareInfo, this);
- }
- }
}
#if FEATURE_USE_LCID
@@ -470,57 +430,8 @@ namespace System.Globalization {
this.cultureID = this.m_cultureData.ILANGUAGE;
#endif
}
-#endregion Serialization
-
-#if FEATURE_LEAK_CULTURE_INFO
- // Is it safe to send this CultureInfo as an instance member of a Thread cross AppDomain boundaries?
- // For Silverlight, the answer is always no.
- internal bool IsSafeCrossDomain {
- get {
- Debug.Assert(m_createdDomainID != 0, "[CultureInfo.IsSafeCrossDomain] m_createdDomainID != 0");
- return m_isSafeCrossDomain;
- }
- }
-
- internal int CreatedDomainID {
- get {
- Debug.Assert(m_createdDomainID != 0, "[CultureInfo.CreatedDomain] m_createdDomainID != 0");
- return m_createdDomainID;
- }
- }
-
- internal void StartCrossDomainTracking() {
-
- // If we have decided about cross domain safety of this instance, we are done
- if (m_createdDomainID != 0)
- return;
-
- // If FEATURE_LEAK_CULTURE_INFO isn't enabled, we never want to pass
- // CultureInfo as an instance member of a Thread.
- if (CanSendCrossDomain())
- {
- m_isSafeCrossDomain = true;
- }
-
- // m_createdDomainID has to be assigned last. We use it to signal that we have
- // completed the check.
- System.Threading.Thread.MemoryBarrier();
- m_createdDomainID = Thread.GetDomainID();
- }
-#endif // FEATURE_LEAK_CULTURE_INFO
- // Is it safe to pass the CultureInfo cross AppDomain boundaries, not necessarily as an instance
- // member of Thread. This is different from IsSafeCrossDomain, which implies passing the CultureInfo
- // as a Thread instance member.
- internal bool CanSendCrossDomain()
- {
- bool isSafe = false;
- if (this.GetType() == typeof(System.Globalization.CultureInfo))
- {
- isSafe = true;
- }
- return isSafe;
- }
+#endregion Serialization
// Constructor called by SQL Server's special munged culture - creates a culture with
// a TextInfo and CompareInfo that come from a supplied alternate source. This object
@@ -949,7 +860,6 @@ namespace System.Globalization {
//
////////////////////////////////////////////////////////////////////////
#if FEATURE_USE_LCID
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual int KeyboardLayoutId
{
get
@@ -1010,7 +920,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public String IetfLanguageTag
{
get
@@ -1258,7 +1167,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public CultureTypes CultureTypes
{
get
@@ -1473,7 +1381,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public CultureInfo GetConsoleFallbackUICulture()
{
Contract.Ensures(Contract.Result<CultureInfo>() != null);
@@ -1885,9 +1792,6 @@ namespace System.Globalization {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern int nativeGetLocaleInfoExInt(String localeName, uint field);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern bool nativeSetThreadLocale(String localeName);
-
private static String GetDefaultLocaleName(int localeType)
{
Debug.Assert(localeType == LOCALE_USER_DEFAULT || localeType == LOCALE_SYSTEM_DEFAULT, "[CultureInfo.GetDefaultLocaleName] localeType must be LOCALE_USER_DEFAULT or LOCALE_SYSTEM_DEFAULT");
diff --git a/src/mscorlib/src/System/Globalization/CultureNotFoundException.cs b/src/mscorlib/src/System/Globalization/CultureNotFoundException.cs
index 17c0b43f9c..d4ab700a16 100644
--- a/src/mscorlib/src/System/Globalization/CultureNotFoundException.cs
+++ b/src/mscorlib/src/System/Globalization/CultureNotFoundException.cs
@@ -10,7 +10,6 @@ namespace System.Globalization {
using System.Threading;
using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public partial class CultureNotFoundException : ArgumentException, ISerializable
{
diff --git a/src/mscorlib/src/System/Globalization/CultureTypes.cs b/src/mscorlib/src/System/Globalization/CultureTypes.cs
index d506d50c9d..b19ab86bb1 100644
--- a/src/mscorlib/src/System/Globalization/CultureTypes.cs
+++ b/src/mscorlib/src/System/Globalization/CultureTypes.cs
@@ -11,7 +11,6 @@ namespace System.Globalization {
[Serializable]
[Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum CultureTypes
{
NeutralCultures = 0x0001, // Neutral cultures are cultures like "en", "de", "zh", etc, for enumeration this includes ALL neutrals regardless of other flags
diff --git a/src/mscorlib/src/System/Globalization/DateTimeFormat.cs b/src/mscorlib/src/System/Globalization/DateTimeFormat.cs
index c6e0591a74..1ace207952 100644
--- a/src/mscorlib/src/System/Globalization/DateTimeFormat.cs
+++ b/src/mscorlib/src/System/Globalization/DateTimeFormat.cs
@@ -1124,14 +1124,6 @@ namespace System {
// local DateTime with a format that will be interpreted as UTC.
internal static void InvalidFormatForLocal(String format, DateTime dateTime) {
}
-
- // This is an MDA for cases when the user is using a local format with
- // a Utc DateTime.
- internal static void InvalidFormatForUtc(String format, DateTime dateTime) {
-#if MDA_SUPPORTED
- Mda.DateTimeInvalidLocalFormat();
-#endif
- }
}
diff --git a/src/mscorlib/src/System/Globalization/DateTimeFormatInfo.cs b/src/mscorlib/src/System/Globalization/DateTimeFormatInfo.cs
index 14cdeb60e9..b2374ef0b2 100644
--- a/src/mscorlib/src/System/Globalization/DateTimeFormatInfo.cs
+++ b/src/mscorlib/src/System/Globalization/DateTimeFormatInfo.cs
@@ -10,7 +10,6 @@ namespace System.Globalization {
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
@@ -56,7 +55,6 @@ namespace System.Globalization {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class DateTimeFormatInfo : ICloneable, IFormatProvider
{
//
@@ -378,8 +376,6 @@ namespace System.Globalization {
private int nDataItem;
[OptionalField(VersionAdded = 2)]
internal bool m_isDefaultCalendar; // NEVER USED, DO NOT USE THIS! (Serialized in Whidbey)
- [OptionalField(VersionAdded = 2)]
- private static volatile Hashtable s_calendarNativeNames; // NEVER USED, DO NOT USE THIS! (Serialized in Whidbey)
// This was synthesized by Whidbey so we knew what words might appear in the middle of a date string
// Now we always synthesize so its not helpful
@@ -408,10 +404,6 @@ namespace System.Globalization {
calendar = (Calendar) GregorianCalendar.GetDefaultInstance().Clone();
calendar.SetReadOnlyState(m_isReadOnly);
}
- else
- {
- CultureInfo.CheckDomainSafetyObject(calendar, this);
- }
InitializeOverridableProperties(m_cultureData, calendar.ID);
//
@@ -587,12 +579,6 @@ namespace System.Globalization {
return;
}
- //
- // Because the culture is agile object which can be attached to a thread and then thread can travel
- // to another app domain then we prevent attaching any customized object to culture that we cannot contol.
- //
- CultureInfo.CheckDomainSafetyObject(value, this);
-
for (int i = 0; i < this.OptionalCalendars.Length; i++)
{
if (this.OptionalCalendars[i] == value.ID)
@@ -1370,7 +1356,6 @@ namespace System.Globalization {
// Returns the string array of the one-letter day of week names.
- [System.Runtime.InteropServices.ComVisible(false)]
public String[] ShortestDayNames
{
get
@@ -1593,7 +1578,6 @@ namespace System.Globalization {
// Returns the super short day of week names for the specified day of week.
- [System.Runtime.InteropServices.ComVisible(false)]
public String GetShortestDayName(DayOfWeek dayOfWeek)
{
@@ -1971,7 +1955,6 @@ namespace System.Globalization {
// String nativeName = dtfi.NativeCalendarName; // Get the Japanese name for the Japanese calendar.
// DateTimeFormatInfo dtfi = new CultureInfo("ja-JP", false).DateTimeFormat.Calendar = new GregorianCalendar(GregorianCalendarTypes.Localized);
// String nativeName = dtfi.NativeCalendarName; // Get the Japanese name for the Gregorian calendar.
- [System.Runtime.InteropServices.ComVisible(false)]
public String NativeCalendarName
{
get
@@ -1998,7 +1981,6 @@ namespace System.Globalization {
// WARNING: If more validation is ever done in one place, it should be done in the other.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public void SetAllDateTimePatterns(String[] patterns, char format)
{
if (IsReadOnly)
@@ -2061,7 +2043,6 @@ namespace System.Globalization {
return;
}
- [System.Runtime.InteropServices.ComVisible(false)]
public String[] AbbreviatedMonthGenitiveNames
{
get
@@ -2089,7 +2070,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public String[] MonthGenitiveNames
{
get
@@ -2455,7 +2435,7 @@ namespace System.Globalization {
case DateTimeFormatInfoScanner.IgnorableSymbolChar:
String symbol = dateWords[i].Substring(1);
InsertHash(temp, symbol, TokenType.IgnorableSymbol, 0);
- if (this.DateSeparator.Trim(null).Equals(symbol))
+ if (this.DateSeparator.Trim().Equals(symbol))
{
// The date separator is the same as the ingorable symbol.
useDateSepAsIgnorableSymbol = true;
@@ -2802,7 +2782,7 @@ namespace System.Globalization {
// If there is whitespace characters in the beginning and end of the string, trim them since whitespaces are skipped by
// DateTime.Parse().
if (Char.IsWhiteSpace(str[0]) || Char.IsWhiteSpace(str[str.Length - 1])) {
- str = str.Trim(null); // Trim white space characters.
+ str = str.Trim(); // Trim white space characters.
// Could have space for separators
if (str.Length == 0)
return;
diff --git a/src/mscorlib/src/System/Globalization/DateTimeStyles.cs b/src/mscorlib/src/System/Globalization/DateTimeStyles.cs
index ddae7b2f29..eadeda8e72 100644
--- a/src/mscorlib/src/System/Globalization/DateTimeStyles.cs
+++ b/src/mscorlib/src/System/Globalization/DateTimeStyles.cs
@@ -16,7 +16,6 @@ namespace System.Globalization {
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum DateTimeStyles {
// Bit flag indicating that leading whitespace is allowed. Character values
// 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, and 0x0020 are considered to be
diff --git a/src/mscorlib/src/System/Globalization/DaylightTime.cs b/src/mscorlib/src/System/Globalization/DaylightTime.cs
index a164867576..a21e092955 100644
--- a/src/mscorlib/src/System/Globalization/DaylightTime.cs
+++ b/src/mscorlib/src/System/Globalization/DaylightTime.cs
@@ -8,7 +8,6 @@ namespace System.Globalization
{
// This class represents a starting/ending time for a period of daylight saving time.
[Serializable]
- [ComVisible(true)]
public class DaylightTime
{
internal DateTime m_start;
diff --git a/src/mscorlib/src/System/Globalization/DigitShapes.cs b/src/mscorlib/src/System/Globalization/DigitShapes.cs
index d5b5ecc89c..1513d56f5c 100644
--- a/src/mscorlib/src/System/Globalization/DigitShapes.cs
+++ b/src/mscorlib/src/System/Globalization/DigitShapes.cs
@@ -9,7 +9,6 @@ namespace System.Globalization {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum DigitShapes : int {
Context = 0x0000, // The shape depends on the previous text in the same output.
diff --git a/src/mscorlib/src/System/Globalization/EastAsianLunisolarCalendar.cs b/src/mscorlib/src/System/Globalization/EastAsianLunisolarCalendar.cs
index 3c9391fa63..3f6df52a96 100644
--- a/src/mscorlib/src/System/Globalization/EastAsianLunisolarCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/EastAsianLunisolarCalendar.cs
@@ -14,7 +14,6 @@ namespace System.Globalization {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public abstract class EastAsianLunisolarCalendar : Calendar {
internal const int LeapMonth = 0;
internal const int Jan1Month = 1;
diff --git a/src/mscorlib/src/System/Globalization/EncodingTable.cs b/src/mscorlib/src/System/Globalization/EncodingTable.cs
index d908a2ac2b..b7c268a956 100644
--- a/src/mscorlib/src/System/Globalization/EncodingTable.cs
+++ b/src/mscorlib/src/System/Globalization/EncodingTable.cs
@@ -203,10 +203,6 @@ namespace System.Globalization
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private unsafe static extern InternalCodePageDataItem* GetCodePageData();
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal unsafe static extern byte* nativeCreateOpenFileMapping(
- String inSectionName, int inBytesToAllocate, out IntPtr mappedFileHandle);
}
/*=================================InternalEncodingDataItem==========================
diff --git a/src/mscorlib/src/System/Globalization/GlobalizationAssembly.cs b/src/mscorlib/src/System/Globalization/GlobalizationAssembly.cs
index 0810d67b59..e203223eb0 100644
--- a/src/mscorlib/src/System/Globalization/GlobalizationAssembly.cs
+++ b/src/mscorlib/src/System/Globalization/GlobalizationAssembly.cs
@@ -10,7 +10,6 @@ namespace System.Globalization {
using System.Collections.Generic;
using System.Threading;
using System.Security;
- using System.Security.Permissions;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
using System.Runtime.Versioning;
diff --git a/src/mscorlib/src/System/Globalization/GregorianCalendar.cs b/src/mscorlib/src/System/Globalization/GregorianCalendar.cs
index 6cf9b2eb85..9083e6de27 100644
--- a/src/mscorlib/src/System/Globalization/GregorianCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/GregorianCalendar.cs
@@ -22,7 +22,6 @@ namespace System.Globalization {
// 0 CurrentEra (AD)
// 1 BeforeCurrentEra (BC)
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class GregorianCalendar : Calendar
{
@@ -77,7 +76,6 @@ namespace System.Globalization {
}
#endregion Serialization
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -86,7 +84,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -98,7 +95,6 @@ namespace System.Globalization {
// Return the type of the Gregorian calendar.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -495,7 +491,6 @@ namespace System.Globalization {
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
if (era != CurrentEra && era != ADEra)
diff --git a/src/mscorlib/src/System/Globalization/GregorianCalendarTypes.cs b/src/mscorlib/src/System/Globalization/GregorianCalendarTypes.cs
index a9e25d06bf..1af5e9221c 100644
--- a/src/mscorlib/src/System/Globalization/GregorianCalendarTypes.cs
+++ b/src/mscorlib/src/System/Globalization/GregorianCalendarTypes.cs
@@ -6,7 +6,6 @@ namespace System.Globalization {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum GregorianCalendarTypes {
Localized = Calendar.CAL_GREGORIAN,
USEnglish = Calendar.CAL_GREGORIAN_US,
diff --git a/src/mscorlib/src/System/Globalization/HebrewCalendar.cs b/src/mscorlib/src/System/Globalization/HebrewCalendar.cs
index 44cbdb8bde..190c3f17d2 100644
--- a/src/mscorlib/src/System/Globalization/HebrewCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/HebrewCalendar.cs
@@ -64,7 +64,6 @@ namespace System.Globalization {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public class HebrewCalendar : Calendar {
diff --git a/src/mscorlib/src/System/Globalization/HijriCalendar.cs b/src/mscorlib/src/System/Globalization/HijriCalendar.cs
index 39a01e5774..061d380285 100644
--- a/src/mscorlib/src/System/Globalization/HijriCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/HijriCalendar.cs
@@ -49,7 +49,6 @@ namespace System.Globalization {
*/
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public class HijriCalendar : Calendar {
@@ -84,7 +83,6 @@ namespace System.Globalization {
internal static readonly DateTime calendarMaxValue = DateTime.MaxValue;
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -94,7 +92,6 @@ namespace System.Globalization {
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -106,7 +103,6 @@ namespace System.Globalization {
// Return the type of the Hijri calendar.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -614,7 +610,6 @@ namespace System.Globalization {
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
CheckYearRange(year, era);
diff --git a/src/mscorlib/src/System/Globalization/JapaneseCalendar.cs b/src/mscorlib/src/System/Globalization/JapaneseCalendar.cs
index 6b168ce916..72331f8346 100644
--- a/src/mscorlib/src/System/Globalization/JapaneseCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/JapaneseCalendar.cs
@@ -8,8 +8,6 @@ namespace System.Globalization {
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Contracts;
using Microsoft.Win32;
- using PermissionSet = System.Security.PermissionSet;
- using System.Security.Permissions;
/*=================================JapaneseCalendar==========================
**
@@ -41,13 +39,11 @@ namespace System.Globalization {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public class JapaneseCalendar : Calendar
{
internal static readonly DateTime calendarMinValue = new DateTime(1868, 9, 8);
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -56,7 +52,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -68,7 +63,6 @@ namespace System.Globalization {
// Return the type of the Japanese calendar.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -167,10 +161,6 @@ namespace System.Globalization {
try
{
- // Need to access registry
- PermissionSet permSet = new PermissionSet(PermissionState.None);
- permSet.AddPermission(new RegistryPermission(RegistryPermissionAccess.Read, c_japaneseErasHivePermissionList));
- permSet.Assert();
RegistryKey key = Registry.LocalMachine.OpenSubKey(c_japaneseErasHive, writable: false);
// Abort if we didn't find anything
@@ -311,7 +301,7 @@ namespace System.Globalization {
// Get Strings
//
// Needs to be a certain length e_a_E_A at least (7 chars, exactly 4 groups)
- String[] names = data.Split(new char[] {'_'});
+ String[] names = data.Split('_');
// Should have exactly 4 parts
// 0 - Era Name
@@ -425,7 +415,6 @@ namespace System.Globalization {
[SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
{
return (helper.GetWeekOfYear(time, rule, firstDayOfWeek));
@@ -469,7 +458,6 @@ namespace System.Globalization {
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
return (helper.GetLeapMonth(year, era));
diff --git a/src/mscorlib/src/System/Globalization/JulianCalendar.cs b/src/mscorlib/src/System/Globalization/JulianCalendar.cs
index db286e0363..ff8801433c 100644
--- a/src/mscorlib/src/System/Globalization/JulianCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/JulianCalendar.cs
@@ -18,7 +18,6 @@ namespace System.Globalization {
//* Julia 0001/01/03 9999/10/19
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public class JulianCalendar : Calendar {
@@ -51,7 +50,6 @@ namespace System.Globalization {
internal int MaxYear = 9999;
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -60,7 +58,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -72,7 +69,6 @@ namespace System.Globalization {
// Return the type of the Julian calendar.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -344,7 +340,6 @@ namespace System.Globalization {
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
CheckYearEraRange(year, era);
diff --git a/src/mscorlib/src/System/Globalization/KoreanCalendar.cs b/src/mscorlib/src/System/Globalization/KoreanCalendar.cs
index dde82b6e6b..6c5a03b7e8 100644
--- a/src/mscorlib/src/System/Globalization/KoreanCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/KoreanCalendar.cs
@@ -24,7 +24,6 @@ namespace System.Globalization {
============================================================================*/
-[System.Runtime.InteropServices.ComVisible(true)]
[Serializable] public class KoreanCalendar: Calendar {
//
// The era value for the current era.
@@ -49,7 +48,6 @@ namespace System.Globalization {
internal GregorianCalendarHelper helper;
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -58,7 +56,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -70,7 +67,6 @@ namespace System.Globalization {
// Return the type of the Korean calendar.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -165,7 +161,6 @@ namespace System.Globalization {
[SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
{
return (helper.GetWeekOfYear(time, rule, firstDayOfWeek));
@@ -200,7 +195,6 @@ namespace System.Globalization {
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
return (helper.GetLeapMonth(year, era));
diff --git a/src/mscorlib/src/System/Globalization/NumberFormatInfo.cs b/src/mscorlib/src/System/Globalization/NumberFormatInfo.cs
index a5dce46aa4..d95aac3d3d 100644
--- a/src/mscorlib/src/System/Globalization/NumberFormatInfo.cs
+++ b/src/mscorlib/src/System/Globalization/NumberFormatInfo.cs
@@ -3,7 +3,6 @@
// See the LICENSE file in the project root for more information.
namespace System.Globalization {
- using System.Security.Permissions;
using System.Runtime.Serialization;
using System.Text;
using System;
@@ -41,7 +40,6 @@ namespace System.Globalization {
//
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
sealed public partial class NumberFormatInfo : ICloneable, IFormatProvider
{
// invariantInfo is constant irrespective of your current culture.
@@ -312,7 +310,7 @@ namespace System.Globalization {
get { return currencyDecimalSeparator; }
set {
VerifyWritable();
- VerifyDecimalSeparator(value, "CurrencyDecimalSeparator");
+ VerifyDecimalSeparator(value, nameof(CurrencyDecimalSeparator));
currencyDecimalSeparator = value;
}
}
@@ -361,7 +359,7 @@ namespace System.Globalization {
VerifyWritable();
Int32[] inputSizes = (Int32[])value.Clone();
- CheckGroupSize("CurrencyGroupSizes", inputSizes);
+ CheckGroupSize(nameof(CurrencyGroupSizes), inputSizes);
currencyGroupSizes = inputSizes;
}
@@ -382,7 +380,7 @@ namespace System.Globalization {
VerifyWritable();
Int32[] inputSizes = (Int32[])value.Clone();
- CheckGroupSize("NumberGroupSizes", inputSizes);
+ CheckGroupSize(nameof(NumberGroupSizes), inputSizes);
numberGroupSizes = inputSizes;
}
}
@@ -400,7 +398,7 @@ namespace System.Globalization {
Contract.EndContractBlock();
VerifyWritable();
Int32[] inputSizes = (Int32[])value.Clone();
- CheckGroupSize("PercentGroupSizes", inputSizes);
+ CheckGroupSize(nameof(PercentGroupSizes), inputSizes);
percentGroupSizes = inputSizes;
}
@@ -411,7 +409,7 @@ namespace System.Globalization {
get { return currencyGroupSeparator; }
set {
VerifyWritable();
- VerifyGroupSeparator(value, "CurrencyGroupSeparator");
+ VerifyGroupSeparator(value, nameof(CurrencyGroupSeparator));
currencyGroupSeparator = value;
}
}
@@ -602,7 +600,7 @@ namespace System.Globalization {
get { return numberDecimalSeparator; }
set {
VerifyWritable();
- VerifyDecimalSeparator(value, "NumberDecimalSeparator");
+ VerifyDecimalSeparator(value, nameof(NumberDecimalSeparator));
numberDecimalSeparator = value;
}
}
@@ -612,7 +610,7 @@ namespace System.Globalization {
get { return numberGroupSeparator; }
set {
VerifyWritable();
- VerifyGroupSeparator(value, "NumberGroupSeparator");
+ VerifyGroupSeparator(value, nameof(NumberGroupSeparator));
numberGroupSeparator = value;
}
}
@@ -690,7 +688,7 @@ namespace System.Globalization {
get { return percentDecimalSeparator; }
set {
VerifyWritable();
- VerifyDecimalSeparator(value, "PercentDecimalSeparator");
+ VerifyDecimalSeparator(value, nameof(PercentDecimalSeparator));
percentDecimalSeparator = value;
}
}
@@ -700,7 +698,7 @@ namespace System.Globalization {
get { return percentGroupSeparator; }
set {
VerifyWritable();
- VerifyGroupSeparator(value, "PercentGroupSeparator");
+ VerifyGroupSeparator(value, nameof(PercentGroupSeparator));
percentGroupSeparator = value;
}
}
@@ -736,26 +734,24 @@ namespace System.Globalization {
}
- [System.Runtime.InteropServices.ComVisible(false)]
public String[] NativeDigits
{
get { return (String[])nativeDigits.Clone(); }
set
{
VerifyWritable();
- VerifyNativeDigits(value, "NativeDigits");
+ VerifyNativeDigits(value, nameof(NativeDigits));
nativeDigits = value;
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public DigitShapes DigitSubstitution
{
get { return (DigitShapes)digitSubstitution; }
set
{
VerifyWritable();
- VerifyDigitSubstitution(value, "DigitSubstitution");
+ VerifyDigitSubstitution(value, nameof(DigitSubstitution));
digitSubstitution = (int)value;
}
}
diff --git a/src/mscorlib/src/System/Globalization/NumberStyles.cs b/src/mscorlib/src/System/Globalization/NumberStyles.cs
index 42b9847ed3..969c07fc2a 100644
--- a/src/mscorlib/src/System/Globalization/NumberStyles.cs
+++ b/src/mscorlib/src/System/Globalization/NumberStyles.cs
@@ -16,7 +16,6 @@ namespace System.Globalization {
using System;
[Serializable]
[Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum NumberStyles {
// Bit flag indicating that leading whitespace is allowed. Character values
// 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, and 0x0020 are considered to be
diff --git a/src/mscorlib/src/System/Globalization/RegionInfo.cs b/src/mscorlib/src/System/Globalization/RegionInfo.cs
index 4bed87570f..b719af7128 100644
--- a/src/mscorlib/src/System/Globalization/RegionInfo.cs
+++ b/src/mscorlib/src/System/Globalization/RegionInfo.cs
@@ -23,7 +23,6 @@ namespace System.Globalization {
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public partial class RegionInfo
{
//--------------------------------------------------------------------//
@@ -259,7 +258,6 @@ namespace System.Globalization {
// WARNING: You need a full locale name for this to make sense.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual String NativeName
{
get
@@ -329,7 +327,6 @@ namespace System.Globalization {
}
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual int GeoId
{
get
@@ -345,7 +342,6 @@ namespace System.Globalization {
// English name for this region's currency, ie: Swiss Franc
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual String CurrencyEnglishName
{
get
@@ -362,7 +358,6 @@ namespace System.Globalization {
// WARNING: You need a full locale name for this to make sense.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual String CurrencyNativeName
{
get
diff --git a/src/mscorlib/src/System/Globalization/SortKey.cs b/src/mscorlib/src/System/Globalization/SortKey.cs
index 9c35f485e5..7c7408b009 100644
--- a/src/mscorlib/src/System/Globalization/SortKey.cs
+++ b/src/mscorlib/src/System/Globalization/SortKey.cs
@@ -19,7 +19,6 @@ namespace System.Globalization {
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public partial class SortKey
{
diff --git a/src/mscorlib/src/System/Globalization/StringInfo.cs b/src/mscorlib/src/System/Globalization/StringInfo.cs
index d86e11592e..dc32fe9493 100644
--- a/src/mscorlib/src/System/Globalization/StringInfo.cs
+++ b/src/mscorlib/src/System/Globalization/StringInfo.cs
@@ -16,12 +16,10 @@ namespace System.Globalization {
using System;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class StringInfo
{
@@ -57,7 +55,6 @@ namespace System.Globalization {
}
#endregion Serialization
- [System.Runtime.InteropServices.ComVisible(false)]
public override bool Equals(Object value)
{
StringInfo that = value as StringInfo;
@@ -68,7 +65,6 @@ namespace System.Globalization {
return (false);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetHashCode()
{
return this.m_str.GetHashCode();
diff --git a/src/mscorlib/src/System/Globalization/TaiwanCalendar.cs b/src/mscorlib/src/System/Globalization/TaiwanCalendar.cs
index 476ddeef7c..ec84a06b76 100644
--- a/src/mscorlib/src/System/Globalization/TaiwanCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/TaiwanCalendar.cs
@@ -22,7 +22,6 @@ namespace System.Globalization {
============================================================================*/
/* SSS_WARNINGS_ON */ /* SSS_DROP_END */
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable] public class TaiwanCalendar: Calendar {
//
// The era value for the current era.
@@ -62,7 +61,6 @@ namespace System.Globalization {
internal static readonly DateTime calendarMinValue = new DateTime(1912, 1, 1);
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -71,7 +69,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -83,7 +80,6 @@ namespace System.Globalization {
// Return the type of the Taiwan calendar.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -151,7 +147,6 @@ namespace System.Globalization {
[SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
{
return (helper.GetWeekOfYear(time, rule, firstDayOfWeek));
@@ -186,7 +181,6 @@ namespace System.Globalization {
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
return (helper.GetLeapMonth(year, era));
diff --git a/src/mscorlib/src/System/Globalization/TextElementEnumerator.cs b/src/mscorlib/src/System/Globalization/TextElementEnumerator.cs
index 049ccf6f81..0fee7a0745 100644
--- a/src/mscorlib/src/System/Globalization/TextElementEnumerator.cs
+++ b/src/mscorlib/src/System/Globalization/TextElementEnumerator.cs
@@ -23,7 +23,6 @@ namespace System.Globalization {
//
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class TextElementEnumerator: IEnumerator
{
private String str;
diff --git a/src/mscorlib/src/System/Globalization/TextInfo.cs b/src/mscorlib/src/System/Globalization/TextInfo.cs
index c8108e4922..9ece275dd3 100644
--- a/src/mscorlib/src/System/Globalization/TextInfo.cs
+++ b/src/mscorlib/src/System/Globalization/TextInfo.cs
@@ -23,13 +23,11 @@ namespace System.Globalization {
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public partial class TextInfo : ICloneable, IDeserializationCallback
{
//--------------------------------------------------------------------//
@@ -378,7 +376,6 @@ namespace System.Globalization {
////////////////////////////////////////////////////////////////////////
#if FEATURE_USE_LCID
- [System.Runtime.InteropServices.ComVisible(false)]
public int LCID
{
get
@@ -395,7 +392,6 @@ namespace System.Globalization {
// The name of the culture associated with the current TextInfo.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public string CultureName
{
get
@@ -411,7 +407,6 @@ namespace System.Globalization {
// Detect if the object is readonly.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public bool IsReadOnly
{
get { return (m_isReadOnly); }
@@ -424,7 +419,6 @@ namespace System.Globalization {
// Is the implementation of ICloneable.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual Object Clone()
{
object o = MemberwiseClone();
@@ -440,7 +434,6 @@ namespace System.Globalization {
// readonly.
//
////////////////////////////////////////////////////////////////////////
- [System.Runtime.InteropServices.ComVisible(false)]
public static TextInfo ReadOnly(TextInfo textInfo)
{
if (textInfo == null) { throw new ArgumentNullException(nameof(textInfo)); }
@@ -487,7 +480,6 @@ namespace System.Globalization {
return (m_listSeparator);
}
- [System.Runtime.InteropServices.ComVisible(false)]
set
{
if (value == null)
@@ -901,7 +893,6 @@ namespace System.Globalization {
//
// Returns true if the dominant direction of text and UI such as the relative position of buttons and scroll bars
//
- [System.Runtime.InteropServices.ComVisible(false)]
public bool IsRightToLeft
{
get
diff --git a/src/mscorlib/src/System/Globalization/ThaiBuddhistCalendar.cs b/src/mscorlib/src/System/Globalization/ThaiBuddhistCalendar.cs
index e294b51325..762c3ca7cb 100644
--- a/src/mscorlib/src/System/Globalization/ThaiBuddhistCalendar.cs
+++ b/src/mscorlib/src/System/Globalization/ThaiBuddhistCalendar.cs
@@ -21,7 +21,6 @@ namespace System.Globalization {
============================================================================*/
-[System.Runtime.InteropServices.ComVisible(true)]
[Serializable] public class ThaiBuddhistCalendar: Calendar {
// Initialize our era info.
@@ -40,7 +39,6 @@ namespace System.Globalization {
internal GregorianCalendarHelper helper;
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MinSupportedDateTime
{
get
@@ -49,7 +47,6 @@ namespace System.Globalization {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override DateTime MaxSupportedDateTime
{
get
@@ -61,7 +58,6 @@ namespace System.Globalization {
// Return the type of the Thai Buddhist calendar.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override CalendarAlgorithmType AlgorithmType
{
get
@@ -123,7 +119,6 @@ namespace System.Globalization {
[SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
{
return (helper.GetWeekOfYear(time, rule, firstDayOfWeek));
@@ -158,7 +153,6 @@ namespace System.Globalization {
// if this calendar does not have leap month, or this year is not a leap year.
//
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetLeapMonth(int year, int era)
{
return (helper.GetLeapMonth(year, era));
diff --git a/src/mscorlib/src/System/Globalization/UnicodeCategory.cs b/src/mscorlib/src/System/Globalization/UnicodeCategory.cs
index 3848b6142f..c9898f135b 100644
--- a/src/mscorlib/src/System/Globalization/UnicodeCategory.cs
+++ b/src/mscorlib/src/System/Globalization/UnicodeCategory.cs
@@ -13,7 +13,6 @@
namespace System.Globalization {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum UnicodeCategory {
UppercaseLetter = 0,
diff --git a/src/mscorlib/src/System/Guid.cs b/src/mscorlib/src/System/Guid.cs
index e2e36ba1b2..1116faf027 100644
--- a/src/mscorlib/src/System/Guid.cs
+++ b/src/mscorlib/src/System/Guid.cs
@@ -16,7 +16,6 @@ namespace System {
// Represents a Globally Unique Identifier.
[StructLayout(LayoutKind.Sequential)]
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.Versioning.NonVersionable] // This only applies to field layout
public struct Guid : IFormattable, IComparable
, IComparable<Guid>, IEquatable<Guid>
@@ -756,11 +755,6 @@ namespace System {
private static unsafe bool StringToShort(String str, int requiredLength, int flags, out short result, ref GuidResult parseResult) {
return StringToShort(str, null, requiredLength, flags, out result, ref parseResult);
}
- private static unsafe bool StringToShort(String str, ref int parsePos, int requiredLength, int flags, out short result, ref GuidResult parseResult) {
- fixed(int * ppos = &parsePos) {
- return StringToShort(str, ppos, requiredLength, flags, out result, ref parseResult);
- }
- }
private static unsafe bool StringToShort(String str, int* parsePos, int requiredLength, int flags, out short result, ref GuidResult parseResult) {
result = 0;
int x;
@@ -813,9 +807,6 @@ namespace System {
}
return true;
}
- private static unsafe bool StringToLong(String str, int flags, out long result, ref GuidResult parseResult) {
- return StringToLong(str, null, flags, out result, ref parseResult);
- }
private static unsafe bool StringToLong(String str, ref int parsePos, int flags, out long result, ref GuidResult parseResult) {
fixed(int * ppos = &parsePos) {
return StringToLong(str, ppos, flags, out result, ref parseResult);
diff --git a/src/mscorlib/src/System/IAppDomain.cs b/src/mscorlib/src/System/IAppDomain.cs
deleted file mode 100644
index cdb83166c8..0000000000
--- a/src/mscorlib/src/System/IAppDomain.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** Interface: IAppDomain
-**
-**
-**
-**
-** Purpose: Properties and methods exposed to COM
-**
-**
-===========================================================*/
-namespace System
-{
- using System.Runtime.InteropServices;
-
- [GuidAttribute("05F696DC-2B29-3663-AD8B-C4389CF2A713")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _AppDomain
- {
- }
-}
-
diff --git a/src/mscorlib/src/System/IAppDomainPauseManager.cs b/src/mscorlib/src/System/IAppDomainPauseManager.cs
index 902a79bd2a..cd3a9033de 100644
--- a/src/mscorlib/src/System/IAppDomainPauseManager.cs
+++ b/src/mscorlib/src/System/IAppDomainPauseManager.cs
@@ -32,46 +32,6 @@ namespace System
}
static readonly AppDomainPauseManager instance = new AppDomainPauseManager();
- internal static AppDomainPauseManager Instance
- {
- get { return instance; }
- }
-
- // FAS: IAppDomainPauseConsumer interface implementation
- // currently there is nothing we do here as the implementation
- // of updating pause times have been moved to native CorHost2
- public void Pausing()
- {
- }
-
- public void Paused()
- {
- Debug.Assert(!isPaused);
-
- if(ResumeEvent == null)
- ResumeEvent = new ManualResetEvent(false);
- else
- ResumeEvent.Reset();
-
- Timer.Pause();
-
- // Set IsPaused at the last as other threads seeing it set, will expect a valid
- // reset ResumeEvent. Also the requirement here is that only after Paused
- // returns other threads should block on this event. So there is a race condition here.
- isPaused = true;
- }
-
- public void Resuming()
- {
- Debug.Assert(isPaused);
- isPaused = false;
- ResumeEvent.Set();
- }
-
- public void Resumed()
- {
- Timer.Resume();
- }
private static volatile bool isPaused;
diff --git a/src/mscorlib/src/System/IAppDomainSetup.cs b/src/mscorlib/src/System/IAppDomainSetup.cs
deleted file mode 100644
index a088c629d8..0000000000
--- a/src/mscorlib/src/System/IAppDomainSetup.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** Interface: IAppDomainSetup
-**
-**
-**
-**
-** Purpose: Properties exposed to COM
-**
-**
-===========================================================*/
-namespace System {
-
- using System.Runtime.InteropServices;
-
- [GuidAttribute("27FFF232-A7A8-40dd-8D4A-734AD59FCD41")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IAppDomainSetup
- {
- String ApplicationBase {
- get;
- set;
- }
-
- String ApplicationName
- {
- get;
- set;
- }
-
- String CachePath
- {
- get;
- set;
- }
-
- String ConfigurationFile {
- get;
- set;
- }
-
- String DynamicBase
- {
- get;
- set;
- }
-
- String LicenseFile
- {
- get;
- set;
- }
-
- String PrivateBinPath
- {
- get;
- set;
- }
-
- String PrivateBinPathProbe
- {
- get;
- set;
- }
-
- String ShadowCopyDirectories
- {
- get;
- set;
- }
-
- String ShadowCopyFiles
- {
- get;
- set;
- }
-
- }
-}
diff --git a/src/mscorlib/src/System/IAsyncResult.cs b/src/mscorlib/src/System/IAsyncResult.cs
index 2591c726c7..0abeaca525 100644
--- a/src/mscorlib/src/System/IAsyncResult.cs
+++ b/src/mscorlib/src/System/IAsyncResult.cs
@@ -10,11 +10,12 @@
** operation
**
===========================================================*/
-namespace System {
-
- using System;
- using System.Threading;
-[System.Runtime.InteropServices.ComVisible(true)]
+
+using System;
+using System.Threading;
+
+namespace System
+{
public interface IAsyncResult
{
bool IsCompleted { get; }
@@ -22,11 +23,8 @@ namespace System {
WaitHandle AsyncWaitHandle { get; }
- Object AsyncState { get; }
+ Object AsyncState { get; }
- bool CompletedSynchronously { get; }
-
-
+ bool CompletedSynchronously { get; }
}
-
}
diff --git a/src/mscorlib/src/System/ICloneable.cs b/src/mscorlib/src/System/ICloneable.cs
index 2931802539..49657c2765 100644
--- a/src/mscorlib/src/System/ICloneable.cs
+++ b/src/mscorlib/src/System/ICloneable.cs
@@ -16,7 +16,6 @@ namespace System {
// method which is called to create a clone of the object. Object defines a method
// MemberwiseClone to support default clone operations.
//
- [System.Runtime.InteropServices.ComVisible(true)]
public interface ICloneable
{
// Interface does not need to be marked with the serializable attribute
diff --git a/src/mscorlib/src/System/IComparable.cs b/src/mscorlib/src/System/IComparable.cs
index 111d892129..72aeeb027c 100644
--- a/src/mscorlib/src/System/IComparable.cs
+++ b/src/mscorlib/src/System/IComparable.cs
@@ -2,18 +2,16 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
- using System;
+namespace System
+{
// The IComparable interface is implemented by classes that support an
// ordering of instances of the class. The ordering represented by
// IComparable can be used to sort arrays and collections of objects
// that implement the interface.
//
-[System.Runtime.InteropServices.ComVisible(true)]
public interface IComparable
{
- // Interface does not need to be marked with the serializable attribute
+ // Interface does not need to be marked with the serializable attribute
// Compares this object to another object, returning an integer that
// indicates the relationship. An implementation of this method must return
// a value less than zero if this is less than object, zero
diff --git a/src/mscorlib/src/System/IConvertible.cs b/src/mscorlib/src/System/IConvertible.cs
index 174b25b180..87351127f2 100644
--- a/src/mscorlib/src/System/IConvertible.cs
+++ b/src/mscorlib/src/System/IConvertible.cs
@@ -2,15 +2,12 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
- using System.Diagnostics.Contracts;
- using System.Threading;
-
+namespace System
+{
// The IConvertible interface represents an object that contains a value. This
// interface is implemented by the following types in the System namespace:
// Boolean, Char, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64,
- // Single, Double, Decimal, DateTime, TimeSpan, and String. The interface may
+ // Single, Double, Decimal, DateTime, and String. The interface may
// be implemented by other types that are to be considered values. For example,
// a library of nullable database types could implement IConvertible.
//
@@ -23,7 +20,6 @@ namespace System {
// IConvertible implementation should simply throw an InvalidCastException.
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public interface IConvertible
{
// Returns the type code of this object. An implementation of this method
diff --git a/src/mscorlib/src/System/ICustomFormatter.cs b/src/mscorlib/src/System/ICustomFormatter.cs
index cbc3816a82..47340f3093 100644
--- a/src/mscorlib/src/System/ICustomFormatter.cs
+++ b/src/mscorlib/src/System/ICustomFormatter.cs
@@ -11,15 +11,14 @@
**
**
===========================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System;
+
+namespace System
+{
public interface ICustomFormatter
{
// Interface does not need to be marked with the serializable attribute
- String Format (String format, Object arg, IFormatProvider formatProvider);
+ String Format(String format, Object arg, IFormatProvider formatProvider);
}
}
diff --git a/src/mscorlib/src/System/IDisposable.cs b/src/mscorlib/src/System/IDisposable.cs
index fcb65bea14..24f0740edc 100644
--- a/src/mscorlib/src/System/IDisposable.cs
+++ b/src/mscorlib/src/System/IDisposable.cs
@@ -11,7 +11,9 @@
**
**
===========================================================*/
-namespace System {
+
+namespace System
+{
// IDisposable is an attempt at helping to solve problems with deterministic
// finalization. The GC of course doesn't leave any way to deterministically
// know when a finalizer will run. This forces classes that hold onto OS
@@ -51,8 +53,8 @@ namespace System {
// data buffered by the StreamWriter cannot be written to the Stream. In this
// case, it doesn't make much sense to provide a finalizer on the StreamWriter
// since you cannot solve this problem correctly.
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IDisposable {
+ public interface IDisposable
+ {
void Dispose();
}
}
diff --git a/src/mscorlib/src/System/IEquatable.cs b/src/mscorlib/src/System/IEquatable.cs
index aa034da68c..1264fdd57a 100644
--- a/src/mscorlib/src/System/IEquatable.cs
+++ b/src/mscorlib/src/System/IEquatable.cs
@@ -2,13 +2,13 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
- using System;
+using System;
+
+namespace System
+{
public interface IEquatable<T>
{
bool Equals(T other);
}
-
}
diff --git a/src/mscorlib/src/System/IFormatProvider.cs b/src/mscorlib/src/System/IFormatProvider.cs
index a5cc783969..0c17354af3 100644
--- a/src/mscorlib/src/System/IFormatProvider.cs
+++ b/src/mscorlib/src/System/IFormatProvider.cs
@@ -10,11 +10,11 @@
**
**
============================================================*/
-namespace System {
-
- using System;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System;
+
+namespace System
+{
public interface IFormatProvider
{
// Interface does not need to be marked with the serializable attribute
diff --git a/src/mscorlib/src/System/IFormattable.cs b/src/mscorlib/src/System/IFormattable.cs
index 414b4686df..28a7d70571 100644
--- a/src/mscorlib/src/System/IFormattable.cs
+++ b/src/mscorlib/src/System/IFormattable.cs
@@ -2,12 +2,11 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
- using System;
- using System.Diagnostics.Contracts;
+using System;
+using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
+namespace System
+{
public interface IFormattable
{
[Pure]
diff --git a/src/mscorlib/src/System/IO/BinaryReader.cs b/src/mscorlib/src/System/IO/BinaryReader.cs
index 4145a7f4f6..d973860472 100644
--- a/src/mscorlib/src/System/IO/BinaryReader.cs
+++ b/src/mscorlib/src/System/IO/BinaryReader.cs
@@ -23,7 +23,6 @@ namespace System.IO {
using System.Diagnostics.Contracts;
using System.Security;
-[System.Runtime.InteropServices.ComVisible(true)]
public class BinaryReader : IDisposable
{
private const int MaxCharBytesSize = 128;
diff --git a/src/mscorlib/src/System/IO/BinaryWriter.cs b/src/mscorlib/src/System/IO/BinaryWriter.cs
index f99b4d3d42..b6c562534c 100644
--- a/src/mscorlib/src/System/IO/BinaryWriter.cs
+++ b/src/mscorlib/src/System/IO/BinaryWriter.cs
@@ -26,7 +26,6 @@ namespace System.IO {
// give unique encodings.
//
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class BinaryWriter : IDisposable
{
public static readonly BinaryWriter Null = new BinaryWriter();
@@ -185,7 +184,7 @@ namespace System.IO {
Debug.Assert(_encoding.GetMaxByteCount(1) <= 16, "_encoding.GetMaxByteCount(1) <= 16)");
int numBytes = 0;
- fixed(byte * pBytes = _buffer) {
+ fixed(byte * pBytes = &_buffer[0]) {
numBytes = _encoder.GetBytes(&ch, 1, pBytes, _buffer.Length, flush: true);
}
OutStream.Write(_buffer, 0, numBytes);
@@ -382,7 +381,7 @@ namespace System.IO {
}
fixed (char* pChars = value)
{
- fixed (byte* pBytes = _largeByteBuffer)
+ fixed (byte* pBytes = &_largeByteBuffer[0])
{
byteLen = _encoder.GetBytes(pChars + charStart, charCount, pBytes, _largeByteBuffer.Length, charCount == numLeft);
}
diff --git a/src/mscorlib/src/System/IO/Directory.cs b/src/mscorlib/src/System/IO/Directory.cs
index d6b68222cd..88a669a971 100644
--- a/src/mscorlib/src/System/IO/Directory.cs
+++ b/src/mscorlib/src/System/IO/Directory.cs
@@ -17,7 +17,6 @@
using System.Collections.Generic;
using System.Security;
-using System.Security.Permissions;
using Microsoft.Win32;
using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
@@ -26,404 +25,7 @@ using System.Diagnostics.Contracts;
namespace System.IO
{
- [ComVisible(true)]
- public static class Directory {
- public static DirectoryInfo GetParent(String path)
- {
- if (path==null)
- throw new ArgumentNullException(nameof(path));
-
- if (path.Length==0)
- throw new ArgumentException(Environment.GetResourceString("Argument_PathEmpty"), nameof(path));
- Contract.EndContractBlock();
-
- string fullPath = Path.GetFullPath(path);
-
- string s = Path.GetDirectoryName(fullPath);
- if (s==null)
- return null;
- return new DirectoryInfo(s);
- }
-
- public static DirectoryInfo CreateDirectory(String path) {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_PathEmpty"));
- Contract.EndContractBlock();
-
- return InternalCreateDirectoryHelper(path);
- }
-
- internal static DirectoryInfo InternalCreateDirectoryHelper(String path)
- {
- Contract.Requires(path != null);
- Contract.Requires(path.Length != 0);
-
- String fullPath = Path.GetFullPath(path);
-
- InternalCreateDirectory(fullPath, path, null);
-
- return new DirectoryInfo(fullPath, false);
- }
-
- internal unsafe static void InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj)
- {
- int length = fullPath.Length;
-
- // We need to trim the trailing slash or the code will try to create 2 directories of the same name.
- if (length >= 2 && PathInternal.IsDirectorySeparator(fullPath[length - 1]))
- length--;
-
- int lengthRoot = PathInternal.GetRootLength(fullPath);
-
- // For UNC paths that are only // or ///
- if (length == 2 && PathInternal.IsDirectorySeparator(fullPath[1]))
- throw new IOException(Environment.GetResourceString("IO.IO_CannotCreateDirectory", path));
-
- // We can save a bunch of work if the directory we want to create already exists. This also
- // saves us in the case where sub paths are inaccessible (due to ERROR_ACCESS_DENIED) but the
- // final path is accessable and the directory already exists. For example, consider trying
- // to create c:\Foo\Bar\Baz, where everything already exists but ACLS prevent access to c:\Foo
- // and c:\Foo\Bar. In that case, this code will think it needs to create c:\Foo, and c:\Foo\Bar
- // and fail to due so, causing an exception to be thrown. This is not what we want.
- if (InternalExists(fullPath)) {
- return;
- }
-
- List<string> stackDir = new List<string>();
-
- // Attempt to figure out which directories don't exist, and only
- // create the ones we need. Note that InternalExists may fail due
- // to Win32 ACL's preventing us from seeing a directory, and this
- // isn't threadsafe.
-
- bool somepathexists = false;
-
- if (length > lengthRoot) { // Special case root (fullpath = X:\\)
- int i = length-1;
- while (i >= lengthRoot && !somepathexists) {
- String dir = fullPath.Substring(0, i+1);
-
- if (!InternalExists(dir)) // Create only the ones missing
- stackDir.Add(dir);
- else
- somepathexists = true;
-
- while (i > lengthRoot && fullPath[i] != Path.DirectorySeparatorChar && fullPath[i] != Path.AltDirectorySeparatorChar) i--;
- i--;
- }
- }
-
- int count = stackDir.Count;
-
- // If we were passed a DirectorySecurity, convert it to a security
- // descriptor and set it in he call to CreateDirectory.
- Win32Native.SECURITY_ATTRIBUTES secAttrs = null;
-
- bool r = true;
- int firstError = 0;
- String errorString = path;
- // If all the security checks succeeded create all the directories
- while (stackDir.Count > 0) {
- String name = stackDir[stackDir.Count - 1];
- stackDir.RemoveAt(stackDir.Count - 1);
- if (PathInternal.IsDirectoryTooLong(name))
- throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
- r = Win32Native.CreateDirectory(name, secAttrs);
- if (!r && (firstError == 0)) {
- int currentError = Marshal.GetLastWin32Error();
- // While we tried to avoid creating directories that don't
- // exist above, there are at least two cases that will
- // cause us to see ERROR_ALREADY_EXISTS here. InternalExists
- // can fail because we didn't have permission to the
- // directory. Secondly, another thread or process could
- // create the directory between the time we check and the
- // time we try using the directory. Thirdly, it could
- // fail because the target does exist, but is a file.
- if (currentError != Win32Native.ERROR_ALREADY_EXISTS)
- firstError = currentError;
- else {
- // If there's a file in this directory's place, or if we have ERROR_ACCESS_DENIED when checking if the directory already exists throw.
- if (File.InternalExists(name) || (!InternalExists(name, out currentError) && currentError == Win32Native.ERROR_ACCESS_DENIED))
- {
- firstError = currentError;
- errorString = name;
- }
- }
- }
- }
-
- // We need this check to mask OS differences
- // Handle CreateDirectory("X:\\foo") when X: doesn't exist. Similarly for n/w paths.
- if ((count == 0) && !somepathexists) {
- String root = InternalGetDirectoryRoot(fullPath);
- if (!InternalExists(root)) {
- // Extract the root from the passed in path again for security.
- __Error.WinIOError(Win32Native.ERROR_PATH_NOT_FOUND, InternalGetDirectoryRoot(path));
- }
- return;
- }
-
- // Only throw an exception if creating the exact directory we
- // wanted failed to work correctly.
- if (!r && (firstError != 0)) {
- __Error.WinIOError(firstError, errorString);
- }
- }
-
-
- // Tests if the given path refers to an existing DirectoryInfo on disk.
- //
- // Your application must have Read permission to the directory's
- // contents.
- //
- public static bool Exists(String path)
- {
- return InternalExistsHelper(path);
- }
-
- internal static bool InternalExistsHelper(String path) {
- try
- {
- if (path == null)
- return false;
- if (path.Length == 0)
- return false;
-
- return InternalExists(Path.GetFullPath(path));
- }
- catch (ArgumentException) { }
- catch (NotSupportedException) { } // Security can throw this on ":"
- catch (SecurityException) { }
- catch (IOException) { }
- catch (UnauthorizedAccessException)
- {
- Debug.Assert(false, "Ignore this assert and send a repro to Microsoft. This assert was tracking purposes only.");
- }
- return false;
- }
-
- // Determine whether path describes an existing directory
- // on disk, avoiding security checks.
- internal static bool InternalExists(String path) {
- int lastError = Win32Native.ERROR_SUCCESS;
- return InternalExists(path, out lastError);
- }
-
- // Determine whether path describes an existing directory
- // on disk, avoiding security checks.
- internal static bool InternalExists(String path, out int lastError) {
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- lastError = File.FillAttributeInfo(path, ref data, false, true);
-
- return (lastError == 0) && (data.fileAttributes != -1)
- && ((data.fileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) != 0);
- }
-
- public static DateTime GetCreationTime(String path)
- {
- return File.GetCreationTime(path);
- }
-
- public static DateTime GetCreationTimeUtc(String path)
- {
- return File.GetCreationTimeUtc(path);
- }
-
- public static DateTime GetLastWriteTime(String path)
- {
- return File.GetLastWriteTime(path);
- }
-
- public static DateTime GetLastWriteTimeUtc(String path)
- {
- return File.GetLastWriteTimeUtc(path);
- }
-
- public static DateTime GetLastAccessTime(String path)
- {
- return File.GetLastAccessTime(path);
- }
-
- public static DateTime GetLastAccessTimeUtc(String path)
- {
- return File.GetLastAccessTimeUtc(path);
- }
-
- // Returns an array of filenames in the DirectoryInfo specified by path
- public static String[] GetFiles(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.Ensures(Contract.Result<String[]>() != null);
- Contract.EndContractBlock();
-
- return InternalGetFiles(path, "*", SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of Files in the current DirectoryInfo matching the
- // given search pattern (ie, "*.txt").
- public static String[] GetFiles(String path, String searchPattern)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.Ensures(Contract.Result<String[]>() != null);
- Contract.EndContractBlock();
-
- return InternalGetFiles(path, searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of Files in the current DirectoryInfo matching the
- // given search pattern (ie, "*.txt") and search option
- public static String[] GetFiles(String path, String searchPattern, SearchOption searchOption)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.Ensures(Contract.Result<String[]>() != null);
- Contract.EndContractBlock();
-
- return InternalGetFiles(path, searchPattern, searchOption);
- }
-
- // Returns an array of Files in the current DirectoryInfo matching the
- // given search pattern (ie, "*.txt") and search option
- private static String[] InternalGetFiles(String path, String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(path != null);
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- return InternalGetFileDirectoryNames(path, path, searchPattern, true, false, searchOption, true);
- }
-
- internal static String[] UnsafeGetFiles(String path, String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(path != null);
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- return InternalGetFileDirectoryNames(path, path, searchPattern, true, false, searchOption, false);
- }
-
- // Returns an array of Directories in the current directory.
- public static String[] GetDirectories(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.Ensures(Contract.Result<String[]>() != null);
- Contract.EndContractBlock();
-
- return InternalGetDirectories(path, "*", SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of Directories in the current DirectoryInfo matching the
- // given search criteria (ie, "*.txt").
- public static String[] GetDirectories(String path, String searchPattern)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.Ensures(Contract.Result<String[]>() != null);
- Contract.EndContractBlock();
-
- return InternalGetDirectories(path, searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of Directories in the current DirectoryInfo matching the
- // given search criteria (ie, "*.txt").
- public static String[] GetDirectories(String path, String searchPattern, SearchOption searchOption)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.Ensures(Contract.Result<String[]>() != null);
- Contract.EndContractBlock();
-
- return InternalGetDirectories(path, searchPattern, searchOption);
- }
-
- // Returns an array of Directories in the current DirectoryInfo matching the
- // given search criteria (ie, "*.txt").
- private static String[] InternalGetDirectories(String path, String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(path != null);
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
- Contract.Ensures(Contract.Result<String[]>() != null);
-
- return InternalGetFileDirectoryNames(path, path, searchPattern, false, true, searchOption, true);
- }
-
- internal static String[] UnsafeGetDirectories(String path, String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(path != null);
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
- Contract.Ensures(Contract.Result<String[]>() != null);
-
- return InternalGetFileDirectoryNames(path, path, searchPattern, false, true, searchOption, false);
- }
-
- // Returns an array of strongly typed FileSystemInfo entries in the path
- public static String[] GetFileSystemEntries(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.Ensures(Contract.Result<String[]>() != null);
- Contract.EndContractBlock();
-
- return InternalGetFileSystemEntries(path, "*", SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of strongly typed FileSystemInfo entries in the path with the
- // given search criteria (ie, "*.txt"). We disallow .. as a part of the search criteria
- public static String[] GetFileSystemEntries(String path, String searchPattern)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.Ensures(Contract.Result<String[]>() != null);
- Contract.EndContractBlock();
-
- return InternalGetFileSystemEntries(path, searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of strongly typed FileSystemInfo entries in the path with the
- // given search criteria (ie, "*.txt"). We disallow .. as a part of the search criteria
- public static String[] GetFileSystemEntries(String path, String searchPattern, SearchOption searchOption)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.Ensures(Contract.Result<String[]>() != null);
- Contract.EndContractBlock();
-
- return InternalGetFileSystemEntries(path, searchPattern, searchOption);
- }
-
- private static String[] InternalGetFileSystemEntries(String path, String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(path != null);
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- return InternalGetFileDirectoryNames(path, path, searchPattern, true, true, searchOption, true);
- }
+ internal static class Directory {
// Private class that holds search data that is passed around
// in the heap based stack recursion
@@ -445,90 +47,7 @@ namespace System.IO
public readonly SearchOption searchOption;
}
-
- // Returns fully qualified user path of dirs/files that matches the search parameters.
- // For recursive search this method will search through all the sub dirs and execute
- // the given search criteria against every dir.
- // For all the dirs/files returned, it will then demand path discovery permission for
- // their parent folders (it will avoid duplicate permission checks)
- internal static String[] InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, bool includeFiles, bool includeDirs, SearchOption searchOption, bool checkHost)
- {
- Contract.Requires(path != null);
- Contract.Requires(userPathOriginal != null);
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- IEnumerable<String> enble = FileSystemEnumerableFactory.CreateFileNameIterator(
- path, userPathOriginal, searchPattern,
- includeFiles, includeDirs, searchOption, checkHost);
- List<String> fileList = new List<String>(enble);
- return fileList.ToArray();
- }
-
- public static IEnumerable<String> EnumerateDirectories(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.EndContractBlock();
-
- return InternalEnumerateDirectories(path, "*", SearchOption.TopDirectoryOnly);
- }
-
- public static IEnumerable<String> EnumerateDirectories(String path, String searchPattern)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.EndContractBlock();
-
- return InternalEnumerateDirectories(path, searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- public static IEnumerable<String> EnumerateDirectories(String path, String searchPattern, SearchOption searchOption)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.EndContractBlock();
-
- return InternalEnumerateDirectories(path, searchPattern, searchOption);
- }
-
- private static IEnumerable<String> InternalEnumerateDirectories(String path, String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(path != null);
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- return EnumerateFileSystemNames(path, searchPattern, searchOption, false, true);
- }
-
- public static IEnumerable<String> EnumerateFiles(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.Ensures(Contract.Result<IEnumerable<String>>() != null);
- Contract.EndContractBlock();
-
- return InternalEnumerateFiles(path, "*", SearchOption.TopDirectoryOnly);
- }
-
- public static IEnumerable<String> EnumerateFiles(String path, String searchPattern)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.Ensures(Contract.Result<IEnumerable<String>>() != null);
- Contract.EndContractBlock();
-
- return InternalEnumerateFiles(path, searchPattern, SearchOption.TopDirectoryOnly);
- }
-
+#if PLATFORM_UNIX
public static IEnumerable<String> EnumerateFiles(String path, String searchPattern, SearchOption searchOption)
{
if (path == null)
@@ -553,52 +72,6 @@ namespace System.IO
return EnumerateFileSystemNames(path, searchPattern, searchOption, true, false);
}
- public static IEnumerable<String> EnumerateFileSystemEntries(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.Ensures(Contract.Result<IEnumerable<String>>() != null);
- Contract.EndContractBlock();
-
- return InternalEnumerateFileSystemEntries(path, "*", SearchOption.TopDirectoryOnly);
- }
-
- public static IEnumerable<String> EnumerateFileSystemEntries(String path, String searchPattern)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.Ensures(Contract.Result<IEnumerable<String>>() != null);
- Contract.EndContractBlock();
-
- return InternalEnumerateFileSystemEntries(path, searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- public static IEnumerable<String> EnumerateFileSystemEntries(String path, String searchPattern, SearchOption searchOption)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.Ensures(Contract.Result<IEnumerable<String>>() != null);
- Contract.EndContractBlock();
-
- return InternalEnumerateFileSystemEntries(path, searchPattern, searchOption);
- }
-
- private static IEnumerable<String> InternalEnumerateFileSystemEntries(String path, String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(path != null);
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
- Contract.Ensures(Contract.Result<IEnumerable<String>>() != null);
-
- return EnumerateFileSystemNames(path, searchPattern, searchOption, true, true);
- }
-
private static IEnumerable<String> EnumerateFileSystemNames(String path, String searchPattern, SearchOption searchOption,
bool includeFiles, bool includeDirs)
{
@@ -610,60 +83,14 @@ namespace System.IO
return FileSystemEnumerableFactory.CreateFileNameIterator(path, path, searchPattern,
includeFiles, includeDirs, searchOption, true);
}
-
- // Retrieves the names of the logical drives on this machine in the
- // form "C:\".
- //
- // Your application must have System Info permission.
- //
- public static String[] GetLogicalDrives()
- {
- Contract.Ensures(Contract.Result<String[]>() != null);
-
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-#pragma warning restore 618
-
- int drives = Win32Native.GetLogicalDrives();
- if (drives==0)
- __Error.WinIOError();
- uint d = (uint)drives;
- int count = 0;
- while (d != 0) {
- if (((int)d & 1) != 0) count++;
- d >>= 1;
- }
- String[] result = new String[count];
- char[] root = new char[] {'A', ':', '\\'};
- d = (uint)drives;
- count = 0;
- while (d != 0) {
- if (((int)d & 1) != 0) {
- result[count++] = new String(root);
- }
- d >>= 1;
- root[0]++;
- }
- return result;
- }
-
- public static String GetDirectoryRoot(String path) {
- if (path==null)
- throw new ArgumentNullException(nameof(path));
- Contract.EndContractBlock();
-
- string fullPath = Path.GetFullPath(path);
- string root = fullPath.Substring(0, PathInternal.GetRootLength(fullPath));
-
- return root;
- }
+#endif // PLATFORM_UNIX
internal static String InternalGetDirectoryRoot(String path) {
if (path == null) return null;
return path.Substring(0, PathInternal.GetRootLength(path));
}
- /*===============================CurrentDirectory===============================
+ /*===============================CurrentDirectory===============================
**Action: Provides a getter and setter for the current directory. The original
** current DirectoryInfo is the one from which the process was started.
**Returns: The current DirectoryInfo (from the getter). Void from the setter.
@@ -673,20 +100,21 @@ namespace System.IO
public static String GetCurrentDirectory()
{
// Start with a buffer the size of MAX_PATH
- using (StringBuffer buffer = new StringBuffer(260))
+ StringBuffer buffer = new StringBuffer(260);
+ try
{
uint result = 0;
- while ((result = Win32Native.GetCurrentDirectoryW(buffer.CharCapacity, buffer.GetHandle())) > buffer.CharCapacity)
+ while ((result = Win32Native.GetCurrentDirectoryW((uint)buffer.Capacity, buffer.UnderlyingArray)) > buffer.Capacity)
{
// Reported size is greater than the buffer size. Increase the capacity.
// The size returned includes the null only if more space is needed (this case).
- buffer.EnsureCharCapacity(result);
+ buffer.EnsureCapacity(checked((int)result));
}
if (result == 0)
__Error.WinIOError();
- buffer.Length = result;
+ buffer.Length = (int)result;
#if !PLATFORM_UNIX
if (buffer.Contains('~'))
@@ -695,12 +123,16 @@ namespace System.IO
return buffer.ToString();
}
+ finally
+ {
+ buffer.Free();
+ }
}
public static void SetCurrentDirectory(String path)
{
if (path==null)
- throw new ArgumentNullException("value");
+ throw new ArgumentNullException(nameof(path));
if (path.Length==0)
throw new ArgumentException(Environment.GetResourceString("Argument_PathEmpty"));
if (path.Length >= Path.MaxPath)
@@ -718,216 +150,6 @@ namespace System.IO
__Error.WinIOError(errorCode, fulldestDirName);
}
}
-
- public static void Move(String sourceDirName,String destDirName)
- {
- if (sourceDirName==null)
- throw new ArgumentNullException(nameof(sourceDirName));
- if (sourceDirName.Length==0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(sourceDirName));
- if (destDirName==null)
- throw new ArgumentNullException(nameof(destDirName));
- if (destDirName.Length==0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(destDirName));
-
- String sourcePath = Path.GetFullPath(sourceDirName);
- String destPath = Path.GetFullPath(destDirName);
-
- if (String.Compare(sourcePath, destPath, StringComparison.OrdinalIgnoreCase) == 0)
- throw new IOException(Environment.GetResourceString("IO.IO_SourceDestMustBeDifferent"));
-
- String sourceRoot = Path.GetPathRoot(sourcePath);
- String destinationRoot = Path.GetPathRoot(destPath);
- if (String.Compare(sourceRoot, destinationRoot, StringComparison.OrdinalIgnoreCase) != 0)
- throw new IOException(Environment.GetResourceString("IO.IO_SourceDestMustHaveSameRoot"));
-
- if (!Win32Native.MoveFile(sourceDirName, destDirName))
- {
- int hr = Marshal.GetLastWin32Error();
- if (hr == Win32Native.ERROR_FILE_NOT_FOUND) // Source dir not found
- {
- hr = Win32Native.ERROR_PATH_NOT_FOUND;
- __Error.WinIOError(hr, sourcePath);
- }
- // This check was originally put in for Win9x (unfortunately without special casing it to be for Win9x only). We can't change the NT codepath now for backcomp reasons.
- if (hr == Win32Native.ERROR_ACCESS_DENIED) // WinNT throws IOException. This check is for Win9x. We can't change it for backcomp.
- throw new IOException(Environment.GetResourceString("UnauthorizedAccess_IODenied_Path", sourceDirName), Win32Native.MakeHRFromErrorCode(hr));
- __Error.WinIOError(hr, String.Empty);
- }
- }
-
- public static void Delete(String path)
- {
- String fullPath = Path.GetFullPath(path);
- Delete(fullPath, path, false);
- }
-
- public static void Delete(String path, bool recursive)
- {
- String fullPath = Path.GetFullPath(path);
- Delete(fullPath, path, recursive);
- }
-
- // Called from DirectoryInfo as well. FullPath is fully qualified,
- // while the user path is used for feedback in exceptions.
- internal static void Delete(String fullPath, String userPath, bool recursive)
- {
- // Do not recursively delete through reparse points. Perhaps in a
- // future version we will add a new flag to control this behavior,
- // but for now we're much safer if we err on the conservative side.
- // This applies to symbolic links and mount points.
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = File.FillAttributeInfo(fullPath, ref data, false, true);
- if (dataInitialised != 0) {
- // Ensure we throw a DirectoryNotFoundException.
- if (dataInitialised == Win32Native.ERROR_FILE_NOT_FOUND)
- dataInitialised = Win32Native.ERROR_PATH_NOT_FOUND;
- __Error.WinIOError(dataInitialised, fullPath);
- }
-
- if (((FileAttributes)data.fileAttributes & FileAttributes.ReparsePoint) != 0)
- recursive = false;
-
- DeleteHelper(fullPath, userPath, recursive, true);
- }
-
- // Note that fullPath is fully qualified, while userPath may be relative.
- private static void DeleteHelper(String fullPath, String userPath, bool recursive, bool throwOnTopLevelDirectoryNotFound)
- {
- bool r;
- int hr;
- Exception ex = null;
-
- // Do not recursively delete through reparse points. Perhaps in a
- // future version we will add a new flag to control this behavior,
- // but for now we're much safer if we err on the conservative side.
- // This applies to symbolic links and mount points.
- // Note the logic to check whether fullPath is a reparse point is
- // in Delete(String, String, bool), and will set "recursive" to false.
- // Note that Win32's DeleteFile and RemoveDirectory will just delete
- // the reparse point itself.
-
- if (recursive) {
- Win32Native.WIN32_FIND_DATA data = new Win32Native.WIN32_FIND_DATA();
-
- // Open a Find handle
- using (SafeFindHandle hnd = Win32Native.FindFirstFile(fullPath + Path.DirectorySeparatorChar + "*", data)) {
- if (hnd.IsInvalid) {
- hr = Marshal.GetLastWin32Error();
- __Error.WinIOError(hr, fullPath);
- }
-
- do {
- bool isDir = (0!=(data.dwFileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY));
- if (isDir) {
- // Skip ".", "..".
- if (data.cFileName.Equals(".") || data.cFileName.Equals(".."))
- continue;
-
- // Recurse for all directories, unless they are
- // reparse points. Do not follow mount points nor
- // symbolic links, but do delete the reparse point
- // itself.
- bool shouldRecurse = (0 == (data.dwFileAttributes & (int) FileAttributes.ReparsePoint));
- if (shouldRecurse) {
- String newFullPath = Path.Combine(fullPath, data.cFileName);
- String newUserPath = Path.Combine(userPath, data.cFileName);
- try {
- DeleteHelper(newFullPath, newUserPath, recursive, false);
- }
- catch(Exception e) {
- if (ex == null) {
- ex = e;
- }
- }
- }
- else {
- // Check to see if this is a mount point, and
- // unmount it.
- if (data.dwReserved0 == Win32Native.IO_REPARSE_TAG_MOUNT_POINT) {
- // Use full path plus a trailing '\'
- String mountPoint = Path.Combine(fullPath, data.cFileName + Path.DirectorySeparatorChar);
- r = Win32Native.DeleteVolumeMountPoint(mountPoint);
- if (!r) {
- hr = Marshal.GetLastWin32Error();
- if (hr != Win32Native.ERROR_PATH_NOT_FOUND) {
- try {
- __Error.WinIOError(hr, data.cFileName);
- }
- catch(Exception e) {
- if (ex == null) {
- ex = e;
- }
- }
- }
- }
- }
-
- // RemoveDirectory on a symbolic link will
- // remove the link itself.
- String reparsePoint = Path.Combine(fullPath, data.cFileName);
- r = Win32Native.RemoveDirectory(reparsePoint);
- if (!r) {
- hr = Marshal.GetLastWin32Error();
- if (hr != Win32Native.ERROR_PATH_NOT_FOUND) {
- try {
- __Error.WinIOError(hr, data.cFileName);
- }
- catch(Exception e) {
- if (ex == null) {
- ex = e;
- }
- }
- }
- }
- }
- }
- else {
- String fileName = Path.Combine(fullPath, data.cFileName);
- r = Win32Native.DeleteFile(fileName);
- if (!r) {
- hr = Marshal.GetLastWin32Error();
- if (hr != Win32Native.ERROR_FILE_NOT_FOUND) {
- try {
- __Error.WinIOError(hr, data.cFileName);
- }
- catch (Exception e) {
- if (ex == null) {
- ex = e;
- }
- }
- }
- }
- }
- } while (Win32Native.FindNextFile(hnd, data));
- // Make sure we quit with a sensible error.
- hr = Marshal.GetLastWin32Error();
- }
-
- if (ex != null)
- throw ex;
- if (hr!=0 && hr!=Win32Native.ERROR_NO_MORE_FILES)
- __Error.WinIOError(hr, userPath);
- }
-
- r = Win32Native.RemoveDirectory(fullPath);
-
- if (!r) {
- hr = Marshal.GetLastWin32Error();
- if (hr == Win32Native.ERROR_FILE_NOT_FOUND) // A dubious error code.
- hr = Win32Native.ERROR_PATH_NOT_FOUND;
- // This check was originally put in for Win9x (unfortunately without special casing it to be for Win9x only). We can't change the NT codepath now for backcomp reasons.
- if (hr == Win32Native.ERROR_ACCESS_DENIED)
- throw new IOException(Environment.GetResourceString("UnauthorizedAccess_IODenied_Path", userPath));
-
- // don't throw the DirectoryNotFoundException since this is a subdir and there could be a race condition
- // between two Directory.Delete callers
- if (hr == Win32Native.ERROR_PATH_NOT_FOUND && !throwOnTopLevelDirectoryNotFound)
- return;
-
- __Error.WinIOError(hr, fullPath);
- }
- }
}
}
diff --git a/src/mscorlib/src/System/IO/DirectoryInfo.cs b/src/mscorlib/src/System/IO/DirectoryInfo.cs
deleted file mode 100644
index c4c350d245..0000000000
--- a/src/mscorlib/src/System/IO/DirectoryInfo.cs
+++ /dev/null
@@ -1,511 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-**
-**
-** Purpose: Exposes routines for enumerating through a
-** directory.
-**
-** April 11,2000
-**
-===========================================================*/
-
-using System.Collections.Generic;
-using Microsoft.Win32;
-using System.Runtime.InteropServices;
-using System.Runtime.Serialization;
-using System.Runtime.Versioning;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-
-namespace System.IO
-{
- [Serializable]
- [ComVisible(true)]
- public sealed class DirectoryInfo : FileSystemInfo
- {
- // Migrating InheritanceDemands requires this default ctor, so we can annotate it.
- private DirectoryInfo(){}
-
- public DirectoryInfo(String path)
- {
- if (path==null)
- throw new ArgumentNullException(nameof(path));
- Contract.EndContractBlock();
-
- Init(path);
- }
-
- private void Init(String path)
- {
- // Special case "<DriveLetter>:" to point to "<CurrentDirectory>" instead
- if ((path.Length == 2) && (path[1] == ':'))
- {
- OriginalPath = ".";
- }
- else
- {
- OriginalPath = path;
- }
-
- FullPath = Path.GetFullPath(path); ;
- DisplayPath = GetDisplayName(OriginalPath, FullPath);
- }
-
- internal DirectoryInfo(String fullPath, bool junk)
- {
- Debug.Assert(PathInternal.GetRootLength(fullPath) > 0, "fullPath must be fully qualified!");
- // Fast path when we know a DirectoryInfo exists.
- OriginalPath = Path.GetFileName(fullPath);
-
- FullPath = fullPath;
- DisplayPath = GetDisplayName(OriginalPath, FullPath);
- }
-
- private DirectoryInfo(SerializationInfo info, StreamingContext context) : base(info, context)
- {
- DisplayPath = GetDisplayName(OriginalPath, FullPath);
- }
-
- public override String Name
- {
- get
- {
- // DisplayPath is dir name for coreclr
- return DisplayPath;
- }
- }
-
- public DirectoryInfo Parent {
- get {
- String parentName;
- // FullPath might be either "c:\bar" or "c:\bar\". Handle
- // those cases, as well as avoiding mangling "c:\".
- String s = FullPath;
- if (s.Length > 3 && s.EndsWith(Path.DirectorySeparatorChar))
- s = FullPath.Substring(0, FullPath.Length - 1);
- parentName = Path.GetDirectoryName(s);
- if (parentName==null)
- return null;
-
- return new DirectoryInfo(parentName, false);
- }
- }
-
- public DirectoryInfo CreateSubdirectory(String path) {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.EndContractBlock();
-
- return CreateSubdirectory(path, null);
- }
-
- public DirectoryInfo CreateSubdirectory(String path, Object directorySecurity)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.EndContractBlock();
-
- return CreateSubdirectoryHelper(path, directorySecurity);
- }
-
- private DirectoryInfo CreateSubdirectoryHelper(String path, Object directorySecurity)
- {
- Contract.Requires(path != null);
-
- String newDirs = Path.Combine(FullPath, path);
- String fullPath = Path.GetFullPath(newDirs);
-
- if (0!=String.Compare(FullPath,0,fullPath,0, FullPath.Length,StringComparison.OrdinalIgnoreCase)) {
- String displayPath = __Error.GetDisplayablePath(DisplayPath, false);
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidSubPath", path, displayPath));
- }
-
- Directory.InternalCreateDirectory(fullPath, path, directorySecurity);
-
- // Check for read permission to directory we hand back by calling this constructor.
- return new DirectoryInfo(fullPath);
- }
-
- public void Create()
- {
- Directory.InternalCreateDirectory(FullPath, OriginalPath, null);
- }
-
- // Tests if the given path refers to an existing DirectoryInfo on disk.
- public override bool Exists {
- get
- {
- try
- {
- if (_dataInitialised == -1)
- Refresh();
- if (_dataInitialised != 0) // Refresh was unable to initialise the data
- return false;
- return _data.fileAttributes != -1 && (_data.fileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) != 0;
- }
- catch
- {
- return false;
- }
- }
- }
-
- // Returns an array of Files in the current DirectoryInfo matching the
- // given search criteria (ie, "*.txt").
- public FileInfo[] GetFiles(String searchPattern)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.EndContractBlock();
-
- return InternalGetFiles(searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of Files in the current DirectoryInfo matching the
- // given search criteria (ie, "*.txt").
- public FileInfo[] GetFiles(String searchPattern, SearchOption searchOption)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.EndContractBlock();
-
- return InternalGetFiles(searchPattern, searchOption);
- }
-
- // Returns an array of Files in the current DirectoryInfo matching the
- // given search criteria (ie, "*.txt").
- private FileInfo[] InternalGetFiles(String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- IEnumerable<FileInfo> enble = FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
- List<FileInfo> fileList = new List<FileInfo>(enble);
- return fileList.ToArray();
- }
-
- // Returns an array of Files in the DirectoryInfo specified by path
- public FileInfo[] GetFiles()
- {
- return InternalGetFiles("*", SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of Directories in the current directory.
- public DirectoryInfo[] GetDirectories()
- {
- return InternalGetDirectories("*", SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of strongly typed FileSystemInfo entries in the path with the
- // given search criteria (ie, "*.txt").
- public FileSystemInfo[] GetFileSystemInfos(String searchPattern)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.EndContractBlock();
-
- return InternalGetFileSystemInfos(searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of strongly typed FileSystemInfo entries in the path with the
- // given search criteria (ie, "*.txt").
- public FileSystemInfo[] GetFileSystemInfos(String searchPattern, SearchOption searchOption)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.EndContractBlock();
-
- return InternalGetFileSystemInfos(searchPattern, searchOption);
- }
-
- // Returns an array of strongly typed FileSystemInfo entries in the path with the
- // given search criteria (ie, "*.txt").
- private FileSystemInfo[] InternalGetFileSystemInfos(String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- IEnumerable<FileSystemInfo> enble = FileSystemEnumerableFactory.CreateFileSystemInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
- List<FileSystemInfo> fileList = new List<FileSystemInfo>(enble);
- return fileList.ToArray();
- }
-
- // Returns an array of strongly typed FileSystemInfo entries which will contain a listing
- // of all the files and directories.
- public FileSystemInfo[] GetFileSystemInfos()
- {
- return InternalGetFileSystemInfos("*", SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of Directories in the current DirectoryInfo matching the
- // given search criteria (ie, "System*" could match the System & System32
- // directories).
- public DirectoryInfo[] GetDirectories(String searchPattern)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.EndContractBlock();
-
- return InternalGetDirectories(searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- // Returns an array of Directories in the current DirectoryInfo matching the
- // given search criteria (ie, "System*" could match the System & System32
- // directories).
- public DirectoryInfo[] GetDirectories(String searchPattern, SearchOption searchOption)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.EndContractBlock();
-
- return InternalGetDirectories(searchPattern, searchOption);
- }
-
- // Returns an array of Directories in the current DirectoryInfo matching the
- // given search criteria (ie, "System*" could match the System & System32
- // directories).
- private DirectoryInfo[] InternalGetDirectories(String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- IEnumerable<DirectoryInfo> enble = FileSystemEnumerableFactory.CreateDirectoryInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
- List<DirectoryInfo> fileList = new List<DirectoryInfo>(enble);
- return fileList.ToArray();
- }
-
- public IEnumerable<DirectoryInfo> EnumerateDirectories()
- {
- return InternalEnumerateDirectories("*", SearchOption.TopDirectoryOnly);
- }
-
- public IEnumerable<DirectoryInfo> EnumerateDirectories(String searchPattern)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.EndContractBlock();
-
- return InternalEnumerateDirectories(searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- public IEnumerable<DirectoryInfo> EnumerateDirectories(String searchPattern, SearchOption searchOption)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.EndContractBlock();
-
- return InternalEnumerateDirectories(searchPattern, searchOption);
- }
-
- private IEnumerable<DirectoryInfo> InternalEnumerateDirectories(String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- return FileSystemEnumerableFactory.CreateDirectoryInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
- }
-
- public IEnumerable<FileInfo> EnumerateFiles()
- {
- return InternalEnumerateFiles("*", SearchOption.TopDirectoryOnly);
- }
-
- public IEnumerable<FileInfo> EnumerateFiles(String searchPattern)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.EndContractBlock();
-
- return InternalEnumerateFiles(searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- public IEnumerable<FileInfo> EnumerateFiles(String searchPattern, SearchOption searchOption)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.EndContractBlock();
-
- return InternalEnumerateFiles(searchPattern, searchOption);
- }
-
- private IEnumerable<FileInfo> InternalEnumerateFiles(String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- return FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
- }
-
- public IEnumerable<FileSystemInfo> EnumerateFileSystemInfos()
- {
- return InternalEnumerateFileSystemInfos("*", SearchOption.TopDirectoryOnly);
- }
-
- public IEnumerable<FileSystemInfo> EnumerateFileSystemInfos(String searchPattern)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- Contract.EndContractBlock();
-
- return InternalEnumerateFileSystemInfos(searchPattern, SearchOption.TopDirectoryOnly);
- }
-
- public IEnumerable<FileSystemInfo> EnumerateFileSystemInfos(String searchPattern, SearchOption searchOption)
- {
- if (searchPattern == null)
- throw new ArgumentNullException(nameof(searchPattern));
- if ((searchOption != SearchOption.TopDirectoryOnly) && (searchOption != SearchOption.AllDirectories))
- throw new ArgumentOutOfRangeException(nameof(searchOption), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- Contract.EndContractBlock();
-
- return InternalEnumerateFileSystemInfos(searchPattern, searchOption);
- }
-
- private IEnumerable<FileSystemInfo> InternalEnumerateFileSystemInfos(String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(searchPattern != null);
- Contract.Requires(searchOption == SearchOption.AllDirectories || searchOption == SearchOption.TopDirectoryOnly);
-
- return FileSystemEnumerableFactory.CreateFileSystemInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
- }
-
- // Returns the root portion of the given path. The resulting string
- // consists of those rightmost characters of the path that constitute the
- // root of the path. Possible patterns for the resulting string are: An
- // empty string (a relative path on the current drive), "\" (an absolute
- // path on the current drive), "X:" (a relative path on a given drive,
- // where X is the drive letter), "X:\" (an absolute path on a given drive),
- // and "\\server\share" (a UNC path for a given server and share name).
- // The resulting string is null if path is null.
- public DirectoryInfo Root {
- get
- {
- int rootLength = PathInternal.GetRootLength(FullPath);
- String rootPath = FullPath.Substring(0, rootLength);
-
- return new DirectoryInfo(rootPath);
- }
- }
-
- public void MoveTo(String destDirName) {
- if (destDirName==null)
- throw new ArgumentNullException(nameof(destDirName));
- if (destDirName.Length==0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(destDirName));
- Contract.EndContractBlock();
-
- String fullDestDirName = Path.GetFullPath(destDirName);
- if (!fullDestDirName.EndsWith(Path.DirectorySeparatorChar))
- fullDestDirName = fullDestDirName + Path.DirectorySeparatorChar;
-
- String fullSourcePath;
- if (FullPath.EndsWith(Path.DirectorySeparatorChar))
- fullSourcePath = FullPath;
- else
- fullSourcePath = FullPath + Path.DirectorySeparatorChar;
-
- if (String.Compare(fullSourcePath, fullDestDirName, StringComparison.OrdinalIgnoreCase) == 0)
- throw new IOException(Environment.GetResourceString("IO.IO_SourceDestMustBeDifferent"));
-
- String sourceRoot = Path.GetPathRoot(fullSourcePath);
- String destinationRoot = Path.GetPathRoot(fullDestDirName);
-
- if (String.Compare(sourceRoot, destinationRoot, StringComparison.OrdinalIgnoreCase) != 0)
- throw new IOException(Environment.GetResourceString("IO.IO_SourceDestMustHaveSameRoot"));
-
- if (!Win32Native.MoveFile(FullPath, destDirName))
- {
- int hr = Marshal.GetLastWin32Error();
- if (hr == Win32Native.ERROR_FILE_NOT_FOUND) // A dubious error code
- {
- hr = Win32Native.ERROR_PATH_NOT_FOUND;
- __Error.WinIOError(hr, DisplayPath);
- }
-
- if (hr == Win32Native.ERROR_ACCESS_DENIED) // We did this for Win9x. We can't change it for backcomp.
- throw new IOException(Environment.GetResourceString("UnauthorizedAccess_IODenied_Path", DisplayPath));
-
- __Error.WinIOError(hr,String.Empty);
- }
- FullPath = fullDestDirName;
- OriginalPath = destDirName;
- DisplayPath = GetDisplayName(OriginalPath, FullPath);
-
- // Flush any cached information about the directory.
- _dataInitialised = -1;
- }
-
- public override void Delete()
- {
- Directory.Delete(FullPath, OriginalPath, false);
- }
-
- public void Delete(bool recursive)
- {
- Directory.Delete(FullPath, OriginalPath, recursive);
- }
-
- // Returns the fully qualified path
- public override String ToString()
- {
- return DisplayPath;
- }
-
- private static String GetDisplayName(String originalPath, String fullPath)
- {
- Debug.Assert(originalPath != null);
- Debug.Assert(fullPath != null);
-
- String displayName = "";
-
- // Special case "<DriveLetter>:" to point to "<CurrentDirectory>" instead
- if ((originalPath.Length == 2) && (originalPath[1] == ':'))
- {
- displayName = ".";
- }
- else
- {
- displayName = GetDirName(fullPath);
- }
- return displayName;
- }
-
- private static String GetDirName(String fullPath)
- {
- Debug.Assert(fullPath != null);
-
- String dirName = null;
- if (fullPath.Length > 3)
- {
- String s = fullPath;
- if (fullPath.EndsWith(Path.DirectorySeparatorChar))
- {
- s = fullPath.Substring(0, fullPath.Length - 1);
- }
- dirName = Path.GetFileName(s);
- }
- else
- {
- dirName = fullPath; // For rooted paths, like "c:\"
- }
- return dirName;
- }
- }
-}
-
diff --git a/src/mscorlib/src/System/IO/DirectoryNotFoundException.cs b/src/mscorlib/src/System/IO/DirectoryNotFoundException.cs
index 09d7e7d4e7..21211a61e7 100644
--- a/src/mscorlib/src/System/IO/DirectoryNotFoundException.cs
+++ b/src/mscorlib/src/System/IO/DirectoryNotFoundException.cs
@@ -23,7 +23,6 @@ namespace System.IO {
* and STG_E_PATHNOTFOUND (0x80030003).
*/
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class DirectoryNotFoundException : IOException {
public DirectoryNotFoundException()
: base(Environment.GetResourceString("Arg_DirectoryNotFoundException")) {
diff --git a/src/mscorlib/src/System/IO/DriveNotFoundException.cs b/src/mscorlib/src/System/IO/DriveNotFoundException.cs
index 04155bcc0e..f0245a8b28 100644
--- a/src/mscorlib/src/System/IO/DriveNotFoundException.cs
+++ b/src/mscorlib/src/System/IO/DriveNotFoundException.cs
@@ -17,8 +17,7 @@ namespace System.IO {
//Thrown when trying to access a drive that is not availabe.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class DriveNotFoundException : IOException {
+ internal class DriveNotFoundException : IOException {
public DriveNotFoundException()
: base(Environment.GetResourceString("Arg_DriveNotFoundException")) {
SetErrorCode(__HResults.COR_E_DIRECTORYNOTFOUND);
@@ -28,11 +27,6 @@ namespace System.IO {
: base(message) {
SetErrorCode(__HResults.COR_E_DIRECTORYNOTFOUND);
}
-
- public DriveNotFoundException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_DIRECTORYNOTFOUND);
- }
protected DriveNotFoundException(SerializationInfo info, StreamingContext context) : base(info, context) {
}
diff --git a/src/mscorlib/src/System/IO/EndOfStreamException.cs b/src/mscorlib/src/System/IO/EndOfStreamException.cs
index 60f5109a0f..558c792a9e 100644
--- a/src/mscorlib/src/System/IO/EndOfStreamException.cs
+++ b/src/mscorlib/src/System/IO/EndOfStreamException.cs
@@ -18,7 +18,6 @@ using System.Runtime.Serialization;
namespace System.IO {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class EndOfStreamException : IOException
{
public EndOfStreamException()
diff --git a/src/mscorlib/src/System/IO/File.cs b/src/mscorlib/src/System/IO/File.cs
index 9f89f81a91..7cc3f431a9 100644
--- a/src/mscorlib/src/System/IO/File.cs
+++ b/src/mscorlib/src/System/IO/File.cs
@@ -14,7 +14,6 @@
**
===========================================================*/
-using System.Security.Permissions;
using Win32Native = Microsoft.Win32.Win32Native;
using System.Runtime.InteropServices;
using System.Security;
@@ -28,155 +27,13 @@ namespace System.IO
{
// Class for creating FileStream objects, and some basic file management
// routines such as Delete, etc.
- [ComVisible(true)]
- public static class File
+ internal static class File
{
private const int ERROR_INVALID_PARAMETER = 87;
internal const int GENERIC_READ = unchecked((int)0x80000000);
private const int GetFileExInfoStandard = 0;
- public static StreamReader OpenText(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.EndContractBlock();
- return new StreamReader(path);
- }
-
- public static StreamWriter CreateText(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.EndContractBlock();
- return new StreamWriter(path,false);
- }
-
- public static StreamWriter AppendText(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.EndContractBlock();
- return new StreamWriter(path,true);
- }
-
-
- // Copies an existing file to a new file. An exception is raised if the
- // destination file already exists. Use the
- // Copy(String, String, boolean) method to allow
- // overwriting an existing file.
- public static void Copy(String sourceFileName, String destFileName) {
- if (sourceFileName == null)
- throw new ArgumentNullException(nameof(sourceFileName), Environment.GetResourceString("ArgumentNull_FileName"));
- if (destFileName == null)
- throw new ArgumentNullException(nameof(destFileName), Environment.GetResourceString("ArgumentNull_FileName"));
- if (sourceFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(sourceFileName));
- if (destFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(destFileName));
- Contract.EndContractBlock();
-
- InternalCopy(sourceFileName, destFileName, false);
- }
-
- // Copies an existing file to a new file. If overwrite is
- // false, then an IOException is thrown if the destination file
- // already exists. If overwrite is true, the file is
- // overwritten.
- public static void Copy(String sourceFileName, String destFileName, bool overwrite) {
- if (sourceFileName == null)
- throw new ArgumentNullException(nameof(sourceFileName), Environment.GetResourceString("ArgumentNull_FileName"));
- if (destFileName == null)
- throw new ArgumentNullException(nameof(destFileName), Environment.GetResourceString("ArgumentNull_FileName"));
- if (sourceFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(sourceFileName));
- if (destFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(destFileName));
- Contract.EndContractBlock();
-
- InternalCopy(sourceFileName, destFileName, overwrite);
- }
-
- /// <devdoc>
- /// Note: This returns the fully qualified name of the destination file.
- /// </devdoc>
- internal static String InternalCopy(String sourceFileName, String destFileName, bool overwrite)
- {
- Contract.Requires(sourceFileName != null);
- Contract.Requires(destFileName != null);
- Contract.Requires(sourceFileName.Length > 0);
- Contract.Requires(destFileName.Length > 0);
-
- String fullSourceFileName = Path.GetFullPath(sourceFileName);
- String fullDestFileName = Path.GetFullPath(destFileName);
-
- bool r = Win32Native.CopyFile(fullSourceFileName, fullDestFileName, !overwrite);
- if (!r) {
- // Save Win32 error because subsequent checks will overwrite this HRESULT.
- int errorCode = Marshal.GetLastWin32Error();
- String fileName = destFileName;
-
- if (errorCode != Win32Native.ERROR_FILE_EXISTS) {
- if (errorCode == Win32Native.ERROR_ACCESS_DENIED) {
- if (Directory.InternalExists(fullDestFileName))
- throw new IOException(Environment.GetResourceString("Arg_FileIsDirectory_Name", destFileName), Win32Native.ERROR_ACCESS_DENIED, fullDestFileName);
- }
- }
-
- __Error.WinIOError(errorCode, fileName);
- }
-
- return fullDestFileName;
- }
-
- // Creates a file in a particular path. If the file exists, it is replaced.
- // The file is opened with ReadWrite accessand cannot be opened by another
- // application until it has been closed. An IOException is thrown if the
- // directory specified doesn't exist.
- public static FileStream Create(String path) {
- return Create(path, FileStream.DefaultBufferSize);
- }
-
- // Creates a file in a particular path. If the file exists, it is replaced.
- // The file is opened with ReadWrite access and cannot be opened by another
- // application until it has been closed. An IOException is thrown if the
- // directory specified doesn't exist.
- public static FileStream Create(String path, int bufferSize) {
- return new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize);
- }
-
- public static FileStream Create(String path, int bufferSize, FileOptions options) {
- return new FileStream(path, FileMode.Create, FileAccess.ReadWrite,
- FileShare.None, bufferSize, options);
- }
-
- // Deletes a file. The file specified by the designated path is deleted.
- // If the file does not exist, Delete succeeds without throwing
- // an exception.
- //
- // On NT, Delete will fail for a file that is open for normal I/O
- // or a file that is memory mapped.
- public static void Delete(String path) {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- Contract.EndContractBlock();
-
- InternalDelete(path);
- }
-
- internal static void InternalDelete(String path)
- {
- String fullPath = Path.GetFullPath(path);
- bool r = Win32Native.DeleteFile(fullPath);
- if (!r) {
- int hr = Marshal.GetLastWin32Error();
- if (hr==Win32Native.ERROR_FILE_NOT_FOUND)
- return;
- else
- __Error.WinIOError(hr, fullPath);
- }
- }
-
// Tests if a file exists. The result is true if the file
// given by the specified path exists; otherwise, the result is
// false. Note that if path describes a directory,
@@ -225,193 +82,11 @@ namespace System.IO
&& ((data.fileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) == 0);
}
- public static FileStream Open(String path, FileMode mode) {
- return Open(path, mode, (mode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite), FileShare.None);
- }
-
- public static FileStream Open(String path, FileMode mode, FileAccess access) {
- return Open(path,mode, access, FileShare.None);
- }
-
- public static FileStream Open(String path, FileMode mode, FileAccess access, FileShare share) {
- return new FileStream(path, mode, access, share);
- }
-
- public static DateTime GetCreationTime(String path)
- {
- return InternalGetCreationTimeUtc(path).ToLocalTime();
- }
-
- public static DateTime GetCreationTimeUtc(String path)
- {
- return InternalGetCreationTimeUtc(path); // this API isn't exposed in Silverlight
- }
-
- private static DateTime InternalGetCreationTimeUtc(String path)
- {
- String fullPath = Path.GetFullPath(path);
-
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = FillAttributeInfo(fullPath, ref data, false, false);
- if (dataInitialised != 0)
- __Error.WinIOError(dataInitialised, fullPath);
-
- long dt = ((long)(data.ftCreationTimeHigh) << 32) | ((long)data.ftCreationTimeLow);
- return DateTime.FromFileTimeUtc(dt);
- }
-
- public static DateTime GetLastAccessTime(String path)
- {
- return InternalGetLastAccessTimeUtc(path).ToLocalTime();
- }
-
- public static DateTime GetLastAccessTimeUtc(String path)
- {
- return InternalGetLastAccessTimeUtc(path);
- }
-
- private static DateTime InternalGetLastAccessTimeUtc(String path)
- {
- String fullPath = Path.GetFullPath(path);
-
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = FillAttributeInfo(fullPath, ref data, false, false);
- if (dataInitialised != 0)
- __Error.WinIOError(dataInitialised, fullPath);
-
- long dt = ((long)(data.ftLastAccessTimeHigh) << 32) | ((long)data.ftLastAccessTimeLow);
- return DateTime.FromFileTimeUtc(dt);
- }
-
- public static DateTime GetLastWriteTime(String path)
- {
- return InternalGetLastWriteTimeUtc(path).ToLocalTime();
- }
-
- public static DateTime GetLastWriteTimeUtc(String path)
- {
- return InternalGetLastWriteTimeUtc(path);
- }
-
- private static DateTime InternalGetLastWriteTimeUtc(String path)
- {
- String fullPath = Path.GetFullPath(path);
-
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = FillAttributeInfo(fullPath, ref data, false, false);
- if (dataInitialised != 0)
- __Error.WinIOError(dataInitialised, fullPath);
-
- long dt = ((long)data.ftLastWriteTimeHigh << 32) | ((long)data.ftLastWriteTimeLow);
- return DateTime.FromFileTimeUtc(dt);
- }
-
- public static FileAttributes GetAttributes(String path)
- {
- String fullPath = Path.GetFullPath(path);
-
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = FillAttributeInfo(fullPath, ref data, false, true);
- if (dataInitialised != 0)
- __Error.WinIOError(dataInitialised, fullPath);
-
- return (FileAttributes) data.fileAttributes;
- }
-
- public static void SetAttributes(String path, FileAttributes fileAttributes)
- {
- String fullPath = Path.GetFullPath(path);
- bool r = Win32Native.SetFileAttributes(fullPath, (int) fileAttributes);
- if (!r) {
- int hr = Marshal.GetLastWin32Error();
- if (hr==ERROR_INVALID_PARAMETER)
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidFileAttrs"));
- __Error.WinIOError(hr, fullPath);
- }
- }
-
- public static FileStream OpenRead(String path) {
- return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
- }
-
- public static FileStream OpenWrite(String path) {
- return new FileStream(path, FileMode.OpenOrCreate,
- FileAccess.Write, FileShare.None);
- }
-
- public static String ReadAllText(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- return InternalReadAllText(path, Encoding.UTF8);
- }
-
- public static String ReadAllText(String path, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (encoding == null)
- throw new ArgumentNullException(nameof(encoding));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- return InternalReadAllText(path, encoding);
- }
-
- private static String InternalReadAllText(String path, Encoding encoding)
- {
- Contract.Requires(path != null);
- Contract.Requires(encoding != null);
- Contract.Requires(path.Length > 0);
-
- using (StreamReader sr = new StreamReader(path, encoding, true, StreamReader.DefaultBufferSize))
- return sr.ReadToEnd();
- }
-
- public static void WriteAllText(String path, String contents)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalWriteAllText(path, contents, StreamWriter.UTF8NoBOM);
- }
-
- public static void WriteAllText(String path, String contents, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (encoding == null)
- throw new ArgumentNullException(nameof(encoding));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalWriteAllText(path, contents, encoding);
- }
-
- private static void InternalWriteAllText(String path, String contents, Encoding encoding)
- {
- Contract.Requires(path != null);
- Contract.Requires(encoding != null);
- Contract.Requires(path.Length > 0);
-
- using (StreamWriter sw = new StreamWriter(path, false, encoding, StreamWriter.DefaultBufferSize))
- sw.Write(contents);
- }
-
public static byte[] ReadAllBytes(String path)
{
byte[] bytes;
using(FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read,
- FileStream.DefaultBufferSize, FileOptions.None, Path.GetFileName(path), false, false)) {
+ FileStream.DefaultBufferSize, FileOptions.None)) {
// Do a blocking read
int index = 0;
long fileLength = fs.Length;
@@ -430,32 +105,7 @@ namespace System.IO
return bytes;
}
- public static void WriteAllBytes(String path, byte[] bytes)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path), Environment.GetResourceString("ArgumentNull_Path"));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- if (bytes == null)
- throw new ArgumentNullException(nameof(bytes));
- Contract.EndContractBlock();
-
- InternalWriteAllBytes(path, bytes);
- }
-
- private static void InternalWriteAllBytes(String path, byte[] bytes)
- {
- Contract.Requires(path != null);
- Contract.Requires(path.Length != 0);
- Contract.Requires(bytes != null);
-
- using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read,
- FileStream.DefaultBufferSize, FileOptions.None, Path.GetFileName(path), false, false))
- {
- fs.Write(bytes, 0, bytes.Length);
- }
- }
-
+#if PLATFORM_UNIX
public static String[] ReadAllLines(String path)
{
if (path == null)
@@ -467,19 +117,6 @@ namespace System.IO
return InternalReadAllLines(path, Encoding.UTF8);
}
- public static String[] ReadAllLines(String path, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (encoding == null)
- throw new ArgumentNullException(nameof(encoding));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- return InternalReadAllLines(path, encoding);
- }
-
private static String[] InternalReadAllLines(String path, Encoding encoding)
{
Contract.Requires(path != null);
@@ -495,236 +132,8 @@ namespace System.IO
return lines.ToArray();
}
-
- public static IEnumerable<String> ReadLines(String path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"), nameof(path));
- Contract.EndContractBlock();
-
- return ReadLinesIterator.CreateIterator(path, Encoding.UTF8);
- }
-
- public static IEnumerable<String> ReadLines(String path, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (encoding == null)
- throw new ArgumentNullException(nameof(encoding));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"), nameof(path));
- Contract.EndContractBlock();
-
- return ReadLinesIterator.CreateIterator(path, encoding);
- }
-
- public static void WriteAllLines(String path, String[] contents)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (contents == null)
- throw new ArgumentNullException(nameof(contents));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalWriteAllLines(new StreamWriter(path, false, StreamWriter.UTF8NoBOM), contents);
- }
-
- public static void WriteAllLines(String path, String[] contents, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (contents == null)
- throw new ArgumentNullException(nameof(contents));
- if (encoding == null)
- throw new ArgumentNullException(nameof(encoding));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalWriteAllLines(new StreamWriter(path, false, encoding), contents);
- }
-
- public static void WriteAllLines(String path, IEnumerable<String> contents)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (contents == null)
- throw new ArgumentNullException(nameof(contents));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalWriteAllLines(new StreamWriter(path, false, StreamWriter.UTF8NoBOM), contents);
- }
-
- public static void WriteAllLines(String path, IEnumerable<String> contents, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (contents == null)
- throw new ArgumentNullException(nameof(contents));
- if (encoding == null)
- throw new ArgumentNullException(nameof(encoding));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalWriteAllLines(new StreamWriter(path, false, encoding), contents);
- }
-
- private static void InternalWriteAllLines(TextWriter writer, IEnumerable<String> contents)
- {
- Contract.Requires(writer != null);
- Contract.Requires(contents != null);
-
- using (writer)
- {
- foreach (String line in contents)
- {
- writer.WriteLine(line);
- }
- }
- }
-
- public static void AppendAllText(String path, String contents)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalAppendAllText(path, contents, StreamWriter.UTF8NoBOM);
- }
-
- public static void AppendAllText(String path, String contents, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (encoding == null)
- throw new ArgumentNullException(nameof(encoding));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalAppendAllText(path, contents, encoding);
- }
-
- private static void InternalAppendAllText(String path, String contents, Encoding encoding)
- {
- Contract.Requires(path != null);
- Contract.Requires(encoding != null);
- Contract.Requires(path.Length > 0);
-
- using (StreamWriter sw = new StreamWriter(path, true, encoding))
- sw.Write(contents);
- }
-
- public static void AppendAllLines(String path, IEnumerable<String> contents)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (contents == null)
- throw new ArgumentNullException(nameof(contents));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalWriteAllLines(new StreamWriter(path, true, StreamWriter.UTF8NoBOM), contents);
- }
-
- public static void AppendAllLines(String path, IEnumerable<String> contents, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (contents == null)
- throw new ArgumentNullException(nameof(contents));
- if (encoding == null)
- throw new ArgumentNullException(nameof(encoding));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
-
- InternalWriteAllLines(new StreamWriter(path, true, encoding), contents);
- }
-
- // Moves a specified file to a new location and potentially a new file name.
- // This method does work across volumes.
- public static void Move(String sourceFileName, String destFileName) {
- InternalMove(sourceFileName, destFileName);
- }
-
- private static void InternalMove(String sourceFileName, String destFileName) {
- if (sourceFileName == null)
- throw new ArgumentNullException(nameof(sourceFileName), Environment.GetResourceString("ArgumentNull_FileName"));
- if (destFileName == null)
- throw new ArgumentNullException(nameof(destFileName), Environment.GetResourceString("ArgumentNull_FileName"));
- if (sourceFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(sourceFileName));
- if (destFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(destFileName));
- Contract.EndContractBlock();
-
- String fullSourceFileName = Path.GetFullPath(sourceFileName);
- String fullDestFileName = Path.GetFullPath(destFileName);
-
- if (!InternalExists(fullSourceFileName))
- __Error.WinIOError(Win32Native.ERROR_FILE_NOT_FOUND, fullSourceFileName);
-
- if (!Win32Native.MoveFile(fullSourceFileName, fullDestFileName))
- {
- __Error.WinIOError();
- }
- }
-
-
- public static void Replace(String sourceFileName, String destinationFileName, String destinationBackupFileName)
- {
- if (sourceFileName == null)
- throw new ArgumentNullException(nameof(sourceFileName));
- if (destinationFileName == null)
- throw new ArgumentNullException(nameof(destinationFileName));
- Contract.EndContractBlock();
-
- InternalReplace(sourceFileName, destinationFileName, destinationBackupFileName, false);
- }
-
- public static void Replace(String sourceFileName, String destinationFileName, String destinationBackupFileName, bool ignoreMetadataErrors)
- {
- if (sourceFileName == null)
- throw new ArgumentNullException(nameof(sourceFileName));
- if (destinationFileName == null)
- throw new ArgumentNullException(nameof(destinationFileName));
- Contract.EndContractBlock();
-
- InternalReplace(sourceFileName, destinationFileName, destinationBackupFileName, ignoreMetadataErrors);
- }
-
- private static void InternalReplace(String sourceFileName, String destinationFileName, String destinationBackupFileName, bool ignoreMetadataErrors)
- {
- Contract.Requires(sourceFileName != null);
- Contract.Requires(destinationFileName != null);
-
- String fullSrcPath = Path.GetFullPath(sourceFileName);
- String fullDestPath = Path.GetFullPath(destinationFileName);
- String fullBackupPath = null;
- if (destinationBackupFileName != null)
- fullBackupPath = Path.GetFullPath(destinationBackupFileName);
-
- int flags = Win32Native.REPLACEFILE_WRITE_THROUGH;
- if (ignoreMetadataErrors)
- flags |= Win32Native.REPLACEFILE_IGNORE_MERGE_ERRORS;
-
- bool r = Win32Native.ReplaceFile(fullDestPath, fullSrcPath, fullBackupPath, flags, IntPtr.Zero, IntPtr.Zero);
- if (!r)
- __Error.WinIOError();
- }
-
-
+#endif // PLATFORM_UNIX
+
// Returns 0 on success, otherwise a Win32 error code. Note that
// classes should use -1 as the uninitialized state for dataInitialized.
internal static int FillAttributeInfo(String path, ref Win32Native.WIN32_FILE_ATTRIBUTE_DATA data, bool tryagain, bool returnErrorOnNotFound)
diff --git a/src/mscorlib/src/System/IO/FileAccess.cs b/src/mscorlib/src/System/IO/FileAccess.cs
index f708a284c1..707b58f78b 100644
--- a/src/mscorlib/src/System/IO/FileAccess.cs
+++ b/src/mscorlib/src/System/IO/FileAccess.cs
@@ -23,7 +23,6 @@ namespace System.IO {
//
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum FileAccess
{
// Specifies read access to the file. Data can be read from the file and
diff --git a/src/mscorlib/src/System/IO/FileAttributes.cs b/src/mscorlib/src/System/IO/FileAttributes.cs
deleted file mode 100644
index 51ef597f9d..0000000000
--- a/src/mscorlib/src/System/IO/FileAttributes.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-** Purpose: File attribute flags corresponding to NT's flags.
-**
-**
-===========================================================*/
-using System;
-
-namespace System.IO
-{
- // File attributes for use with the FileEnumerator class.
- // These constants correspond to the constants in WinNT.h.
- [Serializable]
- [Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum FileAttributes
- {
- // From WinNT.h (FILE_ATTRIBUTE_XXX)
- ReadOnly = 0x1,
- Hidden = 0x2,
- System = 0x4,
- Directory = 0x10,
- Archive = 0x20,
- Device = 0x40,
- Normal = 0x80,
- Temporary = 0x100,
- SparseFile = 0x200,
- ReparsePoint = 0x400,
- Compressed = 0x800,
- Offline = 0x1000,
- NotContentIndexed = 0x2000,
- Encrypted = 0x4000,
- }
-}
diff --git a/src/mscorlib/src/System/IO/FileInfo.cs b/src/mscorlib/src/System/IO/FileInfo.cs
deleted file mode 100644
index 32622c63a1..0000000000
--- a/src/mscorlib/src/System/IO/FileInfo.cs
+++ /dev/null
@@ -1,270 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Win32Native = Microsoft.Win32.Win32Native;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Runtime.Serialization;
-using System.Globalization;
-using System.Runtime.Versioning;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-
-namespace System.IO
-{
- // Class for creating FileStream objects, and some basic file management
- // routines such as Delete, etc.
- [Serializable]
- [ComVisible(true)]
- public sealed class FileInfo: FileSystemInfo
- {
- private String _name;
-
- // Migrating InheritanceDemands requires this default ctor, so we can annotate it.
- private FileInfo(){}
-
- public FileInfo(String fileName)
- {
- if (fileName == null)
- throw new ArgumentNullException(nameof(fileName));
- Contract.EndContractBlock();
-
- Init(fileName);
- }
-
- private void Init(String fileName)
- {
- OriginalPath = fileName;
- _name = Path.GetFileName(fileName);
- FullPath = Path.GetFullPath(fileName);
- DisplayPath = GetDisplayPath(fileName);
- }
-
- private String GetDisplayPath(String originalPath)
- {
- return Path.GetFileName(originalPath);
- }
-
- private FileInfo(SerializationInfo info, StreamingContext context) : base(info, context)
- {
- _name = Path.GetFileName(OriginalPath);
- DisplayPath = GetDisplayPath(OriginalPath);
- }
-
- internal FileInfo(String fullPath, bool ignoreThis)
- {
- Debug.Assert(PathInternal.GetRootLength(fullPath) > 0, "fullPath must be fully qualified!");
- _name = Path.GetFileName(fullPath);
- OriginalPath = _name;
- FullPath = fullPath;
- DisplayPath = _name;
- }
-
- public override String Name {
- get { return _name; }
- }
-
- public long Length {
- get {
- if (_dataInitialised == -1)
- Refresh();
-
- if (_dataInitialised != 0) // Refresh was unable to initialise the data
- __Error.WinIOError(_dataInitialised, DisplayPath);
-
- if ((_data.fileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) != 0)
- __Error.WinIOError(Win32Native.ERROR_FILE_NOT_FOUND, DisplayPath);
-
- return ((long)_data.fileSizeHigh) << 32 | ((long)_data.fileSizeLow & 0xFFFFFFFFL);
- }
- }
-
- /* Returns the name of the directory that the file is in */
- public String DirectoryName
- {
- get
- {
- return Path.GetDirectoryName(FullPath);
- }
- }
-
- /* Creates an instance of the the parent directory */
- public DirectoryInfo Directory
- {
- get
- {
- String dirName = DirectoryName;
- if (dirName == null)
- return null;
- return new DirectoryInfo(dirName);
- }
- }
-
- public bool IsReadOnly {
- get {
- return (Attributes & FileAttributes.ReadOnly) != 0;
- }
- set {
- if (value)
- Attributes |= FileAttributes.ReadOnly;
- else
- Attributes &= ~FileAttributes.ReadOnly;
- }
- }
-
- public StreamReader OpenText()
- {
- return new StreamReader(FullPath, Encoding.UTF8, true, StreamReader.DefaultBufferSize);
- }
-
- public StreamWriter CreateText()
- {
- return new StreamWriter(FullPath,false);
- }
-
- public StreamWriter AppendText()
- {
- return new StreamWriter(FullPath,true);
- }
-
- // Copies an existing file to a new file. An exception is raised if the
- // destination file already exists. Use the
- // Copy(String, String, boolean) method to allow
- // overwriting an existing file.
- public FileInfo CopyTo(String destFileName) {
- if (destFileName == null)
- throw new ArgumentNullException(nameof(destFileName), Environment.GetResourceString("ArgumentNull_FileName"));
- if (destFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(destFileName));
- Contract.EndContractBlock();
-
- destFileName = File.InternalCopy(FullPath, destFileName, false);
- return new FileInfo(destFileName, false);
- }
-
- // Copies an existing file to a new file. If overwrite is
- // false, then an IOException is thrown if the destination file
- // already exists. If overwrite is true, the file is
- // overwritten.
- public FileInfo CopyTo(String destFileName, bool overwrite) {
- if (destFileName == null)
- throw new ArgumentNullException(nameof(destFileName), Environment.GetResourceString("ArgumentNull_FileName"));
- if (destFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(destFileName));
- Contract.EndContractBlock();
-
- destFileName = File.InternalCopy(FullPath, destFileName, overwrite);
- return new FileInfo(destFileName, false);
- }
-
- public FileStream Create() {
- return File.Create(FullPath);
- }
-
- // Deletes a file. The file specified by the designated path is deleted.
- // If the file does not exist, Delete succeeds without throwing
- // an exception.
- //
- // On NT, Delete will fail for a file that is open for normal I/O
- // or a file that is memory mapped.
- public override void Delete()
- {
- bool r = Win32Native.DeleteFile(FullPath);
- if (!r) {
- int hr = Marshal.GetLastWin32Error();
- if (hr==Win32Native.ERROR_FILE_NOT_FOUND)
- return;
- else
- __Error.WinIOError(hr, DisplayPath);
- }
- }
-
- // Tests if the given file exists. The result is true if the file
- // given by the specified path exists; otherwise, the result is
- // false.
- public override bool Exists {
- get {
- try {
- if (_dataInitialised == -1)
- Refresh();
- if (_dataInitialised != 0) {
- // Refresh was unable to initialise the data.
- // We should normally be throwing an exception here,
- // but Exists is supposed to return true or false.
- return false;
- }
- return (_data.fileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) == 0;
- }
- catch
- {
- return false;
- }
- }
- }
-
- // User must explicitly specify opening a new file or appending to one.
- public FileStream Open(FileMode mode) {
- return Open(mode, FileAccess.ReadWrite, FileShare.None);
- }
-
- public FileStream Open(FileMode mode, FileAccess access) {
- return Open(mode, access, FileShare.None);
- }
-
- public FileStream Open(FileMode mode, FileAccess access, FileShare share) {
- return new FileStream(FullPath, mode, access, share);
- }
-
- public FileStream OpenRead()
- {
- return new FileStream(FullPath, FileMode.Open, FileAccess.Read,
- FileShare.Read, 4096, false);
- }
-
- public FileStream OpenWrite() {
- return new FileStream(FullPath, FileMode.OpenOrCreate,
- FileAccess.Write, FileShare.None);
- }
-
- // Moves a given file to a new location and potentially a new file name.
- // This method does work across volumes.
- public void MoveTo(String destFileName) {
- if (destFileName==null)
- throw new ArgumentNullException(nameof(destFileName));
- if (destFileName.Length==0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), nameof(destFileName));
- Contract.EndContractBlock();
-
- string fullDestFileName = Path.GetFullPath(destFileName);
-
- if (!Win32Native.MoveFile(FullPath, fullDestFileName))
- __Error.WinIOError();
- FullPath = fullDestFileName;
- OriginalPath = destFileName;
- _name = Path.GetFileName(fullDestFileName);
- DisplayPath = GetDisplayPath(destFileName);
- // Flush any cached information about the file.
- _dataInitialised = -1;
- }
-
- [ComVisible(false)]
- public FileInfo Replace(String destinationFileName, String destinationBackupFileName)
- {
- return Replace(destinationFileName, destinationBackupFileName, false);
- }
-
- [ComVisible(false)]
- public FileInfo Replace(String destinationFileName, String destinationBackupFileName, bool ignoreMetadataErrors)
- {
- File.Replace(FullPath, destinationFileName, destinationBackupFileName, ignoreMetadataErrors);
- return new FileInfo(destinationFileName);
- }
-
- // Returns the display path
- public override String ToString()
- {
- return DisplayPath;
- }
- }
-}
diff --git a/src/mscorlib/src/System/IO/FileLoadException.cs b/src/mscorlib/src/System/IO/FileLoadException.cs
index 2b56c00191..980d2514aa 100644
--- a/src/mscorlib/src/System/IO/FileLoadException.cs
+++ b/src/mscorlib/src/System/IO/FileLoadException.cs
@@ -20,14 +20,12 @@ using System.Runtime.Serialization;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Security;
-using System.Security.Permissions;
using System.Runtime.Versioning;
using SecurityException = System.Security.SecurityException;
namespace System.IO {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class FileLoadException : IOException {
private String _fileName; // the name of the file we could not load.
diff --git a/src/mscorlib/src/System/IO/FileMode.cs b/src/mscorlib/src/System/IO/FileMode.cs
index 9b9c2024a7..3972cf0533 100644
--- a/src/mscorlib/src/System/IO/FileMode.cs
+++ b/src/mscorlib/src/System/IO/FileMode.cs
@@ -27,7 +27,6 @@ namespace System.IO {
// exist, use Create.
//
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum FileMode
{
// Creates a new file. An exception is raised if the file already exists.
diff --git a/src/mscorlib/src/System/IO/FileNotFoundException.cs b/src/mscorlib/src/System/IO/FileNotFoundException.cs
index 8cc75f8232..ad6b5386ba 100644
--- a/src/mscorlib/src/System/IO/FileNotFoundException.cs
+++ b/src/mscorlib/src/System/IO/FileNotFoundException.cs
@@ -16,14 +16,12 @@
using System;
using System.Runtime.Serialization;
-using System.Security.Permissions;
using SecurityException = System.Security.SecurityException;
using System.Globalization;
namespace System.IO {
// Thrown when trying to access a file that doesn't exist on disk.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class FileNotFoundException : IOException {
private String _fileName; // The name of the file that isn't found.
diff --git a/src/mscorlib/src/System/IO/FileOptions.cs b/src/mscorlib/src/System/IO/FileOptions.cs
index ffd6ddad90..02bc99eea4 100644
--- a/src/mscorlib/src/System/IO/FileOptions.cs
+++ b/src/mscorlib/src/System/IO/FileOptions.cs
@@ -24,7 +24,6 @@ namespace System.IO {
// a number of them made sense in managed code, at least not yet.
[Serializable]
[Flags]
- [ComVisible(true)]
public enum FileOptions
{
// NOTE: any change to FileOptions enum needs to be
diff --git a/src/mscorlib/src/System/IO/FileShare.cs b/src/mscorlib/src/System/IO/FileShare.cs
index ad76d5da09..8a7d1f05e9 100644
--- a/src/mscorlib/src/System/IO/FileShare.cs
+++ b/src/mscorlib/src/System/IO/FileShare.cs
@@ -28,7 +28,6 @@ namespace System.IO {
//
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum FileShare
{
// No sharing. Any request to open the file (by this process or another
diff --git a/src/mscorlib/src/System/IO/FileSystemEnumerable.cs b/src/mscorlib/src/System/IO/FileSystemEnumerable.cs
index f861805ccf..0316de0f93 100644
--- a/src/mscorlib/src/System/IO/FileSystemEnumerable.cs
+++ b/src/mscorlib/src/System/IO/FileSystemEnumerable.cs
@@ -25,7 +25,6 @@ using System.Threading;
namespace System.IO
{
-
// Overview:
// The key methods instantiate FileSystemEnumerableIterators. These compose the iterator with search result
// handlers that instantiate the FileInfo, DirectoryInfo, String, etc. The handlers then perform any
@@ -42,37 +41,6 @@ namespace System.IO
SearchResultHandler<String> handler = new StringResultHandler(includeFiles, includeDirs);
return new FileSystemEnumerableIterator<String>(path, originalUserPath, searchPattern, searchOption, handler, checkHost);
}
-
- internal static IEnumerable<FileInfo> CreateFileInfoIterator(String path, String originalUserPath, String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(path != null);
- Contract.Requires(originalUserPath != null);
- Contract.Requires(searchPattern != null);
-
- SearchResultHandler<FileInfo> handler = new FileInfoResultHandler();
- return new FileSystemEnumerableIterator<FileInfo>(path, originalUserPath, searchPattern, searchOption, handler, true);
- }
-
- internal static IEnumerable<DirectoryInfo> CreateDirectoryInfoIterator(String path, String originalUserPath, String searchPattern, SearchOption searchOption)
- {
-
- Contract.Requires(path != null);
- Contract.Requires(originalUserPath != null);
- Contract.Requires(searchPattern != null);
-
- SearchResultHandler<DirectoryInfo> handler = new DirectoryInfoResultHandler();
- return new FileSystemEnumerableIterator<DirectoryInfo>(path, originalUserPath, searchPattern, searchOption, handler, true);
- }
-
- internal static IEnumerable<FileSystemInfo> CreateFileSystemInfoIterator(String path, String originalUserPath, String searchPattern, SearchOption searchOption)
- {
- Contract.Requires(path != null);
- Contract.Requires(originalUserPath != null);
- Contract.Requires(searchPattern != null);
-
- SearchResultHandler<FileSystemInfo> handler = new FileSystemInfoResultHandler();
- return new FileSystemEnumerableIterator<FileSystemInfo>(path, originalUserPath, searchPattern, searchOption, handler, true);
- }
}
// Abstract Iterator, borrowed from Linq. Used in anticipation of need for similar enumerables
@@ -166,11 +134,11 @@ namespace System.IO
private String searchCriteria;
SafeFindHandle _hnd = null;
- // empty means we know in advance that we won’t find any search results, which can happen if:
- // 1. we don’t have a search pattern
- // 2. we’re enumerating only the top directory and found no matches during the first call
- // This flag allows us to return early for these cases. We can’t know this in advance for
- // SearchOption.AllDirectories because we do a “*” search for subdirs and then use the
+ // empty means we know in advance that we won't find any search results, which can happen if:
+ // 1. we don't have a search pattern
+ // 2. we're enumerating only the top directory and found no matches during the first call
+ // This flag allows us to return early for these cases. We can't know this in advance for
+ // SearchOption.AllDirectories because we do a "*" search for subdirs and then use the
// searchPattern at each directory level.
bool empty;
@@ -603,71 +571,6 @@ namespace System.IO
}
}
- internal class FileInfoResultHandler : SearchResultHandler<FileInfo>
- {
- internal override bool IsResultIncluded(SearchResult result)
- {
- return FileSystemEnumerableHelpers.IsFile(result.FindData);
- }
-
- internal override FileInfo CreateObject(SearchResult result)
- {
- String name = result.FullPath;
- FileInfo fi = new FileInfo(name, false);
- fi.InitializeFrom(result.FindData);
- return fi;
- }
- }
-
- internal class DirectoryInfoResultHandler : SearchResultHandler<DirectoryInfo>
- {
- internal override bool IsResultIncluded(SearchResult result)
- {
- return FileSystemEnumerableHelpers.IsDir(result.FindData);
- }
-
- internal override DirectoryInfo CreateObject(SearchResult result)
- {
- DirectoryInfo di = new DirectoryInfo(result.FullPath, false);
- di.InitializeFrom(result.FindData);
- return di;
- }
- }
-
- internal class FileSystemInfoResultHandler : SearchResultHandler<FileSystemInfo>
- {
-
- internal override bool IsResultIncluded(SearchResult result)
- {
- bool includeFile = FileSystemEnumerableHelpers.IsFile(result.FindData);
- bool includeDir = FileSystemEnumerableHelpers.IsDir(result.FindData);
- Debug.Assert(!(includeFile && includeDir), result.FindData.cFileName + ": current item can't be both file and dir!");
-
- return (includeDir || includeFile);
- }
-
- internal override FileSystemInfo CreateObject(SearchResult result)
- {
- bool isFile = FileSystemEnumerableHelpers.IsFile(result.FindData);
- bool isDir = FileSystemEnumerableHelpers.IsDir(result.FindData);
-
- if (isDir)
- {
- DirectoryInfo di = new DirectoryInfo(result.FullPath, false);
- di.InitializeFrom(result.FindData);
- return di;
- }
- else
- {
- Contract.Assert(isFile);
- FileInfo fi = new FileInfo(result.FullPath, false);
- fi.InitializeFrom(result.FindData);
- return fi;
- }
- }
-
- }
-
internal sealed class SearchResult
{
private String fullPath; // fully-qualifed path
diff --git a/src/mscorlib/src/System/IO/FileSystemInfo.cs b/src/mscorlib/src/System/IO/FileSystemInfo.cs
deleted file mode 100644
index 94cd531b07..0000000000
--- a/src/mscorlib/src/System/IO/FileSystemInfo.cs
+++ /dev/null
@@ -1,240 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Microsoft.Win32;
-using System.Runtime.InteropServices;
-using System.Runtime.Serialization;
-using System.Diagnostics.Contracts;
-
-namespace System.IO
-{
-#if FEATURE_SERIALIZATION
- [Serializable]
-#endif
- [ComVisible(true)]
- public abstract class FileSystemInfo : MarshalByRefObject, ISerializable {
-
- internal Win32Native.WIN32_FILE_ATTRIBUTE_DATA _data; // Cache the file information
- internal int _dataInitialised = -1; // We use this field in conjunction with the Refresh methods, if we succeed
- // we store a zero, on failure we store the HResult in it so that we can
- // give back a generic error back.
-
- private const int ERROR_INVALID_PARAMETER = 87;
- internal const int ERROR_ACCESS_DENIED = 0x5;
-
- protected String FullPath; // fully qualified path of the directory
- protected String OriginalPath; // path passed in by the user
- private String _displayPath = ""; // path that can be displayed to the user
-
- protected FileSystemInfo()
- {
- }
-
- protected FileSystemInfo(SerializationInfo info, StreamingContext context)
- {
- if (info == null)
- throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- // Must use V1 field names here, since V1 didn't implement
- // ISerializable.
- FullPath = Path.GetFullPath(info.GetString("FullPath"));
- OriginalPath = info.GetString("OriginalPath");
-
- // Lazily initialize the file attributes.
- _dataInitialised = -1;
- }
-
- internal void InitializeFrom(Win32Native.WIN32_FIND_DATA findData)
- {
- _data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- _data.PopulateFrom(findData);
- _dataInitialised = 0;
- }
-
- // Full path of the direcory/file
- public virtual String FullName {
- get
- {
- return FullPath;
- }
- }
-
- public String Extension
- {
- get
- {
- // GetFullPathInternal would have already stripped out the terminating "." if present.
- int length = FullPath.Length;
- for (int i = length; --i >= 0;) {
- char ch = FullPath[i];
- if (ch == '.')
- return FullPath.Substring(i, length - i);
- if (ch == Path.DirectorySeparatorChar || ch == Path.AltDirectorySeparatorChar || ch == Path.VolumeSeparatorChar)
- break;
- }
- return String.Empty;
- }
- }
-
- // For files name of the file is returned, for directories the last directory in hierarchy is returned if possible,
- // otherwise the fully qualified name s returned
- public abstract String Name {
- get;
- }
-
- // Whether a file/directory exists
- public abstract bool Exists
- {
- get;
- }
-
- // Delete a file/directory
- public abstract void Delete();
-
- public DateTime CreationTime
- {
- get {
- // depends on the security check in get_CreationTimeUtc
- return CreationTimeUtc.ToLocalTime();
- }
- }
-
- [ComVisible(false)]
- public DateTime CreationTimeUtc {
- get {
- if (_dataInitialised == -1) {
- _data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- Refresh();
- }
-
- if (_dataInitialised != 0) // Refresh was unable to initialise the data
- __Error.WinIOError(_dataInitialised, DisplayPath);
-
- long fileTime = ((long)_data.ftCreationTimeHigh << 32) | _data.ftCreationTimeLow;
- return DateTime.FromFileTimeUtc(fileTime);
-
- }
- }
-
- public DateTime LastAccessTime
- {
- get {
- // depends on the security check in get_LastAccessTimeUtc
- return LastAccessTimeUtc.ToLocalTime();
- }
- set {
- LastAccessTimeUtc = value.ToUniversalTime();
- }
- }
-
- [ComVisible(false)]
- public DateTime LastAccessTimeUtc {
- get {
- if (_dataInitialised == -1) {
- _data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- Refresh();
- }
-
- if (_dataInitialised != 0) // Refresh was unable to initialise the data
- __Error.WinIOError(_dataInitialised, DisplayPath);
-
- long fileTime = ((long)_data.ftLastAccessTimeHigh << 32) | _data.ftLastAccessTimeLow;
- return DateTime.FromFileTimeUtc(fileTime);
- }
-
- set {
- }
- }
-
- public DateTime LastWriteTime
- {
- get {
- // depends on the security check in get_LastWriteTimeUtc
- return LastWriteTimeUtc.ToLocalTime();
- }
-
- set {
- LastWriteTimeUtc = value.ToUniversalTime();
- }
- }
-
- [ComVisible(false)]
- public DateTime LastWriteTimeUtc {
- get {
- if (_dataInitialised == -1) {
- _data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- Refresh();
- }
-
- if (_dataInitialised != 0) // Refresh was unable to initialise the data
- __Error.WinIOError(_dataInitialised, DisplayPath);
-
-
- long fileTime = ((long)_data.ftLastWriteTimeHigh << 32) | _data.ftLastWriteTimeLow;
- return DateTime.FromFileTimeUtc(fileTime);
- }
-
- set {
- }
- }
-
- public void Refresh()
- {
- _dataInitialised = File.FillAttributeInfo(FullPath, ref _data, false, false);
- }
-
- public FileAttributes Attributes {
- get
- {
- if (_dataInitialised == -1) {
- _data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- Refresh(); // Call refresh to intialise the data
- }
-
- if (_dataInitialised != 0) // Refresh was unable to initialise the data
- __Error.WinIOError(_dataInitialised, DisplayPath);
-
- return (FileAttributes) _data.fileAttributes;
- }
-
- set {
- bool r = Win32Native.SetFileAttributes(FullPath, (int) value);
- if (!r) {
- int hr = Marshal.GetLastWin32Error();
-
- if (hr==ERROR_INVALID_PARAMETER)
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidFileAttrs"));
-
- // For whatever reason we are turning ERROR_ACCESS_DENIED into
- // ArgumentException here (probably done for some 9x code path).
- // We can't change this now but special casing the error message instead.
- if (hr == ERROR_ACCESS_DENIED)
- throw new ArgumentException(Environment.GetResourceString("UnauthorizedAccess_IODenied_NoPathName"));
- __Error.WinIOError(hr, DisplayPath);
- }
- _dataInitialised = -1;
- }
- }
-
- [ComVisible(false)]
- public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- info.AddValue("OriginalPath", OriginalPath, typeof(String));
- info.AddValue("FullPath", FullPath, typeof(String));
- }
-
- internal String DisplayPath
- {
- get
- {
- return _displayPath;
- }
- set
- {
- _displayPath = value;
- }
- }
- }
-}
diff --git a/src/mscorlib/src/System/IO/IOException.cs b/src/mscorlib/src/System/IO/IOException.cs
index b3db033b0d..ab612811b0 100644
--- a/src/mscorlib/src/System/IO/IOException.cs
+++ b/src/mscorlib/src/System/IO/IOException.cs
@@ -19,7 +19,6 @@ using System.Runtime.Serialization;
namespace System.IO {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class IOException : SystemException
{
// For debugging purposes, store the complete path in the IOException
diff --git a/src/mscorlib/src/System/IO/MemoryStream.cs b/src/mscorlib/src/System/IO/MemoryStream.cs
index bdddc83818..05aac909b5 100644
--- a/src/mscorlib/src/System/IO/MemoryStream.cs
+++ b/src/mscorlib/src/System/IO/MemoryStream.cs
@@ -23,7 +23,6 @@ using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.Threading;
using System.Threading.Tasks;
-using System.Security.Permissions;
namespace System.IO {
// A MemoryStream represents a Stream in memory (ie, it has no backing store).
@@ -35,7 +34,6 @@ namespace System.IO {
// memory streams are resizable, while ones created with a byte array provide
// a stream "view" of the data.
[Serializable]
- [ComVisible(true)]
public class MemoryStream : Stream
{
private byte[] _buffer; // Either allocated internally or externally.
@@ -181,7 +179,6 @@ namespace System.IO {
public override void Flush() {
}
- [ComVisible(false)]
public override Task FlushAsync(CancellationToken cancellationToken) {
if (cancellationToken.IsCancellationRequested)
@@ -357,7 +354,6 @@ namespace System.IO {
return n;
}
- [ComVisible(false)]
public override Task<int> ReadAsync(Byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
if (buffer==null)
@@ -589,7 +585,6 @@ namespace System.IO {
}
- [ComVisible(false)]
public override Task WriteAsync(Byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
if (buffer == null)
diff --git a/src/mscorlib/src/System/IO/PathTooLongException.cs b/src/mscorlib/src/System/IO/PathTooLongException.cs
index b1063232a1..a84fdfbb36 100644
--- a/src/mscorlib/src/System/IO/PathTooLongException.cs
+++ b/src/mscorlib/src/System/IO/PathTooLongException.cs
@@ -20,7 +20,6 @@ using System.Runtime.Serialization;
namespace System.IO {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class PathTooLongException : IOException
{
public PathTooLongException()
diff --git a/src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs b/src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs
index 890669fa58..2cbd14f734 100644
--- a/src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs
+++ b/src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs
@@ -42,8 +42,8 @@ namespace System.IO {
_pinningHandle = new GCHandle(array, GCHandleType.Pinned);
// Now the byte[] is pinned for the lifetime of this instance.
// But I also need to get a pointer to that block of memory...
- fixed(byte* ptr = _array)
- Initialize(ptr, len, len, FileAccess.Read, true);
+ fixed(byte* ptr = &_array[0])
+ Initialize(ptr, len, len, FileAccess.Read);
}
~PinnedBufferMemoryStream()
diff --git a/src/mscorlib/src/System/IO/ReadLinesIterator.cs b/src/mscorlib/src/System/IO/ReadLinesIterator.cs
deleted file mode 100644
index ce2ad2ad0f..0000000000
--- a/src/mscorlib/src/System/IO/ReadLinesIterator.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Diagnostics.Contracts;
-using System.Runtime.Versioning;
-using System.Text;
-
-namespace System.IO
-{
- // An iterator that returns a single line at-a-time from a given file.
- //
- // Known issues which cannot be changed to remain compatible with 4.0:
- //
- // - The underlying StreamReader is allocated upfront for the IEnumerable<T> before
- // GetEnumerator has even been called. While this is good in that exceptions such as
- // DirectoryNotFoundException and FileNotFoundException are thrown directly by
- // File.ReadLines (which the user probably expects), it also means that the reader
- // will be leaked if the user never actually foreach's over the enumerable (and hence
- // calls Dispose on at least one IEnumerator<T> instance).
- //
- // - Reading to the end of the IEnumerator<T> disposes it. This means that Dispose
- // is called twice in a normal foreach construct.
- //
- // - IEnumerator<T> instances from the same IEnumerable<T> party on the same underlying
- // reader (Dev10 Bugs 904764).
- //
- internal class ReadLinesIterator : Iterator<string>
- {
- private readonly string _path;
- private readonly Encoding _encoding;
- private StreamReader _reader;
-
- private ReadLinesIterator(string path, Encoding encoding, StreamReader reader)
- {
- Contract.Requires(path != null);
- Contract.Requires(path.Length > 0);
- Contract.Requires(encoding != null);
- Contract.Requires(reader != null);
-
- _path = path;
- _encoding = encoding;
- _reader = reader;
- }
-
- public override bool MoveNext()
- {
- if (this._reader != null)
- {
- this.current = _reader.ReadLine();
- if (this.current != null)
- return true;
-
- // To maintain 4.0 behavior we Dispose
- // after reading to the end of the reader.
- Dispose();
- }
-
- return false;
- }
-
- protected override Iterator<string> Clone()
- {
- // NOTE: To maintain the same behavior with the previous yield-based
- // iterator in 4.0, we have all the IEnumerator<T> instances share the same
- // underlying reader. If we have already been disposed, _reader will be null,
- // which will cause CreateIterator to simply new up a new instance to start up
- // a new iteration. Dev10 Bugs 904764 has been filed to fix this in next side-
- // by-side release.
- return CreateIterator(_path, _encoding, _reader);
- }
-
- protected override void Dispose(bool disposing)
- {
- try
- {
- if (disposing)
- {
- if (_reader != null)
- {
- _reader.Dispose();
- }
- }
- }
- finally
- {
- _reader = null;
- base.Dispose(disposing);
- }
- }
-
- internal static ReadLinesIterator CreateIterator(string path, Encoding encoding)
- {
- return CreateIterator(path, encoding, (StreamReader)null);
- }
-
- private static ReadLinesIterator CreateIterator(string path, Encoding encoding, StreamReader reader)
- {
- return new ReadLinesIterator(path, encoding, reader ?? new StreamReader(path, encoding));
- }
- }
-}
diff --git a/src/mscorlib/src/System/IO/SearchOption.cs b/src/mscorlib/src/System/IO/SearchOption.cs
index aa9b9e37f8..e2f761cd54 100644
--- a/src/mscorlib/src/System/IO/SearchOption.cs
+++ b/src/mscorlib/src/System/IO/SearchOption.cs
@@ -20,7 +20,6 @@ using System;
namespace System.IO {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum SearchOption
{
// Include only the current directory in the search operation
diff --git a/src/mscorlib/src/System/IO/SeekOrigin.cs b/src/mscorlib/src/System/IO/SeekOrigin.cs
index a0a013e7aa..bff49e610f 100644
--- a/src/mscorlib/src/System/IO/SeekOrigin.cs
+++ b/src/mscorlib/src/System/IO/SeekOrigin.cs
@@ -21,7 +21,6 @@ namespace System.IO {
// Provides seek reference points. To seek to the end of a stream,
// call stream.Seek(0, SeekOrigin.End).
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum SeekOrigin
{
// These constants match Win32's FILE_BEGIN, FILE_CURRENT, and FILE_END
diff --git a/src/mscorlib/src/System/IO/Stream.cs b/src/mscorlib/src/System/IO/Stream.cs
index 3cdfad613e..790f0a09ab 100644
--- a/src/mscorlib/src/System/IO/Stream.cs
+++ b/src/mscorlib/src/System/IO/Stream.cs
@@ -23,14 +23,12 @@ using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Security;
-using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.Reflection;
namespace System.IO {
[Serializable]
- [ComVisible(true)]
public abstract class Stream : MarshalByRefObject, IDisposable {
public static readonly Stream Null = new NullStream();
@@ -65,7 +63,6 @@ namespace System.IO {
get;
}
- [ComVisible(false)]
public virtual bool CanTimeout {
[Pure]
get {
@@ -87,7 +84,6 @@ namespace System.IO {
set;
}
- [ComVisible(false)]
public virtual int ReadTimeout {
get {
Contract.Ensures(Contract.Result<int>() >= 0);
@@ -98,7 +94,6 @@ namespace System.IO {
}
}
- [ComVisible(false)]
public virtual int WriteTimeout {
get {
Contract.Ensures(Contract.Result<int>() >= 0);
@@ -109,7 +104,6 @@ namespace System.IO {
}
}
- [ComVisible(false)]
public Task CopyToAsync(Stream destination)
{
int bufferSize = _DefaultCopyBufferSize;
@@ -146,13 +140,11 @@ namespace System.IO {
return CopyToAsync(destination, bufferSize);
}
- [ComVisible(false)]
public Task CopyToAsync(Stream destination, Int32 bufferSize)
{
return CopyToAsync(destination, bufferSize, CancellationToken.None);
}
- [ComVisible(false)]
public virtual Task CopyToAsync(Stream destination, Int32 bufferSize, CancellationToken cancellationToken)
{
StreamHelpers.ValidateCopyToArgs(this, destination, bufferSize);
@@ -278,13 +270,11 @@ namespace System.IO {
public abstract void Flush();
- [ComVisible(false)]
public Task FlushAsync()
{
return FlushAsync(CancellationToken.None);
}
- [ComVisible(false)]
public virtual Task FlushAsync(CancellationToken cancellationToken)
{
return Task.Factory.StartNew(state => ((Stream)state).Flush(), this,
@@ -398,13 +388,11 @@ namespace System.IO {
}
}
- [ComVisible(false)]
public Task<int> ReadAsync(Byte[] buffer, int offset, int count)
{
return ReadAsync(buffer, offset, count, CancellationToken.None);
}
- [ComVisible(false)]
public virtual Task<int> ReadAsync(Byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
// If cancellation was requested, bail early with an already completed task.
@@ -617,7 +605,6 @@ namespace System.IO {
_buffer = null;
}
- [MethodImpl(MethodImplOptions.NoInlining)]
public ReadWriteTask(
bool isRead,
bool apm,
@@ -630,8 +617,6 @@ namespace System.IO {
Contract.Requires(buffer != null);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
-
// Store the arguments
_isRead = isRead;
_apm = apm;
@@ -648,8 +633,7 @@ namespace System.IO {
if (callback != null)
{
_callback = callback;
- _context = ExecutionContext.Capture(ref stackMark,
- ExecutionContext.CaptureOptions.OptimizeDefaultCase | ExecutionContext.CaptureOptions.IgnoreSyncCtx);
+ _context = ExecutionContext.Capture();
base.AddCompletionAction(this);
}
}
@@ -683,14 +667,13 @@ namespace System.IO {
var invokeAsyncCallback = s_invokeAsyncCallback;
if (invokeAsyncCallback == null) s_invokeAsyncCallback = invokeAsyncCallback = InvokeAsyncCallback; // benign race condition
- using(context) ExecutionContext.Run(context, invokeAsyncCallback, this, true);
+ ExecutionContext.Run(context, invokeAsyncCallback, this);
}
}
bool ITaskCompletionAction.InvokeMayRunArbitraryCode { get { return true; } }
}
- [ComVisible(false)]
public Task WriteAsync(Byte[] buffer, int offset, int count)
{
return WriteAsync(buffer, offset, count, CancellationToken.None);
@@ -698,7 +681,6 @@ namespace System.IO {
- [ComVisible(false)]
public virtual Task WriteAsync(Byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
// If cancellation was requested, bail early with an already completed task.
@@ -906,7 +888,6 @@ namespace System.IO {
{
}
- [ComVisible(false)]
public override Task FlushAsync(CancellationToken cancellationToken)
{
return cancellationToken.IsCancellationRequested ?
@@ -951,7 +932,6 @@ namespace System.IO {
return 0;
}
- [ComVisible(false)]
public override Task<int> ReadAsync(Byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
var nullReadTask = s_nullReadTask;
@@ -970,7 +950,6 @@ namespace System.IO {
{
}
- [ComVisible(false)]
public override Task WriteAsync(Byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
return cancellationToken.IsCancellationRequested ?
@@ -1106,7 +1085,6 @@ namespace System.IO {
get { return _stream.CanSeek; }
}
- [ComVisible(false)]
public override bool CanTimeout {
[Pure]
get {
@@ -1135,7 +1113,6 @@ namespace System.IO {
}
}
- [ComVisible(false)]
public override int ReadTimeout {
get {
return _stream.ReadTimeout;
@@ -1145,7 +1122,6 @@ namespace System.IO {
}
}
- [ComVisible(false)]
public override int WriteTimeout {
get {
return _stream.WriteTimeout;
diff --git a/src/mscorlib/src/System/IO/StreamReader.cs b/src/mscorlib/src/System/IO/StreamReader.cs
index 708db088e8..6d50347b1a 100644
--- a/src/mscorlib/src/System/IO/StreamReader.cs
+++ b/src/mscorlib/src/System/IO/StreamReader.cs
@@ -8,7 +8,6 @@ using System.Runtime.Versioning;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Contracts;
-using System.Security.Permissions;
using System.Threading.Tasks;
namespace System.IO
@@ -18,8 +17,7 @@ namespace System.IO
// whereas the Stream class is designed for byte input and output.
//
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class StreamReader : TextReader
+ internal class StreamReader : TextReader
{
// StreamReader.Null is threadsafe.
public new static readonly StreamReader Null = new NullStreamReader();
@@ -188,7 +186,7 @@ namespace System.IO
throw new ArgumentOutOfRangeException(nameof(bufferSize), Environment.GetResourceString("ArgumentOutOfRange_NeedPosNum"));
Contract.EndContractBlock();
- Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultFileStreamBufferSize, FileOptions.SequentialScan, Path.GetFileName(path), false, false);
+ Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultFileStreamBufferSize, FileOptions.SequentialScan);
Init(stream, encoding, detectEncodingFromByteOrderMarks, bufferSize, false);
}
@@ -757,7 +755,6 @@ namespace System.IO
}
#region Task based Async APIs
- [ComVisible(false)]
public override Task<String> ReadLineAsync()
{
// If we have been inherited into a subclass, the following implementation could be incorrect
@@ -837,7 +834,6 @@ namespace System.IO
return GetStringAndReleaseSharedStringBuilder(sb);
}
- [ComVisible(false)]
public override Task<String> ReadToEndAsync()
{
// If we have been inherited into a subclass, the following implementation could be incorrect
@@ -873,7 +869,6 @@ namespace System.IO
return GetStringAndReleaseSharedStringBuilder(sb);
}
- [ComVisible(false)]
public override Task<int> ReadAsync(char[] buffer, int index, int count)
{
if (buffer==null)
@@ -1060,7 +1055,6 @@ namespace System.IO
return charsRead;
}
- [ComVisible(false)]
public override Task<int> ReadBlockAsync(char[] buffer, int index, int count)
{
if (buffer==null)
diff --git a/src/mscorlib/src/System/IO/StreamWriter.cs b/src/mscorlib/src/System/IO/StreamWriter.cs
deleted file mode 100644
index 22eba82605..0000000000
--- a/src/mscorlib/src/System/IO/StreamWriter.cs
+++ /dev/null
@@ -1,765 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Text;
-using System.Runtime.CompilerServices;
-using System.Security.Permissions;
-using System.Runtime.Serialization;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.Runtime.InteropServices;
-using System.Threading.Tasks;
-
-namespace System.IO
-{
- // This class implements a TextWriter for writing characters to a Stream.
- // This is designed for character output in a particular Encoding,
- // whereas the Stream class is designed for byte input and output.
- //
- [Serializable]
- [ComVisible(true)]
- public class StreamWriter : TextWriter
- {
- // For UTF-8, the values of 1K for the default buffer size and 4K for the
- // file stream buffer size are reasonable & give very reasonable
- // performance for in terms of construction time for the StreamWriter and
- // write perf. Note that for UTF-8, we end up allocating a 4K byte buffer,
- // which means we take advantage of adaptive buffering code.
- // The performance using UnicodeEncoding is acceptable.
- internal const int DefaultBufferSize = 1024; // char[]
- private const int DefaultFileStreamBufferSize = 4096;
- private const int MinBufferSize = 128;
-
- // Bit bucket - Null has no backing store. Non closable.
- public new static readonly StreamWriter Null = new StreamWriter(Stream.Null, UTF8NoBOM, MinBufferSize, true);
-
- private Stream stream;
- private Encoding encoding;
- private Encoder encoder;
- private byte[] byteBuffer;
- private char[] charBuffer;
- private int charPos;
- private int charLen;
- private bool autoFlush;
- private bool haveWrittenPreamble;
- private bool closable;
-
- // We don't guarantee thread safety on StreamWriter, but we should at
- // least prevent users from trying to write anything while an Async
- // write from the same thread is in progress.
- [NonSerialized]
- private volatile Task _asyncWriteTask;
-
- private void CheckAsyncTaskInProgress()
- {
- // We are not locking the access to _asyncWriteTask because this is not meant to guarantee thread safety.
- // We are simply trying to deter calling any Write APIs while an async Write from the same thread is in progress.
-
- Task t = _asyncWriteTask;
-
- if (t != null && !t.IsCompleted)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_AsyncIOInProgress"));
- }
-
- // The high level goal is to be tolerant of encoding errors when we read and very strict
- // when we write. Hence, default StreamWriter encoding will throw on encoding error.
- // Note: when StreamWriter throws on invalid encoding chars (for ex, high surrogate character
- // D800-DBFF without a following low surrogate character DC00-DFFF), it will cause the
- // internal StreamWriter's state to be irrecoverable as it would have buffered the
- // illegal chars and any subsequent call to Flush() would hit the encoding error again.
- // Even Close() will hit the exception as it would try to flush the unwritten data.
- // Maybe we can add a DiscardBufferedData() method to get out of such situation (like
- // StreamReader though for different reason). Either way, the buffered data will be lost!
- internal static Encoding UTF8NoBOM {
- [FriendAccessAllowed]
- get { return EncodingCache.UTF8NoBOM; }
- }
-
-
- internal StreamWriter(): base(null) { // Ask for CurrentCulture all the time
- }
-
- public StreamWriter(Stream stream)
- : this(stream, UTF8NoBOM, DefaultBufferSize, false) {
- }
-
- public StreamWriter(Stream stream, Encoding encoding)
- : this(stream, encoding, DefaultBufferSize, false) {
- }
-
- // Creates a new StreamWriter for the given stream. The
- // character encoding is set by encoding and the buffer size,
- // in number of 16-bit characters, is set by bufferSize.
- //
- public StreamWriter(Stream stream, Encoding encoding, int bufferSize)
- : this(stream, encoding, bufferSize, false) {
- }
-
- public StreamWriter(Stream stream, Encoding encoding, int bufferSize, bool leaveOpen)
- : base(null) // Ask for CurrentCulture all the time
- {
- if (stream == null || encoding == null)
- throw new ArgumentNullException((stream == null ? nameof(stream) : nameof(encoding)));
- if (!stream.CanWrite)
- throw new ArgumentException(Environment.GetResourceString("Argument_StreamNotWritable"));
- if (bufferSize <= 0) throw new ArgumentOutOfRangeException(nameof(bufferSize), Environment.GetResourceString("ArgumentOutOfRange_NeedPosNum"));
- Contract.EndContractBlock();
-
- Init(stream, encoding, bufferSize, leaveOpen);
- }
-
- public StreamWriter(String path)
- : this(path, false, UTF8NoBOM, DefaultBufferSize) {
- }
-
- public StreamWriter(String path, bool append)
- : this(path, append, UTF8NoBOM, DefaultBufferSize) {
- }
-
- public StreamWriter(String path, bool append, Encoding encoding)
- : this(path, append, encoding, DefaultBufferSize) {
- }
-
- public StreamWriter(String path, bool append, Encoding encoding, int bufferSize)
- : base(null)
- {
- // Ask for CurrentCulture all the time
- if (path == null)
- throw new ArgumentNullException(nameof(path));
- if (encoding == null)
- throw new ArgumentNullException(nameof(encoding));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- if (bufferSize <= 0) throw new ArgumentOutOfRangeException(nameof(bufferSize), Environment.GetResourceString("ArgumentOutOfRange_NeedPosNum"));
- Contract.EndContractBlock();
-
- Stream stream = CreateFile(path, append);
- Init(stream, encoding, bufferSize, false);
- }
-
- private void Init(Stream streamArg, Encoding encodingArg, int bufferSize, bool shouldLeaveOpen)
- {
- this.stream = streamArg;
- this.encoding = encodingArg;
- this.encoder = encoding.GetEncoder();
- if (bufferSize < MinBufferSize) bufferSize = MinBufferSize;
- charBuffer = new char[bufferSize];
- byteBuffer = new byte[encoding.GetMaxByteCount(bufferSize)];
- charLen = bufferSize;
- // If we're appending to a Stream that already has data, don't write
- // the preamble.
- if (stream.CanSeek && stream.Position > 0)
- haveWrittenPreamble = true;
- closable = !shouldLeaveOpen;
- }
-
- private static Stream CreateFile(String path, bool append) {
- FileMode mode = append? FileMode.Append: FileMode.Create;
- FileStream f = new FileStream(path, mode, FileAccess.Write, FileShare.Read,
- DefaultFileStreamBufferSize, FileOptions.SequentialScan, Path.GetFileName(path), false, false);
- return f;
- }
-
- public override void Close() {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- protected override void Dispose(bool disposing) {
- try {
- // We need to flush any buffered data if we are being closed/disposed.
- // Also, we never close the handles for stdout & friends. So we can safely
- // write any buffered data to those streams even during finalization, which
- // is generally the right thing to do.
- if (stream != null) {
- // Note: flush on the underlying stream can throw (ex., low disk space)
- if (disposing)
- {
- CheckAsyncTaskInProgress();
-
- Flush(true, true);
- }
- }
- }
- finally {
- // Dispose of our resources if this StreamWriter is closable.
- // Note: Console.Out and other such non closable streamwriters should be left alone
- if (!LeaveOpen && stream != null) {
- try {
- // Attempt to close the stream even if there was an IO error from Flushing.
- // Note that Stream.Close() can potentially throw here (may or may not be
- // due to the same Flush error). In this case, we still need to ensure
- // cleaning up internal resources, hence the finally block.
- if (disposing)
- stream.Close();
- }
- finally {
- stream = null;
- byteBuffer = null;
- charBuffer = null;
- encoding = null;
- encoder = null;
- charLen = 0;
- base.Dispose(disposing);
- }
- }
- }
- }
-
- public override void Flush()
- {
- CheckAsyncTaskInProgress();
-
- Flush(true, true);
- }
-
- private void Flush(bool flushStream, bool flushEncoder)
- {
- // flushEncoder should be true at the end of the file and if
- // the user explicitly calls Flush (though not if AutoFlush is true).
- // This is required to flush any dangling characters from our UTF-7
- // and UTF-8 encoders.
- if (stream == null)
- __Error.WriterClosed();
-
- // Perf boost for Flush on non-dirty writers.
- if (charPos==0 && (!flushStream && !flushEncoder))
- return;
-
- if (!haveWrittenPreamble) {
- haveWrittenPreamble = true;
- byte[] preamble = encoding.GetPreamble();
- if (preamble.Length > 0)
- stream.Write(preamble, 0, preamble.Length);
- }
-
- int count = encoder.GetBytes(charBuffer, 0, charPos, byteBuffer, 0, flushEncoder);
- charPos = 0;
- if (count > 0)
- stream.Write(byteBuffer, 0, count);
- // By definition, calling Flush should flush the stream, but this is
- // only necessary if we passed in true for flushStream. The Web
- // Services guys have some perf tests where flushing needlessly hurts.
- if (flushStream)
- stream.Flush();
- }
-
- public virtual bool AutoFlush {
- get { return autoFlush; }
-
- set
- {
- CheckAsyncTaskInProgress();
-
- autoFlush = value;
- if (value) Flush(true, false);
- }
- }
-
- public virtual Stream BaseStream {
- get { return stream; }
- }
-
- internal bool LeaveOpen {
- get { return !closable; }
- }
-
- internal bool HaveWrittenPreamble {
- set { haveWrittenPreamble= value; }
- }
-
- public override Encoding Encoding {
- get { return encoding; }
- }
-
- public override void Write(char value)
- {
- CheckAsyncTaskInProgress();
-
- if (charPos == charLen) Flush(false, false);
- charBuffer[charPos] = value;
- charPos++;
- if (autoFlush) Flush(true, false);
- }
-
- public override void Write(char[] buffer)
- {
- // This may be faster than the one with the index & count since it
- // has to do less argument checking.
- if (buffer==null)
- return;
-
- CheckAsyncTaskInProgress();
-
- int index = 0;
- int count = buffer.Length;
- while (count > 0) {
- if (charPos == charLen) Flush(false, false);
- int n = charLen - charPos;
- if (n > count) n = count;
- Debug.Assert(n > 0, "StreamWriter::Write(char[]) isn't making progress! This is most likely a race condition in user code.");
- Buffer.InternalBlockCopy(buffer, index * sizeof(char), charBuffer, charPos * sizeof(char), n * sizeof(char));
- charPos += n;
- index += n;
- count -= n;
- }
- if (autoFlush) Flush(true, false);
- }
-
- public override void Write(char[] buffer, int index, int count) {
- if (buffer==null)
- throw new ArgumentNullException(nameof(buffer), Environment.GetResourceString("ArgumentNull_Buffer"));
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (buffer.Length - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- CheckAsyncTaskInProgress();
-
- while (count > 0) {
- if (charPos == charLen) Flush(false, false);
- int n = charLen - charPos;
- if (n > count) n = count;
- Debug.Assert(n > 0, "StreamWriter::Write(char[], int, int) isn't making progress! This is most likely a race condition in user code.");
- Buffer.InternalBlockCopy(buffer, index * sizeof(char), charBuffer, charPos * sizeof(char), n * sizeof(char));
- charPos += n;
- index += n;
- count -= n;
- }
- if (autoFlush) Flush(true, false);
- }
-
- public override void Write(String value)
- {
- if (value != null)
- {
-
- CheckAsyncTaskInProgress();
-
- int count = value.Length;
- int index = 0;
- while (count > 0) {
- if (charPos == charLen) Flush(false, false);
- int n = charLen - charPos;
- if (n > count) n = count;
- Debug.Assert(n > 0, "StreamWriter::Write(String) isn't making progress! This is most likely a race condition in user code.");
- value.CopyTo(index, charBuffer, charPos, n);
- charPos += n;
- index += n;
- count -= n;
- }
- if (autoFlush) Flush(true, false);
- }
- }
-
- #region Task based Async APIs
- [ComVisible(false)]
- public override Task WriteAsync(char value)
- {
- // If we have been inherited into a subclass, the following implementation could be incorrect
- // since it does not call through to Write() which a subclass might have overriden.
- // To be safe we will only use this implementation in cases where we know it is safe to do so,
- // and delegate to our base class (which will call into Write) when we are not sure.
- if (this.GetType() != typeof(StreamWriter))
- return base.WriteAsync(value);
-
- if (stream == null)
- __Error.WriterClosed();
-
- CheckAsyncTaskInProgress();
-
- Task task = WriteAsyncInternal(this, value, charBuffer, charPos, charLen, CoreNewLine, autoFlush, appendNewLine: false);
- _asyncWriteTask = task;
-
- return task;
- }
-
- // We pass in private instance fields of this MarshalByRefObject-derived type as local params
- // to ensure performant access inside the state machine that corresponds this async method.
- // Fields that are written to must be assigned at the end of the method *and* before instance invocations.
- private static async Task WriteAsyncInternal(StreamWriter _this, Char value,
- Char[] charBuffer, Int32 charPos, Int32 charLen, Char[] coreNewLine,
- bool autoFlush, bool appendNewLine)
- {
- if (charPos == charLen) {
- await _this.FlushAsyncInternal(false, false, charBuffer, charPos).ConfigureAwait(false);
- Debug.Assert(_this.charPos == 0);
- charPos = 0;
- }
-
- charBuffer[charPos] = value;
- charPos++;
-
- if (appendNewLine)
- {
- for (Int32 i = 0; i < coreNewLine.Length; i++) // Expect 2 iterations, no point calling BlockCopy
- {
- if (charPos == charLen) {
- await _this.FlushAsyncInternal(false, false, charBuffer, charPos).ConfigureAwait(false);
- Debug.Assert(_this.charPos == 0);
- charPos = 0;
- }
-
- charBuffer[charPos] = coreNewLine[i];
- charPos++;
- }
- }
-
- if (autoFlush) {
- await _this.FlushAsyncInternal(true, false, charBuffer, charPos).ConfigureAwait(false);
- Debug.Assert(_this.charPos == 0);
- charPos = 0;
- }
-
- _this.CharPos_Prop = charPos;
- }
-
- [ComVisible(false)]
- public override Task WriteAsync(String value)
- {
- // If we have been inherited into a subclass, the following implementation could be incorrect
- // since it does not call through to Write() which a subclass might have overriden.
- // To be safe we will only use this implementation in cases where we know it is safe to do so,
- // and delegate to our base class (which will call into Write) when we are not sure.
- if (this.GetType() != typeof(StreamWriter))
- return base.WriteAsync(value);
-
- if (value != null)
- {
- if (stream == null)
- __Error.WriterClosed();
-
- CheckAsyncTaskInProgress();
-
- Task task = WriteAsyncInternal(this, value, charBuffer, charPos, charLen, CoreNewLine, autoFlush, appendNewLine: false);
- _asyncWriteTask = task;
-
- return task;
- }
- else
- {
- return Task.CompletedTask;
- }
- }
-
- // We pass in private instance fields of this MarshalByRefObject-derived type as local params
- // to ensure performant access inside the state machine that corresponds this async method.
- // Fields that are written to must be assigned at the end of the method *and* before instance invocations.
- private static async Task WriteAsyncInternal(StreamWriter _this, String value,
- Char[] charBuffer, Int32 charPos, Int32 charLen, Char[] coreNewLine,
- bool autoFlush, bool appendNewLine)
- {
- Contract.Requires(value != null);
-
- int count = value.Length;
- int index = 0;
-
- while (count > 0)
- {
- if (charPos == charLen) {
- await _this.FlushAsyncInternal(false, false, charBuffer, charPos).ConfigureAwait(false);
- Debug.Assert(_this.charPos == 0);
- charPos = 0;
- }
-
- int n = charLen - charPos;
- if (n > count)
- n = count;
-
- Debug.Assert(n > 0, "StreamWriter::Write(String) isn't making progress! This is most likely a race condition in user code.");
-
- value.CopyTo(index, charBuffer, charPos, n);
-
- charPos += n;
- index += n;
- count -= n;
- }
-
- if (appendNewLine)
- {
- for (Int32 i = 0; i < coreNewLine.Length; i++) // Expect 2 iterations, no point calling BlockCopy
- {
- if (charPos == charLen) {
- await _this.FlushAsyncInternal(false, false, charBuffer, charPos).ConfigureAwait(false);
- Debug.Assert(_this.charPos == 0);
- charPos = 0;
- }
-
- charBuffer[charPos] = coreNewLine[i];
- charPos++;
- }
- }
-
- if (autoFlush) {
- await _this.FlushAsyncInternal(true, false, charBuffer, charPos).ConfigureAwait(false);
- Debug.Assert(_this.charPos == 0);
- charPos = 0;
- }
-
- _this.CharPos_Prop = charPos;
- }
-
- [ComVisible(false)]
- public override Task WriteAsync(char[] buffer, int index, int count)
- {
- if (buffer==null)
- throw new ArgumentNullException(nameof(buffer), Environment.GetResourceString("ArgumentNull_Buffer"));
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (buffer.Length - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- // If we have been inherited into a subclass, the following implementation could be incorrect
- // since it does not call through to Write() which a subclass might have overriden.
- // To be safe we will only use this implementation in cases where we know it is safe to do so,
- // and delegate to our base class (which will call into Write) when we are not sure.
- if (this.GetType() != typeof(StreamWriter))
- return base.WriteAsync(buffer, index, count);
-
- if (stream == null)
- __Error.WriterClosed();
-
- CheckAsyncTaskInProgress();
-
- Task task = WriteAsyncInternal(this, buffer, index, count, charBuffer, charPos, charLen, CoreNewLine, autoFlush, appendNewLine: false);
- _asyncWriteTask = task;
-
- return task;
- }
-
- // We pass in private instance fields of this MarshalByRefObject-derived type as local params
- // to ensure performant access inside the state machine that corresponds this async method.
- // Fields that are written to must be assigned at the end of the method *and* before instance invocations.
- private static async Task WriteAsyncInternal(StreamWriter _this, Char[] buffer, Int32 index, Int32 count,
- Char[] charBuffer, Int32 charPos, Int32 charLen, Char[] coreNewLine,
- bool autoFlush, bool appendNewLine)
- {
- Contract.Requires(count == 0 || (count > 0 && buffer != null));
- Contract.Requires(index >= 0);
- Contract.Requires(count >= 0);
- Contract.Requires(buffer == null || (buffer != null && buffer.Length - index >= count));
-
- while (count > 0)
- {
- if (charPos == charLen) {
- await _this.FlushAsyncInternal(false, false, charBuffer, charPos).ConfigureAwait(false);
- Debug.Assert(_this.charPos == 0);
- charPos = 0;
- }
-
- int n = charLen - charPos;
- if (n > count) n = count;
-
- Debug.Assert(n > 0, "StreamWriter::Write(char[], int, int) isn't making progress! This is most likely a race condition in user code.");
-
- Buffer.InternalBlockCopy(buffer, index * sizeof(char), charBuffer, charPos * sizeof(char), n * sizeof(char));
-
- charPos += n;
- index += n;
- count -= n;
- }
-
- if (appendNewLine)
- {
- for (Int32 i = 0; i < coreNewLine.Length; i++) // Expect 2 iterations, no point calling BlockCopy
- {
- if (charPos == charLen) {
- await _this.FlushAsyncInternal(false, false, charBuffer, charPos).ConfigureAwait(false);
- Debug.Assert(_this.charPos == 0);
- charPos = 0;
- }
-
- charBuffer[charPos] = coreNewLine[i];
- charPos++;
- }
- }
-
- if (autoFlush) {
- await _this.FlushAsyncInternal(true, false, charBuffer, charPos).ConfigureAwait(false);
- Debug.Assert(_this.charPos == 0);
- charPos = 0;
- }
-
- _this.CharPos_Prop = charPos;
- }
-
- [ComVisible(false)]
- public override Task WriteLineAsync()
- {
- // If we have been inherited into a subclass, the following implementation could be incorrect
- // since it does not call through to Write() which a subclass might have overriden.
- // To be safe we will only use this implementation in cases where we know it is safe to do so,
- // and delegate to our base class (which will call into Write) when we are not sure.
- if (this.GetType() != typeof(StreamWriter))
- return base.WriteLineAsync();
-
- if (stream == null)
- __Error.WriterClosed();
-
- CheckAsyncTaskInProgress();
-
- Task task = WriteAsyncInternal(this, null, 0, 0, charBuffer, charPos, charLen, CoreNewLine, autoFlush, appendNewLine: true);
- _asyncWriteTask = task;
-
- return task;
- }
-
-
- [ComVisible(false)]
- public override Task WriteLineAsync(char value)
- {
- // If we have been inherited into a subclass, the following implementation could be incorrect
- // since it does not call through to Write() which a subclass might have overriden.
- // To be safe we will only use this implementation in cases where we know it is safe to do so,
- // and delegate to our base class (which will call into Write) when we are not sure.
- if (this.GetType() != typeof(StreamWriter))
- return base.WriteLineAsync(value);
-
- if (stream == null)
- __Error.WriterClosed();
-
- CheckAsyncTaskInProgress();
-
- Task task = WriteAsyncInternal(this, value, charBuffer, charPos, charLen, CoreNewLine, autoFlush, appendNewLine: true);
- _asyncWriteTask = task;
-
- return task;
- }
-
-
- [ComVisible(false)]
- public override Task WriteLineAsync(String value)
- {
- // If we have been inherited into a subclass, the following implementation could be incorrect
- // since it does not call through to Write() which a subclass might have overriden.
- // To be safe we will only use this implementation in cases where we know it is safe to do so,
- // and delegate to our base class (which will call into Write) when we are not sure.
- if (this.GetType() != typeof(StreamWriter))
- return base.WriteLineAsync(value);
-
- if (stream == null)
- __Error.WriterClosed();
-
- CheckAsyncTaskInProgress();
-
- Task task = WriteAsyncInternal(this, value, charBuffer, charPos, charLen, CoreNewLine, autoFlush, appendNewLine: true);
- _asyncWriteTask = task;
-
- return task;
- }
-
-
- [ComVisible(false)]
- public override Task WriteLineAsync(char[] buffer, int index, int count)
- {
- if (buffer==null)
- throw new ArgumentNullException(nameof(buffer), Environment.GetResourceString("ArgumentNull_Buffer"));
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (buffer.Length - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- // If we have been inherited into a subclass, the following implementation could be incorrect
- // since it does not call through to Write() which a subclass might have overriden.
- // To be safe we will only use this implementation in cases where we know it is safe to do so,
- // and delegate to our base class (which will call into Write) when we are not sure.
- if (this.GetType() != typeof(StreamWriter))
- return base.WriteLineAsync(buffer, index, count);
-
- if (stream == null)
- __Error.WriterClosed();
-
- CheckAsyncTaskInProgress();
-
- Task task = WriteAsyncInternal(this, buffer, index, count, charBuffer, charPos, charLen, CoreNewLine, autoFlush, appendNewLine: true);
- _asyncWriteTask = task;
-
- return task;
- }
-
-
- [ComVisible(false)]
- public override Task FlushAsync()
- {
- // If we have been inherited into a subclass, the following implementation could be incorrect
- // since it does not call through to Flush() which a subclass might have overriden. To be safe
- // we will only use this implementation in cases where we know it is safe to do so,
- // and delegate to our base class (which will call into Flush) when we are not sure.
- if (this.GetType() != typeof(StreamWriter))
- return base.FlushAsync();
-
- // flushEncoder should be true at the end of the file and if
- // the user explicitly calls Flush (though not if AutoFlush is true).
- // This is required to flush any dangling characters from our UTF-7
- // and UTF-8 encoders.
- if (stream == null)
- __Error.WriterClosed();
-
- CheckAsyncTaskInProgress();
-
- Task task = FlushAsyncInternal(true, true, charBuffer, charPos);
- _asyncWriteTask = task;
-
- return task;
- }
-
- private Int32 CharPos_Prop {
- set { this.charPos = value; }
- }
-
- private bool HaveWrittenPreamble_Prop {
- set { this.haveWrittenPreamble = value; }
- }
-
- private Task FlushAsyncInternal(bool flushStream, bool flushEncoder,
- Char[] sCharBuffer, Int32 sCharPos) {
-
- // Perf boost for Flush on non-dirty writers.
- if (sCharPos == 0 && !flushStream && !flushEncoder)
- return Task.CompletedTask;
-
- Task flushTask = FlushAsyncInternal(this, flushStream, flushEncoder, sCharBuffer, sCharPos, this.haveWrittenPreamble,
- this.encoding, this.encoder, this.byteBuffer, this.stream);
-
- this.charPos = 0;
- return flushTask;
- }
-
-
- // We pass in private instance fields of this MarshalByRefObject-derived type as local params
- // to ensure performant access inside the state machine that corresponds this async method.
- private static async Task FlushAsyncInternal(StreamWriter _this, bool flushStream, bool flushEncoder,
- Char[] charBuffer, Int32 charPos, bool haveWrittenPreamble,
- Encoding encoding, Encoder encoder, Byte[] byteBuffer, Stream stream)
- {
- if (!haveWrittenPreamble)
- {
- _this.HaveWrittenPreamble_Prop = true;
- byte[] preamble = encoding.GetPreamble();
- if (preamble.Length > 0)
- await stream.WriteAsync(preamble, 0, preamble.Length).ConfigureAwait(false);
- }
-
- int count = encoder.GetBytes(charBuffer, 0, charPos, byteBuffer, 0, flushEncoder);
- if (count > 0)
- await stream.WriteAsync(byteBuffer, 0, count).ConfigureAwait(false);
-
- // By definition, calling Flush should flush the stream, but this is
- // only necessary if we passed in true for flushStream. The Web
- // Services guys have some perf tests where flushing needlessly hurts.
- if (flushStream)
- await stream.FlushAsync().ConfigureAwait(false);
- }
- #endregion
- } // class StreamWriter
-} // namespace
diff --git a/src/mscorlib/src/System/IO/TextReader.cs b/src/mscorlib/src/System/IO/TextReader.cs
index 6cbadfbce5..15ba8fba7d 100644
--- a/src/mscorlib/src/System/IO/TextReader.cs
+++ b/src/mscorlib/src/System/IO/TextReader.cs
@@ -17,7 +17,6 @@
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
-using System.Security.Permissions;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Contracts;
using System.Threading;
@@ -32,8 +31,7 @@ namespace System.IO {
// This class is intended for character input, not bytes.
// There are methods on the Stream class for reading bytes.
[Serializable]
- [ComVisible(true)]
- public abstract class TextReader : MarshalByRefObject, IDisposable {
+ internal abstract class TextReader : MarshalByRefObject, IDisposable {
public static readonly TextReader Null = new NullTextReader();
@@ -170,7 +168,6 @@ namespace System.IO {
}
#region Task based Async APIs
- [ComVisible(false)]
public virtual Task<String> ReadLineAsync()
{
return Task<String>.Factory.StartNew(state =>
@@ -180,7 +177,6 @@ namespace System.IO {
this, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
}
- [ComVisible(false)]
public async virtual Task<String> ReadToEndAsync()
{
char[] chars = new char[4096];
@@ -193,7 +189,6 @@ namespace System.IO {
return sb.ToString();
}
- [ComVisible(false)]
public virtual Task<int> ReadAsync(char[] buffer, int index, int count)
{
if (buffer==null)
@@ -223,7 +218,6 @@ namespace System.IO {
tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
}
- [ComVisible(false)]
public virtual Task<int> ReadBlockAsync(char[] buffer, int index, int count)
{
if (buffer==null)
@@ -352,21 +346,18 @@ namespace System.IO {
// On SyncTextReader all APIs should run synchronously, even the async ones.
//
- [ComVisible(false)]
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public override Task<String> ReadLineAsync()
{
return Task.FromResult(ReadLine());
}
- [ComVisible(false)]
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public override Task<String> ReadToEndAsync()
{
return Task.FromResult(ReadToEnd());
}
- [ComVisible(false)]
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public override Task<int> ReadBlockAsync(char[] buffer, int index, int count)
{
@@ -382,7 +373,6 @@ namespace System.IO {
return Task.FromResult(ReadBlock(buffer, index, count));
}
- [ComVisible(false)]
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public override Task<int> ReadAsync(char[] buffer, int index, int count)
{
diff --git a/src/mscorlib/src/System/IO/TextWriter.cs b/src/mscorlib/src/System/IO/TextWriter.cs
deleted file mode 100644
index 131f69d35d..0000000000
--- a/src/mscorlib/src/System/IO/TextWriter.cs
+++ /dev/null
@@ -1,886 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Text;
-using System.Threading;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Security.Permissions;
-using System.Globalization;
-using System.Diagnostics.CodeAnalysis;
-using System.Diagnostics.Contracts;
-using System.Threading.Tasks;
-
-namespace System.IO {
- // This abstract base class represents a writer that can write a sequential
- // stream of characters. A subclass must minimally implement the
- // Write(char) method.
- //
- // This class is intended for character output, not bytes.
- // There are methods on the Stream class for writing bytes.
- [Serializable]
- [ComVisible(true)]
- public abstract class TextWriter : MarshalByRefObject, IDisposable {
- public static readonly TextWriter Null = new NullTextWriter();
-
- // This should be initialized to Environment.NewLine, but
- // to avoid loading Environment unnecessarily so I've duplicated
- // the value here.
-#if !PLATFORM_UNIX
- private const String InitialNewLine = "\r\n";
-
- protected char[] CoreNewLine = new char[] { '\r', '\n' };
-#else
- private const String InitialNewLine = "\n";
-
- protected char[] CoreNewLine = new char[] {'\n'};
-#endif // !PLATFORM_UNIX
-
- // Can be null - if so, ask for the Thread's CurrentCulture every time.
- private IFormatProvider InternalFormatProvider;
-
- protected TextWriter()
- {
- InternalFormatProvider = null; // Ask for CurrentCulture all the time.
- }
-
- protected TextWriter(IFormatProvider formatProvider)
- {
- InternalFormatProvider = formatProvider;
- }
-
- public virtual IFormatProvider FormatProvider {
- get {
- if (InternalFormatProvider == null)
- return Thread.CurrentThread.CurrentCulture;
- else
- return InternalFormatProvider;
- }
- }
-
- // Closes this TextWriter and releases any system resources associated with the
- // TextWriter. Following a call to Close, any operations on the TextWriter
- // may raise exceptions. This default method is empty, but descendant
- // classes can override the method to provide the appropriate
- // functionality.
- public virtual void Close() {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- protected virtual void Dispose(bool disposing)
- {
- }
-
-
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- // Clears all buffers for this TextWriter and causes any buffered data to be
- // written to the underlying device. This default method is empty, but
- // descendant classes can override the method to provide the appropriate
- // functionality.
- public virtual void Flush() {
- }
-
- public abstract Encoding Encoding {
- get;
- }
-
- // Returns the line terminator string used by this TextWriter. The default line
- // terminator string is a carriage return followed by a line feed ("\r\n").
- //
- // Sets the line terminator string for this TextWriter. The line terminator
- // string is written to the text stream whenever one of the
- // WriteLine methods are called. In order for text written by
- // the TextWriter to be readable by a TextReader, only one of the following line
- // terminator strings should be used: "\r", "\n", or "\r\n".
- //
- public virtual String NewLine {
- get { return new String(CoreNewLine); }
- set {
- if (value == null)
- value = InitialNewLine;
- CoreNewLine = value.ToCharArray();
- }
- }
-
-
- public static TextWriter Synchronized(TextWriter writer) {
- if (writer==null)
- throw new ArgumentNullException(nameof(writer));
- Contract.Ensures(Contract.Result<TextWriter>() != null);
- Contract.EndContractBlock();
-
- if (writer is SyncTextWriter)
- return writer;
-
- return new SyncTextWriter(writer);
- }
-
- // Writes a character to the text stream. This default method is empty,
- // but descendant classes can override the method to provide the
- // appropriate functionality.
- //
- public virtual void Write(char value) {
- }
-
- // Writes a character array to the text stream. This default method calls
- // Write(char) for each of the characters in the character array.
- // If the character array is null, nothing is written.
- //
- public virtual void Write(char[] buffer) {
- if (buffer != null) Write(buffer, 0, buffer.Length);
- }
-
- // Writes a range of a character array to the text stream. This method will
- // write count characters of data into this TextWriter from the
- // buffer character array starting at position index.
- //
- public virtual void Write(char[] buffer, int index, int count) {
- if (buffer==null)
- throw new ArgumentNullException(nameof(buffer), Environment.GetResourceString("ArgumentNull_Buffer"));
- if (index < 0)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (count < 0)
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- if (buffer.Length - index < count)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- for (int i = 0; i < count; i++) Write(buffer[index + i]);
- }
-
- // Writes the text representation of a boolean to the text stream. This
- // method outputs either Boolean.TrueString or Boolean.FalseString.
- //
- public virtual void Write(bool value) {
- Write(value ? Boolean.TrueLiteral : Boolean.FalseLiteral);
- }
-
- // Writes the text representation of an integer to the text stream. The
- // text representation of the given value is produced by calling the
- // Int32.ToString() method.
- //
- public virtual void Write(int value) {
- Write(value.ToString(FormatProvider));
- }
-
- // Writes the text representation of an integer to the text stream. The
- // text representation of the given value is produced by calling the
- // UInt32.ToString() method.
- //
- [CLSCompliant(false)]
- public virtual void Write(uint value) {
- Write(value.ToString(FormatProvider));
- }
-
- // Writes the text representation of a long to the text stream. The
- // text representation of the given value is produced by calling the
- // Int64.ToString() method.
- //
- public virtual void Write(long value) {
- Write(value.ToString(FormatProvider));
- }
-
- // Writes the text representation of an unsigned long to the text
- // stream. The text representation of the given value is produced
- // by calling the UInt64.ToString() method.
- //
- [CLSCompliant(false)]
- public virtual void Write(ulong value) {
- Write(value.ToString(FormatProvider));
- }
-
- // Writes the text representation of a float to the text stream. The
- // text representation of the given value is produced by calling the
- // Float.toString(float) method.
- //
- public virtual void Write(float value) {
- Write(value.ToString(FormatProvider));
- }
-
- // Writes the text representation of a double to the text stream. The
- // text representation of the given value is produced by calling the
- // Double.toString(double) method.
- //
- public virtual void Write(double value) {
- Write(value.ToString(FormatProvider));
- }
-
- public virtual void Write(Decimal value) {
- Write(value.ToString(FormatProvider));
- }
-
- // Writes a string to the text stream. If the given string is null, nothing
- // is written to the text stream.
- //
- public virtual void Write(String value) {
- if (value != null) Write(value.ToCharArray());
- }
-
- // Writes the text representation of an object to the text stream. If the
- // given object is null, nothing is written to the text stream.
- // Otherwise, the object's ToString method is called to produce the
- // string representation, and the resulting string is then written to the
- // output stream.
- //
- public virtual void Write(Object value) {
- if (value != null) {
- IFormattable f = value as IFormattable;
- if (f != null)
- Write(f.ToString(null, FormatProvider));
- else
- Write(value.ToString());
- }
- }
-
-#if false
- // // Converts the wchar * to a string and writes this to the stream.
- // //
- // __attribute NonCLSCompliantAttribute()
- // public void Write(wchar *value) {
- // Write(new String(value));
- // }
-
- // // Treats the byte* as a LPCSTR, converts it to a string, and writes it to the stream.
- // //
- // __attribute NonCLSCompliantAttribute()
- // public void Write(byte *value) {
- // Write(new String(value));
- // }
-#endif
-
-
- // Writes out a formatted string. Uses the same semantics as
- // String.Format.
- //
- public virtual void Write(String format, Object arg0)
- {
- Write(String.Format(FormatProvider, format, arg0));
- }
-
- // Writes out a formatted string. Uses the same semantics as
- // String.Format.
- //
- public virtual void Write(String format, Object arg0, Object arg1)
- {
- Write(String.Format(FormatProvider, format, arg0, arg1));
- }
-
- // Writes out a formatted string. Uses the same semantics as
- // String.Format.
- //
- public virtual void Write(String format, Object arg0, Object arg1, Object arg2)
- {
- Write(String.Format(FormatProvider, format, arg0, arg1, arg2));
- }
-
- // Writes out a formatted string. Uses the same semantics as
- // String.Format.
- //
- public virtual void Write(String format, params Object[] arg)
- {
- Write(String.Format(FormatProvider, format, arg));
- }
-
-
- // Writes a line terminator to the text stream. The default line terminator
- // is a carriage return followed by a line feed ("\r\n"), but this value
- // can be changed by setting the NewLine property.
- //
- public virtual void WriteLine() {
- Write(CoreNewLine);
- }
-
- // Writes a character followed by a line terminator to the text stream.
- //
- public virtual void WriteLine(char value) {
- Write(value);
- WriteLine();
- }
-
- // Writes an array of characters followed by a line terminator to the text
- // stream.
- //
- public virtual void WriteLine(char[] buffer) {
- Write(buffer);
- WriteLine();
- }
-
- // Writes a range of a character array followed by a line terminator to the
- // text stream.
- //
- public virtual void WriteLine(char[] buffer, int index, int count) {
- Write(buffer, index, count);
- WriteLine();
- }
-
- // Writes the text representation of a boolean followed by a line
- // terminator to the text stream.
- //
- public virtual void WriteLine(bool value) {
- Write(value);
- WriteLine();
- }
-
- // Writes the text representation of an integer followed by a line
- // terminator to the text stream.
- //
- public virtual void WriteLine(int value) {
- Write(value);
- WriteLine();
- }
-
- // Writes the text representation of an unsigned integer followed by
- // a line terminator to the text stream.
- //
- [CLSCompliant(false)]
- public virtual void WriteLine(uint value) {
- Write(value);
- WriteLine();
- }
-
- // Writes the text representation of a long followed by a line terminator
- // to the text stream.
- //
- public virtual void WriteLine(long value) {
- Write(value);
- WriteLine();
- }
-
- // Writes the text representation of an unsigned long followed by
- // a line terminator to the text stream.
- //
- [CLSCompliant(false)]
- public virtual void WriteLine(ulong value) {
- Write(value);
- WriteLine();
- }
-
- // Writes the text representation of a float followed by a line terminator
- // to the text stream.
- //
- public virtual void WriteLine(float value) {
- Write(value);
- WriteLine();
- }
-
- // Writes the text representation of a double followed by a line terminator
- // to the text stream.
- //
- public virtual void WriteLine(double value) {
- Write(value);
- WriteLine();
- }
-
- public virtual void WriteLine(decimal value) {
- Write(value);
- WriteLine();
- }
-
- // Writes a string followed by a line terminator to the text stream.
- //
- public virtual void WriteLine(String value) {
-
- if (value==null) {
- WriteLine();
- }
- else {
- // We'd ideally like WriteLine to be atomic, in that one call
- // to WriteLine equals one call to the OS (ie, so writing to
- // console while simultaneously calling printf will guarantee we
- // write out a string and new line chars, without any interference).
- // Additionally, we need to call ToCharArray on Strings anyways,
- // so allocating a char[] here isn't any worse than what we were
- // doing anyways. We do reduce the number of calls to the
- // backing store this way, potentially.
- int vLen = value.Length;
- int nlLen = CoreNewLine.Length;
- char[] chars = new char[vLen+nlLen];
- value.CopyTo(0, chars, 0, vLen);
- // CoreNewLine will almost always be 2 chars, and possibly 1.
- if (nlLen == 2) {
- chars[vLen] = CoreNewLine[0];
- chars[vLen+1] = CoreNewLine[1];
- }
- else if (nlLen == 1)
- chars[vLen] = CoreNewLine[0];
- else
- Buffer.InternalBlockCopy(CoreNewLine, 0, chars, vLen * 2, nlLen * 2);
- Write(chars, 0, vLen + nlLen);
- }
- /*
- Write(value); // We could call Write(String) on StreamWriter...
- WriteLine();
- */
- }
-
- // Writes the text representation of an object followed by a line
- // terminator to the text stream.
- //
- public virtual void WriteLine(Object value) {
- if (value==null) {
- WriteLine();
- }
- else {
- // Call WriteLine(value.ToString), not Write(Object), WriteLine().
- // This makes calls to WriteLine(Object) atomic.
- IFormattable f = value as IFormattable;
- if (f != null)
- WriteLine(f.ToString(null, FormatProvider));
- else
- WriteLine(value.ToString());
- }
- }
-
- // Writes out a formatted string and a new line. Uses the same
- // semantics as String.Format.
- //
- public virtual void WriteLine(String format, Object arg0)
- {
- WriteLine(String.Format(FormatProvider, format, arg0));
- }
-
- // Writes out a formatted string and a new line. Uses the same
- // semantics as String.Format.
- //
- public virtual void WriteLine (String format, Object arg0, Object arg1)
- {
- WriteLine(String.Format(FormatProvider, format, arg0, arg1));
- }
-
- // Writes out a formatted string and a new line. Uses the same
- // semantics as String.Format.
- //
- public virtual void WriteLine (String format, Object arg0, Object arg1, Object arg2)
- {
- WriteLine(String.Format(FormatProvider, format, arg0, arg1, arg2));
- }
-
- // Writes out a formatted string and a new line. Uses the same
- // semantics as String.Format.
- //
- public virtual void WriteLine (String format, params Object[] arg)
- {
- WriteLine(String.Format(FormatProvider, format, arg));
- }
-
- #region Task based Async APIs
- [ComVisible(false)]
- public virtual Task WriteAsync(char value)
- {
- var tuple = new Tuple<TextWriter, char>(this, value);
- return Task.Factory.StartNew(state =>
- {
- var t = (Tuple<TextWriter, char>)state;
- t.Item1.Write(t.Item2);
- },
- tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
- }
-
- [ComVisible(false)]
- public virtual Task WriteAsync(String value)
- {
- var tuple = new Tuple<TextWriter, string>(this, value);
- return Task.Factory.StartNew(state =>
- {
- var t = (Tuple<TextWriter, string>)state;
- t.Item1.Write(t.Item2);
- },
- tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
- }
-
- [ComVisible(false)]
- public Task WriteAsync(char[] buffer)
- {
- if (buffer == null) return Task.CompletedTask;
- return WriteAsync(buffer, 0, buffer.Length);
- }
-
- [ComVisible(false)]
- public virtual Task WriteAsync(char[] buffer, int index, int count)
- {
- var tuple = new Tuple<TextWriter, char[], int, int>(this, buffer, index, count);
- return Task.Factory.StartNew(state =>
- {
- var t = (Tuple<TextWriter, char[], int, int>)state;
- t.Item1.Write(t.Item2, t.Item3, t.Item4);
- },
- tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
- }
-
- [ComVisible(false)]
- public virtual Task WriteLineAsync(char value)
- {
- var tuple = new Tuple<TextWriter, char>(this, value);
- return Task.Factory.StartNew(state =>
- {
- var t = (Tuple<TextWriter, char>)state;
- t.Item1.WriteLine(t.Item2);
- },
- tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
- }
-
- [ComVisible(false)]
- public virtual Task WriteLineAsync(String value)
- {
- var tuple = new Tuple<TextWriter, string>(this, value);
- return Task.Factory.StartNew(state =>
- {
- var t = (Tuple<TextWriter, string>)state;
- t.Item1.WriteLine(t.Item2);
- },
- tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
- }
-
- [ComVisible(false)]
- public Task WriteLineAsync(char[] buffer)
- {
- if (buffer == null) return Task.CompletedTask;
- return WriteLineAsync(buffer, 0, buffer.Length);
- }
-
- [ComVisible(false)]
- public virtual Task WriteLineAsync(char[] buffer, int index, int count)
- {
- var tuple = new Tuple<TextWriter, char[], int, int>(this, buffer, index, count);
- return Task.Factory.StartNew(state =>
- {
- var t = (Tuple<TextWriter, char[], int, int>)state;
- t.Item1.WriteLine(t.Item2, t.Item3, t.Item4);
- },
- tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
- }
-
- [ComVisible(false)]
- public virtual Task WriteLineAsync()
- {
- return WriteAsync(CoreNewLine);
- }
-
- [ComVisible(false)]
- public virtual Task FlushAsync()
- {
- return Task.Factory.StartNew(state =>
- {
- ((TextWriter)state).Flush();
- },
- this, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
- }
- #endregion
-
- [Serializable]
- private sealed class NullTextWriter : TextWriter
- {
- internal NullTextWriter(): base(CultureInfo.InvariantCulture) {
- }
-
- public override Encoding Encoding {
- get { return Encoding.Default; }
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- public override void Write(char[] buffer, int index, int count) {
- }
-
- public override void Write(String value) {
- }
-
- // Not strictly necessary, but for perf reasons
- public override void WriteLine() {
- }
-
- // Not strictly necessary, but for perf reasons
- public override void WriteLine(String value) {
- }
-
- public override void WriteLine(Object value) {
- }
- }
-
- [Serializable]
- internal sealed class SyncTextWriter : TextWriter, IDisposable
- {
- private TextWriter _out;
-
- internal SyncTextWriter(TextWriter t): base(t.FormatProvider) {
- _out = t;
- }
-
- public override Encoding Encoding {
- get { return _out.Encoding; }
- }
-
- public override IFormatProvider FormatProvider {
- get { return _out.FormatProvider; }
- }
-
- public override String NewLine {
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- get { return _out.NewLine; }
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- set { _out.NewLine = value; }
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Close() {
- // So that any overriden Close() gets run
- _out.Close();
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- protected override void Dispose(bool disposing) {
- // Explicitly pick up a potentially methodimpl'ed Dispose
- if (disposing)
- ((IDisposable)_out).Dispose();
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Flush() {
- _out.Flush();
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(char value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(char[] buffer) {
- _out.Write(buffer);
- }
-
- [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems.
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(char[] buffer, int index, int count) {
- _out.Write(buffer, index, count);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(bool value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(int value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(uint value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(long value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(ulong value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(float value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(double value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(Decimal value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(String value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(Object value) {
- _out.Write(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(String format, Object arg0) {
- _out.Write(format, arg0);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(String format, Object arg0, Object arg1) {
- _out.Write(format, arg0, arg1);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(String format, Object arg0, Object arg1, Object arg2) {
- _out.Write(format, arg0, arg1, arg2);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void Write(String format, Object[] arg) {
- _out.Write(format, arg);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine() {
- _out.WriteLine();
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(char value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(decimal value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(char[] buffer) {
- _out.WriteLine(buffer);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(char[] buffer, int index, int count) {
- _out.WriteLine(buffer, index, count);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(bool value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(int value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(uint value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(long value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(ulong value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(float value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(double value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(String value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(Object value) {
- _out.WriteLine(value);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(String format, Object arg0) {
- _out.WriteLine(format, arg0);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(String format, Object arg0, Object arg1) {
- _out.WriteLine(format, arg0, arg1);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(String format, Object arg0, Object arg1, Object arg2) {
- _out.WriteLine(format, arg0, arg1, arg2);
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public override void WriteLine(String format, Object[] arg) {
- _out.WriteLine(format, arg);
- }
-
-
- //
- // On SyncTextWriter all APIs should run synchronously, even the async ones.
- //
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- [ComVisible(false)]
- public override Task WriteAsync(char value)
- {
- Write(value);
- return Task.CompletedTask;
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- [ComVisible(false)]
- public override Task WriteAsync(String value)
- {
- Write(value);
- return Task.CompletedTask;
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- [ComVisible(false)]
- public override Task WriteAsync(char[] buffer, int index, int count)
- {
- Write(buffer, index, count);
- return Task.CompletedTask;
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- [ComVisible(false)]
- public override Task WriteLineAsync(char value)
- {
- WriteLine(value);
- return Task.CompletedTask;
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- [ComVisible(false)]
- public override Task WriteLineAsync(String value)
- {
- WriteLine(value);
- return Task.CompletedTask;
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- [ComVisible(false)]
- public override Task WriteLineAsync(char[] buffer, int index, int count)
- {
- WriteLine(buffer, index, count);
- return Task.CompletedTask;
- }
-
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- [ComVisible(false)]
- public override Task FlushAsync()
- {
- Flush();
- return Task.CompletedTask;
- }
- }
- }
-}
diff --git a/src/mscorlib/src/System/IO/UnmanagedMemoryAccessor.cs b/src/mscorlib/src/System/IO/UnmanagedMemoryAccessor.cs
index 4208ebfb6d..f3fd71833c 100644
--- a/src/mscorlib/src/System/IO/UnmanagedMemoryAccessor.cs
+++ b/src/mscorlib/src/System/IO/UnmanagedMemoryAccessor.cs
@@ -17,7 +17,6 @@ using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
using System.Runtime.Versioning;
-using System.Security.Permissions;
using Microsoft.Win32.SafeHandles;
using System.Diagnostics;
using System.Diagnostics.Contracts;
diff --git a/src/mscorlib/src/System/IO/UnmanagedMemoryStream.cs b/src/mscorlib/src/System/IO/UnmanagedMemoryStream.cs
index d78632639b..165b6d2b19 100644
--- a/src/mscorlib/src/System/IO/UnmanagedMemoryStream.cs
+++ b/src/mscorlib/src/System/IO/UnmanagedMemoryStream.cs
@@ -17,7 +17,6 @@ using System.Runtime;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
-using System.Security.Permissions;
using System.Threading;
using System.Diagnostics;
using System.Diagnostics.Contracts;
@@ -108,25 +107,14 @@ namespace System.IO {
}
public UnmanagedMemoryStream(SafeBuffer buffer, long offset, long length) {
- Initialize(buffer, offset, length, FileAccess.Read, false);
+ Initialize(buffer, offset, length, FileAccess.Read);
}
public UnmanagedMemoryStream(SafeBuffer buffer, long offset, long length, FileAccess access) {
- Initialize(buffer, offset, length, access, false);
- }
-
- // We must create one of these without doing a security check. This
- // class is created while security is trying to start up. Plus, doing
- // a Demand from Assembly.GetManifestResourceStream isn't useful.
- internal UnmanagedMemoryStream(SafeBuffer buffer, long offset, long length, FileAccess access, bool skipSecurityCheck) {
- Initialize(buffer, offset, length, access, skipSecurityCheck);
+ Initialize(buffer, offset, length, access);
}
protected void Initialize(SafeBuffer buffer, long offset, long length, FileAccess access) {
- Initialize(buffer, offset, length, access, false);
- }
-
- internal void Initialize(SafeBuffer buffer, long offset, long length, FileAccess access, bool skipSecurityCheck) {
if (buffer == null) {
throw new ArgumentNullException(nameof(buffer));
}
@@ -147,11 +135,6 @@ namespace System.IO {
if (_isOpen) {
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_CalledTwice"));
}
- if (!skipSecurityCheck) {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-#pragma warning restore 618
- }
// check for wraparound
unsafe {
@@ -181,31 +164,18 @@ namespace System.IO {
[CLSCompliant(false)]
public unsafe UnmanagedMemoryStream(byte* pointer, long length)
{
- Initialize(pointer, length, length, FileAccess.Read, false);
+ Initialize(pointer, length, length, FileAccess.Read);
}
[CLSCompliant(false)]
public unsafe UnmanagedMemoryStream(byte* pointer, long length, long capacity, FileAccess access)
{
- Initialize(pointer, length, capacity, access, false);
- }
-
- // We must create one of these without doing a security check. This
- // class is created while security is trying to start up. Plus, doing
- // a Demand from Assembly.GetManifestResourceStream isn't useful.
- internal unsafe UnmanagedMemoryStream(byte* pointer, long length, long capacity, FileAccess access, bool skipSecurityCheck)
- {
- Initialize(pointer, length, capacity, access, skipSecurityCheck);
+ Initialize(pointer, length, capacity, access);
}
[CLSCompliant(false)]
protected unsafe void Initialize(byte* pointer, long length, long capacity, FileAccess access)
{
- Initialize(pointer, length, capacity, access, false);
- }
-
- internal unsafe void Initialize(byte* pointer, long length, long capacity, FileAccess access, bool skipSecurityCheck)
- {
if (pointer == null)
throw new ArgumentNullException(nameof(pointer));
if (length < 0 || capacity < 0)
@@ -221,12 +191,6 @@ namespace System.IO {
if (_isOpen)
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_CalledTwice"));
- if (!skipSecurityCheck) {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-#pragma warning restore 618
- }
-
_mem = pointer;
_offset = 0;
_length = length;
@@ -265,7 +229,6 @@ namespace System.IO {
if (!_isOpen) __Error.StreamIsClosed();
}
- [ComVisible(false)]
public override Task FlushAsync(CancellationToken cancellationToken) {
if (cancellationToken.IsCancellationRequested)
@@ -421,7 +384,6 @@ namespace System.IO {
return nInt;
}
- [ComVisible(false)]
public override Task<Int32> ReadAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken) {
if (buffer==null)
throw new ArgumentNullException(nameof(buffer), Environment.GetResourceString("ArgumentNull_Buffer"));
@@ -618,7 +580,6 @@ namespace System.IO {
return;
}
- [ComVisible(false)]
public override Task WriteAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken) {
if (buffer==null)
diff --git a/src/mscorlib/src/System/IO/UnmanagedMemoryStreamWrapper.cs b/src/mscorlib/src/System/IO/UnmanagedMemoryStreamWrapper.cs
index 040ddbb3d7..99b257ea56 100644
--- a/src/mscorlib/src/System/IO/UnmanagedMemoryStreamWrapper.cs
+++ b/src/mscorlib/src/System/IO/UnmanagedMemoryStreamWrapper.cs
@@ -13,7 +13,6 @@
using System;
using System.Runtime.InteropServices;
-using System.Security.Permissions;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Contracts;
using System.Threading;
diff --git a/src/mscorlib/src/System/IO/__Error.cs b/src/mscorlib/src/System/IO/__Error.cs
index ad4972de54..955ddbec63 100644
--- a/src/mscorlib/src/System/IO/__Error.cs
+++ b/src/mscorlib/src/System/IO/__Error.cs
@@ -21,7 +21,6 @@ using Win32Native = Microsoft.Win32.Win32Native;
using System.Text;
using System.Globalization;
using System.Security;
-using System.Security.Permissions;
using System.Diagnostics.Contracts;
namespace System.IO {
@@ -51,10 +50,6 @@ namespace System.IO {
internal static void ReadNotSupported() {
throw new NotSupportedException(Environment.GetResourceString("NotSupported_UnreadableStream"));
}
-
- internal static void SeekNotSupported() {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_UnseekableStream"));
- }
internal static void WrongAsyncResult() {
throw new ArgumentException(Environment.GetResourceString("Arg_WrongAsyncResult"));
@@ -187,34 +182,11 @@ namespace System.IO {
throw new IOException(Win32Native.GetMessage(errorCode), Win32Native.MakeHRFromErrorCode(errorCode), maybeFullPath);
}
}
-
- // An alternative to WinIOError with friendlier messages for drives
- internal static void WinIODriveError(String driveName) {
- int errorCode = Marshal.GetLastWin32Error();
- WinIODriveError(driveName, errorCode);
- }
-
- internal static void WinIODriveError(String driveName, int errorCode)
- {
- switch (errorCode) {
- case Win32Native.ERROR_PATH_NOT_FOUND:
- case Win32Native.ERROR_INVALID_DRIVE:
- throw new DriveNotFoundException(Environment.GetResourceString("IO.DriveNotFound_Drive", driveName));
-
- default:
- WinIOError(errorCode, driveName);
- break;
- }
- }
internal static void WriteNotSupported() {
throw new NotSupportedException(Environment.GetResourceString("NotSupported_UnwritableStream"));
}
- internal static void WriterClosed() {
- throw new ObjectDisposedException(null, Environment.GetResourceString("ObjectDisposed_WriterClosed"));
- }
-
// From WinError.h
internal const int ERROR_FILE_NOT_FOUND = Win32Native.ERROR_FILE_NOT_FOUND;
internal const int ERROR_PATH_NOT_FOUND = Win32Native.ERROR_PATH_NOT_FOUND;
diff --git a/src/mscorlib/src/System/IObservable.cs b/src/mscorlib/src/System/IObservable.cs
index c231c45485..aabb0b8fb4 100644
--- a/src/mscorlib/src/System/IObservable.cs
+++ b/src/mscorlib/src/System/IObservable.cs
@@ -2,23 +2,10 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-/*============================================================
-**
-**
-**
-**
-**
-** Purpose: Interface for exposing an Observable in the
-** Observer pattern
-**
-**
-===========================================================*/
-
namespace System
{
public interface IObservable<out T>
{
IDisposable Subscribe(IObserver<T> observer);
}
-
}
diff --git a/src/mscorlib/src/System/IObserver.cs b/src/mscorlib/src/System/IObserver.cs
index 7f55ce0c46..39e123de8d 100644
--- a/src/mscorlib/src/System/IObserver.cs
+++ b/src/mscorlib/src/System/IObserver.cs
@@ -2,20 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-/*============================================================
-**
-**
-**
-**
-**
-** Purpose: Interface for exposing an Observer in the
-** Observer pattern
-**
-**
-===========================================================*/
-
-using System;
-
namespace System
{
public interface IObserver<in T>
diff --git a/src/mscorlib/src/System/IProgress.cs b/src/mscorlib/src/System/IProgress.cs
index e1043015ce..724c7bdce9 100644
--- a/src/mscorlib/src/System/IProgress.cs
+++ b/src/mscorlib/src/System/IProgress.cs
@@ -2,17 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-/*============================================================
-**
-**
-**
-**
-**
-** Purpose: Interface for providing progress updates.
-**
-**
-===========================================================*/
-
namespace System
{
/// <summary>Defines a provider for progress updates.</summary>
diff --git a/src/mscorlib/src/System/IndexOutOfRangeException.cs b/src/mscorlib/src/System/IndexOutOfRangeException.cs
index e641b5eab4..4969c2b86d 100644
--- a/src/mscorlib/src/System/IndexOutOfRangeException.cs
+++ b/src/mscorlib/src/System/IndexOutOfRangeException.cs
@@ -11,30 +11,31 @@
**
=============================================================================*/
-namespace System {
-
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public sealed class IndexOutOfRangeException : SystemException {
- public IndexOutOfRangeException()
- : base(Environment.GetResourceString("Arg_IndexOutOfRangeException")) {
- SetErrorCode(__HResults.COR_E_INDEXOUTOFRANGE);
- }
-
- public IndexOutOfRangeException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_INDEXOUTOFRANGE);
+ public sealed class IndexOutOfRangeException : SystemException
+ {
+ public IndexOutOfRangeException()
+ : base(SR.Arg_IndexOutOfRangeException)
+ {
+ HResult = __HResults.COR_E_INDEXOUTOFRANGE;
}
-
- public IndexOutOfRangeException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_INDEXOUTOFRANGE);
+
+ public IndexOutOfRangeException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_INDEXOUTOFRANGE;
}
- internal IndexOutOfRangeException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public IndexOutOfRangeException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_INDEXOUTOFRANGE;
}
+ internal IndexOutOfRangeException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/InsufficientExecutionStackException.cs b/src/mscorlib/src/System/InsufficientExecutionStackException.cs
index 6b02f46f29..b9a4a12ddd 100644
--- a/src/mscorlib/src/System/InsufficientExecutionStackException.cs
+++ b/src/mscorlib/src/System/InsufficientExecutionStackException.cs
@@ -2,46 +2,31 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-/*=============================================================================
-**
-**
-**
-** Purpose: The exception class used when there is insufficient execution stack
-** to allow most Framework methods to execute.
-**
-**
-=============================================================================*/
-
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
+namespace System
+{
[Serializable]
- public sealed class InsufficientExecutionStackException : SystemException
+ public sealed class InsufficientExecutionStackException : SystemException
{
public InsufficientExecutionStackException()
- : base(Environment.GetResourceString("Arg_InsufficientExecutionStackException"))
- {
- SetErrorCode(__HResults.COR_E_INSUFFICIENTEXECUTIONSTACK);
- }
-
- public InsufficientExecutionStackException(String message)
- : base(message)
+ : base(SR.Arg_InsufficientExecutionStackException)
{
- SetErrorCode(__HResults.COR_E_INSUFFICIENTEXECUTIONSTACK);
+ HResult = __HResults.COR_E_INSUFFICIENTEXECUTIONSTACK;
}
-
- public InsufficientExecutionStackException(String message, Exception innerException)
- : base(message, innerException)
+
+ public InsufficientExecutionStackException(String message)
+ : base(message)
{
- SetErrorCode(__HResults.COR_E_INSUFFICIENTEXECUTIONSTACK);
+ HResult = __HResults.COR_E_INSUFFICIENTEXECUTIONSTACK;
}
- private InsufficientExecutionStackException(SerializationInfo info, StreamingContext context)
- : base(info, context)
+ public InsufficientExecutionStackException(String message, Exception innerException)
+ : base(message, innerException)
{
+ HResult = __HResults.COR_E_INSUFFICIENTEXECUTIONSTACK;
}
-
+
+ internal InsufficientExecutionStackException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/Int16.cs b/src/mscorlib/src/System/Int16.cs
index f02a5f2cda..a5e62233e4 100644
--- a/src/mscorlib/src/System/Int16.cs
+++ b/src/mscorlib/src/System/Int16.cs
@@ -19,7 +19,6 @@ namespace System {
using System.Runtime.InteropServices;
using System.Diagnostics.Contracts;
-[System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
public struct Int16 : IComparable, IFormattable, IConvertible
diff --git a/src/mscorlib/src/System/Int32.cs b/src/mscorlib/src/System/Int32.cs
index 2da55bf089..0e1ed56a41 100644
--- a/src/mscorlib/src/System/Int32.cs
+++ b/src/mscorlib/src/System/Int32.cs
@@ -21,7 +21,6 @@ namespace System {
[Serializable]
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct Int32 : IComparable, IFormattable, IConvertible
, IComparable<Int32>, IEquatable<Int32>
{
diff --git a/src/mscorlib/src/System/Int64.cs b/src/mscorlib/src/System/Int64.cs
index e5fcf86c3b..3520ede533 100644
--- a/src/mscorlib/src/System/Int64.cs
+++ b/src/mscorlib/src/System/Int64.cs
@@ -20,7 +20,6 @@ namespace System {
[Serializable]
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct Int64 : IComparable, IFormattable, IConvertible
, IComparable<Int64>, IEquatable<Int64>
{
diff --git a/src/mscorlib/src/System/IntPtr.cs b/src/mscorlib/src/System/IntPtr.cs
index 2d66652ab8..dbddcd319a 100644
--- a/src/mscorlib/src/System/IntPtr.cs
+++ b/src/mscorlib/src/System/IntPtr.cs
@@ -23,7 +23,6 @@ namespace System {
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct IntPtr : IEquatable<IntPtr>, ISerializable
{
unsafe private void* m_value; // The compiler treats void* closest to uint hence explicit casts are required to preserve int behavior
@@ -32,13 +31,11 @@ namespace System {
// fast way to compare IntPtr to (IntPtr)0 while IntPtr.Zero doesn't work due to slow statics access
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal unsafe bool IsNull()
{
return (this.m_value == null);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public unsafe IntPtr(int value)
{
@@ -49,7 +46,6 @@ namespace System {
#endif
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public unsafe IntPtr(long value)
{
@@ -61,7 +57,6 @@ namespace System {
}
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public unsafe IntPtr(void* value)
{
@@ -111,7 +106,6 @@ namespace System {
#endif
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public unsafe int ToInt32() {
#if BIT64
@@ -122,7 +116,6 @@ namespace System {
#endif
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public unsafe long ToInt64() {
#if BIT64
@@ -152,14 +145,12 @@ namespace System {
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public static explicit operator IntPtr (int value)
{
return new IntPtr(value);
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public static explicit operator IntPtr (long value)
{
@@ -201,28 +192,24 @@ namespace System {
#endif
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public unsafe static bool operator == (IntPtr value1, IntPtr value2)
{
return value1.m_value == value2.m_value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public unsafe static bool operator != (IntPtr value1, IntPtr value2)
{
return value1.m_value != value2.m_value;
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public static IntPtr Add(IntPtr pointer, int offset)
{
return pointer + offset;
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public static IntPtr operator +(IntPtr pointer, int offset)
{
@@ -233,13 +220,11 @@ namespace System {
#endif
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public static IntPtr Subtract(IntPtr pointer, int offset) {
return pointer - offset;
}
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public static IntPtr operator -(IntPtr pointer, int offset) {
#if BIT64
@@ -252,7 +237,6 @@ namespace System {
public static int Size
{
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
get
{
@@ -266,7 +250,6 @@ namespace System {
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public unsafe void* ToPointer()
{
diff --git a/src/mscorlib/src/System/Internal.cs b/src/mscorlib/src/System/Internal.cs
index 0eb2bced72..b0860109d9 100644
--- a/src/mscorlib/src/System/Internal.cs
+++ b/src/mscorlib/src/System/Internal.cs
@@ -19,15 +19,7 @@ using System.StubHelpers;
using System.Threading.Tasks;
#if FEATURE_COMINTEROP
-
using System.Runtime.InteropServices.WindowsRuntime;
-
-[assembly:Guid("BED7F4EA-1A96-11d2-8F08-00A0C9A6186D")]
-
-// The following attribute are required to ensure COM compatibility.
-[assembly:System.Runtime.InteropServices.ComCompatibleVersion(1, 0, 3300, 0)]
-[assembly:System.Runtime.InteropServices.TypeLibVersion(2, 4)]
-
#endif // FEATURE_COMINTEROP
[assembly:DefaultDependencyAttribute(LoadHint.Always)]
diff --git a/src/mscorlib/src/System/InvalidCastException.cs b/src/mscorlib/src/System/InvalidCastException.cs
index ba7b722434..01d92b2837 100644
--- a/src/mscorlib/src/System/InvalidCastException.cs
+++ b/src/mscorlib/src/System/InvalidCastException.cs
@@ -4,42 +4,41 @@
/*=============================================================================
**
-**
-**
-** Purpose: Exception class for bad cast conditions!
-**
+** Purpose: Exception class for invalid cast conditions!
**
=============================================================================*/
-namespace System {
-
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public class InvalidCastException : SystemException {
- public InvalidCastException()
- : base(Environment.GetResourceString("Arg_InvalidCastException")) {
- SetErrorCode(__HResults.COR_E_INVALIDCAST);
- }
-
- public InvalidCastException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_INVALIDCAST);
+ public class InvalidCastException : SystemException
+ {
+ public InvalidCastException()
+ : base(SR.Arg_InvalidCastException)
+ {
+ HResult = __HResults.COR_E_INVALIDCAST;
}
- public InvalidCastException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_INVALIDCAST);
+ public InvalidCastException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_INVALIDCAST;
}
- protected InvalidCastException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public InvalidCastException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_INVALIDCAST;
}
- public InvalidCastException(String message, int errorCode)
- : base(message) {
- SetErrorCode(errorCode);
+ public InvalidCastException(String message, int errorCode)
+ : base(message)
+ {
+ HResult = errorCode;
}
+ protected InvalidCastException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/InvalidOperationException.cs b/src/mscorlib/src/System/InvalidOperationException.cs
index 5f29e79056..24a08c8089 100644
--- a/src/mscorlib/src/System/InvalidOperationException.cs
+++ b/src/mscorlib/src/System/InvalidOperationException.cs
@@ -11,31 +11,32 @@
**
**
=============================================================================*/
-namespace System {
-
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
public class InvalidOperationException : SystemException
{
- public InvalidOperationException()
- : base(Environment.GetResourceString("Arg_InvalidOperationException")) {
- SetErrorCode(__HResults.COR_E_INVALIDOPERATION);
- }
-
- public InvalidOperationException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_INVALIDOPERATION);
+ public InvalidOperationException()
+ : base(SR.Arg_InvalidOperationException)
+ {
+ HResult = __HResults.COR_E_INVALIDOPERATION;
}
-
- public InvalidOperationException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_INVALIDOPERATION);
+
+ public InvalidOperationException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_INVALIDOPERATION;
}
- protected InvalidOperationException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public InvalidOperationException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_INVALIDOPERATION;
}
+ protected InvalidOperationException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
-
diff --git a/src/mscorlib/src/System/InvalidProgramException.cs b/src/mscorlib/src/System/InvalidProgramException.cs
index 649849a8bd..401b3a0ddb 100644
--- a/src/mscorlib/src/System/InvalidProgramException.cs
+++ b/src/mscorlib/src/System/InvalidProgramException.cs
@@ -11,31 +11,31 @@
**
=============================================================================*/
-namespace System {
+using System.Runtime.Serialization;
- using System;
- using System.Runtime.Serialization;
+namespace System
+{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class InvalidProgramException : SystemException {
- public InvalidProgramException()
- : base(Environment.GetResourceString("InvalidProgram_Default")) {
- SetErrorCode(__HResults.COR_E_INVALIDPROGRAM);
+ public sealed class InvalidProgramException : SystemException
+ {
+ public InvalidProgramException()
+ : base(SR.InvalidProgram_Default)
+ {
+ HResult = __HResults.COR_E_INVALIDPROGRAM;
}
-
- public InvalidProgramException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_INVALIDPROGRAM);
- }
-
- public InvalidProgramException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.COR_E_INVALIDPROGRAM);
+
+ public InvalidProgramException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_INVALIDPROGRAM;
}
- internal InvalidProgramException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public InvalidProgramException(String message, Exception inner)
+ : base(message, inner)
+ {
+ HResult = __HResults.COR_E_INVALIDPROGRAM;
}
+ internal InvalidProgramException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/InvalidTimeZoneException.cs b/src/mscorlib/src/System/InvalidTimeZoneException.cs
index f33475497a..8f0751c426 100644
--- a/src/mscorlib/src/System/InvalidTimeZoneException.cs
+++ b/src/mscorlib/src/System/InvalidTimeZoneException.cs
@@ -6,19 +6,23 @@ using System.Runtime.Serialization;
namespace System
{
- [Serializable]
- [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
- public class InvalidTimeZoneException : Exception
- {
- public InvalidTimeZoneException(String message)
- : base(message) { }
+ [Serializable]
+ public class InvalidTimeZoneException : Exception
+ {
+ public InvalidTimeZoneException()
+ {
+ }
- public InvalidTimeZoneException(String message, Exception innerException)
- : base(message, innerException) { }
+ public InvalidTimeZoneException(String message)
+ : base(message)
+ {
+ }
- protected InvalidTimeZoneException(SerializationInfo info, StreamingContext context)
- : base(info, context) { }
+ public InvalidTimeZoneException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ }
- public InvalidTimeZoneException() { }
- }
+ protected InvalidTimeZoneException(SerializationInfo info, StreamingContext context) : base(info, context) { }
+ }
}
diff --git a/src/mscorlib/src/System/Lazy.cs b/src/mscorlib/src/System/Lazy.cs
index 85cbb9816a..0ddd6da3a2 100644
--- a/src/mscorlib/src/System/Lazy.cs
+++ b/src/mscorlib/src/System/Lazy.cs
@@ -18,7 +18,6 @@
using System.Runtime;
using System.Runtime.InteropServices;
using System.Security;
-using System.Security.Permissions;
using System.Diagnostics;
using System.Runtime.Serialization;
using System.Threading;
@@ -47,7 +46,6 @@ namespace System
/// </para>
/// </remarks>
[Serializable]
- [ComVisible(false)]
[DebuggerTypeProxy(typeof(System_LazyDebugView<>))]
[DebuggerDisplay("ThreadSafetyMode={Mode}, IsValueCreated={IsValueCreated}, IsValueFaulted={IsValueFaulted}, Value={ValueForDebugDisplay}")]
public class Lazy<T>
diff --git a/src/mscorlib/src/System/LowLevelConsole.cs b/src/mscorlib/src/System/LowLevelConsole.cs
index 316583e276..29e69185ac 100644
--- a/src/mscorlib/src/System/LowLevelConsole.cs
+++ b/src/mscorlib/src/System/LowLevelConsole.cs
@@ -10,18 +10,14 @@ using Microsoft.Win32.SafeHandles;
namespace System
{
//
- // Simple limited console class for internal printf-style debugging in mscorlib
- // and low-level tests that just want to depend on mscorlib.
+ // Simple limited console class for internal printf-style debugging in System.Private.CoreLib
+ // and low-level tests that want to call System.Private.CoreLib directly
//
- public static class Console
+ public static class LowLevelConsole
{
- static SafeFileHandle _outputHandle;
-
- static Console()
- {
- _outputHandle = new SafeFileHandle(Win32Native.GetStdHandle(Win32Native.STD_OUTPUT_HANDLE), false);
- }
+ private static readonly SafeFileHandle _outputHandle =
+ new SafeFileHandle(Win32Native.GetStdHandle(Win32Native.STD_OUTPUT_HANDLE), false);
public static unsafe void Write(string s)
{
@@ -44,4 +40,26 @@ namespace System
Write(Environment.NewLine);
}
}
+
+ //
+ // Internal wrapper with the regular name for convenience. Note that it cannot be public to avoid colliding
+ // with the full Console type.
+ //
+ internal static class Console
+ {
+ public static void Write(string s)
+ {
+ LowLevelConsole.Write(s);
+ }
+
+ public static void WriteLine(string s)
+ {
+ LowLevelConsole.WriteLine(s);
+ }
+
+ public static void WriteLine()
+ {
+ LowLevelConsole.WriteLine();
+ }
+ }
}
diff --git a/src/mscorlib/src/System/MarshalByRefObject.cs b/src/mscorlib/src/System/MarshalByRefObject.cs
index 53ebda7672..9014de00c7 100644
--- a/src/mscorlib/src/System/MarshalByRefObject.cs
+++ b/src/mscorlib/src/System/MarshalByRefObject.cs
@@ -2,32 +2,25 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-/*============================================================
-**
-**
-**
-**
-** Purpose: Defines the root type for all marshal by reference aka
-** AppDomain bound types
-**
-**
-**
-===========================================================*/
namespace System
{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class MarshalByRefObject
+ public abstract class MarshalByRefObject
{
- protected MarshalByRefObject() { }
+ protected MarshalByRefObject()
+ {
+ }
+
public object GetLifetimeService()
{
throw new PlatformNotSupportedException();
}
+
public virtual object InitializeLifetimeService()
{
throw new PlatformNotSupportedException();
}
+
protected MarshalByRefObject MemberwiseClone(bool cloneIdentity)
{
MarshalByRefObject mbr = (MarshalByRefObject)base.MemberwiseClone();
diff --git a/src/mscorlib/src/System/Math.cs b/src/mscorlib/src/System/Math.cs
index 3ac1f0694a..8b2af3d3e4 100644
--- a/src/mscorlib/src/System/Math.cs
+++ b/src/mscorlib/src/System/Math.cs
@@ -149,7 +149,6 @@ namespace System {
return InternalTruncate(d);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern double Sqrt(double d);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -294,58 +293,49 @@ namespace System {
**Returns the larger of val1 and val2
============================================================================*/
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static sbyte Max(sbyte val1, sbyte val2) {
return (val1>=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static byte Max(byte val1, byte val2) {
return (val1>=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static short Max(short val1, short val2) {
return (val1>=val2)?val1:val2;
}
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static ushort Max(ushort val1, ushort val2) {
return (val1>=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static int Max(int val1, int val2) {
return (val1>=val2)?val1:val2;
}
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static uint Max(uint val1, uint val2) {
return (val1>=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static long Max(long val1, long val2) {
return (val1>=val2)?val1:val2;
}
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static ulong Max(ulong val1, ulong val2) {
return (val1>=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static float Max(float val1, float val2) {
if (val1 > val2)
return val1;
@@ -356,7 +346,6 @@ namespace System {
return val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static double Max(double val1, double val2) {
if (val1 > val2)
return val1;
@@ -367,7 +356,6 @@ namespace System {
return val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static Decimal Max(Decimal val1, Decimal val2) {
return Decimal.Max(val1,val2);
}
@@ -376,58 +364,49 @@ namespace System {
**Returns the smaller of val1 and val2.
============================================================================*/
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static sbyte Min(sbyte val1, sbyte val2) {
return (val1<=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static byte Min(byte val1, byte val2) {
return (val1<=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static short Min(short val1, short val2) {
return (val1<=val2)?val1:val2;
}
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static ushort Min(ushort val1, ushort val2) {
return (val1<=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static int Min(int val1, int val2) {
return (val1<=val2)?val1:val2;
}
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static uint Min(uint val1, uint val2) {
return (val1<=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static long Min(long val1, long val2) {
return (val1<=val2)?val1:val2;
}
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static ulong Min(ulong val1, ulong val2) {
return (val1<=val2)?val1:val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static float Min(float val1, float val2) {
if (val1 < val2)
return val1;
@@ -438,7 +417,6 @@ namespace System {
return val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static double Min(double val1, double val2) {
if (val1 < val2)
return val1;
@@ -449,7 +427,6 @@ namespace System {
return val2;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static Decimal Min(Decimal val1, Decimal val2) {
return Decimal.Min(val1,val2);
}
diff --git a/src/mscorlib/src/System/MathF.cs b/src/mscorlib/src/System/MathF.cs
index fb800924b5..545774cc32 100644
--- a/src/mscorlib/src/System/MathF.cs
+++ b/src/mscorlib/src/System/MathF.cs
@@ -143,10 +143,8 @@ namespace System {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern float Log10(float x);
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static float Max(float x, float y) => Math.Max(x, y);
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static float Min(float x, float y) => Math.Min(x, y);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -201,7 +199,6 @@ namespace System {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern float Sinh(float x);
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern float Sqrt(float x);
diff --git a/src/mscorlib/src/System/MemberAccessException.cs b/src/mscorlib/src/System/MemberAccessException.cs
index bc21248dae..54eee67b07 100644
--- a/src/mscorlib/src/System/MemberAccessException.cs
+++ b/src/mscorlib/src/System/MemberAccessException.cs
@@ -8,41 +8,41 @@
// access, due to it being removed, private or something similar.
////////////////////////////////////////////////////////////////////////////////
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
+
+namespace System
+{
// The MemberAccessException is thrown when trying to access a class
// member fails.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
- public class MemberAccessException : SystemException {
-
+ public class MemberAccessException : SystemException
+ {
// Creates a new MemberAccessException with its message string set to
// the empty string, its HRESULT set to COR_E_MEMBERACCESS,
// and its ExceptionInfo reference set to null.
- public MemberAccessException()
- : base(Environment.GetResourceString("Arg_AccessException")) {
- SetErrorCode(__HResults.COR_E_MEMBERACCESS);
+ public MemberAccessException()
+ : base(SR.Arg_AccessException)
+ {
+ HResult = __HResults.COR_E_MEMBERACCESS;
}
-
+
// Creates a new MemberAccessException with its message string set to
// message, its HRESULT set to COR_E_ACCESS,
// and its ExceptionInfo reference set to null.
//
- public MemberAccessException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_MEMBERACCESS);
- }
-
- public MemberAccessException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.COR_E_MEMBERACCESS);
+ public MemberAccessException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_MEMBERACCESS;
}
- protected MemberAccessException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public MemberAccessException(String message, Exception inner)
+ : base(message, inner)
+ {
+ HResult = __HResults.COR_E_MEMBERACCESS;
}
+ protected MemberAccessException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/MethodAccessException.cs b/src/mscorlib/src/System/MethodAccessException.cs
index 3feaf3ed54..2ecbd14d6d 100644
--- a/src/mscorlib/src/System/MethodAccessException.cs
+++ b/src/mscorlib/src/System/MethodAccessException.cs
@@ -9,31 +9,31 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public class MethodAccessException : MemberAccessException {
- public MethodAccessException()
- : base(Environment.GetResourceString("Arg_MethodAccessException")) {
- SetErrorCode(__HResults.COR_E_METHODACCESS);
- }
-
- public MethodAccessException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_METHODACCESS);
+ public class MethodAccessException : MemberAccessException
+ {
+ public MethodAccessException()
+ : base(SR.Arg_MethodAccessException)
+ {
+ HResult = __HResults.COR_E_METHODACCESS;
}
-
- public MethodAccessException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.COR_E_METHODACCESS);
+
+ public MethodAccessException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_METHODACCESS;
}
- protected MethodAccessException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public MethodAccessException(String message, Exception inner)
+ : base(message, inner)
+ {
+ HResult = __HResults.COR_E_METHODACCESS;
}
+ protected MethodAccessException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/MidpointRounding.cs b/src/mscorlib/src/System/MidpointRounding.cs
index ff709240c5..a75de43e65 100644
--- a/src/mscorlib/src/System/MidpointRounding.cs
+++ b/src/mscorlib/src/System/MidpointRounding.cs
@@ -2,11 +2,10 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-
-namespace System {
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum MidpointRounding {
+namespace System
+{
+ public enum MidpointRounding
+ {
ToEven = 0,
AwayFromZero = 1,
}
diff --git a/src/mscorlib/src/System/MissingFieldException.cs b/src/mscorlib/src/System/MissingFieldException.cs
index d96d0378e3..660e39cb47 100644
--- a/src/mscorlib/src/System/MissingFieldException.cs
+++ b/src/mscorlib/src/System/MissingFieldException.cs
@@ -16,7 +16,6 @@ namespace System {
using System.Runtime.Serialization;
using System.Runtime.CompilerServices;
using System.Globalization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class MissingFieldException : MissingMemberException, ISerializable {
public MissingFieldException()
@@ -51,14 +50,6 @@ namespace System {
}
}
- // Called from the EE
- private MissingFieldException(String className, String fieldName, byte[] signature)
- {
- ClassName = className;
- MemberName = fieldName;
- Signature = signature;
- }
-
public MissingFieldException(String className, String fieldName)
{
ClassName = className;
diff --git a/src/mscorlib/src/System/MissingMemberException.cs b/src/mscorlib/src/System/MissingMemberException.cs
index ab773dc467..bb9be8827a 100644
--- a/src/mscorlib/src/System/MissingMemberException.cs
+++ b/src/mscorlib/src/System/MissingMemberException.cs
@@ -18,11 +18,9 @@ namespace System {
using System.Runtime.Serialization;
using System.Runtime.CompilerServices;
using System.Globalization;
- using System.Security.Permissions;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class MissingMemberException : MemberAccessException, ISerializable {
public MissingMemberException()
@@ -64,16 +62,6 @@ namespace System {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern String FormatSignature(byte [] signature);
-
-
- // Potentially called from the EE
- private MissingMemberException(String className, String memberName, byte[] signature)
- {
- ClassName = className;
- MemberName = memberName;
- Signature = signature;
- }
-
public MissingMemberException(String className, String memberName)
{
ClassName = className;
diff --git a/src/mscorlib/src/System/MissingMethodException.cs b/src/mscorlib/src/System/MissingMethodException.cs
index 79434900a1..426711f953 100644
--- a/src/mscorlib/src/System/MissingMethodException.cs
+++ b/src/mscorlib/src/System/MissingMethodException.cs
@@ -18,7 +18,6 @@ namespace System {
using System.Runtime.Serialization;
using System.Runtime.CompilerServices;
using System.Globalization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class MissingMethodException : MissingMemberException, ISerializable {
public MissingMethodException()
@@ -53,14 +52,6 @@ namespace System {
}
}
- // Called from the EE
- private MissingMethodException(String className, String methodName, byte[] signature)
- {
- ClassName = className;
- MemberName = methodName;
- Signature = signature;
- }
-
public MissingMethodException(String className, String methodName)
{
ClassName = className;
diff --git a/src/mscorlib/src/System/MulticastDelegate.cs b/src/mscorlib/src/System/MulticastDelegate.cs
index a7b244cdae..aa3271ceab 100644
--- a/src/mscorlib/src/System/MulticastDelegate.cs
+++ b/src/mscorlib/src/System/MulticastDelegate.cs
@@ -466,10 +466,9 @@ namespace System
{
// Create an array of delegate copies and each
// element into the array
- int invocationCount = (int)_invocationCount;
- del = new Delegate[invocationCount];
+ del = new Delegate[(int)_invocationCount];
- for (int i = 0; i < invocationCount; i++)
+ for (int i = 0; i < del.Length; i++)
del[i] = (Delegate)invocationList[i];
}
return del;
diff --git a/src/mscorlib/src/System/MulticastNotSupportedException.cs b/src/mscorlib/src/System/MulticastNotSupportedException.cs
index ad8eeebb21..4fcaa9857d 100644
--- a/src/mscorlib/src/System/MulticastNotSupportedException.cs
+++ b/src/mscorlib/src/System/MulticastNotSupportedException.cs
@@ -7,31 +7,31 @@
// This is thrown when you add multiple callbacks to a non-multicast delegate.
////////////////////////////////////////////////////////////////////////////////
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public sealed class MulticastNotSupportedException : SystemException {
-
- public MulticastNotSupportedException()
- : base(Environment.GetResourceString("Arg_MulticastNotSupportedException")) {
- SetErrorCode(__HResults.COR_E_MULTICASTNOTSUPPORTED);
- }
-
- public MulticastNotSupportedException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_MULTICASTNOTSUPPORTED);
+ public sealed class MulticastNotSupportedException : SystemException
+ {
+ public MulticastNotSupportedException()
+ : base(SR.Arg_MulticastNotSupportedException)
+ {
+ HResult = __HResults.COR_E_MULTICASTNOTSUPPORTED;
}
-
- public MulticastNotSupportedException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.COR_E_MULTICASTNOTSUPPORTED);
+
+ public MulticastNotSupportedException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_MULTICASTNOTSUPPORTED;
}
- internal MulticastNotSupportedException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public MulticastNotSupportedException(String message, Exception inner)
+ : base(message, inner)
+ {
+ HResult = __HResults.COR_E_MULTICASTNOTSUPPORTED;
}
+ internal MulticastNotSupportedException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/NonSerializedAttribute.cs b/src/mscorlib/src/System/NonSerializedAttribute.cs
index c3cd9a540c..39f186212a 100644
--- a/src/mscorlib/src/System/NonSerializedAttribute.cs
+++ b/src/mscorlib/src/System/NonSerializedAttribute.cs
@@ -15,7 +15,6 @@ namespace System
using System.Reflection;
[AttributeUsage(AttributeTargets.Field, Inherited=false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class NonSerializedAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeFieldInfo field)
diff --git a/src/mscorlib/src/System/NotFiniteNumberException.cs b/src/mscorlib/src/System/NotFiniteNumberException.cs
index 3a896ce548..68e8f88d81 100644
--- a/src/mscorlib/src/System/NotFiniteNumberException.cs
+++ b/src/mscorlib/src/System/NotFiniteNumberException.cs
@@ -2,68 +2,70 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
- using System.Diagnostics.Contracts;
+using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+namespace System
+{
[Serializable]
- public class NotFiniteNumberException : ArithmeticException {
+ public class NotFiniteNumberException : ArithmeticException
+ {
private double _offendingNumber;
public NotFiniteNumberException()
- : base(Environment.GetResourceString("Arg_NotFiniteNumberException")) {
+ : base(SR.Arg_NotFiniteNumberException)
+ {
_offendingNumber = 0;
- SetErrorCode(__HResults.COR_E_NOTFINITENUMBER);
+ HResult = __HResults.COR_E_NOTFINITENUMBER;
}
public NotFiniteNumberException(double offendingNumber)
- : base() {
+ : base()
+ {
_offendingNumber = offendingNumber;
- SetErrorCode(__HResults.COR_E_NOTFINITENUMBER);
+ HResult = __HResults.COR_E_NOTFINITENUMBER;
}
public NotFiniteNumberException(String message)
- : base(message) {
+ : base(message)
+ {
_offendingNumber = 0;
- SetErrorCode(__HResults.COR_E_NOTFINITENUMBER);
+ HResult = __HResults.COR_E_NOTFINITENUMBER;
}
public NotFiniteNumberException(String message, double offendingNumber)
- : base(message) {
+ : base(message)
+ {
_offendingNumber = offendingNumber;
- SetErrorCode(__HResults.COR_E_NOTFINITENUMBER);
+ HResult = __HResults.COR_E_NOTFINITENUMBER;
}
public NotFiniteNumberException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_NOTFINITENUMBER);
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_NOTFINITENUMBER;
}
public NotFiniteNumberException(String message, double offendingNumber, Exception innerException)
- : base(message, innerException) {
+ : base(message, innerException)
+ {
_offendingNumber = offendingNumber;
- SetErrorCode(__HResults.COR_E_NOTFINITENUMBER);
+ HResult = __HResults.COR_E_NOTFINITENUMBER;
}
- protected NotFiniteNumberException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ protected NotFiniteNumberException(SerializationInfo info, StreamingContext context) : base(info, context)
+ {
_offendingNumber = info.GetInt32("OffendingNumber");
}
- public double OffendingNumber {
- get { return _offendingNumber; }
- }
-
- public override void GetObjectData(SerializationInfo info, StreamingContext context) {
- if (info==null) {
- throw new ArgumentNullException(nameof(info));
- }
- Contract.EndContractBlock();
+ public override void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
base.GetObjectData(info, context);
info.AddValue("OffendingNumber", _offendingNumber, typeof(Int32));
}
+
+ public double OffendingNumber
+ {
+ get { return _offendingNumber; }
+ }
}
}
diff --git a/src/mscorlib/src/System/NotImplementedException.cs b/src/mscorlib/src/System/NotImplementedException.cs
index d6c966805a..4d141eac8c 100644
--- a/src/mscorlib/src/System/NotImplementedException.cs
+++ b/src/mscorlib/src/System/NotImplementedException.cs
@@ -12,29 +12,29 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+namespace System
+{
[Serializable]
public class NotImplementedException : SystemException
{
- public NotImplementedException()
- : base(Environment.GetResourceString("Arg_NotImplementedException")) {
- SetErrorCode(__HResults.E_NOTIMPL);
+ public NotImplementedException()
+ : base(SR.Arg_NotImplementedException)
+ {
+ HResult = __HResults.E_NOTIMPL;
}
- public NotImplementedException(String message)
- : base(message) {
- SetErrorCode(__HResults.E_NOTIMPL);
+ public NotImplementedException(String message)
+ : base(message)
+ {
+ HResult = __HResults.E_NOTIMPL;
}
- public NotImplementedException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.E_NOTIMPL);
+ public NotImplementedException(String message, Exception inner)
+ : base(message, inner)
+ {
+ HResult = __HResults.E_NOTIMPL;
}
- protected NotImplementedException(SerializationInfo info, StreamingContext context) : base(info, context) {
- }
+ protected NotImplementedException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/NotSupportedException.cs b/src/mscorlib/src/System/NotSupportedException.cs
index ecef1d199a..21b2d54a46 100644
--- a/src/mscorlib/src/System/NotSupportedException.cs
+++ b/src/mscorlib/src/System/NotSupportedException.cs
@@ -11,31 +11,31 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
public class NotSupportedException : SystemException
{
- public NotSupportedException()
- : base(Environment.GetResourceString("Arg_NotSupportedException")) {
- SetErrorCode(__HResults.COR_E_NOTSUPPORTED);
- }
-
- public NotSupportedException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_NOTSUPPORTED);
+ public NotSupportedException()
+ : base(SR.Arg_NotSupportedException)
+ {
+ HResult = __HResults.COR_E_NOTSUPPORTED;
}
-
- public NotSupportedException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_NOTSUPPORTED);
+
+ public NotSupportedException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_NOTSUPPORTED;
}
- protected NotSupportedException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public NotSupportedException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_NOTSUPPORTED;
}
+ protected NotSupportedException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/NullReferenceException.cs b/src/mscorlib/src/System/NullReferenceException.cs
index d66ad9ca41..0aa5c6197a 100644
--- a/src/mscorlib/src/System/NullReferenceException.cs
+++ b/src/mscorlib/src/System/NullReferenceException.cs
@@ -11,30 +11,31 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public class NullReferenceException : SystemException {
- public NullReferenceException()
- : base(Environment.GetResourceString("Arg_NullReferenceException")) {
- SetErrorCode(__HResults.COR_E_NULLREFERENCE);
- }
-
- public NullReferenceException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_NULLREFERENCE);
+ public class NullReferenceException : SystemException
+ {
+ public NullReferenceException()
+ : base(SR.Arg_NullReferenceException)
+ {
+ HResult = __HResults.COR_E_NULLREFERENCE;
}
-
- public NullReferenceException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_NULLREFERENCE);
+
+ public NullReferenceException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_NULLREFERENCE;
}
- protected NullReferenceException(SerializationInfo info, StreamingContext context) : base(info, context) {}
+ public NullReferenceException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_NULLREFERENCE;
+ }
+ protected NullReferenceException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/Nullable.cs b/src/mscorlib/src/System/Nullable.cs
index 8a22c8e65c..5ade2875c5 100644
--- a/src/mscorlib/src/System/Nullable.cs
+++ b/src/mscorlib/src/System/Nullable.cs
@@ -101,10 +101,8 @@ namespace System
// bool IEquatable<Nullable<T>>.Equals(Nullable<T> other)
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static class Nullable
{
- [System.Runtime.InteropServices.ComVisible(true)]
public static int Compare<T>(Nullable<T> n1, Nullable<T> n2) where T : struct
{
if (n1.HasValue) {
@@ -115,7 +113,6 @@ namespace System
return 0;
}
- [System.Runtime.InteropServices.ComVisible(true)]
public static bool Equals<T>(Nullable<T> n1, Nullable<T> n2) where T : struct
{
if (n1.HasValue) {
diff --git a/src/mscorlib/src/System/Number.cs b/src/mscorlib/src/System/Number.cs
index 3412c02c31..66d05673a6 100644
--- a/src/mscorlib/src/System/Number.cs
+++ b/src/mscorlib/src/System/Number.cs
@@ -310,10 +310,6 @@ namespace System {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal unsafe static extern Boolean NumberBufferToDouble(byte* number, ref Double value);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [System.Runtime.CompilerServices.FriendAccessAllowed]
- internal static extern unsafe string FormatNumberBuffer(byte* number, string format, NumberFormatInfo info, char* allDigits);
-
// Constants used by number parsing
private const Int32 NumberMaxDigits = 50;
diff --git a/src/mscorlib/src/System/Numerics/Hashing/HashHelpers.cs b/src/mscorlib/src/System/Numerics/Hashing/HashHelpers.cs
index 0314d1af3c..f017309a90 100644
--- a/src/mscorlib/src/System/Numerics/Hashing/HashHelpers.cs
+++ b/src/mscorlib/src/System/Numerics/Hashing/HashHelpers.cs
@@ -8,12 +8,14 @@ namespace System.Numerics.Hashing
internal static class HashHelpers
{
+ public static readonly int RandomSeed = new Random().Next(Int32.MinValue, Int32.MaxValue);
+
public static int Combine(int h1, int h2)
{
- // The jit optimizes this to use the ROL instruction on x86
+ // RyuJIT optimizes this to use the ROL instruction
// Related GitHub pull request: dotnet/coreclr#1830
- uint shift5 = ((uint)h1 << 5) | ((uint)h1 >> 27);
- return ((int)shift5 + h1) ^ h2;
+ uint rol5 = ((uint)h1 << 5) | ((uint)h1 >> 27);
+ return ((int)rol5 + h1) ^ h2;
}
}
}
diff --git a/src/mscorlib/src/System/Object.cs b/src/mscorlib/src/System/Object.cs
index d8d9a0e36c..1f47d8cdef 100644
--- a/src/mscorlib/src/System/Object.cs
+++ b/src/mscorlib/src/System/Object.cs
@@ -37,7 +37,6 @@ namespace System
public class Object
{
// Creates a new instance of an Object.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
[System.Runtime.Versioning.NonVersionable]
public Object()
{
@@ -73,7 +72,6 @@ public class Object
return objA.Equals(objB);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static bool ReferenceEquals (Object objA, Object objB) {
return objA == objB;
@@ -101,7 +99,6 @@ public class Object
// Allow an object to free resources before the object is reclaimed by the GC.
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
~Object()
{
diff --git a/src/mscorlib/src/System/ObjectDisposedException.cs b/src/mscorlib/src/System/ObjectDisposedException.cs
index d2eca37325..1f77b1f009 100644
--- a/src/mscorlib/src/System/ObjectDisposedException.cs
+++ b/src/mscorlib/src/System/ObjectDisposedException.cs
@@ -2,72 +2,81 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
- using System;
- using System.Runtime.Serialization;
- using System.Globalization;
- using System.Security.Permissions;
+using System.Globalization;
+using System.Runtime.Serialization;
+namespace System
+{
/// <devdoc>
/// <para> The exception that is thrown when accessing an object that was
/// disposed.</para>
/// </devdoc>
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
- public class ObjectDisposedException : InvalidOperationException {
- private String objectName;
+ public class ObjectDisposedException : InvalidOperationException
+ {
+ private String _objectName;
// This constructor should only be called by the EE (COMPlusThrow)
- private ObjectDisposedException() :
- this(null ,Environment.GetResourceString("ObjectDisposed_Generic")) {
+ private ObjectDisposedException() :
+ this(null, SR.ObjectDisposed_Generic)
+ {
}
- public ObjectDisposedException(String objectName) :
- this(objectName, Environment.GetResourceString("ObjectDisposed_Generic")) {
+ public ObjectDisposedException(String objectName) :
+ this(objectName, SR.ObjectDisposed_Generic)
+ {
}
- public ObjectDisposedException(String objectName, String message) : base(message) {
- SetErrorCode(__HResults.COR_E_OBJECTDISPOSED);
- this.objectName = objectName;
+ public ObjectDisposedException(String objectName, String message) : base(message)
+ {
+ HResult = __HResults.COR_E_OBJECTDISPOSED;
+ _objectName = objectName;
}
- public ObjectDisposedException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_OBJECTDISPOSED);
+ public ObjectDisposedException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_OBJECTDISPOSED;
+ }
+
+ protected ObjectDisposedException(SerializationInfo info, StreamingContext context)
+ : base(info, context)
+ {
+ _objectName = info.GetString("ObjectName");
+ }
+
+ public override void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ base.GetObjectData(info, context);
+ info.AddValue("ObjectName",ObjectName,typeof(String));
}
/// <devdoc>
/// <para>Gets the text for the message for this exception.</para>
/// </devdoc>
- public override String Message {
- get {
+ public override String Message
+ {
+ get
+ {
String name = ObjectName;
if (name == null || name.Length == 0)
return base.Message;
- String objectDisposed = Environment.GetResourceString("ObjectDisposed_ObjectName_Name", name);
+ String objectDisposed = SR.Format(SR.ObjectDisposed_ObjectName_Name, name);
return base.Message + Environment.NewLine + objectDisposed;
}
}
- public String ObjectName {
- get {
- if (objectName == null)
+ public String ObjectName
+ {
+ get
+ {
+ if ((_objectName == null)) // && !CompatibilitySwitches.IsAppEarlierThanWindowsPhone8)
{
return String.Empty;
}
- return objectName;
+ return _objectName;
}
}
-
- protected ObjectDisposedException(SerializationInfo info, StreamingContext context) : base(info, context) {
- objectName = info.GetString("ObjectName");
- }
-
- public override void GetObjectData(SerializationInfo info, StreamingContext context) {
- base.GetObjectData(info, context);
- info.AddValue("ObjectName",ObjectName,typeof(String));
- }
-
}
}
diff --git a/src/mscorlib/src/System/ObsoleteAttribute.cs b/src/mscorlib/src/System/ObsoleteAttribute.cs
index 679e32a974..f183685998 100644
--- a/src/mscorlib/src/System/ObsoleteAttribute.cs
+++ b/src/mscorlib/src/System/ObsoleteAttribute.cs
@@ -10,51 +10,52 @@
**
**
===========================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Remoting;
+
+using System;
+
+namespace System
+{
// This attribute is attached to members that are not to be used any longer.
// Message is some human readable explanation of what to use
// Error indicates if the compiler should treat usage of such a method as an
// error. (this would be used if the actual implementation of the obsolete
// method's implementation had changed).
//
-[Serializable]
-[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum |
- AttributeTargets.Interface | AttributeTargets.Constructor | AttributeTargets.Method| AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Delegate
+ [Serializable]
+ [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum |
+ AttributeTargets.Interface | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Delegate
, Inherited = false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ObsoleteAttribute : Attribute
{
private String _message;
private bool _error;
-
- public ObsoleteAttribute ()
+
+ public ObsoleteAttribute()
{
_message = null;
_error = false;
}
-
- public ObsoleteAttribute (String message)
+
+ public ObsoleteAttribute(String message)
{
_message = message;
_error = false;
}
-
- public ObsoleteAttribute (String message, bool error)
+
+ public ObsoleteAttribute(String message, bool error)
{
_message = message;
_error = error;
}
-
- public String Message {
- get {return _message;}
+
+ public String Message
+ {
+ get { return _message; }
}
-
- public bool IsError{
- get {return _error;}
+
+ public bool IsError
+ {
+ get { return _error; }
}
-
}
}
diff --git a/src/mscorlib/src/System/OperatingSystem.cs b/src/mscorlib/src/System/OperatingSystem.cs
index a11d4bcce8..a388fc6e33 100644
--- a/src/mscorlib/src/System/OperatingSystem.cs
+++ b/src/mscorlib/src/System/OperatingSystem.cs
@@ -13,14 +13,12 @@
namespace System {
using System.Runtime.Serialization;
using System.Globalization;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Diagnostics.Contracts;
- [ComVisible(true)]
[Serializable]
- public sealed class OperatingSystem : ICloneable , ISerializable
+ internal sealed class OperatingSystem : ICloneable , ISerializable
{
private Version _version;
private PlatformID _platform;
@@ -30,9 +28,6 @@ namespace System {
private OperatingSystem()
{
}
-
- public OperatingSystem(PlatformID platform, Version version) : this(platform, version, null) {
- }
internal OperatingSystem(PlatformID platform, Version version, string servicePack) {
if( platform < PlatformID.Win32S || platform > PlatformID.MacOSX) {
@@ -82,20 +77,6 @@ namespace System {
info.AddValue("_servicePack", _servicePack);
}
- public PlatformID Platform {
- get { return _platform; }
- }
-
- public string ServicePack {
- get {
- if( _servicePack == null) {
- return string.Empty;
- }
-
- return _servicePack;
- }
- }
-
public Version Version {
get { return _version; }
}
diff --git a/src/mscorlib/src/System/OperationCanceledException.cs b/src/mscorlib/src/System/OperationCanceledException.cs
index 14781f5653..061201637a 100644
--- a/src/mscorlib/src/System/OperationCanceledException.cs
+++ b/src/mscorlib/src/System/OperationCanceledException.cs
@@ -18,7 +18,6 @@ using System.Threading;
namespace System {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class OperationCanceledException : SystemException
{
[NonSerialized]
diff --git a/src/mscorlib/src/System/OutOfMemoryException.cs b/src/mscorlib/src/System/OutOfMemoryException.cs
index 9bea0b46d7..46d5195405 100644
--- a/src/mscorlib/src/System/OutOfMemoryException.cs
+++ b/src/mscorlib/src/System/OutOfMemoryException.cs
@@ -16,7 +16,6 @@ namespace System {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class OutOfMemoryException : SystemException {
public OutOfMemoryException()
diff --git a/src/mscorlib/src/System/OverflowException.cs b/src/mscorlib/src/System/OverflowException.cs
index ab717fb065..e28c688dd6 100644
--- a/src/mscorlib/src/System/OverflowException.cs
+++ b/src/mscorlib/src/System/OverflowException.cs
@@ -11,32 +11,31 @@
**
=============================================================================*/
-namespace System {
-
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public class OverflowException : ArithmeticException {
- public OverflowException()
- : base(Environment.GetResourceString("Arg_OverflowException")) {
- SetErrorCode(__HResults.COR_E_OVERFLOW);
- }
-
- public OverflowException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_OVERFLOW);
+ public class OverflowException : ArithmeticException
+ {
+ public OverflowException()
+ : base(SR.Arg_OverflowException)
+ {
+ HResult = __HResults.COR_E_OVERFLOW;
}
-
- public OverflowException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_OVERFLOW);
+
+ public OverflowException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_OVERFLOW;
}
- protected OverflowException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public OverflowException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_OVERFLOW;
}
+ protected OverflowException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
-
}
diff --git a/src/mscorlib/src/System/ParamArrayAttribute.cs b/src/mscorlib/src/System/ParamArrayAttribute.cs
index 3a8e2e8302..d3c3d46d56 100644
--- a/src/mscorlib/src/System/ParamArrayAttribute.cs
+++ b/src/mscorlib/src/System/ParamArrayAttribute.cs
@@ -10,13 +10,12 @@
**
**
=============================================================================*/
+
namespace System
{
-//This class contains only static members and does not need to be serializable
- [AttributeUsage (AttributeTargets.Parameter, Inherited=true, AllowMultiple=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ParamArrayAttribute : Attribute
- {
- public ParamArrayAttribute () {}
- }
+ [AttributeUsage(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)]
+ public sealed class ParamArrayAttribute : Attribute
+ {
+ public ParamArrayAttribute() { }
+ }
}
diff --git a/src/mscorlib/src/System/PlatformID.cs b/src/mscorlib/src/System/PlatformID.cs
index 57941996ee..16128079e2 100644
--- a/src/mscorlib/src/System/PlatformID.cs
+++ b/src/mscorlib/src/System/PlatformID.cs
@@ -13,8 +13,7 @@
namespace System {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum PlatformID
+ internal enum PlatformID
{
Win32S = 0,
Win32Windows = 1,
diff --git a/src/mscorlib/src/System/PlatformNotSupportedException.cs b/src/mscorlib/src/System/PlatformNotSupportedException.cs
index 75d6d1d110..d2370b3924 100644
--- a/src/mscorlib/src/System/PlatformNotSupportedException.cs
+++ b/src/mscorlib/src/System/PlatformNotSupportedException.cs
@@ -11,32 +11,31 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+namespace System
+{
[Serializable]
public class PlatformNotSupportedException : NotSupportedException
{
- public PlatformNotSupportedException()
- : base(Environment.GetResourceString("Arg_PlatformNotSupported")) {
- SetErrorCode(__HResults.COR_E_PLATFORMNOTSUPPORTED);
+ public PlatformNotSupportedException()
+ : base(SR.Arg_PlatformNotSupported)
+ {
+ HResult = __HResults.COR_E_PLATFORMNOTSUPPORTED;
}
-
- public PlatformNotSupportedException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_PLATFORMNOTSUPPORTED);
- }
-
- public PlatformNotSupportedException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.COR_E_PLATFORMNOTSUPPORTED);
+
+ public PlatformNotSupportedException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_PLATFORMNOTSUPPORTED;
}
- protected PlatformNotSupportedException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public PlatformNotSupportedException(String message, Exception inner)
+ : base(message, inner)
+ {
+ HResult = __HResults.COR_E_PLATFORMNOTSUPPORTED;
}
+ protected PlatformNotSupportedException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/Progress.cs b/src/mscorlib/src/System/Progress.cs
index 72c43c304d..755e7719fe 100644
--- a/src/mscorlib/src/System/Progress.cs
+++ b/src/mscorlib/src/System/Progress.cs
@@ -2,21 +2,9 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-/*============================================================
-**
-**
-**
-**
-**
-** Purpose: Event-based implementation of IProgress<T>.
-**
-**
-===========================================================*/
-
using System;
using System.Threading;
using System.Diagnostics;
-using System.Diagnostics.Contracts;
namespace System
{
@@ -34,22 +22,20 @@ namespace System
public class Progress<T> : IProgress<T>
{
/// <summary>The synchronization context captured upon construction. This will never be null.</summary>
- private readonly SynchronizationContext m_synchronizationContext;
+ private readonly SynchronizationContext _synchronizationContext;
/// <summary>The handler specified to the constructor. This may be null.</summary>
- private readonly Action<T> m_handler;
+ private readonly Action<T> _handler;
/// <summary>A cached delegate used to post invocation to the synchronization context.</summary>
- private readonly SendOrPostCallback m_invokeHandlers;
+ private readonly SendOrPostCallback _invokeHandlers;
/// <summary>Initializes the <see cref="Progress{T}"/>.</summary>
public Progress()
{
- // Capture the current synchronization context. "current" is determined by CurrentNoFlow,
- // which doesn't consider the sync ctx flown with an ExecutionContext, avoiding
- // sync ctx reference identity issues where the sync ctx for one thread could be Current on another.
+ // Capture the current synchronization context.
// If there is no current context, we use a default instance targeting the ThreadPool.
- m_synchronizationContext = SynchronizationContext.CurrentNoFlow ?? ProgressStatics.DefaultContext;
- Debug.Assert(m_synchronizationContext != null);
- m_invokeHandlers = new SendOrPostCallback(InvokeHandlers);
+ _synchronizationContext = SynchronizationContext.Current ?? ProgressStatics.DefaultContext;
+ Debug.Assert(_synchronizationContext != null);
+ _invokeHandlers = new SendOrPostCallback(InvokeHandlers);
}
/// <summary>Initializes the <see cref="Progress{T}"/> with the specified callback.</summary>
@@ -64,7 +50,7 @@ namespace System
public Progress(Action<T> handler) : this()
{
if (handler == null) throw new ArgumentNullException(nameof(handler));
- m_handler = handler;
+ _handler = handler;
}
/// <summary>Raised for each reported progress value.</summary>
@@ -81,13 +67,13 @@ namespace System
// If there's no handler, don't bother going through the sync context.
// Inside the callback, we'll need to check again, in case
// an event handler is removed between now and then.
- Action<T> handler = m_handler;
+ Action<T> handler = _handler;
EventHandler<T> changedEvent = ProgressChanged;
if (handler != null || changedEvent != null)
{
// Post the processing to the sync context.
// (If T is a value type, it will get boxed here.)
- m_synchronizationContext.Post(m_invokeHandlers, value);
+ _synchronizationContext.Post(_invokeHandlers, value);
}
}
@@ -101,7 +87,7 @@ namespace System
{
T value = (T)state;
- Action<T> handler = m_handler;
+ Action<T> handler = _handler;
EventHandler<T> changedEvent = ProgressChanged;
if (handler != null) handler(value);
diff --git a/src/mscorlib/src/System/Random.cs b/src/mscorlib/src/System/Random.cs
index f5941d6718..db6da0ea8b 100644
--- a/src/mscorlib/src/System/Random.cs
+++ b/src/mscorlib/src/System/Random.cs
@@ -18,7 +18,6 @@ namespace System {
using System.Globalization;
using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class Random {
//
diff --git a/src/mscorlib/src/System/RankException.cs b/src/mscorlib/src/System/RankException.cs
index 8639bba30e..612d0f086c 100644
--- a/src/mscorlib/src/System/RankException.cs
+++ b/src/mscorlib/src/System/RankException.cs
@@ -12,31 +12,31 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
public class RankException : SystemException
{
- public RankException()
- : base(Environment.GetResourceString("Arg_RankException")) {
- SetErrorCode(__HResults.COR_E_RANK);
- }
-
- public RankException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_RANK);
+ public RankException()
+ : base(SR.Arg_RankException)
+ {
+ HResult = __HResults.COR_E_RANK;
}
-
- public RankException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_RANK);
+
+ public RankException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_RANK;
}
- protected RankException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public RankException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_RANK;
}
+ protected RankException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/ReadOnlySpan.cs b/src/mscorlib/src/System/ReadOnlySpan.cs
index b0919d3208..76c63d5d8b 100644
--- a/src/mscorlib/src/System/ReadOnlySpan.cs
+++ b/src/mscorlib/src/System/ReadOnlySpan.cs
@@ -2,17 +2,17 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.CompilerServices;
+using EditorBrowsableState = System.ComponentModel.EditorBrowsableState;
+using EditorBrowsableAttribute = System.ComponentModel.EditorBrowsableAttribute;
#pragma warning disable 0809 //warning CS0809: Obsolete member 'Span<T>.Equals(object)' overrides non-obsolete member 'object.Equals(object)'
namespace System
{
/// <summary>
- /// ReadOnlySpan represents contiguous read-only region of arbitrary memory, with performance
- /// characteristics on par with T[]. Unlike arrays, it can point to either managed
+ /// ReadOnlySpan represents a contiguous region of arbitrary memory. Unlike arrays, it can point to either managed
/// or native memory, or to memory allocated on the stack. It is type- and memory-safe.
/// </summary>
public struct ReadOnlySpan<T>
@@ -23,11 +23,12 @@ namespace System
private readonly int _length;
/// <summary>
- /// Creates a new span over the entirety of the target array.
+ /// Creates a new read-only span over the entirety of the target array.
/// </summary>
/// <param name="array">The target array.</param>
/// <exception cref="System.ArgumentNullException">Thrown when <paramref name="array"/> is a null
/// reference (Nothing in Visual Basic).</exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ReadOnlySpan(T[] array)
{
if (array == null)
@@ -38,16 +39,17 @@ namespace System
}
/// <summary>
- /// Creates a new span over the portion of the target array beginning
+ /// Creates a new read-only span over the portion of the target array beginning
/// at 'start' index and covering the remainder of the array.
/// </summary>
/// <param name="array">The target array.</param>
- /// <param name="start">The index at which to begin the span.</param>
+ /// <param name="start">The index at which to begin the read-only span.</param>
/// <exception cref="System.ArgumentNullException">Thrown when <paramref name="array"/> is a null
/// reference (Nothing in Visual Basic).</exception>
/// <exception cref="System.ArgumentOutOfRangeException">
- /// Thrown when the specified <paramref name="start"/> is not in the range (&lt;0 or &gt;&eq;Length).
+ /// Thrown when the specified <paramref name="start"/> is not in the range (&lt;0 or &gt;=Length).
/// </exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ReadOnlySpan(T[] array, int start)
{
if (array == null)
@@ -60,17 +62,18 @@ namespace System
}
/// <summary>
- /// Creates a new span over the portion of the target array beginning
+ /// Creates a new read-only span over the portion of the target array beginning
/// at 'start' index and ending at 'end' index (exclusive).
/// </summary>
/// <param name="array">The target array.</param>
- /// <param name="start">The index at which to begin the span.</param>
- /// <param name="length">The number of items in the span.</param>
+ /// <param name="start">The index at which to begin the read-only span.</param>
+ /// <param name="length">The number of items in the read-only span.</param>
/// <exception cref="System.ArgumentNullException">Thrown when <paramref name="array"/> is a null
/// reference (Nothing in Visual Basic).</exception>
/// <exception cref="System.ArgumentOutOfRangeException">
- /// Thrown when the specified <paramref name="start"/> or end index is not in the range (&lt;0 or &gt;&eq;Length).
+ /// Thrown when the specified <paramref name="start"/> or end index is not in the range (&lt;0 or &gt;=Length).
/// </exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ReadOnlySpan(T[] array, int start, int length)
{
if (array == null)
@@ -83,12 +86,12 @@ namespace System
}
/// <summary>
- /// Creates a new span over the target unmanaged buffer. Clearly this
+ /// Creates a new read-only span over the target unmanaged buffer. Clearly this
/// is quite dangerous, because we are creating arbitrarily typed T's
/// out of a void*-typed block of memory. And the length is not checked.
/// But if this creation is correct, then all subsequent uses are correct.
/// </summary>
- /// <param name="ptr">An unmanaged pointer to memory.</param>
+ /// <param name="pointer">An unmanaged pointer to memory.</param>
/// <param name="length">The number of <typeparamref name="T"/> elements the memory contains.</param>
/// <exception cref="System.ArgumentException">
/// Thrown when <typeparamref name="T"/> is reference type or contains pointers and hence cannot be stored in unmanaged memory.
@@ -97,6 +100,7 @@ namespace System
/// Thrown when the specified <paramref name="length"/> is negative.
/// </exception>
[CLSCompliant(false)]
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public unsafe ReadOnlySpan(void* pointer, int length)
{
if (JitHelpers.ContainsReferences<T>())
@@ -109,52 +113,6 @@ namespace System
}
/// <summary>
- /// An internal helper for creating spans.
- /// </summary>
- internal ReadOnlySpan(ref T ptr, int length)
- {
- _pointer = new ByReference<T>(ref ptr);
- _length = length;
- }
-
- /// <summary>
- /// Returns a reference to the 0th element of the Span. If the Span is empty, returns a reference to the location where the 0th element
- /// would have been stored. Such a reference can be used for pinning but must never be dereferenced.
- /// </summary>
- public ref T DangerousGetPinnableReference()
- {
- return ref _pointer.Value;
- }
-
- /// <summary>
- /// This method is not supported as spans cannot be boxed. To compare two spans, use operator==.
- /// <exception cref="System.NotSupportedException">
- /// Always thrown by this method.
- /// </exception>
- /// </summary>
- [Obsolete("Equals() on Span will always throw an exception. Use == instead.")]
- public override bool Equals(object obj)
- {
- ThrowHelper.ThrowNotSupportedException_CannotCallEqualsOnSpan();
- // Prevent compiler error CS0161: 'Span<T>.Equals(object)': not all code paths return a value
- return default(bool);
- }
-
- /// <summary>
- /// This method is not supported as spans cannot be boxed.
- /// <exception cref="System.NotSupportedException">
- /// Always thrown by this method.
- /// </exception>
- /// </summary>
- [Obsolete("GetHashCode() on Span will always throw an exception.")]
- public override int GetHashCode()
- {
- ThrowHelper.ThrowNotSupportedException_CannotCallGetHashCodeOnSpan();
- // Prevent compiler error CS0161: 'Span<T>.GetHashCode()': not all code paths return a value
- return default(int);
- }
-
- /// <summary>
/// Create a new read-only span over a portion of a regular managed object. This can be useful
/// if part of a managed object represents a "fixed array." This is dangerous because
/// "length" is not checked, nor is the fact that "rawPointer" actually lies within the object.
@@ -168,6 +126,7 @@ namespace System
/// <exception cref="System.ArgumentOutOfRangeException">
/// Thrown when the specified <paramref name="length"/> is negative.
/// </exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ReadOnlySpan<T> DangerousCreate(object obj, ref T objectData, int length)
{
if (obj == null)
@@ -178,120 +137,57 @@ namespace System
return new ReadOnlySpan<T>(ref objectData, length);
}
- /// <summary>
- /// Defines an implicit conversion of a <see cref="Span{T}"/> to a <see cref="ReadOnlySpan{T}"/>
- /// </summary>
- public static implicit operator ReadOnlySpan<T>(Span<T> slice)
- {
- return new ReadOnlySpan<T>(ref slice.DangerousGetPinnableReference(), slice.Length);
- }
-
- /// <summary>
- /// Defines an implicit conversion of an array to a <see cref="ReadOnlySpan{T}"/>
- /// </summary>
- public static implicit operator ReadOnlySpan<T>(T[] array)
+ // Constructor for internal use only.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal ReadOnlySpan(ref T ptr, int length)
{
- return new ReadOnlySpan<T>(array);
- }
+ Debug.Assert(length >= 0);
- /// <summary>
- /// Defines an implicit conversion of a <see cref="ArraySegment{T}"/> to a <see cref="ReadOnlySpan{T}"/>
- /// </summary>
- public static implicit operator ReadOnlySpan<T>(ArraySegment<T> arraySegment)
- {
- return new ReadOnlySpan<T>(arraySegment.Array, arraySegment.Offset, arraySegment.Count);
+ _pointer = new ByReference<T>(ref ptr);
+ _length = length;
}
/// <summary>
- /// Gets the number of elements contained in the <see cref="ReadOnlySpan{T}"/>
+ /// Returns a reference to the 0th element of the Span. If the Span is empty, returns a reference to the location where the 0th element
+ /// would have been stored. Such a reference can be used for pinning but must never be dereferenced.
/// </summary>
- public int Length
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ref T DangerousGetPinnableReference()
{
- get { return _length; }
+ return ref _pointer.Value;
}
/// <summary>
- /// Returns an empty <see cref="ReadOnlySpan{T}"/>
+ /// The number of items in the read-only span.
/// </summary>
- public static ReadOnlySpan<T> Empty
- {
- get { return default(ReadOnlySpan<T>); }
- }
+ public int Length => _length;
/// <summary>
- /// Returns whether the <see cref="ReadOnlySpan{T}"/> is empty.
+ /// Returns true if Length is 0.
/// </summary>
- public bool IsEmpty
- {
- get { return _length == 0; }
- }
+ public bool IsEmpty => _length == 0;
/// <summary>
- /// Fetches the element at the specified index.
+ /// Returns the specified element of the read-only span.
/// </summary>
+ /// <param name="index"></param>
+ /// <returns></returns>
/// <exception cref="System.IndexOutOfRangeException">
- /// Thrown when the specified <paramref name="index"/> is not in range (&lt;0 or &gt;&eq;Length).
+ /// Thrown when index less than 0 or index greater than or equal to Length
/// </exception>
public T this[int index]
{
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
if ((uint)index >= (uint)_length)
ThrowHelper.ThrowIndexOutOfRangeException();
- return Unsafe.Add(ref DangerousGetPinnableReference(), index);
+ return Unsafe.Add(ref _pointer.Value, index);
}
}
/// <summary>
- /// Copies the contents of this span into a new array. This heap
- /// allocates, so should generally be avoided, however is sometimes
- /// necessary to bridge the gap with APIs written in terms of arrays.
- /// </summary>
- public T[] ToArray()
- {
- if (_length == 0)
- return Array.Empty<T>();
-
- var destination = new T[_length];
- SpanHelper.CopyTo<T>(ref JitHelpers.GetArrayData(destination), ref DangerousGetPinnableReference(), _length);
- return destination;
- }
-
- /// <summary>
- /// Forms a slice out of the given span, beginning at 'start'.
- /// </summary>
- /// <param name="start">The index at which to begin this slice.</param>
- /// <exception cref="System.ArgumentOutOfRangeException">
- /// Thrown when the specified <paramref name="start"/> index is not in range (&lt;0 or &gt;length).
- /// </exception>
- [MethodImpl(MethodImplOptions.NoOptimization)] // TODO-SPAN: Workaround for https://github.com/dotnet/coreclr/issues/7894
- public ReadOnlySpan<T> Slice(int start)
- {
- if ((uint)start > (uint)_length)
- ThrowHelper.ThrowArgumentOutOfRangeException();
-
- return new ReadOnlySpan<T>(ref Unsafe.Add(ref DangerousGetPinnableReference(), start), _length - start);
- }
-
- /// <summary>
- /// Forms a slice out of the given span, beginning at 'start', of given length
- /// </summary>
- /// <param name="start">The index at which to begin this slice.</param>
- /// <param name="end">The index at which to end this slice (exclusive).</param>
- /// <exception cref="System.ArgumentOutOfRangeException">
- /// Thrown when the specified <paramref name="start"/> or end index is not in range (&lt;0 or &gt;&eq;Length).
- /// </exception>
- [MethodImpl(MethodImplOptions.NoOptimization)] // TODO-SPAN: Workaround for https://github.com/dotnet/coreclr/issues/7894
- public ReadOnlySpan<T> Slice(int start, int length)
- {
- if ((uint)start > (uint)_length || (uint)length > (uint)(_length - start))
- ThrowHelper.ThrowArgumentOutOfRangeException();
-
- return new ReadOnlySpan<T>(ref Unsafe.Add(ref DangerousGetPinnableReference(), start), length);
- }
-
- /// <summary>
/// Copies the contents of this read-only span into destination span. If the source
/// and destinations overlap, this method behaves as if the original values in
/// a temporary location before the destination is overwritten.
@@ -307,17 +203,19 @@ namespace System
ThrowHelper.ThrowArgumentException_DestinationTooShort();
}
- /// <summary>
- /// Copies the contents of this span into destination span. The destination
- /// must be at least as big as the source, and may be bigger.
+ /// Copies the contents of this read-only span into destination span. If the source
+ /// and destinations overlap, this method behaves as if the original values in
+ /// a temporary location before the destination is overwritten.
/// </summary>
+ /// <returns>If the destination span is shorter than the source span, this method
+ /// return false and no data is written to the destination.</returns>
/// <param name="destination">The span to copy items into.</param>
public bool TryCopyTo(Span<T> destination)
{
if ((uint)_length > (uint)destination.Length)
return false;
- SpanHelper.CopyTo<T>(ref destination.DangerousGetPinnableReference(), ref DangerousGetPinnableReference(), _length);
+ SpanHelper.CopyTo<T>(ref destination.DangerousGetPinnableReference(), ref _pointer.Value, _length);
return true;
}
@@ -327,7 +225,7 @@ namespace System
/// </summary>
public static bool operator ==(ReadOnlySpan<T> left, ReadOnlySpan<T> right)
{
- return left._length == right._length && Unsafe.AreSame<T>(ref left.DangerousGetPinnableReference(), ref right.DangerousGetPinnableReference());
+ return left._length == right._length && Unsafe.AreSame<T>(ref left._pointer.Value, ref right._pointer.Value);
}
/// <summary>
@@ -335,63 +233,98 @@ namespace System
/// this does *not* check to see if the *contents* are equal.
/// </summary>
public static bool operator !=(ReadOnlySpan<T> left, ReadOnlySpan<T> right) => !(left == right);
- }
- public static class ReadOnlySpanExtensions
- {
/// <summary>
- /// Creates a new readonly span over the portion of the target string.
+ /// This method is not supported as spans cannot be boxed. To compare two spans, use operator==.
+ /// <exception cref="System.NotSupportedException">
+ /// Always thrown by this method.
+ /// </exception>
/// </summary>
- /// <param name="text">The target string.</param>
- /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="text"/> is a null
- /// reference (Nothing in Visual Basic).</exception>
- public static ReadOnlySpan<char> Slice(this string text)
+ [Obsolete("Equals() on Span will always throw an exception. Use == instead.")]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override bool Equals(object obj)
{
- if (text == null)
- ThrowHelper.ThrowArgumentNullException(ExceptionArgument.text);
+ ThrowHelper.ThrowNotSupportedException_CannotCallEqualsOnSpan();
+ // Prevent compiler error CS0161: 'Span<T>.Equals(object)': not all code paths return a value
+ return default(bool);
+ }
- return new ReadOnlySpan<char>(ref text.GetFirstCharRef(), text.Length);
+ /// <summary>
+ /// This method is not supported as spans cannot be boxed.
+ /// <exception cref="System.NotSupportedException">
+ /// Always thrown by this method.
+ /// </exception>
+ /// </summary>
+ [Obsolete("GetHashCode() on Span will always throw an exception.")]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override int GetHashCode()
+ {
+ ThrowHelper.ThrowNotSupportedException_CannotCallGetHashCodeOnSpan();
+ // Prevent compiler error CS0161: 'Span<T>.GetHashCode()': not all code paths return a value
+ return default(int);
}
/// <summary>
- /// Creates a new readonly span over the portion of the target string, beginning at 'start'.
+ /// Defines an implicit conversion of an array to a <see cref="ReadOnlySpan{T}"/>
+ /// </summary>
+ public static implicit operator ReadOnlySpan<T>(T[] array) => new ReadOnlySpan<T>(array);
+
+ /// <summary>
+ /// Defines an implicit conversion of a <see cref="ArraySegment{T}"/> to a <see cref="ReadOnlySpan{T}"/>
+ /// </summary>
+ public static implicit operator ReadOnlySpan<T>(ArraySegment<T> arraySegment) => new ReadOnlySpan<T>(arraySegment.Array, arraySegment.Offset, arraySegment.Count);
+
+ /// <summary>
+ /// Forms a slice out of the given read-only span, beginning at 'start'.
/// </summary>
- /// <param name="text">The target string.</param>
/// <param name="start">The index at which to begin this slice.</param>
- /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="text"/> is a null
- /// reference (Nothing in Visual Basic).</exception>
/// <exception cref="System.ArgumentOutOfRangeException">
- /// Thrown when the specified <paramref name="start"/> index is not in range (&lt;0 or &gt;Length).
+ /// Thrown when the specified <paramref name="start"/> index is not in range (&lt;0 or &gt;=Length).
/// </exception>
- public static ReadOnlySpan<char> Slice(this string text, int start)
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ReadOnlySpan<T> Slice(int start)
{
- if (text == null)
- ThrowHelper.ThrowArgumentNullException(ExceptionArgument.text);
- if ((uint)start > (uint)text.Length)
+ if ((uint)start > (uint)_length)
ThrowHelper.ThrowArgumentOutOfRangeException();
- return new ReadOnlySpan<char>(ref Unsafe.Add(ref text.GetFirstCharRef(), start), text.Length - start);
+ return new ReadOnlySpan<T>(ref Unsafe.Add(ref _pointer.Value, start), _length - start);
}
/// <summary>
- /// Creates a new readonly span over the portion of the target string, beginning at <paramref name="start"/>, of given <paramref name="length"/>.
+ /// Forms a slice out of the given read-only span, beginning at 'start', of given length
/// </summary>
- /// <param name="text">The target string.</param>
/// <param name="start">The index at which to begin this slice.</param>
- /// <param name="length">The number of items in the span.</param>
- /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="text"/> is a null
- /// reference (Nothing in Visual Basic).</exception>
+ /// <param name="length">The desired length for the slice (exclusive).</param>
/// <exception cref="System.ArgumentOutOfRangeException">
- /// Thrown when the specified <paramref name="start"/> or end index is not in range (&lt;0 or &gt;&eq;Length).
+ /// Thrown when the specified <paramref name="start"/> or end index is not in range (&lt;0 or &gt;=Length).
/// </exception>
- public static ReadOnlySpan<char> Slice(this string text, int start, int length)
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ReadOnlySpan<T> Slice(int start, int length)
{
- if (text == null)
- ThrowHelper.ThrowArgumentNullException(ExceptionArgument.text);
- if ((uint)start > (uint)text.Length || (uint)length > (uint)(text.Length - start))
+ if ((uint)start > (uint)_length || (uint)length > (uint)(_length - start))
ThrowHelper.ThrowArgumentOutOfRangeException();
- return new ReadOnlySpan<char>(ref Unsafe.Add(ref text.GetFirstCharRef(), start), length);
+ return new ReadOnlySpan<T>(ref Unsafe.Add(ref _pointer.Value, start), length);
+ }
+
+ /// <summary>
+ /// Copies the contents of this read-only span into a new array. This heap
+ /// allocates, so should generally be avoided, however it is sometimes
+ /// necessary to bridge the gap with APIs written in terms of arrays.
+ /// </summary>
+ public T[] ToArray()
+ {
+ if (_length == 0)
+ return Array.Empty<T>();
+
+ var destination = new T[_length];
+ SpanHelper.CopyTo<T>(ref JitHelpers.GetArrayData(destination), ref _pointer.Value, _length);
+ return destination;
}
+
+ /// <summary>
+ /// Returns a 0-length read-only span whose base is the null pointer.
+ /// </summary>
+ public static ReadOnlySpan<T> Empty => default(ReadOnlySpan<T>);
}
}
diff --git a/src/mscorlib/src/System/Reflection/AmbiguousMatchException.cs b/src/mscorlib/src/System/Reflection/AmbiguousMatchException.cs
index 6df371bd11..795a8714d1 100644
--- a/src/mscorlib/src/System/Reflection/AmbiguousMatchException.cs
+++ b/src/mscorlib/src/System/Reflection/AmbiguousMatchException.cs
@@ -18,7 +18,6 @@ namespace System.Reflection {
using SystemException = System.SystemException;
using System.Runtime.Serialization;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class AmbiguousMatchException : SystemException
{
diff --git a/src/mscorlib/src/System/Reflection/Assembly.cs b/src/mscorlib/src/System/Reflection/Assembly.cs
index 677e4aa964..eaedc6ded4 100644
--- a/src/mscorlib/src/System/Reflection/Assembly.cs
+++ b/src/mscorlib/src/System/Reflection/Assembly.cs
@@ -22,15 +22,12 @@ namespace System.Reflection
using CultureInfo = System.Globalization.CultureInfo;
using System.Security;
using System.Security.Policy;
- using System.Security.Permissions;
using System.IO;
using StringBuilder = System.Text.StringBuilder;
using System.Configuration.Assemblies;
using StackCrawlMark = System.Threading.StackCrawlMark;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
- using SecurityZone = System.Security.SecurityZone;
- using IEvidenceFactory = System.Security.IEvidenceFactory;
using System.Runtime.Serialization;
using Microsoft.Win32;
using System.Threading;
@@ -40,15 +37,11 @@ namespace System.Reflection
using System.Runtime.Loader;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate Module ModuleResolveEventHandler(Object sender, ResolveEventArgs e);
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_Assembly))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class Assembly : _Assembly, IEvidenceFactory, ICustomAttributeProvider, ISerializable
+ public abstract class Assembly : ICustomAttributeProvider, ISerializable
{
protected Assembly() {}
@@ -112,24 +105,17 @@ namespace System.Reflection
[MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public static Assembly ReflectionOnlyLoadFrom(String assemblyFile)
{
- Contract.Ensures(Contract.Result<Assembly>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
-
- return RuntimeAssembly.InternalLoadFrom(
- assemblyFile,
- null, //securityEvidence
- null, //hashValue
- AssemblyHashAlgorithm.None,
- true, //forIntrospection
- false, //suppressSecurityChecks
- ref stackMark);
+ if (assemblyFile == null)
+ throw new ArgumentNullException(nameof(assemblyFile));
+ if (assemblyFile.Length == 0)
+ throw new ArgumentException(Environment.GetResourceString("Format_StringZeroLength"));
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReflectionOnlyLoad"));
}
// Evidence is protected in Assembly.Load()
[Obsolete("This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of LoadFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
[MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly LoadFrom(String assemblyFile,
+ internal static Assembly LoadFrom(String assemblyFile,
Evidence securityEvidence)
{
Contract.Ensures(Contract.Result<Assembly>() != null);
@@ -142,29 +128,6 @@ namespace System.Reflection
null, // hashValue
AssemblyHashAlgorithm.None,
false,// forIntrospection);
- false,// suppressSecurityChecks
- ref stackMark);
- }
-
- // Evidence is protected in Assembly.Load()
- [Obsolete("This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of LoadFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly LoadFrom(String assemblyFile,
- Evidence securityEvidence,
- byte[] hashValue,
- AssemblyHashAlgorithm hashAlgorithm)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
-
- return RuntimeAssembly.InternalLoadFrom(
- assemblyFile,
- securityEvidence,
- hashValue,
- hashAlgorithm,
- false,
- false,
ref stackMark);
}
@@ -218,7 +181,7 @@ namespace System.Reflection
assembly = RuntimeAssembly.InternalLoadAssemblyName(
assemblyName, null, null, ref stackMark,
- true /*thrownOnFileNotFound*/, false /*forIntrospection*/, false /*suppressSecurityChecks*/);
+ true /*thrownOnFileNotFound*/, false /*forIntrospection*/);
}
return assembly.GetType(typeName, true /*throwOnError*/, false /*ignoreCase*/);
}
@@ -229,21 +192,11 @@ namespace System.Reflection
[MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public static Assembly ReflectionOnlyLoad(String assemblyString)
{
- Contract.Ensures(Contract.Result<Assembly>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoad(assemblyString, null, ref stackMark, true /*forIntrospection*/);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public static Assembly Load(String assemblyString, Evidence assemblySecurity)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoad(assemblyString, assemblySecurity, ref stackMark, false /*forIntrospection*/);
+ if (assemblyString == null)
+ throw new ArgumentNullException(nameof(assemblyString));
+ if (assemblyString.Length == 0)
+ throw new ArgumentException(Environment.GetResourceString("Format_StringZeroLength"));
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReflectionOnlyLoad"));
}
// Locate an assembly by its name. The name can be strong or
@@ -254,15 +207,13 @@ namespace System.Reflection
Contract.Ensures(Contract.Result<Assembly>() != null);
Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-#if FEATURE_WINDOWSPHONE
if (assemblyRef != null && assemblyRef.CodeBase != null)
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_AssemblyLoadCodeBase"));
}
-#endif
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, null, null, ref stackMark, true /*thrownOnFileNotFound*/, false /*forIntrospection*/, false /*suppressSecurityChecks*/);
+ return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, null, null, ref stackMark, true /*thrownOnFileNotFound*/, false /*forIntrospection*/);
}
// Locate an assembly by its name. The name can be strong or
@@ -273,26 +224,13 @@ namespace System.Reflection
Contract.Ensures(Contract.Result<Assembly>() != null);
Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-#if FEATURE_WINDOWSPHONE
if (assemblyRef != null && assemblyRef.CodeBase != null)
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_AssemblyLoadCodeBase"));
}
-#endif
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, null, null, ref stackMark, true /*thrownOnFileNotFound*/, false /*forIntrospection*/, false /*suppressSecurityChecks*/, ptrLoadContextBinder);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public static Assembly Load(AssemblyName assemblyRef, Evidence assemblySecurity)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, assemblySecurity, null, ref stackMark, true /*thrownOnFileNotFound*/, false /*forIntrospection*/, false /*suppressSecurityChecks*/);
+ return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, null, null, ref stackMark, true /*thrownOnFileNotFound*/, false /*forIntrospection*/, ptrLoadContextBinder);
}
[Obsolete("This method has been deprecated. Please use Assembly.Load() instead. http://go.microsoft.com/fwlink/?linkid=14202")]
@@ -323,18 +261,9 @@ namespace System.Reflection
[MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public static Assembly ReflectionOnlyLoad(byte[] rawAssembly)
{
- Contract.Ensures(Contract.Result<Assembly>() != null);
-
- AppDomain.CheckReflectionOnlyLoadSupported();
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.nLoadImage(
- rawAssembly,
- null, // symbol store
- null, // evidence
- ref stackMark,
- true, // fIntrospection
- SecurityContextSource.CurrentAssembly);
+ if (rawAssembly == null)
+ throw new ArgumentNullException(nameof(rawAssembly));
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReflectionOnlyLoad"));
}
// Loads the assembly with a COFF based IMAGE containing
@@ -358,33 +287,6 @@ namespace System.Reflection
return alc.LoadFromStream(assemblyStream, symbolStream);
}
- // Load an assembly from a byte array, controlling where the grant set of this assembly is
- // propigated from.
- [MethodImpl(MethodImplOptions.NoInlining)] // Due to the stack crawl mark
- public static Assembly Load(byte[] rawAssembly,
- byte[] rawSymbolStore,
- SecurityContextSource securityContextSource)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- AppDomain.CheckLoadByteArraySupported();
-
- if (securityContextSource < SecurityContextSource.CurrentAppDomain ||
- securityContextSource > SecurityContextSource.CurrentAssembly)
- {
- throw new ArgumentOutOfRangeException(nameof(securityContextSource));
- }
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.nLoadImage(rawAssembly,
- rawSymbolStore,
- null, // evidence
- ref stackMark,
- false, // fIntrospection
- securityContextSource);
- }
-
private static Dictionary<string, Assembly> s_loadfile = new Dictionary<string, Assembly>();
public static Assembly LoadFile(String path)
@@ -416,25 +318,6 @@ namespace System.Reflection
return result;
}
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly Load(Stream assemblyStream, Stream pdbStream)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoadFromStream(assemblyStream, pdbStream, ref stackMark);
- }
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly Load(Stream assemblyStream)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoadFromStream(assemblyStream, null, ref stackMark);
- }
-
/*
* Get the assembly that the current code is running from.
*/
@@ -573,11 +456,10 @@ namespace System.Reflection
{
Module[] m = GetModules(false);
- int iNumModules = m.Length;
int iFinalLength = 0;
- Type[][] ModuleTypes = new Type[iNumModules][];
+ Type[][] ModuleTypes = new Type[m.Length][];
- for (int i = 0; i < iNumModules; i++)
+ for (int i = 0; i < ModuleTypes.Length; i++)
{
ModuleTypes[i] = m[i].GetTypes();
iFinalLength += ModuleTypes[i].Length;
@@ -585,7 +467,7 @@ namespace System.Reflection
int iCurrent = 0;
Type[] ret = new Type[iFinalLength];
- for (int i = 0; i < iNumModules; i++)
+ for (int i = 0; i < ModuleTypes.Length; i++)
{
int iLength = ModuleTypes[i].Length;
Array.Copy(ModuleTypes[i], 0, ret, iCurrent, iLength);
@@ -639,7 +521,6 @@ namespace System.Reflection
throw new NotImplementedException();
}
- [ComVisible(false)]
public virtual Module ManifestModule
{
get
@@ -684,9 +565,6 @@ namespace System.Reflection
throw new NotImplementedException();
}
- // To not break compatibility with the V1 _Assembly interface we need to make this
- // new member ComVisible(false).
- [ComVisible(false)]
public virtual bool ReflectionOnly
{
get
@@ -836,9 +714,6 @@ namespace System.Reflection
}
}
- // To not break compatibility with the V1 _Assembly interface we need to make this
- // new member ComVisible(false).
- [ComVisible(false)]
public virtual String ImageRuntimeVersion
{
get
@@ -858,7 +733,6 @@ namespace System.Reflection
}
}
- [ComVisible(false)]
public virtual Int64 HostContext
{
get
@@ -885,15 +759,6 @@ namespace System.Reflection
}
- // Keep this in sync with LOADCTX_TYPE defined in fusionpriv.idl
- internal enum LoadContext
- {
- DEFAULT,
- LOADFROM,
- UNKNOWN,
- HOSTED,
- }
-
[Serializable]
internal class RuntimeAssembly : Assembly
{
@@ -915,7 +780,6 @@ namespace System.Reflection
internal RuntimeAssembly() { throw new NotSupportedException(); }
#region private data members
- [method: System.Security.SecurityCritical]
private event ModuleResolveEventHandler _ModuleResolve;
private string m_fullname;
private object m_syncRoot; // Used to keep collectible types alive and as the syncroot for reflection.emit
@@ -997,7 +861,6 @@ namespace System.Reflection
{
get {
String codeBase = GetCodeBase(false);
- VerifyCodeBaseDiscovery(codeBase);
return codeBase;
}
}
@@ -1015,7 +878,6 @@ namespace System.Reflection
AssemblyName an = new AssemblyName();
String codeBase = GetCodeBase(copiedName);
- VerifyCodeBaseDiscovery(codeBase);
an.Init(GetSimpleName(),
GetPublicKey(),
@@ -1104,10 +966,6 @@ namespace System.Reflection
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- internal extern static void GetForwardedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
private extern static void GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes);
public override Type[] GetExportedTypes()
@@ -1217,7 +1075,6 @@ namespace System.Reflection
byte[] hashValue,
AssemblyHashAlgorithm hashAlgorithm,
bool forIntrospection,
- bool suppressSecurityChecks,
ref StackCrawlMark stackMark)
{
if (assemblyFile == null)
@@ -1229,7 +1086,7 @@ namespace System.Reflection
an.CodeBase = assemblyFile;
an.SetHashControl(hashValue, hashAlgorithm);
// The stack mark is used for MDA filtering
- return InternalLoadAssemblyName(an, securityEvidence, null, ref stackMark, true /*thrownOnFileNotFound*/, forIntrospection, suppressSecurityChecks);
+ return InternalLoadAssemblyName(an, securityEvidence, null, ref stackMark, true /*thrownOnFileNotFound*/, forIntrospection);
}
// Wrapper function to wrap the typical use of InternalLoad.
@@ -1258,7 +1115,7 @@ namespace System.Reflection
return InternalLoadAssemblyName(an, assemblySecurity, null, ref stackMark,
pPrivHostBinder,
- true /*thrownOnFileNotFound*/, forIntrospection, false /* suppressSecurityChecks */);
+ true /*thrownOnFileNotFound*/, forIntrospection);
}
// Creates AssemblyName. Fills assembly if AssemblyResolve event has been raised.
@@ -1294,10 +1151,9 @@ namespace System.Reflection
ref StackCrawlMark stackMark,
bool throwOnFileNotFound,
bool forIntrospection,
- bool suppressSecurityChecks,
IntPtr ptrLoadContextBinder = default(IntPtr))
{
- return InternalLoadAssemblyName(assemblyRef, assemblySecurity, reqAssembly, ref stackMark, IntPtr.Zero, true /*throwOnError*/, forIntrospection, suppressSecurityChecks, ptrLoadContextBinder);
+ return InternalLoadAssemblyName(assemblyRef, assemblySecurity, reqAssembly, ref stackMark, IntPtr.Zero, true /*throwOnError*/, forIntrospection, ptrLoadContextBinder);
}
internal static RuntimeAssembly InternalLoadAssemblyName(
@@ -1308,7 +1164,6 @@ namespace System.Reflection
IntPtr pPrivHostBinder,
bool throwOnFileNotFound,
bool forIntrospection,
- bool suppressSecurityChecks,
IntPtr ptrLoadContextBinder = default(IntPtr))
{
@@ -1322,42 +1177,17 @@ namespace System.Reflection
}
assemblyRef = (AssemblyName)assemblyRef.Clone();
-#if FEATURE_VERSIONING
if (!forIntrospection &&
(assemblyRef.ProcessorArchitecture != ProcessorArchitecture.None)) {
// PA does not have a semantics for by-name binds for execution
assemblyRef.ProcessorArchitecture = ProcessorArchitecture.None;
}
-#endif
-
- if (assemblySecurity != null)
- {
- if (!suppressSecurityChecks)
- {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.ControlEvidence).Demand();
-#pragma warning restore 618
- }
- }
String codeBase = VerifyCodeBase(assemblyRef.CodeBase);
- if (codeBase != null && !suppressSecurityChecks)
- {
- if (String.Compare( codeBase, 0, s_localFilePrefix, 0, 5, StringComparison.OrdinalIgnoreCase) != 0)
- {
- // Of all the binders, Fusion is the only one that understands Web locations
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidFileName"), "assemblyRef.CodeBase");
- }
- else
- {
- System.Security.Util.URLString urlString = new System.Security.Util.URLString( codeBase, true );
- new FileIOPermission( FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read , urlString.GetFileName() ).Demand();
- }
- }
return nLoad(assemblyRef, codeBase, assemblySecurity, reqAssembly, ref stackMark,
pPrivHostBinder,
- throwOnFileNotFound, forIntrospection, suppressSecurityChecks, ptrLoadContextBinder);
+ throwOnFileNotFound, forIntrospection, ptrLoadContextBinder);
}
// These are the framework assemblies that does reflection invocation
@@ -1383,15 +1213,6 @@ namespace System.Reflection
ASSEMBLY_FLAGS flags = Flags;
return (flags & ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_SAFE_REFLECTION) != 0;
}
-
- private bool IsDesignerBindingContext()
- {
- return RuntimeAssembly.nIsDesignerBindingContext(this);
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static bool nIsDesignerBindingContext(RuntimeAssembly assembly);
#endif
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -1414,19 +1235,16 @@ namespace System.Reflection
IntPtr pPrivHostBinder,
bool throwOnFileNotFound,
bool forIntrospection,
- bool suppressSecurityChecks, IntPtr ptrLoadContextBinder = default(IntPtr))
+ IntPtr ptrLoadContextBinder = default(IntPtr))
{
return _nLoad(fileName, codeBase, assemblySecurity, locationHint, ref stackMark,
pPrivHostBinder,
- throwOnFileNotFound, forIntrospection, suppressSecurityChecks, ptrLoadContextBinder);
+ throwOnFileNotFound, forIntrospection, true /* suppressSecurityChecks */, ptrLoadContextBinder);
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern bool IsReflectionOnly(RuntimeAssembly assembly);
- // To not break compatibility with the V1 _Assembly interface we need to make this
- // new member ComVisible(false).
- [ComVisible(false)]
public override bool ReflectionOnly
{
get
@@ -1435,57 +1253,6 @@ namespace System.Reflection
}
}
- // Loads the assembly with a COFF based IMAGE containing
- // an emitted assembly. The assembly is loaded into the domain
- // of the caller. Currently is implemented only for UnmanagedMemoryStream
- // (no derived classes since we are not calling Read())
- internal static RuntimeAssembly InternalLoadFromStream(Stream assemblyStream, Stream pdbStream, ref StackCrawlMark stackMark)
- {
- if (assemblyStream == null)
- throw new ArgumentNullException(nameof(assemblyStream));
-
- if (assemblyStream.GetType()!=typeof(UnmanagedMemoryStream))
- throw new NotSupportedException();
-
- if (pdbStream!= null && pdbStream.GetType()!=typeof(UnmanagedMemoryStream))
- throw new NotSupportedException();
-
- AppDomain.CheckLoadFromSupported();
-
- UnmanagedMemoryStream umAssemblyStream = (UnmanagedMemoryStream)assemblyStream;
- UnmanagedMemoryStream umPdbStream = (UnmanagedMemoryStream)pdbStream;
-
- unsafe
- {
- byte* umAssemblyStreamBuffer=umAssemblyStream.PositionPointer;
- byte* umPdbStreamBuffer=(umPdbStream!=null)?umPdbStream.PositionPointer:null;
- long assemblyDataLength = umAssemblyStream.Length-umAssemblyStream.Position;
- long pdbDataLength = (umPdbStream!=null)?(umPdbStream.Length-umPdbStream.Position):0;
-
- // use Seek() to benefit from boundary checking, the actual read is done using *StreamBuffer
- umAssemblyStream.Seek(assemblyDataLength,SeekOrigin.Current);
-
- if(umPdbStream != null)
- {
- umPdbStream.Seek(pdbDataLength,SeekOrigin.Current);
- }
-
- BCLDebug.Assert(assemblyDataLength > 0L, "assemblyDataLength > 0L");
-
- RuntimeAssembly assembly = null;
-
- nLoadFromUnmanagedArray(false,
- umAssemblyStreamBuffer,
- (ulong)assemblyDataLength,
- umPdbStreamBuffer,
- (ulong)pdbDataLength,
- JitHelpers.GetStackCrawlMarkHandle(ref stackMark),
- JitHelpers.GetObjectHandleOnStack(ref assembly));
-
- return assembly;
- }
- }
-
// Returns the module in this assembly with name 'name'
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
@@ -1515,13 +1282,14 @@ namespace System.Reflection
public override FileStream[] GetFiles(bool getResourceModules)
{
Module[] m = GetModules(getResourceModules);
- int iLength = m.Length;
- FileStream[] fs = new FileStream[iLength];
+ FileStream[] fs = new FileStream[m.Length];
- for(int i = 0; i < iLength; i++)
+ for (int i = 0; i < fs.Length; i++)
+ {
fs[i] = new FileStream(((RuntimeModule)m[i]).GetFullyQualifiedName(),
FileMode.Open,
FileAccess.Read, FileShare.Read, FileStream.DefaultBufferSize, false);
+ }
return fs;
}
@@ -1593,9 +1361,6 @@ namespace System.Reflection
GetLocation(GetNativeHandle(), JitHelpers.GetStringHandleOnStack(ref location));
- if (location != null)
- new FileIOPermission( FileIOPermissionAccess.PathDiscovery, location ).Demand();
-
return location;
}
}
@@ -1604,9 +1369,6 @@ namespace System.Reflection
[SuppressUnmanagedCodeSecurity]
private extern static void GetImageRuntimeVersion(RuntimeAssembly assembly, StringHandleOnStack retString);
- // To not break compatibility with the V1 _Assembly interface we need to make this
- // new member ComVisible(false).
- [ComVisible(false)]
public override String ImageRuntimeVersion
{
get{
@@ -1616,10 +1378,6 @@ namespace System.Reflection
}
}
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern static bool IsGlobalAssemblyCache(RuntimeAssembly assembly);
-
public override bool GlobalAssemblyCache
{
get
@@ -1628,10 +1386,6 @@ namespace System.Reflection
}
}
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static Int64 GetHostContext(RuntimeAssembly assembly);
-
public override Int64 HostContext
{
get
@@ -1713,7 +1467,7 @@ namespace System.Reflection
if (length > Int64.MaxValue)
throw new NotImplementedException(Environment.GetResourceString("NotImplemented_ResourcesLongerThan2^63"));
- return new UnmanagedMemoryStream(pbInMemoryResource, (long)length, (long)length, FileAccess.Read, true);
+ return new UnmanagedMemoryStream(pbInMemoryResource, (long)length, (long)length, FileAccess.Read);
}
//Console.WriteLine("GetManifestResourceStream: Blob "+name+" not found...");
@@ -1761,15 +1515,6 @@ namespace System.Reflection
}
}
- private void VerifyCodeBaseDiscovery(String codeBase)
- {
- if ((codeBase != null) &&
- (String.Compare( codeBase, 0, s_localFilePrefix, 0, 5, StringComparison.OrdinalIgnoreCase) == 0)) {
- System.Security.Util.URLString urlString = new System.Security.Util.URLString( codeBase, true );
- new FileIOPermission( FileIOPermissionAccess.PathDiscovery, urlString.GetFileName() ).Demand();
- }
- }
-
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
private static extern void GetSimpleName(RuntimeAssembly assembly, StringHandleOnStack retSimpleName);
@@ -1801,19 +1546,6 @@ namespace System.Reflection
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- private static extern void GetRawBytes(RuntimeAssembly assembly, ObjectHandleOnStack retRawBytes);
-
- // Get the raw bytes of the assembly
- internal byte[] GetRawBytes()
- {
- byte[] rawBytes = null;
-
- GetRawBytes(GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref rawBytes));
- return rawBytes;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
private static extern void GetPublicKey(RuntimeAssembly assembly, ObjectHandleOnStack retPublicKey);
internal byte[] GetPublicKey()
@@ -1825,50 +1557,6 @@ namespace System.Reflection
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- private extern static void GetGrantSet(RuntimeAssembly assembly, ObjectHandleOnStack granted, ObjectHandleOnStack denied);
-
- internal void GetGrantSet(out PermissionSet newGrant, out PermissionSet newDenied)
- {
- PermissionSet granted = null, denied = null;
- GetGrantSet(GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref granted), JitHelpers.GetObjectHandleOnStack(ref denied));
- newGrant = granted; newDenied = denied;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.Bool)]
- private extern static bool IsAllSecurityCritical(RuntimeAssembly assembly);
-
- // Is everything introduced by this assembly critical
- internal bool IsAllSecurityCritical()
- {
- return IsAllSecurityCritical(GetNativeHandle());
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.Bool)]
- private extern static bool IsAllSecuritySafeCritical(RuntimeAssembly assembly);
-
- // Is everything introduced by this assembly safe critical
- internal bool IsAllSecuritySafeCritical()
- {
- return IsAllSecuritySafeCritical(GetNativeHandle());
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.Bool)]
- private extern static bool IsAllPublicAreaSecuritySafeCritical(RuntimeAssembly assembly);
-
- // Is everything introduced by this assembly safe critical
- internal bool IsAllPublicAreaSecuritySafeCritical()
- {
- return IsAllPublicAreaSecuritySafeCritical(GetNativeHandle());
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
[return: MarshalAs(UnmanagedType.Bool)]
private extern static bool IsAllSecurityTransparent(RuntimeAssembly assembly);
@@ -1948,7 +1636,7 @@ namespace System.Reflection
RuntimeAssembly retAssembly = nLoad(an, null, null, this, ref stackMark,
IntPtr.Zero,
- throwOnFileNotFound, false, false);
+ throwOnFileNotFound, false);
if (retAssembly == this || (retAssembly == null && throwOnFileNotFound))
{
@@ -1958,135 +1646,6 @@ namespace System.Reflection
return retAssembly;
}
- // Helper method used by InternalGetSatelliteAssembly only. Not abstracted for use elsewhere.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- private RuntimeAssembly InternalProbeForSatelliteAssemblyNextToParentAssembly(AssemblyName an,
- String name,
- String codeBase,
- CultureInfo culture,
- bool throwOnFileNotFound,
- bool useLoadFile,
- ref StackCrawlMark stackMark)
- {
- // if useLoadFile == false, we do LoadFrom binds
-
- RuntimeAssembly retAssembly = null;
- String location = null;
-
- if (useLoadFile)
- location = Location;
-
- FileNotFoundException dllNotFoundException = null;
-
- StringBuilder assemblyFile = new StringBuilder(useLoadFile ? location : codeBase,
- 0,
- useLoadFile ? location.LastIndexOf('\\') + 1 : codeBase.LastIndexOf('/') + 1,
- Path.MaxPath);
- assemblyFile.Append(an.CultureInfo.Name);
- assemblyFile.Append(useLoadFile ? '\\' : '/');
- assemblyFile.Append(name);
- assemblyFile.Append(".DLL");
-
- string fileNameOrCodeBase = assemblyFile.ToString();
-
- AssemblyName loadFromAsmName = null;
-
- if (useLoadFile == false)
- {
- loadFromAsmName = new AssemblyName();
- // set just the codebase - we want this to be a pure LoadFrom
- loadFromAsmName.CodeBase = fileNameOrCodeBase;
- }
-
- try
- {
- try
- {
- retAssembly = useLoadFile ? nLoadFile(fileNameOrCodeBase, null) :
- nLoad(loadFromAsmName, fileNameOrCodeBase, null, this, ref stackMark,
- IntPtr.Zero,
- throwOnFileNotFound, false, false);
- }
- catch (FileNotFoundException)
- {
- // Create our own exception since the one caught doesn't have a filename associated with it, making it less useful for debugging.
- dllNotFoundException = new FileNotFoundException(String.Format(culture,
- Environment.GetResourceString("IO.FileNotFound_FileName"),
- fileNameOrCodeBase),
- fileNameOrCodeBase); // Save this exception so we can throw it if we also don't find the .EXE
- retAssembly = null;
- }
-
- if (retAssembly == null)
- {
- // LoadFile will always throw, but LoadFrom will only throw if throwOnFileNotFound is true.
- // If an exception was thrown, we must have a dllNotFoundException ready for throwing later.
- BCLDebug.Assert((useLoadFile == false && throwOnFileNotFound == false) || dllNotFoundException != null,
- "(useLoadFile == false && throwOnFileNotFound == false) || dllNotFoundException != null");
-
- assemblyFile.Remove(assemblyFile.Length - 4, 4);
- assemblyFile.Append(".EXE");
- fileNameOrCodeBase = assemblyFile.ToString();
-
- if (useLoadFile == false)
- loadFromAsmName.CodeBase = fileNameOrCodeBase;
-
- try
- {
- retAssembly = useLoadFile ? nLoadFile(fileNameOrCodeBase, null) :
- nLoad(loadFromAsmName, fileNameOrCodeBase, null, this, ref stackMark,
- IntPtr.Zero,
- false /* do not throw on file not found */, false, false);
-
- }
- catch (FileNotFoundException)
- {
- retAssembly = null;
- }
-
- // It would be messy to have a FileNotFoundException that reports both .DLL and .EXE not found.
- // Using a .DLL extension for satellite assemblies is the more common scenario,
- // so just throw that exception.
-
- // In classic (i.e. non-AppX) mode, if binder logging is turned on, there will be separate logs for
- // the .DLL and .EXE load attempts if the user is interested in digging deeper.
-
- if (retAssembly == null && throwOnFileNotFound)
- throw dllNotFoundException;
- }
- }
- catch (DirectoryNotFoundException)
- {
- if (throwOnFileNotFound)
- throw;
- retAssembly = null;
- }
- // No other exceptions should be caught here.
-
- return retAssembly;
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- static internal extern RuntimeAssembly nLoadFile(String path, Evidence evidence);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- static internal extern RuntimeAssembly nLoadImage(byte[] rawAssembly,
- byte[] rawSymbolStore,
- Evidence evidence,
- ref StackCrawlMark stackMark,
- bool fIntrospection,
- SecurityContextSource securityContextSource);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static internal extern unsafe void nLoadFromUnmanagedArray(bool fIntrospection,
- byte* assemblyContent,
- ulong assemblySize,
- byte* pdbContent,
- ulong pdbSize,
- StackCrawlMarkHandle stackMark,
- ObjectHandleOnStack retAssembly);
-
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
private extern static void GetModules(RuntimeAssembly assembly,
diff --git a/src/mscorlib/src/System/Reflection/AssemblyAttributes.cs b/src/mscorlib/src/System/Reflection/AssemblyAttributes.cs
index b2e44b0034..1e6688d1f4 100644
--- a/src/mscorlib/src/System/Reflection/AssemblyAttributes.cs
+++ b/src/mscorlib/src/System/Reflection/AssemblyAttributes.cs
@@ -20,7 +20,6 @@ namespace System.Reflection {
using System.Diagnostics.Contracts;
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyCopyrightAttribute : Attribute
{
private String m_copyright;
@@ -38,7 +37,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyTrademarkAttribute : Attribute
{
private String m_trademark;
@@ -56,7 +54,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyProductAttribute : Attribute
{
private String m_product;
@@ -74,7 +71,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyCompanyAttribute : Attribute
{
private String m_company;
@@ -92,7 +88,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyDescriptionAttribute : Attribute
{
private String m_description;
@@ -110,7 +105,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyTitleAttribute : Attribute
{
private String m_title;
@@ -128,7 +122,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyConfigurationAttribute : Attribute
{
private String m_configuration;
@@ -146,7 +139,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyDefaultAliasAttribute : Attribute
{
private String m_defaultAlias;
@@ -164,7 +156,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyInformationalVersionAttribute : Attribute
{
private String m_informationalVersion;
@@ -182,7 +173,6 @@ namespace System.Reflection {
[AttributeUsage(AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyFileVersionAttribute : Attribute
{
private String _version;
@@ -202,7 +192,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public unsafe sealed class AssemblyCultureAttribute : Attribute
{
private String m_culture;
@@ -220,7 +209,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public unsafe sealed class AssemblyVersionAttribute : Attribute
{
private String m_version;
@@ -238,7 +226,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyKeyFileAttribute : Attribute
{
private String m_keyFile;
@@ -256,7 +243,6 @@ namespace System.Reflection {
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyDelaySignAttribute : Attribute
{
private bool m_delaySign;
@@ -274,7 +260,6 @@ namespace System.Reflection {
[AttributeUsage(AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public unsafe sealed class AssemblyAlgorithmIdAttribute : Attribute
{
private uint m_algId;
@@ -299,7 +284,6 @@ namespace System.Reflection {
[AttributeUsage(AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public unsafe sealed class AssemblyFlagsAttribute : Attribute
{
private AssemblyNameFlags m_flags;
@@ -360,7 +344,6 @@ namespace System.Reflection {
}
}
-#if FEATURE_STRONGNAME_MIGRATION
[AttributeUsage(AttributeTargets.Assembly, Inherited = false, AllowMultiple=false)]
public sealed class AssemblySignatureKeyAttribute : Attribute
{
@@ -383,10 +366,8 @@ namespace System.Reflection {
get { return _countersignature; }
}
}
-#endif
[AttributeUsage (AttributeTargets.Assembly, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyKeyNameAttribute : Attribute
{
private String m_keyName;
diff --git a/src/mscorlib/src/System/Reflection/AssemblyName.cs b/src/mscorlib/src/System/Reflection/AssemblyName.cs
index 48eab33ee5..01be855646 100644
--- a/src/mscorlib/src/System/Reflection/AssemblyName.cs
+++ b/src/mscorlib/src/System/Reflection/AssemblyName.cs
@@ -20,17 +20,13 @@ namespace System.Reflection {
using System.Runtime.CompilerServices;
using CultureInfo = System.Globalization.CultureInfo;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
using System.Text;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_AssemblyName))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class AssemblyName : _AssemblyName, ICloneable, ISerializable, IDeserializationCallback
+ public sealed class AssemblyName : ICloneable, ISerializable, IDeserializationCallback
{
//
// READ ME
@@ -136,7 +132,6 @@ namespace System.Reflection {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public AssemblyContentType ContentType
{
get
@@ -192,7 +187,6 @@ namespace System.Reflection {
// Assembly.GetNameInternal() will not demand path discovery
// permission, so do that first.
string fullPath = Path.GetFullPath(assemblyFile);
- new FileIOPermission( FileIOPermissionAccess.PathDiscovery, fullPath ).Demand();
return nGetFileInformation(fullPath);
}
diff --git a/src/mscorlib/src/System/Reflection/AssemblyNameFlags.cs b/src/mscorlib/src/System/Reflection/AssemblyNameFlags.cs
index 35a5370cc6..b86955efa5 100644
--- a/src/mscorlib/src/System/Reflection/AssemblyNameFlags.cs
+++ b/src/mscorlib/src/System/Reflection/AssemblyNameFlags.cs
@@ -19,7 +19,6 @@ namespace System.Reflection {
using System;
[Serializable]
[FlagsAttribute()]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum AssemblyNameFlags
{
None = 0x0000,
@@ -35,7 +34,6 @@ namespace System.Reflection {
}
[Serializable]
- [System.Runtime.InteropServices.ComVisible(false)]
public enum AssemblyContentType
{
Default = 0x0000,
@@ -43,7 +41,6 @@ namespace System.Reflection {
}
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum ProcessorArchitecture
{
None = 0x0000,
diff --git a/src/mscorlib/src/System/Reflection/AssemblyNameProxy.cs b/src/mscorlib/src/System/Reflection/AssemblyNameProxy.cs
deleted file mode 100644
index 8c8fa8d286..0000000000
--- a/src/mscorlib/src/System/Reflection/AssemblyNameProxy.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-**
-**
-**
-** Purpose: Remotable version the AssemblyName
-**
-**
-===========================================================*/
-namespace System.Reflection {
- using System;
- using System.Runtime.Versioning;
-
- [System.Runtime.InteropServices.ComVisible(true)]
- public class AssemblyNameProxy : MarshalByRefObject
- {
- public AssemblyName GetAssemblyName(String assemblyFile)
- {
- return AssemblyName.GetAssemblyName(assemblyFile);
- }
- }
-}
diff --git a/src/mscorlib/src/System/Reflection/Binder.cs b/src/mscorlib/src/System/Reflection/Binder.cs
index d06899f6c6..bf4545fe81 100644
--- a/src/mscorlib/src/System/Reflection/Binder.cs
+++ b/src/mscorlib/src/System/Reflection/Binder.cs
@@ -16,8 +16,6 @@ namespace System.Reflection {
using CultureInfo = System.Globalization.CultureInfo;
[Serializable]
- [ClassInterface(ClassInterfaceType.AutoDual)]
-[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Binder
{
// Given a set of methods that match the basic criteria, select a method to
diff --git a/src/mscorlib/src/System/Reflection/BindingFlags.cs b/src/mscorlib/src/System/Reflection/BindingFlags.cs
index 591dfbb249..ae0a6d68d3 100644
--- a/src/mscorlib/src/System/Reflection/BindingFlags.cs
+++ b/src/mscorlib/src/System/Reflection/BindingFlags.cs
@@ -17,7 +17,6 @@ namespace System.Reflection {
using System;
[Serializable]
[Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum BindingFlags
{
diff --git a/src/mscorlib/src/System/Reflection/CallingConventions.cs b/src/mscorlib/src/System/Reflection/CallingConventions.cs
index 6ca11c9021..266dd55184 100644
--- a/src/mscorlib/src/System/Reflection/CallingConventions.cs
+++ b/src/mscorlib/src/System/Reflection/CallingConventions.cs
@@ -15,7 +15,6 @@ namespace System.Reflection {
using System;
[Serializable]
[Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum CallingConventions
{
//NOTE: If you change this please update COMMember.cpp. These
diff --git a/src/mscorlib/src/System/Reflection/ComInterfaces.cs b/src/mscorlib/src/System/Reflection/ComInterfaces.cs
deleted file mode 100644
index 6e4b0cc19a..0000000000
--- a/src/mscorlib/src/System/Reflection/ComInterfaces.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices
-{
- [GuidAttribute("BCA8B44D-AAD6-3A86-8AB7-03349F4F2DA2")]
- [CLSCompliant(false)]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [TypeLibImportClassAttribute(typeof(System.Type))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _Type
- {
- }
-
- [GuidAttribute("17156360-2f1a-384a-bc52-fde93c215c5b")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Assembly))]
- [CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _Assembly
- {
- }
-
- [GuidAttribute("f7102fa9-cabb-3a74-a6da-b4567ef1b079")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.MemberInfo))]
- [CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _MemberInfo
- {
- }
-
- [GuidAttribute("6240837A-707F-3181-8E98-A36AE086766B")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.MethodBase))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _MethodBase
- {
- }
-
- [GuidAttribute("FFCC1B5D-ECB8-38DD-9B01-3DC8ABC2AA5F")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.MethodInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _MethodInfo
- {
- }
-
- [GuidAttribute("E9A19478-9646-3679-9B10-8411AE1FD57D")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.ConstructorInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _ConstructorInfo
- {
- }
-
- [GuidAttribute("8A7C1442-A9FB-366B-80D8-4939FFA6DBE0")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.FieldInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _FieldInfo
- {
- }
-
- [GuidAttribute("F59ED4E4-E68F-3218-BD77-061AA82824BF")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.PropertyInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _PropertyInfo
- {
- }
-
- [GuidAttribute("9DE59C64-D889-35A1-B897-587D74469E5B")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.EventInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _EventInfo
- {
- }
-
- [GuidAttribute("993634C4-E47A-32CC-BE08-85F567DC27D6")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.ParameterInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _ParameterInfo
- {
- }
-
- [GuidAttribute("D002E9BA-D9E3-3749-B1D3-D565A08B13E7")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Module))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _Module
- {
- }
-
- [GuidAttribute("B42B6AAC-317E-34D5-9FA9-093BB4160C50")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.AssemblyName))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _AssemblyName
- {
- }
-}
-
diff --git a/src/mscorlib/src/System/Reflection/ConstructorInfo.cs b/src/mscorlib/src/System/Reflection/ConstructorInfo.cs
index 3d927fc85c..c8d71bc1f9 100644
--- a/src/mscorlib/src/System/Reflection/ConstructorInfo.cs
+++ b/src/mscorlib/src/System/Reflection/ConstructorInfo.cs
@@ -16,23 +16,17 @@ namespace System.Reflection
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security;
- using System.Security.Permissions;
using System.Threading;
using MemberListType = System.RuntimeType.MemberListType;
using RuntimeTypeCache = System.RuntimeType.RuntimeTypeCache;
using System.Runtime.CompilerServices;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_ConstructorInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class ConstructorInfo : MethodBase, _ConstructorInfo
+ public abstract class ConstructorInfo : MethodBase
{
#region Static Members
- [System.Runtime.InteropServices.ComVisible(true)]
public readonly static String ConstructorName = ".ctor";
- [System.Runtime.InteropServices.ComVisible(true)]
public readonly static String TypeConstructorName = ".cctor";
#endregion
@@ -73,7 +67,6 @@ namespace System.Reflection
#endregion
#region MemberInfo Overrides
- [System.Runtime.InteropServices.ComVisible(true)]
public override MemberTypes MemberType { get { return System.Reflection.MemberTypes.Constructor; } }
#endregion
@@ -136,14 +129,6 @@ namespace System.Reflection
return false;
}
-
- internal override bool IsDynamicallyInvokable
- {
- get
- {
- return !AppDomain.ProfileAPICheck || !IsNonW8PFrameworkAPI();
- }
- }
#endif // FEATURE_APPX
internal INVOCATION_FLAGS InvocationFlags
@@ -226,7 +211,6 @@ namespace System.Reflection
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal override bool CacheEquals(object o)
{
RuntimeConstructorInfo m = o as RuntimeConstructorInfo;
@@ -271,20 +255,6 @@ namespace System.Reflection
}
internal BindingFlags BindingFlags { get { return m_bindingFlags; } }
-
- // Differs from MethodHandle in that it will return a valid handle even for reflection only loaded types
- internal RuntimeMethodHandle GetMethodHandle()
- {
- return new RuntimeMethodHandle(this);
- }
-
- internal bool IsOverloaded
- {
- get
- {
- return m_reflectedTypeCache.GetConstructorList(MemberListType.CaseSensitive, Name).Length > 1;
- }
- }
#endregion
#region Object Overrides
@@ -344,7 +314,6 @@ namespace System.Reflection
{
get { return RuntimeMethodHandle.GetName(this); }
}
-[System.Runtime.InteropServices.ComVisible(true)]
public override MemberTypes MemberType { get { return MemberTypes.Constructor; } }
public override Type DeclaringType
@@ -537,11 +506,7 @@ namespace System.Reflection
}
return RuntimeMethodHandle.InvokeMethod(obj, null, sig, false);
}
-
-#pragma warning disable 618
- [ReflectionPermissionAttribute(SecurityAction.Demand, Flags = ReflectionPermissionFlag.MemberAccess)]
-#pragma warning restore 618
public override MethodBody GetMethodBody()
{
MethodBody mb = RuntimeMethodHandle.GetMethodBody(this, ReflectedTypeInternal);
@@ -644,11 +609,6 @@ namespace System.Reflection
// We don't need the return type for constructors.
return FormatNameAndSig(true);
}
-
- internal void SerializationInvoke(Object target, SerializationInfo info, StreamingContext context)
- {
- RuntimeMethodHandle.SerializationInvoke(this, target, info, ref context);
- }
#endregion
}
}
diff --git a/src/mscorlib/src/System/Reflection/CustomAttribute.cs b/src/mscorlib/src/System/Reflection/CustomAttribute.cs
index e568a1702f..b71c7bbff3 100644
--- a/src/mscorlib/src/System/Reflection/CustomAttribute.cs
+++ b/src/mscorlib/src/System/Reflection/CustomAttribute.cs
@@ -14,7 +14,6 @@ using System.Diagnostics;
using System.Diagnostics.Tracing;
using System.Globalization;
using System.Security;
-using System.Security.Permissions;
using System.Runtime.ConstrainedExecution;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
@@ -22,7 +21,6 @@ using System.Diagnostics.Contracts;
namespace System.Reflection
{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class CustomAttributeData
{
#region Public Static Members
@@ -515,10 +513,8 @@ namespace System.Reflection
#region Public Members
public Type AttributeType { get { return Constructor.DeclaringType; } }
- [System.Runtime.InteropServices.ComVisible(true)]
public virtual ConstructorInfo Constructor { get { return m_ctor; } }
- [System.Runtime.InteropServices.ComVisible(true)]
public virtual IList<CustomAttributeTypedArgument> ConstructorArguments
{
get
@@ -576,7 +572,6 @@ namespace System.Reflection
}
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct CustomAttributeNamedArgument
{
#region Public Static Members
@@ -666,7 +661,6 @@ namespace System.Reflection
}
[Serializable]
- [ComVisible(true)]
public struct CustomAttributeTypedArgument
{
#region Public Static Members
@@ -1106,24 +1100,6 @@ namespace System.Reflection
#endregion
}
- // Note: This is a managed representation of a frame type defined in vm\frames.h; please ensure the layout remains
- // synchronized.
- [StructLayout(LayoutKind.Sequential)]
- internal struct SecurityContextFrame
- {
- IntPtr m_GSCookie; // This is actually at a negative offset in the real frame definition
- IntPtr __VFN_table; // This is the real start of the SecurityContextFrame
- IntPtr m_Next;
- IntPtr m_Assembly;
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public extern void Push(RuntimeAssembly assembly);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- public extern void Pop();
- }
-
[Serializable]
[StructLayout(LayoutKind.Auto)]
internal struct CustomAttributeType
@@ -1153,7 +1129,6 @@ namespace System.Reflection
public CustomAttributeEncoding EncodedType { get { return m_encodedType; } }
public CustomAttributeEncoding EncodedEnumType { get { return m_encodedEnumType; } }
public CustomAttributeEncoding EncodedArrayType { get { return m_encodedArrayType; } }
- [System.Runtime.InteropServices.ComVisible(true)]
public string EnumName { get { return m_enumName; } }
#endregion
}
@@ -1621,16 +1596,6 @@ namespace System.Reflection
object[] attributes = CreateAttributeArrayHelper(arrayType, car.Length);
int cAttributes = 0;
- // Custom attribute security checks are done with respect to the assembly *decorated* with the
- // custom attribute as opposed to the *caller of GetCustomAttributes*.
- // Since this assembly might not be on the stack and the attribute ctor or property setters we're about to invoke may
- // make security demands, we push a frame on the stack as a proxy for the decorated assembly (this frame will be picked
- // up an interpreted by the security stackwalker).
- // Once we push the frame it will be automatically popped in the event of an exception, so no need to use CERs or the
- // like.
- SecurityContextFrame frame = new SecurityContextFrame();
- frame.Push(decoratedModule.GetRuntimeAssembly());
-
// Optimization for the case where attributes decorate entities in the same assembly in which case
// we can cache the successful APTCA check between the decorated and the declared assembly.
Assembly lastAptcaOkAssembly = null;
@@ -1780,10 +1745,6 @@ namespace System.Reflection
attributes[cAttributes++] = attribute;
}
- // The frame will be popped automatically if we take an exception any time after we pushed it. So no need of a catch or
- // finally or CERs here.
- frame.Pop();
-
if (cAttributes == car.Length && pcaCount == 0)
return attributes;
@@ -2069,9 +2030,8 @@ namespace System.Reflection
#region Internal Static
internal static bool IsSecurityAttribute(RuntimeType type)
{
-#pragma warning disable 618
- return type == (RuntimeType)typeof(SecurityAttribute) || type.IsSubclassOf(typeof(SecurityAttribute));
-#pragma warning restore 618
+ // TODO: Cleanup
+ return false;
}
internal static Attribute[] GetCustomAttributes(RuntimeType type, RuntimeType caType, bool includeSecCa, out int count)
diff --git a/src/mscorlib/src/System/Reflection/CustomAttributeFormatException.cs b/src/mscorlib/src/System/Reflection/CustomAttributeFormatException.cs
index 3eb8b1f1ef..9aee911a6c 100644
--- a/src/mscorlib/src/System/Reflection/CustomAttributeFormatException.cs
+++ b/src/mscorlib/src/System/Reflection/CustomAttributeFormatException.cs
@@ -15,7 +15,6 @@ namespace System.Reflection {
using ApplicationException = System.ApplicationException;
using System.Runtime.Serialization;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class CustomAttributeFormatException : FormatException {
public CustomAttributeFormatException()
diff --git a/src/mscorlib/src/System/Reflection/DefaultMemberAttribute.cs b/src/mscorlib/src/System/Reflection/DefaultMemberAttribute.cs
index 1fec75906a..4232fcd2a1 100644
--- a/src/mscorlib/src/System/Reflection/DefaultMemberAttribute.cs
+++ b/src/mscorlib/src/System/Reflection/DefaultMemberAttribute.cs
@@ -19,7 +19,6 @@ namespace System.Reflection {
[Serializable]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class DefaultMemberAttribute : Attribute
{
// The name of the member
diff --git a/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilder.cs
index 9331ae193c..5575e28917 100644
--- a/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilder.cs
@@ -38,7 +38,6 @@ namespace System.Reflection.Emit
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
- using System.Security.Permissions;
using System.Security.Policy;
using System.Threading;
@@ -156,10 +155,7 @@ namespace System.Reflection.Emit
// AssemblyBuilder class.
// deliberately not [serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_AssemblyBuilder))]
- [ComVisible(true)]
- public sealed class AssemblyBuilder : Assembly, _AssemblyBuilder
+ public sealed class AssemblyBuilder : Assembly
{
#region FCALL
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -221,11 +217,6 @@ namespace System.Reflection.Emit
return InternalAssembly.GetNativeHandle();
}
- internal Version GetVersion()
- {
- return InternalAssembly.GetVersion();
- }
-
#if FEATURE_APPX
internal bool ProfileAPICheck
{
@@ -243,9 +234,6 @@ namespace System.Reflection.Emit
AssemblyBuilderAccess access,
String dir,
Evidence evidence,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions,
ref StackCrawlMark stackMark,
IEnumerable<CustomAttributeBuilder> unsafeAssemblyAttributes,
SecurityContextSource securityContextSource)
@@ -257,9 +245,7 @@ namespace System.Reflection.Emit
#if FEATURE_REFLECTION_ONLY_LOAD
&& access != AssemblyBuilderAccess.ReflectionOnly
#endif // FEATURE_REFLECTION_ONLY_LOAD
-#if FEATURE_COLLECTIBLE_TYPES
&& access != AssemblyBuilderAccess.RunAndCollect
-#endif // FEATURE_COLLECTIBLE_TYPES
)
{
throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)access), nameof(access));
@@ -274,18 +260,6 @@ namespace System.Reflection.Emit
// Clone the name in case the caller modifies it underneath us.
name = (AssemblyName)name.Clone();
- // If the caller is trusted they can supply identity
- // evidence for the new assembly. Otherwise we copy the
- // current grant and deny sets from the caller's assembly,
- // inject them into the new assembly and mark policy as
- // resolved. If/when the assembly is persisted and
- // reloaded, the normal rules for gathering evidence will
- // be used.
- if (evidence != null)
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.ControlEvidence).Demand();
-#pragma warning restore 618
-
// Scan the assembly level attributes for any attributes which modify how we create the
// assembly. Currently, we look for any attribute which modifies the security transparency
// of the assembly.
@@ -320,9 +294,6 @@ namespace System.Reflection.Emit
name,
evidence,
ref stackMark,
- requiredPermissions,
- optionalPermissions,
- refusedPermissions,
securityRulesBlob,
aptcaBlob,
access,
@@ -333,10 +304,6 @@ namespace System.Reflection.Emit
name.Name,
access,
dir);
- m_assemblyData.AddPermissionRequests(requiredPermissions,
- optionalPermissions,
- refusedPermissions);
-
#if FEATURE_APPX
if (AppDomain.ProfileAPICheck)
{
@@ -393,7 +360,7 @@ namespace System.Reflection.Emit
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return InternalDefineDynamicAssembly(name, access, null,
- null, null, null, null, ref stackMark, null, SecurityContextSource.CurrentAssembly);
+ null, ref stackMark, null, SecurityContextSource.CurrentAssembly);
}
[MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
@@ -407,7 +374,7 @@ namespace System.Reflection.Emit
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return InternalDefineDynamicAssembly(name,
access,
- null, null, null, null, null,
+ null, null,
ref stackMark,
assemblyAttributes, SecurityContextSource.CurrentAssembly);
}
@@ -418,9 +385,6 @@ namespace System.Reflection.Emit
AssemblyName name,
Evidence identity,
ref StackCrawlMark stackMark,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions,
byte[] securityRulesBlob,
byte[] aptcaBlob,
AssemblyBuilderAccess access,
@@ -434,9 +398,6 @@ namespace System.Reflection.Emit
AssemblyBuilderAccess access,
String dir,
Evidence evidence,
- PermissionSet requiredPermissions,
- PermissionSet optionalPermissions,
- PermissionSet refusedPermissions,
ref StackCrawlMark stackMark,
IEnumerable<CustomAttributeBuilder> unsafeAssemblyAttributes,
SecurityContextSource securityContextSource)
@@ -449,9 +410,6 @@ namespace System.Reflection.Emit
access,
dir,
evidence,
- requiredPermissions,
- optionalPermissions,
- refusedPermissions,
ref stackMark,
unsafeAssemblyAttributes,
securityContextSource);
@@ -532,12 +490,6 @@ namespace System.Reflection.Emit
if (emitSymbolInfo)
{
writer = SymWrapperCore.SymWriter.CreateSymWriter();
- // Set the underlying writer for the managed writer
- // that we're using. Note that this function requires
- // unmanaged code access.
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert();
-#pragma warning restore 618
String fileName = "Unused"; // this symfile is never written to disk so filename does not matter.
@@ -559,19 +511,8 @@ namespace System.Reflection.Emit
return dynModule;
} // DefineDynamicModuleInternalNoLock
- #endregion
-
- private Assembly LoadISymWrapper()
- {
- if (m_assemblyData.m_ISymWrapperAssembly != null)
- return m_assemblyData.m_ISymWrapperAssembly;
- Assembly assem = Assembly.Load("ISymWrapper, Version=" + ThisAssembly.Version +
- ", Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken);
-
- m_assemblyData.m_ISymWrapperAssembly = assem;
- return assem;
- }
+#endregion
internal void CheckContext(params Type[][] typess)
{
@@ -839,52 +780,11 @@ namespace System.Reflection.Emit
}
return null;
}
-
- /**********************************************
- *
- * Setting the entry point if the assembly builder is building
- * an exe.
- *
- **********************************************/
- public void SetEntryPoint(
- MethodInfo entryMethod)
- {
- SetEntryPoint(entryMethod, PEFileKinds.ConsoleApplication);
- }
- public void SetEntryPoint(
- MethodInfo entryMethod, // entry method for the assembly. We use this to determine the entry module
- PEFileKinds fileKind) // file kind for the assembly.
- {
- lock(SyncRoot)
- {
- SetEntryPointNoLock(entryMethod, fileKind);
- }
- }
-
- private void SetEntryPointNoLock(
- MethodInfo entryMethod, // entry method for the assembly. We use this to determine the entry module
- PEFileKinds fileKind) // file kind for the assembly.
- {
-
- if (entryMethod == null)
- throw new ArgumentNullException(nameof(entryMethod));
- Contract.EndContractBlock();
-
- BCLDebug.Log("DYNIL", "## DYNIL LOGGING: AssemblyBuilder.SetEntryPoint");
-
- Module tmpModule = entryMethod.Module;
- if (tmpModule == null || !InternalAssembly.Equals(tmpModule.Assembly))
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EntryMethodNotDefinedInAssembly"));
-
- m_assemblyData.m_entryPointMethod = entryMethod;
- m_assemblyData.m_peFileKind = fileKind;
- }
/**********************************************
* Use this function if client decides to form the custom attribute blob themselves
**********************************************/
- [System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
if (con == null)
@@ -947,78 +847,6 @@ namespace System.Reflection.Emit
}
}
-
- /**********************************************
- *
- * Saves the assembly to disk. Also saves all dynamic modules defined
- * in this dynamic assembly. Assembly file name can be the same as one of
- * the module's name. If so, assembly info is stored within that module.
- * Assembly file name can be different from all of the modules underneath. In
- * this case, assembly is stored stand alone.
- *
- **********************************************/
-
- public void Save(String assemblyFileName) // assembly file name
- {
- Save(assemblyFileName, System.Reflection.PortableExecutableKinds.ILOnly, System.Reflection.ImageFileMachine.I386);
- }
-
- public void Save(String assemblyFileName,
- PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
- {
- lock(SyncRoot)
- {
- SaveNoLock(assemblyFileName, portableExecutableKind, imageFileMachine);
- }
- }
-
- private void SaveNoLock(String assemblyFileName,
- PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
- {
- // AssemblyBuilderAccess.Save can never be set in CoreCLR
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_CantSaveTransientAssembly"));
- }
-
- internal bool IsPersistable()
- {
- {
- return false;
- }
- }
-
- /**********************************************
- *
- * Internal helper to walk the nested type hierachy
- *
- **********************************************/
- private int DefineNestedComType(Type type, int tkResolutionScope, int tkTypeDef)
- {
- Type enclosingType = type.DeclaringType;
- if (enclosingType == null)
- {
- // Use full type name for non-nested types.
- return AddExportedTypeOnDisk(GetNativeHandle(), type.FullName, tkResolutionScope, tkTypeDef, type.Attributes);
- }
-
- tkResolutionScope = DefineNestedComType(enclosingType, tkResolutionScope, tkTypeDef);
- // Use simple name for nested types.
- return AddExportedTypeOnDisk(GetNativeHandle(), type.Name, tkResolutionScope, tkTypeDef, type.Attributes);
- }
-
- internal int DefineExportedTypeInMemory(Type type, int tkResolutionScope, int tkTypeDef)
- {
- Type enclosingType = type.DeclaringType;
- if (enclosingType == null)
- {
- // Use full type name for non-nested types.
- return AddExportedTypeInMemory(GetNativeHandle(), type.FullName, tkResolutionScope, tkTypeDef, type.Attributes);
- }
-
- tkResolutionScope = DefineExportedTypeInMemory(enclosingType, tkResolutionScope, tkTypeDef);
- // Use simple name for nested types.
- return AddExportedTypeInMemory(GetNativeHandle(), type.Name, tkResolutionScope, tkTypeDef, type.Attributes);
- }
-
/**********************************************
*
* Private methods
@@ -1030,105 +858,5 @@ namespace System.Reflection.Emit
* @internonly
**********************************************/
private AssemblyBuilder() {}
-
- // Create a new module in which to emit code. This module will not contain the manifest.
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static private extern void DefineDynamicModule(RuntimeAssembly containingAssembly,
- bool emitSymbolInfo,
- String name,
- String filename,
- StackCrawlMarkHandle stackMark,
- ref IntPtr pInternalSymWriter,
- ObjectHandleOnStack retModule,
- bool fIsTransient,
- out int tkFile);
-
- private static Module DefineDynamicModule(RuntimeAssembly containingAssembly,
- bool emitSymbolInfo,
- String name,
- String filename,
- ref StackCrawlMark stackMark,
- ref IntPtr pInternalSymWriter,
- bool fIsTransient,
- out int tkFile)
- {
- RuntimeModule retModule = null;
-
- DefineDynamicModule(containingAssembly.GetNativeHandle(),
- emitSymbolInfo,
- name,
- filename,
- JitHelpers.GetStackCrawlMarkHandle(ref stackMark),
- ref pInternalSymWriter,
- JitHelpers.GetObjectHandleOnStack(ref retModule),
- fIsTransient,
- out tkFile);
-
- return retModule;
- }
-
- // The following functions are native helpers for creating on-disk manifest
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static private extern void PrepareForSavingManifestToDisk(RuntimeAssembly assembly, RuntimeModule assemblyModule); // module to contain assembly information if assembly is embedded
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static private extern void SaveManifestToDisk(RuntimeAssembly assembly,
- String strFileName,
- int entryPoint,
- int fileKind,
- int portableExecutableKind,
- int ImageFileMachine);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static private extern int AddFile(RuntimeAssembly assembly, String strFileName);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static private extern void SetFileHashValue(RuntimeAssembly assembly,
- int tkFile,
- String strFullFileName);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static private extern int AddExportedTypeInMemory(RuntimeAssembly assembly,
- String strComTypeName,
- int tkAssemblyRef,
- int tkTypeDef,
- TypeAttributes flags);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static private extern int AddExportedTypeOnDisk(RuntimeAssembly assembly,
- String strComTypeName,
- int tkAssemblyRef,
- int tkTypeDef,
- TypeAttributes flags);
-
- // Add an entry to assembly's manifestResource table for a stand alone resource.
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static private extern void AddStandAloneResource(RuntimeAssembly assembly,
- String strName,
- String strFileName,
- String strFullFileName,
- int attribute);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
-#pragma warning disable 618
- static private extern void AddDeclarativeSecurity(RuntimeAssembly assembly, SecurityAction action, byte[] blob, int length);
-#pragma warning restore 618
-
- // Functions for defining unmanaged resources.
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- static private extern void CreateVersionInfoResource(String filename, String title, String iconFilename, String description,
- String copyright, String trademark, String company, String product,
- String productVersion, String fileVersion, int lcid, bool isDll,
- StringHandleOnStack retFileName);
}
}
diff --git a/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderAccess.cs b/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderAccess.cs
index 5c86d8ec87..b3d1711307 100644
--- a/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderAccess.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderAccess.cs
@@ -10,7 +10,6 @@ using System;
namespace System.Reflection.Emit
{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
[Flags]
public enum AssemblyBuilderAccess
{
@@ -18,8 +17,6 @@ namespace System.Reflection.Emit
#if FEATURE_REFLECTION_ONLY_LOAD
ReflectionOnly = 6, // 4 | Save,
#endif // FEATURE_REFLECTION_ONLY_LOAD
-#if FEATURE_COLLECTIBLE_TYPES
RunAndCollect = 8 | Run
-#endif
}
}
diff --git a/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderData.cs b/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderData.cs
index f0f83e7d2a..7ac9daeac0 100644
--- a/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderData.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderData.cs
@@ -14,7 +14,6 @@ namespace System.Reflection.Emit {
using System.Security;
using System.Diagnostics;
using CultureInfo = System.Globalization.CultureInfo;
- using IResourceWriter = System.Resources.IResourceWriter;
using System.IO;
using System.Runtime.Versioning;
using System.Diagnostics.SymbolStore;
@@ -52,12 +51,6 @@ namespace System.Reflection.Emit {
{
m_moduleBuilderList.Add(dynModule);
}
-
- // Helper to add a resource information into the tracking list
- internal void AddResWriter(ResWriterData resData)
- {
- m_resWriterList.Add(resData);
- }
// Helper to track CAs to persist onto disk
@@ -110,194 +103,6 @@ namespace System.Reflection.Emit {
m_CACons[m_iCAs] = con;
m_iCAs++;
}
-
- // Helper to calculate unmanaged version info from Assembly's custom attributes.
- // If DefineUnmanagedVersionInfo is called, the parameter provided will override
- // the CA's value.
- //
- internal void FillUnmanagedVersionInfo()
- {
- // Get the lcid set on the assembly name as default if available
- // Note that if LCID is not avaible from neither AssemblyName or AssemblyCultureAttribute,
- // it is default to -1 which is treated as language neutral.
- //
- CultureInfo locale = m_assembly.GetLocale();
-#if FEATURE_USE_LCID
- if (locale != null)
- m_nativeVersion.m_lcid = locale.LCID;
-#endif
-
- for (int i = 0; i < m_iCABuilder; i++)
- {
- // check for known attributes
- Type conType = m_CABuilders[i].m_con.DeclaringType;
- if (m_CABuilders[i].m_constructorArgs.Length == 0 || m_CABuilders[i].m_constructorArgs[0] == null)
- continue;
-
- if (conType.Equals(typeof(System.Reflection.AssemblyCopyrightAttribute)))
- {
- // assert that we should only have one argument for this CA and the type should
- // be a string.
- //
- if (m_CABuilders[i].m_constructorArgs.Length != 1)
- {
- throw new ArgumentException(Environment.GetResourceString(
- "Argument_BadCAForUnmngRSC",
- m_CABuilders[i].m_con.ReflectedType.Name));
- }
- if (m_OverrideUnmanagedVersionInfo == false)
- {
- m_nativeVersion.m_strCopyright = m_CABuilders[i].m_constructorArgs[0].ToString();
- }
- }
- else if (conType.Equals(typeof(System.Reflection.AssemblyTrademarkAttribute)))
- {
- // assert that we should only have one argument for this CA and the type should
- // be a string.
- //
- if (m_CABuilders[i].m_constructorArgs.Length != 1)
- {
- throw new ArgumentException(Environment.GetResourceString(
- "Argument_BadCAForUnmngRSC",
- m_CABuilders[i].m_con.ReflectedType.Name));
- }
- if (m_OverrideUnmanagedVersionInfo == false)
- {
- m_nativeVersion.m_strTrademark = m_CABuilders[i].m_constructorArgs[0].ToString();
- }
- }
- else if (conType.Equals(typeof(System.Reflection.AssemblyProductAttribute)))
- {
- if (m_OverrideUnmanagedVersionInfo == false)
- {
- // assert that we should only have one argument for this CA and the type should
- // be a string.
- //
- m_nativeVersion.m_strProduct = m_CABuilders[i].m_constructorArgs[0].ToString();
- }
- }
- else if (conType.Equals(typeof(System.Reflection.AssemblyCompanyAttribute)))
- {
- if (m_CABuilders[i].m_constructorArgs.Length != 1)
- {
- throw new ArgumentException(Environment.GetResourceString(
- "Argument_BadCAForUnmngRSC",
- m_CABuilders[i].m_con.ReflectedType.Name));
- }
- if (m_OverrideUnmanagedVersionInfo == false)
- {
- // assert that we should only have one argument for this CA and the type should
- // be a string.
- //
- m_nativeVersion.m_strCompany = m_CABuilders[i].m_constructorArgs[0].ToString();
- }
- }
- else if (conType.Equals(typeof(System.Reflection.AssemblyDescriptionAttribute)))
- {
- if (m_CABuilders[i].m_constructorArgs.Length != 1)
- {
- throw new ArgumentException(Environment.GetResourceString(
- "Argument_BadCAForUnmngRSC",
- m_CABuilders[i].m_con.ReflectedType.Name));
- }
- m_nativeVersion.m_strDescription = m_CABuilders[i].m_constructorArgs[0].ToString();
- }
- else if (conType.Equals(typeof(System.Reflection.AssemblyTitleAttribute)))
- {
- if (m_CABuilders[i].m_constructorArgs.Length != 1)
- {
- throw new ArgumentException(Environment.GetResourceString(
- "Argument_BadCAForUnmngRSC",
- m_CABuilders[i].m_con.ReflectedType.Name));
- }
- m_nativeVersion.m_strTitle = m_CABuilders[i].m_constructorArgs[0].ToString();
- }
- else if (conType.Equals(typeof(System.Reflection.AssemblyInformationalVersionAttribute)))
- {
- if (m_CABuilders[i].m_constructorArgs.Length != 1)
- {
- throw new ArgumentException(Environment.GetResourceString(
- "Argument_BadCAForUnmngRSC",
- m_CABuilders[i].m_con.ReflectedType.Name));
- }
- if (m_OverrideUnmanagedVersionInfo == false)
- {
- m_nativeVersion.m_strProductVersion = m_CABuilders[i].m_constructorArgs[0].ToString();
- }
- }
- else if (conType.Equals(typeof(System.Reflection.AssemblyCultureAttribute)))
- {
- // retrieve the LCID
- if (m_CABuilders[i].m_constructorArgs.Length != 1)
- {
- throw new ArgumentException(Environment.GetResourceString(
- "Argument_BadCAForUnmngRSC",
- m_CABuilders[i].m_con.ReflectedType.Name));
- }
- // CultureInfo attribute overrides the lcid from AssemblyName.
- CultureInfo culture = new CultureInfo(m_CABuilders[i].m_constructorArgs[0].ToString());
-#if FEATURE_USE_LCID
- m_nativeVersion.m_lcid = culture.LCID;
-#endif
- }
- else if (conType.Equals(typeof(System.Reflection.AssemblyFileVersionAttribute)))
- {
- if (m_CABuilders[i].m_constructorArgs.Length != 1)
- {
- throw new ArgumentException(Environment.GetResourceString(
- "Argument_BadCAForUnmngRSC",
- m_CABuilders[i].m_con.ReflectedType.Name));
- }
- if (m_OverrideUnmanagedVersionInfo == false)
- {
- m_nativeVersion.m_strFileVersion = m_CABuilders[i].m_constructorArgs[0].ToString();
- }
- }
- }
- }
-
-
- // Helper to ensure the resource name is unique underneath assemblyBuilder
- internal void CheckResNameConflict(String strNewResName)
- {
- int size = m_resWriterList.Count;
- int i;
- for (i = 0; i < size; i++)
- {
- ResWriterData resWriter = m_resWriterList[i];
- if (resWriter.m_strName.Equals(strNewResName))
- {
- // Cannot have two resources with the same name
- throw new ArgumentException(Environment.GetResourceString("Argument_DuplicateResourceName"));
- }
- }
- }
-
-
- // Helper to ensure the module name is unique underneath assemblyBuilder
- internal void CheckNameConflict(String strNewModuleName)
- {
- int size = m_moduleBuilderList.Count;
- int i;
- for (i = 0; i < size; i++)
- {
- ModuleBuilder moduleBuilder = m_moduleBuilderList[i];
- if (moduleBuilder.m_moduleData.m_strModuleName.Equals(strNewModuleName))
- {
- // Cannot have two dynamic modules with the same name
- throw new ArgumentException(Environment.GetResourceString("Argument_DuplicateModuleName"));
- }
- }
-
- // Right now dynamic modules can only be added to dynamic assemblies in which
- // all modules are dynamic. Otherwise we would also need to check the static modules
- // with this:
- // if (m_assembly.GetModule(strNewModuleName) != null)
- // {
- // // Cannot have two dynamic modules with the same name
- // throw new ArgumentException(Environment.GetResourceString("Argument_DuplicateModuleName"));
- // }
- }
// Helper to ensure the type name is unique underneath assemblyBuilder
internal void CheckTypeNameConflict(String strTypeName, TypeBuilder enclosingType)
@@ -320,134 +125,6 @@ namespace System.Reflection.Emit {
// }
}
-
- // Helper to ensure the file name is unique underneath assemblyBuilder. This includes
- // modules and resources.
- //
- //
- //
- internal void CheckFileNameConflict(String strFileName)
- {
- int size = m_moduleBuilderList.Count;
- int i;
- for (i = 0; i < size; i++)
- {
- ModuleBuilder moduleBuilder = m_moduleBuilderList[i];
- if (moduleBuilder.m_moduleData.m_strFileName != null)
- {
- if (String.Compare(moduleBuilder.m_moduleData.m_strFileName, strFileName, StringComparison.OrdinalIgnoreCase) == 0)
- {
- // Cannot have two dynamic module with the same name
- throw new ArgumentException(Environment.GetResourceString("Argument_DuplicatedFileName"));
- }
- }
- }
- size = m_resWriterList.Count;
- for (i = 0; i < size; i++)
- {
- ResWriterData resWriter = m_resWriterList[i];
- if (resWriter.m_strFileName != null)
- {
- if (String.Compare(resWriter.m_strFileName, strFileName, StringComparison.OrdinalIgnoreCase) == 0)
- {
- // Cannot have two dynamic module with the same name
- throw new ArgumentException(Environment.GetResourceString("Argument_DuplicatedFileName"));
- }
- }
- }
-
- }
-
- // Helper to look up which module that assembly is supposed to be stored at
- //
- //
- //
- internal ModuleBuilder FindModuleWithFileName(String strFileName)
- {
- int size = m_moduleBuilderList.Count;
- int i;
- for (i = 0; i < size; i++)
- {
- ModuleBuilder moduleBuilder = m_moduleBuilderList[i];
- if (moduleBuilder.m_moduleData.m_strFileName != null)
- {
- if (String.Compare(moduleBuilder.m_moduleData.m_strFileName, strFileName, StringComparison.OrdinalIgnoreCase) == 0)
- {
- return moduleBuilder;
- }
- }
- }
- return null;
- }
-
- // Helper to look up module by name.
- //
- //
- //
- internal ModuleBuilder FindModuleWithName(String strName)
- {
- int size = m_moduleBuilderList.Count;
- int i;
- for (i = 0; i < size; i++)
- {
- ModuleBuilder moduleBuilder = m_moduleBuilderList[i];
- if (moduleBuilder.m_moduleData.m_strModuleName != null)
- {
- if (String.Compare(moduleBuilder.m_moduleData.m_strModuleName, strName, StringComparison.OrdinalIgnoreCase) == 0)
- return moduleBuilder;
- }
- }
- return null;
- }
-
-
- // add type to public COMType tracking list
- internal void AddPublicComType(Type type)
- {
- BCLDebug.Log("DYNIL","## DYNIL LOGGING: AssemblyBuilderData.AddPublicComType( " + type.FullName + " )");
- if (m_isSaved == true)
- {
- // assembly has been saved before!
- throw new InvalidOperationException(Environment.GetResourceString(
- "InvalidOperation_CannotAlterAssembly"));
- }
- EnsurePublicComTypeCapacity();
- m_publicComTypeList[m_iPublicComTypeCount] = type;
- m_iPublicComTypeCount++;
- }
-
- // add security permission requests
- internal void AddPermissionRequests(
- PermissionSet required,
- PermissionSet optional,
- PermissionSet refused)
- {
- BCLDebug.Log("DYNIL","## DYNIL LOGGING: AssemblyBuilderData.AddPermissionRequests");
- if (m_isSaved == true)
- {
- // assembly has been saved before!
- throw new InvalidOperationException(Environment.GetResourceString(
- "InvalidOperation_CannotAlterAssembly"));
- }
- m_RequiredPset = required;
- m_OptionalPset = optional;
- m_RefusedPset = refused;
- }
-
- private void EnsurePublicComTypeCapacity()
- {
- if (m_publicComTypeList == null)
- {
- m_publicComTypeList = new Type[m_iInitialSize];
- }
- if (m_iPublicComTypeCount == m_publicComTypeList.Length)
- {
- Type[] tempTypeList = new Type[m_iPublicComTypeCount * 2];
- Array.Copy(m_publicComTypeList, 0, tempTypeList, 0, m_iPublicComTypeCount);
- m_publicComTypeList = tempTypeList;
- }
- }
-
internal List<ModuleBuilder> m_moduleBuilderList;
internal List<ResWriterData> m_resWriterList;
internal String m_strAssemblyName;
@@ -463,11 +140,6 @@ namespace System.Reflection.Emit {
// hard coding the assembly def token
internal const int m_tkAssembly = 0x20000001;
-
- // Security permission requests
- internal PermissionSet m_RequiredPset;
- internal PermissionSet m_OptionalPset;
- internal PermissionSet m_RefusedPset;
// tracking AssemblyDef's CAs for persistence to disk
internal CustomAttributeBuilder[] m_CABuilders;
@@ -497,24 +169,6 @@ namespace System.Reflection.Emit {
**********************************************/
internal class ResWriterData
{
- internal ResWriterData(
- IResourceWriter resWriter,
- Stream memoryStream,
- String strName,
- String strFileName,
- String strFullFileName,
- ResourceAttributes attribute)
- {
- m_resWriter = resWriter;
- m_memoryStream = memoryStream;
- m_strName = strName;
- m_strFileName = strFileName;
- m_strFullFileName = strFullFileName;
- m_nextResWriter = null;
- m_attribute = attribute;
- }
-
- internal IResourceWriter m_resWriter;
internal String m_strName;
internal String m_strFileName;
internal String m_strFullFileName;
diff --git a/src/mscorlib/src/System/Reflection/Emit/ComInterfaces.cs b/src/mscorlib/src/System/Reflection/Emit/ComInterfaces.cs
deleted file mode 100644
index 8dba934bde..0000000000
--- a/src/mscorlib/src/System/Reflection/Emit/ComInterfaces.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices
-{
- [GuidAttribute("BEBB2505-8B54-3443-AEAD-142A16DD9CC7")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.AssemblyBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _AssemblyBuilder
- {
- }
-
- [GuidAttribute("ED3E4384-D7E2-3FA7-8FFD-8940D330519A")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.ConstructorBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _ConstructorBuilder
- {
- }
-
- [GuidAttribute("BE9ACCE8-AAFF-3B91-81AE-8211663F5CAD")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.CustomAttributeBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _CustomAttributeBuilder
- {
- }
-
- [GuidAttribute("C7BD73DE-9F85-3290-88EE-090B8BDFE2DF")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.EnumBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _EnumBuilder
- {
- }
-
- [GuidAttribute("AADABA99-895D-3D65-9760-B1F12621FAE8")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.EventBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _EventBuilder
- {
- }
-
- [GuidAttribute("CE1A3BF5-975E-30CC-97C9-1EF70F8F3993")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.FieldBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _FieldBuilder
- {
- }
-
- [GuidAttribute("A4924B27-6E3B-37F7-9B83-A4501955E6A7")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.ILGenerator))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _ILGenerator
- {
- }
-
- [GuidAttribute("4E6350D1-A08B-3DEC-9A3E-C465F9AEEC0C")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.LocalBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _LocalBuilder
- {
- }
-
- [GuidAttribute("007D8A14-FDF3-363E-9A0B-FEC0618260A2")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.MethodBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _MethodBuilder
- {
- }
-
-#if FEATURE_METHOD_RENTAL
- [GuidAttribute("C2323C25-F57F-3880-8A4D-12EBEA7A5852")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.MethodRental))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _MethodRental
- {
- }
-#endif
-
- [GuidAttribute("D05FFA9A-04AF-3519-8EE1-8D93AD73430B")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.ModuleBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _ModuleBuilder
- {
- }
-
- [GuidAttribute("36329EBA-F97A-3565-BC07-0ED5C6EF19FC")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.ParameterBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _ParameterBuilder
- {
- }
-
- [GuidAttribute("15F9A479-9397-3A63-ACBD-F51977FB0F02")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.PropertyBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _PropertyBuilder
- {
- }
-
- [GuidAttribute("7D13DD37-5A04-393C-BBCA-A5FEA802893D")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.SignatureHelper))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _SignatureHelper
- {
- }
-
- [GuidAttribute("7E5678EE-48B3-3F83-B076-C58543498A58")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Reflection.Emit.TypeBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _TypeBuilder
- {
- }
-}
diff --git a/src/mscorlib/src/System/Reflection/Emit/ConstructorBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/ConstructorBuilder.cs
index ef76adcf80..3bc02860a1 100644
--- a/src/mscorlib/src/System/Reflection/Emit/ConstructorBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/ConstructorBuilder.cs
@@ -12,14 +12,10 @@ namespace System.Reflection.Emit
using System.Collections.Generic;
using System.Diagnostics.SymbolStore;
using System.Security;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Diagnostics.Contracts;
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_ConstructorBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ConstructorBuilder : ConstructorInfo, _ConstructorBuilder
+ public sealed class ConstructorBuilder : ConstructorInfo
{
private readonly MethodBuilder m_methodBuilder;
internal bool m_isDefaultConstructor;
@@ -65,11 +61,6 @@ namespace System.Reflection.Emit
{
return m_methodBuilder.GetTypeBuilder();
}
-
- internal ModuleBuilder GetModuleBuilder()
- {
- return GetTypeBuilder().GetModuleBuilder();
- }
#endregion
#region Object Overrides
@@ -181,11 +172,6 @@ namespace System.Reflection.Emit
return m_methodBuilder.DefineParameter(iSequence, attributes, strParamName);
}
- public void SetSymCustomAttribute(String name, byte[] data)
- {
- m_methodBuilder.SetSymCustomAttribute(name, data);
- }
-
public ILGenerator GetILGenerator()
{
if (m_isDefaultConstructor)
@@ -202,16 +188,6 @@ namespace System.Reflection.Emit
return m_methodBuilder.GetILGenerator(streamSize);
}
- public void SetMethodBody(byte[] il, int maxStack, byte[] localSignature, IEnumerable<ExceptionHandler> exceptionHandlers, IEnumerable<int> tokenFixups)
- {
- if (m_isDefaultConstructor)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_DefaultConstructorDefineBody"));
- }
-
- m_methodBuilder.SetMethodBody(il, maxStack, localSignature, exceptionHandlers, tokenFixups);
- }
-
public override CallingConventions CallingConvention
{
get
@@ -227,13 +203,6 @@ namespace System.Reflection.Emit
{
return m_methodBuilder.GetModule();
}
-
-
- [Obsolete("This property has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")] //It always returns null.
- public Type ReturnType
- {
- get { return GetReturnType(); }
- }
// This always returns null. Is that what we want?
internal override Type GetReturnType()
@@ -246,7 +215,6 @@ namespace System.Reflection.Emit
get { return m_methodBuilder.Signature; }
}
- [System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
m_methodBuilder.SetCustomAttribute(con, binaryAttribute);
diff --git a/src/mscorlib/src/System/Reflection/Emit/CustomAttributeBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/CustomAttributeBuilder.cs
index 545657a053..5d08ca08f0 100644
--- a/src/mscorlib/src/System/Reflection/Emit/CustomAttributeBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/CustomAttributeBuilder.cs
@@ -19,16 +19,12 @@ namespace System.Reflection.Emit {
using System.Reflection;
using System.IO;
using System.Text;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Globalization;
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_CustomAttributeBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class CustomAttributeBuilder : _CustomAttributeBuilder
+ public class CustomAttributeBuilder
{
// public constructor to form the custom attribute with constructor and constructor
// parameters.
@@ -556,18 +552,6 @@ namespace System.Reflection.Emit {
}
//*************************************************
- // Upon saving to disk, we need to create the memberRef token for the custom attribute's type
- // first of all. So when we snap the in-memory module for on disk, this token will be there.
- // We also need to enforce the use of MemberRef. Because MemberDef token might move.
- // This function has to be called before we snap the in-memory module for on disk (i.e. Presave on
- // ModuleBuilder.
- //*************************************************
- internal int PrepareCreateCustomAttributeToDisk(ModuleBuilder mod)
- {
- return mod.InternalGetConstructorToken(m_con, true).Token;
- }
-
- //*************************************************
// Call this function with toDisk=1, after on disk module has been snapped.
//*************************************************
internal void CreateCustomAttribute(ModuleBuilder mod, int tkOwner, int tkAttrib, bool toDisk)
diff --git a/src/mscorlib/src/System/Reflection/Emit/DynamicILGenerator.cs b/src/mscorlib/src/System/Reflection/Emit/DynamicILGenerator.cs
index 9e1d82986a..cb2667a104 100644
--- a/src/mscorlib/src/System/Reflection/Emit/DynamicILGenerator.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/DynamicILGenerator.cs
@@ -14,7 +14,6 @@ namespace System.Reflection.Emit
using System.Reflection;
using System.Collections;
using System.Collections.Generic;
- using System.Security.Permissions;
using System.Threading;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
@@ -142,7 +141,6 @@ namespace System.Reflection.Emit
PutInteger4(token);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public override void Emit(OpCode opcode, ConstructorInfo con)
{
if (con == null)
@@ -267,43 +265,6 @@ namespace System.Reflection.Emit
PutInteger4(token);
}
- public override void EmitCalli(OpCode opcode,
- CallingConvention unmanagedCallConv,
- Type returnType,
- Type[] parameterTypes)
- {
- int stackchange = 0;
- int cParams = 0;
- int i;
- SignatureHelper sig;
-
- if (parameterTypes != null)
- cParams = parameterTypes.Length;
-
- sig = SignatureHelper.GetMethodSigHelper(unmanagedCallConv, returnType);
-
- if (parameterTypes != null)
- for (i = 0; i < cParams; i++)
- sig.AddArgument(parameterTypes[i]);
-
- // If there is a non-void return type, push one.
- if (returnType != typeof(void))
- stackchange++;
-
- // Pop off arguments if any.
- if (parameterTypes != null)
- stackchange -= cParams;
-
- // Pop the native function pointer.
- stackchange--;
- UpdateStackSize(OpCodes.Calli, stackchange);
-
- EnsureCapacity(7);
- Emit(OpCodes.Calli);
- int token = GetTokenForSig(sig.GetSignature(true));
- PutInteger4(token);
- }
-
public override void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[] optionalParameterTypes)
{
if (methodInfo == null)
@@ -379,19 +340,20 @@ namespace System.Reflection.Emit
// Exception related generation
//
//
- public override Label BeginExceptionBlock()
+ public override void BeginExceptFilterBlock()
{
- return base.BeginExceptionBlock();
- }
+ // Begins an exception filter block. Emits a branch instruction to the end of the current exception block.
- public override void EndExceptionBlock()
- {
- base.EndExceptionBlock();
- }
+ if (CurrExcStackCount == 0)
+ throw new NotSupportedException(Environment.GetResourceString("Argument_NotInExceptionBlock"));
- public override void BeginExceptFilterBlock()
- {
- throw new NotSupportedException(Environment.GetResourceString("InvalidOperation_NotAllowedInDynamicMethod"));
+ __ExceptionInfo current = CurrExcStack[CurrExcStackCount - 1];
+
+ Label endLabel = current.GetEndLabel();
+ Emit(OpCodes.Leave, endLabel);
+ UpdateStackSize(OpCodes.Nop, 1);
+
+ current.MarkFilterAddr(ILOffset);
}
public override void BeginCatchBlock(Type exceptionType)
@@ -412,6 +374,8 @@ namespace System.Reflection.Emit
}
this.Emit(OpCodes.Endfilter);
+
+ current.MarkCatchAddr(ILOffset, null);
}
else
{
@@ -427,24 +391,14 @@ namespace System.Reflection.Emit
// if this is a catch block the exception will be pushed on the stack and we need to update the stack info
UpdateStackSize(OpCodes.Nop, 1);
- }
-
- current.MarkCatchAddr(ILOffset, exceptionType);
-
- // this is relying on too much implementation details of the base and so it's highly breaking
- // Need to have a more integreted story for exceptions
- current.m_filterAddr[current.m_currentCatch - 1] = GetTokenFor(rtType);
- }
+ current.MarkCatchAddr(ILOffset, exceptionType);
- public override void BeginFaultBlock()
- {
- throw new NotSupportedException(Environment.GetResourceString("InvalidOperation_NotAllowedInDynamicMethod"));
- }
- public override void BeginFinallyBlock()
- {
- base.BeginFinallyBlock();
+ // this is relying on too much implementation details of the base and so it's highly breaking
+ // Need to have a more integrated story for exceptions
+ current.m_filterAddr[current.m_currentCatch - 1] = GetTokenFor(rtType);
+ }
}
//
@@ -520,22 +474,18 @@ namespace System.Reflection.Emit
Type[] parameterTypes,
Type[] optionalParameterTypes)
{
- int cParams;
- int i;
- SignatureHelper sig;
- if (parameterTypes == null)
- cParams = 0;
- else
- cParams = parameterTypes.Length;
- sig = SignatureHelper.GetMethodSigHelper(call, returnType);
- for (i = 0; i < cParams; i++)
- sig.AddArgument(parameterTypes[i]);
+ SignatureHelper sig = SignatureHelper.GetMethodSigHelper(call, returnType);
+ if (parameterTypes != null)
+ {
+ foreach (Type t in parameterTypes)
+ sig.AddArgument(t);
+ }
if (optionalParameterTypes != null && optionalParameterTypes.Length != 0)
{
// add the sentinel
sig.AddSentinel();
- for (i = 0; i < optionalParameterTypes.Length; i++)
- sig.AddArgument(optionalParameterTypes[i]);
+ foreach (Type t in optionalParameterTypes)
+ sig.AddArgument(t);
}
return sig;
}
@@ -811,17 +761,6 @@ namespace System.Reflection.Emit
typeOwner = m_method.m_typeOwner;
-#if FEATURE_COMPRESSEDSTACK
- if (m_method.m_creationContext != null)
- {
- flags |= SecurityControlFlags.HasCreationContext;
- if(m_method.m_creationContext.CanSkipEvaluation)
- {
- flags |= SecurityControlFlags.CanSkipCSEvaluation;
- }
- }
-
-#endif // FEATURE_COMPRESSEDSTACK
securityControlFlags = (int)flags;
@@ -904,12 +843,6 @@ namespace System.Reflection.Emit
internal override String GetStringLiteral(int token) { return m_scope.GetString(token); }
-#if FEATURE_COMPRESSEDSTACK
- internal override CompressedStack GetSecurityContext()
- {
- return m_method.m_creationContext;
- }
-#endif // FEATURE_COMPRESSEDSTACK
internal override void ResolveToken(int token, out IntPtr typeHandle, out IntPtr methodHandle, out IntPtr fieldHandle)
{
@@ -991,8 +924,7 @@ namespace System.Reflection.Emit
}
- [System.Runtime.InteropServices.ComVisible(true)]
- public class DynamicILInfo
+ internal class DynamicILInfo
{
#region Private Data Members
private DynamicMethod m_method;
@@ -1004,18 +936,6 @@ namespace System.Reflection.Emit
private int m_methodSignature;
#endregion
- #region Constructor
- internal DynamicILInfo(DynamicScope scope, DynamicMethod method, byte[] methodSignature)
- {
- m_method = method;
- m_scope = scope;
- m_methodSignature = m_scope.GetTokenFor(methodSignature);
- m_exceptions = EmptyArray<Byte>.Value;
- m_code = EmptyArray<Byte>.Value;
- m_localSignature = EmptyArray<Byte>.Value;
- }
- #endregion
-
#region Internal Methods
internal void GetCallableMethod(RuntimeModule module, DynamicMethod dm)
{
@@ -1042,113 +962,8 @@ namespace System.Reflection.Emit
public DynamicMethod DynamicMethod { get { return m_method; } }
internal DynamicScope DynamicScope { get { return m_scope; } }
- public void SetCode(byte[] code, int maxStackSize)
- {
- m_code = (code != null) ? (byte[])code.Clone() : EmptyArray<Byte>.Value;
- m_maxStackSize = maxStackSize;
- }
-
- [CLSCompliant(false)]
- public unsafe void SetCode(byte* code, int codeSize, int maxStackSize)
- {
- if (codeSize < 0)
- throw new ArgumentOutOfRangeException(nameof(codeSize), Environment.GetResourceString("ArgumentOutOfRange_GenericPositive"));
-
- if (codeSize > 0 && code == null)
- throw new ArgumentNullException(nameof(code));
- Contract.EndContractBlock();
-
- m_code = new byte[codeSize];
- for (int i = 0; i < codeSize; i++)
- {
- m_code[i] = *code;
- code++;
- }
-
- m_maxStackSize = maxStackSize;
- }
-
- public void SetExceptions(byte[] exceptions)
- {
- m_exceptions = (exceptions != null) ? (byte[])exceptions.Clone() : EmptyArray<Byte>.Value;
- }
-
- [CLSCompliant(false)]
- public unsafe void SetExceptions(byte* exceptions, int exceptionsSize)
- {
- if (exceptionsSize < 0)
- throw new ArgumentOutOfRangeException(nameof(exceptionsSize), Environment.GetResourceString("ArgumentOutOfRange_GenericPositive"));
-
- if (exceptionsSize > 0 && exceptions == null)
- throw new ArgumentNullException(nameof(exceptions));
- Contract.EndContractBlock();
-
- m_exceptions = new byte[exceptionsSize];
-
- for (int i = 0; i < exceptionsSize; i++)
- {
- m_exceptions[i] = *exceptions;
- exceptions++;
- }
- }
-
- public void SetLocalSignature(byte[] localSignature)
- {
- m_localSignature = (localSignature != null) ? (byte[])localSignature.Clone() : EmptyArray<Byte>.Value;
- }
-
- [CLSCompliant(false)]
- public unsafe void SetLocalSignature(byte* localSignature, int signatureSize)
- {
- if (signatureSize < 0)
- throw new ArgumentOutOfRangeException(nameof(signatureSize), Environment.GetResourceString("ArgumentOutOfRange_GenericPositive"));
-
- if (signatureSize > 0 && localSignature == null)
- throw new ArgumentNullException(nameof(localSignature));
- Contract.EndContractBlock();
-
- m_localSignature = new byte[signatureSize];
- for (int i = 0; i < signatureSize; i++)
- {
- m_localSignature[i] = *localSignature;
- localSignature++;
- }
- }
- #endregion
-
- #region Public Scope Methods
- public int GetTokenFor(RuntimeMethodHandle method)
- {
- return DynamicScope.GetTokenFor(method);
- }
- public int GetTokenFor(DynamicMethod method)
- {
- return DynamicScope.GetTokenFor(method);
- }
- public int GetTokenFor(RuntimeMethodHandle method, RuntimeTypeHandle contextType)
- {
- return DynamicScope.GetTokenFor(method, contextType);
- }
- public int GetTokenFor(RuntimeFieldHandle field)
- {
- return DynamicScope.GetTokenFor(field);
- }
- public int GetTokenFor(RuntimeFieldHandle field, RuntimeTypeHandle contextType)
- {
- return DynamicScope.GetTokenFor(field, contextType);
- }
- public int GetTokenFor(RuntimeTypeHandle type)
- {
- return DynamicScope.GetTokenFor(type);
- }
- public int GetTokenFor(string literal)
- {
- return DynamicScope.GetTokenFor(literal);
- }
- public int GetTokenFor(byte[] signature)
- {
- return DynamicScope.GetTokenFor(signature);
- }
+#endregion
+#region Public Scope Methods
#endregion
}
diff --git a/src/mscorlib/src/System/Reflection/Emit/DynamicMethod.cs b/src/mscorlib/src/System/Reflection/Emit/DynamicMethod.cs
index 1b8c97de65..f1d99d3c2c 100644
--- a/src/mscorlib/src/System/Reflection/Emit/DynamicMethod.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/DynamicMethod.cs
@@ -11,7 +11,6 @@ namespace System.Reflection.Emit
using CultureInfo = System.Globalization.CultureInfo;
using System.Reflection;
using System.Security;
- using System.Security.Permissions;
using System.Threading;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
@@ -19,7 +18,6 @@ namespace System.Reflection.Emit
using System.Diagnostics.Contracts;
using System.Runtime.InteropServices;
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class DynamicMethod : MethodInfo
{
private RuntimeType[] m_parameterTypes;
@@ -58,9 +56,6 @@ namespace System.Reflection.Emit
// We capture the creation context so that we can do the checks against the same context,
// irrespective of when the method gets compiled. Note that the DynamicMethod does not know when
// it is ready for use since there is not API which indictates that IL generation has completed.
-#if FEATURE_COMPRESSEDSTACK
- internal CompressedStack m_creationContext;
-#endif // FEATURE_COMPRESSEDSTACK
private static volatile InternalModuleBuilder s_anonymouslyHostedDynamicMethodsModule;
private static readonly object s_anonymouslyHostedDynamicMethodsModuleLock = new object();
@@ -274,7 +269,7 @@ namespace System.Reflection.Emit
AssemblyBuilder assembly = AssemblyBuilder.InternalDefineDynamicAssembly(
assemblyName,
AssemblyBuilderAccess.Run,
- null, null, null, null, null,
+ null, null,
ref stackMark,
assemblyAttributes,
SecurityContextSource.CurrentAssembly);
@@ -330,9 +325,6 @@ namespace System.Reflection.Emit
m_restrictedSkipVisibility = true;
}
-#if FEATURE_COMPRESSEDSTACK
- m_creationContext = CompressedStack.Capture();
-#endif // FEATURE_COMPRESSEDSTACK
}
else
{
@@ -401,7 +393,6 @@ namespace System.Reflection.Emit
// Delegate and method creation
//
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed override Delegate CreateDelegate(Type delegateType) {
if (m_restrictedSkipVisibility)
{
@@ -416,7 +407,6 @@ namespace System.Reflection.Emit
return d;
}
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed override Delegate CreateDelegate(Type delegateType, Object target) {
if (m_restrictedSkipVisibility)
{
@@ -594,30 +584,6 @@ namespace System.Reflection.Emit
return null;
}
- public DynamicILInfo GetDynamicILInfo()
- {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-#pragma warning restore 618
-
- if (m_DynamicILInfo != null)
- return m_DynamicILInfo;
-
- return GetDynamicILInfo(new DynamicScope());
- }
-
- internal DynamicILInfo GetDynamicILInfo(DynamicScope scope)
- {
- if (m_DynamicILInfo == null)
- {
- byte[] methodSignature = SignatureHelper.GetMethodSigHelper(
- null, CallingConvention, ReturnType, null, null, m_parameterTypes, null, null).GetSignature(true);
- m_DynamicILInfo = new DynamicILInfo(scope, this, methodSignature);
- }
-
- return m_DynamicILInfo;
- }
-
public ILGenerator GetILGenerator() {
return GetILGenerator(64);
}
diff --git a/src/mscorlib/src/System/Reflection/Emit/EnumBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/EnumBuilder.cs
index 82dc2828ca..96564d537b 100644
--- a/src/mscorlib/src/System/Reflection/Emit/EnumBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/EnumBuilder.cs
@@ -20,13 +20,8 @@ namespace System.Reflection.Emit {
using System.Reflection;
using System.Runtime.InteropServices;
using CultureInfo = System.Globalization.CultureInfo;
- using System.Security.Permissions;
-
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_EnumBuilder))]
-[System.Runtime.InteropServices.ComVisible(true)]
- sealed public class EnumBuilder : TypeInfo, _EnumBuilder
+ sealed public class EnumBuilder : TypeInfo
{
public override bool IsAssignableFrom(System.Reflection.TypeInfo typeInfo){
if(typeInfo==null) return false;
@@ -137,7 +132,6 @@ namespace System.Reflection.Emit {
types, modifiers);
}
-[System.Runtime.InteropServices.ComVisible(true)]
public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
{
return m_typeBuilder.GetConstructors(bindingAttr);
@@ -218,7 +212,6 @@ namespace System.Reflection.Emit {
return m_typeBuilder.GetMembers(bindingAttr);
}
-[System.Runtime.InteropServices.ComVisible(true)]
public override InterfaceMapping GetInterfaceMap(Type interfaceType)
{
return m_typeBuilder.GetInterfaceMap(interfaceType);
@@ -312,7 +305,6 @@ namespace System.Reflection.Emit {
// Use this function if client decides to form the custom attribute blob themselves
-[System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
m_typeBuilder.SetCustomAttribute(con, binaryAttribute);
@@ -341,9 +333,6 @@ namespace System.Reflection.Emit {
{
return m_typeBuilder.IsDefined(attributeType, inherit);
}
-
-
- internal int MetadataTokenInternal { get { return m_typeBuilder.MetadataTokenInternal; } }
/*****************************************************
*
diff --git a/src/mscorlib/src/System/Reflection/Emit/EventBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/EventBuilder.cs
index 449b20824c..34c76b93d1 100644
--- a/src/mscorlib/src/System/Reflection/Emit/EventBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/EventBuilder.cs
@@ -16,7 +16,6 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Diagnostics.Contracts;
@@ -24,10 +23,7 @@ namespace System.Reflection.Emit {
// A EventBuilder is always associated with a TypeBuilder. The TypeBuilder.DefineEvent
// method will return a new EventBuilder to a client.
//
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_EventBuilder))]
-[System.Runtime.InteropServices.ComVisible(true)]
- public sealed class EventBuilder : _EventBuilder
+ public sealed class EventBuilder
{
// Make a private constructor so these cannot be constructed externally.
@@ -95,7 +91,6 @@ namespace System.Reflection.Emit {
// Use this function if client decides to form the custom attribute blob themselves
-[System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
if (con == null)
diff --git a/src/mscorlib/src/System/Reflection/Emit/EventToken.cs b/src/mscorlib/src/System/Reflection/Emit/EventToken.cs
index 0642cec822..8ffdce9732 100644
--- a/src/mscorlib/src/System/Reflection/Emit/EventToken.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/EventToken.cs
@@ -16,9 +16,7 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
- using System.Security.Permissions;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct EventToken
{
public static readonly EventToken Empty = new EventToken();
diff --git a/src/mscorlib/src/System/Reflection/Emit/FieldBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/FieldBuilder.cs
index 595d60ada0..5953b67173 100644
--- a/src/mscorlib/src/System/Reflection/Emit/FieldBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/FieldBuilder.cs
@@ -10,13 +10,9 @@ namespace System.Reflection.Emit
using System;
using CultureInfo = System.Globalization.CultureInfo;
using System.Reflection;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_FieldBuilder))]
-[System.Runtime.InteropServices.ComVisible(true)]
- public sealed class FieldBuilder : FieldInfo, _FieldBuilder
+ public sealed class FieldBuilder : FieldInfo
{
#region Private Data Members
private int m_fieldTok;
@@ -71,8 +67,6 @@ namespace System.Reflection.Emit
{
ModuleBuilder.SetFieldRVAContent(m_typeBuilder.GetModuleBuilder().GetNativeHandle(), m_tkField.Token, data, size);
}
-
- internal TypeBuilder GetTypeBuilder() { return m_typeBuilder; }
#endregion
#region MemberInfo Overrides
@@ -185,20 +179,6 @@ namespace System.Reflection.Emit
TypeBuilder.SetFieldLayoutOffset(m_typeBuilder.GetModuleBuilder().GetNativeHandle(), GetToken().Token, iOffset);
}
- [Obsolete("An alternate API is available: Emit the MarshalAs custom attribute instead. http://go.microsoft.com/fwlink/?linkid=14202")]
- public void SetMarshal(UnmanagedMarshal unmanagedMarshal)
- {
- if (unmanagedMarshal == null)
- throw new ArgumentNullException(nameof(unmanagedMarshal));
- Contract.EndContractBlock();
-
- m_typeBuilder.ThrowIfCreated();
-
- byte[] ubMarshal = unmanagedMarshal.InternalGetBytes();
-
- TypeBuilder.SetFieldMarshal(m_typeBuilder.GetModuleBuilder().GetNativeHandle(), GetToken().Token, ubMarshal, ubMarshal.Length);
- }
-
public void SetConstant(Object defaultValue)
{
m_typeBuilder.ThrowIfCreated();
@@ -207,7 +187,6 @@ namespace System.Reflection.Emit
}
-[System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
if (con == null)
diff --git a/src/mscorlib/src/System/Reflection/Emit/FieldToken.cs b/src/mscorlib/src/System/Reflection/Emit/FieldToken.cs
index 42fd684e7c..add428f96e 100644
--- a/src/mscorlib/src/System/Reflection/Emit/FieldToken.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/FieldToken.cs
@@ -16,14 +16,12 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
- using System.Security.Permissions;
// The FieldToken class is an opaque representation of the Token returned
// by the Metadata to represent the field. FieldTokens are generated by
// Module.GetFieldToken(). There are no meaningful accessors on this class,
// but it can be passed to ILGenerator which understands it's internals.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct FieldToken
{
public static readonly FieldToken Empty = new FieldToken();
diff --git a/src/mscorlib/src/System/Reflection/Emit/FlowControl.cs b/src/mscorlib/src/System/Reflection/Emit/FlowControl.cs
index 31bb564cf4..9e528b2551 100644
--- a/src/mscorlib/src/System/Reflection/Emit/FlowControl.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/FlowControl.cs
@@ -16,7 +16,6 @@ namespace System.Reflection.Emit {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum FlowControl
{
diff --git a/src/mscorlib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs
index 6987ea139d..894f57d49c 100644
--- a/src/mscorlib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs
@@ -13,7 +13,6 @@ namespace System.Reflection.Emit
using System.Globalization;
using System.Diagnostics.Contracts;
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class GenericTypeParameterBuilder: TypeInfo
{
public override bool IsAssignableFrom(System.Reflection.TypeInfo typeInfo){
@@ -118,7 +117,6 @@ namespace System.Reflection.Emit
protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) { throw new NotSupportedException(); }
-[System.Runtime.InteropServices.ComVisible(true)]
public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr) { throw new NotSupportedException(); }
protected override MethodInfo GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) { throw new NotSupportedException(); }
@@ -147,7 +145,6 @@ namespace System.Reflection.Emit
public override MemberInfo[] GetMember(String name, MemberTypes type, BindingFlags bindingAttr) { throw new NotSupportedException(); }
-[System.Runtime.InteropServices.ComVisible(true)]
public override InterfaceMapping GetInterfaceMap(Type interfaceType) { throw new NotSupportedException(); }
public override EventInfo[] GetEvents(BindingFlags bindingAttr) { throw new NotSupportedException(); }
@@ -198,7 +195,6 @@ namespace System.Reflection.Emit
public override bool IsAssignableFrom(Type c) { throw new NotSupportedException(); }
- [System.Runtime.InteropServices.ComVisible(true)]
[Pure]
public override bool IsSubclassOf(Type c) { throw new NotSupportedException(); }
#endregion
@@ -228,7 +224,6 @@ namespace System.Reflection.Emit
m_type.SetParent(baseTypeConstraint);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public void SetInterfaceConstraints(params Type[] interfaceConstraints)
{
m_type.CheckContext(interfaceConstraints);
diff --git a/src/mscorlib/src/System/Reflection/Emit/ILGenerator.cs b/src/mscorlib/src/System/Reflection/Emit/ILGenerator.cs
index ed0763bfda..2cee63ff2e 100644
--- a/src/mscorlib/src/System/Reflection/Emit/ILGenerator.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/ILGenerator.cs
@@ -10,15 +10,11 @@ namespace System.Reflection.Emit
using System.Diagnostics.SymbolStore;
using System.Runtime.InteropServices;
using System.Reflection;
- using System.Security.Permissions;
using System.Globalization;
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_ILGenerator))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class ILGenerator : _ILGenerator
+ public class ILGenerator
{
#region Const Members
private const int defaultSize = 16;
@@ -388,20 +384,17 @@ namespace System.Reflection.Emit
// Just a cheap insertion sort. We don't expect many exceptions (<10), where InsertionSort beats QuickSort.
// If we have more exceptions than this in real life, we should consider moving to a QuickSort.
- int least;
- __ExceptionInfo temp;
- int length = exceptions.Length;
- for (int i =0; i < length; i++)
+ for (int i = 0; i < exceptions.Length; i++)
{
- least = i;
- for (int j =i + 1; j < length; j++)
+ int least = i;
+ for (int j = i + 1; j < exceptions.Length; j++)
{
if (exceptions[least].IsInner(exceptions[j]))
{
least = j;
}
}
- temp = exceptions[i];
+ __ExceptionInfo temp = exceptions[i];
exceptions[i] = exceptions[least];
exceptions[least] = temp;
}
@@ -543,51 +536,6 @@ namespace System.Reflection.Emit
PutInteger4(modBuilder.GetSignatureToken(sig).Token);
}
- public virtual void EmitCalli(OpCode opcode, CallingConvention unmanagedCallConv, Type returnType, Type[] parameterTypes)
- {
- int stackchange = 0;
- int cParams = 0;
- int i;
- SignatureHelper sig;
-
- ModuleBuilder modBuilder = (ModuleBuilder) m_methodBuilder.Module;
-
- if (parameterTypes != null)
- {
- cParams = parameterTypes.Length;
- }
-
- sig = SignatureHelper.GetMethodSigHelper(
- modBuilder,
- unmanagedCallConv,
- returnType);
-
- if (parameterTypes != null)
- {
- for (i = 0; i < cParams; i++)
- {
- sig.AddArgument(parameterTypes[i]);
- }
- }
-
- // If there is a non-void return type, push one.
- if (returnType != typeof(void))
- stackchange++;
-
- // Pop off arguments if any.
- if (parameterTypes != null)
- stackchange -= cParams;
-
- // Pop the native function pointer.
- stackchange--;
- UpdateStackSize(OpCodes.Calli, stackchange);
-
- EnsureCapacity(7);
- Emit(OpCodes.Calli);
- RecordTokenFixup();
- PutInteger4(modBuilder.GetSignatureToken(sig).Token);
- }
-
public virtual void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[] optionalParameterTypes)
{
if (methodInfo == null)
@@ -660,7 +608,6 @@ namespace System.Reflection.Emit
PutInteger4(tempVal);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public virtual void Emit(OpCode opcode, ConstructorInfo con)
{
if (con == null)
@@ -1160,13 +1107,9 @@ namespace System.Reflection.Emit
private static Type GetConsoleType()
{
-#if FEATURE_LEGACYSURFACE
- return typeof(Console);
-#else
return Type.GetType(
"System.Console, System.Console, Version=4.0.0.0, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
throwOnError: true);
-#endif
}
public virtual void EmitWriteLine(String value)
diff --git a/src/mscorlib/src/System/Reflection/Emit/ISymWrapperCore.cs b/src/mscorlib/src/System/Reflection/Emit/ISymWrapperCore.cs
index a737895829..e6f4622f0e 100644
--- a/src/mscorlib/src/System/Reflection/Emit/ISymWrapperCore.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/ISymWrapperCore.cs
@@ -166,23 +166,6 @@ namespace System.Reflection.Emit
private SymWriter()
{
}
-
- //=========================================================================================
- // Public interface methods start here.
- //=========================================================================================
-
-
- //------------------------------------------------------------------------------
- // Initialize() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.Initialize(IntPtr emitter, String filename, bool fFullBuild)
- {
- int hr = m_vtable.Initialize(m_pWriter, emitter, filename, (IntPtr)0, fFullBuild);
- if (hr < 0)
- {
- throw Marshal.GetExceptionForHR(hr);
- }
- }
//------------------------------------------------------------------------------
// DefineDocument() wrapper
@@ -207,18 +190,6 @@ namespace System.Reflection.Emit
}
//------------------------------------------------------------------------------
- // SetUserEntryPoint() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.SetUserEntryPoint(SymbolToken entryMethod)
- {
- int hr = m_vtable.SetUserEntryPoint(m_pWriter, entryMethod.GetToken());
- if (hr < 0)
- {
- throw Marshal.GetExceptionForHR(hr);
- }
- }
-
- //------------------------------------------------------------------------------
// OpenMethod() wrapper
//------------------------------------------------------------------------------
void ISymbolWriter.OpenMethod(SymbolToken method)
@@ -326,18 +297,6 @@ namespace System.Reflection.Emit
throw Marshal.GetExceptionForHR(hr);
}
}
-
- //------------------------------------------------------------------------------
- // SetScopeRange() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.SetScopeRange(int scopeID, int startOffset, int endOffset)
- {
- int hr = m_vtable.SetScopeRange(m_pWriter, scopeID, startOffset, endOffset);
- if (hr < 0)
- {
- throw Marshal.GetExceptionForHR(hr);
- }
- }
//------------------------------------------------------------------------------
// DefineLocalVariable() wrapper
@@ -368,62 +327,7 @@ namespace System.Reflection.Emit
throw Marshal.GetExceptionForHR(hr);
}
}
-
- //------------------------------------------------------------------------------
- // DefineParameter() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.DefineParameter(String name,
- ParameterAttributes attributes,
- int sequence,
- SymAddressKind addrKind,
- int addr1,
- int addr2,
- int addr3)
- {
- throw new NotSupportedException(); // Intentionally not supported to match desktop CLR
- }
-
- //------------------------------------------------------------------------------
- // DefineField() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.DefineField(SymbolToken parent,
- String name,
- FieldAttributes attributes,
- byte[] signature,
- SymAddressKind addrKind,
- int addr1,
- int addr2,
- int addr3)
- {
- throw new NotSupportedException(); // Intentionally not supported to match desktop CLR
- }
-
- //------------------------------------------------------------------------------
- // DefineGlobalVariable() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.DefineGlobalVariable(String name,
- FieldAttributes attributes,
- byte[] signature,
- SymAddressKind addrKind,
- int addr1,
- int addr2,
- int addr3)
- {
- throw new NotSupportedException(); // Intentionally not supported to match desktop CLR
- }
-
- //------------------------------------------------------------------------------
- // Close() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.Close()
- {
- int hr = m_vtable.Close(m_pWriter);
- if (hr < 0)
- {
- throw Marshal.GetExceptionForHR(hr);
- }
- }
-
+
//------------------------------------------------------------------------------
// SetSymAttribute() wrapper
//------------------------------------------------------------------------------
@@ -437,30 +341,6 @@ namespace System.Reflection.Emit
}
//------------------------------------------------------------------------------
- // OpenNamespace() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.OpenNamespace(String name)
- {
- int hr = m_vtable.OpenNamespace(m_pWriter, name);
- if (hr < 0)
- {
- throw Marshal.GetExceptionForHR(hr);
- }
- }
-
- //------------------------------------------------------------------------------
- // CloseNamespace() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.CloseNamespace()
- {
- int hr = m_vtable.CloseNamespace(m_pWriter);
- if (hr < 0)
- {
- throw Marshal.GetExceptionForHR(hr);
- }
- }
-
- //------------------------------------------------------------------------------
// UsingNamespace() wrapper
//------------------------------------------------------------------------------
void ISymbolWriter.UsingNamespace(String name)
@@ -471,27 +351,6 @@ namespace System.Reflection.Emit
throw Marshal.GetExceptionForHR(hr);
}
}
-
- //------------------------------------------------------------------------------
- // SetMethodSourceRange() wrapper
- //------------------------------------------------------------------------------
- void ISymbolWriter.SetMethodSourceRange(ISymbolDocumentWriter startDoc,
- int startLine,
- int startColumn,
- ISymbolDocumentWriter endDoc,
- int endLine,
- int endColumn)
- {
- throw new NotSupportedException(); // Intentionally not supported to match desktop CLR
- }
-
- //------------------------------------------------------------------------------
- // SetUnderlyingWriter() wrapper.
- //------------------------------------------------------------------------------
- void ISymbolWriter.SetUnderlyingWriter(IntPtr ppUnderlyingWriter)
- {
- throw new NotSupportedException(); // Intentionally not supported on Telesto as it's a very unsafe api
- }
//------------------------------------------------------------------------------
// InternalSetUnderlyingWriter() wrapper.
diff --git a/src/mscorlib/src/System/Reflection/Emit/Label.cs b/src/mscorlib/src/System/Reflection/Emit/Label.cs
index dd248b62fe..c7b987ff10 100644
--- a/src/mscorlib/src/System/Reflection/Emit/Label.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/Label.cs
@@ -16,7 +16,6 @@
namespace System.Reflection.Emit {
using System;
using System.Reflection;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
// The Label class is an opaque representation of a label used by the
@@ -26,7 +25,6 @@ namespace System.Reflection.Emit {
// Labels are created by using ILGenerator.CreateLabel and their position is set
// by using ILGenerator.MarkLabel.
[Serializable]
- [ComVisible(true)]
public struct Label {
internal int m_label;
diff --git a/src/mscorlib/src/System/Reflection/Emit/LocalBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/LocalBuilder.cs
index a34d5ebe5d..fe4c33160a 100644
--- a/src/mscorlib/src/System/Reflection/Emit/LocalBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/LocalBuilder.cs
@@ -4,15 +4,11 @@
using System;
using System.Reflection;
-using System.Security.Permissions;
using System.Runtime.InteropServices;
namespace System.Reflection.Emit
{
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_LocalBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class LocalBuilder : LocalVariableInfo, _LocalBuilder
+ public sealed class LocalBuilder : LocalVariableInfo
{
#region Private Data Members
private int m_localIndex;
diff --git a/src/mscorlib/src/System/Reflection/Emit/MethodBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/MethodBuilder.cs
index 654e166a05..17c8ce074d 100644
--- a/src/mscorlib/src/System/Reflection/Emit/MethodBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/MethodBuilder.cs
@@ -14,15 +14,11 @@ namespace System.Reflection.Emit
using System.Security;
using System.Collections;
using System.Collections.Generic;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_MethodBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class MethodBuilder : MethodInfo, _MethodBuilder
+ public sealed class MethodBuilder : MethodInfo
{
#region Private Data Members
// Identity
@@ -67,11 +63,6 @@ namespace System.Reflection.Emit
#endregion
#region Constructor
- internal MethodBuilder(String name, MethodAttributes attributes, CallingConventions callingConvention,
- Type returnType, Type[] parameterTypes, ModuleBuilder mod, TypeBuilder type, bool bIsGlobalMethod)
- {
- Init(name, attributes, callingConvention, returnType, null, null, parameterTypes, null, null, mod, type, bIsGlobalMethod);
- }
internal MethodBuilder(String name, MethodAttributes attributes, CallingConventions callingConvention,
Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers,
@@ -371,11 +362,6 @@ namespace System.Reflection.Emit
}
}
- internal void SetToken(MethodToken token)
- {
- m_tkMethod = token;
- }
-
internal byte[] GetBody()
{
// Returns the il bytes of this method.
@@ -851,199 +837,13 @@ namespace System.Reflection.Emit
return new ParameterBuilder(this, position, attributes, strParamName);
}
- [Obsolete("An alternate API is available: Emit the MarshalAs custom attribute instead. http://go.microsoft.com/fwlink/?linkid=14202")]
- public void SetMarshal(UnmanagedMarshal unmanagedMarshal)
- {
- ThrowIfGeneric ();
-
- // set Marshal info for the return type
-
- m_containingType.ThrowIfCreated();
-
- if (m_retParam == null)
- {
- m_retParam = new ParameterBuilder(this, 0, 0, null);
- }
-
- m_retParam.SetMarshal(unmanagedMarshal);
- }
-
private List<SymCustomAttr> m_symCustomAttrs;
private struct SymCustomAttr
{
- public SymCustomAttr(String name, byte[] data)
- {
- m_name = name;
- m_data = data;
- }
public String m_name;
public byte[] m_data;
}
- public void SetSymCustomAttribute(String name, byte[] data)
- {
- // Note that this API is rarely used. Support for custom attributes in PDB files was added in
- // Whidbey and as of 8/2007 the only known user is the C# compiler. There seems to be little
- // value to this for Reflection.Emit users since they can always use metadata custom attributes.
- // Some versions of the symbol writer used in the CLR will ignore these entirely. This API has
- // been removed from the Silverlight API surface area, but we should also consider removing it
- // from future desktop product versions as well.
-
- ThrowIfGeneric ();
-
- // This is different from CustomAttribute. This is stored into the SymWriter.
- m_containingType.ThrowIfCreated();
-
- ModuleBuilder dynMod = (ModuleBuilder) m_module;
- if ( dynMod.GetSymWriter() == null)
- {
- // Cannot SetSymCustomAttribute when it is not a debug module
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NotADebugModule"));
- }
-
- if (m_symCustomAttrs == null)
- m_symCustomAttrs = new List<SymCustomAttr>();
-
- m_symCustomAttrs.Add(new SymCustomAttr(name, data));
- }
-
- public void SetMethodBody(byte[] il, int maxStack, byte[] localSignature, IEnumerable<ExceptionHandler> exceptionHandlers, IEnumerable<int> tokenFixups)
- {
- if (il == null)
- {
- throw new ArgumentNullException(nameof(il), Environment.GetResourceString("ArgumentNull_Array"));
- }
- if (maxStack < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(maxStack), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- }
- Contract.EndContractBlock();
-
- if (m_bIsBaked)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_MethodBaked"));
- }
-
- m_containingType.ThrowIfCreated();
- ThrowIfGeneric();
-
- byte[] newLocalSignature = null;
- ExceptionHandler[] newHandlers = null;
- int[] newTokenFixups = null;
-
- byte[] newIL = (byte[])il.Clone();
-
- if (localSignature != null)
- {
- newLocalSignature = (byte[])localSignature.Clone();
- }
-
- if (exceptionHandlers != null)
- {
- newHandlers = ToArray(exceptionHandlers);
- CheckExceptionHandlerRanges(newHandlers, newIL.Length);
-
- // Note: Fixup entries for type tokens stored in ExceptionHandlers are added by the method body emitter.
- }
-
- if (tokenFixups != null)
- {
- newTokenFixups = ToArray(tokenFixups);
- int maxTokenOffset = newIL.Length - 4;
-
- for (int i = 0; i < newTokenFixups.Length; i++)
- {
- // Check that fixups are within the range of this method's IL, otherwise some random memory might get "fixed up".
- if (newTokenFixups[i] < 0 || newTokenFixups[i] > maxTokenOffset)
- {
- throw new ArgumentOutOfRangeException("tokenFixups[" + i + "]", Environment.GetResourceString("ArgumentOutOfRange_Range", 0, maxTokenOffset));
- }
- }
- }
-
- m_ubBody = newIL;
- m_localSignature = newLocalSignature;
- m_exceptions = newHandlers;
- m_mdMethodFixups = newTokenFixups;
- m_maxStack = maxStack;
-
- // discard IL generator, all information stored in it is now irrelevant
- m_ilGenerator = null;
- m_bIsBaked = true;
- }
-
- private static T[] ToArray<T>(IEnumerable<T> sequence)
- {
- T[] array = sequence as T[];
- if (array != null)
- {
- return (T[])array.Clone();
- }
-
- return new List<T>(sequence).ToArray();
- }
-
- private static void CheckExceptionHandlerRanges(ExceptionHandler[] exceptionHandlers, int maxOffset)
- {
- // Basic checks that the handler ranges are within the method body (ranges are end-exclusive).
- // Doesn't verify that the ranges are otherwise correct - it is very well possible to emit invalid IL.
- for (int i = 0; i < exceptionHandlers.Length; i++)
- {
- var handler = exceptionHandlers[i];
- if (handler.m_filterOffset > maxOffset || handler.m_tryEndOffset > maxOffset || handler.m_handlerEndOffset > maxOffset)
- {
- throw new ArgumentOutOfRangeException("exceptionHandlers[" + i + "]", Environment.GetResourceString("ArgumentOutOfRange_Range", 0, maxOffset));
- }
-
- // Type token might be 0 if the ExceptionHandler was created via a default constructor.
- // Other tokens migth also be invalid. We only check nil tokens as the implementation (SectEH_Emit in corhlpr.cpp) requires it,
- // and we can't check for valid tokens until the module is baked.
- if (handler.Kind == ExceptionHandlingClauseOptions.Clause && handler.ExceptionTypeToken == 0)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidTypeToken", handler.ExceptionTypeToken), "exceptionHandlers[" + i + "]");
- }
- }
- }
-
- /// <summary>
- /// Obsolete.
- /// </summary>
- public void CreateMethodBody(byte[] il, int count)
- {
- ThrowIfGeneric();
-
- // Note that when user calls this function, there are a few information that client is
- // not able to supply: local signature, exception handlers, max stack size, a list of Token fixup, a list of RVA fixup
-
- if (m_bIsBaked)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_MethodBaked"));
- }
-
- m_containingType.ThrowIfCreated();
-
- if (il != null && (count < 0 || count > il.Length))
- {
- throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- }
-
- if (il == null)
- {
- m_ubBody = null;
- return;
- }
-
- m_ubBody = new byte[count];
- Buffer.BlockCopy(il, 0, m_ubBody, 0, count);
-
- m_localSignature = null;
- m_exceptions = null;
- m_mdMethodFixups = null;
- m_maxStack = DefaultMaxStack;
-
- m_bIsBaked = true;
- }
-
public void SetImplementationFlags(MethodImplAttributes attributes)
{
ThrowIfGeneric ();
@@ -1113,7 +913,6 @@ namespace System.Reflection.Emit
}
-[System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
if (con == null)
@@ -1314,8 +1113,7 @@ namespace System.Reflection.Emit
/// Describes exception handler in a method body.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
- [ComVisible(false)]
- public struct ExceptionHandler : IEquatable<ExceptionHandler>
+ internal struct ExceptionHandler : IEquatable<ExceptionHandler>
{
// Keep in sync with unmanged structure.
internal readonly int m_exceptionClass;
@@ -1326,118 +1124,7 @@ namespace System.Reflection.Emit
internal readonly int m_handlerEndOffset;
internal readonly ExceptionHandlingClauseOptions m_kind;
- public int ExceptionTypeToken
- {
- get { return m_exceptionClass; }
- }
-
- public int TryOffset
- {
- get { return m_tryStartOffset; }
- }
-
- public int TryLength
- {
- get { return m_tryEndOffset - m_tryStartOffset; }
- }
-
- public int FilterOffset
- {
- get { return m_filterOffset; }
- }
-
- public int HandlerOffset
- {
- get { return m_handlerStartOffset; }
- }
-
- public int HandlerLength
- {
- get { return m_handlerEndOffset - m_handlerStartOffset; }
- }
-
- public ExceptionHandlingClauseOptions Kind
- {
- get { return m_kind; }
- }
-
- #region Constructors
-
- /// <summary>
- /// Creates a description of an exception handler.
- /// </summary>
- /// <param name="tryOffset">The offset of the first instruction protected by this handler.</param>
- /// <param name="tryLength">The number of bytes protected by this handler.</param>
- /// <param name="filterOffset">The filter code begins at the specified offset and ends at the first instruction of the handler block. Specify 0 if not applicable (this is not a filter handler).</param>
- /// <param name="handlerOffset">The offset of the first instruction of this handler.</param>
- /// <param name="handlerLength">The number of bytes of the handler.</param>
- /// <param name="kind">The kind of handler, the handler might be a catch handler, filter handler, fault handler, or finally handler.</param>
- /// <param name="exceptionTypeToken">The token of the exception type handled by this handler. Specify 0 if not applicable (this is finally handler).</param>
- /// <exception cref="ArgumentOutOfRangeException">
- /// Some of the instruction offset is negative,
- /// the end offset of specified range is less than its start offset,
- /// or <paramref name="kind"/> has an invalid value.
- /// </exception>
- public ExceptionHandler(int tryOffset, int tryLength, int filterOffset, int handlerOffset, int handlerLength,
- ExceptionHandlingClauseOptions kind, int exceptionTypeToken)
- {
- if (tryOffset < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(tryOffset), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- }
-
- if (tryLength < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(tryLength), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- }
-
- if (filterOffset < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(filterOffset), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- }
-
- if (handlerOffset < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(handlerOffset), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- }
-
- if (handlerLength < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(handlerLength), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- }
-
- if ((long)tryOffset + tryLength > Int32.MaxValue)
- {
- throw new ArgumentOutOfRangeException(nameof(tryLength), Environment.GetResourceString("ArgumentOutOfRange_Range", 0, Int32.MaxValue - tryOffset));
- }
-
- if ((long)handlerOffset + handlerLength > Int32.MaxValue)
- {
- throw new ArgumentOutOfRangeException(nameof(handlerLength), Environment.GetResourceString("ArgumentOutOfRange_Range", 0, Int32.MaxValue - handlerOffset));
- }
-
- // Other tokens migth also be invalid. We only check nil tokens as the implementation (SectEH_Emit in corhlpr.cpp) requires it,
- // and we can't check for valid tokens until the module is baked.
- if (kind == ExceptionHandlingClauseOptions.Clause && (exceptionTypeToken & 0x00FFFFFF) == 0)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidTypeToken", exceptionTypeToken), nameof(exceptionTypeToken));
- }
-
- Contract.EndContractBlock();
-
- if (!IsValidKind(kind))
- {
- throw new ArgumentOutOfRangeException(nameof(kind), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
- }
-
- m_tryStartOffset = tryOffset;
- m_tryEndOffset = tryOffset + tryLength;
- m_filterOffset = filterOffset;
- m_handlerStartOffset = handlerOffset;
- m_handlerEndOffset = handlerOffset + handlerLength;
- m_kind = kind;
- m_exceptionClass = exceptionTypeToken;
- }
+#region Constructors
internal ExceptionHandler(int tryStartOffset, int tryEndOffset, int filterOffset, int handlerStartOffset, int handlerEndOffset,
int kind, int exceptionTypeToken)
diff --git a/src/mscorlib/src/System/Reflection/Emit/MethodBuilderInstantiation.cs b/src/mscorlib/src/System/Reflection/Emit/MethodBuilderInstantiation.cs
index 5b69b6e607..57ad1665c0 100644
--- a/src/mscorlib/src/System/Reflection/Emit/MethodBuilderInstantiation.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/MethodBuilderInstantiation.cs
@@ -53,7 +53,6 @@ namespace System.Reflection.Emit
public override Object[] GetCustomAttributes(Type attributeType, bool inherit) { return m_method.GetCustomAttributes(attributeType, inherit); }
public override bool IsDefined(Type attributeType, bool inherit) { return m_method.IsDefined(attributeType, inherit); }
public override Module Module { get { return m_method.Module; } }
- public new Type GetType() { return base.GetType(); }
#endregion
#region MethodBase Members
diff --git a/src/mscorlib/src/System/Reflection/Emit/MethodToken.cs b/src/mscorlib/src/System/Reflection/Emit/MethodToken.cs
index cc28e173d7..76b7279f30 100644
--- a/src/mscorlib/src/System/Reflection/Emit/MethodToken.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/MethodToken.cs
@@ -16,10 +16,8 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
- using System.Security.Permissions;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct MethodToken
{
public static readonly MethodToken Empty = new MethodToken();
diff --git a/src/mscorlib/src/System/Reflection/Emit/ModuleBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/ModuleBuilder.cs
index 6884f50b0e..30e6382550 100644
--- a/src/mscorlib/src/System/Reflection/Emit/ModuleBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/ModuleBuilder.cs
@@ -15,7 +15,6 @@ namespace System.Reflection.Emit
using System.IO;
using System.Resources;
using System.Security;
- using System.Security.Permissions;
using System.Runtime.Serialization;
using System.Text;
using System.Threading;
@@ -50,10 +49,7 @@ namespace System.Reflection.Emit
}
// deliberately not [serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_ModuleBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class ModuleBuilder : Module, _ModuleBuilder
+ public class ModuleBuilder : Module
{
#region FCalls
@@ -248,61 +244,8 @@ namespace System.Reflection.Emit
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- private extern static void PreSavePEFile(RuntimeModule module, int portableExecutableKind, int imageFileMachine);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void SavePEFile(RuntimeModule module, String fileName, int entryPoint, int isExe, bool isManifestFile);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void AddResource(
- RuntimeModule module, String strName,
- byte[] resBytes, int resByteCount, int tkFile, int attribute,
- int portableExecutableKind, int imageFileMachine);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void SetModuleName(RuntimeModule module, String strModuleName);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
internal extern static void SetFieldRVAContent(RuntimeModule module, int fdToken, byte[] data, int length);
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void DefineNativeResourceFile(RuntimeModule module,
- String strFilename,
- int portableExecutableKind,
- int ImageFileMachine);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void DefineNativeResourceBytes(RuntimeModule module,
- byte[] pbResource, int cbResource,
- int portableExecutableKind,
- int imageFileMachine);
-
- internal void DefineNativeResource(PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
- {
- string strResourceFileName = m_moduleData.m_strResourceFileName;
- byte[] resourceBytes = m_moduleData.m_resourceBytes;
-
- if (strResourceFileName != null)
- {
- DefineNativeResourceFile(GetNativeHandle(),
- strResourceFileName,
- (int)portableExecutableKind, (int)imageFileMachine);
- }
- else
- if (resourceBytes != null)
- {
- DefineNativeResourceBytes(GetNativeHandle(),
- resourceBytes, resourceBytes.Length,
- (int)portableExecutableKind, (int)imageFileMachine);
- }
- }
-
#endregion
#region Internal Members
@@ -404,12 +347,11 @@ namespace System.Reflection.Emit
if (parameters == null)
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidConstructorInfo"));
- int count = parameters.Length;
- Type[] parameterTypes = new Type[count];
- Type[][] requiredCustomModifiers = new Type[count][];
- Type[][] optionalCustomModifiers = new Type[count][];
+ Type[] parameterTypes = new Type[parameters.Length];
+ Type[][] requiredCustomModifiers = new Type[parameters.Length][];
+ Type[][] optionalCustomModifiers = new Type[parameters.Length][];
- for (int i = 0; i < count; i++)
+ for (int i = 0; i < parameters.Length; i++)
{
if (parameters[i] == null)
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidConstructorInfo"));
@@ -437,17 +379,6 @@ namespace System.Reflection.Emit
m_TypeBuilderDict = new Dictionary<string, Type>();
}
- // This is a method for changing module and file name of the manifest module (created by default for
- // each assembly).
- internal void ModifyModuleName(string name)
- {
- // Reset the names in the managed ModuleBuilderData
- m_moduleData.ModifyModuleName(name);
-
- // Reset the name in the underlying metadata
- ModuleBuilder.SetModuleName(GetNativeHandle(), name);
- }
-
internal void SetSymWriter(ISymbolWriter writer)
{
m_iSymWriter = writer;
@@ -603,12 +534,14 @@ namespace System.Reflection.Emit
internal SignatureHelper GetMemberRefSignature(CallingConventions call, Type returnType,
Type[] parameterTypes, IEnumerable<Type> optionalParameterTypes, int cGenericParameters)
{
- int cParams = (parameterTypes == null) ? 0 : parameterTypes.Length;
SignatureHelper sig = SignatureHelper.GetMethodSigHelper(this, call, returnType, cGenericParameters);
- for (int i = 0; i < cParams; i++)
+ if (parameterTypes != null)
{
- sig.AddArgument(parameterTypes[i]);
+ foreach (Type t in parameterTypes)
+ {
+ sig.AddArgument(t);
+ }
}
if (optionalParameterTypes != null) {
@@ -699,19 +632,16 @@ namespace System.Reflection.Emit
return typeList;
}
- [System.Runtime.InteropServices.ComVisible(true)]
public override Type GetType(String className)
{
return GetType(className, false, false);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public override Type GetType(String className, bool ignoreCase)
{
return GetType(className, false, ignoreCase);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public override Type GetType(String className, bool throwOnError, bool ignoreCase)
{
lock(SyncRoot)
@@ -830,11 +760,6 @@ namespace System.Reflection.Emit
fullyQualifiedName = Path.Combine(ContainingAssemblyBuilder.m_assemblyData.m_strDir, fullyQualifiedName);
fullyQualifiedName = Path.GetFullPath(fullyQualifiedName);
}
-
- if (ContainingAssemblyBuilder.m_assemblyData.m_strDir != null && fullyQualifiedName != null)
- {
- new FileIOPermission( FileIOPermissionAccess.PathDiscovery, fullyQualifiedName ).Demand();
- }
return fullyQualifiedName;
}
@@ -1009,7 +934,6 @@ namespace System.Reflection.Emit
}
}
- [System.Runtime.InteropServices.ComVisible(true)]
public TypeBuilder DefineType(String name, TypeAttributes attr, Type parent, Type[] interfaces)
{
Contract.Ensures(Contract.Result<TypeBuilder>() != null);
@@ -1060,10 +984,16 @@ namespace System.Reflection.Emit
EnumBuilder enumBuilder = DefineEnumNoLock(name, visibility, underlyingType);
// This enum is not generic, nested, and cannot have any element type.
- Debug.Assert(name == enumBuilder.FullName);
+
+ // We ought to be able to make the following assertions:
+ //
+ // Debug.Assert(name == enumBuilder.FullName);
+ // Debug.Assert(enumBuilder.m_typeBuilder == m_TypeBuilderDict[name]);
+ //
+ // but we can't because an embedded null ('\0') in the name will cause it to be truncated
+ // incorrectly. Fixing that would be a breaking change.
// Replace the TypeBuilder object in m_TypeBuilderDict with this EnumBuilder object.
- Debug.Assert(enumBuilder.m_typeBuilder == m_TypeBuilderDict[name]);
m_TypeBuilderDict[name] = enumBuilder;
return enumBuilder;
@@ -1141,47 +1071,6 @@ namespace System.Reflection.Emit
parameterTypes, requiredParameterTypeCustomModifiers, optionalParameterTypeCustomModifiers);
}
- public MethodBuilder DefinePInvokeMethod(String name, String dllName, MethodAttributes attributes,
- CallingConventions callingConvention, Type returnType, Type[] parameterTypes,
- CallingConvention nativeCallConv, CharSet nativeCharSet)
- {
- Contract.Ensures(Contract.Result<MethodBuilder>() != null);
-
- return DefinePInvokeMethod(name, dllName, name, attributes, callingConvention, returnType, parameterTypes, nativeCallConv, nativeCharSet);
- }
-
- public MethodBuilder DefinePInvokeMethod(String name, String dllName, String entryName, MethodAttributes attributes,
- CallingConventions callingConvention, Type returnType, Type[] parameterTypes, CallingConvention nativeCallConv,
- CharSet nativeCharSet)
- {
- Contract.Ensures(Contract.Result<MethodBuilder>() != null);
-
- lock(SyncRoot)
- {
- return DefinePInvokeMethodNoLock(name, dllName, entryName, attributes, callingConvention,
- returnType, parameterTypes, nativeCallConv, nativeCharSet);
- }
- }
-
- private MethodBuilder DefinePInvokeMethodNoLock(String name, String dllName, String entryName, MethodAttributes attributes,
- CallingConventions callingConvention, Type returnType, Type[] parameterTypes, CallingConvention nativeCallConv,
- CharSet nativeCharSet)
- {
- //Global methods must be static.
- if ((attributes & MethodAttributes.Static) == 0)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_GlobalFunctionHasToBeStatic"));
- }
- Contract.Ensures(Contract.Result<MethodBuilder>() != null);
- Contract.EndContractBlock();
-
- CheckContext(returnType);
- CheckContext(parameterTypes);
-
- m_moduleData.m_fHasGlobal = true;
- return m_moduleData.m_globalTypeBuilder.DefinePInvokeMethod(name, dllName, entryName, attributes, callingConvention, returnType, parameterTypes, nativeCallConv, nativeCharSet);
- }
-
public void CreateGlobalFunctions()
{
lock(SyncRoot)
@@ -1510,41 +1399,6 @@ namespace System.Reflection.Emit
return new MethodToken(mr);
}
- public MethodToken GetConstructorToken(ConstructorInfo constructor, IEnumerable<Type> optionalParameterTypes)
- {
- if (constructor == null)
- {
- throw new ArgumentNullException(nameof(constructor));
- }
-
- lock (SyncRoot)
- {
- // useMethodDef is not applicable - constructors aren't generic
- return new MethodToken(GetMethodTokenInternal(constructor, optionalParameterTypes, false));
- }
- }
-
- public MethodToken GetMethodToken(MethodInfo method, IEnumerable<Type> optionalParameterTypes)
- {
- if (method == null)
- {
- throw new ArgumentNullException(nameof(method));
- }
-
- // useMethodDef flag only affects the result if we pass in a generic method definition.
- // If the caller is looking for a token for an ldtoken/ldftn/ldvirtftn instruction and passes in a generic method definition info/builder,
- // we correclty return the MethodDef/Ref token of the generic definition that can be used with ldtoken/ldftn/ldvirtftn.
- //
- // If the caller is looking for a token for a call/callvirt/jmp instruction and passes in a generic method definition info/builder,
- // we also return the generic MethodDef/Ref token, which is indeed not acceptable for call/callvirt/jmp instruction.
- // But the caller can always instantiate the info/builder and pass it in. Then we build the right MethodSpec.
-
- lock (SyncRoot)
- {
- return new MethodToken(GetMethodTokenInternal(method, optionalParameterTypes, true));
- }
- }
-
internal int GetMethodTokenInternal(MethodBase method, IEnumerable<Type> optionalParameterTypes, bool useMethodDef)
{
int tk = 0;
@@ -1671,7 +1525,6 @@ namespace System.Reflection.Emit
return new SymbolMethod(this, token, arrayClass, methodName, callingConvention, returnType, parameterTypes);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public MethodToken GetConstructorToken(ConstructorInfo con)
{
// Return a token for the ConstructorInfo relative to the Module.
@@ -1689,7 +1542,7 @@ namespace System.Reflection.Emit
private FieldToken GetFieldTokenNoLock(FieldInfo field)
{
if (field == null) {
- throw new ArgumentNullException("con");
+ throw new ArgumentNullException(nameof(field));
}
Contract.EndContractBlock();
@@ -1821,7 +1674,6 @@ namespace System.Reflection.Emit
#region Other
- [System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
if (con == null)
@@ -1878,7 +1730,7 @@ namespace System.Reflection.Emit
// For these reasons, we should consider making this API internal in Arrowhead
// (as it is in Silverlight), and consider validating that we're within a call
// to TypeBuilder.CreateType whenever this is used.
- public ISymbolWriter GetSymWriter()
+ internal ISymbolWriter GetSymWriter()
{
return m_iSymWriter;
}
@@ -1907,81 +1759,6 @@ namespace System.Reflection.Emit
return m_iSymWriter.DefineDocument(url, language, languageVendor, documentType);
}
- public void SetUserEntryPoint(MethodInfo entryPoint)
- {
- lock(SyncRoot)
- {
- SetUserEntryPointNoLock(entryPoint);
- }
- }
-
- private void SetUserEntryPointNoLock(MethodInfo entryPoint)
- {
- // Set the user entry point. Compiler may generate startup stub before calling user main.
- // The startup stub will be the entry point. While the user "main" will be the user entry
- // point so that debugger will not step into the compiler entry point.
-
- if (entryPoint == null)
- {
- throw new ArgumentNullException(nameof(entryPoint));
- }
- Contract.EndContractBlock();
-
- if (m_iSymWriter == null)
- {
- // Cannot set entry point when it is not a debug module
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NotADebugModule"));
- }
-
- if (entryPoint.DeclaringType != null)
- {
- if (!entryPoint.Module.Equals(this))
- {
- // you cannot pass in a MethodInfo that is not contained by this ModuleBuilder
- throw new InvalidOperationException(Environment.GetResourceString("Argument_NotInTheSameModuleBuilder"));
- }
- }
- else
- {
- // unfortunately this check is missing for global function passed in as RuntimeMethodInfo.
- // The problem is that Reflection does not
- // allow us to get the containing module giving a global function
- MethodBuilder mb = entryPoint as MethodBuilder;
- if (mb != null && mb.GetModuleBuilder() != this)
- {
- // you cannot pass in a MethodInfo that is not contained by this ModuleBuilder
- throw new InvalidOperationException(Environment.GetResourceString("Argument_NotInTheSameModuleBuilder"));
- }
- }
-
- // get the metadata token value and create the SymbolStore's token value class
- SymbolToken tkMethod = new SymbolToken(GetMethodTokenInternal(entryPoint).Token);
-
- // set the UserEntryPoint
- m_iSymWriter.SetUserEntryPoint(tkMethod);
- }
-
- public void SetSymCustomAttribute(String name, byte[] data)
- {
- lock(SyncRoot)
- {
- SetSymCustomAttributeNoLock(name, data);
- }
- }
-
- private void SetSymCustomAttributeNoLock(String name, byte[] data)
- {
- if (m_iSymWriter == null)
- {
- // Cannot SetSymCustomAttribute when it is not a debug module
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NotADebugModule"));
- }
-
- // This API has never worked. It seems like we might want to call m_iSymWriter.SetSymAttribute,
- // but we don't have a metadata token to associate the attribute with. Instead
- // MethodBuilder.SetSymCustomAttribute could be used to associate a symbol attribute with a specific method.
- }
-
[Pure]
public bool IsTransient()
{
diff --git a/src/mscorlib/src/System/Reflection/Emit/ModuleBuilderData.cs b/src/mscorlib/src/System/Reflection/Emit/ModuleBuilderData.cs
index 96e60d9a4e..4b6f8b4efe 100644
--- a/src/mscorlib/src/System/Reflection/Emit/ModuleBuilderData.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/ModuleBuilderData.cs
@@ -52,36 +52,6 @@ namespace System.Reflection.Emit
}
}
- // This is a method for changing module and file name of the manifest module (created by default for
- // each assembly).
- internal virtual void ModifyModuleName(String strModuleName)
- {
- Debug.Assert(m_strModuleName == AssemblyBuilder.MANIFEST_MODULE_NAME, "Changing names for non-manifest module");
- InitNames(strModuleName, null /*strFileName*/);
- }
-
- internal int FileToken
- {
- get
- {
- // Before save, the scope of m_tkFile is the in-memory assembly manifest
- // During save, the scope of m_tkFile is the on-disk assembly manifest
- // For transient modules m_tkFile never change.
-
- // Theoretically no one should emit anything after a dynamic assembly has
- // been saved. So m_tkFile shouldn't used when m_isSaved is true.
- // But that was never completely enforced: you can still emit everything after
- // the assembly has been saved (except for public types in persistent modules).
-
- return m_tkFile;
- }
-
- set
- {
- m_tkFile = value;
- }
- }
-
internal String m_strModuleName; // scope name (can be different from file name)
internal String m_strFileName;
internal bool m_fGlobalBeenCreated;
@@ -93,8 +63,6 @@ namespace System.Reflection.Emit
private int m_tkFile;
internal bool m_isSaved;
- [NonSerialized]
- internal ResWriterData m_embeddedRes;
internal const String MULTI_BYTE_VALUE_CLASS = "$ArrayType$";
internal String m_strResourceFileName;
internal byte[] m_resourceBytes;
diff --git a/src/mscorlib/src/System/Reflection/Emit/OpCodes.cs b/src/mscorlib/src/System/Reflection/Emit/OpCodes.cs
index 345694ec80..324fad9ceb 100644
--- a/src/mscorlib/src/System/Reflection/Emit/OpCodes.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/OpCodes.cs
@@ -13,7 +13,6 @@
namespace System.Reflection.Emit {
using System;
-using System.Security.Permissions;
//
// Internal enums for opcode values. Note that the value names are used to construct
@@ -250,7 +249,6 @@ internal enum OpCodeValues {
// If you add more opcodes here, modify OpCode.Name to handle them correctly
};
-[System.Runtime.InteropServices.ComVisible(true)]
public class OpCodes {
/// <summary>
@@ -1419,7 +1417,6 @@ public class OpCodes {
(1 << OpCode.StackChangeShift)
);
- [System.Runtime.InteropServices.ComVisible(true)]
public static readonly OpCode Castclass = new OpCode(OpCodeValues.Castclass,
((int)OperandType.InlineType) |
((int)FlowControl.Next << OpCode.FlowControlShift) |
diff --git a/src/mscorlib/src/System/Reflection/Emit/Opcode.cs b/src/mscorlib/src/System/Reflection/Emit/Opcode.cs
index d7bfacd568..74a9de16b6 100644
--- a/src/mscorlib/src/System/Reflection/Emit/Opcode.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/Opcode.cs
@@ -5,10 +5,8 @@
namespace System.Reflection.Emit {
using System;
using System.Threading;
-using System.Security.Permissions;
using System.Diagnostics.Contracts;
-[System.Runtime.InteropServices.ComVisible(true)]
public struct OpCode
{
//
diff --git a/src/mscorlib/src/System/Reflection/Emit/OpcodeType.cs b/src/mscorlib/src/System/Reflection/Emit/OpcodeType.cs
index 3636cb7377..87dea058e5 100644
--- a/src/mscorlib/src/System/Reflection/Emit/OpcodeType.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/OpcodeType.cs
@@ -17,7 +17,6 @@ namespace System.Reflection.Emit {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum OpCodeType
{
diff --git a/src/mscorlib/src/System/Reflection/Emit/OperandType.cs b/src/mscorlib/src/System/Reflection/Emit/OperandType.cs
index 808844a017..e972e8603d 100644
--- a/src/mscorlib/src/System/Reflection/Emit/OperandType.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/OperandType.cs
@@ -17,7 +17,6 @@ namespace System.Reflection.Emit {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum OperandType
{
diff --git a/src/mscorlib/src/System/Reflection/Emit/PEFileKinds.cs b/src/mscorlib/src/System/Reflection/Emit/PEFileKinds.cs
index d9c9c0327c..531ff41dd7 100644
--- a/src/mscorlib/src/System/Reflection/Emit/PEFileKinds.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/PEFileKinds.cs
@@ -7,7 +7,6 @@ namespace System.Reflection.Emit {
using System;
// This Enum matchs the CorFieldAttr defined in CorHdr.h
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum PEFileKinds
{
Dll = 0x0001,
diff --git a/src/mscorlib/src/System/Reflection/Emit/ParameterBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/ParameterBuilder.cs
index 7909562baa..1b3babf595 100644
--- a/src/mscorlib/src/System/Reflection/Emit/ParameterBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/ParameterBuilder.cs
@@ -16,31 +16,10 @@ namespace System.Reflection.Emit {
using System.Runtime.InteropServices;
using System;
using System.Reflection;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_ParameterBuilder))]
-[System.Runtime.InteropServices.ComVisible(true)]
- public class ParameterBuilder : _ParameterBuilder
+ public class ParameterBuilder
{
- // set ParamMarshal
- [Obsolete("An alternate API is available: Emit the MarshalAs custom attribute instead. http://go.microsoft.com/fwlink/?linkid=14202")]
- public virtual void SetMarshal(UnmanagedMarshal unmanagedMarshal)
- {
- if (unmanagedMarshal == null)
- {
- throw new ArgumentNullException(nameof(unmanagedMarshal));
- }
- Contract.EndContractBlock();
-
- byte [] ubMarshal = unmanagedMarshal.InternalGetBytes();
- TypeBuilder.SetFieldMarshal(
- m_methodBuilder.GetModuleBuilder().GetNativeHandle(),
- m_pdToken.Token,
- ubMarshal,
- ubMarshal.Length);
- }
// Set the default value of the parameter
public virtual void SetConstant(Object defaultValue)
@@ -54,7 +33,6 @@ namespace System.Reflection.Emit {
// Use this function if client decides to form the custom attribute blob themselves
- [System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
if (con == null)
@@ -111,8 +89,6 @@ namespace System.Reflection.Emit {
{
return m_pdToken;
}
-
- internal int MetadataTokenInternal { get { return m_pdToken.Token; } }
public virtual String Name {
get {return m_strParamName;}
diff --git a/src/mscorlib/src/System/Reflection/Emit/ParameterToken.cs b/src/mscorlib/src/System/Reflection/Emit/ParameterToken.cs
index d65368bf0d..a4a32a51fb 100644
--- a/src/mscorlib/src/System/Reflection/Emit/ParameterToken.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/ParameterToken.cs
@@ -16,22 +16,15 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
- using System.Security.Permissions;
// The ParameterToken class is an opaque representation of the Token returned
// by the Metadata to represent the parameter.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct ParameterToken {
public static readonly ParameterToken Empty = new ParameterToken();
internal int m_tkParameter;
-#if false
- public ParameterToken() {
- m_tkParameter=0;
- }
-#endif
internal ParameterToken(int tkParam) {
m_tkParameter = tkParam;
diff --git a/src/mscorlib/src/System/Reflection/Emit/PropertyBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/PropertyBuilder.cs
index e7442b4e02..7c4ed9dc0f 100644
--- a/src/mscorlib/src/System/Reflection/Emit/PropertyBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/PropertyBuilder.cs
@@ -17,7 +17,6 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
using CultureInfo = System.Globalization.CultureInfo;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Diagnostics.Contracts;
@@ -25,10 +24,7 @@ namespace System.Reflection.Emit {
// A PropertyBuilder is always associated with a TypeBuilder. The TypeBuilder.DefineProperty
// method will return a new PropertyBuilder to a client.
//
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_PropertyBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class PropertyBuilder : PropertyInfo, _PropertyBuilder
+ public sealed class PropertyBuilder : PropertyInfo
{
// Make a private constructor so these cannot be constructed externally.
@@ -84,14 +80,6 @@ namespace System.Reflection.Emit {
{
get {return m_prToken;}
}
-
- internal int MetadataTokenInternal
- {
- get
- {
- return m_tkProperty;
- }
- }
public override Module Module
{
@@ -135,7 +123,6 @@ namespace System.Reflection.Emit {
// Use this function if client decides to form the custom attribute blob themselves
-[System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
if (con == null)
diff --git a/src/mscorlib/src/System/Reflection/Emit/PropertyToken.cs b/src/mscorlib/src/System/Reflection/Emit/PropertyToken.cs
index d70cad057a..72ab983bb9 100644
--- a/src/mscorlib/src/System/Reflection/Emit/PropertyToken.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/PropertyToken.cs
@@ -16,10 +16,8 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
- using System.Security.Permissions;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct PropertyToken {
public static readonly PropertyToken Empty = new PropertyToken();
diff --git a/src/mscorlib/src/System/Reflection/Emit/SignatureHelper.cs b/src/mscorlib/src/System/Reflection/Emit/SignatureHelper.cs
index c40035bc40..b43abcb51c 100644
--- a/src/mscorlib/src/System/Reflection/Emit/SignatureHelper.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/SignatureHelper.cs
@@ -14,12 +14,8 @@ namespace System.Reflection.Emit
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
- using System.Security.Permissions;
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_SignatureHelper))]
-[System.Runtime.InteropServices.ComVisible(true)]
- public sealed class SignatureHelper : _SignatureHelper
+ public sealed class SignatureHelper
{
#region Consts Fields
private const int NO_SIZE_IN_SIG = -1;
@@ -186,15 +182,15 @@ namespace System.Reflection.Emit
return sigHelp;
}
- internal static SignatureHelper GetTypeSigToken(Module mod, Type type)
+ internal static SignatureHelper GetTypeSigToken(Module module, Type type)
{
- if (mod == null)
- throw new ArgumentNullException("module");
+ if (module == null)
+ throw new ArgumentNullException(nameof(module));
if (type == null)
throw new ArgumentNullException(nameof(type));
- return new SignatureHelper(mod, type);
+ return new SignatureHelper(module, type);
}
#endregion
@@ -518,36 +514,6 @@ namespace System.Reflection.Emit
}
}
-
- private void AddData(uint data)
- {
- if (m_currSig + 4 > m_signature.Length)
- {
- m_signature = ExpandArray(m_signature);
- }
-
- m_signature[m_currSig++] = (byte)((data) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>8) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>16) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>24) & 0xFF);
- }
-
- private void AddData(ulong data)
- {
- if (m_currSig + 8 > m_signature.Length)
- {
- m_signature = ExpandArray(m_signature);
- }
-
- m_signature[m_currSig++] = (byte)((data) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>8) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>16) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>24) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>32) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>40) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>48) & 0xFF);
- m_signature[m_currSig++] = (byte)((data>>56) & 0xFF);
- }
private void AddElementType(CorElementType cvt)
{
diff --git a/src/mscorlib/src/System/Reflection/Emit/SignatureToken.cs b/src/mscorlib/src/System/Reflection/Emit/SignatureToken.cs
index 0a87ac1398..5c908b89c7 100644
--- a/src/mscorlib/src/System/Reflection/Emit/SignatureToken.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/SignatureToken.cs
@@ -17,9 +17,7 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
- using System.Security.Permissions;
- [System.Runtime.InteropServices.ComVisible(true)]
public struct SignatureToken {
public static readonly SignatureToken Empty = new SignatureToken();
diff --git a/src/mscorlib/src/System/Reflection/Emit/StackBehaviour.cs b/src/mscorlib/src/System/Reflection/Emit/StackBehaviour.cs
index 2d2c35ef26..8a447d03fc 100644
--- a/src/mscorlib/src/System/Reflection/Emit/StackBehaviour.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/StackBehaviour.cs
@@ -17,7 +17,6 @@ namespace System.Reflection.Emit {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum StackBehaviour
{
diff --git a/src/mscorlib/src/System/Reflection/Emit/StringToken.cs b/src/mscorlib/src/System/Reflection/Emit/StringToken.cs
index cb0e979a7a..852225697c 100644
--- a/src/mscorlib/src/System/Reflection/Emit/StringToken.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/StringToken.cs
@@ -16,10 +16,8 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
- using System.Security.Permissions;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct StringToken {
internal int m_string;
diff --git a/src/mscorlib/src/System/Reflection/Emit/SymbolType.cs b/src/mscorlib/src/System/Reflection/Emit/SymbolType.cs
index 84ece90982..205299125b 100644
--- a/src/mscorlib/src/System/Reflection/Emit/SymbolType.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/SymbolType.cs
@@ -419,7 +419,6 @@ namespace System.Reflection.Emit
throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType"));
}
-[System.Runtime.InteropServices.ComVisible(true)]
public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType"));
@@ -497,7 +496,6 @@ namespace System.Reflection.Emit
throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType"));
}
-[System.Runtime.InteropServices.ComVisible(true)]
public override InterfaceMapping GetInterfaceMap(Type interfaceType)
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType"));
diff --git a/src/mscorlib/src/System/Reflection/Emit/TypeBuilder.cs b/src/mscorlib/src/System/Reflection/Emit/TypeBuilder.cs
index 73778d5f27..88502cb096 100644
--- a/src/mscorlib/src/System/Reflection/Emit/TypeBuilder.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/TypeBuilder.cs
@@ -9,7 +9,6 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
using System.Security;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Collections.Generic;
@@ -21,7 +20,6 @@ namespace System.Reflection.Emit {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum PackingSize
{
Unspecified = 0,
@@ -35,10 +33,7 @@ namespace System.Reflection.Emit {
Size128 = 128,
}
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_TypeBuilder))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class TypeBuilder : TypeInfo, _TypeBuilder
+ public sealed class TypeBuilder : TypeInfo
{
public override bool IsAssignableFrom(System.Reflection.TypeInfo typeInfo){
if(typeInfo==null) return false;
@@ -227,10 +222,6 @@ namespace System.Reflection.Emit {
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- internal static extern void SetPInvokeData(RuntimeModule module, String DllName, String name, int token, int linkFlags);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
internal static extern int DefineProperty(RuntimeModule module, int tkParent, String name, PropertyAttributes attributes,
byte[] signature, int sigLength);
@@ -270,42 +261,10 @@ namespace System.Reflection.Emit {
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- internal static extern void SetFieldMarshal(RuntimeModule module, int tk, byte[] ubMarshal, int ubSize);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
private static extern unsafe void SetConstantValue(RuntimeModule module, int tk, int corType, void* pValue);
- #endregion
-
- #region Internal\Private Static Members
- private static bool IsPublicComType(Type type)
- {
- // Internal Helper to determine if a type should be added to ComType table.
- // A top level type should be added if it is Public.
- // A nested type should be added if the top most enclosing type is Public
- // and all the enclosing types are NestedPublic
- Type enclosingType = type.DeclaringType;
- if (enclosingType != null)
- {
- if (IsPublicComType(enclosingType))
- {
- if ((type.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedPublic)
- {
- return true;
- }
- }
- }
- else
- {
- if ((type.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.Public)
- {
- return true;
- }
- }
-
- return false;
- }
+#endregion
+#region Internal\Private Static Members
[Pure]
internal static bool IsTypeEqual(Type t1, Type t2)
@@ -656,127 +615,8 @@ namespace System.Reflection.Emit {
m_module.AddType(FullName, this);
}
- #endregion
-
- #region Private Members
- private MethodBuilder DefinePInvokeMethodHelper(
- String name, String dllName, String importName, MethodAttributes attributes, CallingConventions callingConvention,
- Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers,
- Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers,
- CallingConvention nativeCallConv, CharSet nativeCharSet)
- {
- CheckContext(returnType);
- CheckContext(returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, parameterTypes);
- CheckContext(parameterTypeRequiredCustomModifiers);
- CheckContext(parameterTypeOptionalCustomModifiers);
-
- AppDomain.CheckDefinePInvokeSupported();
-
- lock (SyncRoot)
- {
- return DefinePInvokeMethodHelperNoLock(name, dllName, importName, attributes, callingConvention,
- returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers,
- parameterTypes, parameterTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers,
- nativeCallConv, nativeCharSet);
- }
- }
-
- private MethodBuilder DefinePInvokeMethodHelperNoLock(
- String name, String dllName, String importName, MethodAttributes attributes, CallingConventions callingConvention,
- Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers,
- Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers,
- CallingConvention nativeCallConv, CharSet nativeCharSet)
- {
- if (name == null)
- throw new ArgumentNullException(nameof(name));
-
- if (name.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyName"), nameof(name));
-
- if (dllName == null)
- throw new ArgumentNullException(nameof(dllName));
-
- if (dllName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyName"), nameof(dllName));
-
- if (importName == null)
- throw new ArgumentNullException(nameof(importName));
-
- if (importName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyName"), nameof(importName));
-
- if ((attributes & MethodAttributes.Abstract) != 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_BadPInvokeMethod"));
- Contract.EndContractBlock();
-
- if ((m_iAttr & TypeAttributes.ClassSemanticsMask) == TypeAttributes.Interface)
- throw new ArgumentException(Environment.GetResourceString("Argument_BadPInvokeOnInterface"));
-
- ThrowIfCreated();
-
- attributes = attributes | MethodAttributes.PinvokeImpl;
- MethodBuilder method = new MethodBuilder(name, attributes, callingConvention,
- returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers,
- parameterTypes, parameterTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers,
- m_module, this, false);
-
- //The signature grabbing code has to be up here or the signature won't be finished
- //and our equals check won't work.
- int sigLength;
- byte[] sigBytes = method.GetMethodSignature().InternalGetSignature(out sigLength);
-
- if (m_listMethods.Contains(method))
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_MethodRedefined"));
- }
- m_listMethods.Add(method);
-
- MethodToken token = method.GetToken();
-
- int linkFlags = 0;
- switch(nativeCallConv)
- {
- case CallingConvention.Winapi:
- linkFlags =(int)PInvokeMap.CallConvWinapi;
- break;
- case CallingConvention.Cdecl:
- linkFlags =(int)PInvokeMap.CallConvCdecl;
- break;
- case CallingConvention.StdCall:
- linkFlags =(int)PInvokeMap.CallConvStdcall;
- break;
- case CallingConvention.ThisCall:
- linkFlags =(int)PInvokeMap.CallConvThiscall;
- break;
- case CallingConvention.FastCall:
- linkFlags =(int)PInvokeMap.CallConvFastcall;
- break;
- }
- switch(nativeCharSet)
- {
- case CharSet.None:
- linkFlags |=(int)PInvokeMap.CharSetNotSpec;
- break;
- case CharSet.Ansi:
- linkFlags |=(int)PInvokeMap.CharSetAnsi;
- break;
- case CharSet.Unicode:
- linkFlags |=(int)PInvokeMap.CharSetUnicode;
- break;
- case CharSet.Auto:
- linkFlags |=(int)PInvokeMap.CharSetAuto;
- break;
- }
-
- SetPInvokeData(m_module.GetNativeHandle(),
- dllName,
- importName,
- token.Token,
- linkFlags);
- method.SetToken(token);
-
- return method;
- }
+#endregion
+#region Private Members
private FieldBuilder DefineDataHelper(String name, byte[] data, int size, FieldAttributes attributes)
{
@@ -1050,7 +890,6 @@ namespace System.Reflection.Emit {
return m_bakedRuntimeType.GetConstructor(bindingAttr, binder, callConvention, types, modifiers);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
{
if (!IsCreated())
@@ -1188,7 +1027,6 @@ namespace System.Reflection.Emit {
return m_bakedRuntimeType.GetMember(name, type, bindingAttr);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public override InterfaceMapping GetInterfaceMap(Type interfaceType)
{
if (!IsCreated())
@@ -1319,7 +1157,6 @@ namespace System.Reflection.Emit {
get { return false; }
}
- [System.Runtime.InteropServices.ComVisible(true)]
[Pure]
public override bool IsSubclassOf(Type c)
{
@@ -1642,7 +1479,6 @@ namespace System.Reflection.Emit {
#endregion
#region Define Constructor
- [System.Runtime.InteropServices.ComVisible(true)]
public ConstructorBuilder DefineTypeInitializer()
{
lock(SyncRoot)
@@ -1664,7 +1500,6 @@ namespace System.Reflection.Emit {
return constBuilder;
}
- [System.Runtime.InteropServices.ComVisible(true)]
public ConstructorBuilder DefineDefaultConstructor(MethodAttributes attributes)
{
if ((m_iAttr & TypeAttributes.Interface) == TypeAttributes.Interface)
@@ -1732,13 +1567,11 @@ namespace System.Reflection.Emit {
return constBuilder;
}
- [System.Runtime.InteropServices.ComVisible(true)]
public ConstructorBuilder DefineConstructor(MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes)
{
return DefineConstructor(attributes, callingConvention, parameterTypes, null, null);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public ConstructorBuilder DefineConstructor(MethodAttributes attributes, CallingConventions callingConvention,
Type[] parameterTypes, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers)
{
@@ -1786,41 +1619,6 @@ namespace System.Reflection.Emit {
#endregion
- #region Define PInvoke
- public MethodBuilder DefinePInvokeMethod(String name, String dllName, MethodAttributes attributes,
- CallingConventions callingConvention, Type returnType, Type[] parameterTypes,
- CallingConvention nativeCallConv, CharSet nativeCharSet)
- {
- MethodBuilder method = DefinePInvokeMethodHelper(
- name, dllName, name, attributes, callingConvention, returnType, null, null,
- parameterTypes, null, null, nativeCallConv, nativeCharSet);
- return method;
- }
-
- public MethodBuilder DefinePInvokeMethod(String name, String dllName, String entryName, MethodAttributes attributes,
- CallingConventions callingConvention, Type returnType, Type[] parameterTypes,
- CallingConvention nativeCallConv, CharSet nativeCharSet)
- {
- MethodBuilder method = DefinePInvokeMethodHelper(
- name, dllName, entryName, attributes, callingConvention, returnType, null, null,
- parameterTypes, null, null, nativeCallConv, nativeCharSet);
- return method;
- }
-
- public MethodBuilder DefinePInvokeMethod(String name, String dllName, String entryName, MethodAttributes attributes,
- CallingConventions callingConvention,
- Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers,
- Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers,
- CallingConvention nativeCallConv, CharSet nativeCharSet)
- {
- MethodBuilder method = DefinePInvokeMethodHelper(
- name, dllName, entryName, attributes, callingConvention, returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers,
- parameterTypes, parameterTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers, nativeCallConv, nativeCharSet);
- return method;
- }
-
- #endregion
-
#region Define Nested Type
public TypeBuilder DefineNestedType(String name)
{
@@ -1830,7 +1628,6 @@ namespace System.Reflection.Emit {
}
}
- [System.Runtime.InteropServices.ComVisible(true)]
public TypeBuilder DefineNestedType(String name, TypeAttributes attr, Type parent, Type[] interfaces)
{
lock(SyncRoot)
@@ -2343,7 +2140,6 @@ namespace System.Reflection.Emit {
}
}
- [System.Runtime.InteropServices.ComVisible(true)]
public void AddInterfaceImplementation(Type interfaceType)
{
if (interfaceType == null)
@@ -2374,7 +2170,6 @@ public TypeToken TypeToken
}
- [System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
if (con == null)
diff --git a/src/mscorlib/src/System/Reflection/Emit/TypeBuilderInstantiation.cs b/src/mscorlib/src/System/Reflection/Emit/TypeBuilderInstantiation.cs
index 3bae585953..da5a56ba28 100644
--- a/src/mscorlib/src/System/Reflection/Emit/TypeBuilderInstantiation.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/TypeBuilderInstantiation.cs
@@ -168,7 +168,6 @@ namespace System.Reflection.Emit
}
protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) { throw new NotSupportedException(); }
- [System.Runtime.InteropServices.ComVisible(true)]
public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr) { throw new NotSupportedException(); }
protected override MethodInfo GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) { throw new NotSupportedException(); }
public override MethodInfo[] GetMethods(BindingFlags bindingAttr) { throw new NotSupportedException(); }
@@ -184,7 +183,6 @@ namespace System.Reflection.Emit
public override Type GetNestedType(String name, BindingFlags bindingAttr) { throw new NotSupportedException(); }
public override MemberInfo[] GetMember(String name, MemberTypes type, BindingFlags bindingAttr) { throw new NotSupportedException(); }
- [System.Runtime.InteropServices.ComVisible(true)]
public override InterfaceMapping GetInterfaceMap(Type interfaceType) { throw new NotSupportedException(); }
public override EventInfo[] GetEvents(BindingFlags bindingAttr) { throw new NotSupportedException(); }
public override MemberInfo[] GetMembers(BindingFlags bindingAttr) { throw new NotSupportedException(); }
@@ -222,7 +220,6 @@ namespace System.Reflection.Emit
public override Type MakeGenericType(params Type[] inst) { throw new InvalidOperationException(Environment.GetResourceString("Arg_NotGenericTypeDefinition")); }
public override bool IsAssignableFrom(Type c) { throw new NotSupportedException(); }
- [System.Runtime.InteropServices.ComVisible(true)]
[Pure]
public override bool IsSubclassOf(Type c)
{
diff --git a/src/mscorlib/src/System/Reflection/Emit/TypeToken.cs b/src/mscorlib/src/System/Reflection/Emit/TypeToken.cs
index 228755641c..4fa851c529 100644
--- a/src/mscorlib/src/System/Reflection/Emit/TypeToken.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/TypeToken.cs
@@ -17,21 +17,14 @@ namespace System.Reflection.Emit {
using System;
using System.Reflection;
using System.Threading;
- using System.Security.Permissions;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct TypeToken {
public static readonly TypeToken Empty = new TypeToken();
internal int m_class;
-#if false
- public TypeToken() {
- m_class=0;
- }
-#endif
internal TypeToken(int str) {
m_class=str;
diff --git a/src/mscorlib/src/System/Reflection/Emit/UnmanagedMarshal.cs b/src/mscorlib/src/System/Reflection/Emit/UnmanagedMarshal.cs
deleted file mode 100644
index 28e95e2456..0000000000
--- a/src/mscorlib/src/System/Reflection/Emit/UnmanagedMarshal.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Reflection.Emit
-{
- using System.Runtime.InteropServices;
- using System;
- using System.Security.Permissions;
-
- // This class is describing the fieldmarshal.
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- [Obsolete("An alternate API is available: Emit the MarshalAs custom attribute instead. http://go.microsoft.com/fwlink/?linkid=14202")]
- public sealed class UnmanagedMarshal
- {
- /******************************
-[System.Runtime.InteropServices.ComVisible(true)]
- * public static constructors. You can only construct
- * UnmanagedMarshal using these static constructors.
- ******************************/
- public static UnmanagedMarshal DefineUnmanagedMarshal(UnmanagedType unmanagedType)
- {
- if (unmanagedType == UnmanagedType.ByValTStr ||
- unmanagedType == UnmanagedType.SafeArray ||
- unmanagedType == UnmanagedType.CustomMarshaler ||
- unmanagedType == UnmanagedType.ByValArray ||
- unmanagedType == UnmanagedType.LPArray)
- {
- // not a simple native marshal
- throw new ArgumentException(Environment.GetResourceString("Argument_NotASimpleNativeType"));
- }
- return new UnmanagedMarshal(unmanagedType, Guid.Empty, 0, (UnmanagedType) 0);
- }
- public static UnmanagedMarshal DefineByValTStr(int elemCount)
- {
- return new UnmanagedMarshal(UnmanagedType.ByValTStr, Guid.Empty, elemCount, (UnmanagedType) 0);
- }
-
- public static UnmanagedMarshal DefineSafeArray(UnmanagedType elemType)
- {
- return new UnmanagedMarshal(UnmanagedType.SafeArray, Guid.Empty, 0, elemType);
- }
-
- public static UnmanagedMarshal DefineByValArray(int elemCount)
- {
- return new UnmanagedMarshal(UnmanagedType.ByValArray, Guid.Empty, elemCount, (UnmanagedType) 0);
- }
-
- public static UnmanagedMarshal DefineLPArray(UnmanagedType elemType)
- {
- return new UnmanagedMarshal(UnmanagedType.LPArray, Guid.Empty, 0, elemType);
- }
-
-
-
-
-
-
- // accessor function for the native type
- public UnmanagedType GetUnmanagedType
- {
- get { return m_unmanagedType; }
- }
-
- public Guid IIDGuid
- {
- get
- {
- if (m_unmanagedType == UnmanagedType.CustomMarshaler)
- return m_guid;
-
- // throw exception here. There is Guid only if CustomMarshaler
- throw new ArgumentException(Environment.GetResourceString("Argument_NotACustomMarshaler"));
- }
- }
- public int ElementCount
- {
- get
- {
- if (m_unmanagedType != UnmanagedType.ByValArray &&
- m_unmanagedType != UnmanagedType.ByValTStr)
- {
- // throw exception here. There is NumElement only if NativeTypeFixedArray
- throw new ArgumentException(Environment.GetResourceString("Argument_NoUnmanagedElementCount"));
- }
- return m_numElem;
- }
- }
- public UnmanagedType BaseType
- {
- get
- {
- if (m_unmanagedType != UnmanagedType.LPArray && m_unmanagedType != UnmanagedType.SafeArray)
- {
- // throw exception here. There is NestedUnmanagedType only if LPArray or SafeArray
- throw new ArgumentException(Environment.GetResourceString("Argument_NoNestedMarshal"));
- }
- return m_baseType;
- }
- }
-
- private UnmanagedMarshal(UnmanagedType unmanagedType, Guid guid, int numElem, UnmanagedType type)
- {
- m_unmanagedType = unmanagedType;
- m_guid = guid;
- m_numElem = numElem;
- m_baseType = type;
- }
-
- /************************
- *
- * Data member
- *
- *************************/
- internal UnmanagedType m_unmanagedType;
- internal Guid m_guid;
- internal int m_numElem;
- internal UnmanagedType m_baseType;
-
-
- /************************
- * this function return the byte representation of the marshal info.
- *************************/
- internal byte[] InternalGetBytes()
- {
- byte[] buf;
- if (m_unmanagedType == UnmanagedType.SafeArray || m_unmanagedType == UnmanagedType.LPArray)
- {
-
- // syntax for NativeTypeSafeArray is
- // <SafeArray | LPArray> <base type>
- //
- int cBuf = 2;
- buf = new byte[cBuf];
- buf[0] = (byte) (m_unmanagedType);
- buf[1] = (byte) (m_baseType);
- return buf;
- }
- else
- if (m_unmanagedType == UnmanagedType.ByValArray ||
- m_unmanagedType == UnmanagedType.ByValTStr)
- {
- // <ByValArray | ByValTStr> <encoded integer>
- //
- int cBuf;
- int iBuf = 0;
-
- if (m_numElem <= 0x7f)
- cBuf = 1;
- else if (m_numElem <= 0x3FFF)
- cBuf = 2;
- else
- cBuf = 4;
-
- // the total buffer size is the one byte + encoded integer size
- cBuf = cBuf + 1;
- buf = new byte[cBuf];
-
-
- buf[iBuf++] = (byte) (m_unmanagedType);
- if (m_numElem <= 0x7F)
- {
- buf[iBuf++] = (byte)(m_numElem & 0xFF);
- } else if (m_numElem <= 0x3FFF)
- {
- buf[iBuf++] = (byte)((m_numElem >> 8) | 0x80);
- buf[iBuf++] = (byte)(m_numElem & 0xFF);
- } else if (m_numElem <= 0x1FFFFFFF)
- {
- buf[iBuf++] = (byte)((m_numElem >> 24) | 0xC0);
- buf[iBuf++] = (byte)((m_numElem >> 16) & 0xFF);
- buf[iBuf++] = (byte)((m_numElem >> 8) & 0xFF);
- buf[iBuf++] = (byte)((m_numElem) & 0xFF);
- }
- return buf;
- }
- buf = new byte[1];
- buf[0] = (byte) (m_unmanagedType);
- return buf;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs b/src/mscorlib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs
index aaaffc0df6..ca0faf31ca 100644
--- a/src/mscorlib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs
+++ b/src/mscorlib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs
@@ -51,23 +51,7 @@ namespace System.Reflection.Emit
public override Object[] GetCustomAttributes(bool inherit) { return m_method.GetCustomAttributes(inherit); }
public override Object[] GetCustomAttributes(Type attributeType, bool inherit) { return m_method.GetCustomAttributes(attributeType, inherit); }
public override bool IsDefined(Type attributeType, bool inherit) { return m_method.IsDefined(attributeType, inherit); }
- internal int MetadataTokenInternal
- {
- get
- {
- MethodBuilder mb = m_method as MethodBuilder;
-
- if (mb != null)
- return mb.MetadataTokenInternal;
- else
- {
- Debug.Assert(m_method is RuntimeMethodInfo);
- return m_method.MetadataToken;
- }
- }
- }
public override Module Module { get { return m_method.Module; } }
- public new Type GetType() { return base.GetType(); }
#endregion
#region MethodBase Members
@@ -164,7 +148,6 @@ namespace System.Reflection.Emit
}
}
public override Module Module { get { return m_ctor.Module; } }
- public new Type GetType() { return base.GetType(); }
#endregion
#region MethodBase Members
@@ -265,7 +248,6 @@ namespace System.Reflection.Emit
}
}
public override Module Module { get { return m_field.Module; } }
- public new Type GetType() { return base.GetType(); }
#endregion
#region Public Abstract\Virtual Members
diff --git a/src/mscorlib/src/System/Reflection/EventAttributes.cs b/src/mscorlib/src/System/Reflection/EventAttributes.cs
index c0285652ff..4cc08f62d3 100644
--- a/src/mscorlib/src/System/Reflection/EventAttributes.cs
+++ b/src/mscorlib/src/System/Reflection/EventAttributes.cs
@@ -16,7 +16,6 @@ namespace System.Reflection {
using System;
[Serializable]
[Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum EventAttributes {
None = 0x0000,
diff --git a/src/mscorlib/src/System/Reflection/EventInfo.cs b/src/mscorlib/src/System/Reflection/EventInfo.cs
index 0eabb9d03a..9b529c2960 100644
--- a/src/mscorlib/src/System/Reflection/EventInfo.cs
+++ b/src/mscorlib/src/System/Reflection/EventInfo.cs
@@ -13,14 +13,10 @@ namespace System.Reflection
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.ConstrainedExecution;
- using System.Security.Permissions;
using RuntimeTypeCache = System.RuntimeType.RuntimeTypeCache;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_EventInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class EventInfo : MemberInfo, _EventInfo
+ public abstract class EventInfo : MemberInfo
{
#region Constructor
protected EventInfo() { }
@@ -236,7 +232,6 @@ namespace System.Reflection
#endregion
#region Internal Members
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal override bool CacheEquals(object o)
{
RuntimeEventInfo m = o as RuntimeEventInfo;
diff --git a/src/mscorlib/src/System/Reflection/FieldAttributes.cs b/src/mscorlib/src/System/Reflection/FieldAttributes.cs
index 48c90a1a38..e49a0a45b1 100644
--- a/src/mscorlib/src/System/Reflection/FieldAttributes.cs
+++ b/src/mscorlib/src/System/Reflection/FieldAttributes.cs
@@ -8,7 +8,6 @@ namespace System.Reflection
// This Enum matchs the CorFieldAttr defined in CorHdr.h
[Serializable]
[Flags()]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum FieldAttributes
{
// member access mask - Use this mask to retrieve accessibility information.
diff --git a/src/mscorlib/src/System/Reflection/FieldInfo.cs b/src/mscorlib/src/System/Reflection/FieldInfo.cs
index e61207a686..7b6517c2bb 100644
--- a/src/mscorlib/src/System/Reflection/FieldInfo.cs
+++ b/src/mscorlib/src/System/Reflection/FieldInfo.cs
@@ -16,15 +16,11 @@ namespace System.Reflection
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Threading;
using RuntimeTypeCache = System.RuntimeType.RuntimeTypeCache;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_FieldInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class FieldInfo : MemberInfo, _FieldInfo
+ public abstract class FieldInfo : MemberInfo
{
#region Static Members
public static FieldInfo GetFieldFromHandle(RuntimeFieldHandle handle)
@@ -43,7 +39,6 @@ namespace System.Reflection
return f;
}
- [System.Runtime.InteropServices.ComVisible(false)]
public static FieldInfo GetFieldFromHandle(RuntimeFieldHandle handle, RuntimeTypeHandle declaringType)
{
if (handle.IsNullHandle())
@@ -454,7 +449,6 @@ namespace System.Reflection
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal override bool CacheEquals(object o)
{
RtFieldInfo m = o as RtFieldInfo;
@@ -757,7 +751,6 @@ namespace System.Reflection
#endregion
#region Internal Members
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal override bool CacheEquals(object o)
{
MdFieldInfo m = o as MdFieldInfo;
diff --git a/src/mscorlib/src/System/Reflection/ICustomAttributeProvider.cs b/src/mscorlib/src/System/Reflection/ICustomAttributeProvider.cs
index 1fd361c889..faea91a81e 100644
--- a/src/mscorlib/src/System/Reflection/ICustomAttributeProvider.cs
+++ b/src/mscorlib/src/System/Reflection/ICustomAttributeProvider.cs
@@ -15,7 +15,6 @@ namespace System.Reflection {
using System;
// Interface does not need to be marked with the serializable attribute
-[System.Runtime.InteropServices.ComVisible(true)]
public interface ICustomAttributeProvider
{
diff --git a/src/mscorlib/src/System/Reflection/IReflect.cs b/src/mscorlib/src/System/Reflection/IReflect.cs
index 92ce3412fc..1c3c57613b 100644
--- a/src/mscorlib/src/System/Reflection/IReflect.cs
+++ b/src/mscorlib/src/System/Reflection/IReflect.cs
@@ -20,7 +20,6 @@ namespace System.Reflection {
// Interface does not need to be marked with the serializable attribute
[Guid("AFBF15E5-C37C-11d2-B88E-00A0C9B471B8")]
-[System.Runtime.InteropServices.ComVisible(true)]
public interface IReflect
{
// Return the requested method if it is implemented by the Reflection object. The
diff --git a/src/mscorlib/src/System/Reflection/InterfaceMapping.cs b/src/mscorlib/src/System/Reflection/InterfaceMapping.cs
index 488ef4484d..bf994f7b47 100644
--- a/src/mscorlib/src/System/Reflection/InterfaceMapping.cs
+++ b/src/mscorlib/src/System/Reflection/InterfaceMapping.cs
@@ -13,15 +13,10 @@
namespace System.Reflection {
using System;
-[System.Runtime.InteropServices.ComVisible(true)]
public struct InterfaceMapping {
-[System.Runtime.InteropServices.ComVisible(true)]
public Type TargetType; // The type implementing the interface
-[System.Runtime.InteropServices.ComVisible(true)]
public Type InterfaceType; // The type representing the interface
-[System.Runtime.InteropServices.ComVisible(true)]
public MethodInfo[] TargetMethods; // The methods implementing the interface
-[System.Runtime.InteropServices.ComVisible(true)]
public MethodInfo[] InterfaceMethods; // The methods defined on the interface
}
}
diff --git a/src/mscorlib/src/System/Reflection/InvalidFilterCriteriaException.cs b/src/mscorlib/src/System/Reflection/InvalidFilterCriteriaException.cs
index fa95e37ad5..8b8c06d9cf 100644
--- a/src/mscorlib/src/System/Reflection/InvalidFilterCriteriaException.cs
+++ b/src/mscorlib/src/System/Reflection/InvalidFilterCriteriaException.cs
@@ -18,7 +18,6 @@ namespace System.Reflection {
using System.Runtime.Serialization;
using ApplicationException = System.ApplicationException;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class InvalidFilterCriteriaException : ApplicationException {
public InvalidFilterCriteriaException()
: base(Environment.GetResourceString("Arg_InvalidFilterCriteriaException")) {
diff --git a/src/mscorlib/src/System/Reflection/ManifestResourceInfo.cs b/src/mscorlib/src/System/Reflection/ManifestResourceInfo.cs
index a53d32abdb..91c7ceb2ea 100644
--- a/src/mscorlib/src/System/Reflection/ManifestResourceInfo.cs
+++ b/src/mscorlib/src/System/Reflection/ManifestResourceInfo.cs
@@ -16,7 +16,6 @@
namespace System.Reflection {
using System;
-[System.Runtime.InteropServices.ComVisible(true)]
public class ManifestResourceInfo {
private Assembly _containingAssembly;
private String _containingFileName;
@@ -57,7 +56,6 @@ namespace System.Reflection {
// Linked means not Embedded.
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum ResourceLocation
{
Embedded = 0x1,
diff --git a/src/mscorlib/src/System/Reflection/MdImport.cs b/src/mscorlib/src/System/Reflection/MdImport.cs
index bbdf948f99..b1d9c5eae8 100644
--- a/src/mscorlib/src/System/Reflection/MdImport.cs
+++ b/src/mscorlib/src/System/Reflection/MdImport.cs
@@ -9,7 +9,6 @@ using System.Reflection;
using System.Globalization;
using System.Threading;
using System.Diagnostics;
-using System.Security.Permissions;
using System.Collections;
using System.Runtime.CompilerServices;
using System.Security;
@@ -408,7 +407,7 @@ namespace System.Reflection
return null;
char[] c = new char[length];
- for (int i = 0; i < length; i ++)
+ for (int i = 0; i < c.Length; i ++)
{
#if ALIGN_ACCESS
c[i] = (char)Marshal.ReadInt16( (IntPtr) (((char*)name) + i) );
diff --git a/src/mscorlib/src/System/Reflection/MemberFilter.cs b/src/mscorlib/src/System/Reflection/MemberFilter.cs
index b476409d5d..56fc9c0804 100644
--- a/src/mscorlib/src/System/Reflection/MemberFilter.cs
+++ b/src/mscorlib/src/System/Reflection/MemberFilter.cs
@@ -14,6 +14,5 @@ namespace System.Reflection {
// Define the delegate
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate bool MemberFilter(MemberInfo m, Object filterCriteria);
}
diff --git a/src/mscorlib/src/System/Reflection/MemberInfo.cs b/src/mscorlib/src/System/Reflection/MemberInfo.cs
index 96a89ad37b..5ecbfe06a1 100644
--- a/src/mscorlib/src/System/Reflection/MemberInfo.cs
+++ b/src/mscorlib/src/System/Reflection/MemberInfo.cs
@@ -11,13 +11,9 @@ namespace System.Reflection
using System.Diagnostics.Contracts;
using System.Runtime;
using System.Runtime.InteropServices;
- using System.Security.Permissions;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_MemberInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class MemberInfo : ICustomAttributeProvider, _MemberInfo
+ public abstract class MemberInfo : ICustomAttributeProvider
{
#region Constructor
protected MemberInfo() { }
diff --git a/src/mscorlib/src/System/Reflection/MemberTypes.cs b/src/mscorlib/src/System/Reflection/MemberTypes.cs
index 352a80244e..95c41022f1 100644
--- a/src/mscorlib/src/System/Reflection/MemberTypes.cs
+++ b/src/mscorlib/src/System/Reflection/MemberTypes.cs
@@ -17,7 +17,6 @@ namespace System.Reflection {
// This Enum matchs the CorTypeAttr defined in CorHdr.h
[Serializable]
[Flags()]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum MemberTypes
{
// The following are the known classes which extend MemberInfo
diff --git a/src/mscorlib/src/System/Reflection/MethodAttributes.cs b/src/mscorlib/src/System/Reflection/MethodAttributes.cs
index 92b637b9c0..7e4391cccd 100644
--- a/src/mscorlib/src/System/Reflection/MethodAttributes.cs
+++ b/src/mscorlib/src/System/Reflection/MethodAttributes.cs
@@ -10,7 +10,6 @@ namespace System.Reflection
using System;
[Serializable]
[Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum MethodAttributes
{
// NOTE: This Enum matchs the CorMethodAttr defined in CorHdr.h
diff --git a/src/mscorlib/src/System/Reflection/MethodBase.cs b/src/mscorlib/src/System/Reflection/MethodBase.cs
index 644a1ac0b0..3109821ac9 100644
--- a/src/mscorlib/src/System/Reflection/MethodBase.cs
+++ b/src/mscorlib/src/System/Reflection/MethodBase.cs
@@ -11,7 +11,6 @@ namespace System.Reflection
using System.Globalization;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
- using System.Security.Permissions;
using System.Text;
using System.Threading;
@@ -48,10 +47,7 @@ namespace System.Reflection
}
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_MethodBase))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class MethodBase : MemberInfo, _MethodBase
+ public abstract class MethodBase : MemberInfo
{
#region Static Members
public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle)
@@ -70,7 +66,6 @@ namespace System.Reflection
return m;
}
- [System.Runtime.InteropServices.ComVisible(false)]
public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle, RuntimeTypeHandle declaringType)
{
if (handle.IsNullHandle())
@@ -131,20 +126,6 @@ namespace System.Reflection
private IntPtr GetMethodDesc() { return MethodHandle.Value; }
#if FEATURE_APPX
-
- // The C# dynamic and VB late bound binders need to call this API. Since we don't have time to make this
- // public in Dev11, the C# and VB binders currently call this through a delegate.
- // When we make this API public (hopefully) in Dev12 we need to change the C# and VB binders to call this
- // probably statically. The code is located in:
- // C#: ndp\fx\src\CSharp\Microsoft\CSharp\SymbolTable.cs - Microsoft.CSharp.RuntimeBinder.SymbolTable..cctor
- // VB: vb\runtime\msvbalib\helpers\Symbols.vb - Microsoft.VisualBasic.CompilerServices.Symbols..cctor
- internal virtual bool IsDynamicallyInvokable
- {
- get
- {
- return true;
- }
- }
#endif
#endregion
@@ -172,7 +153,6 @@ namespace System.Reflection
public virtual CallingConventions CallingConvention { get { return CallingConventions.Standard; } }
- [System.Runtime.InteropServices.ComVisible(true)]
public virtual Type[] GetGenericArguments() { throw new NotSupportedException(Environment.GetResourceString("NotSupported_SubclassOverride")); }
public virtual bool IsGenericMethodDefinition { get { return false; } }
@@ -227,7 +207,6 @@ namespace System.Reflection
public bool IsSpecialName { get { return(Attributes & MethodAttributes.SpecialName) != 0; } }
- [System.Runtime.InteropServices.ComVisible(true)]
public bool IsConstructor
{
get
@@ -239,9 +218,6 @@ namespace System.Reflection
}
}
-#pragma warning disable 618
- [ReflectionPermissionAttribute(SecurityAction.Demand, Flags=ReflectionPermissionFlag.MemberAccess)]
-#pragma warning restore 618
public virtual MethodBody GetMethodBody()
{
throw new InvalidOperationException();
@@ -269,7 +245,7 @@ namespace System.Reflection
// Why don't we just use "&"?
if (t.IsByRef && !serialization)
{
- sbParamList.Append(typeName.TrimEnd(new char[] { '&' }));
+ sbParamList.Append(typeName.TrimEnd('&'));
sbParamList.Append(" ByRef");
}
else
diff --git a/src/mscorlib/src/System/Reflection/MethodBody.cs b/src/mscorlib/src/System/Reflection/MethodBody.cs
index 4634623e26..7cbaeaf9b9 100644
--- a/src/mscorlib/src/System/Reflection/MethodBody.cs
+++ b/src/mscorlib/src/System/Reflection/MethodBody.cs
@@ -13,7 +13,6 @@ using System.Diagnostics.Contracts;
namespace System.Reflection
{
[Flags()]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum ExceptionHandlingClauseOptions: int
{
Clause = 0x0,
@@ -22,7 +21,6 @@ namespace System.Reflection
Fault = 0x4,
}
- [System.Runtime.InteropServices.ComVisible(true)]
public class ExceptionHandlingClause
{
#region costructor
@@ -107,7 +105,6 @@ namespace System.Reflection
#endregion
}
- [System.Runtime.InteropServices.ComVisible(true)]
public class MethodBody
{
#region costructor
@@ -135,7 +132,6 @@ namespace System.Reflection
#endregion
}
- [System.Runtime.InteropServices.ComVisible(true)]
public class LocalVariableInfo
{
#region Private Data Members
diff --git a/src/mscorlib/src/System/Reflection/MethodImplAttributes.cs b/src/mscorlib/src/System/Reflection/MethodImplAttributes.cs
index 0fa4d00f19..1bd6b9dbd1 100644
--- a/src/mscorlib/src/System/Reflection/MethodImplAttributes.cs
+++ b/src/mscorlib/src/System/Reflection/MethodImplAttributes.cs
@@ -10,7 +10,6 @@ namespace System.Reflection
using System;
// This Enum matchs the CorMethodImpl defined in CorHdr.h
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum MethodImplAttributes
{
// code impl mask
@@ -36,7 +35,6 @@ namespace System.Reflection
Synchronized = 0x0020, // Method is single threaded through the body.
NoInlining = 0x0008, // Method may not be inlined.
- [System.Runtime.InteropServices.ComVisible(false)]
AggressiveInlining = 0x0100, // Method should be inlined if possible.
NoOptimization = 0x0040, // Method may not be optimized.
diff --git a/src/mscorlib/src/System/Reflection/MethodInfo.cs b/src/mscorlib/src/System/Reflection/MethodInfo.cs
index 39387b1f8f..5ce124614c 100644
--- a/src/mscorlib/src/System/Reflection/MethodInfo.cs
+++ b/src/mscorlib/src/System/Reflection/MethodInfo.cs
@@ -16,7 +16,6 @@ namespace System.Reflection
using System.Runtime.ConstrainedExecution;
using System.Runtime.Serialization;
using System.Security;
- using System.Security.Permissions;
using System.Text;
using System.Threading;
using MemberListType = System.RuntimeType.MemberListType;
@@ -24,10 +23,7 @@ namespace System.Reflection
using System.Runtime.CompilerServices;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_MethodInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class MethodInfo : MethodBase, _MethodInfo
+ public abstract class MethodInfo : MethodBase
{
#region Constructor
protected MethodInfo() { }
@@ -74,10 +70,8 @@ namespace System.Reflection
public abstract MethodInfo GetBaseDefinition();
- [System.Runtime.InteropServices.ComVisible(true)]
public override Type[] GetGenericArguments() { throw new NotSupportedException(Environment.GetResourceString("NotSupported_SubclassOverride")); }
- [System.Runtime.InteropServices.ComVisible(true)]
public virtual MethodInfo GetGenericMethodDefinition() { throw new NotSupportedException(Environment.GetResourceString("NotSupported_SubclassOverride")); }
public virtual MethodInfo MakeGenericMethod(params Type[] typeArguments) { throw new NotSupportedException(Environment.GetResourceString("NotSupported_SubclassOverride")); }
@@ -133,14 +127,6 @@ namespace System.Reflection
return false;
}
-
- internal override bool IsDynamicallyInvokable
- {
- get
- {
- return !AppDomain.ProfileAPICheck || !IsNonW8PFrameworkAPI();
- }
- }
#endif
internal INVOCATION_FLAGS InvocationFlags
@@ -279,7 +265,6 @@ namespace System.Reflection
return sbName.ToString();
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal override bool CacheEquals(object o)
{
RuntimeMethodInfo m = o as RuntimeMethodInfo;
@@ -303,12 +288,6 @@ namespace System.Reflection
internal BindingFlags BindingFlags { get { return m_bindingFlags; } }
- // Differs from MethodHandle in that it will return a valid handle even for reflection only loaded types
- internal RuntimeMethodHandle GetMethodHandle()
- {
- return new RuntimeMethodHandle(this);
- }
-
internal RuntimeMethodInfo GetParentDefinition()
{
if (!IsVirtual || m_declaringType.IsInterface)
@@ -522,14 +501,6 @@ namespace System.Reflection
return RuntimeMethodHandle.GetImplAttributes(this);
}
- internal bool IsOverloaded
- {
- get
- {
- return m_reflectedTypeCache.GetMethodList(MemberListType.CaseSensitive, Name).Length > 1;
- }
- }
-
public override RuntimeMethodHandle MethodHandle
{
get
diff --git a/src/mscorlib/src/System/Reflection/Missing.cs b/src/mscorlib/src/System/Reflection/Missing.cs
index 24bf77bd4e..f62c5b538c 100644
--- a/src/mscorlib/src/System/Reflection/Missing.cs
+++ b/src/mscorlib/src/System/Reflection/Missing.cs
@@ -9,12 +9,10 @@ namespace System.Reflection
using System;
using System.Runtime.Remoting;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
// This is not serializable because it is a reflection command.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class Missing : ISerializable
{
public static readonly Missing Value = new Missing();
diff --git a/src/mscorlib/src/System/Reflection/Module.cs b/src/mscorlib/src/System/Reflection/Module.cs
index b6be38e434..bdf95fca26 100644
--- a/src/mscorlib/src/System/Reflection/Module.cs
+++ b/src/mscorlib/src/System/Reflection/Module.cs
@@ -17,7 +17,6 @@ namespace System.Reflection
using System.Threading;
using System.Runtime.CompilerServices;
using System.Security;
- using System.Security.Permissions;
using System.IO;
using System.Globalization;
using System.Runtime.Versioning;
@@ -25,7 +24,6 @@ namespace System.Reflection
[Serializable]
[Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum PortableExecutableKinds
{
NotAPortableExecutableImage = 0x0,
@@ -38,12 +36,10 @@ namespace System.Reflection
Unmanaged32Bit = 0x8,
- [ComVisible(false)]
Preferred32Bit = 0x10,
}
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum ImageFileMachine
{
I386 = 0x014c,
@@ -56,10 +52,7 @@ namespace System.Reflection
}
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_Module))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class Module : _Module, ISerializable, ICustomAttributeProvider
+ public abstract class Module : ISerializable, ICustomAttributeProvider
{
#region Static Constructor
static Module()
@@ -276,18 +269,15 @@ namespace System.Reflection
throw new NotImplementedException();
}
- [System.Runtime.InteropServices.ComVisible(true)]
public virtual Type GetType(String className, bool ignoreCase)
{
return GetType(className, false, ignoreCase);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public virtual Type GetType(String className) {
return GetType(className, false, false);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public virtual Type GetType(String className, bool throwOnError, bool ignoreCase)
{
throw new NotImplementedException();
@@ -983,7 +973,6 @@ namespace System.Reflection
UnitySerializationHolder.GetUnitySerializationInfo(info, UnitySerializationHolder.ModuleUnity, this.ScopeName, this.GetRuntimeAssembly());
}
- [System.Runtime.InteropServices.ComVisible(true)]
public override Type GetType(String className, bool throwOnError, bool ignoreCase)
{
// throw on null strings regardless of the value of "throwOnError"
@@ -1008,22 +997,7 @@ namespace System.Reflection
{
get
{
- String fullyQualifiedName = GetFullyQualifiedName();
-
- if (fullyQualifiedName != null) {
- bool checkPermission = true;
- try {
- Path.GetFullPath(fullyQualifiedName);
- }
- catch(ArgumentException) {
- checkPermission = false;
- }
- if (checkPermission) {
- new FileIOPermission( FileIOPermissionAccess.PathDiscovery, fullyQualifiedName ).Demand();
- }
- }
-
- return fullyQualifiedName;
+ return GetFullyQualifiedName();
}
}
diff --git a/src/mscorlib/src/System/Reflection/ObfuscateAssemblyAttribute.cs b/src/mscorlib/src/System/Reflection/ObfuscateAssemblyAttribute.cs
index b852e5a4c2..787f37bced 100644
--- a/src/mscorlib/src/System/Reflection/ObfuscateAssemblyAttribute.cs
+++ b/src/mscorlib/src/System/Reflection/ObfuscateAssemblyAttribute.cs
@@ -11,7 +11,6 @@ using System.Reflection;
namespace System.Reflection
{
[AttributeUsage (AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ObfuscateAssemblyAttribute : Attribute
{
private bool m_assemblyIsPrivate;
diff --git a/src/mscorlib/src/System/Reflection/ObfuscationAttribute.cs b/src/mscorlib/src/System/Reflection/ObfuscationAttribute.cs
index 0b987ce06d..c7c7c18550 100644
--- a/src/mscorlib/src/System/Reflection/ObfuscationAttribute.cs
+++ b/src/mscorlib/src/System/Reflection/ObfuscationAttribute.cs
@@ -11,7 +11,6 @@ namespace System.Reflection
{
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Enum | AttributeTargets.Delegate,
AllowMultiple = true, Inherited = false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ObfuscationAttribute: Attribute
{
private bool m_strip = true;
diff --git a/src/mscorlib/src/System/Reflection/ParameterAttributes.cs b/src/mscorlib/src/System/Reflection/ParameterAttributes.cs
index 12f8145ddd..acae3a6ec1 100644
--- a/src/mscorlib/src/System/Reflection/ParameterAttributes.cs
+++ b/src/mscorlib/src/System/Reflection/ParameterAttributes.cs
@@ -16,7 +16,6 @@ namespace System.Reflection {
// This Enum matchs the CorParamAttr defined in CorHdr.h
[Serializable]
[Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum ParameterAttributes
{
None = 0x0000, // no flag is specified
diff --git a/src/mscorlib/src/System/Reflection/ParameterInfo.cs b/src/mscorlib/src/System/Reflection/ParameterInfo.cs
index 6592e5aa20..fad4402aff 100644
--- a/src/mscorlib/src/System/Reflection/ParameterInfo.cs
+++ b/src/mscorlib/src/System/Reflection/ParameterInfo.cs
@@ -13,15 +13,11 @@ namespace System.Reflection
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.CompilerServices;
- using System.Security.Permissions;
using System.Threading;
using MdToken = System.Reflection.MetadataToken;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_ParameterInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class ParameterInfo : _ParameterInfo, ICustomAttributeProvider, IObjectReference
+ public class ParameterInfo : ICustomAttributeProvider, IObjectReference
{
#region Legacy Protected Members
protected String NameImpl;
diff --git a/src/mscorlib/src/System/Reflection/ParameterModifier.cs b/src/mscorlib/src/System/Reflection/ParameterModifier.cs
index 97da1b9e00..a2bfeab934 100644
--- a/src/mscorlib/src/System/Reflection/ParameterModifier.cs
+++ b/src/mscorlib/src/System/Reflection/ParameterModifier.cs
@@ -7,7 +7,6 @@ namespace System.Reflection
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct ParameterModifier
{
#region Private Data Members
diff --git a/src/mscorlib/src/System/Reflection/Pointer.cs b/src/mscorlib/src/System/Reflection/Pointer.cs
index 95025b20ed..9f1a38366a 100644
--- a/src/mscorlib/src/System/Reflection/Pointer.cs
+++ b/src/mscorlib/src/System/Reflection/Pointer.cs
@@ -19,7 +19,6 @@ namespace System.Reflection {
[CLSCompliant(false)]
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class Pointer : ISerializable
{
unsafe private void* _ptr;
diff --git a/src/mscorlib/src/System/Reflection/PropertyAttributes.cs b/src/mscorlib/src/System/Reflection/PropertyAttributes.cs
index d7c3d79b6a..4a5617ba5e 100644
--- a/src/mscorlib/src/System/Reflection/PropertyAttributes.cs
+++ b/src/mscorlib/src/System/Reflection/PropertyAttributes.cs
@@ -16,7 +16,6 @@ namespace System.Reflection {
// This Enum matchs the CorPropertyAttr defined in CorHdr.h
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum PropertyAttributes
{
None = 0x0000,
diff --git a/src/mscorlib/src/System/Reflection/PropertyInfo.cs b/src/mscorlib/src/System/Reflection/PropertyInfo.cs
index e31b378924..e8c2837785 100644
--- a/src/mscorlib/src/System/Reflection/PropertyInfo.cs
+++ b/src/mscorlib/src/System/Reflection/PropertyInfo.cs
@@ -15,15 +15,11 @@ namespace System.Reflection
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Text;
using RuntimeTypeCache = System.RuntimeType.RuntimeTypeCache;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_PropertyInfo))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class PropertyInfo : MemberInfo, _PropertyInfo
+ public abstract class PropertyInfo : MemberInfo
{
#region Constructor
protected PropertyInfo() { }
@@ -196,7 +192,6 @@ namespace System.Reflection
#endregion
#region Internal Members
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal override bool CacheEquals(object o)
{
RuntimePropertyInfo m = o as RuntimePropertyInfo;
diff --git a/src/mscorlib/src/System/Reflection/ReflectionTypeLoadException.cs b/src/mscorlib/src/System/Reflection/ReflectionTypeLoadException.cs
index 70681138c5..cccf060645 100644
--- a/src/mscorlib/src/System/Reflection/ReflectionTypeLoadException.cs
+++ b/src/mscorlib/src/System/Reflection/ReflectionTypeLoadException.cs
@@ -19,10 +19,8 @@ namespace System.Reflection {
using System;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class ReflectionTypeLoadException : SystemException, ISerializable {
private Type[] _classes;
private Exception[] _exceptions;
@@ -33,11 +31,6 @@ namespace System.Reflection {
SetErrorCode(__HResults.COR_E_REFLECTIONTYPELOAD);
}
- // private constructor. This is called from inside the runtime.
- private ReflectionTypeLoadException(String message) : base(message) {
- SetErrorCode(__HResults.COR_E_REFLECTIONTYPELOAD);
- }
-
public ReflectionTypeLoadException(Type[] classes, Exception[] exceptions) : base(null)
{
_classes = classes;
diff --git a/src/mscorlib/src/System/Reflection/ResourceAttributes.cs b/src/mscorlib/src/System/Reflection/ResourceAttributes.cs
index 646572677f..5c419ebb2d 100644
--- a/src/mscorlib/src/System/Reflection/ResourceAttributes.cs
+++ b/src/mscorlib/src/System/Reflection/ResourceAttributes.cs
@@ -15,7 +15,6 @@ namespace System.Reflection {
using System;
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum ResourceAttributes
{
Public = 0x0001,
diff --git a/src/mscorlib/src/System/Reflection/RuntimeReflectionExtensions.cs b/src/mscorlib/src/System/Reflection/RuntimeReflectionExtensions.cs
index 00ab975842..49262634e3 100644
--- a/src/mscorlib/src/System/Reflection/RuntimeReflectionExtensions.cs
+++ b/src/mscorlib/src/System/Reflection/RuntimeReflectionExtensions.cs
@@ -10,16 +10,16 @@ namespace System.Reflection
{
private const BindingFlags everything = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;
- private static void CheckAndThrow(Type t)
+ private static void CheckAndThrow(Type type)
{
- if (t == null) throw new ArgumentNullException("type");
- if (!(t is RuntimeType)) throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeType"));
+ if (type == null) throw new ArgumentNullException(nameof(type));
+ if (!(type is RuntimeType)) throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeType"));
}
- private static void CheckAndThrow(MethodInfo m)
+ private static void CheckAndThrow(MethodInfo method)
{
- if (m == null) throw new ArgumentNullException("method");
- if (!(m is RuntimeMethodInfo)) throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeMethodInfo"));
+ if (method == null) throw new ArgumentNullException(nameof(method));
+ if (!(method is RuntimeMethodInfo)) throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeMethodInfo"));
}
public static IEnumerable<PropertyInfo> GetRuntimeProperties(this Type type)
diff --git a/src/mscorlib/src/System/Reflection/StrongNameKeyPair.cs b/src/mscorlib/src/System/Reflection/StrongNameKeyPair.cs
index 8107cf4159..0121982489 100644
--- a/src/mscorlib/src/System/Reflection/StrongNameKeyPair.cs
+++ b/src/mscorlib/src/System/Reflection/StrongNameKeyPair.cs
@@ -22,13 +22,11 @@ namespace System.Reflection
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security;
- using System.Security.Permissions;
using System.Runtime.Versioning;
using Microsoft.Win32;
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class StrongNameKeyPair : IDeserializationCallback, ISerializable
{
private bool _keyPairExported;
diff --git a/src/mscorlib/src/System/Reflection/TargetException.cs b/src/mscorlib/src/System/Reflection/TargetException.cs
index 9c56c121cc..dcbb38833e 100644
--- a/src/mscorlib/src/System/Reflection/TargetException.cs
+++ b/src/mscorlib/src/System/Reflection/TargetException.cs
@@ -18,7 +18,6 @@ namespace System.Reflection {
using System;
using System.Runtime.Serialization;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class TargetException : ApplicationException {
public TargetException() : base() {
SetErrorCode(__HResults.COR_E_TARGET);
diff --git a/src/mscorlib/src/System/Reflection/TargetInvocationException.cs b/src/mscorlib/src/System/Reflection/TargetInvocationException.cs
index 4a32ed245d..7bbc93df2a 100644
--- a/src/mscorlib/src/System/Reflection/TargetInvocationException.cs
+++ b/src/mscorlib/src/System/Reflection/TargetInvocationException.cs
@@ -18,7 +18,6 @@ namespace System.Reflection {
using System;
using System.Runtime.Serialization;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class TargetInvocationException : ApplicationException {
// This exception is not creatable without specifying the
// inner exception.
diff --git a/src/mscorlib/src/System/Reflection/TargetParameterCountException.cs b/src/mscorlib/src/System/Reflection/TargetParameterCountException.cs
index 846732b449..7a07b20acd 100644
--- a/src/mscorlib/src/System/Reflection/TargetParameterCountException.cs
+++ b/src/mscorlib/src/System/Reflection/TargetParameterCountException.cs
@@ -18,7 +18,6 @@ namespace System.Reflection {
using SystemException = System.SystemException;
using System.Runtime.Serialization;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class TargetParameterCountException : ApplicationException {
public TargetParameterCountException()
: base(Environment.GetResourceString("Arg_TargetParameterCountException")) {
diff --git a/src/mscorlib/src/System/Reflection/TypeAttributes.cs b/src/mscorlib/src/System/Reflection/TypeAttributes.cs
index 4fa6fb06ba..25aa113d2e 100644
--- a/src/mscorlib/src/System/Reflection/TypeAttributes.cs
+++ b/src/mscorlib/src/System/Reflection/TypeAttributes.cs
@@ -8,7 +8,6 @@ namespace System.Reflection {
// This Enum matchs the CorTypeAttr defined in CorHdr.h
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum TypeAttributes
{
VisibilityMask = 0x00000007,
@@ -43,7 +42,6 @@ namespace System.Reflection {
Import = 0x00001000, // Class / interface is imported
Serializable = 0x00002000, // The class is Serializable.
- [ComVisible(false)]
WindowsRuntime = 0x00004000, // Type is a Windows Runtime type.
// Use tdStringFormatMask to retrieve string information for native interop
diff --git a/src/mscorlib/src/System/Reflection/TypeDelegator.cs b/src/mscorlib/src/System/Reflection/TypeDelegator.cs
index d715df8950..6a77a95853 100644
--- a/src/mscorlib/src/System/Reflection/TypeDelegator.cs
+++ b/src/mscorlib/src/System/Reflection/TypeDelegator.cs
@@ -14,7 +14,6 @@ namespace System.Reflection {
using CultureInfo = System.Globalization.CultureInfo;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public class TypeDelegator : TypeInfo
{
public override bool IsAssignableFrom(System.Reflection.TypeInfo typeInfo){
@@ -86,7 +85,6 @@ namespace System.Reflection {
return typeImpl.GetConstructor(bindingAttr,binder,callConvention,types,modifiers);
}
-[System.Runtime.InteropServices.ComVisible(true)]
public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
{
return typeImpl.GetConstructors(bindingAttr);
@@ -251,7 +249,6 @@ namespace System.Reflection {
return typeImpl.IsDefined(attributeType, inherit);
}
-[System.Runtime.InteropServices.ComVisible(true)]
public override InterfaceMapping GetInterfaceMap(Type interfaceType)
{
return typeImpl.GetInterfaceMap(interfaceType);
diff --git a/src/mscorlib/src/System/Reflection/TypeFilter.cs b/src/mscorlib/src/System/Reflection/TypeFilter.cs
index 560618ff79..4837a303a1 100644
--- a/src/mscorlib/src/System/Reflection/TypeFilter.cs
+++ b/src/mscorlib/src/System/Reflection/TypeFilter.cs
@@ -14,6 +14,5 @@ namespace System.Reflection {
// Define the delegate
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate bool TypeFilter(Type m, Object filterCriteria);
}
diff --git a/src/mscorlib/src/System/Reflection/TypeInfo.cs b/src/mscorlib/src/System/Reflection/TypeInfo.cs
index 706fb0a61a..61d7bb27a9 100644
--- a/src/mscorlib/src/System/Reflection/TypeInfo.cs
+++ b/src/mscorlib/src/System/Reflection/TypeInfo.cs
@@ -22,7 +22,6 @@ namespace System.Reflection
//all today's runtime Type derivations derive now from TypeInfo
//we make TypeInfo implement IRCT - simplifies work
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public abstract class TypeInfo:Type,IReflectableType
{
diff --git a/src/mscorlib/src/System/Resources/FileBasedResourceGroveler.cs b/src/mscorlib/src/System/Resources/FileBasedResourceGroveler.cs
index 76bf0008f9..c5e92165f1 100644
--- a/src/mscorlib/src/System/Resources/FileBasedResourceGroveler.cs
+++ b/src/mscorlib/src/System/Resources/FileBasedResourceGroveler.cs
@@ -47,36 +47,28 @@ namespace System.Resources {
ResourceSet rs = null;
// Don't use Assembly manifest, but grovel on disk for a file.
- try
- {
- new System.Security.Permissions.FileIOPermission(System.Security.Permissions.PermissionState.Unrestricted).Assert();
- // Create new ResourceSet, if a file exists on disk for it.
- String tempFileName = _mediator.GetResourceFileName(culture);
- fileName = FindResourceFile(culture, tempFileName);
- if (fileName == null)
+ // Create new ResourceSet, if a file exists on disk for it.
+ String tempFileName = _mediator.GetResourceFileName(culture);
+ fileName = FindResourceFile(culture, tempFileName);
+ if (fileName == null)
+ {
+ if (tryParents)
{
- if (tryParents)
+ // If we've hit top of the Culture tree, return.
+ if (culture.HasInvariantCultureName)
{
- // If we've hit top of the Culture tree, return.
- if (culture.HasInvariantCultureName)
- {
- // We really don't think this should happen - we always
- // expect the neutral locale's resources to be present.
- throw new MissingManifestResourceException(Environment.GetResourceString("MissingManifestResource_NoNeutralDisk") + Environment.NewLine + "baseName: " + _mediator.BaseNameField + " locationInfo: " + (_mediator.LocationInfo == null ? "<null>" : _mediator.LocationInfo.FullName) + " fileName: " + _mediator.GetResourceFileName(culture));
- }
+ // We really don't think this should happen - we always
+ // expect the neutral locale's resources to be present.
+ throw new MissingManifestResourceException(Environment.GetResourceString("MissingManifestResource_NoNeutralDisk") + Environment.NewLine + "baseName: " + _mediator.BaseNameField + " locationInfo: " + (_mediator.LocationInfo == null ? "<null>" : _mediator.LocationInfo.FullName) + " fileName: " + _mediator.GetResourceFileName(culture));
}
}
- else
- {
- rs = CreateResourceSet(fileName);
- }
- return rs;
}
- finally
+ else
{
- System.Security.CodeAccessPermission.RevertAssert();
+ rs = CreateResourceSet(fileName);
}
+ return rs;
}
// Given a CultureInfo, it generates the path &; file name for
diff --git a/src/mscorlib/src/System/Resources/IResourceReader.cs b/src/mscorlib/src/System/Resources/IResourceReader.cs
index 7ab25ec1a0..de8f9db18e 100644
--- a/src/mscorlib/src/System/Resources/IResourceReader.cs
+++ b/src/mscorlib/src/System/Resources/IResourceReader.cs
@@ -17,7 +17,6 @@ namespace System.Resources {
using System.IO;
using System.Collections;
- [System.Runtime.InteropServices.ComVisible(true)]
public interface IResourceReader : IEnumerable, IDisposable
{
// Interface does not need to be marked with the serializable attribute
diff --git a/src/mscorlib/src/System/Resources/IResourceWriter.cs b/src/mscorlib/src/System/Resources/IResourceWriter.cs
deleted file mode 100644
index ae41b84cd7..0000000000
--- a/src/mscorlib/src/System/Resources/IResourceWriter.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-**
-**
-** Purpose: Default way to write strings to a COM+ resource
-** file.
-**
-**
-===========================================================*/
-namespace System.Resources {
- using System;
- using System.IO;
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface IResourceWriter : IDisposable
- {
- // Interface does not need to be marked with the serializable attribute
- // Adds a string resource to the list of resources to be written to a file.
- // They aren't written until WriteFile() is called.
- //
- void AddResource(String name, String value);
-
- // Adds a resource to the list of resources to be written to a file.
- // They aren't written until WriteFile() is called.
- //
- void AddResource(String name, Object value);
-
- // Adds a named byte array as a resource to the list of resources to
- // be written to a file. They aren't written until WriteFile() is called.
- //
- void AddResource(String name, byte[] value);
-
- // Closes the underlying resource file.
- void Close();
-
- // After calling AddResource, this writes all resources to the output
- // stream. This does NOT close the output stream.
- void Generate();
- }
-}
diff --git a/src/mscorlib/src/System/Resources/LooselyLinkedResourceReference.cs b/src/mscorlib/src/System/Resources/LooselyLinkedResourceReference.cs
index 15a076bc5c..9287ae4590 100644
--- a/src/mscorlib/src/System/Resources/LooselyLinkedResourceReference.cs
+++ b/src/mscorlib/src/System/Resources/LooselyLinkedResourceReference.cs
@@ -28,7 +28,6 @@ namespace System.Resources {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct LooselyLinkedResourceReference {
private String _manifestResourceName;
private String _typeName;
diff --git a/src/mscorlib/src/System/Resources/MissingManifestResourceException.cs b/src/mscorlib/src/System/Resources/MissingManifestResourceException.cs
index e616bfe68b..2e82f19c7b 100644
--- a/src/mscorlib/src/System/Resources/MissingManifestResourceException.cs
+++ b/src/mscorlib/src/System/Resources/MissingManifestResourceException.cs
@@ -18,7 +18,6 @@ using System.Runtime.Serialization;
namespace System.Resources {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class MissingManifestResourceException : SystemException
{
public MissingManifestResourceException()
diff --git a/src/mscorlib/src/System/Resources/MissingSatelliteAssemblyException.cs b/src/mscorlib/src/System/Resources/MissingSatelliteAssemblyException.cs
index 3d59f856b1..fc676a8dd5 100644
--- a/src/mscorlib/src/System/Resources/MissingSatelliteAssemblyException.cs
+++ b/src/mscorlib/src/System/Resources/MissingSatelliteAssemblyException.cs
@@ -20,7 +20,6 @@ using System.Runtime.Serialization;
namespace System.Resources {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class MissingSatelliteAssemblyException : SystemException
{
private String _cultureName;
diff --git a/src/mscorlib/src/System/Resources/NeutralResourcesLanguageAttribute.cs b/src/mscorlib/src/System/Resources/NeutralResourcesLanguageAttribute.cs
index 6517a56b6a..a2ed6fbd57 100644
--- a/src/mscorlib/src/System/Resources/NeutralResourcesLanguageAttribute.cs
+++ b/src/mscorlib/src/System/Resources/NeutralResourcesLanguageAttribute.cs
@@ -26,7 +26,6 @@ namespace System.Resources {
using System.Diagnostics.Contracts;
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple=false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class NeutralResourcesLanguageAttribute : Attribute
{
private String _culture;
diff --git a/src/mscorlib/src/System/Resources/ResourceManager.cs b/src/mscorlib/src/System/Resources/ResourceManager.cs
index 15f6af7bcf..f17a7c8f8e 100644
--- a/src/mscorlib/src/System/Resources/ResourceManager.cs
+++ b/src/mscorlib/src/System/Resources/ResourceManager.cs
@@ -23,7 +23,6 @@ namespace System.Resources {
using System.Reflection;
using System.Runtime.Serialization;
using System.Security;
- using System.Security.Permissions;
using System.Threading;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
@@ -149,7 +148,6 @@ namespace System.Resources {
//
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class ResourceManager
{
@@ -162,7 +160,7 @@ namespace System.Resources {
// Sets is a many-to-one table of CultureInfos mapped to ResourceSets.
// Don't synchronize ResourceSets - too fine-grained a lock to be effective
[Obsolete("call InternalGetResourceSet instead")]
- protected Hashtable ResourceSets;
+ internal Hashtable ResourceSets;
// don't serialize the cache of ResourceSets
@@ -738,48 +736,9 @@ namespace System.Resources {
}
Contract.EndContractBlock();
-#if !FEATURE_WINDOWSPHONE
- String v = null;
- if (a.ReflectionOnly) {
- foreach (CustomAttributeData data in CustomAttributeData.GetCustomAttributes(a)) {
- if (data.Constructor.DeclaringType == typeof(SatelliteContractVersionAttribute)) {
- v = (String)data.ConstructorArguments[0].Value;
- break;
- }
- }
-
- if (v == null)
- return null;
- }
- else {
- Object[] attrs = a.GetCustomAttributes(typeof(SatelliteContractVersionAttribute), false);
- if (attrs.Length == 0)
- return null;
- Debug.Assert(attrs.Length == 1, "Cannot have multiple instances of SatelliteContractVersionAttribute on an assembly!");
- v = ((SatelliteContractVersionAttribute)attrs[0]).Version;
- }
- Version ver;
- try {
- ver = new Version(v);
- }
- catch(ArgumentOutOfRangeException e) {
- // Note we are prone to hitting infinite loops if mscorlib's
- // SatelliteContractVersionAttribute contains bogus values.
- // If this assert fires, please fix the build process for the
- // BCL directory.
- if (a == typeof(Object).Assembly) {
- Debug.Assert(false, System.CoreLib.Name+"'s SatelliteContractVersionAttribute is a malformed version string!");
- return null;
- }
-
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidSatelliteContract_Asm_Ver", a.ToString(), v), e);
- }
- return ver;
-#else
- // On the phone return null. The calling code will use the assembly version instead to avoid potential type
+ // Return null. The calling code will use the assembly version instead to avoid potential type
// and library loads caused by CA lookup. NetCF uses the assembly version always.
return null;
-#endif
}
protected static CultureInfo GetNeutralResourcesLanguage(Assembly a)
@@ -1285,12 +1244,10 @@ namespace System.Resources {
return null;
}
- [ComVisible(false)]
public UnmanagedMemoryStream GetStream(String name) {
return GetStream(name, (CultureInfo)null);
}
- [ComVisible(false)]
public UnmanagedMemoryStream GetStream(String name, CultureInfo culture) {
Object obj = GetObject(name, culture, false);
UnmanagedMemoryStream ums = obj as UnmanagedMemoryStream;
diff --git a/src/mscorlib/src/System/Resources/ResourceReader.cs b/src/mscorlib/src/System/Resources/ResourceReader.cs
index 89cfdb1b9f..d752771020 100644
--- a/src/mscorlib/src/System/Resources/ResourceReader.cs
+++ b/src/mscorlib/src/System/Resources/ResourceReader.cs
@@ -20,13 +20,7 @@ namespace System.Resources {
using System.Text;
using System.Collections;
using System.Collections.Generic;
-#if FEATURE_SERIALIZATION
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters;
- using System.Runtime.Serialization.Formatters.Binary;
-#endif // FEATURE_SERIALIZATION
using System.Reflection;
- using System.Security.Permissions;
using System.Security;
using System.Globalization;
using System.Configuration.Assemblies;
@@ -73,7 +67,6 @@ namespace System.Resources {
}
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class ResourceReader : IResourceReader
{
// A reasonable default buffer size for reading from files, especially
@@ -100,9 +93,6 @@ namespace System.Resources {
private unsafe int* _namePositionsPtr; // If we're using UnmanagedMemoryStream
private RuntimeType[] _typeTable; // Lazy array of Types for resource values.
private int[] _typeNamePositions; // To delay initialize type table
-#if FEATURE_SERIALIZATION
- private BinaryFormatter _objFormatter; // Deserialization stuff.
-#endif // FEATURE_SERIALIZATION
private int _numResources; // Num of resources files, in case arrays aren't allocated.
// We'll include a separate code path that uses UnmanagedMemoryStream to
@@ -116,45 +106,11 @@ namespace System.Resources {
private bool _debug; // Whether this file has debugging stuff in it.
#endif
-#if FEATURE_SERIALIZATION
- private bool[] _safeToDeserialize; // Whether to assert serialization permission
- private TypeLimitingDeserializationBinder _typeLimitingBinder;
-
- // One of our goals is to make sure localizable Windows Forms apps
- // work in semi-trusted scenarios (ie, without serialization permission).
- // Unfortunate we're serializing out some complex types that currently
- // require a security check on deserialization. We may fix this
- // in a next version, but for now just hard-code a list.
- // Hard-code in the assembly name (minus version) so people can't spoof us.
- private static readonly String[] TypesSafeForDeserialization = {
- "System.String[], mscorlib, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.DateTime[], mscorlib, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Drawing.Bitmap, System.Drawing, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Drawing.Imaging.Metafile, System.Drawing, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Drawing.Point, System.Drawing, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Drawing.PointF, System.Drawing, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Drawing.Size, System.Drawing, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Drawing.SizeF, System.Drawing, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Drawing.Font, System.Drawing, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Drawing.Icon, System.Drawing, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Drawing.Color, System.Drawing, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
- "System.Windows.Forms.Cursor, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken,
- "System.Windows.Forms.Padding, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken,
- "System.Windows.Forms.LinkArea, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken,
- "System.Windows.Forms.ImageListStreamer, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken,
- "System.Windows.Forms.ListViewGroup, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken,
- "System.Windows.Forms.ListViewItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken,
- "System.Windows.Forms.ListViewItem+ListViewSubItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken,
- "System.Windows.Forms.ListViewItem+ListViewSubItem+SubItemStyle, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken,
- "System.Windows.Forms.OwnerDrawPropertyBag, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken,
- "System.Windows.Forms.TreeNode, System.Windows.Forms, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken
- };
-#endif // FEATURE_SERIALIZATION
public ResourceReader(String fileName)
{
_resCache = new Dictionary<String, ResourceLocator>(FastResourceComparer.Default);
- _store = new BinaryReader(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultFileStreamBufferSize, FileOptions.RandomAccess, Path.GetFileName(fileName), false), Encoding.UTF8);
+ _store = new BinaryReader(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultFileStreamBufferSize, FileOptions.RandomAccess), Encoding.UTF8);
BCLDebug.Log("RESMGRFILEFORMAT", "ResourceReader .ctor(String). UnmanagedMemoryStream: "+(_ums!=null));
try {
@@ -240,10 +196,6 @@ namespace System.Resources {
// Unaligned, little endian format
return buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | (buffer[3] << 24);
}
-
- private void SkipInt32() {
- _store.BaseStream.Seek(4, SeekOrigin.Current);
- }
private void SkipString() {
@@ -580,8 +532,6 @@ namespace System.Resources {
}
}
-#if FEATURE_SERIALIZATION
-#endif
private Object _LoadObjectV1(int pos) {
_store.BaseStream.Seek(_dataSectionOffset+pos, SeekOrigin.Begin);
int typeIndex = _store.Read7BitEncodedInt();
@@ -629,11 +579,7 @@ namespace System.Resources {
return new Decimal(bits);
}
else {
-#if FEATURE_SERIALIZATION
- return DeserializeObject(typeIndex);
-#else
throw new NotSupportedException(Environment.GetResourceString("NotSupported_ResourceObjectSerialization"));
-#endif // FEATURE_SERIALIZATION
}
}
@@ -759,7 +705,7 @@ namespace System.Resources {
// For the case that we've memory mapped in the .resources
// file, just return a Stream pointing to that block of memory.
unsafe {
- return new UnmanagedMemoryStream(_ums.PositionPointer, len, len, FileAccess.Read, true);
+ return new UnmanagedMemoryStream(_ums.PositionPointer, len, len, FileAccess.Read);
}
}
@@ -771,57 +717,10 @@ namespace System.Resources {
}
// Normal serialized objects
-#if FEATURE_SERIALIZATION
- int typeIndex = typeCode - ResourceTypeCode.StartOfUserTypes;
- return DeserializeObject(typeIndex);
-#else
throw new NotSupportedException(Environment.GetResourceString("NotSupported_ResourceObjectSerialization"));
-#endif // FEATURE_SERIALIZATION
}
-#if FEATURE_SERIALIZATION
- // Helper method to safely deserialize a type, using a type-limiting
- // deserialization binder to simulate a type-limiting deserializer.
- // This method handles types that are safe to deserialize, as well as
- // ensuring we only get back what we expect.
- private Object DeserializeObject(int typeIndex)
- {
- RuntimeType type = FindType(typeIndex);
- // Initialize deserialization permission array, if needed
- if (_safeToDeserialize == null)
- InitSafeToDeserializeArray();
-
- // Ensure that the object we deserialized is exactly the same
- // type of object we thought we should be deserializing. This
- // will help prevent malformed .resources files from using our
- // serialization permission assert to deserialize anything
- // via a malformed type ID.
-
- Object graph;
- if (_safeToDeserialize[typeIndex]) {
- // Don't assert serialization permission - just ask the binary
- // formatter to avoid a permission check. This ensures that any
- // types which do demand serialization permission in their
- // deserialization .cctors will fail.
- // Also, use a serialization binder to limit bind requests to
- // our allowed list of WinForms types.
- _objFormatter.Binder = _typeLimitingBinder;
- _typeLimitingBinder.ExpectingToDeserialize(type);
- graph = _objFormatter.UnsafeDeserialize(_store.BaseStream, null);
- }
- else {
- _objFormatter.Binder = null;
- graph = _objFormatter.Deserialize(_store.BaseStream);
- }
-
- // This check is about correctness, not security at this point.
- if (graph.GetType() != type)
- throw new BadImageFormatException(Environment.GetResourceString("BadImageFormat_ResType&SerBlobMismatch", type.FullName, graph.GetType().FullName));
-
- return graph;
- }
-#endif // FEATURE_SERIALIZATION
// Reads in the header information for a .resources file. Verifies some
// of the assumptions about this resource set, and builds the class table
@@ -829,12 +728,6 @@ namespace System.Resources {
private void ReadResources()
{
Debug.Assert(_store != null, "ResourceReader is closed!");
-#if FEATURE_SERIALIZATION
- BinaryFormatter bf = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.File | StreamingContextStates.Persistence));
- _typeLimitingBinder = new TypeLimitingDeserializationBinder();
- bf.Binder = _typeLimitingBinder;
- _objFormatter = bf;
-#endif // FEATURE_SERIALIZATION
try {
// mega try-catch performs exceptionally bad on x64; factored out body into
@@ -918,7 +811,7 @@ namespace System.Resources {
throw new BadImageFormatException(Environment.GetResourceString("BadImageFormat_ResourcesHeaderCorrupted"));
}
BCLDebug.Log("RESMGRFILEFORMAT", "ReadResources: Expecting " + _numResources + " resources.");
-#if _DEBUG
+#if RESOURCE_FILE_FORMAT_DEBUG
if (ResourceManager.DEBUG >= 4)
Console.WriteLine("ResourceReader::ReadResources - Reading in "+_numResources+" resources");
#endif
@@ -938,7 +831,7 @@ namespace System.Resources {
SkipString();
}
-#if _DEBUG
+#if RESOURCE_FILE_FORMAT_DEBUG
if (ResourceManager.DEBUG >= 5)
Console.WriteLine("ResourceReader::ReadResources - Reading in "+numTypes+" type table entries");
#endif
@@ -1049,7 +942,6 @@ namespace System.Resources {
String typeName = _store.ReadString();
_typeTable[typeIndex] = (RuntimeType)Type.GetType(typeName, true);
}
-#if !FEATURE_SERIALIZATION
// If serialization isn't supported, we convert FileNotFoundException to
// NotSupportedException for consistency with v2. This is a corner-case, but the
// idea is that we want to give the user a more accurate error message. Even if
@@ -1064,7 +956,6 @@ namespace System.Resources {
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_ResourceObjectSerialization"));
}
-#endif // FEATURE_SERIALIZATION
finally {
_store.BaseStream.Position = oldPos;
}
@@ -1073,74 +964,6 @@ namespace System.Resources {
return _typeTable[typeIndex];
}
-#if FEATURE_SERIALIZATION
- private void InitSafeToDeserializeArray()
- {
- _safeToDeserialize = new bool[_typeTable.Length];
- for(int i=0; i<_typeTable.Length; i++) {
- long oldPos = _store.BaseStream.Position;
- String typeName;
- try {
- _store.BaseStream.Position = _typeNamePositions[i];
- typeName = _store.ReadString();
- }
- finally {
- _store.BaseStream.Position = oldPos;
- }
-
- AssemblyName an;
- String typePart;
- RuntimeType resourceType = (RuntimeType)Type.GetType(typeName, false);
- if (resourceType == null) {
- an = null;
- typePart = typeName;
- }
- else {
- // Enums should be safe to deserialize, and this helps out
- // partially trusted, localized WinForms apps.
- if (resourceType.BaseType == typeof(Enum)) {
- _safeToDeserialize[i] = true;
- continue;
- }
-
- // For most types, check our TypesSafeForDeserialization.
- typePart = resourceType.FullName;
-
- an = new AssemblyName();
-
- // resourceType is retrieved via Type.GetType and must be a RuntimeType
- RuntimeAssembly a = (RuntimeAssembly)resourceType.Assembly;
- an.Init(a.GetSimpleName(),
- a.GetPublicKey(),
- null, // public key token
- null, // version
- a.GetLocale(),
- AssemblyHashAlgorithm.None,
- AssemblyVersionCompatibility.SameMachine,
- null, // codebase
- AssemblyNameFlags.PublicKey,
- null); // strong name key pair
- }
-
- foreach(String safeType in TypesSafeForDeserialization) {
- if (ResourceManager.CompareNames(safeType, typePart, an)) {
-#if _DEBUG
- if (ResourceManager.DEBUG >= 7)
- Console.WriteLine("ResReader: Found a type-safe type to deserialize! Type name: {0}", typeName);
-#endif
- _safeToDeserialize[i] = true;
- continue;
- }
- }
-
-#if _DEBUG
- if (ResourceManager.DEBUG >= 7)
- if (!_safeToDeserialize[i])
- Console.WriteLine("ResReader: Found a type that wasn't safe to deserialize: {0}", typeName);
-#endif
- }
- }
-#endif // FEATURE_SERIALIZATION
public void GetResourceData(String resourceName, out String resourceType, out byte[] resourceData)
{
@@ -1224,72 +1047,6 @@ namespace System.Resources {
}
}
-#if FEATURE_SERIALIZATION
- // We need to build a type-limiting deserializer. We know exactly which
- // type we want to deserialize, and if someone tells us we have type X
- // (which might be safe to deserialize) and they give us a serialized
- // form of type Y, we don't want to run the deserialization constructor
- // because we've asserted serialization formatter permission. Instead,
- // limit the binary formatter's type binding to precisely the type we
- // expect. If they ever don't match, that's a corrupt .resources file.
- // We also must check the complete object graph to ensure all of the
- // graph contains safe objects.
- // Note this is tightly coupled to the BinaryFormatter, since we use
- // its internal ObjectReader::FastBindToType method, and we had to
- // change the ObjectReader to register itself with this type.
- internal sealed class TypeLimitingDeserializationBinder : SerializationBinder
- {
- private RuntimeType _typeToDeserialize;
- // This is tightly coupled with the binary formatter, because we
- // want to use exactly the same code found in the ObjectReader
- // to do the lookup, then just give a thumbs up or down based on
- // a type equality comparison. In the future, we could consider
- // some better refactoring of this code.
- private ObjectReader _objectReader;
-
- internal ObjectReader ObjectReader {
- get { return _objectReader; }
- set { _objectReader = value; }
- }
-
- internal void ExpectingToDeserialize(RuntimeType type)
- {
- _typeToDeserialize = type;
- }
-
- public override Type BindToType(string assemblyName, string typeName)
- {
- // BinaryObjectReader::Bind tries us first, then its own code.
- // Returning null means let the default binding rules happen.
- AssemblyName an = new AssemblyName(assemblyName);
-
- bool safe = false;
- foreach(String safeType in TypesSafeForDeserialization) {
- if (ResourceManager.CompareNames(safeType, typeName, an)) {
- safe = true;
- break;
- }
- }
-
- // WinForms types may internally use some enums that aren't
- // on our safe to deserialize list, like Font using FontStyle.
- Type t = ObjectReader.FastBindToType(assemblyName, typeName);
- if (t.IsEnum)
- safe = true;
-
- if (safe)
- return null;
-
- // Throw instead of returning null.
- // If you're looking at this in a debugger, you've either
- // got a malformed .resources file on your hands, or WinForms
- // types have taken a new dependency on another type. Check
- // whether assemblyName & typeName refer to a trustworthy type,
- // & consider adding it to the TypesSafeToDeserialize list.
- throw new BadImageFormatException(Environment.GetResourceString("BadImageFormat_ResType&SerBlobMismatch", _typeToDeserialize.FullName, typeName));
- }
- }
-#endif // FEATURE_SERIALIZATION
internal sealed class ResourceEnumerator : IDictionaryEnumerator
diff --git a/src/mscorlib/src/System/Resources/ResourceSet.cs b/src/mscorlib/src/System/Resources/ResourceSet.cs
index 1b272fc6ff..8fd9346f91 100644
--- a/src/mscorlib/src/System/Resources/ResourceSet.cs
+++ b/src/mscorlib/src/System/Resources/ResourceSet.cs
@@ -17,7 +17,6 @@ namespace System.Resources {
using System.Collections;
using System.IO;
using System.Globalization;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Runtime.Serialization;
@@ -31,7 +30,6 @@ namespace System.Resources {
// stores them in a hash table. Custom IResourceReaders can be used.
//
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class ResourceSet : IDisposable, IEnumerable
{
[NonSerialized] protected IResourceReader Reader;
@@ -158,7 +156,6 @@ namespace System.Resources {
#if LOOSELY_LINKED_RESOURCE_REFERENCE
// Optional - used for resolving assembly manifest resource references.
// This can safely be null.
- [ComVisible(false)]
public Assembly Assembly {
get { return _assembly; }
/*protected*/ set { _assembly = value; }
@@ -181,7 +178,6 @@ namespace System.Resources {
return Type.GetType("System.Resources.ResourceWriter, System.Resources.Writer, Version=4.0.1.0, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken, throwOnError: true);
}
- [ComVisible(false)]
public virtual IDictionaryEnumerator GetEnumerator()
{
return GetEnumeratorHelper();
diff --git a/src/mscorlib/src/System/Resources/SatelliteContractVersionAttribute.cs b/src/mscorlib/src/System/Resources/SatelliteContractVersionAttribute.cs
index 327279062a..86e972efdd 100644
--- a/src/mscorlib/src/System/Resources/SatelliteContractVersionAttribute.cs
+++ b/src/mscorlib/src/System/Resources/SatelliteContractVersionAttribute.cs
@@ -19,7 +19,6 @@ namespace System.Resources {
using System.Diagnostics.Contracts;
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class SatelliteContractVersionAttribute : Attribute
{
private String _version;
diff --git a/src/mscorlib/src/System/Resources/UltimateResourceFallbackLocation.cs b/src/mscorlib/src/System/Resources/UltimateResourceFallbackLocation.cs
index 5785bfd357..aa4069a366 100644
--- a/src/mscorlib/src/System/Resources/UltimateResourceFallbackLocation.cs
+++ b/src/mscorlib/src/System/Resources/UltimateResourceFallbackLocation.cs
@@ -20,7 +20,6 @@ using System;
namespace System.Resources {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum UltimateResourceFallbackLocation
{
MainAssembly,
diff --git a/src/mscorlib/src/System/RtType.cs b/src/mscorlib/src/System/RtType.cs
index 168beefd4e..a24ee679d3 100644
--- a/src/mscorlib/src/System/RtType.cs
+++ b/src/mscorlib/src/System/RtType.cs
@@ -16,7 +16,6 @@ using System.Runtime.ConstrainedExecution;
using System.Globalization;
using System.Threading;
using System.Diagnostics;
-using System.Security.Permissions;
using System.Collections;
using System.Collections.Generic;
using System.Runtime;
@@ -343,7 +342,8 @@ namespace System
// no one should be looking for a member whose name is longer than 1024
if (cUtf8Name > MAXNAMELEN)
{
- fixed (byte* pUtf8Name = new byte[cUtf8Name])
+ byte[] utf8Name = new byte[cUtf8Name];
+ fixed (byte* pUtf8Name = &utf8Name[0])
{
list = GetListByName(pName, cNameLen, pUtf8Name, cUtf8Name, listType, cacheType);
}
@@ -403,7 +403,6 @@ namespace System
// May replace the list with a new one if certain cache
// lookups succeed. Also, may modify the contents of the list
// after merging these new data structures with cached ones.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal void Insert(ref T[] list, string name, MemberListType listType)
{
bool lockTaken = false;
@@ -481,7 +480,6 @@ namespace System
}
// Modifies the existing list.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private void MergeWithGlobalList(T[] list)
{
T[] cachedMembers = m_allMembers;
@@ -967,29 +965,6 @@ namespace System
}
}
- private static void AddElementTypes(Type template, IList<Type> types)
- {
- if (!template.HasElementType)
- return;
-
- AddElementTypes(template.GetElementType(), types);
-
- for (int i = 0; i < types.Count; i ++)
- {
- if (template.IsArray)
- {
- if (template.IsSzArray)
- types[i] = types[i].MakeArrayType();
- else
- types[i] = types[i].MakeArrayType(template.GetArrayRank());
- }
- else if (template.IsPointer)
- {
- types[i] = types[i].MakePointerType();
- }
- }
- }
-
private void AddSpecialInterface(ref ListBuilder<RuntimeType> list, Filter filter, RuntimeType iList, bool addSubInterface)
{
if (iList.IsAssignableFrom(ReflectedType))
@@ -1629,7 +1604,6 @@ namespace System
internal bool IsGlobal
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get { return m_isGlobal; }
}
@@ -2524,8 +2498,6 @@ namespace System
private static readonly RuntimeType ObjectType = (RuntimeType)typeof(System.Object);
private static readonly RuntimeType StringType = (RuntimeType)typeof(System.String);
private static readonly RuntimeType DelegateType = (RuntimeType)typeof(System.Delegate);
-
- private static Type[] s_SICtorParamTypes;
#endregion
#region Constructor
@@ -2533,7 +2505,6 @@ namespace System
#endregion
#region Private\Internal Members
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal override bool CacheEquals(object o)
{
RuntimeType m = o as RuntimeType;
@@ -2753,7 +2724,6 @@ namespace System
return GetMethodCandidates(null, bindingAttr, CallingConventions.Any, null, false).ToArray();
}
-[System.Runtime.InteropServices.ComVisible(true)]
public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
{
return GetConstructorCandidates(null, bindingAttr, CallingConventions.Any, null, false).ToArray();
@@ -3246,7 +3216,6 @@ namespace System
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal sealed override RuntimeTypeHandle GetTypeHandleInternal()
{
return new RuntimeTypeHandle(this);
@@ -3342,7 +3311,6 @@ namespace System
return RuntimeTypeHandle.IsInstanceOfType(this, o);
}
- [System.Runtime.InteropServices.ComVisible(true)]
[Pure]
public override bool IsSubclassOf(Type type)
{
@@ -3582,11 +3550,6 @@ namespace System
#endif // FEATURE_COMINTEROP
- internal override bool HasProxyAttributeImpl()
- {
- return RuntimeTypeHandle.HasProxyAttribute(this);
- }
-
internal bool IsDelegate()
{
return GetBaseType() == typeof(System.MulticastDelegate);
@@ -4784,33 +4747,6 @@ namespace System
throw new MissingMethodException(Environment.GetResourceString("MissingConstructor_Name", FullName));
}
- // If we're creating a delegate, we're about to call a
- // constructor taking an integer to represent a target
- // method. Since this is very difficult (and expensive)
- // to verify, we're just going to demand UnmanagedCode
- // permission before allowing this. Partially trusted
- // clients can instead use Delegate.CreateDelegate,
- // which allows specification of the target method via
- // name or MethodInfo.
- //if (isDelegate)
- if (RuntimeType.DelegateType.IsAssignableFrom(invokeMethod.DeclaringType))
- {
- // In CoreCLR, CAS is not exposed externally. So what we really are looking
- // for is to see if the external caller of this API is transparent or not.
- // We get that information from the fact that a Demand will succeed only if
- // the external caller is not transparent.
- try
- {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-#pragma warning restore 618
- }
- catch
- {
- throw new NotSupportedException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("NotSupported_DelegateCreationFromPT")));
- }
- }
-
if (invokeMethod.GetParametersNoCopy().Length == 0)
{
if (args.Length != 0)
@@ -4868,17 +4804,8 @@ namespace System
readonly ActivatorCacheEntry[] cache = new ActivatorCacheEntry[CACHE_SIZE];
volatile ConstructorInfo delegateCtorInfo;
- volatile PermissionSet delegateCreatePermissions;
private void InitializeDelegateCreator() {
- // No synchronization needed here. In the worst case we create extra garbage
- PermissionSet ps = new PermissionSet(PermissionState.None);
- ps.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.MemberAccess));
-#pragma warning disable 618
- ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode));
-#pragma warning restore 618
- delegateCreatePermissions = ps;
-
ConstructorInfo ctorInfo = typeof(CtorDelegate).GetConstructor(new Type[] {typeof(Object), typeof(IntPtr)});
delegateCtorInfo = ctorInfo; // this assignment should be last
}
@@ -4891,7 +4818,6 @@ namespace System
if (delegateCtorInfo == null)
InitializeDelegateCreator();
- delegateCreatePermissions.Assert();
// No synchronization needed here. In the worst case we create extra garbage
CtorDelegate ctor = (CtorDelegate)delegateCtorInfo.Invoke(new Object[] { null, RuntimeMethodHandle.GetFunctionPointer(ace.m_hCtorMethodHandle) });
@@ -5045,10 +4971,12 @@ namespace System
return _CreateEnum(enumType, value);
}
+#if FEATURE_COMINTEROP
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern Object InvokeDispMethod(
String name, BindingFlags invokeAttr, Object target, Object[] args,
bool[] byrefModifiers, int culture, String[] namedParameters);
+#endif // FEATURE_COMINTEROP
#if FEATURE_COMINTEROP_UNMANAGED_ACTIVATION
[MethodImplAttribute(MethodImplOptions.InternalCall)]
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/AccessedThroughPropertyAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/AccessedThroughPropertyAttribute.cs
index b0010fd7bd..34e66beade 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/AccessedThroughPropertyAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/AccessedThroughPropertyAttribute.cs
@@ -9,7 +9,6 @@ namespace System.Runtime.CompilerServices
using System;
[AttributeUsage(AttributeTargets.Field)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AccessedThroughPropertyAttribute : Attribute
{
private readonly string propertyName;
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/AssemblyAttributesGoHere.cs b/src/mscorlib/src/System/Runtime/CompilerServices/AssemblyAttributesGoHere.cs
deleted file mode 100644
index c021353475..0000000000
--- a/src/mscorlib/src/System/Runtime/CompilerServices/AssemblyAttributesGoHere.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-namespace System.Runtime.CompilerServices {
-
- using System;
-
- // NOTE TO DEVELOPERS: These classes are used by ALink (the assembly linker).
- // They're used for metadata tokens for making multi-module assemblies.
- // Do not randomly touch these classes.
- [System.Runtime.CompilerServices.FriendAccessAllowed]
- internal sealed class AssemblyAttributesGoHere
- {
-
- internal AssemblyAttributesGoHere()
- {
- }
- }
- [System.Runtime.CompilerServices.FriendAccessAllowed]
- internal sealed class AssemblyAttributesGoHereS
- {
- internal AssemblyAttributesGoHereS()
- {
- }
- }
- [System.Runtime.CompilerServices.FriendAccessAllowed]
- internal sealed class AssemblyAttributesGoHereM
- {
- internal AssemblyAttributesGoHereM()
- {
- }
- }
- [System.Runtime.CompilerServices.FriendAccessAllowed]
- internal sealed class AssemblyAttributesGoHereSM
- {
- internal AssemblyAttributesGoHereSM()
- {
- }
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/AsyncMethodBuilder.cs b/src/mscorlib/src/System/Runtime/CompilerServices/AsyncMethodBuilder.cs
index 6a16462383..afb0c22778 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/AsyncMethodBuilder.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/AsyncMethodBuilder.cs
@@ -18,7 +18,6 @@ using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Contracts;
using System.Runtime.ExceptionServices;
using System.Security;
-using System.Security.Permissions;
using System.Threading;
using System.Threading.Tasks;
@@ -840,36 +839,6 @@ namespace System.Runtime.CompilerServices
// This method is copy&pasted into the public Start methods to avoid size overhead of valuetype generic instantiations.
// Ideally, we would build intrinsics to get the raw ref address and raw code address of MoveNext, and just use the shared implementation.
-#if false
- /// <summary>Initiates the builder's execution with the associated state machine.</summary>
- /// <typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam>
- /// <param name="stateMachine">The state machine instance, passed by reference.</param>
- /// <exception cref="System.ArgumentNullException">The <paramref name="stateMachine"/> argument is null (Nothing in Visual Basic).</exception>
- [DebuggerStepThrough]
- internal static void Start<TStateMachine>(ref TStateMachine stateMachine)
- where TStateMachine : IAsyncStateMachine
- {
- if (stateMachine == null) throw new ArgumentNullException(nameof(stateMachine));
- Contract.EndContractBlock();
-
- // Run the MoveNext method within a copy-on-write ExecutionContext scope.
- // This allows us to undo any ExecutionContext changes made in MoveNext,
- // so that they won't "leak" out of the first await.
-
- Thread currentThread = Thread.CurrentThread;
- ExecutionContextSwitcher ecs = default(ExecutionContextSwitcher);
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- ExecutionContext.EstablishCopyOnWriteScope(currentThread, ref ecs);
- stateMachine.MoveNext();
- }
- finally
- {
- ecs.Undo(currentThread);
- }
- }
-#endif
/// <summary>Associates the builder with the state machine it represents.</summary>
/// <param name="stateMachine">The heap-allocated state machine object.</param>
@@ -906,12 +875,12 @@ namespace System.Runtime.CompilerServices
Debugger.NotifyOfCrossThreadDependency();
// The builder needs to flow ExecutionContext, so capture it.
- var capturedContext = ExecutionContext.FastCapture(); // ok to use FastCapture as we haven't made any permission demands/asserts
+ var capturedContext = ExecutionContext.Capture();
// If the ExecutionContext is the default context, try to use a cached delegate, creating one if necessary.
Action action;
MoveNextRunner runner;
- if (capturedContext != null && capturedContext.IsPreAllocatedDefault)
+ if (capturedContext == ExecutionContext.Default)
{
// Get the cached delegate, and if it's non-null, return it.
action = m_defaultContextAction;
@@ -1046,12 +1015,8 @@ namespace System.Runtime.CompilerServices
if (m_context != null)
{
- try
- {
- // Use the context and callback to invoke m_stateMachine.MoveNext.
- ExecutionContext.Run(m_context, InvokeMoveNextCallback, m_stateMachine, preserveSyncCtx: true);
- }
- finally { m_context.Dispose(); }
+ // Use the context and callback to invoke m_stateMachine.MoveNext.
+ ExecutionContext.Run(m_context, InvokeMoveNextCallback, m_stateMachine);
}
else
{
@@ -1076,24 +1041,11 @@ namespace System.Runtime.CompilerServices
internal void RunWithDefaultContext()
{
Debug.Assert(m_stateMachine != null, "The state machine must have been set before calling Run.");
- ExecutionContext.Run(ExecutionContext.PreAllocatedDefault, InvokeMoveNextCallback, m_stateMachine, preserveSyncCtx: true);
+ ExecutionContext.Run(ExecutionContext.Default, InvokeMoveNextCallback, m_stateMachine);
}
/// <summary>Gets a delegate to the InvokeMoveNext method.</summary>
- protected static ContextCallback InvokeMoveNextCallback
- {
- get { return s_invokeMoveNext ?? (s_invokeMoveNext = InvokeMoveNext); }
- }
-
- /// <summary>Cached delegate used with ExecutionContext.Run.</summary>
- private static ContextCallback s_invokeMoveNext; // lazily-initialized due to SecurityCritical attribution
-
- /// <summary>Invokes the MoveNext method on the supplied IAsyncStateMachine.</summary>
- /// <param name="stateMachine">The IAsyncStateMachine machine instance.</param>
- private static void InvokeMoveNext(object stateMachine)
- {
- ((IAsyncStateMachine)stateMachine).MoveNext();
- }
+ protected static readonly ContextCallback InvokeMoveNextCallback = sm => ((IAsyncStateMachine)sm).MoveNext();
}
/// <summary>
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/CompilationRelaxations.cs b/src/mscorlib/src/System/Runtime/CompilerServices/CompilationRelaxations.cs
index 5e4f19410b..c3679b610c 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/CompilationRelaxations.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/CompilationRelaxations.cs
@@ -13,7 +13,6 @@ namespace System.Runtime.CompilerServices
/// IMPORTANT: Keep this in sync with corhdr.h
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum CompilationRelaxations : int
{
NoStringInterning = 0x0008, // Start in 0x0008, we had other non public flags in this enum before,
@@ -23,7 +22,6 @@ namespace System.Runtime.CompilerServices
[Serializable]
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Method)]
-[System.Runtime.InteropServices.ComVisible(true)]
public class CompilationRelaxationsAttribute : Attribute
{
private int m_relaxations; // The relaxations.
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/CompilerGlobalScopeAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/CompilerGlobalScopeAttribute.cs
index 65755f6baa..1cd830cfca 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/CompilerGlobalScopeAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/CompilerGlobalScopeAttribute.cs
@@ -18,7 +18,6 @@ namespace System.Runtime.CompilerServices
{
[Serializable]
[AttributeUsage(AttributeTargets.Class)]
- [System.Runtime.InteropServices.ComVisible(true)]
public class CompilerGlobalScopeAttribute : Attribute
{
public CompilerGlobalScopeAttribute () {}
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/ConditionalWeakTable.cs b/src/mscorlib/src/System/Runtime/CompilerServices/ConditionalWeakTable.cs
index 74559673bb..4b2648ba6f 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/ConditionalWeakTable.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/ConditionalWeakTable.cs
@@ -46,7 +46,6 @@
** expose the full public surface area.
**
**
-**
** Thread safety guarantees:
**
** ConditionalWeakTable is fully thread-safe and requires no
@@ -60,6 +59,7 @@
** may be delayed until appdomain shutdown.
===========================================================*/
+using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Threading;
@@ -67,8 +67,7 @@ using System.Threading;
namespace System.Runtime.CompilerServices
{
#region ConditionalWeakTable
- [ComVisible(false)]
- public sealed class ConditionalWeakTable<TKey, TValue>
+ public sealed class ConditionalWeakTable<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>>
where TKey : class
where TValue : class
{
@@ -76,6 +75,7 @@ namespace System.Runtime.CompilerServices
private const int InitialCapacity = 8; // Initial length of the table. Must be a power of two.
private readonly object _lock; // This lock protects all mutation of data in the table. Readers do not take this lock.
private volatile Container _container; // The actual storage for the table; swapped out as the table grows.
+ private int _activeEnumeratorRefCount; // The number of outstanding enumerators on the table
#endregion
#region Constructors
@@ -190,6 +190,34 @@ namespace System.Runtime.CompilerServices
}
}
+ //--------------------------------------------------------------------------------------------
+ // Clear all the key/value pairs
+ //--------------------------------------------------------------------------------------------
+ public void Clear()
+ {
+ lock (_lock)
+ {
+ // To clear, we would prefer to simply drop the existing container
+ // and replace it with an empty one, as that's overall more efficient.
+ // However, if there are any active enumerators, we don't want to do
+ // that as it will end up removing all of the existing entries and
+ // allowing new items to be added at the same indices when the container
+ // is filled and replaced, and one of the guarantees we try to make with
+ // enumeration is that new items added after enumeration starts won't be
+ // included in the enumeration. As such, if there are active enumerators,
+ // we simply use the container's removal functionality to remove all of the
+ // keys; then when the table is resized, if there are still active enumerators,
+ // these empty slots will be maintained.
+ if (_activeEnumeratorRefCount > 0)
+ {
+ _container.RemoveAllKeys();
+ }
+ else
+ {
+ _container = new Container(this);
+ }
+ }
+ }
//--------------------------------------------------------------------------------------------
// key: key of the value to find. Cannot be null.
@@ -256,6 +284,148 @@ namespace System.Runtime.CompilerServices
public delegate TValue CreateValueCallback(TKey key);
+ //--------------------------------------------------------------------------------------------
+ // Gets an enumerator for the table. The returned enumerator will not extend the lifetime of
+ // any object pairs in the table, other than the one that's Current. It will not return entries
+ // that have already been collected, nor will it return entries added after the enumerator was
+ // retrieved. It may not return all entries that were present when the enumerat was retrieved,
+ // however, such as not returning entries that were collected or removed after the enumerator
+ // was retrieved but before they were enumerated.
+ //--------------------------------------------------------------------------------------------
+ IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()
+ {
+ lock (_lock)
+ {
+ Container c = _container;
+ return c == null || c.FirstFreeEntry == 0 ?
+ ((IEnumerable<KeyValuePair<TKey, TValue>>)Array.Empty<KeyValuePair<TKey, TValue>>()).GetEnumerator() :
+ new Enumerator(this);
+ }
+ }
+
+ IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable<KeyValuePair<TKey, TValue>>)this).GetEnumerator();
+
+ /// <summary>Provides an enumerator for the table.</summary>
+ private sealed class Enumerator : IEnumerator<KeyValuePair<TKey, TValue>>
+ {
+ // The enumerator would ideally hold a reference to the Container and the end index within that
+ // container. However, the safety of the CWT depends on the only reference to the Container being
+ // from the CWT itself; the Container then employs a two-phase finalization scheme, where the first
+ // phase nulls out that parent CWT's reference, guaranteeing that the second time it's finalized there
+ // can be no other existing references to it in use that would allow for concurrent usage of the
+ // native handles with finalization. We would break that if we allowed this Enumerator to hold a
+ // reference to the Container. Instead, the Enumerator holds a reference to the CWT rather than to
+ // the Container, and it maintains the CWT._activeEnumeratorRefCount field to track whether there
+ // are outstanding enumerators that have yet to be disposed/finalized. If there aren't any, the CWT
+ // behaves as it normally does. If there are, certain operations are affected, in particular resizes.
+ // Normally when the CWT is resized, it enumerates the contents of the table looking for indices that
+ // contain entries which have been collected or removed, and it frees those up, effectively moving
+ // down all subsequent entries in the container (not in the existing container, but in a replacement).
+ // This, however, would cause the enumerator's understanding of indices to break. So, as long as
+ // there is any outstanding enumerator, no compaction is performed.
+
+ private ConditionalWeakTable<TKey, TValue> _table; // parent table, set to null when disposed
+ private readonly int _maxIndexInclusive; // last index in the container that should be enumerated
+ private int _currentIndex = -1; // the current index into the container
+ private KeyValuePair<TKey, TValue> _current; // the current entry set by MoveNext and returned from Current
+
+ public Enumerator(ConditionalWeakTable<TKey, TValue> table)
+ {
+ Debug.Assert(table != null, "Must provide a valid table");
+ Debug.Assert(Monitor.IsEntered(table._lock), "Must hold the _lock lock to construct the enumerator");
+ Debug.Assert(table._container != null, "Should not be used on a finalized table");
+ Debug.Assert(table._container.FirstFreeEntry > 0, "Should have returned an empty enumerator instead");
+
+ // Store a reference to the parent table and increase its active enumerator count.
+ _table = table;
+ Debug.Assert(table._activeEnumeratorRefCount >= 0, "Should never have a negative ref count before incrementing");
+ table._activeEnumeratorRefCount++;
+
+ // Store the max index to be enumerated.
+ _maxIndexInclusive = table._container.FirstFreeEntry - 1;
+ _currentIndex = -1;
+ }
+
+ ~Enumerator() { Dispose(); }
+
+ public void Dispose()
+ {
+ // Use an interlocked operation to ensure that only one thread can get access to
+ // the _table for disposal and thus only decrement the ref count once.
+ ConditionalWeakTable<TKey, TValue> table = Interlocked.Exchange(ref _table, null);
+ if (table != null)
+ {
+ // Ensure we don't keep the last current alive unnecessarily
+ _current = default(KeyValuePair<TKey, TValue>);
+
+ // Decrement the ref count that was incremented when constructed
+ lock (table._lock)
+ {
+ table._activeEnumeratorRefCount--;
+ Debug.Assert(table._activeEnumeratorRefCount >= 0, "Should never have a negative ref count after decrementing");
+ }
+
+ // Finalization is purely to decrement the ref count. We can suppress it now.
+ GC.SuppressFinalize(this);
+ }
+ }
+
+ public bool MoveNext()
+ {
+ // Start by getting the current table. If it's already been disposed, it will be null.
+ ConditionalWeakTable<TKey, TValue> table = _table;
+ if (table != null)
+ {
+ // Once have the table, we need to lock to synchronize with other operations on
+ // the table, like adding.
+ lock (table._lock)
+ {
+ // From the table, we have to get the current container. This could have changed
+ // since we grabbed the enumerator, but the index-to-pair mapping should not have
+ // due to there being at least one active enumerator. If the table (or rather its
+ // container at the time) has already been finalized, this will be null.
+ Container c = table._container;
+ if (c != null)
+ {
+ // We have the container. Find the next entry to return, if there is one.
+ // We need to loop as we may try to get an entry that's already been removed
+ // or collected, in which case we try again.
+ while (_currentIndex < _maxIndexInclusive)
+ {
+ _currentIndex++;
+ TKey key;
+ TValue value;
+ if (c.TryGetEntry(_currentIndex, out key, out value))
+ {
+ _current = new KeyValuePair<TKey, TValue>(key, value);
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ // Nothing more to enumerate.
+ return false;
+ }
+
+ public KeyValuePair<TKey, TValue> Current
+ {
+ get
+ {
+ if (_currentIndex < 0)
+ {
+ ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen();
+ }
+ return _current;
+ }
+ }
+
+ object IEnumerator.Current => Current;
+
+ public void Reset() { }
+ }
+
#endregion
#region Internal members
@@ -305,17 +475,6 @@ namespace System.Runtime.CompilerServices
}
}
- //--------------------------------------------------------------------------------------------
- // Clear all the key/value pairs
- //--------------------------------------------------------------------------------------------
- internal void Clear()
- {
- lock (_lock)
- {
- _container = new Container(this);
- }
- }
-
#endregion
#region Private Members
@@ -435,6 +594,8 @@ namespace System.Runtime.CompilerServices
internal bool HasCapacity => _firstFreeEntry < _entries.Length;
+ internal int FirstFreeEntry => _firstFreeEntry;
+
//----------------------------------------------------------------------------------------
// Worker for adding a new key/value pair.
// Preconditions:
@@ -508,6 +669,44 @@ namespace System.Runtime.CompilerServices
return -1;
}
+ //----------------------------------------------------------------------------------------
+ // Gets the entry at the specified entry index.
+ //----------------------------------------------------------------------------------------
+ internal bool TryGetEntry(int index, out TKey key, out TValue value)
+ {
+ if (index < _entries.Length)
+ {
+ object oKey, oValue;
+ _entries[index].depHnd.GetPrimaryAndSecondary(out oKey, out oValue);
+ GC.KeepAlive(this); // ensure we don't get finalized while accessing DependentHandles.
+
+ if (oKey != null)
+ {
+ key = JitHelpers.UnsafeCast<TKey>(oKey);
+ value = JitHelpers.UnsafeCast<TValue>(oValue);
+ return true;
+ }
+ }
+
+ key = default(TKey);
+ value = default(TValue);
+ return false;
+ }
+
+ //----------------------------------------------------------------------------------------
+ // Removes all of the keys in the table.
+ //----------------------------------------------------------------------------------------
+ internal void RemoveAllKeys()
+ {
+ for (int i = 0; i < _firstFreeEntry; i++)
+ {
+ RemoveIndex(i);
+ }
+ }
+
+ //----------------------------------------------------------------------------------------
+ // Removes the specified key from the table, if it exists.
+ //----------------------------------------------------------------------------------------
internal bool Remove(TKey key)
{
VerifyIntegrity();
@@ -516,22 +715,27 @@ namespace System.Runtime.CompilerServices
int entryIndex = FindEntry(key, out value);
if (entryIndex != -1)
{
- ref Entry entry = ref _entries[entryIndex];
-
- // We do not free the handle here, as we may be racing with readers who already saw the hash code.
- // Instead, we simply overwrite the entry's hash code, so subsequent reads will ignore it.
- // The handle will be free'd in Container's finalizer, after the table is resized or discarded.
- Volatile.Write(ref entry.HashCode, -1);
-
- // Also, clear the key to allow GC to collect objects pointed to by the entry
- entry.depHnd.SetPrimary(null);
-
+ RemoveIndex(entryIndex);
return true;
}
return false;
}
+ private void RemoveIndex(int entryIndex)
+ {
+ Debug.Assert(entryIndex >= 0 && entryIndex < _firstFreeEntry);
+
+ ref Entry entry = ref _entries[entryIndex];
+
+ // We do not free the handle here, as we may be racing with readers who already saw the hash code.
+ // Instead, we simply overwrite the entry's hash code, so subsequent reads will ignore it.
+ // The handle will be free'd in Container's finalizer, after the table is resized or discarded.
+ Volatile.Write(ref entry.HashCode, -1);
+
+ // Also, clear the key to allow GC to collect objects pointed to by the entry
+ entry.depHnd.SetPrimary(null);
+ }
internal void UpdateValue(int entryIndex, TValue newValue)
{
@@ -556,25 +760,33 @@ namespace System.Runtime.CompilerServices
//----------------------------------------------------------------------------------------
internal Container Resize()
{
- // Start by assuming we won't resize.
- int newSize = _buckets.Length;
+ Debug.Assert(!HasCapacity);
- // If any expired or removed keys exist, we won't resize.
bool hasExpiredEntries = false;
- for (int entriesIndex = 0; entriesIndex < _entries.Length; entriesIndex++)
+ int newSize = _buckets.Length;
+
+ if (_parent == null || _parent._activeEnumeratorRefCount == 0)
{
- if (_entries[entriesIndex].HashCode == -1)
+ // If any expired or removed keys exist, we won't resize.
+ // If there any active enumerators, though, we don't want
+ // to compact and thus have no expired entries.
+ for (int entriesIndex = 0; entriesIndex < _entries.Length; entriesIndex++)
{
- // the entry was removed
- hasExpiredEntries = true;
- break;
- }
+ ref Entry entry = ref _entries[entriesIndex];
- if (_entries[entriesIndex].depHnd.IsAllocated && _entries[entriesIndex].depHnd.GetPrimary() == null)
- {
- // the entry has expired
- hasExpiredEntries = true;
- break;
+ if (entry.HashCode == -1)
+ {
+ // the entry was removed
+ hasExpiredEntries = true;
+ break;
+ }
+
+ if (entry.depHnd.IsAllocated && entry.depHnd.GetPrimary() == null)
+ {
+ // the entry has expired
+ hasExpiredEntries = true;
+ break;
+ }
}
}
@@ -585,44 +797,73 @@ namespace System.Runtime.CompilerServices
}
return Resize(newSize);
- }
+ }
internal Container Resize(int newSize)
{
+ Debug.Assert(newSize >= _buckets.Length);
Debug.Assert(IsPowerOfTwo(newSize));
// Reallocate both buckets and entries and rebuild the bucket and entries from scratch.
// This serves both to scrub entries with expired keys and to put the new entries in the proper bucket.
int[] newBuckets = new int[newSize];
- for (int bucketIndex = 0; bucketIndex < newSize; bucketIndex++)
+ for (int bucketIndex = 0; bucketIndex < newBuckets.Length; bucketIndex++)
{
newBuckets[bucketIndex] = -1;
}
Entry[] newEntries = new Entry[newSize];
int newEntriesIndex = 0;
+ bool activeEnumerators = _parent != null && _parent._activeEnumeratorRefCount > 0;
// Migrate existing entries to the new table.
- for (int entriesIndex = 0; entriesIndex < _entries.Length; entriesIndex++)
+ if (activeEnumerators)
{
- int hashCode = _entries[entriesIndex].HashCode;
- DependentHandle depHnd = _entries[entriesIndex].depHnd;
- if (hashCode != -1 && depHnd.IsAllocated)
+ // There's at least one active enumerator, which means we don't want to
+ // remove any expired/removed entries, in order to not affect existing
+ // entries indices. Copy over the entries while rebuilding the buckets list,
+ // as the buckets are dependent on the buckets list length, which is changing.
+ for (; newEntriesIndex < _entries.Length; newEntriesIndex++)
{
- if (depHnd.GetPrimary() != null)
- {
- // Entry is used and has not expired. Link it into the appropriate bucket list.
- newEntries[newEntriesIndex].HashCode = hashCode;
- newEntries[newEntriesIndex].depHnd = depHnd;
- int bucket = hashCode & (newBuckets.Length - 1);
- newEntries[newEntriesIndex].Next = newBuckets[bucket];
- newBuckets[bucket] = newEntriesIndex;
- newEntriesIndex++;
- }
- else
+ ref Entry oldEntry = ref _entries[newEntriesIndex];
+ ref Entry newEntry = ref newEntries[newEntriesIndex];
+ int hashCode = oldEntry.HashCode;
+
+ newEntry.HashCode = hashCode;
+ newEntry.depHnd = oldEntry.depHnd;
+ int bucket = hashCode & (newBuckets.Length - 1);
+ newEntry.Next = newBuckets[bucket];
+ newBuckets[bucket] = newEntriesIndex;
+ }
+ }
+ else
+ {
+ // There are no active enumerators, which means we want to compact by
+ // removing expired/removed entries.
+ for (int entriesIndex = 0; entriesIndex < _entries.Length; entriesIndex++)
+ {
+ ref Entry oldEntry = ref _entries[entriesIndex];
+ int hashCode = oldEntry.HashCode;
+ DependentHandle depHnd = oldEntry.depHnd;
+ if (hashCode != -1 && depHnd.IsAllocated)
{
- // Pretend the item was removed, so that this container's finalizer
- // will clean up this dependent handle.
- Volatile.Write(ref _entries[entriesIndex].HashCode, -1);
+ if (depHnd.GetPrimary() != null)
+ {
+ ref Entry newEntry = ref newEntries[newEntriesIndex];
+
+ // Entry is used and has not expired. Link it into the appropriate bucket list.
+ newEntry.HashCode = hashCode;
+ newEntry.depHnd = depHnd;
+ int bucket = hashCode & (newBuckets.Length - 1);
+ newEntry.Next = newBuckets[bucket];
+ newBuckets[bucket] = newEntriesIndex;
+ newEntriesIndex++;
+ }
+ else
+ {
+ // Pretend the item was removed, so that this container's finalizer
+ // will clean up this dependent handle.
+ Volatile.Write(ref oldEntry.HashCode, -1);
+ }
}
}
}
@@ -632,6 +873,14 @@ namespace System.Runtime.CompilerServices
// while the old container may still be in use. As such, we store a reference from the old container
// to the new one, which will keep the new container alive as long as the old one is.
var newContainer = new Container(_parent, newBuckets, newEntries, newEntriesIndex);
+ if (activeEnumerators)
+ {
+ // If there are active enumerators, both the old container and the new container may be storing
+ // the same entries with -1 hash codes, which the finalizer will clean up even if the container
+ // is not the active container for the table. To prevent that, we want to stop the old container
+ // from being finalized, as it no longer has any responsibility for any cleanup.
+ GC.SuppressFinalize(this);
+ }
_oldKeepAlive = newContainer; // once this is set, the old container's finalizer will not free transferred dependent handles
GC.KeepAlive(this); // ensure we don't get finalized while accessing DependentHandles.
@@ -815,7 +1064,6 @@ namespace System.Runtime.CompilerServices
// This struct intentionally does no self-synchronization. It's up to the caller to
// to use DependentHandles in a thread-safe way.
//=========================================================================================
- [ComVisible(false)]
internal struct DependentHandle
{
#region Constructors
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/CustomConstantAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/CustomConstantAttribute.cs
index c912095bda..1a5dcfdc11 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/CustomConstantAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/CustomConstantAttribute.cs
@@ -9,7 +9,6 @@ namespace System.Runtime.CompilerServices
{
[Serializable]
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter, Inherited=false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public abstract class CustomConstantAttribute : Attribute
{
public abstract Object Value { get; }
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/DateTimeConstantAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/DateTimeConstantAttribute.cs
index 4362aa84a1..148d916be1 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/DateTimeConstantAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/DateTimeConstantAttribute.cs
@@ -9,7 +9,6 @@ namespace System.Runtime.CompilerServices
{
[Serializable]
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter, Inherited=false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class DateTimeConstantAttribute : CustomConstantAttribute
{
public DateTimeConstantAttribute(long ticks)
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/DecimalConstantAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/DecimalConstantAttribute.cs
index 7bfaa7aafd..f05191840d 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/DecimalConstantAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/DecimalConstantAttribute.cs
@@ -14,7 +14,6 @@ namespace System.Runtime.CompilerServices
{
[Serializable]
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter, Inherited=false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class DecimalConstantAttribute : Attribute
{
[CLSCompliant(false)]
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/DecoratedNameAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/DecoratedNameAttribute.cs
deleted file mode 100644
index 75558d4e7e..0000000000
--- a/src/mscorlib/src/System/Runtime/CompilerServices/DecoratedNameAttribute.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace System.Runtime.CompilerServices
-{
- [AttributeUsage(AttributeTargets.All),
- ComVisible(false)]
- internal sealed class DecoratedNameAttribute : Attribute
- {
- public DecoratedNameAttribute(string decoratedName)
- {}
- }
-}
-
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/DiscardableAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/DiscardableAttribute.cs
index 303151f576..3fda4624d4 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/DiscardableAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/DiscardableAttribute.cs
@@ -9,7 +9,6 @@ namespace System.Runtime.CompilerServices {
using System;
// Custom attribute to indicating a TypeDef is a discardable attribute
-[System.Runtime.InteropServices.ComVisible(true)]
public class DiscardableAttribute : Attribute
{
public DiscardableAttribute()
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/ITuple.cs b/src/mscorlib/src/System/Runtime/CompilerServices/ITuple.cs
new file mode 100644
index 0000000000..cafee11f8a
--- /dev/null
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/ITuple.cs
@@ -0,0 +1,22 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace System.Runtime.CompilerServices
+{
+ /// <summary>
+ /// This interface is required for types that want to be indexed into by dynamic patterns.
+ /// </summary>
+ public interface ITuple
+ {
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int Length { get; }
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object this[int index] { get; }
+ }
+}
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/IndexerNameAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/IndexerNameAttribute.cs
index 0323fe0cf6..c32be6f3a2 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/IndexerNameAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/IndexerNameAttribute.cs
@@ -8,7 +8,6 @@ namespace System.Runtime.CompilerServices
[Serializable]
[AttributeUsage(AttributeTargets.Property, Inherited = true)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class IndexerNameAttribute: Attribute
{
public IndexerNameAttribute(String indexerName)
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/IsVolatile.cs b/src/mscorlib/src/System/Runtime/CompilerServices/IsVolatile.cs
index ea2fe032c6..5287e82b7b 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/IsVolatile.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/IsVolatile.cs
@@ -4,7 +4,6 @@
namespace System.Runtime.CompilerServices
{
-[System.Runtime.InteropServices.ComVisible(true)]
public static class IsVolatile
{
// no instantiation, please!
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/MethodImplAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/MethodImplAttribute.cs
index d081d70070..b4991110f8 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/MethodImplAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/MethodImplAttribute.cs
@@ -12,7 +12,6 @@ namespace System.Runtime.CompilerServices {
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum MethodImplOptions
{
Unmanaged = System.Reflection.MethodImplAttributes.Unmanaged,
@@ -21,14 +20,12 @@ namespace System.Runtime.CompilerServices {
InternalCall = System.Reflection.MethodImplAttributes.InternalCall,
Synchronized = System.Reflection.MethodImplAttributes.Synchronized,
NoInlining = System.Reflection.MethodImplAttributes.NoInlining,
- [System.Runtime.InteropServices.ComVisible(false)]
AggressiveInlining = System.Reflection.MethodImplAttributes.AggressiveInlining,
NoOptimization = System.Reflection.MethodImplAttributes.NoOptimization,
// **** If you add something, update internal MethodImplAttribute(MethodImplAttributes methodImplAttributes)! ****
}
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum MethodCodeType
{
IL = System.Reflection.MethodImplAttributes.IL,
@@ -41,7 +38,6 @@ namespace System.Runtime.CompilerServices {
// Custom attribute to specify additional method properties.
[Serializable]
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor, Inherited = false)]
-[System.Runtime.InteropServices.ComVisible(true)]
sealed public class MethodImplAttribute : Attribute
{
internal MethodImplOptions _val;
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/RuntimeHelpers.cs b/src/mscorlib/src/System/Runtime/CompilerServices/RuntimeHelpers.cs
index 926eb6c3cb..509e527ecb 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/RuntimeHelpers.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/RuntimeHelpers.cs
@@ -18,7 +18,6 @@ namespace System.Runtime.CompilerServices {
using System.Runtime.InteropServices;
using System.Runtime.ConstrainedExecution;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Threading;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
@@ -131,7 +130,6 @@ namespace System.Runtime.CompilerServices {
// Note: this method is not part of the CER support, and is not to be confused with ProbeForSufficientStack
// below.
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern void EnsureSufficientExecutionStack();
// This method ensures that there is sufficient stack to execute the average Framework function.
@@ -139,7 +137,6 @@ namespace System.Runtime.CompilerServices {
// Note: this method is not part of the CER support, and is not to be confused with ProbeForSufficientStack
// below.
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern bool TryEnsureSufficientExecutionStack();
public static void ProbeForSufficientStack()
@@ -148,7 +145,6 @@ namespace System.Runtime.CompilerServices {
// This method is a marker placed immediately before a try clause to mark the corresponding catch and finally blocks as
// constrained. There's no code here other than the probe because most of the work is done at JIT time when we spot a call to this routine.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static void PrepareConstrainedRegions()
{
ProbeForSufficientStack();
@@ -156,7 +152,6 @@ namespace System.Runtime.CompilerServices {
// When we detect a CER with no calls, we can point the JIT to this non-probing version instead
// as we don't need to probe.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static void PrepareConstrainedRegionsNoOP()
{
}
@@ -168,7 +163,6 @@ namespace System.Runtime.CompilerServices {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern void ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData);
- [PrePrepareMethod]
internal static void ExecuteBackoutCodeHelper(Object backoutCode, Object userData, bool exceptionThrown)
{
((CleanupCode)backoutCode)(userData, exceptionThrown);
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/RuntimeWrappedException.cs b/src/mscorlib/src/System/Runtime/CompilerServices/RuntimeWrappedException.cs
index d2691df6b9..e3b2d2ce62 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/RuntimeWrappedException.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/RuntimeWrappedException.cs
@@ -15,7 +15,6 @@ namespace System.Runtime.CompilerServices {
using System;
using System.Runtime.Serialization;
using System.Runtime.Remoting;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
[Serializable]
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/TaskAwaiter.cs b/src/mscorlib/src/System/Runtime/CompilerServices/TaskAwaiter.cs
index 98a81ea470..f01900a5bf 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/TaskAwaiter.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/TaskAwaiter.cs
@@ -44,7 +44,6 @@ using System.Diagnostics.Contracts;
using System.Security;
using System.Threading;
using System.Threading.Tasks;
-using System.Security.Permissions;
using System.Diagnostics.Tracing;
// NOTE: For performance reasons, initialization is not verified. If a developer
@@ -198,21 +197,19 @@ namespace System.Runtime.CompilerServices
/// <exception cref="System.ArgumentNullException">The <paramref name="continuation"/> argument is null (Nothing in Visual Basic).</exception>
/// <exception cref="System.NullReferenceException">The awaiter was not properly initialized.</exception>
/// <remarks>This method is intended for compiler user rather than use directly in code.</remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
internal static void OnCompletedInternal(Task task, Action continuation, bool continueOnCapturedContext, bool flowExecutionContext)
{
if (continuation == null) throw new ArgumentNullException(nameof(continuation));
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
// If TaskWait* ETW events are enabled, trace a beginning event for this await
// and set up an ending event to be traced when the asynchronous await completes.
- if ( TplEtwProvider.Log.IsEnabled() || Task.s_asyncDebuggingEnabled)
+ if (TplEtwProvider.Log.IsEnabled() || Task.s_asyncDebuggingEnabled)
{
continuation = OutputWaitEtwEvents(task, continuation);
}
// Set the continuation onto the awaited task.
- task.SetContinuationForAwait(continuation, continueOnCapturedContext, flowExecutionContext, ref stackMark);
+ task.SetContinuationForAwait(continuation, continueOnCapturedContext, flowExecutionContext);
}
/// <summary>
@@ -244,7 +241,7 @@ namespace System.Runtime.CompilerServices
(currentTaskAtBegin != null ? currentTaskAtBegin.m_taskScheduler.Id : TaskScheduler.Default.Id),
(currentTaskAtBegin != null ? currentTaskAtBegin.Id : 0),
task.Id, TplEtwProvider.TaskWaitBehavior.Asynchronous,
- (continuationTask != null ? continuationTask.Id : 0), System.Threading.Thread.GetDomainID());
+ (continuationTask != null ? continuationTask.Id : 0));
}
// Create a continuation action that outputs the end event and then invokes the user
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/TupleElementNamesAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/TupleElementNamesAttribute.cs
new file mode 100644
index 0000000000..65b120e6b4
--- /dev/null
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/TupleElementNamesAttribute.cs
@@ -0,0 +1,57 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+
+namespace System.Runtime.CompilerServices
+{
+ /// <summary>
+ /// Indicates that the use of <see cref="System.ValueTuple"/> on a member is meant to be treated as a tuple with element names.
+ /// </summary>
+ [CLSCompliant(false)]
+ [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Event)]
+ public sealed class TupleElementNamesAttribute : Attribute
+ {
+ private readonly string[] _transformNames;
+
+ /// <summary>
+ /// Initializes a new instance of the <see
+ /// cref="TupleElementNamesAttribute"/> class.
+ /// </summary>
+ /// <param name="transformNames">
+ /// Specifies, in a pre-order depth-first traversal of a type's
+ /// construction, which <see cref="System.ValueType"/> occurrences are
+ /// meant to carry element names.
+ /// </param>
+ /// <remarks>
+ /// This constructor is meant to be used on types that contain an
+ /// instantiation of <see cref="System.ValueType"/> that contains
+ /// element names. For instance, if <c>C</c> is a generic type with
+ /// two type parameters, then a use of the constructed type <c>C{<see
+ /// cref="System.ValueTuple{T1, T2}"/>, <see
+ /// cref="System.ValueTuple{T1, T2, T3}"/></c> might be intended to
+ /// treat the first type argument as a tuple with element names and the
+ /// second as a tuple without element names. In which case, the
+ /// appropriate attribute specification should use a
+ /// <c>transformNames</c> value of <c>{ "name1", "name2", null, null,
+ /// null }</c>.
+ /// </remarks>
+ public TupleElementNamesAttribute(string[] transformNames)
+ {
+ if (transformNames == null)
+ {
+ throw new ArgumentNullException(nameof(transformNames));
+ }
+
+ _transformNames = transformNames;
+ }
+
+ /// <summary>
+ /// Specifies, in a pre-order depth-first traversal of a type's
+ /// construction, which <see cref="System.ValueTuple"/> elements are
+ /// meant to carry element names.
+ /// </summary>
+ public IList<string> TransformNames => _transformNames;
+ }
+} \ No newline at end of file
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/TypeForwardedToAttribute.cs b/src/mscorlib/src/System/Runtime/CompilerServices/TypeForwardedToAttribute.cs
index d9e067bd4c..147c103047 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/TypeForwardedToAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/TypeForwardedToAttribute.cs
@@ -26,18 +26,6 @@ namespace System.Runtime.CompilerServices
}
}
- internal static TypeForwardedToAttribute[] GetCustomAttribute(RuntimeAssembly assembly)
- {
- Type[] types = null;
- RuntimeAssembly.GetForwardedTypes(assembly.GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref types));
-
- TypeForwardedToAttribute[] attributes = new TypeForwardedToAttribute[types.Length];
- for (int i = 0; i < types.Length; ++i)
- attributes[i] = new TypeForwardedToAttribute(types[i]);
-
- return attributes;
- }
-
}
}
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/Unsafe.cs b/src/mscorlib/src/System/Runtime/CompilerServices/Unsafe.cs
index b212f4555b..adfa015161 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/Unsafe.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/Unsafe.cs
@@ -76,5 +76,18 @@ namespace System.Runtime.CompilerServices
// See getILIntrinsicImplementationForUnsafe for how this happens.
throw new InvalidOperationException();
}
+
+ /// <summary>
+ /// Initializes a block of memory at the given location with a given initial value
+ /// without assuming architecture dependent alignment of the address.
+ /// </summary>
+ [NonVersionable]
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static void InitBlockUnaligned(ref byte startAddress, byte value, uint byteCount)
+ {
+ // The body of this function will be replaced by the EE with unsafe code!!!
+ // See getILIntrinsicImplementationForUnsafe for how this happens.
+ throw new InvalidOperationException();
+ }
}
}
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/YieldAwaitable.cs b/src/mscorlib/src/System/Runtime/CompilerServices/YieldAwaitable.cs
index 86789bf12d..92d1b4f95b 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/YieldAwaitable.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/YieldAwaitable.cs
@@ -28,7 +28,6 @@ using System.Diagnostics.Contracts;
using System.Diagnostics.Tracing;
using System.Threading;
using System.Threading.Tasks;
-using System.Security.Permissions;
namespace System.Runtime.CompilerServices
{
diff --git a/src/mscorlib/src/System/Runtime/CompilerServices/jithelpers.cs b/src/mscorlib/src/System/Runtime/CompilerServices/jithelpers.cs
index c1346f7527..080e42f46f 100644
--- a/src/mscorlib/src/System/Runtime/CompilerServices/jithelpers.cs
+++ b/src/mscorlib/src/System/Runtime/CompilerServices/jithelpers.cs
@@ -216,7 +216,6 @@ namespace System.Runtime.CompilerServices {
extern static bool IsAddressInStack(IntPtr ptr);
#endif
-#if FEATURE_SPAN_OF_T
static internal bool ByRefLessThan<T>(ref T refA, ref T refB)
{
// The body of this function will be replaced by the EE with unsafe code!!!
@@ -239,6 +238,5 @@ namespace System.Runtime.CompilerServices {
typeof(ArrayPinningHelper).ToString(); // Type used by the actual method body
throw new InvalidOperationException();
}
-#endif // FEATURE_SPAN_OF_T
}
}
diff --git a/src/mscorlib/src/System/Runtime/ExceptionServices/CorruptingExceptionCommon.cs b/src/mscorlib/src/System/Runtime/ExceptionServices/CorruptingExceptionCommon.cs
index e12df10462..f04ddf065a 100644
--- a/src/mscorlib/src/System/Runtime/ExceptionServices/CorruptingExceptionCommon.cs
+++ b/src/mscorlib/src/System/Runtime/ExceptionServices/CorruptingExceptionCommon.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-#if FEATURE_CORRUPTING_EXCEPTIONS
/*=============================================================================
**
@@ -28,4 +27,3 @@ namespace System.Runtime.ExceptionServices {
}
}
}
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
diff --git a/src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionNotification.cs b/src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionNotification.cs
index b084891768..1b3e25b8b2 100644
--- a/src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionNotification.cs
+++ b/src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionNotification.cs
@@ -13,7 +13,6 @@
** <owner>gkhanna</owner>
**
=============================================================================*/
-#if FEATURE_EXCEPTION_NOTIFICATIONS
namespace System.Runtime.ExceptionServices {
using System;
using System.Runtime.ConstrainedExecution;
@@ -30,7 +29,6 @@ namespace System.Runtime.ExceptionServices {
// Returns the exception object pertaining to the first chance exception
public Exception Exception
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get { return m_Exception; }
}
@@ -38,4 +36,3 @@ namespace System.Runtime.ExceptionServices {
private Exception m_Exception;
}
}
-#endif // FEATURE_EXCEPTION_NOTIFICATIONS \ No newline at end of file
diff --git a/src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionServicesCommon.cs b/src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionServicesCommon.cs
index 905f12dfb5..e8eb6916b7 100644
--- a/src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionServicesCommon.cs
+++ b/src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionServicesCommon.cs
@@ -15,7 +15,6 @@
**
=============================================================================*/
-#if FEATURE_EXCEPTIONDISPATCHINFO
namespace System.Runtime.ExceptionServices {
using System;
@@ -132,4 +131,3 @@ namespace System.Runtime.ExceptionServices {
}
}
}
-#endif // FEATURE_EXCEPTIONDISPATCHINFO
diff --git a/src/mscorlib/src/System/Runtime/GcSettings.cs b/src/mscorlib/src/System/Runtime/GcSettings.cs
index 91997f5297..11143c5ee2 100644
--- a/src/mscorlib/src/System/Runtime/GcSettings.cs
+++ b/src/mscorlib/src/System/Runtime/GcSettings.cs
@@ -7,7 +7,6 @@ namespace System.Runtime {
using System;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
// These settings are the same format as in clr\src\vm\gcpriv.h
@@ -37,17 +36,15 @@ namespace System.Runtime {
Succeeded = 0,
NoGCInProgress = 1 // NoGCRegion is in progress, can't change pause mode.
};
-
+
public static GCLatencyMode LatencyMode
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get
{
return (GCLatencyMode)(GC.GetGCLatencyMode());
}
// We don't want to allow this API when hosted.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
set
{
if ((value < GCLatencyMode.Batch) || (value > GCLatencyMode.SustainedLowLatency))
@@ -63,14 +60,12 @@ namespace System.Runtime {
public static GCLargeObjectHeapCompactionMode LargeObjectHeapCompactionMode
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get
{
return (GCLargeObjectHeapCompactionMode)(GC.GetLOHCompactionMode());
}
// We don't want to allow this API when hosted.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
set
{
if ((value < GCLargeObjectHeapCompactionMode.Default) ||
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ArrayWithOffset.cs b/src/mscorlib/src/System/Runtime/InteropServices/ArrayWithOffset.cs
index 77db3a7f2c..fc15f4e1a7 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ArrayWithOffset.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ArrayWithOffset.cs
@@ -9,7 +9,6 @@ namespace System.Runtime.InteropServices {
using System.Runtime.Versioning;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct ArrayWithOffset
{
//private ArrayWithOffset()
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/Attributes.cs b/src/mscorlib/src/System/Runtime/InteropServices/Attributes.cs
index 2de7304a0b..b5bde22057 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/Attributes.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/Attributes.cs
@@ -12,7 +12,6 @@ namespace System.Runtime.InteropServices{
using System.Diagnostics.Contracts;
[AttributeUsage(AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class UnmanagedFunctionPointerAttribute : Attribute
{
CallingConvention m_callingConvention;
@@ -33,7 +32,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Enum | AttributeTargets.Struct | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public sealed class TypeIdentifierAttribute : Attribute
{
public TypeIdentifierAttribute() { }
@@ -57,7 +55,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Event, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class DispIdAttribute : Attribute
{
internal int _val;
@@ -69,19 +66,16 @@ namespace System.Runtime.InteropServices{
}
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum ComInterfaceType
{
InterfaceIsDual = 0,
InterfaceIsIUnknown = 1,
InterfaceIsIDispatch = 2,
- [System.Runtime.InteropServices.ComVisible(false)]
InterfaceIsIInspectable = 3,
}
[AttributeUsage(AttributeTargets.Interface, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class InterfaceTypeAttribute : Attribute
{
internal ComInterfaceType _val;
@@ -97,7 +91,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class ComDefaultInterfaceAttribute : Attribute
{
internal Type _val;
@@ -111,7 +104,6 @@ namespace System.Runtime.InteropServices{
}
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum ClassInterfaceType
{
None = 0,
@@ -120,7 +112,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class ClassInterfaceAttribute : Attribute
{
internal ClassInterfaceType _val;
@@ -137,7 +128,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Delegate | AttributeTargets.Enum | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class ComVisibleAttribute : Attribute
{
internal bool _val;
@@ -148,20 +138,7 @@ namespace System.Runtime.InteropServices{
public bool Value { get { return _val; } }
}
- [AttributeUsage(AttributeTargets.Interface, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class TypeLibImportClassAttribute : Attribute
- {
- internal String _importClassName;
- public TypeLibImportClassAttribute(Type importClass)
- {
- _importClassName = importClass.ToString();
- }
- public String Value { get { return _importClassName; } }
- }
-
- [AttributeUsage(AttributeTargets.Method, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
+ [AttributeUsage(AttributeTargets.Method, Inherited = false)]
public sealed class LCIDConversionAttribute : Attribute
{
internal int _val;
@@ -169,29 +146,10 @@ namespace System.Runtime.InteropServices{
{
_val = lcid;
}
- public int Value { get {return _val;} }
- }
-
- [AttributeUsage(AttributeTargets.Method, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ComRegisterFunctionAttribute : Attribute
- {
- public ComRegisterFunctionAttribute()
- {
- }
+ public int Value { get {return _val;} }
}
- [AttributeUsage(AttributeTargets.Method, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ComUnregisterFunctionAttribute : Attribute
- {
- public ComUnregisterFunctionAttribute()
- {
- }
- }
-
- [AttributeUsage(AttributeTargets.Class, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
+ [AttributeUsage(AttributeTargets.Class, Inherited = false)]
public sealed class ProgIdAttribute : Attribute
{
internal String _val;
@@ -199,50 +157,10 @@ namespace System.Runtime.InteropServices{
{
_val = progId;
}
- public String Value { get {return _val;} }
- }
-
- [AttributeUsage(AttributeTargets.Assembly, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ImportedFromTypeLibAttribute : Attribute
- {
- internal String _val;
- public ImportedFromTypeLibAttribute(String tlbFile)
- {
- _val = tlbFile;
- }
public String Value { get {return _val;} }
}
- [Obsolete("The IDispatchImplAttribute is deprecated.", false)]
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum IDispatchImplType
- {
- SystemDefinedImpl = 0,
- InternalImpl = 1,
- CompatibleImpl = 2,
- }
-
- [AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly, Inherited = false)]
- [Obsolete("This attribute is deprecated and will be removed in a future version.", false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class IDispatchImplAttribute : Attribute
- {
- internal IDispatchImplType _val;
- public IDispatchImplAttribute(IDispatchImplType implType)
- {
- _val = implType;
- }
- public IDispatchImplAttribute(short implType)
- {
- _val = (IDispatchImplType)implType;
- }
- public IDispatchImplType Value { get {return _val;} }
- }
-
[AttributeUsage(AttributeTargets.Class, Inherited = true)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class ComSourceInterfacesAttribute : Attribute
{
internal String _val;
@@ -269,126 +187,7 @@ namespace System.Runtime.InteropServices{
public String Value { get {return _val;} }
}
- [AttributeUsage(AttributeTargets.All, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ComConversionLossAttribute : Attribute
- {
- public ComConversionLossAttribute()
- {
- }
- }
-
-[Serializable]
-[Flags()]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum TypeLibTypeFlags
- {
- FAppObject = 0x0001,
- FCanCreate = 0x0002,
- FLicensed = 0x0004,
- FPreDeclId = 0x0008,
- FHidden = 0x0010,
- FControl = 0x0020,
- FDual = 0x0040,
- FNonExtensible = 0x0080,
- FOleAutomation = 0x0100,
- FRestricted = 0x0200,
- FAggregatable = 0x0400,
- FReplaceable = 0x0800,
- FDispatchable = 0x1000,
- FReverseBind = 0x2000,
- }
-
-[Serializable]
-[Flags()]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum TypeLibFuncFlags
- {
- FRestricted = 0x0001,
- FSource = 0x0002,
- FBindable = 0x0004,
- FRequestEdit = 0x0008,
- FDisplayBind = 0x0010,
- FDefaultBind = 0x0020,
- FHidden = 0x0040,
- FUsesGetLastError = 0x0080,
- FDefaultCollelem = 0x0100,
- FUiDefault = 0x0200,
- FNonBrowsable = 0x0400,
- FReplaceable = 0x0800,
- FImmediateBind = 0x1000,
- }
-
-[Serializable]
-[Flags()]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum TypeLibVarFlags
- {
- FReadOnly = 0x0001,
- FSource = 0x0002,
- FBindable = 0x0004,
- FRequestEdit = 0x0008,
- FDisplayBind = 0x0010,
- FDefaultBind = 0x0020,
- FHidden = 0x0040,
- FRestricted = 0x0080,
- FDefaultCollelem = 0x0100,
- FUiDefault = 0x0200,
- FNonBrowsable = 0x0400,
- FReplaceable = 0x0800,
- FImmediateBind = 0x1000,
- }
-
- [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Enum | AttributeTargets.Struct, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class TypeLibTypeAttribute : Attribute
- {
- internal TypeLibTypeFlags _val;
- public TypeLibTypeAttribute(TypeLibTypeFlags flags)
- {
- _val = flags;
- }
- public TypeLibTypeAttribute(short flags)
- {
- _val = (TypeLibTypeFlags)flags;
- }
- public TypeLibTypeFlags Value { get {return _val;} }
- }
-
- [AttributeUsage(AttributeTargets.Method, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class TypeLibFuncAttribute : Attribute
- {
- internal TypeLibFuncFlags _val;
- public TypeLibFuncAttribute(TypeLibFuncFlags flags)
- {
- _val = flags;
- }
- public TypeLibFuncAttribute(short flags)
- {
- _val = (TypeLibFuncFlags)flags;
- }
- public TypeLibFuncFlags Value { get {return _val;} }
- }
-
- [AttributeUsage(AttributeTargets.Field, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class TypeLibVarAttribute : Attribute
- {
- internal TypeLibVarFlags _val;
- public TypeLibVarAttribute(TypeLibVarFlags flags)
- {
- _val = flags;
- }
- public TypeLibVarAttribute(short flags)
- {
- _val = (TypeLibVarFlags)flags;
- }
- public TypeLibVarFlags Value { get {return _val;} }
- }
-
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum VarEnum
{
VT_EMPTY = 0,
@@ -438,7 +237,6 @@ namespace System.Runtime.InteropServices{
}
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
// Note that this enum should remain in-sync with the CorNativeType enum in corhdr.h
public enum UnmanagedType
{
@@ -512,18 +310,14 @@ namespace System.Runtime.InteropServices{
Error = 0x2d,
- [System.Runtime.InteropServices.ComVisible(false)]
IInspectable = 0x2e,
- [System.Runtime.InteropServices.ComVisible(false)]
HString = 0x2f, // Windows Runtime HSTRING
- [System.Runtime.InteropServices.ComVisible(false)]
LPUTF8Str = 0x30, // UTF8 string
}
[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.ReturnValue, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public unsafe sealed class MarshalAsAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeParameterInfo parameter)
@@ -622,15 +416,12 @@ namespace System.Runtime.InteropServices{
public int SizeConst; // constant C
// Fields used with SubType = CustomMarshaler
- [System.Runtime.InteropServices.ComVisible(true)]
public String MarshalType; // Name of marshaler class
- [System.Runtime.InteropServices.ComVisible(true)]
public Type MarshalTypeRef; // Type of marshaler class
public String MarshalCookie; // cookie to pass to marshaler
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class ComImportAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeType type)
@@ -652,7 +443,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Struct | AttributeTargets.Delegate, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class GuidAttribute : Attribute
{
internal String _val;
@@ -664,7 +454,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Method, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class PreserveSigAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeMethodInfo method)
@@ -686,7 +475,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class InAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeParameterInfo parameter)
@@ -704,7 +492,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class OutAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeParameterInfo parameter)
@@ -722,7 +509,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class OptionalAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeParameterInfo parameter)
@@ -752,7 +538,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Method, AllowMultiple = false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public sealed class DefaultDllImportSearchPathsAttribute : Attribute
{
internal DllImportSearchPath _paths;
@@ -765,7 +550,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Method, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public unsafe sealed class DllImportAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeMethodInfo method)
@@ -859,7 +643,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public unsafe sealed class StructLayoutAttribute : Attribute
{
private const int DEFAULT_PACKING_SIZE = 8;
@@ -931,7 +714,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Field, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public unsafe sealed class FieldOffsetAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeFieldInfo field)
@@ -958,49 +740,7 @@ namespace System.Runtime.InteropServices{
public int Value { get { return _val; } }
}
- [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ComAliasNameAttribute : Attribute
- {
- internal String _val;
- public ComAliasNameAttribute(String alias)
- {
- _val = alias;
- }
- public String Value { get {return _val;} }
- }
-
- [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Interface, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class AutomationProxyAttribute : Attribute
- {
- internal bool _val;
- public AutomationProxyAttribute(bool val)
- {
- _val = val;
- }
- public bool Value { get {return _val;} }
- }
-
- [AttributeUsage(AttributeTargets.Assembly, Inherited = false, AllowMultiple = true)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class PrimaryInteropAssemblyAttribute : Attribute
- {
- internal int _major;
- internal int _minor;
-
- public PrimaryInteropAssemblyAttribute(int major, int minor)
- {
- _major = major;
- _minor = minor;
- }
-
- public int MajorVersion { get {return _major;} }
- public int MinorVersion { get {return _minor;} }
- }
-
[AttributeUsage(AttributeTargets.Interface, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class CoClassAttribute : Attribute
{
internal Type _CoClass;
@@ -1013,65 +753,7 @@ namespace System.Runtime.InteropServices{
public Type CoClass { get { return _CoClass; } }
}
- [AttributeUsage(AttributeTargets.Interface, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ComEventInterfaceAttribute : Attribute
- {
- internal Type _SourceInterface;
- internal Type _EventProvider;
-
- public ComEventInterfaceAttribute(Type SourceInterface, Type EventProvider)
- {
- _SourceInterface = SourceInterface;
- _EventProvider = EventProvider;
- }
-
- public Type SourceInterface { get {return _SourceInterface;} }
- public Type EventProvider { get {return _EventProvider;} }
- }
-
- [AttributeUsage(AttributeTargets.Assembly, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class TypeLibVersionAttribute : Attribute
- {
- internal int _major;
- internal int _minor;
-
- public TypeLibVersionAttribute(int major, int minor)
- {
- _major = major;
- _minor = minor;
- }
-
- public int MajorVersion { get {return _major;} }
- public int MinorVersion { get {return _minor;} }
- }
-
- [AttributeUsage(AttributeTargets.Assembly, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ComCompatibleVersionAttribute : Attribute
- {
- internal int _major;
- internal int _minor;
- internal int _build;
- internal int _revision;
-
- public ComCompatibleVersionAttribute(int major, int minor, int build, int revision)
- {
- _major = major;
- _minor = minor;
- _build = build;
- _revision = revision;
- }
-
- public int MajorVersion { get {return _major;} }
- public int MinorVersion { get {return _minor;} }
- public int BuildNumber { get {return _build;} }
- public int RevisionNumber { get {return _revision;} }
- }
-
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Struct, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class BestFitMappingAttribute : Attribute
{
internal bool _bestFitMapping;
@@ -1086,7 +768,6 @@ namespace System.Runtime.InteropServices{
}
[AttributeUsage(AttributeTargets.Module, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class DefaultCharSetAttribute : Attribute
{
internal CharSet _CharSet;
@@ -1098,33 +779,5 @@ namespace System.Runtime.InteropServices{
public CharSet CharSet { get { return _CharSet; } }
}
-
- [Obsolete("This attribute has been deprecated. Application Domains no longer respect Activation Context boundaries in IDispatch calls.", false)]
- [AttributeUsage(AttributeTargets.Assembly, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class SetWin32ContextInIDispatchAttribute : Attribute
- {
- public SetWin32ContextInIDispatchAttribute()
- {
- }
- }
-
- [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
- [System.Runtime.InteropServices.ComVisible(false)]
- public sealed class ManagedToNativeComInteropStubAttribute : Attribute
- {
- internal Type _classType;
- internal String _methodName;
-
- public ManagedToNativeComInteropStubAttribute(Type classType, String methodName)
- {
- _classType = classType;
- _methodName = methodName;
- }
-
- public Type ClassType { get { return _classType; } }
- public String MethodName { get { return _methodName; } }
- }
-
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/BStrWrapper.cs b/src/mscorlib/src/System/Runtime/InteropServices/BStrWrapper.cs
index 1673c913a6..d36f8cfa39 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/BStrWrapper.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/BStrWrapper.cs
@@ -15,10 +15,8 @@ namespace System.Runtime.InteropServices {
using System;
using System.Security;
- using System.Security.Permissions;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class BStrWrapper
{
public BStrWrapper(String value)
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/COMException.cs b/src/mscorlib/src/System/Runtime/InteropServices/COMException.cs
index fd500fdbce..87e6be6d4e 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/COMException.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/COMException.cs
@@ -21,7 +21,6 @@ namespace System.Runtime.InteropServices {
// Exception for COM Interop errors where we don't recognize the HResult.
//
- [ComVisible(true)]
[Serializable]
public class COMException : ExternalException {
public COMException()
@@ -46,18 +45,6 @@ namespace System.Runtime.InteropServices {
SetErrorCode(errorCode);
}
- internal COMException(int hresult)
- : base(Win32Native.GetMessage(hresult))
- {
- SetErrorCode(hresult);
- }
-
- internal COMException(String message, int hresult, Exception inner)
- : base(message, inner)
- {
- SetErrorCode(hresult);
- }
-
protected COMException(SerializationInfo info, StreamingContext context) : base(info, context) {
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/CallingConvention.cs b/src/mscorlib/src/System/Runtime/InteropServices/CallingConvention.cs
index cf4eb48af0..2ef1cf496e 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/CallingConvention.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/CallingConvention.cs
@@ -9,7 +9,6 @@ namespace System.Runtime.InteropServices {
using System;
// Used for the CallingConvention named argument to the DllImport attribute
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum CallingConvention
{
Winapi = 1,
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/CharSet.cs b/src/mscorlib/src/System/Runtime/InteropServices/CharSet.cs
index 3c0710a558..e60d676557 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/CharSet.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/CharSet.cs
@@ -13,7 +13,6 @@ namespace System.Runtime.InteropServices {
// Generally you probably want to use Auto, which does the
// right thing 99% of the time.
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum CharSet
{
None = 1, // User didn't specify how to marshal strings.
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ComEventsMethod.cs b/src/mscorlib/src/System/Runtime/InteropServices/ComEventsMethod.cs
index 2da0c5eea3..c2f56b0580 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ComEventsMethod.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ComEventsMethod.cs
@@ -45,52 +45,6 @@ namespace System.Runtime.InteropServices {
get { return _d; }
set { _d = value; }
}
-
- public object Invoke(object[] args) {
- if (_d == null)
- return null;
-
- if (_once == false) {
- PreProcessSignature();
- _once = true;
- }
-
- if (_cachedTargetTypes != null && _expectedParamsCount == args.Length) {
- for (int i = 0; i < _expectedParamsCount; i++) {
- if (_cachedTargetTypes[i] != null) {
- args[i] = Enum.ToObject(_cachedTargetTypes[i], args[i]);
- }
- }
- }
-
- return _d.DynamicInvoke(args);
- }
-
- private void PreProcessSignature() {
- ParameterInfo[] parameters = _d.Method.GetParameters();
- _expectedParamsCount = parameters.Length;
-
- Type[] enumTypes = new Type[_expectedParamsCount];
-
- bool needToHandleCoercion = false;
-
- for (int i = 0; i < _expectedParamsCount; i++) {
- ParameterInfo pi = parameters[i];
- // recognize only 'ref Enum' signatures and cache
- // both enum type and the underlying type.
- if (pi.ParameterType.IsByRef &&
- pi.ParameterType.HasElementType &&
- pi.ParameterType.GetElementType().IsEnum) {
-
- needToHandleCoercion = true;
- enumTypes[i] = pi.ParameterType.GetElementType();
- }
- }
-
- if (needToHandleCoercion == true) {
- _cachedTargetTypes = enumTypes;
- }
- }
}
#region private fields
@@ -145,15 +99,9 @@ namespace System.Runtime.InteropServices {
return methods;
}
-
- #endregion
-
- #region public properties / methods
-
- internal int DispId {
- get { return _dispid; }
- }
+#endregion
+#region public properties / methods
internal bool Empty {
get { return _delegateWrappers == null || _delegateWrappers.Length == 0; }
@@ -225,22 +173,6 @@ namespace System.Runtime.InteropServices {
_delegateWrappers = newDelegateWrappers;
}
- internal object Invoke(object[] args) {
- BCLDebug.Assert(Empty == false, "event sink is executed but delegates list is empty");
-
- // Issue: see code:ComEventsHelper#ComEventsRetValIssue
- object result = null;
- DelegateWrapper[] invocationList = _delegateWrappers;
- foreach (DelegateWrapper wrapper in invocationList) {
- if (wrapper == null || wrapper.Delegate == null)
- continue;
-
- result = wrapper.Invoke(args);
- }
-
- return result;
- }
-
#endregion
}
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ComEventsSink.cs b/src/mscorlib/src/System/Runtime/InteropServices/ComEventsSink.cs
index 05978a607f..f2b22e3ceb 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ComEventsSink.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ComEventsSink.cs
@@ -16,7 +16,7 @@ namespace System.Runtime.InteropServices {
using System.Diagnostics;
// see code:ComEventsHelper#ComEventsArchitecture
- internal class ComEventsSink : NativeMethods.IDispatch, ICustomQueryInterface
+ internal class ComEventsSink : ICustomQueryInterface
{
#region private fields
@@ -108,122 +108,6 @@ namespace System.Runtime.InteropServices {
#endregion
-
-#region IDispatch Members
-
- void NativeMethods.IDispatch.GetTypeInfoCount(out uint pctinfo) {
- pctinfo = 0;
- }
-
- void NativeMethods.IDispatch.GetTypeInfo(uint iTInfo, int lcid, out IntPtr info) {
- throw new NotImplementedException();
- }
-
- void NativeMethods.IDispatch.GetIDsOfNames(ref Guid iid, string[] names, uint cNames, int lcid, int[] rgDispId) {
- throw new NotImplementedException();
- }
-
- private const VarEnum VT_BYREF_VARIANT = VarEnum.VT_BYREF | VarEnum.VT_VARIANT;
- private const VarEnum VT_TYPEMASK = (VarEnum) 0x0fff;
- private const VarEnum VT_BYREF_TYPEMASK = VT_TYPEMASK | VarEnum.VT_BYREF;
-
- private static unsafe Variant *GetVariant(Variant *pSrc)
- {
- if (pSrc->VariantType == VT_BYREF_VARIANT)
- {
- // For VB6 compatibility reasons, if the VARIANT is a VT_BYREF | VT_VARIANT that
- // contains another VARIANT with VT_BYREF | VT_VARIANT, then we need to extract the
- // inner VARIANT and use it instead of the outer one. Note that if the inner VARIANT
- // is VT_BYREF | VT_VARIANT | VT_ARRAY, it will pass the below test too.
- Variant *pByRefVariant = (Variant *)pSrc->AsByRefVariant;
- if ((pByRefVariant->VariantType & VT_BYREF_TYPEMASK) == VT_BYREF_VARIANT)
- return (Variant *)pByRefVariant;
- }
-
- return pSrc;
- }
-
- unsafe void NativeMethods.IDispatch.Invoke(
- int dispid,
- ref Guid riid,
- int lcid,
- ComTypes.INVOKEKIND wFlags,
- ref ComTypes.DISPPARAMS pDispParams,
- IntPtr pvarResult,
- IntPtr pExcepInfo,
- IntPtr puArgErr) {
-
- ComEventsMethod method = FindMethod(dispid);
- if (method == null)
- return;
-
- // notice the unsafe pointers we are using. This is to avoid unnecessary
- // arguments marshalling. see code:ComEventsHelper#ComEventsArgsMarshalling
-
- object [] args = new object[pDispParams.cArgs];
- int [] byrefsMap = new int[pDispParams.cArgs];
- bool [] usedArgs = new bool[pDispParams.cArgs];
-
- Variant* pvars = (Variant*)pDispParams.rgvarg;
- int* pNamedArgs = (int*)pDispParams.rgdispidNamedArgs;
-
- // copy the named args (positional) as specified
- int i;
- int pos;
- for (i = 0; i < pDispParams.cNamedArgs; i++) {
- pos = pNamedArgs[i];
-
- Variant* pvar = GetVariant(&pvars[i]);
- args[pos] = pvar->ToObject();
- usedArgs[pos] = true;
-
- if (pvar->IsByRef) {
- byrefsMap[pos] = i;
- } else {
- byrefsMap[pos] = -1;
- }
- }
-
- // copy the rest of the arguments in the reverse order
- pos = 0;
- for (; i < pDispParams.cArgs; i++) {
- // find the next unassigned argument
- while (usedArgs[pos]) {
- ++pos;
- }
-
- Variant* pvar = GetVariant(&pvars[pDispParams.cArgs - 1 - i]);
- args[pos] = pvar->ToObject();
-
- if (pvar->IsByRef)
- byrefsMap[pos] = pDispParams.cArgs - 1 - i;
- else
- byrefsMap[pos] = -1;
-
- pos++;
- }
-
- // Do the actual delegate invocation
- object result;
- result = method.Invoke(args);
-
- // convert result to VARIANT
- if (pvarResult != IntPtr.Zero) {
- Marshal.GetNativeVariantForObject(result, pvarResult);
- }
-
- // Now we need to marshal all the byrefs back
- for (i = 0; i < pDispParams.cArgs; i++) {
- int idxToPos = byrefsMap[i];
- if (idxToPos == -1)
- continue;
-
- GetVariant(&pvars[idxToPos])->CopyFromIndirect(args[i]);
- }
- }
-
-#endregion
-
static Guid IID_IManagedObject = new Guid("{C3FCC19E-A970-11D2-8B5A-00A0C9B7C9C4}");
CustomQueryInterfaceResult ICustomQueryInterface.GetInterface(ref Guid iid, out IntPtr ppv) {
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ComMemberType.cs b/src/mscorlib/src/System/Runtime/InteropServices/ComMemberType.cs
index 3be2a56da5..c61d1b21be 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ComMemberType.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ComMemberType.cs
@@ -9,7 +9,6 @@ namespace System.Runtime.InteropServices {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum ComMemberType
{
Method = 0,
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerable.cs b/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerable.cs
deleted file mode 100644
index 1a13399a88..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerable.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*==========================================================================
-**
-** Interface: IEnumerable
-**
-**
-** Purpose:
-** This interface is redefined here since the original IEnumerable interface
-** has all its methods marked as ecall's since it is a managed standard
-** interface. This interface is used from within the runtime to make a call
-** on the COM server directly when it implements the IEnumerable interface.
-**
-**
-==========================================================================*/
-namespace System.Runtime.InteropServices.ComTypes
-{
- using System;
-
- [Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
- internal interface IEnumerable
- {
- [DispId(-4)]
- System.Collections.IEnumerator GetEnumerator();
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerator.cs b/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerator.cs
deleted file mode 100644
index aea2017b1e..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerator.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*==========================================================================
-**
-** Interface: IEnumerator
-**
-**
-** Purpose:
-** This interface is redefined here since the original IEnumerator interface
-** has all its methods marked as ecall's since it is a managed standard
-** interface. This interface is used from within the runtime to make a call
-** on the COM server directly when it implements the IEnumerator interface.
-**
-**
-==========================================================================*/
-namespace System.Runtime.InteropServices.ComTypes
-{
- using System;
-
- [Guid("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
- internal interface IEnumerator
- {
- bool MoveNext();
-
- Object Current
- {
- get;
- }
-
- void Reset();
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IExpando.cs b/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IExpando.cs
deleted file mode 100644
index ad4ed0b8be..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IExpando.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*==========================================================================
-**
-** Interface: IExpando
-**
-**
-** Purpose:
-** This interface is redefined here since the original IExpando interface
-** has all its methods marked as ecall's since it is a managed standard
-** interface. This interface is used from within the runtime to make a call
-** on the COM server directly when it implements the IExpando interface.
-**
-**
-==========================================================================*/
-namespace System.Runtime.InteropServices.ComTypes
-{
- using System;
- using System.Reflection;
-
- [Guid("AFBF15E6-C37C-11d2-B88E-00A0C9B471B8")]
- internal interface IExpando : IReflect
- {
- FieldInfo AddField(String name);
- PropertyInfo AddProperty(String name);
- MethodInfo AddMethod(String name, Delegate method);
- void RemoveMember(MemberInfo m);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IReflect.cs b/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IReflect.cs
deleted file mode 100644
index c86f961d01..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IReflect.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*==========================================================================
-**
-** Interface: IReflect
-**
-**
-** Purpose:
-** This interface is redefined here since the original IReflect interface
-** has all its methods marked as ecall's since it is a managed standard
-** interface. This interface is used from within the runtime to make a call
-** on the COM server directly when it implements the IReflect interface.
-**
-**
-==========================================================================*/
-namespace System.Runtime.InteropServices.ComTypes
-{
- using System;
- using System.Reflection;
- using CultureInfo = System.Globalization.CultureInfo;
-
- [Guid("AFBF15E5-C37C-11d2-B88E-00A0C9B471B8")]
- internal interface IReflect
- {
- MethodInfo GetMethod(String name,BindingFlags bindingAttr,Binder binder,
- Type[] types,ParameterModifier[] modifiers);
-
- MethodInfo GetMethod(String name,BindingFlags bindingAttr);
-
- MethodInfo[] GetMethods(
- BindingFlags bindingAttr);
-
- FieldInfo GetField(
- String name,
- BindingFlags bindingAttr);
-
- FieldInfo[] GetFields(
- BindingFlags bindingAttr);
-
- PropertyInfo GetProperty(
- String name,
- BindingFlags bindingAttr);
-
- PropertyInfo GetProperty(
- String name,
- BindingFlags bindingAttr,
- Binder binder,
- Type returnType,
- Type[] types,
- ParameterModifier[] modifiers);
-
- PropertyInfo[] GetProperties(
- BindingFlags bindingAttr);
-
- MemberInfo[] GetMember(
- String name,
- BindingFlags bindingAttr);
-
- MemberInfo[] GetMembers(
- BindingFlags bindingAttr);
-
- Object InvokeMember(
- String name,
- BindingFlags invokeAttr,
- Binder binder,
- Object target,
- Object[] args,
- ParameterModifier[] modifiers,
- CultureInfo culture,
- String[] namedParameters);
-
- Type UnderlyingSystemType
- {
- get;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/CriticalHandle.cs b/src/mscorlib/src/System/Runtime/InteropServices/CriticalHandle.cs
index 700e059293..840270141b 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/CriticalHandle.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/CriticalHandle.cs
@@ -48,7 +48,6 @@
using System;
using System.Reflection;
using System.Threading;
-using System.Security.Permissions;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Runtime.ConstrainedExecution;
@@ -150,7 +149,6 @@ public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
private bool _isClosed; // Set by SetHandleAsInvalid or Close/Dispose/finalization.
// Creates a CriticalHandle class. Users must then set the Handle property or allow P/Invoke marshaling to set it implicitly.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected CriticalHandle(IntPtr invalidHandleValue)
{
handle = invalidHandleValue;
@@ -167,13 +165,11 @@ public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
// Adding an empty default constructor for annotation purposes
private CriticalHandle(){}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
~CriticalHandle()
{
Dispose(false);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private void Cleanup()
{
if (IsClosed)
@@ -197,10 +193,8 @@ public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private extern void FireCustomerDebugProbe();
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
protected void SetHandle(IntPtr handle) {
this.handle = handle;
}
@@ -208,7 +202,6 @@ public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
// Returns whether the handle has been explicitly marked as closed
// (Close/Dispose) or invalid (SetHandleAsInvalid).
public bool IsClosed {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get { return _isClosed; }
}
@@ -217,22 +210,18 @@ public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
// know what an invalid handle looks like, so this method is abstract and
// must be provided by a derived type.
public abstract bool IsInvalid {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void Close() {
Dispose(true);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void Dispose()
{
Dispose(true);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
protected virtual void Dispose(bool disposing)
{
Cleanup();
@@ -242,7 +231,6 @@ public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
// your handle is invalid and you want to record that information.
// An example is calling a syscall and getting back ERROR_INVALID_HANDLE.
// This method will normally leak handles!
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void SetHandleAsInvalid()
{
_isClosed = true;
@@ -257,7 +245,6 @@ public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
// The boolean returned should be true for success and false if a
// catastrophic error occurred and you wish to trigger a diagnostic for
// debugging purposes (the SafeHandleCriticalFailure MDA).
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
protected abstract bool ReleaseHandle();
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/CurrencyWrapper.cs b/src/mscorlib/src/System/Runtime/InteropServices/CurrencyWrapper.cs
index 470e7b20dd..304419e5b0 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/CurrencyWrapper.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/CurrencyWrapper.cs
@@ -16,7 +16,6 @@ namespace System.Runtime.InteropServices {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class CurrencyWrapper
{
public CurrencyWrapper(Decimal obj)
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/DispatchWrapper.cs b/src/mscorlib/src/System/Runtime/InteropServices/DispatchWrapper.cs
index 47b7542caf..ccf25af0f9 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/DispatchWrapper.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/DispatchWrapper.cs
@@ -15,10 +15,8 @@ namespace System.Runtime.InteropServices {
using System;
using System.Security;
- using System.Security.Permissions;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class DispatchWrapper
{
public DispatchWrapper(Object obj)
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ErrorWrapper.cs b/src/mscorlib/src/System/Runtime/InteropServices/ErrorWrapper.cs
index a9fa58f65f..da02893b1e 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ErrorWrapper.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ErrorWrapper.cs
@@ -14,10 +14,8 @@
namespace System.Runtime.InteropServices {
using System;
- using System.Security.Permissions;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ErrorWrapper
{
public ErrorWrapper(int errorCode)
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/Expando/IExpando.cs b/src/mscorlib/src/System/Runtime/InteropServices/Expando/IExpando.cs
index 62b65d1aff..429ce13918 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/Expando/IExpando.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/Expando/IExpando.cs
@@ -17,22 +17,12 @@ namespace System.Runtime.InteropServices.Expando {
using System.Reflection;
[Guid("AFBF15E6-C37C-11d2-B88E-00A0C9B471B8")]
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IExpando : IReflect
+ internal interface IExpando : IReflect
{
// Add a new Field to the reflection object. The field has
// name as its name.
FieldInfo AddField(String name);
- // Add a new Property to the reflection object. The property has
- // name as its name.
- PropertyInfo AddProperty(String name);
-
- // Add a new Method to the reflection object. The method has
- // name as its name and method is a delegate
- // to the method.
- MethodInfo AddMethod(String name, Delegate method);
-
// Removes the specified member.
void RemoveMember(MemberInfo m);
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ExtensibleClassFactory.cs b/src/mscorlib/src/System/Runtime/InteropServices/ExtensibleClassFactory.cs
deleted file mode 100644
index a12a38ec6d..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/ExtensibleClassFactory.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: Methods used to customize the creation of managed objects that
-** extend from unmanaged objects.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices {
- using System.Runtime.InteropServices;
- using System.Runtime.Remoting;
- using System.Runtime.CompilerServices;
- using System.Runtime.Versioning;
-
- using System;
-[System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ExtensibleClassFactory
- {
-
- // Prevent instantiation.
- private ExtensibleClassFactory() {}
-
- // Register a delegate that will be called whenever an instance of a managed
- // type that extends from an unmanaged type needs to allocate the aggregated
- // unmanaged object. This delegate is expected to allocate and aggregate the
- // unmanaged object and is called in place of a CoCreateInstance. This
- // routine must be called in the context of the static initializer for the
- // class for which the callbacks will be made.
- // It is not legal to register this callback from a class that has any
- // parents that have already registered a callback.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public static extern void RegisterObjectCreationCallback(ObjectCreationDelegate callback);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ExternalException.cs b/src/mscorlib/src/System/Runtime/InteropServices/ExternalException.cs
index 70a6dfe366..7e1f395e4e 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ExternalException.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ExternalException.cs
@@ -20,7 +20,6 @@ namespace System.Runtime.InteropServices {
// Base exception for COM Interop errors &; Structured Exception Handler
// exceptions.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class ExternalException : SystemException {
public ExternalException()
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/GcHandle.cs b/src/mscorlib/src/System/Runtime/InteropServices/GcHandle.cs
index 5530819c5f..598fee0618 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/GcHandle.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/GcHandle.cs
@@ -5,18 +5,20 @@
namespace System.Runtime.InteropServices
{
using System;
- using System.Security.Permissions;
using System.Runtime.CompilerServices;
using System.Threading;
- using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
+#if BIT64
+ using nint = System.Int64;
+#else
+ using nint = System.Int32;
+#endif
// These are the types of handles used by the EE.
// IMPORTANT: These must match the definitions in ObjectHandle.h in the EE.
// IMPORTANT: If new values are added to the enum the GCHandle::MaxHandleType
// constant must be updated.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public enum GCHandleType
{
Weak = 0,
@@ -40,7 +42,6 @@ namespace System.Runtime.InteropServices
//
[StructLayout(LayoutKind.Sequential)]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct GCHandle
{
// IMPORTANT: This must be kept in sync with the GCHandleType enum.
@@ -60,20 +61,23 @@ namespace System.Runtime.InteropServices
{
// Make sure the type parameter is within the valid range for the enum.
if ((uint)type > (uint)MaxHandleType)
- throw new ArgumentOutOfRangeException(nameof(type), Environment.GetResourceString("ArgumentOutOfRange_Enum"));
+ ThrowArgumentOutOfRangeException_ArgumentOutOfRange_Enum();
Contract.EndContractBlock();
- m_handle = InternalAlloc(value, type);
+ IntPtr handle = InternalAlloc(value, type);
- // Record if the handle is pinned.
if (type == GCHandleType.Pinned)
- SetIsPinned();
- }
+ {
+ // Record if the handle is pinned.
+ handle = (IntPtr)((nint)handle | 1);
+ }
+
+ m_handle = handle;
+ }
// Used in the conversion functions below.
internal GCHandle(IntPtr handle)
{
- InternalCheckDomain(handle);
m_handle = handle;
}
@@ -93,36 +97,21 @@ namespace System.Runtime.InteropServices
return new GCHandle(value, type);
}
-
// Frees a GC handle.
public void Free()
{
- // Copy the handle instance member to a local variable. This is required to prevent
- // race conditions releasing the handle.
- IntPtr handle = m_handle;
-
// Free the handle if it hasn't already been freed.
- if (handle != IntPtr.Zero && Interlocked.CompareExchange(ref m_handle, IntPtr.Zero, handle) == handle)
- {
+ IntPtr handle = Interlocked.Exchange(ref m_handle, IntPtr.Zero);
+ ValidateHandle(handle);
#if MDA_SUPPORTED
- // If this handle was passed out to unmanaged code, we need to remove it
- // from the cookie table.
- // NOTE: the entry in the cookie table must be released before the
- // internal handle is freed to prevent a race with reusing GC handles.
- if (s_probeIsActive)
- s_cookieTable.RemoveHandleIfPresent(handle);
-#endif
-
-#if BIT64
- InternalFree((IntPtr)(((long)handle) & ~1L));
-#else // BIT64 (32)
- InternalFree((IntPtr)(((int)handle) & ~1));
+ // If this handle was passed out to unmanaged code, we need to remove it
+ // from the cookie table.
+ // NOTE: the entry in the cookie table must be released before the
+ // internal handle is freed to prevent a race with reusing GC handles.
+ if (s_probeIsActive)
+ s_cookieTable.RemoveHandleIfPresent(handle);
#endif
- }
- else
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_HandleIsNotInitialized"));
- }
+ InternalFree(GetHandleValue(handle));
}
// Target property - allows getting / updating of the handle's referent.
@@ -130,23 +119,17 @@ namespace System.Runtime.InteropServices
{
get
{
- // Check if the handle was never initialized or was freed.
- if (m_handle == IntPtr.Zero)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_HandleIsNotInitialized"));
-
+ ValidateHandle();
return InternalGet(GetHandleValue());
}
set
{
- // Check if the handle was never initialized or was freed.
- if (m_handle == IntPtr.Zero)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_HandleIsNotInitialized"));
-
+ ValidateHandle();
InternalSet(GetHandleValue(), value, IsPinned());
}
}
-
+
// Retrieve the address of an object in a Pinned handle. This throws
// an exception if the handle is any type other than Pinned.
public IntPtr AddrOfPinnedObject()
@@ -154,9 +137,7 @@ namespace System.Runtime.InteropServices
// Check if the handle was not a pinned handle.
if (!IsPinned())
{
- // Check if the handle was never initialized for was freed.
- if (m_handle == IntPtr.Zero)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_HandleIsNotInitialized"));
+ ValidateHandle();
// You can only get the address of pinned handles.
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_HandleIsNotPinned"));
@@ -167,30 +148,23 @@ namespace System.Runtime.InteropServices
}
// Determine whether this handle has been allocated or not.
- public bool IsAllocated
- {
- get
- {
- return m_handle != IntPtr.Zero;
- }
- }
+ public bool IsAllocated => !m_handle.IsNull();
// Used to create a GCHandle from an int. This is intended to
// be used with the reverse conversion.
public static explicit operator GCHandle(IntPtr value)
{
- return FromIntPtr(value);
+ ValidateHandle(value);
+ return new GCHandle(value);
}
public static GCHandle FromIntPtr(IntPtr value)
{
- if (value == IntPtr.Zero)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_HandleIsNotInitialized"));
+ ValidateHandle(value);
Contract.EndContractBlock();
- IntPtr handle = value;
-
#if MDA_SUPPORTED
+ IntPtr handle = value;
if (s_probeIsActive)
{
// Make sure this cookie matches up with a GCHandle we've passed out a cookie for.
@@ -201,10 +175,10 @@ namespace System.Runtime.InteropServices
Mda.FireInvalidGCHandleCookieProbe(value);
return new GCHandle(IntPtr.Zero);
}
+ return new GCHandle(handle);
}
#endif
-
- return new GCHandle(handle);
+ return new GCHandle(value);
}
// Used to get the internal integer representation of the handle out.
@@ -256,29 +230,19 @@ namespace System.Runtime.InteropServices
internal IntPtr GetHandleValue()
{
-#if BIT64
- return new IntPtr(((long)m_handle) & ~1L);
-#else // !BIT64 (32)
- return new IntPtr(((int)m_handle) & ~1);
-#endif
+ return GetHandleValue(m_handle);
}
- internal bool IsPinned()
+ private static IntPtr GetHandleValue(IntPtr handle)
{
-#if BIT64
- return (((long)m_handle) & 1) != 0;
-#else // !BIT64 (32)
- return (((int)m_handle) & 1) != 0;
-#endif
+ // Remove Pin flag
+ return new IntPtr((nint)handle & ~(nint)1);
}
- internal void SetIsPinned()
+ internal bool IsPinned()
{
-#if BIT64
- m_handle = new IntPtr(((long)m_handle) | 1L);
-#else // !BIT64 (32)
- m_handle = new IntPtr(((int)m_handle) | 1);
-#endif
+ // Check Pin flag
+ return ((nint)m_handle & 1) != 0;
}
// Internal native calls that this implementation uses.
@@ -294,10 +258,6 @@ namespace System.Runtime.InteropServices
internal static extern Object InternalCompareExchange(IntPtr handle, Object value, Object oldValue, bool isPinned);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern IntPtr InternalAddrOfPinnedObject(IntPtr handle);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern void InternalCheckDomain(IntPtr handle);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern GCHandleType InternalGetHandleType(IntPtr handle);
// The actual integer handle value that the EE uses internally.
private IntPtr m_handle;
@@ -307,5 +267,29 @@ namespace System.Runtime.InteropServices
static private volatile GCHandleCookieTable s_cookieTable = null;
static private volatile bool s_probeIsActive = false;
#endif
+
+ private void ValidateHandle()
+ {
+ // Check if the handle was never initialized or was freed.
+ if (m_handle.IsNull())
+ ThrowInvalidOperationException_HandleIsNotInitialized();
+ }
+
+ private static void ValidateHandle(IntPtr handle)
+ {
+ // Check if the handle was never initialized or was freed.
+ if (handle.IsNull())
+ ThrowInvalidOperationException_HandleIsNotInitialized();
+ }
+
+ private static void ThrowArgumentOutOfRangeException_ArgumentOutOfRange_Enum()
+ {
+ throw ThrowHelper.GetArgumentOutOfRangeException(ExceptionArgument.type, ExceptionResource.ArgumentOutOfRange_Enum);
+ }
+
+ private static void ThrowInvalidOperationException_HandleIsNotInitialized()
+ {
+ throw ThrowHelper.GetInvalidOperationException(ExceptionResource.InvalidOperation_HandleIsNotInitialized);
+ }
}
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/HandleRef.cs b/src/mscorlib/src/System/Runtime/InteropServices/HandleRef.cs
index d76750fdd7..b1171025ee 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/HandleRef.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/HandleRef.cs
@@ -7,7 +7,6 @@ namespace System.Runtime.InteropServices
using System;
- [System.Runtime.InteropServices.ComVisible(true)]
public struct HandleRef
{
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ICustomAdapter.cs b/src/mscorlib/src/System/Runtime/InteropServices/ICustomAdapter.cs
index 00abf7b3bf..002c48a171 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ICustomAdapter.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ICustomAdapter.cs
@@ -15,7 +15,6 @@
namespace System.Runtime.InteropServices {
using System;
-[System.Runtime.InteropServices.ComVisible(true)]
public interface ICustomAdapter
{
[return:MarshalAs(UnmanagedType.IUnknown)] Object GetUnderlyingObject();
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ICustomFactory.cs b/src/mscorlib/src/System/Runtime/InteropServices/ICustomFactory.cs
index 33d2556bd0..8e7af10b6e 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ICustomFactory.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ICustomFactory.cs
@@ -8,7 +8,6 @@ namespace System.Runtime.InteropServices {
using System;
-[System.Runtime.InteropServices.ComVisible(true)]
public interface ICustomFactory
{
MarshalByRefObject CreateInstance(Type serverType);
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ICustomMarshaler.cs b/src/mscorlib/src/System/Runtime/InteropServices/ICustomMarshaler.cs
index 4db4acceeb..d9ed289145 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ICustomMarshaler.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ICustomMarshaler.cs
@@ -15,7 +15,6 @@
namespace System.Runtime.InteropServices {
using System;
-[System.Runtime.InteropServices.ComVisible(true)]
public interface ICustomMarshaler
{
Object MarshalNativeToManaged( IntPtr pNativeData );
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ICustomQueryInterface.cs b/src/mscorlib/src/System/Runtime/InteropServices/ICustomQueryInterface.cs
index c7d7937895..5675b1f2d6 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ICustomQueryInterface.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ICustomQueryInterface.cs
@@ -19,7 +19,6 @@ namespace System.Runtime.InteropServices {
// The enum of the return value of IQuerable.GetInterface
//====================================================================
[Serializable]
- [System.Runtime.InteropServices.ComVisible(false)]
public enum CustomQueryInterfaceResult
{
Handled = 0,
@@ -30,7 +29,6 @@ namespace System.Runtime.InteropServices {
//====================================================================
// The interface for customizing IQueryInterface
//====================================================================
- [System.Runtime.InteropServices.ComVisible(false)]
public interface ICustomQueryInterface
{
CustomQueryInterfaceResult GetInterface([In]ref Guid iid, out IntPtr ppv);
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/IException.cs b/src/mscorlib/src/System/Runtime/InteropServices/IException.cs
index 2330365834..895aa54781 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/IException.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/IException.cs
@@ -17,13 +17,11 @@ namespace System.Runtime.InteropServices {
using System;
using System.Reflection;
using System.Runtime.Serialization;
- using System.Security.Permissions;
[GuidAttribute("b36b5c63-42ef-38bc-a07e-0b34c98f164a")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)]
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _Exception
+ internal interface _Exception
{
//
// This method is intentionally included in CoreCLR to make Exception.get_InnerException "newslot virtual final".
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/IRegistrationServices.cs b/src/mscorlib/src/System/Runtime/InteropServices/IRegistrationServices.cs
deleted file mode 100644
index f2f7c61843..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/IRegistrationServices.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: This interface provides services for registering and unregistering
-** a managed server for use by COM.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices {
-
- using System;
- using System.Reflection;
- using System.Security;
- using System.Security.Permissions;
-
- [Flags()]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum AssemblyRegistrationFlags
- {
- None = 0x00000000,
- SetCodeBase = 0x00000001,
- }
-
- [Guid("CCBD682C-73A5-4568-B8B0-C7007E11ABA2")]
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IRegistrationServices
- {
- bool RegisterAssembly(Assembly assembly, AssemblyRegistrationFlags flags);
-
- bool UnregisterAssembly(Assembly assembly);
-
- Type[] GetRegistrableTypesInAssembly(Assembly assembly);
-
- String GetProgIdForType(Type type);
-
- void RegisterTypeForComClients(Type type, ref Guid g);
-
- Guid GetManagedCategoryGuid();
-
- bool TypeRequiresRegistration(Type type);
-
- bool TypeRepresentsComType(Type type);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ITypeLibConverter.cs b/src/mscorlib/src/System/Runtime/InteropServices/ITypeLibConverter.cs
index a7b6889c55..afa934caaf 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/ITypeLibConverter.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/ITypeLibConverter.cs
@@ -21,126 +21,4 @@ namespace System.Runtime.InteropServices {
using System;
using System.Reflection;
using System.Reflection.Emit;
-
-[Serializable]
-[Flags()]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum TypeLibImporterFlags
- {
- None = 0x00000000,
- PrimaryInteropAssembly = 0x00000001,
- UnsafeInterfaces = 0x00000002,
- SafeArrayAsSystemArray = 0x00000004,
- TransformDispRetVals = 0x00000008,
- PreventClassMembers = 0x00000010,
- SerializableValueClasses = 0x00000020,
- ImportAsX86 = 0x00000100,
- ImportAsX64 = 0x00000200,
- ImportAsItanium = 0x00000400,
- ImportAsAgnostic = 0x00000800,
- ReflectionOnlyLoading = 0x00001000,
- NoDefineVersionResource = 0x00002000,
- ImportAsArm = 0x00004000,
- }
-
-[Serializable]
-[Flags()]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum TypeLibExporterFlags
- {
- None = 0x00000000,
- OnlyReferenceRegistered = 0x00000001,
- CallerResolvedReferences = 0x00000002,
- OldNames = 0x00000004,
- ExportAs32Bit = 0x00000010,
- ExportAs64Bit = 0x00000020,
- }
-
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum ImporterEventKind
- {
- NOTIF_TYPECONVERTED = 0,
- NOTIF_CONVERTWARNING = 1,
- ERROR_REFTOINVALIDTYPELIB = 2,
- }
-
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum ExporterEventKind
- {
- NOTIF_TYPECONVERTED = 0,
- NOTIF_CONVERTWARNING = 1,
- ERROR_REFTOINVALIDASSEMBLY = 2
- }
-
- [GuidAttribute("F1C3BF76-C3E4-11d3-88E7-00902754C43A")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ITypeLibImporterNotifySink
- {
- void ReportEvent(
- ImporterEventKind eventKind,
- int eventCode,
- String eventMsg);
- Assembly ResolveRef(
- [MarshalAs(UnmanagedType.Interface)] Object typeLib);
- }
-
- [GuidAttribute("F1C3BF77-C3E4-11d3-88E7-00902754C43A")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ITypeLibExporterNotifySink
- {
- void ReportEvent(
- ExporterEventKind eventKind,
- int eventCode,
- String eventMsg);
-
- [return : MarshalAs(UnmanagedType.Interface)]
- Object ResolveRef(
- Assembly assembly);
- }
-
- [GuidAttribute("F1C3BF78-C3E4-11d3-88E7-00902754C43A")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ITypeLibConverter
- {
- AssemblyBuilder ConvertTypeLibToAssembly(
- [MarshalAs(UnmanagedType.Interface)] Object typeLib,
- String asmFileName,
- TypeLibImporterFlags flags,
- ITypeLibImporterNotifySink notifySink,
- byte[] publicKey,
- StrongNameKeyPair keyPair,
- String asmNamespace,
- Version asmVersion);
-
- [return : MarshalAs(UnmanagedType.Interface)]
- Object ConvertAssemblyToTypeLib(
- Assembly assembly,
- String typeLibName,
- TypeLibExporterFlags flags,
- ITypeLibExporterNotifySink notifySink);
-
- bool GetPrimaryInteropAssembly(Guid g, Int32 major, Int32 minor, Int32 lcid, out String asmName, out String asmCodeBase);
-
- AssemblyBuilder ConvertTypeLibToAssembly([MarshalAs(UnmanagedType.Interface)] Object typeLib,
- String asmFileName,
- int flags,
- ITypeLibImporterNotifySink notifySink,
- byte[] publicKey,
- StrongNameKeyPair keyPair,
- bool unsafeInterfaces);
- }
-
- [GuidAttribute("FA1F3615-ACB9-486d-9EAC-1BEF87E36B09")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ITypeLibExporterNameProvider
- {
- [return : MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_BSTR)]
- String[] GetNames();
- }
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/InvalidComObjectException.cs b/src/mscorlib/src/System/Runtime/InteropServices/InvalidComObjectException.cs
index ac8258b872..760210bc28 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/InvalidComObjectException.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/InvalidComObjectException.cs
@@ -16,7 +16,6 @@ namespace System.Runtime.InteropServices {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class InvalidComObjectException : SystemException {
public InvalidComObjectException()
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/InvalidOleVariantTypeException.cs b/src/mscorlib/src/System/Runtime/InteropServices/InvalidOleVariantTypeException.cs
index 60c9aa67b4..4ca3da5619 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/InvalidOleVariantTypeException.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/InvalidOleVariantTypeException.cs
@@ -15,7 +15,6 @@ namespace System.Runtime.InteropServices {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class InvalidOleVariantTypeException : SystemException {
public InvalidOleVariantTypeException()
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/LayoutKind.cs b/src/mscorlib/src/System/Runtime/InteropServices/LayoutKind.cs
index 231779872e..f7def3a8e9 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/LayoutKind.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/LayoutKind.cs
@@ -7,7 +7,6 @@
namespace System.Runtime.InteropServices {
using System;
// Used in the StructLayoutAttribute class
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public enum LayoutKind
{
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/Marshal.cs b/src/mscorlib/src/System/Runtime/InteropServices/Marshal.cs
index 3a79650bd9..9e9103b9c2 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/Marshal.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/Marshal.cs
@@ -19,7 +19,6 @@ namespace System.Runtime.InteropServices
using System.Reflection;
using System.Reflection.Emit;
using System.Security;
- using System.Security.Permissions;
using System.Text;
using System.Threading;
using System.Runtime.Remoting;
@@ -76,7 +75,6 @@ namespace System.Runtime.InteropServices
#endif
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static bool IsNotWin32Atom(IntPtr ptr)
{
#if FEATURE_PAL
@@ -213,7 +211,6 @@ namespace System.Runtime.InteropServices
//====================================================================
// SizeOf()
//====================================================================
- [System.Runtime.InteropServices.ComVisible(true)]
public static int SizeOf(Object structure)
{
if (structure == null)
@@ -253,7 +250,6 @@ namespace System.Runtime.InteropServices
/// </summary>
/// <typeparam name="T">Provide a value type to figure out its size</typeparam>
/// <returns>The aligned size of T in bytes.</returns>
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static uint AlignedSizeOf<T>() where T : struct
{
uint size = SizeOfType(typeof(T));
@@ -271,13 +267,11 @@ namespace System.Runtime.InteropServices
// Type must be a value type with no object reference fields. We only
// assert this, due to the lack of a suitable generic constraint.
[MethodImpl(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern uint SizeOfType(Type type);
// Type must be a value type with no object reference fields. We only
// assert this, due to the lack of a suitable generic constraint.
[MethodImpl(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern uint AlignedSizeOfType(Type type);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -470,7 +464,6 @@ namespace System.Runtime.InteropServices
throw new PlatformNotSupportedException();
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static unsafe int ReadInt32(IntPtr ptr, int ofs)
{
try
@@ -500,13 +493,11 @@ namespace System.Runtime.InteropServices
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static int ReadInt32(IntPtr ptr)
{
return ReadInt32(ptr,0);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static IntPtr ReadIntPtr([MarshalAs(UnmanagedType.AsAny),In] Object ptr, int ofs)
{
#if BIT64
@@ -516,7 +507,6 @@ namespace System.Runtime.InteropServices
#endif
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static IntPtr ReadIntPtr(IntPtr ptr, int ofs)
{
#if BIT64
@@ -526,7 +516,6 @@ namespace System.Runtime.InteropServices
#endif
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static IntPtr ReadIntPtr(IntPtr ptr)
{
#if BIT64
@@ -574,7 +563,6 @@ namespace System.Runtime.InteropServices
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static long ReadInt64(IntPtr ptr)
{
return ReadInt64(ptr,0);
@@ -768,7 +756,6 @@ namespace System.Runtime.InteropServices
// GetLastWin32Error
//====================================================================
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern int GetLastWin32Error();
@@ -776,14 +763,12 @@ namespace System.Runtime.InteropServices
// SetLastWin32Error
//====================================================================
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern void SetLastWin32Error(int error);
//====================================================================
// GetHRForLastWin32Error
//====================================================================
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static int GetHRForLastWin32Error()
{
int dwLastError = GetLastWin32Error();
@@ -830,34 +815,6 @@ namespace System.Runtime.InteropServices
}
}
- //====================================================================
- // NumParamBytes
- //====================================================================
- public static int NumParamBytes(MethodInfo m)
- {
- if (m == null)
- throw new ArgumentNullException(nameof(m));
- Contract.EndContractBlock();
-
- RuntimeMethodInfo rmi = m as RuntimeMethodInfo;
- if (rmi == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeMethodInfo"));
-
- return InternalNumParamBytes(rmi);
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
- private static extern int InternalNumParamBytes(IRuntimeMethodInfo m);
-
- //====================================================================
- // Win32 Exception stuff
- // These are mostly interesting for Structured exception handling,
- // but need to be exposed for all exceptions (not just SEHException).
- //====================================================================
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public static extern /* struct _EXCEPTION_POINTERS* */ IntPtr GetExceptionPointers();
-
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern int GetExceptionCode();
@@ -868,7 +825,6 @@ namespace System.Runtime.InteropServices
// "fDeleteOld" is true, this routine will call DestroyStructure() first.
//====================================================================
[MethodImplAttribute(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- [System.Runtime.InteropServices.ComVisible(true)]
public static extern void StructureToPtr(Object structure, IntPtr ptr, bool fDeleteOld);
public static void StructureToPtr<T>(T structure, IntPtr ptr, bool fDeleteOld)
@@ -879,7 +835,6 @@ namespace System.Runtime.InteropServices
//====================================================================
// Marshals data from a native memory block to a preallocated structure class.
//====================================================================
- [System.Runtime.InteropServices.ComVisible(true)]
public static void PtrToStructure(IntPtr ptr, Object structure)
{
PtrToStructureHelper(ptr, structure, false);
@@ -894,7 +849,6 @@ namespace System.Runtime.InteropServices
// Creates a new instance of "structuretype" and marshals data from a
// native memory block to it.
//====================================================================
- [System.Runtime.InteropServices.ComVisible(true)]
[MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public static Object PtrToStructure(IntPtr ptr, Type structureType)
{
@@ -935,7 +889,6 @@ namespace System.Runtime.InteropServices
// "structureclass" is used to provide layout information.
//====================================================================
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [System.Runtime.InteropServices.ComVisible(true)]
public static extern void DestroyStructure(IntPtr ptr, Type structuretype);
public static void DestroyStructure<T>(IntPtr ptr)
@@ -1015,45 +968,8 @@ namespace System.Runtime.InteropServices
//====================================================================
- // This method is intended for compiler code generators rather
- // than applications.
- //====================================================================
- [ObsoleteAttribute("The GetUnmanagedThunkForManagedMethodPtr method has been deprecated and will be removed in a future release.", false)]
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public static extern IntPtr GetUnmanagedThunkForManagedMethodPtr(IntPtr pfnMethodToWrap, IntPtr pbSignature, int cbSignature);
-
- //====================================================================
- // This method is intended for compiler code generators rather
- // than applications.
- //====================================================================
- [ObsoleteAttribute("The GetManagedThunkForUnmanagedMethodPtr method has been deprecated and will be removed in a future release.", false)]
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public static extern IntPtr GetManagedThunkForUnmanagedMethodPtr(IntPtr pfnMethodToWrap, IntPtr pbSignature, int cbSignature);
-
- //====================================================================
- // The hosting APIs allow a sophisticated host to schedule fibers
- // onto OS threads, so long as they notify the runtime of this
- // activity. A fiber cookie can be redeemed for its managed Thread
- // object by calling the following service.
- //====================================================================
- [ObsoleteAttribute("The GetThreadFromFiberCookie method has been deprecated. Use the hosting API to perform this operation.", false)]
- public static Thread GetThreadFromFiberCookie(int cookie)
- {
- if (cookie == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_ArgumentZero"), nameof(cookie));
- Contract.EndContractBlock();
-
- return InternalGetThreadFromFiberCookie(cookie);
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern Thread InternalGetThreadFromFiberCookie(int cookie);
-
-
- //====================================================================
// Memory allocation and deallocation.
//====================================================================
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static IntPtr AllocHGlobal(IntPtr cb)
{
// For backwards compatibility on 32 bit platforms, ensure we pass values between
@@ -1077,13 +993,11 @@ namespace System.Runtime.InteropServices
return pNewMem;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static IntPtr AllocHGlobal(int cb)
{
return AllocHGlobal((IntPtr)cb);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static void FreeHGlobal(IntPtr hglobal)
{
if (IsNotWin32Atom(hglobal)) {
@@ -1192,185 +1106,6 @@ namespace System.Runtime.InteropServices
internal static extern int GetHRForException_WinRT(Exception e);
internal static readonly Guid ManagedNameGuid = new Guid("{0F21F359-AB84-41E8-9A78-36D110E6D2F9}");
-
- //====================================================================
- // Given a managed object that wraps a UCOMITypeLib, return its name
- //====================================================================
- [Obsolete("Use System.Runtime.InteropServices.Marshal.GetTypeLibName(ITypeLib pTLB) instead. http://go.microsoft.com/fwlink/?linkid=14202&ID=0000011.", false)]
- public static String GetTypeLibName(UCOMITypeLib pTLB)
- {
- return GetTypeLibName((ITypeLib)pTLB);
- }
-
-
- //====================================================================
- // Given a managed object that wraps an ITypeLib, return its name
- //====================================================================
- public static String GetTypeLibName(ITypeLib typelib)
- {
- if (typelib == null)
- throw new ArgumentNullException(nameof(typelib));
- Contract.EndContractBlock();
-
- String strTypeLibName = null;
- String strDocString = null;
- int dwHelpContext = 0;
- String strHelpFile = null;
-
- typelib.GetDocumentation(-1, out strTypeLibName, out strDocString, out dwHelpContext, out strHelpFile);
-
- return strTypeLibName;
- }
-
- //====================================================================
- // Internal version of GetTypeLibName
- // Support GUID_ManagedName which aligns with TlbImp
- //====================================================================
- internal static String GetTypeLibNameInternal(ITypeLib typelib)
- {
- if (typelib == null)
- throw new ArgumentNullException(nameof(typelib));
- Contract.EndContractBlock();
-
- // Try GUID_ManagedName first
- ITypeLib2 typeLib2 = typelib as ITypeLib2;
- if (typeLib2 != null)
- {
- Guid guid = ManagedNameGuid;
- object val;
-
- try
- {
- typeLib2.GetCustData(ref guid, out val);
- }
- catch(Exception)
- {
- val = null;
- }
-
- if (val != null && val.GetType() == typeof(string))
- {
- string customManagedNamespace = (string)val;
- customManagedNamespace = customManagedNamespace.Trim();
- if (customManagedNamespace.EndsWith(".DLL", StringComparison.OrdinalIgnoreCase))
- customManagedNamespace = customManagedNamespace.Substring(0, customManagedNamespace.Length - 4);
- else if (customManagedNamespace.EndsWith(".EXE", StringComparison.OrdinalIgnoreCase))
- customManagedNamespace = customManagedNamespace.Substring(0, customManagedNamespace.Length - 4);
- return customManagedNamespace;
- }
- }
-
- return GetTypeLibName(typelib);
- }
-
-
- //====================================================================
- // Given an managed object that wraps an UCOMITypeLib, return its guid
- //====================================================================
- [Obsolete("Use System.Runtime.InteropServices.Marshal.GetTypeLibGuid(ITypeLib pTLB) instead. http://go.microsoft.com/fwlink/?linkid=14202&ID=0000011.", false)]
- public static Guid GetTypeLibGuid(UCOMITypeLib pTLB)
- {
- return GetTypeLibGuid((ITypeLib)pTLB);
- }
-
- //====================================================================
- // Given an managed object that wraps an ITypeLib, return its guid
- //====================================================================
- public static Guid GetTypeLibGuid(ITypeLib typelib)
- {
- Guid result = new Guid ();
- FCallGetTypeLibGuid (ref result, typelib);
- return result;
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void FCallGetTypeLibGuid(ref Guid result, ITypeLib pTLB);
-
- //====================================================================
- // Given a managed object that wraps a UCOMITypeLib, return its lcid
- //====================================================================
- [Obsolete("Use System.Runtime.InteropServices.Marshal.GetTypeLibLcid(ITypeLib pTLB) instead. http://go.microsoft.com/fwlink/?linkid=14202&ID=0000011.", false)]
- public static int GetTypeLibLcid(UCOMITypeLib pTLB)
- {
- return GetTypeLibLcid((ITypeLib)pTLB);
- }
-
- //====================================================================
- // Given a managed object that wraps an ITypeLib, return its lcid
- //====================================================================
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public static extern int GetTypeLibLcid(ITypeLib typelib);
-
- //====================================================================
- // Given a managed object that wraps an ITypeLib, return it's
- // version information.
- //====================================================================
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern void GetTypeLibVersion(ITypeLib typeLibrary, out int major, out int minor);
-
- //====================================================================
- // Given a managed object that wraps an ITypeInfo, return its guid.
- //====================================================================
- internal static Guid GetTypeInfoGuid(ITypeInfo typeInfo)
- {
- Guid result = new Guid ();
- FCallGetTypeInfoGuid (ref result, typeInfo);
- return result;
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void FCallGetTypeInfoGuid(ref Guid result, ITypeInfo typeInfo);
-
- //====================================================================
- // Given a assembly, return the TLBID that will be generated for the
- // typelib exported from the assembly.
- //====================================================================
- public static Guid GetTypeLibGuidForAssembly(Assembly asm)
- {
- if (asm == null)
- throw new ArgumentNullException(nameof(asm));
- Contract.EndContractBlock();
-
- RuntimeAssembly rtAssembly = asm as RuntimeAssembly;
- if (rtAssembly == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeAssembly"), nameof(asm));
-
- Guid result = new Guid();
- FCallGetTypeLibGuidForAssembly(ref result, rtAssembly);
- return result;
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void FCallGetTypeLibGuidForAssembly(ref Guid result, RuntimeAssembly asm);
-
- //====================================================================
- // Given a assembly, return the version number of the type library
- // that would be exported from the assembly.
- //====================================================================
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void _GetTypeLibVersionForAssembly(RuntimeAssembly inputAssembly, out int majorVersion, out int minorVersion);
-
- public static void GetTypeLibVersionForAssembly(Assembly inputAssembly, out int majorVersion, out int minorVersion)
- {
- if (inputAssembly == null)
- throw new ArgumentNullException(nameof(inputAssembly));
- Contract.EndContractBlock();
-
- RuntimeAssembly rtAssembly = inputAssembly as RuntimeAssembly;
- if (rtAssembly == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeAssembly"), nameof(inputAssembly));
-
- _GetTypeLibVersionForAssembly(rtAssembly, out majorVersion, out minorVersion);
- }
-
- //====================================================================
- // Given a managed object that wraps an UCOMITypeInfo, return its name
- //====================================================================
- [Obsolete("Use System.Runtime.InteropServices.Marshal.GetTypeInfoName(ITypeInfo pTLB) instead. http://go.microsoft.com/fwlink/?linkid=14202&ID=0000011.", false)]
- public static String GetTypeInfoName(UCOMITypeInfo pTI)
- {
- return GetTypeInfoName((ITypeInfo)pTI);
- }
//====================================================================
// Given a managed object that wraps an ITypeInfo, return its name
@@ -1391,65 +1126,6 @@ namespace System.Runtime.InteropServices
return strTypeLibName;
}
- //====================================================================
- // Internal version of GetTypeInfoName
- // Support GUID_ManagedName which aligns with TlbImp
- //====================================================================
- internal static String GetTypeInfoNameInternal(ITypeInfo typeInfo, out bool hasManagedName)
- {
- if (typeInfo == null)
- throw new ArgumentNullException(nameof(typeInfo));
- Contract.EndContractBlock();
-
- // Try ManagedNameGuid first
- ITypeInfo2 typeInfo2 = typeInfo as ITypeInfo2;
- if (typeInfo2 != null)
- {
- Guid guid = ManagedNameGuid;
- object val;
-
- try
- {
- typeInfo2.GetCustData(ref guid, out val);
- }
- catch(Exception)
- {
- val = null;
- }
-
- if (val != null && val.GetType() == typeof(string))
- {
- hasManagedName = true;
- return (string)val;
- }
- }
-
- hasManagedName = false;
- return GetTypeInfoName(typeInfo);
- }
-
- //====================================================================
- // Get the corresponding managed name as converted by TlbImp
- // Used to get the type using GetType() from imported assemblies
- //====================================================================
- internal static String GetManagedTypeInfoNameInternal(ITypeLib typeLib, ITypeInfo typeInfo)
- {
- bool hasManagedName;
- string name = GetTypeInfoNameInternal(typeInfo, out hasManagedName);
- if (hasManagedName)
- return name;
- else
- return GetTypeLibNameInternal(typeLib) + "." + name;
- }
-
- //====================================================================
- // If a type with the specified GUID is loaded, this method will
- // return the reflection type that represents it. Otherwise it returns
- // NULL.
- //====================================================================
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern Type GetLoadedTypeForGUID(ref Guid guid);
-
// This method is identical to Type.GetTypeFromCLSID. Since it's interop specific, we expose it
// on Marshal for more consistent API surface.
public static Type GetTypeFromCLSID(Guid clsid)
@@ -1458,12 +1134,6 @@ namespace System.Runtime.InteropServices
}
//====================================================================
- // map Type to ITypeInfo*
- //====================================================================
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public static extern IntPtr /* ITypeInfo* */ GetITypeInfoForType(Type t);
-
- //====================================================================
// return the IUnknown* for an Object if the current context
// is the one where the RCW was first seen. Will return null
// otherwise.
@@ -1473,11 +1143,6 @@ namespace System.Runtime.InteropServices
return GetIUnknownForObjectNative(o, false);
}
- public static IntPtr /* IUnknown* */ GetIUnknownForObjectInContext(Object o)
- {
- return GetIUnknownForObjectNative(o, true);
- }
-
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern IntPtr /* IUnknown* */ GetIUnknownForObjectNative(Object o, bool onlyInContext);
@@ -1499,18 +1164,6 @@ namespace System.Runtime.InteropServices
}
#if FEATURE_COMINTEROP
- //====================================================================
- // return the IDispatch* for an Object if the current context
- // is the one where the RCW was first seen. Will return null
- // otherwise.
- //====================================================================
- public static IntPtr /* IUnknown* */ GetIDispatchForObjectInContext(Object o)
- {
- return GetIDispatchForObjectNative(o, true);
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern IntPtr /* IUnknown* */ GetIDispatchForObjectNative(Object o, bool onlyInContext);
//====================================================================
// return the IUnknown* representing the interface for the Object
@@ -1537,17 +1190,6 @@ namespace System.Runtime.InteropServices
return GetComInterfaceForObjectNative(o, T, false, bEnableCustomizedQueryInterface);
}
- //====================================================================
- // return the IUnknown* representing the interface for the Object
- // Object o should support Type T if the current context
- // is the one where the RCW was first seen. Will return null
- // otherwise.
- //====================================================================
- public static IntPtr /* IUnknown* */ GetComInterfaceForObjectInContext(Object o, Type t)
- {
- return GetComInterfaceForObjectNative(o, t, true, true);
- }
-
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern IntPtr /* IUnknown* */ GetComInterfaceForObjectNative(Object o, Type t, bool onlyInContext, bool fEnalbeCustomizedQueryInterface);
@@ -1892,21 +1534,6 @@ namespace System.Runtime.InteropServices
private static extern Object InternalCreateWrapperOfType(Object o, Type t);
//====================================================================
- // There may be a thread-based cache of COM components. This service can
- // force the aggressive release of the current thread's cache.
- //====================================================================
- [Obsolete("This API did not perform any operation and will be removed in future versions of the CLR.", false)]
- public static void ReleaseThreadCache()
- {
- }
-
- //====================================================================
- // check if the type is visible from COM.
- //====================================================================
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public static extern bool IsTypeVisibleFromCom(Type t);
-
- //====================================================================
// IUnknown Helpers
//====================================================================
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -1915,7 +1542,6 @@ namespace System.Runtime.InteropServices
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern int /* ULONG */ AddRef(IntPtr /* IUnknown */ pUnk );
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern int /* ULONG */ Release(IntPtr /* IUnknown */ pUnk );
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -1958,45 +1584,6 @@ namespace System.Runtime.InteropServices
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern int GetStartComSlot(Type t);
- /// <summary>
- /// <para>Returns the last valid COM slot that GetMethodInfoForSlot will work on. </para>
- /// </summary>
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public static extern int GetEndComSlot(Type t);
-
- /// <summary>
- /// <para>Returns the MemberInfo that COM callers calling through the exposed
- /// vtable on the given slot will be calling. The slot should take into account
- /// if the exposed interface is IUnknown based or IDispatch based.
- /// For classes, the lookup is done on the default interface that will be
- /// exposed for the class. </para>
- /// </summary>
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public static extern MemberInfo GetMethodInfoForComSlot(Type t, int slot, ref ComMemberType memberType);
-
- /// <summary>
- /// <para>Returns the COM slot for a memeber info, taking into account whether
- /// the exposed interface is IUnknown based or IDispatch based</para>
- /// </summary>
- public static int GetComSlotForMethodInfo(MemberInfo m)
- {
- if (m== null)
- throw new ArgumentNullException(nameof(m));
-
- if (!(m is RuntimeMethodInfo))
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeMethodInfo"), nameof(m));
-
- if (!m.DeclaringType.IsInterface)
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeInterfaceMethod"), nameof(m));
- if (m.DeclaringType.IsGenericType)
- throw new ArgumentException(Environment.GetResourceString("Argument_NeedNonGenericType"), nameof(m));
- Contract.EndContractBlock();
-
- return InternalGetComSlotForMethodInfo((IRuntimeMethodInfo)m);
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern int InternalGetComSlotForMethodInfo(IRuntimeMethodInfo m);
#endif // FEATURE_COMINTEROP
//====================================================================
@@ -2069,38 +1656,6 @@ namespace System.Runtime.InteropServices
return obj;
}
- //====================================================================
- // This method gets the currently running object.
- //====================================================================
- public static Object GetActiveObject(String progID)
- {
- Object obj = null;
- Guid clsid;
-
- // Call CLSIDFromProgIDEx first then fall back on CLSIDFromProgID if
- // CLSIDFromProgIDEx doesn't exist.
- try
- {
- CLSIDFromProgIDEx(progID, out clsid);
- }
-// catch
- catch(Exception)
- {
- CLSIDFromProgID(progID, out clsid);
- }
-
- GetActiveObject(ref clsid, IntPtr.Zero, out obj);
- return obj;
- }
-
- [DllImport(Microsoft.Win32.Win32Native.OLE32, PreserveSig = false)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void CLSIDFromProgIDEx([MarshalAs(UnmanagedType.LPWStr)] String progId, out Guid clsid);
-
- [DllImport(Microsoft.Win32.Win32Native.OLE32, PreserveSig = false)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void CLSIDFromProgID([MarshalAs(UnmanagedType.LPWStr)] String progId, out Guid clsid);
-
[DllImport(Microsoft.Win32.Win32Native.OLE32, PreserveSig = false)]
[SuppressUnmanagedCodeSecurity]
private static extern void CreateBindCtx(UInt32 reserved, out IBindCtx ppbc);
@@ -2113,19 +1668,6 @@ namespace System.Runtime.InteropServices
[SuppressUnmanagedCodeSecurity]
private static extern void BindMoniker(IMoniker pmk, UInt32 grfOpt, ref Guid iidResult, [MarshalAs(UnmanagedType.Interface)] out Object ppvResult);
- [DllImport(Microsoft.Win32.Win32Native.OLEAUT32, PreserveSig = false)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetActiveObject(ref Guid rclsid, IntPtr reserved, [MarshalAs(UnmanagedType.Interface)] out Object ppunk);
-
- //========================================================================
- // Private method called from remoting to support ServicedComponents.
- //========================================================================
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern bool InternalSwitchCCW(Object oldtp, Object newtp);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern Object InternalWrapIUnknownWithComObject(IntPtr i);
-
//========================================================================
// Private method called from EE upon use of license/ICF2 marshaling.
//========================================================================
@@ -2156,86 +1698,6 @@ namespace System.Runtime.InteropServices
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern object GetNativeActivationFactory(Type type);
- //========================================================================
- // Methods allowing retrieval of the IIDs exposed by an underlying WinRT
- // object, as specified by the object's IInspectable::GetIids()
- //========================================================================
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
- private static extern void _GetInspectableIids(ObjectHandleOnStack obj, ObjectHandleOnStack guids);
-
- internal static System.Guid[] GetInspectableIids(object obj)
- {
- System.Guid[] result = null;
- System.__ComObject comObj = obj as System.__ComObject;
- if (comObj != null)
- {
- _GetInspectableIids(JitHelpers.GetObjectHandleOnStack(ref comObj),
- JitHelpers.GetObjectHandleOnStack(ref result));
- }
-
- return result;
- }
-
- //========================================================================
- // Methods allowing retrieval of the cached WinRT type corresponding to
- // the specified GUID
- //========================================================================
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
- private static extern void _GetCachedWinRTTypeByIid(
- ObjectHandleOnStack appDomainObj,
- System.Guid iid,
- out IntPtr rthHandle);
-
- internal static System.Type GetCachedWinRTTypeByIid(
- System.AppDomain ad,
- System.Guid iid)
- {
- IntPtr rthHandle;
- _GetCachedWinRTTypeByIid(JitHelpers.GetObjectHandleOnStack(ref ad),
- iid,
- out rthHandle);
- System.Type res = Type.GetTypeFromHandleUnsafe(rthHandle);
- return res;
- }
-
-
- //========================================================================
- // Methods allowing retrieval of the WinRT types cached in the specified
- // app domain
- //========================================================================
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
- private static extern void _GetCachedWinRTTypes(
- ObjectHandleOnStack appDomainObj,
- ref int epoch,
- ObjectHandleOnStack winrtTypes);
-
- internal static System.Type[] GetCachedWinRTTypes(
- System.AppDomain ad,
- ref int epoch)
- {
- System.IntPtr[] res = null;
-
- _GetCachedWinRTTypes(JitHelpers.GetObjectHandleOnStack(ref ad),
- ref epoch,
- JitHelpers.GetObjectHandleOnStack(ref res));
-
- System.Type[] result = new System.Type[res.Length];
- for (int i = 0; i < res.Length; ++i)
- {
- result[i] = Type.GetTypeFromHandleUnsafe(res[i]);
- }
-
- return result;
- }
-
- internal static System.Type[] GetCachedWinRTTypes(
- System.AppDomain ad)
- {
- int dummyEpoch = 0;
- return GetCachedWinRTTypes(ad, ref dummyEpoch);
- }
-
-
#endif // FEATURE_COMINTEROP
public static Delegate GetDelegateForFunctionPointer(IntPtr ptr, Type t)
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/MarshalDirectiveException.cs b/src/mscorlib/src/System/Runtime/InteropServices/MarshalDirectiveException.cs
index b916778019..ec1014ecf8 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/MarshalDirectiveException.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/MarshalDirectiveException.cs
@@ -16,7 +16,6 @@ namespace System.Runtime.InteropServices {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class MarshalDirectiveException : SystemException {
public MarshalDirectiveException()
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/NativeMethods.cs b/src/mscorlib/src/System/Runtime/InteropServices/NativeMethods.cs
index 650ea65697..818034ee34 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/NativeMethods.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/NativeMethods.cs
@@ -18,42 +18,11 @@ namespace System.Runtime.InteropServices {
[
System.Security.SuppressUnmanagedCodeSecurity,
- DllImport("oleaut32.dll", PreserveSig = false),
- System.Security.SecurityCritical
- ]
- internal static extern void VariantClear(IntPtr variant);
-
- [
- System.Security.SuppressUnmanagedCodeSecurity,
ComImport,
InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
Guid("00020400-0000-0000-C000-000000000046")
]
internal interface IDispatch {
-
- void GetTypeInfoCount(out uint pctinfo);
-
- void GetTypeInfo(uint iTInfo, int lcid, out IntPtr info);
-
- void GetIDsOfNames(
- ref Guid iid,
- [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 2)]
- string[] names,
- uint cNames,
- int lcid,
- [Out]
- [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I4, SizeParamIndex = 2)]
- int[] rgDispId);
-
- void Invoke(
- int dispIdMember,
- ref Guid riid,
- int lcid,
- ComTypes.INVOKEKIND wFlags,
- ref ComTypes.DISPPARAMS pDispParams,
- IntPtr pvarResult,
- IntPtr pExcepInfo,
- IntPtr puArgErr);
}
}
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/NonPortable.cs b/src/mscorlib/src/System/Runtime/InteropServices/NonPortable.cs
index 0c8ae7649c..ae974460f7 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/NonPortable.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/NonPortable.cs
@@ -8,91 +8,76 @@ namespace System.Runtime.InteropServices
{
public static partial class Marshal
{
- [System.Security.SecurityCritical]
public static int GetHRForException(Exception e)
{
return (e != null) ? e.HResult : 0;
}
- [System.Security.SecurityCriticalAttribute]
public static int AddRef(System.IntPtr pUnk)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static bool AreComObjectsAvailableForCleanup()
{
return false;
}
- [System.Security.SecurityCriticalAttribute]
public static System.IntPtr CreateAggregatedObject(System.IntPtr pOuter, object o)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static Object BindToMoniker(String monikerName)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static void CleanupUnusedObjectsInCurrentContext()
{
return;
}
- [System.Security.SecurityCriticalAttribute]
public static System.IntPtr CreateAggregatedObject<T>(System.IntPtr pOuter, T o)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static object CreateWrapperOfType(object o, System.Type t)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static TWrapper CreateWrapperOfType<T, TWrapper>(T o)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static void ChangeWrapperHandleStrength(Object otp, bool fIsWeak)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static int FinalReleaseComObject(object o)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static System.IntPtr GetComInterfaceForObject(object o, System.Type T)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static System.IntPtr GetComInterfaceForObject(object o, System.Type T, System.Runtime.InteropServices.CustomQueryInterfaceMode mode)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static System.IntPtr GetComInterfaceForObject<T, TInterface>(T o)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static System.IntPtr GetHINSTANCE(System.Reflection.Module m)
{
if (m == null)
@@ -102,61 +87,51 @@ namespace System.Runtime.InteropServices
return (System.IntPtr) (-1);
}
- [System.Security.SecurityCriticalAttribute]
public static System.IntPtr GetIUnknownForObject(object o)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static void GetNativeVariantForObject(object obj, System.IntPtr pDstNativeVariant)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static void GetNativeVariantForObject<T>(T obj, System.IntPtr pDstNativeVariant)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static Object GetTypedObjectForIUnknown(System.IntPtr pUnk, System.Type t)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static object GetObjectForIUnknown(System.IntPtr pUnk)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static object GetObjectForNativeVariant(System.IntPtr pSrcNativeVariant)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static T GetObjectForNativeVariant<T>(System.IntPtr pSrcNativeVariant)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static object[] GetObjectsForNativeVariants(System.IntPtr aSrcNativeVariant, int cVars)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static T[] GetObjectsForNativeVariants<T>(System.IntPtr aSrcNativeVariant, int cVars)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static int GetStartComSlot(System.Type t)
{
throw new PlatformNotSupportedException();
@@ -167,13 +142,11 @@ namespace System.Runtime.InteropServices
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static string GetTypeInfoName(System.Runtime.InteropServices.ComTypes.ITypeInfo typeInfo)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static object GetUniqueObjectForIUnknown(System.IntPtr unknown)
{
throw new PlatformNotSupportedException();
@@ -184,25 +157,21 @@ namespace System.Runtime.InteropServices
return false;
}
- [System.Security.SecurityCriticalAttribute]
public static int QueryInterface(System.IntPtr pUnk, ref System.Guid iid, out System.IntPtr ppv)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static int Release(System.IntPtr pUnk)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static int ReleaseComObject(object o)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static void ZeroFreeBSTR(System.IntPtr s)
{
throw new PlatformNotSupportedException();
@@ -227,13 +196,11 @@ namespace System.Runtime.InteropServices
public static class ComEventsHelper
{
- [System.Security.SecurityCriticalAttribute]
public static void Combine(object rcw, System.Guid iid, int dispid, System.Delegate d)
{
throw new PlatformNotSupportedException();
}
- [System.Security.SecurityCriticalAttribute]
public static System.Delegate Remove(object rcw, System.Guid iid, int dispid, System.Delegate d)
{
throw new PlatformNotSupportedException();
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/ObjectCreationDelegate.cs b/src/mscorlib/src/System/Runtime/InteropServices/ObjectCreationDelegate.cs
deleted file mode 100644
index f011253e1e..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/ObjectCreationDelegate.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-** Delegate: ObjectCreationDelegate
-**
-**
-** Purpose: Delegate called to create a classic COM object as an alternative to
-** CoCreateInstance.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices {
-
- // Delegate called when a managed object wishes to instantiate its unmanaged
- // portion. The IUnknown of the managed object (the aggregator) is passed as a
- // parameter and the delegate should return the IUnknown of the unmanaged object
- // (the aggregatee). Both are passed as int's to avoid any marshalling.
-[System.Runtime.InteropServices.ComVisible(true)]
- public delegate IntPtr ObjectCreationDelegate(IntPtr aggregator);
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/RegistrationServices.cs b/src/mscorlib/src/System/Runtime/InteropServices/RegistrationServices.cs
deleted file mode 100644
index 0105866415..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/RegistrationServices.cs
+++ /dev/null
@@ -1,1059 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: This class provides services for registering and unregistering
-** a managed server for use by COM.
-**
-**
-**
-**
-** Change the way how to register and unregister a managed server
-**
-=============================================================================*/
-namespace System.Runtime.InteropServices {
-
- using System;
- using System.Collections;
- using System.IO;
- using System.Reflection;
- using System.Security;
- using System.Security.Permissions;
- using System.Text;
- using System.Threading;
- using Microsoft.Win32;
- using System.Runtime.CompilerServices;
- using System.Globalization;
- using System.Runtime.Versioning;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- [Flags]
- public enum RegistrationClassContext
- {
-
-
- InProcessServer = 0x1,
- InProcessHandler = 0x2,
- LocalServer = 0x4,
- InProcessServer16 = 0x8,
- RemoteServer = 0x10,
- InProcessHandler16 = 0x20,
- Reserved1 = 0x40,
- Reserved2 = 0x80,
- Reserved3 = 0x100,
- Reserved4 = 0x200,
- NoCodeDownload = 0x400,
- Reserved5 = 0x800,
- NoCustomMarshal = 0x1000,
- EnableCodeDownload = 0x2000,
- NoFailureLog = 0x4000,
- DisableActivateAsActivator = 0x8000,
- EnableActivateAsActivator = 0x10000,
- FromDefaultContext = 0x20000
- }
-
-
- [Flags]
- public enum RegistrationConnectionType
- {
- SingleUse = 0,
- MultipleUse = 1,
- MultiSeparate = 2,
- Suspended = 4,
- Surrogate = 8,
- }
-
- [Guid("475E398F-8AFA-43a7-A3BE-F4EF8D6787C9")]
- [ClassInterface(ClassInterfaceType.None)]
-[System.Runtime.InteropServices.ComVisible(true)]
- public class RegistrationServices : IRegistrationServices
- {
- #region Constants
-
- private const String strManagedCategoryGuid = "{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}";
- private const String strDocStringPrefix = "";
- private const String strManagedTypeThreadingModel = "Both";
- private const String strComponentCategorySubKey = "Component Categories";
- private const String strManagedCategoryDescription = ".NET Category";
- private const String strImplementedCategoriesSubKey = "Implemented Categories";
- private const String strMsCorEEFileName = "mscoree.dll";
- private const String strRecordRootName = "Record";
- private const String strClsIdRootName = "CLSID";
- private const String strTlbRootName = "TypeLib";
- private static Guid s_ManagedCategoryGuid = new Guid(strManagedCategoryGuid);
-
- #endregion
-
-
- #region IRegistrationServices
-
- public virtual bool RegisterAssembly(Assembly assembly, AssemblyRegistrationFlags flags)
- {
- // Validate the arguments.
- if (assembly == null)
- throw new ArgumentNullException(nameof(assembly));
-
- if (assembly.ReflectionOnly)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_AsmLoadedForReflectionOnly"));
- Contract.EndContractBlock();
-
- RuntimeAssembly rtAssembly = assembly as RuntimeAssembly;
- if (rtAssembly == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeAssembly"));
-
- // Retrieve the assembly names.
- String strAsmName = assembly.FullName;
- if (strAsmName == null)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NoAsmName"));
-
- // Retrieve the assembly codebase.
- String strAsmCodeBase = null;
- if ((flags & AssemblyRegistrationFlags.SetCodeBase) != 0)
- {
- strAsmCodeBase = rtAssembly.GetCodeBase(false);
- if (strAsmCodeBase == null)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NoAsmCodeBase"));
- }
-
- // Go through all the registerable types in the assembly and register them.
- Type[] aTypes = GetRegistrableTypesInAssembly(assembly);
- int NumTypes = aTypes.Length;
-
- String strAsmVersion = rtAssembly.GetVersion().ToString();
-
- // Retrieve the runtime version used to build the assembly.
- String strRuntimeVersion = assembly.ImageRuntimeVersion;
-
- for (int cTypes = 0; cTypes < NumTypes; cTypes++)
- {
- if (IsRegisteredAsValueType(aTypes[cTypes]))
- RegisterValueType(aTypes[cTypes], strAsmName, strAsmVersion, strAsmCodeBase, strRuntimeVersion);
- else if (TypeRepresentsComType(aTypes[cTypes]))
- RegisterComImportedType(aTypes[cTypes], strAsmName, strAsmVersion, strAsmCodeBase, strRuntimeVersion);
- else
- RegisterManagedType(aTypes[cTypes], strAsmName, strAsmVersion, strAsmCodeBase, strRuntimeVersion);
-
- CallUserDefinedRegistrationMethod(aTypes[cTypes], true);
- }
-
- // If this assembly has the PIA attribute, then register it as a PIA.
- Object[] aPIAAttrs = assembly.GetCustomAttributes(typeof(PrimaryInteropAssemblyAttribute), false);
- int NumPIAAttrs = aPIAAttrs.Length;
- for (int cPIAAttrs = 0; cPIAAttrs < NumPIAAttrs; cPIAAttrs++)
- RegisterPrimaryInteropAssembly(rtAssembly, strAsmCodeBase, (PrimaryInteropAssemblyAttribute)aPIAAttrs[cPIAAttrs]);
-
- // Return value indicating if we actually registered any types.
- if (aTypes.Length > 0 || NumPIAAttrs > 0)
- return true;
- else
- return false;
- }
-
- public virtual bool UnregisterAssembly(Assembly assembly)
- {
- // Validate the arguments.
- if (assembly == null)
- throw new ArgumentNullException(nameof(assembly));
-
- if (assembly.ReflectionOnly)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_AsmLoadedForReflectionOnly"));
- Contract.EndContractBlock();
-
- RuntimeAssembly rtAssembly = assembly as RuntimeAssembly;
- if (rtAssembly == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeAssembly"));
-
- bool bAllVersionsGone = true;
-
- // Go through all the registrable types in the assembly and register them.
- Type[] aTypes = GetRegistrableTypesInAssembly(assembly);
- int NumTypes = aTypes.Length;
-
- // Retrieve the assembly version
- String strAsmVersion = rtAssembly.GetVersion().ToString();
- for (int cTypes = 0;cTypes < NumTypes;cTypes++)
- {
- CallUserDefinedRegistrationMethod(aTypes[cTypes], false);
-
- if (IsRegisteredAsValueType(aTypes[cTypes]))
- {
- if (!UnregisterValueType(aTypes[cTypes], strAsmVersion))
- bAllVersionsGone = false;
- }
- else if (TypeRepresentsComType(aTypes[cTypes]))
- {
- if (!UnregisterComImportedType(aTypes[cTypes], strAsmVersion))
- bAllVersionsGone = false;
- }
- else
- {
- if (!UnregisterManagedType(aTypes[cTypes], strAsmVersion))
- bAllVersionsGone = false;
- }
- }
-
- // If this assembly has the PIA attribute, then unregister it as a PIA.
- Object[] aPIAAttrs = assembly.GetCustomAttributes(typeof(PrimaryInteropAssemblyAttribute),false);
- int NumPIAAttrs = aPIAAttrs.Length;
- if (bAllVersionsGone)
- {
- for (int cPIAAttrs = 0;cPIAAttrs < NumPIAAttrs;cPIAAttrs++)
- UnregisterPrimaryInteropAssembly(assembly, (PrimaryInteropAssemblyAttribute)aPIAAttrs[cPIAAttrs]);
- }
-
- // Return value indicating if we actually un-registered any types.
- if (aTypes.Length > 0 || NumPIAAttrs > 0)
- return true;
- else
- return false;
- }
-
- public virtual Type[] GetRegistrableTypesInAssembly(Assembly assembly)
- {
- // Validate the arguments.
- if (assembly == null)
- throw new ArgumentNullException(nameof(assembly));
- Contract.EndContractBlock();
-
- if (!(assembly is RuntimeAssembly))
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeAssembly"), nameof(assembly));
-
- // Retrieve the list of types in the assembly.
- Type[] aTypes = assembly.GetExportedTypes();
- int NumTypes = aTypes.Length;
-
- // Create an array list that will be filled in.
- ArrayList TypeList = new ArrayList();
-
- // Register all the types that require registration.
- for (int cTypes = 0; cTypes < NumTypes; cTypes++)
- {
- Type CurrentType = aTypes[cTypes];
- if (TypeRequiresRegistration(CurrentType))
- TypeList.Add(CurrentType);
- }
-
- // Copy the array list to an array and return it.
- Type[] RetArray = new Type[TypeList.Count];
- TypeList.CopyTo(RetArray);
- return RetArray;
- }
-
- public virtual String GetProgIdForType(Type type)
- {
- return Marshal.GenerateProgIdForType(type);
- }
-
- public virtual void RegisterTypeForComClients(Type type, ref Guid g)
- {
-#if FEATURE_COMINTEROP_MANAGED_ACTIVATION
- if(type == null)
- throw new ArgumentNullException(nameof(type));
- Contract.EndContractBlock();
- if((type as RuntimeType) == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeType"),nameof(type));
- if(!TypeRequiresRegistration(type))
- throw new ArgumentException(Environment.GetResourceString("Argument_TypeMustBeComCreatable"),nameof(type));
-
- // Call the native method to do CoRegisterClassObject
- RegisterTypeForComClientsNative(type, ref g);
-#else // FEATURE_COMINTEROP_MANAGED_ACTIVATION
- throw new NotImplementedException("CoreCLR_REMOVED -- managed activation removed");
-#endif // FEATURE_COMINTEROP_MANAGED_ACTIVATION
- }
-
- public virtual Guid GetManagedCategoryGuid()
- {
- return s_ManagedCategoryGuid;
- }
-
- public virtual bool TypeRequiresRegistration(Type type)
- {
- return TypeRequiresRegistrationHelper(type);
- }
-
- public virtual bool TypeRepresentsComType(Type type)
- {
- // If the type is not a COM import, then it does not represent a COM type.
- if (!type.IsCOMObject)
- return false;
-
- // If it is marked as tdImport, then it represents a COM type directly.
- if (type.IsImport)
- return true;
-
- // If the type is derived from a tdImport class and has the same GUID as the
- // imported class, then it represents a COM type.
- Type baseComImportType = GetBaseComImportType(type);
- Debug.Assert(baseComImportType != null, "baseComImportType != null");
- if (Marshal.GenerateGuidForType(type) == Marshal.GenerateGuidForType(baseComImportType))
- return true;
-
- return false;
- }
-
- #endregion
-
-
- #region Public methods not on IRegistrationServices
- [ComVisible(false)]
- public virtual int RegisterTypeForComClients(Type type, RegistrationClassContext classContext, RegistrationConnectionType flags)
- {
-#if FEATURE_COMINTEROP_MANAGED_ACTIVATION
- if (type == null)
- throw new ArgumentNullException(nameof(type));
- Contract.EndContractBlock();
- if ((type as RuntimeType) == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeType"),nameof(type));
- if (!TypeRequiresRegistration(type))
- throw new ArgumentException(Environment.GetResourceString("Argument_TypeMustBeComCreatable"),nameof(type));
-
- // Call the native method to do CoRegisterClassObject
- return RegisterTypeForComClientsExNative(type, classContext, flags);
-#else // FEATURE_COMINTEROP_MANAGED_ACTIVATION
- throw new NotImplementedException("CoreCLR_REMOVED -- managed activation removed");
-#endif // FEATURE_COMINTEROP_MANAGED_ACTIVATION
- }
-
- [ComVisible(false)]
- public virtual void UnregisterTypeForComClients(int cookie)
- {
- // Call the native method to do CoRevokeClassObject.
- CoRevokeClassObject(cookie);
- }
-
- #endregion
-
-
- #region Internal helpers
-
- internal static bool TypeRequiresRegistrationHelper(Type type)
- {
- // If the type is not a class or a value class, then it does not get registered.
- if (!type.IsClass && !type.IsValueType)
- return false;
-
- // If the type is abstract then it does not get registered.
- if (type.IsAbstract)
- return false;
-
- // If the does not have a public default constructor then is not creatable from COM so
- // it does not require registration unless it is a value class.
- if (!type.IsValueType && type.GetConstructor(BindingFlags.Instance | BindingFlags.Public,null,Array.Empty<Type>(),null) == null)
- return false;
-
- // All other conditions are met so check to see if the type is visible from COM.
- return Marshal.IsTypeVisibleFromCom(type);
- }
-
- #endregion
-
-
- #region Private helpers
-
- private void RegisterValueType(Type type, String strAsmName, String strAsmVersion, String strAsmCodeBase, String strRuntimeVersion)
- {
- // Retrieve some information that will be used during the registration process.
- String strRecordId = "{" + Marshal.GenerateGuidForType(type).ToString().ToUpper(CultureInfo.InvariantCulture) + "}";
-
- // Create the HKEY_CLASS_ROOT\Record key.
- using (RegistryKey RecordRootKey = Registry.ClassesRoot.CreateSubKey(strRecordRootName))
- {
- // Create the HKEY_CLASS_ROOT\Record\<RecordID> key.
- using (RegistryKey RecordKey = RecordRootKey.CreateSubKey(strRecordId))
- {
- // Create the HKEY_CLASS_ROOT\Record\<RecordId>\<version> key.
- using (RegistryKey RecordVersionKey = RecordKey.CreateSubKey(strAsmVersion))
- {
- // Set the class value.
- RecordVersionKey.SetValue("Class", type.FullName);
-
- // Set the assembly value.
- RecordVersionKey.SetValue("Assembly", strAsmName);
-
- // Set the runtime version value.
- RecordVersionKey.SetValue("RuntimeVersion", strRuntimeVersion);
-
- // Set the assembly code base value if a code base was specified.
- if (strAsmCodeBase != null)
- RecordVersionKey.SetValue("CodeBase", strAsmCodeBase);
- }
- }
- }
- }
-
- private void RegisterManagedType(Type type, String strAsmName, String strAsmVersion, String strAsmCodeBase, String strRuntimeVersion)
- {
- //
- // Retrieve some information that will be used during the registration process.
- //
-
- String strDocString = strDocStringPrefix + type.FullName;
- String strClsId = "{" + Marshal.GenerateGuidForType(type).ToString().ToUpper(CultureInfo.InvariantCulture) + "}";
- String strProgId = GetProgIdForType(type);
-
-
- //
- // Write the actual type information in the registry.
- //
-
- if (strProgId != String.Empty)
- {
- // Create the HKEY_CLASS_ROOT\<wzProgId> key.
- using (RegistryKey TypeNameKey = Registry.ClassesRoot.CreateSubKey(strProgId))
- {
- TypeNameKey.SetValue("", strDocString);
-
- // Create the HKEY_CLASS_ROOT\<wzProgId>\CLSID key.
- using (RegistryKey ProgIdClsIdKey = TypeNameKey.CreateSubKey("CLSID"))
- {
- ProgIdClsIdKey.SetValue("", strClsId);
- }
- }
- }
-
- // Create the HKEY_CLASS_ROOT\CLSID key.
- using (RegistryKey ClsIdRootKey = Registry.ClassesRoot.CreateSubKey(strClsIdRootName))
- {
- // Create the HKEY_CLASS_ROOT\CLSID\<CLSID> key.
- using (RegistryKey ClsIdKey = ClsIdRootKey.CreateSubKey(strClsId))
- {
- ClsIdKey.SetValue("", strDocString);
-
- // Create the HKEY_CLASS_ROOT\CLSID\<CLSID>\InprocServer32 key.
- using (RegistryKey InProcServerKey = ClsIdKey.CreateSubKey("InprocServer32"))
- {
- InProcServerKey.SetValue("", strMsCorEEFileName);
- InProcServerKey.SetValue("ThreadingModel", strManagedTypeThreadingModel);
- InProcServerKey.SetValue("Class", type.FullName);
- InProcServerKey.SetValue("Assembly", strAsmName);
- InProcServerKey.SetValue("RuntimeVersion", strRuntimeVersion);
- if (strAsmCodeBase != null)
- InProcServerKey.SetValue("CodeBase", strAsmCodeBase);
-
- // Create the HKEY_CLASS_ROOT\CLSID\<CLSID>\InprocServer32\<Version> subkey
- using (RegistryKey VersionSubKey = InProcServerKey.CreateSubKey(strAsmVersion))
- {
- VersionSubKey.SetValue("Class", type.FullName);
- VersionSubKey.SetValue("Assembly", strAsmName);
- VersionSubKey.SetValue("RuntimeVersion", strRuntimeVersion);
- if (strAsmCodeBase != null)
- VersionSubKey.SetValue("CodeBase", strAsmCodeBase);
- }
-
- if (strProgId != String.Empty)
- {
- // Create the HKEY_CLASS_ROOT\CLSID\<CLSID>\ProdId key.
- using (RegistryKey ProgIdKey = ClsIdKey.CreateSubKey("ProgId"))
- {
- ProgIdKey.SetValue("", strProgId);
- }
- }
- }
-
- // Create the HKEY_CLASS_ROOT\CLSID\<CLSID>\Implemented Categories\<Managed Category Guid> key.
- using (RegistryKey CategoryKey = ClsIdKey.CreateSubKey(strImplementedCategoriesSubKey))
- {
- using (RegistryKey ManagedCategoryKey = CategoryKey.CreateSubKey(strManagedCategoryGuid)) {}
- }
- }
- }
-
-
- //
- // Ensure that the managed category exists.
- //
-
- EnsureManagedCategoryExists();
- }
-
- private void RegisterComImportedType(Type type, String strAsmName, String strAsmVersion, String strAsmCodeBase, String strRuntimeVersion)
- {
- // Retrieve some information that will be used during the registration process.
- String strClsId = "{" + Marshal.GenerateGuidForType(type).ToString().ToUpper(CultureInfo.InvariantCulture) + "}";
-
- // Create the HKEY_CLASS_ROOT\CLSID key.
- using (RegistryKey ClsIdRootKey = Registry.ClassesRoot.CreateSubKey(strClsIdRootName))
- {
- // Create the HKEY_CLASS_ROOT\CLSID\<CLSID> key.
- using (RegistryKey ClsIdKey = ClsIdRootKey.CreateSubKey(strClsId))
- {
- // Create the HKEY_CLASS_ROOT\CLSID\<CLSID>\InProcServer32 key.
- using (RegistryKey InProcServerKey = ClsIdKey.CreateSubKey("InprocServer32"))
- {
- // Set the class value.
- InProcServerKey.SetValue("Class", type.FullName);
-
- // Set the assembly value.
- InProcServerKey.SetValue("Assembly", strAsmName);
-
- // Set the runtime version value.
- InProcServerKey.SetValue("RuntimeVersion", strRuntimeVersion);
-
- // Set the assembly code base value if a code base was specified.
- if (strAsmCodeBase != null)
- InProcServerKey.SetValue("CodeBase", strAsmCodeBase);
-
- // Create the HKEY_CLASS_ROOT\CLSID\<CLSID>\InprocServer32\<Version> subkey
- using (RegistryKey VersionSubKey = InProcServerKey.CreateSubKey(strAsmVersion))
- {
- VersionSubKey.SetValue("Class", type.FullName);
- VersionSubKey.SetValue("Assembly", strAsmName);
- VersionSubKey.SetValue("RuntimeVersion", strRuntimeVersion);
- if (strAsmCodeBase != null)
- VersionSubKey.SetValue("CodeBase", strAsmCodeBase);
- }
- }
- }
- }
- }
-
- private bool UnregisterValueType(Type type, String strAsmVersion)
- {
- bool bAllVersionsGone = true;
-
- // Try to open the HKEY_CLASS_ROOT\Record key.
- String strRecordId = "{" + Marshal.GenerateGuidForType(type).ToString().ToUpper(CultureInfo.InvariantCulture) + "}";
-
- using (RegistryKey RecordRootKey = Registry.ClassesRoot.OpenSubKey(strRecordRootName, true))
- {
- if (RecordRootKey != null)
- {
- // Open the HKEY_CLASS_ROOT\Record\{RecordId} key.
- using (RegistryKey RecordKey = RecordRootKey.OpenSubKey(strRecordId,true))
- {
- if (RecordKey != null)
- {
- using (RegistryKey VersionSubKey = RecordKey.OpenSubKey(strAsmVersion,true))
- {
- if (VersionSubKey != null)
- {
- // Delete the values we created.
- VersionSubKey.DeleteValue("Assembly",false);
- VersionSubKey.DeleteValue("Class",false);
- VersionSubKey.DeleteValue("CodeBase",false);
- VersionSubKey.DeleteValue("RuntimeVersion",false);
-
- // delete the version sub key if no value or subkeys under it
- if ((VersionSubKey.SubKeyCount == 0) && (VersionSubKey.ValueCount == 0))
- RecordKey.DeleteSubKey(strAsmVersion);
- }
- }
-
- // If there are sub keys left then there are versions left.
- if (RecordKey.SubKeyCount != 0)
- bAllVersionsGone = false;
-
- // If there are no other values or subkeys then we can delete the HKEY_CLASS_ROOT\Record\{RecordId}.
- if ((RecordKey.SubKeyCount == 0) && (RecordKey.ValueCount == 0))
- RecordRootKey.DeleteSubKey(strRecordId);
- }
- }
-
- // If there are no other values or subkeys then we can delete the HKEY_CLASS_ROOT\Record.
- if ((RecordRootKey.SubKeyCount == 0) && (RecordRootKey.ValueCount == 0))
- Registry.ClassesRoot.DeleteSubKey(strRecordRootName);
- }
- }
-
- return bAllVersionsGone;
- }
-
- // UnregisterManagedType
- //
- // Return :
- // true: All versions are gone.
- // false: Some versions are still left in registry
- private bool UnregisterManagedType(Type type,String strAsmVersion)
- {
- bool bAllVersionsGone = true;
-
- //
- // Create the CLSID string.
- //
-
- String strClsId = "{" + Marshal.GenerateGuidForType(type).ToString().ToUpper(CultureInfo.InvariantCulture) + "}";
- String strProgId = GetProgIdForType(type);
-
-
- //
- // Remove the entries under HKEY_CLASS_ROOT\CLSID key.
- //
-
- using (RegistryKey ClsIdRootKey = Registry.ClassesRoot.OpenSubKey(strClsIdRootName, true))
- {
- if (ClsIdRootKey != null)
- {
- //
- // Remove the entries under HKEY_CLASS_ROOT\CLSID\<CLSID> key.
- //
-
- using (RegistryKey ClsIdKey = ClsIdRootKey.OpenSubKey(strClsId, true))
- {
- if (ClsIdKey != null)
- {
- //
- // Remove the entries in the HKEY_CLASS_ROOT\CLSID\<CLSID>\InprocServer32 key.
- //
-
- using (RegistryKey InProcServerKey = ClsIdKey.OpenSubKey("InprocServer32", true))
- {
- if (InProcServerKey != null)
- {
- //
- // Remove the entries in HKEY_CLASS_ROOT\CLSID\<CLSID>\InprocServer32\<Version>
- //
-
- using (RegistryKey VersionSubKey = InProcServerKey.OpenSubKey(strAsmVersion, true))
- {
- if (VersionSubKey != null)
- {
- // Delete the values we created
- VersionSubKey.DeleteValue("Assembly",false);
- VersionSubKey.DeleteValue("Class",false);
- VersionSubKey.DeleteValue("RuntimeVersion",false);
- VersionSubKey.DeleteValue("CodeBase",false);
-
- // If there are no other values or subkeys then we can delete the VersionSubKey.
- if ((VersionSubKey.SubKeyCount == 0) && (VersionSubKey.ValueCount == 0))
- InProcServerKey.DeleteSubKey(strAsmVersion);
- }
- }
-
- // If there are sub keys left then there are versions left.
- if (InProcServerKey.SubKeyCount != 0)
- bAllVersionsGone = false;
-
- // If there are no versions left, then delete the threading model and default value.
- if (bAllVersionsGone)
- {
- InProcServerKey.DeleteValue("",false);
- InProcServerKey.DeleteValue("ThreadingModel",false);
- }
-
- InProcServerKey.DeleteValue("Assembly",false);
- InProcServerKey.DeleteValue("Class",false);
- InProcServerKey.DeleteValue("RuntimeVersion",false);
- InProcServerKey.DeleteValue("CodeBase",false);
-
- // If there are no other values or subkeys then we can delete the InProcServerKey.
- if ((InProcServerKey.SubKeyCount == 0) && (InProcServerKey.ValueCount == 0))
- ClsIdKey.DeleteSubKey("InprocServer32");
- }
- }
-
- // remove HKEY_CLASS_ROOT\CLSID\<CLSID>\ProgId
- // and HKEY_CLASS_ROOT\CLSID\<CLSID>\Implemented Category
- // only when all versions are removed
- if (bAllVersionsGone)
- {
- // Delete the value we created.
- ClsIdKey.DeleteValue("",false);
-
- if (strProgId != String.Empty)
- {
- //
- // Remove the entries in the HKEY_CLASS_ROOT\CLSID\<CLSID>\ProgId key.
- //
-
- using (RegistryKey ProgIdKey = ClsIdKey.OpenSubKey("ProgId", true))
- {
- if (ProgIdKey != null)
- {
- // Delete the value we created.
- ProgIdKey.DeleteValue("",false);
-
- // If there are no other values or subkeys then we can delete the ProgIdSubKey.
- if ((ProgIdKey.SubKeyCount == 0) && (ProgIdKey.ValueCount == 0))
- ClsIdKey.DeleteSubKey("ProgId");
- }
- }
- }
-
-
- //
- // Remove entries in the HKEY_CLASS_ROOT\CLSID\<CLSID>\Implemented Categories\<Managed Category Guid> key.
- //
-
- using (RegistryKey CategoryKey = ClsIdKey.OpenSubKey(strImplementedCategoriesSubKey, true))
- {
- if (CategoryKey != null)
- {
- using (RegistryKey ManagedCategoryKey = CategoryKey.OpenSubKey(strManagedCategoryGuid, true))
- {
- if (ManagedCategoryKey != null)
- {
- // If there are no other values or subkeys then we can delete the ManagedCategoryKey.
- if ((ManagedCategoryKey.SubKeyCount == 0) && (ManagedCategoryKey.ValueCount == 0))
- CategoryKey.DeleteSubKey(strManagedCategoryGuid);
- }
- }
-
- // If there are no other values or subkeys then we can delete the CategoryKey.
- if ((CategoryKey.SubKeyCount == 0) && (CategoryKey.ValueCount == 0))
- ClsIdKey.DeleteSubKey(strImplementedCategoriesSubKey);
- }
- }
- }
-
- // If there are no other values or subkeys then we can delete the ClsIdKey.
- if ((ClsIdKey.SubKeyCount == 0) && (ClsIdKey.ValueCount == 0))
- ClsIdRootKey.DeleteSubKey(strClsId);
- }
- }
-
- // If there are no other values or subkeys then we can delete the CLSID key.
- if ((ClsIdRootKey.SubKeyCount == 0) && (ClsIdRootKey.ValueCount == 0))
- Registry.ClassesRoot.DeleteSubKey(strClsIdRootName);
- }
-
-
- //
- // Remove the entries under HKEY_CLASS_ROOT\<wzProgId> key.
- //
-
- if (bAllVersionsGone)
- {
- if (strProgId != String.Empty)
- {
- using (RegistryKey TypeNameKey = Registry.ClassesRoot.OpenSubKey(strProgId, true))
- {
- if (TypeNameKey != null)
- {
- // Delete the values we created.
- TypeNameKey.DeleteValue("",false);
-
-
- //
- // Remove the entries in the HKEY_CLASS_ROOT\<wzProgId>\CLSID key.
- //
-
- using (RegistryKey ProgIdClsIdKey = TypeNameKey.OpenSubKey("CLSID", true))
- {
- if (ProgIdClsIdKey != null)
- {
- // Delete the values we created.
- ProgIdClsIdKey.DeleteValue("",false);
-
- // If there are no other values or subkeys then we can delete the ProgIdClsIdKey.
- if ((ProgIdClsIdKey.SubKeyCount == 0) && (ProgIdClsIdKey.ValueCount == 0))
- TypeNameKey.DeleteSubKey("CLSID");
- }
- }
-
- // If there are no other values or subkeys then we can delete the TypeNameKey.
- if ((TypeNameKey.SubKeyCount == 0) && (TypeNameKey.ValueCount == 0))
- Registry.ClassesRoot.DeleteSubKey(strProgId);
- }
- }
- }
- }
- }
-
- return bAllVersionsGone;
- }
-
- // UnregisterComImportedType
- // Return:
- // true: All version information are gone.
- // false: There are still some version left in registry
- private bool UnregisterComImportedType(Type type, String strAsmVersion)
- {
- bool bAllVersionsGone = true;
-
- String strClsId = "{" + Marshal.GenerateGuidForType(type).ToString().ToUpper(CultureInfo.InvariantCulture) + "}";
-
- // Try to open the HKEY_CLASS_ROOT\CLSID key.
- using (RegistryKey ClsIdRootKey = Registry.ClassesRoot.OpenSubKey(strClsIdRootName, true))
- {
- if (ClsIdRootKey != null)
- {
- // Try to open the HKEY_CLASS_ROOT\CLSID\<CLSID> key.
- using (RegistryKey ClsIdKey = ClsIdRootKey.OpenSubKey(strClsId, true))
- {
- if (ClsIdKey != null)
- {
- // Try to open the HKEY_CLASS_ROOT\CLSID\<CLSID>\InProcServer32 key.
- using (RegistryKey InProcServerKey = ClsIdKey.OpenSubKey("InprocServer32", true))
- {
- if (InProcServerKey != null)
- {
- // Delete the values we created.
- InProcServerKey.DeleteValue("Assembly",false);
- InProcServerKey.DeleteValue("Class",false);
- InProcServerKey.DeleteValue("RuntimeVersion",false);
- InProcServerKey.DeleteValue("CodeBase",false);
-
- // Try to open the entries in HKEY_CLASS_ROOT\CLSID\<CLSID>\InProcServer32\<Version>
- using (RegistryKey VersionSubKey = InProcServerKey.OpenSubKey(strAsmVersion,true))
- {
- if (VersionSubKey != null)
- {
- // Delete the value we created
- VersionSubKey.DeleteValue("Assembly",false);
- VersionSubKey.DeleteValue("Class",false);
- VersionSubKey.DeleteValue("RuntimeVersion",false);
- VersionSubKey.DeleteValue("CodeBase",false);
-
- // If there are no other values or subkeys then we can delete the VersionSubKey
- if ((VersionSubKey.SubKeyCount == 0) && (VersionSubKey.ValueCount == 0))
- InProcServerKey.DeleteSubKey(strAsmVersion);
- }
- }
-
- // If there are sub keys left then there are versions left.
- if (InProcServerKey.SubKeyCount != 0)
- bAllVersionsGone = false;
-
- // If there are no other values or subkeys then we can delete the InProcServerKey.
- if ((InProcServerKey.SubKeyCount == 0) && (InProcServerKey.ValueCount == 0))
- ClsIdKey.DeleteSubKey("InprocServer32");
- }
- }
-
- // If there are no other values or subkeys then we can delete the ClsIdKey.
- if ((ClsIdKey.SubKeyCount == 0) && (ClsIdKey.ValueCount == 0))
- ClsIdRootKey.DeleteSubKey(strClsId);
- }
- }
-
- // If there are no other values or subkeys then we can delete the CLSID key.
- if ((ClsIdRootKey.SubKeyCount == 0) && (ClsIdRootKey.ValueCount == 0))
- Registry.ClassesRoot.DeleteSubKey(strClsIdRootName);
- }
- }
-
- return bAllVersionsGone;
- }
-
- private void RegisterPrimaryInteropAssembly(RuntimeAssembly assembly, String strAsmCodeBase, PrimaryInteropAssemblyAttribute attr)
- {
- // Validate that the PIA has a strong name.
- if (assembly.GetPublicKey().Length == 0)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_PIAMustBeStrongNamed"));
-
- String strTlbId = "{" + Marshal.GetTypeLibGuidForAssembly(assembly).ToString().ToUpper(CultureInfo.InvariantCulture) + "}";
- String strVersion = attr.MajorVersion.ToString("x", CultureInfo.InvariantCulture) + "." + attr.MinorVersion.ToString("x", CultureInfo.InvariantCulture);
-
- // Create the HKEY_CLASS_ROOT\TypeLib key.
- using (RegistryKey TypeLibRootKey = Registry.ClassesRoot.CreateSubKey(strTlbRootName))
- {
- // Create the HKEY_CLASS_ROOT\TypeLib\<TLBID> key.
- using (RegistryKey TypeLibKey = TypeLibRootKey.CreateSubKey(strTlbId))
- {
- // Create the HKEY_CLASS_ROOT\TypeLib\<TLBID>\<Major.Minor> key.
- using (RegistryKey VersionSubKey = TypeLibKey.CreateSubKey(strVersion))
- {
- // Create the HKEY_CLASS_ROOT\TypeLib\<TLBID>\PrimaryInteropAssembly key.
- VersionSubKey.SetValue("PrimaryInteropAssemblyName", assembly.FullName);
- if (strAsmCodeBase != null)
- VersionSubKey.SetValue("PrimaryInteropAssemblyCodeBase", strAsmCodeBase);
- }
- }
- }
- }
-
- private void UnregisterPrimaryInteropAssembly(Assembly assembly, PrimaryInteropAssemblyAttribute attr)
- {
- String strTlbId = "{" + Marshal.GetTypeLibGuidForAssembly(assembly).ToString().ToUpper(CultureInfo.InvariantCulture) + "}";
- String strVersion = attr.MajorVersion.ToString("x", CultureInfo.InvariantCulture) + "." + attr.MinorVersion.ToString("x", CultureInfo.InvariantCulture);
-
- // Try to open the HKEY_CLASS_ROOT\TypeLib key.
- using (RegistryKey TypeLibRootKey = Registry.ClassesRoot.OpenSubKey(strTlbRootName, true))
- {
- if (TypeLibRootKey != null)
- {
- // Try to open the HKEY_CLASS_ROOT\TypeLib\<TLBID> key.
- using (RegistryKey TypeLibKey = TypeLibRootKey.OpenSubKey(strTlbId, true))
- {
- if (TypeLibKey != null)
- {
- // Try to open the HKEY_CLASS_ROOT\TypeLib<TLBID>\<Major.Minor> key.
- using (RegistryKey VersionSubKey = TypeLibKey.OpenSubKey(strVersion, true))
- {
- if (VersionSubKey != null)
- {
- // Delete the values we created.
- VersionSubKey.DeleteValue("PrimaryInteropAssemblyName",false);
- VersionSubKey.DeleteValue("PrimaryInteropAssemblyCodeBase",false);
-
- // If there are no other values or subkeys then we can delete the VersionKey.
- if ((VersionSubKey.SubKeyCount == 0) && (VersionSubKey.ValueCount == 0))
- TypeLibKey.DeleteSubKey(strVersion);
- }
- }
-
- // If there are no other values or subkeys then we can delete the TypeLibKey.
- if ((TypeLibKey.SubKeyCount == 0) && (TypeLibKey.ValueCount == 0))
- TypeLibRootKey.DeleteSubKey(strTlbId);
- }
- }
-
- // If there are no other values or subkeys then we can delete the TypeLib key.
- if ((TypeLibRootKey.SubKeyCount == 0) && (TypeLibRootKey.ValueCount == 0))
- Registry.ClassesRoot.DeleteSubKey(strTlbRootName);
- }
- }
- }
-
- private void EnsureManagedCategoryExists()
- {
- if (!ManagedCategoryExists())
- {
- // Create the HKEY_CLASS_ROOT\Component Category key.
- using (RegistryKey ComponentCategoryKey = Registry.ClassesRoot.CreateSubKey(strComponentCategorySubKey))
- {
- // Create the HKEY_CLASS_ROOT\Component Category\<Managed Category Guid> key.
- using (RegistryKey ManagedCategoryKey = ComponentCategoryKey.CreateSubKey(strManagedCategoryGuid))
- {
- ManagedCategoryKey.SetValue("0", strManagedCategoryDescription);
- }
- }
- }
- }
-
- private static bool ManagedCategoryExists()
- {
- using (RegistryKey componentCategoryKey = Registry.ClassesRoot.OpenSubKey(strComponentCategorySubKey,
- false))
- {
- if (componentCategoryKey == null)
- return false;
- using (RegistryKey managedCategoryKey = componentCategoryKey.OpenSubKey(strManagedCategoryGuid,
- false))
- {
- if (managedCategoryKey == null)
- return false;
- object value = managedCategoryKey.GetValue("0");
- if (value == null || value.GetType() != typeof(string))
- return false;
- string stringValue = (string)value;
- if (stringValue != strManagedCategoryDescription)
- return false;
- }
- }
-
- return true;
- }
-
- private void CallUserDefinedRegistrationMethod(Type type, bool bRegister)
- {
- bool bFunctionCalled = false;
-
- // Retrieve the attribute type to use to determine if a function is the requested user defined
- // registration function.
- Type RegFuncAttrType = null;
- if(bRegister)
- RegFuncAttrType = typeof(ComRegisterFunctionAttribute);
- else
- RegFuncAttrType = typeof(ComUnregisterFunctionAttribute);
-
- for(Type currType = type; !bFunctionCalled && currType != null; currType = currType.BaseType)
- {
- // Retrieve all the methods.
- MethodInfo[] aMethods = currType.GetMethods(BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static);
- int NumMethods = aMethods.Length;
-
- // Go through all the methods and check for the ComRegisterMethod custom attribute.
- for(int cMethods = 0;cMethods < NumMethods;cMethods++)
- {
- MethodInfo CurrentMethod = aMethods[cMethods];
-
- // Check to see if the method has the custom attribute.
- if(CurrentMethod.GetCustomAttributes(RegFuncAttrType, true).Length != 0)
- {
- // Check to see if the method is static before we call it.
- if(!CurrentMethod.IsStatic)
- {
- if(bRegister)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NonStaticComRegFunction",CurrentMethod.Name,currType.Name));
- else
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NonStaticComUnRegFunction",CurrentMethod.Name,currType.Name));
- }
-
- // Finally check that the signature is string ret void.
- ParameterInfo[] aParams = CurrentMethod.GetParameters();
- if (CurrentMethod.ReturnType != typeof(void) ||
- aParams == null ||
- aParams.Length != 1 ||
- (aParams[0].ParameterType != typeof(String) && aParams[0].ParameterType != typeof(Type)))
- {
- if(bRegister)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_InvalidComRegFunctionSig",CurrentMethod.Name,currType.Name));
- else
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_InvalidComUnRegFunctionSig",CurrentMethod.Name,currType.Name));
- }
-
- // There can only be one register and one unregister function per type.
- if(bFunctionCalled)
- {
- if(bRegister)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_MultipleComRegFunctions",currType.Name));
- else
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_MultipleComUnRegFunctions",currType.Name));
- }
-
- // The function is valid so set up the arguments to call it.
- Object[] objs = new Object[1];
- if(aParams[0].ParameterType == typeof(String))
- {
- // We are dealing with the string overload of the function.
- objs[0] = "HKEY_CLASSES_ROOT\\CLSID\\{" + Marshal.GenerateGuidForType(type).ToString().ToUpper(CultureInfo.InvariantCulture) + "}";
- }
- else
- {
- // We are dealing with the type overload of the function.
- objs[0] = type;
- }
-
- // Invoke the COM register function.
- CurrentMethod.Invoke(null, objs);
-
- // Mark the function as having been called.
- bFunctionCalled = true;
- }
- }
- }
- }
-
- private Type GetBaseComImportType(Type type)
- {
- for (; type != null && !type.IsImport; type = type.BaseType);
- return type;
- }
-
- private bool IsRegisteredAsValueType(Type type)
- {
- if (!type.IsValueType)
- return false;
-
- return true;
- }
-
- #endregion
-
-
- #region FCalls and DllImports
-
-#if FEATURE_COMINTEROP_MANAGED_ACTIVATION
- // GUID versioning can be controlled by using the GuidAttribute or
- // letting the runtime generate it based on type and assembly strong name.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void RegisterTypeForComClientsNative(Type type,ref Guid g);
-
- // GUID versioning can be controlled by using the GuidAttribute or
- // letting the runtime generate it based on type and assembly strong name.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern int RegisterTypeForComClientsExNative(Type t, RegistrationClassContext clsContext, RegistrationConnectionType flags);
-#endif // FEATURE_COMINTEROP_MANAGED_ACTIVATION
-
- [DllImport(Win32Native.OLE32,CharSet=CharSet.Auto,PreserveSig=false)]
- private static extern void CoRevokeClassObject(int cookie);
- #endregion
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/RuntimeEnvironment.cs b/src/mscorlib/src/System/Runtime/InteropServices/RuntimeEnvironment.cs
index a5c058da43..28abe0cb3b 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/RuntimeEnvironment.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/RuntimeEnvironment.cs
@@ -17,7 +17,6 @@ using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
-using System.Security.Permissions;
using System.Reflection;
using Microsoft.Win32;
using System.Runtime.Versioning;
@@ -25,96 +24,18 @@ using StackCrawlMark = System.Threading.StackCrawlMark;
namespace System.Runtime.InteropServices
{
- [System.Runtime.InteropServices.ComVisible(true)]
- static public class RuntimeEnvironment {
+ static internal class RuntimeEnvironment {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern String GetModuleFileName();
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern String GetDeveloperPath();
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern String GetHostBindingFile();
-
- public static bool FromGlobalAccessCache(Assembly a)
- {
- return a.GlobalAssemblyCache;
- }
-
[MethodImpl (MethodImplOptions.NoInlining)]
public static String GetSystemVersion()
{
return Assembly.GetExecutingAssembly().ImageRuntimeVersion;
}
- public static String GetRuntimeDirectory()
- {
- String dir = GetRuntimeDirectoryImpl();
- new FileIOPermission(FileIOPermissionAccess.PathDiscovery, dir).Demand();
- return dir;
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern String GetRuntimeDirectoryImpl();
-
- // Returns the system ConfigurationFile
- public static String SystemConfigurationFile {
- get {
- StringBuilder sb = new StringBuilder(Path.MaxPath);
- sb.Append(GetRuntimeDirectory());
- sb.Append(AppDomainSetup.RuntimeConfigurationFile);
- String path = sb.ToString();
-
- // Do security check
- new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
-
- return path;
- }
- }
-
#if FEATURE_COMINTEROP
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern IntPtr GetRuntimeInterfaceImpl(
- [In, MarshalAs(UnmanagedType.LPStruct)] Guid clsid,
- [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid);
-
- //
- // This function does the equivalent of calling GetInterface(clsid, riid) on the
- // ICLRRuntimeInfo representing this runtime. See MetaHost.idl for a list of
- // CLSIDs and IIDs supported by this method.
- //
- // Returns unmanaged pointer to requested interface on success. Throws
- // COMException with failed HR if there is a QI failure.
- //
- [ComVisible(false)]
- public static IntPtr GetRuntimeInterfaceAsIntPtr(Guid clsid, Guid riid)
- {
- return GetRuntimeInterfaceImpl(clsid, riid);
- }
-
- //
- // This function does the equivalent of calling GetInterface(clsid, riid) on the
- // ICLRRuntimeInfo representing this runtime. See MetaHost.idl for a list of
- // CLSIDs and IIDs supported by this method.
- //
- // Returns an RCW to requested interface on success. Throws
- // COMException with failed HR if there is a QI failure.
- //
- [ComVisible(false)]
- public static object GetRuntimeInterfaceAsObject(Guid clsid, Guid riid)
- {
- IntPtr p = IntPtr.Zero;
- try {
- p = GetRuntimeInterfaceImpl(clsid, riid);
- return Marshal.GetObjectForIUnknown(p);
- } finally {
- if(p != IntPtr.Zero) {
- Marshal.Release(p);
- }
- }
- }
#endif // FEATURE_COMINTEROP
}
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/SEHException.cs b/src/mscorlib/src/System/Runtime/InteropServices/SEHException.cs
index b418d914ed..72b98738ae 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/SEHException.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/SEHException.cs
@@ -17,7 +17,6 @@ namespace System.Runtime.InteropServices {
using System.Runtime.Serialization;
// Exception for Structured Exception Handler exceptions.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class SEHException : ExternalException {
public SEHException()
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/SafeArrayRankMismatchException.cs b/src/mscorlib/src/System/Runtime/InteropServices/SafeArrayRankMismatchException.cs
index 0f4caa21a1..12bf7e7e47 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/SafeArrayRankMismatchException.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/SafeArrayRankMismatchException.cs
@@ -15,7 +15,6 @@ namespace System.Runtime.InteropServices {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class SafeArrayRankMismatchException : SystemException {
public SafeArrayRankMismatchException()
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/SafeArrayTypeMismatchException.cs b/src/mscorlib/src/System/Runtime/InteropServices/SafeArrayTypeMismatchException.cs
index a5711c1ade..050772af2c 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/SafeArrayTypeMismatchException.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/SafeArrayTypeMismatchException.cs
@@ -16,7 +16,6 @@ namespace System.Runtime.InteropServices {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class SafeArrayTypeMismatchException : SystemException {
public SafeArrayTypeMismatchException()
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/SafeBuffer.cs b/src/mscorlib/src/System/Runtime/InteropServices/SafeBuffer.cs
index eba67ae74e..ee5c3d8e87 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/SafeBuffer.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/SafeBuffer.cs
@@ -69,7 +69,6 @@
namespace System.Runtime.InteropServices
{
using System;
-using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
@@ -175,7 +174,6 @@ using System.Diagnostics.Contracts;
/// the pointer from within the SafeBuffer. You must set
/// pointer to null before calling this method.</param>
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public void AcquirePointer(ref byte* pointer)
{
if (_numBytes == Uninitialized)
@@ -194,7 +192,6 @@ using System.Diagnostics.Contracts;
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void ReleasePointer()
{
if (_numBytes == Uninitialized)
@@ -212,7 +209,6 @@ using System.Diagnostics.Contracts;
/// may have to consider alignment.</param>
/// <returns>An instance of T read from memory.</returns>
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public T Read<T>(ulong byteOffset) where T : struct {
if (_numBytes == Uninitialized)
throw NotInitialized();
@@ -240,7 +236,6 @@ using System.Diagnostics.Contracts;
}
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public void ReadArray<T>(ulong byteOffset, T[] array, int index, int count)
where T : struct
{
@@ -287,7 +282,6 @@ using System.Diagnostics.Contracts;
/// may have to consider alignment.</param>
/// <param name="value">The value type to write to memory.</param>
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public void Write<T>(ulong byteOffset, T value) where T : struct {
if (_numBytes == Uninitialized)
throw NotInitialized();
@@ -312,7 +306,6 @@ using System.Diagnostics.Contracts;
}
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public void WriteArray<T>(ulong byteOffset, T[] array, int index, int count)
where T : struct
{
@@ -355,7 +348,6 @@ using System.Diagnostics.Contracts;
/// </summary>
[CLSCompliant(false)]
public ulong ByteLength {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get {
if (_numBytes == Uninitialized)
throw NotInitialized();
@@ -367,7 +359,6 @@ using System.Diagnostics.Contracts;
/* No indexer. The perf would be misleadingly bad. People should use
* AcquirePointer and ReleasePointer instead. */
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private void SpaceCheck(byte* ptr, ulong sizeInBytes)
{
if ((ulong)_numBytes < sizeInBytes)
@@ -376,13 +367,11 @@ using System.Diagnostics.Contracts;
NotEnoughRoom();
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static void NotEnoughRoom()
{
throw new ArgumentException(Environment.GetResourceString("Arg_BufferTooSmall"));
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static InvalidOperationException NotInitialized()
{
Debug.Assert(false, "Uninitialized SafeBuffer! Someone needs to call Initialize before using this instance!");
@@ -391,7 +380,6 @@ using System.Diagnostics.Contracts;
// FCALL limitations mean we can't have generic FCALL methods. However, we can pass
// TypedReferences to FCALL methods.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static void GenericPtrToStructure<T>(byte* ptr, out T structure, uint sizeofT) where T : struct
{
structure = default(T); // Dummy assignment to silence the compiler
@@ -399,17 +387,14 @@ using System.Diagnostics.Contracts;
}
[MethodImpl(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern void PtrToStructureNative(byte* ptr, /*out T*/ TypedReference structure, uint sizeofT);
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static void GenericStructureToPtr<T>(ref T structure, byte* ptr, uint sizeofT) where T : struct
{
StructureToPtrNative(__makeref(structure), ptr, sizeofT);
}
[MethodImpl(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern void StructureToPtrNative(/*ref T*/ TypedReference structure, byte* ptr, uint sizeofT);
}
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/SafeHandle.cs b/src/mscorlib/src/System/Runtime/InteropServices/SafeHandle.cs
index ed9910e4e4..591caa2877 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/SafeHandle.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/SafeHandle.cs
@@ -19,7 +19,6 @@ namespace System.Runtime.InteropServices {
using System;
using System.Reflection;
using System.Threading;
-using System.Security.Permissions;
using System.Runtime;
using System.Runtime.CompilerServices;
using System.IO;
@@ -154,7 +153,6 @@ public abstract class SafeHandle : CriticalFinalizerObject, IDisposable
// Creates a SafeHandle class. Users must then set the Handle property.
// To prevent the SafeHandle from being freed, write a subclass that
// doesn't define a finalizer.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected SafeHandle(IntPtr invalidHandleValue, bool ownsHandle)
{
handle = invalidHandleValue;
@@ -190,11 +188,9 @@ public abstract class SafeHandle : CriticalFinalizerObject, IDisposable
Dispose(false);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
extern void InternalFinalize();
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
protected void SetHandle(IntPtr handle) {
this.handle = handle;
}
@@ -213,33 +209,27 @@ public abstract class SafeHandle : CriticalFinalizerObject, IDisposable
// any way, this can lead to a handle recycling security attack (i.e. an
// untrusted caller can query data on the handle you've just returned
// and get back information for an entirely unrelated resource).
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public IntPtr DangerousGetHandle()
{
return handle;
}
public bool IsClosed {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get { return (_state & 1) == 1; }
}
public abstract bool IsInvalid {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void Close() {
Dispose(true);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void Dispose() {
Dispose(true);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
protected virtual void Dispose(bool disposing)
{
if (disposing)
@@ -248,7 +238,6 @@ public abstract class SafeHandle : CriticalFinalizerObject, IDisposable
InternalFinalize();
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern void InternalDispose();
@@ -256,7 +245,6 @@ public abstract class SafeHandle : CriticalFinalizerObject, IDisposable
// your handle is invalid and you want to record that information.
// An example is calling a syscall and getting back ERROR_INVALID_HANDLE.
// This method will normally leak handles!
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern void SetHandleAsInvalid();
@@ -268,7 +256,6 @@ public abstract class SafeHandle : CriticalFinalizerObject, IDisposable
// The boolean returned should be true for success and false if the runtime
// should fire a SafeHandleCriticalFailure MDA (CustomerDebugProbe) if that
// MDA is enabled.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
protected abstract bool ReleaseHandle();
// Add a reason why this handle should not be relinquished (i.e. have
@@ -284,7 +271,6 @@ public abstract class SafeHandle : CriticalFinalizerObject, IDisposable
// when the method is interrupted prior to processing by a thread abort or
// when the handle has already been (or is in the process of being)
// released.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern void DangerousAddRef(ref bool success);
@@ -297,7 +283,6 @@ public abstract class SafeHandle : CriticalFinalizerObject, IDisposable
// constitutes a potential security hole (via handle recycling) as well as a
// correctness problem -- so don't ever expose Dangerous* calls out to
// untrusted code.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern void DangerousRelease();
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventItfInfo.cs b/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventItfInfo.cs
deleted file mode 100644
index 29b094c9e8..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventItfInfo.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices.TCEAdapterGen {
-
- using System;
- using System.Reflection;
- using System.Collections;
-
- internal class EventItfInfo
- {
- public EventItfInfo(String strEventItfName,
- String strSrcItfName,
- String strEventProviderName,
- RuntimeAssembly asmImport,
- RuntimeAssembly asmSrcItf)
- {
- m_strEventItfName = strEventItfName;
- m_strSrcItfName = strSrcItfName;
- m_strEventProviderName = strEventProviderName;
- m_asmImport = asmImport;
- m_asmSrcItf = asmSrcItf;
- }
-
- public Type GetEventItfType()
- {
- Type t = m_asmImport.GetType(m_strEventItfName, true, false);
- if (t != null && !t.IsVisible)
- t = null;
- return t;
- }
-
- public Type GetSrcItfType()
- {
- Type t = m_asmSrcItf.GetType(m_strSrcItfName, true, false);
- if (t != null && !t.IsVisible)
- t = null;
- return t;
- }
-
- public String GetEventProviderName()
- {
- return m_strEventProviderName;
- }
-
- private String m_strEventItfName;
- private String m_strSrcItfName;
- private String m_strEventProviderName;
- private RuntimeAssembly m_asmImport;
- private RuntimeAssembly m_asmSrcItf;
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventProviderWriter.cs b/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventProviderWriter.cs
deleted file mode 100644
index 160a0ab491..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventProviderWriter.cs
+++ /dev/null
@@ -1,774 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices.TCEAdapterGen {
- using System.Runtime.InteropServices.ComTypes;
- using ubyte = System.Byte;
- using System;
- using System.Reflection;
- using System.Reflection.Emit;
- using System.Collections;
- using System.Threading;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- internal class EventProviderWriter
- {
- private const BindingFlags DefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
-
- private readonly Type[] MonitorEnterParamTypes = new Type[] { typeof(Object), Type.GetType("System.Boolean&") };
-
- public EventProviderWriter( ModuleBuilder OutputModule, String strDestTypeName, Type EventItfType, Type SrcItfType, Type SinkHelperType )
- {
- m_OutputModule = OutputModule;
- m_strDestTypeName = strDestTypeName;
- m_EventItfType = EventItfType;
- m_SrcItfType = SrcItfType;
- m_SinkHelperType = SinkHelperType;
- }
-
- public Type Perform()
- {
- // Create the event provider class.
- TypeBuilder OutputTypeBuilder = m_OutputModule.DefineType(
- m_strDestTypeName,
- TypeAttributes.Sealed | TypeAttributes.NotPublic,
- typeof(Object),
- new Type[]{m_EventItfType, typeof(IDisposable)}
- );
-
- // Create the event source field.
- FieldBuilder fbCPC = OutputTypeBuilder.DefineField(
- "m_ConnectionPointContainer",
- typeof(IConnectionPointContainer),
- FieldAttributes.Private
- );
-
- // Create array of event sink helpers.
- FieldBuilder fbSinkHelper = OutputTypeBuilder.DefineField(
- "m_aEventSinkHelpers",
- typeof(ArrayList),
- FieldAttributes.Private
- );
-
- // Define the connection point field.
- FieldBuilder fbEventCP = OutputTypeBuilder.DefineField(
- "m_ConnectionPoint",
- typeof(IConnectionPoint),
- FieldAttributes.Private
- );
-
- // Define the InitXXX method.
- MethodBuilder InitSrcItfMethodBuilder =
- DefineInitSrcItfMethod( OutputTypeBuilder, m_SrcItfType, fbSinkHelper, fbEventCP, fbCPC );
-
- // Process all the methods in the event interface.
- MethodInfo[] aMethods = TCEAdapterGenerator.GetNonPropertyMethods(m_SrcItfType);
- for ( int cMethods = 0; cMethods < aMethods.Length; cMethods++ )
- {
- if ( m_SrcItfType == aMethods[cMethods].DeclaringType )
- {
- // Define the add_XXX method.
- MethodBuilder AddEventMethodBuilder = DefineAddEventMethod(
- OutputTypeBuilder, aMethods[cMethods], m_SinkHelperType, fbSinkHelper, fbEventCP, InitSrcItfMethodBuilder );
-
- // Define the remove_XXX method.
- MethodBuilder RemoveEventMethodBuilder = DefineRemoveEventMethod(
- OutputTypeBuilder, aMethods[cMethods], m_SinkHelperType, fbSinkHelper, fbEventCP );
- }
- }
-
- // Define the constructor.
- DefineConstructor( OutputTypeBuilder, fbCPC );
-
- // Define the finalize method.
- MethodBuilder FinalizeMethod = DefineFinalizeMethod( OutputTypeBuilder, m_SinkHelperType, fbSinkHelper, fbEventCP );
-
- // Define the Dispose method.
- DefineDisposeMethod( OutputTypeBuilder, FinalizeMethod);
-
- return OutputTypeBuilder.CreateType();
- }
-
- private MethodBuilder DefineAddEventMethod( TypeBuilder OutputTypeBuilder, MethodInfo SrcItfMethod, Type SinkHelperClass, FieldBuilder fbSinkHelperArray, FieldBuilder fbEventCP, MethodBuilder mbInitSrcItf )
- {
- Type[] aParamTypes;
-
- // Find the delegate on the event sink helper.
- FieldInfo DelegateField = SinkHelperClass.GetField( "m_" + SrcItfMethod.Name + "Delegate" );
- Debug.Assert(DelegateField != null, "Unable to find the field m_" + SrcItfMethod.Name + "Delegate on the sink helper");
-
- // Find the cookie on the event sink helper.
- FieldInfo CookieField = SinkHelperClass.GetField( "m_dwCookie" );
- Debug.Assert(CookieField != null, "Unable to find the field m_dwCookie on the sink helper");
-
- // Retrieve the sink helper's constructor.
- ConstructorInfo SinkHelperCons = SinkHelperClass.GetConstructor(EventProviderWriter.DefaultLookup | BindingFlags.NonPublic, null, Array.Empty<Type>(), null );
- Debug.Assert(SinkHelperCons != null, "Unable to find the constructor for the sink helper");
-
- // Retrieve the IConnectionPoint.Advise method.
- MethodInfo CPAdviseMethod = typeof(IConnectionPoint).GetMethod( "Advise" );
- Debug.Assert(CPAdviseMethod != null, "Unable to find the method ConnectionPoint.Advise");
-
- // Retrieve the ArrayList.Add method.
- aParamTypes = new Type[1];
- aParamTypes[0] = typeof(Object);
- MethodInfo ArrayListAddMethod = typeof(ArrayList).GetMethod( "Add", aParamTypes, null );
- Debug.Assert(ArrayListAddMethod != null, "Unable to find the method ArrayList.Add");
-
- // Retrieve the Monitor.Enter() method.
- MethodInfo MonitorEnterMethod = typeof(Monitor).GetMethod( "Enter", MonitorEnterParamTypes, null );
- Debug.Assert(MonitorEnterMethod != null, "Unable to find the method Monitor.Enter()");
-
- // Retrieve the Monitor.Exit() method.
- aParamTypes[0] = typeof(Object);
- MethodInfo MonitorExitMethod = typeof(Monitor).GetMethod( "Exit", aParamTypes, null );
- Debug.Assert(MonitorExitMethod != null, "Unable to find the method Monitor.Exit()");
-
- // Define the add_XXX method.
- Type[] parameterTypes;
- parameterTypes = new Type[1];
- parameterTypes[0] = DelegateField.FieldType;
- MethodBuilder Meth = OutputTypeBuilder.DefineMethod(
- "add_" + SrcItfMethod.Name,
- MethodAttributes.Public | MethodAttributes.Virtual,
- null,
- parameterTypes );
-
- ILGenerator il = Meth.GetILGenerator();
-
- // Define a label for the m_IFooEventsCP comparision.
- Label EventCPNonNullLabel = il.DefineLabel();
-
- // Declare the local variables.
- LocalBuilder ltSinkHelper = il.DeclareLocal( SinkHelperClass );
- LocalBuilder ltCookie = il.DeclareLocal( typeof(Int32) );
- LocalBuilder ltLockTaken = il.DeclareLocal( typeof(bool) );
-
- // Generate the following code:
- // try {
- il.BeginExceptionBlock();
-
- // Generate the following code:
- // Monitor.Enter(this, ref lockTaken);
- il.Emit(OpCodes.Ldarg, (short)0);
- il.Emit(OpCodes.Ldloca_S, ltLockTaken);
- il.Emit(OpCodes.Call, MonitorEnterMethod);
-
- // Generate the following code:
- // if ( m_IFooEventsCP != null ) goto EventCPNonNullLabel;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbEventCP );
- il.Emit( OpCodes.Brtrue, EventCPNonNullLabel );
-
- // Generate the following code:
- // InitIFooEvents();
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Call, mbInitSrcItf );
-
- // Mark this as label to jump to if the CP is not null.
- il.MarkLabel( EventCPNonNullLabel );
-
- // Generate the following code:
- // IFooEvents_SinkHelper SinkHelper = new IFooEvents_SinkHelper;
- il.Emit( OpCodes.Newobj, SinkHelperCons );
- il.Emit( OpCodes.Stloc, ltSinkHelper );
-
- // Generate the following code:
- // dwCookie = 0;
- il.Emit( OpCodes.Ldc_I4_0 );
- il.Emit( OpCodes.Stloc, ltCookie );
-
- // Generate the following code:
- // m_IFooEventsCP.Advise( SinkHelper, dwCookie );
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbEventCP );
- il.Emit( OpCodes.Ldloc, ltSinkHelper );
- il.Emit( OpCodes.Castclass, typeof(Object) );
- il.Emit( OpCodes.Ldloca, ltCookie );
- il.Emit( OpCodes.Callvirt, CPAdviseMethod );
-
- // Generate the following code:
- // SinkHelper.m_dwCookie = dwCookie;
- il.Emit( OpCodes.Ldloc, ltSinkHelper );
- il.Emit( OpCodes.Ldloc, ltCookie );
- il.Emit( OpCodes.Stfld, CookieField );
-
- // Generate the following code:
- // SinkHelper.m_FooDelegate = d;
- il.Emit( OpCodes.Ldloc, ltSinkHelper );
- il.Emit( OpCodes.Ldarg, (short)1 );
- il.Emit( OpCodes.Stfld, DelegateField );
-
- // Generate the following code:
- // m_aIFooEventsHelpers.Add( SinkHelper );
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbSinkHelperArray );
- il.Emit( OpCodes.Ldloc, ltSinkHelper );
- il.Emit( OpCodes.Castclass, typeof(Object) );
- il.Emit( OpCodes.Callvirt, ArrayListAddMethod );
- il.Emit( OpCodes.Pop );
-
- // Generate the following code:
- // } finally {
- il.BeginFinallyBlock();
-
- // Generate the following code:
- // if (lockTaken)
- // Monitor.Exit(this);
- Label skipExit = il.DefineLabel();
- il.Emit( OpCodes.Ldloc, ltLockTaken );
- il.Emit( OpCodes.Brfalse_S, skipExit );
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Call, MonitorExitMethod );
- il.MarkLabel(skipExit);
-
- // Generate the following code:
- // }
- il.EndExceptionBlock();
-
- // Generate the return opcode.
- il.Emit( OpCodes.Ret );
-
- return Meth;
- }
-
- private MethodBuilder DefineRemoveEventMethod( TypeBuilder OutputTypeBuilder, MethodInfo SrcItfMethod, Type SinkHelperClass, FieldBuilder fbSinkHelperArray, FieldBuilder fbEventCP )
- {
- Type[] aParamTypes;
-
- // Find the delegate on the event sink helper.
- FieldInfo DelegateField = SinkHelperClass.GetField( "m_" + SrcItfMethod.Name + "Delegate" );
- Debug.Assert(DelegateField != null, "Unable to find the field m_" + SrcItfMethod.Name + "Delegate on the sink helper");
-
- // Find the cookie on the event sink helper.
- FieldInfo CookieField = SinkHelperClass.GetField( "m_dwCookie" );
- Debug.Assert(CookieField != null, "Unable to find the field m_dwCookie on the sink helper");
-
- // Retrieve the ArrayList.RemoveAt method.
- aParamTypes = new Type[1];
- aParamTypes[0] = typeof(Int32);
- MethodInfo ArrayListRemoveMethod = typeof(ArrayList).GetMethod( "RemoveAt", aParamTypes, null );
- Debug.Assert(ArrayListRemoveMethod != null, "Unable to find the method ArrayList.RemoveAt()");
-
- // Retrieve the ArrayList.Item property get method.
- PropertyInfo ArrayListItemProperty = typeof(ArrayList).GetProperty( "Item" );
- Debug.Assert(ArrayListItemProperty != null, "Unable to find the property ArrayList.Item");
- MethodInfo ArrayListItemGetMethod = ArrayListItemProperty.GetGetMethod();
- Debug.Assert(ArrayListItemGetMethod != null, "Unable to find the get method for property ArrayList.Item");
-
- // Retrieve the ArrayList.Count property get method.
- PropertyInfo ArrayListSizeProperty = typeof(ArrayList).GetProperty( "Count" );
- Debug.Assert(ArrayListSizeProperty != null, "Unable to find the property ArrayList.Count");
- MethodInfo ArrayListSizeGetMethod = ArrayListSizeProperty.GetGetMethod();
- Debug.Assert(ArrayListSizeGetMethod != null, "Unable to find the get method for property ArrayList.Count");
-
- // Retrieve the Delegate.Equals() method.
- aParamTypes[0] = typeof(Delegate);
- MethodInfo DelegateEqualsMethod = typeof(Delegate).GetMethod( "Equals", aParamTypes, null );
- Debug.Assert(DelegateEqualsMethod != null, "Unable to find the method Delegate.Equlals()");
-
- // Retrieve the Monitor.Enter() method.
- MethodInfo MonitorEnterMethod = typeof(Monitor).GetMethod("Enter", MonitorEnterParamTypes, null);
- Debug.Assert(MonitorEnterMethod != null, "Unable to find the method Monitor.Enter()");
-
- // Retrieve the Monitor.Exit() method.
- aParamTypes[0] = typeof(Object);
- MethodInfo MonitorExitMethod = typeof(Monitor).GetMethod( "Exit", aParamTypes, null );
- Debug.Assert(MonitorExitMethod != null, "Unable to find the method Monitor.Exit()");
-
- // Retrieve the ConnectionPoint.Unadvise() method.
- MethodInfo CPUnadviseMethod = typeof(IConnectionPoint).GetMethod( "Unadvise" );
- Debug.Assert(CPUnadviseMethod != null, "Unable to find the method ConnectionPoint.Unadvise()");
-
- // Retrieve the Marshal.ReleaseComObject() method.
- MethodInfo ReleaseComObjectMethod = typeof(Marshal).GetMethod( "ReleaseComObject" );
- Debug.Assert(ReleaseComObjectMethod != null, "Unable to find the method Marshal.ReleaseComObject()");
-
- // Define the remove_XXX method.
- Type[] parameterTypes;
- parameterTypes = new Type[1];
- parameterTypes[0] = DelegateField.FieldType;
- MethodBuilder Meth = OutputTypeBuilder.DefineMethod(
- "remove_" + SrcItfMethod.Name,
- MethodAttributes.Public | MethodAttributes.Virtual,
- null,
- parameterTypes );
-
- ILGenerator il = Meth.GetILGenerator();
-
- // Declare the local variables.
- LocalBuilder ltNumSinkHelpers = il.DeclareLocal( typeof(Int32) );
- LocalBuilder ltSinkHelperCounter = il.DeclareLocal( typeof(Int32) );
- LocalBuilder ltCurrSinkHelper = il.DeclareLocal( SinkHelperClass );
- LocalBuilder ltLockTaken = il.DeclareLocal(typeof(bool));
-
- // Generate the labels for the for loop.
- Label ForBeginLabel = il.DefineLabel();
- Label ForEndLabel = il.DefineLabel();
- Label FalseIfLabel = il.DefineLabel();
- Label MonitorExitLabel = il.DefineLabel();
-
- // Generate the following code:
- // try {
- il.BeginExceptionBlock();
-
- // Generate the following code:
- // Monitor.Enter(this, ref lockTaken);
- il.Emit(OpCodes.Ldarg, (short)0);
- il.Emit(OpCodes.Ldloca_S, ltLockTaken);
- il.Emit(OpCodes.Call, MonitorEnterMethod);
-
- // Generate the following code:
- // if ( m_aIFooEventsHelpers == null ) goto ForEndLabel;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbSinkHelperArray );
- il.Emit( OpCodes.Brfalse, ForEndLabel );
-
- // Generate the following code:
- // int NumEventHelpers = m_aIFooEventsHelpers.Count;
- // int cEventHelpers = 0;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbSinkHelperArray );
- il.Emit( OpCodes.Callvirt, ArrayListSizeGetMethod );
- il.Emit( OpCodes.Stloc, ltNumSinkHelpers );
- il.Emit( OpCodes.Ldc_I4, 0 );
- il.Emit( OpCodes.Stloc, ltSinkHelperCounter );
-
- // Generate the following code:
- // if ( 0 >= NumEventHelpers ) goto ForEndLabel;
- il.Emit( OpCodes.Ldc_I4, 0 );
- il.Emit( OpCodes.Ldloc, ltNumSinkHelpers );
- il.Emit( OpCodes.Bge, ForEndLabel );
-
- // Mark this as the beginning of the for loop's body.
- il.MarkLabel( ForBeginLabel );
-
- // Generate the following code:
- // CurrentHelper = (IFooEvents_SinkHelper)m_aIFooEventsHelpers.Get( cEventHelpers );
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbSinkHelperArray );
- il.Emit( OpCodes.Ldloc, ltSinkHelperCounter );
- il.Emit( OpCodes.Callvirt, ArrayListItemGetMethod );
- il.Emit( OpCodes.Castclass, SinkHelperClass );
- il.Emit( OpCodes.Stloc, ltCurrSinkHelper );
-
- // Generate the following code:
- // if ( CurrentHelper.m_FooDelegate )
- il.Emit( OpCodes.Ldloc, ltCurrSinkHelper );
- il.Emit( OpCodes.Ldfld, DelegateField );
- il.Emit( OpCodes.Ldnull );
- il.Emit( OpCodes.Beq, FalseIfLabel );
-
- // Generate the following code:
- // if ( CurrentHelper.m_FooDelegate.Equals( d ) )
- il.Emit( OpCodes.Ldloc, ltCurrSinkHelper );
- il.Emit( OpCodes.Ldfld, DelegateField );
- il.Emit( OpCodes.Ldarg, (short)1 );
- il.Emit( OpCodes.Castclass, typeof(Object) );
- il.Emit( OpCodes.Callvirt, DelegateEqualsMethod );
- il.Emit( OpCodes.Ldc_I4, 0xff );
- il.Emit( OpCodes.And );
- il.Emit( OpCodes.Ldc_I4, 0 );
- il.Emit( OpCodes.Beq, FalseIfLabel );
-
- // Generate the following code:
- // m_aIFooEventsHelpers.RemoveAt( cEventHelpers );
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbSinkHelperArray );
- il.Emit( OpCodes.Ldloc, ltSinkHelperCounter );
- il.Emit( OpCodes.Callvirt, ArrayListRemoveMethod );
-
- // Generate the following code:
- // m_IFooEventsCP.Unadvise( CurrentHelper.m_dwCookie );
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbEventCP );
- il.Emit( OpCodes.Ldloc, ltCurrSinkHelper );
- il.Emit( OpCodes.Ldfld, CookieField );
- il.Emit( OpCodes.Callvirt, CPUnadviseMethod );
-
- // Generate the following code:
- // if ( NumEventHelpers > 1) break;
- il.Emit( OpCodes.Ldloc, ltNumSinkHelpers );
- il.Emit( OpCodes.Ldc_I4, 1 );
- il.Emit( OpCodes.Bgt, ForEndLabel );
-
- // Generate the following code:
- // Marshal.ReleaseComObject(m_IFooEventsCP);
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbEventCP );
- il.Emit( OpCodes.Call, ReleaseComObjectMethod );
- il.Emit( OpCodes.Pop );
-
- // Generate the following code:
- // m_IFooEventsCP = null;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldnull );
- il.Emit( OpCodes.Stfld, fbEventCP );
-
- // Generate the following code:
- // m_aIFooEventsHelpers = null;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldnull );
- il.Emit( OpCodes.Stfld, fbSinkHelperArray );
-
- // Generate the following code:
- // break;
- il.Emit( OpCodes.Br, ForEndLabel );
-
- // Mark this as the label to jump to when the if statement is false.
- il.MarkLabel( FalseIfLabel );
-
- // Generate the following code:
- // cEventHelpers++;
- il.Emit( OpCodes.Ldloc, ltSinkHelperCounter );
- il.Emit( OpCodes.Ldc_I4, 1 );
- il.Emit( OpCodes.Add );
- il.Emit( OpCodes.Stloc, ltSinkHelperCounter );
-
- // Generate the following code:
- // if ( cEventHelpers < NumEventHelpers ) goto ForBeginLabel;
- il.Emit( OpCodes.Ldloc, ltSinkHelperCounter );
- il.Emit( OpCodes.Ldloc, ltNumSinkHelpers );
- il.Emit( OpCodes.Blt, ForBeginLabel );
-
- // Mark this as the end of the for loop's body.
- il.MarkLabel( ForEndLabel );
-
- // Generate the following code:
- // } finally {
- il.BeginFinallyBlock();
-
- // Generate the following code:
- // if (lockTaken)
- // Monitor.Exit(this);
- Label skipExit = il.DefineLabel();
- il.Emit(OpCodes.Ldloc, ltLockTaken);
- il.Emit(OpCodes.Brfalse_S, skipExit);
- il.Emit(OpCodes.Ldarg, (short)0);
- il.Emit(OpCodes.Call, MonitorExitMethod);
- il.MarkLabel(skipExit);
-
- // Generate the following code:
- // }
- il.EndExceptionBlock();
-
- // Generate the return opcode.
- il.Emit( OpCodes.Ret );
-
- return Meth;
- }
-
- private MethodBuilder DefineInitSrcItfMethod( TypeBuilder OutputTypeBuilder, Type SourceInterface, FieldBuilder fbSinkHelperArray, FieldBuilder fbEventCP, FieldBuilder fbCPC )
- {
- // Retrieve the constructor info for the array list's default constructor.
- ConstructorInfo DefaultArrayListCons = typeof(ArrayList).GetConstructor(EventProviderWriter.DefaultLookup, null, Array.Empty<Type>(), null );
- Debug.Assert(DefaultArrayListCons != null, "Unable to find the constructor for class ArrayList");
-
- // Temp byte array for Guid
- ubyte[] rgByteGuid = new ubyte[16];
-
- // Retrieve the constructor info for the Guid constructor.
- Type[] aParamTypes = new Type[1];
- aParamTypes[0] = typeof(Byte[]);
- ConstructorInfo ByteArrayGUIDCons = typeof(Guid).GetConstructor(EventProviderWriter.DefaultLookup, null, aParamTypes, null );
- Debug.Assert(ByteArrayGUIDCons != null, "Unable to find the constructor for GUID that accepts a string as argument");
-
- // Retrieve the IConnectionPointContainer.FindConnectionPoint() method.
- MethodInfo CPCFindCPMethod = typeof(IConnectionPointContainer).GetMethod( "FindConnectionPoint" );
- Debug.Assert(CPCFindCPMethod != null, "Unable to find the method ConnectionPointContainer.FindConnectionPoint()");
-
- // Define the Init method itself.
- MethodBuilder Meth = OutputTypeBuilder.DefineMethod(
- "Init",
- MethodAttributes.Private,
- null,
- null );
-
- ILGenerator il = Meth.GetILGenerator();
-
- // Declare the local variables.
- LocalBuilder ltCP = il.DeclareLocal( typeof(IConnectionPoint) );
- LocalBuilder ltEvGuid = il.DeclareLocal( typeof(Guid) );
- LocalBuilder ltByteArrayGuid = il.DeclareLocal( typeof(Byte[]) );
-
- // Generate the following code:
- // IConnectionPoint CP = NULL;
- il.Emit( OpCodes.Ldnull );
- il.Emit( OpCodes.Stloc, ltCP );
-
- // Get unsigned byte array for the GUID of the event interface.
- rgByteGuid = SourceInterface.GUID.ToByteArray();
-
- // Generate the following code:
- // ubyte rgByteArray[] = new ubyte [16];
- il.Emit( OpCodes.Ldc_I4, 0x10 );
- il.Emit( OpCodes.Newarr, typeof(Byte) );
- il.Emit( OpCodes.Stloc, ltByteArrayGuid );
-
- // Generate the following code:
- // rgByteArray[i] = rgByteGuid[i];
- for (int i = 0; i < 16; i++ )
- {
- il.Emit( OpCodes.Ldloc, ltByteArrayGuid );
- il.Emit( OpCodes.Ldc_I4, i );
- il.Emit( OpCodes.Ldc_I4, (int) (rgByteGuid[i]) );
- il.Emit( OpCodes.Stelem_I1);
- }
-
- // Generate the following code:
- // EventItfGuid = Guid( ubyte b[] );
- il.Emit( OpCodes.Ldloca, ltEvGuid );
- il.Emit( OpCodes.Ldloc, ltByteArrayGuid );
- il.Emit( OpCodes.Call, ByteArrayGUIDCons );
-
- // Generate the following code:
- // m_ConnectionPointContainer.FindConnectionPoint( EventItfGuid, CP );
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbCPC );
- il.Emit( OpCodes.Ldloca, ltEvGuid );
- il.Emit( OpCodes.Ldloca, ltCP );
- il.Emit( OpCodes.Callvirt, CPCFindCPMethod );
-
- // Generate the following code:
- // m_ConnectionPoint = (IConnectionPoint)CP;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldloc, ltCP );
- il.Emit( OpCodes.Castclass, typeof(IConnectionPoint) );
- il.Emit( OpCodes.Stfld, fbEventCP );
-
- // Generate the following code:
- // m_aEventSinkHelpers = new ArrayList;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Newobj, DefaultArrayListCons );
- il.Emit( OpCodes.Stfld, fbSinkHelperArray );
-
- // Generate the return opcode.
- il.Emit( OpCodes.Ret );
-
- return Meth;
- }
-
- private void DefineConstructor( TypeBuilder OutputTypeBuilder, FieldBuilder fbCPC )
- {
- // Retrieve the constructor info for the base class's constructor.
- ConstructorInfo DefaultBaseClsCons = typeof(Object).GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, Array.Empty<Type>(), null );
- Debug.Assert(DefaultBaseClsCons != null, "Unable to find the object's public default constructor");
-
- // Define the default constructor.
- MethodAttributes ctorAttributes = MethodAttributes.SpecialName | (DefaultBaseClsCons.Attributes & MethodAttributes.MemberAccessMask);
- MethodBuilder Cons = OutputTypeBuilder.DefineMethod(
- ".ctor",
- ctorAttributes,
- null,
- new Type[]{typeof(Object)} );
-
- ILGenerator il = Cons.GetILGenerator();
-
- // Generate the call to the base class constructor.
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Call, DefaultBaseClsCons );
-
- // Generate the following code:
- // m_ConnectionPointContainer = (IConnectionPointContainer)EventSource;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldarg, (short)1 );
- il.Emit( OpCodes.Castclass, typeof(IConnectionPointContainer) );
- il.Emit( OpCodes.Stfld, fbCPC );
-
- // Generate the return opcode.
- il.Emit( OpCodes.Ret );
- }
-
- private MethodBuilder DefineFinalizeMethod( TypeBuilder OutputTypeBuilder, Type SinkHelperClass, FieldBuilder fbSinkHelper, FieldBuilder fbEventCP )
- {
- // Find the cookie on the event sink helper.
- FieldInfo CookieField = SinkHelperClass.GetField( "m_dwCookie" );
- Debug.Assert(CookieField != null, "Unable to find the field m_dwCookie on the sink helper");
-
- // Retrieve the ArrayList.Item property get method.
- PropertyInfo ArrayListItemProperty = typeof(ArrayList).GetProperty( "Item" );
- Debug.Assert(ArrayListItemProperty != null, "Unable to find the property ArrayList.Item");
- MethodInfo ArrayListItemGetMethod = ArrayListItemProperty.GetGetMethod();
- Debug.Assert(ArrayListItemGetMethod != null, "Unable to find the get method for property ArrayList.Item");
-
- // Retrieve the ArrayList.Count property get method.
- PropertyInfo ArrayListSizeProperty = typeof(ArrayList).GetProperty( "Count" );
- Debug.Assert(ArrayListSizeProperty != null, "Unable to find the property ArrayList.Count");
- MethodInfo ArrayListSizeGetMethod = ArrayListSizeProperty.GetGetMethod();
- Debug.Assert(ArrayListSizeGetMethod != null, "Unable to find the get method for property ArrayList.Count");
-
- // Retrieve the ConnectionPoint.Unadvise() method.
- MethodInfo CPUnadviseMethod = typeof(IConnectionPoint).GetMethod( "Unadvise" );
- Debug.Assert(CPUnadviseMethod != null, "Unable to find the method ConnectionPoint.Unadvise()");
-
- // Retrieve the Marshal.ReleaseComObject() method.
- MethodInfo ReleaseComObjectMethod = typeof(Marshal).GetMethod( "ReleaseComObject" );
- Debug.Assert(ReleaseComObjectMethod != null, "Unable to find the method Marshal.ReleaseComObject()");
-
- // Retrieve the Monitor.Enter() method.
- MethodInfo MonitorEnterMethod = typeof(Monitor).GetMethod("Enter", MonitorEnterParamTypes, null);
- Debug.Assert(MonitorEnterMethod != null, "Unable to find the method Monitor.Enter()");
-
- // Retrieve the Monitor.Exit() method.
- Type[] aParamTypes = new Type[1];
- aParamTypes[0] = typeof(Object);
- MethodInfo MonitorExitMethod = typeof(Monitor).GetMethod( "Exit", aParamTypes, null );
- Debug.Assert(MonitorExitMethod != null, "Unable to find the method Monitor.Exit()");
-
- // Define the Finalize method itself.
- MethodBuilder Meth = OutputTypeBuilder.DefineMethod( "Finalize", MethodAttributes.Public | MethodAttributes.Virtual, null, null );
-
- ILGenerator il = Meth.GetILGenerator();
-
- // Declare the local variables.
- LocalBuilder ltNumSinkHelpers = il.DeclareLocal( typeof(Int32) );
- LocalBuilder ltSinkHelperCounter = il.DeclareLocal( typeof(Int32) );
- LocalBuilder ltCurrSinkHelper = il.DeclareLocal( SinkHelperClass );
- LocalBuilder ltLockTaken = il.DeclareLocal(typeof(bool));
-
- // Generate the following code:
- // try {
- il.BeginExceptionBlock();
-
- // Generate the following code:
- // Monitor.Enter(this, ref lockTaken);
- il.Emit(OpCodes.Ldarg, (short)0);
- il.Emit(OpCodes.Ldloca_S, ltLockTaken);
- il.Emit(OpCodes.Call, MonitorEnterMethod);
-
- // Generate the labels.
- Label ForBeginLabel = il.DefineLabel();
- Label ReleaseComObjectLabel = il.DefineLabel();
- Label AfterReleaseComObjectLabel = il.DefineLabel();
-
- // Generate the following code:
- // if ( m_IFooEventsCP == null ) goto AfterReleaseComObjectLabel;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbEventCP );
- il.Emit( OpCodes.Brfalse, AfterReleaseComObjectLabel );
-
- // Generate the following code:
- // int NumEventHelpers = m_aIFooEventsHelpers.Count;
- // int cEventHelpers = 0;
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbSinkHelper );
- il.Emit( OpCodes.Callvirt, ArrayListSizeGetMethod );
- il.Emit( OpCodes.Stloc, ltNumSinkHelpers );
- il.Emit( OpCodes.Ldc_I4, 0 );
- il.Emit( OpCodes.Stloc, ltSinkHelperCounter );
-
- // Generate the following code:
- // if ( 0 >= NumEventHelpers ) goto ReleaseComObjectLabel;
- il.Emit( OpCodes.Ldc_I4, 0 );
- il.Emit( OpCodes.Ldloc, ltNumSinkHelpers );
- il.Emit( OpCodes.Bge, ReleaseComObjectLabel );
-
- // Mark this as the beginning of the for loop's body.
- il.MarkLabel( ForBeginLabel );
-
- // Generate the following code:
- // CurrentHelper = (IFooEvents_SinkHelper)m_aIFooEventsHelpers.Get( cEventHelpers );
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbSinkHelper );
- il.Emit( OpCodes.Ldloc, ltSinkHelperCounter );
- il.Emit( OpCodes.Callvirt, ArrayListItemGetMethod );
- il.Emit( OpCodes.Castclass, SinkHelperClass );
- il.Emit( OpCodes.Stloc, ltCurrSinkHelper );
-
- // Generate the following code:
- // m_IFooEventsCP.Unadvise( CurrentHelper.m_dwCookie );
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbEventCP );
- il.Emit( OpCodes.Ldloc, ltCurrSinkHelper );
- il.Emit( OpCodes.Ldfld, CookieField );
- il.Emit( OpCodes.Callvirt, CPUnadviseMethod );
-
- // Generate the following code:
- // cEventHelpers++;
- il.Emit( OpCodes.Ldloc, ltSinkHelperCounter );
- il.Emit( OpCodes.Ldc_I4, 1 );
- il.Emit( OpCodes.Add );
- il.Emit( OpCodes.Stloc, ltSinkHelperCounter );
-
- // Generate the following code:
- // if ( cEventHelpers < NumEventHelpers ) goto ForBeginLabel;
- il.Emit( OpCodes.Ldloc, ltSinkHelperCounter );
- il.Emit( OpCodes.Ldloc, ltNumSinkHelpers );
- il.Emit( OpCodes.Blt, ForBeginLabel );
-
- // Mark this as the end of the for loop's body.
- il.MarkLabel( ReleaseComObjectLabel );
-
- // Generate the following code:
- // Marshal.ReleaseComObject(m_IFooEventsCP);
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbEventCP );
- il.Emit( OpCodes.Call, ReleaseComObjectMethod );
- il.Emit( OpCodes.Pop );
-
- // Mark this as the end of the for loop's body.
- il.MarkLabel( AfterReleaseComObjectLabel );
-
- // Generate the following code:
- // } catch {
- il.BeginCatchBlock(typeof(System.Exception));
- il.Emit( OpCodes.Pop );
-
- // Generate the following code:
- // } finally {
- il.BeginFinallyBlock();
-
- // Generate the following code:
- // if (lockTaken)
- // Monitor.Exit(this);
- Label skipExit = il.DefineLabel();
- il.Emit(OpCodes.Ldloc, ltLockTaken);
- il.Emit(OpCodes.Brfalse_S, skipExit);
- il.Emit(OpCodes.Ldarg, (short)0);
- il.Emit(OpCodes.Call, MonitorExitMethod);
- il.MarkLabel(skipExit);
-
- // Generate the following code:
- // }
- il.EndExceptionBlock();
-
- // Generate the return opcode.
- il.Emit( OpCodes.Ret );
-
- return Meth;
- }
-
- private void DefineDisposeMethod( TypeBuilder OutputTypeBuilder, MethodBuilder FinalizeMethod )
- {
- // Retrieve the method info for GC.SuppressFinalize().
- MethodInfo SuppressFinalizeMethod = typeof(GC).GetMethod("SuppressFinalize");
- Debug.Assert(SuppressFinalizeMethod != null, "Unable to find the GC.SuppressFinalize");
-
- // Define the Finalize method itself.
- MethodBuilder Meth = OutputTypeBuilder.DefineMethod( "Dispose", MethodAttributes.Public | MethodAttributes.Virtual, null, null );
-
- ILGenerator il = Meth.GetILGenerator();
-
- // Generate the following code:
- // Finalize()
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Callvirt, FinalizeMethod );
-
- // Generate the following code:
- // GC.SuppressFinalize()
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Call, SuppressFinalizeMethod );
-
- // Generate the return opcode.
- il.Emit( OpCodes.Ret );
- }
-
- private ModuleBuilder m_OutputModule;
- private String m_strDestTypeName;
- private Type m_EventItfType;
- private Type m_SrcItfType;
- private Type m_SinkHelperType;
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventSinkHelperWriter.cs b/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventSinkHelperWriter.cs
deleted file mode 100644
index 862419cc98..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventSinkHelperWriter.cs
+++ /dev/null
@@ -1,298 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices.TCEAdapterGen {
- using System.Runtime.InteropServices;
- using System;
- using System.Reflection;
- using System.Reflection.Emit;
- using System.Collections;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- internal class EventSinkHelperWriter
- {
- public static readonly String GeneratedTypeNamePostfix = "_SinkHelper";
-
- public EventSinkHelperWriter( ModuleBuilder OutputModule, Type InputType, Type EventItfType )
- {
- m_InputType = InputType;
- m_OutputModule = OutputModule;
- m_EventItfType = EventItfType;
- }
-
- public Type Perform()
- {
- // Create the output Type.
- Type[] aInterfaces = new Type[1];
- aInterfaces[0] = m_InputType;
- String strFullName = null;
- String strNameSpace = NameSpaceExtractor.ExtractNameSpace( m_EventItfType.FullName );
-
- if (strNameSpace != "")
- strFullName = strNameSpace + ".";
-
- strFullName += m_InputType.Name + GeneratedTypeNamePostfix;
- TypeBuilder OutputTypeBuilder = TCEAdapterGenerator.DefineUniqueType(
- strFullName,
- TypeAttributes.Sealed | TypeAttributes.Public,
- null,
- aInterfaces,
- m_OutputModule
- );
- // Hide the _SinkProvider interface
- TCEAdapterGenerator.SetHiddenAttribute(OutputTypeBuilder);
-
- // Set the class interface to none.
- TCEAdapterGenerator.SetClassInterfaceTypeToNone(OutputTypeBuilder);
-
- // Retrieve the property methods on the input interface and give them a dummy implementation.
- MethodInfo[] pMethods = TCEAdapterGenerator.GetPropertyMethods(m_InputType);
- foreach (MethodInfo method in pMethods)
- {
- DefineBlankMethod(OutputTypeBuilder, method);
- }
-
- // Retrieve the non-property methods on the input interface.
- MethodInfo[] aMethods = TCEAdapterGenerator.GetNonPropertyMethods(m_InputType);
-
- // Allocate an array to contain the delegate fields.
- FieldBuilder[] afbDelegates = new FieldBuilder[aMethods.Length];
- // Process all the methods on the input interface.
- for ( int cMethods = 0; cMethods < aMethods.Length; cMethods++ )
- {
- if ( m_InputType == aMethods[cMethods].DeclaringType )
- {
- // Retrieve the delegate type from the add_XXX method.
- MethodInfo AddMeth = m_EventItfType.GetMethod( "add_" + aMethods[cMethods].Name );
- ParameterInfo[] aParams = AddMeth.GetParameters();
- Debug.Assert(aParams.Length == 1, "All event interface methods must take a single delegate derived type and have a void return type");
- Type DelegateCls = aParams[0].ParameterType;
-
- // Define the delegate instance field.
- afbDelegates[cMethods] = OutputTypeBuilder.DefineField(
- "m_" + aMethods[cMethods].Name + "Delegate",
- DelegateCls,
- FieldAttributes.Public
- );
-
- // Define the event method itself.
- DefineEventMethod( OutputTypeBuilder, aMethods[cMethods], DelegateCls, afbDelegates[cMethods] );
- }
- }
-
- // Create the cookie field.
- FieldBuilder fbCookie = OutputTypeBuilder.DefineField(
- "m_dwCookie",
- typeof(Int32),
- FieldAttributes.Public
- );
-
- // Define the constructor.
- DefineConstructor( OutputTypeBuilder, fbCookie, afbDelegates );
-
- return OutputTypeBuilder.CreateType();
- }
-
- private void DefineBlankMethod(TypeBuilder OutputTypeBuilder, MethodInfo Method)
- {
- ParameterInfo[] PIs = Method.GetParameters();
- Type[] parameters = new Type[PIs.Length];
- for (int i=0; i < PIs.Length; i++)
- {
- parameters[i] = PIs[i].ParameterType;
- }
-
- MethodBuilder Meth = OutputTypeBuilder.DefineMethod(Method.Name,
- Method.Attributes & ~MethodAttributes.Abstract,
- Method.CallingConvention,
- Method.ReturnType,
- parameters);
-
- ILGenerator il = Meth.GetILGenerator();
-
- AddReturn(Method.ReturnType, il, Meth);
-
- il.Emit(OpCodes.Ret);
- }
-
- private void DefineEventMethod( TypeBuilder OutputTypeBuilder, MethodInfo Method, Type DelegateCls, FieldBuilder fbDelegate )
- {
- // Retrieve the method info for the invoke method on the delegate.
- MethodInfo DelegateInvokeMethod = DelegateCls.GetMethod( "Invoke" );
- Debug.Assert(DelegateInvokeMethod != null, "Unable to find method Delegate.Invoke()");
-
- // Retrieve the return type.
- Type ReturnType = Method.ReturnType;
-
- // Define the actual event method.
- ParameterInfo[] paramInfos = Method.GetParameters();
- Type[] parameterTypes;
- if (paramInfos != null)
- {
- parameterTypes = new Type[paramInfos.Length];
- for (int i = 0; i < paramInfos.Length; i++)
- {
- parameterTypes[i] = paramInfos[i].ParameterType;
- }
- }
- else
- parameterTypes = null;
-
- MethodAttributes attr = MethodAttributes.Public | MethodAttributes.Virtual;
- MethodBuilder Meth = OutputTypeBuilder.DefineMethod( Method.Name,
- attr,
- CallingConventions.Standard,
- ReturnType,
- parameterTypes);
-
- // We explicitly do not specify parameter name and attributes since this Type
- // is not meant to be exposed to the user. It is only used internally to do the
- // connection point to TCE mapping.
-
- ILGenerator il = Meth.GetILGenerator();
-
- // Create the exit branch.
- Label ExitLabel = il.DefineLabel();
-
- // Generate the code that verifies that the delegate is not null.
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbDelegate );
- il.Emit( OpCodes.Brfalse, ExitLabel );
-
- // The delegate is not NULL so we need to invoke it.
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldfld, fbDelegate );
-
- // Generate the code to load the arguments before we call invoke.
- ParameterInfo[] aParams = Method.GetParameters();
- for ( int cParams = 0; cParams < aParams.Length; cParams++ )
- {
- il.Emit( OpCodes.Ldarg, (short)(cParams + 1) );
- }
-
- // Generate a tail call to invoke. This will cause the callvirt to return
- // directly to the caller of the current method instead of actually coming
- // back to the current method and returning. This will cause the value returned
- // from the call to the COM server to be returned to the caller of this method.
-
- il.Emit( OpCodes.Callvirt, DelegateInvokeMethod );
- il.Emit( OpCodes.Ret );
-
- // This is the label that will be jumped to if no delegate is present.
- il.MarkLabel( ExitLabel );
-
- AddReturn(ReturnType, il, Meth);
-
- il.Emit( OpCodes.Ret );
-
- }
-
- private void AddReturn(Type ReturnType, ILGenerator il, MethodBuilder Meth)
- {
- // Place a dummy return value on the stack before we return.
- if ( ReturnType == typeof(void) )
- {
- // There is nothing to place on the stack.
- }
- else if ( ReturnType.IsPrimitive )
- {
- switch (System.Type.GetTypeCode(ReturnType))
- {
- case TypeCode.Boolean:
- case TypeCode.Char:
- case TypeCode.Byte:
- case TypeCode.SByte:
- case TypeCode.Int16:
- case TypeCode.UInt16:
- case TypeCode.Int32:
- case TypeCode.UInt32:
- il.Emit( OpCodes.Ldc_I4_0 );
- break;
-
- case TypeCode.Int64:
- case TypeCode.UInt64:
- il.Emit( OpCodes.Ldc_I4_0 );
- il.Emit( OpCodes.Conv_I8 );
- break;
-
- case TypeCode.Single:
- il.Emit( OpCodes.Ldc_R4, 0 );
- break;
-
- case TypeCode.Double:
- il.Emit( OpCodes.Ldc_R4, 0 );
- il.Emit( OpCodes.Conv_R8 );
- break;
-
- default:
- // "TypeCode" does not include IntPtr, so special case it.
- if ( ReturnType == typeof(IntPtr) )
- il.Emit( OpCodes.Ldc_I4_0 );
- else
- Debug.Assert(false, "Unexpected type for Primitive type.");
- break;
- }
- }
- else if ( ReturnType.IsValueType )
- {
- // Allocate stack space for the return value type. Zero-init.
- Meth.InitLocals = true;
- LocalBuilder ltRetVal = il.DeclareLocal( ReturnType );
-
- // Load the value class on the stack.
- il.Emit( OpCodes.Ldloc_S, ltRetVal );
-
- }
- else
- {
- // The return type is a normal type.
- il.Emit( OpCodes.Ldnull );
- }
- }
-
- private void DefineConstructor( TypeBuilder OutputTypeBuilder, FieldBuilder fbCookie, FieldBuilder[] afbDelegates )
- {
- // Retrieve the constructor info for the base classe's constructor.
- ConstructorInfo DefaultBaseClsCons = typeof(Object).GetConstructor(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public, null, Array.Empty<Type>(), null );
- Debug.Assert(DefaultBaseClsCons != null, "Unable to find the constructor for class " + m_InputType.Name);
-
- // Define the default constructor.
- MethodBuilder Cons = OutputTypeBuilder.DefineMethod( ".ctor",
- MethodAttributes.Assembly | MethodAttributes.SpecialName,
- CallingConventions.Standard,
- null,
- null);
-
- ILGenerator il = Cons.GetILGenerator();
-
- // Generate the code to call the constructor of the base class.
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Call, DefaultBaseClsCons );
-
- // Generate the code to set the cookie field to 0.
- il.Emit( OpCodes.Ldarg, (short)0 );
- il.Emit( OpCodes.Ldc_I4, 0 );
- il.Emit( OpCodes.Stfld, fbCookie );
-
- // Generate the code to set all the delegates to NULL.
- for ( int cDelegates = 0; cDelegates < afbDelegates.Length; cDelegates++ )
- {
- if (afbDelegates[cDelegates] != null)
- {
- il.Emit( OpCodes.Ldarg,(short)0 );
- il.Emit( OpCodes.Ldnull );
- il.Emit( OpCodes.Stfld, afbDelegates[cDelegates] );
- }
- }
-
- // Emit the return opcode.
- il.Emit( OpCodes.Ret );
-
- }
-
- private Type m_InputType;
- private Type m_EventItfType;
- private ModuleBuilder m_OutputModule;
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/NameSpaceExtractor.cs b/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/NameSpaceExtractor.cs
deleted file mode 100644
index 8018ad4c66..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/NameSpaceExtractor.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices.TCEAdapterGen {
-
- using System;
- internal static class NameSpaceExtractor
- {
- private static char NameSpaceSeperator = '.';
-
- public static String ExtractNameSpace(String FullyQualifiedTypeName)
- {
- int TypeNameStartPos = FullyQualifiedTypeName.LastIndexOf(NameSpaceSeperator);
- if (TypeNameStartPos == -1)
- return "";
- else
- return FullyQualifiedTypeName.Substring(0, TypeNameStartPos);
- }
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/TCEAdapterGenerator.cs b/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/TCEAdapterGenerator.cs
deleted file mode 100644
index c6e4415246..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/TCEAdapterGenerator.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices.TCEAdapterGen {
- using System.Runtime.InteropServices;
- using System;
- using System.Reflection;
- using System.Reflection.Emit;
- using System.Collections;
- using System.Threading;
-
- internal class TCEAdapterGenerator
- {
- public void Process(ModuleBuilder ModBldr, ArrayList EventItfList)
- {
- // Store the input/output module.
- m_Module = ModBldr;
-
- // Generate the TCE adapters for all the event sources.
- int NumEvItfs = EventItfList.Count;
- for ( int cEventItfs = 0; cEventItfs < NumEvItfs; cEventItfs++ )
- {
- // Retrieve the event interface info.
- EventItfInfo CurrEventItf = (EventItfInfo)EventItfList[cEventItfs];
-
- // Retrieve the information from the event interface info.
- Type EventItfType = CurrEventItf.GetEventItfType();
- Type SrcItfType = CurrEventItf.GetSrcItfType();
- String EventProviderName = CurrEventItf.GetEventProviderName();
-
- // Generate the sink interface helper.
- Type SinkHelperType = new EventSinkHelperWriter( m_Module, SrcItfType, EventItfType ).Perform();
-
- // Generate the event provider.
- new EventProviderWriter( m_Module, EventProviderName, EventItfType, SrcItfType, SinkHelperType ).Perform();
- }
- }
-
- internal static void SetClassInterfaceTypeToNone(TypeBuilder tb)
- {
- // Create the ClassInterface(ClassInterfaceType.None) CA builder if we haven't created it yet.
- if (s_NoClassItfCABuilder == null)
- {
- Type []aConsParams = new Type[1];
- aConsParams[0] = typeof(ClassInterfaceType);
- ConstructorInfo Cons = typeof(ClassInterfaceAttribute).GetConstructor(aConsParams);
-
- Object[] aArgs = new Object[1];
- aArgs[0] = ClassInterfaceType.None;
- s_NoClassItfCABuilder = new CustomAttributeBuilder(Cons, aArgs);
- }
-
- // Set the class interface type to none.
- tb.SetCustomAttribute(s_NoClassItfCABuilder);
- }
-
- internal static TypeBuilder DefineUniqueType(String strInitFullName, TypeAttributes attrs, Type BaseType, Type[] aInterfaceTypes, ModuleBuilder mb)
- {
- String strFullName = strInitFullName;
- int PostFix = 2;
-
- // Find the first unique name for the type.
- for (; mb.GetType(strFullName) != null; strFullName = strInitFullName + "_" + PostFix, PostFix++);
-
- // Define a type with the determined unique name.
- return mb.DefineType(strFullName, attrs, BaseType, aInterfaceTypes);
- }
-
- internal static void SetHiddenAttribute(TypeBuilder tb)
- {
- if (s_HiddenCABuilder == null)
- {
- // Hide the type from Object Browsers
- Type []aConsParams = new Type[1];
- aConsParams[0] = typeof(TypeLibTypeFlags);
- ConstructorInfo Cons = typeof(TypeLibTypeAttribute).GetConstructor(aConsParams);
-
- Object []aArgs = new Object[1];
- aArgs[0] = TypeLibTypeFlags.FHidden;
- s_HiddenCABuilder = new CustomAttributeBuilder(Cons, aArgs);
- }
-
- tb.SetCustomAttribute(s_HiddenCABuilder);
- }
-
- internal static MethodInfo[] GetNonPropertyMethods(Type type)
- {
- MethodInfo[] aMethods = type.GetMethods();
- ArrayList methods = new ArrayList(aMethods);
-
- PropertyInfo[] props = type.GetProperties();
-
- foreach(PropertyInfo prop in props)
- {
- MethodInfo[] accessors = prop.GetAccessors();
- foreach (MethodInfo accessor in accessors)
- {
- for (int i=0; i < methods.Count; i++)
- {
- if ((MethodInfo)methods[i] == accessor)
- methods.RemoveAt(i);
- }
- }
- }
-
- MethodInfo[] retMethods = new MethodInfo[methods.Count];
- methods.CopyTo(retMethods);
-
- return retMethods;
- }
-
- internal static MethodInfo[] GetPropertyMethods(Type type)
- {
- MethodInfo[] aMethods = type.GetMethods();
- ArrayList methods = new ArrayList();
-
- PropertyInfo[] props = type.GetProperties();
-
- foreach(PropertyInfo prop in props)
- {
- MethodInfo[] accessors = prop.GetAccessors();
- foreach (MethodInfo accessor in accessors)
- {
- methods.Add(accessor);
- }
- }
-
- MethodInfo[] retMethods = new MethodInfo[methods.Count];
- methods.CopyTo(retMethods);
-
- return retMethods;
- }
-
-
- private ModuleBuilder m_Module = null;
- private Hashtable m_SrcItfToSrcItfInfoMap = new Hashtable();
- private static volatile CustomAttributeBuilder s_NoClassItfCABuilder = null;
- private static volatile CustomAttributeBuilder s_HiddenCABuilder = null;
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIBindCtx.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIBindCtx.cs
deleted file mode 100644
index 8c6e1bcd64..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIBindCtx.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIBindCtx interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices {
-
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.BIND_OPTS instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential)]
-
- public struct BIND_OPTS
- {
- public int cbStruct;
- public int grfFlags;
- public int grfMode;
- public int dwTickCountDeadline;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IBindCtx instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("0000000e-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIBindCtx
- {
- void RegisterObjectBound([MarshalAs(UnmanagedType.Interface)] Object punk);
- void RevokeObjectBound([MarshalAs(UnmanagedType.Interface)] Object punk);
- void ReleaseBoundObjects();
- void SetBindOptions([In()] ref BIND_OPTS pbindopts);
- void GetBindOptions(ref BIND_OPTS pbindopts);
- void GetRunningObjectTable(out UCOMIRunningObjectTable pprot);
- void RegisterObjectParam([MarshalAs(UnmanagedType.LPWStr)] String pszKey, [MarshalAs(UnmanagedType.Interface)] Object punk);
- void GetObjectParam([MarshalAs(UnmanagedType.LPWStr)] String pszKey, [MarshalAs(UnmanagedType.Interface)] out Object ppunk);
- void EnumObjectParam(out UCOMIEnumString ppenum);
- void RevokeObjectParam([MarshalAs(UnmanagedType.LPWStr)] String pszKey);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPoint.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPoint.cs
deleted file mode 100644
index b12e1f7a8c..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPoint.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIConnectionPoint interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IConnectionPoint instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("B196B286-BAB4-101A-B69C-00AA00341D07")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIConnectionPoint
- {
- void GetConnectionInterface(out Guid pIID);
- void GetConnectionPointContainer(out UCOMIConnectionPointContainer ppCPC);
- void Advise([MarshalAs(UnmanagedType.Interface)] Object pUnkSink, out int pdwCookie);
- void Unadvise(int dwCookie);
- void EnumConnections(out UCOMIEnumConnections ppEnum);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPointContainer.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPointContainer.cs
deleted file mode 100644
index 212d643e03..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPointContainer.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIConnectionPointContainer interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IConnectionPointContainer instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("B196B284-BAB4-101A-B69C-00AA00341D07")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIConnectionPointContainer
- {
- void EnumConnectionPoints(out UCOMIEnumConnectionPoints ppEnum);
- void FindConnectionPoint(ref Guid riid, out UCOMIConnectionPoint ppCP);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnectionPoints.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnectionPoints.cs
deleted file mode 100644
index 5180018088..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnectionPoints.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIEnumConnectionPoints interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("B196B285-BAB4-101A-B69C-00AA00341D07")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIEnumConnectionPoints
- {
- [PreserveSig]
- int Next(int celt, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0), Out] UCOMIConnectionPoint[] rgelt, out int pceltFetched);
- [PreserveSig]
- int Skip(int celt);
- [PreserveSig]
- int Reset();
- void Clone(out UCOMIEnumConnectionPoints ppenum);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnections.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnections.cs
deleted file mode 100644
index 87273b34f7..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnections.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIEnumConnections interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.CONNECTDATA instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
-
- public struct CONNECTDATA
- {
- [MarshalAs(UnmanagedType.Interface)]
- public Object pUnk;
- public int dwCookie;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IEnumConnections instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("B196B287-BAB4-101A-B69C-00AA00341D07")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIEnumConnections
- {
- [PreserveSig]
- int Next(int celt, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0), Out] CONNECTDATA[] rgelt, out int pceltFetched);
- [PreserveSig]
- int Skip(int celt);
- [PreserveSig]
- void Reset();
- void Clone(out UCOMIEnumConnections ppenum);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumMoniker.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumMoniker.cs
deleted file mode 100644
index 40787fcd5c..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumMoniker.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIEnumMoniker interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
- using DWORD = System.UInt32;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IEnumMoniker instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("00000102-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIEnumMoniker
- {
- [PreserveSig]
- int Next(int celt, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0), Out] UCOMIMoniker[] rgelt, out int pceltFetched);
- [PreserveSig]
- int Skip(int celt);
- [PreserveSig]
- int Reset();
- void Clone(out UCOMIEnumMoniker ppenum);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumString.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumString.cs
deleted file mode 100644
index 9d0552a0df..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumString.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIEnumString interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IEnumString instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("00000101-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIEnumString
- {
- [PreserveSig]
- int Next(int celt, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 0), Out] String[] rgelt, out int pceltFetched);
- [PreserveSig]
- int Skip(int celt);
- [PreserveSig]
- int Reset();
- void Clone(out UCOMIEnumString ppenum);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumVARIANT.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumVARIANT.cs
deleted file mode 100644
index 0d8585ffdb..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumVARIANT.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIEnumVARIANT interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IEnumVARIANT instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("00020404-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIEnumVARIANT
- {
- [PreserveSig]
- int Next(int celt, int rgvar, int pceltFetched);
-
- [PreserveSig]
- int Skip(int celt);
-
- [PreserveSig]
- int Reset();
-
- void Clone(int ppenum);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerable.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerable.cs
deleted file mode 100644
index 81e0133923..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerable.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*==========================================================================
-**
-** Interface: UCOMIEnumerable
-**
-**
-** Purpose:
-** This interface is redefined here since the original IEnumerable interface
-** has all its methods marked as ecall's since it is a managed standard
-** interface. This interface is used from within the runtime to make a call
-** on the COM server directly when it implements the IEnumerable interface.
-**
-**
-==========================================================================*/
-namespace System.Runtime.InteropServices
-{
- using System;
- using System.Collections;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IEnumerable instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
- internal interface UCOMIEnumerable
- {
- [DispId(-4)]
- IEnumerator GetEnumerator();
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerator.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerator.cs
deleted file mode 100644
index af886c46ac..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerator.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*==========================================================================
-**
-** Interface: UCOMIEnumerator
-**
-**
-** Purpose:
-** This interface is redefined here since the original IEnumerator interface
-** has all its methods marked as ecall's since it is a managed standard
-** interface. This interface is used from within the runtime to make a call
-** on the COM server directly when it implements the IEnumerator interface.
-**
-**
-==========================================================================*/
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IEnumerator instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
- internal interface UCOMIEnumerator
- {
- bool MoveNext();
- Object Current {
- get;
- }
- void Reset();
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIExpando.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIExpando.cs
deleted file mode 100644
index 2f85c14bc6..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIExpando.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*==========================================================================
-**
-** Interface: UCOMIExpando
-**
-**
-** Purpose:
-** This interface is redefined here since the original IExpando interface
-** has all its methods marked as ecall's since it is a managed standard
-** interface. This interface is used from within the runtime to make a call
-** on the COM server directly when it implements the IExpando interface.
-**
-**
-==========================================================================*/
-namespace System.Runtime.InteropServices
-{
-
- using System;
- using System.Reflection;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IExpando instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("AFBF15E6-C37C-11d2-B88E-00A0C9B471B8")]
- internal interface UCOMIExpando : UCOMIReflect
- {
- FieldInfo AddField(String name);
- PropertyInfo AddProperty(String name);
- MethodInfo AddMethod(String name, Delegate method);
- void RemoveMember(MemberInfo m);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIMoniker.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIMoniker.cs
deleted file mode 100644
index bd5b6f4916..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIMoniker.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIMoniker interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.FILETIME instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential)]
-
- public struct FILETIME
- {
- public int dwLowDateTime;
- public int dwHighDateTime;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IMoniker instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("0000000f-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIMoniker
- {
- // IPersist portion
- void GetClassID(out Guid pClassID);
-
- // IPersistStream portion
- [PreserveSig]
- int IsDirty();
- void Load(UCOMIStream pStm);
- void Save(UCOMIStream pStm, [MarshalAs(UnmanagedType.Bool)] bool fClearDirty);
- void GetSizeMax(out Int64 pcbSize);
-
- // IMoniker portion
- void BindToObject(UCOMIBindCtx pbc, UCOMIMoniker pmkToLeft, [In()] ref Guid riidResult, [MarshalAs(UnmanagedType.Interface)] out Object ppvResult);
- void BindToStorage(UCOMIBindCtx pbc, UCOMIMoniker pmkToLeft, [In()] ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out Object ppvObj);
- void Reduce(UCOMIBindCtx pbc, int dwReduceHowFar, ref UCOMIMoniker ppmkToLeft, out UCOMIMoniker ppmkReduced);
- void ComposeWith(UCOMIMoniker pmkRight, [MarshalAs(UnmanagedType.Bool)] bool fOnlyIfNotGeneric, out UCOMIMoniker ppmkComposite);
- void Enum([MarshalAs(UnmanagedType.Bool)] bool fForward, out UCOMIEnumMoniker ppenumMoniker);
- void IsEqual(UCOMIMoniker pmkOtherMoniker);
- void Hash(out int pdwHash);
- void IsRunning(UCOMIBindCtx pbc, UCOMIMoniker pmkToLeft, UCOMIMoniker pmkNewlyRunning);
- void GetTimeOfLastChange(UCOMIBindCtx pbc, UCOMIMoniker pmkToLeft, out FILETIME pFileTime);
- void Inverse(out UCOMIMoniker ppmk);
- void CommonPrefixWith(UCOMIMoniker pmkOther, out UCOMIMoniker ppmkPrefix);
- void RelativePathTo(UCOMIMoniker pmkOther, out UCOMIMoniker ppmkRelPath);
- void GetDisplayName(UCOMIBindCtx pbc, UCOMIMoniker pmkToLeft, [MarshalAs(UnmanagedType.LPWStr)] out String ppszDisplayName);
- void ParseDisplayName(UCOMIBindCtx pbc, UCOMIMoniker pmkToLeft, [MarshalAs(UnmanagedType.LPWStr)] String pszDisplayName, out int pchEaten, out UCOMIMoniker ppmkOut);
- void IsSystemMoniker(out int pdwMksys);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIPersistFile.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIPersistFile.cs
deleted file mode 100644
index ac465e771f..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIPersistFile.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIPersistFile interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices {
-
- using System;
- using DWORD = System.UInt32;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IPersistFile instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("0000010b-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIPersistFile
- {
- // IPersist portion
- void GetClassID(out Guid pClassID);
-
- // IPersistFile portion
- [PreserveSig]
- int IsDirty();
- void Load([MarshalAs(UnmanagedType.LPWStr)] String pszFileName, int dwMode);
- void Save([MarshalAs(UnmanagedType.LPWStr)] String pszFileName, [MarshalAs(UnmanagedType.Bool)] bool fRemember);
- void SaveCompleted([MarshalAs(UnmanagedType.LPWStr)] String pszFileName);
- void GetCurFile([MarshalAs(UnmanagedType.LPWStr)] out String ppszFileName);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIReflect.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIReflect.cs
deleted file mode 100644
index d6cdd6828e..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIReflect.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*==========================================================================
-**
-** Interface: UCOMIReflect
-**
-**
-** Purpose:
-** This interface is redefined here since the original IReflect interface
-** has all its methods marked as ecall's since it is a managed standard
-** interface. This interface is used from within the runtime to make a call
-** on the COM server directly when it implements the IReflect interface.
-**
-**
-==========================================================================*/
-namespace System.Runtime.InteropServices
-{
- using System;
- using System.Reflection;
- using CultureInfo = System.Globalization.CultureInfo;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IReflect instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("AFBF15E5-C37C-11d2-B88E-00A0C9B471B8")]
- internal interface UCOMIReflect
- {
- MethodInfo GetMethod(String name,BindingFlags bindingAttr,Binder binder,
- Type[] types,ParameterModifier[] modifiers);
-
- MethodInfo GetMethod(String name,BindingFlags bindingAttr);
-
- MethodInfo[] GetMethods(
- BindingFlags bindingAttr);
-
- FieldInfo GetField(
- String name,
- BindingFlags bindingAttr);
-
- FieldInfo[] GetFields(
- BindingFlags bindingAttr);
-
- PropertyInfo GetProperty(
- String name,
- BindingFlags bindingAttr);
-
- PropertyInfo GetProperty(
- String name,
- BindingFlags bindingAttr,
- Binder binder,
- Type returnType,
- Type[] types,
- ParameterModifier[] modifiers);
-
- PropertyInfo[] GetProperties(
- BindingFlags bindingAttr);
-
- MemberInfo[] GetMember(
- String name,
- BindingFlags bindingAttr);
-
- MemberInfo[] GetMembers(
- BindingFlags bindingAttr);
-
- Object InvokeMember(
- String name,
- BindingFlags invokeAttr,
- Binder binder,
- Object target,
- Object[] args,
- ParameterModifier[] modifiers,
- CultureInfo culture,
- String[] namedParameters);
-
- Type UnderlyingSystemType {
- get;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIRunningObjectTable.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIRunningObjectTable.cs
deleted file mode 100644
index 8088c0417f..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIRunningObjectTable.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIRunningObjectTable interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IRunningObjectTable instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("00000010-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIRunningObjectTable
- {
- void Register(int grfFlags, [MarshalAs(UnmanagedType.Interface)] Object punkObject, UCOMIMoniker pmkObjectName, out int pdwRegister);
- void Revoke(int dwRegister);
- void IsRunning(UCOMIMoniker pmkObjectName);
- void GetObject(UCOMIMoniker pmkObjectName, [MarshalAs(UnmanagedType.Interface)] out Object ppunkObject);
- void NoteChangeTime(int dwRegister, ref FILETIME pfiletime);
- void GetTimeOfLastChange(UCOMIMoniker pmkObjectName, out FILETIME pfiletime);
- void EnumRunning(out UCOMIEnumMoniker ppenumMoniker);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIStream.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMIStream.cs
deleted file mode 100644
index dc2cb53d97..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMIStream.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMIStream interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.STATSTG instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
-
- public struct STATSTG
- {
- public String pwcsName;
- public int type;
- public Int64 cbSize;
- public FILETIME mtime;
- public FILETIME ctime;
- public FILETIME atime;
- public int grfMode;
- public int grfLocksSupported;
- public Guid clsid;
- public int grfStateBits;
- public int reserved;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IStream instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("0000000c-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMIStream
- {
- // ISequentialStream portion
- void Read([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1), Out] Byte[] pv, int cb,IntPtr pcbRead);
- void Write([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] Byte[] pv, int cb, IntPtr pcbWritten);
-
- // IStream portion
- void Seek(Int64 dlibMove, int dwOrigin, IntPtr plibNewPosition);
- void SetSize(Int64 libNewSize);
- void CopyTo(UCOMIStream pstm, Int64 cb, IntPtr pcbRead, IntPtr pcbWritten);
- void Commit(int grfCommitFlags);
- void Revert();
- void LockRegion(Int64 libOffset, Int64 cb, int dwLockType);
- void UnlockRegion(Int64 libOffset, Int64 cb, int dwLockType);
- void Stat(out STATSTG pstatstg, int grfStatFlag);
- void Clone(out UCOMIStream ppstm);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeComp.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeComp.cs
deleted file mode 100644
index 0ef1e549a5..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeComp.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMITypeComp interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.DESCKIND instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Serializable]
- public enum DESCKIND
- {
- DESCKIND_NONE = 0,
- DESCKIND_FUNCDESC = DESCKIND_NONE + 1,
- DESCKIND_VARDESC = DESCKIND_FUNCDESC + 1,
- DESCKIND_TYPECOMP = DESCKIND_VARDESC + 1,
- DESCKIND_IMPLICITAPPOBJ = DESCKIND_TYPECOMP + 1,
- DESCKIND_MAX = DESCKIND_IMPLICITAPPOBJ + 1
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.BINDPTR instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Explicit, CharSet=CharSet.Unicode)]
-
- public struct BINDPTR
- {
- [FieldOffset(0)]
- public IntPtr lpfuncdesc;
- [FieldOffset(0)]
- public IntPtr lpvardesc;
- [FieldOffset(0)]
- public IntPtr lptcomp;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.ITypeComp instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("00020403-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMITypeComp
- {
- void Bind([MarshalAs(UnmanagedType.LPWStr)] String szName, int lHashVal, Int16 wFlags, out UCOMITypeInfo ppTInfo, out DESCKIND pDescKind, out BINDPTR pBindPtr);
- void BindType([MarshalAs(UnmanagedType.LPWStr)] String szName, int lHashVal, out UCOMITypeInfo ppTInfo, out UCOMITypeComp ppTComp);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeInfo.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeInfo.cs
deleted file mode 100644
index e26964f5a3..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeInfo.cs
+++ /dev/null
@@ -1,330 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMITypeInfo interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.TYPEKIND instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Serializable]
- public enum TYPEKIND
- {
- TKIND_ENUM = 0,
- TKIND_RECORD = TKIND_ENUM + 1,
- TKIND_MODULE = TKIND_RECORD + 1,
- TKIND_INTERFACE = TKIND_MODULE + 1,
- TKIND_DISPATCH = TKIND_INTERFACE + 1,
- TKIND_COCLASS = TKIND_DISPATCH + 1,
- TKIND_ALIAS = TKIND_COCLASS + 1,
- TKIND_UNION = TKIND_ALIAS + 1,
- TKIND_MAX = TKIND_UNION + 1
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.TYPEFLAGS instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
-[Serializable]
-[Flags()]
- public enum TYPEFLAGS : short
- {
- TYPEFLAG_FAPPOBJECT = 0x1,
- TYPEFLAG_FCANCREATE = 0x2,
- TYPEFLAG_FLICENSED = 0x4,
- TYPEFLAG_FPREDECLID = 0x8,
- TYPEFLAG_FHIDDEN = 0x10,
- TYPEFLAG_FCONTROL = 0x20,
- TYPEFLAG_FDUAL = 0x40,
- TYPEFLAG_FNONEXTENSIBLE = 0x80,
- TYPEFLAG_FOLEAUTOMATION = 0x100,
- TYPEFLAG_FRESTRICTED = 0x200,
- TYPEFLAG_FAGGREGATABLE = 0x400,
- TYPEFLAG_FREPLACEABLE = 0x800,
- TYPEFLAG_FDISPATCHABLE = 0x1000,
- TYPEFLAG_FREVERSEBIND = 0x2000,
- TYPEFLAG_FPROXY = 0x4000
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IMPLTYPEFLAGS instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
-[Serializable]
-[Flags()]
- public enum IMPLTYPEFLAGS
- {
- IMPLTYPEFLAG_FDEFAULT = 0x1,
- IMPLTYPEFLAG_FSOURCE = 0x2,
- IMPLTYPEFLAG_FRESTRICTED = 0x4,
- IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8,
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.TYPEATTR instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- public struct TYPEATTR
- {
- // Constant used with the memid fields.
- public const int MEMBER_ID_NIL = unchecked((int)0xFFFFFFFF);
-
- // Actual fields of the TypeAttr struct.
- public Guid guid;
- public Int32 lcid;
- public Int32 dwReserved;
- public Int32 memidConstructor;
- public Int32 memidDestructor;
- public IntPtr lpstrSchema;
- public Int32 cbSizeInstance;
- public TYPEKIND typekind;
- public Int16 cFuncs;
- public Int16 cVars;
- public Int16 cImplTypes;
- public Int16 cbSizeVft;
- public Int16 cbAlignment;
- public TYPEFLAGS wTypeFlags;
- public Int16 wMajorVerNum;
- public Int16 wMinorVerNum;
- public TYPEDESC tdescAlias;
- public IDLDESC idldescType;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.FUNCDESC instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential)]
- public struct FUNCDESC
- {
- public int memid; //MEMBERID memid;
- public IntPtr lprgscode; // /* [size_is(cScodes)] */ SCODE RPC_FAR *lprgscode;
- public IntPtr lprgelemdescParam; // /* [size_is(cParams)] */ ELEMDESC __RPC_FAR *lprgelemdescParam;
- public FUNCKIND funckind; //FUNCKIND funckind;
- public INVOKEKIND invkind; //INVOKEKIND invkind;
- public CALLCONV callconv; //CALLCONV callconv;
- public Int16 cParams; //short cParams;
- public Int16 cParamsOpt; //short cParamsOpt;
- public Int16 oVft; //short oVft;
- public Int16 cScodes; //short cScodes;
- public ELEMDESC elemdescFunc; //ELEMDESC elemdescFunc;
- public Int16 wFuncFlags; //WORD wFuncFlags;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IDLFLAG instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
-[Serializable]
-[Flags()]
- public enum IDLFLAG : short
- {
- IDLFLAG_NONE = PARAMFLAG.PARAMFLAG_NONE,
- IDLFLAG_FIN = PARAMFLAG.PARAMFLAG_FIN,
- IDLFLAG_FOUT = PARAMFLAG.PARAMFLAG_FOUT,
- IDLFLAG_FLCID = PARAMFLAG.PARAMFLAG_FLCID,
- IDLFLAG_FRETVAL = PARAMFLAG.PARAMFLAG_FRETVAL
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.IDLDESC instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- public struct IDLDESC
- {
- public int dwReserved;
- public IDLFLAG wIDLFlags;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.PARAMFLAG instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
-[Serializable]
-[Flags()]
- public enum PARAMFLAG :short
- {
- PARAMFLAG_NONE = 0,
- PARAMFLAG_FIN = 0x1,
- PARAMFLAG_FOUT = 0x2,
- PARAMFLAG_FLCID = 0x4,
- PARAMFLAG_FRETVAL = 0x8,
- PARAMFLAG_FOPT = 0x10,
- PARAMFLAG_FHASDEFAULT = 0x20,
- PARAMFLAG_FHASCUSTDATA = 0x40
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.PARAMDESC instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- public struct PARAMDESC
- {
- public IntPtr lpVarValue;
- public PARAMFLAG wParamFlags;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.TYPEDESC instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- public struct TYPEDESC
- {
- public IntPtr lpValue;
- public Int16 vt;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.ELEMDESC instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- public struct ELEMDESC
- {
- public TYPEDESC tdesc;
-
- [System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit, CharSet=CharSet.Unicode)]
- [ComVisible(false)]
- public struct DESCUNION
- {
- [FieldOffset(0)]
- public IDLDESC idldesc;
- [FieldOffset(0)]
- public PARAMDESC paramdesc;
- };
- public DESCUNION desc;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.VARDESC instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- public struct VARDESC
- {
- public int memid;
- public String lpstrSchema;
-
- [System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit, CharSet=CharSet.Unicode)]
- [ComVisible(false)]
- public struct DESCUNION
- {
- [FieldOffset(0)]
- public int oInst;
- [FieldOffset(0)]
- public IntPtr lpvarValue;
- };
-
- public ELEMDESC elemdescVar;
- public short wVarFlags;
- public VarEnum varkind;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.DISPPARAMS instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- public struct DISPPARAMS
- {
- public IntPtr rgvarg;
- public IntPtr rgdispidNamedArgs;
- public int cArgs;
- public int cNamedArgs;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.EXCEPINFO instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- public struct EXCEPINFO
- {
- public Int16 wCode;
- public Int16 wReserved;
- [MarshalAs(UnmanagedType.BStr)] public String bstrSource;
- [MarshalAs(UnmanagedType.BStr)] public String bstrDescription;
- [MarshalAs(UnmanagedType.BStr)] public String bstrHelpFile;
- public int dwHelpContext;
- public IntPtr pvReserved;
- public IntPtr pfnDeferredFillIn;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.FUNCKIND instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Serializable]
- public enum FUNCKIND : int
- {
- FUNC_VIRTUAL = 0,
- FUNC_PUREVIRTUAL = 1,
- FUNC_NONVIRTUAL = 2,
- FUNC_STATIC = 3,
- FUNC_DISPATCH = 4
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.INVOKEKIND instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Serializable]
- public enum INVOKEKIND : int
- {
- INVOKE_FUNC = 0x1,
- INVOKE_PROPERTYGET = 0x2,
- INVOKE_PROPERTYPUT = 0x4,
- INVOKE_PROPERTYPUTREF = 0x8
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.CALLCONV instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Serializable]
- public enum CALLCONV : int
- {
- CC_CDECL =1,
- CC_MSCPASCAL=2,
- CC_PASCAL =CC_MSCPASCAL,
- CC_MACPASCAL=3,
- CC_STDCALL =4,
- CC_RESERVED =5,
- CC_SYSCALL =6,
- CC_MPWCDECL =7,
- CC_MPWPASCAL=8,
- CC_MAX =9
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.FUNCFLAGS instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
-[Serializable]
-[Flags()]
- public enum FUNCFLAGS : short
- {
- FUNCFLAG_FRESTRICTED= 0x1,
- FUNCFLAG_FSOURCE = 0x2,
- FUNCFLAG_FBINDABLE = 0x4,
- FUNCFLAG_FREQUESTEDIT = 0x8,
- FUNCFLAG_FDISPLAYBIND = 0x10,
- FUNCFLAG_FDEFAULTBIND = 0x20,
- FUNCFLAG_FHIDDEN = 0x40,
- FUNCFLAG_FUSESGETLASTERROR= 0x80,
- FUNCFLAG_FDEFAULTCOLLELEM= 0x100,
- FUNCFLAG_FUIDEFAULT = 0x200,
- FUNCFLAG_FNONBROWSABLE = 0x400,
- FUNCFLAG_FREPLACEABLE = 0x800,
- FUNCFLAG_FIMMEDIATEBIND = 0x1000
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.VARFLAGS instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
-[Serializable]
-[Flags()]
- public enum VARFLAGS : short
- {
- VARFLAG_FREADONLY =0x1,
- VARFLAG_FSOURCE =0x2,
- VARFLAG_FBINDABLE =0x4,
- VARFLAG_FREQUESTEDIT =0x8,
- VARFLAG_FDISPLAYBIND =0x10,
- VARFLAG_FDEFAULTBIND =0x20,
- VARFLAG_FHIDDEN =0x40,
- VARFLAG_FRESTRICTED =0x80,
- VARFLAG_FDEFAULTCOLLELEM =0x100,
- VARFLAG_FUIDEFAULT =0x200,
- VARFLAG_FNONBROWSABLE =0x400,
- VARFLAG_FREPLACEABLE =0x800,
- VARFLAG_FIMMEDIATEBIND =0x1000
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.ITypeInfo instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("00020401-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMITypeInfo
- {
- void GetTypeAttr(out IntPtr ppTypeAttr);
- void GetTypeComp(out UCOMITypeComp ppTComp);
- void GetFuncDesc(int index, out IntPtr ppFuncDesc);
- void GetVarDesc(int index, out IntPtr ppVarDesc);
- void GetNames(int memid, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2), Out] String[] rgBstrNames, int cMaxNames, out int pcNames);
- void GetRefTypeOfImplType(int index, out int href);
- void GetImplTypeFlags(int index, out int pImplTypeFlags);
- void GetIDsOfNames([MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 1), In] String[] rgszNames, int cNames, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1), Out] int[] pMemId);
- void Invoke([MarshalAs(UnmanagedType.IUnknown)] Object pvInstance, int memid, Int16 wFlags, ref DISPPARAMS pDispParams, out Object pVarResult, out EXCEPINFO pExcepInfo, out int puArgErr);
- void GetDocumentation(int index, out String strName, out String strDocString, out int dwHelpContext, out String strHelpFile);
- void GetDllEntry(int memid, INVOKEKIND invKind, out String pBstrDllName, out String pBstrName, out Int16 pwOrdinal);
- void GetRefTypeInfo(int hRef, out UCOMITypeInfo ppTI);
- void AddressOfMember(int memid, INVOKEKIND invKind, out IntPtr ppv);
- void CreateInstance([MarshalAs(UnmanagedType.IUnknown)] Object pUnkOuter, ref Guid riid, [MarshalAs(UnmanagedType.IUnknown), Out] out Object ppvObj);
- void GetMops(int memid, out String pBstrMops);
- void GetContainingTypeLib(out UCOMITypeLib ppTLB, out int pIndex);
- void ReleaseTypeAttr(IntPtr pTypeAttr);
- void ReleaseFuncDesc(IntPtr pFuncDesc);
- void ReleaseVarDesc(IntPtr pVarDesc);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeLib.cs b/src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeLib.cs
deleted file mode 100644
index c8b63deff6..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeLib.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: UCOMITypeLib interface definition.
-**
-**
-=============================================================================*/
-
-namespace System.Runtime.InteropServices
-{
- using System;
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.SYSKIND instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Serializable]
- public enum SYSKIND
- {
- SYS_WIN16 = 0,
- SYS_WIN32 = SYS_WIN16 + 1,
- SYS_MAC = SYS_WIN32 + 1
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.LIBFLAGS instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
-[Serializable]
-[Flags()]
- public enum LIBFLAGS : short
- {
- LIBFLAG_FRESTRICTED = 0x1,
- LIBFLAG_FCONTROL = 0x2,
- LIBFLAG_FHIDDEN = 0x4,
- LIBFLAG_FHASDISKIMAGE = 0x8
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.TYPELIBATTR instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- [Serializable]
- public struct TYPELIBATTR
- {
- public Guid guid;
- public int lcid;
- public SYSKIND syskind;
- public Int16 wMajorVerNum;
- public Int16 wMinorVerNum;
- public LIBFLAGS wLibFlags;
- }
-
- [Obsolete("Use System.Runtime.InteropServices.ComTypes.ITypeLib instead. http://go.microsoft.com/fwlink/?linkid=14202", false)]
- [Guid("00020402-0000-0000-C000-000000000046")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface UCOMITypeLib
- {
- [PreserveSig]
- int GetTypeInfoCount();
- void GetTypeInfo(int index, out UCOMITypeInfo ppTI);
- void GetTypeInfoType(int index, out TYPEKIND pTKind);
- void GetTypeInfoOfGuid(ref Guid guid, out UCOMITypeInfo ppTInfo);
- void GetLibAttr(out IntPtr ppTLibAttr);
- void GetTypeComp(out UCOMITypeComp ppTComp);
- void GetDocumentation(int index, out String strName, out String strDocString, out int dwHelpContext, out String strHelpFile);
- [return : MarshalAs(UnmanagedType.Bool)]
- bool IsName([MarshalAs(UnmanagedType.LPWStr)] String szNameBuf, int lHashVal);
- void FindName([MarshalAs(UnmanagedType.LPWStr)] String szNameBuf, int lHashVal, [MarshalAs(UnmanagedType.LPArray), Out] UCOMITypeInfo[] ppTInfo, [MarshalAs(UnmanagedType.LPArray), Out] int[] rgMemId, ref Int16 pcFound);
- [PreserveSig]
- void ReleaseTLibAttr(IntPtr pTLibAttr);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/UnknownWrapper.cs b/src/mscorlib/src/System/Runtime/InteropServices/UnknownWrapper.cs
index 69ef2dcc06..1f70108a02 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/UnknownWrapper.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/UnknownWrapper.cs
@@ -16,7 +16,6 @@ namespace System.Runtime.InteropServices {
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class UnknownWrapper
{
public UnknownWrapper(Object obj)
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/Variant.cs b/src/mscorlib/src/System/Runtime/InteropServices/Variant.cs
deleted file mode 100644
index c7bbb78ae6..0000000000
--- a/src/mscorlib/src/System/Runtime/InteropServices/Variant.cs
+++ /dev/null
@@ -1,658 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices {
- using System.Diagnostics;
-
- /// <summary>
- /// Variant is the basic COM type for late-binding. It can contain any other COM data type.
- /// This type definition precisely matches the unmanaged data layout so that the struct can be passed
- /// to and from COM calls.
- /// </summary>
- [StructLayout(LayoutKind.Explicit)]
- internal struct Variant {
-
-#if DEBUG
- static Variant() {
- // Variant size is the size of 4 pointers (16 bytes) on a 32-bit processor,
- // and 3 pointers (24 bytes) on a 64-bit processor.
- int variantSize = Marshal.SizeOf(typeof(Variant));
- if (IntPtr.Size == 4) {
- BCLDebug.Assert(variantSize == (4 * IntPtr.Size), "variant");
- } else {
- BCLDebug.Assert(IntPtr.Size == 8, "variant");
- BCLDebug.Assert(variantSize == (3 * IntPtr.Size), "variant");
- }
- }
-#endif
-
- // Most of the data types in the Variant are carried in _typeUnion
- [FieldOffset(0)] private TypeUnion _typeUnion;
-
- // Decimal is the largest data type and it needs to use the space that is normally unused in TypeUnion._wReserved1, etc.
- // Hence, it is declared to completely overlap with TypeUnion. A Decimal does not use the first two bytes, and so
- // TypeUnion._vt can still be used to encode the type.
- [FieldOffset(0)] private Decimal _decimal;
-
- [StructLayout(LayoutKind.Sequential)]
- private struct TypeUnion {
- internal ushort _vt;
- internal ushort _wReserved1;
- internal ushort _wReserved2;
- internal ushort _wReserved3;
-
- internal UnionTypes _unionTypes;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- private struct Record {
- private IntPtr _record;
- private IntPtr _recordInfo;
- }
-
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1049:TypesThatOwnNativeResourcesShouldBeDisposable")]
- [StructLayout(LayoutKind.Explicit)]
- private struct UnionTypes {
- #region Generated Variant union types
-
- // *** BEGIN GENERATED CODE ***
- // generated by function: gen_UnionTypes from: generate_comdispatch.py
-
- [FieldOffset(0)] internal SByte _i1;
- [FieldOffset(0)] internal Int16 _i2;
- [FieldOffset(0)] internal Int32 _i4;
- [FieldOffset(0)] internal Int64 _i8;
- [FieldOffset(0)] internal Byte _ui1;
- [FieldOffset(0)] internal UInt16 _ui2;
- [FieldOffset(0)] internal UInt32 _ui4;
- [FieldOffset(0)] internal UInt64 _ui8;
- [FieldOffset(0)] internal Int32 _int;
- [FieldOffset(0)] internal UInt32 _uint;
- [FieldOffset(0)] internal Int16 _bool;
- [FieldOffset(0)] internal Int32 _error;
- [FieldOffset(0)] internal Single _r4;
- [FieldOffset(0)] internal Double _r8;
- [FieldOffset(0)] internal Int64 _cy;
- [FieldOffset(0)] internal double _date;
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
- [FieldOffset(0)] internal IntPtr _bstr;
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
- [FieldOffset(0)] internal IntPtr _unknown;
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
- [FieldOffset(0)] internal IntPtr _dispatch;
-
- // *** END GENERATED CODE ***
-
- #endregion
-
- [FieldOffset(0)] internal IntPtr _pvarVal;
- [FieldOffset(0)] internal IntPtr _byref;
- [FieldOffset(0)] internal Record _record;
- }
-
- /// <summary>
- /// Primitive types are the basic COM types. It includes valuetypes like ints, but also reference types
- /// like BStrs. It does not include composite types like arrays and user-defined COM types (IUnknown/IDispatch).
- /// </summary>
- internal static bool IsPrimitiveType(VarEnum varEnum) {
- switch(varEnum) {
- #region Generated Variant IsPrimitiveType
-
- // *** BEGIN GENERATED CODE ***
- // generated by function: gen_IsPrimitiveType from: generate_comdispatch.py
-
- case VarEnum.VT_I1:
- case VarEnum.VT_I2:
- case VarEnum.VT_I4:
- case VarEnum.VT_I8:
- case VarEnum.VT_UI1:
- case VarEnum.VT_UI2:
- case VarEnum.VT_UI4:
- case VarEnum.VT_UI8:
- case VarEnum.VT_INT:
- case VarEnum.VT_UINT:
- case VarEnum.VT_BOOL:
- case VarEnum.VT_R4:
- case VarEnum.VT_R8:
- case VarEnum.VT_DECIMAL:
- case VarEnum.VT_DATE:
- case VarEnum.VT_BSTR:
-
- // *** END GENERATED CODE ***
-
- #endregion
- return true;
- }
-
- return false;
- }
-
- unsafe public void CopyFromIndirect(object value) {
-
- VarEnum vt = (VarEnum)(((int)this.VariantType) & ~((int)VarEnum.VT_BYREF));
-
- if (value == null) {
- if (vt == VarEnum.VT_DISPATCH || vt == VarEnum.VT_UNKNOWN || vt == VarEnum.VT_BSTR) {
- *(IntPtr*)this._typeUnion._unionTypes._byref = IntPtr.Zero;
- }
- return;
- }
-
- switch (vt) {
- case VarEnum.VT_I1:
- *(sbyte*)this._typeUnion._unionTypes._byref = (sbyte)value;
- break;
-
- case VarEnum.VT_UI1:
- *(byte*)this._typeUnion._unionTypes._byref = (byte)value;
- break;
-
- case VarEnum.VT_I2:
- *(short*)this._typeUnion._unionTypes._byref = (short)value;
- break;
-
- case VarEnum.VT_UI2:
- *(ushort*)this._typeUnion._unionTypes._byref = (ushort)value;
- break;
-
- case VarEnum.VT_BOOL:
- *(short*)this._typeUnion._unionTypes._byref = (bool)value ? (short)-1 : (short)0;
- break;
-
- case VarEnum.VT_I4:
- case VarEnum.VT_INT:
- *(int*)this._typeUnion._unionTypes._byref = (int)value;
- break;
-
- case VarEnum.VT_UI4:
- case VarEnum.VT_UINT:
- *(uint*)this._typeUnion._unionTypes._byref = (uint)value;
- break;
-
- case VarEnum.VT_ERROR:
- *(int*)this._typeUnion._unionTypes._byref = ((ErrorWrapper)value).ErrorCode;
- break;
-
- case VarEnum.VT_I8:
- *(Int64*)this._typeUnion._unionTypes._byref = (Int64)value;
- break;
-
- case VarEnum.VT_UI8:
- *(UInt64*)this._typeUnion._unionTypes._byref = (UInt64)value;
- break;
-
- case VarEnum.VT_R4:
- *(float*)this._typeUnion._unionTypes._byref = (float)value;
- break;
-
- case VarEnum.VT_R8:
- *(double*)this._typeUnion._unionTypes._byref = (double)value;
- break;
-
- case VarEnum.VT_DATE:
- *(double*)this._typeUnion._unionTypes._byref = ((DateTime)value).ToOADate();
- break;
-
- case VarEnum.VT_UNKNOWN:
- *(IntPtr*)this._typeUnion._unionTypes._byref = Marshal.GetIUnknownForObject(value);
- break;
-
- case VarEnum.VT_DISPATCH:
- *(IntPtr*)this._typeUnion._unionTypes._byref = Marshal.GetIDispatchForObject(value);
- break;
-
- case VarEnum.VT_BSTR:
- *(IntPtr*)this._typeUnion._unionTypes._byref = Marshal.StringToBSTR((string)value);
- break;
-
- case VarEnum.VT_CY:
- *(long*)this._typeUnion._unionTypes._byref = decimal.ToOACurrency((decimal)value);
- break;
-
- case VarEnum.VT_DECIMAL:
- *(decimal*)this._typeUnion._unionTypes._byref = (decimal)value;
- break;
-
- case VarEnum.VT_VARIANT:
- Marshal.GetNativeVariantForObject(value, this._typeUnion._unionTypes._byref);
- break;
-
- default:
- throw new ArgumentException("invalid argument type");
- }
- }
-
- /// <summary>
- /// Get the managed object representing the Variant.
- /// </summary>
- /// <returns></returns>
- public object ToObject() {
- // Check the simple case upfront
- if (IsEmpty) {
- return null;
- }
-
- switch (VariantType) {
- case VarEnum.VT_NULL: return DBNull.Value;
-
- #region Generated Variant ToObject
-
- // *** BEGIN GENERATED CODE ***
- // generated by function: gen_ToObject from: generate_comdispatch.py
-
- case VarEnum.VT_I1: return AsI1;
- case VarEnum.VT_I2: return AsI2;
- case VarEnum.VT_I4: return AsI4;
- case VarEnum.VT_I8: return AsI8;
- case VarEnum.VT_UI1: return AsUi1;
- case VarEnum.VT_UI2: return AsUi2;
- case VarEnum.VT_UI4: return AsUi4;
- case VarEnum.VT_UI8: return AsUi8;
- case VarEnum.VT_INT: return AsInt;
- case VarEnum.VT_UINT: return AsUint;
- case VarEnum.VT_BOOL: return AsBool;
- case VarEnum.VT_ERROR: return AsError;
- case VarEnum.VT_R4: return AsR4;
- case VarEnum.VT_R8: return AsR8;
- case VarEnum.VT_DECIMAL: return AsDecimal;
- case VarEnum.VT_CY: return AsCy;
- case VarEnum.VT_DATE: return AsDate;
- case VarEnum.VT_BSTR: return AsBstr;
- case VarEnum.VT_UNKNOWN: return AsUnknown;
- case VarEnum.VT_DISPATCH: return AsDispatch;
- // VarEnum.VT_VARIANT is handled by Marshal.GetObjectForNativeVariant below
-
- // *** END GENERATED CODE ***
-
- #endregion
-
- default:
- try {
- unsafe {
- fixed (void* pThis = &this) {
- return Marshal.GetObjectForNativeVariant((System.IntPtr)pThis);
- }
- }
- }
- catch (Exception ex) {
- throw new NotImplementedException("Variant.ToObject cannot handle" + VariantType, ex);
- }
- }
- }
-
- /// <summary>
- /// Release any unmanaged memory associated with the Variant
- /// </summary>
- /// <returns></returns>
- public void Clear() {
- // We do not need to call OLE32's VariantClear for primitive types or ByRefs
- // to safe ourselves the cost of interop transition.
- // ByRef indicates the memory is not owned by the VARIANT itself while
- // primitive types do not have any resources to free up.
- // Hence, only safearrays, BSTRs, interfaces and user types are
- // handled differently.
- VarEnum vt = VariantType;
- if ((vt & VarEnum.VT_BYREF) != 0) {
- VariantType = VarEnum.VT_EMPTY;
- } else if (
- ((vt & VarEnum.VT_ARRAY) != 0) ||
- ((vt) == VarEnum.VT_BSTR) ||
- ((vt) == VarEnum.VT_UNKNOWN) ||
- ((vt) == VarEnum.VT_DISPATCH) ||
- ((vt) == VarEnum.VT_VARIANT) ||
- ((vt) == VarEnum.VT_RECORD) ||
- ((vt) == VarEnum.VT_VARIANT)
- ) {
- unsafe {
- fixed (void* pThis = &this) {
- NativeMethods.VariantClear((IntPtr)pThis);
- }
- }
- BCLDebug.Assert(IsEmpty, "variant");
- } else {
- VariantType = VarEnum.VT_EMPTY;
- }
- }
-
- public VarEnum VariantType {
- get {
- return (VarEnum)_typeUnion._vt;
- }
- set {
- _typeUnion._vt = (ushort)value;
- }
- }
-
- internal bool IsEmpty {
- get {
- return _typeUnion._vt == ((ushort)VarEnum.VT_EMPTY);
- }
- }
-
- internal bool IsByRef {
- get {
- return (_typeUnion._vt & ((ushort)VarEnum.VT_BYREF)) != 0;
- }
- }
-
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly")]
- public void SetAsNULL() {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_NULL;
- }
-
- #region Generated Variant accessors
-
- // *** BEGIN GENERATED CODE ***
- // generated by function: gen_accessors from: generate_comdispatch.py
-
- // VT_I1
-
- public SByte AsI1 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_I1, "variant");
- return _typeUnion._unionTypes._i1;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_I1;
- _typeUnion._unionTypes._i1 = value;
- }
- }
-
- // VT_I2
-
- public Int16 AsI2 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_I2, "variant");
- return _typeUnion._unionTypes._i2;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_I2;
- _typeUnion._unionTypes._i2 = value;
- }
- }
-
- // VT_I4
-
- public Int32 AsI4 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_I4, "variant");
- return _typeUnion._unionTypes._i4;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_I4;
- _typeUnion._unionTypes._i4 = value;
- }
- }
-
- // VT_I8
-
- public Int64 AsI8 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_I8, "variant");
- return _typeUnion._unionTypes._i8;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_I8;
- _typeUnion._unionTypes._i8 = value;
- }
- }
-
- // VT_UI1
-
- public Byte AsUi1 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_UI1, "variant");
- return _typeUnion._unionTypes._ui1;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_UI1;
- _typeUnion._unionTypes._ui1 = value;
- }
- }
-
- // VT_UI2
-
- public UInt16 AsUi2 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_UI2, "variant");
- return _typeUnion._unionTypes._ui2;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_UI2;
- _typeUnion._unionTypes._ui2 = value;
- }
- }
-
- // VT_UI4
-
- public UInt32 AsUi4 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_UI4, "variant");
- return _typeUnion._unionTypes._ui4;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_UI4;
- _typeUnion._unionTypes._ui4 = value;
- }
- }
-
- // VT_UI8
-
- public UInt64 AsUi8 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_UI8, "variant");
- return _typeUnion._unionTypes._ui8;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_UI8;
- _typeUnion._unionTypes._ui8 = value;
- }
- }
-
- // VT_INT
-
- public Int32 AsInt {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_INT, "variant");
- return _typeUnion._unionTypes._int;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_INT;
- _typeUnion._unionTypes._int = value;
- }
- }
-
- // VT_UINT
-
- public UInt32 AsUint {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_UINT, "variant");
- return _typeUnion._unionTypes._uint;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_UINT;
- _typeUnion._unionTypes._uint = value;
- }
- }
-
- // VT_BOOL
-
- public bool AsBool {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_BOOL, "variant");
- return _typeUnion._unionTypes._bool != 0;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_BOOL;
- _typeUnion._unionTypes._bool = value ? (short)-1 : (short)0;
- }
- }
-
- // VT_ERROR
-
- public Int32 AsError {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_ERROR, "variant");
- return _typeUnion._unionTypes._error;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_ERROR;
- _typeUnion._unionTypes._error = value;
- }
- }
-
- // VT_R4
-
- public Single AsR4 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_R4, "variant");
- return _typeUnion._unionTypes._r4;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_R4;
- _typeUnion._unionTypes._r4 = value;
- }
- }
-
- // VT_R8
-
- public Double AsR8 {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_R8, "variant");
- return _typeUnion._unionTypes._r8;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_R8;
- _typeUnion._unionTypes._r8 = value;
- }
- }
-
- // VT_DECIMAL
-
- public Decimal AsDecimal {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_DECIMAL, "variant");
- // The first byte of Decimal is unused, but usually set to 0
- Variant v = this;
- v._typeUnion._vt = 0;
- return v._decimal;
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_DECIMAL;
- _decimal = value;
- // _vt overlaps with _decimal, and should be set after setting _decimal
- _typeUnion._vt = (ushort)VarEnum.VT_DECIMAL;
- }
- }
-
- // VT_CY
-
- public Decimal AsCy {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_CY, "variant");
- return Decimal.FromOACurrency(_typeUnion._unionTypes._cy);
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_CY;
- _typeUnion._unionTypes._cy = Decimal.ToOACurrency(value);
- }
- }
-
- // VT_DATE
-
- public DateTime AsDate {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_DATE, "variant");
- return DateTime.FromOADate(_typeUnion._unionTypes._date);
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_DATE;
- _typeUnion._unionTypes._date = value.ToOADate();
- }
- }
-
- // VT_BSTR
-
- public String AsBstr {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_BSTR, "variant");
- return (string)Marshal.PtrToStringBSTR(this._typeUnion._unionTypes._bstr);
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_BSTR;
- this._typeUnion._unionTypes._bstr = Marshal.StringToBSTR(value);
- }
- }
-
- // VT_UNKNOWN
-
- public Object AsUnknown {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_UNKNOWN, "variant");
- if (_typeUnion._unionTypes._unknown == IntPtr.Zero)
- return null;
- return Marshal.GetObjectForIUnknown(_typeUnion._unionTypes._unknown);
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_UNKNOWN;
- if (value == null)
- _typeUnion._unionTypes._unknown = IntPtr.Zero;
- else
- _typeUnion._unionTypes._unknown = Marshal.GetIUnknownForObject(value);
- }
- }
-
- // VT_DISPATCH
-
- public Object AsDispatch {
- get {
- BCLDebug.Assert(VariantType == VarEnum.VT_DISPATCH, "variant");
- if (_typeUnion._unionTypes._dispatch == IntPtr.Zero)
- return null;
- return Marshal.GetObjectForIUnknown(_typeUnion._unionTypes._dispatch);
- }
- set {
- BCLDebug.Assert(IsEmpty, "variant"); // The setter can only be called once as VariantClear might be needed otherwise
- VariantType = VarEnum.VT_DISPATCH;
- if (value == null)
- _typeUnion._unionTypes._dispatch = IntPtr.Zero;
- else
- _typeUnion._unionTypes._dispatch = Marshal.GetIDispatchForObject(value);
- }
- }
-
-
- // *** END GENERATED CODE ***
-
- internal IntPtr AsByRefVariant
- {
- get {
- BCLDebug.Assert(VariantType == (VarEnum.VT_BYREF | VarEnum.VT_VARIANT), "variant");
- return _typeUnion._unionTypes._pvarVal;
- }
- }
-
- #endregion
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/Attributes.cs b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/Attributes.cs
index 80b24f5529..7fa2420530 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/Attributes.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/Attributes.cs
@@ -35,7 +35,7 @@ namespace System.Runtime.InteropServices.WindowsRuntime
[System.Runtime.CompilerServices.FriendAccessAllowed]
internal sealed class WindowsRuntimeImportAttribute : Attribute
{
- public WindowsRuntimeImportAttribute()
+ internal WindowsRuntimeImportAttribute()
{ }
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CLRIPropertyValueImpl.cs b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CLRIPropertyValueImpl.cs
index 702e0c9e52..b7dad17a6b 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CLRIPropertyValueImpl.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CLRIPropertyValueImpl.cs
@@ -148,15 +148,6 @@ namespace System.Runtime.InteropServices.WindowsRuntime
return CoerceScalarValue<String>(PropertyType.String);
}
- [Pure]
- public Object GetInspectable()
- {
- if (this.Type != PropertyType.Inspectable)
- throw new InvalidCastException(Environment.GetResourceString("InvalidCast_WinRTIPropertyValueElement", this.Type, "Inspectable"), __HResults.TYPE_E_TYPEMISMATCH);
- Contract.EndContractBlock();
- return _data;
- }
-
[Pure]
public Guid GetGuid()
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ConstantSplittableMap.cs b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ConstantSplittableMap.cs
index a5abb4f23e..3a896ecbe3 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ConstantSplittableMap.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ConstantSplittableMap.cs
@@ -53,25 +53,6 @@ namespace System.Runtime.InteropServices.WindowsRuntime
this.items = CreateKeyValueArray(data.Count, data.GetEnumerator());
}
- internal ConstantSplittableMap(IMapView<TKey, TValue> data)
- {
- if (data == null)
- throw new ArgumentNullException(nameof(data));
-
- if (((UInt32)Int32.MaxValue) < data.Size)
- {
- Exception e = new InvalidOperationException(Environment.GetResourceString("InvalidOperation_CollectionBackingDictionaryTooLarge"));
- e.SetErrorCode(__HResults.E_BOUNDS);
- throw e;
- }
-
- int size = (int)data.Size;
-
- this.firstItemIndex = 0;
- this.lastItemIndex = size - 1;
- this.items = CreateKeyValueArray(size, data.GetEnumerator());
- }
-
private ConstantSplittableMap(KeyValuePair<TKey, TValue>[] items, Int32 firstItemIndex, Int32 lastItemIndex)
{
@@ -94,22 +75,6 @@ namespace System.Runtime.InteropServices.WindowsRuntime
return kvArray;
}
- private KeyValuePair<TKey, TValue>[] CreateKeyValueArray(Int32 count, IEnumerator<IKeyValuePair<TKey, TValue>> data)
- {
- KeyValuePair<TKey, TValue>[] kvArray = new KeyValuePair<TKey, TValue>[count];
-
- Int32 i = 0;
- while (data.MoveNext())
- {
- IKeyValuePair<TKey, TValue> current = data.Current;
- kvArray[i++] = new KeyValuePair<TKey, TValue>(current.Key, current.Value);
- }
-
- Array.Sort(kvArray, keyValuePairComparator);
-
- return kvArray;
- }
-
public int Count {
get {
@@ -179,14 +144,7 @@ namespace System.Runtime.InteropServices.WindowsRuntime
secondPartition = new ConstantSplittableMap<TKey, TValue>(items, pivot + 1, lastItemIndex);
}
- #region IReadOnlyDictionary members
-
- public bool ContainsKey(TKey key)
- {
- KeyValuePair<TKey, TValue> searchKey = new KeyValuePair<TKey, TValue>(key, default(TValue));
- int index = Array.BinarySearch(items, firstItemIndex, Count, searchKey, keyValuePairComparator);
- return index >= 0;
- }
+#region IReadOnlyDictionary members
public bool TryGetValue(TKey key, out TValue value)
{
@@ -203,24 +161,6 @@ namespace System.Runtime.InteropServices.WindowsRuntime
return true;
}
- public TValue this[TKey key] {
- get {
- return Lookup(key);
- }
- }
-
- public IEnumerable<TKey> Keys {
- get {
- throw new NotImplementedException("NYI");
- }
- }
-
- public IEnumerable<TValue> Values {
- get {
- throw new NotImplementedException("NYI");
- }
- }
-
#endregion IReadOnlyDictionary members
#region IKeyValuePair Enumerator
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CustomPropertyImpl.cs b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CustomPropertyImpl.cs
index d575201bb9..9f822d5ced 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CustomPropertyImpl.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CustomPropertyImpl.cs
@@ -123,7 +123,6 @@ namespace System.Runtime.InteropServices.WindowsRuntime
// We can safely skip access check because this is only used in full trust scenarios.
// And we have already verified that the property accessor is public.
- Debug.Assert(AppDomain.CurrentDomain.PermissionSet.IsUnrestricted());
return rtMethod.UnsafeInvoke(target, BindingFlags.Default, null, args, null);
}
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IVector.cs b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IVector.cs
index a77ff005b9..6982911a13 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IVector.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IVector.cs
@@ -57,9 +57,6 @@ namespace System.Runtime.InteropServices.WindowsRuntime
void Append(T value);
void RemoveAtEnd();
void Clear();
- [Pure]
- uint GetMany(uint startIndex, [Out] T[] items);
- void ReplaceAll(T[] items);
}
[ComImport]
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/NativeMethods.cs b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/NativeMethods.cs
index 4380369754..627de8d400 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/NativeMethods.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/NativeMethods.cs
@@ -21,7 +21,7 @@ namespace System.Runtime.InteropServices.WindowsRuntime
internal static class UnsafeNativeMethods
{
- [DllImport("api-ms-win-core-winrt-error-l1-1-1.dll", PreserveSig = false)]
+ [DllImport("api-ms-win-core-winrt-error-l1-1-0.dll", PreserveSig = false)]
[SuppressUnmanagedCodeSecurity]
internal static extern IRestrictedErrorInfo GetRestrictedErrorInfo();
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeBufferHelper.cs b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeBufferHelper.cs
index a786880fab..551ee65153 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeBufferHelper.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeBufferHelper.cs
@@ -21,12 +21,10 @@ internal static class WindowsRuntimeBufferHelper {
[DllImport(JitHelpers.QCall)]
[SuppressUnmanagedCodeSecurity]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private unsafe extern static void StoreOverlappedPtrInCCW(ObjectHandleOnStack windowsRuntimeBuffer, NativeOverlapped* overlapped);
[FriendAccessAllowed]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal unsafe static void StoreOverlappedInCCW(Object windowsRuntimeBuffer, NativeOverlapped* overlapped) {
StoreOverlappedPtrInCCW(JitHelpers.GetObjectHandleOnStack(ref windowsRuntimeBuffer), overlapped);
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMarshal.cs b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMarshal.cs
index a7ad4912de..57655ec861 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMarshal.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMarshal.cs
@@ -135,12 +135,6 @@ namespace System.Runtime.InteropServices.WindowsRuntime
restTokens = null;
}
- internal EventRegistrationTokenList(EventRegistrationTokenList list)
- {
- firstToken = list.firstToken;
- restTokens = list.restTokens;
- }
-
// Push a new token into this list
// Returns true if you need to copy back this list into the dictionary (so that you
// don't lose change outside the dictionary). false otherwise.
@@ -1203,42 +1197,6 @@ namespace System.Runtime.InteropServices.WindowsRuntime
return activationFactory;
}
-#if FEATURE_COMINTEROP_WINRT_DESKTOP_HOST
- // Currently we use only a single class activator since we have a requirement that all class activations come from the same
- // app base and we haven't sorted through the various code sharing implications of spinning up multiple AppDomains. This
- // holds the IWinRTClassActivator* that is used for the process
- private static IntPtr s_pClassActivator = IntPtr.Zero;
-
- internal static IntPtr GetClassActivatorForApplication(string appBase)
- {
- if (s_pClassActivator == IntPtr.Zero)
- {
- AppDomainSetup hostDomainSetup = new AppDomainSetup()
- {
- ApplicationBase = appBase,
- };
-
- AppDomain hostDomain = AppDomain.CreateDomain(Environment.GetResourceString("WinRTHostDomainName", appBase), null, hostDomainSetup);
- WinRTClassActivator activator = (WinRTClassActivator)hostDomain.CreateInstanceAndUnwrap(typeof(WinRTClassActivator).Assembly.FullName, typeof(WinRTClassActivator).FullName);
- IntPtr pActivator = activator.GetIWinRTClassActivator();
-
- if (Interlocked.CompareExchange(ref s_pClassActivator, pActivator, IntPtr.Zero) != IntPtr.Zero)
- {
- Marshal.Release(pActivator);
- activator = null;
-
- try
- {
- AppDomain.Unload(hostDomain);
- }
- catch (CannotUnloadAppDomainException) { }
- }
- }
-
- Marshal.AddRef(s_pClassActivator);
- return s_pClassActivator;
- }
-#endif // FEATURE_COMINTEROP_WINRT_DESKTOP_HOST
#endif // FEATURE_COMINTEROP_WINRT_MANAGED_ACTIVATION
diff --git a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMetadata.cs b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMetadata.cs
index 9ca959c528..f097c6a0db 100644
--- a/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMetadata.cs
+++ b/src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMetadata.cs
@@ -16,94 +16,10 @@ namespace System.Runtime.InteropServices.WindowsRuntime
using System.Runtime.InteropServices;
using System.Security;
- public static class WindowsRuntimeMetadata
+ internal static class WindowsRuntimeMetadata
{
- // Wrapper for Win8 API RoResolveNamespace with default Windows SDK path as installed .winmd files in %WINDIR%\system32\WinMetadata.
- public static IEnumerable<string> ResolveNamespace(string namespaceName, IEnumerable<string> packageGraphFilePaths)
- {
- return ResolveNamespace(namespaceName, null, packageGraphFilePaths);
- }
-
- // Wrapper for Win8 API RoResolveNamespace.
- public static IEnumerable<string> ResolveNamespace(string namespaceName, string windowsSdkFilePath, IEnumerable<string> packageGraphFilePaths)
- {
- if (namespaceName == null)
- throw new ArgumentNullException(nameof(namespaceName));
- Contract.EndContractBlock();
-
- string[] packageGraphFilePathsArray = null;
- if (packageGraphFilePaths != null)
- {
- List<string> packageGraphFilePathsList = new List<string>(packageGraphFilePaths);
- packageGraphFilePathsArray = new string[packageGraphFilePathsList.Count];
-
- int index = 0;
- foreach (string packageGraphFilePath in packageGraphFilePathsList)
- {
- packageGraphFilePathsArray[index] = packageGraphFilePath;
- index++;
- }
- }
-
- string[] retFileNames = null;
- nResolveNamespace(
- namespaceName,
- windowsSdkFilePath,
- packageGraphFilePathsArray,
- ((packageGraphFilePathsArray == null) ? 0 : packageGraphFilePathsArray.Length),
- JitHelpers.GetObjectHandleOnStack(ref retFileNames));
-
- return retFileNames;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void nResolveNamespace(
- string namespaceName,
- string windowsSdkFilePath,
- string[] packageGraphFilePaths,
- int cPackageGraphFilePaths,
- ObjectHandleOnStack retFileNames);
+ private static EventHandler<DesignerNamespaceResolveEventArgs> DesignerNamespaceResolve;
-#if FEATURE_REFLECTION_ONLY_LOAD
- [method: System.Security.SecurityCritical]
- public static event EventHandler<NamespaceResolveEventArgs> ReflectionOnlyNamespaceResolve;
-
- internal static RuntimeAssembly[] OnReflectionOnlyNamespaceResolveEvent(AppDomain appDomain, RuntimeAssembly assembly, string namespaceName)
- {
- EventHandler<NamespaceResolveEventArgs> eventHandler = ReflectionOnlyNamespaceResolve;
- if (eventHandler != null)
- {
- Delegate[] ds = eventHandler.GetInvocationList();
- int len = ds.Length;
- for (int i = 0; i < len; i++)
- {
- NamespaceResolveEventArgs eventArgs = new NamespaceResolveEventArgs(namespaceName, assembly);
-
- ((EventHandler<NamespaceResolveEventArgs>)ds[i])(appDomain, eventArgs);
-
- Collection<Assembly> assembliesCollection = eventArgs.ResolvedAssemblies;
- if (assembliesCollection.Count > 0)
- {
- RuntimeAssembly[] retAssemblies = new RuntimeAssembly[assembliesCollection.Count];
- int retIndex = 0;
- foreach (Assembly asm in assembliesCollection)
- {
- retAssemblies[retIndex] = AppDomain.GetRuntimeAssembly(asm);
- retIndex++;
- }
- return retAssemblies;
- }
- }
- }
-
- return null;
- }
-#endif //FEATURE_REFLECTION_ONLY
-
- [method: System.Security.SecurityCritical]
- public static event EventHandler<DesignerNamespaceResolveEventArgs> DesignerNamespaceResolve;
-
internal static string[] OnDesignerNamespaceResolveEvent(AppDomain appDomain, string namespaceName)
{
EventHandler<DesignerNamespaceResolveEventArgs> eventHandler = DesignerNamespaceResolve;
@@ -142,7 +58,6 @@ namespace System.Runtime.InteropServices.WindowsRuntime
}
#if FEATURE_REFLECTION_ONLY_LOAD
- [ComVisible(false)]
public class NamespaceResolveEventArgs : EventArgs
{
private string _NamespaceName;
@@ -182,20 +97,11 @@ namespace System.Runtime.InteropServices.WindowsRuntime
}
#endif //FEATURE_REFLECTION_ONLY
- [ComVisible(false)]
- public class DesignerNamespaceResolveEventArgs : EventArgs
+ internal class DesignerNamespaceResolveEventArgs : EventArgs
{
private string _NamespaceName;
private Collection<string> _ResolvedAssemblyFiles;
- public string NamespaceName
- {
- get
- {
- return _NamespaceName;
- }
- }
-
public Collection<string> ResolvedAssemblyFiles
{
get
diff --git a/src/mscorlib/src/System/Runtime/Loader/AssemblyLoadContext.cs b/src/mscorlib/src/System/Runtime/Loader/AssemblyLoadContext.cs
index e158a5aa8a..2be8b13274 100644
--- a/src/mscorlib/src/System/Runtime/Loader/AssemblyLoadContext.cs
+++ b/src/mscorlib/src/System/Runtime/Loader/AssemblyLoadContext.cs
@@ -13,15 +13,11 @@ using System.Runtime.InteropServices;
using System.Security;
using System.Threading;
-#if FEATURE_HOST_ASSEMBLY_RESOLVER
namespace System.Runtime.Loader
{
public abstract class AssemblyLoadContext
{
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern bool OverrideDefaultAssemblyLoadContextForCurrentDomain(IntPtr ptrNativeAssemblyLoadContext);
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
@@ -30,16 +26,11 @@ namespace System.Runtime.Loader
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
private static extern IntPtr InitializeAssemblyLoadContext(IntPtr ptrAssemblyLoadContext, bool fRepresentsTPALoadContext);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern IntPtr LoadFromAssemblyName(IntPtr ptrNativeAssemblyLoadContext, bool fRepresentsTPALoadContext);
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
private static extern IntPtr LoadFromStream(IntPtr ptrNativeAssemblyLoadContext, IntPtr ptrAssemblyArray, int iAssemblyArrayLen, IntPtr ptrSymbols, int iSymbolArrayLen, ObjectHandleOnStack retAssembly);
-#if FEATURE_MULTICOREJIT
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
internal static extern void InternalSetProfileRoot(string directoryPath);
@@ -47,7 +38,6 @@ namespace System.Runtime.Loader
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
internal static extern void InternalStartProfile(string profile, IntPtr ptrNativeAssemblyLoadContext);
-#endif // FEATURE_MULTICOREJIT
protected AssemblyLoadContext()
{
@@ -75,7 +65,7 @@ namespace System.Runtime.Loader
// Since unloading an AssemblyLoadContext is not yet implemented, this is a temporary solution to raise the
// Unloading event on process exit. Register for the current AppDomain's ProcessExit event, and the handler will in
// turn raise the Unloading event.
- AppDomain.CurrentDomain.ProcessExit += OnProcessExit;
+ AppContext.Unloading += OnAppContextUnloading;
}
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
@@ -354,28 +344,6 @@ namespace System.Runtime.Loader
return s_DefaultAssemblyLoadContext;
}
}
-
- // This will be used to set the AssemblyLoadContext for DefaultContext, for the AppDomain,
- // by a host. Once set, the runtime will invoke the LoadFromAssemblyName method against it to perform
- // assembly loads for the DefaultContext.
- //
- // This method will throw if the Default AssemblyLoadContext is already set or the Binding model is already locked.
- public static void InitializeDefaultContext(AssemblyLoadContext context)
- {
- if (context == null)
- {
- throw new ArgumentNullException(nameof(context));
- }
-
- // Try to override the default assembly load context
- if (!AssemblyLoadContext.OverrideDefaultAssemblyLoadContextForCurrentDomain(context.m_pNativeAssemblyLoadContext))
- {
- throw new InvalidOperationException(Environment.GetResourceString("AppDomain_BindingModelIsLocked"));
- }
-
- // Update the managed side as well.
- s_DefaultAssemblyLoadContext = context;
- }
// This call opens and closes the file, but does not add the
// assembly to the domain.
@@ -433,20 +401,16 @@ namespace System.Runtime.Loader
// Set the root directory path for profile optimization.
public void SetProfileOptimizationRoot(string directoryPath)
{
-#if FEATURE_MULTICOREJIT
InternalSetProfileRoot(directoryPath);
-#endif // FEATURE_MULTICOREJIT
}
// Start profile optimization for the specified profile name.
public void StartProfileOptimization(string profile)
{
-#if FEATURE_MULTICOREJIT
InternalStartProfile(profile, m_pNativeAssemblyLoadContext);
-#endif // FEATURE_MULTICOREJI
}
- private void OnProcessExit(object sender, EventArgs e)
+ private void OnAppContextUnloading(object sender, EventArgs e)
{
var unloading = Unloading;
if (unloading != null)
@@ -526,4 +490,3 @@ namespace System.Runtime.Loader
}
}
-#endif // FEATURE_HOST_ASSEMBLY_RESOLVER
diff --git a/src/mscorlib/src/System/Runtime/MemoryFailPoint.cs b/src/mscorlib/src/System/Runtime/MemoryFailPoint.cs
index bd87d9027c..84b8ba9e1e 100644
--- a/src/mscorlib/src/System/Runtime/MemoryFailPoint.cs
+++ b/src/mscorlib/src/System/Runtime/MemoryFailPoint.cs
@@ -20,7 +20,6 @@ using System.Runtime.InteropServices;
using System.Threading;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
-using System.Security.Permissions;
using System.Runtime.Versioning;
using System.Diagnostics;
using System.Diagnostics.Contracts;
@@ -394,7 +393,6 @@ namespace System.Runtime
GC.SuppressFinalize(this);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private void Dispose(bool disposing)
{
// This is just bookkeeping to ensure multiple threads can really
@@ -472,10 +470,6 @@ namespace System.Runtime
_availPageFile >> 20, _totalFreeAddressSpace >> 20,
_lastKnownFreeAddressSpace >> 20, _reservedMem);
}
-
- public String StackTrace {
- get { return _stackTrace; }
- }
}
#endif
}
diff --git a/src/mscorlib/src/System/Runtime/ProfileOptimization.cs b/src/mscorlib/src/System/Runtime/ProfileOptimization.cs
deleted file mode 100644
index 1e42308ecc..0000000000
--- a/src/mscorlib/src/System/Runtime/ProfileOptimization.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-//
-// This class defines entry point for multi-core JIT API
-//
-//
-namespace System.Runtime {
-
- using System;
-
- using System.Reflection;
-
- using System.Security;
- using System.Security.Permissions;
-
- using System.Runtime;
- using System.Runtime.InteropServices;
- using System.Runtime.Versioning;
- using System.Runtime.CompilerServices;
-
-#if FEATURE_MULTICOREJIT
-
- public static class ProfileOptimization
- {
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- internal static extern void InternalSetProfileRoot(string directoryPath);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- internal static extern void InternalStartProfile(string profile, IntPtr ptrNativeAssemblyLoadContext);
-
- public static void SetProfileRoot(string directoryPath)
- {
- InternalSetProfileRoot(directoryPath);
- }
-
- public static void StartProfile(string profile)
- {
- InternalStartProfile(profile, IntPtr.Zero);
- }
- }
-
-#endif
-}
-
diff --git a/src/mscorlib/src/System/Runtime/Reliability/CriticalFinalizerObject.cs b/src/mscorlib/src/System/Runtime/Reliability/CriticalFinalizerObject.cs
index eb5a186b65..6d6d6f3e77 100644
--- a/src/mscorlib/src/System/Runtime/Reliability/CriticalFinalizerObject.cs
+++ b/src/mscorlib/src/System/Runtime/Reliability/CriticalFinalizerObject.cs
@@ -17,20 +17,16 @@
===========================================================*/
using System;
-using System.Security.Permissions;
using System.Runtime.InteropServices;
namespace System.Runtime.ConstrainedExecution
{
- [System.Runtime.InteropServices.ComVisible(true)]
public abstract class CriticalFinalizerObject
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected CriticalFinalizerObject()
{
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
~CriticalFinalizerObject()
{
}
diff --git a/src/mscorlib/src/System/Runtime/Reliability/PrePrepareMethodAttribute.cs b/src/mscorlib/src/System/Runtime/Reliability/PrePrepareMethodAttribute.cs
index d9774d636b..67c934d034 100644
--- a/src/mscorlib/src/System/Runtime/Reliability/PrePrepareMethodAttribute.cs
+++ b/src/mscorlib/src/System/Runtime/Reliability/PrePrepareMethodAttribute.cs
@@ -23,7 +23,7 @@ namespace System.Runtime.ConstrainedExecution
[AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method, Inherited = false)]
- public sealed class PrePrepareMethodAttribute : Attribute
+ internal sealed class PrePrepareMethodAttribute : Attribute
{
public PrePrepareMethodAttribute()
{
diff --git a/src/mscorlib/src/System/Runtime/Remoting/ObjectHandle.cs b/src/mscorlib/src/System/Runtime/Remoting/ObjectHandle.cs
index 5555670498..ed3444e15d 100644
--- a/src/mscorlib/src/System/Runtime/Remoting/ObjectHandle.cs
+++ b/src/mscorlib/src/System/Runtime/Remoting/ObjectHandle.cs
@@ -19,10 +19,7 @@ namespace System.Runtime.Remoting
using System;
using System.Runtime.InteropServices;
- [ClassInterface(ClassInterfaceType.AutoDual)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class ObjectHandle:
- IObjectHandle
+ public class ObjectHandle
{
private Object WrappedObject;
@@ -30,12 +27,12 @@ namespace System.Runtime.Remoting
{
}
- public ObjectHandle(Object o)
+ internal ObjectHandle(Object o)
{
WrappedObject = o;
}
- public Object Unwrap()
+ internal Object Unwrap()
{
return WrappedObject;
}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/FormatterConverter.cs b/src/mscorlib/src/System/Runtime/Serialization/FormatterConverter.cs
index b710ed0b3a..27f7ecf9d2 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/FormatterConverter.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/FormatterConverter.cs
@@ -17,8 +17,7 @@ namespace System.Runtime.Serialization {
using System.Globalization;
using System.Diagnostics.Contracts;
-[System.Runtime.InteropServices.ComVisible(true)]
- public class FormatterConverter : IFormatterConverter {
+ internal class FormatterConverter : IFormatterConverter {
public FormatterConverter() {
}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/FormatterServices.cs b/src/mscorlib/src/System/Runtime/Serialization/FormatterServices.cs
index 27c3f15136..c3f9eb4452 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/FormatterServices.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/FormatterServices.cs
@@ -18,10 +18,6 @@ namespace System.Runtime.Serialization {
using System.Collections;
using System.Collections.Generic;
using System.Security;
- using System.Security.Permissions;
-#if FEATURE_SERIALIZATION
- using System.Runtime.Serialization.Formatters;
-#endif
using System.Runtime.Remoting;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
@@ -32,211 +28,7 @@ namespace System.Runtime.Serialization {
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
public static class FormatterServices {
-#if FEATURE_SERIALIZATION
- internal static Dictionary<MemberHolder, MemberInfo[]> m_MemberInfoTable = new Dictionary<MemberHolder, MemberInfo[]>(32);
- private static bool unsafeTypeForwardersIsEnabled = false;
-
- private static volatile bool unsafeTypeForwardersIsEnabledInitialized = false;
-
- private static Object s_FormatterServicesSyncObject = null;
-
- private static Object formatterServicesSyncObject
- {
- get
- {
- if (s_FormatterServicesSyncObject == null)
- {
- Object o = new Object();
- Interlocked.CompareExchange<Object>(ref s_FormatterServicesSyncObject, o, null);
- }
- return s_FormatterServicesSyncObject;
- }
- }
-
- static FormatterServices()
- {
- // Static initialization touches security critical types, so we need an
- // explicit static constructor to allow us to mark it safe critical.
- }
-
- private static MemberInfo[] GetSerializableMembers(RuntimeType type) {
- // get the list of all fields
- FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
- int countProper = 0;
- for (int i = 0; i < fields.Length; i++) {
- if ((fields[i].Attributes & FieldAttributes.NotSerialized) == FieldAttributes.NotSerialized)
- continue;
- countProper++;
- }
- if (countProper != fields.Length) {
- FieldInfo[] properFields = new FieldInfo[countProper];
- countProper = 0;
- for (int i = 0; i < fields.Length; i++) {
- if ((fields[i].Attributes & FieldAttributes.NotSerialized) == FieldAttributes.NotSerialized)
- continue;
- properFields[countProper] = fields[i];
- countProper++;
- }
- return properFields;
- }
- else
- return fields;
- }
-
- private static bool CheckSerializable(RuntimeType type) {
- if (type.IsSerializable) {
- return true;
- }
- return false;
- }
-
- private static MemberInfo[] InternalGetSerializableMembers(RuntimeType type) {
- List<SerializationFieldInfo> allMembers = null;
- MemberInfo[] typeMembers;
- FieldInfo [] typeFields;
- RuntimeType parentType;
-
- Debug.Assert((object)type != null, "[GetAllSerializableMembers]type!=null");
-
- if (type.IsInterface) {
- return new MemberInfo[0];
- }
-
- if (!(CheckSerializable(type))) {
- throw new SerializationException(Environment.GetResourceString("Serialization_NonSerType", type.FullName, type.Module.Assembly.FullName));
- }
-
- //Get all of the serializable members in the class to be serialized.
- typeMembers = GetSerializableMembers(type);
-
- //If this class doesn't extend directly from object, walk its hierarchy and
- //get all of the private and assembly-access fields (e.g. all fields that aren't
- //virtual) and include them in the list of things to be serialized.
- parentType = (RuntimeType)(type.BaseType);
- if (parentType != null && parentType != (RuntimeType)typeof(Object)) {
- RuntimeType[] parentTypes = null;
- int parentTypeCount = 0;
- bool classNamesUnique = GetParentTypes(parentType, out parentTypes, out parentTypeCount);
- if (parentTypeCount > 0){
- allMembers = new List<SerializationFieldInfo>();
- for (int i = 0; i < parentTypeCount;i++){
- parentType = parentTypes[i];
- if (!CheckSerializable(parentType)) {
- throw new SerializationException(Environment.GetResourceString("Serialization_NonSerType", parentType.FullName, parentType.Module.Assembly.FullName));
- }
-
- typeFields = parentType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
- String typeName = classNamesUnique ? parentType.Name : parentType.FullName;
- foreach (FieldInfo field in typeFields) {
- // Family and Assembly fields will be gathered by the type itself.
- if (!field.IsNotSerialized) {
- allMembers.Add(new SerializationFieldInfo((RuntimeFieldInfo)field, typeName));
- }
- }
- }
- //If we actually found any new MemberInfo's, we need to create a new MemberInfo array and
- //copy all of the members which we've found so far into that.
- if (allMembers!=null && allMembers.Count>0) {
- MemberInfo[] membersTemp = new MemberInfo[allMembers.Count + typeMembers.Length];
- Array.Copy(typeMembers, membersTemp, typeMembers.Length);
- ((ICollection)allMembers).CopyTo(membersTemp, typeMembers.Length);
- typeMembers = membersTemp;
- }
- }
- }
- return typeMembers;
- }
-
- private static bool GetParentTypes(RuntimeType parentType, out RuntimeType[] parentTypes, out int parentTypeCount){
- //Check if there are any dup class names. Then we need to include as part of
- //typeName to prefix the Field names in SerializationFieldInfo
- /*out*/ parentTypes = null;
- /*out*/ parentTypeCount = 0;
- bool unique = true;
- RuntimeType objectType = (RuntimeType)typeof(object);
- for (RuntimeType t1 = parentType; t1 != objectType; t1 = (RuntimeType)t1.BaseType)
- {
- if (t1.IsInterface) continue;
- string t1Name = t1.Name;
- for(int i=0;unique && i<parentTypeCount;i++){
- string t2Name = parentTypes[i].Name;
- if (t2Name.Length == t1Name.Length && t2Name[0] == t1Name[0] && t1Name == t2Name){
- unique = false;
- break;
- }
- }
- //expand array if needed
- if (parentTypes == null || parentTypeCount == parentTypes.Length){
- RuntimeType[] tempParentTypes = new RuntimeType[Math.Max(parentTypeCount*2, 12)];
- if (parentTypes != null)
- Array.Copy(parentTypes, 0, tempParentTypes, 0, parentTypeCount);
- parentTypes = tempParentTypes;
- }
- parentTypes[parentTypeCount++] = t1;
- }
- return unique;
- }
-
- // Get all of the Serializable members for a particular class. For all practical intents and
- // purposes, this is the non-transient, non-static members (fields and properties). In order to
- // be included, properties must have both a getter and a setter. N.B.: A class
- // which implements ISerializable or has a serialization surrogate may not use all of these members
- // (or may have additional members).
- public static MemberInfo[] GetSerializableMembers(Type type) {
- return GetSerializableMembers(type, new StreamingContext(StreamingContextStates.All));
- }
-
- // Get all of the Serializable Members for a particular class. If we're not cloning, this is all
- // non-transient, non-static fields. If we are cloning, include the transient fields as well since
- // we know that we're going to live inside of the same context.
- public static MemberInfo[] GetSerializableMembers(Type type, StreamingContext context) {
- MemberInfo[] members;
-
- if ((object)type==null) {
- throw new ArgumentNullException(nameof(type));
- }
- Contract.EndContractBlock();
-
- if (!(type is RuntimeType)) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidType", type.ToString()));
- }
-
- MemberHolder mh = new MemberHolder(type, context);
-
- //If we've already gathered the members for this type, just return them.
- if (m_MemberInfoTable.ContainsKey(mh)) {
- return m_MemberInfoTable[mh];
- }
-
- lock (formatterServicesSyncObject) {
- //If we've already gathered the members for this type, just return them.
- if (m_MemberInfoTable.ContainsKey(mh)) {
- return m_MemberInfoTable[mh];
- }
-
- members = InternalGetSerializableMembers((RuntimeType)type);
-
- m_MemberInfoTable[mh] = members;
- }
-
- return members;
- }
-
- static readonly Type[] advancedTypes = new Type[]{
- typeof(System.DelegateSerializationHolder),
- };
-
- public static void CheckTypeSecurity(Type t, TypeFilterLevel securityLevel) {
- if (securityLevel == TypeFilterLevel.Low){
- for(int i=0;i<advancedTypes.Length;i++){
- if (advancedTypes[i].IsAssignableFrom(t))
- throw new SecurityException(Environment.GetResourceString("Serialization_TypeSecurity", advancedTypes[i].FullName, t.FullName));
- }
- }
- }
-#endif // FEATURE_SERIALIZATION
// Gets a new instance of the object. The entire object is initalized to 0 and no
// constructors have been run. **THIS MEANS THAT THE OBJECT MAY NOT BE IN A STATE
@@ -258,188 +50,9 @@ namespace System.Runtime.Serialization {
return nativeGetUninitializedObject((RuntimeType)type);
}
- public static Object GetSafeUninitializedObject(Type type) {
- if ((object)type == null) {
- throw new ArgumentNullException(nameof(type));
- }
- Contract.EndContractBlock();
-
- if (!(type is RuntimeType)) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidType", type.ToString()));
- }
-
- try {
- return nativeGetSafeUninitializedObject((RuntimeType)type);
- }
- catch(SecurityException e) {
- throw new SerializationException(Environment.GetResourceString("Serialization_Security", type.FullName), e);
- }
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern Object nativeGetSafeUninitializedObject(RuntimeType type);
-
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern Object nativeGetUninitializedObject(RuntimeType type);
-#if FEATURE_SERIALIZATION
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern bool GetEnableUnsafeTypeForwarders();
-
- internal static bool UnsafeTypeForwardersIsEnabled()
- {
- if (!unsafeTypeForwardersIsEnabledInitialized)
- {
- unsafeTypeForwardersIsEnabled = GetEnableUnsafeTypeForwarders();
- unsafeTypeForwardersIsEnabledInitialized = true;
- }
-
- return unsafeTypeForwardersIsEnabled;
- }
-#endif
private static Binder s_binder = Type.DefaultBinder;
- internal static void SerializationSetValue(MemberInfo fi, Object target, Object value)
- {
- Contract.Requires(fi != null);
-
- RtFieldInfo rtField = fi as RtFieldInfo;
-
- if (rtField != null)
- {
- rtField.CheckConsistency(target);
- rtField.UnsafeSetValue(target, value, BindingFlags.Default, s_binder, null);
- return;
- }
-
- SerializationFieldInfo serField = fi as SerializationFieldInfo;
- if (serField != null)
- {
- serField.InternalSetValue(target, value, BindingFlags.Default, s_binder, null);
- return;
- }
-
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidFieldInfo"));
- }
-
- // Fill in the members of obj with the data contained in data.
- // Returns the number of members populated.
- //
- public static Object PopulateObjectMembers(Object obj, MemberInfo[] members, Object[] data) {
- if (obj==null) {
- throw new ArgumentNullException(nameof(obj));
- }
-
- if (members==null) {
- throw new ArgumentNullException(nameof(members));
- }
-
- if (data==null) {
- throw new ArgumentNullException(nameof(data));
- }
-
- if (members.Length!=data.Length) {
- throw new ArgumentException(Environment.GetResourceString("Argument_DataLengthDifferent"));
- }
- Contract.EndContractBlock();
-
- MemberInfo mi;
-
- BCLDebug.Trace("SER", "[PopulateObjectMembers]Enter.");
-
- for (int i=0; i<members.Length; i++) {
- mi = members[i];
-
- if (mi==null) {
- throw new ArgumentNullException(nameof(members), Environment.GetResourceString("ArgumentNull_NullMember", i));
- }
-
- //If we find an empty, it means that the value was never set during deserialization.
- //This is either a forward reference or a null. In either case, this may break some of the
- //invariants mantained by the setter, so we'll do nothing with it for right now.
- if (data[i]!=null) {
- if (mi.MemberType==MemberTypes.Field) {
- SerializationSetValue(mi, obj, data[i]);
- } else {
- throw new SerializationException(Environment.GetResourceString("Serialization_UnknownMemberInfo"));
- }
-
- BCLDebug.Trace("SER", "[PopulateObjectMembers]\tType:", obj.GetType(), "\tMember:",
- members[i].Name, " with member type: ", ((FieldInfo)members[i]).FieldType);
- }
- //Console.WriteLine("X");
- }
-
- BCLDebug.Trace("SER", "[PopulateObjectMembers]Leave.");
-
- return obj;
- }
-
- // Extracts the data from obj. members is the array of members which we wish to
- // extract (must be FieldInfos or PropertyInfos). For each supplied member, extract the matching value and
- // return it in a Object[] of the same size.
- //
- public static Object[] GetObjectData(Object obj, MemberInfo[] members) {
-
- if (obj==null) {
- throw new ArgumentNullException(nameof(obj));
- }
-
- if (members==null) {
- throw new ArgumentNullException(nameof(members));
- }
- Contract.EndContractBlock();
-
- int numberOfMembers = members.Length;
-
- Object[] data = new Object[numberOfMembers];
- MemberInfo mi;
-
- for (int i=0; i<numberOfMembers; i++) {
- mi=members[i];
-
- if (mi==null) {
- throw new ArgumentNullException(nameof(members), Environment.GetResourceString("ArgumentNull_NullMember", i));
- }
-
- if (mi.MemberType==MemberTypes.Field) {
- Debug.Assert(mi is RuntimeFieldInfo || mi is SerializationFieldInfo,
- "[FormatterServices.GetObjectData]mi is RuntimeFieldInfo || mi is SerializationFieldInfo.");
-
- RtFieldInfo rfi = mi as RtFieldInfo;
- if (rfi != null) {
- rfi.CheckConsistency(obj);
- data[i] = rfi.UnsafeGetValue(obj);
- } else {
- data[i] = ((SerializationFieldInfo)mi).InternalGetValue(obj);
- }
- } else {
- throw new SerializationException(Environment.GetResourceString("Serialization_UnknownMemberInfo"));
- }
- }
-
- return data;
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public static ISerializationSurrogate GetSurrogateForCyclicalReference(ISerializationSurrogate innerSurrogate)
- {
- if (innerSurrogate == null)
- throw new ArgumentNullException(nameof(innerSurrogate));
- Contract.EndContractBlock();
- return new SurrogateForCyclicalReference(innerSurrogate);
- }
-
- /*=============================GetTypeFromAssembly==============================
- **Action:
- **Returns:
- **Arguments:
- **Exceptions:
- ==============================================================================*/
- public static Type GetTypeFromAssembly(Assembly assem, String name) {
- if (assem==null)
- throw new ArgumentNullException(nameof(assem));
- Contract.EndContractBlock();
- return assem.GetType(name, false, false);
- }
/*============================LoadAssemblyFromString============================
**Action: Loads an assembly from a given string. The current assembly loading story
@@ -460,99 +73,6 @@ namespace System.Runtime.Serialization {
Assembly found = Assembly.Load(assemblyName);
return found;
}
-
- internal static Assembly LoadAssemblyFromStringNoThrow(String assemblyName) {
- try {
- return LoadAssemblyFromString(assemblyName);
- }
- catch (Exception e){
- BCLDebug.Trace("SER", "[LoadAssemblyFromString]", e.ToString());
- }
- return null;
- }
-
- internal static string GetClrAssemblyName(Type type, out bool hasTypeForwardedFrom) {
- if ((object)type == null) {
- throw new ArgumentNullException(nameof(type));
- }
-
- object[] typeAttributes = type.GetCustomAttributes(typeof(TypeForwardedFromAttribute), false);
- if (typeAttributes != null && typeAttributes.Length > 0) {
- hasTypeForwardedFrom = true;
- TypeForwardedFromAttribute typeForwardedFromAttribute = (TypeForwardedFromAttribute)typeAttributes[0];
- return typeForwardedFromAttribute.AssemblyFullName;
- }
- else {
- hasTypeForwardedFrom = false;
- return type.Assembly.FullName;
- }
- }
-
- internal static string GetClrTypeFullName(Type type) {
- if (type.IsArray) {
- return GetClrTypeFullNameForArray(type);
- }
- else {
- return GetClrTypeFullNameForNonArrayTypes(type);
- }
- }
-
- static string GetClrTypeFullNameForArray(Type type) {
- int rank = type.GetArrayRank();
- if (rank == 1)
- {
- return String.Format(CultureInfo.InvariantCulture, "{0}{1}", GetClrTypeFullName(type.GetElementType()), "[]");
- }
- else
- {
- StringBuilder builder = new StringBuilder(GetClrTypeFullName(type.GetElementType())).Append("[");
- for (int commaIndex = 1; commaIndex < rank; commaIndex++)
- {
- builder.Append(",");
- }
- builder.Append("]");
- return builder.ToString();
- }
- }
-
- static string GetClrTypeFullNameForNonArrayTypes(Type type) {
- if (!type.IsGenericType) {
- return type.FullName;
- }
-
- Type[] genericArguments = type.GetGenericArguments();
- StringBuilder builder = new StringBuilder(type.GetGenericTypeDefinition().FullName).Append("[");
- bool hasTypeForwardedFrom;
-
- foreach (Type genericArgument in genericArguments) {
- builder.Append("[").Append(GetClrTypeFullName(genericArgument)).Append(", ");
- builder.Append(GetClrAssemblyName(genericArgument, out hasTypeForwardedFrom)).Append("],");
- }
-
- //remove the last comma and close typename for generic with a close bracket
- return builder.Remove(builder.Length - 1, 1).Append("]").ToString();
- }
- }
-
- internal sealed class SurrogateForCyclicalReference : ISerializationSurrogate
- {
- ISerializationSurrogate innerSurrogate;
- internal SurrogateForCyclicalReference(ISerializationSurrogate innerSurrogate)
- {
- if (innerSurrogate == null)
- throw new ArgumentNullException(nameof(innerSurrogate));
- this.innerSurrogate = innerSurrogate;
- }
-
- public void GetObjectData(Object obj, SerializationInfo info, StreamingContext context)
- {
- innerSurrogate.GetObjectData(obj, info, context);
- }
-
- public Object SetObjectData(Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
- {
- return innerSurrogate.SetObjectData(obj, info, context, selector);
- }
}
}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/IDeserializationCallback.cs b/src/mscorlib/src/System/Runtime/Serialization/IDeserializationCallback.cs
index e2497e5d34..2911a4016e 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/IDeserializationCallback.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/IDeserializationCallback.cs
@@ -16,7 +16,6 @@ namespace System.Runtime.Serialization {
using System;
// Interface does not need to be marked with the serializable attribute
- [System.Runtime.InteropServices.ComVisible(true)]
public interface IDeserializationCallback {
void OnDeserialization(Object sender);
}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/IFormatter.cs b/src/mscorlib/src/System/Runtime/Serialization/IFormatter.cs
deleted file mode 100644
index 8d91d95acf..0000000000
--- a/src/mscorlib/src/System/Runtime/Serialization/IFormatter.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** Interface: IFormatter;
-**
-**
-** Purpose: The interface for all formatters.
-**
-**
-===========================================================*/
-namespace System.Runtime.Serialization {
- using System.Runtime.Remoting;
- using System;
- using System.IO;
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IFormatter {
- Object Deserialize(Stream serializationStream);
-
- void Serialize(Stream serializationStream, Object graph);
-
-
- ISurrogateSelector SurrogateSelector {
- get;
- set;
- }
-
- SerializationBinder Binder {
- get;
- set;
- }
-
- StreamingContext Context {
- get;
- set;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/IFormatterConverter.cs b/src/mscorlib/src/System/Runtime/Serialization/IFormatterConverter.cs
index 182cc93412..0be0db9acd 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/IFormatterConverter.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/IFormatterConverter.cs
@@ -17,7 +17,6 @@ namespace System.Runtime.Serialization {
using System;
[CLSCompliant(false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public interface IFormatterConverter {
Object Convert(Object value, Type type);
Object Convert(Object value, TypeCode typeCode);
diff --git a/src/mscorlib/src/System/Runtime/Serialization/IObjectReference.cs b/src/mscorlib/src/System/Runtime/Serialization/IObjectReference.cs
index 42662a10f6..ef5ee6ade0 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/IObjectReference.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/IObjectReference.cs
@@ -18,9 +18,7 @@
namespace System.Runtime.Serialization {
using System;
- using System.Security.Permissions;
// Interface does not need to be marked with the serializable attribute
-[System.Runtime.InteropServices.ComVisible(true)]
public interface IObjectReference {
Object GetRealObject(StreamingContext context);
}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/ISerializable.cs b/src/mscorlib/src/System/Runtime/Serialization/ISerializable.cs
index fc283d41f1..816aa0484b 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/ISerializable.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/ISerializable.cs
@@ -16,11 +16,9 @@
namespace System.Runtime.Serialization {
using System.Runtime.Remoting;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System;
using System.Reflection;
- [System.Runtime.InteropServices.ComVisible(true)]
public interface ISerializable {
void GetObjectData(SerializationInfo info, StreamingContext context);
}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/ISerializationSurrogate.cs b/src/mscorlib/src/System/Runtime/Serialization/ISerializationSurrogate.cs
deleted file mode 100644
index 226bbdcc75..0000000000
--- a/src/mscorlib/src/System/Runtime/Serialization/ISerializationSurrogate.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** Interface: ISurrogate
-**
-**
-** Purpose: The interface implemented by an object which
-** supports surrogates.
-**
-**
-===========================================================*/
-namespace System.Runtime.Serialization {
- using System.Runtime.Remoting;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
- using System;
- using System.Reflection;
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISerializationSurrogate {
- // Interface does not need to be marked with the serializable attribute
- // Returns a SerializationInfo completely populated with all of the data needed to reinstantiate the
- // the object at the other end of serialization.
- //
- void GetObjectData(Object obj, SerializationInfo info, StreamingContext context);
-
- // Reinflate the object using all of the information in data. The information in
- // members is used to find the particular field or property which needs to be set.
- //
- Object SetObjectData(Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/ISurrogateSelector.cs b/src/mscorlib/src/System/Runtime/Serialization/ISurrogateSelector.cs
deleted file mode 100644
index 87b7845894..0000000000
--- a/src/mscorlib/src/System/Runtime/Serialization/ISurrogateSelector.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** Interface: ISurrogateSelector
-**
-**
-** Purpose: A user-supplied class for doing the type to surrogate
-** mapping.
-**
-**
-===========================================================*/
-namespace System.Runtime.Serialization {
-
- using System.Runtime.Remoting;
- using System.Security.Permissions;
- using System;
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface ISurrogateSelector {
- // Interface does not need to be marked with the serializable attribute
- // Specifies the next ISurrogateSelector to be examined for surrogates if the current
- // instance doesn't have a surrogate for the given type and assembly in the given context.
- void ChainSelector(ISurrogateSelector selector);
-
- // Returns the appropriate surrogate for the given type in the given context.
- ISerializationSurrogate GetSurrogate(Type type, StreamingContext context, out ISurrogateSelector selector);
-
-
- // Return the next surrogate in the chain. Returns null if no more exist.
- ISurrogateSelector GetNextSelector();
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/MemberHolder.cs b/src/mscorlib/src/System/Runtime/Serialization/MemberHolder.cs
deleted file mode 100644
index 1303e40c27..0000000000
--- a/src/mscorlib/src/System/Runtime/Serialization/MemberHolder.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** Purpose: This is a lightweight class designed to hold the members
-** and StreamingContext for a particular class.
-**
-**
-============================================================*/
-namespace System.Runtime.Serialization {
-
- using System.Runtime.Remoting;
- using System;
- using System.Reflection;
- [Serializable]
- internal class MemberHolder {
-// disable csharp compiler warning #0414: field assigned unused value
-#pragma warning disable 0414
- internal MemberInfo[] members = null;
-#pragma warning restore 0414
- internal Type memberType;
- internal StreamingContext context;
-
- internal MemberHolder(Type type, StreamingContext ctx) {
- memberType = type;
- context = ctx;
- }
-
- public override int GetHashCode() {
- return memberType.GetHashCode();
- }
-
- public override bool Equals(Object obj) {
- if (!(obj is MemberHolder)) {
- return false;
- }
-
- MemberHolder temp = (MemberHolder)obj;
-
- if (Object.ReferenceEquals(temp.memberType, memberType) && temp.context.State == context.State) {
- return true;
- }
-
- return false;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/SafeSerializationManager.cs b/src/mscorlib/src/System/Runtime/Serialization/SafeSerializationManager.cs
index 585d367605..260e873bc7 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/SafeSerializationManager.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/SafeSerializationManager.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
@@ -211,10 +211,7 @@ namespace System.Runtime.Serialization
private StreamingContext m_streamingContext;
private List<object> m_serializedStates = new List<object>();
- internal SafeSerializationEventArgs(StreamingContext streamingContext)
- {
- m_streamingContext = streamingContext;
- }
+ internal SafeSerializationEventArgs() {}
public void AddSerializedState(ISafeSerializationData serializedState)
{
@@ -226,11 +223,6 @@ namespace System.Runtime.Serialization
m_serializedStates.Add(serializedState);
}
- internal IList<object> SerializedStates
- {
- get { return m_serializedStates; }
- }
-
public StreamingContext StreamingContext
{
get { return m_streamingContext; }
@@ -245,202 +237,4 @@ namespace System.Runtime.Serialization
// this object.
void CompleteDeserialization(object deserialized);
}
-#if FEATURE_SERIALIZATION
- // Helper class to implement safe serialization. Concrete ISerializable types which want to allow
- // transparent subclasses code to participate in serialization should contain an instance of
- // SafeSerializationManager and wire up to it as described in code:#SafeSerialization.
- [Serializable]
- internal sealed class SafeSerializationManager : IObjectReference, ISerializable
- {
- // Saved states to store in the serialization stream. This is typed as object rather than
- // ISafeSerializationData because ISafeSerializationData can't be marked serializable.
- private IList<object> m_serializedStates;
-
- // This is the SerializationInfo that is used when the SafeSerializationManager type has replaced
- // itself as the target of serialziation. It is not used directly by the safe serialization code,
- // but just held onto so that the real object being deserialzed can use it later.
- private SerializationInfo m_savedSerializationInfo;
-
- // Real object that we've deserialized - this is stored when we complete construction and calling
- // the deserialization .ctors on it and is used when we need to notify the stored safe
- // deserialization data that they should populate the object with their fields.
- private object m_realObject;
-
- // Real type that should be deserialized
- private RuntimeType m_realType;
-
- // Event fired when we need to collect state to serialize into the parent object
- internal event EventHandler<SafeSerializationEventArgs> SerializeObjectState;
-
- // Name that is used to store the real type being deserialized in the main SerializationInfo
- private const string RealTypeSerializationName = "CLR_SafeSerializationManager_RealType";
-
- internal SafeSerializationManager()
- {
- }
-
- private SafeSerializationManager(SerializationInfo info, StreamingContext context)
- {
- // We need to determine if we're being called to really deserialize a SafeSerializationManager,
- // or if we're being called because we've intercepted the deserialization callback for the real
- // object being deserialized. We use the presence of the RealTypeSerializationName field in the
- // serialization info to indicate that this is the interception callback and we just need to
- // safe the info. If that field is not present, then we should be in a real deserialization
- // construction.
- RuntimeType realType = info.GetValueNoThrow(RealTypeSerializationName, typeof(RuntimeType)) as RuntimeType;
-
- if (realType == null)
- {
- m_serializedStates = info.GetValue("m_serializedStates", typeof(List<object>)) as List<object>;
- }
- else
- {
- m_realType = realType;
- m_savedSerializationInfo = info;
- }
- }
-
- // Determine if the serialization manager is in an active state - that is if any code is hooked up
- // to use it for serialization
- internal bool IsActive
- {
- get { return SerializeObjectState != null; }
- }
-
- // CompleteSerialization is called by the base ISerializable in its GetObjectData method. It is
- // responsible for gathering up the serialized object state of any delegates that wish to add their
- // own state to the serialized object.
- internal void CompleteSerialization(object serializedObject,
- SerializationInfo info,
- StreamingContext context)
- {
- Contract.Requires(serializedObject != null);
- Contract.Requires(info != null);
- Contract.Requires(typeof(ISerializable).IsAssignableFrom(serializedObject.GetType()));
- Contract.Requires(serializedObject.GetType().IsAssignableFrom(info.ObjectType));
-
- // Clear out any stale state
- m_serializedStates = null;
-
- // We only want to kick in our special serialization sauce if someone wants to participate in
- // it, otherwise if we have no delegates registered there's no reason for us to get in the way
- // of the regular serialization machinery.
- EventHandler<SafeSerializationEventArgs> serializeObjectStateEvent = SerializeObjectState;
- if (serializeObjectStateEvent != null)
- {
- // Get any extra data to add to our serialization state now
- SafeSerializationEventArgs eventArgs = new SafeSerializationEventArgs(context);
- serializeObjectStateEvent(serializedObject, eventArgs);
- m_serializedStates = eventArgs.SerializedStates;
-
- // Replace the type to be deserialized by the standard serialization code paths with
- // ourselves, which allows us to control the deserialization process.
- info.AddValue(RealTypeSerializationName, serializedObject.GetType(), typeof(RuntimeType));
- info.SetType(typeof(SafeSerializationManager));
- }
- }
-
- // CompleteDeserialization is called by the base ISerializable object's OnDeserialized handler to
- // finish the deserialization of the object by notifying the saved states that they should
- // re-populate their portions of the deserialized object.
- internal void CompleteDeserialization(object deserializedObject)
- {
- Contract.Requires(deserializedObject != null);
-
- if (m_serializedStates != null)
- {
- foreach (ISafeSerializationData serializedState in m_serializedStates)
- {
- serializedState.CompleteDeserialization(deserializedObject);
- }
- }
- }
-
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- info.AddValue("m_serializedStates", m_serializedStates, typeof(List<IDeserializationCallback>));
- }
-
- // GetRealObject intercepts the deserialization process in order to allow deserializing part of the
- // object's inheritance heirarchy using standard ISerializable constructors, and the remaining
- // portion using the saved serialization states.
- object IObjectReference.GetRealObject(StreamingContext context)
- {
- // If we've already deserialized the real object, use that rather than deserializing it again
- if (m_realObject != null)
- {
- return m_realObject;
- }
-
- // If we don't have a real type to deserialize, then this is really a SafeSerializationManager
- // and we don't need to rebuild the object that we're standing in for.
- if (m_realType == null)
- {
- return this;
- }
-
- // Look for the last type in GetRealType's inheritance hierarchy which implements a critical
- // deserialization constructor. This will be the object that we use as the deserialization
- // construction type to initialize via standard ISerializable semantics
-
- // First build up the chain starting at the type below Object and working to the real type we
- // serialized.
- Stack inheritanceChain = new Stack();
- RuntimeType currentType = m_realType;
- do
- {
- inheritanceChain.Push(currentType);
- currentType = currentType.BaseType as RuntimeType;
- }
- while (currentType != typeof(object));
-
- // Now look for the first type that does not implement the ISerializable .ctor. When we find
- // that, previousType will point at the last type that did implement the .ctor. We require that
- // the .ctor we invoke also be non-transparent
- RuntimeConstructorInfo serializationCtor = null;
- RuntimeType previousType = null;
- do
- {
- previousType = currentType;
- currentType = inheritanceChain.Pop() as RuntimeType;
- serializationCtor = currentType.GetSerializationCtor();
- }
- while (serializationCtor != null && serializationCtor.IsSecurityCritical);
-
- // previousType is the last type that did implement the deserialization .ctor before the first
- // type that did not, so we'll grab it's .ctor to use for deserialization.
- BCLDebug.Assert(previousType != null, "We should have at least one inheritance from the base type");
- serializationCtor = ObjectManager.GetConstructor(previousType);
-
- // Allocate an instance of the final type and run the selected .ctor on that instance to get the
- // standard ISerializable initialization done.
- object deserialized = FormatterServices.GetUninitializedObject(m_realType);
- serializationCtor.SerializationInvoke(deserialized, m_savedSerializationInfo, context);
- m_savedSerializationInfo = null;
- m_realType = null;
-
- // Save away the real object that was deserialized so that we can fill it in later, and return
- // it back as the object that should result from the final deserialization.
- m_realObject = deserialized;
- return deserialized;
- }
-
- [OnDeserialized]
- private void OnDeserialized(StreamingContext context)
- {
- // We only need to complete deserialization if we were hooking the deserialization process. If
- // we have not deserialized an object in the GetRealObject call, then there's nothing more for
- // us to do here.
- if (m_realObject != null)
- {
- // Fire the real object's OnDeserialized method if they registered one. Since we replaced
- // ourselves as the target of the deserialization, OnDeserialized on the target won't
- // automatically get triggered unless we do it manually.
- SerializationEvents cache = SerializationEventsCache.GetSerializationEventsForType(m_realObject.GetType());
- cache.InvokeOnDeserialized(m_realObject, context);
- m_realObject = null;
- }
- }
- }
-#endif
}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/SerializationAttributes.cs b/src/mscorlib/src/System/Runtime/Serialization/SerializationAttributes.cs
index 27c5751cc6..38abffa66e 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/SerializationAttributes.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/SerializationAttributes.cs
@@ -17,7 +17,6 @@ namespace System.Runtime.Serialization
using System.Reflection;
[AttributeUsage(AttributeTargets.Field, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class OptionalFieldAttribute : Attribute
{
int versionAdded = 1;
@@ -38,25 +37,21 @@ namespace System.Runtime.Serialization
}
[AttributeUsage(AttributeTargets.Method, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class OnSerializingAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Method, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class OnSerializedAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Method, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class OnDeserializingAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Method, Inherited=false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class OnDeserializedAttribute : Attribute
{
}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/SerializationBinder.cs b/src/mscorlib/src/System/Runtime/Serialization/SerializationBinder.cs
deleted file mode 100644
index 7457991008..0000000000
--- a/src/mscorlib/src/System/Runtime/Serialization/SerializationBinder.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** Interface: SerializationBinder
-**
-**
-** Purpose: The base class of serialization binders.
-**
-**
-===========================================================*/
-namespace System.Runtime.Serialization {
- using System;
-
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public abstract class SerializationBinder {
-
- public virtual void BindToName(Type serializedType, out String assemblyName, out String typeName)
- {
- assemblyName = null;
- typeName = null;
- }
-
- public abstract Type BindToType(String assemblyName, String typeName);
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/SerializationException.cs b/src/mscorlib/src/System/Runtime/Serialization/SerializationException.cs
index b88ccfd706..e9cb79b7af 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/SerializationException.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/SerializationException.cs
@@ -17,7 +17,6 @@ namespace System.Runtime.Serialization {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class SerializationException : SystemException {
diff --git a/src/mscorlib/src/System/Runtime/Serialization/SerializationFieldInfo.cs b/src/mscorlib/src/System/Runtime/Serialization/SerializationFieldInfo.cs
deleted file mode 100644
index 82536ce3b4..0000000000
--- a/src/mscorlib/src/System/Runtime/Serialization/SerializationFieldInfo.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** Purpose: Provides a methods of representing imaginary fields
-** which are unique to serialization. In this case, what we're
-** representing is the private members of parent classes. We
-** aggregate the RuntimeFieldInfo associated with this member
-** and return a managled form of the name. The name that we
-** return is .parentname.fieldname
-**
-**
-============================================================*/
-
-namespace System.Runtime.Serialization {
-
- using System;
- using System.Reflection;
- using System.Globalization;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Threading;
-
- internal sealed class SerializationFieldInfo : FieldInfo {
-
- internal const String FakeNameSeparatorString = "+";
-
- private RuntimeFieldInfo m_field;
- private String m_serializationName;
-
- public override Module Module { get { return m_field.Module; } }
- public override int MetadataToken { get { return m_field.MetadataToken; } }
-
- internal SerializationFieldInfo(RuntimeFieldInfo field, String namePrefix) {
- Debug.Assert(field!=null, "[SerializationFieldInfo.ctor]field!=null");
- Debug.Assert(namePrefix!=null, "[SerializationFieldInfo.ctor]namePrefix!=null");
-
- m_field = field;
- m_serializationName = String.Concat(namePrefix, FakeNameSeparatorString, m_field.Name);
- }
-
- //
- // MemberInfo methods
- //
- public override String Name {
- get {
- return m_serializationName;
- }
- }
-
- public override Type DeclaringType {
- get {
- return m_field.DeclaringType;
- }
- }
-
- public override Type ReflectedType {
- get {
- return m_field.ReflectedType;
- }
- }
-
- public override Object[] GetCustomAttributes(bool inherit) {
- return m_field.GetCustomAttributes(inherit);
- }
-
- public override Object[] GetCustomAttributes(Type attributeType, bool inherit) {
- return m_field.GetCustomAttributes(attributeType, inherit);
- }
-
- public override bool IsDefined(Type attributeType, bool inherit) {
- return m_field.IsDefined(attributeType, inherit);
- }
-
- //
- // FieldInfo methods
- //
- public override Type FieldType {
- get {
- return m_field.FieldType;
- }
- }
-
- public override Object GetValue(Object obj) {
- return m_field.GetValue(obj);
- }
-
- internal Object InternalGetValue(Object obj) {
- RtFieldInfo field = m_field as RtFieldInfo;
- if (field != null)
- {
- field.CheckConsistency(obj);
- return field.UnsafeGetValue(obj);
- }
- else
- return m_field.GetValue(obj);
- }
-
- public override void SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture) {
- m_field.SetValue(obj, value, invokeAttr, binder, culture);
- }
-
- internal void InternalSetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture) {
- RtFieldInfo field = m_field as RtFieldInfo;
- if (field != null)
- {
- field.CheckConsistency(obj);
- field.UnsafeSetValue(obj, value, invokeAttr, binder, culture);
- }
- else
- m_field.SetValue(obj, value, invokeAttr, binder, culture);
- }
-
- internal RuntimeFieldInfo FieldInfo {
- get {
- return m_field;
- }
- }
-
- public override RuntimeFieldHandle FieldHandle {
- get {
- return m_field.FieldHandle;
- }
- }
-
- public override FieldAttributes Attributes {
- get {
- return m_field.Attributes;
- }
- }
- }
-}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/SerializationInfo.cs b/src/mscorlib/src/System/Runtime/Serialization/SerializationInfo.cs
index 55909c85fd..45521f2397 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/SerializationInfo.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/SerializationInfo.cs
@@ -24,7 +24,6 @@ namespace System.Runtime.Serialization
using System.Security;
using System.Runtime.CompilerServices;
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class SerializationInfo
{
private const int defaultSize = 4;
@@ -146,49 +145,10 @@ namespace System.Runtime.Serialization
}
}
- private static bool Compare(byte[] a, byte[] b)
- {
- // if either or both assemblies do not have public key token, we should demand, hence, returning false will force a demand
- if (a == null || b == null || a.Length == 0 || b.Length == 0 || a.Length != b.Length)
- {
- return false;
- }
- else
- {
- for (int i = 0; i < a.Length; i++)
- {
- if (a[i] != b[i]) return false;
- }
-
- return true;
- }
- }
-
internal static void DemandForUnsafeAssemblyNameAssignments(string originalAssemblyName, string newAssemblyName)
{
}
- internal static bool IsAssemblyNameAssignmentSafe(string originalAssemblyName, string newAssemblyName)
- {
- if (originalAssemblyName == newAssemblyName)
- {
- return true;
- }
-
- AssemblyName originalAssembly = new AssemblyName(originalAssemblyName);
- AssemblyName newAssembly = new AssemblyName(newAssemblyName);
-
- // mscorlib will get loaded by the runtime regardless of its string casing or its public key token,
- // so setting the assembly name to mscorlib must always be protected by a demand
- if (string.Equals(newAssembly.Name, s_mscorlibAssemblySimpleName, StringComparison.OrdinalIgnoreCase) ||
- string.Equals(newAssembly.Name, s_mscorlibFileName, StringComparison.OrdinalIgnoreCase))
- {
- return false;
- }
-
- return Compare(originalAssembly.GetPublicKeyToken(), newAssembly.GetPublicKeyToken());
- }
-
public int MemberCount
{
get
@@ -467,7 +427,6 @@ namespace System.Runtime.Serialization
return m_data[index];
}
- [System.Runtime.InteropServices.ComVisible(true)]
private Object GetElementNoThrow(String name, out Type foundType)
{
int index = FindElement(name);
@@ -518,7 +477,6 @@ namespace System.Runtime.Serialization
return m_converter.Convert(value, type);
}
- [System.Runtime.InteropServices.ComVisible(true)]
internal Object GetValueNoThrow(String name, Type type)
{
Type foundType;
@@ -741,22 +699,5 @@ namespace System.Runtime.Serialization
return m_converter.ToString(value);
}
- internal string[] MemberNames
- {
- get
- {
- return m_members;
- }
-
- }
-
- internal object[] MemberValues
- {
- get
- {
- return m_data;
- }
- }
-
}
}
diff --git a/src/mscorlib/src/System/Runtime/Serialization/SerializationInfoEnumerator.cs b/src/mscorlib/src/System/Runtime/Serialization/SerializationInfoEnumerator.cs
index 32c65492e1..0858dfc19f 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/SerializationInfoEnumerator.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/SerializationInfoEnumerator.cs
@@ -21,7 +21,6 @@ namespace System.Runtime.Serialization {
//
// The tuple returned by SerializationInfoEnumerator.Current.
//
-[System.Runtime.InteropServices.ComVisible(true)]
public struct SerializationEntry {
private Type m_type;
private Object m_value;
@@ -57,7 +56,6 @@ namespace System.Runtime.Serialization {
// This does not snapshot the values, it just keeps pointers to the
// member variables of the SerializationInfo that created it.
//
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class SerializationInfoEnumerator : IEnumerator {
String[] m_members;
Object[] m_data;
diff --git a/src/mscorlib/src/System/Runtime/Serialization/StreamingContext.cs b/src/mscorlib/src/System/Runtime/Serialization/StreamingContext.cs
index ef4a096a51..c01a3edc4f 100644
--- a/src/mscorlib/src/System/Runtime/Serialization/StreamingContext.cs
+++ b/src/mscorlib/src/System/Runtime/Serialization/StreamingContext.cs
@@ -16,7 +16,6 @@ namespace System.Runtime.Serialization {
using System.Runtime.Remoting;
using System;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct StreamingContext {
internal Object m_additionalContext;
internal StreamingContextStates m_state;
@@ -59,7 +58,6 @@ namespace System.Runtime.Serialization {
// **********************************************************
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum StreamingContextStates {
CrossProcess=0x01,
CrossMachine=0x02,
diff --git a/src/mscorlib/src/System/Runtime/Versioning/CompatibilitySwitch.cs b/src/mscorlib/src/System/Runtime/Versioning/CompatibilitySwitch.cs
index 6bf8f8cf45..3410f020be 100644
--- a/src/mscorlib/src/System/Runtime/Versioning/CompatibilitySwitch.cs
+++ b/src/mscorlib/src/System/Runtime/Versioning/CompatibilitySwitch.cs
@@ -7,7 +7,7 @@ using System.Runtime.CompilerServices;
namespace System.Runtime.Versioning
{
- public static class CompatibilitySwitch
+ internal static class CompatibilitySwitch
{
/* This class contains 3 sets of api:
* 1. internal apis : These apis are supposed to be used by mscorlib.dll and other assemblies which use the <runtime> section in config
@@ -19,38 +19,14 @@ namespace System.Runtime.Versioning
* 3. specialized apis: These apis are defined in order to retrieve a specific value defined in CLR Config. That value can have specific look-up rules
* for the order and location of the config sources used.
*
- * These apis are for internal use only for FX assmeblies. It has not been decided if they can be used by OOB components due to EULA restrictions
+ * These apis are for internal use only for FX assemblies. It has not been decided if they can be used by OOB components due to EULA restrictions
*/
- public static bool IsEnabled(string compatibilitySwitchName)
- {
- return IsEnabledInternalCall(compatibilitySwitchName, true);
- }
-
- public static string GetValue(string compatibilitySwitchName)
- {
- // This is used by AppContext.TryGetSwitch to check switch overrides in the Windows Quirk DB
- // If this method is updated to check other locations than the DB, please ensure compat with
- // the AppContext class.
- return GetValueInternalCall(compatibilitySwitchName, true);
- }
-
- internal static bool IsEnabledInternal(string compatibilitySwitchName)
- {
- return IsEnabledInternalCall(compatibilitySwitchName, false);
- }
-
internal static string GetValueInternal(string compatibilitySwitchName)
{
return GetValueInternalCall(compatibilitySwitchName, false);
}
[MethodImpl(MethodImplOptions.InternalCall)]
- internal static extern string GetAppContextOverridesInternalCall();
-
- [MethodImpl(MethodImplOptions.InternalCall)]
- private static extern bool IsEnabledInternalCall(string compatibilitySwitchName, bool onlyDB);
-
- [MethodImpl(MethodImplOptions.InternalCall)]
private static extern string GetValueInternalCall(string compatibilitySwitchName, bool onlyDB);
}
}
diff --git a/src/mscorlib/src/System/Runtime/Versioning/TargetFrameworkId.cs b/src/mscorlib/src/System/Runtime/Versioning/TargetFrameworkId.cs
deleted file mode 100644
index 0a5e668a92..0000000000
--- a/src/mscorlib/src/System/Runtime/Versioning/TargetFrameworkId.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** Purpose: Describe the target framework of the application or AppDomain.
-**
-===========================================================*/
-using System;
-using System.Runtime.CompilerServices;
-
-namespace System.Runtime.Versioning
-{
- // What type of .NET Framework was this application compiled against?
- [FriendAccessAllowed]
- internal enum TargetFrameworkId
- {
- NotYetChecked = 0,
- Unrecognized = 1, // Unknown type, such as a new SKU (like watches or cars)
- Unspecified = 2, // The TargetFrameworkAttribute was created in v4.0. And apps compiled outside VS will not have this attribute.
- NetFramework = 3, // Desktop - Client or Server or ServerCore.
- Portable = 4, // Portable Library v1 Note: We do not expect people to build executables against portable libraries!
- NetCore = 5, // .NET Core = Windows 8 Immersive and Portable Library v2+
- Silverlight = 6, // Silverlight but not the Phone
- Phone = 7, // Windows Phone 7 or higher
- }
-}
diff --git a/src/mscorlib/src/System/RuntimeArgumentHandle.cs b/src/mscorlib/src/System/RuntimeArgumentHandle.cs
index d1bc86b49a..3e13614930 100644
--- a/src/mscorlib/src/System/RuntimeArgumentHandle.cs
+++ b/src/mscorlib/src/System/RuntimeArgumentHandle.cs
@@ -13,7 +13,6 @@ namespace System {
// This corresponds to EE VARARGS cookie.
// Cannot be serialized
- [System.Runtime.InteropServices.ComVisible(true)]
public struct RuntimeArgumentHandle
{
private IntPtr m_ptr;
diff --git a/src/mscorlib/src/System/RuntimeHandles.cs b/src/mscorlib/src/System/RuntimeHandles.cs
index 127da1e0da..39c85ad4e2 100644
--- a/src/mscorlib/src/System/RuntimeHandles.cs
+++ b/src/mscorlib/src/System/RuntimeHandles.cs
@@ -19,13 +19,11 @@ namespace System
using System.Text;
using System.Globalization;
using System.Security;
- using System.Security.Permissions;
using Microsoft.Win32.SafeHandles;
using System.Diagnostics.Contracts;
using StackCrawlMark = System.Threading.StackCrawlMark;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public unsafe struct RuntimeTypeHandle : ISerializable
{
// Returns handle for interop with EE. The handle is guaranteed to be non-null.
@@ -89,14 +87,6 @@ namespace System
public static bool operator !=(RuntimeTypeHandle left, object right) { return !left.Equals(right); }
public static bool operator !=(object left, RuntimeTypeHandle right) { return !right.Equals(left); }
-
- internal static RuntimeTypeHandle EmptyHandle
- {
- get
- {
- return new RuntimeTypeHandle(null);
- }
- }
// This is the RuntimeType for the type
@@ -107,7 +97,6 @@ namespace System
return m_type != null ? m_type.GetHashCode() : 0;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public override bool Equals(object obj)
{
if(!(obj is RuntimeTypeHandle))
@@ -117,7 +106,6 @@ namespace System
return handle.m_type == m_type;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public bool Equals(RuntimeTypeHandle handle)
{
return handle.m_type == m_type;
@@ -139,11 +127,6 @@ namespace System
m_type = type;
}
- internal bool IsNullHandle()
- {
- return m_type == null;
- }
-
internal static bool IsPrimitive(RuntimeType type)
{
CorElementType corElemType = GetCorElementType(type);
@@ -243,11 +226,9 @@ namespace System
internal extern static RuntimeAssembly GetAssembly(RuntimeType type);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal extern static RuntimeModule GetModule(RuntimeType type);
[CLSCompliant(false)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public ModuleHandle GetModuleHandle()
{
return new ModuleHandle(RuntimeTypeHandle.GetModule(m_type));
@@ -376,9 +357,6 @@ namespace System
internal extern static bool IsComObject(RuntimeType type, bool isGenericCOM);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal extern static bool IsContextful(RuntimeType type);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern static bool IsInterface(RuntimeType type);
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
@@ -423,9 +401,6 @@ namespace System
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal extern static bool HasProxyAttribute(RuntimeType type);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern static bool IsValueType(RuntimeType type);
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
@@ -503,11 +478,6 @@ namespace System
return type;
}
- internal static Type GetTypeByName(string name, ref StackCrawlMark stackMark)
- {
- return GetTypeByName(name, false, false, false, ref stackMark, false);
- }
-
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
private extern static void GetTypeByNameUsingCARules(string name, RuntimeModule scope, ObjectHandleOnStack type);
@@ -612,11 +582,6 @@ namespace System
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern static bool HasInstantiation(RuntimeType type);
- internal bool HasInstantiation()
- {
- return HasInstantiation(GetTypeChecked());
- }
-
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
private extern static void GetGenericTypeDefinition(RuntimeTypeHandle type, ObjectHandleOnStack retType);
@@ -637,11 +602,6 @@ namespace System
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern static bool IsGenericVariable(RuntimeType type);
- internal bool IsGenericVariable()
- {
- return IsGenericVariable(GetTypeChecked());
- }
-
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern static int GetGenericVariableIndex(RuntimeType type);
@@ -806,7 +766,6 @@ namespace System
}
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public unsafe struct RuntimeMethodHandle : ISerializable
{
// Returns handle for interop with EE. The handle is guaranteed to be non-null.
@@ -817,11 +776,6 @@ namespace System
return method;
}
- internal static RuntimeMethodHandle EmptyHandle
- {
- get { return new RuntimeMethodHandle(); }
- }
-
private IRuntimeMethodInfo m_value;
internal RuntimeMethodHandle(IRuntimeMethodInfo method)
@@ -883,7 +837,6 @@ namespace System
return ValueType.GetHashCodeOfPtr(Value);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public override bool Equals(object obj)
{
if (!(obj is RuntimeMethodHandle))
@@ -904,7 +857,6 @@ namespace System
return !left.Equals(right);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public bool Equals(RuntimeMethodHandle handle)
{
return handle.Value == Value;
@@ -1032,52 +984,6 @@ namespace System
#endregion
- [DebuggerStepThroughAttribute]
- [Diagnostics.DebuggerHidden]
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal extern static void SerializationInvoke(IRuntimeMethodInfo method,
- Object target, SerializationInfo info, ref StreamingContext context);
-
- // This returns true if the token is SecurityTransparent:
- // just the token - does not consider including module/type etc.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern bool _IsTokenSecurityTransparent(RuntimeModule module, int metaDataToken);
-
- internal static bool IsTokenSecurityTransparent(Module module, int metaDataToken)
- {
- return _IsTokenSecurityTransparent(module.ModuleHandle.GetRuntimeModule(), metaDataToken);
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.Bool)]
- private static extern bool _IsSecurityCritical(IRuntimeMethodInfo method);
-
- internal static bool IsSecurityCritical(IRuntimeMethodInfo method)
- {
- return _IsSecurityCritical(method);
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.Bool)]
- private static extern bool _IsSecuritySafeCritical(IRuntimeMethodInfo method);
-
- internal static bool IsSecuritySafeCritical(IRuntimeMethodInfo method)
- {
- return _IsSecuritySafeCritical(method);
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.Bool)]
- private static extern bool _IsSecurityTransparent(IRuntimeMethodInfo method);
-
- internal static bool IsSecurityTransparent(IRuntimeMethodInfo method)
- {
- return _IsSecurityTransparent(method);
- }
-
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
private extern static void GetMethodInstantiation(RuntimeMethodHandleInternal method, ObjectHandleOnStack types, bool fAsRuntimeTypeArray);
@@ -1170,17 +1076,6 @@ namespace System
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern static Resolver GetResolver(RuntimeMethodHandleInternal method);
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetCallerType(StackCrawlMarkHandle stackMark, ObjectHandleOnStack retType);
-
- internal static RuntimeType GetCallerType(ref StackCrawlMark stackMark)
- {
- RuntimeType type = null;
- GetCallerType(JitHelpers.GetStackCrawlMarkHandle(ref stackMark), JitHelpers.GetObjectHandleOnStack(ref type));
- return type;
- }
-
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static MethodBody GetMethodBody(IRuntimeMethodInfo method, RuntimeType declaringType);
@@ -1202,13 +1097,6 @@ namespace System
// When in doubt, do not use.
internal struct RuntimeFieldHandleInternal
{
- internal static RuntimeFieldHandleInternal EmptyHandle
- {
- get
- {
- return new RuntimeFieldHandleInternal();
- }
- }
internal bool IsNullHandle()
{
@@ -1242,11 +1130,6 @@ namespace System
[StructLayout(LayoutKind.Sequential)]
internal class RuntimeFieldInfoStub : IRuntimeFieldInfo
{
- public RuntimeFieldInfoStub(IntPtr methodHandleValue, object keepalive)
- {
- m_keepalive = keepalive;
- m_fieldHandle = new RuntimeFieldHandleInternal(methodHandleValue);
- }
// These unused variables are used to ensure that this class has the same layout as RuntimeFieldInfo
#pragma warning disable 169
@@ -1268,7 +1151,6 @@ namespace System
}
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public unsafe struct RuntimeFieldHandle : ISerializable
{
// Returns handle for interop with EE. The handle is guaranteed to be non-null.
@@ -1311,7 +1193,6 @@ namespace System
return ValueType.GetHashCodeOfPtr(Value);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public override bool Equals(object obj)
{
if (!(obj is RuntimeFieldHandle))
@@ -1322,7 +1203,6 @@ namespace System
return handle.Value == Value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public unsafe bool Equals(RuntimeFieldHandle handle)
{
return handle.Value == Value;
@@ -1367,7 +1247,7 @@ namespace System
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern Object GetValue(RtFieldInfo field, Object instance, RuntimeType fieldType, RuntimeType declaringType, ref bool domainInitialized);
-
+
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern Object GetValueDirect(RtFieldInfo field, RuntimeType fieldType, void *pTypedRef, RuntimeType contextType);
@@ -1450,7 +1330,6 @@ namespace System
}
}
-[System.Runtime.InteropServices.ComVisible(true)]
public unsafe struct ModuleHandle
{
// Returns handle for interop with EE. The handle is guaranteed to be non-null.
@@ -1480,18 +1359,12 @@ namespace System
{
return m_ptr;
}
-
- internal bool IsNullHandle()
- {
- return m_ptr == null;
- }
public override int GetHashCode()
{
return m_ptr != null ? m_ptr.GetHashCode() : 0;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public override bool Equals(object obj)
{
if (!(obj is ModuleHandle))
@@ -1502,7 +1375,6 @@ namespace System
return handle.m_ptr == m_ptr;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public unsafe bool Equals(ModuleHandle handle)
{
return handle.m_ptr == m_ptr;
@@ -1546,7 +1418,7 @@ namespace System
{
ValidateModulePointer(module);
if (!ModuleHandle.GetMetadataImport(module).IsValidToken(typeToken))
- throw new ArgumentOutOfRangeException("metadataToken",
+ throw new ArgumentOutOfRangeException(nameof(typeToken),
Environment.GetResourceString("Argument_InvalidToken", typeToken, new ModuleHandle(module)));
int typeInstCount, methodInstCount;
@@ -1600,7 +1472,7 @@ namespace System
{
ValidateModulePointer(module);
if (!ModuleHandle.GetMetadataImport(module.GetNativeHandle()).IsValidToken(methodToken))
- throw new ArgumentOutOfRangeException("metadataToken",
+ throw new ArgumentOutOfRangeException(nameof(methodToken),
Environment.GetResourceString("Argument_InvalidToken", methodToken, new ModuleHandle(module)));
fixed (IntPtr* typeInstArgs = typeInstantiationContext, methodInstArgs = methodInstantiationContext)
@@ -1628,7 +1500,7 @@ namespace System
{
ValidateModulePointer(module);
if (!ModuleHandle.GetMetadataImport(module.GetNativeHandle()).IsValidToken(fieldToken))
- throw new ArgumentOutOfRangeException("metadataToken",
+ throw new ArgumentOutOfRangeException(nameof(fieldToken),
Environment.GetResourceString("Argument_InvalidToken", fieldToken, new ModuleHandle(module)));
// defensive copy to be sure array is not mutated from the outside during processing
@@ -1667,17 +1539,6 @@ namespace System
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- private extern static void GetAssembly(RuntimeModule handle, ObjectHandleOnStack retAssembly);
-
- internal static RuntimeAssembly GetAssembly(RuntimeModule module)
- {
- RuntimeAssembly retAssembly = null;
- GetAssembly(module.GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref retAssembly));
- return retAssembly;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
internal extern static void GetModuleType(RuntimeModule handle, ObjectHandleOnStack type);
internal static RuntimeType GetModuleType(RuntimeModule module)
@@ -1836,9 +1697,6 @@ namespace System
internal abstract byte[] ResolveSignature(int token, int fromMethod);
//
internal abstract MethodInfo GetDynamicMethod();
-#if FEATURE_COMPRESSEDSTACK
- internal abstract CompressedStack GetSecurityContext();
-#endif
}
}
diff --git a/src/mscorlib/src/System/SByte.cs b/src/mscorlib/src/System/SByte.cs
index da6ac5c88f..e738dfc546 100644
--- a/src/mscorlib/src/System/SByte.cs
+++ b/src/mscorlib/src/System/SByte.cs
@@ -19,7 +19,6 @@ namespace System {
// A place holder class for signed bytes.
[Serializable]
[CLSCompliant(false), System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct SByte : IComparable, IFormattable, IConvertible
, IComparable<SByte>, IEquatable<SByte>
{
diff --git a/src/mscorlib/src/System/Security/AccessControl/Enums.cs b/src/mscorlib/src/System/Security/AccessControl/Enums.cs
deleted file mode 100644
index 20f5c5f91a..0000000000
--- a/src/mscorlib/src/System/Security/AccessControl/Enums.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Runtime.InteropServices;
-
-namespace System.Security.AccessControl
-{
- [Flags]
- public enum InheritanceFlags
- {
- None = 0x00,
- ContainerInherit = 0x01,
- ObjectInherit = 0x02,
- }
-
- [Flags]
- public enum PropagationFlags
- {
- None = 0x00,
- NoPropagateInherit = 0x01,
- InheritOnly = 0x02,
- }
-
- [Flags]
- public enum AuditFlags
- {
- None = 0x00,
- Success = 0x01,
- Failure = 0x02,
- }
-
- [Flags]
- public enum SecurityInfos
- {
- Owner = 0x00000001,
- Group = 0x00000002,
- DiscretionaryAcl = 0x00000004,
- SystemAcl = 0x00000008,
-
- }
-
-
- public enum ResourceType
- {
- Unknown = 0x00,
- FileObject = 0x01,
- Service = 0x02,
- Printer = 0x03,
- RegistryKey = 0x04,
- LMShare = 0x05,
- KernelObject = 0x06,
- WindowObject = 0x07,
- DSObject = 0x08,
- DSObjectAll = 0x09,
- ProviderDefined = 0x0A,
- WmiGuidObject = 0x0B,
- RegistryWow6432Key = 0x0C,
- }
-
- [Flags]
- public enum AccessControlSections {
- None = 0,
- Audit = 0x1,
- Access = 0x2,
- Owner = 0x4,
- Group = 0x8,
- All = 0xF
- }
-
- [Flags]
- public enum AccessControlActions {
- None = 0
- }
-}
diff --git a/src/mscorlib/src/System/Security/Attributes.cs b/src/mscorlib/src/System/Security/Attributes.cs
index e4ebc53053..f67a9f0ad1 100644
--- a/src/mscorlib/src/System/Security/Attributes.cs
+++ b/src/mscorlib/src/System/Security/Attributes.cs
@@ -19,7 +19,6 @@ namespace System.Security
// Indicates that the target P/Invoke method(s) should skip the per-call
// security checked for unmanaged code permission.
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = true, Inherited = false )]
- [System.Runtime.InteropServices.ComVisible(true)]
sealed public class SuppressUnmanagedCodeSecurityAttribute : System.Attribute
{
}
@@ -27,7 +26,6 @@ namespace System.Security
// UnverifiableCodeAttribute:
// Indicates that the target module contains unverifiable code.
[AttributeUsage(AttributeTargets.Module, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
sealed public class UnverifiableCodeAttribute : System.Attribute
{
}
@@ -38,7 +36,6 @@ namespace System.Security
// For v.1, this is valid only on Assemblies, but could be expanded to
// include Module, Method, class
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false )]
- [System.Runtime.InteropServices.ComVisible(true)]
sealed public class AllowPartiallyTrustedCallersAttribute : System.Attribute
{
private PartialTrustVisibilityLevel _visibilityLevel;
diff --git a/src/mscorlib/src/System/Security/BuiltInPermissionSets.cs b/src/mscorlib/src/System/Security/BuiltInPermissionSets.cs
deleted file mode 100644
index 48539574af..0000000000
--- a/src/mscorlib/src/System/Security/BuiltInPermissionSets.cs
+++ /dev/null
@@ -1,255 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-
-using System;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.Security.Permissions;
-using Microsoft.Win32;
-
-namespace System.Security
-{
- internal static class BuiltInPermissionSets
- {
- //
- // Raw PermissionSet XML - the built in permission sets are expressed in XML form since they contain
- // permissions from assemblies other than mscorlib.
- //
-
- private static readonly string s_everythingXml =
- @"<PermissionSet class = ""System.Security.NamedPermissionSet""
- version = ""1""
- Name = ""Everything""
- Description = """ + Environment.GetResourceString("Policy_PS_Everything") + @"""
- <IPermission class = ""System.Data.OleDb.OleDbPermission, " + AssemblyRef.SystemData + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Data.SqlClient.SqlClientPermission, " + AssemblyRef.SystemData + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Diagnostics.PerformanceCounterPermission, " + AssemblyRef.System + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Net.DnsPermission, " + AssemblyRef.System + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Net.SocketPermission, " + AssemblyRef.System + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Net.WebPermission, " + AssemblyRef.System + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.DataProtectionPermission, " + AssemblyRef.SystemSecurity + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.EnvironmentPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Diagnostics.EventLogPermission, " + AssemblyRef.System + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.FileDialogPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.FileIOPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.IsolatedStorageFilePermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.KeyContainerPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Drawing.Printing.PrintingPermission, " + AssemblyRef.SystemDrawing + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.ReflectionPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.RegistryPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.SecurityPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Flags = ""Assertion, UnmanagedCode, Execution, ControlThread, ControlEvidence, ControlPolicy, ControlAppDomain, SerializationFormatter, ControlDomainPolicy, ControlPrincipal, RemotingConfiguration, Infrastructure, BindingRedirects"" />
- <IPermission class = ""System.Security.Permissions.UIPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.StorePermission, " + AssemblyRef.System + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.TypeDescriptorPermission, " + AssemblyRef.System + @"""
- version = ""1""
- Unrestricted = ""true"" />
- </PermissionSet>";
-
- private static readonly string s_executionXml =
- @"<PermissionSet class = ""System.Security.NamedPermissionSet""
- version = ""1""
- Name = ""Execution""
- Description = """ + Environment.GetResourceString("Policy_PS_Execution") + @""">
- <IPermission class = ""System.Security.Permissions.SecurityPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Flags = ""Execution"" />
- </PermissionSet>";
-
- private static readonly string s_fullTrustXml =
- @"<PermissionSet class = ""System.Security.NamedPermissionSet""
- version = ""1""
- Unrestricted = ""true""
- Name = ""FullTrust""
- Description = """ + Environment.GetResourceString("Policy_PS_FullTrust") + @""" />";
-
- private static readonly string s_internetXml =
- @"<PermissionSet class = ""System.Security.NamedPermissionSet""
- version = ""1""
- Name = ""Internet""
- Description = """ + Environment.GetResourceString("Policy_PS_Internet") + @""">
- <IPermission class = ""System.Drawing.Printing.PrintingPermission, " + AssemblyRef.SystemDrawing + @"""
- version = ""1""
- Level = ""SafePrinting"" />
- <IPermission class = ""System.Security.Permissions.FileDialogPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Access = ""Open"" />
- <IPermission class = ""System.Security.Permissions.IsolatedStorageFilePermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- UserQuota = ""1024000""
- Allowed = ""ApplicationIsolationByUser"" />
- <IPermission class = ""System.Security.Permissions.SecurityPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Flags = ""Execution"" />
- <IPermission class = ""System.Security.Permissions.UIPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Window = ""SafeTopLevelWindows""
- Clipboard = ""OwnClipboard"" />
- </PermissionSet>";
-
- private static readonly string s_localIntranetXml =
- @"<PermissionSet class = ""System.Security.NamedPermissionSet""
- version = ""1""
- Name = ""LocalIntranet""
- Description = """ + Environment.GetResourceString("Policy_PS_LocalIntranet") + @""" >
- <IPermission class = ""System.Drawing.Printing.PrintingPermission, " + AssemblyRef.SystemDrawing + @"""
- version = ""1""
- Level = ""DefaultPrinting"" />
- <IPermission class = ""System.Net.DnsPermission, " + AssemblyRef.System + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.EnvironmentPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Read = ""USERNAME"" />
- <IPermission class = ""System.Security.Permissions.FileDialogPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- <IPermission class = ""System.Security.Permissions.IsolatedStorageFilePermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Allowed = ""AssemblyIsolationByUser""
- UserQuota = ""9223372036854775807""
- Expiry = ""9223372036854775807""
- Permanent = ""true"" />
- <IPermission class = ""System.Security.Permissions.ReflectionPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Flags = ""ReflectionEmit, RestrictedMemberAccess"" />
- <IPermission class = ""System.Security.Permissions.SecurityPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Flags = ""Execution, Assertion, BindingRedirects "" />
- <IPermission class = ""System.Security.Permissions.TypeDescriptorPermission, " + AssemblyRef.System + @"""
- version = ""1""
- Flags = ""RestrictedRegistrationAccess"" />
- <IPermission class = ""System.Security.Permissions.UIPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Unrestricted = ""true"" />
- </PermissionSet>";
-
- private static readonly string s_nothingXml =
- @"<PermissionSet class = ""System.Security.NamedPermissionSet""
- version = ""1""
- Name = ""Nothing""
- Description = """ + Environment.GetResourceString("Policy_PS_Nothing") + @""" />";
-
- private static readonly string s_skipVerificationXml =
- @"<PermissionSet class = ""System.Security.NamedPermissionSet""
- version = ""1""
- Name = ""SkipVerification""
- Description = """ + Environment.GetResourceString("Policy_PS_SkipVerification") + @""">
- <IPermission class = ""System.Security.Permissions.SecurityPermission, " + AssemblyRef.Mscorlib + @"""
- version = ""1""
- Flags = ""SkipVerification"" />
- </PermissionSet>";
-
- //
- // Built in permission set objects
- //
-
- private static NamedPermissionSet s_everything;
- private static NamedPermissionSet s_execution;
- private static NamedPermissionSet s_fullTrust;
- private static NamedPermissionSet s_internet;
- private static NamedPermissionSet s_localIntranet;
- private static NamedPermissionSet s_nothing;
- private static NamedPermissionSet s_skipVerification;
-
- //
- // Standard permission sets
- //
-
- internal static NamedPermissionSet Everything
- {
- get { return GetOrDeserializeExtendablePermissionSet(ref s_everything, s_everythingXml); }
- }
-
- internal static NamedPermissionSet Execution
- {
- get { return GetOrDeserializePermissionSet(ref s_execution, s_executionXml); }
- }
-
- internal static NamedPermissionSet FullTrust
- {
- get { return GetOrDeserializePermissionSet(ref s_fullTrust, s_fullTrustXml); }
- }
-
- internal static NamedPermissionSet Internet
- {
- get { return GetOrDeserializeExtendablePermissionSet(ref s_internet, s_internetXml); }
- }
-
- internal static NamedPermissionSet LocalIntranet
- {
- get { return GetOrDeserializeExtendablePermissionSet(ref s_localIntranet, s_localIntranetXml); }
- }
-
- internal static NamedPermissionSet Nothing
- {
- get { return GetOrDeserializePermissionSet(ref s_nothing, s_nothingXml); }
- }
-
- internal static NamedPermissionSet SkipVerification
- {
- get { return GetOrDeserializePermissionSet(ref s_skipVerification, s_skipVerificationXml); }
- }
-
- //
- // Utility methods to construct the permission set objects from the well known XML and any permission
- // set extensions if necessary
- //
-
- private static NamedPermissionSet GetOrDeserializeExtendablePermissionSet(
- ref NamedPermissionSet permissionSet,
- string permissionSetXml)
- {
- Contract.Requires(!String.IsNullOrEmpty(permissionSetXml));
- return permissionSet.Copy() as NamedPermissionSet;
- }
-
- private static NamedPermissionSet GetOrDeserializePermissionSet(ref NamedPermissionSet permissionSet,
- string permissionSetXml)
- {
- Debug.Assert(!String.IsNullOrEmpty(permissionSetXml));
- return permissionSet.Copy() as NamedPermissionSet;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/CodeAccessPermission.cs b/src/mscorlib/src/System/Security/CodeAccessPermission.cs
deleted file mode 100644
index 70504d902e..0000000000
--- a/src/mscorlib/src/System/Security/CodeAccessPermission.cs
+++ /dev/null
@@ -1,229 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security
-{
- using System.IO;
- using System.Threading;
- using System.Security;
- using System.Security.Util;
- using System.Security.Permissions;
- using System.Runtime.CompilerServices;
- using System.Collections;
- using System.Text;
- using System;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using IUnrestrictedPermission = System.Security.Permissions.IUnrestrictedPermission;
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- abstract public class CodeAccessPermission
- : IPermission, ISecurityEncodable, IStackWalk
- {
- // Static methods for manipulation of stack
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static void RevertAssert()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- SecurityRuntime.RevertAssert(ref stackMark);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Deny is obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public static void RevertDeny()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- SecurityRuntime.RevertDeny(ref stackMark);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static void RevertPermitOnly()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- SecurityRuntime.RevertPermitOnly(ref stackMark);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static void RevertAll()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- SecurityRuntime.RevertAll(ref stackMark);
- }
-
- //
- // Standard implementation of IPermission methods for
- // code-access permissions.
- //
-
- // Mark this method as requiring a security object on the caller's frame
- // so the caller won't be inlined (which would mess up stack crawling).
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public void Demand()
- {
- if (!this.CheckDemand( null ))
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCallersCaller;
- CodeAccessSecurityEngine.Check(this, ref stackMark);
- }
- }
-
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- internal static void Demand(PermissionType permissionType)
- {
- // The intent of the method is to be an internal mscorlib helper that Demands a specific permissiontype
- // without having to create objects.
- // The security annotation fxcop rule that flags all methods with a Demand() has logic
- // which checks for methods named Demand in types that implement IPermission or IStackWalk.
- Debug.Assert(new StackFrame().GetMethod().Name.Equals("Demand"), "This method needs to be named Demand");
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCallersCaller;
- CodeAccessSecurityEngine.SpecialDemand(permissionType, ref stackMark);
- }
-
- // Metadata for this method should be flaged with REQ_SQ so that
- // EE can allocate space on the stack frame for FrameSecurityDescriptor
-
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public void Assert()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- CodeAccessSecurityEngine.Assert(this, ref stackMark);
- }
-
-
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- static internal void Assert(bool allPossible)
- {
- // The intent of the method is to be an internal mscorlib helper that easily asserts for all possible permissions
- // without having to new a PermissionSet.
- // The security annotation fxcop rule that flags all methods with an Assert() has logic
- // which checks for methods named Assert in types that implement IPermission or IStackWalk.
- Debug.Assert(new StackFrame().GetMethod().Name.Equals("Assert"), "This method needs to be named Assert");
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- SecurityRuntime.AssertAllPossible(ref stackMark);
- }
-
- // Metadata for this method should be flaged with REQ_SQ so that
- // EE can allocate space on the stack frame for FrameSecurityDescriptor
-
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Deny is obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public void Deny()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- CodeAccessSecurityEngine.Deny(this, ref stackMark);
- }
-
- // Metadata for this method should be flaged with REQ_SQ so that
- // EE can allocate space on the stack frame for FrameSecurityDescriptor
-
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public void PermitOnly()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- CodeAccessSecurityEngine.PermitOnly(this, ref stackMark);
- }
-
- // IPermission interfaces
-
- // We provide a default implementation of Union here.
- // Any permission that doesn't provide its own representation
- // of Union will get this one and trigger CompoundPermission
- // We can take care of simple cases here...
-
- public virtual IPermission Union(IPermission other) {
- // The other guy could be null
- if (other == null) return(this.Copy());
-
- // otherwise we don't support it.
- throw new NotSupportedException(Environment.GetResourceString( "NotSupported_SecurityPermissionUnion" ));
- }
-
- //
- // HELPERS FOR IMPLEMENTING ABSTRACT METHODS
- //
-
- //
- // Protected helper
- //
-
- internal bool VerifyType(IPermission perm)
- {
- // if perm is null, then obviously not of the same type
- if ((perm == null) || (perm.GetType() != this.GetType())) {
- return(false);
- } else {
- return(true);
- }
- }
-
- // The IPermission Interface
- public abstract IPermission Copy();
- public abstract IPermission Intersect(IPermission target);
- public abstract bool IsSubsetOf(IPermission target);
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override bool Equals(Object obj)
- {
- IPermission perm = obj as IPermission;
- if(obj != null && perm == null)
- return false;
- try {
- if(!this.IsSubsetOf(perm))
- return false;
- if(perm != null && !perm.IsSubsetOf(this))
- return false;
- }
- catch (ArgumentException)
- {
- // Any argument exception implies inequality
- // Note that we require a try/catch block here because we have to deal with
- // custom permissions that may throw exceptions indiscriminately.
- return false;
- }
- return true;
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override int GetHashCode()
- {
- // This implementation is only to silence a compiler warning.
- return base.GetHashCode();
- }
-
-
- internal bool CheckDemand(CodeAccessPermission grant)
- {
- Debug.Assert( grant == null || grant.GetType().Equals( this.GetType() ), "CheckDemand not defined for permissions of different type" );
- return IsSubsetOf( grant );
- }
-
- internal bool CheckPermitOnly(CodeAccessPermission permitted)
- {
- Debug.Assert( permitted == null || permitted.GetType().Equals( this.GetType() ), "CheckPermitOnly not defined for permissions of different type" );
- return IsSubsetOf( permitted );
- }
-
- internal bool CheckDeny(CodeAccessPermission denied)
- {
- Debug.Assert( denied == null || denied.GetType().Equals( this.GetType() ), "CheckDeny not defined for permissions of different type" );
- IPermission intersectPerm = Intersect(denied);
- return (intersectPerm == null || intersectPerm.IsSubsetOf(null));
- }
-
- internal bool CheckAssert(CodeAccessPermission asserted)
- {
- Debug.Assert( asserted == null || asserted.GetType().Equals( this.GetType() ), "CheckPermitOnly not defined for permissions of different type" );
- return IsSubsetOf( asserted );
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/CodeAccessSecurityEngine.cs b/src/mscorlib/src/System/Security/CodeAccessSecurityEngine.cs
deleted file mode 100644
index d86897c02e..0000000000
--- a/src/mscorlib/src/System/Security/CodeAccessSecurityEngine.cs
+++ /dev/null
@@ -1,400 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-namespace System.Security {
- using System;
- using System.Threading;
- using System.Security.Util;
- using System.Collections;
- using System.Runtime.CompilerServices;
- using System.Security.Permissions;
- using System.Reflection;
- using System.Globalization;
- using System.Security.Policy;
- using System.Runtime.Versioning;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- // Used in DemandInternal, to remember the result of previous demands
- // KEEP IN SYNC WITH DEFINITIONS IN SECURITYPOLICY.H
- [Serializable]
- internal enum PermissionType
- {
- // special flags
- SecurityUnmngdCodeAccess = 0,
- SecuritySkipVerification = 1,
- ReflectionTypeInfo = 2,
- SecurityAssert = 3,
- ReflectionMemberAccess = 4,
- SecuritySerialization = 5,
- ReflectionRestrictedMemberAccess = 6,
- FullTrust = 7,
- SecurityBindingRedirects = 8,
-
- // special permissions
- UIPermission = 9,
- EnvironmentPermission = 10,
- FileDialogPermission = 11,
- FileIOPermission = 12,
- ReflectionPermission = 13,
- SecurityPermission = 14,
-
- // additional special flags
- SecurityControlEvidence = 16,
- SecurityControlPrincipal = 17
- }
-
- internal static class CodeAccessSecurityEngine
- {
-
- internal static SecurityPermission AssertPermission;
- internal static PermissionToken AssertPermissionToken;
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern void SpecialDemand(PermissionType whatPermission, ref StackCrawlMark stackMark);
-
- [System.Diagnostics.Conditional( "_DEBUG" )]
- private static void DEBUG_OUT( String str )
- {
-#if _DEBUG
- if (debug)
- Console.WriteLine( str );
-#endif
- }
-
-#if _DEBUG
- private static bool debug = false;
- private const String file = "d:\\foo\\debug.txt";
-#endif
-
- // static default constructor. This will be called before any of the static members are accessed.
- static CodeAccessSecurityEngine()
- {
-#pragma warning disable 618
- AssertPermission = new SecurityPermission(SecurityPermissionFlag.Assertion);
-#pragma warning restore 618
- AssertPermissionToken = PermissionToken.GetToken(AssertPermission);
- }
-
-#pragma warning disable 618
- private static void ThrowSecurityException(RuntimeAssembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand, IPermission permThatFailed)
-#pragma warning restore 618
- {
- AssemblyName asmName = null;
- Evidence asmEvidence = null;
- if (asm != null)
- {
- // Assert here because reflection will check grants and if we fail the check,
- // there will be an infinite recursion that overflows the stack.
- PermissionSet.s_fullTrust.Assert();
- asmName = asm.GetName();
- }
- throw SecurityException.MakeSecurityException(asmName, asmEvidence, granted, refused, rmh, action, demand, permThatFailed);
- }
-
-#pragma warning disable 618
- private static void ThrowSecurityException(Object assemblyOrString, PermissionSet granted, PermissionSet refused, RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand, IPermission permThatFailed)
-#pragma warning restore 618
- {
- Debug.Assert((assemblyOrString == null || assemblyOrString is RuntimeAssembly || assemblyOrString is String), "Must pass in an Assembly object or String object here");
-
- if (assemblyOrString == null || assemblyOrString is RuntimeAssembly)
- ThrowSecurityException((RuntimeAssembly)assemblyOrString, granted, refused, rmh, action, demand, permThatFailed);
- else
- {
- AssemblyName asmName = new AssemblyName((String)assemblyOrString);
- throw SecurityException.MakeSecurityException(asmName, null, granted, refused, rmh, action, demand, permThatFailed);
- }
- }
-
-#if FEATURE_COMPRESSEDSTACK
- internal static void CheckSetHelper(CompressedStack cs,
- PermissionSet grants,
- PermissionSet refused,
- PermissionSet demands,
- RuntimeMethodHandleInternal rmh,
- RuntimeAssembly asm,
- SecurityAction action)
- {
- if (cs != null)
- cs.CheckSetDemand(demands, rmh);
- else
- CheckSetHelper(grants, refused, demands, rmh, (Object)asm, action, true);
- }
-#else // FEATURE_COMPRESSEDSTACK
-#pragma warning disable 618
- internal static void CheckSetHelper(Object notUsed,
- PermissionSet grants,
- PermissionSet refused,
- PermissionSet demands,
- RuntimeMethodHandleInternal rmh,
- RuntimeAssembly asm,
- SecurityAction action)
-#pragma warning restore 618
- {
- // To reduce the amount of ifdef-code-churn, a dummy arg is used for the first parameter - instead of a CompressedStack object,
- // we use a System.Object that should always be null. If we tried to change the signature of the function, there will need to be
- // corresponding changes in VM (metasig.h, mscorlib.h, securitystackwalk.cpp, number of elements in the arg array, etc.)
- Debug.Assert(notUsed == null, "Should not reach here with a non-null first arg which is the CompressedStack");
-
- CheckSetHelper(grants, refused, demands, rmh, (Object)asm, action, true);
- }
-
-#endif // FEATURE_COMPRESSEDSTACK
-
-#pragma warning disable 618
- internal static bool CheckSetHelper(PermissionSet grants,
- PermissionSet refused,
- PermissionSet demands,
- RuntimeMethodHandleInternal rmh,
- Object assemblyOrString,
- SecurityAction action,
- bool throwException)
-#pragma warning restore 618
- {
- Debug.Assert(demands != null, "Should not reach here with a null demand set");
-
- IPermission permThatFailed = null;
- if (grants != null)
- grants.CheckDecoded(demands);
- if (refused != null)
- refused.CheckDecoded(demands);
-
- bool bThreadSecurity = SecurityManager._SetThreadSecurity(false);
-
- try
- {
-
- // Check grant set
- if (!demands.CheckDemand(grants, out permThatFailed))
- {
- if (throwException)
- ThrowSecurityException(assemblyOrString, grants, refused, rmh, action, demands, permThatFailed);
- else
- return false;
- }
-
- // Check refused set
- if (!demands.CheckDeny(refused, out permThatFailed))
- {
- if (throwException)
- ThrowSecurityException(assemblyOrString, grants, refused, rmh, action, demands, permThatFailed);
- else
- return false;
- }
- }
- catch (SecurityException)
- {
- throw;
- }
- catch (Exception)
- {
- // Any exception besides a security exception in this code means that
- // a permission was unable to properly handle what we asked of it.
- // We will define this to mean that the demand failed.
- if (throwException)
- ThrowSecurityException(assemblyOrString, grants, refused, rmh, action, demands, permThatFailed);
- else
- return false;
- }
- finally
- {
- if (bThreadSecurity)
- SecurityManager._SetThreadSecurity(true);
- }
- return true;
- }
-#if FEATURE_COMPRESSEDSTACK
- internal static void CheckHelper(CompressedStack cs,
- PermissionSet grantedSet,
- PermissionSet refusedSet,
- CodeAccessPermission demand,
- PermissionToken permToken,
- RuntimeMethodHandleInternal rmh,
- RuntimeAssembly asm,
- SecurityAction action)
- {
- if (cs != null)
- cs.CheckDemand(demand, permToken, rmh);
- else
- CheckHelper(grantedSet, refusedSet, demand, permToken, rmh, (Object)asm, action, true);
- }
-#else // FEATURE_COMPRESSEDSTACK
-#pragma warning disable 618
- internal static void CheckHelper(Object notUsed,
- PermissionSet grantedSet,
- PermissionSet refusedSet,
- CodeAccessPermission demand,
- PermissionToken permToken,
- RuntimeMethodHandleInternal rmh,
- RuntimeAssembly asm,
- SecurityAction action)
-#pragma warning restore 618
- {
- // To reduce the amount of ifdef-code-churn, a dummy arg is used for the first parameter - instead of a CompressedStack object,
- // we use a System.Object that should always be null. If we tried to change the signature of the function, there will need to be
- // corresponding changes in VM (metasig.h, mscorlib.h, securitystackwalk.cpp, number of elements in the arg array, etc.)
- Debug.Assert(notUsed == null, "Should not reach here with a non-null first arg which is the CompressedStack");
- CheckHelper(grantedSet, refusedSet, demand, permToken, rmh, (Object)asm, action, true);
- }
-#endif // FEATURE_COMPRESSEDSTACK
-#pragma warning disable 618
- internal static bool CheckHelper(PermissionSet grantedSet,
- PermissionSet refusedSet,
- CodeAccessPermission demand,
- PermissionToken permToken,
- RuntimeMethodHandleInternal rmh,
- Object assemblyOrString,
- SecurityAction action,
- bool throwException)
-#pragma warning restore 618
- {
- // We should never get here with a null demand
- Debug.Assert(demand != null, "Should not reach here with a null demand");
-
- if (permToken == null)
- permToken = PermissionToken.GetToken(demand);
-
- if (grantedSet != null)
- grantedSet.CheckDecoded(permToken.m_index);
- if (refusedSet != null)
- refusedSet.CheckDecoded(permToken.m_index);
-
- // If PermissionSet is null, then module does not have Permissions... Fail check.
-
- bool bThreadSecurity = SecurityManager._SetThreadSecurity(false);
-
- try
- {
- if (grantedSet == null)
- {
- if (throwException)
- ThrowSecurityException(assemblyOrString, grantedSet, refusedSet, rmh, action, demand, demand);
- else
- return false;
- }
-
- else if (!grantedSet.IsUnrestricted())
- {
- // If we aren't unrestricted, there is a refused set, or our permission is not of the unrestricted
- // variety, we need to do the proper callback.
-
- Debug.Assert(demand != null,"demand != null");
-
- // Find the permission of matching type in the permission set.
-
- CodeAccessPermission grantedPerm =
- (CodeAccessPermission)grantedSet.GetPermission(permToken);
-
- // Make sure the demand has been granted
- if (!demand.CheckDemand( grantedPerm ))
- {
- if (throwException)
- ThrowSecurityException(assemblyOrString, grantedSet, refusedSet, rmh, action, demand, demand);
- else
- return false;
- }
- }
-
- // Make the sure the permission is not refused.
-
- if (refusedSet != null)
- {
- CodeAccessPermission refusedPerm =
- (CodeAccessPermission)refusedSet.GetPermission(permToken);
- if (refusedPerm != null)
- {
- if (!refusedPerm.CheckDeny(demand))
- {
- #if _DEBUG
- if (debug)
- DEBUG_OUT( "Permission found in refused set" );
- #endif
- if (throwException)
- ThrowSecurityException(assemblyOrString, grantedSet, refusedSet, rmh, action, demand, demand);
- else
- return false;
-
- }
- }
-
- if (refusedSet.IsUnrestricted())
- {
- if (throwException)
- ThrowSecurityException(assemblyOrString, grantedSet, refusedSet, rmh, action, demand, demand);
- else
- return false;
- }
- }
- }
- catch (SecurityException)
- {
- throw;
- }
- catch (Exception)
- {
- // Any exception besides a security exception in this code means that
- // a permission was unable to properly handle what we asked of it.
- // We will define this to mean that the demand failed.
- if (throwException)
- ThrowSecurityException(assemblyOrString, grantedSet, refusedSet, rmh, action, demand, demand);
- else
- return false;
- }
- finally
- {
- if (bThreadSecurity)
- SecurityManager._SetThreadSecurity(true);
- }
-
- DEBUG_OUT( "Check passed" );
- return true;
- }
-
- internal static void Check(CodeAccessPermission cap, ref StackCrawlMark stackMark)
- {
- }
-
-
- internal static void Check(PermissionSet permSet, ref StackCrawlMark stackMark)
- {
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern FrameSecurityDescriptor CheckNReturnSO(PermissionToken permToken,
- CodeAccessPermission demand,
- ref StackCrawlMark stackMark,
- int create );
-
- internal static void Assert(CodeAccessPermission cap, ref StackCrawlMark stackMark)
- {
- }
-
- internal static void Deny(CodeAccessPermission cap, ref StackCrawlMark stackMark)
- {
- }
-
- internal static void PermitOnly(CodeAccessPermission cap, ref StackCrawlMark stackMark)
- {
- }
-
-#if FEATURE_PLS
- // Update the PLS used for optimization in the AppDomain: called from the VM
- private static PermissionListSet UpdateAppDomainPLS(PermissionListSet adPLS, PermissionSet grantedPerms, PermissionSet refusedPerms) {
- if (adPLS == null) {
- adPLS = new PermissionListSet();
- adPLS.UpdateDomainPLS(grantedPerms, refusedPerms);
- return adPLS;
- } else {
- PermissionListSet newPLS = new PermissionListSet();
- newPLS.UpdateDomainPLS(adPLS);
- newPLS.UpdateDomainPLS(grantedPerms, refusedPerms);
- return newPLS;
- }
- }
-#endif //FEATURE_PLS
- }
-}
diff --git a/src/mscorlib/src/System/Security/FrameSecurityDescriptor.cs b/src/mscorlib/src/System/Security/FrameSecurityDescriptor.cs
deleted file mode 100644
index 0ef5afd282..0000000000
--- a/src/mscorlib/src/System/Security/FrameSecurityDescriptor.cs
+++ /dev/null
@@ -1,537 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security {
- using System.Text;
- using System.Runtime.CompilerServices;
- using System.Threading;
- using System;
- using System.Collections;
- using System.Security.Permissions;
- using System.Globalization;
- using System.Runtime.ConstrainedExecution;
- using System.Runtime.Versioning;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-#if !FEATURE_PAL
- using Microsoft.Win32.SafeHandles;
-#endif
- //FrameSecurityDescriptor.cs
- //
- // Internal use only.
- // DO NOT DOCUMENT
- //
-
- [Serializable]
- internal class FrameSecurityDescriptor
- {
-
- /* EE has native FrameSecurityDescriptorObject definition in object.h
- Make sure to update that structure as well, if you make any changes here.
- */
- private PermissionSet m_assertions; // imperative asserts
- private PermissionSet m_denials; // imperative denials
- private PermissionSet m_restriction; // imperative permitonlys
- private PermissionSet m_DeclarativeAssertions;
- private PermissionSet m_DeclarativeDenials;
- private PermissionSet m_DeclarativeRestrictions;
-
-#if !FEATURE_PAL
- // if this frame contains a call to any WindowsIdentity.Impersonate(),
- // we save the previous SafeTokenHandles here (in the next two fields)
- // Used during exceptionstackwalks to revert impersonation before calling filters
- [NonSerialized]
- private SafeAccessTokenHandle m_callerToken;
- [NonSerialized]
- private SafeAccessTokenHandle m_impToken;
-#endif
-
- private bool m_AssertFT;
- private bool m_assertAllPossible;
-#pragma warning disable 169
- private bool m_declSecComputed; // set from the VM to indicate that the declarative A/PO/D on this frame has been populated
-#pragma warning restore 169
-
-
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void IncrementOverridesCount();
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void DecrementOverridesCount();
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void IncrementAssertCount();
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void DecrementAssertCount();
-
-
- // Default constructor.
- internal FrameSecurityDescriptor()
- {
- //m_flags = 0;
- }
- //-----------------------------------------------------------+
- // H E L P E R
- //-----------------------------------------------------------+
-
- private PermissionSet CreateSingletonSet(IPermission perm)
- {
- PermissionSet permSet = new PermissionSet(false);
- permSet.AddPermission(perm.Copy());
- return permSet;
- }
-
- //-----------------------------------------------------------+
- // A S S E R T
- //-----------------------------------------------------------+
-
- internal bool HasImperativeAsserts()
- {
- // we store declarative actions in both fields, so check if they are different
- return (m_assertions != null);
- }
- internal bool HasImperativeDenials()
- {
- // we store declarative actions in both fields, so check if they are different
- return (m_denials != null);
- }
- internal bool HasImperativeRestrictions()
- {
- // we store declarative actions in both fields, so check if they are different
- return (m_restriction != null);
- }
- internal void SetAssert(IPermission perm)
- {
- m_assertions = CreateSingletonSet(perm);
- IncrementAssertCount();
- }
-
- internal void SetAssert(PermissionSet permSet)
- {
- m_assertions = permSet.Copy();
- m_AssertFT = m_AssertFT || m_assertions.IsUnrestricted();
- IncrementAssertCount();
- }
-
- internal PermissionSet GetAssertions(bool fDeclarative)
- {
- return (fDeclarative) ? m_DeclarativeAssertions : m_assertions;
- }
-
- internal void SetAssertAllPossible()
- {
- m_assertAllPossible = true;
- IncrementAssertCount();
- }
-
- internal bool GetAssertAllPossible()
- {
- return m_assertAllPossible;
- }
-
- //-----------------------------------------------------------+
- // D E N Y
- //-----------------------------------------------------------+
-
- internal void SetDeny(IPermission perm)
- {
- m_denials = CreateSingletonSet(perm);
- IncrementOverridesCount();
- }
-
- internal void SetDeny(PermissionSet permSet)
- {
- m_denials = permSet.Copy();
- IncrementOverridesCount();
- }
-
- internal PermissionSet GetDenials(bool fDeclarative)
- {
- return (fDeclarative) ? m_DeclarativeDenials: m_denials;
- }
-
- //-----------------------------------------------------------+
- // R E S T R I C T
- //-----------------------------------------------------------+
-
- internal void SetPermitOnly(IPermission perm)
- {
- m_restriction = CreateSingletonSet(perm);
- IncrementOverridesCount();
- }
-
- internal void SetPermitOnly(PermissionSet permSet)
- {
- // permSet must not be null
- m_restriction = permSet.Copy();
- IncrementOverridesCount();
- }
-
- internal PermissionSet GetPermitOnly(bool fDeclarative)
- {
-
- return (fDeclarative) ? m_DeclarativeRestrictions : m_restriction;
- }
-#if !FEATURE_PAL
- //-----------------------------------------------------------+
- // SafeAccessTokenHandle (Impersonation + EH purposes)
- //-----------------------------------------------------------+
- internal void SetTokenHandles (SafeAccessTokenHandle callerToken, SafeAccessTokenHandle impToken)
- {
- m_callerToken = callerToken;
- m_impToken = impToken;
- }
-#endif
- //-----------------------------------------------------------+
- // R E V E R T
- //-----------------------------------------------------------+
-
- internal void RevertAssert()
- {
- if (m_assertions != null)
- {
- m_assertions = null;
- DecrementAssertCount();
- }
-
-
- if (m_DeclarativeAssertions != null)
- {
- m_AssertFT = m_DeclarativeAssertions.IsUnrestricted();
- }
- else
- {
- m_AssertFT = false;
- }
- }
-
- internal void RevertAssertAllPossible()
- {
- if (m_assertAllPossible)
- {
- m_assertAllPossible = false;
- DecrementAssertCount();
- }
- }
-
- internal void RevertDeny()
- {
- if (HasImperativeDenials())
- {
- DecrementOverridesCount();
- m_denials = null;
- }
- }
-
- internal void RevertPermitOnly()
- {
- if (HasImperativeRestrictions())
- {
- DecrementOverridesCount();
- m_restriction= null;;
- }
- }
-
- internal void RevertAll()
- {
- RevertAssert();
- RevertAssertAllPossible();
- RevertDeny();
- RevertPermitOnly();
- }
-
-
- //-----------------------------------------------------------+
- // Demand Evaluation
- //-----------------------------------------------------------+
-
-
- // This will get called when we hit a FSD while evaluating a demand on the call stack or compressedstack
- internal bool CheckDemand(CodeAccessPermission demand, PermissionToken permToken, RuntimeMethodHandleInternal rmh)
- {
- // imperative security
- bool fContinue = CheckDemand2(demand, permToken, rmh, false);
- if (fContinue == SecurityRuntime.StackContinue)
- {
- // declarative security
- fContinue = CheckDemand2(demand, permToken, rmh, true);
- }
- return fContinue;
- }
-
- internal bool CheckDemand2(CodeAccessPermission demand, PermissionToken permToken, RuntimeMethodHandleInternal rmh, bool fDeclarative)
- {
- PermissionSet permSet;
-
- // If the demand is null, there is no need to continue
- Debug.Assert(demand != null && !demand.CheckDemand(null), "Empty demands should have been filtered out by this point");
-
- // decode imperative
- if (GetPermitOnly(fDeclarative) != null)
- GetPermitOnly(fDeclarative).CheckDecoded(demand, permToken);
-
- if (GetDenials(fDeclarative) != null)
- GetDenials(fDeclarative).CheckDecoded(demand, permToken);
-
- if (GetAssertions(fDeclarative) != null)
- GetAssertions(fDeclarative).CheckDecoded(demand, permToken);
-
- // NOTE: See notes about exceptions and exception handling in FrameDescSetHelper
-
- bool bThreadSecurity = SecurityManager._SetThreadSecurity(false);
-
- // Check Reduction
-
- try
- {
- permSet = GetPermitOnly(fDeclarative);
- if (permSet != null)
- {
- CodeAccessPermission perm = (CodeAccessPermission)permSet.GetPermission(demand);
-
- // If the permit only set does not contain the demanded permission, throw a security exception
- if (perm == null)
- {
- if (!permSet.IsUnrestricted())
- throw new SecurityException(String.Format(CultureInfo.InvariantCulture, Environment.GetResourceString("Security_Generic"), demand.GetType().AssemblyQualifiedName), null, permSet, SecurityRuntime.GetMethodInfo(rmh), demand, demand);
- }
- else
- {
- bool bNeedToThrow = true;
-
- try
- {
- bNeedToThrow = !demand.CheckPermitOnly(perm);
- }
- catch (ArgumentException)
- {
- }
-
- if (bNeedToThrow)
- throw new SecurityException(String.Format(CultureInfo.InvariantCulture, Environment.GetResourceString("Security_Generic"), demand.GetType().AssemblyQualifiedName), null, permSet, SecurityRuntime.GetMethodInfo(rmh), demand, demand);
- }
- }
-
- // Check Denials
-
- permSet = GetDenials(fDeclarative);
- if (permSet != null)
- {
- CodeAccessPermission perm = (CodeAccessPermission)permSet.GetPermission(demand);
-
- // If an unrestricted set was denied and the demand implements IUnrestricted
- if (permSet.IsUnrestricted())
- throw new SecurityException(String.Format(CultureInfo.InvariantCulture, Environment.GetResourceString("Security_Generic"), demand.GetType().AssemblyQualifiedName), permSet, null, SecurityRuntime.GetMethodInfo(rmh), demand, demand);
-
- // If the deny set does contain the demanded permission, throw a security exception
- bool bNeedToThrow = true;
- try
- {
- bNeedToThrow = !demand.CheckDeny(perm);
- }
- catch (ArgumentException)
- {
- }
- if (bNeedToThrow)
- throw new SecurityException(String.Format(CultureInfo.InvariantCulture, Environment.GetResourceString("Security_Generic"), demand.GetType().AssemblyQualifiedName), permSet, null, SecurityRuntime.GetMethodInfo(rmh), demand, demand);
- }
-
- if (GetAssertAllPossible())
- {
- return SecurityRuntime.StackHalt;
- }
-
- permSet = GetAssertions(fDeclarative);
- // Check Assertions
- if (permSet != null)
- {
-
- CodeAccessPermission perm = (CodeAccessPermission)permSet.GetPermission(demand);
-
- // If the assert set does contain the demanded permission, halt the stackwalk
-
- try
- {
- if (permSet.IsUnrestricted() || demand.CheckAssert(perm))
- {
- return SecurityRuntime.StackHalt;
- }
- }
- catch (ArgumentException)
- {
- }
- }
-
- }
- finally
- {
- if (bThreadSecurity)
- SecurityManager._SetThreadSecurity(true);
- }
-
- return SecurityRuntime.StackContinue;
- }
-
- internal bool CheckSetDemand(PermissionSet demandSet,
- out PermissionSet alteredDemandSet,
- RuntimeMethodHandleInternal rmh)
- {
- // imperative security
- PermissionSet altPset1 = null, altPset2 = null;
- bool fContinue = CheckSetDemand2(demandSet, out altPset1, rmh, false);
- if (altPset1 != null)
- {
- demandSet = altPset1;
- }
-
- if (fContinue == SecurityRuntime.StackContinue)
- {
- // declarative security
- fContinue = CheckSetDemand2(demandSet, out altPset2, rmh, true);
- }
- // Return the most recent altered set
- // If both declarative and imperative asserts modified the demand set: return altPset2
- // Else if imperative asserts modified the demand set: return altPset1
- // else no alteration: return null
- if (altPset2 != null)
- alteredDemandSet = altPset2;
- else if (altPset1 != null)
- alteredDemandSet = altPset1;
- else
- alteredDemandSet = null;
-
- return fContinue;
- }
-
- internal bool CheckSetDemand2(PermissionSet demandSet,
- out PermissionSet alteredDemandSet,
- RuntimeMethodHandleInternal rmh, bool fDeclarative)
- {
- PermissionSet permSet;
-
- // In the common case we are not going to alter the demand set, so just to
- // be safe we'll set it to null up front.
- alteredDemandSet = null;
-
- // There's some oddness in here to deal with exceptions. The general idea behind
- // this is that we need some way of dealing with custom permissions that may not
- // handle all possible scenarios of Union(), Intersect(), and IsSubsetOf() properly
- // (they don't support it, throw null reference exceptions, etc.).
-
- // An empty demand always succeeds.
- if (demandSet == null || demandSet.IsEmpty())
- return SecurityRuntime.StackHalt;
-
- if (GetPermitOnly(fDeclarative) != null)
- GetPermitOnly(fDeclarative).CheckDecoded( demandSet );
- if (GetDenials(fDeclarative) != null)
- GetDenials(fDeclarative).CheckDecoded( demandSet );
- if (GetAssertions(fDeclarative) != null)
- GetAssertions(fDeclarative).CheckDecoded( demandSet );
-
-
- bool bThreadSecurity = SecurityManager._SetThreadSecurity(false);
-
- try
- {
- // In the case of permit only, we define an exception to be failure of the check
- // and therefore we throw a security exception.
-
- permSet = GetPermitOnly(fDeclarative);
- if (permSet != null)
- {
- IPermission permFailed = null;
- bool bNeedToThrow = true;
-
- try
- {
- bNeedToThrow = !demandSet.CheckPermitOnly(permSet, out permFailed);
- }
- catch (ArgumentException)
- {
- }
- if (bNeedToThrow)
- throw new SecurityException(Environment.GetResourceString("Security_GenericNoType"), null, permSet, SecurityRuntime.GetMethodInfo(rmh), demandSet, permFailed);
- }
-
- // In the case of denial, we define an exception to be failure of the check
- // and therefore we throw a security exception.
-
- permSet = GetDenials(fDeclarative);
-
-
- if (permSet != null)
- {
- IPermission permFailed = null;
-
- bool bNeedToThrow = true;
-
- try
- {
- bNeedToThrow = !demandSet.CheckDeny(permSet, out permFailed);
- }
- catch (ArgumentException)
- {
- }
-
- if (bNeedToThrow)
- throw new SecurityException(Environment.GetResourceString("Security_GenericNoType"), permSet, null, SecurityRuntime.GetMethodInfo(rmh), demandSet, permFailed);
- }
-
- // The assert case is more complex. Since asserts have the ability to "bleed through"
- // (where part of a demand is handled by an assertion, but the rest is passed on to
- // continue the stackwalk), we need to be more careful in handling the "failure" case.
- // Therefore, if an exception is thrown in performing any operation, we make sure to keep
- // that permission in the demand set thereby continuing the demand for that permission
- // walking down the stack.
-
- if (GetAssertAllPossible())
- {
- return SecurityRuntime.StackHalt;
- }
-
- permSet = GetAssertions(fDeclarative);
- if (permSet != null)
- {
- // If this frame asserts a superset of the demand set we're done
-
- if (demandSet.CheckAssertion( permSet ))
- return SecurityRuntime.StackHalt;
-
- // Determine whether any of the demand set asserted. We do this by
- // copying the demand set and removing anything in it that is asserted.
-
- if (!permSet.IsUnrestricted())
- {
- PermissionSet.RemoveAssertedPermissionSet(demandSet, permSet, out alteredDemandSet);
- }
- }
-
- }
- finally
- {
- if (bThreadSecurity)
- SecurityManager._SetThreadSecurity(true);
- }
-
- return SecurityRuntime.StackContinue;
- }
- }
-
-#if FEATURE_COMPRESSEDSTACK
- // Used by the stack compressor to communicate a DynamicResolver to managed code during a stackwalk.
- // The JIT will not actually place these on frames.
- internal class FrameSecurityDescriptorWithResolver : FrameSecurityDescriptor
- {
- private System.Reflection.Emit.DynamicResolver m_resolver;
-
- public System.Reflection.Emit.DynamicResolver Resolver
- {
- get
- {
- return m_resolver;
- }
- }
- }
-#endif // FEATURE_COMPRESSEDSTACK
-}
diff --git a/src/mscorlib/src/System/Security/HostProtectionException.cs b/src/mscorlib/src/System/Security/HostProtectionException.cs
deleted file mode 100644
index b08fccd1b3..0000000000
--- a/src/mscorlib/src/System/Security/HostProtectionException.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-/*=============================================================================
-**
-**
-** Purpose: Exception class for HostProtection
-**
-**
-=============================================================================*/
-
-namespace System.Security
-{
- using System.Security;
- using System;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
- using System.Reflection;
- using System.Text;
- using System.Diagnostics.Contracts;
-
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- public class HostProtectionException : SystemException
- {
- private HostProtectionResource m_protected;
- private HostProtectionResource m_demanded;
-
- private const String ProtectedResourcesName = "ProtectedResources";
- private const String DemandedResourcesName = "DemandedResources";
-
- public HostProtectionException() : base()
- {
- m_protected = HostProtectionResource.None;
- m_demanded = HostProtectionResource.None;
- }
-
- public HostProtectionException(string message) : base(message)
- {
- m_protected = HostProtectionResource.None;
- m_demanded = HostProtectionResource.None;
- }
-
- public HostProtectionException(string message, Exception e) : base(message, e)
- {
- m_protected = HostProtectionResource.None;
- m_demanded = HostProtectionResource.None;
- }
-
- protected HostProtectionException(SerializationInfo info, StreamingContext context) : base(info, context)
- {
- if (info==null)
- throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- m_protected = (HostProtectionResource)info.GetValue(ProtectedResourcesName, typeof(HostProtectionResource));
- m_demanded = (HostProtectionResource)info.GetValue(DemandedResourcesName, typeof(HostProtectionResource));
- }
-
- public HostProtectionException(string message, HostProtectionResource protectedResources, HostProtectionResource demandedResources)
- : base(message)
- {
- SetErrorCode(__HResults.COR_E_HOSTPROTECTION);
- m_protected = protectedResources;
- m_demanded = demandedResources;
- }
-
- // Called from the VM to create a HP Exception
- private HostProtectionException(HostProtectionResource protectedResources, HostProtectionResource demandedResources)
- : base(SecurityException.GetResString("HostProtection_HostProtection"))
- {
- SetErrorCode(__HResults.COR_E_HOSTPROTECTION);
- m_protected = protectedResources;
- m_demanded = demandedResources;
- }
-
-
- public HostProtectionResource ProtectedResources
- {
- get
- {
- return m_protected;
- }
- }
-
- public HostProtectionResource DemandedResources
- {
- get
- {
- return m_demanded;
- }
- }
-
- private String ToStringHelper(String resourceString, Object attr)
- {
- if (attr == null)
- return String.Empty;
- StringBuilder sb = new StringBuilder();
- sb.Append(Environment.NewLine);
- sb.Append(Environment.NewLine);
- sb.Append(Environment.GetResourceString( resourceString ));
- sb.Append(Environment.NewLine);
- sb.Append(attr);
- return sb.ToString();
- }
-
- public override String ToString()
- {
- String protectedResStrValue = ToStringHelper("HostProtection_ProtectedResources", ProtectedResources);
- StringBuilder sb = new StringBuilder();
- sb.Append(base.ToString());
-
- sb.Append(protectedResStrValue);
- sb.Append(ToStringHelper("HostProtection_DemandedResources", DemandedResources));
-
- return sb.ToString();
-
- }
-
- public override void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- if (info==null)
- throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- base.GetObjectData( info, context );
-
- info.AddValue(ProtectedResourcesName, ProtectedResources, typeof(HostProtectionResource));
- info.AddValue(DemandedResourcesName, DemandedResources, typeof(HostProtectionResource));
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/HostSecurityManager.cs b/src/mscorlib/src/System/Security/HostSecurityManager.cs
deleted file mode 100644
index 53137983d3..0000000000
--- a/src/mscorlib/src/System/Security/HostSecurityManager.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-//
-// A HostSecurityManager gives a hosting application the chance to
-// participate in the security decisions in the AppDomain.
-//
-
-namespace System.Security
-{
- using System.Collections;
- using System.Reflection;
- using System.Security;
- using System.Security.Permissions;
- using System.Security.Policy;
- using System.Runtime.Versioning;
- using System.Diagnostics.Contracts;
-
-
- [Serializable]
- [Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum HostSecurityManagerOptions {
- None = 0x0000,
- HostAppDomainEvidence = 0x0001,
- [Obsolete("AppDomain policy levels are obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- HostPolicyLevel = 0x0002,
- HostAssemblyEvidence = 0x0004,
- HostDetermineApplicationTrust = 0x0008,
- HostResolvePolicy = 0x0010,
- AllFlags = 0x001F
- }
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class HostSecurityManager {
- public HostSecurityManager () {}
-
- // The host can choose which events he wants to participate in. This property can be set when
- // the host only cares about a subset of the capabilities exposed through the HostSecurityManager.
- public virtual HostSecurityManagerOptions Flags {
- get {
- // We use AllFlags as the default.
- return HostSecurityManagerOptions.AllFlags;
- }
- }
-
- public virtual Evidence ProvideAppDomainEvidence (Evidence inputEvidence) {
- // The default implementation does not modify the input evidence.
- return inputEvidence;
- }
-
- public virtual Evidence ProvideAssemblyEvidence (Assembly loadedAssembly, Evidence inputEvidence) {
- // The default implementation does not modify the input evidence.
- return inputEvidence;
- }
-
- /// <summary>
- /// Determine what types of evidence the host might be able to supply for the AppDomain if requested
- /// </summary>
- /// <returns></returns>
- public virtual Type[] GetHostSuppliedAppDomainEvidenceTypes() {
- return null;
- }
-
- /// <summary>
- /// Determine what types of evidence the host might be able to supply for an assembly if requested
- /// </summary>
- public virtual Type[] GetHostSuppliedAssemblyEvidenceTypes(Assembly assembly) {
- return null;
- }
-
- /// <summary>
- /// Ask the host to supply a specific type of evidence for the AppDomain
- /// </summary>
- public virtual EvidenceBase GenerateAppDomainEvidence(Type evidenceType) {
- return null;
- }
-
- /// <summary>
- /// Ask the host to supply a specific type of evidence for an assembly
- /// </summary>
- public virtual EvidenceBase GenerateAssemblyEvidence(Type evidenceType, Assembly assembly) {
- return null;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/IPermission.cs b/src/mscorlib/src/System/Security/IPermission.cs
deleted file mode 100644
index 5477261fd7..0000000000
--- a/src/mscorlib/src/System/Security/IPermission.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-// Defines the interface that all Permission objects must support.
-//
-
-namespace System.Security
-{
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IPermission : ISecurityEncodable
- {
- // NOTE: The constants that used to be defined here were moved to
- // PermissionsEnum.cs due to CLS restrictions.
-
- // The integrity of the security system depends on a means to
- // copy objects so that references to sensitive objects are not
- // exposed outside of the runtime. Thus, all permissions must
- // implement Copy.
- //
- // Makes an exact copy of the Permission.
- IPermission Copy();
-
- /*
- * Methods to support the Installation, Registration, others... PolicyEngine
- */
-
- // Policy decisions and runtime mechanisms (for example, Deny)
- // require a means to retrieve shared state between two
- // permissions. If there is no shared state between two
- // instances, then the method should return null.
- //
- // Could think of the method as GetCommonState,
- // but leave it as Intersect to avoid gratuitous name changes.
- //
- // Returns a new permission with the permission-defined intersection
- // of the two permissions. The intersection is generally defined as
- // privilege parameters that are included by both 'this' and 'target'.
- // Returns null if 'target' is null or is of wrong type.
- //
- IPermission Intersect(IPermission target);
-
- // The runtime policy manager also requires a means of combining the
- // state contained within two permissions of the same type in a logical OR
- // construct. (The Union of two permission of different type is not defined,
- // except when one of the two is a CompoundPermission of internal type equal
- // to the type of the other permission.)
- //
-
- IPermission Union(IPermission target);
-
- // IsSubsetOf defines a standard mechanism for determining
- // relative safety between two permission demands of the same type.
- // If one demand x demands no more than some other demand y, then
- // x.IsSubsetOf(y) should return true. In this case, if the
- // demand for y is satisfied, then it is possible to assume that
- // the demand for x would also be satisfied under the same
- // circumstances. On the other hand, if x demands something that y
- // does not, then x.IsSubsetOf(y) should return false; the fact
- // that x is satisfied by the current security context does not
- // also imply that the demand for y will also be satisfied.
- //
- // Returns true if 'this' Permission allows no more access than the
- // argument.
- //
- bool IsSubsetOf(IPermission target);
-
- // The Demand method is the fundamental part of the IPermission
- // interface from a component developer's perspective. The
- // permission represents the demand that the developer wants
- // satisfied, and Demand is the means to invoke the demand.
- // For each type of permission, the mechanism to verify the
- // demand will be different. However, to the developer, all
- // permissions invoke that mechanism through the Demand interface.
- // Mark this method as requiring a security object on the caller's frame
- // so the caller won't be inlined (which would mess up stack crawling).
- [DynamicSecurityMethodAttribute()]
- void Demand();
-
- }
-}
diff --git a/src/mscorlib/src/System/Security/ISecurityEncodable.cs b/src/mscorlib/src/System/Security/ISecurityEncodable.cs
deleted file mode 100644
index 689b3e4b5f..0000000000
--- a/src/mscorlib/src/System/Security/ISecurityEncodable.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-// All encodable security classes that support encoding need to
-// implement this interface
-//
-
-namespace System.Security
-{
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface ISecurityEncodable
- {
- }
-}
diff --git a/src/mscorlib/src/System/Security/ISecurityPolicyEncodable.cs b/src/mscorlib/src/System/Security/ISecurityPolicyEncodable.cs
deleted file mode 100644
index 567e41e891..0000000000
--- a/src/mscorlib/src/System/Security/ISecurityPolicyEncodable.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-// All encodable security classes that support encoding need to
-// implement this interface
-//
-
-namespace System.Security
-{
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface ISecurityPolicyEncodable
- {
- }
-}
diff --git a/src/mscorlib/src/System/Security/IStackWalk.cs b/src/mscorlib/src/System/Security/IStackWalk.cs
deleted file mode 100644
index 902fc35b61..0000000000
--- a/src/mscorlib/src/System/Security/IStackWalk.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security
-{
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IStackWalk
- {
- [DynamicSecurityMethodAttribute()]
- void Assert();
-
- [DynamicSecurityMethodAttribute()]
- void Demand();
-
- [DynamicSecurityMethodAttribute()]
- void Deny();
-
- [DynamicSecurityMethodAttribute()]
- void PermitOnly();
- }
-}
diff --git a/src/mscorlib/src/System/Security/NamedPermissionSet.cs b/src/mscorlib/src/System/Security/NamedPermissionSet.cs
deleted file mode 100644
index 1bc166fde8..0000000000
--- a/src/mscorlib/src/System/Security/NamedPermissionSet.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-// Extends PermissionSet to allow an associated name and description
-//
-
-namespace System.Security
-{
- using System;
- using System.Security.Permissions;
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class NamedPermissionSet : PermissionSet
- {
- internal static PermissionSet GetBuiltInSet(string name)
- {
- // Used by PermissionSetAttribute to create one of the built-in,
- // immutable permission sets.
- if (name == null)
- return null;
- else if (name.Equals("FullTrust"))
- return CreateFullTrustSet();
- else if (name.Equals("Nothing"))
- return CreateNothingSet();
- else if (name.Equals("Execution"))
- return CreateExecutionSet();
- else if (name.Equals("SkipVerification"))
- return CreateSkipVerificationSet();
- else if (name.Equals("Internet"))
- return CreateInternetSet();
- else
- return null;
- }
-
- private static PermissionSet CreateFullTrustSet() {
- return new PermissionSet(PermissionState.Unrestricted);
- }
-
- private static PermissionSet CreateNothingSet() {
- return new PermissionSet(PermissionState.None);
- }
-
- private static PermissionSet CreateExecutionSet() {
- PermissionSet permSet = new PermissionSet(PermissionState.None);
-#pragma warning disable 618
- permSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
-#pragma warning restore 618
- return permSet;
- }
-
- private static PermissionSet CreateSkipVerificationSet() {
- PermissionSet permSet = new PermissionSet(PermissionState.None);
-#pragma warning disable 618
- permSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.SkipVerification));
-#pragma warning restore 618
- return permSet;
- }
-
- private static PermissionSet CreateInternetSet() {
- PermissionSet permSet = new PermissionSet(PermissionState.None);
- permSet.AddPermission(new FileDialogPermission(FileDialogPermissionAccess.Open));
-#pragma warning disable 618
- permSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
-#pragma warning restore 618
- permSet.AddPermission(new UIPermission(UIPermissionWindow.SafeTopLevelWindows, UIPermissionClipboard.OwnClipboard));
- return permSet;
-
-
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/PermissionListSet.cs b/src/mscorlib/src/System/Security/PermissionListSet.cs
deleted file mode 100644
index 093542ad4e..0000000000
--- a/src/mscorlib/src/System/Security/PermissionListSet.cs
+++ /dev/null
@@ -1,535 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-**
-**
-** Purpose: Holds state about A/G/R permissionsets in a callstack or appdomain
-** (Replacement for PermissionListSet)
-**
-=============================================================================*/
-
-namespace System.Security
-{
- using System.Globalization;
- using System.Reflection;
- using System.Runtime.InteropServices;
- using System.Security;
- using System.Security.Permissions;
- using System.Threading;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- sealed internal class PermissionListSet
- {
- // Only internal (public) methods are creation methods and demand evaluation methods.
- // Scroll down to the end to see them.
- private PermissionSetTriple m_firstPermSetTriple;
- private ArrayList m_permSetTriples;
-#if FEATURE_COMPRESSEDSTACK
- private ArrayList m_zoneList;
- private ArrayList m_originList;
-#endif // FEATURE_COMPRESSEDSTACK
-
- internal PermissionListSet() {}
-
- private void EnsureTriplesListCreated()
- {
- if (m_permSetTriples == null)
- {
- m_permSetTriples = new ArrayList();
- if (m_firstPermSetTriple != null)
- {
- m_permSetTriples.Add(m_firstPermSetTriple);
- m_firstPermSetTriple = null;
- }
- }
- }
-
-#if FEATURE_PLS
- internal void UpdateDomainPLS (PermissionListSet adPLS) {
- if (adPLS != null && adPLS.m_firstPermSetTriple != null)
- UpdateDomainPLS(adPLS.m_firstPermSetTriple.GrantSet, adPLS.m_firstPermSetTriple.RefusedSet);
- }
-
- internal void UpdateDomainPLS (PermissionSet grantSet, PermissionSet deniedSet) {
- Debug.Assert(m_permSetTriples == null, "m_permSetTriples != null");
- if (m_firstPermSetTriple == null)
- m_firstPermSetTriple = new PermissionSetTriple();
-
- // update the grant and denied sets
- m_firstPermSetTriple.UpdateGrant(grantSet);
- m_firstPermSetTriple.UpdateRefused(deniedSet);
- }
-#endif // FEATURE_PLS
-
- private void Terminate(PermissionSetTriple currentTriple)
- {
- UpdateTripleListAndCreateNewTriple(currentTriple, null);
- }
-
- private void Terminate(PermissionSetTriple currentTriple, PermissionListSet pls)
- {
-#if FEATURE_COMPRESSEDSTACK
- this.UpdateZoneAndOrigin(pls);
-#endif // FEATURE_COMPRESSEDSTACK
- this.UpdatePermissions(currentTriple, pls);
- this.UpdateTripleListAndCreateNewTriple(currentTriple, null);
- }
-
- private bool Update(PermissionSetTriple currentTriple, PermissionListSet pls)
- {
-#if FEATURE_COMPRESSEDSTACK
- this.UpdateZoneAndOrigin(pls);
-#endif // FEATURE_COMPRESSEDSTACK
- return this.UpdatePermissions(currentTriple, pls);
- }
-
- private bool Update(PermissionSetTriple currentTriple, FrameSecurityDescriptor fsd)
- {
-#if FEATURE_COMPRESSEDSTACK
- FrameSecurityDescriptorWithResolver fsdWithResolver = fsd as FrameSecurityDescriptorWithResolver;
- if (fsdWithResolver != null)
- {
- return Update2(currentTriple, fsdWithResolver);
- }
-#endif // FEATURE_COMPRESSEDSTACK
-
- // check imperative
- bool fHalt = Update2(currentTriple, fsd, false);
- if (!fHalt)
- {
- // then declarative
- fHalt = Update2(currentTriple, fsd, true);
- }
- return fHalt;
- }
-
-#if FEATURE_COMPRESSEDSTACK
- private bool Update2(PermissionSetTriple currentTriple, FrameSecurityDescriptorWithResolver fsdWithResolver)
- {
- System.Reflection.Emit.DynamicResolver resolver = fsdWithResolver.Resolver;
- CompressedStack dynamicCompressedStack = resolver.GetSecurityContext();
- dynamicCompressedStack.CompleteConstruction(null);
- return this.Update(currentTriple, dynamicCompressedStack.PLS);
- }
-#endif // FEATURE_COMPRESSEDSTACK
-
- private bool Update2(PermissionSetTriple currentTriple, FrameSecurityDescriptor fsd, bool fDeclarative)
- {
- // Deny
- PermissionSet deniedPset = fsd.GetDenials(fDeclarative);
- if (deniedPset != null)
- {
- currentTriple.UpdateRefused(deniedPset);
- }
-
- // permit only
- PermissionSet permitOnlyPset = fsd.GetPermitOnly(fDeclarative);
- if (permitOnlyPset != null)
- {
- currentTriple.UpdateGrant(permitOnlyPset);
- }
-
- // Assert all possible
- if (fsd.GetAssertAllPossible())
- {
- // If we have no grant set, it means that the only assembly we've seen on the stack so
- // far is mscorlib. Since mscorlib will always be fully trusted, the grant set of the
- // compressed stack is also FullTrust.
- if (currentTriple.GrantSet == null)
- currentTriple.GrantSet = PermissionSet.s_fullTrust;
-
- UpdateTripleListAndCreateNewTriple(currentTriple, m_permSetTriples);
- currentTriple.GrantSet = PermissionSet.s_fullTrust;
- currentTriple.UpdateAssert(fsd.GetAssertions(fDeclarative));
- return true;
- }
-
- // Assert
- PermissionSet assertPset = fsd.GetAssertions(fDeclarative);
- if (assertPset != null)
- {
- if (assertPset.IsUnrestricted())
- {
- // If we have no grant set, it means that the only assembly we've seen on the stack so
- // far is mscorlib. Since mscorlib will always be fully trusted, the grant set of the
- // compressed stack is also FullTrust.
- if (currentTriple.GrantSet == null)
- currentTriple.GrantSet = PermissionSet.s_fullTrust;
-
- UpdateTripleListAndCreateNewTriple(currentTriple, m_permSetTriples);
- currentTriple.GrantSet = PermissionSet.s_fullTrust;
- currentTriple.UpdateAssert(assertPset);
- return true;
- }
-
- PermissionSetTriple retTriple = currentTriple.UpdateAssert(assertPset);
- if (retTriple != null)
- {
- EnsureTriplesListCreated();
- m_permSetTriples.Add(retTriple);
- }
- }
-
- return false;
- }
- private void Update(PermissionSetTriple currentTriple, PermissionSet in_g, PermissionSet in_r)
- {
-#if FEATURE_COMPRESSEDSTACK
- ZoneIdentityPermission z;
- UrlIdentityPermission u;
- currentTriple.UpdateGrant(in_g, out z, out u);
- currentTriple.UpdateRefused(in_r);
- AppendZoneOrigin(z, u);
-#else // !FEATURE_COMPRESEDSTACK
- currentTriple.UpdateGrant(in_g);
- currentTriple.UpdateRefused(in_r);
-#endif // FEATURE_COMPRESSEDSTACK
- }
-
- // Called from the VM for HG CS construction
- private void Update(PermissionSet in_g)
- {
- if (m_firstPermSetTriple == null)
- m_firstPermSetTriple = new PermissionSetTriple();
- Update(m_firstPermSetTriple, in_g, null);
- }
-
-#if FEATURE_COMPRESSEDSTACK
- private void UpdateZoneAndOrigin(PermissionListSet pls)
- {
- if (pls != null)
- {
- if (this.m_zoneList == null && pls.m_zoneList != null && pls.m_zoneList.Count > 0)
- this.m_zoneList = new ArrayList();
- UpdateArrayList(this.m_zoneList, pls.m_zoneList);
- if (this.m_originList == null && pls.m_originList != null && pls.m_originList.Count > 0)
- this.m_originList = new ArrayList();
- UpdateArrayList(this.m_originList, pls.m_originList);
- }
- }
-#endif // FEATURE_COMPRESSEDSTACK
-
- private bool UpdatePermissions(PermissionSetTriple currentTriple, PermissionListSet pls)
- {
- if (pls != null)
- {
- if (pls.m_permSetTriples != null)
- {
- // DCS has an AGR List. So we need to add the AGR List
- UpdateTripleListAndCreateNewTriple(currentTriple,pls.m_permSetTriples);
- }
- else
- {
- // Common case: One AGR set
-
- PermissionSetTriple tmp_psTriple = pls.m_firstPermSetTriple;
- PermissionSetTriple retTriple;
- // First try and update currentTriple. Return value indicates if we can stop construction
- if (currentTriple.Update(tmp_psTriple, out retTriple))
- return true;
- // If we got a non-null retTriple, what it means is that compression failed,
- // and we now have 2 triples to deal with: retTriple and currentTriple.
- // retTriple has to be appended first. then currentTriple.
- if (retTriple != null)
- {
- EnsureTriplesListCreated();
- // we just created a new triple...add the previous one (returned) to the list
- m_permSetTriples.Add(retTriple);
- }
- }
- }
- else
- {
- // pls can be null only outside the loop in CreateCompressedState
- UpdateTripleListAndCreateNewTriple(currentTriple, null);
- }
-
-
- return false;
-
- }
-
-
- private void UpdateTripleListAndCreateNewTriple(PermissionSetTriple currentTriple, ArrayList tripleList)
- {
- if (!currentTriple.IsEmpty())
- {
- if (m_firstPermSetTriple == null && m_permSetTriples == null)
- {
- m_firstPermSetTriple = new PermissionSetTriple(currentTriple);
- }
- else
- {
- EnsureTriplesListCreated();
- m_permSetTriples.Add(new PermissionSetTriple(currentTriple));
- }
- currentTriple.Reset();
- }
- if (tripleList != null)
- {
- EnsureTriplesListCreated();
- m_permSetTriples.AddRange(tripleList);
- }
- }
-
- private static void UpdateArrayList(ArrayList current, ArrayList newList)
- {
- if (newList == null)
- return;
-
- for(int i=0;i < newList.Count; i++)
- {
- if (!current.Contains(newList[i]))
- current.Add(newList[i]);
- }
-
- }
-
-#if FEATURE_COMPRESSEDSTACK
- private void AppendZoneOrigin(ZoneIdentityPermission z, UrlIdentityPermission u)
- {
-
- if (z != null)
- {
- if (m_zoneList == null)
- m_zoneList = new ArrayList();
- z.AppendZones(m_zoneList);
- }
-
- if (u != null)
- {
- if (m_originList == null)
- m_originList = new ArrayList();
- u.AppendOrigin(m_originList);
- }
- }
-
-[System.Runtime.InteropServices.ComVisible(true)]
- // public(internal) interface begins...
- // Creation functions
- static internal PermissionListSet CreateCompressedState(CompressedStack cs, CompressedStack innerCS)
- {
- // function that completes the construction of the compressed stack if not done so already (bottom half for demand evaluation)
-
- bool bHaltConstruction = false;
- if (cs.CompressedStackHandle == null)
- return null; // FT case or Security off
-
- PermissionListSet pls = new PermissionListSet();
- PermissionSetTriple currentTriple = new PermissionSetTriple();
- int numDomains = CompressedStack.GetDCSCount(cs.CompressedStackHandle);
- for (int i=numDomains-1; (i >= 0 && !bHaltConstruction) ; i--)
- {
- DomainCompressedStack dcs = CompressedStack.GetDomainCompressedStack(cs.CompressedStackHandle, i);
- if (dcs == null)
- continue; // we hit a FT Domain
- if (dcs.PLS == null)
- {
- // We failed on some DCS
- throw new SecurityException(String.Format(CultureInfo.InvariantCulture, Environment.GetResourceString("Security_Generic")));
- }
- pls.UpdateZoneAndOrigin(dcs.PLS);
- pls.Update(currentTriple, dcs.PLS);
- bHaltConstruction = dcs.ConstructionHalted;
- }
- if (!bHaltConstruction)
- {
- PermissionListSet tmp_pls = null;
- // Construction did not halt.
- if (innerCS != null)
- {
- innerCS.CompleteConstruction(null);
- tmp_pls = innerCS.PLS;
- }
- pls.Terminate(currentTriple, tmp_pls);
- }
- else
- {
- pls.Terminate(currentTriple);
- }
-
- return pls;
- }
-
- static internal PermissionListSet CreateCompressedState(IntPtr unmanagedDCS, out bool bHaltConstruction)
- {
- PermissionListSet pls = new PermissionListSet();
- PermissionSetTriple currentTriple = new PermissionSetTriple();
-
- PermissionSet tmp_g, tmp_r;
- // Construct the descriptor list
- int descCount = DomainCompressedStack.GetDescCount(unmanagedDCS);
- bHaltConstruction = false;
- for(int i=0; (i < descCount && !bHaltConstruction); i++)
- {
- FrameSecurityDescriptor fsd;
- Assembly assembly;
- if (DomainCompressedStack.GetDescriptorInfo(unmanagedDCS, i, out tmp_g, out tmp_r, out assembly, out fsd))
- {
- // Got an FSD
- bHaltConstruction = pls.Update(currentTriple, fsd);
- }
- else
- {
- pls.Update(currentTriple, tmp_g, tmp_r);
- }
-
- }
- if (!bHaltConstruction)
- {
- // domain
- if (!DomainCompressedStack.IgnoreDomain(unmanagedDCS))
- {
- DomainCompressedStack.GetDomainPermissionSets(unmanagedDCS, out tmp_g, out tmp_r);
- pls.Update(currentTriple, tmp_g, tmp_r);
- }
- }
- pls.Terminate(currentTriple);
-
-
- // return the created object
- return pls;
-
- }
- static internal PermissionListSet CreateCompressedState_HG()
- {
- PermissionListSet pls = new PermissionListSet();
- CompressedStack.GetHomogeneousPLS(pls);
- return pls;
- }
-#endif // #if FEATURE_COMPRESSEDSTACK
- // Private Demand evaluation functions - only called from the VM
- internal bool CheckDemandNoThrow(CodeAccessPermission demand)
- {
- // AppDomain permissions - no asserts. So there should only be one triple to work with
- Debug.Assert(m_permSetTriples == null && m_firstPermSetTriple != null, "More than one PermissionSetTriple encountered in AD PermissionListSet");
-
-
-
- PermissionToken permToken = null;
- if (demand != null)
- permToken = PermissionToken.GetToken(demand);
-
- return m_firstPermSetTriple.CheckDemandNoThrow(demand, permToken);
-
-
- }
- internal bool CheckSetDemandNoThrow(PermissionSet pSet)
- {
- // AppDomain permissions - no asserts. So there should only be one triple to work with
- Debug.Assert(m_permSetTriples == null && m_firstPermSetTriple != null, "More than one PermissionSetTriple encountered in AD PermissionListSet");
-
-
- return m_firstPermSetTriple.CheckSetDemandNoThrow(pSet);
- }
-
- // Demand evauation functions
- internal bool CheckDemand(CodeAccessPermission demand, PermissionToken permToken, RuntimeMethodHandleInternal rmh)
- {
- bool bRet = SecurityRuntime.StackContinue;
- if (m_permSetTriples != null)
- {
- for (int i=0; (i < m_permSetTriples.Count && bRet != SecurityRuntime.StackHalt) ; i++)
- {
- PermissionSetTriple psTriple = (PermissionSetTriple)m_permSetTriples[i];
- bRet = psTriple.CheckDemand(demand, permToken, rmh);
- }
- }
- else if (m_firstPermSetTriple != null)
- {
- bRet = m_firstPermSetTriple.CheckDemand(demand, permToken, rmh);
- }
-
- return bRet;
- }
-
- internal bool CheckSetDemand(PermissionSet pset , RuntimeMethodHandleInternal rmh)
- {
- PermissionSet unused;
- CheckSetDemandWithModification(pset, out unused, rmh);
- return SecurityRuntime.StackHalt; // CS demand check always terminates the stackwalk
- }
-
- internal bool CheckSetDemandWithModification(PermissionSet pset, out PermissionSet alteredDemandSet, RuntimeMethodHandleInternal rmh)
- {
- bool bRet = SecurityRuntime.StackContinue;
- PermissionSet demandSet = pset;
- alteredDemandSet = null;
- if (m_permSetTriples != null)
- {
- for (int i=0; (i < m_permSetTriples.Count && bRet != SecurityRuntime.StackHalt) ; i++)
- {
- PermissionSetTriple psTriple = (PermissionSetTriple)m_permSetTriples[i];
- bRet = psTriple.CheckSetDemand(demandSet, out alteredDemandSet, rmh);
- if (alteredDemandSet != null)
- demandSet = alteredDemandSet;
- }
- }
- else if (m_firstPermSetTriple != null)
- {
- bRet = m_firstPermSetTriple.CheckSetDemand(demandSet, out alteredDemandSet, rmh);
- }
-
- return bRet;
- }
-
- /// <summary>
- /// Check to see if the PLS satisfies a demand for the special permissions encoded in flags
- /// </summary>
- /// <param name="flags">set of flags to check (See PermissionType)</param>
- private bool CheckFlags(int flags)
- {
- Debug.Assert(flags != 0, "Invalid permission flag demand");
-
- bool check = true;
-
- if (m_permSetTriples != null)
- {
- for (int i = 0; i < m_permSetTriples.Count && check && flags != 0; i++)
- {
- check &= ((PermissionSetTriple)m_permSetTriples[i]).CheckFlags(ref flags);
- }
- }
- else if (m_firstPermSetTriple != null)
- {
- check = m_firstPermSetTriple.CheckFlags(ref flags);
- }
-
- return check;
- }
-
- /// <summary>
- /// Demand which succeeds if either a set of special permissions or a permission set is granted
- /// to the call stack
- /// </summary>
- /// <param name="flags">set of flags to check (See PermissionType)</param>
- /// <param name="grantSet">alternate permission set to check</param>
- internal void DemandFlagsOrGrantSet(int flags, PermissionSet grantSet)
- {
- if (CheckFlags(flags))
- return;
-
- CheckSetDemand(grantSet, RuntimeMethodHandleInternal.EmptyHandle);
- }
-
-#if FEATURE_COMPRESSEDSTACK
- internal void GetZoneAndOrigin(ArrayList zoneList, ArrayList originList, PermissionToken zoneToken, PermissionToken originToken)
- {
- if (m_zoneList != null)
- zoneList.AddRange(m_zoneList);
- if (m_originList != null)
- originList.AddRange(m_originList);
- }
-#endif
- }
-
-}
diff --git a/src/mscorlib/src/System/Security/PermissionSet.cs b/src/mscorlib/src/System/Security/PermissionSet.cs
deleted file mode 100644
index 11ca02a81e..0000000000
--- a/src/mscorlib/src/System/Security/PermissionSet.cs
+++ /dev/null
@@ -1,1605 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-namespace System.Security {
- using System;
- using System.Threading;
- using System.Security.Util;
- using System.Collections;
- using System.IO;
- using System.Security.Permissions;
- using System.Runtime.CompilerServices;
- using System.Security.Policy;
-#if FEATURE_SERIALIZATION
- using System.Runtime.Serialization.Formatters.Binary;
-#endif // FEATURE_SERIALIZATION
- using BindingFlags = System.Reflection.BindingFlags;
- using System.Runtime.Serialization;
- using System.Text;
- using System.Globalization;
- using System.Runtime.Versioning;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- internal enum SpecialPermissionSetFlag
- {
- // These also appear in clr/src/vm/permset.h
- Regular = 0,
- NoSet = 1,
- EmptySet = 2,
- SkipVerification = 3
- }
-
-#if FEATURE_SERIALIZATION
- [Serializable]
-#endif
- [System.Runtime.InteropServices.ComVisible(true)]
- public class PermissionSet : ISecurityEncodable, ICollection, IStackWalk
-#if FEATURE_SERIALIZATION
- , IDeserializationCallback
-#endif
- {
-#if _DEBUG
- internal static readonly bool debug;
-#endif
-
- [System.Diagnostics.Conditional( "_DEBUG" )]
- private static void DEBUG_WRITE(String str) {
- #if _DEBUG
- if (debug) Console.WriteLine(str);
- #endif
- }
-
- [System.Diagnostics.Conditional( "_DEBUG" )]
- private static void DEBUG_COND_WRITE(bool exp, String str)
- {
- #if _DEBUG
- if (debug && (exp)) Console.WriteLine(str);
- #endif
- }
-
- [System.Diagnostics.Conditional( "_DEBUG" )]
- private static void DEBUG_PRINTSTACK(Exception e)
- {
- #if _DEBUG
- if (debug) Console.WriteLine((e).StackTrace);
- #endif
- }
-
- // These members are accessed from EE using their hardcoded offset.
- // Please update the PermissionSetObject in object.h if you make any changes
- // to the fields here. !dumpobj will show the field layout
-
- // First the fields that are serialized x-appdomain (for perf reasons)
- private bool m_Unrestricted;
- [OptionalField(VersionAdded = 2)]
- private bool m_allPermissionsDecoded = false;
-
- [OptionalField(VersionAdded = 2)]
- internal TokenBasedSet m_permSet = null;
-
- // This is a workaround so that SQL can operate under default policy without actually
- // granting permissions in assemblies that they disallow.
-
- [OptionalField(VersionAdded = 2)]
- private bool m_ignoreTypeLoadFailures = false;
-
- // This field will be populated only for non X-AD scenarios where we create a XML-ised string of the PermissionSet
- [OptionalField(VersionAdded = 2)]
- private String m_serializedPermissionSet;
-
- [NonSerialized] private bool m_CheckedForNonCas;
- [NonSerialized] private bool m_ContainsCas;
- [NonSerialized] private bool m_ContainsNonCas;
-
- // only used during non X-AD serialization to save the m_permSet value (which we dont want serialized)
- [NonSerialized] private TokenBasedSet m_permSetSaved;
-
- // Following 4 fields are used only for serialization compat purposes: DO NOT USE THESE EVER!
-#pragma warning disable 169
- private bool readableonly;
- private TokenBasedSet m_unrestrictedPermSet;
- private TokenBasedSet m_normalPermSet;
-
- [OptionalField(VersionAdded = 2)]
- private bool m_canUnrestrictedOverride;
-#pragma warning restore 169
- // END: Serialization-only fields
-
- internal static readonly PermissionSet s_fullTrust = new PermissionSet( true );
-
-#if _DEBUG
- [OnSerialized]
- private void OnSerialized(StreamingContext context)
- {
- Debug.Assert(false, "PermissionSet does not support serialization on CoreCLR");
- }
-#endif // _DEBUG
-
- internal PermissionSet()
- {
- Reset();
- m_Unrestricted = true;
- }
-
- internal PermissionSet(bool fUnrestricted)
- : this()
- {
- SetUnrestricted(fUnrestricted);
- }
-
- public PermissionSet(PermissionState state)
- : this()
- {
- if (state == PermissionState.Unrestricted)
- {
- SetUnrestricted( true );
- }
- else if (state == PermissionState.None)
- {
- SetUnrestricted( false );
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public PermissionSet(PermissionSet permSet)
- : this()
- {
- if (permSet == null)
- {
- Reset();
- return;
- }
-
- m_Unrestricted = permSet.m_Unrestricted;
- m_CheckedForNonCas = permSet.m_CheckedForNonCas;
- m_ContainsCas = permSet.m_ContainsCas;
- m_ContainsNonCas = permSet.m_ContainsNonCas;
- m_ignoreTypeLoadFailures = permSet.m_ignoreTypeLoadFailures;
-
- if (permSet.m_permSet != null)
- {
- m_permSet = new TokenBasedSet(permSet.m_permSet);
-
- // now deep copy all permissions in set
- for (int i = m_permSet.GetStartingIndex(); i <= m_permSet.GetMaxUsedIndex(); i++)
- {
- Object obj = m_permSet.GetItem(i);
- IPermission perm = obj as IPermission;
-
- if (perm != null)
- {
- m_permSet.SetItem(i, perm.Copy());
- }
- }
- }
- }
-
- public virtual void CopyTo(Array array, int index)
- {
- if (array == null)
- throw new ArgumentNullException( nameof(array) );
- Contract.EndContractBlock();
-
- PermissionSetEnumeratorInternal enumerator = new PermissionSetEnumeratorInternal(this);
-
- while (enumerator.MoveNext())
- {
- array.SetValue(enumerator.Current , index++ );
- }
- }
-
-
- // private constructor that doesn't create any token based sets
- private PermissionSet( Object trash, Object junk )
- {
- m_Unrestricted = false;
- }
-
-
- // Returns an object appropriate for synchronizing access to this
- // Array.
- public virtual Object SyncRoot
- { get { return this; } }
-
- // Is this Array synchronized (i.e., thread-safe)? If you want a synchronized
- // collection, you can use SyncRoot as an object to synchronize your
- // collection with. You could also call GetSynchronized()
- // to get a synchronized wrapper around the Array.
- public virtual bool IsSynchronized
- { get { return false; } }
-
- // Is this Collection ReadOnly?
- public virtual bool IsReadOnly
- { get {return false; } }
-
- // Reinitializes all state in PermissionSet - DO NOT null-out m_serializedPermissionSet
- internal void Reset()
- {
- m_Unrestricted = false;
- m_allPermissionsDecoded = true;
- m_permSet = null;
-
- m_ignoreTypeLoadFailures = false;
-
- m_CheckedForNonCas = false;
- m_ContainsCas = false;
- m_ContainsNonCas = false;
- m_permSetSaved = null;
-
-
- }
-
- internal void CheckSet()
- {
- if (this.m_permSet == null)
- this.m_permSet = new TokenBasedSet();
- }
-
- public bool IsEmpty()
- {
- if (m_Unrestricted)
- return false;
-
- if (m_permSet == null || m_permSet.FastIsEmpty())
- return true;
-
- PermissionSetEnumeratorInternal enumerator = new PermissionSetEnumeratorInternal(this);
-
- while (enumerator.MoveNext())
- {
- IPermission perm = (IPermission)enumerator.Current;
-
- if (!perm.IsSubsetOf( null ))
- {
- return false;
- }
- }
-
- return true;
- }
-
- internal bool FastIsEmpty()
- {
- if (m_Unrestricted)
- return false;
-
- if (m_permSet == null || m_permSet.FastIsEmpty())
- return true;
-
- return false;
- }
-
- public virtual int Count
- {
- get
- {
- int count = 0;
-
- if (m_permSet != null)
- count += m_permSet.GetCount();
-
- return count;
- }
- }
-
- internal IPermission GetPermission(int index)
- {
- if (m_permSet == null)
- return null;
- Object obj = m_permSet.GetItem( index );
- if (obj == null)
- return null;
- return obj as IPermission;
- }
-
- internal IPermission GetPermission(PermissionToken permToken)
- {
- if (permToken == null)
- return null;
-
- return GetPermission( permToken.m_index );
- }
-
- internal IPermission GetPermission( IPermission perm )
- {
- if (perm == null)
- return null;
-
- return GetPermission(PermissionToken.GetToken( perm ));
- }
-
- public IPermission SetPermission(IPermission perm)
- {
- return SetPermissionImpl(perm);
- }
-
- // SetPermission overwrites a permission in a permissionset.
- protected virtual IPermission SetPermissionImpl(IPermission perm)
- {
- // can't get token if perm is null
- if (perm == null)
- return null;
-
- PermissionToken permToken = PermissionToken.GetToken(perm);
-
- if ((permToken.m_type & PermissionTokenType.IUnrestricted) != 0)
- {
- // SetPermission Makes the Permission "Restricted"
- m_Unrestricted = false;
- }
-
- CheckSet();
-
- IPermission currPerm = GetPermission( permToken.m_index );
-
- m_CheckedForNonCas = false;
-
- // Should we copy here?
- m_permSet.SetItem( permToken.m_index, perm );
- return perm;
- }
-
- public IPermission AddPermission(IPermission perm)
- {
- return AddPermissionImpl(perm);
- }
-
- protected virtual IPermission AddPermissionImpl(IPermission perm)
- {
- // can't get token if perm is null
- if (perm == null)
- return null;
-
- m_CheckedForNonCas = false;
-
- // If the permission set is unrestricted, then return an unrestricted instance
- // of perm.
-
- PermissionToken permToken = PermissionToken.GetToken(perm);
-
- if (this.IsUnrestricted() && ((permToken.m_type & PermissionTokenType.IUnrestricted) != 0))
- {
- Type perm_type = perm.GetType();
- Object[] objs = new Object[1];
- objs[0] = PermissionState.Unrestricted;
- return (IPermission) Activator.CreateInstance(perm_type, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public, null, objs, null );
- }
-
- CheckSet();
- IPermission currPerm = GetPermission(permToken.m_index);
-
- // If a Permission exists in this slot, then union it with perm
- // Otherwise, just add perm.
-
- if (currPerm != null) {
- IPermission ip_union = currPerm.Union(perm);
- m_permSet.SetItem( permToken.m_index, ip_union );
- return ip_union;
- } else {
- // Should we copy here?
- m_permSet.SetItem( permToken.m_index, perm );
- return perm;
- }
-
- }
-
- private IPermission RemovePermission( int index )
- {
- IPermission perm = GetPermission(index);
- if (perm == null)
- return null;
- return (IPermission)m_permSet.RemoveItem( index ); // this cast is safe because the call to GetPermission will guarantee it is an IPermission
- }
-
- // Make this internal soon.
- internal void SetUnrestricted(bool unrestricted)
- {
- m_Unrestricted = unrestricted;
- if (unrestricted)
- {
- // if this is to be an unrestricted permset, null the m_permSet member
- m_permSet = null;
- }
- }
-
- public bool IsUnrestricted()
- {
- return m_Unrestricted;
- }
-
- internal enum IsSubsetOfType
- {
- Normal,
- CheckDemand,
- CheckPermitOnly,
- CheckAssertion,
- }
-
- internal bool IsSubsetOfHelper(PermissionSet target, IsSubsetOfType type, out IPermission firstPermThatFailed, bool ignoreNonCas)
- {
- #if _DEBUG
- if (debug)
- DEBUG_WRITE("IsSubsetOf\n" +
- "Other:\n" +
- (target == null ? "<null>" : target.ToString()) +
- "\nMe:\n" +
- ToString());
- #endif
-
- firstPermThatFailed = null;
- if (target == null || target.FastIsEmpty())
- {
- if(this.IsEmpty())
- return true;
- else
- {
- firstPermThatFailed = GetFirstPerm();
- return false;
- }
- }
- else if (this.IsUnrestricted() && !target.IsUnrestricted())
- return false;
- else if (this.m_permSet == null)
- return true;
- else
- {
- target.CheckSet();
-
- for (int i = m_permSet.GetStartingIndex(); i <= this.m_permSet.GetMaxUsedIndex(); ++i)
- {
- IPermission thisPerm = this.GetPermission(i);
- if (thisPerm == null || thisPerm.IsSubsetOf(null))
- continue;
-
- IPermission targetPerm = target.GetPermission(i);
-#if _DEBUG
- PermissionToken token = (PermissionToken)PermissionToken.s_tokenSet.GetItem( i );
- Debug.Assert(targetPerm == null || (token.m_type & PermissionTokenType.DontKnow) == 0, "Token not properly initialized");
-#endif
-
- if (target.m_Unrestricted)
- continue;
-
- // targetPerm can be null here, but that is fine since it thisPerm is a subset
- // of empty/null then we can continue in the loop.
- CodeAccessPermission cap = thisPerm as CodeAccessPermission;
- if(cap == null)
- {
- if (!ignoreNonCas && !thisPerm.IsSubsetOf( targetPerm ))
- {
- firstPermThatFailed = thisPerm;
- return false;
- }
- }
- else
- {
- firstPermThatFailed = thisPerm;
- switch(type)
- {
- case IsSubsetOfType.Normal:
- if (!thisPerm.IsSubsetOf( targetPerm ))
- return false;
- break;
- case IsSubsetOfType.CheckDemand:
- if (!cap.CheckDemand( (CodeAccessPermission)targetPerm ))
- return false;
- break;
- case IsSubsetOfType.CheckPermitOnly:
- if (!cap.CheckPermitOnly( (CodeAccessPermission)targetPerm ))
- return false;
- break;
- case IsSubsetOfType.CheckAssertion:
- if (!cap.CheckAssert( (CodeAccessPermission)targetPerm ))
- return false;
- break;
- }
- firstPermThatFailed = null;
- }
- }
- }
-
- return true;
- }
-
- public bool IsSubsetOf(PermissionSet target)
- {
- IPermission perm;
- return IsSubsetOfHelper(target, IsSubsetOfType.Normal, out perm, false);
- }
-
- internal bool CheckDemand(PermissionSet target, out IPermission firstPermThatFailed)
- {
- return IsSubsetOfHelper(target, IsSubsetOfType.CheckDemand, out firstPermThatFailed, true);
- }
-
- internal bool CheckPermitOnly(PermissionSet target, out IPermission firstPermThatFailed)
- {
- return IsSubsetOfHelper(target, IsSubsetOfType.CheckPermitOnly, out firstPermThatFailed, true);
- }
-
- internal bool CheckAssertion(PermissionSet target)
- {
- IPermission perm;
- return IsSubsetOfHelper(target, IsSubsetOfType.CheckAssertion, out perm, true);
- }
-
- internal bool CheckDeny(PermissionSet deniedSet, out IPermission firstPermThatFailed)
- {
- firstPermThatFailed = null;
- if (deniedSet == null || deniedSet.FastIsEmpty() || this.FastIsEmpty())
- return true;
-
- if(this.m_Unrestricted && deniedSet.m_Unrestricted)
- return false;
-
- CodeAccessPermission permThis, permThat;
- PermissionSetEnumeratorInternal enumThis = new PermissionSetEnumeratorInternal(this);
-
- while (enumThis.MoveNext())
- {
- permThis = enumThis.Current as CodeAccessPermission;
- if(permThis == null || permThis.IsSubsetOf(null))
- continue; // ignore non-CAS permissions in the grant set.
- if (deniedSet.m_Unrestricted)
- {
- firstPermThatFailed = permThis;
- return false;
- }
- permThat = (CodeAccessPermission)deniedSet.GetPermission(enumThis.GetCurrentIndex());
- if (!permThis.CheckDeny(permThat))
- {
- firstPermThatFailed = permThis;
- return false;
- }
- }
- if(this.m_Unrestricted)
- {
- PermissionSetEnumeratorInternal enumThat = new PermissionSetEnumeratorInternal(deniedSet);
- while (enumThat.MoveNext())
- {
- if(enumThat.Current is IPermission)
- return false;
- }
- }
- return true;
- }
-
- internal void CheckDecoded( CodeAccessPermission demandedPerm, PermissionToken tokenDemandedPerm )
- {
- Debug.Assert( demandedPerm != null, "Expected non-null value" );
-
- if (this.m_allPermissionsDecoded || this.m_permSet == null)
- return;
-
- if (tokenDemandedPerm == null)
- tokenDemandedPerm = PermissionToken.GetToken( demandedPerm );
-
- Debug.Assert( tokenDemandedPerm != null, "Unable to find token for demanded permission" );
-
- CheckDecoded( tokenDemandedPerm.m_index );
- }
-
- internal void CheckDecoded( int index )
- {
- if (this.m_allPermissionsDecoded || this.m_permSet == null)
- return;
-
- GetPermission(index);
- }
-
- internal void CheckDecoded(PermissionSet demandedSet)
- {
- Debug.Assert(demandedSet != null, "Expected non-null value");
-
- if (this.m_allPermissionsDecoded || this.m_permSet == null)
- return;
-
- PermissionSetEnumeratorInternal enumerator = demandedSet.GetEnumeratorInternal();
-
- while (enumerator.MoveNext())
- {
- CheckDecoded(enumerator.GetCurrentIndex());
- }
- }
-
- internal void InplaceIntersect( PermissionSet other )
- {
- Exception savedException = null;
-
- m_CheckedForNonCas = false;
-
- if (this == other)
- return;
-
- if (other == null || other.FastIsEmpty())
- {
- // If the other is empty or null, make this empty.
- Reset();
- return;
- }
-
- if (this.FastIsEmpty())
- return;
-
- int maxMax = this.m_permSet == null ? -1 : this.m_permSet.GetMaxUsedIndex();
- int otherMax = other.m_permSet == null ? -1 : other.m_permSet.GetMaxUsedIndex();
-
- if (this.IsUnrestricted() && maxMax < otherMax)
- {
- maxMax = otherMax;
- this.CheckSet();
- }
-
- if (other.IsUnrestricted())
- {
- other.CheckSet();
- }
-
- for (int i = 0; i <= maxMax; ++i)
- {
- Object thisObj = this.m_permSet.GetItem( i );
- IPermission thisPerm = thisObj as IPermission;
-
- Object otherObj = other.m_permSet.GetItem( i );
- IPermission otherPerm = otherObj as IPermission;
-
- if (thisObj == null && otherObj == null)
- continue;
-
- if (thisObj == null)
- {
- // There is no object in <this>, so intersection is empty except for IUnrestrictedPermissions
- if (this.IsUnrestricted())
- {
- {
- PermissionToken token = (PermissionToken)PermissionToken.s_tokenSet.GetItem( i );
- if ((token.m_type & PermissionTokenType.IUnrestricted) != 0)
- {
- this.m_permSet.SetItem( i, otherPerm.Copy() );
- Debug.Assert( PermissionToken.s_tokenSet.GetItem( i ) != null, "PermissionToken should already be assigned" );
- }
- }
- }
- }
- else if (otherObj == null)
- {
- if (other.IsUnrestricted())
- {
- {
- PermissionToken token = (PermissionToken)PermissionToken.s_tokenSet.GetItem( i );
- if ((token.m_type & PermissionTokenType.IUnrestricted) == 0)
- this.m_permSet.SetItem( i, null );
- }
- }
- else
- {
- this.m_permSet.SetItem( i, null );
- }
- }
- else
- {
- try
- {
- IPermission intersectPerm;
- if (thisPerm == null)
- intersectPerm = otherPerm;
- else if(otherPerm == null)
- intersectPerm = thisPerm;
- else
- intersectPerm = thisPerm.Intersect( otherPerm );
- this.m_permSet.SetItem( i, intersectPerm );
- }
- catch (Exception e)
- {
- if (savedException == null)
- savedException = e;
- }
- }
- }
-
- this.m_Unrestricted = this.m_Unrestricted && other.m_Unrestricted;
-
- if (savedException != null)
- throw savedException;
- }
-
- public PermissionSet Intersect(PermissionSet other)
- {
- if (other == null || other.FastIsEmpty() || this.FastIsEmpty())
- {
- return null;
- }
-
- int thisMax = this.m_permSet == null ? -1 : this.m_permSet.GetMaxUsedIndex();
- int otherMax = other.m_permSet == null ? -1 : other.m_permSet.GetMaxUsedIndex();
- int minMax = thisMax < otherMax ? thisMax : otherMax;
-
- if (this.IsUnrestricted() && minMax < otherMax)
- {
- minMax = otherMax;
- this.CheckSet();
- }
-
- if (other.IsUnrestricted() && minMax < thisMax)
- {
- minMax = thisMax;
- other.CheckSet();
- }
-
- PermissionSet pset = new PermissionSet( false );
-
- if (minMax > -1)
- {
- pset.m_permSet = new TokenBasedSet();
- }
-
- for (int i = 0; i <= minMax; ++i)
- {
- Object thisObj = this.m_permSet.GetItem( i );
- IPermission thisPerm = thisObj as IPermission;
- Object otherObj = other.m_permSet.GetItem( i );
- IPermission otherPerm = otherObj as IPermission;
-
- if (thisObj == null && otherObj == null)
- continue;
-
- if (thisObj == null)
- {
- if (this.m_Unrestricted)
- {
- if (otherPerm != null)
- {
- PermissionToken token = (PermissionToken)PermissionToken.s_tokenSet.GetItem( i );
- if ((token.m_type & PermissionTokenType.IUnrestricted) != 0)
- {
- pset.m_permSet.SetItem( i, otherPerm.Copy() );
- Debug.Assert( PermissionToken.s_tokenSet.GetItem( i ) != null, "PermissionToken should already be assigned" );
- }
- }
- }
- }
- else if (otherObj == null)
- {
- if (other.m_Unrestricted)
- {
- if (thisPerm != null)
- {
- PermissionToken token = (PermissionToken)PermissionToken.s_tokenSet.GetItem( i );
- if ((token.m_type & PermissionTokenType.IUnrestricted) != 0)
- {
- pset.m_permSet.SetItem( i, thisPerm.Copy() );
- Debug.Assert( PermissionToken.s_tokenSet.GetItem( i ) != null, "PermissionToken should already be assigned" );
- }
- }
- }
- }
- else
- {
- IPermission intersectPerm;
- if (thisPerm == null)
- intersectPerm = otherPerm;
- else if(otherPerm == null)
- intersectPerm = thisPerm;
- else
- intersectPerm = thisPerm.Intersect( otherPerm );
- pset.m_permSet.SetItem( i, intersectPerm );
- Debug.Assert( intersectPerm == null || PermissionToken.s_tokenSet.GetItem( i ) != null, "PermissionToken should already be assigned" );
- }
- }
-
- pset.m_Unrestricted = this.m_Unrestricted && other.m_Unrestricted;
- if (pset.FastIsEmpty())
- return null;
- else
- return pset;
- }
-
- internal void InplaceUnion( PermissionSet other )
- {
- // Unions the "other" PermissionSet into this one. It can be optimized to do less copies than
- // need be done by the traditional union (and we don't have to create a new PermissionSet).
-
- if (this == other)
- return;
-
- // Quick out conditions, union doesn't change this PermissionSet
- if (other == null || other.FastIsEmpty())
- return;
-
- m_CheckedForNonCas = false;
-
- this.m_Unrestricted = this.m_Unrestricted || other.m_Unrestricted;
-
- if (this.m_Unrestricted)
- {
- // if the result of Union is unrestricted permset, null the m_permSet member
- this.m_permSet = null;
- return;
- }
-
-
- // If we reach here, result of Union is not unrestricted
- // We have to union "normal" permission no matter what now.
- int maxMax = -1;
- if (other.m_permSet != null)
- {
- maxMax = other.m_permSet.GetMaxUsedIndex();
- this.CheckSet();
- }
- // Save exceptions until the end
- Exception savedException = null;
-
- for (int i = 0; i <= maxMax; ++i)
- {
- Object thisObj = this.m_permSet.GetItem( i );
- IPermission thisPerm = thisObj as IPermission;
-
- Object otherObj = other.m_permSet.GetItem( i );
- IPermission otherPerm = otherObj as IPermission;
-
- if (thisObj == null && otherObj == null)
- continue;
-
- if (thisObj == null)
- {
- if (otherPerm != null)
- {
- PermissionToken token = (PermissionToken)PermissionToken.s_tokenSet.GetItem( i );
- if (((token.m_type & PermissionTokenType.IUnrestricted) == 0) || !this.m_Unrestricted)
- {
- this.m_permSet.SetItem( i, otherPerm.Copy() );
- }
- }
- }
- else if (otherObj == null)
- {
- continue;
- }
- else
- {
- try
- {
- IPermission unionPerm;
- if(thisPerm == null)
- unionPerm = otherPerm;
- else if(otherPerm == null)
- unionPerm = thisPerm;
- else
- unionPerm = thisPerm.Union( otherPerm );
- this.m_permSet.SetItem( i, unionPerm );
- }
- catch (Exception e)
- {
- if (savedException == null)
- savedException = e;
- }
- }
- }
-
- if (savedException != null)
- throw savedException;
- }
-
- public PermissionSet Union(PermissionSet other)
- {
- // if other is null or empty, return a clone of myself
- if (other == null || other.FastIsEmpty())
- {
- return this.Copy();
- }
-
- if (this.FastIsEmpty())
- {
- return other.Copy();
- }
-
- int maxMax = -1;
-
- PermissionSet pset = new PermissionSet();
- pset.m_Unrestricted = this.m_Unrestricted || other.m_Unrestricted;
- if (pset.m_Unrestricted)
- {
- // if the result of Union is unrestricted permset, just return
- return pset;
- }
-
- // degenerate case where we look at both this.m_permSet and other.m_permSet
- this.CheckSet();
- other.CheckSet();
- maxMax = this.m_permSet.GetMaxUsedIndex() > other.m_permSet.GetMaxUsedIndex() ? this.m_permSet.GetMaxUsedIndex() : other.m_permSet.GetMaxUsedIndex();
- pset.m_permSet = new TokenBasedSet();
-
-
-
- for (int i = 0; i <= maxMax; ++i)
- {
- Object thisObj = this.m_permSet.GetItem( i );
- IPermission thisPerm = thisObj as IPermission;
-
- Object otherObj = other.m_permSet.GetItem( i );
- IPermission otherPerm = otherObj as IPermission;
-
- if (thisObj == null && otherObj == null)
- continue;
-
- if (thisObj == null)
- {
- if (otherPerm != null)
- {
- PermissionToken token = (PermissionToken)PermissionToken.s_tokenSet.GetItem( i );
- if (((token.m_type & PermissionTokenType.IUnrestricted) == 0) || !pset.m_Unrestricted)
- {
- pset.m_permSet.SetItem( i, otherPerm.Copy() );
- Debug.Assert( PermissionToken.s_tokenSet.GetItem( i ) != null, "PermissionToken should already be assigned" );
- }
- }
- }
- else if (otherObj == null)
- {
- if (thisPerm != null)
- {
- PermissionToken token = (PermissionToken)PermissionToken.s_tokenSet.GetItem( i );
- if (((token.m_type & PermissionTokenType.IUnrestricted) == 0) || !pset.m_Unrestricted)
- {
- pset.m_permSet.SetItem( i, thisPerm.Copy() );
- Debug.Assert( PermissionToken.s_tokenSet.GetItem( i ) != null, "PermissionToken should already be assigned" );
- }
- }
- }
- else
- {
- IPermission unionPerm;
- if(thisPerm == null)
- unionPerm = otherPerm;
- else if(otherPerm == null)
- unionPerm = thisPerm;
- else
- unionPerm = thisPerm.Union( otherPerm );
- pset.m_permSet.SetItem( i, unionPerm );
- Debug.Assert( unionPerm == null || PermissionToken.s_tokenSet.GetItem( i ) != null, "PermissionToken should already be assigned" );
- }
- }
-
- return pset;
- }
-
- // Treating the current permission set as a grant set, and the input set as
- // a set of permissions to be denied, try to cancel out as many permissions
- // from both sets as possible. For a first cut, any granted permission that
- // is a safe subset of the corresponding denied permission can result in
- // that permission being removed from both sides.
-
- internal void MergeDeniedSet(PermissionSet denied)
- {
- if (denied == null || denied.FastIsEmpty() || this.FastIsEmpty())
- return;
-
- m_CheckedForNonCas = false;
-
- // Check for the unrestricted case: FastIsEmpty() will return false if the PSet is unrestricted, but has no items
- if (this.m_permSet == null || denied.m_permSet == null)
- return; //nothing can be removed
-
- int maxIndex = denied.m_permSet.GetMaxUsedIndex() > this.m_permSet.GetMaxUsedIndex() ? this.m_permSet.GetMaxUsedIndex() : denied.m_permSet.GetMaxUsedIndex();
- for (int i = 0; i <= maxIndex; ++i) {
- IPermission deniedPerm = denied.m_permSet.GetItem(i) as IPermission;
- if (deniedPerm == null)
- continue;
-
- IPermission thisPerm = this.m_permSet.GetItem(i) as IPermission;
-
- if (thisPerm == null && !this.m_Unrestricted) {
- denied.m_permSet.SetItem(i, null);
- continue;
- }
-
- if (thisPerm != null && deniedPerm != null) {
- if (thisPerm.IsSubsetOf(deniedPerm)) {
- this.m_permSet.SetItem(i, null);
- denied.m_permSet.SetItem(i, null);
- }
- }
- }
- }
-
- // Returns true if perm is contained in this
- internal bool Contains(IPermission perm)
- {
- if (perm == null)
- return true;
- if (m_Unrestricted)
- return true;
- if (FastIsEmpty())
- return false;
-
- PermissionToken token = PermissionToken.GetToken(perm);
- Object thisObj = this.m_permSet.GetItem( token.m_index );
- if (thisObj == null)
- return perm.IsSubsetOf( null );
-
- IPermission thisPerm = GetPermission(token.m_index);
- if (thisPerm != null)
- return perm.IsSubsetOf( thisPerm );
- else
- return perm.IsSubsetOf( null );
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override bool Equals( Object obj )
- {
- // Note: this method is designed to accept both PermissionSet and NamedPermissionSets.
- // It will compare them based on the values in the base type, thereby ignoring the
- // name and description of the named permission set.
-
- PermissionSet other = obj as PermissionSet;
-
- if (other == null)
- return false;
-
- if (this.m_Unrestricted != other.m_Unrestricted)
- return false;
-
- CheckSet();
- other.CheckSet();
-
- DecodeAllPermissions();
- other.DecodeAllPermissions();
-
- int maxIndex = Math.Max( this.m_permSet.GetMaxUsedIndex(), other.m_permSet.GetMaxUsedIndex() );
-
- for (int i = 0; i <= maxIndex; ++i)
- {
- IPermission thisPerm = (IPermission)this.m_permSet.GetItem( i );
- IPermission otherPerm = (IPermission)other.m_permSet.GetItem( i );
-
- if (thisPerm == null && otherPerm == null)
- {
- continue;
- }
- else if (thisPerm == null)
- {
- if (!otherPerm.IsSubsetOf( null ))
- return false;
- }
- else if (otherPerm == null)
- {
- if (!thisPerm.IsSubsetOf( null ))
- return false;
- }
- else
- {
- if (!thisPerm.Equals( otherPerm ))
- return false;
- }
- }
-
- return true;
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override int GetHashCode()
- {
- int accumulator;
-
- accumulator = this.m_Unrestricted ? -1 : 0;
-
- if (this.m_permSet != null)
- {
- DecodeAllPermissions();
-
- int maxIndex = this.m_permSet.GetMaxUsedIndex();
-
- for (int i = m_permSet.GetStartingIndex(); i <= maxIndex; ++i)
- {
- IPermission perm = (IPermission)this.m_permSet.GetItem( i );
- if (perm != null)
- {
- accumulator = accumulator ^ perm.GetHashCode();
- }
- }
- }
-
- return accumulator;
- }
-
- // Mark this method as requiring a security object on the caller's frame
- // so the caller won't be inlined (which would mess up stack crawling).
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public void Demand()
- {
- if (this.FastIsEmpty())
- return; // demanding the empty set always passes.
-
- ContainsNonCodeAccessPermissions();
-
- if (m_ContainsCas)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCallersCaller;
- CodeAccessSecurityEngine.Check(GetCasOnlySet(), ref stackMark);
- }
- if (m_ContainsNonCas)
- {
- DemandNonCAS();
- }
- }
-
- internal void DemandNonCAS()
- {
- ContainsNonCodeAccessPermissions();
-
- if (m_ContainsNonCas)
- {
- if (this.m_permSet != null)
- {
- CheckSet();
- for (int i = m_permSet.GetStartingIndex(); i <= this.m_permSet.GetMaxUsedIndex(); ++i)
- {
- IPermission currPerm = GetPermission(i);
- if (currPerm != null && !(currPerm is CodeAccessPermission))
- currPerm.Demand();
- }
- }
- }
- }
-
- // Metadata for this method should be flaged with REQ_SQ so that
- // EE can allocate space on the stack frame for FrameSecurityDescriptor
-
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public void Assert()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- SecurityRuntime.Assert(this, ref stackMark);
- }
-
- // Metadata for this method should be flaged with REQ_SQ so that
- // EE can allocate space on the stack frame for FrameSecurityDescriptor
-
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- [Obsolete("Deny is obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- public void Deny()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- SecurityRuntime.Deny(this, ref stackMark);
- }
-
- // Metadata for this method should be flaged with REQ_SQ so that
- // EE can allocate space on the stack frame for FrameSecurityDescriptor
-
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public void PermitOnly()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- SecurityRuntime.PermitOnly(this, ref stackMark);
- }
-
- internal IPermission GetFirstPerm()
- {
- IEnumerator enumerator = GetEnumerator();
- if(!enumerator.MoveNext())
- return null;
- return enumerator.Current as IPermission;
- }
-
- // Returns a deep copy
- public virtual PermissionSet Copy()
- {
- return new PermissionSet(this);
- }
-
- internal PermissionSet CopyWithNoIdentityPermissions()
- {
- // Explicitly make a new PermissionSet, rather than copying, since we may have a
- // ReadOnlyPermissionSet which cannot have identity permissions removed from it in a true copy.
- return new PermissionSet(this);
- }
-
- public IEnumerator GetEnumerator()
- {
- return GetEnumeratorImpl();
- }
-
- protected virtual IEnumerator GetEnumeratorImpl()
- {
- return new PermissionSetEnumerator(this);
- }
-
- internal PermissionSetEnumeratorInternal GetEnumeratorInternal()
- {
- return new PermissionSetEnumeratorInternal(this);
- }
-
- private void NormalizePermissionSet()
- {
- // This function guarantees that all the permissions are placed at
- // the proper index within the token based sets. This becomes necessary
- // since these indices are dynamically allocated based on usage order.
-
- PermissionSet permSetTemp = new PermissionSet(false);
-
- permSetTemp.m_Unrestricted = this.m_Unrestricted;
-
- // Move all the normal permissions to the new permission set
-
- if (this.m_permSet != null)
- {
- for (int i = m_permSet.GetStartingIndex(); i <= this.m_permSet.GetMaxUsedIndex(); ++i)
- {
- Object obj = this.m_permSet.GetItem(i);
- IPermission perm = obj as IPermission;
- if (perm != null)
- permSetTemp.SetPermission( perm );
- }
- }
-
- this.m_permSet = permSetTemp.m_permSet;
- }
-
- private void DecodeAllPermissions()
- {
- if (m_permSet == null)
- {
- m_allPermissionsDecoded = true;
- return;
- }
-
- int maxIndex = m_permSet.GetMaxUsedIndex();
- for (int i = 0; i <= maxIndex; ++i)
- {
- // GetPermission has the side-effect of decoding the permission in the slot
- GetPermission(i);
- }
-
- m_allPermissionsDecoded = true;
- }
-
- internal void FilterHostProtectionPermissions(HostProtectionResource fullTrustOnly, HostProtectionResource inaccessible)
- {
- HostProtectionPermission.protectedResources = fullTrustOnly;
- HostProtectionPermission hpp = (HostProtectionPermission)GetPermission(HostProtectionPermission.GetTokenIndex());
- if(hpp == null)
- return;
-
- HostProtectionPermission newHpp = (HostProtectionPermission)hpp.Intersect(new HostProtectionPermission(fullTrustOnly));
- if (newHpp == null)
- {
- RemovePermission(HostProtectionPermission.GetTokenIndex());
- }
- else if (newHpp.Resources != hpp.Resources)
- {
- SetPermission(newHpp);
- }
- }
-
- // Determines whether the permission set contains any non-code access
- // security permissions.
- public bool ContainsNonCodeAccessPermissions()
- {
- if (m_CheckedForNonCas)
- return m_ContainsNonCas;
-
- lock (this)
- {
- if (m_CheckedForNonCas)
- return m_ContainsNonCas;
-
- m_ContainsCas = false;
- m_ContainsNonCas = false;
-
- if (IsUnrestricted())
- m_ContainsCas = true;
-
- if (this.m_permSet != null)
- {
- PermissionSetEnumeratorInternal enumerator = new PermissionSetEnumeratorInternal(this);
-
- while (enumerator.MoveNext() && (!m_ContainsCas || !m_ContainsNonCas))
- {
- IPermission perm = enumerator.Current as IPermission;
-
- if (perm != null)
- {
- if (perm is CodeAccessPermission)
- m_ContainsCas = true;
- else
- m_ContainsNonCas = true;
- }
- }
- }
-
- m_CheckedForNonCas = true;
- }
-
- return m_ContainsNonCas;
- }
-
- // Returns a permission set containing only CAS-permissions. If possible
- // this is just the input set, otherwise a new set is allocated.
- private PermissionSet GetCasOnlySet()
- {
- if (!m_ContainsNonCas)
- return this;
-
- if (IsUnrestricted())
- return this;
-
- PermissionSet pset = new PermissionSet(false);
-
- PermissionSetEnumeratorInternal enumerator = new PermissionSetEnumeratorInternal(this);
-
- while (enumerator.MoveNext())
- {
- IPermission perm = (IPermission)enumerator.Current;
-
- if (perm is CodeAccessPermission)
- pset.AddPermission(perm);
- }
-
- pset.m_CheckedForNonCas = true;
- pset.m_ContainsCas = !pset.IsEmpty();
- pset.m_ContainsNonCas = false;
-
- return pset;
- }
-
- // Internal routine used by CreateSerialized to add a permission to the set
- private static void MergePermission(IPermission perm, bool separateCasFromNonCas, ref PermissionSet casPset, ref PermissionSet nonCasPset)
- {
- Debug.Assert(casPset == null || !casPset.IsReadOnly);
- Debug.Assert(nonCasPset == null || !nonCasPset.IsReadOnly);
-
- if (perm == null)
- return;
-
- if (!separateCasFromNonCas || perm is CodeAccessPermission)
- {
- if(casPset == null)
- casPset = new PermissionSet(false);
- IPermission oldPerm = casPset.GetPermission(perm);
- IPermission unionPerm = casPset.AddPermission(perm);
- if (oldPerm != null && !oldPerm.IsSubsetOf( unionPerm ))
- throw new NotSupportedException( Environment.GetResourceString( "NotSupported_DeclarativeUnion" ) );
- }
- else
- {
- if(nonCasPset == null)
- nonCasPset = new PermissionSet(false);
- IPermission oldPerm = nonCasPset.GetPermission(perm);
- IPermission unionPerm = nonCasPset.AddPermission( perm );
- if (oldPerm != null && !oldPerm.IsSubsetOf( unionPerm ))
- throw new NotSupportedException( Environment.GetResourceString( "NotSupported_DeclarativeUnion" ) );
- }
- }
-
- // Converts an array of SecurityAttributes to a PermissionSet
- private static byte[] CreateSerialized(Object[] attrs,
- bool serialize,
- ref byte[] nonCasBlob,
- out PermissionSet casPset,
- HostProtectionResource fullTrustOnlyResources,
- bool allowEmptyPermissionSets)
- {
- // Create two new (empty) sets.
- casPset = null;
- PermissionSet nonCasPset = null;
-
- // Most security attributes generate a single permission. The
- // PermissionSetAttribute class generates an entire permission set we
- // need to merge, however.
- for (int i = 0; i < attrs.Length; i++)
- {
-#pragma warning disable 618
- Debug.Assert(i == 0 || ((SecurityAttribute)attrs[i]).m_action == ((SecurityAttribute)attrs[i - 1]).m_action, "Mixed SecurityActions");
-#pragma warning restore 618
- if (attrs[i] is PermissionSetAttribute)
- {
- PermissionSet pset = ((PermissionSetAttribute)attrs[i]).CreatePermissionSet();
- if (pset == null)
- throw new ArgumentException( Environment.GetResourceString( "Argument_UnableToGeneratePermissionSet" ) );
-
- PermissionSetEnumeratorInternal enumerator = new PermissionSetEnumeratorInternal(pset);
-
- while (enumerator.MoveNext())
- {
- IPermission perm = (IPermission)enumerator.Current;
- MergePermission(perm, serialize, ref casPset, ref nonCasPset);
- }
-
- if(casPset == null)
- casPset = new PermissionSet(false);
- if (pset.IsUnrestricted())
- casPset.SetUnrestricted(true);
- }
- else
- {
-#pragma warning disable 618
- IPermission perm = ((SecurityAttribute)attrs[i]).CreatePermission();
-#pragma warning restore 618
- MergePermission(perm, serialize, ref casPset, ref nonCasPset);
- }
- }
- Debug.Assert(serialize || nonCasPset == null, "We shouldn't separate nonCAS permissions unless fSerialize is true");
-
- //
- // Filter HostProtection permission. In the VM, some optimizations are done based upon these
- // declarative permission sets being NULL if they do not exist. When filtering the permission
- // set if we end up with an empty set, we can the permission set NULL rather than returning the
- // empty set in order to enable those optimizations.
- //
-
- if(casPset != null)
- {
- casPset.FilterHostProtectionPermissions(fullTrustOnlyResources, HostProtectionResource.None);
- casPset.ContainsNonCodeAccessPermissions(); // make sure all declarative PermissionSets are checked for non-CAS so we can just check the flag from native code
- if (allowEmptyPermissionSets && casPset.IsEmpty())
- casPset = null;
- }
- if(nonCasPset != null)
- {
- nonCasPset.FilterHostProtectionPermissions(fullTrustOnlyResources, HostProtectionResource.None);
- nonCasPset.ContainsNonCodeAccessPermissions(); // make sure all declarative PermissionSets are checked for non-CAS so we can just check the flag from native code
- if (allowEmptyPermissionSets && nonCasPset.IsEmpty())
- nonCasPset = null;
- }
-
- Debug.Assert(!serialize, "Cannot serialize permission sets on CoreCLR");
- return null;
- }
-
-#if FEATURE_SERIALIZATION
- /// <internalonly/>
- void IDeserializationCallback.OnDeserialization(Object sender)
- {
- NormalizePermissionSet();
- m_CheckedForNonCas = false;
- }
-#endif
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static void RevertAssert()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- SecurityRuntime.RevertAssert(ref stackMark);
- }
-
- internal static PermissionSet RemoveRefusedPermissionSet(PermissionSet assertSet, PermissionSet refusedSet, out bool bFailedToCompress)
- {
- Debug.Assert((assertSet == null || !assertSet.IsUnrestricted()), "Cannot be unrestricted here");
- PermissionSet retPs = null;
- bFailedToCompress = false;
- if (assertSet == null)
- return null;
- if (refusedSet != null)
- {
- if (refusedSet.IsUnrestricted())
- return null; // we're refusing everything...cannot assert anything now.
-
- PermissionSetEnumeratorInternal enumerator = new PermissionSetEnumeratorInternal(refusedSet);
- while (enumerator.MoveNext())
- {
- CodeAccessPermission refusedPerm = (CodeAccessPermission)enumerator.Current;
- int i = enumerator.GetCurrentIndex();
- if (refusedPerm != null)
- {
- CodeAccessPermission perm
- = (CodeAccessPermission)assertSet.GetPermission(i);
- try
- {
- if (refusedPerm.Intersect(perm) != null)
- {
- if (refusedPerm.Equals(perm))
- {
- if (retPs == null)
- retPs = assertSet.Copy();
-
- retPs.RemovePermission(i);
- }
- else
- {
- // Asserting a permission, part of which is already denied/refused
- // cannot compress this assert
- bFailedToCompress = true;
- return assertSet;
- }
- }
- }
- catch (ArgumentException)
- {
- // Any exception during removing a refused set from assert set => we play it safe and not assert that perm
- if (retPs == null)
- retPs = assertSet.Copy();
- retPs.RemovePermission(i);
- }
- }
- }
- }
- if (retPs != null)
- return retPs;
- return assertSet;
- }
-
- internal static void RemoveAssertedPermissionSet(PermissionSet demandSet, PermissionSet assertSet, out PermissionSet alteredDemandSet)
- {
- Debug.Assert(!assertSet.IsUnrestricted(), "Cannot call this function if assertSet is unrestricted");
- alteredDemandSet = null;
-
- PermissionSetEnumeratorInternal enumerator = new PermissionSetEnumeratorInternal(demandSet);
- while (enumerator.MoveNext())
- {
- CodeAccessPermission demandDerm = (CodeAccessPermission)enumerator.Current;
- int i = enumerator.GetCurrentIndex();
- if (demandDerm != null)
- {
- CodeAccessPermission assertPerm
- = (CodeAccessPermission)assertSet.GetPermission(i);
- try
- {
- if (demandDerm.CheckAssert(assertPerm))
- {
- if (alteredDemandSet == null)
- alteredDemandSet = demandSet.Copy();
-
- alteredDemandSet.RemovePermission(i);
- }
- }
- catch (ArgumentException)
- {
- }
- }
- }
- return;
- }
-
- internal static bool IsIntersectingAssertedPermissions(PermissionSet assertSet1, PermissionSet assertSet2)
- {
- bool isIntersecting = false;
- if (assertSet1 != null && assertSet2 != null)
- {
- PermissionSetEnumeratorInternal enumerator = new PermissionSetEnumeratorInternal(assertSet2);
- while (enumerator.MoveNext())
- {
- CodeAccessPermission perm2 = (CodeAccessPermission)enumerator.Current;
- int i = enumerator.GetCurrentIndex();
- if (perm2 != null)
- {
- CodeAccessPermission perm1
- = (CodeAccessPermission)assertSet1.GetPermission(i);
- try
- {
- if (perm1 != null && !perm1.Equals(perm2))
- {
- isIntersecting = true; // Same type of permission, but with different flags or something - cannot union them
- }
- }
- catch (ArgumentException)
- {
- isIntersecting = true; //assume worst case
- }
- }
- }
- }
- return isIntersecting;
-
- }
-
- // This is a workaround so that SQL can operate under default policy without actually
- // granting permissions in assemblies that they disallow.
-
- internal bool IgnoreTypeLoadFailures
- {
- set { m_ignoreTypeLoadFailures = value; }
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/PermissionSetEnumerator.cs b/src/mscorlib/src/System/Security/PermissionSetEnumerator.cs
deleted file mode 100644
index 7b234e9cf4..0000000000
--- a/src/mscorlib/src/System/Security/PermissionSetEnumerator.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-namespace System.Security
-{
- //PermissionSetEnumerator.cs
-
- using System;
- using System.Collections;
- using TokenBasedSetEnumerator = System.Security.Util.TokenBasedSetEnumerator;
- using TokenBasedSet = System.Security.Util.TokenBasedSet;
-
- internal class PermissionSetEnumerator : IEnumerator
- {
- PermissionSetEnumeratorInternal enm;
-
- public Object Current
- {
- get
- {
- return enm.Current;
- }
- }
-
- public bool MoveNext()
- {
- return enm.MoveNext();
- }
-
- public void Reset()
- {
- enm.Reset();
- }
-
- internal PermissionSetEnumerator(PermissionSet permSet)
- {
- enm = new PermissionSetEnumeratorInternal(permSet);
- }
- }
-
- internal struct PermissionSetEnumeratorInternal
- {
- private PermissionSet m_permSet;
- private TokenBasedSetEnumerator enm;
-
- public Object Current
- {
- get
- {
- return enm.Current;
- }
- }
-
- internal PermissionSetEnumeratorInternal(PermissionSet permSet)
- {
- m_permSet = permSet;
- enm = new TokenBasedSetEnumerator(permSet.m_permSet);
- }
-
- public int GetCurrentIndex()
- {
- return enm.Index;
- }
-
- public void Reset()
- {
- enm.Reset();
- }
-
- public bool MoveNext()
- {
- while (enm.MoveNext())
- {
- Object obj = enm.Current;
- IPermission perm = obj as IPermission;
- if (perm != null)
- {
- enm.Current = perm;
- return true;
- }
- }
- return false;
- }
- }
-}
-
diff --git a/src/mscorlib/src/System/Security/PermissionSetTriple.cs b/src/mscorlib/src/System/Security/PermissionSetTriple.cs
deleted file mode 100644
index 56eb22996e..0000000000
--- a/src/mscorlib/src/System/Security/PermissionSetTriple.cs
+++ /dev/null
@@ -1,270 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-**
-** Purpose: Container class for holding an AppDomain's Grantset and Refused sets.
-** Also used for CompressedStacks which brings in the third PermissionSet.
-** Hence, the name PermissionSetTriple.
-**
-=============================================================================*/
-
-namespace System.Security
-{
- using IEnumerator = System.Collections.IEnumerator;
- using System.Security;
- using System.Security.Permissions;
- using System.Runtime.InteropServices;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
-
- [Serializable]
- sealed internal class PermissionSetTriple
- {
- static private volatile PermissionToken s_zoneToken;
- static private volatile PermissionToken s_urlToken;
- internal PermissionSet AssertSet;
- internal PermissionSet GrantSet;
- internal PermissionSet RefusedSet;
- internal PermissionSetTriple()
- {
- Reset();
- }
- internal PermissionSetTriple(PermissionSetTriple triple)
- {
- this.AssertSet = triple.AssertSet;
- this.GrantSet = triple.GrantSet;
- this.RefusedSet = triple.RefusedSet;
- }
- internal void Reset()
- {
- AssertSet = null;
- GrantSet = null;
- RefusedSet = null;
- }
- internal bool IsEmpty()
- {
- return (AssertSet == null && GrantSet == null && RefusedSet == null);
- }
-
- private PermissionToken ZoneToken
- {
- get
- {
- if (s_zoneToken == null)
- s_zoneToken = PermissionToken.GetToken(typeof(ZoneIdentityPermission));
- return s_zoneToken;
- }
- }
- private PermissionToken UrlToken
- {
- get
- {
- if (s_urlToken == null)
- s_urlToken = PermissionToken.GetToken(typeof(UrlIdentityPermission));
- return s_urlToken;
- }
- }
- internal bool Update(PermissionSetTriple psTriple, out PermissionSetTriple retTriple)
- {
- retTriple = null;
- retTriple = UpdateAssert(psTriple.AssertSet);
- // Special case: unrestricted assert. Note: dcs.Assert.IsUnrestricted => dcs.Grant.IsUnrestricted
- if (psTriple.AssertSet != null && psTriple.AssertSet.IsUnrestricted())
- {
- return true; // stop construction
- }
- UpdateGrant(psTriple.GrantSet);
- UpdateRefused(psTriple.RefusedSet);
- return false;
- }
-
- internal PermissionSetTriple UpdateAssert(PermissionSet in_a)
- {
- PermissionSetTriple retTriple = null;
- if (in_a != null)
- {
- Debug.Assert((!in_a.IsUnrestricted() || RefusedSet == null), "Cannot be unrestricted or refused must be null");
- // if we're already asserting in_a, nothing to do
- if (in_a.IsSubsetOf(AssertSet))
- return null;
-
- PermissionSet retPs;
- if (GrantSet != null)
- retPs = in_a.Intersect(GrantSet); // Restrict the assert to what we've already been granted
- else
- {
- GrantSet = new PermissionSet(true);
- retPs = in_a.Copy(); // Currently unrestricted Grant: assert the whole assert set
- }
- bool bFailedToCompress = false;
- // removes anything that is already in the refused set from the assert set
- if (RefusedSet != null)
- {
- retPs = PermissionSet.RemoveRefusedPermissionSet(retPs, RefusedSet, out bFailedToCompress);
- }
- if (!bFailedToCompress)
- bFailedToCompress = PermissionSet.IsIntersectingAssertedPermissions(retPs, AssertSet);
- if (bFailedToCompress)
- {
- retTriple = new PermissionSetTriple(this);
- this.Reset();
- this.GrantSet = retTriple.GrantSet.Copy();
- }
-
- if (AssertSet == null)
- AssertSet = retPs;
- else
- AssertSet.InplaceUnion(retPs);
-
- }
- return retTriple;
- }
- internal void UpdateGrant(PermissionSet in_g, out ZoneIdentityPermission z,out UrlIdentityPermission u)
- {
- z = null;
- u = null;
- if (in_g != null)
- {
- if (GrantSet == null)
- GrantSet = in_g.Copy();
- else
- GrantSet.InplaceIntersect(in_g);
-
- z = (ZoneIdentityPermission)in_g.GetPermission(ZoneToken);
- u = (UrlIdentityPermission)in_g.GetPermission(UrlToken);
- }
- }
-
- internal void UpdateGrant(PermissionSet in_g)
- {
- if (in_g != null)
- {
- if (GrantSet == null)
- GrantSet = in_g.Copy();
- else
- GrantSet.InplaceIntersect(in_g);
- }
- }
- internal void UpdateRefused(PermissionSet in_r)
- {
- if (in_r != null)
- {
- if (RefusedSet == null)
- RefusedSet = in_r.Copy();
- else
- RefusedSet.InplaceUnion(in_r);
- }
- }
-
-
- static bool CheckAssert(PermissionSet pSet, CodeAccessPermission demand, PermissionToken permToken)
- {
- if (pSet != null)
- {
- pSet.CheckDecoded(demand, permToken);
-
- CodeAccessPermission perm = (CodeAccessPermission)pSet.GetPermission(demand);
-
- // If the assert set does contain the demanded permission, halt the stackwalk
-
- try
- {
- if (pSet.IsUnrestricted() || demand.CheckAssert(perm))
- {
- return SecurityRuntime.StackHalt;
- }
- }
- catch (ArgumentException)
- {
- }
- }
- return SecurityRuntime.StackContinue;
- }
-
- static bool CheckAssert(PermissionSet assertPset, PermissionSet demandSet, out PermissionSet newDemandSet)
- {
- newDemandSet = null;
- if (assertPset!= null)
- {
- assertPset.CheckDecoded(demandSet);
- // If this frame asserts a superset of the demand set we're done
-
- if (demandSet.CheckAssertion(assertPset))
- return SecurityRuntime.StackHalt;
- PermissionSet.RemoveAssertedPermissionSet(demandSet, assertPset, out newDemandSet);
- }
- return SecurityRuntime.StackContinue;
- }
-
-
- internal bool CheckDemand(CodeAccessPermission demand, PermissionToken permToken, RuntimeMethodHandleInternal rmh)
- {
- if (CheckAssert(AssertSet, demand, permToken) == SecurityRuntime.StackHalt)
- return SecurityRuntime.StackHalt;
-
-#pragma warning disable 618
- CodeAccessSecurityEngine.CheckHelper(GrantSet, RefusedSet, demand, permToken, rmh, null, SecurityAction.Demand, true);
-#pragma warning restore 618
-
- return SecurityRuntime.StackContinue;
- }
- internal bool CheckSetDemand(PermissionSet demandSet , out PermissionSet alteredDemandset, RuntimeMethodHandleInternal rmh)
- {
- alteredDemandset = null;
-
- if (CheckAssert(AssertSet, demandSet, out alteredDemandset) == SecurityRuntime.StackHalt)
- return SecurityRuntime.StackHalt;
- if (alteredDemandset != null)
- demandSet = alteredDemandset; // note that this does not modify demandSet external to this function.
-#pragma warning disable 618
- CodeAccessSecurityEngine.CheckSetHelper(GrantSet, RefusedSet, demandSet, rmh, null, SecurityAction.Demand, true);
-#pragma warning restore 618
-
- return SecurityRuntime.StackContinue;
-
- }
-
- internal bool CheckDemandNoThrow(CodeAccessPermission demand, PermissionToken permToken)
- {
- Debug.Assert(AssertSet == null, "AssertSet not null");
-#pragma warning disable 618
- return CodeAccessSecurityEngine.CheckHelper(GrantSet, RefusedSet, demand, permToken, RuntimeMethodHandleInternal.EmptyHandle, null, SecurityAction.Demand, false);
-#pragma warning restore 618
- }
- internal bool CheckSetDemandNoThrow(PermissionSet demandSet)
- {
- Debug.Assert(AssertSet == null, "AssertSet not null");
-
-#pragma warning disable 618
- return CodeAccessSecurityEngine.CheckSetHelper(GrantSet, RefusedSet, demandSet, RuntimeMethodHandleInternal.EmptyHandle, null, SecurityAction.Demand, false);
-#pragma warning restore 618
- }
- /// <summary>
- /// Check to see if the triple satisfies a demand for the permission represented by the flag.
- /// </summary>
- /// <remarks>
- /// If the triple asserts for one of the bits in the flags, it is zeroed out.
- /// </remarks>
- /// <param name="flags">set of flags to check (See PermissionType)</param>
- internal bool CheckFlags(ref int flags)
- {
- if (AssertSet != null)
- {
- // remove any permissions which were asserted for
- int assertFlags = SecurityManager.GetSpecialFlags(AssertSet, null);
- if ((flags & assertFlags) != 0)
- flags = flags & ~assertFlags;
- }
-
- return (SecurityManager.GetSpecialFlags(GrantSet, RefusedSet) & flags) == flags;
- }
- }
-}
-
-
diff --git a/src/mscorlib/src/System/Security/PermissionToken.cs b/src/mscorlib/src/System/Security/PermissionToken.cs
deleted file mode 100644
index 5c6a322c1c..0000000000
--- a/src/mscorlib/src/System/Security/PermissionToken.cs
+++ /dev/null
@@ -1,383 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security
-{
- using System;
- using System.Security.Util;
- using System.Security.Permissions;
- using System.Reflection;
- using System.Collections;
- using System.Threading;
- using System.Globalization;
- using System.Runtime.CompilerServices;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- [Flags]
- internal enum PermissionTokenType
- {
- Normal = 0x1,
- IUnrestricted = 0x2,
- DontKnow = 0x4,
- BuiltIn = 0x8
- }
-
- [Serializable]
- internal sealed class PermissionTokenKeyComparer : IEqualityComparer
- {
- private Comparer _caseSensitiveComparer;
- private TextInfo _info;
-
- public PermissionTokenKeyComparer()
- {
- _caseSensitiveComparer = new Comparer(CultureInfo.InvariantCulture);
- _info = CultureInfo.InvariantCulture.TextInfo;
- }
-
- public int Compare(Object a, Object b)
- {
- String strA = a as String;
- String strB = b as String;
-
- // if it's not a string then we just call the object comparer
- if (strA == null || strB == null)
- return _caseSensitiveComparer.Compare(a, b);
-
- int i = _caseSensitiveComparer.Compare(a,b);
- if (i == 0)
- return 0;
-
- if (SecurityManager.IsSameType(strA, strB))
- return 0;
-
- return i;
- }
-
- public new bool Equals( Object a, Object b )
- {
- if (a == b) return true;
- if (a == null || b == null) return false;
- return Compare( a, b ) == 0;
- }
-
- // The data structure consuming this will be responsible for dealing with null objects as keys.
- public int GetHashCode(Object obj)
- {
- if (obj == null) throw new ArgumentNullException(nameof(obj));
- Contract.EndContractBlock();
-
- String str = obj as String;
-
- if (str == null)
- return obj.GetHashCode();
-
- int iComma = str.IndexOf( ',' );
- if (iComma == -1)
- iComma = str.Length;
-
- int accumulator = 0;
- for (int i = 0; i < iComma; ++i)
- {
- accumulator = (accumulator << 7) ^ str[i] ^ (accumulator >> 25);
- }
-
- return accumulator;
- }
- }
-
- [Serializable]
- internal sealed class PermissionToken : ISecurityEncodable
- {
- private static readonly PermissionTokenFactory s_theTokenFactory;
- private const string c_mscorlibName = System.CoreLib.Name;
- internal int m_index;
- internal volatile PermissionTokenType m_type;
- static internal TokenBasedSet s_tokenSet = new TokenBasedSet();
-
- internal static bool IsMscorlibClassName (string className) {
- Debug.Assert( c_mscorlibName == ((RuntimeAssembly)Assembly.GetExecutingAssembly()).GetSimpleName(),
- System.CoreLib.Name+" name mismatch" );
-
- // If the class name does not look like a fully qualified name, we cannot simply determine if it's
- // an mscorlib.dll type so we should return true so the type can be matched with the
- // right index in the TokenBasedSet.
- int index = className.IndexOf(',');
- if (index == -1)
- return true;
-
- index = className.LastIndexOf(']');
- if (index == -1)
- index = 0;
-
- // Search for the string 'mscorlib' in the classname. If we find it, we will conservatively assume it's an mscorlib.dll type and load it.
- for (int i = index; i < className.Length; i++) {
- if (className[i] == 's' || className[i] == 'S')
- {
- if (String.Compare(className, i, c_mscorlibName, 0, c_mscorlibName.Length, StringComparison.OrdinalIgnoreCase) == 0)
- return true;
- }
- }
- return false;
- }
-
- static PermissionToken()
- {
- s_theTokenFactory = new PermissionTokenFactory( 4 );
- }
-
- internal PermissionToken()
- {
- }
-
- internal PermissionToken(int index, PermissionTokenType type, String strTypeName)
- {
- m_index = index;
- m_type = type;
- }
-
- public static PermissionToken GetToken(Type cls)
- {
- if (cls == null)
- return null;
-
- return s_theTokenFactory.GetToken(cls, null);
- }
-
- public static PermissionToken GetToken(IPermission perm)
- {
- if (perm == null)
- return null;
-
- IBuiltInPermission ibPerm = perm as IBuiltInPermission;
-
- if (ibPerm != null)
- return s_theTokenFactory.BuiltInGetToken( ibPerm.GetTokenIndex(), perm, null );
- else
- return s_theTokenFactory.GetToken(perm.GetType(), perm);
- }
-
- public static PermissionToken FindTokenByIndex( int i )
- {
- return s_theTokenFactory.FindTokenByIndex( i );
- }
-
- public static bool IsTokenProperlyAssigned( IPermission perm, PermissionToken token )
- {
- PermissionToken heldToken = GetToken( perm );
- if (heldToken.m_index != token.m_index)
- return false;
-
- if (token.m_type != heldToken.m_type)
- return false;
-
- if (perm.GetType().Module.Assembly == Assembly.GetExecutingAssembly() &&
- heldToken.m_index >= BuiltInPermissionIndex.NUM_BUILTIN_NORMAL + BuiltInPermissionIndex.NUM_BUILTIN_UNRESTRICTED)
- return false;
-
- return true;
- }
- }
-
- // Package access only
- internal class PermissionTokenFactory
- {
- private volatile int m_size;
- private volatile int m_index;
- private volatile Hashtable m_tokenTable; // Cache of tokens by class string name
- private volatile Hashtable m_handleTable; // Cache of tokens by type handle (IntPtr)
- private volatile Hashtable m_indexTable; // Cache of tokens by index
-
-
- // We keep an array of tokens for our built-in permissions.
- // This is ordered in terms of unrestricted perms first, normals
- // second. Of course, all the ordering is based on the individual
- // permissions sticking to the deal, so we do some simple boundary
- // checking but mainly leave it to faith.
-
- private volatile PermissionToken[] m_builtIn;
-
- private const String s_unrestrictedPermissionInferfaceName = "System.Security.Permissions.IUnrestrictedPermission";
-
- internal PermissionTokenFactory( int size )
- {
- m_builtIn = new PermissionToken[BuiltInPermissionIndex.NUM_BUILTIN_NORMAL + BuiltInPermissionIndex.NUM_BUILTIN_UNRESTRICTED];
-
- m_size = size;
- m_index = BuiltInPermissionIndex.NUM_BUILTIN_NORMAL + BuiltInPermissionIndex.NUM_BUILTIN_UNRESTRICTED;
- m_tokenTable = null;
- m_handleTable = new Hashtable(size);
- m_indexTable = new Hashtable(size);
- }
-
- internal PermissionToken FindTokenByIndex( int i )
- {
- PermissionToken token;
-
- if (i < BuiltInPermissionIndex.NUM_BUILTIN_NORMAL + BuiltInPermissionIndex.NUM_BUILTIN_UNRESTRICTED)
- {
- token = BuiltInGetToken( i, null, null );
- }
- else
- {
- token = (PermissionToken)m_indexTable[i];
- }
-
- return token;
- }
-
- internal PermissionToken GetToken(Type cls, IPermission perm)
- {
- Debug.Assert( cls != null, "Must pass in valid type" );
-
- IntPtr typePtr = cls.TypeHandle.Value;
- object tok = m_handleTable[typePtr];
- if (tok == null)
- {
- String typeStr = cls.AssemblyQualifiedName;
- tok = m_tokenTable != null ? m_tokenTable[typeStr] : null; // Assumes asynchronous lookups are safe
-
- if (tok == null)
- {
- lock (this)
- {
- if (m_tokenTable != null)
- {
- tok = m_tokenTable[typeStr]; // Make sure it wasn't just added
- }
- else
- m_tokenTable = new Hashtable(m_size, 1.0f, new PermissionTokenKeyComparer());
-
- if (tok == null)
- {
- if (perm != null)
- {
- tok = new PermissionToken( m_index++, PermissionTokenType.IUnrestricted, typeStr );
- }
- else
- {
- if (cls.GetInterface(s_unrestrictedPermissionInferfaceName) != null)
- tok = new PermissionToken( m_index++, PermissionTokenType.IUnrestricted, typeStr );
- else
- tok = new PermissionToken( m_index++, PermissionTokenType.Normal, typeStr );
- }
- m_tokenTable.Add(typeStr, tok);
- m_indexTable.Add(m_index - 1, tok);
- PermissionToken.s_tokenSet.SetItem( ((PermissionToken)tok).m_index, tok );
- }
-
- if (!m_handleTable.Contains(typePtr))
- m_handleTable.Add( typePtr, tok );
- }
- }
- else
- {
- lock (this)
- {
- if (!m_handleTable.Contains(typePtr))
- m_handleTable.Add( typePtr, tok );
- }
- }
- }
-
- if ((((PermissionToken)tok).m_type & PermissionTokenType.DontKnow) != 0)
- {
- if (perm != null)
- {
- Debug.Assert( !(perm is IBuiltInPermission), "This should not be called for built-ins" );
- ((PermissionToken)tok).m_type = PermissionTokenType.IUnrestricted;
- }
- else
- {
- Debug.Assert( cls.GetInterface( "System.Security.Permissions.IBuiltInPermission" ) == null, "This shoudl not be called for built-ins" );
- if (cls.GetInterface(s_unrestrictedPermissionInferfaceName) != null)
- ((PermissionToken)tok).m_type = PermissionTokenType.IUnrestricted;
- else
- ((PermissionToken)tok).m_type = PermissionTokenType.Normal;
- }
- }
-
- return (PermissionToken)tok;
- }
-
- internal PermissionToken GetToken(String typeStr)
- {
- Object tok = null;
- tok = m_tokenTable != null ? m_tokenTable[typeStr] : null; // Assumes asynchronous lookups are safe
- if (tok == null)
- {
- lock (this)
- {
- if (m_tokenTable != null)
- {
- tok = m_tokenTable[typeStr]; // Make sure it wasn't just added
- }
- else
- m_tokenTable = new Hashtable(m_size, 1.0f, new PermissionTokenKeyComparer());
-
- if (tok == null)
- {
- tok = new PermissionToken( m_index++, PermissionTokenType.DontKnow, typeStr );
- m_tokenTable.Add(typeStr, tok);
- m_indexTable.Add(m_index - 1, tok);
- PermissionToken.s_tokenSet.SetItem(((PermissionToken)tok).m_index, tok);
- }
- }
- }
-
- return (PermissionToken)tok;
- }
-
- internal PermissionToken BuiltInGetToken( int index, IPermission perm, Type cls )
- {
- PermissionToken token = Volatile.Read(ref m_builtIn[index]);
-
- if (token == null)
- {
- lock (this)
- {
- token = m_builtIn[index];
-
- if (token == null)
- {
- PermissionTokenType permType = PermissionTokenType.DontKnow;
-
- if (perm != null)
- {
- permType = PermissionTokenType.IUnrestricted;
- }
- else if (cls != null)
- {
- permType = PermissionTokenType.IUnrestricted;
- }
-
- token = new PermissionToken( index, permType | PermissionTokenType.BuiltIn, null );
- Volatile.Write(ref m_builtIn[index], token);
- PermissionToken.s_tokenSet.SetItem( token.m_index, token );
- }
- }
- }
-
- if ((token.m_type & PermissionTokenType.DontKnow) != 0)
- {
- token.m_type = PermissionTokenType.BuiltIn;
-
- if (perm != null)
- {
- token.m_type |= PermissionTokenType.IUnrestricted;
- }
- else if (cls != null)
- {
- token.m_type |= PermissionTokenType.IUnrestricted;
- }
- else
- {
- token.m_type |= PermissionTokenType.DontKnow;
- }
- }
-
- return token;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/EnvironmentPermission.cs b/src/mscorlib/src/System/Security/Permissions/EnvironmentPermission.cs
deleted file mode 100644
index 567fe513c0..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/EnvironmentPermission.cs
+++ /dev/null
@@ -1,347 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions {
- using System.Security;
- using System;
- using SecurityElement = System.Security.SecurityElement;
- using System.Security.Util;
- using System.IO;
- using System.Globalization;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- [Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum EnvironmentPermissionAccess
- {
- NoAccess = 0x00,
- Read = 0x01,
- Write = 0x02,
- AllAccess = 0x03,
- }
-
- [Serializable]
- internal class EnvironmentStringExpressionSet : StringExpressionSet
- {
- public EnvironmentStringExpressionSet()
- : base( true, null, false )
- {
- }
-
- public EnvironmentStringExpressionSet( String str )
- : base( true, str, false )
- {
- }
-
- protected override StringExpressionSet CreateNewEmpty()
- {
- return new EnvironmentStringExpressionSet();
- }
-
- protected override bool StringSubsetString( String left, String right, bool ignoreCase )
- {
- return (ignoreCase?(String.Compare( left, right, StringComparison.OrdinalIgnoreCase) == 0):
- (String.Compare( left, right, StringComparison.Ordinal) == 0));
- }
-
- protected override String ProcessWholeString( String str )
- {
- return str;
- }
-
- protected override String ProcessSingleString( String str )
- {
- return str;
- }
-
- public override string ToString()
- {
- // SafeCritical: we're not storing path information in the strings, so exposing them out is fine ...
- // they're just the same strings that came in to the .ctor.
- return base.UnsafeToString();
- }
- }
-
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- sealed public class EnvironmentPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
- {
- private StringExpressionSet m_read;
- private StringExpressionSet m_write;
- private bool m_unrestricted;
-
- public EnvironmentPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- m_unrestricted = true;
- else if (state == PermissionState.None)
- m_unrestricted = false;
- else
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
-
- public EnvironmentPermission( EnvironmentPermissionAccess flag, String pathList )
- {
- SetPathList( flag, pathList );
- }
-
- public void SetPathList( EnvironmentPermissionAccess flag, String pathList )
- {
- VerifyFlag( flag );
-
- m_unrestricted = false;
-
- if ((flag & EnvironmentPermissionAccess.Read) != 0)
- m_read = null;
-
- if ((flag & EnvironmentPermissionAccess.Write) != 0)
- m_write = null;
-
- AddPathList( flag, pathList );
- }
-
- public void AddPathList( EnvironmentPermissionAccess flag, String pathList )
- {
- VerifyFlag( flag );
-
- if (FlagIsSet( flag, EnvironmentPermissionAccess.Read ))
- {
- if (m_read == null)
- m_read = new EnvironmentStringExpressionSet();
- m_read.AddExpressions( pathList );
- }
-
- if (FlagIsSet( flag, EnvironmentPermissionAccess.Write ))
- {
- if (m_write == null)
- m_write = new EnvironmentStringExpressionSet();
- m_write.AddExpressions( pathList );
- }
-
- }
-
- public String GetPathList( EnvironmentPermissionAccess flag )
- {
- VerifyFlag( flag );
- ExclusiveFlag( flag );
-
- if (FlagIsSet( flag, EnvironmentPermissionAccess.Read ))
- {
- if (m_read == null)
- {
- return "";
- }
- return m_read.ToString();
- }
-
- if (FlagIsSet( flag, EnvironmentPermissionAccess.Write ))
- {
- if (m_write == null)
- {
- return "";
- }
- return m_write.ToString();
- }
-
- /* not reached */
-
- return "";
- }
-
-
- private void VerifyFlag( EnvironmentPermissionAccess flag )
- {
- if ((flag & ~EnvironmentPermissionAccess.AllAccess) != 0)
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)flag));
- Contract.EndContractBlock();
- }
-
- private void ExclusiveFlag( EnvironmentPermissionAccess flag )
- {
- if (flag == EnvironmentPermissionAccess.NoAccess)
- {
- throw new ArgumentException( Environment.GetResourceString("Arg_EnumNotSingleFlag") );
- }
-
- if (((int)flag & ((int)flag-1)) != 0)
- {
- throw new ArgumentException( Environment.GetResourceString("Arg_EnumNotSingleFlag") );
- }
- Contract.EndContractBlock();
- }
-
-
- private bool FlagIsSet( EnvironmentPermissionAccess flag, EnvironmentPermissionAccess question )
- {
- return (flag & question) != 0;
- }
-
- private bool IsEmpty()
- {
- return (!m_unrestricted &&
- (this.m_read == null || this.m_read.IsEmpty()) &&
- (this.m_write == null || this.m_write.IsEmpty()));
- }
-
- //------------------------------------------------------
- //
- // CODEACCESSPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public bool IsUnrestricted()
- {
- return m_unrestricted;
- }
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- return this.IsEmpty();
- }
-
- try
- {
- EnvironmentPermission operand = (EnvironmentPermission)target;
- if (operand.IsUnrestricted())
- return true;
- else if (this.IsUnrestricted())
- return false;
- else
- return ((this.m_read == null || this.m_read.IsSubsetOf( operand.m_read )) &&
- (this.m_write == null || this.m_write.IsSubsetOf( operand.m_write )));
- }
- catch (InvalidCastException)
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- {
- return null;
- }
- else if (!VerifyType(target))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
- else if (this.IsUnrestricted())
- {
- return target.Copy();
- }
-
- EnvironmentPermission operand = (EnvironmentPermission)target;
-
- if (operand.IsUnrestricted())
- {
- return this.Copy();
- }
-
- StringExpressionSet intersectRead = this.m_read == null ? null : this.m_read.Intersect( operand.m_read );
- StringExpressionSet intersectWrite = this.m_write == null ? null : this.m_write.Intersect( operand.m_write );
-
- if ((intersectRead == null || intersectRead.IsEmpty()) &&
- (intersectWrite == null || intersectWrite.IsEmpty()))
- {
- return null;
- }
-
- EnvironmentPermission intersectPermission = new EnvironmentPermission(PermissionState.None);
- intersectPermission.m_unrestricted = false;
- intersectPermission.m_read = intersectRead;
- intersectPermission.m_write = intersectWrite;
-
- return intersectPermission;
- }
-
- public override IPermission Union(IPermission other)
- {
- if (other == null)
- {
- return this.Copy();
- }
- else if (!VerifyType(other))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- EnvironmentPermission operand = (EnvironmentPermission)other;
-
- if (this.IsUnrestricted() || operand.IsUnrestricted())
- {
- return new EnvironmentPermission( PermissionState.Unrestricted );
- }
-
- StringExpressionSet unionRead = this.m_read == null ? operand.m_read : this.m_read.Union( operand.m_read );
- StringExpressionSet unionWrite = this.m_write == null ? operand.m_write : this.m_write.Union( operand.m_write );
-
- if ((unionRead == null || unionRead.IsEmpty()) &&
- (unionWrite == null || unionWrite.IsEmpty()))
- {
- return null;
- }
-
- EnvironmentPermission unionPermission = new EnvironmentPermission(PermissionState.None);
- unionPermission.m_unrestricted = false;
- unionPermission.m_read = unionRead;
- unionPermission.m_write = unionWrite;
-
- return unionPermission;
- }
-
- public override IPermission Copy()
- {
- EnvironmentPermission copy = new EnvironmentPermission(PermissionState.None);
- if (this.m_unrestricted)
- {
- copy.m_unrestricted = true;
- }
- else
- {
- copy.m_unrestricted = false;
- if (this.m_read != null)
- {
- copy.m_read = this.m_read.Copy();
- }
- if (this.m_write != null)
- {
- copy.m_write = this.m_write.Copy();
- }
-
- }
- return copy;
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return EnvironmentPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.EnvironmentPermissionIndex;
- }
- }
-
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/FileDialogPermission.cs b/src/mscorlib/src/System/Security/Permissions/FileDialogPermission.cs
deleted file mode 100644
index 98a7d54c68..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/FileDialogPermission.cs
+++ /dev/null
@@ -1,158 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions {
- using System;
- using System.Text;
- using System.Security;
- using System.Security.Util;
- using System.IO;
- using System.Runtime.Serialization;
- using System.Reflection;
- using System.Collections;
- using System.Globalization;
- using System.Diagnostics.Contracts;
-
-[Serializable]
-[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum FileDialogPermissionAccess {
- None = 0x00,
-
- Open = 0x01,
-
- Save = 0x02,
-
- OpenSave = Open | Save
-
- }
-
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public sealed class FileDialogPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission {
- FileDialogPermissionAccess access;
-
- public FileDialogPermission(PermissionState state) {
- if (state == PermissionState.Unrestricted) {
- SetUnrestricted(true);
- }
- else if (state == PermissionState.None) {
- SetUnrestricted(false);
- Reset();
- }
- else {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public FileDialogPermission(FileDialogPermissionAccess access) {
- VerifyAccess(access);
- this.access = access;
- }
-
- public FileDialogPermissionAccess Access {
- get {
- return access;
- }
-
- set {
- VerifyAccess(value);
- access = value;
- }
- }
-
- public override IPermission Copy() {
- return new FileDialogPermission(this.access);
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex() {
- return FileDialogPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex() {
- return BuiltInPermissionIndex.FileDialogPermissionIndex;
- }
-
- public override IPermission Intersect(IPermission target) {
- if (target == null) {
- return null;
- }
- else if (!VerifyType(target)) {
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- }
-
- FileDialogPermission operand = (FileDialogPermission)target;
-
- FileDialogPermissionAccess intersectAccess = access & operand.Access;
-
- if (intersectAccess == FileDialogPermissionAccess.None)
- return null;
- else
- return new FileDialogPermission(intersectAccess);
- }
-
- public override bool IsSubsetOf(IPermission target) {
- if (target == null) {
- // Only safe subset if this is empty
- return access == FileDialogPermissionAccess.None;
- }
-
- try {
- FileDialogPermission operand = (FileDialogPermission)target;
- if (operand.IsUnrestricted()) {
- return true;
- }
- else if (this.IsUnrestricted()) {
- return false;
- }
- else {
- int open = (int)(access & FileDialogPermissionAccess.Open);
- int save = (int)(access & FileDialogPermissionAccess.Save);
- int openTarget = (int)(operand.Access & FileDialogPermissionAccess.Open);
- int saveTarget = (int)(operand.Access & FileDialogPermissionAccess.Save);
-
- return open <= openTarget && save <= saveTarget;
- }
- }
- catch (InvalidCastException) {
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- }
-
- }
-
- public bool IsUnrestricted() {
- return access == FileDialogPermissionAccess.OpenSave;
- }
-
- void Reset() {
- access = FileDialogPermissionAccess.None;
- }
-
- void SetUnrestricted( bool unrestricted ) {
- if (unrestricted) {
- access = FileDialogPermissionAccess.OpenSave;
- }
- }
-
- public override IPermission Union(IPermission target) {
- if (target == null) {
- return this.Copy();
- }
- else if (!VerifyType(target)) {
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- }
-
- FileDialogPermission operand = (FileDialogPermission)target;
- return new FileDialogPermission(access | operand.Access);
- }
-
- static void VerifyAccess(FileDialogPermissionAccess access) {
- if ((access & ~FileDialogPermissionAccess.OpenSave) != 0 ) {
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)access));
- }
- Contract.EndContractBlock();
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/FileIOPermission.cs b/src/mscorlib/src/System/Security/Permissions/FileIOPermission.cs
deleted file mode 100644
index 34b9f1ef80..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/FileIOPermission.cs
+++ /dev/null
@@ -1,1216 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Security.AccessControl;
- using System.Security.Util;
- using System.IO;
- using System.Collections;
- using System.Globalization;
- using System.Runtime.Serialization;
- using System.Runtime.Versioning;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- [Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum FileIOPermissionAccess
- {
- NoAccess = 0x00,
- Read = 0x01,
- Write = 0x02,
- Append = 0x04,
- PathDiscovery = 0x08,
- AllAccess = 0x0F,
- }
-
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- sealed public class FileIOPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
- {
- private FileIOAccess m_read;
- private FileIOAccess m_write;
- private FileIOAccess m_append;
- private FileIOAccess m_pathDiscovery;
- [OptionalField(VersionAdded = 2)]
- private FileIOAccess m_viewAcl;
- [OptionalField(VersionAdded = 2)]
- private FileIOAccess m_changeAcl;
- private bool m_unrestricted;
-
- public FileIOPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- m_unrestricted = true;
- }
- else if (state == PermissionState.None)
- {
- m_unrestricted = false;
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public FileIOPermission( FileIOPermissionAccess access, String path )
- {
- VerifyAccess( access );
-
- String[] pathList = new String[] { path };
- AddPathList( access, pathList, false, true, false );
- }
-
- public FileIOPermission( FileIOPermissionAccess access, String[] pathList )
- {
- VerifyAccess( access );
-
- AddPathList( access, pathList, false, true, false );
- }
-
- internal FileIOPermission( FileIOPermissionAccess access, String[] pathList, bool checkForDuplicates, bool needFullPath )
- {
- VerifyAccess( access );
-
- AddPathList( access, pathList, checkForDuplicates, needFullPath, true );
- }
-
- public void SetPathList( FileIOPermissionAccess access, String path )
- {
- String[] pathList;
- if(path == null)
- pathList = new String[] {};
- else
- pathList = new String[] { path };
- SetPathList( access, pathList, false );
- }
-
- public void SetPathList( FileIOPermissionAccess access, String[] pathList )
- {
- SetPathList( access, pathList, true );
- }
-
- internal void SetPathList( FileIOPermissionAccess access,
- String[] pathList, bool checkForDuplicates )
- {
- SetPathList( access, AccessControlActions.None, pathList, checkForDuplicates );
- }
-
- internal void SetPathList( FileIOPermissionAccess access, AccessControlActions control, String[] pathList, bool checkForDuplicates )
- {
- VerifyAccess( access );
-
- if ((access & FileIOPermissionAccess.Read) != 0)
- m_read = null;
-
- if ((access & FileIOPermissionAccess.Write) != 0)
- m_write = null;
-
- if ((access & FileIOPermissionAccess.Append) != 0)
- m_append = null;
-
- if ((access & FileIOPermissionAccess.PathDiscovery) != 0)
- m_pathDiscovery = null;
-
- m_viewAcl = null;
- m_changeAcl = null;
- m_unrestricted = false;
-
- AddPathList( access, pathList, checkForDuplicates, true, true );
- }
-
- public void AddPathList( FileIOPermissionAccess access, String path )
- {
- String[] pathList;
- if(path == null)
- pathList = new String[] {};
- else
- pathList = new String[] { path };
- AddPathList( access, pathList, false, true, false );
- }
-
- public void AddPathList( FileIOPermissionAccess access, String[] pathList )
- {
- AddPathList( access, pathList, true, true, true );
- }
-
- internal void AddPathList( FileIOPermissionAccess access, String[] pathListOrig, bool checkForDuplicates, bool needFullPath, bool copyPathList )
- {
- AddPathList( access, AccessControlActions.None, pathListOrig, checkForDuplicates, needFullPath, copyPathList );
- }
-
- internal void AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, bool checkForDuplicates, bool needFullPath, bool copyPathList)
- {
- if (pathListOrig == null)
- {
- throw new ArgumentNullException( "pathList" );
- }
- if (pathListOrig.Length == 0)
- {
- throw new ArgumentException( Environment.GetResourceString("Argument_EmptyPath" ));
- }
- Contract.EndContractBlock();
-
- VerifyAccess(access);
-
- if (m_unrestricted)
- return;
-
- String[] pathList = pathListOrig;
- if(copyPathList)
- {
- // Make a copy of pathList (in case its value changes after we check for illegal chars)
- pathList = new String[pathListOrig.Length];
- Array.Copy(pathListOrig, pathList, pathListOrig.Length);
- }
-
- ArrayList pathArrayList = StringExpressionSet.CreateListFromExpressions(pathList, needFullPath);
-
- // If we need the full path the standard illegal characters will be checked in StringExpressionSet.
- CheckIllegalCharacters(pathList, onlyCheckExtras: needFullPath);
-
- // StringExpressionSet will do minor normalization, trimming spaces and replacing alternate
- // directory separators. It will make an attemt to expand short file names and will check
- // for standard colon placement.
- //
- // If needFullPath is true it will call NormalizePath- which performs short name expansion
- // and does the normal validity checks.
-
- if ((access & FileIOPermissionAccess.Read) != 0)
- {
- if (m_read == null)
- {
- m_read = new FileIOAccess();
- }
- m_read.AddExpressions( pathArrayList, checkForDuplicates);
- }
-
- if ((access & FileIOPermissionAccess.Write) != 0)
- {
- if (m_write == null)
- {
- m_write = new FileIOAccess();
- }
- m_write.AddExpressions( pathArrayList, checkForDuplicates);
- }
-
- if ((access & FileIOPermissionAccess.Append) != 0)
- {
- if (m_append == null)
- {
- m_append = new FileIOAccess();
- }
- m_append.AddExpressions( pathArrayList, checkForDuplicates);
- }
-
- if ((access & FileIOPermissionAccess.PathDiscovery) != 0)
- {
- if (m_pathDiscovery == null)
- {
- m_pathDiscovery = new FileIOAccess( true );
- }
- m_pathDiscovery.AddExpressions( pathArrayList, checkForDuplicates);
- }
- }
-
- public String[] GetPathList( FileIOPermissionAccess access )
- {
- VerifyAccess( access );
- ExclusiveAccess( access );
-
- if (AccessIsSet( access, FileIOPermissionAccess.Read ))
- {
- if (m_read == null)
- {
- return null;
- }
- return m_read.ToStringArray();
- }
-
- if (AccessIsSet( access, FileIOPermissionAccess.Write ))
- {
- if (m_write == null)
- {
- return null;
- }
- return m_write.ToStringArray();
- }
-
- if (AccessIsSet( access, FileIOPermissionAccess.Append ))
- {
- if (m_append == null)
- {
- return null;
- }
- return m_append.ToStringArray();
- }
-
- if (AccessIsSet( access, FileIOPermissionAccess.PathDiscovery ))
- {
- if (m_pathDiscovery == null)
- {
- return null;
- }
- return m_pathDiscovery.ToStringArray();
- }
-
- // not reached
-
- return null;
- }
-
- public FileIOPermissionAccess AllLocalFiles
- {
- get
- {
- if (m_unrestricted)
- return FileIOPermissionAccess.AllAccess;
-
- FileIOPermissionAccess access = FileIOPermissionAccess.NoAccess;
-
- if (m_read != null && m_read.AllLocalFiles)
- {
- access |= FileIOPermissionAccess.Read;
- }
-
- if (m_write != null && m_write.AllLocalFiles)
- {
- access |= FileIOPermissionAccess.Write;
- }
-
- if (m_append != null && m_append.AllLocalFiles)
- {
- access |= FileIOPermissionAccess.Append;
- }
-
- if (m_pathDiscovery != null && m_pathDiscovery.AllLocalFiles)
- {
- access |= FileIOPermissionAccess.PathDiscovery;
- }
-
- return access;
- }
-
- set
- {
- if ((value & FileIOPermissionAccess.Read) != 0)
- {
- if (m_read == null)
- m_read = new FileIOAccess();
-
- m_read.AllLocalFiles = true;
- }
- else
- {
- if (m_read != null)
- m_read.AllLocalFiles = false;
- }
-
- if ((value & FileIOPermissionAccess.Write) != 0)
- {
- if (m_write == null)
- m_write = new FileIOAccess();
-
- m_write.AllLocalFiles = true;
- }
- else
- {
- if (m_write != null)
- m_write.AllLocalFiles = false;
- }
-
- if ((value & FileIOPermissionAccess.Append) != 0)
- {
- if (m_append == null)
- m_append = new FileIOAccess();
-
- m_append.AllLocalFiles = true;
- }
- else
- {
- if (m_append != null)
- m_append.AllLocalFiles = false;
- }
-
- if ((value & FileIOPermissionAccess.PathDiscovery) != 0)
- {
- if (m_pathDiscovery == null)
- m_pathDiscovery = new FileIOAccess( true );
-
- m_pathDiscovery.AllLocalFiles = true;
- }
- else
- {
- if (m_pathDiscovery != null)
- m_pathDiscovery.AllLocalFiles = false;
- }
-
- }
- }
-
- public FileIOPermissionAccess AllFiles
- {
- get
- {
- if (m_unrestricted)
- return FileIOPermissionAccess.AllAccess;
-
- FileIOPermissionAccess access = FileIOPermissionAccess.NoAccess;
-
- if (m_read != null && m_read.AllFiles)
- {
- access |= FileIOPermissionAccess.Read;
- }
-
- if (m_write != null && m_write.AllFiles)
- {
- access |= FileIOPermissionAccess.Write;
- }
-
- if (m_append != null && m_append.AllFiles)
- {
- access |= FileIOPermissionAccess.Append;
- }
-
- if (m_pathDiscovery != null && m_pathDiscovery.AllFiles)
- {
- access |= FileIOPermissionAccess.PathDiscovery;
- }
-
- return access;
- }
-
- set
- {
- if (value == FileIOPermissionAccess.AllAccess)
- {
- m_unrestricted = true;
- return;
- }
-
- if ((value & FileIOPermissionAccess.Read) != 0)
- {
- if (m_read == null)
- m_read = new FileIOAccess();
-
- m_read.AllFiles = true;
- }
- else
- {
- if (m_read != null)
- m_read.AllFiles = false;
- }
-
- if ((value & FileIOPermissionAccess.Write) != 0)
- {
- if (m_write == null)
- m_write = new FileIOAccess();
-
- m_write.AllFiles = true;
- }
- else
- {
- if (m_write != null)
- m_write.AllFiles = false;
- }
-
- if ((value & FileIOPermissionAccess.Append) != 0)
- {
- if (m_append == null)
- m_append = new FileIOAccess();
-
- m_append.AllFiles = true;
- }
- else
- {
- if (m_append != null)
- m_append.AllFiles = false;
- }
-
- if ((value & FileIOPermissionAccess.PathDiscovery) != 0)
- {
- if (m_pathDiscovery == null)
- m_pathDiscovery = new FileIOAccess( true );
-
- m_pathDiscovery.AllFiles = true;
- }
- else
- {
- if (m_pathDiscovery != null)
- m_pathDiscovery.AllFiles = false;
- }
-
- }
- }
-
- [Pure]
- private static void VerifyAccess( FileIOPermissionAccess access )
- {
- if ((access & ~FileIOPermissionAccess.AllAccess) != 0)
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)access));
- }
-
- [Pure]
- private static void ExclusiveAccess( FileIOPermissionAccess access )
- {
- if (access == FileIOPermissionAccess.NoAccess)
- {
- throw new ArgumentException( Environment.GetResourceString("Arg_EnumNotSingleFlag") );
- }
-
- if (((int) access & ((int)access-1)) != 0)
- {
- throw new ArgumentException( Environment.GetResourceString("Arg_EnumNotSingleFlag") );
- }
- }
-
- private static void CheckIllegalCharacters(String[] str, bool onlyCheckExtras)
- {
-#if !PLATFORM_UNIX
- for (int i = 0; i < str.Length; ++i)
- {
- // FileIOPermission doesn't allow for normalizing across various volume names. This means "C:\" and
- // "\\?\C:\" won't be considered correctly. In addition there are many other aliases for the volume
- // besides "C:" such as (in one concrete example) "\\?\Harddisk0Partition2\", "\\?\HarddiskVolume6\",
- // "\\?\Volume{d1655348-0000-0000-0000-f01500000000}\", etc.
- //
- // We'll continue to explicitly block extended syntax here by disallowing wildcards no matter where
- // they occur in the string (e.g. \\?\ isn't ok)
- if (CheckExtraPathCharacters(str[i]))
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPathChars"));
-
- if (!onlyCheckExtras)
- PathInternal.CheckInvalidPathChars(str[i]);
- }
-#else
- // There are no "extras" on Unix
- if (onlyCheckExtras)
- return;
-
- for (int i = 0; i < str.Length; ++i)
- {
- PathInternal.CheckInvalidPathChars(str[i]);
- }
-#endif
- }
-
-#if !PLATFORM_UNIX
- /// <summary>
- /// Check for ?,* and null, ignoring extended syntax.
- /// </summary>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- private unsafe static bool CheckExtraPathCharacters(string path)
- {
- char currentChar;
- for (int i = 0; i < path.Length; i++)
- {
- currentChar = path[i];
-
- // We also check for null here as StringExpressionSet will trim it out. (Ensuring we still throw as we always have.)
- if (currentChar == '*' || currentChar == '?' || currentChar == '\0') return true;
- }
- return false;
- }
-#endif
-
- private static bool AccessIsSet( FileIOPermissionAccess access, FileIOPermissionAccess question )
- {
- return (access & question) != 0;
- }
-
- private bool IsEmpty()
- {
- return (!m_unrestricted &&
- (this.m_read == null || this.m_read.IsEmpty()) &&
- (this.m_write == null || this.m_write.IsEmpty()) &&
- (this.m_append == null || this.m_append.IsEmpty()) &&
- (this.m_pathDiscovery == null || this.m_pathDiscovery.IsEmpty()) &&
- (this.m_viewAcl == null || this.m_viewAcl.IsEmpty()) &&
- (this.m_changeAcl == null || this.m_changeAcl.IsEmpty()));
- }
-
- //------------------------------------------------------
- //
- // CODEACCESSPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public bool IsUnrestricted()
- {
- return m_unrestricted;
- }
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- return this.IsEmpty();
- }
-
- FileIOPermission operand = target as FileIOPermission;
- if (operand == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
-
- if (operand.IsUnrestricted())
- return true;
- else if (this.IsUnrestricted())
- return false;
- else
- return ((this.m_read == null || this.m_read.IsSubsetOf( operand.m_read )) &&
- (this.m_write == null || this.m_write.IsSubsetOf( operand.m_write )) &&
- (this.m_append == null || this.m_append.IsSubsetOf( operand.m_append )) &&
- (this.m_pathDiscovery == null || this.m_pathDiscovery.IsSubsetOf( operand.m_pathDiscovery )) &&
- (this.m_viewAcl == null || this.m_viewAcl.IsSubsetOf( operand.m_viewAcl )) &&
- (this.m_changeAcl == null || this.m_changeAcl.IsSubsetOf( operand.m_changeAcl )));
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- {
- return null;
- }
-
- FileIOPermission operand = target as FileIOPermission;
-
- if (operand == null)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- }
- else if (this.IsUnrestricted())
- {
- return target.Copy();
- }
-
- if (operand.IsUnrestricted())
- {
- return this.Copy();
- }
-
- FileIOAccess intersectRead = this.m_read == null ? null : this.m_read.Intersect( operand.m_read );
- FileIOAccess intersectWrite = this.m_write == null ? null : this.m_write.Intersect( operand.m_write );
- FileIOAccess intersectAppend = this.m_append == null ? null : this.m_append.Intersect( operand.m_append );
- FileIOAccess intersectPathDiscovery = this.m_pathDiscovery == null ? null : this.m_pathDiscovery.Intersect( operand.m_pathDiscovery );
- FileIOAccess intersectViewAcl = this.m_viewAcl == null ? null : this.m_viewAcl.Intersect( operand.m_viewAcl );
- FileIOAccess intersectChangeAcl = this.m_changeAcl == null ? null : this.m_changeAcl.Intersect( operand.m_changeAcl );
-
- if ((intersectRead == null || intersectRead.IsEmpty()) &&
- (intersectWrite == null || intersectWrite.IsEmpty()) &&
- (intersectAppend == null || intersectAppend.IsEmpty()) &&
- (intersectPathDiscovery == null || intersectPathDiscovery.IsEmpty()) &&
- (intersectViewAcl == null || intersectViewAcl.IsEmpty()) &&
- (intersectChangeAcl == null || intersectChangeAcl.IsEmpty()))
- {
- return null;
- }
-
- FileIOPermission intersectPermission = new FileIOPermission(PermissionState.None);
- intersectPermission.m_unrestricted = false;
- intersectPermission.m_read = intersectRead;
- intersectPermission.m_write = intersectWrite;
- intersectPermission.m_append = intersectAppend;
- intersectPermission.m_pathDiscovery = intersectPathDiscovery;
- intersectPermission.m_viewAcl = intersectViewAcl;
- intersectPermission.m_changeAcl = intersectChangeAcl;
-
- return intersectPermission;
- }
-
- public override IPermission Union(IPermission other)
- {
- if (other == null)
- {
- return this.Copy();
- }
-
- FileIOPermission operand = other as FileIOPermission;
-
- if (operand == null)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- }
-
- if (this.IsUnrestricted() || operand.IsUnrestricted())
- {
- return new FileIOPermission( PermissionState.Unrestricted );
- }
-
- FileIOAccess unionRead = this.m_read == null ? operand.m_read : this.m_read.Union( operand.m_read );
- FileIOAccess unionWrite = this.m_write == null ? operand.m_write : this.m_write.Union( operand.m_write );
- FileIOAccess unionAppend = this.m_append == null ? operand.m_append : this.m_append.Union( operand.m_append );
- FileIOAccess unionPathDiscovery = this.m_pathDiscovery == null ? operand.m_pathDiscovery : this.m_pathDiscovery.Union( operand.m_pathDiscovery );
- FileIOAccess unionViewAcl = this.m_viewAcl == null ? operand.m_viewAcl : this.m_viewAcl.Union( operand.m_viewAcl );
- FileIOAccess unionChangeAcl = this.m_changeAcl == null ? operand.m_changeAcl : this.m_changeAcl.Union( operand.m_changeAcl );
-
- if ((unionRead == null || unionRead.IsEmpty()) &&
- (unionWrite == null || unionWrite.IsEmpty()) &&
- (unionAppend == null || unionAppend.IsEmpty()) &&
- (unionPathDiscovery == null || unionPathDiscovery.IsEmpty()) &&
- (unionViewAcl == null || unionViewAcl.IsEmpty()) &&
- (unionChangeAcl == null || unionChangeAcl.IsEmpty()))
- {
- return null;
- }
-
- FileIOPermission unionPermission = new FileIOPermission(PermissionState.None);
- unionPermission.m_unrestricted = false;
- unionPermission.m_read = unionRead;
- unionPermission.m_write = unionWrite;
- unionPermission.m_append = unionAppend;
- unionPermission.m_pathDiscovery = unionPathDiscovery;
- unionPermission.m_viewAcl = unionViewAcl;
- unionPermission.m_changeAcl = unionChangeAcl;
-
- return unionPermission;
- }
-
- public override IPermission Copy()
- {
- FileIOPermission copy = new FileIOPermission(PermissionState.None);
- if (this.m_unrestricted)
- {
- copy.m_unrestricted = true;
- }
- else
- {
- copy.m_unrestricted = false;
- if (this.m_read != null)
- {
- copy.m_read = this.m_read.Copy();
- }
- if (this.m_write != null)
- {
- copy.m_write = this.m_write.Copy();
- }
- if (this.m_append != null)
- {
- copy.m_append = this.m_append.Copy();
- }
- if (this.m_pathDiscovery != null)
- {
- copy.m_pathDiscovery = this.m_pathDiscovery.Copy();
- }
- if (this.m_viewAcl != null)
- {
- copy.m_viewAcl = this.m_viewAcl.Copy();
- }
- if (this.m_changeAcl != null)
- {
- copy.m_changeAcl = this.m_changeAcl.Copy();
- }
- }
- return copy;
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return FileIOPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.FileIOPermissionIndex;
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override bool Equals(Object obj)
- {
- FileIOPermission perm = obj as FileIOPermission;
- if(perm == null)
- return false;
-
- if(m_unrestricted && perm.m_unrestricted)
- return true;
- if(m_unrestricted != perm.m_unrestricted)
- return false;
-
- if(m_read == null)
- {
- if(perm.m_read != null && !perm.m_read.IsEmpty())
- return false;
- }
- else if(!m_read.Equals(perm.m_read))
- return false;
-
- if(m_write == null)
- {
- if(perm.m_write != null && !perm.m_write.IsEmpty())
- return false;
- }
- else if(!m_write.Equals(perm.m_write))
- return false;
-
- if(m_append == null)
- {
- if(perm.m_append != null && !perm.m_append.IsEmpty())
- return false;
- }
- else if(!m_append.Equals(perm.m_append))
- return false;
-
- if(m_pathDiscovery == null)
- {
- if(perm.m_pathDiscovery != null && !perm.m_pathDiscovery.IsEmpty())
- return false;
- }
- else if(!m_pathDiscovery.Equals(perm.m_pathDiscovery))
- return false;
-
- if(m_viewAcl == null)
- {
- if(perm.m_viewAcl != null && !perm.m_viewAcl.IsEmpty())
- return false;
- }
- else if(!m_viewAcl.Equals(perm.m_viewAcl))
- return false;
-
- if(m_changeAcl == null)
- {
- if(perm.m_changeAcl != null && !perm.m_changeAcl.IsEmpty())
- return false;
- }
- else if(!m_changeAcl.Equals(perm.m_changeAcl))
- return false;
-
- return true;
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override int GetHashCode()
- {
- // This implementation is only to silence a compiler warning.
- return base.GetHashCode();
- }
-
- /// <summary>
- /// Call this method if you don't need a the FileIOPermission for anything other than calling Demand() once.
- ///
- /// This method tries to verify full access before allocating a FileIOPermission object.
- /// If full access is there, then we still have to emulate the checks that creating the
- /// FileIOPermission object would have performed.
- ///
- /// IMPORTANT: This method should only be used after calling GetFullPath on the path to verify
- /// </summary>
- internal static void QuickDemand(FileIOPermissionAccess access, string fullPath, bool checkForDuplicates = false, bool needFullPath = false)
- {
- EmulateFileIOPermissionChecks(fullPath);
- }
-
- /// <summary>
- /// Call this method if you don't need a the FileIOPermission for anything other than calling Demand() once.
- ///
- /// This method tries to verify full access before allocating a FileIOPermission object.
- /// If full access is there, then we still have to emulate the checks that creating the
- /// FileIOPermission object would have performed.
- ///
- /// IMPORTANT: This method should only be used after calling GetFullPath on the path to verify
- ///
- /// </summary>
- internal static void QuickDemand(FileIOPermissionAccess access, string[] fullPathList, bool checkForDuplicates = false, bool needFullPath = true)
- {
- foreach (string fullPath in fullPathList)
- {
- EmulateFileIOPermissionChecks(fullPath);
- }
- }
-
- internal static void QuickDemand(PermissionState state)
- {
- // Should be a no-op without CAS
- }
-
- /// <summary>
- /// Perform the additional path checks that would normally happen when creating a FileIOPermission object.
- /// </summary>
- /// <param name="fullPath">A path that has already gone through GetFullPath or Normalize</param>
- internal static void EmulateFileIOPermissionChecks(string fullPath)
- {
- // Callers should have already made checks for invalid path format via normalization. This method will only make the
- // additional checks needed to throw the same exceptions that would normally throw when using FileIOPermission.
- // These checks are done via CheckIllegalCharacters() and StringExpressionSet in AddPathList() above.
-
-#if !PLATFORM_UNIX
- // Checking for colon / invalid characters on device paths blocks legitimate access to objects such as named pipes.
- if (!PathInternal.IsDevice(fullPath))
- {
- // GetFullPath already checks normal invalid path characters. We need to just check additional (wildcard) characters here.
- // (By calling the standard helper we can allow extended paths \\?\ through when the support is enabled.)
- if (PathInternal.HasWildCardCharacters(fullPath))
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPathChars"));
- }
-
- if (PathInternal.HasInvalidVolumeSeparator(fullPath))
- {
- throw new NotSupportedException(Environment.GetResourceString("Argument_PathFormatNotSupported"));
- }
- }
-#endif // !PLATFORM_UNIX
- }
- }
-
- [Serializable]
- internal sealed class FileIOAccess
- {
-#if !FEATURE_CASE_SENSITIVE_FILESYSTEM
- private bool m_ignoreCase = true;
-#else
- private bool m_ignoreCase = false;
-#endif // !FEATURE_CASE_SENSITIVE_FILESYSTEM
-
- private StringExpressionSet m_set;
- private bool m_allFiles;
- private bool m_allLocalFiles;
- private bool m_pathDiscovery;
-
- private const String m_strAllFiles = "*AllFiles*";
- private const String m_strAllLocalFiles = "*AllLocalFiles*";
-
- public FileIOAccess()
- {
- m_set = new StringExpressionSet( m_ignoreCase, true );
- m_allFiles = false;
- m_allLocalFiles = false;
- m_pathDiscovery = false;
- }
-
- public FileIOAccess( bool pathDiscovery )
- {
- m_set = new StringExpressionSet( m_ignoreCase, true );
- m_allFiles = false;
- m_allLocalFiles = false;
- m_pathDiscovery = pathDiscovery;
- }
-
- public FileIOAccess( String value )
- {
- if (value == null)
- {
- m_set = new StringExpressionSet( m_ignoreCase, true );
- m_allFiles = false;
- m_allLocalFiles = false;
- }
- else if (value.Length >= m_strAllFiles.Length && String.Compare( m_strAllFiles, value, StringComparison.Ordinal) == 0)
- {
- m_set = new StringExpressionSet( m_ignoreCase, true );
- m_allFiles = true;
- m_allLocalFiles = false;
- }
- else if (value.Length >= m_strAllLocalFiles.Length && String.Compare( m_strAllLocalFiles, 0, value, 0, m_strAllLocalFiles.Length, StringComparison.Ordinal) == 0)
- {
- m_set = new StringExpressionSet( m_ignoreCase, value.Substring( m_strAllLocalFiles.Length ), true );
- m_allFiles = false;
- m_allLocalFiles = true;
- }
- else
- {
- m_set = new StringExpressionSet( m_ignoreCase, value, true );
- m_allFiles = false;
- m_allLocalFiles = false;
- }
- m_pathDiscovery = false;
- }
-
- public FileIOAccess( bool allFiles, bool allLocalFiles, bool pathDiscovery )
- {
- m_set = new StringExpressionSet( m_ignoreCase, true );
- m_allFiles = allFiles;
- m_allLocalFiles = allLocalFiles;
- m_pathDiscovery = pathDiscovery;
- }
-
- public FileIOAccess( StringExpressionSet set, bool allFiles, bool allLocalFiles, bool pathDiscovery )
- {
- m_set = set;
- m_set.SetThrowOnRelative( true );
- m_allFiles = allFiles;
- m_allLocalFiles = allLocalFiles;
- m_pathDiscovery = pathDiscovery;
- }
-
- private FileIOAccess( FileIOAccess operand )
- {
- m_set = operand.m_set.Copy();
- m_allFiles = operand.m_allFiles;
- m_allLocalFiles = operand.m_allLocalFiles;
- m_pathDiscovery = operand.m_pathDiscovery;
- }
-
- public void AddExpressions(ArrayList values, bool checkForDuplicates)
- {
- m_allFiles = false;
- m_set.AddExpressions(values, checkForDuplicates);
- }
-
- public bool AllFiles
- {
- get
- {
- return m_allFiles;
- }
-
- set
- {
- m_allFiles = value;
- }
- }
-
- public bool AllLocalFiles
- {
- get
- {
- return m_allLocalFiles;
- }
-
- set
- {
- m_allLocalFiles = value;
- }
- }
-
- public bool PathDiscovery
- {
- set
- {
- m_pathDiscovery = value;
- }
- }
-
- public bool IsEmpty()
- {
- return !m_allFiles && !m_allLocalFiles && (m_set == null || m_set.IsEmpty());
- }
-
- public FileIOAccess Copy()
- {
- return new FileIOAccess( this );
- }
-
- public FileIOAccess Union( FileIOAccess operand )
- {
- if (operand == null)
- {
- return this.IsEmpty() ? null : this.Copy();
- }
-
- Debug.Assert( this.m_pathDiscovery == operand.m_pathDiscovery, "Path discovery settings must match" );
-
- if (this.m_allFiles || operand.m_allFiles)
- {
- return new FileIOAccess( true, false, this.m_pathDiscovery );
- }
-
- return new FileIOAccess( this.m_set.Union( operand.m_set ), false, this.m_allLocalFiles || operand.m_allLocalFiles, this.m_pathDiscovery );
- }
-
- public FileIOAccess Intersect( FileIOAccess operand )
- {
- if (operand == null)
- {
- return null;
- }
-
- Debug.Assert( this.m_pathDiscovery == operand.m_pathDiscovery, "Path discovery settings must match" );
-
- if (this.m_allFiles)
- {
- if (operand.m_allFiles)
- {
- return new FileIOAccess( true, false, this.m_pathDiscovery );
- }
- else
- {
- return new FileIOAccess( operand.m_set.Copy(), false, operand.m_allLocalFiles, this.m_pathDiscovery );
- }
- }
- else if (operand.m_allFiles)
- {
- return new FileIOAccess( this.m_set.Copy(), false, this.m_allLocalFiles, this.m_pathDiscovery );
- }
-
- StringExpressionSet intersectionSet = new StringExpressionSet( m_ignoreCase, true );
-
- if (this.m_allLocalFiles)
- {
- String[] expressions = operand.m_set.UnsafeToStringArray();
-
- if (expressions != null)
- {
- for (int i = 0; i < expressions.Length; ++i)
- {
- String root = GetRoot( expressions[i] );
- if (root != null && IsLocalDrive( GetRoot( root ) ) )
- {
- intersectionSet.AddExpressions( new String[] { expressions[i] }, true, false );
- }
- }
- }
- }
-
- if (operand.m_allLocalFiles)
- {
- String[] expressions = this.m_set.UnsafeToStringArray();
-
- if (expressions != null)
- {
- for (int i = 0; i < expressions.Length; ++i)
- {
- String root = GetRoot( expressions[i] );
- if (root != null && IsLocalDrive(GetRoot(root)))
- {
- intersectionSet.AddExpressions( new String[] { expressions[i] }, true, false );
- }
- }
- }
- }
-
- String[] regularIntersection = this.m_set.Intersect( operand.m_set ).UnsafeToStringArray();
-
- if (regularIntersection != null)
- intersectionSet.AddExpressions( regularIntersection, !intersectionSet.IsEmpty(), false );
-
- return new FileIOAccess( intersectionSet, false, this.m_allLocalFiles && operand.m_allLocalFiles, this.m_pathDiscovery );
- }
-
- public bool IsSubsetOf( FileIOAccess operand )
- {
- if (operand == null)
- {
- return this.IsEmpty();
- }
-
- if (operand.m_allFiles)
- {
- return true;
- }
-
- Debug.Assert( this.m_pathDiscovery == operand.m_pathDiscovery, "Path discovery settings must match" );
-
- if (!((m_pathDiscovery && this.m_set.IsSubsetOfPathDiscovery( operand.m_set )) || this.m_set.IsSubsetOf( operand.m_set )))
- {
- if (operand.m_allLocalFiles)
- {
- String[] expressions = m_set.UnsafeToStringArray();
-
- for (int i = 0; i < expressions.Length; ++i)
- {
- String root = GetRoot( expressions[i] );
- if (root == null || !IsLocalDrive(GetRoot(root)))
- {
- return false;
- }
- }
- }
- else
- {
- return false;
- }
- }
-
- return true;
- }
-
- private static String GetRoot( String path )
- {
-#if !PLATFORM_UNIX
- String str = path.Substring( 0, 3 );
- if (str.EndsWith( ":\\", StringComparison.Ordinal))
-#else
- String str = path.Substring( 0, 1 );
- if(str == "/")
-#endif // !PLATFORM_UNIX
- {
- return str;
- }
- else
- {
- return null;
- }
- }
-
- public override String ToString()
- {
- // SafeCritical: all string expression sets are constructed with the throwOnRelative bit set, so
- // we're only exposing out the same paths that we took as input.
- if (m_allFiles)
- {
- return m_strAllFiles;
- }
- else
- {
- if (m_allLocalFiles)
- {
- String retstr = m_strAllLocalFiles;
-
- String tempStr = m_set.UnsafeToString();
-
- if (tempStr != null && tempStr.Length > 0)
- retstr += ";" + tempStr;
-
- return retstr;
- }
- else
- {
- return m_set.UnsafeToString();
- }
- }
- }
-
- public String[] ToStringArray()
- {
- // SafeCritical: all string expression sets are constructed with the throwOnRelative bit set, so
- // we're only exposing out the same paths that we took as input.
- return m_set.UnsafeToStringArray();
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- internal static extern bool IsLocalDrive(String path);
-
- public override bool Equals(Object obj)
- {
- FileIOAccess operand = obj as FileIOAccess;
- if(operand == null)
- return (IsEmpty() && obj == null);
- Debug.Assert( this.m_pathDiscovery == operand.m_pathDiscovery, "Path discovery settings must match" );
- if(m_pathDiscovery)
- {
- if(this.m_allFiles && operand.m_allFiles)
- return true;
- if(this.m_allLocalFiles == operand.m_allLocalFiles &&
- m_set.IsSubsetOf(operand.m_set) &&
- operand.m_set.IsSubsetOf(m_set)) // Watch Out: This calls StringExpressionSet.IsSubsetOf, unlike below
- return true;
- return false;
- }
- else
- {
- if(!this.IsSubsetOf(operand)) // Watch Out: This calls FileIOAccess.IsSubsetOf, unlike above
- return false;
- if(!operand.IsSubsetOf(this))
- return false;
- return true;
- }
- }
-
- public override int GetHashCode()
- {
- // This implementation is only to silence a compiler warning.
- return base.GetHashCode();
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/GACIdentityPermission.cs b/src/mscorlib/src/System/Security/Permissions/GACIdentityPermission.cs
deleted file mode 100644
index f93f26daa9..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/GACIdentityPermission.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using System.Globalization;
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class GacIdentityPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
-#pragma warning disable 618
- public GacIdentityPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public override IPermission CreatePermission()
- {
- return new GacIdentityPermission();
- }
- }
-
-
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- sealed public class GacIdentityPermission : CodeAccessPermission, IBuiltInPermission
- {
- //------------------------------------------------------
- //
- // PUBLIC CONSTRUCTORS
- //
- //------------------------------------------------------
-
- public GacIdentityPermission(PermissionState state)
- {
- if (state != PermissionState.Unrestricted && state != PermissionState.None)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public GacIdentityPermission()
- {
- }
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
-
- public override IPermission Copy()
- {
- return new GacIdentityPermission();
- }
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- return false;
- if (!(target is GacIdentityPermission))
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- return true;
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- return null;
- if (!(target is GacIdentityPermission))
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- return this.Copy();
- }
-
- public override IPermission Union(IPermission target)
- {
- if (target == null)
- return this.Copy();
- if (!(target is GacIdentityPermission))
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- return this.Copy();
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return GacIdentityPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.GacIdentityPermissionIndex;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/HostProtectionPermission.cs b/src/mscorlib/src/System/Security/Permissions/HostProtectionPermission.cs
deleted file mode 100644
index c4facbb67e..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/HostProtectionPermission.cs
+++ /dev/null
@@ -1,265 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using System.IO;
- using System.Security.Util;
- using System.Text;
- using System.Threading;
- using System.Runtime.Remoting;
- using System.Security;
- using System.Runtime.Serialization;
- using System.Reflection;
- using System.Globalization;
- using System.Diagnostics.Contracts;
-
- // Keep this enum in sync with tools\ngen\ngen.cpp and inc\mscoree.idl
-
-[Serializable]
- [Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum HostProtectionResource
- {
- None = 0x0,
- //--------------------------------
- Synchronization = 0x1,
- SharedState = 0x2,
- ExternalProcessMgmt = 0x4,
- SelfAffectingProcessMgmt = 0x8,
- ExternalThreading = 0x10,
- SelfAffectingThreading = 0x20,
- SecurityInfrastructure = 0x40,
- UI = 0x80,
- MayLeakOnAbort = 0x100,
- //---------------------------------
- All = 0x1ff,
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly | AttributeTargets.Delegate, AllowMultiple = true, Inherited = false )]
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- // This needs to be in the asmmeta to enable SecAnnotate to successfully resolve and run the security rules. It gets marked
- // as internal by BCLRewriter so we are simply marking it as FriendAccessAllowed so it stays in the asmmeta.
- [System.Runtime.CompilerServices.FriendAccessAllowedAttribute]
-#pragma warning disable 618
- sealed public class HostProtectionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private HostProtectionResource m_resources = HostProtectionResource.None;
-
- public HostProtectionAttribute()
-#pragma warning disable 618
- : base( SecurityAction.LinkDemand )
-#pragma warning restore 618
- {
- }
-
-#pragma warning disable 618
- public HostProtectionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
-#pragma warning disable 618
- if (action != SecurityAction.LinkDemand)
-#pragma warning restore 618
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidFlag"));
- Contract.EndContractBlock();
- }
-
- public HostProtectionResource Resources {
- get { return m_resources; }
- set { m_resources = value; }
- }
-
- public bool Synchronization {
- get { return (m_resources & HostProtectionResource.Synchronization) != 0; }
- set { m_resources = (value ? m_resources | HostProtectionResource.Synchronization : m_resources & ~HostProtectionResource.Synchronization); }
- }
-
- public bool SharedState {
- get { return (m_resources & HostProtectionResource.SharedState) != 0; }
- set { m_resources = (value ? m_resources | HostProtectionResource.SharedState : m_resources & ~HostProtectionResource.SharedState); }
- }
-
- public bool ExternalProcessMgmt {
- get { return (m_resources & HostProtectionResource.ExternalProcessMgmt) != 0; }
- set { m_resources = (value ? m_resources | HostProtectionResource.ExternalProcessMgmt : m_resources & ~HostProtectionResource.ExternalProcessMgmt); }
- }
-
- public bool SelfAffectingProcessMgmt {
- get { return (m_resources & HostProtectionResource.SelfAffectingProcessMgmt) != 0; }
- set { m_resources = (value ? m_resources | HostProtectionResource.SelfAffectingProcessMgmt : m_resources & ~HostProtectionResource.SelfAffectingProcessMgmt); }
- }
-
- public bool ExternalThreading {
- get { return (m_resources & HostProtectionResource.ExternalThreading) != 0; }
- set { m_resources = (value ? m_resources | HostProtectionResource.ExternalThreading : m_resources & ~HostProtectionResource.ExternalThreading); }
- }
-
- public bool SelfAffectingThreading {
- get { return (m_resources & HostProtectionResource.SelfAffectingThreading) != 0; }
- set { m_resources = (value ? m_resources | HostProtectionResource.SelfAffectingThreading : m_resources & ~HostProtectionResource.SelfAffectingThreading); }
- }
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public bool SecurityInfrastructure {
- get { return (m_resources & HostProtectionResource.SecurityInfrastructure) != 0; }
- set { m_resources = (value ? m_resources | HostProtectionResource.SecurityInfrastructure : m_resources & ~HostProtectionResource.SecurityInfrastructure); }
- }
-
- public bool UI {
- get { return (m_resources & HostProtectionResource.UI) != 0; }
- set { m_resources = (value ? m_resources | HostProtectionResource.UI : m_resources & ~HostProtectionResource.UI); }
- }
-
- public bool MayLeakOnAbort {
- get { return (m_resources & HostProtectionResource.MayLeakOnAbort) != 0; }
- set { m_resources = (value ? m_resources | HostProtectionResource.MayLeakOnAbort : m_resources & ~HostProtectionResource.MayLeakOnAbort); }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new HostProtectionPermission( PermissionState.Unrestricted );
- }
- else
- {
- return new HostProtectionPermission( m_resources );
- }
- }
- }
-
- [Serializable]
- sealed internal class HostProtectionPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
- {
- //------------------------------------------------------
- //
- // GLOBALS
- //
- //------------------------------------------------------
-
- // This value is set by PermissionSet.FilterHostProtectionPermissions. It is only used for
- // constructing a HostProtectionException object. Changing it will not affect HostProtection.
- internal static volatile HostProtectionResource protectedResources = HostProtectionResource.None;
-
- //------------------------------------------------------
- //
- // MEMBERS
- //
- //------------------------------------------------------
- private HostProtectionResource m_resources;
-
- //------------------------------------------------------
- //
- // CONSTRUCTORS
- //
- //------------------------------------------------------
- public HostProtectionPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- Resources = HostProtectionResource.All;
- else if (state == PermissionState.None)
- Resources = HostProtectionResource.None;
- else
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
-
- public HostProtectionPermission(HostProtectionResource resources)
- {
- Resources = resources;
- }
-
- //------------------------------------------------------
- //
- // IPermission interface implementation
- //
- //------------------------------------------------------
- public bool IsUnrestricted()
- {
- return Resources == HostProtectionResource.All;
- }
-
- //------------------------------------------------------
- //
- // Properties
- //
- //------------------------------------------------------
- public HostProtectionResource Resources
- {
- set
- {
- if(value < HostProtectionResource.None || value > HostProtectionResource.All)
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)value));
- Contract.EndContractBlock();
- m_resources = value;
- }
-
- get
- {
- return m_resources;
- }
- }
-
- //------------------------------------------------------
- //
- // IPermission interface implementation
- //
- //------------------------------------------------------
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- return m_resources == HostProtectionResource.None;
- if(this.GetType() != target.GetType())
- throw new ArgumentException( Environment.GetResourceString("Argument_WrongType", this.GetType().FullName) );
- return ((uint)this.m_resources & (uint)((HostProtectionPermission)target).m_resources) == (uint)this.m_resources;
- }
-
- public override IPermission Union(IPermission target)
- {
- if (target == null)
- return(this.Copy());
- if(this.GetType() != target.GetType())
- throw new ArgumentException( Environment.GetResourceString("Argument_WrongType", this.GetType().FullName) );
- HostProtectionResource newResources = (HostProtectionResource)((uint)this.m_resources | (uint)((HostProtectionPermission)target).m_resources);
- return new HostProtectionPermission(newResources);
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- return null;
- if(this.GetType() != target.GetType())
- throw new ArgumentException( Environment.GetResourceString("Argument_WrongType", this.GetType().FullName) );
- HostProtectionResource newResources = (HostProtectionResource)((uint)this.m_resources & (uint)((HostProtectionPermission)target).m_resources);
- if(newResources == HostProtectionResource.None)
- return null;
- return new HostProtectionPermission(newResources);
- }
-
- public override IPermission Copy()
- {
- return new HostProtectionPermission(m_resources);
- }
-
- //------------------------------------------------------
- //
- // OBJECT OVERRIDES
- //
- //------------------------------------------------------
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return HostProtectionPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.HostProtectionPermissionIndex;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/IBuiltInPermission.cs b/src/mscorlib/src/System/Security/Permissions/IBuiltInPermission.cs
deleted file mode 100644
index 58b26bd9c4..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/IBuiltInPermission.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- internal interface IBuiltInPermission
- {
- int GetTokenIndex();
- }
-
- internal static class BuiltInPermissionIndex
- {
- internal const int NUM_BUILTIN_UNRESTRICTED = 10;
- internal const int NUM_BUILTIN_NORMAL = 7;
-
- // Unrestricted permissions
-
- internal const int EnvironmentPermissionIndex = 0;
- internal const int FileDialogPermissionIndex = 1;
- internal const int FileIOPermissionIndex = 2;
- internal const int IsolatedStorageFilePermissionIndex = 3;
- internal const int ReflectionPermissionIndex = 4;
- internal const int RegistryPermissionIndex = 5;
- internal const int SecurityPermissionIndex = 6;
- internal const int UIPermissionIndex = 7;
- internal const int PrincipalPermissionIndex = 8;
- internal const int HostProtectionPermissionIndex = 9;
-
- // Normal permissions
- internal const int PublisherIdentityPermissionIndex = 0 + NUM_BUILTIN_UNRESTRICTED;
- internal const int SiteIdentityPermissionIndex = 1 + NUM_BUILTIN_UNRESTRICTED;
- internal const int StrongNameIdentityPermissionIndex = 2 + NUM_BUILTIN_UNRESTRICTED;
- internal const int UrlIdentityPermissionIndex = 3 + NUM_BUILTIN_UNRESTRICTED;
- internal const int ZoneIdentityPermissionIndex = 4 + NUM_BUILTIN_UNRESTRICTED;
- internal const int GacIdentityPermissionIndex = 5 + NUM_BUILTIN_UNRESTRICTED;
- internal const int KeyContainerPermissionIndex = 6 + NUM_BUILTIN_UNRESTRICTED;
- }
-
- [Serializable]
- internal enum BuiltInPermissionFlag
- {
- // Unrestricted permissions
-
- EnvironmentPermission = 0x1,
- FileDialogPermission = 0x2,
- FileIOPermission = 0x4,
- IsolatedStorageFilePermission = 0x8,
- ReflectionPermission = 0x10,
- RegistryPermission = 0x20,
- SecurityPermission = 0x40,
- UIPermission = 0x80,
- PrincipalPermission = 0x100,
-
- // Normal permissions
- PublisherIdentityPermission = 0x200,
- SiteIdentityPermission = 0x400,
- StrongNameIdentityPermission = 0x800,
- UrlIdentityPermission = 0x1000,
- ZoneIdentityPermission = 0x2000,
- KeyContainerPermission = 0x4000,
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/IUnrestrictedPermission.cs b/src/mscorlib/src/System/Security/Permissions/IUnrestrictedPermission.cs
deleted file mode 100644
index 782df8012c..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/IUnrestrictedPermission.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions {
-
- using System;
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IUnrestrictedPermission
- {
- bool IsUnrestricted();
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/IsolatedStorageFilePermission.cs b/src/mscorlib/src/System/Security/Permissions/IsolatedStorageFilePermission.cs
deleted file mode 100644
index 42bc648c72..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/IsolatedStorageFilePermission.cs
+++ /dev/null
@@ -1,163 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-// Purpose : This permission is used to controls/administer access to
-// IsolatedStorageFile
-//
-
-namespace System.Security.Permissions {
-
- using System.Globalization;
-
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- sealed public class IsolatedStorageFilePermission : IsolatedStoragePermission, IBuiltInPermission
- {
- public IsolatedStorageFilePermission(PermissionState state)
- : base(state) { }
-
- internal IsolatedStorageFilePermission(IsolatedStorageContainment UsageAllowed,
- long ExpirationDays, bool PermanentData)
- : base(UsageAllowed, ExpirationDays, PermanentData) { }
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public override IPermission Union(IPermission target)
- {
- if (target == null)
- {
- return this.Copy();
- }
- else if (!VerifyType(target))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- IsolatedStorageFilePermission operand = (IsolatedStorageFilePermission)target;
-
- if (this.IsUnrestricted() || operand.IsUnrestricted())
- {
- return new IsolatedStorageFilePermission( PermissionState.Unrestricted );
- }
- else
- {
- IsolatedStorageFilePermission union;
- union = new IsolatedStorageFilePermission( PermissionState.None );
- union.m_userQuota = max(m_userQuota,operand.m_userQuota);
- union.m_machineQuota = max(m_machineQuota,operand.m_machineQuota);
- union.m_expirationDays = max(m_expirationDays,operand.m_expirationDays);
- union.m_permanentData = m_permanentData || operand.m_permanentData;
- union.m_allowed = (IsolatedStorageContainment)max((long)m_allowed,(long)operand.m_allowed);
- return union;
- }
- }
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- return ((m_userQuota == 0) &&
- (m_machineQuota == 0) &&
- (m_expirationDays == 0) &&
- (m_permanentData == false) &&
- (m_allowed == IsolatedStorageContainment.None));
- }
-
- try
- {
- IsolatedStorageFilePermission operand = (IsolatedStorageFilePermission)target;
-
- if (operand.IsUnrestricted())
- return true;
-
- return ((operand.m_userQuota >= m_userQuota) &&
- (operand.m_machineQuota >= m_machineQuota) &&
- (operand.m_expirationDays >= m_expirationDays) &&
- (operand.m_permanentData || !m_permanentData) &&
- (operand.m_allowed >= m_allowed));
- }
- catch (InvalidCastException)
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- return null;
- else if (!VerifyType(target))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- IsolatedStorageFilePermission operand = (IsolatedStorageFilePermission)target;
-
- if(operand.IsUnrestricted())
- return Copy();
- else if(IsUnrestricted())
- return target.Copy();
-
- IsolatedStorageFilePermission intersection;
- intersection = new IsolatedStorageFilePermission( PermissionState.None );
- intersection.m_userQuota = min(m_userQuota,operand.m_userQuota);
- intersection.m_machineQuota = min(m_machineQuota,operand.m_machineQuota);
- intersection.m_expirationDays = min(m_expirationDays,operand.m_expirationDays);
- intersection.m_permanentData = m_permanentData && operand.m_permanentData;
- intersection.m_allowed = (IsolatedStorageContainment)min((long)m_allowed,(long)operand.m_allowed);
-
- if ((intersection.m_userQuota == 0) &&
- (intersection.m_machineQuota == 0) &&
- (intersection.m_expirationDays == 0) &&
- (intersection.m_permanentData == false) &&
- (intersection.m_allowed == IsolatedStorageContainment.None))
- return null;
-
- return intersection;
- }
-
- public override IPermission Copy()
- {
- IsolatedStorageFilePermission copy ;
- copy = new IsolatedStorageFilePermission(PermissionState.Unrestricted);
- if(!IsUnrestricted()){
- copy.m_userQuota = m_userQuota;
- copy.m_machineQuota = m_machineQuota;
- copy.m_expirationDays = m_expirationDays;
- copy.m_permanentData = m_permanentData;
- copy.m_allowed = m_allowed;
- }
- return copy;
- }
-
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return IsolatedStorageFilePermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.IsolatedStorageFilePermissionIndex;
- }
- }
-}
-
diff --git a/src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs b/src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs
deleted file mode 100644
index 9f09a37098..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-namespace System.Security.Permissions {
-
- using System;
- using System.IO;
- using System.Security;
- using System.Security.Util;
- using System.Globalization;
-
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum IsolatedStorageContainment {
- None = 0x00,
- DomainIsolationByUser = 0x10,
- ApplicationIsolationByUser = 0x15,
- AssemblyIsolationByUser = 0x20,
- DomainIsolationByMachine = 0x30,
- AssemblyIsolationByMachine = 0x40,
- ApplicationIsolationByMachine = 0x45,
- DomainIsolationByRoamingUser = 0x50,
- AssemblyIsolationByRoamingUser = 0x60,
- ApplicationIsolationByRoamingUser = 0x65,
- AdministerIsolatedStorageByUser = 0x70,
- //AdministerIsolatedStorageByMachine = 0x80,
- UnrestrictedIsolatedStorage = 0xF0
- };
-
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- abstract public class IsolatedStoragePermission
- : CodeAccessPermission, IUnrestrictedPermission
- {
-
- //------------------------------------------------------
- //
- // PRIVATE STATE DATA
- //
- //------------------------------------------------------
-
- /// <internalonly/>
- internal long m_userQuota;
- /// <internalonly/>
- internal long m_machineQuota;
- /// <internalonly/>
- internal long m_expirationDays;
- /// <internalonly/>
- internal bool m_permanentData;
- /// <internalonly/>
- internal IsolatedStorageContainment m_allowed;
-
- //------------------------------------------------------
- //
- // CONSTRUCTORS
- //
- //------------------------------------------------------
-
- protected IsolatedStoragePermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- m_userQuota = Int64.MaxValue;
- m_machineQuota = Int64.MaxValue;
- m_expirationDays = Int64.MaxValue ;
- m_permanentData = true;
- m_allowed = IsolatedStorageContainment.UnrestrictedIsolatedStorage;
- }
- else if (state == PermissionState.None)
- {
- m_userQuota = 0;
- m_machineQuota = 0;
- m_expirationDays = 0;
- m_permanentData = false;
- m_allowed = IsolatedStorageContainment.None;
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- internal IsolatedStoragePermission(IsolatedStorageContainment UsageAllowed,
- long ExpirationDays, bool PermanentData)
-
- {
- m_userQuota = 0; // typical demand won't include quota
- m_machineQuota = 0; // typical demand won't include quota
- m_expirationDays = ExpirationDays;
- m_permanentData = PermanentData;
- m_allowed = UsageAllowed;
- }
-
- internal IsolatedStoragePermission(IsolatedStorageContainment UsageAllowed,
- long ExpirationDays, bool PermanentData, long UserQuota)
-
- {
- m_machineQuota = 0;
- m_userQuota = UserQuota;
- m_expirationDays = ExpirationDays;
- m_permanentData = PermanentData;
- m_allowed = UsageAllowed;
- }
-
-
- //------------------------------------------------------
- //
- // PUBLIC ACCESSOR METHODS
- //
- //------------------------------------------------------
-
- // properties
- public long UserQuota {
- set{
- m_userQuota = value;
- }
- get{
- return m_userQuota;
- }
- }
-
-#if false
- internal long MachineQuota {
- set{
- m_machineQuota = value;
- }
- get{
- return m_machineQuota;
- }
- }
- internal long ExpirationDays {
- set{
- m_expirationDays = value;
- }
- get{
- return m_expirationDays;
- }
- }
- internal bool PermanentData {
- set{
- m_permanentData = value;
- }
- get{
- return m_permanentData;
- }
- }
-#endif
-
- public IsolatedStorageContainment UsageAllowed {
- set{
- m_allowed = value;
- }
- get{
- return m_allowed;
- }
- }
-
-
- //------------------------------------------------------
- //
- // CODEACCESSPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public bool IsUnrestricted()
- {
- return m_allowed == IsolatedStorageContainment.UnrestrictedIsolatedStorage;
- }
-
-
- //------------------------------------------------------
- //
- // INTERNAL METHODS
- //
- //------------------------------------------------------
- internal static long min(long x,long y) {return x>y?y:x;}
- internal static long max(long x,long y) {return x<y?y:x;}
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/PermissionAttributes.cs b/src/mscorlib/src/System/Security/Permissions/PermissionAttributes.cs
deleted file mode 100644
index b6ac8ece3c..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/PermissionAttributes.cs
+++ /dev/null
@@ -1,880 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
-
- using System.Security.Util;
- using System.IO;
- using System.Security.Policy;
- using System.Text;
- using System.Threading;
- using System.Runtime.InteropServices;
- using System.Runtime.Remoting;
- using System.Runtime.Serialization;
-#if FEATURE_X509
- using System.Security.Cryptography.X509Certificates;
-#endif
- using System.Runtime.Versioning;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- // The csharp compiler requires these types to be public, but they are not used elsewhere.
- [Obsolete("SecurityAction is no longer accessible to application code.")]
- public enum SecurityAction
- {
- // Demand permission of all caller
- Demand = 2,
-
- // Assert permission so callers don't need
- Assert = 3,
-
- // Deny permissions so checks will fail
- [Obsolete("Deny is obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- Deny = 4,
-
- // Reduce permissions so check will fail
- PermitOnly = 5,
-
- // Demand permission of caller
- LinkDemand = 6,
-
- // Demand permission of a subclass
- InheritanceDemand = 7,
-
- // Request minimum permissions to run
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- RequestMinimum = 8,
-
- // Request optional additional permissions
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- RequestOptional = 9,
-
- // Refuse to be granted these permissions
- [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- RequestRefuse = 10,
- }
-
- [Serializable]
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
- [System.Runtime.InteropServices.ComVisible(true)]
- // The csharp compiler requires these types to be public, but they are not used elsewhere.
- [Obsolete("SecurityAttribute is no longer accessible to application code.")]
- public abstract class SecurityAttribute : System.Attribute
- {
- /// <internalonly/>
- internal SecurityAction m_action;
- /// <internalonly/>
- internal bool m_unrestricted;
-
- protected SecurityAttribute( SecurityAction action )
- {
- m_action = action;
- }
-
- public SecurityAction Action
- {
- get { return m_action; }
- set { m_action = value; }
- }
-
- public bool Unrestricted
- {
- get { return m_unrestricted; }
- set { m_unrestricted = value; }
- }
-
- abstract public IPermission CreatePermission();
-
- internal static unsafe IntPtr FindSecurityAttributeTypeHandle(String typeName)
- {
- PermissionSet.s_fullTrust.Assert();
- Type t = Type.GetType(typeName, false, false);
- if(t == null)
- return IntPtr.Zero;
- IntPtr typeHandle = t.TypeHandle.Value;
- return typeHandle;
- }
- }
-
- [Serializable]
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
- [System.Runtime.InteropServices.ComVisible(true)]
- // The csharp compiler requires these types to be public, but they are not used elsewhere.
- [Obsolete("CodeAccessSecurityAttribute is no longer accessible to application code.")]
- public abstract class CodeAccessSecurityAttribute : SecurityAttribute
- {
- protected CodeAccessSecurityAttribute( SecurityAction action )
- : base( action )
- {
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class EnvironmentPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private String m_read = null;
- private String m_write = null;
-
-#pragma warning disable 618
- public EnvironmentPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public String Read {
- get { return m_read; }
- set { m_read = value; }
- }
-
- public String Write {
- get { return m_write; }
- set { m_write = value; }
- }
-
- public String All {
- get { throw new NotSupportedException( Environment.GetResourceString( "NotSupported_GetMethod" ) ); }
- set { m_write = value; m_read = value; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new EnvironmentPermission(PermissionState.Unrestricted);
- }
- else
- {
- EnvironmentPermission perm = new EnvironmentPermission(PermissionState.None);
- if (m_read != null)
- perm.SetPathList( EnvironmentPermissionAccess.Read, m_read );
- if (m_write != null)
- perm.SetPathList( EnvironmentPermissionAccess.Write, m_write );
- return perm;
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class FileDialogPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private FileDialogPermissionAccess m_access;
-
-#pragma warning disable 618
- public FileDialogPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public bool Open
- {
- get { return (m_access & FileDialogPermissionAccess.Open) != 0; }
- set { m_access = value ? m_access | FileDialogPermissionAccess.Open : m_access & ~FileDialogPermissionAccess.Open; }
- }
-
- public bool Save
- {
- get { return (m_access & FileDialogPermissionAccess.Save) != 0; }
- set { m_access = value ? m_access | FileDialogPermissionAccess.Save : m_access & ~FileDialogPermissionAccess.Save; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new FileDialogPermission( PermissionState.Unrestricted );
- }
- else
- {
- return new FileDialogPermission( m_access );
- }
- }
- }
-
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class FileIOPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private String m_read = null;
- private String m_write = null;
- private String m_append = null;
- private String m_pathDiscovery = null;
- private String m_viewAccess = null;
- private String m_changeAccess = null;
- [OptionalField(VersionAdded = 2)] private FileIOPermissionAccess m_allLocalFiles = FileIOPermissionAccess.NoAccess;
- [OptionalField(VersionAdded = 2)] private FileIOPermissionAccess m_allFiles = FileIOPermissionAccess.NoAccess;
-
-#pragma warning disable 618
- public FileIOPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public String Read {
- get { return m_read; }
- set { m_read = value; }
- }
-
- public String Write {
- get { return m_write; }
- set { m_write = value; }
- }
-
- public String Append {
- get { return m_append; }
- set { m_append = value; }
- }
-
- public String PathDiscovery {
- get { return m_pathDiscovery; }
- set { m_pathDiscovery = value; }
- }
-
- public String ViewAccessControl {
- get { return m_viewAccess; }
- set { m_viewAccess = value; }
- }
-
- public String ChangeAccessControl {
- get { return m_changeAccess; }
- set { m_changeAccess = value; }
- }
-
- [Obsolete("Please use the ViewAndModify property instead.")]
- public String All {
- set { m_read = value; m_write = value; m_append = value; m_pathDiscovery = value; }
- get { throw new NotSupportedException( Environment.GetResourceString( "NotSupported_GetMethod" ) ); }
- }
-
- // Read, Write, Append, PathDiscovery, but no ACL-related permissions
- public String ViewAndModify {
- get { throw new NotSupportedException( Environment.GetResourceString( "NotSupported_GetMethod" ) ); }
- set { m_read = value; m_write = value; m_append = value; m_pathDiscovery = value; }
- }
-
- public FileIOPermissionAccess AllFiles {
- get { return m_allFiles; }
- set { m_allFiles = value; }
- }
-
- public FileIOPermissionAccess AllLocalFiles {
- get { return m_allLocalFiles; }
- set { m_allLocalFiles = value; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new FileIOPermission(PermissionState.Unrestricted);
- }
- else
- {
- FileIOPermission perm = new FileIOPermission(PermissionState.None);
- if (m_read != null)
- perm.SetPathList( FileIOPermissionAccess.Read, m_read );
- if (m_write != null)
- perm.SetPathList( FileIOPermissionAccess.Write, m_write );
- if (m_append != null)
- perm.SetPathList( FileIOPermissionAccess.Append, m_append );
- if (m_pathDiscovery != null)
- perm.SetPathList( FileIOPermissionAccess.PathDiscovery, m_pathDiscovery );
-
- perm.AllFiles = m_allFiles;
- perm.AllLocalFiles = m_allLocalFiles;
- return perm;
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
-#pragma warning disable 618
- public sealed class KeyContainerPermissionAttribute : CodeAccessSecurityAttribute {
-#pragma warning restore 618
- KeyContainerPermissionFlags m_flags = KeyContainerPermissionFlags.NoFlags;
- private string m_keyStore;
- private string m_providerName;
- private int m_providerType = -1;
- private string m_keyContainerName;
- private int m_keySpec = -1;
-
-#pragma warning disable 618
- public KeyContainerPermissionAttribute(SecurityAction action) : base(action) {}
-#pragma warning restore 618
-
- public string KeyStore {
- get { return m_keyStore; }
- set { m_keyStore = value; }
- }
-
- public string ProviderName {
- get { return m_providerName; }
- set { m_providerName = value; }
- }
-
- public int ProviderType {
- get { return m_providerType; }
- set { m_providerType = value; }
- }
-
- public string KeyContainerName {
- get { return m_keyContainerName; }
- set { m_keyContainerName = value; }
- }
-
- public int KeySpec {
- get { return m_keySpec; }
- set { m_keySpec = value; }
- }
-
- public KeyContainerPermissionFlags Flags {
- get { return m_flags; }
- set { m_flags = value; }
- }
-
- public override IPermission CreatePermission() {
- if (m_unrestricted) {
- return new KeyContainerPermission(PermissionState.Unrestricted);
- } else {
- if (KeyContainerPermissionAccessEntry.IsUnrestrictedEntry(m_keyStore, m_providerName, m_providerType, m_keyContainerName, m_keySpec))
- return new KeyContainerPermission(m_flags);
-
- // create a KeyContainerPermission with a single access entry.
- KeyContainerPermission cp = new KeyContainerPermission(KeyContainerPermissionFlags.NoFlags);
- KeyContainerPermissionAccessEntry accessEntry = new KeyContainerPermissionAccessEntry(m_keyStore, m_providerName, m_providerType, m_keyContainerName, m_keySpec, m_flags);
- cp.AccessEntries.Add(accessEntry);
- return cp;
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class ReflectionPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private ReflectionPermissionFlag m_flag = ReflectionPermissionFlag.NoFlags;
-
-#pragma warning disable 618
- public ReflectionPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public ReflectionPermissionFlag Flags {
- get { return m_flag; }
- set { m_flag = value; }
- }
-
- [Obsolete("This API has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- public bool TypeInformation {
-#pragma warning disable 618
- get { return (m_flag & ReflectionPermissionFlag.TypeInformation) != 0; }
- set { m_flag = value ? m_flag | ReflectionPermissionFlag.TypeInformation : m_flag & ~ReflectionPermissionFlag.TypeInformation; }
-#pragma warning restore 618
- }
-
- public bool MemberAccess {
- get { return (m_flag & ReflectionPermissionFlag.MemberAccess) != 0; }
- set { m_flag = value ? m_flag | ReflectionPermissionFlag.MemberAccess : m_flag & ~ReflectionPermissionFlag.MemberAccess; }
- }
-
- [Obsolete("This permission is no longer used by the CLR.")]
- public bool ReflectionEmit {
-#pragma warning disable 618
- get { return (m_flag & ReflectionPermissionFlag.ReflectionEmit) != 0; }
- set { m_flag = value ? m_flag | ReflectionPermissionFlag.ReflectionEmit : m_flag & ~ReflectionPermissionFlag.ReflectionEmit; }
-#pragma warning restore 618
- }
-
- public bool RestrictedMemberAccess
- {
- get { return (m_flag & ReflectionPermissionFlag.RestrictedMemberAccess) != 0; }
- set { m_flag = value ? m_flag | ReflectionPermissionFlag.RestrictedMemberAccess : m_flag & ~ReflectionPermissionFlag.RestrictedMemberAccess; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new ReflectionPermission( PermissionState.Unrestricted );
- }
- else
- {
- return new ReflectionPermission( m_flag );
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class RegistryPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private String m_read = null;
- private String m_write = null;
- private String m_create = null;
- private String m_viewAcl = null;
- private String m_changeAcl = null;
-
-#pragma warning disable 618
- public RegistryPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public String Read {
- get { return m_read; }
- set { m_read = value; }
- }
-
- public String Write {
- get { return m_write; }
- set { m_write = value; }
- }
-
- public String Create {
- get { return m_create; }
- set { m_create = value; }
- }
-
- public String ViewAccessControl {
- get { return m_viewAcl; }
- set { m_viewAcl = value; }
- }
-
- public String ChangeAccessControl {
- get { return m_changeAcl; }
- set { m_changeAcl = value; }
- }
-
- // Read, Write, & Create, but no ACL's
- public String ViewAndModify {
- get { throw new NotSupportedException( Environment.GetResourceString( "NotSupported_GetMethod" ) ); }
- set { m_read = value; m_write = value; m_create = value; }
- }
-
- [Obsolete("Please use the ViewAndModify property instead.")]
- public String All {
- get { throw new NotSupportedException( Environment.GetResourceString( "NotSupported_GetMethod" ) ); }
- set { m_read = value; m_write = value; m_create = value; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new RegistryPermission( PermissionState.Unrestricted );
- }
- else
- {
- RegistryPermission perm = new RegistryPermission(PermissionState.None);
- if (m_read != null)
- perm.SetPathList( RegistryPermissionAccess.Read, m_read );
- if (m_write != null)
- perm.SetPathList( RegistryPermissionAccess.Write, m_write );
- if (m_create != null)
- perm.SetPathList( RegistryPermissionAccess.Create, m_create );
- return perm;
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- // The csharp compiler requires these types to be public, but they are not used elsewhere.
- [Obsolete("SecurityPermissionAttribute is no longer accessible to application code.")]
- sealed public class SecurityPermissionAttribute : CodeAccessSecurityAttribute
- {
- private SecurityPermissionFlag m_flag = SecurityPermissionFlag.NoFlags;
-
- public SecurityPermissionAttribute( SecurityAction action )
- : base( action )
- {
- }
-
- public SecurityPermissionFlag Flags {
- get { return m_flag; }
- set { m_flag = value; }
- }
-
- public bool Assertion {
- get { return (m_flag & SecurityPermissionFlag.Assertion) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.Assertion : m_flag & ~SecurityPermissionFlag.Assertion; }
- }
-
- public bool UnmanagedCode {
- get { return (m_flag & SecurityPermissionFlag.UnmanagedCode) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.UnmanagedCode : m_flag & ~SecurityPermissionFlag.UnmanagedCode; }
- }
-
- public bool SkipVerification {
- get { return (m_flag & SecurityPermissionFlag.SkipVerification) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.SkipVerification : m_flag & ~SecurityPermissionFlag.SkipVerification; }
- }
-
- public bool Execution {
- get { return (m_flag & SecurityPermissionFlag.Execution) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.Execution : m_flag & ~SecurityPermissionFlag.Execution; }
- }
-
- public bool ControlThread {
- get { return (m_flag & SecurityPermissionFlag.ControlThread) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlThread : m_flag & ~SecurityPermissionFlag.ControlThread; }
- }
-
- public bool ControlEvidence {
- get { return (m_flag & SecurityPermissionFlag.ControlEvidence) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlEvidence : m_flag & ~SecurityPermissionFlag.ControlEvidence; }
- }
-
- public bool ControlPolicy {
- get { return (m_flag & SecurityPermissionFlag.ControlPolicy) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlPolicy : m_flag & ~SecurityPermissionFlag.ControlPolicy; }
- }
-
- public bool SerializationFormatter {
- get { return (m_flag & SecurityPermissionFlag.SerializationFormatter) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.SerializationFormatter : m_flag & ~SecurityPermissionFlag.SerializationFormatter; }
- }
-
- public bool ControlDomainPolicy {
- get { return (m_flag & SecurityPermissionFlag.ControlDomainPolicy) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlDomainPolicy : m_flag & ~SecurityPermissionFlag.ControlDomainPolicy; }
- }
-
- public bool ControlPrincipal {
- get { return (m_flag & SecurityPermissionFlag.ControlPrincipal) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlPrincipal : m_flag & ~SecurityPermissionFlag.ControlPrincipal; }
- }
-
- public bool ControlAppDomain {
- get { return (m_flag & SecurityPermissionFlag.ControlAppDomain) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlAppDomain : m_flag & ~SecurityPermissionFlag.ControlAppDomain; }
- }
-
- public bool RemotingConfiguration {
- get { return (m_flag & SecurityPermissionFlag.RemotingConfiguration) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.RemotingConfiguration : m_flag & ~SecurityPermissionFlag.RemotingConfiguration; }
- }
-
- [System.Runtime.InteropServices.ComVisible(true)]
- public bool Infrastructure {
- get { return (m_flag & SecurityPermissionFlag.Infrastructure) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.Infrastructure : m_flag & ~SecurityPermissionFlag.Infrastructure; }
- }
-
- public bool BindingRedirects {
- get { return (m_flag & SecurityPermissionFlag.BindingRedirects) != 0; }
- set { m_flag = value ? m_flag | SecurityPermissionFlag.BindingRedirects : m_flag & ~SecurityPermissionFlag.BindingRedirects; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new SecurityPermission( PermissionState.Unrestricted );
- }
- else
- {
- return new SecurityPermission( m_flag );
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class UIPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private UIPermissionWindow m_windowFlag = UIPermissionWindow.NoWindows;
- private UIPermissionClipboard m_clipboardFlag = UIPermissionClipboard.NoClipboard;
-
-#pragma warning disable 618
- public UIPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public UIPermissionWindow Window {
- get { return m_windowFlag; }
- set { m_windowFlag = value; }
- }
-
- public UIPermissionClipboard Clipboard {
- get { return m_clipboardFlag; }
- set { m_clipboardFlag = value; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new UIPermission( PermissionState.Unrestricted );
- }
- else
- {
- return new UIPermission( m_windowFlag, m_clipboardFlag );
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class ZoneIdentityPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private SecurityZone m_flag = SecurityZone.NoZone;
-
-#pragma warning disable 618
- public ZoneIdentityPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public SecurityZone Zone {
- get { return m_flag; }
- set { m_flag = value; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new ZoneIdentityPermission(PermissionState.Unrestricted);
- }
- else
- {
- return new ZoneIdentityPermission( m_flag );
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class StrongNameIdentityPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private String m_name = null;
- private String m_version = null;
- private String m_blob = null;
-
-#pragma warning disable 618
- public StrongNameIdentityPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public String Name
- {
- get { return m_name; }
- set { m_name = value; }
- }
-
- public String Version
- {
- get { return m_version; }
- set { m_version = value; }
- }
-
- public String PublicKey
- {
- get { return m_blob; }
- set { m_blob = value; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new StrongNameIdentityPermission( PermissionState.Unrestricted );
- }
- else
- {
- if (m_blob == null && m_name == null && m_version == null)
- return new StrongNameIdentityPermission( PermissionState.None );
-
- if (m_blob == null)
- throw new ArgumentException( Environment.GetResourceString("ArgumentNull_Key"));
-
- StrongNamePublicKeyBlob blob = new StrongNamePublicKeyBlob( m_blob );
-
- if (m_version == null || m_version.Equals(String.Empty))
- return new StrongNameIdentityPermission( blob, m_name, null );
- else
- return new StrongNameIdentityPermission( blob, m_name, new Version( m_version ) );
- }
- }
- }
-
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class SiteIdentityPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private String m_site = null;
-
-#pragma warning disable 618
- public SiteIdentityPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public String Site {
- get { return m_site; }
- set { m_site = value; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new SiteIdentityPermission( PermissionState.Unrestricted );
- }
- else
- {
- if (m_site == null)
- return new SiteIdentityPermission( PermissionState.None );
-
- return new SiteIdentityPermission( m_site );
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
-#pragma warning disable 618
- [Serializable] sealed public class UrlIdentityPermissionAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private String m_url = null;
-
-#pragma warning disable 618
- public UrlIdentityPermissionAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- }
-
- public String Url {
- get { return m_url; }
- set { m_url = value; }
- }
-
- public override IPermission CreatePermission()
- {
- if (m_unrestricted)
- {
- return new UrlIdentityPermission( PermissionState.Unrestricted );
- }
- else
- {
- if (m_url == null)
- return new UrlIdentityPermission( PermissionState.None );
-
- return new UrlIdentityPermission( m_url );
- }
- }
- }
-
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )]
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
-#pragma warning disable 618
- sealed public class PermissionSetAttribute : CodeAccessSecurityAttribute
-#pragma warning restore 618
- {
- private String m_file;
- private String m_name;
- private bool m_unicode;
- private String m_xml;
- private String m_hex;
-
-#pragma warning disable 618
- public PermissionSetAttribute( SecurityAction action )
-#pragma warning restore 618
- : base( action )
- {
- m_unicode = false;
- }
-
- public String File {
- get { return m_file; }
- set { m_file = value; }
- }
-
- public bool UnicodeEncoded {
- get { return m_unicode; }
- set { m_unicode = value; }
- }
-
- public String Name {
- get { return m_name; }
- set { m_name = value; }
- }
-
- public String XML {
- get { return m_xml; }
- set { m_xml = value; }
- }
-
- public String Hex {
- get { return m_hex; }
- set { m_hex = value; }
- }
-
- public override IPermission CreatePermission()
- {
- return null;
- }
-
- public PermissionSet CreatePermissionSet()
- {
- if (m_unrestricted)
- return new PermissionSet( PermissionState.Unrestricted );
- else if (m_name != null)
- return NamedPermissionSet.GetBuiltInSet( m_name );
- else
- return new PermissionSet( PermissionState.None );
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/PermissionState.cs b/src/mscorlib/src/System/Security/Permissions/PermissionState.cs
deleted file mode 100644
index ea0f1a0ac2..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/PermissionState.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-// The Runtime policy manager. Maintains a set of IdentityMapper objects that map
-// inbound evidence to groups. Resolves an identity into a set of permissions
-//
-
-namespace System.Security.Permissions {
-
- using System;
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum PermissionState
- {
- Unrestricted = 1,
- None = 0,
- }
-
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/ReflectionPermission.cs b/src/mscorlib/src/System/Security/Permissions/ReflectionPermission.cs
deleted file mode 100644
index 1c9dd7696c..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/ReflectionPermission.cs
+++ /dev/null
@@ -1,274 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using System.IO;
- using System.Security.Util;
- using System.Text;
- using System.Runtime.InteropServices;
- using System.Runtime.Remoting;
- using System.Security;
- using System.Reflection;
- using System.Globalization;
- using System.Diagnostics.Contracts;
-
- [ComVisible(true)]
- [Flags]
- [Serializable]
- public enum ReflectionPermissionFlag
- {
- NoFlags = 0x00,
- [Obsolete("This API has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
- TypeInformation = 0x01,
- MemberAccess = 0x02,
- [Obsolete("This permission is no longer used by the CLR.")]
- ReflectionEmit = 0x04,
- [ComVisible(false)]
- RestrictedMemberAccess = 0x08,
- [Obsolete("This permission has been deprecated. Use PermissionState.Unrestricted to get full access.")]
- AllFlags = 0x07
- }
-
- [ComVisible(true)]
- [Serializable]
- sealed public class ReflectionPermission
- : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
- {
- // ReflectionPermissionFlag.AllFlags doesn't contain the new value RestrictedMemberAccess,
- // but we cannot change its value now because that will break apps that have that old value baked in.
- // We should use this const that truely contains "all" flags instead of ReflectionPermissionFlag.AllFlags.
-#pragma warning disable 618
- internal const ReflectionPermissionFlag AllFlagsAndMore = ReflectionPermissionFlag.AllFlags | ReflectionPermissionFlag.RestrictedMemberAccess;
-#pragma warning restore 618
-
- private ReflectionPermissionFlag m_flags;
-
- //
- // Public Constructors
- //
-
- public ReflectionPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- SetUnrestricted( true );
- }
- else if (state == PermissionState.None)
- {
- SetUnrestricted( false );
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- // Parameters:
- //
- public ReflectionPermission(ReflectionPermissionFlag flag)
- {
- VerifyAccess(flag);
-
- SetUnrestricted(false);
- m_flags = flag;
- }
-
- //------------------------------------------------------
- //
- // PRIVATE AND PROTECTED MODIFIERS
- //
- //------------------------------------------------------
-
-
- private void SetUnrestricted(bool unrestricted)
- {
- if (unrestricted)
- {
- m_flags = ReflectionPermission.AllFlagsAndMore;
- }
- else
- {
- Reset();
- }
- }
-
-
- private void Reset()
- {
- m_flags = ReflectionPermissionFlag.NoFlags;
- }
-
-
- public ReflectionPermissionFlag Flags
- {
- set
- {
- VerifyAccess(value);
-
- m_flags = value;
- }
-
- get
- {
- return m_flags;
- }
- }
-
-
- #if ZERO // Do not remove this code, useful for debugging
- public override String ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append("ReflectionPermission(");
- if (IsUnrestricted())
- {
- sb.Append("Unrestricted");
- }
- else
- {
- if (GetFlag(ReflectionPermissionFlag.TypeInformation))
- sb.Append("TypeInformation; ");
- if (GetFlag(ReflectionPermissionFlag.MemberAccess))
- sb.Append("MemberAccess; ");
-#pragma warning disable 618
- if (GetFlag(ReflectionPermissionFlag.ReflectionEmit))
- sb.Append("ReflectionEmit; ");
-#pragma warning restore 618
- }
-
- sb.Append(")");
- return sb.ToString();
- }
- #endif
-
-
- //
- // CodeAccessPermission implementation
- //
-
- public bool IsUnrestricted()
- {
- return m_flags == ReflectionPermission.AllFlagsAndMore;
- }
-
- //
- // IPermission implementation
- //
-
- public override IPermission Union(IPermission other)
- {
- if (other == null)
- {
- return this.Copy();
- }
- else if (!VerifyType(other))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- ReflectionPermission operand = (ReflectionPermission)other;
-
- if (this.IsUnrestricted() || operand.IsUnrestricted())
- {
- return new ReflectionPermission( PermissionState.Unrestricted );
- }
- else
- {
- ReflectionPermissionFlag flag_union = (ReflectionPermissionFlag)(m_flags | operand.m_flags);
- return(new ReflectionPermission(flag_union));
- }
- }
-
-
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- return m_flags == ReflectionPermissionFlag.NoFlags;
- }
-
- try
- {
- ReflectionPermission operand = (ReflectionPermission)target;
- if (operand.IsUnrestricted())
- return true;
- else if (this.IsUnrestricted())
- return false;
- else
- return (((int)this.m_flags) & ~((int)operand.m_flags)) == 0;
- }
- catch (InvalidCastException)
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- return null;
- else if (!VerifyType(target))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- ReflectionPermission operand = (ReflectionPermission)target;
-
- ReflectionPermissionFlag newFlags = operand.m_flags & this.m_flags;
-
- if (newFlags == ReflectionPermissionFlag.NoFlags)
- return null;
- else
- return new ReflectionPermission( newFlags );
- }
-
- public override IPermission Copy()
- {
- if (this.IsUnrestricted())
- {
- return new ReflectionPermission(PermissionState.Unrestricted);
- }
- else
- {
- return new ReflectionPermission((ReflectionPermissionFlag)m_flags);
- }
- }
-
-
- //
- // IEncodable Interface
-
- private
- void VerifyAccess(ReflectionPermissionFlag type)
- {
- if ((type & ~ReflectionPermission.AllFlagsAndMore) != 0)
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)type));
- Contract.EndContractBlock();
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return ReflectionPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.ReflectionPermissionIndex;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/RegistryPermission.cs b/src/mscorlib/src/System/Security/Permissions/RegistryPermission.cs
deleted file mode 100644
index c0c51e94a2..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/RegistryPermission.cs
+++ /dev/null
@@ -1,363 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using SecurityElement = System.Security.SecurityElement;
- using System.Security.AccessControl;
- using System.Security.Util;
- using System.IO;
- using System.Globalization;
- using System.Runtime.Serialization;
-
-[Serializable]
- [Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum RegistryPermissionAccess
- {
- NoAccess = 0x00,
- Read = 0x01,
- Write = 0x02,
- Create = 0x04,
- AllAccess = 0x07,
- }
-
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- sealed public class RegistryPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
- {
- private StringExpressionSet m_read;
- private StringExpressionSet m_write;
- private StringExpressionSet m_create;
- [OptionalField(VersionAdded = 2)]
- private StringExpressionSet m_viewAcl;
- [OptionalField(VersionAdded = 2)]
- private StringExpressionSet m_changeAcl;
- private bool m_unrestricted;
-
-
- public RegistryPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- m_unrestricted = true;
- }
- else if (state == PermissionState.None)
- {
- m_unrestricted = false;
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public RegistryPermission( RegistryPermissionAccess access, String pathList )
- {
- SetPathList( access, pathList );
- }
-
- public void SetPathList( RegistryPermissionAccess access, String pathList )
- {
- VerifyAccess( access );
-
- m_unrestricted = false;
-
- if ((access & RegistryPermissionAccess.Read) != 0)
- m_read = null;
-
- if ((access & RegistryPermissionAccess.Write) != 0)
- m_write = null;
-
- if ((access & RegistryPermissionAccess.Create) != 0)
- m_create = null;
-
- AddPathList( access, pathList );
- }
-
- public void AddPathList( RegistryPermissionAccess access, String pathList )
- {
- AddPathList( access, AccessControlActions.None, pathList );
- }
-
- public void AddPathList( RegistryPermissionAccess access, AccessControlActions control, String pathList )
- {
- VerifyAccess( access );
-
- if ((access & RegistryPermissionAccess.Read) != 0)
- {
- if (m_read == null)
- m_read = new StringExpressionSet();
- m_read.AddExpressions( pathList );
- }
-
- if ((access & RegistryPermissionAccess.Write) != 0)
- {
- if (m_write == null)
- m_write = new StringExpressionSet();
- m_write.AddExpressions( pathList );
- }
-
- if ((access & RegistryPermissionAccess.Create) != 0)
- {
- if (m_create == null)
- m_create = new StringExpressionSet();
- m_create.AddExpressions( pathList );
- }
- }
-
- public String GetPathList( RegistryPermissionAccess access )
- {
- // SafeCritical: these are registry paths, which means we're not leaking file system information here
- VerifyAccess( access );
- ExclusiveAccess( access );
-
- if ((access & RegistryPermissionAccess.Read) != 0)
- {
- if (m_read == null)
- {
- return "";
- }
- return m_read.UnsafeToString();
- }
-
- if ((access & RegistryPermissionAccess.Write) != 0)
- {
- if (m_write == null)
- {
- return "";
- }
- return m_write.UnsafeToString();
- }
-
- if ((access & RegistryPermissionAccess.Create) != 0)
- {
- if (m_create == null)
- {
- return "";
- }
- return m_create.UnsafeToString();
- }
-
- /* not reached */
-
- return "";
- }
-
- private void VerifyAccess( RegistryPermissionAccess access )
- {
- if ((access & ~RegistryPermissionAccess.AllAccess) != 0)
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)access));
- }
-
- private void ExclusiveAccess( RegistryPermissionAccess access )
- {
- if (access == RegistryPermissionAccess.NoAccess)
- {
- throw new ArgumentException( Environment.GetResourceString("Arg_EnumNotSingleFlag") );
- }
-
- if (((int) access & ((int)access-1)) != 0)
- {
- throw new ArgumentException( Environment.GetResourceString("Arg_EnumNotSingleFlag") );
- }
- }
-
- private bool IsEmpty()
- {
- return (!m_unrestricted &&
- (this.m_read == null || this.m_read.IsEmpty()) &&
- (this.m_write == null || this.m_write.IsEmpty()) &&
- (this.m_create == null || this.m_create.IsEmpty()) &&
- (this.m_viewAcl == null || this.m_viewAcl.IsEmpty()) &&
- (this.m_changeAcl == null || this.m_changeAcl.IsEmpty()));
- }
-
- //------------------------------------------------------
- //
- // CODEACCESSPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public bool IsUnrestricted()
- {
- return m_unrestricted;
- }
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- return this.IsEmpty();
- }
-
- RegistryPermission operand = target as RegistryPermission;
- if (operand == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
-
- if (operand.IsUnrestricted())
- return true;
- else if (this.IsUnrestricted())
- return false;
- else
- return ((this.m_read == null || this.m_read.IsSubsetOf( operand.m_read )) &&
- (this.m_write == null || this.m_write.IsSubsetOf( operand.m_write )) &&
- (this.m_create == null || this.m_create.IsSubsetOf( operand.m_create )) &&
- (this.m_viewAcl == null || this.m_viewAcl.IsSubsetOf( operand.m_viewAcl )) &&
- (this.m_changeAcl == null || this.m_changeAcl.IsSubsetOf( operand.m_changeAcl )));
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- {
- return null;
- }
- else if (!VerifyType(target))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
- else if (this.IsUnrestricted())
- {
- return target.Copy();
- }
-
- RegistryPermission operand = (RegistryPermission)target;
- if (operand.IsUnrestricted())
- {
- return this.Copy();
- }
-
-
- StringExpressionSet intersectRead = this.m_read == null ? null : this.m_read.Intersect( operand.m_read );
- StringExpressionSet intersectWrite = this.m_write == null ? null : this.m_write.Intersect( operand.m_write );
- StringExpressionSet intersectCreate = this.m_create == null ? null : this.m_create.Intersect( operand.m_create );
- StringExpressionSet intersectViewAcl = this.m_viewAcl == null ? null : this.m_viewAcl.Intersect( operand.m_viewAcl );
- StringExpressionSet intersectChangeAcl = this.m_changeAcl == null ? null : this.m_changeAcl.Intersect( operand.m_changeAcl );
-
- if ((intersectRead == null || intersectRead.IsEmpty()) &&
- (intersectWrite == null || intersectWrite.IsEmpty()) &&
- (intersectCreate == null || intersectCreate.IsEmpty()) &&
- (intersectViewAcl == null || intersectViewAcl.IsEmpty()) &&
- (intersectChangeAcl == null || intersectChangeAcl.IsEmpty()))
- {
- return null;
- }
-
- RegistryPermission intersectPermission = new RegistryPermission(PermissionState.None);
- intersectPermission.m_unrestricted = false;
- intersectPermission.m_read = intersectRead;
- intersectPermission.m_write = intersectWrite;
- intersectPermission.m_create = intersectCreate;
- intersectPermission.m_viewAcl = intersectViewAcl;
- intersectPermission.m_changeAcl = intersectChangeAcl;
-
- return intersectPermission;
- }
-
- public override IPermission Union(IPermission other)
- {
- if (other == null)
- {
- return this.Copy();
- }
- else if (!VerifyType(other))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- RegistryPermission operand = (RegistryPermission)other;
-
- if (this.IsUnrestricted() || operand.IsUnrestricted())
- {
- return new RegistryPermission( PermissionState.Unrestricted );
- }
-
- StringExpressionSet unionRead = this.m_read == null ? operand.m_read : this.m_read.Union( operand.m_read );
- StringExpressionSet unionWrite = this.m_write == null ? operand.m_write : this.m_write.Union( operand.m_write );
- StringExpressionSet unionCreate = this.m_create == null ? operand.m_create : this.m_create.Union( operand.m_create );
- StringExpressionSet unionViewAcl = this.m_viewAcl == null ? operand.m_viewAcl : this.m_viewAcl.Union( operand.m_viewAcl );
- StringExpressionSet unionChangeAcl = this.m_changeAcl == null ? operand.m_changeAcl : this.m_changeAcl.Union( operand.m_changeAcl );
-
- if ((unionRead == null || unionRead.IsEmpty()) &&
- (unionWrite == null || unionWrite.IsEmpty()) &&
- (unionCreate == null || unionCreate.IsEmpty()) &&
- (unionViewAcl == null || unionViewAcl.IsEmpty()) &&
- (unionChangeAcl == null || unionChangeAcl.IsEmpty()))
- {
- return null;
- }
-
- RegistryPermission unionPermission = new RegistryPermission(PermissionState.None);
- unionPermission.m_unrestricted = false;
- unionPermission.m_read = unionRead;
- unionPermission.m_write = unionWrite;
- unionPermission.m_create = unionCreate;
- unionPermission.m_viewAcl = unionViewAcl;
- unionPermission.m_changeAcl = unionChangeAcl;
-
- return unionPermission;
- }
-
-
- public override IPermission Copy()
- {
- RegistryPermission copy = new RegistryPermission(PermissionState.None);
- if (this.m_unrestricted)
- {
- copy.m_unrestricted = true;
- }
- else
- {
- copy.m_unrestricted = false;
- if (this.m_read != null)
- {
- copy.m_read = this.m_read.Copy();
- }
- if (this.m_write != null)
- {
- copy.m_write = this.m_write.Copy();
- }
- if (this.m_create != null)
- {
- copy.m_create = this.m_create.Copy();
- }
- if (this.m_viewAcl != null)
- {
- copy.m_viewAcl = this.m_viewAcl.Copy();
- }
- if (this.m_changeAcl != null)
- {
- copy.m_changeAcl = this.m_changeAcl.Copy();
- }
- }
- return copy;
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return RegistryPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.RegistryPermissionIndex;
- }
-
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/SecurityPermission.cs b/src/mscorlib/src/System/Security/Permissions/SecurityPermission.cs
deleted file mode 100644
index cf3002989d..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/SecurityPermission.cs
+++ /dev/null
@@ -1,270 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using System.IO;
- using System.Security.Util;
- using System.Text;
- using System.Threading;
- using System.Runtime.Remoting;
- using System.Security;
- using System.Runtime.Serialization;
- using System.Reflection;
- using System.Globalization;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- [Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
- // The csharp compiler requires these types to be public, but they are not used elsewhere.
- [Obsolete("SecurityPermissionFlag is no longer accessible to application code.")]
- public enum SecurityPermissionFlag
- {
- NoFlags = 0x00,
- /* The following enum value is used in the EE (ASSERT_PERMISSION in security.cpp)
- * Should this value change, make corresponding changes there
- */
- Assertion = 0x01,
- UnmanagedCode = 0x02, // Update vm\Security.h if you change this !
- SkipVerification = 0x04, // Update vm\Security.h if you change this !
- Execution = 0x08,
- ControlThread = 0x10,
- ControlEvidence = 0x20,
- ControlPolicy = 0x40,
- SerializationFormatter = 0x80,
- ControlDomainPolicy = 0x100,
- ControlPrincipal = 0x200,
- ControlAppDomain = 0x400,
- RemotingConfiguration = 0x800,
- Infrastructure = 0x1000,
- BindingRedirects = 0x2000,
- AllFlags = 0x3fff,
- }
-
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- sealed public class SecurityPermission
- : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
- {
-#pragma warning disable 618
- private SecurityPermissionFlag m_flags;
-#pragma warning restore 618
-
- //
- // Public Constructors
- //
-
- public SecurityPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- SetUnrestricted( true );
- }
- else if (state == PermissionState.None)
- {
- SetUnrestricted( false );
- Reset();
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
-
- // SecurityPermission
- //
-#pragma warning disable 618
- public SecurityPermission(SecurityPermissionFlag flag)
-#pragma warning restore 618
- {
- VerifyAccess(flag);
-
- SetUnrestricted(false);
- m_flags = flag;
- }
-
-
- //------------------------------------------------------
- //
- // PRIVATE AND PROTECTED MODIFIERS
- //
- //------------------------------------------------------
-
-
- private void SetUnrestricted(bool unrestricted)
- {
- if (unrestricted)
- {
-#pragma warning disable 618
- m_flags = SecurityPermissionFlag.AllFlags;
-#pragma warning restore 618
- }
- }
-
- private void Reset()
- {
-#pragma warning disable 618
- m_flags = SecurityPermissionFlag.NoFlags;
-#pragma warning restore 618
- }
-
-
-#pragma warning disable 618
- public SecurityPermissionFlag Flags
-#pragma warning restore 618
- {
- set
- {
- VerifyAccess(value);
-
- m_flags = value;
- }
-
- get
- {
- return m_flags;
- }
- }
-
- //
- // CodeAccessPermission methods
- //
-
- /*
- * IPermission interface implementation
- */
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- return m_flags == 0;
- }
-
- SecurityPermission operand = target as SecurityPermission;
- if (operand != null)
- {
- return (((int)this.m_flags) & ~((int)operand.m_flags)) == 0;
- }
- else
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- }
-
- public override IPermission Union(IPermission target) {
- if (target == null) return(this.Copy());
- if (!VerifyType(target)) {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
- SecurityPermission sp_target = (SecurityPermission) target;
- if (sp_target.IsUnrestricted() || IsUnrestricted()) {
- return(new SecurityPermission(PermissionState.Unrestricted));
- }
-#pragma warning disable 618
- SecurityPermissionFlag flag_union = (SecurityPermissionFlag)(m_flags | sp_target.m_flags);
-#pragma warning restore 618
- return(new SecurityPermission(flag_union));
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- return null;
- else if (!VerifyType(target))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- SecurityPermission operand = (SecurityPermission)target;
-#pragma warning disable 618
- SecurityPermissionFlag isectFlags = SecurityPermissionFlag.NoFlags;
-#pragma warning restore 618
-
- if (operand.IsUnrestricted())
- {
- if (this.IsUnrestricted())
- return new SecurityPermission(PermissionState.Unrestricted);
- else
-#pragma warning disable 618
- isectFlags = (SecurityPermissionFlag)this.m_flags;
-#pragma warning restore 618
- }
- else if (this.IsUnrestricted())
- {
-#pragma warning disable 618
- isectFlags = (SecurityPermissionFlag)operand.m_flags;
-#pragma warning restore 618
- }
- else
- {
-#pragma warning disable 618
- isectFlags = (SecurityPermissionFlag)m_flags & (SecurityPermissionFlag)operand.m_flags;
-#pragma warning restore 618
- }
-
- if (isectFlags == 0)
- return null;
- else
- return new SecurityPermission(isectFlags);
- }
-
- public override IPermission Copy()
- {
- if (IsUnrestricted())
- return new SecurityPermission(PermissionState.Unrestricted);
- else
-#pragma warning disable 618
- return new SecurityPermission((SecurityPermissionFlag)m_flags);
-#pragma warning restore 618
- }
-
- public bool IsUnrestricted()
- {
-#pragma warning disable 618
- return m_flags == SecurityPermissionFlag.AllFlags;
-#pragma warning restore 618
- }
-
- private
-#pragma warning disable 618
- void VerifyAccess(SecurityPermissionFlag type)
-#pragma warning restore 618
- {
-#pragma warning disable 618
- if ((type & ~SecurityPermissionFlag.AllFlags) != 0)
-#pragma warning restore 618
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)type));
- Contract.EndContractBlock();
- }
-
- //
- // Object Overrides
- //
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return SecurityPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.SecurityPermissionIndex;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/SiteIdentityPermission.cs b/src/mscorlib/src/System/Security/Permissions/SiteIdentityPermission.cs
deleted file mode 100644
index ff38d515a1..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/SiteIdentityPermission.cs
+++ /dev/null
@@ -1,251 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using SiteString = System.Security.Util.SiteString;
- using System.Text;
- using System.Collections;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Runtime.Serialization;
-
- [System.Runtime.InteropServices.ComVisible(true)]
-#if FEATURE_SERIALIZATION
- [Serializable]
-#endif
- sealed public class SiteIdentityPermission : CodeAccessPermission, IBuiltInPermission
- {
- //------------------------------------------------------
- //
- // PRIVATE STATE DATA
- //
- //------------------------------------------------------
- [OptionalField(VersionAdded = 2)]
- private bool m_unrestricted;
- [OptionalField(VersionAdded = 2)]
- private SiteString[] m_sites;
-
- //------------------------------------------------------
- //
- // PUBLIC CONSTRUCTORS
- //
- //------------------------------------------------------
-
-
- public SiteIdentityPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- m_unrestricted = true;
- }
- else if (state == PermissionState.None)
- {
- m_unrestricted = false;
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public SiteIdentityPermission( String site )
- {
- Site = site;
- }
-
- //------------------------------------------------------
- //
- // PUBLIC ACCESSOR METHODS
- //
- //------------------------------------------------------
-
- public String Site
- {
- set
- {
- m_unrestricted = false;
- m_sites = new SiteString[1];
- m_sites[0] = new SiteString( value );
- }
-
- get
- {
- if(m_sites == null)
- return "";
- if(m_sites.Length == 1)
- return m_sites[0].ToString();
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AmbiguousIdentity"));
- }
- }
-
- //------------------------------------------------------
- //
- // PRIVATE AND PROTECTED HELPERS FOR ACCESSORS AND CONSTRUCTORS
- //
- //------------------------------------------------------
-
- //------------------------------------------------------
- //
- // CODEACCESSPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
- public override IPermission Copy()
- {
- SiteIdentityPermission perm = new SiteIdentityPermission( PermissionState.None );
- perm.m_unrestricted = this.m_unrestricted;
- if (this.m_sites != null)
- {
- perm.m_sites = new SiteString[this.m_sites.Length];
- int n;
- for(n = 0; n < this.m_sites.Length; n++)
- perm.m_sites[n] = (SiteString)this.m_sites[n].Copy();
- }
- return perm;
- }
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- if(m_unrestricted)
- return false;
- if(m_sites == null)
- return true;
- if(m_sites.Length == 0)
- return true;
- return false;
- }
- SiteIdentityPermission that = target as SiteIdentityPermission;
- if(that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- if(that.m_unrestricted)
- return true;
- if(m_unrestricted)
- return false;
- if(this.m_sites != null)
- {
- foreach(SiteString ssThis in this.m_sites)
- {
- bool bOK = false;
- if(that.m_sites != null)
- {
- foreach(SiteString ssThat in that.m_sites)
- {
- if(ssThis.IsSubsetOf(ssThat))
- {
- bOK = true;
- break;
- }
- }
- }
- if(!bOK)
- return false;
- }
- }
- return true;
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- return null;
- SiteIdentityPermission that = target as SiteIdentityPermission;
- if(that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- if(this.m_unrestricted && that.m_unrestricted)
- {
- SiteIdentityPermission res = new SiteIdentityPermission(PermissionState.None);
- res.m_unrestricted = true;
- return res;
- }
- if(this.m_unrestricted)
- return that.Copy();
- if(that.m_unrestricted)
- return this.Copy();
- if(this.m_sites == null || that.m_sites == null || this.m_sites.Length == 0 || that.m_sites.Length == 0)
- return null;
- List<SiteString> alSites = new List<SiteString>();
- foreach(SiteString ssThis in this.m_sites)
- {
- foreach(SiteString ssThat in that.m_sites)
- {
- SiteString ssInt = (SiteString)ssThis.Intersect(ssThat);
- if(ssInt != null)
- alSites.Add(ssInt);
- }
- }
- if(alSites.Count == 0)
- return null;
- SiteIdentityPermission result = new SiteIdentityPermission(PermissionState.None);
- result.m_sites = alSites.ToArray();
- return result;
- }
-
- public override IPermission Union(IPermission target)
- {
- if (target == null)
- {
- if((this.m_sites == null || this.m_sites.Length == 0) && !this.m_unrestricted)
- return null;
- return this.Copy();
- }
- SiteIdentityPermission that = target as SiteIdentityPermission;
- if(that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- if(this.m_unrestricted || that.m_unrestricted)
- {
- SiteIdentityPermission res = new SiteIdentityPermission(PermissionState.None);
- res.m_unrestricted = true;
- return res;
- }
- if (this.m_sites == null || this.m_sites.Length == 0)
- {
- if(that.m_sites == null || that.m_sites.Length == 0)
- return null;
- return that.Copy();
- }
- if(that.m_sites == null || that.m_sites.Length == 0)
- return this.Copy();
- List<SiteString> alSites = new List<SiteString>();
- foreach(SiteString ssThis in this.m_sites)
- alSites.Add(ssThis);
- foreach(SiteString ssThat in that.m_sites)
- {
- bool bDupe = false;
- foreach(SiteString ss in alSites)
- {
- if(ssThat.Equals(ss))
- {
- bDupe = true;
- break;
- }
- }
- if(!bDupe)
- alSites.Add(ssThat);
- }
- SiteIdentityPermission result = new SiteIdentityPermission(PermissionState.None);
- result.m_sites = alSites.ToArray();
- return result;
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return SiteIdentityPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.SiteIdentityPermissionIndex;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/StrongNameIdentityPermission.cs b/src/mscorlib/src/System/Security/Permissions/StrongNameIdentityPermission.cs
deleted file mode 100644
index f09d84de34..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/StrongNameIdentityPermission.cs
+++ /dev/null
@@ -1,401 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using System.Security.Util;
- using System.IO;
- using String = System.String;
- using Version = System.Version;
- using System.Security.Policy;
- using System.Collections;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Diagnostics.Contracts;
-
- // The only difference between this class and System.Security.Policy.StrongName is that this one
- // allows m_name to be null. We should merge this class with System.Security.Policy.StrongName
- [Serializable]
- sealed internal class StrongName2
- {
- public StrongNamePublicKeyBlob m_publicKeyBlob;
- public String m_name;
- public Version m_version;
-
- public StrongName2(StrongNamePublicKeyBlob publicKeyBlob, String name, Version version)
- {
- m_publicKeyBlob = publicKeyBlob;
- m_name = name;
- m_version = version;
- }
-
- public StrongName2 Copy()
- {
- return new StrongName2(m_publicKeyBlob, m_name, m_version);
- }
-
- public bool IsSubsetOf(StrongName2 target)
- {
- // This StrongName2 is a subset of the target if it's public key blob is null no matter what
- if (this.m_publicKeyBlob == null)
- return true;
-
- // Subsets are always false if the public key blobs do not match
- if (!this.m_publicKeyBlob.Equals( target.m_publicKeyBlob ))
- return false;
-
- // We use null in strings to represent the "Anything" state.
- // Therefore, the logic to detect an individual subset is:
- //
- // 1. If the this string is null ("Anything" is a subset of any other).
- // 2. If the this string and target string are the same (equality is sufficient for a subset).
- //
- // The logic is reversed here to discover things that are not subsets.
- if (this.m_name != null)
- {
- if (target.m_name == null || !System.Security.Policy.StrongName.CompareNames( target.m_name, this.m_name ))
- return false;
- }
-
- if ((Object) this.m_version != null)
- {
- if ((Object) target.m_version == null ||
- target.m_version.CompareTo( this.m_version ) != 0)
- {
- return false;
- }
- }
-
- return true;
- }
-
- public StrongName2 Intersect(StrongName2 target)
- {
- if (target.IsSubsetOf( this ))
- return target.Copy();
- else if (this.IsSubsetOf( target ))
- return this.Copy();
- else
- return null;
- }
-
- public bool Equals(StrongName2 target)
- {
- if (!target.IsSubsetOf(this))
- return false;
- if (!this.IsSubsetOf(target))
- return false;
- return true;
- }
- }
-
-
-
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- sealed public class StrongNameIdentityPermission : CodeAccessPermission, IBuiltInPermission
- {
- //------------------------------------------------------
- //
- // PRIVATE STATE DATA
- //
- //------------------------------------------------------
-
- private bool m_unrestricted;
- private StrongName2[] m_strongNames;
-
- //------------------------------------------------------
- //
- // PUBLIC CONSTRUCTORS
- //
- //------------------------------------------------------
-
-
- public StrongNameIdentityPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- m_unrestricted = true;
- }
- else if (state == PermissionState.None)
- {
- m_unrestricted = false;
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public StrongNameIdentityPermission( StrongNamePublicKeyBlob blob, String name, Version version )
- {
- if (blob == null)
- throw new ArgumentNullException( nameof(blob) );
- if (name != null && name.Equals( "" ))
- throw new ArgumentException( Environment.GetResourceString( "Argument_EmptyStrongName" ) );
- Contract.EndContractBlock();
- m_unrestricted = false;
- m_strongNames = new StrongName2[1];
- m_strongNames[0] = new StrongName2(blob, name, version);
- }
-
-
- //------------------------------------------------------
- //
- // PUBLIC ACCESSOR METHODS
- //
- //------------------------------------------------------
-
- public StrongNamePublicKeyBlob PublicKey
- {
- set
- {
- if (value == null)
- throw new ArgumentNullException( nameof(PublicKey) );
- Contract.EndContractBlock();
- m_unrestricted = false;
- if(m_strongNames != null && m_strongNames.Length == 1)
- m_strongNames[0].m_publicKeyBlob = value;
- else
- {
- m_strongNames = new StrongName2[1];
- m_strongNames[0] = new StrongName2(value, "", new Version());
- }
- }
-
- get
- {
- if(m_strongNames == null || m_strongNames.Length == 0)
- return null;
- if(m_strongNames.Length > 1)
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AmbiguousIdentity"));
- return m_strongNames[0].m_publicKeyBlob;
- }
- }
-
- public String Name
- {
- set
- {
- if (value != null && value.Length == 0)
- throw new ArgumentException( Environment.GetResourceString("Argument_EmptyName" ));
- Contract.EndContractBlock();
- m_unrestricted = false;
- if(m_strongNames != null && m_strongNames.Length == 1)
- m_strongNames[0].m_name = value;
- else
- {
- m_strongNames = new StrongName2[1];
- m_strongNames[0] = new StrongName2(null, value, new Version());
- }
- }
-
- get
- {
- if(m_strongNames == null || m_strongNames.Length == 0)
- return "";
- if(m_strongNames.Length > 1)
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AmbiguousIdentity"));
- return m_strongNames[0].m_name;
- }
- }
-
- public Version Version
- {
- set
- {
- m_unrestricted = false;
- if(m_strongNames != null && m_strongNames.Length == 1)
- m_strongNames[0].m_version = value;
- else
- {
- m_strongNames = new StrongName2[1];
- m_strongNames[0] = new StrongName2(null, "", value);
- }
- }
-
- get
- {
- if(m_strongNames == null || m_strongNames.Length == 0)
- return new Version();
- if(m_strongNames.Length > 1)
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AmbiguousIdentity"));
- return m_strongNames[0].m_version;
- }
- }
-
- //------------------------------------------------------
- //
- // PRIVATE AND PROTECTED HELPERS FOR ACCESSORS AND CONSTRUCTORS
- //
- //------------------------------------------------------
-
- //------------------------------------------------------
- //
- // CODEACCESSPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
-
- public override IPermission Copy()
- {
- StrongNameIdentityPermission perm = new StrongNameIdentityPermission(PermissionState.None);
- perm.m_unrestricted = this.m_unrestricted;
- if(this.m_strongNames != null)
- {
- perm.m_strongNames = new StrongName2[this.m_strongNames.Length];
- int n;
- for(n = 0; n < this.m_strongNames.Length; n++)
- perm.m_strongNames[n] = this.m_strongNames[n].Copy();
- }
- return perm;
- }
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- if(m_unrestricted)
- return false;
- if(m_strongNames == null)
- return true;
- if(m_strongNames.Length == 0)
- return true;
- return false;
- }
- StrongNameIdentityPermission that = target as StrongNameIdentityPermission;
- if(that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- if(that.m_unrestricted)
- return true;
- if(m_unrestricted)
- return false;
- if(this.m_strongNames != null)
- {
- foreach(StrongName2 snThis in m_strongNames)
- {
- bool bOK = false;
- if(that.m_strongNames != null)
- {
- foreach(StrongName2 snThat in that.m_strongNames)
- {
- if(snThis.IsSubsetOf(snThat))
- {
- bOK = true;
- break;
- }
- }
- }
- if(!bOK)
- return false;
- }
- }
- return true;
- }
-
-
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- return null;
- StrongNameIdentityPermission that = target as StrongNameIdentityPermission;
- if(that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- if(this.m_unrestricted && that.m_unrestricted)
- {
- StrongNameIdentityPermission res = new StrongNameIdentityPermission(PermissionState.None);
- res.m_unrestricted = true;
- return res;
- }
- if(this.m_unrestricted)
- return that.Copy();
- if(that.m_unrestricted)
- return this.Copy();
- if(this.m_strongNames == null || that.m_strongNames == null || this.m_strongNames.Length == 0 || that.m_strongNames.Length == 0)
- return null;
- List<StrongName2> alStrongNames = new List<StrongName2>();
- foreach(StrongName2 snThis in this.m_strongNames)
- {
- foreach(StrongName2 snThat in that.m_strongNames)
- {
- StrongName2 snInt = (StrongName2)snThis.Intersect(snThat);
- if(snInt != null)
- alStrongNames.Add(snInt);
- }
- }
- if(alStrongNames.Count == 0)
- return null;
- StrongNameIdentityPermission result = new StrongNameIdentityPermission(PermissionState.None);
- result.m_strongNames = alStrongNames.ToArray();
- return result;
- }
-
- public override IPermission Union(IPermission target)
- {
- if (target == null)
- {
- if((this.m_strongNames == null || this.m_strongNames.Length == 0) && !this.m_unrestricted)
- return null;
- return this.Copy();
- }
- StrongNameIdentityPermission that = target as StrongNameIdentityPermission;
- if(that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- if(this.m_unrestricted || that.m_unrestricted)
- {
- StrongNameIdentityPermission res = new StrongNameIdentityPermission(PermissionState.None);
- res.m_unrestricted = true;
- return res;
- }
- if (this.m_strongNames == null || this.m_strongNames.Length == 0)
- {
- if(that.m_strongNames == null || that.m_strongNames.Length == 0)
- return null;
- return that.Copy();
- }
- if(that.m_strongNames == null || that.m_strongNames.Length == 0)
- return this.Copy();
- List<StrongName2> alStrongNames = new List<StrongName2>();
- foreach(StrongName2 snThis in this.m_strongNames)
- alStrongNames.Add(snThis);
- foreach(StrongName2 snThat in that.m_strongNames)
- {
- bool bDupe = false;
- foreach(StrongName2 sn in alStrongNames)
- {
- if(snThat.Equals(sn))
- {
- bDupe = true;
- break;
- }
- }
- if(!bDupe)
- alStrongNames.Add(snThat);
- }
- StrongNameIdentityPermission result = new StrongNameIdentityPermission(PermissionState.None);
- result.m_strongNames = alStrongNames.ToArray();
- return result;
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return StrongNameIdentityPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.StrongNameIdentityPermissionIndex;
- }
-
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/StrongNamePublicKeyBlob.cs b/src/mscorlib/src/System/Security/Permissions/StrongNamePublicKeyBlob.cs
deleted file mode 100644
index 823eaba938..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/StrongNamePublicKeyBlob.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using System.Security.Util;
- using System.Diagnostics.Contracts;
-
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable] sealed public class StrongNamePublicKeyBlob
- {
- internal byte[] PublicKey;
-
- internal StrongNamePublicKeyBlob()
- {
- }
-
- public StrongNamePublicKeyBlob( byte[] publicKey )
- {
- if (publicKey == null)
- throw new ArgumentNullException( nameof(PublicKey) );
- Contract.EndContractBlock();
-
- this.PublicKey = new byte[publicKey.Length];
- Array.Copy( publicKey, 0, this.PublicKey, 0, publicKey.Length );
- }
-
- internal StrongNamePublicKeyBlob( String publicKey )
- {
- this.PublicKey = Hex.DecodeHexString( publicKey );
- }
-
- private static bool CompareArrays( byte[] first, byte[] second )
- {
- if (first.Length != second.Length)
- {
- return false;
- }
-
- int count = first.Length;
- for (int i = 0; i < count; ++i)
- {
- if (first[i] != second[i])
- return false;
- }
-
- return true;
- }
-
-
- internal bool Equals( StrongNamePublicKeyBlob blob )
- {
- if (blob == null)
- return false;
- else
- return CompareArrays( this.PublicKey, blob.PublicKey );
- }
-
- public override bool Equals( Object obj )
- {
- if (obj == null || !(obj is StrongNamePublicKeyBlob))
- return false;
-
- return this.Equals( (StrongNamePublicKeyBlob)obj );
- }
-
- static private int GetByteArrayHashCode( byte[] baData )
- {
- if (baData == null)
- return 0;
-
- int accumulator = 0;
-
- for (int i = 0; i < baData.Length; ++i)
- {
- accumulator = (accumulator << 8) ^ (int)baData[i] ^ (accumulator >> 24);
- }
-
- return accumulator;
- }
-
- public override int GetHashCode()
- {
- return GetByteArrayHashCode( PublicKey );
- }
-
- public override String ToString()
- {
- return Hex.EncodeHexString( PublicKey );
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/UIPermission.cs b/src/mscorlib/src/System/Security/Permissions/UIPermission.cs
deleted file mode 100644
index 4abe801e41..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/UIPermission.cs
+++ /dev/null
@@ -1,327 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using System.Security;
- using System.Security.Util;
- using System.IO;
- using System.Runtime.Serialization;
- using System.Reflection;
- using System.Collections;
- using System.Globalization;
- using System.Diagnostics.Contracts;
-
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum UIPermissionWindow
- {
- // No window use allowed at all.
- NoWindows = 0x0,
-
- // Only allow safe subwindow use (for embedded components).
- SafeSubWindows = 0x01,
-
- // Safe top-level window use only (see specification for details).
- SafeTopLevelWindows = 0x02,
-
- // All windows and all event may be used.
- AllWindows = 0x03,
-
- }
-
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum UIPermissionClipboard
- {
- // No clipboard access is allowed.
- NoClipboard = 0x0,
-
- // Paste from the same app domain only.
- OwnClipboard = 0x1,
-
- // Any clipboard access is allowed.
- AllClipboard = 0x2,
-
- }
-
-
-[System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- sealed public class UIPermission
- : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
- {
- //------------------------------------------------------
- //
- // PRIVATE STATE DATA
- //
- //------------------------------------------------------
-
- private UIPermissionWindow m_windowFlag;
- private UIPermissionClipboard m_clipboardFlag;
-
- //------------------------------------------------------
- //
- // PUBLIC CONSTRUCTORS
- //
- //------------------------------------------------------
-
- public UIPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- SetUnrestricted( true );
- }
- else if (state == PermissionState.None)
- {
- SetUnrestricted( false );
- Reset();
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public UIPermission(UIPermissionWindow windowFlag, UIPermissionClipboard clipboardFlag )
- {
- VerifyWindowFlag( windowFlag );
- VerifyClipboardFlag( clipboardFlag );
-
- m_windowFlag = windowFlag;
- m_clipboardFlag = clipboardFlag;
- }
-
- public UIPermission(UIPermissionWindow windowFlag )
- {
- VerifyWindowFlag( windowFlag );
-
- m_windowFlag = windowFlag;
- }
-
- public UIPermission(UIPermissionClipboard clipboardFlag )
- {
- VerifyClipboardFlag( clipboardFlag );
-
- m_clipboardFlag = clipboardFlag;
- }
-
-
- //------------------------------------------------------
- //
- // PUBLIC ACCESSOR METHODS
- //
- //------------------------------------------------------
-
- public UIPermissionWindow Window
- {
- set
- {
- VerifyWindowFlag(value);
-
- m_windowFlag = value;
- }
-
- get
- {
- return m_windowFlag;
- }
- }
-
- public UIPermissionClipboard Clipboard
- {
- set
- {
- VerifyClipboardFlag(value);
-
- m_clipboardFlag = value;
- }
-
- get
- {
- return m_clipboardFlag;
- }
- }
-
- //------------------------------------------------------
- //
- // PRIVATE AND PROTECTED HELPERS FOR ACCESSORS AND CONSTRUCTORS
- //
- //------------------------------------------------------
-
- private static void VerifyWindowFlag(UIPermissionWindow flag)
- {
- if (flag < UIPermissionWindow.NoWindows || flag > UIPermissionWindow.AllWindows)
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)flag));
- }
- Contract.EndContractBlock();
- }
-
- private static void VerifyClipboardFlag(UIPermissionClipboard flag)
- {
- if (flag < UIPermissionClipboard.NoClipboard || flag > UIPermissionClipboard.AllClipboard)
- {
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)flag));
- }
- Contract.EndContractBlock();
- }
-
- private void Reset()
- {
- m_windowFlag = UIPermissionWindow.NoWindows;
- m_clipboardFlag = UIPermissionClipboard.NoClipboard;
- }
-
- private void SetUnrestricted( bool unrestricted )
- {
- if (unrestricted)
- {
- m_windowFlag = UIPermissionWindow.AllWindows;
- m_clipboardFlag = UIPermissionClipboard.AllClipboard;
- }
- }
-
-#if false
- //------------------------------------------------------
- //
- // OBJECT METHOD OVERRIDES
- //
- //------------------------------------------------------
- public String ToString()
- {
- #if _DEBUG
- StringBuilder sb = new StringBuilder();
- sb.Append("UIPermission(");
- if (IsUnrestricted())
- {
- sb.Append("Unrestricted");
- }
- else
- {
- sb.Append(m_stateNameTableWindow[m_windowFlag]);
- sb.Append(", ");
- sb.Append(m_stateNameTableClipboard[m_clipboardFlag]);
- }
-
- sb.Append(")");
- return sb.ToString();
- #else
- return super.ToString();
- #endif
- }
-#endif
-
- //------------------------------------------------------
- //
- // CODEACCESSPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public bool IsUnrestricted()
- {
- return m_windowFlag == UIPermissionWindow.AllWindows && m_clipboardFlag == UIPermissionClipboard.AllClipboard;
- }
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- // Only safe subset if this is empty
- return m_windowFlag == UIPermissionWindow.NoWindows && m_clipboardFlag == UIPermissionClipboard.NoClipboard;
- }
-
- try
- {
- UIPermission operand = (UIPermission)target;
- if (operand.IsUnrestricted())
- return true;
- else if (this.IsUnrestricted())
- return false;
- else
- return this.m_windowFlag <= operand.m_windowFlag && this.m_clipboardFlag <= operand.m_clipboardFlag;
- }
- catch (InvalidCastException)
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- {
- return null;
- }
- else if (!VerifyType(target))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- UIPermission operand = (UIPermission)target;
- UIPermissionWindow isectWindowFlags = m_windowFlag < operand.m_windowFlag ? m_windowFlag : operand.m_windowFlag;
- UIPermissionClipboard isectClipboardFlags = m_clipboardFlag < operand.m_clipboardFlag ? m_clipboardFlag : operand.m_clipboardFlag;
- if (isectWindowFlags == UIPermissionWindow.NoWindows && isectClipboardFlags == UIPermissionClipboard.NoClipboard)
- return null;
- else
- return new UIPermission(isectWindowFlags, isectClipboardFlags);
- }
-
- public override IPermission Union(IPermission target)
- {
- if (target == null)
- {
- return this.Copy();
- }
- else if (!VerifyType(target))
- {
- throw new
- ArgumentException(
- Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
- );
- }
-
- UIPermission operand = (UIPermission)target;
- UIPermissionWindow isectWindowFlags = m_windowFlag > operand.m_windowFlag ? m_windowFlag : operand.m_windowFlag;
- UIPermissionClipboard isectClipboardFlags = m_clipboardFlag > operand.m_clipboardFlag ? m_clipboardFlag : operand.m_clipboardFlag;
- if (isectWindowFlags == UIPermissionWindow.NoWindows && isectClipboardFlags == UIPermissionClipboard.NoClipboard)
- return null;
- else
- return new UIPermission(isectWindowFlags, isectClipboardFlags);
- }
-
- public override IPermission Copy()
- {
- return new UIPermission(this.m_windowFlag, this.m_clipboardFlag);
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return UIPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.UIPermissionIndex;
- }
-
- }
-
-
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/URLIdentityPermission.cs b/src/mscorlib/src/System/Security/Permissions/URLIdentityPermission.cs
deleted file mode 100644
index 0883bf8979..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/URLIdentityPermission.cs
+++ /dev/null
@@ -1,284 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions
-{
- using System;
- using System.Security.Util;
- using System.IO;
- using System.Text;
- using System.Collections;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Runtime.Serialization;
- using System.Diagnostics.Contracts;
-
- [System.Runtime.InteropServices.ComVisible(true)]
-#if FEATURE_SERIALIZATION
- [Serializable]
-#endif
- sealed public class UrlIdentityPermission : CodeAccessPermission, IBuiltInPermission
- {
- //------------------------------------------------------
- //
- // PRIVATE STATE DATA
- //
- //------------------------------------------------------
-
- [OptionalField(VersionAdded = 2)]
- private bool m_unrestricted;
- [OptionalField(VersionAdded = 2)]
- private URLString[] m_urls;
-
- //------------------------------------------------------
- //
- // PUBLIC CONSTRUCTORS
- //
- //------------------------------------------------------
-
-
- public UrlIdentityPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- m_unrestricted = true;
- }
- else if (state == PermissionState.None)
- {
- m_unrestricted = false;
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public UrlIdentityPermission( String site )
- {
- if (site == null)
- throw new ArgumentNullException( nameof(site) );
- Contract.EndContractBlock();
- Url = site;
- }
-
- internal UrlIdentityPermission( URLString site )
- {
- m_unrestricted = false;
- m_urls = new URLString[1];
- m_urls[0] = site;
- }
-
- // Internal function to append all the urls in m_urls to the input originList
- internal void AppendOrigin(ArrayList originList)
- {
- if (m_urls == null)
- originList.Add("");
- else
- {
- int n;
- for(n = 0; n < this.m_urls.Length; n++)
- originList.Add(m_urls[n].ToString());
- }
- }
-
- //------------------------------------------------------
- //
- // PUBLIC ACCESSOR METHODS
- //
- //------------------------------------------------------
-
- public String Url
- {
- set
- {
- m_unrestricted = false;
- if(value == null || value.Length == 0)
- m_urls = null;
- else
- {
- m_urls = new URLString[1];
- m_urls[0] = new URLString( value );
- }
- }
-
- get
- {
- if(m_urls == null)
- return "";
- if(m_urls.Length == 1)
- return m_urls[0].ToString();
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AmbiguousIdentity"));
- }
- }
-
- //------------------------------------------------------
- //
- // PRIVATE AND PROTECTED HELPERS FOR ACCESSORS AND CONSTRUCTORS
- //
- //------------------------------------------------------
-
- //------------------------------------------------------
- //
- // CODEACCESSPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
-
- public override IPermission Copy()
- {
- UrlIdentityPermission perm = new UrlIdentityPermission( PermissionState.None );
- perm.m_unrestricted = this.m_unrestricted;
- if (this.m_urls != null)
- {
- perm.m_urls = new URLString[this.m_urls.Length];
- int n;
- for(n = 0; n < this.m_urls.Length; n++)
- perm.m_urls[n] = (URLString)this.m_urls[n].Copy();
- }
- return perm;
- }
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- {
- if(m_unrestricted)
- return false;
- if(m_urls == null)
- return true;
- if(m_urls.Length == 0)
- return true;
- return false;
- }
- UrlIdentityPermission that = target as UrlIdentityPermission;
- if(that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- if(that.m_unrestricted)
- return true;
- if(m_unrestricted)
- return false;
- if(this.m_urls != null)
- {
- foreach(URLString usThis in this.m_urls)
- {
- bool bOK = false;
- if(that.m_urls != null)
- {
- foreach(URLString usThat in that.m_urls)
- {
- if(usThis.IsSubsetOf(usThat))
- {
- bOK = true;
- break;
- }
- }
- }
- if(!bOK)
- return false;
- }
- }
- return true;
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- return null;
- UrlIdentityPermission that = target as UrlIdentityPermission;
- if(that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- if(this.m_unrestricted && that.m_unrestricted)
- {
- UrlIdentityPermission res = new UrlIdentityPermission(PermissionState.None);
- res.m_unrestricted = true;
- return res;
- }
- if(this.m_unrestricted)
- return that.Copy();
- if(that.m_unrestricted)
- return this.Copy();
- if(this.m_urls == null || that.m_urls == null || this.m_urls.Length == 0 || that.m_urls.Length == 0)
- return null;
- List<URLString> alUrls = new List<URLString>();
- foreach(URLString usThis in this.m_urls)
- {
- foreach(URLString usThat in that.m_urls)
- {
- URLString usInt = (URLString)usThis.Intersect(usThat);
- if(usInt != null)
- alUrls.Add(usInt);
- }
- }
- if(alUrls.Count == 0)
- return null;
- UrlIdentityPermission result = new UrlIdentityPermission(PermissionState.None);
- result.m_urls = alUrls.ToArray();
- return result;
- }
-
- public override IPermission Union(IPermission target)
- {
- if (target == null)
- {
- if((this.m_urls == null || this.m_urls.Length == 0) && !this.m_unrestricted)
- return null;
- return this.Copy();
- }
- UrlIdentityPermission that = target as UrlIdentityPermission;
- if(that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- if(this.m_unrestricted || that.m_unrestricted)
- {
- UrlIdentityPermission res = new UrlIdentityPermission(PermissionState.None);
- res.m_unrestricted = true;
- return res;
- }
- if (this.m_urls == null || this.m_urls.Length == 0)
- {
- if(that.m_urls == null || that.m_urls.Length == 0)
- return null;
- return that.Copy();
- }
- if(that.m_urls == null || that.m_urls.Length == 0)
- return this.Copy();
- List<URLString> alUrls = new List<URLString>();
- foreach(URLString usThis in this.m_urls)
- alUrls.Add(usThis);
- foreach(URLString usThat in that.m_urls)
- {
- bool bDupe = false;
- foreach(URLString us in alUrls)
- {
- if(usThat.Equals(us))
- {
- bDupe = true;
- break;
- }
- }
- if(!bDupe)
- alUrls.Add(usThat);
- }
- UrlIdentityPermission result = new UrlIdentityPermission(PermissionState.None);
- result.m_urls = alUrls.ToArray();
- return result;
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return UrlIdentityPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.UrlIdentityPermissionIndex;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/ZoneIdentityPermission.cs b/src/mscorlib/src/System/Security/Permissions/ZoneIdentityPermission.cs
deleted file mode 100644
index 9023c7eece..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/ZoneIdentityPermission.cs
+++ /dev/null
@@ -1,208 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-
-namespace System.Security.Permissions
-{
- using System;
- using System.Globalization;
- using System.Runtime.Serialization;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics.Contracts;
-
- [System.Runtime.InteropServices.ComVisible(true)]
-#if FEATURE_SERIALIZATION
- [Serializable]
-#endif
- sealed public class ZoneIdentityPermission : CodeAccessPermission, IBuiltInPermission
- {
- //------------------------------------------------------
- //
- // PRIVATE STATE DATA
- //
- //------------------------------------------------------
-
- // Zone Enum Flag
- // ----- ----- -----
- // NoZone -1 0x00
- // MyComputer 0 0x01 (1 << 0)
- // Intranet 1 0x02 (1 << 1)
- // Trusted 2 0x04 (1 << 2)
- // Internet 3 0x08 (1 << 3)
- // Untrusted 4 0x10 (1 << 4)
-
- private const uint AllZones = 0x1f;
- [OptionalField(VersionAdded = 2)]
- private uint m_zones;
-
- //------------------------------------------------------
- //
- // PUBLIC CONSTRUCTORS
- //
- //------------------------------------------------------
-
- public ZoneIdentityPermission(PermissionState state)
- {
- if (state == PermissionState.Unrestricted)
- {
- m_zones = AllZones;
- }
- else if (state == PermissionState.None)
- {
- m_zones = 0;
- }
- else
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- }
- }
-
- public ZoneIdentityPermission( SecurityZone zone )
- {
- this.SecurityZone = zone;
- }
-
- internal ZoneIdentityPermission( uint zones )
- {
- m_zones = (zones & AllZones);
- }
-
- // Internal function to append all the Zone in this permission to the input ArrayList
- internal void AppendZones(ArrayList zoneList)
- {
- int nEnum = 0;
- uint nFlag;
- for(nFlag = 1; nFlag < AllZones; nFlag <<= 1)
- {
- if((m_zones & nFlag) != 0)
- {
- zoneList.Add((SecurityZone)nEnum);
- }
- nEnum++;
- }
- }
-
- //------------------------------------------------------
- //
- // PUBLIC ACCESSOR METHODS
- //
- //------------------------------------------------------
-
- public SecurityZone SecurityZone
- {
- set
- {
- VerifyZone( value );
- if(value == SecurityZone.NoZone)
- m_zones = 0;
- else
- m_zones = (uint)1 << (int)value;
- }
-
- get
- {
- SecurityZone z = SecurityZone.NoZone;
- int nEnum = 0;
- uint nFlag;
- for(nFlag = 1; nFlag < AllZones; nFlag <<= 1)
- {
- if((m_zones & nFlag) != 0)
- {
- if(z == SecurityZone.NoZone)
- z = (SecurityZone)nEnum;
- else
- return SecurityZone.NoZone;
- }
- nEnum++;
- }
- return z;
- }
- }
-
- //------------------------------------------------------
- //
- // PRIVATE AND PROTECTED HELPERS FOR ACCESSORS AND CONSTRUCTORS
- //
- //------------------------------------------------------
-
- private static void VerifyZone( SecurityZone zone )
- {
- if (zone < SecurityZone.NoZone || zone > SecurityZone.Untrusted)
- {
- throw new ArgumentException( Environment.GetResourceString("Argument_IllegalZone") );
- }
- Contract.EndContractBlock();
- }
-
-
- //------------------------------------------------------
- //
- // CODEACCESSPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
- //------------------------------------------------------
- //
- // IPERMISSION IMPLEMENTATION
- //
- //------------------------------------------------------
-
-
- public override IPermission Copy()
- {
- return new ZoneIdentityPermission(this.m_zones);
- }
-
- public override bool IsSubsetOf(IPermission target)
- {
- if (target == null)
- return this.m_zones == 0;
-
- ZoneIdentityPermission that = target as ZoneIdentityPermission;
- if (that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- return (this.m_zones & that.m_zones) == this.m_zones;
- }
-
- public override IPermission Intersect(IPermission target)
- {
- if (target == null)
- return null;
-
- ZoneIdentityPermission that = target as ZoneIdentityPermission;
- if (that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- uint newZones = this.m_zones & that.m_zones;
- if(newZones == 0)
- return null;
- return new ZoneIdentityPermission(newZones);
- }
-
- public override IPermission Union(IPermission target)
- {
- if (target == null)
- return this.m_zones != 0 ? this.Copy() : null;
-
- ZoneIdentityPermission that = target as ZoneIdentityPermission;
- if (that == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
- return new ZoneIdentityPermission(this.m_zones | that.m_zones);
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex()
- {
- return ZoneIdentityPermission.GetTokenIndex();
- }
-
- internal static int GetTokenIndex()
- {
- return BuiltInPermissionIndex.ZoneIdentityPermissionIndex;
- }
-
- }
-}
diff --git a/src/mscorlib/src/System/Security/Permissions/keycontainerpermission.cs b/src/mscorlib/src/System/Security/Permissions/keycontainerpermission.cs
deleted file mode 100644
index d4f1c273c6..0000000000
--- a/src/mscorlib/src/System/Security/Permissions/keycontainerpermission.cs
+++ /dev/null
@@ -1,634 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Permissions {
- using System;
- using System.Collections;
- using System.Collections.Generic;
-#if FEATURE_CRYPTO
- using System.Security.Cryptography;
-#endif
- using System.Security.Util;
- using System.Globalization;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
-[Serializable]
- [Flags]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum KeyContainerPermissionFlags {
- NoFlags = 0x0000,
-
- Create = 0x0001,
- Open = 0x0002,
- Delete = 0x0004,
-
- Import = 0x0010,
- Export = 0x0020,
-
- Sign = 0x0100,
- Decrypt = 0x0200,
-
- ViewAcl = 0x1000,
- ChangeAcl = 0x2000,
-
- AllFlags = 0x3337
- }
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class KeyContainerPermissionAccessEntry {
- private string m_keyStore;
- private string m_providerName;
- private int m_providerType;
- private string m_keyContainerName;
- private int m_keySpec;
- private KeyContainerPermissionFlags m_flags;
-
- internal KeyContainerPermissionAccessEntry(KeyContainerPermissionAccessEntry accessEntry) :
- this (accessEntry.KeyStore, accessEntry.ProviderName, accessEntry.ProviderType, accessEntry.KeyContainerName,
- accessEntry.KeySpec, accessEntry.Flags) {
- }
-
- public KeyContainerPermissionAccessEntry(string keyContainerName, KeyContainerPermissionFlags flags) :
- this (null, null, -1, keyContainerName, -1, flags) {
- }
-
-#if FEATURE_CRYPTO
- public KeyContainerPermissionAccessEntry(CspParameters parameters, KeyContainerPermissionFlags flags) :
- this((parameters.Flags & CspProviderFlags.UseMachineKeyStore) == CspProviderFlags.UseMachineKeyStore ? "Machine" : "User",
- parameters.ProviderName,
- parameters.ProviderType,
- parameters.KeyContainerName,
- parameters.KeyNumber,
- flags) {
- }
-#endif
-
- public KeyContainerPermissionAccessEntry(string keyStore, string providerName, int providerType,
- string keyContainerName, int keySpec, KeyContainerPermissionFlags flags) {
- m_providerName = (providerName == null ? "*" : providerName);
- m_providerType = providerType;
- m_keyContainerName = (keyContainerName == null ? "*" : keyContainerName);
- m_keySpec = keySpec;
- KeyStore = keyStore;
- Flags = flags;
- }
-
- public string KeyStore {
- get {
- return m_keyStore;
- }
- set {
- // Unrestricted entries are invalid; they should not be allowed.
- if (IsUnrestrictedEntry(value, this.ProviderName, this.ProviderType, this.KeyContainerName, this.KeySpec))
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidAccessEntry"));
-
- if (value == null) {
- m_keyStore = "*";
- } else {
- if (value != "User" && value != "Machine" && value != "*")
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidKeyStore", value), nameof(value));
- m_keyStore = value;
- }
- }
- }
-
- public string ProviderName {
- get {
- return m_providerName;
- }
- set {
- // Unrestricted entries are invalid; they should not be allowed.
- if (IsUnrestrictedEntry(this.KeyStore, value, this.ProviderType, this.KeyContainerName, this.KeySpec))
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidAccessEntry"));
-
- if (value == null)
- m_providerName = "*";
- else
- m_providerName = value;
- }
- }
-
- public int ProviderType {
- get {
- return m_providerType;
- }
- set {
- // Unrestricted entries are invalid; they should not be allowed.
- if (IsUnrestrictedEntry(this.KeyStore, this.ProviderName, value, this.KeyContainerName, this.KeySpec))
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidAccessEntry"));
-
- m_providerType = value;
- }
- }
-
- public string KeyContainerName {
- get {
- return m_keyContainerName;
- }
- set {
- // Unrestricted entries are invalid; they should not be allowed.
- if (IsUnrestrictedEntry(this.KeyStore, this.ProviderName, this.ProviderType, value, this.KeySpec))
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidAccessEntry"));
-
- if (value == null)
- m_keyContainerName = "*";
- else
- m_keyContainerName = value;
- }
- }
-
- public int KeySpec {
- get {
- return m_keySpec;
- }
- set {
- // Unrestricted entries are invalid; they should not be allowed.
- if (IsUnrestrictedEntry(this.KeyStore, this.ProviderName, this.ProviderType, this.KeyContainerName, value))
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidAccessEntry"));
-
- m_keySpec = value;
- }
- }
-
- public KeyContainerPermissionFlags Flags {
- get {
- return m_flags;
- }
- set {
- KeyContainerPermission.VerifyFlags(value);
- m_flags = value;
- }
- }
-
- public override bool Equals (Object o) {
- KeyContainerPermissionAccessEntry accessEntry = o as KeyContainerPermissionAccessEntry;
- if (accessEntry == null)
- return false;
-
- if (accessEntry.m_keyStore != m_keyStore) return false;
- if (accessEntry.m_providerName != m_providerName) return false;
- if (accessEntry.m_providerType != m_providerType) return false;
- if (accessEntry.m_keyContainerName != m_keyContainerName) return false;
- if (accessEntry.m_keySpec != m_keySpec) return false;
-
- return true;
- }
-
- public override int GetHashCode () {
- int hash = 0;
-
- hash |= (this.m_keyStore.GetHashCode() & 0x000000FF) << 24;
- hash |= (this.m_providerName.GetHashCode() & 0x000000FF) << 16;
- hash |= (this.m_providerType & 0x0000000F) << 12;
- hash |= (this.m_keyContainerName.GetHashCode() & 0x000000FF) << 4;
- hash |= (this.m_keySpec & 0x0000000F);
-
- return hash;
- }
-
- internal bool IsSubsetOf (KeyContainerPermissionAccessEntry target) {
- if (target.m_keyStore != "*" && this.m_keyStore != target.m_keyStore)
- return false;
- if (target.m_providerName != "*" && this.m_providerName != target.m_providerName)
- return false;
- if (target.m_providerType != -1 && this.m_providerType != target.m_providerType)
- return false;
- if (target.m_keyContainerName != "*" && this.m_keyContainerName != target.m_keyContainerName)
- return false;
- if (target.m_keySpec != -1 && this.m_keySpec != target.m_keySpec)
- return false;
-
- return true;
- }
-
- internal static bool IsUnrestrictedEntry (string keyStore, string providerName, int providerType,
- string keyContainerName, int keySpec) {
- if (keyStore != "*" && keyStore != null) return false;
- if (providerName != "*" && providerName != null) return false;
- if (providerType != -1) return false;
- if (keyContainerName != "*" && keyContainerName != null) return false;
- if (keySpec != -1) return false;
-
- return true;
- }
- }
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class KeyContainerPermissionAccessEntryCollection : ICollection {
- private ArrayList m_list;
- private KeyContainerPermissionFlags m_globalFlags;
-
- private KeyContainerPermissionAccessEntryCollection () {}
- internal KeyContainerPermissionAccessEntryCollection (KeyContainerPermissionFlags globalFlags) {
- m_list = new ArrayList();
- m_globalFlags = globalFlags;
- }
-
- public KeyContainerPermissionAccessEntry this[int index] {
- get {
- if (index < 0)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumNotStarted"));
- if (index >= Count)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- Contract.EndContractBlock();
-
- return (KeyContainerPermissionAccessEntry)m_list[index];
- }
- }
-
- public int Count {
- get {
- return m_list.Count;
- }
- }
-
- public int Add (KeyContainerPermissionAccessEntry accessEntry) {
- if (accessEntry == null)
- throw new ArgumentNullException(nameof(accessEntry));
- Contract.EndContractBlock();
-
- int index = m_list.IndexOf(accessEntry);
- if (index == -1) {
- if (accessEntry.Flags != m_globalFlags) {
- return m_list.Add(accessEntry);
- }
- else
- return -1;
- } else {
- // We pick up the intersection of the 2 flags. This is the secure choice
- // so we are opting for it.
- ((KeyContainerPermissionAccessEntry)m_list[index]).Flags &= accessEntry.Flags;
- return index;
- }
- }
-
- public void Clear () {
- m_list.Clear();
- }
-
- public int IndexOf (KeyContainerPermissionAccessEntry accessEntry) {
- return m_list.IndexOf(accessEntry);
- }
-
- public void Remove (KeyContainerPermissionAccessEntry accessEntry) {
- if (accessEntry == null)
- throw new ArgumentNullException(nameof(accessEntry));
- Contract.EndContractBlock();
- m_list.Remove(accessEntry);
- }
-
- public KeyContainerPermissionAccessEntryEnumerator GetEnumerator () {
- return new KeyContainerPermissionAccessEntryEnumerator(this);
- }
-
- /// <internalonly/>
- IEnumerator IEnumerable.GetEnumerator () {
- return new KeyContainerPermissionAccessEntryEnumerator(this);
- }
-
- /// <internalonly/>
- void ICollection.CopyTo (Array array, int index) {
- if (array == null)
- throw new ArgumentNullException(nameof(array));
- if (array.Rank != 1)
- throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
- if (index < 0 || index >= array.Length)
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_Index"));
- if (index + this.Count > array.Length)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
- Contract.EndContractBlock();
-
- for (int i=0; i < this.Count; i++) {
- array.SetValue(this[i], index);
- index++;
- }
- }
-
- public void CopyTo (KeyContainerPermissionAccessEntry[] array, int index) {
- ((ICollection)this).CopyTo(array, index);
- }
-
- public bool IsSynchronized {
- get {
- return false;
- }
- }
-
- public Object SyncRoot {
- get {
- return this;
- }
- }
- }
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class KeyContainerPermissionAccessEntryEnumerator : IEnumerator {
- private KeyContainerPermissionAccessEntryCollection m_entries;
- private int m_current;
-
- private KeyContainerPermissionAccessEntryEnumerator () {}
- internal KeyContainerPermissionAccessEntryEnumerator (KeyContainerPermissionAccessEntryCollection entries) {
- m_entries = entries;
- m_current = -1;
- }
-
- public KeyContainerPermissionAccessEntry Current {
- get {
- return m_entries[m_current];
- }
- }
-
- /// <internalonly/>
- Object IEnumerator.Current {
- get {
- return (Object) m_entries[m_current];
- }
- }
-
- public bool MoveNext() {
- if (m_current == ((int) m_entries.Count - 1))
- return false;
- m_current++;
- return true;
- }
-
- public void Reset() {
- m_current = -1;
- }
- }
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class KeyContainerPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission {
- private KeyContainerPermissionFlags m_flags;
- private KeyContainerPermissionAccessEntryCollection m_accessEntries;
-
- public KeyContainerPermission (PermissionState state) {
- if (state == PermissionState.Unrestricted)
- m_flags = KeyContainerPermissionFlags.AllFlags;
- else if (state == PermissionState.None)
- m_flags = KeyContainerPermissionFlags.NoFlags;
- else
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
- m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
- }
-
- public KeyContainerPermission (KeyContainerPermissionFlags flags) {
- VerifyFlags(flags);
- m_flags = flags;
- m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
- }
-
- public KeyContainerPermission (KeyContainerPermissionFlags flags, KeyContainerPermissionAccessEntry[] accessList) {
- if (accessList == null)
- throw new ArgumentNullException(nameof(accessList));
- Contract.EndContractBlock();
-
- VerifyFlags(flags);
- m_flags = flags;
- m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
- for (int index = 0; index < accessList.Length; index++) {
- m_accessEntries.Add(accessList[index]);
- }
- }
-
- public KeyContainerPermissionFlags Flags {
- get {
- return m_flags;
- }
- }
-
- public KeyContainerPermissionAccessEntryCollection AccessEntries {
- get {
- return m_accessEntries;
- }
- }
-
- public bool IsUnrestricted () {
- if (m_flags != KeyContainerPermissionFlags.AllFlags)
- return false;
-
- foreach (KeyContainerPermissionAccessEntry accessEntry in AccessEntries) {
- if ((accessEntry.Flags & KeyContainerPermissionFlags.AllFlags) != KeyContainerPermissionFlags.AllFlags)
- return false;
- }
-
- return true;
- }
-
- private bool IsEmpty () {
- if (this.Flags == KeyContainerPermissionFlags.NoFlags) {
- foreach (KeyContainerPermissionAccessEntry accessEntry in AccessEntries) {
- if (accessEntry.Flags != KeyContainerPermissionFlags.NoFlags)
- return false;
- }
- return true;
- }
- return false;
- }
-
- //
- // IPermission implementation
- //
-
- public override bool IsSubsetOf (IPermission target) {
- if (target == null)
- return IsEmpty();
-
- if (!VerifyType(target))
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
-
- KeyContainerPermission operand = (KeyContainerPermission) target;
-
- // since there are containers that are neither in the access list of the source, nor in the
- // access list of the target, the source flags must be a subset of the target flags.
- if ((this.m_flags & operand.m_flags) != this.m_flags)
- return false;
-
- // Any entry in the source should have "applicable" flags in the destination that actually
- // are less restrictive than the flags in the source.
-
- foreach (KeyContainerPermissionAccessEntry accessEntry in AccessEntries) {
- KeyContainerPermissionFlags targetFlags = GetApplicableFlags(accessEntry, operand);
- if ((accessEntry.Flags & targetFlags) != accessEntry.Flags)
- return false;
- }
-
- // Any entry in the target should have "applicable" flags in the source that actually
- // are more restrictive than the flags in the target.
-
- foreach (KeyContainerPermissionAccessEntry accessEntry in operand.AccessEntries) {
- KeyContainerPermissionFlags sourceFlags = GetApplicableFlags(accessEntry, this);
- if ((sourceFlags & accessEntry.Flags) != sourceFlags)
- return false;
- }
-
- return true;
- }
-
- public override IPermission Intersect (IPermission target) {
- if (target == null)
- return null;
-
- if (!VerifyType(target))
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
-
- KeyContainerPermission operand = (KeyContainerPermission) target;
- if (this.IsEmpty() || operand.IsEmpty())
- return null;
-
- KeyContainerPermissionFlags flags_intersect = operand.m_flags & this.m_flags;
- KeyContainerPermission cp = new KeyContainerPermission(flags_intersect);
- foreach (KeyContainerPermissionAccessEntry accessEntry in AccessEntries) {
- cp.AddAccessEntryAndIntersect(accessEntry, operand);
- }
- foreach (KeyContainerPermissionAccessEntry accessEntry in operand.AccessEntries) {
- cp.AddAccessEntryAndIntersect(accessEntry, this);
- }
- return cp.IsEmpty() ? null : cp;
- }
-
- public override IPermission Union (IPermission target) {
- if (target == null)
- return this.Copy();
-
- if (!VerifyType(target))
- throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
-
- KeyContainerPermission operand = (KeyContainerPermission) target;
- if (this.IsUnrestricted() || operand.IsUnrestricted())
- return new KeyContainerPermission(PermissionState.Unrestricted);
-
- KeyContainerPermissionFlags flags_union = (KeyContainerPermissionFlags) (m_flags | operand.m_flags);
- KeyContainerPermission cp = new KeyContainerPermission(flags_union);
- foreach (KeyContainerPermissionAccessEntry accessEntry in AccessEntries) {
- cp.AddAccessEntryAndUnion(accessEntry, operand);
- }
- foreach (KeyContainerPermissionAccessEntry accessEntry in operand.AccessEntries) {
- cp.AddAccessEntryAndUnion(accessEntry, this);
- }
- return cp.IsEmpty() ? null : cp;
- }
-
- public override IPermission Copy () {
- if (this.IsEmpty())
- return null;
-
- KeyContainerPermission cp = new KeyContainerPermission((KeyContainerPermissionFlags)m_flags);
- foreach (KeyContainerPermissionAccessEntry accessEntry in AccessEntries) {
- cp.AccessEntries.Add(accessEntry);
- }
- return cp;
- }
-
- /// <internalonly/>
- int IBuiltInPermission.GetTokenIndex () {
- return KeyContainerPermission.GetTokenIndex();
- }
-
- //
- // private methods
- //
-
- private void AddAccessEntries(SecurityElement securityElement) {
- if (securityElement.InternalChildren != null && securityElement.InternalChildren.Count != 0) {
- IEnumerator elemEnumerator = securityElement.Children.GetEnumerator();
- while (elemEnumerator.MoveNext()) {
- SecurityElement current = (SecurityElement) elemEnumerator.Current;
- if (current != null) {
- if (String.Equals(current.Tag, "AccessEntry")) {
- int iMax = current.m_lAttributes.Count;
- Debug.Assert(iMax % 2 == 0, "Odd number of strings means the attr/value pairs were not added correctly");
- string keyStore = null;
- string providerName = null;
- int providerType = -1;
- string keyContainerName = null;
- int keySpec = -1;
- KeyContainerPermissionFlags flags = KeyContainerPermissionFlags.NoFlags;
- for (int i = 0; i < iMax; i += 2) {
- String strAttrName = (String) current.m_lAttributes[i];
- String strAttrValue = (String) current.m_lAttributes[i+1];
- if (String.Equals(strAttrName, "KeyStore"))
- keyStore = strAttrValue;
- if (String.Equals(strAttrName, "ProviderName"))
- providerName = strAttrValue;
- else if (String.Equals(strAttrName, "ProviderType"))
- providerType = Convert.ToInt32(strAttrValue, null);
- else if (String.Equals(strAttrName, "KeyContainerName"))
- keyContainerName = strAttrValue;
- else if (String.Equals(strAttrName, "KeySpec"))
- keySpec = Convert.ToInt32(strAttrValue, null);
- else if (String.Equals(strAttrName, "Flags")) {
- flags = (KeyContainerPermissionFlags) Enum.Parse(typeof(KeyContainerPermissionFlags), strAttrValue);
- }
- }
- KeyContainerPermissionAccessEntry accessEntry = new KeyContainerPermissionAccessEntry(keyStore, providerName, providerType, keyContainerName, keySpec, flags);
- AccessEntries.Add(accessEntry);
- }
- }
- }
- }
- }
-
- private void AddAccessEntryAndUnion (KeyContainerPermissionAccessEntry accessEntry, KeyContainerPermission target) {
- KeyContainerPermissionAccessEntry newAccessEntry = new KeyContainerPermissionAccessEntry(accessEntry);
- newAccessEntry.Flags |= GetApplicableFlags(accessEntry, target);
- AccessEntries.Add(newAccessEntry);
- }
-
- private void AddAccessEntryAndIntersect (KeyContainerPermissionAccessEntry accessEntry, KeyContainerPermission target) {
- KeyContainerPermissionAccessEntry newAccessEntry = new KeyContainerPermissionAccessEntry(accessEntry);
- newAccessEntry.Flags &= GetApplicableFlags(accessEntry, target);
- AccessEntries.Add(newAccessEntry);
- }
-
- //
- // private/internal static methods.
- //
-
- internal static void VerifyFlags (KeyContainerPermissionFlags flags) {
- if ((flags & ~KeyContainerPermissionFlags.AllFlags) != 0)
- throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)flags));
- Contract.EndContractBlock();
- }
-
- private static KeyContainerPermissionFlags GetApplicableFlags (KeyContainerPermissionAccessEntry accessEntry, KeyContainerPermission target) {
- KeyContainerPermissionFlags flags = KeyContainerPermissionFlags.NoFlags;
- bool applyDefaultFlags = true;
-
- // If the entry exists in the target, return the flag of the target entry.
- int index = target.AccessEntries.IndexOf(accessEntry);
- if (index != -1) {
- flags = ((KeyContainerPermissionAccessEntry)target.AccessEntries[index]).Flags;
- return flags;
- }
-
- // Intersect the flags in all the target entries that apply to the current access entry,
- foreach (KeyContainerPermissionAccessEntry targetAccessEntry in target.AccessEntries) {
- if (accessEntry.IsSubsetOf(targetAccessEntry)) {
- if (applyDefaultFlags == false) {
- flags &= targetAccessEntry.Flags;
- } else {
- flags = targetAccessEntry.Flags;
- applyDefaultFlags = false;
- }
- }
- }
-
- // If no target entry applies to the current entry, the default global flag applies.
- if (applyDefaultFlags)
- flags = target.Flags;
-
- return flags;
- }
-
- private static int GetTokenIndex() {
- return BuiltInPermissionIndex.KeyContainerPermissionIndex;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/ApplicationTrust.cs b/src/mscorlib/src/System/Security/Policy/ApplicationTrust.cs
deleted file mode 100644
index 3d4e35adf4..0000000000
--- a/src/mscorlib/src/System/Security/Policy/ApplicationTrust.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-// This class encapsulates security decisions about an application.
-//
-
-namespace System.Security.Policy
-{
- using System.Collections;
- using System.Collections.Generic;
- using System.Globalization;
- using System.IO;
- using System.Runtime.InteropServices;
-#if FEATURE_SERIALIZATION
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters.Binary;
-#endif // FEATURE_SERIALIZATION
- using System.Runtime.Versioning;
- using System.Security.Permissions;
- using System.Security.Util;
- using System.Text;
- using System.Threading;
- using System.Diagnostics.Contracts;
-
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum ApplicationVersionMatch {
- MatchExactVersion,
- MatchAllVersions
- }
-
- [System.Runtime.InteropServices.ComVisible(true)]
- [Serializable]
- public sealed class ApplicationTrust : EvidenceBase, ISecurityEncodable
- {
- private PolicyStatement m_psDefaultGrant;
- private IList<StrongName> m_fullTrustAssemblies;
-
- // Permission special flags for the default grant set in this ApplicationTrust. This should be
- // updated in sync with any updates to the default grant set.
- //
- // In the general case, these values cannot be trusted - we only store a reference to the
- // DefaultGrantSet, and return the reference directly, which means that code can update the
- // permission set without our knowledge. That would lead to the flags getting out of sync with the
- // grant set.
- //
- // However, we only care about these flags when we're creating a homogenous AppDomain, and in that
- // case we control the ApplicationTrust object end-to-end, and know that the permission set will not
- // change after the flags are calculated.
- [NonSerialized]
- private int m_grantSetSpecialFlags;
-
- public ApplicationTrust () : this (new PermissionSet(PermissionState.None))
- {
- }
-
- internal ApplicationTrust (PermissionSet defaultGrantSet)
- {
- InitDefaultGrantSet(defaultGrantSet);
-
- m_fullTrustAssemblies = new List<StrongName>().AsReadOnly();
- }
-
- public ApplicationTrust(PermissionSet defaultGrantSet, IEnumerable<StrongName> fullTrustAssemblies) {
- if (fullTrustAssemblies == null) {
- throw new ArgumentNullException(nameof(fullTrustAssemblies));
- }
-
- InitDefaultGrantSet(defaultGrantSet);
-
- List<StrongName> fullTrustList = new List<StrongName>();
- foreach (StrongName strongName in fullTrustAssemblies) {
- if (strongName == null) {
- throw new ArgumentException(Environment.GetResourceString("Argument_NullFullTrustAssembly"), nameof(fullTrustAssemblies));
- }
-
- fullTrustList.Add(new StrongName(strongName.PublicKey, strongName.Name, strongName.Version));
- }
-
- m_fullTrustAssemblies = fullTrustList.AsReadOnly();
- }
-
- // Sets up the default grant set for all constructors. Extracted to avoid the cost of
- // IEnumerable virtual dispatches on startup when there are no fullTrustAssemblies (CoreCLR)
- private void InitDefaultGrantSet(PermissionSet defaultGrantSet) {
- if (defaultGrantSet == null) {
- throw new ArgumentNullException(nameof(defaultGrantSet));
- }
-
- // Creating a PolicyStatement copies the incoming permission set, so we don't have to worry
- // about the PermissionSet parameter changing underneath us after we've calculated the
- // permisison flags in the DefaultGrantSet setter.
- DefaultGrantSet = new PolicyStatement(defaultGrantSet);
- }
-
- public PolicyStatement DefaultGrantSet {
- get {
- if (m_psDefaultGrant == null)
- return new PolicyStatement(new PermissionSet(PermissionState.None));
- return m_psDefaultGrant;
- }
- set {
- if (value == null) {
- m_psDefaultGrant = null;
- m_grantSetSpecialFlags = 0;
- }
- else {
- m_psDefaultGrant = value;
- m_grantSetSpecialFlags = SecurityManager.GetSpecialFlags(m_psDefaultGrant.PermissionSet, null);
- }
- }
- }
-
- public IList<StrongName> FullTrustAssemblies {
- get {
- return m_fullTrustAssemblies;
- }
- }
-
- public override EvidenceBase Clone()
- {
- return base.Clone();
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/Evidence.cs b/src/mscorlib/src/System/Security/Policy/Evidence.cs
deleted file mode 100644
index 22479dff6c..0000000000
--- a/src/mscorlib/src/System/Security/Policy/Evidence.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Policy
-{
- using System.Runtime.InteropServices;
-#if FEATURE_SERIALIZATION
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters.Binary;
-#endif // FEATURE_SERIALIZATION
-
- /// <summary>
- /// The Evidence class keeps track of information that can be used to make security decisions about
- /// an assembly or an AppDomain. There are two types of evidence, one is supplied by the CLR or a
- /// host, the other supplied by the assembly itself.
- ///
- /// We keep a dictionary that maps each type of possbile evidence to an EvidenceTypeDescriptor which
- /// contains the evidence objects themselves if they exist as well as some extra metadata about that
- /// type of evidence. This dictionary is fully populated with keys for host evidence at all times and
- /// for assembly evidence the first time the application evidence is touched. This means that if a
- /// Type key does not exist in the dictionary, then that particular type of evidence will never be
- /// given to the assembly or AppDomain in question as host evidence. The only exception is if the
- /// user later manually adds host evidence via the AddHostEvidence API.
- ///
- /// Assembly supplied evidence is created up front, however host supplied evidence may be lazily
- /// created. In the lazy creation case, the Type will map to either an EvidenceTypeDescriptor that does
- /// not contain any evidence data or null. As requests come in for that evidence, we'll populate the
- /// EvidenceTypeDescriptor appropriately.
- /// </summary>
-#if FEATURE_SERIALIZATION
- [Serializable]
-#endif
- [ComVisible(true)]
- public sealed class Evidence
- {
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/EvidenceBase.cs b/src/mscorlib/src/System/Security/Policy/EvidenceBase.cs
deleted file mode 100644
index 7fef1ded3c..0000000000
--- a/src/mscorlib/src/System/Security/Policy/EvidenceBase.cs
+++ /dev/null
@@ -1,178 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.IO;
-using System.Runtime.InteropServices;
-#if FEATURE_SERIALIZATION
-using System.Runtime.Serialization.Formatters.Binary;
-#endif // FEATURE_SERIALIZATION
-using System.Security.Permissions;
-
-namespace System.Security.Policy
-{
- /// <summary>
- /// Base class from which all objects to be used as Evidence must derive
- /// </summary>
- [ComVisible(true)]
- [Serializable]
- public abstract class EvidenceBase
- {
- protected EvidenceBase()
- {
-#if FEATURE_SERIALIZATION
- // All objects to be used as evidence must be serializable. Make sure that any derived types
- // are marked serializable to enforce this, since the attribute does not inherit down to derived
- // classes.
- if (!GetType().IsSerializable)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Policy_EvidenceMustBeSerializable"));
- }
-#endif // FEATURE_SERIALIZATION
- }
-
- /// <remarks>
- /// Since legacy evidence objects would be cloned by being serialized, the default implementation
- /// of EvidenceBase will do the same.
- /// </remarks>
- public virtual EvidenceBase Clone()
- {
-#if FEATURE_SERIALIZATION
- using (MemoryStream memoryStream = new MemoryStream())
- {
- BinaryFormatter formatter = new BinaryFormatter();
- formatter.Serialize(memoryStream, this);
-
- memoryStream.Position = 0;
- return formatter.Deserialize(memoryStream) as EvidenceBase;
- }
-#else // !FEATURE_SERIALIZATION
- throw new NotImplementedException();
-#endif // FEATURE_SERIALIZATION
- }
- }
-
- /// <summary>
- /// Interface for types which wrap Whidbey evidence objects for compatibility with v4 evidence rules
- /// </summary>
- internal interface ILegacyEvidenceAdapter
- {
- object EvidenceObject { get; }
- Type EvidenceType { get; }
- }
-
- /// <summary>
- /// Wrapper class to hold legacy evidence objects which do not derive from EvidenceBase, and allow
- /// them to be held in the Evidence collection which expects to maintain lists of EvidenceBase only
- /// </summary>
- [Serializable]
- internal sealed class LegacyEvidenceWrapper : EvidenceBase, ILegacyEvidenceAdapter
- {
- private object m_legacyEvidence;
-
- internal LegacyEvidenceWrapper(object legacyEvidence)
- {
- Debug.Assert(legacyEvidence != null);
- Debug.Assert(legacyEvidence.GetType() != typeof(EvidenceBase), "Attempt to wrap an EvidenceBase in a LegacyEvidenceWrapper");
- Debug.Assert(legacyEvidence.GetType().IsSerializable, "legacyEvidence.GetType().IsSerializable");
-
- m_legacyEvidence = legacyEvidence;
- }
-
- public object EvidenceObject
- {
- get { return m_legacyEvidence; }
- }
-
- public Type EvidenceType
- {
- get { return m_legacyEvidence.GetType(); }
- }
-
- public override bool Equals(object obj)
- {
- return m_legacyEvidence.Equals(obj);
- }
-
- public override int GetHashCode()
- {
- return m_legacyEvidence.GetHashCode();
- }
-
- public override EvidenceBase Clone()
- {
- return base.Clone();
- }
- }
-
- /// <summary>
- /// Pre-v4 versions of the runtime allow multiple pieces of evidence that all have the same type.
- /// This type wraps those evidence objects into a single type of list, allowing legacy code to continue
- /// to work with the Evidence collection that does not expect multiple evidences of the same type.
- ///
- /// This may not be limited to LegacyEvidenceWrappers, since it's valid for legacy code to add multiple
- /// objects of built-in evidence to an Evidence collection. The built-in evidence now derives from
- /// EvienceObject, so when the legacy code runs on v4, it may end up attempting to add multiple
- /// Hash evidences for intsance.
- /// </summary>
- [Serializable]
- internal sealed class LegacyEvidenceList : EvidenceBase, IEnumerable<EvidenceBase>, ILegacyEvidenceAdapter
- {
- private List<EvidenceBase> m_legacyEvidenceList = new List<EvidenceBase>();
-
- public object EvidenceObject
- {
- get
- {
- // We'll choose the first item in the list to represent us if we're forced to return only
- // one object. This can occur if multiple pieces of evidence are added via the legacy APIs,
- // and then the new APIs are used to retrieve that evidence.
- return m_legacyEvidenceList.Count > 0 ? m_legacyEvidenceList[0] : null;
- }
- }
-
- public Type EvidenceType
- {
- get
- {
- Debug.Assert(m_legacyEvidenceList.Count > 0, "No items in LegacyEvidenceList, cannot tell what type they are");
-
- ILegacyEvidenceAdapter adapter = m_legacyEvidenceList[0] as ILegacyEvidenceAdapter;
- return adapter == null ? m_legacyEvidenceList[0].GetType() : adapter.EvidenceType;
- }
- }
-
- public void Add(EvidenceBase evidence)
- {
- Debug.Assert(evidence != null);
- Debug.Assert(m_legacyEvidenceList.Count == 0 || EvidenceType == evidence.GetType() || (evidence is LegacyEvidenceWrapper && (evidence as LegacyEvidenceWrapper).EvidenceType == EvidenceType),
- "LegacyEvidenceList must be homogeonous");
- Debug.Assert(evidence.GetType() != typeof(LegacyEvidenceList),
- "Attempt to add a legacy evidence list to another legacy evidence list");
-
- m_legacyEvidenceList.Add(evidence);
- }
-
- public IEnumerator<EvidenceBase> GetEnumerator()
- {
- return m_legacyEvidenceList.GetEnumerator();
- }
-
- IEnumerator System.Collections.IEnumerable.GetEnumerator()
- {
- return m_legacyEvidenceList.GetEnumerator();
- }
-
- public override EvidenceBase Clone()
- {
- return base.Clone();
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/EvidenceTypeDescriptor.cs b/src/mscorlib/src/System/Security/Policy/EvidenceTypeDescriptor.cs
deleted file mode 100644
index 8deb145102..0000000000
--- a/src/mscorlib/src/System/Security/Policy/EvidenceTypeDescriptor.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.Runtime.Serialization;
-
-namespace System.Security.Policy
-{
- /// <summary>
- /// Descriptor stored in the Evidence collection to detail the information we have about a type of
- /// evidence. This descriptor also stores any evidence that's been generated of the specific type.
- /// </summary>
- [Serializable]
- internal sealed class EvidenceTypeDescriptor
- {
- [NonSerialized]
- private bool m_hostCanGenerate;
-
- [NonSerialized]
- private bool m_generated;
-
- private EvidenceBase m_hostEvidence;
- private EvidenceBase m_assemblyEvidence;
-
- // EvidenceTypeDescriptors are stored in Evidence indexed by the type they describe, so this
- // information is redundant. We keep it around in checked builds to help debugging, but we can drop
- // it from retial builds.
-#if _DEBUG
- [NonSerialized]
- private Type m_evidenceType;
-#endif // _DEBUG
-
- public EvidenceTypeDescriptor()
- {
- }
-
- /// <summary>
- /// Make a deep copy of a type descriptor
- /// </summary>
- private EvidenceTypeDescriptor(EvidenceTypeDescriptor descriptor)
- {
- Debug.Assert(descriptor != null);
-
- m_hostCanGenerate = descriptor.m_hostCanGenerate;
-
- if (descriptor.m_assemblyEvidence != null)
- {
- m_assemblyEvidence = descriptor.m_assemblyEvidence.Clone() as EvidenceBase;
- }
- if (descriptor.m_hostEvidence != null)
- {
- m_hostEvidence = descriptor.m_hostEvidence.Clone() as EvidenceBase;
- }
-
-#if _DEBUG
- m_evidenceType = descriptor.m_evidenceType;
-#endif // _DEBUG
- }
-
- /// <summary>
- /// Evidence of this type supplied by the assembly
- /// </summary>
- public EvidenceBase AssemblyEvidence
- {
- get { return m_assemblyEvidence; }
-
- set
- {
- Debug.Assert(value != null);
-#if _DEBUG
- Debug.Assert(CheckEvidenceType(value), "Incorrect type of AssemblyEvidence set");
-#endif
- m_assemblyEvidence = value;
- }
- }
-
- /// <summary>
- /// Flag indicating that we've already attempted to generate this type of evidence
- /// </summary>
- public bool Generated
- {
- get { return m_generated; }
-
- set
- {
- Debug.Assert(value, "Attempt to clear the Generated flag");
- m_generated = value;
- }
- }
-
- /// <summary>
- /// Has the HostSecurityManager has told us that it can potentially generate evidence of this type
- /// </summary>
- public bool HostCanGenerate
- {
- get { return m_hostCanGenerate; }
-
- set
- {
- Debug.Assert(value, "Attempt to clear HostCanGenerate flag");
- m_hostCanGenerate = value;
- }
- }
-
- /// <summary>
- /// Evidence of this type supplied by the CLR or the host
- /// </summary>
- public EvidenceBase HostEvidence
- {
- get { return m_hostEvidence; }
-
- set
- {
- Debug.Assert(value != null);
-#if _DEBUG
- Debug.Assert(CheckEvidenceType(value), "Incorrect type of HostEvidence set");
-#endif
- m_hostEvidence = value;
- }
- }
-
-#if _DEBUG
- /// <summary>
- /// Verify that evidence being stored in this descriptor is of the correct type
- /// </summary>
- private bool CheckEvidenceType(EvidenceBase evidence)
- {
- Debug.Assert(evidence != null);
-
- ILegacyEvidenceAdapter legacyAdapter = evidence as ILegacyEvidenceAdapter;
- Type storedType = legacyAdapter == null ? evidence.GetType() : legacyAdapter.EvidenceType;
-
- return m_evidenceType == null || m_evidenceType.IsAssignableFrom(storedType);
- }
-#endif // _DEBUG
-
- /// <summary>
- /// Make a deep copy of this descriptor
- /// </summary>
- public EvidenceTypeDescriptor Clone()
- {
- return new EvidenceTypeDescriptor(this);
- }
-
-#if _DEBUG
- /// <summary>
- /// Set the type that this evidence descriptor refers to.
- /// </summary>
- internal void SetEvidenceType(Type evidenceType)
- {
- Debug.Assert(evidenceType != null);
- Debug.Assert(m_evidenceType == null, "Attempt to reset evidence type");
-
- m_evidenceType = evidenceType;
- }
-#endif // _DEBUG
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/IDelayEvaluatedEvidence.cs b/src/mscorlib/src/System/Security/Policy/IDelayEvaluatedEvidence.cs
deleted file mode 100644
index 8f8c07c9e4..0000000000
--- a/src/mscorlib/src/System/Security/Policy/IDelayEvaluatedEvidence.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-
-namespace System.Security.Policy {
- /// <summary>
- /// Interface for evidence objects that support being "unverified". For instance, StrongName
- /// evidence for a strong name signature which was not yet verified. This interface is used to
- /// keep track of weather or not the evidence object was needed to compute a grant set. If it was,
- /// then we can force verificaiton of the evidence object -- if not we can save time by not doing
- /// any verification on it. (Since we didn't use it for policy resolution, it wouldn't have
- /// mattered if the evidence was not present in the first place).
- /// </summary>
- internal interface IDelayEvaluatedEvidence {
- /// <summary>
- /// Is this evidence object verified yet?
- /// </summary>
- bool IsVerified
- {
- get;
- }
-
- /// <summary>
- /// Was this evidence object used during the course of policy evaluation?
- /// </summary>
- bool WasUsed { get; }
-
- /// <summary>
- /// Mark the object as used
- /// </summary>
- void MarkUsed();
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/IIdentityPermissionFactory.cs b/src/mscorlib/src/System/Security/Policy/IIdentityPermissionFactory.cs
deleted file mode 100644
index a46f39602d..0000000000
--- a/src/mscorlib/src/System/Security/Policy/IIdentityPermissionFactory.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-// All Identities will implement this interface.
-//
-
-namespace System.Security.Policy {
- using System.Runtime.Remoting;
- using System;
- using System.Security.Util;
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IIdentityPermissionFactory
- {
- IPermission CreateIdentityPermission( Evidence evidence );
- }
-
-}
diff --git a/src/mscorlib/src/System/Security/Policy/IRuntimeEvidenceFactory.cs b/src/mscorlib/src/System/Security/Policy/IRuntimeEvidenceFactory.cs
deleted file mode 100644
index 98467fe367..0000000000
--- a/src/mscorlib/src/System/Security/Policy/IRuntimeEvidenceFactory.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-using System;
-using System.Collections.Generic;
-
-namespace System.Security.Policy
-{
- /// <summary>
- /// IRuntimeEvidenceFactory is implemented by runtime types which the CLR knows how to delay
- /// generate evidence for. It is used by the Evidence class to get evidence on demand when we first
- /// need it.
- /// </summary>
- internal interface IRuntimeEvidenceFactory
- {
- /// <summary>
- /// Object which the evidence generated by this factory is used for
- /// </summary>
- IEvidenceFactory Target { get; }
-
- /// <summary>
- /// Get the collection of evidence objects supplied by the factory itself, rather than by the
- /// runtime.
- /// </summary>
- IEnumerable<EvidenceBase> GetFactorySuppliedEvidence();
-
- /// <summary>
- /// Generate a specific type of evidence for this object, returning null if the specified type of
- /// evidence cannot be generated.
- /// </summary>
- EvidenceBase GenerateEvidence(Type evidenceType);
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/PolicyException.cs b/src/mscorlib/src/System/Security/Policy/PolicyException.cs
deleted file mode 100644
index 68e87f780d..0000000000
--- a/src/mscorlib/src/System/Security/Policy/PolicyException.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-// Use this class to throw a PolicyException
-//
-
-namespace System.Security.Policy {
-
- using System;
- using System.Runtime.Serialization;
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public class PolicyException : SystemException
- {
- public PolicyException()
-
- : base(Environment.GetResourceString( "Policy_Default" )) {
- HResult = __HResults.CORSEC_E_POLICY_EXCEPTION;
- }
-
- public PolicyException(String message)
-
- : base(message) {
- HResult = __HResults.CORSEC_E_POLICY_EXCEPTION;
- }
-
- public PolicyException(String message, Exception exception)
-
- : base(message, exception) {
- HResult = __HResults.CORSEC_E_POLICY_EXCEPTION;
- }
-
- protected PolicyException(SerializationInfo info, StreamingContext context) : base (info, context) {}
-
- internal PolicyException(String message, int hresult) : base (message)
- {
- HResult = hresult;
- }
-
- internal PolicyException(String message, int hresult, Exception exception) : base (message, exception)
- {
- HResult = hresult;
- }
-
- }
-
-}
diff --git a/src/mscorlib/src/System/Security/Policy/PolicyStatement.cs b/src/mscorlib/src/System/Security/Policy/PolicyStatement.cs
deleted file mode 100644
index 9b58ece9f1..0000000000
--- a/src/mscorlib/src/System/Security/Policy/PolicyStatement.cs
+++ /dev/null
@@ -1,246 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-// Represents the policy associated with some piece of evidence
-//
-using System.Diagnostics.Contracts;
-namespace System.Security.Policy {
-
- using System;
- using System.Security;
- using System.Security.Util;
- using Math = System.Math;
- using System.Collections;
- using System.Collections.Generic;
- using System.Security.Permissions;
- using System.Text;
- using System.Globalization;
-[Serializable]
- [Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum PolicyStatementAttribute
- {
- Nothing = 0x0,
- Exclusive = 0x01,
- LevelFinal = 0x02,
- All = 0x03,
- }
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- sealed public class PolicyStatement : ISecurityPolicyEncodable, ISecurityEncodable
- {
- // The PermissionSet associated with this policy
- internal PermissionSet m_permSet;
-
- // The bitfield of inheritance properties associated with this policy
- internal PolicyStatementAttribute m_attributes;
-
- internal PolicyStatement()
- {
- m_permSet = null;
- m_attributes = PolicyStatementAttribute.Nothing;
- }
-
- public PolicyStatement( PermissionSet permSet )
- : this( permSet, PolicyStatementAttribute.Nothing )
- {
- }
-
- public PolicyStatement( PermissionSet permSet, PolicyStatementAttribute attributes )
- {
- if (permSet == null)
- {
- m_permSet = new PermissionSet( false );
- }
- else
- {
- m_permSet = permSet.Copy();
- }
- if (ValidProperties( attributes ))
- {
- m_attributes = attributes;
- }
- }
-
- private PolicyStatement( PermissionSet permSet, PolicyStatementAttribute attributes, bool copy )
- {
- if (permSet != null)
- {
- if (copy)
- m_permSet = permSet.Copy();
- else
- m_permSet = permSet;
- }
- else
- {
- m_permSet = new PermissionSet( false );
- }
-
- m_attributes = attributes;
- }
-
- public PermissionSet PermissionSet
- {
- get
- {
- lock (this)
- {
- return m_permSet.Copy();
- }
- }
-
- set
- {
- lock (this)
- {
- if (value == null)
- {
- m_permSet = new PermissionSet( false );
- }
- else
- {
- m_permSet = value.Copy();
- }
- }
- }
- }
-
- internal void SetPermissionSetNoCopy( PermissionSet permSet )
- {
- m_permSet = permSet;
- }
-
- internal PermissionSet GetPermissionSetNoCopy()
- {
- lock (this)
- {
- return m_permSet;
- }
- }
-
- public PolicyStatementAttribute Attributes
- {
- get
- {
- return m_attributes;
- }
-
- set
- {
- if (ValidProperties( value ))
- {
- m_attributes = value;
- }
- }
- }
-
- public PolicyStatement Copy()
- {
- // The PolicyStatement .ctor will copy the permission set
- return new PolicyStatement(m_permSet, Attributes, true);
- }
-
- public String AttributeString
- {
- get
- {
- StringBuilder sb = new StringBuilder();
-
- bool first = true;
-
- if (GetFlag((int) PolicyStatementAttribute.Exclusive ))
- {
- sb.Append( "Exclusive" );
- first = false;
- }
- if (GetFlag((int) PolicyStatementAttribute.LevelFinal ))
- {
- if (!first)
- sb.Append( " " );
- sb.Append( "LevelFinal" );
- }
-
- return sb.ToString();
- }
- }
-
- private static bool ValidProperties( PolicyStatementAttribute attributes )
- {
- if ((attributes & ~(PolicyStatementAttribute.All)) == 0)
- {
- return true;
- }
- else
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidFlag" ) );
- }
- }
-
- private bool GetFlag( int flag )
- {
- return (flag & (int)m_attributes) != 0;
- }
-
- /// <summary>
- /// Union a child policy statement into this policy statement
- /// </summary>
- internal void InplaceUnion(PolicyStatement childPolicy)
- {
- BCLDebug.Assert(childPolicy != null, "childPolicy != null");
-
- if (((Attributes & childPolicy.Attributes) & PolicyStatementAttribute.Exclusive) == PolicyStatementAttribute.Exclusive)
- {
- throw new PolicyException(Environment.GetResourceString( "Policy_MultipleExclusive" ));
- }
-
- // We need to merge together our grant set and attributes. The result of this merge is
- // dependent upon if we're merging a child marked exclusive or not. If the child is not
- // exclusive, we need to union in its grant set and or in its attributes. However, if the child
- // is exclusive then it is the only code group which should have an effect on the resulting
- // grant set and therefore our grant should be ignored.
- if ((childPolicy.Attributes & PolicyStatementAttribute.Exclusive) == PolicyStatementAttribute.Exclusive)
- {
- m_permSet = childPolicy.GetPermissionSetNoCopy();
- Attributes = childPolicy.Attributes;
- }
- else
- {
- m_permSet.InplaceUnion(childPolicy.GetPermissionSetNoCopy());
- Attributes = Attributes | childPolicy.Attributes;
- }
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override bool Equals( Object obj )
- {
- PolicyStatement other = obj as PolicyStatement;
-
- if (other == null)
- return false;
-
- if (this.m_attributes != other.m_attributes)
- return false;
-
- if (!Object.Equals( this.m_permSet, other.m_permSet ))
- return false;
-
- return true;
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override int GetHashCode()
- {
- int accumulator = (int)this.m_attributes;
-
- if (m_permSet != null)
- accumulator = accumulator ^ m_permSet.GetHashCode();
-
- return accumulator;
- }
-
- }
-}
-
diff --git a/src/mscorlib/src/System/Security/Policy/Site.cs b/src/mscorlib/src/System/Security/Policy/Site.cs
deleted file mode 100644
index 14a95e1666..0000000000
--- a/src/mscorlib/src/System/Security/Policy/Site.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-//
-//
-// Site is an IIdentity representing internet sites.
-//
-
-using System;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.Globalization;
-using System.Security.Permissions;
-using System.Security.Util;
-
-namespace System.Security.Policy
-{
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class Site : EvidenceBase, IIdentityPermissionFactory
- {
- private SiteString m_name;
-
- public Site(String name)
- {
- if (name == null)
- throw new ArgumentNullException(nameof(name));
- Contract.EndContractBlock();
-
- m_name = new SiteString( name );
- }
-
- private Site(SiteString name)
- {
- Debug.Assert(name != null);
- m_name = name;
- }
-
- public static Site CreateFromUrl( String url )
- {
- return new Site(ParseSiteFromUrl(url));
- }
-
- private static SiteString ParseSiteFromUrl( String name )
- {
- URLString urlString = new URLString( name );
-
- if (String.Compare( urlString.Scheme, "file", StringComparison.OrdinalIgnoreCase) == 0)
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidSite" ) );
-
- return new SiteString( new URLString( name ).Host );
- }
-
- public String Name
- {
- get { return m_name.ToString(); }
- }
-
- internal SiteString GetSiteString()
- {
- return m_name;
- }
-
- public IPermission CreateIdentityPermission( Evidence evidence )
- {
- return new SiteIdentityPermission( Name );
- }
-
- public override bool Equals(Object o)
- {
- Site other = o as Site;
- if (other == null)
- {
- return false;
- }
-
- return String.Equals(Name, other.Name, StringComparison.OrdinalIgnoreCase);
- }
-
- public override int GetHashCode()
- {
- return Name.GetHashCode();
- }
-
- public override EvidenceBase Clone()
- {
- return new Site(m_name);
- }
-
- public Object Copy()
- {
- return Clone();
- }
-
- // INormalizeForIsolatedStorage is not implemented for startup perf
- // equivalent to INormalizeForIsolatedStorage.Normalize()
- internal Object Normalize()
- {
- return m_name.ToString().ToUpper(CultureInfo.InvariantCulture);
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/StrongName.cs b/src/mscorlib/src/System/Security/Policy/StrongName.cs
deleted file mode 100644
index 999b478ba7..0000000000
--- a/src/mscorlib/src/System/Security/Policy/StrongName.cs
+++ /dev/null
@@ -1,171 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-//
-//
-// StrongName is an IIdentity representing strong names.
-//
-
-namespace System.Security.Policy {
- using System.IO;
- using System.Reflection;
- using System.Security.Util;
- using System.Security.Permissions;
- using System.Diagnostics.Contracts;
- using CultureInfo = System.Globalization.CultureInfo;
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class StrongName : EvidenceBase, IIdentityPermissionFactory, IDelayEvaluatedEvidence
- {
- private StrongNamePublicKeyBlob m_publicKeyBlob;
- private String m_name;
- private Version m_version;
-
- // Delay evaluated evidence is for policy resolution only, so it doesn't make sense to save that
- // state away and then try to evaluate the strong name later.
- [NonSerialized]
- private RuntimeAssembly m_assembly = null;
-
- [NonSerialized]
- private bool m_wasUsed = false;
-
- internal StrongName() {}
-
- public StrongName( StrongNamePublicKeyBlob blob, String name, Version version ) : this(blob, name, version, null)
- {
- }
-
- internal StrongName(StrongNamePublicKeyBlob blob, String name, Version version, Assembly assembly)
- {
- if (name == null)
- throw new ArgumentNullException(nameof(name));
- if (String.IsNullOrEmpty(name))
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyStrongName"));
-
- if (blob == null)
- throw new ArgumentNullException(nameof(blob));
-
- if (version == null)
- throw new ArgumentNullException(nameof(version));
- Contract.EndContractBlock();
-
- RuntimeAssembly rtAssembly = assembly as RuntimeAssembly;
- if (assembly != null && rtAssembly == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeAssembly"), nameof(assembly));
-
- m_publicKeyBlob = blob;
- m_name = name;
- m_version = version;
- m_assembly = rtAssembly;
- }
-
- public StrongNamePublicKeyBlob PublicKey
- {
- get
- {
- return m_publicKeyBlob;
- }
- }
-
- public String Name
- {
- get
- {
- return m_name;
- }
- }
-
- public Version Version
- {
- get
- {
- return m_version;
- }
- }
-
- bool IDelayEvaluatedEvidence.IsVerified
- {
- get
- {
- return true;
- }
- }
-
- bool IDelayEvaluatedEvidence.WasUsed
- {
- get { return m_wasUsed; }
- }
-
- void IDelayEvaluatedEvidence.MarkUsed()
- {
- m_wasUsed = true;
- }
-
- internal static bool CompareNames( String asmName, String mcName )
- {
- if (mcName.Length > 0 && mcName[mcName.Length-1] == '*' && mcName.Length - 1 <= asmName.Length)
- return String.Compare( mcName, 0, asmName, 0, mcName.Length - 1, StringComparison.OrdinalIgnoreCase) == 0;
- else
- return String.Compare( mcName, asmName, StringComparison.OrdinalIgnoreCase) == 0;
- }
-
- public IPermission CreateIdentityPermission( Evidence evidence )
- {
- return new StrongNameIdentityPermission( m_publicKeyBlob, m_name, m_version );
- }
-
- public override EvidenceBase Clone()
- {
- return new StrongName(m_publicKeyBlob, m_name, m_version);
- }
-
- public Object Copy()
- {
- return Clone();
- }
-
- public override bool Equals( Object o )
- {
- StrongName that = (o as StrongName);
- return (that != null) &&
- Equals( this.m_publicKeyBlob, that.m_publicKeyBlob ) &&
- Equals( this.m_name, that.m_name ) &&
- Equals( this.m_version, that.m_version );
- }
-
- public override int GetHashCode()
- {
- if (m_publicKeyBlob != null)
- {
- return m_publicKeyBlob.GetHashCode();
- }
- else if (m_name != null || m_version != null)
- {
- return (m_name == null ? 0 : m_name.GetHashCode()) + (m_version == null ? 0 : m_version.GetHashCode());
- }
- else
- {
- return typeof( StrongName ).GetHashCode();
- }
- }
-
- // INormalizeForIsolatedStorage is not implemented for startup perf
- // equivalent to INormalizeForIsolatedStorage.Normalize()
- internal Object Normalize()
- {
- MemoryStream ms = new MemoryStream();
- BinaryWriter bw = new BinaryWriter(ms);
-
- bw.Write(m_publicKeyBlob.PublicKey);
- bw.Write(m_version.Major);
- bw.Write(m_name);
-
- ms.Position = 0;
- return ms;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/URL.cs b/src/mscorlib/src/System/Security/Policy/URL.cs
deleted file mode 100644
index 3541124ac6..0000000000
--- a/src/mscorlib/src/System/Security/Policy/URL.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-//
-//
-// Url is an IIdentity representing url internet sites.
-//
-
-namespace System.Security.Policy {
- using System.IO;
- using System.Security.Util;
- using UrlIdentityPermission = System.Security.Permissions.UrlIdentityPermission;
- using System.Runtime.Serialization;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class Url : EvidenceBase, IIdentityPermissionFactory
- {
- private URLString m_url;
-
- internal Url( String name, bool parsed )
- {
- if (name == null)
- throw new ArgumentNullException( nameof(name) );
- Contract.EndContractBlock();
-
- m_url = new URLString( name, parsed );
- }
-
- public Url( String name )
- {
- if (name == null)
- throw new ArgumentNullException( nameof(name) );
- Contract.EndContractBlock();
-
- m_url = new URLString( name );
- }
-
- private Url(Url url)
- {
- Debug.Assert(url != null);
- m_url = url.m_url;
- }
-
- public String Value
- {
- get { return m_url.ToString(); }
- }
-
- internal URLString GetURLString()
- {
- return m_url;
- }
-
- public IPermission CreateIdentityPermission( Evidence evidence )
- {
- return new UrlIdentityPermission( m_url );
- }
-
- public override bool Equals(Object o)
- {
- Url other = o as Url;
- if (other == null)
- {
- return false;
- }
-
- return other.m_url.Equals(m_url);
- }
-
- public override int GetHashCode()
- {
- return this.m_url.GetHashCode();
- }
-
- public override EvidenceBase Clone()
- {
- return new Url(this);
- }
-
- public Object Copy()
- {
- return Clone();
- }
-
- // INormalizeForIsolatedStorage is not implemented for startup perf
- // equivalent to INormalizeForIsolatedStorage.Normalize()
- internal Object Normalize()
- {
- return m_url.NormalizeUrl();
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Policy/Zone.cs b/src/mscorlib/src/System/Security/Policy/Zone.cs
deleted file mode 100644
index a9f5d84aeb..0000000000
--- a/src/mscorlib/src/System/Security/Policy/Zone.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-//
-//
-// Zone is an IIdentity representing Internet/Intranet/MyComputer etc.
-//
-
-namespace System.Security.Policy
-{
- using System.Security.Util;
- using ZoneIdentityPermission = System.Security.Permissions.ZoneIdentityPermission;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Runtime.Versioning;
- using System.Runtime.Serialization;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class Zone : EvidenceBase, IIdentityPermissionFactory
- {
- private SecurityZone m_zone;
-
- private static readonly String[] s_names =
- {"MyComputer", "Intranet", "Trusted", "Internet", "Untrusted", "NoZone"};
-
- public Zone(SecurityZone zone)
- {
- if (zone < SecurityZone.NoZone || zone > SecurityZone.Untrusted)
- throw new ArgumentException( Environment.GetResourceString( "Argument_IllegalZone" ) );
- Contract.EndContractBlock();
-
- m_zone = zone;
- }
-
- private Zone(Zone zone)
- {
- Debug.Assert(zone != null);
- m_zone = zone.m_zone;
- }
-
- public IPermission CreateIdentityPermission( Evidence evidence )
- {
- return new ZoneIdentityPermission( SecurityZone );
- }
-
- public SecurityZone SecurityZone
- {
- get
- {
- return m_zone;
- }
- }
-
- public override bool Equals(Object o)
- {
- Zone other = o as Zone;
- if (other == null)
- {
- return false;
- }
-
- return SecurityZone == other.SecurityZone;
- }
-
- public override int GetHashCode()
- {
- return (int)SecurityZone;
- }
-
- public override EvidenceBase Clone()
- {
- return new Zone(this);
- }
-
- public Object Copy()
- {
- return Clone();
- }
-
- // INormalizeForIsolatedStorage is not implemented for startup perf
- // equivalent to INormalizeForIsolatedStorage.Normalize()
- internal Object Normalize()
- {
- return s_names[(int)SecurityZone];
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Principal/IIdentity.cs b/src/mscorlib/src/System/Security/Principal/IIdentity.cs
deleted file mode 100644
index 2bda6c6e3d..0000000000
--- a/src/mscorlib/src/System/Security/Principal/IIdentity.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-//
-//
-// All identities will implement this interface
-//
-
-namespace System.Security.Principal
-{
- using System.Runtime.Remoting;
- using System;
- using System.Security.Util;
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IIdentity {
- // Access to the name string
- string Name { get; }
-
- // Access to Authentication 'type' info
- string AuthenticationType { get; }
-
- // Determine if this represents the unauthenticated identity
- bool IsAuthenticated { get; }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Principal/IPrincipal.cs b/src/mscorlib/src/System/Security/Principal/IPrincipal.cs
deleted file mode 100644
index 449cfb50b2..0000000000
--- a/src/mscorlib/src/System/Security/Principal/IPrincipal.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-//
-//
-// All roles will implement this interface
-//
-
-namespace System.Security.Principal
-{
- using System.Runtime.Remoting;
- using System;
- using System.Security.Util;
-
-[System.Runtime.InteropServices.ComVisible(true)]
- public interface IPrincipal {
- // Retrieve the identity object
- IIdentity Identity { get; }
-
- // Perform a check for a specific role
- bool IsInRole (string role);
- }
-}
diff --git a/src/mscorlib/src/System/Security/Principal/TokenImpersonationLevel.cs b/src/mscorlib/src/System/Security/Principal/TokenImpersonationLevel.cs
deleted file mode 100644
index 9eec46f774..0000000000
--- a/src/mscorlib/src/System/Security/Principal/TokenImpersonationLevel.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Principal
-{
- public enum TokenImpersonationLevel
- {
- None = 0,
- Anonymous = 1,
- Identification = 2,
- Impersonation = 3,
- Delegation = 4
- }
-}
diff --git a/src/mscorlib/src/System/Security/SafeSecurityHandles.cs b/src/mscorlib/src/System/Security/SafeSecurityHandles.cs
deleted file mode 100644
index 9a84164460..0000000000
--- a/src/mscorlib/src/System/Security/SafeSecurityHandles.cs
+++ /dev/null
@@ -1,148 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-namespace Microsoft.Win32.SafeHandles {
- using System;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Runtime.ConstrainedExecution;
- using System.Runtime.Versioning;
- using System.Security;
-
- // Introduce this handle to replace internal SafeTokenHandle,
- // which is mainly used to hold Windows thread or process access token
- public sealed class SafeAccessTokenHandle : SafeHandle
- {
- private SafeAccessTokenHandle()
- : base(IntPtr.Zero, true)
- { }
-
- // 0 is an Invalid Handle
- public SafeAccessTokenHandle(IntPtr handle)
- : base(IntPtr.Zero, true)
- {
- SetHandle(handle);
- }
-
- public static SafeAccessTokenHandle InvalidHandle
- {
- get { return new SafeAccessTokenHandle(IntPtr.Zero); }
- }
-
- public override bool IsInvalid
- {
- get { return handle == IntPtr.Zero || handle == new IntPtr(-1); }
- }
-
- protected override bool ReleaseHandle()
- {
- return Win32Native.CloseHandle(handle);
- }
- }
-
- internal sealed class SafeLsaLogonProcessHandle : SafeHandleZeroOrMinusOneIsInvalid {
- private SafeLsaLogonProcessHandle() : base (true) {}
-
- // 0 is an Invalid Handle
- internal SafeLsaLogonProcessHandle(IntPtr handle) : base (true) {
- SetHandle(handle);
- }
-
- internal static SafeLsaLogonProcessHandle InvalidHandle {
- get { return new SafeLsaLogonProcessHandle(IntPtr.Zero); }
- }
-
- override protected bool ReleaseHandle()
- {
- // LsaDeregisterLogonProcess returns an NTSTATUS
- return Win32Native.LsaDeregisterLogonProcess(handle) >= 0;
- }
- }
-
- internal sealed class SafeLsaMemoryHandle : SafeBuffer {
- private SafeLsaMemoryHandle() : base(true) {}
-
- // 0 is an Invalid Handle
- internal SafeLsaMemoryHandle(IntPtr handle) : base (true) {
- SetHandle(handle);
- }
-
- internal static SafeLsaMemoryHandle InvalidHandle {
- get { return new SafeLsaMemoryHandle( IntPtr.Zero ); }
- }
-
- override protected bool ReleaseHandle()
- {
- return Win32Native.LsaFreeMemory(handle) == 0;
- }
- }
-
- internal sealed class SafeLsaPolicyHandle : SafeHandleZeroOrMinusOneIsInvalid {
- private SafeLsaPolicyHandle() : base(true) {}
-
- // 0 is an Invalid Handle
- internal SafeLsaPolicyHandle(IntPtr handle) : base (true) {
- SetHandle(handle);
- }
-
- internal static SafeLsaPolicyHandle InvalidHandle {
- get { return new SafeLsaPolicyHandle( IntPtr.Zero ); }
- }
-
- override protected bool ReleaseHandle()
- {
- return Win32Native.LsaClose(handle) == 0;
- }
- }
-
- internal sealed class SafeLsaReturnBufferHandle : SafeBuffer {
- private SafeLsaReturnBufferHandle() : base (true) {}
-
- // 0 is an Invalid Handle
- internal SafeLsaReturnBufferHandle(IntPtr handle) : base (true) {
- SetHandle(handle);
- }
-
- internal static SafeLsaReturnBufferHandle InvalidHandle {
- get { return new SafeLsaReturnBufferHandle(IntPtr.Zero); }
- }
-
- override protected bool ReleaseHandle()
- {
- // LsaFreeReturnBuffer returns an NTSTATUS
- return Win32Native.LsaFreeReturnBuffer(handle) >= 0;
- }
- }
-
- internal sealed class SafeProcessHandle : SafeHandleZeroOrMinusOneIsInvalid {
- private SafeProcessHandle() : base (true) {}
-
- // 0 is an Invalid Handle
- internal SafeProcessHandle(IntPtr handle) : base (true) {
- SetHandle(handle);
- }
-
- internal static SafeProcessHandle InvalidHandle {
- get { return new SafeProcessHandle(IntPtr.Zero); }
- }
-
- override protected bool ReleaseHandle()
- {
- return Win32Native.CloseHandle(handle);
- }
- }
-
- internal sealed class SafeThreadHandle : SafeHandleZeroOrMinusOneIsInvalid {
- private SafeThreadHandle() : base (true) {}
-
- // 0 is an Invalid Handle
- internal SafeThreadHandle(IntPtr handle) : base (true) {
- SetHandle(handle);
- }
-
- override protected bool ReleaseHandle()
- {
- return Win32Native.CloseHandle(handle);
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/SecurityContext.cs b/src/mscorlib/src/System/Security/SecurityContext.cs
deleted file mode 100644
index 674c04196f..0000000000
--- a/src/mscorlib/src/System/Security/SecurityContext.cs
+++ /dev/null
@@ -1,486 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-/*============================================================
-**
-**
-**
-**
-**
-** Purpose: Capture security context for a thread
-**
-**
-===========================================================*/
-namespace System.Security
-{
- using Microsoft.Win32;
- using Microsoft.Win32.SafeHandles;
- using System.Threading;
- using System.Runtime.Remoting;
- using System.Collections;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
- using System.Runtime.InteropServices;
- using System.Runtime.CompilerServices;
-#if FEATURE_CORRUPTING_EXCEPTIONS
- using System.Runtime.ExceptionServices;
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- using System.Runtime.ConstrainedExecution;
- using System.Runtime.Versioning;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- // This enum must be kept in sync with the SecurityContextSource enum in the VM
- public enum SecurityContextSource
- {
- CurrentAppDomain = 0,
- CurrentAssembly
- }
-
- internal enum SecurityContextDisableFlow
- {
- Nothing = 0,
- WI = 0x1,
- All = 0x3FFF
- }
-
-#if FEATURE_COMPRESSEDSTACK
- internal struct SecurityContextSwitcher: IDisposable
- {
- internal SecurityContext.Reader prevSC; // prev SC that we restore on an Undo
- internal SecurityContext currSC; //current SC - SetSecurityContext that created the switcher set this on the Thread
- internal ExecutionContext currEC; // current ExecutionContext on Thread
- internal CompressedStackSwitcher cssw;
-
- public void Dispose()
- {
- Undo();
- }
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- internal bool UndoNoThrow()
- {
- try
- {
- Undo();
- }
- catch
- {
- return false;
- }
- return true;
- }
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- public void Undo()
- {
- if (currSC == null)
- {
- return; // mutiple Undo()s called on this switcher object
- }
-
- if (currEC != null)
- {
- Debug.Assert(currEC == Thread.CurrentThread.GetMutableExecutionContext(), "SecurityContextSwitcher used from another thread");
- Debug.Assert(currSC == currEC.SecurityContext, "SecurityContextSwitcher context mismatch");
-
- // restore the saved security context
- currEC.SecurityContext = prevSC.DangerousGetRawSecurityContext();
- }
- else
- {
- // caller must have already restored the ExecutionContext
- Debug.Assert(Thread.CurrentThread.GetExecutionContextReader().SecurityContext.IsSame(prevSC));
- }
-
- currSC = null; // this will prevent the switcher object being used again
-
- bool bNoException = true;
-
- bNoException &= cssw.UndoNoThrow();
-
-
- if (!bNoException)
- {
- // Failfast since we can't continue safely...
- System.Environment.FailFast(Environment.GetResourceString("ExecutionContext_UndoFailed"));
- }
-
- }
- }
-
- public sealed class SecurityContext : IDisposable
- {
- /*=========================================================================
- ** Data accessed from managed code that needs to be defined in
- ** SecurityContextObject to maintain alignment between the two classes.
- ** DON'T CHANGE THESE UNLESS YOU MODIFY SecurityContextObject in vm\object.h
- =========================================================================*/
-
- private ExecutionContext _executionContext;
- private volatile CompressedStack _compressedStack;
- static private volatile SecurityContext _fullTrustSC;
-
- internal volatile bool isNewCapture = false;
- internal volatile SecurityContextDisableFlow _disableFlow = SecurityContextDisableFlow.Nothing;
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal SecurityContext()
- {
- }
-
- internal struct Reader
- {
- SecurityContext m_sc;
-
- public Reader(SecurityContext sc) { m_sc = sc; }
-
- public SecurityContext DangerousGetRawSecurityContext() { return m_sc; }
-
- public bool IsNull { get { return m_sc == null; } }
- public bool IsSame(SecurityContext sc) { return m_sc == sc; }
- public bool IsSame(SecurityContext.Reader sc) { return m_sc == sc.m_sc; }
-
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public bool IsFlowSuppressed(SecurityContextDisableFlow flags)
- {
- return (m_sc == null) ? false : ((m_sc._disableFlow & flags) == flags);
- }
-
- public CompressedStack CompressedStack { get { return IsNull ? null : m_sc.CompressedStack; } }
-
- public WindowsIdentity WindowsIdentity
- {
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- get { return IsNull ? null : m_sc.WindowsIdentity; }
- }
- }
-
-
- static internal SecurityContext FullTrustSecurityContext
- {
- get
- {
- if (_fullTrustSC == null)
- _fullTrustSC = CreateFullTrustSecurityContext();
- return _fullTrustSC;
- }
- }
-
- // link the security context to an ExecutionContext
- internal ExecutionContext ExecutionContext
- {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- set
- {
- _executionContext = value;
- }
- }
-
- internal CompressedStack CompressedStack
- {
- get
- {
- return _compressedStack;
- }
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- set
- {
- _compressedStack = value;
- }
- }
-
- public void Dispose()
- {
- }
-
- public static AsyncFlowControl SuppressFlow()
- {
- return SuppressFlow(SecurityContextDisableFlow.All);
- }
-
- public static AsyncFlowControl SuppressFlowWindowsIdentity()
- {
- return SuppressFlow(SecurityContextDisableFlow.WI);
- }
-
- internal static AsyncFlowControl SuppressFlow(SecurityContextDisableFlow flags)
- {
- if (IsFlowSuppressed(flags))
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_CannotSupressFlowMultipleTimes"));
- }
-
- ExecutionContext ec = Thread.CurrentThread.GetMutableExecutionContext();
- if (ec.SecurityContext == null)
- ec.SecurityContext = new SecurityContext();
- AsyncFlowControl afc = new AsyncFlowControl();
- afc.Setup(flags);
- return afc;
- }
-
- public static void RestoreFlow()
- {
- SecurityContext sc = Thread.CurrentThread.GetMutableExecutionContext().SecurityContext;
- if (sc == null || sc._disableFlow == SecurityContextDisableFlow.Nothing)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_CannotRestoreUnsupressedFlow"));
- }
- sc._disableFlow = SecurityContextDisableFlow.Nothing;
- }
-
- public static bool IsFlowSuppressed()
- {
- return SecurityContext.IsFlowSuppressed(SecurityContextDisableFlow.All);
- }
-
- internal static bool IsFlowSuppressed(SecurityContextDisableFlow flags)
- {
- return Thread.CurrentThread.GetExecutionContextReader().SecurityContext.IsFlowSuppressed(flags);
- }
-
- // This method is special from a security perspective - the VM will not allow a stack walk to
- // continue past the call to SecurityContext.Run. If you change the signature to this method, or
- // provide an alternate way to do a SecurityContext.Run make sure to update
- // SecurityStackWalk::IsSpecialRunFrame in the VM to search for the new method.
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static void Run(SecurityContext securityContext, ContextCallback callback, Object state)
- {
- if (securityContext == null )
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NullContext"));
- }
- Contract.EndContractBlock();
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMe;
-
- if (!securityContext.isNewCapture)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NotNewCaptureContext"));
- }
-
- securityContext.isNewCapture = false;
-
- ExecutionContext.Reader ec = Thread.CurrentThread.GetExecutionContextReader();
-
- // Optimization: do the callback directly if both the current and target contexts are equal to the
- // default full-trust security context
- if ( SecurityContext.CurrentlyInDefaultFTSecurityContext(ec)
- && securityContext.IsDefaultFTSecurityContext())
- {
- callback(state);
-
- if (GetCurrentWI(Thread.CurrentThread.GetExecutionContextReader()) != null)
- {
- // If we enter here it means the callback did an impersonation
- // that we need to revert.
- // We don't need to revert any other security state since it is stack-based
- // and automatically goes away when the callback returns.
- WindowsIdentity.SafeRevertToSelf(ref stackMark);
- // Ensure we have reverted to the state we entered in.
- Debug.Assert(GetCurrentWI(Thread.CurrentThread.GetExecutionContextReader()) == null);
- }
- }
- else
- {
- RunInternal(securityContext, callback, state);
- }
-
- }
- internal static void RunInternal(SecurityContext securityContext, ContextCallback callBack, Object state)
- {
- if (cleanupCode == null)
- {
- tryCode = new RuntimeHelpers.TryCode(runTryCode);
- cleanupCode = new RuntimeHelpers.CleanupCode(runFinallyCode);
- }
- SecurityContextRunData runData = new SecurityContextRunData(securityContext, callBack, state);
- RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(tryCode, cleanupCode, runData);
-
- }
-
- internal class SecurityContextRunData
- {
- internal SecurityContext sc;
- internal ContextCallback callBack;
- internal Object state;
- internal SecurityContextSwitcher scsw;
- internal SecurityContextRunData(SecurityContext securityContext, ContextCallback cb, Object state)
- {
- this.sc = securityContext;
- this.callBack = cb;
- this.state = state;
- this.scsw = new SecurityContextSwitcher();
- }
- }
-
- static internal void runTryCode(Object userData)
- {
- SecurityContextRunData rData = (SecurityContextRunData) userData;
- rData.scsw = SetSecurityContext(rData.sc, Thread.CurrentThread.GetExecutionContextReader().SecurityContext, modifyCurrentExecutionContext: true);
- rData.callBack(rData.state);
-
- }
-
- [PrePrepareMethod]
- static internal void runFinallyCode(Object userData, bool exceptionThrown)
- {
- SecurityContextRunData rData = (SecurityContextRunData) userData;
- rData.scsw.Undo();
- }
-
- static volatile internal RuntimeHelpers.TryCode tryCode;
- static volatile internal RuntimeHelpers.CleanupCode cleanupCode;
-
-
-
- // Internal API that gets called from public SetSecurityContext and from SetExecutionContext
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- [DynamicSecurityMethodAttribute()]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- internal static SecurityContextSwitcher SetSecurityContext(SecurityContext sc, SecurityContext.Reader prevSecurityContext, bool modifyCurrentExecutionContext)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return SetSecurityContext(sc, prevSecurityContext, modifyCurrentExecutionContext, ref stackMark);
- }
-
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- internal static SecurityContextSwitcher SetSecurityContext(SecurityContext sc, SecurityContext.Reader prevSecurityContext, bool modifyCurrentExecutionContext, ref StackCrawlMark stackMark)
- {
- // Save the flow state at capture and reset it in the SC.
- SecurityContextDisableFlow _capturedFlowState = sc._disableFlow;
- sc._disableFlow = SecurityContextDisableFlow.Nothing;
-
- //Set up the switcher object
- SecurityContextSwitcher scsw = new SecurityContextSwitcher();
- scsw.currSC = sc;
- scsw.prevSC = prevSecurityContext;
-
- if (modifyCurrentExecutionContext)
- {
- // save the current Execution Context
- ExecutionContext currEC = Thread.CurrentThread.GetMutableExecutionContext();
- scsw.currEC = currEC;
- currEC.SecurityContext = sc;
- }
-
- if (sc != null)
- {
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- scsw.cssw = CompressedStack.SetCompressedStack(sc.CompressedStack, prevSecurityContext.CompressedStack);
- }
- catch
- {
- scsw.UndoNoThrow();
- throw;
- }
- }
- return scsw;
- }
-
- /// <internalonly/>
- public SecurityContext CreateCopy()
- {
- if (!isNewCapture)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NotNewCaptureContext"));
- }
-
- SecurityContext sc = new SecurityContext();
- sc.isNewCapture = true;
- sc._disableFlow = _disableFlow;
-
- if (_compressedStack != null)
- sc._compressedStack = _compressedStack.CreateCopy();
-
- return sc;
- }
-
- /// <internalonly/>
- internal SecurityContext CreateMutableCopy()
- {
- Debug.Assert(!this.isNewCapture);
-
- SecurityContext sc = new SecurityContext();
- sc._disableFlow = this._disableFlow;
-
- if (this._compressedStack != null)
- sc._compressedStack = this._compressedStack.CreateCopy();
-
- return sc;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static SecurityContext Capture( )
- {
- // check to see if Flow is suppressed
- if (IsFlowSuppressed())
- return null;
-
- StackCrawlMark stackMark= StackCrawlMark.LookForMyCaller;
- SecurityContext sc = SecurityContext.Capture(Thread.CurrentThread.GetExecutionContextReader(), ref stackMark);
- if (sc == null)
- sc = CreateFullTrustSecurityContext();
- return sc;
- }
-
- // create a clone from a non-existing SecurityContext
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- static internal SecurityContext Capture(ExecutionContext.Reader currThreadEC, ref StackCrawlMark stackMark)
- {
- // check to see if Flow is suppressed
- if (currThreadEC.SecurityContext.IsFlowSuppressed(SecurityContextDisableFlow.All))
- return null;
-
- // If we're in FT right now, return null
- if (CurrentlyInDefaultFTSecurityContext(currThreadEC))
- return null;
-
- return CaptureCore(currThreadEC, ref stackMark);
- }
-
- static private SecurityContext CaptureCore(ExecutionContext.Reader currThreadEC, ref StackCrawlMark stackMark)
- {
- SecurityContext sc = new SecurityContext();
- sc.isNewCapture = true;
-
- // Force create CompressedStack
- sc.CompressedStack = CompressedStack.GetCompressedStack(ref stackMark);
- return sc;
- }
-
- static internal SecurityContext CreateFullTrustSecurityContext()
- {
- SecurityContext sc = new SecurityContext();
- sc.isNewCapture = true;
-
- // Force create CompressedStack
- sc.CompressedStack = new CompressedStack(null);
- return sc;
- }
-
- internal bool IsDefaultFTSecurityContext()
- {
- return (CompressedStack == null || CompressedStack.CompressedStackHandle == null);
- }
- static internal bool CurrentlyInDefaultFTSecurityContext(ExecutionContext threadEC)
- {
- return (IsDefaultThreadSecurityInfo());
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal extern static bool IsDefaultThreadSecurityInfo();
- }
-#endif // FEATURE_COMPRESSEDSTACK
-}
diff --git a/src/mscorlib/src/System/Security/SecurityElement.cs b/src/mscorlib/src/System/Security/SecurityElement.cs
deleted file mode 100644
index f57665b278..0000000000
--- a/src/mscorlib/src/System/Security/SecurityElement.cs
+++ /dev/null
@@ -1,875 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-namespace System.Security
-{
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Security.Util;
- using System.Text;
- using System.Globalization;
- using System.IO;
- using System.Security.Permissions;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- internal enum SecurityElementType
- {
- Regular = 0,
- Format = 1,
- Comment = 2
- }
-
-
- internal interface ISecurityElementFactory
- {
- SecurityElement CreateSecurityElement();
-
- Object Copy();
-
- String GetTag();
-
- String Attribute( String attributeName );
- }
-
- [Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- sealed public class SecurityElement : ISecurityElementFactory
- {
- internal String m_strTag;
- internal String m_strText;
- private ArrayList m_lChildren;
- internal ArrayList m_lAttributes;
- internal SecurityElementType m_type = SecurityElementType.Regular;
-
- private static readonly char[] s_tagIllegalCharacters = new char[] { ' ', '<', '>' };
- private static readonly char[] s_textIllegalCharacters = new char[] { '<', '>' };
- private static readonly char[] s_valueIllegalCharacters = new char[] { '<', '>', '\"' };
- private const String s_strIndent = " ";
-
- private const int c_AttributesTypical = 4 * 2; // 4 attributes, times 2 strings per attribute
- private const int c_ChildrenTypical = 1;
-
- private static readonly String[] s_escapeStringPairs = new String[]
- {
- // these must be all once character escape sequences or a new escaping algorithm is needed
- "<", "&lt;",
- ">", "&gt;",
- "\"", "&quot;",
- "\'", "&apos;",
- "&", "&amp;"
- };
-
- private static readonly char[] s_escapeChars = new char[] { '<', '>', '\"', '\'', '&' };
-
- //-------------------------- Constructors ---------------------------
-
- internal SecurityElement()
- {
- }
-
-////// ISecurityElementFactory implementation
-
- SecurityElement ISecurityElementFactory.CreateSecurityElement()
- {
- return this;
- }
-
- String ISecurityElementFactory.GetTag()
- {
- return ((SecurityElement)this).Tag;
- }
-
- Object ISecurityElementFactory.Copy()
- {
- return ((SecurityElement)this).Copy();
- }
-
- String ISecurityElementFactory.Attribute( String attributeName )
- {
- return ((SecurityElement)this).Attribute( attributeName );
- }
-
- public SecurityElement( String tag )
- {
- if (tag == null)
- throw new ArgumentNullException( nameof(tag) );
-
- if (!IsValidTag( tag ))
- throw new ArgumentException( String.Format( CultureInfo.CurrentCulture, Environment.GetResourceString( "Argument_InvalidElementTag" ), tag ) );
- Contract.EndContractBlock();
-
- m_strTag = tag;
- m_strText = null;
- }
-
- public SecurityElement( String tag, String text )
- {
- if (tag == null)
- throw new ArgumentNullException( nameof(tag) );
-
- if (!IsValidTag( tag ))
- throw new ArgumentException( String.Format( CultureInfo.CurrentCulture, Environment.GetResourceString( "Argument_InvalidElementTag" ), tag ) );
-
- if (text != null && !IsValidText( text ))
- throw new ArgumentException( String.Format( CultureInfo.CurrentCulture, Environment.GetResourceString( "Argument_InvalidElementText" ), text ) );
- Contract.EndContractBlock();
-
- m_strTag = tag;
- m_strText = text;
- }
-
- //-------------------------- Properties -----------------------------
-
- public String Tag
- {
- [Pure]
- get
- {
- return m_strTag;
- }
-
- set
- {
- if (value == null)
- throw new ArgumentNullException( nameof(Tag) );
-
- if (!IsValidTag( value ))
- throw new ArgumentException( String.Format( CultureInfo.CurrentCulture, Environment.GetResourceString( "Argument_InvalidElementTag" ), value ) );
- Contract.EndContractBlock();
-
- m_strTag = value;
- }
- }
-
- public Hashtable Attributes
- {
- get
- {
- if (m_lAttributes == null || m_lAttributes.Count == 0)
- {
- return null;
- }
- else
- {
- Hashtable hashtable = new Hashtable( m_lAttributes.Count/2 );
-
- int iMax = m_lAttributes.Count;
- Debug.Assert( iMax % 2 == 0, "Odd number of strings means the attr/value pairs were not added correctly" );
-
- for (int i = 0; i < iMax; i += 2)
- {
- hashtable.Add( m_lAttributes[i], m_lAttributes[i+1]);
- }
-
- return hashtable;
- }
- }
-
- set
- {
- if (value == null || value.Count == 0)
- {
- m_lAttributes = null;
- }
- else
- {
- ArrayList list = new ArrayList(value.Count);
-
- System.Collections.IDictionaryEnumerator enumerator = (System.Collections.IDictionaryEnumerator)value.GetEnumerator();
-
- while (enumerator.MoveNext())
- {
- String attrName = (String)enumerator.Key;
- String attrValue = (String)enumerator.Value;
-
- if (!IsValidAttributeName( attrName ))
- throw new ArgumentException( String.Format( CultureInfo.CurrentCulture, Environment.GetResourceString( "Argument_InvalidElementName" ), (String)enumerator.Current ) );
-
- if (!IsValidAttributeValue( attrValue ))
- throw new ArgumentException( String.Format( CultureInfo.CurrentCulture, Environment.GetResourceString( "Argument_InvalidElementValue" ), (String)enumerator.Value ) );
-
- list.Add(attrName);
- list.Add(attrValue);
- }
-
- m_lAttributes = list;
- }
- }
- }
-
- public String Text
- {
- get
- {
- return Unescape( m_strText );
- }
-
- set
- {
- if (value == null)
- {
- m_strText = null;
- }
- else
- {
- if (!IsValidText( value ))
- throw new ArgumentException( String.Format( CultureInfo.CurrentCulture, Environment.GetResourceString( "Argument_InvalidElementTag" ), value ) );
-
- m_strText = value;
- }
- }
- }
-
- public ArrayList Children
- {
- get
- {
- ConvertSecurityElementFactories();
- return m_lChildren;
- }
-
- set
- {
- if (value != null)
- {
- IEnumerator enumerator = value.GetEnumerator();
-
- while (enumerator.MoveNext())
- {
- if (enumerator.Current == null)
- throw new ArgumentException( Environment.GetResourceString( "ArgumentNull_Child" ) );
- }
- }
-
- m_lChildren = value;
- }
- }
-
- internal void ConvertSecurityElementFactories()
- {
- if (m_lChildren == null)
- return;
-
- for (int i = 0; i < m_lChildren.Count; ++i)
- {
- ISecurityElementFactory iseFactory = m_lChildren[i] as ISecurityElementFactory;
- if (iseFactory != null && !(m_lChildren[i] is SecurityElement))
- m_lChildren[i] = iseFactory.CreateSecurityElement();
- }
- }
-
- internal ArrayList InternalChildren
- {
- get
- {
- // Beware! This array list can contain SecurityElements and other ISecurityElementFactories.
- // If you want to get a consistent SecurityElement view, call get_Children.
- return m_lChildren;
- }
- }
-
- //-------------------------- Public Methods -----------------------------
-
- internal void AddAttributeSafe( String name, String value )
- {
- if (m_lAttributes == null)
- {
- m_lAttributes = new ArrayList( c_AttributesTypical );
- }
- else
- {
- int iMax = m_lAttributes.Count;
- Debug.Assert( iMax % 2 == 0, "Odd number of strings means the attr/value pairs were not added correctly" );
-
- for (int i = 0; i < iMax; i += 2)
- {
- String strAttrName = (String)m_lAttributes[i];
-
- if (String.Equals(strAttrName, name))
- throw new ArgumentException( Environment.GetResourceString( "Argument_AttributeNamesMustBeUnique" ) );
- }
- }
-
- m_lAttributes.Add(name);
- m_lAttributes.Add(value);
- }
-
- public void AddAttribute( String name, String value )
- {
- if (name == null)
- throw new ArgumentNullException( nameof(name) );
-
- if (value == null)
- throw new ArgumentNullException( nameof(value) );
-
- if (!IsValidAttributeName( name ))
- throw new ArgumentException( String.Format( CultureInfo.CurrentCulture, Environment.GetResourceString( "Argument_InvalidElementName" ), name ) );
-
- if (!IsValidAttributeValue( value ))
- throw new ArgumentException( String.Format( CultureInfo.CurrentCulture, Environment.GetResourceString( "Argument_InvalidElementValue" ), value ) );
- Contract.EndContractBlock();
-
- AddAttributeSafe( name, value );
- }
-
- public void AddChild( SecurityElement child )
- {
- if (child == null)
- throw new ArgumentNullException( nameof(child) );
- Contract.EndContractBlock();
-
- if (m_lChildren == null)
- m_lChildren = new ArrayList( c_ChildrenTypical );
-
- m_lChildren.Add( child );
- }
-
- internal void AddChild( ISecurityElementFactory child )
- {
- if (child == null)
- throw new ArgumentNullException( nameof(child) );
- Contract.EndContractBlock();
-
- if (m_lChildren == null)
- m_lChildren = new ArrayList( c_ChildrenTypical );
-
- m_lChildren.Add( child );
- }
-
- internal void AddChildNoDuplicates( ISecurityElementFactory child )
- {
- if (child == null)
- throw new ArgumentNullException( nameof(child) );
- Contract.EndContractBlock();
-
- if (m_lChildren == null)
- {
- m_lChildren = new ArrayList( c_ChildrenTypical );
- m_lChildren.Add( child );
- }
- else
- {
- for (int i = 0; i < m_lChildren.Count; ++i)
- {
- if (m_lChildren[i] == child)
- return;
- }
- m_lChildren.Add( child );
- }
- }
-
- public bool Equal( SecurityElement other )
- {
- if (other == null)
- return false;
-
- // Check if the tags are the same
- if (!String.Equals(m_strTag, other.m_strTag))
- return false;
-
- // Check if the text is the same
- if (!String.Equals(m_strText, other.m_strText))
- return false;
-
- // Check if the attributes are the same and appear in the same
- // order.
-
- // Maybe we can get away by only checking the number of attributes
- if (m_lAttributes == null || other.m_lAttributes == null)
- {
- if (m_lAttributes != other.m_lAttributes)
- return false;
- }
- else
- {
- int iMax = m_lAttributes.Count;
- Debug.Assert( iMax % 2 == 0, "Odd number of strings means the attr/value pairs were not added correctly" );
-
- if (iMax != other.m_lAttributes.Count)
- return false;
-
- for (int i = 0; i < iMax; i++)
- {
- String lhs = (String)m_lAttributes[i];
- String rhs = (String)other.m_lAttributes[i];
-
- if (!String.Equals(lhs, rhs))
- return false;
- }
- }
-
- // Finally we must check the child and make sure they are
- // equal and in the same order
-
- // Maybe we can get away by only checking the number of children
- if (m_lChildren == null || other.m_lChildren == null)
- {
- if (m_lChildren != other.m_lChildren)
- return false;
- }
- else
- {
- if (m_lChildren.Count != other.m_lChildren.Count)
- return false;
-
- this.ConvertSecurityElementFactories();
- other.ConvertSecurityElementFactories();
-
- // Okay, we'll need to go through each one of them
- IEnumerator lhs = m_lChildren.GetEnumerator();
- IEnumerator rhs = other.m_lChildren.GetEnumerator();
-
- SecurityElement e1, e2;
- while (lhs.MoveNext())
- {
- rhs.MoveNext();
- e1 = (SecurityElement)lhs.Current;
- e2 = (SecurityElement)rhs.Current;
- if (e1 == null || !e1.Equal(e2))
- return false;
- }
- }
- return true;
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public SecurityElement Copy()
- {
- SecurityElement element = new SecurityElement( this.m_strTag, this.m_strText );
- element.m_lChildren = this.m_lChildren == null ? null : new ArrayList( this.m_lChildren );
- element.m_lAttributes = this.m_lAttributes == null ? null : new ArrayList(this.m_lAttributes);
-
- return element;
- }
-
- [Pure]
- public static bool IsValidTag( String tag )
- {
- if (tag == null)
- return false;
-
- return tag.IndexOfAny( s_tagIllegalCharacters ) == -1;
- }
-
- [Pure]
- public static bool IsValidText( String text )
- {
- if (text == null)
- return false;
-
- return text.IndexOfAny( s_textIllegalCharacters ) == -1;
- }
-
- [Pure]
- public static bool IsValidAttributeName( String name )
- {
- return IsValidTag( name );
- }
-
- [Pure]
- public static bool IsValidAttributeValue( String value )
- {
- if (value == null)
- return false;
-
- return value.IndexOfAny( s_valueIllegalCharacters ) == -1;
- }
-
- private static String GetEscapeSequence( char c )
- {
- int iMax = s_escapeStringPairs.Length;
- Debug.Assert( iMax % 2 == 0, "Odd number of strings means the attr/value pairs were not added correctly" );
-
- for (int i = 0; i < iMax; i += 2)
- {
- String strEscSeq = s_escapeStringPairs[i];
- String strEscValue = s_escapeStringPairs[i+1];
-
- if (strEscSeq[0] == c)
- return strEscValue;
- }
-
- Debug.Assert( false, "Unable to find escape sequence for this character" );
- return c.ToString();
- }
-
- public static String Escape( String str )
- {
- if (str == null)
- return null;
-
- StringBuilder sb = null;
-
- int strLen = str.Length;
- int index; // Pointer into the string that indicates the location of the current '&' character
- int newIndex = 0; // Pointer into the string that indicates the start index of the "remaining" string (that still needs to be processed).
-
-
- do
- {
- index = str.IndexOfAny( s_escapeChars, newIndex );
-
- if (index == -1)
- {
- if (sb == null)
- return str;
- else
- {
- sb.Append( str, newIndex, strLen - newIndex );
- return sb.ToString();
- }
- }
- else
- {
- if (sb == null)
- sb = new StringBuilder();
-
- sb.Append( str, newIndex, index - newIndex );
- sb.Append( GetEscapeSequence( str[index] ) );
-
- newIndex = ( index + 1 );
- }
- }
- while (true);
-
- // no normal exit is possible
- }
-
- private static String GetUnescapeSequence( String str, int index, out int newIndex )
- {
- int maxCompareLength = str.Length - index;
-
- int iMax = s_escapeStringPairs.Length;
- Debug.Assert( iMax % 2 == 0, "Odd number of strings means the attr/value pairs were not added correctly" );
-
- for (int i = 0; i < iMax; i += 2)
- {
- String strEscSeq = s_escapeStringPairs[i];
- String strEscValue = s_escapeStringPairs[i+1];
-
- int length = strEscValue.Length;
-
- if (length <= maxCompareLength && String.Compare( strEscValue, 0, str, index, length, StringComparison.Ordinal) == 0)
- {
- newIndex = index + strEscValue.Length;
- return strEscSeq;
- }
- }
-
- newIndex = index + 1;
- return str[index].ToString();
- }
-
-
- private static String Unescape( String str )
- {
- if (str == null)
- return null;
-
- StringBuilder sb = null;
-
- int strLen = str.Length;
- int index; // Pointer into the string that indicates the location of the current '&' character
- int newIndex = 0; // Pointer into the string that indicates the start index of the "remainging" string (that still needs to be processed).
-
- do
- {
- index = str.IndexOf( '&', newIndex );
-
- if (index == -1)
- {
- if (sb == null)
- return str;
- else
- {
- sb.Append( str, newIndex, strLen - newIndex );
- return sb.ToString();
- }
- }
- else
- {
- if (sb == null)
- sb = new StringBuilder();
-
- sb.Append(str, newIndex, index - newIndex);
- sb.Append( GetUnescapeSequence( str, index, out newIndex ) ); // updates the newIndex too
-
- }
- }
- while (true);
-
- // C# reports a warning if I leave this in, but I still kinda want to just in case.
- // Debug.Assert( false, "If you got here, the execution engine or compiler is really confused" );
- // return str;
- }
-
- private delegate void ToStringHelperFunc( Object obj, String str );
-
- private static void ToStringHelperStringBuilder( Object obj, String str )
- {
- ((StringBuilder)obj).Append( str );
- }
-
- public override String ToString ()
- {
- StringBuilder sb = new StringBuilder();
-
- ToString( "", sb, new ToStringHelperFunc( ToStringHelperStringBuilder ) );
-
- return sb.ToString();
- }
-
- private void ToString( String indent, Object obj, ToStringHelperFunc func )
- {
- // First add the indent
-
- // func( obj, indent );
-
- // Add in the opening bracket and the tag.
-
- func( obj, "<" );
-
- switch (m_type)
- {
- case SecurityElementType.Format:
- func( obj, "?" );
- break;
-
- case SecurityElementType.Comment:
- func( obj, "!" );
- break;
-
- default:
- break;
- }
-
- func( obj, m_strTag );
-
- // If there are any attributes, plop those in.
-
- if (m_lAttributes != null && m_lAttributes.Count > 0)
- {
- func( obj, " " );
-
- int iMax = m_lAttributes.Count;
- Debug.Assert( iMax % 2 == 0, "Odd number of strings means the attr/value pairs were not added correctly" );
-
- for (int i = 0; i < iMax; i += 2)
- {
- String strAttrName = (String)m_lAttributes[i];
- String strAttrValue = (String)m_lAttributes[i+1];
-
- func( obj, strAttrName );
- func( obj, "=\"" );
- func( obj, strAttrValue );
- func( obj, "\"" );
-
- if (i != m_lAttributes.Count - 2)
- {
- if (m_type == SecurityElementType.Regular)
- {
- func( obj, Environment.NewLine );
- }
- else
- {
- func( obj, " " );
- }
- }
- }
- }
-
- if (m_strText == null && (m_lChildren == null || m_lChildren.Count == 0))
- {
- // If we are a single tag with no children, just add the end of tag text.
-
- switch (m_type)
- {
- case SecurityElementType.Comment:
- func( obj, ">" );
- break;
-
- case SecurityElementType.Format:
- func( obj, " ?>" );
- break;
-
- default:
- func( obj, "/>" );
- break;
- }
- func( obj, Environment.NewLine );
- }
- else
- {
- // Close the current tag.
-
- func( obj, ">" );
-
- // Output the text
-
- func( obj, m_strText );
-
- // Output any children.
-
- if (m_lChildren != null)
- {
- this.ConvertSecurityElementFactories();
-
- func( obj, Environment.NewLine );
-
- // String childIndent = indent + s_strIndent;
-
- for (int i = 0; i < m_lChildren.Count; ++i)
- {
- ((SecurityElement)m_lChildren[i]).ToString( "", obj, func );
- }
-
- // In the case where we have children, the close tag will not be on the same line as the
- // opening tag, so we need to indent.
-
- // func( obj, indent );
- }
-
- // Output the closing tag
-
- func( obj, "</" );
- func( obj, m_strTag );
- func( obj, ">" );
- func( obj, Environment.NewLine );
- }
- }
-
-
-
- public String Attribute( String name )
- {
- if (name == null)
- throw new ArgumentNullException( nameof(name) );
- Contract.EndContractBlock();
-
- // Note: we don't check for validity here because an
- // if an invalid name is passed we simply won't find it.
-
- if (m_lAttributes == null)
- return null;
-
- // Go through all the attribute and see if we know about
- // the one we are asked for
-
- int iMax = m_lAttributes.Count;
- Debug.Assert( iMax % 2 == 0, "Odd number of strings means the attr/value pairs were not added correctly" );
-
- for (int i = 0; i < iMax; i += 2)
- {
- String strAttrName = (String)m_lAttributes[i];
-
- if (String.Equals(strAttrName, name))
- {
- String strAttrValue = (String)m_lAttributes[i+1];
-
- return Unescape(strAttrValue);
- }
- }
-
- // In the case where we didn't find it, we are expected to
- // return null
- return null;
- }
-
- public SecurityElement SearchForChildByTag( String tag )
- {
- // Go through all the children and see if we can
- // find the one are are asked for (matching tags)
-
- if (tag == null)
- throw new ArgumentNullException( nameof(tag) );
- Contract.EndContractBlock();
-
- // Note: we don't check for a valid tag here because
- // an invalid tag simply won't be found.
-
- if (m_lChildren == null)
- return null;
-
- IEnumerator enumerator = m_lChildren.GetEnumerator();
-
- while (enumerator.MoveNext())
- {
- SecurityElement current = (SecurityElement)enumerator.Current;
-
- if (current != null && String.Equals(current.Tag, tag))
- return current;
- }
- return null;
- }
-
- internal String SearchForTextOfLocalName(String strLocalName)
- {
- // Search on each child in order and each
- // child's child, depth-first
-
- if (strLocalName == null)
- throw new ArgumentNullException( nameof(strLocalName) );
- Contract.EndContractBlock();
-
- // Note: we don't check for a valid tag here because
- // an invalid tag simply won't be found.
-
- // First we check this.
-
- if (m_strTag == null) return null;
- if (m_strTag.Equals( strLocalName ) || m_strTag.EndsWith( ":" + strLocalName, StringComparison.Ordinal ))
- return Unescape( m_strText );
- if (m_lChildren == null)
- return null;
-
- IEnumerator enumerator = m_lChildren.GetEnumerator();
-
- while (enumerator.MoveNext())
- {
- String current = ((SecurityElement)enumerator.Current).SearchForTextOfLocalName( strLocalName );
-
- if (current != null)
- return current;
- }
- return null;
- }
-
- public String SearchForTextOfTag( String tag )
- {
- // Search on each child in order and each
- // child's child, depth-first
-
- if (tag == null)
- throw new ArgumentNullException( nameof(tag) );
- Contract.EndContractBlock();
-
- // Note: we don't check for a valid tag here because
- // an invalid tag simply won't be found.
-
- // First we check this.
-
- if (String.Equals(m_strTag, tag))
- return Unescape( m_strText );
- if (m_lChildren == null)
- return null;
-
- IEnumerator enumerator = m_lChildren.GetEnumerator();
-
- this.ConvertSecurityElementFactories();
-
- while (enumerator.MoveNext())
- {
- String current = ((SecurityElement)enumerator.Current).SearchForTextOfTag( tag );
-
- if (current != null)
- return current;
- }
- return null;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/SecurityException.cs b/src/mscorlib/src/System/Security/SecurityException.cs
index c76674cdb9..8811be82ff 100644
--- a/src/mscorlib/src/System/Security/SecurityException.cs
+++ b/src/mscorlib/src/System/Security/SecurityException.cs
@@ -18,30 +18,23 @@ namespace System.Security
using System.Security;
using System;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Reflection;
using System.Text;
using System.Security.Policy;
using System.IO;
-#if FEATURE_SERIALIZATION
- using System.Runtime.Serialization.Formatters.Binary;
-#endif // FEATURE_SERIALIZATION
using System.Globalization;
- using System.Security.Util;
using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class SecurityException : SystemException
{
internal static string GetResString(string sResourceName)
{
- PermissionSet.s_fullTrust.Assert();
return Environment.GetResourceString(sResourceName);
}
#pragma warning disable 618
- internal static Exception MakeSecurityException(AssemblyName asmName, Evidence asmEvidence, PermissionSet granted, PermissionSet refused, RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand, IPermission permThatFailed)
+ internal static Exception MakeSecurityException(AssemblyName asmName, Evidence asmEvidence, RuntimeMethodHandleInternal rmh, Object demand)
#pragma warning restore 618
{
return new SecurityException(GetResString("Arg_SecurityException"));
@@ -66,16 +59,6 @@ namespace System.Security
SetErrorCode(System.__HResults.COR_E_SECURITY);
}
- internal SecurityException(PermissionSet grantedSetObj, PermissionSet refusedSetObj)
- : this(){}
-#pragma warning disable 618
- internal SecurityException(string message, AssemblyName assemblyName, PermissionSet grant, PermissionSet refused, MethodInfo method, SecurityAction action, Object demanded, IPermission permThatFailed, Evidence evidence)
-#pragma warning restore 618
- : this(){}
-
- internal SecurityException(string message, Object deny, Object permitOnly, MethodInfo method, Object demanded, IPermission permThatFailed)
- : this(){}
-
protected SecurityException(SerializationInfo info, StreamingContext context) : base(info, context)
{
if (info == null)
@@ -88,22 +71,6 @@ namespace System.Security
return base.ToString();
}
- private bool CanAccessSensitiveInfo()
- {
- bool retVal = false;
- try
- {
-#pragma warning disable 618
- new SecurityPermission(SecurityPermissionFlag.ControlEvidence | SecurityPermissionFlag.ControlPolicy).Demand();
-#pragma warning restore 618
- retVal = true;
- }
- catch (SecurityException)
- {
- }
- return retVal;
- }
-
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
diff --git a/src/mscorlib/src/System/Security/SecurityManager.cs b/src/mscorlib/src/System/Security/SecurityManager.cs
deleted file mode 100644
index 933fe0be3d..0000000000
--- a/src/mscorlib/src/System/Security/SecurityManager.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-// The SecurityManager class provides a general purpose API for interacting
-// with the security system.
-//
-
-namespace System.Security
-{
- using System;
- using System.Security.Permissions;
- using System.Runtime.InteropServices;
- using System.Runtime.CompilerServices;
-
- [Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum PolicyLevelType
- {
- User = 0,
- Machine = 1,
- Enterprise = 2,
- AppDomain = 3
- }
-
- [System.Runtime.InteropServices.ComVisible(true)]
- static public class SecurityManager
- {
- private static int[][] s_BuiltInPermissionIndexMap = {
- new int[] { BuiltInPermissionIndex.EnvironmentPermissionIndex, (int) PermissionType.EnvironmentPermission },
- new int[] { BuiltInPermissionIndex.FileDialogPermissionIndex, (int) PermissionType.FileDialogPermission },
- new int[] { BuiltInPermissionIndex.FileIOPermissionIndex, (int) PermissionType.FileIOPermission },
- new int[] { BuiltInPermissionIndex.ReflectionPermissionIndex, (int) PermissionType.ReflectionPermission },
- new int[] { BuiltInPermissionIndex.SecurityPermissionIndex, (int) PermissionType.SecurityPermission },
- new int[] { BuiltInPermissionIndex.UIPermissionIndex, (int) PermissionType.UIPermission }
- };
-
- private static CodeAccessPermission[] s_UnrestrictedSpecialPermissionMap = {
- new EnvironmentPermission(PermissionState.Unrestricted),
- new FileDialogPermission(PermissionState.Unrestricted),
- new FileIOPermission(PermissionState.Unrestricted),
- new ReflectionPermission(PermissionState.Unrestricted),
- new SecurityPermission(PermissionState.Unrestricted),
- new UIPermission(PermissionState.Unrestricted)
- };
-
- internal static int GetSpecialFlags (PermissionSet grantSet, PermissionSet deniedSet) {
- if ((grantSet != null && grantSet.IsUnrestricted()) && (deniedSet == null || deniedSet.IsEmpty())) {
- return -1;
- }
- else {
- SecurityPermission securityPermission = null;
-#pragma warning disable 618
- SecurityPermissionFlag securityPermissionFlags = SecurityPermissionFlag.NoFlags;
-#pragma warning restore 618
- ReflectionPermission reflectionPermission = null;
- ReflectionPermissionFlag reflectionPermissionFlags = ReflectionPermissionFlag.NoFlags;
-
- CodeAccessPermission[] specialPermissions = new CodeAccessPermission[6];
- if (grantSet != null) {
- if (grantSet.IsUnrestricted()) {
-#pragma warning disable 618
- securityPermissionFlags = SecurityPermissionFlag.AllFlags;
-#pragma warning restore 618
- reflectionPermissionFlags = ReflectionPermission.AllFlagsAndMore;
- for (int i = 0; i < specialPermissions.Length; i++) {
- specialPermissions[i] = s_UnrestrictedSpecialPermissionMap[i];
- }
- }
- else {
- securityPermission = grantSet.GetPermission(BuiltInPermissionIndex.SecurityPermissionIndex) as SecurityPermission;
- if (securityPermission != null)
- securityPermissionFlags = securityPermission.Flags;
- reflectionPermission = grantSet.GetPermission(BuiltInPermissionIndex.ReflectionPermissionIndex) as ReflectionPermission;
- if (reflectionPermission != null)
- reflectionPermissionFlags = reflectionPermission.Flags;
- for (int i = 0; i < specialPermissions.Length; i++) {
- specialPermissions[i] = grantSet.GetPermission(s_BuiltInPermissionIndexMap[i][0]) as CodeAccessPermission;
- }
- }
- }
-
- if (deniedSet != null) {
- if (deniedSet.IsUnrestricted()) {
-#pragma warning disable 618
- securityPermissionFlags = SecurityPermissionFlag.NoFlags;
-#pragma warning restore 618
- reflectionPermissionFlags = ReflectionPermissionFlag.NoFlags;
- for (int i = 0; i < s_BuiltInPermissionIndexMap.Length; i++) {
- specialPermissions[i] = null;
- }
- }
- else {
- securityPermission = deniedSet.GetPermission(BuiltInPermissionIndex.SecurityPermissionIndex) as SecurityPermission;
- if (securityPermission != null)
- securityPermissionFlags &= ~securityPermission.Flags;
- reflectionPermission = deniedSet.GetPermission(BuiltInPermissionIndex.ReflectionPermissionIndex) as ReflectionPermission;
- if (reflectionPermission != null)
- reflectionPermissionFlags &= ~reflectionPermission.Flags;
- for (int i = 0; i < s_BuiltInPermissionIndexMap.Length; i++) {
- CodeAccessPermission deniedSpecialPermission = deniedSet.GetPermission(s_BuiltInPermissionIndexMap[i][0]) as CodeAccessPermission;
- if (deniedSpecialPermission != null && !deniedSpecialPermission.IsSubsetOf(null))
- specialPermissions[i] = null; // we don't care about the exact value here.
- }
- }
- }
- int flags = MapToSpecialFlags(securityPermissionFlags, reflectionPermissionFlags);
- if (flags != -1) {
- for (int i = 0; i < specialPermissions.Length; i++) {
- if (specialPermissions[i] != null && ((IUnrestrictedPermission) specialPermissions[i]).IsUnrestricted())
- flags |= (1 << (int) s_BuiltInPermissionIndexMap[i][1]);
- }
- }
- return flags;
- }
- }
-
-#pragma warning disable 618
- private static int MapToSpecialFlags (SecurityPermissionFlag securityPermissionFlags, ReflectionPermissionFlag reflectionPermissionFlags) {
- int flags = 0;
- if ((securityPermissionFlags & SecurityPermissionFlag.UnmanagedCode) == SecurityPermissionFlag.UnmanagedCode)
- flags |= (1 << (int) PermissionType.SecurityUnmngdCodeAccess);
- if ((securityPermissionFlags & SecurityPermissionFlag.SkipVerification) == SecurityPermissionFlag.SkipVerification)
- flags |= (1 << (int) PermissionType.SecuritySkipVerification);
- if ((securityPermissionFlags & SecurityPermissionFlag.Assertion) == SecurityPermissionFlag.Assertion)
- flags |= (1 << (int) PermissionType.SecurityAssert);
- if ((securityPermissionFlags & SecurityPermissionFlag.SerializationFormatter) == SecurityPermissionFlag.SerializationFormatter)
- flags |= (1 << (int) PermissionType.SecuritySerialization);
- if ((securityPermissionFlags & SecurityPermissionFlag.BindingRedirects) == SecurityPermissionFlag.BindingRedirects)
- flags |= (1 << (int) PermissionType.SecurityBindingRedirects);
- if ((securityPermissionFlags & SecurityPermissionFlag.ControlEvidence) == SecurityPermissionFlag.ControlEvidence)
- flags |= (1 << (int) PermissionType.SecurityControlEvidence);
- if ((securityPermissionFlags & SecurityPermissionFlag.ControlPrincipal) == SecurityPermissionFlag.ControlPrincipal)
- flags |= (1 << (int) PermissionType.SecurityControlPrincipal);
-
- if ((reflectionPermissionFlags & ReflectionPermissionFlag.RestrictedMemberAccess) == ReflectionPermissionFlag.RestrictedMemberAccess)
- flags |= (1 << (int)PermissionType.ReflectionRestrictedMemberAccess);
- if ((reflectionPermissionFlags & ReflectionPermissionFlag.MemberAccess) == ReflectionPermissionFlag.MemberAccess)
- flags |= (1 << (int) PermissionType.ReflectionMemberAccess);
-
- return flags;
- }
-#pragma warning restore 618
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- internal static extern bool IsSameType(String strLeft, String strRight);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern bool _SetThreadSecurity(bool bThreadSecurity);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- internal static extern void GetGrantedPermissions(ObjectHandleOnStack retGranted, ObjectHandleOnStack retDenied, StackCrawlMarkHandle stackMark);
- }
-}
diff --git a/src/mscorlib/src/System/Security/SecurityRuntime.cs b/src/mscorlib/src/System/Security/SecurityRuntime.cs
deleted file mode 100644
index d037fe939d..0000000000
--- a/src/mscorlib/src/System/Security/SecurityRuntime.cs
+++ /dev/null
@@ -1,159 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-
-namespace System.Security
-{
- using System;
- using System.Globalization;
- using System.Threading;
- using System.Reflection;
- using System.Collections;
- using System.Runtime.CompilerServices;
- using System.Security.Permissions;
- using System.Runtime.Versioning;
- using System.Diagnostics.Contracts;
-
- internal class SecurityRuntime
- {
- private SecurityRuntime(){}
-
- // Returns the security object for the caller of the method containing
- // 'stackMark' on its frame.
- //
- // THE RETURNED OBJECT IS THE LIVE RUNTIME OBJECT. BE CAREFUL WITH IT!
- //
- // Internal only, do not doc.
- //
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern
- FrameSecurityDescriptor GetSecurityObjectForFrame(ref StackCrawlMark stackMark,
- bool create);
-
- // Constants used to return status to native
- internal const bool StackContinue = true;
- internal const bool StackHalt = false;
-
- // this method is a big perf hit, so don't call unnecessarily
- internal static MethodInfo GetMethodInfo(RuntimeMethodHandleInternal rmh)
- {
- if (rmh.IsNullHandle())
- return null;
-
-#if _DEBUG
- try
- {
-#endif
- // Assert here because reflection will check grants and if we fail the check,
- // there will be an infinite recursion that overflows the stack.
- PermissionSet.s_fullTrust.Assert();
- return (System.RuntimeType.GetMethodBase(RuntimeMethodHandle.GetDeclaringType(rmh), rmh) as MethodInfo);
-#if _DEBUG
- }
- catch(Exception)
- {
- return null;
- }
-#endif
- }
-
- private static bool FrameDescSetHelper(FrameSecurityDescriptor secDesc,
- PermissionSet demandSet,
- out PermissionSet alteredDemandSet,
- RuntimeMethodHandleInternal rmh)
- {
- return secDesc.CheckSetDemand(demandSet, out alteredDemandSet, rmh);
- }
-
- private static bool FrameDescHelper(FrameSecurityDescriptor secDesc,
- IPermission demandIn,
- PermissionToken permToken,
- RuntimeMethodHandleInternal rmh)
- {
- return secDesc.CheckDemand((CodeAccessPermission) demandIn, permToken, rmh);
- }
-
-#if FEATURE_COMPRESSEDSTACK
- private static bool CheckDynamicMethodSetHelper(System.Reflection.Emit.DynamicResolver dynamicResolver,
- PermissionSet demandSet,
- out PermissionSet alteredDemandSet,
- RuntimeMethodHandleInternal rmh)
- {
- System.Threading.CompressedStack creationStack = dynamicResolver.GetSecurityContext();
- bool result;
- try
- {
- result = creationStack.CheckSetDemandWithModificationNoHalt(demandSet, out alteredDemandSet, rmh);
- }
- catch (SecurityException ex)
- {
- throw new SecurityException(Environment.GetResourceString("Security_AnonymouslyHostedDynamicMethodCheckFailed"), ex);
- }
-
- return result;
- }
-
- private static bool CheckDynamicMethodHelper(System.Reflection.Emit.DynamicResolver dynamicResolver,
- IPermission demandIn,
- PermissionToken permToken,
- RuntimeMethodHandleInternal rmh)
- {
- System.Threading.CompressedStack creationStack = dynamicResolver.GetSecurityContext();
- bool result;
- try
- {
- result = creationStack.CheckDemandNoHalt((CodeAccessPermission)demandIn, permToken, rmh);
- }
- catch (SecurityException ex)
- {
- throw new SecurityException(Environment.GetResourceString("Security_AnonymouslyHostedDynamicMethodCheckFailed"), ex);
- }
- return result;
- }
-#endif // FEATURE_COMPRESSEDSTACK
-
- //
- // API for PermissionSets
- //
-
- internal static void Assert(PermissionSet permSet, ref StackCrawlMark stackMark)
- {
- }
-
- internal static void AssertAllPossible(ref StackCrawlMark stackMark)
- {
- }
-
- internal static void Deny(PermissionSet permSet, ref StackCrawlMark stackMark)
- {
- }
-
- internal static void PermitOnly(PermissionSet permSet, ref StackCrawlMark stackMark)
- {
- }
-
- //
- // Revert API
- //
-
- internal static void RevertAssert(ref StackCrawlMark stackMark)
- {
- }
-
- internal static void RevertDeny(ref StackCrawlMark stackMark)
- {
- }
-
- internal static void RevertPermitOnly(ref StackCrawlMark stackMark)
- {
- }
-
- internal static void RevertAll(ref StackCrawlMark stackMark)
- {
- }
- }
-}
-
-
diff --git a/src/mscorlib/src/System/Security/SecurityState.cs b/src/mscorlib/src/System/Security/SecurityState.cs
index 3c7f8bf49f..55dcce07c0 100644
--- a/src/mscorlib/src/System/Security/SecurityState.cs
+++ b/src/mscorlib/src/System/Security/SecurityState.cs
@@ -3,7 +3,6 @@
// See the LICENSE file in the project root for more information.
using System;
using System.Security;
-using System.Security.Permissions;
namespace System.Security
{
diff --git a/src/mscorlib/src/System/Security/SecurityZone.cs b/src/mscorlib/src/System/Security/SecurityZone.cs
deleted file mode 100644
index a74b637846..0000000000
--- a/src/mscorlib/src/System/Security/SecurityZone.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-//
-// Enumeration of the zones code can come from
-//
-
-namespace System.Security
-{
- using System;
- using System.Runtime.InteropServices;
-
- // The quick cache code depends on the values in this enumeration. Any change to this enumeration should
- // be reflected in PolicyManager.GenerateQuickCache as well.
- [ComVisible(true)]
- [Serializable]
- public enum SecurityZone
- {
- MyComputer = 0,
- Intranet = 1,
- Trusted = 2,
- Internet = 3,
- Untrusted = 4,
-
- NoZone = -1, // No Zone Information
- }
-}
diff --git a/src/mscorlib/src/System/Security/Util/Config.cs b/src/mscorlib/src/System/Security/Util/Config.cs
deleted file mode 100644
index afc9b8c336..0000000000
--- a/src/mscorlib/src/System/Security/Util/Config.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Util {
- using System;
- using System.Security.Util;
- using System.Security.Policy;
- using System.Security.Permissions;
- using System.Collections;
- using System.IO;
- using System.Reflection;
- using System.Globalization;
- using System.Text;
-#if FEATURE_SERIALIZATION
- using System.Runtime.Serialization.Formatters.Binary;
-#endif // FEATURE_SERIALIZATION
- using System.Threading;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Runtime.Versioning;
-
- // Duplicated in vm\COMSecurityConfig.h
-[Serializable]
-[Flags]
- internal enum QuickCacheEntryType
- {
- FullTrustZoneMyComputer = 0x1000000,
- FullTrustZoneIntranet = 0x2000000,
- FullTrustZoneInternet = 0x4000000,
- FullTrustZoneTrusted = 0x8000000,
- FullTrustZoneUntrusted = 0x10000000,
- FullTrustAll = 0x20000000,
- }
-
- internal static class Config {
- private static volatile string m_machineConfig;
- private static volatile string m_userConfig;
-
- private static void GetFileLocales()
- {
- if (m_machineConfig == null)
- {
- string machineConfig = null;
- GetMachineDirectory(JitHelpers.GetStringHandleOnStack(ref machineConfig));
- m_machineConfig = machineConfig;
- }
- if (m_userConfig == null)
- {
- string userConfig = null;
- GetUserDirectory(JitHelpers.GetStringHandleOnStack(ref userConfig));
- m_userConfig = userConfig;
- }
- }
-
- internal static string MachineDirectory
- {
- get
- {
- GetFileLocales();
- return m_machineConfig;
- }
- }
-
- internal static string UserDirectory
- {
- get
- {
- GetFileLocales();
- return m_userConfig;
- }
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
- private static extern void GetMachineDirectory(StringHandleOnStack retDirectory);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
- private static extern void GetUserDirectory(StringHandleOnStack retDirectory);
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
- internal static extern bool WriteToEventLog(string message);
- }
-}
diff --git a/src/mscorlib/src/System/Security/Util/Hex.cs b/src/mscorlib/src/System/Security/Util/Hex.cs
deleted file mode 100644
index 4ca1cf678b..0000000000
--- a/src/mscorlib/src/System/Security/Util/Hex.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*
- *
- * Operations to convert to and from Hex
- *
- */
-
-namespace System.Security.Util
-{
- using System;
- using System.Security;
- using System.Diagnostics.Contracts;
- internal static class Hex
- {
- // converts number to hex digit. Does not do any range checks.
- static char HexDigit(int num) {
- return (char)((num < 10) ? (num + '0') : (num + ('A' - 10)));
- }
-
- public static String EncodeHexString(byte[] sArray)
- {
- String result = null;
-
- if(sArray != null) {
- char[] hexOrder = new char[sArray.Length * 2];
-
- int digit;
- for(int i = 0, j = 0; i < sArray.Length; i++) {
- digit = (int)((sArray[i] & 0xf0) >> 4);
- hexOrder[j++] = HexDigit(digit);
- digit = (int)(sArray[i] & 0x0f);
- hexOrder[j++] = HexDigit(digit);
- }
- result = new String(hexOrder);
- }
- return result;
- }
-
- internal static string EncodeHexStringFromInt(byte[] sArray) {
- String result = null;
- if(sArray != null) {
- char[] hexOrder = new char[sArray.Length * 2];
-
- int i = sArray.Length;
- int digit, j=0;
- while (i-- > 0) {
- digit = (sArray[i] & 0xf0) >> 4;
- hexOrder[j++] = HexDigit(digit);
- digit = sArray[i] & 0x0f;
- hexOrder[j++] = HexDigit(digit);
- }
- result = new String(hexOrder);
- }
- return result;
- }
-
- public static int ConvertHexDigit(Char val)
- {
- if (val <= '9' && val >= '0')
- return (val - '0');
- else if (val >= 'a' && val <= 'f')
- return ((val - 'a') + 10);
- else if (val >= 'A' && val <= 'F')
- return ((val - 'A') + 10);
- else
- throw new ArgumentException( Environment.GetResourceString( "ArgumentOutOfRange_Index" ) );
- }
-
-
- public static byte[] DecodeHexString(String hexString)
- {
- if (hexString == null)
- throw new ArgumentNullException( nameof(hexString) );
- Contract.EndContractBlock();
-
- bool spaceSkippingMode = false;
-
- int i = 0;
- int length = hexString.Length;
-
- if ((length >= 2) &&
- (hexString[0] == '0') &&
- ( (hexString[1] == 'x') || (hexString[1] == 'X') ))
- {
- length = hexString.Length - 2;
- i = 2;
- }
-
- // Hex strings must always have 2N or (3N - 1) entries.
-
- if (length % 2 != 0 && length % 3 != 2)
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidHexFormat" ) );
- }
-
- byte[] sArray;
-
- if (length >=3 && hexString[i + 2] == ' ')
- {
- spaceSkippingMode = true;
-
- // Each hex digit will take three spaces, except the first (hence the plus 1).
- sArray = new byte[length / 3 + 1];
- }
- else
- {
- // Each hex digit will take two spaces
- sArray = new byte[length / 2];
- }
-
- int digit;
- int rawdigit;
- for (int j = 0; i < hexString.Length; i += 2, j++) {
- rawdigit = ConvertHexDigit(hexString[i]);
- digit = ConvertHexDigit(hexString[i+1]);
- sArray[j] = (byte) (digit | (rawdigit << 4));
- if (spaceSkippingMode)
- i++;
- }
- return(sArray);
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Util/StringExpressionSet.cs b/src/mscorlib/src/System/Security/Util/StringExpressionSet.cs
deleted file mode 100644
index 8a12235106..0000000000
--- a/src/mscorlib/src/System/Security/Util/StringExpressionSet.cs
+++ /dev/null
@@ -1,752 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Util {
- using System.Text;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Globalization;
- using System.Runtime.Versioning;
- using System.IO;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- internal class StringExpressionSet
- {
- // This field, as well as the expressions fields below are critical since they may contain
- // canonicalized full path data potentially built out of relative data passed as input to the
- // StringExpressionSet. Full trust code using the string expression set needs to ensure that before
- // exposing this data out to partial trust, they protect against this. Possibilities include:
- //
- // 1. Using the throwOnRelative flag
- // 2. Ensuring that the partial trust code has permission to see full path data
- // 3. Not using this set for paths (eg EnvironmentStringExpressionSet)
- //
- protected ArrayList m_list;
- protected bool m_ignoreCase;
- protected String m_expressions;
- protected String[] m_expressionsArray;
-
- protected bool m_throwOnRelative;
-
- protected static readonly char[] m_separators = { ';' };
- protected static readonly char[] m_trimChars = { ' ' };
-#if !PLATFORM_UNIX
- protected static readonly char m_directorySeparator = '\\';
- protected static readonly char m_alternateDirectorySeparator = '/';
-#else
- protected static readonly char m_directorySeparator = '/';
- protected static readonly char m_alternateDirectorySeparator = '\\';
-#endif // !PLATFORM_UNIX
-
- public StringExpressionSet()
- : this( true, null, false )
- {
- }
-
- public StringExpressionSet( String str )
- : this( true, str, false )
- {
- }
-
- public StringExpressionSet( bool ignoreCase, bool throwOnRelative )
- : this( ignoreCase, null, throwOnRelative )
- {
- }
-
- public StringExpressionSet( bool ignoreCase, String str, bool throwOnRelative )
- {
- m_list = null;
- m_ignoreCase = ignoreCase;
- m_throwOnRelative = throwOnRelative;
- if (str == null)
- m_expressions = null;
- else
- AddExpressions( str );
- }
-
- protected virtual StringExpressionSet CreateNewEmpty()
- {
- return new StringExpressionSet();
- }
-
- public virtual StringExpressionSet Copy()
- {
- // SafeCritical: just copying this value around, not leaking it
-
- StringExpressionSet copy = CreateNewEmpty();
- if (this.m_list != null)
- copy.m_list = new ArrayList(this.m_list);
-
- copy.m_expressions = this.m_expressions;
- copy.m_ignoreCase = this.m_ignoreCase;
- copy.m_throwOnRelative = this.m_throwOnRelative;
- return copy;
- }
-
- public void SetThrowOnRelative( bool throwOnRelative )
- {
- this.m_throwOnRelative = throwOnRelative;
- }
-
- private static String StaticProcessWholeString( String str )
- {
- return str.Replace( m_alternateDirectorySeparator, m_directorySeparator );
- }
-
- private static String StaticProcessSingleString( String str )
- {
- return str.Trim( m_trimChars );
- }
-
- protected virtual String ProcessWholeString( String str )
- {
- return StaticProcessWholeString(str);
- }
-
- protected virtual String ProcessSingleString( String str )
- {
- return StaticProcessSingleString(str);
- }
-
- public void AddExpressions( String str )
- {
- if (str == null)
- throw new ArgumentNullException( nameof(str) );
- Contract.EndContractBlock();
- if (str.Length == 0)
- return;
-
- str = ProcessWholeString( str );
-
- if (m_expressions == null)
- m_expressions = str;
- else
- m_expressions = m_expressions + m_separators[0] + str;
-
- m_expressionsArray = null;
-
- // We have to parse the string and compute the list here.
- // The logic in this class tries to delay this parsing but
- // since operations like IsSubsetOf are called during
- // demand evaluation, it is not safe to delay this step
- // as that would cause concurring threads to update the object
- // at the same time. The CheckList operation should ideally be
- // removed from this class, but for the sake of keeping the
- // changes to a minimum here, we simply make sure m_list
- // cannot be null by parsing m_expressions eagerly.
-
- String[] arystr = Split( str );
-
- if (m_list == null)
- m_list = new ArrayList();
-
- for (int index = 0; index < arystr.Length; ++index)
- {
- if (arystr[index] != null && !arystr[index].Equals( "" ))
- {
- String temp = ProcessSingleString( arystr[index] );
- int indexOfNull = temp.IndexOf( '\0' );
-
- if (indexOfNull != -1)
- temp = temp.Substring( 0, indexOfNull );
-
- if (temp != null && !temp.Equals( "" ))
- {
- if (m_throwOnRelative)
- {
- if (PathInternal.IsPartiallyQualified(temp))
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_AbsolutePathRequired" ) );
- }
-
- temp = CanonicalizePath( temp );
- }
-
- m_list.Add( temp );
- }
- }
- }
-
- Reduce();
- }
-
- public void AddExpressions( String[] str, bool checkForDuplicates, bool needFullPath )
- {
- AddExpressions(CreateListFromExpressions(str, needFullPath), checkForDuplicates);
- }
-
- public void AddExpressions( ArrayList exprArrayList, bool checkForDuplicates)
- {
- Debug.Assert( m_throwOnRelative, "This should only be called when throw on relative is set" );
-
- m_expressionsArray = null;
- m_expressions = null;
-
- if (m_list != null)
- m_list.AddRange(exprArrayList);
- else
- m_list = new ArrayList(exprArrayList);
-
- if (checkForDuplicates)
- Reduce();
- }
-
-
- internal static ArrayList CreateListFromExpressions(String[] str, bool needFullPath)
- {
- if (str == null)
- {
- throw new ArgumentNullException( nameof(str) );
- }
- Contract.EndContractBlock();
- ArrayList retArrayList = new ArrayList();
- for (int index = 0; index < str.Length; ++index)
- {
- if (str[index] == null)
- throw new ArgumentNullException( nameof(str) );
-
- // Replace alternate directory separators
- String oneString = StaticProcessWholeString( str[index] );
-
- if (oneString != null && oneString.Length != 0)
- {
- // Trim leading and trailing spaces
- String temp = StaticProcessSingleString( oneString);
-
- int indexOfNull = temp.IndexOf( '\0' );
-
- if (indexOfNull != -1)
- temp = temp.Substring( 0, indexOfNull );
-
- if (temp != null && temp.Length != 0)
- {
- if (PathInternal.IsPartiallyQualified(temp))
- {
- throw new ArgumentException(Environment.GetResourceString( "Argument_AbsolutePathRequired" ) );
- }
-
- temp = CanonicalizePath( temp, needFullPath );
-
- retArrayList.Add( temp );
- }
- }
- }
-
- return retArrayList;
- }
-
- protected void CheckList()
- {
- if (m_list == null && m_expressions != null)
- {
- CreateList();
- }
- }
-
- protected String[] Split( String expressions )
- {
- if (m_throwOnRelative)
- {
- List<String> tempList = new List<String>();
-
- String[] quoteSplit = expressions.Split( '\"' );
-
- for (int i = 0; i < quoteSplit.Length; ++i)
- {
- if (i % 2 == 0)
- {
- String[] semiSplit = quoteSplit[i].Split( ';' );
-
- for (int j = 0; j < semiSplit.Length; ++j)
- {
- if (semiSplit[j] != null && !semiSplit[j].Equals( "" ))
- tempList.Add( semiSplit[j] );
- }
- }
- else
- {
- tempList.Add( quoteSplit[i] );
- }
- }
-
- String[] finalArray = new String[tempList.Count];
-
- IEnumerator enumerator = tempList.GetEnumerator();
-
- int index = 0;
- while (enumerator.MoveNext())
- {
- finalArray[index++] = (String)enumerator.Current;
- }
-
- return finalArray;
- }
- else
- {
- return expressions.Split( m_separators );
- }
- }
-
-
- protected void CreateList()
- {
- String[] expressionsArray = Split( m_expressions );
-
- m_list = new ArrayList();
-
- for (int index = 0; index < expressionsArray.Length; ++index)
- {
- if (expressionsArray[index] != null && !expressionsArray[index].Equals( "" ))
- {
- String temp = ProcessSingleString( expressionsArray[index] );
-
- int indexOfNull = temp.IndexOf( '\0' );
-
- if (indexOfNull != -1)
- temp = temp.Substring( 0, indexOfNull );
-
- if (temp != null && !temp.Equals( "" ))
- {
- if (m_throwOnRelative)
- {
- if (PathInternal.IsPartiallyQualified(temp))
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_AbsolutePathRequired" ) );
- }
-
- temp = CanonicalizePath( temp );
- }
-
- m_list.Add( temp );
- }
- }
- }
- }
-
- public bool IsEmpty()
- {
- // SafeCritical: we're just showing that the expressions are empty, the sensitive portion is their
- // contents - not the existence of the contents
- if (m_list == null)
- {
- return m_expressions == null;
- }
- else
- {
- return m_list.Count == 0;
- }
- }
-
- public bool IsSubsetOf( StringExpressionSet ses )
- {
- if (this.IsEmpty())
- return true;
-
- if (ses == null || ses.IsEmpty())
- return false;
-
- CheckList();
- ses.CheckList();
-
- for (int index = 0; index < this.m_list.Count; ++index)
- {
- if (!StringSubsetStringExpression( (String)this.m_list[index], ses, m_ignoreCase ))
- {
- return false;
- }
- }
- return true;
- }
-
- public bool IsSubsetOfPathDiscovery( StringExpressionSet ses )
- {
- if (this.IsEmpty())
- return true;
-
- if (ses == null || ses.IsEmpty())
- return false;
-
- CheckList();
- ses.CheckList();
-
- for (int index = 0; index < this.m_list.Count; ++index)
- {
- if (!StringSubsetStringExpressionPathDiscovery( (String)this.m_list[index], ses, m_ignoreCase ))
- {
- return false;
- }
- }
- return true;
- }
-
-
- public StringExpressionSet Union( StringExpressionSet ses )
- {
- // If either set is empty, the union represents a copy of the other.
-
- if (ses == null || ses.IsEmpty())
- return this.Copy();
-
- if (this.IsEmpty())
- return ses.Copy();
-
- CheckList();
- ses.CheckList();
-
- // Perform the union
- // note: insert smaller set into bigger set to reduce needed comparisons
-
- StringExpressionSet bigger = ses.m_list.Count > this.m_list.Count ? ses : this;
- StringExpressionSet smaller = ses.m_list.Count <= this.m_list.Count ? ses : this;
-
- StringExpressionSet unionSet = bigger.Copy();
-
- unionSet.Reduce();
-
- for (int index = 0; index < smaller.m_list.Count; ++index)
- {
- unionSet.AddSingleExpressionNoDuplicates( (String)smaller.m_list[index] );
- }
-
- unionSet.GenerateString();
-
- return unionSet;
- }
-
-
- public StringExpressionSet Intersect( StringExpressionSet ses )
- {
- // If either set is empty, the intersection is empty
-
- if (this.IsEmpty() || ses == null || ses.IsEmpty())
- return CreateNewEmpty();
-
- CheckList();
- ses.CheckList();
-
- // Do the intersection for real
-
- StringExpressionSet intersectSet = CreateNewEmpty();
-
- for (int this_index = 0; this_index < this.m_list.Count; ++this_index)
- {
- for (int ses_index = 0; ses_index < ses.m_list.Count; ++ses_index)
- {
- if (StringSubsetString( (String)this.m_list[this_index], (String)ses.m_list[ses_index], m_ignoreCase ))
- {
- if (intersectSet.m_list == null)
- {
- intersectSet.m_list = new ArrayList();
- }
- intersectSet.AddSingleExpressionNoDuplicates( (String)this.m_list[this_index] );
- }
- else if (StringSubsetString( (String)ses.m_list[ses_index], (String)this.m_list[this_index], m_ignoreCase ))
- {
- if (intersectSet.m_list == null)
- {
- intersectSet.m_list = new ArrayList();
- }
- intersectSet.AddSingleExpressionNoDuplicates( (String)ses.m_list[ses_index] );
- }
- }
- }
-
- intersectSet.GenerateString();
-
- return intersectSet;
- }
-
- protected void GenerateString()
- {
- // SafeCritical - moves critical data around, but doesn't expose it out
- if (m_list != null)
- {
- StringBuilder sb = new StringBuilder();
-
- IEnumerator enumerator = this.m_list.GetEnumerator();
- bool first = true;
-
- while (enumerator.MoveNext())
- {
- if (!first)
- sb.Append( m_separators[0] );
- else
- first = false;
-
- String currentString = (String)enumerator.Current;
- if (currentString != null)
- {
- int indexOfSeparator = currentString.IndexOf( m_separators[0] );
-
- if (indexOfSeparator != -1)
- sb.Append( '\"' );
-
- sb.Append( currentString );
-
- if (indexOfSeparator != -1)
- sb.Append( '\"' );
- }
- }
-
- m_expressions = sb.ToString();
- }
- else
- {
- m_expressions = null;
- }
- }
-
- // We don't override ToString since that API must be either transparent or safe citical. If the
- // expressions contain paths that were canonicalized and expanded from the input that would cause
- // information disclosure, so we instead only expose this out to trusted code that can ensure they
- // either don't leak the information or required full path information.
- public string UnsafeToString()
- {
- CheckList();
-
- Reduce();
-
- GenerateString();
-
- return m_expressions;
- }
-
- public String[] UnsafeToStringArray()
- {
- if (m_expressionsArray == null && m_list != null)
- {
- m_expressionsArray = (String[])m_list.ToArray(typeof(String));
- }
-
- return m_expressionsArray;
- }
-
-
- //-------------------------------
- // protected static helper functions
- //-------------------------------
-
- private bool StringSubsetStringExpression( String left, StringExpressionSet right, bool ignoreCase )
- {
- for (int index = 0; index < right.m_list.Count; ++index)
- {
- if (StringSubsetString( left, (String)right.m_list[index], ignoreCase ))
- {
- return true;
- }
- }
- return false;
- }
-
- private static bool StringSubsetStringExpressionPathDiscovery( String left, StringExpressionSet right, bool ignoreCase )
- {
- for (int index = 0; index < right.m_list.Count; ++index)
- {
- if (StringSubsetStringPathDiscovery( left, (String)right.m_list[index], ignoreCase ))
- {
- return true;
- }
- }
- return false;
- }
-
-
- protected virtual bool StringSubsetString( String left, String right, bool ignoreCase )
- {
- StringComparison strComp = (ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
- if (right == null || left == null || right.Length == 0 || left.Length == 0 ||
- right.Length > left.Length)
- {
- return false;
- }
- else if (right.Length == left.Length)
- {
- // if they are equal in length, just do a normal compare
- return String.Compare( right, left, strComp) == 0;
- }
- else if (left.Length - right.Length == 1 && left[left.Length-1] == m_directorySeparator)
- {
- return String.Compare( left, 0, right, 0, right.Length, strComp) == 0;
- }
- else if (right[right.Length-1] == m_directorySeparator)
- {
- // right is definitely a directory, just do a substring compare
- return String.Compare( right, 0, left, 0, right.Length, strComp) == 0;
- }
- else if (left[right.Length] == m_directorySeparator)
- {
- // left is hinting at being a subdirectory on right, do substring compare to make find out
- return String.Compare( right, 0, left, 0, right.Length, strComp) == 0;
- }
- else
- {
- return false;
- }
- }
-
- protected static bool StringSubsetStringPathDiscovery( String left, String right, bool ignoreCase )
- {
- StringComparison strComp = (ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
- if (right == null || left == null || right.Length == 0 || left.Length == 0)
- {
- return false;
- }
- else if (right.Length == left.Length)
- {
- // if they are equal in length, just do a normal compare
- return String.Compare( right, left, strComp) == 0;
- }
- else
- {
- String shortString, longString;
-
- if (right.Length < left.Length)
- {
- shortString = right;
- longString = left;
- }
- else
- {
- shortString = left;
- longString = right;
- }
-
- if (String.Compare( shortString, 0, longString, 0, shortString.Length, strComp) != 0)
- {
- return false;
- }
-
-#if !PLATFORM_UNIX
- if (shortString.Length == 3 &&
- shortString.EndsWith( ":\\", StringComparison.Ordinal ) &&
- ((shortString[0] >= 'A' && shortString[0] <= 'Z') ||
- (shortString[0] >= 'a' && shortString[0] <= 'z')))
-#else
- if (shortString.Length == 1 && shortString[0]== m_directorySeparator)
-#endif // !PLATFORM_UNIX
- return true;
-
- return longString[shortString.Length] == m_directorySeparator;
- }
- }
-
-
- //-------------------------------
- // protected helper functions
- //-------------------------------
-
- protected void AddSingleExpressionNoDuplicates( String expression )
- {
- // SafeCritical: We're not exposing out the string sets, just allowing modification of them
- int index = 0;
-
- m_expressionsArray = null;
- m_expressions = null;
-
- if (this.m_list == null)
- this.m_list = new ArrayList();
-
- while (index < this.m_list.Count)
- {
- if (StringSubsetString( (String)this.m_list[index], expression, m_ignoreCase ))
- {
- this.m_list.RemoveAt( index );
- }
- else if (StringSubsetString( expression, (String)this.m_list[index], m_ignoreCase ))
- {
- return;
- }
- else
- {
- index++;
- }
- }
- this.m_list.Add( expression );
- }
-
- protected void Reduce()
- {
- CheckList();
-
- if (this.m_list == null)
- return;
-
- int j;
-
- for (int i = 0; i < this.m_list.Count - 1; i++)
- {
- j = i + 1;
-
- while (j < this.m_list.Count)
- {
- if (StringSubsetString( (String)this.m_list[j], (String)this.m_list[i], m_ignoreCase ))
- {
- this.m_list.RemoveAt( j );
- }
- else if (StringSubsetString( (String)this.m_list[i], (String)this.m_list[j], m_ignoreCase ))
- {
- // write the value at j into position i, delete the value at position j and keep going.
- this.m_list[i] = this.m_list[j];
- this.m_list.RemoveAt( j );
- j = i + 1;
- }
- else
- {
- j++;
- }
- }
- }
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- internal static extern void GetLongPathName( String path, StringHandleOnStack retLongPath );
-
- internal static String CanonicalizePath( String path )
- {
- return CanonicalizePath( path, true );
- }
-
- internal static string CanonicalizePath(string path, bool needFullPath)
- {
- if (needFullPath)
- {
- string newPath = Path.GetFullPath(path);
- if (path.EndsWith(m_directorySeparator + ".", StringComparison.Ordinal))
- {
- if (newPath.EndsWith(m_directorySeparator))
- {
- newPath += ".";
- }
- else
- {
- newPath += m_directorySeparator + ".";
- }
- }
- path = newPath;
- }
-#if !PLATFORM_UNIX
- else if (path.IndexOf('~') != -1)
- {
- // GetFullPathInternal() will expand 8.3 file names
- string longPath = null;
- GetLongPathName(path, JitHelpers.GetStringHandleOnStack(ref longPath));
- path = (longPath != null) ? longPath : path;
- }
-
- // This blocks usage of alternate data streams and some extended syntax paths (\\?\C:\). Checking after
- // normalization allows valid paths such as " C:\" to be considered ok (as it will become "C:\").
- if (path.IndexOf(':', 2) != -1)
- throw new NotSupportedException(Environment.GetResourceString("Argument_PathFormatNotSupported"));
-#endif // !PLATFORM_UNIX
-
- return path;
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Util/TokenBasedSet.cs b/src/mscorlib/src/System/Security/Util/TokenBasedSet.cs
deleted file mode 100644
index 8589fa7c42..0000000000
--- a/src/mscorlib/src/System/Security/Util/TokenBasedSet.cs
+++ /dev/null
@@ -1,443 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Util
-{
- using System;
- using System.Collections;
- using System.Security.Permissions;
- using System.Runtime.Serialization;
- using System.Threading;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Diagnostics.CodeAnalysis;
-
-#if FEATURE_SERIALIZATION
- [Serializable]
-#endif
- internal class TokenBasedSet
- {
-
-
- // Following 3 fields are used only for serialization compat purposes: DO NOT USE THESE EVER!
-#pragma warning disable 414
- private int m_initSize = 24;
- private int m_increment = 8;
-#pragma warning restore 414
- private Object[] m_objSet;
- // END -> Serialization only fields
-
- [OptionalField(VersionAdded = 2)]
- private volatile Object m_Obj;
- [OptionalField(VersionAdded = 2)]
- private volatile Object[] m_Set;
-
- private int m_cElt;
- private volatile int m_maxIndex;
-
-
- [OnDeserialized]
- private void OnDeserialized(StreamingContext ctx)
- {
- OnDeserializedInternal();
- }
- private void OnDeserializedInternal()
- {
- if (m_objSet != null) //v1.x case
- {
- if (m_cElt == 1)
- m_Obj = m_objSet[m_maxIndex];
- else
- m_Set = m_objSet;
- m_objSet = null;
- }
- // Nothing to do for the v2.0 and beyond case
- }
-
- [OnSerializing]
- private void OnSerializing(StreamingContext ctx)
- {
-
- if ((ctx.State & ~(StreamingContextStates.Clone|StreamingContextStates.CrossAppDomain)) != 0)
- {
- //Nothing special for the v2 and beyond case
-
- // for the v1.x case, we need to create m_objSet if necessary
- if (m_cElt == 1)
- {
- m_objSet = new Object[m_maxIndex+1];
- m_objSet[m_maxIndex] = m_Obj;
- }
- else if (m_cElt > 0)
- {
- // Array case:
- m_objSet = m_Set;
- }
-
- }
- }
- [OnSerialized]
- private void OnSerialized(StreamingContext ctx)
- {
- if ((ctx.State & ~(StreamingContextStates.Clone|StreamingContextStates.CrossAppDomain)) != 0)
- {
- m_objSet = null;
-
- }
- }
-
-
- internal bool MoveNext(ref TokenBasedSetEnumerator e)
- {
- switch (m_cElt)
- {
- case 0:
- return false;
-
- case 1:
- if (e.Index == -1)
- {
- e.Index = m_maxIndex;
- e.Current = m_Obj;
- return true;
- }
- else
- {
- e.Index = (short)(m_maxIndex+1);
- e.Current = null;
- return false;
- }
-
- default:
- while (++e.Index <= m_maxIndex)
- {
- e.Current = Volatile.Read(ref m_Set[e.Index]);
-
- if (e.Current != null)
- return true;
- }
-
- e.Current = null;
- return false;
- }
- }
-
- internal TokenBasedSet()
- {
- Reset();
- }
-
- [SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "Reviewed for thread safety")]
- internal TokenBasedSet(TokenBasedSet tbSet)
- {
- if (tbSet == null)
- {
- Reset();
- return;
- }
-
- if (tbSet.m_cElt > 1)
- {
- Object[] aObj = tbSet.m_Set;
- int aLen = aObj.Length;
-
- Object[] aNew = new Object[aLen];
- System.Array.Copy(aObj, 0, aNew, 0, aLen);
-
- m_Set = aNew;
- }
- else
- {
- m_Obj = tbSet.m_Obj;
- }
-
- m_cElt = tbSet.m_cElt;
- m_maxIndex = tbSet.m_maxIndex;
- }
-
- internal void Reset()
- {
- m_Obj = null;
- m_Set = null;
- m_cElt = 0;
- m_maxIndex = -1;
- }
-
- internal void SetItem(int index, Object item)
- {
- Object[] aObj = null;
-
- if (item == null)
- {
- RemoveItem(index);
- return;
- }
-
- switch (m_cElt)
- {
- case 0:
- // on the first item, we don't create an array, we merely remember it's index and value
- // this this the 99% case
- m_cElt = 1;
- m_maxIndex = (short)index;
- m_Obj = item;
- break;
-
- case 1:
- // we have to decide if a 2nd item has indeed been added and create the array
- // if it has
- if (index == m_maxIndex)
- {
- // replacing the one existing item
- m_Obj = item;
- }
- else
- {
- // adding a second distinct permission
- Object objSaved = m_Obj;
- int iMax = Math.Max(m_maxIndex, index);
-
- aObj = new Object[iMax+1];
- aObj[m_maxIndex] = objSaved;
- aObj[index] = item;
- m_maxIndex = (short)iMax;
- m_cElt = 2;
- m_Set = aObj;
- m_Obj = null;
- }
- break;
-
- default:
- // this is the general case code for when there is really an array
-
- aObj = m_Set;
-
- // we are now adding an item, check if we need to grow
-
- if (index >= aObj.Length)
- {
- Object[] newset = new Object[index+1];
- System.Array.Copy(aObj, 0, newset, 0, m_maxIndex+1);
- m_maxIndex = (short)index;
- newset[index] = item;
- m_Set = newset;
- m_cElt++;
- }
- else
- {
- if (aObj[index] == null)
- m_cElt++;
-
- aObj[index] = item;
-
- if (index > m_maxIndex)
- m_maxIndex = (short)index;
- }
- break;
- }
- }
-
- [SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "Reviewed for thread-safety")]
- internal Object GetItem(int index)
- {
- switch (m_cElt)
- {
- case 0:
- return null;
-
- case 1:
- if (index == m_maxIndex)
- return m_Obj;
- else
- return null;
- default:
- if (index < m_Set.Length)
- return Volatile.Read(ref m_Set[index]);
- else
- return null;
- }
- }
-
- internal Object RemoveItem(int index)
- {
- Object ret = null;
-
- switch (m_cElt)
- {
- case 0:
- ret = null;
- break;
-
- case 1:
- if (index != m_maxIndex)
- {
- // removing a permission we don't have ignore it
- ret = null;
- }
- else
- {
- // removing the permission we have at the moment
- ret = m_Obj;
- Reset();
- }
- break;
-
- default:
- // this is the general case code for when there is really an array
-
- // we are removing an item
- if (index < m_Set.Length && (ret = Volatile.Read(ref m_Set[index])) != null)
- {
- // ok we really deleted something at this point
-
- Volatile.Write(ref m_Set[index], null);
- m_cElt--;
-
- if (index == m_maxIndex)
- ResetMaxIndex(m_Set);
-
- // collapse the array
- if (m_cElt == 1)
- {
- m_Obj = Volatile.Read(ref m_Set[m_maxIndex]);
- m_Set = null;
- }
- }
- break;
- }
-
- return ret;
- }
-
- private void ResetMaxIndex(Object[] aObj)
- {
- int i;
-
- // Start at the end of the array, and
- // scan backwards for the first non-null
- // slot. That is the new maxIndex.
- for (i = aObj.Length - 1; i >= 0; i--)
- {
- if (aObj[i] != null)
- {
- m_maxIndex = (short)i;
- return;
- }
- }
-
- m_maxIndex = -1;
- }
- internal int GetStartingIndex()
- {
- if (m_cElt <= 1)
- return m_maxIndex;
- return 0;
- }
- internal int GetCount()
- {
- return m_cElt;
- }
-
- internal int GetMaxUsedIndex()
- {
- return m_maxIndex;
- }
-
- internal bool FastIsEmpty()
- {
- return m_cElt == 0;
- }
-
- // Used to merge two distinct TokenBasedSets (used currently only in PermissionSet Deserialization)
- internal TokenBasedSet SpecialUnion(TokenBasedSet other)
- {
- // This gets called from PermissionSet.OnDeserialized and it's possible that the TokenBasedSets have
- // not been subjected to VTS callbacks yet
- OnDeserializedInternal();
- TokenBasedSet unionSet = new TokenBasedSet();
- int maxMax;
- if (other != null)
- {
- other.OnDeserializedInternal();
- maxMax = this.GetMaxUsedIndex() > other.GetMaxUsedIndex() ? this.GetMaxUsedIndex() : other.GetMaxUsedIndex();
- }
- else
- maxMax = this.GetMaxUsedIndex();
-
- for (int i = 0; i <= maxMax; ++i)
- {
- Object thisObj = this.GetItem( i );
- IPermission thisPerm = thisObj as IPermission;
-
- Object otherObj = (other != null)?other.GetItem( i ):null;
- IPermission otherPerm = otherObj as IPermission;
-
- if (thisObj == null && otherObj == null)
- continue;
-
- if (thisObj == null)
- {
- PermissionToken token = PermissionToken.GetToken(otherPerm);
-
- if (token == null)
- {
- throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState"));
- }
-
- unionSet.SetItem(token.m_index, otherPerm);
- }
- else if (otherObj == null)
- {
- PermissionToken token = PermissionToken.GetToken(thisPerm);
- if (token == null)
- {
- throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState"));
- }
- unionSet.SetItem( token.m_index, thisPerm);
- }
- else
- {
- Debug.Assert( (thisObj == null || otherObj == null), "Permission cannot be in both TokenBasedSets" );
- }
- }
- return unionSet;
- }
-
- internal void SpecialSplit(ref TokenBasedSet unrestrictedPermSet, ref TokenBasedSet normalPermSet, bool ignoreTypeLoadFailures)
- {
- int maxIndex = GetMaxUsedIndex();
-
- for (int i = GetStartingIndex(); i <= maxIndex; ++i)
- {
- Object obj = GetItem( i );
- if (obj != null)
- {
- IPermission perm = obj as IPermission;
- PermissionToken token = PermissionToken.GetToken(perm);
-
- if (perm == null || token == null)
- continue;
-
- if (perm is IUnrestrictedPermission)
- {
- // Add to unrestrictedPermSet
- if (unrestrictedPermSet == null)
- unrestrictedPermSet = new TokenBasedSet();
- unrestrictedPermSet.SetItem(token.m_index, perm);
- }
- else
- {
- // Add to normalPermSet
- if (normalPermSet == null)
- normalPermSet = new TokenBasedSet();
- normalPermSet.SetItem(token.m_index, perm);
- }
-
- }
-
- }
-
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Util/TokenBasedSetEnumerator.cs b/src/mscorlib/src/System/Security/Util/TokenBasedSetEnumerator.cs
deleted file mode 100644
index 9c868d3c53..0000000000
--- a/src/mscorlib/src/System/Security/Util/TokenBasedSetEnumerator.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Util
-{
- using System;
- using System.Collections;
-
- internal struct TokenBasedSetEnumerator
- {
- public Object Current;
- public int Index;
-
- private TokenBasedSet _tb;
-
- public bool MoveNext()
- {
- return _tb != null ? _tb.MoveNext(ref this) : false;
- }
-
- public void Reset()
- {
- Index = -1;
- Current = null;
- }
-
- public TokenBasedSetEnumerator(TokenBasedSet tb)
- {
- Index = -1;
- Current = null;
- _tb = tb;
- }
- }
-}
-
diff --git a/src/mscorlib/src/System/Security/Util/URLString.cs b/src/mscorlib/src/System/Security/Util/URLString.cs
index 83f9ce483f..4ec353876a 100644
--- a/src/mscorlib/src/System/Security/Util/URLString.cs
+++ b/src/mscorlib/src/System/Security/Util/URLString.cs
@@ -22,368 +22,8 @@ namespace System.Security.Util {
using System.IO;
using System.Diagnostics.Contracts;
-#if FEATURE_SERIALIZATION
- [Serializable]
-#endif
- internal sealed class URLString : SiteString
+ internal static class URLString
{
- private String m_protocol;
- [OptionalField(VersionAdded = 2)]
- private String m_userpass;
- private SiteString m_siteString;
- private int m_port;
-#if !PLATFORM_UNIX
- private LocalSiteString m_localSite;
-#endif // !PLATFORM_UNIX
- private DirectoryString m_directory;
-
- private const String m_defaultProtocol = "file";
-
- [OptionalField(VersionAdded = 2)]
- private bool m_parseDeferred;
- [OptionalField(VersionAdded = 2)]
- private String m_urlOriginal;
- [OptionalField(VersionAdded = 2)]
- private bool m_parsedOriginal;
-
- [OptionalField(VersionAdded = 3)]
- private bool m_isUncShare;
-
- // legacy field from v1.x, not used in v2 and beyond. Retained purely for serialization compatibility.
- private String m_fullurl;
-
-
- [OnDeserialized]
- public void OnDeserialized(StreamingContext ctx)
- {
-
- if (m_urlOriginal == null)
- {
- // pre-v2 deserialization. Need to fix-up fields here
- m_parseDeferred = false;
- m_parsedOriginal = false; // Dont care what this value is - never used
- m_userpass = "";
- m_urlOriginal = m_fullurl;
- m_fullurl = null;
- }
- }
- [OnSerializing]
- private void OnSerializing(StreamingContext ctx)
- {
-
- if ((ctx.State & ~(StreamingContextStates.Clone|StreamingContextStates.CrossAppDomain)) != 0)
- {
- DoDeferredParse();
- m_fullurl = m_urlOriginal;
- }
- }
- [OnSerialized]
- private void OnSerialized(StreamingContext ctx)
- {
- if ((ctx.State & ~(StreamingContextStates.Clone|StreamingContextStates.CrossAppDomain)) != 0)
- {
- m_fullurl = null;
- }
- }
-
- public URLString()
- {
- m_protocol = "";
- m_userpass = "";
- m_siteString = new SiteString();
- m_port = -1;
-#if !PLATFORM_UNIX
- m_localSite = null;
-#endif // !PLATFORM_UNIX
- m_directory = new DirectoryString();
- m_parseDeferred = false;
- }
-
- private void DoDeferredParse()
- {
- if (m_parseDeferred)
- {
- ParseString(m_urlOriginal, m_parsedOriginal);
- m_parseDeferred = false;
- }
- }
-
- public URLString(string url) : this(url, false, false) {}
- public URLString(string url, bool parsed) : this(url, parsed, false) {}
-
- internal URLString(string url, bool parsed, bool doDeferredParsing)
- {
- m_port = -1;
- m_userpass = "";
- DoFastChecks(url);
- m_urlOriginal = url;
- m_parsedOriginal = parsed;
- m_parseDeferred = true;
- if (doDeferredParsing)
- DoDeferredParse();
- }
-
- // Converts %XX and %uYYYY to the actual characters (I.e. Unesacpes any escape characters present in the URL)
- private String UnescapeURL(String url)
- {
- StringBuilder intermediate = StringBuilderCache.Acquire(url.Length);
- int Rindex = 0; // index into temp that gives the rest of the string to be processed
- int index;
- int braIndex = -1;
- int ketIndex = -1;
- braIndex = url.IndexOf('[',Rindex);
- if (braIndex != -1)
- ketIndex = url.IndexOf(']', braIndex);
-
- do
- {
- index = url.IndexOf( '%', Rindex);
-
- if (index == -1)
- {
- intermediate = intermediate.Append(url, Rindex, (url.Length - Rindex));
- break;
- }
- // if we hit a '%' in the middle of an IPv6 address, dont process that
- if (index > braIndex && index < ketIndex)
- {
- intermediate = intermediate.Append(url, Rindex, (ketIndex - Rindex+1));
- Rindex = ketIndex+1;
- continue;
- }
-
- if (url.Length - index < 2) // Check that there is at least 1 char after the '%'
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
-
- if (url[index+1] == 'u' || url[index+1] == 'U')
- {
- if (url.Length - index < 6) // example: "%u004d" is 6 chars long
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
-
- // We have a unicode character specified in hex
-
- try
- {
- char c = (char)(Hex.ConvertHexDigit( url[index+2] ) << 12 |
- Hex.ConvertHexDigit( url[index+3] ) << 8 |
- Hex.ConvertHexDigit( url[index+4] ) << 4 |
- Hex.ConvertHexDigit( url[index+5] ));
- intermediate = intermediate.Append(url, Rindex, index - Rindex);
- intermediate = intermediate.Append(c);
- }
- catch(ArgumentException) // Hex.ConvertHexDigit can throw an "out of range" ArgumentException
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
- }
-
- Rindex = index + 6 ; //update the 'seen' length
- }
- else
- {
- // we have a hex character.
-
- if (url.Length - index < 3) // example: "%4d" is 3 chars long
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
-
- try
- {
- char c = (char)(Hex.ConvertHexDigit( url[index+1] ) << 4 | Hex.ConvertHexDigit( url[index+2] ));
-
- intermediate = intermediate.Append(url, Rindex, index - Rindex);
- intermediate = intermediate.Append(c);
- }
- catch(ArgumentException) // Hex.ConvertHexDigit can throw an "out of range" ArgumentException
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
- }
-
- Rindex = index + 3; // update the 'seen' length
- }
-
- }
- while (true);
- return StringBuilderCache.GetStringAndRelease(intermediate);
- }
-
- // Helper Function for ParseString:
- // Search for the end of the protocol info and grab the actual protocol string
- // ex. http://www.microsoft.com/complus would have a protocol string of http
- private String ParseProtocol(String url)
- {
- String temp;
- int index = url.IndexOf( ':' );
-
- if (index == 0)
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
- }
- else if (index == -1)
- {
- m_protocol = m_defaultProtocol;
- temp = url;
- }
- else if (url.Length > index + 1)
- {
- if (index == m_defaultProtocol.Length &&
- String.Compare(url, 0, m_defaultProtocol, 0, index, StringComparison.OrdinalIgnoreCase) == 0)
- {
- m_protocol = m_defaultProtocol;
- temp = url.Substring( index + 1 );
-
- // Since an explicit file:// URL could be immediately followed by a host name, we will be
- // conservative and assume that it is on a share rather than a potentally relative local
- // URL.
- m_isUncShare = true;
- }
- else if (url[index+1] != '\\')
- {
-#if !PLATFORM_UNIX
- if (url.Length > index + 2 &&
- url[index+1] == '/' &&
- url[index+2] == '/')
-#else
- if (url.Length > index + 1 &&
- url[index+1] == '/' ) // UNIX style "file:/home/me" is allowed, so account for that
-#endif // !PLATFORM_UNIX
- {
- m_protocol = url.Substring( 0, index );
-
- for (int i = 0; i < m_protocol.Length; ++i)
- {
- char c = m_protocol[i];
-
- if ((c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z') ||
- (c >= '0' && c <= '9') ||
- (c == '+') ||
- (c == '.') ||
- (c == '-'))
- {
- continue;
- }
- else
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
- }
- }
-#if !PLATFORM_UNIX
- temp = url.Substring( index + 3 );
-#else
- // In UNIX, we don't know how many characters we'll have to skip past.
- // Skip past \, /, and :
- //
- for ( int j=index ; j<url.Length ; j++ )
- {
- if ( url[j] != '\\' && url[j] != '/' && url[j] != ':' )
- {
- index = j;
- break;
- }
- }
-
- temp = url.Substring( index );
-#endif // !PLATFORM_UNIX
- }
- else
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
- }
- }
- else
- {
- m_protocol = m_defaultProtocol;
- temp = url;
- }
- }
- else
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
- }
-
- return temp;
- }
-
- private String ParsePort(String url)
- {
- String temp = url;
- char[] separators = new char[] { ':', '/' };
- int Rindex = 0;
- int userpassIndex = temp.IndexOf('@');
- if (userpassIndex != -1) {
- if (temp.IndexOf('/',0,userpassIndex) == -1) {
- // this is a user:pass type of string
- m_userpass = temp.Substring(0,userpassIndex);
- Rindex = userpassIndex + 1;
- }
- }
-
- int braIndex = -1;
- int ketIndex = -1;
- int portIndex = -1;
- braIndex = url.IndexOf('[',Rindex);
- if (braIndex != -1)
- ketIndex = url.IndexOf(']', braIndex);
- if (ketIndex != -1)
- {
- // IPv6 address...ignore the IPv6 block when searching for the port
- portIndex = temp.IndexOfAny(separators,ketIndex);
- }
- else
- {
- portIndex = temp.IndexOfAny(separators,Rindex);
- }
-
-
-
- if (portIndex != -1 && temp[portIndex] == ':')
- {
- // make sure it really is a port, and has a number after the :
- if ( temp[portIndex+1] >= '0' && temp[portIndex+1] <= '9' )
- {
- int tempIndex = temp.IndexOf( '/', Rindex);
-
- if (tempIndex == -1)
- {
- m_port = Int32.Parse( temp.Substring(portIndex + 1), CultureInfo.InvariantCulture );
-
- if (m_port < 0)
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
-
- temp = temp.Substring( Rindex, portIndex - Rindex );
- }
- else if (tempIndex > portIndex)
- {
- m_port = Int32.Parse( temp.Substring(portIndex + 1, tempIndex - portIndex - 1), CultureInfo.InvariantCulture );
- temp = temp.Substring( Rindex, portIndex - Rindex ) + temp.Substring( tempIndex );
- }
- else
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
- }
- else
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
- }
- else {
- // Chop of the user/pass portion if any
- temp = temp.Substring(Rindex);
- }
-
- return temp;
- }
-
- // This does three things:
- // 1. It makes the following modifications to the start of the string:
- // a. \\?\ and \\?/ => <empty>
- // b. \\.\ and \\./ => <empty>
- // 2. If isFileUrl is true, converts all slashes to front slashes and strips leading
- // front slashes. See comment by code.
- // 3. Throws a PathTooLongException if the length of the resulting URL is >= MAX_PATH.
- // This is done to prevent security issues due to canonicalization truncations.
- // Remove this method when the Path class supports "\\?\"
- internal static string PreProcessForExtendedPathRemoval(string url, bool isFileUrl)
- {
- return PreProcessForExtendedPathRemoval(checkPathLength: true, url: url, isFileUrl: isFileUrl);
- }
-
internal static string PreProcessForExtendedPathRemoval(bool checkPathLength, string url, bool isFileUrl)
{
bool isUncShare = false;
@@ -417,7 +57,8 @@ namespace System.Security.Util {
}
else
{
- if (isFileUrl) {
+ if (isFileUrl)
+ {
// We need to handle an indefinite number of leading front slashes for file URLs since we could
// get something like:
// file://\\?\
@@ -449,14 +90,14 @@ namespace System.Security.Util {
{
int slashCount = 0;
bool seenFirstBackslash = false;
-
+
while (slashCount < modifiedUrl.Length && (modifiedUrl[slashCount] == '/' || modifiedUrl[slashCount] == '\\'))
{
// Look for sets of consecutive backslashes. We can't just look for these at the start
// of the string, since file:// might come first. Instead, once we see the first \, look
// for a second one following it.
if (!seenFirstBackslash && modifiedUrl[slashCount] == '\\')
- {
+ {
seenFirstBackslash = true;
if (slashCount + 1 < modifiedUrl.Length && modifiedUrl[slashCount + 1] == '\\')
isUncShare = true;
@@ -493,873 +134,5 @@ namespace System.Security.Util {
throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
}
}
-
- // Do any misc massaging of data in the URL
- private String PreProcessURL(String url, bool isFileURL)
- {
-
-#if !PLATFORM_UNIX
- if (isFileURL) {
- // Remove when the Path class supports "\\?\"
- url = PreProcessForExtendedPathRemoval(url, true, ref m_isUncShare);
- }
- else {
- url = url.Replace('\\', '/');
- }
- return url;
-#else
- // Remove superfluous '/'
- // For UNIX, the file path would look something like:
- // file:///home/johndoe/here
- // file:/home/johndoe/here
- // file:../johndoe/here
- // file:~/johndoe/here
- String temp = url;
- int nbSlashes = 0;
- while(nbSlashes<temp.Length && '/'==temp[nbSlashes])
- nbSlashes++;
-
- // if we get a path like file:///directory/name we need to convert
- // this to /directory/name.
- if(nbSlashes > 2)
- temp = temp.Substring(nbSlashes-1, temp.Length - (nbSlashes-1));
- else if (2 == nbSlashes) /* it's a relative path */
- temp = temp.Substring(nbSlashes, temp.Length - nbSlashes);
- return temp;
-#endif // !PLATFORM_UNIX
-
- }
-
- private void ParseFileURL(String url)
- {
-
- String temp = url;
-#if !PLATFORM_UNIX
- int index = temp.IndexOf( '/');
-
- if (index != -1 &&
- ((index == 2 &&
- temp[index-1] != ':' &&
- temp[index-1] != '|') ||
- index != 2) &&
- index != temp.Length - 1)
- {
- // Also, if it is a UNC share, we want m_localSite to
- // be of the form "computername/share", so if the first
- // fileEnd character found is a slash, do some more parsing
- // to find the proper end character.
-
- int tempIndex = temp.IndexOf( '/', index+1);
-
- if (tempIndex != -1)
- index = tempIndex;
- else
- index = -1;
- }
-
- String localSite;
- if (index == -1)
- localSite = temp;
- else
- localSite = temp.Substring(0,index);
-
- if (localSite.Length == 0)
- throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidUrl" ) );
-
- int i;
- bool spacesAllowed;
-
- if (localSite[0] == '\\' && localSite[1] == '\\')
- {
- spacesAllowed = true;
- i = 2;
- }
- else
- {
- i = 0;
- spacesAllowed = false;
- }
-
- bool useSmallCharToUpper = true;
-
- for (; i < localSite.Length; ++i)
- {
- char c = localSite[i];
-
- if ((c >= 'A' && c <= 'Z') ||
- (c >= 'a' && c <= 'z') ||
- (c >= '0' && c <= '9') ||
- (c == '-') || (c == '/') ||
- (c == ':') || (c == '|') ||
- (c == '.') || (c == '*') ||
- (c == '$') || (spacesAllowed && c == ' '))
- {
- continue;
- }
- else
- {
- useSmallCharToUpper = false;
- break;
- }
- }
-
- if (useSmallCharToUpper)
- localSite = String.SmallCharToUpper( localSite );
- else
- localSite = localSite.ToUpper(CultureInfo.InvariantCulture);
-
- m_localSite = new LocalSiteString( localSite );
-
- if (index == -1)
- {
- if (localSite[localSite.Length-1] == '*')
- m_directory = new DirectoryString( "*", false );
- else
- m_directory = new DirectoryString();
- }
- else
- {
- String directoryString = temp.Substring( index + 1 );
- if (directoryString.Length == 0)
- {
- m_directory = new DirectoryString();
- }
- else
- {
- m_directory = new DirectoryString( directoryString, true);
- }
- }
-#else // !PLATFORM_UNIX
- m_directory = new DirectoryString( temp, true);
-#endif // !PLATFORM_UNIX
-
- m_siteString = null;
- return;
- }
-
- private void ParseNonFileURL(String url)
- {
- String temp = url;
- int index = temp.IndexOf('/');
-
- if (index == -1)
- {
-#if !PLATFORM_UNIX
- m_localSite = null; // for drive letter
-#endif // !PLATFORM_UNIX
- m_siteString = new SiteString( temp );
- m_directory = new DirectoryString();
- }
- else
- {
-#if !PLATFORM_UNIX
- String site = temp.Substring( 0, index );
- m_localSite = null;
- m_siteString = new SiteString( site );
-
- String directoryString = temp.Substring( index + 1 );
-
- if (directoryString.Length == 0)
- {
- m_directory = new DirectoryString();
- }
- else
- {
- m_directory = new DirectoryString( directoryString, false );
- }
-#else
- String directoryString = temp.Substring( index + 1 );
- String site = temp.Substring( 0, index );
- m_directory = new DirectoryString( directoryString, false );
- m_siteString = new SiteString( site );
-#endif //!PLATFORM_UNIX
- }
- return;
- }
-
- void DoFastChecks( String url )
- {
- if (url == null)
- {
- throw new ArgumentNullException( nameof(url) );
- }
- Contract.EndContractBlock();
-
- if (url.Length == 0)
- {
- throw new FormatException(Environment.GetResourceString("Format_StringZeroLength"));
- }
- }
-
- // NOTE:
- // 1. We support URLs that follow the common Internet scheme syntax
- // (<scheme>://user:pass@<host>:<port>/<url-path>) and all windows file URLs.
- // 2. In the general case we parse of the site and create a SiteString out of it
- // (which supports our wildcarding scheme). In the case of files we don't support
- // wildcarding and furthermore SiteString doesn't like ':' and '|' which can appear
- // in file urls so we just keep that info in a separate string and set the
- // SiteString to null.
- //
- // ex. http://www.microsoft.com/complus -> m_siteString = "www.microsoft.com" m_localSite = null
- // ex. file:///c:/complus/mscorlib.dll -> m_siteString = null m_localSite = "c:"
- // ex. file:///c|/complus/mscorlib.dll -> m_siteString = null m_localSite = "c:"
- void ParseString( String url, bool parsed )
- {
- // If there are any escaped hex or unicode characters in the url, translate those
- // into the proper character.
-
- if (!parsed)
- {
- url = UnescapeURL(url);
- }
-
- // Identify the protocol and strip the protocol info from the string, if present.
- String temp = ParseProtocol(url);
-
- bool fileProtocol = (String.Compare( m_protocol, "file", StringComparison.OrdinalIgnoreCase) == 0);
-
- // handle any special preocessing...removing extra characters, etc.
- temp = PreProcessURL(temp, fileProtocol);
-
- if (fileProtocol)
- {
- ParseFileURL(temp);
- }
- else
- {
- // Check if there is a port number and parse that out.
- temp = ParsePort(temp);
- ParseNonFileURL(temp);
- // Note: that we allow DNS and Netbios names for non-file protocols (since sitestring will check
- // that the hostname satisfies these two protocols. DNS-only checking can theoretically be added
- // here but that would break all the programs that use '_' (which is fairly common, yet illegal).
- // If this needs to be done at any point, add a call to m_siteString.IsLegalDNSName().
- }
-
-
- }
-
- public String Scheme
- {
- get
- {
- DoDeferredParse();
-
- return m_protocol;
- }
- }
-
- public String Host
- {
- get
- {
- DoDeferredParse();
-
- if (m_siteString != null)
- {
- return m_siteString.ToString();
- }
- else
- {
-#if !PLATFORM_UNIX
- return m_localSite.ToString();
-#else
- return "";
-#endif // !PLATFORM_UNIX
- }
- }
- }
-
- public String Port
- {
- get
- {
- DoDeferredParse();
-
- if (m_port == -1)
- return null;
- else
- return m_port.ToString(CultureInfo.InvariantCulture);
- }
- }
-
- public String Directory
- {
- get
- {
- DoDeferredParse();
-
- return m_directory.ToString();
- }
- }
-
- /// <summary>
- /// Make a best guess at determining if this is URL refers to a file with a relative path. Since
- /// this is a guess to help out users of UrlMembershipCondition who may accidentally supply a
- /// relative URL, we'd rather err on the side of absolute than relative. (We'd rather accept some
- /// meaningless membership conditions rather than reject meaningful ones).
- ///
- /// In order to be a relative file URL, the URL needs to have a protocol of file, and not be on a
- /// UNC share.
- ///
- /// If both of the above are true, then the heuristics we'll use to detect an absolute URL are:
- /// 1. A host name which is:
- /// a. greater than one character and ends in a colon (representing the drive letter) OR
- /// b. ends with a * (so we match any file with the given prefix if any)
- /// 2. Has a directory name (cannot be simply file://c:)
- /// </summary>
- public bool IsRelativeFileUrl
- {
- get
- {
- DoDeferredParse();
-
- if (String.Equals(m_protocol, "file", StringComparison.OrdinalIgnoreCase) && !m_isUncShare)
- {
-#if !PLATFORM_UNIX
- string host = m_localSite != null ? m_localSite.ToString() : null;
- // If the host name ends with the * character, treat this as an absolute URL since the *
- // could represent the rest of the full path.
- if (host.EndsWith('*'))
- return false;
-#endif // !PLATFORM_UNIX
- string directory = m_directory != null ? m_directory.ToString() : null;
-
-#if !PLATFORM_UNIX
- return host == null || host.Length < 2 || !host.EndsWith(':') ||
- String.IsNullOrEmpty(directory);
-#else
- return String.IsNullOrEmpty(directory);
-#endif // !PLATFORM_UNIX
-
- }
-
- // Since this is not a local URL, it cannot be relative
- return false;
- }
- }
-
- public String GetFileName()
- {
- DoDeferredParse();
-
-#if !PLATFORM_UNIX
- if (String.Compare( m_protocol, "file", StringComparison.OrdinalIgnoreCase) != 0)
- return null;
-
- String intermediateDirectory = this.Directory.Replace( '/', '\\' );
-
- String directory = this.Host.Replace( '/', '\\' );
-
- int directorySlashIndex = directory.IndexOf( '\\' );
- if (directorySlashIndex == -1)
- {
- if (directory.Length != 2 ||
- !(directory[1] == ':' || directory[1] == '|'))
- {
- directory = "\\\\" + directory;
- }
- }
- else if (directorySlashIndex != 2 ||
- (directorySlashIndex == 2 && directory[1] != ':' && directory[1] != '|'))
- {
- directory = "\\\\" + directory;
- }
-
- directory += "\\" + intermediateDirectory;
-
- return directory;
-#else
- // In Unix, directory contains the full pathname
- // (this is what we get in Win32)
- if (String.Compare( m_protocol, "file", StringComparison.OrdinalIgnoreCase ) != 0)
- return null;
-
- return this.Directory;
-#endif // !PLATFORM_UNIX
- }
-
-
- public String GetDirectoryName()
- {
- DoDeferredParse();
-
-#if !PLATFORM_UNIX
- if (String.Compare( m_protocol, "file", StringComparison.OrdinalIgnoreCase ) != 0)
- return null;
-
- String intermediateDirectory = this.Directory.Replace( '/', '\\' );
-
- int slashIndex = 0;
- for (int i = intermediateDirectory.Length; i > 0; i--)
- {
- if (intermediateDirectory[i-1] == '\\')
- {
- slashIndex = i;
- break;
- }
- }
-
- String directory = this.Host.Replace( '/', '\\' );
-
- int directorySlashIndex = directory.IndexOf( '\\' );
- if (directorySlashIndex == -1)
- {
- if (directory.Length != 2 ||
- !(directory[1] == ':' || directory[1] == '|'))
- {
- directory = "\\\\" + directory;
- }
- }
- else if (directorySlashIndex > 2 ||
- (directorySlashIndex == 2 && directory[1] != ':' && directory[1] != '|'))
- {
- directory = "\\\\" + directory;
- }
-
- directory += "\\";
-
- if (slashIndex > 0)
- {
- directory += intermediateDirectory.Substring( 0, slashIndex );
- }
-
- return directory;
-#else
- if (String.Compare( m_protocol, "file", StringComparison.OrdinalIgnoreCase) != 0)
- return null;
-
- String directory = this.Directory.ToString();
- int slashIndex = 0;
- for (int i = directory.Length; i > 0; i--)
- {
- if (directory[i-1] == '/')
- {
- slashIndex = i;
- break;
- }
- }
-
- if (slashIndex > 0)
- {
- directory = directory.Substring( 0, slashIndex );
- }
-
- return directory;
-#endif // !PLATFORM_UNIX
- }
-
- public override SiteString Copy()
- {
- return new URLString( m_urlOriginal, m_parsedOriginal );
- }
-
- public override bool IsSubsetOf( SiteString site )
- {
- if (site == null)
- {
- return false;
- }
-
- URLString url = site as URLString;
-
- if (url == null)
- {
- return false;
- }
-
- DoDeferredParse();
- url.DoDeferredParse();
-
- URLString normalUrl1 = this.SpecialNormalizeUrl();
- URLString normalUrl2 = url.SpecialNormalizeUrl();
-
- if (String.Compare( normalUrl1.m_protocol, normalUrl2.m_protocol, StringComparison.OrdinalIgnoreCase) == 0 &&
- normalUrl1.m_directory.IsSubsetOf( normalUrl2.m_directory ))
- {
-#if !PLATFORM_UNIX
- if (normalUrl1.m_localSite != null)
- {
- // We do a little extra processing in here for local files since we allow
- // both <drive_letter>: and <drive_letter>| forms of urls.
-
- return normalUrl1.m_localSite.IsSubsetOf( normalUrl2.m_localSite );
- }
- else
-#endif // !PLATFORM_UNIX
- {
- if (normalUrl1.m_port != normalUrl2.m_port)
- return false;
-
- return normalUrl2.m_siteString != null && normalUrl1.m_siteString.IsSubsetOf( normalUrl2.m_siteString );
- }
- }
- else
- {
- return false;
- }
- }
-
- public override String ToString()
- {
- return m_urlOriginal;
- }
-
- public override bool Equals(Object o)
- {
- DoDeferredParse();
-
- if (o == null || !(o is URLString))
- return false;
- else
- return this.Equals( (URLString)o );
- }
-
- public override int GetHashCode()
- {
- DoDeferredParse();
-
- TextInfo info = CultureInfo.InvariantCulture.TextInfo;
- int accumulator = 0;
-
- if (this.m_protocol != null)
- accumulator = info.GetCaseInsensitiveHashCode( this.m_protocol );
-
-#if !PLATFORM_UNIX
- if (this.m_localSite != null)
- {
- accumulator = accumulator ^ this.m_localSite.GetHashCode();
- }
- else
- {
- accumulator = accumulator ^ this.m_siteString.GetHashCode();
- }
- accumulator = accumulator ^ this.m_directory.GetHashCode();
-#else
- accumulator = accumulator ^ info.GetCaseInsensitiveHashCode(this.m_urlOriginal);
-#endif // !PLATFORM_UNIX
-
-
-
- return accumulator;
- }
-
- public bool Equals( URLString url )
- {
- return CompareUrls( this, url );
- }
-
- public static bool CompareUrls( URLString url1, URLString url2 )
- {
- if (url1 == null && url2 == null)
- return true;
-
- if (url1 == null || url2 == null)
- return false;
-
- url1.DoDeferredParse();
- url2.DoDeferredParse();
-
- URLString normalUrl1 = url1.SpecialNormalizeUrl();
- URLString normalUrl2 = url2.SpecialNormalizeUrl();
-
- // Compare protocol (case insensitive)
-
- if (String.Compare( normalUrl1.m_protocol, normalUrl2.m_protocol, StringComparison.OrdinalIgnoreCase) != 0)
- return false;
-
- // Do special processing for file urls
-
- if (String.Compare( normalUrl1.m_protocol, "file", StringComparison.OrdinalIgnoreCase) == 0)
- {
-#if !PLATFORM_UNIX
- if (!normalUrl1.m_localSite.IsSubsetOf( normalUrl2.m_localSite ) ||
- !normalUrl2.m_localSite.IsSubsetOf( normalUrl1.m_localSite ))
- return false;
-#else
- return url1.IsSubsetOf( url2 ) &&
- url2.IsSubsetOf( url1 );
-#endif // !PLATFORM_UNIX
- }
- else
- {
- if (String.Compare( normalUrl1.m_userpass, normalUrl2.m_userpass, StringComparison.Ordinal) != 0)
- return false;
-
- if (!normalUrl1.m_siteString.IsSubsetOf( normalUrl2.m_siteString ) ||
- !normalUrl2.m_siteString.IsSubsetOf( normalUrl1.m_siteString ))
- return false;
-
- if (url1.m_port != url2.m_port)
- return false;
- }
-
- if (!normalUrl1.m_directory.IsSubsetOf( normalUrl2.m_directory ) ||
- !normalUrl2.m_directory.IsSubsetOf( normalUrl1.m_directory ))
- return false;
-
- return true;
- }
-
- internal String NormalizeUrl()
- {
- DoDeferredParse();
- StringBuilder builtUrl = StringBuilderCache.Acquire();
-
- if (String.Compare( m_protocol, "file", StringComparison.OrdinalIgnoreCase) == 0)
- {
-#if !PLATFORM_UNIX
- builtUrl = builtUrl.AppendFormat("FILE:///{0}/{1}", m_localSite.ToString(), m_directory.ToString());
-#else
- builtUrl = builtUrl.AppendFormat("FILE:///{0}", m_directory.ToString());
-#endif // !PLATFORM_UNIX
- }
- else
- {
- builtUrl = builtUrl.AppendFormat("{0}://{1}{2}", m_protocol, m_userpass, m_siteString.ToString());
-
- if (m_port != -1)
- builtUrl = builtUrl.AppendFormat("{0}",m_port);
-
- builtUrl = builtUrl.AppendFormat("/{0}", m_directory.ToString());
- }
-
- return StringBuilderCache.GetStringAndRelease(builtUrl).ToUpper(CultureInfo.InvariantCulture);
- }
-
-#if !PLATFORM_UNIX
- internal URLString SpecialNormalizeUrl()
- {
- // Under WinXP, file protocol urls can be mapped to
- // drives that aren't actually file protocol underneath
- // due to drive mounting. This code attempts to figure
- // out what a drive is mounted to and create the
- // url is maps to.
-
- DoDeferredParse();
- if (String.Compare( m_protocol, "file", StringComparison.OrdinalIgnoreCase) != 0)
- {
- return this;
- }
- else
- {
- String localSite = m_localSite.ToString();
-
- if (localSite.Length == 2 &&
- (localSite[1] == '|' ||
- localSite[1] == ':'))
- {
- String deviceName = null;
- GetDeviceName(localSite, JitHelpers.GetStringHandleOnStack(ref deviceName));
-
- if (deviceName != null)
- {
- if (deviceName.IndexOf( "://", StringComparison.Ordinal ) != -1)
- {
- URLString u = new URLString( deviceName + "/" + this.m_directory.ToString() );
- u.DoDeferredParse(); // Presumably the caller of SpecialNormalizeUrl wants a fully parsed URL
- return u;
- }
- else
- {
- URLString u = new URLString( "file://" + deviceName + "/" + this.m_directory.ToString() );
- u.DoDeferredParse();// Presumably the caller of SpecialNormalizeUrl wants a fully parsed URL
- return u;
- }
- }
- else
- return this;
- }
- else
- {
- return this;
- }
- }
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetDeviceName( String driveLetter, StringHandleOnStack retDeviceName );
-
-#else
- internal URLString SpecialNormalizeUrl()
- {
- return this;
- }
-#endif // !PLATFORM_UNIX
-
- }
-
-
- [Serializable]
- internal class DirectoryString : SiteString
- {
- private bool m_checkForIllegalChars;
-
- private new static char[] m_separators = { '/' };
-
- // From KB #Q177506, file/folder illegal characters are \ / : * ? " < > |
- protected static char[] m_illegalDirectoryCharacters = { '\\', ':', '*', '?', '"', '<', '>', '|' };
-
- public DirectoryString()
- {
- m_site = "";
- m_separatedSite = new ArrayList();
- }
-
- public DirectoryString( String directory, bool checkForIllegalChars )
- {
- m_site = directory;
- m_checkForIllegalChars = checkForIllegalChars;
- m_separatedSite = CreateSeparatedString(directory);
- }
-
- private ArrayList CreateSeparatedString(String directory)
- {
- if (directory == null || directory.Length == 0)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidDirectoryOnUrl"));
- }
- Contract.EndContractBlock();
-
- ArrayList list = new ArrayList();
- String[] separatedArray = directory.Split(m_separators);
-
- for (int index = 0; index < separatedArray.Length; ++index)
- {
- if (separatedArray[index] == null || separatedArray[index].Equals( "" ))
- {
- // this case is fine, we just ignore it the extra separators.
- }
- else if (separatedArray[index].Equals( "*" ))
- {
- if (index != separatedArray.Length-1)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidDirectoryOnUrl"));
- }
- list.Add( separatedArray[index] );
- }
- else if (m_checkForIllegalChars && separatedArray[index].IndexOfAny( m_illegalDirectoryCharacters ) != -1)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidDirectoryOnUrl"));
- }
- else
- {
- list.Add( separatedArray[index] );
- }
- }
-
- return list;
- }
-
- public virtual bool IsSubsetOf( DirectoryString operand )
- {
- return this.IsSubsetOf( operand, true );
- }
-
- public virtual bool IsSubsetOf( DirectoryString operand, bool ignoreCase )
- {
- if (operand == null)
- {
- return false;
- }
- else if (operand.m_separatedSite.Count == 0)
- {
- return this.m_separatedSite.Count == 0 || this.m_separatedSite.Count > 0 && String.Compare((String)this.m_separatedSite[0], "*", StringComparison.Ordinal) == 0;
- }
- else if (this.m_separatedSite.Count == 0)
- {
- return String.Compare((String)operand.m_separatedSite[0], "*", StringComparison.Ordinal) == 0;
- }
- else
- {
- return base.IsSubsetOf( operand, ignoreCase );
- }
- }
- }
-
-#if !PLATFORM_UNIX
- [Serializable]
- internal class LocalSiteString : SiteString
- {
- private new static char[] m_separators = { '/' };
-
- public LocalSiteString( String site )
- {
- m_site = site.Replace( '|', ':');
-
- if (m_site.Length > 2 && m_site.IndexOf( ':' ) != -1)
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidDirectoryOnUrl"));
-
- m_separatedSite = CreateSeparatedString(m_site);
- }
-
- private ArrayList CreateSeparatedString(String directory)
- {
- if (directory == null || directory.Length == 0)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidDirectoryOnUrl"));
- }
- Contract.EndContractBlock();
-
- ArrayList list = new ArrayList();
- String[] separatedArray = directory.Split(m_separators);
-
- for (int index = 0; index < separatedArray.Length; ++index)
- {
- if (separatedArray[index] == null || separatedArray[index].Equals( "" ))
- {
- if (index < 2 &&
- directory[index] == '/')
- {
- list.Add( "//" );
- }
- else if (index != separatedArray.Length-1)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidDirectoryOnUrl"));
- }
- }
- else if (separatedArray[index].Equals( "*" ))
- {
- if (index != separatedArray.Length-1)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidDirectoryOnUrl"));
- }
- list.Add( separatedArray[index] );
- }
- else
- {
- list.Add( separatedArray[index] );
- }
- }
-
- return list;
- }
-
- public virtual bool IsSubsetOf( LocalSiteString operand )
- {
- return this.IsSubsetOf( operand, true );
- }
-
- public virtual bool IsSubsetOf( LocalSiteString operand, bool ignoreCase )
- {
- if (operand == null)
- {
- return false;
- }
- else if (operand.m_separatedSite.Count == 0)
- {
- return this.m_separatedSite.Count == 0 || this.m_separatedSite.Count > 0 && String.Compare((String)this.m_separatedSite[0], "*", StringComparison.Ordinal) == 0;
- }
- else if (this.m_separatedSite.Count == 0)
- {
- return String.Compare((String)operand.m_separatedSite[0], "*", StringComparison.Ordinal) == 0;
- }
- else
- {
- return base.IsSubsetOf( operand, ignoreCase );
- }
- }
}
-#endif // !PLATFORM_UNIX
}
diff --git a/src/mscorlib/src/System/Security/Util/XMLUtil.cs b/src/mscorlib/src/System/Security/Util/XMLUtil.cs
deleted file mode 100644
index 3a1aaa3b09..0000000000
--- a/src/mscorlib/src/System/Security/Util/XMLUtil.cs
+++ /dev/null
@@ -1,435 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-** PURPOSE: Helpers for XML input & output
-**
-===========================================================*/
-namespace System.Security.Util {
-
- using System;
- using System.Security;
- using System.Security.Permissions;
- using System.Security.Policy;
- using System.Runtime.InteropServices;
- using System.Runtime.Remoting;
- using System.IO;
- using System.Text;
- using System.Runtime.CompilerServices;
- using PermissionState = System.Security.Permissions.PermissionState;
- using BindingFlags = System.Reflection.BindingFlags;
- using Assembly = System.Reflection.Assembly;
- using System.Threading;
- using System.Globalization;
- using System.Reflection;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- internal static class XMLUtil
- {
- //
- // Warning: Element constructors have side-effects on their
- // third argument.
- //
-
- private const String BuiltInPermission = "System.Security.Permissions.";
-
- public static SecurityElement
- NewPermissionElement (IPermission ip)
- {
- return NewPermissionElement (ip.GetType ().FullName) ;
- }
-
- public static SecurityElement
- NewPermissionElement (String name)
- {
- SecurityElement ecr = new SecurityElement( "Permission" );
- ecr.AddAttribute( "class", name );
- return ecr;
- }
-
- public static void
- AddClassAttribute( SecurityElement element, Type type, String typename )
- {
- // Replace any quotes with apostrophes so that we can include quoted materials
- // within classnames. Notably the assembly name member 'loc' uses a quoted string.
-
- // NOTE: this makes assumptions as to what reflection is expecting for a type string
- // it will need to be updated if reflection changes what it wants.
-
- if ( typename == null )
- typename = type.FullName;
- Debug.Assert( type.FullName.Equals( typename ), "Incorrect class name passed! Was : " + typename + " Shoule be: " + type.FullName);
- element.AddAttribute( "class", typename + ", " + type.Module.Assembly.FullName.Replace( '\"', '\'' ) );
- }
-
- internal static bool ParseElementForAssemblyIdentification(SecurityElement el,
- out String className,
- out String assemblyName, // for example "WindowsBase"
- out String assemblyVersion)
- {
-
- className = null;
- assemblyName = null;
- assemblyVersion = null;
-
- String fullClassName = el.Attribute( "class" );
-
- if (fullClassName == null)
- {
- return false;
- }
- if (fullClassName.IndexOf('\'') >= 0)
- {
- fullClassName = fullClassName.Replace( '\'', '\"' );
- }
-
- int commaIndex = fullClassName.IndexOf( ',' );
- int namespaceClassNameLength;
-
- // If the classname is tagged with assembly information, find where
- // the assembly information begins.
-
- if (commaIndex == -1)
- {
- return false;
- }
-
- namespaceClassNameLength = commaIndex;
- className = fullClassName.Substring(0, namespaceClassNameLength);
- String assemblyFullName = fullClassName.Substring(commaIndex + 1);
- AssemblyName an = new AssemblyName(assemblyFullName);
- assemblyName = an.Name;
- assemblyVersion = an.Version.ToString();
- return true;
- }
- private static bool
- ParseElementForObjectCreation( SecurityElement el,
- String requiredNamespace,
- out String className,
- out int classNameStart,
- out int classNameLength )
- {
- className = null;
- classNameStart = 0;
- classNameLength = 0;
-
- int requiredNamespaceLength = requiredNamespace.Length;
-
- String fullClassName = el.Attribute( "class" );
-
- if (fullClassName == null)
- {
- throw new ArgumentException( Environment.GetResourceString( "Argument_NoClass" ) );
- }
-
- if (fullClassName.IndexOf('\'') >= 0)
- {
- fullClassName = fullClassName.Replace( '\'', '\"' );
- }
-
- if (!PermissionToken.IsMscorlibClassName( fullClassName ))
- {
- return false;
- }
-
- int commaIndex = fullClassName.IndexOf( ',' );
- int namespaceClassNameLength;
-
- // If the classname is tagged with assembly information, find where
- // the assembly information begins.
-
- if (commaIndex == -1)
- {
- namespaceClassNameLength = fullClassName.Length;
- }
- else
- {
- namespaceClassNameLength = commaIndex;
- }
-
- // Only if the length of the class name is greater than the namespace info
- // on our requiredNamespace do we continue
- // with our check.
-
- if (namespaceClassNameLength > requiredNamespaceLength)
- {
- // Make sure we are in the required namespace.
- if (fullClassName.StartsWith(requiredNamespace, StringComparison.Ordinal))
- {
- className = fullClassName;
- classNameLength = namespaceClassNameLength - requiredNamespaceLength;
- classNameStart = requiredNamespaceLength;
- return true;
- }
- }
-
- return false;
- }
-
- public static IPermission
- CreatePermission (SecurityElement el, PermissionState permState, bool ignoreTypeLoadFailures)
- {
- if (el == null || !(el.Tag.Equals("Permission") || el.Tag.Equals("IPermission")) )
- throw new ArgumentException( String.Format( null, Environment.GetResourceString( "Argument_WrongElementType" ), "<Permission>" ) ) ;
- Contract.EndContractBlock();
-
- String className;
- int classNameLength;
- int classNameStart;
-
- if (!ParseElementForObjectCreation( el,
- BuiltInPermission,
- out className,
- out classNameStart,
- out classNameLength ))
- {
- goto USEREFLECTION;
- }
-
- // We have a built in permission, figure out which it is.
-
- // UIPermission
- // FileIOPermission
- // SecurityPermission
- // PrincipalPermission
- // ReflectionPermission
- // FileDialogPermission
- // EnvironmentPermission
- // GacIdentityPermission
- // UrlIdentityPermission
- // SiteIdentityPermission
- // ZoneIdentityPermission
- // KeyContainerPermission
- // UnsafeForHostPermission
- // HostProtectionPermission
- // StrongNameIdentityPermission
- // RegistryPermission
- // PublisherIdentityPermission
-
- switch (classNameLength)
- {
- case 12:
- // UIPermission
- if (String.Compare(className, classNameStart, "UIPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new UIPermission( permState );
- else
- goto USEREFLECTION;
-
- case 16:
- // FileIOPermission
- if (String.Compare(className, classNameStart, "FileIOPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new FileIOPermission( permState );
- else
- goto USEREFLECTION;
-
- case 18:
- // RegistryPermission
- // SecurityPermission
- if (className[classNameStart] == 'R')
- {
- if (String.Compare(className, classNameStart, "RegistryPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new RegistryPermission( permState );
- else
- goto USEREFLECTION;
- }
- else
- {
- if (String.Compare(className, classNameStart, "SecurityPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new SecurityPermission( permState );
- else
- goto USEREFLECTION;
- }
- case 20:
- // ReflectionPermission
- // FileDialogPermission
- if (className[classNameStart] == 'R')
- {
- if (String.Compare(className, classNameStart, "ReflectionPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new ReflectionPermission( permState );
- else
- goto USEREFLECTION;
- }
- else
- {
- if (String.Compare(className, classNameStart, "FileDialogPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new FileDialogPermission( permState );
- else
- goto USEREFLECTION;
- }
-
- case 21:
- // EnvironmentPermission
- // UrlIdentityPermission
- // GacIdentityPermission
- if (className[classNameStart] == 'E')
- {
- if (String.Compare(className, classNameStart, "EnvironmentPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new EnvironmentPermission( permState );
- else
- goto USEREFLECTION;
- }
- else if (className[classNameStart] == 'U')
- {
- if (String.Compare(className, classNameStart, "UrlIdentityPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new UrlIdentityPermission( permState );
- else
- goto USEREFLECTION;
- }
- else
- {
- if (String.Compare(className, classNameStart, "GacIdentityPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new GacIdentityPermission( permState );
- else
- goto USEREFLECTION;
- }
- case 22:
- // SiteIdentityPermission
- // ZoneIdentityPermission
- // KeyContainerPermission
- if (className[classNameStart] == 'S')
- {
- if (String.Compare(className, classNameStart, "SiteIdentityPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new SiteIdentityPermission( permState );
- else
- goto USEREFLECTION;
- }
- else if (className[classNameStart] == 'Z')
- {
- if (String.Compare(className, classNameStart, "ZoneIdentityPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new ZoneIdentityPermission( permState );
- else
- goto USEREFLECTION;
- }
- else
- {
- if (String.Compare(className, classNameStart, "KeyContainerPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new KeyContainerPermission( permState );
- else
- goto USEREFLECTION;
- }
- case 24:
- // HostProtectionPermission
- if (String.Compare(className, classNameStart, "HostProtectionPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new HostProtectionPermission( permState );
- else
- goto USEREFLECTION;
- case 28:
- // StrongNameIdentityPermission
- if (String.Compare(className, classNameStart, "StrongNameIdentityPermission", 0, classNameLength, StringComparison.Ordinal) == 0)
- return new StrongNameIdentityPermission( permState );
- else
- goto USEREFLECTION;
- default:
- goto USEREFLECTION;
- }
-
-USEREFLECTION:
-
- Object[] objs = new Object[1];
- objs[0] = permState;
-
- Type permClass = null;
- IPermission perm = null;
-
- new ReflectionPermission(ReflectionPermissionFlag.MemberAccess).Assert();
- permClass = GetClassFromElement(el, ignoreTypeLoadFailures);
- if (permClass == null)
- return null;
- if (!(typeof(IPermission).IsAssignableFrom(permClass)))
- throw new ArgumentException( Environment.GetResourceString("Argument_NotAPermissionType") );
-
- perm = (IPermission) Activator.CreateInstance(permClass, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public, null, objs, null );
-
- return perm;
- }
-
- internal static Type
- GetClassFromElement (SecurityElement el, bool ignoreTypeLoadFailures)
- {
- String className = el.Attribute( "class" );
-
- if (className == null)
- {
- if (ignoreTypeLoadFailures)
- return null;
- else
- throw new ArgumentException( String.Format( null, Environment.GetResourceString("Argument_InvalidXMLMissingAttr"), "class") );
- }
-
- if (ignoreTypeLoadFailures)
- {
- try
- {
- return Type.GetType(className, false, false);
- }
- catch (SecurityException)
- {
- return null;
- }
- }
- else
- return Type.GetType(className, true, false);
- }
-
- public static bool
- IsPermissionElement (IPermission ip,
- SecurityElement el)
- {
- if (!el.Tag.Equals ("Permission") && !el.Tag.Equals ("IPermission"))
- return false;
-
- return true;
- }
-
- public static bool
- IsUnrestricted (SecurityElement el)
- {
- String sUnrestricted = el.Attribute( "Unrestricted" );
-
- if (sUnrestricted == null)
- return false;
-
- return sUnrestricted.Equals( "true" ) || sUnrestricted.Equals( "TRUE" ) || sUnrestricted.Equals( "True" );
- }
-
-
- public static String BitFieldEnumToString( Type type, Object value )
- {
- int iValue = (int)value;
-
- if (iValue == 0)
- return Enum.GetName( type, 0 );
-
- StringBuilder result = StringBuilderCache.Acquire();
- bool first = true;
- int flag = 0x1;
-
- for (int i = 1; i < 32; ++i)
- {
- if ((flag & iValue) != 0)
- {
- String sFlag = Enum.GetName( type, flag );
-
- if (sFlag == null)
- continue;
-
- if (!first)
- {
- result.Append( ", " );
- }
-
- result.Append( sFlag );
- first = false;
- }
-
- flag = flag << 1;
- }
-
- return StringBuilderCache.GetStringAndRelease(result);
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/Util/sitestring.cs b/src/mscorlib/src/System/Security/Util/sitestring.cs
deleted file mode 100644
index 28f23742ec..0000000000
--- a/src/mscorlib/src/System/Security/Util/sitestring.cs
+++ /dev/null
@@ -1,289 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Security.Util {
- using System;
- using System.Collections;
- using System.Globalization;
- using System.Diagnostics.Contracts;
-
- [Serializable]
- internal class SiteString
- {
- protected String m_site;
- protected ArrayList m_separatedSite;
-
- protected static char[] m_separators = { '.' };
-
- protected internal SiteString()
- {
- // Only call this in derived classes when you know what you're doing.
- }
-
- public SiteString( String site )
- {
- m_separatedSite = CreateSeparatedSite( site );
- m_site = site;
- }
-
- private SiteString(String site, ArrayList separatedSite)
- {
- m_separatedSite = separatedSite;
- m_site = site;
- }
-
- private static ArrayList CreateSeparatedSite(String site)
- {
- if (site == null || site.Length == 0)
- {
- throw new ArgumentException( Environment.GetResourceString("Argument_InvalidSite" ));
- }
- Contract.EndContractBlock();
-
- ArrayList list = new ArrayList();
- int braIndex = -1;
- int ketIndex = -1;
- braIndex = site.IndexOf('[');
- if (braIndex == 0)
- ketIndex = site.IndexOf(']', braIndex+1);
-
- if (ketIndex != -1)
- {
- // Found an IPv6 address. Special case that
- String ipv6Addr = site.Substring(braIndex+1, ketIndex-braIndex-1);
- list.Add(ipv6Addr);
- return list;
- }
-
- // Regular hostnames or IPv4 addresses
- // We dont need to do this for IPv4 addresses, but it's easier to do it anyway
- String[] separatedArray = site.Split( m_separators );
-
- for (int index = separatedArray.Length-1; index > -1; --index)
- {
- if (separatedArray[index] == null)
- {
- throw new ArgumentException( Environment.GetResourceString("Argument_InvalidSite" ));
- }
- else if (separatedArray[index].Equals( "" ))
- {
- if (index != separatedArray.Length-1)
- {
- throw new ArgumentException( Environment.GetResourceString("Argument_InvalidSite" ));
- }
- }
- else if (separatedArray[index].Equals( "*" ))
- {
- if (index != 0)
- {
- throw new ArgumentException( Environment.GetResourceString("Argument_InvalidSite" ));
- }
- list.Add( separatedArray[index] );
- }
- else if (!AllLegalCharacters( separatedArray[index] ))
- {
- throw new ArgumentException( Environment.GetResourceString("Argument_InvalidSite" ));
- }
- else
- {
- list.Add( separatedArray[index] );
- }
- }
-
- return list;
- }
-
- // KB# Q188997 - http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q188997& gives the list of allowed characters in
- // a NETBIOS name. DNS names are a subset of that (alphanumeric or '-').
- private static bool AllLegalCharacters( String str )
- {
- for (int i = 0; i < str.Length; ++i)
- {
- char c = str[i];
-
- if (IsLegalDNSChar(c) ||
- IsNetbiosSplChar(c))
- {
- continue;
- }
- else
- {
- return false;
- }
- }
-
- return true;
- }
-
- private static bool IsLegalDNSChar(char c)
- {
- if ((c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z') ||
- (c >= '0' && c <= '9') ||
- (c == '-'))
- return true;
- else
- return false;
- }
- private static bool IsNetbiosSplChar(char c)
- {
- // ! @ # $ % ^ & ( ) - _ ' { } . ~ are OK
- switch (c) {
- case '-':
- case '_':
- case '@':
- case '!':
- case '#':
- case '$':
- case '%':
- case '^':
- case '&':
- case '(':
- case ')':
- case '\'':
- case '{':
- case '}':
- case '.':
- case '~':
- return true;
- default:
- return false;
- }
- }
-
- public override String ToString()
- {
- return m_site;
- }
-
- public override bool Equals(Object o)
- {
- if (o == null || !(o is SiteString))
- return false;
- else
- return this.Equals( (SiteString)o, true );
- }
-
- public override int GetHashCode()
- {
- TextInfo info = CultureInfo.InvariantCulture.TextInfo;
-
- return info.GetCaseInsensitiveHashCode( this.m_site );
- }
-
- internal bool Equals( SiteString ss, bool ignoreCase )
- {
- if (this.m_site == null)
- return ss.m_site == null;
- if (ss.m_site == null)
- return false;
- return this.IsSubsetOf(ss, ignoreCase) && ss.IsSubsetOf(this, ignoreCase);
- }
-
-
- public virtual SiteString Copy()
- {
- return new SiteString( m_site, m_separatedSite );
- }
-
- public virtual bool IsSubsetOf( SiteString operand )
- {
- return this.IsSubsetOf( operand, true );
- }
-
- public virtual bool IsSubsetOf( SiteString operand, bool ignoreCase )
- {
- StringComparison strComp = (ignoreCase? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
- if (operand == null)
- {
- return false;
- }
- else if (this.m_separatedSite.Count == operand.m_separatedSite.Count &&
- this.m_separatedSite.Count == 0)
- {
- return true;
- }
- else if (this.m_separatedSite.Count < operand.m_separatedSite.Count - 1)
- {
- return false;
- }
- else if (this.m_separatedSite.Count > operand.m_separatedSite.Count &&
- operand.m_separatedSite.Count > 0 &&
- !operand.m_separatedSite[operand.m_separatedSite.Count - 1].Equals("*"))
- {
- return false;
- }
- else if (String.Compare( this.m_site, operand.m_site, strComp) == 0)
- {
- return true;
- }
-
- for (int index = 0; index < operand.m_separatedSite.Count - 1; ++index)
- {
- if (String.Compare((String)this.m_separatedSite[index], (String)operand.m_separatedSite[index], strComp) != 0)
- {
- return false;
- }
- }
-
- if (this.m_separatedSite.Count < operand.m_separatedSite.Count)
- {
- return operand.m_separatedSite[operand.m_separatedSite.Count - 1].Equals("*");
- }
- else if (this.m_separatedSite.Count == operand.m_separatedSite.Count)
- {
- // last item must be the same or operand must have a * in its last item
- return (String.Compare((String)this.m_separatedSite[this.m_separatedSite.Count - 1],
- (String)operand.m_separatedSite[this.m_separatedSite.Count - 1],
- strComp ) == 0 ||
- operand.m_separatedSite[operand.m_separatedSite.Count - 1].Equals("*"));
-
- }
- else
- return true;
- }
-
-
-
- public virtual SiteString Intersect( SiteString operand )
- {
- if (operand == null)
- {
- return null;
- }
- else if (this.IsSubsetOf( operand ))
- {
- return this.Copy();
- }
- else if (operand.IsSubsetOf( this ))
- {
- return operand.Copy();
- }
- else
- {
- return null;
- }
- }
-
- public virtual SiteString Union( SiteString operand )
- {
- if (operand == null)
- {
- return this;
- }
- else if (this.IsSubsetOf( operand ))
- {
- return operand.Copy();
- }
- else if (operand.IsSubsetOf( this ))
- {
- return this.Copy();
- }
- else
- {
- return null;
- }
- }
- }
-}
diff --git a/src/mscorlib/src/System/Security/VerificationException.cs b/src/mscorlib/src/System/Security/VerificationException.cs
index b0823cac01..5defbd6603 100644
--- a/src/mscorlib/src/System/Security/VerificationException.cs
+++ b/src/mscorlib/src/System/Security/VerificationException.cs
@@ -9,7 +9,6 @@ namespace System.Security {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class VerificationException : SystemException {
public VerificationException()
diff --git a/src/mscorlib/src/System/Security/securestring.cs b/src/mscorlib/src/System/Security/securestring.cs
deleted file mode 100644
index 548126f4d0..0000000000
--- a/src/mscorlib/src/System/Security/securestring.cs
+++ /dev/null
@@ -1,751 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-namespace System.Security {
- using System.Security.Cryptography;
- using System.Runtime.InteropServices;
-#if FEATURE_CORRUPTING_EXCEPTIONS
- using System.Runtime.ExceptionServices;
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- using System.Text;
- using Microsoft.Win32;
- using System.Runtime.CompilerServices;
- using System.Security.Permissions;
- using System.Runtime.ConstrainedExecution;
- using System.Runtime.Versioning;
- using Microsoft.Win32.SafeHandles;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- public sealed class SecureString: IDisposable {
- [System.Security.SecurityCritical] // auto-generated
- private SafeBSTRHandle m_buffer;
- [ContractPublicPropertyName("Length")]
- private int m_length;
- private bool m_readOnly;
- private bool m_encrypted;
-
- static bool supportedOnCurrentPlatform = EncryptionSupported();
-
- const int BlockSize = (int)Win32Native.CRYPTPROTECTMEMORY_BLOCK_SIZE /2; // a char is two bytes
- const int MaxLength = 65536;
- const uint ProtectionScope = Win32Native.CRYPTPROTECTMEMORY_SAME_PROCESS;
-
- [System.Security.SecuritySafeCritical] // auto-generated
- static SecureString()
- {
- }
-
- [System.Security.SecurityCritical] // auto-generated
- unsafe static bool EncryptionSupported() {
- // check if the enrypt/decrypt function is supported on current OS
- bool supported = true;
- try {
- Win32Native.SystemFunction041(
- SafeBSTRHandle.Allocate(null , (int)Win32Native.CRYPTPROTECTMEMORY_BLOCK_SIZE),
- Win32Native.CRYPTPROTECTMEMORY_BLOCK_SIZE,
- Win32Native.CRYPTPROTECTMEMORY_SAME_PROCESS);
- }
- catch (EntryPointNotFoundException) {
- supported = false;
- }
- return supported;
- }
-
- [System.Security.SecurityCritical] // auto-generated
- internal SecureString(SecureString str) {
- AllocateBuffer(str.BufferLength);
- SafeBSTRHandle.Copy(str.m_buffer, this.m_buffer);
- m_length = str.m_length;
- m_encrypted = str.m_encrypted;
- }
-
-
- [System.Security.SecuritySafeCritical] // auto-generated
- public SecureString() {
- CheckSupportedOnCurrentPlatform();
-
- // allocate the minimum block size for calling protectMemory
- AllocateBuffer(BlockSize);
- m_length = 0;
- }
-
-
- [System.Security.SecurityCritical] // auto-generated
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- private unsafe void InitializeSecureString(char* value, int length)
- {
- CheckSupportedOnCurrentPlatform();
-
- AllocateBuffer(length);
- m_length = length;
-
- byte* bufferPtr = null;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- m_buffer.AcquirePointer(ref bufferPtr);
- Buffer.Memcpy(bufferPtr, (byte*)value, length * 2);
- }
- catch (Exception) {
- ProtectMemory();
- throw;
- }
- finally
- {
- if (bufferPtr != null)
- m_buffer.ReleasePointer();
- }
-
- ProtectMemory();
- }
-
- [System.Security.SecurityCritical] // auto-generated
- [CLSCompliant(false)]
- public unsafe SecureString(char* value, int length) {
- if( value == null) {
- throw new ArgumentNullException(nameof(value));
- }
-
- if( length < 0) {
- throw new ArgumentOutOfRangeException(nameof(length), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- }
-
- if( length > MaxLength) {
- throw new ArgumentOutOfRangeException(nameof(length), Environment.GetResourceString("ArgumentOutOfRange_Length"));
- }
- Contract.EndContractBlock();
-
- // Refactored since HandleProcessCorruptedStateExceptionsAttribute applies to methods only (yet).
- InitializeSecureString(value, length);
- }
-
- public int Length {
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- get {
- EnsureNotDisposed();
- return m_length;
- }
- }
-
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- public void AppendChar(char c) {
- EnsureNotDisposed();
- EnsureNotReadOnly();
-
- EnsureCapacity(m_length + 1);
-
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- UnProtectMemory();
- m_buffer.Write<char>((uint)m_length * sizeof(char), c);
- m_length++;
- }
- catch (Exception) {
- ProtectMemory();
- throw;
- }
- finally {
- ProtectMemory();
- }
- }
-
- // clears the current contents. Only available if writable
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public void Clear() {
- EnsureNotDisposed();
- EnsureNotReadOnly();
-
- m_length = 0;
- m_buffer.ClearBuffer();
- m_encrypted = false;
- }
-
- // Do a deep-copy of the SecureString
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public SecureString Copy() {
- EnsureNotDisposed();
- return new SecureString(this);
- }
-
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public void Dispose() {
- if(m_buffer != null && !m_buffer.IsInvalid) {
- m_buffer.Close();
- m_buffer = null;
- }
- }
-
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- public void InsertAt( int index, char c ) {
- if( index < 0 || index > m_length) {
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_IndexString"));
- }
- Contract.EndContractBlock();
-
- EnsureNotDisposed();
- EnsureNotReadOnly();
-
- EnsureCapacity(m_length + 1);
-
- unsafe {
- byte* bufferPtr = null;
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- UnProtectMemory();
- m_buffer.AcquirePointer(ref bufferPtr);
- char* pBuffer = (char*)bufferPtr;
-
- for (int i = m_length; i > index; i--) {
- pBuffer[i] = pBuffer[i - 1];
- }
- pBuffer[index] = c;
- ++m_length;
- }
- catch (Exception) {
- ProtectMemory();
- throw;
- }
- finally {
- ProtectMemory();
- if (bufferPtr != null)
- m_buffer.ReleasePointer();
- }
- }
- }
-
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public bool IsReadOnly() {
- EnsureNotDisposed();
- return m_readOnly;
- }
-
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
- public void MakeReadOnly() {
- EnsureNotDisposed();
- m_readOnly = true;
- }
-
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- public void RemoveAt( int index ) {
- EnsureNotDisposed();
- EnsureNotReadOnly();
-
- if( index < 0 || index >= m_length) {
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_IndexString"));
- }
-
- unsafe
- {
- byte* bufferPtr = null;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- UnProtectMemory();
- m_buffer.AcquirePointer(ref bufferPtr);
- char* pBuffer = (char*)bufferPtr;
-
- for (int i = index; i < m_length - 1; i++)
- {
- pBuffer[i] = pBuffer[i + 1];
- }
- pBuffer[--m_length] = (char)0;
- }
- catch (Exception) {
- ProtectMemory();
- throw;
- }
- finally
- {
- ProtectMemory();
- if (bufferPtr != null)
- m_buffer.ReleasePointer();
- }
- }
- }
-
- [System.Security.SecuritySafeCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- public void SetAt( int index, char c ) {
- if( index < 0 || index >= m_length) {
- throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_IndexString"));
- }
- Contract.EndContractBlock();
- Debug.Assert(index <= Int32.MaxValue / sizeof(char));
-
- EnsureNotDisposed();
- EnsureNotReadOnly();
-
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- UnProtectMemory();
- m_buffer.Write<char>((uint)index * sizeof(char), c);
- }
- catch (Exception) {
- ProtectMemory();
- throw;
- }
- finally {
- ProtectMemory();
- }
- }
-
- private int BufferLength {
- [System.Security.SecurityCritical] // auto-generated
- get {
- Debug.Assert(m_buffer != null, "Buffer is not initialized!");
- return m_buffer.Length;
- }
- }
-
- [System.Security.SecurityCritical] // auto-generated
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- private void AllocateBuffer(int size) {
- uint alignedSize = GetAlignedSize(size);
-
- m_buffer = SafeBSTRHandle.Allocate(null, alignedSize);
- if (m_buffer.IsInvalid) {
- throw new OutOfMemoryException();
- }
- }
-
- private void CheckSupportedOnCurrentPlatform() {
- if( !supportedOnCurrentPlatform) {
- throw new NotSupportedException(Environment.GetResourceString("Arg_PlatformSecureString"));
- }
- Contract.EndContractBlock();
- }
-
- [System.Security.SecurityCritical] // auto-generated
- private void EnsureCapacity(int capacity) {
- if( capacity > MaxLength) {
- throw new ArgumentOutOfRangeException(nameof(capacity), Environment.GetResourceString("ArgumentOutOfRange_Capacity"));
- }
- Contract.EndContractBlock();
-
- if( capacity <= m_buffer.Length) {
- return;
- }
-
- SafeBSTRHandle newBuffer = SafeBSTRHandle.Allocate(null, GetAlignedSize(capacity));
-
- if (newBuffer.IsInvalid) {
- throw new OutOfMemoryException();
- }
-
- SafeBSTRHandle.Copy(m_buffer, newBuffer);
- m_buffer.Close();
- m_buffer = newBuffer;
- }
-
- [System.Security.SecurityCritical] // auto-generated
- private void EnsureNotDisposed() {
- if( m_buffer == null) {
- throw new ObjectDisposedException(null);
- }
- Contract.EndContractBlock();
- }
-
- private void EnsureNotReadOnly() {
- if( m_readOnly) {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
- }
- Contract.EndContractBlock();
- }
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- private static uint GetAlignedSize( int size) {
- Debug.Assert(size >= 0, "size must be non-negative");
-
- uint alignedSize = ((uint)size / BlockSize) * BlockSize;
- if( (size % BlockSize != 0) || size == 0) { // if size is 0, set allocated size to blocksize
- alignedSize += BlockSize;
- }
- return alignedSize;
- }
-
- [System.Security.SecurityCritical] // auto-generated
- private unsafe int GetAnsiByteCount() {
- const uint CP_ACP = 0;
- const uint WC_NO_BEST_FIT_CHARS = 0x00000400;
-
- uint flgs = WC_NO_BEST_FIT_CHARS;
- uint DefaultCharUsed = (uint)'?';
-
- byte* bufferPtr = null;
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- m_buffer.AcquirePointer(ref bufferPtr);
-
- return Win32Native.WideCharToMultiByte(
- CP_ACP,
- flgs,
- (char*) bufferPtr,
- m_length,
- null,
- 0,
- IntPtr.Zero,
- new IntPtr((void*)&DefaultCharUsed));
- }
- finally {
- if (bufferPtr != null)
- m_buffer.ReleasePointer();
- }
- }
-
- [System.Security.SecurityCritical] // auto-generated
- private unsafe void GetAnsiBytes( byte * ansiStrPtr, int byteCount) {
- const uint CP_ACP = 0;
- const uint WC_NO_BEST_FIT_CHARS = 0x00000400;
-
- uint flgs = WC_NO_BEST_FIT_CHARS;
- uint DefaultCharUsed = (uint)'?';
-
- byte* bufferPtr = null;
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- m_buffer.AcquirePointer(ref bufferPtr);
-
- Win32Native.WideCharToMultiByte(
- CP_ACP,
- flgs,
- (char*) bufferPtr,
- m_length,
- ansiStrPtr,
- byteCount - 1,
- IntPtr.Zero,
- new IntPtr((void*)&DefaultCharUsed));
-
- *(ansiStrPtr + byteCount - 1) = (byte)0;
- }
- finally {
- if (bufferPtr != null)
- m_buffer.ReleasePointer();
- }
- }
-
- [System.Security.SecurityCritical] // auto-generated
- [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
- private void ProtectMemory() {
- Debug.Assert(!m_buffer.IsInvalid && m_buffer.Length != 0, "Invalid buffer!");
- Debug.Assert(m_buffer.Length % BlockSize == 0, "buffer length must be multiple of blocksize!");
-
- if( m_length == 0 || m_encrypted) {
- return;
- }
-
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- }
- finally {
- // RtlEncryptMemory return an NTSTATUS
- int status = Win32Native.SystemFunction040(m_buffer, (uint)m_buffer.Length * 2, ProtectionScope);
- if (status < 0) { // non-negative numbers indicate success
-#if FEATURE_CORECLR
- throw new CryptographicException(Win32Native.RtlNtStatusToDosError(status));
-#else
- throw new CryptographicException(Win32Native.LsaNtStatusToWinError(status));
-#endif
- }
- m_encrypted = true;
- }
- }
-
- [System.Security.SecurityCritical] // auto-generated
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- internal unsafe IntPtr ToBSTR() {
- EnsureNotDisposed();
- int length = m_length;
- IntPtr ptr = IntPtr.Zero;
- IntPtr result = IntPtr.Zero;
- byte* bufferPtr = null;
-
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- }
- finally {
- ptr = Win32Native.SysAllocStringLen(null, length);
- }
-
- if (ptr == IntPtr.Zero) {
- throw new OutOfMemoryException();
- }
-
- UnProtectMemory();
- m_buffer.AcquirePointer(ref bufferPtr);
- Buffer.Memcpy((byte*) ptr.ToPointer(), bufferPtr, length *2);
- result = ptr;
- }
- catch (Exception) {
- ProtectMemory();
- throw;
- }
- finally {
- ProtectMemory();
- if( result == IntPtr.Zero) {
- // If we failed for any reason, free the new buffer
- if (ptr != IntPtr.Zero) {
- Win32Native.ZeroMemory(ptr, (UIntPtr)(length * 2));
- Win32Native.SysFreeString(ptr);
- }
- }
- if (bufferPtr != null)
- m_buffer.ReleasePointer();
- }
- return result;
- }
-
- [System.Security.SecurityCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- internal unsafe IntPtr ToUniStr(bool allocateFromHeap) {
- EnsureNotDisposed();
- int length = m_length;
- IntPtr ptr = IntPtr.Zero;
- IntPtr result = IntPtr.Zero;
- byte* bufferPtr = null;
-
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- }
- finally {
- if( allocateFromHeap) {
- ptr = Marshal.AllocHGlobal((length + 1) * 2);
- }
- else {
- ptr = Marshal.AllocCoTaskMem((length + 1) * 2);
- }
- }
-
- if (ptr == IntPtr.Zero) {
- throw new OutOfMemoryException();
- }
-
- UnProtectMemory();
- m_buffer.AcquirePointer(ref bufferPtr);
- Buffer.Memcpy((byte*) ptr.ToPointer(), bufferPtr, length *2);
- char * endptr = (char *) ptr.ToPointer();
- *(endptr + length) = '\0';
- result = ptr;
- }
- catch (Exception) {
- ProtectMemory();
- throw;
- }
- finally {
- ProtectMemory();
-
- if( result == IntPtr.Zero) {
- // If we failed for any reason, free the new buffer
- if (ptr != IntPtr.Zero) {
- Win32Native.ZeroMemory(ptr, (UIntPtr)(length * 2));
- if( allocateFromHeap) {
- Marshal.FreeHGlobal(ptr);
- }
- else {
- Marshal.FreeCoTaskMem(ptr);
- }
- }
- }
-
- if (bufferPtr != null)
- m_buffer.ReleasePointer();
- }
- return result;
- }
-
- [System.Security.SecurityCritical] // auto-generated
- [MethodImplAttribute(MethodImplOptions.Synchronized)]
-#if FEATURE_CORRUPTING_EXCEPTIONS
- [HandleProcessCorruptedStateExceptions]
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
- internal unsafe IntPtr ToAnsiStr(bool allocateFromHeap) {
- EnsureNotDisposed();
-
- IntPtr ptr = IntPtr.Zero;
- IntPtr result = IntPtr.Zero;
- int byteCount = 0;
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- // GetAnsiByteCount uses the string data, so the calculation must happen after we are decrypted.
- UnProtectMemory();
-
- // allocating an extra char for terminating zero
- byteCount = GetAnsiByteCount() + 1;
-
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- }
- finally {
- if( allocateFromHeap) {
- ptr = Marshal.AllocHGlobal(byteCount);
- }
- else {
- ptr = Marshal.AllocCoTaskMem(byteCount);
- }
- }
-
- if (ptr == IntPtr.Zero) {
- throw new OutOfMemoryException();
- }
-
- GetAnsiBytes((byte *)ptr.ToPointer(), byteCount);
- result = ptr;
- }
- catch (Exception) {
- ProtectMemory();
- throw;
- }
- finally {
- ProtectMemory();
- if( result == IntPtr.Zero) {
- // If we failed for any reason, free the new buffer
- if (ptr != IntPtr.Zero) {
- Win32Native.ZeroMemory(ptr, (UIntPtr)byteCount);
- if( allocateFromHeap) {
- Marshal.FreeHGlobal(ptr);
- }
- else {
- Marshal.FreeCoTaskMem(ptr);
- }
- }
- }
-
- }
- return result;
- }
-
- [System.Security.SecurityCritical] // auto-generated
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- private void UnProtectMemory() {
- Debug.Assert(!m_buffer.IsInvalid && m_buffer.Length != 0, "Invalid buffer!");
- Debug.Assert(m_buffer.Length % BlockSize == 0, "buffer length must be multiple of blocksize!");
-
- if( m_length == 0) {
- return;
- }
-
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- }
- finally {
- if (m_encrypted) {
- // RtlEncryptMemory return an NTSTATUS
- int status = Win32Native.SystemFunction041(m_buffer, (uint)m_buffer.Length * 2, ProtectionScope);
- if (status < 0)
- { // non-negative numbers indicate success
-#if FEATURE_CORECLR
- throw new CryptographicException(Win32Native.RtlNtStatusToDosError(status));
-#else
- throw new CryptographicException(Win32Native.LsaNtStatusToWinError(status));
-#endif
- }
- m_encrypted = false;
- }
- }
- }
- }
-
- [System.Security.SecurityCritical] // auto-generated
- [SuppressUnmanagedCodeSecurityAttribute()]
- internal sealed class SafeBSTRHandle : SafeBuffer {
- internal SafeBSTRHandle () : base(true) {}
-
- internal static SafeBSTRHandle Allocate(String src, uint len)
- {
- SafeBSTRHandle bstr = SysAllocStringLen(src, len);
- bstr.Initialize(len * sizeof(char));
- return bstr;
- }
-
- [DllImport(Win32Native.OLEAUT32, CharSet = CharSet.Unicode)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- private static extern SafeBSTRHandle SysAllocStringLen(String src, uint len); // BSTR
-
- [System.Security.SecurityCritical]
- override protected bool ReleaseHandle()
- {
- Win32Native.ZeroMemory(handle, (UIntPtr) (Win32Native.SysStringLen(handle) * 2));
- Win32Native.SysFreeString(handle);
- return true;
- }
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal unsafe void ClearBuffer() {
- byte* bufferPtr = null;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- AcquirePointer(ref bufferPtr);
- Win32Native.ZeroMemory((IntPtr)bufferPtr, (UIntPtr) (Win32Native.SysStringLen((IntPtr)bufferPtr) * 2));
- }
- finally
- {
- if (bufferPtr != null)
- ReleasePointer();
- }
- }
-
-
- internal unsafe int Length {
- get {
- return (int) Win32Native.SysStringLen(this);
- }
- }
-
- internal unsafe static void Copy(SafeBSTRHandle source, SafeBSTRHandle target) {
- byte* sourcePtr = null, targetPtr = null;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- source.AcquirePointer(ref sourcePtr);
- target.AcquirePointer(ref targetPtr);
-
- Debug.Assert(Win32Native.SysStringLen((IntPtr)targetPtr) >= Win32Native.SysStringLen((IntPtr)sourcePtr), "Target buffer is not large enough!");
-
- Buffer.Memcpy(targetPtr, sourcePtr, (int) Win32Native.SysStringLen((IntPtr)sourcePtr) * 2);
- }
- finally
- {
- if (sourcePtr != null)
- source.ReleasePointer();
- if (targetPtr != null)
- target.ReleasePointer();
- }
- }
- }
-}
-
diff --git a/src/mscorlib/src/System/SerializableAttribute.cs b/src/mscorlib/src/System/SerializableAttribute.cs
index bceca6800a..1c99654eec 100644
--- a/src/mscorlib/src/System/SerializableAttribute.cs
+++ b/src/mscorlib/src/System/SerializableAttribute.cs
@@ -16,7 +16,6 @@ namespace System {
using System.Reflection;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Delegate, Inherited = false)]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class SerializableAttribute : Attribute
{
internal static Attribute GetCustomAttribute(RuntimeType type)
diff --git a/src/mscorlib/src/System/SharedStatics.cs b/src/mscorlib/src/System/SharedStatics.cs
index cbc5c354a1..d9364335f5 100644
--- a/src/mscorlib/src/System/SharedStatics.cs
+++ b/src/mscorlib/src/System/SharedStatics.cs
@@ -16,7 +16,6 @@ namespace System
using System.Threading;
using System.Runtime.Remoting;
using System.Security;
- using System.Security.Util;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
using System.Diagnostics;
@@ -36,40 +35,9 @@ namespace System
}
private volatile String _Remoting_Identity_IDGuid;
- public static String Remoting_Identity_IDGuid
- {
- get
- {
- if (_sharedStatics._Remoting_Identity_IDGuid == null)
- {
- bool tookLock = false;
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- Monitor.Enter(_sharedStatics, ref tookLock);
-
- if (_sharedStatics._Remoting_Identity_IDGuid == null)
- {
- _sharedStatics._Remoting_Identity_IDGuid = Guid.NewGuid().ToString().Replace('-', '_');
- }
- }
- finally {
- if (tookLock)
- Monitor.Exit(_sharedStatics);
- }
- }
-
- Debug.Assert(_sharedStatics._Remoting_Identity_IDGuid != null,
- "_sharedStatics._Remoting_Identity_IDGuid != null");
- return _sharedStatics._Remoting_Identity_IDGuid;
- }
- }
// Note this may not need to be process-wide.
private int _Remoting_Identity_IDSeqNum;
- internal static int Remoting_Identity_GetNextSeqNum()
- {
- return Interlocked.Increment(ref _sharedStatics._Remoting_Identity_IDSeqNum);
- }
// This is the total amount of memory currently "reserved" via
@@ -77,7 +45,6 @@ namespace System
// Stored as a long because we need to use Interlocked.Add.
private long _memFailPointReservedMemory;
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static long AddMemoryFailPointReservation(long size)
{
// Size can legitimately be negative - see Dispose.
diff --git a/src/mscorlib/src/System/Single.cs b/src/mscorlib/src/System/Single.cs
index 481c088617..657d7aef32 100644
--- a/src/mscorlib/src/System/Single.cs
+++ b/src/mscorlib/src/System/Single.cs
@@ -21,7 +21,6 @@ namespace System {
[Serializable]
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct Single : IComparable, IFormattable, IConvertible
, IComparable<Single>, IEquatable<Single>
{
@@ -58,7 +57,6 @@ namespace System {
}
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public unsafe static bool IsNaN(float f) {
return (*(int*)(&f) & 0x7FFFFFFF) > 0x7F800000;
diff --git a/src/mscorlib/src/System/Span.cs b/src/mscorlib/src/System/Span.cs
index 9fa55c63d7..c77a1994c9 100644
--- a/src/mscorlib/src/System/Span.cs
+++ b/src/mscorlib/src/System/Span.cs
@@ -2,17 +2,17 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.CompilerServices;
+using EditorBrowsableState = System.ComponentModel.EditorBrowsableState;
+using EditorBrowsableAttribute = System.ComponentModel.EditorBrowsableAttribute;
#pragma warning disable 0809 //warning CS0809: Obsolete member 'Span<T>.Equals(object)' overrides non-obsolete member 'object.Equals(object)'
namespace System
{
/// <summary>
- /// Span represents contiguous region of arbitrary memory, with performance
- /// characteristics on par with T[]. Unlike arrays, it can point to either managed
+ /// Span represents a contiguous region of arbitrary memory. Unlike arrays, it can point to either managed
/// or native memory, or to memory allocated on the stack. It is type- and memory-safe.
/// </summary>
public struct Span<T>
@@ -29,14 +29,13 @@ namespace System
/// <exception cref="System.ArgumentNullException">Thrown when <paramref name="array"/> is a null
/// reference (Nothing in Visual Basic).</exception>
/// <exception cref="System.ArrayTypeMismatchException">Thrown when <paramref name="array"/> is covariant and array's type is not exactly T[].</exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Span(T[] array)
{
if (array == null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
- if (default(T) == null) { // Arrays of valuetypes are never covariant
- if (array.GetType() != typeof(T[]))
- ThrowHelper.ThrowArrayTypeMismatchException();
- }
+ if (default(T) == null && array.GetType() != typeof(T[]))
+ ThrowHelper.ThrowArrayTypeMismatchException();
_pointer = new ByReference<T>(ref JitHelpers.GetArrayData(array));
_length = array.Length;
@@ -54,14 +53,13 @@ namespace System
/// <exception cref="System.ArgumentOutOfRangeException">
/// Thrown when the specified <paramref name="start"/> is not in the range (&lt;0 or &gt;=Length).
/// </exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Span(T[] array, int start)
{
if (array == null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
- if (default(T) == null) { // Arrays of valuetypes are never covariant
- if (array.GetType() != typeof(T[]))
- ThrowHelper.ThrowArrayTypeMismatchException();
- }
+ if (default(T) == null && array.GetType() != typeof(T[]))
+ ThrowHelper.ThrowArrayTypeMismatchException();
if ((uint)start > (uint)array.Length)
ThrowHelper.ThrowArgumentOutOfRangeException();
@@ -82,14 +80,13 @@ namespace System
/// <exception cref="System.ArgumentOutOfRangeException">
/// Thrown when the specified <paramref name="start"/> or end index is not in the range (&lt;0 or &gt;=Length).
/// </exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Span(T[] array, int start, int length)
{
if (array == null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
- if (default(T) == null) { // Arrays of valuetypes are never covariant
- if (array.GetType() != typeof(T[]))
- ThrowHelper.ThrowArrayTypeMismatchException();
- }
+ if (default(T) == null && array.GetType() != typeof(T[]))
+ ThrowHelper.ThrowArrayTypeMismatchException();
if ((uint)start > (uint)array.Length || (uint)length > (uint)(array.Length - start))
ThrowHelper.ThrowArgumentOutOfRangeException();
@@ -112,6 +109,7 @@ namespace System
/// Thrown when the specified <paramref name="length"/> is negative.
/// </exception>
[CLSCompliant(false)]
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public unsafe Span(void* pointer, int length)
{
if (JitHelpers.ContainsReferences<T>())
@@ -137,6 +135,7 @@ namespace System
/// <exception cref="System.ArgumentOutOfRangeException">
/// Thrown when the specified <paramref name="length"/> is negative.
/// </exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Span<T> DangerousCreate(object obj, ref T objectData, int length)
{
if (obj == null)
@@ -146,13 +145,13 @@ namespace System
return new Span<T>(ref objectData, length);
}
-
- /// <summary>
- /// An internal helper for creating spans.
- /// </summary>
+ // Constructor for internal use only.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
internal Span(ref T ptr, int length)
{
+ Debug.Assert(length >= 0);
+
_pointer = new ByReference<T>(ref ptr);
_length = length;
}
@@ -167,36 +166,128 @@ namespace System
}
/// <summary>
- /// Gets the number of elements contained in the <see cref="Span{T}"/>
+ /// The number of items in the span.
/// </summary>
public int Length => _length;
/// <summary>
- /// Returns whether the <see cref="Span{T}"/> is empty.
+ /// Returns true if Length is 0.
/// </summary>
public bool IsEmpty => _length == 0;
/// <summary>
- /// Fetches the element at the specified index.
+ /// Returns a reference to specified element of the Span.
/// </summary>
+ /// <param name="index"></param>
+ /// <returns></returns>
/// <exception cref="System.IndexOutOfRangeException">
- /// Thrown when the specified <paramref name="index"/> is not in range (&lt;0 or &gt;&eq;Length).
+ /// Thrown when index less than 0 or index greater than or equal to Length
/// </exception>
+
+ // TODO: https://github.com/dotnet/corefx/issues/13681
+ // Until we get over the hurdle of C# 7 tooling, this indexer will return "T" and have a setter rather than a "ref T". (The doc comments
+ // continue to reflect the original intent of returning "ref T")
public T this[int index]
{
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
if ((uint)index >= (uint)_length)
ThrowHelper.ThrowIndexOutOfRangeException();
- return Unsafe.Add(ref DangerousGetPinnableReference(), index);
+ return Unsafe.Add(ref _pointer.Value, index);
}
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
set
{
if ((uint)index >= (uint)_length)
ThrowHelper.ThrowIndexOutOfRangeException();
- Unsafe.Add(ref DangerousGetPinnableReference(), index) = value;
+ Unsafe.Add(ref _pointer.Value, index) = value;
+ }
+ }
+
+ /// <summary>
+ /// Returns a reference to specified element of the Span.
+ /// </summary>
+ /// <param name="index"></param>
+ /// <returns></returns>
+ /// <exception cref="System.IndexOutOfRangeException">
+ /// Thrown when index less than 0 or index greater than or equal to Length
+ /// </exception>
+
+ // TODO: https://github.com/dotnet/corefx/issues/13681
+ // Until we get over the hurdle of C# 7 tooling, this temporary method will simulate the intended "ref T" indexer for those
+ // who need bypass the workaround for performance.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ref T GetItem(int index)
+ {
+ if ((uint)index >= ((uint)_length))
+ ThrowHelper.ThrowIndexOutOfRangeException();
+
+ return ref Unsafe.Add(ref _pointer.Value, index);
+ }
+
+ /// <summary>
+ /// Clears the contents of this span.
+ /// </summary>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public void Clear()
+ {
+ // TODO: Optimize - https://github.com/dotnet/coreclr/issues/9161
+ for (int i = 0; i < _length; i++)
+ {
+ this[i] = default(T);
+ }
+ }
+
+ /// <summary>
+ /// Fills the contents of this span with the given value.
+ /// </summary>
+ public void Fill(T value)
+ {
+ int length = _length;
+
+ if (length == 0)
+ return;
+
+ if (Unsafe.SizeOf<T>() == 1)
+ {
+ byte fill = Unsafe.As<T, byte>(ref value);
+ ref byte r = ref Unsafe.As<T, byte>(ref _pointer.Value);
+ Unsafe.InitBlockUnaligned(ref r, fill, (uint)length);
+ }
+ else
+ {
+ ref T r = ref DangerousGetPinnableReference();
+
+ // TODO: Create block fill for value types of power of two sizes e.g. 2,4,8,16
+
+ // Simple loop unrolling
+ int i = 0;
+ for (; i < (length & ~7); i += 8)
+ {
+ Unsafe.Add<T>(ref r, i + 0) = value;
+ Unsafe.Add<T>(ref r, i + 1) = value;
+ Unsafe.Add<T>(ref r, i + 2) = value;
+ Unsafe.Add<T>(ref r, i + 3) = value;
+ Unsafe.Add<T>(ref r, i + 4) = value;
+ Unsafe.Add<T>(ref r, i + 5) = value;
+ Unsafe.Add<T>(ref r, i + 6) = value;
+ Unsafe.Add<T>(ref r, i + 7) = value;
+ }
+ if (i < (length & ~3))
+ {
+ Unsafe.Add<T>(ref r, i + 0) = value;
+ Unsafe.Add<T>(ref r, i + 1) = value;
+ Unsafe.Add<T>(ref r, i + 2) = value;
+ Unsafe.Add<T>(ref r, i + 3) = value;
+ i += 4;
+ }
+ for (; i < length; i++)
+ {
+ Unsafe.Add<T>(ref r, i) = value;
+ }
}
}
@@ -228,7 +319,7 @@ namespace System
if ((uint)_length > (uint)destination.Length)
return false;
- SpanHelper.CopyTo<T>(ref destination.DangerousGetPinnableReference(), ref DangerousGetPinnableReference(), _length);
+ SpanHelper.CopyTo<T>(ref destination._pointer.Value, ref _pointer.Value, _length);
return true;
}
@@ -238,7 +329,7 @@ namespace System
/// </summary>
public static bool operator ==(Span<T> left, Span<T> right)
{
- return left._length == right._length && Unsafe.AreSame<T>(ref left.DangerousGetPinnableReference(), ref right.DangerousGetPinnableReference());
+ return left._length == right._length && Unsafe.AreSame<T>(ref left._pointer.Value, ref right._pointer.Value);
}
/// <summary>
@@ -254,6 +345,7 @@ namespace System
/// </exception>
/// </summary>
[Obsolete("Equals() on Span will always throw an exception. Use == instead.")]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public override bool Equals(object obj)
{
ThrowHelper.ThrowNotSupportedException_CannotCallEqualsOnSpan();
@@ -268,6 +360,7 @@ namespace System
/// </exception>
/// </summary>
[Obsolete("GetHashCode() on Span will always throw an exception.")]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public override int GetHashCode()
{
ThrowHelper.ThrowNotSupportedException_CannotCallGetHashCodeOnSpan();
@@ -283,27 +376,27 @@ namespace System
/// <summary>
/// Defines an implicit conversion of a <see cref="ArraySegment{T}"/> to a <see cref="Span{T}"/>
/// </summary>
- public static implicit operator Span<T>(ArraySegment<T> arraySegment) => new Span<T>(arraySegment.Array, arraySegment.Offset, arraySegment.Count);
+ public static implicit operator Span<T>(ArraySegment<T> arraySegment) => new Span<T>(arraySegment.Array, arraySegment.Offset, arraySegment.Count);
/// <summary>
/// Defines an implicit conversion of a <see cref="Span{T}"/> to a <see cref="ReadOnlySpan{T}"/>
/// </summary>
- public static implicit operator ReadOnlySpan<T>(Span<T> span) => new ReadOnlySpan<T>(ref span.DangerousGetPinnableReference(), span._length);
+ public static implicit operator ReadOnlySpan<T>(Span<T> span) => new ReadOnlySpan<T>(ref span._pointer.Value, span._length);
/// <summary>
/// Forms a slice out of the given span, beginning at 'start'.
/// </summary>
/// <param name="start">The index at which to begin this slice.</param>
/// <exception cref="System.ArgumentOutOfRangeException">
- /// Thrown when the specified <paramref name="start"/> index is not in range (&lt;0 or &gt;Length).
+ /// Thrown when the specified <paramref name="start"/> index is not in range (&lt;0 or &gt;=Length).
/// </exception>
- [MethodImpl(MethodImplOptions.NoOptimization)] // TODO-SPAN: Workaround for https://github.com/dotnet/coreclr/issues/7894
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Span<T> Slice(int start)
{
if ((uint)start > (uint)_length)
ThrowHelper.ThrowArgumentOutOfRangeException();
- return new Span<T>(ref Unsafe.Add(ref DangerousGetPinnableReference(), start), _length - start);
+ return new Span<T>(ref Unsafe.Add(ref _pointer.Value, start), _length - start);
}
/// <summary>
@@ -312,15 +405,15 @@ namespace System
/// <param name="start">The index at which to begin this slice.</param>
/// <param name="length">The desired length for the slice (exclusive).</param>
/// <exception cref="System.ArgumentOutOfRangeException">
- /// Thrown when the specified <paramref name="start"/> or end index is not in range (&lt;0 or &gt;&eq;Length).
+ /// Thrown when the specified <paramref name="start"/> or end index is not in range (&lt;0 or &gt;=Length).
/// </exception>
- [MethodImpl(MethodImplOptions.NoOptimization)] // TODO-SPAN: Workaround for https://github.com/dotnet/coreclr/issues/7894
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Span<T> Slice(int start, int length)
{
if ((uint)start > (uint)_length || (uint)length > (uint)(_length - start))
ThrowHelper.ThrowArgumentOutOfRangeException();
- return new Span<T>(ref Unsafe.Add(ref DangerousGetPinnableReference(), start), length);
+ return new Span<T>(ref Unsafe.Add(ref _pointer.Value, start), length);
}
/// <summary>
@@ -328,13 +421,14 @@ namespace System
/// allocates, so should generally be avoided, however it is sometimes
/// necessary to bridge the gap with APIs written in terms of arrays.
/// </summary>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public T[] ToArray()
{
if (_length == 0)
return Array.Empty<T>();
var destination = new T[_length];
- SpanHelper.CopyTo<T>(ref JitHelpers.GetArrayData(destination), ref DangerousGetPinnableReference(), _length);
+ SpanHelper.CopyTo<T>(ref JitHelpers.GetArrayData(destination), ref _pointer.Value, _length);
return destination;
}
@@ -344,7 +438,7 @@ namespace System
public static Span<T> Empty => default(Span<T>);
}
- public static class SpanExtensions
+ public static class Span
{
/// <summary>
/// Casts a Span of one primitive type <typeparamref name="T"/> to Span of bytes.
@@ -433,6 +527,64 @@ namespace System
ref Unsafe.As<TFrom, TTo>(ref source.DangerousGetPinnableReference()),
checked((int)((long)source.Length * Unsafe.SizeOf<TFrom>() / Unsafe.SizeOf<TTo>())));
}
+
+ /// <summary>
+ /// Creates a new readonly span over the portion of the target string.
+ /// </summary>
+ /// <param name="text">The target string.</param>
+ /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="text"/> is a null
+ /// reference (Nothing in Visual Basic).</exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static ReadOnlySpan<char> Slice(this string text)
+ {
+ if (text == null)
+ ThrowHelper.ThrowArgumentNullException(ExceptionArgument.text);
+
+ return new ReadOnlySpan<char>(ref text.GetFirstCharRef(), text.Length);
+ }
+
+ /// <summary>
+ /// Creates a new readonly span over the portion of the target string, beginning at 'start'.
+ /// </summary>
+ /// <param name="text">The target string.</param>
+ /// <param name="start">The index at which to begin this slice.</param>
+ /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="text"/> is a null
+ /// reference (Nothing in Visual Basic).</exception>
+ /// <exception cref="System.ArgumentOutOfRangeException">
+ /// Thrown when the specified <paramref name="start"/> index is not in range (&lt;0 or &gt;Length).
+ /// </exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static ReadOnlySpan<char> Slice(this string text, int start)
+ {
+ if (text == null)
+ ThrowHelper.ThrowArgumentNullException(ExceptionArgument.text);
+ if ((uint)start > (uint)text.Length)
+ ThrowHelper.ThrowArgumentOutOfRangeException();
+
+ return new ReadOnlySpan<char>(ref Unsafe.Add(ref text.GetFirstCharRef(), start), text.Length - start);
+ }
+
+ /// <summary>
+ /// Creates a new readonly span over the portion of the target string, beginning at <paramref name="start"/>, of given <paramref name="length"/>.
+ /// </summary>
+ /// <param name="text">The target string.</param>
+ /// <param name="start">The index at which to begin this slice.</param>
+ /// <param name="length">The number of items in the span.</param>
+ /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="text"/> is a null
+ /// reference (Nothing in Visual Basic).</exception>
+ /// <exception cref="System.ArgumentOutOfRangeException">
+ /// Thrown when the specified <paramref name="start"/> or end index is not in range (&lt;0 or &gt;&eq;Length).
+ /// </exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static ReadOnlySpan<char> Slice(this string text, int start, int length)
+ {
+ if (text == null)
+ ThrowHelper.ThrowArgumentNullException(ExceptionArgument.text);
+ if ((uint)start > (uint)text.Length || (uint)length > (uint)(text.Length - start))
+ ThrowHelper.ThrowArgumentOutOfRangeException();
+
+ return new ReadOnlySpan<char>(ref Unsafe.Add(ref text.GetFirstCharRef(), start), length);
+ }
}
internal static class SpanHelper
diff --git a/src/mscorlib/src/System/StackOverflowException.cs b/src/mscorlib/src/System/StackOverflowException.cs
index 4a20527f61..0a875e7373 100644
--- a/src/mscorlib/src/System/StackOverflowException.cs
+++ b/src/mscorlib/src/System/StackOverflowException.cs
@@ -11,30 +11,31 @@
**
=============================================================================*/
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- public sealed class StackOverflowException : SystemException {
- public StackOverflowException()
- : base(Environment.GetResourceString("Arg_StackOverflowException")) {
- SetErrorCode(__HResults.COR_E_STACKOVERFLOW);
- }
-
- public StackOverflowException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_STACKOVERFLOW);
+ public sealed class StackOverflowException : SystemException
+ {
+ public StackOverflowException()
+ : base(SR.Arg_StackOverflowException)
+ {
+ HResult = __HResults.COR_E_STACKOVERFLOW;
}
-
- public StackOverflowException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_STACKOVERFLOW);
+
+ public StackOverflowException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_STACKOVERFLOW;
}
- internal StackOverflowException(SerializationInfo info, StreamingContext context) : base (info, context) {
+ public StackOverflowException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_STACKOVERFLOW;
}
-
+
+ internal StackOverflowException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/String.Comparison.cs b/src/mscorlib/src/System/String.Comparison.cs
index 07f2f9de22..2ac1d78997 100644
--- a/src/mscorlib/src/System/String.Comparison.cs
+++ b/src/mscorlib/src/System/String.Comparison.cs
@@ -73,7 +73,6 @@ namespace System
// Search/Query methods
//
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private unsafe static bool EqualsHelper(String strA, String strB)
{
Contract.Requires(strA != null);
@@ -134,7 +133,6 @@ namespace System
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private unsafe static bool StartsWithOrdinalHelper(String str, String startsWith)
{
Contract.Requires(str != null);
@@ -716,7 +714,6 @@ namespace System
}
[Pure]
- [ComVisible(false)]
public Boolean EndsWith(String value, StringComparison comparisonType) {
if( (Object)value == null) {
throw new ArgumentNullException(nameof(value));
@@ -793,7 +790,6 @@ namespace System
}
// Determines whether two strings match.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public override bool Equals(Object obj)
{
if (this == null) // this is necessary to guard against reverse-pinvokes and
@@ -814,7 +810,6 @@ namespace System
// Determines whether two strings match.
[Pure]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public bool Equals(String value)
{
if (this == null) // this is necessary to guard against reverse-pinvokes and
@@ -984,7 +979,6 @@ namespace System
// Gets a hash code for this string. If strings A and B are such that A.Equals(B), then
// they will return the same hash code.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public override int GetHashCode()
{
#if FEATURE_RANDOMIZED_STRING_HASHING
@@ -999,12 +993,10 @@ namespace System
// Gets a hash code for this string and this comparison. If strings A and B and comparition C are such
// that String.Equals(A, B, C), then they will return the same hash code with this comparison C.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public int GetHashCode(StringComparison comparisonType) => StringComparer.FromComparison(comparisonType).GetHashCode(this);
// Use this if and only if you need the hashcode to not change across app domains (e.g. you have an app domain agile
// hash table).
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal int GetLegacyNonRandomizedHashCode() {
unsafe {
fixed (char* src = &m_firstChar) {
@@ -1069,7 +1061,6 @@ namespace System
}
[Pure]
- [ComVisible(false)]
public Boolean StartsWith(String value, StringComparison comparisonType) {
if( (Object)value == null) {
throw new ArgumentNullException(nameof(value));
diff --git a/src/mscorlib/src/System/String.Manipulation.cs b/src/mscorlib/src/System/String.Manipulation.cs
index 194b4f8c59..e06141d669 100644
--- a/src/mscorlib/src/System/String.Manipulation.cs
+++ b/src/mscorlib/src/System/String.Manipulation.cs
@@ -14,10 +14,6 @@ namespace System
{
public partial class String
{
- private const int TrimHead = 0;
- private const int TrimTail = 1;
- private const int TrimBoth = 2;
-
unsafe private static void FillStringChecked(String dest, int destPos, String src)
{
Contract.Requires(dest != null);
@@ -176,7 +172,6 @@ namespace System
return result;
}
- [ComVisible(false)]
public static string Concat<T>(IEnumerable<T> values)
{
if (values == null)
@@ -227,7 +222,6 @@ namespace System
}
- [ComVisible(false)]
public static string Concat(IEnumerable<string> values)
{
if (values == null)
@@ -575,7 +569,6 @@ namespace System
return Join(separator, value, 0, value.Length);
}
- [ComVisible(false)]
public unsafe static string Join(string separator, params object[] values)
{
separator = separator ?? string.Empty;
@@ -586,7 +579,6 @@ namespace System
}
}
- [ComVisible(false)]
public unsafe static string Join<T>(string separator, IEnumerable<T> values)
{
separator = separator ?? string.Empty;
@@ -597,7 +589,6 @@ namespace System
}
}
- [ComVisible(false)]
public static string Join(string separator, IEnumerable<string> values)
{
if (values == null)
@@ -1043,16 +1034,14 @@ namespace System
return ReplaceInternal(oldValue, newValue);
}
- [ComVisible(false)]
- public String[] Split(char separator, StringSplitOptions options = StringSplitOptions.None) {
+ public unsafe String[] Split(char separator, StringSplitOptions options = StringSplitOptions.None) {
Contract.Ensures(Contract.Result<String[]>() != null);
- return SplitInternal(separator, Int32.MaxValue, options);
+ return SplitInternal(&separator, 1, int.MaxValue, options);
}
- [ComVisible(false)]
- public String[] Split(char separator, int count, StringSplitOptions options = StringSplitOptions.None) {
+ public unsafe String[] Split(char separator, int count, StringSplitOptions options = StringSplitOptions.None) {
Contract.Ensures(Contract.Result<String[]>() != null);
- return SplitInternal(separator, count, options);
+ return SplitInternal(&separator, 1, count, options);
}
// Creates an array of strings by splitting this string at each
@@ -1085,24 +1074,17 @@ namespace System
return SplitInternal(separator, count, StringSplitOptions.None);
}
- [ComVisible(false)]
public String[] Split(char[] separator, StringSplitOptions options) {
Contract.Ensures(Contract.Result<String[]>() != null);
return SplitInternal(separator, Int32.MaxValue, options);
}
- [ComVisible(false)]
public String[] Split(char[] separator, int count, StringSplitOptions options)
{
Contract.Ensures(Contract.Result<String[]>() != null);
return SplitInternal(separator, count, options);
}
- private unsafe String[] SplitInternal(char separator, int count, StringSplitOptions options)
- {
- return SplitInternal(&separator, 1, count, options);
- }
-
private unsafe String[] SplitInternal(char[] separator, int count, StringSplitOptions options)
{
fixed (char* pSeparators = separator)
@@ -1153,25 +1135,21 @@ namespace System
}
}
- [ComVisible(false)]
public String[] Split(String separator, StringSplitOptions options = StringSplitOptions.None) {
Contract.Ensures(Contract.Result<String[]>() != null);
return SplitInternal(separator ?? String.Empty, null, Int32.MaxValue, options);
}
- [ComVisible(false)]
public String[] Split(String separator, Int32 count, StringSplitOptions options = StringSplitOptions.None) {
Contract.Ensures(Contract.Result<String[]>() != null);
return SplitInternal(separator ?? String.Empty, null, count, options);
}
- [ComVisible(false)]
public String [] Split(String[] separator, StringSplitOptions options) {
Contract.Ensures(Contract.Result<String[]>() != null);
return SplitInternal(null, separator, Int32.MaxValue, options);
}
- [ComVisible(false)]
public String[] Split(String[] separator, Int32 count, StringSplitOptions options) {
Contract.Ensures(Contract.Result<String[]>() != null);
return SplitInternal(null, separator, count, options);
@@ -1536,116 +1514,177 @@ namespace System
Contract.EndContractBlock();
return this.ToUpper(CultureInfo.InvariantCulture);
}
-
- // Removes a set of characters from the end of this string.
+
+ // Trims the whitespace from both ends of the string. Whitespace is defined by
+ // Char.IsWhiteSpace.
+ //
[Pure]
- public String Trim(params char[] trimChars) {
- if (null==trimChars || trimChars.Length == 0) {
- return TrimHelper(TrimBoth);
+ public string Trim()
+ {
+ Contract.Ensures(Contract.Result<string>() != null);
+ Contract.EndContractBlock();
+
+ return TrimWhiteSpaceHelper(TrimType.Both);
+ }
+
+ // Removes a set of characters from the beginning and end of this string.
+ public unsafe string Trim(char trimChar) => TrimHelper(&trimChar, 1, TrimType.Both);
+
+ // Removes a set of characters from the beginning and end of this string.
+ [Pure]
+ public unsafe string Trim(params char[] trimChars)
+ {
+ if (trimChars == null || trimChars.Length == 0)
+ {
+ return TrimWhiteSpaceHelper(TrimType.Both);
+ }
+ fixed (char* pTrimChars = &trimChars[0])
+ {
+ return TrimHelper(pTrimChars, trimChars.Length, TrimType.Both);
}
- return TrimHelper(trimChars,TrimBoth);
}
-
+
+ // Removes a set of characters from the beginning of this string.
+ public string TrimStart() => TrimWhiteSpaceHelper(TrimType.Head);
+
// Removes a set of characters from the beginning of this string.
- public String TrimStart(params char[] trimChars) {
- if (null==trimChars || trimChars.Length == 0) {
- return TrimHelper(TrimHead);
+ public unsafe string TrimStart(char trimChar) => TrimHelper(&trimChar, 1, TrimType.Head);
+
+ // Removes a set of characters from the beginning of this string.
+ public unsafe string TrimStart(params char[] trimChars)
+ {
+ if (trimChars == null || trimChars.Length == 0)
+ {
+ return TrimWhiteSpaceHelper(TrimType.Head);
}
- return TrimHelper(trimChars,TrimHead);
- }
-
-
- // Removes a set of characters from the end of this string.
- public String TrimEnd(params char[] trimChars) {
- if (null==trimChars || trimChars.Length == 0) {
- return TrimHelper(TrimTail);
+ fixed (char* pTrimChars = &trimChars[0])
+ {
+ return TrimHelper(pTrimChars, trimChars.Length, TrimType.Head);
}
- return TrimHelper(trimChars,TrimTail);
}
- // Trims the whitespace from both ends of the string. Whitespace is defined by
- // Char.IsWhiteSpace.
- //
- [Pure]
- public String Trim() {
- Contract.Ensures(Contract.Result<String>() != null);
- Contract.EndContractBlock();
+ // Removes a set of characters from the end of this string.
+ public string TrimEnd() => TrimWhiteSpaceHelper(TrimType.Tail);
- return TrimHelper(TrimBoth);
+ // Removes a set of characters from the end of this string.
+ public unsafe string TrimEnd(char trimChar) => TrimHelper(&trimChar, 1, TrimType.Tail);
+
+ // Removes a set of characters from the end of this string.
+ public unsafe string TrimEnd(params char[] trimChars)
+ {
+ if (trimChars == null || trimChars.Length == 0)
+ {
+ return TrimWhiteSpaceHelper(TrimType.Tail);
+ }
+ fixed (char* pTrimChars = &trimChars[0])
+ {
+ return TrimHelper(pTrimChars, trimChars.Length, TrimType.Tail);
+ }
}
-
- private String TrimHelper(int trimType) {
- //end will point to the first non-trimmed character on the right
- //start will point to the first non-trimmed character on the Left
- int end = this.Length-1;
- int start=0;
-
- //Trim specified characters.
- if (trimType !=TrimTail) {
- for (start=0; start < this.Length; start++) {
- if (!Char.IsWhiteSpace(this[start])) break;
+ private string TrimWhiteSpaceHelper(TrimType trimType)
+ {
+ // end will point to the first non-trimmed character on the right.
+ // start will point to the first non-trimmed character on the left.
+ int end = Length - 1;
+ int start = 0;
+
+ // Trim specified characters.
+ if (trimType != TrimType.Tail)
+ {
+ for (start = 0; start < Length; start++)
+ {
+ if (!char.IsWhiteSpace(this[start]))
+ {
+ break;
+ }
}
}
-
- if (trimType !=TrimHead) {
- for (end= Length -1; end >= start; end--) {
- if (!Char.IsWhiteSpace(this[end])) break;
+
+ if (trimType != TrimType.Head)
+ {
+ for (end = Length - 1; end >= start; end--)
+ {
+ if (!char.IsWhiteSpace(this[end]))
+ {
+ break;
+ }
}
}
return CreateTrimmedString(start, end);
}
-
-
- private String TrimHelper(char[] trimChars, int trimType) {
- //end will point to the first non-trimmed character on the right
- //start will point to the first non-trimmed character on the Left
- int end = this.Length-1;
- int start=0;
-
- //Trim specified characters.
- if (trimType !=TrimTail) {
- for (start=0; start < this.Length; start++) {
+
+ private unsafe string TrimHelper(char* trimChars, int trimCharsLength, TrimType trimType)
+ {
+ Debug.Assert(trimChars != null);
+ Debug.Assert(trimCharsLength > 0);
+
+ // end will point to the first non-trimmed character on the right.
+ // start will point to the first non-trimmed character on the left.
+ int end = Length - 1;
+ int start = 0;
+
+ // Trim specified characters.
+ if (trimType != TrimType.Tail)
+ {
+ for (start = 0; start < Length; start++)
+ {
int i = 0;
char ch = this[start];
- for( i = 0; i < trimChars.Length; i++) {
- if( trimChars[i] == ch) break;
+ for (i = 0; i < trimCharsLength; i++)
+ {
+ if (trimChars[i] == ch)
+ {
+ break;
+ }
}
- if( i == trimChars.Length) { // the character is not white space
- break;
+ if (i == trimCharsLength)
+ {
+ // The character is not in trimChars, so stop trimming.
+ break;
}
}
}
-
- if (trimType !=TrimHead) {
- for (end= Length -1; end >= start; end--) {
- int i = 0;
- char ch = this[end];
- for(i = 0; i < trimChars.Length; i++) {
- if( trimChars[i] == ch) break;
+
+ if (trimType != TrimType.Head)
+ {
+ for (end = Length - 1; end >= start; end--)
+ {
+ int i = 0;
+ char ch = this[end];
+ for (i = 0; i < trimCharsLength; i++)
+ {
+ if (trimChars[i] == ch)
+ {
+ break;
+ }
+ }
+ if (i == trimCharsLength)
+ {
+ // The character is not in trimChars, so stop trimming.
+ break;
}
- if( i == trimChars.Length) { // the character is not white space
- break;
- }
}
}
return CreateTrimmedString(start, end);
}
+ private string CreateTrimmedString(int start, int end)
+ {
+ int len = end - start + 1;
+ return
+ len == Length ? this :
+ len == 0 ? string.Empty :
+ InternalSubString(start, len);
+ }
- private String CreateTrimmedString(int start, int end) {
- int len = end -start + 1;
- if (len == this.Length) {
- // Don't allocate a new string as the trimmed string has not changed.
- return this;
- }
-
- if( len == 0) {
- return String.Empty;
- }
- return InternalSubString(start, len);
+ private enum TrimType
+ {
+ Head = 0,
+ Tail = 1,
+ Both = 2
}
}
}
diff --git a/src/mscorlib/src/System/String.cs b/src/mscorlib/src/System/String.cs
index f9162ff528..175e396633 100644
--- a/src/mscorlib/src/System/String.cs
+++ b/src/mscorlib/src/System/String.cs
@@ -37,7 +37,6 @@ namespace System {
// implemented as a part of String. As with arrays, character positions
// (indices) are zero-based.
- [ComVisible(true)]
[Serializable]
public sealed partial class String : IComparable, ICloneable, IConvertible, IEnumerable
, IComparable<String>, IEnumerable<char>, IEquatable<String>
@@ -331,18 +330,12 @@ namespace System {
// These just wrap calls to Normalization class
public bool IsNormalized()
{
-#if !FEATURE_NORM_IDNA_ONLY
// Default to Form C
return IsNormalized(NormalizationForm.FormC);
-#else
- // Default to Form IDNA
- return IsNormalized((NormalizationForm)ExtendedNormalizationForms.FormIdna);
-#endif
}
public bool IsNormalized(NormalizationForm normalizationForm)
{
-#if !FEATURE_NORM_IDNA_ONLY
if (this.IsFastSort())
{
// If its FastSort && one of the 4 main forms, then its already normalized
@@ -352,24 +345,17 @@ namespace System {
normalizationForm == NormalizationForm.FormKD )
return true;
}
-#endif // !FEATURE_NORM_IDNA_ONLY
return Normalization.IsNormalized(this, normalizationForm);
}
public String Normalize()
{
-#if !FEATURE_NORM_IDNA_ONLY
// Default to Form C
return Normalize(NormalizationForm.FormC);
-#else
- // Default to Form IDNA
- return Normalize((NormalizationForm)ExtendedNormalizationForms.FormIdna);
-#endif
}
public String Normalize(NormalizationForm normalizationForm)
{
-#if !FEATURE_NORM_IDNA_ONLY
if (this.IsAscii())
{
// If its FastSort && one of the 4 main forms, then its already normalized
@@ -379,7 +365,6 @@ namespace System {
normalizationForm == NormalizationForm.FormKD )
return this;
}
-#endif // !FEATURE_NORM_IDNA_ONLY
return Normalization.Normalize(this, normalizationForm);
}
@@ -801,12 +786,14 @@ namespace System {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern bool IsAscii();
+#if FEATURE_COMINTEROP
// Set extra byte for odd-sized strings that came from interop as BSTR.
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern void SetTrailByte(byte data);
// Try to retrieve the extra byte - returns false if not present.
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern bool TryGetTrailByte(out byte data);
+#endif
public CharEnumerator GetEnumerator() {
Contract.Ensures(Contract.Result<CharEnumerator>() != null);
@@ -842,10 +829,8 @@ namespace System {
}
}
-#if FEATURE_SPAN_OF_T
internal ref char GetFirstCharRef() {
return ref m_firstChar;
}
-#endif
}
}
diff --git a/src/mscorlib/src/System/StringComparer.cs b/src/mscorlib/src/System/StringComparer.cs
index 02e8d71d0e..cf65c48c2b 100644
--- a/src/mscorlib/src/System/StringComparer.cs
+++ b/src/mscorlib/src/System/StringComparer.cs
@@ -13,7 +13,6 @@ namespace System {
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public abstract class StringComparer : IComparer, IEqualityComparer, IComparer<string>, IEqualityComparer<string>{
private static readonly StringComparer _invariantCulture = new CultureAwareComparer(CultureInfo.InvariantCulture, false);
private static readonly StringComparer _invariantCultureIgnoreCase = new CultureAwareComparer(CultureInfo.InvariantCulture, true);
@@ -162,11 +161,6 @@ namespace System {
_ignoreCase = ignoreCase;
}
- internal CultureAwareComparer(CompareInfo compareInfo, bool ignoreCase) {
- _compareInfo = compareInfo;
- _ignoreCase = ignoreCase;
- }
-
public override int Compare(string x, string y) {
if (Object.ReferenceEquals(x, y)) return 0;
if (x == null) return -1;
@@ -211,9 +205,6 @@ namespace System {
}
#if FEATURE_RANDOMIZED_STRING_HASHING
- IEqualityComparer IWellKnownStringEqualityComparer.GetRandomizedEqualityComparer() {
- return new CultureAwareRandomizedComparer(_compareInfo, _ignoreCase);
- }
IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() {
return this;
@@ -222,77 +213,6 @@ namespace System {
}
-#if FEATURE_RANDOMIZED_STRING_HASHING
- internal sealed class CultureAwareRandomizedComparer : StringComparer, IWellKnownStringEqualityComparer {
-
- private CompareInfo _compareInfo;
- private bool _ignoreCase;
- private long _entropy;
-
- internal CultureAwareRandomizedComparer(CompareInfo compareInfo, bool ignoreCase) {
- _compareInfo = compareInfo;
- _ignoreCase = ignoreCase;
- _entropy = HashHelpers.GetEntropy();
- }
-
- public override int Compare(string x, string y) {
- if (Object.ReferenceEquals(x, y)) return 0;
- if (x == null) return -1;
- if (y == null) return 1;
- return _compareInfo.Compare(x, y, _ignoreCase? CompareOptions.IgnoreCase : CompareOptions.None);
- }
-
- public override bool Equals(string x, string y) {
- if (Object.ReferenceEquals(x ,y)) return true;
- if (x == null || y == null) return false;
-
- return (_compareInfo.Compare(x, y, _ignoreCase? CompareOptions.IgnoreCase : CompareOptions.None) == 0);
- }
-
- public override int GetHashCode(string obj) {
- if( obj == null) {
- throw new ArgumentNullException(nameof(obj));
- }
- Contract.EndContractBlock();
-
- CompareOptions options = CompareOptions.None;
-
- if( _ignoreCase) {
- options |= CompareOptions.IgnoreCase;
- }
-
-#if FEATURE_COREFX_GLOBALIZATION
- return _compareInfo.GetHashCodeOfStringCore(obj, options, true, _entropy);
-#else
- return _compareInfo.GetHashCodeOfString(obj, options, true, _entropy);
-#endif
- }
-
- // Equals method for the comparer itself.
- public override bool Equals(Object obj){
- CultureAwareRandomizedComparer comparer = obj as CultureAwareRandomizedComparer;
- if( comparer == null) {
- return false;
- }
- return (this._ignoreCase == comparer._ignoreCase) && (this._compareInfo.Equals(comparer._compareInfo)) && (this._entropy == comparer._entropy);
- }
-
- public override int GetHashCode() {
- int hashCode = _compareInfo.GetHashCode() ;
- return ((_ignoreCase ? (~hashCode) : hashCode) ^ ((int) (_entropy & 0x7FFFFFFF)));
- }
-
- IEqualityComparer IWellKnownStringEqualityComparer.GetRandomizedEqualityComparer() {
- return new CultureAwareRandomizedComparer(_compareInfo, _ignoreCase);
- }
-
- // We want to serialize the old comparer.
- IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() {
- return new CultureAwareComparer(_compareInfo, _ignoreCase);
- }
- }
-#endif
-
// Provide x more optimal implementation of ordinal comparison.
[Serializable]
internal sealed class OrdinalComparer : StringComparer
@@ -360,9 +280,6 @@ namespace System {
}
#if FEATURE_RANDOMIZED_STRING_HASHING
- IEqualityComparer IWellKnownStringEqualityComparer.GetRandomizedEqualityComparer() {
- return new OrdinalRandomizedComparer(_ignoreCase);
- }
IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() {
return this;
@@ -371,89 +288,11 @@ namespace System {
}
-
#if FEATURE_RANDOMIZED_STRING_HASHING
- internal sealed class OrdinalRandomizedComparer : StringComparer, IWellKnownStringEqualityComparer {
- private bool _ignoreCase;
- private long _entropy;
-
- internal OrdinalRandomizedComparer(bool ignoreCase) {
- _ignoreCase = ignoreCase;
- _entropy = HashHelpers.GetEntropy();
- }
-
- public override int Compare(string x, string y) {
- if (Object.ReferenceEquals(x, y)) return 0;
- if (x == null) return -1;
- if (y == null) return 1;
-
- if( _ignoreCase) {
- return String.Compare(x, y, StringComparison.OrdinalIgnoreCase);
- }
-
- return String.CompareOrdinal(x, y);
- }
-
- public override bool Equals(string x, string y) {
- if (Object.ReferenceEquals(x ,y)) return true;
- if (x == null || y == null) return false;
-
- if( _ignoreCase) {
- if( x.Length != y.Length) {
- return false;
- }
- return (String.Compare(x, y, StringComparison.OrdinalIgnoreCase) == 0);
- }
- return x.Equals(y);
- }
-
- public override int GetHashCode(string obj) {
- if( obj == null) {
- throw new ArgumentNullException(nameof(obj));
- }
- Contract.EndContractBlock();
-
- if( _ignoreCase) {
-#if FEATURE_COREFX_GLOBALIZATION
- return CultureInfo.InvariantCulture.CompareInfo.GetHashCodeOfStringCore(obj, CompareOptions.IgnoreCase, true, _entropy);
-#else
- return TextInfo.GetHashCodeOrdinalIgnoreCase(obj, true, _entropy);
-#endif
- }
-
- return String.InternalMarvin32HashString(obj, obj.Length, _entropy);
- }
-
- // Equals method for the comparer itself.
- public override bool Equals(Object obj){
- OrdinalRandomizedComparer comparer = obj as OrdinalRandomizedComparer;
- if( comparer == null) {
- return false;
- }
- return (this._ignoreCase == comparer._ignoreCase) && (this._entropy == comparer._entropy);
- }
-
- public override int GetHashCode() {
- string name = "OrdinalRandomizedComparer";
- int hashCode = name.GetHashCode();
- return ((_ignoreCase ? (~hashCode) : hashCode) ^ ((int) (_entropy & 0x7FFFFFFF)));
- }
-
- IEqualityComparer IWellKnownStringEqualityComparer.GetRandomizedEqualityComparer() {
- return new OrdinalRandomizedComparer(_ignoreCase);
- }
-
- // We want to serialize the old comparer.
- IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() {
- return new OrdinalComparer(_ignoreCase);
- }
- }
// This interface is implemented by string comparers in the framework that can opt into
// randomized hashing behaviors.
internal interface IWellKnownStringEqualityComparer {
- // Get an IEqualityComparer that has the same equality comparision rules as "this" but uses Randomized Hashing.
- IEqualityComparer GetRandomizedEqualityComparer();
// Get an IEqaulityComparer that can be serailzied (e.g., it exists in older versions).
IEqualityComparer GetEqualityComparerForSerialization();
}
diff --git a/src/mscorlib/src/System/StringComparison.cs b/src/mscorlib/src/System/StringComparison.cs
index aa83e396b6..c654f7200f 100644
--- a/src/mscorlib/src/System/StringComparison.cs
+++ b/src/mscorlib/src/System/StringComparison.cs
@@ -13,11 +13,12 @@
**
**
===========================================================*/
-namespace System{
-
+
+namespace System
+{
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public enum StringComparison {
+ public enum StringComparison
+ {
CurrentCulture = 0,
CurrentCultureIgnoreCase = 1,
InvariantCulture = 2,
diff --git a/src/mscorlib/src/System/StringSplitOptions.cs b/src/mscorlib/src/System/StringSplitOptions.cs
index ae95aae9f8..43b626a010 100644
--- a/src/mscorlib/src/System/StringSplitOptions.cs
+++ b/src/mscorlib/src/System/StringSplitOptions.cs
@@ -2,15 +2,12 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-using System.Runtime.InteropServices;
-
namespace System
{
- [ComVisible(false)]
[Flags]
public enum StringSplitOptions
{
None = 0,
RemoveEmptyEntries = 1
}
-}
+} \ No newline at end of file
diff --git a/src/mscorlib/src/System/StubHelpers.cs b/src/mscorlib/src/System/StubHelpers.cs
index 26a227628a..2d5926b923 100644
--- a/src/mscorlib/src/System/StubHelpers.cs
+++ b/src/mscorlib/src/System/StubHelpers.cs
@@ -19,7 +19,6 @@ namespace System.StubHelpers {
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class AnsiCharMarshaler
{
// The length of the returned array is an approximation based on the length of the input string and the system
@@ -27,7 +26,8 @@ namespace System.StubHelpers {
unsafe static internal byte[] DoAnsiConversion(string str, bool fBestFit, bool fThrowOnUnmappableChar, out int cbLength)
{
byte[] buffer = new byte[(str.Length + 1) * Marshal.SystemMaxDBCSCharSize];
- fixed (byte *bufferPtr = buffer)
+ BCLDebug.Assert(buffer.Length != 0);
+ fixed (byte *bufferPtr = &buffer[0])
{
cbLength = str.ConvertToAnsi(bufferPtr, buffer.Length, fBestFit, fThrowOnUnmappableChar);
}
@@ -53,7 +53,6 @@ namespace System.StubHelpers {
}
} // class AnsiCharMarshaler
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class CSTRMarshaler
{
static internal unsafe IntPtr ConvertToNative(int flags, string strManaged, IntPtr pNativeBuffer)
@@ -121,7 +120,6 @@ namespace System.StubHelpers {
}
} // class CSTRMarshaler
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class UTF8Marshaler
{
const int MAX_UTF8_CHAR_SIZE = 3;
@@ -178,7 +176,6 @@ namespace System.StubHelpers {
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class UTF8BufferMarshaler
{
static internal unsafe IntPtr ConvertToNative(StringBuilder sb, IntPtr pNativeBuffer, int flags)
@@ -218,7 +215,7 @@ namespace System.StubHelpers {
// null argument.
char[] cCharBuffer = new char[numChar + 1];
cCharBuffer[numChar] = '\0';
- fixed (char* pBuffer = cCharBuffer)
+ fixed (char* pBuffer = &cCharBuffer[0])
{
numChar = Encoding.UTF8.GetChars((byte*)pNative, nbBytes, pBuffer, numChar);
// replace string builder internal buffer
@@ -229,7 +226,6 @@ namespace System.StubHelpers {
#if FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class BSTRMarshaler
{
static internal unsafe IntPtr ConvertToNative(string strManaged, IntPtr pNativeBuffer)
@@ -357,7 +353,6 @@ namespace System.StubHelpers {
#endif // FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class VBByValStrMarshaler
{
static internal unsafe IntPtr ConvertToNative(string strManaged, bool fBestFit, bool fThrowOnUnmappableChar, ref int cch)
@@ -423,7 +418,6 @@ namespace System.StubHelpers {
#if FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class AnsiBSTRMarshaler
{
static internal unsafe IntPtr ConvertToNative(int flags, string strManaged)
@@ -475,7 +469,6 @@ namespace System.StubHelpers {
#endif // FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class WSTRBufferMarshaler
{
static internal IntPtr ConvertToNative(string strManaged)
@@ -506,7 +499,6 @@ namespace System.StubHelpers {
public Int64 UniversalTime;
};
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class DateTimeOffsetMarshaler {
// Numer of ticks counted between 0001-01-01, 00:00:00 and 1601-01-01, 00:00:00.
@@ -534,7 +526,6 @@ namespace System.StubHelpers {
#if FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class HStringMarshaler
{
// Slow-path, which requires making a copy of the managed string into the resulting HSTRING
@@ -597,7 +588,6 @@ namespace System.StubHelpers {
}
} // class HStringMarshaler
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class ObjectMarshaler
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -612,7 +602,6 @@ namespace System.StubHelpers {
#endif // FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class ValueClassMarshaler
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -625,7 +614,6 @@ namespace System.StubHelpers {
static internal extern void ClearNative(IntPtr dst, IntPtr pMT);
} // class ValueClassMarshaler
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class DateMarshaler
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -637,7 +625,6 @@ namespace System.StubHelpers {
} // class DateMarshaler
#if FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
[FriendAccessAllowed]
internal static class InterfaceMarshaler
{
@@ -657,7 +644,6 @@ namespace System.StubHelpers {
#endif // FEATURE_COMINTEROP
#if FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class UriMarshaler
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -713,7 +699,6 @@ namespace System.StubHelpers {
}
#endif // FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class MngdNativeArrayMarshaler
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -740,7 +725,6 @@ namespace System.StubHelpers {
} // class MngdNativeArrayMarshaler
#if FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class MngdSafeArrayMarshaler
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -762,7 +746,6 @@ namespace System.StubHelpers {
static internal extern void ClearNative(IntPtr pMarshalState, ref object pManagedHome, IntPtr pNativeHome);
} // class MngdSafeArrayMarshaler
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class MngdHiddenLengthArrayMarshaler
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -923,7 +906,6 @@ namespace System.StubHelpers {
#endif // FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class MngdRefCustomMarshaler
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -942,7 +924,6 @@ namespace System.StubHelpers {
static internal extern void ClearManaged(IntPtr pMarshalState, ref object pManagedHome, IntPtr pNativeHome);
} // class MngdRefCustomMarshaler
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal struct AsAnyMarshaler
{
private const ushort VTHACK_ANSICHAR = 253;
@@ -1282,7 +1263,6 @@ namespace System.StubHelpers {
} // struct AsAnyMarshaler
#if FEATURE_COMINTEROP
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class NullableMarshaler
{
static internal IntPtr ConvertToNative<T>(ref Nullable<T> pManaged) where T : struct
@@ -1344,7 +1324,6 @@ namespace System.StubHelpers {
internal static extern System.Type GetTypeFromWinRTTypeName(string typeName, out bool isPrimitive);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class SystemTypeMarshaler
{
internal static unsafe void ConvertToNative(System.Type managedType, TypeNameNative *pNativeType)
@@ -1431,7 +1410,6 @@ namespace System.StubHelpers {
} // class SystemTypeMarshaler
// For converting WinRT's Windows.Foundation.HResult into System.Exception and vice versa.
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class HResultExceptionMarshaler
{
static internal unsafe int ConvertToNative(Exception ex)
@@ -1469,7 +1447,6 @@ namespace System.StubHelpers {
}
} // class HResultExceptionMarshaler
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static class KeyValuePairMarshaler
{
internal static IntPtr ConvertToNative<K, V>([In] ref KeyValuePair<K, V> pair)
@@ -1534,7 +1511,6 @@ namespace System.StubHelpers {
public bool m_owned;
} // class CleanupWorkListElement
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal sealed class CleanupWorkList
{
private List<CleanupWorkListElement> m_list = new List<CleanupWorkListElement>();
@@ -1545,7 +1521,6 @@ namespace System.StubHelpers {
m_list.Add(elem);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void Destroy()
{
for (int i = m_list.Count - 1; i >= 0; i--)
@@ -1556,7 +1531,6 @@ namespace System.StubHelpers {
}
} // class CleanupWorkList
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
[SuppressUnmanagedCodeSecurityAttribute()]
internal static class StubHelpers
{
@@ -1593,7 +1567,6 @@ namespace System.StubHelpers {
return SafeHandleAddRef(handle, ref element.m_owned);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
static internal void DestroyCleanupList(ref CleanupWorkList pCleanupWorkList)
{
if (pCleanupWorkList != null)
@@ -1655,7 +1628,6 @@ namespace System.StubHelpers {
}
// Releases the SH (to be called from finally block).
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
static internal void SafeHandleRelease(SafeHandle pHandle)
{
if (pHandle == null)
diff --git a/src/mscorlib/src/System/SystemException.cs b/src/mscorlib/src/System/SystemException.cs
index 8a54124e3e..f4779a2cd4 100644
--- a/src/mscorlib/src/System/SystemException.cs
+++ b/src/mscorlib/src/System/SystemException.cs
@@ -2,30 +2,31 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
- using System;
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
+
+namespace System
+{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class SystemException : Exception
{
- public SystemException()
- : base(Environment.GetResourceString("Arg_SystemException")) {
- SetErrorCode(__HResults.COR_E_SYSTEM);
- }
-
- public SystemException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_SYSTEM);
+ public SystemException()
+ : base(SR.Arg_SystemException)
+ {
+ HResult = __HResults.COR_E_SYSTEM;
}
-
- public SystemException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_SYSTEM);
+
+ public SystemException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_SYSTEM;
}
- protected SystemException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public SystemException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_SYSTEM;
}
+
+ protected SystemException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/Text/ASCIIEncoding.cs b/src/mscorlib/src/System/Text/ASCIIEncoding.cs
index fc7589f2d8..07b7f3e890 100644
--- a/src/mscorlib/src/System/Text/ASCIIEncoding.cs
+++ b/src/mscorlib/src/System/Text/ASCIIEncoding.cs
@@ -6,7 +6,6 @@ namespace System.Text
{
using System;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
@@ -22,7 +21,6 @@ namespace System.Text
//
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public class ASCIIEncoding : Encoding
{
// Used by Encoding.ASCII for lazy initialization
@@ -72,7 +70,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetByteCount(char* chars, int count)
{
return EncodingForwarder.GetByteCount(this, chars, count);
@@ -100,7 +97,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetBytes(char* chars, int charCount, byte* bytes, int byteCount)
{
return EncodingForwarder.GetBytes(this, chars, charCount, bytes, byteCount);
@@ -115,7 +111,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetCharCount(byte* bytes, int count)
{
return EncodingForwarder.GetCharCount(this, bytes, count);
@@ -128,7 +123,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public unsafe override int GetChars(byte* bytes, int byteCount, char* chars, int charCount)
{
return EncodingForwarder.GetChars(this, bytes, byteCount, chars, charCount);
@@ -741,7 +735,6 @@ namespace System.Text
// True if and only if the encoding only uses single byte code points. (Ie, ASCII, 1252, etc)
- [System.Runtime.InteropServices.ComVisible(false)]
public override bool IsSingleByte
{
get
@@ -750,14 +743,12 @@ namespace System.Text
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override Decoder GetDecoder()
{
return new DecoderNLS(this);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override Encoder GetEncoder()
{
return new EncoderNLS(this);
diff --git a/src/mscorlib/src/System/Text/BaseCodePageEncoding.cs b/src/mscorlib/src/System/Text/BaseCodePageEncoding.cs
deleted file mode 100644
index 0a42237dc1..0000000000
--- a/src/mscorlib/src/System/Text/BaseCodePageEncoding.cs
+++ /dev/null
@@ -1,332 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#if FEATURE_CODEPAGES_FILE
-namespace System.Text
-{
- using System;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Globalization;
- using System.Runtime.InteropServices;
- using System.Security;
- using System.Collections;
- using System.Runtime.CompilerServices;
- using System.Runtime.Serialization;
- using System.Runtime.Versioning;
- using System.Security.Permissions;
- using Microsoft.Win32.SafeHandles;
-
- // Our input file data structures look like:
- //
- // Header Structure Looks Like:
- // struct NLSPlusHeader
- // {
- // WORD[16] filename; // 32 bytes
- // WORD[4] version; // 8 bytes = 40 // I.e: 3, 2, 0, 0
- // WORD count; // 2 bytes = 42 // Number of code page index's that'll follow
- // }
- //
- // Each code page section looks like:
- // struct NLSCodePageIndex
- // {
- // WORD[16] codePageName; // 32 bytes
- // WORD codePage; // +2 bytes = 34
- // WORD byteCount; // +2 bytes = 36
- // DWORD offset; // +4 bytes = 40 // Bytes from beginning of FILE.
- // }
- //
- // Each code page then has its own header
- // struct NLSCodePage
- // {
- // WORD[16] codePageName; // 32 bytes
- // WORD[4] version; // 8 bytes = 40 // I.e: 3.2.0.0
- // WORD codePage; // 2 bytes = 42
- // WORD byteCount; // 2 bytes = 44 // 1 or 2 byte code page (SBCS or DBCS)
- // WORD unicodeReplace; // 2 bytes = 46 // default replacement unicode character
- // WORD byteReplace; // 2 bytes = 48 // default replacement byte(s)
- // BYTE[] data; // data section
- // }
-
- [Serializable]
- internal abstract class BaseCodePageEncoding : EncodingNLS, ISerializable
- {
- // Static & Const stuff
- internal const String CODE_PAGE_DATA_FILE_NAME = "codepages.nlp";
- [NonSerialized]
- protected int dataTableCodePage;
-
- // Variables to help us allocate/mark our memory section correctly
- [NonSerialized]
- protected bool bFlagDataTable = true;
- [NonSerialized]
- protected int iExtraBytes = 0;
-
- // Our private unicode to bytes best fit array and visa versa.
- [NonSerialized]
- protected char[] arrayUnicodeBestFit = null;
- [NonSerialized]
- protected char[] arrayBytesBestFit = null;
-
- // This is used to help ISCII, EUCJP and ISO2022 figure out they're MlangEncodings
- [NonSerialized]
- protected bool m_bUseMlangTypeForSerialization = false;
-
- static BaseCodePageEncoding()
- {
- }
-
- //
- // This is the header for the native data table that we load from CODE_PAGE_DATA_FILE_NAME.
- //
- // Explicit layout is used here since a syntax like char[16] can not be used in sequential layout.
- [StructLayout(LayoutKind.Explicit)]
- internal unsafe struct CodePageDataFileHeader
- {
- [FieldOffset(0)]
- internal char TableName; // WORD[16]
- [FieldOffset(0x20)]
- internal ushort Version; // WORD[4]
- [FieldOffset(0x28)]
- internal short CodePageCount; // WORD
- [FieldOffset(0x2A)]
- internal short unused1; // Add a unused WORD so that CodePages is aligned with DWORD boundary.
- // Otherwise, 64-bit version will fail.
- [FieldOffset(0x2C)]
- internal CodePageIndex CodePages; // Start of code page index
- }
-
- [StructLayout(LayoutKind.Explicit, Pack=2)]
- internal unsafe struct CodePageIndex
- {
- [FieldOffset(0)]
- internal char CodePageName; // WORD[16]
- [FieldOffset(0x20)]
- internal short CodePage; // WORD
- [FieldOffset(0x22)]
- internal short ByteCount; // WORD
- [FieldOffset(0x24)]
- internal int Offset; // DWORD
- }
-
- [StructLayout(LayoutKind.Explicit)]
- internal unsafe struct CodePageHeader
- {
- [FieldOffset(0)]
- internal char CodePageName; // WORD[16]
- [FieldOffset(0x20)]
- internal ushort VersionMajor; // WORD
- [FieldOffset(0x22)]
- internal ushort VersionMinor; // WORD
- [FieldOffset(0x24)]
- internal ushort VersionRevision;// WORD
- [FieldOffset(0x26)]
- internal ushort VersionBuild; // WORD
- [FieldOffset(0x28)]
- internal short CodePage; // WORD
- [FieldOffset(0x2a)]
- internal short ByteCount; // WORD // 1 or 2 byte code page (SBCS or DBCS)
- [FieldOffset(0x2c)]
- internal char UnicodeReplace; // WORD // default replacement unicode character
- [FieldOffset(0x2e)]
- internal ushort ByteReplace; // WORD // default replacement bytes
- [FieldOffset(0x30)]
- internal short FirstDataWord; // WORD[]
- }
-
- // Initialize our global stuff
- unsafe static CodePageDataFileHeader* m_pCodePageFileHeader =
- (CodePageDataFileHeader*)GlobalizationAssembly.GetGlobalizationResourceBytePtr(
- typeof(CharUnicodeInfo).Assembly, CODE_PAGE_DATA_FILE_NAME);
-
- // Real variables
- [NonSerialized]
- unsafe protected CodePageHeader* pCodePage = null;
-
- // Safe handle wrapper around section map view
- [NonSerialized]
- protected SafeViewOfFileHandle safeMemorySectionHandle = null;
-
- // Safe handle wrapper around mapped file handle
- [NonSerialized]
- protected SafeFileMappingHandle safeFileMappingHandle = null;
-
- internal BaseCodePageEncoding(int codepage) : this(codepage, codepage)
- {
- }
-
- internal BaseCodePageEncoding(int codepage, int dataCodePage) :
- base(codepage == 0? Microsoft.Win32.Win32Native.GetACP(): codepage)
- {
- // Remember number of code page that we'll be using the table for.
- dataTableCodePage = dataCodePage;
- LoadCodePageTables();
- }
-
- // Constructor called by serialization.
- internal BaseCodePageEncoding(SerializationInfo info, StreamingContext context) : base(0)
- {
- // We cannot ever call this, we've proxied ourselved to CodePageEncoding
- throw new ArgumentNullException("this");
- }
-
- // ISerializable implementation
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // Make sure to get the base stuff too This throws if info is null
- SerializeEncoding(info, context);
- Debug.Assert(info!=null, "[BaseCodePageEncoding.GetObjectData] Expected null info to throw");
-
- // Just need Everett maxCharSize (BaseCodePageEncoding) or m_maxByteSize (MLangBaseCodePageEncoding)
- info.AddValue(m_bUseMlangTypeForSerialization ? "m_maxByteSize" : "maxCharSize",
- this.IsSingleByte ? 1 : 2);
-
- // Use this class or MLangBaseCodePageEncoding as our deserializer.
- info.SetType(m_bUseMlangTypeForSerialization ? typeof(MLangCodePageEncoding) :
- typeof(CodePageEncoding));
- }
-
- // We need to load tables for our code page
- private unsafe void LoadCodePageTables()
- {
- CodePageHeader* pCodePage = FindCodePage(dataTableCodePage);
-
- // Make sure we have one
- if (pCodePage == null)
- {
- // Didn't have one
- throw new NotSupportedException(
- Environment.GetResourceString("NotSupported_NoCodepageData", CodePage));
- }
-
- // Remember our code page
- this.pCodePage = pCodePage;
-
- // We had it, so load it
- LoadManagedCodePage();
- }
-
- // Look up the code page pointer
- private static unsafe CodePageHeader* FindCodePage(int codePage)
- {
- // We'll have to loop through all of the m_pCodePageIndex[] items to find our code page, this isn't
- // binary or anything so its not monsterously fast.
- for (int i = 0; i < m_pCodePageFileHeader->CodePageCount; i++)
- {
- CodePageIndex* pCodePageIndex = (&(m_pCodePageFileHeader->CodePages)) + i;
-
- if (pCodePageIndex->CodePage == codePage)
- {
- // Found it!
- CodePageHeader* pCodePage =
- (CodePageHeader*)((byte*)m_pCodePageFileHeader + pCodePageIndex->Offset);
- return pCodePage;
- }
- }
-
- // Couldn't find it
- return null;
- }
-
- // Get our code page byte count
- internal static unsafe int GetCodePageByteSize(int codePage)
- {
- // Get our code page info
- CodePageHeader* pCodePage = FindCodePage(codePage);
-
- // If null return 0
- if (pCodePage == null)
- return 0;
-
- Debug.Assert(pCodePage->ByteCount == 1 || pCodePage->ByteCount == 2,
- "[BaseCodePageEncoding] Code page (" + codePage + ") has invalid byte size (" + pCodePage->ByteCount + ") in table");
- // Return what it says for byte count
- return pCodePage->ByteCount;
- }
-
- // We have a managed code page entry, so load our tables
- protected abstract unsafe void LoadManagedCodePage();
-
- // Allocate memory to load our code page
- protected unsafe byte* GetSharedMemory(int iSize)
- {
- // Build our name
- String strName = GetMemorySectionName();
-
- IntPtr mappedFileHandle;
-
- // This gets shared memory for our map. If its can't, it gives us clean memory.
- Byte *pMemorySection = EncodingTable.nativeCreateOpenFileMapping(strName, iSize, out mappedFileHandle);
- Debug.Assert(pMemorySection != null,
- "[BaseCodePageEncoding.GetSharedMemory] Expected non-null memory section to be opened");
-
- // If that failed, we have to die.
- if (pMemorySection == null)
- throw new OutOfMemoryException(
- Environment.GetResourceString("Arg_OutOfMemoryException"));
-
- // if we have null file handle. this means memory was allocated after
- // failing to open the mapped file.
-
- if (mappedFileHandle != IntPtr.Zero)
- {
- safeMemorySectionHandle = new SafeViewOfFileHandle((IntPtr) pMemorySection, true);
- safeFileMappingHandle = new SafeFileMappingHandle(mappedFileHandle, true);
- }
-
- return pMemorySection;
- }
-
- protected unsafe virtual String GetMemorySectionName()
- {
- int iUseCodePage = this.bFlagDataTable ? dataTableCodePage : CodePage;
-
- String strName = String.Format(CultureInfo.InvariantCulture, "NLS_CodePage_{0}_{1}_{2}_{3}_{4}",
- iUseCodePage, this.pCodePage->VersionMajor, this.pCodePage->VersionMinor,
- this.pCodePage->VersionRevision, this.pCodePage->VersionBuild);
-
- return strName;
- }
-
- protected abstract unsafe void ReadBestFitTable();
-
- internal override char[] GetBestFitUnicodeToBytesData()
- {
- // Read in our best fit table if necessary
- if (arrayUnicodeBestFit == null) ReadBestFitTable();
-
- Debug.Assert(arrayUnicodeBestFit != null,
- "[BaseCodePageEncoding.GetBestFitUnicodeToBytesData]Expected non-null arrayUnicodeBestFit");
-
- // Normally we don't have any best fit data.
- return arrayUnicodeBestFit;
- }
-
- internal override char[] GetBestFitBytesToUnicodeData()
- {
- // Read in our best fit table if necessary
- if (arrayBytesBestFit == null) ReadBestFitTable();
-
- Debug.Assert(arrayBytesBestFit != null,
- "[BaseCodePageEncoding.GetBestFitBytesToUnicodeData]Expected non-null arrayBytesBestFit");
-
- // Normally we don't have any best fit data.
- return arrayBytesBestFit;
- }
-
- // During the AppDomain shutdown the Encoding class may already finalized and the memory section
- // is invalid. so we detect that by validating the memory section handle then re-initialize the memory
- // section by calling LoadManagedCodePage() method and eventually the mapped file handle and
- // the memory section pointer will get finalized one more time.
- internal unsafe void CheckMemorySection()
- {
- if (safeMemorySectionHandle != null && safeMemorySectionHandle.DangerousGetHandle() == IntPtr.Zero)
- {
- LoadManagedCodePage();
- }
- }
- }
-}
-
-#endif // FEATURE_CODEPAGES_FILE
diff --git a/src/mscorlib/src/System/Text/CodePageEncoding.cs b/src/mscorlib/src/System/Text/CodePageEncoding.cs
deleted file mode 100644
index 7805c6580a..0000000000
--- a/src/mscorlib/src/System/Text/CodePageEncoding.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-
-// WARNING:
-//
-// This is just an IObjectReference proxy for the Code Page Encodings.
-namespace System.Text
-{
- using System;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- /*=================================CodePageEncoding==================================
- ** This class is here only to deserialize the Code Page classes from Everett (V1.1) into
- ** Appropriate Whidbey (V2.0) objects. We also serialize the Whidbey classes
- ** using this proxy since we pretty much need one anyway and that solves Whidbey
- ** to Everett compatibility as well.
- ==============================================================================*/
-
- [Serializable]
- internal sealed class CodePageEncoding : IObjectReference, ISerializable
- {
- // Temp stuff
- [NonSerialized]
- private int m_codePage;
- [NonSerialized]
- private bool m_isReadOnly;
- [NonSerialized]
- private bool m_deserializedFromEverett = false;
-
- [NonSerialized]
- private EncoderFallback encoderFallback = null;
- [NonSerialized]
- private DecoderFallback decoderFallback = null;
-
- // Might need this when GetRealObjecting
- [NonSerialized]
- private Encoding realEncoding = null;
-
- // Constructor called by serialization.
- internal CodePageEncoding(SerializationInfo info, StreamingContext context)
- {
- // Any info?
- if (info==null) throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- // All versions have a code page
- this.m_codePage = (int)info.GetValue("m_codePage", typeof(int));
-
- // See if we have a code page
- try
- {
- //
- // Try Whidbey V2.0 Fields
- //
- this.m_isReadOnly = (bool)info.GetValue("m_isReadOnly", typeof(bool));
-
- this.encoderFallback = (EncoderFallback)info.GetValue("encoderFallback", typeof(EncoderFallback));
- this.decoderFallback = (DecoderFallback)info.GetValue("decoderFallback", typeof(DecoderFallback));
- }
- catch (SerializationException)
- {
- //
- // Didn't have Whidbey things, must be Everett
- //
- this.m_deserializedFromEverett = true;
-
- // May as well be read only
- this.m_isReadOnly = true;
- }
- }
-
- // Just get it from GetEncoding
- public Object GetRealObject(StreamingContext context)
- {
- // Get our encoding (Note: This has default fallbacks for readonly and everett cases)
- this.realEncoding = Encoding.GetEncoding(this.m_codePage);
-
- // If its read only then it uses default fallbacks, otherwise pick up the new ones
- // Otherwise we want to leave the new one read only
- if (!this.m_deserializedFromEverett && !this.m_isReadOnly)
- {
- this.realEncoding = (Encoding)this.realEncoding.Clone();
- this.realEncoding.EncoderFallback = this.encoderFallback;
- this.realEncoding.DecoderFallback = this.decoderFallback;
- }
-
- return this.realEncoding;
- }
-
- // ISerializable implementation
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // We cannot ever call this.
- Debug.Assert(false, "Didn't expect to make it to CodePageEncoding ISerializable.GetObjectData");
- throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
- }
-
- // Same problem with the Decoder, this only happens with Everett Decoders
- [Serializable]
- internal sealed class Decoder : IObjectReference, ISerializable
- {
- // Might need this when GetRealObjecting
- [NonSerialized]
- private Encoding realEncoding = null;
-
- // Constructor called by serialization, have to handle deserializing from Everett
- internal Decoder(SerializationInfo info, StreamingContext context)
- {
- // Any info?
- if (info==null) throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- this.realEncoding = (Encoding)info.GetValue("encoding", typeof(Encoding));
- }
-
- // Just get it from GetDecider
- public Object GetRealObject(StreamingContext context)
- {
- return this.realEncoding.GetDecoder();
- }
-
- // ISerializable implementation, get data for this object
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // We cannot ever call this.
- Debug.Assert(false, "Didn't expect to make it to CodePageEncoding.Decoder.GetObjectData");
- throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
- }
- }
- }
-}
diff --git a/src/mscorlib/src/System/Text/DBCSCodePageEncoding.cs b/src/mscorlib/src/System/Text/DBCSCodePageEncoding.cs
deleted file mode 100644
index 28b85d591e..0000000000
--- a/src/mscorlib/src/System/Text/DBCSCodePageEncoding.cs
+++ /dev/null
@@ -1,1194 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#if FEATURE_CODEPAGES_FILE // requires BaseCodePageEncooding
-namespace System.Text
-{
- using System;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Text;
- using System.Threading;
- using System.Runtime.Serialization;
- using System.Security;
- using System.Security.Permissions;
-
- // DBCSCodePageEncoding
- //
- [Serializable]
- internal class DBCSCodePageEncoding : BaseCodePageEncoding, ISerializable
- {
- // Pointers to our memory section parts
- [NonSerialized]
- protected unsafe char* mapBytesToUnicode = null; // char 65536
- [NonSerialized]
- protected unsafe ushort* mapUnicodeToBytes = null; // byte 65536
- [NonSerialized]
- protected unsafe int* mapCodePageCached = null; // to remember which CP is cached
-
- [NonSerialized]
- protected const char UNKNOWN_CHAR_FLAG=(char)0x0;
- [NonSerialized]
- protected const char UNICODE_REPLACEMENT_CHAR=(char)0xFFFD;
- [NonSerialized]
- protected const char LEAD_BYTE_CHAR=(char)0xFFFE; // For lead bytes
-
- // Note that even though we provide bytesUnknown and byteCountUnknown,
- // They aren't actually used because of the fallback mechanism. (char is though)
- [NonSerialized]
- ushort bytesUnknown;
- [NonSerialized]
- int byteCountUnknown;
- [NonSerialized]
- protected char charUnknown = (char)0;
-
- public DBCSCodePageEncoding(int codePage) : this(codePage, codePage)
- {
- }
-
- internal DBCSCodePageEncoding(int codePage, int dataCodePage) : base(codePage, dataCodePage)
- {
- }
-
- // Constructor called by serialization.
- // Note: We use the base GetObjectData however
- internal DBCSCodePageEncoding(SerializationInfo info, StreamingContext context) : base(0)
- {
- // Actually this can't ever get called, CodePageEncoding is our proxy
- Debug.Assert(false, "Didn't expect to make it to DBCSCodePageEncoding serialization constructor");
- throw new ArgumentNullException("this");
- }
-
- // MBCS data section:
- //
- // We treat each multibyte pattern as 2 bytes in our table. If its a single byte, then the high byte
- // for that position will be 0. When the table is loaded, leading bytes are flagged with 0xFFFE, so
- // when reading the table look up with each byte. If the result is 0xFFFE, then use 2 bytes to read
- // further data. FFFF is a special value indicating that the unicode code is the same as the
- // character code (this helps us support code points < 0x20). FFFD is used as replacement character.
- //
- // Normal table:
- // WCHAR* - Starting with MB code point 0.
- // FFFF indicates we are to use the multibyte value for our code point.
- // FFFE is the lead byte mark. (This should only appear in positions < 0x100)
- // FFFD is the replacement (unknown character) mark.
- // 2-20 means to advance the pointer 2-0x20 characters.
- // 1 means that to advance to the multibyte position contained in the next char.
- // 0 nothing special (I don't think its possible.)
- //
- // Table ends when multibyte position has advanced to 0xFFFF.
- //
- // Bytes->Unicode Best Fit table:
- // WCHAR* - Same as normal table, except first wchar is byte position to start at.
- //
- // Unicode->Bytes Best Fit Table:
- // WCHAR* - Same as normal table, except first wchar is char position to start at and
- // we loop through unicode code points and the table has the byte points that
- // corrospond to those unicode code points.
- // We have a managed code page entry, so load our tables
- //
- protected override unsafe void LoadManagedCodePage()
- {
- // Should be loading OUR code page
- Debug.Assert(pCodePage->CodePage == this.dataTableCodePage,
- "[DBCSCodePageEncoding.LoadManagedCodePage]Expected to load data table code page");
-
- // Make sure we're really a 1 byte code page
- if (pCodePage->ByteCount != 2)
- throw new NotSupportedException(
- Environment.GetResourceString("NotSupported_NoCodepageData", CodePage));
- // Remember our unknown bytes & chars
- bytesUnknown = pCodePage->ByteReplace;
- charUnknown = pCodePage->UnicodeReplace;
-
- // Need to make sure the fallback buffer's fallback char is correct
- if (this.DecoderFallback.IsMicrosoftBestFitFallback)
- {
- ((InternalDecoderBestFitFallback)(this.DecoderFallback)).cReplacement = charUnknown;
- }
-
- // Is our replacement bytesUnknown a single or double byte character?
- byteCountUnknown = 1;
- if (bytesUnknown > 0xff)
- byteCountUnknown++;
-
- // We use fallback encoder, which uses ?, which so far all of our tables do as well
- Debug.Assert(bytesUnknown == 0x3f,
- "[DBCSCodePageEncoding.LoadManagedCodePage]Expected 0x3f (?) as unknown byte character");
-
- // Get our mapped section (bytes to allocate = 2 bytes per 65536 Unicode chars + 2 bytes per 65536 DBCS chars)
- // Plus 4 byte to remember CP # when done loading it. (Don't want to get IA64 or anything out of alignment)
- byte *pMemorySection = GetSharedMemory(65536 * 2 * 2 + 4 + this.iExtraBytes);
-
- mapBytesToUnicode = (char*)pMemorySection;
- mapUnicodeToBytes = (ushort*)(pMemorySection + 65536 * 2);
- mapCodePageCached = (int*)(pMemorySection + 65536 * 2 * 2 + this.iExtraBytes);
-
- // If its cached (& filled in) we don't have to do anything else
- if (*mapCodePageCached != 0)
- {
- Debug.Assert(((*mapCodePageCached == this.dataTableCodePage && this.bFlagDataTable) ||
- (*mapCodePageCached == this.CodePage && !this.bFlagDataTable)),
- "[DBCSCodePageEncoding.LoadManagedCodePage]Expected mapped section cached page flag to be set to data table or regular code page.");
-
- // Special case for GB18030 because it mangles its own code page after this function
- if ((*mapCodePageCached != this.dataTableCodePage && this.bFlagDataTable) ||
- (*mapCodePageCached != this.CodePage && !this.bFlagDataTable))
- throw new OutOfMemoryException(
- Environment.GetResourceString("Arg_OutOfMemoryException"));
-
- // If its cached (& filled in) we don't have to do anything else
- return;
- }
-
- // Need to read our data file and fill in our section.
- // WARNING: Multiple code pieces could do this at once (so we don't have to lock machine-wide)
- // so be careful here. Only stick legal values in here, don't stick temporary values.
-
- // Move to the beginning of the data section
- char* pData = (char*)&(pCodePage->FirstDataWord);
-
- // We start at bytes position 0
- int bytePosition = 0;
- int useBytes = 0;
-
- while (bytePosition < 0x10000)
- {
- // Get the next byte
- char input = *pData;
- pData++;
-
- // build our table:
- if (input == 1)
- {
- // Use next data as our byte position
- bytePosition = (int)(*pData);
- pData++;
- continue;
- }
- else if (input < 0x20 && input > 0)
- {
- // Advance input characters
- bytePosition += input;
- continue;
- }
- else if (input == 0xFFFF)
- {
- // Same as our bytePosition
- useBytes = bytePosition;
- input = unchecked((char)bytePosition);
- }
- else if (input == LEAD_BYTE_CHAR) // 0xfffe
- {
- // Lead byte mark
- Debug.Assert(bytePosition < 0x100, "[DBCSCodePageEncoding.LoadManagedCodePage]expected lead byte to be < 0x100");
- useBytes = bytePosition;
- // input stays 0xFFFE
- }
- else if (input == UNICODE_REPLACEMENT_CHAR)
- {
- // Replacement char is already done
- bytePosition++;
- continue;
- }
- else
- {
- // Use this character
- useBytes = bytePosition;
- // input == input;
- }
-
- // We may need to clean up the selected character & position
- if (CleanUpBytes(ref useBytes))
- {
- // Use this selected character at the selected position, don't do this if not supposed to.
- if (input != LEAD_BYTE_CHAR)
- {
- // Don't do this for lead byte marks.
- mapUnicodeToBytes[input] = unchecked((ushort)useBytes);
- }
- mapBytesToUnicode[useBytes] = input;
- }
- bytePosition++;
- }
-
- // See if we have any clean up junk to do
- CleanUpEndBytes(mapBytesToUnicode);
-
- // We're done with our mapped section, set our flag so others don't have to rebuild table.
- // We only do this if we're flagging(using) the data table as our primary mechanism
- if (this.bFlagDataTable)
- *mapCodePageCached = this.dataTableCodePage;
- }
-
- // Any special processing for this code page
- protected virtual bool CleanUpBytes(ref int bytes)
- {
- return true;
- }
-
- // Any special processing for this code page
- protected virtual unsafe void CleanUpEndBytes(char* chars)
- {
- }
-
- // Private object for locking instead of locking on a public type for SQL reliability work.
- private static Object s_InternalSyncObject;
- private static Object InternalSyncObject
- {
- get
- {
- if (s_InternalSyncObject == null)
- {
- Object o = new Object();
- Interlocked.CompareExchange<Object>(ref s_InternalSyncObject, o, null);
- }
- return s_InternalSyncObject;
- }
- }
-
- // Read in our best fit table
- protected unsafe override void ReadBestFitTable()
- {
- // Lock so we don't confuse ourselves.
- lock(InternalSyncObject)
- {
- // If we got a best fit array already then don't do this
- if (arrayUnicodeBestFit == null)
- {
- //
- // Read in Best Fit table.
- //
-
- // First we have to advance past original character mapping table
- // Move to the beginning of the data section
- char* pData = (char*)&(pCodePage->FirstDataWord);
-
- // We start at bytes position 0
- int bytesPosition = 0;
-
- while (bytesPosition < 0x10000)
- {
- // Get the next byte
- char input = *pData;
- pData++;
-
- // build our table:
- if (input == 1)
- {
- // Use next data as our byte position
- bytesPosition = (int)(*pData);
- pData++;
- }
- else if (input < 0x20 && input > 0)
- {
- // Advance input characters
- bytesPosition += input;
- }
- else
- {
- // All other cases add 1 to bytes position
- bytesPosition++;
- }
- }
-
- // Now bytesPosition is at start of bytes->unicode best fit table
- char* pBytes2Unicode = pData;
-
- // Now pData should be pointing to first word of bytes -> unicode best fit table
- // (which we're also not using at the moment)
- int iBestFitCount = 0;
- bytesPosition = *pData;
- pData++;
-
- while (bytesPosition < 0x10000)
- {
- // Get the next byte
- char input = *pData;
- pData++;
-
- // build our table:
- if (input == 1)
- {
- // Use next data as our byte position
- bytesPosition = (int)(*pData);
- pData++;
- }
- else if (input < 0x20 && input > 0)
- {
- // Advance input characters
- bytesPosition += input;
- }
- else
- {
- // Use this character (unless its unknown, unk just skips 1)
- if (input != UNICODE_REPLACEMENT_CHAR)
- {
- int correctedChar = bytesPosition;
- if (CleanUpBytes(ref correctedChar))
- {
- // Sometimes correction makes them same as no best fit, skip those.
- if (mapBytesToUnicode[correctedChar] != input)
- {
- iBestFitCount++;
- }
- }
- }
-
- // Position gets incremented in any case.
- bytesPosition++;
- }
-
- }
-
- // Now we know how big the best fit table has to be
- char[] arrayTemp = new char[iBestFitCount * 2];
-
- // Now we know how many best fits we have, so go back & read them in
- iBestFitCount = 0;
- pData = pBytes2Unicode;
- bytesPosition = *pData;
- pData++;
- bool bOutOfOrder = false;
-
- // Read it all in again
- while (bytesPosition < 0x10000)
- {
- // Get the next byte
- char input = *pData;
- pData++;
-
- // build our table:
- if (input == 1)
- {
- // Use next data as our byte position
- bytesPosition = (int)(*pData);
- pData++;
- }
- else if (input < 0x20 && input > 0)
- {
- // Advance input characters
- bytesPosition += input;
- }
- else
- {
- // Use this character (unless its unknown, unk just skips 1)
- if (input != UNICODE_REPLACEMENT_CHAR)
- {
- int correctedChar = bytesPosition;
- if (CleanUpBytes(ref correctedChar))
- {
- // Sometimes correction makes them same as no best fit, skip those.
- if (mapBytesToUnicode[correctedChar] != input)
- {
- if (correctedChar != bytesPosition)
- bOutOfOrder = true;
-
- arrayTemp[iBestFitCount++] = unchecked((char)correctedChar);
- arrayTemp[iBestFitCount++] = input;
- }
- }
- }
-
- // Position gets incremented in any case.
- bytesPosition++;
- }
- }
-
- // If they're out of order we need to sort them.
- if (bOutOfOrder)
- {
- Debug.Assert((arrayTemp.Length / 2) < 20,
- "[DBCSCodePageEncoding.ReadBestFitTable]Expected small best fit table < 20 for code page " + CodePage + ", not " + arrayTemp.Length / 2);
-
- for (int i = 0; i < arrayTemp.Length - 2; i+=2)
- {
- int iSmallest = i;
- char cSmallest = arrayTemp[i];
-
- for (int j = i + 2; j < arrayTemp.Length; j+=2)
- {
- // Find smallest one for front
- if (cSmallest > arrayTemp[j])
- {
- cSmallest = arrayTemp[j];
- iSmallest = j;
- }
- }
-
- // If smallest one is something else, switch them
- if (iSmallest != i)
- {
- char temp = arrayTemp[iSmallest];
- arrayTemp[iSmallest] = arrayTemp[i];
- arrayTemp[i] = temp;
- temp = arrayTemp[iSmallest+1];
- arrayTemp[iSmallest+1] = arrayTemp[i+1];
- arrayTemp[i+1] = temp;
- }
- }
- }
-
- // Remember our array
- arrayBytesBestFit = arrayTemp;
-
- // Now were at beginning of Unicode -> Bytes best fit table, need to count them
- char* pUnicode2Bytes = pData;
- int unicodePosition = *(pData++);
- iBestFitCount = 0;
-
- while (unicodePosition < 0x10000)
- {
- // Get the next byte
- char input = *pData;
- pData++;
-
- // build our table:
- if (input == 1)
- {
- // Use next data as our byte position
- unicodePosition = (int)*pData;
- pData++;
- }
- else if (input < 0x20 && input > 0)
- {
- // Advance input characters
- unicodePosition += input;
- }
- else
- {
- // Same as our unicodePosition or use this character
- if (input > 0)
- iBestFitCount++;
- unicodePosition++;
- }
- }
-
- // Allocate our table
- arrayTemp = new char[iBestFitCount*2];
-
- // Now do it again to fill the array with real values
- pData = pUnicode2Bytes;
- unicodePosition = *(pData++);
- iBestFitCount = 0;
-
- while (unicodePosition < 0x10000)
- {
- // Get the next byte
- char input = *pData;
- pData++;
-
- // build our table:
- if (input == 1)
- {
- // Use next data as our byte position
- unicodePosition = (int)*pData;
- pData++;
- }
- else if (input < 0x20 && input > 0)
- {
- // Advance input characters
- unicodePosition += input;
- }
- else
- {
- if (input > 0)
- {
- // Use this character, may need to clean it up
- int correctedChar = (int)input;
- if (CleanUpBytes(ref correctedChar))
- {
- arrayTemp[iBestFitCount++] = unchecked((char)unicodePosition);
- // Have to map it to Unicode because best fit will need unicode value of best fit char.
- arrayTemp[iBestFitCount++] = mapBytesToUnicode[correctedChar];
-
- // This won't work if it won't round trip.
- // We can't do this assert for CP 51932 & 50220 because they aren't
- // calling CleanUpBytes() for best fit. All the string stuff here
- // also makes this assert slow.
- // Debug.Assert(arrayTemp[iBestFitCount-1] != (char)0xFFFD, String.Format(
- // "[DBCSCodePageEncoding.ReadBestFitTable] No valid Unicode value {0:X4} for round trip bytes {1:X4}, encoding {2}",
- // (int)mapBytesToUnicode[input], (int)input, CodePage));
- }
- }
- unicodePosition++;
- }
- }
-
- // Remember our array
- arrayUnicodeBestFit = arrayTemp;
- }
-
- }
- }
-
- // GetByteCount
- // Note: We start by assuming that the output will be the same as count. Having
- // an encoder or fallback may change that assumption
- internal override unsafe int GetByteCount(char* chars, int count, EncoderNLS encoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- Debug.Assert(count >= 0, "[DBCSCodePageEncoding.GetByteCount]count is negative");
- Debug.Assert(chars != null, "[DBCSCodePageEncoding.GetByteCount]chars is null");
-
- // Assert because we shouldn't be able to have a null encoder.
- Debug.Assert(encoderFallback != null, "[DBCSCodePageEncoding.GetByteCount]Attempting to use null fallback");
-
- CheckMemorySection();
-
- // Get any left over characters
- char charLeftOver = (char)0;
- if (encoder != null)
- {
- charLeftOver = encoder.charLeftOver;
-
- // Only count if encoder.m_throwOnOverflow
- if (encoder.InternalHasFallbackBuffer && encoder.FallbackBuffer.Remaining > 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EncoderFallbackNotEmpty",
- this.EncodingName, encoder.Fallback.GetType()));
- }
-
- // prepare our end
- int byteCount = 0;
- char* charEnd = chars + count;
-
- // For fallback we will need a fallback buffer
- EncoderFallbackBuffer fallbackBuffer = null;
-
- // We may have a left over character from last time, try and process it.
- if (charLeftOver > 0)
- {
- Debug.Assert(Char.IsHighSurrogate(charLeftOver), "[DBCSCodePageEncoding.GetByteCount]leftover character should be high surrogate");
- Debug.Assert(encoder != null,
- "[DBCSCodePageEncoding.GetByteCount]Expect to have encoder if we have a charLeftOver");
-
- // Since left over char was a surrogate, it'll have to be fallen back.
- // Get Fallback
- fallbackBuffer = encoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(chars, charEnd, encoder, false);
- // This will fallback a pair if *chars is a low surrogate
- fallbackBuffer.InternalFallback(charLeftOver, ref chars);
- }
-
- // Now we may have fallback char[] already (from the encoder)
-
- // We have to use fallback method.
- char ch;
- while ((ch = (fallbackBuffer == null) ? '\0' : fallbackBuffer.InternalGetNextChar()) != 0 ||
- chars < charEnd)
- {
- // First unwind any fallback
- if (ch == 0)
- {
- // No fallback, just get next char
- ch = *chars;
- chars++;
- }
-
- // get byte for this char
- ushort sTemp = mapUnicodeToBytes[ch];
-
- // Check for fallback, this'll catch surrogate pairs too.
- if (sTemp == 0 && ch != (char)0)
- {
- if (fallbackBuffer == null)
- {
- // Initialize the buffer
- if (encoder == null)
- fallbackBuffer = this.encoderFallback.CreateFallbackBuffer();
- else
- fallbackBuffer = encoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(charEnd - count, charEnd, encoder, false);
- }
-
- // Get Fallback
- fallbackBuffer.InternalFallback(ch, ref chars);
- continue;
- }
-
- // We'll use this one
- byteCount++;
- if (sTemp >= 0x100)
- byteCount++;
- }
-
- return (int)byteCount;
- }
-
- internal override unsafe int GetBytes(char* chars, int charCount,
- byte* bytes, int byteCount, EncoderNLS encoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- Debug.Assert(bytes != null, "[DBCSCodePageEncoding.GetBytes]bytes is null");
- Debug.Assert(byteCount >= 0, "[DBCSCodePageEncoding.GetBytes]byteCount is negative");
- Debug.Assert(chars != null, "[DBCSCodePageEncoding.GetBytes]chars is null");
- Debug.Assert(charCount >= 0, "[DBCSCodePageEncoding.GetBytes]charCount is negative");
-
- // Assert because we shouldn't be able to have a null encoder.
- Debug.Assert(encoderFallback != null, "[DBCSCodePageEncoding.GetBytes]Attempting to use null encoder fallback");
-
- CheckMemorySection();
-
- // For fallback we will need a fallback buffer
- EncoderFallbackBuffer fallbackBuffer = null;
-
- // prepare our end
- char* charEnd = chars + charCount;
- char* charStart = chars;
- byte* byteStart = bytes;
- byte* byteEnd = bytes + byteCount;
-
- // Get any left over characters
- char charLeftOver = (char)0;
- if (encoder != null)
- {
- charLeftOver = encoder.charLeftOver;
- Debug.Assert(charLeftOver == 0 || Char.IsHighSurrogate(charLeftOver),
- "[DBCSCodePageEncoding.GetBytes]leftover character should be high surrogate");
-
- // Go ahead and get the fallback buffer (need leftover fallback if converting)
- fallbackBuffer = encoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(chars, charEnd, encoder, true);
-
- // If we're not converting we must not have a fallback buffer
- if (encoder.m_throwOnOverflow && fallbackBuffer.Remaining > 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EncoderFallbackNotEmpty",
- this.EncodingName, encoder.Fallback.GetType()));
-
- // We may have a left over character from last time, try and process it.
- if (charLeftOver > 0)
- {
- Debug.Assert(encoder != null,
- "[DBCSCodePageEncoding.GetBytes]Expect to have encoder if we have a charLeftOver");
-
- // Since left over char was a surrogate, it'll have to be fallen back.
- // Get Fallback
- fallbackBuffer.InternalFallback(charLeftOver, ref chars);
- }
- }
-
- // Now we may have fallback char[] already from the encoder
-
- // Go ahead and do it, including the fallback.
- char ch;
- while ((ch = (fallbackBuffer == null) ? '\0' : fallbackBuffer.InternalGetNextChar()) != 0 ||
- chars < charEnd)
- {
- // First unwind any fallback
- if (ch == 0)
- {
- // No fallback, just get next char
- ch = *chars;
- chars++;
- }
-
- // get byte for this char
- ushort sTemp = mapUnicodeToBytes[ch];
-
- // Check for fallback, this'll catch surrogate pairs too.
- if (sTemp == 0 && ch != (char)0)
- {
- if (fallbackBuffer == null)
- {
- // Initialize the buffer
- Debug.Assert(encoder == null,
- "[DBCSCodePageEncoding.GetBytes]Expected delayed create fallback only if no encoder.");
- fallbackBuffer = this.encoderFallback.CreateFallbackBuffer();
- fallbackBuffer.InternalInitialize(charEnd - charCount, charEnd, encoder, true);
- }
-
- // Get Fallback
- fallbackBuffer.InternalFallback(ch, ref chars);
- continue;
- }
-
- // We'll use this one (or two)
- // Bounds check
-
- // Go ahead and add it, lead byte 1st if necessary
- if (sTemp >= 0x100)
- {
- if (bytes + 1 >= byteEnd)
- {
- // didn't use this char, we'll throw or use buffer
- if (fallbackBuffer == null || fallbackBuffer.bFallingBack == false)
- {
- Debug.Assert(chars > charStart,
- "[DBCSCodePageEncoding.GetBytes]Expected chars to have advanced (double byte case)");
- chars--; // don't use last char
- }
- else
- fallbackBuffer.MovePrevious(); // don't use last fallback
- ThrowBytesOverflow(encoder, chars == charStart); // throw ?
- break; // don't throw, stop
- }
-
- *bytes = unchecked((byte)(sTemp >> 8));
- bytes++;
- }
- // Single byte
- else if (bytes >= byteEnd)
- {
- // didn't use this char, we'll throw or use buffer
- if (fallbackBuffer == null || fallbackBuffer.bFallingBack == false)
- {
- Debug.Assert(chars > charStart,
- "[DBCSCodePageEncoding.GetBytes]Expected chars to have advanced (single byte case)");
- chars--; // don't use last char
- }
- else
- fallbackBuffer.MovePrevious(); // don't use last fallback
- ThrowBytesOverflow(encoder, chars == charStart); // throw ?
- break; // don't throw, stop
- }
-
- *bytes = unchecked((byte)(sTemp & 0xff));
- bytes++;
- }
-
- // encoder stuff if we have one
- if (encoder != null)
- {
- // Fallback stuck it in encoder if necessary, but we have to clear MustFlush cases
- if (fallbackBuffer != null && !fallbackBuffer.bUsedEncoder)
- // Clear it in case of MustFlush
- encoder.charLeftOver = (char)0;
-
- // Set our chars used count
- encoder.m_charsUsed = (int)(chars - charStart);
- }
-
- // If we're not converting we must not have a fallback buffer
- // (We don't really have a way to clear none-encoder using fallbacks however)
-// Debug.Assert((encoder == null || encoder.m_throwOnOverflow) &&
-// (fallbackBuffer == null || fallbackBuffer.Remaining == 0),
-// "[DBCSEncoding.GetBytes]Expected empty fallback buffer at end if not converting");
-
- return (int)(bytes - byteStart);
- }
-
- // This is internal and called by something else,
- internal override unsafe int GetCharCount(byte* bytes, int count, DecoderNLS baseDecoder)
- {
- // Just assert, we're called internally so these should be safe, checked already
- Debug.Assert(bytes != null, "[DBCSCodePageEncoding.GetCharCount]bytes is null");
- Debug.Assert(count >= 0, "[DBCSCodePageEncoding.GetCharCount]byteCount is negative");
-
- CheckMemorySection();
-
- // Fix our decoder
- DBCSDecoder decoder = (DBCSDecoder)baseDecoder;
-
- // Get our fallback
- DecoderFallbackBuffer fallbackBuffer = null;
-
- // We'll need to know where the end is
- byte* byteEnd = bytes + count;
- int charCount = count; // Assume 1 char / byte
-
- // Shouldn't have anything in fallback buffer for GetCharCount
- // (don't have to check m_throwOnOverflow for count)
- Debug.Assert(decoder == null ||
- !decoder.InternalHasFallbackBuffer || decoder.FallbackBuffer.Remaining == 0,
- "[DBCSCodePageEncoding.GetCharCount]Expected empty fallback buffer at start");
-
- // If we have a left over byte, use it
- if (decoder != null && decoder.bLeftOver > 0)
- {
- // We have a left over byte?
- if (count == 0)
- {
- // No input though
- if (!decoder.MustFlush)
- {
- // Don't have to flush
- return 0;
- }
-
-
- Debug.Assert(fallbackBuffer == null,
- "[DBCSCodePageEncoding.GetCharCount]Expected empty fallback buffer");
- fallbackBuffer = decoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(bytes, null);
-
- byte[] byteBuffer = new byte[] { unchecked((byte)decoder.bLeftOver) };
- return fallbackBuffer.InternalFallback(byteBuffer, bytes);
- }
-
- // Get our full info
- int iBytes = decoder.bLeftOver << 8;
- iBytes |= (*bytes);
- bytes++;
-
- // This is either 1 known char or fallback
- // Already counted 1 char
- // Look up our bytes
- char cDecoder = mapBytesToUnicode[iBytes];
- if (cDecoder == 0 && iBytes != 0)
- {
- // Deallocate preallocated one
- charCount--;
-
- // We'll need a fallback
- Debug.Assert(fallbackBuffer == null,
- "[DBCSCodePageEncoding.GetCharCount]Expected empty fallback buffer for unknown pair");
- fallbackBuffer = decoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(byteEnd - count, null);
-
- // Do fallback, we know there're 2 bytes
- byte[] byteBuffer = new byte[] { unchecked((byte)(iBytes >> 8)), unchecked((byte)iBytes) };
- charCount += fallbackBuffer.InternalFallback(byteBuffer, bytes);
- }
- // else we already reserved space for this one.
- }
-
- // Loop, watch out for fallbacks
- while (bytes < byteEnd)
- {
- // Faster if don't use *bytes++;
- int iBytes = *bytes;
- bytes++;
- char c = mapBytesToUnicode[iBytes];
-
- // See if it was a double byte character
- if (c == LEAD_BYTE_CHAR)
- {
- // Its a lead byte
- charCount--; // deallocate preallocated lead byte
- if (bytes < byteEnd)
- {
- // Have another to use, so use it
- iBytes <<= 8;
- iBytes |= *bytes;
- bytes++;
- c = mapBytesToUnicode[iBytes];
- }
- else
- {
- // No input left
- if (decoder == null || decoder.MustFlush)
- {
- // have to flush anyway, set to unknown so we use fallback in a 'sec
- charCount++; // reallocate deallocated lead byte
- c = UNKNOWN_CHAR_FLAG;
- }
- else
- {
- // We'll stick it in decoder
- break;
- }
- }
- }
-
- // See if it was unknown.
- // Unknown and known chars already allocated, but fallbacks aren't
- if (c == UNKNOWN_CHAR_FLAG && iBytes != 0)
- {
- if (fallbackBuffer == null)
- {
- if (decoder == null)
- fallbackBuffer = this.DecoderFallback.CreateFallbackBuffer();
- else
- fallbackBuffer = decoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(byteEnd - count, null);
- }
-
- // Do fallback
- charCount--; // Get rid of preallocated extra char
- byte[] byteBuffer = null;
- if (iBytes < 0x100)
- byteBuffer = new byte[] { unchecked((byte)iBytes) };
- else
- byteBuffer = new byte[] { unchecked((byte)(iBytes >> 8)), unchecked((byte)iBytes) };
- charCount += fallbackBuffer.InternalFallback(byteBuffer, bytes);
- }
- }
-
- // Shouldn't have anything in fallback buffer for GetChars
- Debug.Assert(decoder == null || !decoder.m_throwOnOverflow ||
- !decoder.InternalHasFallbackBuffer || decoder.FallbackBuffer.Remaining == 0,
- "[DBCSCodePageEncoding.GetCharCount]Expected empty fallback buffer at end");
-
- // Return our count
- return charCount;
- }
-
- internal override unsafe int GetChars(byte* bytes, int byteCount,
- char* chars, int charCount, DecoderNLS baseDecoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- Debug.Assert(bytes != null, "[DBCSCodePageEncoding.GetChars]bytes is null");
- Debug.Assert(byteCount >= 0, "[DBCSCodePageEncoding.GetChars]byteCount is negative");
- Debug.Assert(chars != null, "[DBCSCodePageEncoding.GetChars]chars is null");
- Debug.Assert(charCount >= 0, "[DBCSCodePageEncoding.GetChars]charCount is negative");
-
- CheckMemorySection();
-
- // Fix our decoder
- DBCSDecoder decoder = (DBCSDecoder)baseDecoder;
-
- // We'll need to know where the end is
- byte* byteStart = bytes;
- byte* byteEnd = bytes + byteCount;
- char* charStart = chars;
- char* charEnd = chars + charCount;
- bool bUsedDecoder = false;
-
- // Get our fallback
- DecoderFallbackBuffer fallbackBuffer = null;
-
- // Shouldn't have anything in fallback buffer for GetChars
- Debug.Assert(decoder == null || !decoder.m_throwOnOverflow ||
- !decoder.InternalHasFallbackBuffer || decoder.FallbackBuffer.Remaining == 0,
- "[DBCSCodePageEncoding.GetChars]Expected empty fallback buffer at start");
-
- // If we have a left over byte, use it
- if (decoder != null && decoder.bLeftOver > 0)
- {
- // We have a left over byte?
- if (byteCount == 0)
- {
- // No input though
- if (!decoder.MustFlush)
- {
- // Don't have to flush
- return 0;
- }
-
- // Well, we're flushing, so use '?' or fallback
- // fallback leftover byte
- Debug.Assert(fallbackBuffer == null,
- "[DBCSCodePageEncoding.GetChars]Expected empty fallback");
- fallbackBuffer = decoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(bytes, charEnd);
-
- // If no room its hopeless, this was 1st fallback
- byte[] byteBuffer = new byte[] { unchecked((byte)decoder.bLeftOver) };
- if (!fallbackBuffer.InternalFallback(byteBuffer, bytes, ref chars))
- ThrowCharsOverflow(decoder, true);
-
- decoder.bLeftOver = 0;
-
- // Done, return it
- return (int)(chars-charStart);
- }
-
- // Get our full info
- int iBytes = decoder.bLeftOver << 8;
- iBytes |= (*bytes);
- bytes++;
-
- // Look up our bytes
- char cDecoder = mapBytesToUnicode[iBytes];
- if (cDecoder == UNKNOWN_CHAR_FLAG && iBytes != 0)
- {
- Debug.Assert(fallbackBuffer == null,
- "[DBCSCodePageEncoding.GetChars]Expected empty fallback for two bytes");
- fallbackBuffer = decoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(byteEnd - byteCount, charEnd);
-
- byte[] byteBuffer = new byte[] { unchecked((byte)(iBytes >> 8)), unchecked((byte)iBytes) };
- if (!fallbackBuffer.InternalFallback(byteBuffer, bytes, ref chars))
- ThrowCharsOverflow(decoder, true);
- }
- else
- {
- // Do we have output room?, hopeless if not, this is first char
- if (chars >= charEnd)
- ThrowCharsOverflow(decoder, true);
-
- *(chars++) = cDecoder;
- }
- }
-
- // Loop, paying attention to our fallbacks.
- while (bytes < byteEnd)
- {
- // Faster if don't use *bytes++;
- int iBytes = *bytes;
- bytes++;
- char c = mapBytesToUnicode[iBytes];
-
- // See if it was a double byte character
- if (c == LEAD_BYTE_CHAR)
- {
- // Its a lead byte
- if (bytes < byteEnd)
- {
- // Have another to use, so use it
- iBytes <<= 8;
- iBytes |= *bytes;
- bytes++;
- c = mapBytesToUnicode[iBytes];
- }
- else
- {
- // No input left
- if (decoder == null || decoder.MustFlush)
- {
- // have to flush anyway, set to unknown so we use fallback in a 'sec
- c = UNKNOWN_CHAR_FLAG;
- }
- else
- {
- // Stick it in decoder
- bUsedDecoder = true;
- decoder.bLeftOver = (byte)iBytes;
- break;
- }
- }
- }
-
- // See if it was unknown
- if (c == UNKNOWN_CHAR_FLAG && iBytes != 0)
- {
- if (fallbackBuffer == null)
- {
- if (decoder == null)
- fallbackBuffer = this.DecoderFallback.CreateFallbackBuffer();
- else
- fallbackBuffer = decoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(byteEnd - byteCount, charEnd);
- }
-
- // Do fallback
- byte[] byteBuffer = null;
- if (iBytes < 0x100)
- byteBuffer = new byte[] { unchecked((byte)iBytes) };
- else
- byteBuffer = new byte[] { unchecked((byte)(iBytes >> 8)), unchecked((byte)iBytes) };
- if (!fallbackBuffer.InternalFallback(byteBuffer, bytes, ref chars))
- {
- // May or may not throw, but we didn't get these byte(s)
- Debug.Assert(bytes >= byteStart + byteBuffer.Length,
- "[DBCSCodePageEncoding.GetChars]Expected bytes to have advanced for fallback");
- bytes-=byteBuffer.Length; // didn't use these byte(s)
- fallbackBuffer.InternalReset(); // Didn't fall this back
- ThrowCharsOverflow(decoder, bytes == byteStart); // throw?
- break; // don't throw, but stop loop
- }
- }
- else
- {
- // Do we have buffer room?
- if (chars >= charEnd)
- {
- // May or may not throw, but we didn't get these byte(s)
- Debug.Assert(bytes > byteStart,
- "[DBCSCodePageEncoding.GetChars]Expected bytes to have advanced for lead byte");
- bytes--; // unused byte
- if (iBytes >= 0x100)
- {
- Debug.Assert(bytes > byteStart,
- "[DBCSCodePageEncoding.GetChars]Expected bytes to have advanced for trail byte");
- bytes--; // 2nd unused byte
- }
- ThrowCharsOverflow(decoder, bytes == byteStart); // throw?
- break; // don't throw, but stop loop
- }
-
- *(chars++) = c;
- }
- }
-
- // We already stuck it in encoder if necessary, but we have to clear cases where nothing new got into decoder
- if (decoder != null)
- {
- // Clear it in case of MustFlush
- if (bUsedDecoder == false)
- {
- decoder.bLeftOver = 0;
- }
-
- // Remember our count
- decoder.m_bytesUsed = (int)(bytes - byteStart);
- }
-
- // Shouldn't have anything in fallback buffer for GetChars
- Debug.Assert(decoder == null || !decoder.m_throwOnOverflow ||
- !decoder.InternalHasFallbackBuffer || decoder.FallbackBuffer.Remaining == 0,
- "[DBCSCodePageEncoding.GetChars]Expected empty fallback buffer at end");
-
- // Return length of our output
- return (int)(chars - charStart);
- }
-
- public override int GetMaxByteCount(int charCount)
- {
- if (charCount < 0)
- throw new ArgumentOutOfRangeException(nameof(charCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- // Characters would be # of characters + 1 in case high surrogate is ? * max fallback
- long byteCount = (long)charCount + 1;
-
- if (EncoderFallback.MaxCharCount > 1)
- byteCount *= EncoderFallback.MaxCharCount;
-
- // 2 to 1 is worst case. Already considered surrogate fallback
- byteCount *= 2;
-
- if (byteCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(charCount), Environment.GetResourceString("ArgumentOutOfRange_GetByteCountOverflow"));
-
- return (int)byteCount;
- }
-
- public override int GetMaxCharCount(int byteCount)
- {
- if (byteCount < 0)
- throw new ArgumentOutOfRangeException(nameof(byteCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- // DBCS is pretty much the same, but could have hanging high byte making extra ? and fallback for unknown
- long charCount = ((long)byteCount + 1);
-
- // 1 to 1 for most characters. Only surrogates with fallbacks have less, unknown fallbacks could be longer.
- if (DecoderFallback.MaxCharCount > 1)
- charCount *= DecoderFallback.MaxCharCount;
-
- if (charCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(byteCount), Environment.GetResourceString("ArgumentOutOfRange_GetCharCountOverflow"));
-
- return (int)charCount;
- }
-
- public override Decoder GetDecoder()
- {
- return new DBCSDecoder(this);
- }
-
- [Serializable]
- internal class DBCSDecoder : DecoderNLS
- {
- // Need a place for the last left over byte
- internal byte bLeftOver = 0;
-
- public DBCSDecoder(DBCSCodePageEncoding encoding) : base(encoding)
- {
- // Base calls reset
- }
-
- public override void Reset()
- {
- this.bLeftOver = 0;
- if (m_fallbackBuffer != null)
- m_fallbackBuffer.Reset();
- }
-
- // Anything left in our decoder?
- internal override bool HasState
- {
- get
- {
- return (this.bLeftOver != 0);
- }
- }
- }
- }
-}
-#endif // FEATURE_CODEPAGES_FILE
-
diff --git a/src/mscorlib/src/System/Text/Decoder.cs b/src/mscorlib/src/System/Text/Decoder.cs
index 0ebbacddcf..a9fea82a39 100644
--- a/src/mscorlib/src/System/Text/Decoder.cs
+++ b/src/mscorlib/src/System/Text/Decoder.cs
@@ -20,7 +20,6 @@ namespace System.Text
// class are typically obtained through calls to the GetDecoder method
// of Encoding objects.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public abstract class Decoder
{
@@ -39,7 +38,6 @@ namespace System.Text
// We don't call default reset because default reset probably isn't good if we aren't initialized.
}
- [System.Runtime.InteropServices.ComVisible(false)]
public DecoderFallback Fallback
{
get
@@ -65,7 +63,6 @@ namespace System.Text
// Note: we don't test for threading here because async access to Encoders and Decoders
// doesn't work anyway.
- [System.Runtime.InteropServices.ComVisible(false)]
public DecoderFallbackBuffer FallbackBuffer
{
get
@@ -99,7 +96,6 @@ namespace System.Text
//
// Virtual implimentation has to call GetChars with flush and a big enough buffer to clear a 0 byte string
// We avoid GetMaxCharCount() because a) we can't call the base encoder and b) it might be really big.
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual void Reset()
{
byte[] byteTemp = Array.Empty<byte>();
@@ -117,7 +113,6 @@ namespace System.Text
//
public abstract int GetCharCount(byte[] bytes, int index, int count);
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetCharCount(byte[] bytes, int index, int count, bool flush)
{
return GetCharCount(bytes, index, count);
@@ -126,7 +121,6 @@ namespace System.Text
// We expect this to be the workhorse for NLS Encodings, but for existing
// ones we need a working (if slow) default implimentation)
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe int GetCharCount(byte* bytes, int count, bool flush)
{
// Validate input parameters
@@ -190,7 +184,6 @@ namespace System.Text
// could easily overflow our output buffer. Therefore we do an extra test
// when we copy the buffer so that we don't overflow charCount either.
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe int GetChars(byte* bytes, int byteCount,
char* chars, int charCount, bool flush)
{
@@ -248,7 +241,6 @@ namespace System.Text
// Note that if all of the input bytes are not consumed, then we'll do a /2, which means
// that its likely that we didn't consume as many bytes as we could have. For some
// applications this could be slow. (Like trying to exactly fill an output buffer from a bigger stream)
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual void Convert(byte[] bytes, int byteIndex, int byteCount,
char[] chars, int charIndex, int charCount, bool flush,
out int bytesUsed, out int charsUsed, out bool completed)
@@ -306,7 +298,6 @@ namespace System.Text
// that its likely that we didn't consume as many bytes as we could have. For some
// applications this could be slow. (Like trying to exactly fill an output buffer from a bigger stream)
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe void Convert(byte* bytes, int byteCount,
char* chars, int charCount, bool flush,
out int bytesUsed, out int charsUsed, out bool completed)
diff --git a/src/mscorlib/src/System/Text/DecoderFallback.cs b/src/mscorlib/src/System/Text/DecoderFallback.cs
index 42483a724d..bfd4a2852d 100644
--- a/src/mscorlib/src/System/Text/DecoderFallback.cs
+++ b/src/mscorlib/src/System/Text/DecoderFallback.cs
@@ -75,14 +75,6 @@ namespace System.Text
// Maximum number of characters that this instance of this fallback could return
public abstract int MaxCharCount { get; }
-
- internal bool IsMicrosoftBestFitFallback
- {
- get
- {
- return bIsMicrosoftBestFitFallback;
- }
- }
}
diff --git a/src/mscorlib/src/System/Text/DecoderNLS.cs b/src/mscorlib/src/System/Text/DecoderNLS.cs
index e44c43adef..79474f8d8c 100644
--- a/src/mscorlib/src/System/Text/DecoderNLS.cs
+++ b/src/mscorlib/src/System/Text/DecoderNLS.cs
@@ -5,7 +5,6 @@
namespace System.Text
{
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Text;
using System;
using System.Diagnostics.Contracts;
@@ -98,7 +97,7 @@ namespace System.Text
bytes = new byte[1];
// Just call pointer version
- fixed (byte* pBytes = bytes)
+ fixed (byte* pBytes = &bytes[0])
return GetCharCount(pBytes + index, count, flush);
}
@@ -159,8 +158,8 @@ namespace System.Text
chars = new char[1];
// Just call pointer version
- fixed (byte* pBytes = bytes)
- fixed (char* pChars = chars)
+ fixed (byte* pBytes = &bytes[0])
+ fixed (char* pChars = &chars[0])
// Remember that charCount is # to decode, not size of array
return GetChars(pBytes + byteIndex, byteCount,
pChars + charIndex, charCount, flush);
@@ -223,9 +222,9 @@ namespace System.Text
chars = new char[1];
// Just call the pointer version (public overrides can't do this)
- fixed (byte* pBytes = bytes)
+ fixed (byte* pBytes = &bytes[0])
{
- fixed (char* pChars = chars)
+ fixed (char* pChars = &chars[0])
{
Convert(pBytes + byteIndex, byteCount, pChars + charIndex, charCount, flush,
out bytesUsed, out charsUsed, out completed);
diff --git a/src/mscorlib/src/System/Text/EUCJPEncoding.cs b/src/mscorlib/src/System/Text/EUCJPEncoding.cs
deleted file mode 100644
index 44345b22b9..0000000000
--- a/src/mscorlib/src/System/Text/EUCJPEncoding.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#if FEATURE_CODEPAGES_FILE // requires BaseCodePageEncooding
-namespace System.Text
-{
- using System.Text;
- using System.Globalization;
-
- // EUCJPEncoding
- //
- // EUC-JP Encoding (51932)
- //
- // EUC-JP has the following code points:
- // 00-7F - ASCII
- // 80-8D & 90-9F - Control. (Like Unicode, except for 8e and 8f)
- // A1-FE, A1-FE - 2 byte JIS X 0208 range.
- // 8E, A1-DF - 2 byte half-width Katakana
- // 8F, A1-FE, A1-FE - 3 byte JIX X 0212 range. WE DON'T USE JIS 0212!!!
- //
- // New thoughts:
- // Fixing windows 20932 code page so that all characters can be looked up there.
- //
- // Old thoughts:
- // Windows NLS uses a special CP20932 for EUC-JP, but it is not used by mlang. Windows
- // Maps the 3 byte ranges to the 2 byte CP20932 by masking the 2nd byte with & 0x7F.
- // MLang uses the native windows 932 code page, which is more reliable, however the code points
- // don't line up as nicely as the 20932 code page, however it doesn't have JIS X 0212 support.
- //
- // So what we do is:
- // 1. For ASCII, leave it alone
- // 2. For half-width Katakana, use the leading byte and convert with 20936 code page.
- // 3. For JIS X 0208, Use the leading & trailing bytes with 20936 code page
- // 4. For JIS X 0212, Remove the lead byte, & 0xFF7F, and use the CP20936 table to convert.
- //
- // Regarding Normalization:
- // Forms KC & KD are precluded because of things like halfwidth Katakana that has compatibility mappings
- // Form D is precluded because of 0x00a8, which changes to space + dierises.
- //
- // I think that IsAlwaysNormalized should probably return true for form C (but not certain)
- //
- // NOTE: We don't use JIS 0212 so we are basically a DBCS code page, we just have to modify
- // the 932 table we're basing this on.
- //
-
- using System;
-
- [Serializable]
- internal class EUCJPEncoding : DBCSCodePageEncoding
- {
- // This pretends to be CP 932 as far as memory tables are concerned.
- public EUCJPEncoding() : base(51932, 932)
- {
- this.m_bUseMlangTypeForSerialization = true;
- }
-
- protected unsafe override String GetMemorySectionName()
- {
- int iUseCodePage = this.bFlagDataTable ? dataTableCodePage : CodePage;
-
- String strName = String.Format(CultureInfo.InvariantCulture, "CodePage_{0}_{1}_{2}_{3}_{4}_EUCJP",
- iUseCodePage, this.pCodePage->VersionMajor, this.pCodePage->VersionMinor,
- this.pCodePage->VersionRevision, this.pCodePage->VersionBuild);
-
- return strName;
- }
-
- // Clean up characters for EUC-JP code pages, etc.
- protected override bool CleanUpBytes(ref int bytes)
- {
- if (bytes >= 0x100)
- {
- // map extended char (0xfa40-0xfc4b) to a special range
- // (ported from mlang)
- if (bytes >= 0xfa40 && bytes <= 0xfc4b)
- {
- if ( bytes >= 0xfa40 && bytes <= 0xfa5b )
- {
- if ( bytes <= 0xfa49 )
- bytes = bytes - 0x0b51 ;
- else if ( bytes >= 0xfa4a && bytes <= 0xfa53 )
- bytes = bytes - 0x072f6 ;
- else if ( bytes >= 0xfa54 && bytes <= 0xfa57 )
- bytes = bytes - 0x0b5b ;
- else if ( bytes == 0xfa58 )
- bytes = 0x878a ;
- else if ( bytes == 0xfa59 )
- bytes = 0x8782 ;
- else if ( bytes == 0xfa5a )
- bytes = 0x8784 ;
- else if ( bytes == 0xfa5b )
- bytes = 0x879a ;
- }
- else if ( bytes >= 0xfa5c && bytes <= 0xfc4b )
- {
- byte tc = unchecked((byte)bytes);
- if ( tc < 0x5c )
- bytes = bytes - 0x0d5f;
- else if ( tc >= 0x80 && tc <= 0x9B )
- bytes = bytes - 0x0d1d;
- else
- bytes = bytes - 0x0d1c;
- }
- }
-
- // Convert 932 code page to 20932 like code page range
- // (also ported from mlang)
- byte bLead = unchecked((byte)(bytes >> 8));
- byte bTrail = unchecked((byte)bytes);
-
- bLead -= ((bLead > (byte)0x9f) ? (byte)0xb1 : (byte)0x71);
- bLead = (byte)((bLead << 1) + 1);
- if (bTrail > (byte)0x9e)
- {
- bTrail -= (byte)0x7e;
- bLead++;
- }
- else
- {
- if (bTrail > (byte)0x7e)
- bTrail--;
- bTrail -= (byte)0x1f;
- }
-
- bytes = ((int)bLead) << 8 | (int)bTrail | 0x8080;
-
- // // Don't step on our katakana special plane, if katakana space return false.
- // if (bytes >= 0x8E00 && bytes <= 0x8EFF)
- // return false;
-
- // Don't step out of our allocated lead byte area.
- // All DBCS lead and trail bytes should be >= 0xa1 and <= 0xfe
- if ((bytes & 0xFF00) < 0xa100 || (bytes & 0xFF00) > 0xfe00 ||
- (bytes & 0xFF) < 0xa1 || (bytes & 0xFF) > 0xfe)
- return false;
-
- // WARNING: Our funky mapping allows illegal values, which we continue to use
- // so that we're compatible with Everett.
- }
- else
- {
- // For 51932 1/2 Katakana gets a 0x8E lead byte
- // Adjust 1/2 Katakana
- if (bytes >= 0xa1 && bytes <= 0xdf)
- {
- bytes |= 0x8E00;
- return true;
- }
-
- // 0x81-0x9f and 0xe0-0xfc CP 932
- // 0x8e and 0xa1-0xfe CP 20932 (we don't use 8e though)
- // b0-df is 1/2 Katakana
- // So 81-9f & e0-fc are 932 lead bytes, a1-fe are our lead bytes
- // so ignore everything above 0x80 except 0xa0 and 0xff
- if (bytes >= 0x81 && bytes != 0xa0 && bytes != 0xff)
- {
- // We set diffent lead bytes later, so just return false
- return false;
- }
- }
-
- return true;
- }
-
- protected override unsafe void CleanUpEndBytes(char* chars)
- {
- // Need to special case CP 51932
- // 0x81-0x9f and 0xe0-0xfc CP 932
- // 0x8e and 0xa1-0xfe CP 20932
- // 0x10 and 0x21-0x9? Us (remapping 932)
- // b0-df is 1/2 Katakana (trail byte)
-
- // A1-FE are DBCS code points
- for (int i = 0xA1; i <= 0xFE; i++)
- chars[i] = LEAD_BYTE_CHAR;
-
- // And 8E is lead byte for Katakana (already set)
- chars[0x8e] = LEAD_BYTE_CHAR;
- }
- }
-}
-#endif // FEATURE_CODEPAGES_FILE
diff --git a/src/mscorlib/src/System/Text/Encoder.cs b/src/mscorlib/src/System/Text/Encoder.cs
index b9d4581276..f766f98142 100644
--- a/src/mscorlib/src/System/Text/Encoder.cs
+++ b/src/mscorlib/src/System/Text/Encoder.cs
@@ -20,7 +20,6 @@ namespace System.Text
// class are typically obtained through calls to the GetEncoder method
// of Encoding objects.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public abstract class Encoder
{
@@ -39,7 +38,6 @@ namespace System.Text
// We don't call default reset because default reset probably isn't good if we aren't initialized.
}
- [System.Runtime.InteropServices.ComVisible(false)]
public EncoderFallback Fallback
{
get
@@ -65,7 +63,6 @@ namespace System.Text
// Note: we don't test for threading here because async access to Encoders and Decoders
// doesn't work anyway.
- [System.Runtime.InteropServices.ComVisible(false)]
public EncoderFallbackBuffer FallbackBuffer
{
get
@@ -99,7 +96,6 @@ namespace System.Text
//
// Virtual implimentation has to call GetBytes with flush and a big enough buffer to clear a 0 char string
// We avoid GetMaxByteCount() because a) we can't call the base encoder and b) it might be really big.
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual void Reset()
{
char[] charTemp = {};
@@ -122,7 +118,6 @@ namespace System.Text
// unfortunately for existing overrides, it has to call the [] version,
// which is really slow, so avoid this method if you might be calling external encodings.
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe int GetByteCount(char* chars, int count, bool flush)
{
// Validate input parameters
@@ -183,7 +178,6 @@ namespace System.Text
// could easily overflow our output buffer. Therefore we do an extra test
// when we copy the buffer so that we don't overflow byteCount either.
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe int GetBytes(char* chars, int charCount,
byte* bytes, int byteCount, bool flush)
{
@@ -240,7 +234,6 @@ namespace System.Text
// Note that if all of the input chars are not consumed, then we'll do a /2, which means
// that its likely that we didn't consume as many chars as we could have. For some
// applications this could be slow. (Like trying to exactly fill an output buffer from a bigger stream)
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual void Convert(char[] chars, int charIndex, int charCount,
byte[] bytes, int byteIndex, int byteCount, bool flush,
out int charsUsed, out int bytesUsed, out bool completed)
@@ -299,7 +292,6 @@ namespace System.Text
// that its likely that we didn't consume as many chars as we could have. For some
// applications this could be slow. (Like trying to exactly fill an output buffer from a bigger stream)
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe void Convert(char* chars, int charCount,
byte* bytes, int byteCount, bool flush,
out int charsUsed, out int bytesUsed, out bool completed)
diff --git a/src/mscorlib/src/System/Text/EncoderBestFitFallback.cs b/src/mscorlib/src/System/Text/EncoderBestFitFallback.cs
index c5f82a299b..9be095bbd8 100644
--- a/src/mscorlib/src/System/Text/EncoderBestFitFallback.cs
+++ b/src/mscorlib/src/System/Text/EncoderBestFitFallback.cs
@@ -123,7 +123,7 @@ namespace System.Text
0xD800, 0xDBFF));
if (!Char.IsLowSurrogate(charUnknownLow))
- throw new ArgumentOutOfRangeException("CharUnknownLow",
+ throw new ArgumentOutOfRangeException(nameof(charUnknownLow),
Environment.GetResourceString("ArgumentOutOfRange_Range",
0xDC00, 0xDFFF));
Contract.EndContractBlock();
diff --git a/src/mscorlib/src/System/Text/EncoderExceptionFallback.cs b/src/mscorlib/src/System/Text/EncoderExceptionFallback.cs
index 051f50ac7c..6735e7a5f8 100644
--- a/src/mscorlib/src/System/Text/EncoderExceptionFallback.cs
+++ b/src/mscorlib/src/System/Text/EncoderExceptionFallback.cs
@@ -68,7 +68,7 @@ namespace System.Text
}
if (!Char.IsLowSurrogate(charUnknownLow))
{
- throw new ArgumentOutOfRangeException("CharUnknownLow",
+ throw new ArgumentOutOfRangeException(nameof(charUnknownLow),
Environment.GetResourceString("ArgumentOutOfRange_Range",
0xDC00, 0xDFFF));
}
diff --git a/src/mscorlib/src/System/Text/EncoderNLS.cs b/src/mscorlib/src/System/Text/EncoderNLS.cs
index 2add017d68..95901e01f4 100644
--- a/src/mscorlib/src/System/Text/EncoderNLS.cs
+++ b/src/mscorlib/src/System/Text/EncoderNLS.cs
@@ -5,7 +5,6 @@
namespace System.Text
{
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Text;
using System;
using System.Diagnostics.Contracts;
@@ -98,7 +97,7 @@ namespace System.Text
// Just call the pointer version
int result = -1;
- fixed (char* pChars = chars)
+ fixed (char* pChars = &chars[0])
{
result = GetByteCount(pChars + index, count, flush);
}
@@ -151,8 +150,8 @@ namespace System.Text
bytes = new byte[1];
// Just call pointer version
- fixed (char* pChars = chars)
- fixed (byte* pBytes = bytes)
+ fixed (char* pChars = &chars[0])
+ fixed (byte* pBytes = &bytes[0])
// Remember that charCount is # to decode, not size of array.
return GetBytes(pChars + charIndex, charCount,
@@ -212,9 +211,9 @@ namespace System.Text
bytes = new byte[1];
// Just call the pointer version (can't do this for non-msft encoders)
- fixed (char* pChars = chars)
+ fixed (char* pChars = &chars[0])
{
- fixed (byte* pBytes = bytes)
+ fixed (byte* pBytes = &bytes[0])
{
Convert(pChars + charIndex, charCount, pBytes + byteIndex, byteCount, flush,
out charsUsed, out bytesUsed, out completed);
diff --git a/src/mscorlib/src/System/Text/EncoderReplacementFallback.cs b/src/mscorlib/src/System/Text/EncoderReplacementFallback.cs
index 604cddf9bb..b0657ff18d 100644
--- a/src/mscorlib/src/System/Text/EncoderReplacementFallback.cs
+++ b/src/mscorlib/src/System/Text/EncoderReplacementFallback.cs
@@ -153,7 +153,7 @@ namespace System.Text
0xD800, 0xDBFF));
if (!Char.IsLowSurrogate(charUnknownLow))
- throw new ArgumentOutOfRangeException("CharUnknownLow",
+ throw new ArgumentOutOfRangeException(nameof(charUnknownLow),
Environment.GetResourceString("ArgumentOutOfRange_Range",
0xDC00, 0xDFFF));
Contract.EndContractBlock();
diff --git a/src/mscorlib/src/System/Text/Encoding.cs b/src/mscorlib/src/System/Text/Encoding.cs
index 658bdbb133..8cb01e41fa 100644
--- a/src/mscorlib/src/System/Text/Encoding.cs
+++ b/src/mscorlib/src/System/Text/Encoding.cs
@@ -12,7 +12,6 @@ namespace System.Text
using System.Runtime.Serialization;
using System.Globalization;
using System.Security;
- using System.Security.Permissions;
using System.Threading;
using System.Text;
using System.Diagnostics;
@@ -83,7 +82,6 @@ namespace System.Text
// generally executes faster.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public abstract class Encoding : ICloneable
{
@@ -372,23 +370,6 @@ namespace System.Text
return dstEncoding.GetBytes(srcEncoding.GetChars(bytes, index, count));
}
-#if FEATURE_CODEPAGES_FILE
- // Private object for locking instead of locking on a public type for SQL reliability work.
- private static Object s_InternalSyncObject;
- private static Object InternalSyncObject {
- get {
- if (s_InternalSyncObject == null) {
- Object o = new Object();
- Interlocked.CompareExchange<Object>(ref s_InternalSyncObject, o, null);
- }
- return s_InternalSyncObject;
- }
- }
-
- // On Desktop, encoding instances that aren't cached in a static field are cached in
- // a hash table by codepage.
- private static volatile Hashtable encodings;
-#endif
public static void RegisterProvider(EncodingProvider provider)
{
@@ -441,45 +422,6 @@ namespace System.Text
"Argument_CodepageNotSupported", codepage), nameof(codepage));
}
-#if FEATURE_CODEPAGES_FILE
- object key = codepage; // Box once
-
- // See if we have a hash table with our encoding in it already.
- if (encodings != null) {
- result = (Encoding)encodings[key];
- }
-
- if (result == null)
- {
- // Don't conflict with ourselves
- lock (InternalSyncObject)
- {
- // Need a new hash table
- // in case another thread beat us to creating the Dictionary
- if (encodings == null) {
- encodings = new Hashtable();
- }
-
- // Double check that we don't have one in the table (in case another thread beat us here)
- if ((result = (Encoding)encodings[key]) != null)
- return result;
-
- if (codepage == CodePageWindows1252)
- {
- result = new SBCSCodePageEncoding(codepage);
- }
- else
- {
- result = GetEncodingCodePage(codepage) ?? GetEncodingRare(codepage);
- }
-
- Debug.Assert(result != null, "result != null");
-
- encodings.Add(key, result);
- }
- }
- return result;
-#else
// Is it a valid code page?
if (EncodingTable.GetCodePageDataItem(codepage) == null)
{
@@ -488,7 +430,6 @@ namespace System.Text
}
return UTF8;
-#endif // FEATURE_CODEPAGES_FILE
}
[Pure]
@@ -510,86 +451,6 @@ namespace System.Text
return fallbackEncoding;
}
-#if FEATURE_CODEPAGES_FILE
- private static Encoding GetEncodingRare(int codepage)
- {
- Debug.Assert(codepage != 0 && codepage != 1200 && codepage != 1201 && codepage != 65001,
- "[Encoding.GetEncodingRare]This code page (" + codepage + ") isn't supported by GetEncodingRare!");
- Encoding result;
- switch (codepage)
- {
- case ISCIIAssemese:
- case ISCIIBengali:
- case ISCIIDevanagari:
- case ISCIIGujarathi:
- case ISCIIKannada:
- case ISCIIMalayalam:
- case ISCIIOriya:
- case ISCIIPanjabi:
- case ISCIITamil:
- case ISCIITelugu:
- result = new ISCIIEncoding(codepage);
- break;
- // GB2312-80 uses same code page for 20936 and mac 10008
- case CodePageMacGB2312:
- // case CodePageGB2312:
- // result = new DBCSCodePageEncoding(codepage, EUCCN);
- result = new DBCSCodePageEncoding(CodePageMacGB2312, CodePageGB2312);
- break;
-
- // Mac Korean 10003 and 20949 are the same
- case CodePageMacKorean:
- result = new DBCSCodePageEncoding(CodePageMacKorean, CodePageDLLKorean);
- break;
- // GB18030 Code Pages
- case GB18030:
- result = new GB18030Encoding();
- break;
- // ISO2022 Code Pages
- case ISOKorean:
- // case ISOSimplifiedCN
- case ChineseHZ:
- case ISO2022JP: // JIS JP, full-width Katakana mode (no half-width Katakana)
- case ISO2022JPESC: // JIS JP, esc sequence to do Katakana.
- case ISO2022JPSISO: // JIS JP with Shift In/ Shift Out Katakana support
- result = new ISO2022Encoding(codepage);
- break;
- // Duplicate EUC-CN (51936) just calls a base code page 936,
- // so does ISOSimplifiedCN (50227), which's gotta be broken
- case DuplicateEUCCN:
- case ISOSimplifiedCN:
- result = new DBCSCodePageEncoding(codepage, EUCCN); // Just maps to 936
- break;
- case EUCJP:
- result = new EUCJPEncoding();
- break;
- case EUCKR:
- result = new DBCSCodePageEncoding(codepage, CodePageDLLKorean); // Maps to 20949
- break;
- case ENC50229:
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_CodePage50229"));
- case ISO_8859_8I:
- result = new SBCSCodePageEncoding(codepage, ISO_8859_8_Visual); // Hebrew maps to a different code page
- break;
- default:
- // Not found, already tried codepage table code pages in GetEncoding()
- throw new NotSupportedException(
- Environment.GetResourceString("NotSupported_NoCodepageData", codepage));
- }
- return result;
- }
-
- private static Encoding GetEncodingCodePage(int CodePage)
- {
- // Single Byte or Double Byte Code Page? (0 if not found)
- int i = BaseCodePageEncoding.GetCodePageByteSize(CodePage);
- if (i == 1) return new SBCSCodePageEncoding(CodePage);
- else if (i == 2) return new DBCSCodePageEncoding(CodePage);
-
- // Return null if we didn't find one.
- return null;
- }
-#endif // FEATURE_CODEPAGES_FILE
// Returns an Encoding object for a given name or a given code page value.
//
[Pure]
@@ -764,7 +625,6 @@ namespace System.Text
// True if and only if the encoding only uses single byte code points. (Ie, ASCII, 1252, etc)
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual bool IsSingleByte
{
get
@@ -774,7 +634,6 @@ namespace System.Text
}
- [System.Runtime.InteropServices.ComVisible(false)]
public EncoderFallback EncoderFallback
{
get
@@ -796,7 +655,6 @@ namespace System.Text
}
- [System.Runtime.InteropServices.ComVisible(false)]
public DecoderFallback DecoderFallback
{
get
@@ -818,7 +676,6 @@ namespace System.Text
}
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual Object Clone()
{
Encoding newEncoding = (Encoding)this.MemberwiseClone();
@@ -829,7 +686,6 @@ namespace System.Text
}
- [System.Runtime.InteropServices.ComVisible(false)]
public bool IsReadOnly
{
get
@@ -918,7 +774,6 @@ namespace System.Text
// a 3rd party encoding.
[Pure]
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe int GetByteCount(char* chars, int count)
{
// Validate input parameters
@@ -1080,7 +935,6 @@ namespace System.Text
// when we copy the buffer so that we don't overflow byteCount either.
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe int GetBytes(char* chars, int charCount,
byte* bytes, int byteCount)
{
@@ -1149,7 +1003,6 @@ namespace System.Text
// ones we need a working (if slow) default implimentation)
[Pure]
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe int GetCharCount(byte* bytes, int count)
{
// Validate input parameters
@@ -1236,7 +1089,6 @@ namespace System.Text
// when we copy the buffer so that we don't overflow charCount either.
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual unsafe int GetChars(byte* bytes, int byteCount,
char* chars, int charCount)
{
@@ -1291,7 +1143,6 @@ namespace System.Text
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public unsafe string GetString(byte* bytes, int byteCount)
{
if (bytes == null)
@@ -1320,18 +1171,12 @@ namespace System.Text
// IsAlwaysNormalized
// Returns true if the encoding is always normalized for the specified encoding form
[Pure]
- [System.Runtime.InteropServices.ComVisible(false)]
public bool IsAlwaysNormalized()
{
-#if !FEATURE_NORM_IDNA_ONLY
return this.IsAlwaysNormalized(NormalizationForm.FormC);
-#else
- return this.IsAlwaysNormalized((NormalizationForm)ExtendedNormalizationForms.FormIdna);
-#endif
}
[Pure]
- [System.Runtime.InteropServices.ComVisible(false)]
public virtual bool IsAlwaysNormalized(NormalizationForm form)
{
// Assume false unless the encoding knows otherwise
@@ -1364,23 +1209,10 @@ namespace System.Text
Encoding enc;
-#if FEATURE_CODEPAGES_FILE
- int codePage = Win32Native.GetACP();
-
- // For US English, we can save some startup working set by not calling
- // GetEncoding(int codePage) since JITting GetEncoding will force us to load
- // all the Encoding classes for ASCII, UTF7 & UTF8, & UnicodeEncoding.
-
- if (codePage == 1252)
- enc = new SBCSCodePageEncoding(codePage);
- else
- enc = GetEncoding(codePage);
-#else // FEATURE_CODEPAGES_FILE
// For silverlight we use UTF8 since ANSI isn't available
enc = UTF8;
-#endif // FEATURE_CODEPAGES_FILE
// This method should only ever return one Encoding instance
return Interlocked.CompareExchange(ref defaultEncoding, enc, null) ?? enc;
@@ -1882,20 +1714,6 @@ namespace System.Text
return AddChar(ch,1);
}
-
- internal unsafe bool AddChar(char ch1, char ch2, int numBytes)
- {
- // Need room for 2 chars
- if (chars >= charEnd - 1)
- {
- // Throw maybe
- bytes-=numBytes; // Didn't encode these bytes
- enc.ThrowCharsOverflow(decoder, bytes <= byteStart); // Throw?
- return false; // No throw, but no store either
- }
- return AddChar(ch1, numBytes) && AddChar(ch2, numBytes);
- }
-
internal unsafe void AdjustBytes(int count)
{
bytes += count;
@@ -1909,12 +1727,6 @@ namespace System.Text
}
}
- // Do we have count more bytes?
- internal unsafe bool EvenMoreData(int count)
- {
- return (bytes <= byteEnd - count);
- }
-
// GetNextByte shouldn't be called unless the caller's already checked more data or even more data,
// but we'll double check just to make sure.
internal unsafe byte GetNextByte()
@@ -1942,24 +1754,6 @@ namespace System.Text
return Fallback(byteBuffer);
}
- internal unsafe bool Fallback(byte byte1, byte byte2)
- {
- // Build our buffer
- byte[] byteBuffer = new byte[] { byte1, byte2 };
-
- // Do the fallback and add the data.
- return Fallback(byteBuffer);
- }
-
- internal unsafe bool Fallback(byte byte1, byte byte2, byte byte3, byte byte4)
- {
- // Build our buffer
- byte[] byteBuffer = new byte[] { byte1, byte2, byte3, byte4 };
-
- // Do the fallback and add the data.
- return Fallback(byteBuffer);
- }
-
internal unsafe bool Fallback(byte[] byteBuffer)
{
// Do the fallback and add the data.
@@ -2067,26 +1861,6 @@ namespace System.Text
return (AddByte(b1, 1 + moreBytesExpected) && AddByte(b2, moreBytesExpected));
}
- internal unsafe bool AddByte(byte b1, byte b2, byte b3)
- {
- return AddByte(b1, b2, b3, (int)0);
- }
-
- internal unsafe bool AddByte(byte b1, byte b2, byte b3, int moreBytesExpected)
- {
- return (AddByte(b1, 2 + moreBytesExpected) &&
- AddByte(b2, 1 + moreBytesExpected) &&
- AddByte(b3, moreBytesExpected));
- }
-
- internal unsafe bool AddByte(byte b1, byte b2, byte b3, byte b4)
- {
- return (AddByte(b1, 3) &&
- AddByte(b2, 2) &&
- AddByte(b3, 1) &&
- AddByte(b4, 0));
- }
-
internal unsafe void MovePrevious(bool bThrow)
{
if (fallbackBuffer.bFallingBack)
@@ -2104,12 +1878,6 @@ namespace System.Text
enc.ThrowBytesOverflow(encoder, bytes == byteStart); // Throw? (and reset fallback if not converting)
}
- internal unsafe bool Fallback(char charFallback)
- {
- // Do the fallback
- return fallbackBuffer.InternalFallback(charFallback, ref chars);
- }
-
internal unsafe bool MoreData
{
get
diff --git a/src/mscorlib/src/System/Text/EncodingForwarder.cs b/src/mscorlib/src/System/Text/EncodingForwarder.cs
index 9a8dd26627..50ccbd9333 100644
--- a/src/mscorlib/src/System/Text/EncodingForwarder.cs
+++ b/src/mscorlib/src/System/Text/EncodingForwarder.cs
@@ -130,7 +130,7 @@ namespace System.Text
if (bytes.Length == 0)
bytes = new byte[1];
- fixed (char* pChars = s) fixed (byte* pBytes = bytes)
+ fixed (char* pChars = s) fixed (byte* pBytes = &bytes[0])
{
return encoding.GetBytes(pChars + charIndex, charCount, pBytes + byteIndex, byteCount, encoder: null);
}
@@ -170,7 +170,7 @@ namespace System.Text
bytes = new byte[1];
// Just call the (internal) pointer version
- fixed (char* pChars = chars) fixed (byte* pBytes = bytes)
+ fixed (char* pChars = chars) fixed (byte* pBytes = &bytes[0])
{
return encoding.GetBytes(pChars + charIndex, charCount, pBytes + byteIndex, byteCount, encoder: null);
}
@@ -266,7 +266,7 @@ namespace System.Text
if (chars.Length == 0)
chars = new char[1];
- fixed (byte* pBytes = bytes) fixed (char* pChars = chars)
+ fixed (byte* pBytes = bytes) fixed (char* pChars = &chars[0])
{
return encoding.GetChars(pBytes + byteIndex, byteCount, pChars + charIndex, charCount, decoder: null);
}
diff --git a/src/mscorlib/src/System/Text/EncodingNLS.cs b/src/mscorlib/src/System/Text/EncodingNLS.cs
index fbddf37e88..cb6ed8a52c 100644
--- a/src/mscorlib/src/System/Text/EncodingNLS.cs
+++ b/src/mscorlib/src/System/Text/EncodingNLS.cs
@@ -15,7 +15,6 @@ namespace System.Text
// This class overrides Encoding with the things we need for our NLS Encodings
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
internal abstract class EncodingNLS : Encoding
{
diff --git a/src/mscorlib/src/System/Text/EncodingProvider.cs b/src/mscorlib/src/System/Text/EncodingProvider.cs
index a7f745a753..734d1ac761 100644
--- a/src/mscorlib/src/System/Text/EncodingProvider.cs
+++ b/src/mscorlib/src/System/Text/EncodingProvider.cs
@@ -8,7 +8,6 @@ namespace System.Text
using System.Collections;
using System.Collections.Generic;
- [System.Runtime.InteropServices.ComVisible(true)]
public abstract class EncodingProvider
{
public EncodingProvider() { }
diff --git a/src/mscorlib/src/System/Text/GB18030Encoding.cs b/src/mscorlib/src/System/Text/GB18030Encoding.cs
deleted file mode 100644
index 8ed52a6ab8..0000000000
--- a/src/mscorlib/src/System/Text/GB18030Encoding.cs
+++ /dev/null
@@ -1,1365 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-
-//
-// Ported to managed code from c_gb18030.c and related gb18030 dll files
-//
-//
-// Abstract:
-//
-// Managed implementation of GB18030-2000 (code page 54936) ported from implimentation in c_g18030.dll
-// This file contains functions to convert GB18030-2000 (code page 54936) into Unicode, and vice versa.
-//
-// Notes:
-// GB18030-2000 (aka GBK2K) is designed to be mostly compatible with GBK (codepage 936),
-// while supports the full range of Unicode code points (BMP + 16 supplementary planes).
-//
-// The structure for GB18030 is:
-// * Single byte:
-// 0x00 ~ 0x7f
-// * Two-byte:
-// 0x81 ~ 0xfe, 0x40 ~ 0x7e (leading byte, trailing byte)
-// 0x81 ~ 0xfe, 0x80 ~ 0xfe (leading byte, trailing byte)
-// * Four-byte:
-// 0x81 ~ 0xfe, 0x30 ~ 0x39, 0x81 ~ 0xfe, 0x30 ~ 0x39.
-// The surrogare pair will be encoded from 0x90, 0x30, 0x81, 0x30
-//
-// The BMP range is fully supported in GB18030 using 1-byte, 2-byte and 4-byte sequences.
-// In valid 4-byte GB18030, there are two gaps that can not be mapped to Unicode characters.
-// 0x84, 0x31, 0xa5, 0x30 (just after the GB18030 bytes for U+FFFF(*)) ~ 0x8f, 0x39, 0xfe, 0x39 (just before the first GB18030 bytes for U+D800,U+DC00)
-// 0xe3, 0x32, 0x9a, 0x36 (just after the GB18030 bytes for U+DBFF U+DFFF(**)) ~ 0xfe, 0x39, 0xfe, 0x39
-//
-//
-// Note1: U+FFFF = 0x84, 0x31, 0xa4, 0x39
-// Note2: U+DBFF U+DFFF = 0xe3, 0x32, 0x9a, 0x35
-//
-// Tables used in GB18030Encoding:
-//
-// Our data is similar to the 936 Code Page, so we start from there to build our tables. We build the
-// normal double byte mapUnicodeToBytes and mapBytesToUnicode tables by applying differences from 936.
-// We also build a map4BytesToUnicode table and a mapUnicodeTo4BytesFlags
-//
-// * mapUnicodeTo4BytesFlags
-// This is an array of bytes, so we have to do a / 8 and << %8 to check the appropriate bit (see Is4Byte())
-// If the bit is set its true.
-//
-// true - If set/true this is a 4 byte code. The value in mapUnicodeToBytes will be the 4 byte offset
-// false - If cleared/false this is a 1 or 2 byte code. The value in mapUnicodeToBytes will be the 2 bytes.
-//
-// * mapUnicodeToBytes
-// Contains either the 2 byte value of double byte GB18030 or the 4 byte offset for 4 byte GB18030,
-// depending on the value of the flag in mapUnicodeTo4BytesFlags
-//
-// * mapBytesToUnicode
-// mapBytesToUnicode maps 2 byte GB 18030 to Unicode like other DBCS code pages.
-//
-// * map4BytesToUnicode
-// map4BytesToUnicode is indexed by the 4 byte offset and contains the unicode value for each 4 byte offset
-//
-//
-// 4 Byte sequences
-// We generally use the offset for the 4 byte sequence, such as:
-//
-// The index value is the offset of the 4-byte GB18030.
-//
-// 4-byte GB18030 Index value
-// ============== ===========
-// 81,30,81,30 0
-// 81,30,81,31 1
-// 81,30,81,32 2
-// ... ...
-//
-// The value of map4BytesToUnicode cotains the Unicode codepoint for the offset of the
-// corresponding 4-byte GB18030.
-//
-// E.g. map4BytesToUnicode[0] = 0x0080. This means that GB18030 0x81, 0x30, 0x81, 0x30 will be converted to Unicode U+0800.
-//
-// 4 Byte Surrogate Sequences
-// Those work similarly to the normal 4 byte sequences, but start at a different offset
-//
-// We don't override IsAlwaysNormalized because GB18030 covers all of the unicode space, so isn't guaranteed to be normal.
-//
-#if FEATURE_CODEPAGES_FILE // requires BaseCodePageEncooding
-namespace System.Text
-{
- using System;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Text;
- using System.Runtime.InteropServices;
- using System.Security;
- using System.Runtime.CompilerServices;
- using System.Runtime.Serialization;
- using System.Runtime.Versioning;
- using System.Security.Permissions;
- using System.Globalization;
-
- /*=================================GB18030Encoding============================
- **
- ** This is used to support GB18030-2000 encoding (code page 54936).
- **
- ==============================================================================*/
-
- [Serializable]
- internal sealed class GB18030Encoding : DBCSCodePageEncoding, ISerializable
- {
- // This is the table of 4 byte conversions.
- private const int GBLast4ByteCode = 0x99FB;
- [NonSerialized]
- unsafe internal char* map4BytesToUnicode = null; // new char[GBLast4ByteCode + 1]; // Need to map all 4 byte sequences to Unicode
- [NonSerialized]
- unsafe internal byte* mapUnicodeTo4BytesFlags = null; // new byte[0x10000 / 8]; // Need 1 bit for each code point to say if its 4 byte or not
-
- private const int GB18030 = 54936;
-
- // First and last character of surrogate range as offset from 4 byte GB18030 GB81308130
- private const int GBSurrogateOffset = 0x2E248; // GB90308130
- private const int GBLastSurrogateOffset = 0x12E247; // GBE3329A35
-
- // We have to load the 936 code page tables, so impersonate 936 as our base
- internal GB18030Encoding() : base(GB18030, 936)
- {
- }
-
- // Constructor called by serialization.
- internal GB18030Encoding(SerializationInfo info, StreamingContext context) :
- base(GB18030, 936)
- {
- // Set up our base, also throws if info was empty
- DeserializeEncoding(info, context);
- Debug.Assert(info!=null, "[GB18030Encoding(Serialization...)] Expected null info to throw");
-
- // Already build our code page, fallbacks & read only, so we're good to go!
- }
-
- // ISerializable implementation
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // Make sure to get the base stuff too This throws if info is null
- SerializeEncoding(info, context);
- Debug.Assert(info!=null, "[GB18030.GetObjectData] Expected null info to throw");
-
- // Everett doesn't need more than the basics
- }
-
- // This loads our base 936 code page and then applys the changes from the tableUnicodeToGBDiffs table.
- // See table comments for table format.
- protected override unsafe void LoadManagedCodePage()
- {
- // Use base code page loading algorithm.
- // We need to use our main CP as our flag.
- this.bFlagDataTable = false;
- this.iExtraBytes = (GBLast4ByteCode + 1) * 2 + 0x10000 / 8;
-
- // Load most of our code page
- base.LoadManagedCodePage();
-
- // Point to our new data sections
- byte *pMemorySection = (byte *) safeMemorySectionHandle.DangerousGetHandle();
- mapUnicodeTo4BytesFlags = pMemorySection + 65536 * 2 * 2;
- map4BytesToUnicode = (char*)(pMemorySection + 65536 * 2 * 2 + 0x10000 / 8);
-
- // Need to check our pointer to see if we're loaded, return if we're built already
- if (*mapCodePageCached == this.CodePage)
- return;
-
- // Once we've done our base LoadManagedCodePage, we'll have to add our fixes
- char unicodeCount = (char)0;
- ushort count4Byte = 0;
- for (int index = 0; index < tableUnicodeToGBDiffs.Length; index++)
- {
- ushort data = tableUnicodeToGBDiffs[index];
-
- // Check high bit
- if ((data & 0x8000) != 0)
- {
- // Make be exact value
- if (data > 0x9000 && data != 0xD1A6)
- {
- // It was an exact value (gb18040[data] = unicode)
- mapBytesToUnicode[data] = unicodeCount;
- mapUnicodeToBytes[unicodeCount] = data;
- unicodeCount++;
- }
- else
- {
- // It was a CP 936 compatible data, that table's already loaded, just increment our pointer
- unicodeCount += unchecked((char)(data & 0x7FFF));
- }
- }
- else
- {
- // It was GB 18030 4 byte data, next <data> characters are 4 byte sequences.
- while (data > 0)
- {
- Debug.Assert(count4Byte <= GBLast4ByteCode,
- "[GB18030Encoding.LoadManagedCodePage] Found too many 4 byte codes in data table.");
-
- // Set the 4 byte -> Unicode value
- map4BytesToUnicode[count4Byte] = unicodeCount;
- // Set the unicode -> 4 bytes value, including flag that its a 4 byte sequence
- mapUnicodeToBytes[unicodeCount] = count4Byte;
- // Set the flag saying its a 4 byte sequence
- mapUnicodeTo4BytesFlags[unicodeCount / 8] |= unchecked((byte)(1 << (unicodeCount % 8)));
- unicodeCount++;
- count4Byte++;
- data--;
- }
-
- }
- }
-
- // unicodeCount should've wrapped back to 0
- Debug.Assert(unicodeCount == 0,
- "[GB18030Encoding.LoadManagedCodePage] Expected unicodeCount to wrap around to 0 as all chars were processed");
-
- // We should've read in GBLast4ByteCode 4 byte sequences
- Debug.Assert(count4Byte == GBLast4ByteCode + 1,
- "[GB18030Encoding.LoadManagedCodePage] Expected 0x99FB to be last 4 byte offset, found 0x" + count4Byte.ToString("X4", CultureInfo.InvariantCulture));
-
- // Need to flag ourselves saying we've built this CP.
- *mapCodePageCached = this.CodePage;
- }
-
- internal override void SetDefaultFallbacks()
- {
- // For GB18030Encoding just use default replacement fallbacks because its only for bad surrogates
- this.encoderFallback = EncoderFallback.ReplacementFallback;
- this.decoderFallback = DecoderFallback.ReplacementFallback;
- }
-
- // Is4Byte
- // Checks the 4 byte table and returns true if this is a 4 byte code.
- // Its a 4 byte code if the flag is set in mapUnicodeTo4BytesFlags
- internal unsafe bool Is4Byte(char charTest)
- {
- // See what kind it is
- byte b4Byte = mapUnicodeTo4BytesFlags[charTest / 8];
- return (b4Byte != 0 && (b4Byte & (1 << (charTest % 8))) != 0);
- }
-
- // GetByteCount
- internal override unsafe int GetByteCount(char* chars, int count, EncoderNLS encoder)
- {
- // Just call GetBytes() with null bytes
- return GetBytes(chars, count, null, 0, encoder);
- }
-
- internal override unsafe int GetBytes(char* chars, int charCount,
- byte* bytes, int byteCount, EncoderNLS encoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- // We'll allow null bytes as a count
-// Debug.Assert(bytes != null, "[GB18030Encoding.GetBytes]bytes is null");
- Debug.Assert(byteCount >= 0, "[GB18030Encoding.GetBytes]byteCount is negative");
- Debug.Assert(chars != null, "[GB18030Encoding.GetBytes]chars is null");
- Debug.Assert(charCount >= 0, "[GB18030Encoding.GetBytes]charCount is negative");
-
- // Assert because we shouldn't be able to have a null encoder.
- Debug.Assert(encoderFallback != null, "[GB18030Encoding.GetBytes]Attempting to use null encoder fallback");
-
- // Get any left over characters
- char charLeftOver = (char)0;
- if (encoder != null)
- charLeftOver = encoder.charLeftOver;
-
- // prepare our helpers
- Encoding.EncodingByteBuffer buffer = new Encoding.EncodingByteBuffer(
- this, encoder, bytes, byteCount, chars, charCount);
-
- // Try again if we were MustFlush
- TryAgain:
-
- // Go ahead and do it, including the fallback.
- while (buffer.MoreData)
- {
- // Get next char
- char ch = buffer.GetNextChar();
-
- // Have to check for charLeftOver
- if (charLeftOver != 0)
- {
- Debug.Assert(Char.IsHighSurrogate(charLeftOver),
- "[GB18030Encoding.GetBytes] leftover character should be high surrogate, not 0x" + ((int)charLeftOver).ToString("X4", CultureInfo.InvariantCulture));
-
- // If our next char isn't a low surrogate, then we need to do fallback.
- if (!Char.IsLowSurrogate(ch))
- {
- // No low surrogate, fallback high surrogate & try this one again
- buffer.MovePrevious(false); // (Ignoring this character, don't thow)
- if (!buffer.Fallback(charLeftOver))
- {
- charLeftOver = (char)0;
- break;
- }
- charLeftOver = (char)0;
- continue;
- }
- else
- {
- // Next is a surrogate, add it as surrogate pair
-
- // Need 4 bytes for surrogates
- // Get our offset
- int offset = ((charLeftOver - 0xd800) << 10) + (ch - 0xdc00);
-
- byte byte4 = (byte)((offset % 0x0a) + 0x30);
- offset /= 0x0a;
- byte byte3 = (byte)((offset % 0x7e) + 0x81);
- offset /= 0x7e;
- byte byte2 = (byte)((offset % 0x0a) + 0x30);
- offset /= 0x0a;
- Debug.Assert(offset < 0x6f,
- "[GB18030Encoding.GetBytes](1) Expected offset < 0x6f, not 0x" + offset.ToString("X2", CultureInfo.InvariantCulture));
-
- charLeftOver = (char)0;
- if (!buffer.AddByte((byte)(offset + 0x90),byte2,byte3,byte4))
- {
- // Didn't work, need to back up for both surrogates (AddByte already backed up one)
- buffer.MovePrevious(false); // (don't throw)
- break;
- }
- }
- charLeftOver = '\0';
- }
- // ASCII's easiest
- else if (ch <= 0x7f)
- {
- // Need a byte
- if (!buffer.AddByte((byte)ch))
- break;
- }
- // See if its a surrogate pair
- else if (Char.IsHighSurrogate(ch))
- {
- // Remember it for next time
- charLeftOver = ch;
- }
- else if (Char.IsLowSurrogate(ch))
- {
- // Low surrogates should've been found already
- if (!buffer.Fallback(ch))
- break;
- }
- else
- {
- // Not surrogate or ASCII, get value
- ushort iBytes = mapUnicodeToBytes[ch];
-
- // See what kind it is
- if (Is4Byte(ch))
- {
- //
- // This Unicode character will be converted to four-byte GB18030.
- //
- // Need 4 bytes
- byte byte4 = (byte)((iBytes % 0x0a) + 0x30);
- iBytes /= 0x0a;
- byte byte3 = (byte)((iBytes % 0x7e) + 0x81);
- iBytes /= 0x7e;
- byte byte2 = (byte)((iBytes % 0x0a) + 0x30);
- iBytes /= 0x0a;
- Debug.Assert(iBytes < 0x7e,
- "[GB18030Encoding.GetBytes]Expected iBytes < 0x7e, not 0x" + iBytes.ToString("X2", CultureInfo.InvariantCulture));
- if (!buffer.AddByte((byte)(iBytes + 0x81), byte2, byte3, byte4))
- break;
- }
- else
- {
- // Its 2 byte, use it
- if (!buffer.AddByte(unchecked((byte)(iBytes >> 8)), unchecked((byte)(iBytes & 0xff))))
- break;
- }
- }
- }
-
- // Do we need to flush our charLeftOver?
- if ((encoder == null || encoder.MustFlush) && (charLeftOver > 0))
- {
- // Fall it back
- buffer.Fallback(charLeftOver);
- charLeftOver = (char)0;
- goto TryAgain;
- }
-
- // Fallback stuck it in encoder if necessary, but we have to clear MustFlash cases
- // (Check bytes != null, don't clear it if we're just counting)
- if (encoder != null)
- {
- // Remember our charLeftOver
- if (bytes != null)
- encoder.charLeftOver = charLeftOver;
-
- encoder.m_charsUsed = buffer.CharsUsed;
- }
-
- // Return our length
- return buffer.Count;
- }
-
- // Helper methods
- internal bool IsGBLeadByte(short ch)
- {
- // return true if we're in the lead byte range
- return ((ch) >= 0x81 && (ch) <= 0xfe);
- }
-
- internal bool IsGBTwoByteTrailing(short ch)
- {
- // Return true if we are in range for the trailing byte of a 2 byte sequence
- return (((ch) >= 0x40 && (ch) <= 0x7e) ||
- ((ch) >= 0x80 && (ch) <= 0xfe));
- }
-
- internal bool IsGBFourByteTrailing(short ch)
- {
- // Return true if we are in range for the trailing byte of a 4 byte sequence
- return ((ch) >= 0x30 && (ch) <= 0x39);
- }
-
- internal int GetFourBytesOffset(short offset1, short offset2, short offset3, short offset4)
- {
- return ((offset1 - 0x81) * 0x0a * 0x7e * 0x0a +
- (offset2 - 0x30) * 0x7e * 0x0a +
- (offset3 - 0x81) * 0x0a +
- offset4 - 0x30);
- }
-
- // This is internal and called by something else,
- internal override unsafe int GetCharCount(byte* bytes, int count, DecoderNLS baseDecoder)
- {
- // Just call GetChars() with null chars to count
- return GetChars(bytes, count, null, 0, baseDecoder);
- }
-
- internal override unsafe int GetChars(byte* bytes, int byteCount,
- char* chars, int charCount, DecoderNLS baseDecoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- // We'll allow null chars as a count
- Debug.Assert(bytes != null, "[GB18030Encoding.GetChars]bytes is null");
- Debug.Assert(byteCount >= 0, "[GB18030Encoding.GetChars]byteCount is negative");
-// Debug.Assert(chars != null, "[GB18030Encoding.GetChars]chars is null");
- Debug.Assert(charCount >= 0, "[GB18030Encoding.GetChars]charCount is negative");
-
- // Fix our decoder
- GB18030Decoder decoder = (GB18030Decoder)baseDecoder;
-
- // Get our info.
- Encoding.EncodingCharBuffer buffer = new Encoding.EncodingCharBuffer(
- this, decoder, chars, charCount, bytes, byteCount);
-
- // Need temp bytes because we can't muss up decoder
- short byte1 = -1;
- short byte2 = -1;
- short byte3 = -1;
- short byte4 = -1;
-
- // See if there was anything to get out of the decoder
- if (decoder != null && decoder.bLeftOver1 != -1)
- {
- // Need temp bytes because we can't muss up decoder
- byte1 = decoder.bLeftOver1;
- byte2 = decoder.bLeftOver2;
- byte3 = decoder.bLeftOver3;
- byte4 = decoder.bLeftOver4;
-
- // Loop because we might have too many in buffer
- // This could happen if we are working on a 4 byte sequence, but it isn't valid.
- while (byte1 != -1)
- {
- // If its not a lead byte, use ? or its value, then scoot them down & try again
- // This could happen if we previously had a bad 4 byte sequence and this is a trail byte
- if (!IsGBLeadByte(byte1))
- {
- // This is either a ? or ASCII, need 1 char output
- if (byte1 <= 0x7f)
- {
- if (!buffer.AddChar((char)byte1)) // Its ASCII
- break;
- }
- else
- {
- if (!buffer.Fallback((byte)byte1)) // Not a valid byte
- break;
- }
-
- byte1 = byte2;
- byte2 = byte3;
- byte3 = byte4;
- byte4 = -1;
- continue;
- }
-
- // Read in more bytes as needed
- while (byte2 == -1 ||
- (IsGBFourByteTrailing(byte2) && byte4 == -1))
- {
- // Do we have room?
- if (!buffer.MoreData)
- {
- // No input left to read, do we have to flush?
- if (!decoder.MustFlush)
- {
- // Don't stick stuff in decoder when counting
- if (chars != null)
- {
- // Don't have to flush, won't have any chars
- // Decoder is correct, just return
- decoder.bLeftOver1 = byte1;
- decoder.bLeftOver2 = byte2;
- decoder.bLeftOver3 = byte3;
- decoder.bLeftOver4 = byte4;
- }
-
- decoder.m_bytesUsed = buffer.BytesUsed;
- return buffer.Count;
- }
-
- // We'll have to flush, add a ? and scoot them down to try again
- // We could be trying for a 4 byte sequence but byte 3 could be ascii and should be spit out
- // Breaking will do this because we have zeros
- break;
- }
-
- // Read them in
- if (byte2 == -1) byte2 = buffer.GetNextByte();
- else if (byte3 == -1) byte3 = buffer.GetNextByte();
- else byte4 = buffer.GetNextByte();
- }
-
- // Now we have our 2 or 4 bytes
- if (IsGBTwoByteTrailing(byte2))
- {
- //
- // The trailing byte is a GB18030 two-byte sequence trailing byte.
- //
- int iTwoBytes = byte1 << 8;
- iTwoBytes |= unchecked((byte)byte2);
- if (!buffer.AddChar(this.mapBytesToUnicode[iTwoBytes], 2))
- break;
-
- // We're done with it
- byte1 = -1;
- byte2 = -1;
- }
- else if (IsGBFourByteTrailing(byte2) &&
- IsGBLeadByte(byte3) &&
- IsGBFourByteTrailing(byte4))
- {
- //
- // Four-byte GB18030
- //
-
- int sFourBytesOffset = GetFourBytesOffset(
- byte1, byte2, byte3, byte4);
-
- // What kind is it?
- if (sFourBytesOffset <= GBLast4ByteCode)
- {
- //
- // The Unicode will be in the BMP range.
- //
- if (!buffer.AddChar(map4BytesToUnicode[sFourBytesOffset], 4))
- break;
- }
- else if (sFourBytesOffset >= GBSurrogateOffset &&
- sFourBytesOffset <= GBLastSurrogateOffset)
- {
- //
- // This will be converted to a surrogate pair, need another char
- //
-
- // Use our surrogate
- sFourBytesOffset -= GBSurrogateOffset;
- if (!buffer.AddChar(unchecked((char)(0xd800 + (sFourBytesOffset / 0x400))),
- unchecked((char)(0xdc00 + (sFourBytesOffset % 0x400))), 4))
- break;
- }
- else
- {
- // Real GB18030 codepoint, but can't be mapped to unicode
- // We already checked our buffer space.
- // Do fallback here if we impliment decoderfallbacks.
- if (!buffer.Fallback((byte)byte1, (byte)byte2, (byte)byte3, (byte)byte4))
- break;
- }
-
- // We're done with this one
- byte1 = -1;
- byte2 = -1;
- byte3 = -1;
- byte4 = -1;
- }
- else
- {
- // Not a valid sequence, use '?' for 1st byte & scoot them all down 1
- if (!buffer.Fallback((byte)byte1))
- break;
-
- // Move all bytes down 1
- byte1 = byte2;
- byte2 = byte3;
- byte3 = byte4;
- byte4 = -1;
- }
- }
- }
-
- // Loop, just do '?' replacement because we don't have fallbacks for decodings.
- while (buffer.MoreData)
- {
- byte ch = buffer.GetNextByte();
-
- // ASCII case is easy
- if (ch <= 0x7f)
- {
- // ASCII, have room?
- if (!buffer.AddChar((char)ch))
- break; // No room in convert buffer, so stop
- }
- // See if its a lead byte
- else if (IsGBLeadByte(ch))
- {
- // ch is a lead byte, have room for more?
- if (buffer.MoreData)
- {
- byte ch2 = buffer.GetNextByte();
- if (IsGBTwoByteTrailing(ch2))
- {
- //
- // The trailing byte is a GB18030 two-byte sequence trailing byte.
- //
-
- //
- // Two-byte GB18030
- //
- int iTwoBytes = ch << 8;
- iTwoBytes |= ch2;
- if (!buffer.AddChar(this.mapBytesToUnicode[iTwoBytes], 2))
- break;
- }
- else if (IsGBFourByteTrailing(ch2))
- {
- // Do we have room for Four Byte Sequence? (already have 1 byte)
- if (buffer.EvenMoreData(2))
- {
- // Is it a valid 4 byte sequence?
- byte ch3 = buffer.GetNextByte();
- byte ch4 = buffer.GetNextByte();
- if (IsGBLeadByte(ch3) &&
- IsGBFourByteTrailing(ch4))
- {
- //
- // Four-byte GB18030
- //
- int sFourBytesOffset = GetFourBytesOffset(ch, ch2, ch3, ch4);
-
- // What kind is it?
- // We'll be at least 1 BMP char or a '?' char.
-
- if (sFourBytesOffset <= GBLast4ByteCode)
- {
- //
- // The Unicode will be in the BMP range.
- //
- if (!buffer.AddChar(map4BytesToUnicode[sFourBytesOffset],4))
- break;
- }
- else if (sFourBytesOffset >= GBSurrogateOffset &&
- sFourBytesOffset <= GBLastSurrogateOffset)
- {
- //
- // This will be converted to a surrogate pair, need another char
- //
-
- // Use our surrogate
- sFourBytesOffset -= GBSurrogateOffset;
- if (!buffer.AddChar(unchecked((char)(0xd800 + (sFourBytesOffset / 0x400))),
- unchecked((char)(0xdc00 + (sFourBytesOffset % 0x400))),4))
- break;
- }
- else
- {
- // Real GB18030 codepoint, but can't be mapped to unicode
- if (!buffer.Fallback(ch, ch2, ch3, ch4))
- break;
- }
- }
- else
- {
- // Not a valid 2 or 4 byte sequence, use '?' for ch and try other 3 again
- buffer.AdjustBytes(-3);
- if (!buffer.Fallback(ch))
- break;
- }
- }
- else
- {
- // No room for 4 bytes, have 2 already, may be one more
- // Lead byte but no place to stick it
- if (decoder != null && !decoder.MustFlush)
- {
- // (make sure not to set decoder if counting, so check chars)
- if (chars != null)
- {
- // We'll be able to stick the remainder in the decoder
- byte1 = ch;
- byte2 = ch2;
-
- if (buffer.MoreData)
- byte3 = buffer.GetNextByte();
- else
- byte3 = -1;
-
- byte4=-1;
- }
- break;
- }
-
- // Won't go in decoder, we'll use '?' for it.
- if (!buffer.Fallback(ch, ch2))
- break;
- }
- }
- else
- {
- // Unknown byte sequence, fall back lead byte and try 2nd one again
- buffer.AdjustBytes(-1);
- if (!buffer.Fallback(ch))
- break;
- }
- }
- else
- {
- // Lead byte but don't know about trail byte
- // (make sure not to set decoder if counting, so check bytes)
- if (decoder != null && !decoder.MustFlush)
- {
- // We'll be able to stick it in the decoder
- // (don't actually do it when counting though)
- if (chars != null)
- {
- byte1 = ch;
- byte2 = -1;
- byte3 = -1;
- byte4 = -1;
- }
- break;
- }
-
- if (!buffer.Fallback(ch))
- break;
- }
- }
- else
- {
- // Not ASCII and not a lead byte, we'll use '?' for it if we have room
- if (!buffer.Fallback(ch))
- break;
- }
- }
-
- // Need to flush the decoder if necessary
- // (make sure not to set decoder if counting, so check bytes)
- if (decoder != null)
- {
- if (chars != null)
- {
- decoder.bLeftOver1 = byte1;
- decoder.bLeftOver2 = byte2;
- decoder.bLeftOver3 = byte3;
- decoder.bLeftOver4 = byte4;
- }
- decoder.m_bytesUsed = buffer.BytesUsed;
- }
-
- // Return the # of characters we found
- return buffer.Count;
- }
-
- public override int GetMaxByteCount(int charCount)
- {
- if (charCount < 0)
- throw new ArgumentOutOfRangeException(nameof(charCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- // Characters would be # of characters + 1 in case high surrogate is ? * max fallback
- long byteCount = (long)charCount + 1;
-
- if (EncoderFallback.MaxCharCount > 1)
- byteCount *= EncoderFallback.MaxCharCount;
-
- // We could have 4 bytes for each char, no extra for surrogates because 18030 can do whole unicode range.
- byteCount *= 4;
-
- if (byteCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(charCount), Environment.GetResourceString("ArgumentOutOfRange_GetByteCountOverflow"));
-
- return (int)byteCount;
- }
-
- public override int GetMaxCharCount(int byteCount)
- {
- if (byteCount < 0)
- throw new ArgumentOutOfRangeException(nameof(byteCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- // Just return length, we could have a single char for each byte + whatever extra our decoder could do to us.
- // If decoder is messed up it could spit out 3 ?s.
- long charCount = ((long)byteCount) + 3;
-
- // Take fallback size into consideration
- if (DecoderFallback.MaxCharCount > 1)
- charCount *= DecoderFallback.MaxCharCount;
-
- if (charCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(byteCount), Environment.GetResourceString("ArgumentOutOfRange_GetCharCountOverflow"));
-
- return (int)charCount;
- }
-
- public override Decoder GetDecoder()
- {
- return new GB18030Decoder(this);
- }
-
- [Serializable]
- internal sealed class GB18030Decoder : System.Text.DecoderNLS, ISerializable
- {
- internal short bLeftOver1 = -1;
- internal short bLeftOver2 = -1;
- internal short bLeftOver3 = -1;
- internal short bLeftOver4 = -1;
-
- internal GB18030Decoder(EncodingNLS encoding) : base(encoding)
- {
- // DecoderNLS Calls reset
- }
-
- // Constructor called by serialization, have to handle deserializing from Everett
- internal GB18030Decoder(SerializationInfo info, StreamingContext context)
- {
- // Any info?
- if (info==null) throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- try
- {
- //
- // Try Whidbey V2.0 Fields
- //
- this.m_encoding = (Encoding)info.GetValue("m_encoding", typeof(Encoding));
- this.m_fallback = (DecoderFallback)info.GetValue("m_fallback", typeof(DecoderFallback));
- this.bLeftOver1 = (short)info.GetValue("bLeftOver1", typeof(short));
- this.bLeftOver2 = (short)info.GetValue("bLeftOver2", typeof(short));
- this.bLeftOver3 = (short)info.GetValue("bLeftOver3", typeof(short));
- this.bLeftOver4 = (short)info.GetValue("bLeftOver4", typeof(short));
- }
- catch (SerializationException)
- {
- // Didn't have Whidbey stuff, try Everett (DecoderNLS already called Reset())
- this.m_encoding = new GB18030Encoding();
- }
- }
-
- // ISerializable implementation, get data for this object
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // Any info?
- if (info==null) throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- // Save Whidbey data
- // Just need Everett maxCharSize (BaseCodePageEncoding) or m_maxByteSize (MLangBaseCodePageEncoding)
- info.AddValue("m_encoding", this.m_encoding);
- info.AddValue("m_fallback", this.m_fallback);
- info.AddValue("bLeftOver1", this.bLeftOver1);
- info.AddValue("bLeftOver2", this.bLeftOver2);
- info.AddValue("bLeftOver3", this.bLeftOver3);
- info.AddValue("bLeftOver4", this.bLeftOver4);
-
- // Everett needs different data (this is just empty for Everett)
- info.AddValue("m_leftOverBytes", (int)0);
- info.AddValue("leftOver", new byte[8]);
- }
-
- public override void Reset()
- {
- bLeftOver1 = -1;
- bLeftOver2 = -1;
- bLeftOver3 = -1;
- bLeftOver4 = -1;
- if (m_fallbackBuffer != null)
- m_fallbackBuffer.Reset();
- }
-
- // Anything left in our decoder?
- internal override bool HasState
- {
- get
- {
- return (this.bLeftOver1 >= 0);
- }
- }
- }
-
- // tableUnicodeToGBDiffs
- //
- // This compressed data enumerates the differences between gb18030 and the 936 code page as follows:
- //
- // <count> & 0x8000 == 0x8000 The next count <count> characters are identical to 936 characters.
- // <count> & 0x8000 == 0x0000 The next count <count> characters are 4 byte gb18030 characters.
- // Except for:
- // <count> >= 0x9000 && <count> != 0xD1A6 This character is this 2 byte GB18030 value.
- //
- readonly ushort[] tableUnicodeToGBDiffs =
- {
- 0x8080, // U+0000 - U+007F ( 128 chars) use CP 936 conversion.
- 0x0024, // U+0080 - U+00A3 ( 36 chars) are GB18030 81 30 81 30 - 81 30 84 35 (offset 0000 - 0023)
- 0x8001, // U+00A4 - U+00A4 ( 1 chars) use CP 936 conversion.
- 0x0002, // U+00A5 - U+00A6 ( 2 chars) are GB18030 81 30 84 36 - 81 30 84 37 (offset 0024 - 0025)
- 0x8002, // U+00A7 - U+00A8 ( 2 chars) use CP 936 conversion.
- 0x0007, // U+00A9 - U+00AF ( 7 chars) are GB18030 81 30 84 38 - 81 30 85 34 (offset 0026 - 002C)
- 0x8002, // U+00B0 - U+00B1 ( 2 chars) use CP 936 conversion.
- 0x0005, // U+00B2 - U+00B6 ( 5 chars) are GB18030 81 30 85 35 - 81 30 85 39 (offset 002D - 0031)
- 0x8001, // U+00B7 - U+00B7 ( 1 chars) use CP 936 conversion.
- 0x001F, // U+00B8 - U+00D6 ( 31 chars) are GB18030 81 30 86 30 - 81 30 89 30 (offset 0032 - 0050)
- 0x8001, // U+00D7 - U+00D7 ( 1 chars) use CP 936 conversion.
- 0x0008, // U+00D8 - U+00DF ( 8 chars) are GB18030 81 30 89 31 - 81 30 89 38 (offset 0051 - 0058)
- 0x8002, // U+00E0 - U+00E1 ( 2 chars) use CP 936 conversion.
- 0x0006, // U+00E2 - U+00E7 ( 6 chars) are GB18030 81 30 89 39 - 81 30 8A 34 (offset 0059 - 005E)
- 0x8003, // U+00E8 - U+00EA ( 3 chars) use CP 936 conversion.
- 0x0001, // U+00EB - U+00EB ( 1 chars) are GB18030 81 30 8A 35 - 81 30 8A 35 (offset 005F - 005F)
- 0x8002, // U+00EC - U+00ED ( 2 chars) use CP 936 conversion.
- 0x0004, // U+00EE - U+00F1 ( 4 chars) are GB18030 81 30 8A 36 - 81 30 8A 39 (offset 0060 - 0063)
- 0x8002, // U+00F2 - U+00F3 ( 2 chars) use CP 936 conversion.
- 0x0003, // U+00F4 - U+00F6 ( 3 chars) are GB18030 81 30 8B 30 - 81 30 8B 32 (offset 0064 - 0066)
- 0x8001, // U+00F7 - U+00F7 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+00F8 - U+00F8 ( 1 chars) are GB18030 81 30 8B 33 - 81 30 8B 33 (offset 0067 - 0067)
- 0x8002, // U+00F9 - U+00FA ( 2 chars) use CP 936 conversion.
- 0x0001, // U+00FB - U+00FB ( 1 chars) are GB18030 81 30 8B 34 - 81 30 8B 34 (offset 0068 - 0068)
- 0x8001, // U+00FC - U+00FC ( 1 chars) use CP 936 conversion.
- 0x0004, // U+00FD - U+0100 ( 4 chars) are GB18030 81 30 8B 35 - 81 30 8B 38 (offset 0069 - 006C)
- 0x8001, // U+0101 - U+0101 ( 1 chars) use CP 936 conversion.
- 0x0011, // U+0102 - U+0112 ( 17 chars) are GB18030 81 30 8B 39 - 81 30 8D 35 (offset 006D - 007D)
- 0x8001, // U+0113 - U+0113 ( 1 chars) use CP 936 conversion.
- 0x0007, // U+0114 - U+011A ( 7 chars) are GB18030 81 30 8D 36 - 81 30 8E 32 (offset 007E - 0084)
- 0x8001, // U+011B - U+011B ( 1 chars) use CP 936 conversion.
- 0x000F, // U+011C - U+012A ( 15 chars) are GB18030 81 30 8E 33 - 81 30 8F 37 (offset 0085 - 0093)
- 0x8001, // U+012B - U+012B ( 1 chars) use CP 936 conversion.
- 0x0018, // U+012C - U+0143 ( 24 chars) are GB18030 81 30 8F 38 - 81 30 92 31 (offset 0094 - 00AB)
- 0x8001, // U+0144 - U+0144 ( 1 chars) use CP 936 conversion.
- 0x0003, // U+0145 - U+0147 ( 3 chars) are GB18030 81 30 92 32 - 81 30 92 34 (offset 00AC - 00AE)
- 0x8001, // U+0148 - U+0148 ( 1 chars) use CP 936 conversion.
- 0x0004, // U+0149 - U+014C ( 4 chars) are GB18030 81 30 92 35 - 81 30 92 38 (offset 00AF - 00B2)
- 0x8001, // U+014D - U+014D ( 1 chars) use CP 936 conversion.
- 0x001D, // U+014E - U+016A ( 29 chars) are GB18030 81 30 92 39 - 81 30 95 37 (offset 00B3 - 00CF)
- 0x8001, // U+016B - U+016B ( 1 chars) use CP 936 conversion.
- 0x0062, // U+016C - U+01CD ( 98 chars) are GB18030 81 30 95 38 - 81 30 9F 35 (offset 00D0 - 0131)
- 0x8001, // U+01CE - U+01CE ( 1 chars) use CP 936 conversion.
- 0x0001, // U+01CF - U+01CF ( 1 chars) are GB18030 81 30 9F 36 - 81 30 9F 36 (offset 0132 - 0132)
- 0x8001, // U+01D0 - U+01D0 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+01D1 - U+01D1 ( 1 chars) are GB18030 81 30 9F 37 - 81 30 9F 37 (offset 0133 - 0133)
- 0x8001, // U+01D2 - U+01D2 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+01D3 - U+01D3 ( 1 chars) are GB18030 81 30 9F 38 - 81 30 9F 38 (offset 0134 - 0134)
- 0x8001, // U+01D4 - U+01D4 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+01D5 - U+01D5 ( 1 chars) are GB18030 81 30 9F 39 - 81 30 9F 39 (offset 0135 - 0135)
- 0x8001, // U+01D6 - U+01D6 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+01D7 - U+01D7 ( 1 chars) are GB18030 81 30 A0 30 - 81 30 A0 30 (offset 0136 - 0136)
- 0x8001, // U+01D8 - U+01D8 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+01D9 - U+01D9 ( 1 chars) are GB18030 81 30 A0 31 - 81 30 A0 31 (offset 0137 - 0137)
- 0x8001, // U+01DA - U+01DA ( 1 chars) use CP 936 conversion.
- 0x0001, // U+01DB - U+01DB ( 1 chars) are GB18030 81 30 A0 32 - 81 30 A0 32 (offset 0138 - 0138)
- 0x8001, // U+01DC - U+01DC ( 1 chars) use CP 936 conversion.
- 0x001C, // U+01DD - U+01F8 ( 28 chars) are GB18030 81 30 A0 33 - 81 30 A3 30 (offset 0139 - 0154)
- 0xA8BF, // U+01F9 is non-936 GB18030 value A8 BF.
- 0x0057, // U+01FA - U+0250 ( 87 chars) are GB18030 81 30 A3 31 - 81 30 AB 37 (offset 0155 - 01AB)
- 0x8001, // U+0251 - U+0251 ( 1 chars) use CP 936 conversion.
- 0x000F, // U+0252 - U+0260 ( 15 chars) are GB18030 81 30 AB 38 - 81 30 AD 32 (offset 01AC - 01BA)
- 0x8001, // U+0261 - U+0261 ( 1 chars) use CP 936 conversion.
- 0x0065, // U+0262 - U+02C6 ( 101 chars) are GB18030 81 30 AD 33 - 81 30 B7 33 (offset 01BB - 021F)
- 0x8001, // U+02C7 - U+02C7 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+02C8 - U+02C8 ( 1 chars) are GB18030 81 30 B7 34 - 81 30 B7 34 (offset 0220 - 0220)
- 0x8003, // U+02C9 - U+02CB ( 3 chars) use CP 936 conversion.
- 0x000D, // U+02CC - U+02D8 ( 13 chars) are GB18030 81 30 B7 35 - 81 30 B8 37 (offset 0221 - 022D)
- 0x8001, // U+02D9 - U+02D9 ( 1 chars) use CP 936 conversion.
- 0x00B7, // U+02DA - U+0390 ( 183 chars) are GB18030 81 30 B8 38 - 81 30 CB 30 (offset 022E - 02E4)
- 0x8011, // U+0391 - U+03A1 ( 17 chars) use CP 936 conversion.
- 0x0001, // U+03A2 - U+03A2 ( 1 chars) are GB18030 81 30 CB 31 - 81 30 CB 31 (offset 02E5 - 02E5)
- 0x8007, // U+03A3 - U+03A9 ( 7 chars) use CP 936 conversion.
- 0x0007, // U+03AA - U+03B0 ( 7 chars) are GB18030 81 30 CB 32 - 81 30 CB 38 (offset 02E6 - 02EC)
- 0x8011, // U+03B1 - U+03C1 ( 17 chars) use CP 936 conversion.
- 0x0001, // U+03C2 - U+03C2 ( 1 chars) are GB18030 81 30 CB 39 - 81 30 CB 39 (offset 02ED - 02ED)
- 0x8007, // U+03C3 - U+03C9 ( 7 chars) use CP 936 conversion.
- 0x0037, // U+03CA - U+0400 ( 55 chars) are GB18030 81 30 CC 30 - 81 30 D1 34 (offset 02EE - 0324)
- 0x8001, // U+0401 - U+0401 ( 1 chars) use CP 936 conversion.
- 0x000E, // U+0402 - U+040F ( 14 chars) are GB18030 81 30 D1 35 - 81 30 D2 38 (offset 0325 - 0332)
- 0x8040, // U+0410 - U+044F ( 64 chars) use CP 936 conversion.
- 0x0001, // U+0450 - U+0450 ( 1 chars) are GB18030 81 30 D2 39 - 81 30 D2 39 (offset 0333 - 0333)
- 0x8001, // U+0451 - U+0451 ( 1 chars) use CP 936 conversion.
- 0x1BBE, // U+0452 - U+200F ( 7102 chars) are GB18030 81 30 D3 30 - 81 36 A5 31 (offset 0334 - 1EF1)
- 0x8001, // U+2010 - U+2010 ( 1 chars) use CP 936 conversion.
- 0x0002, // U+2011 - U+2012 ( 2 chars) are GB18030 81 36 A5 32 - 81 36 A5 33 (offset 1EF2 - 1EF3)
- 0x8004, // U+2013 - U+2016 ( 4 chars) use CP 936 conversion.
- 0x0001, // U+2017 - U+2017 ( 1 chars) are GB18030 81 36 A5 34 - 81 36 A5 34 (offset 1EF4 - 1EF4)
- 0x8002, // U+2018 - U+2019 ( 2 chars) use CP 936 conversion.
- 0x0002, // U+201A - U+201B ( 2 chars) are GB18030 81 36 A5 35 - 81 36 A5 36 (offset 1EF5 - 1EF6)
- 0x8002, // U+201C - U+201D ( 2 chars) use CP 936 conversion.
- 0x0007, // U+201E - U+2024 ( 7 chars) are GB18030 81 36 A5 37 - 81 36 A6 33 (offset 1EF7 - 1EFD)
- 0x8002, // U+2025 - U+2026 ( 2 chars) use CP 936 conversion.
- 0x0009, // U+2027 - U+202F ( 9 chars) are GB18030 81 36 A6 34 - 81 36 A7 32 (offset 1EFE - 1F06)
- 0x8001, // U+2030 - U+2030 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+2031 - U+2031 ( 1 chars) are GB18030 81 36 A7 33 - 81 36 A7 33 (offset 1F07 - 1F07)
- 0x8002, // U+2032 - U+2033 ( 2 chars) use CP 936 conversion.
- 0x0001, // U+2034 - U+2034 ( 1 chars) are GB18030 81 36 A7 34 - 81 36 A7 34 (offset 1F08 - 1F08)
- 0x8001, // U+2035 - U+2035 ( 1 chars) use CP 936 conversion.
- 0x0005, // U+2036 - U+203A ( 5 chars) are GB18030 81 36 A7 35 - 81 36 A7 39 (offset 1F09 - 1F0D)
- 0x8001, // U+203B - U+203B ( 1 chars) use CP 936 conversion.
- 0x0070, // U+203C - U+20AB ( 112 chars) are GB18030 81 36 A8 30 - 81 36 B3 31 (offset 1F0E - 1F7D)
- 0xA2E3, // U+20AC is non-936 GB18030 value A2 E3.
- 0x0056, // U+20AD - U+2102 ( 86 chars) are GB18030 81 36 B3 32 - 81 36 BB 37 (offset 1F7E - 1FD3)
- 0x8001, // U+2103 - U+2103 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+2104 - U+2104 ( 1 chars) are GB18030 81 36 BB 38 - 81 36 BB 38 (offset 1FD4 - 1FD4)
- 0x8001, // U+2105 - U+2105 ( 1 chars) use CP 936 conversion.
- 0x0003, // U+2106 - U+2108 ( 3 chars) are GB18030 81 36 BB 39 - 81 36 BC 31 (offset 1FD5 - 1FD7)
- 0x8001, // U+2109 - U+2109 ( 1 chars) use CP 936 conversion.
- 0x000C, // U+210A - U+2115 ( 12 chars) are GB18030 81 36 BC 32 - 81 36 BD 33 (offset 1FD8 - 1FE3)
- 0x8001, // U+2116 - U+2116 ( 1 chars) use CP 936 conversion.
- 0x000A, // U+2117 - U+2120 ( 10 chars) are GB18030 81 36 BD 34 - 81 36 BE 33 (offset 1FE4 - 1FED)
- 0x8001, // U+2121 - U+2121 ( 1 chars) use CP 936 conversion.
- 0x003E, // U+2122 - U+215F ( 62 chars) are GB18030 81 36 BE 34 - 81 36 C4 35 (offset 1FEE - 202B)
- 0x800C, // U+2160 - U+216B ( 12 chars) use CP 936 conversion.
- 0x0004, // U+216C - U+216F ( 4 chars) are GB18030 81 36 C4 36 - 81 36 C4 39 (offset 202C - 202F)
- 0x800A, // U+2170 - U+2179 ( 10 chars) use CP 936 conversion.
- 0x0016, // U+217A - U+218F ( 22 chars) are GB18030 81 36 C5 30 - 81 36 C7 31 (offset 2030 - 2045)
- 0x8004, // U+2190 - U+2193 ( 4 chars) use CP 936 conversion.
- 0x0002, // U+2194 - U+2195 ( 2 chars) are GB18030 81 36 C7 32 - 81 36 C7 33 (offset 2046 - 2047)
- 0x8004, // U+2196 - U+2199 ( 4 chars) use CP 936 conversion.
- 0x006E, // U+219A - U+2207 ( 110 chars) are GB18030 81 36 C7 34 - 81 36 D2 33 (offset 2048 - 20B5)
- 0x8001, // U+2208 - U+2208 ( 1 chars) use CP 936 conversion.
- 0x0006, // U+2209 - U+220E ( 6 chars) are GB18030 81 36 D2 34 - 81 36 D2 39 (offset 20B6 - 20BB)
- 0x8001, // U+220F - U+220F ( 1 chars) use CP 936 conversion.
- 0x0001, // U+2210 - U+2210 ( 1 chars) are GB18030 81 36 D3 30 - 81 36 D3 30 (offset 20BC - 20BC)
- 0x8001, // U+2211 - U+2211 ( 1 chars) use CP 936 conversion.
- 0x0003, // U+2212 - U+2214 ( 3 chars) are GB18030 81 36 D3 31 - 81 36 D3 33 (offset 20BD - 20BF)
- 0x8001, // U+2215 - U+2215 ( 1 chars) use CP 936 conversion.
- 0x0004, // U+2216 - U+2219 ( 4 chars) are GB18030 81 36 D3 34 - 81 36 D3 37 (offset 20C0 - 20C3)
- 0x8001, // U+221A - U+221A ( 1 chars) use CP 936 conversion.
- 0x0002, // U+221B - U+221C ( 2 chars) are GB18030 81 36 D3 38 - 81 36 D3 39 (offset 20C4 - 20C5)
- 0x8004, // U+221D - U+2220 ( 4 chars) use CP 936 conversion.
- 0x0002, // U+2221 - U+2222 ( 2 chars) are GB18030 81 36 D4 30 - 81 36 D4 31 (offset 20C6 - 20C7)
- 0x8001, // U+2223 - U+2223 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+2224 - U+2224 ( 1 chars) are GB18030 81 36 D4 32 - 81 36 D4 32 (offset 20C8 - 20C8)
- 0x8001, // U+2225 - U+2225 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+2226 - U+2226 ( 1 chars) are GB18030 81 36 D4 33 - 81 36 D4 33 (offset 20C9 - 20C9)
- 0x8005, // U+2227 - U+222B ( 5 chars) use CP 936 conversion.
- 0x0002, // U+222C - U+222D ( 2 chars) are GB18030 81 36 D4 34 - 81 36 D4 35 (offset 20CA - 20CB)
- 0x8001, // U+222E - U+222E ( 1 chars) use CP 936 conversion.
- 0x0005, // U+222F - U+2233 ( 5 chars) are GB18030 81 36 D4 36 - 81 36 D5 30 (offset 20CC - 20D0)
- 0x8004, // U+2234 - U+2237 ( 4 chars) use CP 936 conversion.
- 0x0005, // U+2238 - U+223C ( 5 chars) are GB18030 81 36 D5 31 - 81 36 D5 35 (offset 20D1 - 20D5)
- 0x8001, // U+223D - U+223D ( 1 chars) use CP 936 conversion.
- 0x000A, // U+223E - U+2247 ( 10 chars) are GB18030 81 36 D5 36 - 81 36 D6 35 (offset 20D6 - 20DF)
- 0x8001, // U+2248 - U+2248 ( 1 chars) use CP 936 conversion.
- 0x0003, // U+2249 - U+224B ( 3 chars) are GB18030 81 36 D6 36 - 81 36 D6 38 (offset 20E0 - 20E2)
- 0x8001, // U+224C - U+224C ( 1 chars) use CP 936 conversion.
- 0x0005, // U+224D - U+2251 ( 5 chars) are GB18030 81 36 D6 39 - 81 36 D7 33 (offset 20E3 - 20E7)
- 0x8001, // U+2252 - U+2252 ( 1 chars) use CP 936 conversion.
- 0x000D, // U+2253 - U+225F ( 13 chars) are GB18030 81 36 D7 34 - 81 36 D8 36 (offset 20E8 - 20F4)
- 0x8002, // U+2260 - U+2261 ( 2 chars) use CP 936 conversion.
- 0x0002, // U+2262 - U+2263 ( 2 chars) are GB18030 81 36 D8 37 - 81 36 D8 38 (offset 20F5 - 20F6)
- 0x8004, // U+2264 - U+2267 ( 4 chars) use CP 936 conversion.
- 0x0006, // U+2268 - U+226D ( 6 chars) are GB18030 81 36 D8 39 - 81 36 D9 34 (offset 20F7 - 20FC)
- 0x8002, // U+226E - U+226F ( 2 chars) use CP 936 conversion.
- 0x0025, // U+2270 - U+2294 ( 37 chars) are GB18030 81 36 D9 35 - 81 36 DD 31 (offset 20FD - 2121)
- 0x8001, // U+2295 - U+2295 ( 1 chars) use CP 936 conversion.
- 0x0003, // U+2296 - U+2298 ( 3 chars) are GB18030 81 36 DD 32 - 81 36 DD 34 (offset 2122 - 2124)
- 0x8001, // U+2299 - U+2299 ( 1 chars) use CP 936 conversion.
- 0x000B, // U+229A - U+22A4 ( 11 chars) are GB18030 81 36 DD 35 - 81 36 DE 35 (offset 2125 - 212F)
- 0x8001, // U+22A5 - U+22A5 ( 1 chars) use CP 936 conversion.
- 0x0019, // U+22A6 - U+22BE ( 25 chars) are GB18030 81 36 DE 36 - 81 36 E1 30 (offset 2130 - 2148)
- 0x8001, // U+22BF - U+22BF ( 1 chars) use CP 936 conversion.
- 0x0052, // U+22C0 - U+2311 ( 82 chars) are GB18030 81 36 E1 31 - 81 36 E9 32 (offset 2149 - 219A)
- 0x8001, // U+2312 - U+2312 ( 1 chars) use CP 936 conversion.
- 0x014D, // U+2313 - U+245F ( 333 chars) are GB18030 81 36 E9 33 - 81 37 8C 35 (offset 219B - 22E7)
- 0x800A, // U+2460 - U+2469 ( 10 chars) use CP 936 conversion.
- 0x000A, // U+246A - U+2473 ( 10 chars) are GB18030 81 37 8C 36 - 81 37 8D 35 (offset 22E8 - 22F1)
- 0x8028, // U+2474 - U+249B ( 40 chars) use CP 936 conversion.
- 0x0064, // U+249C - U+24FF ( 100 chars) are GB18030 81 37 8D 36 - 81 37 97 35 (offset 22F2 - 2355)
- 0x804C, // U+2500 - U+254B ( 76 chars) use CP 936 conversion.
- 0x0004, // U+254C - U+254F ( 4 chars) are GB18030 81 37 97 36 - 81 37 97 39 (offset 2356 - 2359)
- 0x8024, // U+2550 - U+2573 ( 36 chars) use CP 936 conversion.
- 0x000D, // U+2574 - U+2580 ( 13 chars) are GB18030 81 37 98 30 - 81 37 99 32 (offset 235A - 2366)
- 0x800F, // U+2581 - U+258F ( 15 chars) use CP 936 conversion.
- 0x0003, // U+2590 - U+2592 ( 3 chars) are GB18030 81 37 99 33 - 81 37 99 35 (offset 2367 - 2369)
- 0x8003, // U+2593 - U+2595 ( 3 chars) use CP 936 conversion.
- 0x000A, // U+2596 - U+259F ( 10 chars) are GB18030 81 37 99 36 - 81 37 9A 35 (offset 236A - 2373)
- 0x8002, // U+25A0 - U+25A1 ( 2 chars) use CP 936 conversion.
- 0x0010, // U+25A2 - U+25B1 ( 16 chars) are GB18030 81 37 9A 36 - 81 37 9C 31 (offset 2374 - 2383)
- 0x8002, // U+25B2 - U+25B3 ( 2 chars) use CP 936 conversion.
- 0x0008, // U+25B4 - U+25BB ( 8 chars) are GB18030 81 37 9C 32 - 81 37 9C 39 (offset 2384 - 238B)
- 0x8002, // U+25BC - U+25BD ( 2 chars) use CP 936 conversion.
- 0x0008, // U+25BE - U+25C5 ( 8 chars) are GB18030 81 37 9D 30 - 81 37 9D 37 (offset 238C - 2393)
- 0x8002, // U+25C6 - U+25C7 ( 2 chars) use CP 936 conversion.
- 0x0003, // U+25C8 - U+25CA ( 3 chars) are GB18030 81 37 9D 38 - 81 37 9E 30 (offset 2394 - 2396)
- 0x8001, // U+25CB - U+25CB ( 1 chars) use CP 936 conversion.
- 0x0002, // U+25CC - U+25CD ( 2 chars) are GB18030 81 37 9E 31 - 81 37 9E 32 (offset 2397 - 2398)
- 0x8002, // U+25CE - U+25CF ( 2 chars) use CP 936 conversion.
- 0x0012, // U+25D0 - U+25E1 ( 18 chars) are GB18030 81 37 9E 33 - 81 37 A0 30 (offset 2399 - 23AA)
- 0x8004, // U+25E2 - U+25E5 ( 4 chars) use CP 936 conversion.
- 0x001F, // U+25E6 - U+2604 ( 31 chars) are GB18030 81 37 A0 31 - 81 37 A3 31 (offset 23AB - 23C9)
- 0x8002, // U+2605 - U+2606 ( 2 chars) use CP 936 conversion.
- 0x0002, // U+2607 - U+2608 ( 2 chars) are GB18030 81 37 A3 32 - 81 37 A3 33 (offset 23CA - 23CB)
- 0x8001, // U+2609 - U+2609 ( 1 chars) use CP 936 conversion.
- 0x0036, // U+260A - U+263F ( 54 chars) are GB18030 81 37 A3 34 - 81 37 A8 37 (offset 23CC - 2401)
- 0x8001, // U+2640 - U+2640 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+2641 - U+2641 ( 1 chars) are GB18030 81 37 A8 38 - 81 37 A8 38 (offset 2402 - 2402)
- 0x8001, // U+2642 - U+2642 ( 1 chars) use CP 936 conversion.
- 0x083E, // U+2643 - U+2E80 ( 2110 chars) are GB18030 81 37 A8 39 - 81 38 FD 38 (offset 2403 - 2C40)
- 0xFE50, // U+2E81 is non-936 GB18030 value FE 50.
- 0x0002, // U+2E82 - U+2E83 ( 2 chars) are GB18030 81 38 FD 39 - 81 38 FE 30 (offset 2C41 - 2C42)
- 0xFE54, // U+2E84 is non-936 GB18030 value FE 54.
- 0x0003, // U+2E85 - U+2E87 ( 3 chars) are GB18030 81 38 FE 31 - 81 38 FE 33 (offset 2C43 - 2C45)
- 0xFE57, // U+2E88 is non-936 GB18030 value FE 57.
- 0x0002, // U+2E89 - U+2E8A ( 2 chars) are GB18030 81 38 FE 34 - 81 38 FE 35 (offset 2C46 - 2C47)
- 0xFE58, // U+2E8B is non-936 GB18030 value FE 58.
- 0xFE5D, // U+2E8C is non-936 GB18030 value FE 5D.
- 0x000A, // U+2E8D - U+2E96 ( 10 chars) are GB18030 81 38 FE 36 - 81 39 81 35 (offset 2C48 - 2C51)
- 0xFE5E, // U+2E97 is non-936 GB18030 value FE 5E.
- 0x000F, // U+2E98 - U+2EA6 ( 15 chars) are GB18030 81 39 81 36 - 81 39 83 30 (offset 2C52 - 2C60)
- 0xFE6B, // U+2EA7 is non-936 GB18030 value FE 6B.
- 0x0002, // U+2EA8 - U+2EA9 ( 2 chars) are GB18030 81 39 83 31 - 81 39 83 32 (offset 2C61 - 2C62)
- 0xFE6E, // U+2EAA is non-936 GB18030 value FE 6E.
- 0x0003, // U+2EAB - U+2EAD ( 3 chars) are GB18030 81 39 83 33 - 81 39 83 35 (offset 2C63 - 2C65)
- 0xFE71, // U+2EAE is non-936 GB18030 value FE 71.
- 0x0004, // U+2EAF - U+2EB2 ( 4 chars) are GB18030 81 39 83 36 - 81 39 83 39 (offset 2C66 - 2C69)
- 0xFE73, // U+2EB3 is non-936 GB18030 value FE 73.
- 0x0002, // U+2EB4 - U+2EB5 ( 2 chars) are GB18030 81 39 84 30 - 81 39 84 31 (offset 2C6A - 2C6B)
- 0xFE74, // U+2EB6 is non-936 GB18030 value FE 74.
- 0xFE75, // U+2EB7 is non-936 GB18030 value FE 75.
- 0x0003, // U+2EB8 - U+2EBA ( 3 chars) are GB18030 81 39 84 32 - 81 39 84 34 (offset 2C6C - 2C6E)
- 0xFE79, // U+2EBB is non-936 GB18030 value FE 79.
- 0x000E, // U+2EBC - U+2EC9 ( 14 chars) are GB18030 81 39 84 35 - 81 39 85 38 (offset 2C6F - 2C7C)
- 0xFE84, // U+2ECA is non-936 GB18030 value FE 84.
- 0x0125, // U+2ECB - U+2FEF ( 293 chars) are GB18030 81 39 85 39 - 81 39 A3 31 (offset 2C7D - 2DA1)
- 0xA98A, // U+2FF0 is non-936 GB18030 value A9 8A.
- 0xA98B, // U+2FF1 is non-936 GB18030 value A9 8B.
- 0xA98C, // U+2FF2 is non-936 GB18030 value A9 8C.
- 0xA98D, // U+2FF3 is non-936 GB18030 value A9 8D.
- 0xA98E, // U+2FF4 is non-936 GB18030 value A9 8E.
- 0xA98F, // U+2FF5 is non-936 GB18030 value A9 8F.
- 0xA990, // U+2FF6 is non-936 GB18030 value A9 90.
- 0xA991, // U+2FF7 is non-936 GB18030 value A9 91.
- 0xA992, // U+2FF8 is non-936 GB18030 value A9 92.
- 0xA993, // U+2FF9 is non-936 GB18030 value A9 93.
- 0xA994, // U+2FFA is non-936 GB18030 value A9 94.
- 0xA995, // U+2FFB is non-936 GB18030 value A9 95.
- 0x0004, // U+2FFC - U+2FFF ( 4 chars) are GB18030 81 39 A3 32 - 81 39 A3 35 (offset 2DA2 - 2DA5)
- 0x8004, // U+3000 - U+3003 ( 4 chars) use CP 936 conversion.
- 0x0001, // U+3004 - U+3004 ( 1 chars) are GB18030 81 39 A3 36 - 81 39 A3 36 (offset 2DA6 - 2DA6)
- 0x8013, // U+3005 - U+3017 ( 19 chars) use CP 936 conversion.
- 0x0005, // U+3018 - U+301C ( 5 chars) are GB18030 81 39 A3 37 - 81 39 A4 31 (offset 2DA7 - 2DAB)
- 0x8002, // U+301D - U+301E ( 2 chars) use CP 936 conversion.
- 0x0002, // U+301F - U+3020 ( 2 chars) are GB18030 81 39 A4 32 - 81 39 A4 33 (offset 2DAC - 2DAD)
- 0x8009, // U+3021 - U+3029 ( 9 chars) use CP 936 conversion.
- 0x0014, // U+302A - U+303D ( 20 chars) are GB18030 81 39 A4 34 - 81 39 A6 33 (offset 2DAE - 2DC1)
- 0xA989, // U+303E is non-936 GB18030 value A9 89.
- 0x0002, // U+303F - U+3040 ( 2 chars) are GB18030 81 39 A6 34 - 81 39 A6 35 (offset 2DC2 - 2DC3)
- 0x8053, // U+3041 - U+3093 ( 83 chars) use CP 936 conversion.
- 0x0007, // U+3094 - U+309A ( 7 chars) are GB18030 81 39 A6 36 - 81 39 A7 32 (offset 2DC4 - 2DCA)
- 0x8004, // U+309B - U+309E ( 4 chars) use CP 936 conversion.
- 0x0002, // U+309F - U+30A0 ( 2 chars) are GB18030 81 39 A7 33 - 81 39 A7 34 (offset 2DCB - 2DCC)
- 0x8056, // U+30A1 - U+30F6 ( 86 chars) use CP 936 conversion.
- 0x0005, // U+30F7 - U+30FB ( 5 chars) are GB18030 81 39 A7 35 - 81 39 A7 39 (offset 2DCD - 2DD1)
- 0x8003, // U+30FC - U+30FE ( 3 chars) use CP 936 conversion.
- 0x0006, // U+30FF - U+3104 ( 6 chars) are GB18030 81 39 A8 30 - 81 39 A8 35 (offset 2DD2 - 2DD7)
- 0x8025, // U+3105 - U+3129 ( 37 chars) use CP 936 conversion.
- 0x00F6, // U+312A - U+321F ( 246 chars) are GB18030 81 39 A8 36 - 81 39 C1 31 (offset 2DD8 - 2ECD)
- 0x800A, // U+3220 - U+3229 ( 10 chars) use CP 936 conversion.
- 0x0007, // U+322A - U+3230 ( 7 chars) are GB18030 81 39 C1 32 - 81 39 C1 38 (offset 2ECE - 2ED4)
- 0x8001, // U+3231 - U+3231 ( 1 chars) use CP 936 conversion.
- 0x0071, // U+3232 - U+32A2 ( 113 chars) are GB18030 81 39 C1 39 - 81 39 CD 31 (offset 2ED5 - 2F45)
- 0x8001, // U+32A3 - U+32A3 ( 1 chars) use CP 936 conversion.
- 0x00EA, // U+32A4 - U+338D ( 234 chars) are GB18030 81 39 CD 32 - 81 39 E4 35 (offset 2F46 - 302F)
- 0x8002, // U+338E - U+338F ( 2 chars) use CP 936 conversion.
- 0x000C, // U+3390 - U+339B ( 12 chars) are GB18030 81 39 E4 36 - 81 39 E5 37 (offset 3030 - 303B)
- 0x8003, // U+339C - U+339E ( 3 chars) use CP 936 conversion.
- 0x0002, // U+339F - U+33A0 ( 2 chars) are GB18030 81 39 E5 38 - 81 39 E5 39 (offset 303C - 303D)
- 0x8001, // U+33A1 - U+33A1 ( 1 chars) use CP 936 conversion.
- 0x0022, // U+33A2 - U+33C3 ( 34 chars) are GB18030 81 39 E6 30 - 81 39 E9 33 (offset 303E - 305F)
- 0x8001, // U+33C4 - U+33C4 ( 1 chars) use CP 936 conversion.
- 0x0009, // U+33C5 - U+33CD ( 9 chars) are GB18030 81 39 E9 34 - 81 39 EA 32 (offset 3060 - 3068)
- 0x8001, // U+33CE - U+33CE ( 1 chars) use CP 936 conversion.
- 0x0002, // U+33CF - U+33D0 ( 2 chars) are GB18030 81 39 EA 33 - 81 39 EA 34 (offset 3069 - 306A)
- 0x8002, // U+33D1 - U+33D2 ( 2 chars) use CP 936 conversion.
- 0x0002, // U+33D3 - U+33D4 ( 2 chars) are GB18030 81 39 EA 35 - 81 39 EA 36 (offset 306B - 306C)
- 0x8001, // U+33D5 - U+33D5 ( 1 chars) use CP 936 conversion.
- 0x0071, // U+33D6 - U+3446 ( 113 chars) are GB18030 81 39 EA 37 - 81 39 F5 39 (offset 306D - 30DD)
- 0xFE56, // U+3447 is non-936 GB18030 value FE 56.
- 0x002B, // U+3448 - U+3472 ( 43 chars) are GB18030 81 39 F6 30 - 81 39 FA 32 (offset 30DE - 3108)
- 0xFE55, // U+3473 is non-936 GB18030 value FE 55.
- 0x012A, // U+3474 - U+359D ( 298 chars) are GB18030 81 39 FA 33 - 82 30 9A 30 (offset 3109 - 3232)
- 0xFE5A, // U+359E is non-936 GB18030 value FE 5A.
- 0x006F, // U+359F - U+360D ( 111 chars) are GB18030 82 30 9A 31 - 82 30 A5 31 (offset 3233 - 32A1)
- 0xFE5C, // U+360E is non-936 GB18030 value FE 5C.
- 0x000B, // U+360F - U+3619 ( 11 chars) are GB18030 82 30 A5 32 - 82 30 A6 32 (offset 32A2 - 32AC)
- 0xFE5B, // U+361A is non-936 GB18030 value FE 5B.
- 0x02FD, // U+361B - U+3917 ( 765 chars) are GB18030 82 30 A6 33 - 82 30 F2 37 (offset 32AD - 35A9)
- 0xFE60, // U+3918 is non-936 GB18030 value FE 60.
- 0x0055, // U+3919 - U+396D ( 85 chars) are GB18030 82 30 F2 38 - 82 30 FB 32 (offset 35AA - 35FE)
- 0xFE5F, // U+396E is non-936 GB18030 value FE 5F.
- 0x0060, // U+396F - U+39CE ( 96 chars) are GB18030 82 30 FB 33 - 82 31 86 38 (offset 35FF - 365E)
- 0xFE62, // U+39CF is non-936 GB18030 value FE 62.
- 0xFE65, // U+39D0 is non-936 GB18030 value FE 65.
- 0x000E, // U+39D1 - U+39DE ( 14 chars) are GB18030 82 31 86 39 - 82 31 88 32 (offset 365F - 366C)
- 0xFE63, // U+39DF is non-936 GB18030 value FE 63.
- 0x0093, // U+39E0 - U+3A72 ( 147 chars) are GB18030 82 31 88 33 - 82 31 96 39 (offset 366D - 36FF)
- 0xFE64, // U+3A73 is non-936 GB18030 value FE 64.
- 0x00DA, // U+3A74 - U+3B4D ( 218 chars) are GB18030 82 31 97 30 - 82 31 AC 37 (offset 3700 - 37D9)
- 0xFE68, // U+3B4E is non-936 GB18030 value FE 68.
- 0x011F, // U+3B4F - U+3C6D ( 287 chars) are GB18030 82 31 AC 38 - 82 31 C9 34 (offset 37DA - 38F8)
- 0xFE69, // U+3C6E is non-936 GB18030 value FE 69.
- 0x0071, // U+3C6F - U+3CDF ( 113 chars) are GB18030 82 31 C9 35 - 82 31 D4 37 (offset 38F9 - 3969)
- 0xFE6A, // U+3CE0 is non-936 GB18030 value FE 6A.
- 0x0375, // U+3CE1 - U+4055 ( 885 chars) are GB18030 82 31 D4 38 - 82 32 AF 32 (offset 396A - 3CDE)
- 0xFE6F, // U+4056 is non-936 GB18030 value FE 6F.
- 0x0108, // U+4057 - U+415E ( 264 chars) are GB18030 82 32 AF 33 - 82 32 C9 36 (offset 3CDF - 3DE6)
- 0xFE70, // U+415F is non-936 GB18030 value FE 70.
- 0x01D7, // U+4160 - U+4336 ( 471 chars) are GB18030 82 32 C9 37 - 82 32 F8 37 (offset 3DE7 - 3FBD)
- 0xFE72, // U+4337 is non-936 GB18030 value FE 72.
- 0x0074, // U+4338 - U+43AB ( 116 chars) are GB18030 82 32 F8 38 - 82 33 86 33 (offset 3FBE - 4031)
- 0xFE78, // U+43AC is non-936 GB18030 value FE 78.
- 0x0004, // U+43AD - U+43B0 ( 4 chars) are GB18030 82 33 86 34 - 82 33 86 37 (offset 4032 - 4035)
- 0xFE77, // U+43B1 is non-936 GB18030 value FE 77.
- 0x002B, // U+43B2 - U+43DC ( 43 chars) are GB18030 82 33 86 38 - 82 33 8B 30 (offset 4036 - 4060)
- 0xFE7A, // U+43DD is non-936 GB18030 value FE 7A.
- 0x00F8, // U+43DE - U+44D5 ( 248 chars) are GB18030 82 33 8B 31 - 82 33 A3 38 (offset 4061 - 4158)
- 0xFE7B, // U+44D6 is non-936 GB18030 value FE 7B.
- 0x0175, // U+44D7 - U+464B ( 373 chars) are GB18030 82 33 A3 39 - 82 33 C9 31 (offset 4159 - 42CD)
- 0xFE7D, // U+464C is non-936 GB18030 value FE 7D.
- 0x0014, // U+464D - U+4660 ( 20 chars) are GB18030 82 33 C9 32 - 82 33 CB 31 (offset 42CE - 42E1)
- 0xFE7C, // U+4661 is non-936 GB18030 value FE 7C.
- 0x00C1, // U+4662 - U+4722 ( 193 chars) are GB18030 82 33 CB 32 - 82 33 DE 34 (offset 42E2 - 43A2)
- 0xFE80, // U+4723 is non-936 GB18030 value FE 80.
- 0x0005, // U+4724 - U+4728 ( 5 chars) are GB18030 82 33 DE 35 - 82 33 DE 39 (offset 43A3 - 43A7)
- 0xFE81, // U+4729 is non-936 GB18030 value FE 81.
- 0x0052, // U+472A - U+477B ( 82 chars) are GB18030 82 33 DF 30 - 82 33 E7 31 (offset 43A8 - 43F9)
- 0xFE82, // U+477C is non-936 GB18030 value FE 82.
- 0x0010, // U+477D - U+478C ( 16 chars) are GB18030 82 33 E7 32 - 82 33 E8 37 (offset 43FA - 4409)
- 0xFE83, // U+478D is non-936 GB18030 value FE 83.
- 0x01B9, // U+478E - U+4946 ( 441 chars) are GB18030 82 33 E8 38 - 82 34 96 38 (offset 440A - 45C2)
- 0xFE85, // U+4947 is non-936 GB18030 value FE 85.
- 0x0032, // U+4948 - U+4979 ( 50 chars) are GB18030 82 34 96 39 - 82 34 9B 38 (offset 45C3 - 45F4)
- 0xFE86, // U+497A is non-936 GB18030 value FE 86.
- 0x0002, // U+497B - U+497C ( 2 chars) are GB18030 82 34 9B 39 - 82 34 9C 30 (offset 45F5 - 45F6)
- 0xFE87, // U+497D is non-936 GB18030 value FE 87.
- 0x0004, // U+497E - U+4981 ( 4 chars) are GB18030 82 34 9C 31 - 82 34 9C 34 (offset 45F7 - 45FA)
- 0xFE88, // U+4982 is non-936 GB18030 value FE 88.
- 0xFE89, // U+4983 is non-936 GB18030 value FE 89.
- 0x0001, // U+4984 - U+4984 ( 1 chars) are GB18030 82 34 9C 35 - 82 34 9C 35 (offset 45FB - 45FB)
- 0xFE8A, // U+4985 is non-936 GB18030 value FE 8A.
- 0xFE8B, // U+4986 is non-936 GB18030 value FE 8B.
- 0x0014, // U+4987 - U+499A ( 20 chars) are GB18030 82 34 9C 36 - 82 34 9E 35 (offset 45FC - 460F)
- 0xFE8D, // U+499B is non-936 GB18030 value FE 8D.
- 0x0003, // U+499C - U+499E ( 3 chars) are GB18030 82 34 9E 36 - 82 34 9E 38 (offset 4610 - 4612)
- 0xFE8C, // U+499F is non-936 GB18030 value FE 8C.
- 0x0016, // U+49A0 - U+49B5 ( 22 chars) are GB18030 82 34 9E 39 - 82 34 A1 30 (offset 4613 - 4628)
- 0xFE8F, // U+49B6 is non-936 GB18030 value FE 8F.
- 0xFE8E, // U+49B7 is non-936 GB18030 value FE 8E.
- 0x02BF, // U+49B8 - U+4C76 ( 703 chars) are GB18030 82 34 A1 31 - 82 34 E7 33 (offset 4629 - 48E7)
- 0xFE96, // U+4C77 is non-936 GB18030 value FE 96.
- 0x0027, // U+4C78 - U+4C9E ( 39 chars) are GB18030 82 34 E7 34 - 82 34 EB 32 (offset 48E8 - 490E)
- 0xFE93, // U+4C9F is non-936 GB18030 value FE 93.
- 0xFE94, // U+4CA0 is non-936 GB18030 value FE 94.
- 0xFE95, // U+4CA1 is non-936 GB18030 value FE 95.
- 0xFE97, // U+4CA2 is non-936 GB18030 value FE 97.
- 0xFE92, // U+4CA3 is non-936 GB18030 value FE 92.
- 0x006F, // U+4CA4 - U+4D12 ( 111 chars) are GB18030 82 34 EB 33 - 82 34 F6 33 (offset 490F - 497D)
- 0xFE98, // U+4D13 is non-936 GB18030 value FE 98.
- 0xFE99, // U+4D14 is non-936 GB18030 value FE 99.
- 0xFE9A, // U+4D15 is non-936 GB18030 value FE 9A.
- 0xFE9B, // U+4D16 is non-936 GB18030 value FE 9B.
- 0xFE9C, // U+4D17 is non-936 GB18030 value FE 9C.
- 0xFE9D, // U+4D18 is non-936 GB18030 value FE 9D.
- 0xFE9E, // U+4D19 is non-936 GB18030 value FE 9E.
- 0x0094, // U+4D1A - U+4DAD ( 148 chars) are GB18030 82 34 F6 34 - 82 35 87 31 (offset 497E - 4A11)
- 0xFE9F, // U+4DAE is non-936 GB18030 value FE 9F.
- 0x0051, // U+4DAF - U+4DFF ( 81 chars) are GB18030 82 35 87 32 - 82 35 8F 32 (offset 4A12 - 4A62)
- 0xD1A6, // U+4E00 - U+9FA5 (20902 chars) use CP 936 conversion.
- 0x385A, // U+9FA6 - U+D7FF (14426 chars) are GB18030 82 35 8F 33 - 83 36 C7 38 (offset 4A63 - 82BC)
- 0x8F6C, // U+D800 - U+E76B ( 3948 chars) use CP 936 conversion.
- 0x0001, // U+E76C - U+E76C ( 1 chars) are GB18030 83 36 C7 39 - 83 36 C7 39 (offset 82BD - 82BD)
- 0x805B, // U+E76D - U+E7C7 ( 91 chars) use CP 936 conversion.
- 0x0001, // U+E7C8 - U+E7C8 ( 1 chars) are GB18030 83 36 C8 30 - 83 36 C8 30 (offset 82BE - 82BE)
- 0x801E, // U+E7C9 - U+E7E6 ( 30 chars) use CP 936 conversion.
- 0x000D, // U+E7E7 - U+E7F3 ( 13 chars) are GB18030 83 36 C8 31 - 83 36 C9 33 (offset 82BF - 82CB)
- 0x8021, // U+E7F4 - U+E814 ( 33 chars) use CP 936 conversion.
- 0x0001, // U+E815 - U+E815 ( 1 chars) are GB18030 83 36 C9 34 - 83 36 C9 34 (offset 82CC - 82CC)
- 0x8003, // U+E816 - U+E818 ( 3 chars) use CP 936 conversion.
- 0x0005, // U+E819 - U+E81D ( 5 chars) are GB18030 83 36 C9 35 - 83 36 C9 39 (offset 82CD - 82D1)
- 0x8001, // U+E81E - U+E81E ( 1 chars) use CP 936 conversion.
- 0x0007, // U+E81F - U+E825 ( 7 chars) are GB18030 83 36 CA 30 - 83 36 CA 36 (offset 82D2 - 82D8)
- 0x8001, // U+E826 - U+E826 ( 1 chars) use CP 936 conversion.
- 0x0004, // U+E827 - U+E82A ( 4 chars) are GB18030 83 36 CA 37 - 83 36 CB 30 (offset 82D9 - 82DC)
- 0x8002, // U+E82B - U+E82C ( 2 chars) use CP 936 conversion.
- 0x0004, // U+E82D - U+E830 ( 4 chars) are GB18030 83 36 CB 31 - 83 36 CB 34 (offset 82DD - 82E0)
- 0x8002, // U+E831 - U+E832 ( 2 chars) use CP 936 conversion.
- 0x0008, // U+E833 - U+E83A ( 8 chars) are GB18030 83 36 CB 35 - 83 36 CC 32 (offset 82E1 - 82E8)
- 0x8001, // U+E83B - U+E83B ( 1 chars) use CP 936 conversion.
- 0x0007, // U+E83C - U+E842 ( 7 chars) are GB18030 83 36 CC 33 - 83 36 CC 39 (offset 82E9 - 82EF)
- 0x8001, // U+E843 - U+E843 ( 1 chars) use CP 936 conversion.
- 0x0010, // U+E844 - U+E853 ( 16 chars) are GB18030 83 36 CD 30 - 83 36 CE 35 (offset 82F0 - 82FF)
- 0x8002, // U+E854 - U+E855 ( 2 chars) use CP 936 conversion.
- 0x000E, // U+E856 - U+E863 ( 14 chars) are GB18030 83 36 CE 36 - 83 36 CF 39 (offset 8300 - 830D)
- 0x8001, // U+E864 - U+E864 ( 1 chars) use CP 936 conversion.
- 0x10C7, // U+E865 - U+F92B ( 4295 chars) are GB18030 83 36 D0 30 - 84 30 85 34 (offset 830E - 93D4)
- 0x8001, // U+F92C - U+F92C ( 1 chars) use CP 936 conversion.
- 0x004C, // U+F92D - U+F978 ( 76 chars) are GB18030 84 30 85 35 - 84 30 8D 30 (offset 93D5 - 9420)
- 0x8001, // U+F979 - U+F979 ( 1 chars) use CP 936 conversion.
- 0x001B, // U+F97A - U+F994 ( 27 chars) are GB18030 84 30 8D 31 - 84 30 8F 37 (offset 9421 - 943B)
- 0x8001, // U+F995 - U+F995 ( 1 chars) use CP 936 conversion.
- 0x0051, // U+F996 - U+F9E6 ( 81 chars) are GB18030 84 30 8F 38 - 84 30 97 38 (offset 943C - 948C)
- 0x8001, // U+F9E7 - U+F9E7 ( 1 chars) use CP 936 conversion.
- 0x0009, // U+F9E8 - U+F9F0 ( 9 chars) are GB18030 84 30 97 39 - 84 30 98 37 (offset 948D - 9495)
- 0x8001, // U+F9F1 - U+F9F1 ( 1 chars) use CP 936 conversion.
- 0x001A, // U+F9F2 - U+FA0B ( 26 chars) are GB18030 84 30 98 38 - 84 30 9B 33 (offset 9496 - 94AF)
- 0x8004, // U+FA0C - U+FA0F ( 4 chars) use CP 936 conversion.
- 0x0001, // U+FA10 - U+FA10 ( 1 chars) are GB18030 84 30 9B 34 - 84 30 9B 34 (offset 94B0 - 94B0)
- 0x8001, // U+FA11 - U+FA11 ( 1 chars) use CP 936 conversion.
- 0x0001, // U+FA12 - U+FA12 ( 1 chars) are GB18030 84 30 9B 35 - 84 30 9B 35 (offset 94B1 - 94B1)
- 0x8002, // U+FA13 - U+FA14 ( 2 chars) use CP 936 conversion.
- 0x0003, // U+FA15 - U+FA17 ( 3 chars) are GB18030 84 30 9B 36 - 84 30 9B 38 (offset 94B2 - 94B4)
- 0x8001, // U+FA18 - U+FA18 ( 1 chars) use CP 936 conversion.
- 0x0006, // U+FA19 - U+FA1E ( 6 chars) are GB18030 84 30 9B 39 - 84 30 9C 34 (offset 94B5 - 94BA)
- 0x8003, // U+FA1F - U+FA21 ( 3 chars) use CP 936 conversion.
- 0x0001, // U+FA22 - U+FA22 ( 1 chars) are GB18030 84 30 9C 35 - 84 30 9C 35 (offset 94BB - 94BB)
- 0x8002, // U+FA23 - U+FA24 ( 2 chars) use CP 936 conversion.
- 0x0002, // U+FA25 - U+FA26 ( 2 chars) are GB18030 84 30 9C 36 - 84 30 9C 37 (offset 94BC - 94BD)
- 0x8003, // U+FA27 - U+FA29 ( 3 chars) use CP 936 conversion.
- 0x0406, // U+FA2A - U+FE2F ( 1030 chars) are GB18030 84 30 9C 38 - 84 31 85 37 (offset 94BE - 98C3)
- 0x8002, // U+FE30 - U+FE31 ( 2 chars) use CP 936 conversion.
- 0x0001, // U+FE32 - U+FE32 ( 1 chars) are GB18030 84 31 85 38 - 84 31 85 38 (offset 98C4 - 98C4)
- 0x8012, // U+FE33 - U+FE44 ( 18 chars) use CP 936 conversion.
- 0x0004, // U+FE45 - U+FE48 ( 4 chars) are GB18030 84 31 85 39 - 84 31 86 32 (offset 98C5 - 98C8)
- 0x800A, // U+FE49 - U+FE52 ( 10 chars) use CP 936 conversion.
- 0x0001, // U+FE53 - U+FE53 ( 1 chars) are GB18030 84 31 86 33 - 84 31 86 33 (offset 98C9 - 98C9)
- 0x8004, // U+FE54 - U+FE57 ( 4 chars) use CP 936 conversion.
- 0x0001, // U+FE58 - U+FE58 ( 1 chars) are GB18030 84 31 86 34 - 84 31 86 34 (offset 98CA - 98CA)
- 0x800E, // U+FE59 - U+FE66 ( 14 chars) use CP 936 conversion.
- 0x0001, // U+FE67 - U+FE67 ( 1 chars) are GB18030 84 31 86 35 - 84 31 86 35 (offset 98CB - 98CB)
- 0x8004, // U+FE68 - U+FE6B ( 4 chars) use CP 936 conversion.
- 0x0095, // U+FE6C - U+FF00 ( 149 chars) are GB18030 84 31 86 36 - 84 31 95 34 (offset 98CC - 9960)
- 0x805E, // U+FF01 - U+FF5E ( 94 chars) use CP 936 conversion.
- 0x0081, // U+FF5F - U+FFDF ( 129 chars) are GB18030 84 31 95 35 - 84 31 A2 33 (offset 9961 - 99E1)
- 0x8006, // U+FFE0 - U+FFE5 ( 6 chars) use CP 936 conversion.
- 0x001A, // U+FFE6 - U+FFFF ( 26 chars) are GB18030 84 31 A2 34 - 84 31 A4 39 (offset 99E2 - 99FB)
- };
- }
-}
-#endif // FEATURE_CODEPAGES_FILE
-
diff --git a/src/mscorlib/src/System/Text/ISCIIEncoding.cs b/src/mscorlib/src/System/Text/ISCIIEncoding.cs
deleted file mode 100644
index 751b8217c0..0000000000
--- a/src/mscorlib/src/System/Text/ISCIIEncoding.cs
+++ /dev/null
@@ -1,2621 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// ISCIIEncoding
-//
-// Ported from windows c_iscii. If you find bugs here, there're likely similar
-// bugs in the windows version
-namespace System.Text
-{
- using System;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Globalization;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
-
- // Encodes text into and out of the ISCII encodings.
- // ISCII contains characters to encode indic scripts by mapping indic scripts
- // to the same code page. This works because they are all related scripts.
- // ISCII provides a "font" selection method to switch between the appropriate
- // fonts to display the other scripts. All ISCII characters are above the
- // ASCII range to provide ASCII compatibility.
- //
- // IsAlwaysNormalized() isn't overridden
- // We don't override IsAlwaysNormalized() because it is false for all forms (like base implimentation)
- // Forms C & KC have things like 0933 + 093C == composed 0934, so they aren't normalized
- // Forms D & KD have things like 0934, which decomposes to 0933 + 093C, so not normal.
- // Form IDNA has the above problems plus case mapping, so false (like most encodings)
- //
-
- [Serializable]
- internal class ISCIIEncoding : EncodingNLS, ISerializable
- {
- // Constants
- private const int CodeDefault = 0; // 0x40 Default
- private const int CodeRoman = 1; // 0x41 Roman Transliteration (not supported)
- private const int CodeDevanagari = 2; // 0x42 57002
- private const int CodeBengali = 3; // 0x43 57003
- private const int CodeTamil = 4; // 0x44 57004
- private const int CodeTelugu = 5; // 0x45 57005
- private const int CodeAssamese = 6; // 0x46 57006 Assamese (Bengali)
- private const int CodeOriya = 7; // 0x47 57007
- private const int CodeKannada = 8; // 0x48 57008
- private const int CodeMalayalam = 9; // 0x49 57009
- private const int CodeGujarati = 10; // 0x4a 57010
- private const int CodePunjabi = 11; // 0x4b 57011 Punjabi (Gurmukhi)
-
- // Ranges
- private const int MultiByteBegin = 0xa0; // Beginning of MultiByte space in ISCII
- private const int IndicBegin = 0x0901; // Beginining of Unicode Indic script code points
- private const int IndicEnd = 0x0d6f; // End of Unicode Indic Script code points
-
- // ISCII Control Values
- private const byte ControlATR = 0xef; // Attribute (ATR) code
- private const byte ControlCodePageStart = 0x40; // Start of code page range
-
- // Interesting ISCII characters
- private const byte Virama = 0xe8;
- private const byte Nukta = 0xe9;
- private const byte DevenagariExt = 0xf0;
-
- // Interesting Unicode characters
- private const char ZWNJ = (char)0x200c;
- private const char ZWJ = (char)0x200d;
-
- // Code Page
- private int defaultCodePage;
-
- public ISCIIEncoding(int codePage) : base(codePage)
- {
- // Set our code page (subtracting windows code page # offset)
- defaultCodePage = codePage - 57000;
-
- // Legal windows code pages are between Devanagari and Punjabi
- Debug.Assert(defaultCodePage >= CodeDevanagari && defaultCodePage <= CodePunjabi,
- "[ISCIIEncoding] Code page (" + codePage + " isn't supported by ISCIIEncoding!");
-
- // This shouldn't really be possible
- if (defaultCodePage < CodeDevanagari || defaultCodePage > CodePunjabi)
- throw new ArgumentException(Environment.GetResourceString(
- "Argument_CodepageNotSupported", codePage), nameof(codePage));
- }
-
- // Constructor called by serialization.
- internal ISCIIEncoding(SerializationInfo info, StreamingContext context) : base(0)
- {
- // Actually this can't ever get called, MLangCodePageEncoding is our proxy
- // (In Everett this was done by MLang)
- Debug.Assert(false, "Didn't expect to make it to ISCIIEncoding serialization constructor");
- throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
- }
-
- // ISerializable implementation
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // Make sure to get the base stuff too This throws if info is null
- SerializeEncoding(info, context);
- Debug.Assert(info!=null, "[ISCIIEncoding.GetObjectData] Expected null info to throw");
-
- // Just need Everett MLangCodePageEncoding maxCharSize
- info.AddValue("m_maxByteSize", 2);
-
- // Always have this as our helper
- info.SetType(typeof(MLangCodePageEncoding));
- }
-
- // Our MaxByteCount is 4 times the input size. That could be because
- // the first input character could be in the wrong code page ("font") and
- // then that character could also be encoded in 2 code points
- public override int GetMaxByteCount(int charCount)
- {
- if (charCount < 0)
- throw new ArgumentOutOfRangeException(nameof(charCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- // Characters would be # of characters + 1 in case high surrogate is ? * max fallback
- long byteCount = (long)charCount + 1;
-
- if (EncoderFallback.MaxCharCount > 1)
- byteCount *= EncoderFallback.MaxCharCount;
-
- // 4 Time input because 1st input could require code page change and also that char could require 2 code points
- byteCount *= 4;
-
- if (byteCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(charCount), Environment.GetResourceString("ArgumentOutOfRange_GetByteCountOverflow"));
-
- return (int)byteCount;
- }
-
- // Our MaxCharCount is the same as the byteCount. There are a few sequences
- // where 2 (or more) bytes could become 2 chars, but thats still 1 to 1.
- public override int GetMaxCharCount(int byteCount)
- {
- if (byteCount < 0)
- throw new ArgumentOutOfRangeException(nameof(byteCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- // Our MaxCharCount is the same as the byteCount. There are a few sequences
- // where 2 (or more) bytes could become 2 chars, but thats still 1 to 1.
- // Also could have 1 in decoder if we're waiting to see if next char's a nukta.
- long charCount = ((long)byteCount + 1);
-
- // Some code points are undefined so we could fall back.
- if (DecoderFallback.MaxCharCount > 1)
- charCount *= DecoderFallback.MaxCharCount;
-
- if (charCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(byteCount), Environment.GetResourceString("ArgumentOutOfRange_GetCharCountOverflow"));
-
- return (int)charCount;
- }
-
- // Our workhorse version
- internal override unsafe int GetByteCount(char* chars, int count, EncoderNLS baseEncoder)
- {
- // Use null pointer to ask GetBytes for count
- return GetBytes(chars, count, null, 0, baseEncoder);
- }
-
- // Workhorse
- internal override unsafe int GetBytes(char *chars, int charCount,
- byte* bytes, int byteCount, EncoderNLS baseEncoder)
- {
- // Allow null bytes for counting
- Debug.Assert(chars != null, "[ISCIIEncoding.GetBytes]chars!=null");
-// Debug.Assert(bytes != null, "[ISCIIEncoding.GetBytes]bytes!=null");
- Debug.Assert(charCount >=0, "[ISCIIEncoding.GetBytes]charCount >=0");
- Debug.Assert(byteCount >=0, "[ISCIIEncoding.GetBytes]byteCount >=0");
-
- // Need the ISCII Encoder
- ISCIIEncoder encoder = (ISCIIEncoder) baseEncoder;
-
- // prepare our helpers
- Encoding.EncodingByteBuffer buffer = new Encoding.EncodingByteBuffer(
- this, encoder, bytes, byteCount, chars, charCount);
-
- int currentCodePage = this.defaultCodePage;
- bool bLastVirama = false;
-
- // Use encoder info if available
- if (encoder != null)
- {
- // Remember our old state
- currentCodePage = encoder.currentCodePage;
- bLastVirama = encoder.bLastVirama;
-
- // If we have a high surrogate left over, then fall it back
- if (encoder.charLeftOver > 0)
- {
- buffer.Fallback(encoder.charLeftOver);
- bLastVirama = false; // Redundant
- }
- }
-
- while (buffer.MoreData)
- {
- // Get our data
- char ch = buffer.GetNextChar();
-
- // See if its a Multi Byte Character
- if (ch < MultiByteBegin)
- {
- // Its a boring low character, add it.
- if (!buffer.AddByte((byte)ch))
- break;
- bLastVirama = false;
- continue;
- }
-
- // See if its outside of the Indic script Range range
- if ((ch < IndicBegin) || (ch > IndicEnd))
- {
- // See if its a ZWJ or ZWNJ and if we has bLastVirama;
- if (bLastVirama && (ch == ZWNJ || ch == ZWJ))
- {
- // It was a bLastVirama and ZWNJ || ZWJ
- if (ch == ZWNJ)
- {
- if (!buffer.AddByte(Virama))
- break;
- }
- else // ZWJ
- {
- if (!buffer.AddByte(Nukta))
- break;
- }
-
- // bLastVirama now counts as false
- bLastVirama = false;
- continue;
- }
-
- // Have to do our fallback
- //
- // Note that this will fallback 2 chars if this is a high surrogate.
- // Throws if recursive (knows because we called InternalGetNextChar)
- buffer.Fallback(ch);
- bLastVirama = false;
- continue;
- }
-
- // Its in the Unicode Indic script range
- int indicInfo = UnicodeToIndicChar[ch - IndicBegin];
- byte byteIndic = (byte)indicInfo;
- int indicScript = (0x000f & (indicInfo >> 8));
- int indicTwoBytes = (0xf000 & indicInfo);
-
- // If IndicInfo is 0 then have to do fallback
- if (indicInfo == 0)
- {
- // Its some Unicode character we don't have indic for.
- // Have to do our fallback
- // Add Fallback Count
- // Note that chars was preincremented, and GetEncoderFallbackString might add an extra
- // if chars != charEnd and there's a surrogate.
- // Throws if recursive (knows because we called InternalGetNextChar)
- buffer.Fallback(ch);
-
- bLastVirama = false;
- continue;
- }
-
- // See if our code page ("font" in ISCII spec) has to change
- // (This if doesn't add character, just changes character set)
- Debug.Assert(indicScript!=0, "[ISCIIEncoding.GetBytes]expected an indic script value");
- if (indicScript != currentCodePage)
- {
- // It changed, spit out the ATR
- if (!buffer.AddByte(ControlATR, (byte)(indicScript | ControlCodePageStart)))
- break;
-
- // Now spit out the new code page (& remember it) (do this afterwards in case AddByte failed)
- currentCodePage = indicScript;
-
- // We only know how to map from Unicode to pages from Devanagari to Punjabi (2 to 11)
- Debug.Assert(currentCodePage >= CodeDevanagari && currentCodePage <= CodePunjabi,
- "[ISCIIEncoding.GetBytes]Code page (" + currentCodePage + " shouldn't appear in ISCII from Unicode table!");
- }
-
- // Safe to add our byte now
- if (!buffer.AddByte(byteIndic, indicTwoBytes != 0 ? 1:0))
- break;
-
- // Remember if this one was a Virama
- bLastVirama = (byteIndic == Virama);
-
- // Some characters need extra bytes
- if (indicTwoBytes != 0)
- {
- // This one needs another byte
- Debug.Assert((indicTwoBytes >> 12) > 0 && (indicTwoBytes >> 12) <= 3,
- "[ISCIIEncoding.GetBytes]Expected indicTwoBytes from 1-3, not " + (indicTwoBytes >> 12));
-
- // Already did buffer checking, but...
- if (!buffer.AddByte(SecondIndicByte[indicTwoBytes >> 12]))
- break;
- }
- }
-
- // May need to switch back to our default code page
- if (currentCodePage != defaultCodePage && (encoder == null || encoder.MustFlush))
- {
- // It changed, spit out the ATR
- if (buffer.AddByte(ControlATR, (byte)(defaultCodePage | ControlCodePageStart)))
- currentCodePage = defaultCodePage;
- else
- // If not successful, convert will maintain state for next time, also
- // AddByte will have decremented our char count, however we need it to remain the same
- buffer.GetNextChar();
- bLastVirama = false;
- }
-
- // Make sure we remember our state if necessary
- // Note that we don't care about flush because Virama and code page
- // changes are legal at the end.
- // Don't set encoder if we're just counting
- if (encoder != null && bytes != null)
- {
- // Clear Encoder if necessary.
- if (!buffer.fallbackBuffer.bUsedEncoder)
- {
- encoder.charLeftOver = (char)0;
- }
-
- // Remember our code page/virama state
- encoder.currentCodePage = currentCodePage;
- encoder.bLastVirama = bLastVirama;
-
- // How many chars were used?
- encoder.m_charsUsed = buffer.CharsUsed;
- }
-
- // Return our length
- return buffer.Count;
- }
-
- // Workhorse
- internal override unsafe int GetCharCount(byte* bytes, int count, DecoderNLS baseDecoder)
- {
- // Just call GetChars with null chars saying we want count
- return GetChars(bytes, count, null, 0, baseDecoder);
- }
-
- // For decoding, the following interesting rules apply:
- // Virama followed by another Virama or Nukta becomes Virama + ZWNJ or Virama + ZWJ
- // ATR is followed by a byte to switch code pages ("fonts")
- // Devenagari F0, B8 -> \u0952
- // Devenagari F0, BF -> \u0970
- // Some characters followed by E9 become a different character instead.
- internal override unsafe int GetChars(byte* bytes, int byteCount,
- char* chars, int charCount, DecoderNLS baseDecoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- // Allow null chars for counting
- Debug.Assert(bytes != null, "[ISCIIEncoding.GetChars]bytes is null");
- Debug.Assert(byteCount >= 0, "[ISCIIEncoding.GetChars]byteCount is negative");
-// Debug.Assert(chars != null, "[ISCIIEncoding.GetChars]chars is null");
- Debug.Assert(charCount >= 0, "[ISCIIEncoding.GetChars]charCount is negative");
-
- // Need the ISCII Decoder
- ISCIIDecoder decoder = (ISCIIDecoder) baseDecoder;
-
- // Get our info.
- Encoding.EncodingCharBuffer buffer = new Encoding.EncodingCharBuffer(
- this, decoder, chars, charCount, bytes, byteCount);
-
- int currentCodePage = this.defaultCodePage;
- bool bLastATR = false;
- bool bLastVirama = false;
- bool bLastDevenagariStressAbbr = false;
- char cLastCharForNextNukta = '\0';
- char cLastCharForNoNextNukta = '\0';
-
- // See if there's anything in our decoder
- if (decoder != null)
- {
- currentCodePage = decoder.currentCodePage;
- bLastATR = decoder.bLastATR;
- bLastVirama = decoder.bLastVirama;
- bLastDevenagariStressAbbr = decoder.bLastDevenagariStressAbbr;
- cLastCharForNextNukta = decoder.cLastCharForNextNukta;
- cLastCharForNoNextNukta = decoder.cLastCharForNoNextNukta;
- }
-
- bool bLastSpecial = bLastVirama | bLastATR | bLastDevenagariStressAbbr |
- (cLastCharForNextNukta != '\0');
-
- // Get our current code page index (some code pages are dups)
- int currentCodePageIndex = -1;
- Debug.Assert(currentCodePage >= CodeDevanagari && currentCodePage <= CodePunjabi,
- "[ISCIIEncoding.GetChars]Decoder code page must be >= Devanagari and <= Punjabi, not " + currentCodePage);
-
- if (currentCodePage >= CodeDevanagari && currentCodePage <= CodePunjabi)
- {
- currentCodePageIndex = IndicMappingIndex[currentCodePage];
- }
-
- // Loop through our input
- while (buffer.MoreData)
- {
- byte b = buffer.GetNextByte();
-
- // See if last one was special
- if (bLastSpecial)
- {
- // Now it won't be
- bLastSpecial = false;
-
- // One and only one of our flags should be set
- Debug.Assert(((bLastVirama ? 1 : 0) + (bLastATR ? 1 : 0) +
- (bLastDevenagariStressAbbr ? 1 : 0) +
- ((cLastCharForNextNukta > 0) ? 1 : 0)) == 1,
- String.Format(CultureInfo.InvariantCulture,
- "[ISCIIEncoding.GetChars]Special cases require 1 and only 1 special case flag: LastATR {0} Dev. {1} Nukta {2}",
- bLastATR, bLastDevenagariStressAbbr, cLastCharForNextNukta));
- // If the last one was an ATR, then we'll have to do ATR stuff
- if (bLastATR)
- {
- // We only support Devanagari - Punjabi
- if (b >= (0x40 | CodeDevanagari) && b <= (0x40 | CodePunjabi))
- {
- // Remember the code page
- currentCodePage = b & 0xf;
- currentCodePageIndex = IndicMappingIndex[currentCodePage];
- // No longer last ATR
- bLastATR = false;
- continue;
- }
-
- // Change back to default?
- if (b == 0x40)
- {
- currentCodePage = this.defaultCodePage;
- currentCodePageIndex = -1;
-
- if (currentCodePage >= CodeDevanagari && currentCodePage <= CodePunjabi)
- {
- currentCodePageIndex = IndicMappingIndex[currentCodePage];
- }
- // No longer last ATR
- bLastATR = false;
- continue;
- }
-
- // We don't support Roman
- if (b == 0x41)
- {
- currentCodePage = this.defaultCodePage;
- currentCodePageIndex = -1;
-
- if (currentCodePage >= CodeDevanagari && currentCodePage <= CodePunjabi)
- {
- currentCodePageIndex = IndicMappingIndex[currentCodePage];
- }
-
- // Even though we don't know how to support Roman, windows didn't add a ? so we don't either.
- // No longer last ATR
- bLastATR = false;
- continue;
- }
-
- // Other code pages & ATR codes not supported, fallback the ATR
- // If fails, decrements the buffer, which is OK, we remember ATR state.
- if (!buffer.Fallback(ControlATR))
- break;
-
- // No longer last ATR (fell back)
- bLastATR = false;
-
- // we know we can't have any of these other modes
- Debug.Assert(bLastVirama == false, "[ISCIIEncoding.GetChars] Expected no bLastVirama in bLastATR mode");
- Debug.Assert(bLastDevenagariStressAbbr == false, "[ISCIIEncoding.GetChars] Expected no bLastDevenagariStressAbbr in bLastATR mode");
- Debug.Assert(cLastCharForNextNukta == (char)0, "[ISCIIEncoding.GetChars] Expected no cLastCharForNextNukta in bLastATR mode");
- Debug.Assert(cLastCharForNoNextNukta == (char)0, "[ISCIIEncoding.GetChars] Expected no cLastCharForNoNextNukta in bLastATR mode");
-
- // Keep processing this byte
- }
- else if (bLastVirama)
- {
- // If last was Virama, then we might need ZWNJ or ZWJ instead
- if (b == Virama)
- {
- // If no room, then stop
- if (!buffer.AddChar(ZWNJ))
- break;
- bLastVirama = false;
- continue;
- }
- if (b == Nukta)
- {
- // If no room, then stop
- if (!buffer.AddChar(ZWJ))
- break;
- bLastVirama = false;
- continue;
- }
-
- // No longer in this mode, fall through to handle character
- // (Virama itself was added when flag was set last iteration)
- bLastVirama = false;
-
- // We know we can't have any of these other modes
- Debug.Assert(bLastATR == false, "[ISCIIEncoding.GetChars] Expected no bLastATR in bLastVirama mode");
- Debug.Assert(bLastDevenagariStressAbbr == false, "[ISCIIEncoding.GetChars] Expected no bLastDevenagariStressAbbr in bLastVirama mode");
- Debug.Assert(cLastCharForNextNukta == (char)0, "[ISCIIEncoding.GetChars] Expected no cLastCharForNextNukta in bLastVirama mode");
- Debug.Assert(cLastCharForNoNextNukta == (char)0, "[ISCIIEncoding.GetChars] Expected no cLastCharForNoNextNukta in bLastVirama mode");
- }
- else if (bLastDevenagariStressAbbr)
- {
- // Last byte was an 0xf0 (ext).
- // If current is b8 or bf, then we have 952 or 970. Otherwise fallback
- if (b == 0xb8)
- {
- // It was a 0xb8
- if (!buffer.AddChar('\x0952')) // Devanagari stress sign anudatta
- break;
- bLastDevenagariStressAbbr = false;
- continue;
- }
-
- if (b == 0xbf)
- {
- // It was a 0xbf
- if (!buffer.AddChar('\x0970')) // Devanagari abbr. sign
- break;
- bLastDevenagariStressAbbr = false;
- continue;
- }
-
- // Wasn't an expected pattern, do fallback for f0 (ext)
- // if fails, fallback will back up our buffer
- if (!buffer.Fallback(DevenagariExt))
- break;
-
- // Keep processing this byte (turn off mode)
- // (last character was added when mode was set)
- bLastDevenagariStressAbbr = false;
-
- Debug.Assert(bLastATR == false, "[ISCIIEncoding.GetChars] Expected no bLastATR in bLastDevenagariStressAbbr mode");
- Debug.Assert(bLastVirama == false, "[ISCIIEncoding.GetChars] Expected no bLastVirama in bLastDevenagariStressAbbr mode");
- Debug.Assert(cLastCharForNextNukta == (char)0, "[ISCIIEncoding.GetChars] Expected no cLastCharForNextNukta in bLastDevenagariStressAbbr mode");
- Debug.Assert(cLastCharForNoNextNukta == (char)0, "[ISCIIEncoding.GetChars] Expected no cLastCharForNoNextNukta in bLastDevenagariStressAbbr mode");
- }
- else
- {
- // We were checking for next char being a nukta
- Debug.Assert(cLastCharForNextNukta > 0 && cLastCharForNoNextNukta > 0,
- "[ISCIIEncoding.GetChars]No other special case found, but cLastCharFor(No)NextNukta variable(s) aren't set.");
-
- // We'll either add combined char or last char
- if (b == Nukta)
- {
- // We combine nukta with previous char
- if (!buffer.AddChar(cLastCharForNextNukta))
- break;
-
- // Done already
- cLastCharForNextNukta = cLastCharForNoNextNukta = '\0';
- continue;
- }
-
- // No Nukta, just add last character and keep processing current byte
- if (!buffer.AddChar(cLastCharForNoNextNukta))
- break;
-
- // Keep processing this byte, turn off mode.
- cLastCharForNextNukta = cLastCharForNoNextNukta = '\0';
-
- Debug.Assert(bLastATR == false, "[ISCIIEncoding.GetChars] Expected no bLastATR in cLastCharForNextNukta mode");
- Debug.Assert(bLastVirama == false, "[ISCIIEncoding.GetChars] Expected no bLastVirama in cLastCharForNextNukta mode");
- Debug.Assert(bLastDevenagariStressAbbr == false, "[ISCIIEncoding.GetChars] Expected no bLastDevenagariStressAbbr in cLastCharForNextNukta mode");
- }
- }
-
- // Now bLastSpecial should be false and all flags false.
- Debug.Assert (!bLastSpecial && !bLastDevenagariStressAbbr && !bLastVirama && !bLastATR &&
- cLastCharForNextNukta == '\0',
- "[ISCIIEncoding.GetChars]No special state for last code point should exist at this point.");
-
- // If its a simple byte, just add it
- if (b < MultiByteBegin)
- {
- if (!buffer.AddChar((char)b))
- break;
- continue;
- }
-
- // See if its an ATR marker
- if (b == ControlATR)
- {
- bLastATR = bLastSpecial = true;
- continue;
- }
-
- Debug.Assert (currentCodePageIndex != -1, "[ISCIIEncoding.GetChars]Expected valid currentCodePageIndex != -1");
- char ch = IndicMapping[currentCodePageIndex, 0, b - MultiByteBegin];
- char cAlt = IndicMapping[currentCodePageIndex, 1, b - MultiByteBegin];
-
- // If no 2nd char, just add it, also lonely Nuktas get added as well.
- if (cAlt == 0 || b == Nukta)
- {
- // If it was an unknown character do fallback
-
- // ? if not known.
- if (ch == 0)
- {
- // Fallback the unknown byte
- if (!buffer.Fallback(b))
- break;
- }
- else
- {
- // Add the known character
- if (!buffer.AddChar(ch))
- break;
- }
- continue;
- }
-
- // if b == Virama set last Virama so we can do ZWJ or ZWNJ next time if needed.
- if (b == Virama)
- {
- // Add Virama
- if (!buffer.AddChar(ch))
- break;
- bLastVirama = bLastSpecial = true;
- continue;
- }
-
- // See if its one that changes with a Nukta
- if ((cAlt & 0xF000) == 0)
- {
- // It could change if next char is a nukta
- bLastSpecial = true;
- cLastCharForNextNukta = cAlt;
- cLastCharForNoNextNukta = ch;
- continue;
- }
-
- // We must be the Devenagari special case for F0, B8 & F0, BF
- Debug.Assert(currentCodePage == CodeDevanagari && b == DevenagariExt,
- String.Format(CultureInfo.InvariantCulture,
- "[ISCIIEncoding.GetChars] Devenagari special case must {0} not {1} or in Devanagari code page {2} not {3}.",
- DevenagariExt, b, CodeDevanagari, currentCodePage));
- bLastDevenagariStressAbbr = bLastSpecial = true;
-
- }
-
- // If we don't have a decoder, or if we had to flush, then we need to get rid
- // of last ATR, LastNoNextNukta and LastDevenagariExt.
- if (decoder == null || decoder.MustFlush)
- {
- // If these fail (because of Convert with insufficient buffer), then they'll turn off MustFlush as well.
- if (bLastATR)
- {
- // Have to add ATR fallback
- if (buffer.Fallback(ControlATR))
- bLastATR = false;
- else
- // If not successful, convert will maintain state for next time, also
- // AddChar will have decremented our byte count, however we need it to remain the same
- buffer.GetNextByte();
- }
- else if (bLastDevenagariStressAbbr)
- {
- // Have to do fallback for DevenagariExt
- if (buffer.Fallback(DevenagariExt))
- bLastDevenagariStressAbbr = false;
- else
- // If not successful, convert will maintain state for next time, also
- // AddChar will have decremented our byte count, however we need it to remain the same
- buffer.GetNextByte();
- }
- else if (cLastCharForNoNextNukta != '\0')
- {
- // Have to add our last char because there was no next nukta
- if (buffer.AddChar(cLastCharForNoNextNukta))
- cLastCharForNoNextNukta = cLastCharForNextNukta = '\0';
- else
- // If not successful, convert will maintain state for next time, also
- // AddChar will have decremented our byte count, however we need it to remain the same
- buffer.GetNextByte();
- }
- // LastVirama is unimportant for flushing decoder.
- }
-
- // Remember any left over stuff
- // (only remember if we aren't counting)
- if (decoder != null && chars != null)
- {
- // If not flushing or have state (from convert) then need to remember state
- if (!decoder.MustFlush ||
- cLastCharForNoNextNukta != '\0' || bLastATR || bLastDevenagariStressAbbr)
- {
- // Either not flushing or had state (from convert)
- Debug.Assert(!decoder.MustFlush || !decoder.m_throwOnOverflow,
- "[ISCIIEncoding.GetChars]Expected no state or not converting or not flushing");
- decoder.currentCodePage = currentCodePage;
- decoder.bLastVirama = bLastVirama;
- decoder.bLastATR = bLastATR;
- decoder.bLastDevenagariStressAbbr = bLastDevenagariStressAbbr;
- decoder.cLastCharForNextNukta = cLastCharForNextNukta;
- decoder.cLastCharForNoNextNukta = cLastCharForNoNextNukta;
- }
- else
- {
- decoder.currentCodePage = this.defaultCodePage;
- decoder.bLastVirama = false;
- decoder.bLastATR = false;
- decoder.bLastDevenagariStressAbbr = false;
- decoder.cLastCharForNextNukta = '\0';
- decoder.cLastCharForNoNextNukta = '\0';
- }
- decoder.m_bytesUsed = buffer.BytesUsed;
- }
- // Otherwise we already did fallback and added extra things
-
- // Return the # of characters we found
- return buffer.Count;
- }
-
- public override Decoder GetDecoder()
- {
- return new ISCIIDecoder(this);
- }
-
- public override Encoder GetEncoder()
- {
- return new ISCIIEncoder(this);
- }
-
- public override int GetHashCode()
- {
- //Not great distribution, but this is relatively unlikely to be used as the key in a hashtable.
- return defaultCodePage + this.EncoderFallback.GetHashCode() + this.DecoderFallback.GetHashCode();
- }
-
- [Serializable]
- internal class ISCIIEncoder : EncoderNLS
- {
- // Need to remember the default code page (for HasState)
- internal int defaultCodePage = 0;
-
- // Need a place for the current code page
- internal int currentCodePage = 0;
-
- // Was the last character a virama? (Because ZWJ and ZWNJ are different then)
- internal bool bLastVirama = false;
-
- public ISCIIEncoder(Encoding encoding) : base(encoding)
- {
- this.currentCodePage = this.defaultCodePage = encoding.CodePage - 57000;
-
- // base calls reset
- }
-
- // Warning: If you're decoding mixed encoding files or something, this could be confusing
- // We don't always force back to base encoding mapping, so if you reset where do you restart?
- public override void Reset()
- {
- bLastVirama = false;
- charLeftOver = (char)0;
- if (m_fallbackBuffer != null)
- m_fallbackBuffer.Reset();
- }
-
- // Anything left in our encoder?
- // Encoder not only has to get rid of left over characters, but it has to switch back to the current code page.
- internal override bool HasState
- {
- get
- {
- return (this.charLeftOver != (char)0 || this.currentCodePage != this.defaultCodePage);
- }
- }
- }
-
- [Serializable]
- internal class ISCIIDecoder : DecoderNLS
- {
- // Need a place to store any our current code page and last ATR flag
- internal int currentCodePage = 0;
- internal bool bLastATR = false;
- internal bool bLastVirama = false;
- internal bool bLastDevenagariStressAbbr = false;
- internal char cLastCharForNextNukta = '\0';
- internal char cLastCharForNoNextNukta = '\0';
-
- public ISCIIDecoder(Encoding encoding) : base(encoding)
- {
- this.currentCodePage = encoding.CodePage - 57000;
-
- // base calls reset
- }
-
- // Warning: If you're decoding mixed encoding files or something, this could be confusing
- // We don't always force back to base encoding mapping, so if you reset where do you restart?
- public override void Reset()
- {
- bLastATR = false;
- bLastVirama = false;
- bLastDevenagariStressAbbr = false;
- cLastCharForNextNukta = '\0';
- cLastCharForNoNextNukta = '\0';
- if (m_fallbackBuffer != null)
- m_fallbackBuffer.Reset();
- }
-
- // Anything left in our decoder?
- internal override bool HasState
- {
- get
- {
- return (this.cLastCharForNextNukta != '\0' || this.cLastCharForNoNextNukta != '\0' ||
- this.bLastATR || this.bLastDevenagariStressAbbr);
- }
- }
- }
-
- //
- // ISCII Tables
- //
- // From Windows ISCII\tables.c
- //
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Char to Byte
- //
- // 0xXYZZ Where Y is the code page "font" part and ZZ is the byte character
- // The high X bits also reference the SecondIndicByte table if an
- // extra byte is needed.
- // 0x0000 For undefined characters
- //
- // This is valid for values IndicBegin to IndicEnd
- //
- // WARNING: When this was copied from windows, the ? characters (0x003F) were
- // searched/replaced with 0x0000.
- //
- ////////////////////////////////////////////////////////////////////////////
-
- static int[] UnicodeToIndicChar =
- {
- 0x02a1, // U+0901 : Devanagari Sign Candrabindu
- 0x02a2, // U+0902 : Devanagari Sign Anusvara
- 0x02a3, // U+0903 : Devanagari Sign Visarga
- 0x0000, // U+0904 : Undefined
- 0x02a4, // U+0905 : Devanagari Letter A
- 0x02a5, // U+0906 : Devanagari Letter Aa
- 0x02a6, // U+0907 : Devanagari Letter I
- 0x02a7, // U+0908 : Devanagari Letter Ii
- 0x02a8, // U+0909 : Devanagari Letter U
- 0x02a9, // U+090a : Devanagari Letter Uu
- 0x02aa, // U+090b : Devanagari Letter Vocalic R
- 0x12a6, // U+090c : Devanagari Letter Vocalic L
- 0x02ae, // U+090d : Devanagari Letter Candra E
- 0x02ab, // U+090e : Devanagari Letter Short E
- 0x02ac, // U+090f : Devanagari Letter E
- 0x02ad, // U+0910 : Devanagari Letter Ai
- 0x02b2, // U+0911 : Devanagari Letter Candra O
- 0x02af, // U+0912 : Devanagari Letter Short O
- 0x02b0, // U+0913 : Devanagari Letter O
- 0x02b1, // U+0914 : Devanagari Letter Au
- 0x02b3, // U+0915 : Devanagari Letter Ka
- 0x02b4, // U+0916 : Devanagari Letter Kha
- 0x02b5, // U+0917 : Devanagari Letter Ga
- 0x02b6, // U+0918 : Devanagari Letter Gha
- 0x02b7, // U+0919 : Devanagari Letter Nga
- 0x02b8, // U+091a : Devanagari Letter Ca
- 0x02b9, // U+091b : Devanagari Letter Cha
- 0x02ba, // U+091c : Devanagari Letter Ja
- 0x02bb, // U+091d : Devanagari Letter Jha
- 0x02bc, // U+091e : Devanagari Letter Nya
- 0x02bd, // U+091f : Devanagari Letter Tta
- 0x02be, // U+0920 : Devanagari Letter Ttha
- 0x02bf, // U+0921 : Devanagari Letter Dda
- 0x02c0, // U+0922 : Devanagari Letter Ddha
- 0x02c1, // U+0923 : Devanagari Letter Nna
- 0x02c2, // U+0924 : Devanagari Letter Ta
- 0x02c3, // U+0925 : Devanagari Letter Tha
- 0x02c4, // U+0926 : Devanagari Letter Da
- 0x02c5, // U+0927 : Devanagari Letter Dha
- 0x02c6, // U+0928 : Devanagari Letter Na
- 0x02c7, // U+0929 : Devanagari Letter Nnna
- 0x02c8, // U+092a : Devanagari Letter Pa
- 0x02c9, // U+092b : Devanagari Letter Pha
- 0x02ca, // U+092c : Devanagari Letter Ba
- 0x02cb, // U+092d : Devanagari Letter Bha
- 0x02cc, // U+092e : Devanagari Letter Ma
- 0x02cd, // U+092f : Devanagari Letter Ya
- 0x02cf, // U+0930 : Devanagari Letter Ra
- 0x02d0, // U+0931 : Devanagari Letter Rra
- 0x02d1, // U+0932 : Devanagari Letter La
- 0x02d2, // U+0933 : Devanagari Letter Lla
- 0x02d3, // U+0934 : Devanagari Letter Llla
- 0x02d4, // U+0935 : Devanagari Letter Va
- 0x02d5, // U+0936 : Devanagari Letter Sha
- 0x02d6, // U+0937 : Devanagari Letter Ssa
- 0x02d7, // U+0938 : Devanagari Letter Sa
- 0x02d8, // U+0939 : Devanagari Letter Ha
- 0x0000, // U+093a : Undefined
- 0x0000, // U+093b : Undefined
- 0x02e9, // U+093c : Devanagari Sign Nukta
- 0x12ea, // U+093d : Devanagari Sign Avagraha
- 0x02da, // U+093e : Devanagari Vowel Sign Aa
- 0x02db, // U+093f : Devanagari Vowel Sign I
- 0x02dc, // U+0940 : Devanagari Vowel Sign Ii
- 0x02dd, // U+0941 : Devanagari Vowel Sign U
- 0x02de, // U+0942 : Devanagari Vowel Sign Uu
- 0x02df, // U+0943 : Devanagari Vowel Sign Vocalic R
- 0x12df, // U+0944 : Devanagari Vowel Sign Vocalic Rr
- 0x02e3, // U+0945 : Devanagari Vowel Sign Candra E
- 0x02e0, // U+0946 : Devanagari Vowel Sign Short E
- 0x02e1, // U+0947 : Devanagari Vowel Sign E
- 0x02e2, // U+0948 : Devanagari Vowel Sign Ai
- 0x02e7, // U+0949 : Devanagari Vowel Sign Candra O
- 0x02e4, // U+094a : Devanagari Vowel Sign Short O
- 0x02e5, // U+094b : Devanagari Vowel Sign O
- 0x02e6, // U+094c : Devanagari Vowel Sign Au
- 0x02e8, // U+094d : Devanagari Sign Virama
- 0x0000, // U+094e : Undefined
- 0x0000, // U+094f : Undefined
- 0x12a1, // U+0950 : Devanagari Om
- 0x0000, // U+0951 : Devanagari Stress Sign Udatta
- 0x22f0, // U+0952 : Devanagari Stress Sign Anudatta
- 0x0000, // U+0953 : Devanagari Grave Accent
- 0x0000, // U+0954 : Devanagari Acute Accent
- 0x0000, // U+0955 : Undefined
- 0x0000, // U+0956 : Undefined
- 0x0000, // U+0957 : Undefined
- 0x12b3, // U+0958 : Devanagari Letter Qa
- 0x12b4, // U+0959 : Devanagari Letter Khha
- 0x12b5, // U+095a : Devanagari Letter Ghha
- 0x12ba, // U+095b : Devanagari Letter Za
- 0x12bf, // U+095c : Devanagari Letter Dddha
- 0x12c0, // U+095d : Devanagari Letter Rha
- 0x12c9, // U+095e : Devanagari Letter Fa
- 0x02ce, // U+095f : Devanagari Letter Yya
- 0x12aa, // U+0960 : Devanagari Letter Vocalic Rr
- 0x12a7, // U+0961 : Devanagari Letter Vocalic Ll
- 0x12db, // U+0962 : Devanagari Vowel Sign Vocalic L
- 0x12dc, // U+0963 : Devanagari Vowel Sign Vocalic Ll
- 0x02ea, // U+0964 : Devanagari Danda
- 0x0000, // U+0965 : Devanagari Double Danda
- 0x02f1, // U+0966 : Devanagari Digit Zero
- 0x02f2, // U+0967 : Devanagari Digit One
- 0x02f3, // U+0968 : Devanagari Digit Two
- 0x02f4, // U+0969 : Devanagari Digit Three
- 0x02f5, // U+096a : Devanagari Digit Four
- 0x02f6, // U+096b : Devanagari Digit Five
- 0x02f7, // U+096c : Devanagari Digit Six
- 0x02f8, // U+096d : Devanagari Digit Seven
- 0x02f9, // U+096e : Devanagari Digit Eight
- 0x02fa, // U+096f : Devanagari Digit Nine
- 0x32f0, // U+0970 : Devanagari Abbreviation Sign
- 0x0000, // U+0971 : Undefined
- 0x0000, // U+0972 : Undefined
- 0x0000, // U+0973 : Undefined
- 0x0000, // U+0974 : Undefined
- 0x0000, // U+0975 : Undefined
- 0x0000, // U+0976 : Undefined
- 0x0000, // U+0977 : Undefined
- 0x0000, // U+0978 : Undefined
- 0x0000, // U+0979 : Undefined
- 0x0000, // U+097a : Undefined
- 0x0000, // U+097b : Undefined
- 0x0000, // U+097c : Undefined
- 0x0000, // U+097d : Undefined
- 0x0000, // U+097e : Undefined
- 0x0000, // U+097f : Undefined
- 0x0000, // U+0980 : Undefined
- 0x03a1, // U+0981 : Bengali Sign Candrabindu
- 0x03a2, // U+0982 : Bengali Sign Anusvara
- 0x03a3, // U+0983 : Bengali Sign Visarga
- 0x0000, // U+0984 : Undefined
- 0x03a4, // U+0985 : Bengali Letter A
- 0x03a5, // U+0986 : Bengali Letter Aa
- 0x03a6, // U+0987 : Bengali Letter I
- 0x03a7, // U+0988 : Bengali Letter Ii
- 0x03a8, // U+0989 : Bengali Letter U
- 0x03a9, // U+098a : Bengali Letter Uu
- 0x03aa, // U+098b : Bengali Letter Vocalic R
- 0x13a6, // U+098c : Bengali Letter Vocalic L
- 0x0000, // U+098d : Undefined
- 0x0000, // U+098e : Undefined
- 0x03ab, // U+098f : Bengali Letter E
- 0x03ad, // U+0990 : Bengali Letter Ai
- 0x0000, // U+0991 : Undefined
- 0x0000, // U+0992 : Undefined
- 0x03af, // U+0993 : Bengali Letter O
- 0x03b1, // U+0994 : Bengali Letter Au
- 0x03b3, // U+0995 : Bengali Letter Ka
- 0x03b4, // U+0996 : Bengali Letter Kha
- 0x03b5, // U+0997 : Bengali Letter Ga
- 0x03b6, // U+0998 : Bengali Letter Gha
- 0x03b7, // U+0999 : Bengali Letter Nga
- 0x03b8, // U+099a : Bengali Letter Ca
- 0x03b9, // U+099b : Bengali Letter Cha
- 0x03ba, // U+099c : Bengali Letter Ja
- 0x03bb, // U+099d : Bengali Letter Jha
- 0x03bc, // U+099e : Bengali Letter Nya
- 0x03bd, // U+099f : Bengali Letter Tta
- 0x03be, // U+09a0 : Bengali Letter Ttha
- 0x03bf, // U+09a1 : Bengali Letter Dda
- 0x03c0, // U+09a2 : Bengali Letter Ddha
- 0x03c1, // U+09a3 : Bengali Letter Nna
- 0x03c2, // U+09a4 : Bengali Letter Ta
- 0x03c3, // U+09a5 : Bengali Letter Tha
- 0x03c4, // U+09a6 : Bengali Letter Da
- 0x03c5, // U+09a7 : Bengali Letter Dha
- 0x03c6, // U+09a8 : Bengali Letter Na
- 0x0000, // U+09a9 : Undefined
- 0x03c8, // U+09aa : Bengali Letter Pa
- 0x03c9, // U+09ab : Bengali Letter Pha
- 0x03ca, // U+09ac : Bengali Letter Ba
- 0x03cb, // U+09ad : Bengali Letter Bha
- 0x03cc, // U+09ae : Bengali Letter Ma
- 0x03cd, // U+09af : Bengali Letter Ya
- 0x03cf, // U+09b0 : Bengali Letter Ra
- 0x0000, // U+09b1 : Undefined
- 0x03d1, // U+09b2 : Bengali Letter La
- 0x0000, // U+09b3 : Undefined
- 0x0000, // U+09b4 : Undefined
- 0x0000, // U+09b5 : Undefined
- 0x03d5, // U+09b6 : Bengali Letter Sha
- 0x03d6, // U+09b7 : Bengali Letter Ssa
- 0x03d7, // U+09b8 : Bengali Letter Sa
- 0x03d8, // U+09b9 : Bengali Letter Ha
- 0x0000, // U+09ba : Undefined
- 0x0000, // U+09bb : Undefined
- 0x03e9, // U+09bc : Bengali Sign Nukta
- 0x0000, // U+09bd : Undefined
- 0x03da, // U+09be : Bengali Vowel Sign Aa
- 0x03db, // U+09bf : Bengali Vowel Sign I
- 0x03dc, // U+09c0 : Bengali Vowel Sign Ii
- 0x03dd, // U+09c1 : Bengali Vowel Sign U
- 0x03de, // U+09c2 : Bengali Vowel Sign Uu
- 0x03df, // U+09c3 : Bengali Vowel Sign Vocalic R
- 0x13df, // U+09c4 : Bengali Vowel Sign Vocalic Rr
- 0x0000, // U+09c5 : Undefined
- 0x0000, // U+09c6 : Undefined
- 0x03e0, // U+09c7 : Bengali Vowel Sign E
- 0x03e2, // U+09c8 : Bengali Vowel Sign Ai
- 0x0000, // U+09c9 : Undefined
- 0x0000, // U+09ca : Undefined
- 0x03e4, // U+09cb : Bengali Vowel Sign O
- 0x03e6, // U+09cc : Bengali Vowel Sign Au
- 0x03e8, // U+09cd : Bengali Sign Virama
- 0x0000, // U+09ce : Undefined
- 0x0000, // U+09cf : Undefined
- 0x0000, // U+09d0 : Undefined
- 0x0000, // U+09d1 : Undefined
- 0x0000, // U+09d2 : Undefined
- 0x0000, // U+09d3 : Undefined
- 0x0000, // U+09d4 : Undefined
- 0x0000, // U+09d5 : Undefined
- 0x0000, // U+09d6 : Undefined
- 0x0000, // U+09d7 : Bengali Au Length Mark
- 0x0000, // U+09d8 : Undefined
- 0x0000, // U+09d9 : Undefined
- 0x0000, // U+09da : Undefined
- 0x0000, // U+09db : Undefined
- 0x13bf, // U+09dc : Bengali Letter Rra
- 0x13c0, // U+09dd : Bengali Letter Rha
- 0x0000, // U+09de : Undefined
- 0x03ce, // U+09df : Bengali Letter Yya
- 0x13aa, // U+09e0 : Bengali Letter Vocalic Rr
- 0x13a7, // U+09e1 : Bengali Letter Vocalic Ll
- 0x13db, // U+09e2 : Bengali Vowel Sign Vocalic L
- 0x13dc, // U+09e3 : Bengali Vowel Sign Vocalic Ll
- 0x0000, // U+09e4 : Undefined
- 0x0000, // U+09e5 : Undefined
- 0x03f1, // U+09e6 : Bengali Digit Zero
- 0x03f2, // U+09e7 : Bengali Digit One
- 0x03f3, // U+09e8 : Bengali Digit Two
- 0x03f4, // U+09e9 : Bengali Digit Three
- 0x03f5, // U+09ea : Bengali Digit Four
- 0x03f6, // U+09eb : Bengali Digit Five
- 0x03f7, // U+09ec : Bengali Digit Six
- 0x03f8, // U+09ed : Bengali Digit Seven
- 0x03f9, // U+09ee : Bengali Digit Eight
- 0x03fa, // U+09ef : Bengali Digit Nine
- 0x0000, // U+09f0 : Bengali Letter Ra With Middle Diagonal
- 0x0000, // U+09f1 : Bengali Letter Ra With Lower Diagonal
- 0x0000, // U+09f2 : Bengali Rupee Mark
- 0x0000, // U+09f3 : Bengali Rupee Sign
- 0x0000, // U+09f4 : Bengali Currency Numerator One
- 0x0000, // U+09f5 : Bengali Currency Numerator Two
- 0x0000, // U+09f6 : Bengali Currency Numerator Three
- 0x0000, // U+09f7 : Bengali Currency Numerator Four
- 0x0000, // U+09f8 : Bengali Currency Numerator One Less Than The Denominator
- 0x0000, // U+09f9 : Bengali Currency Denominator Sixteen
- 0x0000, // U+09fa : Bengali Isshar
- 0x0000, // U+09fb : Undefined
- 0x0000, // U+09fc : Undefined
- 0x0000, // U+09fd : Undefined
- 0x0000, // U+09fe : Undefined
- 0x0000, // U+09ff : Undefined
- 0x0000, // U+0a00 : Undefined
- 0x0000, // U+0a01 : Undefined
- 0x0ba2, // U+0a02 : Gurmukhi Sign Bindi
- 0x0000, // U+0a03 : Undefined
- 0x0000, // U+0a04 : Undefined
- 0x0ba4, // U+0a05 : Gurmukhi Letter A
- 0x0ba5, // U+0a06 : Gurmukhi Letter Aa
- 0x0ba6, // U+0a07 : Gurmukhi Letter I
- 0x0ba7, // U+0a08 : Gurmukhi Letter Ii
- 0x0ba8, // U+0a09 : Gurmukhi Letter U
- 0x0ba9, // U+0a0a : Gurmukhi Letter Uu
- 0x0000, // U+0a0b : Undefined
- 0x0000, // U+0a0c : Undefined
- 0x0000, // U+0a0d : Undefined
- 0x0000, // U+0a0e : Undefined
- 0x0bab, // U+0a0f : Gurmukhi Letter Ee
- 0x0bad, // U+0a10 : Gurmukhi Letter Ai
- 0x0000, // U+0a11 : Undefined
- 0x0000, // U+0a12 : Undefined
- 0x0bb0, // U+0a13 : Gurmukhi Letter Oo
- 0x0bb1, // U+0a14 : Gurmukhi Letter Au
- 0x0bb3, // U+0a15 : Gurmukhi Letter Ka
- 0x0bb4, // U+0a16 : Gurmukhi Letter Kha
- 0x0bb5, // U+0a17 : Gurmukhi Letter Ga
- 0x0bb6, // U+0a18 : Gurmukhi Letter Gha
- 0x0bb7, // U+0a19 : Gurmukhi Letter Nga
- 0x0bb8, // U+0a1a : Gurmukhi Letter Ca
- 0x0bb9, // U+0a1b : Gurmukhi Letter Cha
- 0x0bba, // U+0a1c : Gurmukhi Letter Ja
- 0x0bbb, // U+0a1d : Gurmukhi Letter Jha
- 0x0bbc, // U+0a1e : Gurmukhi Letter Nya
- 0x0bbd, // U+0a1f : Gurmukhi Letter Tta
- 0x0bbe, // U+0a20 : Gurmukhi Letter Ttha
- 0x0bbf, // U+0a21 : Gurmukhi Letter Dda
- 0x0bc0, // U+0a22 : Gurmukhi Letter Ddha
- 0x0bc1, // U+0a23 : Gurmukhi Letter Nna
- 0x0bc2, // U+0a24 : Gurmukhi Letter Ta
- 0x0bc3, // U+0a25 : Gurmukhi Letter Tha
- 0x0bc4, // U+0a26 : Gurmukhi Letter Da
- 0x0bc5, // U+0a27 : Gurmukhi Letter Dha
- 0x0bc6, // U+0a28 : Gurmukhi Letter Na
- 0x0000, // U+0a29 : Undefined
- 0x0bc8, // U+0a2a : Gurmukhi Letter Pa
- 0x0bc9, // U+0a2b : Gurmukhi Letter Pha
- 0x0bca, // U+0a2c : Gurmukhi Letter Ba
- 0x0bcb, // U+0a2d : Gurmukhi Letter Bha
- 0x0bcc, // U+0a2e : Gurmukhi Letter Ma
- 0x0bcd, // U+0a2f : Gurmukhi Letter Ya
- 0x0bcf, // U+0a30 : Gurmukhi Letter Ra
- 0x0000, // U+0a31 : Undefined
- 0x0bd1, // U+0a32 : Gurmukhi Letter La
- 0x0bd2, // U+0a33 : Gurmukhi Letter Lla
- 0x0000, // U+0a34 : Undefined
- 0x0bd4, // U+0a35 : Gurmukhi Letter Va
- 0x0bd5, // U+0a36 : Gurmukhi Letter Sha
- 0x0000, // U+0a37 : Undefined
- 0x0bd7, // U+0a38 : Gurmukhi Letter Sa
- 0x0bd8, // U+0a39 : Gurmukhi Letter Ha
- 0x0000, // U+0a3a : Undefined
- 0x0000, // U+0a3b : Undefined
- 0x0be9, // U+0a3c : Gurmukhi Sign Nukta
- 0x0000, // U+0a3d : Undefined
- 0x0bda, // U+0a3e : Gurmukhi Vowel Sign Aa
- 0x0bdb, // U+0a3f : Gurmukhi Vowel Sign I
- 0x0bdc, // U+0a40 : Gurmukhi Vowel Sign Ii
- 0x0bdd, // U+0a41 : Gurmukhi Vowel Sign U
- 0x0bde, // U+0a42 : Gurmukhi Vowel Sign Uu
- 0x0000, // U+0a43 : Undefined
- 0x0000, // U+0a44 : Undefined
- 0x0000, // U+0a45 : Undefined
- 0x0000, // U+0a46 : Undefined
- 0x0be0, // U+0a47 : Gurmukhi Vowel Sign Ee
- 0x0be2, // U+0a48 : Gurmukhi Vowel Sign Ai
- 0x0000, // U+0a49 : Undefined
- 0x0000, // U+0a4a : Undefined
- 0x0be4, // U+0a4b : Gurmukhi Vowel Sign Oo
- 0x0be6, // U+0a4c : Gurmukhi Vowel Sign Au
- 0x0be8, // U+0a4d : Gurmukhi Sign Virama
- 0x0000, // U+0a4e : Undefined
- 0x0000, // U+0a4f : Undefined
- 0x0000, // U+0a50 : Undefined
- 0x0000, // U+0a51 : Undefined
- 0x0000, // U+0a52 : Undefined
- 0x0000, // U+0a53 : Undefined
- 0x0000, // U+0a54 : Undefined
- 0x0000, // U+0a55 : Undefined
- 0x0000, // U+0a56 : Undefined
- 0x0000, // U+0a57 : Undefined
- 0x0000, // U+0a58 : Undefined
- 0x1bb4, // U+0a59 : Gurmukhi Letter Khha
- 0x1bb5, // U+0a5a : Gurmukhi Letter Ghha
- 0x1bba, // U+0a5b : Gurmukhi Letter Za
- 0x1bc0, // U+0a5c : Gurmukhi Letter Rra
- 0x0000, // U+0a5d : Undefined
- 0x1bc9, // U+0a5e : Gurmukhi Letter Fa
- 0x0000, // U+0a5f : Undefined
- 0x0000, // U+0a60 : Undefined
- 0x0000, // U+0a61 : Undefined
- 0x0000, // U+0a62 : Undefined
- 0x0000, // U+0a63 : Undefined
- 0x0000, // U+0a64 : Undefined
- 0x0000, // U+0a65 : Undefined
- 0x0bf1, // U+0a66 : Gurmukhi Digit Zero
- 0x0bf2, // U+0a67 : Gurmukhi Digit One
- 0x0bf3, // U+0a68 : Gurmukhi Digit Two
- 0x0bf4, // U+0a69 : Gurmukhi Digit Three
- 0x0bf5, // U+0a6a : Gurmukhi Digit Four
- 0x0bf6, // U+0a6b : Gurmukhi Digit Five
- 0x0bf7, // U+0a6c : Gurmukhi Digit Six
- 0x0bf8, // U+0a6d : Gurmukhi Digit Seven
- 0x0bf9, // U+0a6e : Gurmukhi Digit Eight
- 0x0bfa, // U+0a6f : Gurmukhi Digit Nine
- 0x0000, // U+0a70 : Gurmukhi Tippi
- 0x0000, // U+0a71 : Gurmukhi Addak
- 0x0000, // U+0a72 : Gurmukhi Iri
- 0x0000, // U+0a73 : Gurmukhi Ura
- 0x0000, // U+0a74 : Gurmukhi Ek Onkar
- 0x0000, // U+0a75 : Undefined
- 0x0000, // U+0a76 : Undefined
- 0x0000, // U+0a77 : Undefined
- 0x0000, // U+0a78 : Undefined
- 0x0000, // U+0a79 : Undefined
- 0x0000, // U+0a7a : Undefined
- 0x0000, // U+0a7b : Undefined
- 0x0000, // U+0a7c : Undefined
- 0x0000, // U+0a7d : Undefined
- 0x0000, // U+0a7e : Undefined
- 0x0000, // U+0a7f : Undefined
- 0x0000, // U+0a80 : Undefined
- 0x0aa1, // U+0a81 : Gujarati Sign Candrabindu
- 0x0aa2, // U+0a82 : Gujarati Sign Anusvara
- 0x0aa3, // U+0a83 : Gujarati Sign Visarga
- 0x0000, // U+0a84 : Undefined
- 0x0aa4, // U+0a85 : Gujarati Letter A
- 0x0aa5, // U+0a86 : Gujarati Letter Aa
- 0x0aa6, // U+0a87 : Gujarati Letter I
- 0x0aa7, // U+0a88 : Gujarati Letter Ii
- 0x0aa8, // U+0a89 : Gujarati Letter U
- 0x0aa9, // U+0a8a : Gujarati Letter Uu
- 0x0aaa, // U+0a8b : Gujarati Letter Vocalic R
- 0x0000, // U+0a8c : Undefined
- 0x0aae, // U+0a8d : Gujarati Vowel Candra E
- 0x0000, // U+0a8e : Undefined
- 0x0aab, // U+0a8f : Gujarati Letter E
- 0x0aad, // U+0a90 : Gujarati Letter Ai
- 0x0ab2, // U+0a91 : Gujarati Vowel Candra O
- 0x0000, // U+0a92 : Undefined
- 0x0ab0, // U+0a93 : Gujarati Letter O
- 0x0ab1, // U+0a94 : Gujarati Letter Au
- 0x0ab3, // U+0a95 : Gujarati Letter Ka
- 0x0ab4, // U+0a96 : Gujarati Letter Kha
- 0x0ab5, // U+0a97 : Gujarati Letter Ga
- 0x0ab6, // U+0a98 : Gujarati Letter Gha
- 0x0ab7, // U+0a99 : Gujarati Letter Nga
- 0x0ab8, // U+0a9a : Gujarati Letter Ca
- 0x0ab9, // U+0a9b : Gujarati Letter Cha
- 0x0aba, // U+0a9c : Gujarati Letter Ja
- 0x0abb, // U+0a9d : Gujarati Letter Jha
- 0x0abc, // U+0a9e : Gujarati Letter Nya
- 0x0abd, // U+0a9f : Gujarati Letter Tta
- 0x0abe, // U+0aa0 : Gujarati Letter Ttha
- 0x0abf, // U+0aa1 : Gujarati Letter Dda
- 0x0ac0, // U+0aa2 : Gujarati Letter Ddha
- 0x0ac1, // U+0aa3 : Gujarati Letter Nna
- 0x0ac2, // U+0aa4 : Gujarati Letter Ta
- 0x0ac3, // U+0aa5 : Gujarati Letter Tha
- 0x0ac4, // U+0aa6 : Gujarati Letter Da
- 0x0ac5, // U+0aa7 : Gujarati Letter Dha
- 0x0ac6, // U+0aa8 : Gujarati Letter Na
- 0x0000, // U+0aa9 : Undefined
- 0x0ac8, // U+0aaa : Gujarati Letter Pa
- 0x0ac9, // U+0aab : Gujarati Letter Pha
- 0x0aca, // U+0aac : Gujarati Letter Ba
- 0x0acb, // U+0aad : Gujarati Letter Bha
- 0x0acc, // U+0aae : Gujarati Letter Ma
- 0x0acd, // U+0aaf : Gujarati Letter Ya
- 0x0acf, // U+0ab0 : Gujarati Letter Ra
- 0x0000, // U+0ab1 : Undefined
- 0x0ad1, // U+0ab2 : Gujarati Letter La
- 0x0ad2, // U+0ab3 : Gujarati Letter Lla
- 0x0000, // U+0ab4 : Undefined
- 0x0ad4, // U+0ab5 : Gujarati Letter Va
- 0x0ad5, // U+0ab6 : Gujarati Letter Sha
- 0x0ad6, // U+0ab7 : Gujarati Letter Ssa
- 0x0ad7, // U+0ab8 : Gujarati Letter Sa
- 0x0ad8, // U+0ab9 : Gujarati Letter Ha
- 0x0000, // U+0aba : Undefined
- 0x0000, // U+0abb : Undefined
- 0x0ae9, // U+0abc : Gujarati Sign Nukta
- 0x1aea, // U+0abd : Gujarati Sign Avagraha
- 0x0ada, // U+0abe : Gujarati Vowel Sign Aa
- 0x0adb, // U+0abf : Gujarati Vowel Sign I
- 0x0adc, // U+0ac0 : Gujarati Vowel Sign Ii
- 0x0add, // U+0ac1 : Gujarati Vowel Sign U
- 0x0ade, // U+0ac2 : Gujarati Vowel Sign Uu
- 0x0adf, // U+0ac3 : Gujarati Vowel Sign Vocalic R
- 0x1adf, // U+0ac4 : Gujarati Vowel Sign Vocalic Rr
- 0x0ae3, // U+0ac5 : Gujarati Vowel Sign Candra E
- 0x0000, // U+0ac6 : Undefined
- 0x0ae0, // U+0ac7 : Gujarati Vowel Sign E
- 0x0ae2, // U+0ac8 : Gujarati Vowel Sign Ai
- 0x0ae7, // U+0ac9 : Gujarati Vowel Sign Candra O
- 0x0000, // U+0aca : Undefined
- 0x0ae4, // U+0acb : Gujarati Vowel Sign O
- 0x0ae6, // U+0acc : Gujarati Vowel Sign Au
- 0x0ae8, // U+0acd : Gujarati Sign Virama
- 0x0000, // U+0ace : Undefined
- 0x0000, // U+0acf : Undefined
- 0x1aa1, // U+0ad0 : Gujarati Om
- 0x0000, // U+0ad1 : Undefined
- 0x0000, // U+0ad2 : Undefined
- 0x0000, // U+0ad3 : Undefined
- 0x0000, // U+0ad4 : Undefined
- 0x0000, // U+0ad5 : Undefined
- 0x0000, // U+0ad6 : Undefined
- 0x0000, // U+0ad7 : Undefined
- 0x0000, // U+0ad8 : Undefined
- 0x0000, // U+0ad9 : Undefined
- 0x0000, // U+0ada : Undefined
- 0x0000, // U+0adb : Undefined
- 0x0000, // U+0adc : Undefined
- 0x0000, // U+0add : Undefined
- 0x0000, // U+0ade : Undefined
- 0x0000, // U+0adf : Undefined
- 0x1aaa, // U+0ae0 : Gujarati Letter Vocalic Rr
- 0x0000, // U+0ae1 : Undefined
- 0x0000, // U+0ae2 : Undefined
- 0x0000, // U+0ae3 : Undefined
- 0x0000, // U+0ae4 : Undefined
- 0x0000, // U+0ae5 : Undefined
- 0x0af1, // U+0ae6 : Gujarati Digit Zero
- 0x0af2, // U+0ae7 : Gujarati Digit One
- 0x0af3, // U+0ae8 : Gujarati Digit Two
- 0x0af4, // U+0ae9 : Gujarati Digit Three
- 0x0af5, // U+0aea : Gujarati Digit Four
- 0x0af6, // U+0aeb : Gujarati Digit Five
- 0x0af7, // U+0aec : Gujarati Digit Six
- 0x0af8, // U+0aed : Gujarati Digit Seven
- 0x0af9, // U+0aee : Gujarati Digit Eight
- 0x0afa, // U+0aef : Gujarati Digit Nine
- 0x0000, // U+0af0 : Undefined
- 0x0000, // U+0af1 : Undefined
- 0x0000, // U+0af2 : Undefined
- 0x0000, // U+0af3 : Undefined
- 0x0000, // U+0af4 : Undefined
- 0x0000, // U+0af5 : Undefined
- 0x0000, // U+0af6 : Undefined
- 0x0000, // U+0af7 : Undefined
- 0x0000, // U+0af8 : Undefined
- 0x0000, // U+0af9 : Undefined
- 0x0000, // U+0afa : Undefined
- 0x0000, // U+0afb : Undefined
- 0x0000, // U+0afc : Undefined
- 0x0000, // U+0afd : Undefined
- 0x0000, // U+0afe : Undefined
- 0x0000, // U+0aff : Undefined
- 0x0000, // U+0b00 : Undefined
- 0x07a1, // U+0b01 : Oriya Sign Candrabindu
- 0x07a2, // U+0b02 : Oriya Sign Anusvara
- 0x07a3, // U+0b03 : Oriya Sign Visarga
- 0x0000, // U+0b04 : Undefined
- 0x07a4, // U+0b05 : Oriya Letter A
- 0x07a5, // U+0b06 : Oriya Letter Aa
- 0x07a6, // U+0b07 : Oriya Letter I
- 0x07a7, // U+0b08 : Oriya Letter Ii
- 0x07a8, // U+0b09 : Oriya Letter U
- 0x07a9, // U+0b0a : Oriya Letter Uu
- 0x07aa, // U+0b0b : Oriya Letter Vocalic R
- 0x17a6, // U+0b0c : Oriya Letter Vocalic L
- 0x0000, // U+0b0d : Undefined
- 0x0000, // U+0b0e : Undefined
- 0x07ab, // U+0b0f : Oriya Letter E
- 0x07ad, // U+0b10 : Oriya Letter Ai
- 0x0000, // U+0b11 : Undefined
- 0x0000, // U+0b12 : Undefined
- 0x07b0, // U+0b13 : Oriya Letter O
- 0x07b1, // U+0b14 : Oriya Letter Au
- 0x07b3, // U+0b15 : Oriya Letter Ka
- 0x07b4, // U+0b16 : Oriya Letter Kha
- 0x07b5, // U+0b17 : Oriya Letter Ga
- 0x07b6, // U+0b18 : Oriya Letter Gha
- 0x07b7, // U+0b19 : Oriya Letter Nga
- 0x07b8, // U+0b1a : Oriya Letter Ca
- 0x07b9, // U+0b1b : Oriya Letter Cha
- 0x07ba, // U+0b1c : Oriya Letter Ja
- 0x07bb, // U+0b1d : Oriya Letter Jha
- 0x07bc, // U+0b1e : Oriya Letter Nya
- 0x07bd, // U+0b1f : Oriya Letter Tta
- 0x07be, // U+0b20 : Oriya Letter Ttha
- 0x07bf, // U+0b21 : Oriya Letter Dda
- 0x07c0, // U+0b22 : Oriya Letter Ddha
- 0x07c1, // U+0b23 : Oriya Letter Nna
- 0x07c2, // U+0b24 : Oriya Letter Ta
- 0x07c3, // U+0b25 : Oriya Letter Tha
- 0x07c4, // U+0b26 : Oriya Letter Da
- 0x07c5, // U+0b27 : Oriya Letter Dha
- 0x07c6, // U+0b28 : Oriya Letter Na
- 0x0000, // U+0b29 : Undefined
- 0x07c8, // U+0b2a : Oriya Letter Pa
- 0x07c9, // U+0b2b : Oriya Letter Pha
- 0x07ca, // U+0b2c : Oriya Letter Ba
- 0x07cb, // U+0b2d : Oriya Letter Bha
- 0x07cc, // U+0b2e : Oriya Letter Ma
- 0x07cd, // U+0b2f : Oriya Letter Ya
- 0x07cf, // U+0b30 : Oriya Letter Ra
- 0x0000, // U+0b31 : Undefined
- 0x07d1, // U+0b32 : Oriya Letter La
- 0x07d2, // U+0b33 : Oriya Letter Lla
- 0x0000, // U+0b34 : Undefined
- 0x0000, // U+0b35 : Undefined
- 0x07d5, // U+0b36 : Oriya Letter Sha
- 0x07d6, // U+0b37 : Oriya Letter Ssa
- 0x07d7, // U+0b38 : Oriya Letter Sa
- 0x07d8, // U+0b39 : Oriya Letter Ha
- 0x0000, // U+0b3a : Undefined
- 0x0000, // U+0b3b : Undefined
- 0x07e9, // U+0b3c : Oriya Sign Nukta
- 0x17ea, // U+0b3d : Oriya Sign Avagraha
- 0x07da, // U+0b3e : Oriya Vowel Sign Aa
- 0x07db, // U+0b3f : Oriya Vowel Sign I
- 0x07dc, // U+0b40 : Oriya Vowel Sign Ii
- 0x07dd, // U+0b41 : Oriya Vowel Sign U
- 0x07de, // U+0b42 : Oriya Vowel Sign Uu
- 0x07df, // U+0b43 : Oriya Vowel Sign Vocalic R
- 0x0000, // U+0b44 : Undefined
- 0x0000, // U+0b45 : Undefined
- 0x0000, // U+0b46 : Undefined
- 0x07e0, // U+0b47 : Oriya Vowel Sign E
- 0x07e2, // U+0b48 : Oriya Vowel Sign Ai
- 0x0000, // U+0b49 : Undefined
- 0x0000, // U+0b4a : Undefined
- 0x07e4, // U+0b4b : Oriya Vowel Sign O
- 0x07e6, // U+0b4c : Oriya Vowel Sign Au
- 0x07e8, // U+0b4d : Oriya Sign Virama
- 0x0000, // U+0b4e : Undefined
- 0x0000, // U+0b4f : Undefined
- 0x0000, // U+0b50 : Undefined
- 0x0000, // U+0b51 : Undefined
- 0x0000, // U+0b52 : Undefined
- 0x0000, // U+0b53 : Undefined
- 0x0000, // U+0b54 : Undefined
- 0x0000, // U+0b55 : Undefined
- 0x0000, // U+0b56 : Oriya Ai Length Mark
- 0x0000, // U+0b57 : Oriya Au Length Mark
- 0x0000, // U+0b58 : Undefined
- 0x0000, // U+0b59 : Undefined
- 0x0000, // U+0b5a : Undefined
- 0x0000, // U+0b5b : Undefined
- 0x17bf, // U+0b5c : Oriya Letter Rra
- 0x17c0, // U+0b5d : Oriya Letter Rha
- 0x0000, // U+0b5e : Undefined
- 0x07ce, // U+0b5f : Oriya Letter Yya
- 0x17aa, // U+0b60 : Oriya Letter Vocalic Rr
- 0x17a7, // U+0b61 : Oriya Letter Vocalic Ll
- 0x0000, // U+0b62 : Undefined
- 0x0000, // U+0b63 : Undefined
- 0x0000, // U+0b64 : Undefined
- 0x0000, // U+0b65 : Undefined
- 0x07f1, // U+0b66 : Oriya Digit Zero
- 0x07f2, // U+0b67 : Oriya Digit One
- 0x07f3, // U+0b68 : Oriya Digit Two
- 0x07f4, // U+0b69 : Oriya Digit Three
- 0x07f5, // U+0b6a : Oriya Digit Four
- 0x07f6, // U+0b6b : Oriya Digit Five
- 0x07f7, // U+0b6c : Oriya Digit Six
- 0x07f8, // U+0b6d : Oriya Digit Seven
- 0x07f9, // U+0b6e : Oriya Digit Eight
- 0x07fa, // U+0b6f : Oriya Digit Nine
- 0x0000, // U+0b70 : Oriya Isshar
- 0x0000, // U+0b71 : Undefined
- 0x0000, // U+0b72 : Undefined
- 0x0000, // U+0b73 : Undefined
- 0x0000, // U+0b74 : Undefined
- 0x0000, // U+0b75 : Undefined
- 0x0000, // U+0b76 : Undefined
- 0x0000, // U+0b77 : Undefined
- 0x0000, // U+0b78 : Undefined
- 0x0000, // U+0b79 : Undefined
- 0x0000, // U+0b7a : Undefined
- 0x0000, // U+0b7b : Undefined
- 0x0000, // U+0b7c : Undefined
- 0x0000, // U+0b7d : Undefined
- 0x0000, // U+0b7e : Undefined
- 0x0000, // U+0b7f : Undefined
- 0x0000, // U+0b80 : Undefined
- 0x0000, // U+0b81 : Undefined
- 0x04a2, // U+0b82 : Tamil Sign Anusvara
- 0x04a3, // U+0b83 : Tamil Sign Visarga
- 0x0000, // U+0b84 : Undefined
- 0x04a4, // U+0b85 : Tamil Letter A
- 0x04a5, // U+0b86 : Tamil Letter Aa
- 0x04a6, // U+0b87 : Tamil Letter I
- 0x04a7, // U+0b88 : Tamil Letter Ii
- 0x04a8, // U+0b89 : Tamil Letter U
- 0x04a9, // U+0b8a : Tamil Letter Uu
- 0x0000, // U+0b8b : Undefined
- 0x0000, // U+0b8c : Undefined
- 0x0000, // U+0b8d : Undefined
- 0x0000, // U+0b8e : Tamil Letter E
- 0x04ab, // U+0b8f : Tamil Letter Ee
- 0x04ad, // U+0b90 : Tamil Letter Ai
- 0x0000, // U+0b91 : Undefined
- 0x04af, // U+0b92 : Tamil Letter O
- 0x04b0, // U+0b93 : Tamil Letter Oo
- 0x04b1, // U+0b94 : Tamil Letter Au
- 0x04b3, // U+0b95 : Tamil Letter Ka
- 0x0000, // U+0b96 : Undefined
- 0x0000, // U+0b97 : Undefined
- 0x0000, // U+0b98 : Undefined
- 0x04b7, // U+0b99 : Tamil Letter Nga
- 0x04b8, // U+0b9a : Tamil Letter Ca
- 0x0000, // U+0b9b : Undefined
- 0x04ba, // U+0b9c : Tamil Letter Ja
- 0x0000, // U+0b9d : Undefined
- 0x04bc, // U+0b9e : Tamil Letter Nya
- 0x04bd, // U+0b9f : Tamil Letter Tta
- 0x0000, // U+0ba0 : Undefined
- 0x0000, // U+0ba1 : Undefined
- 0x0000, // U+0ba2 : Undefined
- 0x04c1, // U+0ba3 : Tamil Letter Nna
- 0x04c2, // U+0ba4 : Tamil Letter Ta
- 0x0000, // U+0ba5 : Undefined
- 0x0000, // U+0ba6 : Undefined
- 0x0000, // U+0ba7 : Undefined
- 0x04c6, // U+0ba8 : Tamil Letter Na
- 0x04c7, // U+0ba9 : Tamil Letter Nnna
- 0x04c8, // U+0baa : Tamil Letter Pa
- 0x0000, // U+0bab : Undefined
- 0x0000, // U+0bac : Undefined
- 0x0000, // U+0bad : Undefined
- 0x04cc, // U+0bae : Tamil Letter Ma
- 0x04cd, // U+0baf : Tamil Letter Ya
- 0x04cf, // U+0bb0 : Tamil Letter Ra
- 0x04d0, // U+0bb1 : Tamil Letter Rra
- 0x04d1, // U+0bb2 : Tamil Letter La
- 0x04d2, // U+0bb3 : Tamil Letter Lla
- 0x04d3, // U+0bb4 : Tamil Letter Llla
- 0x04d4, // U+0bb5 : Tamil Letter Va
- 0x0000, // U+0bb6 : Undefined
- 0x04d5, // U+0bb7 : Tamil Letter Ssa
- 0x04d7, // U+0bb8 : Tamil Letter Sa
- 0x04d8, // U+0bb9 : Tamil Letter Ha
- 0x0000, // U+0bba : Undefined
- 0x0000, // U+0bbb : Undefined
- 0x0000, // U+0bbc : Undefined
- 0x0000, // U+0bbd : Undefined
- 0x04da, // U+0bbe : Tamil Vowel Sign Aa
- 0x04db, // U+0bbf : Tamil Vowel Sign I
- 0x04dc, // U+0bc0 : Tamil Vowel Sign Ii
- 0x04dd, // U+0bc1 : Tamil Vowel Sign U
- 0x04de, // U+0bc2 : Tamil Vowel Sign Uu
- 0x0000, // U+0bc3 : Undefined
- 0x0000, // U+0bc4 : Undefined
- 0x0000, // U+0bc5 : Undefined
- 0x04e0, // U+0bc6 : Tamil Vowel Sign E
- 0x04e1, // U+0bc7 : Tamil Vowel Sign Ee
- 0x04e2, // U+0bc8 : Tamil Vowel Sign Ai
- 0x0000, // U+0bc9 : Undefined
- 0x04e4, // U+0bca : Tamil Vowel Sign O
- 0x04e5, // U+0bcb : Tamil Vowel Sign Oo
- 0x04e6, // U+0bcc : Tamil Vowel Sign Au
- 0x04e8, // U+0bcd : Tamil Sign Virama
- 0x0000, // U+0bce : Undefined
- 0x0000, // U+0bcf : Undefined
- 0x0000, // U+0bd0 : Undefined
- 0x0000, // U+0bd1 : Undefined
- 0x0000, // U+0bd2 : Undefined
- 0x0000, // U+0bd3 : Undefined
- 0x0000, // U+0bd4 : Undefined
- 0x0000, // U+0bd5 : Undefined
- 0x0000, // U+0bd6 : Undefined
- 0x0000, // U+0bd7 : Tamil Au Length Mark
- 0x0000, // U+0bd8 : Undefined
- 0x0000, // U+0bd9 : Undefined
- 0x0000, // U+0bda : Undefined
- 0x0000, // U+0bdb : Undefined
- 0x0000, // U+0bdc : Undefined
- 0x0000, // U+0bdd : Undefined
- 0x0000, // U+0bde : Undefined
- 0x0000, // U+0bdf : Undefined
- 0x0000, // U+0be0 : Undefined
- 0x0000, // U+0be1 : Undefined
- 0x0000, // U+0be2 : Undefined
- 0x0000, // U+0be3 : Undefined
- 0x0000, // U+0be4 : Undefined
- 0x0000, // U+0be5 : Undefined
- 0x0000, // U+0be6 : Undefined
- 0x04f2, // U+0be7 : Tamil Digit One
- 0x04f3, // U+0be8 : Tamil Digit Two
- 0x04f4, // U+0be9 : Tamil Digit Three
- 0x04f5, // U+0bea : Tamil Digit Four
- 0x04f6, // U+0beb : Tamil Digit Five
- 0x04f7, // U+0bec : Tamil Digit Six
- 0x04f8, // U+0bed : Tamil Digit Seven
- 0x04f9, // U+0bee : Tamil Digit Eight
- 0x04fa, // U+0bef : Tamil Digit Nine
- 0x0000, // U+0bf0 : Tamil Number Ten
- 0x0000, // U+0bf1 : Tamil Number One Hundred
- 0x0000, // U+0bf2 : Tamil Number One Thousand
- 0x0000, // U+0bf3 : Undefined
- 0x0000, // U+0bf4 : Undefined
- 0x0000, // U+0bf5 : Undefined
- 0x0000, // U+0bf6 : Undefined
- 0x0000, // U+0bf7 : Undefined
- 0x0000, // U+0bf8 : Undefined
- 0x0000, // U+0bf9 : Undefined
- 0x0000, // U+0bfa : Undefined
- 0x0000, // U+0bfb : Undefined
- 0x0000, // U+0bfc : Undefined
- 0x0000, // U+0bfd : Undefined
- 0x0000, // U+0bfe : Undefined
- 0x0000, // U+0bff : Undefined
- 0x0000, // U+0c00 : Undefined
- 0x05a1, // U+0c01 : Telugu Sign Candrabindu
- 0x05a2, // U+0c02 : Telugu Sign Anusvara
- 0x05a3, // U+0c03 : Telugu Sign Visarga
- 0x0000, // U+0c04 : Undefined
- 0x05a4, // U+0c05 : Telugu Letter A
- 0x05a5, // U+0c06 : Telugu Letter Aa
- 0x05a6, // U+0c07 : Telugu Letter I
- 0x05a7, // U+0c08 : Telugu Letter Ii
- 0x05a8, // U+0c09 : Telugu Letter U
- 0x05a9, // U+0c0a : Telugu Letter Uu
- 0x05aa, // U+0c0b : Telugu Letter Vocalic R
- 0x15a6, // U+0c0c : Telugu Letter Vocalic L
- 0x0000, // U+0c0d : Undefined
- 0x05ab, // U+0c0e : Telugu Letter E
- 0x05ac, // U+0c0f : Telugu Letter Ee
- 0x05ad, // U+0c10 : Telugu Letter Ai
- 0x0000, // U+0c11 : Undefined
- 0x05af, // U+0c12 : Telugu Letter O
- 0x05b0, // U+0c13 : Telugu Letter Oo
- 0x05b1, // U+0c14 : Telugu Letter Au
- 0x05b3, // U+0c15 : Telugu Letter Ka
- 0x05b4, // U+0c16 : Telugu Letter Kha
- 0x05b5, // U+0c17 : Telugu Letter Ga
- 0x05b6, // U+0c18 : Telugu Letter Gha
- 0x05b7, // U+0c19 : Telugu Letter Nga
- 0x05b8, // U+0c1a : Telugu Letter Ca
- 0x05b9, // U+0c1b : Telugu Letter Cha
- 0x05ba, // U+0c1c : Telugu Letter Ja
- 0x05bb, // U+0c1d : Telugu Letter Jha
- 0x05bc, // U+0c1e : Telugu Letter Nya
- 0x05bd, // U+0c1f : Telugu Letter Tta
- 0x05be, // U+0c20 : Telugu Letter Ttha
- 0x05bf, // U+0c21 : Telugu Letter Dda
- 0x05c0, // U+0c22 : Telugu Letter Ddha
- 0x05c1, // U+0c23 : Telugu Letter Nna
- 0x05c2, // U+0c24 : Telugu Letter Ta
- 0x05c3, // U+0c25 : Telugu Letter Tha
- 0x05c4, // U+0c26 : Telugu Letter Da
- 0x05c5, // U+0c27 : Telugu Letter Dha
- 0x05c6, // U+0c28 : Telugu Letter Na
- 0x0000, // U+0c29 : Undefined
- 0x05c8, // U+0c2a : Telugu Letter Pa
- 0x05c9, // U+0c2b : Telugu Letter Pha
- 0x05ca, // U+0c2c : Telugu Letter Ba
- 0x05cb, // U+0c2d : Telugu Letter Bha
- 0x05cc, // U+0c2e : Telugu Letter Ma
- 0x05cd, // U+0c2f : Telugu Letter Ya
- 0x05cf, // U+0c30 : Telugu Letter Ra
- 0x05d0, // U+0c31 : Telugu Letter Rra
- 0x05d1, // U+0c32 : Telugu Letter La
- 0x05d2, // U+0c33 : Telugu Letter Lla
- 0x0000, // U+0c34 : Undefined
- 0x05d4, // U+0c35 : Telugu Letter Va
- 0x05d5, // U+0c36 : Telugu Letter Sha
- 0x05d6, // U+0c37 : Telugu Letter Ssa
- 0x05d7, // U+0c38 : Telugu Letter Sa
- 0x05d8, // U+0c39 : Telugu Letter Ha
- 0x0000, // U+0c3a : Undefined
- 0x0000, // U+0c3b : Undefined
- 0x0000, // U+0c3c : Undefined
- 0x0000, // U+0c3d : Undefined
- 0x05da, // U+0c3e : Telugu Vowel Sign Aa
- 0x05db, // U+0c3f : Telugu Vowel Sign I
- 0x05dc, // U+0c40 : Telugu Vowel Sign Ii
- 0x05dd, // U+0c41 : Telugu Vowel Sign U
- 0x05de, // U+0c42 : Telugu Vowel Sign Uu
- 0x05df, // U+0c43 : Telugu Vowel Sign Vocalic R
- 0x15df, // U+0c44 : Telugu Vowel Sign Vocalic Rr
- 0x0000, // U+0c45 : Undefined
- 0x05e0, // U+0c46 : Telugu Vowel Sign E
- 0x05e1, // U+0c47 : Telugu Vowel Sign Ee
- 0x05e2, // U+0c48 : Telugu Vowel Sign Ai
- 0x0000, // U+0c49 : Undefined
- 0x05e4, // U+0c4a : Telugu Vowel Sign O
- 0x05e5, // U+0c4b : Telugu Vowel Sign Oo
- 0x05e6, // U+0c4c : Telugu Vowel Sign Au
- 0x05e8, // U+0c4d : Telugu Sign Virama
- 0x0000, // U+0c4e : Undefined
- 0x0000, // U+0c4f : Undefined
- 0x0000, // U+0c50 : Undefined
- 0x0000, // U+0c51 : Undefined
- 0x0000, // U+0c52 : Undefined
- 0x0000, // U+0c53 : Undefined
- 0x0000, // U+0c54 : Undefined
- 0x0000, // U+0c55 : Telugu Length Mark
- 0x0000, // U+0c56 : Telugu Ai Length Mark
- 0x0000, // U+0c57 : Undefined
- 0x0000, // U+0c58 : Undefined
- 0x0000, // U+0c59 : Undefined
- 0x0000, // U+0c5a : Undefined
- 0x0000, // U+0c5b : Undefined
- 0x0000, // U+0c5c : Undefined
- 0x0000, // U+0c5d : Undefined
- 0x0000, // U+0c5e : Undefined
- 0x0000, // U+0c5f : Undefined
- 0x15aa, // U+0c60 : Telugu Letter Vocalic Rr
- 0x15a7, // U+0c61 : Telugu Letter Vocalic Ll
- 0x0000, // U+0c62 : Undefined
- 0x0000, // U+0c63 : Undefined
- 0x0000, // U+0c64 : Undefined
- 0x0000, // U+0c65 : Undefined
- 0x05f1, // U+0c66 : Telugu Digit Zero
- 0x05f2, // U+0c67 : Telugu Digit One
- 0x05f3, // U+0c68 : Telugu Digit Two
- 0x05f4, // U+0c69 : Telugu Digit Three
- 0x05f5, // U+0c6a : Telugu Digit Four
- 0x05f6, // U+0c6b : Telugu Digit Five
- 0x05f7, // U+0c6c : Telugu Digit Six
- 0x05f8, // U+0c6d : Telugu Digit Seven
- 0x05f9, // U+0c6e : Telugu Digit Eight
- 0x05fa, // U+0c6f : Telugu Digit Nine
- 0x0000, // U+0c70 : Undefined
- 0x0000, // U+0c71 : Undefined
- 0x0000, // U+0c72 : Undefined
- 0x0000, // U+0c73 : Undefined
- 0x0000, // U+0c74 : Undefined
- 0x0000, // U+0c75 : Undefined
- 0x0000, // U+0c76 : Undefined
- 0x0000, // U+0c77 : Undefined
- 0x0000, // U+0c78 : Undefined
- 0x0000, // U+0c79 : Undefined
- 0x0000, // U+0c7a : Undefined
- 0x0000, // U+0c7b : Undefined
- 0x0000, // U+0c7c : Undefined
- 0x0000, // U+0c7d : Undefined
- 0x0000, // U+0c7e : Undefined
- 0x0000, // U+0c7f : Undefined
- 0x0000, // U+0c80 : Undefined
- 0x0000, // U+0c81 : Undefined
- 0x08a2, // U+0c82 : Kannada Sign Anusvara
- 0x08a3, // U+0c83 : Kannada Sign Visarga
- 0x0000, // U+0c84 : Undefined
- 0x08a4, // U+0c85 : Kannada Letter A
- 0x08a5, // U+0c86 : Kannada Letter Aa
- 0x08a6, // U+0c87 : Kannada Letter I
- 0x08a7, // U+0c88 : Kannada Letter Ii
- 0x08a8, // U+0c89 : Kannada Letter U
- 0x08a9, // U+0c8a : Kannada Letter Uu
- 0x08aa, // U+0c8b : Kannada Letter Vocalic R
- 0x18a6, // U+0c8c : Kannada Letter Vocalic L
- 0x0000, // U+0c8d : Undefined
- 0x08ab, // U+0c8e : Kannada Letter E
- 0x08ac, // U+0c8f : Kannada Letter Ee
- 0x08ad, // U+0c90 : Kannada Letter Ai
- 0x0000, // U+0c91 : Undefined
- 0x08af, // U+0c92 : Kannada Letter O
- 0x08b0, // U+0c93 : Kannada Letter Oo
- 0x08b1, // U+0c94 : Kannada Letter Au
- 0x08b3, // U+0c95 : Kannada Letter Ka
- 0x08b4, // U+0c96 : Kannada Letter Kha
- 0x08b5, // U+0c97 : Kannada Letter Ga
- 0x08b6, // U+0c98 : Kannada Letter Gha
- 0x08b7, // U+0c99 : Kannada Letter Nga
- 0x08b8, // U+0c9a : Kannada Letter Ca
- 0x08b9, // U+0c9b : Kannada Letter Cha
- 0x08ba, // U+0c9c : Kannada Letter Ja
- 0x08bb, // U+0c9d : Kannada Letter Jha
- 0x08bc, // U+0c9e : Kannada Letter Nya
- 0x08bd, // U+0c9f : Kannada Letter Tta
- 0x08be, // U+0ca0 : Kannada Letter Ttha
- 0x08bf, // U+0ca1 : Kannada Letter Dda
- 0x08c0, // U+0ca2 : Kannada Letter Ddha
- 0x08c1, // U+0ca3 : Kannada Letter Nna
- 0x08c2, // U+0ca4 : Kannada Letter Ta
- 0x08c3, // U+0ca5 : Kannada Letter Tha
- 0x08c4, // U+0ca6 : Kannada Letter Da
- 0x08c5, // U+0ca7 : Kannada Letter Dha
- 0x08c6, // U+0ca8 : Kannada Letter Na
- 0x0000, // U+0ca9 : Undefined
- 0x08c8, // U+0caa : Kannada Letter Pa
- 0x08c9, // U+0cab : Kannada Letter Pha
- 0x08ca, // U+0cac : Kannada Letter Ba
- 0x08cb, // U+0cad : Kannada Letter Bha
- 0x08cc, // U+0cae : Kannada Letter Ma
- 0x08cd, // U+0caf : Kannada Letter Ya
- 0x08cf, // U+0cb0 : Kannada Letter Ra
- 0x08d0, // U+0cb1 : Kannada Letter Rra
- 0x08d1, // U+0cb2 : Kannada Letter La
- 0x08d2, // U+0cb3 : Kannada Letter Lla
- 0x0000, // U+0cb4 : Undefined
- 0x08d4, // U+0cb5 : Kannada Letter Va
- 0x08d5, // U+0cb6 : Kannada Letter Sha
- 0x08d6, // U+0cb7 : Kannada Letter Ssa
- 0x08d7, // U+0cb8 : Kannada Letter Sa
- 0x08d8, // U+0cb9 : Kannada Letter Ha
- 0x0000, // U+0cba : Undefined
- 0x0000, // U+0cbb : Undefined
- 0x0000, // U+0cbc : Undefined
- 0x0000, // U+0cbd : Undefined
- 0x08da, // U+0cbe : Kannada Vowel Sign Aa
- 0x08db, // U+0cbf : Kannada Vowel Sign I
- 0x08dc, // U+0cc0 : Kannada Vowel Sign Ii
- 0x08dd, // U+0cc1 : Kannada Vowel Sign U
- 0x08de, // U+0cc2 : Kannada Vowel Sign Uu
- 0x08df, // U+0cc3 : Kannada Vowel Sign Vocalic R
- 0x18df, // U+0cc4 : Kannada Vowel Sign Vocalic Rr
- 0x0000, // U+0cc5 : Undefined
- 0x08e0, // U+0cc6 : Kannada Vowel Sign E
- 0x08e1, // U+0cc7 : Kannada Vowel Sign Ee
- 0x08e2, // U+0cc8 : Kannada Vowel Sign Ai
- 0x0000, // U+0cc9 : Undefined
- 0x08e4, // U+0cca : Kannada Vowel Sign O
- 0x08e5, // U+0ccb : Kannada Vowel Sign Oo
- 0x08e6, // U+0ccc : Kannada Vowel Sign Au
- 0x08e8, // U+0ccd : Kannada Sign Virama
- 0x0000, // U+0cce : Undefined
- 0x0000, // U+0ccf : Undefined
- 0x0000, // U+0cd0 : Undefined
- 0x0000, // U+0cd1 : Undefined
- 0x0000, // U+0cd2 : Undefined
- 0x0000, // U+0cd3 : Undefined
- 0x0000, // U+0cd4 : Undefined
- 0x0000, // U+0cd5 : Kannada Length Mark
- 0x0000, // U+0cd6 : Kannada Ai Length Mark
- 0x0000, // U+0cd7 : Undefined
- 0x0000, // U+0cd8 : Undefined
- 0x0000, // U+0cd9 : Undefined
- 0x0000, // U+0cda : Undefined
- 0x0000, // U+0cdb : Undefined
- 0x0000, // U+0cdc : Undefined
- 0x0000, // U+0cdd : Undefined
- 0x18c9, // U+0cde : Kannada Letter Fa
- 0x0000, // U+0cdf : Undefined
- 0x18aa, // U+0ce0 : Kannada Letter Vocalic Rr
- 0x18a7, // U+0ce1 : Kannada Letter Vocalic Ll
- 0x0000, // U+0ce2 : Undefined
- 0x0000, // U+0ce3 : Undefined
- 0x0000, // U+0ce4 : Undefined
- 0x0000, // U+0ce5 : Undefined
- 0x08f1, // U+0ce6 : Kannada Digit Zero
- 0x08f2, // U+0ce7 : Kannada Digit One
- 0x08f3, // U+0ce8 : Kannada Digit Two
- 0x08f4, // U+0ce9 : Kannada Digit Three
- 0x08f5, // U+0cea : Kannada Digit Four
- 0x08f6, // U+0ceb : Kannada Digit Five
- 0x08f7, // U+0cec : Kannada Digit Six
- 0x08f8, // U+0ced : Kannada Digit Seven
- 0x08f9, // U+0cee : Kannada Digit Eight
- 0x08fa, // U+0cef : Kannada Digit Nine
- 0x0000, // U+0cf0 : Undefined
- 0x0000, // U+0cf1 : Undefined
- 0x0000, // U+0cf2 : Undefined
- 0x0000, // U+0cf3 : Undefined
- 0x0000, // U+0cf4 : Undefined
- 0x0000, // U+0cf5 : Undefined
- 0x0000, // U+0cf6 : Undefined
- 0x0000, // U+0cf7 : Undefined
- 0x0000, // U+0cf8 : Undefined
- 0x0000, // U+0cf9 : Undefined
- 0x0000, // U+0cfa : Undefined
- 0x0000, // U+0cfb : Undefined
- 0x0000, // U+0cfc : Undefined
- 0x0000, // U+0cfd : Undefined
- 0x0000, // U+0cfe : Undefined
- 0x0000, // U+0cff : Undefined
- 0x0000, // U+0d00 : Undefined
- 0x0000, // U+0d01 : Undefined
- 0x09a2, // U+0d02 : Malayalam Sign Anusvara
- 0x09a3, // U+0d03 : Malayalam Sign Visarga
- 0x0000, // U+0d04 : Undefined
- 0x09a4, // U+0d05 : Malayalam Letter A
- 0x09a5, // U+0d06 : Malayalam Letter Aa
- 0x09a6, // U+0d07 : Malayalam Letter I
- 0x09a7, // U+0d08 : Malayalam Letter Ii
- 0x09a8, // U+0d09 : Malayalam Letter U
- 0x09a9, // U+0d0a : Malayalam Letter Uu
- 0x09aa, // U+0d0b : Malayalam Letter Vocalic R
- 0x19a6, // U+0d0c : Malayalam Letter Vocalic L
- 0x0000, // U+0d0d : Undefined
- 0x09ab, // U+0d0e : Malayalam Letter E
- 0x09ac, // U+0d0f : Malayalam Letter Ee
- 0x09ad, // U+0d10 : Malayalam Letter Ai
- 0x0000, // U+0d11 : Undefined
- 0x09af, // U+0d12 : Malayalam Letter O
- 0x09b0, // U+0d13 : Malayalam Letter Oo
- 0x09b1, // U+0d14 : Malayalam Letter Au
- 0x09b3, // U+0d15 : Malayalam Letter Ka
- 0x09b4, // U+0d16 : Malayalam Letter Kha
- 0x09b5, // U+0d17 : Malayalam Letter Ga
- 0x09b6, // U+0d18 : Malayalam Letter Gha
- 0x09b7, // U+0d19 : Malayalam Letter Nga
- 0x09b8, // U+0d1a : Malayalam Letter Ca
- 0x09b9, // U+0d1b : Malayalam Letter Cha
- 0x09ba, // U+0d1c : Malayalam Letter Ja
- 0x09bb, // U+0d1d : Malayalam Letter Jha
- 0x09bc, // U+0d1e : Malayalam Letter Nya
- 0x09bd, // U+0d1f : Malayalam Letter Tta
- 0x09be, // U+0d20 : Malayalam Letter Ttha
- 0x09bf, // U+0d21 : Malayalam Letter Dda
- 0x09c0, // U+0d22 : Malayalam Letter Ddha
- 0x09c1, // U+0d23 : Malayalam Letter Nna
- 0x09c2, // U+0d24 : Malayalam Letter Ta
- 0x09c3, // U+0d25 : Malayalam Letter Tha
- 0x09c4, // U+0d26 : Malayalam Letter Da
- 0x09c5, // U+0d27 : Malayalam Letter Dha
- 0x09c6, // U+0d28 : Malayalam Letter Na
- 0x0000, // U+0d29 : Undefined
- 0x09c8, // U+0d2a : Malayalam Letter Pa
- 0x09c9, // U+0d2b : Malayalam Letter Pha
- 0x09ca, // U+0d2c : Malayalam Letter Ba
- 0x09cb, // U+0d2d : Malayalam Letter Bha
- 0x09cc, // U+0d2e : Malayalam Letter Ma
- 0x09cd, // U+0d2f : Malayalam Letter Ya
- 0x09cf, // U+0d30 : Malayalam Letter Ra
- 0x09d0, // U+0d31 : Malayalam Letter Rra
- 0x09d1, // U+0d32 : Malayalam Letter La
- 0x09d2, // U+0d33 : Malayalam Letter Lla
- 0x09d3, // U+0d34 : Malayalam Letter Llla
- 0x09d4, // U+0d35 : Malayalam Letter Va
- 0x09d5, // U+0d36 : Malayalam Letter Sha
- 0x09d6, // U+0d37 : Malayalam Letter Ssa
- 0x09d7, // U+0d38 : Malayalam Letter Sa
- 0x09d8, // U+0d39 : Malayalam Letter Ha
- 0x0000, // U+0d3a : Undefined
- 0x0000, // U+0d3b : Undefined
- 0x0000, // U+0d3c : Undefined
- 0x0000, // U+0d3d : Undefined
- 0x09da, // U+0d3e : Malayalam Vowel Sign Aa
- 0x09db, // U+0d3f : Malayalam Vowel Sign I
- 0x09dc, // U+0d40 : Malayalam Vowel Sign Ii
- 0x09dd, // U+0d41 : Malayalam Vowel Sign U
- 0x09de, // U+0d42 : Malayalam Vowel Sign Uu
- 0x09df, // U+0d43 : Malayalam Vowel Sign Vocalic R
- 0x0000, // U+0d44 : Undefined
- 0x0000, // U+0d45 : Undefined
- 0x09e0, // U+0d46 : Malayalam Vowel Sign E
- 0x09e1, // U+0d47 : Malayalam Vowel Sign Ee
- 0x09e2, // U+0d48 : Malayalam Vowel Sign Ai
- 0x0000, // U+0d49 : Undefined
- 0x09e4, // U+0d4a : Malayalam Vowel Sign O
- 0x09e5, // U+0d4b : Malayalam Vowel Sign Oo
- 0x09e6, // U+0d4c : Malayalam Vowel Sign Au
- 0x09e8, // U+0d4d : Malayalam Sign Virama
- 0x0000, // U+0d4e : Undefined
- 0x0000, // U+0d4f : Undefined
- 0x0000, // U+0d50 : Undefined
- 0x0000, // U+0d51 : Undefined
- 0x0000, // U+0d52 : Undefined
- 0x0000, // U+0d53 : Undefined
- 0x0000, // U+0d54 : Undefined
- 0x0000, // U+0d55 : Undefined
- 0x0000, // U+0d56 : Undefined
- 0x0000, // U+0d57 : Malayalam Au Length Mark
- 0x0000, // U+0d58 : Undefined
- 0x0000, // U+0d59 : Undefined
- 0x0000, // U+0d5a : Undefined
- 0x0000, // U+0d5b : Undefined
- 0x0000, // U+0d5c : Undefined
- 0x0000, // U+0d5d : Undefined
- 0x0000, // U+0d5e : Undefined
- 0x0000, // U+0d5f : Undefined
- 0x19aa, // U+0d60 : Malayalam Letter Vocalic Rr
- 0x19a7, // U+0d61 : Malayalam Letter Vocalic Ll
- 0x0000, // U+0d62 : Undefined
- 0x0000, // U+0d63 : Undefined
- 0x0000, // U+0d64 : Undefined
- 0x0000, // U+0d65 : Undefined
- 0x09f1, // U+0d66 : Malayalam Digit Zero
- 0x09f2, // U+0d67 : Malayalam Digit One
- 0x09f3, // U+0d68 : Malayalam Digit Two
- 0x09f4, // U+0d69 : Malayalam Digit Three
- 0x09f5, // U+0d6a : Malayalam Digit Four
- 0x09f6, // U+0d6b : Malayalam Digit Five
- 0x09f7, // U+0d6c : Malayalam Digit Six
- 0x09f8, // U+0d6d : Malayalam Digit Seven
- 0x09f9, // U+0d6e : Malayalam Digit Eight
- 0x09fa // U+0d6f : Malayalam Digit Nine
- };
-
- ////////////////////////////////////////////////////////////////////////////
- // SecondIndicByte
- //
- // This is used if the UnicodeToIndic table 4 high bits are set, this is
- // the value of the second Indic byte when applicable.
- ////////////////////////////////////////////////////////////////////////////
- static byte[] SecondIndicByte =
- {
- 0x00,
- 0xe9,
- 0xb8, // U+0952 == 0xf0_0xb8
- 0xbf // U+0970 == 0xf0_0xbf
- };
-
- ////////////////////////////////////////////////////////////////////////////
- // IndicMapping
- //
- // This table maps the 10 indic code pages to their unicode counterparts.
- // There are 0x60 characters in each table. The tables are in pairs of 2
- // (1st char, 2nd char) and there are 10 tables (1 for each code page "font")
- ////////////////////////////////////////////////////////////////////////////
- static int[] IndicMappingIndex =
- {
- -1, // 0 DEF 0X40 Default // Not a real code page
- -1, // 1 RMN 0X41 Roman // Transliteration not supported
- 0, // 2 DEV 0X42 Devanagari
- 1, // 3 BNG 0X43 Bengali
- 2, // 4 TML 0X44 Tamil
- 3, // 5 TLG 0X45 Telugu
- 1, // 6 ASM 0X46 Assamese (Bengali) - Reuses table 1
- 4, // 7 ORI 0X47 Oriya
- 5, // 8 KND 0X48 Kannada
- 6, // 9 MLM 0X49 Malayalam
- 7, // 10 GJR 0X4A Gujarati
- 8 // 11 PNJ 0X4B Punjabi (Gurmukhi)
- };
-
- ////////////////////////////////////////////////////////////////////////////
- // IndicMapping
- //
- // This table contains 9 tables for the 10 indic code pages to their unicode counterparts.
- // There are 0x60 characters in each table. The tables are in pairs of 2
- // (1st char, 2nd char) and there are 10 tables (1 for each code page "font")
- //
- // The first index is the table index (from the IndicMappingIndex table),
- // the 2nd the byte index, the third the character index.
- //
- // For byte 0 a 0x0000 value indicates an unknown character
- // For byte 1 a 0 value indicates no special attributes.
- // For byte 1, 200C & 200D are Virama, Nukta special cases
- // For byte 1, B8BF is Devanagari stress & abbreviation sign special cases
- //
- // WARNING: When copying these from windows, ? 0x003F were changed to 0x0000.
- //
- ////////////////////////////////////////////////////////////////////////////
- // char[codePageMapIndex][byte][character]
- static char[,,] IndicMapping =
- {
- {
- ////////////////////////////////////////////////////////////////////////////
- //
- // Devanagari Table 0, Code Page (2, 0x42, 57002)
- //
- ////////////////////////////////////////////////////////////////////////////
-
- // Default Unicode Char
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0000', '\x0901', '\x0902', '\x0903', '\x0905', '\x0906', '\x0907', '\x0908',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0909', '\x090a', '\x090b', '\x090e', '\x090f', '\x0910', '\x090d', '\x0912',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0913', '\x0914', '\x0911', '\x0915', '\x0916', '\x0917', '\x0918', '\x0919',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x091a', '\x091b', '\x091c', '\x091d', '\x091e', '\x091f', '\x0920', '\x0921',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0922', '\x0923', '\x0924', '\x0925', '\x0926', '\x0927', '\x0928', '\x0929',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x092a', '\x092b', '\x092c', '\x092d', '\x092e', '\x092f', '\x095f', '\x0930',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0931', '\x0932', '\x0933', '\x0934', '\x0935', '\x0936', '\x0937', '\x0938',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0939', '\x0000', '\x093e', '\x093f', '\x0940', '\x0941', '\x0942', '\x0943',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0946', '\x0947', '\x0948', '\x0945', '\x094a', '\x094b', '\x094c', '\x0949',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x094d', '\x093c', '\x0964', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0000', '\x0966', '\x0967', '\x0968', '\x0969', '\x096a', '\x096b', '\x096c',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x096d', '\x096e', '\x096f', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000'
- },
-
- // Alternate Unicode Char & Flags
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0', '\x0950', '\x0', '\x0', '\x0', '\x0', '\x090c', '\x0961',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0', '\x0', '\x0960', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0', '\x0', '\x0', '\x0958', '\x0959', '\x095a', '\x0', '\x0',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0', '\x0', '\x095b', '\x0', '\x0', '\x0', '\x0', '\x095c',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x095d', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0', '\x095e', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0', '\x0', '\x0', '\x0962', '\x0963', '\x0', '\x0', '\x0944',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x200C', '\x200D', '\x093d', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\xB8BF', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0'
- }
- },
-
- {
- ////////////////////////////////////////////////////////////////////////////
- //
- // Bengali & Assemese Table 1', Code Pages (3, '43', 57003 & 6', '46', 57006)
- //
- ////////////////////////////////////////////////////////////////////////////
-
- // Default Unicode Char
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0000', '\x0981', '\x0982', '\x0983', '\x0985', '\x0986', '\x0987', '\x0988',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0989', '\x098a', '\x098b', '\x098f', '\x098f', '\x0990', '\x0990', '\x0993',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0993', '\x0994', '\x0994', '\x0995', '\x0996', '\x0997', '\x0998', '\x0999',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x099a', '\x099b', '\x099c', '\x099d', '\x099e', '\x099f', '\x09a0', '\x09a1',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x09a2', '\x09a3', '\x09a4', '\x09a5', '\x09a6', '\x09a7', '\x09a8', '\x09a8',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x09aa', '\x09ab', '\x09ac', '\x09ad', '\x09ae', '\x09af', '\x09df', '\x09b0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x09b0', '\x09b2', '\x09b2', '\x09b2', '\x09ac', '\x09b6', '\x09b7', '\x09b8',
- // d8, d9, da, db, dc, dd, de, df,
- '\x09b9', '\x0000', '\x09be', '\x09bf', '\x09c0', '\x09c1', '\x09c2', '\x09c3',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x09c7', '\x09c7', '\x09c8', '\x09c8', '\x09cb', '\x09cb', '\x09cc', '\x09cc',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x09cd', '\x09bc', '\x002e', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0000', '\x09e6', '\x09e7', '\x09e8', '\x09e9', '\x09ea', '\x09eb', '\x09ec',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x09ed', '\x09ee', '\x09ef', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000'
- },
-
- // Alternate Unicode Char & Flags
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x098c', '\x09e1',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0', '\x0', '\x09e0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x09dc',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x09dd', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0', '\x0', '\x0', '\x09e2', '\x09e3', '\x0', '\x0', '\x09c4',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x200C', '\x200D', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0'
- }
- },
-
- {
- ////////////////////////////////////////////////////////////////////////////
- //
- // Tamil Table 2', Code Page (4, '44', 57004)
- //
- ////////////////////////////////////////////////////////////////////////////
-
- // Default Unicode Char
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0000', '\x0000', '\x0b82', '\x0b83', '\x0b85', '\x0b86', '\x0b87', '\x0b88',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0b89', '\x0b8a', '\x0000', '\x0b8f', '\x0b8f', '\x0b90', '\x0b90', '\x0b92',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0b93', '\x0b94', '\x0b94', '\x0b95', '\x0b95', '\x0b95', '\x0b95', '\x0b99',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0b9a', '\x0b9a', '\x0b9c', '\x0b9c', '\x0b9e', '\x0b9f', '\x0b9f', '\x0b9f',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0b9f', '\x0ba3', '\x0ba4', '\x0ba4', '\x0ba4', '\x0ba4', '\x0ba8', '\x0ba9',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0baa', '\x0baa', '\x0baa', '\x0baa', '\x0bae', '\x0baf', '\x0baf', '\x0bb0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0bb1', '\x0bb2', '\x0bb3', '\x0bb4', '\x0bb5', '\x0bb7', '\x0bb7', '\x0bb8',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0bb9', '\x0000', '\x0bbe', '\x0bbf', '\x0bc0', '\x0bc1', '\x0bc2', '\x0000',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0bc6', '\x0bc7', '\x0bc8', '\x0bc8', '\x0bca', '\x0bcb', '\x0bcc', '\x0bcc',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x0bcd', '\x0000', '\x002e', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0000', '\x0030', '\x0be7', '\x0be8', '\x0be9', '\x0bea', '\x0beb', '\x0bec',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0bed', '\x0bee', '\x0bef', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000'
- },
-
- // Alternate Unicode Char & Flags
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x200C', '\x200D', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0'
- }
- },
-
- {
- ////////////////////////////////////////////////////////////////////////////
- //
- // Telugu Table 3', Code Page (5, '45', 57005)
- //
- ////////////////////////////////////////////////////////////////////////////
-
- // Default Unicode Char
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0000', '\x0c01', '\x0c02', '\x0c03', '\x0c05', '\x0c06', '\x0c07', '\x0c08',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0c09', '\x0c0a', '\x0c0b', '\x0c0e', '\x0c0f', '\x0c10', '\x0c10', '\x0c12',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0c13', '\x0c14', '\x0c14', '\x0c15', '\x0c16', '\x0c17', '\x0c18', '\x0c19',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0c1a', '\x0c1b', '\x0c1c', '\x0c1d', '\x0c1e', '\x0c1f', '\x0c20', '\x0c21',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0c22', '\x0c23', '\x0c24', '\x0c25', '\x0c26', '\x0c27', '\x0c28', '\x0c28',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0c2a', '\x0c2b', '\x0c2c', '\x0c2d', '\x0c2e', '\x0c2f', '\x0c2f', '\x0c30',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0c31', '\x0c32', '\x0c33', '\x0c33', '\x0c35', '\x0c36', '\x0c37', '\x0c38',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0c39', '\x0000', '\x0c3e', '\x0c3f', '\x0c40', '\x0c41', '\x0c42', '\x0c43',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0c46', '\x0c47', '\x0c48', '\x0c48', '\x0c4a', '\x0c4b', '\x0c4c', '\x0c4c',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x0c4d', '\x0000', '\x002e', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0000', '\x0c66', '\x0c67', '\x0c68', '\x0c69', '\x0c6a', '\x0c6b', '\x0c6c',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0c6d', '\x0c6e', '\x0c6f', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000'
- },
-
- // Alternate Unicode Char & Flags
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0c0c', '\x0c61',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0', '\x0', '\x0c60', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0c44',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x200C', '\x200D', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0'
- }
- },
-
- {
- ////////////////////////////////////////////////////////////////////////////
- //
- // Oriya Table 4', Code Page (7, '47', 57007)
- //
- ////////////////////////////////////////////////////////////////////////////
-
- // Default Unicode Char
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0000', '\x0b01', '\x0b02', '\x0b03', '\x0b05', '\x0b06', '\x0b07', '\x0b08',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0b09', '\x0b0a', '\x0b0b', '\x0b0f', '\x0b0f', '\x0b10', '\x0b10', '\x0b10',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0b13', '\x0b14', '\x0b14', '\x0b15', '\x0b16', '\x0b17', '\x0b18', '\x0b19',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0b1a', '\x0b1b', '\x0b1c', '\x0b1d', '\x0b1e', '\x0b1f', '\x0b20', '\x0b21',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0b22', '\x0b23', '\x0b24', '\x0b25', '\x0b26', '\x0b27', '\x0b28', '\x0b28',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0b2a', '\x0b2b', '\x0b2c', '\x0b2d', '\x0b2e', '\x0b2f', '\x0b5f', '\x0b30',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0b30', '\x0b32', '\x0b33', '\x0b33', '\x0b2c', '\x0b36', '\x0b37', '\x0b38',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0b39', '\x0000', '\x0b3e', '\x0b3f', '\x0b40', '\x0b41', '\x0b42', '\x0b43',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0b47', '\x0b47', '\x0b48', '\x0b48', '\x0b4b', '\x0b4b', '\x0b4c', '\x0b4c',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x0b4d', '\x0b3c', '\x002e', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0000', '\x0b66', '\x0b67', '\x0b68', '\x0b69', '\x0b6a', '\x0b6b', '\x0b6c',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0b6d', '\x0b6e', '\x0b6f', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000'
- },
-
- // Alternate Unicode Char & Flags
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0c0c', '\x0c61',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0', '\x0', '\x0c60', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0b5c',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0b5d', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0c44',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x200C', '\x200D', '\x0b3d', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0'
- }
- },
-
- {
- ////////////////////////////////////////////////////////////////////////////
- //
- // Kannada Table 5', Code Page (8, '48', 57008)
- //
- ////////////////////////////////////////////////////////////////////////////
-
- // Default Unicode Char
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0000', '\x0000', '\x0c82', '\x0c83', '\x0c85', '\x0c86', '\x0c87', '\x0c88',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0c89', '\x0c8a', '\x0c8b', '\x0c8e', '\x0c8f', '\x0c90', '\x0c90', '\x0c92',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0c93', '\x0c94', '\x0c94', '\x0c95', '\x0c96', '\x0c97', '\x0c98', '\x0c99',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0c9a', '\x0c9b', '\x0c9c', '\x0c9d', '\x0c9e', '\x0c9f', '\x0ca0', '\x0ca1',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0ca2', '\x0ca3', '\x0ca4', '\x0ca5', '\x0ca6', '\x0ca7', '\x0ca8', '\x0ca8',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0caa', '\x0cab', '\x0cac', '\x0cad', '\x0cae', '\x0caf', '\x0caf', '\x0cb0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0cb1', '\x0cb2', '\x0cb3', '\x0cb3', '\x0cb5', '\x0cb6', '\x0cb7', '\x0cb8',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0cb9', '\x0000', '\x0cbe', '\x0cbf', '\x0cc0', '\x0cc1', '\x0cc2', '\x0cc3',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0cc6', '\x0cc7', '\x0cc8', '\x0cc8', '\x0cca', '\x0ccb', '\x0ccc', '\x0ccc',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x0ccd', '\x0000', '\x002e', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0000', '\x0ce6', '\x0ce7', '\x0ce8', '\x0ce9', '\x0cea', '\x0ceb', '\x0cec',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0ced', '\x0cee', '\x0cef', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000'
- },
-
- // Alternate Unicode Char & Flags
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0c8c', '\x0ce1',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0', '\x0', '\x0ce0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0', '\x0cde', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0cc4',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x200C', '\x200D', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0'
- }
- },
-
- {
- ////////////////////////////////////////////////////////////////////////////
- //
- // Malayalam Table 6', Code Page (9, '49', 57009)
- //
- ////////////////////////////////////////////////////////////////////////////
-
- // Default Unicode Char
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0000', '\x0000', '\x0d02', '\x0d03', '\x0d05', '\x0d06', '\x0d07', '\x0d08',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0d09', '\x0d0a', '\x0d0b', '\x0d0e', '\x0d0f', '\x0d10', '\x0d10', '\x0d12',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0d13', '\x0d14', '\x0d14', '\x0d15', '\x0d16', '\x0d17', '\x0d18', '\x0d19',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0d1a', '\x0d1b', '\x0d1c', '\x0d1d', '\x0d1e', '\x0d1f', '\x0d20', '\x0d21',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0d22', '\x0d23', '\x0d24', '\x0d25', '\x0d26', '\x0d27', '\x0d28', '\x0d28',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0d2a', '\x0d2b', '\x0d2c', '\x0d2d', '\x0d2e', '\x0d2f', '\x0d2f', '\x0d30',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0d31', '\x0d32', '\x0d33', '\x0d34', '\x0d35', '\x0d36', '\x0d37', '\x0d38',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0d39', '\x0000', '\x0d3e', '\x0d3f', '\x0d40', '\x0d41', '\x0d42', '\x0d43',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0d46', '\x0d47', '\x0d48', '\x0d48', '\x0d4a', '\x0d4b', '\x0d4c', '\x0d4c',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x0d4d', '\x0000', '\x002e', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0000', '\x0d66', '\x0d67', '\x0d68', '\x0d69', '\x0d6a', '\x0d6b', '\x0d6c',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0d6d', '\x0d6e', '\x0d6f', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000'
- },
-
- // Alternate Unicode Char & Flags
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0d0c', '\x0d61',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0', '\x0', '\x0d60', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x200C', '\x200D', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0'
- }
- },
-
- {
- ////////////////////////////////////////////////////////////////////////////
- //
- // Gujarati Table 7', Code Page (10', '4a', 57010)
- //
- ////////////////////////////////////////////////////////////////////////////
-
- // Default Unicode Char
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0000', '\x0a81', '\x0a82', '\x0a83', '\x0a85', '\x0a86', '\x0a87', '\x0a88',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0a89', '\x0a8a', '\x0a8b', '\x0a8f', '\x0a8f', '\x0a90', '\x0a8d', '\x0a8d',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0a93', '\x0a94', '\x0a91', '\x0a95', '\x0a96', '\x0a97', '\x0a98', '\x0a99',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0a9a', '\x0a9b', '\x0a9c', '\x0a9d', '\x0a9e', '\x0a9f', '\x0aa0', '\x0aa1',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0aa2', '\x0aa3', '\x0aa4', '\x0aa5', '\x0aa6', '\x0aa7', '\x0aa8', '\x0aa8',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0aaa', '\x0aab', '\x0aac', '\x0aad', '\x0aae', '\x0aaf', '\x0aaf', '\x0ab0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0ab0', '\x0ab2', '\x0ab3', '\x0ab3', '\x0ab5', '\x0ab6', '\x0ab7', '\x0ab8',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0ab9', '\x0000', '\x0abe', '\x0abf', '\x0ac0', '\x0ac1', '\x0ac2', '\x0ac3',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0ac7', '\x0ac7', '\x0ac8', '\x0ac5', '\x0acb', '\x0acb', '\x0acc', '\x0ac9',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x0acd', '\x0abc', '\x002e', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0000', '\x0ae6', '\x0ae7', '\x0ae8', '\x0ae9', '\x0aea', '\x0aeb', '\x0aec',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0aed', '\x0aee', '\x0aef', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000'
- },
-
- // Alternate Unicode Char & Flags
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0', '\x0ad0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0', '\x0', '\x0ae0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0ac4',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x200C', '\x200D', '\x0abd', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0'
- }
- },
-
- {
- ////////////////////////////////////////////////////////////////////////////
- //
- // Punjabi (Gurmukhi) Table 8', Code Page (11', '4b', 57011)
- //
- ////////////////////////////////////////////////////////////////////////////
-
- // Default Unicode Char
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0000', '\x0000', '\x0a02', '\x0000', '\x0a05', '\x0a06', '\x0a07', '\x0a08',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0a09', '\x0a0a', '\x0000', '\x0a0f', '\x0a0f', '\x0a10', '\x0a10', '\x0a10',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0a13', '\x0a14', '\x0a14', '\x0a15', '\x0a16', '\x0a17', '\x0a18', '\x0a19',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0a1a', '\x0a1b', '\x0a1c', '\x0a1d', '\x0a1e', '\x0a1f', '\x0a20', '\x0a21',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0a22', '\x0a23', '\x0a24', '\x0a25', '\x0a26', '\x0a27', '\x0a28', '\x0a28',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0a2a', '\x0a2b', '\x0a2c', '\x0a2d', '\x0a2e', '\x0a2f', '\x0a2f', '\x0a30',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0a30', '\x0a32', '\x0a33', '\x0a33', '\x0a35', '\x0a36', '\x0a36', '\x0a38',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0a39', '\x0000', '\x0a3e', '\x0a3f', '\x0a40', '\x0a41', '\x0a42', '\x0000',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0a47', '\x0a47', '\x0a48', '\x0a48', '\x0a4b', '\x0a4b', '\x0a4c', '\x0a4c',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x0a4d', '\x0a3c', '\x002e', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0000', '\x0a66', '\x0a67', '\x0a68', '\x0a69', '\x0a6a', '\x0a6b', '\x0a6c',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0a6d', '\x0a6e', '\x0a6f', '\x0000', '\x0000', '\x0000', '\x0000', '\x0000'
- },
-
- // Alternate Unicode Char & Flags
- {
- // a0, a1, a2, a3, a4, a5, a6, a7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // a8, a9, aa, ab, ac, ad, ae, af,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // b0, b1, b2, b3, b4, b5, b6, b7,
- '\x0', '\x0', '\x0', '\x0', '\x0a59', '\x0a5a', '\x0', '\x0',
- // b8, b9, ba, bb, bc, bd, be, bf,
- '\x0', '\x0', '\x0a5b', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c0, c1, c2, c3, c4, c5, c6, c7,
- '\x0a5c', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // c8, c9, ca, cb, cc, cd, ce, cf,
- '\x0', '\x0a5e', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d0, d1, d2, d3, d4, d5, d6, d7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // d8, d9, da, db, dc, dd, de, df,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e0, e1, e2, e3, e4, e5, e6, e7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // e8, e9, ea, eb, ec, ed, ee, ef,
- '\x200C', '\x200D', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f0, f1, f2, f3, f4, f5, f6, f7,
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0',
- // f8, f9, fa, fb, fc, fd, fe, ff
- '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0', '\x0'
- }
- }
- };
- }
-
-}
diff --git a/src/mscorlib/src/System/Text/ISO2022Encoding.cs b/src/mscorlib/src/System/Text/ISO2022Encoding.cs
deleted file mode 100644
index fca579fe56..0000000000
--- a/src/mscorlib/src/System/Text/ISO2022Encoding.cs
+++ /dev/null
@@ -1,1983 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-
-//
-//
-// Notes:
-//
-// IsAlwaysNormalized ???
-// Regarding Normalization for ISO-2022-JP (50220, 50221, 50222), its the same rules as EUCJP
-// Forms KC & KD are precluded because of things like halfwidth Katakana that has compatibility mappings
-// Form D is precluded because of 0x00a8, which changes to space + dierises.
-//
-// Note: I think that IsAlwaysNormalized should probably return true for form C for Japanese 20932 based CPs.
-//
-// For ISO-2022-KR
-// Never normalized, C & D (& therefore KC & KD) are precluded because of Hangul syllables and combined characters.
-//
-// IsAlwaysNormalized ???
-// Regarding Normalization for ISO-2022-CN (50227, 50229) & HZ-GB2312 (52936) I think is similar to the Japanese case.
-// Forms KC & KD are precluded because of things like halfwidth Katakana that has compatibility mappings
-// Form D is precluded because of 0x00a8, which changes to space + dierises.
-//
-// Note: I think that IsAlwaysNormalized should probably return true for form C for Chinese 20936 based CPs.
-//
-#if FEATURE_CODEPAGES_FILE // requires BaseCodePageEncooding
-namespace System.Text
-{
- using System.Globalization;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Text;
- using System.Runtime.InteropServices;
- using System;
- using System.Security;
- using System.Runtime.CompilerServices;
- using System.Runtime.Serialization;
-
-
- /*=================================ISO2022Encoding============================
- **
- ** This is used to support ISO 2022 encodings that use shift/escape sequences.
- **
- ==============================================================================*/
-
- [Serializable]
- internal class ISO2022Encoding : DBCSCodePageEncoding
- {
- const byte SHIFT_OUT = (byte)0x0E;
- const byte SHIFT_IN = (byte)0x0F;
- const byte ESCAPE = 0x1B;
- const byte LEADBYTE_HALFWIDTH = 0x10;
-
- // We have to load the 936 code page tables, so impersonate 936 as our base
- // This pretends to be other code pages as far as memory sections are concerned.
- internal ISO2022Encoding(int codePage) : base(codePage, tableBaseCodePages[codePage % 10])
- {
- this.m_bUseMlangTypeForSerialization = true;
- }
-
- // Constructor called by serialization.
- // Note: We use the base GetObjectData however
- internal ISO2022Encoding(SerializationInfo info, StreamingContext context) : base(info, context)
- {
- // Actually this can't ever get called, CodePageEncoding is our proxy
- Debug.Assert(false, "Didn't expect to make it to DBCSCodePageEncoding serialization constructor");
- throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
- }
-
- static int[] tableBaseCodePages =
- {
- 932, // 50220 ISO-2022-JP, No halfwidth Katakana, convert to full width
- 932, // 50221 ISO-2022-JP, Use escape sequence for half width Katakana
- 932, // 50222 ISO-2022-JP, Use shift-in/shift-out for half width Katakana
- 0,
- 0,
- 949, // 50225 ISO-2022-KR, Korean
- 936, // 52936 HZ-GB2312, 936 might be better source
- 0, //20936, // 50227 ISO-2022-CN, Note: This is just the same as CP 936 in Everett.
- 0,
- // 50229 is currently unsupported, CP 20000 is currently not built in .nlp file
- 0, //20000, // 50229 ISO-2022-CN, ModeCNS11643_1
- 0, //20000, // 50229 ISO-2022-CN, ModeCNS11643_2
- 0 // ModeASCII
- };
-
- internal enum ISO2022Modes
- {
- ModeHalfwidthKatakana = 0,
- ModeJIS0208 = 1,
- ModeKR = 5,
- ModeHZ = 6,
- ModeGB2312 = 7,
- ModeCNS11643_1 = 9,
- ModeCNS11643_2 = 10,
- ModeASCII = 11,
-
- ModeIncompleteEscape = -1,
- ModeInvalidEscape = -2,
- ModeNOOP = -3
- }
-
- protected unsafe override String GetMemorySectionName()
- {
- int iUseCodePage = this.bFlagDataTable ? dataTableCodePage : CodePage;
-
- String strFormat;
-
- switch (this.CodePage)
- {
- case 50220:
- case 50221:
- case 50222:
- strFormat = "CodePage_{0}_{1}_{2}_{3}_{4}_ISO2022JP";
- break;
- case 50225:
- strFormat = "CodePage_{0}_{1}_{2}_{3}_{4}_ISO2022KR";
- break;
- case 52936:
- strFormat = "CodePage_{0}_{1}_{2}_{3}_{4}_HZ";
- break;
- default:
- Debug.Assert(false, "[ISO2022Encoding.GetMemorySectionName] Don't expect to get here for code page " + this.CodePage);
- strFormat = "CodePage_{0}_{1}_{2}_{3}_{4}";
- break;
- }
-
- String strName = String.Format(CultureInfo.InvariantCulture, strFormat,
- iUseCodePage, this.pCodePage->VersionMajor, this.pCodePage->VersionMinor,
- this.pCodePage->VersionRevision, this.pCodePage->VersionBuild);
-
- return strName;
- }
-
- // Clean up characters for ISO2022 code pages, etc.
- // ISO2022 (50220, 50221, 50222)
- // GB-HZ (52936)
- protected override bool CleanUpBytes(ref int bytes)
- {
- switch (this.CodePage)
- {
- // 932 based code pages
- case 50220:
- case 50221:
- case 50222:
- {
- if (bytes >= 0x100)
- {
- // map extended char (0xfa40-0xfc4b) to a special range
- // (ported from mlang)
- if (bytes >= 0xfa40 && bytes <= 0xfc4b)
- {
- if ( bytes >= 0xfa40 && bytes <= 0xfa5b )
- {
- if ( bytes <= 0xfa49 )
- bytes = bytes - 0x0b51 ;
- else if ( bytes >= 0xfa4a && bytes <= 0xfa53 )
- bytes = bytes - 0x072f6 ;
- else if ( bytes >= 0xfa54 && bytes <= 0xfa57 )
- bytes = bytes - 0x0b5b ;
- else if ( bytes == 0xfa58 )
- bytes = 0x878a ;
- else if ( bytes == 0xfa59 )
- bytes = 0x8782 ;
- else if ( bytes == 0xfa5a )
- bytes = 0x8784 ;
- else if ( bytes == 0xfa5b )
- bytes = 0x879a ;
- }
- else if ( bytes >= 0xfa5c && bytes <= 0xfc4b )
- {
- byte tc = unchecked((byte)bytes);
- if ( tc < 0x5c )
- bytes = bytes - 0x0d5f;
- else if ( tc >= 0x80 && tc <= 0x9B )
- bytes = bytes - 0x0d1d;
- else
- bytes = bytes - 0x0d1c;
- }
- }
-
- // Convert 932 code page to 20932 like code page range
- // (also ported from mlang)
- byte bLead = unchecked((byte)(bytes >> 8));
- byte bTrail = unchecked((byte)bytes);
-
- bLead -= ((bLead > (byte)0x9f) ? (byte)0xb1 : (byte)0x71);
- bLead = (byte)((bLead << 1) + 1);
- if (bTrail > (byte)0x9e)
- {
- bTrail -= (byte)0x7e;
- bLead++;
- }
- else
- {
- if (bTrail > (byte)0x7e)
- bTrail--;
- bTrail -= (byte)0x1f;
- }
-
- bytes = ((int)bLead) << 8 | (int)bTrail;
-
- // Don't step out of our allocated lead byte area.
- // All DBCS lead and trail bytes should be >= 0x21 and <= 0x7e
- // This is commented out because Everett/Mlang had illegal PUA
- // mappings to ISO2022 code pages that we're maintaining.
-// if ((bytes & 0xFF00) < 0x2100 || (bytes & 0xFF00) > 0x7e00 ||
- // (bytes & 0xFF) < 0x21 || (bytes & 0xFF) > 0x7e)
- // return false;
- }
- else
- {
- // Adjust 1/2 Katakana
- if (bytes >= 0xa1 && bytes <= 0xdf)
- bytes += (LEADBYTE_HALFWIDTH << 8) - 0x80;
-
- // 0x81-0x9f and 0xe0-0xfc CP 932
- // 0x8e and 0xa1-0xfe CP 20932 (we don't use 8e though)
- // b0-df is 1/2 Katakana
- if (bytes >= 0x81 &&
- (bytes <= 0x9f ||
- (bytes >= 0xe0 && bytes <= 0xfc)))
- {
- // Don't do lead bytes, we use escape sequences instead.
- return false;
- }
- }
- break;
- }
- case 50225:
- {
- // For 50225 since we don't rely on lead byte marks, return false and don't add them,
- // esp. since we're only a 7 bit code page.
- if (bytes >= 0x80 && bytes <= 0xff)
- return false;
-
- // Ignore characters out of range (a1-7f)
- if (bytes >= 0x100 &&
- ((bytes & 0xff) < 0xa1 || (bytes & 0xff) == 0xff ||
- (bytes & 0xff00) < 0xa100 || (bytes & 0xff00) == 0xff00))
- return false;
-
- // May as well get them into our 7 bit range
- bytes &= 0x7f7f;
-
- break;
- }
- case 52936:
- {
- // Since we don't rely on lead byte marks for 52936, get rid of them so we
- // don't end up with extra wierd fffe mappings.
- if (bytes >= 0x81 && bytes <= 0xfe)
- return false;
-
- break;
- }
- }
-
- return true;
- }
-
- // GetByteCount
- internal override unsafe int GetByteCount(char* chars, int count, EncoderNLS baseEncoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- Debug.Assert(count >= 0, "[ISO2022Encoding.GetByteCount]count is negative");
- Debug.Assert(chars != null, "[ISO2022Encoding.GetByteCount]chars is null");
-
- // Just call GetBytes with null byte* to get count
- return GetBytes(chars, count, null, 0, baseEncoder);
- }
-
- internal override unsafe int GetBytes(char* chars, int charCount,
- byte* bytes, int byteCount, EncoderNLS baseEncoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- Debug.Assert(chars != null, "[ISO2022Encoding.GetBytes]chars is null");
- Debug.Assert(byteCount >= 0, "[ISO2022Encoding.GetBytes]byteCount is negative");
- Debug.Assert(charCount >= 0, "[ISO2022Encoding.GetBytes]charCount is negative");
-
- // Assert because we shouldn't be able to have a null encoder.
- Debug.Assert(encoderFallback != null, "[ISO2022Encoding.GetBytes]Attempting to use null encoder fallback");
-
- // Fix our encoder
- ISO2022Encoder encoder = (ISO2022Encoder)baseEncoder;
-
- // Our return value
- int iCount = 0;
-
- switch(CodePage)
- {
- case 50220:
- case 50221:
- case 50222:
- iCount = GetBytesCP5022xJP( chars, charCount, bytes, byteCount, encoder );
- break;
- case 50225:
- iCount = GetBytesCP50225KR( chars, charCount, bytes, byteCount, encoder );
- break;
-// Everett had 50227 the same as 936
-/* case 50227:
- iCount = GetBytesCP50227CN( chars, charCount, bytes, byteCount, encoder );
- break;
-*/
- case 52936:
- iCount = GetBytesCP52936( chars, charCount, bytes, byteCount, encoder );
- break;
- }
-
- return iCount;
- }
-
- // This is internal and called by something else,
- internal override unsafe int GetCharCount(byte* bytes, int count, DecoderNLS baseDecoder)
- {
- // Just assert, we're called internally so these should be safe, checked already
- Debug.Assert(bytes != null, "[ISO2022Encoding.GetCharCount]bytes is null");
- Debug.Assert(count >= 0, "[ISO2022Encoding.GetCharCount]byteCount is negative");
-
- // Just call getChars with null char* to get count
- return GetChars(bytes, count, null, 0, baseDecoder);
- }
-
- internal override unsafe int GetChars(byte* bytes, int byteCount,
- char* chars, int charCount, DecoderNLS baseDecoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- Debug.Assert(bytes != null, "[ISO2022Encoding.GetChars]bytes is null");
- Debug.Assert(byteCount >= 0, "[ISO2022Encoding.GetChars]byteCount is negative");
- Debug.Assert(charCount >= 0, "[ISO2022Encoding.GetChars]charCount is negative");
-
- // Fix our decoder
- ISO2022Decoder decoder = (ISO2022Decoder)baseDecoder;
- int iCount = 0;
-
- switch (CodePage)
- {
- case 50220:
- case 50221:
- case 50222:
- iCount = GetCharsCP5022xJP( bytes, byteCount, chars, charCount, decoder);
- break;
- case 50225:
- iCount = GetCharsCP50225KR( bytes, byteCount, chars, charCount, decoder);
- break;
- // Currently 50227 is the same as 936
-// case 50227:
- // iCount = GetCharsCP50227CN( bytes, byteCount, chars, charCount, decoder);
- // break;
- case 52936:
- iCount = GetCharsCP52936( bytes, byteCount, chars, charCount, decoder);
- break;
- default:
- Debug.Assert(false, "[ISO2022Encoding.GetChars] had unexpected code page");
- break;
- }
-
- return iCount;
- }
-
- // ISO 2022 Code pages for JP.
- // 50220 - No halfwidth Katakana, convert to full width
- // 50221 - Use escape sequence for half width Katakana
- // 50222 - Use shift-in/shift-out for half width Katakana
- //
- // These are the JIS code pages, superset of ISO-2022 / ISO-2022-JP-1
- // 0E Shift Out (following bytes are Katakana)
- // 0F Shift In (back to "normal" behavior)
- // 21-7E Byte ranges (1 or 2 bytes)
- // <ESC> $ @ To Double Byte 0208 Mode (actually older code page, but subset of 0208)
- // <ESC> $ B To Double Byte 0208 Mode (duplicate)
- // <ESC> $ ( D To Double Byte 0212 Mode (previously we misinterpreted this)
- // <ESC> $ I To half width Katakana
- // <ESC> ( J To JIS-Roman
- // <ESC> ( H To JIS-Roman (swedish character set)
- // <ESC> ( B To ASCII
- // <ESC> & @ Alternate lead in to <ESC> $ B so just ignore it.
- //
- // So in Katakana mode we add 0x8e as a lead byte and use CP 20932 to convert it
- // In ASCII mode we just spit out the single byte.
- // In Roman mode we should change 0x5c (\) -> Yen sign and 0x7e (~) to Overline, however
- // we didn't in mLang, otherwise roman is like ASCII.
- // In 0208 double byte mode we have to |= with 0x8080 and use CP 20932 to convert it.
- // In 0212 double byte mode we have to |= with 0x8000 and use CP 20932 to convert it.
- //
- // Note that JIS Shift In/Shift Out is different than the other ISO2022 encodings. For JIS
- // Shift out always shifts to half-width Katakana. Chinese encodings use designator sequences
- // instead of escape sequences and shift out to the designated sequence or back in to ASCII.
- //
- // When decoding JIS 0208, MLang used a '*' (0x2a) character in JIS 0208 mode to map the trailing byte
- // to halfwidth katakana. I found no description of that behavior, however that block of 0208 is
- // undefined, so we maintain that behavior when decoding. We will never generate characters using
- // that technique, but the decoder will process them.
- //
- private unsafe int GetBytesCP5022xJP(char* chars, int charCount,
- byte* bytes, int byteCount, ISO2022Encoder encoder)
- {
- // prepare our helpers
- Encoding.EncodingByteBuffer buffer = new Encoding.EncodingByteBuffer(
- this, encoder, bytes, byteCount, chars, charCount);
-
- // Get our mode
- ISO2022Modes currentMode = ISO2022Modes.ModeASCII; // Mode
- ISO2022Modes shiftInMode = ISO2022Modes.ModeASCII; // Mode that shift in will go back to (only used by CP 50222)
-
- // Check our encoder
- if (encoder != null)
- {
- char charLeftOver = encoder.charLeftOver;
-
- currentMode = encoder.currentMode;
- shiftInMode = encoder.shiftInOutMode;
-
- // We may have a left over character from last time, try and process it.
- if (charLeftOver > 0)
- {
- Debug.Assert(Char.IsHighSurrogate(charLeftOver), "[ISO2022Encoding.GetBytesCP5022xJP]leftover character should be high surrogate");
-
- // It has to be a high surrogate, which we don't support, so it has to be a fallback
- buffer.Fallback(charLeftOver);
- }
- }
-
- while (buffer.MoreData)
- {
- // Get our char
- char ch = buffer.GetNextChar();
-
- // Get our bytes
- ushort iBytes = mapUnicodeToBytes[ch];
-
- StartConvert:
- // Check for halfwidth bytes
- byte bLeadByte = (byte)(iBytes >> 8);
- byte bTrailByte = (byte)(iBytes & 0xff);
-
- if (bLeadByte == LEADBYTE_HALFWIDTH)
- {
- // Its Halfwidth Katakana
- if (CodePage == 50220)
- {
- // CodePage 50220 doesn't use halfwidth Katakana, convert to fullwidth
- // See if its out of range, fallback if so, throws if recursive fallback
- if (bTrailByte < 0x21 || bTrailByte >= 0x21 + HalfToFullWidthKanaTable.Length)
- {
- buffer.Fallback(ch);
- continue;
- }
-
- // Get the full width katakana char to use.
- iBytes = unchecked((ushort)(HalfToFullWidthKanaTable[bTrailByte - 0x21] & 0x7F7F));
-
- // May have to do all sorts of fun stuff for mode, go back to start convert
- goto StartConvert;
- }
-
- // Can use halfwidth Katakana, make sure we're in right mode
-
- // Make sure we're in right mode
- if (currentMode != ISO2022Modes.ModeHalfwidthKatakana)
- {
- // 50222 or 50221, either shift in/out or escape to get to Katakana mode
- if (CodePage == 50222)
- {
- // Shift Out
- if (!buffer.AddByte(SHIFT_OUT))
- break; // convert out of space, stop
-
- // Don't change modes until after AddByte in case it fails for convert
- // We get to shift out to Katakana, make sure we'll go back to the right mode
- // (This ends up always being ASCII)
- shiftInMode = currentMode;
- currentMode = ISO2022Modes.ModeHalfwidthKatakana;
- }
- else
- {
- // 50221 does halfwidth katakana by escape sequence
- Debug.Assert(CodePage == 50221, "[ISO2022Encoding.GetBytesCP5022xJP]Expected Code Page 50221");
-
- // Add our escape sequence
- if (!buffer.AddByte(ESCAPE, unchecked((byte)'('), unchecked((byte)'I')))
- break; // convert out of space, stop
-
- currentMode = ISO2022Modes.ModeHalfwidthKatakana;
- }
- }
-
- // We know we're in Katakana mode now, so add it.
- // Go ahead and add the Katakana byte. Our table tail bytes are 0x80 too big.
- if (!buffer.AddByte(unchecked((byte)(bTrailByte & 0x7F))))
- break; // convert out of space, stop
-
- // Done with this one
- continue;
- }
- else if (bLeadByte != 0)
- {
- //
- // It's a double byte character.
- //
-
- // If we're CP 50222 we may have to shift in from Katakana mode first
- if (CodePage == 50222 && currentMode == ISO2022Modes.ModeHalfwidthKatakana)
- {
- // Shift In
- if (!buffer.AddByte(SHIFT_IN))
- break; // convert out of space, stop
-
- // Need to shift in from katakana. (Still might not be right, but won't be shifted out anyway)
- currentMode = shiftInMode;
- }
-
- // Make sure we're in the right mode (JIS 0208 or JIS 0212)
- // Note: Right now we don't use JIS 0212. Also this table'd be wrong
-
- // Its JIS extension 0208
- if (currentMode != ISO2022Modes.ModeJIS0208)
- {
- // Escape sequence, we can fail after this, mode will be correct for convert
- if (!buffer.AddByte(ESCAPE, unchecked((byte)'$'), unchecked((byte)'B')))
- break; // Convert out of space, stop
-
- currentMode = ISO2022Modes.ModeJIS0208;
- }
-
- // Add our double bytes
- if (!buffer.AddByte(unchecked((byte)(bLeadByte)), unchecked((byte)(bTrailByte))))
- break; // Convert out of space, stop
- continue;
- }
- else if (iBytes != 0 || ch == 0)
- {
- // Single byte Char
- // If we're CP 50222 we may have to shift in from Katakana mode first
- if (CodePage == 50222 && currentMode == ISO2022Modes.ModeHalfwidthKatakana)
- {
- // Shift IN
- if (!buffer.AddByte(SHIFT_IN))
- break; // convert ran out of room
-
- // Need to shift in from katakana. (Still might not be right, but won't be shifted out anyway)
- currentMode = shiftInMode;
- }
-
- // Its a single byte character, switch to ASCII if we have to
- if (currentMode != ISO2022Modes.ModeASCII)
- {
- if (!buffer.AddByte(ESCAPE,unchecked((byte)'('), unchecked((byte)'B')))
- break; // convert ran out of room
-
- currentMode = ISO2022Modes.ModeASCII;
- }
-
- // Add the ASCII char
- if (!buffer.AddByte(bTrailByte))
- break; // convert had no room left
- continue;
- }
-
- // Its unknown, do fallback, throws if recursive (knows because we called InternalGetNextChar)
- buffer.Fallback(ch);
- }
-
- // Switch back to ASCII if MustFlush or no encoder
- if (currentMode != ISO2022Modes.ModeASCII &&
- (encoder == null || encoder.MustFlush))
- {
- // If we're CP 50222 we may have to shift in from Katakana mode first
- if (CodePage == 50222 && currentMode == ISO2022Modes.ModeHalfwidthKatakana)
- {
- // Shift IN, only shift mode if necessary.
- if (buffer.AddByte(SHIFT_IN))
- // Need to shift in from katakana. (Still might not be right, but won't be shifted out anyway)
- currentMode = shiftInMode;
- else
- // If not successful, convert will maintain state for next time, also
- // AddByte will have decremented our char count, however we need it to remain the same
- buffer.GetNextChar();
- }
-
- // switch back to ASCII to finish neatly
- if (currentMode != ISO2022Modes.ModeASCII &&
- (CodePage != 50222 || currentMode != ISO2022Modes.ModeHalfwidthKatakana))
- {
- // only shift if it was successful
- if (buffer.AddByte(ESCAPE, unchecked((byte)'('), unchecked((byte)'B')))
- currentMode = ISO2022Modes.ModeASCII;
- else
- // If not successful, convert will maintain state for next time, also
- // AddByte will have decremented our char count, however we need it to remain the same
- buffer.GetNextChar();
- }
- }
-
- // Remember our encoder state
- if (bytes != null && encoder != null)
- {
- // This is ASCII if we had to flush
- encoder.currentMode = currentMode;
- encoder.shiftInOutMode = shiftInMode;
-
- if (!buffer.fallbackBuffer.bUsedEncoder)
- {
- encoder.charLeftOver = (char)0;
- }
-
- encoder.m_charsUsed = buffer.CharsUsed;
- }
-
- // Return our length
- return buffer.Count;
- }
-
- // ISO 2022 Code pages for Korean - CP 50225
- //
- // CP 50225 has Shift In/Shift Out codes, and a single designator sequence that is supposed
- // to appear once in the file, at the beginning of a line, before any multibyte code points.
- // So we stick the designator at the beginning of the output.
- //
- // These are the KR code page codes for ISO-2022-KR
- // 0E Shift Out (following bytes are double byte)
- // 0F Shift In (back to ASCII behavior)
- // 21-7E Byte ranges (1 or 2 bytes)
- // <ESC> $)C Double byte ISO-2022-KR designator
- //
- // Note that this encoding is a little different than other encodings. The <esc>$)C sequence
- // should only appear once per file. (Actually I saw another spec/rfc that said at the beginning
- // of each line, but it shouldn't really matter.)
- //
- // During decoding Mlang accepted ' ', '\t, and '\n' as their respective characters, even if
- // it was in double byte mode. We maintain that behavior, although I couldn't find a reference or
- // reason for that behavior. We never generate data using that shortcut.
- //
- // Also Mlang always assumed KR mode, even if the designator wasn't found yet, so we do that as
- // well. So basically we just ignore <ESC>$)C when decoding.
- //
- private unsafe int GetBytesCP50225KR(char* chars, int charCount,
- byte* bytes, int byteCount, ISO2022Encoder encoder)
- {
- // prepare our helpers
- Encoding.EncodingByteBuffer buffer = new Encoding.EncodingByteBuffer(
- this, encoder, bytes, byteCount, chars, charCount);
-
- // Get our mode
- ISO2022Modes currentMode = ISO2022Modes.ModeASCII; // Mode
- ISO2022Modes shiftOutMode = ISO2022Modes.ModeASCII; // ModeKR if already stamped lead bytes
-
- // Check our encoder
- if (encoder != null)
- {
- // May have leftover stuff
- char charLeftOver = encoder.charLeftOver;
- currentMode = encoder.currentMode;
- shiftOutMode = encoder.shiftInOutMode;
-
- // We may have a l left over character from last time, try and process it.
- if (charLeftOver > 0)
- {
- Debug.Assert(Char.IsHighSurrogate(charLeftOver), "[ISO2022Encoding.GetBytesCP50225KR]leftover character should be high surrogate");
-
- // It has to be a high surrogate, which we don't support, so it has to be a fallback
- buffer.Fallback(charLeftOver);
- }
- }
-
- while (buffer.MoreData)
- {
- // Get our data
- char ch = buffer.GetNextChar();
-
- // Get our bytes
- ushort iBytes = mapUnicodeToBytes[ch];
-
- // Check for double byte bytes
- byte bLeadByte = (byte)(iBytes >> 8);
- byte bTrailByte = (byte)(iBytes & 0xff);
-
- if (bLeadByte != 0)
- {
- //
- // It's a double byte character.
- //
-
- // If we haven't done our Korean designator, then do so, if we have any input
- if (shiftOutMode != ISO2022Modes.ModeKR)
- {
- // Add our code page designator sequence
- if (!buffer.AddByte(ESCAPE, unchecked((byte)'$'), unchecked((byte)')'), unchecked((byte)'C')))
- break; // No room during convert.
-
- shiftOutMode = ISO2022Modes.ModeKR;
- }
-
- // May have to switch to ModeKR first
- if (currentMode != ISO2022Modes.ModeKR)
- {
- if (!buffer.AddByte(SHIFT_OUT))
- break; // No convert room
-
- currentMode = ISO2022Modes.ModeKR;
- }
-
- // Add the bytes
- if (!buffer.AddByte(bLeadByte, bTrailByte))
- break; // no convert room
- continue;
- }
- else if (iBytes != 0 || ch == 0)
- {
- // Its a single byte character, switch to ASCII if we have to
- if (currentMode != ISO2022Modes.ModeASCII)
- {
- if (!buffer.AddByte(SHIFT_IN))
- break;
-
- currentMode = ISO2022Modes.ModeASCII;
- }
-
- // Add the ASCII char
- if (!buffer.AddByte(bTrailByte))
- break;
- continue;
- }
-
- // Its unknown, do fallback, throws if recursive (knows because we called InternalGetNextChar)
- buffer.Fallback(ch);
- }
-
- // Switch back to ASCII if MustFlush or no encoder
- if (currentMode != ISO2022Modes.ModeASCII &&
- (encoder == null || encoder.MustFlush))
- {
- // Get back to ASCII to be safe. Only do it if it success.
- if (buffer.AddByte(SHIFT_IN))
- currentMode = ISO2022Modes.ModeASCII;
- else
- // If not successful, convert will maintain state for next time, also
- // AddByte will have decremented our char count, however we need it to remain the same
- buffer.GetNextChar();
- }
-
- // Remember our encoder state
- if (bytes != null && encoder != null)
- {
- // If we didn't use the encoder, then there's no chars left over
- if (!buffer.fallbackBuffer.bUsedEncoder)
- {
- encoder.charLeftOver = (char)0;
- }
-
- // This is ASCII if we had to flush
- encoder.currentMode = currentMode;
-
- // We don't use shift out mode, but if we've flushed we need to reset it so it doesn't
- // get output again.
- if (!encoder.MustFlush || encoder.charLeftOver != (char)0)
- {
- // We should be not flushing or converting
- Debug.Assert(!encoder.MustFlush || !encoder.m_throwOnOverflow,
- "[ISO2022Encoding.GetBytesCP50225KR]Expected no left over data or not flushing or not converting");
- encoder.shiftInOutMode = shiftOutMode;
- }
- else
- encoder.shiftInOutMode = ISO2022Modes.ModeASCII;
-
- encoder.m_charsUsed = buffer.CharsUsed;
- }
-
- // Return our length
- return buffer.Count;
- }
-
- // CP52936 is HZ Encoding
- // HZ Encoding has 4 shift sequences:
- // ~~ '~' (\u7e)
- // ~} shift into 1 byte mode,
- // ~{ shift into 2 byte GB 2312-80
- // ~<NL> Maintain 2 byte mode across new lines (ignore both ~ and <NL> characters)
- // (This is for mailers that restrict to 70 or 80 or whatever character lines)
- //
- // According to comment in mlang, lead & trail byte ranges are described in RFC 1843
- // RFC 1843 => valid HZ code range: leading byte 0x21 - 0x77, 2nd byte 0x21 - 0x7e
- // Our 936 code points are or'd with 0x8080, so lead byte 0xa1 - 0xf7, trail byte 0xa1 - 0xfe
- //
- // This encoding is designed for transmission by e-mail and news. No bytes should have high bit set.
- // (all bytes <= 0x7f)
- private unsafe int GetBytesCP52936(char* chars, int charCount,
- byte* bytes, int byteCount, ISO2022Encoder encoder)
- {
- // prepare our helpers
- Encoding.EncodingByteBuffer buffer = new Encoding.EncodingByteBuffer(
- this, encoder, bytes, byteCount, chars, charCount);
-
- // Mode
- ISO2022Modes currentMode = ISO2022Modes.ModeASCII;
-
- // Check our encoder
- if (encoder != null)
- {
- char charLeftOver = encoder.charLeftOver;
- currentMode = encoder.currentMode;
-
- // We may have a left over character from last time, try and process it.
- if (charLeftOver > 0)
- {
- Debug.Assert(Char.IsHighSurrogate(charLeftOver), "[ISO2022Encoding.GetBytesCP52936]leftover character should be high surrogate");
-
- // It has to be a high surrogate, which we don't support, so it has to be a fallback
- buffer.Fallback(charLeftOver);
- }
- }
-
- while (buffer.MoreData)
- {
- // Get our char
- char ch = buffer.GetNextChar();
-
- // Get our bytes
- ushort sChar = mapUnicodeToBytes[ch];
- if (sChar == 0 && ch != 0)
- {
- // Wasn't a legal byte sequence, its a surrogate or fallback
- // Throws if recursive (knows because we called InternalGetNextChar)
- buffer.Fallback(ch);
-
- // Done with our char, now process fallback
- continue;
- }
-
- // Check for halfwidth bytes
- byte bLeadByte = (byte)(sChar >> 8);
- byte bTrailByte = (byte)(sChar & 0xff);
-
- // If its a double byte, it has to fit in the lead byte 0xa1 - 0xf7, trail byte 0xa1 - 0xfe range
- // (including the 0x8080 that our codepage or's to the value)
- if ((bLeadByte != 0 &&
- (bLeadByte < 0xa1 || bLeadByte > 0xf7 || bTrailByte < 0xa1 || bTrailByte > 0xfe)) ||
- (bLeadByte == 0 && bTrailByte > 0x80 && bTrailByte != 0xff))
- {
- // Illegal character, in 936 code page, but not in HZ subset, get fallback for it
- buffer.Fallback(ch);
- continue;
- }
-
- // sChar is now either ASCII or has an 0x8080 mask
- if (bLeadByte != 0)
- {
- // Its a double byte mode
- if (currentMode != ISO2022Modes.ModeHZ)
- {
- // Need to add the double byte mode marker
- if (!buffer.AddByte((byte)'~', (byte)'{', 2))
- break; // Stop if no buffer space in convert
-
- currentMode = ISO2022Modes.ModeHZ;
- }
-
- // Go ahead and add the 2 bytes
- if (!buffer.AddByte(unchecked((byte)(bLeadByte & 0x7f)), unchecked((byte)(bTrailByte & 0x7f))))
- break; // Stop if no buffer space in convert
- }
- else
- {
- // Its supposed to be ASCII
- if (currentMode != ISO2022Modes.ModeASCII)
- {
- // Need to add the ASCII mode marker
- // Will have 1 more byte (or 2 if ~)
- if (!buffer.AddByte((byte)'~', (byte)'}', bTrailByte == '~' ? 2:1))
- break;
-
- currentMode = ISO2022Modes.ModeASCII;
- }
-
- // If its a '~' we'll need an extra one
- if (bTrailByte == '~')
- {
- // Need to add the extra ~
- if (!buffer.AddByte((byte)'~', 1))
- break;
- }
-
- // Need to add the character
- if (!buffer.AddByte(bTrailByte))
- break;
- }
- }
-
- // Add ASCII shift out if we're at end of decoder
- if (currentMode != ISO2022Modes.ModeASCII &&
- (encoder == null || encoder.MustFlush))
- {
- // Need to add the ASCII mode marker
- // Only turn off other mode if this works
- if (buffer.AddByte((byte)'~',(byte)'}'))
- currentMode = ISO2022Modes.ModeASCII;
- else
- // If not successful, convert will maintain state for next time, also
- // AddByte will have decremented our char count, however we need it to remain the same
- buffer.GetNextChar();
- }
-
- // Need to remember our mode
- if (encoder != null && bytes != null)
- {
- // This is ASCII if we had to flush
- encoder.currentMode = currentMode;
-
- if (!buffer.fallbackBuffer.bUsedEncoder)
- {
- encoder.charLeftOver = (char)0;
- }
-
- encoder.m_charsUsed = buffer.CharsUsed;
- }
-
- // Return our length
- return buffer.Count;
- }
-
- private unsafe int GetCharsCP5022xJP(byte* bytes, int byteCount,
- char* chars, int charCount, ISO2022Decoder decoder)
- {
- // Get our info.
- Encoding.EncodingCharBuffer buffer = new Encoding.EncodingCharBuffer(
- this, decoder, chars, charCount, bytes, byteCount);
-
- // No mode information yet
- ISO2022Modes currentMode = ISO2022Modes.ModeASCII; // Our current Mode
- ISO2022Modes shiftInMode = ISO2022Modes.ModeASCII; // Mode that we'll shift in to
- byte[] escapeBytes = new byte[4];
- int escapeCount = 0;
-
- if (decoder != null)
- {
- currentMode = decoder.currentMode;
- shiftInMode = decoder.shiftInOutMode;
-
- // See if we have leftover decoder buffer to use
- // Load our bytesLeftOver
- escapeCount = decoder.bytesLeftOverCount;
-
- // Don't want to mess up decoder if we're counting or throw an exception
- for (int i = 0; i < escapeCount; i++)
- escapeBytes[i] = decoder.bytesLeftOver[i];
- }
-
- // Do this until the end
- while (buffer.MoreData || escapeCount > 0)
- {
- byte ch;
-
- if (escapeCount > 0)
- {
- // Get more escape sequences if necessary
- if (escapeBytes[0] == ESCAPE)
- {
- // Stop if no more input
- if (!buffer.MoreData)
- {
- if (decoder != null && !decoder.MustFlush)
- break;
- }
- else
- {
- // Add it to the sequence we can check
- escapeBytes[escapeCount++] = buffer.GetNextByte();
-
- // We have an escape sequence
- ISO2022Modes modeReturn =
- CheckEscapeSequenceJP(escapeBytes, escapeCount);
-
- if (modeReturn != ISO2022Modes.ModeInvalidEscape)
- {
- if (modeReturn != ISO2022Modes.ModeIncompleteEscape)
- {
- // Processed escape correctly
- escapeCount = 0;
-
- // We're now this mode
- currentMode = shiftInMode = modeReturn;
- }
-
- // Either way, continue to get next escape or real byte
- continue;
- }
- }
-
- // If ModeInvalidEscape, or no input & must flush, then fall through to add escape.
- }
-
- // Read next escape byte and move them down one.
- ch = DecrementEscapeBytes(ref escapeBytes, ref escapeCount);
- }
- else
- {
- // Get our next byte
- ch = buffer.GetNextByte();
-
- if (ch == ESCAPE)
- {
- // We'll have an escape sequence, use it if we don't have one buffered already
- if (escapeCount == 0)
- {
- // Start this new escape sequence
- escapeBytes[0] = ch;
- escapeCount = 1;
- continue;
- }
-
- // Flush the previous escape sequence, then reuse this escape byte
- buffer.AdjustBytes(-1);
- }
- }
-
- if (ch == SHIFT_OUT)
- {
- shiftInMode = currentMode;
- currentMode = ISO2022Modes.ModeHalfwidthKatakana;
- continue;
- }
- else if (ch == SHIFT_IN)
- {
- currentMode = shiftInMode;
- continue;
- }
-
- // Get our full character
- ushort iBytes = ch;
- bool b2Bytes = false;
-
- if (currentMode == ISO2022Modes.ModeJIS0208)
- {
- //
- // To handle errors, we need to check:
- // 1. if trailbyte is there
- // 2. if code is valid
- //
- if (escapeCount > 0)
- {
- // Let another escape fall through
- if (escapeBytes[0] != ESCAPE)
- {
- // Move them down one & get the next data
- iBytes <<= 8;
- iBytes |= DecrementEscapeBytes(ref escapeBytes, ref escapeCount);
- b2Bytes = true;
- }
- }
- else if (buffer.MoreData)
- {
- iBytes <<= 8;
- iBytes |= buffer.GetNextByte();
- b2Bytes = true;
- }
- else
- {
- // Not enough input, use decoder if possible
- if (decoder == null || decoder.MustFlush)
- {
- // No decoder, do fallback for this byte
- buffer.Fallback(ch);
- break;
- }
-
- // Stick it in the decoder if we're not counting
- if (chars != null)
- {
- escapeBytes[0] = ch;
- escapeCount = 1;
- }
- break;
- }
-
- // MLang treated JIS 0208 '*' lead byte like a single halfwidth katakana
- // escape, so use 0x8e00 as katakana lead byte and keep same trail byte.
- // 0x2a lead byte range is normally unused in JIS 0208, so shouldn't have
- // any wierd compatibility issues.
- if ((b2Bytes == true) && ((iBytes & 0xff00) == 0x2a00))
- {
- iBytes = (ushort)(iBytes & 0xff);
- iBytes |= (LEADBYTE_HALFWIDTH << 8); // Put us in the halfwidth katakana range
- }
- }
- else if (iBytes >= 0xA1 && iBytes <= 0xDF)
- {
- // Everett accidentally mapped Katakana like shift-jis (932),
- // even though this is a 7 bit code page. We keep that mapping
- iBytes |= (LEADBYTE_HALFWIDTH << 8); // Map to halfwidth katakana range
- iBytes &= 0xff7f; // remove extra 0x80
- }
- else if (currentMode == ISO2022Modes.ModeHalfwidthKatakana )
- {
- // Add 0x10 lead byte that our encoding expects for Katakana:
- iBytes |= (LEADBYTE_HALFWIDTH << 8);
- }
-
- // We have an iBytes to try to convert.
- char c = mapBytesToUnicode[iBytes];
-
- // See if it was unknown
- if (c == UNKNOWN_CHAR_FLAG && iBytes != 0)
- {
- // Have to do fallback
- if (b2Bytes)
- {
- if (!buffer.Fallback((byte)(iBytes >> 8), (byte)iBytes))
- break;
- }
- else
- {
- if (!buffer.Fallback(ch))
- break;
- }
- }
- else
- {
- // If we were JIS 0208, then we consumed an extra byte
- if (!buffer.AddChar(c, b2Bytes ? 2:1))
- break;
- }
- }
-
- // Make sure our decoder state matches our mode, if not counting
- if (chars != null && decoder != null)
- {
- // Remember it if we don't flush
- if (!decoder.MustFlush || escapeCount != 0)
- {
- // Either not flushing or had state (from convert)
- Debug.Assert(!decoder.MustFlush || !decoder.m_throwOnOverflow,
- "[ISO2022Encoding.GetCharsCP5022xJP]Expected no state or not converting or not flushing");
-
- decoder.currentMode = currentMode;
- decoder.shiftInOutMode = shiftInMode;
-
- // Remember escape buffer
- decoder.bytesLeftOverCount = escapeCount;
- decoder.bytesLeftOver = escapeBytes;
- }
- else
- {
- // We flush, clear buffer
- decoder.currentMode = ISO2022Modes.ModeASCII;
- decoder.shiftInOutMode = ISO2022Modes.ModeASCII;
- decoder.bytesLeftOverCount = 0;
- // Slightly different if counting/not counting
- }
-
- decoder.m_bytesUsed = buffer.BytesUsed;
- }
-
- // Return # of characters we found
- return buffer.Count;
- }
-
- // We know we have an escape sequence, so check it starting with the byte after the escape
- private ISO2022Modes CheckEscapeSequenceJP( byte[] bytes, int escapeCount )
- {
- // Have an escape sequence
- if (bytes[0] != ESCAPE)
- return ISO2022Modes.ModeInvalidEscape;
-
- if (escapeCount < 3)
- return ISO2022Modes.ModeIncompleteEscape;
-
- if (bytes[1] == '(')
- {
- if (bytes[2] == 'B') // <esc>(B
- {
- return ISO2022Modes.ModeASCII;
- }
- else if (bytes[2] == 'H') // <esc>(H
- {
- // Actually this is supposed to be Swedish
- // We treat it like ASCII though.
- return ISO2022Modes.ModeASCII;
- }
- else if (bytes[2] == 'J') // <esc>(J
- {
- // Actually this is supposed to be Roman
- // 2 characters are different, but historically we treat it as ascii
- return ISO2022Modes.ModeASCII;
- }
- else if (bytes[2] == 'I') // <esc>(I
- {
- return ISO2022Modes.ModeHalfwidthKatakana;
- }
- }
- else if (bytes[1] == '$')
- {
- if (bytes[2] == '@' || // <esc>$@
- bytes[2] == 'B') // <esc>$B
- {
- return ISO2022Modes.ModeJIS0208;
- }
- else
- {
- // Looking for <esc>$(D
- if (escapeCount < 4)
- return ISO2022Modes.ModeIncompleteEscape;
-
- if (bytes[2] == '(' && bytes[3] == 'D') // <esc>$(D
- {
- // Mlang treated 0208 like 0212 even though that's wrong
- return ISO2022Modes.ModeJIS0208;
- }
- }
- }
- else if (bytes[1] == '&')
- {
- if (bytes[2] == '@') // <esc>&@
- {
- // Ignore ESC & @ (prefix to <esc>$B)
- return ISO2022Modes.ModeNOOP;
- }
- }
-
- // If we get here we fell through and have an invalid/unknown escape sequence
- return ISO2022Modes.ModeInvalidEscape;
- }
-
- private byte DecrementEscapeBytes(ref byte[] bytes, ref int count)
- {
- Debug.Assert(count > 0, "[ISO2022Encoding.DecrementEscapeBytes]count > 0");
-
- // Decrement our count
- count--;
-
- // Remember the first one
- byte returnValue = bytes[0];
-
- // Move them down one.
- for (int i = 0; i < count; i++)
- {
- bytes[i] = bytes[i+1];
- }
-
- // Clear out the last byte
- bytes[count] = 0;
-
- // Return the old 1st byte
- return returnValue;
- }
-
- // Note that in DBCS mode mlang passed through ' ', '\t' and '\n' as SBCS characters
- // probably to allow mailer formatting without too much extra work.
- private unsafe int GetCharsCP50225KR(byte* bytes, int byteCount,
- char* chars, int charCount, ISO2022Decoder decoder)
- {
- // Get our info.
- Encoding.EncodingCharBuffer buffer = new Encoding.EncodingCharBuffer(
- this, decoder, chars, charCount, bytes, byteCount);
-
- // No mode information yet
- ISO2022Modes currentMode = ISO2022Modes.ModeASCII; // Our current Mode
-
- byte[] escapeBytes = new byte[4];
- int escapeCount = 0;
-
- if (decoder != null)
- {
- currentMode = decoder.currentMode;
-
- // See if we have leftover decoder buffer to use
- // Load our bytesLeftOver
- escapeCount = decoder.bytesLeftOverCount;
-
- // Don't want to mess up decoder if we're counting or throw an exception
- for (int i = 0; i < escapeCount; i++)
- escapeBytes[i] = decoder.bytesLeftOver[i];
- }
-
- // Do this until the end, just do '?' replacement because we don't have fallbacks for decodings.
- while (buffer.MoreData || escapeCount > 0)
- {
- byte ch;
-
- if (escapeCount > 0)
- {
- // Get more escape sequences if necessary
- if (escapeBytes[0] == ESCAPE)
- {
- // Stop if no more input
- if (!buffer.MoreData)
- {
- if (decoder != null && !decoder.MustFlush)
- break;
- }
- else
- {
- // Add it to the sequence we can check
- escapeBytes[escapeCount++] = buffer.GetNextByte();
-
- // We have an escape sequence
- ISO2022Modes modeReturn =
- CheckEscapeSequenceKR(escapeBytes, escapeCount);
-
- if (modeReturn != ISO2022Modes.ModeInvalidEscape)
- {
- if (modeReturn != ISO2022Modes.ModeIncompleteEscape)
- {
- // Processed escape correctly, no effect (we know about KR mode)
- escapeCount = 0;
- }
-
- // Either way, continue to get next escape or real byte
- continue;
- }
- }
-
- // If ModeInvalidEscape, or no input & must flush, then fall through to add escape.
- }
-
- // Still have something left over in escape buffer
- // Get it and move them down one
- ch = DecrementEscapeBytes(ref escapeBytes, ref escapeCount);
- }
- else
- {
- // Get our next byte
- ch = buffer.GetNextByte();
-
- if (ch == ESCAPE)
- {
- // We'll have an escape sequence, use it if we don't have one buffered already
- if (escapeCount == 0)
- {
- // Start this new escape sequence
- escapeBytes[0] = ch;
- escapeCount = 1;
- continue;
- }
-
- // Flush previous escape sequence, then reuse this escape byte
- buffer.AdjustBytes(-1);
- }
- }
-
- if (ch == SHIFT_OUT)
- {
- currentMode = ISO2022Modes.ModeKR;
- continue;
- }
- else if (ch == SHIFT_IN)
- {
- currentMode = ISO2022Modes.ModeASCII;
- continue;
- }
-
- // Get our full character
- ushort iBytes = ch;
- bool b2Bytes = false;
-
- // MLANG was passing through ' ', '\t' and '\n', so we do so as well, but I don't see that in the RFC.
- if (currentMode == ISO2022Modes.ModeKR && ch != ' ' && ch != '\t' && ch != '\n')
- {
- //
- // To handle errors, we need to check:
- // 1. if trailbyte is there
- // 2. if code is valid
- //
- if (escapeCount > 0)
- {
- // Let another escape fall through
- if (escapeBytes[0] != ESCAPE)
- {
- // Move them down one & get the next data
- iBytes <<= 8;
- iBytes |= DecrementEscapeBytes(ref escapeBytes, ref escapeCount);
- b2Bytes = true;
- }
- }
- else if (buffer.MoreData)
- {
- iBytes <<= 8;
- iBytes |= buffer.GetNextByte();
- b2Bytes = true;
- }
- else
- {
- // Not enough input, use decoder if possible
- if (decoder == null || decoder.MustFlush)
- {
- // No decoder, do fallback for lonely 1st byte
- buffer.Fallback(ch);
- break;
- }
-
- // Stick it in the decoder if we're not counting
- if (chars != null)
- {
- escapeBytes[0] = ch;
- escapeCount = 1;
- }
- break;
- }
- }
-
- // We have a iBytes to try to convert.
- char c = mapBytesToUnicode[iBytes];
-
- // See if it was unknown
- if (c == UNKNOWN_CHAR_FLAG && iBytes != 0)
- {
- // Have to do fallback
- if (b2Bytes)
- {
- if (!buffer.Fallback((byte)(iBytes >> 8), (byte)iBytes))
- break;
- }
- else
- {
- if (!buffer.Fallback(ch))
- break;
- }
- }
- else
- {
- if (!buffer.AddChar(c, b2Bytes ? 2:1))
- break;
- }
- }
-
- // Make sure our decoder state matches our mode, if not counting
- if (chars != null && decoder != null)
- {
- // Remember it if we don't flush
- if (!decoder.MustFlush || escapeCount != 0)
- {
- // Either not flushing or had state (from convert)
- Debug.Assert(!decoder.MustFlush || !decoder.m_throwOnOverflow,
- "[ISO2022Encoding.GetCharsCP50225KR]Expected no state or not converting or not flushing");
-
- decoder.currentMode = currentMode;
-
- // Remember escape buffer
- decoder.bytesLeftOverCount = escapeCount;
- decoder.bytesLeftOver = escapeBytes;
- }
- else
- {
- // We flush, clear buffer
- decoder.currentMode = ISO2022Modes.ModeASCII;
- decoder.shiftInOutMode = ISO2022Modes.ModeASCII;
- decoder.bytesLeftOverCount = 0;
- }
-
- decoder.m_bytesUsed = buffer.BytesUsed;
- }
-
- // Return # of characters we found
- return buffer.Count;
- }
-
- // We know we have an escape sequence, so check it starting with the byte after the escape
- private ISO2022Modes CheckEscapeSequenceKR( byte[] bytes, int escapeCount )
- {
- // Have an escape sequence
- if (bytes[0] != ESCAPE)
- return ISO2022Modes.ModeInvalidEscape;
-
- if (escapeCount < 4)
- return ISO2022Modes.ModeIncompleteEscape;
-
- if (bytes[1] == '$' && bytes[2] == ')' && bytes[3] == 'C') // <esc>$)C
- return ISO2022Modes.ModeKR;
-
- // If we get here we fell through and have an invalid/unknown escape sequence
- return ISO2022Modes.ModeInvalidEscape;
- }
-
- // CP52936 is HZ Encoding
- // HZ Encoding has 4 shift sequences:
- // ~~ '~' (\u7e)
- // ~} shift into 1 byte mode,
- // ~{ shift into 2 byte GB 2312-80
- // ~<NL> Maintain 2 byte mode across new lines (ignore both ~ and <NL> characters)
- // (This is for mailers that restrict to 70 or 80 or whatever character lines)
- //
- // According to comment in mlang, lead & trail byte ranges are described in RFC 1843
- // RFC 1843 => valid HZ code range: leading byte 0x21 - 0x77, 2nd byte 0x21 - 0x7e
- // Our 936 code points are or'd with 0x8080, so lead byte 0xa1 - 0xf7, trail byte 0xa1 - 0xfe
- //
- // This encoding is designed for transmission by e-mail and news. No bytes should have high bit set.
- // (all bytes <= 0x7f)
- private unsafe int GetCharsCP52936(byte* bytes, int byteCount,
- char* chars, int charCount, ISO2022Decoder decoder)
- {
- Debug.Assert(byteCount >=0, "[ISO2022Encoding.GetCharsCP52936]count >=0");
- Debug.Assert(bytes!=null, "[ISO2022Encoding.GetCharsCP52936]bytes!=null");
-
- // Get our info.
- Encoding.EncodingCharBuffer buffer = new Encoding.EncodingCharBuffer(
- this, decoder, chars, charCount, bytes, byteCount);
-
- // No mode information yet
- ISO2022Modes currentMode = ISO2022Modes.ModeASCII;
- int byteLeftOver = -1;
- bool bUsedDecoder = false;
-
- if (decoder != null)
- {
- currentMode = decoder.currentMode;
- // See if we have leftover decoder buffer to use
- // Don't want to mess up decoder if we're counting or throw an exception
- if (decoder.bytesLeftOverCount != 0 )
- {
- // Load our bytesLeftOver
- byteLeftOver = decoder.bytesLeftOver[0];
- }
- }
-
- // Do this until the end, just do '?' replacement because we don't have fallbacks for decodings.
- while (buffer.MoreData || byteLeftOver >= 0)
- {
- byte ch;
-
- // May have a left over byte
- if (byteLeftOver >= 0)
- {
- ch = (byte)byteLeftOver;
- byteLeftOver = -1;
- }
- else
- {
- ch = buffer.GetNextByte();
- }
-
- // We're in escape mode
- if (ch == '~')
- {
- // Next char is type of switch
- if (!buffer.MoreData)
- {
- // We don't have anything left, it'll be in decoder or a ?
- // don't fail if we are allowing overflows
- if (decoder == null || decoder.MustFlush)
- {
- // We'll be a '?'
- buffer.Fallback(ch);
- // break if we fail & break if we don't (because !MoreData)
- // Add succeeded, continue
- break;
- }
-
- // Stick it in decoder
- if (decoder != null)
- decoder.ClearMustFlush();
-
- if (chars != null)
- {
- decoder.bytesLeftOverCount = 1;
- decoder.bytesLeftOver[0] = (byte)'~';
- bUsedDecoder = true;
- }
- break;
- }
-
- // What type is it?, get 2nd byte
- ch = buffer.GetNextByte();
-
- if (ch == '~' && currentMode == ISO2022Modes.ModeASCII)
- {
- // Its just a ~~ replacement for ~, add it
- if (!buffer.AddChar((char)ch, 2))
- // Add failed, break for converting
- break;
-
- // Add succeeded, continue
- continue;
- }
- else if (ch == '{')
- {
- // Switching to Double Byte mode
- currentMode = ISO2022Modes.ModeHZ;
- continue;
- }
- else if (ch == '}')
- {
- // Switching to ASCII mode
- currentMode = ISO2022Modes.ModeASCII;
- continue;
- }
- else if (ch == '\n')
- {
- // Ignore ~\n sequence
- continue;
- }
- else
- {
- // Unknown escape, back up and try the '~' as a "normal" byte or lead byte
- buffer.AdjustBytes(-1);
- ch = (byte)'~';
- }
- }
-
- // go ahead and add our data
- if (currentMode != ISO2022Modes.ModeASCII)
- {
- // Should be ModeHZ
- Debug.Assert(currentMode == ISO2022Modes.ModeHZ, "[ISO2022Encoding.GetCharsCP52936]Expected ModeHZ");
- char cm;
-
- // Everett allowed characters < 0x20 to be passed as if they were ASCII
- if (ch < 0x20)
- {
- // Emit it as ASCII
- goto STOREASCII;
- }
-
- // Its multibyte, should have another byte
- if (!buffer.MoreData)
- {
- // No bytes left
- // don't fail if we are allowing overflows
- if (decoder == null || decoder.MustFlush)
- {
- // Not enough bytes, fallback lead byte
- buffer.Fallback(ch);
-
- // Break if we fail & break because !MoreData
- break;
- }
-
- if (decoder != null)
- decoder.ClearMustFlush();
-
- // Stick it in decoder
- if (chars != null)
- {
- decoder.bytesLeftOverCount = 1;
- decoder.bytesLeftOver[0] = ch;
- bUsedDecoder = true;
- }
- break;
- }
-
- // Everett uses space as an escape character for single SBCS bytes
- byte ch2 = buffer.GetNextByte();
- ushort iBytes = (ushort)(ch << 8 | ch2);
-
- if (ch == ' ' && ch2 != 0)
- {
- // Get next char and treat it like ASCII (Everett treated space like an escape
- // allowing the next char to be just ascii)
- cm = (char)ch2;
- goto STOREMULTIBYTE;
- }
-
- // Bytes should be in range: lead byte 0x21-0x77, trail byte: 0x21 - 0x7e
- if ((ch < 0x21 || ch > 0x77 || ch2 < 0x21 || ch2 > 0x7e) &&
- // Everett allowed high bit mappings for same characters (but only if both bits set)
- (ch < 0xa1 || ch > 0xf7 || ch2 < 0xa1 || ch2 > 0xfe))
- {
- // For some reason Everett allowed XX20 to become unicode 3000... (ideo sp)
- if (ch2 == 0x20 && 0x21 <= ch && ch <= 0x7d)
- {
- iBytes = 0x2121;
- goto MULTIBYTE;
- }
-
- // Illegal char, use fallback. If lead byte is 0 have to do it special and do it first
- if (!buffer.Fallback((byte)(iBytes>>8), (byte)(iBytes)))
- break;
- continue;
- }
-
- MULTIBYTE:
- iBytes |= 0x8080;
- // Look up the multibyte char to stick it in our data
-
- // We have a iBytes to try to convert.
- cm = mapBytesToUnicode[iBytes];
-
- STOREMULTIBYTE:
-
- // See if it was unknown
- if (cm == UNKNOWN_CHAR_FLAG && iBytes != 0)
- {
- // Fall back the unknown stuff
- if (!buffer.Fallback((byte)(iBytes>>8), (byte)(iBytes)))
- break;
- continue;
- }
-
- if (!buffer.AddChar(cm, 2))
- break; // convert ran out of buffer, stop
- continue;
- }
-
- // Just ASCII
- // We allow some chars > 7f because everett did, so we have to look them up.
- STOREASCII:
- char c = mapBytesToUnicode[ch];
-
- // Check if it was unknown
- if ((c == UNKNOWN_CHAR_FLAG || c == 0) && (ch != 0))
- {
- // fallback the unkown bytes
- if (!buffer.Fallback((byte)ch))
- break;
- continue;
- }
-
- // Go ahead and add our ASCII character
- if (!buffer.AddChar(c))
- break; // convert ran out of buffer, stop
- }
-
- // Need to remember our state, IF we're not counting
- if (chars != null && decoder != null)
- {
- if (!bUsedDecoder)
- {
- // If we didn't use it, clear the byte left over
- decoder.bytesLeftOverCount = 0;
- }
-
- if (decoder.MustFlush && decoder.bytesLeftOverCount == 0)
- {
- decoder.currentMode = ISO2022Modes.ModeASCII;
- }
- else
- {
- // Either not flushing or had state (from convert)
- Debug.Assert(!decoder.MustFlush || !decoder.m_throwOnOverflow,
- "[ISO2022Encoding.GetCharsCP52936]Expected no state or not converting or not flushing");
-
- decoder.currentMode = currentMode;
- }
- decoder.m_bytesUsed = buffer.BytesUsed;
- }
-
- // Return # of characters we found
- return buffer.Count;
- }
-
- // Note: These all end up with 1/2 bytes of average byte count, so unless we're 1 we're always
- // charCount/2 bytes too big.
- public override int GetMaxByteCount(int charCount)
- {
- if (charCount < 0)
- throw new ArgumentOutOfRangeException(nameof(charCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- // Characters would be # of characters + 1 in case high surrogate is ? * max fallback
- long byteCount = (long)charCount + 1;
-
- if (EncoderFallback.MaxCharCount > 1)
- byteCount *= EncoderFallback.MaxCharCount;
-
- // Start with just generic DBCS values (sort of).
- int perChar = 2;
- int extraStart = 0;
- int extraEnd = 0;
-
- switch (CodePage)
- {
- case 50220:
- case 50221:
- // 2 bytes per char + 3 bytes switch to JIS 0208 or 1 byte + 3 bytes switch to 1 byte CP
- perChar = 5; // 5 max (4.5 average)
- extraEnd = 3; // 3 bytes to shift back to ASCII
- break;
- case 50222:
- // 2 bytes per char + 3 bytes switch to JIS 0208 or 1 byte + 3 bytes switch to 1 byte CP
- perChar = 5; // 5 max (4.5 average)
- extraEnd = 4; // 1 byte to shift from Katakana -> DBCS, 3 bytes to shift back to ASCII from DBCS
- break;
- case 50225:
- // 2 bytes per char + 1 byte SO, or 1 byte per char + 1 byte SI.
- perChar = 3; // 3 max, (2.5 average)
- extraStart = 4; // EUC-KR marker appears at beginning of file.
- extraEnd = 1; // 1 byte to shift back to ascii if necessary.
- break;
- case 52936:
- // 2 bytes per char + 2 byte shift, or 1 byte + 1 byte shift
- // Worst case: left over surrogate with no low surrogate is extra ?, could have to switch to ASCII, then could have HZ and flush to ASCII mode
- perChar = 4; // 4 max, (3.5 average if every other char is HZ/ASCII)
- extraEnd = 2; // 2 if we have to shift back to ASCII
- break;
- }
-
- // Return our surrogate and End plus perChar for each char.
- byteCount *= perChar;
- byteCount += extraStart + extraEnd;
-
- if (byteCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(charCount), Environment.GetResourceString("ArgumentOutOfRange_GetByteCountOverflow"));
-
- return (int)byteCount;
- }
-
- public override int GetMaxCharCount(int byteCount)
- {
- if (byteCount < 0)
- throw new ArgumentOutOfRangeException(nameof(byteCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- int perChar = 1;
- int extraDecoder = 1;
-
- switch (CodePage)
- {
- case 50220:
- case 50221:
- case 50222:
- case 50225:
- perChar = 1; // Worst case all ASCII
- extraDecoder = 3; // Could have left over 3 chars of 4 char escape sequence, that all become ?
- break;
- case 52936:
- perChar = 1; // Worst case all ASCII
- extraDecoder = 1; // sequences are 2 chars, so if next one is illegal, then previous 1 could be ?
- break;
- }
-
- // Figure out our length, perchar * char + whatever extra our decoder could do to us.
- long charCount = ((long)byteCount * perChar) + extraDecoder;
-
- // Just in case we have to fall back unknown ones.
- if (DecoderFallback.MaxCharCount > 1)
- charCount *= DecoderFallback.MaxCharCount;
-
- if (charCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(byteCount), Environment.GetResourceString("ArgumentOutOfRange_GetCharCountOverflow"));
-
- return (int)charCount;
- }
-
- public override Encoder GetEncoder()
- {
- return new ISO2022Encoder(this);
- }
-
- public override Decoder GetDecoder()
- {
- return new ISO2022Decoder(this);
- }
-
- [Serializable]
- internal class ISO2022Encoder : System.Text.EncoderNLS
- {
- internal ISO2022Modes currentMode;
- internal ISO2022Modes shiftInOutMode;
-
- internal ISO2022Encoder(EncodingNLS encoding) : base(encoding)
- {
- // base calls reset
- }
-
- public override void Reset()
- {
- // Reset
- currentMode = ISO2022Modes.ModeASCII;
- shiftInOutMode = ISO2022Modes.ModeASCII;
- charLeftOver = (char)0;
- if (m_fallbackBuffer != null)
- m_fallbackBuffer.Reset();
- }
-
- // Anything left in our encoder?
- internal override bool HasState
- {
- get
- {
- // Don't check shift-out mode, it may be ascii (JP) or not (KR)
- return (this.charLeftOver != (char)0 ||
- currentMode != ISO2022Modes.ModeASCII);
- }
- }
- }
-
- [Serializable]
- internal class ISO2022Decoder : System.Text.DecoderNLS
- {
- internal byte[] bytesLeftOver;
- internal int bytesLeftOverCount;
- internal ISO2022Modes currentMode;
- internal ISO2022Modes shiftInOutMode;
-
- internal ISO2022Decoder(EncodingNLS encoding) : base(encoding)
- {
- // base calls reset
- }
-
- public override void Reset()
- {
- // Reset
- bytesLeftOverCount = 0;
- bytesLeftOver = new byte[4];
- currentMode = ISO2022Modes.ModeASCII;
- shiftInOutMode = ISO2022Modes.ModeASCII;
- if (m_fallbackBuffer != null)
- m_fallbackBuffer.Reset();
- }
-
- // Anything left in our decoder?
- internal override bool HasState
- {
- get
- {
- // If have bytes left over or not shifted back to ASCII then have problem
- return (this.bytesLeftOverCount != 0 ||
- currentMode != ISO2022Modes.ModeASCII);
- }
- }
- }
-
- static ushort[] HalfToFullWidthKanaTable =
- {
- 0xa1a3, // 0x8ea1 : Halfwidth Ideographic Period
- 0xa1d6, // 0x8ea2 : Halfwidth Opening Corner Bracket
- 0xa1d7, // 0x8ea3 : Halfwidth Closing Corner Bracket
- 0xa1a2, // 0x8ea4 : Halfwidth Ideographic Comma
- 0xa1a6, // 0x8ea5 : Halfwidth Katakana Middle Dot
- 0xa5f2, // 0x8ea6 : Halfwidth Katakana Wo
- 0xa5a1, // 0x8ea7 : Halfwidth Katakana Small A
- 0xa5a3, // 0x8ea8 : Halfwidth Katakana Small I
- 0xa5a5, // 0x8ea9 : Halfwidth Katakana Small U
- 0xa5a7, // 0x8eaa : Halfwidth Katakana Small E
- 0xa5a9, // 0x8eab : Halfwidth Katakana Small O
- 0xa5e3, // 0x8eac : Halfwidth Katakana Small Ya
- 0xa5e5, // 0x8ead : Halfwidth Katakana Small Yu
- 0xa5e7, // 0x8eae : Halfwidth Katakana Small Yo
- 0xa5c3, // 0x8eaf : Halfwidth Katakana Small Tu
- 0xa1bc, // 0x8eb0 : Halfwidth Katakana-Hiragana Prolonged Sound Mark
- 0xa5a2, // 0x8eb1 : Halfwidth Katakana A
- 0xa5a4, // 0x8eb2 : Halfwidth Katakana I
- 0xa5a6, // 0x8eb3 : Halfwidth Katakana U
- 0xa5a8, // 0x8eb4 : Halfwidth Katakana E
- 0xa5aa, // 0x8eb5 : Halfwidth Katakana O
- 0xa5ab, // 0x8eb6 : Halfwidth Katakana Ka
- 0xa5ad, // 0x8eb7 : Halfwidth Katakana Ki
- 0xa5af, // 0x8eb8 : Halfwidth Katakana Ku
- 0xa5b1, // 0x8eb9 : Halfwidth Katakana Ke
- 0xa5b3, // 0x8eba : Halfwidth Katakana Ko
- 0xa5b5, // 0x8ebb : Halfwidth Katakana Sa
- 0xa5b7, // 0x8ebc : Halfwidth Katakana Si
- 0xa5b9, // 0x8ebd : Halfwidth Katakana Su
- 0xa5bb, // 0x8ebe : Halfwidth Katakana Se
- 0xa5bd, // 0x8ebf : Halfwidth Katakana So
- 0xa5bf, // 0x8ec0 : Halfwidth Katakana Ta
- 0xa5c1, // 0x8ec1 : Halfwidth Katakana Ti
- 0xa5c4, // 0x8ec2 : Halfwidth Katakana Tu
- 0xa5c6, // 0x8ec3 : Halfwidth Katakana Te
- 0xa5c8, // 0x8ec4 : Halfwidth Katakana To
- 0xa5ca, // 0x8ec5 : Halfwidth Katakana Na
- 0xa5cb, // 0x8ec6 : Halfwidth Katakana Ni
- 0xa5cc, // 0x8ec7 : Halfwidth Katakana Nu
- 0xa5cd, // 0x8ec8 : Halfwidth Katakana Ne
- 0xa5ce, // 0x8ec9 : Halfwidth Katakana No
- 0xa5cf, // 0x8eca : Halfwidth Katakana Ha
- 0xa5d2, // 0x8ecb : Halfwidth Katakana Hi
- 0xa5d5, // 0x8ecc : Halfwidth Katakana Hu
- 0xa5d8, // 0x8ecd : Halfwidth Katakana He
- 0xa5db, // 0x8ece : Halfwidth Katakana Ho
- 0xa5de, // 0x8ecf : Halfwidth Katakana Ma
- 0xa5df, // 0x8ed0 : Halfwidth Katakana Mi
- 0xa5e0, // 0x8ed1 : Halfwidth Katakana Mu
- 0xa5e1, // 0x8ed2 : Halfwidth Katakana Me
- 0xa5e2, // 0x8ed3 : Halfwidth Katakana Mo
- 0xa5e4, // 0x8ed4 : Halfwidth Katakana Ya
- 0xa5e6, // 0x8ed5 : Halfwidth Katakana Yu
- 0xa5e8, // 0x8ed6 : Halfwidth Katakana Yo
- 0xa5e9, // 0x8ed7 : Halfwidth Katakana Ra
- 0xa5ea, // 0x8ed8 : Halfwidth Katakana Ri
- 0xa5eb, // 0x8ed9 : Halfwidth Katakana Ru
- 0xa5ec, // 0x8eda : Halfwidth Katakana Re
- 0xa5ed, // 0x8edb : Halfwidth Katakana Ro
- 0xa5ef, // 0x8edc : Halfwidth Katakana Wa
- 0xa5f3, // 0x8edd : Halfwidth Katakana N
- 0xa1ab, // 0x8ede : Halfwidth Katakana Voiced Sound Mark
- 0xa1ac // 0x8edf : Halfwidth Katakana Semi-Voiced Sound Mark
- };
- }
-}
-#endif // FEATURE_CODEPAGES_FILE
-
diff --git a/src/mscorlib/src/System/Text/Latin1Encoding.cs b/src/mscorlib/src/System/Text/Latin1Encoding.cs
index 56a6c1f949..26009bf6c0 100644
--- a/src/mscorlib/src/System/Text/Latin1Encoding.cs
+++ b/src/mscorlib/src/System/Text/Latin1Encoding.cs
@@ -13,7 +13,6 @@ namespace System.Text
using System.Collections;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
- using System.Security.Permissions;
//
@@ -488,7 +487,6 @@ namespace System.Text
}
}
-#if !FEATURE_NORM_IDNA_ONLY
public override bool IsAlwaysNormalized(NormalizationForm form)
{
// Latin-1 contains precomposed characters, so normal for Form C.
@@ -498,7 +496,6 @@ namespace System.Text
// Only true for form C.
return (form == NormalizationForm.FormC);
}
-#endif // !FEATURE_NORM_IDNA_ONLY
// Since our best fit table is small we'll hard code it
internal override char[] GetBestFitUnicodeToBytesData()
{
diff --git a/src/mscorlib/src/System/Text/MLangCodePageEncoding.cs b/src/mscorlib/src/System/Text/MLangCodePageEncoding.cs
deleted file mode 100644
index a82db91b98..0000000000
--- a/src/mscorlib/src/System/Text/MLangCodePageEncoding.cs
+++ /dev/null
@@ -1,172 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-
-// WARNING:
-//
-// This is just an IObjectReference proxy for the former MLang Encodings (V1.1)
-// We keep the old name now even for the Whidbey V2.0 IObjectReference because it also
-// works with the Everett V1.1 version.
-namespace System.Text
-{
- using System;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- /*=================================MLangCodePageEncoding==================================
- ** This class is here only to deserialize the MLang classes from Everett (V1.1) into
- ** Appropriate Whidbey (V2.0) objects. We also serialize the Whidbey classes
- ** using this proxy since we pretty much need one anyway and that solves Whidbey
- ** to Everett compatibility as well.
- ==============================================================================*/
-
- [Serializable]
- internal sealed class MLangCodePageEncoding : IObjectReference, ISerializable
- {
- // Temp stuff
- [NonSerialized]
- private int m_codePage;
- [NonSerialized]
- private bool m_isReadOnly;
- [NonSerialized]
- private bool m_deserializedFromEverett = false;
-
- [NonSerialized]
- private EncoderFallback encoderFallback = null;
- [NonSerialized]
- private DecoderFallback decoderFallback = null;
-
- // Might need this when GetRealObjecting
- [NonSerialized]
- private Encoding realEncoding = null;
-
- // Constructor called by serialization.
- internal MLangCodePageEncoding(SerializationInfo info, StreamingContext context)
- {
- // Any info?
- if (info==null) throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- // All versions have a code page
- this.m_codePage = (int)info.GetValue("m_codePage", typeof(int));
-
- // See if we have a code page
- try
- {
- //
- // Try Whidbey V2.0 Fields
- //
- this.m_isReadOnly = (bool)info.GetValue("m_isReadOnly", typeof(bool));
-
- this.encoderFallback = (EncoderFallback)info.GetValue("encoderFallback", typeof(EncoderFallback));
- this.decoderFallback = (DecoderFallback)info.GetValue("decoderFallback", typeof(DecoderFallback));
- }
- catch (SerializationException)
- {
- //
- // Didn't have Whidbey things, must be Everett
- //
- this.m_deserializedFromEverett = true;
-
- // May as well be read only
- this.m_isReadOnly = true;
- }
- }
-
- // Just get it from GetEncoding
- public Object GetRealObject(StreamingContext context)
- {
- // Get our encoding (Note: This has default fallbacks for readonly and everett cases)
- this.realEncoding = Encoding.GetEncoding(this.m_codePage);
-
- // If its read only then it uses default fallbacks, otherwise pick up the new ones
- // Otherwise we want to leave the new one read only
- if (!this.m_deserializedFromEverett && !this.m_isReadOnly)
- {
- this.realEncoding = (Encoding)this.realEncoding.Clone();
- this.realEncoding.EncoderFallback = this.encoderFallback;
- this.realEncoding.DecoderFallback = this.decoderFallback;
- }
-
- return this.realEncoding;
- }
-
- // ISerializable implementation
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // We cannot ever call this.
- Debug.Assert(false, "Didn't expect to make it to MLangCodePageEncoding ISerializable.GetObjectData");
- throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
- }
-
-// Same problem with the Encoder, this only happens with Everett Encoders
- [Serializable]
- internal sealed class MLangEncoder : IObjectReference, ISerializable
- {
- // Might need this when GetRealObjecting
- [NonSerialized]
- private Encoding realEncoding = null;
-
- // Constructor called by serialization, have to handle deserializing from Everett
- internal MLangEncoder(SerializationInfo info, StreamingContext context)
- {
- // Any info?
- if (info==null) throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- this.realEncoding = (Encoding)info.GetValue("m_encoding", typeof(Encoding));
- }
-
- // Just get it from GetEncoder
- public Object GetRealObject(StreamingContext context)
- {
- return this.realEncoding.GetEncoder();
- }
-
- // ISerializable implementation, get data for this object
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // We cannot ever call this.
- Debug.Assert(false, "Didn't expect to make it to MLangCodePageEncoding.MLangEncoder.GetObjectData");
- throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
- }
- }
-
-
- // Same problem with the Decoder, this only happens with Everett Decoders
- [Serializable]
- internal sealed class MLangDecoder : IObjectReference, ISerializable
- {
- // Might need this when GetRealObjecting
- [NonSerialized]
- private Encoding realEncoding = null;
-
- // Constructor called by serialization, have to handle deserializing from Everett
- internal MLangDecoder(SerializationInfo info, StreamingContext context)
- {
- // Any info?
- if (info==null) throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- this.realEncoding = (Encoding)info.GetValue("m_encoding", typeof(Encoding));
- }
-
- // Just get it from GetDecoder
- public Object GetRealObject(StreamingContext context)
- {
- return this.realEncoding.GetDecoder();
- }
-
- // ISerializable implementation, get data for this object
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // We cannot ever call this.
- Debug.Assert(false, "Didn't expect to make it to MLangCodePageEncoding.MLangDecoder.GetObjectData");
- throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
- }
- }
- }
-}
diff --git a/src/mscorlib/src/System/Text/Normalization.Windows.cs b/src/mscorlib/src/System/Text/Normalization.Windows.cs
index b2faf0db68..3bcba08934 100644
--- a/src/mscorlib/src/System/Text/Normalization.Windows.cs
+++ b/src/mscorlib/src/System/Text/Normalization.Windows.cs
@@ -21,19 +21,15 @@ namespace System.Text
//
// Flags that track whether given normalization form was initialized
//
-#if !FEATURE_NORM_IDNA_ONLY
private static volatile bool NFC;
private static volatile bool NFD;
private static volatile bool NFKC;
private static volatile bool NFKD;
-#endif // !FEATURE_NORM_IDNA_ONLY
private static volatile bool IDNA;
-#if !FEATURE_NORM_IDNA_ONLY
private static volatile bool NFCDisallowUnassigned;
private static volatile bool NFDDisallowUnassigned;
private static volatile bool NFKCDisallowUnassigned;
private static volatile bool NFKDDisallowUnassigned;
-#endif // !FEATURE_NORM_IDNA_ONLY
private static volatile bool IDNADisallowUnassigned;
private static volatile bool Other;
@@ -77,7 +73,6 @@ namespace System.Text
{
switch ((ExtendedNormalizationForms)form)
{
-#if !FEATURE_NORM_IDNA_ONLY
case ExtendedNormalizationForms.FormC:
if (NFC) return;
InitializeForm(form, "normnfc.nlp");
@@ -101,7 +96,6 @@ namespace System.Text
InitializeForm(form, "normnfkd.nlp");
NFKD = true;
break;
-#endif // !FEATURE_NORM_IDNA_ONLY
case ExtendedNormalizationForms.FormIdna:
if (IDNA) return;
@@ -109,7 +103,6 @@ namespace System.Text
IDNA = true;
break;
-#if !FEATURE_NORM_IDNA_ONLY
case ExtendedNormalizationForms.FormCDisallowUnassigned:
if (NFCDisallowUnassigned) return;
InitializeForm(form, "normnfc.nlp");
@@ -133,7 +126,6 @@ namespace System.Text
InitializeForm(form, "normnfkd.nlp");
NFKDDisallowUnassigned = true;
break;
-#endif // !FEATURE_NORM_IDNA_ONLY
case ExtendedNormalizationForms.FormIdnaDisallowUnassigned:
if (IDNADisallowUnassigned) return;
diff --git a/src/mscorlib/src/System/Text/Normalization.cs b/src/mscorlib/src/System/Text/Normalization.cs
index e7e733a587..c81149d59a 100644
--- a/src/mscorlib/src/System/Text/Normalization.cs
+++ b/src/mscorlib/src/System/Text/Normalization.cs
@@ -5,32 +5,25 @@
namespace System.Text
{
// This is the enumeration for Normalization Forms
-[System.Runtime.InteropServices.ComVisible(true)]
public enum NormalizationForm
{
-#if !FEATURE_NORM_IDNA_ONLY
FormC = 1,
FormD = 2,
FormKC = 5,
FormKD = 6
-#endif // !FEATURE_NORM_IDNA_ONLY
}
internal enum ExtendedNormalizationForms
{
-#if !FEATURE_NORM_IDNA_ONLY
FormC = 1,
FormD = 2,
FormKC = 5,
FormKD = 6,
-#endif // !FEATURE_NORM_IDNA_ONLY
FormIdna = 0xd,
-#if !FEATURE_NORM_IDNA_ONLY
FormCDisallowUnassigned = 0x101,
FormDDisallowUnassigned = 0x102,
FormKCDisallowUnassigned = 0x105,
FormKDDisallowUnassigned = 0x106,
-#endif // !FEATURE_NORM_IDNA_ONLY
FormIdnaDisallowUnassigned = 0x10d
}
}
diff --git a/src/mscorlib/src/System/Text/SBCSCodePageEncoding.cs b/src/mscorlib/src/System/Text/SBCSCodePageEncoding.cs
deleted file mode 100644
index 8b07149fb7..0000000000
--- a/src/mscorlib/src/System/Text/SBCSCodePageEncoding.cs
+++ /dev/null
@@ -1,1009 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#if FEATURE_CODEPAGES_FILE // requires BaseCodePageEncooding
-namespace System.Text
-{
- using System;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Text;
- using System.Threading;
- using System.Globalization;
- using System.Runtime.Serialization;
- using System.Security;
- using System.Security.Permissions;
-
- // SBCSCodePageEncoding
- [Serializable]
- internal class SBCSCodePageEncoding : BaseCodePageEncoding, ISerializable
- {
- // Pointers to our memory section parts
- [NonSerialized]
- unsafe char* mapBytesToUnicode = null; // char 256
- [NonSerialized]
- unsafe byte* mapUnicodeToBytes = null; // byte 65536
- [NonSerialized]
- unsafe int* mapCodePageCached = null; // to remember which CP is cached
-
- const char UNKNOWN_CHAR=(char)0xFFFD;
-
- // byteUnknown is used for default fallback only
- [NonSerialized]
- byte byteUnknown;
- [NonSerialized]
- char charUnknown;
-
- public SBCSCodePageEncoding(int codePage) : this(codePage, codePage)
- {
- }
-
- internal SBCSCodePageEncoding(int codePage, int dataCodePage) : base(codePage, dataCodePage)
- {
- }
-
- // Constructor called by serialization.
- // Note: We use the base GetObjectData however
- internal SBCSCodePageEncoding(SerializationInfo info, StreamingContext context) : base(0)
- {
- // Actually this can't ever get called, CodePageEncoding is our proxy
- Debug.Assert(false, "Didn't expect to make it to SBCSCodePageEncoding serialization constructor");
- throw new ArgumentNullException("this");
- }
-
- // We have a managed code page entry, so load our tables
- // SBCS data section looks like:
- //
- // char[256] - what each byte maps to in unicode. No support for surrogates. 0 is undefined code point
- // (except 0 for byte 0 is expected to be a real 0)
- //
- // byte/char* - Data for best fit (unicode->bytes), again no best fit for Unicode
- // 1st WORD is Unicode // of 1st character position
- // Next bytes are best fit byte for that position. Position is incremented after each byte
- // byte < 0x20 means skip the next n positions. (Where n is the byte #)
- // byte == 1 means that next word is another unicode code point #
- // byte == 0 is unknown. (doesn't override initial WCHAR[256] table!
- protected override unsafe void LoadManagedCodePage()
- {
- // Should be loading OUR code page
- Debug.Assert(pCodePage->CodePage == this.dataTableCodePage,
- "[SBCSCodePageEncoding.LoadManagedCodePage]Expected to load data table code page");
-
- // Make sure we're really a 1 byte code page
- if (pCodePage->ByteCount != 1)
- throw new NotSupportedException(
- Environment.GetResourceString("NotSupported_NoCodepageData", CodePage));
-
- // Remember our unknown bytes & chars
- byteUnknown = (byte)pCodePage->ByteReplace;
- charUnknown = pCodePage->UnicodeReplace;
-
- // Get our mapped section 65536 bytes for unicode->bytes, 256 * 2 bytes for bytes->unicode
- // Plus 4 byte to remember CP # when done loading it. (Don't want to get IA64 or anything out of alignment)
- byte *pMemorySection = GetSharedMemory(65536*1 + 256*2 + 4 + iExtraBytes);
-
- mapBytesToUnicode = (char*)pMemorySection;
- mapUnicodeToBytes = (byte*)(pMemorySection + 256 * 2);
- mapCodePageCached = (int*)(pMemorySection + 256 * 2 + 65536 * 1 + iExtraBytes);
-
- // If its cached (& filled in) we don't have to do anything else
- if (*mapCodePageCached != 0)
- {
- Debug.Assert(*mapCodePageCached == this.dataTableCodePage,
- "[DBCSCodePageEncoding.LoadManagedCodePage]Expected mapped section cached page to be same as data table code page. Cached : " +
- *mapCodePageCached + " Expected:" + this.dataTableCodePage);
-
- if (*mapCodePageCached != this.dataTableCodePage)
- throw new OutOfMemoryException(
- Environment.GetResourceString("Arg_OutOfMemoryException"));
-
- // If its cached (& filled in) we don't have to do anything else
- return;
- }
-
- // Need to read our data file and fill in our section.
- // WARNING: Multiple code pieces could do this at once (so we don't have to lock machine-wide)
- // so be careful here. Only stick legal values in here, don't stick temporary values.
-
- // Read our data file and set mapBytesToUnicode and mapUnicodeToBytes appropriately
- // First table is just all 256 mappings
- char* pTemp = (char*)&(pCodePage->FirstDataWord);
- for (int b = 0; b < 256; b++)
- {
- // Don't want to force 0's to map Unicode wrong. 0 byte == 0 unicode already taken care of
- if (pTemp[b] != 0 || b == 0)
- {
- mapBytesToUnicode[b] = pTemp[b];
-
- if (pTemp[b] != UNKNOWN_CHAR)
- mapUnicodeToBytes[pTemp[b]] = (byte)b;
- }
- else
- {
- mapBytesToUnicode[b] = UNKNOWN_CHAR;
- }
- }
-
- // We're done with our mapped section, set our flag so others don't have to rebuild table.
- *mapCodePageCached = this.dataTableCodePage;
- }
-
- // Private object for locking instead of locking on a public type for SQL reliability work.
- private static Object s_InternalSyncObject;
- private static Object InternalSyncObject
- {
- get
- {
- if (s_InternalSyncObject == null)
- {
- Object o = new Object();
- Interlocked.CompareExchange<Object>(ref s_InternalSyncObject, o, null);
- }
- return s_InternalSyncObject;
- }
- }
-
- // Read in our best fit table
- protected unsafe override void ReadBestFitTable()
- {
- // Lock so we don't confuse ourselves.
- lock(InternalSyncObject)
- {
- // If we got a best fit array already, then don't do this
- if (arrayUnicodeBestFit == null)
- {
- //
- // Read in Best Fit table.
- //
-
- // First check the SBCS->Unicode best fit table, which starts right after the
- // 256 word data table. This table looks like word, word where 1st word is byte and 2nd
- // word is replacement for that word. It ends when byte == 0.
- byte* pData = (byte*)&(pCodePage->FirstDataWord);
- pData += 512;
-
- // Need new best fit array
- char[] arrayTemp = new char[256];
- for (int i = 0; i < 256; i++)
- arrayTemp[i] = mapBytesToUnicode[i];
-
- // See if our words are zero
- ushort byteTemp;
- while ((byteTemp = *((ushort*)pData)) != 0)
- {
-
- Debug.Assert(arrayTemp[byteTemp] == UNKNOWN_CHAR, String.Format(CultureInfo.InvariantCulture,
- "[SBCSCodePageEncoding::ReadBestFitTable] Expected unallocated byte (not 0x{2:X2}) for best fit byte at 0x{0:X2} for code page {1}",
- byteTemp, CodePage, (int)arrayTemp[byteTemp]));
- pData += 2;
-
- arrayTemp[byteTemp] = *((char*)pData);
- pData += 2;
- }
-
- // Remember our new array
- arrayBytesBestFit = arrayTemp;
-
- // It was on 0, it needs to be on next byte
- pData+=2;
- byte* pUnicodeToSBCS = pData;
-
- // Now count our characters from our Unicode->SBCS best fit table,
- // which is right after our 256 byte data table
- int iBestFitCount = 0;
-
- // Now do the UnicodeToBytes Best Fit mapping (this is the one we normally think of when we say "best fit")
- // pData should be pointing at the first data point for Bytes->Unicode table
- int unicodePosition = *((ushort*)pData);
- pData += 2;
-
- while (unicodePosition < 0x10000)
- {
- // Get the next byte
- byte input = *pData;
- pData++;
-
- // build our table:
- if (input == 1)
- {
- // Use next 2 bytes as our byte position
- unicodePosition = *((ushort*)pData);
- pData+=2;
- }
- else if (input < 0x20 && input > 0 && input != 0x1e)
- {
- // Advance input characters
- unicodePosition += input;
- }
- else
- {
- // Use this character if it isn't zero
- if (input > 0)
- iBestFitCount++;
-
- // skip this unicode position in any case
- unicodePosition++;
- }
- }
-
- // Make an array for our best fit data
- arrayTemp = new char[iBestFitCount*2];
-
- // Now actually read in the data
- // reset pData should be pointing at the first data point for Bytes->Unicode table
- pData = pUnicodeToSBCS;
- unicodePosition = *((ushort*)pData);
- pData += 2;
- iBestFitCount = 0;
-
- while (unicodePosition < 0x10000)
- {
- // Get the next byte
- byte input = *pData;
- pData++;
-
- // build our table:
- if (input == 1)
- {
- // Use next 2 bytes as our byte position
- unicodePosition = *((ushort*)pData);
- pData+=2;
- }
- else if (input < 0x20 && input > 0 && input != 0x1e)
- {
- // Advance input characters
- unicodePosition += input;
- }
- else
- {
- // Check for escape for glyph range
- if (input == 0x1e)
- {
- // Its an escape, so just read next byte directly
- input = *pData;
- pData++;
- }
-
- // 0 means just skip me
- if (input > 0)
- {
- // Use this character
- arrayTemp[iBestFitCount++] = (char)unicodePosition;
- // Have to map it to Unicode because best fit will need unicode value of best fit char.
- arrayTemp[iBestFitCount++] = mapBytesToUnicode[input];
-
- // This won't work if it won't round trip.
- Debug.Assert(arrayTemp[iBestFitCount-1] != (char)0,
- String.Format(CultureInfo.InvariantCulture,
- "[SBCSCodePageEncoding.ReadBestFitTable] No valid Unicode value {0:X4} for round trip bytes {1:X4}, encoding {2}",
- (int)mapBytesToUnicode[input], (int)input, CodePage));
- }
- unicodePosition++;
- }
- }
-
- // Remember it
- arrayUnicodeBestFit = arrayTemp;
- }
- }
- }
-
- // GetByteCount
- // Note: We start by assuming that the output will be the same as count. Having
- // an encoder or fallback may change that assumption
- internal override unsafe int GetByteCount(char* chars, int count, EncoderNLS encoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- Debug.Assert(count >= 0, "[SBCSCodePageEncoding.GetByteCount]count is negative");
- Debug.Assert(chars != null, "[SBCSCodePageEncoding.GetByteCount]chars is null");
-
- // Assert because we shouldn't be able to have a null encoder.
- Debug.Assert(encoderFallback != null, "[SBCSCodePageEncoding.GetByteCount]Attempting to use null fallback");
-
- CheckMemorySection();
-
- // Need to test fallback
- EncoderReplacementFallback fallback = null;
-
- // Get any left over characters
- char charLeftOver = (char)0;
- if (encoder != null)
- {
- charLeftOver = encoder.charLeftOver;
- Debug.Assert(charLeftOver == 0 || Char.IsHighSurrogate(charLeftOver),
- "[SBCSCodePageEncoding.GetByteCount]leftover character should be high surrogate");
- fallback = encoder.Fallback as EncoderReplacementFallback;
-
- // Verify that we have no fallbackbuffer, actually for SBCS this is always empty, so just assert
- Debug.Assert(!encoder.m_throwOnOverflow || !encoder.InternalHasFallbackBuffer ||
- encoder.FallbackBuffer.Remaining == 0,
- "[SBCSCodePageEncoding.GetByteCount]Expected empty fallback buffer at start");
- }
- else
- {
- // If we aren't using default fallback then we may have a complicated count.
- fallback = this.EncoderFallback as EncoderReplacementFallback;
- }
-
- if ((fallback != null && fallback.MaxCharCount == 1)/* || bIsBestFit*/)
- {
- // Replacement fallback encodes surrogate pairs as two ?? (or two whatever), so return size is always
- // same as input size.
- // Note that no existing SBCS code pages map code points to supplimentary characters, so this is easy.
-
- // We could however have 1 extra byte if the last call had an encoder and a funky fallback and
- // if we don't use the funky fallback this time.
-
- // Do we have an extra char left over from last time?
- if (charLeftOver > 0)
- count++;
-
- return (count);
- }
-
- // It had a funky fallback, so its more complicated
- // Need buffer maybe later
- EncoderFallbackBuffer fallbackBuffer = null;
-
- // prepare our end
- int byteCount = 0;
- char* charEnd = chars + count;
-
- // We may have a left over character from last time, try and process it.
- if (charLeftOver > 0)
- {
- // Since left over char was a surrogate, it'll have to be fallen back.
- // Get Fallback
- Debug.Assert(encoder != null, "[SBCSCodePageEncoding.GetByteCount]Expect to have encoder if we have a charLeftOver");
- fallbackBuffer = encoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(chars, charEnd, encoder, false);
-
- // This will fallback a pair if *chars is a low surrogate
- fallbackBuffer.InternalFallback(charLeftOver, ref chars);
- }
-
- // Now we may have fallback char[] already from the encoder
-
- // Go ahead and do it, including the fallback.
- char ch;
- while ((ch = (fallbackBuffer == null) ? '\0' : fallbackBuffer.InternalGetNextChar()) != 0 ||
- chars < charEnd)
- {
- // First unwind any fallback
- if (ch == 0)
- {
- // No fallback, just get next char
- ch = *chars;
- chars++;
- }
-
- // get byte for this char
- byte bTemp = mapUnicodeToBytes[ch];
-
- // Check for fallback, this'll catch surrogate pairs too.
- if (bTemp == 0 && ch != (char)0)
- {
- if (fallbackBuffer == null)
- {
- // Create & init fallback buffer
- if (encoder == null)
- fallbackBuffer = this.encoderFallback.CreateFallbackBuffer();
- else
- fallbackBuffer = encoder.FallbackBuffer;
-
- // chars has moved so we need to remember figure it out so Exception fallback
- // index will be correct
- fallbackBuffer.InternalInitialize(charEnd - count, charEnd, encoder, false);
- }
-
- // Get Fallback
- fallbackBuffer.InternalFallback(ch, ref chars);
- continue;
- }
-
- // We'll use this one
- byteCount++;
- }
-
- Debug.Assert(fallbackBuffer == null || fallbackBuffer.Remaining == 0,
- "[SBCSEncoding.GetByteCount]Expected Empty fallback buffer at end");
-
- return (int)byteCount;
- }
-
- internal override unsafe int GetBytes(char* chars, int charCount,
- byte* bytes, int byteCount, EncoderNLS encoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- Debug.Assert(bytes != null, "[SBCSCodePageEncoding.GetBytes]bytes is null");
- Debug.Assert(byteCount >= 0, "[SBCSCodePageEncoding.GetBytes]byteCount is negative");
- Debug.Assert(chars != null, "[SBCSCodePageEncoding.GetBytes]chars is null");
- Debug.Assert(charCount >= 0, "[SBCSCodePageEncoding.GetBytes]charCount is negative");
-
- // Assert because we shouldn't be able to have a null encoder.
- Debug.Assert(encoderFallback != null, "[SBCSCodePageEncoding.GetBytes]Attempting to use null encoder fallback");
-
- CheckMemorySection();
-
- // Need to test fallback
- EncoderReplacementFallback fallback = null;
-
- // Get any left over characters
- char charLeftOver = (char)0;
- if (encoder != null)
- {
- charLeftOver = encoder.charLeftOver;
- Debug.Assert(charLeftOver == 0 || Char.IsHighSurrogate(charLeftOver),
- "[SBCSCodePageEncoding.GetBytes]leftover character should be high surrogate");
- fallback = encoder.Fallback as EncoderReplacementFallback;
-
- // Verify that we have no fallbackbuffer, for SBCS its always empty, so just assert
- Debug.Assert(!encoder.m_throwOnOverflow || !encoder.InternalHasFallbackBuffer ||
- encoder.FallbackBuffer.Remaining == 0,
- "[SBCSCodePageEncoding.GetBytes]Expected empty fallback buffer at start");
-// if (encoder.m_throwOnOverflow && encoder.InternalHasFallbackBuffer &&
-// encoder.FallbackBuffer.Remaining > 0)
-// throw new ArgumentException(Environment.GetResourceString("Argument_EncoderFallbackNotEmpty",
-// this.EncodingName, encoder.Fallback.GetType()));
- }
- else
- {
- // If we aren't using default fallback then we may have a complicated count.
- fallback = this.EncoderFallback as EncoderReplacementFallback;
- }
-
- // prepare our end
- char* charEnd = chars + charCount;
- byte* byteStart = bytes;
- char* charStart = chars;
-
- // See if we do the fast default or slightly slower fallback
- if (fallback != null && fallback.MaxCharCount == 1)
- {
- // Make sure our fallback character is valid first
- byte bReplacement = mapUnicodeToBytes[fallback.DefaultString[0]];
-
- // Check for replacements in range, otherwise fall back to slow version.
- if (bReplacement != 0)
- {
- // We should have exactly as many output bytes as input bytes, unless there's a left
- // over character, in which case we may need one more.
-
- // If we had a left over character will have to add a ? (This happens if they had a funky
- // fallback last time, but not this time.) (We can't spit any out though
- // because with fallback encoder each surrogate is treated as a seperate code point)
- if (charLeftOver > 0)
- {
- // Have to have room
- // Throw even if doing no throw version because this is just 1 char,
- // so buffer will never be big enough
- if (byteCount == 0)
- ThrowBytesOverflow(encoder, true);
-
- // This'll make sure we still have more room and also make sure our return value is correct.
- *(bytes++) = bReplacement;
- byteCount--; // We used one of the ones we were counting.
- }
-
- // This keeps us from overrunning our output buffer
- if (byteCount < charCount)
- {
- // Throw or make buffer smaller?
- ThrowBytesOverflow(encoder, byteCount < 1);
-
- // Just use what we can
- charEnd = chars + byteCount;
- }
-
- // Simple way
- while (chars < charEnd)
- {
- char ch2 = *chars;
- chars++;
-
- byte bTemp = mapUnicodeToBytes[ch2];
-
- // Check for fallback
- if (bTemp == 0 && ch2 != (char)0)
- *bytes = bReplacement;
- else
- *bytes = bTemp;
-
- bytes++;
- }
-
- // Clear encoder
- if (encoder != null)
- {
- encoder.charLeftOver = (char)0;
- encoder.m_charsUsed = (int)(chars-charStart);
- }
- return (int)(bytes - byteStart);
- }
- }
-
- // Slower version, have to do real fallback.
-
- // For fallback we may need a fallback buffer, we know we aren't default fallback
- EncoderFallbackBuffer fallbackBuffer = null;
-
- // prepare our end
- byte* byteEnd = bytes + byteCount;
-
- // We may have a left over character from last time, try and process it.
- if (charLeftOver > 0)
- {
- // Since left over char was a surrogate, it'll have to be fallen back.
- // Get Fallback
- Debug.Assert(encoder != null, "[SBCSCodePageEncoding.GetBytes]Expect to have encoder if we have a charLeftOver");
- fallbackBuffer = encoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(chars, charEnd, encoder, true);
-
- // This will fallback a pair if *chars is a low surrogate
- fallbackBuffer.InternalFallback(charLeftOver, ref chars);
- if (fallbackBuffer.Remaining > byteEnd - bytes)
- {
- // Throw it, if we don't have enough for this we never will
- ThrowBytesOverflow(encoder, true);
- }
- }
-
- // Now we may have fallback char[] already from the encoder fallback above
-
- // Go ahead and do it, including the fallback.
- char ch;
- while ((ch = (fallbackBuffer == null) ? '\0' : fallbackBuffer.InternalGetNextChar()) != 0 ||
- chars < charEnd)
- {
- // First unwind any fallback
- if (ch == 0)
- {
- // No fallback, just get next char
- ch = *chars;
- chars++;
- }
-
- // get byte for this char
- byte bTemp = mapUnicodeToBytes[ch];
-
- // Check for fallback, this'll catch surrogate pairs too.
- if (bTemp == 0 && ch != (char)0)
- {
- // Get Fallback
- if ( fallbackBuffer == null )
- {
- // Create & init fallback buffer
- if (encoder == null)
- fallbackBuffer = this.encoderFallback.CreateFallbackBuffer();
- else
- fallbackBuffer = encoder.FallbackBuffer;
- // chars has moved so we need to remember figure it out so Exception fallback
- // index will be correct
- fallbackBuffer.InternalInitialize(charEnd - charCount, charEnd, encoder, true);
- }
-
- // Make sure we have enough room. Each fallback char will be 1 output char
- // (or recursion exception will be thrown)
- fallbackBuffer.InternalFallback(ch, ref chars);
- if (fallbackBuffer.Remaining > byteEnd - bytes)
- {
- // Didn't use this char, reset it
- Debug.Assert(chars > charStart,
- "[SBCSCodePageEncoding.GetBytes]Expected chars to have advanced (fallback)");
- chars--;
- fallbackBuffer.InternalReset();
-
- // Throw it & drop this data
- ThrowBytesOverflow(encoder, chars == charStart);
- break;
- }
- continue;
- }
-
- // We'll use this one
- // Bounds check
- if (bytes >= byteEnd)
- {
- // didn't use this char, we'll throw or use buffer
- Debug.Assert(fallbackBuffer == null || fallbackBuffer.bFallingBack == false,
- "[SBCSCodePageEncoding.GetBytes]Expected to NOT be falling back");
- if (fallbackBuffer == null || fallbackBuffer.bFallingBack == false)
- {
- Debug.Assert(chars > charStart,
- "[SBCSCodePageEncoding.GetBytes]Expected chars to have advanced (normal)");
- chars--; // don't use last char
- }
- ThrowBytesOverflow(encoder, chars == charStart); // throw ?
- break; // don't throw, stop
- }
-
- // Go ahead and add it
- *bytes = bTemp;
- bytes++;
- }
-
- // encoder stuff if we have one
- if (encoder != null)
- {
- // Fallback stuck it in encoder if necessary, but we have to clear MustFlush cases
- if (fallbackBuffer != null && !fallbackBuffer.bUsedEncoder)
- // Clear it in case of MustFlush
- encoder.charLeftOver = (char)0;
-
- // Set our chars used count
- encoder.m_charsUsed = (int)(chars - charStart);
- }
-
- // Expect Empty fallback buffer for SBCS
- Debug.Assert(fallbackBuffer == null || fallbackBuffer.Remaining == 0,
- "[SBCSEncoding.GetBytes]Expected Empty fallback buffer at end");
-
- return (int)(bytes - byteStart);
- }
-
- // This is internal and called by something else,
- internal override unsafe int GetCharCount(byte* bytes, int count, DecoderNLS decoder)
- {
- // Just assert, we're called internally so these should be safe, checked already
- Debug.Assert(bytes != null, "[SBCSCodePageEncoding.GetCharCount]bytes is null");
- Debug.Assert(count >= 0, "[SBCSCodePageEncoding.GetCharCount]byteCount is negative");
-
- CheckMemorySection();
-
- // See if we have best fit
- bool bUseBestFit = false;
-
- // Only need decoder fallback buffer if not using default replacement fallback or best fit fallback.
- DecoderReplacementFallback fallback = null;
-
- if (decoder == null)
- {
- fallback = this.DecoderFallback as DecoderReplacementFallback;
- bUseBestFit = this.DecoderFallback.IsMicrosoftBestFitFallback;
- }
- else
- {
- fallback = decoder.Fallback as DecoderReplacementFallback;
- bUseBestFit = decoder.Fallback.IsMicrosoftBestFitFallback;
- Debug.Assert(!decoder.m_throwOnOverflow || !decoder.InternalHasFallbackBuffer ||
- decoder.FallbackBuffer.Remaining == 0,
- "[SBCSCodePageEncoding.GetChars]Expected empty fallback buffer at start");
- }
-
- if (bUseBestFit || (fallback != null && fallback.MaxCharCount == 1))
- {
- // Just return length, SBCS stay the same length because they don't map to surrogate
- // pairs and we don't have a decoder fallback.
- return count;
- }
-
- // Might need one of these later
- DecoderFallbackBuffer fallbackBuffer = null;
-
- // Have to do it the hard way.
- // Assume charCount will be == count
- int charCount = count;
- byte[] byteBuffer = new byte[1];
-
- // Do it our fast way
- byte* byteEnd = bytes + count;
-
- // Quick loop
- while (bytes < byteEnd)
- {
- // Faster if don't use *bytes++;
- char c;
- c = mapBytesToUnicode[*bytes];
- bytes++;
-
- // If unknown we have to do fallback count
- if (c == UNKNOWN_CHAR)
- {
- // Must have a fallback buffer
- if (fallbackBuffer == null)
- {
- // Need to adjust count so we get real start
- if (decoder == null)
- fallbackBuffer = this.DecoderFallback.CreateFallbackBuffer();
- else
- fallbackBuffer = decoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(byteEnd - count, null);
- }
-
- // Use fallback buffer
- byteBuffer[0] = *(bytes - 1);
- charCount--; // We'd already reserved one for *(bytes-1)
- charCount += fallbackBuffer.InternalFallback(byteBuffer, bytes);
- }
- }
-
- // Fallback buffer must be empty
- Debug.Assert(fallbackBuffer == null || fallbackBuffer.Remaining == 0,
- "[SBCSEncoding.GetCharCount]Expected Empty fallback buffer at end");
-
- // Converted sequence is same length as input
- return charCount;
- }
-
- internal override unsafe int GetChars(byte* bytes, int byteCount,
- char* chars, int charCount, DecoderNLS decoder)
- {
- // Just need to ASSERT, this is called by something else internal that checked parameters already
- Debug.Assert(bytes != null, "[SBCSCodePageEncoding.GetChars]bytes is null");
- Debug.Assert(byteCount >= 0, "[SBCSCodePageEncoding.GetChars]byteCount is negative");
- Debug.Assert(chars != null, "[SBCSCodePageEncoding.GetChars]chars is null");
- Debug.Assert(charCount >= 0, "[SBCSCodePageEncoding.GetChars]charCount is negative");
-
- CheckMemorySection();
-
- // See if we have best fit
- bool bUseBestFit = false;
-
- // Do it fast way if using ? replacement or best fit fallbacks
- byte* byteEnd = bytes + byteCount;
- byte* byteStart = bytes;
- char* charStart = chars;
-
- // Only need decoder fallback buffer if not using default replacement fallback or best fit fallback.
- DecoderReplacementFallback fallback = null;
-
- if (decoder == null)
- {
- fallback = this.DecoderFallback as DecoderReplacementFallback;
- bUseBestFit = this.DecoderFallback.IsMicrosoftBestFitFallback;
- }
- else
- {
- fallback = decoder.Fallback as DecoderReplacementFallback;
- bUseBestFit = decoder.Fallback.IsMicrosoftBestFitFallback;
- Debug.Assert(!decoder.m_throwOnOverflow || !decoder.InternalHasFallbackBuffer ||
- decoder.FallbackBuffer.Remaining == 0,
- "[SBCSCodePageEncoding.GetChars]Expected empty fallback buffer at start");
- }
-
- if (bUseBestFit || (fallback != null && fallback.MaxCharCount == 1))
- {
- // Try it the fast way
- char replacementChar;
- if (fallback == null)
- replacementChar = '?'; // Best fit alwasy has ? for fallback for SBCS
- else
- replacementChar = fallback.DefaultString[0];
-
- // Need byteCount chars, otherwise too small buffer
- if (charCount < byteCount)
- {
- // Need at least 1 output byte, throw if must throw
- ThrowCharsOverflow(decoder, charCount < 1);
-
- // Not throwing, use what we can
- byteEnd = bytes + charCount;
- }
-
- // Quick loop, just do '?' replacement because we don't have fallbacks for decodings.
- while (bytes < byteEnd)
- {
- char c;
- if (bUseBestFit)
- {
- if (arrayBytesBestFit == null)
- {
- ReadBestFitTable();
- }
- c = arrayBytesBestFit[*bytes];
- }
- else
- c = mapBytesToUnicode[*bytes];
- bytes++;
-
- if (c == UNKNOWN_CHAR)
- // This is an invalid byte in the ASCII encoding.
- *chars = replacementChar;
- else
- *chars = c;
- chars++;
- }
-
- // bytes & chars used are the same
- if (decoder != null)
- decoder.m_bytesUsed = (int)(bytes - byteStart);
- return (int)(chars - charStart);
- }
-
- // Slower way's going to need a fallback buffer
- DecoderFallbackBuffer fallbackBuffer = null;
- byte[] byteBuffer = new byte[1];
- char* charEnd = chars + charCount;
-
- // Not quite so fast loop
- while (bytes < byteEnd)
- {
- // Faster if don't use *bytes++;
- char c = mapBytesToUnicode[*bytes];
- bytes++;
-
- // See if it was unknown
- if (c == UNKNOWN_CHAR)
- {
- // Make sure we have a fallback buffer
- if (fallbackBuffer == null)
- {
- if (decoder == null)
- fallbackBuffer = this.DecoderFallback.CreateFallbackBuffer();
- else
- fallbackBuffer = decoder.FallbackBuffer;
- fallbackBuffer.InternalInitialize(byteEnd - byteCount, charEnd);
- }
-
- // Use fallback buffer
- Debug.Assert(bytes > byteStart,
- "[SBCSCodePageEncoding.GetChars]Expected bytes to have advanced already (unknown byte)");
- byteBuffer[0] = *(bytes - 1);
- // Fallback adds fallback to chars, but doesn't increment chars unless the whole thing fits.
- if (!fallbackBuffer.InternalFallback(byteBuffer, bytes, ref chars))
- {
- // May or may not throw, but we didn't get this byte
- bytes--; // unused byte
- fallbackBuffer.InternalReset(); // Didn't fall this back
- ThrowCharsOverflow(decoder, bytes == byteStart); // throw?
- break; // don't throw, but stop loop
- }
- }
- else
- {
- // Make sure we have buffer space
- if (chars >= charEnd)
- {
- Debug.Assert(bytes > byteStart,
- "[SBCSCodePageEncoding.GetChars]Expected bytes to have advanced already (known byte)");
- bytes--; // unused byte
- ThrowCharsOverflow(decoder, bytes == byteStart); // throw?
- break; // don't throw, but stop loop
- }
-
- *(chars) = c;
- chars++;
- }
- }
-
- // Might have had decoder fallback stuff.
- if (decoder != null)
- decoder.m_bytesUsed = (int)(bytes - byteStart);
-
- // Expect Empty fallback buffer for GetChars
- Debug.Assert(fallbackBuffer == null || fallbackBuffer.Remaining == 0,
- "[SBCSEncoding.GetChars]Expected Empty fallback buffer at end");
-
- return (int)(chars - charStart);
- }
-
- public override int GetMaxByteCount(int charCount)
- {
- if (charCount < 0)
- throw new ArgumentOutOfRangeException(nameof(charCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- // Characters would be # of characters + 1 in case high surrogate is ? * max fallback
- long byteCount = (long)charCount + 1;
-
- if (EncoderFallback.MaxCharCount > 1)
- byteCount *= EncoderFallback.MaxCharCount;
-
- // 1 to 1 for most characters. Only surrogates with fallbacks have less.
-
- if (byteCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(charCount), Environment.GetResourceString("ArgumentOutOfRange_GetByteCountOverflow"));
- return (int)byteCount;
- }
-
- public override int GetMaxCharCount(int byteCount)
- {
- if (byteCount < 0)
- throw new ArgumentOutOfRangeException(nameof(byteCount),
- Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
- Contract.EndContractBlock();
-
- // Just return length, SBCS stay the same length because they don't map to surrogate
- long charCount = (long)byteCount;
-
- // 1 to 1 for most characters. Only surrogates with fallbacks have less, unknown fallbacks could be longer.
- if (DecoderFallback.MaxCharCount > 1)
- charCount *= DecoderFallback.MaxCharCount;
-
- if (charCount > 0x7fffffff)
- throw new ArgumentOutOfRangeException(nameof(byteCount), Environment.GetResourceString("ArgumentOutOfRange_GetCharCountOverflow"));
-
- return (int)charCount;
- }
-
- // True if and only if the encoding only uses single byte code points. (Ie, ASCII, 1252, etc)
- public override bool IsSingleByte
- {
- get
- {
- return true;
- }
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override bool IsAlwaysNormalized(NormalizationForm form)
- {
- // Most of these code pages could be decomposed or have compatibility mappings for KC, KD, & D
- // additionally the allow unassigned forms and IDNA wouldn't work either, so C is our choice.
- if (form == NormalizationForm.FormC)
- {
- // Form C is only true for some code pages. They have to have all 256 code points assigned
- // and not map to unassigned or combinable code points.
- switch (CodePage)
- {
- // Return true for some code pages.
- case 1252: // (Latin I - ANSI)
- case 1250: // (Eastern Europe - ANSI)
- case 1251: // (Cyrillic - ANSI)
- case 1254: // (Turkish - ANSI)
- case 1256: // (Arabic - ANSI)
- case 28591: // (ISO 8859-1 Latin I)
- case 437: // (United States - OEM)
- case 737: // (Greek (aka 437G) - OEM)
- case 775: // (Baltic - OEM)
- case 850: // (Multilingual (Latin I) - OEM)
- case 852: // (Slovak (Latin II) - OEM)
- case 855: // (Cyrillic - OEM)
- case 858: // (Multilingual (Latin I) - OEM + Euro)
- case 860: // (Portuguese - OEM)
- case 861: // (Icelandic - OEM)
- case 862: // (Hebrew - OEM)
- case 863: // (Canadian French - OEM)
- case 865: // (Nordic - OEM)
- case 866: // (Russian - OEM)
- case 869: // (Modern Greek - OEM)
- case 10007: // (Cyrillic - MAC)
- case 10017: // (Ukraine - MAC)
- case 10029: // (Latin II - MAC)
- case 28592: // (ISO 8859-2 Eastern Europe)
- case 28594: // (ISO 8859-4 Baltic)
- case 28595: // (ISO 8859-5 Cyrillic)
- case 28599: // (ISO 8859-9 Latin Alphabet No.5)
- case 28603: // (ISO/IEC 8859-13:1998 (Lithuanian))
- case 28605: // (ISO 8859-15 Latin 9 (IBM923=IBM819+Euro))
- case 037: // (IBM EBCDIC U.S./Canada)
- case 500: // (IBM EBCDIC International)
- case 870: // (IBM EBCDIC Latin-2 Multilingual/ROECE)
- case 1026: // (IBM EBCDIC Latin-5 Turkey)
- case 1047: // (IBM Latin-1/Open System)
- case 1140: // (IBM EBCDIC U.S./Canada (037+Euro))
- case 1141: // (IBM EBCDIC Germany (20273(IBM273)+Euro))
- case 1142: // (IBM EBCDIC Denmark/Norway (20277(IBM277+Euro))
- case 1143: // (IBM EBCDIC Finland/Sweden (20278(IBM278)+Euro))
- case 1144: // (IBM EBCDIC Italy (20280(IBM280)+Euro))
- case 1145: // (IBM EBCDIC Latin America/Spain (20284(IBM284)+Euro))
- case 1146: // (IBM EBCDIC United Kingdom (20285(IBM285)+Euro))
- case 1147: // (IBM EBCDIC France (20297(IBM297+Euro))
- case 1148: // (IBM EBCDIC International (500+Euro))
- case 1149: // (IBM EBCDIC Icelandic (20871(IBM871+Euro))
- case 20273: // (IBM EBCDIC Germany)
- case 20277: // (IBM EBCDIC Denmark/Norway)
- case 20278: // (IBM EBCDIC Finland/Sweden)
- case 20280: // (IBM EBCDIC Italy)
- case 20284: // (IBM EBCDIC Latin America/Spain)
- case 20285: // (IBM EBCDIC United Kingdom)
- case 20297: // (IBM EBCDIC France)
- case 20871: // (IBM EBCDIC Icelandic)
- case 20880: // (IBM EBCDIC Cyrillic)
- case 20924: // (IBM Latin-1/Open System (IBM924=IBM1047+Euro))
- case 21025: // (IBM EBCDIC Cyrillic (Serbian, Bulgarian))
- case 720: // (Arabic - Transparent ASMO)
- case 20866: // (Russian - KOI8)
- case 21866: // (Ukrainian - KOI8-U)
- return true;
- }
- }
-
- // False for IDNA and unknown
- return false;
- }
- }
-}
-#endif // FEATURE_CODEPAGES_FILE
diff --git a/src/mscorlib/src/System/Text/StringBuilder.cs b/src/mscorlib/src/System/Text/StringBuilder.cs
index f20146fe00..72247c333e 100644
--- a/src/mscorlib/src/System/Text/StringBuilder.cs
+++ b/src/mscorlib/src/System/Text/StringBuilder.cs
@@ -41,7 +41,6 @@ namespace System.Text {
// Console.WriteLine(sb1);
// Console.WriteLine(sb2);
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public sealed class StringBuilder : ISerializable
{
@@ -593,7 +592,7 @@ namespace System.Text {
throw new ArgumentOutOfRangeException(nameof(startIndex), Environment.GetResourceString("ArgumentOutOfRange_GenericPositive"));
}
if (charCount<0) {
- throw new ArgumentOutOfRangeException("count", Environment.GetResourceString("ArgumentOutOfRange_GenericPositive"));
+ throw new ArgumentOutOfRangeException(nameof(charCount), Environment.GetResourceString("ArgumentOutOfRange_GenericPositive"));
}
Contract.Ensures(Contract.Result<StringBuilder>() != null);
Contract.EndContractBlock();
@@ -605,7 +604,7 @@ namespace System.Text {
throw new ArgumentNullException(nameof(value));
}
if (charCount > value.Length - startIndex) {
- throw new ArgumentOutOfRangeException("count", Environment.GetResourceString("ArgumentOutOfRange_Index"));
+ throw new ArgumentOutOfRangeException(nameof(charCount), Environment.GetResourceString("ArgumentOutOfRange_Index"));
}
if (charCount==0) {
@@ -715,20 +714,17 @@ namespace System.Text {
}
}
- [System.Runtime.InteropServices.ComVisible(false)]
public StringBuilder AppendLine() {
Contract.Ensures(Contract.Result<StringBuilder>() != null);
return Append(Environment.NewLine);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public StringBuilder AppendLine(string value) {
Contract.Ensures(Contract.Result<StringBuilder>() != null);
Append(value);
return Append(Environment.NewLine);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count) {
if (destination == null) {
throw new ArgumentNullException(nameof(destination));
@@ -848,7 +844,7 @@ namespace System.Text {
}
if (length > Length - startIndex) {
- throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index"));
+ throw new ArgumentOutOfRangeException(nameof(length), Environment.GetResourceString("ArgumentOutOfRange_Index"));
}
Contract.Ensures(Contract.Result<StringBuilder>() != null);
Contract.EndContractBlock();
@@ -1205,7 +1201,7 @@ namespace System.Text {
}
if (charCount < 0) {
- throw new ArgumentOutOfRangeException("count", Environment.GetResourceString("ArgumentOutOfRange_GenericPositive"));
+ throw new ArgumentOutOfRangeException(nameof(charCount), Environment.GetResourceString("ArgumentOutOfRange_GenericPositive"));
}
if (startIndex > value.Length - charCount) {
diff --git a/src/mscorlib/src/System/Text/SurrogateEncoder.cs b/src/mscorlib/src/System/Text/SurrogateEncoder.cs
deleted file mode 100644
index bbfa180f29..0000000000
--- a/src/mscorlib/src/System/Text/SurrogateEncoder.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-
-// WARNING:
-//
-// This is just an IObjectReference proxy for the former V1.1 Surrogate Encoder
-// All this does is make an encoder of the correct type, it DOES NOT maintain state.
-namespace System.Text
-{
- using System;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- /*=================================SurrogateEncoder==================================
- ** This class is here only to deserialize the SurrogateEncoder class from Everett (V1.1) into
- ** Appropriate Whidbey (V2.0) objects.
- ==============================================================================*/
-
- [Serializable]
- internal sealed class SurrogateEncoder : IObjectReference, ISerializable
- {
- // Might need this when GetRealObjecting
- [NonSerialized]
- private Encoding realEncoding = null;
-
- // Constructor called by serialization.
- internal SurrogateEncoder(SerializationInfo info, StreamingContext context)
- {
- // Any info?
- if (info==null) throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- // All versions have a code page
- this.realEncoding = (Encoding)info.GetValue("m_encoding", typeof(Encoding));
- }
-
- // Just get it from GetEncoding
- public Object GetRealObject(StreamingContext context)
- {
- // Need to get our Encoding's Encoder
- return this.realEncoding.GetEncoder();
- }
-
- // ISerializable implementation
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
- {
- // We cannot ever call this.
- Debug.Assert(false, "Didn't expect to make it to SurrogateEncoder.GetObjectData");
- throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
- }
- }
-}
-
diff --git a/src/mscorlib/src/System/Text/UTF7Encoding.cs b/src/mscorlib/src/System/Text/UTF7Encoding.cs
index 624ca735f6..9418d2e768 100644
--- a/src/mscorlib/src/System/Text/UTF7Encoding.cs
+++ b/src/mscorlib/src/System/Text/UTF7Encoding.cs
@@ -10,13 +10,11 @@ namespace System.Text
{
using System;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class UTF7Encoding : Encoding
{
private const String base64Chars =
@@ -127,7 +125,6 @@ namespace System.Text
- [System.Runtime.InteropServices.ComVisible(false)]
public override bool Equals(Object value)
{
UTF7Encoding that = value as UTF7Encoding;
@@ -142,7 +139,6 @@ namespace System.Text
// Compared to all the other encodings, variations of UTF7 are unlikely
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetHashCode()
{
return this.CodePage + this.EncoderFallback.GetHashCode() + this.DecoderFallback.GetHashCode();
@@ -170,20 +166,17 @@ namespace System.Text
return EncodingForwarder.GetByteCount(this, chars, index, count);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetByteCount(String s)
{
return EncodingForwarder.GetByteCount(this, s);
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetByteCount(char* chars, int count)
{
return EncodingForwarder.GetByteCount(this, chars, count);
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override int GetBytes(String s, int charIndex, int charCount,
byte[] bytes, int byteIndex)
{
@@ -206,7 +199,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetBytes(char* chars, int charCount, byte* bytes, int byteCount)
{
return EncodingForwarder.GetBytes(this, chars, charCount, bytes, byteCount);
@@ -221,7 +213,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetCharCount(byte* bytes, int count)
{
return EncodingForwarder.GetCharCount(this, bytes, count);
@@ -234,7 +225,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public unsafe override int GetChars(byte* bytes, int byteCount, char* chars, int charCount)
{
return EncodingForwarder.GetChars(this, bytes, byteCount, chars, charCount);
@@ -243,7 +233,6 @@ namespace System.Text
// Returns a string containing the decoded representation of a range of
// bytes in a byte array.
- [System.Runtime.InteropServices.ComVisible(false)]
public override String GetString(byte[] bytes, int index, int count)
{
return EncodingForwarder.GetString(this, bytes, index, count);
diff --git a/src/mscorlib/src/System/Text/UTF8Encoding.cs b/src/mscorlib/src/System/Text/UTF8Encoding.cs
index ba19649b56..191bbfef56 100644
--- a/src/mscorlib/src/System/Text/UTF8Encoding.cs
+++ b/src/mscorlib/src/System/Text/UTF8Encoding.cs
@@ -20,7 +20,6 @@ namespace System.Text
using System;
using System.Globalization;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
@@ -37,7 +36,6 @@ namespace System.Text
// switch the byte orderings.
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public class UTF8Encoding : Encoding
{
/*
@@ -131,7 +129,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetByteCount(char* chars, int count)
{
return EncodingForwarder.GetByteCount(this, chars, count);
@@ -159,7 +156,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetBytes(char* chars, int charCount, byte* bytes, int byteCount)
{
return EncodingForwarder.GetBytes(this, chars, charCount, bytes, byteCount);
@@ -174,7 +170,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetCharCount(byte* bytes, int count)
{
return EncodingForwarder.GetCharCount(this, bytes, count);
@@ -187,7 +182,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public unsafe override int GetChars(byte* bytes, int byteCount, char* chars, int charCount)
{
return EncodingForwarder.GetChars(this, bytes, byteCount, chars, charCount);
@@ -196,7 +190,6 @@ namespace System.Text
// Returns a string containing the decoded representation of a range of
// bytes in a byte array.
- [System.Runtime.InteropServices.ComVisible(false)]
public override String GetString(byte[] bytes, int index, int count)
{
return EncodingForwarder.GetString(this, bytes, index, count);
diff --git a/src/mscorlib/src/System/Text/UnicodeEncoding.cs b/src/mscorlib/src/System/Text/UnicodeEncoding.cs
index 25255c3230..d8ef18ab05 100644
--- a/src/mscorlib/src/System/Text/UnicodeEncoding.cs
+++ b/src/mscorlib/src/System/Text/UnicodeEncoding.cs
@@ -11,13 +11,11 @@ namespace System.Text
using System;
using System.Globalization;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class UnicodeEncoding : Encoding
{
// Used by Encoding.BigEndianUnicode/Unicode for lazy initialization
@@ -111,7 +109,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetByteCount(char* chars, int count)
{
return EncodingForwarder.GetByteCount(this, chars, count);
@@ -139,7 +136,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetBytes(char* chars, int charCount, byte* bytes, int byteCount)
{
return EncodingForwarder.GetBytes(this, chars, charCount, bytes, byteCount);
@@ -154,7 +150,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public override unsafe int GetCharCount(byte* bytes, int count)
{
return EncodingForwarder.GetCharCount(this, bytes, count);
@@ -167,7 +162,6 @@ namespace System.Text
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(false)]
public unsafe override int GetChars(byte* bytes, int byteCount, char* chars, int charCount)
{
return EncodingForwarder.GetChars(this, bytes, byteCount, chars, charCount);
@@ -176,7 +170,6 @@ namespace System.Text
// Returns a string containing the decoded representation of a range of
// bytes in a byte array.
- [System.Runtime.InteropServices.ComVisible(false)]
public override String GetString(byte[] bytes, int index, int count)
{
return EncodingForwarder.GetString(this, bytes, index, count);
@@ -1659,7 +1652,6 @@ namespace System.Text
}
- [System.Runtime.InteropServices.ComVisible(false)]
public override System.Text.Encoder GetEncoder()
{
return new EncoderNLS(this);
diff --git a/src/mscorlib/src/System/ThreadAttributes.cs b/src/mscorlib/src/System/ThreadAttributes.cs
index bbd859c3af..6248736107 100644
--- a/src/mscorlib/src/System/ThreadAttributes.cs
+++ b/src/mscorlib/src/System/ThreadAttributes.cs
@@ -4,16 +4,13 @@
/*=============================================================================
**
-**
-**
** Purpose: For Threads-related custom attributes.
**
-**
=============================================================================*/
-namespace System {
- [AttributeUsage (AttributeTargets.Method)]
-[System.Runtime.InteropServices.ComVisible(true)]
+namespace System
+{
+ [AttributeUsage(AttributeTargets.Method)]
public sealed class STAThreadAttribute : Attribute
{
public STAThreadAttribute()
@@ -21,8 +18,7 @@ namespace System {
}
}
- [AttributeUsage (AttributeTargets.Method)]
-[System.Runtime.InteropServices.ComVisible(true)]
+ [AttributeUsage(AttributeTargets.Method)]
public sealed class MTAThreadAttribute : Attribute
{
public MTAThreadAttribute()
diff --git a/src/mscorlib/src/System/ThreadStaticAttribute.cs b/src/mscorlib/src/System/ThreadStaticAttribute.cs
index 58842eef0b..3755e65a7b 100644
--- a/src/mscorlib/src/System/ThreadStaticAttribute.cs
+++ b/src/mscorlib/src/System/ThreadStaticAttribute.cs
@@ -12,14 +12,14 @@
**
**
===========================================================*/
-namespace System {
-
- using System;
-[Serializable]
+using System;
+
+namespace System
+{
+ [Serializable]
[AttributeUsage(AttributeTargets.Field, Inherited = false)]
-[System.Runtime.InteropServices.ComVisible(true)]
- public class ThreadStaticAttribute : Attribute
+ public class ThreadStaticAttribute : Attribute
{
public ThreadStaticAttribute()
{
diff --git a/src/mscorlib/src/System/Threading/ApartmentState.cs b/src/mscorlib/src/System/Threading/ApartmentState.cs
index 844f85e9e7..1edf0af98a 100644
--- a/src/mscorlib/src/System/Threading/ApartmentState.cs
+++ b/src/mscorlib/src/System/Threading/ApartmentState.cs
@@ -15,7 +15,6 @@
namespace System.Threading {
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum ApartmentState
{
/*=========================================================================
diff --git a/src/mscorlib/src/System/Threading/AsyncLocal.cs b/src/mscorlib/src/System/Threading/AsyncLocal.cs
index 6ed1545ac7..8c4319bd2c 100644
--- a/src/mscorlib/src/System/Threading/AsyncLocal.cs
+++ b/src/mscorlib/src/System/Threading/AsyncLocal.cs
@@ -127,8 +127,6 @@ namespace System.Threading
{
public static IAsyncLocalValueMap Empty { get; } = new EmptyAsyncLocalValueMap();
- public static IAsyncLocalValueMap Create(IAsyncLocal key, object value) => new OneElementAsyncLocalValueMap(key, value);
-
// Instance without any key/value pairs. Used as a singleton/
private sealed class EmptyAsyncLocalValueMap : IAsyncLocalValueMap
{
diff --git a/src/mscorlib/src/System/Threading/AutoResetEvent.cs b/src/mscorlib/src/System/Threading/AutoResetEvent.cs
index 78a6fa1234..fc6b2301ca 100644
--- a/src/mscorlib/src/System/Threading/AutoResetEvent.cs
+++ b/src/mscorlib/src/System/Threading/AutoResetEvent.cs
@@ -14,10 +14,8 @@
namespace System.Threading {
using System;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class AutoResetEvent : EventWaitHandle
{
public AutoResetEvent(bool initialState) : base(initialState,EventResetMode.AutoReset){ }
diff --git a/src/mscorlib/src/System/Threading/CancellationToken.cs b/src/mscorlib/src/System/Threading/CancellationToken.cs
index 5b78f20900..b68ba4c046 100644
--- a/src/mscorlib/src/System/Threading/CancellationToken.cs
+++ b/src/mscorlib/src/System/Threading/CancellationToken.cs
@@ -9,7 +9,6 @@
using System;
using System.Runtime.InteropServices;
-using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.Runtime;
@@ -38,7 +37,6 @@ namespace System.Threading
/// All members of this struct are thread-safe and may be used concurrently from multiple threads.
/// </para>
/// </remarks>
- [ComVisible(false)]
[DebuggerDisplay("IsCancellationRequested = {IsCancellationRequested}")]
public struct CancellationToken
{
@@ -317,11 +315,8 @@ namespace System.Threading
}
// the real work..
- [MethodImpl(MethodImplOptions.NoInlining)]
private CancellationTokenRegistration Register(Action<Object> callback, Object state, bool useSynchronizationContext, bool useExecutionContext)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
-
if (callback == null)
throw new ArgumentNullException(nameof(callback));
@@ -341,8 +336,7 @@ namespace System.Threading
if (useSynchronizationContext)
capturedSyncContext = SynchronizationContext.Current;
if (useExecutionContext)
- capturedExecutionContext = ExecutionContext.Capture(
- ref stackMark, ExecutionContext.CaptureOptions.OptimizeDefaultCase); // ideally we'd also use IgnoreSyncCtx, but that could break compat
+ capturedExecutionContext = ExecutionContext.Capture();
}
// Register the callback with the source.
diff --git a/src/mscorlib/src/System/Threading/CancellationTokenRegistration.cs b/src/mscorlib/src/System/Threading/CancellationTokenRegistration.cs
index ac27fe30e6..89e98fa3c8 100644
--- a/src/mscorlib/src/System/Threading/CancellationTokenRegistration.cs
+++ b/src/mscorlib/src/System/Threading/CancellationTokenRegistration.cs
@@ -6,7 +6,6 @@
////////////////////////////////////////////////////////////////////////////////
using System.Diagnostics.Contracts;
-using System.Security.Permissions;
using System.Runtime.CompilerServices;
namespace System.Threading
diff --git a/src/mscorlib/src/System/Threading/CancellationTokenSource.cs b/src/mscorlib/src/System/Threading/CancellationTokenSource.cs
index fe9e0dec76..1e70d6f30f 100644
--- a/src/mscorlib/src/System/Threading/CancellationTokenSource.cs
+++ b/src/mscorlib/src/System/Threading/CancellationTokenSource.cs
@@ -10,7 +10,6 @@ using System;
using System.Security;
using System.Collections.Generic;
using System.Runtime.InteropServices;
-using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.Runtime;
@@ -35,7 +34,6 @@ namespace System.Threading
/// concurrently from multiple threads.
/// </para>
/// </remarks>
- [ComVisible(false)]
public class CancellationTokenSource : IDisposable
{
@@ -864,12 +862,19 @@ namespace System.Threading
/// <param name="token2">The second <see cref="T:System.Threading.CancellationToken">CancellationToken</see> to observe.</param>
/// <returns>A <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> that is linked
/// to the source tokens.</returns>
- public static CancellationTokenSource CreateLinkedTokenSource(CancellationToken token1, CancellationToken token2)
- {
- return token1.CanBeCanceled || token2.CanBeCanceled ?
- new LinkedCancellationTokenSource(token1, token2) :
- new CancellationTokenSource();
- }
+ public static CancellationTokenSource CreateLinkedTokenSource(CancellationToken token1, CancellationToken token2) =>
+ !token1.CanBeCanceled ? CreateLinkedTokenSource(token2) :
+ token2.CanBeCanceled ? new Linked2CancellationTokenSource(token1, token2) :
+ (CancellationTokenSource)new Linked1CancellationTokenSource(token1);
+
+ /// <summary>
+ /// Creates a <see cref="CancellationTokenSource"/> that will be in the canceled state
+ /// when any of the source tokens are in the canceled state.
+ /// </summary>
+ /// <param name="token">The first <see cref="T:System.Threading.CancellationToken">CancellationToken</see> to observe.</param>
+ /// <returns>A <see cref="CancellationTokenSource"/> that is linked to the source tokens.</returns>
+ internal static CancellationTokenSource CreateLinkedTokenSource(CancellationToken token) =>
+ token.CanBeCanceled ? new Linked1CancellationTokenSource(token) : new CancellationTokenSource();
/// <summary>
/// Creates a <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> that will be in the canceled state
@@ -884,14 +889,19 @@ namespace System.Threading
if (tokens == null)
throw new ArgumentNullException(nameof(tokens));
- if (tokens.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("CancellationToken_CreateLinkedToken_TokensIsEmpty"));
-
- // a defensive copy is not required as the array has value-items that have only a single IntPtr field,
- // hence each item cannot be null itself, and reads of the payloads cannot be torn.
- Contract.EndContractBlock();
-
- return new LinkedCancellationTokenSource(tokens);
+ switch (tokens.Length)
+ {
+ case 0:
+ throw new ArgumentException(Environment.GetResourceString("CancellationToken_CreateLinkedToken_TokensIsEmpty"));
+ case 1:
+ return CreateLinkedTokenSource(tokens[0]);
+ case 2:
+ return CreateLinkedTokenSource(tokens[0], tokens[1]);
+ default:
+ // a defensive copy is not required as the array has value-items that have only a single reference field,
+ // hence each item cannot be null itself, and reads of the payloads cannot be torn.
+ return new LinkedNCancellationTokenSource(tokens);
+ }
}
@@ -907,35 +917,50 @@ namespace System.Threading
}
}
- private sealed class LinkedCancellationTokenSource : CancellationTokenSource
+ private sealed class Linked1CancellationTokenSource : CancellationTokenSource
{
- private static readonly Action<object> s_linkedTokenCancelDelegate =
- s => ((CancellationTokenSource)s).NotifyCancellation(throwOnFirstException: false); // skip ThrowIfDisposed() check in Cancel()
- private CancellationTokenRegistration[] m_linkingRegistrations;
+ private readonly CancellationTokenRegistration _reg1;
- internal LinkedCancellationTokenSource(CancellationToken token1, CancellationToken token2)
+ internal Linked1CancellationTokenSource(CancellationToken token1)
{
- bool token2CanBeCanceled = token2.CanBeCanceled;
+ _reg1 = token1.InternalRegisterWithoutEC(LinkedNCancellationTokenSource.s_linkedTokenCancelDelegate, this);
+ }
- if (token1.CanBeCanceled)
- {
- m_linkingRegistrations = new CancellationTokenRegistration[token2CanBeCanceled ? 2 : 1]; // there will be at least 1 and at most 2 linkings
- m_linkingRegistrations[0] = token1.InternalRegisterWithoutEC(s_linkedTokenCancelDelegate, this);
- }
+ protected override void Dispose(bool disposing)
+ {
+ if (!disposing || m_disposed) return;
+ _reg1.Dispose();
+ base.Dispose(disposing);
+ }
+ }
- if (token2CanBeCanceled)
- {
- int index = 1;
- if (m_linkingRegistrations == null)
- {
- m_linkingRegistrations = new CancellationTokenRegistration[1]; // this will be the only linking
- index = 0;
- }
- m_linkingRegistrations[index] = token2.InternalRegisterWithoutEC(s_linkedTokenCancelDelegate, this);
- }
+ private sealed class Linked2CancellationTokenSource : CancellationTokenSource
+ {
+ private readonly CancellationTokenRegistration _reg1;
+ private readonly CancellationTokenRegistration _reg2;
+
+ internal Linked2CancellationTokenSource(CancellationToken token1, CancellationToken token2)
+ {
+ _reg1 = token1.InternalRegisterWithoutEC(LinkedNCancellationTokenSource.s_linkedTokenCancelDelegate, this);
+ _reg2 = token2.InternalRegisterWithoutEC(LinkedNCancellationTokenSource.s_linkedTokenCancelDelegate, this);
}
- internal LinkedCancellationTokenSource(params CancellationToken[] tokens)
+ protected override void Dispose(bool disposing)
+ {
+ if (!disposing || m_disposed) return;
+ _reg1.Dispose();
+ _reg2.Dispose();
+ base.Dispose(disposing);
+ }
+ }
+
+ private sealed class LinkedNCancellationTokenSource : CancellationTokenSource
+ {
+ internal static readonly Action<object> s_linkedTokenCancelDelegate =
+ s => ((CancellationTokenSource)s).NotifyCancellation(throwOnFirstException: false); // skip ThrowIfDisposed() check in Cancel()
+ private CancellationTokenRegistration[] m_linkingRegistrations;
+
+ internal LinkedNCancellationTokenSource(params CancellationToken[] tokens)
{
m_linkingRegistrations = new CancellationTokenRegistration[tokens.Length];
@@ -968,7 +993,6 @@ namespace System.Threading
base.Dispose(disposing);
}
-
}
}
diff --git a/src/mscorlib/src/System/Threading/CountdownEvent.cs b/src/mscorlib/src/System/Threading/CountdownEvent.cs
index d86a2ccfb8..af055e347e 100644
--- a/src/mscorlib/src/System/Threading/CountdownEvent.cs
+++ b/src/mscorlib/src/System/Threading/CountdownEvent.cs
@@ -11,7 +11,6 @@
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
using System;
-using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Threading;
using System.Diagnostics;
@@ -30,7 +29,6 @@ namespace System.Threading
/// completed, and Reset, which should only be used when no other threads are
/// accessing the event.
/// </remarks>
- [ComVisible(false)]
[DebuggerDisplay("Initial Count={InitialCount}, Current Count={CurrentCount}")]
public class CountdownEvent : IDisposable
{
diff --git a/src/mscorlib/src/System/Threading/EventWaitHandle.cs b/src/mscorlib/src/System/Threading/EventWaitHandle.cs
index 4b1611c6aa..0268948a5c 100644
--- a/src/mscorlib/src/System/Threading/EventWaitHandle.cs
+++ b/src/mscorlib/src/System/Threading/EventWaitHandle.cs
@@ -15,10 +15,10 @@
namespace System.Security.AccessControl
{
- public class EventWaitHandleSecurity
+ internal class EventWaitHandleSecurity
{
}
- public enum EventWaitHandleRights
+ internal enum EventWaitHandleRights
{
}
}
@@ -28,7 +28,6 @@ namespace System.Threading
using System;
using System.Threading;
using System.Runtime.CompilerServices;
- using System.Security.Permissions;
using System.IO;
using Microsoft.Win32;
using Microsoft.Win32.SafeHandles;
@@ -89,7 +88,7 @@ namespace System.Threading
{
}
- public unsafe EventWaitHandle(bool initialState, EventResetMode mode, string name, out bool createdNew, EventWaitHandleSecurity eventSecurity)
+ internal unsafe EventWaitHandle(bool initialState, EventResetMode mode, string name, out bool createdNew, EventWaitHandleSecurity eventSecurity)
{
if(name != null)
{
@@ -146,7 +145,7 @@ namespace System.Threading
return OpenExisting(name, (EventWaitHandleRights)0);
}
- public static EventWaitHandle OpenExisting(string name, EventWaitHandleRights rights)
+ internal static EventWaitHandle OpenExisting(string name, EventWaitHandleRights rights)
{
EventWaitHandle result;
switch (OpenExistingWorker(name, rights, out result))
@@ -171,11 +170,6 @@ namespace System.Threading
return OpenExistingWorker(name, (EventWaitHandleRights)0, out result) == OpenExistingResult.Success;
}
- public static bool TryOpenExisting(string name, EventWaitHandleRights rights, out EventWaitHandle result)
- {
- return OpenExistingWorker(name, rights, out result) == OpenExistingResult.Success;
- }
-
private static OpenExistingResult OpenExistingWorker(string name, EventWaitHandleRights rights, out EventWaitHandle result)
{
#if PLATFORM_UNIX
diff --git a/src/mscorlib/src/System/Threading/ExecutionContext.cs b/src/mscorlib/src/System/Threading/ExecutionContext.cs
index 5ea9942f65..47a55a3bb9 100644
--- a/src/mscorlib/src/System/Threading/ExecutionContext.cs
+++ b/src/mscorlib/src/System/Threading/ExecutionContext.cs
@@ -19,7 +19,6 @@ namespace System.Threading
using System.Reflection;
using System.Runtime.ExceptionServices;
using System.Runtime.Serialization;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
@@ -27,7 +26,6 @@ namespace System.Threading
using System.Diagnostics.Contracts;
using System.Diagnostics.CodeAnalysis;
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate void ContextCallback(Object state);
internal struct ExecutionContextSwitcher
@@ -55,7 +53,7 @@ namespace System.Threading
[Serializable]
public sealed class ExecutionContext : IDisposable, ISerializable
{
- private static readonly ExecutionContext Default = new ExecutionContext();
+ internal static readonly ExecutionContext Default = new ExecutionContext();
private readonly IAsyncLocalValueMap m_localValues;
private readonly IAsyncLocal[] m_localChangeNotifications;
@@ -93,16 +91,10 @@ namespace System.Threading
public static ExecutionContext Capture()
{
ExecutionContext executionContext = Thread.CurrentThread.ExecutionContext;
- if (executionContext == null)
- {
- return Default;
- }
- if (executionContext.m_isFlowSuppressed)
- {
- // Prevent ExecutionContext.Run on a suppressed-flow context for desktop framework compatibility
- return null;
- }
- return executionContext;
+ return
+ executionContext == null ? Default :
+ executionContext.m_isFlowSuppressed ? null :
+ executionContext;
}
private ExecutionContext ShallowClone(bool isFlowSuppressed)
@@ -301,38 +293,6 @@ namespace System.Threading
}
}
- #region Wrappers for CLR compat, to avoid ifdefs all over the BCL
-
- [Flags]
- internal enum CaptureOptions
- {
- None = 0x00,
- IgnoreSyncCtx = 0x01,
- OptimizeDefaultCase = 0x02,
- }
-
- internal static ExecutionContext Capture(ref StackCrawlMark stackMark, CaptureOptions captureOptions)
- {
- return Capture();
- }
-
- [FriendAccessAllowed]
- internal static ExecutionContext FastCapture()
- {
- return Capture();
- }
-
- [FriendAccessAllowed]
- internal static void Run(ExecutionContext executionContext, ContextCallback callback, Object state, bool preserveSyncCtx)
- {
- Run(executionContext, callback, state);
- }
-
- internal bool IsDefaultFTContext(bool ignoreSyncCtx)
- {
- return this == Default;
- }
-
public ExecutionContext CreateCopy()
{
return this; // since CoreCLR's ExecutionContext is immutable, we don't need to create copies.
@@ -342,18 +302,6 @@ namespace System.Threading
{
// For CLR compat only
}
-
- internal static ExecutionContext PreAllocatedDefault
- {
- get { return ExecutionContext.Default; }
- }
-
- internal bool IsPreAllocatedDefault
- {
- get { return this == ExecutionContext.Default; }
- }
-
- #endregion
}
public struct AsyncFlowControl : IDisposable
diff --git a/src/mscorlib/src/System/Threading/IObjectHandle.cs b/src/mscorlib/src/System/Threading/IObjectHandle.cs
deleted file mode 100644
index 464f06e52d..0000000000
--- a/src/mscorlib/src/System/Threading/IObjectHandle.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-** IObjectHandle defines the interface for unwrapping objects.
-** Objects that are marshal by value object can be returned through
-** an indirection allowing the caller to control when the
-** object is loaded into their domain. The caller can unwrap
-** the object from the indirection through this interface.
-**
-**
-===========================================================*/
-namespace System.Runtime.Remoting {
-
- using System;
- using System.Runtime.InteropServices;
-
- [ InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown),
- GuidAttribute("C460E2B4-E199-412a-8456-84DC3E4838C3") ]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface IObjectHandle {
- // Unwrap the object. Implementers of this interface
- // typically have an indirect referece to another object.
- Object Unwrap();
- }
-}
-
diff --git a/src/mscorlib/src/System/Threading/Interlocked.cs b/src/mscorlib/src/System/Threading/Interlocked.cs
index 8a0b527fc0..131d51a65b 100644
--- a/src/mscorlib/src/System/Threading/Interlocked.cs
+++ b/src/mscorlib/src/System/Threading/Interlocked.cs
@@ -6,7 +6,6 @@
namespace System.Threading
{
using System;
- using System.Security.Permissions;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
using System.Runtime.Versioning;
@@ -25,13 +24,11 @@ namespace System.Threading
* long
*****************************/
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static int Increment(ref int location)
{
return Add(ref location, 1);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static long Increment(ref long location)
{
return Add(ref location, 1);
@@ -43,7 +40,6 @@ namespace System.Threading
* long
*****************************/
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static int Decrement(ref int location)
{
return Add(ref location, -1);
@@ -65,7 +61,6 @@ namespace System.Threading
*****************************/
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern int Exchange(ref int location1, int value);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -78,15 +73,11 @@ namespace System.Threading
public static extern double Exchange(ref double location1, double value);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern Object Exchange(ref Object location1, Object value);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern IntPtr Exchange(ref IntPtr location1, IntPtr value);
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- [System.Runtime.InteropServices.ComVisible(false)]
public static T Exchange<T>(ref T location1, T value) where T : class
{
_Exchange(__makeref(location1), __makeref(value));
@@ -98,7 +89,6 @@ namespace System.Threading
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern void _Exchange(TypedReference location1, TypedReference value);
/******************************
@@ -112,7 +102,6 @@ namespace System.Threading
*****************************/
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern int CompareExchange(ref int location1, int value, int comparand);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -125,11 +114,9 @@ namespace System.Threading
public static extern double CompareExchange(ref double location1, double value, double comparand);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern Object CompareExchange(ref Object location1, Object value, Object comparand);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern IntPtr CompareExchange(ref IntPtr location1, IntPtr value, IntPtr comparand);
/*****************************************************************
@@ -156,8 +143,6 @@ namespace System.Threading
* for details.
*****************************************************************/
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- [System.Runtime.InteropServices.ComVisible(false)]
public static T CompareExchange<T>(ref T location1, T value, T comparand) where T : class
{
// _CompareExchange() passes back the value read from location1 via local named 'value'
@@ -166,12 +151,10 @@ namespace System.Threading
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern void _CompareExchange(TypedReference location1, TypedReference value, Object comparand);
// BCL-internal overload that returns success via a ref bool param, useful for reliable spin locks.
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern int CompareExchange(ref int location1, int value, int comparand, ref bool succeeded);
/******************************
@@ -181,19 +164,16 @@ namespace System.Threading
*****************************/
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern int ExchangeAdd(ref int location1, int value);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern long ExchangeAdd(ref long location1, long value);
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static int Add(ref int location1, int value)
{
return ExchangeAdd(ref location1, value) + value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static long Add(ref long location1, long value)
{
return ExchangeAdd(ref location1, value) + value;
diff --git a/src/mscorlib/src/System/Threading/LazyInitializer.cs b/src/mscorlib/src/System/Threading/LazyInitializer.cs
index 238cc89dbd..af32673d03 100644
--- a/src/mscorlib/src/System/Threading/LazyInitializer.cs
+++ b/src/mscorlib/src/System/Threading/LazyInitializer.cs
@@ -11,7 +11,6 @@
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
namespace System.Threading
diff --git a/src/mscorlib/src/System/Threading/LockCookie.cs b/src/mscorlib/src/System/Threading/LockCookie.cs
deleted file mode 100644
index c1fbfd828e..0000000000
--- a/src/mscorlib/src/System/Threading/LockCookie.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-/*============================================================
-**
-**
-**
-** Purpose: Defines the lock that implements
-** single-writer/multiple-reader semantics
-**
-**
-===========================================================*/
-
-namespace System.Threading {
-
- using System;
- [System.Runtime.InteropServices.ComVisible(true)]
- public struct LockCookie
- {
- private int _dwFlags;
- private int _dwWriterSeqNum;
- private int _wReaderAndWriterLevel;
- private int _dwThreadID;
-
- public override int GetHashCode()
- {
- return _dwFlags + _dwWriterSeqNum + _wReaderAndWriterLevel + _dwThreadID;
- }
-
- public override bool Equals(Object obj)
- {
- if (obj is LockCookie)
- return Equals((LockCookie)obj);
- else
- return false;
- }
-
- public bool Equals(LockCookie obj)
- {
- return obj._dwFlags == _dwFlags && obj._dwWriterSeqNum == _dwWriterSeqNum &&
- obj._wReaderAndWriterLevel == _wReaderAndWriterLevel && obj._dwThreadID == _dwThreadID;
- }
-
- public static bool operator ==(LockCookie a, LockCookie b)
- {
- return a.Equals(b);
- }
-
- public static bool operator !=(LockCookie a, LockCookie b)
- {
- return !(a == b);
- }
- }
-}
-
diff --git a/src/mscorlib/src/System/Threading/LockRecursionException.cs b/src/mscorlib/src/System/Threading/LockRecursionException.cs
index ab95e70c7e..40f04b00b4 100644
--- a/src/mscorlib/src/System/Threading/LockRecursionException.cs
+++ b/src/mscorlib/src/System/Threading/LockRecursionException.cs
@@ -19,7 +19,6 @@ namespace System.Threading
using System.Runtime.CompilerServices;
[Serializable]
- [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
public class LockRecursionException : System.Exception
{
public LockRecursionException() { }
diff --git a/src/mscorlib/src/System/Threading/ManualResetEvent.cs b/src/mscorlib/src/System/Threading/ManualResetEvent.cs
index 00041567df..a8e012fb43 100644
--- a/src/mscorlib/src/System/Threading/ManualResetEvent.cs
+++ b/src/mscorlib/src/System/Threading/ManualResetEvent.cs
@@ -14,10 +14,8 @@
namespace System.Threading {
using System;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ManualResetEvent : EventWaitHandle
{
public ManualResetEvent(bool initialState) : base(initialState,EventResetMode.ManualReset){}
diff --git a/src/mscorlib/src/System/Threading/ManualResetEventSlim.cs b/src/mscorlib/src/System/Threading/ManualResetEventSlim.cs
index 509af5bfa0..2d57b4102b 100644
--- a/src/mscorlib/src/System/Threading/ManualResetEventSlim.cs
+++ b/src/mscorlib/src/System/Threading/ManualResetEventSlim.cs
@@ -13,7 +13,6 @@
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
using System;
-using System.Security.Permissions;
using System.Threading;
using System.Runtime.InteropServices;
using System.Diagnostics;
@@ -45,7 +44,6 @@ namespace System.Threading
/// completed, and Reset, which should only be used when no other threads are
/// accessing the event.
/// </remarks>
- [ComVisible(false)]
[DebuggerDisplay("Set = {IsSet}")]
public class ManualResetEventSlim : IDisposable
{
diff --git a/src/mscorlib/src/System/Threading/Monitor.cs b/src/mscorlib/src/System/Threading/Monitor.cs
index 94dec13d05..fdbc384243 100644
--- a/src/mscorlib/src/System/Threading/Monitor.cs
+++ b/src/mscorlib/src/System/Threading/Monitor.cs
@@ -17,7 +17,6 @@
namespace System.Threading {
using System;
- using System.Security.Permissions;
using System.Runtime;
using System.Runtime.Remoting;
using System.Threading;
@@ -27,7 +26,6 @@ namespace System.Threading {
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
public static class Monitor
{
/*=========================================================================
@@ -76,7 +74,6 @@ namespace System.Threading {
** own the lock.
=========================================================================*/
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern void Exit(Object obj);
/*=========================================================================
diff --git a/src/mscorlib/src/System/Threading/Mutex.cs b/src/mscorlib/src/System/Threading/Mutex.cs
index 506abb7a07..dcb821307a 100644
--- a/src/mscorlib/src/System/Threading/Mutex.cs
+++ b/src/mscorlib/src/System/Threading/Mutex.cs
@@ -16,7 +16,6 @@ namespace System.Threading
using System;
using System.Threading;
using System.Runtime.CompilerServices;
- using System.Security.Permissions;
using System.IO;
using Microsoft.Win32;
using Microsoft.Win32.SafeHandles;
@@ -27,23 +26,20 @@ namespace System.Threading
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [ComVisible(true)]
public sealed class Mutex : WaitHandle
{
static bool dummyBool;
- public class MutexSecurity
+ internal class MutexSecurity
{
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public Mutex(bool initiallyOwned, String name, out bool createdNew)
: this(initiallyOwned, name, out createdNew, (MutexSecurity)null)
{
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- public unsafe Mutex(bool initiallyOwned, String name, out bool createdNew, MutexSecurity mutexSecurity)
+ internal unsafe Mutex(bool initiallyOwned, String name, out bool createdNew, MutexSecurity mutexSecurity)
{
if (name == string.Empty)
{
@@ -62,26 +58,6 @@ namespace System.Threading
CreateMutexWithGuaranteedCleanup(initiallyOwned, name, out createdNew, secAttrs);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- internal Mutex(bool initiallyOwned, String name, out bool createdNew, Win32Native.SECURITY_ATTRIBUTES secAttrs)
- {
- if (name == string.Empty)
- {
- // Empty name is treated as an unnamed mutex. Set to null, and we will check for null from now on.
- name = null;
- }
-#if !PLATFORM_UNIX
- if (name != null && System.IO.Path.MaxPath < name.Length)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_WaitHandleNameTooLong", Path.MaxPath), nameof(name));
- }
-#endif
- Contract.EndContractBlock();
-
- CreateMutexWithGuaranteedCleanup(initiallyOwned, name, out createdNew, secAttrs);
- }
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal void CreateMutexWithGuaranteedCleanup(bool initiallyOwned, String name, out bool createdNew, Win32Native.SECURITY_ATTRIBUTES secAttrs)
{
RuntimeHelpers.CleanupCode cleanupCode = new RuntimeHelpers.CleanupCode(MutexCleanupCode);
@@ -104,7 +80,6 @@ namespace System.Threading
Win32Native.SECURITY_ATTRIBUTES m_secAttrs;
Mutex m_mutex;
- [PrePrepareMethod]
internal MutexTryCodeHelper(bool initiallyOwned,MutexCleanupInfo cleanupInfo, String name, Win32Native.SECURITY_ATTRIBUTES secAttrs, Mutex mutex)
{
Debug.Assert(name == null || name.Length != 0);
@@ -116,7 +91,6 @@ namespace System.Threading
m_mutex = mutex;
}
- [PrePrepareMethod]
internal void MutexTryCode(object userData)
{
SafeWaitHandle mutexHandle = null;
@@ -153,7 +127,7 @@ namespace System.Threading
#if PLATFORM_UNIX
case Win32Native.ERROR_FILENAME_EXCED_RANGE:
// On Unix, length validation is done by CoreCLR's PAL after converting to utf-8
- throw new ArgumentException(Environment.GetResourceString("Argument_WaitHandleNameTooLong", PathInternal.MaxComponentLength), "name");
+ throw new ArgumentException(Environment.GetResourceString("Argument_WaitHandleNameTooLong", Interop.Sys.MaxName), "name");
#endif
case Win32Native.ERROR_INVALID_HANDLE:
@@ -170,7 +144,6 @@ namespace System.Threading
}
}
- [PrePrepareMethod]
private void MutexCleanupCode(Object userData, bool exceptionThrown)
{
MutexCleanupInfo cleanupInfo = (MutexCleanupInfo) userData;
@@ -198,21 +171,17 @@ namespace System.Threading
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public Mutex(bool initiallyOwned, String name) : this(initiallyOwned, name, out dummyBool) {
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public Mutex(bool initiallyOwned) : this(initiallyOwned, null, out dummyBool)
{
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public Mutex() : this(false, null, out dummyBool)
{
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private Mutex(SafeWaitHandle handle)
{
SetHandleInternal(handle);
@@ -224,11 +193,11 @@ namespace System.Threading
return OpenExisting(name, (MutexRights) 0);
}
- public enum MutexRights
+ internal enum MutexRights
{
}
- public static Mutex OpenExisting(string name, MutexRights rights)
+ internal static Mutex OpenExisting(string name, MutexRights rights)
{
Mutex result;
switch (OpenExistingWorker(name, rights, out result))
@@ -253,11 +222,6 @@ namespace System.Threading
return OpenExistingWorker(name, (MutexRights)0, out result) == OpenExistingResult.Success;
}
- public static bool TryOpenExisting(string name, MutexRights rights, out Mutex result)
- {
- return OpenExistingWorker(name, rights, out result) == OpenExistingResult.Success;
- }
-
private static OpenExistingResult OpenExistingWorker(string name, MutexRights rights, out Mutex result)
{
if (name == null)
@@ -294,7 +258,7 @@ namespace System.Threading
if (name != null && errorCode == Win32Native.ERROR_FILENAME_EXCED_RANGE)
{
// On Unix, length validation is done by CoreCLR's PAL after converting to utf-8
- throw new ArgumentException(Environment.GetResourceString("Argument_WaitHandleNameTooLong", PathInternal.MaxComponentLength), nameof(name));
+ throw new ArgumentException(Environment.GetResourceString("Argument_WaitHandleNameTooLong", Interop.Sys.MaxName), nameof(name));
}
#endif
@@ -316,7 +280,6 @@ namespace System.Threading
// Note: To call ReleaseMutex, you must have an ACL granting you
// MUTEX_MODIFY_STATE rights (0x0001). The other interesting value
// in a Mutex's ACL is MUTEX_ALL_ACCESS (0x1F0001).
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public void ReleaseMutex()
{
if (Win32Native.ReleaseMutex(safeWaitHandle))
@@ -324,11 +287,10 @@ namespace System.Threading
}
else
{
- throw new Exception(Environment.GetResourceString("Arg_SynchronizationLockException"));
+ throw new ApplicationException(Environment.GetResourceString("Arg_SynchronizationLockException"));
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
static int CreateMutexHandle(bool initiallyOwned, String name, Win32Native.SECURITY_ATTRIBUTES securityAttribute, out SafeWaitHandle mutexHandle)
{
int errorCode;
diff --git a/src/mscorlib/src/System/Threading/Overlapped.cs b/src/mscorlib/src/System/Threading/Overlapped.cs
index 2b192c7b3a..d3caff5e74 100644
--- a/src/mscorlib/src/System/Threading/Overlapped.cs
+++ b/src/mscorlib/src/System/Threading/Overlapped.cs
@@ -31,7 +31,6 @@ namespace System.Threading
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
- using System.Security.Permissions;
using System.Runtime.ConstrainedExecution;
using System.Diagnostics;
using System.Diagnostics.Contracts;
@@ -44,7 +43,6 @@ namespace System.Threading
// The first five matches OVERLAPPED structure.
// The remaining are reserved at the end
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct NativeOverlapped
{
public IntPtr InternalLow;
@@ -71,13 +69,11 @@ namespace System.Threading
{
}
- internal _IOCompletionCallback(IOCompletionCallback ioCompletionCallback, ref StackCrawlMark stackMark)
+ internal _IOCompletionCallback(IOCompletionCallback ioCompletionCallback)
{
_ioCompletionCallback = ioCompletionCallback;
// clone the exection context
- _executionContext = ExecutionContext.Capture(
- ref stackMark,
- ExecutionContext.CaptureOptions.IgnoreSyncCtx | ExecutionContext.CaptureOptions.OptimizeDefaultCase);
+ _executionContext = ExecutionContext.Capture();
}
// Context callback: same sig for SendOrPostCallback and ContextCallback
static internal ContextCallback _ccb = new ContextCallback(IOCompletionCallback_Context);
@@ -103,26 +99,23 @@ namespace System.Threading
overlapped = OverlappedData.GetOverlappedFromNative(pOVERLAP).m_overlapped;
helper = overlapped.iocbHelper;
- if (helper == null || helper._executionContext == null || helper._executionContext.IsDefaultFTContext(true))
- {
- // We got here because of UnsafePack (or) Pack with EC flow supressed
- IOCompletionCallback callback = overlapped.UserCallback;
- callback( errorCode, numBytes, pOVERLAP);
- }
- else
- {
- // We got here because of Pack
- helper._errorCode = errorCode;
- helper._numBytes = numBytes;
- helper._pOVERLAP = pOVERLAP;
- using (ExecutionContext executionContext = helper._executionContext.CreateCopy())
- ExecutionContext.Run(executionContext, _ccb, helper, true);
- }
-
- //Quickly check the VM again, to see if a packet has arrived.
-
+ if (helper == null || helper._executionContext == null || helper._executionContext == ExecutionContext.Default)
+ {
+ // We got here because of UnsafePack (or) Pack with EC flow supressed
+ IOCompletionCallback callback = overlapped.UserCallback;
+ callback( errorCode, numBytes, pOVERLAP);
+ }
+ else
+ {
+ // We got here because of Pack
+ helper._errorCode = errorCode;
+ helper._numBytes = numBytes;
+ helper._pOVERLAP = pOVERLAP;
+ ExecutionContext.Run(helper._executionContext, _ccb, helper);
+ }
+
+ //Quickly check the VM again, to see if a packet has arrived.
OverlappedData.CheckVMForIOPacket(out pOVERLAP, out errorCode, out numBytes);
-
} while (pOVERLAP != null);
}
@@ -174,17 +167,15 @@ namespace System.Threading
m_nativeOverlapped.InternalHigh = (IntPtr)0;
}
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
unsafe internal NativeOverlapped* Pack(IOCompletionCallback iocb, Object userData)
{
if (!m_pinSelf.IsNull()) {
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_Overlapped_Pack"));
}
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
if (iocb != null)
{
- m_iocbHelper = new _IOCompletionCallback(iocb, ref stackMark);
+ m_iocbHelper = new _IOCompletionCallback(iocb);
m_iocb = iocb;
}
else
@@ -229,7 +220,6 @@ namespace System.Threading
return AllocateNativeOverlapped();
}
- [ComVisible(false)]
internal IntPtr UserHandle
{
get { return m_nativeOverlapped.EventHandle; }
@@ -255,7 +245,6 @@ namespace System.Threading
#region class Overlapped
/// <internalonly/>
- [System.Runtime.InteropServices.ComVisible(true)]
public class Overlapped
{
private OverlappedData m_overlappedData;
@@ -307,7 +296,6 @@ namespace System.Threading
set { m_overlappedData.UserHandle = new IntPtr(value); }
}
- [ComVisible(false)]
public IntPtr EventHandleIntPtr
{
get { return m_overlappedData.UserHandle; }
@@ -336,7 +324,7 @@ namespace System.Threading
return Pack (iocb, null);
}
- [CLSCompliant(false),ComVisible(false)]
+ [CLSCompliant(false)]
unsafe public NativeOverlapped* Pack(IOCompletionCallback iocb, Object userData)
{
return m_overlappedData.Pack(iocb, userData);
@@ -349,7 +337,7 @@ namespace System.Threading
return UnsafePack (iocb, null);
}
- [CLSCompliant(false), ComVisible(false)]
+ [CLSCompliant(false)]
unsafe public NativeOverlapped* UnsafePack(IOCompletionCallback iocb, Object userData)
{
return m_overlappedData.UnsafePack(iocb, userData);
diff --git a/src/mscorlib/src/System/Threading/ParameterizedThreadStart.cs b/src/mscorlib/src/System/Threading/ParameterizedThreadStart.cs
index 45d24fef49..32b63153c4 100644
--- a/src/mscorlib/src/System/Threading/ParameterizedThreadStart.cs
+++ b/src/mscorlib/src/System/Threading/ParameterizedThreadStart.cs
@@ -15,7 +15,6 @@
namespace System.Threading {
- using System.Security.Permissions;
using System.Threading;
using System.Runtime.InteropServices;
diff --git a/src/mscorlib/src/System/Threading/ReaderWriterLock.cs b/src/mscorlib/src/System/Threading/ReaderWriterLock.cs
deleted file mode 100644
index e35ac7685b..0000000000
--- a/src/mscorlib/src/System/Threading/ReaderWriterLock.cs
+++ /dev/null
@@ -1,276 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//
-/*============================================================
-**
-**
-**
-** Purpose: Defines the lock that implements
-** single-writer/multiple-reader semantics
-**
-**
-===========================================================*/
-
-#if FEATURE_RWLOCK
-namespace System.Threading {
- using System.Threading;
- using System.Security.Permissions;
- using System.Runtime.Remoting;
- using System;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Runtime.ConstrainedExecution;
- using System.Runtime.Versioning;
- using System.Diagnostics.Contracts;
-
- [ComVisible(true)]
- public sealed class ReaderWriterLock: CriticalFinalizerObject
- {
- /*
- * Constructor
- */
- public ReaderWriterLock()
- {
- PrivateInitialize();
- }
-
- /*
- * Destructor
- */
- ~ReaderWriterLock()
- {
- PrivateDestruct();
- }
-
- /*
- * Property that returns TRUE if the reader lock is held
- * by the current thread
- */
- public bool IsReaderLockHeld {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- get {
- return(PrivateGetIsReaderLockHeld());
- }
- }
-
- /*
- * Property that returns TRUE if the writer lock is held
- * by the current thread
- */
- public bool IsWriterLockHeld {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- get {
- return(PrivateGetIsWriterLockHeld());
- }
- }
-
- /*
- * Property that returns the current writer sequence number.
- * The caller should be a reader or writer for getting
- * meaningful results
- */
- public int WriterSeqNum {
- get {
- return(PrivateGetWriterSeqNum());
- }
- }
-
- /*
- * Acquires reader lock. The thread will block if a different
- * thread has writer lock.
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void AcquireReaderLockInternal(int millisecondsTimeout);
-
- public void AcquireReaderLock(int millisecondsTimeout)
- {
- AcquireReaderLockInternal(millisecondsTimeout);
- }
-
-
- public void AcquireReaderLock(TimeSpan timeout)
- {
- long tm = (long)timeout.TotalMilliseconds;
- if (tm < -1 || tm > (long) Int32.MaxValue)
- throw new ArgumentOutOfRangeException(nameof(timeout), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1"));
- AcquireReaderLockInternal((int)tm);
- }
-
- /*
- * Acquires writer lock. The thread will block if a different
- * thread has reader lock. It will dead lock if this thread
- * has reader lock. Use UpgardeToWriterLock when you are not
- * sure if the thread has reader lock
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void AcquireWriterLockInternal(int millisecondsTimeout);
-
- public void AcquireWriterLock(int millisecondsTimeout)
- {
- AcquireWriterLockInternal(millisecondsTimeout);
- }
-
- public void AcquireWriterLock(TimeSpan timeout)
- {
- long tm = (long)timeout.TotalMilliseconds;
- if (tm < -1 || tm > (long) Int32.MaxValue)
- throw new ArgumentOutOfRangeException(nameof(timeout), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1"));
- AcquireWriterLockInternal((int)tm);
- }
-
-
- /*
- * Releases reader lock.
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- private extern void ReleaseReaderLockInternal();
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- public void ReleaseReaderLock()
- {
- ReleaseReaderLockInternal();
- }
-
- /*
- * Releases writer lock.
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- private extern void ReleaseWriterLockInternal();
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- public void ReleaseWriterLock()
- {
- ReleaseWriterLockInternal();
- }
-
- /*
- * Upgardes the thread to a writer. If the thread has is a
- * reader, it is possible that the reader lock was
- * released before writer lock was acquired.
- */
- public LockCookie UpgradeToWriterLock(int millisecondsTimeout)
- {
- LockCookie result = new LockCookie ();
- FCallUpgradeToWriterLock (ref result, millisecondsTimeout);
- return result;
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void FCallUpgradeToWriterLock(ref LockCookie result, int millisecondsTimeout);
-
- public LockCookie UpgradeToWriterLock(TimeSpan timeout)
- {
- long tm = (long)timeout.TotalMilliseconds;
- if (tm < -1 || tm > (long) Int32.MaxValue)
- throw new ArgumentOutOfRangeException(nameof(timeout), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1"));
- return UpgradeToWriterLock((int)tm);
- }
-
- /*
- * Restores the lock status of the thread to the one it was
- * in when it called UpgradeToWriterLock.
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void DowngradeFromWriterLockInternal(ref LockCookie lockCookie);
-
- public void DowngradeFromWriterLock(ref LockCookie lockCookie)
- {
- DowngradeFromWriterLockInternal(ref lockCookie);
- }
-
- /*
- * Releases the lock irrespective of the number of times the thread
- * acquired the lock
- */
- public LockCookie ReleaseLock()
- {
- LockCookie result = new LockCookie ();
- FCallReleaseLock (ref result);
- return result;
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void FCallReleaseLock(ref LockCookie result);
-
- /*
- * Restores the lock status of the thread to the one it was
- * in when it called ReleaseLock.
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void RestoreLockInternal(ref LockCookie lockCookie);
-
- public void RestoreLock(ref LockCookie lockCookie)
- {
- RestoreLockInternal(ref lockCookie);
- }
-
- /*
- * Internal helper that returns TRUE if the reader lock is held
- * by the current thread
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- private extern bool PrivateGetIsReaderLockHeld();
-
- /*
- * Internal helper that returns TRUE if the writer lock is held
- * by the current thread
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- private extern bool PrivateGetIsWriterLockHeld();
-
- /*
- * Internal helper that returns the current writer sequence
- * number. The caller should be a reader or writer for getting
- * meaningful results
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern int PrivateGetWriterSeqNum();
-
- /*
- * Returns true if there were intermediate writes since the
- * sequence number was obtained. The caller should be
- * a reader or writer for getting meaningful results
- */
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public extern bool AnyWritersSince(int seqNum);
-
- // Initialize state kept inside the lock
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void PrivateInitialize();
-
- // Destruct resource associated with the lock
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void PrivateDestruct();
-
- // State
-#pragma warning disable 169
-#pragma warning disable 414 // These fields are not used from managed.
- private IntPtr _hWriterEvent;
- private IntPtr _hReaderEvent;
- private IntPtr _hObjectHandle;
- private int _dwState = 0;
- private int _dwULockID = 0;
- private int _dwLLockID = 0;
- private int _dwWriterID = 0;
- private int _dwWriterSeqNum = 0;
- private short _wWriterLevel;
-#if RWLOCK_STATISTICS
- // WARNING: You must explicitly #define RWLOCK_STATISTICS when you
- // build in both the VM and BCL directories if you want this.
- private int _dwReaderEntryCount = 0;
- private int _dwReaderContentionCount = 0;
- private int _dwWriterEntryCount = 0;
- private int _dwWriterContentionCount = 0;
- private int _dwEventsReleasedCount = 0;
-#endif // RWLOCK_STATISTICS
-#pragma warning restore 414
-#pragma warning restore 169
- }
-}
-#endif //FEATURE_RWLOCK
diff --git a/src/mscorlib/src/System/Threading/SemaphoreSlim.cs b/src/mscorlib/src/System/Threading/SemaphoreSlim.cs
index 92d760d77d..c3b43d9585 100644
--- a/src/mscorlib/src/System/Threading/SemaphoreSlim.cs
+++ b/src/mscorlib/src/System/Threading/SemaphoreSlim.cs
@@ -16,7 +16,6 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Security;
-using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Diagnostics.Contracts;
using System.Threading.Tasks;
@@ -39,7 +38,6 @@ namespace System.Threading
/// completed.
/// </para>
/// </remarks>
- [ComVisible(false)]
[DebuggerDisplay("Current Count = {m_currentCount}")]
public class SemaphoreSlim : IDisposable
{
@@ -315,7 +313,7 @@ namespace System.Threading
if (millisecondsTimeout < -1)
{
throw new ArgumentOutOfRangeException(
- "totalMilliSeconds", millisecondsTimeout, GetResourceString("SemaphoreSlim_Wait_TimeoutWrong"));
+ nameof(millisecondsTimeout), millisecondsTimeout, GetResourceString("SemaphoreSlim_Wait_TimeoutWrong"));
}
cancellationToken.ThrowIfCancellationRequested();
@@ -609,7 +607,7 @@ namespace System.Threading
if (millisecondsTimeout < -1)
{
throw new ArgumentOutOfRangeException(
- "totalMilliSeconds", millisecondsTimeout, GetResourceString("SemaphoreSlim_Wait_TimeoutWrong"));
+ nameof(millisecondsTimeout), millisecondsTimeout, GetResourceString("SemaphoreSlim_Wait_TimeoutWrong"));
}
// Bail early for cancellation
diff --git a/src/mscorlib/src/System/Threading/SpinLock.cs b/src/mscorlib/src/System/Threading/SpinLock.cs
index 1d90890d6e..eee73ce2bf 100644
--- a/src/mscorlib/src/System/Threading/SpinLock.cs
+++ b/src/mscorlib/src/System/Threading/SpinLock.cs
@@ -9,19 +9,14 @@
// repeatedly checking until the lock becomes available. As the thread remains active performing a non-useful task,
// the use of such a lock is a kind of busy waiting and consumes CPU resources without performing real work.
//
-//
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-using System;
-using System.Security.Permissions;
+
+using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
-using System.Runtime.ConstrainedExecution;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
namespace System.Threading
{
-
/// <summary>
/// Provides a mutual exclusion lock primitive where a thread trying to acquire the lock waits in a loop
/// repeatedly checking until the lock becomes available.
@@ -54,7 +49,6 @@ namespace System.Threading
/// concurrently.
/// </para>
/// </remarks>
- [ComVisible(false)]
[DebuggerTypeProxy(typeof(SystemThreading_SpinLockDebugView))]
[DebuggerDisplay("IsHeld = {IsHeld}")]
public struct SpinLock
@@ -106,6 +100,14 @@ namespace System.Threading
// The waiters count is calculated by m_owner & WAITERS_MASK 01111....110
private static int MAXIMUM_WAITERS = WAITERS_MASK;
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private int CompareExchange(ref int location, int value, int comparand, ref bool success)
+ {
+ int result = Interlocked.CompareExchange(ref location, value, comparand);
+ success = (result == comparand);
+ return result;
+ }
+
/// <summary>
/// Initializes a new instance of the <see cref="T:System.Threading.SpinLock"/>
/// structure with the option to track thread IDs to improve debugging.
@@ -158,9 +160,8 @@ namespace System.Threading
int observedOwner = m_owner;
if (lockTaken || //invalid parameter
(observedOwner & ID_DISABLED_AND_ANONYMOUS_OWNED) != LOCK_ID_DISABLE_MASK || //thread tracking is enabled or the lock is already acquired
- Interlocked.CompareExchange(ref m_owner, observedOwner | LOCK_ANONYMOUS_OWNED, observedOwner, ref lockTaken) != observedOwner) //acquiring the lock failed
+ CompareExchange(ref m_owner, observedOwner | LOCK_ANONYMOUS_OWNED, observedOwner, ref lockTaken) != observedOwner) //acquiring the lock failed
ContinueTryEnter(Timeout.Infinite, ref lockTaken); // Then try the slow path if any of the above conditions is met
-
}
/// <summary>
@@ -183,7 +184,22 @@ namespace System.Threading
/// </exception>
public void TryEnter(ref bool lockTaken)
{
- TryEnter(0, ref lockTaken);
+ int observedOwner = m_owner;
+ if (((observedOwner & LOCK_ID_DISABLE_MASK) == 0) | lockTaken)
+ {
+ // Thread tracking enabled or invalid arg. Take slow path.
+ ContinueTryEnter(0, ref lockTaken);
+ }
+ else if ((observedOwner & LOCK_ANONYMOUS_OWNED) != 0)
+ {
+ // Lock already held by someone
+ lockTaken = false;
+ }
+ else
+ {
+ // Lock wasn't held; try to acquire it.
+ CompareExchange(ref m_owner, observedOwner | LOCK_ANONYMOUS_OWNED, observedOwner, ref lockTaken);
+ }
}
/// <summary>
@@ -219,7 +235,7 @@ namespace System.Threading
if (totalMilliseconds < -1 || totalMilliseconds > int.MaxValue)
{
throw new System.ArgumentOutOfRangeException(
- nameof(timeout), timeout, Environment.GetResourceString("SpinLock_TryEnter_ArgumentOutOfRange"));
+ nameof(timeout), timeout, SR.SpinLock_TryEnter_ArgumentOutOfRange);
}
// Call reliable enter with the int-based timeout milliseconds
@@ -254,7 +270,7 @@ namespace System.Threading
if (millisecondsTimeout < -1 || //invalid parameter
lockTaken || //invalid parameter
(observedOwner & ID_DISABLED_AND_ANONYMOUS_OWNED) != LOCK_ID_DISABLE_MASK || //thread tracking is enabled or the lock is already acquired
- Interlocked.CompareExchange(ref m_owner, observedOwner | LOCK_ANONYMOUS_OWNED, observedOwner, ref lockTaken) != observedOwner) // acquiring the lock failed
+ CompareExchange(ref m_owner, observedOwner | LOCK_ANONYMOUS_OWNED, observedOwner, ref lockTaken) != observedOwner) // acquiring the lock failed
ContinueTryEnter(millisecondsTimeout, ref lockTaken); // The call the slow pth
}
@@ -271,13 +287,13 @@ namespace System.Threading
if (lockTaken)
{
lockTaken = false;
- throw new System.ArgumentException(Environment.GetResourceString("SpinLock_TryReliableEnter_ArgumentException"));
+ throw new System.ArgumentException(SR.SpinLock_TryReliableEnter_ArgumentException);
}
if (millisecondsTimeout < -1)
{
throw new ArgumentOutOfRangeException(
- nameof(millisecondsTimeout), millisecondsTimeout, Environment.GetResourceString("SpinLock_TryEnter_ArgumentOutOfRange"));
+ nameof(millisecondsTimeout), millisecondsTimeout, SR.SpinLock_TryEnter_ArgumentOutOfRange);
}
uint startTime = 0;
@@ -311,7 +327,7 @@ namespace System.Threading
observedOwner = m_owner;
if ((observedOwner & LOCK_ANONYMOUS_OWNED) == LOCK_UNOWNED)
{
- if (Interlocked.CompareExchange(ref m_owner, observedOwner | 1, observedOwner, ref lockTaken) == observedOwner)
+ if (CompareExchange(ref m_owner, observedOwner | 1, observedOwner, ref lockTaken) == observedOwner)
{
// Aquired lock
return;
@@ -331,7 +347,7 @@ namespace System.Threading
else //failed to acquire the lock,then try to update the waiters. If the waiters count reached the maximum, jsut break the loop to avoid overflow
{
if ((observedOwner & WAITERS_MASK) != MAXIMUM_WAITERS)
- turn = (Interlocked.Add(ref m_owner, 2) & WAITERS_MASK) >> 1 ;
+ turn = (Interlocked.Add(ref m_owner, 2) & WAITERS_MASK) >> 1;
}
//***Step 2. Spinning
@@ -353,7 +369,7 @@ namespace System.Threading
: (observedOwner - 2) | 1; // otherwise decrement the waiters and set the lock bit
Debug.Assert((newOwner & WAITERS_MASK) >= 0);
- if (Interlocked.CompareExchange(ref m_owner, newOwner, observedOwner, ref lockTaken) == observedOwner)
+ if (CompareExchange(ref m_owner, newOwner, observedOwner, ref lockTaken) == observedOwner)
{
return;
}
@@ -381,7 +397,7 @@ namespace System.Threading
: (observedOwner - 2) | 1; // otherwise decrement the waiters and set the lock bit
Debug.Assert((newOwner & WAITERS_MASK) >= 0);
- if (Interlocked.CompareExchange(ref m_owner, newOwner, observedOwner, ref lockTaken) == observedOwner)
+ if (CompareExchange(ref m_owner, newOwner, observedOwner, ref lockTaken) == observedOwner)
{
return;
}
@@ -431,7 +447,6 @@ namespace System.Threading
}
spinner.SpinOnce();
}
-
}
/// <summary>
@@ -444,11 +459,11 @@ namespace System.Threading
int lockUnowned = 0;
// We are using thread IDs to mark ownership. Snap the thread ID and check for recursion.
// We also must or the ID enablement bit, to ensure we propagate when we CAS it in.
- int m_newOwner = Thread.CurrentThread.ManagedThreadId;
+ int m_newOwner = Environment.CurrentManagedThreadId;
if (m_owner == m_newOwner)
{
// We don't allow lock recursion.
- throw new LockRecursionException(Environment.GetResourceString("SpinLock_TryEnter_LockRecursionException"));
+ throw new LockRecursionException(SR.SpinLock_TryEnter_LockRecursionException);
}
@@ -457,7 +472,6 @@ namespace System.Threading
// Loop until the lock has been successfully acquired or, if specified, the timeout expires.
do
{
-
// We failed to get the lock, either from the fast route or the last iteration
// and the timeout hasn't expired; spin once and try again.
spinner.SpinOnce();
@@ -466,7 +480,7 @@ namespace System.Threading
if (m_owner == lockUnowned)
{
- if (Interlocked.CompareExchange(ref m_owner, m_newOwner, lockUnowned, ref lockTaken) == lockUnowned)
+ if (CompareExchange(ref m_owner, m_newOwner, lockUnowned, ref lockTaken) == lockUnowned)
{
return;
}
@@ -491,7 +505,6 @@ namespace System.Threading
/// <exception cref="SynchronizationLockException">
/// Thread ownership tracking is enabled, and the current thread is not the owner of this lock.
/// </exception>
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void Exit()
{
//This is the fast path for the thread tracking is disabled, otherwise go to the slow path
@@ -517,15 +530,14 @@ namespace System.Threading
/// <exception cref="SynchronizationLockException">
/// Thread ownership tracking is enabled, and the current thread is not the owner of this lock.
/// </exception>
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public void Exit(bool useMemoryBarrier)
{
// This is the fast path for the thread tracking is diabled and not to use memory barrier, otherwise go to the slow path
// The reason not to add else statement if the usememorybarrier is that it will add more barnching in the code and will prevent
- // method inlining, so this is optimized for useMemoryBarrier=false and Exit() overload optimized for useMemoryBarrier=true
- if ((m_owner & LOCK_ID_DISABLE_MASK) != 0 && !useMemoryBarrier)
+ // method inlining, so this is optimized for useMemoryBarrier=false and Exit() overload optimized for useMemoryBarrier=true.
+ int tmpOwner = m_owner;
+ if ((tmpOwner & LOCK_ID_DISABLE_MASK) != 0 & !useMemoryBarrier)
{
- int tmpOwner = m_owner;
m_owner = tmpOwner & (~LOCK_ANONYMOUS_OWNED);
}
else
@@ -545,7 +557,7 @@ namespace System.Threading
if (threadTrackingEnabled && !IsHeldByCurrentThread)
{
throw new System.Threading.SynchronizationLockException(
- Environment.GetResourceString("SpinLock_Exit_SynchronizationLockException"));
+ SR.SpinLock_Exit_SynchronizationLockException);
}
if (useMemoryBarrier)
@@ -554,7 +566,6 @@ namespace System.Threading
Interlocked.Exchange(ref m_owner, LOCK_UNOWNED);
else
Interlocked.Decrement(ref m_owner);
-
}
else
{
@@ -565,9 +576,7 @@ namespace System.Threading
int tmpOwner = m_owner;
m_owner = tmpOwner & (~LOCK_ANONYMOUS_OWNED);
}
-
}
-
}
/// <summary>
@@ -575,7 +584,6 @@ namespace System.Threading
/// </summary>
public bool IsHeld
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get
{
if (IsThreadOwnerTrackingEnabled)
@@ -601,21 +609,19 @@ namespace System.Threading
/// </exception>
public bool IsHeldByCurrentThread
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get
{
if (!IsThreadOwnerTrackingEnabled)
{
- throw new InvalidOperationException(Environment.GetResourceString("SpinLock_IsHeldByCurrentThread"));
+ throw new InvalidOperationException(SR.SpinLock_IsHeldByCurrentThread);
}
- return ((m_owner & (~LOCK_ID_DISABLE_MASK)) == Thread.CurrentThread.ManagedThreadId);
+ return ((m_owner & (~LOCK_ID_DISABLE_MASK)) == Environment.CurrentManagedThreadId);
}
}
/// <summary>Gets whether thread ownership tracking is enabled for this instance.</summary>
public bool IsThreadOwnerTrackingEnabled
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get { return (m_owner & LOCK_ID_DISABLE_MASK) == 0; }
}
diff --git a/src/mscorlib/src/System/Threading/SpinWait.cs b/src/mscorlib/src/System/Threading/SpinWait.cs
index 1b31407e0f..8431f6564f 100644
--- a/src/mscorlib/src/System/Threading/SpinWait.cs
+++ b/src/mscorlib/src/System/Threading/SpinWait.cs
@@ -12,7 +12,6 @@
using System;
using System.Runtime.ConstrainedExecution;
-using System.Security.Permissions;
using System.Threading;
using System.Diagnostics;
using System.Diagnostics.Contracts;
diff --git a/src/mscorlib/src/System/Threading/SynchronizationContext.cs b/src/mscorlib/src/System/Threading/SynchronizationContext.cs
index 5531597229..f4b3c79409 100644
--- a/src/mscorlib/src/System/Threading/SynchronizationContext.cs
+++ b/src/mscorlib/src/System/Threading/SynchronizationContext.cs
@@ -13,12 +13,9 @@
namespace System.Threading
{
using Microsoft.Win32.SafeHandles;
- using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
-#if FEATURE_CORRUPTING_EXCEPTIONS
using System.Runtime.ExceptionServices;
-#endif // FEATURE_CORRUPTING_EXCEPTIONS
using System.Runtime;
using System.Runtime.Versioning;
using System.Runtime.ConstrainedExecution;
@@ -29,14 +26,12 @@ namespace System.Threading
using System.Diagnostics.CodeAnalysis;
-#if FEATURE_SYNCHRONIZATIONCONTEXT_WAIT
[Flags]
enum SynchronizationContextProperties
{
None = 0,
RequireWaitNotification = 0x1
};
-#endif
#if FEATURE_COMINTEROP && FEATURE_APPX
//
@@ -52,15 +47,12 @@ namespace System.Threading
public class SynchronizationContext
{
-#if FEATURE_SYNCHRONIZATIONCONTEXT_WAIT
SynchronizationContextProperties _props = SynchronizationContextProperties.None;
-#endif
public SynchronizationContext()
{
}
-#if FEATURE_SYNCHRONIZATIONCONTEXT_WAIT
// helper delegate to statically bind to Wait method
private delegate int WaitDelegate(IntPtr[] waitHandles, bool waitAll, int millisecondsTimeout);
@@ -109,7 +101,6 @@ namespace System.Threading
{
return ((_props & SynchronizationContextProperties.RequireWaitNotification) != 0);
}
-#endif
public virtual void Send(SendOrPostCallback d, Object state)
@@ -137,10 +128,8 @@ namespace System.Threading
{
}
-#if FEATURE_SYNCHRONIZATIONCONTEXT_WAIT
// Method called when the CLR does a wait operation
[CLSCompliant(false)]
- [PrePrepareMethod]
public virtual int Wait(IntPtr[] waitHandles, bool waitAll, int millisecondsTimeout)
{
return WaitHelper(waitHandles, waitAll, millisecondsTimeout);
@@ -148,8 +137,6 @@ namespace System.Threading
// Method that can be called by Wait overrides
[CLSCompliant(false)]
- [PrePrepareMethod]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected static int WaitHelper(IntPtr[] waitHandles, bool waitAll, int millisecondsTimeout)
{
if (waitHandles == null)
@@ -164,22 +151,14 @@ namespace System.Threading
// Static helper to which the above method can delegate to in order to get the default
// COM behavior.
[CLSCompliant(false)]
- [PrePrepareMethod]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private static extern int WaitHelperNative(IntPtr[] waitHandles, bool waitAll, int millisecondsTimeout);
-#endif
public static void SetSynchronizationContext(SynchronizationContext syncContext)
{
Thread.CurrentThread.SynchronizationContext = syncContext;
}
- public static void SetThreadStaticContext(SynchronizationContext syncContext)
- {
- Thread.CurrentThread.SynchronizationContext = syncContext;
- }
-
public static SynchronizationContext Current
{
get
@@ -260,11 +239,9 @@ namespace System.Threading
return new SynchronizationContext();
}
-#if FEATURE_SYNCHRONIZATIONCONTEXT_WAIT
private static int InvokeWaitMethodHelper(SynchronizationContext syncContext, IntPtr[] waitHandles, bool waitAll, int millisecondsTimeout)
{
return syncContext.Wait(waitHandles, waitAll, millisecondsTimeout);
}
-#endif
}
}
diff --git a/src/mscorlib/src/System/Threading/SynchronizationLockException.cs b/src/mscorlib/src/System/Threading/SynchronizationLockException.cs
index 0610a6063d..de42c1f232 100644
--- a/src/mscorlib/src/System/Threading/SynchronizationLockException.cs
+++ b/src/mscorlib/src/System/Threading/SynchronizationLockException.cs
@@ -17,7 +17,6 @@ namespace System.Threading {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class SynchronizationLockException : SystemException {
public SynchronizationLockException()
diff --git a/src/mscorlib/src/System/Threading/Tasks/BeginEndAwaitableAdapter.cs b/src/mscorlib/src/System/Threading/Tasks/BeginEndAwaitableAdapter.cs
deleted file mode 100644
index 71eb787c5e..0000000000
--- a/src/mscorlib/src/System/Threading/Tasks/BeginEndAwaitableAdapter.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.IO;
-using System.Runtime.CompilerServices;
-using System.Security;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace System.Threading.Tasks {
-
-/// <summary>
-/// Provides an adapter to make Begin/End pairs awaitable.
-/// In general, Task.Factory.FromAsync should be used for this purpose.
-/// However, for cases where absolute minimal overhead is required, this type
-/// may be used to making APM pairs awaitable while minimizing overhead.
-/// (APM = Asynchronous Programming Model or the Begin/End pattern.)
-/// </summary>
-/// <remarks>
-/// This instance may be reused repeatedly. However, it must only be used
-/// by a single APM invocation at a time. It's state will automatically be reset
-/// when the await completes.
-/// </remarks>
-/// <example>
-/// Usage sample:
-/// <code>
-/// static async Task CopyStreamAsync(Stream source, Stream dest) {
-///
-/// BeginEndAwaitableAdapter adapter = new BeginEndAwaitableAdapter();
-/// Byte[] buffer = new Byte[0x1000];
-///
-/// while (true) {
-///
-/// source.BeginRead(buffer, 0, buffer.Length, BeginEndAwaitableAdapter.Callback, adapter);
-/// Int32 numRead = source.EndRead(await adapter);
-/// if (numRead == 0)
-/// break;
-///
-/// dest.BeginWrite(buffer, 0, numRead, BeginEndAwaitableAdapter.Callback, adapter);
-/// dest.EndWrite(await adapter);
-/// }
-/// }
-/// </code>
-/// </example>
-internal sealed class BeginEndAwaitableAdapter : ICriticalNotifyCompletion {
-
- /// <summary>A sentinel marker used to communicate between OnCompleted and the APM callback
- /// that the callback has already run, and thus OnCompleted needs to execute the callback.</summary>
- private readonly static Action CALLBACK_RAN = () => { };
-
- /// <summary>The IAsyncResult for the APM operation.</summary>
- private IAsyncResult _asyncResult;
-
- /// <summary>The continuation delegate provided to the awaiter.</summary>
- private Action _continuation;
-
-
- /// <summary>A callback to be passed as the AsyncCallback to an APM pair.
- /// It expects that an BeginEndAwaitableAdapter instance was supplied to the APM Begin method as the object state.</summary>
- public readonly static AsyncCallback Callback = (asyncResult) => {
-
- Debug.Assert(asyncResult != null);
- Debug.Assert(asyncResult.IsCompleted);
- Debug.Assert(asyncResult.AsyncState is BeginEndAwaitableAdapter);
-
- // Get the adapter object supplied as the "object state" to the Begin method
- BeginEndAwaitableAdapter adapter = (BeginEndAwaitableAdapter) asyncResult.AsyncState;
-
- // Store the IAsyncResult into it so that it's available to the awaiter
- adapter._asyncResult = asyncResult;
-
- // If the _continuation has already been set to the actual continuation by OnCompleted, then invoke the continuation.
- // Set _continuation to the CALLBACK_RAN sentinel so that IsCompleted returns true and OnCompleted sees the sentinel
- // and knows to invoke the callback.
- // Due to some known incorrect implementations of IAsyncResult in the Framework where CompletedSynchronously is lazily
- // set to true if it is first invoked after IsCompleted is true, we cannot rely here on CompletedSynchronously for
- // synchronization between the caller and the callback, and thus do not use CompletedSynchronously at all.
- Action continuation = Interlocked.Exchange(ref adapter._continuation, CALLBACK_RAN);
- if (continuation != null) {
-
- Debug.Assert(continuation != CALLBACK_RAN);
- continuation();
- }
- };
-
-
- /// <summary>Gets an awaiter.</summary>
- /// <returns>Returns itself as the awaiter.</returns>
- public BeginEndAwaitableAdapter GetAwaiter() {
-
- return this;
- }
-
-
- /// <summary>Gets whether the awaited APM operation completed.</summary>
- public bool IsCompleted {
- get {
-
- // We are completed if the callback was called and it set the continuation to the CALLBACK_RAN sentinel.
- // If the operation completes asynchronously, there's still a chance we'll see CALLBACK_RAN here, in which
- // case we're still good to keep running synchronously.
- return (_continuation == CALLBACK_RAN);
- }
- }
-
- /// <summary>Schedules the continuation to run when the operation completes.</summary>
- /// <param name="continuation">The continuation.</param>
- public void UnsafeOnCompleted(Action continuation) {
-
- Debug.Assert(continuation != null);
- OnCompleted(continuation);
- }
-
-
- /// <summary>Schedules the continuation to run when the operation completes.</summary>
- /// <param name="continuation">The continuation.</param>
- public void OnCompleted(Action continuation) {
-
- Debug.Assert(continuation != null);
-
- // If the continuation field is null, then set it to be the target continuation
- // so that when the operation completes, it'll invoke the continuation. If it's non-null,
- // it was already set to the CALLBACK_RAN-sentinel by the Callback, in which case we hit a very rare race condition
- // where the operation didn't complete synchronously but completed asynchronously between our
- // calls to IsCompleted and OnCompleted... in that case, just schedule a task to run the continuation.
- if (_continuation == CALLBACK_RAN
- || Interlocked.CompareExchange(ref _continuation, continuation, null) == CALLBACK_RAN) {
-
- Task.Run(continuation); // must run async at this point, or else we'd risk stack diving
- }
- }
-
-
- /// <summary>Gets the IAsyncResult for the APM operation after the operation completes, and then resets the adapter.</summary>
- /// <returns>The IAsyncResult for the operation.</returns>
- public IAsyncResult GetResult() {
-
- Debug.Assert(_asyncResult != null && _asyncResult.IsCompleted);
-
- // Get the IAsyncResult
- IAsyncResult result = _asyncResult;
-
- // Reset the adapter
- _asyncResult = null;
- _continuation = null;
-
- // Return the result
- return result;
- }
-
-} // class BeginEndAwaitableAdapter
-
-} // namespace
diff --git a/src/mscorlib/src/System/Threading/Tasks/ConcurrentExclusiveSchedulerPair.cs b/src/mscorlib/src/System/Threading/Tasks/ConcurrentExclusiveSchedulerPair.cs
index c7a96b0394..a87406a493 100644
--- a/src/mscorlib/src/System/Threading/Tasks/ConcurrentExclusiveSchedulerPair.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/ConcurrentExclusiveSchedulerPair.cs
@@ -20,7 +20,6 @@ using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Contracts;
using System.Security;
-using System.Security.Permissions;
namespace System.Threading.Tasks
{
diff --git a/src/mscorlib/src/System/Threading/Tasks/FutureFactory.cs b/src/mscorlib/src/System/Threading/Tasks/FutureFactory.cs
index c98e219e86..137afa11f5 100644
--- a/src/mscorlib/src/System/Threading/Tasks/FutureFactory.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/FutureFactory.cs
@@ -12,7 +12,6 @@
using System;
using System.Security;
-using System.Security.Permissions;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Diagnostics;
@@ -277,13 +276,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew(Func<TResult> function)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, m_defaultCancellationToken,
- m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -306,13 +303,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew(Func<TResult> function, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, cancellationToken,
- m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -337,13 +332,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew(Func<TResult> function, TaskCreationOptions creationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, m_defaultCancellationToken,
- creationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ creationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -379,13 +372,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew(Func<TResult> function, CancellationToken cancellationToken, TaskCreationOptions creationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task<TResult>.StartNew(
Task.InternalCurrentIfAttached(creationOptions), function, cancellationToken,
- creationOptions, InternalTaskOptions.None, scheduler, ref stackMark);
+ creationOptions, InternalTaskOptions.None, scheduler);
}
/// <summary>
@@ -406,13 +397,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew(Func<Object, TResult> function, Object state)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, state, m_defaultCancellationToken,
- m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -437,13 +426,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew(Func<Object, TResult> function, Object state, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, state, cancellationToken,
- m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -470,13 +457,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew(Func<Object, TResult> function, Object state, TaskCreationOptions creationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, state, m_defaultCancellationToken,
- creationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ creationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -514,12 +499,10 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew(Func<Object, TResult> function, Object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task<TResult>.StartNew(Task.InternalCurrentIfAttached(creationOptions), function, state, cancellationToken,
- creationOptions, InternalTaskOptions.None, scheduler, ref stackMark);
+ creationOptions, InternalTaskOptions.None, scheduler);
}
//
@@ -604,11 +587,9 @@ namespace System.Threading.Tasks
/// <paramref name="endMethod"/> argument is null.</exception>
/// <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
/// asynchronous operation.</returns>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> FromAsync(IAsyncResult asyncResult, Func<IAsyncResult, TResult> endMethod)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return FromAsyncImpl(asyncResult, endMethod, null, m_defaultCreationOptions, DefaultScheduler, ref stackMark);
+ return FromAsyncImpl(asyncResult, endMethod, null, m_defaultCreationOptions, DefaultScheduler);
}
/// <summary>
@@ -630,14 +611,12 @@ namespace System.Threading.Tasks
/// value.</exception>
/// <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
/// asynchronous operation.</returns>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> FromAsync(
IAsyncResult asyncResult,
Func<IAsyncResult, TResult> endMethod,
TaskCreationOptions creationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return FromAsyncImpl(asyncResult, endMethod, null, creationOptions, DefaultScheduler, ref stackMark);
+ return FromAsyncImpl(asyncResult, endMethod, null, creationOptions, DefaultScheduler);
}
@@ -665,27 +644,23 @@ namespace System.Threading.Tasks
/// value.</exception>
/// <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
/// asynchronous operation.</returns>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> FromAsync(
IAsyncResult asyncResult,
Func<IAsyncResult, TResult> endMethod,
TaskCreationOptions creationOptions,
TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return FromAsyncImpl(asyncResult, endMethod, null, creationOptions, scheduler, ref stackMark);
+ return FromAsyncImpl(asyncResult, endMethod, null, creationOptions, scheduler);
}
- // internal overload that supports StackCrawlMark
- // We also need this logic broken out into a static method so that the similar TaskFactory.FromAsync()
+ // We need this logic broken out into a static method so that the similar TaskFactory.FromAsync()
// method can access the logic w/o declaring a TaskFactory<TResult> instance.
internal static Task<TResult> FromAsyncImpl(
IAsyncResult asyncResult,
Func<IAsyncResult, TResult> endFunction,
Action<IAsyncResult> endAction,
TaskCreationOptions creationOptions,
- TaskScheduler scheduler,
- ref StackCrawlMark stackMark)
+ TaskScheduler scheduler)
{
if (asyncResult == null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.asyncResult);
@@ -714,12 +689,12 @@ namespace System.Threading.Tasks
// Just specify this task as detached. No matter what happens, we want endMethod
// to be called -- even if the parent is canceled. So we don't want to flow
// RespectParentCancellation.
- Task t = new Task(delegate
+ Task t = new Task(new Action<object>(delegate
{
FromAsyncCoreLogic(asyncResult, endFunction, endAction, promise, requiresSynchronization:true);
- },
+ }),
(object)null, null,
- default(CancellationToken), TaskCreationOptions.None, InternalTaskOptions.None, null, ref stackMark);
+ default(CancellationToken), TaskCreationOptions.None, InternalTaskOptions.None, null);
if (AsyncCausalityTracer.LoggingOn)
AsyncCausalityTracer.TraceOperationCreation(CausalityTraceLevel.Verbose, t.Id, "TaskFactory.FromAsync Callback", 0);
@@ -1428,14 +1403,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll(Task[] tasks, Func<Task[], TResult> continuationFunction)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAllImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAllImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1459,14 +1432,12 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll(Task[] tasks, Func<Task[], TResult> continuationFunction, CancellationToken cancellationToken)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAllImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAllImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1496,14 +1467,12 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll(Task[] tasks, Func<Task[], TResult> continuationFunction, TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAllImpl(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAllImpl(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1543,15 +1512,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll(Task[] tasks, Func<Task[], TResult> continuationFunction,
CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAllImpl(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return ContinueWhenAllImpl(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler);
}
/// <summary>
@@ -1571,14 +1538,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>[], TResult> continuationFunction)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1603,15 +1568,13 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>[], TResult> continuationFunction,
CancellationToken cancellationToken)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1642,15 +1605,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>[], TResult> continuationFunction,
TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1691,15 +1652,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>[], TResult> continuationFunction,
CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler);
}
@@ -1707,7 +1666,7 @@ namespace System.Threading.Tasks
// Note: if you make any changes to this method, please do the same to the non-generic version too.
internal static Task<TResult> ContinueWhenAllImpl<TAntecedentResult>(Task<TAntecedentResult>[] tasks,
Func<Task<TAntecedentResult>[], TResult> continuationFunction, Action<Task<TAntecedentResult>[]> continuationAction,
- TaskContinuationOptions continuationOptions, CancellationToken cancellationToken, TaskScheduler scheduler, ref StackCrawlMark stackMark)
+ TaskContinuationOptions continuationOptions, CancellationToken cancellationToken, TaskScheduler scheduler)
{
// check arguments
TaskFactory.CheckMultiTaskContinuationOptions(continuationOptions);
@@ -1737,7 +1696,7 @@ namespace System.Threading.Tasks
return starter.ContinueWith<TResult>(
// use a cached delegate
GenericDelegateCache<TAntecedentResult, TResult>.CWAllFuncDelegate,
- continuationFunction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ continuationFunction, scheduler, cancellationToken, continuationOptions);
}
else
{
@@ -1746,7 +1705,7 @@ namespace System.Threading.Tasks
return starter.ContinueWith<TResult>(
// use a cached delegate
GenericDelegateCache<TAntecedentResult, TResult>.CWAllActionDelegate,
- continuationAction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ continuationAction, scheduler, cancellationToken, continuationOptions);
}
}
@@ -1754,7 +1713,7 @@ namespace System.Threading.Tasks
// Note: if you make any changes to this method, please do the same to the generic version too.
internal static Task<TResult> ContinueWhenAllImpl(Task[] tasks,
Func<Task[], TResult> continuationFunction, Action<Task[]> continuationAction,
- TaskContinuationOptions continuationOptions, CancellationToken cancellationToken, TaskScheduler scheduler, ref StackCrawlMark stackMark)
+ TaskContinuationOptions continuationOptions, CancellationToken cancellationToken, TaskScheduler scheduler)
{
// check arguments
TaskFactory.CheckMultiTaskContinuationOptions(continuationOptions);
@@ -1790,7 +1749,7 @@ namespace System.Threading.Tasks
completedTasks.NotifyDebuggerOfWaitCompletionIfNecessary();
return ((Func<Task[], TResult>)state)(completedTasks.Result);
},
- continuationFunction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ continuationFunction, scheduler, cancellationToken, continuationOptions);
}
else
{
@@ -1804,7 +1763,7 @@ namespace System.Threading.Tasks
completedTasks.NotifyDebuggerOfWaitCompletionIfNecessary();
((Action<Task[]>)state)(completedTasks.Result); return default(TResult);
},
- continuationAction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ continuationAction, scheduler, cancellationToken, continuationOptions);
}
}
@@ -1828,14 +1787,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny(Task[] tasks, Func<Task, TResult> continuationFunction)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAnyImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAnyImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1859,14 +1816,12 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny(Task[] tasks, Func<Task, TResult> continuationFunction, CancellationToken cancellationToken)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAnyImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAnyImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1896,14 +1851,12 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny(Task[] tasks, Func<Task, TResult> continuationFunction, TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAnyImpl(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAnyImpl(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1943,15 +1896,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny(Task[] tasks, Func<Task, TResult> continuationFunction,
CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAnyImpl(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return ContinueWhenAnyImpl(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler);
}
/// <summary>
@@ -1971,14 +1922,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>, TResult> continuationFunction)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2003,15 +1952,13 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>, TResult> continuationFunction,
CancellationToken cancellationToken)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2042,15 +1989,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>, TResult> continuationFunction,
TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2091,22 +2036,20 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>, TResult> continuationFunction,
CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationFunction == null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.continuationFunction);
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler);
}
// Core implementation of ContinueWhenAny, non-generic version
// Note: if you make any changes to this method, be sure to do the same to the generic version
internal static Task<TResult> ContinueWhenAnyImpl(Task[] tasks,
Func<Task, TResult> continuationFunction, Action<Task> continuationAction,
- TaskContinuationOptions continuationOptions, CancellationToken cancellationToken, TaskScheduler scheduler, ref StackCrawlMark stackMark)
+ TaskContinuationOptions continuationOptions, CancellationToken cancellationToken, TaskScheduler scheduler)
{
// check arguments
TaskFactory.CheckMultiTaskContinuationOptions(continuationOptions);
@@ -2136,7 +2079,7 @@ namespace System.Threading.Tasks
//the following delegate avoids closure capture as much as possible
//completedTask.Result is the winning task; state == continuationAction
(completedTask, state) => { return ((Func<Task, TResult>)state)(completedTask.Result); },
- continuationFunction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ continuationFunction, scheduler, cancellationToken, continuationOptions);
}
else
{
@@ -2145,7 +2088,7 @@ namespace System.Threading.Tasks
//the following delegate avoids closure capture as much as possible
//completedTask.Result is the winning task; state == continuationAction
(completedTask, state) => { ((Action<Task>)state)(completedTask.Result); return default(TResult); },
- continuationAction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ continuationAction, scheduler, cancellationToken, continuationOptions);
}
}
@@ -2154,7 +2097,7 @@ namespace System.Threading.Tasks
// Note: if you make any changes to this method, be sure to do the same to the non-generic version
internal static Task<TResult> ContinueWhenAnyImpl<TAntecedentResult>(Task<TAntecedentResult>[] tasks,
Func<Task<TAntecedentResult>, TResult> continuationFunction, Action<Task<TAntecedentResult>> continuationAction,
- TaskContinuationOptions continuationOptions, CancellationToken cancellationToken, TaskScheduler scheduler, ref StackCrawlMark stackMark)
+ TaskContinuationOptions continuationOptions, CancellationToken cancellationToken, TaskScheduler scheduler)
{
// check arguments
TaskFactory.CheckMultiTaskContinuationOptions(continuationOptions);
@@ -2182,7 +2125,7 @@ namespace System.Threading.Tasks
return starter.ContinueWith<TResult>(
// Use a cached delegate
GenericDelegateCache<TAntecedentResult, TResult>.CWAnyFuncDelegate,
- continuationFunction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ continuationFunction, scheduler, cancellationToken, continuationOptions);
}
else
{
@@ -2190,7 +2133,7 @@ namespace System.Threading.Tasks
return starter.ContinueWith<TResult>(
// Use a cached delegate
GenericDelegateCache<TAntecedentResult,TResult>.CWAnyActionDelegate,
- continuationAction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ continuationAction, scheduler, cancellationToken, continuationOptions);
}
}
}
diff --git a/src/mscorlib/src/System/Threading/Tasks/IAsyncCausalityTracerStatics.cs b/src/mscorlib/src/System/Threading/Tasks/IAsyncCausalityTracerStatics.cs
index b8155d017e..32efd771a0 100644
--- a/src/mscorlib/src/System/Threading/Tasks/IAsyncCausalityTracerStatics.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/IAsyncCausalityTracerStatics.cs
@@ -19,16 +19,16 @@ namespace Windows.Foundation.Diagnostics
[Guid("50850B26-267E-451B-A890-AB6A370245EE")]
[WindowsRuntimeImport]
internal interface IAsyncCausalityTracerStatics
- {
- void TraceOperationCreation(CausalityTraceLevel traceLevel, CausalitySource source, Guid platformId, ulong operationId, string operationName, ulong relatedContext);
- void TraceOperationCompletion(CausalityTraceLevel traceLevel, CausalitySource source, Guid platformId, ulong operationId, AsyncCausalityStatus status);
- void TraceOperationRelation(CausalityTraceLevel traceLevel, CausalitySource source, Guid platformId, ulong operationId, CausalityRelation relation);
- void TraceSynchronousWorkStart(CausalityTraceLevel traceLevel, CausalitySource source, Guid platformId, ulong operationId, CausalitySynchronousWork work);
- void TraceSynchronousWorkCompletion(CausalityTraceLevel traceLevel, CausalitySource source, CausalitySynchronousWork work);
+ {
+ void TraceOperationCreation(CausalityTraceLevel traceLevel, CausalitySource source, Guid platformId, ulong operationId, string operationName, ulong relatedContext);
+ void TraceOperationCompletion(CausalityTraceLevel traceLevel, CausalitySource source, Guid platformId, ulong operationId, AsyncCausalityStatus status);
+ void TraceOperationRelation(CausalityTraceLevel traceLevel, CausalitySource source, Guid platformId, ulong operationId, CausalityRelation relation);
+ void TraceSynchronousWorkStart(CausalityTraceLevel traceLevel, CausalitySource source, Guid platformId, ulong operationId, CausalitySynchronousWork work);
+ void TraceSynchronousWorkCompletion(CausalityTraceLevel traceLevel, CausalitySource source, CausalitySynchronousWork work);
//These next 2 functions could've been represented as an event except that the EventRegistrationToken wasn't being propagated to WinRT
EventRegistrationToken add_TracingStatusChanged(System.EventHandler<TracingStatusChangedEventArgs> eventHandler);
void remove_TracingStatusChanged(EventRegistrationToken token);
- }
+ }
[ComImport]
[Guid("410B7711-FF3B-477F-9C9A-D2EFDA302DC3")]
diff --git a/src/mscorlib/src/System/Threading/Tasks/Parallel.cs b/src/mscorlib/src/System/Threading/Tasks/Parallel.cs
deleted file mode 100644
index 7808943870..0000000000
--- a/src/mscorlib/src/System/Threading/Tasks/Parallel.cs
+++ /dev/null
@@ -1,3593 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
-//
-//
-//
-// A helper class that contains parallel versions of various looping constructs. This
-// internally uses the task parallel library, but takes care to expose very little
-// evidence of this infrastructure being used.
-//
-// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-using System;
-using System.Diagnostics;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.Concurrent;
-using System.Security.Permissions;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Diagnostics.Contracts;
-
-
-namespace System.Threading.Tasks
-{
- /// <summary>
- /// Stores options that configure the operation of methods on the
- /// <see cref="T:System.Threading.Tasks.Parallel">Parallel</see> class.
- /// </summary>
- /// <remarks>
- /// By default, methods on the Parallel class attempt to utilize all available processors, are non-cancelable, and target
- /// the default TaskScheduler (TaskScheduler.Default). <see cref="ParallelOptions"/> enables
- /// overriding these defaults.
- /// </remarks>
- public class ParallelOptions
- {
- private TaskScheduler m_scheduler;
- private int m_maxDegreeOfParallelism;
- private CancellationToken m_cancellationToken;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ParallelOptions"/> class.
- /// </summary>
- /// <remarks>
- /// This constructor initializes the instance with default values. <see cref="MaxDegreeOfParallelism"/>
- /// is initialized to -1, signifying that there is no upper bound set on how much parallelism should
- /// be employed. <see cref="CancellationToken"/> is initialized to a non-cancelable token,
- /// and <see cref="TaskScheduler"/> is initialized to the default scheduler (TaskScheduler.Default).
- /// All of these defaults may be overwritten using the property set accessors on the instance.
- /// </remarks>
- public ParallelOptions()
- {
- m_scheduler = TaskScheduler.Default;
- m_maxDegreeOfParallelism = -1;
- m_cancellationToken = CancellationToken.None;
- }
-
- /// <summary>
- /// Gets or sets the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
- /// associated with this <see cref="ParallelOptions"/> instance. Setting this property to null
- /// indicates that the current scheduler should be used.
- /// </summary>
- public TaskScheduler TaskScheduler
- {
- get { return m_scheduler; }
- set { m_scheduler = value; }
- }
-
- // Convenience property used by TPL logic
- internal TaskScheduler EffectiveTaskScheduler
- {
- get
- {
- if (m_scheduler == null) return TaskScheduler.Current;
- else return m_scheduler;
- }
- }
-
- /// <summary>
- /// Gets or sets the maximum degree of parallelism enabled by this ParallelOptions instance.
- /// </summary>
- /// <remarks>
- /// The <see cref="MaxDegreeOfParallelism"/> limits the number of concurrent operations run by <see
- /// cref="T:System.Threading.Tasks.Parallel">Parallel</see> method calls that are passed this
- /// ParallelOptions instance to the set value, if it is positive. If <see
- /// cref="MaxDegreeOfParallelism"/> is -1, then there is no limit placed on the number of concurrently
- /// running operations.
- /// </remarks>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception that is thrown when this <see cref="MaxDegreeOfParallelism"/> is set to 0 or some
- /// value less than -1.
- /// </exception>
- public int MaxDegreeOfParallelism
- {
- get { return m_maxDegreeOfParallelism; }
- set
- {
- if ((value == 0) || (value < -1))
- throw new ArgumentOutOfRangeException(nameof(MaxDegreeOfParallelism));
- m_maxDegreeOfParallelism = value;
- }
- }
-
- /// <summary>
- /// Gets or sets the <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
- /// associated with this <see cref="ParallelOptions"/> instance.
- /// </summary>
- /// <remarks>
- /// Providing a <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
- /// to a <see cref="T:System.Threading.Tasks.Parallel">Parallel</see> method enables the operation to be
- /// exited early. Code external to the operation may cancel the token, and if the operation observes the
- /// token being set, it may exit early by throwing an
- /// <see cref="T:System.OperationCanceledException"/>.
- /// </remarks>
- public CancellationToken CancellationToken
- {
- get { return m_cancellationToken; }
- set { m_cancellationToken = value; }
- }
-
- internal int EffectiveMaxConcurrencyLevel
- {
- get
- {
- int rval = MaxDegreeOfParallelism;
- int schedulerMax = EffectiveTaskScheduler.MaximumConcurrencyLevel;
- if ((schedulerMax > 0) && (schedulerMax != Int32.MaxValue))
- {
- rval = (rval == -1) ? schedulerMax : Math.Min(schedulerMax, rval);
- }
- return rval;
- }
- }
- }
-
- /// <summary>
- /// Provides support for parallel loops and regions.
- /// </summary>
- /// <remarks>
- /// The <see cref="T:System.Threading.Tasks.Parallel"/> class provides library-based data parallel replacements
- /// for common operations such as for loops, for each loops, and execution of a set of statements.
- /// </remarks>
- public static class Parallel
- {
- // static counter for generating unique Fork/Join Context IDs to be used in ETW events
- internal static int s_forkJoinContextID;
-
- // We use a stride for loops to amortize the frequency of interlocked operations.
- internal const int DEFAULT_LOOP_STRIDE = 16;
-
- // Static variable to hold default parallel options
- internal static ParallelOptions s_defaultParallelOptions = new ParallelOptions();
-
- /// <summary>
- /// Executes each of the provided actions, possibly in parallel.
- /// </summary>
- /// <param name="actions">An array of <see cref="T:System.Action">Actions</see> to execute.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="actions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentException">The exception that is thrown when the
- /// <paramref name="actions"/> array contains a null element.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown when any
- /// action in the <paramref name="actions"/> array throws an exception.</exception>
- /// <remarks>
- /// This method can be used to execute a set of operations, potentially in parallel.
- /// No guarantees are made about the order in which the operations execute or whether
- /// they execute in parallel. This method does not return until each of the
- /// provided operations has completed, regardless of whether completion
- /// occurs due to normal or exceptional termination.
- /// </remarks>
- public static void Invoke(params Action[] actions)
- {
- Invoke(s_defaultParallelOptions, actions);
- }
-
- /// <summary>
- /// Executes each of the provided actions, possibly in parallel.
- /// </summary>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="actions">An array of <see cref="T:System.Action">Actions</see> to execute.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="actions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentException">The exception that is thrown when the
- /// <paramref name="actions"/> array contains a null element.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> is set.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown when any
- /// action in the <paramref name="actions"/> array throws an exception.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <remarks>
- /// This method can be used to execute a set of operations, potentially in parallel.
- /// No guarantees are made about the order in which the operations execute or whether
- /// the they execute in parallel. This method does not return until each of the
- /// provided operations has completed, regardless of whether completion
- /// occurs due to normal or exceptional termination.
- /// </remarks>
- public static void Invoke(ParallelOptions parallelOptions, params Action[] actions)
- {
- if (actions == null)
- {
- throw new ArgumentNullException(nameof(actions));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- // Throw an ODE if we're passed a disposed CancellationToken.
- if (parallelOptions.CancellationToken.CanBeCanceled
- && AppContextSwitches.ThrowExceptionIfDisposedCancellationTokenSource)
- {
- parallelOptions.CancellationToken.ThrowIfSourceDisposed();
- }
- // Quit early if we're already canceled -- avoid a bunch of work.
- if (parallelOptions.CancellationToken.IsCancellationRequested)
- throw new OperationCanceledException(parallelOptions.CancellationToken);
-
- // We must validate that the actions array contains no null elements, and also
- // make a defensive copy of the actions array.
- Action[] actionsCopy = new Action[actions.Length];
- for (int i = 0; i < actionsCopy.Length; i++)
- {
- actionsCopy[i] = actions[i];
- if (actionsCopy[i] == null)
- {
- throw new ArgumentException(Environment.GetResourceString("Parallel_Invoke_ActionNull"));
- }
- }
-
- // ETW event for Parallel Invoke Begin
- int forkJoinContextID = 0;
- Task callerTask = null;
- if (TplEtwProvider.Log.IsEnabled())
- {
- forkJoinContextID = Interlocked.Increment(ref s_forkJoinContextID);
- callerTask = Task.InternalCurrent;
- TplEtwProvider.Log.ParallelInvokeBegin((callerTask != null ? callerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (callerTask != null ? callerTask.Id : 0),
- forkJoinContextID, TplEtwProvider.ForkJoinOperationType.ParallelInvoke,
- actionsCopy.Length);
- }
-
-#if DEBUG
- actions = null; // Ensure we don't accidentally use this below.
-#endif
-
- // If we have no work to do, we are done.
- if (actionsCopy.Length < 1) return;
-
- // In the algorithm below, if the number of actions is greater than this, we automatically
- // use Parallel.For() to handle the actions, rather than the Task-per-Action strategy.
- const int SMALL_ACTIONCOUNT_LIMIT = 10;
-
- try
- {
- // If we've gotten this far, it's time to process the actions.
- if ((actionsCopy.Length > SMALL_ACTIONCOUNT_LIMIT) ||
- (parallelOptions.MaxDegreeOfParallelism != -1 && parallelOptions.MaxDegreeOfParallelism < actionsCopy.Length))
- {
- // Used to hold any exceptions encountered during action processing
- ConcurrentQueue<Exception> exceptionQ = null; // will be lazily initialized if necessary
-
- // This is more efficient for a large number of actions, or for enforcing MaxDegreeOfParallelism.
- try
- {
- // Launch a self-replicating task to handle the execution of all actions.
- // The use of a self-replicating task allows us to use as many cores
- // as are available, and no more. The exception to this rule is
- // that, in the case of a blocked action, the ThreadPool may inject
- // extra threads, which means extra tasks can run.
- int actionIndex = 0;
- ParallelForReplicatingTask rootTask = new ParallelForReplicatingTask(parallelOptions, delegate
- {
- // Each for-task will pull an action at a time from the list
- int myIndex = Interlocked.Increment(ref actionIndex); // = index to use + 1
- while (myIndex <= actionsCopy.Length)
- {
- // Catch and store any exceptions. If we don't catch them, the self-replicating
- // task will exit, and that may cause other SR-tasks to exit.
- // And (absent cancellation) we want all actions to execute.
- try
- {
- actionsCopy[myIndex - 1]();
- }
- catch (Exception e)
- {
- LazyInitializer.EnsureInitialized<ConcurrentQueue<Exception>>(ref exceptionQ, () => { return new ConcurrentQueue<Exception>(); });
- exceptionQ.Enqueue(e);
- }
-
- // Check for cancellation. If it is encountered, then exit the delegate.
- if (parallelOptions.CancellationToken.IsCancellationRequested)
- throw new OperationCanceledException(parallelOptions.CancellationToken);
-
- // You're still in the game. Grab your next action index.
- myIndex = Interlocked.Increment(ref actionIndex);
- }
- }, TaskCreationOptions.None, InternalTaskOptions.SelfReplicating);
-
- rootTask.RunSynchronously(parallelOptions.EffectiveTaskScheduler);
- rootTask.Wait();
- }
- catch (Exception e)
- {
- LazyInitializer.EnsureInitialized<ConcurrentQueue<Exception>>(ref exceptionQ, () => { return new ConcurrentQueue<Exception>(); });
-
- // Since we're consuming all action exceptions, there are very few reasons that
- // we would see an exception here. Two that come to mind:
- // (1) An OCE thrown by one or more actions (AggregateException thrown)
- // (2) An exception thrown from the ParallelForReplicatingTask constructor
- // (regular exception thrown).
- // We'll need to cover them both.
- AggregateException ae = e as AggregateException;
- if (ae != null)
- {
- // Strip off outer container of an AggregateException, because downstream
- // logic needs OCEs to be at the top level.
- foreach (Exception exc in ae.InnerExceptions) exceptionQ.Enqueue(exc);
- }
- else
- {
- exceptionQ.Enqueue(e);
- }
- }
-
- // If we have encountered any exceptions, then throw.
- if ((exceptionQ != null) && (exceptionQ.Count > 0))
- {
- ThrowIfReducableToSingleOCE(exceptionQ, parallelOptions.CancellationToken);
- throw new AggregateException(exceptionQ);
- }
- }
- else
- {
- // This is more efficient for a small number of actions and no DOP support
-
- // Initialize our array of tasks, one per action.
- Task[] tasks = new Task[actionsCopy.Length];
-
- // One more check before we begin...
- if (parallelOptions.CancellationToken.IsCancellationRequested)
- throw new OperationCanceledException(parallelOptions.CancellationToken);
-
- // Launch all actions as tasks
- for (int i = 1; i < tasks.Length; i++)
- {
- tasks[i] = Task.Factory.StartNew(actionsCopy[i], parallelOptions.CancellationToken, TaskCreationOptions.None,
- InternalTaskOptions.None, parallelOptions.EffectiveTaskScheduler);
- }
-
- // Optimization: Use current thread to run something before we block waiting for all tasks.
- tasks[0] = new Task(actionsCopy[0]);
- tasks[0].RunSynchronously(parallelOptions.EffectiveTaskScheduler);
-
- // Now wait for the tasks to complete. This will not unblock until all of
- // them complete, and it will throw an exception if one or more of them also
- // threw an exception. We let such exceptions go completely unhandled.
- try
- {
- if (tasks.Length <= 4)
- {
- // for 4 or less tasks, the sequential waitall version is faster
- Task.FastWaitAll(tasks);
- }
- else
- {
- // otherwise we revert to the regular WaitAll which delegates the multiple wait to the cooperative event.
- Task.WaitAll(tasks);
- }
- }
- catch (AggregateException aggExp)
- {
- // see if we can combine it into a single OCE. If not propagate the original exception
- ThrowIfReducableToSingleOCE(aggExp.InnerExceptions, parallelOptions.CancellationToken);
- throw;
- }
- finally
- {
- for (int i = 0; i < tasks.Length; i++)
- {
- if (tasks[i].IsCompleted) tasks[i].Dispose();
- }
- }
- }
- }
- finally
- {
- // ETW event for Parallel Invoke End
- if (TplEtwProvider.Log.IsEnabled())
- {
- TplEtwProvider.Log.ParallelInvokeEnd((callerTask != null ? callerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (callerTask != null ? callerTask.Id : 0),
- forkJoinContextID);
- }
- }
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the iteration count (an Int32) as a parameter.
- /// </remarks>
- public static ParallelLoopResult For(int fromInclusive, int toExclusive, Action<int> body)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- return ForWorker<object>(
- fromInclusive, toExclusive,
- s_defaultParallelOptions,
- body, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the iteration count (an Int64) as a parameter.
- /// </remarks>
- public static ParallelLoopResult For(long fromInclusive, long toExclusive, Action<long> body)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- return ForWorker64<object>(
- fromInclusive, toExclusive, s_defaultParallelOptions,
- body, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the iteration count (an Int32) as a parameter.
- /// </remarks>
- public static ParallelLoopResult For(int fromInclusive, int toExclusive, ParallelOptions parallelOptions, Action<int> body)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForWorker<object>(
- fromInclusive, toExclusive, parallelOptions,
- body, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the iteration count (an Int64) as a parameter.
- /// </remarks>
- public static ParallelLoopResult For(long fromInclusive, long toExclusive, ParallelOptions parallelOptions, Action<long> body)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForWorker64<object>(
- fromInclusive, toExclusive, parallelOptions,
- body, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the following parameters: the iteration count (an Int32),
- /// and a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely.
- /// </para>
- /// <para>
- /// Calling <see cref="System.Threading.Tasks.ParallelLoopState.Break()">ParallelLoopState.Break()</see>
- /// informs the For operation that iterations after the current one need not
- /// execute. However, all iterations before the current one will still need to be executed if they have not already.
- /// Therefore, calling Break is similar to using a break operation within a
- /// conventional for loop in a language like C#, but it is not a perfect substitute: for example, there is no guarantee that iterations
- /// after the current one will definitely not execute.
- /// </para>
- /// <para>
- /// If executing all iterations before the current one is not necessary,
- /// <see cref="System.Threading.Tasks.ParallelLoopState.Stop()">ParallelLoopState.Stop()</see>
- /// should be preferred to using Break. Calling Stop informs the For loop that it may abandon all remaining
- /// iterations, regardless of whether they're for interations above or below the current,
- /// since all required work has already been completed. As with Break, however, there are no guarantees regarding
- /// which other iterations will not execute.
- /// </para>
- /// <para>
- /// When a loop is ended prematurely, the <see cref="T:ParallelLoopState"/> that's returned will contain
- /// relevant information about the loop's completion.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult For(int fromInclusive, int toExclusive, Action<int, ParallelLoopState> body)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- return ForWorker<object>(
- fromInclusive, toExclusive, s_defaultParallelOptions,
- null, body, null, null, null);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the following parameters: the iteration count (an Int64),
- /// and a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely.
- /// </remarks>
- public static ParallelLoopResult For(long fromInclusive, long toExclusive, Action<long, ParallelLoopState> body)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- return ForWorker64<object>(
- fromInclusive, toExclusive, s_defaultParallelOptions,
- null, body, null, null, null);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the following parameters: the iteration count (an Int32),
- /// and a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely.
- /// </remarks>
- public static ParallelLoopResult For(int fromInclusive, int toExclusive, ParallelOptions parallelOptions, Action<int, ParallelLoopState> body)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForWorker<object>(
- fromInclusive, toExclusive, parallelOptions,
- null, body, null, null, null);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the following parameters: the iteration count (an Int64),
- /// and a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely.
- /// </remarks>
- public static ParallelLoopResult For(long fromInclusive, long toExclusive, ParallelOptions parallelOptions,
- Action<long, ParallelLoopState> body)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForWorker64<object>(
- fromInclusive, toExclusive, parallelOptions,
- null, body, null, null, null);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the following parameters: the iteration count (an Int32),
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and some local state that may be shared amongst iterations
- /// that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult For<TLocal>(
- int fromInclusive, int toExclusive,
- Func<TLocal> localInit,
- Func<int, ParallelLoopState, TLocal, TLocal> body,
- Action<TLocal> localFinally)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
-
- return ForWorker(
- fromInclusive, toExclusive, s_defaultParallelOptions,
- null, null, body, localInit, localFinally);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel. Supports 64-bit indices.
- /// </summary>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the following parameters: the iteration count (an Int64),
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and some local state that may be shared amongst iterations
- /// that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult For<TLocal>(
- long fromInclusive, long toExclusive,
- Func<TLocal> localInit,
- Func<long, ParallelLoopState, TLocal, TLocal> body,
- Action<TLocal> localFinally)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
-
- return ForWorker64(
- fromInclusive, toExclusive, s_defaultParallelOptions,
- null, null, body, localInit, localFinally);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the following parameters: the iteration count (an Int32),
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and some local state that may be shared amongst iterations
- /// that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult For<TLocal>(
- int fromInclusive, int toExclusive, ParallelOptions parallelOptions,
- Func<TLocal> localInit,
- Func<int, ParallelLoopState, TLocal, TLocal> body,
- Action<TLocal> localFinally)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForWorker(
- fromInclusive, toExclusive, parallelOptions,
- null, null, body, localInit, localFinally);
- }
-
- /// <summary>
- /// Executes a for loop in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="fromInclusive">The start index, inclusive.</param>
- /// <param name="toExclusive">The end index, exclusive.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each value in the iteration range:
- /// [fromInclusive, toExclusive). It is provided with the following parameters: the iteration count (an Int64),
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and some local state that may be shared amongst iterations
- /// that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult For<TLocal>(
- long fromInclusive, long toExclusive, ParallelOptions parallelOptions,
- Func<TLocal> localInit,
- Func<long, ParallelLoopState, TLocal, TLocal> body,
- Action<TLocal> localFinally)
- {
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
-
- return ForWorker64(
- fromInclusive, toExclusive, parallelOptions,
- null, null, body, localInit, localFinally);
- }
-
-
-
-
-
-
-
- /// <summary>
- /// Performs the major work of the parallel for loop. It assumes that argument validation has already
- /// been performed by the caller. This function's whole purpose in life is to enable as much reuse of
- /// common implementation details for the various For overloads we offer. Without it, we'd end up
- /// with lots of duplicate code. It handles: (1) simple for loops, (2) for loops that depend on
- /// ParallelState, and (3) for loops with thread local data.
- ///
- /// </summary>
- /// <typeparam name="TLocal">The type of the local data.</typeparam>
- /// <param name="fromInclusive">The loop's start index, inclusive.</param>
- /// <param name="toExclusive">The loop's end index, exclusive.</param>
- /// <param name="parallelOptions">A ParallelOptions instance.</param>
- /// <param name="body">The simple loop body.</param>
- /// <param name="bodyWithState">The loop body for ParallelState overloads.</param>
- /// <param name="bodyWithLocal">The loop body for thread local state overloads.</param>
- /// <param name="localInit">A selector function that returns new thread local state.</param>
- /// <param name="localFinally">A cleanup function to destroy thread local state.</param>
- /// <remarks>Only one of the body arguments may be supplied (i.e. they are exclusive).</remarks>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
- private static ParallelLoopResult ForWorker<TLocal>(
- int fromInclusive, int toExclusive,
- ParallelOptions parallelOptions,
- Action<int> body,
- Action<int, ParallelLoopState> bodyWithState,
- Func<int, ParallelLoopState, TLocal, TLocal> bodyWithLocal,
- Func<TLocal> localInit, Action<TLocal> localFinally)
- {
- Debug.Assert(((body == null ? 0 : 1) + (bodyWithState == null ? 0 : 1) + (bodyWithLocal == null ? 0 : 1)) == 1,
- "expected exactly one body function to be supplied");
- Debug.Assert(bodyWithLocal != null || (localInit == null && localFinally == null),
- "thread local functions should only be supplied for loops w/ thread local bodies");
-
- // Instantiate our result. Specifics will be filled in later.
- ParallelLoopResult result = new ParallelLoopResult();
-
- // We just return immediately if 'to' is smaller (or equal to) 'from'.
- if (toExclusive <= fromInclusive)
- {
- result.m_completed = true;
- return result;
- }
-
- // For all loops we need a shared flag even though we don't have a body with state,
- // because the shared flag contains the exceptional bool, which triggers other workers
- // to exit their loops if one worker catches an exception
- ParallelLoopStateFlags32 sharedPStateFlags = new ParallelLoopStateFlags32();
-
- TaskCreationOptions creationOptions = TaskCreationOptions.None;
- InternalTaskOptions internalOptions = InternalTaskOptions.SelfReplicating;
-
- // Before getting started, do a quick peek to see if we have been canceled already
- if (parallelOptions.CancellationToken.IsCancellationRequested)
- {
- throw new OperationCanceledException(parallelOptions.CancellationToken);
- }
-
- // initialize ranges with passed in loop arguments and expected number of workers
- int numExpectedWorkers = (parallelOptions.EffectiveMaxConcurrencyLevel == -1) ?
- PlatformHelper.ProcessorCount :
- parallelOptions.EffectiveMaxConcurrencyLevel;
- RangeManager rangeManager = new RangeManager(fromInclusive, toExclusive, 1, numExpectedWorkers);
-
- // Keep track of any cancellations
- OperationCanceledException oce = null;
-
- CancellationTokenRegistration ctr = new CancellationTokenRegistration();
-
- // if cancellation is enabled, we need to register a callback to stop the loop when it gets signaled
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr = parallelOptions.CancellationToken.InternalRegisterWithoutEC((o) =>
- {
- // Cause processing to stop
- sharedPStateFlags.Cancel();
- // Record our cancellation
- oce = new OperationCanceledException(parallelOptions.CancellationToken);
- }, null);
- }
-
- // ETW event for Parallel For begin
- int forkJoinContextID = 0;
- Task callingTask = null;
- if (TplEtwProvider.Log.IsEnabled())
- {
- forkJoinContextID = Interlocked.Increment(ref s_forkJoinContextID);
- callingTask = Task.InternalCurrent;
- TplEtwProvider.Log.ParallelLoopBegin((callingTask != null ? callingTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (callingTask != null ? callingTask.Id : 0),
- forkJoinContextID, TplEtwProvider.ForkJoinOperationType.ParallelFor,
- fromInclusive, toExclusive);
- }
-
- ParallelForReplicatingTask rootTask = null;
-
- try
- {
- // this needs to be in try-block because it can throw in BuggyScheduler.MaxConcurrencyLevel
- rootTask = new ParallelForReplicatingTask(
- parallelOptions,
- delegate
- {
- //
- // first thing we do upon enterying the task is to register as a new "RangeWorker" with the
- // shared RangeManager instance.
- //
- // If this call returns a RangeWorker struct which wraps the state needed by this task
- //
- // We need to call FindNewWork32() on it to see whether there's a chunk available.
- //
-
-
- // Cache some information about the current task
- Task currentWorkerTask = Task.InternalCurrent;
- bool bIsRootTask = (currentWorkerTask == rootTask);
-
- RangeWorker currentWorker = new RangeWorker();
- Object savedStateFromPreviousReplica = currentWorkerTask.SavedStateFromPreviousReplica;
-
- if (savedStateFromPreviousReplica is RangeWorker)
- currentWorker = (RangeWorker)savedStateFromPreviousReplica;
- else
- currentWorker = rangeManager.RegisterNewWorker();
-
-
-
- // These are the local index values to be used in the sequential loop.
- // Their values filled in by FindNewWork32
- int nFromInclusiveLocal;
- int nToExclusiveLocal;
-
- if (currentWorker.FindNewWork32(out nFromInclusiveLocal, out nToExclusiveLocal) == false ||
- sharedPStateFlags.ShouldExitLoop(nFromInclusiveLocal) == true)
- {
- return; // no need to run
- }
-
- // ETW event for ParallelFor Worker Fork
- if (TplEtwProvider.Log.IsEnabled())
- {
- TplEtwProvider.Log.ParallelFork((currentWorkerTask != null ? currentWorkerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (currentWorkerTask != null ? currentWorkerTask.Id : 0),
- forkJoinContextID);
- }
-
- TLocal localValue = default(TLocal);
- bool bLocalValueInitialized = false; // Tracks whether localInit ran without exceptions, so that we can skip localFinally if it wasn't
-
- try
- {
- // Create a new state object that references the shared "stopped" and "exceptional" flags
- // If needed, it will contain a new instance of thread-local state by invoking the selector.
- ParallelLoopState32 state = null;
-
- if (bodyWithState != null)
- {
- Debug.Assert(sharedPStateFlags != null);
- state = new ParallelLoopState32(sharedPStateFlags);
- }
- else if (bodyWithLocal != null)
- {
- Debug.Assert(sharedPStateFlags != null);
- state = new ParallelLoopState32(sharedPStateFlags);
- if (localInit != null)
- {
- localValue = localInit();
- bLocalValueInitialized = true;
- }
- }
-
- // initialize a loop timer which will help us decide whether we should exit early
- LoopTimer loopTimer = new LoopTimer(rootTask.ActiveChildCount);
-
- // Now perform the loop itself.
- do
- {
- if (body != null)
- {
- for (int j = nFromInclusiveLocal;
- j < nToExclusiveLocal && (sharedPStateFlags.LoopStateFlags == ParallelLoopStateFlags.PLS_NONE // fast path check as SEL() doesn't inline
- || !sharedPStateFlags.ShouldExitLoop()); // the no-arg version is used since we have no state
- j += 1)
- {
-
- body(j);
- }
- }
- else if (bodyWithState != null)
- {
- for (int j = nFromInclusiveLocal;
- j < nToExclusiveLocal && (sharedPStateFlags.LoopStateFlags == ParallelLoopStateFlags.PLS_NONE // fast path check as SEL() doesn't inline
- || !sharedPStateFlags.ShouldExitLoop(j));
- j += 1)
- {
-
- state.CurrentIteration = j;
- bodyWithState(j, state);
- }
- }
- else
- {
- for (int j = nFromInclusiveLocal;
- j < nToExclusiveLocal && (sharedPStateFlags.LoopStateFlags == ParallelLoopStateFlags.PLS_NONE // fast path check as SEL() doesn't inline
- || !sharedPStateFlags.ShouldExitLoop(j));
- j += 1)
- {
- state.CurrentIteration = j;
- localValue = bodyWithLocal(j, state, localValue);
- }
- }
-
- // Cooperative multitasking workaround for AppDomain fairness.
- // Check if allowed loop time is exceeded, if so save current state and return. The self replicating task logic
- // will detect this, and queue up a replacement task. Note that we don't do this on the root task.
- if (!bIsRootTask && loopTimer.LimitExceeded())
- {
- currentWorkerTask.SavedStateForNextReplica = (object)currentWorker;
- break;
- }
-
- }
- // Exit if we can't find new work, or if the loop was stoppped.
- while (currentWorker.FindNewWork32(out nFromInclusiveLocal, out nToExclusiveLocal) &&
- ((sharedPStateFlags.LoopStateFlags == ParallelLoopStateFlags.PLS_NONE) ||
- !sharedPStateFlags.ShouldExitLoop(nFromInclusiveLocal)));
- }
- catch
- {
- // if we catch an exception in a worker, we signal the other workers to exit the loop, and we rethrow
- sharedPStateFlags.SetExceptional();
- throw;
- }
- finally
- {
- // If a cleanup function was specified, call it. Otherwise, if the type is
- // IDisposable, we will invoke Dispose on behalf of the user.
- if (localFinally != null && bLocalValueInitialized)
- {
- localFinally(localValue);
- }
-
- // ETW event for ParallelFor Worker Join
- if (TplEtwProvider.Log.IsEnabled())
- {
- TplEtwProvider.Log.ParallelJoin((currentWorkerTask != null ? currentWorkerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (currentWorkerTask != null ? currentWorkerTask.Id : 0),
- forkJoinContextID);
- }
- }
- },
- creationOptions, internalOptions);
-
- rootTask.RunSynchronously(parallelOptions.EffectiveTaskScheduler); // might throw TSE
- rootTask.Wait();
-
- // If we made a cancellation registration, we need to clean it up now before observing the OCE
- // Otherwise we could be caught in the middle of a callback, and observe PLS_STOPPED, but oce = null
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr.Dispose();
- }
-
- // If we got through that with no exceptions, and we were canceled, then
- // throw our cancellation exception
- if (oce != null) throw oce;
- }
- catch (AggregateException aggExp)
- {
- // if we made a cancellation registration, and rootTask.Wait threw, we need to clean it up here
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr.Dispose();
- }
-
- // see if we can combine it into a single OCE. If not propagate the original exception
- ThrowIfReducableToSingleOCE(aggExp.InnerExceptions, parallelOptions.CancellationToken);
- throw;
- }
- catch (TaskSchedulerException)
- {
- // if we made a cancellation registration, and rootTask.RunSynchronously threw, we need to clean it up here
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr.Dispose();
- }
- throw;
- }
- finally
- {
- int sb_status = sharedPStateFlags.LoopStateFlags;
- result.m_completed = (sb_status == ParallelLoopStateFlags.PLS_NONE);
- if ((sb_status & ParallelLoopStateFlags.PLS_BROKEN) != 0)
- {
- result.m_lowestBreakIteration = sharedPStateFlags.LowestBreakIteration;
- }
-
- if ((rootTask != null) && rootTask.IsCompleted) rootTask.Dispose();
-
- // ETW event for Parallel For End
- if (TplEtwProvider.Log.IsEnabled())
- {
- int nTotalIterations = 0;
-
- // calculate how many iterations we ran in total
- if (sb_status == ParallelLoopStateFlags.PLS_NONE)
- nTotalIterations = toExclusive - fromInclusive;
- else if ((sb_status & ParallelLoopStateFlags.PLS_BROKEN) != 0)
- nTotalIterations = sharedPStateFlags.LowestBreakIteration - fromInclusive;
- else
- nTotalIterations = -1; //PLS_STOPPED! We can't determine this if we were stopped..
-
- TplEtwProvider.Log.ParallelLoopEnd((callingTask != null ? callingTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (callingTask != null ? callingTask.Id : 0),
- forkJoinContextID, nTotalIterations);
- }
- }
-
- return result;
- }
-
- /// <summary>
- /// Performs the major work of the 64-bit parallel for loop. It assumes that argument validation has already
- /// been performed by the caller. This function's whole purpose in life is to enable as much reuse of
- /// common implementation details for the various For overloads we offer. Without it, we'd end up
- /// with lots of duplicate code. It handles: (1) simple for loops, (2) for loops that depend on
- /// ParallelState, and (3) for loops with thread local data.
- ///
- /// </summary>
- /// <typeparam name="TLocal">The type of the local data.</typeparam>
- /// <param name="fromInclusive">The loop's start index, inclusive.</param>
- /// <param name="toExclusive">The loop's end index, exclusive.</param>
- /// <param name="parallelOptions">A ParallelOptions instance.</param>
- /// <param name="body">The simple loop body.</param>
- /// <param name="bodyWithState">The loop body for ParallelState overloads.</param>
- /// <param name="bodyWithLocal">The loop body for thread local state overloads.</param>
- /// <param name="localInit">A selector function that returns new thread local state.</param>
- /// <param name="localFinally">A cleanup function to destroy thread local state.</param>
- /// <remarks>Only one of the body arguments may be supplied (i.e. they are exclusive).</remarks>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
- private static ParallelLoopResult ForWorker64<TLocal>(
- long fromInclusive, long toExclusive,
- ParallelOptions parallelOptions,
- Action<long> body,
- Action<long, ParallelLoopState> bodyWithState,
- Func<long, ParallelLoopState, TLocal, TLocal> bodyWithLocal,
- Func<TLocal> localInit, Action<TLocal> localFinally)
- {
- Debug.Assert(((body == null ? 0 : 1) + (bodyWithState == null ? 0 : 1) + (bodyWithLocal == null ? 0 : 1)) == 1,
- "expected exactly one body function to be supplied");
- Debug.Assert(bodyWithLocal != null || (localInit == null && localFinally == null),
- "thread local functions should only be supplied for loops w/ thread local bodies");
-
- // Instantiate our result. Specifics will be filled in later.
- ParallelLoopResult result = new ParallelLoopResult();
-
- // We just return immediately if 'to' is smaller (or equal to) 'from'.
- if (toExclusive <= fromInclusive)
- {
- result.m_completed = true;
- return result;
- }
-
- // For all loops we need a shared flag even though we don't have a body with state,
- // because the shared flag contains the exceptional bool, which triggers other workers
- // to exit their loops if one worker catches an exception
- ParallelLoopStateFlags64 sharedPStateFlags = new ParallelLoopStateFlags64();
-
- TaskCreationOptions creationOptions = TaskCreationOptions.None;
- InternalTaskOptions internalOptions = InternalTaskOptions.SelfReplicating;
-
- // Before getting started, do a quick peek to see if we have been canceled already
- if (parallelOptions.CancellationToken.IsCancellationRequested)
- {
- throw new OperationCanceledException(parallelOptions.CancellationToken);
- }
-
- // initialize ranges with passed in loop arguments and expected number of workers
- int numExpectedWorkers = (parallelOptions.EffectiveMaxConcurrencyLevel == -1) ?
- PlatformHelper.ProcessorCount :
- parallelOptions.EffectiveMaxConcurrencyLevel;
- RangeManager rangeManager = new RangeManager(fromInclusive, toExclusive, 1, numExpectedWorkers);
-
- // Keep track of any cancellations
- OperationCanceledException oce = null;
-
- CancellationTokenRegistration ctr = new CancellationTokenRegistration();
-
- // if cancellation is enabled, we need to register a callback to stop the loop when it gets signaled
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr = parallelOptions.CancellationToken.InternalRegisterWithoutEC((o) =>
- {
- // Cause processing to stop
- sharedPStateFlags.Cancel();
- // Record our cancellation
- oce = new OperationCanceledException(parallelOptions.CancellationToken);
- }, null);
- }
-
- // ETW event for Parallel For begin
- Task callerTask = null;
- int forkJoinContextID = 0;
- if (TplEtwProvider.Log.IsEnabled())
- {
- forkJoinContextID = Interlocked.Increment(ref s_forkJoinContextID);
- callerTask = Task.InternalCurrent;
- TplEtwProvider.Log.ParallelLoopBegin((callerTask != null ? callerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (callerTask != null ? callerTask.Id : 0),
- forkJoinContextID, TplEtwProvider.ForkJoinOperationType.ParallelFor,
- fromInclusive, toExclusive);
- }
-
- ParallelForReplicatingTask rootTask = null;
-
- try
- {
- // this needs to be in try-block because it can throw in BuggyScheduler.MaxConcurrencyLevel
- rootTask = new ParallelForReplicatingTask(
- parallelOptions,
- delegate
- {
- //
- // first thing we do upon enterying the task is to register as a new "RangeWorker" with the
- // shared RangeManager instance.
- //
- // If this call returns a RangeWorker struct which wraps the state needed by this task
- //
- // We need to call FindNewWork() on it to see whether there's a chunk available.
- //
-
- // Cache some information about the current task
- Task currentWorkerTask = Task.InternalCurrent;
- bool bIsRootTask = (currentWorkerTask == rootTask);
-
- RangeWorker currentWorker = new RangeWorker();
- Object savedStateFromPreviousReplica = currentWorkerTask.SavedStateFromPreviousReplica;
-
- if (savedStateFromPreviousReplica is RangeWorker)
- currentWorker = (RangeWorker)savedStateFromPreviousReplica;
- else
- currentWorker = rangeManager.RegisterNewWorker();
-
-
- // These are the local index values to be used in the sequential loop.
- // Their values filled in by FindNewWork
- long nFromInclusiveLocal;
- long nToExclusiveLocal;
-
- if (currentWorker.FindNewWork(out nFromInclusiveLocal, out nToExclusiveLocal) == false ||
- sharedPStateFlags.ShouldExitLoop(nFromInclusiveLocal) == true)
- {
- return; // no need to run
- }
-
- // ETW event for ParallelFor Worker Fork
- if (TplEtwProvider.Log.IsEnabled())
- {
- TplEtwProvider.Log.ParallelFork((currentWorkerTask != null ? currentWorkerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (currentWorkerTask != null ? currentWorkerTask.Id : 0),
- forkJoinContextID);
- }
-
- TLocal localValue = default(TLocal);
- bool bLocalValueInitialized = false; // Tracks whether localInit ran without exceptions, so that we can skip localFinally if it wasn't
-
- try
- {
-
- // Create a new state object that references the shared "stopped" and "exceptional" flags
- // If needed, it will contain a new instance of thread-local state by invoking the selector.
- ParallelLoopState64 state = null;
-
- if (bodyWithState != null)
- {
- Debug.Assert(sharedPStateFlags != null);
- state = new ParallelLoopState64(sharedPStateFlags);
- }
- else if (bodyWithLocal != null)
- {
- Debug.Assert(sharedPStateFlags != null);
- state = new ParallelLoopState64(sharedPStateFlags);
-
- // If a thread-local selector was supplied, invoke it. Otherwise, use the default.
- if (localInit != null)
- {
- localValue = localInit();
- bLocalValueInitialized = true;
- }
- }
-
- // initialize a loop timer which will help us decide whether we should exit early
- LoopTimer loopTimer = new LoopTimer(rootTask.ActiveChildCount);
-
- // Now perform the loop itself.
- do
- {
- if (body != null)
- {
- for (long j = nFromInclusiveLocal;
- j < nToExclusiveLocal && (sharedPStateFlags.LoopStateFlags == ParallelLoopStateFlags.PLS_NONE // fast path check as SEL() doesn't inline
- || !sharedPStateFlags.ShouldExitLoop()); // the no-arg version is used since we have no state
- j += 1)
- {
- body(j);
- }
- }
- else if (bodyWithState != null)
- {
- for (long j = nFromInclusiveLocal;
- j < nToExclusiveLocal && (sharedPStateFlags.LoopStateFlags == ParallelLoopStateFlags.PLS_NONE // fast path check as SEL() doesn't inline
- || !sharedPStateFlags.ShouldExitLoop(j));
- j += 1)
- {
- state.CurrentIteration = j;
- bodyWithState(j, state);
- }
- }
- else
- {
- for (long j = nFromInclusiveLocal;
- j < nToExclusiveLocal && (sharedPStateFlags.LoopStateFlags == ParallelLoopStateFlags.PLS_NONE // fast path check as SEL() doesn't inline
- || !sharedPStateFlags.ShouldExitLoop(j));
- j += 1)
- {
- state.CurrentIteration = j;
- localValue = bodyWithLocal(j, state, localValue);
- }
- }
-
- // Cooperative multitasking workaround for AppDomain fairness.
- // Check if allowed loop time is exceeded, if so save current state and return. The self replicating task logic
- // will detect this, and queue up a replacement task. Note that we don't do this on the root task.
- if (!bIsRootTask && loopTimer.LimitExceeded())
- {
- currentWorkerTask.SavedStateForNextReplica = (object)currentWorker;
- break;
- }
- }
- // Exit if we can't find new work, or if the loop was stoppped.
- while (currentWorker.FindNewWork(out nFromInclusiveLocal, out nToExclusiveLocal) &&
- ((sharedPStateFlags.LoopStateFlags == ParallelLoopStateFlags.PLS_NONE) ||
- !sharedPStateFlags.ShouldExitLoop(nFromInclusiveLocal)));
- }
- catch
- {
- // if we catch an exception in a worker, we signal the other workers to exit the loop, and we rethrow
- sharedPStateFlags.SetExceptional();
- throw;
- }
- finally
- {
- // If a cleanup function was specified, call it. Otherwise, if the type is
- // IDisposable, we will invoke Dispose on behalf of the user.
- if (localFinally != null && bLocalValueInitialized)
- {
- localFinally(localValue);
- }
-
- // ETW event for ParallelFor Worker Join
- if (TplEtwProvider.Log.IsEnabled())
- {
- TplEtwProvider.Log.ParallelJoin((currentWorkerTask != null ? currentWorkerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (currentWorkerTask != null ? currentWorkerTask.Id : 0),
- forkJoinContextID);
- }
- }
- },
- creationOptions, internalOptions);
-
- rootTask.RunSynchronously(parallelOptions.EffectiveTaskScheduler); // might throw TSE
- rootTask.Wait();
-
- // If we made a cancellation registration, we need to clean it up now before observing the OCE
- // Otherwise we could be caught in the middle of a callback, and observe PLS_STOPPED, but oce = null
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr.Dispose();
- }
-
- // If we got through that with no exceptions, and we were canceled, then
- // throw our cancellation exception
- if (oce != null) throw oce;
- }
- catch (AggregateException aggExp)
- {
- // if we made a cancellation registration, and rootTask.Wait threw, we need to clean it up here
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr.Dispose();
- }
-
- // see if we can combine it into a single OCE. If not propagate the original exception
- ThrowIfReducableToSingleOCE(aggExp.InnerExceptions, parallelOptions.CancellationToken);
- throw;
- }
- catch (TaskSchedulerException)
- {
- // if we made a cancellation registration, and rootTask.RunSynchronously threw, we need to clean it up here
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr.Dispose();
- }
- throw;
- }
- finally
- {
- int sb_status = sharedPStateFlags.LoopStateFlags;
- result.m_completed = (sb_status == ParallelLoopStateFlags.PLS_NONE);
- if ((sb_status & ParallelLoopStateFlags.PLS_BROKEN) != 0)
- {
- result.m_lowestBreakIteration = sharedPStateFlags.LowestBreakIteration;
- }
-
- if ((rootTask != null) && rootTask.IsCompleted) rootTask.Dispose();
-
- // ETW event for Parallel For End
- if (TplEtwProvider.Log.IsEnabled())
- {
- long nTotalIterations = 0;
-
- // calculate how many iterations we ran in total
- if (sb_status == ParallelLoopStateFlags.PLS_NONE)
- nTotalIterations = toExclusive - fromInclusive;
- else if ((sb_status & ParallelLoopStateFlags.PLS_BROKEN) != 0)
- nTotalIterations = sharedPStateFlags.LowestBreakIteration - fromInclusive;
- else
- nTotalIterations = -1; //PLS_STOPPED! We can't determine this if we were stopped..
-
- TplEtwProvider.Log.ParallelLoopEnd((callerTask != null ? callerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (callerTask != null ? callerTask.Id : 0),
- forkJoinContextID, nTotalIterations);
- }
- }
-
- return result;
- }
-
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the current element as a parameter.
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(IEnumerable<TSource> source, Action<TSource> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- return ForEachWorker<TSource, object>(
- source, s_defaultParallelOptions, body, null, null, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the current element as a parameter.
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(IEnumerable<TSource> source, ParallelOptions parallelOptions, Action<TSource> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForEachWorker<TSource, object>(
- source, parallelOptions, body, null, null, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the following parameters: the current element,
- /// and a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely.
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(IEnumerable<TSource> source, Action<TSource, ParallelLoopState> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- return ForEachWorker<TSource, object>(
- source, s_defaultParallelOptions, null, body, null, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the following parameters: the current element,
- /// and a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely.
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(IEnumerable<TSource> source, ParallelOptions parallelOptions, Action<TSource, ParallelLoopState> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForEachWorker<TSource, object>(
- source, parallelOptions, null, body, null, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and the current element's index (an Int64).
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(IEnumerable<TSource> source, Action<TSource, ParallelLoopState, long> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- return ForEachWorker<TSource, object>(
- source, s_defaultParallelOptions, null, null, body, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and the current element's index (an Int64).
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(IEnumerable<TSource> source, ParallelOptions parallelOptions, Action<TSource, ParallelLoopState, long> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForEachWorker<TSource, object>(
- source, parallelOptions, null, null, body, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and some local state that may be shared amongst iterations
- /// that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource, TLocal>(IEnumerable<TSource> source, Func<TLocal> localInit,
- Func<TSource, ParallelLoopState, TLocal, TLocal> body, Action<TLocal> localFinally)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
-
- return ForEachWorker<TSource, TLocal>(
- source, s_defaultParallelOptions, null, null, null, body, null, localInit, localFinally);
- }
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and some local state that may be shared amongst iterations
- /// that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource, TLocal>(IEnumerable<TSource> source,
- ParallelOptions parallelOptions, Func<TLocal> localInit,
- Func<TSource, ParallelLoopState, TLocal, TLocal> body, Action<TLocal> localFinally)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForEachWorker<TSource, TLocal>(
- source, parallelOptions, null, null, null, body, null, localInit, localFinally);
- }
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, the current element's index (an Int64), and some local
- /// state that may be shared amongst iterations that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource, TLocal>(IEnumerable<TSource> source, Func<TLocal> localInit,
- Func<TSource, ParallelLoopState, long, TLocal, TLocal> body, Action<TLocal> localFinally)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
-
- return ForEachWorker<TSource, TLocal>(
- source, s_defaultParallelOptions, null, null, null, null, body, localInit, localFinally);
- }
-
- /// <summary>
- /// Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/>
- /// in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the data in the source.</typeparam>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// enumerable. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, the current element's index (an Int64), and some local
- /// state that may be shared amongst iterations that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource, TLocal>(IEnumerable<TSource> source, ParallelOptions parallelOptions, Func<TLocal> localInit,
- Func<TSource, ParallelLoopState, long, TLocal, TLocal> body, Action<TLocal> localFinally)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return ForEachWorker<TSource, TLocal>(
- source, parallelOptions, null, null, null, null, body, localInit, localFinally);
- }
-
-
- /// <summary>
- /// Performs the major work of the parallel foreach loop. It assumes that argument validation has
- /// already been performed by the caller. This function's whole purpose in life is to enable as much
- /// reuse of common implementation details for the various For overloads we offer. Without it, we'd
- /// end up with lots of duplicate code. It handles: (1) simple foreach loops, (2) foreach loops that
- /// depend on ParallelState, and (3) foreach loops that access indices, (4) foreach loops with thread
- /// local data, and any necessary permutations thereof.
- ///
- /// </summary>
- /// <typeparam name="TSource">The type of the source data.</typeparam>
- /// <typeparam name="TLocal">The type of the local data.</typeparam>
- /// <param name="source">An enumerable data source.</param>
- /// <param name="parallelOptions">ParallelOptions instance to use with this ForEach-loop</param>
- /// <param name="body">The simple loop body.</param>
- /// <param name="bodyWithState">The loop body for ParallelState overloads.</param>
- /// <param name="bodyWithStateAndIndex">The loop body for ParallelState/indexed overloads.</param>
- /// <param name="bodyWithStateAndLocal">The loop body for ParallelState/thread local state overloads.</param>
- /// <param name="bodyWithEverything">The loop body for ParallelState/indexed/thread local state overloads.</param>
- /// <param name="localInit">A selector function that returns new thread local state.</param>
- /// <param name="localFinally">A cleanup function to destroy thread local state.</param>
- /// <remarks>Only one of the bodyXX arguments may be supplied (i.e. they are exclusive).</remarks>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
- private static ParallelLoopResult ForEachWorker<TSource, TLocal>(
- IEnumerable<TSource> source,
- ParallelOptions parallelOptions,
- Action<TSource> body,
- Action<TSource, ParallelLoopState> bodyWithState,
- Action<TSource, ParallelLoopState, long> bodyWithStateAndIndex,
- Func<TSource, ParallelLoopState, TLocal, TLocal> bodyWithStateAndLocal,
- Func<TSource, ParallelLoopState, long, TLocal, TLocal> bodyWithEverything,
- Func<TLocal> localInit, Action<TLocal> localFinally)
- {
- Debug.Assert(((body == null ? 0 : 1) + (bodyWithState == null ? 0 : 1) +
- (bodyWithStateAndIndex == null ? 0 : 1) + (bodyWithStateAndLocal == null ? 0 : 1) + (bodyWithEverything == null ? 0 : 1)) == 1,
- "expected exactly one body function to be supplied");
- Debug.Assert((bodyWithStateAndLocal != null) || (bodyWithEverything != null) || (localInit == null && localFinally == null),
- "thread local functions should only be supplied for loops w/ thread local bodies");
-
- // Before getting started, do a quick peek to see if we have been canceled already
- if (parallelOptions.CancellationToken.IsCancellationRequested)
- {
- throw new OperationCanceledException(parallelOptions.CancellationToken);
- }
-
- // If it's an array, we can use a fast-path that uses ldelems in the IL.
- TSource[] sourceAsArray = source as TSource[];
- if (sourceAsArray != null)
- {
- return ForEachWorker<TSource, TLocal>(
- sourceAsArray, parallelOptions, body, bodyWithState, bodyWithStateAndIndex, bodyWithStateAndLocal,
- bodyWithEverything, localInit, localFinally);
- }
-
- // If we can index into the list, we can use a faster code-path that doesn't result in
- // contention for the single, shared enumerator object.
- IList<TSource> sourceAsList = source as IList<TSource>;
- if (sourceAsList != null)
- {
- return ForEachWorker<TSource, TLocal>(
- sourceAsList, parallelOptions, body, bodyWithState, bodyWithStateAndIndex, bodyWithStateAndLocal,
- bodyWithEverything, localInit, localFinally);
- }
-
- // This is an honest-to-goodness IEnumerable. Wrap it in a Partitioner and defer to our
- // ForEach(Partitioner) logic.
- return PartitionerForEachWorker<TSource, TLocal>(Partitioner.Create(source), parallelOptions, body, bodyWithState,
- bodyWithStateAndIndex, bodyWithStateAndLocal, bodyWithEverything, localInit, localFinally);
-
- }
-
- /// <summary>
- /// A fast path for the more general ForEachWorker method above. This uses ldelem instructions to
- /// access the individual elements of the array, which will be faster.
- /// </summary>
- /// <typeparam name="TSource">The type of the source data.</typeparam>
- /// <typeparam name="TLocal">The type of the local data.</typeparam>
- /// <param name="array">An array data source.</param>
- /// <param name="parallelOptions">The options to use for execution.</param>
- /// <param name="body">The simple loop body.</param>
- /// <param name="bodyWithState">The loop body for ParallelState overloads.</param>
- /// <param name="bodyWithStateAndIndex">The loop body for indexed/ParallelLoopState overloads.</param>
- /// <param name="bodyWithStateAndLocal">The loop body for local/ParallelLoopState overloads.</param>
- /// <param name="bodyWithEverything">The loop body for the most generic overload.</param>
- /// <param name="localInit">A selector function that returns new thread local state.</param>
- /// <param name="localFinally">A cleanup function to destroy thread local state.</param>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
- private static ParallelLoopResult ForEachWorker<TSource, TLocal>(
- TSource[] array,
- ParallelOptions parallelOptions,
- Action<TSource> body,
- Action<TSource, ParallelLoopState> bodyWithState,
- Action<TSource, ParallelLoopState, long> bodyWithStateAndIndex,
- Func<TSource, ParallelLoopState, TLocal, TLocal> bodyWithStateAndLocal,
- Func<TSource, ParallelLoopState, long, TLocal, TLocal> bodyWithEverything,
- Func<TLocal> localInit, Action<TLocal> localFinally)
- {
- Debug.Assert(array != null);
- Debug.Assert(parallelOptions != null, "ForEachWorker(array): parallelOptions is null");
-
- int from = array.GetLowerBound(0);
- int to = array.GetUpperBound(0) + 1;
-
- if (body != null)
- {
- return ForWorker<object>(
- from, to, parallelOptions, (i) => body(array[i]), null, null, null, null);
- }
- else if (bodyWithState != null)
- {
- return ForWorker<object>(
- from, to, parallelOptions, null, (i, state) => bodyWithState(array[i], state), null, null, null);
- }
- else if (bodyWithStateAndIndex != null)
- {
- return ForWorker<object>(
- from, to, parallelOptions, null, (i, state) => bodyWithStateAndIndex(array[i], state, i), null, null, null);
- }
- else if (bodyWithStateAndLocal != null)
- {
- return ForWorker<TLocal>(
- from, to, parallelOptions, null, null, (i, state, local) => bodyWithStateAndLocal(array[i], state, local), localInit, localFinally);
- }
- else
- {
- return ForWorker<TLocal>(
- from, to, parallelOptions, null, null, (i, state, local) => bodyWithEverything(array[i], state, i, local), localInit, localFinally);
- }
- }
-
- /// <summary>
- /// A fast path for the more general ForEachWorker method above. This uses IList&lt;T&gt;'s indexer
- /// capabilities to access the individual elements of the list rather than an enumerator.
- /// </summary>
- /// <typeparam name="TSource">The type of the source data.</typeparam>
- /// <typeparam name="TLocal">The type of the local data.</typeparam>
- /// <param name="list">A list data source.</param>
- /// <param name="parallelOptions">The options to use for execution.</param>
- /// <param name="body">The simple loop body.</param>
- /// <param name="bodyWithState">The loop body for ParallelState overloads.</param>
- /// <param name="bodyWithStateAndIndex">The loop body for indexed/ParallelLoopState overloads.</param>
- /// <param name="bodyWithStateAndLocal">The loop body for local/ParallelLoopState overloads.</param>
- /// <param name="bodyWithEverything">The loop body for the most generic overload.</param>
- /// <param name="localInit">A selector function that returns new thread local state.</param>
- /// <param name="localFinally">A cleanup function to destroy thread local state.</param>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
- private static ParallelLoopResult ForEachWorker<TSource, TLocal>(
- IList<TSource> list,
- ParallelOptions parallelOptions,
- Action<TSource> body,
- Action<TSource, ParallelLoopState> bodyWithState,
- Action<TSource, ParallelLoopState, long> bodyWithStateAndIndex,
- Func<TSource, ParallelLoopState, TLocal, TLocal> bodyWithStateAndLocal,
- Func<TSource, ParallelLoopState, long, TLocal, TLocal> bodyWithEverything,
- Func<TLocal> localInit, Action<TLocal> localFinally)
- {
- Debug.Assert(list != null);
- Debug.Assert(parallelOptions != null, "ForEachWorker(list): parallelOptions is null");
-
- if (body != null)
- {
- return ForWorker<object>(
- 0, list.Count, parallelOptions, (i) => body(list[i]), null, null, null, null);
- }
- else if (bodyWithState != null)
- {
- return ForWorker<object>(
- 0, list.Count, parallelOptions, null, (i, state) => bodyWithState(list[i], state), null, null, null);
- }
- else if (bodyWithStateAndIndex != null)
- {
- return ForWorker<object>(
- 0, list.Count, parallelOptions, null, (i, state) => bodyWithStateAndIndex(list[i], state, i), null, null, null);
- }
- else if (bodyWithStateAndLocal != null)
- {
- return ForWorker<TLocal>(
- 0, list.Count, parallelOptions, null, null, (i, state, local) => bodyWithStateAndLocal(list[i], state, local), localInit, localFinally);
- }
- else
- {
- return ForWorker<TLocal>(
- 0, list.Count, parallelOptions, null, null, (i, state, local) => bodyWithEverything(list[i], state, i, local), localInit, localFinally);
- }
- }
-
-
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
- /// Partitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <param name="source">The Partitioner that contains the original data source.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> Partitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner does not return
- /// the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList
- /// with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an
- /// IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the current element as a parameter.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(
- Partitioner<TSource> source,
- Action<TSource> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- return PartitionerForEachWorker<TSource, object>(source, s_defaultParallelOptions, body, null, null, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
- /// Partitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <param name="source">The Partitioner that contains the original data source.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> Partitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner does not return
- /// the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList
- /// with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an
- /// IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the following parameters: the current element,
- /// and a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(
- Partitioner<TSource> source,
- Action<TSource, ParallelLoopState> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- return PartitionerForEachWorker<TSource, object>(source, s_defaultParallelOptions, null, body, null, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.OrderablePartitioner{TSource}">
- /// OrderablePartitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <param name="source">The OrderablePartitioner that contains the original data source.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> OrderablePartitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// KeysNormalized property in the <paramref name="source"/> OrderablePartitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> OrderablePartitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner do not return the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner return an IList with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and the current element's index (an Int64).
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(
- OrderablePartitioner<TSource> source,
- Action<TSource, ParallelLoopState, long> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
-
- if (!source.KeysNormalized)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Parallel_ForEach_OrderedPartitionerKeysNotNormalized"));
- }
-
- return PartitionerForEachWorker<TSource, object>(source, s_defaultParallelOptions, null, null, body, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
- /// Partitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="source">The Partitioner that contains the original data source.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> Partitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner does not return
- /// the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList
- /// with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an
- /// IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and some local state that may be shared amongst iterations
- /// that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource, TLocal>(
- Partitioner<TSource> source,
- Func<TLocal> localInit,
- Func<TSource, ParallelLoopState, TLocal, TLocal> body,
- Action<TLocal> localFinally)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
-
- return PartitionerForEachWorker<TSource, TLocal>(source, s_defaultParallelOptions, null, null, null, body, null, localInit, localFinally);
- }
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.OrderablePartitioner{TSource}">
- /// OrderablePartitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="source">The OrderablePartitioner that contains the original data source.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> OrderablePartitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// KeysNormalized property in the <paramref name="source"/> OrderablePartitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> OrderablePartitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner do not return the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner return an IList with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, the current element's index (an Int64), and some local
- /// state that may be shared amongst iterations that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource, TLocal>(
- OrderablePartitioner<TSource> source,
- Func<TLocal> localInit,
- Func<TSource, ParallelLoopState, long, TLocal, TLocal> body,
- Action<TLocal> localFinally)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
-
- if (!source.KeysNormalized)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Parallel_ForEach_OrderedPartitionerKeysNotNormalized"));
- }
-
- return PartitionerForEachWorker<TSource, TLocal>(source, s_defaultParallelOptions, null, null, null, null, body, localInit, localFinally);
- }
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
- /// Partitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <param name="source">The Partitioner that contains the original data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> Partitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner does not return
- /// the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList
- /// with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an
- /// IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the current element as a parameter.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(
- Partitioner<TSource> source,
- ParallelOptions parallelOptions,
- Action<TSource> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return PartitionerForEachWorker<TSource, object>(source, parallelOptions, body, null, null, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
- /// Partitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <param name="source">The Partitioner that contains the original data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> Partitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner does not return
- /// the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList
- /// with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an
- /// IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the following parameters: the current element,
- /// and a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(
- Partitioner<TSource> source,
- ParallelOptions parallelOptions,
- Action<TSource, ParallelLoopState> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return PartitionerForEachWorker<TSource, object>(source, parallelOptions, null, body, null, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.OrderablePartitioner{TSource}">
- /// OrderablePartitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <param name="source">The OrderablePartitioner that contains the original data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> OrderablePartitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// KeysNormalized property in the <paramref name="source"/> OrderablePartitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> OrderablePartitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner do not return the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner return an IList with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and the current element's index (an Int64).
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource>(
- OrderablePartitioner<TSource> source,
- ParallelOptions parallelOptions,
- Action<TSource, ParallelLoopState, long> body)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- if (!source.KeysNormalized)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Parallel_ForEach_OrderedPartitionerKeysNotNormalized"));
- }
-
- return PartitionerForEachWorker<TSource, object>(source, parallelOptions, null, null, body, null, null, null, null);
- }
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
- /// Partitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="source">The Partitioner that contains the original data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> Partitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner does not return
- /// the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList
- /// with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an
- /// IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, and some local state that may be shared amongst iterations
- /// that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource, TLocal>(
- Partitioner<TSource> source,
- ParallelOptions parallelOptions,
- Func<TLocal> localInit,
- Func<TSource, ParallelLoopState, TLocal, TLocal> body,
- Action<TLocal> localFinally)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- return PartitionerForEachWorker<TSource, TLocal>(source, parallelOptions, null, null, null, body, null, localInit, localFinally);
- }
-
- /// <summary>
- /// Executes a for each operation on a <see cref="T:System.Collections.Concurrent.OrderablePartitioner{TSource}">
- /// OrderablePartitioner</see> in which iterations may run in parallel.
- /// </summary>
- /// <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
- /// <typeparam name="TLocal">The type of the thread-local data.</typeparam>
- /// <param name="source">The OrderablePartitioner that contains the original data source.</param>
- /// <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see>
- /// instance that configures the behavior of this operation.</param>
- /// <param name="localInit">The function delegate that returns the initial state of the local data
- /// for each thread.</param>
- /// <param name="body">The delegate that is invoked once per iteration.</param>
- /// <param name="localFinally">The delegate that performs a final action on the local state of each
- /// thread.</param>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="parallelOptions"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/>
- /// argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localInit"/> argument is null.</exception>
- /// <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
- /// <paramref name="localFinally"/> argument is null.</exception>
- /// <exception cref="T:System.OperationCanceledException">The exception that is thrown when the
- /// <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/>
- /// argument is set</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// SupportsDynamicPartitions property in the <paramref name="source"/> OrderablePartitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// KeysNormalized property in the <paramref name="source"/> OrderablePartitioner returns
- /// false.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when any
- /// methods in the <paramref name="source"/> OrderablePartitioner return null.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner do not return the correct number of partitions.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner return an IList with at least one null value.</exception>
- /// <exception cref="T:System.InvalidOperationException">The exception that is thrown when the
- /// GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the <paramref name="source"/>
- /// OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.</exception>
- /// <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
- /// thrown from one of the specified delegates.</exception>
- /// <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the
- /// the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the
- /// the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the
- /// <paramref name="parallelOptions"/> has been disposed.</exception>
- /// <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
- /// that contains information on what portion of the loop completed.</returns>
- /// <remarks>
- /// <para>
- /// The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve
- /// the elements to be processed, in place of the original data source. If the current element's
- /// index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
- /// OrderablePartitioner</see>.
- /// </para>
- /// <para>
- /// The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/>
- /// Partitioner. It is provided with the following parameters: the current element,
- /// a <see cref="System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be
- /// used to break out of the loop prematurely, the current element's index (an Int64), and some local
- /// state that may be shared amongst iterations that execute on the same thread.
- /// </para>
- /// <para>
- /// The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's
- /// execution and returns the initial local state for each of those threads. These initial states are passed to the first
- /// <paramref name="body"/> invocations on each thread. Then, every subsequent body invocation returns a possibly
- /// modified state value that is passed to the next body invocation. Finally, the last body invocation on each thread returns a state value
- /// that is passed to the <paramref name="localFinally"/> delegate. The localFinally delegate is invoked once per thread to perform a final
- /// action on each thread's local state.
- /// </para>
- /// </remarks>
- public static ParallelLoopResult ForEach<TSource, TLocal>(
- OrderablePartitioner<TSource> source,
- ParallelOptions parallelOptions,
- Func<TLocal> localInit,
- Func<TSource, ParallelLoopState, long, TLocal, TLocal> body,
- Action<TLocal> localFinally)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(source));
- }
- if (body == null)
- {
- throw new ArgumentNullException(nameof(body));
- }
- if (localInit == null)
- {
- throw new ArgumentNullException(nameof(localInit));
- }
- if (localFinally == null)
- {
- throw new ArgumentNullException(nameof(localFinally));
- }
- if (parallelOptions == null)
- {
- throw new ArgumentNullException(nameof(parallelOptions));
- }
-
- if (!source.KeysNormalized)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Parallel_ForEach_OrderedPartitionerKeysNotNormalized"));
- }
-
- return PartitionerForEachWorker<TSource, TLocal>(source, parallelOptions, null, null, null, null, body, localInit, localFinally);
- }
-
- // Main worker method for Parallel.ForEach() calls w/ Partitioners.
- private static ParallelLoopResult PartitionerForEachWorker<TSource, TLocal>(
- Partitioner<TSource> source, // Might be OrderablePartitioner
- ParallelOptions parallelOptions,
- Action<TSource> simpleBody,
- Action<TSource, ParallelLoopState> bodyWithState,
- Action<TSource, ParallelLoopState, long> bodyWithStateAndIndex,
- Func<TSource, ParallelLoopState, TLocal, TLocal> bodyWithStateAndLocal,
- Func<TSource, ParallelLoopState, long, TLocal, TLocal> bodyWithEverything,
- Func<TLocal> localInit,
- Action<TLocal> localFinally)
- {
- Debug.Assert(((simpleBody == null ? 0 : 1) + (bodyWithState == null ? 0 : 1) +
- (bodyWithStateAndIndex == null ? 0 : 1) + (bodyWithStateAndLocal == null ? 0 : 1) + (bodyWithEverything == null ? 0 : 1)) == 1,
- "PartitionForEach: expected exactly one body function to be supplied");
- Debug.Assert((bodyWithStateAndLocal != null) || (bodyWithEverything != null) || (localInit == null && localFinally == null),
- "PartitionForEach: thread local functions should only be supplied for loops w/ thread local bodies");
-
- OrderablePartitioner<TSource> orderedSource = source as OrderablePartitioner<TSource>;
- Debug.Assert((orderedSource != null) || (bodyWithStateAndIndex == null && bodyWithEverything == null),
- "PartitionForEach: bodies with indices are only allowable for OrderablePartitioner");
-
- if (!source.SupportsDynamicPartitions)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Parallel_ForEach_PartitionerNotDynamic"));
- }
-
- // Before getting started, do a quick peek to see if we have been canceled already
- if (parallelOptions.CancellationToken.IsCancellationRequested)
- {
- throw new OperationCanceledException(parallelOptions.CancellationToken);
- }
-
- // ETW event for Parallel For begin
- int forkJoinContextID = 0;
- Task callerTask = null;
- if (TplEtwProvider.Log.IsEnabled())
- {
- forkJoinContextID = Interlocked.Increment(ref s_forkJoinContextID);
- callerTask = Task.InternalCurrent;
- TplEtwProvider.Log.ParallelLoopBegin((callerTask != null ? callerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (callerTask != null ? callerTask.Id : 0),
- forkJoinContextID, TplEtwProvider.ForkJoinOperationType.ParallelForEach,
- 0, 0);
- }
-
- // For all loops we need a shared flag even though we don't have a body with state,
- // because the shared flag contains the exceptional bool, which triggers other workers
- // to exit their loops if one worker catches an exception
- ParallelLoopStateFlags64 sharedPStateFlags = new ParallelLoopStateFlags64();
-
- // Instantiate our result. Specifics will be filled in later.
- ParallelLoopResult result = new ParallelLoopResult();
-
- // Keep track of any cancellations
- OperationCanceledException oce = null;
-
- CancellationTokenRegistration ctr = new CancellationTokenRegistration();
-
- // if cancellation is enabled, we need to register a callback to stop the loop when it gets signaled
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr = parallelOptions.CancellationToken.InternalRegisterWithoutEC((o) =>
- {
- // Cause processing to stop
- sharedPStateFlags.Cancel();
- // Record our cancellation
- oce = new OperationCanceledException(parallelOptions.CancellationToken);
- }, null);
- }
-
- // Get our dynamic partitioner -- depends on whether source is castable to OrderablePartitioner
- // Also, do some error checking.
- IEnumerable<TSource> partitionerSource = null;
- IEnumerable<KeyValuePair<long, TSource>> orderablePartitionerSource = null;
- if (orderedSource != null)
- {
- orderablePartitionerSource = orderedSource.GetOrderableDynamicPartitions();
- if (orderablePartitionerSource == null)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Parallel_ForEach_PartitionerReturnedNull"));
- }
- }
- else
- {
- partitionerSource = source.GetDynamicPartitions();
- if (partitionerSource == null)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Parallel_ForEach_PartitionerReturnedNull"));
- }
- }
-
- ParallelForReplicatingTask rootTask = null;
-
- // This is the action that will be run by each replicable task.
- Action partitionAction = delegate
- {
- Task currentWorkerTask = Task.InternalCurrent;
-
- // ETW event for ParallelForEach Worker Fork
- if (TplEtwProvider.Log.IsEnabled())
- {
- TplEtwProvider.Log.ParallelFork((currentWorkerTask != null ? currentWorkerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (currentWorkerTask != null ? currentWorkerTask.Id : 0),
- forkJoinContextID);
- }
-
- TLocal localValue = default(TLocal);
- bool bLocalValueInitialized = false; // Tracks whether localInit ran without exceptions, so that we can skip localFinally if it wasn't
- IDisposable myPartitionToDispose = null;
-
- try
- {
- // Create a new state object that references the shared "stopped" and "exceptional" flags.
- // If needed, it will contain a new instance of thread-local state by invoking the selector.
- ParallelLoopState64 state = null;
-
- if (bodyWithState != null || bodyWithStateAndIndex != null)
- {
- state = new ParallelLoopState64(sharedPStateFlags);
- }
- else if (bodyWithStateAndLocal != null || bodyWithEverything != null)
- {
- state = new ParallelLoopState64(sharedPStateFlags);
- // If a thread-local selector was supplied, invoke it. Otherwise, stick with the default.
- if (localInit != null)
- {
- localValue = localInit();
- bLocalValueInitialized = true;
- }
- }
-
-
- bool bIsRootTask = (rootTask == currentWorkerTask);
-
- // initialize a loop timer which will help us decide whether we should exit early
- LoopTimer loopTimer = new LoopTimer(rootTask.ActiveChildCount);
-
- if (orderedSource != null)
- {
- // Use this path for OrderablePartitioner
-
-
- // first check if there's saved state from a previous replica that we might be replacing.
- // the only state to be passed down in such a transition is the enumerator
- IEnumerator<KeyValuePair<long, TSource>> myPartition = currentWorkerTask.SavedStateFromPreviousReplica as IEnumerator<KeyValuePair<long, TSource>>;
- if (myPartition == null)
- {
- // apparently we're a brand new replica, get a fresh enumerator from the partitioner
- myPartition = orderablePartitionerSource.GetEnumerator();
- if (myPartition == null)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Parallel_ForEach_NullEnumerator"));
- }
- }
- myPartitionToDispose = myPartition;
-
- while (myPartition.MoveNext())
- {
- KeyValuePair<long, TSource> kvp = myPartition.Current;
- long index = kvp.Key;
- TSource value = kvp.Value;
-
- // Update our iteration index
- if (state != null) state.CurrentIteration = index;
-
- if (simpleBody != null)
- simpleBody(value);
- else if (bodyWithState != null)
- bodyWithState(value, state);
- else if (bodyWithStateAndIndex != null)
- bodyWithStateAndIndex(value, state, index);
- else if (bodyWithStateAndLocal != null)
- localValue = bodyWithStateAndLocal(value, state, localValue);
- else
- localValue = bodyWithEverything(value, state, index, localValue);
-
- if (sharedPStateFlags.ShouldExitLoop(index)) break;
-
- // Cooperative multitasking workaround for AppDomain fairness.
- // Check if allowed loop time is exceeded, if so save current state and return. The self replicating task logic
- // will detect this, and queue up a replacement task. Note that we don't do this on the root task.
- if (!bIsRootTask && loopTimer.LimitExceeded())
- {
- currentWorkerTask.SavedStateForNextReplica = myPartition;
- myPartitionToDispose = null;
- break;
- }
- }
-
- }
- else
- {
- // Use this path for Partitioner that is not OrderablePartitioner
-
- // first check if there's saved state from a previous replica that we might be replacing.
- // the only state to be passed down in such a transition is the enumerator
- IEnumerator<TSource> myPartition = currentWorkerTask.SavedStateFromPreviousReplica as IEnumerator<TSource>;
- if (myPartition == null)
- {
- // apparently we're a brand new replica, get a fresh enumerator from the partitioner
- myPartition = partitionerSource.GetEnumerator();
- if (myPartition == null)
- {
- throw new InvalidOperationException(Environment.GetResourceString("Parallel_ForEach_NullEnumerator"));
- }
- }
- myPartitionToDispose = myPartition;
-
- // I'm not going to try to maintain this
- if (state != null)
- state.CurrentIteration = 0;
-
- while (myPartition.MoveNext())
- {
- TSource t = myPartition.Current;
-
- if (simpleBody != null)
- simpleBody(t);
- else if (bodyWithState != null)
- bodyWithState(t, state);
- else if (bodyWithStateAndLocal != null)
- localValue = bodyWithStateAndLocal(t, state, localValue);
- else
- Debug.Assert(false, "PartitionerForEach: illegal body type in Partitioner handler");
-
-
- // Any break, stop or exception causes us to halt
- // We don't have the global indexing information to discriminate whether or not
- // we are before or after a break point.
- if (sharedPStateFlags.LoopStateFlags != ParallelLoopStateFlags.PLS_NONE)
- break;
-
- // Cooperative multitasking workaround for AppDomain fairness.
- // Check if allowed loop time is exceeded, if so save current state and return. The self replicating task logic
- // will detect this, and queue up a replacement task. Note that we don't do this on the root task.
- if (!bIsRootTask && loopTimer.LimitExceeded())
- {
- currentWorkerTask.SavedStateForNextReplica = myPartition;
- myPartitionToDispose = null;
- break;
- }
- }
- }
- }
- catch
- {
- // Inform other tasks of the exception, then rethrow
- sharedPStateFlags.SetExceptional();
- throw;
- }
- finally
- {
- if (localFinally != null && bLocalValueInitialized)
- {
- localFinally(localValue);
- }
-
- if (myPartitionToDispose != null)
- {
- myPartitionToDispose.Dispose();
- }
-
- // ETW event for ParallelFor Worker Join
- if (TplEtwProvider.Log.IsEnabled())
- {
- TplEtwProvider.Log.ParallelJoin((currentWorkerTask != null ? currentWorkerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (currentWorkerTask != null ? currentWorkerTask.Id : 0),
- forkJoinContextID);
- }
- }
- };
-
- try
- {
- // Create and start the self-replicating task.
- // This needs to be in try-block because it can throw in BuggyScheduler.MaxConcurrencyLevel
- rootTask = new ParallelForReplicatingTask(parallelOptions, partitionAction, TaskCreationOptions.None,
- InternalTaskOptions.SelfReplicating);
-
- // And process it's completion...
- // Moved inside try{} block because faulty scheduler may throw here.
- rootTask.RunSynchronously(parallelOptions.EffectiveTaskScheduler);
-
- rootTask.Wait();
-
- // If we made a cancellation registration, we need to clean it up now before observing the OCE
- // Otherwise we could be caught in the middle of a callback, and observe PLS_STOPPED, but oce = null
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr.Dispose();
- }
-
- // If we got through that with no exceptions, and we were canceled, then
- // throw our cancellation exception
- if (oce != null) throw oce;
- }
- catch (AggregateException aggExp)
- {
- // if we made a cancellation registration, and rootTask.Wait threw, we need to clean it up here
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr.Dispose();
- }
-
- // see if we can combine it into a single OCE. If not propagate the original exception
- ThrowIfReducableToSingleOCE(aggExp.InnerExceptions, parallelOptions.CancellationToken);
- throw;
- }
- catch (TaskSchedulerException)
- {
- // if we made a cancellation registration, and either we threw an exception constructing rootTask or
- // rootTask.RunSynchronously threw, we need to clean it up here.
- if (parallelOptions.CancellationToken.CanBeCanceled)
- {
- ctr.Dispose();
- }
- throw;
- }
- finally
- {
- int sb_status = sharedPStateFlags.LoopStateFlags;
- result.m_completed = (sb_status == ParallelLoopStateFlags.PLS_NONE);
- if ((sb_status & ParallelLoopStateFlags.PLS_BROKEN) != 0)
- {
- result.m_lowestBreakIteration = sharedPStateFlags.LowestBreakIteration;
- }
-
- if ((rootTask != null) && rootTask.IsCompleted) rootTask.Dispose();
-
- //dispose the partitioner source if it implements IDisposable
- IDisposable d = null;
- if (orderablePartitionerSource != null)
- {
- d = orderablePartitionerSource as IDisposable;
- }
- else
- {
- d = partitionerSource as IDisposable;
- }
-
- if (d != null)
- {
- d.Dispose();
- }
-
- // ETW event for Parallel For End
- if (TplEtwProvider.Log.IsEnabled())
- {
- TplEtwProvider.Log.ParallelLoopEnd((callerTask != null ? callerTask.m_taskScheduler.Id : TaskScheduler.Current.Id), (callerTask != null ? callerTask.Id : 0),
- forkJoinContextID, 0);
- }
- }
-
- return result;
- }
-
- /// <summary>
- /// Internal utility function that implements the OCE filtering behavior for all Parallel.* APIs.
- /// Throws a single OperationCancelledException object with the token if the Exception collection only contains
- /// OperationCancelledExceptions with the given CancellationToken.
- ///
- /// </summary>
- /// <param name="excCollection"> The exception collection to filter</param>
- /// <param name="ct"> The CancellationToken expected on all inner exceptions</param>
- /// <returns></returns>
- internal static void ThrowIfReducableToSingleOCE(IEnumerable<Exception> excCollection, CancellationToken ct)
- {
- bool bCollectionNotZeroLength = false;
- if (ct.IsCancellationRequested)
- {
- foreach (Exception e in excCollection)
- {
- bCollectionNotZeroLength = true;
- OperationCanceledException oce = e as OperationCanceledException;
- if (oce == null || oce.CancellationToken != ct)
- {
- // mismatch found
- return;
- }
- }
-
- // all exceptions are OCEs with this token, let's throw it
- if (bCollectionNotZeroLength) throw new OperationCanceledException(ct);
- }
- }
-
- internal struct LoopTimer
- {
- public LoopTimer(int nWorkerTaskIndex)
- {
- // This logic ensures that we have a diversity of timeouts across worker tasks (100, 150, 200, 250, 100, etc)
- // Otherwise all worker will try to timeout at precisely the same point, which is bad if the work is just about to finish
- int timeOut = s_BaseNotifyPeriodMS + (nWorkerTaskIndex % PlatformHelper.ProcessorCount) * s_NotifyPeriodIncrementMS;
-
- m_timeLimit = Environment.TickCount + timeOut;
- }
-
- public bool LimitExceeded()
- {
- Debug.Assert(m_timeLimit != 0, "Probably the default initializer for LoopTimer was used somewhere");
-
- // comparing against the next expected time saves an addition operation here
- // Also we omit the comparison for wrap around here. The only side effect is one extra early yield every 38 days.
- return (Environment.TickCount > m_timeLimit);
- }
-
- const int s_BaseNotifyPeriodMS = 100;
- const int s_NotifyPeriodIncrementMS = 50;
-
- private int m_timeLimit;
- }
-
- }
-
-}
diff --git a/src/mscorlib/src/System/Threading/Tasks/ParallelLoopState.cs b/src/mscorlib/src/System/Threading/Tasks/ParallelLoopState.cs
deleted file mode 100644
index 6a62cf8977..0000000000
--- a/src/mscorlib/src/System/Threading/Tasks/ParallelLoopState.cs
+++ /dev/null
@@ -1,641 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
-//
-// ParallelState.cs
-//
-//
-// A non-generic and generic parallel state class, used by the Parallel helper class
-// for parallel loop management.
-//
-// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-using System.Diagnostics;
-using System.Security.Permissions;
-using System.Diagnostics.Contracts;
-
-// Prevents compiler warnings/errors regarding the use of ref params in Interlocked methods
-#pragma warning disable 0420
-
-namespace System.Threading.Tasks
-{
-
- /// <summary>
- /// Enables iterations of <see cref="T:System.Threading.Tasks.Parallel"/> loops to interact with
- /// other iterations.
- /// </summary>
- [DebuggerDisplay("ShouldExitCurrentIteration = {ShouldExitCurrentIteration}")]
- public class ParallelLoopState
- {
- // Derived classes will track a ParallelStateFlags32 or ParallelStateFlags64.
- // So this is slightly redundant, but it enables us to implement some
- // methods in this base class.
- private ParallelLoopStateFlags m_flagsBase;
-
- internal ParallelLoopState(ParallelLoopStateFlags fbase)
- {
- m_flagsBase = fbase;
- }
-
- /// <summary>
- /// Internal/virtual support for ShouldExitCurrentIteration.
- /// </summary>
- internal virtual bool InternalShouldExitCurrentIteration
- {
- get
- {
- Debug.Assert(false);
- throw new NotSupportedException(
- Environment.GetResourceString("ParallelState_NotSupportedException_UnsupportedMethod"));
- }
- }
-
- /// <summary>
- /// Gets whether the current iteration of the loop should exit based
- /// on requests made by this or other iterations.
- /// </summary>
- /// <remarks>
- /// When an iteration of a loop calls <see cref="Break()"/> or <see cref="Stop()"/>, or
- /// when one throws an exception, or when the loop is canceled, the <see cref="Parallel"/> class will proactively
- /// attempt to prohibit additional iterations of the loop from starting execution.
- /// However, there may be cases where it is unable to prevent additional iterations from starting.
- /// It may also be the case that a long-running iteration has already begun execution. In such
- /// cases, iterations may explicitly check the <see cref="ShouldExitCurrentIteration"/> property and
- /// cease execution if the property returns true.
- /// </remarks>
- public bool ShouldExitCurrentIteration
- {
- get
- {
- return InternalShouldExitCurrentIteration;
- }
- }
-
- /// <summary>
- /// Gets whether any iteration of the loop has called <see cref="Stop()"/>.
- /// </summary>
- public bool IsStopped
- {
- get
- {
- return ((m_flagsBase.LoopStateFlags & ParallelLoopStateFlags.PLS_STOPPED) != 0);
- }
- }
-
- /// <summary>
- /// Gets whether any iteration of the loop has thrown an exception that went unhandled by that
- /// iteration.
- /// </summary>
- public bool IsExceptional
- {
- get
- {
- return ((m_flagsBase.LoopStateFlags & ParallelLoopStateFlags.PLS_EXCEPTIONAL) != 0);
- }
- }
-
- /// <summary>
- /// Internal/virtual support for LowestBreakIteration.
- /// </summary>
- internal virtual long? InternalLowestBreakIteration
- {
- get
- {
- Debug.Assert(false);
- throw new NotSupportedException(
- Environment.GetResourceString("ParallelState_NotSupportedException_UnsupportedMethod"));
- }
- }
-
- /// <summary>
- /// Gets the lowest iteration of the loop from which <see cref="Break()"/> was called.
- /// </summary>
- /// <remarks>
- /// If no iteration of the loop called <see cref="Break()"/>, this property will return null.
- /// </remarks>
- public long? LowestBreakIteration
- {
- get
- {
- return InternalLowestBreakIteration;
- }
- }
-
- /// <summary>
- /// Communicates that the <see cref="Parallel"/> loop should cease execution at the system's earliest
- /// convenience.
- /// </summary>
- /// <exception cref="T:System.InvalidOperationException">
- /// The <see cref="Break()"/> method was previously called. <see cref="Break()"/> and <see
- /// cref="Stop()"/> may not be used in combination by iterations of the same loop.
- /// </exception>
- /// <remarks>
- /// <para>
- /// <see cref="Stop()"/> may be used to communicate to the loop that no other iterations need be run.
- /// For long-running iterations that may already be executing, <see cref="Stop()"/> causes <see cref="IsStopped"/>
- /// to return true for all other iterations of the loop, such that another iteration may check <see
- /// cref="IsStopped"/> and exit early if it's observed to be true.
- /// </para>
- /// <para>
- /// <see cref="Stop()"/> is typically employed in search-based algorithms, where once a result is found,
- /// no other iterations need be executed.
- /// </para>
- /// </remarks>
- public void Stop()
- {
- m_flagsBase.Stop();
- }
-
- // Internal/virtual support for Break().
- internal virtual void InternalBreak()
- {
- Debug.Assert(false);
- throw new NotSupportedException(
- Environment.GetResourceString("ParallelState_NotSupportedException_UnsupportedMethod"));
- }
-
- /// <summary>
- /// Communicates that the <see cref="Parallel"/> loop should cease execution at the system's earliest
- /// convenience of iterations beyond the current iteration.
- /// </summary>
- /// <exception cref="T:System.InvalidOperationException">
- /// The <see cref="Stop()"/> method was previously called. <see cref="Break()"/> and <see cref="Stop()"/>
- /// may not be used in combination by iterations of the same loop.
- /// </exception>
- /// <remarks>
- /// <para>
- /// <see cref="Break()"/> may be used to communicate to the loop that no other iterations after the
- /// current iteration need be run. For example, if <see cref="Break()"/> is called from the 100th
- /// iteration of a for loop iterating in parallel from 0 to 1000, all iterations less than 100 should
- /// still be run, but the iterations from 101 through to 1000 are not necessary.
- /// </para>
- /// <para>
- /// For long-running iterations that may already be executing, <see cref="Break()"/> causes <see
- /// cref="LowestBreakIteration"/>
- /// to be set to the current iteration's index if the current index is less than the current value of
- /// <see cref="LowestBreakIteration"/>.
- /// </para>
- /// <para>
- /// <see cref="Break()"/> is typically employed in search-based algorithms where an ordering is
- /// present in the data source.
- /// </para>
- /// </remarks>
- public void Break()
- {
- InternalBreak();
- }
-
- // Helper method to avoid repeating Break() logic between ParallelState32 and ParallelState32<TLocal>
- internal static void Break(int iteration, ParallelLoopStateFlags32 pflags)
- {
- int oldValue = ParallelLoopStateFlags.PLS_NONE;
-
- // Attempt to change state from "not stopped or broken or canceled or exceptional" to "broken".
- if (!pflags.AtomicLoopStateUpdate(ParallelLoopStateFlags.PLS_BROKEN,
- ParallelLoopStateFlags.PLS_STOPPED | ParallelLoopStateFlags.PLS_EXCEPTIONAL | ParallelLoopStateFlags.PLS_CANCELED,
- ref oldValue))
- {
-
- // If we were already stopped, we have a problem
- if ((oldValue & ParallelLoopStateFlags.PLS_STOPPED) != 0)
- {
- throw new InvalidOperationException(
- Environment.GetResourceString("ParallelState_Break_InvalidOperationException_BreakAfterStop"));
- }
- else
- {
- // Apparently we previously got cancelled or became exceptional. No action necessary
- return;
- }
- }
-
- // replace shared LowestBreakIteration with CurrentIteration, but only if CurrentIteration
- // is less than LowestBreakIteration.
- int oldLBI = pflags.m_lowestBreakIteration;
- if (iteration < oldLBI)
- {
- SpinWait wait = new SpinWait();
- while (Interlocked.CompareExchange(
- ref pflags.m_lowestBreakIteration,
- iteration,
- oldLBI) != oldLBI)
- {
- wait.SpinOnce();
- oldLBI = pflags.m_lowestBreakIteration;
- if (iteration > oldLBI) break;
- }
- }
-
- }
-
- // Helper method to avoid repeating Break() logic between ParallelState64 and ParallelState64<TLocal>
- internal static void Break(long iteration, ParallelLoopStateFlags64 pflags)
- {
- int oldValue = ParallelLoopStateFlags.PLS_NONE;
-
- // Attempt to change state from "not stopped or broken or canceled or exceptional" to "broken".
- if (!pflags.AtomicLoopStateUpdate(ParallelLoopStateFlags.PLS_BROKEN,
- ParallelLoopStateFlags.PLS_STOPPED | ParallelLoopStateFlags.PLS_EXCEPTIONAL | ParallelLoopStateFlags.PLS_CANCELED,
- ref oldValue))
- {
-
- // If we were already stopped, we have a problem
- if ((oldValue & ParallelLoopStateFlags.PLS_STOPPED) != 0)
- {
- throw new InvalidOperationException(
- Environment.GetResourceString("ParallelState_Break_InvalidOperationException_BreakAfterStop"));
- }
- else
- {
- // Apparently we previously got cancelled or became exceptional. No action necessary
- return;
- }
- }
-
- // replace shared LowestBreakIteration with CurrentIteration, but only if CurrentIteration
- // is less than LowestBreakIteration.
- long oldLBI = pflags.LowestBreakIteration;
- if (iteration < oldLBI)
- {
- SpinWait wait = new SpinWait();
- while (Interlocked.CompareExchange(
- ref pflags.m_lowestBreakIteration,
- iteration,
- oldLBI) != oldLBI)
- {
- wait.SpinOnce();
- oldLBI = pflags.LowestBreakIteration;
- if (iteration > oldLBI) break;
- }
- }
-
- }
- }
-
- internal class ParallelLoopState32 : ParallelLoopState
- {
- private ParallelLoopStateFlags32 m_sharedParallelStateFlags;
- private int m_currentIteration = 0;
-
- /// <summary>
- /// Internal constructor to ensure an instance isn't created by users.
- /// </summary>
- /// <param name="sharedParallelStateFlags">A flag shared among all threads participating
- /// in the execution of a certain loop.</param>
- internal ParallelLoopState32(ParallelLoopStateFlags32 sharedParallelStateFlags)
- : base(sharedParallelStateFlags)
- {
- m_sharedParallelStateFlags = sharedParallelStateFlags;
- }
-
- /// <summary>
- /// Tracks the current loop iteration for the owning task.
- /// This is used to compute whether or not the task should
- /// terminate early due to a Break() call.
- /// </summary>
- internal int CurrentIteration {
- get { return m_currentIteration; }
- set { m_currentIteration = value; }
- }
-
- /// <summary>
- /// Returns true if we should be exiting from the current iteration
- /// due to Stop(), Break() or exception.
- /// </summary>
- internal override bool InternalShouldExitCurrentIteration
- {
- get { return m_sharedParallelStateFlags.ShouldExitLoop(CurrentIteration); }
- }
-
- /// <summary>
- /// Returns the lowest iteration at which Break() has been called, or
- /// null if Break() has not yet been called.
- /// </summary>
- internal override long? InternalLowestBreakIteration
- {
- get {return m_sharedParallelStateFlags.NullableLowestBreakIteration; }
- }
-
- /// <summary>
- /// Communicates that parallel tasks should stop when they reach a specified iteration element.
- /// (which is CurrentIteration of the caller).
- /// </summary>
- /// <exception cref="T:System.InvalidOperationException">Break() called after Stop().</exception>
- /// <remarks>
- /// This is shared with all other concurrent threads in the system which are participating in the
- /// loop's execution. After calling Break(), no additional iterations will be executed on
- /// the current thread, and other worker threads will execute once they get beyond the calling iteration.
- /// </remarks>
- internal override void InternalBreak()
- {
- ParallelLoopState.Break(CurrentIteration, m_sharedParallelStateFlags);
- }
- }
-
- /// <summary>
- /// Allows independent iterations of a parallel loop to interact with other iterations.
- /// </summary>
- internal class ParallelLoopState64 : ParallelLoopState
- {
- private ParallelLoopStateFlags64 m_sharedParallelStateFlags;
- private long m_currentIteration = 0;
-
- /// <summary>
- /// Internal constructor to ensure an instance isn't created by users.
- /// </summary>
- /// <param name="sharedParallelStateFlags">A flag shared among all threads participating
- /// in the execution of a certain loop.</param>
- internal ParallelLoopState64(ParallelLoopStateFlags64 sharedParallelStateFlags)
- : base(sharedParallelStateFlags)
- {
- m_sharedParallelStateFlags = sharedParallelStateFlags;
- }
-
- /// <summary>
- /// Tracks the current loop iteration for the owning task.
- /// This is used to compute whether or not the task should
- /// terminate early due to a Break() call.
- /// </summary>
- internal long CurrentIteration
- {
- // No interlocks needed, because this value is only accessed in a single thread.
- get {return m_currentIteration;}
- set {m_currentIteration = value; }
- }
-
- /// <summary>
- /// Returns true if we should be exiting from the current iteration
- /// due to Stop(), Break() or exception.
- /// </summary>
- internal override bool InternalShouldExitCurrentIteration
- {
- get { return m_sharedParallelStateFlags.ShouldExitLoop(CurrentIteration); }
- }
-
- /// <summary>
- /// Returns the lowest iteration at which Break() has been called, or
- /// null if Break() has not yet been called.
- /// </summary>
- internal override long? InternalLowestBreakIteration
- {
- // We don't need to worry about torn read/write here because
- // ParallelStateFlags64.LowestBreakIteration property is protected
- // by an Interlocked.Read().
- get { return m_sharedParallelStateFlags.NullableLowestBreakIteration; }
- }
-
- /// <summary>
- /// Communicates that parallel tasks should stop when they reach a specified iteration element.
- /// (which is CurrentIteration of the caller).
- /// </summary>
- /// <exception cref="T:System.InvalidOperationException">Break() called after Stop().</exception>
- /// <remarks>
- /// Atomically sets shared StoppedBroken flag to BROKEN, then atomically sets shared
- /// LowestBreakIteration to CurrentIteration, but only if CurrentIteration is less than
- /// LowestBreakIteration.
- /// </remarks>
- internal override void InternalBreak()
- {
- ParallelLoopState.Break(CurrentIteration, m_sharedParallelStateFlags);
- }
-
- }
-
- /// <summary>
- /// State information that is common between ParallelStateFlags class
- /// and ParallelStateFlags64 class.
- /// </summary>
- internal class ParallelLoopStateFlags
- {
- internal static int PLS_NONE;
- internal static int PLS_EXCEPTIONAL = 1;
- internal static int PLS_BROKEN = 2;
- internal static int PLS_STOPPED = 4;
- internal static int PLS_CANCELED = 8;
-
- private volatile int m_LoopStateFlags = PLS_NONE;
-
- internal int LoopStateFlags
- {
- get { return m_LoopStateFlags; }
- }
-
- internal bool AtomicLoopStateUpdate(int newState, int illegalStates)
- {
- int oldState = 0;
- return AtomicLoopStateUpdate(newState, illegalStates, ref oldState);
- }
-
- internal bool AtomicLoopStateUpdate(int newState, int illegalStates, ref int oldState)
- {
- SpinWait sw = new SpinWait();
-
- do
- {
- oldState = m_LoopStateFlags;
- if ((oldState & illegalStates) != 0) return false;
- if (Interlocked.CompareExchange(ref m_LoopStateFlags, oldState | newState, oldState) == oldState)
- {
- return true;
- }
- sw.SpinOnce();
- } while (true);
-
- }
-
- internal void SetExceptional()
- {
- // we can set the exceptional flag regardless of the state of other bits.
- AtomicLoopStateUpdate(PLS_EXCEPTIONAL, PLS_NONE);
- }
-
- internal void Stop()
- {
- // disallow setting of PLS_STOPPED bit only if PLS_BROKEN was already set
- if (!AtomicLoopStateUpdate(PLS_STOPPED, PLS_BROKEN))
- {
- throw new InvalidOperationException(
- Environment.GetResourceString("ParallelState_Stop_InvalidOperationException_StopAfterBreak"));
- }
- }
-
- // Returns true if StoppedBroken is updated to PLS_CANCELED.
- internal bool Cancel()
- {
- // we can set the canceled flag regardless of the state of other bits.
- return (AtomicLoopStateUpdate(PLS_CANCELED, PLS_NONE));
- }
- }
-
- /// <summary>
- /// An internal class used to share accounting information in 32-bit versions
- /// of For()/ForEach() loops.
- /// </summary>
- internal class ParallelLoopStateFlags32 : ParallelLoopStateFlags
- {
- // Records the lowest iteration at which a Break() has been called,
- // or Int32.MaxValue if no break has been called. Used directly
- // by Break().
- internal volatile int m_lowestBreakIteration = Int32.MaxValue;
-
- // Not strictly necessary, but maintains consistency with ParallelStateFlags64
- internal int LowestBreakIteration
- {
- get { return m_lowestBreakIteration; }
- }
-
- // Does some processing to convert m_lowestBreakIteration to a long?.
- internal long? NullableLowestBreakIteration
- {
- get
- {
- if (m_lowestBreakIteration == Int32.MaxValue) return null;
- else
- {
- // protect against torn read of 64-bit value
- long rval = m_lowestBreakIteration;
- if (IntPtr.Size >= 8) return rval;
- else return Interlocked.Read(ref rval);
- }
- }
- }
-
-
- /// <summary>
- /// Lets the caller know whether or not to prematurely exit the For/ForEach loop.
- /// If this returns true, then exit the loop. Otherwise, keep going.
- /// </summary>
- /// <param name="CallerIteration">The caller's current iteration point
- /// in the loop.</param>
- /// <remarks>
- /// The loop should exit on any one of the following conditions:
- /// (1) Stop() has been called by one or more tasks.
- /// (2) An exception has been raised by one or more tasks.
- /// (3) Break() has been called by one or more tasks, and
- /// CallerIteration exceeds the (lowest) iteration at which
- /// Break() was called.
- /// (4) The loop was canceled.
- /// </remarks>
- internal bool ShouldExitLoop(int CallerIteration)
- {
- int flags = LoopStateFlags;
- return (flags != PLS_NONE && (
- ((flags & (PLS_EXCEPTIONAL | PLS_STOPPED | PLS_CANCELED)) != 0) ||
- (((flags & PLS_BROKEN) != 0) && (CallerIteration > LowestBreakIteration))));
- }
-
- // This lighter version of ShouldExitLoop will be used when the body type doesn't contain a state.
- // Since simpler bodies cannot stop or break, we can safely skip checks for those flags here.
- internal bool ShouldExitLoop()
- {
- int flags = LoopStateFlags;
- return ((flags != PLS_NONE) && ((flags & (PLS_EXCEPTIONAL | PLS_CANCELED)) != 0));
- }
- }
-
- /// <summary>
- /// An internal class used to share accounting information in 64-bit versions
- /// of For()/ForEach() loops.
- /// </summary>
- internal class ParallelLoopStateFlags64 : ParallelLoopStateFlags
- {
- // Records the lowest iteration at which a Break() has been called,
- // or Int64.MaxValue if no break has been called. Used directly
- // by Break().
- internal long m_lowestBreakIteration = Int64.MaxValue;
-
- // Performs a conditionally interlocked read of m_lowestBreakIteration.
- internal long LowestBreakIteration
- {
- get
- {
- if (IntPtr.Size >= 8) return m_lowestBreakIteration;
- else return Interlocked.Read(ref m_lowestBreakIteration);
- }
- }
-
- // Does some processing to convert m_lowestBreakIteration to a long?.
- internal long? NullableLowestBreakIteration
- {
- get
- {
- if (m_lowestBreakIteration == Int64.MaxValue) return null;
- else
- {
- if (IntPtr.Size >= 8) return m_lowestBreakIteration;
- else return Interlocked.Read(ref m_lowestBreakIteration);
- }
- }
- }
-
- /// <summary>
- /// Lets the caller know whether or not to prematurely exit the For/ForEach loop.
- /// If this returns true, then exit the loop. Otherwise, keep going.
- /// </summary>
- /// <param name="CallerIteration">The caller's current iteration point
- /// in the loop.</param>
- /// <remarks>
- /// The loop should exit on any one of the following conditions:
- /// (1) Stop() has been called by one or more tasks.
- /// (2) An exception has been raised by one or more tasks.
- /// (3) Break() has been called by one or more tasks, and
- /// CallerIteration exceeds the (lowest) iteration at which
- /// Break() was called.
- /// (4) The loop has been canceled.
- /// </remarks>
- internal bool ShouldExitLoop(long CallerIteration)
- {
- int flags = LoopStateFlags;
- return (flags != PLS_NONE && (
- ((flags & (PLS_EXCEPTIONAL | PLS_STOPPED | PLS_CANCELED)) != 0) ||
- (((flags & PLS_BROKEN) != 0) && (CallerIteration > LowestBreakIteration))));
- }
-
- // This lighter version of ShouldExitLoop will be used when the body type doesn't contain a state.
- // Since simpler bodies cannot stop or break, we can safely skip checks for those flags here.
- internal bool ShouldExitLoop()
- {
- int flags = LoopStateFlags;
- return ((flags != PLS_NONE) && ((flags & (PLS_EXCEPTIONAL | PLS_CANCELED)) != 0));
- }
- }
-
- /// <summary>
- /// Provides completion status on the execution of a <see cref="Parallel"/> loop.
- /// </summary>
- /// <remarks>
- /// If <see cref="IsCompleted"/> returns true, then the loop ran to completion, such that all iterations
- /// of the loop were executed. If <see cref="IsCompleted"/> returns false and <see
- /// cref="LowestBreakIteration"/> returns null, a call to <see
- /// cref="System.Threading.Tasks.ParallelLoopState.Stop"/> was used to end the loop prematurely. If <see
- /// cref="IsCompleted"/> returns false and <see cref="LowestBreakIteration"/> returns a non-null integral
- /// value, <see cref="System.Threading.Tasks.ParallelLoopState.Break()"/> was used to end the loop prematurely.
- /// </remarks>
- public struct ParallelLoopResult
- {
- internal bool m_completed;
- internal long? m_lowestBreakIteration;
-
- /// <summary>
- /// Gets whether the loop ran to completion, such that all iterations of the loop were executed
- /// and the loop didn't receive a request to end prematurely.
- /// </summary>
- public bool IsCompleted { get { return m_completed; } }
-
- /// <summary>
- /// Gets the index of the lowest iteration from which <see
- /// cref="System.Threading.Tasks.ParallelLoopState.Break()"/>
- /// was called.
- /// </summary>
- /// <remarks>
- /// If <see cref="System.Threading.Tasks.ParallelLoopState.Break()"/> was not employed, this property will
- /// return null.
- /// </remarks>
- public long? LowestBreakIteration { get { return m_lowestBreakIteration; } }
- }
-
-}
-
-#pragma warning restore 0420
diff --git a/src/mscorlib/src/System/Threading/Tasks/ParallelRangeManager.cs b/src/mscorlib/src/System/Threading/Tasks/ParallelRangeManager.cs
deleted file mode 100644
index 49f61a6614..0000000000
--- a/src/mscorlib/src/System/Threading/Tasks/ParallelRangeManager.cs
+++ /dev/null
@@ -1,279 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
-//
-//
-//
-// Implements the algorithm for distributing loop indices to parallel loop workers
-//
-// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-using System;
-using System.Threading;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-
-#pragma warning disable 0420
-
-namespace System.Threading.Tasks
-{
- /// <summary>
- /// Represents an index range
- /// </summary>
- internal struct IndexRange
- {
- // the From and To values for this range. These do not change.
- internal long m_nFromInclusive;
- internal long m_nToExclusive;
-
- // The shared index, stored as the offset from nFromInclusive. Using an offset rather than the actual
- // value saves us from overflows that can happen due to multiple workers racing to increment this.
- // All updates to this field need to be interlocked.
- internal volatile Shared<long> m_nSharedCurrentIndexOffset;
-
- // to be set to 1 by the worker that finishes this range. It's OK to do a non-interlocked write here.
- internal int m_bRangeFinished;
- }
-
-
- /// <summary>
- /// The RangeWorker struct wraps the state needed by a task that services the parallel loop
- /// </summary>
- internal struct RangeWorker
- {
- // reference to the IndexRange array allocated by the range manager
- internal readonly IndexRange[] m_indexRanges;
-
- // index of the current index range that this worker is grabbing chunks from
- internal int m_nCurrentIndexRange;
-
- // the step for this loop. Duplicated here for quick access (rather than jumping to rangemanager)
- internal long m_nStep;
-
- // increment value is the current amount that this worker will use
- // to increment the shared index of the range it's working on
- internal long m_nIncrementValue;
-
- // the increment value is doubled each time this worker finds work, and is capped at this value
- internal readonly long m_nMaxIncrementValue;
-
- /// <summary>
- /// Initializes a RangeWorker struct
- /// </summary>
- internal RangeWorker(IndexRange[] ranges, int nInitialRange, long nStep)
- {
- m_indexRanges = ranges;
- m_nCurrentIndexRange = nInitialRange;
- m_nStep = nStep;
-
- m_nIncrementValue = nStep;
-
- m_nMaxIncrementValue = Parallel.DEFAULT_LOOP_STRIDE * nStep;
- }
-
- /// <summary>
- /// Implements the core work search algorithm that will be used for this range worker.
- /// </summary>
- ///
- /// Usage pattern is:
- /// 1) the thread associated with this rangeworker calls FindNewWork
- /// 2) if we return true, the worker uses the nFromInclusiveLocal and nToExclusiveLocal values
- /// to execute the sequential loop
- /// 3) if we return false it means there is no more work left. It's time to quit.
- ///
- internal bool FindNewWork(out long nFromInclusiveLocal, out long nToExclusiveLocal)
- {
- // since we iterate over index ranges circularly, we will use the
- // count of visited ranges as our exit condition
- int numIndexRangesToVisit = m_indexRanges.Length;
-
- do
- {
- // local snap to save array access bounds checks in places where we only read fields
- IndexRange currentRange = m_indexRanges[m_nCurrentIndexRange];
-
- if (currentRange.m_bRangeFinished == 0)
- {
- if (m_indexRanges[m_nCurrentIndexRange].m_nSharedCurrentIndexOffset == null)
- {
- Interlocked.CompareExchange(ref m_indexRanges[m_nCurrentIndexRange].m_nSharedCurrentIndexOffset, new Shared<long>(0), null);
- }
-
- // this access needs to be on the array slot
- long nMyOffset = Interlocked.Add(ref m_indexRanges[m_nCurrentIndexRange].m_nSharedCurrentIndexOffset.Value,
- m_nIncrementValue) - m_nIncrementValue;
-
- if (currentRange.m_nToExclusive - currentRange.m_nFromInclusive > nMyOffset)
- {
- // we found work
-
- nFromInclusiveLocal = currentRange.m_nFromInclusive + nMyOffset;
- nToExclusiveLocal = nFromInclusiveLocal + m_nIncrementValue;
-
- // Check for going past end of range, or wrapping
- if ( (nToExclusiveLocal > currentRange.m_nToExclusive) || (nToExclusiveLocal < currentRange.m_nFromInclusive) )
- {
- nToExclusiveLocal = currentRange.m_nToExclusive;
- }
-
- // We will double our unit of increment until it reaches the maximum.
- if (m_nIncrementValue < m_nMaxIncrementValue)
- {
- m_nIncrementValue *= 2;
- if (m_nIncrementValue > m_nMaxIncrementValue)
- {
- m_nIncrementValue = m_nMaxIncrementValue;
- }
- }
-
- return true;
- }
- else
- {
- // this index range is completed, mark it so that others can skip it quickly
- Interlocked.Exchange(ref m_indexRanges[m_nCurrentIndexRange].m_bRangeFinished, 1);
- }
- }
-
- // move on to the next index range, in circular order.
- m_nCurrentIndexRange = (m_nCurrentIndexRange + 1) % m_indexRanges.Length;
- numIndexRangesToVisit--;
-
- } while (numIndexRangesToVisit > 0);
- // we've visited all index ranges possible => there's no work remaining
-
- nFromInclusiveLocal = 0;
- nToExclusiveLocal = 0;
-
- return false;
- }
-
-
- /// <summary>
- /// 32 bit integer version of FindNewWork. Assumes the ranges were initialized with 32 bit values.
- /// </summary>
- internal bool FindNewWork32(out int nFromInclusiveLocal32, out int nToExclusiveLocal32)
- {
- long nFromInclusiveLocal;
- long nToExclusiveLocal;
-
- bool bRetVal = FindNewWork(out nFromInclusiveLocal, out nToExclusiveLocal);
-
- Debug.Assert((nFromInclusiveLocal <= Int32.MaxValue) && (nFromInclusiveLocal >= Int32.MinValue) &&
- (nToExclusiveLocal <= Int32.MaxValue) && (nToExclusiveLocal >= Int32.MinValue));
-
- // convert to 32 bit before returning
- nFromInclusiveLocal32 = (int)nFromInclusiveLocal;
- nToExclusiveLocal32 = (int)nToExclusiveLocal;
-
- return bRetVal;
- }
- }
-
-
- /// <summary>
- /// Represents the entire loop operation, keeping track of workers and ranges.
- /// </summary>
- ///
- /// The usage pattern is:
- /// 1) The Parallel loop entry function (ForWorker) creates an instance of this class
- /// 2) Every thread joining to service the parallel loop calls RegisterWorker to grab a
- /// RangeWorker struct to wrap the state it will need to find and execute work,
- /// and they keep interacting with that struct until the end of the loop
- internal class RangeManager
- {
- internal readonly IndexRange[] m_indexRanges;
-
- internal int m_nCurrentIndexRangeToAssign;
- internal long m_nStep;
-
- /// <summary>
- /// Initializes a RangeManager with the given loop parameters, and the desired number of outer ranges
- /// </summary>
- internal RangeManager(long nFromInclusive, long nToExclusive, long nStep, int nNumExpectedWorkers)
- {
- m_nCurrentIndexRangeToAssign = 0;
- m_nStep = nStep;
-
- // Our signed math breaks down w/ nNumExpectedWorkers == 1. So change it to 2.
- if (nNumExpectedWorkers == 1)
- nNumExpectedWorkers = 2;
-
- //
- // calculate the size of each index range
- //
-
- ulong uSpan = (ulong)(nToExclusive - nFromInclusive);
- ulong uRangeSize = uSpan / (ulong) nNumExpectedWorkers; // rough estimate first
-
- uRangeSize -= uRangeSize % (ulong) nStep; // snap to multiples of nStep
- // otherwise index range transitions will derail us from nStep
-
- if (uRangeSize == 0)
- {
- uRangeSize = (ulong) nStep;
- }
-
- //
- // find the actual number of index ranges we will need
- //
- Debug.Assert((uSpan / uRangeSize) < Int32.MaxValue);
-
- int nNumRanges = (int)(uSpan / uRangeSize);
-
- if (uSpan % uRangeSize != 0)
- {
- nNumRanges++;
- }
-
-
- // Convert to signed so the rest of the logic works.
- // Should be fine so long as uRangeSize < Int64.MaxValue, which we guaranteed by setting #workers >= 2.
- long nRangeSize = (long)uRangeSize;
-
- // allocate the array of index ranges
- m_indexRanges = new IndexRange[nNumRanges];
-
- long nCurrentIndex = nFromInclusive;
- for (int i = 0; i < nNumRanges; i++)
- {
- // the fromInclusive of the new index range is always on nCurrentIndex
- m_indexRanges[i].m_nFromInclusive = nCurrentIndex;
- m_indexRanges[i].m_nSharedCurrentIndexOffset = null;
- m_indexRanges[i].m_bRangeFinished = 0;
-
- // now increment it to find the toExclusive value for our range
- nCurrentIndex += nRangeSize;
-
- // detect integer overflow or range overage and snap to nToExclusive
- if (nCurrentIndex < nCurrentIndex - nRangeSize ||
- nCurrentIndex > nToExclusive)
- {
- // this should only happen at the last index
- Debug.Assert(i == nNumRanges - 1);
-
- nCurrentIndex = nToExclusive;
- }
-
- // now that the end point of the new range is calculated, assign it.
- m_indexRanges[i].m_nToExclusive = nCurrentIndex;
- }
- }
-
- /// <summary>
- /// The function that needs to be called by each new worker thread servicing the parallel loop
- /// in order to get a RangeWorker struct that wraps the state for finding and executing indices
- /// </summary>
- internal RangeWorker RegisterNewWorker()
- {
- Debug.Assert(m_indexRanges != null && m_indexRanges.Length != 0);
-
- int nInitialRange = (Interlocked.Increment(ref m_nCurrentIndexRangeToAssign) - 1) % m_indexRanges.Length;
-
- return new RangeWorker(m_indexRanges, nInitialRange, m_nStep);
- }
- }
-}
-#pragma warning restore 0420
diff --git a/src/mscorlib/src/System/Threading/Tasks/ProducerConsumerQueues.cs b/src/mscorlib/src/System/Threading/Tasks/ProducerConsumerQueues.cs
index 6b9dfbbe37..545bf9a5e5 100644
--- a/src/mscorlib/src/System/Threading/Tasks/ProducerConsumerQueues.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/ProducerConsumerQueues.cs
@@ -52,11 +52,6 @@ namespace System.Threading.Tasks
/// <summary>Gets the number of items in the collection.</summary>
/// <remarks>In many implementations, this method will not be thread-safe.</remarks>
int Count { get; }
-
- /// <summary>A thread-safe way to get the number of items in the collection. May synchronize access by locking the provided synchronization object.</summary>
- /// <param name="syncObj">The sync object used to lock</param>
- /// <returns>The collection count</returns>
- int GetCountSafe(object syncObj);
}
/// <summary>
@@ -80,10 +75,6 @@ namespace System.Threading.Tasks
/// <summary>Gets the number of items in the collection.</summary>
int IProducerConsumerQueue<T>.Count { get { return base.Count; } }
-
- /// <summary>A thread-safe way to get the number of items in the collection. May synchronize access by locking the provided synchronization object.</summary>
- /// <remarks>ConcurrentQueue.Count is thread safe, no need to acquire the lock.</remarks>
- int IProducerConsumerQueue<T>.GetCountSafe(object syncObj) { return base.Count; }
}
/// <summary>
@@ -260,143 +251,6 @@ namespace System.Threading.Tasks
return true;
}
- /// <summary>Attempts to peek at an item in the queue.</summary>
- /// <param name="result">The peeked item.</param>
- /// <returns>true if an item could be peeked; otherwise, false.</returns>
- public bool TryPeek(out T result)
- {
- Segment segment = m_head;
- var array = segment.m_array;
- int first = segment.m_state.m_first; // local copy to avoid multiple volatile reads
-
- // Fast path: there's obviously data available in the current segment
- if (first != segment.m_state.m_lastCopy)
- {
- result = array[first];
- return true;
- }
- // Slow path: there may not be data available in the current segment
- else return TryPeekSlow(ref segment, ref array, out result);
- }
-
- /// <summary>Attempts to peek at an item in the queue.</summary>
- /// <param name="array">The array from which the item is peeked.</param>
- /// <param name="segment">The segment from which the item is peeked.</param>
- /// <param name="result">The peeked item.</param>
- /// <returns>true if an item could be peeked; otherwise, false.</returns>
- private bool TryPeekSlow(ref Segment segment, ref T[] array, out T result)
- {
- Contract.Requires(segment != null, "Expected a non-null segment.");
- Contract.Requires(array != null, "Expected a non-null item array.");
-
- if (segment.m_state.m_last != segment.m_state.m_lastCopy)
- {
- segment.m_state.m_lastCopy = segment.m_state.m_last;
- return TryPeek(out result); // will only recur once for this peek operation
- }
-
- if (segment.m_next != null && segment.m_state.m_first == segment.m_state.m_last)
- {
- segment = segment.m_next;
- array = segment.m_array;
- m_head = segment;
- }
-
- var first = segment.m_state.m_first; // local copy to avoid extraneous volatile reads
-
- if (first == segment.m_state.m_last)
- {
- result = default(T);
- return false;
- }
-
- result = array[first];
- return true;
- }
-
- /// <summary>Attempts to dequeue an item from the queue.</summary>
- /// <param name="predicate">The predicate that must return true for the item to be dequeued. If null, all items implicitly return true.</param>
- /// <param name="result">The dequeued item.</param>
- /// <returns>true if an item could be dequeued; otherwise, false.</returns>
- public bool TryDequeueIf(Predicate<T> predicate, out T result)
- {
- Segment segment = m_head;
- var array = segment.m_array;
- int first = segment.m_state.m_first; // local copy to avoid multiple volatile reads
-
- // Fast path: there's obviously data available in the current segment
- if (first != segment.m_state.m_lastCopy)
- {
- result = array[first];
- if (predicate == null || predicate(result))
- {
- array[first] = default(T); // Clear the slot to release the element
- segment.m_state.m_first = (first + 1) & (array.Length - 1);
- return true;
- }
- else
- {
- result = default(T);
- return false;
- }
- }
- // Slow path: there may not be data available in the current segment
- else return TryDequeueIfSlow(predicate, ref segment, ref array, out result);
- }
-
- /// <summary>Attempts to dequeue an item from the queue.</summary>
- /// <param name="predicate">The predicate that must return true for the item to be dequeued. If null, all items implicitly return true.</param>
- /// <param name="array">The array from which the item was dequeued.</param>
- /// <param name="segment">The segment from which the item was dequeued.</param>
- /// <param name="result">The dequeued item.</param>
- /// <returns>true if an item could be dequeued; otherwise, false.</returns>
- private bool TryDequeueIfSlow(Predicate<T> predicate, ref Segment segment, ref T[] array, out T result)
- {
- Contract.Requires(segment != null, "Expected a non-null segment.");
- Contract.Requires(array != null, "Expected a non-null item array.");
-
- if (segment.m_state.m_last != segment.m_state.m_lastCopy)
- {
- segment.m_state.m_lastCopy = segment.m_state.m_last;
- return TryDequeueIf(predicate, out result); // will only recur once for this dequeue operation
- }
-
- if (segment.m_next != null && segment.m_state.m_first == segment.m_state.m_last)
- {
- segment = segment.m_next;
- array = segment.m_array;
- m_head = segment;
- }
-
- var first = segment.m_state.m_first; // local copy to avoid extraneous volatile reads
-
- if (first == segment.m_state.m_last)
- {
- result = default(T);
- return false;
- }
-
- result = array[first];
- if (predicate == null || predicate(result))
- {
- array[first] = default(T); // Clear the slot to release the element
- segment.m_state.m_first = (first + 1) & (segment.m_array.Length - 1);
- segment.m_state.m_lastCopy = segment.m_state.m_last; // Refresh m_lastCopy to ensure that m_first has not passed m_lastCopy
- return true;
- }
- else
- {
- result = default(T);
- return false;
- }
- }
-
- public void Clear()
- {
- T ignored;
- while (TryDequeue(out ignored)) ;
- }
-
/// <summary>Gets whether the collection is currently empty.</summary>
/// <remarks>WARNING: This should not be used concurrently without further vetting.</remarks>
public bool IsEmpty
@@ -452,17 +306,6 @@ namespace System.Threading.Tasks
}
}
- /// <summary>A thread-safe way to get the number of items in the collection. May synchronize access by locking the provided synchronization object.</summary>
- /// <remarks>The Count is not thread safe, so we need to acquire the lock.</remarks>
- int IProducerConsumerQueue<T>.GetCountSafe(object syncObj)
- {
- Debug.Assert(syncObj != null, "The syncObj parameter is null.");
- lock (syncObj)
- {
- return Count;
- }
- }
-
/// <summary>A segment in the queue containing one or more items.</summary>
[StructLayout(LayoutKind.Sequential)]
private sealed class Segment
@@ -520,23 +363,9 @@ namespace System.Threading.Tasks
Contract.Requires(queue != null, "Expected a non-null queue.");
m_queue = queue;
}
-
- /// <summary>Gets the contents of the list.</summary>
- [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
- public T[] Items
- {
- get
- {
- List<T> list = new List<T>();
- foreach (T item in m_queue)
- list.Add(item);
- return list.ToArray();
- }
- }
}
}
-
/// <summary>A placeholder class for common padding constants and eventually routines.</summary>
static class PaddingHelpers
{
diff --git a/src/mscorlib/src/System/Threading/Tasks/TPLETWProvider.cs b/src/mscorlib/src/System/Threading/Tasks/TPLETWProvider.cs
index 325aa91b44..12cc1daa63 100644
--- a/src/mscorlib/src/System/Threading/Tasks/TPLETWProvider.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/TPLETWProvider.cs
@@ -14,7 +14,6 @@ using System;
using System.Collections.Generic;
using System.Text;
using System.Security;
-using System.Security.Permissions;
using System.Runtime.CompilerServices;
namespace System.Threading.Tasks
@@ -61,17 +60,6 @@ namespace System.Threading.Tasks
/// <summary>Prevent external instantiation. All logging should go through the Log instance.</summary>
private TplEtwProvider() { }
- /// <summary>Type of a fork/join operation.</summary>
- public enum ForkJoinOperationType
- {
- /// <summary>Parallel.Invoke.</summary>
- ParallelInvoke=1,
- /// <summary>Parallel.For.</summary>
- ParallelFor=2,
- /// <summary>Parallel.ForEach.</summary>
- ParallelForEach=3
- }
-
/// <summary>Configured behavior of a task wait operation.</summary>
public enum TaskWaitBehavior : int
{
@@ -203,195 +191,6 @@ namespace System.Threading.Tasks
//-----------------------------------------------------------------------------------
//
- // Parallel Events
- //
-
- #region ParallelLoopBegin
- /// <summary>
- /// Denotes the entry point for a Parallel.For or Parallel.ForEach loop
- /// </summary>
- /// <param name="OriginatingTaskSchedulerID">The scheduler ID.</param>
- /// <param name="OriginatingTaskID">The task ID.</param>
- /// <param name="ForkJoinContextID">The loop ID.</param>
- /// <param name="OperationType">The kind of fork/join operation.</param>
- /// <param name="InclusiveFrom">The lower bound of the loop.</param>
- /// <param name="ExclusiveTo">The upper bound of the loop.</param>
- [Event(PARALLELLOOPBEGIN_ID, Level = EventLevel.Informational, ActivityOptions=EventActivityOptions.Recursive,
- Task = TplEtwProvider.Tasks.Loop, Opcode = EventOpcode.Start)]
- public void ParallelLoopBegin(
- int OriginatingTaskSchedulerID, int OriginatingTaskID, // PFX_COMMON_EVENT_HEADER
- int ForkJoinContextID, ForkJoinOperationType OperationType, // PFX_FORKJOIN_COMMON_EVENT_HEADER
- long InclusiveFrom, long ExclusiveTo)
- {
- if (IsEnabled() && IsEnabled(EventLevel.Informational, Keywords.Parallel))
- {
- // There is no explicit WriteEvent() overload matching this event's fields. Therefore calling
- // WriteEvent() would hit the "params" overload, which leads to an object allocation every time
- // this event is fired. To prevent that problem we will call WriteEventCore(), which works with
- // a stack based EventData array populated with the event fields.
- unsafe
- {
- EventData* eventPayload = stackalloc EventData[6];
-
- eventPayload[0].Size = sizeof(int);
- eventPayload[0].DataPointer = ((IntPtr) (&OriginatingTaskSchedulerID));
- eventPayload[1].Size = sizeof(int);
- eventPayload[1].DataPointer = ((IntPtr) (&OriginatingTaskID));
- eventPayload[2].Size = sizeof(int);
- eventPayload[2].DataPointer = ((IntPtr) (&ForkJoinContextID));
- eventPayload[3].Size = sizeof(int);
- eventPayload[3].DataPointer = ((IntPtr) (&OperationType));
- eventPayload[4].Size = sizeof(long);
- eventPayload[4].DataPointer = ((IntPtr) (&InclusiveFrom));
- eventPayload[5].Size = sizeof(long);
- eventPayload[5].DataPointer = ((IntPtr) (&ExclusiveTo));
-
- WriteEventCore(PARALLELLOOPBEGIN_ID, 6, eventPayload);
- }
- }
- }
- #endregion
-
- #region ParallelLoopEnd
- /// <summary>
- /// Denotes the end of a Parallel.For or Parallel.ForEach loop.
- /// </summary>
- /// <param name="OriginatingTaskSchedulerID">The scheduler ID.</param>
- /// <param name="OriginatingTaskID">The task ID.</param>
- /// <param name="ForkJoinContextID">The loop ID.</param>
- /// <param name="TotalIterations">the total number of iterations processed.</param>
- [Event(PARALLELLOOPEND_ID, Level = EventLevel.Informational, Task = TplEtwProvider.Tasks.Loop, Opcode = EventOpcode.Stop)]
- public void ParallelLoopEnd(
- int OriginatingTaskSchedulerID, int OriginatingTaskID, // PFX_COMMON_EVENT_HEADER
- int ForkJoinContextID, long TotalIterations)
- {
- if (IsEnabled() && IsEnabled(EventLevel.Informational, Keywords.Parallel))
- {
- // There is no explicit WriteEvent() overload matching this event's fields.
- // Therefore calling WriteEvent() would hit the "params" overload, which leads to an object allocation every time this event is fired.
- // To prevent that problem we will call WriteEventCore(), which works with a stack based EventData array populated with the event fields
- unsafe
- {
- EventData* eventPayload = stackalloc EventData[4];
-
- eventPayload[0].Size = sizeof(int);
- eventPayload[0].DataPointer = ((IntPtr) (&OriginatingTaskSchedulerID));
- eventPayload[1].Size = sizeof(int);
- eventPayload[1].DataPointer = ((IntPtr) (&OriginatingTaskID));
- eventPayload[2].Size = sizeof(int);
- eventPayload[2].DataPointer = ((IntPtr) (&ForkJoinContextID));
- eventPayload[3].Size = sizeof(long);
- eventPayload[3].DataPointer = ((IntPtr) (&TotalIterations));
-
- WriteEventCore(PARALLELLOOPEND_ID, 4, eventPayload);
- }
- }
- }
- #endregion
-
- #region ParallelInvokeBegin
- /// <summary>Denotes the entry point for a Parallel.Invoke call.</summary>
- /// <param name="OriginatingTaskSchedulerID">The scheduler ID.</param>
- /// <param name="OriginatingTaskID">The task ID.</param>
- /// <param name="ForkJoinContextID">The invoke ID.</param>
- /// <param name="OperationType">The kind of fork/join operation.</param>
- /// <param name="ActionCount">The number of actions being invoked.</param>
- [Event(PARALLELINVOKEBEGIN_ID, Level = EventLevel.Informational, ActivityOptions=EventActivityOptions.Recursive,
- Task = TplEtwProvider.Tasks.Invoke, Opcode = EventOpcode.Start)]
- public void ParallelInvokeBegin(
- int OriginatingTaskSchedulerID, int OriginatingTaskID, // PFX_COMMON_EVENT_HEADER
- int ForkJoinContextID, ForkJoinOperationType OperationType, // PFX_FORKJOIN_COMMON_EVENT_HEADER
- int ActionCount)
- {
- if (IsEnabled() && IsEnabled(EventLevel.Informational, Keywords.Parallel))
- {
- // There is no explicit WriteEvent() overload matching this event's fields.
- // Therefore calling WriteEvent() would hit the "params" overload, which leads to an object allocation every time this event is fired.
- // To prevent that problem we will call WriteEventCore(), which works with a stack based EventData array populated with the event fields
- unsafe
- {
- EventData* eventPayload = stackalloc EventData[5];
-
- eventPayload[0].Size = sizeof(int);
- eventPayload[0].DataPointer = ((IntPtr) (&OriginatingTaskSchedulerID));
- eventPayload[1].Size = sizeof(int);
- eventPayload[1].DataPointer = ((IntPtr) (&OriginatingTaskID));
- eventPayload[2].Size = sizeof(int);
- eventPayload[2].DataPointer = ((IntPtr) (&ForkJoinContextID));
- eventPayload[3].Size = sizeof(int);
- eventPayload[3].DataPointer = ((IntPtr) (&OperationType));
- eventPayload[4].Size = sizeof(int);
- eventPayload[4].DataPointer = ((IntPtr) (&ActionCount));
-
- WriteEventCore(PARALLELINVOKEBEGIN_ID, 5, eventPayload);
- }
- }
- }
- #endregion
-
- #region ParallelInvokeEnd
- /// <summary>
- /// Denotes the exit point for a Parallel.Invoke call.
- /// </summary>
- /// <param name="OriginatingTaskSchedulerID">The scheduler ID.</param>
- /// <param name="OriginatingTaskID">The task ID.</param>
- /// <param name="ForkJoinContextID">The invoke ID.</param>
- [Event(PARALLELINVOKEEND_ID, Level = EventLevel.Informational, Task = TplEtwProvider.Tasks.Invoke, Opcode = EventOpcode.Stop)]
- public void ParallelInvokeEnd(
- int OriginatingTaskSchedulerID, int OriginatingTaskID, // PFX_COMMON_EVENT_HEADER
- int ForkJoinContextID)
- {
- if (IsEnabled() && IsEnabled(EventLevel.Informational, Keywords.Parallel))
- {
- WriteEvent(PARALLELINVOKEEND_ID, OriginatingTaskSchedulerID, OriginatingTaskID, ForkJoinContextID);
- }
- }
- #endregion
-
- #region ParallelFork
- /// <summary>
- /// Denotes the start of an individual task that's part of a fork/join context.
- /// Before this event is fired, the start of the new fork/join context will be marked
- /// with another event that declares a unique context ID.
- /// </summary>
- /// <param name="OriginatingTaskSchedulerID">The scheduler ID.</param>
- /// <param name="OriginatingTaskID">The task ID.</param>
- /// <param name="ForkJoinContextID">The invoke ID.</param>
- [Event(PARALLELFORK_ID, Level = EventLevel.Verbose, ActivityOptions=EventActivityOptions.Recursive,
- Task = TplEtwProvider.Tasks.ForkJoin, Opcode = EventOpcode.Start)]
- public void ParallelFork(
- int OriginatingTaskSchedulerID, int OriginatingTaskID, // PFX_COMMON_EVENT_HEADER
- int ForkJoinContextID)
- {
- if (IsEnabled() && IsEnabled(EventLevel.Verbose, Keywords.Parallel))
- {
- WriteEvent(PARALLELFORK_ID, OriginatingTaskSchedulerID, OriginatingTaskID, ForkJoinContextID);
- }
- }
- #endregion
-
- #region ParallelJoin
- /// <summary>
- /// Denotes the end of an individual task that's part of a fork/join context.
- /// This should match a previous ParallelFork event with a matching "OriginatingTaskID"
- /// </summary>
- /// <param name="OriginatingTaskSchedulerID">The scheduler ID.</param>
- /// <param name="OriginatingTaskID">The task ID.</param>
- /// <param name="ForkJoinContextID">The invoke ID.</param>
- [Event(PARALLELJOIN_ID, Level = EventLevel.Verbose, Task = TplEtwProvider.Tasks.ForkJoin, Opcode = EventOpcode.Stop)]
- public void ParallelJoin(
- int OriginatingTaskSchedulerID, int OriginatingTaskID, // PFX_COMMON_EVENT_HEADER
- int ForkJoinContextID)
- {
- if (IsEnabled() && IsEnabled(EventLevel.Verbose, Keywords.Parallel))
- {
- WriteEvent(PARALLELJOIN_ID, OriginatingTaskSchedulerID, OriginatingTaskID, ForkJoinContextID);
- }
- }
- #endregion
-
- //-----------------------------------------------------------------------------------
- //
// Task Events
//
@@ -512,7 +311,7 @@ namespace System.Threading.Tasks
Level = EventLevel.Informational, Keywords = Keywords.TaskTransfer|Keywords.Tasks)]
public void TaskWaitBegin(
int OriginatingTaskSchedulerID, int OriginatingTaskID, // PFX_COMMON_EVENT_HEADER
- int TaskID, TaskWaitBehavior Behavior, int ContinueWithTaskID, int appDomain)
+ int TaskID, TaskWaitBehavior Behavior, int ContinueWithTaskID)
{
if (IsEnabled() && IsEnabled(EventLevel.Informational, Keywords.TaskTransfer|Keywords.Tasks))
{
@@ -534,8 +333,10 @@ namespace System.Threading.Tasks
Guid childActivityId = CreateGuidForTaskID(TaskID);
WriteEventWithRelatedActivityIdCore(TASKWAITBEGIN_ID, &childActivityId, 5, eventPayload);
}
- else
+ else
+ {
WriteEventCore(TASKWAITBEGIN_ID, 5, eventPayload);
+ }
}
}
}
@@ -688,7 +489,7 @@ namespace System.Threading.Tasks
}
}
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
unsafe public void RunningContinuation(int TaskID, object Object) { RunningContinuation(TaskID, (long) *((void**) JitHelpers.UnsafeCastToStackPointer(ref Object))); }
[Event(20, Keywords = Keywords.Debug)]
private void RunningContinuation(int TaskID, long Object)
@@ -697,7 +498,7 @@ namespace System.Threading.Tasks
WriteEvent(20, TaskID, Object);
}
- [NonEvent, System.Security.SecuritySafeCritical]
+ [NonEvent]
unsafe public void RunningContinuationList(int TaskID, int Index, object Object) { RunningContinuationList(TaskID, Index, (long) *((void**) JitHelpers.UnsafeCastToStackPointer(ref Object))); }
[Event(21, Keywords = Keywords.Debug)]
@@ -707,9 +508,6 @@ namespace System.Threading.Tasks
WriteEvent(21, TaskID, Index, Object);
}
- [Event(22, Keywords = Keywords.Debug)]
- public void DebugMessage(string Message) { WriteEvent(22, Message); }
-
[Event(23, Keywords = Keywords.Debug)]
public void DebugFacilityMessage(string Facility, string Message) { WriteEvent(23, Facility, Message); }
diff --git a/src/mscorlib/src/System/Threading/Tasks/Task.cs b/src/mscorlib/src/System/Threading/Tasks/Task.cs
index cf081f75fd..7013c5c5e0 100644
--- a/src/mscorlib/src/System/Threading/Tasks/Task.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/Task.cs
@@ -18,7 +18,6 @@ using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.ExceptionServices;
using System.Security;
-using System.Security.Permissions;
using System.Threading;
using System.Diagnostics;
using System.Diagnostics.Contracts;
@@ -147,7 +146,6 @@ namespace System.Threading.Tasks
private static StackGuard t_stackGuard; // The stack guard object for this thread
internal static int s_taskIdCounter; //static counter used to generate unique task IDs
- private readonly static TaskFactory s_factory = new TaskFactory();
private volatile int m_taskId; // this task's unique ID. initialized only if it is ever requested
@@ -365,12 +363,9 @@ namespace System.Threading.Tasks
/// </summary>
/// <param name="action">The delegate that represents the code to execute in the Task.</param>
/// <exception cref="T:System.ArgumentNullException">The <paramref name="action"/> argument is null.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Action action)
: this(action, null, null, default(CancellationToken), TaskCreationOptions.None, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -383,12 +378,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Action action, CancellationToken cancellationToken)
: this(action, null, null, cancellationToken, TaskCreationOptions.None, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -406,12 +398,9 @@ namespace System.Threading.Tasks
/// The <paramref name="creationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Action action, TaskCreationOptions creationOptions)
: this(action, null, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -433,12 +422,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
: this(action, null, Task.InternalCurrentIfAttached(creationOptions), cancellationToken, creationOptions, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
@@ -450,12 +436,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="action"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Action<object> action, object state)
: this(action, state, null, default(CancellationToken), TaskCreationOptions.None, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -470,12 +453,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Action<object> action, object state, CancellationToken cancellationToken)
: this(action, state, null, cancellationToken, TaskCreationOptions.None, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -494,12 +474,9 @@ namespace System.Threading.Tasks
/// The <paramref name="creationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Action<object> action, object state, TaskCreationOptions creationOptions)
: this(action, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -522,19 +499,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Action<object> action, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
: this(action, state, Task.InternalCurrentIfAttached(creationOptions), cancellationToken, creationOptions, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
- }
-
- internal Task(Action<object> action, object state, Task parent, CancellationToken cancellationToken,
- TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler, ref StackCrawlMark stackMark)
- : this(action, state, parent, cancellationToken, creationOptions, internalOptions, scheduler)
- {
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -557,10 +524,8 @@ namespace System.Threading.Tasks
}
Contract.EndContractBlock();
- // Keep a link to your parent if: (A) You are attached, or (B) you are self-replicating.
- if (parent != null &&
- ((creationOptions & TaskCreationOptions.AttachedToParent) != 0 ||
- (internalOptions & InternalTaskOptions.SelfReplicating) != 0))
+ // Keep a link to the parent if attached
+ if (parent != null && (creationOptions & TaskCreationOptions.AttachedToParent) != 0)
{
EnsureContingentPropertiesInitializedUnsafe().m_parent = parent;
}
@@ -586,6 +551,10 @@ namespace System.Threading.Tasks
m_stateObject = state;
m_taskScheduler = scheduler;
+ Debug.Assert(m_contingentProperties == null || m_contingentProperties.m_capturedContext == null,
+ "Captured an ExecutionContext when one was already captured.");
+ CapturedContext = ExecutionContext.Capture();
+
// Check for validity of options
if ((creationOptions &
~(TaskCreationOptions.AttachedToParent |
@@ -602,22 +571,13 @@ namespace System.Threading.Tasks
// Check the validity of internalOptions
int illegalInternalOptions =
(int) (internalOptions &
- ~(InternalTaskOptions.SelfReplicating |
- InternalTaskOptions.ChildReplica |
- InternalTaskOptions.PromiseTask |
+ ~(InternalTaskOptions.PromiseTask |
InternalTaskOptions.ContinuationTask |
InternalTaskOptions.LazyCancellation |
InternalTaskOptions.QueuedByRuntime));
Debug.Assert(illegalInternalOptions == 0, "TaskConstructorCore: Illegal internal options");
#endif
- // Throw exception if the user specifies both LongRunning and SelfReplicating
- if (((creationOptions & TaskCreationOptions.LongRunning) != 0) &&
- ((internalOptions & InternalTaskOptions.SelfReplicating) != 0))
- {
- ThrowHelper.ThrowInvalidOperationException(ExceptionResource.Task_ctor_LRandSR);
- }
-
// Assign options to m_stateAndOptionsFlag.
Debug.Assert(m_stateFlags == 0, "TaskConstructorCore: non-zero m_stateFlags");
Debug.Assert((((int)creationOptions) | OptionsMask) == OptionsMask, "TaskConstructorCore: options take too many bits");
@@ -648,9 +608,7 @@ namespace System.Threading.Tasks
// we need to do this as the very last thing in the construction path, because the CT registration could modify m_stateFlags
if (cancellationToken.CanBeCanceled)
{
- Debug.Assert((internalOptions &
- (InternalTaskOptions.ChildReplica | InternalTaskOptions.SelfReplicating | InternalTaskOptions.ContinuationTask)) == 0,
- "TaskConstructorCore: Did not expect to see cancelable token for replica/replicating or continuation task.");
+ Debug.Assert((internalOptions & InternalTaskOptions.ContinuationTask) == 0, "TaskConstructorCore: Did not expect to see cancelable token for continuation task.");
AssignCancellationToken(cancellationToken, null, null);
}
@@ -757,24 +715,6 @@ namespace System.Threading.Tasks
}
}
-
- /// <summary>
- /// Captures the ExecutionContext so long as flow isn't suppressed.
- /// </summary>
- /// <param name="stackMark">A stack crawl mark pointing to the frame of the caller.</param>
-
- internal void PossiblyCaptureContext(ref StackCrawlMark stackMark)
- {
- Debug.Assert(m_contingentProperties == null || m_contingentProperties.m_capturedContext == null,
- "Captured an ExecutionContext when one was already captured.");
-
- // In the legacy .NET 3.5 build, we don't have the optimized overload of Capture()
- // available, so we call the parameterless overload.
- CapturedContext = ExecutionContext.Capture(
- ref stackMark,
- ExecutionContext.CaptureOptions.IgnoreSyncCtx | ExecutionContext.CaptureOptions.OptimizeDefaultCase);
- }
-
// Internal property to process TaskCreationOptions access and mutation.
internal TaskCreationOptions Options
{
@@ -989,16 +929,14 @@ namespace System.Threading.Tasks
/// </summary>
internal void AddNewChild()
{
- Debug.Assert(Task.InternalCurrent == this || this.IsSelfReplicatingRoot, "Task.AddNewChild(): Called from an external context");
+ Debug.Assert(Task.InternalCurrent == this, "Task.AddNewChild(): Called from an external context");
var props = EnsureContingentPropertiesInitialized();
- if (props.m_completionCountdown == 1 && !IsSelfReplicatingRoot)
+ if (props.m_completionCountdown == 1)
{
// A count of 1 indicates so far there was only the parent, and this is the first child task
// Single kid => no fuss about who else is accessing the count. Let's save ourselves 100 cycles
- // We exclude self replicating root tasks from this optimization, because further child creation can take place on
- // other cores and with bad enough timing this write may not be visible to them.
props.m_completionCountdown++;
}
else
@@ -1264,7 +1202,7 @@ namespace System.Threading.Tasks
// Implicitly converts action to object and handles the meat of the StartNew() logic.
internal static Task InternalStartNew(
Task creatingTask, Delegate action, object state, CancellationToken cancellationToken, TaskScheduler scheduler,
- TaskCreationOptions options, InternalTaskOptions internalOptions, ref StackCrawlMark stackMark)
+ TaskCreationOptions options, InternalTaskOptions internalOptions)
{
// Validate arguments.
if (scheduler == null)
@@ -1276,7 +1214,6 @@ namespace System.Threading.Tasks
// Create and schedule the task. This throws an InvalidOperationException if already shut down.
// Here we add the InternalTaskOptions.QueuedByRuntime to the internalOptions, so that TaskConstructorCore can skip the cancellation token registration
Task t = new Task(action, state, creatingTask, cancellationToken, options, internalOptions | InternalTaskOptions.QueuedByRuntime, scheduler);
- t.PossiblyCaptureContext(ref stackMark);
t.ScheduleAndStart(false);
return t;
@@ -1615,23 +1552,10 @@ namespace System.Threading.Tasks
/// of <see cref="System.Threading.Tasks.TaskFactory"/>, as would result from using
/// the default constructor on TaskFactory.
/// </remarks>
- public static TaskFactory Factory { get { return s_factory; } }
-
- /// <summary>A task that's already been completed successfully.</summary>
- private static Task s_completedTask;
+ public static TaskFactory Factory { get; } = new TaskFactory();
/// <summary>Gets a task that's already been completed successfully.</summary>
- /// <remarks>May not always return the same instance.</remarks>
- public static Task CompletedTask
- {
- get
- {
- var completedTask = s_completedTask;
- if (completedTask == null)
- s_completedTask = completedTask = new Task(false, (TaskCreationOptions)InternalTaskOptions.DoNotDispose, default(CancellationToken)); // benign initialization race condition
- return completedTask;
- }
- }
+ public static Task CompletedTask { get; } = new Task(false, (TaskCreationOptions)InternalTaskOptions.DoNotDispose, default(CancellationToken));
/// <summary>
/// Provides an event that can be used to wait for completion.
@@ -1663,35 +1587,6 @@ namespace System.Threading.Tasks
}
}
- /// <summary>
- /// Determines whether this is the root task of a self replicating group.
- /// </summary>
- internal bool IsSelfReplicatingRoot
- {
- get
- {
- // Return true if self-replicating bit is set and child replica bit is not set
- return (Options & (TaskCreationOptions)(InternalTaskOptions.SelfReplicating | InternalTaskOptions.ChildReplica))
- == (TaskCreationOptions)InternalTaskOptions.SelfReplicating;
- }
- }
-
- /// <summary>
- /// Determines whether the task is a replica itself.
- /// </summary>
- internal bool IsChildReplica
- {
- get { return (Options & (TaskCreationOptions)InternalTaskOptions.ChildReplica) != 0; }
- }
-
- internal int ActiveChildCount
- {
- get
- {
- var props = Volatile.Read(ref m_contingentProperties);
- return props != null ? props.m_completionCountdown - 1 : 0;
- }
- }
/// <summary>
/// The property formerly known as IsFaulted.
@@ -1737,7 +1632,7 @@ namespace System.Threading.Tasks
}
else
{
- return m_contingentProperties?.m_capturedContext ?? ExecutionContext.PreAllocatedDefault;
+ return m_contingentProperties?.m_capturedContext ?? ExecutionContext.Default;
}
}
set
@@ -1747,7 +1642,7 @@ namespace System.Threading.Tasks
{
m_stateFlags |= TASK_STATE_EXECUTIONCONTEXT_IS_NULL;
}
- else if (!value.IsPreAllocatedDefault) // not the default context, then inflate the contingent properties and set it
+ else if (value != ExecutionContext.Default) // not the default context, then inflate the contingent properties and set it
{
EnsureContingentPropertiesInitializedUnsafe().m_capturedContext = value;
}
@@ -1755,32 +1650,6 @@ namespace System.Threading.Tasks
}
}
- /// <summary>
- /// Static helper function to copy specific ExecutionContext
- /// </summary>
- /// <param name="capturedContext">The captured context</param>
- /// <returns>The copied context, null if the capturedContext is null</returns>
- private static ExecutionContext CopyExecutionContext(ExecutionContext capturedContext)
- {
- if (capturedContext == null)
- return null;
- if (capturedContext.IsPreAllocatedDefault)
- return ExecutionContext.PreAllocatedDefault;
-
- return capturedContext.CreateCopy();
- }
-
-
-#if DEBUG
- /// <summary>
- /// Retrieves an identifier for the task.
- /// </summary>
- internal int InternalId
- {
- get { return GetHashCode(); }
- }
-#endif
-
/////////////
// methods
@@ -1920,7 +1789,7 @@ namespace System.Threading.Tasks
catch (ThreadAbortException tae)
{
AddException(tae);
- FinishThreadAbortedTask(true, false);
+ FinishThreadAbortedTask(delegateRan:false);
}
catch (Exception e)
{
@@ -1930,10 +1799,10 @@ namespace System.Threading.Tasks
AddException(tse);
Finish(false);
- // Now we need to mark ourselves as "handled" to avoid crashing the finalizer thread if we are called from StartNew()
- // or from the self replicating logic, because in both cases the exception is either propagated outside directly, or added
- // to an enclosing parent. However we won't do this for continuation tasks, because in that case we internally eat the exception
- // and therefore we need to make sure the user does later observe it explicitly or see it on the finalizer.
+ // Now we need to mark ourselves as "handled" to avoid crashing the finalizer thread if we are called from StartNew(),
+ // because the exception is either propagated outside directly, or added to an enclosing parent. However we won't do this for
+ // continuation tasks, because in that case we internally eat the exception and therefore we need to make sure the user does
+ // later observe it explicitly or see it on the finalizer.
if ((Options & (TaskCreationOptions)InternalTaskOptions.ContinuationTask) == 0)
{
@@ -2192,11 +2061,9 @@ namespace System.Threading.Tasks
var props = Volatile.Read(ref m_contingentProperties);
if (props == null || // no contingent properties means no children, so it's safe to complete ourselves
- (props.m_completionCountdown == 1 && !IsSelfReplicatingRoot) ||
+ (props.m_completionCountdown == 1) ||
// Count of 1 => either all children finished, or there were none. Safe to complete ourselves
// without paying the price of an Interlocked.Decrement.
- // However we need to exclude self replicating root tasks from this optimization, because
- // they can have children joining in, or finishing even after the root task delegate is done.
Interlocked.Decrement(ref props.m_completionCountdown) == 0) // Reaching this sub clause means there may be remaining active children,
// and we could be racing with one of them to call FinishStageTwo().
// So whoever does the final Interlocked.Dec is responsible to finish.
@@ -2424,19 +2291,13 @@ namespace System.Threading.Tasks
/// This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath
/// such as inlined continuations
/// </summary>
- /// <param name="bTAEAddedToExceptionHolder">
- /// Indicates whether the ThreadAbortException was added to this task's exception holder.
- /// This should always be true except for the case of non-root self replicating task copies.
- /// </param>
/// <param name="delegateRan">Whether the delegate was executed.</param>
- internal void FinishThreadAbortedTask(bool bTAEAddedToExceptionHolder, bool delegateRan)
+ internal void FinishThreadAbortedTask(bool delegateRan)
{
- Debug.Assert(!bTAEAddedToExceptionHolder || m_contingentProperties?.m_exceptionsHolder != null,
- "FinishThreadAbortedTask() called on a task whose exception holder wasn't initialized");
+ Debug.Assert(m_contingentProperties?.m_exceptionsHolder != null,
+ "FinishThreadAbortedTask() called on a task whose exception holder wasn't initialized");
- // this will only be false for non-root self replicating task copies, because all of their exceptions go to the root task.
- if (bTAEAddedToExceptionHolder)
- m_contingentProperties.m_exceptionsHolder.MarkAsHandled(false);
+ m_contingentProperties.m_exceptionsHolder.MarkAsHandled(false);
// If this method has already been called for this task, or if this task has already completed, then
// return before actually calling Finish().
@@ -2447,220 +2308,33 @@ namespace System.Threading.Tasks
}
Finish(delegateRan);
-
}
/// <summary>
- /// Executes the task. This method will only be called once, and handles bookeeping associated with
- /// self-replicating tasks, in addition to performing necessary exception marshaling.
+ /// Executes the task. This method will only be called once, and handles any necessary exception marshaling.
/// </summary>
private void Execute()
{
- if (IsSelfReplicatingRoot)
+ try
{
- ExecuteSelfReplicating(this);
+ InnerInvoke();
}
- else
+ catch (ThreadAbortException tae)
{
- try
- {
- InnerInvoke();
- }
- catch (ThreadAbortException tae)
- {
- // Don't record the TAE or call FinishThreadAbortedTask for a child replica task --
- // it's already been done downstream.
- if (!IsChildReplica)
- {
- // Record this exception in the task's exception list
- HandleException(tae);
+ // Record this exception in the task's exception list
+ HandleException(tae);
- // This is a ThreadAbortException and it will be rethrown from this catch clause, causing us to
- // skip the regular Finish codepath. In order not to leave the task unfinished, we now call
- // FinishThreadAbortedTask here.
- FinishThreadAbortedTask(true, true);
- }
- }
- catch (Exception exn)
- {
- // Record this exception in the task's exception list
- HandleException(exn);
- }
+ // This is a ThreadAbortException and it will be rethrown from this catch clause, causing us to
+ // skip the regular Finish codepath. In order not to leave the task unfinished, we now call
+ // FinishThreadAbortedTask here.
+ FinishThreadAbortedTask(delegateRan: true);
}
- }
-
- // Allows (internal) deriving classes to support limited replication.
- // (By default, replication is basically unlimited).
- internal virtual bool ShouldReplicate()
- {
- return true;
- }
-
- // Allows (internal) deriving classes to instantiate the task replica as a Task super class of their choice
- // (By default, we create a regular Task instance)
- internal virtual Task CreateReplicaTask(Action<object> taskReplicaDelegate, Object stateObject, Task parentTask, TaskScheduler taskScheduler,
- TaskCreationOptions creationOptionsForReplica, InternalTaskOptions internalOptionsForReplica)
- {
- return new Task(taskReplicaDelegate, stateObject, parentTask, default(CancellationToken),
- creationOptionsForReplica, internalOptionsForReplica, parentTask.ExecutingTaskScheduler);
- }
-
- // Allows internal deriving classes to support replicas that exit prematurely and want to pass on state to the next replica
- internal virtual Object SavedStateForNextReplica
- {
- get { return null; }
-
- set { /*do nothing*/ }
- }
-
- // Allows internal deriving classes to support replicas that exit prematurely and want to pass on state to the next replica
- internal virtual Object SavedStateFromPreviousReplica
- {
- get { return null; }
-
- set { /*do nothing*/ }
- }
-
- // Allows internal deriving classes to support replicas that exit prematurely and want to hand over the child replica that they
- // had queued, so that the replacement replica can work with that child task instead of queuing up yet another one
- internal virtual Task HandedOverChildReplica
- {
- get { return null; }
-
- set { /* do nothing*/ }
- }
-
- private static void ExecuteSelfReplicating(Task root)
- {
- TaskCreationOptions creationOptionsForReplicas = root.CreationOptions | TaskCreationOptions.AttachedToParent;
- InternalTaskOptions internalOptionsForReplicas =
- InternalTaskOptions.ChildReplica | // child replica flag disables self replication for the replicas themselves.
- InternalTaskOptions.SelfReplicating | // we still want to identify this as part of a self replicating group
- InternalTaskOptions.QueuedByRuntime; // we queue and cancel these tasks internally, so don't allow CT registration to take place
-
-
- // Important Note: The child replicas we launch from here will be attached the root replica (by virtue of the root.CreateReplicaTask call)
- // because we need the root task to receive all their exceptions, and to block until all of them return
-
-
- // This variable is captured in a closure and shared among all replicas.
- bool replicasAreQuitting = false;
-
- // Set up a delegate that will form the body of the root and all recursively created replicas.
- Action<object> taskReplicaDelegate = null;
- taskReplicaDelegate = delegate
+ catch (Exception exn)
{
- Task currentTask = Task.InternalCurrent;
-
-
- // Check if a child task has been handed over by a prematurely quiting replica that we might be a replacement for.
- Task childTask = currentTask.HandedOverChildReplica;
-
- if (childTask == null)
- {
- // Apparently we are not a replacement task. This means we need to queue up a child task for replication to progress
-
- // Down-counts a counter in the root task.
- if (!root.ShouldReplicate()) return;
-
- // If any of the replicas have quit, we will do so ourselves.
- if (Volatile.Read(ref replicasAreQuitting))
- {
- return;
- }
-
- // Propagate a copy of the context from the root task. It may be null if flow was suppressed.
- ExecutionContext creatorContext = root.CapturedContext;
-
-
- childTask = root.CreateReplicaTask(taskReplicaDelegate, root.m_stateObject, root, root.ExecutingTaskScheduler,
- creationOptionsForReplicas, internalOptionsForReplicas);
-
- childTask.CapturedContext = CopyExecutionContext(creatorContext);
-
- childTask.ScheduleAndStart(false);
- }
-
-
-
- // Finally invoke the meat of the task.
- // Note that we are directly calling root.InnerInvoke() even though we are currently be in the action delegate of a child replica
- // This is because the actual work was passed down in that delegate, and the action delegate of the child replica simply contains this
- // replication control logic.
- try
- {
- // passing in currentTask only so that the parallel debugger can find it
- root.InnerInvokeWithArg(currentTask);
- }
- catch (Exception exn)
- {
- // Record this exception in the root task's exception list
- root.HandleException(exn);
-
- if (exn is ThreadAbortException)
- {
- // If this is a ThreadAbortException it will escape this catch clause, causing us to skip the regular Finish codepath
- // In order not to leave the task unfinished, we now call FinishThreadAbortedTask here
- currentTask.FinishThreadAbortedTask(false, true);
- }
- }
-
- Object savedState = currentTask.SavedStateForNextReplica;
-
- // check for premature exit
- if (savedState != null)
- {
- // the replica decided to exit early
- // we need to queue up a replacement, attach the saved state, and yield the thread right away
-
- Task replacementReplica = root.CreateReplicaTask(taskReplicaDelegate, root.m_stateObject, root, root.ExecutingTaskScheduler,
- creationOptionsForReplicas, internalOptionsForReplicas);
-
- // Propagate a copy of the context from the root task to the replacement task
- ExecutionContext creatorContext = root.CapturedContext;
- replacementReplica.CapturedContext = CopyExecutionContext(creatorContext);
-
- replacementReplica.HandedOverChildReplica = childTask;
- replacementReplica.SavedStateFromPreviousReplica = savedState;
-
- replacementReplica.ScheduleAndStart(false);
- }
- else
- {
- // The replica finished normally, which means it can't find more work to grab.
- // Time to mark replicas quitting
-
- replicasAreQuitting = true;
-
- // InternalCancel() could conceivably throw in the underlying scheduler's TryDequeue() method.
- // If it does, then make sure that we record it.
- try
- {
- childTask.InternalCancel(true);
- }
- catch (Exception e)
- {
- // Apparently TryDequeue threw an exception. Before propagating that exception, InternalCancel should have
- // attempted an atomic state transition and a call to CancellationCleanupLogic() on this task. So we know
- // the task was properly cleaned up if it was possible.
- //
- // Now all we need to do is to Record the exception in the root task.
-
- root.HandleException(e);
- }
-
- // No specific action needed if the child could not be canceled
- // because we attached it to the root task, which should therefore be receiving any exceptions from the child,
- // and root.wait will not return before this child finishes anyway.
-
- }
- };
-
- //
- // Now we execute as the root task
- //
- taskReplicaDelegate(null);
+ // Record this exception in the task's exception list
+ HandleException(exn);
+ }
}
/// <summary>
@@ -2683,7 +2357,7 @@ namespace System.Threading.Tasks
if (!IsCompleted)
{
HandleException(tae);
- FinishThreadAbortedTask(true, false);
+ FinishThreadAbortedTask(delegateRan:false);
}
}
@@ -2693,10 +2367,10 @@ namespace System.Threading.Tasks
///
/// </summary>
/// <param name="bPreventDoubleExecution"> Performs atomic updates to prevent double execution. Should only be set to true
- /// in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. </param>
+ /// in codepaths servicing user provided TaskSchedulers. The ThreadPool scheduler doesn't need this. </param>
internal bool ExecuteEntry(bool bPreventDoubleExecution)
{
- if (bPreventDoubleExecution || ((Options & (TaskCreationOptions)InternalTaskOptions.SelfReplicating) != 0))
+ if (bPreventDoubleExecution)
{
int previousState = 0;
@@ -2772,18 +2446,10 @@ namespace System.Threading.Tasks
}
else
{
- if (IsSelfReplicatingRoot || IsChildReplica)
- {
- CapturedContext = CopyExecutionContext(ec);
- }
-
// Run the task. We need a simple shim that converts the
// object back into a Task object, so that we can Execute it.
- // Lazily initialize the callback delegate; benign race condition
- var callback = s_ecCallback;
- if (callback == null) s_ecCallback = callback = new ContextCallback(ExecutionContextCallback);
- ExecutionContext.Run(ec, callback, this, true);
+ ExecutionContext.Run(ec, s_ecCallback, this);
}
if (AsyncCausalityTracer.LoggingOn)
@@ -2810,16 +2476,7 @@ namespace System.Threading.Tasks
}
}
- // Cached callback delegate that's lazily initialized due to ContextCallback being SecurityCritical
- private static ContextCallback s_ecCallback;
-
- private static void ExecutionContextCallback(object obj)
- {
- Task task = obj as Task;
- Debug.Assert(task != null, "expected a task object");
- task.Execute();
- }
-
+ private static readonly ContextCallback s_ecCallback = obj => ((Task)obj).Execute();
/// <summary>
/// The actual code which invokes the body of the task. This can be overriden in derived types.
@@ -2844,21 +2501,6 @@ namespace System.Threading.Tasks
}
/// <summary>
- /// Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that
- /// the Parallel Debugger can discover the actual task being invoked.
- /// Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the
- /// childTask. And the debugger needs to discover the childTask, so we pass that down as an argument.
- /// The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this
- /// function appears on the callstack.
- /// </summary>
- /// <param name="childTask"></param>
- [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
- internal void InnerInvokeWithArg(Task childTask)
- {
- InnerInvoke();
- }
-
- /// <summary>
/// Performs whatever handling is necessary for an unhandled exception. Normally
/// this just entails adding the exception to the holder object.
/// </summary>
@@ -2917,10 +2559,9 @@ namespace System.Threading.Tasks
/// true to attempt to marshal the continuation back to the original context captured; otherwise, false.
/// </param>
/// <param name="flowExecutionContext">Whether to flow ExecutionContext across the await.</param>
- /// <param name="stackMark">A stack crawl mark tied to execution context.</param>
/// <exception cref="System.InvalidOperationException">The awaiter was not properly initialized.</exception>
internal void SetContinuationForAwait(
- Action continuationAction, bool continueOnCapturedContext, bool flowExecutionContext, ref StackCrawlMark stackMark)
+ Action continuationAction, bool continueOnCapturedContext, bool flowExecutionContext)
{
Contract.Requires(continuationAction != null);
@@ -2941,7 +2582,7 @@ namespace System.Threading.Tasks
var syncCtx = SynchronizationContext.CurrentNoFlow;
if (syncCtx != null && syncCtx.GetType() != typeof(SynchronizationContext))
{
- tc = new SynchronizationContextAwaitTaskContinuation(syncCtx, continuationAction, flowExecutionContext, ref stackMark);
+ tc = new SynchronizationContextAwaitTaskContinuation(syncCtx, continuationAction, flowExecutionContext);
}
else
{
@@ -2950,7 +2591,7 @@ namespace System.Threading.Tasks
var scheduler = TaskScheduler.InternalCurrent;
if (scheduler != null && scheduler != TaskScheduler.Default)
{
- tc = new TaskSchedulerAwaitTaskContinuation(scheduler, continuationAction, flowExecutionContext, ref stackMark);
+ tc = new TaskSchedulerAwaitTaskContinuation(scheduler, continuationAction, flowExecutionContext);
}
}
}
@@ -2962,7 +2603,7 @@ namespace System.Threading.Tasks
// ExecutionContext, we need to capture it and wrap it in an AwaitTaskContinuation.
// Otherwise, we're targeting the default scheduler and we don't need to flow ExecutionContext, so
// we don't actually need a continuation object. We can just store/queue the action itself.
- tc = new AwaitTaskContinuation(continuationAction, flowExecutionContext: true, stackMark: ref stackMark);
+ tc = new AwaitTaskContinuation(continuationAction, flowExecutionContext: true);
}
// Now register the continuation, and if we couldn't register it because the task is already completing,
@@ -3190,7 +2831,7 @@ namespace System.Threading.Tasks
Task currentTask = Task.InternalCurrent;
etwLog.TaskWaitBegin(
(currentTask != null ? currentTask.m_taskScheduler.Id : TaskScheduler.Default.Id), (currentTask != null ? currentTask.Id : 0),
- this.Id, TplEtwProvider.TaskWaitBehavior.Synchronous, 0, System.Threading.Thread.GetDomainID());
+ this.Id, TplEtwProvider.TaskWaitBehavior.Synchronous, 0);
}
bool returnValue = IsCompleted;
@@ -3377,7 +3018,7 @@ namespace System.Threading.Tasks
}
}
- bool bRequiresAtomicStartTransition = (ts != null && ts.RequiresAtomicStartTransition) || ((Options & (TaskCreationOptions)InternalTaskOptions.SelfReplicating) != 0);
+ bool bRequiresAtomicStartTransition = ts != null && ts.RequiresAtomicStartTransition;
if (!bPopSucceeded && bCancelNonExecutingOnly && bRequiresAtomicStartTransition)
{
@@ -3715,11 +3356,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="continuationAction"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task> continuationAction)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -3742,11 +3381,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task> continuationAction, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None);
}
/// <summary>
@@ -3771,11 +3408,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="scheduler"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task> continuationAction, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, scheduler, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, scheduler, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -3806,11 +3441,9 @@ namespace System.Threading.Tasks
/// The <paramref name="continuationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task> continuationAction, TaskContinuationOptions continuationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, TaskScheduler.Current, default(CancellationToken), continuationOptions, ref stackMark);
+ return ContinueWith(continuationAction, TaskScheduler.Current, default(CancellationToken), continuationOptions);
}
/// <summary>
@@ -3851,17 +3484,15 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task> continuationAction, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ return ContinueWith(continuationAction, scheduler, cancellationToken, continuationOptions);
}
// Same as the above overload, just with a stack mark parameter.
private Task ContinueWith(Action<Task> continuationAction, TaskScheduler scheduler,
- CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, ref StackCrawlMark stackMark)
+ CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
{
// Throw on continuation with null action
if (continuationAction == null)
@@ -3882,8 +3513,7 @@ namespace System.Threading.Tasks
Task continuationTask = new ContinuationTaskFromTask(
this, continuationAction, null,
- creationOptions, internalOptions,
- ref stackMark
+ creationOptions, internalOptions
);
// Register the continuation. If synchronous execution is requested, this may
@@ -3913,11 +3543,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="continuationAction"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task, Object> continuationAction, Object state)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, state, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -3941,11 +3569,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task, Object> continuationAction, Object state, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, state, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None);
}
/// <summary>
@@ -3971,11 +3597,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="scheduler"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task, Object> continuationAction, Object state, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, scheduler, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, state, scheduler, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -4007,11 +3631,9 @@ namespace System.Threading.Tasks
/// The <paramref name="continuationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task, Object> continuationAction, Object state, TaskContinuationOptions continuationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, TaskScheduler.Current, default(CancellationToken), continuationOptions, ref stackMark);
+ return ContinueWith(continuationAction, state, TaskScheduler.Current, default(CancellationToken), continuationOptions);
}
/// <summary>
@@ -4053,17 +3675,15 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task, Object> continuationAction, Object state, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ return ContinueWith(continuationAction, state, scheduler, cancellationToken, continuationOptions);
}
// Same as the above overload, just with a stack mark parameter.
private Task ContinueWith(Action<Task, Object> continuationAction, Object state, TaskScheduler scheduler,
- CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, ref StackCrawlMark stackMark)
+ CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
{
// Throw on continuation with null action
if (continuationAction == null)
@@ -4084,8 +3704,7 @@ namespace System.Threading.Tasks
Task continuationTask = new ContinuationTaskFromTask(
this, continuationAction, state,
- creationOptions, internalOptions,
- ref stackMark
+ creationOptions, internalOptions
);
// Register the continuation. If synchronous execution is requested, this may
@@ -4118,12 +3737,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="continuationFunction"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, TResult> continuationFunction)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return ContinueWith<TResult>(continuationFunction, TaskScheduler.Current, default(CancellationToken),
- TaskContinuationOptions.None, ref stackMark);
+ TaskContinuationOptions.None);
}
@@ -4150,11 +3767,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, TResult> continuationFunction, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TResult>(continuationFunction, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TResult>(continuationFunction, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None);
}
/// <summary>
@@ -4182,11 +3797,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="scheduler"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, TResult> continuationFunction, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TResult>(continuationFunction, scheduler, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TResult>(continuationFunction, scheduler, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -4220,11 +3833,9 @@ namespace System.Threading.Tasks
/// The <paramref name="continuationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, TResult> continuationFunction, TaskContinuationOptions continuationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TResult>(continuationFunction, TaskScheduler.Current, default(CancellationToken), continuationOptions, ref stackMark);
+ return ContinueWith<TResult>(continuationFunction, TaskScheduler.Current, default(CancellationToken), continuationOptions);
}
/// <summary>
@@ -4268,17 +3879,15 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, TResult> continuationFunction, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TResult>(continuationFunction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ return ContinueWith<TResult>(continuationFunction, scheduler, cancellationToken, continuationOptions);
}
// Same as the above overload, just with a stack mark parameter.
private Task<TResult> ContinueWith<TResult>(Func<Task, TResult> continuationFunction, TaskScheduler scheduler,
- CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, ref StackCrawlMark stackMark)
+ CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
{
// Throw on continuation with null function
if (continuationFunction == null)
@@ -4299,8 +3908,7 @@ namespace System.Threading.Tasks
Task<TResult> continuationTask = new ContinuationResultTaskFromTask<TResult>(
this, continuationFunction, null,
- creationOptions, internalOptions,
- ref stackMark
+ creationOptions, internalOptions
);
// Register the continuation. If synchronous execution is requested, this may
@@ -4333,12 +3941,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="continuationFunction"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, Object, TResult> continuationFunction, Object state)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return ContinueWith<TResult>(continuationFunction, state, TaskScheduler.Current, default(CancellationToken),
- TaskContinuationOptions.None, ref stackMark);
+ TaskContinuationOptions.None);
}
@@ -4366,11 +3972,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, Object, TResult> continuationFunction, Object state, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TResult>(continuationFunction, state, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TResult>(continuationFunction, state, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None);
}
/// <summary>
@@ -4399,11 +4003,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="scheduler"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, Object, TResult> continuationFunction, Object state, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TResult>(continuationFunction, state, scheduler, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TResult>(continuationFunction, state, scheduler, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -4438,11 +4040,9 @@ namespace System.Threading.Tasks
/// The <paramref name="continuationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, Object, TResult> continuationFunction, Object state, TaskContinuationOptions continuationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TResult>(continuationFunction, state, TaskScheduler.Current, default(CancellationToken), continuationOptions, ref stackMark);
+ return ContinueWith<TResult>(continuationFunction, state, TaskScheduler.Current, default(CancellationToken), continuationOptions);
}
/// <summary>
@@ -4487,17 +4087,15 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWith<TResult>(Func<Task, Object, TResult> continuationFunction, Object state, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TResult>(continuationFunction, state, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ return ContinueWith<TResult>(continuationFunction, state, scheduler, cancellationToken, continuationOptions);
}
// Same as the above overload, just with a stack mark parameter.
private Task<TResult> ContinueWith<TResult>(Func<Task, Object, TResult> continuationFunction, Object state, TaskScheduler scheduler,
- CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, ref StackCrawlMark stackMark)
+ CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
{
// Throw on continuation with null function
if (continuationFunction == null)
@@ -4518,8 +4116,7 @@ namespace System.Threading.Tasks
Task<TResult> continuationTask = new ContinuationResultTaskFromTask<TResult>(
this, continuationFunction, state,
- creationOptions, internalOptions,
- ref stackMark
+ creationOptions, internalOptions
);
// Register the continuation. If synchronous execution is requested, this may
@@ -5207,49 +4804,6 @@ namespace System.Threading.Tasks
}
/// <summary>
- /// Internal WaitAll implementation which is meant to be used with small number of tasks,
- /// optimized for Parallel.Invoke and other structured primitives.
- /// </summary>
- internal static void FastWaitAll(Task[] tasks)
- {
- Contract.Requires(tasks != null);
-
- List<Exception> exceptions = null;
-
- // Collects incomplete tasks in "waitedOnTaskList" and their cooperative events in "cooperativeEventList"
- for (int i = tasks.Length - 1; i >= 0; i--)
- {
- if (!tasks[i].IsCompleted)
- {
- // Just attempting to inline here... result doesn't matter.
- // We'll do a second pass to do actual wait on each task, and to aggregate their exceptions.
- // If the task is inlined here, it will register as IsCompleted in the second pass
- // and will just give us the exception.
- tasks[i].WrappedTryRunInline();
- }
- }
-
- // Wait on the tasks.
- for (int i = tasks.Length - 1; i >= 0; i--)
- {
- var task = tasks[i];
- task.SpinThenBlockingWait(Timeout.Infinite, default(CancellationToken));
- AddExceptionsForCompletedTask(ref exceptions, task);
-
- // Note that unlike other wait code paths, we do not check
- // task.NotifyDebuggerOfWaitCompletionIfNecessary() here, because this method is currently
- // only used from contexts where the tasks couldn't have that bit set, namely
- // Parallel.Invoke. If that ever changes, such checks should be added here.
- }
-
- // If one or more threw exceptions, aggregate them.
- if (exceptions != null)
- {
- ThrowHelper.ThrowAggregateException(exceptions);
- }
- }
-
- /// <summary>
/// This internal function is only meant to be called by WaitAll()
/// If the completed task is canceled or it has other exceptions, here we will add those
/// into the passed in exception list (which will be lazily initialized here).
@@ -5582,12 +5136,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="action"/> parameter was null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public static Task Run(Action action)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task.InternalStartNew(null, action, null, default(CancellationToken), TaskScheduler.Default,
- TaskCreationOptions.DenyChildAttach, InternalTaskOptions.None, ref stackMark);
+ TaskCreationOptions.DenyChildAttach, InternalTaskOptions.None);
}
/// <summary>
@@ -5602,12 +5154,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">
/// The <see cref="T:System.CancellationTokenSource"/> associated with <paramref name="cancellationToken"/> was disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public static Task Run(Action action, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task.InternalStartNew(null, action, null, cancellationToken, TaskScheduler.Default,
- TaskCreationOptions.DenyChildAttach, InternalTaskOptions.None, ref stackMark);
+ TaskCreationOptions.DenyChildAttach, InternalTaskOptions.None);
}
/// <summary>
@@ -5618,12 +5168,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="function"/> parameter was null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public static Task<TResult> Run<TResult>(Func<TResult> function)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task<TResult>.StartNew(null, function, default(CancellationToken),
- TaskCreationOptions.DenyChildAttach, InternalTaskOptions.None, TaskScheduler.Default, ref stackMark);
+ TaskCreationOptions.DenyChildAttach, InternalTaskOptions.None, TaskScheduler.Default);
}
/// <summary>
@@ -5638,12 +5186,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">
/// The <see cref="T:System.CancellationTokenSource"/> associated with <paramref name="cancellationToken"/> was disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public static Task<TResult> Run<TResult>(Func<TResult> function, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task<TResult>.StartNew(null, function, cancellationToken,
- TaskCreationOptions.DenyChildAttach, InternalTaskOptions.None, TaskScheduler.Default, ref stackMark);
+ TaskCreationOptions.DenyChildAttach, InternalTaskOptions.None, TaskScheduler.Default);
}
/// <summary>
@@ -6693,102 +6239,6 @@ namespace System.Threading.Tasks
public TaskStatus Status { get { return m_task.Status; } }
}
- // Special purpose derivation of Task that supports limited replication through
- // overriding the ShouldReplicate() method. This is used by the Parallel.For/ForEach
- // methods.
- internal class ParallelForReplicatingTask : Task
- {
- // Member variables
- private int m_replicationDownCount; // downcounter to control replication
-
- //
- // Constructors
- //
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
- internal ParallelForReplicatingTask(
- ParallelOptions parallelOptions, Action action, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions)
- : base(action, null, Task.InternalCurrent, default(CancellationToken), creationOptions, internalOptions | InternalTaskOptions.SelfReplicating, null)
- {
- // Compute the down count based on scheduler/DOP info in parallelOptions.
- m_replicationDownCount = parallelOptions.EffectiveMaxConcurrencyLevel;
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
- }
-
-
- // Controls degree of replication. If downcounter is initialized to -1, then
- // replication will be allowed to "run wild". Otherwise, this method decrements
- // the downcounter each time it is called, calling false when it is called with
- // a zero downcounter. This method returning false effectively ends the replication
- // of the associated ParallelForReplicatingTask.
- internal override bool ShouldReplicate()
- {
- if (m_replicationDownCount == -1) return true; // "run wild"
-
- if (m_replicationDownCount > 0) // Decrement and return true if not called with 0 downcount
- {
- m_replicationDownCount--;
- return true;
- }
-
- return false; // We're done replicating
- }
-
- internal override Task CreateReplicaTask(Action<object> taskReplicaDelegate, Object stateObject, Task parentTask, TaskScheduler taskScheduler,
- TaskCreationOptions creationOptionsForReplica, InternalTaskOptions internalOptionsForReplica)
- {
- return new ParallelForReplicaTask(taskReplicaDelegate, stateObject, parentTask, taskScheduler,
- creationOptionsForReplica, internalOptionsForReplica);
- }
-
-
- }
-
- internal class ParallelForReplicaTask : Task
- {
- internal object m_stateForNextReplica; // some replicas may quit prematurely, in which case they will use this variable
- // to save state they want to be picked up by the next replica queued to the same thread
-
- internal object m_stateFromPreviousReplica; // some replicas may quit prematurely, in which case they will use this variable
- // to save state they want to be picked up by the next replica queued to the same thread
-
- internal Task m_handedOverChildReplica; // some replicas may quit prematurely, in which case they will use this variable
- // to hand over the child replica they had queued to the next task that will replace them
-
- internal ParallelForReplicaTask(Action<object> taskReplicaDelegate, Object stateObject, Task parentTask, TaskScheduler taskScheduler,
- TaskCreationOptions creationOptionsForReplica, InternalTaskOptions internalOptionsForReplica) :
- base(taskReplicaDelegate, stateObject, parentTask, default(CancellationToken), creationOptionsForReplica, internalOptionsForReplica, taskScheduler)
- {
- }
-
- // Allows internal deriving classes to support replicas that exit prematurely and want to pass on state to the next replica
- internal override Object SavedStateForNextReplica
- {
- get { return m_stateForNextReplica; }
-
- set { m_stateForNextReplica = value; }
- }
-
- // Allows internal deriving classes to support replicas that exit prematurely and want to pass on state to the next replica
- internal override Object SavedStateFromPreviousReplica
- {
- get { return m_stateFromPreviousReplica; }
-
- set { m_stateFromPreviousReplica = value; }
- }
-
- // Allows internal deriving classes to support replicas that exit prematurely and want to hand over the child replica that they
- // had queued, so that the replacement replica can work with that child task instead of queuing up yet another one
- internal override Task HandedOverChildReplica
- {
- get { return m_handedOverChildReplica; }
-
- set { m_handedOverChildReplica = value; }
- }
- }
-
/// <summary>
/// Specifies flags that control optional behavior for the creation and execution of tasks.
/// </summary>
@@ -6856,10 +6306,8 @@ namespace System.Threading.Tasks
/// <summary>Used to filter out internal vs. public task creation options.</summary>
InternalOptionsMask = 0x0000FF00,
- ChildReplica = 0x0100,
ContinuationTask = 0x0200,
PromiseTask = 0x0400,
- SelfReplicating = 0x0800,
/// <summary>
/// Store the presence of TaskContinuationOptions.LazyCancellation, since it does not directly
diff --git a/src/mscorlib/src/System/Threading/Tasks/TaskCompletionSource.cs b/src/mscorlib/src/System/Threading/Tasks/TaskCompletionSource.cs
index 320f704f09..bf9f9cbb2c 100644
--- a/src/mscorlib/src/System/Threading/Tasks/TaskCompletionSource.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/TaskCompletionSource.cs
@@ -17,7 +17,6 @@ using System.Diagnostics.Contracts;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
-using System.Security.Permissions;
using System.Threading;
// Disable the "reference to volatile field not treated as volatile" error.
@@ -203,22 +202,6 @@ namespace System.Threading.Tasks
return rval;
}
- /// <summary>Attempts to transition the underlying task to the faulted state.</summary>
- /// <param name="exceptions">The collection of exception dispatch infos to bind to this task.</param>
- /// <returns>True if the operation was successful; otherwise, false.</returns>
- /// <remarks>Unlike the public methods, this method doesn't currently validate that its arguments are correct.</remarks>
- internal bool TrySetException(IEnumerable<ExceptionDispatchInfo> exceptions)
- {
- Debug.Assert(exceptions != null);
-#if DEBUG
- foreach(var edi in exceptions) Debug.Assert(edi != null, "Contents must be non-null");
-#endif
-
- bool rval = m_task.TrySetException(exceptions);
- if (!rval && !m_task.IsCompleted) SpinUntilCompleted();
- return rval;
- }
-
/// <summary>
/// Transitions the underlying
/// <see cref="T:System.Threading.Tasks.Task{TResult}"/> into the
diff --git a/src/mscorlib/src/System/Threading/Tasks/TaskContinuation.cs b/src/mscorlib/src/System/Threading/Tasks/TaskContinuation.cs
index 70b9418dbf..3c6ccd8dd4 100644
--- a/src/mscorlib/src/System/Threading/Tasks/TaskContinuation.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/TaskContinuation.cs
@@ -29,13 +29,12 @@ namespace System.Threading.Tasks
private Task m_antecedent;
public ContinuationTaskFromTask(
- Task antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, ref StackCrawlMark stackMark) :
+ Task antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) :
base(action, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, null)
{
Contract.Requires(action is Action<Task> || action is Action<Task, object>,
"Invalid delegate type in ContinuationTaskFromTask");
m_antecedent = antecedent;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -77,13 +76,12 @@ namespace System.Threading.Tasks
private Task m_antecedent;
public ContinuationResultTaskFromTask(
- Task antecedent, Delegate function, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, ref StackCrawlMark stackMark) :
+ Task antecedent, Delegate function, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) :
base(function, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, null)
{
Contract.Requires(function is Func<Task, TResult> || function is Func<Task, object, TResult>,
"Invalid delegate type in ContinuationResultTaskFromTask");
m_antecedent = antecedent;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -125,13 +123,12 @@ namespace System.Threading.Tasks
private Task<TAntecedentResult> m_antecedent;
public ContinuationTaskFromResultTask(
- Task<TAntecedentResult> antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, ref StackCrawlMark stackMark) :
+ Task<TAntecedentResult> antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) :
base(action, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, null)
{
Contract.Requires(action is Action<Task<TAntecedentResult>> || action is Action<Task<TAntecedentResult>, object>,
"Invalid delegate type in ContinuationTaskFromResultTask");
m_antecedent = antecedent;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -173,13 +170,12 @@ namespace System.Threading.Tasks
private Task<TAntecedentResult> m_antecedent;
public ContinuationResultTaskFromResultTask(
- Task<TAntecedentResult> antecedent, Delegate function, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, ref StackCrawlMark stackMark) :
+ Task<TAntecedentResult> antecedent, Delegate function, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) :
base(function, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, null)
{
Contract.Requires(function is Func<Task<TAntecedentResult>, TResult> || function is Func<Task<TAntecedentResult>, object, TResult>,
"Invalid delegate type in ContinuationResultTaskFromResultTask");
m_antecedent = antecedent;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -392,10 +388,9 @@ namespace System.Threading.Tasks
/// <param name="context">The synchronization context with which to invoke the action. Must not be null.</param>
/// <param name="action">The action to invoke. Must not be null.</param>
/// <param name="flowExecutionContext">Whether to capture and restore ExecutionContext.</param>
- /// <param name="stackMark">The captured stack mark.</param>
internal SynchronizationContextAwaitTaskContinuation(
- SynchronizationContext context, Action action, bool flowExecutionContext, ref StackCrawlMark stackMark) :
- base(action, flowExecutionContext, ref stackMark)
+ SynchronizationContext context, Action action, bool flowExecutionContext) :
+ base(action, flowExecutionContext)
{
Debug.Assert(context != null);
m_syncContext = context;
@@ -479,10 +474,9 @@ namespace System.Threading.Tasks
/// <param name="scheduler">The task scheduler with which to invoke the action. Must not be null.</param>
/// <param name="action">The action to invoke. Must not be null.</param>
/// <param name="flowExecutionContext">Whether to capture and restore ExecutionContext.</param>
- /// <param name="stackMark">The captured stack mark.</param>
internal TaskSchedulerAwaitTaskContinuation(
- TaskScheduler scheduler, Action action, bool flowExecutionContext, ref StackCrawlMark stackMark) :
- base(action, flowExecutionContext, ref stackMark)
+ TaskScheduler scheduler, Action action, bool flowExecutionContext) :
+ base(action, flowExecutionContext)
{
Debug.Assert(scheduler != null);
m_scheduler = scheduler;
@@ -543,29 +537,13 @@ namespace System.Threading.Tasks
/// <summary>Initializes the continuation.</summary>
/// <param name="action">The action to invoke. Must not be null.</param>
/// <param name="flowExecutionContext">Whether to capture and restore ExecutionContext.</param>
- /// <param name="stackMark">The captured stack mark with which to construct an ExecutionContext.</param>
- internal AwaitTaskContinuation(Action action, bool flowExecutionContext, ref StackCrawlMark stackMark)
- {
- Contract.Requires(action != null);
- m_action = action;
- if (flowExecutionContext)
- {
- m_capturedContext = ExecutionContext.Capture(
- ref stackMark,
- ExecutionContext.CaptureOptions.IgnoreSyncCtx | ExecutionContext.CaptureOptions.OptimizeDefaultCase);
- }
- }
-
- /// <summary>Initializes the continuation.</summary>
- /// <param name="action">The action to invoke. Must not be null.</param>
- /// <param name="flowExecutionContext">Whether to capture and restore ExecutionContext.</param>
internal AwaitTaskContinuation(Action action, bool flowExecutionContext)
{
Contract.Requires(action != null);
m_action = action;
if (flowExecutionContext)
{
- m_capturedContext = ExecutionContext.FastCapture();
+ m_capturedContext = ExecutionContext.Capture();
}
}
@@ -670,11 +648,7 @@ namespace System.Threading.Tasks
// If there is an execution context, get the cached delegate and run the action under the context.
else
{
- try
- {
- ExecutionContext.Run(m_capturedContext, GetInvokeActionCallback(), m_action, true);
- }
- finally { m_capturedContext.Dispose(); }
+ ExecutionContext.Run(m_capturedContext, GetInvokeActionCallback(), m_action);
}
}
finally
@@ -689,8 +663,7 @@ namespace System.Threading.Tasks
void IThreadPoolWorkItem.ExecuteWorkItem()
{
// inline the fast path
- if (m_capturedContext == null && !TplEtwProvider.Log.IsEnabled()
- )
+ if (m_capturedContext == null && !TplEtwProvider.Log.IsEnabled())
{
m_action();
}
@@ -739,7 +712,7 @@ namespace System.Threading.Tasks
// If there's no captured context, just run the callback directly.
if (m_capturedContext == null) callback(state);
// Otherwise, use the captured context to do so.
- else ExecutionContext.Run(m_capturedContext, callback, state, true);
+ else ExecutionContext.Run(m_capturedContext, callback, state);
}
catch (Exception exc) // we explicitly do not request handling of dangerous exceptions like AVs
{
@@ -749,9 +722,6 @@ namespace System.Threading.Tasks
{
// Restore the current task information
if (prevCurrentTask != null) currentTask = prevCurrentTask;
-
- // Clean up after the execution context, which is only usable once.
- if (m_capturedContext != null) m_capturedContext.Dispose();
}
}
diff --git a/src/mscorlib/src/System/Threading/Tasks/TaskExceptionHolder.cs b/src/mscorlib/src/System/Threading/Tasks/TaskExceptionHolder.cs
index 45817dab23..ee1112a93f 100644
--- a/src/mscorlib/src/System/Threading/Tasks/TaskExceptionHolder.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/TaskExceptionHolder.cs
@@ -149,23 +149,6 @@ namespace System.Threading.Tasks
/// Add an exception to the holder. This will ensure the holder is
/// in the proper state (handled/unhandled) depending on the list's contents.
/// </summary>
- /// <param name="exceptionObject">
- /// An exception object (either an Exception, an ExceptionDispatchInfo,
- /// an IEnumerable{Exception}, or an IEnumerable{ExceptionDispatchInfo})
- /// to add to the list.
- /// </param>
- /// <remarks>
- /// Must be called under lock.
- /// </remarks>
- internal void Add(object exceptionObject)
- {
- Add(exceptionObject, representsCancellation: false);
- }
-
- /// <summary>
- /// Add an exception to the holder. This will ensure the holder is
- /// in the proper state (handled/unhandled) depending on the list's contents.
- /// </summary>
/// <param name="representsCancellation">
/// Whether the exception represents a cancellation request (true) or a fault (false).
/// </param>
diff --git a/src/mscorlib/src/System/Threading/Tasks/TaskFactory.cs b/src/mscorlib/src/System/Threading/Tasks/TaskFactory.cs
index aa4c2df74b..89ba2988ca 100644
--- a/src/mscorlib/src/System/Threading/Tasks/TaskFactory.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/TaskFactory.cs
@@ -15,7 +15,6 @@
using System;
using System.Collections.Generic;
using System.Security;
-using System.Security.Permissions;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Diagnostics;
@@ -225,7 +224,7 @@ namespace System.Threading.Tasks
TaskCreationOptions.PreferFairness |
TaskCreationOptions.RunContinuationsAsynchronously)) != 0)
{
- throw new ArgumentOutOfRangeException(nameof(creationOptions));
+ ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.creationOptions);
}
Contract.EndContractBlock();
}
@@ -293,13 +292,11 @@ namespace System.Threading.Tasks
/// unless creation and scheduling must be separated, StartNew is the recommended
/// approach for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task StartNew(Action action)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task.InternalStartNew(currTask, action, null, m_defaultCancellationToken, GetDefaultScheduler(currTask),
- m_defaultCreationOptions, InternalTaskOptions.None, ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None);
}
/// <summary>
@@ -320,13 +317,11 @@ namespace System.Threading.Tasks
/// unless creation and scheduling must be separated, StartNew is the recommended
/// approach for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task StartNew(Action action, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task.InternalStartNew(currTask, action, null, cancellationToken, GetDefaultScheduler(currTask),
- m_defaultCreationOptions, InternalTaskOptions.None, ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None);
}
/// <summary>
@@ -350,13 +345,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task StartNew(Action action, TaskCreationOptions creationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task.InternalStartNew(currTask, action, null, m_defaultCancellationToken, GetDefaultScheduler(currTask), creationOptions,
- InternalTaskOptions.None, ref stackMark);
+ InternalTaskOptions.None);
}
/// <summary>
@@ -391,22 +384,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task StartNew(Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task.InternalStartNew(
Task.InternalCurrentIfAttached(creationOptions), action, null, cancellationToken, scheduler, creationOptions,
- InternalTaskOptions.None, ref stackMark);
- }
-
- // Internal version includes InternalTaskOptions for Parallel.Invoke() support.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
- internal Task StartNew(Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return Task.InternalStartNew(
- Task.InternalCurrentIfAttached(creationOptions), action, null, cancellationToken, scheduler, creationOptions, internalOptions, ref stackMark);
+ InternalTaskOptions.None);
}
@@ -427,13 +409,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task StartNew(Action<Object> action, Object state)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task.InternalStartNew(currTask, action, state, m_defaultCancellationToken, GetDefaultScheduler(currTask),
- m_defaultCreationOptions, InternalTaskOptions.None, ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None);
}
@@ -458,13 +438,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task StartNew(Action<Object> action, Object state, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task.InternalStartNew(currTask, action, state, cancellationToken, GetDefaultScheduler(currTask),
- m_defaultCreationOptions, InternalTaskOptions.None, ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None);
}
/// <summary>
@@ -490,13 +468,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task StartNew(Action<Object> action, Object state, TaskCreationOptions creationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task.InternalStartNew(currTask, action, state, m_defaultCancellationToken, GetDefaultScheduler(currTask),
- creationOptions, InternalTaskOptions.None, ref stackMark);
+ creationOptions, InternalTaskOptions.None);
}
/// <summary>
@@ -533,14 +509,12 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task StartNew(Action<Object> action, Object state, CancellationToken cancellationToken,
TaskCreationOptions creationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task.InternalStartNew(
Task.InternalCurrentIfAttached(creationOptions), action, state, cancellationToken, scheduler,
- creationOptions, InternalTaskOptions.None, ref stackMark);
+ creationOptions, InternalTaskOptions.None);
}
/// <summary>
@@ -562,13 +536,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew<TResult>(Func<TResult> function)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, m_defaultCancellationToken,
- m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
@@ -595,13 +567,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew<TResult>(Func<TResult> function, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, cancellationToken,
- m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -629,13 +599,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew<TResult>(Func<TResult> function, TaskCreationOptions creationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, m_defaultCancellationToken,
- creationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ creationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -674,13 +642,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew<TResult>(Func<TResult> function, CancellationToken cancellationToken, TaskCreationOptions creationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task<TResult>.StartNew(
Task.InternalCurrentIfAttached(creationOptions), function, cancellationToken,
- creationOptions, InternalTaskOptions.None, scheduler, ref stackMark);
+ creationOptions, InternalTaskOptions.None, scheduler);
}
/// <summary>
@@ -704,13 +670,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew<TResult>(Func<Object, TResult> function, Object state)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, state, m_defaultCancellationToken,
- m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
@@ -739,13 +703,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew<TResult>(Func<Object, TResult> function, Object state, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, state, cancellationToken,
- m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ m_defaultCreationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -775,13 +737,11 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew<TResult>(Func<Object, TResult> function, Object state, TaskCreationOptions creationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
Task currTask = Task.InternalCurrent;
return Task<TResult>.StartNew(currTask, function, state, m_defaultCancellationToken,
- creationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask), ref stackMark);
+ creationOptions, InternalTaskOptions.None, GetDefaultScheduler(currTask));
}
/// <summary>
@@ -822,14 +782,12 @@ namespace System.Threading.Tasks
/// However, unless creation and scheduling must be separated, StartNew is the recommended approach
/// for both simplicity and performance.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> StartNew<TResult>(Func<Object, TResult> function, Object state, CancellationToken cancellationToken,
TaskCreationOptions creationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return Task<TResult>.StartNew(
Task.InternalCurrentIfAttached(creationOptions), function, state, cancellationToken,
- creationOptions, InternalTaskOptions.None, scheduler, ref stackMark);
+ creationOptions, InternalTaskOptions.None, scheduler);
}
//
@@ -850,13 +808,11 @@ namespace System.Threading.Tasks
/// <paramref name="endMethod"/> argument is null.</exception>
/// <returns>A <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the asynchronous
/// operation.</returns>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task FromAsync(
IAsyncResult asyncResult,
Action<IAsyncResult> endMethod)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return FromAsync(asyncResult, endMethod, m_defaultCreationOptions, DefaultScheduler, ref stackMark);
+ return FromAsync(asyncResult, endMethod, m_defaultCreationOptions, DefaultScheduler);
}
/// <summary>
@@ -878,14 +834,12 @@ namespace System.Threading.Tasks
/// value.</exception>
/// <returns>A <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the asynchronous
/// operation.</returns>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task FromAsync(
IAsyncResult asyncResult,
Action<IAsyncResult> endMethod,
TaskCreationOptions creationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return FromAsync(asyncResult, endMethod, creationOptions, DefaultScheduler, ref stackMark);
+ return FromAsync(asyncResult, endMethod, creationOptions, DefaultScheduler);
}
/// <summary>
@@ -911,26 +865,13 @@ namespace System.Threading.Tasks
/// value.</exception>
/// <returns>A <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the asynchronous
/// operation.</returns>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task FromAsync(
IAsyncResult asyncResult,
Action<IAsyncResult> endMethod,
TaskCreationOptions creationOptions,
TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return FromAsync(asyncResult, endMethod, creationOptions, scheduler, ref stackMark);
- }
-
- // private version that supports StackCrawlMark.
- private Task FromAsync(
- IAsyncResult asyncResult,
- Action<IAsyncResult> endMethod,
- TaskCreationOptions creationOptions,
- TaskScheduler scheduler,
- ref StackCrawlMark stackMark)
- {
- return TaskFactory<VoidTaskResult>.FromAsyncImpl(asyncResult, null, endMethod, creationOptions, scheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.FromAsyncImpl(asyncResult, null, endMethod, creationOptions, scheduler);
}
/// <summary>
@@ -1228,12 +1169,10 @@ namespace System.Threading.Tasks
/// <paramref name="endMethod"/> argument is null.</exception>
/// <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
/// asynchronous operation.</returns>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> FromAsync<TResult>(
IAsyncResult asyncResult, Func<IAsyncResult, TResult> endMethod)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.FromAsyncImpl(asyncResult, endMethod, null, m_defaultCreationOptions, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.FromAsyncImpl(asyncResult, endMethod, null, m_defaultCreationOptions, DefaultScheduler);
}
/// <summary>
@@ -1258,12 +1197,10 @@ namespace System.Threading.Tasks
/// value.</exception>
/// <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
/// asynchronous operation.</returns>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> FromAsync<TResult>(
IAsyncResult asyncResult, Func<IAsyncResult, TResult> endMethod, TaskCreationOptions creationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.FromAsyncImpl(asyncResult, endMethod, null, creationOptions, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.FromAsyncImpl(asyncResult, endMethod, null, creationOptions, DefaultScheduler);
}
/// <summary>
@@ -1292,12 +1229,10 @@ namespace System.Threading.Tasks
/// value.</exception>
/// <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
/// asynchronous operation.</returns>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> FromAsync<TResult>(
IAsyncResult asyncResult, Func<IAsyncResult, TResult> endMethod, TaskCreationOptions creationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.FromAsyncImpl(asyncResult, endMethod, null, creationOptions, scheduler, ref stackMark);
+ return TaskFactory<TResult>.FromAsyncImpl(asyncResult, endMethod, null, creationOptions, scheduler);
}
/// <summary>
@@ -1606,7 +1541,7 @@ namespace System.Threading.Tasks
TaskCreationOptions.PreferFairness |
TaskCreationOptions.LongRunning)) != 0)
{
- throw new ArgumentOutOfRangeException(nameof(creationOptions));
+ ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.creationOptions);
}
}
@@ -1798,14 +1733,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAll(Task[] tasks, Action<Task[]> continuationAction)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl(tasks, null, continuationAction, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl(tasks, null, continuationAction, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
@@ -1830,14 +1763,12 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAll(Task[] tasks, Action<Task[]> continuationAction, CancellationToken cancellationToken)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl(tasks, null, continuationAction, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl(tasks, null, continuationAction, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1867,14 +1798,12 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAll(Task[] tasks, Action<Task[]> continuationAction, TaskContinuationOptions continuationOptions)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl(tasks, null, continuationAction, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl(tasks, null, continuationAction, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -1914,15 +1843,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAll(Task[] tasks, Action<Task[]> continuationAction, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl(tasks, null, continuationAction, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl(tasks, null, continuationAction, continuationOptions, cancellationToken, scheduler);
}
/// <summary>
@@ -1942,14 +1869,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Action<Task<TAntecedentResult>[]> continuationAction)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, null, continuationAction, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, null, continuationAction, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
@@ -1975,15 +1900,13 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Action<Task<TAntecedentResult>[]> continuationAction,
CancellationToken cancellationToken)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, null, continuationAction, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, null, continuationAction, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2014,15 +1937,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Action<Task<TAntecedentResult>[]> continuationAction,
TaskContinuationOptions continuationOptions)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, null, continuationAction, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, null, continuationAction, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2063,15 +1984,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Action<Task<TAntecedentResult>[]> continuationAction,
CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, null, continuationAction, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, null, continuationAction, continuationOptions, cancellationToken, scheduler);
}
/// <summary>
@@ -2094,14 +2013,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TResult>(Task[] tasks, Func<Task[], TResult> continuationFunction)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAllImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAllImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
@@ -2130,14 +2047,12 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TResult>(Task[] tasks, Func<Task[], TResult> continuationFunction, CancellationToken cancellationToken)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAllImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAllImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2171,14 +2086,12 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TResult>(Task[] tasks, Func<Task[], TResult> continuationFunction, TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAllImpl(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAllImpl(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2222,15 +2135,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TResult>(Task[] tasks, Func<Task[], TResult> continuationFunction, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAllImpl(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAllImpl(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler);
}
@@ -2255,14 +2166,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TAntecedentResult, TResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>[], TResult> continuationFunction)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2291,15 +2200,13 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TAntecedentResult, TResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>[], TResult> continuationFunction,
CancellationToken cancellationToken)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2334,15 +2241,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TAntecedentResult, TResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>[], TResult> continuationFunction,
TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2387,15 +2292,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAll.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAll<TAntecedentResult, TResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>[], TResult> continuationFunction,
CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAllImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler);
}
//
@@ -2505,7 +2408,23 @@ namespace System.Threading.Tasks
checkArgsOnly = true;
}
// Otherwise, add the completion action and keep going.
- else task.AddCompletionAction(promise);
+ else
+ {
+ task.AddCompletionAction(promise);
+ if (promise.IsCompleted)
+ {
+ // One of the previous tasks that already had its continuation registered may have
+ // raced to complete with our adding the continuation to this task. The completion
+ // routine would have gone through and removed the continuation from all of the tasks
+ // with which it was already registered, but if the race causes this continuation to
+ // be added after that, it'll never be removed. As such, after adding the continuation,
+ // we check to see whether the promise has already completed, and if it has, we try to
+ // manually remove the continuation from this task. If it was already removed, it'll be
+ // a nop, and if we race to remove it, the synchronization in RemoveContinuation will
+ // keep things consistent.
+ task.RemoveContinuation(promise);
+ }
+ }
}
return promise;
@@ -2528,14 +2447,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAny(Task[] tasks, Action<Task> continuationAction)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl(tasks, null, continuationAction, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl(tasks, null, continuationAction, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2559,14 +2476,12 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAny(Task[] tasks, Action<Task> continuationAction, CancellationToken cancellationToken)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl(tasks, null, continuationAction, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl(tasks, null, continuationAction, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2596,14 +2511,12 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAny(Task[] tasks, Action<Task> continuationAction, TaskContinuationOptions continuationOptions)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl(tasks, null, continuationAction, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl(tasks, null, continuationAction, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2643,15 +2556,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAny(Task[] tasks, Action<Task> continuationAction, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl(tasks, null, continuationAction, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl(tasks, null, continuationAction, continuationOptions, cancellationToken, scheduler);
}
@@ -2675,14 +2586,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TResult>(Task[] tasks, Func<Task, TResult> continuationFunction)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAnyImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAnyImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2710,14 +2619,12 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TResult>(Task[] tasks, Func<Task, TResult> continuationFunction, CancellationToken cancellationToken)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAnyImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAnyImpl(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2751,14 +2658,12 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TResult>(Task[] tasks, Func<Task, TResult> continuationFunction, TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAnyImpl(tasks, continuationFunction, null,continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAnyImpl(tasks, continuationFunction, null,continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2802,15 +2707,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TResult>(Task[] tasks, Func<Task, TResult> continuationFunction, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAnyImpl(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAnyImpl(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler);
}
/// <summary>
@@ -2834,12 +2737,10 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TAntecedentResult, TResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>, TResult> continuationFunction)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
- return TaskFactory<TResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2868,15 +2769,13 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TAntecedentResult, TResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>, TResult> continuationFunction,
CancellationToken cancellationToken)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2911,15 +2810,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TAntecedentResult, TResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>, TResult> continuationFunction,
TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -2964,15 +2861,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TResult> ContinueWhenAny<TAntecedentResult, TResult>(Task<TAntecedentResult>[] tasks, Func<Task<TAntecedentResult>, TResult> continuationFunction,
CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationFunction == null) throw new ArgumentNullException(nameof(continuationFunction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<TResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return TaskFactory<TResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, continuationFunction, null, continuationOptions, cancellationToken, scheduler);
}
@@ -2993,14 +2888,12 @@ namespace System.Threading.Tasks
/// <paramref name="tasks"/> array contains a null value.</exception>
/// <exception cref="T:System.ArgumentException">The exception that is thrown when the
/// <paramref name="tasks"/> array is empty.</exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Action<Task<TAntecedentResult>> continuationAction)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, null, continuationAction, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, null, continuationAction, m_defaultContinuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -3025,15 +2918,13 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Action<Task<TAntecedentResult>> continuationAction,
CancellationToken cancellationToken)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, null, continuationAction, m_defaultContinuationOptions, cancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, null, continuationAction, m_defaultContinuationOptions, cancellationToken, DefaultScheduler);
}
/// <summary>
@@ -3064,15 +2955,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Action<Task<TAntecedentResult>> continuationAction,
TaskContinuationOptions continuationOptions)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, null, continuationAction, continuationOptions, m_defaultCancellationToken, DefaultScheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, null, continuationAction, continuationOptions, m_defaultCancellationToken, DefaultScheduler);
}
/// <summary>
@@ -3113,15 +3002,13 @@ namespace System.Threading.Tasks
/// which constrain for which <see cref="System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation
/// will be executed, are illegal with ContinueWhenAny.
/// </remarks>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[] tasks, Action<Task<TAntecedentResult>> continuationAction,
CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
if (continuationAction == null) throw new ArgumentNullException(nameof(continuationAction));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, null, continuationAction, continuationOptions, cancellationToken, scheduler, ref stackMark);
+ return TaskFactory<VoidTaskResult>.ContinueWhenAnyImpl<TAntecedentResult>(tasks, null, continuationAction, continuationOptions, cancellationToken, scheduler);
}
// Check task array and return a defensive copy.
diff --git a/src/mscorlib/src/System/Threading/Tasks/TaskScheduler.cs b/src/mscorlib/src/System/Threading/Tasks/TaskScheduler.cs
index fad3fc06c5..d68c3fedc4 100644
--- a/src/mscorlib/src/System/Threading/Tasks/TaskScheduler.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/TaskScheduler.cs
@@ -16,7 +16,6 @@ using System.Collections.Generic;
using System.Globalization;
using System.Threading;
using System.Security;
-using System.Security.Permissions;
using System.Collections.Concurrent;
using System.Diagnostics.Contracts;
using System.Diagnostics;
diff --git a/src/mscorlib/src/System/Threading/Tasks/future.cs b/src/mscorlib/src/System/Threading/Tasks/future.cs
index 0c3fec89b7..15136f12bf 100644
--- a/src/mscorlib/src/System/Threading/Tasks/future.cs
+++ b/src/mscorlib/src/System/Threading/Tasks/future.cs
@@ -16,7 +16,6 @@ using System.Runtime;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Security;
-using System.Security.Permissions;
using System.Threading;
using System.Diagnostics;
using System.Diagnostics.Contracts;
@@ -128,13 +127,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentException">
/// The <paramref name="function"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Func<TResult> function)
: this(function, null, default(CancellationToken),
TaskCreationOptions.None, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
@@ -152,13 +148,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Func<TResult> function, CancellationToken cancellationToken)
: this(function, null, cancellationToken,
TaskCreationOptions.None, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -179,12 +172,9 @@ namespace System.Threading.Tasks
/// The <paramref name="creationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Func<TResult> function, TaskCreationOptions creationOptions)
: this(function, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -209,12 +199,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Func<TResult> function, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
: this(function, Task.InternalCurrentIfAttached(creationOptions), cancellationToken, creationOptions, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -228,13 +215,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentException">
/// The <paramref name="function"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Func<object, TResult> function, object state)
: this(function, state, null, default(CancellationToken),
TaskCreationOptions.None, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -252,13 +236,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Func<object, TResult> function, object state, CancellationToken cancellationToken)
: this(function, state, null, cancellationToken,
TaskCreationOptions.None, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -280,13 +261,10 @@ namespace System.Threading.Tasks
/// The <paramref name="creationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Func<object, TResult> function, object state, TaskCreationOptions creationOptions)
: this(function, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken),
creationOptions, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
}
@@ -313,23 +291,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task(Func<object, TResult> function, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
: this(function, state, Task.InternalCurrentIfAttached(creationOptions), cancellationToken,
creationOptions, InternalTaskOptions.None, null)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- PossiblyCaptureContext(ref stackMark);
- }
-
- internal Task(
- Func<TResult> valueSelector, Task parent, CancellationToken cancellationToken,
- TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler,
- ref StackCrawlMark stackMark) :
- this(valueSelector, parent, cancellationToken,
- creationOptions, internalOptions, scheduler)
- {
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -341,24 +306,10 @@ namespace System.Threading.Tasks
/// <param name="cancellationToken">The CancellationToken for the task.</param>
/// <param name="creationOptions">Options to control the future's behavior.</param>
/// <param name="internalOptions">Internal options to control the future's behavior.</param>
- /// <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="creationOptions"/> argument specifies
- /// a SelfReplicating <see cref="Task{TResult}"/>, which is illegal."/>.</exception>
internal Task(Func<TResult> valueSelector, Task parent, CancellationToken cancellationToken,
TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler) :
base(valueSelector, null, parent, cancellationToken, creationOptions, internalOptions, scheduler)
{
- if ((internalOptions & InternalTaskOptions.SelfReplicating) != 0)
- {
- ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.creationOptions, ExceptionResource.TaskT_ctor_SelfReplicating);
- }
- }
-
- internal Task(
- Func<object, TResult> valueSelector, object state, Task parent, CancellationToken cancellationToken,
- TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler, ref StackCrawlMark stackMark) :
- this(valueSelector, state, parent, cancellationToken, creationOptions, internalOptions, scheduler)
- {
- PossiblyCaptureContext(ref stackMark);
}
/// <summary>
@@ -371,22 +322,16 @@ namespace System.Threading.Tasks
/// <param name="scheduler">The task scheduler which will be used to execute the future.</param>
/// <param name="creationOptions">Options to control the future's behavior.</param>
/// <param name="internalOptions">Internal options to control the future's behavior.</param>
- /// <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="creationOptions"/> argument specifies
- /// a SelfReplicating <see cref="Task{TResult}"/>, which is illegal."/>.</exception>
internal Task(Delegate valueSelector, object state, Task parent, CancellationToken cancellationToken,
TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler) :
base(valueSelector, state, parent, cancellationToken, creationOptions, internalOptions, scheduler)
{
- if ((internalOptions & InternalTaskOptions.SelfReplicating) != 0)
- {
- ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.creationOptions, ExceptionResource.TaskT_ctor_SelfReplicating);
- }
}
// Internal method used by TaskFactory<TResult>.StartNew() methods
internal static Task<TResult> StartNew(Task parent, Func<TResult> function, CancellationToken cancellationToken,
- TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler, ref StackCrawlMark stackMark)
+ TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
{
if (function == null)
{
@@ -396,13 +341,9 @@ namespace System.Threading.Tasks
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.scheduler);
}
- if ((internalOptions & InternalTaskOptions.SelfReplicating) != 0)
- {
- ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.creationOptions, ExceptionResource.TaskT_ctor_SelfReplicating);
- }
// Create and schedule the future.
- Task<TResult> f = new Task<TResult>(function, parent, cancellationToken, creationOptions, internalOptions | InternalTaskOptions.QueuedByRuntime, scheduler, ref stackMark);
+ Task<TResult> f = new Task<TResult>(function, parent, cancellationToken, creationOptions, internalOptions | InternalTaskOptions.QueuedByRuntime, scheduler);
f.ScheduleAndStart(false);
return f;
@@ -410,7 +351,7 @@ namespace System.Threading.Tasks
// Internal method used by TaskFactory<TResult>.StartNew() methods
internal static Task<TResult> StartNew(Task parent, Func<object, TResult> function, object state, CancellationToken cancellationToken,
- TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler, ref StackCrawlMark stackMark)
+ TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
{
if (function == null)
{
@@ -420,13 +361,9 @@ namespace System.Threading.Tasks
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.scheduler);
}
- if ((internalOptions & InternalTaskOptions.SelfReplicating) != 0)
- {
- ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.creationOptions, ExceptionResource.TaskT_ctor_SelfReplicating);
- }
// Create and schedule the future.
- Task<TResult> f = new Task<TResult>(function, state, parent, cancellationToken, creationOptions, internalOptions | InternalTaskOptions.QueuedByRuntime, scheduler, ref stackMark);
+ Task<TResult> f = new Task<TResult>(function, state, parent, cancellationToken, creationOptions, internalOptions | InternalTaskOptions.QueuedByRuntime, scheduler);
f.ScheduleAndStart(false);
return f;
@@ -726,11 +663,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="continuationAction"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>> continuationAction)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None);
}
@@ -754,11 +689,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>> continuationAction, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None);
}
@@ -784,11 +717,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="scheduler"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>> continuationAction, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, scheduler, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, scheduler, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -819,11 +750,9 @@ namespace System.Threading.Tasks
/// The <paramref name="continuationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>> continuationAction, TaskContinuationOptions continuationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, TaskScheduler.Current, default(CancellationToken), continuationOptions, ref stackMark);
+ return ContinueWith(continuationAction, TaskScheduler.Current, default(CancellationToken), continuationOptions);
}
/// <summary>
@@ -864,17 +793,15 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>> continuationAction, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ return ContinueWith(continuationAction, scheduler, cancellationToken, continuationOptions);
}
// Same as the above overload, only with a stack mark.
internal Task ContinueWith(Action<Task<TResult>> continuationAction, TaskScheduler scheduler, CancellationToken cancellationToken,
- TaskContinuationOptions continuationOptions, ref StackCrawlMark stackMark)
+ TaskContinuationOptions continuationOptions)
{
if (continuationAction == null)
{
@@ -895,8 +822,7 @@ namespace System.Threading.Tasks
Task continuationTask = new ContinuationTaskFromResultTask<TResult>(
this, continuationAction, null,
- creationOptions, internalOptions,
- ref stackMark
+ creationOptions, internalOptions
);
// Register the continuation. If synchronous execution is requested, this may
@@ -926,11 +852,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="continuationAction"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>, Object> continuationAction, Object state)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, state, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None);
}
@@ -955,11 +879,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>, Object> continuationAction, Object state,CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, state, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None);
}
@@ -986,11 +908,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="scheduler"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>, Object> continuationAction, Object state, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, scheduler, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith(continuationAction, state, scheduler, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -1022,11 +942,9 @@ namespace System.Threading.Tasks
/// The <paramref name="continuationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>, Object> continuationAction, Object state,TaskContinuationOptions continuationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, TaskScheduler.Current, default(CancellationToken), continuationOptions, ref stackMark);
+ return ContinueWith(continuationAction, state, TaskScheduler.Current, default(CancellationToken), continuationOptions);
}
/// <summary>
@@ -1068,17 +986,15 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task ContinueWith(Action<Task<TResult>, Object> continuationAction, Object state, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith(continuationAction, state, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ return ContinueWith(continuationAction, state, scheduler, cancellationToken, continuationOptions);
}
// Same as the above overload, only with a stack mark.
internal Task ContinueWith(Action<Task<TResult>, Object> continuationAction, Object state, TaskScheduler scheduler, CancellationToken cancellationToken,
- TaskContinuationOptions continuationOptions, ref StackCrawlMark stackMark)
+ TaskContinuationOptions continuationOptions)
{
if (continuationAction == null)
{
@@ -1099,8 +1015,7 @@ namespace System.Threading.Tasks
Task continuationTask = new ContinuationTaskFromResultTask<TResult>(
this, continuationAction, state,
- creationOptions, internalOptions,
- ref stackMark
+ creationOptions, internalOptions
);
// Register the continuation. If synchronous execution is requested, this may
@@ -1133,11 +1048,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="continuationFunction"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, TNewResult> continuationFunction)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None);
}
@@ -1164,11 +1077,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, TNewResult> continuationFunction, CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None);
}
/// <summary>
@@ -1196,11 +1107,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="scheduler"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, TNewResult> continuationFunction, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, scheduler, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, scheduler, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -1240,11 +1149,9 @@ namespace System.Threading.Tasks
/// The <paramref name="continuationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, TNewResult> continuationFunction, TaskContinuationOptions continuationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, TaskScheduler.Current, default(CancellationToken), continuationOptions, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, TaskScheduler.Current, default(CancellationToken), continuationOptions);
}
/// <summary>
@@ -1295,17 +1202,15 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, TNewResult> continuationFunction, CancellationToken cancellationToken,
TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, scheduler, cancellationToken, continuationOptions);
}
// Same as the above overload, just with a stack mark.
internal Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, TNewResult> continuationFunction, TaskScheduler scheduler,
- CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, ref StackCrawlMark stackMark)
+ CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null)
{
@@ -1326,8 +1231,7 @@ namespace System.Threading.Tasks
Task<TNewResult> continuationFuture = new ContinuationResultTaskFromResultTask<TResult,TNewResult>(
this, continuationFunction, null,
- creationOptions, internalOptions,
- ref stackMark
+ creationOptions, internalOptions
);
// Register the continuation. If synchronous execution is requested, this may
@@ -1360,11 +1264,9 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="continuationFunction"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, Object, TNewResult> continuationFunction, Object state)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, state, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, state, TaskScheduler.Current, default(CancellationToken), TaskContinuationOptions.None);
}
@@ -1392,12 +1294,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, Object, TNewResult> continuationFunction, Object state,
CancellationToken cancellationToken)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, state, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, state, TaskScheduler.Current, cancellationToken, TaskContinuationOptions.None);
}
/// <summary>
@@ -1426,12 +1326,10 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ArgumentNullException">
/// The <paramref name="scheduler"/> argument is null.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, Object, TNewResult> continuationFunction, Object state,
TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, state, scheduler, default(CancellationToken), TaskContinuationOptions.None, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, state, scheduler, default(CancellationToken), TaskContinuationOptions.None);
}
/// <summary>
@@ -1472,12 +1370,10 @@ namespace System.Threading.Tasks
/// The <paramref name="continuationOptions"/> argument specifies an invalid value for <see
/// cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, Object, TNewResult> continuationFunction, Object state,
TaskContinuationOptions continuationOptions)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, state, TaskScheduler.Current, default(CancellationToken), continuationOptions, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, state, TaskScheduler.Current, default(CancellationToken), continuationOptions);
}
/// <summary>
@@ -1529,17 +1425,15 @@ namespace System.Threading.Tasks
/// <exception cref="T:System.ObjectDisposedException">The provided <see cref="System.Threading.CancellationToken">CancellationToken</see>
/// has already been disposed.
/// </exception>
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var have to be marked non-inlineable
public Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, Object, TNewResult> continuationFunction, Object state,
CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return ContinueWith<TNewResult>(continuationFunction, state, scheduler, cancellationToken, continuationOptions, ref stackMark);
+ return ContinueWith<TNewResult>(continuationFunction, state, scheduler, cancellationToken, continuationOptions);
}
// Same as the above overload, just with a stack mark.
internal Task<TNewResult> ContinueWith<TNewResult>(Func<Task<TResult>, Object, TNewResult> continuationFunction, Object state,
- TaskScheduler scheduler, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, ref StackCrawlMark stackMark)
+ TaskScheduler scheduler, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
{
if (continuationFunction == null)
{
@@ -1560,8 +1454,7 @@ namespace System.Threading.Tasks
Task<TNewResult> continuationFuture = new ContinuationResultTaskFromResultTask<TResult,TNewResult>(
this, continuationFunction, state,
- creationOptions, internalOptions,
- ref stackMark
+ creationOptions, internalOptions
);
// Register the continuation. If synchronous execution is requested, this may
diff --git a/src/mscorlib/src/System/Threading/Thread.cs b/src/mscorlib/src/System/Threading/Thread.cs
index 8294c20c4d..d28002729a 100644
--- a/src/mscorlib/src/System/Threading/Thread.cs
+++ b/src/mscorlib/src/System/Threading/Thread.cs
@@ -19,8 +19,6 @@ namespace System.Threading {
using System.Runtime;
using System.Runtime.InteropServices;
using System;
- using System.Security.Permissions;
- using System.Security.Principal;
using System.Globalization;
using System.Collections.Generic;
using System.Runtime.Serialization;
@@ -103,11 +101,7 @@ namespace System.Threading {
}
}
- // deliberately not [serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_Thread))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class Thread : RuntimeThread, _Thread
+ public sealed class Thread : RuntimeThread
{
/*=========================================================================
** Data accessed from managed code that needs to be defined in
@@ -120,10 +114,6 @@ namespace System.Threading {
private String m_Name;
private Delegate m_Delegate; // Delegate
-#if FEATURE_LEAK_CULTURE_INFO
- private CultureInfo m_CurrentCulture;
- private CultureInfo m_CurrentUICulture;
-#endif
private Object m_ThreadStartArg;
/*=========================================================================
@@ -149,47 +139,25 @@ namespace System.Threading {
private bool m_ForbidExecutionContextMutation;
#endif
- /*=========================================================================
- ** This manager is responsible for storing the global data that is
- ** shared amongst all the thread local stores.
- =========================================================================*/
- static private LocalDataStoreMgr s_LocalDataStoreMgr;
-
- /*=========================================================================
- ** Thread-local data store
- =========================================================================*/
- [ThreadStatic]
- static private LocalDataStoreHolder s_LocalDataStore;
-
// Do not move! Order of above fields needs to be preserved for alignment
// with native code
// See code:#threadCultureInfo
-#if !FEATURE_LEAK_CULTURE_INFO
[ThreadStatic]
internal static CultureInfo m_CurrentCulture;
[ThreadStatic]
internal static CultureInfo m_CurrentUICulture;
-#endif
static AsyncLocal<CultureInfo> s_asyncLocalCurrentCulture;
static AsyncLocal<CultureInfo> s_asyncLocalCurrentUICulture;
static void AsyncLocalSetCurrentCulture(AsyncLocalValueChangedArgs<CultureInfo> args)
{
-#if FEATURE_LEAK_CULTURE_INFO
- Thread.CurrentThread.m_CurrentCulture = args.CurrentValue;
-#else
m_CurrentCulture = args.CurrentValue;
-#endif // FEATURE_LEAK_CULTURE_INFO
}
static void AsyncLocalSetCurrentUICulture(AsyncLocalValueChangedArgs<CultureInfo> args)
{
-#if FEATURE_LEAK_CULTURE_INFO
- Thread.CurrentThread.m_CurrentUICulture = args.CurrentValue;
-#else
m_CurrentUICulture = args.CurrentValue;
-#endif // FEATURE_LEAK_CULTURE_INFO
}
// Adding an empty default ctor for annotation purposes
@@ -209,7 +177,7 @@ namespace System.Threading {
SetStartHelper((Delegate)start,0); //0 will setup Thread with default stackSize
}
- public Thread(ThreadStart start, int maxStackSize) {
+ internal Thread(ThreadStart start, int maxStackSize) {
if (start == null) {
throw new ArgumentNullException(nameof(start));
}
@@ -226,7 +194,7 @@ namespace System.Threading {
SetStartHelper((Delegate)start, 0);
}
- public Thread(ParameterizedThreadStart start, int maxStackSize) {
+ internal Thread(ParameterizedThreadStart start, int maxStackSize) {
if (start == null) {
throw new ArgumentNullException(nameof(start));
}
@@ -236,7 +204,6 @@ namespace System.Threading {
SetStartHelper((Delegate)start, maxStackSize);
}
- [ComVisible(false)]
public override int GetHashCode()
{
return m_ManagedThreadId;
@@ -244,7 +211,6 @@ namespace System.Threading {
extern public new int ManagedThreadId
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
get;
}
@@ -310,14 +276,11 @@ namespace System.Threading {
// If we reach here with a null delegate, something is broken. But we'll let the StartInternal method take care of
// reporting an error. Just make sure we dont try to dereference a null delegate.
ThreadHelper t = (ThreadHelper)(m_Delegate.Target);
- ExecutionContext ec = ExecutionContext.Capture(
- ref stackMark,
- ExecutionContext.CaptureOptions.IgnoreSyncCtx);
+ ExecutionContext ec = ExecutionContext.Capture();
t.SetExecutionContextHelper(ec);
}
- IPrincipal principal = null;
- StartInternal(principal, ref stackMark);
+ StartInternal(ref stackMark);
}
internal ExecutionContext ExecutionContext
@@ -333,30 +296,7 @@ namespace System.Threading {
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void StartInternal(IPrincipal principal, ref StackCrawlMark stackMark);
-#if FEATURE_COMPRESSEDSTACK
- /// <internalonly/>
- [DynamicSecurityMethodAttribute()]
- [Obsolete("Thread.SetCompressedStack is no longer supported. Please use the System.Threading.CompressedStack class")]
- public void SetCompressedStack( CompressedStack stack )
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ThreadAPIsNotSupported"));
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal extern IntPtr SetAppDomainStack( SafeCompressedStackHandle csHandle);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- internal extern void RestoreAppDomainStack( IntPtr appDomainStack);
-
-
- /// <internalonly/>
- [Obsolete("Thread.GetCompressedStack is no longer supported. Please use the System.Threading.CompressedStack class")]
- public CompressedStack GetCompressedStack()
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ThreadAPIsNotSupported"));
- }
-#endif // #if FEATURE_COMPRESSEDSTACK
+ private extern void StartInternal(ref StackCrawlMark stackMark);
// Helper method to get a logical thread ID for StringBuilder (for
@@ -366,43 +306,6 @@ namespace System.Threading {
internal extern static IntPtr InternalGetCurrentThread();
/*=========================================================================
- ** Raises a ThreadAbortException in the thread, which usually
- ** results in the thread's death. The ThreadAbortException is a special
- ** exception that is not catchable. The finally clauses of all try
- ** statements will be executed before the thread dies. This includes the
- ** finally that a thread might be executing at the moment the Abort is raised.
- ** The thread is not stopped immediately--you must Join on the
- ** thread to guarantee it has stopped.
- ** It is possible for a thread to do an unbounded amount of computation in
- ** the finally's and thus indefinitely delay the threads death.
- ** If Abort() is called on a thread that has not been started, the thread
- ** will abort when Start() is called.
- ** If Abort is called twice on the same thread, a DuplicateThreadAbort
- ** exception is thrown.
- =========================================================================*/
-#pragma warning disable 618
- [SecurityPermissionAttribute(SecurityAction.Demand, ControlThread = true)]
-#pragma warning restore 618
- public void Abort()
- {
- AbortInternal();
- }
-
- // Internal helper (since we can't place security demands on
- // ecalls/fcalls).
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void AbortInternal();
-
- public bool Join(TimeSpan timeout)
- {
- long tm = (long)timeout.TotalMilliseconds;
- if (tm < -1 || tm > (long) Int32.MaxValue)
- throw new ArgumentOutOfRangeException(nameof(timeout), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1"));
-
- return Join((int)tm);
- }
-
- /*=========================================================================
** Suspends the current thread for timeout milliseconds. If timeout == 0,
** forces the thread to give up the remainer of its timeslice. If timeout
** == Timeout.Infinite, no timeout will occur.
@@ -435,10 +338,8 @@ namespace System.Threading {
a explict busy loop because the hardware can be informed that it is busy waiting. */
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern void SpinWaitInternal(int iterations);
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static new void SpinWait(int iterations)
{
SpinWaitInternal(iterations);
@@ -446,17 +347,14 @@ namespace System.Threading {
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern bool YieldInternal();
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- public static new bool Yield()
+ internal static new bool Yield()
{
return YieldInternal();
}
public static new Thread CurrentThread {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
get {
Contract.Ensures(Contract.Result<Thread>() != null);
return GetCurrentThreadNative();
@@ -467,8 +365,7 @@ namespace System.Threading {
private void SetStartHelper(Delegate start, int maxStackSize)
{
- // We only support default stacks in CoreCLR
- Debug.Assert(maxStackSize == 0);
+ Debug.Assert(maxStackSize >= 0);
ThreadHelper threadStartCallBack = new ThreadHelper(start);
if(start is ThreadStart)
@@ -481,10 +378,6 @@ namespace System.Threading {
}
}
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern ulong GetProcessDefaultStackSize();
-
/*=========================================================================
** PRIVATE Sets the IThreadable interface for the thread. Assumes that
** start != null.
@@ -495,122 +388,21 @@ namespace System.Threading {
/*=========================================================================
** Clean up the thread when it goes away.
=========================================================================*/
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
~Thread()
{
// Delegate to the unmanaged portion.
InternalFinalize();
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern void InternalFinalize();
#if FEATURE_COMINTEROP_APARTMENT_SUPPORT
- /*=========================================================================
- ** An unstarted thread can be marked to indicate that it will host a
- ** single-threaded or multi-threaded apartment.
- **
- ** Exceptions: ArgumentException if state is not a valid apartment state
- ** (ApartmentSTA or ApartmentMTA).
- =========================================================================*/
- [Obsolete("The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.", false)]
- public ApartmentState ApartmentState
- {
- get
- {
- return (ApartmentState)GetApartmentStateNative();
- }
-
- set
- {
- SetApartmentStateNative((int)value, true);
- }
- }
-
- public void SetApartmentState(ApartmentState state)
- {
- bool result = SetApartmentStateHelper(state, true);
- if (!result)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ApartmentStateSwitchFailed"));
- }
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern void StartupSetApartmentStateInternal();
#endif // FEATURE_COMINTEROP_APARTMENT_SUPPORT
- /*=========================================================================
- ** Allocates an un-named data slot. The slot is allocated on ALL the
- ** threads.
- =========================================================================*/
- public static LocalDataStoreSlot AllocateDataSlot()
- {
- return LocalDataStoreManager.AllocateDataSlot();
- }
-
- /*=========================================================================
- ** Allocates a named data slot. The slot is allocated on ALL the
- ** threads. Named data slots are "public" and can be manipulated by
- ** anyone.
- =========================================================================*/
- public static LocalDataStoreSlot AllocateNamedDataSlot(String name)
- {
- return LocalDataStoreManager.AllocateNamedDataSlot(name);
- }
-
- /*=========================================================================
- ** Looks up a named data slot. If the name has not been used, a new slot is
- ** allocated. Named data slots are "public" and can be manipulated by
- ** anyone.
- =========================================================================*/
- public static LocalDataStoreSlot GetNamedDataSlot(String name)
- {
- return LocalDataStoreManager.GetNamedDataSlot(name);
- }
-
- /*=========================================================================
- ** Frees a named data slot. The slot is allocated on ALL the
- ** threads. Named data slots are "public" and can be manipulated by
- ** anyone.
- =========================================================================*/
- public static void FreeNamedDataSlot(String name)
- {
- LocalDataStoreManager.FreeNamedDataSlot(name);
- }
-
- /*=========================================================================
- ** Retrieves the value from the specified slot on the current thread, for that thread's current domain.
- =========================================================================*/
- public static Object GetData(LocalDataStoreSlot slot)
- {
- LocalDataStoreHolder dls = s_LocalDataStore;
- if (dls == null)
- {
- // Make sure to validate the slot even if we take the quick path
- LocalDataStoreManager.ValidateSlot(slot);
- return null;
- }
-
- return dls.Store.GetData(slot);
- }
-
- /*=========================================================================
- ** Sets the data in the specified slot on the currently running thread, for that thread's current domain.
- =========================================================================*/
- public static void SetData(LocalDataStoreSlot slot, Object data)
- {
- LocalDataStoreHolder dls = s_LocalDataStore;
-
- // Create new DLS if one hasn't been created for this domain for this thread
- if (dls == null) {
- dls = LocalDataStoreManager.CreateLocalDataStore();
- s_LocalDataStore = dls;
- }
-
- dls.Store.SetData(slot, data);
- }
-
-
// #threadCultureInfo
//
// Background:
@@ -623,10 +415,6 @@ namespace System.Threading {
// - thread instance member cultures (CurrentCulture and CurrentUICulture)
// confined within AppDomains
// - changes to these properties don't affect the underlying native thread
- //
- // Ifdef:
- // FEATURE_LEAK_CULTURE_INFO : CultureInfos can leak across AppDomains, not
- // enabled in Silverlight
//
// Implementation notes:
// In Silverlight, culture members thread static (per Thread, per AppDomain).
@@ -636,10 +424,6 @@ namespace System.Threading {
// now need to special case resource lookup for mscorlib, which transitions to the
// default domain to lookup resources. See Environment.cs for more details.
//
-#if FEATURE_LEAK_CULTURE_INFO
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- static extern private bool nativeGetSafeCulture(Thread t, int appDomainId, bool isUI, ref CultureInfo safeCulture);
-#endif // FEATURE_LEAK_CULTURE_INFO
// As the culture can be customized object then we cannot hold any
// reference to it before we check if it is safe because the app domain
@@ -680,16 +464,8 @@ namespace System.Threading {
// If you add more pre-conditions to this method, check to see if you also need to
// add them to CultureInfo.DefaultThreadCurrentUICulture.set.
-#if FEATURE_LEAK_CULTURE_INFO
- if (nativeSetThreadUILocale(value.SortName) == false)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidResourceCultureName", value.Name));
- }
- value.StartCrossDomainTracking();
-#else
if (m_CurrentUICulture == null && m_CurrentCulture == null)
nativeInitCultureAccessors();
-#endif
if (!AppContextSwitches.NoAsyncCurrentCulture)
{
@@ -708,8 +484,6 @@ namespace System.Threading {
}
}
-#if FEATURE_LEAK_CULTURE_INFO
-#endif
internal CultureInfo GetCurrentUICultureNoAppX() {
Contract.Ensures(Contract.Result<CultureInfo>() != null);
@@ -725,25 +499,11 @@ namespace System.Threading {
return (appDomainDefaultUICulture != null ? appDomainDefaultUICulture : CultureInfo.UserDefaultUICulture);
}
-#if FEATURE_LEAK_CULTURE_INFO
- CultureInfo culture = null;
-
- if (!nativeGetSafeCulture(this, GetDomainID(), true, ref culture) || culture == null) {
- return CultureInfo.UserDefaultUICulture;
- }
-
- return culture;
-#else
return m_CurrentUICulture;
#endif
-#endif
}
// This returns the exposed context for a given context ID.
-#if FEATURE_LEAK_CULTURE_INFO
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- static extern private bool nativeSetThreadUILocale(String locale);
-#endif
// As the culture can be customized object then we cannot hold any
// reference to it before we check if it is safe because the app domain
@@ -772,8 +532,6 @@ namespace System.Threading {
}
}
-#if FEATURE_LEAK_CULTURE_INFO
-#endif
set {
if (null==value) {
throw new ArgumentNullException(nameof(value));
@@ -783,16 +541,8 @@ namespace System.Threading {
// If you add more pre-conditions to this method, check to see if you also need to
// add them to CultureInfo.DefaultThreadCurrentCulture.set.
-#if FEATURE_LEAK_CULTURE_INFO
- //If we can't set the nativeThreadLocale, we'll just let it stay
- //at whatever value it had before. This allows people who use
- //just managed code not to be limited by the underlying OS.
- CultureInfo.nativeSetThreadLocale(value.SortName);
- value.StartCrossDomainTracking();
-#else
if (m_CurrentCulture == null && m_CurrentUICulture == null)
nativeInitCultureAccessors();
-#endif
if (!AppContextSwitches.NoAsyncCurrentCulture)
{
@@ -810,8 +560,6 @@ namespace System.Threading {
}
}
-#if FEATURE_LEAK_CULTURE_INFO
-#endif
private CultureInfo GetCurrentCultureNoAppX() {
#if FEATURE_COREFX_GLOBALIZATION
@@ -826,25 +574,13 @@ namespace System.Threading {
return (appDomainDefaultCulture != null ? appDomainDefaultCulture : CultureInfo.UserDefaultCulture);
}
-#if FEATURE_LEAK_CULTURE_INFO
- CultureInfo culture = null;
-
- if (!nativeGetSafeCulture(this, GetDomainID(), false, ref culture) || culture == null) {
- return CultureInfo.UserDefaultCulture;
- }
-
- return culture;
-#else
return m_CurrentCulture;
#endif
-#endif
}
-#if !FEATURE_LEAK_CULTURE_INFO
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
private static extern void nativeInitCultureAccessors();
-#endif
/*======================================================================
** Returns the current domain in which current thread is running.
@@ -855,7 +591,7 @@ namespace System.Threading {
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern AppDomain GetFastDomainInternal();
- public static AppDomain GetDomain()
+ internal static AppDomain GetDomain()
{
Contract.Ensures(Contract.Result<AppDomain>() != null);
@@ -872,7 +608,7 @@ namespace System.Threading {
/*
* This returns a unique id to identify an appdomain.
*/
- public static int GetDomainID()
+ internal static int GetDomainID()
{
return GetDomain().GetId();
}
@@ -899,267 +635,9 @@ namespace System.Threading {
[SuppressUnmanagedCodeSecurity]
private static extern void InformThreadNameChange(ThreadHandle t, String name, int len);
- internal Object AbortReason {
- get {
- object result = null;
- try
- {
- result = GetAbortReason();
- }
- catch (Exception e)
- {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ExceptionStateCrossAppDomain"), e);
- }
- return result;
- }
- set { SetAbortReason(value); }
- }
-
- /*=========================================================================
- ** Volatile Read & Write and MemoryBarrier methods.
- ** Provides the ability to read and write values ensuring that the values
- ** are read/written each time they are accessed.
- =========================================================================*/
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static byte VolatileRead(ref byte address)
- {
- byte ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static short VolatileRead(ref short address)
- {
- short ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static int VolatileRead(ref int address)
- {
- int ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static long VolatileRead(ref long address)
- {
- long ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static sbyte VolatileRead(ref sbyte address)
- {
- sbyte ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static ushort VolatileRead(ref ushort address)
- {
- ushort ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static uint VolatileRead(ref uint address)
- {
- uint ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static IntPtr VolatileRead(ref IntPtr address)
- {
- IntPtr ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static UIntPtr VolatileRead(ref UIntPtr address)
- {
- UIntPtr ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static ulong VolatileRead(ref ulong address)
- {
- ulong ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static float VolatileRead(ref float address)
- {
- float ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static double VolatileRead(ref double address)
- {
- double ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static Object VolatileRead(ref Object address)
- {
- Object ret = address;
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- return ret;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref byte address, byte value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref short address, short value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref int address, int value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref long address, long value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref sbyte address, sbyte value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref ushort address, ushort value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref uint address, uint value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref IntPtr address, IntPtr value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref UIntPtr address, UIntPtr value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref ulong address, ulong value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref float address, float value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref double address, double value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
- public static void VolatileWrite(ref Object address, Object value)
- {
- MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
- address = value;
- }
-
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern void MemoryBarrier();
- private static LocalDataStoreMgr LocalDataStoreManager
- {
- get
- {
- if (s_LocalDataStoreMgr == null)
- {
- Interlocked.CompareExchange(ref s_LocalDataStoreMgr, new LocalDataStoreMgr(), null);
- }
-
- return s_LocalDataStoreMgr;
- }
- }
-
- // Helper function to set the AbortReason for a thread abort.
- // Checks that they're not alredy set, and then atomically updates
- // the reason info (object + ADID).
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal extern void SetAbortReason(Object o);
-
- // Helper function to retrieve the AbortReason from a thread
- // abort. Will perform cross-AppDomain marshalling if the object
- // lives in a different AppDomain from the requester.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal extern Object GetAbortReason();
-
- // Helper function to clear the AbortReason. Takes care of
- // AppDomain related cleanup if required.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal extern void ClearAbortReason();
-
-
} // End of class Thread
// declaring a local var of this enum type and passing it by ref into a function that needs to do a
diff --git a/src/mscorlib/src/System/Threading/ThreadAbortException.cs b/src/mscorlib/src/System/Threading/ThreadAbortException.cs
index 09ad4e1bd6..25925048bf 100644
--- a/src/mscorlib/src/System/Threading/ThreadAbortException.cs
+++ b/src/mscorlib/src/System/Threading/ThreadAbortException.cs
@@ -21,7 +21,6 @@ namespace System.Threading
using System.Runtime.Serialization;
using System.Runtime.CompilerServices;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public sealed class ThreadAbortException : SystemException
{
@@ -36,10 +35,5 @@ namespace System.Threading
: base(info, context)
{
}
-
- public Object ExceptionState
- {
- get {return Thread.CurrentThread.AbortReason;}
- }
}
}
diff --git a/src/mscorlib/src/System/Threading/ThreadInterruptedException.cs b/src/mscorlib/src/System/Threading/ThreadInterruptedException.cs
index 0056611955..71c09649e2 100644
--- a/src/mscorlib/src/System/Threading/ThreadInterruptedException.cs
+++ b/src/mscorlib/src/System/Threading/ThreadInterruptedException.cs
@@ -17,7 +17,6 @@ namespace System.Threading {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class ThreadInterruptedException : SystemException {
public ThreadInterruptedException()
diff --git a/src/mscorlib/src/System/Threading/ThreadLocal.cs b/src/mscorlib/src/System/Threading/ThreadLocal.cs
index 2b996cb34d..eedf6d0c81 100644
--- a/src/mscorlib/src/System/Threading/ThreadLocal.cs
+++ b/src/mscorlib/src/System/Threading/ThreadLocal.cs
@@ -16,7 +16,6 @@
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
using System.Collections.Generic;
-using System.Security.Permissions;
using System.Diagnostics;
using System.Diagnostics.Contracts;
diff --git a/src/mscorlib/src/System/Threading/ThreadPool.cs b/src/mscorlib/src/System/Threading/ThreadPool.cs
index 451b15d22f..adf0615819 100644
--- a/src/mscorlib/src/System/Threading/ThreadPool.cs
+++ b/src/mscorlib/src/System/Threading/ThreadPool.cs
@@ -11,36 +11,20 @@
**
=============================================================================*/
-#pragma warning disable 0420
-
-/*
- * Below you'll notice two sets of APIs that are separated by the
- * use of 'Unsafe' in their names. The unsafe versions are called
- * that because they do not propagate the calling stack onto the
- * worker thread. This allows code to lose the calling stack and
- * thereby elevate its security privileges. Note that this operation
- * is much akin to the combined ability to control security policy
- * and control security evidence. With these privileges, a person
- * can gain the right to load assemblies that are fully trusted which
- * then assert full trust and can call any code they want regardless
- * of the previous stack information.
- */
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Diagnostics.Contracts;
+using System.Diagnostics.Tracing;
+using System.Runtime.CompilerServices;
+using System.Runtime.ConstrainedExecution;
+using System.Runtime.InteropServices;
+using System.Security;
+using Microsoft.Win32;
namespace System.Threading
{
- using System.Security;
- using System.Security.Permissions;
- using System;
- using Microsoft.Win32;
- using System.Runtime.CompilerServices;
- using System.Runtime.ConstrainedExecution;
- using System.Runtime.InteropServices;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Diagnostics.CodeAnalysis;
- using System.Diagnostics.Tracing;
-
internal static class ThreadPoolGlobals
{
//Per-appDomain quantum (in ms) for which the thread keeps processing
@@ -55,78 +39,76 @@ namespace System.Threading
public static bool enableWorkerTracking;
public static readonly ThreadPoolWorkQueue workQueue = new ThreadPoolWorkQueue();
-
- static ThreadPoolGlobals()
- {
- }
}
internal sealed class ThreadPoolWorkQueue
{
- // Simple sparsely populated array to allow lock-free reading.
- internal class SparseArray<T> where T : class
+ internal static class WorkStealingQueueList
{
- private volatile T[] m_array;
+ private static volatile WorkStealingQueue[] _queues = new WorkStealingQueue[0];
- internal SparseArray(int initialSize)
- {
- m_array = new T[initialSize];
- }
+ public static WorkStealingQueue[] Queues => _queues;
- internal T[] Current
- {
- get { return m_array; }
- }
-
- internal int Add(T e)
+ public static void Add(WorkStealingQueue queue)
{
+ Debug.Assert(queue != null);
while (true)
{
- T[] array = m_array;
- lock (array)
+ WorkStealingQueue[] oldQueues = _queues;
+ Debug.Assert(Array.IndexOf(oldQueues, queue) == -1);
+
+ var newQueues = new WorkStealingQueue[oldQueues.Length + 1];
+ Array.Copy(oldQueues, 0, newQueues, 0, oldQueues.Length);
+ newQueues[newQueues.Length - 1] = queue;
+ if (Interlocked.CompareExchange(ref _queues, newQueues, oldQueues) == oldQueues)
{
- for (int i = 0; i < array.Length; i++)
- {
- if (array[i] == null)
- {
- Volatile.Write(ref array[i], e);
- return i;
- }
- else if (i == array.Length - 1)
- {
- // Must resize. If there was a race condition, we start over again.
- if (array != m_array)
- continue;
-
- T[] newArray = new T[array.Length * 2];
- Array.Copy(array, newArray, i + 1);
- newArray[i + 1] = e;
- m_array = newArray;
- return i + 1;
- }
- }
+ break;
}
}
}
- internal void Remove(T e)
+ public static void Remove(WorkStealingQueue queue)
{
- T[] array = m_array;
- lock (array)
+ Debug.Assert(queue != null);
+ while (true)
{
- for (int i = 0; i < m_array.Length; i++)
+ WorkStealingQueue[] oldQueues = _queues;
+ if (oldQueues.Length == 0)
{
- if (m_array[i] == e)
- {
- Volatile.Write(ref m_array[i], null);
- break;
- }
+ return;
+ }
+
+ int pos = Array.IndexOf(oldQueues, queue);
+ if (pos == -1)
+ {
+ Debug.Fail("Should have found the queue");
+ return;
+ }
+
+ var newQueues = new WorkStealingQueue[oldQueues.Length - 1];
+ if (pos == 0)
+ {
+ Array.Copy(oldQueues, 1, newQueues, 0, newQueues.Length);
+ }
+ else if (pos == oldQueues.Length - 1)
+ {
+ Array.Copy(oldQueues, 0, newQueues, 0, newQueues.Length);
+ }
+ else
+ {
+ Array.Copy(oldQueues, 0, newQueues, 0, pos);
+ Array.Copy(oldQueues, pos + 1, newQueues, pos, newQueues.Length - pos);
+ }
+
+ if (Interlocked.CompareExchange(ref _queues, newQueues, oldQueues) == oldQueues)
+ {
+ break;
}
}
}
}
- internal class WorkStealingQueue
+ internal sealed class WorkStealingQueue
{
private const int INITIAL_SIZE = 32;
internal volatile IThreadPoolWorkItem[] m_array = new IThreadPoolWorkItem[INITIAL_SIZE];
@@ -142,7 +124,7 @@ namespace System.Threading
private volatile int m_headIndex = START_INDEX;
private volatile int m_tailIndex = START_INDEX;
- private SpinLock m_foreignLock = new SpinLock(false);
+ private SpinLock m_foreignLock = new SpinLock(enableThreadOwnerTracking:false);
public void LocalPush(IThreadPoolWorkItem obj)
{
@@ -176,7 +158,7 @@ namespace System.Threading
finally
{
if (lockTaken)
- m_foreignLock.Exit(true);
+ m_foreignLock.Exit(useMemoryBarrier:true);
}
}
@@ -201,7 +183,7 @@ namespace System.Threading
if (count >= m_mask)
{
// We're full; expand the queue by doubling its size.
- IThreadPoolWorkItem[] newArray = new IThreadPoolWorkItem[m_array.Length << 1];
+ var newArray = new IThreadPoolWorkItem[m_array.Length << 1];
for (int i = 0; i < m_array.Length; i++)
newArray[i] = m_array[(i + head) & m_mask];
@@ -218,7 +200,7 @@ namespace System.Threading
finally
{
if (lockTaken)
- m_foreignLock.Exit(false);
+ m_foreignLock.Exit(useMemoryBarrier:false);
}
}
}
@@ -229,13 +211,9 @@ namespace System.Threading
// Fast path: check the tail. If equal, we can skip the lock.
if (m_array[(m_tailIndex - 1) & m_mask] == obj)
{
- IThreadPoolWorkItem unused;
- if (LocalPop(out unused))
- {
- Debug.Assert(unused == obj);
- return true;
- }
- return false;
+ IThreadPoolWorkItem unused = LocalPop();
+ Debug.Assert(unused == null || unused == obj);
+ return unused != null;
}
// Else, do an O(N) search for the work item. The theory of work stealing and our
@@ -276,7 +254,7 @@ namespace System.Threading
finally
{
if (lockTaken)
- m_foreignLock.Exit(false);
+ m_foreignLock.Exit(useMemoryBarrier:false);
}
}
}
@@ -284,19 +262,20 @@ namespace System.Threading
return false;
}
+ public IThreadPoolWorkItem LocalPop() => m_headIndex < m_tailIndex ? LocalPopCore() : null;
+
[SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "Reviewed for thread safety")]
- public bool LocalPop(out IThreadPoolWorkItem obj)
+ private IThreadPoolWorkItem LocalPopCore()
{
while (true)
{
- // Decrement the tail using a fence to ensure subsequent read doesn't come before.
int tail = m_tailIndex;
if (m_headIndex >= tail)
{
- obj = null;
- return false;
+ return null;
}
+ // Decrement the tail using a fence to ensure subsequent read doesn't come before.
tail -= 1;
Interlocked.Exchange(ref m_tailIndex, tail);
@@ -304,13 +283,13 @@ namespace System.Threading
if (m_headIndex <= tail)
{
int idx = tail & m_mask;
- obj = Volatile.Read(ref m_array[idx]);
+ IThreadPoolWorkItem obj = Volatile.Read(ref m_array[idx]);
// Check for nulls in the array.
if (obj == null) continue;
m_array[idx] = null;
- return true;
+ return obj;
}
else
{
@@ -324,241 +303,93 @@ namespace System.Threading
{
// Element still available. Take it.
int idx = tail & m_mask;
- obj = Volatile.Read(ref m_array[idx]);
+ IThreadPoolWorkItem obj = Volatile.Read(ref m_array[idx]);
// Check for nulls in the array.
if (obj == null) continue;
m_array[idx] = null;
- return true;
+ return obj;
}
else
{
// If we encountered a race condition and element was stolen, restore the tail.
m_tailIndex = tail + 1;
- obj = null;
- return false;
+ return null;
}
}
finally
{
if (lockTaken)
- m_foreignLock.Exit(false);
+ m_foreignLock.Exit(useMemoryBarrier:false);
}
}
}
}
- public bool TrySteal(out IThreadPoolWorkItem obj, ref bool missedSteal)
- {
- return TrySteal(out obj, ref missedSteal, 0); // no blocking by default.
- }
+ public bool CanSteal => m_headIndex < m_tailIndex;
- private bool TrySteal(out IThreadPoolWorkItem obj, ref bool missedSteal, int millisecondsTimeout)
+ public IThreadPoolWorkItem TrySteal(ref bool missedSteal)
{
- obj = null;
-
while (true)
{
- if (m_headIndex >= m_tailIndex)
- return false;
-
- bool taken = false;
- try
+ if (CanSteal)
{
- m_foreignLock.TryEnter(millisecondsTimeout, ref taken);
- if (taken)
+ bool taken = false;
+ try
{
- // Increment head, and ensure read of tail doesn't move before it (fence).
- int head = m_headIndex;
- Interlocked.Exchange(ref m_headIndex, head + 1);
-
- if (head < m_tailIndex)
+ m_foreignLock.TryEnter(ref taken);
+ if (taken)
{
- int idx = head & m_mask;
- obj = Volatile.Read(ref m_array[idx]);
+ // Increment head, and ensure read of tail doesn't move before it (fence).
+ int head = m_headIndex;
+ Interlocked.Exchange(ref m_headIndex, head + 1);
- // Check for nulls in the array.
- if (obj == null) continue;
+ if (head < m_tailIndex)
+ {
+ int idx = head & m_mask;
+ IThreadPoolWorkItem obj = Volatile.Read(ref m_array[idx]);
- m_array[idx] = null;
- return true;
- }
- else
- {
- // Failed, restore head.
- m_headIndex = head;
- obj = null;
- missedSteal = true;
+ // Check for nulls in the array.
+ if (obj == null) continue;
+
+ m_array[idx] = null;
+ return obj;
+ }
+ else
+ {
+ // Failed, restore head.
+ m_headIndex = head;
+ }
}
}
- else
+ finally
{
- missedSteal = true;
+ if (taken)
+ m_foreignLock.Exit(useMemoryBarrier:false);
}
- }
- finally
- {
- if (taken)
- m_foreignLock.Exit(false);
- }
-
- return false;
- }
- }
- }
-
- internal class QueueSegment
- {
- // Holds a segment of the queue. Enqueues/Dequeues start at element 0, and work their way up.
- internal readonly IThreadPoolWorkItem[] nodes;
- private const int QueueSegmentLength = 256;
-
- // Holds the indexes of the lowest and highest valid elements of the nodes array.
- // The low index is in the lower 16 bits, high index is in the upper 16 bits.
- // Use GetIndexes and CompareExchangeIndexes to manipulate this.
- private volatile int indexes;
-
- // The next segment in the queue.
- public volatile QueueSegment Next;
-
-
- const int SixteenBits = 0xffff;
-
- void GetIndexes(out int upper, out int lower)
- {
- int i = indexes;
- upper = (i >> 16) & SixteenBits;
- lower = i & SixteenBits;
-
- Debug.Assert(upper >= lower);
- Debug.Assert(upper <= nodes.Length);
- Debug.Assert(lower <= nodes.Length);
- Debug.Assert(upper >= 0);
- Debug.Assert(lower >= 0);
- }
- bool CompareExchangeIndexes(ref int prevUpper, int newUpper, ref int prevLower, int newLower)
- {
- Debug.Assert(newUpper >= newLower);
- Debug.Assert(newUpper <= nodes.Length);
- Debug.Assert(newLower <= nodes.Length);
- Debug.Assert(newUpper >= 0);
- Debug.Assert(newLower >= 0);
- Debug.Assert(newUpper >= prevUpper);
- Debug.Assert(newLower >= prevLower);
- Debug.Assert(newUpper == prevUpper ^ newLower == prevLower);
-
- int oldIndexes = (prevUpper << 16) | (prevLower & SixteenBits);
- int newIndexes = (newUpper << 16) | (newLower & SixteenBits);
- int prevIndexes = Interlocked.CompareExchange(ref indexes, newIndexes, oldIndexes);
- prevUpper = (prevIndexes >> 16) & SixteenBits;
- prevLower = prevIndexes & SixteenBits;
- return prevIndexes == oldIndexes;
- }
-
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- public QueueSegment()
- {
- Debug.Assert(QueueSegmentLength <= SixteenBits);
- nodes = new IThreadPoolWorkItem[QueueSegmentLength];
- }
-
-
- public bool IsUsedUp()
- {
- int upper, lower;
- GetIndexes(out upper, out lower);
- return (upper == nodes.Length) &&
- (lower == nodes.Length);
- }
-
- public bool TryEnqueue(IThreadPoolWorkItem node)
- {
- //
- // If there's room in this segment, atomically increment the upper count (to reserve
- // space for this node), then store the node.
- // Note that this leaves a window where it will look like there is data in that
- // array slot, but it hasn't been written yet. This is taken care of in TryDequeue
- // with a busy-wait loop, waiting for the element to become non-null. This implies
- // that we can never store null nodes in this data structure.
- //
- Debug.Assert(null != node);
-
- int upper, lower;
- GetIndexes(out upper, out lower);
-
- while (true)
- {
- if (upper == nodes.Length)
- return false;
-
- if (CompareExchangeIndexes(ref upper, upper + 1, ref lower, lower))
- {
- Debug.Assert(Volatile.Read(ref nodes[upper]) == null);
- Volatile.Write(ref nodes[upper], node);
- return true;
+ missedSteal = true;
}
- }
- }
-
- [SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "Reviewed for thread safety")]
- public bool TryDequeue(out IThreadPoolWorkItem node)
- {
- //
- // If there are nodes in this segment, increment the lower count, then take the
- // element we find there.
- //
- int upper, lower;
- GetIndexes(out upper, out lower);
-
- while(true)
- {
- if (lower == upper)
- {
- node = null;
- return false;
- }
-
- if (CompareExchangeIndexes(ref upper, upper, ref lower, lower + 1))
- {
- // It's possible that a concurrent call to Enqueue hasn't yet
- // written the node reference to the array. We need to spin until
- // it shows up.
- SpinWait spinner = new SpinWait();
- while ((node = Volatile.Read(ref nodes[lower])) == null)
- spinner.SpinOnce();
-
- // Null-out the reference so the object can be GC'd earlier.
- nodes[lower] = null;
- return true;
- }
+ return null;
}
}
}
- // The head and tail of the queue. We enqueue to the head, and dequeue from the tail.
- internal volatile QueueSegment queueHead;
- internal volatile QueueSegment queueTail;
internal bool loggingEnabled;
-
- internal static readonly SparseArray<WorkStealingQueue> allThreadQueues = new SparseArray<WorkStealingQueue>(16);
+ internal readonly ConcurrentQueue<IThreadPoolWorkItem> workItems = new ConcurrentQueue<IThreadPoolWorkItem>();
private volatile int numOutstandingThreadRequests = 0;
public ThreadPoolWorkQueue()
{
- queueTail = queueHead = new QueueSegment();
loggingEnabled = FrameworkEventSource.Log.IsEnabled(EventLevel.Verbose, FrameworkEventSource.Keywords.ThreadPool|FrameworkEventSource.Keywords.ThreadTransfer);
}
- public ThreadPoolWorkQueueThreadLocals EnsureCurrentThreadHasQueue()
- {
- if (null == ThreadPoolWorkQueueThreadLocals.threadLocals)
- ThreadPoolWorkQueueThreadLocals.threadLocals = new ThreadPoolWorkQueueThreadLocals(this);
- return ThreadPoolWorkQueueThreadLocals.threadLocals;
- }
+ public ThreadPoolWorkQueueThreadLocals EnsureCurrentThreadHasQueue() =>
+ ThreadPoolWorkQueueThreadLocals.threadLocals ??
+ (ThreadPoolWorkQueueThreadLocals.threadLocals = new ThreadPoolWorkQueueThreadLocals(this));
internal void EnsureThreadRequested()
{
@@ -602,12 +433,12 @@ namespace System.Threading
public void Enqueue(IThreadPoolWorkItem callback, bool forceGlobal)
{
+ if (loggingEnabled)
+ System.Diagnostics.Tracing.FrameworkEventSource.Log.ThreadPoolEnqueueWorkObject(callback);
+
ThreadPoolWorkQueueThreadLocals tl = null;
if (!forceGlobal)
tl = ThreadPoolWorkQueueThreadLocals.threadLocals;
-
- if (loggingEnabled)
- System.Diagnostics.Tracing.FrameworkEventSource.Log.ThreadPoolEnqueueWorkObject(callback);
if (null != tl)
{
@@ -615,18 +446,7 @@ namespace System.Threading
}
else
{
- QueueSegment head = queueHead;
-
- while (!head.TryEnqueue(callback))
- {
- Interlocked.CompareExchange(ref head.Next, new QueueSegment(), null);
-
- while (head.Next != null)
- {
- Interlocked.CompareExchange(ref queueHead, head.Next, head);
- head = queueHead;
- }
- }
+ workItems.Enqueue(callback);
}
EnsureThreadRequested();
@@ -635,67 +455,43 @@ namespace System.Threading
internal bool LocalFindAndPop(IThreadPoolWorkItem callback)
{
ThreadPoolWorkQueueThreadLocals tl = ThreadPoolWorkQueueThreadLocals.threadLocals;
- if (null == tl)
- return false;
-
- return tl.workStealingQueue.LocalFindAndPop(callback);
+ return tl != null && tl.workStealingQueue.LocalFindAndPop(callback);
}
- public void Dequeue(ThreadPoolWorkQueueThreadLocals tl, out IThreadPoolWorkItem callback, out bool missedSteal)
+ public IThreadPoolWorkItem Dequeue(ThreadPoolWorkQueueThreadLocals tl, ref bool missedSteal)
{
- callback = null;
- missedSteal = false;
- WorkStealingQueue wsq = tl.workStealingQueue;
+ WorkStealingQueue localWsq = tl.workStealingQueue;
+ IThreadPoolWorkItem callback;
- if (wsq.LocalPop(out callback))
- Debug.Assert(null != callback);
-
- if (null == callback)
+ if ((callback = localWsq.LocalPop()) == null && // first try the local queue
+ !workItems.TryDequeue(out callback)) // then try the global queue
{
- QueueSegment tail = queueTail;
- while (true)
- {
- if (tail.TryDequeue(out callback))
- {
- Debug.Assert(null != callback);
- break;
- }
-
- if (null == tail.Next || !tail.IsUsedUp())
- {
- break;
- }
- else
- {
- Interlocked.CompareExchange(ref queueTail, tail.Next, tail);
- tail = queueTail;
- }
- }
- }
-
- if (null == callback)
- {
- WorkStealingQueue[] otherQueues = allThreadQueues.Current;
- int c = otherQueues.Length;
+ // finally try to steal from another thread's local queue
+ WorkStealingQueue[] queues = WorkStealingQueueList.Queues;
+ int c = queues.Length;
+ Debug.Assert(c > 0, "There must at least be a queue for this thread.");
int maxIndex = c - 1;
int i = tl.random.Next(c);
while (c > 0)
{
i = (i < maxIndex) ? i + 1 : 0;
- WorkStealingQueue otherQueue = Volatile.Read(ref otherQueues[i]);
- if (otherQueue != null &&
- otherQueue != wsq &&
- otherQueue.TrySteal(out callback, ref missedSteal))
+ WorkStealingQueue otherQueue = queues[i];
+ if (otherQueue != localWsq && otherQueue.CanSteal)
{
- Debug.Assert(null != callback);
- break;
+ callback = otherQueue.TrySteal(ref missedSteal);
+ if (callback != null)
+ {
+ break;
+ }
}
c--;
}
}
+
+ return callback;
}
- static internal bool Dispatch()
+ internal static bool Dispatch()
{
var workQueue = ThreadPoolGlobals.workQueue;
//
@@ -735,85 +531,66 @@ namespace System.Threading
//
while ((Environment.TickCount - quantumStartTime) < ThreadPoolGlobals.TP_QUANTUM)
{
- //
- // Dequeue and EnsureThreadRequested must be protected from ThreadAbortException.
- // These are fast, so this will not delay aborts/AD-unloads for very long.
- //
- try { }
- finally
- {
- bool missedSteal = false;
- workQueue.Dequeue(tl, out workItem, out missedSteal);
-
- if (workItem == null)
- {
- //
- // No work. We're going to return to the VM once we leave this protected region.
- // If we missed a steal, though, there may be more work in the queue.
- // Instead of looping around and trying again, we'll just request another thread. This way
- // we won't starve other AppDomains while we spin trying to get locks, and hopefully the thread
- // that owns the contended work-stealing queue will pick up its own workitems in the meantime,
- // which will be more efficient than this thread doing it anyway.
- //
- needAnotherThread = missedSteal;
- }
- else
- {
- //
- // If we found work, there may be more work. Ask for another thread so that the other work can be processed
- // in parallel. Note that this will only ask for a max of #procs threads, so it's safe to call it for every dequeue.
- //
- workQueue.EnsureThreadRequested();
- }
- }
+ bool missedSteal = false;
+ workItem = workQueue.Dequeue(tl, ref missedSteal);
if (workItem == null)
{
+ //
+ // No work. We're going to return to the VM once we leave this protected region.
+ // If we missed a steal, though, there may be more work in the queue.
+ // Instead of looping around and trying again, we'll just request another thread. This way
+ // we won't starve other AppDomains while we spin trying to get locks, and hopefully the thread
+ // that owns the contended work-stealing queue will pick up its own workitems in the meantime,
+ // which will be more efficient than this thread doing it anyway.
+ //
+ needAnotherThread = missedSteal;
+
// Tell the VM we're returning normally, not because Hill Climbing asked us to return.
return true;
}
- else
- {
- if (workQueue.loggingEnabled)
- System.Diagnostics.Tracing.FrameworkEventSource.Log.ThreadPoolDequeueWorkObject(workItem);
- //
- // Execute the workitem outside of any finally blocks, so that it can be aborted if needed.
- //
- if (ThreadPoolGlobals.enableWorkerTracking)
+ if (workQueue.loggingEnabled)
+ System.Diagnostics.Tracing.FrameworkEventSource.Log.ThreadPoolDequeueWorkObject(workItem);
+
+ //
+ // If we found work, there may be more work. Ask for another thread so that the other work can be processed
+ // in parallel. Note that this will only ask for a max of #procs threads, so it's safe to call it for every dequeue.
+ //
+ workQueue.EnsureThreadRequested();
+
+ //
+ // Execute the workitem outside of any finally blocks, so that it can be aborted if needed.
+ //
+ if (ThreadPoolGlobals.enableWorkerTracking)
+ {
+ bool reportedStatus = false;
+ try
{
- bool reportedStatus = false;
- try
- {
- try { }
- finally
- {
- ThreadPool.ReportThreadStatus(true);
- reportedStatus = true;
- }
- workItem.ExecuteWorkItem();
- workItem = null;
- }
- finally
- {
- if (reportedStatus)
- ThreadPool.ReportThreadStatus(false);
- }
+ ThreadPool.ReportThreadStatus(isWorking: true);
+ reportedStatus = true;
+ workItem.ExecuteWorkItem();
}
- else
+ finally
{
- workItem.ExecuteWorkItem();
- workItem = null;
+ if (reportedStatus)
+ ThreadPool.ReportThreadStatus(isWorking: false);
}
-
- //
- // Notify the VM that we executed this workitem. This is also our opportunity to ask whether Hill Climbing wants
- // us to return the thread to the pool or not.
- //
- if (!ThreadPool.NotifyWorkItemComplete())
- return false;
}
+ else
+ {
+ workItem.ExecuteWorkItem();
+ }
+ workItem = null;
+
+ //
+ // Notify the VM that we executed this workitem. This is also our opportunity to ask whether Hill Climbing wants
+ // us to return the thread to the pool or not.
+ //
+ if (!ThreadPool.NotifyWorkItemComplete())
+ return false;
}
+
// If we get here, it's because our quantum expired. Tell the VM we're returning normally.
return true;
}
@@ -825,8 +602,7 @@ namespace System.Threading
// it was executed or not (in debug builds only). Task uses this to communicate the ThreadAbortException to anyone
// who waits for the task to complete.
//
- if (workItem != null)
- workItem.MarkAborted(tae);
+ workItem?.MarkAborted(tae);
//
// In this case, the VM is going to request another thread on our behalf. No need to do it twice.
@@ -845,11 +621,36 @@ namespace System.Threading
}
// we can never reach this point, but the C# compiler doesn't know that, because it doesn't know the ThreadAbortException will be reraised above.
- Debug.Assert(false);
+ Debug.Fail("Should never reach this point");
return true;
}
}
+ // Simple random number generator. We don't need great randomness, we just need a little and for it to be fast.
+ internal struct FastRandom // xorshift prng
+ {
+ private uint _w, _x, _y, _z;
+
+ public FastRandom(int seed)
+ {
+ _x = (uint)seed;
+ _w = 88675123;
+ _y = 362436069;
+ _z = 521288629;
+ }
+
+ public int Next(int maxValue)
+ {
+ Debug.Assert(maxValue > 0);
+
+ uint t = _x ^ (_x << 11);
+ _x = _y; _y = _z; _z = _w;
+ _w = _w ^ (_w >> 19) ^ (t ^ (t >> 8));
+
+ return (int)(_w % (uint)maxValue);
+ }
+ }
+
// Holds a WorkStealingQueue, and remmoves it from the list when this object is no longer referened.
internal sealed class ThreadPoolWorkQueueThreadLocals
{
@@ -858,13 +659,13 @@ namespace System.Threading
public readonly ThreadPoolWorkQueue workQueue;
public readonly ThreadPoolWorkQueue.WorkStealingQueue workStealingQueue;
- public readonly Random random = new Random(Thread.CurrentThread.ManagedThreadId);
+ public FastRandom random = new FastRandom(Thread.CurrentThread.ManagedThreadId); // mutable struct, do not copy or make readonly
public ThreadPoolWorkQueueThreadLocals(ThreadPoolWorkQueue tpq)
{
workQueue = tpq;
workStealingQueue = new ThreadPoolWorkQueue.WorkStealingQueue();
- ThreadPoolWorkQueue.allThreadQueues.Add(workStealingQueue);
+ ThreadPoolWorkQueue.WorkStealingQueueList.Add(workStealingQueue);
}
private void CleanUp()
@@ -873,28 +674,15 @@ namespace System.Threading
{
if (null != workQueue)
{
- bool done = false;
- while (!done)
+ IThreadPoolWorkItem cb;
+ while ((cb = workStealingQueue.LocalPop()) != null)
{
- // Ensure that we won't be aborted between LocalPop and Enqueue.
- try { }
- finally
- {
- IThreadPoolWorkItem cb = null;
- if (workStealingQueue.LocalPop(out cb))
- {
- Debug.Assert(null != cb);
- workQueue.Enqueue(cb, true);
- }
- else
- {
- done = true;
- }
- }
+ Debug.Assert(null != cb);
+ workQueue.Enqueue(cb, forceGlobal: true);
}
}
- ThreadPoolWorkQueue.allThreadQueues.Remove(workStealingQueue);
+ ThreadPoolWorkQueue.WorkStealingQueueList.Remove(workStealingQueue);
}
}
@@ -912,34 +700,19 @@ namespace System.Threading
internal sealed class RegisteredWaitHandleSafe : CriticalFinalizerObject
{
- private static IntPtr InvalidHandle
- {
- get
- {
- return Win32Native.INVALID_HANDLE_VALUE;
- }
- }
- private IntPtr registeredWaitHandle;
+ private static IntPtr InvalidHandle => Win32Native.INVALID_HANDLE_VALUE;
+ private IntPtr registeredWaitHandle = InvalidHandle;
private WaitHandle m_internalWaitObject;
private bool bReleaseNeeded = false;
private volatile int m_lock = 0;
- internal RegisteredWaitHandleSafe()
- {
- registeredWaitHandle = InvalidHandle;
- }
-
- internal IntPtr GetHandle()
- {
- return registeredWaitHandle;
- }
+ internal IntPtr GetHandle() => registeredWaitHandle;
internal void SetHandle(IntPtr handle)
{
registeredWaitHandle = handle;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal void SetWaitObject(WaitHandle waitObject)
{
// needed for DangerousAddRef
@@ -957,7 +730,6 @@ namespace System.Threading
}
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal bool Unregister(
WaitHandle waitObject // object to be notified when all callbacks to delegates have completed
)
@@ -1009,10 +781,8 @@ namespace System.Threading
return result;
}
- private bool ValidHandle()
- {
- return (registeredWaitHandle != InvalidHandle && registeredWaitHandle != IntPtr.Zero);
- }
+ private bool ValidHandle() =>
+ registeredWaitHandle != InvalidHandle && registeredWaitHandle != IntPtr.Zero;
~RegisteredWaitHandleSafe()
{
@@ -1071,9 +841,8 @@ namespace System.Threading
private static extern bool UnregisterWaitNative(IntPtr handle, SafeHandle waitObject);
}
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class RegisteredWaitHandle : MarshalByRefObject {
- private RegisteredWaitHandleSafe internalRegisteredWait;
+ private readonly RegisteredWaitHandleSafe internalRegisteredWait;
internal RegisteredWaitHandle()
{
@@ -1090,8 +859,6 @@ namespace System.Threading
internalRegisteredWait.SetWaitObject(waitObject);
}
-
-[System.Runtime.InteropServices.ComVisible(true)]
// This is the only public method on this class
public bool Unregister(
WaitHandle waitObject // object to be notified when all callbacks to delegates have completed
@@ -1101,10 +868,8 @@ namespace System.Threading
}
}
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate void WaitCallback(Object state);
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate void WaitOrTimerCallback(Object state, bool timedOut); // signalled or timed out
//
@@ -1115,10 +880,7 @@ namespace System.Threading
//
internal static class _ThreadPoolWaitCallback
{
- static internal bool PerformWaitCallback()
- {
- return ThreadPoolWorkQueue.Dispatch();
- }
+ internal static bool PerformWaitCallback() => ThreadPoolWorkQueue.Dispatch();
}
//
@@ -1138,11 +900,9 @@ namespace System.Threading
internal sealed class QueueUserWorkItemCallback : IThreadPoolWorkItem
{
- static QueueUserWorkItemCallback() {}
-
private WaitCallback callback;
- private ExecutionContext context;
- private Object state;
+ private readonly ExecutionContext context;
+ private readonly Object state;
#if DEBUG
volatile int executed;
@@ -1173,7 +933,7 @@ namespace System.Threading
void IThreadPoolWorkItem.ExecuteWorkItem()
{
#if DEBUG
- MarkExecuted(false);
+ MarkExecuted(aborted:false);
#endif
// call directly if it is an unsafe call OR EC flow is suppressed
if (context == null)
@@ -1184,7 +944,7 @@ namespace System.Threading
}
else
{
- ExecutionContext.Run(context, ccb, this, true);
+ ExecutionContext.Run(context, ccb, this);
}
}
@@ -1193,16 +953,16 @@ namespace System.Threading
#if DEBUG
// this workitem didn't execute because we got a ThreadAbortException prior to the call to ExecuteWorkItem.
// This counts as being executed for our purposes.
- MarkExecuted(true);
+ MarkExecuted(aborted:true);
#endif
}
- static internal ContextCallback ccb = new ContextCallback(WaitCallback_Context);
+ internal static readonly ContextCallback ccb = new ContextCallback(WaitCallback_Context);
- static private void WaitCallback_Context(Object state)
+ private static void WaitCallback_Context(Object state)
{
QueueUserWorkItemCallback obj = (QueueUserWorkItemCallback)state;
- WaitCallback wc = obj.callback as WaitCallback;
+ WaitCallback wc = obj.callback;
Debug.Assert(null != wc);
wc(obj.state);
}
@@ -1210,10 +970,8 @@ namespace System.Threading
internal sealed class QueueUserWorkItemCallbackDefaultContext : IThreadPoolWorkItem
{
- static QueueUserWorkItemCallbackDefaultContext() { }
-
private WaitCallback callback;
- private Object state;
+ private readonly Object state;
#if DEBUG
private volatile int executed;
@@ -1243,9 +1001,9 @@ namespace System.Threading
void IThreadPoolWorkItem.ExecuteWorkItem()
{
#if DEBUG
- MarkExecuted(false);
+ MarkExecuted(aborted:false);
#endif
- ExecutionContext.Run(ExecutionContext.PreAllocatedDefault, ccb, this, true);
+ ExecutionContext.Run(ExecutionContext.Default, ccb, this);
}
void IThreadPoolWorkItem.MarkAborted(ThreadAbortException tae)
@@ -1253,16 +1011,16 @@ namespace System.Threading
#if DEBUG
// this workitem didn't execute because we got a ThreadAbortException prior to the call to ExecuteWorkItem.
// This counts as being executed for our purposes.
- MarkExecuted(true);
+ MarkExecuted(aborted:true);
#endif
}
- static internal ContextCallback ccb = new ContextCallback(WaitCallback_Context);
+ internal static readonly ContextCallback ccb = new ContextCallback(WaitCallback_Context);
- static private void WaitCallback_Context(Object state)
+ private static void WaitCallback_Context(Object state)
{
QueueUserWorkItemCallbackDefaultContext obj = (QueueUserWorkItemCallbackDefaultContext)state;
- WaitCallback wc = obj.callback as WaitCallback;
+ WaitCallback wc = obj.callback;
Debug.Assert(null != wc);
obj.callback = null;
wc(obj.state);
@@ -1271,46 +1029,38 @@ namespace System.Threading
internal class _ThreadPoolWaitOrTimerCallback
{
- static _ThreadPoolWaitOrTimerCallback() {}
-
WaitOrTimerCallback _waitOrTimerCallback;
ExecutionContext _executionContext;
Object _state;
- static private ContextCallback _ccbt = new ContextCallback(WaitOrTimerCallback_Context_t);
- static private ContextCallback _ccbf = new ContextCallback(WaitOrTimerCallback_Context_f);
+ private static readonly ContextCallback _ccbt = new ContextCallback(WaitOrTimerCallback_Context_t);
+ private static readonly ContextCallback _ccbf = new ContextCallback(WaitOrTimerCallback_Context_f);
- internal _ThreadPoolWaitOrTimerCallback(WaitOrTimerCallback waitOrTimerCallback, Object state, bool compressStack, ref StackCrawlMark stackMark)
+ internal _ThreadPoolWaitOrTimerCallback(WaitOrTimerCallback waitOrTimerCallback, Object state, bool compressStack)
{
_waitOrTimerCallback = waitOrTimerCallback;
_state = state;
- if (compressStack && !ExecutionContext.IsFlowSuppressed())
+ if (compressStack)
{
// capture the exection context
- _executionContext = ExecutionContext.Capture(
- ref stackMark,
- ExecutionContext.CaptureOptions.IgnoreSyncCtx | ExecutionContext.CaptureOptions.OptimizeDefaultCase);
+ _executionContext = ExecutionContext.Capture();
}
}
- static private void WaitOrTimerCallback_Context_t(Object state)
- {
- WaitOrTimerCallback_Context(state, true);
- }
+ private static void WaitOrTimerCallback_Context_t(Object state) =>
+ WaitOrTimerCallback_Context(state, timedOut:true);
- static private void WaitOrTimerCallback_Context_f(Object state)
- {
- WaitOrTimerCallback_Context(state, false);
- }
+ private static void WaitOrTimerCallback_Context_f(Object state) =>
+ WaitOrTimerCallback_Context(state, timedOut:false);
- static private void WaitOrTimerCallback_Context(Object state, bool timedOut)
+ private static void WaitOrTimerCallback_Context(Object state, bool timedOut)
{
_ThreadPoolWaitOrTimerCallback helper = (_ThreadPoolWaitOrTimerCallback)state;
helper._waitOrTimerCallback(helper._state, timedOut);
}
// call back helper
- static internal void PerformWaitOrTimerCallback(Object state, bool timedOut)
+ internal static void PerformWaitOrTimerCallback(Object state, bool timedOut)
{
_ThreadPoolWaitOrTimerCallback helper = (_ThreadPoolWaitOrTimerCallback)state;
Debug.Assert(helper != null, "Null state passed to PerformWaitOrTimerCallback!");
@@ -1322,20 +1072,13 @@ namespace System.Threading
}
else
{
- using (ExecutionContext executionContext = helper._executionContext.CreateCopy())
- {
- if (timedOut)
- ExecutionContext.Run(executionContext, _ccbt, helper, true);
- else
- ExecutionContext.Run(executionContext, _ccbf, helper, true);
- }
+ ExecutionContext.Run(helper._executionContext, timedOut ? _ccbt : _ccbf, helper);
}
}
}
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
unsafe public delegate void IOCompletionCallback(uint errorCode, // Error code
uint numBytes, // No. of bytes transferred
NativeOverlapped* pOVERLAP // ptr to OVERLAP structure
@@ -1343,7 +1086,6 @@ namespace System.Threading
public static class ThreadPool
{
-
public static bool SetMaxThreads(int workerThreads, int completionPortThreads)
{
return SetMaxThreadsNative(workerThreads, completionPortThreads);
@@ -1412,7 +1154,7 @@ namespace System.Threading
if (callBack != null)
{
- _ThreadPoolWaitOrTimerCallback callBackHelper = new _ThreadPoolWaitOrTimerCallback(callBack, state, compressStack, ref stackMark);
+ _ThreadPoolWaitOrTimerCallback callBackHelper = new _ThreadPoolWaitOrTimerCallback(callBack, state, compressStack);
state = (Object)callBackHelper;
// call SetWaitObject before native call so that waitObject won't be closed before threadpoolmgr registration
// this could occur if callback were to fire before SetWaitObject does its addref
@@ -1533,141 +1275,84 @@ namespace System.Threading
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return RegisterWaitForSingleObject(waitObject,callBack,state,(UInt32)tm,executeOnlyOnce,ref stackMark,false);
}
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static bool QueueUserWorkItem(
- WaitCallback callBack, // NOTE: we do not expose options that allow the callback to be queued as an APC
- Object state
- )
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return QueueUserWorkItemHelper(callBack,state,ref stackMark,true);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static bool QueueUserWorkItem(
- WaitCallback callBack // NOTE: we do not expose options that allow the callback to be queued as an APC
- )
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return QueueUserWorkItemHelper(callBack,null,ref stackMark,true);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static bool UnsafeQueueUserWorkItem(
- WaitCallback callBack, // NOTE: we do not expose options that allow the callback to be queued as an APC
- Object state
- )
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return QueueUserWorkItemHelper(callBack,state,ref stackMark,false);
- }
- //ThreadPool has per-appdomain managed queue of work-items. The VM is
- //responsible for just scheduling threads into appdomains. After that
- //work-items are dispatched from the managed queue.
- private static bool QueueUserWorkItemHelper(WaitCallback callBack, Object state, ref StackCrawlMark stackMark, bool compressStack )
- {
- bool success = true;
+ public static bool QueueUserWorkItem(WaitCallback callBack) =>
+ QueueUserWorkItem(callBack, null);
- if (callBack != null)
+ public static bool QueueUserWorkItem(WaitCallback callBack, object state)
+ {
+ if (callBack == null)
{
- //The thread pool maintains a per-appdomain managed work queue.
- //New thread pool entries are added in the managed queue.
- //The VM is responsible for the actual growing/shrinking of
- //threads.
+ ThrowHelper.ThrowArgumentNullException(ExceptionArgument.callBack);
+ }
- EnsureVMInitialized();
+ EnsureVMInitialized();
- //
- // If we are able to create the workitem, we need to get it in the queue without being interrupted
- // by a ThreadAbortException.
- //
- try { }
- finally
- {
- ExecutionContext context = compressStack && !ExecutionContext.IsFlowSuppressed() ?
- ExecutionContext.Capture(ref stackMark, ExecutionContext.CaptureOptions.IgnoreSyncCtx | ExecutionContext.CaptureOptions.OptimizeDefaultCase) :
- null;
+ ExecutionContext context = ExecutionContext.Capture();
- IThreadPoolWorkItem tpcallBack = context == ExecutionContext.PreAllocatedDefault ?
- new QueueUserWorkItemCallbackDefaultContext(callBack, state) :
- (IThreadPoolWorkItem)new QueueUserWorkItemCallback(callBack, state, context);
+ IThreadPoolWorkItem tpcallBack = context == ExecutionContext.Default ?
+ new QueueUserWorkItemCallbackDefaultContext(callBack, state) :
+ (IThreadPoolWorkItem)new QueueUserWorkItemCallback(callBack, state, context);
- ThreadPoolGlobals.workQueue.Enqueue(tpcallBack, true);
- success = true;
- }
- }
- else
+ ThreadPoolGlobals.workQueue.Enqueue(tpcallBack, forceGlobal: true);
+
+ return true;
+ }
+
+ public static bool UnsafeQueueUserWorkItem(WaitCallback callBack, Object state)
+ {
+ if (callBack == null)
{
- throw new ArgumentNullException(nameof(WaitCallback));
+ ThrowHelper.ThrowArgumentNullException(ExceptionArgument.callBack);
}
- return success;
+
+ EnsureVMInitialized();
+
+ IThreadPoolWorkItem tpcallBack = new QueueUserWorkItemCallback(callBack, state, null);
+
+ ThreadPoolGlobals.workQueue.Enqueue(tpcallBack, forceGlobal: true);
+
+ return true;
}
internal static void UnsafeQueueCustomWorkItem(IThreadPoolWorkItem workItem, bool forceGlobal)
{
Debug.Assert(null != workItem);
EnsureVMInitialized();
-
- //
- // Enqueue needs to be protected from ThreadAbort
- //
- try { }
- finally
- {
- ThreadPoolGlobals.workQueue.Enqueue(workItem, forceGlobal);
- }
+ ThreadPoolGlobals.workQueue.Enqueue(workItem, forceGlobal);
}
// This method tries to take the target callback out of the current thread's queue.
internal static bool TryPopCustomWorkItem(IThreadPoolWorkItem workItem)
{
Debug.Assert(null != workItem);
- if (!ThreadPoolGlobals.vmTpInitialized)
- return false; //Not initialized, so there's no way this workitem was ever queued.
- return ThreadPoolGlobals.workQueue.LocalFindAndPop(workItem);
+ return
+ ThreadPoolGlobals.vmTpInitialized && // if not initialized, so there's no way this workitem was ever queued.
+ ThreadPoolGlobals.workQueue.LocalFindAndPop(workItem);
}
// Get all workitems. Called by TaskScheduler in its debugger hooks.
internal static IEnumerable<IThreadPoolWorkItem> GetQueuedWorkItems()
{
- return EnumerateQueuedWorkItems(ThreadPoolWorkQueue.allThreadQueues.Current, ThreadPoolGlobals.workQueue.queueTail);
- }
-
- internal static IEnumerable<IThreadPoolWorkItem> EnumerateQueuedWorkItems(ThreadPoolWorkQueue.WorkStealingQueue[] wsQueues, ThreadPoolWorkQueue.QueueSegment globalQueueTail)
- {
- if (wsQueues != null)
+ // Enumerate global queue
+ foreach (IThreadPoolWorkItem workItem in ThreadPoolGlobals.workQueue.workItems)
{
- // First, enumerate all workitems in thread-local queues.
- foreach (ThreadPoolWorkQueue.WorkStealingQueue wsq in wsQueues)
- {
- if (wsq != null && wsq.m_array != null)
- {
- IThreadPoolWorkItem[] items = wsq.m_array;
- for (int i = 0; i < items.Length; i++)
- {
- IThreadPoolWorkItem item = items[i];
- if (item != null)
- yield return item;
- }
- }
- }
+ yield return workItem;
}
- if (globalQueueTail != null)
+ // Enumerate each local queue
+ foreach (ThreadPoolWorkQueue.WorkStealingQueue wsq in ThreadPoolWorkQueue.WorkStealingQueueList.Queues)
{
- // Now the global queue
- for (ThreadPoolWorkQueue.QueueSegment segment = globalQueueTail;
- segment != null;
- segment = segment.Next)
+ if (wsq != null && wsq.m_array != null)
{
- IThreadPoolWorkItem[] items = segment.nodes;
+ IThreadPoolWorkItem[] items = wsq.m_array;
for (int i = 0; i < items.Length; i++)
{
IThreadPoolWorkItem item = items[i];
if (item != null)
+ {
yield return item;
+ }
}
}
}
@@ -1675,13 +1360,20 @@ namespace System.Threading
internal static IEnumerable<IThreadPoolWorkItem> GetLocallyQueuedWorkItems()
{
- return EnumerateQueuedWorkItems(new ThreadPoolWorkQueue.WorkStealingQueue[] { ThreadPoolWorkQueueThreadLocals.threadLocals.workStealingQueue }, null);
+ ThreadPoolWorkQueue.WorkStealingQueue wsq = ThreadPoolWorkQueueThreadLocals.threadLocals.workStealingQueue;
+ if (wsq != null && wsq.m_array != null)
+ {
+ IThreadPoolWorkItem[] items = wsq.m_array;
+ for (int i = 0; i < items.Length; i++)
+ {
+ IThreadPoolWorkItem item = items[i];
+ if (item != null)
+ yield return item;
+ }
+ }
}
- internal static IEnumerable<IThreadPoolWorkItem> GetGloballyQueuedWorkItems()
- {
- return EnumerateQueuedWorkItems(null, ThreadPoolGlobals.workQueue.queueTail);
- }
+ internal static IEnumerable<IThreadPoolWorkItem> GetGloballyQueuedWorkItems() => ThreadPoolGlobals.workQueue.workItems;
private static object[] ToObjectArray(IEnumerable<IThreadPoolWorkItem> workitems)
{
@@ -1705,20 +1397,14 @@ namespace System.Threading
// This is the method the debugger will actually call, if it ends up calling
// into ThreadPool directly. Tests can use this to simulate a debugger, as well.
- internal static object[] GetQueuedWorkItemsForDebugger()
- {
- return ToObjectArray(GetQueuedWorkItems());
- }
+ internal static object[] GetQueuedWorkItemsForDebugger() =>
+ ToObjectArray(GetQueuedWorkItems());
- internal static object[] GetGloballyQueuedWorkItemsForDebugger()
- {
- return ToObjectArray(GetGloballyQueuedWorkItems());
- }
+ internal static object[] GetGloballyQueuedWorkItemsForDebugger() =>
+ ToObjectArray(GetGloballyQueuedWorkItems());
- internal static object[] GetLocallyQueuedWorkItemsForDebugger()
- {
- return ToObjectArray(GetLocallyQueuedWorkItems());
- }
+ internal static object[] GetLocallyQueuedWorkItemsForDebugger() =>
+ ToObjectArray(GetLocallyQueuedWorkItems());
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
@@ -1728,19 +1414,26 @@ namespace System.Threading
unsafe private static extern bool PostQueuedCompletionStatus(NativeOverlapped* overlapped);
[CLSCompliant(false)]
- unsafe public static bool UnsafeQueueNativeOverlapped(NativeOverlapped* overlapped)
- {
- return PostQueuedCompletionStatus(overlapped);
- }
+ unsafe public static bool UnsafeQueueNativeOverlapped(NativeOverlapped* overlapped) =>
+ PostQueuedCompletionStatus(overlapped);
+ // The thread pool maintains a per-appdomain managed work queue.
+ // New thread pool entries are added in the managed queue.
+ // The VM is responsible for the actual growing/shrinking of
+ // threads.
private static void EnsureVMInitialized()
{
if (!ThreadPoolGlobals.vmTpInitialized)
{
- ThreadPool.InitializeVMTp(ref ThreadPoolGlobals.enableWorkerTracking);
- ThreadPoolGlobals.vmTpInitialized = true;
+ EnsureVMInitializedCore(); // separate out to help with inlining
}
}
+
+ private static void EnsureVMInitializedCore()
+ {
+ ThreadPool.InitializeVMTp(ref ThreadPoolGlobals.enableWorkerTracking);
+ ThreadPoolGlobals.vmTpInitialized = true;
+ }
// Native methods:
@@ -1795,9 +1488,7 @@ namespace System.Threading
[Obsolete("ThreadPool.BindHandle(IntPtr) has been deprecated. Please use ThreadPool.BindHandle(SafeHandle) instead.", false)]
- public static bool BindHandle(
- IntPtr osHandle
- )
+ public static bool BindHandle(IntPtr osHandle)
{
return BindIOCompletionCallbackNative(osHandle);
}
@@ -1822,7 +1513,6 @@ namespace System.Threading
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private static extern bool BindIOCompletionCallbackNative(IntPtr fileHandle);
}
}
diff --git a/src/mscorlib/src/System/Threading/ThreadPriority.cs b/src/mscorlib/src/System/Threading/ThreadPriority.cs
index c56156eb89..6303c2fd94 100644
--- a/src/mscorlib/src/System/Threading/ThreadPriority.cs
+++ b/src/mscorlib/src/System/Threading/ThreadPriority.cs
@@ -16,7 +16,6 @@ namespace System.Threading {
using System.Threading;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadPriority
{
/*=========================================================================
diff --git a/src/mscorlib/src/System/Threading/ThreadStart.cs b/src/mscorlib/src/System/Threading/ThreadStart.cs
index b968117195..e4beddcd75 100644
--- a/src/mscorlib/src/System/Threading/ThreadStart.cs
+++ b/src/mscorlib/src/System/Threading/ThreadStart.cs
@@ -14,12 +14,10 @@
=============================================================================*/
namespace System.Threading {
- using System.Security.Permissions;
using System.Threading;
// Define the delegate
// NOTE: If you change the signature here, there is code in COMSynchronization
// that invokes this delegate in native.
-[System.Runtime.InteropServices.ComVisible(true)]
public delegate void ThreadStart();
}
diff --git a/src/mscorlib/src/System/Threading/ThreadState.cs b/src/mscorlib/src/System/Threading/ThreadState.cs
index 007e1bf6e9..2d953f384a 100644
--- a/src/mscorlib/src/System/Threading/ThreadState.cs
+++ b/src/mscorlib/src/System/Threading/ThreadState.cs
@@ -16,7 +16,6 @@ namespace System.Threading {
[Serializable]
[Flags]
-[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
{
/*=========================================================================
diff --git a/src/mscorlib/src/System/Threading/ThreadStateException.cs b/src/mscorlib/src/System/Threading/ThreadStateException.cs
index 535dffcdbf..97c03ce06c 100644
--- a/src/mscorlib/src/System/Threading/ThreadStateException.cs
+++ b/src/mscorlib/src/System/Threading/ThreadStateException.cs
@@ -16,7 +16,6 @@
namespace System.Threading {
using System;
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class ThreadStateException : SystemException {
public ThreadStateException()
diff --git a/src/mscorlib/src/System/Threading/Timeout.cs b/src/mscorlib/src/System/Threading/Timeout.cs
index 99e24159b2..80bdbccf4e 100644
--- a/src/mscorlib/src/System/Threading/Timeout.cs
+++ b/src/mscorlib/src/System/Threading/Timeout.cs
@@ -8,10 +8,8 @@ namespace System.Threading {
// A constant used by methods that take a timeout (Object.Wait, Thread.Sleep
// etc) to indicate that no timeout should occur.
//
- [System.Runtime.InteropServices.ComVisible(true)]
public static class Timeout
{
- [System.Runtime.InteropServices.ComVisible(false)]
public static readonly TimeSpan InfiniteTimeSpan = new TimeSpan(0, 0, 0, 0, Timeout.Infinite);
public const int Infinite = -1;
diff --git a/src/mscorlib/src/System/Threading/Timer.cs b/src/mscorlib/src/System/Threading/Timer.cs
index 5bfefccad2..93d2922799 100644
--- a/src/mscorlib/src/System/Threading/Timer.cs
+++ b/src/mscorlib/src/System/Threading/Timer.cs
@@ -8,7 +8,6 @@ namespace System.Threading
{
using System;
using System.Security;
- using System.Security.Permissions;
using Microsoft.Win32;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@@ -21,7 +20,6 @@ namespace System.Threading
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate void TimerCallback(Object state);
//
@@ -109,7 +107,6 @@ namespace System.Threading
{
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
protected override bool ReleaseHandle()
{
return DeleteAppDomainTimer(handle);
@@ -206,7 +203,6 @@ namespace System.Threading
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
static extern bool DeleteAppDomainTimer(IntPtr handle);
#endregion
@@ -221,83 +217,6 @@ namespace System.Threading
volatile int m_pauseTicks = 0; // Time when Pause was called
- internal void Pause()
- {
- lock(this)
- {
- // Delete the native timer so that no timers are fired in the Pause zone
- if(m_appDomainTimer != null && !m_appDomainTimer.IsInvalid)
- {
- m_appDomainTimer.Dispose();
- m_appDomainTimer = null;
- m_isAppDomainTimerScheduled = false;
- m_pauseTicks = TickCount;
- }
- }
- }
-
- internal void Resume()
- {
- //
- // Update timers to adjust their due-time to accomodate Pause/Resume
- //
- lock (this)
- {
- // prevent ThreadAbort while updating state
- try { }
- finally
- {
- int pauseTicks = m_pauseTicks;
- m_pauseTicks = 0; // Set this to 0 so that now timers can be scheduled
-
- int resumedTicks = TickCount;
- int pauseDuration = resumedTicks - pauseTicks;
-
- bool haveTimerToSchedule = false;
- uint nextAppDomainTimerDuration = uint.MaxValue;
-
- TimerQueueTimer timer = m_timers;
- while (timer != null)
- {
- Debug.Assert(timer.m_dueTime != Timeout.UnsignedInfinite);
- Debug.Assert(resumedTicks >= timer.m_startTicks);
-
- uint elapsed; // How much of the timer dueTime has already elapsed
-
- // Timers started before the paused event has to be sufficiently delayed to accomodate
- // for the Pause time. However, timers started after the Paused event shouldnt be adjusted.
- // E.g. ones created by the app in its Activated event should fire when it was designated.
- // The Resumed event which is where this routine is executing is after this Activated and hence
- // shouldn't delay this timer
-
- if(timer.m_startTicks <= pauseTicks)
- elapsed = (uint)(pauseTicks - timer.m_startTicks);
- else
- elapsed = (uint)(resumedTicks - timer.m_startTicks);
-
- // Handling the corner cases where a Timer was already due by the time Resume is happening,
- // We shouldn't delay those timers.
- // Example is a timer started in App's Activated event with a very small duration
- timer.m_dueTime = (timer.m_dueTime > elapsed) ? timer.m_dueTime - elapsed : 0;;
- timer.m_startTicks = resumedTicks; // re-baseline
-
- if (timer.m_dueTime < nextAppDomainTimerDuration)
- {
- haveTimerToSchedule = true;
- nextAppDomainTimerDuration = timer.m_dueTime;
- }
-
- timer = timer.m_next;
- }
-
- if (haveTimerToSchedule)
- {
- EnsureAppDomainTimerFiresBy(nextAppDomainTimerDuration);
- }
- }
- }
- }
-
//
// Fire any timers that have expired, and update the native timer to schedule the rest of them.
@@ -512,19 +431,13 @@ namespace System.Threading
volatile WaitHandle m_notifyWhenNoCallbacksRunning;
- internal TimerQueueTimer(TimerCallback timerCallback, object state, uint dueTime, uint period, ref StackCrawlMark stackMark)
+ internal TimerQueueTimer(TimerCallback timerCallback, object state, uint dueTime, uint period)
{
m_timerCallback = timerCallback;
m_state = state;
m_dueTime = Timeout.UnsignedInfinite;
m_period = Timeout.UnsignedInfinite;
-
- if (!ExecutionContext.IsFlowSuppressed())
- {
- m_executionContext = ExecutionContext.Capture(
- ref stackMark,
- ExecutionContext.CaptureOptions.IgnoreSyncCtx | ExecutionContext.CaptureOptions.OptimizeDefaultCase);
- }
+ m_executionContext = ExecutionContext.Capture();
//
// After the following statement, the timer may fire. No more manipulation of timer state outside of
@@ -678,29 +591,15 @@ namespace System.Threading
}
else
{
- using (ExecutionContext executionContext =
- m_executionContext.IsPreAllocatedDefault ? m_executionContext : m_executionContext.CreateCopy())
- {
- ContextCallback callback = s_callCallbackInContext;
- if (callback == null)
- s_callCallbackInContext = callback = new ContextCallback(CallCallbackInContext);
-
- ExecutionContext.Run(
- executionContext,
- callback,
- this, // state
- true); // ignoreSyncCtx
- }
+ ExecutionContext.Run(m_executionContext, s_callCallbackInContext, this);
}
}
- private static ContextCallback s_callCallbackInContext;
-
- private static void CallCallbackInContext(object state)
+ private static readonly ContextCallback s_callCallbackInContext = state =>
{
TimerQueueTimer t = (TimerQueueTimer)state;
t.m_timerCallback(t.m_state);
- }
+ };
}
//
@@ -756,14 +655,12 @@ namespace System.Threading
}
- [System.Runtime.InteropServices.ComVisible(true)]
public sealed class Timer : MarshalByRefObject, IDisposable
{
private const UInt32 MAX_SUPPORTED_TIMEOUT = (uint)0xfffffffe;
private TimerHolder m_timer;
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public Timer(TimerCallback callback,
Object state,
int dueTime,
@@ -774,12 +671,10 @@ namespace System.Threading
if (period < -1 )
throw new ArgumentOutOfRangeException(nameof(period), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1"));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- TimerSetup(callback,state,(UInt32)dueTime,(UInt32)period,ref stackMark);
+ TimerSetup(callback,state,(UInt32)dueTime,(UInt32)period);
}
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public Timer(TimerCallback callback,
Object state,
TimeSpan dueTime,
@@ -797,22 +692,18 @@ namespace System.Threading
if (periodTm > MAX_SUPPORTED_TIMEOUT)
throw new ArgumentOutOfRangeException(nameof(periodTm),Environment.GetResourceString("ArgumentOutOfRange_PeriodTooLarge"));
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- TimerSetup(callback,state,(UInt32)dueTm,(UInt32)periodTm,ref stackMark);
+ TimerSetup(callback,state,(UInt32)dueTm,(UInt32)periodTm);
}
[CLSCompliant(false)]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public Timer(TimerCallback callback,
Object state,
UInt32 dueTime,
UInt32 period)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- TimerSetup(callback,state,dueTime,period,ref stackMark);
+ TimerSetup(callback,state,dueTime,period);
}
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public Timer(TimerCallback callback,
Object state,
long dueTime,
@@ -827,11 +718,9 @@ namespace System.Threading
if (period > MAX_SUPPORTED_TIMEOUT)
throw new ArgumentOutOfRangeException(nameof(period),Environment.GetResourceString("ArgumentOutOfRange_PeriodTooLarge"));
Contract.EndContractBlock();
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- TimerSetup(callback,state,(UInt32) dueTime, (UInt32) period,ref stackMark);
+ TimerSetup(callback,state,(UInt32) dueTime, (UInt32) period);
}
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public Timer(TimerCallback callback)
{
int dueTime = -1; // we want timer to be registered, but not activated. Requires caller to call
@@ -839,31 +728,19 @@ namespace System.Threading
// for a timer to be fired before the returned value is assigned to the variable,
// potentially causing the callback to reference a bogus value (if passing the timer to the callback).
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- TimerSetup(callback, this, (UInt32)dueTime, (UInt32)period, ref stackMark);
+ TimerSetup(callback, this, (UInt32)dueTime, (UInt32)period);
}
private void TimerSetup(TimerCallback callback,
Object state,
UInt32 dueTime,
- UInt32 period,
- ref StackCrawlMark stackMark)
+ UInt32 period)
{
if (callback == null)
throw new ArgumentNullException(nameof(TimerCallback));
Contract.EndContractBlock();
- m_timer = new TimerHolder(new TimerQueueTimer(callback, state, dueTime, period, ref stackMark));
- }
-
- internal static void Pause()
- {
- TimerQueue.Instance.Pause();
- }
-
- internal static void Resume()
- {
- TimerQueue.Instance.Resume();
+ m_timer = new TimerHolder(new TimerQueueTimer(callback, state, dueTime, period));
}
public bool Change(int dueTime, int period)
diff --git a/src/mscorlib/src/System/Threading/Volatile.cs b/src/mscorlib/src/System/Threading/Volatile.cs
index 3894b435fa..c94a69ab7b 100644
--- a/src/mscorlib/src/System/Threading/Volatile.cs
+++ b/src/mscorlib/src/System/Threading/Volatile.cs
@@ -26,7 +26,6 @@ namespace System.Threading
//
public static class Volatile
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static bool Read(ref bool location)
{
@@ -38,7 +37,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static sbyte Read(ref sbyte location)
@@ -51,7 +49,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static byte Read(ref byte location)
{
@@ -63,7 +60,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static short Read(ref short location)
{
@@ -75,7 +71,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static ushort Read(ref ushort location)
@@ -88,7 +83,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static int Read(ref int location)
{
@@ -100,7 +94,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static uint Read(ref uint location)
@@ -114,7 +107,6 @@ namespace System.Threading
}
#if BIT64
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static long Read(ref long location)
{
@@ -126,7 +118,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static ulong Read(ref ulong location)
@@ -139,7 +130,6 @@ namespace System.Threading
return value;
}
#else
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static long Read(ref long location)
{
//
@@ -151,7 +141,6 @@ namespace System.Threading
return Interlocked.CompareExchange(ref location, 0, 0);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
public static ulong Read(ref ulong location)
{
@@ -169,7 +158,6 @@ namespace System.Threading
}
#endif
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static IntPtr Read(ref IntPtr location)
{
@@ -181,7 +169,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static UIntPtr Read(ref UIntPtr location)
@@ -194,7 +181,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static float Read(ref float location)
{
@@ -206,7 +192,6 @@ namespace System.Threading
return value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static double Read(ref double location)
{
@@ -219,7 +204,6 @@ namespace System.Threading
return Interlocked.CompareExchange(ref location, 0, 0);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static T Read<T>(ref T location) where T : class
{
@@ -234,7 +218,6 @@ namespace System.Threading
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref bool location, bool value)
{
@@ -245,7 +228,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref sbyte location, sbyte value)
@@ -257,7 +239,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref byte location, byte value)
{
@@ -268,7 +249,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref short location, short value)
{
@@ -279,7 +259,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref ushort location, ushort value)
@@ -291,7 +270,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref int location, int value)
{
@@ -302,7 +280,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref uint location, uint value)
@@ -315,7 +292,6 @@ namespace System.Threading
}
#if BIT64
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref long location, long value)
{
@@ -326,7 +302,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref ulong location, ulong value)
@@ -338,7 +313,6 @@ namespace System.Threading
location = value;
}
#else
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static void Write(ref long location, long value)
{
//
@@ -350,7 +324,6 @@ namespace System.Threading
Interlocked.Exchange(ref location, value);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
public static void Write(ref ulong location, ulong value)
{
@@ -374,7 +347,6 @@ namespace System.Threading
}
#endif
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref IntPtr location, IntPtr value)
{
@@ -385,7 +357,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[CLSCompliant(false)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref UIntPtr location, UIntPtr value)
@@ -397,7 +368,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref float location, float value)
{
@@ -408,7 +378,6 @@ namespace System.Threading
location = value;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static void Write(ref double location, double value)
{
@@ -421,7 +390,6 @@ namespace System.Threading
Interlocked.Exchange(ref location, value);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static void Write<T>(ref T location, T value) where T : class
{
diff --git a/src/mscorlib/src/System/Threading/WaitHandle.cs b/src/mscorlib/src/System/Threading/WaitHandle.cs
index 7638c8b35b..d4dcd710be 100644
--- a/src/mscorlib/src/System/Threading/WaitHandle.cs
+++ b/src/mscorlib/src/System/Threading/WaitHandle.cs
@@ -17,7 +17,6 @@ namespace System.Threading
using System.Threading;
using System.Runtime.Remoting;
using System;
- using System.Security.Permissions;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;
@@ -27,7 +26,6 @@ namespace System.Threading
using System.Diagnostics.CodeAnalysis;
using Win32Native = Microsoft.Win32.Win32Native;
- [System.Runtime.InteropServices.ComVisible(true)]
public abstract class WaitHandle : MarshalByRefObject, IDisposable {
public const int WaitTimeout = 0x102;
@@ -102,7 +100,6 @@ namespace System.Threading
public SafeWaitHandle SafeWaitHandle
{
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
get
{
if (safeWaitHandle == null)
@@ -112,7 +109,6 @@ namespace System.Threading
return safeWaitHandle;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
set
{
// Set safeWaitHandle and waitHandle in a CER so we won't take
@@ -245,7 +241,6 @@ namespace System.Threading
========================================================================*/
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private static extern int WaitMultiple(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext, bool WaitAll);
public static bool WaitAll(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext)
@@ -350,7 +345,6 @@ namespace System.Threading
** (if in a synchronized context) is exited before the wait and reacquired
========================================================================*/
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int WaitAny(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext)
{
if (waitHandles==null)
@@ -406,7 +400,6 @@ namespace System.Threading
return ret;
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int WaitAny(
WaitHandle[] waitHandles,
TimeSpan timeout,
@@ -419,7 +412,6 @@ namespace System.Threading
}
return WaitAny(waitHandles,(int)tm, exitContext);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int WaitAny(WaitHandle[] waitHandles, TimeSpan timeout)
{
return WaitAny(waitHandles, timeout, true);
@@ -429,13 +421,11 @@ namespace System.Threading
/*========================================================================
** Shorthand for WaitAny with timeout = Timeout.Infinite and exitContext = true
========================================================================*/
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int WaitAny(WaitHandle[] waitHandles)
{
return WaitAny(waitHandles, Timeout.Infinite, true);
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static int WaitAny(WaitHandle[] waitHandles, int millisecondsTimeout)
{
return WaitAny(waitHandles, millisecondsTimeout, true);
@@ -446,10 +436,11 @@ namespace System.Threading
== SignalAndWait
==
==================================================*/
-
+#if !PLATFORM_UNIX
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern int SignalAndWaitOne(SafeWaitHandle waitHandleToSignal,SafeWaitHandle waitHandleToWaitOn, int millisecondsTimeout,
bool hasThreadAffinity, bool exitContext);
+#endif // !PLATFORM_UNIX
public static bool SignalAndWait(
WaitHandle toSignal,
diff --git a/src/mscorlib/src/System/ThrowHelper.cs b/src/mscorlib/src/System/ThrowHelper.cs
index a534dec818..1ed8317633 100644
--- a/src/mscorlib/src/System/ThrowHelper.cs
+++ b/src/mscorlib/src/System/ThrowHelper.cs
@@ -39,12 +39,10 @@ namespace System {
using Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
- using System.Diagnostics;
using System.Diagnostics.Contracts;
[Pure]
internal static class ThrowHelper {
-#if FEATURE_SPAN_OF_T
internal static void ThrowArrayTypeMismatchException() {
throw new ArrayTypeMismatchException();
}
@@ -72,7 +70,6 @@ namespace System {
internal static void ThrowNotSupportedException_CannotCallGetHashCodeOnSpan() {
throw new NotSupportedException(Environment.GetResourceString("NotSupported_CannotCallGetHashCodeOnSpan"));
}
-#endif
internal static void ThrowArgumentOutOfRange_IndexException() {
throw GetArgumentOutOfRangeException(ExceptionArgument.index,
@@ -127,8 +124,12 @@ namespace System {
throw GetArgumentException(resource, argument);
}
+ private static ArgumentNullException GetArgumentNullException(ExceptionArgument argument) {
+ return new ArgumentNullException(GetArgumentName(argument));
+ }
+
internal static void ThrowArgumentNullException(ExceptionArgument argument) {
- throw new ArgumentNullException(GetArgumentName(argument));
+ throw GetArgumentNullException(argument);
}
internal static void ThrowArgumentNullException(ExceptionResource resource) {
@@ -211,11 +212,27 @@ namespace System {
throw GetInvalidOperationException(ExceptionResource.InvalidOperation_EnumOpCantHappen);
}
+ internal static void ThrowArraySegmentCtorValidationFailedExceptions(Array array, int offset, int count) {
+ throw GetArraySegmentCtorValidationFailedException(array, offset, count);
+ }
+
+ private static Exception GetArraySegmentCtorValidationFailedException(Array array, int offset, int count) {
+ if (array == null)
+ return GetArgumentNullException(ExceptionArgument.array);
+ if (offset < 0)
+ return GetArgumentOutOfRangeException(ExceptionArgument.offset, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
+ if (count < 0)
+ return GetArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
+
+ Debug.Assert(array.Length - offset < count);
+ return GetArgumentException(ExceptionResource.Argument_InvalidOffLen);
+ }
+
private static ArgumentException GetArgumentException(ExceptionResource resource) {
return new ArgumentException(GetResourceString(resource));
}
- private static InvalidOperationException GetInvalidOperationException(ExceptionResource resource) {
+ internal static InvalidOperationException GetInvalidOperationException(ExceptionResource resource) {
return new InvalidOperationException(GetResourceString(resource));
}
@@ -227,7 +244,7 @@ namespace System {
return new ArgumentException(Environment.GetResourceString("Arg_WrongType", value, targetType), nameof(value));
}
- private static ArgumentOutOfRangeException GetArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) {
+ internal static ArgumentOutOfRangeException GetArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) {
return new ArgumentOutOfRangeException(GetArgumentName(argument), GetResourceString(resource));
}
@@ -363,7 +380,8 @@ namespace System {
updateValueFactory,
concurrencyLevel,
text,
-
+ callBack,
+ type,
}
//
@@ -453,7 +471,6 @@ namespace System {
Task_ContinueWith_NotOnAnything,
Task_ContinueWith_ESandLR,
TaskT_TransitionToFinal_AlreadyCompleted,
- TaskT_ctor_SelfReplicating,
TaskCompletionSourceT_TrySetException_NullException,
TaskCompletionSourceT_TrySetException_NoExceptions,
InvalidOperation_WrongAsyncResultOrEndCalledMultiple,
@@ -468,7 +485,8 @@ namespace System {
ConcurrentDictionary_ArrayNotLargeEnough,
ConcurrentDictionary_ArrayIncorrectType,
ConcurrentCollection_SyncRoot_NotSupported,
-
+ ArgumentOutOfRange_Enum,
+ InvalidOperation_HandleIsNotInitialized,
}
}
diff --git a/src/mscorlib/src/System/TimeSpan.cs b/src/mscorlib/src/System/TimeSpan.cs
index a594da20e7..7b71b48fed 100644
--- a/src/mscorlib/src/System/TimeSpan.cs
+++ b/src/mscorlib/src/System/TimeSpan.cs
@@ -28,7 +28,6 @@ namespace System {
// details of this type should change, or new fields added, we need to remember to add
// an appropriate custom ILMarshaler to keep WInRT interop scenarios enabled.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable] public struct TimeSpan : IComparable
, IComparable<TimeSpan>, IEquatable<TimeSpan>, IFormattable
{
diff --git a/src/mscorlib/src/System/TimeZone.cs b/src/mscorlib/src/System/TimeZone.cs
index c0a369fd3c..8ede49293e 100644
--- a/src/mscorlib/src/System/TimeZone.cs
+++ b/src/mscorlib/src/System/TimeZone.cs
@@ -26,7 +26,6 @@ namespace System {
using System.Globalization;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
[Obsolete("System.TimeZone has been deprecated. Please investigate the use of System.TimeZoneInfo instead.")]
public abstract class TimeZone {
private static volatile TimeZone currentTimeZone = null;
diff --git a/src/mscorlib/src/System/TimeZoneInfo.AdjustmentRule.cs b/src/mscorlib/src/System/TimeZoneInfo.AdjustmentRule.cs
new file mode 100644
index 0000000000..d27d2386e2
--- /dev/null
+++ b/src/mscorlib/src/System/TimeZoneInfo.AdjustmentRule.cs
@@ -0,0 +1,251 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Diagnostics.Contracts;
+using System.Runtime.Serialization;
+
+namespace System
+{
+ public sealed partial class TimeZoneInfo
+ {
+ [Serializable]
+ public sealed class AdjustmentRule : IEquatable<AdjustmentRule>, ISerializable, IDeserializationCallback
+ {
+ private readonly DateTime _dateStart;
+ private readonly DateTime _dateEnd;
+ private readonly TimeSpan _daylightDelta;
+ private readonly TransitionTime _daylightTransitionStart;
+ private readonly TransitionTime _daylightTransitionEnd;
+ private readonly TimeSpan _baseUtcOffsetDelta; // delta from the default Utc offset (utcOffset = defaultUtcOffset + _baseUtcOffsetDelta)
+ private readonly bool _noDaylightTransitions;
+
+ public DateTime DateStart => _dateStart;
+
+ public DateTime DateEnd => _dateEnd;
+
+ public TimeSpan DaylightDelta => _daylightDelta;
+
+ public TransitionTime DaylightTransitionStart => _daylightTransitionStart;
+
+ public TransitionTime DaylightTransitionEnd => _daylightTransitionEnd;
+
+ internal TimeSpan BaseUtcOffsetDelta => _baseUtcOffsetDelta;
+
+ /// <summary>
+ /// Gets a value indicating that this AdjustmentRule fixes the time zone offset
+ /// from DateStart to DateEnd without any daylight transitions in between.
+ /// </summary>
+ internal bool NoDaylightTransitions => _noDaylightTransitions;
+
+ internal bool HasDaylightSaving =>
+ DaylightDelta != TimeSpan.Zero ||
+ (DaylightTransitionStart != default(TransitionTime) && DaylightTransitionStart.TimeOfDay != DateTime.MinValue) ||
+ (DaylightTransitionEnd != default(TransitionTime) && DaylightTransitionEnd.TimeOfDay != DateTime.MinValue.AddMilliseconds(1));
+
+ public bool Equals(AdjustmentRule other) =>
+ other != null &&
+ _dateStart == other._dateStart &&
+ _dateEnd == other._dateEnd &&
+ _daylightDelta == other._daylightDelta &&
+ _baseUtcOffsetDelta == other._baseUtcOffsetDelta &&
+ _daylightTransitionEnd.Equals(other._daylightTransitionEnd) &&
+ _daylightTransitionStart.Equals(other._daylightTransitionStart);
+
+ public override int GetHashCode() => _dateStart.GetHashCode();
+
+ private AdjustmentRule(
+ DateTime dateStart,
+ DateTime dateEnd,
+ TimeSpan daylightDelta,
+ TransitionTime daylightTransitionStart,
+ TransitionTime daylightTransitionEnd,
+ TimeSpan baseUtcOffsetDelta,
+ bool noDaylightTransitions)
+ {
+ ValidateAdjustmentRule(dateStart, dateEnd, daylightDelta,
+ daylightTransitionStart, daylightTransitionEnd, noDaylightTransitions);
+
+ _dateStart = dateStart;
+ _dateEnd = dateEnd;
+ _daylightDelta = daylightDelta;
+ _daylightTransitionStart = daylightTransitionStart;
+ _daylightTransitionEnd = daylightTransitionEnd;
+ _baseUtcOffsetDelta = baseUtcOffsetDelta;
+ _noDaylightTransitions = noDaylightTransitions;
+ }
+
+ public static AdjustmentRule CreateAdjustmentRule(
+ DateTime dateStart,
+ DateTime dateEnd,
+ TimeSpan daylightDelta,
+ TransitionTime daylightTransitionStart,
+ TransitionTime daylightTransitionEnd)
+ {
+ return new AdjustmentRule(
+ dateStart,
+ dateEnd,
+ daylightDelta,
+ daylightTransitionStart,
+ daylightTransitionEnd,
+ baseUtcOffsetDelta: TimeSpan.Zero,
+ noDaylightTransitions: false);
+ }
+
+ internal static AdjustmentRule CreateAdjustmentRule(
+ DateTime dateStart,
+ DateTime dateEnd,
+ TimeSpan daylightDelta,
+ TransitionTime daylightTransitionStart,
+ TransitionTime daylightTransitionEnd,
+ TimeSpan baseUtcOffsetDelta,
+ bool noDaylightTransitions)
+ {
+ return new AdjustmentRule(
+ dateStart,
+ dateEnd,
+ daylightDelta,
+ daylightTransitionStart,
+ daylightTransitionEnd,
+ baseUtcOffsetDelta,
+ noDaylightTransitions);
+ }
+
+ //
+ // When Windows sets the daylight transition start Jan 1st at 12:00 AM, it means the year starts with the daylight saving on.
+ // We have to special case this value and not adjust it when checking if any date is in the daylight saving period.
+ //
+ internal bool IsStartDateMarkerForBeginningOfYear() =>
+ !NoDaylightTransitions &&
+ DaylightTransitionStart.Month == 1 && DaylightTransitionStart.Day == 1 && DaylightTransitionStart.TimeOfDay.Hour == 0 &&
+ DaylightTransitionStart.TimeOfDay.Minute == 0 && DaylightTransitionStart.TimeOfDay.Second == 0 &&
+ _dateStart.Year == _dateEnd.Year;
+
+ //
+ // When Windows sets the daylight transition end Jan 1st at 12:00 AM, it means the year ends with the daylight saving on.
+ // We have to special case this value and not adjust it when checking if any date is in the daylight saving period.
+ //
+ internal bool IsEndDateMarkerForEndOfYear() =>
+ !NoDaylightTransitions &&
+ DaylightTransitionEnd.Month == 1 && DaylightTransitionEnd.Day == 1 && DaylightTransitionEnd.TimeOfDay.Hour == 0 &&
+ DaylightTransitionEnd.TimeOfDay.Minute == 0 && DaylightTransitionEnd.TimeOfDay.Second == 0 &&
+ _dateStart.Year == _dateEnd.Year;
+
+ /// <summary>
+ /// Helper function that performs all of the validation checks for the actory methods and deserialization callback.
+ /// </summary>
+ private static void ValidateAdjustmentRule(
+ DateTime dateStart,
+ DateTime dateEnd,
+ TimeSpan daylightDelta,
+ TransitionTime daylightTransitionStart,
+ TransitionTime daylightTransitionEnd,
+ bool noDaylightTransitions)
+ {
+ if (dateStart.Kind != DateTimeKind.Unspecified && dateStart.Kind != DateTimeKind.Utc)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeKindMustBeUnspecifiedOrUtc"), nameof(dateStart));
+ }
+
+ if (dateEnd.Kind != DateTimeKind.Unspecified && dateEnd.Kind != DateTimeKind.Utc)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeKindMustBeUnspecifiedOrUtc"), nameof(dateEnd));
+ }
+
+ if (daylightTransitionStart.Equals(daylightTransitionEnd) && !noDaylightTransitions)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_TransitionTimesAreIdentical"), nameof(daylightTransitionEnd));
+ }
+
+ if (dateStart > dateEnd)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_OutOfOrderDateTimes"), nameof(dateStart));
+ }
+
+ // This cannot use UtcOffsetOutOfRange to account for the scenario where Samoa moved across the International Date Line,
+ // which caused their current BaseUtcOffset to be +13. But on the other side of the line it was UTC-11 (+1 for daylight).
+ // So when trying to describe DaylightDeltas for those times, the DaylightDelta needs
+ // to be -23 (what it takes to go from UTC+13 to UTC-10)
+ if (daylightDelta.TotalHours < -23.0 || daylightDelta.TotalHours > 14.0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(daylightDelta), daylightDelta, Environment.GetResourceString("ArgumentOutOfRange_UtcOffset"));
+ }
+
+ if (daylightDelta.Ticks % TimeSpan.TicksPerMinute != 0)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_TimeSpanHasSeconds"), nameof(daylightDelta));
+ }
+
+ if (dateStart != DateTime.MinValue && dateStart.Kind == DateTimeKind.Unspecified && dateStart.TimeOfDay != TimeSpan.Zero)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeHasTimeOfDay"), nameof(dateStart));
+ }
+
+ if (dateEnd != DateTime.MaxValue && dateEnd.Kind == DateTimeKind.Unspecified && dateEnd.TimeOfDay != TimeSpan.Zero)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeHasTimeOfDay"), nameof(dateEnd));
+ }
+ Contract.EndContractBlock();
+ }
+
+ void IDeserializationCallback.OnDeserialization(object sender)
+ {
+ // OnDeserialization is called after each instance of this class is deserialized.
+ // This callback method performs AdjustmentRule validation after being deserialized.
+
+ try
+ {
+ ValidateAdjustmentRule(_dateStart, _dateEnd, _daylightDelta,
+ _daylightTransitionStart, _daylightTransitionEnd, _noDaylightTransitions);
+ }
+ catch (ArgumentException e)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
+ }
+ }
+
+ void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ if (info == null)
+ {
+ throw new ArgumentNullException(nameof(info));
+ }
+ Contract.EndContractBlock();
+
+ info.AddValue("DateStart", _dateStart);
+ info.AddValue("DateEnd", _dateEnd);
+ info.AddValue("DaylightDelta", _daylightDelta);
+ info.AddValue("DaylightTransitionStart", _daylightTransitionStart);
+ info.AddValue("DaylightTransitionEnd", _daylightTransitionEnd);
+ info.AddValue("BaseUtcOffsetDelta", _baseUtcOffsetDelta);
+ info.AddValue("NoDaylightTransitions", _noDaylightTransitions);
+ }
+
+ AdjustmentRule(SerializationInfo info, StreamingContext context)
+ {
+ if (info == null)
+ {
+ throw new ArgumentNullException(nameof(info));
+ }
+
+ _dateStart = (DateTime)info.GetValue("DateStart", typeof(DateTime));
+ _dateEnd = (DateTime)info.GetValue("DateEnd", typeof(DateTime));
+ _daylightDelta = (TimeSpan)info.GetValue("DaylightDelta", typeof(TimeSpan));
+ _daylightTransitionStart = (TransitionTime)info.GetValue("DaylightTransitionStart", typeof(TransitionTime));
+ _daylightTransitionEnd = (TransitionTime)info.GetValue("DaylightTransitionEnd", typeof(TransitionTime));
+
+ object o = info.GetValueNoThrow("BaseUtcOffsetDelta", typeof(TimeSpan));
+ if (o != null)
+ {
+ _baseUtcOffsetDelta = (TimeSpan)o;
+ }
+
+ o = info.GetValueNoThrow("NoDaylightTransitions", typeof(bool));
+ if (o != null)
+ {
+ _noDaylightTransitions = (bool)o;
+ }
+ }
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/TimeZoneInfo.StringSerializer.cs b/src/mscorlib/src/System/TimeZoneInfo.StringSerializer.cs
new file mode 100644
index 0000000000..9c1d5c3502
--- /dev/null
+++ b/src/mscorlib/src/System/TimeZoneInfo.StringSerializer.cs
@@ -0,0 +1,625 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+using System.Globalization;
+using System.Runtime.Serialization;
+using System.Text;
+
+namespace System
+{
+ public sealed partial class TimeZoneInfo
+ {
+ /// <summary>
+ /// Used to serialize and deserialize TimeZoneInfo objects based on the custom string serialization format.
+ /// </summary>
+ private struct StringSerializer
+ {
+ private enum State
+ {
+ Escaped = 0,
+ NotEscaped = 1,
+ StartOfToken = 2,
+ EndOfLine = 3
+ }
+
+ private readonly string _serializedText;
+ private int _currentTokenStartIndex;
+ private State _state;
+
+ // the majority of the strings contained in the OS time zones fit in 64 chars
+ private const int InitialCapacityForString = 64;
+ private const char Esc = '\\';
+ private const char Sep = ';';
+ private const char Lhs = '[';
+ private const char Rhs = ']';
+ private const string DateTimeFormat = "MM:dd:yyyy";
+ private const string TimeOfDayFormat = "HH:mm:ss.FFF";
+
+ /// <summary>
+ /// Creates the custom serialized string representation of a TimeZoneInfo instance.
+ /// </summary>
+ public static string GetSerializedString(TimeZoneInfo zone)
+ {
+ StringBuilder serializedText = StringBuilderCache.Acquire();
+
+ //
+ // <_id>;<_baseUtcOffset>;<_displayName>;<_standardDisplayName>;<_daylightDispayName>
+ //
+ SerializeSubstitute(zone.Id, serializedText);
+ serializedText.Append(Sep);
+ serializedText.Append(zone.BaseUtcOffset.TotalMinutes.ToString(CultureInfo.InvariantCulture));
+ serializedText.Append(Sep);
+ SerializeSubstitute(zone.DisplayName, serializedText);
+ serializedText.Append(Sep);
+ SerializeSubstitute(zone.StandardName, serializedText);
+ serializedText.Append(Sep);
+ SerializeSubstitute(zone.DaylightName, serializedText);
+ serializedText.Append(Sep);
+
+ AdjustmentRule[] rules = zone.GetAdjustmentRules();
+ foreach (AdjustmentRule rule in rules)
+ {
+ serializedText.Append(Lhs);
+ serializedText.Append(rule.DateStart.ToString(DateTimeFormat, DateTimeFormatInfo.InvariantInfo));
+ serializedText.Append(Sep);
+ serializedText.Append(rule.DateEnd.ToString(DateTimeFormat, DateTimeFormatInfo.InvariantInfo));
+ serializedText.Append(Sep);
+ serializedText.Append(rule.DaylightDelta.TotalMinutes.ToString(CultureInfo.InvariantCulture));
+ serializedText.Append(Sep);
+ // serialize the TransitionTime's
+ SerializeTransitionTime(rule.DaylightTransitionStart, serializedText);
+ serializedText.Append(Sep);
+ SerializeTransitionTime(rule.DaylightTransitionEnd, serializedText);
+ serializedText.Append(Sep);
+ if (rule.BaseUtcOffsetDelta != TimeSpan.Zero)
+ {
+ // Serialize it only when BaseUtcOffsetDelta has a value to reduce the impact of adding rule.BaseUtcOffsetDelta
+ serializedText.Append(rule.BaseUtcOffsetDelta.TotalMinutes.ToString(CultureInfo.InvariantCulture));
+ serializedText.Append(Sep);
+ }
+ if (rule.NoDaylightTransitions)
+ {
+ // Serialize it only when NoDaylightTransitions is true to reduce the impact of adding rule.NoDaylightTransitions
+ serializedText.Append('1');
+ serializedText.Append(Sep);
+ }
+ serializedText.Append(Rhs);
+ }
+ serializedText.Append(Sep);
+
+ return StringBuilderCache.GetStringAndRelease(serializedText);
+ }
+
+ /// <summary>
+ /// Instantiates a TimeZoneInfo from a custom serialized string.
+ /// </summary>
+ public static TimeZoneInfo GetDeserializedTimeZoneInfo(string source)
+ {
+ StringSerializer s = new StringSerializer(source);
+
+ string id = s.GetNextStringValue();
+ TimeSpan baseUtcOffset = s.GetNextTimeSpanValue();
+ string displayName = s.GetNextStringValue();
+ string standardName = s.GetNextStringValue();
+ string daylightName = s.GetNextStringValue();
+ AdjustmentRule[] rules = s.GetNextAdjustmentRuleArrayValue();
+
+ try
+ {
+ return new TimeZoneInfo(id, baseUtcOffset, displayName, standardName, daylightName, rules, disableDaylightSavingTime: false);
+ }
+ catch (ArgumentException ex)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), ex);
+ }
+ catch (InvalidTimeZoneException ex)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), ex);
+ }
+ }
+
+ private StringSerializer(string str)
+ {
+ _serializedText = str;
+ _currentTokenStartIndex = 0;
+ _state = State.StartOfToken;
+ }
+
+ /// <summary>
+ /// Appends the String to the StringBuilder with all of the reserved chars escaped.
+ ///
+ /// ";" -> "\;"
+ /// "[" -> "\["
+ /// "]" -> "\]"
+ /// "\" -> "\\"
+ /// </summary>
+ private static void SerializeSubstitute(string text, StringBuilder serializedText)
+ {
+ foreach (char c in text)
+ {
+ if (c == Esc || c == Lhs || c == Rhs || c == Sep)
+ {
+ serializedText.Append('\\');
+ }
+ serializedText.Append(c);
+ }
+ }
+
+ /// <summary>
+ /// Helper method to serialize a TimeZoneInfo.TransitionTime object.
+ /// </summary>
+ private static void SerializeTransitionTime(TransitionTime time, StringBuilder serializedText)
+ {
+ serializedText.Append(Lhs);
+ serializedText.Append(time.IsFixedDateRule ? '1' : '0');
+ serializedText.Append(Sep);
+ serializedText.Append(time.TimeOfDay.ToString(TimeOfDayFormat, DateTimeFormatInfo.InvariantInfo));
+ serializedText.Append(Sep);
+ serializedText.Append(time.Month.ToString(CultureInfo.InvariantCulture));
+ serializedText.Append(Sep);
+ if (time.IsFixedDateRule)
+ {
+ serializedText.Append(time.Day.ToString(CultureInfo.InvariantCulture));
+ serializedText.Append(Sep);
+ }
+ else
+ {
+ serializedText.Append(time.Week.ToString(CultureInfo.InvariantCulture));
+ serializedText.Append(Sep);
+ serializedText.Append(((int)time.DayOfWeek).ToString(CultureInfo.InvariantCulture));
+ serializedText.Append(Sep);
+ }
+ serializedText.Append(Rhs);
+ }
+
+ /// <summary>
+ /// Helper function to determine if the passed in string token is allowed to be preceeded by an escape sequence token.
+ /// </summary>
+ private static void VerifyIsEscapableCharacter(char c)
+ {
+ if (c != Esc && c != Sep && c != Lhs && c != Rhs)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidEscapeSequence", c));
+ }
+ }
+
+ /// <summary>
+ /// Helper function that reads past "v.Next" data fields. Receives a "depth" parameter indicating the
+ /// current relative nested bracket depth that _currentTokenStartIndex is at. The function ends
+ /// successfully when "depth" returns to zero (0).
+ /// </summary>
+ private void SkipVersionNextDataFields(int depth /* starting depth in the nested brackets ('[', ']')*/)
+ {
+ if (_currentTokenStartIndex < 0 || _currentTokenStartIndex >= _serializedText.Length)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+ State tokenState = State.NotEscaped;
+
+ // walk the serialized text, building up the token as we go...
+ for (int i = _currentTokenStartIndex; i < _serializedText.Length; i++)
+ {
+ if (tokenState == State.Escaped)
+ {
+ VerifyIsEscapableCharacter(_serializedText[i]);
+ tokenState = State.NotEscaped;
+ }
+ else if (tokenState == State.NotEscaped)
+ {
+ switch (_serializedText[i])
+ {
+ case Esc:
+ tokenState = State.Escaped;
+ break;
+
+ case Lhs:
+ depth++;
+ break;
+ case Rhs:
+ depth--;
+ if (depth == 0)
+ {
+ _currentTokenStartIndex = i + 1;
+ if (_currentTokenStartIndex >= _serializedText.Length)
+ {
+ _state = State.EndOfLine;
+ }
+ else
+ {
+ _state = State.StartOfToken;
+ }
+ return;
+ }
+ break;
+
+ case '\0':
+ // invalid character
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+
+ default:
+ break;
+ }
+ }
+ }
+
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ /// <summary>
+ /// Helper function that reads a string token from the serialized text. The function
+ /// updates <see cref="_currentTokenStartIndex"/> to point to the next token on exit.
+ /// Also <see cref="_state"/> is set to either <see cref="State.StartOfToken"/> or
+ /// <see cref="State.EndOfLine"/> on exit.
+ /// </summary>
+ private string GetNextStringValue()
+ {
+ // first verify the internal state of the object
+ if (_state == State.EndOfLine)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+ if (_currentTokenStartIndex < 0 || _currentTokenStartIndex >= _serializedText.Length)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+ State tokenState = State.NotEscaped;
+ StringBuilder token = StringBuilderCache.Acquire(InitialCapacityForString);
+
+ // walk the serialized text, building up the token as we go...
+ for (int i = _currentTokenStartIndex; i < _serializedText.Length; i++)
+ {
+ if (tokenState == State.Escaped)
+ {
+ VerifyIsEscapableCharacter(_serializedText[i]);
+ token.Append(_serializedText[i]);
+ tokenState = State.NotEscaped;
+ }
+ else if (tokenState == State.NotEscaped)
+ {
+ switch (_serializedText[i])
+ {
+ case Esc:
+ tokenState = State.Escaped;
+ break;
+
+ case Lhs:
+ // '[' is an unexpected character
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+
+ case Rhs:
+ // ']' is an unexpected character
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+
+ case Sep:
+ _currentTokenStartIndex = i + 1;
+ if (_currentTokenStartIndex >= _serializedText.Length)
+ {
+ _state = State.EndOfLine;
+ }
+ else
+ {
+ _state = State.StartOfToken;
+ }
+ return StringBuilderCache.GetStringAndRelease(token);
+
+ case '\0':
+ // invalid character
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+
+ default:
+ token.Append(_serializedText[i]);
+ break;
+ }
+ }
+ }
+ //
+ // we are at the end of the line
+ //
+ if (tokenState == State.Escaped)
+ {
+ // we are at the end of the serialized text but we are in an escaped state
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidEscapeSequence", string.Empty));
+ }
+
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ /// <summary>
+ /// Helper function to read a DateTime token.
+ /// </summary>
+ private DateTime GetNextDateTimeValue(string format)
+ {
+ string token = GetNextStringValue();
+ DateTime time;
+ if (!DateTime.TryParseExact(token, format, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out time))
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+ return time;
+ }
+
+ /// <summary>
+ /// Helper function to read a TimeSpan token.
+ /// </summary>
+ private TimeSpan GetNextTimeSpanValue()
+ {
+ int token = GetNextInt32Value();
+ try
+ {
+ return new TimeSpan(hours: 0, minutes: token, seconds: 0);
+ }
+ catch (ArgumentOutOfRangeException e)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
+ }
+ }
+
+ /// <summary>
+ /// Helper function to read an Int32 token.
+ /// </summary>
+ private int GetNextInt32Value()
+ {
+ string token = GetNextStringValue();
+ int value;
+ if (!int.TryParse(token, NumberStyles.AllowLeadingSign /* "[sign]digits" */, CultureInfo.InvariantCulture, out value))
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+ return value;
+ }
+
+ /// <summary>
+ /// Helper function to read an AdjustmentRule[] token.
+ /// </summary>
+ private AdjustmentRule[] GetNextAdjustmentRuleArrayValue()
+ {
+ List<AdjustmentRule> rules = new List<AdjustmentRule>(1);
+ int count = 0;
+
+ // individual AdjustmentRule array elements do not require semicolons
+ AdjustmentRule rule = GetNextAdjustmentRuleValue();
+ while (rule != null)
+ {
+ rules.Add(rule);
+ count++;
+
+ rule = GetNextAdjustmentRuleValue();
+ }
+
+ // the AdjustmentRule array must end with a separator
+ if (_state == State.EndOfLine)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+ if (_currentTokenStartIndex < 0 || _currentTokenStartIndex >= _serializedText.Length)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ return count != 0 ? rules.ToArray() : null;
+ }
+
+ /// <summary>
+ /// Helper function to read an AdjustmentRule token.
+ /// </summary>
+ private AdjustmentRule GetNextAdjustmentRuleValue()
+ {
+ // first verify the internal state of the object
+ if (_state == State.EndOfLine)
+ {
+ return null;
+ }
+
+ if (_currentTokenStartIndex < 0 || _currentTokenStartIndex >= _serializedText.Length)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ // check to see if the very first token we see is the separator
+ if (_serializedText[_currentTokenStartIndex] == Sep)
+ {
+ return null;
+ }
+
+ // verify the current token is a left-hand-side marker ("[")
+ if (_serializedText[_currentTokenStartIndex] != Lhs)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+ _currentTokenStartIndex++;
+
+ DateTime dateStart = GetNextDateTimeValue(DateTimeFormat);
+ DateTime dateEnd = GetNextDateTimeValue(DateTimeFormat);
+ TimeSpan daylightDelta = GetNextTimeSpanValue();
+ TransitionTime daylightStart = GetNextTransitionTimeValue();
+ TransitionTime daylightEnd = GetNextTransitionTimeValue();
+ TimeSpan baseUtcOffsetDelta = TimeSpan.Zero;
+ int noDaylightTransitions = 0;
+
+ // verify that the string is now at the right-hand-side marker ("]") ...
+
+ if (_state == State.EndOfLine || _currentTokenStartIndex >= _serializedText.Length)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ // Check if we have baseUtcOffsetDelta in the serialized string and then deserialize it
+ if ((_serializedText[_currentTokenStartIndex] >= '0' && _serializedText[_currentTokenStartIndex] <= '9') ||
+ _serializedText[_currentTokenStartIndex] == '-' || _serializedText[_currentTokenStartIndex] == '+')
+ {
+ baseUtcOffsetDelta = GetNextTimeSpanValue();
+ }
+
+ // Check if we have NoDaylightTransitions in the serialized string and then deserialize it
+ if ((_serializedText[_currentTokenStartIndex] >= '0' && _serializedText[_currentTokenStartIndex] <= '1'))
+ {
+ noDaylightTransitions = GetNextInt32Value();
+ }
+
+ if (_state == State.EndOfLine || _currentTokenStartIndex >= _serializedText.Length)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ if (_serializedText[_currentTokenStartIndex] != Rhs)
+ {
+ // skip ahead of any "v.Next" data at the end of the AdjustmentRule
+ //
+ // FUTURE: if the serialization format is extended in the future then this
+ // code section will need to be changed to read the new fields rather
+ // than just skipping the data at the end of the [AdjustmentRule].
+ SkipVersionNextDataFields(1);
+ }
+ else
+ {
+ _currentTokenStartIndex++;
+ }
+
+ // create the AdjustmentRule from the deserialized fields ...
+
+ AdjustmentRule rule;
+ try
+ {
+ rule = AdjustmentRule.CreateAdjustmentRule(dateStart, dateEnd, daylightDelta, daylightStart, daylightEnd, baseUtcOffsetDelta, noDaylightTransitions > 0);
+ }
+ catch (ArgumentException e)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
+ }
+
+ // finally set the state to either EndOfLine or StartOfToken for the next caller
+ if (_currentTokenStartIndex >= _serializedText.Length)
+ {
+ _state = State.EndOfLine;
+ }
+ else
+ {
+ _state = State.StartOfToken;
+ }
+ return rule;
+ }
+
+ /// <summary>
+ /// Helper function to read a TransitionTime token.
+ /// </summary>
+ private TransitionTime GetNextTransitionTimeValue()
+ {
+ // first verify the internal state of the object
+
+ if (_state == State.EndOfLine ||
+ (_currentTokenStartIndex < _serializedText.Length && _serializedText[_currentTokenStartIndex] == Rhs))
+ {
+ //
+ // we are at the end of the line or we are starting at a "]" character
+ //
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ if (_currentTokenStartIndex < 0 || _currentTokenStartIndex >= _serializedText.Length)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ // verify the current token is a left-hand-side marker ("[")
+
+ if (_serializedText[_currentTokenStartIndex] != Lhs)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+ _currentTokenStartIndex++;
+
+ int isFixedDate = GetNextInt32Value();
+
+ if (isFixedDate != 0 && isFixedDate != 1)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ TransitionTime transition;
+
+ DateTime timeOfDay = GetNextDateTimeValue(TimeOfDayFormat);
+ timeOfDay = new DateTime(1, 1, 1, timeOfDay.Hour, timeOfDay.Minute, timeOfDay.Second, timeOfDay.Millisecond);
+
+ int month = GetNextInt32Value();
+
+ if (isFixedDate == 1)
+ {
+ int day = GetNextInt32Value();
+
+ try
+ {
+ transition = TransitionTime.CreateFixedDateRule(timeOfDay, month, day);
+ }
+ catch (ArgumentException e)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
+ }
+ }
+ else
+ {
+ int week = GetNextInt32Value();
+ int dayOfWeek = GetNextInt32Value();
+
+ try
+ {
+ transition = TransitionTime.CreateFloatingDateRule(timeOfDay, month, week, (DayOfWeek)dayOfWeek);
+ }
+ catch (ArgumentException e)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
+ }
+ }
+
+ // verify that the string is now at the right-hand-side marker ("]") ...
+
+ if (_state == State.EndOfLine || _currentTokenStartIndex >= _serializedText.Length)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ if (_serializedText[_currentTokenStartIndex] != Rhs)
+ {
+ // skip ahead of any "v.Next" data at the end of the AdjustmentRule
+ //
+ // FUTURE: if the serialization format is extended in the future then this
+ // code section will need to be changed to read the new fields rather
+ // than just skipping the data at the end of the [TransitionTime].
+ SkipVersionNextDataFields(1);
+ }
+ else
+ {
+ _currentTokenStartIndex++;
+ }
+
+ // check to see if the string is now at the separator (";") ...
+ bool sepFound = false;
+ if (_currentTokenStartIndex < _serializedText.Length &&
+ _serializedText[_currentTokenStartIndex] == Sep)
+ {
+ // handle the case where we ended on a ";"
+ _currentTokenStartIndex++;
+ sepFound = true;
+ }
+
+ if (!sepFound)
+ {
+ // we MUST end on a separator
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
+ }
+
+ // finally set the state to either EndOfLine or StartOfToken for the next caller
+ if (_currentTokenStartIndex >= _serializedText.Length)
+ {
+ _state = State.EndOfLine;
+ }
+ else
+ {
+ _state = State.StartOfToken;
+ }
+ return transition;
+ }
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/TimeZoneInfo.TransitionTime.cs b/src/mscorlib/src/System/TimeZoneInfo.TransitionTime.cs
new file mode 100644
index 0000000000..dedcb880a4
--- /dev/null
+++ b/src/mscorlib/src/System/TimeZoneInfo.TransitionTime.cs
@@ -0,0 +1,159 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Diagnostics.Contracts;
+using System.Runtime.Serialization;
+
+namespace System
+{
+ public sealed partial class TimeZoneInfo
+ {
+ [Serializable]
+ public struct TransitionTime : IEquatable<TransitionTime>, ISerializable, IDeserializationCallback
+ {
+ private readonly DateTime _timeOfDay;
+ private readonly byte _month;
+ private readonly byte _week;
+ private readonly byte _day;
+ private readonly DayOfWeek _dayOfWeek;
+ private readonly bool _isFixedDateRule;
+
+ public DateTime TimeOfDay => _timeOfDay;
+
+ public int Month => _month;
+
+ public int Week => _week;
+
+ public int Day => _day;
+
+ public DayOfWeek DayOfWeek => _dayOfWeek;
+
+ public bool IsFixedDateRule => _isFixedDateRule;
+
+ [Pure]
+ public override bool Equals(object obj) =>
+ obj is TransitionTime && Equals((TransitionTime)obj);
+
+ public static bool operator ==(TransitionTime t1, TransitionTime t2) => t1.Equals(t2);
+
+ public static bool operator !=(TransitionTime t1, TransitionTime t2) => !t1.Equals(t2);
+
+ [Pure]
+ public bool Equals(TransitionTime other) =>
+ _isFixedDateRule == other._isFixedDateRule &&
+ _timeOfDay == other._timeOfDay &&
+ _month == other._month &&
+ (other._isFixedDateRule ?
+ _day == other._day :
+ _week == other._week && _dayOfWeek == other._dayOfWeek);
+
+ public override int GetHashCode() => (int)_month ^ (int)_week << 8;
+
+ private TransitionTime(DateTime timeOfDay, int month, int week, int day, DayOfWeek dayOfWeek, bool isFixedDateRule)
+ {
+ ValidateTransitionTime(timeOfDay, month, week, day, dayOfWeek);
+
+ _timeOfDay = timeOfDay;
+ _month = (byte)month;
+ _week = (byte)week;
+ _day = (byte)day;
+ _dayOfWeek = dayOfWeek;
+ _isFixedDateRule = isFixedDateRule;
+ }
+
+ public static TransitionTime CreateFixedDateRule(DateTime timeOfDay, int month, int day) =>
+ new TransitionTime(timeOfDay, month, 1, day, DayOfWeek.Sunday, isFixedDateRule: true);
+
+ public static TransitionTime CreateFloatingDateRule(DateTime timeOfDay, int month, int week, DayOfWeek dayOfWeek) =>
+ new TransitionTime(timeOfDay, month, week, 1, dayOfWeek, isFixedDateRule: false);
+
+ /// <summary>
+ /// Helper function that validates a TransitionTime instance.
+ /// </summary>
+ private static void ValidateTransitionTime(DateTime timeOfDay, int month, int week, int day, DayOfWeek dayOfWeek)
+ {
+ if (timeOfDay.Kind != DateTimeKind.Unspecified)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeKindMustBeUnspecified"), nameof(timeOfDay));
+ }
+
+ // Month range 1-12
+ if (month < 1 || month > 12)
+ {
+ throw new ArgumentOutOfRangeException(nameof(month), Environment.GetResourceString("ArgumentOutOfRange_MonthParam"));
+ }
+
+ // Day range 1-31
+ if (day < 1 || day > 31)
+ {
+ throw new ArgumentOutOfRangeException(nameof(day), Environment.GetResourceString("ArgumentOutOfRange_DayParam"));
+ }
+
+ // Week range 1-5
+ if (week < 1 || week > 5)
+ {
+ throw new ArgumentOutOfRangeException(nameof(week), Environment.GetResourceString("ArgumentOutOfRange_Week"));
+ }
+
+ // DayOfWeek range 0-6
+ if ((int)dayOfWeek < 0 || (int)dayOfWeek > 6)
+ {
+ throw new ArgumentOutOfRangeException(nameof(dayOfWeek), Environment.GetResourceString("ArgumentOutOfRange_DayOfWeek"));
+ }
+ Contract.EndContractBlock();
+
+ if (timeOfDay.Year != 1 || timeOfDay.Month != 1 || timeOfDay.Day != 1 || (timeOfDay.Ticks % TimeSpan.TicksPerMillisecond != 0))
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeHasTicks"), nameof(timeOfDay));
+ }
+ }
+
+ void IDeserializationCallback.OnDeserialization(object sender)
+ {
+ // OnDeserialization is called after each instance of this class is deserialized.
+ // This callback method performs TransitionTime validation after being deserialized.
+
+ try
+ {
+ ValidateTransitionTime(_timeOfDay, _month, _week, _day, _dayOfWeek);
+ }
+ catch (ArgumentException e)
+ {
+ throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
+ }
+ }
+
+ void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ if (info == null)
+ {
+ throw new ArgumentNullException(nameof(info));
+ }
+ Contract.EndContractBlock();
+
+ info.AddValue("TimeOfDay", _timeOfDay);
+ info.AddValue("Month", _month);
+ info.AddValue("Week", _week);
+ info.AddValue("Day", _day);
+ info.AddValue("DayOfWeek", _dayOfWeek);
+ info.AddValue("IsFixedDateRule", _isFixedDateRule);
+ }
+
+ TransitionTime(SerializationInfo info, StreamingContext context)
+ {
+ if (info == null)
+ {
+ throw new ArgumentNullException(nameof(info));
+ }
+
+ _timeOfDay = (DateTime)info.GetValue("TimeOfDay", typeof(DateTime));
+ _month = (byte)info.GetValue("Month", typeof(byte));
+ _week = (byte)info.GetValue("Week", typeof(byte));
+ _day = (byte)info.GetValue("Day", typeof(byte));
+ _dayOfWeek = (DayOfWeek)info.GetValue("DayOfWeek", typeof(DayOfWeek));
+ _isFixedDateRule = (bool)info.GetValue("IsFixedDateRule", typeof(bool));
+ }
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/TimeZoneInfo.Unix.cs b/src/mscorlib/src/System/TimeZoneInfo.Unix.cs
new file mode 100644
index 0000000000..b94c8b71c1
--- /dev/null
+++ b/src/mscorlib/src/System/TimeZoneInfo.Unix.cs
@@ -0,0 +1,1463 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Security;
+
+namespace System
+{
+ public sealed partial class TimeZoneInfo
+ {
+ private const string DefaultTimeZoneDirectory = "/usr/share/zoneinfo/";
+ private const string ZoneTabFileName = "zone.tab";
+ private const string TimeZoneEnvironmentVariable = "TZ";
+ private const string TimeZoneDirectoryEnvironmentVariable = "TZDIR";
+
+ private TimeZoneInfo(byte[] data, string id, bool dstDisabled)
+ {
+ TZifHead t;
+ DateTime[] dts;
+ byte[] typeOfLocalTime;
+ TZifType[] transitionType;
+ string zoneAbbreviations;
+ bool[] StandardTime;
+ bool[] GmtTime;
+ string futureTransitionsPosixFormat;
+
+ // parse the raw TZif bytes; this method can throw ArgumentException when the data is malformed.
+ TZif_ParseRaw(data, out t, out dts, out typeOfLocalTime, out transitionType, out zoneAbbreviations, out StandardTime, out GmtTime, out futureTransitionsPosixFormat);
+
+ _id = id;
+ _displayName = LocalId;
+ _baseUtcOffset = TimeSpan.Zero;
+
+ // find the best matching baseUtcOffset and display strings based on the current utcNow value.
+ // NOTE: read the display strings from the the tzfile now in case they can't be loaded later
+ // from the globalization data.
+ DateTime utcNow = DateTime.UtcNow;
+ for (int i = 0; i < dts.Length && dts[i] <= utcNow; i++)
+ {
+ int type = typeOfLocalTime[i];
+ if (!transitionType[type].IsDst)
+ {
+ _baseUtcOffset = transitionType[type].UtcOffset;
+ _standardDisplayName = TZif_GetZoneAbbreviation(zoneAbbreviations, transitionType[type].AbbreviationIndex);
+ }
+ else
+ {
+ _daylightDisplayName = TZif_GetZoneAbbreviation(zoneAbbreviations, transitionType[type].AbbreviationIndex);
+ }
+ }
+
+ if (dts.Length == 0)
+ {
+ // time zones like Africa/Bujumbura and Etc/GMT* have no transition times but still contain
+ // TZifType entries that may contain a baseUtcOffset and display strings
+ for (int i = 0; i < transitionType.Length; i++)
+ {
+ if (!transitionType[i].IsDst)
+ {
+ _baseUtcOffset = transitionType[i].UtcOffset;
+ _standardDisplayName = TZif_GetZoneAbbreviation(zoneAbbreviations, transitionType[i].AbbreviationIndex);
+ }
+ else
+ {
+ _daylightDisplayName = TZif_GetZoneAbbreviation(zoneAbbreviations, transitionType[i].AbbreviationIndex);
+ }
+ }
+ }
+ _displayName = _standardDisplayName;
+
+ GetDisplayName(Interop.GlobalizationInterop.TimeZoneDisplayNameType.Generic, ref _displayName);
+ GetDisplayName(Interop.GlobalizationInterop.TimeZoneDisplayNameType.Standard, ref _standardDisplayName);
+ GetDisplayName(Interop.GlobalizationInterop.TimeZoneDisplayNameType.DaylightSavings, ref _daylightDisplayName);
+
+ // TZif supports seconds-level granularity with offsets but TimeZoneInfo only supports minutes since it aligns
+ // with DateTimeOffset, SQL Server, and the W3C XML Specification
+ if (_baseUtcOffset.Ticks % TimeSpan.TicksPerMinute != 0)
+ {
+ _baseUtcOffset = new TimeSpan(_baseUtcOffset.Hours, _baseUtcOffset.Minutes, 0);
+ }
+
+ if (!dstDisabled)
+ {
+ // only create the adjustment rule if DST is enabled
+ TZif_GenerateAdjustmentRules(out _adjustmentRules, _baseUtcOffset, dts, typeOfLocalTime, transitionType, StandardTime, GmtTime, futureTransitionsPosixFormat);
+ }
+
+ ValidateTimeZoneInfo(_id, _baseUtcOffset, _adjustmentRules, out _supportsDaylightSavingTime);
+ }
+
+ private void GetDisplayName(Interop.GlobalizationInterop.TimeZoneDisplayNameType nameType, ref string displayName)
+ {
+ string timeZoneDisplayName;
+ bool result = Interop.CallStringMethod(
+ (locale, id, type, stringBuilder) => Interop.GlobalizationInterop.GetTimeZoneDisplayName(
+ locale,
+ id,
+ type,
+ stringBuilder,
+ stringBuilder.Capacity),
+ CultureInfo.CurrentUICulture.Name,
+ _id,
+ nameType,
+ out timeZoneDisplayName);
+
+ // If there is an unknown error, don't set the displayName field.
+ // It will be set to the abbreviation that was read out of the tzfile.
+ if (result)
+ {
+ displayName = timeZoneDisplayName;
+ }
+ }
+
+ /// <summary>
+ /// Returns a cloned array of AdjustmentRule objects
+ /// </summary>
+ public AdjustmentRule[] GetAdjustmentRules()
+ {
+ if (_adjustmentRules == null)
+ {
+ return Array.Empty<AdjustmentRule>();
+ }
+
+ // The rules we use in Unix cares mostly about the start and end dates but doesn’t fill the transition start and end info.
+ // as the rules now is public, we should fill it properly so the caller doesn’t have to know how we use it internally
+ // and can use it as it is used in Windows
+
+ AdjustmentRule[] rules = new AdjustmentRule[_adjustmentRules.Length];
+
+ for (int i = 0; i < _adjustmentRules.Length; i++)
+ {
+ var rule = _adjustmentRules[i];
+ var start = rule.DateStart.Kind == DateTimeKind.Utc ?
+ new DateTime(TimeZoneInfo.ConvertTime(rule.DateStart, this).Ticks, DateTimeKind.Unspecified) :
+ rule.DateStart;
+ var end = rule.DateEnd.Kind == DateTimeKind.Utc ?
+ new DateTime(TimeZoneInfo.ConvertTime(rule.DateEnd, this).Ticks - 1, DateTimeKind.Unspecified) :
+ rule.DateEnd;
+
+ var startTransition = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, start.Hour, start.Minute, start.Second), start.Month, start.Day);
+ var endTransition = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, end.Hour, end.Minute, end.Second), end.Month, end.Day);
+
+ rules[i] = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(start.Date, end.Date, rule.DaylightDelta, startTransition, endTransition);
+ }
+
+ return rules;
+ }
+
+ private static void PopulateAllSystemTimeZones(CachedData cachedData)
+ {
+ Debug.Assert(Monitor.IsEntered(cachedData));
+
+ string timeZoneDirectory = GetTimeZoneDirectory();
+ foreach (string timeZoneId in GetTimeZoneIds(timeZoneDirectory))
+ {
+ TimeZoneInfo value;
+ Exception ex;
+ TryGetTimeZone(timeZoneId, false, out value, out ex, cachedData, alwaysFallbackToLocalMachine: true); // populate the cache
+ }
+ }
+
+ /// <summary>
+ /// Helper function for retrieving the local system time zone.
+ /// May throw COMException, TimeZoneNotFoundException, InvalidTimeZoneException.
+ /// Assumes cachedData lock is taken.
+ /// </summary>
+ /// <returns>A new TimeZoneInfo instance.</returns>
+ private static TimeZoneInfo GetLocalTimeZone(CachedData cachedData)
+ {
+ Debug.Assert(Monitor.IsEntered(cachedData));
+
+ // Without Registry support, create the TimeZoneInfo from a TZ file
+ return GetLocalTimeZoneFromTzFile();
+ }
+
+ private static TimeZoneInfoResult TryGetTimeZoneFromLocalMachine(string id, out TimeZoneInfo value, out Exception e)
+ {
+ value = null;
+ e = null;
+
+ string timeZoneDirectory = GetTimeZoneDirectory();
+ string timeZoneFilePath = Path.Combine(timeZoneDirectory, id);
+ byte[] rawData;
+ try
+ {
+ rawData = File.ReadAllBytes(timeZoneFilePath);
+ }
+ catch (UnauthorizedAccessException ex)
+ {
+ e = ex;
+ return TimeZoneInfoResult.SecurityException;
+ }
+ catch (FileNotFoundException ex)
+ {
+ e = ex;
+ return TimeZoneInfoResult.TimeZoneNotFoundException;
+ }
+ catch (DirectoryNotFoundException ex)
+ {
+ e = ex;
+ return TimeZoneInfoResult.TimeZoneNotFoundException;
+ }
+ catch (IOException ex)
+ {
+ e = new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_InvalidFileData", id, timeZoneFilePath), ex);
+ return TimeZoneInfoResult.InvalidTimeZoneException;
+ }
+
+ value = GetTimeZoneFromTzData(rawData, id);
+
+ if (value == null)
+ {
+ e = new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_InvalidFileData", id, timeZoneFilePath));
+ return TimeZoneInfoResult.InvalidTimeZoneException;
+ }
+
+ return TimeZoneInfoResult.Success;
+ }
+
+ /// <summary>
+ /// Returns a collection of TimeZone Id values from the zone.tab file in the timeZoneDirectory.
+ /// </summary>
+ /// <remarks>
+ /// Lines that start with # are comments and are skipped.
+ /// </remarks>
+ private static List<string> GetTimeZoneIds(string timeZoneDirectory)
+ {
+ string[] zoneTabFileLines = null;
+ try
+ {
+ zoneTabFileLines = File.ReadAllLines(Path.Combine(timeZoneDirectory, ZoneTabFileName));
+ }
+ catch (IOException) { }
+ catch (UnauthorizedAccessException) { }
+
+ if (zoneTabFileLines == null)
+ {
+ return new List<string>();
+ }
+
+ List<string> timeZoneIds = new List<string>(zoneTabFileLines.Length);
+
+ foreach (string zoneTabFileLine in zoneTabFileLines)
+ {
+ if (!string.IsNullOrEmpty(zoneTabFileLine) && zoneTabFileLine[0] != '#')
+ {
+ // the format of the line is "country-code \t coordinates \t TimeZone Id \t comments"
+
+ int firstTabIndex = zoneTabFileLine.IndexOf('\t');
+ if (firstTabIndex != -1)
+ {
+ int secondTabIndex = zoneTabFileLine.IndexOf('\t', firstTabIndex + 1);
+ if (secondTabIndex != -1)
+ {
+ string timeZoneId;
+ int startIndex = secondTabIndex + 1;
+ int thirdTabIndex = zoneTabFileLine.IndexOf('\t', startIndex);
+ if (thirdTabIndex != -1)
+ {
+ int length = thirdTabIndex - startIndex;
+ timeZoneId = zoneTabFileLine.Substring(startIndex, length);
+ }
+ else
+ {
+ timeZoneId = zoneTabFileLine.Substring(startIndex);
+ }
+
+ if (!string.IsNullOrEmpty(timeZoneId))
+ {
+ timeZoneIds.Add(timeZoneId);
+ }
+ }
+ }
+ }
+ }
+
+ return timeZoneIds;
+ }
+
+ /// <summary>
+ /// Gets the tzfile raw data for the current 'local' time zone using the following rules.
+ /// 1. Read the TZ environment variable. If it is set, use it.
+ /// 2. Look for the data in /etc/localtime.
+ /// 3. Look for the data in GetTimeZoneDirectory()/localtime.
+ /// 4. Use UTC if all else fails.
+ /// </summary>
+ private static bool TryGetLocalTzFile(out byte[] rawData, out string id)
+ {
+ rawData = null;
+ id = null;
+ string tzVariable = GetTzEnvironmentVariable();
+
+ // If the env var is null, use the localtime file
+ if (tzVariable == null)
+ {
+ return
+ TryLoadTzFile("/etc/localtime", ref rawData, ref id) ||
+ TryLoadTzFile(Path.Combine(GetTimeZoneDirectory(), "localtime"), ref rawData, ref id);
+ }
+
+ // If it's empty, use UTC (TryGetLocalTzFile() should return false).
+ if (tzVariable.Length == 0)
+ {
+ return false;
+ }
+
+ // Otherwise, use the path from the env var. If it's not absolute, make it relative
+ // to the system timezone directory
+ string tzFilePath;
+ if (tzVariable[0] != '/')
+ {
+ id = tzVariable;
+ tzFilePath = Path.Combine(GetTimeZoneDirectory(), tzVariable);
+ }
+ else
+ {
+ tzFilePath = tzVariable;
+ }
+ return TryLoadTzFile(tzFilePath, ref rawData, ref id);
+ }
+
+ private static string GetTzEnvironmentVariable()
+ {
+ string result = Environment.GetEnvironmentVariable(TimeZoneEnvironmentVariable);
+ if (!string.IsNullOrEmpty(result))
+ {
+ if (result[0] == ':')
+ {
+ // strip off the ':' prefix
+ result = result.Substring(1);
+ }
+ }
+
+ return result;
+ }
+
+ private static bool TryLoadTzFile(string tzFilePath, ref byte[] rawData, ref string id)
+ {
+ if (File.Exists(tzFilePath))
+ {
+ try
+ {
+ rawData = File.ReadAllBytes(tzFilePath);
+ if (string.IsNullOrEmpty(id))
+ {
+ id = FindTimeZoneIdUsingReadLink(tzFilePath);
+
+ if (string.IsNullOrEmpty(id))
+ {
+ id = FindTimeZoneId(rawData);
+ }
+ }
+ return true;
+ }
+ catch (IOException) { }
+ catch (SecurityException) { }
+ catch (UnauthorizedAccessException) { }
+ }
+ return false;
+ }
+
+ /// <summary>
+ /// Finds the time zone id by using 'readlink' on the path to see if tzFilePath is
+ /// a symlink to a file.
+ /// </summary>
+ private static string FindTimeZoneIdUsingReadLink(string tzFilePath)
+ {
+ string id = null;
+
+ StringBuilder symlinkPathBuilder = StringBuilderCache.Acquire(Path.MaxPath);
+ bool result = Interop.GlobalizationInterop.ReadLink(tzFilePath, symlinkPathBuilder, (uint)symlinkPathBuilder.Capacity);
+ if (result)
+ {
+ string symlinkPath = StringBuilderCache.GetStringAndRelease(symlinkPathBuilder);
+ // time zone Ids have to point under the time zone directory
+ string timeZoneDirectory = GetTimeZoneDirectory();
+ if (symlinkPath.StartsWith(timeZoneDirectory))
+ {
+ id = symlinkPath.Substring(timeZoneDirectory.Length);
+ }
+ }
+ else
+ {
+ StringBuilderCache.Release(symlinkPathBuilder);
+ }
+
+ return id;
+ }
+
+ /// <summary>
+ /// Find the time zone id by searching all the tzfiles for the one that matches rawData
+ /// and return its file name.
+ /// </summary>
+ private static string FindTimeZoneId(byte[] rawData)
+ {
+ // default to "Local" if we can't find the right tzfile
+ string id = LocalId;
+ string timeZoneDirectory = GetTimeZoneDirectory();
+ string localtimeFilePath = Path.Combine(timeZoneDirectory, "localtime");
+ string posixrulesFilePath = Path.Combine(timeZoneDirectory, "posixrules");
+ byte[] buffer = new byte[rawData.Length];
+
+ try
+ {
+ foreach (string filePath in Directory.EnumerateFiles(timeZoneDirectory, "*", SearchOption.AllDirectories))
+ {
+ // skip the localtime and posixrules file, since they won't give us the correct id
+ if (!string.Equals(filePath, localtimeFilePath, StringComparison.OrdinalIgnoreCase)
+ && !string.Equals(filePath, posixrulesFilePath, StringComparison.OrdinalIgnoreCase))
+ {
+ if (CompareTimeZoneFile(filePath, buffer, rawData))
+ {
+ // if all bytes are the same, this must be the right tz file
+ id = filePath;
+
+ // strip off the root time zone directory
+ if (id.StartsWith(timeZoneDirectory))
+ {
+ id = id.Substring(timeZoneDirectory.Length);
+ }
+ break;
+ }
+ }
+ }
+ }
+ catch (IOException) { }
+ catch (SecurityException) { }
+ catch (UnauthorizedAccessException) { }
+
+ return id;
+ }
+
+ private static bool CompareTimeZoneFile(string filePath, byte[] buffer, byte[] rawData)
+ {
+ try
+ {
+ using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
+ {
+ if (stream.Length == rawData.Length)
+ {
+ int index = 0;
+ int count = rawData.Length;
+
+ while (count > 0)
+ {
+ int n = stream.Read(buffer, index, count);
+ if (n == 0)
+ __Error.EndOfFile();
+
+ int end = index + n;
+ for (; index < end; index++)
+ {
+ if (buffer[index] != rawData[index])
+ {
+ return false;
+ }
+ }
+
+ count -= n;
+ }
+
+ return true;
+ }
+ }
+ }
+ catch (IOException) { }
+ catch (SecurityException) { }
+ catch (UnauthorizedAccessException) { }
+
+ return false;
+ }
+
+ /// <summary>
+ /// Helper function used by 'GetLocalTimeZone()' - this function wraps the call
+ /// for loading time zone data from computers without Registry support.
+ ///
+ /// The TryGetLocalTzFile() call returns a Byte[] containing the compiled tzfile.
+ /// </summary>
+ private static TimeZoneInfo GetLocalTimeZoneFromTzFile()
+ {
+ byte[] rawData;
+ string id;
+ if (TryGetLocalTzFile(out rawData, out id))
+ {
+ TimeZoneInfo result = GetTimeZoneFromTzData(rawData, id);
+ if (result != null)
+ {
+ return result;
+ }
+ }
+
+ // if we can't find a local time zone, return UTC
+ return Utc;
+ }
+
+ private static TimeZoneInfo GetTimeZoneFromTzData(byte[] rawData, string id)
+ {
+ if (rawData != null)
+ {
+ try
+ {
+ return new TimeZoneInfo(rawData, id, dstDisabled: false); // create a TimeZoneInfo instance from the TZif data w/ DST support
+ }
+ catch (ArgumentException) { }
+ catch (InvalidTimeZoneException) { }
+ try
+ {
+ return new TimeZoneInfo(rawData, id, dstDisabled: true); // create a TimeZoneInfo instance from the TZif data w/o DST support
+ }
+ catch (ArgumentException) { }
+ catch (InvalidTimeZoneException) { }
+ }
+
+ return null;
+ }
+
+ private static string GetTimeZoneDirectory()
+ {
+ string tzDirectory = Environment.GetEnvironmentVariable(TimeZoneDirectoryEnvironmentVariable);
+
+ if (tzDirectory == null)
+ {
+ tzDirectory = DefaultTimeZoneDirectory;
+ }
+ else if (!tzDirectory.EndsWith(Path.DirectorySeparatorChar))
+ {
+ tzDirectory += Path.DirectorySeparatorChar;
+ }
+
+ return tzDirectory;
+ }
+
+ /// <summary>
+ /// Helper function for retrieving a TimeZoneInfo object by <time_zone_name>.
+ /// This function wraps the logic necessary to keep the private
+ /// SystemTimeZones cache in working order
+ ///
+ /// This function will either return a valid TimeZoneInfo instance or
+ /// it will throw 'InvalidTimeZoneException' / 'TimeZoneNotFoundException'.
+ /// </summary>
+ public static TimeZoneInfo FindSystemTimeZoneById(string id)
+ {
+ // Special case for Utc as it will not exist in the dictionary with the rest
+ // of the system time zones. There is no need to do this check for Local.Id
+ // since Local is a real time zone that exists in the dictionary cache
+ if (string.Equals(id, UtcId, StringComparison.OrdinalIgnoreCase))
+ {
+ return Utc;
+ }
+
+ if (id == null)
+ {
+ throw new ArgumentNullException(nameof(id));
+ }
+ else if (id.Length == 0 || id.Contains("\0"))
+ {
+ throw new TimeZoneNotFoundException(Environment.GetResourceString("TimeZoneNotFound_MissingData", id));
+ }
+
+ TimeZoneInfo value;
+ Exception e;
+
+ TimeZoneInfoResult result;
+
+ CachedData cachedData = s_cachedData;
+
+ lock (cachedData)
+ {
+ result = TryGetTimeZone(id, false, out value, out e, cachedData, alwaysFallbackToLocalMachine: true);
+ }
+
+ if (result == TimeZoneInfoResult.Success)
+ {
+ return value;
+ }
+ else if (result == TimeZoneInfoResult.InvalidTimeZoneException)
+ {
+ Debug.Assert(e is InvalidTimeZoneException,
+ "TryGetTimeZone must create an InvalidTimeZoneException when it returns TimeZoneInfoResult.InvalidTimeZoneException");
+ throw e;
+ }
+ else if (result == TimeZoneInfoResult.SecurityException)
+ {
+ throw new SecurityException(Environment.GetResourceString("Security_CannotReadFileData", id), e);
+ }
+ else
+ {
+ throw new TimeZoneNotFoundException(Environment.GetResourceString("TimeZoneNotFound_MissingData", id), e);
+ }
+ }
+
+ // DateTime.Now fast path that avoids allocating an historically accurate TimeZoneInfo.Local and just creates a 1-year (current year) accurate time zone
+ internal static TimeSpan GetDateTimeNowUtcOffsetFromUtc(DateTime time, out bool isAmbiguousLocalDst)
+ {
+ bool isDaylightSavings;
+ // Use the standard code path for Unix since there isn't a faster way of handling current-year-only time zones
+ return GetUtcOffsetFromUtc(time, Local, out isDaylightSavings, out isAmbiguousLocalDst);
+ }
+
+ // TZFILE(5) BSD File Formats Manual TZFILE(5)
+ //
+ // NAME
+ // tzfile -- timezone information
+ //
+ // SYNOPSIS
+ // #include "/usr/src/lib/libc/stdtime/tzfile.h"
+ //
+ // DESCRIPTION
+ // The time zone information files used by tzset(3) begin with the magic
+ // characters ``TZif'' to identify them as time zone information files, fol-
+ // lowed by sixteen bytes reserved for future use, followed by four four-
+ // byte values written in a ``standard'' byte order (the high-order byte of
+ // the value is written first). These values are, in order:
+ //
+ // tzh_ttisgmtcnt The number of UTC/local indicators stored in the file.
+ // tzh_ttisstdcnt The number of standard/wall indicators stored in the
+ // file.
+ // tzh_leapcnt The number of leap seconds for which data is stored in
+ // the file.
+ // tzh_timecnt The number of ``transition times'' for which data is
+ // stored in the file.
+ // tzh_typecnt The number of ``local time types'' for which data is
+ // stored in the file (must not be zero).
+ // tzh_charcnt The number of characters of ``time zone abbreviation
+ // strings'' stored in the file.
+ //
+ // The above header is followed by tzh_timecnt four-byte values of type
+ // long, sorted in ascending order. These values are written in ``stan-
+ // dard'' byte order. Each is used as a transition time (as returned by
+ // time(3)) at which the rules for computing local time change. Next come
+ // tzh_timecnt one-byte values of type unsigned char; each one tells which
+ // of the different types of ``local time'' types described in the file is
+ // associated with the same-indexed transition time. These values serve as
+ // indices into an array of ttinfo structures that appears next in the file;
+ // these structures are defined as follows:
+ //
+ // struct ttinfo {
+ // long tt_gmtoff;
+ // int tt_isdst;
+ // unsigned int tt_abbrind;
+ // };
+ //
+ // Each structure is written as a four-byte value for tt_gmtoff of type
+ // long, in a standard byte order, followed by a one-byte value for tt_isdst
+ // and a one-byte value for tt_abbrind. In each structure, tt_gmtoff gives
+ // the number of seconds to be added to UTC, tt_isdst tells whether tm_isdst
+ // should be set by localtime(3) and tt_abbrind serves as an index into the
+ // array of time zone abbreviation characters that follow the ttinfo struc-
+ // ture(s) in the file.
+ //
+ // Then there are tzh_leapcnt pairs of four-byte values, written in standard
+ // byte order; the first value of each pair gives the time (as returned by
+ // time(3)) at which a leap second occurs; the second gives the total number
+ // of leap seconds to be applied after the given time. The pairs of values
+ // are sorted in ascending order by time.b
+ //
+ // Then there are tzh_ttisstdcnt standard/wall indicators, each stored as a
+ // one-byte value; they tell whether the transition times associated with
+ // local time types were specified as standard time or wall clock time, and
+ // are used when a time zone file is used in handling POSIX-style time zone
+ // environment variables.
+ //
+ // Finally there are tzh_ttisgmtcnt UTC/local indicators, each stored as a
+ // one-byte value; they tell whether the transition times associated with
+ // local time types were specified as UTC or local time, and are used when a
+ // time zone file is used in handling POSIX-style time zone environment
+ // variables.
+ //
+ // localtime uses the first standard-time ttinfo structure in the file (or
+ // simply the first ttinfo structure in the absence of a standard-time
+ // structure) if either tzh_timecnt is zero or the time argument is less
+ // than the first transition time recorded in the file.
+ //
+ // SEE ALSO
+ // ctime(3), time2posix(3), zic(8)
+ //
+ // BSD September 13, 1994 BSD
+ //
+ //
+ //
+ // TIME(3) BSD Library Functions Manual TIME(3)
+ //
+ // NAME
+ // time -- get time of day
+ //
+ // LIBRARY
+ // Standard C Library (libc, -lc)
+ //
+ // SYNOPSIS
+ // #include <time.h>
+ //
+ // time_t
+ // time(time_t *tloc);
+ //
+ // DESCRIPTION
+ // The time() function returns the value of time in seconds since 0 hours, 0
+ // minutes, 0 seconds, January 1, 1970, Coordinated Universal Time, without
+ // including leap seconds. If an error occurs, time() returns the value
+ // (time_t)-1.
+ //
+ // The return value is also stored in *tloc, provided that tloc is non-null.
+ //
+ // ERRORS
+ // The time() function may fail for any of the reasons described in
+ // gettimeofday(2).
+ //
+ // SEE ALSO
+ // gettimeofday(2), ctime(3)
+ //
+ // STANDARDS
+ // The time function conforms to IEEE Std 1003.1-2001 (``POSIX.1'').
+ //
+ // BUGS
+ // Neither ISO/IEC 9899:1999 (``ISO C99'') nor IEEE Std 1003.1-2001
+ // (``POSIX.1'') requires time() to set errno on failure; thus, it is impos-
+ // sible for an application to distinguish the valid time value -1 (repre-
+ // senting the last UTC second of 1969) from the error return value.
+ //
+ // Systems conforming to earlier versions of the C and POSIX standards
+ // (including older versions of FreeBSD) did not set *tloc in the error
+ // case.
+ //
+ // HISTORY
+ // A time() function appeared in Version 6 AT&T UNIX.
+ //
+ // BSD July 18, 2003 BSD
+ //
+ //
+ private static void TZif_GenerateAdjustmentRules(out AdjustmentRule[] rules, TimeSpan baseUtcOffset, DateTime[] dts, byte[] typeOfLocalTime,
+ TZifType[] transitionType, bool[] StandardTime, bool[] GmtTime, string futureTransitionsPosixFormat)
+ {
+ rules = null;
+
+ if (dts.Length > 0)
+ {
+ int index = 0;
+ List<AdjustmentRule> rulesList = new List<AdjustmentRule>();
+
+ while (index <= dts.Length)
+ {
+ TZif_GenerateAdjustmentRule(ref index, baseUtcOffset, rulesList, dts, typeOfLocalTime, transitionType, StandardTime, GmtTime, futureTransitionsPosixFormat);
+ }
+
+ rules = rulesList.ToArray();
+ if (rules != null && rules.Length == 0)
+ {
+ rules = null;
+ }
+ }
+ }
+
+ private static void TZif_GenerateAdjustmentRule(ref int index, TimeSpan timeZoneBaseUtcOffset, List<AdjustmentRule> rulesList, DateTime[] dts,
+ byte[] typeOfLocalTime, TZifType[] transitionTypes, bool[] StandardTime, bool[] GmtTime, string futureTransitionsPosixFormat)
+ {
+ // To generate AdjustmentRules, use the following approach:
+ // The first AdjustmentRule will go from DateTime.MinValue to the first transition time greater than DateTime.MinValue.
+ // Each middle AdjustmentRule wil go from dts[index-1] to dts[index].
+ // The last AdjustmentRule will go from dts[dts.Length-1] to Datetime.MaxValue.
+
+ // 0. Skip any DateTime.MinValue transition times. In newer versions of the tzfile, there
+ // is a "big bang" transition time, which is before the year 0001. Since any times before year 0001
+ // cannot be represented by DateTime, there is no reason to make AdjustmentRules for these unrepresentable time periods.
+ // 1. If there are no DateTime.MinValue times, the first AdjustmentRule goes from DateTime.MinValue
+ // to the first transition and uses the first standard transitionType (or the first transitionType if none of them are standard)
+ // 2. Create an AdjustmentRule for each transition, i.e. from dts[index - 1] to dts[index].
+ // This rule uses the transitionType[index - 1] and the whole AdjustmentRule only describes a single offset - either
+ // all daylight savings, or all stanard time.
+ // 3. After all the transitions are filled out, the last AdjustmentRule is created from either:
+ // a. a POSIX-style timezone description ("futureTransitionsPosixFormat"), if there is one or
+ // b. continue the last transition offset until DateTime.Max
+
+ while (index < dts.Length && dts[index] == DateTime.MinValue)
+ {
+ index++;
+ }
+
+ if (index == 0)
+ {
+ TZifType transitionType = TZif_GetEarlyDateTransitionType(transitionTypes);
+ DateTime endTransitionDate = dts[index];
+
+ TimeSpan transitionOffset = TZif_CalculateTransitionOffsetFromBase(transitionType.UtcOffset, timeZoneBaseUtcOffset);
+ TimeSpan daylightDelta = transitionType.IsDst ? transitionOffset : TimeSpan.Zero;
+ TimeSpan baseUtcDelta = transitionType.IsDst ? TimeSpan.Zero : transitionOffset;
+
+ AdjustmentRule r = AdjustmentRule.CreateAdjustmentRule(
+ DateTime.MinValue,
+ endTransitionDate.AddTicks(-1),
+ daylightDelta,
+ default(TransitionTime),
+ default(TransitionTime),
+ baseUtcDelta,
+ noDaylightTransitions: true);
+ rulesList.Add(r);
+ }
+ else if (index < dts.Length)
+ {
+ DateTime startTransitionDate = dts[index - 1];
+ TZifType startTransitionType = transitionTypes[typeOfLocalTime[index - 1]];
+
+ DateTime endTransitionDate = dts[index];
+
+ TimeSpan transitionOffset = TZif_CalculateTransitionOffsetFromBase(startTransitionType.UtcOffset, timeZoneBaseUtcOffset);
+ TimeSpan daylightDelta = startTransitionType.IsDst ? transitionOffset : TimeSpan.Zero;
+ TimeSpan baseUtcDelta = startTransitionType.IsDst ? TimeSpan.Zero : transitionOffset;
+
+ TransitionTime dstStart;
+ if (startTransitionType.IsDst)
+ {
+ // the TransitionTime fields are not used when AdjustmentRule.NoDaylightTransitions == true.
+ // However, there are some cases in the past where DST = true, and the daylight savings offset
+ // now equals what the current BaseUtcOffset is. In that case, the AdjustmentRule.DaylightOffset
+ // is going to be TimeSpan.Zero. But we still need to return 'true' from AdjustmentRule.HasDaylightSaving.
+ // To ensure we always return true from HasDaylightSaving, make a "special" dstStart that will make the logic
+ // in HasDaylightSaving return true.
+ dstStart = TransitionTime.CreateFixedDateRule(DateTime.MinValue.AddMilliseconds(2), 1, 1);
+ }
+ else
+ {
+ dstStart = default(TransitionTime);
+ }
+
+ AdjustmentRule r = AdjustmentRule.CreateAdjustmentRule(
+ startTransitionDate,
+ endTransitionDate.AddTicks(-1),
+ daylightDelta,
+ dstStart,
+ default(TransitionTime),
+ baseUtcDelta,
+ noDaylightTransitions: true);
+ rulesList.Add(r);
+ }
+ else
+ {
+ // create the AdjustmentRule that will be used for all DateTimes after the last transition
+
+ // NOTE: index == dts.Length
+ DateTime startTransitionDate = dts[index - 1];
+
+ if (!string.IsNullOrEmpty(futureTransitionsPosixFormat))
+ {
+ AdjustmentRule r = TZif_CreateAdjustmentRuleForPosixFormat(futureTransitionsPosixFormat, startTransitionDate, timeZoneBaseUtcOffset);
+ if (r != null)
+ {
+ rulesList.Add(r);
+ }
+ }
+ else
+ {
+ // just use the last transition as the rule which will be used until the end of time
+
+ TZifType transitionType = transitionTypes[typeOfLocalTime[index - 1]];
+ TimeSpan transitionOffset = TZif_CalculateTransitionOffsetFromBase(transitionType.UtcOffset, timeZoneBaseUtcOffset);
+ TimeSpan daylightDelta = transitionType.IsDst ? transitionOffset : TimeSpan.Zero;
+ TimeSpan baseUtcDelta = transitionType.IsDst ? TimeSpan.Zero : transitionOffset;
+
+ AdjustmentRule r = AdjustmentRule.CreateAdjustmentRule(
+ startTransitionDate,
+ DateTime.MaxValue,
+ daylightDelta,
+ default(TransitionTime),
+ default(TransitionTime),
+ baseUtcDelta,
+ noDaylightTransitions: true);
+ rulesList.Add(r);
+ }
+ }
+
+ index++;
+ }
+
+ private static TimeSpan TZif_CalculateTransitionOffsetFromBase(TimeSpan transitionOffset, TimeSpan timeZoneBaseUtcOffset)
+ {
+ TimeSpan result = transitionOffset - timeZoneBaseUtcOffset;
+
+ // TZif supports seconds-level granularity with offsets but TimeZoneInfo only supports minutes since it aligns
+ // with DateTimeOffset, SQL Server, and the W3C XML Specification
+ if (result.Ticks % TimeSpan.TicksPerMinute != 0)
+ {
+ result = new TimeSpan(result.Hours, result.Minutes, 0);
+ }
+
+ return result;
+ }
+
+ /// <summary>
+ /// Gets the first standard-time transition type, or simply the first transition type
+ /// if there are no standard transition types.
+ /// </summary>>
+ /// <remarks>
+ /// from 'man tzfile':
+ /// localtime(3) uses the first standard-time ttinfo structure in the file
+ /// (or simply the first ttinfo structure in the absence of a standard-time
+ /// structure) if either tzh_timecnt is zero or the time argument is less
+ /// than the first transition time recorded in the file.
+ /// </remarks>
+ private static TZifType TZif_GetEarlyDateTransitionType(TZifType[] transitionTypes)
+ {
+ foreach (TZifType transitionType in transitionTypes)
+ {
+ if (!transitionType.IsDst)
+ {
+ return transitionType;
+ }
+ }
+
+ if (transitionTypes.Length > 0)
+ {
+ return transitionTypes[0];
+ }
+
+ throw new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_NoTTInfoStructures"));
+ }
+
+ /// <summary>
+ /// Creates an AdjustmentRule given the POSIX TZ environment variable string.
+ /// </summary>
+ /// <remarks>
+ /// See http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html for the format and semantics of this POSX string.
+ /// </remarks>
+ private static AdjustmentRule TZif_CreateAdjustmentRuleForPosixFormat(string posixFormat, DateTime startTransitionDate, TimeSpan timeZoneBaseUtcOffset)
+ {
+ string standardName;
+ string standardOffset;
+ string daylightSavingsName;
+ string daylightSavingsOffset;
+ string start;
+ string startTime;
+ string end;
+ string endTime;
+
+ if (TZif_ParsePosixFormat(posixFormat, out standardName, out standardOffset, out daylightSavingsName,
+ out daylightSavingsOffset, out start, out startTime, out end, out endTime))
+ {
+ // a valid posixFormat has at least standardName and standardOffset
+
+ TimeSpan? parsedBaseOffset = TZif_ParseOffsetString(standardOffset);
+ if (parsedBaseOffset.HasValue)
+ {
+ TimeSpan baseOffset = parsedBaseOffset.Value.Negate(); // offsets are backwards in POSIX notation
+ baseOffset = TZif_CalculateTransitionOffsetFromBase(baseOffset, timeZoneBaseUtcOffset);
+
+ // having a daylightSavingsName means there is a DST rule
+ if (!string.IsNullOrEmpty(daylightSavingsName))
+ {
+ TimeSpan? parsedDaylightSavings = TZif_ParseOffsetString(daylightSavingsOffset);
+ TimeSpan daylightSavingsTimeSpan;
+ if (!parsedDaylightSavings.HasValue)
+ {
+ // default DST to 1 hour if it isn't specified
+ daylightSavingsTimeSpan = new TimeSpan(1, 0, 0);
+ }
+ else
+ {
+ daylightSavingsTimeSpan = parsedDaylightSavings.Value.Negate(); // offsets are backwards in POSIX notation
+ daylightSavingsTimeSpan = TZif_CalculateTransitionOffsetFromBase(daylightSavingsTimeSpan, timeZoneBaseUtcOffset);
+ daylightSavingsTimeSpan = TZif_CalculateTransitionOffsetFromBase(daylightSavingsTimeSpan, baseOffset);
+ }
+
+ TransitionTime dstStart = TZif_CreateTransitionTimeFromPosixRule(start, startTime);
+ TransitionTime dstEnd = TZif_CreateTransitionTimeFromPosixRule(end, endTime);
+
+ return AdjustmentRule.CreateAdjustmentRule(
+ startTransitionDate,
+ DateTime.MaxValue,
+ daylightSavingsTimeSpan,
+ dstStart,
+ dstEnd,
+ baseOffset,
+ noDaylightTransitions: false);
+ }
+ else
+ {
+ // if there is no daylightSavingsName, the whole AdjustmentRule should be with no transitions - just the baseOffset
+ return AdjustmentRule.CreateAdjustmentRule(
+ startTransitionDate,
+ DateTime.MaxValue,
+ TimeSpan.Zero,
+ default(TransitionTime),
+ default(TransitionTime),
+ baseOffset,
+ noDaylightTransitions: true);
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private static TimeSpan? TZif_ParseOffsetString(string offset)
+ {
+ TimeSpan? result = null;
+
+ if (!string.IsNullOrEmpty(offset))
+ {
+ bool negative = offset[0] == '-';
+ if (negative || offset[0] == '+')
+ {
+ offset = offset.Substring(1);
+ }
+
+ // Try parsing just hours first.
+ // Note, TimeSpan.TryParseExact "%h" can't be used here because some time zones using values
+ // like "26" or "144" and TimeSpan parsing would turn that into 26 or 144 *days* instead of hours.
+ int hours;
+ if (int.TryParse(offset, out hours))
+ {
+ result = new TimeSpan(hours, 0, 0);
+ }
+ else
+ {
+ TimeSpan parsedTimeSpan;
+ if (TimeSpan.TryParseExact(offset, "g", CultureInfo.InvariantCulture, out parsedTimeSpan))
+ {
+ result = parsedTimeSpan;
+ }
+ }
+
+ if (result.HasValue && negative)
+ {
+ result = result.Value.Negate();
+ }
+ }
+
+ return result;
+ }
+
+ private static TransitionTime TZif_CreateTransitionTimeFromPosixRule(string date, string time)
+ {
+ if (string.IsNullOrEmpty(date))
+ {
+ return default(TransitionTime);
+ }
+
+ if (date[0] == 'M')
+ {
+ // Mm.w.d
+ // This specifies day d of week w of month m. The day d must be between 0(Sunday) and 6.The week w must be between 1 and 5;
+ // week 1 is the first week in which day d occurs, and week 5 specifies the last d day in the month. The month m should be between 1 and 12.
+
+ int month;
+ int week;
+ DayOfWeek day;
+ if (!TZif_ParseMDateRule(date, out month, out week, out day))
+ {
+ throw new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_UnparseablePosixMDateString", date));
+ }
+
+ DateTime timeOfDay;
+ TimeSpan? timeOffset = TZif_ParseOffsetString(time);
+ if (timeOffset.HasValue)
+ {
+ // This logic isn't correct and can't be corrected until https://github.com/dotnet/corefx/issues/2618 is fixed.
+ // Some time zones use time values like, "26", "144", or "-2".
+ // This allows the week to sometimes be week 4 and sometimes week 5 in the month.
+ // For now, strip off any 'days' in the offset, and just get the time of day correct
+ timeOffset = new TimeSpan(timeOffset.Value.Hours, timeOffset.Value.Minutes, timeOffset.Value.Seconds);
+ if (timeOffset.Value < TimeSpan.Zero)
+ {
+ timeOfDay = new DateTime(1, 1, 2, 0, 0, 0);
+ }
+ else
+ {
+ timeOfDay = new DateTime(1, 1, 1, 0, 0, 0);
+ }
+
+ timeOfDay += timeOffset.Value;
+ }
+ else
+ {
+ // default to 2AM.
+ timeOfDay = new DateTime(1, 1, 1, 2, 0, 0);
+ }
+
+ return TransitionTime.CreateFloatingDateRule(timeOfDay, month, week, day);
+ }
+ else
+ {
+ // Jn
+ // This specifies the Julian day, with n between 1 and 365.February 29 is never counted, even in leap years.
+
+ // n
+ // This specifies the Julian day, with n between 0 and 365.February 29 is counted in leap years.
+
+ // These two rules cannot be expressed with the current AdjustmentRules
+ // One of them *could* be supported if we relaxed the TransitionTime validation rules, and allowed
+ // "IsFixedDateRule = true, Month = 0, Day = n" to mean the nth day of the year, picking one of the rules above
+
+ throw new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_JulianDayNotSupported"));
+ }
+ }
+
+ /// <summary>
+ /// Parses a string like Mm.w.d into month, week and DayOfWeek values.
+ /// </summary>
+ /// <returns>
+ /// true if the parsing succeeded; otherwise, false.
+ /// </returns>
+ private static bool TZif_ParseMDateRule(string dateRule, out int month, out int week, out DayOfWeek dayOfWeek)
+ {
+ month = 0;
+ week = 0;
+ dayOfWeek = default(DayOfWeek);
+
+ if (dateRule[0] == 'M')
+ {
+ int firstDotIndex = dateRule.IndexOf('.');
+ if (firstDotIndex > 0)
+ {
+ int secondDotIndex = dateRule.IndexOf('.', firstDotIndex + 1);
+ if (secondDotIndex > 0)
+ {
+ string monthString = dateRule.Substring(1, firstDotIndex - 1);
+ string weekString = dateRule.Substring(firstDotIndex + 1, secondDotIndex - firstDotIndex - 1);
+ string dayString = dateRule.Substring(secondDotIndex + 1);
+
+ if (int.TryParse(monthString, out month))
+ {
+ if (int.TryParse(weekString, out week))
+ {
+ int day;
+ if (int.TryParse(dayString, out day))
+ {
+ dayOfWeek = (DayOfWeek)day;
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ private static bool TZif_ParsePosixFormat(
+ string posixFormat,
+ out string standardName,
+ out string standardOffset,
+ out string daylightSavingsName,
+ out string daylightSavingsOffset,
+ out string start,
+ out string startTime,
+ out string end,
+ out string endTime)
+ {
+ standardName = null;
+ standardOffset = null;
+ daylightSavingsName = null;
+ daylightSavingsOffset = null;
+ start = null;
+ startTime = null;
+ end = null;
+ endTime = null;
+
+ int index = 0;
+ standardName = TZif_ParsePosixName(posixFormat, ref index);
+ standardOffset = TZif_ParsePosixOffset(posixFormat, ref index);
+
+ daylightSavingsName = TZif_ParsePosixName(posixFormat, ref index);
+ if (!string.IsNullOrEmpty(daylightSavingsName))
+ {
+ daylightSavingsOffset = TZif_ParsePosixOffset(posixFormat, ref index);
+
+ if (index < posixFormat.Length && posixFormat[index] == ',')
+ {
+ index++;
+ TZif_ParsePosixDateTime(posixFormat, ref index, out start, out startTime);
+
+ if (index < posixFormat.Length && posixFormat[index] == ',')
+ {
+ index++;
+ TZif_ParsePosixDateTime(posixFormat, ref index, out end, out endTime);
+ }
+ }
+ }
+
+ return !string.IsNullOrEmpty(standardName) && !string.IsNullOrEmpty(standardOffset);
+ }
+
+ private static string TZif_ParsePosixName(string posixFormat, ref int index) =>
+ TZif_ParsePosixString(posixFormat, ref index, c => char.IsDigit(c) || c == '+' || c == '-' || c == ',');
+
+ private static string TZif_ParsePosixOffset(string posixFormat, ref int index) =>
+ TZif_ParsePosixString(posixFormat, ref index, c => !char.IsDigit(c) && c != '+' && c != '-' && c != ':');
+
+ private static void TZif_ParsePosixDateTime(string posixFormat, ref int index, out string date, out string time)
+ {
+ time = null;
+
+ date = TZif_ParsePosixDate(posixFormat, ref index);
+ if (index < posixFormat.Length && posixFormat[index] == '/')
+ {
+ index++;
+ time = TZif_ParsePosixTime(posixFormat, ref index);
+ }
+ }
+
+ private static string TZif_ParsePosixDate(string posixFormat, ref int index) =>
+ TZif_ParsePosixString(posixFormat, ref index, c => c == '/' || c == ',');
+
+ private static string TZif_ParsePosixTime(string posixFormat, ref int index) =>
+ TZif_ParsePosixString(posixFormat, ref index, c => c == ',');
+
+ private static string TZif_ParsePosixString(string posixFormat, ref int index, Func<char, bool> breakCondition)
+ {
+ int startIndex = index;
+ for (; index < posixFormat.Length; index++)
+ {
+ char current = posixFormat[index];
+ if (breakCondition(current))
+ {
+ break;
+ }
+ }
+
+ return posixFormat.Substring(startIndex, index - startIndex);
+ }
+
+ // Returns the Substring from zoneAbbreviations starting at index and ending at '\0'
+ // zoneAbbreviations is expected to be in the form: "PST\0PDT\0PWT\0\PPT"
+ private static string TZif_GetZoneAbbreviation(string zoneAbbreviations, int index)
+ {
+ int lastIndex = zoneAbbreviations.IndexOf('\0', index);
+ return lastIndex > 0 ?
+ zoneAbbreviations.Substring(index, lastIndex - index) :
+ zoneAbbreviations.Substring(index);
+ }
+
+ // Converts an array of bytes into an int - always using standard byte order (Big Endian)
+ // per TZif file standard
+ private static unsafe int TZif_ToInt32(byte[] value, int startIndex)
+ {
+ fixed (byte* pbyte = &value[startIndex])
+ {
+ return (*pbyte << 24) | (*(pbyte + 1) << 16) | (*(pbyte + 2) << 8) | (*(pbyte + 3));
+ }
+ }
+
+ // Converts an array of bytes into a long - always using standard byte order (Big Endian)
+ // per TZif file standard
+ private static unsafe long TZif_ToInt64(byte[] value, int startIndex)
+ {
+ fixed (byte* pbyte = &value[startIndex])
+ {
+ int i1 = (*pbyte << 24) | (*(pbyte + 1) << 16) | (*(pbyte + 2) << 8) | (*(pbyte + 3));
+ int i2 = (*(pbyte + 4) << 24) | (*(pbyte + 5) << 16) | (*(pbyte + 6) << 8) | (*(pbyte + 7));
+ return (uint)i2 | ((long)i1 << 32);
+ }
+ }
+
+ private static long TZif_ToUnixTime(byte[] value, int startIndex, TZVersion version) =>
+ version != TZVersion.V1 ?
+ TZif_ToInt64(value, startIndex) :
+ TZif_ToInt32(value, startIndex);
+
+ private static DateTime TZif_UnixTimeToDateTime(long unixTime) =>
+ unixTime < DateTimeOffset.UnixMinSeconds ? DateTime.MinValue :
+ unixTime > DateTimeOffset.UnixMaxSeconds ? DateTime.MaxValue :
+ DateTimeOffset.FromUnixTimeSeconds(unixTime).UtcDateTime;
+
+ private static void TZif_ParseRaw(byte[] data, out TZifHead t, out DateTime[] dts, out byte[] typeOfLocalTime, out TZifType[] transitionType,
+ out string zoneAbbreviations, out bool[] StandardTime, out bool[] GmtTime, out string futureTransitionsPosixFormat)
+ {
+ // initialize the out parameters in case the TZifHead ctor throws
+ dts = null;
+ typeOfLocalTime = null;
+ transitionType = null;
+ zoneAbbreviations = string.Empty;
+ StandardTime = null;
+ GmtTime = null;
+ futureTransitionsPosixFormat = null;
+
+ // read in the 44-byte TZ header containing the count/length fields
+ //
+ int index = 0;
+ t = new TZifHead(data, index);
+ index += TZifHead.Length;
+
+ int timeValuesLength = 4; // the first version uses 4-bytes to specify times
+ if (t.Version != TZVersion.V1)
+ {
+ // move index past the V1 information to read the V2 information
+ index += (int)((timeValuesLength * t.TimeCount) + t.TimeCount + (6 * t.TypeCount) + ((timeValuesLength + 4) * t.LeapCount) + t.IsStdCount + t.IsGmtCount + t.CharCount);
+
+ // read the V2 header
+ t = new TZifHead(data, index);
+ index += TZifHead.Length;
+ timeValuesLength = 8; // the second version uses 8-bytes
+ }
+
+ // initialize the containers for the rest of the TZ data
+ dts = new DateTime[t.TimeCount];
+ typeOfLocalTime = new byte[t.TimeCount];
+ transitionType = new TZifType[t.TypeCount];
+ zoneAbbreviations = string.Empty;
+ StandardTime = new bool[t.TypeCount];
+ GmtTime = new bool[t.TypeCount];
+
+ // read in the UTC transition points and convert them to Windows
+ //
+ for (int i = 0; i < t.TimeCount; i++)
+ {
+ long unixTime = TZif_ToUnixTime(data, index, t.Version);
+ dts[i] = TZif_UnixTimeToDateTime(unixTime);
+ index += timeValuesLength;
+ }
+
+ // read in the Type Indices; there is a 1:1 mapping of UTC transition points to Type Indices
+ // these indices directly map to the array index in the transitionType array below
+ //
+ for (int i = 0; i < t.TimeCount; i++)
+ {
+ typeOfLocalTime[i] = data[index];
+ index += 1;
+ }
+
+ // read in the Type table. Each 6-byte entry represents
+ // {UtcOffset, IsDst, AbbreviationIndex}
+ //
+ // each AbbreviationIndex is a character index into the zoneAbbreviations string below
+ //
+ for (int i = 0; i < t.TypeCount; i++)
+ {
+ transitionType[i] = new TZifType(data, index);
+ index += 6;
+ }
+
+ // read in the Abbreviation ASCII string. This string will be in the form:
+ // "PST\0PDT\0PWT\0\PPT"
+ //
+ Encoding enc = Encoding.UTF8;
+ zoneAbbreviations = enc.GetString(data, index, (int)t.CharCount);
+ index += (int)t.CharCount;
+
+ // skip ahead of the Leap-Seconds Adjustment data. In a future release, consider adding
+ // support for Leap-Seconds
+ //
+ index += (int)(t.LeapCount * (timeValuesLength + 4)); // skip the leap second transition times
+
+ // read in the Standard Time table. There should be a 1:1 mapping between Type-Index and Standard
+ // Time table entries.
+ //
+ // TRUE = transition time is standard time
+ // FALSE = transition time is wall clock time
+ // ABSENT = transition time is wall clock time
+ //
+ for (int i = 0; i < t.IsStdCount && i < t.TypeCount && index < data.Length; i++)
+ {
+ StandardTime[i] = (data[index++] != 0);
+ }
+
+ // read in the GMT Time table. There should be a 1:1 mapping between Type-Index and GMT Time table
+ // entries.
+ //
+ // TRUE = transition time is UTC
+ // FALSE = transition time is local time
+ // ABSENT = transition time is local time
+ //
+ for (int i = 0; i < t.IsGmtCount && i < t.TypeCount && index < data.Length; i++)
+ {
+ GmtTime[i] = (data[index++] != 0);
+ }
+
+ if (t.Version != TZVersion.V1)
+ {
+ // read the POSIX-style format, which should be wrapped in newlines with the last newline at the end of the file
+ if (data[index++] == '\n' && data[data.Length - 1] == '\n')
+ {
+ futureTransitionsPosixFormat = enc.GetString(data, index, data.Length - index - 1);
+ }
+ }
+ }
+
+ private struct TZifType
+ {
+ public const int Length = 6;
+
+ public readonly TimeSpan UtcOffset;
+ public readonly bool IsDst;
+ public readonly byte AbbreviationIndex;
+
+ public TZifType(byte[] data, int index)
+ {
+ if (data == null || data.Length < index + Length)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_TimeZoneInfoInvalidTZif"), nameof(data));
+ }
+ Contract.EndContractBlock();
+ UtcOffset = new TimeSpan(0, 0, TZif_ToInt32(data, index + 00));
+ IsDst = (data[index + 4] != 0);
+ AbbreviationIndex = data[index + 5];
+ }
+ }
+
+ private struct TZifHead
+ {
+ public const int Length = 44;
+
+ public readonly uint Magic; // TZ_MAGIC "TZif"
+ public readonly TZVersion Version; // 1 byte for a \0 or 2 or 3
+ // public byte[15] Reserved; // reserved for future use
+ public readonly uint IsGmtCount; // number of transition time flags
+ public readonly uint IsStdCount; // number of transition time flags
+ public readonly uint LeapCount; // number of leap seconds
+ public readonly uint TimeCount; // number of transition times
+ public readonly uint TypeCount; // number of local time types
+ public readonly uint CharCount; // number of abbreviated characters
+
+ public TZifHead(byte[] data, int index)
+ {
+ if (data == null || data.Length < Length)
+ {
+ throw new ArgumentException("bad data", nameof(data));
+ }
+ Contract.EndContractBlock();
+
+ Magic = (uint)TZif_ToInt32(data, index + 00);
+
+ if (Magic != 0x545A6966)
+ {
+ // 0x545A6966 = {0x54, 0x5A, 0x69, 0x66} = "TZif"
+ throw new ArgumentException(Environment.GetResourceString("Argument_TimeZoneInfoBadTZif"), nameof(data));
+ }
+
+ byte version = data[index + 04];
+ Version =
+ version == '2' ? TZVersion.V2 :
+ version == '3' ? TZVersion.V3 :
+ TZVersion.V1; // default/fallback to V1 to guard against future, unsupported version numbers
+
+ // skip the 15 byte reserved field
+
+ // don't use the BitConverter class which parses data
+ // based on the Endianess of the machine architecture.
+ // this data is expected to always be in "standard byte order",
+ // regardless of the machine it is being processed on.
+
+ IsGmtCount = (uint)TZif_ToInt32(data, index + 20);
+ IsStdCount = (uint)TZif_ToInt32(data, index + 24);
+ LeapCount = (uint)TZif_ToInt32(data, index + 28);
+ TimeCount = (uint)TZif_ToInt32(data, index + 32);
+ TypeCount = (uint)TZif_ToInt32(data, index + 36);
+ CharCount = (uint)TZif_ToInt32(data, index + 40);
+ }
+ }
+
+ private enum TZVersion : byte
+ {
+ V1 = 0,
+ V2,
+ V3,
+ // when adding more versions, ensure all the logic using TZVersion is still correct
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/TimeZoneInfo.Win32.cs b/src/mscorlib/src/System/TimeZoneInfo.Win32.cs
new file mode 100644
index 0000000000..79ee535505
--- /dev/null
+++ b/src/mscorlib/src/System/TimeZoneInfo.Win32.cs
@@ -0,0 +1,1023 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Security;
+using System.Text;
+using System.Threading;
+using Microsoft.Win32;
+
+namespace System
+{
+ public sealed partial class TimeZoneInfo
+ {
+ // registry constants for the 'Time Zones' hive
+ //
+ private const string TimeZonesRegistryHive = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones";
+ private const string DisplayValue = "Display";
+ private const string DaylightValue = "Dlt";
+ private const string StandardValue = "Std";
+ private const string MuiDisplayValue = "MUI_Display";
+ private const string MuiDaylightValue = "MUI_Dlt";
+ private const string MuiStandardValue = "MUI_Std";
+ private const string TimeZoneInfoValue = "TZI";
+ private const string FirstEntryValue = "FirstEntry";
+ private const string LastEntryValue = "LastEntry";
+
+ private const int MaxKeyLength = 255;
+ private const int RegByteLength = 44;
+
+#pragma warning disable 0420
+ private sealed partial class CachedData
+ {
+ private static TimeZoneInfo GetCurrentOneYearLocal()
+ {
+ // load the data from the OS
+ Win32Native.TimeZoneInformation timeZoneInformation;
+ long result = UnsafeNativeMethods.GetTimeZoneInformation(out timeZoneInformation);
+ return result == Win32Native.TIME_ZONE_ID_INVALID ?
+ CreateCustomTimeZone(LocalId, TimeSpan.Zero, LocalId, LocalId) :
+ GetLocalTimeZoneFromWin32Data(timeZoneInformation, dstDisabled: false);
+ }
+
+ private volatile OffsetAndRule _oneYearLocalFromUtc;
+
+ public OffsetAndRule GetOneYearLocalFromUtc(int year)
+ {
+ OffsetAndRule oneYearLocFromUtc = _oneYearLocalFromUtc;
+ if (oneYearLocFromUtc == null || oneYearLocFromUtc.Year != year)
+ {
+ TimeZoneInfo currentYear = GetCurrentOneYearLocal();
+ AdjustmentRule rule = currentYear._adjustmentRules == null ? null : currentYear._adjustmentRules[0];
+ oneYearLocFromUtc = new OffsetAndRule(year, currentYear.BaseUtcOffset, rule);
+ _oneYearLocalFromUtc = oneYearLocFromUtc;
+ }
+ return oneYearLocFromUtc;
+ }
+ }
+#pragma warning restore 0420
+
+ private sealed class OffsetAndRule
+ {
+ public readonly int Year;
+ public readonly TimeSpan Offset;
+ public readonly AdjustmentRule Rule;
+
+ public OffsetAndRule(int year, TimeSpan offset, AdjustmentRule rule)
+ {
+ Year = year;
+ Offset = offset;
+ Rule = rule;
+ }
+ }
+
+ /// <summary>
+ /// Returns a cloned array of AdjustmentRule objects
+ /// </summary>
+ public AdjustmentRule[] GetAdjustmentRules()
+ {
+ if (_adjustmentRules == null)
+ {
+ return Array.Empty<AdjustmentRule>();
+ }
+
+ return (AdjustmentRule[])_adjustmentRules.Clone();
+ }
+
+ private static void PopulateAllSystemTimeZones(CachedData cachedData)
+ {
+ Debug.Assert(Monitor.IsEntered(cachedData));
+
+ using (RegistryKey reg = Registry.LocalMachine.OpenSubKey(TimeZonesRegistryHive, writable: false))
+ {
+ if (reg != null)
+ {
+ foreach (string keyName in reg.GetSubKeyNames())
+ {
+ TimeZoneInfo value;
+ Exception ex;
+ TryGetTimeZone(keyName, false, out value, out ex, cachedData); // populate the cache
+ }
+ }
+ }
+ }
+
+ private TimeZoneInfo(Win32Native.TimeZoneInformation zone, bool dstDisabled)
+ {
+ if (string.IsNullOrEmpty(zone.StandardName))
+ {
+ _id = LocalId; // the ID must contain at least 1 character - initialize _id to "Local"
+ }
+ else
+ {
+ _id = zone.StandardName;
+ }
+ _baseUtcOffset = new TimeSpan(0, -(zone.Bias), 0);
+
+ if (!dstDisabled)
+ {
+ // only create the adjustment rule if DST is enabled
+ Win32Native.RegistryTimeZoneInformation regZone = new Win32Native.RegistryTimeZoneInformation(zone);
+ AdjustmentRule rule = CreateAdjustmentRuleFromTimeZoneInformation(regZone, DateTime.MinValue.Date, DateTime.MaxValue.Date, zone.Bias);
+ if (rule != null)
+ {
+ _adjustmentRules = new AdjustmentRule[1];
+ _adjustmentRules[0] = rule;
+ }
+ }
+
+ ValidateTimeZoneInfo(_id, _baseUtcOffset, _adjustmentRules, out _supportsDaylightSavingTime);
+ _displayName = zone.StandardName;
+ _standardDisplayName = zone.StandardName;
+ _daylightDisplayName = zone.DaylightName;
+ }
+
+ /// <summary>
+ /// Helper function to check if the current TimeZoneInformation struct does not support DST.
+ /// This check returns true when the DaylightDate == StandardDate.
+ /// This check is only meant to be used for "Local".
+ /// </summary>
+ private static bool CheckDaylightSavingTimeNotSupported(Win32Native.TimeZoneInformation timeZone) =>
+ timeZone.DaylightDate.Year == timeZone.StandardDate.Year &&
+ timeZone.DaylightDate.Month == timeZone.StandardDate.Month &&
+ timeZone.DaylightDate.DayOfWeek == timeZone.StandardDate.DayOfWeek &&
+ timeZone.DaylightDate.Day == timeZone.StandardDate.Day &&
+ timeZone.DaylightDate.Hour == timeZone.StandardDate.Hour &&
+ timeZone.DaylightDate.Minute == timeZone.StandardDate.Minute &&
+ timeZone.DaylightDate.Second == timeZone.StandardDate.Second &&
+ timeZone.DaylightDate.Milliseconds == timeZone.StandardDate.Milliseconds;
+
+ /// <summary>
+ /// Converts a Win32Native.RegistryTimeZoneInformation (REG_TZI_FORMAT struct) to an AdjustmentRule.
+ /// </summary>
+ private static AdjustmentRule CreateAdjustmentRuleFromTimeZoneInformation(Win32Native.RegistryTimeZoneInformation timeZoneInformation, DateTime startDate, DateTime endDate, int defaultBaseUtcOffset)
+ {
+ bool supportsDst = timeZoneInformation.StandardDate.Month != 0;
+
+ if (!supportsDst)
+ {
+ if (timeZoneInformation.Bias == defaultBaseUtcOffset)
+ {
+ // this rule will not contain any information to be used to adjust dates. just ignore it
+ return null;
+ }
+
+ return AdjustmentRule.CreateAdjustmentRule(
+ startDate,
+ endDate,
+ TimeSpan.Zero, // no daylight saving transition
+ TransitionTime.CreateFixedDateRule(DateTime.MinValue, 1, 1),
+ TransitionTime.CreateFixedDateRule(DateTime.MinValue.AddMilliseconds(1), 1, 1),
+ new TimeSpan(0, defaultBaseUtcOffset - timeZoneInformation.Bias, 0), // Bias delta is all what we need from this rule
+ noDaylightTransitions: false);
+ }
+
+ //
+ // Create an AdjustmentRule with TransitionTime objects
+ //
+ TransitionTime daylightTransitionStart;
+ if (!TransitionTimeFromTimeZoneInformation(timeZoneInformation, out daylightTransitionStart, readStartDate: true))
+ {
+ return null;
+ }
+
+ TransitionTime daylightTransitionEnd;
+ if (!TransitionTimeFromTimeZoneInformation(timeZoneInformation, out daylightTransitionEnd, readStartDate: false))
+ {
+ return null;
+ }
+
+ if (daylightTransitionStart.Equals(daylightTransitionEnd))
+ {
+ // this happens when the time zone does support DST but the OS has DST disabled
+ return null;
+ }
+
+ return AdjustmentRule.CreateAdjustmentRule(
+ startDate,
+ endDate,
+ new TimeSpan(0, -timeZoneInformation.DaylightBias, 0),
+ daylightTransitionStart,
+ daylightTransitionEnd,
+ new TimeSpan(0, defaultBaseUtcOffset - timeZoneInformation.Bias, 0),
+ noDaylightTransitions: false);
+ }
+
+ /// <summary>
+ /// Helper function that searches the registry for a time zone entry
+ /// that matches the TimeZoneInformation struct.
+ /// </summary>
+ private static string FindIdFromTimeZoneInformation(Win32Native.TimeZoneInformation timeZone, out bool dstDisabled)
+ {
+ dstDisabled = false;
+
+ using (RegistryKey key = Registry.LocalMachine.OpenSubKey(TimeZonesRegistryHive, writable: false))
+ {
+ if (key == null)
+ {
+ return null;
+ }
+
+ foreach (string keyName in key.GetSubKeyNames())
+ {
+ if (TryCompareTimeZoneInformationToRegistry(timeZone, keyName, out dstDisabled))
+ {
+ return keyName;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Helper function for retrieving the local system time zone.
+ /// May throw COMException, TimeZoneNotFoundException, InvalidTimeZoneException.
+ /// Assumes cachedData lock is taken.
+ /// </summary>
+ /// <returns>A new TimeZoneInfo instance.</returns>
+ private static TimeZoneInfo GetLocalTimeZone(CachedData cachedData)
+ {
+ Debug.Assert(Monitor.IsEntered(cachedData));
+
+ string id = null;
+
+ //
+ // Try using the "kernel32!GetDynamicTimeZoneInformation" API to get the "id"
+ //
+ var dynamicTimeZoneInformation = new Win32Native.DynamicTimeZoneInformation();
+
+ // call kernel32!GetDynamicTimeZoneInformation...
+ long result = UnsafeNativeMethods.GetDynamicTimeZoneInformation(out dynamicTimeZoneInformation);
+ if (result == Win32Native.TIME_ZONE_ID_INVALID)
+ {
+ // return a dummy entry
+ return CreateCustomTimeZone(LocalId, TimeSpan.Zero, LocalId, LocalId);
+ }
+
+ var timeZoneInformation = new Win32Native.TimeZoneInformation(dynamicTimeZoneInformation);
+
+ bool dstDisabled = dynamicTimeZoneInformation.DynamicDaylightTimeDisabled;
+
+ // check to see if we can use the key name returned from the API call
+ if (!string.IsNullOrEmpty(dynamicTimeZoneInformation.TimeZoneKeyName))
+ {
+ TimeZoneInfo zone;
+ Exception ex;
+
+ if (TryGetTimeZone(dynamicTimeZoneInformation.TimeZoneKeyName, dstDisabled, out zone, out ex, cachedData) == TimeZoneInfoResult.Success)
+ {
+ // successfully loaded the time zone from the registry
+ return zone;
+ }
+ }
+
+ // the key name was not returned or it pointed to a bogus entry - search for the entry ourselves
+ id = FindIdFromTimeZoneInformation(timeZoneInformation, out dstDisabled);
+
+ if (id != null)
+ {
+ TimeZoneInfo zone;
+ Exception ex;
+ if (TryGetTimeZone(id, dstDisabled, out zone, out ex, cachedData) == TimeZoneInfoResult.Success)
+ {
+ // successfully loaded the time zone from the registry
+ return zone;
+ }
+ }
+
+ // We could not find the data in the registry. Fall back to using
+ // the data from the Win32 API
+ return GetLocalTimeZoneFromWin32Data(timeZoneInformation, dstDisabled);
+ }
+
+ /// <summary>
+ /// Helper function used by 'GetLocalTimeZone()' - this function wraps a bunch of
+ /// try/catch logic for handling the TimeZoneInfo private constructor that takes
+ /// a Win32Native.TimeZoneInformation structure.
+ /// </summary>
+ private static TimeZoneInfo GetLocalTimeZoneFromWin32Data(Win32Native.TimeZoneInformation timeZoneInformation, bool dstDisabled)
+ {
+ // first try to create the TimeZoneInfo with the original 'dstDisabled' flag
+ try
+ {
+ return new TimeZoneInfo(timeZoneInformation, dstDisabled);
+ }
+ catch (ArgumentException) { }
+ catch (InvalidTimeZoneException) { }
+
+ // if 'dstDisabled' was false then try passing in 'true' as a last ditch effort
+ if (!dstDisabled)
+ {
+ try
+ {
+ return new TimeZoneInfo(timeZoneInformation, dstDisabled: true);
+ }
+ catch (ArgumentException) { }
+ catch (InvalidTimeZoneException) { }
+ }
+
+ // the data returned from Windows is completely bogus; return a dummy entry
+ return CreateCustomTimeZone(LocalId, TimeSpan.Zero, LocalId, LocalId);
+ }
+
+ /// <summary>
+ /// Helper function for retrieving a TimeZoneInfo object by <time_zone_name>.
+ /// This function wraps the logic necessary to keep the private
+ /// SystemTimeZones cache in working order
+ ///
+ /// This function will either return a valid TimeZoneInfo instance or
+ /// it will throw 'InvalidTimeZoneException' / 'TimeZoneNotFoundException'.
+ /// </summary>
+ public static TimeZoneInfo FindSystemTimeZoneById(string id)
+ {
+ // Special case for Utc as it will not exist in the dictionary with the rest
+ // of the system time zones. There is no need to do this check for Local.Id
+ // since Local is a real time zone that exists in the dictionary cache
+ if (string.Equals(id, UtcId, StringComparison.OrdinalIgnoreCase))
+ {
+ return Utc;
+ }
+
+ if (id == null)
+ {
+ throw new ArgumentNullException(nameof(id));
+ }
+ else if (id.Length == 0 || id.Length > MaxKeyLength || id.Contains("\0"))
+ {
+ throw new TimeZoneNotFoundException(Environment.GetResourceString("TimeZoneNotFound_MissingData", id));
+ }
+
+ TimeZoneInfo value;
+ Exception e;
+
+ TimeZoneInfoResult result;
+
+ CachedData cachedData = s_cachedData;
+
+ lock (cachedData)
+ {
+ result = TryGetTimeZone(id, false, out value, out e, cachedData);
+ }
+
+ if (result == TimeZoneInfoResult.Success)
+ {
+ return value;
+ }
+ else if (result == TimeZoneInfoResult.InvalidTimeZoneException)
+ {
+ throw new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_InvalidRegistryData", id), e);
+ }
+ else if (result == TimeZoneInfoResult.SecurityException)
+ {
+ throw new SecurityException(Environment.GetResourceString("Security_CannotReadRegistryData", id), e);
+ }
+ else
+ {
+ throw new TimeZoneNotFoundException(Environment.GetResourceString("TimeZoneNotFound_MissingData", id), e);
+ }
+ }
+
+ // DateTime.Now fast path that avoids allocating an historically accurate TimeZoneInfo.Local and just creates a 1-year (current year) accurate time zone
+ internal static TimeSpan GetDateTimeNowUtcOffsetFromUtc(DateTime time, out bool isAmbiguousLocalDst)
+ {
+ bool isDaylightSavings = false;
+ isAmbiguousLocalDst = false;
+ TimeSpan baseOffset;
+ int timeYear = time.Year;
+
+ OffsetAndRule match = s_cachedData.GetOneYearLocalFromUtc(timeYear);
+ baseOffset = match.Offset;
+
+ if (match.Rule != null)
+ {
+ baseOffset = baseOffset + match.Rule.BaseUtcOffsetDelta;
+ if (match.Rule.HasDaylightSaving)
+ {
+ isDaylightSavings = GetIsDaylightSavingsFromUtc(time, timeYear, match.Offset, match.Rule, out isAmbiguousLocalDst, Local);
+ baseOffset += (isDaylightSavings ? match.Rule.DaylightDelta : TimeSpan.Zero /* FUTURE: rule.StandardDelta */);
+ }
+ }
+ return baseOffset;
+ }
+
+ /// <summary>
+ /// Converts a Win32Native.RegistryTimeZoneInformation (REG_TZI_FORMAT struct) to a TransitionTime
+ /// - When the argument 'readStart' is true the corresponding daylightTransitionTimeStart field is read
+ /// - When the argument 'readStart' is false the corresponding dayightTransitionTimeEnd field is read
+ /// </summary>
+ private static bool TransitionTimeFromTimeZoneInformation(Win32Native.RegistryTimeZoneInformation timeZoneInformation, out TransitionTime transitionTime, bool readStartDate)
+ {
+ //
+ // SYSTEMTIME -
+ //
+ // If the time zone does not support daylight saving time or if the caller needs
+ // to disable daylight saving time, the wMonth member in the SYSTEMTIME structure
+ // must be zero. If this date is specified, the DaylightDate value in the
+ // TIME_ZONE_INFORMATION structure must also be specified. Otherwise, the system
+ // assumes the time zone data is invalid and no changes will be applied.
+ //
+ bool supportsDst = (timeZoneInformation.StandardDate.Month != 0);
+
+ if (!supportsDst)
+ {
+ transitionTime = default(TransitionTime);
+ return false;
+ }
+
+ //
+ // SYSTEMTIME -
+ //
+ // * FixedDateRule -
+ // If the Year member is not zero, the transition date is absolute; it will only occur one time
+ //
+ // * FloatingDateRule -
+ // To select the correct day in the month, set the Year member to zero, the Hour and Minute
+ // members to the transition time, the DayOfWeek member to the appropriate weekday, and the
+ // Day member to indicate the occurence of the day of the week within the month (first through fifth).
+ //
+ // Using this notation, specify the 2:00a.m. on the first Sunday in April as follows:
+ // Hour = 2,
+ // Month = 4,
+ // DayOfWeek = 0,
+ // Day = 1.
+ //
+ // Specify 2:00a.m. on the last Thursday in October as follows:
+ // Hour = 2,
+ // Month = 10,
+ // DayOfWeek = 4,
+ // Day = 5.
+ //
+ if (readStartDate)
+ {
+ //
+ // read the "daylightTransitionStart"
+ //
+ if (timeZoneInformation.DaylightDate.Year == 0)
+ {
+ transitionTime = TransitionTime.CreateFloatingDateRule(
+ new DateTime(1, /* year */
+ 1, /* month */
+ 1, /* day */
+ timeZoneInformation.DaylightDate.Hour,
+ timeZoneInformation.DaylightDate.Minute,
+ timeZoneInformation.DaylightDate.Second,
+ timeZoneInformation.DaylightDate.Milliseconds),
+ timeZoneInformation.DaylightDate.Month,
+ timeZoneInformation.DaylightDate.Day, /* Week 1-5 */
+ (DayOfWeek)timeZoneInformation.DaylightDate.DayOfWeek);
+ }
+ else
+ {
+ transitionTime = TransitionTime.CreateFixedDateRule(
+ new DateTime(1, /* year */
+ 1, /* month */
+ 1, /* day */
+ timeZoneInformation.DaylightDate.Hour,
+ timeZoneInformation.DaylightDate.Minute,
+ timeZoneInformation.DaylightDate.Second,
+ timeZoneInformation.DaylightDate.Milliseconds),
+ timeZoneInformation.DaylightDate.Month,
+ timeZoneInformation.DaylightDate.Day);
+ }
+ }
+ else
+ {
+ //
+ // read the "daylightTransitionEnd"
+ //
+ if (timeZoneInformation.StandardDate.Year == 0)
+ {
+ transitionTime = TransitionTime.CreateFloatingDateRule(
+ new DateTime(1, /* year */
+ 1, /* month */
+ 1, /* day */
+ timeZoneInformation.StandardDate.Hour,
+ timeZoneInformation.StandardDate.Minute,
+ timeZoneInformation.StandardDate.Second,
+ timeZoneInformation.StandardDate.Milliseconds),
+ timeZoneInformation.StandardDate.Month,
+ timeZoneInformation.StandardDate.Day, /* Week 1-5 */
+ (DayOfWeek)timeZoneInformation.StandardDate.DayOfWeek);
+ }
+ else
+ {
+ transitionTime = TransitionTime.CreateFixedDateRule(
+ new DateTime(1, /* year */
+ 1, /* month */
+ 1, /* day */
+ timeZoneInformation.StandardDate.Hour,
+ timeZoneInformation.StandardDate.Minute,
+ timeZoneInformation.StandardDate.Second,
+ timeZoneInformation.StandardDate.Milliseconds),
+ timeZoneInformation.StandardDate.Month,
+ timeZoneInformation.StandardDate.Day);
+ }
+ }
+
+ return true;
+ }
+
+ /// <summary>
+ /// Helper function that takes:
+ /// 1. A string representing a <time_zone_name> registry key name.
+ /// 2. A RegistryTimeZoneInformation struct containing the default rule.
+ /// 3. An AdjustmentRule[] out-parameter.
+ /// </summary>
+ private static bool TryCreateAdjustmentRules(string id, Win32Native.RegistryTimeZoneInformation defaultTimeZoneInformation, out AdjustmentRule[] rules, out Exception e, int defaultBaseUtcOffset)
+ {
+ e = null;
+
+ try
+ {
+ // Optional, Dynamic Time Zone Registry Data
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ //
+ // HKLM
+ // Software
+ // Microsoft
+ // Windows NT
+ // CurrentVersion
+ // Time Zones
+ // <time_zone_name>
+ // Dynamic DST
+ // * "FirstEntry" REG_DWORD "1980"
+ // First year in the table. If the current year is less than this value,
+ // this entry will be used for DST boundaries
+ // * "LastEntry" REG_DWORD "2038"
+ // Last year in the table. If the current year is greater than this value,
+ // this entry will be used for DST boundaries"
+ // * "<year1>" REG_BINARY REG_TZI_FORMAT
+ // See Win32Native.RegistryTimeZoneInformation
+ // * "<year2>" REG_BINARY REG_TZI_FORMAT
+ // See Win32Native.RegistryTimeZoneInformation
+ // * "<year3>" REG_BINARY REG_TZI_FORMAT
+ // See Win32Native.RegistryTimeZoneInformation
+ //
+ using (RegistryKey dynamicKey = Registry.LocalMachine.OpenSubKey(TimeZonesRegistryHive + "\\" + id + "\\Dynamic DST", writable: false))
+ {
+ if (dynamicKey == null)
+ {
+ AdjustmentRule rule = CreateAdjustmentRuleFromTimeZoneInformation(
+ defaultTimeZoneInformation, DateTime.MinValue.Date, DateTime.MaxValue.Date, defaultBaseUtcOffset);
+ rules = rule == null ? null : new[] { rule };
+ return true;
+ }
+
+ //
+ // loop over all of the "<time_zone_name>\Dynamic DST" hive entries
+ //
+ // read FirstEntry {MinValue - (year1, 12, 31)}
+ // read MiddleEntry {(yearN, 1, 1) - (yearN, 12, 31)}
+ // read LastEntry {(yearN, 1, 1) - MaxValue }
+
+ // read the FirstEntry and LastEntry key values (ex: "1980", "2038")
+ int first = (int)dynamicKey.GetValue(FirstEntryValue, -1, RegistryValueOptions.None);
+ int last = (int)dynamicKey.GetValue(LastEntryValue, -1, RegistryValueOptions.None);
+
+ if (first == -1 || last == -1 || first > last)
+ {
+ rules = null;
+ return false;
+ }
+
+ // read the first year entry
+ Win32Native.RegistryTimeZoneInformation dtzi;
+ byte[] regValue = dynamicKey.GetValue(first.ToString(CultureInfo.InvariantCulture), null, RegistryValueOptions.None) as byte[];
+ if (regValue == null || regValue.Length != RegByteLength)
+ {
+ rules = null;
+ return false;
+ }
+ dtzi = new Win32Native.RegistryTimeZoneInformation(regValue);
+
+ if (first == last)
+ {
+ // there is just 1 dynamic rule for this time zone.
+ AdjustmentRule rule = CreateAdjustmentRuleFromTimeZoneInformation(dtzi, DateTime.MinValue.Date, DateTime.MaxValue.Date, defaultBaseUtcOffset);
+ rules = rule == null ? null : new[] { rule };
+ return true;
+ }
+
+ List<AdjustmentRule> rulesList = new List<AdjustmentRule>(1);
+
+ // there are more than 1 dynamic rules for this time zone.
+ AdjustmentRule firstRule = CreateAdjustmentRuleFromTimeZoneInformation(
+ dtzi,
+ DateTime.MinValue.Date, // MinValue
+ new DateTime(first, 12, 31), // December 31, <FirstYear>
+ defaultBaseUtcOffset);
+
+ if (firstRule != null)
+ {
+ rulesList.Add(firstRule);
+ }
+
+ // read the middle year entries
+ for (int i = first + 1; i < last; i++)
+ {
+ regValue = dynamicKey.GetValue(i.ToString(CultureInfo.InvariantCulture), null, RegistryValueOptions.None) as byte[];
+ if (regValue == null || regValue.Length != RegByteLength)
+ {
+ rules = null;
+ return false;
+ }
+ dtzi = new Win32Native.RegistryTimeZoneInformation(regValue);
+ AdjustmentRule middleRule = CreateAdjustmentRuleFromTimeZoneInformation(
+ dtzi,
+ new DateTime(i, 1, 1), // January 01, <Year>
+ new DateTime(i, 12, 31), // December 31, <Year>
+ defaultBaseUtcOffset);
+
+ if (middleRule != null)
+ {
+ rulesList.Add(middleRule);
+ }
+ }
+
+ // read the last year entry
+ regValue = dynamicKey.GetValue(last.ToString(CultureInfo.InvariantCulture), null, RegistryValueOptions.None) as byte[];
+ dtzi = new Win32Native.RegistryTimeZoneInformation(regValue);
+ if (regValue == null || regValue.Length != RegByteLength)
+ {
+ rules = null;
+ return false;
+ }
+ AdjustmentRule lastRule = CreateAdjustmentRuleFromTimeZoneInformation(
+ dtzi,
+ new DateTime(last, 1, 1), // January 01, <LastYear>
+ DateTime.MaxValue.Date, // MaxValue
+ defaultBaseUtcOffset);
+
+ if (lastRule != null)
+ {
+ rulesList.Add(lastRule);
+ }
+
+ // convert the ArrayList to an AdjustmentRule array
+ rules = rulesList.ToArray();
+ if (rules != null && rules.Length == 0)
+ {
+ rules = null;
+ }
+ } // end of: using (RegistryKey dynamicKey...
+ }
+ catch (InvalidCastException ex)
+ {
+ // one of the RegistryKey.GetValue calls could not be cast to an expected value type
+ rules = null;
+ e = ex;
+ return false;
+ }
+ catch (ArgumentOutOfRangeException ex)
+ {
+ rules = null;
+ e = ex;
+ return false;
+ }
+ catch (ArgumentException ex)
+ {
+ rules = null;
+ e = ex;
+ return false;
+ }
+ return true;
+ }
+
+ /// <summary>
+ /// Helper function that compares the StandardBias and StandardDate portion a
+ /// TimeZoneInformation struct to a time zone registry entry.
+ /// </summary>
+ private static bool TryCompareStandardDate(Win32Native.TimeZoneInformation timeZone, Win32Native.RegistryTimeZoneInformation registryTimeZoneInfo) =>
+ timeZone.Bias == registryTimeZoneInfo.Bias &&
+ timeZone.StandardBias == registryTimeZoneInfo.StandardBias &&
+ timeZone.StandardDate.Year == registryTimeZoneInfo.StandardDate.Year &&
+ timeZone.StandardDate.Month == registryTimeZoneInfo.StandardDate.Month &&
+ timeZone.StandardDate.DayOfWeek == registryTimeZoneInfo.StandardDate.DayOfWeek &&
+ timeZone.StandardDate.Day == registryTimeZoneInfo.StandardDate.Day &&
+ timeZone.StandardDate.Hour == registryTimeZoneInfo.StandardDate.Hour &&
+ timeZone.StandardDate.Minute == registryTimeZoneInfo.StandardDate.Minute &&
+ timeZone.StandardDate.Second == registryTimeZoneInfo.StandardDate.Second &&
+ timeZone.StandardDate.Milliseconds == registryTimeZoneInfo.StandardDate.Milliseconds;
+
+ /// <summary>
+ /// Helper function that compares a TimeZoneInformation struct to a time zone registry entry.
+ /// </summary>
+ private static bool TryCompareTimeZoneInformationToRegistry(Win32Native.TimeZoneInformation timeZone, string id, out bool dstDisabled)
+ {
+ dstDisabled = false;
+
+ using (RegistryKey key = Registry.LocalMachine.OpenSubKey(TimeZonesRegistryHive + "\\" + id, writable: false))
+ {
+ if (key == null)
+ {
+ return false;
+ }
+
+ Win32Native.RegistryTimeZoneInformation registryTimeZoneInfo;
+ byte[] regValue = key.GetValue(TimeZoneInfoValue, null, RegistryValueOptions.None) as byte[];
+ if (regValue == null || regValue.Length != RegByteLength) return false;
+ registryTimeZoneInfo = new Win32Native.RegistryTimeZoneInformation(regValue);
+
+ //
+ // first compare the bias and standard date information between the data from the Win32 API
+ // and the data from the registry...
+ //
+ bool result = TryCompareStandardDate(timeZone, registryTimeZoneInfo);
+
+ if (!result)
+ {
+ return false;
+ }
+
+ result = dstDisabled || CheckDaylightSavingTimeNotSupported(timeZone) ||
+ //
+ // since Daylight Saving Time is not "disabled", do a straight comparision between
+ // the Win32 API data and the registry data ...
+ //
+ (timeZone.DaylightBias == registryTimeZoneInfo.DaylightBias &&
+ timeZone.DaylightDate.Year == registryTimeZoneInfo.DaylightDate.Year &&
+ timeZone.DaylightDate.Month == registryTimeZoneInfo.DaylightDate.Month &&
+ timeZone.DaylightDate.DayOfWeek == registryTimeZoneInfo.DaylightDate.DayOfWeek &&
+ timeZone.DaylightDate.Day == registryTimeZoneInfo.DaylightDate.Day &&
+ timeZone.DaylightDate.Hour == registryTimeZoneInfo.DaylightDate.Hour &&
+ timeZone.DaylightDate.Minute == registryTimeZoneInfo.DaylightDate.Minute &&
+ timeZone.DaylightDate.Second == registryTimeZoneInfo.DaylightDate.Second &&
+ timeZone.DaylightDate.Milliseconds == registryTimeZoneInfo.DaylightDate.Milliseconds);
+
+ // Finally compare the "StandardName" string value...
+ //
+ // we do not compare "DaylightName" as this TimeZoneInformation field may contain
+ // either "StandardName" or "DaylightName" depending on the time of year and current machine settings
+ //
+ if (result)
+ {
+ string registryStandardName = key.GetValue(StandardValue, string.Empty, RegistryValueOptions.None) as string;
+ result = string.Equals(registryStandardName, timeZone.StandardName, StringComparison.Ordinal);
+ }
+ return result;
+ }
+ }
+
+ /// <summary>
+ /// Helper function for retrieving a localized string resource via MUI.
+ /// The function expects a string in the form: "@resource.dll, -123"
+ ///
+ /// "resource.dll" is a language-neutral portable executable (LNPE) file in
+ /// the %windir%\system32 directory. The OS is queried to find the best-fit
+ /// localized resource file for this LNPE (ex: %windir%\system32\en-us\resource.dll.mui).
+ /// If a localized resource file exists, we LoadString resource ID "123" and
+ /// return it to our caller.
+ /// </summary>
+ private static string TryGetLocalizedNameByMuiNativeResource(string resource)
+ {
+ if (string.IsNullOrEmpty(resource))
+ {
+ return string.Empty;
+ }
+
+ // parse "@tzres.dll, -100"
+ //
+ // filePath = "C:\Windows\System32\tzres.dll"
+ // resourceId = -100
+ //
+ string[] resources = resource.Split(',');
+ if (resources.Length != 2)
+ {
+ return string.Empty;
+ }
+
+ string filePath;
+ int resourceId;
+
+ // get the path to Windows\System32
+ string system32 = Environment.SystemDirectory;
+
+ // trim the string "@tzres.dll" => "tzres.dll"
+ string tzresDll = resources[0].TrimStart('@');
+
+ try
+ {
+ filePath = Path.Combine(system32, tzresDll);
+ }
+ catch (ArgumentException)
+ {
+ // there were probably illegal characters in the path
+ return string.Empty;
+ }
+
+ if (!int.TryParse(resources[1], NumberStyles.Integer, CultureInfo.InvariantCulture, out resourceId))
+ {
+ return string.Empty;
+ }
+ resourceId = -resourceId;
+
+ try
+ {
+ StringBuilder fileMuiPath = StringBuilderCache.Acquire(Path.MaxPath);
+ fileMuiPath.Length = Path.MaxPath;
+ int fileMuiPathLength = Path.MaxPath;
+ int languageLength = 0;
+ long enumerator = 0;
+
+ bool succeeded = UnsafeNativeMethods.GetFileMUIPath(
+ Win32Native.MUI_PREFERRED_UI_LANGUAGES,
+ filePath, null /* language */, ref languageLength,
+ fileMuiPath, ref fileMuiPathLength, ref enumerator);
+ if (!succeeded)
+ {
+ StringBuilderCache.Release(fileMuiPath);
+ return string.Empty;
+ }
+ return TryGetLocalizedNameByNativeResource(StringBuilderCache.GetStringAndRelease(fileMuiPath), resourceId);
+ }
+ catch (EntryPointNotFoundException)
+ {
+ return string.Empty;
+ }
+ }
+
+ /// <summary>
+ /// Helper function for retrieving a localized string resource via a native resource DLL.
+ /// The function expects a string in the form: "C:\Windows\System32\en-us\resource.dll"
+ ///
+ /// "resource.dll" is a language-specific resource DLL.
+ /// If the localized resource DLL exists, LoadString(resource) is returned.
+ /// </summary>
+ private static string TryGetLocalizedNameByNativeResource(string filePath, int resource)
+ {
+ using (SafeLibraryHandle handle =
+ UnsafeNativeMethods.LoadLibraryEx(filePath, IntPtr.Zero, Win32Native.LOAD_LIBRARY_AS_DATAFILE))
+ {
+ if (!handle.IsInvalid)
+ {
+ StringBuilder localizedResource = StringBuilderCache.Acquire(Win32Native.LOAD_STRING_MAX_LENGTH);
+ localizedResource.Length = Win32Native.LOAD_STRING_MAX_LENGTH;
+
+ int result = UnsafeNativeMethods.LoadString(handle, resource,
+ localizedResource, localizedResource.Length);
+
+ if (result != 0)
+ {
+ return StringBuilderCache.GetStringAndRelease(localizedResource);
+ }
+ }
+ }
+ return string.Empty;
+ }
+
+ /// <summary>
+ /// Helper function for retrieving the DisplayName, StandardName, and DaylightName from the registry
+ ///
+ /// The function first checks the MUI_ key-values, and if they exist, it loads the strings from the MUI
+ /// resource dll(s). When the keys do not exist, the function falls back to reading from the standard
+ /// key-values
+ /// </summary>
+ private static bool TryGetLocalizedNamesByRegistryKey(RegistryKey key, out string displayName, out string standardName, out string daylightName)
+ {
+ displayName = string.Empty;
+ standardName = string.Empty;
+ daylightName = string.Empty;
+
+ // read the MUI_ registry keys
+ string displayNameMuiResource = key.GetValue(MuiDisplayValue, string.Empty, RegistryValueOptions.None) as string;
+ string standardNameMuiResource = key.GetValue(MuiStandardValue, string.Empty, RegistryValueOptions.None) as string;
+ string daylightNameMuiResource = key.GetValue(MuiDaylightValue, string.Empty, RegistryValueOptions.None) as string;
+
+ // try to load the strings from the native resource DLL(s)
+ if (!string.IsNullOrEmpty(displayNameMuiResource))
+ {
+ displayName = TryGetLocalizedNameByMuiNativeResource(displayNameMuiResource);
+ }
+
+ if (!string.IsNullOrEmpty(standardNameMuiResource))
+ {
+ standardName = TryGetLocalizedNameByMuiNativeResource(standardNameMuiResource);
+ }
+
+ if (!string.IsNullOrEmpty(daylightNameMuiResource))
+ {
+ daylightName = TryGetLocalizedNameByMuiNativeResource(daylightNameMuiResource);
+ }
+
+ // fallback to using the standard registry keys
+ if (string.IsNullOrEmpty(displayName))
+ {
+ displayName = key.GetValue(DisplayValue, string.Empty, RegistryValueOptions.None) as string;
+ }
+ if (string.IsNullOrEmpty(standardName))
+ {
+ standardName = key.GetValue(StandardValue, string.Empty, RegistryValueOptions.None) as string;
+ }
+ if (string.IsNullOrEmpty(daylightName))
+ {
+ daylightName = key.GetValue(DaylightValue, string.Empty, RegistryValueOptions.None) as string;
+ }
+
+ return true;
+ }
+
+ /// <summary>
+ /// Helper function that takes a string representing a <time_zone_name> registry key name
+ /// and returns a TimeZoneInfo instance.
+ /// </summary>
+ private static TimeZoneInfoResult TryGetTimeZoneFromLocalMachine(string id, out TimeZoneInfo value, out Exception e)
+ {
+ e = null;
+
+ // Standard Time Zone Registry Data
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ // HKLM
+ // Software
+ // Microsoft
+ // Windows NT
+ // CurrentVersion
+ // Time Zones
+ // <time_zone_name>
+ // * STD, REG_SZ "Standard Time Name"
+ // (For OS installed zones, this will always be English)
+ // * MUI_STD, REG_SZ "@tzres.dll,-1234"
+ // Indirect string to localized resource for Standard Time,
+ // add "%windir%\system32\" after "@"
+ // * DLT, REG_SZ "Daylight Time Name"
+ // (For OS installed zones, this will always be English)
+ // * MUI_DLT, REG_SZ "@tzres.dll,-1234"
+ // Indirect string to localized resource for Daylight Time,
+ // add "%windir%\system32\" after "@"
+ // * Display, REG_SZ "Display Name like (GMT-8:00) Pacific Time..."
+ // * MUI_Display, REG_SZ "@tzres.dll,-1234"
+ // Indirect string to localized resource for the Display,
+ // add "%windir%\system32\" after "@"
+ // * TZI, REG_BINARY REG_TZI_FORMAT
+ // See Win32Native.RegistryTimeZoneInformation
+ //
+ using (RegistryKey key = Registry.LocalMachine.OpenSubKey(TimeZonesRegistryHive + "\\" + id, writable: false))
+ {
+ if (key == null)
+ {
+ value = null;
+ return TimeZoneInfoResult.TimeZoneNotFoundException;
+ }
+
+ Win32Native.RegistryTimeZoneInformation defaultTimeZoneInformation;
+ byte[] regValue = key.GetValue(TimeZoneInfoValue, null, RegistryValueOptions.None) as byte[];
+ if (regValue == null || regValue.Length != RegByteLength)
+ {
+ // the registry value could not be cast to a byte array
+ value = null;
+ return TimeZoneInfoResult.InvalidTimeZoneException;
+ }
+ defaultTimeZoneInformation = new Win32Native.RegistryTimeZoneInformation(regValue);
+
+ AdjustmentRule[] adjustmentRules;
+ if (!TryCreateAdjustmentRules(id, defaultTimeZoneInformation, out adjustmentRules, out e, defaultTimeZoneInformation.Bias))
+ {
+ value = null;
+ return TimeZoneInfoResult.InvalidTimeZoneException;
+ }
+
+ string displayName;
+ string standardName;
+ string daylightName;
+
+ if (!TryGetLocalizedNamesByRegistryKey(key, out displayName, out standardName, out daylightName))
+ {
+ value = null;
+ return TimeZoneInfoResult.InvalidTimeZoneException;
+ }
+
+ try
+ {
+ value = new TimeZoneInfo(
+ id,
+ new TimeSpan(0, -(defaultTimeZoneInformation.Bias), 0),
+ displayName,
+ standardName,
+ daylightName,
+ adjustmentRules,
+ disableDaylightSavingTime: false);
+
+ return TimeZoneInfoResult.Success;
+ }
+ catch (ArgumentException ex)
+ {
+ // TimeZoneInfo constructor can throw ArgumentException and InvalidTimeZoneException
+ value = null;
+ e = ex;
+ return TimeZoneInfoResult.InvalidTimeZoneException;
+ }
+ catch (InvalidTimeZoneException ex)
+ {
+ // TimeZoneInfo constructor can throw ArgumentException and InvalidTimeZoneException
+ value = null;
+ e = ex;
+ return TimeZoneInfoResult.InvalidTimeZoneException;
+ }
+
+ }
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/TimeZoneInfo.cs b/src/mscorlib/src/System/TimeZoneInfo.cs
index 72fc28fc3e..fc5625be2e 100644
--- a/src/mscorlib/src/System/TimeZoneInfo.cs
+++ b/src/mscorlib/src/System/TimeZoneInfo.cs
@@ -2,38 +2,15 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-/*============================================================
-**
-**
-**
-** Purpose:
-** This class is used to represent a Dynamic TimeZone. It
-** has methods for converting a DateTime between TimeZones,
-** and for reading TimeZone data from the Windows Registry
-**
-**
-============================================================*/
-
-namespace System {
- using Microsoft.Win32;
- using Microsoft.Win32.SafeHandles;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Globalization;
- using System.IO;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Runtime.Serialization;
- using System.Runtime.Versioning;
- using System.Security;
- using System.Security.Permissions;
- using System.Text;
- using System.Threading;
-
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Diagnostics.Contracts;
+using System.Globalization;
+using System.Runtime.Serialization;
+using System.Threading;
+
+namespace System
+{
//
// DateTime uses TimeZoneInfo under the hood for IsDaylightSavingTime, IsAmbiguousTime, and GetUtcOffset.
// These TimeZoneInfo APIs can throw ArgumentException when an Invalid-Time is passed in. To avoid this
@@ -44,137 +21,101 @@ namespace System {
// demand for this alternate behavior.
//
[Flags]
- internal enum TimeZoneInfoOptions {
- None = 1,
- NoThrowOnInvalidTime = 2
+ internal enum TimeZoneInfoOptions
+ {
+ None = 1,
+ NoThrowOnInvalidTime = 2
};
[Serializable]
- [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
- sealed public class TimeZoneInfo : IEquatable<TimeZoneInfo>, ISerializable, IDeserializationCallback
+ public sealed partial class TimeZoneInfo : IEquatable<TimeZoneInfo>, ISerializable, IDeserializationCallback
{
- // ---- SECTION: members supporting exposed properties -------------*
- private readonly String m_id;
- private readonly String m_displayName;
- private readonly String m_standardDisplayName;
- private readonly String m_daylightDisplayName;
- private readonly TimeSpan m_baseUtcOffset;
- private readonly Boolean m_supportsDaylightSavingTime;
- private readonly AdjustmentRule[] m_adjustmentRules;
-
- // ---- SECTION: members for internal support ---------*
- private enum TimeZoneInfoResult {
- Success = 0,
+ private enum TimeZoneInfoResult
+ {
+ Success = 0,
TimeZoneNotFoundException = 1,
- InvalidTimeZoneException = 2,
- SecurityException = 3
+ InvalidTimeZoneException = 2,
+ SecurityException = 3
};
-
-#if FEATURE_WIN32_REGISTRY
- // registry constants for the 'Time Zones' hive
- //
- private const string c_timeZonesRegistryHive = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones";
- private const string c_timeZonesRegistryHivePermissionList = @"HKEY_LOCAL_MACHINE\" + c_timeZonesRegistryHive;
- private const string c_displayValue = "Display";
- private const string c_daylightValue = "Dlt";
- private const string c_standardValue = "Std";
- private const string c_muiDisplayValue = "MUI_Display";
- private const string c_muiDaylightValue = "MUI_Dlt";
- private const string c_muiStandardValue = "MUI_Std";
- private const string c_timeZoneInfoValue = "TZI";
- private const string c_firstEntryValue = "FirstEntry";
- private const string c_lastEntryValue = "LastEntry";
-
-#endif // FEATURE_WIN32_REGISTRY
-
-#if PLATFORM_UNIX
- private const string c_defaultTimeZoneDirectory = "/usr/share/zoneinfo/";
- private const string c_zoneTabFileName = "zone.tab";
- private const string c_timeZoneEnvironmentVariable = "TZ";
- private const string c_timeZoneDirectoryEnvironmentVariable = "TZDIR";
-#endif // PLATFORM_UNIX
+ private readonly string _id;
+ private readonly string _displayName;
+ private readonly string _standardDisplayName;
+ private readonly string _daylightDisplayName;
+ private readonly TimeSpan _baseUtcOffset;
+ private readonly bool _supportsDaylightSavingTime;
+ private readonly AdjustmentRule[] _adjustmentRules;
// constants for TimeZoneInfo.Local and TimeZoneInfo.Utc
- private const string c_utcId = "UTC";
- private const string c_localId = "Local";
-
- private const int c_maxKeyLength = 255;
+ private const string UtcId = "UTC";
+ private const string LocalId = "Local";
- private const int c_regByteLength = 44;
+ private static readonly TimeZoneInfo s_utcTimeZone = CreateCustomTimeZone(UtcId, TimeSpan.Zero, UtcId, UtcId);
- // Number of 100ns ticks per time unit
- private const long c_ticksPerMillisecond = 10000;
- private const long c_ticksPerSecond = c_ticksPerMillisecond * 1000;
- private const long c_ticksPerMinute = c_ticksPerSecond * 60;
- private const long c_ticksPerHour = c_ticksPerMinute * 60;
- private const long c_ticksPerDay = c_ticksPerHour * 24;
- private const long c_ticksPerDayRange = c_ticksPerDay - c_ticksPerMillisecond;
-
- private static readonly TimeZoneInfo s_utcTimeZone = CreateCustomTimeZone(c_utcId, TimeSpan.Zero, c_utcId, c_utcId);
+ private static CachedData s_cachedData = new CachedData();
//
// All cached data are encapsulated in a helper class to allow consistent view even when the data are refreshed using ClearCachedData()
//
- // For example, TimeZoneInfo.Local can be cleared by another thread calling TimeZoneInfo.ClearCachedData. Without the consistent snapshot,
+ // For example, TimeZoneInfo.Local can be cleared by another thread calling TimeZoneInfo.ClearCachedData. Without the consistent snapshot,
// there is a chance that the internal ConvertTime calls will throw since 'source' won't be reference equal to the new TimeZoneInfo.Local.
//
#pragma warning disable 0420
- class CachedData
+ private sealed partial class CachedData
{
- private volatile TimeZoneInfo m_localTimeZone;
+ private volatile TimeZoneInfo _localTimeZone;
private TimeZoneInfo CreateLocal()
{
lock (this)
{
- TimeZoneInfo timeZone = m_localTimeZone;
- if (timeZone == null) {
- timeZone = TimeZoneInfo.GetLocalTimeZone(this);
+ TimeZoneInfo timeZone = _localTimeZone;
+ if (timeZone == null)
+ {
+ timeZone = GetLocalTimeZone(this);
// this step is to break the reference equality
// between TimeZoneInfo.Local and a second time zone
// such as "Pacific Standard Time"
timeZone = new TimeZoneInfo(
- timeZone.m_id,
- timeZone.m_baseUtcOffset,
- timeZone.m_displayName,
- timeZone.m_standardDisplayName,
- timeZone.m_daylightDisplayName,
- timeZone.m_adjustmentRules,
- false);
-
- m_localTimeZone = timeZone;
+ timeZone._id,
+ timeZone._baseUtcOffset,
+ timeZone._displayName,
+ timeZone._standardDisplayName,
+ timeZone._daylightDisplayName,
+ timeZone._adjustmentRules,
+ disableDaylightSavingTime: false);
+
+ _localTimeZone = timeZone;
}
return timeZone;
}
}
- public TimeZoneInfo Local {
- get {
- TimeZoneInfo timeZone = m_localTimeZone;
- if (timeZone == null) {
+ public TimeZoneInfo Local
+ {
+ get
+ {
+ TimeZoneInfo timeZone = _localTimeZone;
+ if (timeZone == null)
+ {
timeZone = CreateLocal();
}
return timeZone;
}
}
- //
- // GetCorrespondingKind-
- //
- // Helper function that returns the corresponding DateTimeKind for this TimeZoneInfo
- //
- public DateTimeKind GetCorrespondingKind(TimeZoneInfo timeZone) {
- DateTimeKind kind;
-
- //
- // we check reference equality to see if 'this' is the same as
- // TimeZoneInfo.Local or TimeZoneInfo.Utc. This check is needed to
+ /// <summary>
+ /// Helper function that returns the corresponding DateTimeKind for this TimeZoneInfo.
+ /// </summary>
+ public DateTimeKind GetCorrespondingKind(TimeZoneInfo timeZone)
+ {
+ // We check reference equality to see if 'this' is the same as
+ // TimeZoneInfo.Local or TimeZoneInfo.Utc. This check is needed to
// support setting the DateTime Kind property to 'Local' or
- // 'Utc' on the ConverTime(...) return value.
+ // 'Utc' on the ConverTime(...) return value.
//
- // Using reference equality instead of value equality was a
+ // Using reference equality instead of value equality was a
// performance based design compromise. The reference equality
// has much greater performance, but it reduces the number of
// returned DateTime's that can be properly set as 'Local' or 'Utc'.
@@ -187,244 +128,133 @@ namespace System {
// in this example. Only when the user passes in TimeZoneInfo.Local or
// TimeZoneInfo.Utc to the ConvertTime(...) methods will this check succeed.
//
- if ((object)timeZone == (object)s_utcTimeZone) {
- kind = DateTimeKind.Utc;
- }
- else if ((object)timeZone == (object)m_localTimeZone) {
- kind = DateTimeKind.Local;
- }
- else {
- kind = DateTimeKind.Unspecified;
- }
-
- return kind;
- }
-
- public Dictionary<string, TimeZoneInfo> m_systemTimeZones;
- public ReadOnlyCollection<TimeZoneInfo> m_readOnlySystemTimeZones;
- public bool m_allSystemTimeZonesRead;
-
-#if FEATURE_WIN32_REGISTRY
- private static TimeZoneInfo GetCurrentOneYearLocal() {
- // load the data from the OS
- TimeZoneInfo match;
-
- Win32Native.TimeZoneInformation timeZoneInformation = new Win32Native.TimeZoneInformation();
- long result = UnsafeNativeMethods.GetTimeZoneInformation(out timeZoneInformation);
- if (result == Win32Native.TIME_ZONE_ID_INVALID)
- match = CreateCustomTimeZone(c_localId, TimeSpan.Zero, c_localId, c_localId);
- else
- match = GetLocalTimeZoneFromWin32Data(timeZoneInformation, false);
- return match;
- }
-
- private volatile OffsetAndRule m_oneYearLocalFromUtc;
-
- public OffsetAndRule GetOneYearLocalFromUtc(int year) {
- OffsetAndRule oneYearLocFromUtc = m_oneYearLocalFromUtc;
- if (oneYearLocFromUtc == null || oneYearLocFromUtc.year != year) {
- TimeZoneInfo currentYear = GetCurrentOneYearLocal();
- AdjustmentRule rule = currentYear.m_adjustmentRules == null ? null : currentYear.m_adjustmentRules[0];
- oneYearLocFromUtc = new OffsetAndRule(year, currentYear.BaseUtcOffset, rule);
- m_oneYearLocalFromUtc = oneYearLocFromUtc;
- }
- return oneYearLocFromUtc;
+ return
+ ReferenceEquals(timeZone, s_utcTimeZone) ? DateTimeKind.Utc :
+ ReferenceEquals(timeZone, _localTimeZone) ? DateTimeKind.Local :
+ DateTimeKind.Unspecified;
}
-#endif // FEATURE_WIN32_REGISTRY
+ public Dictionary<string, TimeZoneInfo> _systemTimeZones;
+ public ReadOnlyCollection<TimeZoneInfo> _readOnlySystemTimeZones;
+ public bool _allSystemTimeZonesRead;
};
#pragma warning restore 0420
- static CachedData s_cachedData = new CachedData();
-
- private class OffsetAndRule {
- public int year;
- public TimeSpan offset;
- public AdjustmentRule rule;
- public OffsetAndRule(int year, TimeSpan offset, AdjustmentRule rule) {
- this.year = year;
- this.offset = offset;
- this.rule = rule;
- }
- }
-
// used by GetUtcOffsetFromUtc (DateTime.Now, DateTime.ToLocalTime) for max/min whole-day range checks
- private static DateTime s_maxDateOnly = new DateTime(9999, 12, 31);
- private static DateTime s_minDateOnly = new DateTime(1, 1, 2);
-
- // ---- SECTION: public properties --------------*
-
- public String Id {
- get {
- return m_id;
- }
- }
-
- public String DisplayName {
- get {
- return (m_displayName == null ? String.Empty : m_displayName);
- }
- }
+ private static readonly DateTime s_maxDateOnly = new DateTime(9999, 12, 31);
+ private static readonly DateTime s_minDateOnly = new DateTime(1, 1, 2);
- public String StandardName {
- get {
- return (m_standardDisplayName == null ? String.Empty : m_standardDisplayName);
- }
- }
+ public string Id => _id;
- public String DaylightName {
- get {
- return (m_daylightDisplayName == null? String.Empty : m_daylightDisplayName);
- }
- }
-
- public TimeSpan BaseUtcOffset {
- get {
- return m_baseUtcOffset;
- }
- }
+ public string DisplayName => _displayName ?? string.Empty;
- public Boolean SupportsDaylightSavingTime {
- get {
- return m_supportsDaylightSavingTime;
- }
- }
+ public string StandardName => _standardDisplayName ?? string.Empty;
-#if PLATFORM_UNIX
- // The rules we use in Unix cares mostly about the start and end dates but doesn’t fill the transition start and end info.
- // as the rules now is public, we should fill it properly so the caller doesn’t have to know how we use it internally
- // and can use it as it is used in Windows
+ public string DaylightName => _daylightDisplayName ?? string.Empty;
- private AdjustmentRule[] GetFilledRules()
- {
- Debug.Assert(m_adjustmentRules != null, "m_adjustmentRules expected to be not null");
- AdjustmentRule[] rules = new AdjustmentRule[m_adjustmentRules.Length];
+ public TimeSpan BaseUtcOffset => _baseUtcOffset;
- for (int i = 0; i < m_adjustmentRules.Length; i++)
- {
- var rule = m_adjustmentRules[i];
- var start = rule.DateStart.Kind == DateTimeKind.Utc ?
- new DateTime(TimeZoneInfo.ConvertTime(rule.DateStart, this).Ticks, DateTimeKind.Unspecified) :
- rule.DateStart;
- var end = rule.DateEnd.Kind == DateTimeKind.Utc ?
- new DateTime(TimeZoneInfo.ConvertTime(rule.DateEnd, this).Ticks - 1, DateTimeKind.Unspecified) :
- rule.DateEnd;
-
- var startTransition = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, start.Hour, start.Minute, start.Second), start.Month, start.Day);
- var endTransition = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, end.Hour, end.Minute, end.Second), end.Month, end.Day);
-
- rules[i] = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(start.Date, end.Date, rule.DaylightDelta, startTransition, endTransition);
- }
+ public bool SupportsDaylightSavingTime => _supportsDaylightSavingTime;
- return rules;
- }
-#endif // PLATFORM_UNIX
-
- // ---- SECTION: public methods --------------*
- //
- // GetAdjustmentRules -
- //
- // returns a cloned array of AdjustmentRule objects
- //
- public AdjustmentRule [] GetAdjustmentRules()
+ /// <summary>
+ /// Returns an array of TimeSpan objects representing all of
+ /// possible UTC offset values for this ambiguous time.
+ /// </summary>
+ public TimeSpan[] GetAmbiguousTimeOffsets(DateTimeOffset dateTimeOffset)
{
- if (m_adjustmentRules == null)
- {
- return Array.Empty<AdjustmentRule>();
- }
- else
+ if (!SupportsDaylightSavingTime)
{
-#if PLATFORM_UNIX
- return GetFilledRules();
-#else
- return (AdjustmentRule[]) m_adjustmentRules.Clone();
-#endif // PLATFORM_UNIX
- }
- }
-
- //
- // GetAmbiguousTimeOffsets -
- //
- // returns an array of TimeSpan objects representing all of
- // possible UTC offset values for this ambiguous time
- //
- public TimeSpan[] GetAmbiguousTimeOffsets(DateTimeOffset dateTimeOffset) {
- if (!SupportsDaylightSavingTime) {
throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeOffsetIsNotAmbiguous"), nameof(dateTimeOffset));
}
Contract.EndContractBlock();
- DateTime adjustedTime = (TimeZoneInfo.ConvertTime(dateTimeOffset, this)).DateTime;
+ DateTime adjustedTime = ConvertTime(dateTimeOffset, this).DateTime;
- Boolean isAmbiguous = false;
+ bool isAmbiguous = false;
AdjustmentRule rule = GetAdjustmentRuleForAmbiguousOffsets(adjustedTime);
- if (rule != null && rule.HasDaylightSaving) {
+ if (rule != null && rule.HasDaylightSaving)
+ {
DaylightTimeStruct daylightTime = GetDaylightTime(adjustedTime.Year, rule);
isAmbiguous = GetIsAmbiguousTime(adjustedTime, rule, daylightTime);
}
- if (!isAmbiguous) {
+ if (!isAmbiguous)
+ {
throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeOffsetIsNotAmbiguous"), nameof(dateTimeOffset));
}
// the passed in dateTime is ambiguous in this TimeZoneInfo instance
TimeSpan[] timeSpans = new TimeSpan[2];
- TimeSpan actualUtcOffset = m_baseUtcOffset + rule.BaseUtcOffsetDelta;
+ TimeSpan actualUtcOffset = _baseUtcOffset + rule.BaseUtcOffsetDelta;
// the TimeSpan array must be sorted from least to greatest
- if (rule.DaylightDelta > TimeSpan.Zero) {
+ if (rule.DaylightDelta > TimeSpan.Zero)
+ {
timeSpans[0] = actualUtcOffset; // FUTURE: + rule.StandardDelta;
timeSpans[1] = actualUtcOffset + rule.DaylightDelta;
- }
- else {
+ }
+ else
+ {
timeSpans[0] = actualUtcOffset + rule.DaylightDelta;
timeSpans[1] = actualUtcOffset; // FUTURE: + rule.StandardDelta;
}
return timeSpans;
}
-
- public TimeSpan[] GetAmbiguousTimeOffsets(DateTime dateTime) {
- if (!SupportsDaylightSavingTime) {
+ /// <summary>
+ /// Returns an array of TimeSpan objects representing all of
+ /// possible UTC offset values for this ambiguous time.
+ /// </summary>
+ public TimeSpan[] GetAmbiguousTimeOffsets(DateTime dateTime)
+ {
+ if (!SupportsDaylightSavingTime)
+ {
throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeIsNotAmbiguous"), nameof(dateTime));
}
Contract.EndContractBlock();
DateTime adjustedTime;
- if (dateTime.Kind == DateTimeKind.Local) {
+ if (dateTime.Kind == DateTimeKind.Local)
+ {
CachedData cachedData = s_cachedData;
- adjustedTime = TimeZoneInfo.ConvertTime(dateTime, cachedData.Local, this, TimeZoneInfoOptions.None, cachedData);
+ adjustedTime = ConvertTime(dateTime, cachedData.Local, this, TimeZoneInfoOptions.None, cachedData);
}
- else if (dateTime.Kind == DateTimeKind.Utc) {
+ else if (dateTime.Kind == DateTimeKind.Utc)
+ {
CachedData cachedData = s_cachedData;
- adjustedTime = TimeZoneInfo.ConvertTime(dateTime, s_utcTimeZone, this, TimeZoneInfoOptions.None, cachedData);
+ adjustedTime = ConvertTime(dateTime, s_utcTimeZone, this, TimeZoneInfoOptions.None, cachedData);
}
- else {
+ else
+ {
adjustedTime = dateTime;
}
- Boolean isAmbiguous = false;
+ bool isAmbiguous = false;
AdjustmentRule rule = GetAdjustmentRuleForAmbiguousOffsets(adjustedTime);
- if (rule != null && rule.HasDaylightSaving) {
+ if (rule != null && rule.HasDaylightSaving)
+ {
DaylightTimeStruct daylightTime = GetDaylightTime(adjustedTime.Year, rule);
isAmbiguous = GetIsAmbiguousTime(adjustedTime, rule, daylightTime);
}
- if (!isAmbiguous) {
+ if (!isAmbiguous)
+ {
throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeIsNotAmbiguous"), nameof(dateTime));
}
// the passed in dateTime is ambiguous in this TimeZoneInfo instance
TimeSpan[] timeSpans = new TimeSpan[2];
- TimeSpan actualUtcOffset = m_baseUtcOffset + rule.BaseUtcOffsetDelta;
-
+ TimeSpan actualUtcOffset = _baseUtcOffset + rule.BaseUtcOffsetDelta;
+
// the TimeSpan array must be sorted from least to greatest
- if (rule.DaylightDelta > TimeSpan.Zero) {
+ if (rule.DaylightDelta > TimeSpan.Zero)
+ {
timeSpans[0] = actualUtcOffset; // FUTURE: + rule.StandardDelta;
timeSpans[1] = actualUtcOffset + rule.DaylightDelta;
- }
- else {
+ }
+ else
+ {
timeSpans[0] = actualUtcOffset + rule.DaylightDelta;
timeSpans[1] = actualUtcOffset; // FUTURE: + rule.StandardDelta;
}
@@ -448,55 +278,58 @@ namespace System {
/// <summary>
/// Gets the AdjustmentRule that is immediately preceeding the specified rule.
- /// If the specified rule is the first AdjustmentRule, or it isn't in m_adjustmentRules,
+ /// If the specified rule is the first AdjustmentRule, or it isn't in _adjustmentRules,
/// then the specified rule is returned.
/// </summary>
private AdjustmentRule GetPreviousAdjustmentRule(AdjustmentRule rule)
{
AdjustmentRule result = rule;
- for (int i = 1; i < m_adjustmentRules.Length; i++)
+ for (int i = 1; i < _adjustmentRules.Length; i++)
{
- if (rule.Equals(m_adjustmentRules[i]))
+ if (rule.Equals(_adjustmentRules[i]))
{
- result = m_adjustmentRules[i - 1];
+ result = _adjustmentRules[i - 1];
break;
}
}
return result;
}
- //
- // GetUtcOffset -
- //
- // returns the Universal Coordinated Time (UTC) Offset
- // for the current TimeZoneInfo instance.
- //
- public TimeSpan GetUtcOffset(DateTimeOffset dateTimeOffset) {
- return GetUtcOffsetFromUtc(dateTimeOffset.UtcDateTime, this);
- }
-
+ /// <summary>
+ /// Returns the Universal Coordinated Time (UTC) Offset for the current TimeZoneInfo instance.
+ /// </summary>
+ public TimeSpan GetUtcOffset(DateTimeOffset dateTimeOffset) =>
+ GetUtcOffsetFromUtc(dateTimeOffset.UtcDateTime, this);
- public TimeSpan GetUtcOffset(DateTime dateTime) {
- return GetUtcOffset(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime, s_cachedData);
- }
+ /// <summary>
+ /// Returns the Universal Coordinated Time (UTC) Offset for the current TimeZoneInfo instance.
+ /// </summary>
+ public TimeSpan GetUtcOffset(DateTime dateTime) =>
+ GetUtcOffset(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime, s_cachedData);
// Shortcut for TimeZoneInfo.Local.GetUtcOffset
- internal static TimeSpan GetLocalUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags) {
+ internal static TimeSpan GetLocalUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags)
+ {
CachedData cachedData = s_cachedData;
return cachedData.Local.GetUtcOffset(dateTime, flags, cachedData);
}
- internal TimeSpan GetUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags) {
- return GetUtcOffset(dateTime, flags, s_cachedData);
- }
+ /// <summary>
+ /// Returns the Universal Coordinated Time (UTC) Offset for the current TimeZoneInfo instance.
+ /// </summary>
+ internal TimeSpan GetUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags) =>
+ GetUtcOffset(dateTime, flags, s_cachedData);
- private TimeSpan GetUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags, CachedData cachedData) {
- if (dateTime.Kind == DateTimeKind.Local) {
- if (cachedData.GetCorrespondingKind(this) != DateTimeKind.Local) {
+ private TimeSpan GetUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags, CachedData cachedData)
+ {
+ if (dateTime.Kind == DateTimeKind.Local)
+ {
+ if (cachedData.GetCorrespondingKind(this) != DateTimeKind.Local)
+ {
//
// normal case of converting from Local to Utc and then getting the offset from the UTC DateTime
//
- DateTime adjustedTime = TimeZoneInfo.ConvertTime(dateTime, cachedData.Local, s_utcTimeZone, flags);
+ DateTime adjustedTime = ConvertTime(dateTime, cachedData.Local, s_utcTimeZone, flags);
return GetUtcOffsetFromUtc(adjustedTime, this);
}
@@ -507,7 +340,7 @@ namespace System {
// Consider the invalid PST time "2007-03-11T02:00:00.0000000-08:00"
//
// By directly calling GetUtcOffset instead of converting to UTC and then calling GetUtcOffsetFromUtc
- // the correct invalid offset of "-08:00" is returned. In the normal case of converting to UTC as an
+ // the correct invalid offset of "-08:00" is returned. In the normal case of converting to UTC as an
// interim-step, the invalid time is adjusted into a *valid* UTC time which causes a change in output:
//
// 1) invalid PST time "2007-03-11T02:00:00.0000000-08:00"
@@ -515,11 +348,14 @@ namespace System {
// 3) offset returned "2007-03-11T03:00:00.0000000-07:00"
//
}
- else if (dateTime.Kind == DateTimeKind.Utc) {
- if (cachedData.GetCorrespondingKind(this) == DateTimeKind.Utc) {
- return m_baseUtcOffset;
+ else if (dateTime.Kind == DateTimeKind.Utc)
+ {
+ if (cachedData.GetCorrespondingKind(this) == DateTimeKind.Utc)
+ {
+ return _baseUtcOffset;
}
- else {
+ else
+ {
//
// passing in a UTC dateTime to a non-UTC TimeZoneInfo instance is a
// special Loss-Less case.
@@ -531,90 +367,93 @@ namespace System {
return GetUtcOffset(dateTime, this, flags);
}
- //
- // IsAmbiguousTime -
- //
- // returns true if the time is during the ambiguous time period
- // for the current TimeZoneInfo instance.
- //
- public Boolean IsAmbiguousTime(DateTimeOffset dateTimeOffset) {
- if (!m_supportsDaylightSavingTime) {
+ /// <summary>
+ /// Returns true if the time is during the ambiguous time period
+ /// for the current TimeZoneInfo instance.
+ /// </summary>
+ public bool IsAmbiguousTime(DateTimeOffset dateTimeOffset)
+ {
+ if (!_supportsDaylightSavingTime)
+ {
return false;
}
- DateTimeOffset adjustedTime = TimeZoneInfo.ConvertTime(dateTimeOffset, this);
+ DateTimeOffset adjustedTime = ConvertTime(dateTimeOffset, this);
return IsAmbiguousTime(adjustedTime.DateTime);
}
+ /// <summary>
+ /// Returns true if the time is during the ambiguous time period
+ /// for the current TimeZoneInfo instance.
+ /// </summary>
+ public bool IsAmbiguousTime(DateTime dateTime) =>
+ IsAmbiguousTime(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime);
- public Boolean IsAmbiguousTime(DateTime dateTime) {
- return IsAmbiguousTime(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime);
- }
-
- internal Boolean IsAmbiguousTime(DateTime dateTime, TimeZoneInfoOptions flags) {
- if (!m_supportsDaylightSavingTime) {
+ /// <summary>
+ /// Returns true if the time is during the ambiguous time period
+ /// for the current TimeZoneInfo instance.
+ /// </summary>
+ internal bool IsAmbiguousTime(DateTime dateTime, TimeZoneInfoOptions flags)
+ {
+ if (!_supportsDaylightSavingTime)
+ {
return false;
}
- DateTime adjustedTime;
- if (dateTime.Kind == DateTimeKind.Local) {
- CachedData cachedData = s_cachedData;
- adjustedTime = TimeZoneInfo.ConvertTime(dateTime, cachedData.Local, this, flags, cachedData);
- }
- else if (dateTime.Kind == DateTimeKind.Utc) {
- CachedData cachedData = s_cachedData;
- adjustedTime = TimeZoneInfo.ConvertTime(dateTime, s_utcTimeZone, this, flags, cachedData);
- }
- else {
- adjustedTime = dateTime;
- }
+ CachedData cachedData = s_cachedData;
+ DateTime adjustedTime =
+ dateTime.Kind == DateTimeKind.Local ? ConvertTime(dateTime, cachedData.Local, this, flags, cachedData) :
+ dateTime.Kind == DateTimeKind.Utc ? ConvertTime(dateTime, s_utcTimeZone, this, flags, cachedData) :
+ dateTime;
AdjustmentRule rule = GetAdjustmentRuleForTime(adjustedTime);
- if (rule != null && rule.HasDaylightSaving) {
+ if (rule != null && rule.HasDaylightSaving)
+ {
DaylightTimeStruct daylightTime = GetDaylightTime(adjustedTime.Year, rule);
return GetIsAmbiguousTime(adjustedTime, rule, daylightTime);
}
return false;
}
-
-
- //
- // IsDaylightSavingTime -
- //
- // Returns true if the time is during Daylight Saving time
- // for the current TimeZoneInfo instance.
- //
- public Boolean IsDaylightSavingTime(DateTimeOffset dateTimeOffset) {
- Boolean isDaylightSavingTime;
+ /// <summary>
+ /// Returns true if the time is during Daylight Saving time for the current TimeZoneInfo instance.
+ /// </summary>
+ public bool IsDaylightSavingTime(DateTimeOffset dateTimeOffset)
+ {
+ bool isDaylightSavingTime;
GetUtcOffsetFromUtc(dateTimeOffset.UtcDateTime, this, out isDaylightSavingTime);
return isDaylightSavingTime;
}
+ /// <summary>
+ /// Returns true if the time is during Daylight Saving time for the current TimeZoneInfo instance.
+ /// </summary>
+ public bool IsDaylightSavingTime(DateTime dateTime) =>
+ IsDaylightSavingTime(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime, s_cachedData);
- public Boolean IsDaylightSavingTime(DateTime dateTime) {
- return IsDaylightSavingTime(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime, s_cachedData);
- }
-
- internal Boolean IsDaylightSavingTime(DateTime dateTime, TimeZoneInfoOptions flags) {
- return IsDaylightSavingTime(dateTime, flags, s_cachedData);
- }
+ /// <summary>
+ /// Returns true if the time is during Daylight Saving time for the current TimeZoneInfo instance.
+ /// </summary>
+ internal bool IsDaylightSavingTime(DateTime dateTime, TimeZoneInfoOptions flags) =>
+ IsDaylightSavingTime(dateTime, flags, s_cachedData);
- private Boolean IsDaylightSavingTime(DateTime dateTime, TimeZoneInfoOptions flags, CachedData cachedData) {
+ private bool IsDaylightSavingTime(DateTime dateTime, TimeZoneInfoOptions flags, CachedData cachedData)
+ {
//
// dateTime.Kind is UTC, then time will be converted from UTC
// into current instance's timezone
- // dateTime.Kind is Local, then time will be converted from Local
+ // dateTime.Kind is Local, then time will be converted from Local
// into current instance's timezone
// dateTime.Kind is UnSpecified, then time is already in
// current instance's timezone
//
// Our DateTime handles ambiguous times, (one is in the daylight and
- // one is in standard.) If a new DateTime is constructed during ambiguous
+ // one is in standard.) If a new DateTime is constructed during ambiguous
// time, it is defaulted to "Standard" (i.e. this will return false).
// For Invalid times, we will return false
- if (!m_supportsDaylightSavingTime || m_adjustmentRules == null) {
+ if (!_supportsDaylightSavingTime || _adjustmentRules == null)
+ {
return false;
}
@@ -622,25 +461,30 @@ namespace System {
//
// handle any Local/Utc special cases...
//
- if (dateTime.Kind == DateTimeKind.Local) {
- adjustedTime = TimeZoneInfo.ConvertTime(dateTime, cachedData.Local, this, flags, cachedData);
- }
- else if (dateTime.Kind == DateTimeKind.Utc) {
- if (cachedData.GetCorrespondingKind(this) == DateTimeKind.Utc) {
+ if (dateTime.Kind == DateTimeKind.Local)
+ {
+ adjustedTime = ConvertTime(dateTime, cachedData.Local, this, flags, cachedData);
+ }
+ else if (dateTime.Kind == DateTimeKind.Utc)
+ {
+ if (cachedData.GetCorrespondingKind(this) == DateTimeKind.Utc)
+ {
// simple always false case: TimeZoneInfo.Utc.IsDaylightSavingTime(dateTime, flags);
return false;
}
- else {
+ else
+ {
//
// passing in a UTC dateTime to a non-UTC TimeZoneInfo instance is a
// special Loss-Less case.
//
- Boolean isDaylightSavings;
+ bool isDaylightSavings;
GetUtcOffsetFromUtc(dateTime, this, out isDaylightSavings);
return isDaylightSavings;
}
}
- else {
+ else
+ {
adjustedTime = dateTime;
}
@@ -648,35 +492,38 @@ namespace System {
// handle the normal cases...
//
AdjustmentRule rule = GetAdjustmentRuleForTime(adjustedTime);
- if (rule != null && rule.HasDaylightSaving) {
+ if (rule != null && rule.HasDaylightSaving)
+ {
DaylightTimeStruct daylightTime = GetDaylightTime(adjustedTime.Year, rule);
return GetIsDaylightSavings(adjustedTime, rule, daylightTime, flags);
}
- else {
+ else
+ {
return false;
}
}
+ /// <summary>
+ /// Returns true when dateTime falls into a "hole in time".
+ /// </summary>
+ public bool IsInvalidTime(DateTime dateTime)
+ {
+ bool isInvalid = false;
- //
- // IsInvalidTime -
- //
- // returns true when dateTime falls into a "hole in time".
- //
- public Boolean IsInvalidTime(DateTime dateTime) {
- Boolean isInvalid = false;
-
- if ( (dateTime.Kind == DateTimeKind.Unspecified)
- || (dateTime.Kind == DateTimeKind.Local && s_cachedData.GetCorrespondingKind(this) == DateTimeKind.Local) ) {
+ if ((dateTime.Kind == DateTimeKind.Unspecified) ||
+ (dateTime.Kind == DateTimeKind.Local && s_cachedData.GetCorrespondingKind(this) == DateTimeKind.Local))
+ {
// only check Unspecified and (Local when this TimeZoneInfo instance is Local)
AdjustmentRule rule = GetAdjustmentRuleForTime(dateTime);
- if (rule != null && rule.HasDaylightSaving) {
+ if (rule != null && rule.HasDaylightSaving)
+ {
DaylightTimeStruct daylightTime = GetDaylightTime(dateTime.Year, rule);
isInvalid = GetIsInvalidTime(dateTime, rule, daylightTime);
}
- else {
+ else
+ {
isInvalid = false;
}
}
@@ -684,35 +531,33 @@ namespace System {
return isInvalid;
}
-
- //
- // ClearCachedData -
- //
- // Clears data from static members
- //
- static public void ClearCachedData() {
+ /// <summary>
+ /// Clears data from static members.
+ /// </summary>
+ public static void ClearCachedData()
+ {
// Clear a fresh instance of cached data
s_cachedData = new CachedData();
}
- //
- // ConvertTimeBySystemTimeZoneId -
- //
- // Converts the value of a DateTime object from sourceTimeZone to destinationTimeZone
- //
- static public DateTimeOffset ConvertTimeBySystemTimeZoneId(DateTimeOffset dateTimeOffset, String destinationTimeZoneId)
- {
- return ConvertTime(dateTimeOffset, FindSystemTimeZoneById(destinationTimeZoneId));
- }
+ /// <summary>
+ /// Converts the value of a DateTime object from sourceTimeZone to destinationTimeZone.
+ /// </summary>
+ public static DateTimeOffset ConvertTimeBySystemTimeZoneId(DateTimeOffset dateTimeOffset, string destinationTimeZoneId) =>
+ ConvertTime(dateTimeOffset, FindSystemTimeZoneById(destinationTimeZoneId));
- static public DateTime ConvertTimeBySystemTimeZoneId(DateTime dateTime, String destinationTimeZoneId)
- {
- return ConvertTime(dateTime, FindSystemTimeZoneById(destinationTimeZoneId));
- }
+ /// <summary>
+ /// Converts the value of a DateTime object from sourceTimeZone to destinationTimeZone.
+ /// </summary>
+ public static DateTime ConvertTimeBySystemTimeZoneId(DateTime dateTime, string destinationTimeZoneId) =>
+ ConvertTime(dateTime, FindSystemTimeZoneById(destinationTimeZoneId));
- static public DateTime ConvertTimeBySystemTimeZoneId(DateTime dateTime, String sourceTimeZoneId, String destinationTimeZoneId)
+ /// <summary>
+ /// Converts the value of a DateTime object from sourceTimeZone to destinationTimeZone.
+ /// </summary>
+ public static DateTime ConvertTimeBySystemTimeZoneId(DateTime dateTime, string sourceTimeZoneId, string destinationTimeZoneId)
{
- if (dateTime.Kind == DateTimeKind.Local && String.Compare(sourceTimeZoneId, TimeZoneInfo.Local.Id, StringComparison.OrdinalIgnoreCase) == 0)
+ if (dateTime.Kind == DateTimeKind.Local && string.Equals(sourceTimeZoneId, Local.Id, StringComparison.OrdinalIgnoreCase))
{
// TimeZoneInfo.Local can be cleared by another thread calling TimeZoneInfo.ClearCachedData.
// Take snapshot of cached data to guarantee this method will not be impacted by the ClearCachedData call.
@@ -721,16 +566,10 @@ namespace System {
//
CachedData cachedData = s_cachedData;
return ConvertTime(dateTime, cachedData.Local, FindSystemTimeZoneById(destinationTimeZoneId), TimeZoneInfoOptions.None, cachedData);
- }
- else if (dateTime.Kind == DateTimeKind.Utc && String.Compare(sourceTimeZoneId, TimeZoneInfo.Utc.Id, StringComparison.OrdinalIgnoreCase) == 0)
+ }
+ else if (dateTime.Kind == DateTimeKind.Utc && string.Equals(sourceTimeZoneId, Utc.Id, StringComparison.OrdinalIgnoreCase))
{
- // TimeZoneInfo.Utc can be cleared by another thread calling TimeZoneInfo.ClearCachedData.
- // Take snapshot of cached data to guarantee this method will not be impacted by the ClearCachedData call.
- // Without the snapshot, there is a chance that ConvertTime will throw since 'source' won't
- // be reference equal to the new TimeZoneInfo.Utc
- //
- CachedData cachedData = s_cachedData;
- return ConvertTime(dateTime, s_utcTimeZone, FindSystemTimeZoneById(destinationTimeZoneId), TimeZoneInfoOptions.None, cachedData);
+ return ConvertTime(dateTime, s_utcTimeZone, FindSystemTimeZoneById(destinationTimeZoneId), TimeZoneInfoOptions.None, s_cachedData);
}
else
{
@@ -738,77 +577,80 @@ namespace System {
}
}
- //
- // ConvertTime -
- //
- // Converts the value of the dateTime object from sourceTimeZone to destinationTimeZone
- //
-
- static public DateTimeOffset ConvertTime(DateTimeOffset dateTimeOffset, TimeZoneInfo destinationTimeZone) {
- if (destinationTimeZone == null) {
+ /// <summary>
+ /// Converts the value of the dateTime object from sourceTimeZone to destinationTimeZone
+ /// </summary>
+ public static DateTimeOffset ConvertTime(DateTimeOffset dateTimeOffset, TimeZoneInfo destinationTimeZone)
+ {
+ if (destinationTimeZone == null)
+ {
throw new ArgumentNullException(nameof(destinationTimeZone));
}
-
Contract.EndContractBlock();
+
// calculate the destination time zone offset
DateTime utcDateTime = dateTimeOffset.UtcDateTime;
TimeSpan destinationOffset = GetUtcOffsetFromUtc(utcDateTime, destinationTimeZone);
// check for overflow
- Int64 ticks = utcDateTime.Ticks + destinationOffset.Ticks;
+ long ticks = utcDateTime.Ticks + destinationOffset.Ticks;
- if (ticks > DateTimeOffset.MaxValue.Ticks) {
- return DateTimeOffset.MaxValue;
- }
- else if (ticks < DateTimeOffset.MinValue.Ticks) {
- return DateTimeOffset.MinValue;
- }
- else {
- return new DateTimeOffset(ticks, destinationOffset);
- }
+ return
+ ticks > DateTimeOffset.MaxValue.Ticks ? DateTimeOffset.MaxValue :
+ ticks < DateTimeOffset.MinValue.Ticks ? DateTimeOffset.MinValue :
+ new DateTimeOffset(ticks, destinationOffset);
}
- static public DateTime ConvertTime(DateTime dateTime, TimeZoneInfo destinationTimeZone) {
- if (destinationTimeZone == null) {
+ /// <summary>
+ /// Converts the value of the dateTime object from sourceTimeZone to destinationTimeZone
+ /// </summary>
+ public static DateTime ConvertTime(DateTime dateTime, TimeZoneInfo destinationTimeZone)
+ {
+ if (destinationTimeZone == null)
+ {
throw new ArgumentNullException(nameof(destinationTimeZone));
}
Contract.EndContractBlock();
// Special case to give a way clearing the cache without exposing ClearCachedData()
- if (dateTime.Ticks == 0) {
+ if (dateTime.Ticks == 0)
+ {
ClearCachedData();
}
CachedData cachedData = s_cachedData;
- if (dateTime.Kind == DateTimeKind.Utc) {
- return ConvertTime(dateTime, s_utcTimeZone, destinationTimeZone, TimeZoneInfoOptions.None, cachedData);
- }
- else {
- return ConvertTime(dateTime, cachedData.Local, destinationTimeZone, TimeZoneInfoOptions.None, cachedData);
- }
- }
-
- static public DateTime ConvertTime(DateTime dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfo destinationTimeZone) {
- return ConvertTime(dateTime, sourceTimeZone, destinationTimeZone, TimeZoneInfoOptions.None, s_cachedData);
+ TimeZoneInfo sourceTimeZone = dateTime.Kind == DateTimeKind.Utc ? s_utcTimeZone : cachedData.Local;
+ return ConvertTime(dateTime, sourceTimeZone, destinationTimeZone, TimeZoneInfoOptions.None, cachedData);
}
+ /// <summary>
+ /// Converts the value of the dateTime object from sourceTimeZone to destinationTimeZone
+ /// </summary>
+ public static DateTime ConvertTime(DateTime dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfo destinationTimeZone) =>
+ ConvertTime(dateTime, sourceTimeZone, destinationTimeZone, TimeZoneInfoOptions.None, s_cachedData);
- static internal DateTime ConvertTime(DateTime dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfo destinationTimeZone, TimeZoneInfoOptions flags) {
- return ConvertTime(dateTime, sourceTimeZone, destinationTimeZone, flags, s_cachedData);
- }
+ /// <summary>
+ /// Converts the value of the dateTime object from sourceTimeZone to destinationTimeZone
+ /// </summary>
+ internal static DateTime ConvertTime(DateTime dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfo destinationTimeZone, TimeZoneInfoOptions flags) =>
+ ConvertTime(dateTime, sourceTimeZone, destinationTimeZone, flags, s_cachedData);
- static private DateTime ConvertTime(DateTime dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfo destinationTimeZone, TimeZoneInfoOptions flags, CachedData cachedData) {
- if (sourceTimeZone == null) {
+ private static DateTime ConvertTime(DateTime dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfo destinationTimeZone, TimeZoneInfoOptions flags, CachedData cachedData)
+ {
+ if (sourceTimeZone == null)
+ {
throw new ArgumentNullException(nameof(sourceTimeZone));
}
- if (destinationTimeZone == null) {
+ if (destinationTimeZone == null)
+ {
throw new ArgumentNullException(nameof(destinationTimeZone));
}
Contract.EndContractBlock();
DateTimeKind sourceKind = cachedData.GetCorrespondingKind(sourceTimeZone);
- if ( ((flags & TimeZoneInfoOptions.NoThrowOnInvalidTime) == 0) && (dateTime.Kind != DateTimeKind.Unspecified) && (dateTime.Kind != sourceKind) ) {
- throw new ArgumentException(Environment.GetResourceString("Argument_ConvertMismatch"), nameof(sourceTimeZone));
+ if (((flags & TimeZoneInfoOptions.NoThrowOnInvalidTime) == 0) && (dateTime.Kind != DateTimeKind.Unspecified) && (dateTime.Kind != sourceKind))
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_ConvertMismatch"), nameof(sourceTimeZone));
}
//
@@ -822,15 +664,18 @@ namespace System {
AdjustmentRule sourceRule = sourceTimeZone.GetAdjustmentRuleForTime(dateTime);
TimeSpan sourceOffset = sourceTimeZone.BaseUtcOffset;
- if (sourceRule != null) {
+ if (sourceRule != null)
+ {
sourceOffset = sourceOffset + sourceRule.BaseUtcOffsetDelta;
- if (sourceRule.HasDaylightSaving) {
- Boolean sourceIsDaylightSavings = false;
+ if (sourceRule.HasDaylightSaving)
+ {
+ bool sourceIsDaylightSavings = false;
DaylightTimeStruct sourceDaylightTime = sourceTimeZone.GetDaylightTime(dateTime.Year, sourceRule);
// 'dateTime' might be in an invalid time range since it is in an AdjustmentRule
- // period that supports DST
- if (((flags & TimeZoneInfoOptions.NoThrowOnInvalidTime) == 0) && GetIsInvalidTime(dateTime, sourceRule, sourceDaylightTime)) {
+ // period that supports DST
+ if (((flags & TimeZoneInfoOptions.NoThrowOnInvalidTime) == 0) && GetIsInvalidTime(dateTime, sourceRule, sourceDaylightTime))
+ {
throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeIsInvalid"), nameof(dateTime));
}
sourceIsDaylightSavings = GetIsDaylightSavings(dateTime, sourceRule, sourceDaylightTime, flags);
@@ -843,91 +688,86 @@ namespace System {
DateTimeKind targetKind = cachedData.GetCorrespondingKind(destinationTimeZone);
// handle the special case of Loss-less Local->Local and UTC->UTC)
- if (dateTime.Kind != DateTimeKind.Unspecified && sourceKind != DateTimeKind.Unspecified
- && sourceKind == targetKind) {
+ if (dateTime.Kind != DateTimeKind.Unspecified && sourceKind != DateTimeKind.Unspecified && sourceKind == targetKind)
+ {
return dateTime;
}
- Int64 utcTicks = dateTime.Ticks - sourceOffset.Ticks;
+ long utcTicks = dateTime.Ticks - sourceOffset.Ticks;
// handle the normal case by converting from 'source' to UTC and then to 'target'
- Boolean isAmbiguousLocalDst = false;
+ bool isAmbiguousLocalDst;
DateTime targetConverted = ConvertUtcToTimeZone(utcTicks, destinationTimeZone, out isAmbiguousLocalDst);
-
- if (targetKind == DateTimeKind.Local) {
- // Because the ticks conversion between UTC and local is lossy, we need to capture whether the
+
+ if (targetKind == DateTimeKind.Local)
+ {
+ // Because the ticks conversion between UTC and local is lossy, we need to capture whether the
// time is in a repeated hour so that it can be passed to the DateTime constructor.
- return new DateTime(targetConverted.Ticks, DateTimeKind.Local, isAmbiguousLocalDst);
+ return new DateTime(targetConverted.Ticks, DateTimeKind.Local, isAmbiguousLocalDst);
}
- else {
+ else
+ {
return new DateTime(targetConverted.Ticks, targetKind);
}
}
+ /// <summary>
+ /// Converts the value of a DateTime object from Coordinated Universal Time (UTC) to the destinationTimeZone.
+ /// </summary>
+ public static DateTime ConvertTimeFromUtc(DateTime dateTime, TimeZoneInfo destinationTimeZone) =>
+ ConvertTime(dateTime, s_utcTimeZone, destinationTimeZone, TimeZoneInfoOptions.None, s_cachedData);
-
- //
- // ConvertTimeFromUtc -
- //
- // Converts the value of a DateTime object from Coordinated Universal Time (UTC) to
- // the destinationTimeZone.
- //
- static public DateTime ConvertTimeFromUtc(DateTime dateTime, TimeZoneInfo destinationTimeZone) {
- CachedData cachedData = s_cachedData;
- return ConvertTime(dateTime, s_utcTimeZone, destinationTimeZone, TimeZoneInfoOptions.None, cachedData);
- }
-
-
- //
- // ConvertTimeToUtc -
- //
- // Converts the value of a DateTime object to Coordinated Universal Time (UTC).
- //
- static public DateTime ConvertTimeToUtc(DateTime dateTime) {
- if (dateTime.Kind == DateTimeKind.Utc) {
+ /// <summary>
+ /// Converts the value of a DateTime object to Coordinated Universal Time (UTC).
+ /// </summary>
+ public static DateTime ConvertTimeToUtc(DateTime dateTime)
+ {
+ if (dateTime.Kind == DateTimeKind.Utc)
+ {
return dateTime;
}
CachedData cachedData = s_cachedData;
return ConvertTime(dateTime, cachedData.Local, s_utcTimeZone, TimeZoneInfoOptions.None, cachedData);
}
-
- static internal DateTime ConvertTimeToUtc(DateTime dateTime, TimeZoneInfoOptions flags) {
- if (dateTime.Kind == DateTimeKind.Utc) {
+ /// <summary>
+ /// Converts the value of a DateTime object to Coordinated Universal Time (UTC).
+ /// </summary>
+ internal static DateTime ConvertTimeToUtc(DateTime dateTime, TimeZoneInfoOptions flags)
+ {
+ if (dateTime.Kind == DateTimeKind.Utc)
+ {
return dateTime;
}
CachedData cachedData = s_cachedData;
return ConvertTime(dateTime, cachedData.Local, s_utcTimeZone, flags, cachedData);
}
- static public DateTime ConvertTimeToUtc(DateTime dateTime, TimeZoneInfo sourceTimeZone) {
- CachedData cachedData = s_cachedData;
- return ConvertTime(dateTime, sourceTimeZone, s_utcTimeZone, TimeZoneInfoOptions.None, cachedData);
- }
-
+ /// <summary>
+ /// Converts the value of a DateTime object to Coordinated Universal Time (UTC).
+ /// </summary>
+ public static DateTime ConvertTimeToUtc(DateTime dateTime, TimeZoneInfo sourceTimeZone) =>
+ ConvertTime(dateTime, sourceTimeZone, s_utcTimeZone, TimeZoneInfoOptions.None, s_cachedData);
- //
- // IEquatable.Equals -
- //
- // returns value equality. Equals does not compare any localizable
- // String objects (DisplayName, StandardName, DaylightName).
- //
- public bool Equals(TimeZoneInfo other) {
- return (other != null && String.Compare(this.m_id, other.m_id, StringComparison.OrdinalIgnoreCase) == 0 && HasSameRules(other));
- }
+ /// <summary>
+ /// Returns value equality. Equals does not compare any localizable
+ /// String objects (DisplayName, StandardName, DaylightName).
+ /// </summary>
+ public bool Equals(TimeZoneInfo other) =>
+ other != null &&
+ string.Equals(_id, other._id, StringComparison.OrdinalIgnoreCase) &&
+ HasSameRules(other);
- public override bool Equals(object obj) {
- return Equals(obj as TimeZoneInfo);
- }
+ public override bool Equals(object obj) => Equals(obj as TimeZoneInfo);
- //
- // FromSerializedString -
- //
- static public TimeZoneInfo FromSerializedString(string source) {
- if (source == null) {
+ public static TimeZoneInfo FromSerializedString(string source)
+ {
+ if (source == null)
+ {
throw new ArgumentNullException(nameof(source));
}
- if (source.Length == 0) {
+ if (source.Length == 0)
+ {
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidSerializedString", source), nameof(source));
}
Contract.EndContractBlock();
@@ -935,42 +775,33 @@ namespace System {
return StringSerializer.GetDeserializedTimeZoneInfo(source);
}
+ public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(_id);
- //
- // GetHashCode -
- //
- public override int GetHashCode() {
- return StringComparer.OrdinalIgnoreCase.GetHashCode(m_id);
- }
-
- //
- // GetSystemTimeZones -
- //
- // returns a ReadOnlyCollection<TimeZoneInfo> containing all valid TimeZone's
- // from the local machine. The entries in the collection are sorted by
- // 'DisplayName'.
- //
- // This method does *not* throw TimeZoneNotFoundException or
- // InvalidTimeZoneException.
- //
- // <SecurityKernel Critical="True" Ring="0">
- // <Asserts Name="Imperative: System.Security.PermissionSet" />
- // </SecurityKernel>
- static public ReadOnlyCollection<TimeZoneInfo> GetSystemTimeZones() {
-
+ /// <summary>
+ /// Returns a ReadOnlyCollection<TimeZoneInfo> containing all valid TimeZone's
+ /// from the local machine. The entries in the collection are sorted by
+ /// <see cref="DisplayName"/>.
+ /// This method does *not* throw TimeZoneNotFoundException or InvalidTimeZoneException.
+ /// </summary>
+ public static ReadOnlyCollection<TimeZoneInfo> GetSystemTimeZones()
+ {
CachedData cachedData = s_cachedData;
- lock (cachedData) {
- if (cachedData.m_readOnlySystemTimeZones == null) {
+ lock (cachedData)
+ {
+ if (cachedData._readOnlySystemTimeZones == null)
+ {
PopulateAllSystemTimeZones(cachedData);
- cachedData.m_allSystemTimeZonesRead = true;
+ cachedData._allSystemTimeZonesRead = true;
List<TimeZoneInfo> list;
- if (cachedData.m_systemTimeZones != null) {
+ if (cachedData._systemTimeZones != null)
+ {
// return a collection of the cached system time zones
- list = new List<TimeZoneInfo>(cachedData.m_systemTimeZones.Values);
+ list = new List<TimeZoneInfo>(cachedData._systemTimeZones.Values);
}
- else {
+ else
+ {
// return an empty collection
list = new List<TimeZoneInfo>();
}
@@ -983,111 +814,79 @@ namespace System {
return comparison == 0 ? string.CompareOrdinal(x.DisplayName, y.DisplayName) : comparison;
});
- cachedData.m_readOnlySystemTimeZones = new ReadOnlyCollection<TimeZoneInfo>(list);
- }
+ cachedData._readOnlySystemTimeZones = new ReadOnlyCollection<TimeZoneInfo>(list);
+ }
}
- return cachedData.m_readOnlySystemTimeZones;
+ return cachedData._readOnlySystemTimeZones;
}
- private static void PopulateAllSystemTimeZones(CachedData cachedData)
+ /// <summary>
+ /// Value equality on the "adjustmentRules" array
+ /// </summary>
+ public bool HasSameRules(TimeZoneInfo other)
{
-#if FEATURE_WIN32_REGISTRY
- PermissionSet permSet = new PermissionSet(PermissionState.None);
- permSet.AddPermission(new RegistryPermission(RegistryPermissionAccess.Read, c_timeZonesRegistryHivePermissionList));
- permSet.Assert();
-
- using (RegistryKey reg = Registry.LocalMachine.OpenSubKey(c_timeZonesRegistryHive, false))
- {
- if (reg != null)
- {
- foreach (string keyName in reg.GetSubKeyNames())
- {
- TimeZoneInfo value;
- Exception ex;
- TryGetTimeZone(keyName, false, out value, out ex, cachedData); // populate the cache
- }
- }
- }
-#elif PLATFORM_UNIX // FEATURE_WIN32_REGISTRY
- string timeZoneDirectory = GetTimeZoneDirectory();
- foreach (string timeZoneId in GetTimeZoneIds(timeZoneDirectory))
+ if (other == null)
{
- TimeZoneInfo value;
- Exception ex;
- TryGetTimeZone(timeZoneId, false, out value, out ex, cachedData); // populate the cache
- }
-#endif // FEATURE_WIN32_REGISTRY
- }
-
- //
- // HasSameRules -
- //
- // Value equality on the "adjustmentRules" array
- //
- public Boolean HasSameRules(TimeZoneInfo other) {
- if (other == null) {
throw new ArgumentNullException(nameof(other));
}
-
- // check the utcOffset and supportsDaylightSavingTime members
Contract.EndContractBlock();
- if (this.m_baseUtcOffset != other.m_baseUtcOffset
- || this.m_supportsDaylightSavingTime != other.m_supportsDaylightSavingTime) {
+ // check the utcOffset and supportsDaylightSavingTime members
+ if (_baseUtcOffset != other._baseUtcOffset ||
+ _supportsDaylightSavingTime != other._supportsDaylightSavingTime)
+ {
return false;
}
bool sameRules;
- AdjustmentRule[] currentRules = this.m_adjustmentRules;
- AdjustmentRule[] otherRules = other.m_adjustmentRules;
+ AdjustmentRule[] currentRules = _adjustmentRules;
+ AdjustmentRule[] otherRules = other._adjustmentRules;
- sameRules = (currentRules == null && otherRules == null)
- ||(currentRules != null && otherRules != null);
+ sameRules =
+ (currentRules == null && otherRules == null) ||
+ (currentRules != null && otherRules != null);
- if (!sameRules) {
+ if (!sameRules)
+ {
// AdjustmentRule array mismatch
return false;
}
- if (currentRules != null) {
- if (currentRules.Length != otherRules.Length) {
+ if (currentRules != null)
+ {
+ if (currentRules.Length != otherRules.Length)
+ {
// AdjustmentRule array length mismatch
return false;
}
- for(int i = 0; i < currentRules.Length; i++) {
- if (!(currentRules[i]).Equals(otherRules[i])) {
+ for (int i = 0; i < currentRules.Length; i++)
+ {
+ if (!(currentRules[i]).Equals(otherRules[i]))
+ {
// AdjustmentRule value-equality mismatch
return false;
}
}
}
- return sameRules;
- }
-
- //
- // Local -
- //
- // returns a TimeZoneInfo instance that represents the local time on the machine.
- // Accessing this property may throw InvalidTimeZoneException or COMException
- // if the machine is in an unstable or corrupt state.
- //
- static public TimeZoneInfo Local {
- get {
- Contract.Ensures(Contract.Result<TimeZoneInfo>() != null);
- return s_cachedData.Local;
- }
+ return sameRules;
}
+ /// <summary>
+ /// Returns a TimeZoneInfo instance that represents the local time on the machine.
+ /// Accessing this property may throw InvalidTimeZoneException or COMException
+ /// if the machine is in an unstable or corrupt state.
+ /// </summary>
+ public static TimeZoneInfo Local => s_cachedData.Local;
//
// ToSerializedString -
//
// "TimeZoneInfo" := TimeZoneInfo Data;[AdjustmentRule Data 1];...;[AdjustmentRule Data N]
//
- // "TimeZoneInfo Data" := <m_id>;<m_baseUtcOffset>;<m_displayName>;
- // <m_standardDisplayName>;<m_daylightDispayName>;
+ // "TimeZoneInfo Data" := <_id>;<_baseUtcOffset>;<_displayName>;
+ // <_standardDisplayName>;<_daylightDispayName>;
//
// "AdjustmentRule Data" := <DateStart>;<DateEnd>;<DaylightDelta>;
// [TransitionTime Data DST Start]
@@ -1095,322 +894,166 @@ namespace System {
//
// "TransitionTime Data" += <DaylightStartTimeOfDat>;<Month>;<Week>;<DayOfWeek>;<Day>
//
- public String ToSerializedString() {
- return StringSerializer.GetSerializedString(this);
- }
-
-
- //
- // ToString -
- //
- // returns the DisplayName:
- // "(GMT-08:00) Pacific Time (US & Canada); Tijuana"
- //
- public override string ToString() {
- return this.DisplayName;
- }
-
-
- //
- // Utc -
- //
- // returns a TimeZoneInfo instance that represents Universal Coordinated Time (UTC)
- //
- static public TimeZoneInfo Utc {
- get {
- Contract.Ensures(Contract.Result<TimeZoneInfo>() != null);
- return s_utcTimeZone;
- }
- }
-
-
- // -------- SECTION: constructors -----------------*
- //
- // TimeZoneInfo -
- //
- // private ctor
- //
-#if FEATURE_WIN32_REGISTRY
- private TimeZoneInfo(Win32Native.TimeZoneInformation zone, Boolean dstDisabled) {
-
- if (String.IsNullOrEmpty(zone.StandardName)) {
- m_id = c_localId; // the ID must contain at least 1 character - initialize m_id to "Local"
- }
- else {
- m_id = zone.StandardName;
- }
- m_baseUtcOffset = new TimeSpan(0, -(zone.Bias), 0);
-
- if (!dstDisabled) {
- // only create the adjustment rule if DST is enabled
- Win32Native.RegistryTimeZoneInformation regZone = new Win32Native.RegistryTimeZoneInformation(zone);
- AdjustmentRule rule = CreateAdjustmentRuleFromTimeZoneInformation(regZone, DateTime.MinValue.Date, DateTime.MaxValue.Date, zone.Bias);
- if (rule != null) {
- m_adjustmentRules = new AdjustmentRule[1];
- m_adjustmentRules[0] = rule;
- }
- }
-
- ValidateTimeZoneInfo(m_id, m_baseUtcOffset, m_adjustmentRules, out m_supportsDaylightSavingTime);
- m_displayName = zone.StandardName;
- m_standardDisplayName = zone.StandardName;
- m_daylightDisplayName = zone.DaylightName;
- }
-#endif // FEATURE_WIN32_REGISTRY
-
-#if PLATFORM_UNIX
- private TimeZoneInfo(byte[] data, string id, Boolean dstDisabled)
- {
- TZifHead t;
- DateTime[] dts;
- Byte[] typeOfLocalTime;
- TZifType[] transitionType;
- String zoneAbbreviations;
- Boolean[] StandardTime;
- Boolean[] GmtTime;
- string futureTransitionsPosixFormat;
-
- // parse the raw TZif bytes; this method can throw ArgumentException when the data is malformed.
- TZif_ParseRaw(data, out t, out dts, out typeOfLocalTime, out transitionType, out zoneAbbreviations, out StandardTime, out GmtTime, out futureTransitionsPosixFormat);
-
- m_id = id;
- m_displayName = c_localId;
- m_baseUtcOffset = TimeSpan.Zero;
-
- // find the best matching baseUtcOffset and display strings based on the current utcNow value.
- // NOTE: read the display strings from the the tzfile now in case they can't be loaded later
- // from the globalization data.
- DateTime utcNow = DateTime.UtcNow;
- for (int i = 0; i < dts.Length && dts[i] <= utcNow; i++) {
- int type = typeOfLocalTime[i];
- if (!transitionType[type].IsDst) {
- m_baseUtcOffset = transitionType[type].UtcOffset;
- m_standardDisplayName = TZif_GetZoneAbbreviation(zoneAbbreviations, transitionType[type].AbbreviationIndex);
- }
- else {
- m_daylightDisplayName = TZif_GetZoneAbbreviation(zoneAbbreviations, transitionType[type].AbbreviationIndex);
- }
- }
-
- if (dts.Length == 0) {
- // time zones like Africa/Bujumbura and Etc/GMT* have no transition times but still contain
- // TZifType entries that may contain a baseUtcOffset and display strings
- for (int i = 0; i < transitionType.Length; i++) {
- if (!transitionType[i].IsDst) {
- m_baseUtcOffset = transitionType[i].UtcOffset;
- m_standardDisplayName = TZif_GetZoneAbbreviation(zoneAbbreviations, transitionType[i].AbbreviationIndex);
- }
- else {
- m_daylightDisplayName = TZif_GetZoneAbbreviation(zoneAbbreviations, transitionType[i].AbbreviationIndex);
- }
- }
- }
- m_displayName = m_standardDisplayName;
-
- GetDisplayName(Interop.GlobalizationInterop.TimeZoneDisplayNameType.Generic, ref m_displayName);
- GetDisplayName(Interop.GlobalizationInterop.TimeZoneDisplayNameType.Standard, ref m_standardDisplayName);
- GetDisplayName(Interop.GlobalizationInterop.TimeZoneDisplayNameType.DaylightSavings, ref m_daylightDisplayName);
-
- // TZif supports seconds-level granularity with offsets but TimeZoneInfo only supports minutes since it aligns
- // with DateTimeOffset, SQL Server, and the W3C XML Specification
- if (m_baseUtcOffset.Ticks % TimeSpan.TicksPerMinute != 0) {
- m_baseUtcOffset = new TimeSpan(m_baseUtcOffset.Hours, m_baseUtcOffset.Minutes, 0);
- }
-
- if (!dstDisabled) {
- // only create the adjustment rule if DST is enabled
- TZif_GenerateAdjustmentRules(out m_adjustmentRules, m_baseUtcOffset, dts, typeOfLocalTime, transitionType, StandardTime, GmtTime, futureTransitionsPosixFormat);
- }
+ public string ToSerializedString() => StringSerializer.GetSerializedString(this);
- ValidateTimeZoneInfo(m_id, m_baseUtcOffset, m_adjustmentRules, out m_supportsDaylightSavingTime);
- }
-
- private void GetDisplayName(Interop.GlobalizationInterop.TimeZoneDisplayNameType nameType, ref string displayName)
- {
- string timeZoneDisplayName;
- bool result = Interop.CallStringMethod(
- (locale, id, type, stringBuilder) => Interop.GlobalizationInterop.GetTimeZoneDisplayName(
- locale,
- id,
- type,
- stringBuilder,
- stringBuilder.Capacity),
- CultureInfo.CurrentUICulture.Name,
- m_id,
- nameType,
- out timeZoneDisplayName);
-
- // If there is an unknown error, don't set the displayName field.
- // It will be set to the abbreviation that was read out of the tzfile.
- if (result)
- {
- displayName = timeZoneDisplayName;
- }
- }
+ /// <summary>
+ /// Returns the <see cref="DisplayName"/>: "(GMT-08:00) Pacific Time (US &amp; Canada); Tijuana"
+ /// </summary>
+ public override string ToString() => DisplayName;
-#endif // PLATFORM_UNIX
+ /// <summary>
+ /// Returns a TimeZoneInfo instance that represents Universal Coordinated Time (UTC)
+ /// </summary>
+ public static TimeZoneInfo Utc => s_utcTimeZone;
private TimeZoneInfo(
- String id,
+ string id,
TimeSpan baseUtcOffset,
- String displayName,
- String standardDisplayName,
- String daylightDisplayName,
- AdjustmentRule [] adjustmentRules,
- Boolean disableDaylightSavingTime) {
+ string displayName,
+ string standardDisplayName,
+ string daylightDisplayName,
+ AdjustmentRule[] adjustmentRules,
+ bool disableDaylightSavingTime)
+ {
- Boolean adjustmentRulesSupportDst;
+ bool adjustmentRulesSupportDst;
ValidateTimeZoneInfo(id, baseUtcOffset, adjustmentRules, out adjustmentRulesSupportDst);
- m_id = id;
- m_baseUtcOffset = baseUtcOffset;
- m_displayName = displayName;
- m_standardDisplayName = standardDisplayName;
- m_daylightDisplayName = (disableDaylightSavingTime ? null : daylightDisplayName);
- m_supportsDaylightSavingTime = adjustmentRulesSupportDst && !disableDaylightSavingTime;
- m_adjustmentRules = adjustmentRules;
+ _id = id;
+ _baseUtcOffset = baseUtcOffset;
+ _displayName = displayName;
+ _standardDisplayName = standardDisplayName;
+ _daylightDisplayName = disableDaylightSavingTime ? null : daylightDisplayName;
+ _supportsDaylightSavingTime = adjustmentRulesSupportDst && !disableDaylightSavingTime;
+ _adjustmentRules = adjustmentRules;
}
- // -------- SECTION: factory methods -----------------*
-
- //
- // CreateCustomTimeZone -
- //
- // returns a simple TimeZoneInfo instance that does
- // not support Daylight Saving Time
- //
- static public TimeZoneInfo CreateCustomTimeZone(
- String id,
- TimeSpan baseUtcOffset,
- String displayName,
- String standardDisplayName) {
-
+ /// <summary>
+ /// Returns a simple TimeZoneInfo instance that does not support Daylight Saving Time.
+ /// </summary>
+ public static TimeZoneInfo CreateCustomTimeZone(
+ string id,
+ TimeSpan baseUtcOffset,
+ string displayName,
+ string standardDisplayName)
+ {
return new TimeZoneInfo(
- id,
- baseUtcOffset,
- displayName,
- standardDisplayName,
- standardDisplayName,
- null,
- false);
+ id,
+ baseUtcOffset,
+ displayName,
+ standardDisplayName,
+ standardDisplayName,
+ adjustmentRules: null,
+ disableDaylightSavingTime: false);
}
- //
- // CreateCustomTimeZone -
- //
- // returns a TimeZoneInfo instance that may
- // support Daylight Saving Time
- //
- static public TimeZoneInfo CreateCustomTimeZone(
- String id,
- TimeSpan baseUtcOffset,
- String displayName,
- String standardDisplayName,
- String daylightDisplayName,
- AdjustmentRule [] adjustmentRules) {
-
+ /// <summary>
+ /// Returns a TimeZoneInfo instance that may support Daylight Saving Time.
+ /// </summary>
+ public static TimeZoneInfo CreateCustomTimeZone(
+ string id,
+ TimeSpan baseUtcOffset,
+ string displayName,
+ string standardDisplayName,
+ string daylightDisplayName,
+ AdjustmentRule[] adjustmentRules)
+ {
return CreateCustomTimeZone(
- id,
- baseUtcOffset,
- displayName,
- standardDisplayName,
- daylightDisplayName,
- adjustmentRules,
- false);
+ id,
+ baseUtcOffset,
+ displayName,
+ standardDisplayName,
+ daylightDisplayName,
+ adjustmentRules,
+ disableDaylightSavingTime: false);
}
-
- //
- // CreateCustomTimeZone -
- //
- // returns a TimeZoneInfo instance that may
- // support Daylight Saving Time
- //
- // This class factory method is identical to the
- // TimeZoneInfo private constructor
- //
- static public TimeZoneInfo CreateCustomTimeZone(
- String id,
- TimeSpan baseUtcOffset,
- String displayName,
- String standardDisplayName,
- String daylightDisplayName,
- AdjustmentRule [] adjustmentRules,
- Boolean disableDaylightSavingTime) {
-
- if (!disableDaylightSavingTime && adjustmentRules?.Length > 0) {
+ /// <summary>
+ /// Returns a TimeZoneInfo instance that may support Daylight Saving Time.
+ /// </summary>
+ public static TimeZoneInfo CreateCustomTimeZone(
+ string id,
+ TimeSpan baseUtcOffset,
+ string displayName,
+ string standardDisplayName,
+ string daylightDisplayName,
+ AdjustmentRule[] adjustmentRules,
+ bool disableDaylightSavingTime)
+ {
+ if (!disableDaylightSavingTime && adjustmentRules?.Length > 0)
+ {
adjustmentRules = (AdjustmentRule[])adjustmentRules.Clone();
}
return new TimeZoneInfo(
- id,
- baseUtcOffset,
- displayName,
- standardDisplayName,
- daylightDisplayName,
- adjustmentRules,
- disableDaylightSavingTime);
+ id,
+ baseUtcOffset,
+ displayName,
+ standardDisplayName,
+ daylightDisplayName,
+ adjustmentRules,
+ disableDaylightSavingTime);
}
+ void IDeserializationCallback.OnDeserialization(object sender)
+ {
+ try
+ {
+ bool adjustmentRulesSupportDst;
+ ValidateTimeZoneInfo(_id, _baseUtcOffset, _adjustmentRules, out adjustmentRulesSupportDst);
-
- // ----- SECTION: private serialization instance methods ----------------*
-
- void IDeserializationCallback.OnDeserialization(Object sender) {
- try {
- Boolean adjustmentRulesSupportDst;
- ValidateTimeZoneInfo(m_id, m_baseUtcOffset, m_adjustmentRules, out adjustmentRulesSupportDst);
-
- if (adjustmentRulesSupportDst != m_supportsDaylightSavingTime) {
+ if (adjustmentRulesSupportDst != _supportsDaylightSavingTime)
+ {
throw new SerializationException(Environment.GetResourceString("Serialization_CorruptField", "SupportsDaylightSavingTime"));
}
}
- catch (ArgumentException e) {
+ catch (ArgumentException e)
+ {
throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
}
- catch (InvalidTimeZoneException e) {
+ catch (InvalidTimeZoneException e)
+ {
throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
}
}
-
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
- if (info == null) {
+ void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ if (info == null)
+ {
throw new ArgumentNullException(nameof(info));
}
Contract.EndContractBlock();
- info.AddValue("Id", m_id);
- info.AddValue("DisplayName", m_displayName);
- info.AddValue("StandardName", m_standardDisplayName);
- info.AddValue("DaylightName", m_daylightDisplayName);
- info.AddValue("BaseUtcOffset", m_baseUtcOffset);
- info.AddValue("AdjustmentRules", m_adjustmentRules);
- info.AddValue("SupportsDaylightSavingTime", m_supportsDaylightSavingTime);
+ info.AddValue("Id", _id);
+ info.AddValue("DisplayName", _displayName);
+ info.AddValue("StandardName", _standardDisplayName);
+ info.AddValue("DaylightName", _daylightDisplayName);
+ info.AddValue("BaseUtcOffset", _baseUtcOffset);
+ info.AddValue("AdjustmentRules", _adjustmentRules);
+ info.AddValue("SupportsDaylightSavingTime", _supportsDaylightSavingTime);
}
-
- TimeZoneInfo(SerializationInfo info, StreamingContext context) {
- if (info == null) {
+ TimeZoneInfo(SerializationInfo info, StreamingContext context)
+ {
+ if (info == null)
+ {
throw new ArgumentNullException(nameof(info));
}
- m_id = (String)info.GetValue("Id", typeof(String));
- m_displayName = (String)info.GetValue("DisplayName", typeof(String));
- m_standardDisplayName = (String)info.GetValue("StandardName", typeof(String));
- m_daylightDisplayName = (String)info.GetValue("DaylightName", typeof(String));
- m_baseUtcOffset = (TimeSpan)info.GetValue("BaseUtcOffset", typeof(TimeSpan));
- m_adjustmentRules = (AdjustmentRule[])info.GetValue("AdjustmentRules", typeof(AdjustmentRule[]));
- m_supportsDaylightSavingTime = (Boolean)info.GetValue("SupportsDaylightSavingTime", typeof(Boolean));
+ _id = (string)info.GetValue("Id", typeof(string));
+ _displayName = (string)info.GetValue("DisplayName", typeof(string));
+ _standardDisplayName = (string)info.GetValue("StandardName", typeof(string));
+ _daylightDisplayName = (string)info.GetValue("DaylightName", typeof(string));
+ _baseUtcOffset = (TimeSpan)info.GetValue("BaseUtcOffset", typeof(TimeSpan));
+ _adjustmentRules = (AdjustmentRule[])info.GetValue("AdjustmentRules", typeof(AdjustmentRule[]));
+ _supportsDaylightSavingTime = (bool)info.GetValue("SupportsDaylightSavingTime", typeof(bool));
}
-
-
- // ----- SECTION: internal instance utility methods ----------------*
-
-
- private AdjustmentRule GetAdjustmentRuleForTime(DateTime dateTime, bool dateTimeisUtc = false) {
- if (m_adjustmentRules == null || m_adjustmentRules.Length == 0) {
+ private AdjustmentRule GetAdjustmentRuleForTime(DateTime dateTime, bool dateTimeisUtc = false)
+ {
+ if (_adjustmentRules == null || _adjustmentRules.Length == 0)
+ {
return null;
}
@@ -1418,20 +1061,16 @@ namespace System {
// This is because the AdjustmentRule DateStart & DateEnd are stored as
// Date-only values {4/2/2006 - 10/28/2006} but actually represent the
// time span {4/2/2006@00:00:00.00000 - 10/28/2006@23:59:59.99999}
- DateTime date;
- if (dateTimeisUtc)
- {
- date = (dateTime + BaseUtcOffset).Date;
- }
- else
- {
- date = dateTime.Date;
- }
+ DateTime date = dateTimeisUtc ?
+ (dateTime + BaseUtcOffset).Date :
+ dateTime.Date;
- for (int i = 0; i < m_adjustmentRules.Length; i++) {
- AdjustmentRule rule = m_adjustmentRules[i];
- AdjustmentRule previousRule = i > 0 ? m_adjustmentRules[i - 1] : rule;
- if (IsAdjustmentRuleValid(rule, previousRule, dateTime, date, dateTimeisUtc)) {
+ for (int i = 0; i < _adjustmentRules.Length; i++)
+ {
+ AdjustmentRule rule = _adjustmentRules[i];
+ AdjustmentRule previousRule = i > 0 ? _adjustmentRules[i - 1] : rule;
+ if (IsAdjustmentRuleValid(rule, previousRule, dateTime, date, dateTimeisUtc))
+ {
return rule;
}
}
@@ -1448,18 +1087,11 @@ namespace System {
bool isAfterStart;
if (rule.DateStart.Kind == DateTimeKind.Utc)
{
- DateTime dateTimeToCompare;
- if (dateTimeisUtc)
- {
- dateTimeToCompare = dateTime;
- }
- else
- {
- dateTimeToCompare = ConvertToUtc(dateTime,
- // use the previous rule to compute the dateTimeToCompare, since the time daylight savings "switches"
- // is based on the previous rule's offset
- previousRule.DaylightDelta, previousRule.BaseUtcOffsetDelta);
- }
+ DateTime dateTimeToCompare = dateTimeisUtc ?
+ dateTime :
+ // use the previous rule to compute the dateTimeToCompare, since the time daylight savings "switches"
+ // is based on the previous rule's offset
+ ConvertToUtc(dateTime, previousRule.DaylightDelta, previousRule.BaseUtcOffsetDelta);
isAfterStart = dateTimeToCompare >= rule.DateStart;
}
@@ -1477,15 +1109,9 @@ namespace System {
bool isBeforeEnd;
if (rule.DateEnd.Kind == DateTimeKind.Utc)
{
- DateTime dateTimeToCompare;
- if (dateTimeisUtc)
- {
- dateTimeToCompare = dateTime;
- }
- else
- {
- dateTimeToCompare = ConvertToUtc(dateTime, rule.DaylightDelta, rule.BaseUtcOffsetDelta);
- }
+ DateTime dateTimeToCompare = dateTimeisUtc ?
+ dateTime :
+ ConvertToUtc(dateTime, rule.DaylightDelta, rule.BaseUtcOffsetDelta);
isBeforeEnd = dateTimeToCompare <= rule.DateEnd;
}
@@ -1501,18 +1127,14 @@ namespace System {
/// <summary>
/// Converts the dateTime to UTC using the specified deltas.
/// </summary>
- private DateTime ConvertToUtc(DateTime dateTime, TimeSpan daylightDelta, TimeSpan baseUtcOffsetDelta)
- {
- return ConvertToFromUtc(dateTime, daylightDelta, baseUtcOffsetDelta, convertToUtc: true);
- }
+ private DateTime ConvertToUtc(DateTime dateTime, TimeSpan daylightDelta, TimeSpan baseUtcOffsetDelta) =>
+ ConvertToFromUtc(dateTime, daylightDelta, baseUtcOffsetDelta, convertToUtc: true);
/// <summary>
/// Converts the dateTime from UTC using the specified deltas.
/// </summary>
- private DateTime ConvertFromUtc(DateTime dateTime, TimeSpan daylightDelta, TimeSpan baseUtcOffsetDelta)
- {
- return ConvertToFromUtc(dateTime, daylightDelta, baseUtcOffsetDelta, convertToUtc: false);
- }
+ private DateTime ConvertFromUtc(DateTime dateTime, TimeSpan daylightDelta, TimeSpan baseUtcOffsetDelta) =>
+ ConvertToFromUtc(dateTime, daylightDelta, baseUtcOffsetDelta, convertToUtc: false);
/// <summary>
/// Converts the dateTime to or from UTC using the specified deltas.
@@ -1527,184 +1149,40 @@ namespace System {
long ticks = dateTime.Ticks + offset.Ticks;
- DateTime result;
- if (ticks > DateTime.MaxValue.Ticks)
- {
- result = DateTime.MaxValue;
- }
- else if (ticks < DateTime.MinValue.Ticks)
- {
- result = DateTime.MinValue;
- }
- else
- {
- result = new DateTime(ticks);
- }
-
- return result;
- }
-
- // ----- SECTION: internal static utility methods ----------------*
-
- //
- // CheckDaylightSavingTimeNotSupported -
- //
- // Helper function to check if the current TimeZoneInformation struct does not support DST. This
- // check returns true when the DaylightDate == StandardDate
- //
- // This check is only meant to be used for "Local".
- //
- static private Boolean CheckDaylightSavingTimeNotSupported(Win32Native.TimeZoneInformation timeZone) {
- return ( timeZone.DaylightDate.Year == timeZone.StandardDate.Year
- && timeZone.DaylightDate.Month == timeZone.StandardDate.Month
- && timeZone.DaylightDate.DayOfWeek == timeZone.StandardDate.DayOfWeek
- && timeZone.DaylightDate.Day == timeZone.StandardDate.Day
- && timeZone.DaylightDate.Hour == timeZone.StandardDate.Hour
- && timeZone.DaylightDate.Minute == timeZone.StandardDate.Minute
- && timeZone.DaylightDate.Second == timeZone.StandardDate.Second
- && timeZone.DaylightDate.Milliseconds == timeZone.StandardDate.Milliseconds);
+ return
+ ticks > DateTime.MaxValue.Ticks ? DateTime.MaxValue :
+ ticks < DateTime.MinValue.Ticks ? DateTime.MinValue :
+ new DateTime(ticks);
}
-
- //
- // ConvertUtcToTimeZone -
- //
- // Helper function that converts a dateTime from UTC into the destinationTimeZone
- //
- // * returns DateTime.MaxValue when the converted value is too large
- // * returns DateTime.MinValue when the converted value is too small
- //
- static private DateTime ConvertUtcToTimeZone(Int64 ticks, TimeZoneInfo destinationTimeZone, out Boolean isAmbiguousLocalDst) {
- DateTime utcConverted;
- DateTime localConverted;
-
- // utcConverted is used to calculate the UTC offset in the destinationTimeZone
- if (ticks > DateTime.MaxValue.Ticks) {
- utcConverted = DateTime.MaxValue;
- }
- else if (ticks < DateTime.MinValue.Ticks) {
- utcConverted = DateTime.MinValue;
- }
- else {
- utcConverted = new DateTime(ticks);
- }
+ /// <summary>
+ /// Helper function that converts a dateTime from UTC into the destinationTimeZone
+ /// - Returns DateTime.MaxValue when the converted value is too large.
+ /// - Returns DateTime.MinValue when the converted value is too small.
+ /// </summary>
+ private static DateTime ConvertUtcToTimeZone(long ticks, TimeZoneInfo destinationTimeZone, out bool isAmbiguousLocalDst)
+ {
+ // used to calculate the UTC offset in the destinationTimeZone
+ DateTime utcConverted =
+ ticks > DateTime.MaxValue.Ticks ? DateTime.MaxValue :
+ ticks < DateTime.MinValue.Ticks ? DateTime.MinValue :
+ new DateTime(ticks);
// verify the time is between MinValue and MaxValue in the new time zone
TimeSpan offset = GetUtcOffsetFromUtc(utcConverted, destinationTimeZone, out isAmbiguousLocalDst);
ticks += offset.Ticks;
- if (ticks > DateTime.MaxValue.Ticks) {
- localConverted = DateTime.MaxValue;
- }
- else if (ticks < DateTime.MinValue.Ticks) {
- localConverted = DateTime.MinValue;
- }
- else {
- localConverted = new DateTime(ticks);
- }
- return localConverted;
+ return
+ ticks > DateTime.MaxValue.Ticks ? DateTime.MaxValue :
+ ticks < DateTime.MinValue.Ticks ? DateTime.MinValue :
+ new DateTime(ticks);
}
-#if FEATURE_WIN32_REGISTRY
- //
- // CreateAdjustmentRuleFromTimeZoneInformation-
- //
- // Converts a Win32Native.RegistryTimeZoneInformation (REG_TZI_FORMAT struct) to an AdjustmentRule
- //
- static private AdjustmentRule CreateAdjustmentRuleFromTimeZoneInformation(Win32Native.RegistryTimeZoneInformation timeZoneInformation, DateTime startDate, DateTime endDate, int defaultBaseUtcOffset) {
- AdjustmentRule rule;
- bool supportsDst = (timeZoneInformation.StandardDate.Month != 0);
-
- if (!supportsDst) {
- if (timeZoneInformation.Bias == defaultBaseUtcOffset)
- {
- // this rule will not contain any information to be used to adjust dates. just ignore it
- return null;
- }
-
- return rule = AdjustmentRule.CreateAdjustmentRule(
- startDate,
- endDate,
- TimeSpan.Zero, // no daylight saving transition
- TransitionTime.CreateFixedDateRule(DateTime.MinValue, 1, 1),
- TransitionTime.CreateFixedDateRule(DateTime.MinValue.AddMilliseconds(1), 1, 1),
- new TimeSpan(0, defaultBaseUtcOffset - timeZoneInformation.Bias, 0), // Bias delta is all what we need from this rule
- noDaylightTransitions: false);
- }
-
- //
- // Create an AdjustmentRule with TransitionTime objects
- //
- TransitionTime daylightTransitionStart;
- if (!TransitionTimeFromTimeZoneInformation(timeZoneInformation, out daylightTransitionStart, true /* start date */)) {
- return null;
- }
-
- TransitionTime daylightTransitionEnd;
- if (!TransitionTimeFromTimeZoneInformation(timeZoneInformation, out daylightTransitionEnd, false /* end date */)) {
- return null;
- }
-
- if (daylightTransitionStart.Equals(daylightTransitionEnd)) {
- // this happens when the time zone does support DST but the OS has DST disabled
- return null;
- }
-
- rule = AdjustmentRule.CreateAdjustmentRule(
- startDate,
- endDate,
- new TimeSpan(0, -timeZoneInformation.DaylightBias, 0),
- (TransitionTime)daylightTransitionStart,
- (TransitionTime)daylightTransitionEnd,
- new TimeSpan(0, defaultBaseUtcOffset - timeZoneInformation.Bias, 0),
- noDaylightTransitions: false);
-
- return rule;
- }
-
- //
- // FindIdFromTimeZoneInformation -
- //
- // Helper function that searches the registry for a time zone entry
- // that matches the TimeZoneInformation struct
- //
- static private String FindIdFromTimeZoneInformation(Win32Native.TimeZoneInformation timeZone, out Boolean dstDisabled) {
- dstDisabled = false;
-
- try {
- PermissionSet permSet = new PermissionSet(PermissionState.None);
- permSet.AddPermission(new RegistryPermission(RegistryPermissionAccess.Read, c_timeZonesRegistryHivePermissionList));
- permSet.Assert();
-
- using (RegistryKey key = Registry.LocalMachine.OpenSubKey(c_timeZonesRegistryHive, false))
- {
- if (key == null)
- {
- return null;
- }
- foreach (string keyName in key.GetSubKeyNames())
- {
- if (TryCompareTimeZoneInformationToRegistry(timeZone, keyName, out dstDisabled))
- {
- return keyName;
- }
- }
- }
- }
- finally {
- PermissionSet.RevertAssert();
- }
- return null;
- }
-#endif // FEATURE_WIN32_REGISTRY
-
-
- //
- // GetDaylightTime -
- //
- // Helper function that returns a DaylightTime from a year and AdjustmentRule
- //
- private DaylightTimeStruct GetDaylightTime(Int32 year, AdjustmentRule rule) {
+ /// <summary>
+ /// Helper function that returns a DaylightTime from a year and AdjustmentRule.
+ /// </summary>
+ private DaylightTimeStruct GetDaylightTime(int year, AdjustmentRule rule)
+ {
TimeSpan delta = rule.DaylightDelta;
DateTime startTime;
DateTime endTime;
@@ -1728,28 +1206,35 @@ namespace System {
return new DaylightTimeStruct(startTime, endTime, delta);
}
- //
- // GetIsDaylightSavings -
- //
- // Helper function that checks if a given dateTime is in Daylight Saving Time (DST)
- // This function assumes the dateTime and AdjustmentRule are both in the same time zone
- //
- static private Boolean GetIsDaylightSavings(DateTime time, AdjustmentRule rule, DaylightTimeStruct daylightTime, TimeZoneInfoOptions flags) {
- if (rule == null) {
+ /// <summary>
+ /// Helper function that checks if a given dateTime is in Daylight Saving Time (DST).
+ /// This function assumes the dateTime and AdjustmentRule are both in the same time zone.
+ /// </summary>
+ private static bool GetIsDaylightSavings(DateTime time, AdjustmentRule rule, DaylightTimeStruct daylightTime, TimeZoneInfoOptions flags)
+ {
+ if (rule == null)
+ {
return false;
}
DateTime startTime;
DateTime endTime;
-
- if (time.Kind == DateTimeKind.Local) {
- // startTime and endTime represent the period from either the start of DST to the end and ***includes*** the
- // potentially overlapped times
- startTime = rule.IsStartDateMarkerForBeginningOfYear() ? new DateTime(daylightTime.Start.Year, 1, 1, 0, 0, 0) : daylightTime.Start + daylightTime.Delta;
- endTime = rule.IsEndDateMarkerForEndOfYear() ? new DateTime(daylightTime.End.Year + 1, 1, 1, 0, 0, 0).AddTicks(-1) : daylightTime.End;
+
+ if (time.Kind == DateTimeKind.Local)
+ {
+ // startTime and endTime represent the period from either the start of
+ // DST to the end and ***includes*** the potentially overlapped times
+ startTime = rule.IsStartDateMarkerForBeginningOfYear() ?
+ new DateTime(daylightTime.Start.Year, 1, 1, 0, 0, 0) :
+ daylightTime.Start + daylightTime.Delta;
+
+ endTime = rule.IsEndDateMarkerForEndOfYear() ?
+ new DateTime(daylightTime.End.Year + 1, 1, 1, 0, 0, 0).AddTicks(-1) :
+ daylightTime.End;
}
- else {
- // startTime and endTime represent the period from either the start of DST to the end and
+ else
+ {
+ // startTime and endTime represent the period from either the start of DST to the end and
// ***does not include*** the potentially overlapped times
//
// -=-=-=-=-=- Pacific Standard Time -=-=-=-=-=-=-
@@ -1766,20 +1251,28 @@ namespace System {
// | <ambiguous time> | | <invalid time> |
// [======== DST ========>)
//
- Boolean invalidAtStart = rule.DaylightDelta > TimeSpan.Zero;
- startTime = rule.IsStartDateMarkerForBeginningOfYear() ? new DateTime(daylightTime.Start.Year, 1, 1, 0, 0, 0) : daylightTime.Start + (invalidAtStart ? rule.DaylightDelta : TimeSpan.Zero); /* FUTURE: - rule.StandardDelta; */
- endTime = rule.IsEndDateMarkerForEndOfYear() ? new DateTime(daylightTime.End.Year + 1, 1, 1, 0, 0, 0).AddTicks(-1) : daylightTime.End + (invalidAtStart ? -rule.DaylightDelta : TimeSpan.Zero);
+ bool invalidAtStart = rule.DaylightDelta > TimeSpan.Zero;
+
+ startTime = rule.IsStartDateMarkerForBeginningOfYear() ?
+ new DateTime(daylightTime.Start.Year, 1, 1, 0, 0, 0) :
+ daylightTime.Start + (invalidAtStart ? rule.DaylightDelta : TimeSpan.Zero); /* FUTURE: - rule.StandardDelta; */
+
+ endTime = rule.IsEndDateMarkerForEndOfYear() ?
+ new DateTime(daylightTime.End.Year + 1, 1, 1, 0, 0, 0).AddTicks(-1) :
+ daylightTime.End + (invalidAtStart ? -rule.DaylightDelta : TimeSpan.Zero);
}
- Boolean isDst = CheckIsDst(startTime, time, endTime, false, rule);
+ bool isDst = CheckIsDst(startTime, time, endTime, false, rule);
// If this date was previously converted from a UTC date and we were able to detect that the local
- // DateTime would be ambiguous, this data is stored in the DateTime to resolve this ambiguity.
- if (isDst && time.Kind == DateTimeKind.Local) {
- // For normal time zones, the ambiguous hour is the last hour of daylight saving when you wind the
+ // DateTime would be ambiguous, this data is stored in the DateTime to resolve this ambiguity.
+ if (isDst && time.Kind == DateTimeKind.Local)
+ {
+ // For normal time zones, the ambiguous hour is the last hour of daylight saving when you wind the
// clock back. It is theoretically possible to have a positive delta, (which would really be daylight
// reduction time), where you would have to wind the clock back in the begnning.
- if (GetIsAmbiguousTime(time, rule, daylightTime)) {
+ if (GetIsAmbiguousTime(time, rule, daylightTime))
+ {
isDst = time.IsAmbiguousDaylightSavingTime();
}
}
@@ -1810,110 +1303,132 @@ namespace System {
private TimeSpan GetDaylightSavingsEndOffsetFromUtc(TimeSpan baseUtcOffset, AdjustmentRule rule)
{
// NOTE: even NoDaylightTransitions rules use this logic since DST ends w.r.t. the current rule
-
return baseUtcOffset + rule.BaseUtcOffsetDelta + rule.DaylightDelta; /* FUTURE: + rule.StandardDelta; */
}
- //
- // GetIsDaylightSavingsFromUtc -
- //
- // Helper function that checks if a given dateTime is in Daylight Saving Time (DST)
- // This function assumes the dateTime is in UTC and AdjustmentRule is in a different time zone
- //
- static private Boolean GetIsDaylightSavingsFromUtc(DateTime time, Int32 Year, TimeSpan utc, AdjustmentRule rule, out Boolean isAmbiguousLocalDst, TimeZoneInfo zone) {
+ /// <summary>
+ /// Helper function that checks if a given dateTime is in Daylight Saving Time (DST).
+ /// This function assumes the dateTime is in UTC and AdjustmentRule is in a different time zone.
+ /// </summary>
+ private static bool GetIsDaylightSavingsFromUtc(DateTime time, int year, TimeSpan utc, AdjustmentRule rule, out bool isAmbiguousLocalDst, TimeZoneInfo zone)
+ {
isAmbiguousLocalDst = false;
- if (rule == null) {
+ if (rule == null)
+ {
return false;
}
-
// Get the daylight changes for the year of the specified time.
- DaylightTimeStruct daylightTime = zone.GetDaylightTime(Year, rule);
+ DaylightTimeStruct daylightTime = zone.GetDaylightTime(year, rule);
- // The start and end times represent the range of universal times that are in DST for that year.
+ // The start and end times represent the range of universal times that are in DST for that year.
// Within that there is an ambiguous hour, usually right at the end, but at the beginning in
// the unusual case of a negative daylight savings delta.
- // We need to handle the case if the current rule has daylight saving end by the end of year. If so, we need to check if next year starts with daylight saving on
+ // We need to handle the case if the current rule has daylight saving end by the end of year. If so, we need to check if next year starts with daylight saving on
// and get the actual daylight saving end time. Here is example for such case:
- // Converting the UTC datetime "12/31/2011 8:00:00 PM" to "(UTC+03:00) Moscow, St. Petersburg, Volgograd (RTZ 2)" zone.
- // In 2011 the daylight saving will go through the end of the year. If we use the end of 2011 as the daylight saving end,
- // that will fail the conversion because the UTC time +4 hours (3 hours for the zone UTC offset and 1 hour for daylight saving) will move us to the next year "1/1/2012 12:00 AM",
+ // Converting the UTC datetime "12/31/2011 8:00:00 PM" to "(UTC+03:00) Moscow, St. Petersburg, Volgograd (RTZ 2)" zone.
+ // In 2011 the daylight saving will go through the end of the year. If we use the end of 2011 as the daylight saving end,
+ // that will fail the conversion because the UTC time +4 hours (3 hours for the zone UTC offset and 1 hour for daylight saving) will move us to the next year "1/1/2012 12:00 AM",
// checking against the end of 2011 will tell we are not in daylight saving which is wrong and the conversion will be off by one hour.
// Note we handle the similar case when rule year start with daylight saving and previous year end with daylight saving.
bool ignoreYearAdjustment = false;
TimeSpan dstStartOffset = zone.GetDaylightSavingsStartOffsetFromUtc(utc, rule);
DateTime startTime;
- if (rule.IsStartDateMarkerForBeginningOfYear() && daylightTime.Start.Year > DateTime.MinValue.Year) {
+ if (rule.IsStartDateMarkerForBeginningOfYear() && daylightTime.Start.Year > DateTime.MinValue.Year)
+ {
AdjustmentRule previousYearRule = zone.GetAdjustmentRuleForTime(new DateTime(daylightTime.Start.Year - 1, 12, 31));
- if (previousYearRule != null && previousYearRule.IsEndDateMarkerForEndOfYear()) {
+ if (previousYearRule != null && previousYearRule.IsEndDateMarkerForEndOfYear())
+ {
DaylightTimeStruct previousDaylightTime = zone.GetDaylightTime(daylightTime.Start.Year - 1, previousYearRule);
startTime = previousDaylightTime.Start - utc - previousYearRule.BaseUtcOffsetDelta;
ignoreYearAdjustment = true;
- } else {
+ }
+ else
+ {
startTime = new DateTime(daylightTime.Start.Year, 1, 1, 0, 0, 0) - dstStartOffset;
}
- } else {
+ }
+ else
+ {
startTime = daylightTime.Start - dstStartOffset;
}
TimeSpan dstEndOffset = zone.GetDaylightSavingsEndOffsetFromUtc(utc, rule);
DateTime endTime;
- if (rule.IsEndDateMarkerForEndOfYear() && daylightTime.End.Year < DateTime.MaxValue.Year) {
+ if (rule.IsEndDateMarkerForEndOfYear() && daylightTime.End.Year < DateTime.MaxValue.Year)
+ {
AdjustmentRule nextYearRule = zone.GetAdjustmentRuleForTime(new DateTime(daylightTime.End.Year + 1, 1, 1));
- if (nextYearRule != null && nextYearRule.IsStartDateMarkerForBeginningOfYear()) {
- if (nextYearRule.IsEndDateMarkerForEndOfYear()) {// next year end with daylight saving on too
+ if (nextYearRule != null && nextYearRule.IsStartDateMarkerForBeginningOfYear())
+ {
+ if (nextYearRule.IsEndDateMarkerForEndOfYear())
+ {
+ // next year end with daylight saving on too
endTime = new DateTime(daylightTime.End.Year + 1, 12, 31) - utc - nextYearRule.BaseUtcOffsetDelta - nextYearRule.DaylightDelta;
- } else {
+ }
+ else
+ {
DaylightTimeStruct nextdaylightTime = zone.GetDaylightTime(daylightTime.End.Year + 1, nextYearRule);
endTime = nextdaylightTime.End - utc - nextYearRule.BaseUtcOffsetDelta - nextYearRule.DaylightDelta;
}
ignoreYearAdjustment = true;
- } else {
+ }
+ else
+ {
endTime = new DateTime(daylightTime.End.Year + 1, 1, 1, 0, 0, 0).AddTicks(-1) - dstEndOffset;
}
- } else {
+ }
+ else
+ {
endTime = daylightTime.End - dstEndOffset;
}
DateTime ambiguousStart;
DateTime ambiguousEnd;
- if (daylightTime.Delta.Ticks > 0) {
+ if (daylightTime.Delta.Ticks > 0)
+ {
ambiguousStart = endTime - daylightTime.Delta;
ambiguousEnd = endTime;
- } else {
+ }
+ else
+ {
ambiguousStart = startTime;
ambiguousEnd = startTime - daylightTime.Delta;
}
- Boolean isDst = CheckIsDst(startTime, time, endTime, ignoreYearAdjustment, rule);
+ bool isDst = CheckIsDst(startTime, time, endTime, ignoreYearAdjustment, rule);
// See if the resulting local time becomes ambiguous. This must be captured here or the
// DateTime will not be able to round-trip back to UTC accurately.
- if (isDst) {
+ if (isDst)
+ {
isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd);
- if (!isAmbiguousLocalDst && ambiguousStart.Year != ambiguousEnd.Year) {
+ if (!isAmbiguousLocalDst && ambiguousStart.Year != ambiguousEnd.Year)
+ {
// there exists an extreme corner case where the start or end period is on a year boundary and
// because of this the comparison above might have been performed for a year-early or a year-later
// than it should have been.
DateTime ambiguousStartModified;
DateTime ambiguousEndModified;
- try {
+ try
+ {
ambiguousStartModified = ambiguousStart.AddYears(1);
- ambiguousEndModified = ambiguousEnd.AddYears(1);
- isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd);
+ ambiguousEndModified = ambiguousEnd.AddYears(1);
+ isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd);
}
- catch (ArgumentOutOfRangeException) {}
+ catch (ArgumentOutOfRangeException) { }
- if (!isAmbiguousLocalDst) {
- try {
+ if (!isAmbiguousLocalDst)
+ {
+ try
+ {
ambiguousStartModified = ambiguousStart.AddYears(-1);
- ambiguousEndModified = ambiguousEnd.AddYears(-1);
+ ambiguousEndModified = ambiguousEnd.AddYears(-1);
isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd);
}
- catch (ArgumentOutOfRangeException) {}
+ catch (ArgumentOutOfRangeException) { }
}
}
@@ -1922,59 +1437,62 @@ namespace System {
return isDst;
}
-
- static private Boolean CheckIsDst(DateTime startTime, DateTime time, DateTime endTime, bool ignoreYearAdjustment, AdjustmentRule rule) {
- Boolean isDst;
-
+ private static bool CheckIsDst(DateTime startTime, DateTime time, DateTime endTime, bool ignoreYearAdjustment, AdjustmentRule rule)
+ {
// NoDaylightTransitions AdjustmentRules should never get their year adjusted since they adjust the offset for the
// entire time period - which may be for multiple years
- if (!ignoreYearAdjustment && !rule.NoDaylightTransitions) {
+ if (!ignoreYearAdjustment && !rule.NoDaylightTransitions)
+ {
int startTimeYear = startTime.Year;
int endTimeYear = endTime.Year;
- if (startTimeYear != endTimeYear) {
+ if (startTimeYear != endTimeYear)
+ {
endTime = endTime.AddYears(startTimeYear - endTimeYear);
}
int timeYear = time.Year;
- if (startTimeYear != timeYear) {
+ if (startTimeYear != timeYear)
+ {
time = time.AddYears(startTimeYear - timeYear);
}
}
- if (startTime > endTime) {
+ if (startTime > endTime)
+ {
// In southern hemisphere, the daylight saving time starts later in the year, and ends in the beginning of next year.
// Note, the summer in the southern hemisphere begins late in the year.
- isDst = (time < endTime || time >= startTime);
+ return (time < endTime || time >= startTime);
}
- else if (rule.NoDaylightTransitions) {
+ else if (rule.NoDaylightTransitions)
+ {
// In NoDaylightTransitions AdjustmentRules, the startTime is always before the endTime,
// and both the start and end times are inclusive
- isDst = (time >= startTime && time <= endTime);
+ return time >= startTime && time <= endTime;
}
- else {
+ else
+ {
// In northern hemisphere, the daylight saving time starts in the middle of the year.
- isDst = (time >= startTime && time < endTime);
+ return time >= startTime && time < endTime;
}
- return isDst;
}
-
- //
- // GetIsAmbiguousTime(DateTime dateTime, AdjustmentRule rule, DaylightTime daylightTime) -
- //
- // returns true when the dateTime falls into an ambiguous time range.
- // For example, in Pacific Standard Time on Sunday, October 29, 2006 time jumps from
- // 2AM to 1AM. This means the timeline on Sunday proceeds as follows:
- // 12AM ... [1AM ... 1:59:59AM -> 1AM ... 1:59:59AM] 2AM ... 3AM ...
- //
- // In this example, any DateTime values that fall into the [1AM - 1:59:59AM] range
- // are ambiguous; as it is unclear if these times are in Daylight Saving Time.
- //
- static private Boolean GetIsAmbiguousTime(DateTime time, AdjustmentRule rule, DaylightTimeStruct daylightTime) {
- Boolean isAmbiguous = false;
- if (rule == null || rule.DaylightDelta == TimeSpan.Zero) {
+ /// <summary>
+ /// Returns true when the dateTime falls into an ambiguous time range.
+ ///
+ /// For example, in Pacific Standard Time on Sunday, October 29, 2006 time jumps from
+ /// 2AM to 1AM. This means the timeline on Sunday proceeds as follows:
+ /// 12AM ... [1AM ... 1:59:59AM -> 1AM ... 1:59:59AM] 2AM ... 3AM ...
+ ///
+ /// In this example, any DateTime values that fall into the [1AM - 1:59:59AM] range
+ /// are ambiguous; as it is unclear if these times are in Daylight Saving Time.
+ /// </summary>
+ private static bool GetIsAmbiguousTime(DateTime time, AdjustmentRule rule, DaylightTimeStruct daylightTime)
+ {
+ bool isAmbiguous = false;
+ if (rule == null || rule.DaylightDelta == TimeSpan.Zero)
+ {
return isAmbiguous;
}
@@ -1982,15 +1500,19 @@ namespace System {
DateTime endAmbiguousTime;
// if at DST start we transition forward in time then there is an ambiguous time range at the DST end
- if (rule.DaylightDelta > TimeSpan.Zero) {
- if (rule.IsEndDateMarkerForEndOfYear()) { // year end with daylight on so there is no ambiguous time
+ if (rule.DaylightDelta > TimeSpan.Zero)
+ {
+ if (rule.IsEndDateMarkerForEndOfYear())
+ { // year end with daylight on so there is no ambiguous time
return false;
}
startAmbiguousTime = daylightTime.End;
endAmbiguousTime = daylightTime.End - rule.DaylightDelta; /* FUTURE: + rule.StandardDelta; */
}
- else {
- if (rule.IsStartDateMarkerForBeginningOfYear()) { // year start with daylight on so there is no ambiguous time
+ else
+ {
+ if (rule.IsStartDateMarkerForBeginningOfYear())
+ { // year start with daylight on so there is no ambiguous time
return false;
}
startAmbiguousTime = daylightTime.Start;
@@ -1999,46 +1521,48 @@ namespace System {
isAmbiguous = (time >= endAmbiguousTime && time < startAmbiguousTime);
- if (!isAmbiguous && startAmbiguousTime.Year != endAmbiguousTime.Year) {
+ if (!isAmbiguous && startAmbiguousTime.Year != endAmbiguousTime.Year)
+ {
// there exists an extreme corner case where the start or end period is on a year boundary and
// because of this the comparison above might have been performed for a year-early or a year-later
// than it should have been.
DateTime startModifiedAmbiguousTime;
DateTime endModifiedAmbiguousTime;
- try {
+ try
+ {
startModifiedAmbiguousTime = startAmbiguousTime.AddYears(1);
- endModifiedAmbiguousTime = endAmbiguousTime.AddYears(1);
+ endModifiedAmbiguousTime = endAmbiguousTime.AddYears(1);
isAmbiguous = (time >= endModifiedAmbiguousTime && time < startModifiedAmbiguousTime);
}
- catch (ArgumentOutOfRangeException) {}
+ catch (ArgumentOutOfRangeException) { }
- if (!isAmbiguous) {
- try {
+ if (!isAmbiguous)
+ {
+ try
+ {
startModifiedAmbiguousTime = startAmbiguousTime.AddYears(-1);
- endModifiedAmbiguousTime = endAmbiguousTime.AddYears(-1);
+ endModifiedAmbiguousTime = endAmbiguousTime.AddYears(-1);
isAmbiguous = (time >= endModifiedAmbiguousTime && time < startModifiedAmbiguousTime);
}
- catch (ArgumentOutOfRangeException) {}
+ catch (ArgumentOutOfRangeException) { }
}
}
return isAmbiguous;
}
-
-
- //
- // GetIsInvalidTime -
- //
- // Helper function that checks if a given DateTime is in an invalid time ("time hole")
- // A "time hole" occurs at a DST transition point when time jumps forward;
- // For example, in Pacific Standard Time on Sunday, April 2, 2006 time jumps from
- // 1:59:59.9999999 to 3AM. The time range 2AM to 2:59:59.9999999AM is the "time hole".
- // A "time hole" is not limited to only occurring at the start of DST, and may occur at
- // the end of DST as well.
- //
- static private Boolean GetIsInvalidTime(DateTime time, AdjustmentRule rule, DaylightTimeStruct daylightTime) {
- Boolean isInvalid = false;
- if (rule == null || rule.DaylightDelta == TimeSpan.Zero) {
+ /// <summary>
+ /// Helper function that checks if a given DateTime is in an invalid time ("time hole")
+ /// A "time hole" occurs at a DST transition point when time jumps forward;
+ /// For example, in Pacific Standard Time on Sunday, April 2, 2006 time jumps from
+ /// 1:59:59.9999999 to 3AM. The time range 2AM to 2:59:59.9999999AM is the "time hole".
+ /// A "time hole" is not limited to only occurring at the start of DST, and may occur at
+ /// the end of DST as well.
+ /// </summary>
+ private static bool GetIsInvalidTime(DateTime time, AdjustmentRule rule, DaylightTimeStruct daylightTime)
+ {
+ bool isInvalid = false;
+ if (rule == null || rule.DaylightDelta == TimeSpan.Zero)
+ {
return isInvalid;
}
@@ -2046,7 +1570,8 @@ namespace System {
DateTime endInvalidTime;
// if at DST start we transition forward in time then there is an ambiguous time range at the DST end
- if (rule.DaylightDelta < TimeSpan.Zero) {
+ if (rule.DaylightDelta < TimeSpan.Zero)
+ {
// if the year ends with daylight saving on then there cannot be any time-hole's in that year.
if (rule.IsEndDateMarkerForEndOfYear())
return false;
@@ -2054,7 +1579,8 @@ namespace System {
startInvalidTime = daylightTime.End;
endInvalidTime = daylightTime.End - rule.DaylightDelta; /* FUTURE: + rule.StandardDelta; */
}
- else {
+ else
+ {
// if the year starts with daylight saving on then there cannot be any time-hole's in that year.
if (rule.IsStartDateMarkerForBeginningOfYear())
return false;
@@ -2065,646 +1591,105 @@ namespace System {
isInvalid = (time >= startInvalidTime && time < endInvalidTime);
- if (!isInvalid && startInvalidTime.Year != endInvalidTime.Year) {
+ if (!isInvalid && startInvalidTime.Year != endInvalidTime.Year)
+ {
// there exists an extreme corner case where the start or end period is on a year boundary and
// because of this the comparison above might have been performed for a year-early or a year-later
// than it should have been.
DateTime startModifiedInvalidTime;
DateTime endModifiedInvalidTime;
- try {
+ try
+ {
startModifiedInvalidTime = startInvalidTime.AddYears(1);
- endModifiedInvalidTime = endInvalidTime.AddYears(1);
+ endModifiedInvalidTime = endInvalidTime.AddYears(1);
isInvalid = (time >= startModifiedInvalidTime && time < endModifiedInvalidTime);
}
- catch (ArgumentOutOfRangeException) {}
+ catch (ArgumentOutOfRangeException) { }
- if (!isInvalid) {
- try {
+ if (!isInvalid)
+ {
+ try
+ {
startModifiedInvalidTime = startInvalidTime.AddYears(-1);
- endModifiedInvalidTime = endInvalidTime.AddYears(-1);
+ endModifiedInvalidTime = endInvalidTime.AddYears(-1);
isInvalid = (time >= startModifiedInvalidTime && time < endModifiedInvalidTime);
}
- catch (ArgumentOutOfRangeException) {}
+ catch (ArgumentOutOfRangeException) { }
}
}
return isInvalid;
}
-
-
- //
- // GetLocalTimeZone -
- //
- // Helper function for retrieving the local system time zone.
- //
- // returns a new TimeZoneInfo instance
- //
- // may throw COMException, TimeZoneNotFoundException, InvalidTimeZoneException
- //
- // assumes cachedData lock is taken
- //
-
- static private TimeZoneInfo GetLocalTimeZone(CachedData cachedData) {
-
-
-#if FEATURE_WIN32_REGISTRY
- String id = null;
-
- //
- // Try using the "kernel32!GetDynamicTimeZoneInformation" API to get the "id"
- //
- Win32Native.DynamicTimeZoneInformation dynamicTimeZoneInformation =
- new Win32Native.DynamicTimeZoneInformation();
-
- // call kernel32!GetDynamicTimeZoneInformation...
- long result = UnsafeNativeMethods.GetDynamicTimeZoneInformation(out dynamicTimeZoneInformation);
- if (result == Win32Native.TIME_ZONE_ID_INVALID) {
- // return a dummy entry
- return CreateCustomTimeZone(c_localId, TimeSpan.Zero, c_localId, c_localId);
- }
-
- Win32Native.TimeZoneInformation timeZoneInformation =
- new Win32Native.TimeZoneInformation(dynamicTimeZoneInformation);
-
- Boolean dstDisabled = dynamicTimeZoneInformation.DynamicDaylightTimeDisabled;
-
- // check to see if we can use the key name returned from the API call
- if (!String.IsNullOrEmpty(dynamicTimeZoneInformation.TimeZoneKeyName)) {
- TimeZoneInfo zone;
- Exception ex;
-
- if (TryGetTimeZone(dynamicTimeZoneInformation.TimeZoneKeyName, dstDisabled, out zone, out ex, cachedData) == TimeZoneInfoResult.Success) {
- // successfully loaded the time zone from the registry
- return zone;
- }
- }
-
- // the key name was not returned or it pointed to a bogus entry - search for the entry ourselves
- id = FindIdFromTimeZoneInformation(timeZoneInformation, out dstDisabled);
-
- if (id != null) {
- TimeZoneInfo zone;
- Exception ex;
- if (TryGetTimeZone(id, dstDisabled, out zone, out ex, cachedData) == TimeZoneInfoResult.Success) {
- // successfully loaded the time zone from the registry
- return zone;
- }
- }
-
- // We could not find the data in the registry. Fall back to using
- // the data from the Win32 API
- return GetLocalTimeZoneFromWin32Data(timeZoneInformation, dstDisabled);
-
-#elif PLATFORM_UNIX // FEATURE_WIN32_REGISTRY
- // Without Registry support, create the TimeZoneInfo from a TZ file
- return GetLocalTimeZoneFromTzFile();
-#endif // FEATURE_WIN32_REGISTRY
- }
-
-
-#if PLATFORM_UNIX
- private static TimeZoneInfoResult TryGetTimeZoneByFile(string id, out TimeZoneInfo value, out Exception e)
- {
- value = null;
- e = null;
-
- string timeZoneDirectory = GetTimeZoneDirectory();
- string timeZoneFilePath = Path.Combine(timeZoneDirectory, id);
- byte[] rawData;
- try
- {
- rawData = File.ReadAllBytes(timeZoneFilePath);
- }
- catch (UnauthorizedAccessException ex)
- {
- e = ex;
- return TimeZoneInfoResult.SecurityException;
- }
- catch (FileNotFoundException ex)
- {
- e = ex;
- return TimeZoneInfoResult.TimeZoneNotFoundException;
- }
- catch (DirectoryNotFoundException ex)
- {
- e = ex;
- return TimeZoneInfoResult.TimeZoneNotFoundException;
- }
- catch (IOException ex)
- {
- e = new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_InvalidFileData", id, timeZoneFilePath), ex);
- return TimeZoneInfoResult.InvalidTimeZoneException;
- }
-
- value = GetTimeZoneFromTzData(rawData, id);
-
- if (value == null)
- {
- e = new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_InvalidFileData", id, timeZoneFilePath));
- return TimeZoneInfoResult.InvalidTimeZoneException;
- }
-
- return TimeZoneInfoResult.Success;
- }
-
/// <summary>
- /// Returns a collection of TimeZone Id values from the zone.tab file in the timeZoneDirectory.
+ /// Helper function that calculates the UTC offset for a dateTime in a timeZone.
+ /// This function assumes that the dateTime is already converted into the timeZone.
/// </summary>
- /// <remarks>
- /// Lines that start with # are comments and are skipped.
- /// </remarks>
- private static IEnumerable<string> GetTimeZoneIds(string timeZoneDirectory)
+ private static TimeSpan GetUtcOffset(DateTime time, TimeZoneInfo zone, TimeZoneInfoOptions flags)
{
- string[] zoneTabFileLines = null;
- try
- {
- zoneTabFileLines = File.ReadAllLines(Path.Combine(timeZoneDirectory, c_zoneTabFileName));
- }
- catch (IOException) { }
- catch (UnauthorizedAccessException) { }
+ TimeSpan baseOffset = zone.BaseUtcOffset;
+ AdjustmentRule rule = zone.GetAdjustmentRuleForTime(time);
- List<string> timeZoneIds = new List<string>();
- if (zoneTabFileLines != null)
+ if (rule != null)
{
- foreach (string zoneTabFileLine in zoneTabFileLines)
+ baseOffset = baseOffset + rule.BaseUtcOffsetDelta;
+ if (rule.HasDaylightSaving)
{
- if (!string.IsNullOrEmpty(zoneTabFileLine) && !zoneTabFileLine.StartsWith("#"))
- {
- // the format of the line is "country-code \t coordinates \t TimeZone Id \t comments"
-
- int firstTabIndex = zoneTabFileLine.IndexOf('\t');
- if (firstTabIndex != -1)
- {
- int secondTabIndex = zoneTabFileLine.IndexOf('\t', firstTabIndex + 1);
- if (secondTabIndex != -1)
- {
- string timeZoneId;
- int startIndex = secondTabIndex + 1;
- int thirdTabIndex = zoneTabFileLine.IndexOf('\t', startIndex);
- if (thirdTabIndex != -1)
- {
- int length = thirdTabIndex - startIndex;
- timeZoneId = zoneTabFileLine.Substring(startIndex, length);
- }
- else
- {
- timeZoneId = zoneTabFileLine.Substring(startIndex);
- }
-
- if (!string.IsNullOrEmpty(timeZoneId))
- {
- timeZoneIds.Add(timeZoneId);
- }
- }
- }
- }
+ DaylightTimeStruct daylightTime = zone.GetDaylightTime(time.Year, rule);
+ bool isDaylightSavings = GetIsDaylightSavings(time, rule, daylightTime, flags);
+ baseOffset += (isDaylightSavings ? rule.DaylightDelta : TimeSpan.Zero /* FUTURE: rule.StandardDelta */);
}
}
- return timeZoneIds;
+ return baseOffset;
}
/// <summary>
- /// Gets the tzfile raw data for the current 'local' time zone using the following rules.
- /// 1. Read the TZ environment variable. If it is set, use it.
- /// 2. Look for the data in /etc/localtime.
- /// 3. Look for the data in GetTimeZoneDirectory()/localtime.
- /// 4. Use UTC if all else fails.
+ /// Helper function that calculates the UTC offset for a UTC-dateTime in a timeZone.
+ /// This function assumes that the dateTime is represented in UTC and has *not* already been converted into the timeZone.
/// </summary>
- private static bool TryGetLocalTzFile(out byte[] rawData, out string id)
+ private static TimeSpan GetUtcOffsetFromUtc(DateTime time, TimeZoneInfo zone)
{
- rawData = null;
- id = null;
- string tzVariable = GetTzEnvironmentVariable();
-
- // If the env var is null, use the localtime file
- if (tzVariable == null)
- {
- return
- TryLoadTzFile("/etc/localtime", ref rawData, ref id) ||
- TryLoadTzFile(Path.Combine(GetTimeZoneDirectory(), "localtime"), ref rawData, ref id);
- }
-
- // If it's empty, use UTC (TryGetLocalTzFile() should return false).
- if (tzVariable.Length == 0)
- {
- return false;
- }
-
- // Otherwise, use the path from the env var. If it's not absolute, make it relative
- // to the system timezone directory
- string tzFilePath;
- if (tzVariable[0] != '/')
- {
- id = tzVariable;
- tzFilePath = Path.Combine(GetTimeZoneDirectory(), tzVariable);
- }
- else
- {
- tzFilePath = tzVariable;
- }
- return TryLoadTzFile(tzFilePath, ref rawData, ref id);
- }
-
- private static string GetTzEnvironmentVariable()
- {
- string result = Environment.GetEnvironmentVariable(c_timeZoneEnvironmentVariable);
- if (!string.IsNullOrEmpty(result))
- {
- if (result[0] == ':')
- {
- // strip off the ':' prefix
- result = result.Substring(1);
- }
- }
-
- return result;
- }
-
- private static bool TryLoadTzFile(string tzFilePath, ref byte[] rawData, ref string id)
- {
- if (File.Exists(tzFilePath))
- {
- try
- {
- rawData = File.ReadAllBytes(tzFilePath);
- if (string.IsNullOrEmpty(id))
- {
- id = FindTimeZoneIdUsingReadLink(tzFilePath);
-
- if (string.IsNullOrEmpty(id))
- {
- id = FindTimeZoneId(rawData);
- }
- }
- return true;
- }
- catch (IOException) { }
- catch (SecurityException) { }
- catch (UnauthorizedAccessException) { }
- }
- return false;
+ bool isDaylightSavings;
+ return GetUtcOffsetFromUtc(time, zone, out isDaylightSavings);
}
/// <summary>
- /// Finds the time zone id by using 'readlink' on the path to see if tzFilePath is
- /// a symlink to a file
+ /// Helper function that calculates the UTC offset for a UTC-dateTime in a timeZone.
+ /// This function assumes that the dateTime is represented in UTC and has *not* already been converted into the timeZone.
/// </summary>
- private static string FindTimeZoneIdUsingReadLink(string tzFilePath)
+ private static TimeSpan GetUtcOffsetFromUtc(DateTime time, TimeZoneInfo zone, out bool isDaylightSavings)
{
- string id = null;
-
- StringBuilder symlinkPathBuilder = StringBuilderCache.Acquire(Path.MaxPath);
- bool result = Interop.GlobalizationInterop.ReadLink(tzFilePath, symlinkPathBuilder, (uint)symlinkPathBuilder.Capacity);
- if (result)
- {
- string symlinkPath = StringBuilderCache.GetStringAndRelease(symlinkPathBuilder);
- // time zone Ids have to point under the time zone directory
- string timeZoneDirectory = GetTimeZoneDirectory();
- if (symlinkPath.StartsWith(timeZoneDirectory))
- {
- id = symlinkPath.Substring(timeZoneDirectory.Length);
- }
- }
- else
- {
- StringBuilderCache.Release(symlinkPathBuilder);
- }
-
- return id;
+ bool isAmbiguousLocalDst;
+ return GetUtcOffsetFromUtc(time, zone, out isDaylightSavings, out isAmbiguousLocalDst);
}
/// <summary>
- /// Find the time zone id by searching all the tzfiles for the one that matches rawData
- /// and return its file name.
+ /// Helper function that calculates the UTC offset for a UTC-dateTime in a timeZone.
+ /// This function assumes that the dateTime is represented in UTC and has *not* already been converted into the timeZone.
/// </summary>
- private static string FindTimeZoneId(byte[] rawData)
- {
- // default to "Local" if we can't find the right tzfile
- string id = c_localId;
- string timeZoneDirectory = GetTimeZoneDirectory();
- string localtimeFilePath = Path.Combine(timeZoneDirectory, "localtime");
- string posixrulesFilePath = Path.Combine(timeZoneDirectory, "posixrules");
- byte[] buffer = new byte[rawData.Length];
-
- try
- {
- foreach (string filePath in Directory.EnumerateFiles(timeZoneDirectory, "*", SearchOption.AllDirectories))
- {
- // skip the localtime and posixrules file, since they won't give us the correct id
- if (!string.Equals(filePath, localtimeFilePath, StringComparison.OrdinalIgnoreCase)
- && !string.Equals(filePath, posixrulesFilePath, StringComparison.OrdinalIgnoreCase))
- {
- if (CompareTimeZoneFile(filePath, buffer, rawData))
- {
- // if all bytes are the same, this must be the right tz file
- id = filePath;
-
- // strip off the root time zone directory
- if (id.StartsWith(timeZoneDirectory))
- {
- id = id.Substring(timeZoneDirectory.Length);
- }
- break;
- }
- }
- }
- }
- catch (IOException) { }
- catch (SecurityException) { }
- catch (UnauthorizedAccessException) { }
-
- return id;
- }
-
- private static bool CompareTimeZoneFile(string filePath, byte[] buffer, byte[] rawData)
- {
- try
- {
- using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
- {
- if (stream.Length == rawData.Length)
- {
- int index = 0;
- int count = rawData.Length;
-
- while (count > 0)
- {
- int n = stream.Read(buffer, index, count);
- if (n == 0)
- __Error.EndOfFile();
-
- int end = index + n;
- for (; index < end; index++)
- {
- if (buffer[index] != rawData[index])
- {
- return false;
- }
- }
-
- count -= n;
- }
-
- return true;
- }
- }
- }
- catch (IOException) { }
- catch (SecurityException) { }
- catch (UnauthorizedAccessException) { }
-
- return false;
- }
-
- //
- // GetLocalTimeZoneFromTzFile -
- //
- // Helper function used by 'GetLocalTimeZone()' - this function wraps the call
- // for loading time zone data from computers without Registry support.
- //
- // The TryGetLocalTzFile() call returns a Byte[] containing the compiled tzfile.
- //
- static private TimeZoneInfo GetLocalTimeZoneFromTzFile()
- {
- byte[] rawData;
- string id;
- if (TryGetLocalTzFile(out rawData, out id))
- {
- TimeZoneInfo result = GetTimeZoneFromTzData(rawData, id);
- if (result != null)
- {
- return result;
- }
- }
-
- // if we can't find a local time zone, return UTC
- return Utc;
- }
-
- private static TimeZoneInfo GetTimeZoneFromTzData(byte[] rawData, string id)
+ internal static TimeSpan GetUtcOffsetFromUtc(DateTime time, TimeZoneInfo zone, out bool isDaylightSavings, out bool isAmbiguousLocalDst)
{
- if (rawData != null)
- {
- try
- {
- return new TimeZoneInfo(rawData, id, false); // create a TimeZoneInfo instance from the TZif data w/ DST support
- }
- catch (ArgumentException) { }
- catch (InvalidTimeZoneException) { }
- try
- {
- return new TimeZoneInfo(rawData, id, true); // create a TimeZoneInfo instance from the TZif data w/o DST support
- }
- catch (ArgumentException) { }
- catch (InvalidTimeZoneException) { }
- }
-
- return null;
- }
-
- private static string GetTimeZoneDirectory()
- {
- string tzDirectory = Environment.GetEnvironmentVariable(c_timeZoneDirectoryEnvironmentVariable);
-
- if (tzDirectory == null)
- {
- tzDirectory = c_defaultTimeZoneDirectory;
- }
- else if (!tzDirectory.EndsWith(Path.DirectorySeparatorChar))
- {
- tzDirectory += Path.DirectorySeparatorChar;
- }
-
- return tzDirectory;
- }
-#elif FEATURE_WIN32_REGISTRY // PLATFORM_UNIX
-
- //
- // GetLocalTimeZoneFromWin32Data -
- //
- // Helper function used by 'GetLocalTimeZone()' - this function wraps a bunch of
- // try/catch logic for handling the TimeZoneInfo private constructor that takes
- // a Win32Native.TimeZoneInformation structure.
- //
- static private TimeZoneInfo GetLocalTimeZoneFromWin32Data(Win32Native.TimeZoneInformation timeZoneInformation, Boolean dstDisabled) {
- // first try to create the TimeZoneInfo with the original 'dstDisabled' flag
- try {
- return new TimeZoneInfo(timeZoneInformation, dstDisabled);
- }
- catch (ArgumentException) {}
- catch (InvalidTimeZoneException) {}
-
- // if 'dstDisabled' was false then try passing in 'true' as a last ditch effort
- if (!dstDisabled) {
- try {
- return new TimeZoneInfo(timeZoneInformation, true);
- }
- catch (ArgumentException) {}
- catch (InvalidTimeZoneException) {}
- }
-
- // the data returned from Windows is completely bogus; return a dummy entry
- return CreateCustomTimeZone(c_localId, TimeSpan.Zero, c_localId, c_localId);
- }
-#endif // PLATFORM_UNIX
-
- //
- // FindSystemTimeZoneById -
- //
- // Helper function for retrieving a TimeZoneInfo object by <time_zone_name>.
- // This function wraps the logic necessary to keep the private
- // SystemTimeZones cache in working order
- //
- // This function will either return a valid TimeZoneInfo instance or
- // it will throw 'InvalidTimeZoneException' / 'TimeZoneNotFoundException'.
- //
- static public TimeZoneInfo FindSystemTimeZoneById(string id) {
-
- // Special case for Utc as it will not exist in the dictionary with the rest
- // of the system time zones. There is no need to do this check for Local.Id
- // since Local is a real time zone that exists in the dictionary cache
- if (String.Compare(id, c_utcId, StringComparison.OrdinalIgnoreCase) == 0) {
- return TimeZoneInfo.Utc;
- }
-
- if (id == null) {
- throw new ArgumentNullException(nameof(id));
- }
- else if (!IsValidSystemTimeZoneId(id)) {
- throw new TimeZoneNotFoundException(Environment.GetResourceString("TimeZoneNotFound_MissingData", id));
- }
-
- TimeZoneInfo value;
- Exception e;
-
- TimeZoneInfoResult result;
-
- CachedData cachedData = s_cachedData;
-
- lock (cachedData) {
- result = TryGetTimeZone(id, false, out value, out e, cachedData);
- }
-
- if (result == TimeZoneInfoResult.Success) {
- return value;
- }
- else if (result == TimeZoneInfoResult.InvalidTimeZoneException) {
-#if FEATURE_WIN32_REGISTRY
- throw new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_InvalidRegistryData", id), e);
-#elif PLATFORM_UNIX
- Debug.Assert(e is InvalidTimeZoneException,
- "TryGetTimeZone must create an InvalidTimeZoneException when it returns TimeZoneInfoResult.InvalidTimeZoneException");
- throw e;
-#endif
- }
- else if (result == TimeZoneInfoResult.SecurityException) {
-#if FEATURE_WIN32_REGISTRY
- throw new SecurityException(Environment.GetResourceString("Security_CannotReadRegistryData", id), e);
-#elif PLATFORM_UNIX
- throw new SecurityException(Environment.GetResourceString("Security_CannotReadFileData", id), e);
-#endif
- }
- else {
- throw new TimeZoneNotFoundException(Environment.GetResourceString("TimeZoneNotFound_MissingData", id), e);
- }
- }
-
- private static bool IsValidSystemTimeZoneId(string id)
- {
- bool isValid = id.Length != 0 && !id.Contains("\0");
-
-#if FEATURE_WIN32_REGISTRY
- isValid &= id.Length <= c_maxKeyLength;
-#endif // FEATURE_WIN32_REGISTRY
-
- return isValid;
- }
-
- //
- // GetUtcOffset -
- //
- // Helper function that calculates the UTC offset for a dateTime in a timeZone.
- // This function assumes that the dateTime is already converted into the timeZone.
- //
- static private TimeSpan GetUtcOffset(DateTime time, TimeZoneInfo zone, TimeZoneInfoOptions flags) {
- TimeSpan baseOffset = zone.BaseUtcOffset;
- AdjustmentRule rule = zone.GetAdjustmentRuleForTime(time);
-
- if (rule != null) {
- baseOffset = baseOffset + rule.BaseUtcOffsetDelta;
- if (rule.HasDaylightSaving) {
- DaylightTimeStruct daylightTime = zone.GetDaylightTime(time.Year, rule);
- Boolean isDaylightSavings = GetIsDaylightSavings(time, rule, daylightTime, flags);
- baseOffset += (isDaylightSavings ? rule.DaylightDelta : TimeSpan.Zero /* FUTURE: rule.StandardDelta */);
- }
- }
-
- return baseOffset;
- }
-
-
- //
- // GetUtcOffsetFromUtc -
- //
- // Helper function that calculates the UTC offset for a UTC-dateTime in a timeZone.
- // This function assumes that the dateTime is represented in UTC and has *not*
- // already been converted into the timeZone.
- //
- static private TimeSpan GetUtcOffsetFromUtc(DateTime time, TimeZoneInfo zone) {
- Boolean isDaylightSavings;
- return GetUtcOffsetFromUtc(time, zone, out isDaylightSavings);
- }
-
- static private TimeSpan GetUtcOffsetFromUtc(DateTime time, TimeZoneInfo zone, out Boolean isDaylightSavings) {
- Boolean isAmbiguousLocalDst;
- return GetUtcOffsetFromUtc(time, zone, out isDaylightSavings, out isAmbiguousLocalDst);
- }
-
- // DateTime.Now fast path that avoids allocating an historically accurate TimeZoneInfo.Local and just creates a 1-year (current year) accurate time zone
- static internal TimeSpan GetDateTimeNowUtcOffsetFromUtc(DateTime time, out Boolean isAmbiguousLocalDst) {
- Boolean isDaylightSavings = false;
-#if FEATURE_WIN32_REGISTRY
- isAmbiguousLocalDst = false;
- TimeSpan baseOffset;
- int timeYear = time.Year;
-
- OffsetAndRule match = s_cachedData.GetOneYearLocalFromUtc(timeYear);
- baseOffset = match.offset;
-
- if (match.rule != null) {
- baseOffset = baseOffset + match.rule.BaseUtcOffsetDelta;
- if (match.rule.HasDaylightSaving) {
- isDaylightSavings = GetIsDaylightSavingsFromUtc(time, timeYear, match.offset, match.rule, out isAmbiguousLocalDst, TimeZoneInfo.Local);
- baseOffset += (isDaylightSavings ? match.rule.DaylightDelta : TimeSpan.Zero /* FUTURE: rule.StandardDelta */);
- }
- }
- return baseOffset;
-#elif PLATFORM_UNIX
- // Use the standard code path for the Macintosh since there isn't a faster way of handling current-year-only time zones
- return GetUtcOffsetFromUtc(time, TimeZoneInfo.Local, out isDaylightSavings, out isAmbiguousLocalDst);
-#endif // FEATURE_WIN32_REGISTRY
- }
-
- static internal TimeSpan GetUtcOffsetFromUtc(DateTime time, TimeZoneInfo zone, out Boolean isDaylightSavings, out Boolean isAmbiguousLocalDst) {
isDaylightSavings = false;
isAmbiguousLocalDst = false;
TimeSpan baseOffset = zone.BaseUtcOffset;
- Int32 year;
+ int year;
AdjustmentRule rule;
- if (time > s_maxDateOnly) {
+ if (time > s_maxDateOnly)
+ {
rule = zone.GetAdjustmentRuleForTime(DateTime.MaxValue);
year = 9999;
}
- else if (time < s_minDateOnly) {
+ else if (time < s_minDateOnly)
+ {
rule = zone.GetAdjustmentRuleForTime(DateTime.MinValue);
year = 1;
}
- else {
+ else
+ {
rule = zone.GetAdjustmentRuleForTime(time, dateTimeisUtc: true);
- // As we get the associated rule using the adjusted targetTime, we should use the adjusted year (targetTime.Year) too as after adding the baseOffset,
+ // As we get the associated rule using the adjusted targetTime, we should use the adjusted year (targetTime.Year) too as after adding the baseOffset,
// sometimes the year value can change if the input datetime was very close to the beginning or the end of the year. Examples of such cases:
// Libya Standard Time when used with the date 2011-12-31T23:59:59.9999999Z
// "W. Australia Standard Time" used with date 2005-12-31T23:59:00.0000000Z
@@ -2712,10 +1697,12 @@ namespace System {
year = targetTime.Year;
}
- if (rule != null) {
+ if (rule != null)
+ {
baseOffset = baseOffset + rule.BaseUtcOffsetDelta;
- if (rule.HasDaylightSaving) {
- isDaylightSavings = GetIsDaylightSavingsFromUtc(time, year, zone.m_baseUtcOffset, rule, out isAmbiguousLocalDst, zone);
+ if (rule.HasDaylightSaving)
+ {
+ isDaylightSavings = GetIsDaylightSavingsFromUtc(time, year, zone._baseUtcOffset, rule, out isAmbiguousLocalDst, zone);
baseOffset += (isDaylightSavings ? rule.DaylightDelta : TimeSpan.Zero /* FUTURE: rule.StandardDelta */);
}
}
@@ -2723,140 +1710,28 @@ namespace System {
return baseOffset;
}
-#if FEATURE_WIN32_REGISTRY
- //
- // TransitionTimeFromTimeZoneInformation -
- //
- // Converts a Win32Native.RegistryTimeZoneInformation (REG_TZI_FORMAT struct) to a TransitionTime
- //
- // * when the argument 'readStart' is true the corresponding daylightTransitionTimeStart field is read
- // * when the argument 'readStart' is false the corresponding dayightTransitionTimeEnd field is read
- //
- static private bool TransitionTimeFromTimeZoneInformation(Win32Native.RegistryTimeZoneInformation timeZoneInformation, out TransitionTime transitionTime, bool readStartDate) {
- //
- // SYSTEMTIME -
- //
- // If the time zone does not support daylight saving time or if the caller needs
- // to disable daylight saving time, the wMonth member in the SYSTEMTIME structure
- // must be zero. If this date is specified, the DaylightDate value in the
- // TIME_ZONE_INFORMATION structure must also be specified. Otherwise, the system
- // assumes the time zone data is invalid and no changes will be applied.
- //
- bool supportsDst = (timeZoneInformation.StandardDate.Month != 0);
-
- if (!supportsDst) {
- transitionTime = default(TransitionTime);
- return false;
- }
-
- //
- // SYSTEMTIME -
- //
- // * FixedDateRule -
- // If the Year member is not zero, the transition date is absolute; it will only occur one time
- //
- // * FloatingDateRule -
- // To select the correct day in the month, set the Year member to zero, the Hour and Minute
- // members to the transition time, the DayOfWeek member to the appropriate weekday, and the
- // Day member to indicate the occurence of the day of the week within the month (first through fifth).
- //
- // Using this notation, specify the 2:00a.m. on the first Sunday in April as follows:
- // Hour = 2,
- // Month = 4,
- // DayOfWeek = 0,
- // Day = 1.
- //
- // Specify 2:00a.m. on the last Thursday in October as follows:
- // Hour = 2,
- // Month = 10,
- // DayOfWeek = 4,
- // Day = 5.
- //
- if (readStartDate) {
- //
- // read the "daylightTransitionStart"
- //
- if (timeZoneInformation.DaylightDate.Year == 0) {
- transitionTime = TransitionTime.CreateFloatingDateRule(
- new DateTime(1, /* year */
- 1, /* month */
- 1, /* day */
- timeZoneInformation.DaylightDate.Hour,
- timeZoneInformation.DaylightDate.Minute,
- timeZoneInformation.DaylightDate.Second,
- timeZoneInformation.DaylightDate.Milliseconds),
- timeZoneInformation.DaylightDate.Month,
- timeZoneInformation.DaylightDate.Day, /* Week 1-5 */
- (DayOfWeek) timeZoneInformation.DaylightDate.DayOfWeek);
- }
- else {
- transitionTime = TransitionTime.CreateFixedDateRule(
- new DateTime(1, /* year */
- 1, /* month */
- 1, /* day */
- timeZoneInformation.DaylightDate.Hour,
- timeZoneInformation.DaylightDate.Minute,
- timeZoneInformation.DaylightDate.Second,
- timeZoneInformation.DaylightDate.Milliseconds),
- timeZoneInformation.DaylightDate.Month,
- timeZoneInformation.DaylightDate.Day);
- }
- }
- else {
- //
- // read the "daylightTransitionEnd"
- //
- if (timeZoneInformation.StandardDate.Year == 0) {
- transitionTime = TransitionTime.CreateFloatingDateRule(
- new DateTime(1, /* year */
- 1, /* month */
- 1, /* day */
- timeZoneInformation.StandardDate.Hour,
- timeZoneInformation.StandardDate.Minute,
- timeZoneInformation.StandardDate.Second,
- timeZoneInformation.StandardDate.Milliseconds),
- timeZoneInformation.StandardDate.Month,
- timeZoneInformation.StandardDate.Day, /* Week 1-5 */
- (DayOfWeek) timeZoneInformation.StandardDate.DayOfWeek);
- }
- else {
- transitionTime = TransitionTime.CreateFixedDateRule(
- new DateTime(1, /* year */
- 1, /* month */
- 1, /* day */
- timeZoneInformation.StandardDate.Hour,
- timeZoneInformation.StandardDate.Minute,
- timeZoneInformation.StandardDate.Second,
- timeZoneInformation.StandardDate.Milliseconds),
- timeZoneInformation.StandardDate.Month,
- timeZoneInformation.StandardDate.Day);
- }
- }
-
- return true;
- }
-#endif // FEATURE_WIN32_REGISTRY
-
- //
- // TransitionTimeToDateTime -
- //
- // Helper function that converts a year and TransitionTime into a DateTime
- //
- internal static DateTime TransitionTimeToDateTime(Int32 year, TransitionTime transitionTime) {
+ /// <summary>
+ /// Helper function that converts a year and TransitionTime into a DateTime.
+ /// </summary>
+ internal static DateTime TransitionTimeToDateTime(int year, TransitionTime transitionTime)
+ {
DateTime value;
DateTime timeOfDay = transitionTime.TimeOfDay;
- if (transitionTime.IsFixedDateRule) {
+ if (transitionTime.IsFixedDateRule)
+ {
// create a DateTime from the passed in year and the properties on the transitionTime
// if the day is out of range for the month then use the last day of the month
- Int32 day = DateTime.DaysInMonth(year, transitionTime.Month);
+ int day = DateTime.DaysInMonth(year, transitionTime.Month);
- value = new DateTime(year, transitionTime.Month, (day < transitionTime.Day) ? day : transitionTime.Day,
+ value = new DateTime(year, transitionTime.Month, (day < transitionTime.Day) ? day : transitionTime.Day,
timeOfDay.Hour, timeOfDay.Minute, timeOfDay.Second, timeOfDay.Millisecond);
}
- else {
- if (transitionTime.Week <= 4) {
+ else
+ {
+ if (transitionTime.Week <= 4)
+ {
//
// Get the (transitionTime.Week)th Sunday.
//
@@ -2865,31 +1740,36 @@ namespace System {
int dayOfWeek = (int)value.DayOfWeek;
int delta = (int)transitionTime.DayOfWeek - dayOfWeek;
- if (delta < 0) {
+ if (delta < 0)
+ {
delta += 7;
}
delta += 7 * (transitionTime.Week - 1);
- if (delta > 0) {
+ if (delta > 0)
+ {
value = value.AddDays(delta);
}
}
- else {
+ else
+ {
//
// If TransitionWeek is greater than 4, we will get the last week.
//
- Int32 daysInMonth = DateTime.DaysInMonth(year, transitionTime.Month);
+ int daysInMonth = DateTime.DaysInMonth(year, transitionTime.Month);
value = new DateTime(year, transitionTime.Month, daysInMonth,
timeOfDay.Hour, timeOfDay.Minute, timeOfDay.Second, timeOfDay.Millisecond);
// This is the day of week for the last day of the month.
int dayOfWeek = (int)value.DayOfWeek;
int delta = dayOfWeek - (int)transitionTime.DayOfWeek;
- if (delta < 0) {
+ if (delta < 0)
+ {
delta += 7;
}
- if (delta > 0) {
+ if (delta > 0)
+ {
value = value.AddDays(-delta);
}
}
@@ -2897,598 +1777,56 @@ namespace System {
return value;
}
-#if FEATURE_WIN32_REGISTRY
- //
- // TryCreateAdjustmentRules -
- //
- // Helper function that takes
- // 1. a string representing a <time_zone_name> registry key name
- // 2. a RegistryTimeZoneInformation struct containing the default rule
- // 3. an AdjustmentRule[] out-parameter
- //
- // returns
- // TimeZoneInfoResult.InvalidTimeZoneException,
- // TimeZoneInfoResult.TimeZoneNotFoundException,
- // TimeZoneInfoResult.Success
- //
- // Optional, Dynamic Time Zone Registry Data
- // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- //
- // HKLM
- // Software
- // Microsoft
- // Windows NT
- // CurrentVersion
- // Time Zones
- // <time_zone_name>
- // Dynamic DST
- // * "FirstEntry" REG_DWORD "1980"
- // First year in the table. If the current year is less than this value,
- // this entry will be used for DST boundaries
- // * "LastEntry" REG_DWORD "2038"
- // Last year in the table. If the current year is greater than this value,
- // this entry will be used for DST boundaries"
- // * "<year1>" REG_BINARY REG_TZI_FORMAT
- // See Win32Native.RegistryTimeZoneInformation
- // * "<year2>" REG_BINARY REG_TZI_FORMAT
- // See Win32Native.RegistryTimeZoneInformation
- // * "<year3>" REG_BINARY REG_TZI_FORMAT
- // See Win32Native.RegistryTimeZoneInformation
- //
- // This method expects that its caller has already Asserted RegistryPermission.Read
- //
- static private bool TryCreateAdjustmentRules(string id, Win32Native.RegistryTimeZoneInformation defaultTimeZoneInformation, out AdjustmentRule[] rules, out Exception e, int defaultBaseUtcOffset) {
- e = null;
-
- try {
- using (RegistryKey dynamicKey = Registry.LocalMachine.OpenSubKey(
- c_timeZonesRegistryHive + "\\" + id + "\\Dynamic DST",
- false)) {
- if (dynamicKey == null) {
- AdjustmentRule rule = CreateAdjustmentRuleFromTimeZoneInformation(
- defaultTimeZoneInformation, DateTime.MinValue.Date, DateTime.MaxValue.Date, defaultBaseUtcOffset);
-
- if (rule == null)
- {
- rules = null;
- }
- else
- {
- rules = new AdjustmentRule[1];
- rules[0] = rule;
- }
-
- return true;
- }
-
- //
- // loop over all of the "<time_zone_name>\Dynamic DST" hive entries
- //
- // read FirstEntry {MinValue - (year1, 12, 31)}
- // read MiddleEntry {(yearN, 1, 1) - (yearN, 12, 31)}
- // read LastEntry {(yearN, 1, 1) - MaxValue }
-
- // read the FirstEntry and LastEntry key values (ex: "1980", "2038")
- Int32 first = (Int32)dynamicKey.GetValue(c_firstEntryValue, -1, RegistryValueOptions.None);
- Int32 last = (Int32)dynamicKey.GetValue(c_lastEntryValue, -1, RegistryValueOptions.None);
-
- if (first == -1 || last == -1 || first > last)
- {
- rules = null;
- return false;
- }
-
- // read the first year entry
- Win32Native.RegistryTimeZoneInformation dtzi;
- Byte[] regValue = dynamicKey.GetValue(first.ToString(CultureInfo.InvariantCulture), null, RegistryValueOptions.None) as Byte[];
- if (regValue == null || regValue.Length != c_regByteLength)
- {
- rules = null;
- return false;
- }
- dtzi = new Win32Native.RegistryTimeZoneInformation(regValue);
-
- if (first == last)
- {
- // there is just 1 dynamic rule for this time zone.
- AdjustmentRule rule = CreateAdjustmentRuleFromTimeZoneInformation(dtzi, DateTime.MinValue.Date, DateTime.MaxValue.Date, defaultBaseUtcOffset);
-
- if (rule == null)
- {
- rules = null;
- }
- else
- {
- rules = new AdjustmentRule[1];
- rules[0] = rule;
- }
-
- return true;
- }
-
- List<AdjustmentRule> rulesList = new List<AdjustmentRule>(1);
-
- // there are more than 1 dynamic rules for this time zone.
- AdjustmentRule firstRule = CreateAdjustmentRuleFromTimeZoneInformation(
- dtzi,
- DateTime.MinValue.Date, // MinValue
- new DateTime(first, 12, 31), // December 31, <FirstYear>
- defaultBaseUtcOffset);
- if (firstRule != null)
- {
- rulesList.Add(firstRule);
- }
-
- // read the middle year entries
- for (Int32 i = first + 1; i < last; i++)
- {
- regValue = dynamicKey.GetValue(i.ToString(CultureInfo.InvariantCulture), null, RegistryValueOptions.None) as Byte[];
- if (regValue == null || regValue.Length != c_regByteLength)
- {
- rules = null;
- return false;
- }
- dtzi = new Win32Native.RegistryTimeZoneInformation(regValue);
- AdjustmentRule middleRule = CreateAdjustmentRuleFromTimeZoneInformation(
- dtzi,
- new DateTime(i, 1, 1), // January 01, <Year>
- new DateTime(i, 12, 31), // December 31, <Year>
- defaultBaseUtcOffset);
- if (middleRule != null)
- {
- rulesList.Add(middleRule);
- }
- }
- // read the last year entry
- regValue = dynamicKey.GetValue(last.ToString(CultureInfo.InvariantCulture), null, RegistryValueOptions.None) as Byte[];
- dtzi = new Win32Native.RegistryTimeZoneInformation(regValue);
- if (regValue == null || regValue.Length != c_regByteLength)
- {
- rules = null;
- return false;
- }
- AdjustmentRule lastRule = CreateAdjustmentRuleFromTimeZoneInformation(
- dtzi,
- new DateTime(last, 1, 1), // January 01, <LastYear>
- DateTime.MaxValue.Date, // MaxValue
- defaultBaseUtcOffset);
- if (lastRule != null)
- {
- rulesList.Add(lastRule);
- }
-
- // convert the ArrayList to an AdjustmentRule array
- rules = rulesList.ToArray();
- if (rules != null && rules.Length == 0)
- {
- rules = null;
- }
- } // end of: using (RegistryKey dynamicKey...
- }
- catch (InvalidCastException ex) {
- // one of the RegistryKey.GetValue calls could not be cast to an expected value type
- rules = null;
- e = ex;
- return false;
- }
- catch (ArgumentOutOfRangeException ex) {
- rules = null;
- e = ex;
- return false;
- }
- catch (ArgumentException ex) {
- rules = null;
- e = ex;
- return false;
- }
- return true;
- }
-
- //
- // TryCompareStandardDate -
- //
- // Helper function that compares the StandardBias and StandardDate portion a
- // TimeZoneInformation struct to a time zone registry entry
- //
- static private Boolean TryCompareStandardDate(Win32Native.TimeZoneInformation timeZone, Win32Native.RegistryTimeZoneInformation registryTimeZoneInfo) {
- return timeZone.Bias == registryTimeZoneInfo.Bias
- && timeZone.StandardBias == registryTimeZoneInfo.StandardBias
- && timeZone.StandardDate.Year == registryTimeZoneInfo.StandardDate.Year
- && timeZone.StandardDate.Month == registryTimeZoneInfo.StandardDate.Month
- && timeZone.StandardDate.DayOfWeek == registryTimeZoneInfo.StandardDate.DayOfWeek
- && timeZone.StandardDate.Day == registryTimeZoneInfo.StandardDate.Day
- && timeZone.StandardDate.Hour == registryTimeZoneInfo.StandardDate.Hour
- && timeZone.StandardDate.Minute == registryTimeZoneInfo.StandardDate.Minute
- && timeZone.StandardDate.Second == registryTimeZoneInfo.StandardDate.Second
- && timeZone.StandardDate.Milliseconds == registryTimeZoneInfo.StandardDate.Milliseconds;
- }
-
- //
- // TryCompareTimeZoneInformationToRegistry -
- //
- // Helper function that compares a TimeZoneInformation struct to a time zone registry entry
- //
- static private Boolean TryCompareTimeZoneInformationToRegistry(Win32Native.TimeZoneInformation timeZone, string id, out Boolean dstDisabled)
+ /// <summary>
+ /// Helper function for retrieving a TimeZoneInfo object by <time_zone_name>.
+ ///
+ /// This function may return null.
+ ///
+ /// assumes cachedData lock is taken
+ /// </summary>
+ private static TimeZoneInfoResult TryGetTimeZone(string id, bool dstDisabled, out TimeZoneInfo value, out Exception e, CachedData cachedData, bool alwaysFallbackToLocalMachine = false)
{
- dstDisabled = false;
- try {
- PermissionSet permSet = new PermissionSet(PermissionState.None);
- permSet.AddPermission(new RegistryPermission(RegistryPermissionAccess.Read, c_timeZonesRegistryHivePermissionList));
- permSet.Assert();
-
- using (RegistryKey key = Registry.LocalMachine.OpenSubKey(
- c_timeZonesRegistryHive + "\\" + id,
- false))
- {
-
- if (key == null) {
- return false;
- }
-
- Win32Native.RegistryTimeZoneInformation registryTimeZoneInfo;
- Byte[] regValue = (Byte[])key.GetValue(c_timeZoneInfoValue, null, RegistryValueOptions.None) as Byte[];
- if (regValue == null || regValue.Length != c_regByteLength) return false;
- registryTimeZoneInfo = new Win32Native.RegistryTimeZoneInformation(regValue);
-
- //
- // first compare the bias and standard date information between the data from the Win32 API
- // and the data from the registry...
- //
- Boolean result = TryCompareStandardDate(timeZone, registryTimeZoneInfo);
-
- if (!result)
- {
- return false;
- }
-
- result = dstDisabled || CheckDaylightSavingTimeNotSupported(timeZone)
- //
- // since Daylight Saving Time is not "disabled", do a straight comparision between
- // the Win32 API data and the registry data ...
- //
- || (timeZone.DaylightBias == registryTimeZoneInfo.DaylightBias
- && timeZone.DaylightDate.Year == registryTimeZoneInfo.DaylightDate.Year
- && timeZone.DaylightDate.Month == registryTimeZoneInfo.DaylightDate.Month
- && timeZone.DaylightDate.DayOfWeek == registryTimeZoneInfo.DaylightDate.DayOfWeek
- && timeZone.DaylightDate.Day == registryTimeZoneInfo.DaylightDate.Day
- && timeZone.DaylightDate.Hour == registryTimeZoneInfo.DaylightDate.Hour
- && timeZone.DaylightDate.Minute == registryTimeZoneInfo.DaylightDate.Minute
- && timeZone.DaylightDate.Second == registryTimeZoneInfo.DaylightDate.Second
- && timeZone.DaylightDate.Milliseconds == registryTimeZoneInfo.DaylightDate.Milliseconds);
-
- // Finally compare the "StandardName" string value...
- //
- // we do not compare "DaylightName" as this TimeZoneInformation field may contain
- // either "StandardName" or "DaylightName" depending on the time of year and current machine settings
- //
- if (result)
- {
- String registryStandardName = key.GetValue(c_standardValue, String.Empty, RegistryValueOptions.None) as String;
- result = String.Compare(registryStandardName, timeZone.StandardName, StringComparison.Ordinal) == 0;
- }
- return result;
- }
- }
- finally {
- PermissionSet.RevertAssert();
- }
- }
-
- //
- // TryGetLocalizedNameByMuiNativeResource -
- //
- // Helper function for retrieving a localized string resource via MUI.
- // The function expects a string in the form: "@resource.dll, -123"
- //
- // "resource.dll" is a language-neutral portable executable (LNPE) file in
- // the %windir%\system32 directory. The OS is queried to find the best-fit
- // localized resource file for this LNPE (ex: %windir%\system32\en-us\resource.dll.mui).
- // If a localized resource file exists, we LoadString resource ID "123" and
- // return it to our caller.
- //
- // <SecurityKernel Critical="True" Ring="0">
- // <CallsSuppressUnmanagedCode Name="UnsafeNativeMethods.GetFileMUIPath(System.Int32,System.String,System.Text.StringBuilder,System.Int32&,System.Text.StringBuilder,System.Int32&,System.Int64&):System.Boolean" />
- // <ReferencesCritical Name="Method: TryGetLocalizedNameByNativeResource(String, Int32):String" Ring="1" />
- // </SecurityKernel>
- static private string TryGetLocalizedNameByMuiNativeResource(string resource) {
- if (String.IsNullOrEmpty(resource)) {
- return String.Empty;
- }
-
- // parse "@tzres.dll, -100"
- //
- // filePath = "C:\Windows\System32\tzres.dll"
- // resourceId = -100
- //
- string[] resources = resource.Split(new char[] {','}, StringSplitOptions.None);
- if (resources.Length != 2) {
- return String.Empty;
- }
-
- string filePath;
- int resourceId;
-
- // get the path to Windows\System32
- string system32 = Environment.UnsafeGetFolderPath(Environment.SpecialFolder.System);
-
- // trim the string "@tzres.dll" => "tzres.dll"
- string tzresDll = resources[0].TrimStart(new char[] {'@'});
-
- try {
- filePath = Path.Combine(system32, tzresDll);
- }
- catch (ArgumentException) {
- // there were probably illegal characters in the path
- return String.Empty;
- }
-
- if (!Int32.TryParse(resources[1], NumberStyles.Integer, CultureInfo.InvariantCulture, out resourceId)) {
- return String.Empty;
- }
- resourceId = -resourceId;
-
-
- try {
- StringBuilder fileMuiPath = StringBuilderCache.Acquire(Path.MaxPath);
- fileMuiPath.Length = Path.MaxPath;
- int fileMuiPathLength = Path.MaxPath;
- int languageLength = 0;
- Int64 enumerator = 0;
-
- Boolean succeeded = UnsafeNativeMethods.GetFileMUIPath(
- Win32Native.MUI_PREFERRED_UI_LANGUAGES,
- filePath, null /* language */, ref languageLength,
- fileMuiPath, ref fileMuiPathLength, ref enumerator);
- if (!succeeded) {
- StringBuilderCache.Release(fileMuiPath);
- return String.Empty;
- }
- return TryGetLocalizedNameByNativeResource(StringBuilderCache.GetStringAndRelease(fileMuiPath), resourceId);
- }
- catch (EntryPointNotFoundException) {
- return String.Empty;
- }
- }
-
- //
- // TryGetLocalizedNameByNativeResource -
- //
- // Helper function for retrieving a localized string resource via a native resource DLL.
- // The function expects a string in the form: "C:\Windows\System32\en-us\resource.dll"
- //
- // "resource.dll" is a language-specific resource DLL.
- // If the localized resource DLL exists, LoadString(resource) is returned.
- //
- static private string TryGetLocalizedNameByNativeResource(string filePath, int resource) {
- using (SafeLibraryHandle handle =
- UnsafeNativeMethods.LoadLibraryEx(filePath, IntPtr.Zero, Win32Native.LOAD_LIBRARY_AS_DATAFILE)) {
-
- if (!handle.IsInvalid) {
- StringBuilder localizedResource = StringBuilderCache.Acquire(Win32Native.LOAD_STRING_MAX_LENGTH);
- localizedResource.Length = Win32Native.LOAD_STRING_MAX_LENGTH;
-
- int result = UnsafeNativeMethods.LoadString(handle, resource,
- localizedResource, localizedResource.Length);
-
- if (result != 0) {
- return StringBuilderCache.GetStringAndRelease(localizedResource);
- }
- }
- }
- return String.Empty;
- }
-
- //
- // TryGetLocalizedNamesByRegistryKey -
- //
- // Helper function for retrieving the DisplayName, StandardName, and DaylightName from the registry
- //
- // The function first checks the MUI_ key-values, and if they exist, it loads the strings from the MUI
- // resource dll(s). When the keys do not exist, the function falls back to reading from the standard
- // key-values
- //
- // This method expects that its caller has already Asserted RegistryPermission.Read
- //
- static private Boolean TryGetLocalizedNamesByRegistryKey(RegistryKey key, out String displayName, out String standardName, out String daylightName) {
- displayName = String.Empty;
- standardName = String.Empty;
- daylightName = String.Empty;
-
- // read the MUI_ registry keys
- String displayNameMuiResource = key.GetValue(c_muiDisplayValue, String.Empty, RegistryValueOptions.None) as String;
- String standardNameMuiResource = key.GetValue(c_muiStandardValue, String.Empty, RegistryValueOptions.None) as String;
- String daylightNameMuiResource = key.GetValue(c_muiDaylightValue, String.Empty, RegistryValueOptions.None) as String;
-
- // try to load the strings from the native resource DLL(s)
- if (!String.IsNullOrEmpty(displayNameMuiResource)) {
- displayName = TryGetLocalizedNameByMuiNativeResource(displayNameMuiResource);
- }
-
- if (!String.IsNullOrEmpty(standardNameMuiResource)) {
- standardName = TryGetLocalizedNameByMuiNativeResource(standardNameMuiResource);
- }
-
- if (!String.IsNullOrEmpty(daylightNameMuiResource)) {
- daylightName = TryGetLocalizedNameByMuiNativeResource(daylightNameMuiResource);
- }
-
- // fallback to using the standard registry keys
- if (String.IsNullOrEmpty(displayName)) {
- displayName = key.GetValue(c_displayValue, String.Empty, RegistryValueOptions.None) as String;
- }
- if (String.IsNullOrEmpty(standardName)) {
- standardName = key.GetValue(c_standardValue, String.Empty, RegistryValueOptions.None) as String;
- }
- if (String.IsNullOrEmpty(daylightName)) {
- daylightName = key.GetValue(c_daylightValue, String.Empty, RegistryValueOptions.None) as String;
- }
-
- return true;
- }
-
- //
- // TryGetTimeZoneByRegistryKey -
- //
- // Helper function that takes a string representing a <time_zone_name> registry key name
- // and returns a TimeZoneInfo instance.
- //
- // returns
- // TimeZoneInfoResult.InvalidTimeZoneException,
- // TimeZoneInfoResult.TimeZoneNotFoundException,
- // TimeZoneInfoResult.SecurityException,
- // TimeZoneInfoResult.Success
- //
- //
- // Standard Time Zone Registry Data
- // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- // HKLM
- // Software
- // Microsoft
- // Windows NT
- // CurrentVersion
- // Time Zones
- // <time_zone_name>
- // * STD, REG_SZ "Standard Time Name"
- // (For OS installed zones, this will always be English)
- // * MUI_STD, REG_SZ "@tzres.dll,-1234"
- // Indirect string to localized resource for Standard Time,
- // add "%windir%\system32\" after "@"
- // * DLT, REG_SZ "Daylight Time Name"
- // (For OS installed zones, this will always be English)
- // * MUI_DLT, REG_SZ "@tzres.dll,-1234"
- // Indirect string to localized resource for Daylight Time,
- // add "%windir%\system32\" after "@"
- // * Display, REG_SZ "Display Name like (GMT-8:00) Pacific Time..."
- // * MUI_Display, REG_SZ "@tzres.dll,-1234"
- // Indirect string to localized resource for the Display,
- // add "%windir%\system32\" after "@"
- // * TZI, REG_BINARY REG_TZI_FORMAT
- // See Win32Native.RegistryTimeZoneInformation
- //
- static private TimeZoneInfoResult TryGetTimeZoneByRegistryKey(string id, out TimeZoneInfo value, out Exception e) {
- e = null;
-
- try {
- PermissionSet permSet = new PermissionSet(PermissionState.None);
- permSet.AddPermission(new RegistryPermission(RegistryPermissionAccess.Read, c_timeZonesRegistryHivePermissionList));
- permSet.Assert();
-
- using (RegistryKey key = Registry.LocalMachine.OpenSubKey(
- c_timeZonesRegistryHive + "\\" + id,
- false)) {
-
- if (key == null) {
- value = null;
- return TimeZoneInfoResult.TimeZoneNotFoundException;
- }
-
- Win32Native.RegistryTimeZoneInformation defaultTimeZoneInformation;
- Byte[] regValue = key.GetValue(c_timeZoneInfoValue, null, RegistryValueOptions.None) as Byte[];
- if (regValue == null || regValue.Length != c_regByteLength) {
- // the registry value could not be cast to a byte array
- value = null;
- return TimeZoneInfoResult.InvalidTimeZoneException;
- }
- defaultTimeZoneInformation = new Win32Native.RegistryTimeZoneInformation(regValue);
+ Debug.Assert(Monitor.IsEntered(cachedData));
- AdjustmentRule[] adjustmentRules;
- if (!TryCreateAdjustmentRules(id, defaultTimeZoneInformation, out adjustmentRules, out e, defaultTimeZoneInformation.Bias)) {
- value = null;
- return TimeZoneInfoResult.InvalidTimeZoneException;
- }
-
- string displayName;
- string standardName;
- string daylightName;
-
- if (!TryGetLocalizedNamesByRegistryKey(key, out displayName, out standardName, out daylightName)) {
- value = null;
- return TimeZoneInfoResult.InvalidTimeZoneException;
- }
-
- try {
- value = new TimeZoneInfo(
- id,
- new TimeSpan(0, -(defaultTimeZoneInformation.Bias), 0),
- displayName,
- standardName,
- daylightName,
- adjustmentRules,
- false);
-
- return TimeZoneInfoResult.Success;
- }
- catch (ArgumentException ex) {
- // TimeZoneInfo constructor can throw ArgumentException and InvalidTimeZoneException
- value = null;
- e = ex;
- return TimeZoneInfoResult.InvalidTimeZoneException;
- }
- catch (InvalidTimeZoneException ex) {
- // TimeZoneInfo constructor can throw ArgumentException and InvalidTimeZoneException
- value = null;
- e = ex;
- return TimeZoneInfoResult.InvalidTimeZoneException;
- }
-
- }
- }
- finally {
- PermissionSet.RevertAssert();
- }
- }
-#endif // FEATURE_WIN32_REGISTRY
-
-
- //
- // TryGetTimeZone -
- //
- // Helper function for retrieving a TimeZoneInfo object by <time_zone_name>.
- //
- // This function may return null.
- //
- // assumes cachedData lock is taken
- //
- static private TimeZoneInfoResult TryGetTimeZone(string id, Boolean dstDisabled, out TimeZoneInfo value, out Exception e, CachedData cachedData) {
TimeZoneInfoResult result = TimeZoneInfoResult.Success;
e = null;
TimeZoneInfo match = null;
// check the cache
- if (cachedData.m_systemTimeZones != null) {
- if (cachedData.m_systemTimeZones.TryGetValue(id, out match)) {
- if (dstDisabled && match.m_supportsDaylightSavingTime) {
+ if (cachedData._systemTimeZones != null)
+ {
+ if (cachedData._systemTimeZones.TryGetValue(id, out match))
+ {
+ if (dstDisabled && match._supportsDaylightSavingTime)
+ {
// we found a cache hit but we want a time zone without DST and this one has DST data
- value = CreateCustomTimeZone(match.m_id, match.m_baseUtcOffset, match.m_displayName, match.m_standardDisplayName);
+ value = CreateCustomTimeZone(match._id, match._baseUtcOffset, match._displayName, match._standardDisplayName);
}
- else {
- value = new TimeZoneInfo(match.m_id, match.m_baseUtcOffset, match.m_displayName, match.m_standardDisplayName,
- match.m_daylightDisplayName, match.m_adjustmentRules, false);
+ else
+ {
+ value = new TimeZoneInfo(match._id, match._baseUtcOffset, match._displayName, match._standardDisplayName,
+ match._daylightDisplayName, match._adjustmentRules, disableDaylightSavingTime: false);
}
return result;
}
}
- // fall back to reading from the local machine
- // when the cache is not fully populated
- if (!cachedData.m_allSystemTimeZonesRead) {
- result = TryGetTimeZoneFromLocalMachine(id, dstDisabled, out value, out e, cachedData);
- }
-#if PLATFORM_UNIX
+ // Fall back to reading from the local machine when the cache is not fully populated.
// On UNIX, there may be some tzfiles that aren't in the zones.tab file, and thus aren't returned from GetSystemTimeZones().
// If a caller asks for one of these zones before calling GetSystemTimeZones(), the time zone is returned successfully. But if
// GetSystemTimeZones() is called first, FindSystemTimeZoneById will throw TimeZoneNotFoundException, which is inconsistent.
- // To fix this, even if m_allSystemTimeZonesRead is true, try reading the tzfile from disk, but don't add the time zone to the
- // list returned from GetSystemTimeZones(). These time zones will only be available if asked for directly.
- else {
+ // To fix this, when 'alwaysFallbackToLocalMachine' is true, even if _allSystemTimeZonesRead is true, try reading the tzfile
+ // from disk, but don't add the time zone to the list returned from GetSystemTimeZones(). These time zones will only be
+ // available if asked for directly.
+ if (!cachedData._allSystemTimeZonesRead || alwaysFallbackToLocalMachine)
+ {
result = TryGetTimeZoneFromLocalMachine(id, dstDisabled, out value, out e, cachedData);
}
-#else
- else {
+ else
+ {
result = TimeZoneInfoResult.TimeZoneNotFoundException;
value = null;
}
-#endif // PLATFORM_UNIX
return result;
}
@@ -3498,28 +1836,24 @@ namespace System {
TimeZoneInfoResult result;
TimeZoneInfo match;
-#if FEATURE_WIN32_REGISTRY
- result = TryGetTimeZoneByRegistryKey(id, out match, out e);
-#elif PLATFORM_UNIX
- result = TryGetTimeZoneByFile(id, out match, out e);
-#endif // FEATURE_WIN32_REGISTRY
+ result = TryGetTimeZoneFromLocalMachine(id, out match, out e);
if (result == TimeZoneInfoResult.Success)
{
- if (cachedData.m_systemTimeZones == null)
- cachedData.m_systemTimeZones = new Dictionary<string, TimeZoneInfo>();
+ if (cachedData._systemTimeZones == null)
+ cachedData._systemTimeZones = new Dictionary<string, TimeZoneInfo>();
- cachedData.m_systemTimeZones.Add(id, match);
+ cachedData._systemTimeZones.Add(id, match);
- if (dstDisabled && match.m_supportsDaylightSavingTime)
+ if (dstDisabled && match._supportsDaylightSavingTime)
{
// we found a cache hit but we want a time zone without DST and this one has DST data
- value = CreateCustomTimeZone(match.m_id, match.m_baseUtcOffset, match.m_displayName, match.m_standardDisplayName);
+ value = CreateCustomTimeZone(match._id, match._baseUtcOffset, match._displayName, match._standardDisplayName);
}
else
{
- value = new TimeZoneInfo(match.m_id, match.m_baseUtcOffset, match.m_displayName, match.m_standardDisplayName,
- match.m_daylightDisplayName, match.m_adjustmentRules, false);
+ value = new TimeZoneInfo(match._id, match._baseUtcOffset, match._displayName, match._standardDisplayName,
+ match._daylightDisplayName, match._adjustmentRules, disableDaylightSavingTime: false);
}
}
else
@@ -3530,843 +1864,37 @@ namespace System {
return result;
}
-#if PLATFORM_UNIX
- // TZFILE(5) BSD File Formats Manual TZFILE(5)
- //
- // NAME
- // tzfile -- timezone information
- //
- // SYNOPSIS
- // #include "/usr/src/lib/libc/stdtime/tzfile.h"
- //
- // DESCRIPTION
- // The time zone information files used by tzset(3) begin with the magic
- // characters ``TZif'' to identify them as time zone information files, fol-
- // lowed by sixteen bytes reserved for future use, followed by four four-
- // byte values written in a ``standard'' byte order (the high-order byte of
- // the value is written first). These values are, in order:
- //
- // tzh_ttisgmtcnt The number of UTC/local indicators stored in the file.
- // tzh_ttisstdcnt The number of standard/wall indicators stored in the
- // file.
- // tzh_leapcnt The number of leap seconds for which data is stored in
- // the file.
- // tzh_timecnt The number of ``transition times'' for which data is
- // stored in the file.
- // tzh_typecnt The number of ``local time types'' for which data is
- // stored in the file (must not be zero).
- // tzh_charcnt The number of characters of ``time zone abbreviation
- // strings'' stored in the file.
- //
- // The above header is followed by tzh_timecnt four-byte values of type
- // long, sorted in ascending order. These values are written in ``stan-
- // dard'' byte order. Each is used as a transition time (as returned by
- // time(3)) at which the rules for computing local time change. Next come
- // tzh_timecnt one-byte values of type unsigned char; each one tells which
- // of the different types of ``local time'' types described in the file is
- // associated with the same-indexed transition time. These values serve as
- // indices into an array of ttinfo structures that appears next in the file;
- // these structures are defined as follows:
- //
- // struct ttinfo {
- // long tt_gmtoff;
- // int tt_isdst;
- // unsigned int tt_abbrind;
- // };
- //
- // Each structure is written as a four-byte value for tt_gmtoff of type
- // long, in a standard byte order, followed by a one-byte value for tt_isdst
- // and a one-byte value for tt_abbrind. In each structure, tt_gmtoff gives
- // the number of seconds to be added to UTC, tt_isdst tells whether tm_isdst
- // should be set by localtime(3) and tt_abbrind serves as an index into the
- // array of time zone abbreviation characters that follow the ttinfo struc-
- // ture(s) in the file.
- //
- // Then there are tzh_leapcnt pairs of four-byte values, written in standard
- // byte order; the first value of each pair gives the time (as returned by
- // time(3)) at which a leap second occurs; the second gives the total number
- // of leap seconds to be applied after the given time. The pairs of values
- // are sorted in ascending order by time.b
- //
- // Then there are tzh_ttisstdcnt standard/wall indicators, each stored as a
- // one-byte value; they tell whether the transition times associated with
- // local time types were specified as standard time or wall clock time, and
- // are used when a time zone file is used in handling POSIX-style time zone
- // environment variables.
- //
- // Finally there are tzh_ttisgmtcnt UTC/local indicators, each stored as a
- // one-byte value; they tell whether the transition times associated with
- // local time types were specified as UTC or local time, and are used when a
- // time zone file is used in handling POSIX-style time zone environment
- // variables.
- //
- // localtime uses the first standard-time ttinfo structure in the file (or
- // simply the first ttinfo structure in the absence of a standard-time
- // structure) if either tzh_timecnt is zero or the time argument is less
- // than the first transition time recorded in the file.
- //
- // SEE ALSO
- // ctime(3), time2posix(3), zic(8)
- //
- // BSD September 13, 1994 BSD
- //
- //
- //
- // TIME(3) BSD Library Functions Manual TIME(3)
- //
- // NAME
- // time -- get time of day
- //
- // LIBRARY
- // Standard C Library (libc, -lc)
- //
- // SYNOPSIS
- // #include <time.h>
- //
- // time_t
- // time(time_t *tloc);
- //
- // DESCRIPTION
- // The time() function returns the value of time in seconds since 0 hours, 0
- // minutes, 0 seconds, January 1, 1970, Coordinated Universal Time, without
- // including leap seconds. If an error occurs, time() returns the value
- // (time_t)-1.
- //
- // The return value is also stored in *tloc, provided that tloc is non-null.
- //
- // ERRORS
- // The time() function may fail for any of the reasons described in
- // gettimeofday(2).
- //
- // SEE ALSO
- // gettimeofday(2), ctime(3)
- //
- // STANDARDS
- // The time function conforms to IEEE Std 1003.1-2001 (``POSIX.1'').
- //
- // BUGS
- // Neither ISO/IEC 9899:1999 (``ISO C99'') nor IEEE Std 1003.1-2001
- // (``POSIX.1'') requires time() to set errno on failure; thus, it is impos-
- // sible for an application to distinguish the valid time value -1 (repre-
- // senting the last UTC second of 1969) from the error return value.
- //
- // Systems conforming to earlier versions of the C and POSIX standards
- // (including older versions of FreeBSD) did not set *tloc in the error
- // case.
- //
- // HISTORY
- // A time() function appeared in Version 6 AT&T UNIX.
- //
- // BSD July 18, 2003 BSD
- //
- //
- static private void TZif_GenerateAdjustmentRules(out AdjustmentRule[] rules, TimeSpan baseUtcOffset, DateTime[] dts, Byte[] typeOfLocalTime,
- TZifType[] transitionType, Boolean[] StandardTime, Boolean[] GmtTime, string futureTransitionsPosixFormat)
- {
- rules = null;
-
- if (dts.Length > 0)
- {
- int index = 0;
- List<AdjustmentRule> rulesList = new List<AdjustmentRule>();
-
- while (index <= dts.Length)
- {
- TZif_GenerateAdjustmentRule(ref index, baseUtcOffset, rulesList, dts, typeOfLocalTime, transitionType, StandardTime, GmtTime, futureTransitionsPosixFormat);
- }
-
- rules = rulesList.ToArray();
- if (rules != null && rules.Length == 0)
- {
- rules = null;
- }
- }
- }
-
- static private void TZif_GenerateAdjustmentRule(ref int index, TimeSpan timeZoneBaseUtcOffset, List<AdjustmentRule> rulesList, DateTime[] dts,
- Byte[] typeOfLocalTime, TZifType[] transitionTypes, Boolean[] StandardTime, Boolean[] GmtTime, string futureTransitionsPosixFormat)
- {
- // To generate AdjustmentRules, use the following approach:
- // The first AdjustmentRule will go from DateTime.MinValue to the first transition time greater than DateTime.MinValue.
- // Each middle AdjustmentRule wil go from dts[index-1] to dts[index].
- // The last AdjustmentRule will go from dts[dts.Length-1] to Datetime.MaxValue.
-
- // 0. Skip any DateTime.MinValue transition times. In newer versions of the tzfile, there
- // is a "big bang" transition time, which is before the year 0001. Since any times before year 0001
- // cannot be represented by DateTime, there is no reason to make AdjustmentRules for these unrepresentable time periods.
- // 1. If there are no DateTime.MinValue times, the first AdjustmentRule goes from DateTime.MinValue
- // to the first transition and uses the first standard transitionType (or the first transitionType if none of them are standard)
- // 2. Create an AdjustmentRule for each transition, i.e. from dts[index - 1] to dts[index].
- // This rule uses the transitionType[index - 1] and the whole AdjustmentRule only describes a single offset - either
- // all daylight savings, or all stanard time.
- // 3. After all the transitions are filled out, the last AdjustmentRule is created from either:
- // a. a POSIX-style timezone description ("futureTransitionsPosixFormat"), if there is one or
- // b. continue the last transition offset until DateTime.Max
-
- while (index < dts.Length && dts[index] == DateTime.MinValue)
- {
- index++;
- }
-
- if (index == 0)
- {
- TZifType transitionType = TZif_GetEarlyDateTransitionType(transitionTypes);
- DateTime endTransitionDate = dts[index];
-
- TimeSpan transitionOffset = TZif_CalculateTransitionOffsetFromBase(transitionType.UtcOffset, timeZoneBaseUtcOffset);
- TimeSpan daylightDelta = transitionType.IsDst ? transitionOffset : TimeSpan.Zero;
- TimeSpan baseUtcDelta = transitionType.IsDst ? TimeSpan.Zero : transitionOffset;
-
- AdjustmentRule r = AdjustmentRule.CreateAdjustmentRule(
- DateTime.MinValue,
- endTransitionDate.AddTicks(-1),
- daylightDelta,
- default(TransitionTime),
- default(TransitionTime),
- baseUtcDelta,
- noDaylightTransitions: true);
- rulesList.Add(r);
- }
- else if (index < dts.Length)
- {
- DateTime startTransitionDate = dts[index - 1];
- TZifType startTransitionType = transitionTypes[typeOfLocalTime[index - 1]];
-
- DateTime endTransitionDate = dts[index];
-
- TimeSpan transitionOffset = TZif_CalculateTransitionOffsetFromBase(startTransitionType.UtcOffset, timeZoneBaseUtcOffset);
- TimeSpan daylightDelta = startTransitionType.IsDst ? transitionOffset : TimeSpan.Zero;
- TimeSpan baseUtcDelta = startTransitionType.IsDst ? TimeSpan.Zero : transitionOffset;
-
- TransitionTime dstStart;
- if (startTransitionType.IsDst)
- {
- // the TransitionTime fields are not used when AdjustmentRule.NoDaylightTransitions == true.
- // However, there are some cases in the past where DST = true, and the daylight savings offset
- // now equals what the current BaseUtcOffset is. In that case, the AdjustmentRule.DaylightOffset
- // is going to be TimeSpan.Zero. But we still need to return 'true' from AdjustmentRule.HasDaylightSaving.
- // To ensure we always return true from HasDaylightSaving, make a "special" dstStart that will make the logic
- // in HasDaylightSaving return true.
- dstStart = TransitionTime.CreateFixedDateRule(DateTime.MinValue.AddMilliseconds(2), 1, 1);
- }
- else
- {
- dstStart = default(TransitionTime);
- }
-
- AdjustmentRule r = AdjustmentRule.CreateAdjustmentRule(
- startTransitionDate,
- endTransitionDate.AddTicks(-1),
- daylightDelta,
- dstStart,
- default(TransitionTime),
- baseUtcDelta,
- noDaylightTransitions: true);
- rulesList.Add(r);
- }
- else
- {
- // create the AdjustmentRule that will be used for all DateTimes after the last transition
-
- // NOTE: index == dts.Length
- DateTime startTransitionDate = dts[index - 1];
-
- if (!string.IsNullOrEmpty(futureTransitionsPosixFormat))
- {
- AdjustmentRule r = TZif_CreateAdjustmentRuleForPosixFormat(futureTransitionsPosixFormat, startTransitionDate, timeZoneBaseUtcOffset);
- if (r != null)
- {
- rulesList.Add(r);
- }
- }
- else
- {
- // just use the last transition as the rule which will be used until the end of time
-
- TZifType transitionType = transitionTypes[typeOfLocalTime[index - 1]];
- TimeSpan transitionOffset = TZif_CalculateTransitionOffsetFromBase(transitionType.UtcOffset, timeZoneBaseUtcOffset);
- TimeSpan daylightDelta = transitionType.IsDst ? transitionOffset : TimeSpan.Zero;
- TimeSpan baseUtcDelta = transitionType.IsDst ? TimeSpan.Zero : transitionOffset;
-
- AdjustmentRule r = AdjustmentRule.CreateAdjustmentRule(
- startTransitionDate,
- DateTime.MaxValue,
- daylightDelta,
- default(TransitionTime),
- default(TransitionTime),
- baseUtcDelta,
- noDaylightTransitions: true);
- rulesList.Add(r);
- }
- }
-
- index++;
- }
-
- private static TimeSpan TZif_CalculateTransitionOffsetFromBase(TimeSpan transitionOffset, TimeSpan timeZoneBaseUtcOffset)
- {
- TimeSpan result = transitionOffset - timeZoneBaseUtcOffset;
-
- // TZif supports seconds-level granularity with offsets but TimeZoneInfo only supports minutes since it aligns
- // with DateTimeOffset, SQL Server, and the W3C XML Specification
- if (result.Ticks % TimeSpan.TicksPerMinute != 0)
- {
- result = new TimeSpan(result.Hours, result.Minutes, 0);
- }
-
- return result;
- }
-
/// <summary>
- /// Gets the first standard-time transition type, or simply the first transition type
- /// if there are no standard transition types.
- /// </summary>>
- /// <remarks>
- /// from 'man tzfile':
- /// localtime(3) uses the first standard-time ttinfo structure in the file
- /// (or simply the first ttinfo structure in the absence of a standard-time
- /// structure) if either tzh_timecnt is zero or the time argument is less
- /// than the first transition time recorded in the file.
- /// </remarks>
- private static TZifType TZif_GetEarlyDateTransitionType(TZifType[] transitionTypes)
- {
- for (int i = 0; i < transitionTypes.Length; i++)
- {
- TZifType transitionType = transitionTypes[i];
- if (!transitionType.IsDst)
- {
- return transitionType;
- }
- }
-
- if (transitionTypes.Length > 0)
- {
- return transitionTypes[0];
- }
-
- throw new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_NoTTInfoStructures"));
- }
-
- /// <summary>
- /// Creates an AdjustmentRule given the POSIX TZ environment variable string.
+ /// Helper function that validates the TimeSpan is within +/- 14.0 hours
/// </summary>
- /// <remarks>
- /// See http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html for the format and semantics of this POSX string.
- /// </remarks>
- private static AdjustmentRule TZif_CreateAdjustmentRuleForPosixFormat(string posixFormat, DateTime startTransitionDate, TimeSpan timeZoneBaseUtcOffset)
- {
- string standardName;
- string standardOffset;
- string daylightSavingsName;
- string daylightSavingsOffset;
- string start;
- string startTime;
- string end;
- string endTime;
-
- if (TZif_ParsePosixFormat(posixFormat, out standardName, out standardOffset, out daylightSavingsName,
- out daylightSavingsOffset, out start, out startTime, out end, out endTime))
- {
- // a valid posixFormat has at least standardName and standardOffset
-
- TimeSpan? parsedBaseOffset = TZif_ParseOffsetString(standardOffset);
- if (parsedBaseOffset.HasValue)
- {
- TimeSpan baseOffset = parsedBaseOffset.Value.Negate(); // offsets are backwards in POSIX notation
- baseOffset = TZif_CalculateTransitionOffsetFromBase(baseOffset, timeZoneBaseUtcOffset);
-
- // having a daylightSavingsName means there is a DST rule
- if (!string.IsNullOrEmpty(daylightSavingsName))
- {
- TimeSpan? parsedDaylightSavings = TZif_ParseOffsetString(daylightSavingsOffset);
- TimeSpan daylightSavingsTimeSpan;
- if (!parsedDaylightSavings.HasValue)
- {
- // default DST to 1 hour if it isn't specified
- daylightSavingsTimeSpan = new TimeSpan(1, 0, 0);
- }
- else
- {
- daylightSavingsTimeSpan = parsedDaylightSavings.Value.Negate(); // offsets are backwards in POSIX notation
- daylightSavingsTimeSpan = TZif_CalculateTransitionOffsetFromBase(daylightSavingsTimeSpan, timeZoneBaseUtcOffset);
- daylightSavingsTimeSpan = TZif_CalculateTransitionOffsetFromBase(daylightSavingsTimeSpan, baseOffset);
- }
-
- TransitionTime dstStart = TZif_CreateTransitionTimeFromPosixRule(start, startTime);
- TransitionTime dstEnd = TZif_CreateTransitionTimeFromPosixRule(end, endTime);
-
- return AdjustmentRule.CreateAdjustmentRule(
- startTransitionDate,
- DateTime.MaxValue,
- daylightSavingsTimeSpan,
- dstStart,
- dstEnd,
- baseOffset,
- noDaylightTransitions: false);
- }
- else
- {
- // if there is no daylightSavingsName, the whole AdjustmentRule should be with no transitions - just the baseOffset
- return AdjustmentRule.CreateAdjustmentRule(
- startTransitionDate,
- DateTime.MaxValue,
- TimeSpan.Zero,
- default(TransitionTime),
- default(TransitionTime),
- baseOffset,
- noDaylightTransitions: true);
- }
- }
- }
-
- return null;
- }
-
- private static TimeSpan? TZif_ParseOffsetString(string offset)
- {
- TimeSpan? result = null;
-
- if (!string.IsNullOrEmpty(offset))
- {
- bool negative = offset[0] == '-';
- if (negative || offset[0] == '+')
- {
- offset = offset.Substring(1);
- }
-
- // Try parsing just hours first.
- // Note, TimeSpan.TryParseExact "%h" can't be used here because some time zones using values
- // like "26" or "144" and TimeSpan parsing would turn that into 26 or 144 *days* instead of hours.
- int hours;
- if (int.TryParse(offset, out hours))
- {
- result = new TimeSpan(hours, 0, 0);
- }
- else
- {
- TimeSpan parsedTimeSpan;
- if (TimeSpan.TryParseExact(offset, "g", CultureInfo.InvariantCulture, out parsedTimeSpan))
- {
- result = parsedTimeSpan;
- }
- }
-
- if (result.HasValue && negative)
- {
- result = result.Value.Negate();
- }
- }
-
- return result;
- }
-
- private static TransitionTime TZif_CreateTransitionTimeFromPosixRule(string date, string time)
- {
- if (string.IsNullOrEmpty(date))
- {
- return default(TransitionTime);
- }
-
- if (date[0] == 'M')
- {
- // Mm.w.d
- // This specifies day d of week w of month m. The day d must be between 0(Sunday) and 6.The week w must be between 1 and 5;
- // week 1 is the first week in which day d occurs, and week 5 specifies the last d day in the month. The month m should be between 1 and 12.
-
- int month;
- int week;
- DayOfWeek day;
- if (!TZif_ParseMDateRule(date, out month, out week, out day))
- {
- throw new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_UnparseablePosixMDateString", date));
- }
-
- DateTime timeOfDay;
- TimeSpan? timeOffset = TZif_ParseOffsetString(time);
- if (timeOffset.HasValue)
- {
- // This logic isn't correct and can't be corrected until https://github.com/dotnet/corefx/issues/2618 is fixed.
- // Some time zones use time values like, "26", "144", or "-2".
- // This allows the week to sometimes be week 4 and sometimes week 5 in the month.
- // For now, strip off any 'days' in the offset, and just get the time of day correct
- timeOffset = new TimeSpan(timeOffset.Value.Hours, timeOffset.Value.Minutes, timeOffset.Value.Seconds);
- if (timeOffset.Value < TimeSpan.Zero)
- {
- timeOfDay = new DateTime(1, 1, 2, 0, 0, 0);
- }
- else
- {
- timeOfDay = new DateTime(1, 1, 1, 0, 0, 0);
- }
-
- timeOfDay += timeOffset.Value;
- }
- else
- {
- // default to 2AM.
- timeOfDay = new DateTime(1, 1, 1, 2, 0, 0);
- }
-
- return TransitionTime.CreateFloatingDateRule(timeOfDay, month, week, day);
- }
- else
- {
- // Jn
- // This specifies the Julian day, with n between 1 and 365.February 29 is never counted, even in leap years.
-
- // n
- // This specifies the Julian day, with n between 0 and 365.February 29 is counted in leap years.
-
- // These two rules cannot be expressed with the current AdjustmentRules
- // One of them *could* be supported if we relaxed the TransitionTime validation rules, and allowed
- // "IsFixedDateRule = true, Month = 0, Day = n" to mean the nth day of the year, picking one of the rules above
-
- throw new InvalidTimeZoneException(Environment.GetResourceString("InvalidTimeZone_JulianDayNotSupported"));
- }
- }
+ [Pure]
+ internal static bool UtcOffsetOutOfRange(TimeSpan offset) =>
+ offset.TotalHours < -14.0 || offset.TotalHours > 14.0;
/// <summary>
- /// Parses a string like Mm.w.d into month, week and DayOfWeek values.
+ /// Helper function that performs all of the validation checks for the
+ /// factory methods and deserialization callback.
/// </summary>
- /// <returns>
- /// true if the parsing succeeded; otherwise, false.
- /// </returns>
- private static bool TZif_ParseMDateRule(string dateRule, out int month, out int week, out DayOfWeek dayOfWeek)
+ private static void ValidateTimeZoneInfo(string id, TimeSpan baseUtcOffset, AdjustmentRule[] adjustmentRules, out bool adjustmentRulesSupportDst)
{
- month = 0;
- week = 0;
- dayOfWeek = default(DayOfWeek);
-
- if (dateRule[0] == 'M')
+ if (id == null)
{
- int firstDotIndex = dateRule.IndexOf('.');
- if (firstDotIndex > 0)
- {
- int secondDotIndex = dateRule.IndexOf('.', firstDotIndex + 1);
- if (secondDotIndex > 0)
- {
- string monthString = dateRule.Substring(1, firstDotIndex - 1);
- string weekString = dateRule.Substring(firstDotIndex + 1, secondDotIndex - firstDotIndex - 1);
- string dayString = dateRule.Substring(secondDotIndex + 1);
-
- if (int.TryParse(monthString, out month))
- {
- if (int.TryParse(weekString, out week))
- {
- int day;
- if (int.TryParse(dayString, out day))
- {
- dayOfWeek = (DayOfWeek)day;
- return true;
- }
- }
- }
- }
- }
- }
-
- return false;
- }
-
- private static bool TZif_ParsePosixFormat(
- string posixFormat,
- out string standardName,
- out string standardOffset,
- out string daylightSavingsName,
- out string daylightSavingsOffset,
- out string start,
- out string startTime,
- out string end,
- out string endTime)
- {
- standardName = null;
- standardOffset = null;
- daylightSavingsName = null;
- daylightSavingsOffset = null;
- start = null;
- startTime = null;
- end = null;
- endTime = null;
-
- int index = 0;
- standardName = TZif_ParsePosixName(posixFormat, ref index);
- standardOffset = TZif_ParsePosixOffset(posixFormat, ref index);
-
- daylightSavingsName = TZif_ParsePosixName(posixFormat, ref index);
- if (!string.IsNullOrEmpty(daylightSavingsName))
- {
- daylightSavingsOffset = TZif_ParsePosixOffset(posixFormat, ref index);
-
- if (index < posixFormat.Length && posixFormat[index] == ',')
- {
- index++;
- TZif_ParsePosixDateTime(posixFormat, ref index, out start, out startTime);
-
- if (index < posixFormat.Length && posixFormat[index] == ',')
- {
- index++;
- TZif_ParsePosixDateTime(posixFormat, ref index, out end, out endTime);
- }
- }
- }
-
- return !string.IsNullOrEmpty(standardName) && !string.IsNullOrEmpty(standardOffset);
- }
-
- private static string TZif_ParsePosixName(string posixFormat, ref int index)
- {
- return TZif_ParsePosixString(posixFormat, ref index, c => char.IsDigit(c) || c == '+' || c == '-' || c == ',');
- }
-
- private static string TZif_ParsePosixOffset(string posixFormat, ref int index)
- {
- return TZif_ParsePosixString(posixFormat, ref index, c => !char.IsDigit(c) && c != '+' && c != '-' && c != ':');
- }
-
- private static void TZif_ParsePosixDateTime(string posixFormat, ref int index, out string date, out string time)
- {
- time = null;
-
- date = TZif_ParsePosixDate(posixFormat, ref index);
- if (index < posixFormat.Length && posixFormat[index] == '/')
- {
- index++;
- time = TZif_ParsePosixTime(posixFormat, ref index);
- }
- }
-
- private static string TZif_ParsePosixDate(string posixFormat, ref int index)
- {
- return TZif_ParsePosixString(posixFormat, ref index, c => c == '/' || c == ',');
- }
-
- private static string TZif_ParsePosixTime(string posixFormat, ref int index)
- {
- return TZif_ParsePosixString(posixFormat, ref index, c => c == ',');
- }
-
- private static string TZif_ParsePosixString(string posixFormat, ref int index, Func<char, bool> breakCondition)
- {
- int startIndex = index;
- for (; index < posixFormat.Length; index++)
- {
- char current = posixFormat[index];
- if (breakCondition(current))
- {
- break;
- }
- }
-
- return posixFormat.Substring(startIndex, index - startIndex);
- }
-
- // Returns the Substring from zoneAbbreviations starting at index and ending at '\0'
- // zoneAbbreviations is expected to be in the form: "PST\0PDT\0PWT\0\PPT"
- static private String TZif_GetZoneAbbreviation(String zoneAbbreviations, int index) {
- int lastIndex = zoneAbbreviations.IndexOf('\0', index);
- if (lastIndex > 0) {
- return zoneAbbreviations.Substring(index, lastIndex - index);
- }
- else {
- return zoneAbbreviations.Substring(index);
- }
- }
-
- // Converts an array of bytes into an int - always using standard byte order (Big Endian)
- // per TZif file standard
- static private unsafe int TZif_ToInt32 (byte[]value, int startIndex) {
- fixed( byte * pbyte = &value[startIndex]) {
- return (*pbyte << 24) | (*(pbyte + 1) << 16) | (*(pbyte + 2) << 8) | (*(pbyte + 3));
- }
- }
-
- // Converts an array of bytes into a long - always using standard byte order (Big Endian)
- // per TZif file standard
- static private unsafe long TZif_ToInt64(byte[] value, int startIndex)
- {
- fixed (byte* pbyte = &value[startIndex])
- {
- int i1 = (*pbyte << 24) | (*(pbyte + 1) << 16) | (*(pbyte + 2) << 8) | (*(pbyte + 3));
- int i2 = (*(pbyte + 4) << 24) | (*(pbyte + 5) << 16) | (*(pbyte + 6) << 8) | (*(pbyte + 7));
- return (uint)i2 | ((long)i1 << 32);
- }
- }
-
- static private long TZif_ToUnixTime(byte[] value, int startIndex, TZVersion version)
- {
- if (version != TZVersion.V1)
- {
- return TZif_ToInt64(value, startIndex);
- }
- else
- {
- return TZif_ToInt32(value, startIndex);
- }
- }
-
- private static DateTime TZif_UnixTimeToDateTime(long unixTime)
- {
- if (unixTime < DateTimeOffset.UnixMinSeconds)
- {
- return DateTime.MinValue;
- }
-
- if (unixTime > DateTimeOffset.UnixMaxSeconds)
- {
- return DateTime.MaxValue;
- }
-
- return DateTimeOffset.FromUnixTimeSeconds(unixTime).UtcDateTime;
- }
-
- static private void TZif_ParseRaw(Byte[] data, out TZifHead t, out DateTime[] dts, out Byte[] typeOfLocalTime, out TZifType[] transitionType,
- out String zoneAbbreviations, out Boolean[] StandardTime, out Boolean[] GmtTime, out string futureTransitionsPosixFormat)
- {
- // initialize the out parameters in case the TZifHead ctor throws
- dts = null;
- typeOfLocalTime = null;
- transitionType = null;
- zoneAbbreviations = String.Empty;
- StandardTime = null;
- GmtTime = null;
- futureTransitionsPosixFormat = null;
-
- // read in the 44-byte TZ header containing the count/length fields
- //
- int index = 0;
- t = new TZifHead(data, index);
- index += TZifHead.Length;
-
- int timeValuesLength = 4; // the first version uses 4-bytes to specify times
- if (t.Version != TZVersion.V1)
- {
- // move index past the V1 information to read the V2 information
- index += (int)((timeValuesLength * t.TimeCount) + t.TimeCount + (6 * t.TypeCount) + ((timeValuesLength + 4) * t.LeapCount) + t.IsStdCount + t.IsGmtCount + t.CharCount);
-
- // read the V2 header
- t = new TZifHead(data, index);
- index += TZifHead.Length;
- timeValuesLength = 8; // the second version uses 8-bytes
- }
-
- // initialize the containers for the rest of the TZ data
- dts = new DateTime[t.TimeCount];
- typeOfLocalTime = new Byte[t.TimeCount];
- transitionType = new TZifType[t.TypeCount];
- zoneAbbreviations = String.Empty;
- StandardTime = new Boolean[t.TypeCount];
- GmtTime = new Boolean[t.TypeCount];
-
- // read in the UTC transition points and convert them to Windows
- //
- for (int i = 0; i < t.TimeCount; i++) {
- long unixTime = TZif_ToUnixTime(data, index, t.Version);
- dts[i] = TZif_UnixTimeToDateTime(unixTime);
- index += timeValuesLength;
- }
-
- // read in the Type Indices; there is a 1:1 mapping of UTC transition points to Type Indices
- // these indices directly map to the array index in the transitionType array below
- //
- for (int i = 0; i < t.TimeCount; i++) {
- typeOfLocalTime[i] = data[index];
- index += 1;
- }
-
- // read in the Type table. Each 6-byte entry represents
- // {UtcOffset, IsDst, AbbreviationIndex}
- //
- // each AbbreviationIndex is a character index into the zoneAbbreviations string below
- //
- for (int i = 0; i < t.TypeCount; i++) {
- transitionType[i] = new TZifType(data, index);
- index += 6;
- }
-
- // read in the Abbreviation ASCII string. This string will be in the form:
- // "PST\0PDT\0PWT\0\PPT"
- //
- System.Text.Encoding enc = new System.Text.UTF8Encoding();
- zoneAbbreviations = enc.GetString(data, index, (int)t.CharCount);
- index += (int)t.CharCount;
-
- // skip ahead of the Leap-Seconds Adjustment data. In a future release, consider adding
- // support for Leap-Seconds
- //
- index += (int)(t.LeapCount * (timeValuesLength + 4)); // skip the leap second transition times
-
- // read in the Standard Time table. There should be a 1:1 mapping between Type-Index and Standard
- // Time table entries.
- //
- // TRUE = transition time is standard time
- // FALSE = transition time is wall clock time
- // ABSENT = transition time is wall clock time
- //
- for (int i = 0; i < t.IsStdCount && i < t.TypeCount && index < data.Length; i++) {
- StandardTime[i] = (data[index++] != 0);
- }
-
- // read in the GMT Time table. There should be a 1:1 mapping between Type-Index and GMT Time table
- // entries.
- //
- // TRUE = transition time is UTC
- // FALSE = transition time is local time
- // ABSENT = transition time is local time
- //
- for (int i = 0; i < t.IsGmtCount && i < t.TypeCount && index < data.Length; i++) {
- GmtTime[i] = (data[index++] != 0);
- }
-
- if (t.Version != TZVersion.V1)
- {
- // read the POSIX-style format, which should be wrapped in newlines with the last newline at the end of the file
- if (data[index++] == '\n' && data[data.Length - 1] == '\n')
- {
- futureTransitionsPosixFormat = enc.GetString(data, index, data.Length - index - 1);
- }
- }
- }
-#endif // PLATFORM_UNIX
-
- //
- // UtcOffsetOutOfRange -
- //
- // Helper function that validates the TimeSpan is within +/- 14.0 hours
- //
- [Pure]
- static internal Boolean UtcOffsetOutOfRange(TimeSpan offset) {
- return (offset.TotalHours < -14.0 || offset.TotalHours > 14.0);
- }
-
-
- //
- // ValidateTimeZoneInfo -
- //
- // Helper function that performs all of the validation checks for the
- // factory methods and deserialization callback
- //
- // returns a Boolean indicating whether the AdjustmentRule[] supports DST
- //
- static private void ValidateTimeZoneInfo(
- String id,
- TimeSpan baseUtcOffset,
- AdjustmentRule [] adjustmentRules,
- out Boolean adjustmentRulesSupportDst) {
-
- if (id == null) {
throw new ArgumentNullException(nameof(id));
}
- if (id.Length == 0) {
+ if (id.Length == 0)
+ {
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidId", id), nameof(id));
}
- if (UtcOffsetOutOfRange(baseUtcOffset)) {
+ if (UtcOffsetOutOfRange(baseUtcOffset))
+ {
throw new ArgumentOutOfRangeException(nameof(baseUtcOffset), Environment.GetResourceString("ArgumentOutOfRange_UtcOffset"));
}
- if (baseUtcOffset.Ticks % TimeSpan.TicksPerMinute != 0) {
+ if (baseUtcOffset.Ticks % TimeSpan.TicksPerMinute != 0)
+ {
throw new ArgumentException(Environment.GetResourceString("Argument_TimeSpanHasSeconds"), nameof(baseUtcOffset));
}
Contract.EndContractBlock();
@@ -4379,15 +1907,18 @@ namespace System {
// are sorted in chronological order
//
- if (adjustmentRules != null && adjustmentRules.Length != 0) {
+ if (adjustmentRules != null && adjustmentRules.Length != 0)
+ {
adjustmentRulesSupportDst = true;
AdjustmentRule prev = null;
AdjustmentRule current = null;
- for (int i = 0; i < adjustmentRules.Length; i++) {
+ for (int i = 0; i < adjustmentRules.Length; i++)
+ {
prev = current;
current = adjustmentRules[i];
- if (current == null) {
+ if (current == null)
+ {
throw new InvalidTimeZoneException(Environment.GetResourceString("Argument_AdjustmentRulesNoNulls"));
}
@@ -4395,1308 +1926,18 @@ namespace System {
// adjustmentRulesSupportDst = adjustmentRulesSupportDst || current.SupportsDaylightSavingTime;
// FUTURE: test baseUtcOffset + current.StandardDelta
- if (UtcOffsetOutOfRange(baseUtcOffset + current.DaylightDelta)) {
+ if (UtcOffsetOutOfRange(baseUtcOffset + current.DaylightDelta))
+ {
throw new InvalidTimeZoneException(Environment.GetResourceString("ArgumentOutOfRange_UtcOffsetAndDaylightDelta"));
}
- if (prev != null && current.DateStart <= prev.DateEnd) {
+ if (prev != null && current.DateStart <= prev.DateEnd)
+ {
// verify the rules are in chronological order and the DateStart/DateEnd do not overlap
throw new InvalidTimeZoneException(Environment.GetResourceString("Argument_AdjustmentRulesOutOfOrder"));
}
}
}
}
-
-/*============================================================
-**
-** Class: TimeZoneInfo.AdjustmentRule
-**
-**
-** Purpose:
-** This class is used to represent a Dynamic TimeZone. It
-** has methods for converting a DateTime to UTC from local time
-** and to local time from UTC and methods for getting the
-** standard name and daylight name of the time zone.
-**
-**
-============================================================*/
- [Serializable]
- [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
- sealed public class AdjustmentRule : IEquatable<AdjustmentRule>, ISerializable, IDeserializationCallback
- {
-
- // ---- SECTION: members supporting exposed properties -------------*
- private readonly DateTime m_dateStart;
- private readonly DateTime m_dateEnd;
- private readonly TimeSpan m_daylightDelta;
- private readonly TransitionTime m_daylightTransitionStart;
- private readonly TransitionTime m_daylightTransitionEnd;
- private readonly TimeSpan m_baseUtcOffsetDelta; // delta from the default Utc offset (utcOffset = defaultUtcOffset + m_baseUtcOffsetDelta)
- private readonly bool m_noDaylightTransitions;
-
- // ---- SECTION: public properties --------------*
- public DateTime DateStart {
- get {
- return this.m_dateStart;
- }
- }
-
- public DateTime DateEnd {
- get {
- return this.m_dateEnd;
- }
- }
-
- public TimeSpan DaylightDelta {
- get {
- return this.m_daylightDelta;
- }
- }
-
-
- public TransitionTime DaylightTransitionStart {
- get {
- return this.m_daylightTransitionStart;
- }
- }
-
-
- public TransitionTime DaylightTransitionEnd {
- get {
- return this.m_daylightTransitionEnd;
- }
- }
-
- internal TimeSpan BaseUtcOffsetDelta {
- get {
- return this.m_baseUtcOffsetDelta;
- }
- }
-
- /// <summary>
- /// Gets a value indicating that this AdjustmentRule fixes the time zone offset
- /// from DateStart to DateEnd without any daylight transitions in between.
- /// </summary>
- internal bool NoDaylightTransitions {
- get {
- return this.m_noDaylightTransitions;
- }
- }
-
- internal bool HasDaylightSaving {
- get {
- return this.DaylightDelta != TimeSpan.Zero
- ||
- (this.DaylightTransitionStart != default(TransitionTime)
- && this.DaylightTransitionStart.TimeOfDay != DateTime.MinValue)
- ||
- (this.DaylightTransitionEnd != default(TransitionTime)
- && this.DaylightTransitionEnd.TimeOfDay != DateTime.MinValue.AddMilliseconds(1));
- }
- }
-
- // ---- SECTION: public methods --------------*
-
- // IEquatable<AdjustmentRule>
- public bool Equals(AdjustmentRule other) {
- return other != null
- && m_dateStart == other.m_dateStart
- && m_dateEnd == other.m_dateEnd
- && m_daylightDelta == other.m_daylightDelta
- && m_baseUtcOffsetDelta == other.m_baseUtcOffsetDelta
- && m_daylightTransitionEnd.Equals(other.m_daylightTransitionEnd)
- && m_daylightTransitionStart.Equals(other.m_daylightTransitionStart);
- }
-
-
- public override int GetHashCode() {
- return m_dateStart.GetHashCode();
- }
-
-
-
- // -------- SECTION: constructors -----------------*
-
- private AdjustmentRule(
- DateTime dateStart,
- DateTime dateEnd,
- TimeSpan daylightDelta,
- TransitionTime daylightTransitionStart,
- TransitionTime daylightTransitionEnd,
- TimeSpan baseUtcOffsetDelta,
- bool noDaylightTransitions)
- {
- ValidateAdjustmentRule(dateStart, dateEnd, daylightDelta,
- daylightTransitionStart, daylightTransitionEnd, noDaylightTransitions);
-
- m_dateStart = dateStart;
- m_dateEnd = dateEnd;
- m_daylightDelta = daylightDelta;
- m_daylightTransitionStart = daylightTransitionStart;
- m_daylightTransitionEnd = daylightTransitionEnd;
- m_baseUtcOffsetDelta = baseUtcOffsetDelta;
- m_noDaylightTransitions = noDaylightTransitions;
- }
-
-
- // -------- SECTION: factory methods -----------------*
-
- static public AdjustmentRule CreateAdjustmentRule(
- DateTime dateStart,
- DateTime dateEnd,
- TimeSpan daylightDelta,
- TransitionTime daylightTransitionStart,
- TransitionTime daylightTransitionEnd)
- {
- return new AdjustmentRule(
- dateStart,
- dateEnd,
- daylightDelta,
- daylightTransitionStart,
- daylightTransitionEnd,
- baseUtcOffsetDelta: TimeSpan.Zero,
- noDaylightTransitions: false);
- }
-
- static internal AdjustmentRule CreateAdjustmentRule(
- DateTime dateStart,
- DateTime dateEnd,
- TimeSpan daylightDelta,
- TransitionTime daylightTransitionStart,
- TransitionTime daylightTransitionEnd,
- TimeSpan baseUtcOffsetDelta,
- bool noDaylightTransitions)
- {
- return new AdjustmentRule(
- dateStart,
- dateEnd,
- daylightDelta,
- daylightTransitionStart,
- daylightTransitionEnd,
- baseUtcOffsetDelta,
- noDaylightTransitions);
- }
-
- // ----- SECTION: internal utility methods ----------------*
-
- //
- // When Windows sets the daylight transition start Jan 1st at 12:00 AM, it means the year starts with the daylight saving on.
- // We have to special case this value and not adjust it when checking if any date is in the daylight saving period.
- //
- internal bool IsStartDateMarkerForBeginningOfYear() {
- return !NoDaylightTransitions &&
- DaylightTransitionStart.Month == 1 && DaylightTransitionStart.Day == 1 && DaylightTransitionStart.TimeOfDay.Hour == 0 &&
- DaylightTransitionStart.TimeOfDay.Minute == 0 && DaylightTransitionStart.TimeOfDay.Second == 0 &&
- m_dateStart.Year == m_dateEnd.Year;
- }
-
- //
- // When Windows sets the daylight transition end Jan 1st at 12:00 AM, it means the year ends with the daylight saving on.
- // We have to special case this value and not adjust it when checking if any date is in the daylight saving period.
- //
- internal bool IsEndDateMarkerForEndOfYear() {
- return !NoDaylightTransitions &&
- DaylightTransitionEnd.Month == 1 && DaylightTransitionEnd.Day == 1 && DaylightTransitionEnd.TimeOfDay.Hour == 0 &&
- DaylightTransitionEnd.TimeOfDay.Minute == 0 && DaylightTransitionEnd.TimeOfDay.Second == 0 &&
- m_dateStart.Year == m_dateEnd.Year;
- }
-
- //
- // ValidateAdjustmentRule -
- //
- // Helper function that performs all of the validation checks for the
- // factory methods and deserialization callback
- //
- static private void ValidateAdjustmentRule(
- DateTime dateStart,
- DateTime dateEnd,
- TimeSpan daylightDelta,
- TransitionTime daylightTransitionStart,
- TransitionTime daylightTransitionEnd,
- bool noDaylightTransitions) {
-
-
- if (dateStart.Kind != DateTimeKind.Unspecified && dateStart.Kind != DateTimeKind.Utc) {
- throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeKindMustBeUnspecifiedOrUtc"), nameof(dateStart));
- }
-
- if (dateEnd.Kind != DateTimeKind.Unspecified && dateEnd.Kind != DateTimeKind.Utc) {
- throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeKindMustBeUnspecifiedOrUtc"), nameof(dateEnd));
- }
-
- if (daylightTransitionStart.Equals(daylightTransitionEnd) && !noDaylightTransitions) {
- throw new ArgumentException(Environment.GetResourceString("Argument_TransitionTimesAreIdentical"),
- nameof(daylightTransitionEnd));
- }
-
-
- if (dateStart > dateEnd) {
- throw new ArgumentException(Environment.GetResourceString("Argument_OutOfOrderDateTimes"), nameof(dateStart));
- }
-
- // This cannot use UtcOffsetOutOfRange to account for the scenario where Samoa moved across the International Date Line,
- // which caused their current BaseUtcOffset to be +13. But on the other side of the line it was UTC-11 (+1 for daylight).
- // So when trying to describe DaylightDeltas for those times, the DaylightDelta needs
- // to be -23 (what it takes to go from UTC+13 to UTC-10)
- if (daylightDelta.TotalHours < -23.0 || daylightDelta.TotalHours > 14.0) {
- throw new ArgumentOutOfRangeException(nameof(daylightDelta), daylightDelta,
- Environment.GetResourceString("ArgumentOutOfRange_UtcOffset"));
- }
-
- if (daylightDelta.Ticks % TimeSpan.TicksPerMinute != 0) {
- throw new ArgumentException(Environment.GetResourceString("Argument_TimeSpanHasSeconds"),
- nameof(daylightDelta));
- }
-
- if (dateStart != DateTime.MinValue && dateStart.Kind == DateTimeKind.Unspecified && dateStart.TimeOfDay != TimeSpan.Zero) {
- throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeHasTimeOfDay"),
- nameof(dateStart));
- }
-
- if (dateEnd != DateTime.MaxValue && dateEnd.Kind == DateTimeKind.Unspecified && dateEnd.TimeOfDay != TimeSpan.Zero) {
- throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeHasTimeOfDay"),
- nameof(dateEnd));
- }
- Contract.EndContractBlock();
- }
-
-
-
- // ----- SECTION: private serialization instance methods ----------------*
-
- void IDeserializationCallback.OnDeserialization(Object sender) {
- // OnDeserialization is called after each instance of this class is deserialized.
- // This callback method performs AdjustmentRule validation after being deserialized.
-
- try {
- ValidateAdjustmentRule(m_dateStart, m_dateEnd, m_daylightDelta,
- m_daylightTransitionStart, m_daylightTransitionEnd, m_noDaylightTransitions);
- }
- catch (ArgumentException e) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
- }
- }
-
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
- if (info == null) {
- throw new ArgumentNullException(nameof(info));
- }
- Contract.EndContractBlock();
-
- info.AddValue("DateStart", m_dateStart);
- info.AddValue("DateEnd", m_dateEnd);
- info.AddValue("DaylightDelta", m_daylightDelta);
- info.AddValue("DaylightTransitionStart", m_daylightTransitionStart);
- info.AddValue("DaylightTransitionEnd", m_daylightTransitionEnd);
- info.AddValue("BaseUtcOffsetDelta", m_baseUtcOffsetDelta);
- info.AddValue("NoDaylightTransitions", m_noDaylightTransitions);
- }
-
- AdjustmentRule(SerializationInfo info, StreamingContext context) {
- if (info == null) {
- throw new ArgumentNullException(nameof(info));
- }
-
- m_dateStart = (DateTime)info.GetValue("DateStart", typeof(DateTime));
- m_dateEnd = (DateTime)info.GetValue("DateEnd", typeof(DateTime));
- m_daylightDelta = (TimeSpan)info.GetValue("DaylightDelta", typeof(TimeSpan));
- m_daylightTransitionStart = (TransitionTime)info.GetValue("DaylightTransitionStart", typeof(TransitionTime));
- m_daylightTransitionEnd = (TransitionTime)info.GetValue("DaylightTransitionEnd", typeof(TransitionTime));
-
- object o = info.GetValueNoThrow("BaseUtcOffsetDelta", typeof(TimeSpan));
- if (o != null) {
- m_baseUtcOffsetDelta = (TimeSpan) o;
- }
-
- o = info.GetValueNoThrow("NoDaylightTransitions", typeof(bool));
- if (o != null) {
- m_noDaylightTransitions = (bool)o;
- }
- }
- }
-
-
-/*============================================================
-**
-** Class: TimeZoneInfo.TransitionTime
-**
-**
-** Purpose:
-** This class is used to represent a Dynamic TimeZone. It
-** has methods for converting a DateTime to UTC from local time
-** and to local time from UTC and methods for getting the
-** standard name and daylight name of the time zone.
-**
-**
-============================================================*/
- [Serializable]
- [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
- public struct TransitionTime : IEquatable<TransitionTime>, ISerializable, IDeserializationCallback
- {
- // ---- SECTION: members supporting exposed properties -------------*
- private readonly DateTime m_timeOfDay;
- private readonly byte m_month;
- private readonly byte m_week;
- private readonly byte m_day;
- private readonly DayOfWeek m_dayOfWeek;
- private readonly Boolean m_isFixedDateRule;
-
-
- // ---- SECTION: public properties --------------*
- public DateTime TimeOfDay {
- get {
- return m_timeOfDay;
- }
- }
-
- public Int32 Month {
- get {
- return (int)m_month;
- }
- }
-
-
- public Int32 Week {
- get {
- return (int)m_week;
- }
- }
-
- public Int32 Day {
- get {
- return (int)m_day;
- }
- }
-
- public DayOfWeek DayOfWeek {
- get {
- return m_dayOfWeek;
- }
- }
-
- public Boolean IsFixedDateRule {
- get {
- return m_isFixedDateRule;
- }
- }
-
- // ---- SECTION: public methods --------------*
- [Pure]
- public override bool Equals(Object obj) {
- if (obj is TransitionTime) {
- return Equals((TransitionTime)obj);
- }
- return false;
- }
-
- public static bool operator ==(TransitionTime t1, TransitionTime t2) {
- return t1.Equals(t2);
- }
-
- public static bool operator !=(TransitionTime t1, TransitionTime t2) {
- return (!t1.Equals(t2));
- }
-
- [Pure]
- public bool Equals(TransitionTime other) {
-
- bool equal = (this.m_isFixedDateRule == other.m_isFixedDateRule
- && this.m_timeOfDay == other.m_timeOfDay
- && this.m_month == other.m_month);
-
- if (equal) {
- if (other.m_isFixedDateRule) {
- equal = (this.m_day == other.m_day);
- }
- else {
- equal = (this.m_week == other.m_week
- && this.m_dayOfWeek == other.m_dayOfWeek);
- }
- }
- return equal;
- }
-
-
- public override int GetHashCode() {
- return ((int)m_month ^ (int)m_week << 8);
- }
-
-
- // -------- SECTION: constructors -----------------*
-
- private TransitionTime(
- DateTime timeOfDay,
- Int32 month,
- Int32 week,
- Int32 day,
- DayOfWeek dayOfWeek,
- Boolean isFixedDateRule)
- {
- ValidateTransitionTime(timeOfDay, month, week, day, dayOfWeek);
-
- m_timeOfDay = timeOfDay;
- m_month = (byte)month;
- m_week = (byte)week;
- m_day = (byte)day;
- m_dayOfWeek = dayOfWeek;
- m_isFixedDateRule = isFixedDateRule;
- }
-
-
- // -------- SECTION: factory methods -----------------*
-
-
- static public TransitionTime CreateFixedDateRule(
- DateTime timeOfDay,
- Int32 month,
- Int32 day) {
-
- return new TransitionTime(timeOfDay, month, 1, day, DayOfWeek.Sunday, isFixedDateRule: true);
- }
-
-
- static public TransitionTime CreateFloatingDateRule(
- DateTime timeOfDay,
- Int32 month,
- Int32 week,
- DayOfWeek dayOfWeek) {
-
- return new TransitionTime(timeOfDay, month, week, 1, dayOfWeek, isFixedDateRule: false);
- }
-
-
- // ----- SECTION: internal utility methods ----------------*
-
- //
- // ValidateTransitionTime -
- //
- // Helper function that validates a TransitionTime instance
- //
- static private void ValidateTransitionTime(
- DateTime timeOfDay,
- Int32 month,
- Int32 week,
- Int32 day,
- DayOfWeek dayOfWeek) {
-
- if (timeOfDay.Kind != DateTimeKind.Unspecified) {
- throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeKindMustBeUnspecified"), nameof(timeOfDay));
- }
-
- // Month range 1-12
- if (month < 1 || month > 12) {
- throw new ArgumentOutOfRangeException(nameof(month), Environment.GetResourceString("ArgumentOutOfRange_MonthParam"));
- }
-
- // Day range 1-31
- if (day < 1 || day > 31) {
- throw new ArgumentOutOfRangeException(nameof(day), Environment.GetResourceString("ArgumentOutOfRange_DayParam"));
- }
-
- // Week range 1-5
- if (week < 1 || week > 5) {
- throw new ArgumentOutOfRangeException(nameof(week), Environment.GetResourceString("ArgumentOutOfRange_Week"));
- }
-
- // DayOfWeek range 0-6
- if ((int)dayOfWeek < 0 || (int)dayOfWeek > 6) {
- throw new ArgumentOutOfRangeException(nameof(dayOfWeek), Environment.GetResourceString("ArgumentOutOfRange_DayOfWeek"));
- }
- Contract.EndContractBlock();
-
- if (timeOfDay.Year != 1 || timeOfDay.Month != 1
- || timeOfDay.Day != 1 || (timeOfDay.Ticks % TimeSpan.TicksPerMillisecond != 0)) {
- throw new ArgumentException(Environment.GetResourceString("Argument_DateTimeHasTicks"), nameof(timeOfDay));
- }
- }
-
- void IDeserializationCallback.OnDeserialization(Object sender) {
- // OnDeserialization is called after each instance of this class is deserialized.
- // This callback method performs TransitionTime validation after being deserialized.
-
- try {
- ValidateTransitionTime(m_timeOfDay, (Int32)m_month, (Int32)m_week, (Int32)m_day, m_dayOfWeek);
- }
- catch (ArgumentException e) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
- }
- }
-
-
- void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
- if (info == null) {
- throw new ArgumentNullException(nameof(info));
- }
- Contract.EndContractBlock();
-
- info.AddValue("TimeOfDay", m_timeOfDay);
- info.AddValue("Month", m_month);
- info.AddValue("Week", m_week);
- info.AddValue("Day", m_day);
- info.AddValue("DayOfWeek", m_dayOfWeek);
- info.AddValue("IsFixedDateRule", m_isFixedDateRule);
- }
-
- TransitionTime(SerializationInfo info, StreamingContext context) {
- if (info == null) {
- throw new ArgumentNullException(nameof(info));
- }
-
- m_timeOfDay = (DateTime)info.GetValue("TimeOfDay", typeof(DateTime));
- m_month = (byte)info.GetValue("Month", typeof(byte));
- m_week = (byte)info.GetValue("Week", typeof(byte));
- m_day = (byte)info.GetValue("Day", typeof(byte));
- m_dayOfWeek = (DayOfWeek)info.GetValue("DayOfWeek", typeof(DayOfWeek));
- m_isFixedDateRule = (Boolean)info.GetValue("IsFixedDateRule", typeof(Boolean));
- }
- }
-
-
-/*============================================================
-**
-** Class: TimeZoneInfo.StringSerializer
-**
-**
-** Purpose:
-** This class is used to serialize and deserialize TimeZoneInfo
-** objects based on the custom string serialization format
-**
-**
-============================================================*/
- sealed private class StringSerializer {
-
- // ---- SECTION: private members -------------*
- private enum State {
- Escaped = 0,
- NotEscaped = 1,
- StartOfToken = 2,
- EndOfLine = 3
- }
-
- private String m_serializedText;
- private int m_currentTokenStartIndex;
- private State m_state;
-
- // the majority of the strings contained in the OS time zones fit in 64 chars
- private const int initialCapacityForString = 64;
- private const char esc = '\\';
- private const char sep = ';';
- private const char lhs = '[';
- private const char rhs = ']';
- private const string escString = "\\";
- private const string sepString = ";";
- private const string lhsString = "[";
- private const string rhsString = "]";
- private const string escapedEsc = "\\\\";
- private const string escapedSep = "\\;";
- private const string escapedLhs = "\\[";
- private const string escapedRhs = "\\]";
- private const string dateTimeFormat = "MM:dd:yyyy";
- private const string timeOfDayFormat = "HH:mm:ss.FFF";
-
-
- // ---- SECTION: public static methods --------------*
-
- //
- // GetSerializedString -
- //
- // static method that creates the custom serialized string
- // representation of a TimeZoneInfo instance
- //
- static public String GetSerializedString(TimeZoneInfo zone) {
- StringBuilder serializedText = StringBuilderCache.Acquire();
-
- //
- // <m_id>;<m_baseUtcOffset>;<m_displayName>;<m_standardDisplayName>;<m_daylightDispayName>
- //
- serializedText.Append(SerializeSubstitute(zone.Id));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(
- zone.BaseUtcOffset.TotalMinutes.ToString(CultureInfo.InvariantCulture)));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(zone.DisplayName));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(zone.StandardName));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(zone.DaylightName));
- serializedText.Append(sep);
-
- AdjustmentRule[] rules = zone.GetAdjustmentRules();
-
- if (rules != null && rules.Length > 0) {
- for (int i = 0; i < rules.Length; i++) {
- AdjustmentRule rule = rules[i];
-
- serializedText.Append(lhs);
- serializedText.Append(SerializeSubstitute(rule.DateStart.ToString(
- dateTimeFormat, DateTimeFormatInfo.InvariantInfo)));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(rule.DateEnd.ToString(
- dateTimeFormat, DateTimeFormatInfo.InvariantInfo)));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(rule.DaylightDelta.TotalMinutes.ToString(CultureInfo.InvariantCulture)));
- serializedText.Append(sep);
- // serialize the TransitionTime's
- SerializeTransitionTime(rule.DaylightTransitionStart, serializedText);
- serializedText.Append(sep);
- SerializeTransitionTime(rule.DaylightTransitionEnd, serializedText);
- serializedText.Append(sep);
- if (rule.BaseUtcOffsetDelta != TimeSpan.Zero) { // Serialize it only when BaseUtcOffsetDelta has a value to reduce the impact of adding rule.BaseUtcOffsetDelta
- serializedText.Append(SerializeSubstitute(rule.BaseUtcOffsetDelta.TotalMinutes.ToString(CultureInfo.InvariantCulture)));
- serializedText.Append(sep);
- }
- if (rule.NoDaylightTransitions) { // Serialize it only when NoDaylightTransitions is true to reduce the impact of adding rule.NoDaylightTransitions
- serializedText.Append(SerializeSubstitute("1"));
- serializedText.Append(sep);
- }
- serializedText.Append(rhs);
- }
- }
- serializedText.Append(sep);
- return StringBuilderCache.GetStringAndRelease(serializedText);
- }
-
-
- //
- // GetDeserializedTimeZoneInfo -
- //
- // static method that instantiates a TimeZoneInfo from a custom serialized
- // string
- //
- static public TimeZoneInfo GetDeserializedTimeZoneInfo(String source) {
- StringSerializer s = new StringSerializer(source);
-
- String id = s.GetNextStringValue(false);
- TimeSpan baseUtcOffset = s.GetNextTimeSpanValue(false);
- String displayName = s.GetNextStringValue(false);
- String standardName = s.GetNextStringValue(false);
- String daylightName = s.GetNextStringValue(false);
- AdjustmentRule[] rules = s.GetNextAdjustmentRuleArrayValue(false);
-
- try {
- return new TimeZoneInfo(id, baseUtcOffset, displayName, standardName, daylightName, rules, disableDaylightSavingTime: false);
- }
- catch (ArgumentException ex) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), ex);
- }
- catch (InvalidTimeZoneException ex) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), ex);
- }
- }
-
- // ---- SECTION: public instance methods --------------*
-
-
- // -------- SECTION: constructors -----------------*
-
- //
- // StringSerializer -
- //
- // private constructor - used by GetDeserializedTimeZoneInfo()
- //
- private StringSerializer(String str) {
- m_serializedText = str;
- m_state = State.StartOfToken;
- }
-
-
-
- // ----- SECTION: internal static utility methods ----------------*
-
- //
- // SerializeSubstitute -
- //
- // returns a new string with all of the reserved sub-strings escaped
- //
- // ";" -> "\;"
- // "[" -> "\["
- // "]" -> "\]"
- // "\" -> "\\"
- //
- static private String SerializeSubstitute(String text) {
- text = text.Replace(escString, escapedEsc);
- text = text.Replace(lhsString, escapedLhs);
- text = text.Replace(rhsString, escapedRhs);
- return text.Replace(sepString, escapedSep);
- }
-
-
- //
- // SerializeTransitionTime -
- //
- // Helper method to serialize a TimeZoneInfo.TransitionTime object
- //
- static private void SerializeTransitionTime(TransitionTime time, StringBuilder serializedText) {
- serializedText.Append(lhs);
- Int32 fixedDate = (time.IsFixedDateRule ? 1 : 0);
- serializedText.Append(fixedDate.ToString(CultureInfo.InvariantCulture));
- serializedText.Append(sep);
-
- if (time.IsFixedDateRule) {
- serializedText.Append(SerializeSubstitute(time.TimeOfDay.ToString(timeOfDayFormat, DateTimeFormatInfo.InvariantInfo)));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(time.Month.ToString(CultureInfo.InvariantCulture)));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(time.Day.ToString(CultureInfo.InvariantCulture)));
- serializedText.Append(sep);
- }
- else {
- serializedText.Append(SerializeSubstitute(time.TimeOfDay.ToString(timeOfDayFormat, DateTimeFormatInfo.InvariantInfo)));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(time.Month.ToString(CultureInfo.InvariantCulture)));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(time.Week.ToString(CultureInfo.InvariantCulture)));
- serializedText.Append(sep);
- serializedText.Append(SerializeSubstitute(((int)time.DayOfWeek).ToString(CultureInfo.InvariantCulture)));
- serializedText.Append(sep);
- }
- serializedText.Append(rhs);
- }
-
- //
- // VerifyIsEscapableCharacter -
- //
- // Helper function to determine if the passed in string token is allowed to be preceeded by an escape sequence token
- //
- static private void VerifyIsEscapableCharacter(char c) {
- if (c != esc && c != sep && c != lhs && c != rhs) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidEscapeSequence", c));
- }
- }
-
- // ----- SECTION: internal instance utility methods ----------------*
-
- //
- // SkipVersionNextDataFields -
- //
- // Helper function that reads past "v.Next" data fields. Receives a "depth" parameter indicating the
- // current relative nested bracket depth that m_currentTokenStartIndex is at. The function ends
- // successfully when "depth" returns to zero (0).
- //
- //
- private void SkipVersionNextDataFields(Int32 depth /* starting depth in the nested brackets ('[', ']')*/) {
- if (m_currentTokenStartIndex < 0 || m_currentTokenStartIndex >= m_serializedText.Length) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- State tokenState = State.NotEscaped;
-
- // walk the serialized text, building up the token as we go...
- for (int i = m_currentTokenStartIndex; i < m_serializedText.Length; i++) {
- if (tokenState == State.Escaped) {
- VerifyIsEscapableCharacter(m_serializedText[i]);
- tokenState = State.NotEscaped;
- }
- else if (tokenState == State.NotEscaped) {
- switch (m_serializedText[i]) {
- case esc:
- tokenState = State.Escaped;
- break;
-
- case lhs:
- depth++;
- break;
- case rhs:
- depth--;
- if (depth == 0) {
- m_currentTokenStartIndex = i + 1;
- if (m_currentTokenStartIndex >= m_serializedText.Length) {
- m_state = State.EndOfLine;
- }
- else {
- m_state = State.StartOfToken;
- }
- return;
- }
- break;
-
- case '\0':
- // invalid character
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
-
- default:
- break;
- }
- }
- }
-
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
-
- //
- // GetNextStringValue -
- //
- // Helper function that reads a string token from the serialized text. The function
- // updates the m_currentTokenStartIndex to point to the next token on exit. Also m_state
- // is set to either State.StartOfToken or State.EndOfLine on exit.
- //
- // The function takes a parameter "canEndWithoutSeparator".
- //
- // * When set to 'false' the function requires the string token end with a ";".
- // * When set to 'true' the function requires that the string token end with either
- // ";", State.EndOfLine, or "]". In the case that "]" is the terminal case the
- // m_currentTokenStartIndex is left pointing at index "]" to allow the caller to update
- // its depth logic.
- //
- private String GetNextStringValue(Boolean canEndWithoutSeparator) {
-
- // first verify the internal state of the object
- if (m_state == State.EndOfLine) {
- if (canEndWithoutSeparator) {
- return null;
- }
- else {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- }
- if (m_currentTokenStartIndex < 0 || m_currentTokenStartIndex >= m_serializedText.Length) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- State tokenState = State.NotEscaped;
- StringBuilder token = StringBuilderCache.Acquire(initialCapacityForString);
-
- // walk the serialized text, building up the token as we go...
- for (int i = m_currentTokenStartIndex; i < m_serializedText.Length; i++) {
- if (tokenState == State.Escaped) {
- VerifyIsEscapableCharacter(m_serializedText[i]);
- token.Append(m_serializedText[i]);
- tokenState = State.NotEscaped;
- }
- else if (tokenState == State.NotEscaped) {
- switch (m_serializedText[i]) {
- case esc:
- tokenState = State.Escaped;
- break;
-
- case lhs:
- // '[' is an unexpected character
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
-
- case rhs:
- if (canEndWithoutSeparator) {
- // if ';' is not a required terminal then treat ']' as a terminal
- // leave m_currentTokenStartIndex pointing to ']' so our callers can handle
- // this special case
- m_currentTokenStartIndex = i;
- m_state = State.StartOfToken;
- return token.ToString();
- }
- else {
- // ']' is an unexpected character
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
- case sep:
- m_currentTokenStartIndex = i + 1;
- if (m_currentTokenStartIndex >= m_serializedText.Length) {
- m_state = State.EndOfLine;
- }
- else {
- m_state = State.StartOfToken;
- }
- return StringBuilderCache.GetStringAndRelease(token);
-
- case '\0':
- // invalid character
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
-
- default:
- token.Append(m_serializedText[i]);
- break;
- }
- }
- }
- //
- // we are at the end of the line
- //
- if (tokenState == State.Escaped) {
- // we are at the end of the serialized text but we are in an escaped state
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidEscapeSequence", String.Empty));
- }
-
- if (!canEndWithoutSeparator) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- m_currentTokenStartIndex = m_serializedText.Length;
- m_state = State.EndOfLine;
- return StringBuilderCache.GetStringAndRelease(token);
- }
-
- //
- // GetNextDateTimeValue -
- //
- // Helper function to read a DateTime token. Takes a boolean "canEndWithoutSeparator"
- // and a "format" string.
- //
- private DateTime GetNextDateTimeValue(Boolean canEndWithoutSeparator, string format) {
- String token = GetNextStringValue(canEndWithoutSeparator);
- DateTime time;
- if (!DateTime.TryParseExact(token, format, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out time)) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- return time;
- }
-
- //
- // GetNextTimeSpanValue -
- //
- // Helper function to read a DateTime token. Takes a boolean "canEndWithoutSeparator".
- //
- private TimeSpan GetNextTimeSpanValue(Boolean canEndWithoutSeparator) {
- Int32 token = GetNextInt32Value(canEndWithoutSeparator);
-
- try {
- return new TimeSpan(0 /* hours */, token /* minutes */, 0 /* seconds */);
- }
- catch (ArgumentOutOfRangeException e) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
- }
- }
-
-
- //
- // GetNextInt32Value -
- //
- // Helper function to read an Int32 token. Takes a boolean "canEndWithoutSeparator".
- //
- private Int32 GetNextInt32Value(Boolean canEndWithoutSeparator) {
- String token = GetNextStringValue(canEndWithoutSeparator);
- Int32 value;
- if (!Int32.TryParse(token, NumberStyles.AllowLeadingSign /* "[sign]digits" */, CultureInfo.InvariantCulture, out value)) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- return value;
- }
-
-
- //
- // GetNextAdjustmentRuleArrayValue -
- //
- // Helper function to read an AdjustmentRule[] token. Takes a boolean "canEndWithoutSeparator".
- //
- private AdjustmentRule[] GetNextAdjustmentRuleArrayValue(Boolean canEndWithoutSeparator) {
- List<AdjustmentRule> rules = new List<AdjustmentRule>(1);
- int count = 0;
-
- // individual AdjustmentRule array elements do not require semicolons
- AdjustmentRule rule = GetNextAdjustmentRuleValue(true);
- while (rule != null) {
- rules.Add(rule);
- count++;
-
- rule = GetNextAdjustmentRuleValue(true);
- }
-
- if (!canEndWithoutSeparator) {
- // the AdjustmentRule array must end with a separator
- if (m_state == State.EndOfLine) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- if (m_currentTokenStartIndex < 0 || m_currentTokenStartIndex >= m_serializedText.Length) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- }
-
- return (count != 0 ? rules.ToArray() : null);
- }
-
- //
- // GetNextAdjustmentRuleValue -
- //
- // Helper function to read an AdjustmentRule token. Takes a boolean "canEndWithoutSeparator".
- //
- private AdjustmentRule GetNextAdjustmentRuleValue(Boolean canEndWithoutSeparator) {
- // first verify the internal state of the object
- if (m_state == State.EndOfLine) {
- if (canEndWithoutSeparator) {
- return null;
- }
- else {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- }
-
- if (m_currentTokenStartIndex < 0 || m_currentTokenStartIndex >= m_serializedText.Length) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
- // check to see if the very first token we see is the separator
- if (m_serializedText[m_currentTokenStartIndex] == sep) {
- return null;
- }
-
- // verify the current token is a left-hand-side marker ("[")
- if (m_serializedText[m_currentTokenStartIndex] != lhs) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- m_currentTokenStartIndex++;
-
- DateTime dateStart = GetNextDateTimeValue(false, dateTimeFormat);
- DateTime dateEnd = GetNextDateTimeValue(false, dateTimeFormat);
- TimeSpan daylightDelta = GetNextTimeSpanValue(false);
- TransitionTime daylightStart = GetNextTransitionTimeValue(false);
- TransitionTime daylightEnd = GetNextTransitionTimeValue(false);
- TimeSpan baseUtcOffsetDelta = TimeSpan.Zero;
- Int32 noDaylightTransitions = 0;
-
- // verify that the string is now at the right-hand-side marker ("]") ...
-
- if (m_state == State.EndOfLine || m_currentTokenStartIndex >= m_serializedText.Length) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
- // Check if we have baseUtcOffsetDelta in the serialized string and then deserialize it
- if ((m_serializedText[m_currentTokenStartIndex] >= '0' && m_serializedText[m_currentTokenStartIndex] <= '9') ||
- m_serializedText[m_currentTokenStartIndex] == '-' || m_serializedText[m_currentTokenStartIndex] == '+') {
- baseUtcOffsetDelta = GetNextTimeSpanValue(false);
- }
-
- // Check if we have NoDaylightTransitions in the serialized string and then deserialize it
- if ((m_serializedText[m_currentTokenStartIndex] >= '0' && m_serializedText[m_currentTokenStartIndex] <= '1')) {
- noDaylightTransitions = GetNextInt32Value(false);
- }
-
- if (m_state == State.EndOfLine || m_currentTokenStartIndex >= m_serializedText.Length) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
- if (m_serializedText[m_currentTokenStartIndex] != rhs) {
- // skip ahead of any "v.Next" data at the end of the AdjustmentRule
- //
- // FUTURE: if the serialization format is extended in the future then this
- // code section will need to be changed to read the new fields rather
- // than just skipping the data at the end of the [AdjustmentRule].
- SkipVersionNextDataFields(1);
- }
- else {
- m_currentTokenStartIndex++;
- }
-
- // create the AdjustmentRule from the deserialized fields ...
-
- AdjustmentRule rule;
- try {
- rule = AdjustmentRule.CreateAdjustmentRule(dateStart, dateEnd, daylightDelta, daylightStart, daylightEnd, baseUtcOffsetDelta, noDaylightTransitions > 0);
- }
- catch (ArgumentException e) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
- }
-
- // finally set the state to either EndOfLine or StartOfToken for the next caller
- if (m_currentTokenStartIndex >= m_serializedText.Length) {
- m_state = State.EndOfLine;
- }
- else {
- m_state = State.StartOfToken;
- }
- return rule;
- }
-
-
- //
- // GetNextTransitionTimeValue -
- //
- // Helper function to read a TransitionTime token. Takes a boolean "canEndWithoutSeparator".
- //
- private TransitionTime GetNextTransitionTimeValue(Boolean canEndWithoutSeparator) {
-
- // first verify the internal state of the object
-
- if (m_state == State.EndOfLine
- || (m_currentTokenStartIndex < m_serializedText.Length
- && m_serializedText[m_currentTokenStartIndex] == rhs)) {
- //
- // we are at the end of the line or we are starting at a "]" character
- //
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
- if (m_currentTokenStartIndex < 0 || m_currentTokenStartIndex >= m_serializedText.Length) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
- // verify the current token is a left-hand-side marker ("[")
-
- if (m_serializedText[m_currentTokenStartIndex] != lhs) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
- m_currentTokenStartIndex++;
-
- Int32 isFixedDate = GetNextInt32Value(false);
-
- if (isFixedDate != 0 && isFixedDate != 1) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
- TransitionTime transition;
-
- DateTime timeOfDay = GetNextDateTimeValue(false, timeOfDayFormat);
- timeOfDay = new DateTime(1, 1, 1, timeOfDay.Hour,timeOfDay.Minute,timeOfDay.Second, timeOfDay.Millisecond);
-
- Int32 month = GetNextInt32Value(false);
-
- if (isFixedDate == 1) {
- Int32 day = GetNextInt32Value(false);
-
- try {
- transition = TransitionTime.CreateFixedDateRule(timeOfDay, month, day);
- }
- catch (ArgumentException e) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
- }
- }
- else {
- Int32 week = GetNextInt32Value(false);
- Int32 dayOfWeek = GetNextInt32Value(false);
-
- try {
- transition = TransitionTime.CreateFloatingDateRule(timeOfDay, month, week, (DayOfWeek)dayOfWeek);
- }
- catch (ArgumentException e) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"), e);
- }
-
- }
-
- // verify that the string is now at the right-hand-side marker ("]") ...
-
- if (m_state == State.EndOfLine || m_currentTokenStartIndex >= m_serializedText.Length) {
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
- if (m_serializedText[m_currentTokenStartIndex] != rhs) {
- // skip ahead of any "v.Next" data at the end of the AdjustmentRule
- //
- // FUTURE: if the serialization format is extended in the future then this
- // code section will need to be changed to read the new fields rather
- // than just skipping the data at the end of the [TransitionTime].
- SkipVersionNextDataFields(1);
- }
- else {
- m_currentTokenStartIndex++;
- }
-
- // check to see if the string is now at the separator (";") ...
- Boolean sepFound = false;
- if (m_currentTokenStartIndex < m_serializedText.Length
- && m_serializedText[m_currentTokenStartIndex] == sep) {
- // handle the case where we ended on a ";"
- m_currentTokenStartIndex++;
- sepFound = true;
- }
-
- if (!sepFound && !canEndWithoutSeparator) {
- // we MUST end on a separator
- throw new SerializationException(Environment.GetResourceString("Serialization_InvalidData"));
- }
-
-
- // finally set the state to either EndOfLine or StartOfToken for the next caller
- if (m_currentTokenStartIndex >= m_serializedText.Length) {
- m_state = State.EndOfLine;
- }
- else {
- m_state = State.StartOfToken;
- }
- return transition;
- }
- }
-
-#if PLATFORM_UNIX
- private struct TZifType
- {
- private const int c_len = 6;
- public static int Length
- {
- get
- {
- return c_len;
- }
- }
-
- public TimeSpan UtcOffset;
- public Boolean IsDst;
- public Byte AbbreviationIndex;
-
- public TZifType(Byte[] data, Int32 index)
- {
- if (data == null || data.Length < index + c_len)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_TimeZoneInfoInvalidTZif"), nameof(data));
- }
- Contract.EndContractBlock();
- UtcOffset = new TimeSpan(0, 0, TZif_ToInt32(data, index + 00));
- IsDst = (data[index + 4] != 0);
- AbbreviationIndex = data[index + 5];
- }
- }
-
- private struct TZifHead
- {
- private const int c_len = 44;
- public static int Length
- {
- get
- {
- return c_len;
- }
- }
-
- public TZifHead(Byte[] data, Int32 index)
- {
- if (data == null || data.Length < c_len)
- {
- throw new ArgumentException("bad data", nameof(data));
- }
- Contract.EndContractBlock();
-
- Magic = (uint)TZif_ToInt32(data, index + 00);
-
- if (Magic != 0x545A6966)
- {
- // 0x545A6966 = {0x54, 0x5A, 0x69, 0x66} = "TZif"
- throw new ArgumentException(Environment.GetResourceString("Argument_TimeZoneInfoBadTZif"), nameof(data));
- }
-
- byte version = data[index + 04];
- Version = version == '2' ? TZVersion.V2 :
- version == '3' ? TZVersion.V3 :
- TZVersion.V1; // default/fallback to V1 to guard against future, unsupported version numbers
-
- // skip the 15 byte reserved field
-
- // don't use the BitConverter class which parses data
- // based on the Endianess of the machine architecture.
- // this data is expected to always be in "standard byte order",
- // regardless of the machine it is being processed on.
-
- IsGmtCount = (uint)TZif_ToInt32(data, index + 20);
- IsStdCount = (uint)TZif_ToInt32(data, index + 24);
- LeapCount = (uint)TZif_ToInt32(data, index + 28);
- TimeCount = (uint)TZif_ToInt32(data, index + 32);
- TypeCount = (uint)TZif_ToInt32(data, index + 36);
- CharCount = (uint)TZif_ToInt32(data, index + 40);
- }
-
- public UInt32 Magic; // TZ_MAGIC "TZif"
- public TZVersion Version; // 1 byte for a \0 or 2 or 3
- // public Byte[15] Reserved; // reserved for future use
- public UInt32 IsGmtCount; // number of transition time flags
- public UInt32 IsStdCount; // number of transition time flags
- public UInt32 LeapCount; // number of leap seconds
- public UInt32 TimeCount; // number of transition times
- public UInt32 TypeCount; // number of local time types
- public UInt32 CharCount; // number of abbreviated characters
- }
-
- private enum TZVersion : byte
- {
- V1 = 0,
- V2,
- V3,
- // when adding more versions, ensure all the logic using TZVersion is still correct
- }
-#endif // PLATFORM_UNIX
-
- } // TimezoneInfo
-} // namespace System
+ }
+}
diff --git a/src/mscorlib/src/System/TimeZoneNotFoundException.cs b/src/mscorlib/src/System/TimeZoneNotFoundException.cs
index cabcc150f6..ee21c2524f 100644
--- a/src/mscorlib/src/System/TimeZoneNotFoundException.cs
+++ b/src/mscorlib/src/System/TimeZoneNotFoundException.cs
@@ -2,22 +2,27 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
- using System.Runtime.Serialization;
- using System.Runtime.CompilerServices;
+using System.Runtime.Serialization;
- [Serializable]
- [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
- public class TimeZoneNotFoundException : Exception {
- public TimeZoneNotFoundException(String message)
- : base(message) { }
+namespace System
+{
+ [Serializable]
+ public class TimeZoneNotFoundException : Exception
+ {
+ public TimeZoneNotFoundException()
+ {
+ }
- public TimeZoneNotFoundException(String message, Exception innerException)
- : base(message, innerException) { }
+ public TimeZoneNotFoundException(String message)
+ : base(message)
+ {
+ }
- protected TimeZoneNotFoundException(SerializationInfo info, StreamingContext context)
- : base(info, context) { }
+ public TimeZoneNotFoundException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ }
- public TimeZoneNotFoundException() { }
- }
+ protected TimeZoneNotFoundException(SerializationInfo info, StreamingContext context) : base(info, context) { }
+ }
}
diff --git a/src/mscorlib/src/System/TimeoutException.cs b/src/mscorlib/src/System/TimeoutException.cs
index 0b45f62fbd..32775a1c56 100644
--- a/src/mscorlib/src/System/TimeoutException.cs
+++ b/src/mscorlib/src/System/TimeoutException.cs
@@ -11,35 +11,31 @@
**
=============================================================================*/
-namespace System
-{
- using System.Runtime.Serialization;
+using System.Runtime.Serialization;
+namespace System
+{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class TimeoutException : SystemException {
-
- public TimeoutException()
- : base(Environment.GetResourceString("Arg_TimeoutException")) {
- SetErrorCode(__HResults.COR_E_TIMEOUT);
+ public class TimeoutException : SystemException
+ {
+ public TimeoutException()
+ : base(SR.Arg_TimeoutException)
+ {
+ HResult = __HResults.COR_E_TIMEOUT;
}
-
- public TimeoutException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_TIMEOUT);
+
+ public TimeoutException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_TIMEOUT;
}
-
+
public TimeoutException(String message, Exception innerException)
- : base(message, innerException) {
- SetErrorCode(__HResults.COR_E_TIMEOUT);
- }
-
- //
- //This constructor is required for serialization.
- //
- protected TimeoutException(SerializationInfo info, StreamingContext context)
- : base(info, context) {
+ : base(message, innerException)
+ {
+ HResult = __HResults.COR_E_TIMEOUT;
}
+
+ protected TimeoutException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
-
diff --git a/src/mscorlib/src/System/Tuple.cs b/src/mscorlib/src/System/Tuple.cs
index 037b2ceee8..bb0dbcad6f 100644
--- a/src/mscorlib/src/System/Tuple.cs
+++ b/src/mscorlib/src/System/Tuple.cs
@@ -7,161 +7,206 @@ using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.Contracts;
+using System.Runtime.CompilerServices;
//
// Note: F# compiler depends on the exact tuple hashing algorithm. Do not ever change it.
//
-namespace System {
+namespace System
+{
/// <summary>
/// Helper so we can call some tuple methods recursively without knowing the underlying types.
/// </summary>
- internal interface ITuple {
+ internal interface ITupleInternal : ITuple
+ {
string ToString(StringBuilder sb);
int GetHashCode(IEqualityComparer comparer);
- int Size { get; }
-
}
- public static class Tuple {
- public static Tuple<T1> Create<T1>(T1 item1) {
+ public static class Tuple
+ {
+ public static Tuple<T1> Create<T1>(T1 item1)
+ {
return new Tuple<T1>(item1);
}
- public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) {
+ public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
+ {
return new Tuple<T1, T2>(item1, item2);
}
- public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3) {
+ public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3)
+ {
return new Tuple<T1, T2, T3>(item1, item2, item3);
}
- public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4) {
+ public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4)
+ {
return new Tuple<T1, T2, T3, T4>(item1, item2, item3, item4);
}
- public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) {
+ public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
+ {
return new Tuple<T1, T2, T3, T4, T5>(item1, item2, item3, item4, item5);
}
- public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6) {
+ public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
+ {
return new Tuple<T1, T2, T3, T4, T5, T6>(item1, item2, item3, item4, item5, item6);
}
- public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7) {
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
+ {
return new Tuple<T1, T2, T3, T4, T5, T6, T7>(item1, item2, item3, item4, item5, item6, item7);
}
- public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) {
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8)
+ {
return new Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>(item1, item2, item3, item4, item5, item6, item7, new Tuple<T8>(item8));
}
// From System.Web.Util.HashCodeCombiner
- internal static int CombineHashCodes(int h1, int h2) {
+ internal static int CombineHashCodes(int h1, int h2)
+ {
return (((h1 << 5) + h1) ^ h2);
}
- internal static int CombineHashCodes(int h1, int h2, int h3) {
+ internal static int CombineHashCodes(int h1, int h2, int h3)
+ {
return CombineHashCodes(CombineHashCodes(h1, h2), h3);
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4) {
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4)
+ {
return CombineHashCodes(CombineHashCodes(h1, h2), CombineHashCodes(h3, h4));
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5) {
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5)
+ {
return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), h5);
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6) {
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6)
+ {
return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6));
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7) {
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7)
+ {
return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7));
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8) {
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8)
+ {
return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7, h8));
}
}
[Serializable]
- public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
public T1 Item1 { get { return m_Item1; } }
- public Tuple(T1 item1) {
+ public Tuple(T1 item1)
+ {
m_Item1 = item1;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default);
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1> objTuple = other as Tuple<T1>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1> objTuple = other as Tuple<T1>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
return comparer.Compare(m_Item1, objTuple.m_Item1);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return comparer.GetHashCode(m_Item1);
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(")");
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 1;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 1;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ if (index != 0)
+ {
+ throw new IndexOutOfRangeException();
+ }
+ return Item1;
}
}
}
[Serializable]
- public class Tuple<T1, T2> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -169,38 +214,45 @@ namespace System {
public T1 Item1 { get { return m_Item1; } }
public T2 Item2 { get { return m_Item2; } }
- public Tuple(T1 item1, T2 item2) {
+ public Tuple(T1 item1, T2 item2)
+ {
m_Item1 = item1;
m_Item2 = item2;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2> objTuple = other as Tuple<T1, T2>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2> objTuple = other as Tuple<T1, T2>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -212,24 +264,29 @@ namespace System {
return comparer.Compare(m_Item2, objTuple.m_Item2);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -237,15 +294,34 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 2;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 2;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -255,39 +331,46 @@ namespace System {
public T2 Item2 { get { return m_Item2; } }
public T3 Item3 { get { return m_Item3; } }
- public Tuple(T1 item1, T2 item2, T3 item3) {
+ public Tuple(T1 item1, T2 item2, T3 item3)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3> objTuple = other as Tuple<T1, T2, T3>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3> objTuple = other as Tuple<T1, T2, T3>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -303,24 +386,29 @@ namespace System {
return comparer.Compare(m_Item3, objTuple.m_Item3);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -330,15 +418,36 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 3;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 3;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -350,40 +459,47 @@ namespace System {
public T3 Item3 { get { return m_Item3; } }
public T4 Item4 { get { return m_Item4; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
m_Item4 = item4;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4> objTuple = other as Tuple<T1, T2, T3, T4>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4> objTuple = other as Tuple<T1, T2, T3, T4>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -403,24 +519,29 @@ namespace System {
return comparer.Compare(m_Item4, objTuple.m_Item4);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -432,15 +553,38 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 4;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 4;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4, T5> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4, T5> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -454,7 +598,8 @@ namespace System {
public T4 Item4 { get { return m_Item4; } }
public T5 Item5 { get { return m_Item5; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
@@ -462,33 +607,39 @@ namespace System {
m_Item5 = item5;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4, T5> objTuple = other as Tuple<T1, T2, T3, T4, T5>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4) && comparer.Equals(m_Item5, objTuple.m_Item5);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4, T5> objTuple = other as Tuple<T1, T2, T3, T4, T5>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -512,24 +663,29 @@ namespace System {
return comparer.Compare(m_Item5, objTuple.m_Item5);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -543,15 +699,40 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 5;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 5;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4, T5, T6> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4, T5, T6> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -567,7 +748,8 @@ namespace System {
public T5 Item5 { get { return m_Item5; } }
public T6 Item6 { get { return m_Item6; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
@@ -576,33 +758,39 @@ namespace System {
m_Item6 = item6;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4, T5, T6> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4) && comparer.Equals(m_Item5, objTuple.m_Item5) && comparer.Equals(m_Item6, objTuple.m_Item6);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4, T5, T6> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -630,24 +818,29 @@ namespace System {
return comparer.Compare(m_Item6, objTuple.m_Item6);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -663,15 +856,42 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 6;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 6;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ case 5:
+ return Item6;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4, T5, T6, T7> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4, T5, T6, T7> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -689,7 +909,8 @@ namespace System {
public T6 Item6 { get { return m_Item6; } }
public T7 Item7 { get { return m_Item7; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
@@ -699,33 +920,39 @@ namespace System {
m_Item7 = item7;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4, T5, T6, T7> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4) && comparer.Equals(m_Item5, objTuple.m_Item5) && comparer.Equals(m_Item6, objTuple.m_Item6) && comparer.Equals(m_Item7, objTuple.m_Item7);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4, T5, T6, T7> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -757,24 +984,29 @@ namespace System {
return comparer.Compare(m_Item7, objTuple.m_Item7);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -792,15 +1024,44 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 7;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 7;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ case 5:
+ return Item6;
+ case 6:
+ return Item7;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -820,8 +1081,10 @@ namespace System {
public T7 Item7 { get { return m_Item7; } }
public TRest Rest { get { return m_Rest; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest) {
- if (!(rest is ITuple)) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest)
+ {
+ if (!(rest is ITupleInternal))
+ {
throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleLastArgumentNotATuple"));
}
@@ -835,33 +1098,39 @@ namespace System {
m_Rest = rest;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4) && comparer.Equals(m_Item5, objTuple.m_Item5) && comparer.Equals(m_Item6, objTuple.m_Item6) && comparer.Equals(m_Item7, objTuple.m_Item7) && comparer.Equals(m_Rest, objTuple.m_Rest);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -897,47 +1166,53 @@ namespace System {
return comparer.Compare(m_Rest, objTuple.m_Rest);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
// We want to have a limited hash in this case. We'll use the last 8 elements of the tuple
- ITuple t = (ITuple) m_Rest;
- if(t.Size >= 8) { return t.GetHashCode(comparer); }
-
+ ITupleInternal t = (ITupleInternal)m_Rest;
+ if (t.Length >= 8) { return t.GetHashCode(comparer); }
+
// In this case, the rest memeber has less than 8 elements so we need to combine some our elements with the elements in rest
- int k = 8 - t.Size;
- switch(k) {
+ int k = 8 - t.Length;
+ switch (k)
+ {
case 1:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 2:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 3:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 4:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 5:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 6:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 7:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
}
Debug.Assert(false, "Missed all cases for computing Tuple hash code");
return -1;
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -952,12 +1227,46 @@ namespace System {
sb.Append(", ");
sb.Append(m_Item7);
sb.Append(", ");
- return ((ITuple)m_Rest).ToString(sb);
+ return ((ITupleInternal)m_Rest).ToString(sb);
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length
+ {
+ get
+ {
+ return 7 + ((ITupleInternal)Rest).Length;
+ }
}
- int ITuple.Size {
- get {
- return 7 + ((ITuple)m_Rest).Size;
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ case 5:
+ return Item6;
+ case 6:
+ return Item7;
+ }
+
+ return ((ITupleInternal)Rest)[index - 7];
}
}
}
diff --git a/src/mscorlib/src/System/TupleExtensions.cs b/src/mscorlib/src/System/TupleExtensions.cs
new file mode 100644
index 0000000000..b63cb41213
--- /dev/null
+++ b/src/mscorlib/src/System/TupleExtensions.cs
@@ -0,0 +1,930 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+
+namespace System
+{
+ /// <summary>
+ /// Provides extension methods for <see cref="Tuple"/> instances to interop with C# tuples features (deconstruction syntax, converting from and to <see cref="ValueTuple"/>).
+ /// </summary>
+ public static class TupleExtensions
+ {
+ #region Deconstruct
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 1 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1>(
+ this Tuple<T1> value,
+ out T1 item1)
+ {
+ item1 = value.Item1;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 2 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2>(
+ this Tuple<T1, T2> value,
+ out T1 item1, out T2 item2)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 3 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3>(
+ this Tuple<T1, T2, T3> value,
+ out T1 item1, out T2 item2, out T3 item3)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 4 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4>(
+ this Tuple<T1, T2, T3, T4> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 5 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5>(
+ this Tuple<T1, T2, T3, T4, T5> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 6 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6>(
+ this Tuple<T1, T2, T3, T4, T5, T6> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 7 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 8 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 9 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 10 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 11 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 12 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 13 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ item13 = value.Rest.Item6;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 14 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ item13 = value.Rest.Item6;
+ item14 = value.Rest.Item7;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 15 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15>>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ item13 = value.Rest.Item6;
+ item14 = value.Rest.Item7;
+ item15 = value.Rest.Rest.Item1;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 16 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16>>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15, out T16 item16)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ item13 = value.Rest.Item6;
+ item14 = value.Rest.Item7;
+ item15 = value.Rest.Rest.Item1;
+ item16 = value.Rest.Rest.Item2;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 17 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17>>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15, out T16 item16, out T17 item17)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ item13 = value.Rest.Item6;
+ item14 = value.Rest.Item7;
+ item15 = value.Rest.Rest.Item1;
+ item16 = value.Rest.Rest.Item2;
+ item17 = value.Rest.Rest.Item3;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 18 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18>>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15, out T16 item16, out T17 item17, out T18 item18)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ item13 = value.Rest.Item6;
+ item14 = value.Rest.Item7;
+ item15 = value.Rest.Rest.Item1;
+ item16 = value.Rest.Rest.Item2;
+ item17 = value.Rest.Rest.Item3;
+ item18 = value.Rest.Rest.Item4;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 19 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19>>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15, out T16 item16, out T17 item17, out T18 item18, out T19 item19)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ item13 = value.Rest.Item6;
+ item14 = value.Rest.Item7;
+ item15 = value.Rest.Rest.Item1;
+ item16 = value.Rest.Rest.Item2;
+ item17 = value.Rest.Rest.Item3;
+ item18 = value.Rest.Rest.Item4;
+ item19 = value.Rest.Rest.Item5;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 20 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19, T20>>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15, out T16 item16, out T17 item17, out T18 item18, out T19 item19, out T20 item20)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ item13 = value.Rest.Item6;
+ item14 = value.Rest.Item7;
+ item15 = value.Rest.Rest.Item1;
+ item16 = value.Rest.Rest.Item2;
+ item17 = value.Rest.Rest.Item3;
+ item18 = value.Rest.Rest.Item4;
+ item19 = value.Rest.Rest.Item5;
+ item20 = value.Rest.Rest.Item6;
+ }
+
+ /// <summary>
+ /// Deconstruct a properly nested <see cref="Tuple"/> with 21 elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19, T20, T21>>> value,
+ out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15, out T16 item16, out T17 item17, out T18 item18, out T19 item19, out T20 item20, out T21 item21)
+ {
+ item1 = value.Item1;
+ item2 = value.Item2;
+ item3 = value.Item3;
+ item4 = value.Item4;
+ item5 = value.Item5;
+ item6 = value.Item6;
+ item7 = value.Item7;
+ item8 = value.Rest.Item1;
+ item9 = value.Rest.Item2;
+ item10 = value.Rest.Item3;
+ item11 = value.Rest.Item4;
+ item12 = value.Rest.Item5;
+ item13 = value.Rest.Item6;
+ item14 = value.Rest.Item7;
+ item15 = value.Rest.Rest.Item1;
+ item16 = value.Rest.Rest.Item2;
+ item17 = value.Rest.Rest.Item3;
+ item18 = value.Rest.Rest.Item4;
+ item19 = value.Rest.Rest.Item5;
+ item20 = value.Rest.Rest.Item6;
+ item21 = value.Rest.Rest.Item7;
+ }
+ #endregion
+
+ #region ToValueTuple
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 1 element.
+ /// </summary>
+ public static ValueTuple<T1>
+ ToValueTuple<T1>(
+ this Tuple<T1> value)
+ {
+ return ValueTuple.Create(value.Item1);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 2 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2>
+ ToValueTuple<T1, T2>(
+ this Tuple<T1, T2> value)
+ {
+ return ValueTuple.Create(value.Item1, value.Item2);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 3 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3>
+ ToValueTuple<T1, T2, T3>(
+ this Tuple<T1, T2, T3> value)
+ {
+ return ValueTuple.Create(value.Item1, value.Item2, value.Item3);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 4 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4>
+ ToValueTuple<T1, T2, T3, T4>(
+ this Tuple<T1, T2, T3, T4> value)
+ {
+ return ValueTuple.Create(value.Item1, value.Item2, value.Item3, value.Item4);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 5 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5>
+ ToValueTuple<T1, T2, T3, T4, T5>(
+ this Tuple<T1, T2, T3, T4, T5> value)
+ {
+ return ValueTuple.Create(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 6 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6>
+ ToValueTuple<T1, T2, T3, T4, T5, T6>(
+ this Tuple<T1, T2, T3, T4, T5, T6> value)
+ {
+ return ValueTuple.Create(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 7 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7> value)
+ {
+ return ValueTuple.Create(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 8 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ ValueTuple.Create(value.Rest.Item1));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 9 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ ValueTuple.Create(value.Rest.Item1, value.Rest.Item2));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 10 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ ValueTuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 11 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ ValueTuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 12 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ ValueTuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 13 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ ValueTuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 14 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ ValueTuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 15 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15>>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15>>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLong(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ ValueTuple.Create(value.Rest.Rest.Item1)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 16 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16>>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16>>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLong(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ ValueTuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 17 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17>>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17>>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLong(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ ValueTuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 18 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17, T18>>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18>>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLong(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ ValueTuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3, value.Rest.Rest.Item4)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 19 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17, T18, T19>>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19>>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLong(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ ValueTuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3, value.Rest.Rest.Item4, value.Rest.Rest.Item5)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 20 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17, T18, T19, T20>>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19, T20>>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLong(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ ValueTuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3, value.Rest.Rest.Item4, value.Rest.Rest.Item5, value.Rest.Rest.Item6)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="ValueTuple"/> from a properly nested <see cref="Tuple"/> with 21 elements.
+ /// </summary>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17, T18, T19, T20, T21>>>
+ ToValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(
+ this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19, T20, T21>>> value)
+ {
+ return CreateLong(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLong(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ ValueTuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3, value.Rest.Rest.Item4, value.Rest.Rest.Item5, value.Rest.Rest.Item6, value.Rest.Rest.Item7)));
+ }
+ #endregion
+
+ #region ToTuple
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 1 element.
+ /// </summary>
+ public static Tuple<T1>
+ ToTuple<T1>(
+ this ValueTuple<T1> value)
+ {
+ return Tuple.Create(value.Item1);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 2 elements.
+ /// </summary>
+ public static Tuple<T1, T2>
+ ToTuple<T1, T2>(
+ this ValueTuple<T1, T2> value)
+ {
+ return Tuple.Create(value.Item1, value.Item2);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 3 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3>
+ ToTuple<T1, T2, T3>(
+ this ValueTuple<T1, T2, T3> value)
+ {
+ return Tuple.Create(value.Item1, value.Item2, value.Item3);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 4 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4>
+ ToTuple<T1, T2, T3, T4>(
+ this ValueTuple<T1, T2, T3, T4> value)
+ {
+ return Tuple.Create(value.Item1, value.Item2, value.Item3, value.Item4);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 5 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5>
+ ToTuple<T1, T2, T3, T4, T5>(
+ this ValueTuple<T1, T2, T3, T4, T5> value)
+ {
+ return Tuple.Create(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 6 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6>
+ ToTuple<T1, T2, T3, T4, T5, T6>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6> value)
+ {
+ return Tuple.Create(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 7 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7> value)
+ {
+ return Tuple.Create(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7);
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 8 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ Tuple.Create(value.Rest.Item1));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 9 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ Tuple.Create(value.Rest.Item1, value.Rest.Item2));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 10 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ Tuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 11 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ Tuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 12 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ Tuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 13 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ Tuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 14 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ Tuple.Create(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 15 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15>>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15>>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLongRef(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ Tuple.Create(value.Rest.Rest.Item1)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 16 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16>>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16>>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLongRef(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ Tuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 17 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17>>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17>>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLongRef(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ Tuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 18 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18>>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17, T18>>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLongRef(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ Tuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3, value.Rest.Rest.Item4)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 19 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19>>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17, T18, T19>>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLongRef(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ Tuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3, value.Rest.Rest.Item4, value.Rest.Rest.Item5)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 20 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19, T20>>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17, T18, T19, T20>>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLongRef(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ Tuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3, value.Rest.Rest.Item4, value.Rest.Rest.Item5, value.Rest.Rest.Item6)));
+ }
+
+ /// <summary>
+ /// Make a properly nested <see cref="Tuple"/> from a properly nested <see cref="ValueTuple"/> with 21 elements.
+ /// </summary>
+ public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19, T20, T21>>>
+ ToTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(
+ this ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8, T9, T10, T11, T12, T13, T14, ValueTuple<T15, T16, T17, T18, T19, T20, T21>>> value)
+ {
+ return CreateLongRef(value.Item1, value.Item2, value.Item3, value.Item4, value.Item5, value.Item6, value.Item7,
+ CreateLongRef(value.Rest.Item1, value.Rest.Item2, value.Rest.Item3, value.Rest.Item4, value.Rest.Item5, value.Rest.Item6, value.Rest.Item7,
+ Tuple.Create(value.Rest.Rest.Item1, value.Rest.Rest.Item2, value.Rest.Rest.Item3, value.Rest.Rest.Item4, value.Rest.Rest.Item5, value.Rest.Rest.Item6, value.Rest.Rest.Item7)));
+ }
+ #endregion
+
+ private static ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest> CreateLong<T1, T2, T3, T4, T5, T6, T7, TRest>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest) where TRest : struct, ITuple =>
+ new ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(item1, item2, item3, item4, item5, item6, item7, rest);
+
+ private static Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> CreateLongRef<T1, T2, T3, T4, T5, T6, T7, TRest>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest) where TRest : ITuple =>
+ new Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>(item1, item2, item3, item4, item5, item6, item7, rest);
+ }
+} \ No newline at end of file
diff --git a/src/mscorlib/src/System/Type.cs b/src/mscorlib/src/System/Type.cs
index 2d30c4c7f2..3647451445 100644
--- a/src/mscorlib/src/System/Type.cs
+++ b/src/mscorlib/src/System/Type.cs
@@ -19,7 +19,6 @@ namespace System
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Security;
- using System.Security.Permissions;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Versioning;
@@ -29,10 +28,7 @@ namespace System
using DebuggerStepThroughAttribute = System.Diagnostics.DebuggerStepThroughAttribute;
[Serializable]
- [ClassInterface(ClassInterfaceType.None)]
- [ComDefaultInterface(typeof(_Type))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public abstract class Type : MemberInfo, _Type, IReflect
+ public abstract class Type : MemberInfo, IReflect
{
//
// System.Type is appdomain agile type. Appdomain agile types cannot have precise static constructors. Make
@@ -135,8 +131,11 @@ namespace System
[MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
public static Type ReflectionOnlyGetType(String typeName, bool throwIfNotFound, bool ignoreCase)
{
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeType.GetType(typeName, throwIfNotFound, ignoreCase, true /*reflectionOnly*/, ref stackMark);
+ if (typeName == null)
+ throw new ArgumentNullException(nameof(typeName));
+ if (typeName.Length == 0 && throwIfNotFound)
+ throw new TypeLoadException(Environment.GetResourceString("Arg_TypeLoadNullStr"));
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReflectionOnlyGetType"));
}
public virtual Type MakePointerType() { throw new NotSupportedException(); }
@@ -297,7 +296,6 @@ namespace System
// Module Property associated with a class.
- // _Type.Module
public new abstract Module Module { get; }
// Assembly Property associated with a class.
@@ -376,7 +374,6 @@ namespace System
// This method will search for the specified constructor. For constructors,
// unlike everything else, the default is to not look for static methods. The
// reason is that we don't typically expose the class initializer.
- [System.Runtime.InteropServices.ComVisible(true)]
public ConstructorInfo GetConstructor(BindingFlags bindingAttr,
Binder binder,
CallingConventions callConvention,
@@ -393,7 +390,6 @@ namespace System
return GetConstructorImpl(bindingAttr, binder, callConvention, types, modifiers);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public ConstructorInfo GetConstructor(BindingFlags bindingAttr, Binder binder, Type[] types, ParameterModifier[] modifiers)
{
if (types == null)
@@ -405,7 +401,6 @@ namespace System
return GetConstructorImpl(bindingAttr, binder, CallingConventions.Any, types, modifiers);
}
- [System.Runtime.InteropServices.ComVisible(true)]
public ConstructorInfo GetConstructor(Type[] types)
{
// The arguments are checked in the called version of GetConstructor.
@@ -422,15 +417,12 @@ namespace System
// This routine will return an array of all constructors supported by the class.
// Unlike everything else, the default is to not look for static methods. The
// reason is that we don't typically expose the class initializer.
- [System.Runtime.InteropServices.ComVisible(true)]
public ConstructorInfo[] GetConstructors() {
return GetConstructors(BindingFlags.Public | BindingFlags.Instance);
}
- [System.Runtime.InteropServices.ComVisible(true)]
abstract public ConstructorInfo[] GetConstructors(BindingFlags bindingAttr);
- [System.Runtime.InteropServices.ComVisible(true)]
public ConstructorInfo TypeInitializer {
get {
return GetConstructorImpl(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic,
@@ -676,16 +668,6 @@ namespace System
return GetPropertyImpl(name,Type.DefaultLookup,null,returnType,null,null);
}
- internal PropertyInfo GetProperty(String name, BindingFlags bindingAttr, Type returnType)
- {
- if (name == null)
- throw new ArgumentNullException(nameof(name));
- if (returnType == null)
- throw new ArgumentNullException(nameof(returnType));
- Contract.EndContractBlock();
- return GetPropertyImpl(name, bindingAttr, null, returnType, null, null);
- }
-
public PropertyInfo GetProperty(String name)
{
if (name == null)
@@ -1229,11 +1211,6 @@ namespace System
[Pure]
get {return IsMarshalByRefImpl();}
}
-
- internal bool HasProxyAttribute {
- [Pure]
- get {return HasProxyAttributeImpl();}
- }
// Protected routine to determine if this class represents a value class
// The default implementation of IsValueTypeImpl never returns true for non-runtime types.
@@ -1297,12 +1274,6 @@ namespace System
return false;
}
- internal virtual bool HasProxyAttributeImpl()
- {
- // We will override this in RuntimeType
- return false;
- }
-
[Pure]
abstract public Type GetElementType();
@@ -1599,7 +1570,6 @@ namespace System
// else returns false. If this class and c are the same class false is
// returned.
//
- [System.Runtime.InteropServices.ComVisible(true)]
[Pure]
public virtual bool IsSubclassOf(Type c)
{
@@ -1746,7 +1716,6 @@ namespace System
return Equals(o as Type);
}
- // _Type.Equals(Type)
[Pure]
public virtual bool Equals(Type o)
{
@@ -1777,14 +1746,12 @@ namespace System
// This method will return an interface mapping for the interface
// requested. It will throw an argument exception if the Type doesn't
// implemenet the interface.
- [System.Runtime.InteropServices.ComVisible(true)]
public virtual InterfaceMapping GetInterfaceMap(Type interfaceType)
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_SubclassOverride"));
}
// this method is required so Object.GetType is not made virtual by the compiler
- // _Type.GetType()
public new Type GetType()
{
return base.GetType();
diff --git a/src/mscorlib/src/System/TypeAccessException.cs b/src/mscorlib/src/System/TypeAccessException.cs
index 5ddc9a7538..32afbdfeb8 100644
--- a/src/mscorlib/src/System/TypeAccessException.cs
+++ b/src/mscorlib/src/System/TypeAccessException.cs
@@ -2,9 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-
using System.Runtime.Serialization;
-using System.Security;
namespace System
{
@@ -14,27 +12,23 @@ namespace System
public class TypeAccessException : TypeLoadException
{
public TypeAccessException()
- : base(Environment.GetResourceString("Arg_TypeAccessException"))
+ : base(SR.Arg_TypeAccessException)
{
- SetErrorCode(__HResults.COR_E_TYPEACCESS);
+ HResult = __HResults.COR_E_TYPEACCESS;
}
- public TypeAccessException(string message)
+ public TypeAccessException(string message)
: base(message)
{
- SetErrorCode(__HResults.COR_E_TYPEACCESS);
+ HResult = __HResults.COR_E_TYPEACCESS;
}
-
- public TypeAccessException(string message, Exception inner)
+
+ public TypeAccessException(string message, Exception inner)
: base(message, inner)
{
- SetErrorCode(__HResults.COR_E_TYPEACCESS);
+ HResult = __HResults.COR_E_TYPEACCESS;
}
-
- protected TypeAccessException(SerializationInfo info, StreamingContext context)
- : base(info, context)
- {
- SetErrorCode(__HResults.COR_E_TYPEACCESS);
- }
+
+ protected TypeAccessException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/TypeCode.cs b/src/mscorlib/src/System/TypeCode.cs
index bf71c2fd5b..293eb1f1aa 100644
--- a/src/mscorlib/src/System/TypeCode.cs
+++ b/src/mscorlib/src/System/TypeCode.cs
@@ -20,10 +20,12 @@
// These types of values are instead represented as classes. When the type code
// of an object is TypeCode.Object, a further instance-of check can be used to
// determine if the object is one of these values.
-namespace System {
+
+namespace System
+{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum TypeCode {
+ public enum TypeCode
+ {
Empty = 0, // Null reference
Object = 1, // Instance that isn't a value
DBNull = 2, // Database null value
@@ -44,5 +46,3 @@ namespace System {
String = 18, // Unicode character string
}
}
-
-
diff --git a/src/mscorlib/src/System/TypeInitializationException.cs b/src/mscorlib/src/System/TypeInitializationException.cs
index bcc1c3e968..9191028346 100644
--- a/src/mscorlib/src/System/TypeInitializationException.cs
+++ b/src/mscorlib/src/System/TypeInitializationException.cs
@@ -13,53 +13,67 @@
**
**
=============================================================================*/
-using System;
-using System.Runtime.Serialization;
+
using System.Globalization;
-using System.Security.Permissions;
+using System.Runtime.Serialization;
-namespace System {
+namespace System
+{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class TypeInitializationException : SystemException {
+ public sealed class TypeInitializationException : SystemException
+ {
private String _typeName;
// This exception is not creatable without specifying the
// inner exception.
private TypeInitializationException()
- : base(Environment.GetResourceString("TypeInitialization_Default")) {
- SetErrorCode(__HResults.COR_E_TYPEINITIALIZATION);
+ : base(SR.TypeInitialization_Default)
+ {
+ HResult = __HResults.COR_E_TYPEINITIALIZATION;
+ }
+
+
+ public TypeInitializationException(String fullTypeName, Exception innerException)
+ : this(fullTypeName, SR.Format(SR.TypeInitialization_Type, fullTypeName), innerException)
+ {
}
// This is called from within the runtime. I believe this is necessary
// for Interop only, though it's not particularly useful.
- private TypeInitializationException(String message) : base(message) {
- SetErrorCode(__HResults.COR_E_TYPEINITIALIZATION);
+ internal TypeInitializationException(String message) : base(message)
+ {
+ HResult = __HResults.COR_E_TYPEINITIALIZATION;
}
-
- public TypeInitializationException(String fullTypeName, Exception innerException) : base(Environment.GetResourceString("TypeInitialization_Type", fullTypeName), innerException) {
+
+ internal TypeInitializationException(String fullTypeName, String message, Exception innerException)
+ : base(message, innerException)
+ {
_typeName = fullTypeName;
- SetErrorCode(__HResults.COR_E_TYPEINITIALIZATION);
+ HResult = __HResults.COR_E_TYPEINITIALIZATION;
}
- internal TypeInitializationException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ internal TypeInitializationException(SerializationInfo info, StreamingContext context)
+ : base(info, context)
+ {
_typeName = info.GetString("TypeName");
}
+ public override void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ base.GetObjectData(info, context);
+ info.AddValue("TypeName", TypeName, typeof(String));
+ }
+
public String TypeName
{
- get {
- if (_typeName == null) {
+ get
+ {
+ if (_typeName == null)
+ {
return String.Empty;
}
return _typeName;
}
}
-
- public override void GetObjectData(SerializationInfo info, StreamingContext context) {
- base.GetObjectData(info, context);
- info.AddValue("TypeName",TypeName,typeof(String));
- }
-
}
}
diff --git a/src/mscorlib/src/System/TypeLoadException.cs b/src/mscorlib/src/System/TypeLoadException.cs
index d73a97f9c5..7bc3a1bcce 100644
--- a/src/mscorlib/src/System/TypeLoadException.cs
+++ b/src/mscorlib/src/System/TypeLoadException.cs
@@ -20,11 +20,9 @@ namespace System {
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
- using System.Security.Permissions;
using System.Diagnostics.Contracts;
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public class TypeLoadException : SystemException, ISerializable {
public TypeLoadException()
diff --git a/src/mscorlib/src/System/TypeUnloadedException.cs b/src/mscorlib/src/System/TypeUnloadedException.cs
index 511314d329..f05d673a74 100644
--- a/src/mscorlib/src/System/TypeUnloadedException.cs
+++ b/src/mscorlib/src/System/TypeUnloadedException.cs
@@ -15,7 +15,6 @@ namespace System {
using System.Runtime.Serialization;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class TypeUnloadedException : SystemException {
public TypeUnloadedException()
diff --git a/src/mscorlib/src/System/TypedReference.cs b/src/mscorlib/src/System/TypedReference.cs
index b65652e590..5e8f3c4c04 100644
--- a/src/mscorlib/src/System/TypedReference.cs
+++ b/src/mscorlib/src/System/TypedReference.cs
@@ -11,12 +11,10 @@ namespace System {
using System.Runtime.CompilerServices;
using CultureInfo = System.Globalization.CultureInfo;
using FieldInfo = System.Reflection.FieldInfo;
- using System.Security.Permissions;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.Versioning.NonVersionable] // This only applies to field layout
public struct TypedReference
{
diff --git a/src/mscorlib/src/System/UInt16.cs b/src/mscorlib/src/System/UInt16.cs
index 399ef02d7d..5cd1a65b70 100644
--- a/src/mscorlib/src/System/UInt16.cs
+++ b/src/mscorlib/src/System/UInt16.cs
@@ -19,7 +19,6 @@ namespace System {
// Wrapper for unsigned 16 bit integers.
[Serializable]
[CLSCompliant(false), System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct UInt16 : IComparable, IFormattable, IConvertible
, IComparable<UInt16>, IEquatable<UInt16>
{
diff --git a/src/mscorlib/src/System/UInt32.cs b/src/mscorlib/src/System/UInt32.cs
index f3d60092f7..fc3f10f96f 100644
--- a/src/mscorlib/src/System/UInt32.cs
+++ b/src/mscorlib/src/System/UInt32.cs
@@ -21,7 +21,6 @@ namespace System {
// * Wrapper for unsigned 32 bit integers.
[Serializable]
[CLSCompliant(false), System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct UInt32 : IComparable, IFormattable, IConvertible
, IComparable<UInt32>, IEquatable<UInt32>
{
diff --git a/src/mscorlib/src/System/UInt64.cs b/src/mscorlib/src/System/UInt64.cs
index b55cd7ce6a..3b64f056e9 100644
--- a/src/mscorlib/src/System/UInt64.cs
+++ b/src/mscorlib/src/System/UInt64.cs
@@ -19,7 +19,6 @@ namespace System {
// Wrapper for unsigned 64 bit integers.
[Serializable]
[CLSCompliant(false), System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
-[System.Runtime.InteropServices.ComVisible(true)]
public struct UInt64 : IComparable, IFormattable, IConvertible
, IComparable<UInt64>, IEquatable<UInt64>
{
diff --git a/src/mscorlib/src/System/UIntPtr.cs b/src/mscorlib/src/System/UIntPtr.cs
index eab424fc69..d0f988dbb8 100644
--- a/src/mscorlib/src/System/UIntPtr.cs
+++ b/src/mscorlib/src/System/UIntPtr.cs
@@ -21,7 +21,6 @@ namespace System {
[Serializable]
[CLSCompliant(false)]
- [System.Runtime.InteropServices.ComVisible(true)]
public struct UIntPtr : IEquatable<UIntPtr>, ISerializable
{
unsafe private void* m_value;
diff --git a/src/mscorlib/src/System/UnauthorizedAccessException.cs b/src/mscorlib/src/System/UnauthorizedAccessException.cs
index 07e95d547c..997358826f 100644
--- a/src/mscorlib/src/System/UnauthorizedAccessException.cs
+++ b/src/mscorlib/src/System/UnauthorizedAccessException.cs
@@ -13,31 +13,33 @@
**
===========================================================*/
-using System;
using System.Runtime.Serialization;
-namespace System {
+namespace System
+{
// The UnauthorizedAccessException is thrown when access errors
// occur from IO or other OS methods.
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class UnauthorizedAccessException : SystemException {
- public UnauthorizedAccessException()
- : base(Environment.GetResourceString("Arg_UnauthorizedAccessException")) {
- SetErrorCode(__HResults.COR_E_UNAUTHORIZEDACCESS);
+ public class UnauthorizedAccessException : SystemException
+ {
+ public UnauthorizedAccessException()
+ : base(SR.Arg_UnauthorizedAccessException)
+ {
+ HResult = __HResults.COR_E_UNAUTHORIZEDACCESS;
}
-
- public UnauthorizedAccessException(String message)
- : base(message) {
- SetErrorCode(__HResults.COR_E_UNAUTHORIZEDACCESS);
- }
-
- public UnauthorizedAccessException(String message, Exception inner)
- : base(message, inner) {
- SetErrorCode(__HResults.COR_E_UNAUTHORIZEDACCESS);
+
+ public UnauthorizedAccessException(String message)
+ : base(message)
+ {
+ HResult = __HResults.COR_E_UNAUTHORIZEDACCESS;
}
- protected UnauthorizedAccessException(SerializationInfo info, StreamingContext context) : base(info, context) {
+ public UnauthorizedAccessException(String message, Exception inner)
+ : base(message, inner)
+ {
+ HResult = __HResults.COR_E_UNAUTHORIZEDACCESS;
}
+
+ protected UnauthorizedAccessException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}
diff --git a/src/mscorlib/src/System/UnhandledExceptionEventArgs.cs b/src/mscorlib/src/System/UnhandledExceptionEventArgs.cs
index e155ffc68e..d33830181c 100644
--- a/src/mscorlib/src/System/UnhandledExceptionEventArgs.cs
+++ b/src/mscorlib/src/System/UnhandledExceptionEventArgs.cs
@@ -2,28 +2,28 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
- using System;
- using System.Runtime.ConstrainedExecution;
-
+namespace System
+{
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
- public class UnhandledExceptionEventArgs : EventArgs {
- private Object _Exception;
- private bool _IsTerminating;
+ public class UnhandledExceptionEventArgs : EventArgs
+ {
+ private Object _exception;
+ private bool _isTerminating;
- public UnhandledExceptionEventArgs(Object exception, bool isTerminating) {
- _Exception = exception;
- _IsTerminating = isTerminating;
+ public UnhandledExceptionEventArgs(Object exception, bool isTerminating)
+ {
+ _exception = exception;
+ _isTerminating = isTerminating;
}
- public Object ExceptionObject {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- get { return _Exception; }
+
+ public Object ExceptionObject
+ {
+ get { return _exception; }
}
- public bool IsTerminating {
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
- get { return _IsTerminating; }
+
+ public bool IsTerminating
+ {
+ get { return _isTerminating; }
}
}
}
diff --git a/src/mscorlib/src/System/UnhandledExceptionEventHandler.cs b/src/mscorlib/src/System/UnhandledExceptionEventHandler.cs
index 8c2798230c..b99414c189 100644
--- a/src/mscorlib/src/System/UnhandledExceptionEventHandler.cs
+++ b/src/mscorlib/src/System/UnhandledExceptionEventHandler.cs
@@ -2,10 +2,8 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-namespace System {
-
- using System;
+namespace System
+{
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
public delegate void UnhandledExceptionEventHandler(Object sender, UnhandledExceptionEventArgs e);
}
diff --git a/src/mscorlib/src/System/ValueTuple.cs b/src/mscorlib/src/System/ValueTuple.cs
new file mode 100644
index 0000000000..0f0863a2ed
--- /dev/null
+++ b/src/mscorlib/src/System/ValueTuple.cs
@@ -0,0 +1,2324 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Runtime.InteropServices;
+using System.Runtime.CompilerServices;
+using HashHelpers = System.Numerics.Hashing.HashHelpers;
+
+namespace System
+{
+ /// <summary>
+ /// Helper so we can call some tuple methods recursively without knowing the underlying types.
+ /// </summary>
+ internal interface IValueTupleInternal : ITuple
+ {
+ int GetHashCode(IEqualityComparer comparer);
+ string ToStringEnd();
+ }
+
+ /// <summary>
+ /// The ValueTuple types (from arity 0 to 8) comprise the runtime implementation that underlies tuples in C# and struct tuples in F#.
+ /// Aside from created via language syntax, they are most easily created via the ValueTuple.Create factory methods.
+ /// The System.ValueTuple types differ from the System.Tuple types in that:
+ /// - they are structs rather than classes,
+ /// - they are mutable rather than readonly, and
+ /// - their members (such as Item1, Item2, etc) are fields rather than properties.
+ /// </summary>
+ [Serializable]
+ public struct ValueTuple
+ : IEquatable<ValueTuple>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple>, IValueTupleInternal, ITuple
+ {
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple"/> instance is equal to a specified object.
+ /// </summary>
+ /// <param name="obj">The object to compare with this instance.</param>
+ /// <returns><see langword="true"/> if <paramref name="obj"/> is a <see cref="ValueTuple"/>.</returns>
+ public override bool Equals(object obj)
+ {
+ return obj is ValueTuple;
+ }
+
+ /// <summary>Returns a value indicating whether this instance is equal to a specified value.</summary>
+ /// <param name="other">An instance to compare to this instance.</param>
+ /// <returns>true if <paramref name="other"/> has the same value as this instance; otherwise, false.</returns>
+ public bool Equals(ValueTuple other)
+ {
+ return true;
+ }
+
+ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
+ {
+ return other is ValueTuple;
+ }
+
+ int IComparable.CompareTo(object other)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ return 0;
+ }
+
+ /// <summary>Compares this instance to a specified instance and returns an indication of their relative values.</summary>
+ /// <param name="other">An instance to compare.</param>
+ /// <returns>
+ /// A signed number indicating the relative values of this instance and <paramref name="other"/>.
+ /// Returns less than zero if this instance is less than <paramref name="other"/>, zero if this
+ /// instance is equal to <paramref name="other"/>, and greater than zero if this instance is greater
+ /// than <paramref name="other"/>.
+ /// </returns>
+ public int CompareTo(ValueTuple other)
+ {
+ return 0;
+ }
+
+ int IStructuralComparable.CompareTo(object other, IComparer comparer)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ return 0;
+ }
+
+ /// <summary>Returns the hash code for this instance.</summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ return 0;
+ }
+
+ int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
+ return 0;
+ }
+
+ int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return 0;
+ }
+
+ /// <summary>
+ /// Returns a string that represents the value of this <see cref="ValueTuple"/> instance.
+ /// </summary>
+ /// <returns>The string representation of this <see cref="ValueTuple"/> instance.</returns>
+ /// <remarks>
+ /// The string returned by this method takes the form <c>()</c>.
+ /// </remarks>
+ public override string ToString()
+ {
+ return "()";
+ }
+
+ string IValueTupleInternal.ToStringEnd()
+ {
+ return ")";
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 0;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ throw new IndexOutOfRangeException();
+ }
+ }
+
+ /// <summary>Creates a new struct 0-tuple.</summary>
+ /// <returns>A 0-tuple.</returns>
+ public static ValueTuple Create() =>
+ new ValueTuple();
+
+ /// <summary>Creates a new struct 1-tuple, or singleton.</summary>
+ /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
+ /// <param name="item1">The value of the first component of the tuple.</param>
+ /// <returns>A 1-tuple (singleton) whose value is (item1).</returns>
+ public static ValueTuple<T1> Create<T1>(T1 item1) =>
+ new ValueTuple<T1>(item1);
+
+ /// <summary>Creates a new struct 2-tuple, or pair.</summary>
+ /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
+ /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
+ /// <param name="item1">The value of the first component of the tuple.</param>
+ /// <param name="item2">The value of the second component of the tuple.</param>
+ /// <returns>A 2-tuple (pair) whose value is (item1, item2).</returns>
+ public static ValueTuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) =>
+ new ValueTuple<T1, T2>(item1, item2);
+
+ /// <summary>Creates a new struct 3-tuple, or triple.</summary>
+ /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
+ /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
+ /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
+ /// <param name="item1">The value of the first component of the tuple.</param>
+ /// <param name="item2">The value of the second component of the tuple.</param>
+ /// <param name="item3">The value of the third component of the tuple.</param>
+ /// <returns>A 3-tuple (triple) whose value is (item1, item2, item3).</returns>
+ public static ValueTuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3) =>
+ new ValueTuple<T1, T2, T3>(item1, item2, item3);
+
+ /// <summary>Creates a new struct 4-tuple, or quadruple.</summary>
+ /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
+ /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
+ /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
+ /// <typeparam name="T4">The type of the fourth component of the tuple.</typeparam>
+ /// <param name="item1">The value of the first component of the tuple.</param>
+ /// <param name="item2">The value of the second component of the tuple.</param>
+ /// <param name="item3">The value of the third component of the tuple.</param>
+ /// <param name="item4">The value of the fourth component of the tuple.</param>
+ /// <returns>A 4-tuple (quadruple) whose value is (item1, item2, item3, item4).</returns>
+ public static ValueTuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4) =>
+ new ValueTuple<T1, T2, T3, T4>(item1, item2, item3, item4);
+
+ /// <summary>Creates a new struct 5-tuple, or quintuple.</summary>
+ /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
+ /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
+ /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
+ /// <typeparam name="T4">The type of the fourth component of the tuple.</typeparam>
+ /// <typeparam name="T5">The type of the fifth component of the tuple.</typeparam>
+ /// <param name="item1">The value of the first component of the tuple.</param>
+ /// <param name="item2">The value of the second component of the tuple.</param>
+ /// <param name="item3">The value of the third component of the tuple.</param>
+ /// <param name="item4">The value of the fourth component of the tuple.</param>
+ /// <param name="item5">The value of the fifth component of the tuple.</param>
+ /// <returns>A 5-tuple (quintuple) whose value is (item1, item2, item3, item4, item5).</returns>
+ public static ValueTuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) =>
+ new ValueTuple<T1, T2, T3, T4, T5>(item1, item2, item3, item4, item5);
+
+ /// <summary>Creates a new struct 6-tuple, or sextuple.</summary>
+ /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
+ /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
+ /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
+ /// <typeparam name="T4">The type of the fourth component of the tuple.</typeparam>
+ /// <typeparam name="T5">The type of the fifth component of the tuple.</typeparam>
+ /// <typeparam name="T6">The type of the sixth component of the tuple.</typeparam>
+ /// <param name="item1">The value of the first component of the tuple.</param>
+ /// <param name="item2">The value of the second component of the tuple.</param>
+ /// <param name="item3">The value of the third component of the tuple.</param>
+ /// <param name="item4">The value of the fourth component of the tuple.</param>
+ /// <param name="item5">The value of the fifth component of the tuple.</param>
+ /// <param name="item6">The value of the sixth component of the tuple.</param>
+ /// <returns>A 6-tuple (sextuple) whose value is (item1, item2, item3, item4, item5, item6).</returns>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6) =>
+ new ValueTuple<T1, T2, T3, T4, T5, T6>(item1, item2, item3, item4, item5, item6);
+
+ /// <summary>Creates a new struct 7-tuple, or septuple.</summary>
+ /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
+ /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
+ /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
+ /// <typeparam name="T4">The type of the fourth component of the tuple.</typeparam>
+ /// <typeparam name="T5">The type of the fifth component of the tuple.</typeparam>
+ /// <typeparam name="T6">The type of the sixth component of the tuple.</typeparam>
+ /// <typeparam name="T7">The type of the seventh component of the tuple.</typeparam>
+ /// <param name="item1">The value of the first component of the tuple.</param>
+ /// <param name="item2">The value of the second component of the tuple.</param>
+ /// <param name="item3">The value of the third component of the tuple.</param>
+ /// <param name="item4">The value of the fourth component of the tuple.</param>
+ /// <param name="item5">The value of the fifth component of the tuple.</param>
+ /// <param name="item6">The value of the sixth component of the tuple.</param>
+ /// <param name="item7">The value of the seventh component of the tuple.</param>
+ /// <returns>A 7-tuple (septuple) whose value is (item1, item2, item3, item4, item5, item6, item7).</returns>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7) =>
+ new ValueTuple<T1, T2, T3, T4, T5, T6, T7>(item1, item2, item3, item4, item5, item6, item7);
+
+ /// <summary>Creates a new struct 8-tuple, or octuple.</summary>
+ /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
+ /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
+ /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
+ /// <typeparam name="T4">The type of the fourth component of the tuple.</typeparam>
+ /// <typeparam name="T5">The type of the fifth component of the tuple.</typeparam>
+ /// <typeparam name="T6">The type of the sixth component of the tuple.</typeparam>
+ /// <typeparam name="T7">The type of the seventh component of the tuple.</typeparam>
+ /// <typeparam name="T8">The type of the eighth component of the tuple.</typeparam>
+ /// <param name="item1">The value of the first component of the tuple.</param>
+ /// <param name="item2">The value of the second component of the tuple.</param>
+ /// <param name="item3">The value of the third component of the tuple.</param>
+ /// <param name="item4">The value of the fourth component of the tuple.</param>
+ /// <param name="item5">The value of the fifth component of the tuple.</param>
+ /// <param name="item6">The value of the sixth component of the tuple.</param>
+ /// <param name="item7">The value of the seventh component of the tuple.</param>
+ /// <param name="item8">The value of the eighth component of the tuple.</param>
+ /// <returns>An 8-tuple (octuple) whose value is (item1, item2, item3, item4, item5, item6, item7, item8).</returns>
+ public static ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) =>
+ new ValueTuple<T1, T2, T3, T4, T5, T6, T7, ValueTuple<T8>>(item1, item2, item3, item4, item5, item6, item7, ValueTuple.Create(item8));
+
+ internal static int CombineHashCodes(int h1, int h2)
+ {
+ return HashHelpers.Combine(HashHelpers.Combine(HashHelpers.RandomSeed, h1), h2);
+ }
+
+ internal static int CombineHashCodes(int h1, int h2, int h3)
+ {
+ return HashHelpers.Combine(CombineHashCodes(h1, h2), h3);
+ }
+
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4)
+ {
+ return HashHelpers.Combine(CombineHashCodes(h1, h2, h3), h4);
+ }
+
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5)
+ {
+ return HashHelpers.Combine(CombineHashCodes(h1, h2, h3, h4), h5);
+ }
+
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6)
+ {
+ return HashHelpers.Combine(CombineHashCodes(h1, h2, h3, h4, h5), h6);
+ }
+
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7)
+ {
+ return HashHelpers.Combine(CombineHashCodes(h1, h2, h3, h4, h5, h6), h7);
+ }
+
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8)
+ {
+ return HashHelpers.Combine(CombineHashCodes(h1, h2, h3, h4, h5, h6, h7), h8);
+ }
+ }
+
+ /// <summary>Represents a 1-tuple, or singleton, as a value type.</summary>
+ /// <typeparam name="T1">The type of the tuple's only component.</typeparam>
+ [Serializable]
+ public struct ValueTuple<T1>
+ : IEquatable<ValueTuple<T1>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1>>, IValueTupleInternal, ITuple
+ {
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1}"/> instance's first component.
+ /// </summary>
+ public T1 Item1;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValueTuple{T1}"/> value type.
+ /// </summary>
+ /// <param name="item1">The value of the tuple's first component.</param>
+ public ValueTuple(T1 item1)
+ {
+ Item1 = item1;
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1}"/> instance is equal to a specified object.
+ /// </summary>
+ /// <param name="obj">The object to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified object; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="obj"/> parameter is considered to be equal to the current instance under the following conditions:
+ /// <list type="bullet">
+ /// <item><description>It is a <see cref="ValueTuple{T1}"/> value type.</description></item>
+ /// <item><description>Its components are of the same types as those of the current instance.</description></item>
+ /// <item><description>Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.</description></item>
+ /// </list>
+ /// </remarks>
+ public override bool Equals(object obj)
+ {
+ return obj is ValueTuple<T1> && Equals((ValueTuple<T1>)obj);
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1}"/>
+ /// instance is equal to a specified <see cref="ValueTuple{T1}"/>.
+ /// </summary>
+ /// <param name="other">The tuple to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified tuple; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="other"/> parameter is considered to be equal to the current instance if each of its field
+ /// is equal to that of the current instance, using the default comparer for that field's type.
+ /// </remarks>
+ public bool Equals(ValueTuple<T1> other)
+ {
+ return EqualityComparer<T1>.Default.Equals(Item1, other.Item1);
+ }
+
+ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
+ {
+ if (other == null || !(other is ValueTuple<T1>)) return false;
+
+ var objTuple = (ValueTuple<T1>)other;
+
+ return comparer.Equals(Item1, objTuple.Item1);
+ }
+
+ int IComparable.CompareTo(object other)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ var objTuple = (ValueTuple<T1>)other;
+
+ return Comparer<T1>.Default.Compare(Item1, objTuple.Item1);
+ }
+
+ /// <summary>Compares this instance to a specified instance and returns an indication of their relative values.</summary>
+ /// <param name="other">An instance to compare.</param>
+ /// <returns>
+ /// A signed number indicating the relative values of this instance and <paramref name="other"/>.
+ /// Returns less than zero if this instance is less than <paramref name="other"/>, zero if this
+ /// instance is equal to <paramref name="other"/>, and greater than zero if this instance is greater
+ /// than <paramref name="other"/>.
+ /// </returns>
+ public int CompareTo(ValueTuple<T1> other)
+ {
+ return Comparer<T1>.Default.Compare(Item1, other.Item1);
+ }
+
+ int IStructuralComparable.CompareTo(object other, IComparer comparer)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ var objTuple = (ValueTuple<T1>)other;
+
+ return comparer.Compare(Item1, objTuple.Item1);
+ }
+
+ /// <summary>
+ /// Returns the hash code for the current <see cref="ValueTuple{T1}"/> instance.
+ /// </summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ return Item1?.GetHashCode() ?? 0;
+ }
+
+ int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
+ return comparer.GetHashCode(Item1);
+ }
+
+ int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return comparer.GetHashCode(Item1);
+ }
+
+ /// <summary>
+ /// Returns a string that represents the value of this <see cref="ValueTuple{T1}"/> instance.
+ /// </summary>
+ /// <returns>The string representation of this <see cref="ValueTuple{T1}"/> instance.</returns>
+ /// <remarks>
+ /// The string returned by this method takes the form <c>(Item1)</c>,
+ /// where <c>Item1</c> represents the value of <see cref="Item1"/>. If the field is <see langword="null"/>,
+ /// it is represented as <see cref="string.Empty"/>.
+ /// </remarks>
+ public override string ToString()
+ {
+ return "(" + Item1?.ToString() + ")";
+ }
+
+ string IValueTupleInternal.ToStringEnd()
+ {
+ return Item1?.ToString() + ")";
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 1;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ if (index != 0)
+ {
+ throw new IndexOutOfRangeException();
+ }
+ return Item1;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Represents a 2-tuple, or pair, as a value type.
+ /// </summary>
+ /// <typeparam name="T1">The type of the tuple's first component.</typeparam>
+ /// <typeparam name="T2">The type of the tuple's second component.</typeparam>
+ [Serializable]
+ [StructLayout(LayoutKind.Auto)]
+ public struct ValueTuple<T1, T2>
+ : IEquatable<ValueTuple<T1, T2>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1, T2>>, IValueTupleInternal, ITuple
+ {
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2}"/> instance's first component.
+ /// </summary>
+ public T1 Item1;
+
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2}"/> instance's first component.
+ /// </summary>
+ public T2 Item2;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValueTuple{T1, T2}"/> value type.
+ /// </summary>
+ /// <param name="item1">The value of the tuple's first component.</param>
+ /// <param name="item2">The value of the tuple's second component.</param>
+ public ValueTuple(T1 item1, T2 item2)
+ {
+ Item1 = item1;
+ Item2 = item2;
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2}"/> instance is equal to a specified object.
+ /// </summary>
+ /// <param name="obj">The object to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified object; otherwise, <see langword="false"/>.</returns>
+ ///
+ /// <remarks>
+ /// The <paramref name="obj"/> parameter is considered to be equal to the current instance under the following conditions:
+ /// <list type="bullet">
+ /// <item><description>It is a <see cref="ValueTuple{T1, T2}"/> value type.</description></item>
+ /// <item><description>Its components are of the same types as those of the current instance.</description></item>
+ /// <item><description>Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.</description></item>
+ /// </list>
+ /// </remarks>
+ public override bool Equals(object obj)
+ {
+ return obj is ValueTuple<T1, T2> && Equals((ValueTuple<T1, T2>)obj);
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2}"/> instance is equal to a specified <see cref="ValueTuple{T1, T2}"/>.
+ /// </summary>
+ /// <param name="other">The tuple to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified tuple; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="other"/> parameter is considered to be equal to the current instance if each of its fields
+ /// are equal to that of the current instance, using the default comparer for that field's type.
+ /// </remarks>
+ public bool Equals(ValueTuple<T1, T2> other)
+ {
+ return EqualityComparer<T1>.Default.Equals(Item1, other.Item1)
+ && EqualityComparer<T2>.Default.Equals(Item2, other.Item2);
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2}"/> instance is equal to a specified object based on a specified comparison method.
+ /// </summary>
+ /// <param name="other">The object to compare with this instance.</param>
+ /// <param name="comparer">An object that defines the method to use to evaluate whether the two objects are equal.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified object; otherwise, <see langword="false"/>.</returns>
+ ///
+ /// <remarks>
+ /// This member is an explicit interface member implementation. It can be used only when the
+ /// <see cref="ValueTuple{T1, T2}"/> instance is cast to an <see cref="IStructuralEquatable"/> interface.
+ ///
+ /// The <see cref="IEqualityComparer.Equals"/> implementation is called only if <c>other</c> is not <see langword="null"/>,
+ /// and if it can be successfully cast (in C#) or converted (in Visual Basic) to a <see cref="ValueTuple{T1, T2}"/>
+ /// whose components are of the same types as those of the current instance. The IStructuralEquatable.Equals(Object, IEqualityComparer) method
+ /// first passes the <see cref="Item1"/> values of the <see cref="ValueTuple{T1, T2}"/> objects to be compared to the
+ /// <see cref="IEqualityComparer.Equals"/> implementation. If this method call returns <see langword="true"/>, the method is
+ /// called again and passed the <see cref="Item2"/> values of the two <see cref="ValueTuple{T1, T2}"/> instances.
+ /// </remarks>
+ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
+ {
+ if (other == null || !(other is ValueTuple<T1, T2>)) return false;
+
+ var objTuple = (ValueTuple<T1, T2>)other;
+
+ return comparer.Equals(Item1, objTuple.Item1)
+ && comparer.Equals(Item2, objTuple.Item2);
+ }
+
+ int IComparable.CompareTo(object other)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ return CompareTo((ValueTuple<T1, T2>)other);
+ }
+
+ /// <summary>Compares this instance to a specified instance and returns an indication of their relative values.</summary>
+ /// <param name="other">An instance to compare.</param>
+ /// <returns>
+ /// A signed number indicating the relative values of this instance and <paramref name="other"/>.
+ /// Returns less than zero if this instance is less than <paramref name="other"/>, zero if this
+ /// instance is equal to <paramref name="other"/>, and greater than zero if this instance is greater
+ /// than <paramref name="other"/>.
+ /// </returns>
+ public int CompareTo(ValueTuple<T1, T2> other)
+ {
+ int c = Comparer<T1>.Default.Compare(Item1, other.Item1);
+ if (c != 0) return c;
+
+ return Comparer<T2>.Default.Compare(Item2, other.Item2);
+ }
+
+ int IStructuralComparable.CompareTo(object other, IComparer comparer)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ var objTuple = (ValueTuple<T1, T2>)other;
+
+ int c = comparer.Compare(Item1, objTuple.Item1);
+ if (c != 0) return c;
+
+ return comparer.Compare(Item2, objTuple.Item2);
+ }
+
+ /// <summary>
+ /// Returns the hash code for the current <see cref="ValueTuple{T1, T2}"/> instance.
+ /// </summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
+ Item2?.GetHashCode() ?? 0);
+ }
+
+ int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ private int GetHashCodeCore(IEqualityComparer comparer)
+ {
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
+ comparer.GetHashCode(Item2));
+ }
+
+ int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ /// <summary>
+ /// Returns a string that represents the value of this <see cref="ValueTuple{T1, T2}"/> instance.
+ /// </summary>
+ /// <returns>The string representation of this <see cref="ValueTuple{T1, T2}"/> instance.</returns>
+ /// <remarks>
+ /// The string returned by this method takes the form <c>(Item1, Item2)</c>,
+ /// where <c>Item1</c> and <c>Item2</c> represent the values of the <see cref="Item1"/>
+ /// and <see cref="Item2"/> fields. If either field value is <see langword="null"/>,
+ /// it is represented as <see cref="String.Empty"/>.
+ /// </remarks>
+ public override string ToString()
+ {
+ return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ")";
+ }
+
+ string IValueTupleInternal.ToStringEnd()
+ {
+ return Item1?.ToString() + ", " + Item2?.ToString() + ")";
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 2;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ default:
+ throw new IndexOutOfRangeException();
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Represents a 3-tuple, or triple, as a value type.
+ /// </summary>
+ /// <typeparam name="T1">The type of the tuple's first component.</typeparam>
+ /// <typeparam name="T2">The type of the tuple's second component.</typeparam>
+ /// <typeparam name="T3">The type of the tuple's third component.</typeparam>
+ [Serializable]
+ [StructLayout(LayoutKind.Auto)]
+ public struct ValueTuple<T1, T2, T3>
+ : IEquatable<ValueTuple<T1, T2, T3>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1, T2, T3>>, IValueTupleInternal, ITuple
+ {
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3}"/> instance's first component.
+ /// </summary>
+ public T1 Item1;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3}"/> instance's second component.
+ /// </summary>
+ public T2 Item2;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3}"/> instance's third component.
+ /// </summary>
+ public T3 Item3;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValueTuple{T1, T2, T3}"/> value type.
+ /// </summary>
+ /// <param name="item1">The value of the tuple's first component.</param>
+ /// <param name="item2">The value of the tuple's second component.</param>
+ /// <param name="item3">The value of the tuple's third component.</param>
+ public ValueTuple(T1 item1, T2 item2, T3 item3)
+ {
+ Item1 = item1;
+ Item2 = item2;
+ Item3 = item3;
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3}"/> instance is equal to a specified object.
+ /// </summary>
+ /// <param name="obj">The object to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified object; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="obj"/> parameter is considered to be equal to the current instance under the following conditions:
+ /// <list type="bullet">
+ /// <item><description>It is a <see cref="ValueTuple{T1, T2, T3}"/> value type.</description></item>
+ /// <item><description>Its components are of the same types as those of the current instance.</description></item>
+ /// <item><description>Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.</description></item>
+ /// </list>
+ /// </remarks>
+ public override bool Equals(object obj)
+ {
+ return obj is ValueTuple<T1, T2, T3> && Equals((ValueTuple<T1, T2, T3>)obj);
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3}"/>
+ /// instance is equal to a specified <see cref="ValueTuple{T1, T2, T3}"/>.
+ /// </summary>
+ /// <param name="other">The tuple to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified tuple; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="other"/> parameter is considered to be equal to the current instance if each of its fields
+ /// are equal to that of the current instance, using the default comparer for that field's type.
+ /// </remarks>
+ public bool Equals(ValueTuple<T1, T2, T3> other)
+ {
+ return EqualityComparer<T1>.Default.Equals(Item1, other.Item1)
+ && EqualityComparer<T2>.Default.Equals(Item2, other.Item2)
+ && EqualityComparer<T3>.Default.Equals(Item3, other.Item3);
+ }
+
+ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
+ {
+ if (other == null || !(other is ValueTuple<T1, T2, T3>)) return false;
+
+ var objTuple = (ValueTuple<T1, T2, T3>)other;
+
+ return comparer.Equals(Item1, objTuple.Item1)
+ && comparer.Equals(Item2, objTuple.Item2)
+ && comparer.Equals(Item3, objTuple.Item3);
+ }
+
+ int IComparable.CompareTo(object other)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ return CompareTo((ValueTuple<T1, T2, T3>)other);
+ }
+
+ /// <summary>Compares this instance to a specified instance and returns an indication of their relative values.</summary>
+ /// <param name="other">An instance to compare.</param>
+ /// <returns>
+ /// A signed number indicating the relative values of this instance and <paramref name="other"/>.
+ /// Returns less than zero if this instance is less than <paramref name="other"/>, zero if this
+ /// instance is equal to <paramref name="other"/>, and greater than zero if this instance is greater
+ /// than <paramref name="other"/>.
+ /// </returns>
+ public int CompareTo(ValueTuple<T1, T2, T3> other)
+ {
+ int c = Comparer<T1>.Default.Compare(Item1, other.Item1);
+ if (c != 0) return c;
+
+ c = Comparer<T2>.Default.Compare(Item2, other.Item2);
+ if (c != 0) return c;
+
+ return Comparer<T3>.Default.Compare(Item3, other.Item3);
+ }
+
+ int IStructuralComparable.CompareTo(object other, IComparer comparer)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ var objTuple = (ValueTuple<T1, T2, T3>)other;
+
+ int c = comparer.Compare(Item1, objTuple.Item1);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item2, objTuple.Item2);
+ if (c != 0) return c;
+
+ return comparer.Compare(Item3, objTuple.Item3);
+ }
+
+ /// <summary>
+ /// Returns the hash code for the current <see cref="ValueTuple{T1, T2, T3}"/> instance.
+ /// </summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
+ Item2?.GetHashCode() ?? 0,
+ Item3?.GetHashCode() ?? 0);
+ }
+
+ int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ private int GetHashCodeCore(IEqualityComparer comparer)
+ {
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
+ comparer.GetHashCode(Item2),
+ comparer.GetHashCode(Item3));
+ }
+
+ int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ /// <summary>
+ /// Returns a string that represents the value of this <see cref="ValueTuple{T1, T2, T3}"/> instance.
+ /// </summary>
+ /// <returns>The string representation of this <see cref="ValueTuple{T1, T2, T3}"/> instance.</returns>
+ /// <remarks>
+ /// The string returned by this method takes the form <c>(Item1, Item2, Item3)</c>.
+ /// If any field value is <see langword="null"/>, it is represented as <see cref="String.Empty"/>.
+ /// </remarks>
+ public override string ToString()
+ {
+ return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ")";
+ }
+
+ string IValueTupleInternal.ToStringEnd()
+ {
+ return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ")";
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 3;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ default:
+ throw new IndexOutOfRangeException();
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Represents a 4-tuple, or quadruple, as a value type.
+ /// </summary>
+ /// <typeparam name="T1">The type of the tuple's first component.</typeparam>
+ /// <typeparam name="T2">The type of the tuple's second component.</typeparam>
+ /// <typeparam name="T3">The type of the tuple's third component.</typeparam>
+ /// <typeparam name="T4">The type of the tuple's fourth component.</typeparam>
+ [Serializable]
+ [StructLayout(LayoutKind.Auto)]
+ public struct ValueTuple<T1, T2, T3, T4>
+ : IEquatable<ValueTuple<T1, T2, T3, T4>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1, T2, T3, T4>>, IValueTupleInternal, ITuple
+ {
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4}"/> instance's first component.
+ /// </summary>
+ public T1 Item1;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4}"/> instance's second component.
+ /// </summary>
+ public T2 Item2;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4}"/> instance's third component.
+ /// </summary>
+ public T3 Item3;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4}"/> instance's fourth component.
+ /// </summary>
+ public T4 Item4;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValueTuple{T1, T2, T3, T4}"/> value type.
+ /// </summary>
+ /// <param name="item1">The value of the tuple's first component.</param>
+ /// <param name="item2">The value of the tuple's second component.</param>
+ /// <param name="item3">The value of the tuple's third component.</param>
+ /// <param name="item4">The value of the tuple's fourth component.</param>
+ public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4)
+ {
+ Item1 = item1;
+ Item2 = item2;
+ Item3 = item3;
+ Item4 = item4;
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4}"/> instance is equal to a specified object.
+ /// </summary>
+ /// <param name="obj">The object to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified object; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="obj"/> parameter is considered to be equal to the current instance under the following conditions:
+ /// <list type="bullet">
+ /// <item><description>It is a <see cref="ValueTuple{T1, T2, T3, T4}"/> value type.</description></item>
+ /// <item><description>Its components are of the same types as those of the current instance.</description></item>
+ /// <item><description>Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.</description></item>
+ /// </list>
+ /// </remarks>
+ public override bool Equals(object obj)
+ {
+ return obj is ValueTuple<T1, T2, T3, T4> && Equals((ValueTuple<T1, T2, T3, T4>)obj);
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4}"/>
+ /// instance is equal to a specified <see cref="ValueTuple{T1, T2, T3, T4}"/>.
+ /// </summary>
+ /// <param name="other">The tuple to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified tuple; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="other"/> parameter is considered to be equal to the current instance if each of its fields
+ /// are equal to that of the current instance, using the default comparer for that field's type.
+ /// </remarks>
+ public bool Equals(ValueTuple<T1, T2, T3, T4> other)
+ {
+ return EqualityComparer<T1>.Default.Equals(Item1, other.Item1)
+ && EqualityComparer<T2>.Default.Equals(Item2, other.Item2)
+ && EqualityComparer<T3>.Default.Equals(Item3, other.Item3)
+ && EqualityComparer<T4>.Default.Equals(Item4, other.Item4);
+ }
+
+ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
+ {
+ if (other == null || !(other is ValueTuple<T1, T2, T3, T4>)) return false;
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4>)other;
+
+ return comparer.Equals(Item1, objTuple.Item1)
+ && comparer.Equals(Item2, objTuple.Item2)
+ && comparer.Equals(Item3, objTuple.Item3)
+ && comparer.Equals(Item4, objTuple.Item4);
+ }
+
+ int IComparable.CompareTo(object other)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ return CompareTo((ValueTuple<T1, T2, T3, T4>)other);
+ }
+
+ /// <summary>Compares this instance to a specified instance and returns an indication of their relative values.</summary>
+ /// <param name="other">An instance to compare.</param>
+ /// <returns>
+ /// A signed number indicating the relative values of this instance and <paramref name="other"/>.
+ /// Returns less than zero if this instance is less than <paramref name="other"/>, zero if this
+ /// instance is equal to <paramref name="other"/>, and greater than zero if this instance is greater
+ /// than <paramref name="other"/>.
+ /// </returns>
+ public int CompareTo(ValueTuple<T1, T2, T3, T4> other)
+ {
+ int c = Comparer<T1>.Default.Compare(Item1, other.Item1);
+ if (c != 0) return c;
+
+ c = Comparer<T2>.Default.Compare(Item2, other.Item2);
+ if (c != 0) return c;
+
+ c = Comparer<T3>.Default.Compare(Item3, other.Item3);
+ if (c != 0) return c;
+
+ return Comparer<T4>.Default.Compare(Item4, other.Item4);
+ }
+
+ int IStructuralComparable.CompareTo(object other, IComparer comparer)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4>)other;
+
+ int c = comparer.Compare(Item1, objTuple.Item1);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item2, objTuple.Item2);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item3, objTuple.Item3);
+ if (c != 0) return c;
+
+ return comparer.Compare(Item4, objTuple.Item4);
+ }
+
+ /// <summary>
+ /// Returns the hash code for the current <see cref="ValueTuple{T1, T2, T3, T4}"/> instance.
+ /// </summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
+ Item2?.GetHashCode() ?? 0,
+ Item3?.GetHashCode() ?? 0,
+ Item4?.GetHashCode() ?? 0);
+ }
+
+ int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ private int GetHashCodeCore(IEqualityComparer comparer)
+ {
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
+ comparer.GetHashCode(Item2),
+ comparer.GetHashCode(Item3),
+ comparer.GetHashCode(Item4));
+ }
+
+ int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ /// <summary>
+ /// Returns a string that represents the value of this <see cref="ValueTuple{T1, T2, T3, T4}"/> instance.
+ /// </summary>
+ /// <returns>The string representation of this <see cref="ValueTuple{T1, T2, T3, T4}"/> instance.</returns>
+ /// <remarks>
+ /// The string returned by this method takes the form <c>(Item1, Item2, Item3, Item4)</c>.
+ /// If any field value is <see langword="null"/>, it is represented as <see cref="String.Empty"/>.
+ /// </remarks>
+ public override string ToString()
+ {
+ return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ")";
+ }
+
+ string IValueTupleInternal.ToStringEnd()
+ {
+ return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ")";
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 4;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ default:
+ throw new IndexOutOfRangeException();
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Represents a 5-tuple, or quintuple, as a value type.
+ /// </summary>
+ /// <typeparam name="T1">The type of the tuple's first component.</typeparam>
+ /// <typeparam name="T2">The type of the tuple's second component.</typeparam>
+ /// <typeparam name="T3">The type of the tuple's third component.</typeparam>
+ /// <typeparam name="T4">The type of the tuple's fourth component.</typeparam>
+ /// <typeparam name="T5">The type of the tuple's fifth component.</typeparam>
+ [Serializable]
+ [StructLayout(LayoutKind.Auto)]
+ public struct ValueTuple<T1, T2, T3, T4, T5>
+ : IEquatable<ValueTuple<T1, T2, T3, T4, T5>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1, T2, T3, T4, T5>>, IValueTupleInternal, ITuple
+ {
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> instance's first component.
+ /// </summary>
+ public T1 Item1;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> instance's second component.
+ /// </summary>
+ public T2 Item2;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> instance's third component.
+ /// </summary>
+ public T3 Item3;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> instance's fourth component.
+ /// </summary>
+ public T4 Item4;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> instance's fifth component.
+ /// </summary>
+ public T5 Item5;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> value type.
+ /// </summary>
+ /// <param name="item1">The value of the tuple's first component.</param>
+ /// <param name="item2">The value of the tuple's second component.</param>
+ /// <param name="item3">The value of the tuple's third component.</param>
+ /// <param name="item4">The value of the tuple's fourth component.</param>
+ /// <param name="item5">The value of the tuple's fifth component.</param>
+ public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
+ {
+ Item1 = item1;
+ Item2 = item2;
+ Item3 = item3;
+ Item4 = item4;
+ Item5 = item5;
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> instance is equal to a specified object.
+ /// </summary>
+ /// <param name="obj">The object to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified object; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="obj"/> parameter is considered to be equal to the current instance under the following conditions:
+ /// <list type="bullet">
+ /// <item><description>It is a <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> value type.</description></item>
+ /// <item><description>Its components are of the same types as those of the current instance.</description></item>
+ /// <item><description>Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.</description></item>
+ /// </list>
+ /// </remarks>
+ public override bool Equals(object obj)
+ {
+ return obj is ValueTuple<T1, T2, T3, T4, T5> && Equals((ValueTuple<T1, T2, T3, T4, T5>)obj);
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4, T5}"/>
+ /// instance is equal to a specified <see cref="ValueTuple{T1, T2, T3, T4, T5}"/>.
+ /// </summary>
+ /// <param name="other">The tuple to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified tuple; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="other"/> parameter is considered to be equal to the current instance if each of its fields
+ /// are equal to that of the current instance, using the default comparer for that field's type.
+ /// </remarks>
+ public bool Equals(ValueTuple<T1, T2, T3, T4, T5> other)
+ {
+ return EqualityComparer<T1>.Default.Equals(Item1, other.Item1)
+ && EqualityComparer<T2>.Default.Equals(Item2, other.Item2)
+ && EqualityComparer<T3>.Default.Equals(Item3, other.Item3)
+ && EqualityComparer<T4>.Default.Equals(Item4, other.Item4)
+ && EqualityComparer<T5>.Default.Equals(Item5, other.Item5);
+ }
+
+ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
+ {
+ if (other == null || !(other is ValueTuple<T1, T2, T3, T4, T5>)) return false;
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4, T5>)other;
+
+ return comparer.Equals(Item1, objTuple.Item1)
+ && comparer.Equals(Item2, objTuple.Item2)
+ && comparer.Equals(Item3, objTuple.Item3)
+ && comparer.Equals(Item4, objTuple.Item4)
+ && comparer.Equals(Item5, objTuple.Item5);
+ }
+
+ int IComparable.CompareTo(object other)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4, T5>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ return CompareTo((ValueTuple<T1, T2, T3, T4, T5>)other);
+ }
+
+ /// <summary>Compares this instance to a specified instance and returns an indication of their relative values.</summary>
+ /// <param name="other">An instance to compare.</param>
+ /// <returns>
+ /// A signed number indicating the relative values of this instance and <paramref name="other"/>.
+ /// Returns less than zero if this instance is less than <paramref name="other"/>, zero if this
+ /// instance is equal to <paramref name="other"/>, and greater than zero if this instance is greater
+ /// than <paramref name="other"/>.
+ /// </returns>
+ public int CompareTo(ValueTuple<T1, T2, T3, T4, T5> other)
+ {
+ int c = Comparer<T1>.Default.Compare(Item1, other.Item1);
+ if (c != 0) return c;
+
+ c = Comparer<T2>.Default.Compare(Item2, other.Item2);
+ if (c != 0) return c;
+
+ c = Comparer<T3>.Default.Compare(Item3, other.Item3);
+ if (c != 0) return c;
+
+ c = Comparer<T4>.Default.Compare(Item4, other.Item4);
+ if (c != 0) return c;
+
+ return Comparer<T5>.Default.Compare(Item5, other.Item5);
+ }
+
+ int IStructuralComparable.CompareTo(object other, IComparer comparer)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4, T5>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4, T5>)other;
+
+ int c = comparer.Compare(Item1, objTuple.Item1);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item2, objTuple.Item2);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item3, objTuple.Item3);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item4, objTuple.Item4);
+ if (c != 0) return c;
+
+ return comparer.Compare(Item5, objTuple.Item5);
+ }
+
+ /// <summary>
+ /// Returns the hash code for the current <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> instance.
+ /// </summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
+ Item2?.GetHashCode() ?? 0,
+ Item3?.GetHashCode() ?? 0,
+ Item4?.GetHashCode() ?? 0,
+ Item5?.GetHashCode() ?? 0);
+ }
+
+ int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ private int GetHashCodeCore(IEqualityComparer comparer)
+ {
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
+ comparer.GetHashCode(Item2),
+ comparer.GetHashCode(Item3),
+ comparer.GetHashCode(Item4),
+ comparer.GetHashCode(Item5));
+ }
+
+ int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ /// <summary>
+ /// Returns a string that represents the value of this <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> instance.
+ /// </summary>
+ /// <returns>The string representation of this <see cref="ValueTuple{T1, T2, T3, T4, T5}"/> instance.</returns>
+ /// <remarks>
+ /// The string returned by this method takes the form <c>(Item1, Item2, Item3, Item4, Item5)</c>.
+ /// If any field value is <see langword="null"/>, it is represented as <see cref="String.Empty"/>.
+ /// </remarks>
+ public override string ToString()
+ {
+ return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ")";
+ }
+
+ string IValueTupleInternal.ToStringEnd()
+ {
+ return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ")";
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 5;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ default:
+ throw new IndexOutOfRangeException();
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Represents a 6-tuple, or sixtuple, as a value type.
+ /// </summary>
+ /// <typeparam name="T1">The type of the tuple's first component.</typeparam>
+ /// <typeparam name="T2">The type of the tuple's second component.</typeparam>
+ /// <typeparam name="T3">The type of the tuple's third component.</typeparam>
+ /// <typeparam name="T4">The type of the tuple's fourth component.</typeparam>
+ /// <typeparam name="T5">The type of the tuple's fifth component.</typeparam>
+ /// <typeparam name="T6">The type of the tuple's sixth component.</typeparam>
+ [Serializable]
+ [StructLayout(LayoutKind.Auto)]
+ public struct ValueTuple<T1, T2, T3, T4, T5, T6>
+ : IEquatable<ValueTuple<T1, T2, T3, T4, T5, T6>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1, T2, T3, T4, T5, T6>>, IValueTupleInternal, ITuple
+ {
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance's first component.
+ /// </summary>
+ public T1 Item1;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance's second component.
+ /// </summary>
+ public T2 Item2;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance's third component.
+ /// </summary>
+ public T3 Item3;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance's fourth component.
+ /// </summary>
+ public T4 Item4;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance's fifth component.
+ /// </summary>
+ public T5 Item5;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance's sixth component.
+ /// </summary>
+ public T6 Item6;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> value type.
+ /// </summary>
+ /// <param name="item1">The value of the tuple's first component.</param>
+ /// <param name="item2">The value of the tuple's second component.</param>
+ /// <param name="item3">The value of the tuple's third component.</param>
+ /// <param name="item4">The value of the tuple's fourth component.</param>
+ /// <param name="item5">The value of the tuple's fifth component.</param>
+ /// <param name="item6">The value of the tuple's sixth component.</param>
+ public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
+ {
+ Item1 = item1;
+ Item2 = item2;
+ Item3 = item3;
+ Item4 = item4;
+ Item5 = item5;
+ Item6 = item6;
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance is equal to a specified object.
+ /// </summary>
+ /// <param name="obj">The object to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified object; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="obj"/> parameter is considered to be equal to the current instance under the following conditions:
+ /// <list type="bullet">
+ /// <item><description>It is a <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> value type.</description></item>
+ /// <item><description>Its components are of the same types as those of the current instance.</description></item>
+ /// <item><description>Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.</description></item>
+ /// </list>
+ /// </remarks>
+ public override bool Equals(object obj)
+ {
+ return obj is ValueTuple<T1, T2, T3, T4, T5, T6> && Equals((ValueTuple<T1, T2, T3, T4, T5, T6>)obj);
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/>
+ /// instance is equal to a specified <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/>.
+ /// </summary>
+ /// <param name="other">The tuple to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified tuple; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="other"/> parameter is considered to be equal to the current instance if each of its fields
+ /// are equal to that of the current instance, using the default comparer for that field's type.
+ /// </remarks>
+ public bool Equals(ValueTuple<T1, T2, T3, T4, T5, T6> other)
+ {
+ return EqualityComparer<T1>.Default.Equals(Item1, other.Item1)
+ && EqualityComparer<T2>.Default.Equals(Item2, other.Item2)
+ && EqualityComparer<T3>.Default.Equals(Item3, other.Item3)
+ && EqualityComparer<T4>.Default.Equals(Item4, other.Item4)
+ && EqualityComparer<T5>.Default.Equals(Item5, other.Item5)
+ && EqualityComparer<T6>.Default.Equals(Item6, other.Item6);
+ }
+
+ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
+ {
+ if (other == null || !(other is ValueTuple<T1, T2, T3, T4, T5, T6>)) return false;
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4, T5, T6>)other;
+
+ return comparer.Equals(Item1, objTuple.Item1)
+ && comparer.Equals(Item2, objTuple.Item2)
+ && comparer.Equals(Item3, objTuple.Item3)
+ && comparer.Equals(Item4, objTuple.Item4)
+ && comparer.Equals(Item5, objTuple.Item5)
+ && comparer.Equals(Item6, objTuple.Item6);
+ }
+
+ int IComparable.CompareTo(object other)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4, T5, T6>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ return CompareTo((ValueTuple<T1, T2, T3, T4, T5, T6>)other);
+ }
+
+ /// <summary>Compares this instance to a specified instance and returns an indication of their relative values.</summary>
+ /// <param name="other">An instance to compare.</param>
+ /// <returns>
+ /// A signed number indicating the relative values of this instance and <paramref name="other"/>.
+ /// Returns less than zero if this instance is less than <paramref name="other"/>, zero if this
+ /// instance is equal to <paramref name="other"/>, and greater than zero if this instance is greater
+ /// than <paramref name="other"/>.
+ /// </returns>
+ public int CompareTo(ValueTuple<T1, T2, T3, T4, T5, T6> other)
+ {
+ int c = Comparer<T1>.Default.Compare(Item1, other.Item1);
+ if (c != 0) return c;
+
+ c = Comparer<T2>.Default.Compare(Item2, other.Item2);
+ if (c != 0) return c;
+
+ c = Comparer<T3>.Default.Compare(Item3, other.Item3);
+ if (c != 0) return c;
+
+ c = Comparer<T4>.Default.Compare(Item4, other.Item4);
+ if (c != 0) return c;
+
+ c = Comparer<T5>.Default.Compare(Item5, other.Item5);
+ if (c != 0) return c;
+
+ return Comparer<T6>.Default.Compare(Item6, other.Item6);
+ }
+
+ int IStructuralComparable.CompareTo(object other, IComparer comparer)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4, T5, T6>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4, T5, T6>)other;
+
+ int c = comparer.Compare(Item1, objTuple.Item1);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item2, objTuple.Item2);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item3, objTuple.Item3);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item4, objTuple.Item4);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item5, objTuple.Item5);
+ if (c != 0) return c;
+
+ return comparer.Compare(Item6, objTuple.Item6);
+ }
+
+ /// <summary>
+ /// Returns the hash code for the current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance.
+ /// </summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
+ Item2?.GetHashCode() ?? 0,
+ Item3?.GetHashCode() ?? 0,
+ Item4?.GetHashCode() ?? 0,
+ Item5?.GetHashCode() ?? 0,
+ Item6?.GetHashCode() ?? 0);
+ }
+
+ int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ private int GetHashCodeCore(IEqualityComparer comparer)
+ {
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
+ comparer.GetHashCode(Item2),
+ comparer.GetHashCode(Item3),
+ comparer.GetHashCode(Item4),
+ comparer.GetHashCode(Item5),
+ comparer.GetHashCode(Item6));
+ }
+
+ int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ /// <summary>
+ /// Returns a string that represents the value of this <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance.
+ /// </summary>
+ /// <returns>The string representation of this <see cref="ValueTuple{T1, T2, T3, T4, T5, T6}"/> instance.</returns>
+ /// <remarks>
+ /// The string returned by this method takes the form <c>(Item1, Item2, Item3, Item4, Item5, Item6)</c>.
+ /// If any field value is <see langword="null"/>, it is represented as <see cref="String.Empty"/>.
+ /// </remarks>
+ public override string ToString()
+ {
+ return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ")";
+ }
+
+ string IValueTupleInternal.ToStringEnd()
+ {
+ return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ")";
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 6;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ case 5:
+ return Item6;
+ default:
+ throw new IndexOutOfRangeException();
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Represents a 7-tuple, or sentuple, as a value type.
+ /// </summary>
+ /// <typeparam name="T1">The type of the tuple's first component.</typeparam>
+ /// <typeparam name="T2">The type of the tuple's second component.</typeparam>
+ /// <typeparam name="T3">The type of the tuple's third component.</typeparam>
+ /// <typeparam name="T4">The type of the tuple's fourth component.</typeparam>
+ /// <typeparam name="T5">The type of the tuple's fifth component.</typeparam>
+ /// <typeparam name="T6">The type of the tuple's sixth component.</typeparam>
+ /// <typeparam name="T7">The type of the tuple's seventh component.</typeparam>
+ [Serializable]
+ [StructLayout(LayoutKind.Auto)]
+ public struct ValueTuple<T1, T2, T3, T4, T5, T6, T7>
+ : IEquatable<ValueTuple<T1, T2, T3, T4, T5, T6, T7>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1, T2, T3, T4, T5, T6, T7>>, IValueTupleInternal, ITuple
+ {
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance's first component.
+ /// </summary>
+ public T1 Item1;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance's second component.
+ /// </summary>
+ public T2 Item2;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance's third component.
+ /// </summary>
+ public T3 Item3;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance's fourth component.
+ /// </summary>
+ public T4 Item4;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance's fifth component.
+ /// </summary>
+ public T5 Item5;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance's sixth component.
+ /// </summary>
+ public T6 Item6;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance's seventh component.
+ /// </summary>
+ public T7 Item7;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> value type.
+ /// </summary>
+ /// <param name="item1">The value of the tuple's first component.</param>
+ /// <param name="item2">The value of the tuple's second component.</param>
+ /// <param name="item3">The value of the tuple's third component.</param>
+ /// <param name="item4">The value of the tuple's fourth component.</param>
+ /// <param name="item5">The value of the tuple's fifth component.</param>
+ /// <param name="item6">The value of the tuple's sixth component.</param>
+ /// <param name="item7">The value of the tuple's seventh component.</param>
+ public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
+ {
+ Item1 = item1;
+ Item2 = item2;
+ Item3 = item3;
+ Item4 = item4;
+ Item5 = item5;
+ Item6 = item6;
+ Item7 = item7;
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance is equal to a specified object.
+ /// </summary>
+ /// <param name="obj">The object to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified object; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="obj"/> parameter is considered to be equal to the current instance under the following conditions:
+ /// <list type="bullet">
+ /// <item><description>It is a <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> value type.</description></item>
+ /// <item><description>Its components are of the same types as those of the current instance.</description></item>
+ /// <item><description>Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.</description></item>
+ /// </list>
+ /// </remarks>
+ public override bool Equals(object obj)
+ {
+ return obj is ValueTuple<T1, T2, T3, T4, T5, T6, T7> && Equals((ValueTuple<T1, T2, T3, T4, T5, T6, T7>)obj);
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/>
+ /// instance is equal to a specified <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/>.
+ /// </summary>
+ /// <param name="other">The tuple to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified tuple; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="other"/> parameter is considered to be equal to the current instance if each of its fields
+ /// are equal to that of the current instance, using the default comparer for that field's type.
+ /// </remarks>
+ public bool Equals(ValueTuple<T1, T2, T3, T4, T5, T6, T7> other)
+ {
+ return EqualityComparer<T1>.Default.Equals(Item1, other.Item1)
+ && EqualityComparer<T2>.Default.Equals(Item2, other.Item2)
+ && EqualityComparer<T3>.Default.Equals(Item3, other.Item3)
+ && EqualityComparer<T4>.Default.Equals(Item4, other.Item4)
+ && EqualityComparer<T5>.Default.Equals(Item5, other.Item5)
+ && EqualityComparer<T6>.Default.Equals(Item6, other.Item6)
+ && EqualityComparer<T7>.Default.Equals(Item7, other.Item7);
+ }
+
+ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
+ {
+ if (other == null || !(other is ValueTuple<T1, T2, T3, T4, T5, T6, T7>)) return false;
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4, T5, T6, T7>)other;
+
+ return comparer.Equals(Item1, objTuple.Item1)
+ && comparer.Equals(Item2, objTuple.Item2)
+ && comparer.Equals(Item3, objTuple.Item3)
+ && comparer.Equals(Item4, objTuple.Item4)
+ && comparer.Equals(Item5, objTuple.Item5)
+ && comparer.Equals(Item6, objTuple.Item6)
+ && comparer.Equals(Item7, objTuple.Item7);
+ }
+
+ int IComparable.CompareTo(object other)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4, T5, T6, T7>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ return CompareTo((ValueTuple<T1, T2, T3, T4, T5, T6, T7>)other);
+ }
+
+ /// <summary>Compares this instance to a specified instance and returns an indication of their relative values.</summary>
+ /// <param name="other">An instance to compare.</param>
+ /// <returns>
+ /// A signed number indicating the relative values of this instance and <paramref name="other"/>.
+ /// Returns less than zero if this instance is less than <paramref name="other"/>, zero if this
+ /// instance is equal to <paramref name="other"/>, and greater than zero if this instance is greater
+ /// than <paramref name="other"/>.
+ /// </returns>
+ public int CompareTo(ValueTuple<T1, T2, T3, T4, T5, T6, T7> other)
+ {
+ int c = Comparer<T1>.Default.Compare(Item1, other.Item1);
+ if (c != 0) return c;
+
+ c = Comparer<T2>.Default.Compare(Item2, other.Item2);
+ if (c != 0) return c;
+
+ c = Comparer<T3>.Default.Compare(Item3, other.Item3);
+ if (c != 0) return c;
+
+ c = Comparer<T4>.Default.Compare(Item4, other.Item4);
+ if (c != 0) return c;
+
+ c = Comparer<T5>.Default.Compare(Item5, other.Item5);
+ if (c != 0) return c;
+
+ c = Comparer<T6>.Default.Compare(Item6, other.Item6);
+ if (c != 0) return c;
+
+ return Comparer<T7>.Default.Compare(Item7, other.Item7);
+ }
+
+ int IStructuralComparable.CompareTo(object other, IComparer comparer)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4, T5, T6, T7>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4, T5, T6, T7>)other;
+
+ int c = comparer.Compare(Item1, objTuple.Item1);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item2, objTuple.Item2);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item3, objTuple.Item3);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item4, objTuple.Item4);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item5, objTuple.Item5);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item6, objTuple.Item6);
+ if (c != 0) return c;
+
+ return comparer.Compare(Item7, objTuple.Item7);
+ }
+
+ /// <summary>
+ /// Returns the hash code for the current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance.
+ /// </summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
+ Item2?.GetHashCode() ?? 0,
+ Item3?.GetHashCode() ?? 0,
+ Item4?.GetHashCode() ?? 0,
+ Item5?.GetHashCode() ?? 0,
+ Item6?.GetHashCode() ?? 0,
+ Item7?.GetHashCode() ?? 0);
+ }
+
+ int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ private int GetHashCodeCore(IEqualityComparer comparer)
+ {
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
+ comparer.GetHashCode(Item2),
+ comparer.GetHashCode(Item3),
+ comparer.GetHashCode(Item4),
+ comparer.GetHashCode(Item5),
+ comparer.GetHashCode(Item6),
+ comparer.GetHashCode(Item7));
+ }
+
+ int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ /// <summary>
+ /// Returns a string that represents the value of this <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance.
+ /// </summary>
+ /// <returns>The string representation of this <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7}"/> instance.</returns>
+ /// <remarks>
+ /// The string returned by this method takes the form <c>(Item1, Item2, Item3, Item4, Item5, Item6, Item7)</c>.
+ /// If any field value is <see langword="null"/>, it is represented as <see cref="String.Empty"/>.
+ /// </remarks>
+ public override string ToString()
+ {
+ return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ")";
+ }
+
+ string IValueTupleInternal.ToStringEnd()
+ {
+ return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ")";
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 7;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ case 5:
+ return Item6;
+ case 6:
+ return Item7;
+ default:
+ throw new IndexOutOfRangeException();
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Represents an 8-tuple, or octuple, as a value type.
+ /// </summary>
+ /// <typeparam name="T1">The type of the tuple's first component.</typeparam>
+ /// <typeparam name="T2">The type of the tuple's second component.</typeparam>
+ /// <typeparam name="T3">The type of the tuple's third component.</typeparam>
+ /// <typeparam name="T4">The type of the tuple's fourth component.</typeparam>
+ /// <typeparam name="T5">The type of the tuple's fifth component.</typeparam>
+ /// <typeparam name="T6">The type of the tuple's sixth component.</typeparam>
+ /// <typeparam name="T7">The type of the tuple's seventh component.</typeparam>
+ /// <typeparam name="TRest">The type of the tuple's eighth component.</typeparam>
+ [Serializable]
+ [StructLayout(LayoutKind.Auto)]
+ public struct ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>
+ : IEquatable<ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>>, IValueTupleInternal, ITuple
+ where TRest : struct
+ {
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance's first component.
+ /// </summary>
+ public T1 Item1;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance's second component.
+ /// </summary>
+ public T2 Item2;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance's third component.
+ /// </summary>
+ public T3 Item3;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance's fourth component.
+ /// </summary>
+ public T4 Item4;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance's fifth component.
+ /// </summary>
+ public T5 Item5;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance's sixth component.
+ /// </summary>
+ public T6 Item6;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance's seventh component.
+ /// </summary>
+ public T7 Item7;
+ /// <summary>
+ /// The current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance's eighth component.
+ /// </summary>
+ public TRest Rest;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> value type.
+ /// </summary>
+ /// <param name="item1">The value of the tuple's first component.</param>
+ /// <param name="item2">The value of the tuple's second component.</param>
+ /// <param name="item3">The value of the tuple's third component.</param>
+ /// <param name="item4">The value of the tuple's fourth component.</param>
+ /// <param name="item5">The value of the tuple's fifth component.</param>
+ /// <param name="item6">The value of the tuple's sixth component.</param>
+ /// <param name="item7">The value of the tuple's seventh component.</param>
+ /// <param name="rest">The value of the tuple's eight component.</param>
+ public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest)
+ {
+ if (!(rest is IValueTupleInternal))
+ {
+ throw new ArgumentException(SR.ArgumentException_ValueTupleLastArgumentNotATuple);
+ }
+
+ Item1 = item1;
+ Item2 = item2;
+ Item3 = item3;
+ Item4 = item4;
+ Item5 = item5;
+ Item6 = item6;
+ Item7 = item7;
+ Rest = rest;
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance is equal to a specified object.
+ /// </summary>
+ /// <param name="obj">The object to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified object; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="obj"/> parameter is considered to be equal to the current instance under the following conditions:
+ /// <list type="bullet">
+ /// <item><description>It is a <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> value type.</description></item>
+ /// <item><description>Its components are of the same types as those of the current instance.</description></item>
+ /// <item><description>Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.</description></item>
+ /// </list>
+ /// </remarks>
+ public override bool Equals(object obj)
+ {
+ return obj is ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest> && Equals((ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>)obj);
+ }
+
+ /// <summary>
+ /// Returns a value that indicates whether the current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/>
+ /// instance is equal to a specified <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/>.
+ /// </summary>
+ /// <param name="other">The tuple to compare with this instance.</param>
+ /// <returns><see langword="true"/> if the current instance is equal to the specified tuple; otherwise, <see langword="false"/>.</returns>
+ /// <remarks>
+ /// The <paramref name="other"/> parameter is considered to be equal to the current instance if each of its fields
+ /// are equal to that of the current instance, using the default comparer for that field's type.
+ /// </remarks>
+ public bool Equals(ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest> other)
+ {
+ return EqualityComparer<T1>.Default.Equals(Item1, other.Item1)
+ && EqualityComparer<T2>.Default.Equals(Item2, other.Item2)
+ && EqualityComparer<T3>.Default.Equals(Item3, other.Item3)
+ && EqualityComparer<T4>.Default.Equals(Item4, other.Item4)
+ && EqualityComparer<T5>.Default.Equals(Item5, other.Item5)
+ && EqualityComparer<T6>.Default.Equals(Item6, other.Item6)
+ && EqualityComparer<T7>.Default.Equals(Item7, other.Item7)
+ && EqualityComparer<TRest>.Default.Equals(Rest, other.Rest);
+ }
+
+ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
+ {
+ if (other == null || !(other is ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>)) return false;
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>)other;
+
+ return comparer.Equals(Item1, objTuple.Item1)
+ && comparer.Equals(Item2, objTuple.Item2)
+ && comparer.Equals(Item3, objTuple.Item3)
+ && comparer.Equals(Item4, objTuple.Item4)
+ && comparer.Equals(Item5, objTuple.Item5)
+ && comparer.Equals(Item6, objTuple.Item6)
+ && comparer.Equals(Item7, objTuple.Item7)
+ && comparer.Equals(Rest, objTuple.Rest);
+ }
+
+ int IComparable.CompareTo(object other)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ return CompareTo((ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>)other);
+ }
+
+ /// <summary>Compares this instance to a specified instance and returns an indication of their relative values.</summary>
+ /// <param name="other">An instance to compare.</param>
+ /// <returns>
+ /// A signed number indicating the relative values of this instance and <paramref name="other"/>.
+ /// Returns less than zero if this instance is less than <paramref name="other"/>, zero if this
+ /// instance is equal to <paramref name="other"/>, and greater than zero if this instance is greater
+ /// than <paramref name="other"/>.
+ /// </returns>
+ public int CompareTo(ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest> other)
+ {
+ int c = Comparer<T1>.Default.Compare(Item1, other.Item1);
+ if (c != 0) return c;
+
+ c = Comparer<T2>.Default.Compare(Item2, other.Item2);
+ if (c != 0) return c;
+
+ c = Comparer<T3>.Default.Compare(Item3, other.Item3);
+ if (c != 0) return c;
+
+ c = Comparer<T4>.Default.Compare(Item4, other.Item4);
+ if (c != 0) return c;
+
+ c = Comparer<T5>.Default.Compare(Item5, other.Item5);
+ if (c != 0) return c;
+
+ c = Comparer<T6>.Default.Compare(Item6, other.Item6);
+ if (c != 0) return c;
+
+ c = Comparer<T7>.Default.Compare(Item7, other.Item7);
+ if (c != 0) return c;
+
+ return Comparer<TRest>.Default.Compare(Rest, other.Rest);
+ }
+
+ int IStructuralComparable.CompareTo(object other, IComparer comparer)
+ {
+ if (other == null) return 1;
+
+ if (!(other is ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>))
+ {
+ throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, this.GetType().ToString()), nameof(other));
+ }
+
+ var objTuple = (ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>)other;
+
+ int c = comparer.Compare(Item1, objTuple.Item1);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item2, objTuple.Item2);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item3, objTuple.Item3);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item4, objTuple.Item4);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item5, objTuple.Item5);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item6, objTuple.Item6);
+ if (c != 0) return c;
+
+ c = comparer.Compare(Item7, objTuple.Item7);
+ if (c != 0) return c;
+
+ return comparer.Compare(Rest, objTuple.Rest);
+ }
+
+ /// <summary>
+ /// Returns the hash code for the current <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance.
+ /// </summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ // We want to have a limited hash in this case. We'll use the last 8 elements of the tuple
+ IValueTupleInternal rest = Rest as IValueTupleInternal;
+ if (rest == null)
+ {
+ return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
+ Item2?.GetHashCode() ?? 0,
+ Item3?.GetHashCode() ?? 0,
+ Item4?.GetHashCode() ?? 0,
+ Item5?.GetHashCode() ?? 0,
+ Item6?.GetHashCode() ?? 0,
+ Item7?.GetHashCode() ?? 0);
+ }
+
+ int size = rest.Length;
+ if (size >= 8) { return rest.GetHashCode(); }
+
+ // In this case, the rest member has less than 8 elements so we need to combine some our elements with the elements in rest
+ int k = 8 - size;
+ switch (k)
+ {
+ case 1:
+ return ValueTuple.CombineHashCodes(Item7?.GetHashCode() ?? 0,
+ rest.GetHashCode());
+ case 2:
+ return ValueTuple.CombineHashCodes(Item6?.GetHashCode() ?? 0,
+ Item7?.GetHashCode() ?? 0,
+ rest.GetHashCode());
+ case 3:
+ return ValueTuple.CombineHashCodes(Item5?.GetHashCode() ?? 0,
+ Item6?.GetHashCode() ?? 0,
+ Item7?.GetHashCode() ?? 0,
+ rest.GetHashCode());
+ case 4:
+ return ValueTuple.CombineHashCodes(Item4?.GetHashCode() ?? 0,
+ Item5?.GetHashCode() ?? 0,
+ Item6?.GetHashCode() ?? 0,
+ Item7?.GetHashCode() ?? 0,
+ rest.GetHashCode());
+ case 5:
+ return ValueTuple.CombineHashCodes(Item3?.GetHashCode() ?? 0,
+ Item4?.GetHashCode() ?? 0,
+ Item5?.GetHashCode() ?? 0,
+ Item6?.GetHashCode() ?? 0,
+ Item7?.GetHashCode() ?? 0,
+ rest.GetHashCode());
+ case 6:
+ return ValueTuple.CombineHashCodes(Item2?.GetHashCode() ?? 0,
+ Item3?.GetHashCode() ?? 0,
+ Item4?.GetHashCode() ?? 0,
+ Item5?.GetHashCode() ?? 0,
+ Item6?.GetHashCode() ?? 0,
+ Item7?.GetHashCode() ?? 0,
+ rest.GetHashCode());
+ case 7:
+ case 8:
+ return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
+ Item2?.GetHashCode() ?? 0,
+ Item3?.GetHashCode() ?? 0,
+ Item4?.GetHashCode() ?? 0,
+ Item5?.GetHashCode() ?? 0,
+ Item6?.GetHashCode() ?? 0,
+ Item7?.GetHashCode() ?? 0,
+ rest.GetHashCode());
+ }
+
+ Contract.Assert(false, "Missed all cases for computing ValueTuple hash code");
+ return -1;
+ }
+
+ int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ private int GetHashCodeCore(IEqualityComparer comparer)
+ {
+ // We want to have a limited hash in this case. We'll use the last 8 elements of the tuple
+ IValueTupleInternal rest = Rest as IValueTupleInternal;
+ if (rest == null)
+ {
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1), comparer.GetHashCode(Item2), comparer.GetHashCode(Item3),
+ comparer.GetHashCode(Item4), comparer.GetHashCode(Item5), comparer.GetHashCode(Item6),
+ comparer.GetHashCode(Item7));
+ }
+
+ int size = rest.Length;
+ if (size >= 8) { return rest.GetHashCode(comparer); }
+
+ // In this case, the rest member has less than 8 elements so we need to combine some our elements with the elements in rest
+ int k = 8 - size;
+ switch (k)
+ {
+ case 1:
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
+ case 2:
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item6), comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
+ case 3:
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item5), comparer.GetHashCode(Item6), comparer.GetHashCode(Item7),
+ rest.GetHashCode(comparer));
+ case 4:
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item4), comparer.GetHashCode(Item5), comparer.GetHashCode(Item6),
+ comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
+ case 5:
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item3), comparer.GetHashCode(Item4), comparer.GetHashCode(Item5),
+ comparer.GetHashCode(Item6), comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
+ case 6:
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item2), comparer.GetHashCode(Item3), comparer.GetHashCode(Item4),
+ comparer.GetHashCode(Item5), comparer.GetHashCode(Item6), comparer.GetHashCode(Item7),
+ rest.GetHashCode(comparer));
+ case 7:
+ case 8:
+ return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1), comparer.GetHashCode(Item2), comparer.GetHashCode(Item3),
+ comparer.GetHashCode(Item4), comparer.GetHashCode(Item5), comparer.GetHashCode(Item6),
+ comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
+ }
+
+ Contract.Assert(false, "Missed all cases for computing ValueTuple hash code");
+ return -1;
+ }
+
+ int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return GetHashCodeCore(comparer);
+ }
+
+ /// <summary>
+ /// Returns a string that represents the value of this <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance.
+ /// </summary>
+ /// <returns>The string representation of this <see cref="ValueTuple{T1, T2, T3, T4, T5, T6, T7, TRest}"/> instance.</returns>
+ /// <remarks>
+ /// The string returned by this method takes the form <c>(Item1, Item2, Item3, Item4, Item5, Item6, Item7, Rest)</c>.
+ /// If any field value is <see langword="null"/>, it is represented as <see cref="String.Empty"/>.
+ /// </remarks>
+ public override string ToString()
+ {
+ IValueTupleInternal rest = Rest as IValueTupleInternal;
+ if (rest == null)
+ {
+ return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ", " + Rest.ToString() + ")";
+ }
+ else
+ {
+ return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ", " + rest.ToStringEnd();
+ }
+ }
+
+ string IValueTupleInternal.ToStringEnd()
+ {
+ IValueTupleInternal rest = Rest as IValueTupleInternal;
+ if (rest == null)
+ {
+ return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ", " + Rest.ToString() + ")";
+ }
+ else
+ {
+ return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ", " + rest.ToStringEnd();
+ }
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length
+ {
+ get
+ {
+ IValueTupleInternal rest = Rest as IValueTupleInternal;
+ return rest == null ? 8 : 7 + rest.Length;
+ }
+ }
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ case 5:
+ return Item6;
+ case 6:
+ return Item7;
+ }
+
+ IValueTupleInternal rest = Rest as IValueTupleInternal;
+ if (rest == null)
+ {
+ if (index == 7)
+ {
+ return Rest;
+ }
+ throw new IndexOutOfRangeException();
+ }
+ return rest[index - 7];
+ }
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/ValueType.cs b/src/mscorlib/src/System/ValueType.cs
index 102a0d2b92..06a64e397c 100644
--- a/src/mscorlib/src/System/ValueType.cs
+++ b/src/mscorlib/src/System/ValueType.cs
@@ -17,7 +17,6 @@ namespace System {
using System.Runtime.Versioning;
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public abstract class ValueType {
public override bool Equals (Object obj) {
diff --git a/src/mscorlib/src/System/Variant.cs b/src/mscorlib/src/System/Variant.cs
index 2a9593cf42..509650b8fc 100644
--- a/src/mscorlib/src/System/Variant.cs
+++ b/src/mscorlib/src/System/Variant.cs
@@ -334,21 +334,6 @@ namespace System {
m_flags |= ((int)vt << VTBitShift);
}
-
- unsafe public Variant(void* voidPointer,Type pointerType) {
- if (pointerType == null)
- throw new ArgumentNullException(nameof(pointerType));
- if (!pointerType.IsPointer)
- throw new ArgumentException(Environment.GetResourceString("Arg_MustBePointer"),nameof(pointerType));
- Contract.EndContractBlock();
-
- m_objref = pointerType;
- m_flags=CV_PTR;
- m_data1=(int)voidPointer;
- m_data2=0;
-
- }
-
//This is a family-only accessor for the CVType.
//This is never to be exposed externally.
internal int CVType {
diff --git a/src/mscorlib/src/System/Version.cs b/src/mscorlib/src/System/Version.cs
index f2ef5d4486..7c58d3c0c4 100644
--- a/src/mscorlib/src/System/Version.cs
+++ b/src/mscorlib/src/System/Version.cs
@@ -25,7 +25,6 @@ namespace System {
// specified component.
[Serializable]
-[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Version : ICloneable, IComparable
, IComparable<Version>, IEquatable<Version>
{
@@ -34,7 +33,6 @@ namespace System {
private readonly int _Minor;
private readonly int _Build = -1;
private readonly int _Revision = -1;
- private static readonly char[] SeparatorsArray = new char[] { '.' };
public Version(int major, int minor, int build, int revision) {
if (major < 0)
@@ -301,7 +299,7 @@ namespace System {
return false;
}
- String[] parsedComponents = version.Split(SeparatorsArray);
+ String[] parsedComponents = version.Split('.');
int parsedComponentsLength = parsedComponents.Length;
if ((parsedComponentsLength < 2) || (parsedComponentsLength > 4)) {
result.SetFailure(ParseFailureKind.ArgumentException);
diff --git a/src/mscorlib/src/System/Void.cs b/src/mscorlib/src/System/Void.cs
index 51df8781aa..5c20f634fc 100644
--- a/src/mscorlib/src/System/Void.cs
+++ b/src/mscorlib/src/System/Void.cs
@@ -7,12 +7,11 @@
// This class represents the void return type
////////////////////////////////////////////////////////////////////////////////
-namespace System {
-
- using System;
+namespace System
+{
+ // This class represents the void return type
[Serializable]
- [System.Runtime.InteropServices.ComVisible(true)]
- public struct Void
+ public struct Void
{
}
}
diff --git a/src/mscorlib/src/System/WeakReference.cs b/src/mscorlib/src/System/WeakReference.cs
index d5648527f0..6600d15855 100644
--- a/src/mscorlib/src/System/WeakReference.cs
+++ b/src/mscorlib/src/System/WeakReference.cs
@@ -13,13 +13,11 @@ namespace System {
using System;
using System.Runtime.Serialization;
using System.Security;
- using System.Security.Permissions;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Diagnostics;
using System.Diagnostics.Contracts;
- [System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class WeakReference : ISerializable
{
diff --git a/src/mscorlib/src/System/_LocalDataStore.cs b/src/mscorlib/src/System/_LocalDataStore.cs
deleted file mode 100644
index a1fa488076..0000000000
--- a/src/mscorlib/src/System/_LocalDataStore.cs
+++ /dev/null
@@ -1,244 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: Class that stores local data. This class is used in cooperation
-** with the _LocalDataStoreMgr class.
-**
-**
-=============================================================================*/
-
-namespace System {
-
- using System;
- using System.Threading;
- using System.Runtime.CompilerServices;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- // Helper class to aid removal of LocalDataStore from the LocalDataStoreMgr
- // LocalDataStoreMgr does not holds references to LocalDataStoreHolder. It holds
- // references to LocalDataStore only. LocalDataStoreHolder finalizer will run once
- // the only outstanding reference to the store is in LocalDataStoreMgr.
- sealed internal class LocalDataStoreHolder
- {
- private LocalDataStore m_Store;
-
- public LocalDataStoreHolder(LocalDataStore store)
- {
- m_Store = store;
- }
-
- ~LocalDataStoreHolder()
- {
- LocalDataStore store = m_Store;
- if (store == null)
- return;
-
- store.Dispose();
- }
-
- public LocalDataStore Store
- {
- get
- {
- return m_Store;
- }
- }
- }
-
- sealed internal class LocalDataStoreElement
- {
- private Object m_value;
- private long m_cookie; // This is immutable cookie of the slot used to verify that
- // the value is indeed indeed owned by the slot. Necessary
- // to avoid resurection holes.
-
- public LocalDataStoreElement(long cookie)
- {
- m_cookie = cookie;
- }
-
- public Object Value
- {
- get
- {
- return m_value;
- }
- set
- {
- m_value = value;
- }
- }
-
- public long Cookie
- {
- get
- {
- return m_cookie;
- }
- }
- }
-
- // This class will not be marked serializable
- sealed internal class LocalDataStore
- {
- private LocalDataStoreElement[] m_DataTable;
- private LocalDataStoreMgr m_Manager;
-
- /*=========================================================================
- ** Initialize the data store.
- =========================================================================*/
- public LocalDataStore(LocalDataStoreMgr mgr, int InitialCapacity)
- {
- // Store the manager of the local data store.
- m_Manager = mgr;
-
- // Allocate the array that will contain the data.
- m_DataTable = new LocalDataStoreElement[InitialCapacity];
- }
-
- /*=========================================================================
- ** Delete this store from its manager
- =========================================================================*/
- internal void Dispose()
- {
- m_Manager.DeleteLocalDataStore(this);
- }
-
- /*=========================================================================
- ** Retrieves the value from the specified slot.
- =========================================================================*/
- public Object GetData(LocalDataStoreSlot slot)
- {
- // Validate the slot.
- m_Manager.ValidateSlot(slot);
-
- // Cache the slot index to avoid synchronization issues.
- int slotIdx = slot.Slot;
-
- if (slotIdx >= 0)
- {
- // Delay expansion of m_DataTable if we can
- if (slotIdx >= m_DataTable.Length)
- return null;
-
- // Retrieve the data from the given slot.
- LocalDataStoreElement element = m_DataTable[slotIdx];
-
- //Initially we prepopulate the elements to be null.
- if (element == null)
- return null;
-
- // Check that the element is owned by this slot by comparing cookies.
- // This is necesary to avoid resurection race conditions.
- if (element.Cookie == slot.Cookie)
- return element.Value;
-
- // Fall thru and throw exception
- }
-
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SlotHasBeenFreed"));
- }
-
- /*=========================================================================
- ** Sets the data in the specified slot.
- =========================================================================*/
- public void SetData(LocalDataStoreSlot slot, Object data)
- {
- // Validate the slot.
- m_Manager.ValidateSlot(slot);
-
- // Cache the slot index to avoid synchronization issues.
- int slotIdx = slot.Slot;
-
- if (slotIdx >= 0)
- {
- LocalDataStoreElement element = (slotIdx < m_DataTable.Length) ? m_DataTable[slotIdx] : null;
- if (element == null)
- {
- element = PopulateElement(slot);
- }
-
- // Check that the element is owned by this slot by comparing cookies.
- // This is necesary to avoid resurection race conditions.
- if (element.Cookie == slot.Cookie)
- {
- // Set the data on the given slot.
- element.Value = data;
- return;
- }
-
- // Fall thru and throw exception
- }
-
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SlotHasBeenFreed"));
- }
-
- /*=========================================================================
- ** This method does clears the unused slot.
- * Assumes lock on m_Manager is taken
- =========================================================================*/
- internal void FreeData(int slot, long cookie)
- {
- // We try to delay allocate the dataTable (in cases like the manager clearing a
- // just-freed slot in all stores
- if (slot >= m_DataTable.Length)
- return;
-
- LocalDataStoreElement element = m_DataTable[slot];
- if (element != null && element.Cookie == cookie)
- m_DataTable[slot] = null;
- }
-
- /*=========================================================================
- ** Method used to expand the capacity of the local data store.
- =========================================================================*/
- private LocalDataStoreElement PopulateElement(LocalDataStoreSlot slot)
- {
- bool tookLock = false;
- RuntimeHelpers.PrepareConstrainedRegions();
- try {
- Monitor.Enter(m_Manager, ref tookLock);
-
- // Make sure that the slot was not freed in the meantime
- int slotIdx = slot.Slot;
- if (slotIdx < 0)
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SlotHasBeenFreed"));
-
- if (slotIdx >= m_DataTable.Length)
- {
- int capacity = m_Manager.GetSlotTableLength();
-
- // Validate that the specified capacity is larger than the current one.
- Debug.Assert(capacity >= m_DataTable.Length, "LocalDataStore corrupted: capacity >= m_DataTable.Length");
-
- // Allocate the new data table.
- LocalDataStoreElement[] NewDataTable = new LocalDataStoreElement[capacity];
-
- // Copy all the objects into the new table.
- Array.Copy(m_DataTable, NewDataTable, m_DataTable.Length);
-
- // Save the new table.
- m_DataTable = NewDataTable;
- }
-
- // Validate that there is enough space in the local data store now
- Debug.Assert(slotIdx < m_DataTable.Length, "LocalDataStore corrupted: slotIdx < m_DataTable.Length");
-
- if (m_DataTable[slotIdx] == null)
- m_DataTable[slotIdx] = new LocalDataStoreElement(slot.Cookie);
-
- return m_DataTable[slotIdx];
- }
- finally {
- if (tookLock)
- Monitor.Exit(m_Manager);
- }
- }
- }
-}
diff --git a/src/mscorlib/src/System/_LocalDataStoreMgr.cs b/src/mscorlib/src/System/_LocalDataStoreMgr.cs
deleted file mode 100644
index 8f60d6f754..0000000000
--- a/src/mscorlib/src/System/_LocalDataStoreMgr.cs
+++ /dev/null
@@ -1,332 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-** Purpose: Class that manages stores of local data. This class is used in
-** cooperation with the LocalDataStore class.
-**
-**
-=============================================================================*/
-namespace System {
-
- using System;
- using System.Collections.Generic;
- using System.Threading;
- using System.Runtime.CompilerServices;
- using System.Diagnostics.Contracts;
-
- // This class is an encapsulation of a slot so that it is managed in a secure fashion.
- // It is constructed by the LocalDataStoreManager, holds the slot and the manager
- // and cleans up when it is finalized.
- // This class will not be marked serializable
-[System.Runtime.InteropServices.ComVisible(true)]
- public sealed class LocalDataStoreSlot
- {
- private LocalDataStoreMgr m_mgr;
- private int m_slot;
- private long m_cookie;
-
- // Construct the object to encapsulate the slot.
- internal LocalDataStoreSlot(LocalDataStoreMgr mgr, int slot, long cookie)
- {
- m_mgr = mgr;
- m_slot = slot;
- m_cookie = cookie;
- }
-
- // Accessors for the two fields of this class.
- internal LocalDataStoreMgr Manager
- {
- get
- {
- return m_mgr;
- }
- }
- internal int Slot
- {
- get
- {
- return m_slot;
- }
- }
- internal long Cookie
- {
- get
- {
- return m_cookie;
- }
- }
-
- // Release the slot reserved by this object when this object goes away.
- ~LocalDataStoreSlot()
- {
- LocalDataStoreMgr mgr = m_mgr;
- if (mgr == null)
- return;
-
- int slot = m_slot;
-
- // Mark the slot as free.
- m_slot = -1;
-
- mgr.FreeDataSlot(slot, m_cookie);
- }
- }
-
- // This class will not be marked serializable
- sealed internal class LocalDataStoreMgr
- {
- private const int InitialSlotTableSize = 64;
- private const int SlotTableDoubleThreshold = 512;
- private const int LargeSlotTableSizeIncrease = 128;
-
- /*=========================================================================
- ** Create a data store to be managed by this manager and add it to the
- ** list. The initial size of the new store matches the number of slots
- ** allocated in this manager.
- =========================================================================*/
- public LocalDataStoreHolder CreateLocalDataStore()
- {
- // Create a new local data store.
- LocalDataStore store = new LocalDataStore(this, m_SlotInfoTable.Length);
- LocalDataStoreHolder holder = new LocalDataStoreHolder(store);
-
- bool tookLock = false;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- Monitor.Enter(this, ref tookLock);
- // Add the store to the array list and return it.
- m_ManagedLocalDataStores.Add(store);
- }
- finally
- {
- if (tookLock)
- Monitor.Exit(this);
- }
- return holder;
- }
-
- /*=========================================================================
- * Remove the specified store from the list of managed stores..
- =========================================================================*/
- public void DeleteLocalDataStore(LocalDataStore store)
- {
- bool tookLock = false;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- Monitor.Enter(this, ref tookLock);
- // Remove the store to the array list and return it.
- m_ManagedLocalDataStores.Remove(store);
- }
- finally
- {
- if (tookLock)
- Monitor.Exit(this);
- }
- }
-
- /*=========================================================================
- ** Allocates a data slot by finding an available index and wrapping it
- ** an object to prevent clients from manipulating it directly, allowing us
- ** to make assumptions its integrity.
- =========================================================================*/
- public LocalDataStoreSlot AllocateDataSlot()
- {
- bool tookLock = false;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- Monitor.Enter(this, ref tookLock);
- LocalDataStoreSlot slot;
-
- int slotTableSize = m_SlotInfoTable.Length;
-
- // In case FreeDataSlot has moved the pointer back, the next slot may not be available.
- // Find the first actually available slot.
- int availableSlot = m_FirstAvailableSlot;
- while (availableSlot < slotTableSize)
- {
- if (!m_SlotInfoTable[availableSlot])
- break;
- availableSlot++;
- }
-
- // Check if there are any slots left.
- if (availableSlot >= slotTableSize)
- {
- // The table is full so we need to increase its size.
- int newSlotTableSize;
- if (slotTableSize < SlotTableDoubleThreshold)
- {
- // The table is still relatively small so double it.
- newSlotTableSize = slotTableSize * 2;
- }
- else
- {
- // The table is relatively large so simply increase its size by a given amount.
- newSlotTableSize = slotTableSize + LargeSlotTableSizeIncrease;
- }
-
- // Allocate the new slot info table.
- bool[] newSlotInfoTable = new bool[newSlotTableSize];
-
- // Copy the old array into the new one.
- Array.Copy(m_SlotInfoTable, newSlotInfoTable, slotTableSize);
- m_SlotInfoTable = newSlotInfoTable;
- }
-
- // availableSlot is the index of the empty slot.
- m_SlotInfoTable[availableSlot] = true;
-
- // We do not need to worry about overflowing m_CookieGenerator. It would take centuries
- // of intensive slot allocations on current machines to get the 2^64 counter to overflow.
- // We will perform the increment with overflow check just to play it on the safe side.
- slot = new LocalDataStoreSlot(this, availableSlot, checked(m_CookieGenerator++));
-
- // Save the new "first available slot".hint
- m_FirstAvailableSlot = availableSlot + 1;
-
- // Return the selected slot
- return slot;
- }
- finally
- {
- if (tookLock)
- Monitor.Exit(this);
- }
- }
-
- /*=========================================================================
- ** Allocate a slot and associate a name with it.
- =========================================================================*/
- public LocalDataStoreSlot AllocateNamedDataSlot(String name)
- {
- bool tookLock = false;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- Monitor.Enter(this, ref tookLock);
- // Allocate a normal data slot.
- LocalDataStoreSlot slot = AllocateDataSlot();
-
- // Insert the association between the name and the data slot number
- // in the hash table.
- m_KeyToSlotMap.Add(name, slot);
- return slot;
- }
- finally
- {
- if (tookLock)
- Monitor.Exit(this);
- }
- }
-
- /*=========================================================================
- ** Retrieve the slot associated with a name, allocating it if no such
- ** association has been defined.
- =========================================================================*/
- public LocalDataStoreSlot GetNamedDataSlot(String name)
- {
- bool tookLock = false;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- Monitor.Enter(this, ref tookLock);
- // Lookup in the hashtable to try find a slot for the name.
- LocalDataStoreSlot slot = m_KeyToSlotMap.GetValueOrDefault(name);
-
- // If the name is not yet in the hashtable then add it.
- if (null == slot)
- return AllocateNamedDataSlot(name);
-
- // The name was in the hashtable so return the associated slot.
- return slot;
- }
- finally
- {
- if (tookLock)
- Monitor.Exit(this);
- }
- }
-
- /*=========================================================================
- ** Eliminate the association of a name with a slot. The actual slot will
- ** be reclaimed when the finalizer for the slot object runs.
- =========================================================================*/
- public void FreeNamedDataSlot(String name)
- {
- bool tookLock = false;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- Monitor.Enter(this, ref tookLock);
- // Remove the name slot association from the hashtable.
- m_KeyToSlotMap.Remove(name);
- }
- finally
- {
- if (tookLock)
- Monitor.Exit(this);
- }
- }
-
- /*=========================================================================
- ** Free's a previously allocated data slot on ALL the managed data stores.
- =========================================================================*/
- internal void FreeDataSlot(int slot, long cookie)
- {
- bool tookLock = false;
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- Monitor.Enter(this, ref tookLock);
- // Go thru all the managed stores and set the data on the specified slot to 0.
- for (int i = 0; i < m_ManagedLocalDataStores.Count; i++)
- {
- ((LocalDataStore)m_ManagedLocalDataStores[i]).FreeData(slot, cookie);
- }
-
- // Mark the slot as being no longer occupied.
- m_SlotInfoTable[slot] = false;
- if (slot < m_FirstAvailableSlot)
- m_FirstAvailableSlot = slot;
- }
- finally
- {
- if (tookLock)
- Monitor.Exit(this);
- }
- }
-
- /*=========================================================================
- ** Check that this is a valid slot for this store
- =========================================================================*/
- public void ValidateSlot(LocalDataStoreSlot slot)
- {
- // Make sure the slot was allocated for this store.
- if (slot == null || slot.Manager != this)
- throw new ArgumentException(Environment.GetResourceString("Argument_ALSInvalidSlot"));
- Contract.EndContractBlock();
- }
-
- /*=========================================================================
- ** Return the number of allocated slots in this manager.
- =========================================================================*/
- internal int GetSlotTableLength()
- {
- return m_SlotInfoTable.Length;
- }
-
- private bool[] m_SlotInfoTable = new bool[InitialSlotTableSize];
- private int m_FirstAvailableSlot;
- private List<LocalDataStore> m_ManagedLocalDataStores = new List<LocalDataStore>();
- private Dictionary<String, LocalDataStoreSlot> m_KeyToSlotMap = new Dictionary<String, LocalDataStoreSlot>();
- private long m_CookieGenerator;
- }
-}
diff --git a/src/mscorlib/src/System/__ComObject.cs b/src/mscorlib/src/System/__ComObject.cs
index 9f9bac6084..86800a51f8 100644
--- a/src/mscorlib/src/System/__ComObject.cs
+++ b/src/mscorlib/src/System/__ComObject.cs
@@ -21,7 +21,6 @@ namespace System
using System.Runtime.InteropServices.WindowsRuntime;
using System.Runtime.CompilerServices;
using System.Reflection;
- using System.Security.Permissions;
internal class __ComObject : MarshalByRefObject
{
@@ -58,12 +57,6 @@ namespace System
return base.ToString();
}
-
- internal IntPtr GetIUnknown(out bool fIsURTAggregated)
- {
- fIsURTAggregated = !GetType().IsDefined(typeof(ComImportAttribute), false);
- return System.Runtime.InteropServices.Marshal.GetIUnknownForObject(this);
- }
//====================================================================
// This method retrieves the data associated with the specified
diff --git a/src/mscorlib/src/System/cominterfaces.cs b/src/mscorlib/src/System/cominterfaces.cs
deleted file mode 100644
index a83943d586..0000000000
--- a/src/mscorlib/src/System/cominterfaces.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.InteropServices
-{
- [GuidAttribute("03973551-57A1-3900-A2B5-9083E3FF2943")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Activator))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _Activator
- {
- void GetTypeInfoCount(out uint pcTInfo);
-
- void GetTypeInfo(uint iTInfo, uint lcid, IntPtr ppTInfo);
-
- void GetIDsOfNames([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId);
-
- void Invoke(uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr);
- }
-
- [GuidAttribute("917B14D0-2D9E-38B8-92A9-381ACF52F7C0")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Attribute))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _Attribute
- {
- }
-
- [GuidAttribute("C281C7F1-4AA9-3517-961A-463CFED57E75")]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- [CLSCompliant(false)]
- [TypeLibImportClassAttribute(typeof(System.Threading.Thread))]
- [System.Runtime.InteropServices.ComVisible(true)]
- public interface _Thread
- {
- }
-}
diff --git a/src/mscorlib/src/mscorlib.Friends.cs b/src/mscorlib/src/mscorlib.Friends.cs
index 0e55301656..0e57812638 100644
--- a/src/mscorlib/src/mscorlib.Friends.cs
+++ b/src/mscorlib/src/mscorlib.Friends.cs
@@ -8,18 +8,10 @@ using System.Runtime.CompilerServices;
// For now we are only moving to using this file over AssemblyAttributes.cspp in CoreSys, ideally we would move away from the centralized
// AssemblyAttributes.cspp model for the other build types at a future point in time.
-#if FEATURE_CORESYSTEM
// Depends on things like SuppressUnmanagedCodeAttribute and WindowsRuntimeImportAttribute
-[assembly: InternalsVisibleTo("System.Runtime.WindowsRuntime, PublicKey=" + _InternalsVisibleToKeys.EcmaPublicKeyFull, AllInternalsVisible=false)]
+[assembly: InternalsVisibleTo("System.Runtime.WindowsRuntime, PublicKey=00000000000000000400000000000000", AllInternalsVisible=false)]
// Depends on WindowsRuntimeImportAttribute
-[assembly: InternalsVisibleTo("System.Runtime.WindowsRuntime.UI.Xaml, PublicKey=" + _InternalsVisibleToKeys.EcmaPublicKeyFull, AllInternalsVisible=false)]
+[assembly: InternalsVisibleTo("System.Runtime.WindowsRuntime.UI.Xaml, PublicKey=00000000000000000400000000000000", AllInternalsVisible=false)]
-internal class _InternalsVisibleToKeys
-{
- // Token = b77a5c561934e089
- internal const string EcmaPublicKeyFull = "00000000000000000400000000000000";
-}
-
-#endif // FEATURE_CORESYS
diff --git a/src/pal/CMakeLists.txt b/src/pal/CMakeLists.txt
index cb8b05586c..8e3228b622 100644
--- a/src/pal/CMakeLists.txt
+++ b/src/pal/CMakeLists.txt
@@ -5,7 +5,7 @@ project(COREPAL)
if (WIN32)
set(FEATURE_EVENT_TRACE 1)
endif()
-if(CLR_CMAKE_PLATFORM_LINUX AND CLR_CMAKE_PLATFORM_ARCH_AMD64)
+if(CLR_CMAKE_PLATFORM_LINUX AND CLR_CMAKE_TARGET_ARCH_AMD64)
set(FEATURE_EVENT_TRACE 1)
endif()
diff --git a/src/pal/inc/mbusafecrt.h b/src/pal/inc/mbusafecrt.h
index 8cf050f419..f030b7ded2 100644
--- a/src/pal/inc/mbusafecrt.h
+++ b/src/pal/inc/mbusafecrt.h
@@ -56,7 +56,7 @@ extern WCHAR* wcstok_s( WCHAR* inString, const WCHAR* inControl, WCHAR** ioConte
// strnlen is not required unless the source string is completely untrusted (e.g. anonymous input on a website)
#ifndef SUPPRESS_STRNLEN
extern size_t PAL_strnlen( const char* inString, size_t inMaxSize );
- extern size_t wcsnlen( const WCHAR* inString, size_t inMaxSize );
+ extern size_t PAL_wcsnlen( const WCHAR* inString, size_t inMaxSize );
#endif
extern errno_t _itoa_s( int inValue, char* outBuffer, size_t inDestBufferSize, int inRadix );
diff --git a/src/pal/inc/pal.h b/src/pal/inc/pal.h
index 0d7c89e6fa..d0b78e942f 100644
--- a/src/pal/inc/pal.h
+++ b/src/pal/inc/pal.h
@@ -50,7 +50,6 @@ Abstract:
extern "C" {
#endif
-#if defined (PLATFORM_UNIX)
// This macro is used to standardize the wide character string literals between UNIX and Windows.
// Unix L"" is UTF32, and on windows it's UTF16. Because of built-in assumptions on the size
// of string literals, it's important to match behaviour between Unix and Windows. Unix will be defined
@@ -65,8 +64,6 @@ extern "C" {
#define QUOTE_MACRO_u_HELPER(x) u###x
#define QUOTE_MACRO_u(x) QUOTE_MACRO_u_HELPER(x)
-#endif
-
#include <pal_char16.h>
#include <pal_error.h>
#include <pal_mstypes.h>
@@ -83,16 +80,6 @@ extern "C" {
#define _M_IX86 400
#elif defined(__i386__) && !defined(_M_IX86)
#define _M_IX86 300
-#elif defined(__ppc__) && !defined(_M_PPC)
-#define _M_PPC 100
-#elif defined(_AIX) && defined(_POWER) && !defined(_M_PPC)
-#define _M_PPC 100
-#elif defined(__sparc__) && !defined(_M_SPARC)
-#define _M_SPARC 100
-#elif defined(__hppa__) && !defined(_M_PARISC)
-#define _M_PARISC 100
-#elif defined(__ia64__) && !defined(_M_IA64)
-#define _M_IA64 64100
#elif defined(__x86_64__) && !defined(_M_AMD64)
#define _M_AMD64 100
#elif defined(__arm__) && !defined(_M_ARM)
@@ -103,20 +90,6 @@ extern "C" {
#if defined(_M_IX86) && !defined(_X86_)
#define _X86_
-#elif defined(_M_ALPHA) && !defined(_ALPHA_)
-#define _ALPHA_
-#elif defined(_M_PPC) && !defined(_PPC_)
-#define _PPC_
-#elif defined(_M_SPARC) && !defined(_SPARC_)
-#define _SPARC_
-#elif defined(_M_PARISC) && !defined(_PARISC_)
-#define _PARISC_
-#elif defined(_M_MRX000) && !defined(_MIPS_)
-#define _MIPS_
-#elif defined(_M_M68K) && !defined(_68K_)
-#define _68K_
-#elif defined(_M_IA64) && !defined(_IA64_)
-#define _IA64_
#elif defined(_M_AMD64) && !defined(_AMD64_)
#define _AMD64_
#elif defined(_M_ARM) && !defined(_ARM_)
@@ -129,10 +102,6 @@ extern "C" {
/******************* ABI-specific glue *******************************/
-#if defined(_PPC_) || defined(_PPC64_) || defined(_SPARC_) || defined(_PARISC_) || defined(_IA64_)
-#define BIGENDIAN 1
-#endif
-
#ifdef __APPLE__
// Both PowerPC, i386 and x86_64 on Mac OS X use 16-byte alignment.
#define STACK_ALIGN_BITS 4
@@ -191,19 +160,7 @@ extern "C" {
#define __annotation(x)
#endif //!MSC_VER
-#ifdef _MSC_VER
-
-#if defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64)
-#define UNALIGNED __unaligned
-#else
#define UNALIGNED
-#endif
-
-#else // _MSC_VER
-
-#define UNALIGNED
-
-#endif // _MSC_VER
#ifndef FORCEINLINE
#if _MSC_VER < 1200
@@ -215,75 +172,19 @@ extern "C" {
#ifndef PAL_STDCPP_COMPAT
-#ifdef _M_ALPHA
+#if __GNUC__
-typedef struct {
- char *a0; /* pointer to first homed integer argument */
- int offset; /* byte offset of next parameter */
-} va_list;
-
-#define va_start(list, v) __builtin_va_start(list, v, 1)
-#define va_end(list)
-
-#elif __GNUC__
-
-#if defined(_AIX)
-
-typedef __builtin_va_list __gnuc_va_list;
typedef __builtin_va_list va_list;
-#define va_start(v,l) __builtin_va_start(v,l)
-#define va_end __builtin_va_end
-#define va_arg __builtin_va_arg
-
-#else // _AIX
-
-#if __GNUC__ == 2
-typedef void * va_list;
-#else
-typedef __builtin_va_list va_list;
-#endif // __GNUC__
/* We should consider if the va_arg definition here is actually necessary.
Could we use the standard va_arg definition? */
-#if __GNUC__ == 2
-#if defined(_SPARC_) || defined(_PARISC_) // ToDo: is this the right thing for PARISC?
-#define va_start(list, v) (__builtin_next_arg(v), list = (char *) __builtin_saveregs())
-#define __va_rounded_size(TYPE) \
- (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
-#define __record_type_class 12
-#define __real_type_class 8
-#define va_arg(pvar,TYPE) \
-__extension__ \
-(*({((__builtin_classify_type (*(TYPE*) 0) >= __record_type_class \
- || (__builtin_classify_type (*(TYPE*) 0) == __real_type_class \
- && sizeof (TYPE) == 16)) \
- ? ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE *), \
- *(TYPE **) (void *) ((char *)(pvar) - __va_rounded_size (TYPE *))) \
- : __va_rounded_size (TYPE) == 8 \
- ? ({ union {char __d[sizeof (TYPE)]; int __i[2];} __u; \
- __u.__i[0] = ((int *) (void *) (pvar))[0]; \
- __u.__i[1] = ((int *) (void *) (pvar))[1]; \
- (pvar) = (char *)(pvar) + 8; \
- (TYPE *) (void *) __u.__d; }) \
- : ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE), \
- ((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));}))
-#else // _SPARC_ or _PARISC_
-// GCC 2.95.3 on non-SPARC
-#define __va_size(type) (((sizeof(type) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
-#define va_start(list, v) ((list) = (va_list) __builtin_next_arg(v))
-#define va_arg(ap, type) (*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
-#endif // _SPARC_ or _PARISC_
-#else // __GNUC__ == 2
#define va_start __builtin_va_start
#define va_arg __builtin_va_arg
-#endif // __GNUC__ == 2
#define va_copy __builtin_va_copy
#define va_end __builtin_va_end
-#endif // _AIX
-
#define VOID void
#define PUB __attribute__((visibility("default")))
@@ -628,26 +529,6 @@ PAL_Random(
IN OUT LPVOID lpBuffer,
IN DWORD dwLength);
-#ifdef PLATFORM_UNIX
-
-PALIMPORT
-DWORD
-PALAPI
-PAL_CreateExecWatchpoint(
- HANDLE hThread,
- PVOID pvInstruction
- );
-
-PALIMPORT
-DWORD
-PALAPI
-PAL_DeleteExecWatchpoint(
- HANDLE hThread,
- PVOID pvInstruction
- );
-
-#endif
-
PALIMPORT
BOOL
PALAPI
@@ -1845,6 +1726,15 @@ QueueUserAPC(
#define CONTEXT_EXCEPTION_REQUEST 0x40000000L
#define CONTEXT_EXCEPTION_REPORTING 0x80000000L
+//
+// This flag is set by the unwinder if it has unwound to a call
+// site, and cleared whenever it unwinds through a trap frame.
+// It is used by language-specific exception handlers to help
+// differentiate exception scopes during dispatching.
+//
+
+#define CONTEXT_UNWOUND_TO_CALL 0x20000000
+
typedef struct _FLOATING_SAVE_AREA {
DWORD ControlWord;
DWORD StatusWord;
@@ -1905,658 +1795,21 @@ typedef struct _CONTEXT {
typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
- // TODO WIP x86/Linux, need to fix this.
- PDWORD Ebx;
- PDWORD Esi;
+ // The ordering of these fields should be aligned with that
+ // of corresponding fields in CONTEXT
+ //
+ // (See FillRegDisplay in inc/regdisp.h for details)
PDWORD Edi;
+ PDWORD Esi;
+ PDWORD Ebx;
+ PDWORD Edx;
+ PDWORD Ecx;
+ PDWORD Eax;
+
PDWORD Ebp;
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
-#elif defined(_PPC_)
-
-//
-// ***********************************************************************************
-//
-// NOTE: These context definitions are replicated in ndp/clr/src/debug/inc/DbgTargetContext.h (for the
-// purposes manipulating contexts from different platforms during remote debugging). Be sure to keep those
-// definitions in sync if you make any changes here.
-//
-// ***********************************************************************************
-//
-
-#define CONTEXT_CONTROL 0x00000001L
-#define CONTEXT_FLOATING_POINT 0x00000002L
-#define CONTEXT_INTEGER 0x00000004L
-
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-#define CONTEXT_ALL CONTEXT_FULL
-
-typedef struct _CONTEXT {
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_FLOATING_POINT.
- //
-
- double Fpr0; // Floating registers 0..31
- double Fpr1;
- double Fpr2;
- double Fpr3;
- double Fpr4;
- double Fpr5;
- double Fpr6;
- double Fpr7;
- double Fpr8;
- double Fpr9;
- double Fpr10;
- double Fpr11;
- double Fpr12;
- double Fpr13;
- double Fpr14;
- double Fpr15;
- double Fpr16;
- double Fpr17;
- double Fpr18;
- double Fpr19;
- double Fpr20;
- double Fpr21;
- double Fpr22;
- double Fpr23;
- double Fpr24;
- double Fpr25;
- double Fpr26;
- double Fpr27;
- double Fpr28;
- double Fpr29;
- double Fpr30;
- double Fpr31;
- double Fpscr; // Floating point status/control reg
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_INTEGER.
- //
-
- ULONG Gpr0; // General registers 0..31
- ULONG Gpr1; // StackPointer
- ULONG Gpr2;
- ULONG Gpr3;
- ULONG Gpr4;
- ULONG Gpr5;
- ULONG Gpr6;
- ULONG Gpr7;
- ULONG Gpr8;
- ULONG Gpr9;
- ULONG Gpr10;
- ULONG Gpr11;
- ULONG Gpr12;
- ULONG Gpr13;
- ULONG Gpr14;
- ULONG Gpr15;
- ULONG Gpr16;
- ULONG Gpr17;
- ULONG Gpr18;
- ULONG Gpr19;
- ULONG Gpr20;
- ULONG Gpr21;
- ULONG Gpr22;
- ULONG Gpr23;
- ULONG Gpr24;
- ULONG Gpr25;
- ULONG Gpr26;
- ULONG Gpr27;
- ULONG Gpr28;
- ULONG Gpr29;
- ULONG Gpr30;
- ULONG Gpr31;
-
- ULONG Cr; // Condition register
- ULONG Xer; // Fixed point exception register
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_CONTROL.
- //
-
- ULONG Msr; // Machine status register
- ULONG Iar; // Instruction address register
- ULONG Lr; // Link register
- ULONG Ctr; // Count register
-
- //
- // The flags values within this flag control the contents of
- // a CONTEXT record.
- //
- // If the context record is used as an input parameter, then
- // for each portion of the context record controlled by a flag
- // whose value is set, it is assumed that that portion of the
- // context record contains valid context. If the context record
- // is being used to modify a thread's context, then only that
- // portion of the threads context will be modified.
- //
- // If the context record is used as an IN OUT parameter to capture
- // the context of a thread, then only those portions of the thread's
- // context corresponding to set flags will be returned.
- //
- // The context record is never used as an OUT only parameter.
- //
-
- ULONG ContextFlags;
-
- ULONG Fill[3]; // Pad out to multiple of 16 bytes
-
- //
- // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
- // set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT
- // included in CONTEXT_FULL.
- //
- ULONG Dr0; // Breakpoint Register 1
- ULONG Dr1; // Breakpoint Register 2
- ULONG Dr2; // Breakpoint Register 3
- ULONG Dr3; // Breakpoint Register 4
- ULONG Dr4; // Breakpoint Register 5
- ULONG Dr5; // Breakpoint Register 6
- ULONG Dr6; // Debug Status Register
- ULONG Dr7; // Debug Control Register
-
-} CONTEXT, *PCONTEXT, *LPCONTEXT;
-
-#elif defined(_SPARC_)
-
-#define CONTEXT_CONTROL 0x00000001L
-#define CONTEXT_FLOATING_POINT 0x00000002L
-#define CONTEXT_INTEGER 0x00000004L
-
-#define COUNT_FLOATING_REGISTER 32
-#define COUNT_DOUBLE_REGISTER 16
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-#define CONTEXT_ALL CONTEXT_FULL
-
-typedef struct _CONTEXT {
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_INTEGER.
- //
- ULONG g0;
- ULONG g1;
- ULONG g2;
- ULONG g3;
- ULONG g4;
- ULONG g5;
- ULONG g6;
- ULONG g7;
- ULONG o0;
- ULONG o1;
- ULONG o2;
- ULONG o3;
- ULONG o4;
- ULONG o5;
- ULONG sp;
- ULONG o7;
- ULONG l0;
- ULONG l1;
- ULONG l2;
- ULONG l3;
- ULONG l4;
- ULONG l5;
- ULONG l6;
- ULONG l7;
- ULONG i0;
- ULONG i1;
- ULONG i2;
- ULONG i3;
- ULONG i4;
- ULONG i5;
- ULONG fp;
- ULONG i7;
-
- ULONG y;
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_CONTROL.
- //
-#if defined(__sparcv9)
- ULONG ccr;
-#else
- ULONG psr;
-#endif
- ULONG pc; // program counter
- ULONG npc; // next address to be executed
-
- ULONG ContextFlags;
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_FLOATING_POINT.
- //
- ULONGLONG fsr;
- union {
- float f[COUNT_FLOATING_REGISTER];
- double d[COUNT_DOUBLE_REGISTER];
- } fprs;
-
-} CONTEXT, *PCONTEXT, *LPCONTEXT;
-
-#elif defined(_PARISC_)
-
-// ToDo: Get this correct for PARISC architecture
-#define CONTEXT_CONTROL 0x00000001L
-#define CONTEXT_FLOATING_POINT 0x00000002L
-#define CONTEXT_INTEGER 0x00000004L
-
-#define COUNT_FLOATING_REGISTER 32
-#define COUNT_DOUBLE_REGISTER 16
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-#define CONTEXT_ALL CONTEXT_FULL
-
-typedef struct _CONTEXT {
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_INTEGER.
- //
- ULONG g0;
- ULONG g1;
- ULONG g2;
- ULONG g3;
- ULONG g4;
- ULONG g5;
- ULONG g6;
- ULONG g7;
- ULONG o0;
- ULONG o1;
- ULONG o2;
- ULONG o3;
- ULONG o4;
- ULONG o5;
- ULONG sp;
- ULONG o7;
- ULONG l0;
- ULONG l1;
- ULONG l2;
- ULONG l3;
- ULONG l4;
- ULONG l5;
- ULONG l6;
- ULONG l7;
- ULONG i0;
- ULONG i1;
- ULONG i2;
- ULONG i3;
- ULONG i4;
- ULONG i5;
- ULONG fp;
- ULONG i7;
-
- ULONG y;
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_CONTROL.
- //
- ULONG psr;
- ULONG pc; // program counter
- ULONG npc; // next address to be executed
-
- ULONG ContextFlags;
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_FLOATING_POINT.
- //
- ULONGLONG fsr;
- union {
- float f[COUNT_FLOATING_REGISTER];
- double d[COUNT_DOUBLE_REGISTER];
- } fprs;
-
-} CONTEXT, *PCONTEXT, *LPCONTEXT;
-
-#elif defined(_IA64_)
-
-// copied from winnt.h
-typedef struct _FLOAT128 {
- __int64 LowPart;
- __int64 HighPart;
-} FLOAT128;
-
-typedef FLOAT128 *PFLOAT128;
-
-// begin_ntddk begin_nthal
-
-//
-// The following flags control the contents of the CONTEXT structure.
-//
-
-#if !defined(RC_INVOKED)
-
-#define CONTEXT_IA64 0x00080000
-
-#define CONTEXT_CONTROL (CONTEXT_IA64 | 0x00000001L)
-#define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | 0x00000002L)
-#define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004L)
-#define CONTEXT_INTEGER (CONTEXT_IA64 | 0x00000008L)
-#define CONTEXT_DEBUG (CONTEXT_IA64 | 0x00000010L)
-#define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | 0x00000020L) // Includes StIPSR
-
-
-#define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
-#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
-
-#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
-#define CONTEXT_SERVICE_ACTIVE 0x10000000
-#define CONTEXT_EXCEPTION_REQUEST 0x40000000
-#define CONTEXT_EXCEPTION_REPORTING 0x80000000
-
-#endif // !defined(RC_INVOKED)
-
-//
-// Context Frame
-//
-// This frame has a several purposes: 1) it is used as an argument to
-// NtContinue, 2) it is used to construct a call frame for APC delivery,
-// 3) it is used to construct a call frame for exception dispatching
-// in user mode, 4) it is used in the user level thread creation
-// routines, and 5) it is used to to pass thread state to debuggers.
-//
-// N.B. Because this record is used as a call frame, it must be EXACTLY
-// a multiple of 16 bytes in length and aligned on a 16-byte boundary.
-//
-
-typedef struct _CONTEXT {
-
- //
- // The flags values within this flag control the contents of
- // a CONTEXT record.
- //
- // If the context record is used as an input parameter, then
- // for each portion of the context record controlled by a flag
- // whose value is set, it is assumed that that portion of the
- // context record contains valid context. If the context record
- // is being used to modify a thread's context, then only that
- // portion of the threads context will be modified.
- //
- // If the context record is used as an IN OUT parameter to capture
- // the context of a thread, then only those portions of the thread's
- // context corresponding to set flags will be returned.
- //
- // The context record is never used as an OUT only parameter.
- //
-
- DWORD ContextFlags;
- DWORD Fill1[3]; // for alignment of following on 16-byte boundary
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_DEBUG.
- //
- // N.B. CONTEXT_DEBUG is *not* part of CONTEXT_FULL.
- //
-
- ULONGLONG DbI0;
- ULONGLONG DbI1;
- ULONGLONG DbI2;
- ULONGLONG DbI3;
- ULONGLONG DbI4;
- ULONGLONG DbI5;
- ULONGLONG DbI6;
- ULONGLONG DbI7;
-
- ULONGLONG DbD0;
- ULONGLONG DbD1;
- ULONGLONG DbD2;
- ULONGLONG DbD3;
- ULONGLONG DbD4;
- ULONGLONG DbD5;
- ULONGLONG DbD6;
- ULONGLONG DbD7;
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_LOWER_FLOATING_POINT.
- //
-
- FLOAT128 FltS0;
- FLOAT128 FltS1;
- FLOAT128 FltS2;
- FLOAT128 FltS3;
- FLOAT128 FltT0;
- FLOAT128 FltT1;
- FLOAT128 FltT2;
- FLOAT128 FltT3;
- FLOAT128 FltT4;
- FLOAT128 FltT5;
- FLOAT128 FltT6;
- FLOAT128 FltT7;
- FLOAT128 FltT8;
- FLOAT128 FltT9;
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_HIGHER_FLOATING_POINT.
- //
-
- FLOAT128 FltS4;
- FLOAT128 FltS5;
- FLOAT128 FltS6;
- FLOAT128 FltS7;
- FLOAT128 FltS8;
- FLOAT128 FltS9;
- FLOAT128 FltS10;
- FLOAT128 FltS11;
- FLOAT128 FltS12;
- FLOAT128 FltS13;
- FLOAT128 FltS14;
- FLOAT128 FltS15;
- FLOAT128 FltS16;
- FLOAT128 FltS17;
- FLOAT128 FltS18;
- FLOAT128 FltS19;
-
- FLOAT128 FltF32;
- FLOAT128 FltF33;
- FLOAT128 FltF34;
- FLOAT128 FltF35;
- FLOAT128 FltF36;
- FLOAT128 FltF37;
- FLOAT128 FltF38;
- FLOAT128 FltF39;
-
- FLOAT128 FltF40;
- FLOAT128 FltF41;
- FLOAT128 FltF42;
- FLOAT128 FltF43;
- FLOAT128 FltF44;
- FLOAT128 FltF45;
- FLOAT128 FltF46;
- FLOAT128 FltF47;
- FLOAT128 FltF48;
- FLOAT128 FltF49;
-
- FLOAT128 FltF50;
- FLOAT128 FltF51;
- FLOAT128 FltF52;
- FLOAT128 FltF53;
- FLOAT128 FltF54;
- FLOAT128 FltF55;
- FLOAT128 FltF56;
- FLOAT128 FltF57;
- FLOAT128 FltF58;
- FLOAT128 FltF59;
-
- FLOAT128 FltF60;
- FLOAT128 FltF61;
- FLOAT128 FltF62;
- FLOAT128 FltF63;
- FLOAT128 FltF64;
- FLOAT128 FltF65;
- FLOAT128 FltF66;
- FLOAT128 FltF67;
- FLOAT128 FltF68;
- FLOAT128 FltF69;
-
- FLOAT128 FltF70;
- FLOAT128 FltF71;
- FLOAT128 FltF72;
- FLOAT128 FltF73;
- FLOAT128 FltF74;
- FLOAT128 FltF75;
- FLOAT128 FltF76;
- FLOAT128 FltF77;
- FLOAT128 FltF78;
- FLOAT128 FltF79;
-
- FLOAT128 FltF80;
- FLOAT128 FltF81;
- FLOAT128 FltF82;
- FLOAT128 FltF83;
- FLOAT128 FltF84;
- FLOAT128 FltF85;
- FLOAT128 FltF86;
- FLOAT128 FltF87;
- FLOAT128 FltF88;
- FLOAT128 FltF89;
-
- FLOAT128 FltF90;
- FLOAT128 FltF91;
- FLOAT128 FltF92;
- FLOAT128 FltF93;
- FLOAT128 FltF94;
- FLOAT128 FltF95;
- FLOAT128 FltF96;
- FLOAT128 FltF97;
- FLOAT128 FltF98;
- FLOAT128 FltF99;
-
- FLOAT128 FltF100;
- FLOAT128 FltF101;
- FLOAT128 FltF102;
- FLOAT128 FltF103;
- FLOAT128 FltF104;
- FLOAT128 FltF105;
- FLOAT128 FltF106;
- FLOAT128 FltF107;
- FLOAT128 FltF108;
- FLOAT128 FltF109;
-
- FLOAT128 FltF110;
- FLOAT128 FltF111;
- FLOAT128 FltF112;
- FLOAT128 FltF113;
- FLOAT128 FltF114;
- FLOAT128 FltF115;
- FLOAT128 FltF116;
- FLOAT128 FltF117;
- FLOAT128 FltF118;
- FLOAT128 FltF119;
-
- FLOAT128 FltF120;
- FLOAT128 FltF121;
- FLOAT128 FltF122;
- FLOAT128 FltF123;
- FLOAT128 FltF124;
- FLOAT128 FltF125;
- FLOAT128 FltF126;
- FLOAT128 FltF127;
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT | CONTEXT_CONTROL.
- //
-
- ULONGLONG StFPSR; // FP status
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_INTEGER.
- //
- // N.B. The registers gp, sp, rp are part of the control context
- //
-
- ULONGLONG IntGp; // r1, volatile
- ULONGLONG IntT0; // r2-r3, volatile
- ULONGLONG IntT1; //
- ULONGLONG IntS0; // r4-r7, preserved
- ULONGLONG IntS1;
- ULONGLONG IntS2;
- ULONGLONG IntS3;
- ULONGLONG IntV0; // r8, volatile
- ULONGLONG IntT2; // r9-r11, volatile
- ULONGLONG IntT3;
- ULONGLONG IntT4;
- ULONGLONG IntSp; // stack pointer (r12), special
- ULONGLONG IntTeb; // teb (r13), special
- ULONGLONG IntT5; // r14-r31, volatile
- ULONGLONG IntT6;
- ULONGLONG IntT7;
- ULONGLONG IntT8;
- ULONGLONG IntT9;
- ULONGLONG IntT10;
- ULONGLONG IntT11;
- ULONGLONG IntT12;
- ULONGLONG IntT13;
- ULONGLONG IntT14;
- ULONGLONG IntT15;
- ULONGLONG IntT16;
- ULONGLONG IntT17;
- ULONGLONG IntT18;
- ULONGLONG IntT19;
- ULONGLONG IntT20;
- ULONGLONG IntT21;
- ULONGLONG IntT22;
-
- ULONGLONG IntNats; // Nat bits for r1-r31
- // r1-r31 in bits 1 thru 31.
- ULONGLONG Preds; // predicates, preserved
-
- ULONGLONG BrRp; // return pointer, b0, preserved
- ULONGLONG BrS0; // b1-b5, preserved
- ULONGLONG BrS1;
- ULONGLONG BrS2;
- ULONGLONG BrS3;
- ULONGLONG BrS4;
- ULONGLONG BrT0; // b6-b7, volatile
- ULONGLONG BrT1;
-
- //
- // This section is specified/returned if the ContextFlags word contains
- // the flag CONTEXT_CONTROL.
- //
-
- // Other application registers
- ULONGLONG ApUNAT; // User Nat collection register, preserved
- ULONGLONG ApLC; // Loop counter register, preserved
- ULONGLONG ApEC; // Epilog counter register, preserved
- ULONGLONG ApCCV; // CMPXCHG value register, volatile
- ULONGLONG ApDCR; // Default control register (TBD)
-
- // Register stack info
- ULONGLONG RsPFS; // Previous function state, preserved
- ULONGLONG RsBSP; // Backing store pointer, preserved
- ULONGLONG RsBSPSTORE;
- ULONGLONG RsRSC; // RSE configuration, volatile
- ULONGLONG RsRNAT; // RSE Nat collection register, preserved
-
- // Trap Status Information
- ULONGLONG StIPSR; // Interruption Processor Status
- ULONGLONG StIIP; // Interruption IP
- ULONGLONG StIFS; // Interruption Function State
-
- // iA32 related control registers
- ULONGLONG StFCR; // copy of Ar21
- ULONGLONG Eflag; // Eflag copy of Ar24
- ULONGLONG SegCSD; // iA32 CSDescriptor (Ar25)
- ULONGLONG SegSSD; // iA32 SSDescriptor (Ar26)
- ULONGLONG Cflag; // Cr0+Cr4 copy of Ar27
- ULONGLONG StFSR; // x86 FP status (copy of AR28)
- ULONGLONG StFIR; // x86 FP status (copy of AR29)
- ULONGLONG StFDR; // x86 FP status (copy of AR30)
-
- ULONGLONG UNUSEDPACK; // added to pack StFDR to 16-bytes
-
-} CONTEXT, *PCONTEXT, *LPCONTEXT;
#elif defined(_AMD64_)
// copied from winnt.h
@@ -3286,13 +2539,9 @@ PALIMPORT BOOL PALAPI PAL_VirtualUnwindOutOfProc(CONTEXT *context,
#define GetLogicalProcessorCacheSizeFromOS PAL_GetLogicalProcessorCacheSizeFromOS
-#ifdef PLATFORM_UNIX
-
/* PAL_CS_NATIVE_DATA_SIZE is defined as sizeof(PAL_CRITICAL_SECTION_NATIVE_DATA) */
-#if defined(_AIX)
-#define PAL_CS_NATIVE_DATA_SIZE 100
-#elif defined(__APPLE__) && defined(__i386__)
+#if defined(__APPLE__) && defined(__i386__)
#define PAL_CS_NATIVE_DATA_SIZE 76
#elif defined(__APPLE__) && defined(__x86_64__)
#define PAL_CS_NATIVE_DATA_SIZE 120
@@ -3300,8 +2549,6 @@ PALIMPORT BOOL PALAPI PAL_VirtualUnwindOutOfProc(CONTEXT *context,
#define PAL_CS_NATIVE_DATA_SIZE 12
#elif defined(__FreeBSD__) && defined(__x86_64__)
#define PAL_CS_NATIVE_DATA_SIZE 24
-#elif defined(__hpux__) && (defined(__hppa__) || defined (__ia64__))
-#define PAL_CS_NATIVE_DATA_SIZE 148
#elif defined(__linux__) && defined(_ARM_)
#define PAL_CS_NATIVE_DATA_SIZE 80
#elif defined(__linux__) && defined(_ARM64_)
@@ -3314,25 +2561,13 @@ PALIMPORT BOOL PALAPI PAL_VirtualUnwindOutOfProc(CONTEXT *context,
#define PAL_CS_NATIVE_DATA_SIZE 96
#elif defined(__NetBSD__) && defined(__earm__)
#define PAL_CS_NATIVE_DATA_SIZE 56
-#elif defined(__NetBSD__) && defined(__hppa__)
-#define PAL_CS_NATIVE_DATA_SIZE 92
#elif defined(__NetBSD__) && defined(__i386__)
#define PAL_CS_NATIVE_DATA_SIZE 56
-#elif defined(__NetBSD__) && defined(__mips__)
-#define PAL_CS_NATIVE_DATA_SIZE 56
-#elif defined(__NetBSD__) && (defined(__sparc__) && !defined(__sparc64__))
-#define PAL_CS_NATIVE_DATA_SIZE 56
-#elif defined(__NetBSD__) && defined(__sparc64__)
-#define PAL_CS_NATIVE_DATA_SIZE 92
-#elif defined(__sun__)
-#define PAL_CS_NATIVE_DATA_SIZE 48
#else
#warning
#error PAL_CS_NATIVE_DATA_SIZE is not defined for this architecture
#endif
-#endif // PLATFORM_UNIX
-
//
typedef struct _CRITICAL_SECTION {
PVOID DebugInfo;
@@ -3342,7 +2577,6 @@ typedef struct _CRITICAL_SECTION {
HANDLE LockSemaphore;
ULONG_PTR SpinCount;
-#ifdef PLATFORM_UNIX
BOOL bInternal;
volatile DWORD dwInitState;
union CSNativeDataStorage
@@ -3350,7 +2584,6 @@ typedef struct _CRITICAL_SECTION {
BYTE rgNativeDataStorage[PAL_CS_NATIVE_DATA_SIZE];
VOID * pvAlign; // make sure the storage is machine-pointer-size aligned
} csnds;
-#endif // PLATFORM_UNIX
} CRITICAL_SECTION, *PCRITICAL_SECTION, *LPCRITICAL_SECTION;
PALIMPORT VOID PALAPI EnterCriticalSection(IN OUT LPCRITICAL_SECTION lpCriticalSection);
@@ -4554,33 +3787,6 @@ PAL_GetCalendar(
#define GEOID_NOT_AVAILABLE -1
-// "a number", might represent different types
-typedef struct PALNUMBER__* PALNUMBER;
-
-// return NULL on OOM
-PALIMPORT PALNUMBER PALAPI PAL_DoubleToNumber(double);
-PALIMPORT PALNUMBER PALAPI PAL_Int64ToNumber(INT64);
-PALIMPORT PALNUMBER PALAPI PAL_UInt64ToNumber(UINT64);
-PALIMPORT PALNUMBER PALAPI PAL_IntToNumber(int);
-PALIMPORT PALNUMBER PALAPI PAL_UIntToNumber(unsigned int);
-
-PALIMPORT void PALAPI PAL_ReleaseNumber(PALNUMBER);
-
-
-// return string length if Buffer is NULL or the result fits in cchBuffer, otherwise -1
-PALIMPORT int PALAPI PAL_FormatScientific(LPCWSTR sLocale, LPWSTR pBuffer, SIZE_T cchBuffer, PALNUMBER number, int nMinDigits, int nMaxDigits,
- LPCWSTR sExponent, LPCWSTR sNumberDecimal, LPCWSTR sPositive, LPCWSTR sNegative, LPCWSTR sZero);
-
-PALIMPORT int PALAPI PAL_FormatCurrency(LPCWSTR sLocale, LPWSTR pBuffer, SIZE_T cchBuffer, PALNUMBER number, int nMinDigits, int nMaxDigits, int iNegativeFormat, int iPositiveFormat,
- int iPrimaryGroup, int iSecondaryGroup, LPCWSTR sCurrencyDecimal, LPCWSTR sCurrencyGroup, LPCWSTR sNegative, LPCWSTR sCurrency, LPCWSTR sZero);
-
-PALIMPORT int PALAPI PAL_FormatPercent(LPCWSTR sLocale, LPWSTR pBuffer, SIZE_T cchBuffer, PALNUMBER number, int nMinDigits, int nMaxDigits,int iNegativeFormat, int iPositiveFormat,
- int iPrimaryGroup, int iSecondaryGroup, LPCWSTR sPercentDecimal, LPCWSTR sPercentGroup, LPCWSTR sNegative, LPCWSTR sPercent, LPCWSTR sZero);
-
-PALIMPORT int PALAPI PAL_FormatDecimal(LPCWSTR sLocale, LPWSTR pBuffer, SIZE_T cchBuffer, PALNUMBER number, int nMinDigits, int nMaxDigits, int iNegativeFormat,
- int iPrimaryGroup, int iSecondaryGroup, LPCWSTR sDecimal, LPCWSTR sGroup, LPCWSTR sNegative, LPCWSTR sZero);
-
-
#define DATE_USE_ALT_CALENDAR 0x00000004
#if ENABLE_DOWNLEVEL_FOR_NLS
@@ -4706,7 +3912,7 @@ enum {
//
typedef struct _RUNTIME_FUNCTION {
DWORD BeginAddress;
-#ifdef _AMD64_
+#ifdef _TARGET_AMD64_
DWORD EndAddress;
#endif
DWORD UnwindData;
@@ -5660,14 +4866,12 @@ CoCreateGuid(OUT GUID * pguid);
/* Some C runtime functions needs to be reimplemented by the PAL.
To avoid name collisions, those functions have been renamed using
defines */
-#ifdef PLATFORM_UNIX
#ifndef PAL_STDCPP_COMPAT
#define exit PAL_exit
#define atexit PAL_atexit
#define printf PAL_printf
#define vprintf PAL_vprintf
#define wprintf PAL_wprintf
-#define swprintf PAL_swprintf
#define wcsspn PAL_wcsspn
#define wcstod PAL_wcstod
#define wcstol PAL_wcstol
@@ -5694,8 +4898,6 @@ CoCreateGuid(OUT GUID * pguid);
#define iswxdigit PAL_iswxdigit
#define towlower PAL_towlower
#define towupper PAL_towupper
-#define vsprintf PAL_vsprintf
-#define vswprintf PAL_vswprintf
#define realloc PAL_realloc
#define fopen PAL_fopen
#define strtok PAL_strtok
@@ -5758,8 +4960,8 @@ CoCreateGuid(OUT GUID * pguid);
#define _close PAL__close
#define _wcstoui64 PAL__wcstoui64
#define _flushall PAL__flushall
-#define _vsnprintf PAL__vsnprintf
#define strnlen PAL_strnlen
+#define wcsnlen PAL_wcsnlen
#ifdef _AMD64_
#define _mm_getcsr PAL__mm_getcsr
@@ -5767,7 +4969,6 @@ CoCreateGuid(OUT GUID * pguid);
#endif // _AMD64_
#endif // !PAL_STDCPP_COMPAT
-#endif // PLATFORM_UNIX
#ifndef _CONST_RETURN
#ifdef __cplusplus
@@ -5836,7 +5037,6 @@ PALIMPORT char * __cdecl strstr(const char *, const char *);
PALIMPORT char * __cdecl strtok(char *, const char *);
PALIMPORT size_t __cdecl strspn(const char *, const char *);
PALIMPORT size_t __cdecl strcspn(const char *, const char *);
-PALIMPORT int __cdecl vsprintf(char *, const char *, va_list);
PALIMPORT int __cdecl atoi(const char *);
PALIMPORT LONG __cdecl atol(const char *);
PALIMPORT ULONG __cdecl strtoul(const char *, char **, int);
@@ -5900,7 +5100,6 @@ PALIMPORT WCHAR * __cdecl PAL_wcstok(WCHAR *, const WCHAR *);
PALIMPORT size_t __cdecl PAL_wcscspn(const WCHAR *, const WCHAR *);
PALIMPORT int __cdecl PAL_swprintf(WCHAR *, const WCHAR *, ...);
PALIMPORT int __cdecl PAL_vswprintf(WCHAR *, const WCHAR *, va_list);
-PALIMPORT int __cdecl PAL__vsnprintf(LPSTR Buffer, size_t Count, LPCSTR Format, va_list ap);
PALIMPORT int __cdecl PAL_swscanf(const WCHAR *, const WCHAR *, ...);
PALIMPORT LONG __cdecl PAL_wcstol(const WCHAR *, WCHAR **, int);
PALIMPORT ULONG __cdecl PAL_wcstoul(const WCHAR *, WCHAR **, int);
@@ -6048,17 +5247,11 @@ PALIMPORT char * __cdecl _strdup(const char *);
#if defined(_MSC_VER)
#define alloca _alloca
-#elif defined(PLATFORM_UNIX)
-#define _alloca alloca
#else
-// MingW
-#define _alloca __builtin_alloca
-#define alloca __builtin_alloca
+#define _alloca alloca
#endif //_MSC_VER
-#if defined(__GNUC__) && defined(PLATFORM_UNIX)
#define alloca __builtin_alloca
-#endif // __GNUC__
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
@@ -6527,10 +5720,10 @@ public:
}
};
-typedef BOOL (PALAPI *PHARDWARE_EXCEPTION_HANDLER)(PAL_SEHException* ex);
-typedef BOOL (PALAPI *PHARDWARE_EXCEPTION_SAFETY_CHECK_FUNCTION)(PCONTEXT contextRecord, PEXCEPTION_RECORD exceptionRecord);
-typedef VOID (PALAPI *PTERMINATION_REQUEST_HANDLER)();
-typedef DWORD (PALAPI *PGET_GCMARKER_EXCEPTION_CODE)(LPVOID ip);
+typedef BOOL (*PHARDWARE_EXCEPTION_HANDLER)(PAL_SEHException* ex);
+typedef BOOL (*PHARDWARE_EXCEPTION_SAFETY_CHECK_FUNCTION)(PCONTEXT contextRecord, PEXCEPTION_RECORD exceptionRecord);
+typedef VOID (*PTERMINATION_REQUEST_HANDLER)();
+typedef DWORD (*PGET_GCMARKER_EXCEPTION_CODE)(LPVOID ip);
PALIMPORT
VOID
@@ -6819,24 +6012,13 @@ public:
// Platform-specific library naming
//
-#ifdef PLATFORM_UNIX
#ifdef __APPLE__
#define MAKEDLLNAME_W(name) u"lib" name u".dylib"
#define MAKEDLLNAME_A(name) "lib" name ".dylib"
-#elif defined(_AIX)
-#define MAKEDLLNAME_W(name) L"lib" name L".a"
-#define MAKEDLLNAME_A(name) "lib" name ".a"
-#elif defined(__hppa__) || defined(_IA64_)
-#define MAKEDLLNAME_W(name) L"lib" name L".sl"
-#define MAKEDLLNAME_A(name) "lib" name ".sl"
#else
#define MAKEDLLNAME_W(name) u"lib" name u".so"
#define MAKEDLLNAME_A(name) "lib" name ".so"
#endif
-#else
-#define MAKEDLLNAME_W(name) name L".dll"
-#define MAKEDLLNAME_A(name) name ".dll"
-#endif
#ifdef UNICODE
#define MAKEDLLNAME(x) MAKEDLLNAME_W(x)
@@ -6848,10 +6030,6 @@ public:
#if __APPLE__
#define PAL_SHLIB_SUFFIX ".dylib"
-#elif _AIX
-#define PAL_SHLIB_SUFFIX ".a"
-#elif _HPUX_
-#define PAL_SHLIB_SUFFIX ".sl"
#else
#define PAL_SHLIB_SUFFIX ".so"
#endif
diff --git a/src/pal/inc/pal_char16.h b/src/pal/inc/pal_char16.h
index 4600cc7ff6..0697b23d43 100644
--- a/src/pal/inc/pal_char16.h
+++ b/src/pal/inc/pal_char16.h
@@ -27,12 +27,10 @@ This file is used to define the wchar_t type as a 16-bit type on Unix.
// vc++, for whom wchar_t is already a typedef instead of a built-in.
#ifndef PAL_STDCPP_COMPAT
-#if defined (PLATFORM_UNIX) && defined(__GNUC__)
#undef wchar_t
#undef __WCHAR_TYPE__
#define __WCHAR_TYPE__ __wchar_16_cpp__
#define wchar_t __wchar_16_cpp__
-#endif // PLATFORM_UNIX
// Set up the wchar_t type (which got preprocessed to __wchar_16_cpp__).
// In C++11, the standard gives us char16_t, which is what we want (and matches types with u"")
@@ -40,7 +38,6 @@ This file is used to define the wchar_t type as a 16-bit type on Unix.
// **** WARNING: Linking C and C++ objects will break with -fstrict-aliasing with GCC/Clang
// due to conditional typedef
#if !defined(_WCHAR_T_DEFINED) || !defined(_MSC_VER)
-#if defined (PLATFORM_UNIX)
#if defined(__cplusplus)
#undef __WCHAR_TYPE__
#define __WCHAR_TYPE__ char16_t
@@ -50,7 +47,7 @@ typedef char16_t wchar_t;
#define __WCHAR_TYPE__ unsigned short
typedef unsigned short wchar_t;
#endif // __cplusplus
-#endif // PLATFORM_UNIX
+
#ifndef _WCHAR_T_DEFINED
#define _WCHAR_T_DEFINED
#endif // !_WCHAR_T_DEFINED
diff --git a/src/pal/inc/pal_mstypes.h b/src/pal/inc/pal_mstypes.h
index b9c3ac2e4a..1f5c11def4 100644
--- a/src/pal/inc/pal_mstypes.h
+++ b/src/pal/inc/pal_mstypes.h
@@ -235,13 +235,8 @@ typedef long double LONG_DOUBLE;
typedef void VOID;
-#ifndef PLATFORM_UNIX
-typedef long LONG;
-typedef unsigned long ULONG;
-#else
typedef int LONG; // NOTE: diff from windows.h, for LP64 compat
typedef unsigned int ULONG; // NOTE: diff from windows.h, for LP64 compat
-#endif
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
@@ -260,12 +255,7 @@ typedef UCHAR *PUCHAR;
typedef char *PSZ;
typedef ULONGLONG DWORDLONG;
-#ifndef PLATFORM_UNIX
-typedef unsigned long DWORD;
-#else
typedef unsigned int DWORD; // NOTE: diff from windows.h, for LP64 compat
-#endif
-
typedef unsigned int DWORD32, *PDWORD32;
typedef int BOOL;
diff --git a/src/pal/inc/rt/intsafe.h b/src/pal/inc/rt/intsafe.h
index 2ab2cf1550..4ed70e7423 100644
--- a/src/pal/inc/rt/intsafe.h
+++ b/src/pal/inc/rt/intsafe.h
@@ -38,47 +38,6 @@ UnsignedMultiply128 (
#endif
#endif // _AMD64_
-#ifndef FEATURE_PAL
-
-#ifdef _WIN64
-typedef unsigned __int64 size_t;
-typedef unsigned __int64 UINT_PTR;
-typedef unsigned __int64 ULONG_PTR;
-typedef unsigned __int64 DWORD_PTR;
-typedef unsigned __int64 SIZE_T;
-#else
-typedef __w64 unsigned int size_t;
-typedef __w64 unsigned int UINT_PTR;
-typedef __w64 unsigned long ULONG_PTR;
-typedef __w64 unsigned long DWORD_PTR;
-typedef __w64 unsigned long SIZE_T;
-#endif
-typedef char CHAR;
-typedef int INT;
-typedef long LONG;
-typedef unsigned char UCHAR;
-typedef unsigned short USHORT;
-typedef unsigned short WORD;
-typedef unsigned int UINT;
-typedef unsigned long ULONG;
-typedef unsigned long DWORD;
-typedef unsigned __int64 ULONGLONG;
-
-
-typedef LONG HRESULT;
-
-#ifndef SUCCEEDED
-#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
-#endif
-
-#ifndef FAILED
-#define FAILED(hr) (((HRESULT)(hr)) < 0)
-#endif
-
-#define S_OK ((HRESULT)0x00000000L)
-
-#endif // !FEATURE_PAL
-
#define INTSAFE_E_ARITHMETIC_OVERFLOW ((HRESULT)0x80070216L) // 0x216 = 534 = ERROR_ARITHMETIC_OVERFLOW
#ifndef LOWORD
@@ -93,8 +52,7 @@ typedef LONG HRESULT;
#define LODWORD(_qw) ((ULONG)(_qw))
#if defined(MIDL_PASS) || defined(RC_INVOKED) || defined(_M_CEE_PURE) \
- || defined(_68K_) || defined(_MPPC_) || defined(_PPC_) \
- || defined(_M_IA64) || defined(_M_AMD64) || defined(__ARM_ARCH)
+ || defined(_M_AMD64) || defined(__ARM_ARCH)
#ifndef UInt32x32To64
#define UInt32x32To64(a, b) ((unsigned __int64)((ULONG)(a)) * (unsigned __int64)((ULONG)(b)))
diff --git a/src/pal/inc/rt/palrt.h b/src/pal/inc/rt/palrt.h
index c181f38c2b..059d3a68a5 100644
--- a/src/pal/inc/rt/palrt.h
+++ b/src/pal/inc/rt/palrt.h
@@ -223,19 +223,11 @@ inline void *__cdecl operator new(size_t, void *_P)
// PAL_safe_offsetof is a version of offsetof that protects against an
// overridden operator&
-#if defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 5 || __GNUC__ > 3)
#define FIELD_OFFSET(type, field) __builtin_offsetof(type, field)
#ifndef offsetof
#define offsetof(type, field) __builtin_offsetof(type, field)
#endif
#define PAL_safe_offsetof(type, field) __builtin_offsetof(type, field)
-#else
-#define FIELD_OFFSET(type, field) (((LONG)(LONG_PTR)&(((type *)64)->field)) - 64)
-#ifndef offsetof
-#define offsetof(s,m) ((size_t)((ptrdiff_t)&(((s *)64)->m)) - 64)
-#endif
-#define PAL_safe_offsetof(s,m) ((size_t)((ptrdiff_t)&(char&)(((s *)64)->m))-64)
-#endif
#define CONTAINING_RECORD(address, type, field) \
((type *)((LONG_PTR)(address) - FIELD_OFFSET(type, field)))
@@ -243,7 +235,7 @@ inline void *__cdecl operator new(size_t, void *_P)
#define ARGUMENT_PRESENT(ArgumentPointer) (\
(CHAR *)(ArgumentPointer) != (CHAR *)(NULL) )
-#if defined(_WIN64) || defined(_M_ALPHA)
+#if defined(_WIN64)
#define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
#else
#define MAX_NATURAL_ALIGNMENT sizeof(ULONG)
@@ -893,7 +885,6 @@ Remember to fix the errcode defintion in safecrt.h.
*/
#define _wcslwr_s _wcslwr_unsafe
-#define _snprintf_s _snprintf_unsafe
#define swscanf_s swscanf
#define _wfopen_s _wfopen_unsafe
@@ -903,8 +894,6 @@ Remember to fix the errcode defintion in safecrt.h.
#define _vscprintf _vscprintf_unsafe
-#define vsprintf_s _vsnprintf
-
extern "C++" {
#include <safemath.h>
@@ -959,8 +948,11 @@ inline int __cdecl _vscprintf_unsafe(const char *_Format, va_list _ArgList)
if(buf == nullptr)
return 0;
- int ret = _vsnprintf(buf, guess, _Format, _ArgList);
+ va_list argListCopy;
+ va_copy(argListCopy, _ArgList);
+ int ret = _vsnprintf_s(buf, guess, _TRUNCATE, _Format, argListCopy);
free(buf);
+ va_end(argListCopy);
if ((ret != -1) && (ret < guess))
return ret;
@@ -969,28 +961,6 @@ inline int __cdecl _vscprintf_unsafe(const char *_Format, va_list _ArgList)
}
}
-inline int __cdecl _vsnprintf_unsafe(char *_Dst, size_t _SizeInWords, size_t _Count, const char *_Format, va_list _ArgList)
-{
- if (_Count == _TRUNCATE) _Count = _SizeInWords - 1;
- int ret = _vsnprintf(_Dst, _Count, _Format, _ArgList);
- _Dst[_SizeInWords - 1] = L'\0';
- if (ret < 0 && errno == 0)
- {
- errno = ERANGE;
- }
- return ret;
-}
-
-inline int __cdecl _snprintf_unsafe(char *_Dst, size_t _SizeInWords, size_t _Count, const char *_Format, ...)
-{
- int ret;
- va_list _ArgList;
- va_start(_ArgList, _Format);
- ret = _vsnprintf_unsafe(_Dst, _SizeInWords, _Count, _Format, _ArgList);
- va_end(_ArgList);
- return ret;
-}
-
inline errno_t __cdecl _wfopen_unsafe(PAL_FILE * *ff, const WCHAR *fileName, const WCHAR *mode)
{
PAL_FILE *result = _wfopen(fileName, mode);
@@ -1208,7 +1178,6 @@ typedef VOID (__stdcall *WAITORTIMERCALLBACK)(PVOID, BOOLEAN);
#define _ReturnAddress() __builtin_return_address(0)
-#ifdef PLATFORM_UNIX
#define DIRECTORY_SEPARATOR_CHAR_A '/'
#define DIRECTORY_SEPARATOR_CHAR_W W('/')
#define DIRECTORY_SEPARATOR_STR_A "/"
@@ -1216,15 +1185,6 @@ typedef VOID (__stdcall *WAITORTIMERCALLBACK)(PVOID, BOOLEAN);
#define PATH_SEPARATOR_CHAR_W W(':')
#define PATH_SEPARATOR_STR_W W(":")
#define VOLUME_SEPARATOR_CHAR_W W('/')
-#else // PLATFORM_UNIX
-#define DIRECTORY_SEPARATOR_CHAR_A '\\'
-#define DIRECTORY_SEPARATOR_CHAR_W W('\\')
-#define DIRECTORY_SEPARATOR_STR_A "\\"
-#define DIRECTORY_SEPARATOR_STR_W W("\\")
-#define PATH_SEPARATOR_CHAR_W W(';')
-#define PATH_SEPARATOR_STR_W W(";")
-#define VOLUME_SEPARATOR_CHAR_W W(':')
-#endif // PLATFORM_UNIX
#ifndef IMAGE_IMPORT_DESC_FIELD
#define IMAGE_IMPORT_DESC_FIELD(img, f) ((img).u.f)
@@ -1546,6 +1506,7 @@ typedef struct _DISPATCHER_CONTEXT {
PEXCEPTION_ROUTINE LanguageHandler;
PVOID HandlerData;
PUNWIND_HISTORY_TABLE HistoryTable;
+ BOOLEAN ControlPcIsUnwound;
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
#else
diff --git a/src/pal/inc/rt/safecrt.h b/src/pal/inc/rt/safecrt.h
index 3cc10cef33..92366dfc38 100644
--- a/src/pal/inc/rt/safecrt.h
+++ b/src/pal/inc/rt/safecrt.h
@@ -135,11 +135,7 @@ typedef _W64 unsigned int uintptr_t;
#define _UINTPTR_T_DEFINED
#endif
-#if defined(_MSC_VER) || (defined(__GNUC__) && (__GNUC__ >= 3))
#define SAFECRT_DEPRECATED __declspec(deprecated)
-#else
-#define SAFECRT_DEPRECATED
-#endif
/* errno_t */
#if !defined(_ERRCODE_DEFINED)
@@ -3253,10 +3249,6 @@ int __cdecl vswprintf_s(WCHAR (&_Dst)[_SizeInWords], const WCHAR *_Format, va_li
* return -1 if the formatted string does not entirely fit into _Dst (we will not call _SAFECRT_INVALID_PARAMETER);
* if _Count == 0, then (_Dst == nullptr && _SizeInBytes == 0) is allowed
*/
-_SAFECRT__EXTERN_C
-int __cdecl _snprintf_s(char *_Dst, size_t _SizeInBytes, size_t _Count, const char *_Format, ...);
-_SAFECRT__EXTERN_C
-int __cdecl _vsnprintf_s(char *_Dst, size_t _SizeInBytes, size_t _Count, const char *_Format, va_list _ArgList);
#if defined(__cplusplus) && _SAFECRT_USE_CPP_OVERLOADS
template <size_t _SizeInBytes>
diff --git a/src/pal/inc/rt/sal.h b/src/pal/inc/rt/sal.h
index 0e3eaaa388..07468645a5 100644
--- a/src/pal/inc/rt/sal.h
+++ b/src/pal/inc/rt/sal.h
@@ -2861,7 +2861,7 @@ of each annotation, see the advanced annotations section.
#define __success(expr) _Success_(expr)
#define __nullterminated _Null_terminated_
#define __nullnullterminated
-#define __reserved _SAL1_Source_(__reserved, (), _Reserved_)
+#define __clr_reserved _SAL1_Source_(__reserved, (), _Reserved_)
#define __checkReturn _SAL1_Source_(__checkReturn, (), _Check_return_)
#define __typefix(ctype) _SAL1_Source_(__typefix, (ctype), __inner_typefix(ctype))
#define __override __inner_override
diff --git a/src/pal/inc/rt/specstrings_strict.h b/src/pal/inc/rt/specstrings_strict.h
index 514106eedf..08d323c589 100644
--- a/src/pal/inc/rt/specstrings_strict.h
+++ b/src/pal/inc/rt/specstrings_strict.h
@@ -626,7 +626,7 @@
#define __in_awcount(expr,size) __allowed(on_parameter)
#define __nullterminated _SAL_VERSION_CHECK(__nullterminated)
#define __nullnullterminated _SAL_VERSION_CHECK(__nullnullterminated)
-#define __reserved _SAL_VERSION_CHECK(__reserved)
+#define __clr_reserved _SAL_VERSION_CHECK(__reserved)
#define __checkReturn _SAL_VERSION_CHECK(__checkReturn)
#define __typefix(ctype) __allowed(on_parameter_or_return)
#define __override __allowed(on_function)
diff --git a/src/pal/inc/rt/specstrings_undef.h b/src/pal/inc/rt/specstrings_undef.h
index b462dc2e25..69fc01c15d 100644
--- a/src/pal/inc/rt/specstrings_undef.h
+++ b/src/pal/inc/rt/specstrings_undef.h
@@ -445,7 +445,7 @@
#undef __readableTo
#undef __readonly
#undef __refparam
-#undef __reserved
+#undef __clr_reserved
#undef __rpc_entry
#undef __source_code_content
#undef __struct_bcount
diff --git a/src/pal/inc/rt/vsassert.h b/src/pal/inc/rt/vsassert.h
index 1f16cf1be7..2a7fa5fd92 100644
--- a/src/pal/inc/rt/vsassert.h
+++ b/src/pal/inc/rt/vsassert.h
@@ -11,10 +11,6 @@
#ifndef __VSASSERT_H__
#define __VSASSERT_H__
-#ifndef FEATURE_PAL
-#error "FEATURE_PAL must be defined for this file"
-#else // FEATURE_PAL
-
#define VSASSERT(e, szMsg) \
do { \
if (!(e)) { \
@@ -94,5 +90,4 @@ do { \
#define VsIgnoreAllocs(f)
-#endif // FEATURE_PAL
#endif // __VSASSERT_H__
diff --git a/src/pal/inc/strsafe.h b/src/pal/inc/strsafe.h
index 58749f27ee..f32f5e6549 100644
--- a/src/pal/inc/strsafe.h
+++ b/src/pal/inc/strsafe.h
@@ -24,14 +24,6 @@
#pragma once
#endif
-#if defined(PLATFORM_UNIX) && !defined (FEATURE_PAL)
-#define _NATIVE_WCHAR_T_DEFINED
-#endif // defined(PLATFORM_UNIX) && !defined (FEATURE_PAL)
-
-#if defined(PLATFORM_UNIX) && !defined (FEATURE_PAL)
-#define _vsnprintf vsnprintf
-#endif // defined(PLATFORM_UNIX) && !defined (FEATURE_PAL)
-
#include <stdio.h> // for _vsnprintf, getc, getwc
#include <string.h> // for memset
#include <stdarg.h> // for va_start, etc.
@@ -51,13 +43,6 @@ typedef char16_t WCHAR;
#define _WCHAR_T_DEFINED
#endif
-#ifndef FEATURE_PAL
-#ifndef _HRESULT_DEFINED
-#define _HRESULT_DEFINED
-typedef LONG HRESULT;
-#endif // !_HRESULT_DEFINED
-#endif // !FEATURE_PAL
-
#ifndef SUCCEEDED
#define SUCCEEDED(hr) ((HRESULT)(hr) >= 0)
#endif
@@ -150,14 +135,6 @@ STRSAFEAPI StringLengthWorkerA(const char* psz, size_t cchMax, size_t* pcch);
STRSAFEAPI StringLengthWorkerW(const WCHAR* psz, size_t cchMax, size_t* pcch);
#endif // STRSAFE_INLINE
-#ifndef STRSAFE_LIB_IMPL
-#ifndef FEATURE_PAL
-// these functions are always inline
-STRSAFE_INLINE_API StringGetsExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, char** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags);
-STRSAFE_INLINE_API StringGetsExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags);
-#endif // !FEATURE_PAL
-#endif
-
#ifndef STRSAFE_NO_CCH_FUNCTIONS
/*++
@@ -247,7 +224,6 @@ STRSAFEAPI StringCchCopyA(char* pszDest, size_t cchDest, const char* pszSrc)
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCchCopyW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc)
{
HRESULT hr;
@@ -263,7 +239,6 @@ STRSAFEAPI StringCchCopyW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc)
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CCH_FUNCTIONS
@@ -361,7 +336,6 @@ STRSAFEAPI StringCbCopyA(char* pszDest, size_t cbDest, const char* pszSrc)
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCbCopyW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc)
{
HRESULT hr;
@@ -381,7 +355,6 @@ STRSAFEAPI StringCbCopyW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc)
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CB_FUNCTIONS
@@ -506,7 +479,6 @@ STRSAFEAPI StringCchCopyExA(char* pszDest, size_t cchDest, const char* pszSrc, c
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCchCopyExW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
HRESULT hr;
@@ -527,7 +499,6 @@ STRSAFEAPI StringCchCopyExW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc,
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CCH_FUNCTIONS
@@ -660,7 +631,6 @@ STRSAFEAPI StringCbCopyExA(char* pszDest, size_t cbDest, const char* pszSrc, cha
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCbCopyExW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, WCHAR** ppszDestEnd, size_t* pcbRemaining, unsigned long dwFlags)
{
HRESULT hr;
@@ -689,7 +659,6 @@ STRSAFEAPI StringCbCopyExW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, W
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CB_FUNCTIONS
@@ -784,7 +753,6 @@ STRSAFEAPI StringCchCopyNA(char* pszDest, size_t cchDest, const char* pszSrc, si
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCchCopyNW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc, size_t cchSrc)
{
HRESULT hr;
@@ -801,7 +769,6 @@ STRSAFEAPI StringCchCopyNW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc,
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CCH_FUNCTIONS
@@ -902,7 +869,6 @@ STRSAFEAPI StringCbCopyNA(char* pszDest, size_t cbDest, const char* pszSrc, size
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCbCopyNW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, size_t cbSrc)
{
HRESULT hr;
@@ -925,7 +891,6 @@ STRSAFEAPI StringCbCopyNW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, si
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CB_FUNCTIONS
@@ -1060,7 +1025,6 @@ STRSAFEAPI StringCchCopyNExA(char* pszDest, size_t cchDest, const char* pszSrc,
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCchCopyNExW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc, size_t cchSrc, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
HRESULT hr;
@@ -1082,7 +1046,6 @@ STRSAFEAPI StringCchCopyNExW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CCH_FUNCTIONS
@@ -1226,7 +1189,6 @@ STRSAFEAPI StringCbCopyNExA(char* pszDest, size_t cbDest, const char* pszSrc, si
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCbCopyNExW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, size_t cbSrc, WCHAR** ppszDestEnd, size_t* pcbRemaining, unsigned long dwFlags)
{
HRESULT hr;
@@ -1258,7 +1220,6 @@ STRSAFEAPI StringCbCopyNExW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc,
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CB_FUNCTIONS
@@ -1345,7 +1306,6 @@ STRSAFEAPI StringCchCatA(char* pszDest, size_t cchDest, const char* pszSrc)
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCchCatW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc)
{
HRESULT hr;
@@ -1361,7 +1321,6 @@ STRSAFEAPI StringCchCatW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc)
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CCH_FUNCTIONS
@@ -1451,7 +1410,6 @@ STRSAFEAPI StringCbCatA(char* pszDest, size_t cbDest, const char* pszSrc)
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCbCatW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc)
{
HRESULT hr;
@@ -1470,7 +1428,6 @@ STRSAFEAPI StringCbCatW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc)
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CB_FUNCTIONS
@@ -1598,7 +1555,6 @@ STRSAFEAPI StringCchCatExA(char* pszDest, size_t cchDest, const char* pszSrc, ch
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCchCatExW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
HRESULT hr;
@@ -1619,7 +1575,6 @@ STRSAFEAPI StringCchCatExW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc,
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CCH_FUNCTIONS
@@ -1755,7 +1710,6 @@ STRSAFEAPI StringCbCatExA(char* pszDest, size_t cbDest, const char* pszSrc, char
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCbCatExW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, WCHAR** ppszDestEnd, size_t* pcbRemaining, unsigned long dwFlags)
{
HRESULT hr;
@@ -1784,7 +1738,6 @@ STRSAFEAPI StringCbCatExW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, WC
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CB_FUNCTIONS
@@ -1877,7 +1830,6 @@ STRSAFEAPI StringCchCatNA(char* pszDest, size_t cchDest, const char* pszSrc, siz
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCchCatNW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc, size_t cchMaxAppend)
{
HRESULT hr;
@@ -1893,7 +1845,6 @@ STRSAFEAPI StringCchCatNW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc, s
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CCH_FUNCTIONS
@@ -1993,7 +1944,6 @@ STRSAFEAPI StringCbCatNA(char* pszDest, size_t cbDest, const char* pszSrc, size_
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCbCatNW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, size_t cbMaxAppend)
{
HRESULT hr;
@@ -2016,7 +1966,6 @@ STRSAFEAPI StringCbCatNW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, siz
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CB_FUNCTIONS
@@ -2147,7 +2096,6 @@ STRSAFEAPI StringCchCatNExA(char* pszDest, size_t cchDest, const char* pszSrc, s
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCchCatNExW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc, size_t cchMaxAppend, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
HRESULT hr;
@@ -2168,7 +2116,6 @@ STRSAFEAPI StringCchCatNExW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc,
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CCH_FUNCTIONS
@@ -2311,7 +2258,6 @@ STRSAFEAPI StringCbCatNExA(char* pszDest, size_t cbDest, const char* pszSrc, siz
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCbCatNExW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, size_t cbMaxAppend, WCHAR** ppszDestEnd, size_t* pcbRemaining, unsigned long dwFlags)
{
HRESULT hr;
@@ -2344,7 +2290,6 @@ STRSAFEAPI StringCbCatNExW(WCHAR* pszDest, size_t cbDest, const WCHAR* pszSrc, s
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CB_FUNCTIONS
@@ -2403,62 +2348,7 @@ Return Value:
--*/
-#ifndef FEATURE_PAL
-#ifndef STRSAFE_LIB_IMPL
-STRSAFE_INLINE_API StringCchGetsA(char* pszDest, size_t cchDest);
-STRSAFE_INLINE_API StringCchGetsW(WCHAR* pszDest, size_t cchDest);
-#ifdef UNICODE
-#define StringCchGets StringCchGetsW
-#else
-#define StringCchGets StringCchGetsA
-#endif // !UNICODE
-
-STRSAFE_INLINE_API StringCchGetsA(char* pszDest, size_t cchDest)
-{
- HRESULT hr;
-
- if (cchDest > STRSAFE_MAX_CCH)
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- size_t cbDest;
-
- // safe to multiply cchDest * sizeof(char) since cchDest < STRSAFE_MAX_CCH and sizeof(char) is 1
- cbDest = cchDest * sizeof(char);
-
- hr = StringGetsExWorkerA(pszDest, cchDest, cbDest, NULL, NULL, 0);
- }
-
- return hr;
-}
-
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
-STRSAFE_INLINE_API StringCchGetsW(WCHAR* pszDest, size_t cchDest)
-{
- HRESULT hr;
-
- if (cchDest > STRSAFE_MAX_CCH)
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- size_t cbDest;
-
- // safe to multiply cchDest * sizeof(WCHAR) since cchDest < STRSAFE_MAX_CCH and sizeof(WCHAR) is 2
- cbDest = cchDest * sizeof(WCHAR);
-
- hr = StringGetsExWorkerW(pszDest, cchDest, cbDest, NULL, NULL, 0);
- }
-
- return hr;
-}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // !STRSAFE_NO_CCH_FUNCTIONS
-#endif // !STRSAFE_LIB_IMPL
-#endif // !FEATURE_PAL
#ifndef STRSAFE_NO_CB_FUNCTIONS
/*++
@@ -2514,60 +2404,7 @@ Return Value:
--*/
-#ifndef FEATURE_PAL
-#ifndef STRSAFE_LIB_IMPL
-STRSAFE_INLINE_API StringCbGetsA(char* pszDest, size_t cbDest);
-STRSAFE_INLINE_API StringCbGetsW(WCHAR* pszDest, size_t cbDest);
-#ifdef UNICODE
-#define StringCbGets StringCbGetsW
-#else
-#define StringCbGets StringCbGetsA
-#endif // !UNICODE
-
-STRSAFE_INLINE_API StringCbGetsA(char* pszDest, size_t cbDest)
-{
- HRESULT hr;
- size_t cchDest;
-
- // convert to count of characters
- cchDest = cbDest / sizeof(char);
-
- if (cchDest > STRSAFE_MAX_CCH)
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- hr = StringGetsExWorkerA(pszDest, cchDest, cbDest, NULL, NULL, 0);
- }
-
- return hr;
-}
-
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
-STRSAFE_INLINE_API StringCbGetsW(WCHAR* pszDest, size_t cbDest)
-{
- HRESULT hr;
- size_t cchDest;
-
- // convert to count of characters
- cchDest = cbDest / sizeof(WCHAR);
-
- if (cchDest > STRSAFE_MAX_CCH)
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- hr = StringGetsExWorkerW(pszDest, cchDest, cbDest, NULL, NULL, 0);
- }
-
- return hr;
-}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // !STRSAFE_NO_CB_FUNCTIONS
-#endif // !STRSAFE_LIB_IMPL
-#endif // !FEATURE_PAL
#ifndef STRSAFE_NO_CCH_FUNCTIONS
/*++
@@ -2650,62 +2487,7 @@ Return Value:
--*/
-#ifndef FEATURE_PAL
-#ifndef STRSAFE_LIB_IMPL
-STRSAFE_INLINE_API StringCchGetsExA(char* pszDest, size_t cchDest, char** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags);
-STRSAFE_INLINE_API StringCchGetsExW(WCHAR* pszDest, size_t cchDest, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags);
-#ifdef UNICODE
-#define StringCchGetsEx StringCchGetsExW
-#else
-#define StringCchGetsEx StringCchGetsExA
-#endif // !UNICODE
-
-STRSAFE_INLINE_API StringCchGetsExA(char* pszDest, size_t cchDest, char** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
-{
- HRESULT hr;
-
- if (cchDest > STRSAFE_MAX_CCH)
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- size_t cbDest;
-
- // safe to multiply cchDest * sizeof(char) since cchDest < STRSAFE_MAX_CCH and sizeof(char) is 1
- cbDest = cchDest * sizeof(char);
-
- hr = StringGetsExWorkerA(pszDest, cchDest, cbDest, ppszDestEnd, pcchRemaining, dwFlags);
- }
-
- return hr;
-}
-
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
-STRSAFE_INLINE_API StringCchGetsExW(WCHAR* pszDest, size_t cchDest, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
-{
- HRESULT hr;
-
- if (cchDest > STRSAFE_MAX_CCH)
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- size_t cbDest;
-
- // safe to multiply cchDest * sizeof(WCHAR) since cchDest < STRSAFE_MAX_CCH and sizeof(WCHAR) is 2
- cbDest = cchDest * sizeof(WCHAR);
-
- hr = StringGetsExWorkerW(pszDest, cchDest, cbDest, ppszDestEnd, pcchRemaining, dwFlags);
- }
-
- return hr;
-}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // !STRSAFE_NO_CCH_FUNCTIONS
-#endif // !STRSAFE_LIB_IMPL
-#endif // !FEATURE_PAL
#ifndef STRSAFE_NO_CB_FUNCTIONS
/*++
@@ -2788,82 +2570,7 @@ Return Value:
--*/
-#ifndef FEATURE_PAL
-#ifndef STRSAFE_LIB_IMPL
-STRSAFE_INLINE_API StringCbGetsExA(char* pszDest, size_t cbDest, char** ppszDestEnd, size_t* pbRemaining, unsigned long dwFlags);
-STRSAFE_INLINE_API StringCbGetsExW(WCHAR* pszDest, size_t cbDest, WCHAR** ppszDestEnd, size_t* pcbRemaining, unsigned long dwFlags);
-#ifdef UNICODE
-#define StringCbGetsEx StringCbGetsExW
-#else
-#define StringCbGetsEx StringCbGetsExA
-#endif // !UNICODE
-
-STRSAFE_INLINE_API StringCbGetsExA(char* pszDest, size_t cbDest, char** ppszDestEnd, size_t* pcbRemaining, unsigned long dwFlags)
-{
- HRESULT hr;
- size_t cchDest;
- size_t cchRemaining = 0;
-
- cchDest = cbDest / sizeof(char);
-
- if (cchDest > STRSAFE_MAX_CCH)
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- hr = StringGetsExWorkerA(pszDest, cchDest, cbDest, ppszDestEnd, &cchRemaining, dwFlags);
- }
-
- if (SUCCEEDED(hr) ||
- (hr == STRSAFE_E_INSUFFICIENT_BUFFER) ||
- (hr == STRSAFE_E_END_OF_FILE))
- {
- if (pcbRemaining)
- {
- // safe to multiply cchRemaining * sizeof(char) since cchRemaining < STRSAFE_MAX_CCH and sizeof(char) is 1
- *pcbRemaining = (cchRemaining * sizeof(char)) + (cbDest % sizeof(char));
- }
- }
-
- return hr;
-}
-
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
-STRSAFE_INLINE_API StringCbGetsExW(WCHAR* pszDest, size_t cbDest, WCHAR** ppszDestEnd, size_t* pcbRemaining, unsigned long dwFlags)
-{
- HRESULT hr;
- size_t cchDest;
- size_t cchRemaining = 0;
-
- cchDest = cbDest / sizeof(WCHAR);
-
- if (cchDest > STRSAFE_MAX_CCH)
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- hr = StringGetsExWorkerW(pszDest, cchDest, cbDest, ppszDestEnd, &cchRemaining, dwFlags);
- }
-
- if (SUCCEEDED(hr) ||
- (hr == STRSAFE_E_INSUFFICIENT_BUFFER) ||
- (hr == STRSAFE_E_END_OF_FILE))
- {
- if (pcbRemaining)
- {
- // safe to multiply cchRemaining * sizeof(WCHAR) since cchRemaining < STRSAFE_MAX_CCH and sizeof(WCHAR) is 2
- *pcbRemaining = (cchRemaining * sizeof(WCHAR)) + (cbDest % sizeof(WCHAR));
- }
- }
-
- return hr;
-}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // !STRSAFE_NO_CB_FUNCTIONS
-#endif // !STRSAFE_LIB_IMPL
-#endif // !FEATURE_PAL
#ifndef STRSAFE_NO_CCH_FUNCTIONS
/*++
@@ -2937,7 +2644,6 @@ STRSAFEAPI StringCchLengthA(const char* psz, size_t cchMax, size_t* pcch)
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCchLengthW(const WCHAR* psz, size_t cchMax, size_t* pcch)
{
HRESULT hr;
@@ -2953,7 +2659,6 @@ STRSAFEAPI StringCchLengthW(const WCHAR* psz, size_t cchMax, size_t* pcch)
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CCH_FUNCTIONS
@@ -3040,7 +2745,6 @@ STRSAFEAPI StringCbLengthA(const char* psz, size_t cbMax, size_t* pcb)
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCbLengthW(const WCHAR* psz, size_t cbMax, size_t* pcb)
{
HRESULT hr;
@@ -3066,7 +2770,6 @@ STRSAFEAPI StringCbLengthW(const WCHAR* psz, size_t cbMax, size_t* pcb)
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
#endif // !STRSAFE_NO_CB_FUNCTIONS
@@ -3103,7 +2806,6 @@ STRSAFEAPI StringCopyWorkerA(char* pszDest, size_t cchDest, const char* pszSrc)
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCopyWorkerW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc)
{
HRESULT hr = S_OK;
@@ -3133,7 +2835,6 @@ STRSAFEAPI StringCopyWorkerW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
STRSAFEAPI StringCopyExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, const char* pszSrc, char** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
@@ -3273,7 +2974,6 @@ STRSAFEAPI StringCopyExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, con
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCopyExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, const WCHAR* pszSrc, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
HRESULT hr = S_OK;
@@ -3411,7 +3111,6 @@ STRSAFEAPI StringCopyExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, co
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
STRSAFEAPI StringCopyNWorkerA(char* pszDest, size_t cchDest, const char* pszSrc, size_t cchSrc)
{
@@ -3444,7 +3143,6 @@ STRSAFEAPI StringCopyNWorkerA(char* pszDest, size_t cchDest, const char* pszSrc,
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCopyNWorkerW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc, size_t cchSrc)
{
HRESULT hr = S_OK;
@@ -3475,7 +3173,6 @@ STRSAFEAPI StringCopyNWorkerW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSr
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
STRSAFEAPI StringCopyNExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, const char* pszSrc, size_t cchSrc, char** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
@@ -3616,7 +3313,6 @@ STRSAFEAPI StringCopyNExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, co
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCopyNExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, const WCHAR* pszSrc, size_t cchSrc, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
HRESULT hr = S_OK;
@@ -3755,7 +3451,6 @@ STRSAFEAPI StringCopyNExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, c
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
STRSAFEAPI StringCatWorkerA(char* pszDest, size_t cchDest, const char* pszSrc)
{
@@ -3774,7 +3469,6 @@ STRSAFEAPI StringCatWorkerA(char* pszDest, size_t cchDest, const char* pszSrc)
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCatWorkerW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc)
{
HRESULT hr;
@@ -3791,7 +3485,6 @@ STRSAFEAPI StringCatWorkerW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc)
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
STRSAFEAPI StringCatExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, const char* pszSrc, char** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
@@ -3940,7 +3633,6 @@ STRSAFEAPI StringCatExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, cons
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCatExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, const WCHAR* pszSrc, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
HRESULT hr = S_OK;
@@ -4086,7 +3778,6 @@ STRSAFEAPI StringCatExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, con
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
STRSAFEAPI StringCatNWorkerA(char* pszDest, size_t cchDest, const char* pszSrc, size_t cchMaxAppend)
{
@@ -4106,7 +3797,6 @@ STRSAFEAPI StringCatNWorkerA(char* pszDest, size_t cchDest, const char* pszSrc,
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCatNWorkerW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc, size_t cchMaxAppend)
{
HRESULT hr;
@@ -4124,7 +3814,6 @@ STRSAFEAPI StringCatNWorkerW(WCHAR* pszDest, size_t cchDest, const WCHAR* pszSrc
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
STRSAFEAPI StringCatNExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, const char* pszSrc, size_t cchMaxAppend, char** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
@@ -4272,7 +3961,6 @@ STRSAFEAPI StringCatNExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, con
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringCatNExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, const WCHAR* pszSrc, size_t cchMaxAppend, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
{
HRESULT hr = S_OK;
@@ -4419,7 +4107,6 @@ STRSAFEAPI StringCatNExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, co
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
STRSAFEAPI StringLengthWorkerA(const char* psz, size_t cchMax, size_t* pcch)
{
@@ -4446,7 +4133,6 @@ STRSAFEAPI StringLengthWorkerA(const char* psz, size_t cchMax, size_t* pcch)
return hr;
}
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
STRSAFEAPI StringLengthWorkerW(const WCHAR* psz, size_t cchMax, size_t* pcch)
{
HRESULT hr = S_OK;
@@ -4471,285 +4157,6 @@ STRSAFEAPI StringLengthWorkerW(const WCHAR* psz, size_t cchMax, size_t* pcch)
return hr;
}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
#endif // STRSAFE_INLINE
-#ifndef STRSAFE_LIB_IMPL
-#ifndef FEATURE_PAL
-STRSAFE_INLINE_API StringGetsExWorkerA(char* pszDest, size_t cchDest, size_t cbDest, char** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
-{
- HRESULT hr = S_OK;
- char* pszDestEnd = pszDest;
- size_t cchRemaining = 0;
-
- // ASSERT(cbDest == (cchDest * sizeof(char)) ||
- // cbDest == (cchDest * sizeof(char)) + (cbDest % sizeof(char)));
-
- // only accept valid flags
- if (dwFlags & (~STRSAFE_VALID_FLAGS))
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- if (dwFlags & STRSAFE_IGNORE_NULLS)
- {
- if (pszDest == NULL)
- {
- if ((cchDest != 0) || (cbDest != 0))
- {
- // NULL pszDest and non-zero cchDest/cbDest is invalid
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- }
- }
-
- if (SUCCEEDED(hr))
- {
- if (cchDest <= 1)
- {
- pszDestEnd = pszDest;
- cchRemaining = cchDest;
-
- if (cchDest == 1)
- {
- *pszDestEnd = '\0';
- }
-
- hr = STRSAFE_E_INSUFFICIENT_BUFFER;
- }
- else
- {
- char ch;
-
- pszDestEnd = pszDest;
- cchRemaining = cchDest;
-
- while ((cchRemaining > 1) && (ch = (char)getc(stdin)) != '\n')
- {
- if (ch == EOF)
- {
- if (pszDestEnd == pszDest)
- {
- // we failed to read anything from stdin
- hr = STRSAFE_E_END_OF_FILE;
- }
- break;
- }
-
- *pszDestEnd = ch;
-
- pszDestEnd++;
- cchRemaining--;
- }
-
- if (cchRemaining > 0)
- {
- // there is extra room
- if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
- {
- memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(char)) + (cbDest % sizeof(char)));
- }
- }
-
- *pszDestEnd = '\0';
- }
- }
- }
-
- if (FAILED(hr))
- {
- if (pszDest)
- {
- if (dwFlags & STRSAFE_FILL_ON_FAILURE)
- {
- memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-
- if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
- {
- pszDestEnd = pszDest;
- cchRemaining = cchDest;
- }
- else if (cchDest > 0)
- {
- pszDestEnd = pszDest + cchDest - 1;
- cchRemaining = 1;
-
- // null terminate the end of the string
- *pszDestEnd = '\0';
- }
- }
-
- if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
- {
- if (cchDest > 0)
- {
- pszDestEnd = pszDest;
- cchRemaining = cchDest;
-
- // null terminate the beginning of the string
- *pszDestEnd = '\0';
- }
- }
- }
- }
-
- if (SUCCEEDED(hr) ||
- (hr == STRSAFE_E_INSUFFICIENT_BUFFER) ||
- (hr == STRSAFE_E_END_OF_FILE))
- {
- if (ppszDestEnd)
- {
- *ppszDestEnd = pszDestEnd;
- }
-
- if (pcchRemaining)
- {
- *pcchRemaining = cchRemaining;
- }
- }
-
- return hr;
-}
-
-#if defined(FEATURE_PAL) || !defined(PLATFORM_UNIX)
-STRSAFE_INLINE_API StringGetsExWorkerW(WCHAR* pszDest, size_t cchDest, size_t cbDest, WCHAR** ppszDestEnd, size_t* pcchRemaining, unsigned long dwFlags)
-{
- HRESULT hr = S_OK;
- WCHAR* pszDestEnd = pszDest;
- size_t cchRemaining = 0;
-
- // ASSERT(cbDest == (cchDest * sizeof(char)) ||
- // cbDest == (cchDest * sizeof(char)) + (cbDest % sizeof(char)));
-
- // only accept valid flags
- if (dwFlags & (~STRSAFE_VALID_FLAGS))
- {
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- else
- {
- if (dwFlags & STRSAFE_IGNORE_NULLS)
- {
- if (pszDest == NULL)
- {
- if ((cchDest != 0) || (cbDest != 0))
- {
- // NULL pszDest and non-zero cchDest/cbDest is invalid
- hr = STRSAFE_E_INVALID_PARAMETER;
- }
- }
- }
-
- if (SUCCEEDED(hr))
- {
- if (cchDest <= 1)
- {
- pszDestEnd = pszDest;
- cchRemaining = cchDest;
-
- if (cchDest == 1)
- {
- *pszDestEnd = L'\0';
- }
-
- hr = STRSAFE_E_INSUFFICIENT_BUFFER;
- }
- else
- {
- WCHAR ch;
-
- pszDestEnd = pszDest;
- cchRemaining = cchDest;
-
- while ((cchRemaining > 1) && (ch = (WCHAR)getwc(stdin)) != L'\n')
- {
- if (ch == EOF)
- {
- if (pszDestEnd == pszDest)
- {
- // we failed to read anything from stdin
- hr = STRSAFE_E_END_OF_FILE;
- }
- break;
- }
-
- *pszDestEnd = ch;
-
- pszDestEnd++;
- cchRemaining--;
- }
-
- if (cchRemaining > 0)
- {
- // there is extra room
- if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
- {
- memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(WCHAR)) + (cbDest % sizeof(WCHAR)));
- }
- }
-
- *pszDestEnd = L'\0';
- }
- }
- }
-
- if (FAILED(hr))
- {
- if (pszDest)
- {
- if (dwFlags & STRSAFE_FILL_ON_FAILURE)
- {
- memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-
- if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
- {
- pszDestEnd = pszDest;
- cchRemaining = cchDest;
- }
- else if (cchDest > 0)
- {
- pszDestEnd = pszDest + cchDest - 1;
- cchRemaining = 1;
-
- // null terminate the end of the string
- *pszDestEnd = L'\0';
- }
- }
-
- if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
- {
- if (cchDest > 0)
- {
- pszDestEnd = pszDest;
- cchRemaining = cchDest;
-
- // null terminate the beginning of the string
- *pszDestEnd = L'\0';
- }
- }
- }
- }
-
- if (SUCCEEDED(hr) ||
- (hr == STRSAFE_E_INSUFFICIENT_BUFFER) ||
- (hr == STRSAFE_E_END_OF_FILE))
- {
- if (ppszDestEnd)
- {
- *ppszDestEnd = pszDestEnd;
- }
-
- if (pcchRemaining)
- {
- *pcchRemaining = cchRemaining;
- }
- }
-
- return hr;
-}
-#endif // FEATURE_PAL || !PLATFORM_UNIX
-#endif // !FEATURE_PAL
-#endif // !STRSAFE_LIB_IMPL
-
#endif // _STRSAFE_H_INCLUDED_
diff --git a/src/pal/inc/unixasmmacrosarm64.inc b/src/pal/inc/unixasmmacrosarm64.inc
index 60142053b0..359f27f878 100644
--- a/src/pal/inc/unixasmmacrosarm64.inc
+++ b/src/pal/inc/unixasmmacrosarm64.inc
@@ -37,7 +37,8 @@ C_FUNC(\Name\()_End):
.endm
.macro PREPARE_EXTERNAL_VAR Name, HelperReg
- ldr \HelperReg, [pc, #C_FUNC(\Name)@GOTPCREL]
+ adrp \HelperReg, \Name
+ add \HelperReg, \HelperReg, :lo12:\Name
.endm
.macro PROLOG_STACK_ALLOC Size
diff --git a/src/pal/src/CMakeLists.txt b/src/pal/src/CMakeLists.txt
index 28ee83a77c..16c9d8bd6f 100644
--- a/src/pal/src/CMakeLists.txt
+++ b/src/pal/src/CMakeLists.txt
@@ -23,20 +23,37 @@ include_directories(include)
# Compile options
-if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64)
- set(PAL_CMAKE_PLATFORM_ARCH_AMD64 1)
- add_definitions(-D_AMD64_)
-elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l)
- set(PAL_CMAKE_PLATFORM_ARCH_ARM 1)
- add_definitions(-D_ARM_)
-elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
- set(PAL_CMAKE_PLATFORM_ARCH_ARM64 1)
- add_definitions(-D_ARM64_)
-elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686)
- set(CLR_CMAKE_PLATFORM_ARCH_I386 1)
- add_definitions(-D_X86_)
+if(CLR_CROSS_COMPONENTS_BUILD)
+ if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL amd64)
+ if(CLR_CMAKE_TARGET_ARCH STREQUAL "arm")
+ set(PAL_CMAKE_PLATFORM_ARCH_I386 1)
+ add_definitions(-D_X86_)
+ else()
+ set(PAL_CMAKE_PLATFORM_ARCH_AMD64 1)
+ add_definitions(-D_AMD64_)
+ endif()
+ elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL i686)
+ set(PAL_CMAKE_PLATFORM_ARCH_I386 1)
+ add_definitions(-D_X86_)
+ else()
+ message(FATAL_ERROR "Only AMD64, I386 host for cross-architecture component is supported")
+ endif()
else()
- message(FATAL_ERROR "Only ARM and AMD64 is supported")
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64)
+ set(PAL_CMAKE_PLATFORM_ARCH_AMD64 1)
+ add_definitions(-D_AMD64_)
+ elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l)
+ set(PAL_CMAKE_PLATFORM_ARCH_ARM 1)
+ add_definitions(-D_ARM_)
+ elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
+ set(PAL_CMAKE_PLATFORM_ARCH_ARM64 1)
+ add_definitions(-D_ARM64_)
+ elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686)
+ set(PAL_CMAKE_PLATFORM_ARCH_I386 1)
+ add_definitions(-D_X86_)
+ else()
+ message(FATAL_ERROR "Only ARM, AMD64, ARM64 and I386 is supported")
+ endif()
endif()
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
@@ -65,7 +82,7 @@ elseif(PAL_CMAKE_PLATFORM_ARCH_ARM)
elseif(PAL_CMAKE_PLATFORM_ARCH_ARM64)
add_definitions(-DBIT64=1)
add_definitions(-D_WIN64=1)
-elseif(CLR_CMAKE_PLATFORM_ARCH_I386)
+elseif(PAL_CMAKE_PLATFORM_ARCH_I386)
add_definitions(-DBIT32=1)
endif()
@@ -105,7 +122,7 @@ elseif(PAL_CMAKE_PLATFORM_ARCH_ARM64)
arch/arm64/exceptionhelper.S
arch/arm64/processor.cpp
)
-elseif(CLR_CMAKE_PLATFORM_ARCH_I386)
+elseif(PAL_CMAKE_PLATFORM_ARCH_I386)
set(ARCH_SOURCES
arch/i386/context2.S
arch/i386/debugbreak.S
@@ -264,31 +281,73 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux)
find_library(UNWIND_ARCH NAMES unwind-arm)
endif()
+ if(PAL_CMAKE_PLATFORM_ARCH_ARM64)
+ find_library(UNWIND_ARCH NAMES unwind-aarch64)
+ endif()
+
if(PAL_CMAKE_PLATFORM_ARCH_AMD64)
find_library(UNWIND_ARCH NAMES unwind-x86_64)
endif()
- if(CLR_CMAKE_PLATFORM_ALPINE_LINUX)
+ if(CLR_CMAKE_PLATFORM_ALPINE_LINUX OR CLR_CMAKE_PLATFORM_ANDROID)
find_library(INTL intl)
endif()
- find_library(UNWIND NAMES unwind)
+ # On Android, we don't need to link with gcc_s, pthread and rt
+ if(NOT CLR_CMAKE_PLATFORM_ANDROID)
+ target_link_libraries(coreclrpal
+ gcc_s
+ pthread
+ rt
+ )
+ endif()
+
+ if(CLR_CMAKE_PLATFORM_ANDROID)
+ target_link_libraries(coreclrpal
+ gnustl_shared
+ android-support
+ android-glob)
+ endif()
+
+ if(NOT CLR_CMAKE_PLATFORM_ANDROID)
+ find_library(UNWIND NAMES unwind)
+
+ if(UNWIND STREQUAL UNWIND-NOTFOUND)
+ message(FATAL_ERROR "Cannot find libunwind. Try installing libunwind8-dev and libunwind8.")
+ endif(UNWIND STREQUAL UNWIND-NOTFOUND)
+
+ target_link_libraries(coreclrpal ${UNWIND})
+ endif()
+
+ if(CLR_MAKE_PLATFORM_ANDROID)
+ find_library(ANDROID_SUPPORT NAMES android-support)
+ find_library(ANDROID_GLOB NAMES android-glob)
+ find_library(INTL NAMES intl)
+
+ if(UNWIND_ARCH STREQUAL UNWIND_ARCH-NOTFOUND)
+ message(FATAL_ERROR "Cannot find libunwind.")
+ endif()
+
+ if(ANDROID_SUPPORT STREQUAL ANDROID_SUPPORT-NOTFOUND)
+ message(FATAL_ERROR "Cannot find android-support.")
+ endif()
+
+ if(ANDROID_GLOB STREQUAL ANDROID_GLOB-NOTFOUND)
+ message(FATAL_ERROR "Cannot find android-glob.")
+ endif()
+
+ if(INTL STREQUAL INTL-NOTFOUND)
+ message(FATAL_ERROR "Cannot find libintl.")
+ endif()
+ endif()
+
find_library(UNWIND_GENERIC NAMES unwind-generic)
target_link_libraries(coreclrpal
- gcc_s
- pthread
- rt
dl
uuid
)
- if(UNWIND STREQUAL UNWIND-NOTFOUND)
- message(FATAL_ERROR "Cannot find libunwind. Try installing libunwind8-dev and libunwind8.")
- endif(UNWIND STREQUAL UNWIND-NOTFOUND)
-
- target_link_libraries(coreclrpal ${UNWIND})
-
if(NOT UNWIND_GENERIC STREQUAL UNWIND_GENERIC-NOTFOUND)
target_link_libraries(coreclrpal ${UNWIND_GENERIC})
endif(NOT UNWIND_GENERIC STREQUAL UNWIND_GENERIC-NOTFOUND)
diff --git a/src/pal/src/arch/amd64/processor.cpp b/src/pal/src/arch/amd64/processor.cpp
index ac3d448a81..298d685c98 100644
--- a/src/pal/src/arch/amd64/processor.cpp
+++ b/src/pal/src/arch/amd64/processor.cpp
@@ -54,10 +54,18 @@ Return value:
extern "C" unsigned int XmmYmmStateSupport()
{
unsigned int eax;
- __asm(" xgetbv\n" \
- : "=a"(eax) /*output in eax*/\
- : "c"(0) /*inputs - 0 in ecx*/\
- : "eax", "edx" /* registers that are clobbered*/
+ __asm(" mov $1, %%eax\n" \
+ " cpuid\n" \
+ " xor %%eax, %%eax\n" \
+ " and $0x18000000, %%ecx\n" /* check for xsave feature set and that it is enabled by the OS */ \
+ " cmp $0x18000000, %%ecx\n" \
+ " jne end\n" \
+ " xor %%ecx, %%ecx\n" \
+ " xgetbv\n" \
+ "end:\n" \
+ : "=a"(eax) /* output in eax */ \
+ : /* no inputs */ \
+ : "eax", "ebx", "ecx", "edx" /* registers that are clobbered */
);
// Check OS has enabled both XMM and YMM state support
return ((eax & 0x06) == 0x06) ? 1 : 0;
diff --git a/src/pal/src/arch/i386/context2.S b/src/pal/src/arch/i386/context2.S
index 16cbcc855c..11aba5e647 100644
--- a/src/pal/src/arch/i386/context2.S
+++ b/src/pal/src/arch/i386/context2.S
@@ -113,39 +113,22 @@ LOCAL_LABEL(Done_Restore_CONTEXT_FLOATING_POINT):
movdqu xmm7, [eax + CONTEXT_Xmm7]
LOCAL_LABEL(Done_Restore_CONTEXT_EXTENDED_REGISTERS):
- // Restore CONTROL register(s)
- mov ecx, [eax + CONTEXT_Eip]
- mov [esp], ecx
-
- mov ecx, [eax + CONTEXT_Esp]
- push ecx
- mov ecx, [eax + CONTEXT_Ebp]
- push ecx
-
- pop ebp
- pop esp
-
- // Restore INTEGER register(s)
- mov ecx, [eax + CONTEXT_Edi]
- push ecx
- mov ecx, [eax + CONTEXT_Esi]
- push ecx
- mov ecx, [eax + CONTEXT_Edx]
- push ecx
- mov ecx, [eax + CONTEXT_Ecx]
- push ecx
- mov ecx, [eax + CONTEXT_Ebx]
- push ecx
- mov ecx, [eax + CONTEXT_Eax]
- push ecx
+ // Restore Stack
+ mov esp, [eax + CONTEXT_Esp]
- pop eax
- pop ebx
- pop ecx
- pop edx
- pop esi
- pop edi
+ // Create a minimal frame
+ push DWORD PTR [eax + CONTEXT_Eip]
+
+ // Restore register(s)
+ mov ebp, [eax + CONTEXT_Ebp]
+ mov edi, [eax + CONTEXT_Edi]
+ mov esi, [eax + CONTEXT_Esi]
+ mov edx, [eax + CONTEXT_Edx]
+ mov ecx, [eax + CONTEXT_Ecx]
+ mov ebx, [eax + CONTEXT_Ebx]
+ mov eax, [eax + CONTEXT_Eax]
- ret 8
+ // Resume
+ ret
LEAF_END RtlRestoreContext, _TEXT
diff --git a/src/pal/src/config.h.in b/src/pal/src/config.h.in
index 4d21fb70e4..77d7bfaf5a 100644
--- a/src/pal/src/config.h.in
+++ b/src/pal/src/config.h.in
@@ -51,6 +51,7 @@
#cmakedefine01 HAVE_MACH_EXCEPTIONS
#cmakedefine01 HAVE_VM_ALLOCATE
#cmakedefine01 HAVE_VM_READ
+#cmakedefine01 HAVE_SEMAPHORE_H
#cmakedefine01 HAS_SYSV_SEMAPHORES
#cmakedefine01 HAS_PTHREAD_MUTEXES
#cmakedefine01 HAVE_TTRACE
diff --git a/src/pal/src/configure.cmake b/src/pal/src/configure.cmake
index a53e0db51e..4f2bc5739b 100644
--- a/src/pal/src/configure.cmake
+++ b/src/pal/src/configure.cmake
@@ -33,6 +33,7 @@ check_include_files(sys/lwp.h HAVE_SYS_LWP_H)
check_include_files(lwp.h HAVE_LWP_H)
check_include_files(libunwind.h HAVE_LIBUNWIND_H)
check_include_files(runetype.h HAVE_RUNETYPE_H)
+check_include_files(semaphore.h HAVE_SEMAPHORE_H)
if(NOT CMAKE_SYSTEM_NAME STREQUAL FreeBSD AND NOT CMAKE_SYSTEM_NAME STREQUAL NetBSD)
set(CMAKE_REQUIRED_FLAGS "-ldl")
@@ -48,15 +49,26 @@ check_include_files(gnu/lib-names.h HAVE_GNU_LIBNAMES_H)
check_function_exists(kqueue HAVE_KQUEUE)
check_function_exists(getpwuid_r HAVE_GETPWUID_R)
-check_library_exists(pthread pthread_suspend "" HAVE_PTHREAD_SUSPEND)
-check_library_exists(pthread pthread_suspend_np "" HAVE_PTHREAD_SUSPEND_NP)
-check_library_exists(pthread pthread_continue "" HAVE_PTHREAD_CONTINUE)
-check_library_exists(pthread pthread_continue_np "" HAVE_PTHREAD_CONTINUE_NP)
-check_library_exists(pthread pthread_resume_np "" HAVE_PTHREAD_RESUME_NP)
-check_library_exists(pthread pthread_attr_get_np "" HAVE_PTHREAD_ATTR_GET_NP)
-check_library_exists(pthread pthread_getattr_np "" HAVE_PTHREAD_GETATTR_NP)
-check_library_exists(pthread pthread_getcpuclockid "" HAVE_PTHREAD_GETCPUCLOCKID)
-check_library_exists(pthread pthread_sigqueue "" HAVE_PTHREAD_SIGQUEUE)
+
+check_library_exists(pthread pthread_create "" HAVE_LIBPTHREAD)
+check_library_exists(c pthread_create "" HAVE_PTHREAD_IN_LIBC)
+
+if (HAVE_LIBPTHREAD)
+ set(PTHREAD_LIBRARY pthread)
+elseif (HAVE_PTHREAD_IN_LIBC)
+ set(PTHREAD_LIBRARY c)
+endif()
+
+check_library_exists(${PTHREAD_LIBRARY} pthread_suspend "" HAVE_PTHREAD_SUSPEND)
+check_library_exists(${PTHREAD_LIBRARY} pthread_suspend_np "" HAVE_PTHREAD_SUSPEND_NP)
+check_library_exists(${PTHREAD_LIBRARY} pthread_continue "" HAVE_PTHREAD_CONTINUE)
+check_library_exists(${PTHREAD_LIBRARY} pthread_continue_np "" HAVE_PTHREAD_CONTINUE_NP)
+check_library_exists(${PTHREAD_LIBRARY} pthread_resume_np "" HAVE_PTHREAD_RESUME_NP)
+check_library_exists(${PTHREAD_LIBRARY} pthread_attr_get_np "" HAVE_PTHREAD_ATTR_GET_NP)
+check_library_exists(${PTHREAD_LIBRARY} pthread_getattr_np "" HAVE_PTHREAD_GETATTR_NP)
+check_library_exists(${PTHREAD_LIBRARY} pthread_getcpuclockid "" HAVE_PTHREAD_GETCPUCLOCKID)
+check_library_exists(${PTHREAD_LIBRARY} pthread_sigqueue "" HAVE_PTHREAD_SIGQUEUE)
+
check_function_exists(sigreturn HAVE_SIGRETURN)
check_function_exists(_thread_sys_sigreturn HAVE__THREAD_SYS_SIGRETURN)
set(CMAKE_REQUIRED_LIBRARIES m)
@@ -874,7 +886,8 @@ int main(void)
unlink(szFileName);
exit(ret);
}" UNGETC_NOT_RETURN_EOF)
-set(CMAKE_REQUIRED_LIBRARIES pthread)
+
+set(CMAKE_REQUIRED_LIBRARIES ${PTHREAD_LIBRARY})
check_cxx_source_runs("
#include <stdlib.h>
#include <errno.h>
diff --git a/src/pal/src/cruntime/file.cpp b/src/pal/src/cruntime/file.cpp
index 5fe2b671f3..0eb2cea151 100644
--- a/src/pal/src/cruntime/file.cpp
+++ b/src/pal/src/cruntime/file.cpp
@@ -196,45 +196,6 @@ static BOOL WriteOnlyMode(FILE* pFile)
/*++
Function:
- _getw
-
-Gets an integer from a stream.
-
-Return Value
-
-_getw returns the integer value read. A return value of EOF indicates
-either an error or end of file. However, because the EOF value is also
-a legitimate integer value, use feof or ferror to verify an
-end-of-file or error condition.
-
-Parameter
-
-file Pointer to FILE structure
-
---*/
-int
-__cdecl
-_getw(PAL_FILE *f)
-{
- INT ret = 0;
-
- PERF_ENTRY(_getw);
- ENTRY("_getw (f=%p)\n", f);
-
- _ASSERTE(f != NULL);
-
- CLEARERR(f);
-
- ret = getw( f->bsdFilePtr );
- LOGEXIT( "returning %d\n", ret );
- PERF_EXIT(_getw);
-
- return ret;
-}
-
-
-/*++
-Function:
_fdopen
see MSDN
@@ -448,45 +409,6 @@ _wfsopen(
}
/*++
-Function:
- _putw
-
-Writes an integer to a stream.
-
-Return Value
-
-_putw returns the value written. A return value of EOF may indicate an
-error. Because EOF is also a legitimate integer value, use ferror to
-verify an error.
-
-Parameters
-
-c Binary integer to be output
-file Pointer to FILE structure
-
---*/
-int
-__cdecl
-_putw(int c, PAL_FILE *f)
-{
- INT ret = 0;
-
- PERF_ENTRY(_putw);
- ENTRY("_putw (c=0x%x, f=%p)\n", c, f);
-
- _ASSERTE(f != NULL);
-
- CLEARERR(f);
-
- ret = putw(c, f->bsdFilePtr );
- LOGEXIT( "returning %d\n", ret );
- PERF_EXIT(_putw);
-
- return ret;
-}
-
-
-/*++
Function
PAL_get_stdout.
diff --git a/src/pal/src/cruntime/math.cpp b/src/pal/src/cruntime/math.cpp
index 08f4192998..d53dbe7982 100644
--- a/src/pal/src/cruntime/math.cpp
+++ b/src/pal/src/cruntime/math.cpp
@@ -66,11 +66,7 @@ int __cdecl _finite(double x)
PERF_ENTRY(_finite);
ENTRY("_finite (x=%f)\n", x);
-#if defined(_IA64_) && defined (_HPUX_)
- ret = !isnan(x) && (x != PAL_POSINF_DBL) && (x != PAL_NEGINF_DBL);
-#else
ret = isfinite(x);
-#endif
LOGEXIT("_finite returns int %d\n", ret);
PERF_EXIT(_finite);
@@ -452,11 +448,7 @@ int __cdecl _finitef(float x)
PERF_ENTRY(_finitef);
ENTRY("_finitef (x=%f)\n", x);
-#if defined(_IA64_) && defined (_HPUX_)
- ret = !isnan(x) && (x != PAL_POSINF_FLT) && (x != PAL_NEGINF_FLT);
-#else
ret = isfinite(x);
-#endif
LOGEXIT("_finitef returns int %d\n", ret);
PERF_EXIT(_finitef);
diff --git a/src/pal/src/cruntime/printf.cpp b/src/pal/src/cruntime/printf.cpp
index c437b8e39f..72c7e11bea 100644
--- a/src/pal/src/cruntime/printf.cpp
+++ b/src/pal/src/cruntime/printf.cpp
@@ -1365,34 +1365,6 @@ int PAL_wvsscanf(LPCWSTR Buffer, LPCWSTR Format, va_list ap)
/*++
Function:
- PAL_swprintf
-
-See MSDN doc.
---*/
-int
-__cdecl
-PAL_swprintf(
- wchar_16 *buffer,
- const wchar_16 *format,
- ...)
-{
- LONG Length;
- va_list ap;
-
- PERF_ENTRY(swprintf);
- ENTRY("PAL_swprintf (buffer=%p, format=%p (%S))\n", buffer, format, format);
-
- va_start(ap, format);
- Length = PAL__wvsnprintf(buffer, 0x7fffffff, format, ap);
- va_end(ap);
-
- LOGEXIT("PAL_swprintf returns int %d\n", Length);
- PERF_EXIT(swprintf);
- return Length;
-}
-
-/*++
-Function:
PAL_swscanf
See MSDN doc.
@@ -1420,60 +1392,6 @@ PAL_swscanf(
}
-/*++
-Function:
- PAL_vsprintf
-
-See MSDN doc.
---*/
-int
-__cdecl
-PAL_vsprintf(char *buffer,
- const char *format,
- va_list argptr)
-{
- LONG Length;
-
- PERF_ENTRY(vsprintf);
- ENTRY("PAL_vsprintf (buffer=%p, format=%p (%s), argptr=%p)\n",
- buffer, format, format, argptr);
-
- Length = InternalVsnprintf(CorUnix::InternalGetCurrentThread(), buffer, 0x7fffffff, format, argptr);
-
- LOGEXIT("PAL_vsprintf returns int %d\n", Length);
- PERF_EXIT(vsprintf);
-
- return Length;
-}
-
-
-/*++
-Function:
- PAL_vswprintf
-
-See MSDN doc.
---*/
-int
-__cdecl
-PAL_vswprintf(wchar_16 *buffer,
- const wchar_16 *format,
- va_list argptr)
-{
- LONG Length;
-
- PERF_ENTRY(vswprintf);
- ENTRY("PAL_vswprintf (buffer=%p, format=%p (%S), argptr=%p)\n",
- buffer, format, format, argptr);
-
- Length = PAL__wvsnprintf(buffer, 0x7fffffff, format, argptr);
-
- LOGEXIT("PAL_vswprintf returns int %d\n", Length);
- PERF_EXIT(vswprintf);
-
- return Length;
-}
-
-
#if SSCANF_CANNOT_HANDLE_MISSING_EXPONENT
/*++
Function:
diff --git a/src/pal/src/cruntime/printfcpp.cpp b/src/pal/src/cruntime/printfcpp.cpp
index ea074a604b..0b9072102b 100644
--- a/src/pal/src/cruntime/printfcpp.cpp
+++ b/src/pal/src/cruntime/printfcpp.cpp
@@ -35,8 +35,9 @@ SET_DEFAULT_DEBUG_CHANNEL(CRT);
using namespace CorUnix;
-int CoreWvsnprintf(CPalThread *pthrCurrent, LPWSTR Buffer, size_t Count, LPCWSTR Format, va_list ap);
-int CoreVsnprintf(CPalThread *pthrCurrent, LPSTR Buffer, size_t Count, LPCSTR Format, va_list ap);
+static const char __nullstring[] = "(null)"; /* string to print on null ptr */
+static const WCHAR __wnullstring[] = W("(null)"); /* string to print on null ptr */
+
int CoreVfprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const char *format, va_list ap);
int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *format, va_list ap);
@@ -865,7 +866,7 @@ Parameters:
- padding style flags (PRINTF_FORMAT_FLAGS)
*******************************************************************************/
-INT Internal_AddPaddingVfprintf(CPalThread *pthrCurrent, PAL_FILE *stream, LPSTR In,
+INT Internal_AddPaddingVfprintf(CPalThread *pthrCurrent, PAL_FILE *stream, LPCSTR In,
INT Padding, INT Flags)
{
LPSTR Out;
@@ -1053,49 +1054,6 @@ static INT Internal_AddPaddingVfwprintf(CPalThread *pthrCurrent, PAL_FILE *strea
/*******************************************************************************
Function:
- PAL_vsnprintf
-
-Parameters:
- Buffer
- - out buffer
- Count
- - buffer size
- Format
- - format string
- ap
- - stdarg parameter list
-*******************************************************************************/
-
-int __cdecl PAL__vsnprintf(LPSTR Buffer, size_t Count, LPCSTR Format, va_list ap)
-{
- LONG Length;
-
- PERF_ENTRY(PAL__vsnprintf);
- ENTRY("PAL__vsnprintf (buffer=%p, count=%d, format=%p (%s), argptr=%p)\n",
- Buffer, Count, Format, Format, ap);
-
- Length = CoreVsnprintf(InternalGetCurrentThread(), Buffer, Count, Format, ap);
-
- LOGEXIT("PAL__vsnprintf returns int %d\n", Length);
- PERF_EXIT(PAL__vsnprintf);
-
- return Length;
-}
-
-/*******************************************************************************
-Function:
- PAL_wvsnprintf
-
- -- see PAL_vsnprintf above
-*******************************************************************************/
-
-int __cdecl PAL__wvsnprintf(LPWSTR Buffer, size_t Count, LPCWSTR Format, va_list ap)
-{
- return CoreWvsnprintf(InternalGetCurrentThread(), Buffer, Count, Format, ap);
-}
-
-/*******************************************************************************
-Function:
PAL_vfprintf
Parameters:
@@ -1132,31 +1090,17 @@ int __cdecl PAL_vfwprintf(PAL_FILE *stream, const wchar_16 *format, va_list ap)
} // end extern "C"
-int CorUnix::InternalWvsnprintf(CPalThread *pthrCurrent, LPWSTR Buffer, size_t Count, LPCWSTR Format, va_list ap)
-{
- return CoreWvsnprintf(pthrCurrent, Buffer, Count, Format, ap);
-}
-
-int CorUnix::InternalVsnprintf(CPalThread *pthrCurrent, LPSTR Buffer, size_t Count, LPCSTR Format, va_list ap)
-{
- return CoreVsnprintf(pthrCurrent, Buffer, Count, Format, ap);
-}
-
int CorUnix::InternalVfprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const char *format, va_list ap)
{
return CoreVfprintf(pthrCurrent, stream, format, ap);
}
-int CorUnix::InternalVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *format, va_list ap)
-{
- return CoreVfwprintf(pthrCurrent, stream, format, ap);
-}
-
int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *format, va_list aparg)
{
CHAR TempBuff[1024]; /* used to hold a single %<foo> format string */
LPCWSTR Fmt = format;
- LPWSTR TempWStr = NULL;
+ LPCWSTR TempWStr = NULL;
+ LPWSTR AllocedTempWStr = NULL;
LPWSTR WorkingWStr = NULL;
WCHAR TempWChar[2];
INT Flags;
@@ -1165,7 +1109,6 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
INT Prefix;
INT Type;
INT TempInt;
- BOOL WStrWasMalloced = FALSE;
int mbtowcResult;
int written=0;
int paddingReturnValue;
@@ -1193,7 +1136,7 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
(Type == PFF_TYPE_STRING || Type == PFF_TYPE_WSTRING)) ||
(Type == PFF_TYPE_WSTRING && (Flags & PFF_ZERO) != 0))
{
- WStrWasMalloced = FALSE;
+ AllocedTempWStr = NULL;
if (WIDTH_STAR == Width)
{
@@ -1222,37 +1165,50 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
else
{
/* %lS assumes a LPSTR argument. */
- LPSTR s = va_arg(ap, LPSTR );
- UINT Length = 0;
- Length = MultiByteToWideChar( CP_ACP, 0, s, -1, NULL, 0 );
- if ( Length != 0 )
+ LPCSTR s = va_arg(ap, LPSTR );
+ if (s == NULL)
+ {
+ TempWStr = NULL;
+ }
+ else
{
- TempWStr =
- (LPWSTR)InternalMalloc( (Length) * sizeof( WCHAR ) );
- if ( TempWStr )
+ UINT Length = 0;
+ Length = MultiByteToWideChar( CP_ACP, 0, s, -1, NULL, 0 );
+ if ( Length != 0 )
{
- WStrWasMalloced = TRUE;
- MultiByteToWideChar( CP_ACP, 0, s, -1,
- TempWStr, Length );
+ AllocedTempWStr =
+ (LPWSTR)InternalMalloc( (Length) * sizeof( WCHAR ) );
+
+ if ( AllocedTempWStr )
+ {
+ MultiByteToWideChar( CP_ACP, 0, s, -1,
+ AllocedTempWStr, Length );
+ TempWStr = AllocedTempWStr;
+ }
+ else
+ {
+ ERROR( "InternalMalloc failed.\n" );
+ LOGEXIT("vfwprintf returns int -1\n");
+ PERF_EXIT(vfwprintf);
+ va_end(ap);
+ return -1;
+ }
}
else
{
- ERROR( "InternalMalloc failed.\n" );
+ ASSERT( "Unable to convert from multibyte "
+ " to wide char.\n" );
LOGEXIT("vfwprintf returns int -1\n");
PERF_EXIT(vfwprintf);
va_end(ap);
return -1;
}
}
- else
- {
- ASSERT( "Unable to convert from multibyte "
- " to wide char.\n" );
- LOGEXIT("vfwprintf returns int -1\n");
- PERF_EXIT(vfwprintf);
- va_end(ap);
- return -1;
- }
+ }
+
+ if (TempWStr == NULL)
+ {
+ TempWStr = __wnullstring;
}
INT Length = PAL_wcslen(TempWStr);
@@ -1263,10 +1219,7 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
LOGEXIT("vfwprintf returns int -1\n");
PERF_EXIT(vfwprintf);
pthrCurrent->SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- if (WStrWasMalloced)
- {
- free(TempWStr);
- }
+ free(AllocedTempWStr);
va_end(ap);
return -1;
}
@@ -1281,10 +1234,7 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
if (wcsncpy_s(WorkingWStr, (Length + 1), TempWStr, Precision+1) != SAFECRT_SUCCESS)
{
ERROR("Internal_AddPaddingVfwprintf failed\n");
- if (WStrWasMalloced)
- {
- free(TempWStr);
- }
+ free(AllocedTempWStr);
free(WorkingWStr);
LOGEXIT("wcsncpy_s failed!\n");
PERF_EXIT(vfwprintf);
@@ -1310,10 +1260,7 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
if (paddingReturnValue == -1)
{
ERROR("Internal_AddPaddingVfwprintf failed\n");
- if (WStrWasMalloced)
- {
- free(TempWStr);
- }
+ free(AllocedTempWStr);
free(WorkingWStr);
LOGEXIT("vfwprintf returns int -1\n");
PERF_EXIT(vfwprintf);
@@ -1323,10 +1270,7 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
written += paddingReturnValue;
free(WorkingWStr);
- if (WStrWasMalloced)
- {
- free(TempWStr);
- }
+ free(AllocedTempWStr);
}
else if (Prefix == PFF_PREFIX_LONG && Type == PFF_TYPE_CHAR)
{
@@ -1466,7 +1410,7 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
va_list apcopy;
va_copy(apcopy, ap);
- TempInt = vsnprintf(TempSprintfStr, TEMP_COUNT, TempBuff, apcopy);
+ TempInt = _vsnprintf_s(TempSprintfStr, TEMP_COUNT, _TRUNCATE, TempBuff, apcopy);
va_end(apcopy);
PAL_printf_arg_remover(&ap, Width, Precision, Type, Prefix);
@@ -1484,7 +1428,7 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
TempSprintfStr = TempSprintfStrPtr;
va_copy(apcopy, ap);
- vsnprintf(TempSprintfStr, TempInt, TempBuff, apcopy);
+ _vsnprintf_s(TempSprintfStr, TempInt, _TRUNCATE, TempBuff, apcopy);
va_end(apcopy);
PAL_printf_arg_remover(&ap, Width, Precision, Type, Prefix);
}
@@ -1581,669 +1525,11 @@ int CoreVfwprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const wchar_16 *for
return (written);
}
-int CoreVsnprintf(CPalThread *pthrCurrent, LPSTR Buffer, size_t Count, LPCSTR Format, va_list aparg)
-{
- BOOL BufferRanOut = FALSE;
- CHAR TempBuff[1024]; /* used to hold a single %<foo> format string */
- LPSTR BufferPtr = Buffer;
- LPCSTR Fmt = Format;
- LPWSTR TempWStr;
- LPSTR TempStr;
- WCHAR TempWChar;
- INT Flags;
- INT Width;
- INT Precision;
- INT Prefix;
- INT Type;
- INT Length;
- INT TempInt;
- int wctombResult;
- va_list ap;
-
- va_copy(ap, aparg);
-
- while (*Fmt)
- {
- if (BufferRanOut || (BufferPtr - Buffer) >= static_cast<int>(Count)) //Count is assumed to be in the range of int
- {
- BufferRanOut = TRUE;
- break;
- }
- else if(*Fmt == '%' &&
- TRUE == Internal_ExtractFormatA(pthrCurrent, &Fmt, TempBuff, &Flags,
- &Width, &Precision,
- &Prefix, &Type))
- {
- if (Prefix == PFF_PREFIX_LONG && Type == PFF_TYPE_STRING)
- {
- if (WIDTH_STAR == Width)
- {
- Width = va_arg(ap, INT);
- }
- else if (WIDTH_INVALID == Width)
- {
- /* both a '*' and a number, ignore, but remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- if (PRECISION_STAR == Precision)
- {
- Precision = va_arg(ap, INT);
- }
- else if (PRECISION_INVALID == Precision)
- {
- /* both a '*' and a number, ignore, but remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- TempWStr = va_arg(ap, LPWSTR);
- Length = WideCharToMultiByte(CP_ACP, 0, TempWStr, -1, 0,
- 0, 0, 0);
- if (!Length)
- {
- ASSERT("WideCharToMultiByte failed. Error is %d\n",
- GetLastError());
- va_end(ap);
- return -1;
- }
- TempStr = (LPSTR) InternalMalloc(Length);
- if (!TempStr)
- {
- ERROR("InternalMalloc failed\n");
- pthrCurrent->SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- va_end(ap);
- return -1;
- }
- if (PRECISION_DOT == Precision)
- {
- /* copy nothing */
- *TempStr = 0;
- Length = 0;
- }
- else if (Precision > 0 && Precision < Length - 1)
- {
- Length = WideCharToMultiByte(CP_ACP, 0, TempWStr,
- Precision, TempStr, Length,
- 0, 0);
- if (!Length)
- {
- ASSERT("WideCharToMultiByte failed. Error is %d\n",
- GetLastError());
- free(TempStr);
- va_end(ap);
- return -1;
- }
- TempStr[Length] = 0;
- Length = Precision;
- }
- /* copy everything */
- else
- {
- wctombResult = WideCharToMultiByte(CP_ACP, 0, TempWStr, -1,
- TempStr, Length, 0, 0);
- if (!wctombResult)
- {
- ASSERT("WideCharToMultiByte failed. Error is %d\n",
- GetLastError());
- free(TempStr);
- va_end(ap);
- return -1;
- }
- --Length; /* exclude null char */
- }
-
- /* do the padding (if needed)*/
- BufferRanOut = !Internal_AddPaddingA(&BufferPtr,
- Count - (BufferPtr - Buffer),
- TempStr,
- Width - Length,
- Flags);
-
- free(TempStr);
- }
- else if (Prefix == PFF_PREFIX_LONG && Type == PFF_TYPE_CHAR)
- {
- CHAR TempBuffer[5];
-
- if (WIDTH_STAR == Width ||
- WIDTH_INVALID == Width)
- {
- /* ignore (because it's a char), and remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
- if (PRECISION_STAR == Precision ||
- PRECISION_INVALID == Precision)
- {
- /* ignore (because it's a char), and remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- TempWChar = va_arg(ap, int);
- Length = WideCharToMultiByte(CP_ACP, 0, &TempWChar, 1,
- TempBuffer, sizeof(TempBuffer),
- 0, 0);
- if (!Length)
- {
- ASSERT("WideCharToMultiByte failed. Error is %d\n",
- GetLastError());
- va_end(ap);
- return -1;
- }
- TempBuffer[Length] = 0;
-
- /* do the padding (if needed)*/
- BufferRanOut = !Internal_AddPaddingA(&BufferPtr,
- Count - (BufferPtr - Buffer),
- TempBuffer,
- Width - Length,
- Flags);
-
- }
- /* this places the number of bytes written to the buffer in the
- next arg */
- else if (Type == PFF_TYPE_N)
- {
- if (WIDTH_STAR == Width)
- {
- Width = va_arg(ap, INT);
- }
- if (PRECISION_STAR == Precision)
- {
- Precision = va_arg(ap, INT);
- }
-
- if (Prefix == PFF_PREFIX_SHORT)
- {
- *(va_arg(ap, short *)) = BufferPtr - Buffer;
- }
- else
- {
- *(va_arg(ap, LPLONG)) = BufferPtr - Buffer;
- }
- }
- else if (Type == PFF_TYPE_CHAR && (Flags & PFF_ZERO) != 0)
- {
- // Some versions of sprintf don't support 0-padded chars,
- // so we handle them here.
- char ch[2];
-
- ch[0] = (char) va_arg(ap, int);
- ch[1] = '\0';
- Length = 1;
- BufferRanOut = !Internal_AddPaddingA(&BufferPtr,
- Count - (BufferPtr - Buffer),
- ch,
- Width - Length,
- Flags);
- }
- else if (Type == PFF_TYPE_STRING && (Flags & PFF_ZERO) != 0)
- {
- // Some versions of sprintf don't support 0-padded strings,
- // so we handle them here.
- char *tempStr;
-
- tempStr = va_arg(ap, char *);
- Length = strlen(tempStr);
- BufferRanOut = !Internal_AddPaddingA(&BufferPtr,
- Count - (BufferPtr - Buffer),
- tempStr,
- Width - Length,
- Flags);
- }
- else
- {
- // Types that sprintf can handle
- size_t TempCount = Count - (BufferPtr - Buffer);
-
-#if !HAVE_LARGE_SNPRINTF_SUPPORT
- // Limit TempCount to 0x40000000, which is sufficient
- // for platforms on which snprintf fails for very large
- // sizes.
- if (TempCount > 0x40000000)
- {
- TempCount = 0x40000000;
- }
-#endif // HAVE_LARGE_SNPRINTF_SUPPORT
-
- TempInt = 0;
- // %h (short) doesn't seem to be handled properly by local sprintf,
- // so we do the truncation ourselves for some cases.
- if (Type == PFF_TYPE_P && Prefix == PFF_PREFIX_SHORT)
- {
- // Convert from pointer -> int -> short to avoid warnings.
- long trunc1;
- short trunc2;
-
- trunc1 = va_arg(ap, LONG);
- trunc2 = (short) trunc1;
- trunc1 = trunc2;
-
- TempInt = snprintf(BufferPtr, TempCount, TempBuff, trunc1);
- }
- else if (Type == PFF_TYPE_INT && Prefix == PFF_PREFIX_SHORT)
- {
- // Convert explicitly from int to short to get
- // correct sign extension for shorts on all systems.
- int n;
- short s;
-
- n = va_arg(ap, int);
- s = (short) n;
-
- TempInt = snprintf(BufferPtr, TempCount, TempBuff, s);
- }
- else
- {
- va_list apcopy;
- va_copy(apcopy, ap);
- TempInt = vsnprintf(BufferPtr, TempCount, TempBuff, apcopy);
- va_end(apcopy);
- PAL_printf_arg_remover(&ap, Width, Precision, Type, Prefix);
- }
-
- if (TempInt < 0 || static_cast<size_t>(TempInt) >= TempCount) /* buffer not long enough */
- {
- BufferPtr += TempCount;
- BufferRanOut = TRUE;
- }
- else
- {
- BufferPtr += TempInt;
- }
- }
- }
- else
- {
- *BufferPtr++ = *Fmt++; /* copy regular chars into buffer */
- }
- }
-
- if (static_cast<int>(Count) > (BufferPtr - Buffer)) //Count is assumed to be in the range of int
- {
- *BufferPtr = 0; /* end the string */
- }
-
- va_end(ap);
-
- if (BufferRanOut)
- {
- errno = ERANGE;
- return -1;
- }
- else
- {
- return BufferPtr - Buffer;
- }
-}
-
-int CoreWvsnprintf(CPalThread *pthrCurrent, LPWSTR Buffer, size_t Count, LPCWSTR Format, va_list aparg)
-{
- BOOL BufferRanOut = FALSE;
- CHAR TempBuff[1024]; /* used to hold a single %<foo> format string */
- LPWSTR BufferPtr = Buffer;
- LPCWSTR Fmt = Format;
- LPWSTR TempWStr = NULL;
- LPWSTR WorkingWStr = NULL;
- WCHAR TempWChar[2];
- INT Flags;
- INT Width;
- INT Precision;
- INT Prefix;
- INT Type;
- INT TempInt;
- LPSTR TempNumberBuffer;
- int mbtowcResult;
- va_list(ap);
-
- PERF_ENTRY(wvsnprintf);
- ENTRY("wvsnprintf (buffer=%p, count=%u, format=%p (%S))\n",
- Buffer, Count, Format, Format);
-
- va_copy(ap, aparg);
-
- while (*Fmt)
- {
- if (BufferRanOut || (BufferPtr - Buffer) >= static_cast<int>(Count)) //Count is assumed to be in the range of int
- {
- BufferRanOut = TRUE;
- break;
- }
- else if(*Fmt == '%' &&
- TRUE == Internal_ExtractFormatW(pthrCurrent, &Fmt, TempBuff, &Flags,
- &Width, &Precision,
- &Prefix, &Type))
- {
- if (((Prefix == PFF_PREFIX_LONG || Prefix == PFF_PREFIX_LONG_W) &&
- (Type == PFF_TYPE_STRING || Type == PFF_TYPE_WSTRING)) ||
- (Prefix == PFF_PREFIX_SHORT && Type == PFF_TYPE_STRING) ||
- (Type == PFF_TYPE_WSTRING && (Flags & PFF_ZERO) != 0))
- {
- BOOL needToFree = FALSE;
-
- if (WIDTH_STAR == Width)
- {
- Width = va_arg(ap, INT);
- }
- else if (WIDTH_INVALID == Width)
- {
- /* both a '*' and a number, ignore, but remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- if (PRECISION_STAR == Precision)
- {
- Precision = va_arg(ap, INT);
- }
- else if (PRECISION_INVALID == Precision)
- {
- /* both a '*' and a number, ignore, but remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- if ((Type == PFF_TYPE_STRING && Prefix == PFF_PREFIX_LONG) ||
- Prefix == PFF_PREFIX_LONG_W)
- {
- TempWStr = va_arg(ap, LPWSTR);
- }
- else
- {
- // %lS and %hs assume an LPSTR argument.
- LPSTR s = va_arg(ap, LPSTR );
- UINT Length = 0;
- Length = MultiByteToWideChar( CP_ACP, 0, s, -1, NULL, 0 );
- if ( Length != 0 )
- {
- TempWStr =
- (LPWSTR)InternalMalloc((Length + 1 ) * sizeof( WCHAR ) );
- if ( TempWStr )
- {
- needToFree = TRUE;
- MultiByteToWideChar( CP_ACP, 0, s, -1,
- TempWStr, Length );
- }
- else
- {
- ERROR( "InternalMalloc failed.\n" );
- va_end(ap);
- return -1;
- }
- }
- else
- {
- ASSERT( "Unable to convert from multibyte "
- " to wide char.\n" );
- va_end(ap);
- return -1;
- }
-
- }
-
- INT Length = PAL_wcslen(TempWStr);
- WorkingWStr = (LPWSTR) InternalMalloc(sizeof(WCHAR) * (Length + 1));
- if (!WorkingWStr)
- {
- ERROR("InternalMalloc failed\n");
- pthrCurrent->SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- if (needToFree)
- {
- free(TempWStr);
- }
- va_end(ap);
- return -1;
- }
- if (PRECISION_DOT == Precision)
- {
- // Copy nothing
- *WorkingWStr = 0;
- Length = 0;
- }
- else if (Precision > 0 && Precision < Length)
- {
- if (wcsncpy_s(WorkingWStr, (Length + 1), TempWStr, Precision+1) != SAFECRT_SUCCESS)
- {
- ERROR("CoreWvsnprintf failed\n");
- if (needToFree)
- {
- free(TempWStr);
- }
- free(WorkingWStr);
- LOGEXIT("wcsncpy_s failed!\n");
- PERF_EXIT(wvsnprintf);
- va_end(ap);
- return (-1);
- }
-
- Length = Precision;
- }
- else
- {
- // Copy everything
- PAL_wcscpy(WorkingWStr, TempWStr);
- }
-
- // Add padding if needed.
- BufferRanOut = !Internal_AddPaddingW(&BufferPtr,
- Count - (BufferPtr - Buffer),
- WorkingWStr,
- Width - Length,
- Flags);
-
- if (needToFree)
- {
- free(TempWStr);
- }
- free(WorkingWStr);
- }
- else if (Prefix == PFF_PREFIX_LONG && Type == PFF_TYPE_CHAR)
- {
- if (WIDTH_STAR == Width ||
- WIDTH_INVALID == Width)
- {
- /* ignore (because it's a char), and remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- if (PRECISION_STAR == Precision ||
- PRECISION_INVALID == Precision)
- {
- /* ignore (because it's a char), and remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- TempWChar[0] = va_arg(ap, int);
- TempWChar[1] = 0;
-
- /* do the padding (if needed)*/
- BufferRanOut = !Internal_AddPaddingW(&BufferPtr,
- Count - (BufferPtr - Buffer),
- TempWChar,
- Width - 1,
- Flags);
-
- }
- /* this places the number of bytes written to the buffer in the
- next arg */
- else if (Type == PFF_TYPE_N)
- {
- if (WIDTH_STAR == Width)
- {
- Width = va_arg(ap, INT);
- }
- if (PRECISION_STAR == Precision)
- {
- Precision = va_arg(ap, INT);
- }
-
- if (Prefix == PFF_PREFIX_SHORT)
- {
- *(va_arg(ap, short *)) = BufferPtr - Buffer;
- }
- else
- {
- *(va_arg(ap, LPLONG)) = BufferPtr - Buffer;
- }
- }
- else
- {
- // Types that sprintf can handle
-
- /* note: I'm using the wide buffer as a (char *) buffer when I
- pass it to sprintf(). After I get the buffer back I make a
- backup of the chars copied and then convert them to wide
- and place them in the buffer (BufferPtr) */
- size_t TempCount = Count - (BufferPtr - Buffer);
- TempInt = 0;
-
-#if !HAVE_LARGE_SNPRINTF_SUPPORT
- // Limit TempCount to 0x40000000, which is sufficient
- // for platforms on which snprintf fails for very large
- // sizes.
- if (TempCount > 0x40000000)
- {
- TempCount = 0x40000000;
- }
-#endif // HAVE_LARGE_SNPRINTF_SUPPORT
-
- // %h (short) doesn't seem to be handled properly by local sprintf,
- // so we do the truncation ourselves for some cases.
- if (Type == PFF_TYPE_P && Prefix == PFF_PREFIX_SHORT)
- {
- // Convert from pointer -> int -> short to avoid warnings.
- long trunc1;
- short trunc2;
-
- trunc1 = va_arg(ap, LONG);
- trunc2 = (short)trunc1;
- trunc1 = trunc2;
-
- TempInt = snprintf((LPSTR)BufferPtr, TempCount, TempBuff, trunc1);
- }
- else if (Type == PFF_TYPE_INT && Prefix == PFF_PREFIX_SHORT)
- {
- // Convert explicitly from int to short to get
- // correct sign extension for shorts on all systems.
- int n;
- short s;
-
- n = va_arg(ap, int);
- s = (short) n;
-
- TempInt = snprintf((LPSTR)BufferPtr, TempCount, TempBuff, s);
- }
- else
- {
- va_list apcopy;
- va_copy(apcopy, ap);
- TempInt = vsnprintf((LPSTR) BufferPtr, TempCount, TempBuff, apcopy);
- va_end(apcopy);
- PAL_printf_arg_remover(&ap, Width, Precision, Type, Prefix);
- }
-
- if (TempInt == 0)
- {
- // The argument is "".
- continue;
- }
- if (TempInt < 0 || static_cast<size_t>(TempInt) >= TempCount) /* buffer not long enough */
- {
- TempNumberBuffer = (LPSTR) InternalMalloc(TempCount+1);
- if (!TempNumberBuffer)
- {
- ERROR("InternalMalloc failed\n");
- pthrCurrent->SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- errno = ENOMEM;
- va_end(ap);
- return -1;
- }
-
- if (strncpy_s(TempNumberBuffer, TempCount+1, (LPSTR) BufferPtr, TempCount) != SAFECRT_SUCCESS)
- {
- ASSERT("strncpy_s failed!\n");
- free(TempNumberBuffer);
- va_end(ap);
- return -1;
- }
-
- mbtowcResult = MultiByteToWideChar(CP_ACP, 0,
- TempNumberBuffer,
- TempCount,
- BufferPtr, TempCount);
- if (!mbtowcResult)
- {
- ASSERT("MultiByteToWideChar failed. Error is %d\n",
- GetLastError());
- free(TempNumberBuffer);
- va_end(ap);
- return -1;
- }
- BufferPtr += TempCount;
- BufferRanOut = TRUE;
- }
- else
- {
- TempNumberBuffer = (LPSTR) InternalMalloc(TempInt+1);
- if (!TempNumberBuffer)
- {
- ERROR("InternalMalloc failed\n");
- pthrCurrent->SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- va_end(ap);
- return -1;
- }
-
- if (strncpy_s(TempNumberBuffer, TempInt+1, (LPSTR) BufferPtr, TempInt) != SAFECRT_SUCCESS)
- {
- ASSERT("strncpy_s failed!\n");
- free(TempNumberBuffer);
- va_end(ap);
- return -1;
- }
-
- mbtowcResult = MultiByteToWideChar(CP_ACP, 0,
- TempNumberBuffer,
- TempInt,
- BufferPtr, TempInt);
- if (!mbtowcResult)
- {
- ASSERT("MultiByteToWideChar failed. Error is %d\n",
- GetLastError());
- free(TempNumberBuffer);
- va_end(ap);
- return -1;
- }
- BufferPtr += TempInt;
- }
- free(TempNumberBuffer);
- }
- }
- else
- {
- *BufferPtr++ = *Fmt++; /* copy regular chars into buffer */
- }
- }
-
- if (static_cast<int>(Count) > (BufferPtr - Buffer)) //Count is assumed to be in the range of int
- {
- *BufferPtr = 0; /* end the string */
- }
-
- va_end(ap);
-
- if (BufferRanOut)
- {
- errno = ERANGE;
- return -1;
- }
- else
- {
- return BufferPtr - Buffer;
- }
-}
-
int CoreVfprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const char *format, va_list aparg)
{
CHAR TempBuff[1024]; /* used to hold a single %<foo> format string */
LPCSTR Fmt = format;
- LPWSTR TempWStr;
+ LPCWSTR TempWStr;
LPSTR TempStr;
WCHAR TempWChar;
INT Flags;
@@ -2292,6 +1578,10 @@ int CoreVfprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const char *format,
}
TempWStr = va_arg(ap, LPWSTR);
+ if (TempWStr == NULL)\
+ {
+ TempWStr = __wnullstring;
+ }
Length = WideCharToMultiByte(CP_ACP, 0, TempWStr, -1, 0,
0, 0, 0);
if (!Length)
@@ -2461,9 +1751,13 @@ int CoreVfprintf(CPalThread *pthrCurrent, PAL_FILE *stream, const char *format,
{
// Some versions of fprintf don't support 0-padded strings,
// so we handle them here.
- char *tempStr;
+ const char *tempStr;
tempStr = va_arg(ap, char *);
+ if (tempStr == NULL)
+ {
+ tempStr = __nullstring;
+ }
Length = strlen(tempStr);
paddingReturnValue = Internal_AddPaddingVfprintf(
pthrCurrent,
diff --git a/src/pal/src/cruntime/silent_printf.cpp b/src/pal/src/cruntime/silent_printf.cpp
index 1d10963973..4047c7e199 100644
--- a/src/pal/src/cruntime/silent_printf.cpp
+++ b/src/pal/src/cruntime/silent_printf.cpp
@@ -40,286 +40,6 @@ static INT Silent_AddPaddingVfprintf(PAL_FILE *stream, LPSTR In, INT Padding,
static size_t Silent_PAL_wcslen(const wchar_16 *string);
-/*******************************************************************************
-Function:
- PAL_vsnprintf (silent version)
- for more details, see PAL_vsnprintf in printf.c
-*******************************************************************************/
-INT Silent_PAL_vsnprintf(LPSTR Buffer, INT Count, LPCSTR Format, va_list aparg)
-{
- BOOL BufferRanOut = FALSE;
- CHAR TempBuff[1024]; /* used to hold a single %<foo> format string */
- LPSTR BufferPtr = Buffer;
- LPCSTR Fmt = Format;
- LPWSTR TempWStr;
- CHAR TempStr[MAX_STR_LEN+1];
- WCHAR TempWChar;
- INT Flags;
- INT Width;
- INT Precision;
- INT Prefix;
- INT Type;
- INT Length;
- INT TempInt;
- int wctombResult;
- va_list ap;
-
- va_copy(ap, aparg);
-
- while (*Fmt)
- {
- if ((BufferPtr - Buffer) >= Count)
- {
- BufferRanOut = TRUE;
- break;
- }
- else if(*Fmt == '%' &&
- TRUE == Silent_ExtractFormatA(&Fmt, TempBuff, &Flags,
- &Width, &Precision,
- &Prefix, &Type))
- {
- if (Prefix == PFF_PREFIX_LONG && Type == PFF_TYPE_STRING)
- {
- if (WIDTH_STAR == Width)
- {
- Width = va_arg(ap, INT);
- }
- else if (WIDTH_INVALID == Width)
- {
- /* both a '*' and a number, ignore, but remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- if (PRECISION_STAR == Precision)
- {
- Precision = va_arg(ap, INT);
- }
- else if (PRECISION_INVALID == Precision)
- {
- /* both a '*' and a number, ignore, but remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- TempWStr = va_arg(ap, LPWSTR);
- Length = Silent_WideCharToMultiByte(TempWStr, -1, 0, 0);
- if (!Length)
- {
- va_end(ap);
- return -1;
- }
-
- /* clip string output to MAX_STR_LEN characters */
- if (PRECISION_DOT == Precision)
- {
- Precision = MAX_STR_LEN;
- }
-
- if (PRECISION_DOT == Precision)
- {
- /* copy nothing */
- *TempStr = 0;
- Length = 0;
- }
- else if (Precision > 0 && Precision < Length - 1)
- {
- Length = Silent_WideCharToMultiByte(TempWStr, Precision,
- TempStr, Length);
- if (!Length)
- {
- va_end(ap);
- return -1;
- }
- TempStr[Length] = 0;
- Length = Precision;
- }
- /* copy everything */
- else
- {
- wctombResult = Silent_WideCharToMultiByte(TempWStr, -1,
- TempStr, Length);
- if (!wctombResult)
- {
- PAL_free(TempStr);
- va_end(ap);
- return -1;
- }
- --Length; /* exclude null char */
- }
-
- /* do the padding (if needed)*/
- BufferRanOut = !Internal_AddPaddingA(&BufferPtr,
- Count - (BufferPtr - Buffer),
- TempStr,
- Width - Length,
- Flags);
- }
- else if (Prefix == PFF_PREFIX_LONG && Type == PFF_TYPE_CHAR)
- {
- CHAR TempBuffer[4];
-
- if (WIDTH_STAR == Width ||
- WIDTH_INVALID == Width)
- {
- /* ignore (because it's a char), and remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
- if (PRECISION_STAR == Precision ||
- PRECISION_INVALID == Precision)
- {
- /* ignore (because it's a char), and remove arg */
- TempInt = va_arg(ap, INT); /* value not used */
- }
-
- TempWChar = va_arg(ap, int);
- Length = Silent_WideCharToMultiByte(&TempWChar, 1, TempBuffer, 4);
- if (!Length)
- {
- va_end(ap);
- return -1;
- }
- TempBuffer[Length] = 0;
-
- /* do the padding (if needed)*/
- BufferRanOut = !Internal_AddPaddingA(&BufferPtr,
- Count - (BufferPtr - Buffer),
- TempBuffer,
- Width - Length,
- Flags);
-
- }
- /* this places the number of bytes written to the buffer in the
- next arg */
- else if (Type == PFF_TYPE_N)
- {
- if (WIDTH_STAR == Width)
- {
- Width = va_arg(ap, INT);
- }
- if (PRECISION_STAR == Precision)
- {
- Precision = va_arg(ap, INT);
- }
- if (Prefix == PFF_PREFIX_SHORT)
- {
- *(va_arg(ap, short *)) = BufferPtr - Buffer;
- }
- else
- {
- *(va_arg(ap, LPLONG)) = BufferPtr - Buffer;
- }
- }
- else if (Type == PFF_TYPE_CHAR && (Flags & PFF_ZERO) != 0)
- {
- // Some versions of sprintf don't support 0-padded chars,
- // so we handle them here.
- char ch[2];
-
- ch[0] = (char) va_arg(ap, int);
- ch[1] = '\0';
- Length = 1;
- BufferRanOut = !Internal_AddPaddingA(&BufferPtr,
- Count - (BufferPtr - Buffer),
- ch,
- Width - Length,
- Flags);
- }
- else if (Type == PFF_TYPE_STRING && (Flags & PFF_ZERO) != 0)
- {
- // Some versions of sprintf don't support 0-padded strings,
- // so we handle them here.
- char *tempStr;
-
- tempStr = va_arg(ap, char *);
- Length = strlen(tempStr);
- BufferRanOut = !Internal_AddPaddingA(&BufferPtr,
- Count - (BufferPtr - Buffer),
- tempStr,
- Width - Length,
- Flags);
- }
- /* types that sprintf can handle */
- else
- {
- size_t TempCount = Count - (BufferPtr - Buffer);
-
- TempInt = 0;
- /* %h (short) doesn't seem to be handled properly by local sprintf,
- so lets do the truncation ourselves. (ptr -> int -> short to avoid
- warnings */
- if (Type == PFF_TYPE_P && Prefix == PFF_PREFIX_SHORT)
- {
- long trunc1;
- short trunc2;
-
- trunc1 = va_arg(ap, LONG);
- trunc2 = (short)trunc1;
-
- TempInt = snprintf(BufferPtr, TempCount, TempBuff, trunc2);
- }
- else if (Type == PFF_TYPE_INT && Prefix == PFF_PREFIX_SHORT)
- {
- // Convert explicitly from int to short to get
- // correct sign extension for shorts on all systems.
- int n;
- short s;
-
- n = va_arg(ap, int);
- s = (short) n;
-
- TempInt = snprintf(BufferPtr, TempCount, TempBuff, s);
- }
- else
- {
- /* limit string output (%s) to 300 characters */
- if(TempBuff[0] == '%' && TempBuff[1] == 's')
- {
- if (strcpy_s(TempBuff, sizeof(TempBuff), "%.300s") != SAFECRT_SUCCESS)
- {
- va_end(ap);
- return -1;
- }
- }
- va_list apcopy;
- va_copy(apcopy, ap);
- TempInt = InternalVsnprintf(CorUnix::InternalGetCurrentThread(), BufferPtr, TempCount, TempBuff, apcopy);
- va_end(apcopy);
- PAL_printf_arg_remover(&ap, Width, Precision, Type, Prefix);
- }
-
- if (TempInt < 0 || static_cast<size_t>(TempInt) >= TempCount) /* buffer not long enough */
- {
- BufferPtr += TempCount;
- BufferRanOut = TRUE;
- }
- else
- {
- BufferPtr += TempInt;
- }
- }
- }
- else
- {
- *BufferPtr++ = *Fmt++; /* copy regular chars into buffer */
- }
- }
-
- if (Count > (BufferPtr - Buffer))
- {
- *BufferPtr = 0; /* end the string */
- }
-
- va_end(ap);
-
- if (BufferRanOut)
- {
- return -1;
- }
- else
- {
- return BufferPtr - Buffer;
- }
-}
-
/*++
Function:
PAL_vfprintf (silent version)
diff --git a/src/pal/src/cruntime/string.cpp b/src/pal/src/cruntime/string.cpp
index abe6d136f0..2abce6fd8f 100644
--- a/src/pal/src/cruntime/string.cpp
+++ b/src/pal/src/cruntime/string.cpp
@@ -278,7 +278,7 @@ PAL_atol(const char *szNumber)
PERF_ENTRY(atol);
ENTRY("atol (szNumber=%p (%s))\n",
- szNumber?szNumber:"NULL"
+ szNumber, szNumber?szNumber:"NULL"
);
lResult = atol(szNumber);
diff --git a/src/pal/src/debug/debug.cpp b/src/pal/src/debug/debug.cpp
index 2f7d17cabe..2eaaec9f1f 100644
--- a/src/pal/src/debug/debug.cpp
+++ b/src/pal/src/debug/debug.cpp
@@ -545,254 +545,6 @@ SetThreadContext(
/*++
Function:
- PAL_CreateExecWatchpoint
-
-Abstract
- Creates an OS exec watchpoint for the specified instruction
- and thread. This function should only be called on architectures
- that do not support a hardware single-step mode (e.g., SPARC).
-
-Parameter
- hThread : the thread for which the watchpoint is to apply
- pvInstruction : the instruction on which the watchpoint is to be set
-
-Return
- A Win32 error code
---*/
-
-DWORD
-PAL_CreateExecWatchpoint(
- HANDLE hThread,
- PVOID pvInstruction
- )
-{
- PERF_ENTRY(PAL_CreateExecWatchpoint);
- ENTRY("PAL_CreateExecWatchpoint (hThread=%p, pvInstruction=%p)\n", hThread, pvInstruction);
-
- DWORD dwError = ERROR_NOT_SUPPORTED;
-
-#if HAVE_PRWATCH_T
-
- CPalThread *pThread = NULL;
- CPalThread *pTargetThread = NULL;
- IPalObject *pobjThread = NULL;
- int fd = -1;
- char ctlPath[50];
-
- struct
- {
- long ctlCode;
- prwatch_t prwatch;
- } ctlStruct;
-
- //
- // We must never set a watchpoint on an instruction that enters a syscall;
- // if such a request comes in we succeed it w/o actually creating the
- // watchpoint. This mirrors the behavior of setting the single-step flag
- // in a thread context when the thread is w/in a system service -- the
- // flag is ignored and will not be present when the thread returns
- // to user mode.
- //
-
-#if defined(_SPARC_)
- if (*(DWORD*)pvInstruction == 0x91d02008) // ta 8
- {
- TRACE("Watchpoint requested on sysenter instruction -- ignoring");
- dwError = ERROR_SUCCESS;
- goto PAL_CreateExecWatchpointExit;
- }
-#else
-#error Need syscall instruction for this platform
-#endif // _SPARC_
-
- pThread = InternalGetCurrentThread();
-
- dwError = InternalGetThreadDataFromHandle(
- pThread,
- hThread,
- 0, // THREAD_SET_CONTEXT
- &pTargetThread,
- &pobjThread
- );
-
- if (NO_ERROR != dwError)
- {
- goto PAL_CreateExecWatchpointExit;
- }
-
- snprintf(ctlPath, sizeof(ctlPath), "/proc/%u/lwp/%u/lwpctl", getpid(), pTargetThread->GetLwpId());
-
- fd = InternalOpen(pThread, ctlPath, O_WRONLY);
- if (-1 == fd)
- {
- ERROR("Failed to open %s\n", ctlPath);
- dwError = ERROR_INVALID_ACCESS;
- goto PAL_CreateExecWatchpointExit;
- }
-
- ctlStruct.ctlCode = PCWATCH;
- ctlStruct.prwatch.pr_vaddr = (uintptr_t) pvInstruction;
- ctlStruct.prwatch.pr_size = sizeof(DWORD);
- ctlStruct.prwatch.pr_wflags = WA_EXEC | WA_TRAPAFTER;
-
- if (write(fd, (void*) &ctlStruct, sizeof(ctlStruct)) != sizeof(ctlStruct))
- {
- ERROR("Failure writing control structure (errno = %u)\n", errno);
- dwError = ERROR_INTERNAL_ERROR;
- goto PAL_CreateExecWatchpointExit;
- }
-
- dwError = ERROR_SUCCESS;
-
-PAL_CreateExecWatchpointExit:
-
- if (NULL != pobjThread)
- {
- pobjThread->ReleaseReference(pThread);
- }
-
- if (-1 != fd)
- {
- close(fd);
- }
-
-#endif // HAVE_PRWATCH_T
-
- LOGEXIT("PAL_CreateExecWatchpoint returns ret:%d\n", dwError);
- PERF_EXIT(PAL_CreateExecWatchpoint);
- return dwError;
-}
-
-/*++
-Function:
- PAL_DeleteExecWatchpoint
-
-Abstract
- Deletes an OS exec watchpoint for the specified instruction
- and thread. This function should only be called on architectures
- that do not support a hardware single-step mode (e.g., SPARC).
-
-Parameter
- hThread : the thread to remove the watchpoint from
- pvInstruction : the instruction for which the watchpoint is to be removed
-
-Return
- A Win32 error code. Attempting to delete a watchpoint that does not exist
- may or may not result in an error, depending on the behavior of the
- underlying operating system.
---*/
-
-DWORD
-PAL_DeleteExecWatchpoint(
- HANDLE hThread,
- PVOID pvInstruction
- )
-{
- PERF_ENTRY(PAL_DeleteExecWatchpoint);
- ENTRY("PAL_DeleteExecWatchpoint (hThread=%p, pvInstruction=%p)\n", hThread, pvInstruction);
-
- DWORD dwError = ERROR_NOT_SUPPORTED;
-
-#if HAVE_PRWATCH_T
-
- CPalThread *pThread = NULL;
- CPalThread *pTargetThread = NULL;
- IPalObject *pobjThread = NULL;
- int fd = -1;
- char ctlPath[50];
-
- struct
- {
- long ctlCode;
- prwatch_t prwatch;
- } ctlStruct;
-
-
- pThread = InternalGetCurrentThread();
-
- dwError = InternalGetThreadDataFromHandle(
- pThread,
- hThread,
- 0, // THREAD_SET_CONTEXT
- &pTargetThread,
- &pobjThread
- );
-
- if (NO_ERROR != dwError)
- {
- goto PAL_DeleteExecWatchpointExit;
- }
-
- snprintf(ctlPath, sizeof(ctlPath), "/proc/%u/lwp/%u/lwpctl", getpid(), pTargetThread->GetLwpId());
-
- fd = InternalOpen(pThread, ctlPath, O_WRONLY);
- if (-1 == fd)
- {
- ERROR("Failed to open %s\n", ctlPath);
- dwError = ERROR_INVALID_ACCESS;
- goto PAL_DeleteExecWatchpointExit;
- }
-
- ctlStruct.ctlCode = PCWATCH;
- ctlStruct.prwatch.pr_vaddr = (uintptr_t) pvInstruction;
- ctlStruct.prwatch.pr_size = sizeof(DWORD);
- ctlStruct.prwatch.pr_wflags = 0;
-
- if (write(fd, (void*) &ctlStruct, sizeof(ctlStruct)) != sizeof(ctlStruct))
- {
- ERROR("Failure writing control structure (errno = %u)\n", errno);
- dwError = ERROR_INTERNAL_ERROR;
- goto PAL_DeleteExecWatchpointExit;
- }
-
- dwError = ERROR_SUCCESS;
-
-PAL_DeleteExecWatchpointExit:
-
- if (NULL != pobjThread)
- {
- pobjThread->ReleaseReference(pThread);
- }
-
- if (-1 != fd)
- {
- close(fd);
- }
-
-#endif // HAVE_PRWATCH_T
-
- LOGEXIT("PAL_DeleteExecWatchpoint returns ret:%d\n", dwError);
- PERF_EXIT(PAL_DeleteExecWatchpoint);
- return dwError;
-}
-
-__attribute__((noinline))
-__attribute__((optnone))
-void
-ProbeMemory(volatile PBYTE pbBuffer, DWORD cbBuffer, bool fWriteAccess)
-{
- // Need an throw in this function to fool the C++ runtime into handling the
- // possible h/w exception below.
- if (pbBuffer == NULL)
- {
- throw PAL_SEHException();
- }
-
- // Simple one byte at a time probing
- while (cbBuffer > 0)
- {
- volatile BYTE read = *pbBuffer;
- if (fWriteAccess)
- {
- *pbBuffer = read;
- }
- ++pbBuffer;
- --cbBuffer;
- }
-}
-
-/*++
-Function:
PAL_ProbeMemory
Abstract
@@ -812,18 +564,58 @@ PAL_ProbeMemory(
DWORD cbBuffer,
BOOL fWriteAccess)
{
- try
- {
- // Need to explicit h/w exception holder so to catch them in ProbeMemory
- CatchHardwareExceptionHolder __catchHardwareException;
+ int fds[2];
- ProbeMemory((PBYTE)pBuffer, cbBuffer, fWriteAccess);
- }
- catch(...)
+ if (pipe(fds) != 0)
{
+ ASSERT("pipe failed: errno is %d (%s)\n", errno, strerror(errno));
return FALSE;
}
- return TRUE;
+
+ fcntl(fds[0], O_NONBLOCK);
+ fcntl(fds[1], O_NONBLOCK);
+
+ PVOID pEnd = (PBYTE)pBuffer + cbBuffer;
+ BOOL result = TRUE;
+
+ // Validate the first byte in the buffer, then validate the first byte on each page after that.
+ while (pBuffer < pEnd)
+ {
+ int written = write(fds[1], pBuffer, 1);
+ if (written == -1)
+ {
+ if (errno != EFAULT)
+ {
+ ASSERT("write failed: errno is %d (%s)\n", errno, strerror(errno));
+ }
+ result = FALSE;
+ break;
+ }
+ else
+ {
+ if (fWriteAccess)
+ {
+ int rd = read(fds[0], pBuffer, 1);
+ if (rd == -1)
+ {
+ if (errno != EFAULT)
+ {
+ ASSERT("read failed: errno is %d (%s)\n", errno, strerror(errno));
+ }
+ result = FALSE;
+ break;
+ }
+ }
+ }
+
+ // Round to the beginning of the next page
+ pBuffer = (PVOID)(((SIZE_T)pBuffer & ~VIRTUAL_PAGE_MASK) + VIRTUAL_PAGE_SIZE);
+ }
+
+ close(fds[0]);
+ close(fds[1]);
+
+ return result;
}
} // extern "C"
diff --git a/src/pal/src/exception/machexception.h b/src/pal/src/exception/machexception.h
index 18e31501b2..e2f8ee7a86 100644
--- a/src/pal/src/exception/machexception.h
+++ b/src/pal/src/exception/machexception.h
@@ -25,8 +25,6 @@ extern "C"
{
#endif // __cplusplus
-#define HIJACK_ON_SIGNAL 1
-
// List of exception types we will be watching for
// NOTE: if you change any of these, you need to adapt s_nMachExceptionPortsMax in thread.hpp
#define PAL_EXC_ILLEGAL_MASK (EXC_MASK_BAD_INSTRUCTION | EXC_MASK_EMULATION)
diff --git a/src/pal/src/exception/seh-unwind.cpp b/src/pal/src/exception/seh-unwind.cpp
index fa2f109875..e3fa09f7c8 100644
--- a/src/pal/src/exception/seh-unwind.cpp
+++ b/src/pal/src/exception/seh-unwind.cpp
@@ -322,14 +322,14 @@ BOOL PAL_VirtualUnwind(CONTEXT *context, KNONVOLATILE_CONTEXT_POINTERS *contextP
if (unw_is_signal_frame(&cursor) > 0)
{
context->ContextFlags |= CONTEXT_EXCEPTION_ACTIVE;
-#if defined(_ARM_) || defined(_ARM64_)
+#if defined(_ARM_) || defined(_ARM64_) || defined(_X86_)
context->ContextFlags &= ~CONTEXT_UNWOUND_TO_CALL;
#endif // _ARM_ || _ARM64_
}
else
{
context->ContextFlags &= ~CONTEXT_EXCEPTION_ACTIVE;
-#if defined(_ARM_) || defined(_ARM64_)
+#if defined(_ARM_) || defined(_ARM64_) || defined(_X86_)
context->ContextFlags |= CONTEXT_UNWOUND_TO_CALL;
#endif // _ARM_ || _ARM64_
}
diff --git a/src/pal/src/exception/signal.hpp b/src/pal/src/exception/signal.hpp
index c0c950ed4d..cd019e676b 100644
--- a/src/pal/src/exception/signal.hpp
+++ b/src/pal/src/exception/signal.hpp
@@ -46,13 +46,6 @@ Function :
--*/
void SEHCleanupSignals();
-#if (__GNUC__ > 3 || \
- (__GNUC__ == 3 && __GNUC_MINOR__ > 2))
-// For gcc > 3.2, sjlj exceptions semantics are no longer available
-// Therefore we need to hijack out of signal handlers before second pass
-#define HIJACK_ON_SIGNAL 1
-#endif
-
#endif // !HAVE_MACH_EXCEPTIONS
#endif /* _PAL_SIGNAL_HPP_ */
diff --git a/src/pal/src/file/disk.cpp b/src/pal/src/file/disk.cpp
index ef1d488b28..08880c9c20 100644
--- a/src/pal/src/file/disk.cpp
+++ b/src/pal/src/file/disk.cpp
@@ -26,10 +26,7 @@ Revision History:
#include "pal/stackstring.hpp"
#include <sys/param.h>
-#if !defined(_AIX)
-// do we actually need this on other platforms. We don't seem to be using anything from there
#include <sys/mount.h>
-#endif
#include <errno.h>
#if HAVE_STATVFS
#include <sys/types.h>
diff --git a/src/pal/src/file/file.cpp b/src/pal/src/file/file.cpp
index 6443a5e7b9..d70e62bd52 100644
--- a/src/pal/src/file/file.cpp
+++ b/src/pal/src/file/file.cpp
@@ -18,6 +18,9 @@ Abstract:
--*/
+#include "pal/dbgmsg.h"
+SET_DEFAULT_DEBUG_CHANNEL(FILE); // some headers have code with asserts, so do this first
+
#include "pal/thread.hpp"
#include "pal/file.hpp"
#include "shmfilelockmgr.hpp"
@@ -25,7 +28,6 @@ Abstract:
#include "pal/stackstring.hpp"
#include "pal/palinternal.h"
-#include "pal/dbgmsg.h"
#include "pal/file.h"
#include "pal/filetime.h"
#include "pal/utils.h"
@@ -42,8 +44,6 @@ Abstract:
using namespace CorUnix;
-SET_DEFAULT_DEBUG_CHANNEL(FILE);
-
int MaxWCharToAcpLengthFactor = 3;
PAL_ERROR
@@ -3657,12 +3657,9 @@ DWORD FILEGetLastErrorFromErrno( void )
case EEXIST:
dwRet = ERROR_ALREADY_EXISTS;
break;
-#if !defined(_AIX)
- // ENOTEMPTY is the same as EEXIST on AIX. Meaningful when involving directory operations
case ENOTEMPTY:
dwRet = ERROR_DIR_NOT_EMPTY;
break;
-#endif
case EBADF:
dwRet = ERROR_INVALID_HANDLE;
break;
diff --git a/src/pal/src/file/path.cpp b/src/pal/src/file/path.cpp
index c4ef31be32..d998b72b2e 100644
--- a/src/pal/src/file/path.cpp
+++ b/src/pal/src/file/path.cpp
@@ -494,8 +494,8 @@ GetTempPathA(
}
else /* env var not found or was empty */
{
- /* no luck, use /tmp/ */
- const char *defaultDir = "/tmp/";
+ /* no luck, use /tmp/ or /data/local/tmp on Android */
+ const char *defaultDir = TEMP_DIRECTORY_PATH;
int defaultDirLen = strlen(defaultDir);
if (defaultDirLen < nBufferLength)
{
diff --git a/src/pal/src/include/pal/modulename.h b/src/pal/src/include/pal/modulename.h
index 70b0a610dc..20001f8797 100644
--- a/src/pal/src/include/pal/modulename.h
+++ b/src/pal/src/include/pal/modulename.h
@@ -28,9 +28,6 @@ extern "C"
#endif // __cplusplus
const char *PAL_dladdr(LPVOID ProcAddress);
-#if defined(_AIX)
-int GetLibRotorNameViaLoadQuery(LPSTR pszBuf);
-#endif
#ifdef __cplusplus
}
diff --git a/src/pal/src/include/pal/palinternal.h b/src/pal/src/include/pal/palinternal.h
index f7856be902..48e2f3c683 100644
--- a/src/pal/src/include/pal/palinternal.h
+++ b/src/pal/src/include/pal/palinternal.h
@@ -335,7 +335,7 @@ function_name() to call the system's implementation
#undef va_arg
#endif
-#if !defined(_MSC_VER) && defined(FEATURE_PAL) && defined(_WIN64)
+#if !defined(_MSC_VER) && defined(_WIN64)
#undef _BitScanForward64
#endif
@@ -358,6 +358,7 @@ function_name() to call the system's implementation
#undef memchr
#undef strlen
#undef strnlen
+#undef wcsnlen
#undef stricmp
#undef strstr
#undef strcmp
@@ -502,7 +503,6 @@ function_name() to call the system's implementation
#undef vfwprintf
#undef vprintf
#undef wprintf
-#undef swprintf
#undef wcstod
#undef wcstol
#undef wcstoul
@@ -525,10 +525,6 @@ function_name() to call the system's implementation
#undef iswspace
#undef towlower
#undef towupper
-#undef vsprintf
-#undef vswprintf
-#undef _vsnprintf
-#undef vsnprintf
#undef wvsnprintf
#ifdef _AMD64_
@@ -606,15 +602,19 @@ function_name() to call the system's implementation
#define INFTIM -1
#endif // !HAVE_INFTIM
-#if (__GNUC__ >= 4)
#define OffsetOf(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
-#else
-#define OffsetOf(s, f) (INT)(SIZE_T)&(((s*)0)->f)
-#endif /* __GNUC__ version check*/
#undef assert
#define assert (Use__ASSERTE_instead_of_assert) assert
+#ifndef __ANDROID__
+#define TEMP_DIRECTORY_PATH "/tmp/"
+#else
+// On Android, "/tmp/" doesn't exist; temporary files should go to
+// /data/local/tmp/
+#define TEMP_DIRECTORY_PATH "/data/local/tmp/"
+#endif
+
#define PROCESS_PIPE_NAME_PREFIX ".dotnet-pal-processpipe"
#ifdef __cplusplus
diff --git a/src/pal/src/include/pal/printfcpp.hpp b/src/pal/src/include/pal/printfcpp.hpp
index 0a728c9fd7..12e923a506 100644
--- a/src/pal/src/include/pal/printfcpp.hpp
+++ b/src/pal/src/include/pal/printfcpp.hpp
@@ -32,22 +32,6 @@ typedef char16_t wchar_16; // __wchar_16_cpp (which is defined in palinternal.h)
extern "C"
{
int
- __cdecl
- PAL__vsnprintf(
- LPSTR Buffer,
- size_t Count,
- LPCSTR Format,
- va_list ap);
-
- int
- __cdecl
- PAL__wvsnprintf(
- LPWSTR Buffer,
- size_t Count,
- LPCWSTR Format,
- va_list ap);
-
- int
__cdecl
PAL_vfprintf(
PAL_FILE *stream,
@@ -71,48 +55,9 @@ namespace CorUnix
const char *format,
va_list ap);
- int
- InternalWvsnprintf(
- CPalThread *pthrCurrent,
- LPWSTR Buffer,
- size_t Count,
- LPCWSTR Format,
- va_list ap);
-
- int
- InternalVsnprintf(
- CPalThread *pthrCurrent,
- LPSTR Buffer,
- size_t Count,
- LPCSTR Format,
- va_list ap);
-
- int
- InternalVfwprintf(
- CPalThread *pthrCurrent,
- PAL_FILE *stream,
- const wchar_16 *format,
- va_list ap);
-
}
#else // __cplusplus
- int
- __cdecl
- PAL__vsnprintf(
- LPSTR Buffer,
- size_t Count,
- LPCSTR Format,
- va_list ap);
-
- int
- __cdecl
- PAL__wvsnprintf(
- LPWSTR Buffer,
- size_t Count,
- LPCWSTR Format,
- va_list ap);
-
int
__cdecl
PAL_vfprintf(
diff --git a/src/pal/src/include/pal/sharedmemory.h b/src/pal/src/include/pal/sharedmemory.h
index 45cc4b2c8d..2e0d9d2a79 100644
--- a/src/pal/src/include/pal/sharedmemory.h
+++ b/src/pal/src/include/pal/sharedmemory.h
@@ -15,30 +15,33 @@
#define _countof(a) (sizeof(a) / sizeof(a[0]))
#endif // !_countof
+// The temporary folder is used for storing shared memory files and their lock files.
+// The location of the temporary folder varies (e.g. /data/local/tmp on Android)
+// and is set in TEMP_DIRECTORY_PATH. TEMP_DIRECTORY_PATH ends with '/'
// - Global shared memory files go in:
-// /tmp/.dotnet/shm/global/<fileName>
+// {tmp}/.dotnet/shm/global/<fileName>
// - Session-scoped shared memory files go in:
-// /tmp/.dotnet/shm/session<sessionId>/<fileName>
+// {tmp}/.dotnet/shm/session<sessionId>/<fileName>
// - Lock files associated with global shared memory files go in:
-// /tmp/.dotnet/lockfiles/global/<fileName>
+// {tmp}/.dotnet/lockfiles/global/<fileName>
// - Lock files associated with session-scoped shared memory files go in:
-// /tmp/.dotnet/lockfiles/session<sessionId>/<fileName>
+// {tmp}/.dotnet/lockfiles/session<sessionId>/<fileName>
#define SHARED_MEMORY_MAX_FILE_NAME_CHAR_COUNT (_MAX_FNAME - 1)
#define SHARED_MEMORY_MAX_NAME_CHAR_COUNT (_countof("Global\\") - 1 + SHARED_MEMORY_MAX_FILE_NAME_CHAR_COUNT)
-#define SHARED_MEMORY_TEMP_DIRECTORY_PATH "/tmp"
-#define SHARED_MEMORY_RUNTIME_TEMP_DIRECTORY_PATH "/tmp/.dotnet"
+#define SHARED_MEMORY_TEMP_DIRECTORY_PATH TEMP_DIRECTORY_PATH
+#define SHARED_MEMORY_RUNTIME_TEMP_DIRECTORY_PATH TEMP_DIRECTORY_PATH ".dotnet"
-#define SHARED_MEMORY_SHARED_MEMORY_DIRECTORY_PATH "/tmp/.dotnet/shm"
-#define SHARED_MEMORY_LOCK_FILES_DIRECTORY_PATH "/tmp/.dotnet/lockfiles"
+#define SHARED_MEMORY_SHARED_MEMORY_DIRECTORY_PATH TEMP_DIRECTORY_PATH ".dotnet/shm"
+#define SHARED_MEMORY_LOCK_FILES_DIRECTORY_PATH TEMP_DIRECTORY_PATH ".dotnet/lockfiles"
static_assert_no_msg(_countof(SHARED_MEMORY_LOCK_FILES_DIRECTORY_PATH) >= _countof(SHARED_MEMORY_SHARED_MEMORY_DIRECTORY_PATH));
#define SHARED_MEMORY_GLOBAL_DIRECTORY_NAME "global"
#define SHARED_MEMORY_SESSION_DIRECTORY_NAME_PREFIX "session"
static_assert_no_msg(_countof(SHARED_MEMORY_SESSION_DIRECTORY_NAME_PREFIX) >= _countof(SHARED_MEMORY_GLOBAL_DIRECTORY_NAME));
-#define SHARED_MEMORY_UNIQUE_TEMP_NAME_TEMPLATE "/tmp/.coreclr.XXXXXX"
+#define SHARED_MEMORY_UNIQUE_TEMP_NAME_TEMPLATE TEMP_DIRECTORY_PATH ".coreclr.XXXXXX"
#define SHARED_MEMORY_MAX_SESSION_ID_CHAR_COUNT (10)
diff --git a/src/pal/src/include/pal/thread.hpp b/src/pal/src/include/pal/thread.hpp
index e6dacd2136..ddacfb9039 100644
--- a/src/pal/src/include/pal/thread.hpp
+++ b/src/pal/src/include/pal/thread.hpp
@@ -94,11 +94,6 @@ namespace CorUnix
);
PAL_ERROR
- InitializeGlobalThreadData(
- void
- );
-
- PAL_ERROR
CreateThreadData(
CPalThread **ppThread
);
@@ -243,12 +238,6 @@ namespace CorUnix
friend
PAL_ERROR
- InitializeGlobalThreadData(
- void
- );
-
- friend
- PAL_ERROR
CreateThreadData(
CPalThread **ppThread
);
@@ -338,13 +327,6 @@ namespace CorUnix
// Limit address of the stack of this thread
void* m_stackLimit;
- // The default stack size of a newly created thread (currently 256KB)
- // when the dwStackSize paramter of PAL_CreateThread()
- // is zero. This value can be set by setting the
- // environment variable PAL_THREAD_DEFAULT_STACK_SIZE
- // (the value should be in bytes and in hex).
- static DWORD s_dwDefaultThreadStackSize;
-
//
// The thread entry routine (called from InternalCreateThread)
//
diff --git a/src/pal/src/include/pal/threadsusp.hpp b/src/pal/src/include/pal/threadsusp.hpp
index e1e85e265c..dfd65d0f8b 100644
--- a/src/pal/src/include/pal/threadsusp.hpp
+++ b/src/pal/src/include/pal/threadsusp.hpp
@@ -55,6 +55,8 @@ Abstract:
#if HAVE_SYS_SEMAPHORE_H
#include <sys/semaphore.h>
+#elif HAVE_SEMAPHORE_H
+#include <semaphore.h>
#endif // HAVE_SYS_SEMAPHORE_H
#elif HAS_PTHREAD_MUTEXES && HAVE_MACH_EXCEPTIONS
diff --git a/src/pal/src/include/pal/utils.h b/src/pal/src/include/pal/utils.h
index 3ddad4ae2f..f381d957ab 100644
--- a/src/pal/src/include/pal/utils.h
+++ b/src/pal/src/include/pal/utils.h
@@ -20,10 +20,66 @@ Abstract:
#ifndef _PAL_UTILS_H_
#define _PAL_UTILS_H_
+#include <stdint.h>
+
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Alignment helpers (copied for PAL use from stdmacros.h)
+
+inline size_t ALIGN_UP(size_t val, size_t alignment)
+{
+ // alignment must be a power of 2 for this implementation to work (need modulo otherwise)
+ _ASSERTE(0 == (alignment & (alignment - 1)));
+ size_t result = (val + (alignment - 1)) & ~(alignment - 1);
+ _ASSERTE(result >= val); // check for overflow
+ return result;
+}
+
+inline void* ALIGN_UP(void* val, size_t alignment)
+{
+ return (void*)ALIGN_UP((size_t)val, alignment);
+}
+
+inline uint8_t* ALIGN_UP(uint8_t* val, size_t alignment)
+{
+ return (uint8_t*)ALIGN_UP((size_t)val, alignment);
+}
+
+inline size_t ALIGN_DOWN(size_t val, size_t alignment)
+{
+ // alignment must be a power of 2 for this implementation to work (need modulo otherwise)
+ _ASSERTE(0 == (alignment & (alignment - 1)));
+ size_t result = val & ~(alignment - 1);
+ return result;
+}
+
+inline void* ALIGN_DOWN(void* val, size_t alignment)
+{
+ return (void*)ALIGN_DOWN((size_t)val, alignment);
+}
+
+inline uint8_t* ALIGN_DOWN(uint8_t* val, size_t alignment)
+{
+ return (uint8_t*)ALIGN_DOWN((size_t)val, alignment);
+}
+
+inline BOOL IS_ALIGNED(size_t val, size_t alignment)
+{
+ // alignment must be a power of 2 for this implementation to work (need modulo otherwise)
+ _ASSERTE(0 == (alignment & (alignment - 1)));
+ return 0 == (val & (alignment - 1));
+}
+
+inline BOOL IS_ALIGNED(const void* val, size_t alignment)
+{
+ return IS_ALIGNED((size_t)val, alignment);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
#ifdef __cplusplus
extern "C"
{
diff --git a/src/pal/src/include/pal/virtual.h b/src/pal/src/include/pal/virtual.h
index a4e225281e..31d225fc04 100644
--- a/src/pal/src/include/pal/virtual.h
+++ b/src/pal/src/include/pal/virtual.h
@@ -58,12 +58,7 @@ enum VIRTUAL_CONSTANTS
VIRTUAL_EXECUTE,
VIRTUAL_EXECUTE_READ,
- /* Page manipulation constants. */
-#ifdef __sparc__
- VIRTUAL_PAGE_SIZE = 0x2000,
-#else // __sparc__
VIRTUAL_PAGE_SIZE = 0x1000,
-#endif // __sparc__
VIRTUAL_PAGE_MASK = VIRTUAL_PAGE_SIZE - 1,
BOUNDARY_64K = 0xffff
};
diff --git a/src/pal/src/init/pal.cpp b/src/pal/src/init/pal.cpp
index 0bda27644e..e6db7dca2e 100644
--- a/src/pal/src/init/pal.cpp
+++ b/src/pal/src/init/pal.cpp
@@ -18,6 +18,9 @@ Abstract:
--*/
+#include "pal/dbgmsg.h"
+SET_DEFAULT_DEBUG_CHANNEL(PAL); // some headers have code with asserts, so do this first
+
#include "pal/thread.hpp"
#include "pal/synchobjects.hpp"
#include "pal/procobj.hpp"
@@ -27,7 +30,6 @@ Abstract:
#include "../objmgr/shmobjectmanager.hpp"
#include "pal/seh.hpp"
#include "pal/palinternal.h"
-#include "pal/dbgmsg.h"
#include "pal/sharedmemory.h"
#include "pal/shmemory.h"
#include "pal/process.h"
@@ -90,8 +92,6 @@ using namespace CorUnix;
extern "C" BOOL CRTInitStdStreams( void );
-SET_DEFAULT_DEBUG_CHANNEL(PAL);
-
Volatile<INT> init_count = 0;
Volatile<BOOL> shutdown_intent = 0;
Volatile<LONG> g_coreclrInitialized = 0;
@@ -314,17 +314,6 @@ Initialize(
#endif // HAVE_MACH_EXCEPTIONS
//
- // Initialize global thread data
- //
-
- palError = InitializeGlobalThreadData();
- if (NO_ERROR != palError)
- {
- ERROR("Unable to initialize thread data\n");
- goto CLEANUP1;
- }
-
- //
// Allocate the initial thread data
//
diff --git a/src/pal/src/loader/module.cpp b/src/pal/src/loader/module.cpp
index a4fc4949e4..63a65ffb61 100644
--- a/src/pal/src/loader/module.cpp
+++ b/src/pal/src/loader/module.cpp
@@ -18,11 +18,13 @@ Abstract:
--*/
+#include "pal/dbgmsg.h"
+SET_DEFAULT_DEBUG_CHANNEL(LOADER); // some headers have code with asserts, so do this first
+
#include "pal/thread.hpp"
#include "pal/malloc.hpp"
#include "pal/file.hpp"
#include "pal/palinternal.h"
-#include "pal/dbgmsg.h"
#include "pal/module.h"
#include "pal/cs.hpp"
#include "pal/process.h"
@@ -60,8 +62,6 @@ Abstract:
using namespace CorUnix;
-SET_DEFAULT_DEBUG_CHANNEL(LOADER);
-
// In safemath.h, Template SafeInt uses macro _ASSERTE, which need to use variable
// defdbgchan defined by SET_DEFAULT_DEBUG_CHANNEL. Therefore, the include statement
// should be placed after the SET_DEFAULT_DEBUG_CHANNEL(LOADER)
diff --git a/src/pal/src/loader/modulename.cpp b/src/pal/src/loader/modulename.cpp
index 026f89b3ea..87c1b026c2 100644
--- a/src/pal/src/loader/modulename.cpp
+++ b/src/pal/src/loader/modulename.cpp
@@ -30,118 +30,10 @@ Abstract:
#include <dlfcn.h>
#endif // NEED_DLCOMPAT
-#if defined(_AIX)
-#include <sys/ldr.h>
-#endif
-
using namespace CorUnix;
SET_DEFAULT_DEBUG_CHANNEL(LOADER);
-#if defined(_AIX)
-/*++
- GetLibRotorNameViaLoadQuery
-
- Retrieve the full path of the librotor_pal.so using loadquery()
-
-Parameters:
- pszBuf - CHAR array of MAX_PATH_FNAME length
-
-Return value:
- 0 on success
- -1 on failure, with last error set
---*/
-int GetLibRotorNameViaLoadQuery(LPSTR pszBuf)
-{
- CHAR* pLoadQueryBuf = NULL;
- UINT cbBuf = 1024;
- struct ld_info * pInfo = NULL;
- INT iLQRetVal = -1;
- INT iRetVal = -1;
- CPalThread *pThread = NULL;
-
- if (!pszBuf)
- {
- ASSERT("GetLibRotorNameViaLoadQuery requires non-NULL pszBuf\n");
- SetLastError(ERROR_INTERNAL_ERROR);
- goto Done;
- }
-
- pThread = InternalGetCurrentThread();
- // Loop trying to call loadquery with enough memory until either
- // 1) we succeed, 2) we run out of memory or 3) loadquery throws
- // an error other than ENOMEM
- while (iLQRetVal != 0)
- {
- pLoadQueryBuf = (CHAR*) InternalMalloc (pThread, cbBuf * sizeof(char));
- if (!pLoadQueryBuf)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- goto Done;
- }
- iLQRetVal = loadquery(L_GETINFO, pLoadQueryBuf, cbBuf);
- if (iLQRetVal < 0)
- {
- free(pThread, pLoadQueryBuf);
- pLoadQueryBuf = NULL;
- DWORD dwLastError = GetLastError();
- if (dwLastError == ERROR_NOT_ENOUGH_MEMORY)
- {
- // The buffer's too small. Try twice as large as a guess...
- cbBuf *= 2;
- }
- else
- {
- SetLastError(ERROR_INTERNAL_ERROR);
- goto Done;
- }
- }
- }
-
- // We successfully called loadquery, so now see if we can find
- // librotor_pal.a in the module list
- if (pLoadQueryBuf)
- {
- pInfo = (struct ld_info *)pLoadQueryBuf;
- while (TRUE)
- {
- if (strstr(pInfo->ldinfo_filename, "librotor_pal.a"))
- {
- UINT cchFileName = strlen(pInfo->ldinfo_filename);
- if (cchFileName + 1 > MAX_PATH_FNAME)
- {
- ASSERT("Filename returned by loadquery was longer than MAX_PATH_FNAME!\n");
- SetLastError(ERROR_INTERNAL_ERROR);
- goto Done;
- }
- else
- {
- // The buffer should be large enough to accomodate the filename.
- // So, we send in the size of the filename+1
- strcpy_s(pszBuf, MAX_PATH_FNAME, pInfo->ldinfo_filename);
- iRetVal = 0;
- goto Done;
- }
- }
- else
- {
- // The (wacky) design of ld_info is that the value of next is an offset in
- // bytes rather than a pointer. So we need this weird cast to char * to get
- // the pointer math correct.
- if (pInfo->ldinfo_next == 0)
- break;
- else
- pInfo = (struct ld_info *) ((char *)pInfo + pInfo->ldinfo_next);
- }
- }
- }
-Done:
- if (pLoadQueryBuf)
- free(pThread, pLoadQueryBuf);
- return iRetVal;
-}
-#endif // defined(_AIX)
-
/*++
PAL_dladdr
@@ -165,31 +57,6 @@ Notes:
--*/
const char *PAL_dladdr(LPVOID ProcAddress)
{
-#if defined(_AIX) || defined(__hppa__)
- /* dladdr is not supported on AIX or 32-bit HPUX-PARISC */
- return (NULL);
-#elif defined(_HPUX_) && defined(_IA64_)
- /* dladdr is not supported on HP-UX/IA64. That said, PAL_dladdr just returns to module name
- and we can get that via dlgetname. So use that for HPUX. */
- {
- char* pszName = NULL;
- load_module_desc desc;
- __uint64_t uimodret = NULL;
- uimodret = dlmodinfo((__uint64_t)ProcAddress, &desc, sizeof(desc), NULL, 0, 0);
- if (!uimodret)
- {
- WARN("dlmodinfo call failed! dlerror says '%s'\n", dlerror());
- return NULL;
- }
- pszName = dlgetname(&desc, sizeof(desc), NULL, 0, 0);
- if (!pszName)
- {
- WARN("dlgetname desc didn't describe a loaded module?! dlerror says '%s'\n", dlerror());
- return NULL;
- }
- return pszName;
- }
-#else
Dl_info dl_info;
if (!dladdr(ProcAddress, &dl_info))
{
@@ -202,6 +69,5 @@ const char *PAL_dladdr(LPVOID ProcAddress)
/* Return the module name */
return dl_info.dli_fname;
}
-#endif
}
diff --git a/src/pal/src/misc/dbgmsg.cpp b/src/pal/src/misc/dbgmsg.cpp
index 488e61494e..d6f173f160 100644
--- a/src/pal/src/misc/dbgmsg.cpp
+++ b/src/pal/src/misc/dbgmsg.cpp
@@ -528,8 +528,8 @@ int DBG_printf_gcc(DBG_CHANNEL_ID channel, DBG_LEVEL_ID level, BOOL bHeader,
va_start(args, format);
- output_size+=Silent_PAL_vsnprintf(buffer_ptr, DBG_BUFFER_SIZE-output_size,
- format, args);
+ output_size+=_vsnprintf_s(buffer_ptr, DBG_BUFFER_SIZE-output_size, _TRUNCATE,
+ format, args);
va_end(args);
if( output_size > DBG_BUFFER_SIZE )
@@ -633,8 +633,8 @@ int DBG_printf_c99(DBG_CHANNEL_ID channel, DBG_LEVEL_ID level, BOOL bHeader,
}
va_start(args, format);
- output_size+=Silent_PAL_vsnprintf(buffer_ptr, DBG_BUFFER_SIZE-output_size,
- format, args);
+ output_size+=_vsnprintf_s(buffer_ptr, DBG_BUFFER_SIZE-output_size, _TRUNCATE,
+ format, args);
va_end(args);
if(output_size>DBG_BUFFER_SIZE)
@@ -960,7 +960,7 @@ void PAL_DisplayDialogFormatted(const char *szTitle, const char *szTextFormat, .
const int cchBuffer = 4096;
char *szBuffer = (char*)alloca(cchBuffer);
- PAL__vsnprintf(szBuffer, cchBuffer, szTextFormat, args);
+ _vsnprintf_s(szBuffer, cchBuffer, _TRUNCATE, szTextFormat, args);
PAL_DisplayDialog(szTitle, szBuffer);
va_end(args);
diff --git a/src/pal/src/misc/fmtmessage.cpp b/src/pal/src/misc/fmtmessage.cpp
index 46e0af6e0d..70b854aa9c 100644
--- a/src/pal/src/misc/fmtmessage.cpp
+++ b/src/pal/src/misc/fmtmessage.cpp
@@ -205,7 +205,7 @@ static LPWSTR FMTMSG_ProcessPrintf( wchar_t c ,
UINT nFormatLength = 0;
int nBufferLength = 0;
- TRACE( "FMTMSG_ProcessPrintf( %C, %S, %S )\n", c,
+ TRACE( "FMTMSG_ProcessPrintf( %C, %S, %p )\n", c,
lpPrintfString, lpInsertString );
switch ( c )
@@ -299,7 +299,6 @@ FormatMessageW(
LPWSTR lpReturnString = NULL;
LPWSTR lpWorkingString = NULL;
-
PERF_ENTRY(FormatMessageW);
ENTRY( "FormatMessageW(dwFlags=%#x, lpSource=%p, dwMessageId=%#x, "
"dwLanguageId=%#x, lpBuffer=%p, nSize=%u, va_list=%p)\n",
diff --git a/src/pal/src/misc/perftrace.cpp b/src/pal/src/misc/perftrace.cpp
index d4fba3367a..fdefdf6694 100644
--- a/src/pal/src/misc/perftrace.cpp
+++ b/src/pal/src/misc/perftrace.cpp
@@ -23,26 +23,6 @@ Abstract:
#ifdef PAL_PERF
-#ifndef PLATFORM_UNIX
-/* PAL Headers */
-#include "perftrace.h"
-
-/* Standard Headers */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#define snprintf _snprintf
-#define MiscGetenv getenv
-#define pthread_getspecific TlsGetValue
-#define THREADSilentGetCurrentThreadId GetCurrentThreadId
-#define getpid GetCurrentProcessId
-#define PAL_fgets fgets // on Windows, we want fgets.
-#define PAL_fwrite fwrite // on Windows, we want fwrite.
-#define PAL_fseek fseek // on Windows, we want fseek.
-
-#else
/* PAL Headers */
#include "pal/palinternal.h"
#include "pal/perftrace.h"
@@ -60,7 +40,6 @@ Abstract:
#include <unistd.h>
SET_DEFAULT_DEBUG_CHANNEL(MISC);
-#endif //End of PLATFORM_UNIX
#define PAL_PERF_MAX_LOGLINE 0x400 /* 1K */
@@ -110,21 +89,12 @@ typedef struct _pal_perf_program_info
ULONGLONG total_duration; /* Total CPU clock ticks of all the threads */
ULONGLONG pal_duration; /* Total CPU clock ticks spent inside PAL */
-#ifndef PLATFORM_UNIX
- DWORD process_id;
-#else
pid_t process_id;
-#endif
char start_time[32]; /* must be at least 26 characters */
} pal_perf_program_info;
-#ifndef PLATFORM_UNIX
-typedef FILE PERF_FILE;
-#define PERF_FILEFN(x) x
-#else
typedef PAL_FILE PERF_FILE;
#define PERF_FILEFN(x) PAL_ ## x
-#endif
static ULONGLONG PERFGetTicks();
static double PERFComputeStandardDeviation(pal_perf_api_info *api);
@@ -144,11 +114,7 @@ typedef char PAL_API_NAME[PAL_PERF_MAX_FUNCTION_NAME];
static PAL_API_NAME API_list[PAL_API_NUMBER] ;
static pal_perf_program_info program_info;
-#ifndef PLATFORM_UNIX
-static DWORD PERF_tlsTableKey=0 ;
-#else
static pthread_key_t PERF_tlsTableKey=0 ;
-#endif
static pal_thread_list_node * process_pal_thread_list=NULL;
static BOOL pal_profile_on=FALSE;
@@ -199,19 +165,11 @@ static const char PAL_PERF_HISTOGRAM_SIZE[]="PAL_PERF_HISTOGRAM_SIZE";
static const char PAL_PERF_HISTOGRAM_STEP[]="PAL_PERF_HISTOGRAM_STEP";
static const char traced_apis_filename[]="PerfTracedAPIs.txt";
static const char perf_enabled_filename[]="AllPerfEnabledAPIs.txt";
-#ifndef PLATFORM_UNIX
-static const char PATH_SEPARATOR[] = "\\";
-#else
static const char PATH_SEPARATOR[] = "/";
-#endif
-#ifndef PLATFORM_UNIX
-#define LLFORMAT "%I64u"
-#else
#define LLFORMAT "%llu"
-#endif
static
ULONGLONG
@@ -231,11 +189,7 @@ PERFGetTicks(){
#endif
return ((ULONGLONG)((unsigned int)(d)) << 32) | (unsigned int)(a);
#else
-#ifdef __sparc__
- return (ULONGLONG)gethrtime();
-#else
return 0; // on non-BSD and non-Windows, we'll return 0 for now.
-#endif // __sparc__
#endif // _X86_
}
@@ -283,11 +237,7 @@ BOOL
PERFInitProgramInfo(LPWSTR command_line, LPWSTR exe_path)
{
ULONGLONG start_tick;
-#ifndef PLATFORM_UNIX
- time_t tv;
-#else
struct timeval tv;
-#endif
if (WideCharToMultiByte(CP_ACP, 0, command_line, -1,
program_info.command_line, PAL_PERF_MAX_LOGLINE-1, NULL, NULL) == 0)
@@ -299,23 +249,14 @@ PERFInitProgramInfo(LPWSTR command_line, LPWSTR exe_path)
gethostname(program_info.hostname, PAL_PERF_MAX_FUNCTION_NAME);
program_info.process_id = getpid();
-#ifndef PLATFORM_UNIX
- time( &tv );
- strcpy(program_info.start_time, ctime( &tv ));
-#else
gettimeofday(&tv, NULL);
ctime_r(&tv.tv_sec, program_info.start_time);
-#endif
// estimate the cpu clock cycles
start_tick = PERFGetTicks();
if (start_tick != 0)
{
-#ifndef PLATFORM_UNIX
- Sleep(1000); //Sleep on Windows takes milliseconds as argument
-#else
sleep(1);
-#endif
program_info.cpu_clock_frequency = (double) (PERFGetTicks() - start_tick);
}
else
@@ -379,13 +320,8 @@ PERFInitialize(LPWSTR command_line, LPWSTR exe_path)
pal_profile_on = FALSE; // turn it off until we setup everything.
// allocate the TLS index for structures
-#ifndef PLATFORM_UNIX
- if( ( PERF_tlsTableKey = TlsAlloc() ) == -1 )
- ret = FALSE;
-#else
if( pthread_key_create(&PERF_tlsTableKey , NULL) != 0 )
ret = FALSE;
-#endif
if( ret == TRUE )
{
@@ -399,11 +335,7 @@ PERFInitialize(LPWSTR command_line, LPWSTR exe_path)
else
{
-#ifndef PLATFORM_UNIX
- TlsFree(PERF_tlsTableKey );
-#else
pthread_key_delete(PERF_tlsTableKey );
-#endif
ret = FALSE;
}
}
@@ -426,11 +358,7 @@ void PERFTerminate( )
return;
PERFlushAllLogs();
-#ifndef PLATFORM_UNIX
- TlsFree(PERF_tlsTableKey );
-#else
- pthread_key_delete(PERF_tlsTableKey );
-#endif
+ pthread_key_delete(PERF_tlsTableKey );
PAL_free(pal_function_map);
}
@@ -516,13 +444,8 @@ BOOL PERFAllocThreadInfo( )
local_info->start_ticks = 0;
memset(log_buf, 0, PAL_PERF_PROFILE_BUFFER_SIZE);
-#ifndef PLATFORM_UNIX
- if ( TlsSetValue(PERF_tlsTableKey, local_info) == 0)
- ret = FALSE;
-#else
if (pthread_setspecific(PERF_tlsTableKey, local_info) != 0)
ret = FALSE;
-#endif
PERFAllocThreadInfoExit:
if (ret == TRUE)
@@ -799,11 +722,7 @@ PERFReadSetting( )
char * pal_perf_histogram_size_env;
char * pal_perf_histogram_step_env;
-#ifdef PLATFORM_UNIX
PAL_FILE * hFile;
-#else
- FILE * hFile;
-#endif
if((pal_function_map == NULL) || (PAL_API_NUMBER < 0) )
{
@@ -936,11 +855,7 @@ PERFReadSetting( )
if(input_file_name)
{
-#ifdef PLATFORM_UNIX
hFile = PAL_fopen(input_file_name, "r+");
-#else
- hFile = fopen(input_file_name, "r+");
-#endif
if ( hFile == NULL )
{
memset(pal_function_map, 1, PAL_API_NUMBER);
@@ -979,11 +894,7 @@ PERFReadSetting( )
}
-#ifdef PLATFORM_UNIX
PAL_fclose(hFile);
-#else
- fclose(hFile);
-#endif
ret = TRUE;
}
}
@@ -1031,11 +942,7 @@ PERFReadSetting( )
return ret;
}
-#ifdef PLATFORM_UNIX
hFile = PAL_fopen(input_file_name, "r+");
-#else
- hFile = fopen(input_file_name, "r+");
-#endif
if ( hFile != NULL )
{
@@ -1065,11 +972,7 @@ PERFReadSetting( )
}
}
-#ifdef PLATFORM_UNIX
PAL_fclose(hFile);
-#else
- fclose(hFile);
-#endif
}
return ret;
@@ -1126,13 +1029,7 @@ PERFLogFunctionEntry(unsigned int pal_api_id, ULONGLONG *pal_perf_start_tick )
short bufused = 0;
-#ifndef PLATFORM_UNIX
- DWORD tv;
- DWORD last_error;
- last_error = GetLastError();
-#else
struct timeval tv;
-#endif
if(!pal_perf_enabled || pal_function_map==NULL || !pal_profile_on ) // haven't initialize, just quit.
@@ -1163,28 +1060,17 @@ PERFLogFunctionEntry(unsigned int pal_api_id, ULONGLONG *pal_perf_start_tick )
PERFFlushLog(local_info, FALSE);
}
-#ifndef PLATFORM_UNIX
- tv = GetTickCount();
-#else
gettimeofday(&tv, NULL);
-#endif
buf_off = local_info->buf_offset;
-#ifndef PLATFORM_UNIX
- bufused = snprintf(&write_buf[buf_off], PAL_PERF_MAX_LOGLINE, "----> %d %lu entry.\n", pal_api_id, tv );
-#else
bufused = snprintf(&write_buf[buf_off], PAL_PERF_MAX_LOGLINE, "----> %d %lu %06u entry.\n", pal_api_id, tv.tv_sec, tv.tv_usec );
-#endif
local_info->buf_offset += bufused;
}
if(nested_tracing)
local_info->profile_enabled = TRUE;
*pal_perf_start_tick = PERFGetTicks();
}
-#ifndef PLATFORM_UNIX
- SetLastError( last_error );
-#endif
return;
}
@@ -1223,14 +1109,8 @@ PERFLogFunctionExit(unsigned int pal_api_id, ULONGLONG *pal_perf_start_tick )
short bufused = 0;
DWORD off;
ULONGLONG duration = 0;
-#ifndef PLATFORM_UNIX
- DWORD timev;
- DWORD last_error;
- last_error = GetLastError();
-#else
struct timeval timev;
-#endif
if(!pal_perf_enabled || (pal_function_map == NULL) || !pal_profile_on ) // haven't initiallize yet, just quit.
return;
@@ -1257,17 +1137,10 @@ PERFLogFunctionExit(unsigned int pal_api_id, ULONGLONG *pal_perf_start_tick )
if(summary_only)
{
local_info->profile_enabled = TRUE;
-#ifndef PLATFORM_UNIX
- SetLastError( last_error );
-#endif
return;
}
-#ifndef PLATFORM_UNIX
- timev = GetTickCount();
-#else
gettimeofday(&timev, NULL);
-#endif
buf = local_info->pal_write_buf;
if(local_info->buf_offset >= PAL_PERF_BUFFER_FULL)
@@ -1276,17 +1149,10 @@ PERFLogFunctionExit(unsigned int pal_api_id, ULONGLONG *pal_perf_start_tick )
}
off = local_info->buf_offset;
-#ifndef PLATFORM_UNIX
- bufused = snprintf(&buf[off], PAL_PERF_MAX_LOGLINE, "<---- %d %lu exit. \n", pal_api_id, timev);
-#else
bufused = snprintf(&buf[off], PAL_PERF_MAX_LOGLINE, "<---- %d %lu %06u exit. \n", pal_api_id, timev.tv_sec, timev.tv_usec );
-#endif
local_info->buf_offset += bufused;
local_info->profile_enabled = TRUE;
}
-#ifndef PLATFORM_UNIX
- SetLastError( last_error );
-#endif
return;
}
@@ -1295,10 +1161,6 @@ PERFNoLatencyProfileEntry(unsigned int pal_api_id )
{
pal_perf_thread_info * local_info=NULL;
pal_perf_api_info * table;
-#ifndef PLATFORM_UNIX
- DWORD last_error;
- last_error = GetLastError();
-#endif
if(!pal_perf_enabled || pal_function_map==NULL || !pal_profile_on ) // haven't initialize, just quit.
return;
@@ -1307,9 +1169,6 @@ PERFNoLatencyProfileEntry(unsigned int pal_api_id )
local_info= (pal_perf_thread_info * )pthread_getspecific(PERF_tlsTableKey);
if (local_info==NULL )
{
-#ifndef PLATFORM_UNIX
- SetLastError( last_error );
-#endif
return;
}
else{
@@ -1317,9 +1176,6 @@ PERFNoLatencyProfileEntry(unsigned int pal_api_id )
table[pal_api_id].entries++;
}
}
-#ifndef PLATFORM_UNIX
- SetLastError( last_error );
-#endif
return;
}
@@ -1328,10 +1184,6 @@ void
PERFEnableThreadProfile(BOOL isInternal)
{
pal_perf_thread_info * local_info;
-#ifndef PLATFORM_UNIX
- DWORD last_error;
- last_error = GetLastError();
-#endif
if (!pal_perf_enabled)
return;
if (NULL != (local_info = (pal_perf_thread_info*)pthread_getspecific(PERF_tlsTableKey)))
@@ -1341,9 +1193,6 @@ PERFEnableThreadProfile(BOOL isInternal)
local_info->start_ticks = PERFGetTicks();
}
}
-#ifndef PLATFORM_UNIX
- SetLastError( last_error );
-#endif
}
@@ -1351,10 +1200,6 @@ void
PERFDisableThreadProfile(BOOL isInternal)
{
pal_perf_thread_info * local_info;
-#ifndef PLATFORM_UNIX
- DWORD last_error;
- last_error = GetLastError();
-#endif
if (!pal_perf_enabled)
return;
if (NULL != (local_info = (pal_perf_thread_info*)pthread_getspecific(PERF_tlsTableKey)))
@@ -1364,9 +1209,6 @@ PERFDisableThreadProfile(BOOL isInternal)
local_info->total_duration = PERFGetTicks() - local_info->start_ticks;
}
}
-#ifndef PLATFORM_UNIX
- SetLastError( last_error );
-#endif
}
@@ -1406,29 +1248,17 @@ static
char *
PERFIsValidPath( const char * path )
{
-#ifndef PLATFORM_UNIX
- DWORD result;
-#else
DIR * dir;
-#endif
if(( path==NULL) || (strlen(path)==0))
return NULL;
-#ifndef PLATFORM_UNIX
- result = GetFileAttributesA( path );
- if ((result != INVALID_FILE_ATTRIBUTES) && (result & FILE_ATTRIBUTE_DIRECTORY))
- {
- return ((char *) path );
- }
-#else
dir = opendir(path);
if( dir!=NULL)
{
closedir(dir);
return ((char *)path);
}
-#endif
return NULL;
}
@@ -1508,13 +1338,6 @@ PAL_GetCpuTickCount(VOID)
return PERFGetTicks();
}
-#ifndef PLATFORM_UNIX
-#undef snprintf
-#undef MiscGetenv
-#undef pthread_key_t
-#undef pthread_getspecific
-#endif /* ifndef PLATFORM_UNIX definitions */
-
#endif /* PAL_PERF */
diff --git a/src/pal/src/misc/sysinfo.cpp b/src/pal/src/misc/sysinfo.cpp
index e7589e8583..3ccb35ab81 100644
--- a/src/pal/src/misc/sysinfo.cpp
+++ b/src/pal/src/misc/sysinfo.cpp
@@ -76,11 +76,6 @@ Revision History:
SET_DEFAULT_DEBUG_CHANNEL(MISC);
-#if defined(_HPUX_) && ( defined (_IA64_) || defined (__hppa__) )
-#include <sys/pstat.h>
-#include <sys/vmparam.h>
-#endif
-
#ifndef __APPLE__
#if HAVE_SYSCONF && HAVE__SC_AVPHYS_PAGES
#define SYSCONF_PAGES _SC_AVPHYS_PAGES
@@ -135,22 +130,11 @@ GetSystemInfo(
lpSystemInfo->dwActiveProcessorMask_PAL_Undefined = 0;
#if HAVE_SYSCONF
-#if defined(_HPUX_) && ( defined (_IA64_) || defined (__hppa__) )
- struct pst_dynamic psd;
- if (pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0) != -1) {
- nrcpus = psd.psd_proc_cnt;
- }
- else {
- ASSERT("pstat_getdynamic failed (%d)\n", errno);
- }
-
-#else // !__hppa__
nrcpus = sysconf(_SC_NPROCESSORS_ONLN);
if (nrcpus < 1)
{
ASSERT("sysconf failed for _SC_NPROCESSORS_ONLN (%d)\n", errno);
}
-#endif // __hppa__
#elif HAVE_SYSCTL
int rc;
size_t sz;
@@ -171,7 +155,7 @@ GetSystemInfo(
#ifdef VM_MAXUSER_ADDRESS
lpSystemInfo->lpMaximumApplicationAddress = (PVOID) VM_MAXUSER_ADDRESS;
-#elif defined(__sun__) || defined(_AIX) || defined(__hppa__) || ( defined (_IA64_) && defined (_HPUX_) ) || defined(__linux__)
+#elif defined(__linux__)
lpSystemInfo->lpMaximumApplicationAddress = (PVOID) (1ull << 47);
#elif defined(USERLIMIT)
lpSystemInfo->lpMaximumApplicationAddress = (PVOID) USERLIMIT;
diff --git a/src/pal/src/misc/utils.cpp b/src/pal/src/misc/utils.cpp
index 1e333d19ac..f0ff63439f 100644
--- a/src/pal/src/misc/utils.cpp
+++ b/src/pal/src/misc/utils.cpp
@@ -18,21 +18,21 @@ Abstract:
--*/
+#include "pal/dbgmsg.h"
+SET_DEFAULT_DEBUG_CHANNEL(MISC); // some headers have code with asserts, so do this first
+
#include "pal/palinternal.h"
#if HAVE_VM_ALLOCATE
#include <mach/message.h>
#endif //HAVE_VM_ALLOCATE
#include "pal/utils.h"
-#include "pal/dbgmsg.h"
#include "pal/file.h"
#include <errno.h>
#include <string.h>
-SET_DEFAULT_DEBUG_CHANNEL(MISC);
-
// In safemath.h, Template SafeInt uses macro _ASSERTE, which need to use variable
// defdbgchan defined by SET_DEFAULT_DEBUG_CHANNEL. Therefore, the include statement
// should be placed after the SET_DEFAULT_DEBUG_CHANNEL(MISC)
diff --git a/src/pal/src/safecrt/cruntime.h b/src/pal/src/safecrt/cruntime.h
index cdad474e53..7341a388b6 100644
--- a/src/pal/src/safecrt/cruntime.h
+++ b/src/pal/src/safecrt/cruntime.h
@@ -36,11 +36,11 @@
#endif /* defined (_SYSCRT) && defined (_WIN64) */
#if !defined (UNALIGNED)
-#if defined (_M_IA64) || defined (_M_AMD64)
+#if defined (_M_AMD64)
#define UNALIGNED __unaligned
-#else /* defined (_M_IA64) || defined (_M_AMD64) */
+#else /* defined (_M_AMD64) */
#define UNALIGNED
-#endif /* defined (_M_IA64) || defined (_M_AMD64) */
+#endif /* defined (_M_AMD64) */
#endif /* !defined (UNALIGNED) */
#ifdef _M_IX86
@@ -57,9 +57,9 @@
#define REG8
#define REG9
-#elif defined (_M_IA64) || defined (_M_AMD64)
+#elif defined (_M_AMD64)
/*
- * IA64
+ * AMD64
*/
#define REG1 register
#define REG2 register
@@ -71,7 +71,7 @@
#define REG8 register
#define REG9 register
-#else /* defined (_M_IA64) || defined (_M_AMD64) */
+#else /* defined (_M_AMD64) */
#pragma message ("Machine register set not defined")
@@ -89,7 +89,7 @@
#define REG8
#define REG9
-#endif /* defined (_M_IA64) || defined (_M_AMD64) */
+#endif /* defined (_M_AMD64) */
/*
* Are the macro definitions below still needed in this file?
diff --git a/src/pal/src/safecrt/sscanf_s.cpp b/src/pal/src/safecrt/sscanf_s.cpp
index 4f548bccc6..7a481b580f 100644
--- a/src/pal/src/safecrt/sscanf_s.cpp
+++ b/src/pal/src/safecrt/sscanf_s.cpp
@@ -21,7 +21,7 @@
typedef int (*INPUTFN)(miniFILE *, const unsigned char*, va_list);
typedef int (*WINPUTFN)(miniFILE *, const wchar_t*, va_list);
-
+extern size_t PAL_wcsnlen(const WCHAR* inString, size_t inMaxSize);
/***
*static int v[nw]scan_fn([w]inputfn, string, [count], format, ...)
@@ -115,7 +115,7 @@ static int __cdecl vwscan_fn (
miniFILE str;
miniFILE *infile = &str;
int retval;
- size_t count = wcsnlen(string, INT_MAX);
+ size_t count = PAL_wcsnlen(string, INT_MAX);
_VALIDATE_RETURN( (string != NULL), EINVAL, EOF);
_VALIDATE_RETURN( (format != NULL), EINVAL, EOF);
@@ -149,7 +149,7 @@ static int __cdecl vnwscan_fn (
miniFILE str;
miniFILE *infile = &str;
int retval;
- size_t length = wcsnlen(string, INT_MAX);
+ size_t length = PAL_wcsnlen(string, INT_MAX);
_VALIDATE_RETURN( (string != NULL), EINVAL, EOF);
_VALIDATE_RETURN( (format != NULL), EINVAL, EOF);
diff --git a/src/pal/src/safecrt/wcslen_s.cpp b/src/pal/src/safecrt/wcslen_s.cpp
index 4fd5371035..0688148b5d 100644
--- a/src/pal/src/safecrt/wcslen_s.cpp
+++ b/src/pal/src/safecrt/wcslen_s.cpp
@@ -42,7 +42,7 @@
*
*******************************************************************************/
-size_t __cdecl wcsnlen(const wchar_t *wcs, size_t maxsize)
+size_t __cdecl PAL_wcsnlen(const wchar_t *wcs, size_t maxsize)
{
size_t n;
diff --git a/src/pal/src/shmemory/shmemory.cpp b/src/pal/src/shmemory/shmemory.cpp
index 42e06be834..35dadd6b3a 100644
--- a/src/pal/src/shmemory/shmemory.cpp
+++ b/src/pal/src/shmemory/shmemory.cpp
@@ -189,10 +189,6 @@ SET_DEFAULT_DEBUG_CHANNEL(SHMEM);
#define SEGMENT_NAME_SUFFIX_LENGTH 10
-#if defined(_DEBUG) && defined(_HPUX_)
-#define TRACK_SHMLOCK_OWNERSHIP
-#endif // _DEBUG && _HPUX_
-
/*
SHMPTR structure :
High byte is SHM segment number
@@ -808,24 +804,6 @@ int SHMLock(void)
CHECK_CANARIES(header);
#endif // TRACK_SHMLOCK_OWNERSHIP
-#ifdef _HPUX_
- //
- // TODO: workaround for VSW # 381564
- //
- if (0 == tmp_pid && my_pid != header->spinlock)
- {
- ERROR("InterlockedCompareExchange returned the Comperand but "
- "failed to store the Exchange value to the Destination: "
- "looping again [my_pid=%u header->spinlock=%u tmp_pid=%u "
- "spincount=%d locking_thread=%u]\n", (DWORD)my_pid,
- (DWORD)header->spinlock, (DWORD)tmp_pid, (int)spincount,
- (HANDLE)locking_thread);
-
- // Keep looping
- tmp_pid = 42;
- }
-#endif // _HPUX_
-
if (0 == tmp_pid)
{
// Spinlock acquired: break out of the loop
@@ -964,31 +942,17 @@ int SHMRelease(void)
#endif // TRACK_SHMLOCK_OWNERSHIP
-#ifdef _HPUX_
- //
- // TODO: workaround for VSW # 381564
- //
- do
-#endif // _HPUX_
- {
- /* Make sure we don't touch the spinlock if we don't own it. We're
- supposed to own it if we get here, but just in case... */
- tmp_pid = InterlockedCompareExchange((LONG *) &header->spinlock, 0, my_pid);
+ /* Make sure we don't touch the spinlock if we don't own it. We're
+ supposed to own it if we get here, but just in case... */
+ tmp_pid = InterlockedCompareExchange((LONG *) &header->spinlock, 0, my_pid);
- if (tmp_pid != my_pid)
- {
- ASSERT("Process 0x%08x tried to release spinlock owned by process "
- "0x%08x! \n", my_pid, tmp_pid);
- PALCLeaveCriticalSection(&shm_critsec);
- return 0;
- }
+ if (tmp_pid != my_pid)
+ {
+ ASSERT("Process 0x%08x tried to release spinlock owned by process "
+ "0x%08x! \n", my_pid, tmp_pid);
+ PALCLeaveCriticalSection(&shm_critsec);
+ return 0;
}
-#ifdef _HPUX_
- //
- // TODO: workaround for VSW # 381564
- //
- while (my_pid == header->spinlock);
-#endif // _HPUX_
/* indicate no thread (in this process) holds the SHM lock */
locking_thread = 0;
diff --git a/src/pal/src/thread/process.cpp b/src/pal/src/thread/process.cpp
index a64bfb8ab1..ae069aec86 100644
--- a/src/pal/src/thread/process.cpp
+++ b/src/pal/src/thread/process.cpp
@@ -18,6 +18,9 @@ Abstract:
--*/
+#include "pal/dbgmsg.h"
+SET_DEFAULT_DEBUG_CHANNEL(PROCESS); // some headers have code with asserts, so do this first
+
#include "pal/procobj.hpp"
#include "pal/thread.hpp"
#include "pal/file.hpp"
@@ -29,7 +32,6 @@ Abstract:
#include "pal/init.h"
#include "pal/critsect.h"
#include "pal/debug.h"
-#include "pal/dbgmsg.h"
#include "pal/utils.h"
#include "pal/environ.h"
#include "pal/virtual.h"
@@ -67,8 +69,6 @@ Abstract:
using namespace CorUnix;
-SET_DEFAULT_DEBUG_CHANNEL(PROCESS);
-
CObjectType CorUnix::otProcess(
otiProcess,
NULL,
@@ -1453,7 +1453,7 @@ static uint64_t HashSemaphoreName(uint64_t a, uint64_t b)
#define HashSemaphoreName(a,b) a,b
#endif
-static const char* PipeNameFormat = "/tmp/clr-debug-pipe-%d-%llu-%s";
+static const char* PipeNameFormat = TEMP_DIRECTORY_PATH "clr-debug-pipe-%d-%llu-%s";
class PAL_RuntimeStartupHelper
{
@@ -1879,7 +1879,7 @@ Parameters:
None
Return value:
- TRUE - succeeded, FALSE - failed
+ TRUE - successfully launched by debugger, FALSE - not launched or some failure in the handshake
--*/
BOOL
PALAPI
@@ -1889,7 +1889,7 @@ PAL_NotifyRuntimeStarted()
char continueSemName[CLR_SEM_MAX_NAMELEN];
sem_t *startupSem = SEM_FAILED;
sem_t *continueSem = SEM_FAILED;
- BOOL result = TRUE;
+ BOOL launched = FALSE;
UINT64 processIdDisambiguationKey = 0;
GetProcessIdDisambiguationKey(gPID, &processIdDisambiguationKey);
@@ -1899,9 +1899,7 @@ PAL_NotifyRuntimeStarted()
TRACE("PAL_NotifyRuntimeStarted opening continue '%s' startup '%s'\n", continueSemName, startupSemName);
-
- // Open the debugger startup semaphore. If it doesn't exists, then we do nothing and
- // the function is successful.
+ // Open the debugger startup semaphore. If it doesn't exists, then we do nothing and return
startupSem = sem_open(startupSemName, 0);
if (startupSem == SEM_FAILED)
{
@@ -1913,7 +1911,6 @@ PAL_NotifyRuntimeStarted()
if (continueSem == SEM_FAILED)
{
ASSERT("sem_open(%s) failed: %d (%s)\n", continueSemName, errno, strerror(errno));
- result = FALSE;
goto exit;
}
@@ -1921,7 +1918,6 @@ PAL_NotifyRuntimeStarted()
if (sem_post(startupSem) != 0)
{
ASSERT("sem_post(startupSem) failed: errno is %d (%s)\n", errno, strerror(errno));
- result = FALSE;
goto exit;
}
@@ -1929,10 +1925,12 @@ PAL_NotifyRuntimeStarted()
if (sem_wait(continueSem) != 0)
{
ASSERT("sem_wait(continueSem) failed: errno is %d (%s)\n", errno, strerror(errno));
- result = FALSE;
goto exit;
}
+ // Returns that the runtime was successfully launched for debugging
+ launched = TRUE;
+
exit:
if (startupSem != SEM_FAILED)
{
@@ -1942,7 +1940,7 @@ exit:
{
sem_close(continueSem);
}
- return result;
+ return launched;
}
/*++
diff --git a/src/pal/src/thread/thread.cpp b/src/pal/src/thread/thread.cpp
index 566ef855b4..53283320c5 100644
--- a/src/pal/src/thread/thread.cpp
+++ b/src/pal/src/thread/thread.cpp
@@ -34,6 +34,8 @@ SET_DEFAULT_DEBUG_CHANNEL(THREAD); // some headers have code with asserts, so do
#include "pal/module.h"
#include "pal/environ.h"
#include "pal/init.h"
+#include "pal/utils.h"
+#include "pal/virtual.h"
#if defined(__NetBSD__) && !HAVE_PTHREAD_GETCPUCLOCKID
#include <sys/cdefs.h>
@@ -77,13 +79,6 @@ using namespace CorUnix;
/* ------------------- Definitions ------------------------------*/
-// The default stack size of a newly created thread (currently 256KB)
-// when the dwStackSize parameter of PAL_CreateThread()
-// is zero. This value can be set by setting the
-// environment variable PAL_THREAD_DEFAULT_STACK_SIZE
-// (the value should be in bytes and in hex).
-DWORD CPalThread::s_dwDefaultThreadStackSize = 256*1024;
-
/* list of free CPalThread objects */
static Volatile<CPalThread*> free_threads_list = NULL;
@@ -528,6 +523,7 @@ CorUnix::InternalCreateThread(
#endif // PTHREAD_CREATE_MODIFIES_ERRNO
BOOL fHoldingProcessLock = FALSE;
int iError = 0;
+ size_t alignedStackSize;
if (0 != terminator)
{
@@ -573,7 +569,24 @@ CorUnix::InternalCreateThread(
palError = ERROR_INVALID_PARAMETER;
goto EXIT;
}
-
+
+ alignedStackSize = dwStackSize;
+ if (alignedStackSize != 0)
+ {
+ // Some systems require the stack size to be aligned to the page size
+ if (sizeof(alignedStackSize) <= sizeof(dwStackSize) && alignedStackSize + (VIRTUAL_PAGE_SIZE - 1) < alignedStackSize)
+ {
+ // When coming here from the public API surface, the incoming value is originally a nonnegative signed int32, so
+ // this shouldn't happen
+ ASSERT(
+ "Couldn't align the requested stack size (%Iu) to the page size because the stack size was too large\n",
+ alignedStackSize);
+ palError = ERROR_INVALID_PARAMETER;
+ goto EXIT;
+ }
+ alignedStackSize = ALIGN_UP(alignedStackSize, VIRTUAL_PAGE_SIZE);
+ }
+
// Ignore the STACK_SIZE_PARAM_IS_A_RESERVATION flag
dwCreationFlags &= ~STACK_SIZE_PARAM_IS_A_RESERVATION;
@@ -616,42 +629,34 @@ CorUnix::InternalCreateThread(
fAttributesInitialized = TRUE;
/* adjust the stack size if necessary */
- if (0 != pthread_attr_getstacksize(&pthreadAttr, &pthreadStackSize))
+ if (alignedStackSize != 0)
{
- ERROR("couldn't set thread stack size\n");
- palError = ERROR_INTERNAL_ERROR;
- goto EXIT;
- }
-
- TRACE("default pthread stack size is %d, caller requested %d (default is %d)\n",
- pthreadStackSize, dwStackSize, CPalThread::s_dwDefaultThreadStackSize);
-
- if (0 == dwStackSize)
- {
- dwStackSize = CPalThread::s_dwDefaultThreadStackSize;
- }
-
#ifdef PTHREAD_STACK_MIN
- if (PTHREAD_STACK_MIN > pthreadStackSize)
- {
- WARN("default stack size is reported as %d, but PTHREAD_STACK_MIN is "
- "%d\n", pthreadStackSize, PTHREAD_STACK_MIN);
- }
-#endif
-
- if (pthreadStackSize < dwStackSize)
- {
- TRACE("setting thread stack size to %d\n", dwStackSize);
- if (0 != pthread_attr_setstacksize(&pthreadAttr, dwStackSize))
+ const size_t MinStackSize = PTHREAD_STACK_MIN;
+#else // !PTHREAD_STACK_MIN
+ const size_t MinStackSize = 64 * 1024; // this value is typically accepted by pthread_attr_setstacksize()
+#endif // PTHREAD_STACK_MIN
+ _ASSERTE(IS_ALIGNED(MinStackSize, VIRTUAL_PAGE_SIZE));
+ if (alignedStackSize < MinStackSize)
{
- ERROR("couldn't set pthread stack size to %d\n", dwStackSize);
+ // Adjust the stack size to a minimum value that is likely to be accepted by pthread_attr_setstacksize(). If this
+ // function fails, typically the caller will end up throwing OutOfMemoryException under the assumption that the
+ // requested stack size is too large or the system does not have sufficient memory to create a thread. Try to
+ // prevent failing just just because the stack size value is too low.
+ alignedStackSize = MinStackSize;
+ }
+
+ TRACE("setting thread stack size to %Iu\n", alignedStackSize);
+ if (0 != pthread_attr_setstacksize(&pthreadAttr, alignedStackSize))
+ {
+ ERROR("couldn't set pthread stack size to %Iu\n", alignedStackSize);
palError = ERROR_INTERNAL_ERROR;
goto EXIT;
}
}
else
{
- TRACE("using the system default thread stack size of %d\n", pthreadStackSize);
+ TRACE("using the system default thread stack size\n");
}
#if HAVE_THREAD_SELF || HAVE__LWP_SELF
@@ -1755,39 +1760,6 @@ fail:
return NULL;
}
-
-#define PAL_THREAD_DEFAULT_STACK_SIZE "PAL_THREAD_DEFAULT_STACK_SIZE"
-
-PAL_ERROR
-CorUnix::InitializeGlobalThreadData(
- void
- )
-{
- PAL_ERROR palError = NO_ERROR;
- char *pszStackSize = NULL;
-
- //
- // Read in the environment to see whether we need to change the default
- // thread stack size.
- //
- pszStackSize = EnvironGetenv(PAL_THREAD_DEFAULT_STACK_SIZE);
- if (NULL != pszStackSize)
- {
- // Environment variable exists
- char *pszEnd;
- DWORD dw = PAL_strtoul(pszStackSize, &pszEnd, 16); // treat it as hex
- if ( (pszStackSize != pszEnd) && (0 != dw) )
- {
- CPalThread::s_dwDefaultThreadStackSize = dw;
- }
-
- free(pszStackSize);
- }
-
- return palError;
-}
-
-
/*++
Function:
CreateThreadData
diff --git a/src/pal/src/thread/threadsusp.cpp b/src/pal/src/thread/threadsusp.cpp
index b31b88da59..c7787bef68 100644
--- a/src/pal/src/thread/threadsusp.cpp
+++ b/src/pal/src/thread/threadsusp.cpp
@@ -36,16 +36,6 @@ Revision History:
#include <limits.h>
#include <debugmacrosext.h>
-#if defined(_AIX)
-// AIX requires explicit definition of the union semun (see semctl man page)
-union semun
-{
- int val;
- struct semid_ds * buf;
- unsigned short * array;
-};
-#endif
-
using namespace CorUnix;
/* ------------------- Definitions ------------------------------*/
diff --git a/src/pal/tests/palsuite/CMakeLists.txt b/src/pal/tests/palsuite/CMakeLists.txt
index 235b695961..0ea8969bab 100644
--- a/src/pal/tests/palsuite/CMakeLists.txt
+++ b/src/pal/tests/palsuite/CMakeLists.txt
@@ -4,6 +4,16 @@ project(PALTESTSUITE)
include_directories(${PALTESTSUITE_SOURCE_DIR}/common)
+# All test will link against these libraries:
+# pthread and m are part of the Android C library (bionic),
+# so we don't need to link them seperately
+if(NOT CLR_CMAKE_PLATFORM_ANDROID)
+ list(APPEND COMMON_TEST_LIBRARIES pthread)
+ list(APPEND COMMON_TEST_LIBRARIES m)
+endif()
+
+list(APPEND COMMON_TEST_LIBRARIES coreclrpal)
+
add_compile_options(-Wno-incompatible-pointer-types-discards-qualifiers)
add_compile_options(-Wno-int-to-void-pointer-cast)
diff --git a/src/pal/tests/palsuite/c_runtime/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/CMakeLists.txt
index cf062530eb..7a6b2cd919 100644
--- a/src/pal/tests/palsuite/c_runtime/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/CMakeLists.txt
@@ -148,7 +148,6 @@ add_subdirectory(_fullpath)
# TODO: make this test compile
# add_subdirectory(_gcvt)
-add_subdirectory(_getw)
add_subdirectory(_isnan)
add_subdirectory(_isnanf)
add_subdirectory(_itow)
@@ -157,7 +156,6 @@ add_subdirectory(_mbsinc)
add_subdirectory(_mbsninc)
add_subdirectory(_open_osfhandle)
add_subdirectory(_putenv)
-add_subdirectory(_putw)
add_subdirectory(_rotl)
add_subdirectory(_rotr)
add_subdirectory(_snprintf_s)
@@ -165,7 +163,7 @@ add_subdirectory(_snwprintf_s)
add_subdirectory(_stricmp)
add_subdirectory(_strlwr)
add_subdirectory(_strnicmp)
-add_subdirectory(_vsnprintf)
+add_subdirectory(_vsnprintf_s)
add_subdirectory(_vsnwprintf_s)
add_subdirectory(_wcsicmp)
add_subdirectory(_wcslwr)
diff --git a/src/pal/tests/palsuite/c_runtime/__iscsym/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/__iscsym/test1/CMakeLists.txt
index b4421e77a1..4dd4cf13f0 100644
--- a/src/pal/tests/palsuite/c_runtime/__iscsym/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/__iscsym/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_iscsym_test1
add_dependencies(paltest_iscsym_test1 coreclrpal)
target_link_libraries(paltest_iscsym_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_alloca/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_alloca/test1/CMakeLists.txt
index 434633be20..97a351c802 100644
--- a/src/pal/tests/palsuite/c_runtime/_alloca/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_alloca/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_alloca_test1
add_dependencies(paltest_alloca_test1 coreclrpal)
target_link_libraries(paltest_alloca_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_ecvt/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_ecvt/test1/CMakeLists.txt
index e78a802723..152271cf59 100644
--- a/src/pal/tests/palsuite/c_runtime/_ecvt/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_ecvt/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_ecvt_test1
add_dependencies(paltest_ecvt_test1 coreclrpal)
target_link_libraries(paltest_ecvt_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_fdopen/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_fdopen/test1/CMakeLists.txt
index 60b036f44d..a389b8330a 100644
--- a/src/pal/tests/palsuite/c_runtime/_fdopen/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_fdopen/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fdopen_test1
add_dependencies(paltest_fdopen_test1 coreclrpal)
target_link_libraries(paltest_fdopen_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_finite/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_finite/test1/CMakeLists.txt
index ac2f25d85a..a376d45be8 100644
--- a/src/pal/tests/palsuite/c_runtime/_finite/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_finite/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_finite_test1
add_dependencies(paltest_finite_test1 coreclrpal)
target_link_libraries(paltest_finite_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_finitef/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_finitef/test1/CMakeLists.txt
index 9ef630fbb2..a9785e0620 100644
--- a/src/pal/tests/palsuite/c_runtime/_finitef/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_finitef/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_finitef_test1
add_dependencies(paltest_finitef_test1 coreclrpal)
target_link_libraries(paltest_finitef_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_fullpath/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_fullpath/test1/CMakeLists.txt
index 0c9029f6e2..2915738103 100644
--- a/src/pal/tests/palsuite/c_runtime/_fullpath/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_fullpath/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fullpath_test1
add_dependencies(paltest_fullpath_test1 coreclrpal)
target_link_libraries(paltest_fullpath_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_gcvt/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_gcvt/test1/CMakeLists.txt
index 47dcb95754..25c652dfcb 100644
--- a/src/pal/tests/palsuite/c_runtime/_gcvt/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_gcvt/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gcvt_test1
add_dependencies(paltest_gcvt_test1 coreclrpal)
target_link_libraries(paltest_gcvt_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_gcvt/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_gcvt/test2/CMakeLists.txt
index 5b0f5608f3..b77bff9cdd 100644
--- a/src/pal/tests/palsuite/c_runtime/_gcvt/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_gcvt/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gcvt_test2
add_dependencies(paltest_gcvt_test2 coreclrpal)
target_link_libraries(paltest_gcvt_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_getw/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_getw/CMakeLists.txt
deleted file mode 100644
index f6aa0cb2d9..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_getw/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12.2)
-
-add_subdirectory(test1)
-
diff --git a/src/pal/tests/palsuite/c_runtime/_getw/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_getw/test1/CMakeLists.txt
deleted file mode 100644
index 4f763bed6b..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_getw/test1/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12.2)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(SOURCES
- test1.cpp
-)
-
-add_executable(paltest_getw_test1
- ${SOURCES}
-)
-
-add_dependencies(paltest_getw_test1 coreclrpal)
-
-target_link_libraries(paltest_getw_test1
- pthread
- m
- coreclrpal
-)
diff --git a/src/pal/tests/palsuite/c_runtime/_getw/test1/test.dat b/src/pal/tests/palsuite/c_runtime/_getw/test1/test.dat
deleted file mode 100644
index b20eae054c..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_getw/test1/test.dat
+++ /dev/null
Binary files differ
diff --git a/src/pal/tests/palsuite/c_runtime/_getw/test1/test1.cpp b/src/pal/tests/palsuite/c_runtime/_getw/test1/test1.cpp
deleted file mode 100644
index 34ce4ee7de..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_getw/test1/test1.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================================
-**
-** Source: test1.c
-**
-** Purpose: Several integers are read from a previously written file
-** using _getw. The test passes if the values read match those known to
-** be in the file.
-**
-**
-**==========================================================================*/
-
-#include <palsuite.h>
-
-/*Tests _getw using a previously written data file */
-int __cdecl main(int argc, char **argv)
-{
- const int testValues[] =
- {
- 0,
- 1,
- -1,
- 0x7FFFFFFF, /* largest positive integer on 32 bit systems */
- 0x80000000, /* largest negative integer on 32 bit systems */
- 0xFFFFFFFF,
- 0xFFFFAAAA
- };
-
- int i = 0;
- int input = 0;
-
- const char filename[] = "test.dat";
-
-
- FILE *fp = NULL;
-
- /*
- * Initialize the PAL and return FAIL if this fails
- */
- if (0 != (PAL_Initialize(argc, argv)))
- {
- return FAIL;
- }
-
- /* write the file that we will use to test */
-
-
- /*
- Don't uncomment this code, it was used to create the data file
- initially on windows, but if it is run on all test platforms, the
- tests will always pass.
-
- fp = fopen(filename, "w");
- if (fp == NULL)
- {
- Fail("Unable to open file for write.\n");
- }
- for (i = 0; i < sizeof(testValues) / sizeof(testValues[0]); i++)
- {
- _putw(testValues[i], fp);
- }
-
- if (fclose(fp) != 0)
- {
- Fail("Error closing file after writing to it with _putw.\n");
- }
- */
-
-
- /*Now read values back from the file and see if they match.*/
- fp = fopen(filename, "r");
- if (fp == NULL)
- {
- Fail ("Unable to open file for read.\n");
- }
- for (i = 0; i < sizeof(testValues) / sizeof(testValues[0]); i++)
- {
- input = _getw(fp);
- if (VAL32(input) != testValues[i])
- {
- Fail ("_getw did not get the expected values when reading "
- "from a file.\n");
- }
- }
-
- if (fclose(fp) != 0)
- {
- Fail ("Error closing file after reading from it with _getw\n");
- }
- PAL_Terminate();
- return PASS;
-}
-
diff --git a/src/pal/tests/palsuite/c_runtime/_getw/test1/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_getw/test1/testinfo.dat
deleted file mode 100644
index 4044dadbcc..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_getw/test1/testinfo.dat
+++ /dev/null
@@ -1,15 +0,0 @@
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-# See the LICENSE file in the project root for more information.
-
-Version = 1.0
-Section = C Runtime
-Function = _getw
-Name = Positive Test for _getw
-TYPE = DEFAULT
-EXE1 = test1
-Description
-=Several integers are read from a previously written file
-=using _getw. The test passes if the values read match those known to
-=be in the file.
-
diff --git a/src/pal/tests/palsuite/c_runtime/_isnan/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_isnan/test1/CMakeLists.txt
index 106ccb93d7..8c949ed001 100644
--- a/src/pal/tests/palsuite/c_runtime/_isnan/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_isnan/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isnan_test1
add_dependencies(paltest_isnan_test1 coreclrpal)
target_link_libraries(paltest_isnan_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_isnanf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_isnanf/test1/CMakeLists.txt
index a8d42aa975..485c30ec3f 100644
--- a/src/pal/tests/palsuite/c_runtime/_isnanf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_isnanf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isnanf_test1
add_dependencies(paltest_isnanf_test1 coreclrpal)
target_link_libraries(paltest_isnanf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_itow/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_itow/test1/CMakeLists.txt
index 2c5d57bd34..bbeeb484e0 100644
--- a/src/pal/tests/palsuite/c_runtime/_itow/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_itow/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_itow_test1
add_dependencies(paltest_itow_test1 coreclrpal)
target_link_libraries(paltest_itow_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_mbsdec/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_mbsdec/test1/CMakeLists.txt
index b016f27982..96319ac3b0 100644
--- a/src/pal/tests/palsuite/c_runtime/_mbsdec/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_mbsdec/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_mbsdec_test1
add_dependencies(paltest_mbsdec_test1 coreclrpal)
target_link_libraries(paltest_mbsdec_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_mbsinc/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_mbsinc/test1/CMakeLists.txt
index c7325b9513..7e3a015e5f 100644
--- a/src/pal/tests/palsuite/c_runtime/_mbsinc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_mbsinc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_mbsinc_test1
add_dependencies(paltest_mbsinc_test1 coreclrpal)
target_link_libraries(paltest_mbsinc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_mbsninc/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_mbsninc/test1/CMakeLists.txt
index 81c6c23a53..26a44c9010 100644
--- a/src/pal/tests/palsuite/c_runtime/_mbsninc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_mbsninc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_mbsninc_test1
add_dependencies(paltest_mbsninc_test1 coreclrpal)
target_link_libraries(paltest_mbsninc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_open_osfhandle/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_open_osfhandle/test1/CMakeLists.txt
index f4fedb61ae..503a6d928c 100644
--- a/src/pal/tests/palsuite/c_runtime/_open_osfhandle/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_open_osfhandle/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_open_osfhandle_test1
add_dependencies(paltest_open_osfhandle_test1 coreclrpal)
target_link_libraries(paltest_open_osfhandle_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_open_osfhandle/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_open_osfhandle/test2/CMakeLists.txt
index 6086868de2..e37cec2db3 100644
--- a/src/pal/tests/palsuite/c_runtime/_open_osfhandle/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_open_osfhandle/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_open_osfhandle_test2
add_dependencies(paltest_open_osfhandle_test2 coreclrpal)
target_link_libraries(paltest_open_osfhandle_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_putenv/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_putenv/test1/CMakeLists.txt
index 9096bc1033..e49d53f82a 100644
--- a/src/pal/tests/palsuite/c_runtime/_putenv/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_putenv/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_putenv_test1
add_dependencies(paltest_putenv_test1 coreclrpal)
target_link_libraries(paltest_putenv_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_putenv/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_putenv/test2/CMakeLists.txt
index ad99eba373..6c6d139b77 100644
--- a/src/pal/tests/palsuite/c_runtime/_putenv/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_putenv/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_putenv_test2
add_dependencies(paltest_putenv_test2 coreclrpal)
target_link_libraries(paltest_putenv_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_putenv/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_putenv/test3/CMakeLists.txt
index fc97b951b3..2d98fd18ec 100644
--- a/src/pal/tests/palsuite/c_runtime/_putenv/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_putenv/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_putenv_test3
add_dependencies(paltest_putenv_test3 coreclrpal)
target_link_libraries(paltest_putenv_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_putenv/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_putenv/test4/CMakeLists.txt
index 3881626d01..9bcd973558 100644
--- a/src/pal/tests/palsuite/c_runtime/_putenv/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_putenv/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_putenv_test4
add_dependencies(paltest_putenv_test4 coreclrpal)
target_link_libraries(paltest_putenv_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_putw/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_putw/CMakeLists.txt
deleted file mode 100644
index f6aa0cb2d9..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_putw/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12.2)
-
-add_subdirectory(test1)
-
diff --git a/src/pal/tests/palsuite/c_runtime/_putw/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_putw/test1/CMakeLists.txt
deleted file mode 100644
index 78833d4e13..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_putw/test1/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12.2)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(SOURCES
- test1.cpp
-)
-
-add_executable(paltest_putw_test1
- ${SOURCES}
-)
-
-add_dependencies(paltest_putw_test1 coreclrpal)
-
-target_link_libraries(paltest_putw_test1
- pthread
- m
- coreclrpal
-)
diff --git a/src/pal/tests/palsuite/c_runtime/_putw/test1/test1.cpp b/src/pal/tests/palsuite/c_runtime/_putw/test1/test1.cpp
deleted file mode 100644
index 02b7cc7a49..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_putw/test1/test1.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================================
-**
-** Source: test1.c
-**
-** Purpose: Writes a series of integers to a file, test.dat,
-** then verifies the results.
-**
-** Dependency: fopen(...)
-** fclose(...)
-** CloseHandle(...)
-** DeleteFileA(...)
-** _getw(...)
-**
-**
-**
-**==========================================================================*/
-
-
-#include <palsuite.h>
-
-const char testFileName[] = "test.dat";
-
-static void Cleanup(HANDLE hFile)
-{
- if (fclose((PAL_FILE*)hFile))
- {
- Trace("_putw: ERROR -> Unable to close file \"%s\".\n",
- testFileName);
- }
- if (!DeleteFileA(testFileName))
- {
- Trace("_putw: ERROR -> Unable to delete file \"%s\". ",
- "GetLastError returned %u.\n",
- testFileName,
- GetLastError());
- }
-}
-
-
-int __cdecl main(int argc, char **argv)
-{
-
- FILE * pfTest = NULL;
- int testArray[] = {0,1,-1,0x7FFFFFFF,0x80000000,0xFFFFFFFF,0xFFFFAAAA};
- int i = 0;
- int retValue = 0;
-
- /*
- * Initialize the PAL and return FAIL if this fails
- */
- if (0 != (PAL_Initialize(argc, argv)))
- {
- return FAIL;
- }
-
- /*write the file that we will use to test */
- pfTest = fopen(testFileName, "w");
- if (pfTest == NULL)
- {
- Fail ("Unable to write test file.\n");
- }
-
- for (i = 0; i < sizeof(testArray)/sizeof(int) ; i++)
- {
- _putw(testArray[i], pfTest);
-
- if( ferror( pfTest ) )
- {
- Cleanup(pfTest);
- Fail( "Error:in _putw -> error has occurred in the "
- "stream while writing to the file: \"test.dat\"\n");
- }
-
- }
-
- if (fclose(pfTest) != 0)
- {
- Cleanup(pfTest);
- Fail ("Error closing file after writing with _putw(..).\n");
- }
-
- /*open the new test file and compare*/
- pfTest = fopen(testFileName, "r");
- if (pfTest == NULL)
- {
- Fail ("Error opening \"%s\", which is odd, since I just finished "
- "creating that file.\n", testFileName);
- }
- retValue =_getw( pfTest );
- i = 0;
- while(retValue != EOF)
- {
- if(retValue != testArray[i])
- {
- Cleanup(pfTest);
- Fail ("Integers written by _putw are not in the correct format\n",
- testFileName);
- }
- retValue = _getw( pfTest );
- i++ ;
- }
-
- Cleanup(pfTest);
- PAL_Terminate();
- return PASS;
-}
-
-
diff --git a/src/pal/tests/palsuite/c_runtime/_putw/test1/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_putw/test1/testinfo.dat
deleted file mode 100644
index 3007b82407..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_putw/test1/testinfo.dat
+++ /dev/null
@@ -1,13 +0,0 @@
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-# See the LICENSE file in the project root for more information.
-
-Version = 1.0
-Section = C Runtime
-Function = _putw
-Name = Positive test for _putw
-TYPE = DEFAULT
-EXE1 = test1
-Description
-= Several integers are written to a new file using _putw. This file is
-= closed, reopened and read from to verify the writes were successful.
diff --git a/src/pal/tests/palsuite/c_runtime/_rotl/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_rotl/test1/CMakeLists.txt
index bafaa23732..8aed25d776 100644
--- a/src/pal/tests/palsuite/c_runtime/_rotl/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_rotl/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_rotl_test1
add_dependencies(paltest_rotl_test1 coreclrpal)
target_link_libraries(paltest_rotl_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_rotr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_rotr/test1/CMakeLists.txt
index c0c76feb36..ff84c62fb1 100644
--- a/src/pal/tests/palsuite/c_runtime/_rotr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_rotr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_rotr_test1
add_dependencies(paltest_rotr_test1 coreclrpal)
target_link_libraries(paltest_rotr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test1/CMakeLists.txt
index 9e4c671ec8..7ec4817f61 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test1
add_dependencies(paltest_snprintf_test1 coreclrpal)
target_link_libraries(paltest_snprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test10/CMakeLists.txt
index 57e7fb16d3..8a61bc45e6 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test10
add_dependencies(paltest_snprintf_test10 coreclrpal)
target_link_libraries(paltest_snprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test11/CMakeLists.txt
index 4fc179c5a8..5fe253463f 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test11
add_dependencies(paltest_snprintf_test11 coreclrpal)
target_link_libraries(paltest_snprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test12/CMakeLists.txt
index a35609eb57..9eade54151 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test12
add_dependencies(paltest_snprintf_test12 coreclrpal)
target_link_libraries(paltest_snprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test13/CMakeLists.txt
index 3bf986e851..1e31d2c94c 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test13
add_dependencies(paltest_snprintf_test13 coreclrpal)
target_link_libraries(paltest_snprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test14/CMakeLists.txt
index 985303ecf8..1af6846df8 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test14
add_dependencies(paltest_snprintf_test14 coreclrpal)
target_link_libraries(paltest_snprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test15/CMakeLists.txt
index c7f5796089..8287fd37d6 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test15
add_dependencies(paltest_snprintf_test15 coreclrpal)
target_link_libraries(paltest_snprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test16/CMakeLists.txt
index 9a224bc23b..b45696e78d 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test16
add_dependencies(paltest_snprintf_test16 coreclrpal)
target_link_libraries(paltest_snprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test17/CMakeLists.txt
index 3a8a349c84..60d34ebb4c 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test17
add_dependencies(paltest_snprintf_test17 coreclrpal)
target_link_libraries(paltest_snprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test18/CMakeLists.txt
index 96e39e8f41..2bd5200e68 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test18
add_dependencies(paltest_snprintf_test18 coreclrpal)
target_link_libraries(paltest_snprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test19/CMakeLists.txt
index be3570f163..1d9e283eb0 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test19
add_dependencies(paltest_snprintf_test19 coreclrpal)
target_link_libraries(paltest_snprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/CMakeLists.txt
index 11d18e61c3..134aeaadd9 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test2
add_dependencies(paltest_snprintf_test2 coreclrpal)
target_link_libraries(paltest_snprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/test2.cpp
index e58669466f..54ef80bae3 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test2/test2.cpp
@@ -38,6 +38,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest("foo %5.2s", "bar", "foo ba");
DoStrTest("foo %-5s", "bar", "foo bar ");
DoStrTest("foo %05s", "bar", "foo 00bar");
+ DoStrTest("foo %s", NULL, "foo (null)");
+ DoStrTest("foo %hs", NULL, "foo (null)");
+ DoWStrTest("foo %ls", NULL, "foo (null)");
+ DoWStrTest("foo %ws", NULL, "foo (null)");
+ DoStrTest("foo %Ls", NULL, "foo (null)");
+ DoStrTest("foo %I64s", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/CMakeLists.txt
index b8d4178962..198f725a0c 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test3
add_dependencies(paltest_snprintf_test3 coreclrpal)
target_link_libraries(paltest_snprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/test3.cpp
index 3c52b44246..99c25a654b 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test3/test3.cpp
@@ -39,6 +39,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest("foo %5.2S", convert("bar"), "foo ba");
DoWStrTest("foo %-5S", convert("bar"), "foo bar ");
DoWStrTest("foo %05S", convert("bar"), "foo 00bar");
+ DoWStrTest("foo %S", NULL, "foo (null)");
+ DoStrTest("foo %hS", NULL, "foo (null)");
+ DoWStrTest("foo %lS", NULL, "foo (null)");
+ DoWStrTest("foo %wS", NULL, "foo (null)");
+ DoWStrTest("foo %LS", NULL, "foo (null)");
+ DoWStrTest("foo %I64S", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/CMakeLists.txt
index 568b7122de..81c3c1a0fe 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test4
add_dependencies(paltest_snprintf_test4 coreclrpal)
target_link_libraries(paltest_snprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/test4.cpp
index 216557f10a..7c0615213c 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test4/test4.cpp
@@ -33,7 +33,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
- #if defined(BIT64) && defined(PLATFORM_UNIX)
+ #if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest("%p", NULL, "NULL", "0000000000000000");
DoPointerTest("%p", ptr, "pointer to 0x123456", "0000000000123456");
@@ -61,7 +61,7 @@ int __cdecl main(int argc, char *argv[])
DoPointerTest("%Lp", ptr, "pointer to 0x123456", "00123456");
DoI64Test("%I64p", lptr, "pointer to 0x1234567887654321",
"1234567887654321");
- #endif //defined(BIT64) && defined(PLATFORM_UNIX)
+ #endif //defined(BIT64)
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test6/CMakeLists.txt
index 820cc66d55..08ead969f1 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test6
add_dependencies(paltest_snprintf_test6 coreclrpal)
target_link_libraries(paltest_snprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test7/CMakeLists.txt
index a2af7c4a8c..71564eacf6 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test7
add_dependencies(paltest_snprintf_test7 coreclrpal)
target_link_libraries(paltest_snprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test8/CMakeLists.txt
index 53545c5dbf..377883308b 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test8
add_dependencies(paltest_snprintf_test8 coreclrpal)
target_link_libraries(paltest_snprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test9/CMakeLists.txt
index 33ca9db7a8..90a5403de7 100644
--- a/src/pal/tests/palsuite/c_runtime/_snprintf_s/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snprintf_s/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snprintf_test9
add_dependencies(paltest_snprintf_test9 coreclrpal)
target_link_libraries(paltest_snprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test1/CMakeLists.txt
index eac86f30e4..89496c562a 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test1
add_dependencies(paltest_snwprintf_test1 coreclrpal)
target_link_libraries(paltest_snwprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test10/CMakeLists.txt
index 82ee739587..60703fa163 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test10
add_dependencies(paltest_snwprintf_test10 coreclrpal)
target_link_libraries(paltest_snwprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test11/CMakeLists.txt
index f7d7845571..c305c62f31 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test11
add_dependencies(paltest_snwprintf_test11 coreclrpal)
target_link_libraries(paltest_snwprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test12/CMakeLists.txt
index 5b926fb548..9532e67932 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test12
add_dependencies(paltest_snwprintf_test12 coreclrpal)
target_link_libraries(paltest_snwprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test13/CMakeLists.txt
index 52a3c75a15..f1088003e7 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test13
add_dependencies(paltest_snwprintf_test13 coreclrpal)
target_link_libraries(paltest_snwprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test14/CMakeLists.txt
index d557a30b42..79a04329ca 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test14
add_dependencies(paltest_snwprintf_test14 coreclrpal)
target_link_libraries(paltest_snwprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test15/CMakeLists.txt
index 2e5ee362fc..c29ec7d925 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test15
add_dependencies(paltest_snwprintf_test15 coreclrpal)
target_link_libraries(paltest_snwprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test16/CMakeLists.txt
index f4ce409dcb..d42726644a 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test16
add_dependencies(paltest_snwprintf_test16 coreclrpal)
target_link_libraries(paltest_snwprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test17/CMakeLists.txt
index 159e15dafe..37fb79012c 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test17
add_dependencies(paltest_snwprintf_test17 coreclrpal)
target_link_libraries(paltest_snwprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test18/CMakeLists.txt
index 5964e849a4..a880738a9c 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test18
add_dependencies(paltest_snwprintf_test18 coreclrpal)
target_link_libraries(paltest_snwprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test19/CMakeLists.txt
index 5d84847ec1..cb16e1e15b 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test19
add_dependencies(paltest_snwprintf_test19 coreclrpal)
target_link_libraries(paltest_snwprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/CMakeLists.txt
index ea33d48bd5..4307aa71c4 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test2
add_dependencies(paltest_snwprintf_test2 coreclrpal)
target_link_libraries(paltest_snwprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/test2.cpp
index 86bfdc9839..7d8dd65c38 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test2/test2.cpp
@@ -38,6 +38,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest(convert("foo %5.2s"), convert("bar"), convert("foo ba"));
DoWStrTest(convert("foo %-5s"), convert("bar"), convert("foo bar "));
DoWStrTest(convert("foo %05s"), convert("bar"), convert("foo 00bar"));
+ DoWStrTest(convert("foo %s"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %hs"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %ls"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %ws"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %Ls"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %I64s"), NULL, convert("foo (null)"));
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/CMakeLists.txt
index 5095b1a12e..c5278f4879 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test3
add_dependencies(paltest_snwprintf_test3 coreclrpal)
target_link_libraries(paltest_snwprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/test3.cpp
index f6db6f265d..b4a4a32ae2 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test3/test3.cpp
@@ -38,6 +38,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest(convert("foo %5.2S"), "bar", convert("foo ba"));
DoStrTest(convert("foo %-5S"), "bar", convert("foo bar "));
DoStrTest(convert("foo %05S"), "bar", convert("foo 00bar"));
+ DoStrTest(convert("foo %S"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %hS"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %lS"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %wS"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %LS"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %I64S"), NULL, convert("foo (null)"));
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/CMakeLists.txt
index 9cf81ea1bd..26229d719a 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test4
add_dependencies(paltest_snwprintf_test4 coreclrpal)
target_link_libraries(paltest_snwprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/test4.cpp
index 02d4781bd3..0819a7e659 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test4/test4.cpp
@@ -33,7 +33,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest(convert("%p"), NULL, convert("0000000000000000"));
DoPointerTest(convert("%p"), ptr, convert("0000000000123456"));
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test6/CMakeLists.txt
index 4996c7716f..542e943f89 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test6
add_dependencies(paltest_snwprintf_test6 coreclrpal)
target_link_libraries(paltest_snwprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test7/CMakeLists.txt
index 0e55fbf4d7..0905c5d08b 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test7
add_dependencies(paltest_snwprintf_test7 coreclrpal)
target_link_libraries(paltest_snwprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test8/CMakeLists.txt
index 8f7fbda5a0..a31a7f9f8f 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test8
add_dependencies(paltest_snwprintf_test8 coreclrpal)
target_link_libraries(paltest_snwprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test9/CMakeLists.txt
index f769c9eaa5..90157fdd03 100644
--- a/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_snwprintf_s/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_snwprintf_test9
add_dependencies(paltest_snwprintf_test9 coreclrpal)
target_link_libraries(paltest_snwprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_stricmp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_stricmp/test1/CMakeLists.txt
index 03aa3a523e..a0380a4404 100644
--- a/src/pal/tests/palsuite/c_runtime/_stricmp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_stricmp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_stricmp_test1
add_dependencies(paltest_stricmp_test1 coreclrpal)
target_link_libraries(paltest_stricmp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_strlwr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_strlwr/test1/CMakeLists.txt
index ca26961b3c..bef0a7ed60 100644
--- a/src/pal/tests/palsuite/c_runtime/_strlwr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_strlwr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strlwr_test1
add_dependencies(paltest_strlwr_test1 coreclrpal)
target_link_libraries(paltest_strlwr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_strnicmp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_strnicmp/test1/CMakeLists.txt
index 03f9992198..2429339a6d 100644
--- a/src/pal/tests/palsuite/c_runtime/_strnicmp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_strnicmp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strnicmp_test1
add_dependencies(paltest_strnicmp_test1 coreclrpal)
target_link_libraries(paltest_strnicmp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/CMakeLists.txt
deleted file mode 100644
index 92540541f3..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12.2)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(SOURCES
- test5.cpp
-)
-
-add_executable(paltest_vsnprintf_test5
- ${SOURCES}
-)
-
-add_dependencies(paltest_vsnprintf_test5 coreclrpal)
-
-target_link_libraries(paltest_vsnprintf_test5
- pthread
- m
- coreclrpal
-)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/test5.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/test5.cpp
deleted file mode 100644
index 534e42e293..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/test5.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=====================================================================
-**
-** Source: test5.c
-**
-** Purpose: Test #5 for the _vsnprintf function.
-**
-**
-**===================================================================*/
-
-#include <palsuite.h>
-#include "../_vsnprintf.h"
-
-/*
- * Notes: memcmp is used, as is strlen.
- */
-
-static void DoTest(char *formatstr, int param, char *checkstr)
-{
- char buf[256] = { 0 };
- int n = -1;
-
- Testvsnprintf(buf, 256, formatstr, &n);
-
- if (n != param)
- {
- Fail("ERROR: Expected count parameter to resolve to %d, got %X\n",
- param, n);
- }
- if (memcmp(buf, checkstr, strlen(buf) + 1) != 0)
- {
- Fail("ERROR: Expected \"%s\" got \"%s\".\n", checkstr, buf);
- }
-}
-
-static void DoShortTest(char *formatstr, int param, char *checkstr)
-{
- char buf[256] = { 0 };
- short int n = -1;
-
- Testvsnprintf(buf, 256, formatstr, &n);
-
- if (n != param)
- {
- Fail("ERROR: Expected count parameter to resolve to %d, got %X\n",
- param, n);
- }
- if (memcmp(buf, checkstr, strlen(buf) + 1) != 0)
- {
- Fail("ERROR: Expected \"%s\" got \"%s\".\n", checkstr, buf);
- }
-}
-
-int __cdecl main(int argc, char *argv[])
-{
- if (PAL_Initialize(argc, argv) != 0)
- {
- return(FAIL);
- }
-
- DoTest("foo %n bar", 4, "foo bar");
- DoTest("foo %#n bar", 4, "foo bar");
- DoTest("foo % n bar", 4, "foo bar");
- DoTest("foo %+n bar", 4, "foo bar");
- DoTest("foo %-n bar", 4, "foo bar");
- DoTest("foo %0n bar", 4, "foo bar");
- DoShortTest("foo %hn bar", 4, "foo bar");
- DoTest("foo %ln bar", 4, "foo bar");
- DoTest("foo %Ln bar", 4, "foo bar");
- DoTest("foo %I64n bar", 4, "foo bar");
- DoTest("foo %20.3n bar", 4, "foo bar");
-
- PAL_Terminate();
- return PASS;
-}
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/testinfo.dat
deleted file mode 100644
index c3848824f1..0000000000
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test5/testinfo.dat
+++ /dev/null
@@ -1,14 +0,0 @@
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-# See the LICENSE file in the project root for more information.
-
-Version = 1.0
-Section = C Runtime
-Function = _vsnprintf
-Name = Positive Test for _vsnprintf
-TYPE = DEFAULT
-EXE1 = test5
-Description
-= Tests the PAL implementation of the _vsnprintf function.
-= Tests _vsnprintf with the count specifier.
-= This test is modeled after sprintf_s.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/CMakeLists.txt
index cafb9536b0..8fe1cb60ac 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/CMakeLists.txt
@@ -14,7 +14,6 @@ add_subdirectory(test19)
add_subdirectory(test2)
add_subdirectory(test3)
add_subdirectory(test4)
-add_subdirectory(test5)
add_subdirectory(test6)
add_subdirectory(test7)
add_subdirectory(test8)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/_vsnprintf.h b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/_vsnprintf_s.h
index 30e70648c3..7c81136f71 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/_vsnprintf.h
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/_vsnprintf_s.h
@@ -4,7 +4,7 @@
/*============================================================================
**
-** Source: _vsnprintf.h
+** Source: _vsnprintf_s.h
**
** Purpose: Contains common testing functions for _vsnprintf
**
@@ -21,7 +21,7 @@ int Testvsnprintf(char* buf, size_t count, const char* format, ...)
va_list arglist;
va_start(arglist, format);
- retVal = _vsnprintf(buf, count, format, arglist);
+ retVal = _vsnprintf_s(buf, count, _TRUNCATE, format, arglist);
va_end(arglist);
return (retVal);
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test1/CMakeLists.txt
index 489b7bf566..ee97f2bf16 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test1
add_dependencies(paltest_vsnprintf_test1 coreclrpal)
target_link_libraries(paltest_vsnprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test1/test1.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test1/test1.cpp
index 88aeec27a5..db70f5612b 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test1/test1.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test1/test1.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
@@ -45,11 +45,11 @@ int __cdecl main(int argc, char *argv[])
{
Fail("ERROR: expected negative return value, got %d", ret);
}
- if (memcmp(checkstr, buf, 8) != 0 || buf[8] != 'x')
+ if (memcmp(checkstr, buf, 7) != 0 || buf[7] != 0)
{
Fail("ERROR: expected %s (up to %d chars), got %s\n", checkstr, 8, buf);
}
-
+
PAL_Terminate();
return PASS;
}
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test1/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test1/testinfo.dat
index f96bf084f2..f96bf084f2 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test1/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test1/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test10/CMakeLists.txt
index bc35dbd0c2..ad067ccd7d 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test10
add_dependencies(paltest_vsnprintf_test10 coreclrpal)
target_link_libraries(paltest_vsnprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test10/test10.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test10/test10.cpp
index 3099957ab7..707a91c048 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test10/test10.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test10/test10.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test10/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test10/testinfo.dat
index a3d8eca54e..a3d8eca54e 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test10/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test10/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test11/CMakeLists.txt
index bf3dd9a534..9fb2b903de 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test11
add_dependencies(paltest_vsnprintf_test11 coreclrpal)
target_link_libraries(paltest_vsnprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test11/test11.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test11/test11.cpp
index 74b0435c6d..4c710e56b0 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test11/test11.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test11/test11.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test11/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test11/testinfo.dat
index 17e9f04946..17e9f04946 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test11/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test11/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test12/CMakeLists.txt
index 9fceeaf7a5..f78711cfdf 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test12
add_dependencies(paltest_vsnprintf_test12 coreclrpal)
target_link_libraries(paltest_vsnprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test12/test12.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test12/test12.cpp
index 3718620971..528e6582a8 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test12/test12.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test12/test12.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test12/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test12/testinfo.dat
index 82f58e4371..82f58e4371 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test12/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test12/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test13/CMakeLists.txt
index 7e805f6ad4..b37300c6d7 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test13
add_dependencies(paltest_vsnprintf_test13 coreclrpal)
target_link_libraries(paltest_vsnprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test13/test13.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test13/test13.cpp
index 1abada4033..645a118682 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test13/test13.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test13/test13.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test13/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test13/testinfo.dat
index d308edf871..d308edf871 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test13/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test13/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test14/CMakeLists.txt
index 6e4566b577..97098d48c7 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test14
add_dependencies(paltest_vsnprintf_test14 coreclrpal)
target_link_libraries(paltest_vsnprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test14/test14.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test14/test14.cpp
index 2e98f6ad4e..05965f0ed7 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test14/test14.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test14/test14.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test14/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test14/testinfo.dat
index 8d11b1d6ff..8d11b1d6ff 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test14/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test14/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test15/CMakeLists.txt
index d9039b39b7..95e5a475f9 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test15
add_dependencies(paltest_vsnprintf_test15 coreclrpal)
target_link_libraries(paltest_vsnprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test15/test15.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test15/test15.cpp
index 4d32e9c638..cd34f74e6c 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test15/test15.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test15/test15.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test15/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test15/testinfo.dat
index 913912508e..913912508e 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test15/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test15/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test16/CMakeLists.txt
index b298df318b..1fd88667d8 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test16
add_dependencies(paltest_vsnprintf_test16 coreclrpal)
target_link_libraries(paltest_vsnprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test16/test16.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test16/test16.cpp
index 118ba1453c..de9b74f9b3 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test16/test16.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test16/test16.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test16/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test16/testinfo.dat
index fc2f13071b..fc2f13071b 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test16/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test16/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test17/CMakeLists.txt
index b195f334d3..ffd52caa65 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test17
add_dependencies(paltest_vsnprintf_test17 coreclrpal)
target_link_libraries(paltest_vsnprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test17/test17.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test17/test17.cpp
index 9b5063ddf0..3304eda7f9 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test17/test17.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test17/test17.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test17/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test17/testinfo.dat
index aeb924495c..aeb924495c 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test17/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test17/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test18/CMakeLists.txt
index f0f6d1124e..1bd8e3bc5a 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test18
add_dependencies(paltest_vsnprintf_test18 coreclrpal)
target_link_libraries(paltest_vsnprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test18/test18.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test18/test18.cpp
index 5232befc7f..14ad8f583a 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test18/test18.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test18/test18.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test18/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test18/testinfo.dat
index 57aaed5953..57aaed5953 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test18/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test18/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test19/CMakeLists.txt
index 44b38902ef..3848c130b0 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test19
add_dependencies(paltest_vsnprintf_test19 coreclrpal)
target_link_libraries(paltest_vsnprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test19/test19.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test19/test19.cpp
index 211354bc3a..6f2aefa94c 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test19/test19.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test19/test19.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test19/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test19/testinfo.dat
index cda8966865..cda8966865 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test19/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test19/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test2/CMakeLists.txt
index 1d3910e70c..5bdf0acff3 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test2
add_dependencies(paltest_vsnprintf_test2 coreclrpal)
target_link_libraries(paltest_vsnprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test2/test2.cpp
index 4bac4d2c83..e5808f363e 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test2/test2.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
*/
@@ -37,6 +37,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest("foo %5.2s", "bar", "foo ba");
DoStrTest("foo %-5s", "bar", "foo bar ");
DoStrTest("foo %05s", "bar", "foo 00bar");
+ DoStrTest("foo %s", NULL, "foo (null)");
+ DoStrTest("foo %hs", NULL, "foo (null)");
+ DoWStrTest("foo %ls", NULL, "foo (null)");
+ DoWStrTest("foo %ws", NULL, "foo (null)");
+ DoStrTest("foo %Ls", NULL, "foo (null)");
+ DoStrTest("foo %I64s", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test2/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test2/testinfo.dat
index 6e8f03e639..6e8f03e639 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test2/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test2/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test3/CMakeLists.txt
index 62d765ec5f..7268cf17f7 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test3
add_dependencies(paltest_vsnprintf_test3 coreclrpal)
target_link_libraries(paltest_vsnprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test3/test3.cpp
index 2b30c9ad99..bb8b153b52 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test3/test3.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
@@ -37,6 +37,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest("foo %5.2S", convert("bar"), "foo ba");
DoWStrTest("foo %-5S", convert("bar"), "foo bar ");
DoWStrTest("foo %05S", convert("bar"), "foo 00bar");
+ DoWStrTest("foo %S", NULL, "foo (null)");
+ DoStrTest("foo %hS", NULL, "foo (null)");
+ DoWStrTest("foo %lS", NULL, "foo (null)");
+ DoWStrTest("foo %wS", NULL, "foo (null)");
+ DoWStrTest("foo %LS", NULL, "foo (null)");
+ DoWStrTest("foo %I64S", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test3/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test3/testinfo.dat
index 638cef69ef..638cef69ef 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test3/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test3/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test4/CMakeLists.txt
index 5662bd57ad..f2419479fd 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test4
add_dependencies(paltest_vsnprintf_test4 coreclrpal)
target_link_libraries(paltest_vsnprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test4/test4.cpp
index 33fc49deba..c4a77f957d 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test4/test4.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
@@ -58,7 +58,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest("%p", NULL, "NULL", "0000000000000000");
DoPointerTest("%p", ptr, "pointer to 0x123456", "0000000000123456");
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test4/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test4/testinfo.dat
index 03ff2931bc..03ff2931bc 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test4/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test4/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test6/CMakeLists.txt
index d80d433c22..3c6b43fe20 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test6
add_dependencies(paltest_vsnprintf_test6 coreclrpal)
target_link_libraries(paltest_vsnprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test6/test6.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test6/test6.cpp
index 103d1181c2..cbcead88b5 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test6/test6.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test6/test6.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test6/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test6/testinfo.dat
index e375f9238d..e375f9238d 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test6/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test6/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test7/CMakeLists.txt
index a1dc0a7c2c..6708b39001 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test7
add_dependencies(paltest_vsnprintf_test7 coreclrpal)
target_link_libraries(paltest_vsnprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test7/test7.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test7/test7.cpp
index c7e45d67fa..4843d27598 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test7/test7.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test7/test7.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
*/
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test7/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test7/testinfo.dat
index 09eb481b59..09eb481b59 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test7/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test7/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test8/CMakeLists.txt
index 1ca4732492..8a396fdcf2 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test8
add_dependencies(paltest_vsnprintf_test8 coreclrpal)
target_link_libraries(paltest_vsnprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test8/test8.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test8/test8.cpp
index 2cefbeac25..8021a797c8 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test8/test8.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test8/test8.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test8/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test8/testinfo.dat
index 1bdf411983..1bdf411983 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test8/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test8/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test9/CMakeLists.txt
index 583971fe5a..136856b649 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnprintf_test9
add_dependencies(paltest_vsnprintf_test9 coreclrpal)
target_link_libraries(paltest_vsnprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test9/test9.cpp b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test9/test9.cpp
index d2cd8165c0..d36846e401 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test9/test9.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test9/test9.cpp
@@ -12,7 +12,7 @@
**===================================================================*/
#include <palsuite.h>
-#include "../_vsnprintf.h"
+#include "../_vsnprintf_s.h"
/*
* Notes: memcmp is used, as is strlen.
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test9/testinfo.dat b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test9/testinfo.dat
index bdaae87ce8..bdaae87ce8 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnprintf/test9/testinfo.dat
+++ b/src/pal/tests/palsuite/c_runtime/_vsnprintf_s/test9/testinfo.dat
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test1/CMakeLists.txt
index d1245168f3..0138111408 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test1
add_dependencies(paltest_vsnwprintf_test1 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test10/CMakeLists.txt
index 6367964f1d..e669b1e47c 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test10
add_dependencies(paltest_vsnwprintf_test10 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test11/CMakeLists.txt
index b45fd0ed1e..acb914b93e 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test11
add_dependencies(paltest_vsnwprintf_test11 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test12/CMakeLists.txt
index 2a15b198c0..0d83d5be91 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test12
add_dependencies(paltest_vsnwprintf_test12 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test13/CMakeLists.txt
index 01ab97cc62..27f37405f4 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test13
add_dependencies(paltest_vsnwprintf_test13 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test14/CMakeLists.txt
index c6c990312f..6e0a35e8b5 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test14
add_dependencies(paltest_vsnwprintf_test14 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test15/CMakeLists.txt
index e1a32b1825..f13b1f28bb 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test15
add_dependencies(paltest_vsnwprintf_test15 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test16/CMakeLists.txt
index 9e2b25b308..2b45d4c77e 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test16
add_dependencies(paltest_vsnwprintf_test16 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test17/CMakeLists.txt
index 2d8ba31a08..a4cc151d5e 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test17
add_dependencies(paltest_vsnwprintf_test17 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test18/CMakeLists.txt
index 503856c2f3..9bf17f3e33 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test18
add_dependencies(paltest_vsnwprintf_test18 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test19/CMakeLists.txt
index 68485eff12..7f95eb1429 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test19
add_dependencies(paltest_vsnwprintf_test19 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/CMakeLists.txt
index a512be6e47..27231e9de6 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test2
add_dependencies(paltest_vsnwprintf_test2 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/test2.cpp
index 18e5adffd3..b2958dfa8d 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test2/test2.cpp
@@ -34,6 +34,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest(convert("foo %5.2s"), convert("bar"), convert("foo ba"));
DoWStrTest(convert("foo %-5s"), convert("bar"), convert("foo bar "));
DoWStrTest(convert("foo %05s"), convert("bar"), convert("foo 00bar"));
+ DoWStrTest(convert("foo %s"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %hs"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %ls"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %ws"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %Ls"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %I64s"), NULL, convert("foo (null)"));
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/CMakeLists.txt
index 7991c25afc..205e5a5272 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test3
add_dependencies(paltest_vsnwprintf_test3 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/test3.cpp
index 5e2bfa21a0..657a911b5c 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test3/test3.cpp
@@ -34,6 +34,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest(convert("foo %5.2S"), "bar", convert("foo ba"));
DoStrTest(convert("foo %-5S"), "bar", convert("foo bar "));
DoStrTest(convert("foo %05S"), "bar", convert("foo 00bar"));
+ DoStrTest(convert("foo %S"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %hS"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %lS"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %wS"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %LS"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %I64S"), NULL, convert("foo (null)"));
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/CMakeLists.txt
index 18f5d02df2..fd2666e974 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test4
add_dependencies(paltest_vsnwprintf_test4 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/test4.cpp
index 3627ff8bc8..006e154f70 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test4/test4.cpp
@@ -64,7 +64,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest(convert("%p"), NULL, convert("NULL"), convert("00000000"));
DoPointerTest(convert("%p"), ptr, convert("pointer to 0x123456"),
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test6/CMakeLists.txt
index c431da4a00..1ff12213f7 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test6
add_dependencies(paltest_vsnwprintf_test6 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test7/CMakeLists.txt
index 5759b836b5..fe46de483d 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test7
add_dependencies(paltest_vsnwprintf_test7 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test8/CMakeLists.txt
index 5e8a6284a5..7ce0aa81ab 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test8
add_dependencies(paltest_vsnwprintf_test8 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test9/CMakeLists.txt
index 323365dcd9..69a9de3a54 100644
--- a/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_vsnwprintf_s/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsnwprintf_test9
add_dependencies(paltest_vsnwprintf_test9 coreclrpal)
target_link_libraries(paltest_vsnwprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wcsicmp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wcsicmp/test1/CMakeLists.txt
index 023b777cab..1a70e342c6 100644
--- a/src/pal/tests/palsuite/c_runtime/_wcsicmp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wcsicmp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcsicmp_test1
add_dependencies(paltest_wcsicmp_test1 coreclrpal)
target_link_libraries(paltest_wcsicmp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wcslwr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wcslwr/test1/CMakeLists.txt
index b9df132d29..b10e14ceb7 100644
--- a/src/pal/tests/palsuite/c_runtime/_wcslwr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wcslwr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcslwr_test1
add_dependencies(paltest_wcslwr_test1 coreclrpal)
target_link_libraries(paltest_wcslwr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wcsnicmp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wcsnicmp/test1/CMakeLists.txt
index ea22daa477..3fa3b3842d 100644
--- a/src/pal/tests/palsuite/c_runtime/_wcsnicmp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wcsnicmp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcsnicmp_test1
add_dependencies(paltest_wcsnicmp_test1 coreclrpal)
target_link_libraries(paltest_wcsnicmp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wfopen/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wfopen/test1/CMakeLists.txt
index f7aa22d5b2..35498c0ecc 100644
--- a/src/pal/tests/palsuite/c_runtime/_wfopen/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wfopen/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wfopen_test1
add_dependencies(paltest_wfopen_test1 coreclrpal)
target_link_libraries(paltest_wfopen_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wfopen/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wfopen/test2/CMakeLists.txt
index 3159889f0a..5a049441b7 100644
--- a/src/pal/tests/palsuite/c_runtime/_wfopen/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wfopen/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wfopen_test2
add_dependencies(paltest_wfopen_test2 coreclrpal)
target_link_libraries(paltest_wfopen_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wfopen/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wfopen/test3/CMakeLists.txt
index 06d0941471..1a1656ebf7 100644
--- a/src/pal/tests/palsuite/c_runtime/_wfopen/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wfopen/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wfopen_test3
add_dependencies(paltest_wfopen_test3 coreclrpal)
target_link_libraries(paltest_wfopen_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wfopen/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wfopen/test4/CMakeLists.txt
index 8253d75d8d..bc56cd9507 100644
--- a/src/pal/tests/palsuite/c_runtime/_wfopen/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wfopen/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wfopen_test4
add_dependencies(paltest_wfopen_test4 coreclrpal)
target_link_libraries(paltest_wfopen_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wfopen/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wfopen/test5/CMakeLists.txt
index 8b3d064ec6..42caa20594 100644
--- a/src/pal/tests/palsuite/c_runtime/_wfopen/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wfopen/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wfopen_test5
add_dependencies(paltest_wfopen_test5 coreclrpal)
target_link_libraries(paltest_wfopen_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wfopen/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wfopen/test6/CMakeLists.txt
index bf1eaeca27..c2fb9e7b8b 100644
--- a/src/pal/tests/palsuite/c_runtime/_wfopen/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wfopen/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wfopen_test6
add_dependencies(paltest_wfopen_test6 coreclrpal)
target_link_libraries(paltest_wfopen_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wfopen/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wfopen/test7/CMakeLists.txt
index 5d04528a21..13f7b00a20 100644
--- a/src/pal/tests/palsuite/c_runtime/_wfopen/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wfopen/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wfopen_test7
add_dependencies(paltest_wfopen_test7 coreclrpal)
target_link_libraries(paltest_wfopen_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/_wtoi/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/_wtoi/test1/CMakeLists.txt
index ed02fec3af..b04d4abbe6 100644
--- a/src/pal/tests/palsuite/c_runtime/_wtoi/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/_wtoi/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wtoi_test1
add_dependencies(paltest_wtoi_test1 coreclrpal)
target_link_libraries(paltest_wtoi_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/abs/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/abs/test1/CMakeLists.txt
index b01d97ff2f..c09c03939c 100644
--- a/src/pal/tests/palsuite/c_runtime/abs/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/abs/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_abs_test1
add_dependencies(paltest_abs_test1 coreclrpal)
target_link_libraries(paltest_abs_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/acos/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/acos/test1/CMakeLists.txt
index 5bd3ae06e8..7f473d072d 100644
--- a/src/pal/tests/palsuite/c_runtime/acos/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/acos/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_acos_test1
add_dependencies(paltest_acos_test1 coreclrpal)
target_link_libraries(paltest_acos_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/acosf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/acosf/test1/CMakeLists.txt
index 2643647438..095be954de 100644
--- a/src/pal/tests/palsuite/c_runtime/acosf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/acosf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_acosf_test1
add_dependencies(paltest_acosf_test1 coreclrpal)
target_link_libraries(paltest_acosf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/asin/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/asin/test1/CMakeLists.txt
index 510b543a59..3537fe6efe 100644
--- a/src/pal/tests/palsuite/c_runtime/asin/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/asin/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_asin_test1
add_dependencies(paltest_asin_test1 coreclrpal)
target_link_libraries(paltest_asin_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/asinf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/asinf/test1/CMakeLists.txt
index b167bd8715..46661a745a 100644
--- a/src/pal/tests/palsuite/c_runtime/asinf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/asinf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_asinf_test1
add_dependencies(paltest_asinf_test1 coreclrpal)
target_link_libraries(paltest_asinf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/atan/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/atan/test1/CMakeLists.txt
index ace64e48bc..ef6cca78d2 100644
--- a/src/pal/tests/palsuite/c_runtime/atan/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/atan/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_atan_test1
add_dependencies(paltest_atan_test1 coreclrpal)
target_link_libraries(paltest_atan_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/atan2/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/atan2/test1/CMakeLists.txt
index cafa09f7fe..4246b3730a 100644
--- a/src/pal/tests/palsuite/c_runtime/atan2/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/atan2/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_atan2_test1
add_dependencies(paltest_atan2_test1 coreclrpal)
target_link_libraries(paltest_atan2_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/atan2f/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/atan2f/test1/CMakeLists.txt
index d71a61b17b..d70946ea8c 100644
--- a/src/pal/tests/palsuite/c_runtime/atan2f/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/atan2f/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_atan2f_test1
add_dependencies(paltest_atan2f_test1 coreclrpal)
target_link_libraries(paltest_atan2f_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/atanf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/atanf/test1/CMakeLists.txt
index b71b1cf40c..2a08f6d739 100644
--- a/src/pal/tests/palsuite/c_runtime/atanf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/atanf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_atanf_test1
add_dependencies(paltest_atanf_test1 coreclrpal)
target_link_libraries(paltest_atanf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/atof/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/atof/test1/CMakeLists.txt
index 12e584b9a0..4917e424dc 100644
--- a/src/pal/tests/palsuite/c_runtime/atof/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/atof/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_atof_test1
add_dependencies(paltest_atof_test1 coreclrpal)
target_link_libraries(paltest_atof_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/atoi/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/atoi/test1/CMakeLists.txt
index 225052213f..d545811b9a 100644
--- a/src/pal/tests/palsuite/c_runtime/atoi/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/atoi/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_atoi_test1
add_dependencies(paltest_atoi_test1 coreclrpal)
target_link_libraries(paltest_atoi_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/atol/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/atol/test1/CMakeLists.txt
index 29643aae6b..0335137eb6 100644
--- a/src/pal/tests/palsuite/c_runtime/atol/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/atol/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_atol_test1
add_dependencies(paltest_atol_test1 coreclrpal)
target_link_libraries(paltest_atol_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/bsearch/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/bsearch/test1/CMakeLists.txt
index c5aab7b84d..a1242e6a37 100644
--- a/src/pal/tests/palsuite/c_runtime/bsearch/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/bsearch/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_bsearch_test1
add_dependencies(paltest_bsearch_test1 coreclrpal)
target_link_libraries(paltest_bsearch_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/bsearch/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/bsearch/test2/CMakeLists.txt
index 7ad33b12e5..167b8aac69 100644
--- a/src/pal/tests/palsuite/c_runtime/bsearch/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/bsearch/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_bsearch_test2
add_dependencies(paltest_bsearch_test2 coreclrpal)
target_link_libraries(paltest_bsearch_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/ceil/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/ceil/test1/CMakeLists.txt
index f834914545..c1473daa9d 100644
--- a/src/pal/tests/palsuite/c_runtime/ceil/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/ceil/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_ceil_test1
add_dependencies(paltest_ceil_test1 coreclrpal)
target_link_libraries(paltest_ceil_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/ceilf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/ceilf/test1/CMakeLists.txt
index 64f14cda9a..b1fbe07100 100644
--- a/src/pal/tests/palsuite/c_runtime/ceilf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/ceilf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_ceilf_test1
add_dependencies(paltest_ceilf_test1 coreclrpal)
target_link_libraries(paltest_ceilf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/cos/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/cos/test1/CMakeLists.txt
index 536664c128..936a876c3f 100644
--- a/src/pal/tests/palsuite/c_runtime/cos/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/cos/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_cos_test1
add_dependencies(paltest_cos_test1 coreclrpal)
target_link_libraries(paltest_cos_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/cosf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/cosf/test1/CMakeLists.txt
index b3a18ea271..db4efe4ac7 100644
--- a/src/pal/tests/palsuite/c_runtime/cosf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/cosf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_cosf_test1
add_dependencies(paltest_cosf_test1 coreclrpal)
target_link_libraries(paltest_cosf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/cosh/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/cosh/test1/CMakeLists.txt
index e1fff0e9f1..ec8038a160 100644
--- a/src/pal/tests/palsuite/c_runtime/cosh/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/cosh/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_cosh_test1
add_dependencies(paltest_cosh_test1 coreclrpal)
target_link_libraries(paltest_cosh_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/coshf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/coshf/test1/CMakeLists.txt
index 92fcfdea6d..3b873eec94 100644
--- a/src/pal/tests/palsuite/c_runtime/coshf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/coshf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_coshf_test1
add_dependencies(paltest_coshf_test1 coreclrpal)
target_link_libraries(paltest_coshf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/ctime/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/ctime/test1/CMakeLists.txt
index 3eeffb0e39..b7d1b99b2f 100644
--- a/src/pal/tests/palsuite/c_runtime/ctime/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/ctime/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_ctime_test1
add_dependencies(paltest_ctime_test1 coreclrpal)
target_link_libraries(paltest_ctime_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/errno/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/errno/test1/CMakeLists.txt
index 91b8d094b1..8c27c78d6d 100644
--- a/src/pal/tests/palsuite/c_runtime/errno/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/errno/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_errno_test1
add_dependencies(paltest_errno_test1 coreclrpal)
target_link_libraries(paltest_errno_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/errno/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/errno/test2/CMakeLists.txt
index ab7c4a27f2..e66c359207 100644
--- a/src/pal/tests/palsuite/c_runtime/errno/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/errno/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_errno_test2
add_dependencies(paltest_errno_test2 coreclrpal)
target_link_libraries(paltest_errno_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/exit/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/exit/test1/CMakeLists.txt
index bb2cbccb9b..3f34da6fd2 100644
--- a/src/pal/tests/palsuite/c_runtime/exit/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/exit/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_exit_test1
add_dependencies(paltest_exit_test1 coreclrpal)
target_link_libraries(paltest_exit_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/exit/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/exit/test2/CMakeLists.txt
index 8a74e75ed5..5327b57896 100644
--- a/src/pal/tests/palsuite/c_runtime/exit/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/exit/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_exit_test2
add_dependencies(paltest_exit_test2 coreclrpal)
target_link_libraries(paltest_exit_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/exp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/exp/test1/CMakeLists.txt
index 3377ed22f2..a28565835b 100644
--- a/src/pal/tests/palsuite/c_runtime/exp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/exp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_exp_test1
add_dependencies(paltest_exp_test1 coreclrpal)
target_link_libraries(paltest_exp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/expf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/expf/test1/CMakeLists.txt
index fb12b65c2f..5ff0d09d81 100644
--- a/src/pal/tests/palsuite/c_runtime/expf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/expf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_expf_test1
add_dependencies(paltest_expf_test1 coreclrpal)
target_link_libraries(paltest_expf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fabs/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fabs/test1/CMakeLists.txt
index fa01a34dd9..9dab6796f2 100644
--- a/src/pal/tests/palsuite/c_runtime/fabs/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fabs/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fabs_test1
add_dependencies(paltest_fabs_test1 coreclrpal)
target_link_libraries(paltest_fabs_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fabsf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fabsf/test1/CMakeLists.txt
index a1823e25e5..dc46a2335d 100644
--- a/src/pal/tests/palsuite/c_runtime/fabsf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fabsf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fabsf_test1
add_dependencies(paltest_fabsf_test1 coreclrpal)
target_link_libraries(paltest_fabsf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fclose/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fclose/test1/CMakeLists.txt
index 64cfef0e18..5fe80e02bc 100644
--- a/src/pal/tests/palsuite/c_runtime/fclose/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fclose/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fclose_test1
add_dependencies(paltest_fclose_test1 coreclrpal)
target_link_libraries(paltest_fclose_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fclose/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fclose/test2/CMakeLists.txt
index 3b5538608f..efe4c85207 100644
--- a/src/pal/tests/palsuite/c_runtime/fclose/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fclose/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fclose_test2
add_dependencies(paltest_fclose_test2 coreclrpal)
target_link_libraries(paltest_fclose_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/feof/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/feof/test1/CMakeLists.txt
index 9f689503e6..e870038450 100644
--- a/src/pal/tests/palsuite/c_runtime/feof/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/feof/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_feof_test1
add_dependencies(paltest_feof_test1 coreclrpal)
target_link_libraries(paltest_feof_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/ferror/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/ferror/test1/CMakeLists.txt
index cd1fe52381..e8a282f6be 100644
--- a/src/pal/tests/palsuite/c_runtime/ferror/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/ferror/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_ferror_test1
add_dependencies(paltest_ferror_test1 coreclrpal)
target_link_libraries(paltest_ferror_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/ferror/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/ferror/test2/CMakeLists.txt
index 05bd7fd2f1..deb3f1f927 100644
--- a/src/pal/tests/palsuite/c_runtime/ferror/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/ferror/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_ferror_test2
add_dependencies(paltest_ferror_test2 coreclrpal)
target_link_libraries(paltest_ferror_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fflush/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fflush/test1/CMakeLists.txt
index 58c7c5a3a4..ef13ca4194 100644
--- a/src/pal/tests/palsuite/c_runtime/fflush/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fflush/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fflush_test1
add_dependencies(paltest_fflush_test1 coreclrpal)
target_link_libraries(paltest_fflush_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fgets/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fgets/test1/CMakeLists.txt
index d327d6882a..40f9c65879 100644
--- a/src/pal/tests/palsuite/c_runtime/fgets/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fgets/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fgets_test1
add_dependencies(paltest_fgets_test1 coreclrpal)
target_link_libraries(paltest_fgets_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fgets/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fgets/test2/CMakeLists.txt
index 23bcdef686..a2d2563df5 100644
--- a/src/pal/tests/palsuite/c_runtime/fgets/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fgets/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fgets_test2
add_dependencies(paltest_fgets_test2 coreclrpal)
target_link_libraries(paltest_fgets_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fgets/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fgets/test3/CMakeLists.txt
index 0833ad0130..37398b8349 100644
--- a/src/pal/tests/palsuite/c_runtime/fgets/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fgets/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fgets_test3
add_dependencies(paltest_fgets_test3 coreclrpal)
target_link_libraries(paltest_fgets_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/floor/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/floor/test1/CMakeLists.txt
index 3222ed8ba3..4324626b87 100644
--- a/src/pal/tests/palsuite/c_runtime/floor/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/floor/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_floor_test1
add_dependencies(paltest_floor_test1 coreclrpal)
target_link_libraries(paltest_floor_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/floorf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/floorf/test1/CMakeLists.txt
index f6e24adcd9..8834f4dfa2 100644
--- a/src/pal/tests/palsuite/c_runtime/floorf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/floorf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_floorf_test1
add_dependencies(paltest_floorf_test1 coreclrpal)
target_link_libraries(paltest_floorf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fmod/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fmod/test1/CMakeLists.txt
index 33fbfb2653..22bcd3a00d 100644
--- a/src/pal/tests/palsuite/c_runtime/fmod/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fmod/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fmod_test1
add_dependencies(paltest_fmod_test1 coreclrpal)
target_link_libraries(paltest_fmod_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fmodf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fmodf/test1/CMakeLists.txt
index 487b3adda4..861f3d7219 100644
--- a/src/pal/tests/palsuite/c_runtime/fmodf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fmodf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fmodf_test1
add_dependencies(paltest_fmodf_test1 coreclrpal)
target_link_libraries(paltest_fmodf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fopen/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fopen/test1/CMakeLists.txt
index 7603fc623e..955979a6a3 100644
--- a/src/pal/tests/palsuite/c_runtime/fopen/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fopen/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fopen_test1
add_dependencies(paltest_fopen_test1 coreclrpal)
target_link_libraries(paltest_fopen_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fopen/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fopen/test2/CMakeLists.txt
index b8569921de..3738f86fa8 100644
--- a/src/pal/tests/palsuite/c_runtime/fopen/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fopen/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fopen_test2
add_dependencies(paltest_fopen_test2 coreclrpal)
target_link_libraries(paltest_fopen_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fopen/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fopen/test3/CMakeLists.txt
index 5b28caf4ba..88df51d41f 100644
--- a/src/pal/tests/palsuite/c_runtime/fopen/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fopen/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fopen_test3
add_dependencies(paltest_fopen_test3 coreclrpal)
target_link_libraries(paltest_fopen_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fopen/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fopen/test4/CMakeLists.txt
index db5779f282..f31c5d1e5d 100644
--- a/src/pal/tests/palsuite/c_runtime/fopen/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fopen/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fopen_test4
add_dependencies(paltest_fopen_test4 coreclrpal)
target_link_libraries(paltest_fopen_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fopen/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fopen/test5/CMakeLists.txt
index 6341e4a7d2..975351d39a 100644
--- a/src/pal/tests/palsuite/c_runtime/fopen/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fopen/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fopen_test5
add_dependencies(paltest_fopen_test5 coreclrpal)
target_link_libraries(paltest_fopen_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fopen/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fopen/test6/CMakeLists.txt
index 39cf9158bb..1e235856bb 100644
--- a/src/pal/tests/palsuite/c_runtime/fopen/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fopen/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fopen_test6
add_dependencies(paltest_fopen_test6 coreclrpal)
target_link_libraries(paltest_fopen_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fopen/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fopen/test7/CMakeLists.txt
index ee22e347d6..dd81aa9289 100644
--- a/src/pal/tests/palsuite/c_runtime/fopen/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fopen/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fopen_test7
add_dependencies(paltest_fopen_test7 coreclrpal)
target_link_libraries(paltest_fopen_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test1/CMakeLists.txt
index 60ffd49cf5..277cee42ab 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test1
add_dependencies(paltest_fprintf_test1 coreclrpal)
target_link_libraries(paltest_fprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test10/CMakeLists.txt
index 3fb57c217c..7f9dd41db3 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test10
add_dependencies(paltest_fprintf_test10 coreclrpal)
target_link_libraries(paltest_fprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test11/CMakeLists.txt
index d325ce225e..a5365b4fc4 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test11
add_dependencies(paltest_fprintf_test11 coreclrpal)
target_link_libraries(paltest_fprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test12/CMakeLists.txt
index 8bd3970e80..40425217e2 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test12
add_dependencies(paltest_fprintf_test12 coreclrpal)
target_link_libraries(paltest_fprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test13/CMakeLists.txt
index 702058b797..47ba3cb5ba 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test13
add_dependencies(paltest_fprintf_test13 coreclrpal)
target_link_libraries(paltest_fprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test14/CMakeLists.txt
index b92ede7c87..dc3186c743 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test14
add_dependencies(paltest_fprintf_test14 coreclrpal)
target_link_libraries(paltest_fprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test15/CMakeLists.txt
index 20f1e42aab..91718eeed8 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test15
add_dependencies(paltest_fprintf_test15 coreclrpal)
target_link_libraries(paltest_fprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test16/CMakeLists.txt
index 8d72421210..26dc1f8f59 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test16
add_dependencies(paltest_fprintf_test16 coreclrpal)
target_link_libraries(paltest_fprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test17/CMakeLists.txt
index 82d1f84f31..9493f54962 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test17
add_dependencies(paltest_fprintf_test17 coreclrpal)
target_link_libraries(paltest_fprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test18/CMakeLists.txt
index 1ca54e42b7..21a2e87887 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test18
add_dependencies(paltest_fprintf_test18 coreclrpal)
target_link_libraries(paltest_fprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test19/CMakeLists.txt
index 2c66239801..419d180fcf 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test19
add_dependencies(paltest_fprintf_test19 coreclrpal)
target_link_libraries(paltest_fprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test2/CMakeLists.txt
index ae1d9dc64d..88bd04c75f 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test2
add_dependencies(paltest_fprintf_test2 coreclrpal)
target_link_libraries(paltest_fprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/fprintf/test2/test2.cpp
index 1ed7f3fd23..1441827489 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test2/test2.cpp
@@ -36,6 +36,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest("foo %5.2s", "bar", "foo ba");
DoStrTest("foo %-5s", "bar", "foo bar ");
DoStrTest("foo %05s", "bar", "foo 00bar");
+ DoStrTest("foo %s", NULL, "foo (null)");
+ DoStrTest("foo %hs", NULL, "foo (null)");
+ DoWStrTest("foo %ls", NULL, "foo (null)");
+ DoWStrTest("foo %ws", NULL, "foo (null)");
+ DoStrTest("foo %Ls", NULL, "foo (null)");
+ DoStrTest("foo %I64s", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test3/CMakeLists.txt
index 4b10c4c407..42d3977e05 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test3
add_dependencies(paltest_fprintf_test3 coreclrpal)
target_link_libraries(paltest_fprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/fprintf/test3/test3.cpp
index 6185135581..dd34c08536 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test3/test3.cpp
@@ -35,6 +35,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest("foo %5.2S", convert("bar"), "foo ba");
DoWStrTest("foo %-5S", convert("bar"), "foo bar ");
DoWStrTest("foo %05S", convert("bar"), "foo 00bar");
+ DoWStrTest("foo %S", NULL, "foo (null)");
+ DoStrTest("foo %hS", NULL, "foo (null)");
+ DoWStrTest("foo %lS", NULL, "foo (null)");
+ DoWStrTest("foo %wS", NULL, "foo (null)");
+ DoWStrTest("foo %LS", NULL, "foo (null)");
+ DoWStrTest("foo %I64S", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test4/CMakeLists.txt
index 292bdb6625..7e6cc18f18 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test4
add_dependencies(paltest_fprintf_test4 coreclrpal)
target_link_libraries(paltest_fprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/fprintf/test4/test4.cpp
index 51ec1f099c..ef3108d864 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test4/test4.cpp
@@ -75,7 +75,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoTest("%p", NULL, "NULL", "0000000000000000", "0x0");
DoTest("%p", ptr, "pointer to 0x123456", "0000000000123456", "0x123456");
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test5/CMakeLists.txt
index 370ed3329a..6cea5197a0 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test5
add_dependencies(paltest_fprintf_test5 coreclrpal)
target_link_libraries(paltest_fprintf_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test6/CMakeLists.txt
index bd1cbda924..9e3cf01393 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test6
add_dependencies(paltest_fprintf_test6 coreclrpal)
target_link_libraries(paltest_fprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test7/CMakeLists.txt
index 38429e7900..92dd50ab34 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test7
add_dependencies(paltest_fprintf_test7 coreclrpal)
target_link_libraries(paltest_fprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test8/CMakeLists.txt
index 990eca26b0..9aa9af8211 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test8
add_dependencies(paltest_fprintf_test8 coreclrpal)
target_link_libraries(paltest_fprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fprintf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fprintf/test9/CMakeLists.txt
index 715d38a431..6a7bb4de3d 100644
--- a/src/pal/tests/palsuite/c_runtime/fprintf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fprintf/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fprintf_test9
add_dependencies(paltest_fprintf_test9 coreclrpal)
target_link_libraries(paltest_fprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fputs/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fputs/test1/CMakeLists.txt
index d0f1aca0e6..1e0fbcb60b 100644
--- a/src/pal/tests/palsuite/c_runtime/fputs/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fputs/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fputs_test1
add_dependencies(paltest_fputs_test1 coreclrpal)
target_link_libraries(paltest_fputs_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fputs/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fputs/test2/CMakeLists.txt
index 9242ea16e5..074500bb24 100644
--- a/src/pal/tests/palsuite/c_runtime/fputs/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fputs/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fputs_test2
add_dependencies(paltest_fputs_test2 coreclrpal)
target_link_libraries(paltest_fputs_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fread/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fread/test1/CMakeLists.txt
index 1bd84b5c62..71204c0796 100644
--- a/src/pal/tests/palsuite/c_runtime/fread/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fread/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fread_test1
add_dependencies(paltest_fread_test1 coreclrpal)
target_link_libraries(paltest_fread_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fread/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fread/test2/CMakeLists.txt
index 93e0394832..1bae93e439 100644
--- a/src/pal/tests/palsuite/c_runtime/fread/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fread/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fread_test2
add_dependencies(paltest_fread_test2 coreclrpal)
target_link_libraries(paltest_fread_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fread/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fread/test3/CMakeLists.txt
index 285608bc3d..a678e2e110 100644
--- a/src/pal/tests/palsuite/c_runtime/fread/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fread/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fread_test3
add_dependencies(paltest_fread_test3 coreclrpal)
target_link_libraries(paltest_fread_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/free/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/free/test1/CMakeLists.txt
index 92ee9896c7..66c0b568d0 100644
--- a/src/pal/tests/palsuite/c_runtime/free/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/free/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_free_test1
add_dependencies(paltest_free_test1 coreclrpal)
target_link_libraries(paltest_free_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fseek/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fseek/test1/CMakeLists.txt
index 59ee8b4563..906a935f1c 100644
--- a/src/pal/tests/palsuite/c_runtime/fseek/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fseek/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fseek_test1
add_dependencies(paltest_fseek_test1 coreclrpal)
target_link_libraries(paltest_fseek_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/ftell/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/ftell/test1/CMakeLists.txt
index a1f350d0c2..e7900f65aa 100644
--- a/src/pal/tests/palsuite/c_runtime/ftell/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/ftell/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_ftell_test1
add_dependencies(paltest_ftell_test1 coreclrpal)
target_link_libraries(paltest_ftell_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test1/CMakeLists.txt
index 519860b877..4c5835667c 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test1
add_dependencies(paltest_fwprintf_test1 coreclrpal)
target_link_libraries(paltest_fwprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test10/CMakeLists.txt
index e604e03dff..994cd5e271 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test10
add_dependencies(paltest_fwprintf_test10 coreclrpal)
target_link_libraries(paltest_fwprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test11/CMakeLists.txt
index 18be522823..a2bc58527e 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test11
add_dependencies(paltest_fwprintf_test11 coreclrpal)
target_link_libraries(paltest_fwprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test12/CMakeLists.txt
index 6ea739b28f..33006f439f 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test12
add_dependencies(paltest_fwprintf_test12 coreclrpal)
target_link_libraries(paltest_fwprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test13/CMakeLists.txt
index 8505ccbd82..fef3d08d51 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test13
add_dependencies(paltest_fwprintf_test13 coreclrpal)
target_link_libraries(paltest_fwprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test14/CMakeLists.txt
index 548e60fdb8..6e37e4fb81 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test14
add_dependencies(paltest_fwprintf_test14 coreclrpal)
target_link_libraries(paltest_fwprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test15/CMakeLists.txt
index c5b53461a7..5f1513d645 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test15
add_dependencies(paltest_fwprintf_test15 coreclrpal)
target_link_libraries(paltest_fwprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test16/CMakeLists.txt
index 51af0a0d60..f77b355304 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test16
add_dependencies(paltest_fwprintf_test16 coreclrpal)
target_link_libraries(paltest_fwprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test17/CMakeLists.txt
index 9ed8a390e7..5a4a58e7d3 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test17
add_dependencies(paltest_fwprintf_test17 coreclrpal)
target_link_libraries(paltest_fwprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test18/CMakeLists.txt
index 3e3ba4efc7..9839b9fb35 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test18
add_dependencies(paltest_fwprintf_test18 coreclrpal)
target_link_libraries(paltest_fwprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test19/CMakeLists.txt
index fbb7370ba3..e7ac859f18 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test19
add_dependencies(paltest_fwprintf_test19 coreclrpal)
target_link_libraries(paltest_fwprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test2/CMakeLists.txt
index e65a396862..e589a068c0 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test2
add_dependencies(paltest_fwprintf_test2 coreclrpal)
target_link_libraries(paltest_fwprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/fwprintf/test2/test2.cpp
index ecd3c513df..1e03147619 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test2/test2.cpp
@@ -38,6 +38,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest(convert("foo %5.2s"), convert("bar"), "foo ba");
DoWStrTest(convert("foo %-5s"), convert("bar"), "foo bar ");
DoWStrTest(convert("foo %05s"), convert("bar"), "foo 00bar");
+ DoWStrTest(convert("foo %s"), NULL, "foo (null)");
+ DoStrTest(convert("foo %hs"), NULL, "foo (null)");
+ DoWStrTest(convert("foo %ls"), NULL, "foo (null)");
+ DoWStrTest(convert("foo %ws"), NULL, "foo (null)");
+ DoWStrTest(convert("foo %Ls"), NULL, "foo (null)");
+ DoWStrTest(convert("foo %I64s"), NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test3/CMakeLists.txt
index 53c46369de..f583d40ace 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test3
add_dependencies(paltest_fwprintf_test3 coreclrpal)
target_link_libraries(paltest_fwprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/fwprintf/test3/test3.cpp
index d718a19067..ff24aa715f 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test3/test3.cpp
@@ -37,6 +37,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest(convert("foo %5.2S"),"bar", "foo ba");
DoStrTest(convert("foo %-5S"), "bar", "foo bar ");
DoStrTest(convert("foo %05S"), "bar", "foo 00bar");
+ DoStrTest(convert("foo %S"), NULL, "foo (null)");
+ DoStrTest(convert("foo %hS"), NULL, "foo (null)");
+ DoWStrTest(convert("foo %lS"), NULL, "foo (null)");
+ DoWStrTest(convert("foo %wS"), NULL, "foo (null)");
+ DoStrTest(convert("foo %LS"), NULL, "foo (null)");
+ DoStrTest(convert("foo %I64S"), NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test4/CMakeLists.txt
index 9dbb46283e..166938445b 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test4
add_dependencies(paltest_fwprintf_test4 coreclrpal)
target_link_libraries(paltest_fwprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/fwprintf/test4/test4.cpp
index 96fb472c3e..a894120f9a 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test4/test4.cpp
@@ -32,7 +32,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest(convert("%p"), NULL, "NULL", "0000000000000000", "0x0");
DoPointerTest(convert("%p"), ptr, "pointer to 0x123456", "0000000000123456",
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test5/CMakeLists.txt
index 4e72e3ca88..4611c7fbc4 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test5
add_dependencies(paltest_fwprintf_test5 coreclrpal)
target_link_libraries(paltest_fwprintf_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test6/CMakeLists.txt
index d57f07fafa..f692baaf11 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test6
add_dependencies(paltest_fwprintf_test6 coreclrpal)
target_link_libraries(paltest_fwprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test7/CMakeLists.txt
index 314ca353e5..18b6673c8b 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test7
add_dependencies(paltest_fwprintf_test7 coreclrpal)
target_link_libraries(paltest_fwprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test8/CMakeLists.txt
index e818df2eb2..dfb8814bdc 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test8
add_dependencies(paltest_fwprintf_test8 coreclrpal)
target_link_libraries(paltest_fwprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwprintf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwprintf/test9/CMakeLists.txt
index 28b6b86921..3e08677734 100644
--- a/src/pal/tests/palsuite/c_runtime/fwprintf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwprintf/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwprintf_test9
add_dependencies(paltest_fwprintf_test9 coreclrpal)
target_link_libraries(paltest_fwprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/fwrite/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/fwrite/test1/CMakeLists.txt
index 5c8b7449f2..084c1fc415 100644
--- a/src/pal/tests/palsuite/c_runtime/fwrite/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/fwrite/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_fwrite_test1
add_dependencies(paltest_fwrite_test1 coreclrpal)
target_link_libraries(paltest_fwrite_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/getc/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/getc/test1/CMakeLists.txt
index 68ecaa9abb..92f6f31e17 100644
--- a/src/pal/tests/palsuite/c_runtime/getc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/getc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getc_test1
add_dependencies(paltest_getc_test1 coreclrpal)
target_link_libraries(paltest_getc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/getenv/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/getenv/test1/CMakeLists.txt
index 9c52c2890e..8cb87b1190 100644
--- a/src/pal/tests/palsuite/c_runtime/getenv/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/getenv/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenv_test1
add_dependencies(paltest_getenv_test1 coreclrpal)
target_link_libraries(paltest_getenv_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/getenv/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/getenv/test2/CMakeLists.txt
index 971a836239..de8bc27cdc 100644
--- a/src/pal/tests/palsuite/c_runtime/getenv/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/getenv/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenv_test2
add_dependencies(paltest_getenv_test2 coreclrpal)
target_link_libraries(paltest_getenv_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/getenv/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/getenv/test3/CMakeLists.txt
index 620ccd1003..48d3b117d6 100644
--- a/src/pal/tests/palsuite/c_runtime/getenv/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/getenv/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenv_test3
add_dependencies(paltest_getenv_test3 coreclrpal)
target_link_libraries(paltest_getenv_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/isalnum/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/isalnum/test1/CMakeLists.txt
index af65f32cbf..033f58d912 100644
--- a/src/pal/tests/palsuite/c_runtime/isalnum/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/isalnum/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isalnum_test1
add_dependencies(paltest_isalnum_test1 coreclrpal)
target_link_libraries(paltest_isalnum_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/isalpha/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/isalpha/test1/CMakeLists.txt
index 82f19ad383..8033ae07f0 100644
--- a/src/pal/tests/palsuite/c_runtime/isalpha/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/isalpha/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isalpha_test1
add_dependencies(paltest_isalpha_test1 coreclrpal)
target_link_libraries(paltest_isalpha_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/isdigit/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/isdigit/test1/CMakeLists.txt
index b96b7aa706..8f74b2d0cd 100644
--- a/src/pal/tests/palsuite/c_runtime/isdigit/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/isdigit/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isdigit_test1
add_dependencies(paltest_isdigit_test1 coreclrpal)
target_link_libraries(paltest_isdigit_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/islower/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/islower/test1/CMakeLists.txt
index d071d4bb65..a02dc70887 100644
--- a/src/pal/tests/palsuite/c_runtime/islower/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/islower/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_islower_test1
add_dependencies(paltest_islower_test1 coreclrpal)
target_link_libraries(paltest_islower_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/isprint/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/isprint/test1/CMakeLists.txt
index 91410a02ab..6e47a8f69d 100644
--- a/src/pal/tests/palsuite/c_runtime/isprint/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/isprint/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isprint_test1
add_dependencies(paltest_isprint_test1 coreclrpal)
target_link_libraries(paltest_isprint_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/isprint/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/isprint/test2/CMakeLists.txt
index 53ad94273c..bcecac10f7 100644
--- a/src/pal/tests/palsuite/c_runtime/isprint/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/isprint/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isprint_test2
add_dependencies(paltest_isprint_test2 coreclrpal)
target_link_libraries(paltest_isprint_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/isspace/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/isspace/test1/CMakeLists.txt
index c3cc525145..ee6c8f3ef3 100644
--- a/src/pal/tests/palsuite/c_runtime/isspace/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/isspace/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isspace_test1
add_dependencies(paltest_isspace_test1 coreclrpal)
target_link_libraries(paltest_isspace_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/isupper/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/isupper/test1/CMakeLists.txt
index e1cfa6609d..96742792cb 100644
--- a/src/pal/tests/palsuite/c_runtime/isupper/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/isupper/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isupper_test1
add_dependencies(paltest_isupper_test1 coreclrpal)
target_link_libraries(paltest_isupper_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/iswdigit/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/iswdigit/test1/CMakeLists.txt
index 4074abbe76..723a26a5b2 100644
--- a/src/pal/tests/palsuite/c_runtime/iswdigit/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/iswdigit/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_iswdigit_test1
add_dependencies(paltest_iswdigit_test1 coreclrpal)
target_link_libraries(paltest_iswdigit_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/iswprint/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/iswprint/test1/CMakeLists.txt
index d21c232133..50c6f741f9 100644
--- a/src/pal/tests/palsuite/c_runtime/iswprint/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/iswprint/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_iswprint_test1
add_dependencies(paltest_iswprint_test1 coreclrpal)
target_link_libraries(paltest_iswprint_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/iswspace/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/iswspace/test1/CMakeLists.txt
index 1f9a54fb17..02f6acd72d 100644
--- a/src/pal/tests/palsuite/c_runtime/iswspace/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/iswspace/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_iswspace_test1
add_dependencies(paltest_iswspace_test1 coreclrpal)
target_link_libraries(paltest_iswspace_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/iswupper/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/iswupper/test1/CMakeLists.txt
index 1da5fbaa75..301bd145d5 100644
--- a/src/pal/tests/palsuite/c_runtime/iswupper/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/iswupper/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_iswupper_test1
add_dependencies(paltest_iswupper_test1 coreclrpal)
target_link_libraries(paltest_iswupper_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/iswxdigit/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/iswxdigit/test1/CMakeLists.txt
index ae55976128..6809f5a2d1 100644
--- a/src/pal/tests/palsuite/c_runtime/iswxdigit/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/iswxdigit/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_iswxdigit_test1
add_dependencies(paltest_iswxdigit_test1 coreclrpal)
target_link_libraries(paltest_iswxdigit_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/isxdigit/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/isxdigit/test1/CMakeLists.txt
index 4fd46c93d8..cfb0e91e93 100644
--- a/src/pal/tests/palsuite/c_runtime/isxdigit/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/isxdigit/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isxdigit_test1
add_dependencies(paltest_isxdigit_test1 coreclrpal)
target_link_libraries(paltest_isxdigit_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/labs/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/labs/test1/CMakeLists.txt
index 2ffb3cd641..70d1b5ee64 100644
--- a/src/pal/tests/palsuite/c_runtime/labs/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/labs/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_labs_test1
add_dependencies(paltest_labs_test1 coreclrpal)
target_link_libraries(paltest_labs_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/llabs/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/llabs/test1/CMakeLists.txt
index 3adc3cc737..2885109b55 100644
--- a/src/pal/tests/palsuite/c_runtime/llabs/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/llabs/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_llabs_test1
add_dependencies(paltest_llabs_test1 coreclrpal)
target_link_libraries(paltest_llabs_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/localtime/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/localtime/test1/CMakeLists.txt
index 698699f821..55b42585c1 100644
--- a/src/pal/tests/palsuite/c_runtime/localtime/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/localtime/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_localtime_test1
add_dependencies(paltest_localtime_test1 coreclrpal)
target_link_libraries(paltest_localtime_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/log/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/log/test1/CMakeLists.txt
index c8f991b997..15a45edb6a 100644
--- a/src/pal/tests/palsuite/c_runtime/log/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/log/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_log_test1
add_dependencies(paltest_log_test1 coreclrpal)
target_link_libraries(paltest_log_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/log10/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/log10/test1/CMakeLists.txt
index 31025fbd04..17c87301e2 100644
--- a/src/pal/tests/palsuite/c_runtime/log10/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/log10/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_log10_test1
add_dependencies(paltest_log10_test1 coreclrpal)
target_link_libraries(paltest_log10_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/log10f/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/log10f/test1/CMakeLists.txt
index b2c0835451..6f3358b865 100644
--- a/src/pal/tests/palsuite/c_runtime/log10f/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/log10f/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_log10f_test1
add_dependencies(paltest_log10f_test1 coreclrpal)
target_link_libraries(paltest_log10f_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/logf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/logf/test1/CMakeLists.txt
index 550f572bc7..2dcfdefde5 100644
--- a/src/pal/tests/palsuite/c_runtime/logf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/logf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_logf_test1
add_dependencies(paltest_logf_test1 coreclrpal)
target_link_libraries(paltest_logf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/malloc/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/malloc/test1/CMakeLists.txt
index f475730973..b08685d165 100644
--- a/src/pal/tests/palsuite/c_runtime/malloc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/malloc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_malloc_test1
add_dependencies(paltest_malloc_test1 coreclrpal)
target_link_libraries(paltest_malloc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/malloc/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/malloc/test2/CMakeLists.txt
index 663e104d0e..1b72ab8e62 100644
--- a/src/pal/tests/palsuite/c_runtime/malloc/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/malloc/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_malloc_test2
add_dependencies(paltest_malloc_test2 coreclrpal)
target_link_libraries(paltest_malloc_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/memchr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/memchr/test1/CMakeLists.txt
index 959fd2a3bc..1f6fc08568 100644
--- a/src/pal/tests/palsuite/c_runtime/memchr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/memchr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_memchr_test1
add_dependencies(paltest_memchr_test1 coreclrpal)
target_link_libraries(paltest_memchr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/memcmp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/memcmp/test1/CMakeLists.txt
index 43d8fdd7f7..24aa40a56b 100644
--- a/src/pal/tests/palsuite/c_runtime/memcmp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/memcmp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_memcmp_test1
add_dependencies(paltest_memcmp_test1 coreclrpal)
target_link_libraries(paltest_memcmp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/memcpy/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/memcpy/test1/CMakeLists.txt
index 14db0df60e..982433f7e2 100644
--- a/src/pal/tests/palsuite/c_runtime/memcpy/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/memcpy/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_memcpy_test1
add_dependencies(paltest_memcpy_test1 coreclrpal)
target_link_libraries(paltest_memcpy_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/memmove/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/memmove/test1/CMakeLists.txt
index db6f65e48b..9794085914 100644
--- a/src/pal/tests/palsuite/c_runtime/memmove/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/memmove/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_memmove_test1
add_dependencies(paltest_memmove_test1 coreclrpal)
target_link_libraries(paltest_memmove_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/memset/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/memset/test1/CMakeLists.txt
index bc3d6251cb..3f3c5614e0 100644
--- a/src/pal/tests/palsuite/c_runtime/memset/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/memset/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_memset_test1
add_dependencies(paltest_memset_test1 coreclrpal)
target_link_libraries(paltest_memset_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/modf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/modf/test1/CMakeLists.txt
index 3fe7bc7c46..303ce629d1 100644
--- a/src/pal/tests/palsuite/c_runtime/modf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/modf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_modf_test1
add_dependencies(paltest_modf_test1 coreclrpal)
target_link_libraries(paltest_modf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/modff/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/modff/test1/CMakeLists.txt
index 10e5e99267..b3831c8e6d 100644
--- a/src/pal/tests/palsuite/c_runtime/modff/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/modff/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_modff_test1
add_dependencies(paltest_modff_test1 coreclrpal)
target_link_libraries(paltest_modff_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/pow/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/pow/test1/CMakeLists.txt
index f94210d5b7..339b7a3ee5 100644
--- a/src/pal/tests/palsuite/c_runtime/pow/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/pow/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pow_test1
add_dependencies(paltest_pow_test1 coreclrpal)
target_link_libraries(paltest_pow_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/powf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/powf/test1/CMakeLists.txt
index 8ea040f9a4..2b8e2bcff8 100644
--- a/src/pal/tests/palsuite/c_runtime/powf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/powf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_powf_test1
add_dependencies(paltest_powf_test1 coreclrpal)
target_link_libraries(paltest_powf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test1/CMakeLists.txt
index 2dace14f90..0938d8fb7d 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test1
add_dependencies(paltest_printf_test1 coreclrpal)
target_link_libraries(paltest_printf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test10/CMakeLists.txt
index 75e30c8599..f2a284b2a9 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test10
add_dependencies(paltest_printf_test10 coreclrpal)
target_link_libraries(paltest_printf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test11/CMakeLists.txt
index 4ee12dc21d..8eb44b5e43 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test11
add_dependencies(paltest_printf_test11 coreclrpal)
target_link_libraries(paltest_printf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test12/CMakeLists.txt
index 3b2e39d640..17c4a53812 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test12
add_dependencies(paltest_printf_test12 coreclrpal)
target_link_libraries(paltest_printf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test13/CMakeLists.txt
index b6af021d48..13b0f63188 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test13
add_dependencies(paltest_printf_test13 coreclrpal)
target_link_libraries(paltest_printf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test14/CMakeLists.txt
index 5a6cf8a180..22fd9ab76e 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test14
add_dependencies(paltest_printf_test14 coreclrpal)
target_link_libraries(paltest_printf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test15/CMakeLists.txt
index b1466a387d..cc350a5e5d 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test15
add_dependencies(paltest_printf_test15 coreclrpal)
target_link_libraries(paltest_printf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test16/CMakeLists.txt
index c81da10ec9..a61b5a0bd6 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test16
add_dependencies(paltest_printf_test16 coreclrpal)
target_link_libraries(paltest_printf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test17/CMakeLists.txt
index 9d40e54ca6..f8c1754d87 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test17
add_dependencies(paltest_printf_test17 coreclrpal)
target_link_libraries(paltest_printf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test18/CMakeLists.txt
index 6ab11f4be1..c83c096e97 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test18
add_dependencies(paltest_printf_test18 coreclrpal)
target_link_libraries(paltest_printf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test19/CMakeLists.txt
index f022938e32..4d3fe5f794 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test19
add_dependencies(paltest_printf_test19 coreclrpal)
target_link_libraries(paltest_printf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test2/CMakeLists.txt
index e92b6b09f3..d45c7727c9 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test2
add_dependencies(paltest_printf_test2 coreclrpal)
target_link_libraries(paltest_printf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/printf/test2/test2.cpp
index e766ef4a90..1c61b1d86d 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/printf/test2/test2.cpp
@@ -38,6 +38,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest("foo %5.2s", "bar", "foo ba");
DoStrTest("foo %-5s", "bar", "foo bar ");
DoStrTest("foo %05s", "bar", "foo 00bar");
+ DoStrTest("foo %s", NULL, "foo (null)");
+ DoStrTest("foo %hs", NULL, "foo (null)");
+ DoWStrTest("foo %ls", NULL, "foo (null)");
+ DoWStrTest("foo %ws", NULL, "foo (null)");
+ DoStrTest("foo %Ls", NULL, "foo (null)");
+ DoStrTest("foo %I64s", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test3/CMakeLists.txt
index fcfd779a0c..b6d9ce2e63 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test3
add_dependencies(paltest_printf_test3 coreclrpal)
target_link_libraries(paltest_printf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/printf/test3/test3.cpp
index 5cc530948c..79fe7213b3 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/printf/test3/test3.cpp
@@ -37,6 +37,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest("foo %5.2S", convert("bar"), "foo ba");
DoWStrTest("foo %-5S", convert("bar"), "foo bar ");
DoWStrTest("foo %05S", convert("bar"), "foo 00bar");
+ DoWStrTest("foo %S", NULL, "foo (null)");
+ DoStrTest("foo %hS", NULL, "foo (null)");
+ DoWStrTest("foo %lS", NULL, "foo (null)");
+ DoWStrTest("foo %wS", NULL, "foo (null)");
+ DoWStrTest("foo %LS", NULL, "foo (null)");
+ DoWStrTest("foo %I64S", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test4/CMakeLists.txt
index 7311bbea69..621c103cc7 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test4
add_dependencies(paltest_printf_test4 coreclrpal)
target_link_libraries(paltest_printf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/printf/test4/test4.cpp
index bcdc201d4f..7b0178cd29 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/printf/test4/test4.cpp
@@ -29,7 +29,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest("%p", NULL, "NULL", "0000000000000000");
DoPointerTest("%p", ptr, "pointer to 0x123456", "0000000000123456");
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test5/CMakeLists.txt
index bfe185c44f..73e8b7dbff 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test5
add_dependencies(paltest_printf_test5 coreclrpal)
target_link_libraries(paltest_printf_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test6/CMakeLists.txt
index 842ebfedc6..07639c6330 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test6
add_dependencies(paltest_printf_test6 coreclrpal)
target_link_libraries(paltest_printf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test7/CMakeLists.txt
index 16e39198ba..72bc2858b2 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test7
add_dependencies(paltest_printf_test7 coreclrpal)
target_link_libraries(paltest_printf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test8/CMakeLists.txt
index 4a40fee6d9..78ce601cac 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test8
add_dependencies(paltest_printf_test8 coreclrpal)
target_link_libraries(paltest_printf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/printf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/printf/test9/CMakeLists.txt
index df8f75d2fd..dfc2a8316c 100644
--- a/src/pal/tests/palsuite/c_runtime/printf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/printf/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_printf_test9
add_dependencies(paltest_printf_test9 coreclrpal)
target_link_libraries(paltest_printf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/qsort/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/qsort/test1/CMakeLists.txt
index ff215b8dc6..f41f4099f4 100644
--- a/src/pal/tests/palsuite/c_runtime/qsort/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/qsort/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_qsort_test1
add_dependencies(paltest_qsort_test1 coreclrpal)
target_link_libraries(paltest_qsort_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/qsort/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/qsort/test2/CMakeLists.txt
index cdd9642779..16e5c44220 100644
--- a/src/pal/tests/palsuite/c_runtime/qsort/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/qsort/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_qsort_test2
add_dependencies(paltest_qsort_test2 coreclrpal)
target_link_libraries(paltest_qsort_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/rand_srand/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/rand_srand/test1/CMakeLists.txt
index 6728f402ff..0afb6504c4 100644
--- a/src/pal/tests/palsuite/c_runtime/rand_srand/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/rand_srand/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_rand_srand_test1
add_dependencies(paltest_rand_srand_test1 coreclrpal)
target_link_libraries(paltest_rand_srand_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/realloc/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/realloc/test1/CMakeLists.txt
index 62830a0fe8..0c263d5b5b 100644
--- a/src/pal/tests/palsuite/c_runtime/realloc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/realloc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_realloc_test1
add_dependencies(paltest_realloc_test1 coreclrpal)
target_link_libraries(paltest_realloc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sin/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sin/test1/CMakeLists.txt
index 74a0e78f52..c46aaeccb8 100644
--- a/src/pal/tests/palsuite/c_runtime/sin/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sin/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sin_test1
add_dependencies(paltest_sin_test1 coreclrpal)
target_link_libraries(paltest_sin_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sinf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sinf/test1/CMakeLists.txt
index 0651b43d1d..9e03130464 100644
--- a/src/pal/tests/palsuite/c_runtime/sinf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sinf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sinf_test1
add_dependencies(paltest_sinf_test1 coreclrpal)
target_link_libraries(paltest_sinf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sinh/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sinh/test1/CMakeLists.txt
index b0101ba808..1c99bfa890 100644
--- a/src/pal/tests/palsuite/c_runtime/sinh/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sinh/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sinh_test1
add_dependencies(paltest_sinh_test1 coreclrpal)
target_link_libraries(paltest_sinh_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sinhf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sinhf/test1/CMakeLists.txt
index 72cce43460..60208d4e1c 100644
--- a/src/pal/tests/palsuite/c_runtime/sinhf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sinhf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sinhf_test1
add_dependencies(paltest_sinhf_test1 coreclrpal)
target_link_libraries(paltest_sinhf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test1/CMakeLists.txt
index ee0d90fe7f..5de43c73ac 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test1
add_dependencies(paltest_sprintf_test1 coreclrpal)
target_link_libraries(paltest_sprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test10/CMakeLists.txt
index 1efad19dee..54bc9c08dd 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test10
add_dependencies(paltest_sprintf_test10 coreclrpal)
target_link_libraries(paltest_sprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test11/CMakeLists.txt
index f2f4da694c..6eac95623b 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test11
add_dependencies(paltest_sprintf_test11 coreclrpal)
target_link_libraries(paltest_sprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test12/CMakeLists.txt
index 361e91f9ae..a49975993f 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test12
add_dependencies(paltest_sprintf_test12 coreclrpal)
target_link_libraries(paltest_sprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test13/CMakeLists.txt
index d08e13b2ba..4d66713fb8 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test13
add_dependencies(paltest_sprintf_test13 coreclrpal)
target_link_libraries(paltest_sprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test14/CMakeLists.txt
index 60ac2922d7..ce41b8a95c 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test14
add_dependencies(paltest_sprintf_test14 coreclrpal)
target_link_libraries(paltest_sprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test15/CMakeLists.txt
index 57bba40e6c..d20c4d07e9 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test15
add_dependencies(paltest_sprintf_test15 coreclrpal)
target_link_libraries(paltest_sprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test16/CMakeLists.txt
index fc93e1a67d..2ca1ffd2ef 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test16
add_dependencies(paltest_sprintf_test16 coreclrpal)
target_link_libraries(paltest_sprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test17/CMakeLists.txt
index dc5ff2bb30..0c17cbfc34 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test17
add_dependencies(paltest_sprintf_test17 coreclrpal)
target_link_libraries(paltest_sprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test18/CMakeLists.txt
index f6e1b09efa..afc3e8f01c 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test18
add_dependencies(paltest_sprintf_test18 coreclrpal)
target_link_libraries(paltest_sprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test19/CMakeLists.txt
index 757288b694..7553aede95 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test19
add_dependencies(paltest_sprintf_test19 coreclrpal)
target_link_libraries(paltest_sprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test2/CMakeLists.txt
index d569263da4..a4b0b007bc 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test2
add_dependencies(paltest_sprintf_test2 coreclrpal)
target_link_libraries(paltest_sprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/sprintf_s/test2/test2.cpp
index 990f4f04a8..a3eb71dd1c 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test2/test2.cpp
@@ -40,6 +40,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest("foo %5.2s", "bar", "foo ba");
DoStrTest("foo %-5s", "bar", "foo bar ");
DoStrTest("foo %05s", "bar", "foo 00bar");
+ DoStrTest("foo %s", NULL, "foo (null)");
+ DoStrTest("foo %hs", NULL, "foo (null)");
+ DoWStrTest("foo %ls", NULL, "foo (null)");
+ DoWStrTest("foo %ws", NULL, "foo (null)");
+ DoStrTest("foo %Ls", NULL, "foo (null)");
+ DoStrTest("foo %I64s", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test3/CMakeLists.txt
index 518c3f847a..825c79c03b 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test3
add_dependencies(paltest_sprintf_test3 coreclrpal)
target_link_libraries(paltest_sprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/sprintf_s/test3/test3.cpp
index c0dc8e1716..dd6e590263 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test3/test3.cpp
@@ -39,6 +39,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest("foo %5.2S", convert("bar"), "foo ba");
DoWStrTest("foo %-5S", convert("bar"), "foo bar ");
DoWStrTest("foo %05S", convert("bar"), "foo 00bar");
+ DoWStrTest("foo %S", NULL, "foo (null)");
+ DoStrTest("foo %hS", NULL, "foo (null)");
+ DoWStrTest("foo %lS", NULL, "foo (null)");
+ DoWStrTest("foo %wS", NULL, "foo (null)");
+ DoWStrTest("foo %LS", NULL, "foo (null)");
+ DoWStrTest("foo %I64S", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test4/CMakeLists.txt
index 260def44aa..0bde37c239 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test4
add_dependencies(paltest_sprintf_test4 coreclrpal)
target_link_libraries(paltest_sprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/sprintf_s/test4/test4.cpp
index 46115ad5ae..bb3a6d818c 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test4/test4.cpp
@@ -33,7 +33,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest("%p", NULL, "NULL", "0000000000000000");
DoPointerTest("%p", ptr, "pointer to 0x123456", "0000000000123456");
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test6/CMakeLists.txt
index fce1f204fd..495c256b4d 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test6
add_dependencies(paltest_sprintf_test6 coreclrpal)
target_link_libraries(paltest_sprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test7/CMakeLists.txt
index 72a831ec89..2fabe0b659 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test7
add_dependencies(paltest_sprintf_test7 coreclrpal)
target_link_libraries(paltest_sprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test8/CMakeLists.txt
index c9522c1c9d..cb67e89df6 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test8
add_dependencies(paltest_sprintf_test8 coreclrpal)
target_link_libraries(paltest_sprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sprintf_s/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sprintf_s/test9/CMakeLists.txt
index e76fed4784..005a23d4e6 100644
--- a/src/pal/tests/palsuite/c_runtime/sprintf_s/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sprintf_s/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sprintf_test9
add_dependencies(paltest_sprintf_test9 coreclrpal)
target_link_libraries(paltest_sprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sqrt/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sqrt/test1/CMakeLists.txt
index d4aefe6ca8..4680e2359b 100644
--- a/src/pal/tests/palsuite/c_runtime/sqrt/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sqrt/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sqrt_test1
add_dependencies(paltest_sqrt_test1 coreclrpal)
target_link_libraries(paltest_sqrt_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sqrtf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sqrtf/test1/CMakeLists.txt
index 96b6ffa998..51b76aeacd 100644
--- a/src/pal/tests/palsuite/c_runtime/sqrtf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sqrtf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sqrtf_test1
add_dependencies(paltest_sqrtf_test1 coreclrpal)
target_link_libraries(paltest_sqrtf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test1/CMakeLists.txt
index 97b8f570e3..82a0e703bd 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test1
add_dependencies(paltest_sscanf_test1 coreclrpal)
target_link_libraries(paltest_sscanf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test10/CMakeLists.txt
index afda216c6b..c85e1b031f 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test10
add_dependencies(paltest_sscanf_test10 coreclrpal)
target_link_libraries(paltest_sscanf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test11/CMakeLists.txt
index c8f98aeeef..2c7f0e29e9 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test11
add_dependencies(paltest_sscanf_test11 coreclrpal)
target_link_libraries(paltest_sscanf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test12/CMakeLists.txt
index 0ecedc3285..af2355643e 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test12
add_dependencies(paltest_sscanf_test12 coreclrpal)
target_link_libraries(paltest_sscanf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test13/CMakeLists.txt
index 4566ec3338..7f9b3a1658 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test13
add_dependencies(paltest_sscanf_test13 coreclrpal)
target_link_libraries(paltest_sscanf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test14/CMakeLists.txt
index 557acf5bf8..c195b12ca7 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test14
add_dependencies(paltest_sscanf_test14 coreclrpal)
target_link_libraries(paltest_sscanf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test15/CMakeLists.txt
index efde5c4a21..0c8967d821 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test15
add_dependencies(paltest_sscanf_test15 coreclrpal)
target_link_libraries(paltest_sscanf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test16/CMakeLists.txt
index 6757b0d78a..10a6cc8a4e 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test16
add_dependencies(paltest_sscanf_test16 coreclrpal)
target_link_libraries(paltest_sscanf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test17/CMakeLists.txt
index 8ea4d5e3f6..84832a848f 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test17
add_dependencies(paltest_sscanf_test17 coreclrpal)
target_link_libraries(paltest_sscanf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test2/CMakeLists.txt
index 4e36223a1d..a79492bf4f 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test2
add_dependencies(paltest_sscanf_test2 coreclrpal)
target_link_libraries(paltest_sscanf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test3/CMakeLists.txt
index 053a96ca0f..ba1a5286a4 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test3
add_dependencies(paltest_sscanf_test3 coreclrpal)
target_link_libraries(paltest_sscanf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test4/CMakeLists.txt
index ae04bfef57..456fce018f 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test4
add_dependencies(paltest_sscanf_test4 coreclrpal)
target_link_libraries(paltest_sscanf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test5/CMakeLists.txt
index 33dcaffec3..b4075037a4 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test5
add_dependencies(paltest_sscanf_test5 coreclrpal)
target_link_libraries(paltest_sscanf_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test6/CMakeLists.txt
index 1dd23c3cb1..f9815123d7 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test6
add_dependencies(paltest_sscanf_test6 coreclrpal)
target_link_libraries(paltest_sscanf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test7/CMakeLists.txt
index 015a27b776..ba2913626e 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test7
add_dependencies(paltest_sscanf_test7 coreclrpal)
target_link_libraries(paltest_sscanf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test8/CMakeLists.txt
index aa41ab42a6..2437679c04 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test8
add_dependencies(paltest_sscanf_test8 coreclrpal)
target_link_libraries(paltest_sscanf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/sscanf_s/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/sscanf_s/test9/CMakeLists.txt
index b631fd40ea..a3df87279f 100644
--- a/src/pal/tests/palsuite/c_runtime/sscanf_s/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/sscanf_s/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sscanf_test9
add_dependencies(paltest_sscanf_test9 coreclrpal)
target_link_libraries(paltest_sscanf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strcat/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strcat/test1/CMakeLists.txt
index fd62627db6..29d25f10e6 100644
--- a/src/pal/tests/palsuite/c_runtime/strcat/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strcat/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strcat_test1
add_dependencies(paltest_strcat_test1 coreclrpal)
target_link_libraries(paltest_strcat_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strchr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strchr/test1/CMakeLists.txt
index f3ffe3bc15..507d2e040f 100644
--- a/src/pal/tests/palsuite/c_runtime/strchr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strchr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strchr_test1
add_dependencies(paltest_strchr_test1 coreclrpal)
target_link_libraries(paltest_strchr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strcmp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strcmp/test1/CMakeLists.txt
index 3b0f89c2a5..6a0e9f13f6 100644
--- a/src/pal/tests/palsuite/c_runtime/strcmp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strcmp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strcmp_test1
add_dependencies(paltest_strcmp_test1 coreclrpal)
target_link_libraries(paltest_strcmp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strcpy/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strcpy/test1/CMakeLists.txt
index 4369d37a40..cecb086030 100644
--- a/src/pal/tests/palsuite/c_runtime/strcpy/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strcpy/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strcpy_test1
add_dependencies(paltest_strcpy_test1 coreclrpal)
target_link_libraries(paltest_strcpy_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strcspn/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strcspn/test1/CMakeLists.txt
index 717e18f0e9..4b1ea67893 100644
--- a/src/pal/tests/palsuite/c_runtime/strcspn/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strcspn/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strcspn_test1
add_dependencies(paltest_strcspn_test1 coreclrpal)
target_link_libraries(paltest_strcspn_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strlen/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strlen/test1/CMakeLists.txt
index 4afeb598aa..42cecf4aaf 100644
--- a/src/pal/tests/palsuite/c_runtime/strlen/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strlen/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strlen_test1
add_dependencies(paltest_strlen_test1 coreclrpal)
target_link_libraries(paltest_strlen_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strncat/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strncat/test1/CMakeLists.txt
index f8080ecdc2..bf2363387c 100644
--- a/src/pal/tests/palsuite/c_runtime/strncat/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strncat/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strncat_test1
add_dependencies(paltest_strncat_test1 coreclrpal)
target_link_libraries(paltest_strncat_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strncmp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strncmp/test1/CMakeLists.txt
index 34b53e294d..b76ff5eeab 100644
--- a/src/pal/tests/palsuite/c_runtime/strncmp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strncmp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strncmp_test1
add_dependencies(paltest_strncmp_test1 coreclrpal)
target_link_libraries(paltest_strncmp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strncpy/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strncpy/test1/CMakeLists.txt
index fb737c8c59..9b8ed3ff83 100644
--- a/src/pal/tests/palsuite/c_runtime/strncpy/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strncpy/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strncpy_test1
add_dependencies(paltest_strncpy_test1 coreclrpal)
target_link_libraries(paltest_strncpy_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strpbrk/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strpbrk/test1/CMakeLists.txt
index 9e76436e01..239b36c946 100644
--- a/src/pal/tests/palsuite/c_runtime/strpbrk/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strpbrk/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strpbrk_test1
add_dependencies(paltest_strpbrk_test1 coreclrpal)
target_link_libraries(paltest_strpbrk_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strrchr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strrchr/test1/CMakeLists.txt
index bb6916038d..19bdd4e1d0 100644
--- a/src/pal/tests/palsuite/c_runtime/strrchr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strrchr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strrchr_test1
add_dependencies(paltest_strrchr_test1 coreclrpal)
target_link_libraries(paltest_strrchr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strspn/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strspn/test1/CMakeLists.txt
index c72fd0fa9a..324690034d 100644
--- a/src/pal/tests/palsuite/c_runtime/strspn/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strspn/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strspn_test1
add_dependencies(paltest_strspn_test1 coreclrpal)
target_link_libraries(paltest_strspn_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strstr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strstr/test1/CMakeLists.txt
index 004b9a5658..b8fe41809f 100644
--- a/src/pal/tests/palsuite/c_runtime/strstr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strstr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strstr_test1
add_dependencies(paltest_strstr_test1 coreclrpal)
target_link_libraries(paltest_strstr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strtod/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strtod/test1/CMakeLists.txt
index 09884f32e6..1a2df225bd 100644
--- a/src/pal/tests/palsuite/c_runtime/strtod/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strtod/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strtod_test1
add_dependencies(paltest_strtod_test1 coreclrpal)
target_link_libraries(paltest_strtod_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strtod/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strtod/test2/CMakeLists.txt
index 8729cc5a1c..581e4de3e7 100644
--- a/src/pal/tests/palsuite/c_runtime/strtod/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strtod/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strtod_test2
add_dependencies(paltest_strtod_test2 coreclrpal)
target_link_libraries(paltest_strtod_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strtok/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strtok/test1/CMakeLists.txt
index 422c4e96b5..098a6640f1 100644
--- a/src/pal/tests/palsuite/c_runtime/strtok/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strtok/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strtok_test1
add_dependencies(paltest_strtok_test1 coreclrpal)
target_link_libraries(paltest_strtok_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/strtoul/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/strtoul/test1/CMakeLists.txt
index 009e85fb11..bdf4497cae 100644
--- a/src/pal/tests/palsuite/c_runtime/strtoul/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/strtoul/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_strtoul_test1
add_dependencies(paltest_strtoul_test1 coreclrpal)
target_link_libraries(paltest_strtoul_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/CMakeLists.txt
index cafb9536b0..8fe1cb60ac 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/CMakeLists.txt
@@ -14,7 +14,6 @@ add_subdirectory(test19)
add_subdirectory(test2)
add_subdirectory(test3)
add_subdirectory(test4)
-add_subdirectory(test5)
add_subdirectory(test6)
add_subdirectory(test7)
add_subdirectory(test8)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/swprintf.h b/src/pal/tests/palsuite/c_runtime/swprintf/swprintf.h
index 6f4c914a82..210b12ec7a 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/swprintf.h
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/swprintf.h
@@ -18,7 +18,7 @@ void DoWStrTest(const WCHAR *formatstr, WCHAR *param, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- swprintf(buf, formatstr, param);
+ swprintf_s(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, wcslen(checkstr) * 2 + 2) != 0)
{
@@ -33,7 +33,7 @@ void DoStrTest(const WCHAR *formatstr, char *param, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- swprintf(buf, formatstr, param);
+ swprintf_s(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, wcslen(checkstr) * 2 + 2) != 0)
{
@@ -48,7 +48,7 @@ void DoPointerTest(const WCHAR *formatstr, void* param, const WCHAR *checkstr1)
{
WCHAR buf[256] = { 0 };
- swprintf(buf, formatstr, param);
+ swprintf_s(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr1, wcslen(checkstr1)*2 + 2) != 0)
{
Fail("ERROR: failed to insert pointer to %#p into \"%s\"\n"
@@ -57,51 +57,11 @@ void DoPointerTest(const WCHAR *formatstr, void* param, const WCHAR *checkstr1)
}
}
-void DoCountTest(const WCHAR *formatstr, int param, const WCHAR *checkstr)
-{
- WCHAR buf[512] = { 0 };
- int n = -1;
-
- swprintf(buf, formatstr, &n);
-
- if (n != param)
- {
- Fail("ERROR: Expected count parameter to resolve to %d, got %d\n",
- param, n);
- }
-
- if (memcmp(buf, checkstr, wcslen(checkstr)*2 + 2) != 0)
- {
- Fail("ERROR: Expected \"%s\" got \"%s\".\n",
- convertC(checkstr), convertC(buf));
- }
-}
-
-void DoShortCountTest(const WCHAR *formatstr, int param, const WCHAR *checkstr)
-{
- WCHAR buf[256] = { 0 };
- short int n = -1;
-
- swprintf(buf, formatstr, &n);
-
- if (n != param)
- {
- Fail("ERROR: Expected count parameter to resolve to %d, got %d\n",
- param, n);
- }
-
- if (memcmp(buf, checkstr, wcslen(checkstr)*2 + 2) != 0)
- {
- Fail("ERROR: Expected \"%s\" got \"%s\".\n",
- convertC(checkstr), convertC(buf));
- }
-}
-
void DoCharTest(const WCHAR *formatstr, char param, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- swprintf(buf, formatstr, param);
+ swprintf_s(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, wcslen(checkstr)*2 + 2) != 0)
{
Fail("ERROR: failed to insert char \'%c\' (%d) into \"%s\"\n"
@@ -114,7 +74,7 @@ void DoWCharTest(const WCHAR *formatstr, WCHAR param, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- swprintf(buf, formatstr, param);
+ swprintf_s(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, wcslen(checkstr)*2 + 2) != 0)
{
Fail("ERROR: failed to insert wide char \'%c\' (%d) into \"%s\"\n"
@@ -127,7 +87,7 @@ void DoNumTest(const WCHAR *formatstr, int value, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- swprintf(buf, formatstr, value);
+ swprintf_s(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr, wcslen(checkstr)* 2 + 2) != 0)
{
Fail("ERROR: failed to insert %#x into \"%s\"\n"
@@ -141,7 +101,7 @@ void DoI64Test(const WCHAR *formatstr, INT64 param, char *paramdesc,
{
WCHAR buf[256] = { 0 };
- swprintf(buf, formatstr, param);
+ swprintf_s(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr1, wcslen(checkstr1)*2 + 2) != 0)
{
Fail("ERROR: failed to insert %s into \"%s\"\n"
@@ -155,7 +115,7 @@ void DoDoubleTest(const WCHAR *formatstr, double value, const WCHAR *checkstr1,
{
WCHAR buf[256] = { 0 };
- swprintf(buf, formatstr, value);
+ swprintf_s(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr1, wcslen(checkstr1)*2 + 2) != 0 &&
memcmp(buf, checkstr2, wcslen(checkstr2)*2 + 2) != 0)
{
@@ -171,7 +131,7 @@ void DoArgumentPrecTest(const WCHAR *formatstr, int precision, void *param,
{
WCHAR buf[256];
- swprintf(buf, formatstr, precision, param);
+ swprintf_s(buf, _countof(buf), formatstr, precision, param);
if (memcmp(buf, checkstr1, wcslen(checkstr1) + 2) != 0 &&
memcmp(buf, checkstr2, wcslen(checkstr2) + 2) != 0)
{
@@ -187,7 +147,7 @@ void DoArgumentPrecDoubleTest(const WCHAR *formatstr, int precision, double para
{
WCHAR buf[256];
- swprintf(buf, formatstr, precision, param);
+ swprintf_s(buf, _countof(buf), formatstr, precision, param);
if (memcmp(buf, checkstr1, wcslen(checkstr1) + 2) != 0 &&
memcmp(buf, checkstr2, wcslen(checkstr2) + 2) != 0)
{
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test1/CMakeLists.txt
index c9be8c3347..f89cfb6fd6 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test1
add_dependencies(paltest_swprintf_test1 coreclrpal)
target_link_libraries(paltest_swprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test1/test1.cpp b/src/pal/tests/palsuite/c_runtime/swprintf/test1/test1.cpp
index 626040d9f7..c47d7d5202 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test1/test1.cpp
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test1/test1.cpp
@@ -31,7 +31,7 @@ int __cdecl main(int argc, char *argv[])
}
checkstr = convert("hello world");
- swprintf(buf, convert("hello world"));
+ swprintf_s(buf, _countof(buf), convert("hello world"));
if (memcmp(checkstr, buf, wcslen(checkstr)*2+2) != 0)
{
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test10/CMakeLists.txt
index 222108393b..70581d16a9 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test10
add_dependencies(paltest_swprintf_test10 coreclrpal)
target_link_libraries(paltest_swprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test11/CMakeLists.txt
index 96222a5b2a..4d51917540 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test11
add_dependencies(paltest_swprintf_test11 coreclrpal)
target_link_libraries(paltest_swprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test12/CMakeLists.txt
index 1ffe620fed..57cce1679a 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test12
add_dependencies(paltest_swprintf_test12 coreclrpal)
target_link_libraries(paltest_swprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test13/CMakeLists.txt
index 8699589ec9..5b6c635858 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test13
add_dependencies(paltest_swprintf_test13 coreclrpal)
target_link_libraries(paltest_swprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test14/CMakeLists.txt
index 2a4b84805c..88334d67a5 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test14
add_dependencies(paltest_swprintf_test14 coreclrpal)
target_link_libraries(paltest_swprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test15/CMakeLists.txt
index 22382bce5f..5387060b2d 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test15
add_dependencies(paltest_swprintf_test15 coreclrpal)
target_link_libraries(paltest_swprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test16/CMakeLists.txt
index 462f0806cd..4f66beaa24 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test16
add_dependencies(paltest_swprintf_test16 coreclrpal)
target_link_libraries(paltest_swprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test17/CMakeLists.txt
index c5b4d44593..ace16a18f1 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test17
add_dependencies(paltest_swprintf_test17 coreclrpal)
target_link_libraries(paltest_swprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test18/CMakeLists.txt
index 6cdf576966..ddce256260 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test18
add_dependencies(paltest_swprintf_test18 coreclrpal)
target_link_libraries(paltest_swprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test19/CMakeLists.txt
index 334b7b4fa1..8d48ce438c 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test19
add_dependencies(paltest_swprintf_test19 coreclrpal)
target_link_libraries(paltest_swprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test19/test19.cpp b/src/pal/tests/palsuite/c_runtime/swprintf/test19/test19.cpp
index c0346036cd..0967bc8f4b 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test19/test19.cpp
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test19/test19.cpp
@@ -33,14 +33,6 @@ int __cdecl main(int argc, char *argv[])
convert("ba"), convert("ba"));
DoArgumentPrecTest(convert("%.*S"), 2, (void*)"bar", "bar", convert("ba"),
convert("ba"));
- DoArgumentPrecTest(convert("%.*n"), 3, (void*)&n, "pointer to int", convert(""),
- convert(""));
- if (n != 0)
- {
- Fail("ERROR: Expected count parameter to resolve to %d, got %X\n",
- 0, n);
- }
-
DoArgumentPrecTest(convert("%.*c"), 0, (void*)'a', "a", convert("a"),
convert("a"));
DoArgumentPrecTest(convert("%.*c"), 4, (void*)'a', "a", convert("a"),
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test2/CMakeLists.txt
index af2b13e4c7..fcf7136797 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test2
add_dependencies(paltest_swprintf_test2 coreclrpal)
target_link_libraries(paltest_swprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/swprintf/test2/test2.cpp
index deffd3edd7..1c2f420fe9 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test2/test2.cpp
@@ -40,6 +40,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest(convert("foo %5.2s"), convert("bar"), convert("foo ba"));
DoWStrTest(convert("foo %-5s"), convert("bar"), convert("foo bar "));
DoWStrTest(convert("foo %05s"), convert("bar"), convert("foo 00bar"));
+ DoWStrTest(convert("foo %s"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %hs"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %ls"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %ws"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %Ls"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %I64s"), NULL, convert("foo (null)"));
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test3/CMakeLists.txt
index 14b81f4ac8..cc79c2d1d1 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test3
add_dependencies(paltest_swprintf_test3 coreclrpal)
target_link_libraries(paltest_swprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/swprintf/test3/test3.cpp
index 42875c0640..8c6c38c96b 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test3/test3.cpp
@@ -38,6 +38,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest(convert("foo %5.2S"),"bar", convert("foo ba"));
DoStrTest(convert("foo %-5S"), "bar", convert("foo bar "));
DoStrTest(convert("foo %05S"), "bar", convert("foo 00bar"));
+ DoStrTest(convert("foo %S"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %hS"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %lS"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %wS"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %LS"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %I64S"), NULL, convert("foo (null)"));
PAL_Terminate();
return PASS;
}
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test4/CMakeLists.txt
index e153e6b02f..c5d92462a6 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test4
add_dependencies(paltest_swprintf_test4 coreclrpal)
target_link_libraries(paltest_swprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/swprintf/test4/test4.cpp
index 02cc3f9005..9a68bdaac3 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test4/test4.cpp
@@ -33,7 +33,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest(convert("%p"), NULL, convert("0000000000000000"));
DoPointerTest(convert("%p"), ptr, convert("0000000000123456"));
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test5/CMakeLists.txt
deleted file mode 100644
index 967ccbb992..0000000000
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test5/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12.2)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(SOURCES
- test5.cpp
-)
-
-add_executable(paltest_swprintf_test5
- ${SOURCES}
-)
-
-add_dependencies(paltest_swprintf_test5 coreclrpal)
-
-target_link_libraries(paltest_swprintf_test5
- pthread
- m
- coreclrpal
-)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test5/test5.cpp b/src/pal/tests/palsuite/c_runtime/swprintf/test5/test5.cpp
deleted file mode 100644
index e85adc120e..0000000000
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test5/test5.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================================
-**
-** Source: test5.c
-**
-** Purpose:Tests swprintf with the count specifier
-**
-**
-**==========================================================================*/
-
-
-
-#include <palsuite.h>
-#include "../swprintf.h"
-
-/*
- * Uses memcmp & wcslen
- */
-
-int __cdecl main(int argc, char *argv[])
-{
- WCHAR *longStr;
- WCHAR *longResult;
-
- if (PAL_Initialize(argc, argv) != 0)
- {
- return FAIL;
- }
-
- longStr =
- convert("really-long-string-that-just-keeps-going-on-and-on-and-on.."
- "..................useless-filler.................................."
- "..................useless-filler.................................."
- "..................useless-filler.................................."
- "%n bar");
- longResult =
- convert("really-long-string-that-just-keeps-going-on-and-on-and-on.."
- "..................useless-filler.................................."
- "..................useless-filler.................................."
- "..................useless-filler.................................."
- " bar");
-
- DoCountTest(convert("foo %n bar"), 4, convert("foo bar"));
- DoCountTest(longStr, 257, longResult);
- DoCountTest(convert("fo%n bar"), 2, convert("fo bar"));
- DoCountTest(convert("%n"), 0, convert(""));
- DoCountTest(convert("foo %#n bar"), 4, convert("foo bar"));
- DoCountTest(convert("foo % n bar"), 4, convert("foo bar"));
- DoCountTest(convert("foo %+n bar"), 4, convert("foo bar"));
- DoCountTest(convert("foo %-n bar"), 4, convert("foo bar"));
- DoCountTest(convert("foo %0n bar"), 4, convert("foo bar"));
- DoShortCountTest(convert("foo %hn bar"), 4, convert("foo bar"));
- DoCountTest(convert("foo %ln bar"), 4, convert("foo bar"));
- DoCountTest(convert("foo %Ln bar"), 4, convert("foo bar"));
- DoCountTest(convert("foo %I64n bar"), 4, convert("foo bar"));
- DoCountTest(convert("foo %20.3n bar"), 4, convert("foo bar"));
-
- PAL_Terminate();
-
- free(longStr);
- free(longResult);
-
- return PASS;
-}
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test5/testinfo.dat b/src/pal/tests/palsuite/c_runtime/swprintf/test5/testinfo.dat
deleted file mode 100644
index ef1f1ffc5a..0000000000
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test5/testinfo.dat
+++ /dev/null
@@ -1,12 +0,0 @@
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-# See the LICENSE file in the project root for more information.
-
-Version = 1.0
-Section = C Runtime
-Function = swprintf
-Name = Positive Test for swprintf
-TYPE = DEFAULT
-EXE1 = test5
-Description
-= Tests swprintf with the count specifier
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test6/CMakeLists.txt
index 806211a992..044029dd62 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test6
add_dependencies(paltest_swprintf_test6 coreclrpal)
target_link_libraries(paltest_swprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test7/CMakeLists.txt
index cf563799d9..3ee7139ec7 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test7
add_dependencies(paltest_swprintf_test7 coreclrpal)
target_link_libraries(paltest_swprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test8/CMakeLists.txt
index e8fcf66157..55ac85c164 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test8
add_dependencies(paltest_swprintf_test8 coreclrpal)
target_link_libraries(paltest_swprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swprintf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swprintf/test9/CMakeLists.txt
index c616348766..7d7f524f65 100644
--- a/src/pal/tests/palsuite/c_runtime/swprintf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swprintf/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swprintf_test9
add_dependencies(paltest_swprintf_test9 coreclrpal)
target_link_libraries(paltest_swprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test1/CMakeLists.txt
index 44b8939248..ae2366e812 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test1
add_dependencies(paltest_swscanf_test1 coreclrpal)
target_link_libraries(paltest_swscanf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test10/CMakeLists.txt
index 27d42114a9..313b4f4693 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test10
add_dependencies(paltest_swscanf_test10 coreclrpal)
target_link_libraries(paltest_swscanf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test11/CMakeLists.txt
index 1ca9224ec0..79703e598a 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test11
add_dependencies(paltest_swscanf_test11 coreclrpal)
target_link_libraries(paltest_swscanf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test12/CMakeLists.txt
index 44d70f47ae..8c6754f442 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test12
add_dependencies(paltest_swscanf_test12 coreclrpal)
target_link_libraries(paltest_swscanf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test13/CMakeLists.txt
index add0cbfe18..8072390bde 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test13
add_dependencies(paltest_swscanf_test13 coreclrpal)
target_link_libraries(paltest_swscanf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test14/CMakeLists.txt
index 126e087b1c..723b68f449 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test14
add_dependencies(paltest_swscanf_test14 coreclrpal)
target_link_libraries(paltest_swscanf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test15/CMakeLists.txt
index 7c2da2bdf8..e0b7fd8d28 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test15
add_dependencies(paltest_swscanf_test15 coreclrpal)
target_link_libraries(paltest_swscanf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test16/CMakeLists.txt
index ba28c4dc2f..a593fd119e 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test16
add_dependencies(paltest_swscanf_test16 coreclrpal)
target_link_libraries(paltest_swscanf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test17/CMakeLists.txt
index 225ce868ed..890d9a4e6e 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test17
add_dependencies(paltest_swscanf_test17 coreclrpal)
target_link_libraries(paltest_swscanf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test2/CMakeLists.txt
index 15411ecf21..e6d17b3855 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test2
add_dependencies(paltest_swscanf_test2 coreclrpal)
target_link_libraries(paltest_swscanf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test3/CMakeLists.txt
index 927026107a..72be68114b 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test3
add_dependencies(paltest_swscanf_test3 coreclrpal)
target_link_libraries(paltest_swscanf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test4/CMakeLists.txt
index eec701645b..3581ec1413 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test4
add_dependencies(paltest_swscanf_test4 coreclrpal)
target_link_libraries(paltest_swscanf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test5/CMakeLists.txt
index 3f022db16c..8ade17ac6e 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test5
add_dependencies(paltest_swscanf_test5 coreclrpal)
target_link_libraries(paltest_swscanf_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test6/CMakeLists.txt
index c55666d95c..d43cc30a7f 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test6
add_dependencies(paltest_swscanf_test6 coreclrpal)
target_link_libraries(paltest_swscanf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test7/CMakeLists.txt
index adb0abe80d..3ac9f9d630 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test7
add_dependencies(paltest_swscanf_test7 coreclrpal)
target_link_libraries(paltest_swscanf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test8/CMakeLists.txt
index a69c552337..4e312edc17 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test8
add_dependencies(paltest_swscanf_test8 coreclrpal)
target_link_libraries(paltest_swscanf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/swscanf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/swscanf/test9/CMakeLists.txt
index 70a9fe2064..ca21283476 100644
--- a/src/pal/tests/palsuite/c_runtime/swscanf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/swscanf/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_swscanf_test9
add_dependencies(paltest_swscanf_test9 coreclrpal)
target_link_libraries(paltest_swscanf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/tan/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/tan/test1/CMakeLists.txt
index cea661f2bb..64b90265b2 100644
--- a/src/pal/tests/palsuite/c_runtime/tan/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/tan/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tan_test1
add_dependencies(paltest_tan_test1 coreclrpal)
target_link_libraries(paltest_tan_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/tanf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/tanf/test1/CMakeLists.txt
index cd588ea23e..6883041a22 100644
--- a/src/pal/tests/palsuite/c_runtime/tanf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/tanf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tanf_test1
add_dependencies(paltest_tanf_test1 coreclrpal)
target_link_libraries(paltest_tanf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/tanh/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/tanh/test1/CMakeLists.txt
index 9fe926d441..f8cb99c264 100644
--- a/src/pal/tests/palsuite/c_runtime/tanh/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/tanh/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tanh_test1
add_dependencies(paltest_tanh_test1 coreclrpal)
target_link_libraries(paltest_tanh_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/tanhf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/tanhf/test1/CMakeLists.txt
index fd0af2a46f..83e2612fa8 100644
--- a/src/pal/tests/palsuite/c_runtime/tanhf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/tanhf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tanhf_test1
add_dependencies(paltest_tanhf_test1 coreclrpal)
target_link_libraries(paltest_tanhf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/time/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/time/test1/CMakeLists.txt
index 64df144557..d3605e8c71 100644
--- a/src/pal/tests/palsuite/c_runtime/time/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/time/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_time_test1
add_dependencies(paltest_time_test1 coreclrpal)
target_link_libraries(paltest_time_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/tolower/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/tolower/test1/CMakeLists.txt
index 214a509010..90a3b98825 100644
--- a/src/pal/tests/palsuite/c_runtime/tolower/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/tolower/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tolower_test1
add_dependencies(paltest_tolower_test1 coreclrpal)
target_link_libraries(paltest_tolower_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/toupper/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/toupper/test1/CMakeLists.txt
index 3dd536c590..2d64731183 100644
--- a/src/pal/tests/palsuite/c_runtime/toupper/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/toupper/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_toupper_test1
add_dependencies(paltest_toupper_test1 coreclrpal)
target_link_libraries(paltest_toupper_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/towlower/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/towlower/test1/CMakeLists.txt
index 77a46344d4..e5da389dee 100644
--- a/src/pal/tests/palsuite/c_runtime/towlower/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/towlower/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_towlower_test1
add_dependencies(paltest_towlower_test1 coreclrpal)
target_link_libraries(paltest_towlower_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/towupper/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/towupper/test1/CMakeLists.txt
index 6a2f813cc9..a09dca8f84 100644
--- a/src/pal/tests/palsuite/c_runtime/towupper/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/towupper/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_towupper_test1
add_dependencies(paltest_towupper_test1 coreclrpal)
target_link_libraries(paltest_towupper_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/ungetc/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/ungetc/test1/CMakeLists.txt
index 0286f99b77..9db3fce592 100644
--- a/src/pal/tests/palsuite/c_runtime/ungetc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/ungetc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_ungetc_test1
add_dependencies(paltest_ungetc_test1 coreclrpal)
target_link_libraries(paltest_ungetc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/ungetc/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/ungetc/test2/CMakeLists.txt
index 0710074bd0..f4a2c733de 100644
--- a/src/pal/tests/palsuite/c_runtime/ungetc/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/ungetc/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_ungetc_test2
add_dependencies(paltest_ungetc_test2 coreclrpal)
target_link_libraries(paltest_ungetc_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test1/CMakeLists.txt
index fcff4a2074..138615a400 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test1
add_dependencies(paltest_vfprintf_test1 coreclrpal)
target_link_libraries(paltest_vfprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test10/CMakeLists.txt
index 97c7b167ab..824d1466aa 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test10
add_dependencies(paltest_vfprintf_test10 coreclrpal)
target_link_libraries(paltest_vfprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test11/CMakeLists.txt
index 9250eb957d..492e8502a5 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test11
add_dependencies(paltest_vfprintf_test11 coreclrpal)
target_link_libraries(paltest_vfprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test12/CMakeLists.txt
index 53d3488b4a..5837e1f2ba 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test12
add_dependencies(paltest_vfprintf_test12 coreclrpal)
target_link_libraries(paltest_vfprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test13/CMakeLists.txt
index c35813b420..2a9ec0b6b5 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test13
add_dependencies(paltest_vfprintf_test13 coreclrpal)
target_link_libraries(paltest_vfprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test14/CMakeLists.txt
index bd91f509b5..21c90bf7a6 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test14
add_dependencies(paltest_vfprintf_test14 coreclrpal)
target_link_libraries(paltest_vfprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test15/CMakeLists.txt
index 30003b82f8..7ec560b77e 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test15
add_dependencies(paltest_vfprintf_test15 coreclrpal)
target_link_libraries(paltest_vfprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test16/CMakeLists.txt
index a287f120a0..8dac2ede06 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test16
add_dependencies(paltest_vfprintf_test16 coreclrpal)
target_link_libraries(paltest_vfprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test17/CMakeLists.txt
index cf1afd9d2d..1708518678 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test17
add_dependencies(paltest_vfprintf_test17 coreclrpal)
target_link_libraries(paltest_vfprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test18/CMakeLists.txt
index 143eade9b3..7c40561abf 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test18
add_dependencies(paltest_vfprintf_test18 coreclrpal)
target_link_libraries(paltest_vfprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test19/CMakeLists.txt
index 452d929b7d..2a985eb433 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test19
add_dependencies(paltest_vfprintf_test19 coreclrpal)
target_link_libraries(paltest_vfprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test2/CMakeLists.txt
index b18fb712c6..c374fa6e22 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test2
add_dependencies(paltest_vfprintf_test2 coreclrpal)
target_link_libraries(paltest_vfprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/vfprintf/test2/test2.cpp
index d01117f047..0228734525 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test2/test2.cpp
@@ -38,6 +38,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest("foo %5.2s", "bar", "foo ba");
DoStrTest("foo %-5s", "bar", "foo bar ");
DoStrTest("foo %05s", "bar", "foo 00bar");
+ DoStrTest("foo %s", NULL, "foo (null)");
+ DoStrTest("foo %hs", NULL, "foo (null)");
+ DoStrTest("foo %ls", NULL, "foo (null)");
+ DoStrTest("foo %ws", NULL, "foo (null)");
+ DoStrTest("foo %Ls", NULL, "foo (null)");
+ DoStrTest("foo %I64s", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test3/CMakeLists.txt
index a8f7eb1991..a618fc9b74 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test3
add_dependencies(paltest_vfprintf_test3 coreclrpal)
target_link_libraries(paltest_vfprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/vfprintf/test3/test3.cpp
index 0081daa426..879446f851 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test3/test3.cpp
@@ -37,6 +37,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest("foo %5.2S", convert("bar"), "foo ba");
DoWStrTest("foo %-5S", convert("bar"), "foo bar ");
DoWStrTest("foo %05S", convert("bar"), "foo 00bar");
+ DoWStrTest("foo %S", NULL, "foo (null)");
+ DoStrTest("foo %hS", NULL, "foo (null)");
+ DoWStrTest("foo %lS", NULL, "foo (null)");
+ DoWStrTest("foo %wS", NULL, "foo (null)");
+ DoWStrTest("foo %LS", NULL, "foo (null)");
+ DoWStrTest("foo %I64S", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test4/CMakeLists.txt
index 60c31693a5..941bade25e 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test4
add_dependencies(paltest_vfprintf_test4 coreclrpal)
target_link_libraries(paltest_vfprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/vfprintf/test4/test4.cpp
index d24f08d6e0..75d11f641c 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test4/test4.cpp
@@ -32,7 +32,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest("%p", NULL, "NULL", "0000000000000000");
DoPointerTest("%p", ptr, "pointer to 0x123456", "0000000000123456");
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test5/CMakeLists.txt
index 5f516fec6a..6089352834 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test5
add_dependencies(paltest_vfprintf_test5 coreclrpal)
target_link_libraries(paltest_vfprintf_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test6/CMakeLists.txt
index 7f0cc710af..77c2bb17d5 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test6
add_dependencies(paltest_vfprintf_test6 coreclrpal)
target_link_libraries(paltest_vfprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test7/CMakeLists.txt
index a2cd9a2e8f..de00105386 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test7
add_dependencies(paltest_vfprintf_test7 coreclrpal)
target_link_libraries(paltest_vfprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test8/CMakeLists.txt
index a7b20ee43e..3129aeb185 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test8
add_dependencies(paltest_vfprintf_test8 coreclrpal)
target_link_libraries(paltest_vfprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vfprintf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vfprintf/test9/CMakeLists.txt
index 242b635f93..9cfaa584e8 100644
--- a/src/pal/tests/palsuite/c_runtime/vfprintf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vfprintf/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vfprintf_test9
add_dependencies(paltest_vfprintf_test9 coreclrpal)
target_link_libraries(paltest_vfprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test1/CMakeLists.txt
index 9d866e16a2..db1d273da9 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test1
add_dependencies(paltest_vprintf_test1 coreclrpal)
target_link_libraries(paltest_vprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test10/CMakeLists.txt
index 4ed04b46c6..89cd486f13 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test10
add_dependencies(paltest_vprintf_test10 coreclrpal)
target_link_libraries(paltest_vprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test11/CMakeLists.txt
index 5dc3c6dc69..a91ea25b7b 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test11
add_dependencies(paltest_vprintf_test11 coreclrpal)
target_link_libraries(paltest_vprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test12/CMakeLists.txt
index a8104296c4..0e3c5c9d0d 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test12
add_dependencies(paltest_vprintf_test12 coreclrpal)
target_link_libraries(paltest_vprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test13/CMakeLists.txt
index df98081ed7..877387f730 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test13
add_dependencies(paltest_vprintf_test13 coreclrpal)
target_link_libraries(paltest_vprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test14/CMakeLists.txt
index b903d4e241..8dcc4c97fe 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test14
add_dependencies(paltest_vprintf_test14 coreclrpal)
target_link_libraries(paltest_vprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test15/CMakeLists.txt
index 659ed9cb44..7c050494ff 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test15
add_dependencies(paltest_vprintf_test15 coreclrpal)
target_link_libraries(paltest_vprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test16/CMakeLists.txt
index b2f7fe8b78..2280f66960 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test16
add_dependencies(paltest_vprintf_test16 coreclrpal)
target_link_libraries(paltest_vprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test17/CMakeLists.txt
index 76cfc9ad06..99c3adf0a6 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test17
add_dependencies(paltest_vprintf_test17 coreclrpal)
target_link_libraries(paltest_vprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test18/CMakeLists.txt
index 633fb7ee51..88c81e3a91 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test18
add_dependencies(paltest_vprintf_test18 coreclrpal)
target_link_libraries(paltest_vprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test19/CMakeLists.txt
index 1a6256ad0b..59da1ea113 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test19
add_dependencies(paltest_vprintf_test19 coreclrpal)
target_link_libraries(paltest_vprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test2/CMakeLists.txt
index 41e2073477..c89c81e0ee 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test2
add_dependencies(paltest_vprintf_test2 coreclrpal)
target_link_libraries(paltest_vprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/vprintf/test2/test2.cpp
index 4d9c9bc6f5..72b79e5969 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test2/test2.cpp
@@ -38,6 +38,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest("foo %5.2s", "bar", "foo ba");
DoStrTest("foo %-5s", "bar", "foo bar ");
DoStrTest("foo %05s", "bar", "foo 00bar");
+ DoStrTest("foo %s", NULL, "foo (null)");
+ DoStrTest("foo %hs", NULL, "foo (null)");
+ DoWStrTest("foo %ls", NULL, "foo (null)");
+ DoWStrTest("foo %ws", NULL, "foo (null)");
+ DoStrTest("foo %Ls", NULL, "foo (null)");
+ DoStrTest("foo %I64s", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test3/CMakeLists.txt
index 8570666b11..0e69b53718 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test3
add_dependencies(paltest_vprintf_test3 coreclrpal)
target_link_libraries(paltest_vprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/vprintf/test3/test3.cpp
index 5376c56b76..66cd509d94 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test3/test3.cpp
@@ -37,6 +37,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest("foo %5.2S", convert("bar"), "foo ba");
DoWStrTest("foo %-5S", convert("bar"), "foo bar ");
DoWStrTest("foo %05S", convert("bar"), "foo 00bar");
+ DoWStrTest("foo %S", NULL, "foo (null)");
+ DoStrTest("foo %hS", NULL, "foo (null)");
+ DoWStrTest("foo %lS", NULL, "foo (null)");
+ DoWStrTest("foo %wS", NULL, "foo (null)");
+ DoWStrTest("foo %LS", NULL, "foo (null)");
+ DoWStrTest("foo %I64S", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test4/CMakeLists.txt
index 06b582b5ee..a06c2b7570 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test4
add_dependencies(paltest_vprintf_test4 coreclrpal)
target_link_libraries(paltest_vprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/vprintf/test4/test4.cpp
index 3b66cde22e..2cbdb35cc1 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test4/test4.cpp
@@ -32,7 +32,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest("%p", NULL, "NULL", "0000000000000000");
DoPointerTest("%p", ptr, "pointer to 0x123456", "0000000000123456");
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test5/CMakeLists.txt
index 3a1828a28c..0124cc3b36 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test5
add_dependencies(paltest_vprintf_test5 coreclrpal)
target_link_libraries(paltest_vprintf_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test6/CMakeLists.txt
index 2dac7703e6..b25f46d6c8 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test6
add_dependencies(paltest_vprintf_test6 coreclrpal)
target_link_libraries(paltest_vprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test7/CMakeLists.txt
index 5a520045a9..b24e241cb2 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test7
add_dependencies(paltest_vprintf_test7 coreclrpal)
target_link_libraries(paltest_vprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test8/CMakeLists.txt
index 18e4e3a0c9..d7b4b0150e 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test8
add_dependencies(paltest_vprintf_test8 coreclrpal)
target_link_libraries(paltest_vprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vprintf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vprintf/test9/CMakeLists.txt
index 8bcbe81f51..b9fd6106b8 100644
--- a/src/pal/tests/palsuite/c_runtime/vprintf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vprintf/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vprintf_test9
add_dependencies(paltest_vprintf_test9 coreclrpal)
target_link_libraries(paltest_vprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/CMakeLists.txt
index cafb9536b0..8fe1cb60ac 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/CMakeLists.txt
@@ -14,7 +14,6 @@ add_subdirectory(test19)
add_subdirectory(test2)
add_subdirectory(test3)
add_subdirectory(test4)
-add_subdirectory(test5)
add_subdirectory(test6)
add_subdirectory(test7)
add_subdirectory(test8)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test1/CMakeLists.txt
index 6861157c1b..34d8ad9f9b 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test1
add_dependencies(paltest_vsprintf_test1 coreclrpal)
target_link_libraries(paltest_vsprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test1/test1.cpp b/src/pal/tests/palsuite/c_runtime/vsprintf/test1/test1.cpp
index 2007fefc5b..18c8c0ea1a 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test1/test1.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test1/test1.cpp
@@ -29,7 +29,7 @@ int __cdecl main(int argc, char *argv[])
return(FAIL);
}
- testvsp(buf, "hello world");
+ testvsp(buf, _countof(buf), "hello world");
if (memcmp(checkstr, buf, strlen(checkstr)+1) != 0)
{
@@ -37,8 +37,8 @@ int __cdecl main(int argc, char *argv[])
checkstr, 256, buf);
}
- testvsp(buf, "xxxxxxxxxxxxxxxxx");
- ret = testvsp(buf, "hello world");
+ testvsp(buf, _countof(buf), "xxxxxxxxxxxxxxxxx");
+ ret = testvsp(buf, _countof(buf), "hello world");
if (ret != strlen(checkstr))
{
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test10/CMakeLists.txt
index 6f535a5098..3b0477a2c6 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test10
add_dependencies(paltest_vsprintf_test10 coreclrpal)
target_link_libraries(paltest_vsprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test11/CMakeLists.txt
index 3fa628f77d..723fa6b7f2 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test11
add_dependencies(paltest_vsprintf_test11 coreclrpal)
target_link_libraries(paltest_vsprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test12/CMakeLists.txt
index f34f76abc5..b58d47edd7 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test12
add_dependencies(paltest_vsprintf_test12 coreclrpal)
target_link_libraries(paltest_vsprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test13/CMakeLists.txt
index df23693f10..33ea479374 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test13
add_dependencies(paltest_vsprintf_test13 coreclrpal)
target_link_libraries(paltest_vsprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test14/CMakeLists.txt
index 394b5ab97c..b1a078498b 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test14
add_dependencies(paltest_vsprintf_test14 coreclrpal)
target_link_libraries(paltest_vsprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test15/CMakeLists.txt
index 4793b45663..b6642eddba 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test15
add_dependencies(paltest_vsprintf_test15 coreclrpal)
target_link_libraries(paltest_vsprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test16/CMakeLists.txt
index 6a0a52ddf7..c587798c62 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test16
add_dependencies(paltest_vsprintf_test16 coreclrpal)
target_link_libraries(paltest_vsprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test17/CMakeLists.txt
index 4e220dab77..edc5b334d1 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test17
add_dependencies(paltest_vsprintf_test17 coreclrpal)
target_link_libraries(paltest_vsprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test18/CMakeLists.txt
index 4dd68c2987..c9f20d5d52 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test18
add_dependencies(paltest_vsprintf_test18 coreclrpal)
target_link_libraries(paltest_vsprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test19/CMakeLists.txt
index 3156a59a15..886f867de0 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test19
add_dependencies(paltest_vsprintf_test19 coreclrpal)
target_link_libraries(paltest_vsprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test2/CMakeLists.txt
index 210224f0f1..c9fca91c19 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test2
add_dependencies(paltest_vsprintf_test2 coreclrpal)
target_link_libraries(paltest_vsprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/vsprintf/test2/test2.cpp
index fbd4b41068..fc9163e976 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test2/test2.cpp
@@ -36,6 +36,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest("foo %5.2s", "bar", "foo ba");
DoStrTest("foo %-5s", "bar", "foo bar ");
DoStrTest("foo %05s", "bar", "foo 00bar");
+ DoStrTest("foo %s", NULL, "foo (null)");
+ DoStrTest("foo %hs", NULL, "foo (null)");
+ DoWStrTest("foo %ls", NULL, "foo (null)");
+ DoWStrTest("foo %ws", NULL, "foo (null)");
+ DoStrTest("foo %Ls", NULL, "foo (null)");
+ DoStrTest("foo %I64s", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test3/CMakeLists.txt
index 5581051f9f..7e45989685 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test3
add_dependencies(paltest_vsprintf_test3 coreclrpal)
target_link_libraries(paltest_vsprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/vsprintf/test3/test3.cpp
index 742370ebe9..4656bf3a92 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test3/test3.cpp
@@ -37,6 +37,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest("foo %5.2S", convert("bar"), "foo ba");
DoWStrTest("foo %-5S", convert("bar"), "foo bar ");
DoWStrTest("foo %05S", convert("bar"), "foo 00bar");
+ DoWStrTest("foo %S", NULL, "foo (null)");
+ DoStrTest("foo %hS", NULL, "foo (null)");
+ DoWStrTest("foo %lS", NULL, "foo (null)");
+ DoWStrTest("foo %wS", NULL, "foo (null)");
+ DoWStrTest("foo %LS", NULL, "foo (null)");
+ DoWStrTest("foo %I64S", NULL, "foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test4/CMakeLists.txt
index 88817fcffb..9571f586c3 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test4
add_dependencies(paltest_vsprintf_test4 coreclrpal)
target_link_libraries(paltest_vsprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/vsprintf/test4/test4.cpp
index dc43a9e2c7..e052d8ee68 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test4/test4.cpp
@@ -31,7 +31,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest("%p", NULL, "NULL", "0000000000000000");
DoPointerTest("%p", ptr, "pointer to 0x123456", "0000000000123456");
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test5/CMakeLists.txt
deleted file mode 100644
index 6d14bf76bf..0000000000
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test5/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12.2)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(SOURCES
- test5.cpp
-)
-
-add_executable(paltest_vsprintf_test5
- ${SOURCES}
-)
-
-add_dependencies(paltest_vsprintf_test5 coreclrpal)
-
-target_link_libraries(paltest_vsprintf_test5
- pthread
- m
- coreclrpal
-)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test5/test5.cpp b/src/pal/tests/palsuite/c_runtime/vsprintf/test5/test5.cpp
deleted file mode 100644
index e630d8863b..0000000000
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test5/test5.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=====================================================================
-**
-** Source: test5.c
-**
-** Purpose: Test #5 for the vsprintf function.
-**
-**
-**===================================================================*/
-
-#include <palsuite.h>
-#include "../vsprintf.h"
-
-/*
- * Notes: memcmp is used, as is strlen.
- */
-
-
-int __cdecl main(int argc, char *argv[])
-{
- if (PAL_Initialize(argc, argv) != 0)
- {
- return(FAIL);
- }
-
- DoTest("foo %n bar", 4, "foo bar");
- DoTest("foo %#n bar", 4, "foo bar");
- DoTest("foo % n bar", 4, "foo bar");
- DoTest("foo %+n bar", 4, "foo bar");
- DoTest("foo %-n bar", 4, "foo bar");
- DoTest("foo %0n bar", 4, "foo bar");
- DoShortTest("foo %hn bar", 4, "foo bar");
- DoTest("foo %ln bar", 4, "foo bar");
- DoTest("foo %Ln bar", 4, "foo bar");
- DoTest("foo %I64n bar", 4, "foo bar");
- DoTest("foo %20.3n bar", 4, "foo bar");
-
- PAL_Terminate();
- return PASS;
-}
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test5/testinfo.dat b/src/pal/tests/palsuite/c_runtime/vsprintf/test5/testinfo.dat
deleted file mode 100644
index 81748f88b9..0000000000
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test5/testinfo.dat
+++ /dev/null
@@ -1,14 +0,0 @@
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-# See the LICENSE file in the project root for more information.
-
-Version = 1.0
-Section = C Runtime
-Function = vsprintf
-Name = Positive Test for vsprintf
-TYPE = DEFAULT
-EXE1 = test5
-Description
-= Tests the PAL implementation of the vsprintf function.
-= Tests vsprintf with the count specifier.
-= This test is modeled after _snprintf.
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test6/CMakeLists.txt
index 606fe3b965..7dc7e1d621 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test6
add_dependencies(paltest_vsprintf_test6 coreclrpal)
target_link_libraries(paltest_vsprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test7/CMakeLists.txt
index 2dee276968..7b05fbeb51 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test7
add_dependencies(paltest_vsprintf_test7 coreclrpal)
target_link_libraries(paltest_vsprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test8/CMakeLists.txt
index 8dac76fc3a..36231aa954 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test8
add_dependencies(paltest_vsprintf_test8 coreclrpal)
target_link_libraries(paltest_vsprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vsprintf/test9/CMakeLists.txt
index 95f0faad87..ca74546b0e 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vsprintf_test9
add_dependencies(paltest_vsprintf_test9 coreclrpal)
target_link_libraries(paltest_vsprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vsprintf/vsprintf.h b/src/pal/tests/palsuite/c_runtime/vsprintf/vsprintf.h
index 7b04a777ca..22bf53e53b 100644
--- a/src/pal/tests/palsuite/c_runtime/vsprintf/vsprintf.h
+++ b/src/pal/tests/palsuite/c_runtime/vsprintf/vsprintf.h
@@ -14,13 +14,13 @@
#define __VSPRINTF_H__
/* These functions leaks memory like crazy. C'est la vie. */
-int testvsp(char* buf, const char* format, ...)
+int testvsp(char* buf, size_t buffSize, const char* format, ...)
{
int retVal;
va_list arglist;
va_start(arglist, format);
- retVal = vsprintf(buf, format, arglist);
+ retVal = _vsnprintf_s(buf, buffSize, _TRUNCATE, format, arglist);
va_end(arglist);
return (retVal);
@@ -30,7 +30,7 @@ void DoStrTest(const char *formatstr, char* param, const char *checkstr)
{
char buf[256] = { 0 };
- testvsp(buf, formatstr, param);
+ testvsp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, strlen(buf) + 1) != 0)
{
Fail("ERROR: failed to insert string \"%s\" into \"%s\"\n"
@@ -43,7 +43,7 @@ void DoWStrTest(const char *formatstr, WCHAR* param, const char *checkstr)
{
char buf[256] = { 0 };
- testvsp(buf, formatstr, param);
+ testvsp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, strlen(buf) + 1) != 0)
{
Fail("ERROR: failed to insert wide string \"%s\" into \"%s\"\n"
@@ -57,7 +57,7 @@ void DoCharTest(const char *formatstr, char param, const char *checkstr)
{
char buf[256] = { 0 };
- testvsp(buf, formatstr, param);
+ testvsp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, strlen(buf) + 1) != 0)
{
Fail("ERROR: failed to insert char \'%c\' (%d) into \"%s\"\n"
@@ -70,7 +70,7 @@ void DoWCharTest(const char *formatstr, WCHAR param, const char *checkstr)
{
char buf[256] = { 0 };
- testvsp(buf, formatstr, param);
+ testvsp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, strlen(buf) + 1) != 0)
{
Fail("ERROR: failed to insert wide char \'%c\' (%d) into \"%s\"\n"
@@ -83,7 +83,7 @@ void DoNumTest(const char *formatstr, int value, const char *checkstr)
{
char buf[256] = { 0 };
- testvsp(buf, formatstr, value);
+ testvsp(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr, strlen(buf) + 1) != 0)
{
Fail("ERROR: failed to insert %#x into \"%s\"\n"
@@ -96,7 +96,7 @@ void DoI64Test(const char *formatstr, INT64 value, char *valuestr, const char *c
{
char buf[256] = { 0 };
- testvsp(buf, formatstr, value);
+ testvsp(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr, strlen(buf) + 1) != 0)
{
Fail("ERROR: failed to insert %s into \"%s\"\n"
@@ -109,7 +109,7 @@ void DoDoubleTest(const char *formatstr, double value, const char *checkstr1, ch
{
char buf[256] = { 0 };
- testvsp(buf, formatstr, value);
+ testvsp(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr1, strlen(checkstr1) + 1) != 0 &&
memcmp(buf, checkstr2, strlen(checkstr2) + 1) != 0)
{
@@ -124,7 +124,7 @@ void DoArgumentPrecTest(const char *formatstr, int precision, void *param,
{
char buf[256];
- testvsp(buf, formatstr, precision, param);
+ testvsp(buf, _countof(buf), formatstr, precision, param);
if (memcmp(buf, checkstr1, strlen(checkstr1) + 1) != 0 &&
memcmp(buf, checkstr2, strlen(checkstr2) + 1) != 0)
{
@@ -140,7 +140,7 @@ void DoArgumentPrecDoubleTest(const char *formatstr, int precision, double param
{
char buf[256];
- testvsp(buf, formatstr, precision, param);
+ testvsp(buf, _countof(buf), formatstr, precision, param);
if (memcmp(buf, checkstr1, strlen(checkstr1) + 1) != 0 &&
memcmp(buf, checkstr2, strlen(checkstr2) + 1) != 0)
{
@@ -155,7 +155,7 @@ void DoPointerTest(const char *formatstr, void* param, char* paramstr,
{
char buf[256] = { 0 };
- testvsp(buf, formatstr, param);
+ testvsp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr1, strlen(checkstr1) + 1))
{
Fail("ERROR: failed to insert %s into \"%s\"\n"
@@ -169,7 +169,7 @@ void DoI64DoubleTest(const char *formatstr, INT64 value, char *valuestr,
{
char buf[256] = { 0 };
- testvsp(buf, formatstr, value);
+ testvsp(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr1, strlen(checkstr1) + 1) != 0)
{
Fail("ERROR: failed to insert %s into \"%s\"\n"
@@ -183,7 +183,7 @@ void DoTest(const char *formatstr, int param, const char *checkstr)
char buf[256] = { 0 };
int n = -1;
- testvsp(buf, formatstr, &n);
+ testvsp(buf, _countof(buf), formatstr, &n);
if (n != param)
{
@@ -201,7 +201,7 @@ void DoShortTest(const char *formatstr, int param, const char *checkstr)
char buf[256] = { 0 };
short int n = -1;
- testvsp(buf, formatstr, &n);
+ testvsp(buf, _countof(buf), formatstr, &n);
if (n != param)
{
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/CMakeLists.txt
index cafb9536b0..8fe1cb60ac 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/CMakeLists.txt
@@ -14,7 +14,6 @@ add_subdirectory(test19)
add_subdirectory(test2)
add_subdirectory(test3)
add_subdirectory(test4)
-add_subdirectory(test5)
add_subdirectory(test6)
add_subdirectory(test7)
add_subdirectory(test8)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test1/CMakeLists.txt
index 1d6233744a..6b23e50345 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test1
add_dependencies(paltest_vswprintf_test1 coreclrpal)
target_link_libraries(paltest_vswprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test1/test1.cpp b/src/pal/tests/palsuite/c_runtime/vswprintf/test1/test1.cpp
index d386ce104f..968f8a5c69 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test1/test1.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test1/test1.cpp
@@ -27,7 +27,7 @@ int __cdecl main(int argc, char *argv[])
return(FAIL);
checkstr = convert("hello world");
- testvswp(buf, checkstr);
+ testvswp(buf, _countof(buf), checkstr);
if (memcmp(checkstr, buf, wcslen(checkstr)*2+2) != 0)
{
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test10/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test10/CMakeLists.txt
index e5301427eb..4e6171ec61 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test10
add_dependencies(paltest_vswprintf_test10 coreclrpal)
target_link_libraries(paltest_vswprintf_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test11/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test11/CMakeLists.txt
index 1cfadb9300..9e37b63b1f 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test11
add_dependencies(paltest_vswprintf_test11 coreclrpal)
target_link_libraries(paltest_vswprintf_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test12/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test12/CMakeLists.txt
index f5a582a970..2747ebf468 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test12
add_dependencies(paltest_vswprintf_test12 coreclrpal)
target_link_libraries(paltest_vswprintf_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test13/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test13/CMakeLists.txt
index 5571d7336f..4c96d3fecc 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test13
add_dependencies(paltest_vswprintf_test13 coreclrpal)
target_link_libraries(paltest_vswprintf_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test14/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test14/CMakeLists.txt
index 234029ead4..62a9efc660 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test14
add_dependencies(paltest_vswprintf_test14 coreclrpal)
target_link_libraries(paltest_vswprintf_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test15/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test15/CMakeLists.txt
index b705268bc7..2142c53044 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test15
add_dependencies(paltest_vswprintf_test15 coreclrpal)
target_link_libraries(paltest_vswprintf_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test16/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test16/CMakeLists.txt
index da296bcf32..44fd1145b9 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test16
add_dependencies(paltest_vswprintf_test16 coreclrpal)
target_link_libraries(paltest_vswprintf_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test17/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test17/CMakeLists.txt
index 02234c1672..2d1d8cd85e 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test17
add_dependencies(paltest_vswprintf_test17 coreclrpal)
target_link_libraries(paltest_vswprintf_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test18/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test18/CMakeLists.txt
index 0c0e5b566b..d561baef83 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test18
add_dependencies(paltest_vswprintf_test18 coreclrpal)
target_link_libraries(paltest_vswprintf_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test19/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test19/CMakeLists.txt
index 066db8ab84..e2e6001cce 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test19
add_dependencies(paltest_vswprintf_test19 coreclrpal)
target_link_libraries(paltest_vswprintf_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test19/test19.cpp b/src/pal/tests/palsuite/c_runtime/vswprintf/test19/test19.cpp
index 1d1c5656b2..12f2b7ba99 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test19/test19.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test19/test19.cpp
@@ -24,7 +24,7 @@ void DoArgumentPrecTest(WCHAR *formatstr, int precision, void *param,
{
WCHAR buf[256];
- testvswp(buf, formatstr, precision, param);
+ testvswp(buf, _countof(buf), formatstr, precision, param);
if (memcmp(buf, checkstr1, wcslen(checkstr1) + 2) != 0 &&
memcmp(buf, checkstr2, wcslen(checkstr2) + 2) != 0)
{
@@ -43,7 +43,7 @@ void DoArgumentPrecDoubleTest(WCHAR *formatstr, int precision, double param,
{
WCHAR buf[256];
- testvswp(buf, formatstr, precision, param);
+ testvswp(buf, _countof(buf), formatstr, precision, param);
if (memcmp(buf, checkstr1, wcslen(checkstr1) + 2) != 0 &&
memcmp(buf, checkstr2, wcslen(checkstr2) + 2) != 0)
{
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test2/CMakeLists.txt
index abfceca9e2..b1dee38b4a 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test2
add_dependencies(paltest_vswprintf_test2 coreclrpal)
target_link_libraries(paltest_vswprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/vswprintf/test2/test2.cpp
index 491d99f0cf..a7b1b3a336 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test2/test2.cpp
@@ -34,6 +34,12 @@ int __cdecl main(int argc, char *argv[])
DoWStrTest(convert("foo %5.2s"), convert("bar"), convert("foo ba"));
DoWStrTest(convert("foo %-5s"), convert("bar"), convert("foo bar "));
DoWStrTest(convert("foo %05s"), convert("bar"), convert("foo 00bar"));
+ DoWStrTest(convert("foo %s"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %hs"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %ls"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %ws"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %Ls"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %I64s"), NULL, convert("foo (null)"));
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test3/CMakeLists.txt
index 7f4798dbc5..4d49a107b8 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test3
add_dependencies(paltest_vswprintf_test3 coreclrpal)
target_link_libraries(paltest_vswprintf_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test3/test3.cpp b/src/pal/tests/palsuite/c_runtime/vswprintf/test3/test3.cpp
index 1eb0b65ebe..40c7d2afcf 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test3/test3.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test3/test3.cpp
@@ -34,6 +34,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest(convert("foo %5.2S"), "bar", convert("foo ba"));
DoStrTest(convert("foo %-5S"), "bar", convert("foo bar "));
DoStrTest(convert("foo %05S"), "bar", convert("foo 00bar"));
+ DoStrTest(convert("foo %S"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %hS"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %lS"), NULL, convert("foo (null)"));
+ DoWStrTest(convert("foo %wS"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %LS"), NULL, convert("foo (null)"));
+ DoStrTest(convert("foo %I64S"), NULL, convert("foo (null)"));
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test4/CMakeLists.txt
index 05701ac179..d38b9cd824 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test4
add_dependencies(paltest_vswprintf_test4 coreclrpal)
target_link_libraries(paltest_vswprintf_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test4/test4.cpp b/src/pal/tests/palsuite/c_runtime/vswprintf/test4/test4.cpp
index 5c9047b5a7..c54fe6aabb 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test4/test4.cpp
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test4/test4.cpp
@@ -21,7 +21,7 @@ static void DoPointerTest(WCHAR *formatstr, void* param, WCHAR* paramstr,
{
WCHAR buf[256] = { 0 };
- testvswp(buf, formatstr, param);
+ testvswp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr1, wcslen(checkstr1) + 2) != 0)
{
@@ -39,7 +39,7 @@ static void DoI64DoubleTest(WCHAR *formatstr, INT64 value, WCHAR *valuestr,
{
WCHAR buf[256] = { 0 };
- testvswp(buf, formatstr, value);
+ testvswp(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr1, wcslen(checkstr1) + 2) != 0)
{
Fail("ERROR: failed to insert %s into \"%s\"\n"
@@ -62,7 +62,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
DoPointerTest(convert("%p"), NULL, convert("NULL"), convert("0000000000000000"));
DoPointerTest(convert("%p"), ptr, convert("pointer to 0x123456"),
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test5/CMakeLists.txt
deleted file mode 100644
index 888ce27d22..0000000000
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test5/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12.2)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(SOURCES
- test5.cpp
-)
-
-add_executable(paltest_vswprintf_test5
- ${SOURCES}
-)
-
-add_dependencies(paltest_vswprintf_test5 coreclrpal)
-
-target_link_libraries(paltest_vswprintf_test5
- pthread
- m
- coreclrpal
-)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test5/test5.cpp b/src/pal/tests/palsuite/c_runtime/vswprintf/test5/test5.cpp
deleted file mode 100644
index 42146c8be7..0000000000
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test5/test5.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=====================================================================
-**
-** Source: test5.c
-**
-** Purpose: Test #5 for the vswprintf function.
-**
-**
-**===================================================================*/
-
-#include <palsuite.h>
-#include "../vswprintf.h"
-
-/* memcmp is used to verify the results, so this test is dependent on it. */
-/* ditto with wcslen */
-
-static void DoTest(WCHAR *formatstr, int param, WCHAR *checkstr)
-{
- WCHAR buf[256] = { 0 };
- int n = -1;
-
- testvswp(buf, formatstr, &n);
-
- if (n != param)
- {
- Fail("ERROR: Expected count parameter to resolve to %d, got %d\n",
- param, n);
- }
-
- if (memcmp(buf, checkstr, wcslen(buf)*2 + 2) != 0)
- {
- Fail("ERROR: Expected \"%s\" got \"%s\".\n",
- convertC(checkstr), convertC(buf));
- }
-}
-
-static void DoShortTest(WCHAR *formatstr, int param, WCHAR *checkstr)
-{
- WCHAR buf[256] = { 0 };
- short int n = -1;
-
- testvswp(buf, formatstr, &n);
-
- if (n != param)
- {
- Fail("ERROR: Expected count parameter to resolve to %d, got %d\n",
- param, n);
- }
-
- if (memcmp(buf, checkstr, wcslen(buf)*2 + 2) != 0)
- {
- Fail("ERROR: Expected \"%s\" got \"%s\".\n",
- convertC(checkstr), convertC(buf));
- }
-}
-
-int __cdecl main(int argc, char *argv[])
-{
- if (PAL_Initialize(argc, argv) != 0)
- return(FAIL);
-
- DoTest(convert("foo %n bar"), 4, convert("foo bar"));
- DoTest(convert("foo %#n bar"), 4, convert("foo bar"));
- DoTest(convert("foo % n bar"), 4, convert("foo bar"));
- DoTest(convert("foo %+n bar"), 4, convert("foo bar"));
- DoTest(convert("foo %-n bar"), 4, convert("foo bar"));
- DoTest(convert("foo %0n bar"), 4, convert("foo bar"));
- DoShortTest(convert("foo %hn bar"), 4, convert("foo bar"));
- DoTest(convert("foo %ln bar"), 4, convert("foo bar"));
- DoTest(convert("foo %Ln bar"), 4, convert("foo bar"));
- DoTest(convert("foo %I64n bar"), 4, convert("foo bar"));
- DoTest(convert("foo %20.3n bar"), 4, convert("foo bar"));
-
- PAL_Terminate();
- return PASS;
-}
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test5/testinfo.dat b/src/pal/tests/palsuite/c_runtime/vswprintf/test5/testinfo.dat
deleted file mode 100644
index 17ca0fd33b..0000000000
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test5/testinfo.dat
+++ /dev/null
@@ -1,14 +0,0 @@
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-# See the LICENSE file in the project root for more information.
-
-Version = 1.0
-Section = C Runtime
-Function = vswprintf
-Name = Positive Test for vswprintf
-TYPE = DEFAULT
-EXE1 = test5
-Description
-= Tests the PAL implementation of the vswprintf function.
-= Tests vswprintf with the count specifier.
-= This test is modeled after _snwprintf.
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test6/CMakeLists.txt
index bfbb17ccef..0caa96ed78 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test6
add_dependencies(paltest_vswprintf_test6 coreclrpal)
target_link_libraries(paltest_vswprintf_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test7/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test7/CMakeLists.txt
index 8b980586bc..3244576813 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test7
add_dependencies(paltest_vswprintf_test7 coreclrpal)
target_link_libraries(paltest_vswprintf_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test8/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test8/CMakeLists.txt
index 07ba473844..f972c00067 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test8
add_dependencies(paltest_vswprintf_test8 coreclrpal)
target_link_libraries(paltest_vswprintf_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/test9/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/vswprintf/test9/CMakeLists.txt
index 11c77787e9..ee9c04d7ee 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_vswprintf_test9
add_dependencies(paltest_vswprintf_test9 coreclrpal)
target_link_libraries(paltest_vswprintf_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/vswprintf/vswprintf.h b/src/pal/tests/palsuite/c_runtime/vswprintf/vswprintf.h
index 37a379212e..36895d207f 100644
--- a/src/pal/tests/palsuite/c_runtime/vswprintf/vswprintf.h
+++ b/src/pal/tests/palsuite/c_runtime/vswprintf/vswprintf.h
@@ -15,13 +15,13 @@
#define __vswprintf_H__
/* These functions leaks memory like crazy. C'est la vie. */
-int testvswp(wchar_t* buf, const wchar_t* format, ...)
+int testvswp(wchar_t* buf, size_t buffSize, const wchar_t* format, ...)
{
int retVal = 0;
va_list arglist;
va_start(arglist, format);
- retVal = vswprintf(buf, format, arglist);
+ retVal = _vsnwprintf_s(buf, buffSize, _TRUNCATE, format, arglist);
va_end(arglist);
return( retVal);
@@ -31,7 +31,7 @@ void DoWStrTest(const WCHAR *formatstr, WCHAR *param, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- testvswp(buf, formatstr, param);
+ testvswp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, wcslen(buf) * 2 + 2) != 0)
{
@@ -46,7 +46,7 @@ void DoStrTest(const WCHAR *formatstr, char *param, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- testvswp(buf, formatstr, param);
+ testvswp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, wcslen(buf) * 2 + 2) != 0)
{
@@ -61,7 +61,7 @@ void DoCharTest(const WCHAR *formatstr, char param, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- testvswp(buf, formatstr, param);
+ testvswp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, wcslen(buf)*2 + 2) != 0)
{
Fail("ERROR: failed to insert char \'%c\' (%d) into \"%s\"\n"
@@ -75,7 +75,7 @@ void DoWCharTest(const WCHAR *formatstr, WCHAR param, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- testvswp(buf, formatstr, param);
+ testvswp(buf, _countof(buf), formatstr, param);
if (memcmp(buf, checkstr, wcslen(buf)*2 + 2) != 0)
{
Fail("ERROR: failed to insert wide char \'%c\' (%d) into \"%s\"\n"
@@ -89,7 +89,7 @@ void DoNumTest(const WCHAR *formatstr, int value, const WCHAR *checkstr)
{
WCHAR buf[256] = { 0 };
- testvswp(buf, formatstr, value);
+ testvswp(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr, wcslen(buf)* 2 + 2) != 0)
{
Fail("ERROR: failed to insert %#x into \"%s\"\n"
@@ -102,7 +102,7 @@ void DoI64NumTest(const WCHAR *formatstr, INT64 value, char *valuestr, const WCH
{
WCHAR buf[256] = { 0 };
- testvswp(buf, formatstr, value);
+ testvswp(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr, wcslen(buf)* 2 + 2) != 0)
{
Fail("ERROR: failed to insert %s into \"%s\"\n"
@@ -115,7 +115,7 @@ void DoDoubleTest(const WCHAR *formatstr, double value, const WCHAR *checkstr1,
{
WCHAR buf[256] = { 0 };
- testvswp(buf, formatstr, value);
+ testvswp(buf, _countof(buf), formatstr, value);
if (memcmp(buf, checkstr1, wcslen(checkstr1) + 2) != 0 &&
memcmp(buf, checkstr2, wcslen(checkstr2) + 2) != 0)
{
diff --git a/src/pal/tests/palsuite/c_runtime/wcscat/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcscat/test1/CMakeLists.txt
index 815c585de4..8ee3b694b2 100644
--- a/src/pal/tests/palsuite/c_runtime/wcscat/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcscat/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcscat_test1
add_dependencies(paltest_wcscat_test1 coreclrpal)
target_link_libraries(paltest_wcscat_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcschr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcschr/test1/CMakeLists.txt
index 9cf0a918a0..f054ae7956 100644
--- a/src/pal/tests/palsuite/c_runtime/wcschr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcschr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcschr_test1
add_dependencies(paltest_wcschr_test1 coreclrpal)
target_link_libraries(paltest_wcschr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcscmp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcscmp/test1/CMakeLists.txt
index 98c05352f3..8f97a6386b 100644
--- a/src/pal/tests/palsuite/c_runtime/wcscmp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcscmp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcscmp_test1
add_dependencies(paltest_wcscmp_test1 coreclrpal)
target_link_libraries(paltest_wcscmp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcscpy/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcscpy/test1/CMakeLists.txt
index 872b2dec5e..c7fdcb8372 100644
--- a/src/pal/tests/palsuite/c_runtime/wcscpy/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcscpy/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcscpy_test1
add_dependencies(paltest_wcscpy_test1 coreclrpal)
target_link_libraries(paltest_wcscpy_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcslen/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcslen/test1/CMakeLists.txt
index b641a830f5..e68496d34a 100644
--- a/src/pal/tests/palsuite/c_runtime/wcslen/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcslen/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcslen_test1
add_dependencies(paltest_wcslen_test1 coreclrpal)
target_link_libraries(paltest_wcslen_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcsncat/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcsncat/test1/CMakeLists.txt
index e90e2b7bc4..8eba7a7c86 100644
--- a/src/pal/tests/palsuite/c_runtime/wcsncat/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcsncat/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcsncat_test1
add_dependencies(paltest_wcsncat_test1 coreclrpal)
target_link_libraries(paltest_wcsncat_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcsncmp/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcsncmp/test1/CMakeLists.txt
index f5511a86c6..4fc8155853 100644
--- a/src/pal/tests/palsuite/c_runtime/wcsncmp/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcsncmp/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcsncmp_test1
add_dependencies(paltest_wcsncmp_test1 coreclrpal)
target_link_libraries(paltest_wcsncmp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcsncpy/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcsncpy/test1/CMakeLists.txt
index a7254a709c..d157bf29e9 100644
--- a/src/pal/tests/palsuite/c_runtime/wcsncpy/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcsncpy/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcsncpy_test1
add_dependencies(paltest_wcsncpy_test1 coreclrpal)
target_link_libraries(paltest_wcsncpy_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcspbrk/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcspbrk/test1/CMakeLists.txt
index 14c1fe83a4..2a9434442b 100644
--- a/src/pal/tests/palsuite/c_runtime/wcspbrk/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcspbrk/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcspbrk_test1
add_dependencies(paltest_wcspbrk_test1 coreclrpal)
target_link_libraries(paltest_wcspbrk_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcsrchr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcsrchr/test1/CMakeLists.txt
index abdd6d56d2..3d808e1e71 100644
--- a/src/pal/tests/palsuite/c_runtime/wcsrchr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcsrchr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcsrchr_test1
add_dependencies(paltest_wcsrchr_test1 coreclrpal)
target_link_libraries(paltest_wcsrchr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcsstr/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcsstr/test1/CMakeLists.txt
index 0e1e0b47b0..bc09f75983 100644
--- a/src/pal/tests/palsuite/c_runtime/wcsstr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcsstr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcsstr_test1
add_dependencies(paltest_wcsstr_test1 coreclrpal)
target_link_libraries(paltest_wcsstr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstod/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstod/test1/CMakeLists.txt
index cca01ca964..2370ee8aad 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstod/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstod/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstod_test1
add_dependencies(paltest_wcstod_test1 coreclrpal)
target_link_libraries(paltest_wcstod_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstod/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstod/test2/CMakeLists.txt
index ae7450891e..1251c2c9c0 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstod/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstod/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstod_test2
add_dependencies(paltest_wcstod_test2 coreclrpal)
target_link_libraries(paltest_wcstod_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstok/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstok/test1/CMakeLists.txt
index 6b5bed9552..0f63a7bf6d 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstok/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstok/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstok_test1
add_dependencies(paltest_wcstok_test1 coreclrpal)
target_link_libraries(paltest_wcstok_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstol/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstol/test1/CMakeLists.txt
index f76018fca3..fc81ee402a 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstol/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstol/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstol_test1
add_dependencies(paltest_wcstol_test1 coreclrpal)
target_link_libraries(paltest_wcstol_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstol/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstol/test2/CMakeLists.txt
index 8dc2ab6b65..4f7ad53723 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstol/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstol/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstol_test2
add_dependencies(paltest_wcstol_test2 coreclrpal)
target_link_libraries(paltest_wcstol_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstol/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstol/test3/CMakeLists.txt
index 310f97d6dc..df2d5ef607 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstol/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstol/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstol_test3
add_dependencies(paltest_wcstol_test3 coreclrpal)
target_link_libraries(paltest_wcstol_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstol/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstol/test4/CMakeLists.txt
index 23928aa704..9af9af8be0 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstol/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstol/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstol_test4
add_dependencies(paltest_wcstol_test4 coreclrpal)
target_link_libraries(paltest_wcstol_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstol/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstol/test5/CMakeLists.txt
index 16c709ffa0..6134216d5b 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstol/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstol/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstol_test5
add_dependencies(paltest_wcstol_test5 coreclrpal)
target_link_libraries(paltest_wcstol_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstol/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstol/test6/CMakeLists.txt
index 80ccaf609b..ae7efe8d42 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstol/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstol/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstol_test6
add_dependencies(paltest_wcstol_test6 coreclrpal)
target_link_libraries(paltest_wcstol_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstoul/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstoul/test1/CMakeLists.txt
index 58f002ab32..bcdcd7cc7a 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstoul/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstoul/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstoul_test1
add_dependencies(paltest_wcstoul_test1 coreclrpal)
target_link_libraries(paltest_wcstoul_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstoul/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstoul/test2/CMakeLists.txt
index 2c8d012310..4259cef224 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstoul/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstoul/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstoul_test2
add_dependencies(paltest_wcstoul_test2 coreclrpal)
target_link_libraries(paltest_wcstoul_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstoul/test3/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstoul/test3/CMakeLists.txt
index 353df07f52..758c437260 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstoul/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstoul/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstoul_test3
add_dependencies(paltest_wcstoul_test3 coreclrpal)
target_link_libraries(paltest_wcstoul_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstoul/test4/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstoul/test4/CMakeLists.txt
index e1e7d55420..151d372d14 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstoul/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstoul/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstoul_test4
add_dependencies(paltest_wcstoul_test4 coreclrpal)
target_link_libraries(paltest_wcstoul_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstoul/test5/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstoul/test5/CMakeLists.txt
index 9e83c6074c..97b1e91e61 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstoul/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstoul/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstoul_test5
add_dependencies(paltest_wcstoul_test5 coreclrpal)
target_link_libraries(paltest_wcstoul_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wcstoul/test6/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wcstoul/test6/CMakeLists.txt
index 8352d0cbbe..b678e2ae0c 100644
--- a/src/pal/tests/palsuite/c_runtime/wcstoul/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wcstoul/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wcstoul_test6
add_dependencies(paltest_wcstoul_test6 coreclrpal)
target_link_libraries(paltest_wcstoul_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wprintf/test1/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wprintf/test1/CMakeLists.txt
index f95fc12ea1..8d3ab28cac 100644
--- a/src/pal/tests/palsuite/c_runtime/wprintf/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wprintf/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wprintf_test1
add_dependencies(paltest_wprintf_test1 coreclrpal)
target_link_libraries(paltest_wprintf_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wprintf/test2/CMakeLists.txt b/src/pal/tests/palsuite/c_runtime/wprintf/test2/CMakeLists.txt
index 325e8046d5..3119489709 100644
--- a/src/pal/tests/palsuite/c_runtime/wprintf/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/c_runtime/wprintf/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_wprintf_test2
add_dependencies(paltest_wprintf_test2 coreclrpal)
target_link_libraries(paltest_wprintf_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/c_runtime/wprintf/test2/test2.cpp b/src/pal/tests/palsuite/c_runtime/wprintf/test2/test2.cpp
index 254e98a394..4e54d452e8 100644
--- a/src/pal/tests/palsuite/c_runtime/wprintf/test2/test2.cpp
+++ b/src/pal/tests/palsuite/c_runtime/wprintf/test2/test2.cpp
@@ -38,6 +38,12 @@ int __cdecl main(int argc, char *argv[])
DoStrTest(u"foo %5.2s", u"bar", u"foo ba");
DoStrTest(u"foo %-5s", u"bar", u"foo bar ");
DoStrTest(u"foo %05s", u"bar", u"foo 00bar");
+ DoStrTest(u"foo %s", NULL, u"foo (null)");
+ DoStrTest(u"foo %hs", NULL, u"foo (null)");
+ DoStrTest(u"foo %ls", NULL, u"foo (null)");
+ DoStrTest(u"foo %ws", NULL, u"foo (null)");
+ DoStrTest(u"foo %Ls", NULL, u"foo (null)");
+ DoStrTest(u"foo %I64s", NULL, u"foo (null)");
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/common/ResultTime.h b/src/pal/tests/palsuite/common/ResultTime.h
index df706e7a64..82daeb83c4 100644
--- a/src/pal/tests/palsuite/common/ResultTime.h
+++ b/src/pal/tests/palsuite/common/ResultTime.h
@@ -11,11 +11,7 @@
const char *szDotNetInstallEnvVar = "DOTNET_INSTALL";
const char *szQASupportDirEnvVar = "QA_SUPPORT_DIR";
-#ifdef PLATFORM_UNIX
#define SEPERATOR "/"
-#else
-#define SEPERATOR "\\"
-#endif
char *getBuildNumber()
{
char *szBuildFileName = "buildinfo.txt";
@@ -34,16 +30,6 @@ char *getBuildNumber()
Fail("ERROR: Couldn't allocate enough memory to potentially store build number\n");
}
-#ifndef PLATFORM_UNIX
- pDirectoryName = getenv(szDotNetInstallEnvVar);
- if (pDirectoryName == NULL)
- {
- /* This condition may exist if the test is being run in say the Dev environment.*/
- Trace("WARNING: Coriolis Test Environment may not be setup correctly. Variable DOTNET_INSTALL not set\n");
- _snprintf(szTempValue, 99, "0000.00");
- return szTempValue;
- }
-#else
pDirectoryName = getenv(szQASupportDirEnvVar);
if (pDirectoryName == NULL)
{
@@ -52,14 +38,8 @@ char *getBuildNumber()
return szTempValue;
}
-#endif //PLATFORM_UNIX
-
-#ifndef PLATFORM_UNIX
- _snprintf(szBuildFileLoc, MAX_PATH, "%s%s%s", pDirectoryName, SEPERATOR, szBuildFileName);
-#else
// To avoid buffer overruns for pDirectoryName
_snprintf(szBuildFileLoc, MAX_PATH, "%s/../1.0%s%s", pDirectoryName, SEPERATOR, szBuildFileName);
-#endif //PLATFORM_UNIX
fp = fopen( szBuildFileLoc, "r");
if( fp == NULL)
{
diff --git a/src/pal/tests/palsuite/composite/object_management/event/nonshared/CMakeLists.txt b/src/pal/tests/palsuite/composite/object_management/event/nonshared/CMakeLists.txt
index b336c03d37..276d9a47ce 100644
--- a/src/pal/tests/palsuite/composite/object_management/event/nonshared/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/object_management/event/nonshared/CMakeLists.txt
@@ -14,8 +14,6 @@ add_executable(paltest_event_nonshared
add_dependencies(paltest_event_nonshared coreclrpal)
target_link_libraries(paltest_event_nonshared
- pthread
+ ${COMMON_TEST_LIBRARIES}
rt
- m
- coreclrpal
)
diff --git a/src/pal/tests/palsuite/composite/object_management/event/shared/CMakeLists.txt b/src/pal/tests/palsuite/composite/object_management/event/shared/CMakeLists.txt
index 86188796bd..92ad5b0c1b 100644
--- a/src/pal/tests/palsuite/composite/object_management/event/shared/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/object_management/event/shared/CMakeLists.txt
@@ -14,8 +14,6 @@ add_executable(paltest_event_shared
add_dependencies(paltest_event_shared coreclrpal)
target_link_libraries(paltest_event_shared
- pthread
+ ${COMMON_TEST_LIBRARIES}
rt
- m
- coreclrpal
)
diff --git a/src/pal/tests/palsuite/composite/object_management/mutex/nonshared/CMakeLists.txt b/src/pal/tests/palsuite/composite/object_management/mutex/nonshared/CMakeLists.txt
index 03d5efac27..8ddce815dc 100644
--- a/src/pal/tests/palsuite/composite/object_management/mutex/nonshared/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/object_management/mutex/nonshared/CMakeLists.txt
@@ -14,8 +14,6 @@ add_executable(paltest_mutex_nonshared
add_dependencies(paltest_mutex_nonshared coreclrpal)
target_link_libraries(paltest_mutex_nonshared
- pthread
+ ${COMMON_TEST_LIBRARIES}
rt
- m
- coreclrpal
)
diff --git a/src/pal/tests/palsuite/composite/object_management/mutex/shared/CMakeLists.txt b/src/pal/tests/palsuite/composite/object_management/mutex/shared/CMakeLists.txt
index d4b50cd66e..0436f263fd 100644
--- a/src/pal/tests/palsuite/composite/object_management/mutex/shared/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/object_management/mutex/shared/CMakeLists.txt
@@ -14,8 +14,6 @@ add_executable(paltest_mutex_shared
add_dependencies(paltest_mutex_shared coreclrpal)
target_link_libraries(paltest_mutex_shared
- pthread
+ ${COMMON_TEST_LIBRARIES}
rt
- m
- coreclrpal
)
diff --git a/src/pal/tests/palsuite/composite/object_management/semaphore/nonshared/CMakeLists.txt b/src/pal/tests/palsuite/composite/object_management/semaphore/nonshared/CMakeLists.txt
index 9ed4535d39..f17c6737bc 100644
--- a/src/pal/tests/palsuite/composite/object_management/semaphore/nonshared/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/object_management/semaphore/nonshared/CMakeLists.txt
@@ -14,8 +14,6 @@ add_executable(paltest_semaphore_nonshared
add_dependencies(paltest_semaphore_nonshared coreclrpal)
target_link_libraries(paltest_semaphore_nonshared
- pthread
+ ${COMMON_TEST_LIBRARIES}
rt
- m
- coreclrpal
)
diff --git a/src/pal/tests/palsuite/composite/object_management/semaphore/shared/CMakeLists.txt b/src/pal/tests/palsuite/composite/object_management/semaphore/shared/CMakeLists.txt
index 5c7f93290f..24327bea4c 100644
--- a/src/pal/tests/palsuite/composite/object_management/semaphore/shared/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/object_management/semaphore/shared/CMakeLists.txt
@@ -14,8 +14,6 @@ add_executable(paltest_semaphore_shared
add_dependencies(paltest_semaphore_shared coreclrpal)
target_link_libraries(paltest_semaphore_shared
- pthread
+ ${COMMON_TEST_LIBRARIES}
rt
- m
- coreclrpal
)
diff --git a/src/pal/tests/palsuite/composite/object_management/semaphore/shared/main.cpp b/src/pal/tests/palsuite/composite/object_management/semaphore/shared/main.cpp
index deb8252b70..d3cfa762bb 100644
--- a/src/pal/tests/palsuite/composite/object_management/semaphore/shared/main.cpp
+++ b/src/pal/tests/palsuite/composite/object_management/semaphore/shared/main.cpp
@@ -129,8 +129,6 @@ make the most sense to just skip the named semaphore test on Windows
- from an object management perspective it doesn't really gain
us anything over what we already have."
*/
-#ifdef PLATFORM_UNIX
-
ZeroMemory( objectSuffix, MAX_PATH );
if(GetParameters(argc, argv))
@@ -272,7 +270,6 @@ us anything over what we already have."
Trace("Test Failed\n");
}
-#endif //PLATFORM_UNIX
PAL_Terminate();
return testReturnCode;
}
diff --git a/src/pal/tests/palsuite/composite/synchronization/criticalsection/CMakeLists.txt b/src/pal/tests/palsuite/composite/synchronization/criticalsection/CMakeLists.txt
index fc357ed258..e6b6b0c805 100644
--- a/src/pal/tests/palsuite/composite/synchronization/criticalsection/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/synchronization/criticalsection/CMakeLists.txt
@@ -14,7 +14,5 @@ add_executable(paltest_synchronization_criticalsection
add_dependencies(paltest_synchronization_criticalsection coreclrpal)
target_link_libraries(paltest_synchronization_criticalsection
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/CMakeLists.txt b/src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/CMakeLists.txt
index 9a02993916..5a2a503137 100644
--- a/src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/CMakeLists.txt
@@ -15,7 +15,5 @@ add_executable(paltest_synchronization_nativecriticalsection
add_dependencies(paltest_synchronization_nativecriticalsection coreclrpal)
target_link_libraries(paltest_synchronization_nativecriticalsection
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/pal_composite_native_cs.cpp b/src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/pal_composite_native_cs.cpp
index 40efacd7c9..0ccd5c9419 100644
--- a/src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/pal_composite_native_cs.cpp
+++ b/src/pal/tests/palsuite/composite/synchronization/nativecriticalsection/pal_composite_native_cs.cpp
@@ -445,13 +445,9 @@ ULONGLONG GetTicks(void)
asm volatile("rdtsc":"=a" (a), "=d" (d));
return ((ULONGLONG)((unsigned int)(d)) << 32) | (unsigned int)(a);
#else
-#if defined(__sparc__) || (defined (_HPUX_) && defined(__ia64__))
- return (ULONGLONG)gethrtime();
-#else
// #error Don''t know how to get ticks on this platform
return (ULONGLONG)gethrtime();
-#endif // __sparc__
-#endif // _X86_
+#endif // i386
}
diff --git a/src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/CMakeLists.txt b/src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/CMakeLists.txt
index 717bdd6b20..b942096363 100644
--- a/src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/CMakeLists.txt
@@ -16,7 +16,5 @@ add_executable(paltest_synchronization_nativecs_interlocked
add_dependencies(paltest_synchronization_nativecs_interlocked coreclrpal)
target_link_libraries(paltest_synchronization_nativecs_interlocked
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/pal_composite_native_cs.cpp b/src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/pal_composite_native_cs.cpp
index 4c19d3b0de..ec5c1c365f 100644
--- a/src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/pal_composite_native_cs.cpp
+++ b/src/pal/tests/palsuite/composite/synchronization/nativecs_interlocked/pal_composite_native_cs.cpp
@@ -449,13 +449,9 @@ ULONGLONG GetTicks(void)
asm volatile("rdtsc":"=a" (a), "=d" (d));
return ((ULONGLONG)((unsigned int)(d)) << 32) | (unsigned int)(a);
#else
-#if defined(__sparc__) || (defined (_HPUX_) && defined(__ia64__))
- return (ULONGLONG)gethrtime();
-#else
// #error Don''t know how to get ticks on this platform
return (ULONGLONG)gethrtime();
-#endif // __sparc__
-#endif // _X86_
+#endif // i386
}
diff --git a/src/pal/tests/palsuite/composite/threading/threadsuspension/CMakeLists.txt b/src/pal/tests/palsuite/composite/threading/threadsuspension/CMakeLists.txt
index d396d2fc49..a01fbd6552 100644
--- a/src/pal/tests/palsuite/composite/threading/threadsuspension/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/threading/threadsuspension/CMakeLists.txt
@@ -14,7 +14,5 @@ add_executable(paltest_threading_threadsuspension
add_dependencies(paltest_threading_threadsuspension coreclrpal)
target_link_libraries(paltest_threading_threadsuspension
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/composite/threading/threadsuspension_switchthread/CMakeLists.txt b/src/pal/tests/palsuite/composite/threading/threadsuspension_switchthread/CMakeLists.txt
index 2c880921fe..c3fb807148 100644
--- a/src/pal/tests/palsuite/composite/threading/threadsuspension_switchthread/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/threading/threadsuspension_switchthread/CMakeLists.txt
@@ -14,7 +14,5 @@ add_executable(paltest_threading_threadsuspension_switchthread
add_dependencies(paltest_threading_threadsuspension_switchthread coreclrpal)
target_link_libraries(paltest_threading_threadsuspension_switchthread
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/composite/wfmo/CMakeLists.txt b/src/pal/tests/palsuite/composite/wfmo/CMakeLists.txt
index 5e103102af..3f497d76c2 100644
--- a/src/pal/tests/palsuite/composite/wfmo/CMakeLists.txt
+++ b/src/pal/tests/palsuite/composite/wfmo/CMakeLists.txt
@@ -14,8 +14,6 @@ add_executable(paltest_composite_wfmo
add_dependencies(paltest_composite_wfmo coreclrpal)
target_link_libraries(paltest_composite_wfmo
- pthread
+ ${COMMON_TEST_LIBRARIES}
rt
- m
- coreclrpal
)
diff --git a/src/pal/tests/palsuite/debug_api/DebugBreak/test1/CMakeLists.txt b/src/pal/tests/palsuite/debug_api/DebugBreak/test1/CMakeLists.txt
index 1b2ae538cc..5eba74f9f0 100644
--- a/src/pal/tests/palsuite/debug_api/DebugBreak/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/debug_api/DebugBreak/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_debugbreak_test1
add_dependencies(paltest_debugbreak_test1 coreclrpal)
target_link_libraries(paltest_debugbreak_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/CMakeLists.txt b/src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/CMakeLists.txt
index 3000734afe..46a870c111 100644
--- a/src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_outputdebugstringa_test1
add_dependencies(paltest_outputdebugstringa_test1 coreclrpal)
target_link_libraries(paltest_outputdebugstringa_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,9 +28,7 @@ add_executable(paltest_outputdebugstringa_test1_helper
add_dependencies(paltest_outputdebugstringa_test1_helper coreclrpal)
target_link_libraries(paltest_outputdebugstringa_test1_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/debug_api/OutputDebugStringW/test1/CMakeLists.txt b/src/pal/tests/palsuite/debug_api/OutputDebugStringW/test1/CMakeLists.txt
index 4a93f0e394..802de0ee9a 100644
--- a/src/pal/tests/palsuite/debug_api/OutputDebugStringW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/debug_api/OutputDebugStringW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_outputdebugstringw_test1
add_dependencies(paltest_outputdebugstringw_test1 coreclrpal)
target_link_libraries(paltest_outputdebugstringw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test1/CMakeLists.txt b/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test1/CMakeLists.txt
index afd581fb92..af19587ffa 100644
--- a/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_writeprocessmemory_test1
add_dependencies(paltest_writeprocessmemory_test1 coreclrpal)
target_link_libraries(paltest_writeprocessmemory_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_writeprocessmemory_test1_helper
add_dependencies(paltest_writeprocessmemory_test1_helper coreclrpal)
target_link_libraries(paltest_writeprocessmemory_test1_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test3/CMakeLists.txt b/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test3/CMakeLists.txt
index 3a5067c926..d6e11a683a 100644
--- a/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test3/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_writeprocessmemory_test3
add_dependencies(paltest_writeprocessmemory_test3 coreclrpal)
target_link_libraries(paltest_writeprocessmemory_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_writeprocessmemory_test3_helper
add_dependencies(paltest_writeprocessmemory_test3_helper coreclrpal)
target_link_libraries(paltest_writeprocessmemory_test3_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test4/CMakeLists.txt b/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test4/CMakeLists.txt
index 7cba09038a..9eec2bd78d 100644
--- a/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/debug_api/WriteProcessMemory/test4/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_writeprocessmemory_test4
add_dependencies(paltest_writeprocessmemory_test4 coreclrpal)
target_link_libraries(paltest_writeprocessmemory_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_writeprocessmemory_test4_helper
add_dependencies(paltest_writeprocessmemory_test4_helper coreclrpal)
target_link_libraries(paltest_writeprocessmemory_test4_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test1/CMakeLists.txt
index 4e30869d85..336eafd718 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_filter_test1
add_dependencies(paltest_pal_except_filter_test1 coreclrpal)
target_link_libraries(paltest_pal_except_filter_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test2/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test2/CMakeLists.txt
index 3f979c08db..e9c57b44c3 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_filter_test2
add_dependencies(paltest_pal_except_filter_test2 coreclrpal)
target_link_libraries(paltest_pal_except_filter_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test3/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test3/CMakeLists.txt
index 2bdf44e058..45286ac198 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_filter_test3
add_dependencies(paltest_pal_except_filter_test3 coreclrpal)
target_link_libraries(paltest_pal_except_filter_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test1/CMakeLists.txt
index cf0a5e7c6d..be9ab1aa61 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_filter_ex_test1
add_dependencies(paltest_pal_except_filter_ex_test1 coreclrpal)
target_link_libraries(paltest_pal_except_filter_ex_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test2/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test2/CMakeLists.txt
index a3f82c26b9..4d90c711cd 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_filter_ex_test2
add_dependencies(paltest_pal_except_filter_ex_test2 coreclrpal)
target_link_libraries(paltest_pal_except_filter_ex_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test3/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test3/CMakeLists.txt
index 532b29a9a1..6a52145151 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_EXCEPT_FILTER_EX/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_filter_ex_test3
add_dependencies(paltest_pal_except_filter_ex_test3 coreclrpal)
target_link_libraries(paltest_pal_except_filter_ex_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test1/CMakeLists.txt
index b478de63e4..ad208751fc 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_try_except_test1
add_dependencies(paltest_pal_try_except_test1 coreclrpal)
target_link_libraries(paltest_pal_try_except_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test2/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test2/CMakeLists.txt
index 0e344a9320..da34fb23fa 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_try_except_test2
add_dependencies(paltest_pal_try_except_test2 coreclrpal)
target_link_libraries(paltest_pal_try_except_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test1/CMakeLists.txt
index cced8a11be..2ab8a25675 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_try_except_ex_test1
add_dependencies(paltest_pal_try_except_ex_test1 coreclrpal)
target_link_libraries(paltest_pal_try_except_ex_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test2/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test2/CMakeLists.txt
index c3549b5d87..80d90dd9b1 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_try_except_ex_test2
add_dependencies(paltest_pal_try_except_ex_test2 coreclrpal)
target_link_libraries(paltest_pal_try_except_ex_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test3/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test3/CMakeLists.txt
index 34790da3d3..d9507b046b 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_TRY_EXCEPT_EX/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_try_except_ex_test3
add_dependencies(paltest_pal_try_except_ex_test3 coreclrpal)
target_link_libraries(paltest_pal_try_except_ex_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/PAL_TRY_LEAVE_FINALLY/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/PAL_TRY_LEAVE_FINALLY/test1/CMakeLists.txt
index f004db1658..6b34c1d629 100644
--- a/src/pal/tests/palsuite/exception_handling/PAL_TRY_LEAVE_FINALLY/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/PAL_TRY_LEAVE_FINALLY/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_try_leave_finally_test1
add_dependencies(paltest_pal_try_leave_finally_test1 coreclrpal)
target_link_libraries(paltest_pal_try_leave_finally_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/RaiseException/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/RaiseException/test1/CMakeLists.txt
index 2fba7dd9b3..dcc47db93f 100644
--- a/src/pal/tests/palsuite/exception_handling/RaiseException/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/RaiseException/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_raiseexception_test1
add_dependencies(paltest_raiseexception_test1 coreclrpal)
target_link_libraries(paltest_raiseexception_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/RaiseException/test2/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/RaiseException/test2/CMakeLists.txt
index 7fc9f5f12c..5c9ba2ceee 100644
--- a/src/pal/tests/palsuite/exception_handling/RaiseException/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/RaiseException/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_raiseexception_test2
add_dependencies(paltest_raiseexception_test2 coreclrpal)
target_link_libraries(paltest_raiseexception_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/RaiseException/test3/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/RaiseException/test3/CMakeLists.txt
index 72e5427b69..a16f832a4a 100644
--- a/src/pal/tests/palsuite/exception_handling/RaiseException/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/RaiseException/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_raiseexception_test3
add_dependencies(paltest_raiseexception_test3 coreclrpal)
target_link_libraries(paltest_raiseexception_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/CMakeLists.txt
index 068427303f..bff5e893e5 100644
--- a/src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setunhandledexceptionfilter_test1
add_dependencies(paltest_setunhandledexceptionfilter_test1 coreclrpal)
target_link_libraries(paltest_setunhandledexceptionfilter_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/pal_except/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_except/test1/CMakeLists.txt
index b219238ef4..a34f673304 100644
--- a/src/pal/tests/palsuite/exception_handling/pal_except/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/pal_except/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_test1
add_dependencies(paltest_pal_except_test1 coreclrpal)
target_link_libraries(paltest_pal_except_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/pal_except/test2/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_except/test2/CMakeLists.txt
index 27a725353b..a40910eca5 100644
--- a/src/pal/tests/palsuite/exception_handling/pal_except/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/pal_except/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_test2
add_dependencies(paltest_pal_except_test2 coreclrpal)
target_link_libraries(paltest_pal_except_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/pal_except/test3/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_except/test3/CMakeLists.txt
index 680341a782..6f9e100fb8 100644
--- a/src/pal/tests/palsuite/exception_handling/pal_except/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/pal_except/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_test3
add_dependencies(paltest_pal_except_test3 coreclrpal)
target_link_libraries(paltest_pal_except_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/pal_except/test4/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_except/test4/CMakeLists.txt
index 98eb7bfb23..fb51d9890f 100644
--- a/src/pal/tests/palsuite/exception_handling/pal_except/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/pal_except/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_test4
add_dependencies(paltest_pal_except_test4 coreclrpal)
target_link_libraries(paltest_pal_except_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/pal_except/test5/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_except/test5/CMakeLists.txt
index 9a39e32cce..4ec8c69957 100644
--- a/src/pal/tests/palsuite/exception_handling/pal_except/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/pal_except/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_test5
add_dependencies(paltest_pal_except_test5 coreclrpal)
target_link_libraries(paltest_pal_except_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/pal_except/test6/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_except/test6/CMakeLists.txt
index d009128871..bc1742c178 100644
--- a/src/pal/tests/palsuite/exception_handling/pal_except/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/pal_except/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_test6
add_dependencies(paltest_pal_except_test6 coreclrpal)
target_link_libraries(paltest_pal_except_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/pal_except/test7/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_except/test7/CMakeLists.txt
index 33fee62cc2..7cb6be8d94 100644
--- a/src/pal/tests/palsuite/exception_handling/pal_except/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/pal_except/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_except_test7
add_dependencies(paltest_pal_except_test7 coreclrpal)
target_link_libraries(paltest_pal_except_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/pal_finally/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_finally/test1/CMakeLists.txt
index 67cc6c0b92..fe1cbbe0b6 100644
--- a/src/pal/tests/palsuite/exception_handling/pal_finally/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/pal_finally/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_finally_test1
add_dependencies(paltest_pal_finally_test1 coreclrpal)
target_link_libraries(paltest_pal_finally_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeLists.txt
index b0458db998..4a3abc2d64 100644
--- a/src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeLists.txt
@@ -43,7 +43,7 @@ add_dependencies(paltest_pal_sxs_test1_dll1
)
target_link_libraries(paltest_pal_sxs_test1_dll1
- pthread
+ ${COMMON_TEST_LIBRARIES}
m
coreclrpal
)
@@ -71,13 +71,10 @@ set_property(TARGET paltest_pal_sxs_test1_dll2 APPEND_STRING PROPERTY LINK_DEPEN
add_dependencies(paltest_pal_sxs_test1_dll2
dlltest2_exports
- coreclrpal
)
target_link_libraries(paltest_pal_sxs_test1_dll2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
# Main program
diff --git a/src/pal/tests/palsuite/file_io/AreFileApisANSI/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/AreFileApisANSI/test1/CMakeLists.txt
index e624bef462..ac76e5dc12 100644
--- a/src/pal/tests/palsuite/file_io/AreFileApisANSI/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/AreFileApisANSI/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_arefileapisansi_test1
add_dependencies(paltest_arefileapisansi_test1 coreclrpal)
target_link_libraries(paltest_arefileapisansi_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CompareFileTime/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CompareFileTime/test1/CMakeLists.txt
index fa96a44cdd..4883aee387 100644
--- a/src/pal/tests/palsuite/file_io/CompareFileTime/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CompareFileTime/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_comparefiletime_test1
add_dependencies(paltest_comparefiletime_test1 coreclrpal)
target_link_libraries(paltest_comparefiletime_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CopyFileA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CopyFileA/test1/CMakeLists.txt
index 13abbc0979..0890ebe2e7 100644
--- a/src/pal/tests/palsuite/file_io/CopyFileA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CopyFileA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_copyfilea_test1
add_dependencies(paltest_copyfilea_test1 coreclrpal)
target_link_libraries(paltest_copyfilea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CopyFileA/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CopyFileA/test2/CMakeLists.txt
index cd0d8bc6cf..8844af3f8f 100644
--- a/src/pal/tests/palsuite/file_io/CopyFileA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CopyFileA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_copyfilea_test2
add_dependencies(paltest_copyfilea_test2 coreclrpal)
target_link_libraries(paltest_copyfilea_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CopyFileA/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CopyFileA/test3/CMakeLists.txt
index 0bb41b8d8f..3fbdc3e187 100644
--- a/src/pal/tests/palsuite/file_io/CopyFileA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CopyFileA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_copyfilea_test3
add_dependencies(paltest_copyfilea_test3 coreclrpal)
target_link_libraries(paltest_copyfilea_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CopyFileA/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CopyFileA/test4/CMakeLists.txt
index 12f85d1747..0bb3a32770 100644
--- a/src/pal/tests/palsuite/file_io/CopyFileA/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CopyFileA/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_copyfilea_test4
add_dependencies(paltest_copyfilea_test4 coreclrpal)
target_link_libraries(paltest_copyfilea_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CopyFileW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CopyFileW/test1/CMakeLists.txt
index 20c8141d90..70ff478e35 100644
--- a/src/pal/tests/palsuite/file_io/CopyFileW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CopyFileW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_copyfilew_test1
add_dependencies(paltest_copyfilew_test1 coreclrpal)
target_link_libraries(paltest_copyfilew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CopyFileW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CopyFileW/test2/CMakeLists.txt
index 4201bdca88..beebf1b86c 100644
--- a/src/pal/tests/palsuite/file_io/CopyFileW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CopyFileW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_copyfilew_test2
add_dependencies(paltest_copyfilew_test2 coreclrpal)
target_link_libraries(paltest_copyfilew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CopyFileW/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CopyFileW/test3/CMakeLists.txt
index d0fd94c990..9e18a308e8 100644
--- a/src/pal/tests/palsuite/file_io/CopyFileW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CopyFileW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_copyfilew_test3
add_dependencies(paltest_copyfilew_test3 coreclrpal)
target_link_libraries(paltest_copyfilew_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CreateDirectoryA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CreateDirectoryA/test1/CMakeLists.txt
index 1dc87fa34b..57ac440265 100644
--- a/src/pal/tests/palsuite/file_io/CreateDirectoryA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CreateDirectoryA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createdirectorya_test1
add_dependencies(paltest_createdirectorya_test1 coreclrpal)
target_link_libraries(paltest_createdirectorya_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CreateDirectoryA/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CreateDirectoryA/test2/CMakeLists.txt
index 3ee8abbcc2..b764145856 100644
--- a/src/pal/tests/palsuite/file_io/CreateDirectoryA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CreateDirectoryA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createdirectorya_test2
add_dependencies(paltest_createdirectorya_test2 coreclrpal)
target_link_libraries(paltest_createdirectorya_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CMakeLists.txt
index f8cb584cc6..1fd09ea82d 100644
--- a/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createdirectoryw_test1
add_dependencies(paltest_createdirectoryw_test1 coreclrpal)
target_link_libraries(paltest_createdirectoryw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CreateDirectoryW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test2/CMakeLists.txt
index f8614ca5a6..2dcfe6d49e 100644
--- a/src/pal/tests/palsuite/file_io/CreateDirectoryW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createdirectoryw_test2
add_dependencies(paltest_createdirectoryw_test2 coreclrpal)
target_link_libraries(paltest_createdirectoryw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CreateFileA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CreateFileA/test1/CMakeLists.txt
index edacdbd621..dec8c30559 100644
--- a/src/pal/tests/palsuite/file_io/CreateFileA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CreateFileA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilea_test1
add_dependencies(paltest_createfilea_test1 coreclrpal)
target_link_libraries(paltest_createfilea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/CreateFileW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CreateFileW/test1/CMakeLists.txt
index 820e169a37..d437410a1b 100644
--- a/src/pal/tests/palsuite/file_io/CreateFileW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/CreateFileW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilew_test1
add_dependencies(paltest_createfilew_test1 coreclrpal)
target_link_libraries(paltest_createfilew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/DeleteFileA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/DeleteFileA/test1/CMakeLists.txt
index b979c206b2..a07a00076d 100644
--- a/src/pal/tests/palsuite/file_io/DeleteFileA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/DeleteFileA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_deletefilea_test1
add_dependencies(paltest_deletefilea_test1 coreclrpal)
target_link_libraries(paltest_deletefilea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/DeleteFileW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/DeleteFileW/test1/CMakeLists.txt
index eada6145b9..7aff64ccff 100644
--- a/src/pal/tests/palsuite/file_io/DeleteFileW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/DeleteFileW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_deletefilew_test1
add_dependencies(paltest_deletefilew_test1 coreclrpal)
target_link_libraries(paltest_deletefilew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FILECanonicalizePath/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FILECanonicalizePath/CMakeLists.txt
index 7045983629..7c6629d243 100644
--- a/src/pal/tests/palsuite/file_io/FILECanonicalizePath/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FILECanonicalizePath/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_filecanonicalizepath_test1
add_dependencies(paltest_filecanonicalizepath_test1 coreclrpal)
target_link_libraries(paltest_filecanonicalizepath_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FileTimeToDosDateTime/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FileTimeToDosDateTime/test1/CMakeLists.txt
index 6ec6a98b3f..9d5c678be3 100644
--- a/src/pal/tests/palsuite/file_io/FileTimeToDosDateTime/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FileTimeToDosDateTime/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_filetimetodosdatetime_test1
add_dependencies(paltest_filetimetodosdatetime_test1 coreclrpal)
target_link_libraries(paltest_filetimetodosdatetime_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FindClose/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FindClose/test1/CMakeLists.txt
index d97c69e6ee..d5a92fa405 100644
--- a/src/pal/tests/palsuite/file_io/FindClose/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FindClose/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_findclose_test1
add_dependencies(paltest_findclose_test1 coreclrpal)
target_link_libraries(paltest_findclose_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FindFirstFileA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FindFirstFileA/test1/CMakeLists.txt
index aeac94d42f..c485edbbac 100644
--- a/src/pal/tests/palsuite/file_io/FindFirstFileA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FindFirstFileA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_findfirstfilea_test1
add_dependencies(paltest_findfirstfilea_test1 coreclrpal)
target_link_libraries(paltest_findfirstfilea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FindFirstFileW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FindFirstFileW/test1/CMakeLists.txt
index 2a6ea2b7a4..191e42d5c3 100644
--- a/src/pal/tests/palsuite/file_io/FindFirstFileW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FindFirstFileW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_findfirstfilew_test1
add_dependencies(paltest_findfirstfilew_test1 coreclrpal)
target_link_libraries(paltest_findfirstfilew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FindNextFileA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FindNextFileA/test1/CMakeLists.txt
index 6e97b7aaad..4dcaa99982 100644
--- a/src/pal/tests/palsuite/file_io/FindNextFileA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FindNextFileA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_findnextfilea_test1
add_dependencies(paltest_findnextfilea_test1 coreclrpal)
target_link_libraries(paltest_findnextfilea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FindNextFileA/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FindNextFileA/test2/CMakeLists.txt
index e037bd3aa0..d5871a400f 100644
--- a/src/pal/tests/palsuite/file_io/FindNextFileA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FindNextFileA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_findnextfilea_test2
add_dependencies(paltest_findnextfilea_test2 coreclrpal)
target_link_libraries(paltest_findnextfilea_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FindNextFileW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FindNextFileW/test1/CMakeLists.txt
index a7c3e7ea02..62bf2f860b 100644
--- a/src/pal/tests/palsuite/file_io/FindNextFileW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FindNextFileW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_findnextfilew_test1
add_dependencies(paltest_findnextfilew_test1 coreclrpal)
target_link_libraries(paltest_findnextfilew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FindNextFileW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FindNextFileW/test2/CMakeLists.txt
index 7b4c3c9597..2b9a43f8f4 100644
--- a/src/pal/tests/palsuite/file_io/FindNextFileW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FindNextFileW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_findnextfilew_test2
add_dependencies(paltest_findnextfilew_test2 coreclrpal)
target_link_libraries(paltest_findnextfilew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/FlushFileBuffers/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/FlushFileBuffers/test1/CMakeLists.txt
index 6c24ac76d1..433e89bbf4 100644
--- a/src/pal/tests/palsuite/file_io/FlushFileBuffers/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/FlushFileBuffers/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_flushfilebuffers_test1
add_dependencies(paltest_flushfilebuffers_test1 coreclrpal)
target_link_libraries(paltest_flushfilebuffers_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetConsoleCP/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetConsoleCP/test1/CMakeLists.txt
index 64ab6ea945..7753cadea4 100644
--- a/src/pal/tests/palsuite/file_io/GetConsoleCP/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetConsoleCP/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getconsolecp_test1
add_dependencies(paltest_getconsolecp_test1 coreclrpal)
target_link_libraries(paltest_getconsolecp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetConsoleOutputCP/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetConsoleOutputCP/test1/CMakeLists.txt
index 756f87b382..5784789af7 100644
--- a/src/pal/tests/palsuite/file_io/GetConsoleOutputCP/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetConsoleOutputCP/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getconsoleoutputcp_test1
add_dependencies(paltest_getconsoleoutputcp_test1 coreclrpal)
target_link_libraries(paltest_getconsoleoutputcp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetCurrentDirectoryA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetCurrentDirectoryA/test1/CMakeLists.txt
index 28efc6897f..dad46b6f6b 100644
--- a/src/pal/tests/palsuite/file_io/GetCurrentDirectoryA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetCurrentDirectoryA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcurrentdirectorya_test1
add_dependencies(paltest_getcurrentdirectorya_test1 coreclrpal)
target_link_libraries(paltest_getcurrentdirectorya_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetCurrentDirectoryW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetCurrentDirectoryW/test1/CMakeLists.txt
index ee07f5e0d1..96b148c1b1 100644
--- a/src/pal/tests/palsuite/file_io/GetCurrentDirectoryW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetCurrentDirectoryW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcurrentdirectoryw_test1
add_dependencies(paltest_getcurrentdirectoryw_test1 coreclrpal)
target_link_libraries(paltest_getcurrentdirectoryw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test1/CMakeLists.txt
index 7de0b275f6..e0238707e5 100644
--- a/src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getdiskfreespacew_test1
add_dependencies(paltest_getdiskfreespacew_test1 coreclrpal)
target_link_libraries(paltest_getdiskfreespacew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test2/CMakeLists.txt
index 7bcbf55c42..fb6a08789b 100644
--- a/src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetDiskFreeSpaceW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getdiskfreespacew_test2
add_dependencies(paltest_getdiskfreespacew_test2 coreclrpal)
target_link_libraries(paltest_getdiskfreespacew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileAttributesA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileAttributesA/test1/CMakeLists.txt
index 414df7f6b5..fa2182242e 100644
--- a/src/pal/tests/palsuite/file_io/GetFileAttributesA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileAttributesA/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_getfileattributesa_test1
add_dependencies(paltest_getfileattributesa_test1 coreclrpal)
target_link_libraries(paltest_getfileattributesa_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
add_subdirectory(.hidden_directory)
add_subdirectory(.hidden_ro_directory)
diff --git a/src/pal/tests/palsuite/file_io/GetFileAttributesExW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileAttributesExW/test1/CMakeLists.txt
index 6ea24d9d32..41f08e15d9 100644
--- a/src/pal/tests/palsuite/file_io/GetFileAttributesExW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileAttributesExW/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_getfileattributesexw_test1
add_dependencies(paltest_getfileattributesexw_test1 coreclrpal)
target_link_libraries(paltest_getfileattributesexw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
add_subdirectory(.hidden_directory)
add_subdirectory(normal_test_directory)
diff --git a/src/pal/tests/palsuite/file_io/GetFileAttributesExW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileAttributesExW/test2/CMakeLists.txt
index 0faa3bd11e..193b4a5144 100644
--- a/src/pal/tests/palsuite/file_io/GetFileAttributesExW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileAttributesExW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfileattributesexw_test2
add_dependencies(paltest_getfileattributesexw_test2 coreclrpal)
target_link_libraries(paltest_getfileattributesexw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileAttributesW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileAttributesW/test1/CMakeLists.txt
index bc82f3678e..d64a455a8e 100644
--- a/src/pal/tests/palsuite/file_io/GetFileAttributesW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileAttributesW/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_getfileattributesw_test1
add_dependencies(paltest_getfileattributesw_test1 coreclrpal)
target_link_libraries(paltest_getfileattributesw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
add_subdirectory(.hidden_directory)
add_subdirectory(.hidden_ro_directory)
diff --git a/src/pal/tests/palsuite/file_io/GetFileSize/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileSize/test1/CMakeLists.txt
index f192ba7400..1220041887 100644
--- a/src/pal/tests/palsuite/file_io/GetFileSize/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileSize/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfilesize_test1
add_dependencies(paltest_getfilesize_test1 coreclrpal)
target_link_libraries(paltest_getfilesize_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/CMakeLists.txt
index 33a7e2f557..51e7412bdf 100644
--- a/src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfilesizeex_test1
add_dependencies(paltest_getfilesizeex_test1 coreclrpal)
target_link_libraries(paltest_getfilesizeex_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileTime/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileTime/test1/CMakeLists.txt
index b95267ab5b..3c95a5d992 100644
--- a/src/pal/tests/palsuite/file_io/GetFileTime/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileTime/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletime_test1
add_dependencies(paltest_getfiletime_test1 coreclrpal)
target_link_libraries(paltest_getfiletime_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileTime/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileTime/test2/CMakeLists.txt
index fe02e27bbe..329d8c6553 100644
--- a/src/pal/tests/palsuite/file_io/GetFileTime/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileTime/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletime_test2
add_dependencies(paltest_getfiletime_test2 coreclrpal)
target_link_libraries(paltest_getfiletime_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileTime/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileTime/test3/CMakeLists.txt
index bb88966e68..d154a8810b 100644
--- a/src/pal/tests/palsuite/file_io/GetFileTime/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileTime/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletime_test3
add_dependencies(paltest_getfiletime_test3 coreclrpal)
target_link_libraries(paltest_getfiletime_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileTime/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileTime/test4/CMakeLists.txt
index e43e7f99a8..416db15a06 100644
--- a/src/pal/tests/palsuite/file_io/GetFileTime/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileTime/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletime_test4
add_dependencies(paltest_getfiletime_test4 coreclrpal)
target_link_libraries(paltest_getfiletime_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileTime/test5/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileTime/test5/CMakeLists.txt
index 4af995d207..4072a52fbc 100644
--- a/src/pal/tests/palsuite/file_io/GetFileTime/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileTime/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletime_test5
add_dependencies(paltest_getfiletime_test5 coreclrpal)
target_link_libraries(paltest_getfiletime_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileTime/test6/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileTime/test6/CMakeLists.txt
index 87c448b2a6..83d652461b 100644
--- a/src/pal/tests/palsuite/file_io/GetFileTime/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileTime/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletime_test6
add_dependencies(paltest_getfiletime_test6 coreclrpal)
target_link_libraries(paltest_getfiletime_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileTime/test7/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileTime/test7/CMakeLists.txt
index cd5cde4d9e..34a08db686 100644
--- a/src/pal/tests/palsuite/file_io/GetFileTime/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileTime/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletime_test7
add_dependencies(paltest_getfiletime_test7 coreclrpal)
target_link_libraries(paltest_getfiletime_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileType/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileType/test1/CMakeLists.txt
index cfaba2e738..c0acc6e484 100644
--- a/src/pal/tests/palsuite/file_io/GetFileType/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileType/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletype_test1
add_dependencies(paltest_getfiletype_test1 coreclrpal)
target_link_libraries(paltest_getfiletype_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileType/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileType/test2/CMakeLists.txt
index 07dae0b04a..1f2ee78f75 100644
--- a/src/pal/tests/palsuite/file_io/GetFileType/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileType/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletype_test2
add_dependencies(paltest_getfiletype_test2 coreclrpal)
target_link_libraries(paltest_getfiletype_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFileType/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFileType/test3/CMakeLists.txt
index 9353c85771..ed70e6c96c 100644
--- a/src/pal/tests/palsuite/file_io/GetFileType/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFileType/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfiletype_test3
add_dependencies(paltest_getfiletype_test3 coreclrpal)
target_link_libraries(paltest_getfiletype_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFullPathNameA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFullPathNameA/test1/CMakeLists.txt
index 6198392000..4370c1b155 100644
--- a/src/pal/tests/palsuite/file_io/GetFullPathNameA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFullPathNameA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfullpathnamea_test1
add_dependencies(paltest_getfullpathnamea_test1 coreclrpal)
target_link_libraries(paltest_getfullpathnamea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFullPathNameA/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFullPathNameA/test2/CMakeLists.txt
index 3449f2d80b..157ca6946e 100644
--- a/src/pal/tests/palsuite/file_io/GetFullPathNameA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFullPathNameA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfullpathnamea_test2
add_dependencies(paltest_getfullpathnamea_test2 coreclrpal)
target_link_libraries(paltest_getfullpathnamea_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFullPathNameA/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFullPathNameA/test3/CMakeLists.txt
index 9d8d242e26..74c96185c6 100644
--- a/src/pal/tests/palsuite/file_io/GetFullPathNameA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFullPathNameA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfullpathnamea_test3
add_dependencies(paltest_getfullpathnamea_test3 coreclrpal)
target_link_libraries(paltest_getfullpathnamea_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFullPathNameA/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFullPathNameA/test4/CMakeLists.txt
index abf2bacd1c..bda34bdc25 100644
--- a/src/pal/tests/palsuite/file_io/GetFullPathNameA/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFullPathNameA/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfullpathnamea_test4
add_dependencies(paltest_getfullpathnamea_test4 coreclrpal)
target_link_libraries(paltest_getfullpathnamea_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFullPathNameW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFullPathNameW/test1/CMakeLists.txt
index d455ca1193..5242015025 100644
--- a/src/pal/tests/palsuite/file_io/GetFullPathNameW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFullPathNameW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfullpathnamew_test1
add_dependencies(paltest_getfullpathnamew_test1 coreclrpal)
target_link_libraries(paltest_getfullpathnamew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFullPathNameW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFullPathNameW/test2/CMakeLists.txt
index d974e940a7..33e04d1a3e 100644
--- a/src/pal/tests/palsuite/file_io/GetFullPathNameW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFullPathNameW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfullpathnamew_test2
add_dependencies(paltest_getfullpathnamew_test2 coreclrpal)
target_link_libraries(paltest_getfullpathnamew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFullPathNameW/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFullPathNameW/test3/CMakeLists.txt
index 09439a6372..eaf63760f5 100644
--- a/src/pal/tests/palsuite/file_io/GetFullPathNameW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFullPathNameW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfullpathnamew_test3
add_dependencies(paltest_getfullpathnamew_test3 coreclrpal)
target_link_libraries(paltest_getfullpathnamew_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetFullPathNameW/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetFullPathNameW/test4/CMakeLists.txt
index 11ed9583b6..6398e9207d 100644
--- a/src/pal/tests/palsuite/file_io/GetFullPathNameW/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetFullPathNameW/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getfullpathnamew_test4
add_dependencies(paltest_getfullpathnamew_test4 coreclrpal)
target_link_libraries(paltest_getfullpathnamew_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetLongPathNameW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetLongPathNameW/test1/CMakeLists.txt
index 3b9f0b118a..ec5b70bff7 100644
--- a/src/pal/tests/palsuite/file_io/GetLongPathNameW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetLongPathNameW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getlongpathnamew_test1
add_dependencies(paltest_getlongpathnamew_test1 coreclrpal)
target_link_libraries(paltest_getlongpathnamew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetLongPathNameW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetLongPathNameW/test2/CMakeLists.txt
index b92e431095..8d7c40b3b4 100644
--- a/src/pal/tests/palsuite/file_io/GetLongPathNameW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetLongPathNameW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getlongpathnamew_test2
add_dependencies(paltest_getlongpathnamew_test2 coreclrpal)
target_link_libraries(paltest_getlongpathnamew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetStdHandle/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetStdHandle/test1/CMakeLists.txt
index eaa1721b7e..7a299015b2 100644
--- a/src/pal/tests/palsuite/file_io/GetStdHandle/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetStdHandle/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getstdhandle_test1
add_dependencies(paltest_getstdhandle_test1 coreclrpal)
target_link_libraries(paltest_getstdhandle_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetStdHandle/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetStdHandle/test2/CMakeLists.txt
index ef45aa0dec..5a4d2ba15d 100644
--- a/src/pal/tests/palsuite/file_io/GetStdHandle/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetStdHandle/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getstdhandle_test2
add_dependencies(paltest_getstdhandle_test2 coreclrpal)
target_link_libraries(paltest_getstdhandle_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetSystemTime/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetSystemTime/test1/CMakeLists.txt
index 4367e880f7..7135abf621 100644
--- a/src/pal/tests/palsuite/file_io/GetSystemTime/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetSystemTime/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getsystemtime_test1
add_dependencies(paltest_getsystemtime_test1 coreclrpal)
target_link_libraries(paltest_getsystemtime_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetSystemTimeAsFileTime/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetSystemTimeAsFileTime/test1/CMakeLists.txt
index d149383732..d7421b91c0 100644
--- a/src/pal/tests/palsuite/file_io/GetSystemTimeAsFileTime/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetSystemTimeAsFileTime/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getsystemtimeasfiletime_test1
add_dependencies(paltest_getsystemtimeasfiletime_test1 coreclrpal)
target_link_libraries(paltest_getsystemtimeasfiletime_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetTempFileNameA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetTempFileNameA/test1/CMakeLists.txt
index 4ed0ccb537..38fdb4977d 100644
--- a/src/pal/tests/palsuite/file_io/GetTempFileNameA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetTempFileNameA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettempfilenamea_test1
add_dependencies(paltest_gettempfilenamea_test1 coreclrpal)
target_link_libraries(paltest_gettempfilenamea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetTempFileNameA/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetTempFileNameA/test2/CMakeLists.txt
index 9d9b6461cd..1c302acd95 100644
--- a/src/pal/tests/palsuite/file_io/GetTempFileNameA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetTempFileNameA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettempfilenamea_test2
add_dependencies(paltest_gettempfilenamea_test2 coreclrpal)
target_link_libraries(paltest_gettempfilenamea_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetTempFileNameA/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetTempFileNameA/test3/CMakeLists.txt
index 446f3cf837..ec18937e01 100644
--- a/src/pal/tests/palsuite/file_io/GetTempFileNameA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetTempFileNameA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettempfilenamea_test3
add_dependencies(paltest_gettempfilenamea_test3 coreclrpal)
target_link_libraries(paltest_gettempfilenamea_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/CMakeLists.txt
index 6919cf66cd..96ad10bb36 100644
--- a/src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettempfilenamew_test1
add_dependencies(paltest_gettempfilenamew_test1 coreclrpal)
target_link_libraries(paltest_gettempfilenamew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/GetTempFileNameW.cpp b/src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/GetTempFileNameW.cpp
index 43cda8f447..ebc4d25bcb 100644
--- a/src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/GetTempFileNameW.cpp
+++ b/src/pal/tests/palsuite/file_io/GetTempFileNameW/test1/GetTempFileNameW.cpp
@@ -104,7 +104,7 @@ int __cdecl main(int argc, char *argv[])
}
// now verify that it only used the first 3 characters of the prefix
- swprintf(wTempString, convert("%s\\%s"), wPath, wPrefix);
+ swprintf_s(wTempString, _countof(wTempString), convert("%s\\%s"), wPath, wPrefix);
if (memcmp(wTempString, wReturnedName, wcslen(wTempString)*sizeof(WCHAR)) == 0)
{
free (wPath);
diff --git a/src/pal/tests/palsuite/file_io/GetTempFileNameW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetTempFileNameW/test2/CMakeLists.txt
index d077463390..bc97c2bc48 100644
--- a/src/pal/tests/palsuite/file_io/GetTempFileNameW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetTempFileNameW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettempfilenamew_test2
add_dependencies(paltest_gettempfilenamew_test2 coreclrpal)
target_link_libraries(paltest_gettempfilenamew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetTempFileNameW/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetTempFileNameW/test3/CMakeLists.txt
index 3aa0f4a044..50794c3e33 100644
--- a/src/pal/tests/palsuite/file_io/GetTempFileNameW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetTempFileNameW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettempfilenamew_test3
add_dependencies(paltest_gettempfilenamew_test3 coreclrpal)
target_link_libraries(paltest_gettempfilenamew_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/GetTempPathW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetTempPathW/test1/CMakeLists.txt
index 04b240997a..093c8803d5 100644
--- a/src/pal/tests/palsuite/file_io/GetTempPathW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/GetTempPathW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettemppathw_test1
add_dependencies(paltest_gettemppathw_test1 coreclrpal)
target_link_libraries(paltest_gettemppathw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/MoveFileA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/MoveFileA/test1/CMakeLists.txt
index b096a04653..b8f445b1e7 100644
--- a/src/pal/tests/palsuite/file_io/MoveFileA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/MoveFileA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_movefilea_test1
add_dependencies(paltest_movefilea_test1 coreclrpal)
target_link_libraries(paltest_movefilea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/MoveFileExA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/MoveFileExA/test1/CMakeLists.txt
index ef2471738c..ac5ea7463b 100644
--- a/src/pal/tests/palsuite/file_io/MoveFileExA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/MoveFileExA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_movefileexa_test1
add_dependencies(paltest_movefileexa_test1 coreclrpal)
target_link_libraries(paltest_movefileexa_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/MoveFileExW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/MoveFileExW/test1/CMakeLists.txt
index ca6b35e3ac..bbe3d5aa3f 100644
--- a/src/pal/tests/palsuite/file_io/MoveFileExW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/MoveFileExW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_movefileexw_test1
add_dependencies(paltest_movefileexw_test1 coreclrpal)
target_link_libraries(paltest_movefileexw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/MoveFileW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/MoveFileW/test1/CMakeLists.txt
index 4519746e7b..03b7ab907c 100644
--- a/src/pal/tests/palsuite/file_io/MoveFileW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/MoveFileW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_movefilew_test1
add_dependencies(paltest_movefilew_test1 coreclrpal)
target_link_libraries(paltest_movefilew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/ReadFile/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/ReadFile/test1/CMakeLists.txt
index 0aceb3708e..8fe1f1d2ed 100644
--- a/src/pal/tests/palsuite/file_io/ReadFile/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/ReadFile/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_readfile_test1
add_dependencies(paltest_readfile_test1 coreclrpal)
target_link_libraries(paltest_readfile_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/ReadFile/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/ReadFile/test2/CMakeLists.txt
index f28ac117a2..2113d67622 100644
--- a/src/pal/tests/palsuite/file_io/ReadFile/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/ReadFile/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_readfile_test2
add_dependencies(paltest_readfile_test2 coreclrpal)
target_link_libraries(paltest_readfile_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/ReadFile/test2/ReadFile.cpp b/src/pal/tests/palsuite/file_io/ReadFile/test2/ReadFile.cpp
index f16858e573..789e001700 100644
--- a/src/pal/tests/palsuite/file_io/ReadFile/test2/ReadFile.cpp
+++ b/src/pal/tests/palsuite/file_io/ReadFile/test2/ReadFile.cpp
@@ -30,11 +30,7 @@ const char* szResultsFile = "Results.txt";
//Previously number of tests was 6, now 4 refer VSW 312690
#define NOOFTESTS 4
-#ifdef __sparc__
-const int PAGESIZE = 8192;
-#else // __sparc__
const int PAGESIZE = 4096;
-#endif // __sparc__
char *readBuffer;
diff --git a/src/pal/tests/palsuite/file_io/ReadFile/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/ReadFile/test3/CMakeLists.txt
index 26cb675c40..d76a726742 100644
--- a/src/pal/tests/palsuite/file_io/ReadFile/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/ReadFile/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_readfile_test3
add_dependencies(paltest_readfile_test3 coreclrpal)
target_link_libraries(paltest_readfile_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/ReadFile/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/ReadFile/test4/CMakeLists.txt
index bbf12777b6..2550a21173 100644
--- a/src/pal/tests/palsuite/file_io/ReadFile/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/ReadFile/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_readfile_test4
add_dependencies(paltest_readfile_test4 coreclrpal)
target_link_libraries(paltest_readfile_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/RemoveDirectoryA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/RemoveDirectoryA/test1/CMakeLists.txt
index 7a8d1c9d57..31a57791b7 100644
--- a/src/pal/tests/palsuite/file_io/RemoveDirectoryA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/RemoveDirectoryA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_removedirectorya_test1
add_dependencies(paltest_removedirectorya_test1 coreclrpal)
target_link_libraries(paltest_removedirectorya_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/RemoveDirectoryW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/RemoveDirectoryW/test1/CMakeLists.txt
index 6223bc6197..f995a0e1c5 100644
--- a/src/pal/tests/palsuite/file_io/RemoveDirectoryW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/RemoveDirectoryW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_removedirectoryw_test1
add_dependencies(paltest_removedirectoryw_test1 coreclrpal)
target_link_libraries(paltest_removedirectoryw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SearchPathA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SearchPathA/test1/CMakeLists.txt
index c020a86b61..8de22aebdc 100644
--- a/src/pal/tests/palsuite/file_io/SearchPathA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SearchPathA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_searchpatha_test1
add_dependencies(paltest_searchpatha_test1 coreclrpal)
target_link_libraries(paltest_searchpatha_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SearchPathW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SearchPathW/test1/CMakeLists.txt
index a77d875505..d7539a8ac8 100644
--- a/src/pal/tests/palsuite/file_io/SearchPathW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SearchPathW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_searchpathw_test1
add_dependencies(paltest_searchpathw_test1 coreclrpal)
target_link_libraries(paltest_searchpathw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test1/CMakeLists.txt
index 5d0da64ba7..e6fb80f04e 100644
--- a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setcurrentdirectorya_test1
add_dependencies(paltest_setcurrentdirectorya_test1 coreclrpal)
target_link_libraries(paltest_setcurrentdirectorya_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/CMakeLists.txt
index 243e80b9a4..587ea20cf8 100644
--- a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setcurrentdirectorya_test2
add_dependencies(paltest_setcurrentdirectorya_test2 coreclrpal)
target_link_libraries(paltest_setcurrentdirectorya_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test3/CMakeLists.txt
index 8560ff0187..7e2f3ada33 100644
--- a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setcurrentdirectorya_test3
add_dependencies(paltest_setcurrentdirectorya_test3 coreclrpal)
target_link_libraries(paltest_setcurrentdirectorya_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/CMakeLists.txt
index 9149221008..a68f87b5a0 100644
--- a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setcurrentdirectoryw_test1
add_dependencies(paltest_setcurrentdirectoryw_test1 coreclrpal)
target_link_libraries(paltest_setcurrentdirectoryw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test2/CMakeLists.txt
index 455ddc828d..9cc5ba1a55 100644
--- a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setcurrentdirectoryw_test2
add_dependencies(paltest_setcurrentdirectoryw_test2 coreclrpal)
target_link_libraries(paltest_setcurrentdirectoryw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test3/CMakeLists.txt
index 1cb1150a61..06da5a8106 100644
--- a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setcurrentdirectoryw_test3
add_dependencies(paltest_setcurrentdirectoryw_test3 coreclrpal)
target_link_libraries(paltest_setcurrentdirectoryw_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetEndOfFile/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetEndOfFile/test1/CMakeLists.txt
index 3c0fdeec22..5d9e8c0615 100644
--- a/src/pal/tests/palsuite/file_io/SetEndOfFile/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetEndOfFile/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setendoffile_test1
add_dependencies(paltest_setendoffile_test1 coreclrpal)
target_link_libraries(paltest_setendoffile_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetEndOfFile/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetEndOfFile/test2/CMakeLists.txt
index 57afdad2fd..47aa96c18a 100644
--- a/src/pal/tests/palsuite/file_io/SetEndOfFile/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetEndOfFile/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setendoffile_test2
add_dependencies(paltest_setendoffile_test2 coreclrpal)
target_link_libraries(paltest_setendoffile_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetEndOfFile/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetEndOfFile/test3/CMakeLists.txt
index 01575ce09b..87a2a47a61 100644
--- a/src/pal/tests/palsuite/file_io/SetEndOfFile/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetEndOfFile/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setendoffile_test3
add_dependencies(paltest_setendoffile_test3 coreclrpal)
target_link_libraries(paltest_setendoffile_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetEndOfFile/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetEndOfFile/test4/CMakeLists.txt
index 1dc4f68aef..ca5f00fe2b 100644
--- a/src/pal/tests/palsuite/file_io/SetEndOfFile/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetEndOfFile/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setendoffile_test4
add_dependencies(paltest_setendoffile_test4 coreclrpal)
target_link_libraries(paltest_setendoffile_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetEndOfFile/test5/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetEndOfFile/test5/CMakeLists.txt
index 19f87a28af..390ee11f40 100644
--- a/src/pal/tests/palsuite/file_io/SetEndOfFile/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetEndOfFile/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setendoffile_test5
add_dependencies(paltest_setendoffile_test5 coreclrpal)
target_link_libraries(paltest_setendoffile_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileAttributesA/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileAttributesA/test1/CMakeLists.txt
index 638dd5c425..b287ceca67 100644
--- a/src/pal/tests/palsuite/file_io/SetFileAttributesA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileAttributesA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfileattributesa_test1
add_dependencies(paltest_setfileattributesa_test1 coreclrpal)
target_link_libraries(paltest_setfileattributesa_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileAttributesA/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileAttributesA/test2/CMakeLists.txt
index 51bee5af39..ace67dcbd1 100644
--- a/src/pal/tests/palsuite/file_io/SetFileAttributesA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileAttributesA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfileattributesa_test2
add_dependencies(paltest_setfileattributesa_test2 coreclrpal)
target_link_libraries(paltest_setfileattributesa_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileAttributesA/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileAttributesA/test3/CMakeLists.txt
index 4597e1d22c..eb054ac918 100644
--- a/src/pal/tests/palsuite/file_io/SetFileAttributesA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileAttributesA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfileattributesa_test3
add_dependencies(paltest_setfileattributesa_test3 coreclrpal)
target_link_libraries(paltest_setfileattributesa_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileAttributesA/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileAttributesA/test4/CMakeLists.txt
index 1807027123..d20ea5dc04 100644
--- a/src/pal/tests/palsuite/file_io/SetFileAttributesA/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileAttributesA/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfileattributesa_test4
add_dependencies(paltest_setfileattributesa_test4 coreclrpal)
target_link_libraries(paltest_setfileattributesa_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileAttributesW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileAttributesW/test1/CMakeLists.txt
index 825554da74..4d867c1a58 100644
--- a/src/pal/tests/palsuite/file_io/SetFileAttributesW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileAttributesW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfileattributesw_test1
add_dependencies(paltest_setfileattributesw_test1 coreclrpal)
target_link_libraries(paltest_setfileattributesw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileAttributesW/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileAttributesW/test2/CMakeLists.txt
index fda1cec1d7..df1bbfad04 100644
--- a/src/pal/tests/palsuite/file_io/SetFileAttributesW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileAttributesW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfileattributesw_test2
add_dependencies(paltest_setfileattributesw_test2 coreclrpal)
target_link_libraries(paltest_setfileattributesw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileAttributesW/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileAttributesW/test3/CMakeLists.txt
index 1757f88bfe..f4cd725b71 100644
--- a/src/pal/tests/palsuite/file_io/SetFileAttributesW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileAttributesW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfileattributesw_test3
add_dependencies(paltest_setfileattributesw_test3 coreclrpal)
target_link_libraries(paltest_setfileattributesw_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileAttributesW/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileAttributesW/test4/CMakeLists.txt
index d1cfcdd07d..986954b7d8 100644
--- a/src/pal/tests/palsuite/file_io/SetFileAttributesW/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileAttributesW/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfileattributesw_test4
add_dependencies(paltest_setfileattributesw_test4 coreclrpal)
target_link_libraries(paltest_setfileattributesw_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFilePointer/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFilePointer/test1/CMakeLists.txt
index bb09a981e9..c0594aac1a 100644
--- a/src/pal/tests/palsuite/file_io/SetFilePointer/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFilePointer/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfilepointer_test1
add_dependencies(paltest_setfilepointer_test1 coreclrpal)
target_link_libraries(paltest_setfilepointer_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFilePointer/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFilePointer/test2/CMakeLists.txt
index 2e76f00c99..4299b808d7 100644
--- a/src/pal/tests/palsuite/file_io/SetFilePointer/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFilePointer/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfilepointer_test2
add_dependencies(paltest_setfilepointer_test2 coreclrpal)
target_link_libraries(paltest_setfilepointer_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFilePointer/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFilePointer/test3/CMakeLists.txt
index bcc3faca09..04589ea0d7 100644
--- a/src/pal/tests/palsuite/file_io/SetFilePointer/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFilePointer/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfilepointer_test3
add_dependencies(paltest_setfilepointer_test3 coreclrpal)
target_link_libraries(paltest_setfilepointer_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFilePointer/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFilePointer/test4/CMakeLists.txt
index 3fcc4066f2..6fc8116808 100644
--- a/src/pal/tests/palsuite/file_io/SetFilePointer/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFilePointer/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfilepointer_test4
add_dependencies(paltest_setfilepointer_test4 coreclrpal)
target_link_libraries(paltest_setfilepointer_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFilePointer/test5/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFilePointer/test5/CMakeLists.txt
index 3012009e4f..7584349035 100644
--- a/src/pal/tests/palsuite/file_io/SetFilePointer/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFilePointer/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfilepointer_test5
add_dependencies(paltest_setfilepointer_test5 coreclrpal)
target_link_libraries(paltest_setfilepointer_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFilePointer/test6/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFilePointer/test6/CMakeLists.txt
index a376acbe28..3e9f6496cc 100644
--- a/src/pal/tests/palsuite/file_io/SetFilePointer/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFilePointer/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfilepointer_test6
add_dependencies(paltest_setfilepointer_test6 coreclrpal)
target_link_libraries(paltest_setfilepointer_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFilePointer/test7/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFilePointer/test7/CMakeLists.txt
index 2b5c0bbb45..14f4910e3b 100644
--- a/src/pal/tests/palsuite/file_io/SetFilePointer/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFilePointer/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfilepointer_test7
add_dependencies(paltest_setfilepointer_test7 coreclrpal)
target_link_libraries(paltest_setfilepointer_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileTime/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileTime/test1/CMakeLists.txt
index b94bd05d76..e9d8dce966 100644
--- a/src/pal/tests/palsuite/file_io/SetFileTime/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileTime/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfiletime_test1
add_dependencies(paltest_setfiletime_test1 coreclrpal)
target_link_libraries(paltest_setfiletime_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileTime/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileTime/test2/CMakeLists.txt
index 5478aa3703..12ec26c9f8 100644
--- a/src/pal/tests/palsuite/file_io/SetFileTime/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileTime/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfiletime_test2
add_dependencies(paltest_setfiletime_test2 coreclrpal)
target_link_libraries(paltest_setfiletime_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileTime/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileTime/test3/CMakeLists.txt
index 26e178a328..ca0ed659f5 100644
--- a/src/pal/tests/palsuite/file_io/SetFileTime/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileTime/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfiletime_test3
add_dependencies(paltest_setfiletime_test3 coreclrpal)
target_link_libraries(paltest_setfiletime_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/SetFileTime/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/SetFileTime/test4/CMakeLists.txt
index b85a92bf63..432ebe594f 100644
--- a/src/pal/tests/palsuite/file_io/SetFileTime/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/SetFileTime/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setfiletime_test4
add_dependencies(paltest_setfiletime_test4 coreclrpal)
target_link_libraries(paltest_setfiletime_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/WriteFile/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/WriteFile/test1/CMakeLists.txt
index 3d5a735a83..da7bbf7645 100644
--- a/src/pal/tests/palsuite/file_io/WriteFile/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/WriteFile/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_writefile_test1
add_dependencies(paltest_writefile_test1 coreclrpal)
target_link_libraries(paltest_writefile_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/WriteFile/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/WriteFile/test2/CMakeLists.txt
index 3d7d18826a..86530dea7d 100644
--- a/src/pal/tests/palsuite/file_io/WriteFile/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/WriteFile/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_writefile_test2
add_dependencies(paltest_writefile_test2 coreclrpal)
target_link_libraries(paltest_writefile_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/WriteFile/test2/WriteFile.cpp b/src/pal/tests/palsuite/file_io/WriteFile/test2/WriteFile.cpp
index 24c148afb8..9345bc6c48 100644
--- a/src/pal/tests/palsuite/file_io/WriteFile/test2/WriteFile.cpp
+++ b/src/pal/tests/palsuite/file_io/WriteFile/test2/WriteFile.cpp
@@ -20,11 +20,7 @@
char* writeBuffer;
const char* szWritableFile = "Writeable.txt";
const char* szResultsFile = "Results.txt";
-#ifdef __sparc__
-const int PAGESIZE = 8192;
-#else // __sparc__
const int PAGESIZE = 4096;
-#endif // __sparc__
BOOL writeTest(DWORD dwByteCount, DWORD dwBytesWrittenResult, BOOL bResult)
{
diff --git a/src/pal/tests/palsuite/file_io/WriteFile/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/WriteFile/test3/CMakeLists.txt
index bffcf35482..143f537ad9 100644
--- a/src/pal/tests/palsuite/file_io/WriteFile/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/WriteFile/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_writefile_test3
add_dependencies(paltest_writefile_test3 coreclrpal)
target_link_libraries(paltest_writefile_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/WriteFile/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/WriteFile/test4/CMakeLists.txt
index 402a61ac2c..b8e26ee57e 100644
--- a/src/pal/tests/palsuite/file_io/WriteFile/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/WriteFile/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_writefile_test4
add_dependencies(paltest_writefile_test4 coreclrpal)
target_link_libraries(paltest_writefile_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/WriteFile/test5/CMakeLists.txt b/src/pal/tests/palsuite/file_io/WriteFile/test5/CMakeLists.txt
index f1f5037f98..69d7034b89 100644
--- a/src/pal/tests/palsuite/file_io/WriteFile/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/WriteFile/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_writefile_test5
add_dependencies(paltest_writefile_test5 coreclrpal)
target_link_libraries(paltest_writefile_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/errorpathnotfound/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/errorpathnotfound/test1/CMakeLists.txt
index 4c4f6416ce..14bed34639 100644
--- a/src/pal/tests/palsuite/file_io/errorpathnotfound/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/errorpathnotfound/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_errorpathnotfound_test1
add_dependencies(paltest_errorpathnotfound_test1 coreclrpal)
target_link_libraries(paltest_errorpathnotfound_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/errorpathnotfound/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/errorpathnotfound/test2/CMakeLists.txt
index 284933f950..abbf494f07 100644
--- a/src/pal/tests/palsuite/file_io/errorpathnotfound/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/errorpathnotfound/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_errorpathnotfound_test2
add_dependencies(paltest_errorpathnotfound_test2 coreclrpal)
target_link_libraries(paltest_errorpathnotfound_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/errorpathnotfound/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/errorpathnotfound/test3/CMakeLists.txt
index b418c9dbdb..a0e7dd60ef 100644
--- a/src/pal/tests/palsuite/file_io/errorpathnotfound/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/errorpathnotfound/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_errorpathnotfound_test3
add_dependencies(paltest_errorpathnotfound_test3 coreclrpal)
target_link_libraries(paltest_errorpathnotfound_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/errorpathnotfound/test4/CMakeLists.txt b/src/pal/tests/palsuite/file_io/errorpathnotfound/test4/CMakeLists.txt
index e0322dd8e4..00621296d0 100644
--- a/src/pal/tests/palsuite/file_io/errorpathnotfound/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/errorpathnotfound/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_errorpathnotfound_test4
add_dependencies(paltest_errorpathnotfound_test4 coreclrpal)
target_link_libraries(paltest_errorpathnotfound_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/file_io/gettemppatha/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/gettemppatha/test1/CMakeLists.txt
index 9869c9c70f..9465bf2a4e 100644
--- a/src/pal/tests/palsuite/file_io/gettemppatha/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/file_io/gettemppatha/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettemppatha_test1
add_dependencies(paltest_gettemppatha_test1 coreclrpal)
target_link_libraries(paltest_gettemppatha_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test1/CMakeLists.txt
index c38015ea21..c098dad907 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappinga_test1
add_dependencies(paltest_createfilemappinga_test1 coreclrpal)
target_link_libraries(paltest_createfilemappinga_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test3/CMakeLists.txt
index fc152c8161..4e57246487 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappinga_test3
add_dependencies(paltest_createfilemappinga_test3 coreclrpal)
target_link_libraries(paltest_createfilemappinga_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test4/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test4/CMakeLists.txt
index bbb4deaa8b..d5d5c80213 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappinga_test4
add_dependencies(paltest_createfilemappinga_test4 coreclrpal)
target_link_libraries(paltest_createfilemappinga_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test5/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test5/CMakeLists.txt
index b80aa21a42..96cd09f95c 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappinga_test5
add_dependencies(paltest_createfilemappinga_test5 coreclrpal)
target_link_libraries(paltest_createfilemappinga_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test6/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test6/CMakeLists.txt
index 414127aa35..383eb6e623 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappinga_test6
add_dependencies(paltest_createfilemappinga_test6 coreclrpal)
target_link_libraries(paltest_createfilemappinga_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test7/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test7/CMakeLists.txt
index e40a5ad486..8f8a2a454c 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappinga_test7
add_dependencies(paltest_createfilemappinga_test7 coreclrpal)
target_link_libraries(paltest_createfilemappinga_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test8/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test8/CMakeLists.txt
index d2e2007545..5246d0d5fe 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappinga_test8
add_dependencies(paltest_createfilemappinga_test8 coreclrpal)
target_link_libraries(paltest_createfilemappinga_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test9/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test9/CMakeLists.txt
index 3017dc4aa4..b0a8017011 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingA/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappinga_test9
add_dependencies(paltest_createfilemappinga_test9 coreclrpal)
target_link_libraries(paltest_createfilemappinga_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/CreateFileMapping_neg1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/CreateFileMapping_neg1/CMakeLists.txt
index 2d24eca8c8..7cafe0971c 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/CreateFileMapping_neg1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/CreateFileMapping_neg1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_createfilemapping_neg1
add_dependencies(paltest_createfilemappingw_createfilemapping_neg1 coreclrpal)
target_link_libraries(paltest_createfilemappingw_createfilemapping_neg1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test1/CMakeLists.txt
index a2fbfa39af..661fd5d3b5 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_test1
add_dependencies(paltest_createfilemappingw_test1 coreclrpal)
target_link_libraries(paltest_createfilemappingw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test2/CMakeLists.txt
index 8552cc910f..7fac43a4a5 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_test2
add_dependencies(paltest_createfilemappingw_test2 coreclrpal)
target_link_libraries(paltest_createfilemappingw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test3/CMakeLists.txt
index 97fd712350..1e95960679 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_test3
add_dependencies(paltest_createfilemappingw_test3 coreclrpal)
target_link_libraries(paltest_createfilemappingw_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test4/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test4/CMakeLists.txt
index 81f248e335..955678e45e 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_test4
add_dependencies(paltest_createfilemappingw_test4 coreclrpal)
target_link_libraries(paltest_createfilemappingw_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test5/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test5/CMakeLists.txt
index df25e29a4f..6201940df0 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_test5
add_dependencies(paltest_createfilemappingw_test5 coreclrpal)
target_link_libraries(paltest_createfilemappingw_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test6/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test6/CMakeLists.txt
index 852c508020..4f8d838687 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_test6
add_dependencies(paltest_createfilemappingw_test6 coreclrpal)
target_link_libraries(paltest_createfilemappingw_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test7/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test7/CMakeLists.txt
index 68be449aec..154f755721 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_test7
add_dependencies(paltest_createfilemappingw_test7 coreclrpal)
target_link_libraries(paltest_createfilemappingw_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test8/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test8/CMakeLists.txt
index 406331072c..bb9e1cedcc 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_test8
add_dependencies(paltest_createfilemappingw_test8 coreclrpal)
target_link_libraries(paltest_createfilemappingw_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test9/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test9/CMakeLists.txt
index 6d15fea1e6..241e9f02b3 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/CreateFileMappingW/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createfilemappingw_test9
add_dependencies(paltest_createfilemappingw_test9 coreclrpal)
target_link_libraries(paltest_createfilemappingw_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test1/CMakeLists.txt
index beaee835c8..4a8b6daeb5 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test1/CMakeLists.txt
@@ -14,7 +14,5 @@ add_executable(paltest_freelibrary_test1
add_dependencies(paltest_freelibrary_test1 coreclrpal)
target_link_libraries(paltest_freelibrary_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test2/CMakeLists.txt
index 0a5e700ba4..aa57e09265 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/FreeLibrary/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_freelibrary_test2
add_dependencies(paltest_freelibrary_test2 coreclrpal)
target_link_libraries(paltest_freelibrary_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/FreeLibraryAndExitThread/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/FreeLibraryAndExitThread/test1/CMakeLists.txt
index 03bfe06eb3..338aaf774c 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/FreeLibraryAndExitThread/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/FreeLibraryAndExitThread/test1/CMakeLists.txt
@@ -14,7 +14,5 @@ add_executable(paltest_freelibraryandexitthread_test1
add_dependencies(paltest_freelibraryandexitthread_test1 coreclrpal)
target_link_libraries(paltest_freelibraryandexitthread_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test1/CMakeLists.txt
index 9b7a610f0c..27eaec18dc 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getmodulefilenamea_test1
add_dependencies(paltest_getmodulefilenamea_test1 coreclrpal)
target_link_libraries(paltest_getmodulefilenamea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test2/CMakeLists.txt
index 1909be4b42..e908eaf008 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getmodulefilenamea_test2
add_dependencies(paltest_getmodulefilenamea_test2 coreclrpal)
target_link_libraries(paltest_getmodulefilenamea_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test1/CMakeLists.txt
index f3d92b15c9..6afc44e23f 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getmodulefilenamew_test1
add_dependencies(paltest_getmodulefilenamew_test1 coreclrpal)
target_link_libraries(paltest_getmodulefilenamew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test2/CMakeLists.txt
index 7b23e92772..50a4dd8c10 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/GetModuleFileNameW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getmodulefilenamew_test2
add_dependencies(paltest_getmodulefilenamew_test2 coreclrpal)
target_link_libraries(paltest_getmodulefilenamew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/CMakeLists.txt
index 3dedba3cce..a9a985fb03 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/CMakeLists.txt
@@ -14,7 +14,5 @@ add_executable(paltest_getprocaddress_test1
add_dependencies(paltest_getprocaddress_test1 coreclrpal)
target_link_libraries(paltest_getprocaddress_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test2/CMakeLists.txt
index 983c16f12f..0069161250 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test2/CMakeLists.txt
@@ -14,7 +14,5 @@ add_executable(paltest_getprocaddress_test2
add_dependencies(paltest_getprocaddress_test2 coreclrpal)
target_link_libraries(paltest_getprocaddress_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetProcessHeap/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/GetProcessHeap/test1/CMakeLists.txt
index 3e9c725f95..d312ae95ee 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/GetProcessHeap/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/GetProcessHeap/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getprocessheap_test1
add_dependencies(paltest_getprocessheap_test1 coreclrpal)
target_link_libraries(paltest_getprocessheap_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test1/CMakeLists.txt
index b9ce32b35e..69ee8bbe8f 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_heapalloc_test1
add_dependencies(paltest_heapalloc_test1 coreclrpal)
target_link_libraries(paltest_heapalloc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test2/CMakeLists.txt
index 1b9655ddba..f8084adf3c 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_heapalloc_test2
add_dependencies(paltest_heapalloc_test2 coreclrpal)
target_link_libraries(paltest_heapalloc_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test3/CMakeLists.txt
index 1c3845c6e9..81bd6def24 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/HeapAlloc/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_heapalloc_test3
add_dependencies(paltest_heapalloc_test3 coreclrpal)
target_link_libraries(paltest_heapalloc_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/HeapFree/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/HeapFree/test1/CMakeLists.txt
index 004912256c..3f61a2f215 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/HeapFree/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/HeapFree/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_heapfree_test1
add_dependencies(paltest_heapfree_test1 coreclrpal)
target_link_libraries(paltest_heapfree_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test1/CMakeLists.txt
index 17e0127435..acdb24e9ed 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_heaprealloc_test1
add_dependencies(paltest_heaprealloc_test1 coreclrpal)
target_link_libraries(paltest_heaprealloc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test2/CMakeLists.txt
index a9239354ba..c2ce80b40d 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_heaprealloc_test2
add_dependencies(paltest_heaprealloc_test2 coreclrpal)
target_link_libraries(paltest_heaprealloc_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test3/CMakeLists.txt
index 2d82b6efdd..7982b05c68 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_heaprealloc_test3
add_dependencies(paltest_heaprealloc_test3 coreclrpal)
target_link_libraries(paltest_heaprealloc_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test4/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test4/CMakeLists.txt
index 129d8a47cd..f178dacca7 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_heaprealloc_test4
add_dependencies(paltest_heaprealloc_test4 coreclrpal)
target_link_libraries(paltest_heaprealloc_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test5/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test5/CMakeLists.txt
index ed3d390625..2a493525a1 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/HeapReAlloc/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_heaprealloc_test5
add_dependencies(paltest_heaprealloc_test5 coreclrpal)
target_link_libraries(paltest_heaprealloc_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LocalAlloc/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LocalAlloc/test1/CMakeLists.txt
index f74e442d76..07d0c01c05 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LocalAlloc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LocalAlloc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_localalloc_test1
add_dependencies(paltest_localalloc_test1 coreclrpal)
target_link_libraries(paltest_localalloc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test1/CMakeLists.txt
index d92939c7cc..5e7aac4f57 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_localfree_test1
add_dependencies(paltest_localfree_test1 coreclrpal)
target_link_libraries(paltest_localfree_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test2/CMakeLists.txt
index e087b08ad7..1f04c7ab2d 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LocalFree/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_localfree_test2
add_dependencies(paltest_localfree_test2 coreclrpal)
target_link_libraries(paltest_localfree_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test1/CMakeLists.txt
index 1d08065b2a..a9b8869c37 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_lockfile_test1
add_dependencies(paltest_lockfile_test1 coreclrpal)
target_link_libraries(paltest_lockfile_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_lockfile_test1_helper
add_dependencies(paltest_lockfile_test1_helper coreclrpal)
target_link_libraries(paltest_lockfile_test1_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
) \ No newline at end of file
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test2/CMakeLists.txt
index ca5e5faed4..42e88c5999 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_lockfile_test2
add_dependencies(paltest_lockfile_test2 coreclrpal)
target_link_libraries(paltest_lockfile_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test3/CMakeLists.txt
index 117c715084..299e8cf76c 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test3/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_lockfile_test3
add_dependencies(paltest_lockfile_test3 coreclrpal)
target_link_libraries(paltest_lockfile_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_lockfile_test3_helper
add_dependencies(paltest_lockfile_test3_helper coreclrpal)
target_link_libraries(paltest_lockfile_test3_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test4/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test4/CMakeLists.txt
index aee1b1a0be..55cf9c64f7 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_lockfile_test4
add_dependencies(paltest_lockfile_test4 coreclrpal)
target_link_libraries(paltest_lockfile_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test5/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test5/CMakeLists.txt
index 70e3db4561..82a174907e 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test5/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_lockfile_test5
add_dependencies(paltest_lockfile_test5 coreclrpal)
target_link_libraries(paltest_lockfile_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_lockfile_test5_helper
add_dependencies(paltest_lockfile_test5_helper coreclrpal)
target_link_libraries(paltest_lockfile_test5_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test6/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test6/CMakeLists.txt
index 255ecbcc8d..fc5f90113e 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test6/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_lockfile_test6
add_dependencies(paltest_lockfile_test6 coreclrpal)
target_link_libraries(paltest_lockfile_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_lockfile_test6_helper
add_dependencies(paltest_lockfile_test6_helper coreclrpal)
target_link_libraries(paltest_lockfile_test6_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test7/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test7/CMakeLists.txt
index 68a5b9f659..c52bf55ba8 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/LockFile/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_lockfile_test7
add_dependencies(paltest_lockfile_test7 coreclrpal)
target_link_libraries(paltest_lockfile_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test1/CMakeLists.txt
index 01679e5387..bdd664f0ab 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_mapviewoffile_test1
add_dependencies(paltest_mapviewoffile_test1 coreclrpal)
target_link_libraries(paltest_mapviewoffile_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test2/CMakeLists.txt
index 88f3344567..c24ade8ff6 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_mapviewoffile_test2
add_dependencies(paltest_mapviewoffile_test2 coreclrpal)
target_link_libraries(paltest_mapviewoffile_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test3/CMakeLists.txt
index e48ce13408..ce8ca02c40 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_mapviewoffile_test3
add_dependencies(paltest_mapviewoffile_test3 coreclrpal)
target_link_libraries(paltest_mapviewoffile_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test4/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test4/CMakeLists.txt
index 7f6d905212..29a0a1d8b9 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_mapviewoffile_test4
add_dependencies(paltest_mapviewoffile_test4 coreclrpal)
target_link_libraries(paltest_mapviewoffile_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test5/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test5/CMakeLists.txt
index 3911ffa53c..836a3c9612 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_mapviewoffile_test5
add_dependencies(paltest_mapviewoffile_test5 coreclrpal)
target_link_libraries(paltest_mapviewoffile_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test6/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test6/CMakeLists.txt
index 8199981eec..e3a7d09dfa 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_mapviewoffile_test6
add_dependencies(paltest_mapviewoffile_test6 coreclrpal)
target_link_libraries(paltest_mapviewoffile_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test1/CMakeLists.txt
index e4d87d5e0f..5f0362607d 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openfilemappinga_test1
add_dependencies(paltest_openfilemappinga_test1 coreclrpal)
target_link_libraries(paltest_openfilemappinga_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test2/CMakeLists.txt
index 670346fe3b..f8c08e9c98 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openfilemappinga_test2
add_dependencies(paltest_openfilemappinga_test2 coreclrpal)
target_link_libraries(paltest_openfilemappinga_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test3/CMakeLists.txt
index dab27b5c74..7357262e1c 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openfilemappinga_test3
add_dependencies(paltest_openfilemappinga_test3 coreclrpal)
target_link_libraries(paltest_openfilemappinga_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test1/CMakeLists.txt
index b2f4494ad8..25a6b4ca57 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openfilemappingw_test1
add_dependencies(paltest_openfilemappingw_test1 coreclrpal)
target_link_libraries(paltest_openfilemappingw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test2/CMakeLists.txt
index 655fa753f2..f7ca6cf445 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openfilemappingw_test2
add_dependencies(paltest_openfilemappingw_test2 coreclrpal)
target_link_libraries(paltest_openfilemappingw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/CMakeLists.txt
index a7039a1c73..002ea05d02 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openfilemappingw_test3
add_dependencies(paltest_openfilemappingw_test3 coreclrpal)
target_link_libraries(paltest_openfilemappingw_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/ProbeMemory_neg1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/ProbeMemory_neg1/CMakeLists.txt
index e96c92e2ae..cdd8be0267 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/ProbeMemory_neg1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/ProbeMemory_neg1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_probememory_probememory_neg1
add_dependencies(paltest_probememory_probememory_neg1 coreclrpal)
target_link_libraries(paltest_probememory_probememory_neg1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/test1/CMakeLists.txt
index 739ba62284..8103b1ecbc 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/ProbeMemory/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_probememory_test1
add_dependencies(paltest_probememory_test1 coreclrpal)
target_link_libraries(paltest_probememory_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test1/CMakeLists.txt
index 8aa1c80368..12aba80d0a 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_rtlmovememory_test1
add_dependencies(paltest_rtlmovememory_test1 coreclrpal)
target_link_libraries(paltest_rtlmovememory_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test3/CMakeLists.txt
index d292cff494..3773cb79cd 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_rtlmovememory_test3
add_dependencies(paltest_rtlmovememory_test3 coreclrpal)
target_link_libraries(paltest_rtlmovememory_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test4/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test4/CMakeLists.txt
index e8aeb0c0b3..0b4414b08b 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_rtlmovememory_test4
add_dependencies(paltest_rtlmovememory_test4 coreclrpal)
target_link_libraries(paltest_rtlmovememory_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test5/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test5/CMakeLists.txt
index 7f4986eb27..f3c38f2e6a 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/RtlMoveMemory/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_rtlmovememory_test5
add_dependencies(paltest_rtlmovememory_test5 coreclrpal)
target_link_libraries(paltest_rtlmovememory_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test1/CMakeLists.txt
index 8ed46bae43..58b0329d0d 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_unlockfile_test1
add_dependencies(paltest_unlockfile_test1 coreclrpal)
target_link_libraries(paltest_unlockfile_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_unlockfile_test1_helper
add_dependencies(paltest_unlockfile_test1_helper coreclrpal)
target_link_libraries(paltest_unlockfile_test1_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
) \ No newline at end of file
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test2/CMakeLists.txt
index 3033876f80..251d21ba65 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_unlockfile_test2
add_dependencies(paltest_unlockfile_test2 coreclrpal)
target_link_libraries(paltest_unlockfile_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test3/CMakeLists.txt
index d46d7db344..980a9b0f75 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test3/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_unlockfile_test3
add_dependencies(paltest_unlockfile_test3 coreclrpal)
target_link_libraries(paltest_unlockfile_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_unlockfile_test3_helper
add_dependencies(paltest_unlockfile_test3_helper coreclrpal)
target_link_libraries(paltest_unlockfile_test3_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test4/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test4/CMakeLists.txt
index 635a1ca07c..e721b04b6c 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/UnlockFile/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_unlockfile_test4
add_dependencies(paltest_unlockfile_test4 coreclrpal)
target_link_libraries(paltest_unlockfile_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test1/CMakeLists.txt
index 1b8062ff9c..f2402bee8d 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_unmapviewoffile_test1
add_dependencies(paltest_unmapviewoffile_test1 coreclrpal)
target_link_libraries(paltest_unmapviewoffile_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test2/CMakeLists.txt
index 750e446a17..8aa842968f 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/UnmapViewOfFile/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_unmapviewoffile_test2
add_dependencies(paltest_unmapviewoffile_test2 coreclrpal)
target_link_libraries(paltest_unmapviewoffile_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test1/CMakeLists.txt
index f8c0645a4b..9fe73ac005 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test1
add_dependencies(paltest_virtualalloc_test1 coreclrpal)
target_link_libraries(paltest_virtualalloc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test10/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test10/CMakeLists.txt
index 1b66f0d7cb..6ccecb60b5 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test10
add_dependencies(paltest_virtualalloc_test10 coreclrpal)
target_link_libraries(paltest_virtualalloc_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test11/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test11/CMakeLists.txt
index 95e1a06f55..fe848f0c48 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test11/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test11
add_dependencies(paltest_virtualalloc_test11 coreclrpal)
target_link_libraries(paltest_virtualalloc_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test12/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test12/CMakeLists.txt
index 7564f960fe..dc59a294a9 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test12
add_dependencies(paltest_virtualalloc_test12 coreclrpal)
target_link_libraries(paltest_virtualalloc_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test13/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test13/CMakeLists.txt
index a49dcfc81d..04cf162f39 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test13/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test13/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test13
add_dependencies(paltest_virtualalloc_test13 coreclrpal)
target_link_libraries(paltest_virtualalloc_test13
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test14/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test14/CMakeLists.txt
index 180a48e74d..0f18f9722b 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test14/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test14/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test14
add_dependencies(paltest_virtualalloc_test14 coreclrpal)
target_link_libraries(paltest_virtualalloc_test14
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test15/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test15/CMakeLists.txt
index 4ba219472e..56f8be6529 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test15/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test15/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test15
add_dependencies(paltest_virtualalloc_test15 coreclrpal)
target_link_libraries(paltest_virtualalloc_test15
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test16/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test16/CMakeLists.txt
index 1c5f63dce5..9b00d20d8b 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test16/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test16/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test16
add_dependencies(paltest_virtualalloc_test16 coreclrpal)
target_link_libraries(paltest_virtualalloc_test16
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test17/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test17/CMakeLists.txt
index 6523bb9292..07be5b3d37 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test17/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test17/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test17
add_dependencies(paltest_virtualalloc_test17 coreclrpal)
target_link_libraries(paltest_virtualalloc_test17
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test18/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test18/CMakeLists.txt
index 3fe65b4ac8..b6196846c2 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test18/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test18/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test18
add_dependencies(paltest_virtualalloc_test18 coreclrpal)
target_link_libraries(paltest_virtualalloc_test18
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test19/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test19/CMakeLists.txt
index 1795b8ba54..27690a2ebe 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test19/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test19/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test19
add_dependencies(paltest_virtualalloc_test19 coreclrpal)
target_link_libraries(paltest_virtualalloc_test19
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test2/CMakeLists.txt
index 20da178bfc..8637ef84e8 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test2
add_dependencies(paltest_virtualalloc_test2 coreclrpal)
target_link_libraries(paltest_virtualalloc_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test20/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test20/CMakeLists.txt
index 5c23fe2b0d..83cadbe3d7 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test20/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test20/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test20
add_dependencies(paltest_virtualalloc_test20 coreclrpal)
target_link_libraries(paltest_virtualalloc_test20
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test21/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test21/CMakeLists.txt
index 96a3144e8a..437e06435e 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test21/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test21/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test21
add_dependencies(paltest_virtualalloc_test21 coreclrpal)
target_link_libraries(paltest_virtualalloc_test21
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test22/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test22/CMakeLists.txt
index cdad2ca19d..7c6cf0c881 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test22/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test22/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test22
add_dependencies(paltest_virtualalloc_test22 coreclrpal)
target_link_libraries(paltest_virtualalloc_test22
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test3/CMakeLists.txt
index 77822f7862..8ca013c6a5 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test3
add_dependencies(paltest_virtualalloc_test3 coreclrpal)
target_link_libraries(paltest_virtualalloc_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test4/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test4/CMakeLists.txt
index 0e2c448659..3c6c689208 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test4
add_dependencies(paltest_virtualalloc_test4 coreclrpal)
target_link_libraries(paltest_virtualalloc_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test5/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test5/CMakeLists.txt
index 247053ff0f..5646ec57b9 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test5
add_dependencies(paltest_virtualalloc_test5 coreclrpal)
target_link_libraries(paltest_virtualalloc_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test6/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test6/CMakeLists.txt
index d19391d294..1dbadc95af 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test6
add_dependencies(paltest_virtualalloc_test6 coreclrpal)
target_link_libraries(paltest_virtualalloc_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test7/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test7/CMakeLists.txt
index 8c01e041de..e4ccebf5ac 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test7
add_dependencies(paltest_virtualalloc_test7 coreclrpal)
target_link_libraries(paltest_virtualalloc_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test8/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test8/CMakeLists.txt
index db2a7447be..e94e081223 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test8
add_dependencies(paltest_virtualalloc_test8 coreclrpal)
target_link_libraries(paltest_virtualalloc_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test9/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test9/CMakeLists.txt
index 254fc6fcf2..7639adfc9d 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualAlloc/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualalloc_test9
add_dependencies(paltest_virtualalloc_test9 coreclrpal)
target_link_libraries(paltest_virtualalloc_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test1/CMakeLists.txt
index d2319506f2..e16a7ff408 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualfree_test1
add_dependencies(paltest_virtualfree_test1 coreclrpal)
target_link_libraries(paltest_virtualfree_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test2/CMakeLists.txt
index 9a3bc7ac61..576dc05d10 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualfree_test2
add_dependencies(paltest_virtualfree_test2 coreclrpal)
target_link_libraries(paltest_virtualfree_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test3/CMakeLists.txt
index 8484c0fd94..b56ed07140 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualFree/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualfree_test3
add_dependencies(paltest_virtualfree_test3 coreclrpal)
target_link_libraries(paltest_virtualfree_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test1/CMakeLists.txt
index 4283398a6f..2e3d26c744 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualprotect_test1
add_dependencies(paltest_virtualprotect_test1 coreclrpal)
target_link_libraries(paltest_virtualprotect_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test2/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test2/CMakeLists.txt
index aed68fd27f..4064bb5ecb 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualprotect_test2
add_dependencies(paltest_virtualprotect_test2 coreclrpal)
target_link_libraries(paltest_virtualprotect_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test3/CMakeLists.txt
index 70728592ad..11347b92e7 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualprotect_test3
add_dependencies(paltest_virtualprotect_test3 coreclrpal)
target_link_libraries(paltest_virtualprotect_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test4/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test4/CMakeLists.txt
index 5ad64a74eb..ed891093f8 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualprotect_test4
add_dependencies(paltest_virtualprotect_test4 coreclrpal)
target_link_libraries(paltest_virtualprotect_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test6/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test6/CMakeLists.txt
index 78932ef453..5fc3da928b 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualprotect_test6
add_dependencies(paltest_virtualprotect_test6 coreclrpal)
target_link_libraries(paltest_virtualprotect_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test7/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test7/CMakeLists.txt
index caf5ef91f4..8f47e60298 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualProtect/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualprotect_test7
add_dependencies(paltest_virtualprotect_test7 coreclrpal)
target_link_libraries(paltest_virtualprotect_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/VirtualQuery/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/VirtualQuery/test1/CMakeLists.txt
index 17cbdee4a5..16ec598f3d 100644
--- a/src/pal/tests/palsuite/filemapping_memmgt/VirtualQuery/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/filemapping_memmgt/VirtualQuery/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_virtualquery_test1
add_dependencies(paltest_virtualquery_test1 coreclrpal)
target_link_libraries(paltest_virtualquery_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryA/test1/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryA/test1/CMakeLists.txt
index 62b896df65..319dcab325 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_loadlibrarya_test1
add_dependencies(paltest_loadlibrarya_test1 coreclrpal)
target_link_libraries(paltest_loadlibrarya_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryA/test2/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryA/test2/CMakeLists.txt
index 48a4c36cd0..e82b88a47f 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_loadlibrarya_test2
add_dependencies(paltest_loadlibrarya_test2 coreclrpal)
target_link_libraries(paltest_loadlibrarya_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryA/test3/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryA/test3/CMakeLists.txt
index ae05b3560d..084dcbc5f5 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_loadlibrarya_test3
add_dependencies(paltest_loadlibrarya_test3 coreclrpal)
target_link_libraries(paltest_loadlibrarya_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryA/test5/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryA/test5/CMakeLists.txt
index 99915eea2c..7555d26ef8 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryA/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryA/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_loadlibrarya_test5
add_dependencies(paltest_loadlibrarya_test5 coreclrpal)
target_link_libraries(paltest_loadlibrarya_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryA/test6/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryA/test6/CMakeLists.txt
index 0fac8785a8..c256ff567f 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryA/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryA/test6/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_loadlibrarya_test6
add_dependencies(paltest_loadlibrarya_test6 coreclrpal)
target_link_libraries(paltest_loadlibrarya_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_loadlibrarya_test6_dlltest
add_dependencies(paltest_loadlibrarya_test6_dlltest coreclrpal)
target_link_libraries(paltest_loadlibrarya_test6_dlltest
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryA/test7/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryA/test7/CMakeLists.txt
index bb403c6466..154f26f6f6 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryA/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryA/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_loadlibrarya_test7
add_dependencies(paltest_loadlibrarya_test7 coreclrpal)
target_link_libraries(paltest_loadlibrarya_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryA/test8/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryA/test8/CMakeLists.txt
index 9e3449166b..2bdbfb5705 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryA/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryA/test8/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_loadlibrarya_test8
add_dependencies(paltest_loadlibrarya_test8 coreclrpal)
target_link_libraries(paltest_loadlibrarya_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_loadlibrarya_test8_dlltest
add_dependencies(paltest_loadlibrarya_test8_dlltest coreclrpal)
target_link_libraries(paltest_loadlibrarya_test8_dlltest
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryW/test1/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryW/test1/CMakeLists.txt
index 171d1d59d4..569f6f7921 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_loadlibraryw_test1
add_dependencies(paltest_loadlibraryw_test1 coreclrpal)
target_link_libraries(paltest_loadlibraryw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryW/test2/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryW/test2/CMakeLists.txt
index 9873e1332d..e37f19a45c 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_loadlibraryw_test2
add_dependencies(paltest_loadlibraryw_test2 coreclrpal)
target_link_libraries(paltest_loadlibraryw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryW/test3/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryW/test3/CMakeLists.txt
index be758643fa..73638dd626 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_loadlibraryw_test3
add_dependencies(paltest_loadlibraryw_test3 coreclrpal)
target_link_libraries(paltest_loadlibraryw_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/loader/LoadLibraryW/test5/CMakeLists.txt b/src/pal/tests/palsuite/loader/LoadLibraryW/test5/CMakeLists.txt
index 1ca990b514..5ab178d878 100644
--- a/src/pal/tests/palsuite/loader/LoadLibraryW/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/loader/LoadLibraryW/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_loadlibraryw_test5
add_dependencies(paltest_loadlibraryw_test5 coreclrpal)
target_link_libraries(paltest_loadlibraryw_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/CompareStringA/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/CompareStringA/test1/CMakeLists.txt
index 171d5b77e8..2ea8b71aee 100644
--- a/src/pal/tests/palsuite/locale_info/CompareStringA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/CompareStringA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_comparestringa_test1
add_dependencies(paltest_comparestringa_test1 coreclrpal)
target_link_libraries(paltest_comparestringa_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/CompareStringW/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/CompareStringW/test1/CMakeLists.txt
index 15a7fe7685..8f283a55db 100644
--- a/src/pal/tests/palsuite/locale_info/CompareStringW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/CompareStringW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_comparestringw_test1
add_dependencies(paltest_comparestringw_test1 coreclrpal)
target_link_libraries(paltest_comparestringw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetACP/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetACP/test1/CMakeLists.txt
index cf4431ea94..be766d7e8e 100644
--- a/src/pal/tests/palsuite/locale_info/GetACP/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetACP/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getacp_test1
add_dependencies(paltest_getacp_test1 coreclrpal)
target_link_libraries(paltest_getacp_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetCPInfo/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetCPInfo/test1/CMakeLists.txt
index b4cf017c2b..e8c9077598 100644
--- a/src/pal/tests/palsuite/locale_info/GetCPInfo/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetCPInfo/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcpinfo_test1
add_dependencies(paltest_getcpinfo_test1 coreclrpal)
target_link_libraries(paltest_getcpinfo_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetCPInfo/test2/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetCPInfo/test2/CMakeLists.txt
index b366f3ce8d..3ce744e942 100644
--- a/src/pal/tests/palsuite/locale_info/GetCPInfo/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetCPInfo/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcpinfo_test2
add_dependencies(paltest_getcpinfo_test2 coreclrpal)
target_link_libraries(paltest_getcpinfo_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetCPInfo/test3/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetCPInfo/test3/CMakeLists.txt
index 032dd00290..fe17e33578 100644
--- a/src/pal/tests/palsuite/locale_info/GetCPInfo/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetCPInfo/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcpinfo_test3
add_dependencies(paltest_getcpinfo_test3 coreclrpal)
target_link_libraries(paltest_getcpinfo_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test1/CMakeLists.txt
index 4f685cb8a4..ea574a8bdb 100644
--- a/src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getlocaleinfow_test1
add_dependencies(paltest_getlocaleinfow_test1 coreclrpal)
target_link_libraries(paltest_getlocaleinfow_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test2/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test2/CMakeLists.txt
index 7851b36b96..10d81bcad7 100644
--- a/src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetLocaleInfoW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getlocaleinfow_test2
add_dependencies(paltest_getlocaleinfow_test2 coreclrpal)
target_link_libraries(paltest_getlocaleinfow_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetStringTypeExW/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetStringTypeExW/test1/CMakeLists.txt
index e68621681a..9d6e4e2be8 100644
--- a/src/pal/tests/palsuite/locale_info/GetStringTypeExW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetStringTypeExW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getstringtypeexw_test1
add_dependencies(paltest_getstringtypeexw_test1 coreclrpal)
target_link_libraries(paltest_getstringtypeexw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetStringTypeExW/test2/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetStringTypeExW/test2/CMakeLists.txt
index e37b7495d0..7f90601ef9 100644
--- a/src/pal/tests/palsuite/locale_info/GetStringTypeExW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetStringTypeExW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getstringtypeexw_test2
add_dependencies(paltest_getstringtypeexw_test2 coreclrpal)
target_link_libraries(paltest_getstringtypeexw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetSystemDefaultLangID/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetSystemDefaultLangID/test1/CMakeLists.txt
index e34e1837e0..acbe40d847 100644
--- a/src/pal/tests/palsuite/locale_info/GetSystemDefaultLangID/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetSystemDefaultLangID/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getsystemdefaultlangid_test1
add_dependencies(paltest_getsystemdefaultlangid_test1 coreclrpal)
target_link_libraries(paltest_getsystemdefaultlangid_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetThreadLocale/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetThreadLocale/test1/CMakeLists.txt
index 8abbd822c2..b6d0f270d8 100644
--- a/src/pal/tests/palsuite/locale_info/GetThreadLocale/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetThreadLocale/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getthreadlocale_test1
add_dependencies(paltest_getthreadlocale_test1 coreclrpal)
target_link_libraries(paltest_getthreadlocale_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetTimeZoneInformation/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetTimeZoneInformation/test1/CMakeLists.txt
index 8bf0a6ca23..d62a4c22aa 100644
--- a/src/pal/tests/palsuite/locale_info/GetTimeZoneInformation/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetTimeZoneInformation/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettimezoneinformation_test1
add_dependencies(paltest_gettimezoneinformation_test1 coreclrpal)
target_link_libraries(paltest_gettimezoneinformation_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetUserDefaultLCID/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetUserDefaultLCID/test1/CMakeLists.txt
index b6f08b1f7d..256d818778 100644
--- a/src/pal/tests/palsuite/locale_info/GetUserDefaultLCID/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetUserDefaultLCID/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getuserdefaultlcid_test1
add_dependencies(paltest_getuserdefaultlcid_test1 coreclrpal)
target_link_libraries(paltest_getuserdefaultlcid_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/GetUserDefaultLangID/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/GetUserDefaultLangID/test1/CMakeLists.txt
index 8fc795a52b..ac3c78a2bd 100644
--- a/src/pal/tests/palsuite/locale_info/GetUserDefaultLangID/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/GetUserDefaultLangID/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getuserdefaultlangid_test1
add_dependencies(paltest_getuserdefaultlangid_test1 coreclrpal)
target_link_libraries(paltest_getuserdefaultlangid_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/IsDBCSLeadByte/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/IsDBCSLeadByte/test1/CMakeLists.txt
index e9b22dcfc5..2264d3e8f7 100644
--- a/src/pal/tests/palsuite/locale_info/IsDBCSLeadByte/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/IsDBCSLeadByte/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isdbcsleadbyte_test1
add_dependencies(paltest_isdbcsleadbyte_test1 coreclrpal)
target_link_libraries(paltest_isdbcsleadbyte_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/IsDBCSLeadByteEx/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/IsDBCSLeadByteEx/test1/CMakeLists.txt
index f3a232b143..3109b71737 100644
--- a/src/pal/tests/palsuite/locale_info/IsDBCSLeadByteEx/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/IsDBCSLeadByteEx/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isdbcsleadbyteex_test1
add_dependencies(paltest_isdbcsleadbyteex_test1 coreclrpal)
target_link_libraries(paltest_isdbcsleadbyteex_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/IsValidCodePage/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/IsValidCodePage/test1/CMakeLists.txt
index ae12b37950..a90784818a 100644
--- a/src/pal/tests/palsuite/locale_info/IsValidCodePage/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/IsValidCodePage/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isvalidcodepage_test1
add_dependencies(paltest_isvalidcodepage_test1 coreclrpal)
target_link_libraries(paltest_isvalidcodepage_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/IsValidCodePage/test2/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/IsValidCodePage/test2/CMakeLists.txt
index 6eeff25d4d..5cf6d4c7ae 100644
--- a/src/pal/tests/palsuite/locale_info/IsValidCodePage/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/IsValidCodePage/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isvalidcodepage_test2
add_dependencies(paltest_isvalidcodepage_test2 coreclrpal)
target_link_libraries(paltest_isvalidcodepage_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/IsValidLocale/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/IsValidLocale/test1/CMakeLists.txt
index 27d61693b0..f9e1c884a0 100644
--- a/src/pal/tests/palsuite/locale_info/IsValidLocale/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/IsValidLocale/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isvalidlocale_test1
add_dependencies(paltest_isvalidlocale_test1 coreclrpal)
target_link_libraries(paltest_isvalidlocale_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test1/CMakeLists.txt
index 7bf79e36a7..f400843bd2 100644
--- a/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_multibytetowidechar_test1
add_dependencies(paltest_multibytetowidechar_test1 coreclrpal)
target_link_libraries(paltest_multibytetowidechar_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test2/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test2/CMakeLists.txt
index b3e3f64c5c..c51cfd6469 100644
--- a/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_multibytetowidechar_test2
add_dependencies(paltest_multibytetowidechar_test2 coreclrpal)
target_link_libraries(paltest_multibytetowidechar_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test3/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test3/CMakeLists.txt
index c6eac9bd60..386425f90f 100644
--- a/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_multibytetowidechar_test3
add_dependencies(paltest_multibytetowidechar_test3 coreclrpal)
target_link_libraries(paltest_multibytetowidechar_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test4/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test4/CMakeLists.txt
index c9c92952f2..dc119abd08 100644
--- a/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/MultiByteToWideChar/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_multibytetowidechar_test4
add_dependencies(paltest_multibytetowidechar_test4 coreclrpal)
target_link_libraries(paltest_multibytetowidechar_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
) \ No newline at end of file
diff --git a/src/pal/tests/palsuite/locale_info/SetThreadLocale/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/SetThreadLocale/test1/CMakeLists.txt
index 5ac7433c98..7b0cde4a14 100644
--- a/src/pal/tests/palsuite/locale_info/SetThreadLocale/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/SetThreadLocale/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setthreadlocale_test1
add_dependencies(paltest_setthreadlocale_test1 coreclrpal)
target_link_libraries(paltest_setthreadlocale_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test1/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test1/CMakeLists.txt
index 07dae640f1..913cccc8e1 100644
--- a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_widechartomultibyte_test1
add_dependencies(paltest_widechartomultibyte_test1 coreclrpal)
target_link_libraries(paltest_widechartomultibyte_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test2/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test2/CMakeLists.txt
index 99c64afa2a..305348cd12 100644
--- a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_widechartomultibyte_test2
add_dependencies(paltest_widechartomultibyte_test2 coreclrpal)
target_link_libraries(paltest_widechartomultibyte_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test3/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test3/CMakeLists.txt
index 70dabead6f..f5a8bf9774 100644
--- a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_widechartomultibyte_test3
add_dependencies(paltest_widechartomultibyte_test3 coreclrpal)
target_link_libraries(paltest_widechartomultibyte_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test4/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test4/CMakeLists.txt
index 8839c19183..bea8e1aacf 100644
--- a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_widechartomultibyte_test4
add_dependencies(paltest_widechartomultibyte_test4 coreclrpal)
target_link_libraries(paltest_widechartomultibyte_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test5/CMakeLists.txt b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test5/CMakeLists.txt
index e00657879d..51851e45d6 100644
--- a/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/locale_info/WideCharToMultiByte/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_widechartomultibyte_test5
add_dependencies(paltest_widechartomultibyte_test5 coreclrpal)
target_link_libraries(paltest_widechartomultibyte_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
) \ No newline at end of file
diff --git a/src/pal/tests/palsuite/miscellaneous/CharNextA/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/CharNextA/test1/CMakeLists.txt
index 23df52b430..aa7abfbee7 100644
--- a/src/pal/tests/palsuite/miscellaneous/CharNextA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/CharNextA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_charnexta_test1
add_dependencies(paltest_charnexta_test1 coreclrpal)
target_link_libraries(paltest_charnexta_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/CharNextA/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/CharNextA/test2/CMakeLists.txt
index 5f089e963c..3339e097d0 100644
--- a/src/pal/tests/palsuite/miscellaneous/CharNextA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/CharNextA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_charnexta_test2
add_dependencies(paltest_charnexta_test2 coreclrpal)
target_link_libraries(paltest_charnexta_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/CharNextExA/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/CharNextExA/test1/CMakeLists.txt
index ae1433f089..959a661b7a 100644
--- a/src/pal/tests/palsuite/miscellaneous/CharNextExA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/CharNextExA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_charnextexa_test1
add_dependencies(paltest_charnextexa_test1 coreclrpal)
target_link_libraries(paltest_charnextexa_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/CharNextExA/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/CharNextExA/test2/CMakeLists.txt
index 1c81d1f9a4..7c0427127c 100644
--- a/src/pal/tests/palsuite/miscellaneous/CharNextExA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/CharNextExA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_charnextexa_test2
add_dependencies(paltest_charnextexa_test2 coreclrpal)
target_link_libraries(paltest_charnextexa_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/CloseHandle/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/CloseHandle/test1/CMakeLists.txt
index 78bb701959..f35d6fb10e 100644
--- a/src/pal/tests/palsuite/miscellaneous/CloseHandle/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/CloseHandle/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_closehandle_test1
add_dependencies(paltest_closehandle_test1 coreclrpal)
target_link_libraries(paltest_closehandle_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/CloseHandle/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/CloseHandle/test2/CMakeLists.txt
index 18350f20ad..691d44b82a 100644
--- a/src/pal/tests/palsuite/miscellaneous/CloseHandle/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/CloseHandle/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_closehandle_test2
add_dependencies(paltest_closehandle_test2 coreclrpal)
target_link_libraries(paltest_closehandle_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/CreatePipe/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/CreatePipe/test1/CMakeLists.txt
index 15a0f572bb..494c948aba 100644
--- a/src/pal/tests/palsuite/miscellaneous/CreatePipe/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/CreatePipe/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createpipe_test1
add_dependencies(paltest_createpipe_test1 coreclrpal)
target_link_libraries(paltest_createpipe_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/FlushInstructionCache/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/FlushInstructionCache/test1/CMakeLists.txt
index 47ee4b0abd..57b925c8a7 100644
--- a/src/pal/tests/palsuite/miscellaneous/FlushInstructionCache/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/FlushInstructionCache/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_flushinstructioncache_test1
add_dependencies(paltest_flushinstructioncache_test1 coreclrpal)
target_link_libraries(paltest_flushinstructioncache_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test1/CMakeLists.txt
index df91482855..f0e366ec86 100644
--- a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_formatmessagew_test1
add_dependencies(paltest_formatmessagew_test1 coreclrpal)
target_link_libraries(paltest_formatmessagew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/CMakeLists.txt
index 818649aac7..564830acdf 100644
--- a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_formatmessagew_test2
add_dependencies(paltest_formatmessagew_test2 coreclrpal)
target_link_libraries(paltest_formatmessagew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/test.cpp b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/test.cpp
index 6c2d80b3f4..d45dc92f04 100644
--- a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/test.cpp
+++ b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/test.cpp
@@ -460,7 +460,7 @@ int test11(int num, ...)
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
Trace("Testing for 64 Bit Platforms \n");
if(memcmp(OutBuffer,
convert("Pal 00000000000123AB and foo Testing"),
diff --git a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test3/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test3/CMakeLists.txt
index 516d4bcc9a..70b039bf03 100644
--- a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_formatmessagew_test3
add_dependencies(paltest_formatmessagew_test3 coreclrpal)
target_link_libraries(paltest_formatmessagew_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test4/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test4/CMakeLists.txt
index 642727c6dc..c4ecccf7d0 100644
--- a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_formatmessagew_test4
add_dependencies(paltest_formatmessagew_test4 coreclrpal)
target_link_libraries(paltest_formatmessagew_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test5/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test5/CMakeLists.txt
index bae113475d..2d4e2a2c44 100644
--- a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_formatmessagew_test5
add_dependencies(paltest_formatmessagew_test5 coreclrpal)
target_link_libraries(paltest_formatmessagew_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test6/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test6/CMakeLists.txt
index f403cba0f4..33ca130e26 100644
--- a/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_formatmessagew_test6
add_dependencies(paltest_formatmessagew_test6 coreclrpal)
target_link_libraries(paltest_formatmessagew_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test1/CMakeLists.txt
index 206707efa6..081df32533 100644
--- a/src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_freeenvironmentstringsw_test1
add_dependencies(paltest_freeenvironmentstringsw_test1 coreclrpal)
target_link_libraries(paltest_freeenvironmentstringsw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test2/CMakeLists.txt
index d8197d1c90..7a69e103fa 100644
--- a/src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/FreeEnvironmentStringsW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_freeenvironmentstringsw_test2
add_dependencies(paltest_freeenvironmentstringsw_test2 coreclrpal)
target_link_libraries(paltest_freeenvironmentstringsw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test1/CMakeLists.txt
index 92cabba428..11c278015c 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcalendarinfow_test1
add_dependencies(paltest_getcalendarinfow_test1 coreclrpal)
target_link_libraries(paltest_getcalendarinfow_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test2/CMakeLists.txt
index 0cfc9679e7..2abf2901c0 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetCalendarInfoW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcalendarinfow_test2
add_dependencies(paltest_getcalendarinfow_test2 coreclrpal)
target_link_libraries(paltest_getcalendarinfow_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetCommandLineW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetCommandLineW/test1/CMakeLists.txt
index d15b84a59e..6d00bf85c3 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetCommandLineW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetCommandLineW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcommandlinew_test1
add_dependencies(paltest_getcommandlinew_test1 coreclrpal)
target_link_libraries(paltest_getcommandlinew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetComputerNameW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetComputerNameW/test1/CMakeLists.txt
index 0ce9ac07b7..fe5b72071e 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetComputerNameW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetComputerNameW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcomputernamew_test1
add_dependencies(paltest_getcomputernamew_test1 coreclrpal)
target_link_libraries(paltest_getcomputernamew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg1/CMakeLists.txt
index 04ef85b74d..9d9512ce78 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getdateformatw_getdateformatw_neg1
add_dependencies(paltest_getdateformatw_getdateformatw_neg1 coreclrpal)
target_link_libraries(paltest_getdateformatw_getdateformatw_neg1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg2/CMakeLists.txt
index fcd56fc7f2..dc4215ea57 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/GetDateFormatW_neg2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getdateformatw_getdateformatw_neg2
add_dependencies(paltest_getdateformatw_getdateformatw_neg2 coreclrpal)
target_link_libraries(paltest_getdateformatw_getdateformatw_neg2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/test1/CMakeLists.txt
index bd86370611..b392d02ca4 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetDateFormatW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getdateformatw_test1
add_dependencies(paltest_getdateformatw_test1 coreclrpal)
target_link_libraries(paltest_getdateformatw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentStringsW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentStringsW/test1/CMakeLists.txt
index 3a745fdbd3..378390b150 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentStringsW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentStringsW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentstringsw_test1
add_dependencies(paltest_getenvironmentstringsw_test1 coreclrpal)
target_link_libraries(paltest_getenvironmentstringsw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test1/CMakeLists.txt
index 0721fd60b7..2af3c9de8a 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablea_test1
add_dependencies(paltest_getenvironmentvariablea_test1 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test2/CMakeLists.txt
index a9be983369..64da266af2 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablea_test2
add_dependencies(paltest_getenvironmentvariablea_test2 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablea_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test3/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test3/CMakeLists.txt
index 1c35eba54d..65ff937365 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablea_test3
add_dependencies(paltest_getenvironmentvariablea_test3 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablea_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test4/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test4/CMakeLists.txt
index 331ea8ca6b..df7697beff 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablea_test4
add_dependencies(paltest_getenvironmentvariablea_test4 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablea_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test5/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test5/CMakeLists.txt
index 69bedf4947..8e6e26363e 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablea_test5
add_dependencies(paltest_getenvironmentvariablea_test5 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablea_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test6/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test6/CMakeLists.txt
index 38c186740f..ac25f769fd 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableA/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablea_test6
add_dependencies(paltest_getenvironmentvariablea_test6 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablea_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test1/CMakeLists.txt
index a3cb878ef4..e87cbf4da0 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablew_test1
add_dependencies(paltest_getenvironmentvariablew_test1 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test2/CMakeLists.txt
index 2c6ec6247e..2e6f61a4ba 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablew_test2
add_dependencies(paltest_getenvironmentvariablew_test2 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test3/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test3/CMakeLists.txt
index 6af382b6cd..70151c419d 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablew_test3
add_dependencies(paltest_getenvironmentvariablew_test3 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablew_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test4/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test4/CMakeLists.txt
index 674b187fa7..56de6a1cc2 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablew_test4
add_dependencies(paltest_getenvironmentvariablew_test4 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablew_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test5/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test5/CMakeLists.txt
index 71e974703b..9d73780c97 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablew_test5
add_dependencies(paltest_getenvironmentvariablew_test5 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablew_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test6/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test6/CMakeLists.txt
index 8771ab0cc8..f331a89742 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getenvironmentvariablew_test6
add_dependencies(paltest_getenvironmentvariablew_test6 coreclrpal)
target_link_libraries(paltest_getenvironmentvariablew_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetLastError/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetLastError/test1/CMakeLists.txt
index 3c851c7260..1bf6407318 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetLastError/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetLastError/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getlasterror_test1
add_dependencies(paltest_getlasterror_test1 coreclrpal)
target_link_libraries(paltest_getlasterror_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetSystemInfo/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetSystemInfo/test1/CMakeLists.txt
index 9419517128..3fd07c4ded 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetSystemInfo/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetSystemInfo/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getsysteminfo_test1
add_dependencies(paltest_getsysteminfo_test1 coreclrpal)
target_link_libraries(paltest_getsysteminfo_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetTickCount/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetTickCount/test1/CMakeLists.txt
index f7be23bc0b..fcf7cb4c03 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetTickCount/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetTickCount/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_gettickcount_test1
add_dependencies(paltest_gettickcount_test1 coreclrpal)
target_link_libraries(paltest_gettickcount_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetUserNameW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetUserNameW/test1/CMakeLists.txt
index 8ed7ace073..6527b83d13 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetUserNameW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetUserNameW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getusernamew_test1
add_dependencies(paltest_getusernamew_test1 coreclrpal)
target_link_libraries(paltest_getusernamew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetVersionExA/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetVersionExA/test1/CMakeLists.txt
index 2cb305f22b..1e512f3c2f 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetVersionExA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetVersionExA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getversionexa_test1
add_dependencies(paltest_getversionexa_test1 coreclrpal)
target_link_libraries(paltest_getversionexa_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/GetVersionExW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/GetVersionExW/test1/CMakeLists.txt
index 09494240cc..4ef820c479 100644
--- a/src/pal/tests/palsuite/miscellaneous/GetVersionExW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/GetVersionExW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getversionexw_test1
add_dependencies(paltest_getversionexw_test1 coreclrpal)
target_link_libraries(paltest_getversionexw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/CMakeLists.txt
index e5ba709c11..47af14e0fc 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedexchangeadd_test1
add_dependencies(paltest_interlockedexchangeadd_test1 coreclrpal)
target_link_libraries(paltest_interlockedexchangeadd_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/test.cpp b/src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/test.cpp
index ca9e5bb5bf..a68a1f609e 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/test.cpp
+++ b/src/pal/tests/palsuite/miscellaneous/InterLockedExchangeAdd/test1/test.cpp
@@ -36,7 +36,7 @@ int __cdecl main(int argc, char *argv[])
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
ptrValue = (LONG *) malloc(sizeof(LONG));
if(ptrValue == NULL)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedBit/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedBit/test1/CMakeLists.txt
index a70802ea2d..2fe88a3fad 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedBit/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedBit/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedbit_test1
add_dependencies(paltest_interlockedbit_test1 coreclrpal)
target_link_libraries(paltest_interlockedbit_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedBit/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedBit/test2/CMakeLists.txt
index 6b50a755fe..3a6854b84b 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedBit/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedBit/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedbit_test2
add_dependencies(paltest_interlockedbit_test2 coreclrpal)
target_link_libraries(paltest_interlockedbit_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test1/CMakeLists.txt
index d9e867256a..e62ba779dc 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedcompareexchange_test1
add_dependencies(paltest_interlockedcompareexchange_test1 coreclrpal)
target_link_libraries(paltest_interlockedcompareexchange_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test2/CMakeLists.txt
index 038d375273..ef7d64f724 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedcompareexchange_test2
add_dependencies(paltest_interlockedcompareexchange_test2 coreclrpal)
target_link_libraries(paltest_interlockedcompareexchange_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/CMakeLists.txt
index 722603eb4a..7778acd397 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedcompareexchange64_test1
add_dependencies(paltest_interlockedcompareexchange64_test1 coreclrpal)
target_link_libraries(paltest_interlockedcompareexchange64_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/test.cpp b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/test.cpp
index 56430e60cf..bb5981c65b 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/test.cpp
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test1/test.cpp
@@ -42,7 +42,7 @@ int __cdecl main(int argc, char *argv[]) {
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
/* Compare START_VALUE with BaseVariableToManipulate, they're equal,
so exchange
*/
@@ -55,18 +55,10 @@ int __cdecl main(int argc, char *argv[]) {
/* Exchanged, these should be equal now */
if(BaseVariableToManipulate != ValueToExchange)
{
-#ifdef PLATFORM_UNIX
Fail("ERROR: A successful compare and exchange should have occurred, "
"making the variable have the value of %ll, as opposed to the "
"current value of %ll.",
ValueToExchange,BaseVariableToManipulate);
-#else
- Fail("ERROR: A successful compare and exchange should have occurred, "
- "making the variable have the value of %I64, as opposed to the "
- "current value of %d.",
- ValueToExchange,BaseVariableToManipulate);
-
-#endif
}
/* Check to make sure it returns the original number which
@@ -74,15 +66,9 @@ int __cdecl main(int argc, char *argv[]) {
*/
if(TheReturn != START_VALUE)
{
-#ifdef PLATFORM_UNIX
Fail("ERROR: The return value after the first exchange should be the "
"former value of the variable, which was %ll, but it is now %ll.",
START_VALUE,TheReturn);
-#else
- Fail("ERROR: The return value after the first exchange should be the "
- "former value of the variable, which was %I64, but it is now %I64.",
- START_VALUE,TheReturn);
-#endif
}
@@ -103,20 +89,13 @@ int __cdecl main(int argc, char *argv[]) {
if(BaseVariableToManipulate != TempValue)
{
-#ifdef PLATFORM_UNIX
Fail("ERROR: An attempted exchange should have failed due to "
"the compare failing. But, it seems to have succeeded. The "
"value should be %ll but is %ll in this case.",
TempValue,BaseVariableToManipulate);
-#else
- Fail("ERROR: An attempted exchange should have failed due to "
- "the compare failing. But, it seems to have succeeded. The "
- "value should be %I64 but is %I64 in this case.",
- TempValue,BaseVariableToManipulate);
-#endif
}
-#endif //if defined(BIT64) && defined(PLATFORM_UNIX)
+#endif //if defined(BIT64)
PAL_Terminate();
return PASS;
}
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/CMakeLists.txt
index f052ca0b27..0f8e390ac5 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedcompareexchange64_test2
add_dependencies(paltest_interlockedcompareexchange64_test2 coreclrpal)
target_link_libraries(paltest_interlockedcompareexchange64_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/test.cpp b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/test.cpp
index 2440543631..b2b0b6337c 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/test.cpp
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchange64/test2/test.cpp
@@ -47,7 +47,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
- #if defined(BIT64) && defined(PLATFORM_UNIX)
+ #if defined(BIT64)
//Create MAX_THREADS threads that will operate on the global counter
for (i=0;i<MAX_THREADS;i++)
@@ -84,7 +84,7 @@ int __cdecl main(int argc, char *argv[])
Fail("Test Case Failed: InterlockedDecrement \n");
}
- #endif //defined(BIT64) && defined(PLATFORM_UNIX)
+ #endif //defined(BIT64)
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchangePointer/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchangePointer/test1/CMakeLists.txt
index 0c48c4e296..3bd17c20af 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchangePointer/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedCompareExchangePointer/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedcompareexchangepointer_test1
add_dependencies(paltest_interlockedcompareexchangepointer_test1 coreclrpal)
target_link_libraries(paltest_interlockedcompareexchangepointer_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test1/CMakeLists.txt
index 6cd307d2e8..54004bc9a7 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockeddecrement_test1
add_dependencies(paltest_interlockeddecrement_test1 coreclrpal)
target_link_libraries(paltest_interlockeddecrement_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test2/CMakeLists.txt
index 331d89d5d6..cf049672ed 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockeddecrement_test2
add_dependencies(paltest_interlockeddecrement_test2 coreclrpal)
target_link_libraries(paltest_interlockeddecrement_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/CMakeLists.txt
index 727a328d07..39476869bf 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockeddecrement64_test1
add_dependencies(paltest_interlockeddecrement64_test1 coreclrpal)
target_link_libraries(paltest_interlockeddecrement64_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/test.cpp b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/test.cpp
index 326587d9a1..ccdb976256 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/test.cpp
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test1/test.cpp
@@ -36,7 +36,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
/* Compare START_VALUE with BaseVariableToManipulate, they're equal,
so exchange
*/
@@ -46,27 +46,17 @@ int __cdecl main(int argc, char *argv[])
/* Decremented twice, it should be -2 now */
if(TheValue != -2)
{
-#ifdef PLATFORM_UNIX
Fail("ERROR: After being decremented twice, the value should be -2, "
"but it is really %ll.",TheValue);
-#else
- Fail("ERROR: After being decremented twice, the value should be -2, "
- "but it is really %I64.",TheValue);
-#endif
}
/* Check to make sure it returns itself */
if(TheReturn != TheValue)
{
-#ifdef PLATFORM_UNIX
Fail("ERROR: The function should have returned the new value of %d "
"but instead returned %ll.",TheValue,TheReturn);
-#else
- Fail("ERROR: After being decremented twice, the value should be -2, "
- "but it is really %I64.",TheValue);
-#endif
}
-#endif //defined(BIT64) && defined(PLATFORM_UNIX)
+#endif //defined(BIT64)
PAL_Terminate();
return PASS;
}
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/CMakeLists.txt
index ecea6399a7..0031928b52 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockeddecrement64_test2
add_dependencies(paltest_interlockeddecrement64_test2 coreclrpal)
target_link_libraries(paltest_interlockeddecrement64_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/test.cpp b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/test.cpp
index fa748d538d..98560a6680 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/test.cpp
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedDecrement64/test2/test.cpp
@@ -40,7 +40,7 @@ int __cdecl main(int argc, char *argv[])
return FAIL;
}
- #if defined(BIT64) && defined(PLATFORM_UNIX)
+ #if defined(BIT64)
//Create MAX_THREADS threads that will operate on the global counter
for (i=0;i<MAX_THREADS;i++)
@@ -79,7 +79,7 @@ int __cdecl main(int argc, char *argv[])
Fail("Test Case Failed: InterlockedDecrement \n");
}
-#endif //defined(BIT64) && defined(PLATFORM_UNIX)
+#endif //defined(BIT64)
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange/test1/CMakeLists.txt
index a1a7f862ed..d6c0dbf883 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedexchange_test1
add_dependencies(paltest_interlockedexchange_test1 coreclrpal)
target_link_libraries(paltest_interlockedexchange_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/CMakeLists.txt
index 3f4cd5e058..5a3e8c4ff2 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedexchange64_test1
add_dependencies(paltest_interlockedexchange64_test1 coreclrpal)
target_link_libraries(paltest_interlockedexchange64_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/test.cpp b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/test.cpp
index 12e8b50580..3dd1cddd91 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/test.cpp
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/test.cpp
@@ -39,7 +39,7 @@ int __cdecl main(int argc, char *argv[]) {
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
TheReturn = InterlockedExchange64(&TheValue,NewValue);
@@ -48,13 +48,8 @@ int __cdecl main(int argc, char *argv[]) {
*/
if(TheValue != NewValue)
{
-#ifdef PLATFORM_UNIX
Fail("ERROR: The value which was exchanged should now be %ll, but "
"instead it is %ll.",NewValue,TheValue);
-#else
- Fail("ERROR: The value which was exchanged should now be %I64, but "
- "instead it is %I64.",NewValue,TheValue);
-#endif
}
/* Check to make sure it returns the origional number which 'TheValue' was
@@ -63,18 +58,12 @@ int __cdecl main(int argc, char *argv[]) {
if(TheReturn != START_VALUE)
{
-#ifdef PLATFORM_UNIX
Fail("ERROR: The value returned should be the value before the "
"exchange happened, which was %ll, but %ll was returned.",
START_VALUE,TheReturn);
-#else
- Fail("ERROR: The value returned should be the value before the "
- "exchange happened, which was %I64, but %I64 was returned.",
- START_VALUE,TheReturn);
-#endif
}
-#endif //defined(BIT64) && defined(_IA64_)
+#endif // BIT64
PAL_Terminate();
return PASS;
}
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedExchangePointer/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedExchangePointer/test1/CMakeLists.txt
index b0858963a0..cbc30c1443 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedExchangePointer/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedExchangePointer/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedexchangepointer_test1
add_dependencies(paltest_interlockedexchangepointer_test1 coreclrpal)
target_link_libraries(paltest_interlockedexchangepointer_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test1/CMakeLists.txt
index f87dc72281..8689e5c379 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedincrement_test1
add_dependencies(paltest_interlockedincrement_test1 coreclrpal)
target_link_libraries(paltest_interlockedincrement_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test2/CMakeLists.txt
index e8c5278cbc..049e0ed3f5 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedincrement_test2
add_dependencies(paltest_interlockedincrement_test2 coreclrpal)
target_link_libraries(paltest_interlockedincrement_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/CMakeLists.txt
index d7bec46d4e..0834e67b04 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedincrement64_test1
add_dependencies(paltest_interlockedincrement64_test1 coreclrpal)
target_link_libraries(paltest_interlockedincrement64_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/test.cpp b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/test.cpp
index c02886f5c6..7d10e5c624 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/test.cpp
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test1/test.cpp
@@ -37,7 +37,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
-#if defined(BIT64) && defined(PLATFORM_UNIX)
+#if defined(BIT64)
InterlockedIncrement64(&TheValue);
TheReturn = InterlockedIncrement64(&TheValue);
@@ -45,28 +45,18 @@ int __cdecl main(int argc, char *argv[])
/* Incremented twice, it should be 2 now */
if(TheValue != 2)
{
-#ifdef PLATFORM_UNIX
Fail("ERROR: The value was incremented twice and shoud now be 2, "
"but it is really %ll",TheValue);
-#else
- Fail("ERROR: The value was incremented twice and shoud now be 2, "
- "but it is really %I64",TheValue);
-#endif
}
/* Check to make sure it returns itself */
if(TheReturn != TheValue)
{
-#ifdef PLATFORM_UNIX
Fail("ERROR: The function should return the new value, which shoud "
"have been %d, but it returned %ll.",TheValue,TheReturn);
-#else
- Fail("ERROR: The function should return the new value, which shoud "
- "have been %d, but it returned %I64.",TheValue,TheReturn);
-#endif
}
-#endif //defined(BIT64) && defined(PLATFORM_UNIX)
+#endif //defined(BIT64)
PAL_Terminate();
return PASS;
}
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/CMakeLists.txt
index be571a535b..ec8e0684d7 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_interlockedincrement64_test2
add_dependencies(paltest_interlockedincrement64_test2 coreclrpal)
target_link_libraries(paltest_interlockedincrement64_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/test.cpp b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/test.cpp
index 1d579fe325..ffddc9d418 100644
--- a/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/test.cpp
+++ b/src/pal/tests/palsuite/miscellaneous/InterlockedIncrement64/test2/test.cpp
@@ -43,7 +43,7 @@ int __cdecl main(int argc, char *argv[])
/*
** Run only on 64 bit platforms
*/
- #if defined(BIT64) && defined(PLATFORM_UNIX)
+ #if defined(BIT64)
//Create MAX_THREADS threads that will operate on the global counter
for (i=0;i<MAX_THREADS;i++)
@@ -81,7 +81,7 @@ int __cdecl main(int argc, char *argv[])
{
Fail("Test Case Failed: InterlockedDecrement \n");
}
- #endif //defined(BIT64) && defined(PLATFORM_UNIX)
+ #endif //defined(BIT64)
PAL_Terminate();
return PASS;
diff --git a/src/pal/tests/palsuite/miscellaneous/IsBadCodePtr/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/IsBadCodePtr/test1/CMakeLists.txt
index bc3f11b705..c712b24397 100644
--- a/src/pal/tests/palsuite/miscellaneous/IsBadCodePtr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/IsBadCodePtr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isbadcodeptr_test1
add_dependencies(paltest_isbadcodeptr_test1 coreclrpal)
target_link_libraries(paltest_isbadcodeptr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/IsBadReadPtr/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/IsBadReadPtr/test1/CMakeLists.txt
index 82aecefa70..db19d5bff8 100644
--- a/src/pal/tests/palsuite/miscellaneous/IsBadReadPtr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/IsBadReadPtr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isbadreadptr_test1
add_dependencies(paltest_isbadreadptr_test1 coreclrpal)
target_link_libraries(paltest_isbadreadptr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test1/CMakeLists.txt
index e3a08167b3..89966056cf 100644
--- a/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isbadwriteptr_test1
add_dependencies(paltest_isbadwriteptr_test1 coreclrpal)
target_link_libraries(paltest_isbadwriteptr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test2/CMakeLists.txt
index 718cbaa297..ff0dbdce90 100644
--- a/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isbadwriteptr_test2
add_dependencies(paltest_isbadwriteptr_test2 coreclrpal)
target_link_libraries(paltest_isbadwriteptr_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test3/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test3/CMakeLists.txt
index 0efd3179db..30a2de3004 100644
--- a/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/IsBadWritePtr/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_isbadwriteptr_test3
add_dependencies(paltest_isbadwriteptr_test3 coreclrpal)
target_link_libraries(paltest_isbadwriteptr_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/MessageBoxW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/MessageBoxW/test1/CMakeLists.txt
index bc80853ea1..458b952662 100644
--- a/src/pal/tests/palsuite/miscellaneous/MessageBoxW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/MessageBoxW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_messageboxw_test1
add_dependencies(paltest_messageboxw_test1 coreclrpal)
target_link_libraries(paltest_messageboxw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/MessageBoxW/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/MessageBoxW/test2/CMakeLists.txt
index b8993af4cf..d86d99c33c 100644
--- a/src/pal/tests/palsuite/miscellaneous/MessageBoxW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/MessageBoxW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_messageboxw_test2
add_dependencies(paltest_messageboxw_test2 coreclrpal)
target_link_libraries(paltest_messageboxw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test1/CMakeLists.txt
index 5d63281eab..19ae519356 100644
--- a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setenvironmentvariablea_test1
add_dependencies(paltest_setenvironmentvariablea_test1 coreclrpal)
target_link_libraries(paltest_setenvironmentvariablea_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test2/CMakeLists.txt
index fe05887c3e..483d0302cb 100644
--- a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setenvironmentvariablea_test2
add_dependencies(paltest_setenvironmentvariablea_test2 coreclrpal)
target_link_libraries(paltest_setenvironmentvariablea_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test3/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test3/CMakeLists.txt
index 98c9dc0a63..27c96d950e 100644
--- a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setenvironmentvariablea_test3
add_dependencies(paltest_setenvironmentvariablea_test3 coreclrpal)
target_link_libraries(paltest_setenvironmentvariablea_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test4/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test4/CMakeLists.txt
index 1c53d4b6a1..4ffaaa31ee 100644
--- a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableA/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setenvironmentvariablea_test4
add_dependencies(paltest_setenvironmentvariablea_test4 coreclrpal)
target_link_libraries(paltest_setenvironmentvariablea_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test1/CMakeLists.txt
index 6eb52ab92e..2433b1578e 100644
--- a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setenvironmentvariablew_test1
add_dependencies(paltest_setenvironmentvariablew_test1 coreclrpal)
target_link_libraries(paltest_setenvironmentvariablew_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test2/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test2/CMakeLists.txt
index a82d849bde..c9ecdf78f3 100644
--- a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setenvironmentvariablew_test2
add_dependencies(paltest_setenvironmentvariablew_test2 coreclrpal)
target_link_libraries(paltest_setenvironmentvariablew_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test3/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test3/CMakeLists.txt
index 266231e6e9..e9dd681f7a 100644
--- a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setenvironmentvariablew_test3
add_dependencies(paltest_setenvironmentvariablew_test3 coreclrpal)
target_link_libraries(paltest_setenvironmentvariablew_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test4/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test4/CMakeLists.txt
index c82e0f0394..cfc139fcfe 100644
--- a/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setenvironmentvariablew_test4
add_dependencies(paltest_setenvironmentvariablew_test4 coreclrpal)
target_link_libraries(paltest_setenvironmentvariablew_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/SetLastError/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/SetLastError/test1/CMakeLists.txt
index 40eb2ff865..740ce97965 100644
--- a/src/pal/tests/palsuite/miscellaneous/SetLastError/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/SetLastError/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setlasterror_test1
add_dependencies(paltest_setlasterror_test1 coreclrpal)
target_link_libraries(paltest_setlasterror_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/_i64tow/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/_i64tow/test1/CMakeLists.txt
index c3c4b61999..718c208831 100644
--- a/src/pal/tests/palsuite/miscellaneous/_i64tow/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/_i64tow/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_i64tow_test1
add_dependencies(paltest_i64tow_test1 coreclrpal)
target_link_libraries(paltest_i64tow_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/lstrlenA/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/lstrlenA/test1/CMakeLists.txt
index 6bb520100d..f0b43ac143 100644
--- a/src/pal/tests/palsuite/miscellaneous/lstrlenA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/lstrlenA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_lstrlena_test1
add_dependencies(paltest_lstrlena_test1 coreclrpal)
target_link_libraries(paltest_lstrlena_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/lstrlenW/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/lstrlenW/test1/CMakeLists.txt
index 4209cbee89..a036291da5 100644
--- a/src/pal/tests/palsuite/miscellaneous/lstrlenW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/lstrlenW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_lstrlenw_test1
add_dependencies(paltest_lstrlenw_test1 coreclrpal)
target_link_libraries(paltest_lstrlenw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/queryperformancecounter/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/queryperformancecounter/test1/CMakeLists.txt
index ba53f42ccc..6ff03558da 100644
--- a/src/pal/tests/palsuite/miscellaneous/queryperformancecounter/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/queryperformancecounter/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_queryperformancecounter_test1
add_dependencies(paltest_queryperformancecounter_test1 coreclrpal)
target_link_libraries(paltest_queryperformancecounter_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/miscellaneous/queryperformancefrequency/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/queryperformancefrequency/test1/CMakeLists.txt
index bc6bd22d5d..4125ff0e73 100644
--- a/src/pal/tests/palsuite/miscellaneous/queryperformancefrequency/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/miscellaneous/queryperformancefrequency/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_queryperformancefrequency_test1
add_dependencies(paltest_queryperformancefrequency_test1 coreclrpal)
target_link_libraries(paltest_queryperformancefrequency_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_GetPALDirectoryW/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_GetPALDirectoryW/test1/CMakeLists.txt
index 515815f9d2..ffab57f00e 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_GetPALDirectoryW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_GetPALDirectoryW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_getpaldirectoryw_test1
add_dependencies(paltest_pal_getpaldirectoryw_test1 coreclrpal)
target_link_libraries(paltest_pal_getpaldirectoryw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_GetUserTempDirectoryW/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_GetUserTempDirectoryW/test1/CMakeLists.txt
index 26eb1a860b..17baa9f6e2 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_GetUserTempDirectoryW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_GetUserTempDirectoryW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_getusertempdirectoryw_test1
add_dependencies(paltest_pal_getusertempdirectoryw_test1 coreclrpal)
target_link_libraries(paltest_pal_getusertempdirectoryw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test1/CMakeLists.txt
index 281efcd8be..27750bb26f 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_initialize_terminate_test1
add_dependencies(paltest_pal_initialize_terminate_test1 coreclrpal)
target_link_libraries(paltest_pal_initialize_terminate_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test2/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test2/CMakeLists.txt
index 46b42aa714..951aa5d59a 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_Initialize_Terminate/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_initialize_terminate_test2
add_dependencies(paltest_pal_initialize_terminate_test2 coreclrpal)
target_link_libraries(paltest_pal_initialize_terminate_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test1/CMakeLists.txt
index 573ab3834a..850c44f778 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_registerlibraryw_unregisterlibraryw_test1
add_dependencies(paltest_pal_registerlibraryw_unregisterlibraryw_test1 coreclrpal)
target_link_libraries(paltest_pal_registerlibraryw_unregisterlibraryw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test2_neg/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test2_neg/CMakeLists.txt
index ef5c0479b7..707d347923 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test2_neg/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_RegisterLibraryW_UnregisterLibraryW/test2_neg/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_reg_unreg_libraryw_neg
add_dependencies(paltest_reg_unreg_libraryw_neg coreclrpal)
target_link_libraries(paltest_reg_unreg_libraryw_neg
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_errno/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_errno/test1/CMakeLists.txt
index d20ddd9a43..2938189f1b 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_errno/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_errno/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_errno_test1
add_dependencies(paltest_pal_errno_test1 coreclrpal)
target_link_libraries(paltest_pal_errno_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_get_stderr/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_get_stderr/test1/CMakeLists.txt
index dbedac95f5..3d177074e9 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_get_stderr/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_get_stderr/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_get_stderr_test1
add_dependencies(paltest_pal_get_stderr_test1 coreclrpal)
target_link_libraries(paltest_pal_get_stderr_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_get_stdin/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_get_stdin/test1/CMakeLists.txt
index 4d714a3735..75469a2937 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_get_stdin/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_get_stdin/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_get_stdin_test1
add_dependencies(paltest_pal_get_stdin_test1 coreclrpal)
target_link_libraries(paltest_pal_get_stdin_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/PAL_get_stdout/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/PAL_get_stdout/test1/CMakeLists.txt
index 4c2f51b50d..bd78218d64 100644
--- a/src/pal/tests/palsuite/pal_specific/PAL_get_stdout/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/PAL_get_stdout/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_get_stdout_test1
add_dependencies(paltest_pal_get_stdout_test1 coreclrpal)
target_link_libraries(paltest_pal_get_stdout_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/pal_entrypoint/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/pal_entrypoint/test1/CMakeLists.txt
index 82ff9225de..154791c20d 100644
--- a/src/pal/tests/palsuite/pal_specific/pal_entrypoint/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/pal_entrypoint/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_entrypoint_test1
add_dependencies(paltest_pal_entrypoint_test1 coreclrpal)
target_link_libraries(paltest_pal_entrypoint_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/pal_specific/pal_initializedebug/test1/CMakeLists.txt b/src/pal/tests/palsuite/pal_specific/pal_initializedebug/test1/CMakeLists.txt
index 56c9d02eaa..198e582ec8 100644
--- a/src/pal/tests/palsuite/pal_specific/pal_initializedebug/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/pal_specific/pal_initializedebug/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_pal_initializedebug_test1
add_dependencies(paltest_pal_initializedebug_test1 coreclrpal)
target_link_libraries(paltest_pal_initializedebug_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/paltestlist.txt b/src/pal/tests/palsuite/paltestlist.txt
index 2cedca2b97..600c2a533b 100644
--- a/src/pal/tests/palsuite/paltestlist.txt
+++ b/src/pal/tests/palsuite/paltestlist.txt
@@ -210,7 +210,6 @@ c_runtime/swprintf/test18/paltest_swprintf_test18
c_runtime/swprintf/test19/paltest_swprintf_test19
c_runtime/swprintf/test3/paltest_swprintf_test3
c_runtime/swprintf/test4/paltest_swprintf_test4
-c_runtime/swprintf/test5/paltest_swprintf_test5
c_runtime/swprintf/test6/paltest_swprintf_test6
c_runtime/swprintf/test8/paltest_swprintf_test8
c_runtime/swprintf/test9/paltest_swprintf_test9
@@ -292,7 +291,6 @@ c_runtime/vsprintf/test19/paltest_vsprintf_test19
c_runtime/vsprintf/test2/paltest_vsprintf_test2
c_runtime/vsprintf/test3/paltest_vsprintf_test3
c_runtime/vsprintf/test4/paltest_vsprintf_test4
-c_runtime/vsprintf/test5/paltest_vsprintf_test5
c_runtime/vsprintf/test6/paltest_vsprintf_test6
c_runtime/vsprintf/test7/paltest_vsprintf_test7
c_runtime/vsprintf/test8/paltest_vsprintf_test8
@@ -310,7 +308,6 @@ c_runtime/vswprintf/test18/paltest_vswprintf_test18
c_runtime/vswprintf/test19/paltest_vswprintf_test19
c_runtime/vswprintf/test3/paltest_vswprintf_test3
c_runtime/vswprintf/test4/paltest_vswprintf_test4
-c_runtime/vswprintf/test5/paltest_vswprintf_test5
c_runtime/vswprintf/test6/paltest_vswprintf_test6
c_runtime/vswprintf/test8/paltest_vswprintf_test8
c_runtime/vswprintf/test9/paltest_vswprintf_test9
@@ -358,7 +355,6 @@ c_runtime/_putenv/test1/paltest_putenv_test1
c_runtime/_putenv/test2/paltest_putenv_test2
c_runtime/_putenv/test3/paltest_putenv_test3
c_runtime/_putenv/test4/paltest_putenv_test4
-c_runtime/_putw/test1/paltest_putw_test1
c_runtime/_rotl/test1/paltest_rotl_test1
c_runtime/_rotr/test1/paltest_rotr_test1
c_runtime/_snprintf_s/test1/paltest_snprintf_test1
@@ -398,25 +394,24 @@ c_runtime/_snwprintf_s/test9/paltest_snwprintf_test9
c_runtime/_stricmp/test1/paltest_stricmp_test1
c_runtime/_strlwr/test1/paltest_strlwr_test1
c_runtime/_strnicmp/test1/paltest_strnicmp_test1
-c_runtime/_vsnprintf/test1/paltest_vsnprintf_test1
-c_runtime/_vsnprintf/test10/paltest_vsnprintf_test10
-c_runtime/_vsnprintf/test11/paltest_vsnprintf_test11
-c_runtime/_vsnprintf/test12/paltest_vsnprintf_test12
-c_runtime/_vsnprintf/test13/paltest_vsnprintf_test13
-c_runtime/_vsnprintf/test14/paltest_vsnprintf_test14
-c_runtime/_vsnprintf/test15/paltest_vsnprintf_test15
-c_runtime/_vsnprintf/test16/paltest_vsnprintf_test16
-c_runtime/_vsnprintf/test17/paltest_vsnprintf_test17
-c_runtime/_vsnprintf/test18/paltest_vsnprintf_test18
-c_runtime/_vsnprintf/test19/paltest_vsnprintf_test19
-c_runtime/_vsnprintf/test2/paltest_vsnprintf_test2
-c_runtime/_vsnprintf/test3/paltest_vsnprintf_test3
-c_runtime/_vsnprintf/test4/paltest_vsnprintf_test4
-c_runtime/_vsnprintf/test5/paltest_vsnprintf_test5
-c_runtime/_vsnprintf/test6/paltest_vsnprintf_test6
-c_runtime/_vsnprintf/test7/paltest_vsnprintf_test7
-c_runtime/_vsnprintf/test8/paltest_vsnprintf_test8
-c_runtime/_vsnprintf/test9/paltest_vsnprintf_test9
+c_runtime/_vsnprintf_s/test1/paltest_vsnprintf_test1
+c_runtime/_vsnprintf_s/test10/paltest_vsnprintf_test10
+c_runtime/_vsnprintf_s/test11/paltest_vsnprintf_test11
+c_runtime/_vsnprintf_s/test12/paltest_vsnprintf_test12
+c_runtime/_vsnprintf_s/test13/paltest_vsnprintf_test13
+c_runtime/_vsnprintf_s/test14/paltest_vsnprintf_test14
+c_runtime/_vsnprintf_s/test15/paltest_vsnprintf_test15
+c_runtime/_vsnprintf_s/test16/paltest_vsnprintf_test16
+c_runtime/_vsnprintf_s/test17/paltest_vsnprintf_test17
+c_runtime/_vsnprintf_s/test18/paltest_vsnprintf_test18
+c_runtime/_vsnprintf_s/test19/paltest_vsnprintf_test19
+c_runtime/_vsnprintf_s/test2/paltest_vsnprintf_test2
+c_runtime/_vsnprintf_s/test3/paltest_vsnprintf_test3
+c_runtime/_vsnprintf_s/test4/paltest_vsnprintf_test4
+c_runtime/_vsnprintf_s/test6/paltest_vsnprintf_test6
+c_runtime/_vsnprintf_s/test7/paltest_vsnprintf_test7
+c_runtime/_vsnprintf_s/test8/paltest_vsnprintf_test8
+c_runtime/_vsnprintf_s/test9/paltest_vsnprintf_test9
c_runtime/_vsnwprintf_s/test1/paltest_vsnwprintf_test1
c_runtime/_vsnwprintf_s/test10/paltest_vsnwprintf_test10
c_runtime/_vsnwprintf_s/test11/paltest_vsnwprintf_test11
diff --git a/src/pal/tests/palsuite/palverify.dat b/src/pal/tests/palsuite/palverify.dat
index d6e113b670..1872313a94 100644
--- a/src/pal/tests/palsuite/palverify.dat
+++ b/src/pal/tests/palsuite/palverify.dat
@@ -66,25 +66,24 @@ c_runtime/_snwprintf_s/test19,1
c_runtime/_stricmp/test1,1
c_runtime/_strlwr/test1,1
c_runtime/_strnicmp/test1,1
-c_runtime/_vsnprintf/test1,1
-c_runtime/_vsnprintf/test2,1
-c_runtime/_vsnprintf/test3,1
-c_runtime/_vsnprintf/test4,1
-c_runtime/_vsnprintf/test5,1
-c_runtime/_vsnprintf/test6,1
-c_runtime/_vsnprintf/test7,1
-c_runtime/_vsnprintf/test8,1
-c_runtime/_vsnprintf/test9,1
-c_runtime/_vsnprintf/test10,1
-c_runtime/_vsnprintf/test11,1
-c_runtime/_vsnprintf/test12,1
-c_runtime/_vsnprintf/test13,1
-c_runtime/_vsnprintf/test14,1
-c_runtime/_vsnprintf/test15,1
-c_runtime/_vsnprintf/test16,1
-c_runtime/_vsnprintf/test17,1
-c_runtime/_vsnprintf/test18,1
-c_runtime/_vsnprintf/test19,1
+c_runtime/_vsnprintf_s/test1,1
+c_runtime/_vsnprintf_s/test2,1
+c_runtime/_vsnprintf_s/test3,1
+c_runtime/_vsnprintf_s/test4,1
+c_runtime/_vsnprintf_s/test6,1
+c_runtime/_vsnprintf_s/test7,1
+c_runtime/_vsnprintf_s/test8,1
+c_runtime/_vsnprintf_s/test9,1
+c_runtime/_vsnprintf_s/test10,1
+c_runtime/_vsnprintf_s/test11,1
+c_runtime/_vsnprintf_s/test12,1
+c_runtime/_vsnprintf_s/test13,1
+c_runtime/_vsnprintf_s/test14,1
+c_runtime/_vsnprintf_s/test15,1
+c_runtime/_vsnprintf_s/test16,1
+c_runtime/_vsnprintf_s/test17,1
+c_runtime/_vsnprintf_s/test18,1
+c_runtime/_vsnprintf_s/test19,1
c_runtime/_vsnwprintf_s/test1,1
c_runtime/_vsnwprintf_s/test2,1
c_runtime/_vsnwprintf_s/test3,1
diff --git a/src/pal/tests/palsuite/samples/test1/CMakeLists.txt b/src/pal/tests/palsuite/samples/test1/CMakeLists.txt
index 42f2ebdcdd..9db683907f 100644
--- a/src/pal/tests/palsuite/samples/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/samples/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_samples_test1
add_dependencies(paltest_samples_test1 coreclrpal)
target_link_libraries(paltest_samples_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/samples/test2/CMakeLists.txt b/src/pal/tests/palsuite/samples/test2/CMakeLists.txt
index 1a7ce2918e..9e7fb7b930 100644
--- a/src/pal/tests/palsuite/samples/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/samples/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_samples_test2
add_dependencies(paltest_samples_test2 coreclrpal)
target_link_libraries(paltest_samples_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateEventA/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateEventA/test1/CMakeLists.txt
index 7be9481150..44a6d98495 100644
--- a/src/pal/tests/palsuite/threading/CreateEventA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateEventA/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createeventa_test1
add_dependencies(paltest_createeventa_test1 coreclrpal)
target_link_libraries(paltest_createeventa_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateEventA/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateEventA/test2/CMakeLists.txt
index 9725c89721..3b7daaa530 100644
--- a/src/pal/tests/palsuite/threading/CreateEventA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateEventA/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createeventa_test2
add_dependencies(paltest_createeventa_test2 coreclrpal)
target_link_libraries(paltest_createeventa_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateEventA/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateEventA/test3/CMakeLists.txt
index b596a881d5..c3d110d733 100644
--- a/src/pal/tests/palsuite/threading/CreateEventA/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateEventA/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createeventa_test3
add_dependencies(paltest_createeventa_test3 coreclrpal)
target_link_libraries(paltest_createeventa_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateEventW/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateEventW/test1/CMakeLists.txt
index ef18312cda..989bc44d60 100644
--- a/src/pal/tests/palsuite/threading/CreateEventW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateEventW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createeventw_test1
add_dependencies(paltest_createeventw_test1 coreclrpal)
target_link_libraries(paltest_createeventw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateEventW/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateEventW/test2/CMakeLists.txt
index 7f9543e0cb..f8ebb5319f 100644
--- a/src/pal/tests/palsuite/threading/CreateEventW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateEventW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createeventw_test2
add_dependencies(paltest_createeventw_test2 coreclrpal)
target_link_libraries(paltest_createeventw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateEventW/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateEventW/test3/CMakeLists.txt
index 6778740f7e..b6ba370d50 100644
--- a/src/pal/tests/palsuite/threading/CreateEventW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateEventW/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createeventw_test3
add_dependencies(paltest_createeventw_test3 coreclrpal)
target_link_libraries(paltest_createeventw_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test1/CMakeLists.txt
index 782c671b84..40ed5848c1 100644
--- a/src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createmutexa_releasemutex_test1
add_dependencies(paltest_createmutexa_releasemutex_test1 coreclrpal)
target_link_libraries(paltest_createmutexa_releasemutex_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test2/CMakeLists.txt
index 3540cb2b8c..2486a70250 100644
--- a/src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateMutexA_ReleaseMutex/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createmutexa_releasemutex_test2
add_dependencies(paltest_createmutexa_releasemutex_test2 coreclrpal)
target_link_libraries(paltest_createmutexa_releasemutex_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test1/CMakeLists.txt
index aa1f7831c0..c30bad275b 100644
--- a/src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createmutexw_releasemutex_test1
add_dependencies(paltest_createmutexw_releasemutex_test1 coreclrpal)
target_link_libraries(paltest_createmutexw_releasemutex_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test2/CMakeLists.txt
index 5a9095cb1b..cfcbde466b 100644
--- a/src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateMutexW_ReleaseMutex/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createmutexw_releasemutex_test2
add_dependencies(paltest_createmutexw_releasemutex_test2 coreclrpal)
target_link_libraries(paltest_createmutexw_releasemutex_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateProcessA/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateProcessA/test1/CMakeLists.txt
index 9cd0aa5dfd..32ef242431 100644
--- a/src/pal/tests/palsuite/threading/CreateProcessA/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateProcessA/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_createprocessa_test1
add_dependencies(paltest_createprocessa_test1 coreclrpal)
target_link_libraries(paltest_createprocessa_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_createprocessa_test1_child
add_dependencies(paltest_createprocessa_test1_child coreclrpal)
target_link_libraries(paltest_createprocessa_test1_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateProcessA/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateProcessA/test2/CMakeLists.txt
index f035f0a888..4f4bc850ba 100644
--- a/src/pal/tests/palsuite/threading/CreateProcessA/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateProcessA/test2/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_createprocessa_test2
add_dependencies(paltest_createprocessa_test2 coreclrpal)
target_link_libraries(paltest_createprocessa_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_createprocessa_test2_child
add_dependencies(paltest_createprocessa_test2_child coreclrpal)
target_link_libraries(paltest_createprocessa_test2_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateProcessW/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateProcessW/test1/CMakeLists.txt
index 174d6fe3c7..a5a0ca8b0c 100644
--- a/src/pal/tests/palsuite/threading/CreateProcessW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateProcessW/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_createprocessw_test1
add_dependencies(paltest_createprocessw_test1 coreclrpal)
target_link_libraries(paltest_createprocessw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_createprocessw_test1_child
add_dependencies(paltest_createprocessw_test1_child coreclrpal)
target_link_libraries(paltest_createprocessw_test1_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateProcessW/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateProcessW/test2/CMakeLists.txt
index 021a0d2da2..f32924b8bd 100644
--- a/src/pal/tests/palsuite/threading/CreateProcessW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateProcessW/test2/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_createprocessw_test2
add_dependencies(paltest_createprocessw_test2 coreclrpal)
target_link_libraries(paltest_createprocessw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_createprocessw_test2_child
add_dependencies(paltest_createprocessw_test2_child coreclrpal)
target_link_libraries(paltest_createprocessw_test2_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test1/CMakeLists.txt
index 8a9255ce7a..76b2dd690f 100644
--- a/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createsemaphorea_releasesemaphore_test1
add_dependencies(paltest_createsemaphorea_releasesemaphore_test1 coreclrpal)
target_link_libraries(paltest_createsemaphorea_releasesemaphore_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test2/CMakeLists.txt
index 6d1249bf05..1f01ed0129 100644
--- a/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createsemaphorea_releasesemaphore_test2
add_dependencies(paltest_createsemaphorea_releasesemaphore_test2 coreclrpal)
target_link_libraries(paltest_createsemaphorea_releasesemaphore_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test3/CMakeLists.txt
index 94998f59a9..a7dcfdd32f 100644
--- a/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateSemaphoreA_ReleaseSemaphore/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createsemaphorea_releasesemaphore_test3
add_dependencies(paltest_createsemaphorea_releasesemaphore_test3 coreclrpal)
target_link_libraries(paltest_createsemaphorea_releasesemaphore_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test1/CMakeLists.txt
index 32902cf914..47b09e8e9d 100644
--- a/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createsemaphorew_releasesemaphore_test1
add_dependencies(paltest_createsemaphorew_releasesemaphore_test1 coreclrpal)
target_link_libraries(paltest_createsemaphorew_releasesemaphore_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test2/CMakeLists.txt
index bd0a5a6e53..374f02c21d 100644
--- a/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createsemaphorew_releasesemaphore_test2
add_dependencies(paltest_createsemaphorew_releasesemaphore_test2 coreclrpal)
target_link_libraries(paltest_createsemaphorew_releasesemaphore_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test3/CMakeLists.txt
index d0340c64cb..6e12df92b4 100644
--- a/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateSemaphoreW_ReleaseSemaphore/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createsemaphorew_releasesemaphore_test3
add_dependencies(paltest_createsemaphorew_releasesemaphore_test3 coreclrpal)
target_link_libraries(paltest_createsemaphorew_releasesemaphore_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateThread/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateThread/test1/CMakeLists.txt
index b47afe498a..e190800e3f 100644
--- a/src/pal/tests/palsuite/threading/CreateThread/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateThread/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createthread_test1
add_dependencies(paltest_createthread_test1 coreclrpal)
target_link_libraries(paltest_createthread_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateThread/test1/test1.cpp b/src/pal/tests/palsuite/threading/CreateThread/test1/test1.cpp
index dda25f1f4b..4084e1f9cf 100644
--- a/src/pal/tests/palsuite/threading/CreateThread/test1/test1.cpp
+++ b/src/pal/tests/palsuite/threading/CreateThread/test1/test1.cpp
@@ -15,11 +15,7 @@
#include <palsuite.h>
-#ifndef PLATFORM_UNIX
-#define LLFORMAT "%I64u"
-#else
#define LLFORMAT "%llu"
-#endif
ULONGLONG dwCreateThreadTestParameter = 0;
diff --git a/src/pal/tests/palsuite/threading/CreateThread/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateThread/test2/CMakeLists.txt
index 47877607b9..aed986fd54 100644
--- a/src/pal/tests/palsuite/threading/CreateThread/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateThread/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createthread_test2
add_dependencies(paltest_createthread_test2 coreclrpal)
target_link_libraries(paltest_createthread_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CreateThread/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/CreateThread/test3/CMakeLists.txt
index d454992e59..3986665254 100644
--- a/src/pal/tests/palsuite/threading/CreateThread/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CreateThread/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_createthread_test3
add_dependencies(paltest_createthread_test3 coreclrpal)
target_link_libraries(paltest_createthread_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test1/CMakeLists.txt
index 8d2c1441c4..204b316b20 100644
--- a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_criticalsectionfunctions_test1
add_dependencies(paltest_criticalsectionfunctions_test1 coreclrpal)
target_link_libraries(paltest_criticalsectionfunctions_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test2/CMakeLists.txt
index e0f59f4207..dba47f6ee2 100644
--- a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_criticalsectionfunctions_test2
add_dependencies(paltest_criticalsectionfunctions_test2 coreclrpal)
target_link_libraries(paltest_criticalsectionfunctions_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test3/CMakeLists.txt
index 11555ec484..599572b99b 100644
--- a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_criticalsectionfunctions_test3
add_dependencies(paltest_criticalsectionfunctions_test3 coreclrpal)
target_link_libraries(paltest_criticalsectionfunctions_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test4/CMakeLists.txt b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test4/CMakeLists.txt
index 8aa18854b3..71c49248aa 100644
--- a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_criticalsectionfunctions_test4
add_dependencies(paltest_criticalsectionfunctions_test4 coreclrpal)
target_link_libraries(paltest_criticalsectionfunctions_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test5/CMakeLists.txt b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test5/CMakeLists.txt
index 9474bcc6c9..16a0ccdb48 100644
--- a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_criticalsectionfunctions_test5
add_dependencies(paltest_criticalsectionfunctions_test5 coreclrpal)
target_link_libraries(paltest_criticalsectionfunctions_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test6/CMakeLists.txt b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test6/CMakeLists.txt
index f4887ad67d..3f463940b7 100644
--- a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_criticalsectionfunctions_test6
add_dependencies(paltest_criticalsectionfunctions_test6 coreclrpal)
target_link_libraries(paltest_criticalsectionfunctions_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test7/CMakeLists.txt b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test7/CMakeLists.txt
index ceb78a0512..21b813ba32 100644
--- a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_criticalsectionfunctions_test7
add_dependencies(paltest_criticalsectionfunctions_test7 coreclrpal)
target_link_libraries(paltest_criticalsectionfunctions_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test8/CMakeLists.txt b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test8/CMakeLists.txt
index d3f271d677..a8ab4b0aaf 100644
--- a/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/CriticalSectionFunctions/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_criticalsectionfunctions_test8
add_dependencies(paltest_criticalsectionfunctions_test8 coreclrpal)
target_link_libraries(paltest_criticalsectionfunctions_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test1/CMakeLists.txt
index 18b1927a4e..f5fb47c0f0 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test1
add_dependencies(paltest_duplicatehandle_test1 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test10/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test10/CMakeLists.txt
index 98c7a273dc..135f1494a6 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test10/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test10/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test10
add_dependencies(paltest_duplicatehandle_test10 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test10
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test11/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test11/CMakeLists.txt
index f47f9bc350..5584b9d1e7 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test11/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test11/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_duplicatehandle_test11
add_dependencies(paltest_duplicatehandle_test11 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test11
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_duplicatehandle_test11_child
add_dependencies(paltest_duplicatehandle_test11_child coreclrpal)
target_link_libraries(paltest_duplicatehandle_test11_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test12/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test12/CMakeLists.txt
index 6a50a13265..fb5ed234ca 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test12/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test12/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test12
add_dependencies(paltest_duplicatehandle_test12 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test12
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test2/CMakeLists.txt
index 9faa58a271..9668dfd109 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test2
add_dependencies(paltest_duplicatehandle_test2 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test3/CMakeLists.txt
index b161b928d3..e44c2a2f76 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test3
add_dependencies(paltest_duplicatehandle_test3 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test4/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test4/CMakeLists.txt
index 901151f4eb..2261e6e1cd 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test4
add_dependencies(paltest_duplicatehandle_test4 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test5/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test5/CMakeLists.txt
index 94cd07f96f..72e77aab1d 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test5
add_dependencies(paltest_duplicatehandle_test5 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test6/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test6/CMakeLists.txt
index a0dcae843c..620d788435 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test6
add_dependencies(paltest_duplicatehandle_test6 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test7/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test7/CMakeLists.txt
index a222331fe7..fff3ba5284 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test7
add_dependencies(paltest_duplicatehandle_test7 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test8/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test8/CMakeLists.txt
index 18ed969cb7..2fb32aa3f7 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test8/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test8/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test8
add_dependencies(paltest_duplicatehandle_test8 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test8
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/DuplicateHandle/test9/CMakeLists.txt b/src/pal/tests/palsuite/threading/DuplicateHandle/test9/CMakeLists.txt
index 0383a010ac..f2bca82933 100644
--- a/src/pal/tests/palsuite/threading/DuplicateHandle/test9/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/DuplicateHandle/test9/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_duplicatehandle_test9
add_dependencies(paltest_duplicatehandle_test9 coreclrpal)
target_link_libraries(paltest_duplicatehandle_test9
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ExitProcess/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/ExitProcess/test1/CMakeLists.txt
index f2d28e06ca..28f1247659 100644
--- a/src/pal/tests/palsuite/threading/ExitProcess/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ExitProcess/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_exitprocess_test1
add_dependencies(paltest_exitprocess_test1 coreclrpal)
target_link_libraries(paltest_exitprocess_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ExitProcess/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/ExitProcess/test2/CMakeLists.txt
index 5281a02aa4..6b9202e581 100644
--- a/src/pal/tests/palsuite/threading/ExitProcess/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ExitProcess/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_exitprocess_test2
add_dependencies(paltest_exitprocess_test2 coreclrpal)
target_link_libraries(paltest_exitprocess_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ExitProcess/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/ExitProcess/test3/CMakeLists.txt
index 3fca087d05..c4152181ce 100644
--- a/src/pal/tests/palsuite/threading/ExitProcess/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ExitProcess/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_exitprocess_test3
add_dependencies(paltest_exitprocess_test3 coreclrpal)
target_link_libraries(paltest_exitprocess_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ExitThread/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/ExitThread/test1/CMakeLists.txt
index c34b5257ab..3f8531a33a 100644
--- a/src/pal/tests/palsuite/threading/ExitThread/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ExitThread/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_exitthread_test1
add_dependencies(paltest_exitthread_test1 coreclrpal)
target_link_libraries(paltest_exitthread_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ExitThread/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/ExitThread/test2/CMakeLists.txt
index 5e16d36082..606e02774c 100644
--- a/src/pal/tests/palsuite/threading/ExitThread/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ExitThread/test2/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_exitthread_test2
add_dependencies(paltest_exitthread_test2 coreclrpal)
target_link_libraries(paltest_exitthread_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_exitthread_test2_child
add_dependencies(paltest_exitthread_test2_child coreclrpal)
target_link_libraries(paltest_exitthread_test2_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/GetCurrentProcess/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/GetCurrentProcess/test1/CMakeLists.txt
index af4746bcb4..be17127c1a 100644
--- a/src/pal/tests/palsuite/threading/GetCurrentProcess/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/GetCurrentProcess/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcurrentprocess_test1
add_dependencies(paltest_getcurrentprocess_test1 coreclrpal)
target_link_libraries(paltest_getcurrentprocess_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/GetCurrentProcessId/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/GetCurrentProcessId/test1/CMakeLists.txt
index 523320a53c..f1ac1e0d48 100644
--- a/src/pal/tests/palsuite/threading/GetCurrentProcessId/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/GetCurrentProcessId/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcurrentprocessid_test1
add_dependencies(paltest_getcurrentprocessid_test1 coreclrpal)
target_link_libraries(paltest_getcurrentprocessid_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/GetCurrentThread/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/GetCurrentThread/test1/CMakeLists.txt
index 23af2edbca..dacb9b40c9 100644
--- a/src/pal/tests/palsuite/threading/GetCurrentThread/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/GetCurrentThread/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcurrentthread_test1
add_dependencies(paltest_getcurrentthread_test1 coreclrpal)
target_link_libraries(paltest_getcurrentthread_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/GetCurrentThread/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/GetCurrentThread/test2/CMakeLists.txt
index 9da2d075b2..58419a8693 100644
--- a/src/pal/tests/palsuite/threading/GetCurrentThread/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/GetCurrentThread/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcurrentthread_test2
add_dependencies(paltest_getcurrentthread_test2 coreclrpal)
target_link_libraries(paltest_getcurrentthread_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/GetCurrentThreadId/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/GetCurrentThreadId/test1/CMakeLists.txt
index a0824ab9a2..ecad3d287a 100644
--- a/src/pal/tests/palsuite/threading/GetCurrentThreadId/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/GetCurrentThreadId/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getcurrentthreadid_test1
add_dependencies(paltest_getcurrentthreadid_test1 coreclrpal)
target_link_libraries(paltest_getcurrentthreadid_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/GetExitCodeProcess/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/GetExitCodeProcess/test1/CMakeLists.txt
index 1ef9db2299..184470aee0 100644
--- a/src/pal/tests/palsuite/threading/GetExitCodeProcess/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/GetExitCodeProcess/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_getexitcodeprocess_test1
add_dependencies(paltest_getexitcodeprocess_test1 coreclrpal)
target_link_libraries(paltest_getexitcodeprocess_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_getexitcodeprocess_test1_child
add_dependencies(paltest_getexitcodeprocess_test1_child coreclrpal)
target_link_libraries(paltest_getexitcodeprocess_test1_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/GetProcessTimes/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/GetProcessTimes/test2/CMakeLists.txt
index 8e905873e9..b062b349aa 100644
--- a/src/pal/tests/palsuite/threading/GetProcessTimes/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/GetProcessTimes/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getprocesstimes_test2
add_dependencies(paltest_getprocesstimes_test2 coreclrpal)
target_link_libraries(paltest_getprocesstimes_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/GetThreadTimes/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/GetThreadTimes/test1/CMakeLists.txt
index aa4dad11ce..23ae7abc58 100644
--- a/src/pal/tests/palsuite/threading/GetThreadTimes/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/GetThreadTimes/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_getthreadtimes_test1
add_dependencies(paltest_getthreadtimes_test1 coreclrpal)
target_link_libraries(paltest_getthreadtimes_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/NamedMutex/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/NamedMutex/test1/CMakeLists.txt
index 315144e1e8..8e3e754631 100644
--- a/src/pal/tests/palsuite/threading/NamedMutex/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/NamedMutex/test1/CMakeLists.txt
@@ -14,7 +14,5 @@ add_executable(paltest_namedmutex_test1
add_dependencies(paltest_namedmutex_test1 coreclrpal)
target_link_libraries(paltest_namedmutex_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/NamedMutex/test1/nopal.cpp b/src/pal/tests/palsuite/threading/NamedMutex/test1/nopal.cpp
index 46a5d87341..ae3ebc361c 100644
--- a/src/pal/tests/palsuite/threading/NamedMutex/test1/nopal.cpp
+++ b/src/pal/tests/palsuite/threading/NamedMutex/test1/nopal.cpp
@@ -16,6 +16,7 @@
#define _countof(a) (sizeof(a) / sizeof(a[0]))
+#undef PAGE_SIZE
#define PAGE_SIZE (4096)
auto test_strcpy = strcpy;
diff --git a/src/pal/tests/palsuite/threading/OpenEventW/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/OpenEventW/test1/CMakeLists.txt
index 2d5698b153..e6470c5992 100644
--- a/src/pal/tests/palsuite/threading/OpenEventW/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/OpenEventW/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openeventw_test1
add_dependencies(paltest_openeventw_test1 coreclrpal)
target_link_libraries(paltest_openeventw_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/OpenEventW/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/OpenEventW/test2/CMakeLists.txt
index bedf83b487..4fd04737cc 100644
--- a/src/pal/tests/palsuite/threading/OpenEventW/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/OpenEventW/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openeventw_test2
add_dependencies(paltest_openeventw_test2 coreclrpal)
target_link_libraries(paltest_openeventw_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/OpenEventW/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/OpenEventW/test3/CMakeLists.txt
index 7f7622dca0..2ccd175c42 100644
--- a/src/pal/tests/palsuite/threading/OpenEventW/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/OpenEventW/test3/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_openeventw_test3
add_dependencies(paltest_openeventw_test3 coreclrpal)
target_link_libraries(paltest_openeventw_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_openeventw_test3_child
add_dependencies(paltest_openeventw_test3_child coreclrpal)
target_link_libraries(paltest_openeventw_test3_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/OpenEventW/test4/CMakeLists.txt b/src/pal/tests/palsuite/threading/OpenEventW/test4/CMakeLists.txt
index 73b8904993..dbf3a276b6 100644
--- a/src/pal/tests/palsuite/threading/OpenEventW/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/OpenEventW/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openeventw_test4
add_dependencies(paltest_openeventw_test4 coreclrpal)
target_link_libraries(paltest_openeventw_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/OpenEventW/test5/CMakeLists.txt b/src/pal/tests/palsuite/threading/OpenEventW/test5/CMakeLists.txt
index 3bad4d9cc5..2830182e56 100644
--- a/src/pal/tests/palsuite/threading/OpenEventW/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/OpenEventW/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_openeventw_test5
add_dependencies(paltest_openeventw_test5 coreclrpal)
target_link_libraries(paltest_openeventw_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/OpenProcess/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/OpenProcess/test1/CMakeLists.txt
index dd2e30516c..df66c3f2d3 100644
--- a/src/pal/tests/palsuite/threading/OpenProcess/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/OpenProcess/test1/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_openprocess_test1
add_dependencies(paltest_openprocess_test1 coreclrpal)
target_link_libraries(paltest_openprocess_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_openprocess_test1_child
add_dependencies(paltest_openprocess_test1_child coreclrpal)
target_link_libraries(paltest_openprocess_test1_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/QueryThreadCycleTime/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/QueryThreadCycleTime/test1/CMakeLists.txt
index 9a54ad15b6..12a575926a 100644
--- a/src/pal/tests/palsuite/threading/QueryThreadCycleTime/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/QueryThreadCycleTime/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_querythreadcycletime_test1
add_dependencies(paltest_querythreadcycletime_test1 coreclrpal)
target_link_libraries(paltest_querythreadcycletime_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/QueueUserAPC/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/QueueUserAPC/test1/CMakeLists.txt
index a99b0a69cc..402188d274 100644
--- a/src/pal/tests/palsuite/threading/QueueUserAPC/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/QueueUserAPC/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_queueuserapc_test1
add_dependencies(paltest_queueuserapc_test1 coreclrpal)
target_link_libraries(paltest_queueuserapc_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/QueueUserAPC/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/QueueUserAPC/test2/CMakeLists.txt
index 5d86efdddd..b9f5f01cf5 100644
--- a/src/pal/tests/palsuite/threading/QueueUserAPC/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/QueueUserAPC/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_queueuserapc_test2
add_dependencies(paltest_queueuserapc_test2 coreclrpal)
target_link_libraries(paltest_queueuserapc_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/QueueUserAPC/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/QueueUserAPC/test3/CMakeLists.txt
index e07ab67070..8a4c9f26ad 100644
--- a/src/pal/tests/palsuite/threading/QueueUserAPC/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/QueueUserAPC/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_queueuserapc_test3
add_dependencies(paltest_queueuserapc_test3 coreclrpal)
target_link_libraries(paltest_queueuserapc_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/QueueUserAPC/test4/CMakeLists.txt b/src/pal/tests/palsuite/threading/QueueUserAPC/test4/CMakeLists.txt
index 08a5cc763b..dd97490796 100644
--- a/src/pal/tests/palsuite/threading/QueueUserAPC/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/QueueUserAPC/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_queueuserapc_test4
add_dependencies(paltest_queueuserapc_test4 coreclrpal)
target_link_libraries(paltest_queueuserapc_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/QueueUserAPC/test5/CMakeLists.txt b/src/pal/tests/palsuite/threading/QueueUserAPC/test5/CMakeLists.txt
index 0ef65ce583..a451712234 100644
--- a/src/pal/tests/palsuite/threading/QueueUserAPC/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/QueueUserAPC/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_queueuserapc_test5
add_dependencies(paltest_queueuserapc_test5 coreclrpal)
target_link_libraries(paltest_queueuserapc_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/QueueUserAPC/test6/CMakeLists.txt b/src/pal/tests/palsuite/threading/QueueUserAPC/test6/CMakeLists.txt
index 2e7198358c..440b24cf81 100644
--- a/src/pal/tests/palsuite/threading/QueueUserAPC/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/QueueUserAPC/test6/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_queueuserapc_test6
add_dependencies(paltest_queueuserapc_test6 coreclrpal)
target_link_libraries(paltest_queueuserapc_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/QueueUserAPC/test7/CMakeLists.txt b/src/pal/tests/palsuite/threading/QueueUserAPC/test7/CMakeLists.txt
index c27cd7e67c..6dbeb07e2f 100644
--- a/src/pal/tests/palsuite/threading/QueueUserAPC/test7/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/QueueUserAPC/test7/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_queueuserapc_test7
add_dependencies(paltest_queueuserapc_test7 coreclrpal)
target_link_libraries(paltest_queueuserapc_test7
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ReleaseMutex/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/ReleaseMutex/test3/CMakeLists.txt
index 6bb3a79db4..f8f0d8fb80 100644
--- a/src/pal/tests/palsuite/threading/ReleaseMutex/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ReleaseMutex/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_releasemutex_test3
add_dependencies(paltest_releasemutex_test3 coreclrpal)
target_link_libraries(paltest_releasemutex_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ResetEvent/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/ResetEvent/test1/CMakeLists.txt
index 12c83119d8..769c1f3825 100644
--- a/src/pal/tests/palsuite/threading/ResetEvent/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ResetEvent/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_resetevent_test1
add_dependencies(paltest_resetevent_test1 coreclrpal)
target_link_libraries(paltest_resetevent_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ResetEvent/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/ResetEvent/test2/CMakeLists.txt
index 1f67b5d884..69c7b7cc63 100644
--- a/src/pal/tests/palsuite/threading/ResetEvent/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ResetEvent/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_resetevent_test2
add_dependencies(paltest_resetevent_test2 coreclrpal)
target_link_libraries(paltest_resetevent_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ResetEvent/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/ResetEvent/test3/CMakeLists.txt
index fd0d6e8b16..acb31489c4 100644
--- a/src/pal/tests/palsuite/threading/ResetEvent/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ResetEvent/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_resetevent_test3
add_dependencies(paltest_resetevent_test3 coreclrpal)
target_link_libraries(paltest_resetevent_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ResetEvent/test4/CMakeLists.txt b/src/pal/tests/palsuite/threading/ResetEvent/test4/CMakeLists.txt
index ca2a918775..d20135a040 100644
--- a/src/pal/tests/palsuite/threading/ResetEvent/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ResetEvent/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_resetevent_test4
add_dependencies(paltest_resetevent_test4 coreclrpal)
target_link_libraries(paltest_resetevent_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ResumeThread/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/ResumeThread/test1/CMakeLists.txt
index 96d7edcbba..0321a28b81 100644
--- a/src/pal/tests/palsuite/threading/ResumeThread/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ResumeThread/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_resumethread_test1
add_dependencies(paltest_resumethread_test1 coreclrpal)
target_link_libraries(paltest_resumethread_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/SetErrorMode/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetErrorMode/test1/CMakeLists.txt
index 7c145a8528..ff90b41abe 100644
--- a/src/pal/tests/palsuite/threading/SetErrorMode/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/SetErrorMode/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_seterrormode_test1
add_dependencies(paltest_seterrormode_test1 coreclrpal)
target_link_libraries(paltest_seterrormode_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/SetEvent/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetEvent/test1/CMakeLists.txt
index 8d9d729554..56081c1814 100644
--- a/src/pal/tests/palsuite/threading/SetEvent/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/SetEvent/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setevent_test1
add_dependencies(paltest_setevent_test1 coreclrpal)
target_link_libraries(paltest_setevent_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/SetEvent/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetEvent/test2/CMakeLists.txt
index 7d33b56058..f94fb486b2 100644
--- a/src/pal/tests/palsuite/threading/SetEvent/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/SetEvent/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setevent_test2
add_dependencies(paltest_setevent_test2 coreclrpal)
target_link_libraries(paltest_setevent_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/SetEvent/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetEvent/test3/CMakeLists.txt
index 1c66460ea0..c2d48ba483 100644
--- a/src/pal/tests/palsuite/threading/SetEvent/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/SetEvent/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setevent_test3
add_dependencies(paltest_setevent_test3 coreclrpal)
target_link_libraries(paltest_setevent_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/SetEvent/test4/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetEvent/test4/CMakeLists.txt
index 04f1815259..ae8adecb93 100644
--- a/src/pal/tests/palsuite/threading/SetEvent/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/SetEvent/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_setevent_test4
add_dependencies(paltest_setevent_test4 coreclrpal)
target_link_libraries(paltest_setevent_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/Sleep/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/Sleep/test1/CMakeLists.txt
index 601789600b..ec9d04f53b 100644
--- a/src/pal/tests/palsuite/threading/Sleep/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/Sleep/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sleep_test1
add_dependencies(paltest_sleep_test1 coreclrpal)
target_link_libraries(paltest_sleep_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/Sleep/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/Sleep/test2/CMakeLists.txt
index b8bc3ed7d7..b24f5e2808 100644
--- a/src/pal/tests/palsuite/threading/Sleep/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/Sleep/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sleep_test2
add_dependencies(paltest_sleep_test2 coreclrpal)
target_link_libraries(paltest_sleep_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/SleepEx/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/SleepEx/test1/CMakeLists.txt
index b2aed8333b..cf240d7f1a 100644
--- a/src/pal/tests/palsuite/threading/SleepEx/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/SleepEx/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sleepex_test1
add_dependencies(paltest_sleepex_test1 coreclrpal)
target_link_libraries(paltest_sleepex_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/SleepEx/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/SleepEx/test2/CMakeLists.txt
index 991e9b40e2..6762ec78d7 100644
--- a/src/pal/tests/palsuite/threading/SleepEx/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/SleepEx/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_sleepex_test2
add_dependencies(paltest_sleepex_test2 coreclrpal)
target_link_libraries(paltest_sleepex_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/SwitchToThread/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/SwitchToThread/test1/CMakeLists.txt
index b9008c486f..18390a6059 100644
--- a/src/pal/tests/palsuite/threading/SwitchToThread/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/SwitchToThread/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_switchtothread_test1
add_dependencies(paltest_switchtothread_test1 coreclrpal)
target_link_libraries(paltest_switchtothread_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/TLS/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/TLS/test1/CMakeLists.txt
index fef741272f..85795fa2ea 100644
--- a/src/pal/tests/palsuite/threading/TLS/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/TLS/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tls_test1
add_dependencies(paltest_tls_test1 coreclrpal)
target_link_libraries(paltest_tls_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/TLS/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/TLS/test2/CMakeLists.txt
index 10c5034589..1dde9e6cb7 100644
--- a/src/pal/tests/palsuite/threading/TLS/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/TLS/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tls_test2
add_dependencies(paltest_tls_test2 coreclrpal)
target_link_libraries(paltest_tls_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/TLS/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/TLS/test3/CMakeLists.txt
index 6bd76d3fdf..ac814bba93 100644
--- a/src/pal/tests/palsuite/threading/TLS/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/TLS/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tls_test3
add_dependencies(paltest_tls_test3 coreclrpal)
target_link_libraries(paltest_tls_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/TLS/test4/CMakeLists.txt b/src/pal/tests/palsuite/threading/TLS/test4/CMakeLists.txt
index 73ba496f1d..40c1752f61 100644
--- a/src/pal/tests/palsuite/threading/TLS/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/TLS/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tls_test4
add_dependencies(paltest_tls_test4 coreclrpal)
target_link_libraries(paltest_tls_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/TLS/test5/CMakeLists.txt b/src/pal/tests/palsuite/threading/TLS/test5/CMakeLists.txt
index e26fcfff26..c6367f5660 100644
--- a/src/pal/tests/palsuite/threading/TLS/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/TLS/test5/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tls_test5
add_dependencies(paltest_tls_test5 coreclrpal)
target_link_libraries(paltest_tls_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/TLS/test6_optimizedtls/CMakeLists.txt b/src/pal/tests/palsuite/threading/TLS/test6_optimizedtls/CMakeLists.txt
index bfc7b75e0b..b1ca82c304 100644
--- a/src/pal/tests/palsuite/threading/TLS/test6_optimizedtls/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/TLS/test6_optimizedtls/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_tls_test6_optimizedtls
add_dependencies(paltest_tls_test6_optimizedtls coreclrpal)
target_link_libraries(paltest_tls_test6_optimizedtls
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/TerminateProcess/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/TerminateProcess/test1/CMakeLists.txt
index 382e801e29..6cac1488e2 100644
--- a/src/pal/tests/palsuite/threading/TerminateProcess/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/TerminateProcess/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_terminateprocess_test1
add_dependencies(paltest_terminateprocess_test1 coreclrpal)
target_link_libraries(paltest_terminateprocess_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/ThreadPriority/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/ThreadPriority/test1/CMakeLists.txt
index 026f4ed043..7ca88c7001 100644
--- a/src/pal/tests/palsuite/threading/ThreadPriority/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/ThreadPriority/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_threadpriority_test1
add_dependencies(paltest_threadpriority_test1 coreclrpal)
target_link_libraries(paltest_threadpriority_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test1/CMakeLists.txt
index ea13c7de4c..f7ab138611 100644
--- a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitformultipleobjects_test1
add_dependencies(paltest_waitformultipleobjects_test1 coreclrpal)
target_link_libraries(paltest_waitformultipleobjects_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test1/CMakeLists.txt
index 59d4cd8cd4..605c59f7e2 100644
--- a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitformultipleobjectsex_test1
add_dependencies(paltest_waitformultipleobjectsex_test1 coreclrpal)
target_link_libraries(paltest_waitformultipleobjectsex_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test2/CMakeLists.txt
index e970ec526e..fb74acc289 100644
--- a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test2/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test2/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitformultipleobjectsex_test2
add_dependencies(paltest_waitformultipleobjectsex_test2 coreclrpal)
target_link_libraries(paltest_waitformultipleobjectsex_test2
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test3/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test3/CMakeLists.txt
index f1b76fb819..a00e2fdce4 100644
--- a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test3/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test3/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitformultipleobjectsex_test3
add_dependencies(paltest_waitformultipleobjectsex_test3 coreclrpal)
target_link_libraries(paltest_waitformultipleobjectsex_test3
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test4/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test4/CMakeLists.txt
index 815b2b069c..85be0e77ad 100644
--- a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test4/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test4/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitformultipleobjectsex_test4
add_dependencies(paltest_waitformultipleobjectsex_test4 coreclrpal)
target_link_libraries(paltest_waitformultipleobjectsex_test4
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test5/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test5/CMakeLists.txt
index 730ec60649..14b8dc1755 100644
--- a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test5/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test5/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_waitformultipleobjectsex_test5
add_dependencies(paltest_waitformultipleobjectsex_test5 coreclrpal)
target_link_libraries(paltest_waitformultipleobjectsex_test5
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_waitformultipleobjectsex_test5_helper
add_dependencies(paltest_waitformultipleobjectsex_test5_helper coreclrpal)
target_link_libraries(paltest_waitformultipleobjectsex_test5_helper
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test6/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test6/CMakeLists.txt
index 01331821a8..88254b9eb6 100644
--- a/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test6/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test6/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_waitformultipleobjectsex_test6
add_dependencies(paltest_waitformultipleobjectsex_test6 coreclrpal)
target_link_libraries(paltest_waitformultipleobjectsex_test6
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_waitformultipleobjectsex_test6_child
add_dependencies(paltest_waitformultipleobjectsex_test6_child coreclrpal)
target_link_libraries(paltest_waitformultipleobjectsex_test6_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExMutexTest/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExMutexTest/CMakeLists.txt
index 816a98bf2f..1e51e47f60 100644
--- a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExMutexTest/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExMutexTest/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitforsingleobject_wfsoexmutextest
add_dependencies(paltest_waitforsingleobject_wfsoexmutextest coreclrpal)
target_link_libraries(paltest_waitforsingleobject_wfsoexmutextest
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExSemaphoreTest/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExSemaphoreTest/CMakeLists.txt
index 2d12b25e69..a36649178c 100644
--- a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExSemaphoreTest/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExSemaphoreTest/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitforsingleobject_wfsoexsemaphoretest
add_dependencies(paltest_waitforsingleobject_wfsoexsemaphoretest coreclrpal)
target_link_libraries(paltest_waitforsingleobject_wfsoexsemaphoretest
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExThreadTest/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExThreadTest/CMakeLists.txt
index 915ee94a62..b7940cdee5 100644
--- a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExThreadTest/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExThreadTest/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitforsingleobject_wfsoexthreadtest
add_dependencies(paltest_waitforsingleobject_wfsoexthreadtest coreclrpal)
target_link_libraries(paltest_waitforsingleobject_wfsoexthreadtest
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOMutexTest/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOMutexTest/CMakeLists.txt
index b96324d654..0446a9aee2 100644
--- a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOMutexTest/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOMutexTest/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitforsingleobject_wfsomutextest
add_dependencies(paltest_waitforsingleobject_wfsomutextest coreclrpal)
target_link_libraries(paltest_waitforsingleobject_wfsomutextest
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOProcessTest/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOProcessTest/CMakeLists.txt
index 61e17eb3ad..b0a250e484 100644
--- a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOProcessTest/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOProcessTest/CMakeLists.txt
@@ -13,9 +13,7 @@ add_executable(paltest_waitforsingleobject_wfsoprocesstest
add_dependencies(paltest_waitforsingleobject_wfsoprocesstest coreclrpal)
target_link_libraries(paltest_waitforsingleobject_wfsoprocesstest
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
@@ -30,7 +28,5 @@ add_executable(paltest_waitforsingleobject_wfsoprocesstest_child
add_dependencies(paltest_waitforsingleobject_wfsoprocesstest_child coreclrpal)
target_link_libraries(paltest_waitforsingleobject_wfsoprocesstest_child
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOSemaphoreTest/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOSemaphoreTest/CMakeLists.txt
index d17f8da8e5..474edde7fd 100644
--- a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOSemaphoreTest/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOSemaphoreTest/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitforsingleobject_wfsosemaphoretest
add_dependencies(paltest_waitforsingleobject_wfsosemaphoretest coreclrpal)
target_link_libraries(paltest_waitforsingleobject_wfsosemaphoretest
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOThreadTest/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOThreadTest/CMakeLists.txt
index e2d36e08e1..5988b6a8f4 100644
--- a/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOThreadTest/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOThreadTest/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitforsingleobject_wfsothreadtest
add_dependencies(paltest_waitforsingleobject_wfsothreadtest coreclrpal)
target_link_libraries(paltest_waitforsingleobject_wfsothreadtest
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/WaitForSingleObject/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForSingleObject/test1/CMakeLists.txt
index 25f3739492..44a9d8fe6a 100644
--- a/src/pal/tests/palsuite/threading/WaitForSingleObject/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/WaitForSingleObject/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_waitforsingleobject_test1
add_dependencies(paltest_waitforsingleobject_test1 coreclrpal)
target_link_libraries(paltest_waitforsingleobject_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/YieldProcessor/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/YieldProcessor/test1/CMakeLists.txt
index 1c600bd81c..83a5616144 100644
--- a/src/pal/tests/palsuite/threading/YieldProcessor/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/YieldProcessor/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_yieldprocessor_test1
add_dependencies(paltest_yieldprocessor_test1 coreclrpal)
target_link_libraries(paltest_yieldprocessor_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tests/palsuite/threading/releasesemaphore/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/releasesemaphore/test1/CMakeLists.txt
index 4f6947476d..6941fb06b4 100644
--- a/src/pal/tests/palsuite/threading/releasesemaphore/test1/CMakeLists.txt
+++ b/src/pal/tests/palsuite/threading/releasesemaphore/test1/CMakeLists.txt
@@ -13,7 +13,5 @@ add_executable(paltest_releasesemaphore_test1
add_dependencies(paltest_releasesemaphore_test1 coreclrpal)
target_link_libraries(paltest_releasesemaphore_test1
- pthread
- m
- coreclrpal
+ ${COMMON_TEST_LIBRARIES}
)
diff --git a/src/pal/tools/clang-compiler-override-arm.txt b/src/pal/tools/clang-compiler-override-arm.txt
new file mode 100644
index 0000000000..da25715ade
--- /dev/null
+++ b/src/pal/tools/clang-compiler-override-arm.txt
@@ -0,0 +1,20 @@
+SET (CMAKE_C_FLAGS_INIT "-Wall -std=c11")
+SET (CMAKE_C_FLAGS_DEBUG_INIT "-g -O0")
+SET (CLR_C_FLAGS_CHECKED_INIT "-g -O1")
+# Refer to the below instruction to support __thread with -O2/-O3 on Linux/ARM
+# https://github.com/dotnet/coreclr/blob/master/Documentation/building/linux-instructions.md
+SET (CMAKE_C_FLAGS_RELEASE_INIT "-g -O1")
+SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-g -O1")
+
+SET (CMAKE_CXX_FLAGS_INIT "-Wall -Wno-null-conversion -std=c++11")
+SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g -O0")
+SET (CLR_CXX_FLAGS_CHECKED_INIT "-g -O1")
+SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-g -O1")
+SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-g -O1")
+
+SET (CLR_DEFINES_DEBUG_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
+SET (CLR_DEFINES_CHECKED_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
+SET (CLR_DEFINES_RELEASE_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
+SET (CLR_DEFINES_RELWITHDEBINFO_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
+
+SET (CMAKE_INSTALL_PREFIX $ENV{__CMakeBinDir})
diff --git a/src/pal/tools/gen-buildsys-clang.sh b/src/pal/tools/gen-buildsys-clang.sh
index 4054266f0b..db342eb2c9 100755
--- a/src/pal/tools/gen-buildsys-clang.sh
+++ b/src/pal/tools/gen-buildsys-clang.sh
@@ -18,18 +18,18 @@ then
fi
# Set up the environment to be used for building with clang.
-if which "clang-$2.$3" > /dev/null 2>&1
+if command -v "clang-$2.$3" > /dev/null
then
- export CC="$(which clang-$2.$3)"
- export CXX="$(which clang++-$2.$3)"
-elif which "clang$2$3" > /dev/null 2>&1
+ export CC="$(command -v clang-$2.$3)"
+ export CXX="$(command -v clang++-$2.$3)"
+elif command -v "clang$2$3" > /dev/null
then
- export CC="$(which clang$2$3)"
- export CXX="$(which clang++$2$3)"
-elif which clang > /dev/null 2>&1
+ export CC="$(command -v clang$2$3)"
+ export CXX="$(command -v clang++$2$3)"
+elif command -v clang > /dev/null
then
- export CC="$(which clang)"
- export CXX="$(which clang++)"
+ export CC="$(command -v clang)"
+ export CXX="$(command -v clang++)"
else
echo "Unable to find Clang Compiler"
exit 1
@@ -97,12 +97,12 @@ else
desired_llvm_version="-$desired_llvm_major_version.$desired_llvm_minor_version"
fi
locate_llvm_exec() {
- if which "$llvm_prefix$1$desired_llvm_version" > /dev/null 2>&1
+ if command -v "$llvm_prefix$1$desired_llvm_version" > /dev/null 2>&1
then
- echo "$(which $llvm_prefix$1$desired_llvm_version)"
- elif which "$llvm_prefix$1" > /dev/null 2>&1
+ echo "$(command -v $llvm_prefix$1$desired_llvm_version)"
+ elif command -v "$llvm_prefix$1" > /dev/null 2>&1
then
- echo "$(which $llvm_prefix$1)"
+ echo "$(command -v $llvm_prefix$1)"
else
exit 1
fi
@@ -128,26 +128,31 @@ if [[ -n "$LLDB_INCLUDE_DIR" ]]; then
fi
if [[ -n "$CROSSCOMPONENT" ]]; then
cmake_extra_defines="$cmake_extra_defines -DCLR_CROSS_COMPONENTS_BUILD=1"
-else
- if [[ -n "$CROSSCOMPILE" ]]; then
- if ! [[ -n "$ROOTFS_DIR" ]]; then
- echo "ROOTFS_DIR not set for crosscompile"
- exit 1
- fi
- if [[ -z $CONFIG_DIR ]]; then
- CONFIG_DIR="$1/cross/$build_arch"
- fi
- cmake_extra_defines="$cmake_extra_defines -C $CONFIG_DIR/tryrun.cmake"
- cmake_extra_defines="$cmake_extra_defines -DCMAKE_TOOLCHAIN_FILE=$CONFIG_DIR/toolchain.cmake"
+fi
+if [[ -n "$CROSSCOMPILE" ]]; then
+ if ! [[ -n "$ROOTFS_DIR" ]]; then
+ echo "ROOTFS_DIR not set for crosscompile"
+ exit 1
+ fi
+ if [[ -z $CONFIG_DIR ]]; then
+ CONFIG_DIR="$1/cross/$build_arch"
fi
+ cmake_extra_defines="$cmake_extra_defines -C $CONFIG_DIR/tryrun.cmake"
+ cmake_extra_defines="$cmake_extra_defines -DCMAKE_TOOLCHAIN_FILE=$CONFIG_DIR/toolchain.cmake"
fi
-if [ "$build_arch" == "arm-softfp" ]; then
+if [ "$build_arch" == "armel" ]; then
cmake_extra_defines="$cmake_extra_defines -DARM_SOFTFP=1"
fi
+if [ "$build_arch" == "arm" -o "$build_arch" == "armel" ]; then
+ overridefile=clang-compiler-override-arm.txt
+else
+ overridefile=clang-compiler-override.txt
+fi
+
cmake \
-G "$generator" \
- "-DCMAKE_USER_MAKE_RULES_OVERRIDE=$1/src/pal/tools/clang-compiler-override.txt" \
+ "-DCMAKE_USER_MAKE_RULES_OVERRIDE=$1/src/pal/tools/$overridefile" \
"-DCMAKE_AR=$llvm_ar" \
"-DCMAKE_LINKER=$llvm_link" \
"-DCMAKE_NM=$llvm_nm" \
diff --git a/src/palrt/CMakeLists.txt b/src/palrt/CMakeLists.txt
index 0b3397a8ff..e19b55d9dc 100644
--- a/src/palrt/CMakeLists.txt
+++ b/src/palrt/CMakeLists.txt
@@ -23,4 +23,4 @@ add_library_clr(palrt
)
# Install the static PAL library for VS
-install (TARGETS palrt DESTINATION lib)
+_install (TARGETS palrt DESTINATION lib)
diff --git a/src/palrt/coguid.cpp b/src/palrt/coguid.cpp
index cd03dce591..6c1efd460a 100644
--- a/src/palrt/coguid.cpp
+++ b/src/palrt/coguid.cpp
@@ -17,7 +17,7 @@ STDAPI_(int) StringFromGUID2(REFGUID rguid, LPOLESTR lptsz, int cchMax)
if (cchMax < 39)
return 0;
- return swprintf(lptsz, W("{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}"),
+ return swprintf_s(lptsz, cchMax, W("{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}"),
rguid.Data1, rguid.Data2, rguid.Data3,
rguid.Data4[0], rguid.Data4[1],
rguid.Data4[2], rguid.Data4[3],
diff --git a/src/publish.proj b/src/publish.proj
index d4e4a7f24b..c6c2149ba3 100644
--- a/src/publish.proj
+++ b/src/publish.proj
@@ -14,7 +14,7 @@
<ItemGroup>
<ForPublishing>
<RelativeBlobPath Condition="'$(PublishTestNativeBins)' != 'true'">$(__BuildType)/%(RecursiveDir)%(Filename)%(Extension)</RelativeBlobPath>
- <RelativeBlobPath Condition="'$(PublishTestNativeBins)' == 'true'">$(__DistroRid)-$(__BuildArch)/$(__BuildType)/%(RecursiveDir)%(Filename)%(Extension)</RelativeBlobPath>
+ <RelativeBlobPath Condition="'$(PublishTestNativeBins)' == 'true'">$(__BuildType)/%(RecursiveDir)%(Filename)%(Extension)</RelativeBlobPath>
</ForPublishing>
</ItemGroup>
<Error Condition="'@(ForPublishing)' == ''" Text="No items were found matching pattern '$(PublishPattern)'." />
@@ -22,7 +22,7 @@
<PropertyGroup>
<PublishPattern Condition="'$(PublishPattern)' == '' and '$(PublishTestNativeBins)' != 'true'">$(PackagesBinDir)**\*.nupkg</PublishPattern>
- <PublishPattern Condition="'$(PublishPattern)' == '' and '$(PublishTestNativeBins)' == 'true'">$(OutputPath)\tests\src\**</PublishPattern>
+ <PublishPattern Condition="'$(PublishPattern)' == '' and '$(PublishTestNativeBins)' == 'true'">$(OutputPath)\bin\**</PublishPattern>
</PropertyGroup>
<Target Name="CreateContainerName"
@@ -30,9 +30,10 @@
Condition="'$(ContainerName)' == '' or '$(PublishTestNativeBins)' == 'true'">
<PropertyGroup>
<ContainerName Condition="'$(__Container)' == '' and '$(PublishTestNativeBins)' != 'true'">coreclr-$(PreReleaseLabel)-$(BuildNumberMajor)-$(BuildNumberMinor)</ContainerName>
- <ContainerName Condition="'$(__Container)' == '' and '$(PublishTestNativeBins)' == 'true'">coreclr-$(PreReleaseLabel)-$(BuildNumberMajor)-$(BuildNumberMinor)-test-native-bins</ContainerName>
+ <ContainerName Condition="'$(__Container)' == '' and '$(PublishTestNativeBins)' == 'true'">coreclr-$(PreReleaseLabel)-$(BuildNumberMajor)-$(BuildNumberMinor)-$(__DistroRid)-$(__BuildArch)</ContainerName>
<ContainerName Condition="'$(__Container)' != '' and '$(PublishTestNativeBins)' != 'true'">$(__Container)</ContainerName>
- <ContainerName Condition="'$(__Container)' != '' and '$(PublishTestNativeBins)' == 'true'">$(__Container)-test-native-bins</ContainerName>
+ <ContainerName Condition="'$(__Container)' != '' and '$(PublishTestNativeBins)' == 'true'">$(__Container)-$(__DistroRid)-$(__BuildArch)</ContainerName>
+ <ContainerName>$(ContainerName.Replace(".","-"))</ContainerName>
</PropertyGroup>
</Target>
diff --git a/src/strongname/api/api.props b/src/strongname/api/api.props
deleted file mode 100644
index 2c4c278a69..0000000000
--- a/src/strongname/api/api.props
+++ /dev/null
@@ -1,43 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <PropertyGroup>
- <UserIncludes>
- $(UserIncludes);
- $(Clrbase)\src\StrongName\inc;
- $(Clrbase)\src\inc;
- $(Clrbase)\src\md\inc;
- $(Clrbase)\src\md\compiler;
- $(Clrbase)\src\vm
- </UserIncludes>
-
- <UserIncludes Condition="'$(StrongnameInVm)' == 'true'">
- $(UserIncludes);
- $(Clrbase)\src\vm\$(TargetCpu)
- </UserIncludes>
-
- <CDefines Condition="'$(StrongnameInVm)' == 'true'">$(CDefines);STRONGNAME_IN_VM</CDefines>
-
- <CDefines>$(CDefines);SNAPI_INTERNAL</CDefines>
- <CDefines>$(CDefines);UNICODE;_UNICODE</CDefines>
-
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
-
- <PCHHeader>common.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>$(Clrbase)\src\StrongName\api\common.cpp</PCHCompile>
- </PropertyGroup>
-
- <ItemGroup>
- <ProjectReference Include="$(ClrSrcDirectory)inc\corguids.nativeproj">
- <Comment>clrinternal.h</Comment>
- </ProjectReference>
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="$(Clrbase)\src\StrongName\api\strongname.cpp" />
- <CppCompile Include="$(Clrbase)\src\StrongName\api\strongnamecoreclr.cpp" />
- <CppCompile Include="$(Clrbase)\src\StrongName\api\strongnameinternal.cpp" />
- </ItemGroup>
-
-</Project> \ No newline at end of file
diff --git a/src/strongname/api/crossgen/strongname_crossgen.nativeproj b/src/strongname/api/crossgen/strongname_crossgen.nativeproj
deleted file mode 100644
index 55e7cc8cd9..0000000000
--- a/src/strongname/api/crossgen/strongname_crossgen.nativeproj
+++ /dev/null
@@ -1,18 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <PropertyGroup>
- <StrongnameInVm>true</StrongnameInVm>
- </PropertyGroup>
- <Import Project="$(ClrBase)\src\strongname\api\api.props" />
-
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>strongname_crossgen</OutputName>
- </PropertyGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/strongname/api/dac/dirs.proj b/src/strongname/api/dac/dirs.proj
deleted file mode 100644
index 6ca01ad4ad..0000000000
--- a/src/strongname/api/dac/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\strongname_dac.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/strongname/api/dirs.proj b/src/strongname/api/dirs.proj
deleted file mode 100644
index 996632d796..0000000000
--- a/src/strongname/api/dirs.proj
+++ /dev/null
@@ -1,22 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="dac\dirs.proj" />
- <ProjectFile Condition="'$(BuildProjectName)' != 'CoreSys'" Include="standalone\strongname.nativeproj" />
- <ProjectFile Condition="'$(BuildProjectName)' != 'CoreSys'" Include="standalone-winrt\strongname-winrt.nativeproj" />
- <ProjectFile Include="wks\strongname_wks.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/strongname/api/wks/strongname_wks.nativeproj b/src/strongname/api/wks/strongname_wks.nativeproj
deleted file mode 100644
index fcfa71ae6c..0000000000
--- a/src/strongname/api/wks/strongname_wks.nativeproj
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <PropertyGroup>
- <StrongnameInVm>true</StrongnameInVm>
- </PropertyGroup>
- <Import Project="$(ClrBase)\src\strongname\api\api.props" />
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>strongname_wks</OutputName>
- </PropertyGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/strongname/dirs.proj b/src/strongname/dirs.proj
deleted file mode 100644
index 9cb3cf6724..0000000000
--- a/src/strongname/dirs.proj
+++ /dev/null
@@ -1,29 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <ItemDefinitionGroup>
- <ProjectFile>
- <ProductGroups>FX</ProductGroups>
- </ProjectFile>
- </ItemDefinitionGroup>
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="api\dirs.proj" />
- <ProjectFile Include="inc\StrongName_inc.nativeproj" />
- <ProjectFile Include="tools\dirs.proj" >
- <ProductGroups>VS;FX</ProductGroups>
- </ProjectFile>
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/strongname/inc/StrongName_inc.nativeproj b/src/strongname/inc/StrongName_inc.nativeproj
deleted file mode 100644
index c72249f207..0000000000
--- a/src/strongname/inc/StrongName_inc.nativeproj
+++ /dev/null
@@ -1,31 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>PUBLISH</TargetType>
- <OutputName>StrongName</OutputName>
- </PropertyGroup>
-
- <!--Leaf Project Items-->
- <ItemGroup>
- <PublishPartLinked Include="StrongName.h">
- <Visibility>Inter</Visibility>
- <FileType>Include</FileType>
- </PublishPartLinked>
- </ItemGroup>
-
- <ItemGroup>
- <CopyFile Include="StrongName.h">
- <DestFolder>$(BinariesDirectory)</DestFolder>
- </CopyFile>
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/strongname/strongname.vcxproj b/src/strongname/strongname.vcxproj
deleted file mode 100644
index 66f370883a..0000000000
--- a/src/strongname/strongname.vcxproj
+++ /dev/null
@@ -1,396 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="amd64chk|Win32">
- <Configuration>amd64chk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64corechk|Win32">
- <Configuration>amd64corechk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64coredbg|Win32">
- <Configuration>amd64coredbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64coreret|Win32">
- <Configuration>amd64coreret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64dbg|Win32">
- <Configuration>amd64dbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64ret|Win32">
- <Configuration>amd64ret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="armcorechk|Win32">
- <Configuration>armcorechk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="armcoredbg|Win32">
- <Configuration>armcoredbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="armcoreret|Win32">
- <Configuration>armcoreret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Mac.inteldbg|Win32">
- <Configuration>Mac.inteldbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86chk|Win32">
- <Configuration>x86chk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86corechk|Win32">
- <Configuration>x86corechk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86coredbg|Win32">
- <Configuration>x86coredbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86coreret|Win32">
- <Configuration>x86coreret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86dbg|Win32">
- <Configuration>x86dbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86ret|Win32">
- <Configuration>x86ret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{6AA7CBD3-6CAA-4159-B5B6-DEFE6065D41B}</ProjectGuid>
- <RootNamespace>StrongName</RootNamespace>
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- <Keyword>MakeFileProj</Keyword>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcoreret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcorechk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcoredbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64coreret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64coredbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64corechk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Mac.inteldbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86coreret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86coredbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86corechk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64ret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64dbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64chk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86ret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86chk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86dbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='armcoreret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='armcorechk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='armcoredbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64coreret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64coredbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64corechk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Mac.inteldbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86coreret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86coredbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86corechk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64ret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64dbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64chk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86ret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86chk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86dbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>12.0.20617.1</_ProjectFileVersion>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86dbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86chk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86ret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64chk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64dbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64ret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86corechk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86coredbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86coreret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Mac.inteldbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(SolutionDir)\..\..\..\rotor\palrt\inc;$(SolutionDir)\..\..\..\rotor\pal\inc;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64corechk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64coredbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64coreret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcoredbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcorechk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcoreret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine />
- <NMakeReBuildCommandLine />
- <NMakeCleanCommandLine />
- <NMakeOutput />
- <NMakeIncludeSearchPath>.\inc;..\inc;..\md\inc;..\vm;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <ItemDefinitionGroup>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="api\common.cpp" />
- <ClCompile Include="api\StrongName.cpp" />
- <ClCompile Include="api\StrongNameCoreClr.cpp" />
- <ClCompile Include="api\StrongNameInternal.cpp" />
- <ClCompile Include="tools\slstampkey\slstampkey.cpp" />
- <ClCompile Include="tools\sn\sn.cpp" />
- <ClCompile Include="tools\snhdr\snhdr.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="api\common.h" />
- <ClInclude Include="api\CryptApis.h" />
- <ClInclude Include="inc\EcmaKey.h" />
- <ClInclude Include="inc\sncoreclr.h" />
- <ClInclude Include="inc\StrongName.h" />
- <ClInclude Include="inc\StrongNameHolders.h" />
- <ClInclude Include="inc\StrongNameInternal.h" />
- <ClInclude Include="inc\TheKey.h" />
- <ClInclude Include="inc\TheTestKey.h" />
- <ClInclude Include="inc\WellKnownImages.h" />
- <ClInclude Include="tools\sn\resources.h" />
- </ItemGroup>
- <ItemGroup>
- <None Include="inc\sources" />
- <None Include="tools\slstampkey\sources" />
- <None Include="tools\sn\sources" />
- <None Include="tools\snhdr\sources" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="tools\slstampkey\slstampkey.rc" />
- <ResourceCompile Include="tools\sn\sn.rc" />
- <ResourceCompile Include="tools\snhdr\snhdr.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/src/strongname/strongname.vcxproj.filters b/src/strongname/strongname.vcxproj.filters
deleted file mode 100644
index 77aa40e76c..0000000000
--- a/src/strongname/strongname.vcxproj.filters
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="api">
- <UniqueIdentifier>{7388d6b8-789c-47c9-80a2-66ee17a5958c}</UniqueIdentifier>
- <Extensions>cpp</Extensions>
- </Filter>
- <Filter Include="inc">
- <UniqueIdentifier>{26401483-02d0-4bef-8fb5-30e94e81f89d}</UniqueIdentifier>
- <Extensions>h</Extensions>
- </Filter>
- <Filter Include="slstampkey">
- <UniqueIdentifier>{e15d16b5-68c0-45bf-9836-33b5790e6da5}</UniqueIdentifier>
- <Extensions>cpp</Extensions>
- </Filter>
- <Filter Include="sn">
- <UniqueIdentifier>{c014e6a5-fc76-4b23-8f0b-bd4c275b8d6b}</UniqueIdentifier>
- <Extensions>cpp</Extensions>
- </Filter>
- <Filter Include="snhdr">
- <UniqueIdentifier>{ec414528-cbc8-41ca-95bb-34b0babd892d}</UniqueIdentifier>
- <Extensions>cpp</Extensions>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="api\common.cpp">
- <Filter>api</Filter>
- </ClCompile>
- <ClCompile Include="api\StrongName.cpp">
- <Filter>api</Filter>
- </ClCompile>
- <ClCompile Include="api\StrongNameCoreClr.cpp">
- <Filter>api</Filter>
- </ClCompile>
- <ClCompile Include="api\StrongNameInternal.cpp">
- <Filter>api</Filter>
- </ClCompile>
- <ClCompile Include="tools\slstampkey\slstampkey.cpp">
- <Filter>slstampkey</Filter>
- </ClCompile>
- <ClCompile Include="tools\sn\sn.cpp">
- <Filter>sn</Filter>
- </ClCompile>
- <ClCompile Include="tools\snhdr\snhdr.cpp">
- <Filter>snhdr</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="api\common.h">
- <Filter>api</Filter>
- </ClInclude>
- <ClInclude Include="api\CryptApis.h">
- <Filter>api</Filter>
- </ClInclude>
- <ClInclude Include="inc\EcmaKey.h">
- <Filter>inc</Filter>
- </ClInclude>
- <ClInclude Include="inc\sncoreclr.h">
- <Filter>inc</Filter>
- </ClInclude>
- <ClInclude Include="inc\StrongName.h">
- <Filter>inc</Filter>
- </ClInclude>
- <ClInclude Include="inc\StrongNameHolders.h">
- <Filter>inc</Filter>
- </ClInclude>
- <ClInclude Include="inc\StrongNameInternal.h">
- <Filter>inc</Filter>
- </ClInclude>
- <ClInclude Include="inc\TheKey.h">
- <Filter>inc</Filter>
- </ClInclude>
- <ClInclude Include="inc\TheTestKey.h">
- <Filter>inc</Filter>
- </ClInclude>
- <ClInclude Include="inc\WellKnownImages.h">
- <Filter>inc</Filter>
- </ClInclude>
- <ClInclude Include="tools\sn\resources.h">
- <Filter>sn</Filter>
- </ClInclude>
- </ItemGroup>
- <ItemGroup>
- <None Include="inc\sources">
- <Filter>inc</Filter>
- </None>
- <None Include="tools\slstampkey\sources">
- <Filter>slstampkey</Filter>
- </None>
- <None Include="tools\sn\sources">
- <Filter>sn</Filter>
- </None>
- <None Include="tools\snhdr\sources">
- <Filter>snhdr</Filter>
- </None>
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="tools\slstampkey\slstampkey.rc">
- <Filter>slstampkey</Filter>
- </ResourceCompile>
- <ResourceCompile Include="tools\sn\sn.rc">
- <Filter>sn</Filter>
- </ResourceCompile>
- <ResourceCompile Include="tools\snhdr\snhdr.rc">
- <Filter>snhdr</Filter>
- </ResourceCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/src/strongname/strongname.vcxproj.vspscc b/src/strongname/strongname.vcxproj.vspscc
deleted file mode 100644
index b6d32892fd..0000000000
--- a/src/strongname/strongname.vcxproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
diff --git a/src/syncAzure.proj b/src/syncAzure.proj
index 0b71a3bdcd..a5bb4958a9 100644
--- a/src/syncAzure.proj
+++ b/src/syncAzure.proj
@@ -5,10 +5,10 @@
<PropertyGroup>
<ContainerNamePrefix Condition="'$(ContainerNamePrefix)' == ''">coreclr-$(PreReleaseLabel)</ContainerNamePrefix>
<ContainerName Condition="'$(__Container)' == '' and '$(ContainerNamePrefix)' != '' and '$(BuildNumberMajor)' != '' and '$(BuildNumberMinor)' != ''">$(ContainerNamePrefix)-$(BuildNumberMajor)-$(BuildNumberMinor)</ContainerName>
- <ContainerName Condition="'$(__Container)' != '' and '$(PublishTestNativeBins)' != 'true'">$(__Container)</ContainerName>
- <ContainerName Condition="'$(__Container)' != '' and '$(PublishTestNativeBins)' == 'true'">$(__Container)-test-native-bins</ContainerName>
+ <ContainerName Condition="'$(__Container)' != ''">$(__Container)</ContainerName>
+ <ContainerName>$(ContainerName.Replace(".","-"))</ContainerName>
<DownloadDirectory Condition="'$(PublishTestNativeBins)' != 'true'">$(PackagesDir)AzureTransfer</DownloadDirectory>
- <DownloadDirectory Condition="'$(PublishTestNativeBins)' == 'true'">$(PackagesDir)TestNativeBins</DownloadDirectory>
+ <DownloadDirectory Condition="'$(PublishTestNativeBins)' == 'true'">$(PackagesDir)TestNativeBins\$(RuntimeId)</DownloadDirectory>
</PropertyGroup>
<Import Project="$(ToolsDir)SyncCloudContent.targets" />
@@ -16,6 +16,8 @@
<Target Name="ValidateRequiredProperties">
<Error Condition="'$(CloudDropAccountName)' == ''" Text="Missing property CloudDropAccountName." />
<Error Condition="'$(CloudDropAccessToken)' == ''" Text="Missing property CloudDropAccessToken." />
+ <Error Condition="'$(__Container)' == '' and '$(PublishTestNativeBins)' == 'true'" Text="Missing property Container." />
+ <Error Condition="'$(RuntimeId)' == '' and '$(PublishTestNativeBins)' == 'true'" Text="Missing property RuntimeId." />
</Target>
<Target Name="Build" DependsOnTargets="ValidateRequiredProperties;DownloadBlobsFromAzureTargets" />
diff --git a/src/tools/GenClrDebugResource/GenClrDebugResource.nativeproj b/src/tools/GenClrDebugResource/GenClrDebugResource.nativeproj
deleted file mode 100644
index 9bd544d8d0..0000000000
--- a/src/tools/GenClrDebugResource/GenClrDebugResource.nativeproj
+++ /dev/null
@@ -1,26 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <OutputName>GenClrDebugResource</OutputName>
- <TargetType>PROGRAM</TargetType>
- <LinkSubsystem>console</LinkSubsystem>
- <LinkGenerateManifest>true</LinkGenerateManifest>
- <LinkAdditionalOptions>$(LinkAdditionalOptions) /MANIFEST</LinkAdditionalOptions>
- <UseMsvcrt>false</UseMsvcrt>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="GenClrDebugResource.cpp" />
- </ItemGroup>
- <ItemGroup>
- <RCResourceFile Include="native.rc" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project> \ No newline at end of file
diff --git a/src/tools/InjectResource/InjectResource.nativeproj b/src/tools/InjectResource/InjectResource.nativeproj
deleted file mode 100644
index 057d01f4ec..0000000000
--- a/src/tools/InjectResource/InjectResource.nativeproj
+++ /dev/null
@@ -1,27 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <OutputName>InjectResource</OutputName>
- <TargetType>PROGRAM</TargetType>
- <LinkSubsystem>console</LinkSubsystem>
- <BinplaceSymbols>true</BinplaceSymbols>
- <LinkGenerateManifest>true</LinkGenerateManifest>
- <LinkAdditionalOptions>$(LinkAdditionalOptions) /MANIFEST</LinkAdditionalOptions>
- <UseMsvcrt>false</UseMsvcrt>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="InjectResource.cpp" />
- </ItemGroup>
- <ItemGroup>
- <RCResourceFile Include="native.rc" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project> \ No newline at end of file
diff --git a/src/tools/crossgen/crossgen.nativeproj b/src/tools/crossgen/crossgen.nativeproj
deleted file mode 100644
index 28e4741f4d..0000000000
--- a/src/tools/crossgen/crossgen.nativeproj
+++ /dev/null
@@ -1,94 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <OutputName>crossgen</OutputName>
- <TargetType>PROGRAM</TargetType>
- <LinkSubsystem>console</LinkSubsystem>
- <EntryPoint>wmain</EntryPoint>
- <LinkGenerateManifest>true</LinkGenerateManifest>
- <LinkAdditionalOptions>$(LinkAdditionalOptions) /MANIFEST</LinkAdditionalOptions>
- <UserIncludes>$(UserIncludes);$(ClrSrcDirectory)tools\util</UserIncludes>
- <IsDesktopTool>true</IsDesktopTool>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <TargetLib Include="$(SdkLibPath)\ole32.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- <TargetLib Include="$(SdkLibPath)\user32.lib" />
- <TargetLib Include="$(SdkLibPath)\version.lib" />
- <TargetLib Include="$(SdkLibPath)\shlwapi.lib" />
- <TargetLib Include="$(SdkLibPath)\bcrypt.lib" />
- </ItemGroup>
-
- <ItemGroup>
- <TargetLib Condition="'$(_BuildArch)' != 'amd64'" Include="$(ClrLibPath)\corguids_x86.lib">
- <ProjectReference>$(ClrSrcDirectory)incx86\corguids.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Condition="'$(_BuildArch)' == 'amd64'" Include="$(ClrLibPath)\corguids_amd64.lib">
- <ProjectReference>$(ClrSrcDirectory)incamd64\corguids.nativeproj</ProjectReference>
- </TargetLib>
- <LinkPreCrtLibs Include="$(ClrLibPath)\utilcode_crossgen.lib" />
- <TargetLib Include="$(ClrLibPath)\utilcode_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)utilcode\crossgen\utilcode_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\corzap_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)zap\crossgen\zap_crossgen.nativeproj</ProjectReference>
- </TargetLib>
-
- <!-- We build RyuJIT only for amd64 and arm64, and use JIT32 for ARM and x86 -->
- <TargetLib Include="$(ClrLibPath)\jit_crossgen.lib">
- <ProjectReference Condition="'$(_BuildArch)' == 'amd64' or '$(_BuildArch)' == 'arm64'">$(ClrSrcDirectory)jit\crossgen\jit_crossgen.nativeproj</ProjectReference>
- <ProjectReference Condition="'$(_BuildArch)' != 'amd64' and '$(_BuildArch)' != 'arm64'">$(ClrSrcDirectory)jit32\crossgen\jit_crossgen.nativeproj</ProjectReference>
- </TargetLib>
-
- <TargetLib Include="$(ClrLibPath)\gcinfo_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)gcinfo\crossgen\gcinfo_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\gcdump_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)gcdump\crossgen\gcdump_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\strongname_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)strongname\api\crossgen\strongname_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\mdcompiler_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)md\compiler\crossgen\mdcompiler_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\mdwinmd_crossgen.lib" Condition="'$(FeatureCominterop)' == 'true'">
- <ProjectReference>$(ClrSrcDirectory)md\winmd\crossgen\mdwinmd_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\mdruntimerw_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)md\enc\crossgen\mdruntimerw_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\mdhotdata_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)md\hotdata\crossgen\mdhotdata_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\mdruntime_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)md\runtime\crossgen\mdruntime_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\cee_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)vm\crossgen\wks_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\mscorlib_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)vm\crossgen_mscorlib\mscorlib_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- <TargetLib Include="$(ClrLibPath)\v3binder_crossgen.lib">
- <ProjectReference>$(ClrSrcDirectory)binder\v3binder_crossgen\v3binder_crossgen.nativeproj</ProjectReference>
- </TargetLib>
- </ItemGroup>
- <ItemGroup>
- <RCResourceFile Include="native.rc" />
- </ItemGroup>
- <ItemGroup>
- <CppCompile Include="crossgen.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\tools\util\consoleargs.cpp" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-
-</Project>
diff --git a/src/tools/dirs.proj b/src/tools/dirs.proj
deleted file mode 100644
index 5f21b67fe9..0000000000
--- a/src/tools/dirs.proj
+++ /dev/null
@@ -1,77 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <ItemDefinitionGroup>
- <ProjectFile>
- <ProductGroups>FX</ProductGroups>
- </ProjectFile>
- </ItemDefinitionGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreClr)' != 'true'">
- <ProjectFile Include="allocationsprofiler\allocationsprofiler.nativeproj" />
- <ProjectFile Include="appcompatgenerator\appcompatgenerator.nativeproj" />
- <ProjectFile Include="applaunch\applaunch.nativeproj" />
- <ProjectFile Include="asmlist\asmlist.nativeproj" />
- <ProjectFile Include="asmmeta\asmmeta.nativeproj" />
- <ProjectFile Include="bbsweep\bbsweep.nativeproj" />
- <ProjectFile Include="bindingsnapshot\bindingsnapshot.nativeproj" />
- <ProjectFile Include="clrver\clrver.nativeproj" />
- <ProjectFile Include="cordmpmerge\cordmpmerge.nativeproj" />
- <ProjectFile Include="corflags\corflags.nativeproj" />
- <ProjectFile Include="fixpdbpath\fixpdbpath.nativeproj" />
- <ProjectFile Include="gac\dirs.proj" />
- <ProjectFile Include="installhook\dirs.proj" />
- <ProjectFile Include="ismgd\ismgd.nativeproj" />
- <ProjectFile Include="jitmanager\jitmgr.nativeproj" />
- <ProjectFile Include="ldr64\ldr64.nativeproj" Condition="'$(BuildArchitecture)' == 'amd64'" />
- <ProjectFile Include="logdiff\Logdiff.csproj" />
- <ProjectFile Include="mdepends\mdepends.nativeproj" />
- <ProjectFile Include="metainfo\metainfo.nativeproj" />
- <ProjectFile Include="ngen\ngen.nativeproj" />
- <ProjectFile Include="ngenoffline\ngenoffline.nativeproj" />
- <ProjectFile Include="nidump\nidump.nativeproj" />
- <ProjectFile Include="ndpsetup\ndpsetup.nativeproj" />
- <ProjectFile Include="peverify\dirs.proj" />
- <ProjectFile Include="profpick\profpick.nativeproj" />
- <ProjectFile Include="regtlb\regtlb.nativeproj" />
- <ProjectFile Include="resetdelaysign\resetdelaysign.nativeproj" />
- <ProjectFile Include="showname\showname.nativeproj" />
- <ProjectFile Include="strikers\strikers.nativeproj" />
- <ProjectFile Include="tlbref\tlbref.nativeproj" />
- <ProjectFile Include="verifyasmhash\verifyasmhash.nativeproj" />
- <ProjectFile Include="verstamp\verstamp.nativeproj" Condition="'$(BuildArchitecture)' == 'i386'" />
- <ProjectFile Include="ngentask\ngentask.csproj"/>
- <ProjectFile Include="ngentasklauncher\ngentasklauncher.csproj"/>
- <ProjectFile Include="McjProfofileUtil\McjProfileUtil.csproj" Condition="'$(BuildArchitecture)' != 'arm' and '$(BuildArchitecture)' != 'arm64'" />
- <ProjectFile Include="winphoneintegrate\winphoneintegrate.csproj" />
- <ProjectFile Include="crossgen\crossgen.nativeproj" />
- <ProjectFile Include="GenClrDebugResource\GenClrDebugResource.nativeproj" >
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- <ProjectFile Include="InjectResource\InjectResource.nativeproj" Condition="'$(BuildArchitecture)' == 'i386'">
- <ProductGroups>FX;PK</ProductGroups>
- </ProjectFile>
- </ItemGroup>
-
- <!-- CoreClr -->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreClr)' == 'true'">
- <ProjectFile Include="bbsweep\bbsweep.nativeproj" Condition="'$(BuildProjectName)' == 'CoreSys'" />
- <ProjectFile Condition="'$(BuildArchitecture)' != 'arm' and '$(BuildArchitecture)' != 'arm64' and '$(BuildProjectName)' != 'CoreSys'" Include="ildbsymbols\ildbsymbols.nativeproj" />
- <ProjectFile Include="coregen\coregen.nativeproj" />
- <ProjectFile Include="nidump\nidump.nativeproj" Condition="!('$(BuildProjectName)' == 'CoreSys' and ('$(BuildArchitecture)' == 'arm' or '$(BuildArchitecture)' == 'arm64'))"/>
- <ProjectFile Include="crossgen\crossgen.nativeproj" />
- <ProjectFile Include="spawnnowow\spawnnowow.nativeproj" Condition="('$(BuildArchitecture)' == 'i386' or '$(BuildArchitecture)' == 'amd64' or '$(BuildArchitecture)' == 'ia64') and '$(BuildProjectName)' != 'CoreSys'" />
- <ProjectFile Condition="'$(BuildProjectName)' == 'CoreSys'" Include="winphoneintegrate\winphoneintegrate.csproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/tools/metainfo/metainfo.nativeproj b/src/tools/metainfo/metainfo.nativeproj
deleted file mode 100644
index 7591a40d63..0000000000
--- a/src/tools/metainfo/metainfo.nativeproj
+++ /dev/null
@@ -1,42 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <OutputName>metainfo</OutputName>
- <FileToMarkForSigning>$(BinariesDirectory)\metainfo.exe</FileToMarkForSigning>
- <TargetType>PROGRAM</TargetType>
- <LinkSubsystem>console</LinkSubsystem>
- <EntryPoint>wmain</EntryPoint>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <LinkGenerateManifest>true</LinkGenerateManifest>
- <LinkAdditionalOptions>$(LinkAdditionalOptions) /MANIFEST</LinkAdditionalOptions>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <LinkPreCrtLibs Include="$(ClrLibPath)\utilcodenohost.lib">
- <ProjectReference>$(ClrSrcDirectory)utilcode\dyncrtnohost\dyncrtnohost.nativeproj</ProjectReference>
- </LinkPreCrtLibs>
- <LinkPreCrtLibs Include="$(ClrLibPath)\MDHotData.lib" />
-
- <TargetLib Include="$(ClrLibPath)\corguids.lib" />
- <TargetLib Include="$(SdkLibPath)\mscoree.lib" />
- <TargetLib Include="$(SdkLibPath)\ole32.lib" />
- <TargetLib Include="$(SdkLibPath)\user32.lib" />
- <TargetLib Include="$(SdkLibPath)\uuid.lib" />
- <TargetLib Include="$(SdkLibPath)\oleaut32.lib" />
- <ProjectReference Include="$(ClrSrcDirectory)md\hotdata\full\mdhotdata.nativeproj">
- <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <RCResourceFile Include="native.rc" />
- </ItemGroup>
- <ItemGroup>
- <CppCompile Include="mdinfo.cpp" />
- <CppCompile Include="mdobj.cpp" />
- <CppCompile Include="metainfo.cpp" />
- </ItemGroup>
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/unwinder/CMakeLists.txt b/src/unwinder/CMakeLists.txt
index bf1cfa2938..5cd7bae337 100644
--- a/src/unwinder/CMakeLists.txt
+++ b/src/unwinder/CMakeLists.txt
@@ -12,12 +12,10 @@ set(UNWINDER_SOURCES
)
# Include platform specific unwinder for applicable (native and cross-target) builds.
-if(NOT DEFINED CLR_CMAKE_TARGET_ARCH_I386)
- include_directories(${ARCH_SOURCES_DIR})
- list(APPEND UNWINDER_SOURCES
- ${ARCH_SOURCES_DIR}/unwinder_${ARCH_SOURCES_DIR}.cpp
- )
-endif()
+include_directories(${ARCH_SOURCES_DIR})
+list(APPEND UNWINDER_SOURCES
+ ${ARCH_SOURCES_DIR}/unwinder_${ARCH_SOURCES_DIR}.cpp
+)
convert_to_absolute_path(UNWINDER_SOURCES ${UNWINDER_SOURCES})
diff --git a/src/unwinder/dac/dirs.proj b/src/unwinder/dac/dirs.proj
deleted file mode 100644
index 77738732ed..0000000000
--- a/src/unwinder/dac/dirs.proj
+++ /dev/null
@@ -1,18 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="hostlocal\unwinder_dac.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/unwinder/dac/hostlocal/unwinder_dac.nativeproj b/src/unwinder/dac/hostlocal/unwinder_dac.nativeproj
deleted file mode 100644
index 3b562e07f9..0000000000
--- a/src/unwinder/dac/hostlocal/unwinder_dac.nativeproj
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>unwinder_dac</OutputName>
- </PropertyGroup>
-
- <!-- compile items -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\unwinder\unwinder.targets" />
-
-</Project>
diff --git a/src/unwinder/dac/hostwinamd64/unwinder_dac.nativeproj b/src/unwinder/dac/hostwinamd64/unwinder_dac.nativeproj
deleted file mode 100644
index e0dff469a4..0000000000
--- a/src/unwinder/dac/hostwinamd64/unwinder_dac.nativeproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <!-- xplat Windows host, local target DAC build -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetTargetLocal.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetHostWinAMD64.props" />
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>unwinder_dac_amd64</OutputName>
- </PropertyGroup>
-
- <!-- compile items -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\unwinder\unwinder.targets" />
-
-</Project>
diff --git a/src/unwinder/dac/hostwinx86/unwinder_dac.nativeproj b/src/unwinder/dac/hostwinx86/unwinder_dac.nativeproj
deleted file mode 100644
index a3538c3383..0000000000
--- a/src/unwinder/dac/hostwinx86/unwinder_dac.nativeproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <!-- xplat win32 host, local target DAC build -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetTargetLocal.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetHostWinx86.props" />
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>unwinder_dac_x86</OutputName>
- </PropertyGroup>
-
- <!-- compile items -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\unwinder\unwinder.targets" />
-
-</Project>
diff --git a/src/unwinder/dirs.proj b/src/unwinder/dirs.proj
deleted file mode 100644
index 8b511971e3..0000000000
--- a/src/unwinder/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="dac\dirs.proj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/unwinder/i386/unwinder_i386.cpp b/src/unwinder/i386/unwinder_i386.cpp
new file mode 100644
index 0000000000..ca9e28e44a
--- /dev/null
+++ b/src/unwinder/i386/unwinder_i386.cpp
@@ -0,0 +1,194 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+//
+
+#include "stdafx.h"
+#include "unwinder_i386.h"
+
+#ifdef WIN64EXCEPTIONS
+/*++
+
+Routine Description:
+
+ This function virtually unwinds the specified function by executing its
+ prologue code backward or its epilogue code forward.
+
+ If a context pointers record is specified, then the address where each
+ nonvolatile registers is restored from is recorded in the appropriate
+ element of the context pointers record.
+
+Arguments:
+
+ HandlerType - Supplies the handler type expected for the virtual unwind.
+ This may be either an exception or an unwind handler. A flag may
+ optionally be supplied to avoid epilogue detection if it is known
+ the specified control PC is not located inside a function epilogue.
+
+ ImageBase - Supplies the base address of the image that contains the
+ function being unwound.
+
+ ControlPc - Supplies the address where control left the specified
+ function.
+
+ FunctionEntry - Supplies the address of the function table entry for the
+ specified function.
+
+ ContextRecord - Supplies the address of a context record.
+
+
+ HandlerData - Supplies a pointer to a variable that receives a pointer
+ the the language handler data.
+
+ EstablisherFrame - Supplies a pointer to a variable that receives the
+ the establisher frame pointer value.
+
+ ContextPointers - Supplies an optional pointer to a context pointers
+ record.
+
+ HandlerRoutine - Supplies an optional pointer to a variable that receives
+ the handler routine address. If control did not leave the specified
+ function in either the prologue or an epilogue and a handler of the
+ proper type is associated with the function, then the address of the
+ language specific exception handler is returned. Otherwise, NULL is
+ returned.
+--*/
+HRESULT
+OOPStackUnwinderX86::VirtualUnwind(
+ __in DWORD HandlerType,
+ __in DWORD ImageBase,
+ __in DWORD ControlPc,
+ __in _PIMAGE_RUNTIME_FUNCTION_ENTRY FunctionEntry,
+ __inout PCONTEXT ContextRecord,
+ __out PVOID *HandlerData,
+ __out PDWORD EstablisherFrame,
+ __inout_opt PKNONVOLATILE_CONTEXT_POINTERS ContextPointers,
+ __deref_opt_out_opt PEXCEPTION_ROUTINE *HandlerRoutine
+ )
+{
+ if (HandlerRoutine != NULL)
+ {
+ *HandlerRoutine = NULL;
+ }
+
+ REGDISPLAY rd;
+
+ FillRegDisplay(&rd, ContextRecord);
+
+ rd.PCTAddr = (UINT_PTR)&(ContextRecord->Eip);
+
+ if (ContextPointers)
+ {
+ rd.pCurrentContextPointers = ContextPointers;
+ }
+
+ CodeManState codeManState;
+ codeManState.dwIsSet = 0;
+
+ EECodeInfo codeInfo;
+ codeInfo.Init((PCODE) ControlPc);
+
+ if (!UnwindStackFrame(&rd, &codeInfo, UpdateAllRegs, &codeManState, NULL))
+ {
+ return HRESULT_FROM_WIN32(ERROR_READ_FAULT);
+ }
+
+ ContextRecord->ContextFlags |= CONTEXT_UNWOUND_TO_CALL;
+
+#define ARGUMENT_AND_SCRATCH_REGISTER(reg) if (rd.pCurrentContextPointers->reg) ContextRecord->reg = *rd.pCurrentContextPointers->reg;
+ ENUM_ARGUMENT_AND_SCRATCH_REGISTERS();
+#undef ARGUMENT_AND_SCRATCH_REGISTER
+
+#define CALLEE_SAVED_REGISTER(reg) if (rd.pCurrentContextPointers->reg) ContextRecord->reg = *rd.pCurrentContextPointers->reg;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+ ContextRecord->Esp = rd.SP;
+ ContextRecord->Eip = rd.ControlPC;
+
+ // For x86, the value of Establisher Frame Pointer is Caller SP
+ //
+ // (Please refers to CLR ABI for details)
+ *EstablisherFrame = ContextRecord->Esp;
+ return S_OK;
+}
+
+//---------------------------------------------------------------------------------------
+//
+// This function behaves like the RtlVirtualUnwind in Windows.
+// It virtually unwinds the specified function by executing its
+// prologue code backward or its epilogue code forward.
+//
+// If a context pointers record is specified, then the address where each
+// nonvolatile registers is restored from is recorded in the appropriate
+// element of the context pointers record.
+//
+// Arguments:
+//
+// HandlerType - Supplies the handler type expected for the virtual unwind.
+// This may be either an exception or an unwind handler. A flag may
+// optionally be supplied to avoid epilogue detection if it is known
+// the specified control PC is not located inside a function epilogue.
+//
+// ImageBase - Supplies the base address of the image that contains the
+// function being unwound.
+//
+// ControlPc - Supplies the address where control left the specified
+// function.
+//
+// FunctionEntry - Supplies the address of the function table entry for the
+// specified function.
+//
+// ContextRecord - Supplies the address of a context record.
+//
+// HandlerData - Supplies a pointer to a variable that receives a pointer
+// the the language handler data.
+//
+// EstablisherFrame - Supplies a pointer to a variable that receives the
+// the establisher frame pointer value.
+//
+// ContextPointers - Supplies an optional pointer to a context pointers
+// record.
+//
+// Return value:
+//
+// The handler routine address. If control did not leave the specified
+// function in either the prologue or an epilogue and a handler of the
+// proper type is associated with the function, then the address of the
+// language specific exception handler is returned. Otherwise, NULL is
+// returned.
+//
+EXTERN_C
+NTSYSAPI
+PEXCEPTION_ROUTINE
+NTAPI
+RtlVirtualUnwind (
+ __in DWORD HandlerType,
+ __in DWORD ImageBase,
+ __in DWORD ControlPc,
+ __in PRUNTIME_FUNCTION FunctionEntry,
+ __inout PT_CONTEXT ContextRecord,
+ __out PVOID *HandlerData,
+ __out PDWORD EstablisherFrame,
+ __inout_opt PT_KNONVOLATILE_CONTEXT_POINTERS ContextPointers
+ )
+{
+ PEXCEPTION_ROUTINE handlerRoutine;
+
+ HRESULT res = OOPStackUnwinderX86::VirtualUnwind(
+ HandlerType,
+ ImageBase,
+ ControlPc,
+ (_PIMAGE_RUNTIME_FUNCTION_ENTRY)FunctionEntry,
+ ContextRecord,
+ HandlerData,
+ EstablisherFrame,
+ ContextPointers,
+ &handlerRoutine);
+
+ _ASSERTE(SUCCEEDED(res));
+
+ return handlerRoutine;
+}
+#endif // WIN64EXCEPTIONS
diff --git a/src/unwinder/i386/unwinder_i386.h b/src/unwinder/i386/unwinder_i386.h
new file mode 100644
index 0000000000..bed30bf894
--- /dev/null
+++ b/src/unwinder/i386/unwinder_i386.h
@@ -0,0 +1,33 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+//
+
+#ifndef __unwinder_i386_h__
+#define __unwinder_i386_h__
+
+#include "unwinder.h"
+
+#ifdef WIN64EXCEPTIONS
+//---------------------------------------------------------------------------------------
+//
+// See the comment for the base class code:OOPStackUnwinder.
+//
+
+class OOPStackUnwinderX86 : public OOPStackUnwinder
+{
+public:
+ static HRESULT VirtualUnwind(__in DWORD HandlerType,
+ __in DWORD ImageBase,
+ __in DWORD ControlPc,
+ __in _PIMAGE_RUNTIME_FUNCTION_ENTRY FunctionEntry,
+ __inout PCONTEXT ContextRecord,
+ __out PVOID *HandlerData,
+ __out PDWORD EstablisherFrame,
+ __inout_opt PKNONVOLATILE_CONTEXT_POINTERS ContextPointers,
+ __deref_opt_out_opt PEXCEPTION_ROUTINE *HandlerRoutine);
+};
+#endif // WIN64EXCEPTIONS
+
+#endif // __unwinder_i386_h__
diff --git a/src/unwinder/unwinder.targets b/src/unwinder/unwinder.targets
deleted file mode 100644
index 18cd2bfa7c..0000000000
--- a/src/unwinder/unwinder.targets
+++ /dev/null
@@ -1,60 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\dac.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\debug\SetDebugTargetLocal.props" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <UseStl Condition="'$(BuildForCoreSystem)' != 'true'">true</UseStl>
-
- <UserIncludes>
- $(UserIncludes);
- $(ClrSrcDirectory)\unwinder;
- $(ClrSrcDirectory)\debug\daccess;
- $(ClrSrcDirectory)\vm;
- $(ClrSrcDirectory)\vm\$(TargetCpu);
- $(ClrSrcDirectory)\debug\inc;
- $(ClrSrcDirectory)\debug\inc\$(TargetCpu);
- $(ClrSrcDirectory)\debug\inc\dump;
- $(ClrSrcDirectory)\debug\ee;
- $(ClrSrcDirectory)\inc;
- $(VCToolsIncPath);
- </UserIncludes>
-
- <CDefines>$(CDefines);UNICODE;_UNICODE;$(USER_SPECIFIC_C_DEFINES);FEATURE_NO_HOST</CDefines>
-
- <OutputName Condition="'$(OutputName)' == ''">unwinder_dac</OutputName>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>$(ClrSrcDirectory)\unwinder\stdafx.cpp</PCHCompile>
-
- <UnwinderSourcesDir>$(ClrSrcDirectory)\unwinder</UnwinderSourcesDir>
- <Amd64SourcesDir>$(ClrSrcDirectory)\unwinder\amd64</Amd64SourcesDir>
- <ArmSourcesDir>$(ClrSrcDirectory)\unwinder\arm</ArmSourcesDir>
- <Arm64SourcesDir>$(ClrSrcDirectory)\unwinder\arm64</Arm64SourcesDir>
- </PropertyGroup>
-
- <ItemGroup>
- <CppCompile Include="$(UnwinderSourcesDir)\unwinder.cpp" />
- </ItemGroup>
-
- <!-- AMD64_SOURCES -->
- <ItemGroup Condition="'$(TargetArch)' == 'amd64'">
- <CppCompile Include="$(Amd64SourcesDir)\unwinder_amd64.cpp" />
- </ItemGroup>
- <!-- ARM_SOURCES -->
- <ItemGroup Condition="'$(TargetArch)' == 'arm'">
- <CppCompile Include="$(ArmSourcesDir)\unwinder_arm.cpp" />
- </ItemGroup>
- <!-- ARM64_SOURCES -->
- <ItemGroup Condition="'$(TargetArch)' == 'arm64'">
- <CppCompile Include="$(Arm64SourcesDir)\unwinder_arm64.cpp" />
- </ItemGroup>
-
- <Import Project="$(Clrbase)\clr.targets" />
-
-</Project>
-
diff --git a/src/utilcode/UtilCode.vcproj b/src/utilcode/UtilCode.vcproj
deleted file mode 100644
index 286456616e..0000000000
--- a/src/utilcode/UtilCode.vcproj
+++ /dev/null
@@ -1,617 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="utilcode"
- ProjectGUID="{82B95BDA-224E-49B4-8BB7-03E7B9EEFF3B}"
- RootNamespace="utilcode"
- SccProjectName="SAK"
- SccAuxPath="SAK"
- SccLocalPath="SAK"
- SccProvider="SAK"
- Keyword="MakeFileProj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="x86dbg|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:dbg"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:dbg"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="x86chk|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:chk"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:chk"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="x86ret|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:ret"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:ret"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="amd64dbg|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x64/buildType:dbg"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x64/buildType:dbg"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_AMD64_=1;_WIN64=1;"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="amd64chk|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x64/buildType:chk"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x64/buildType:chk"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_AMD64_=1;_WIN64=1;"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="amd64ret|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x64/buildType:ret"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x64/buildType:ret"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_AMD64_=1;_WIN64=1;"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="x86corechk|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:corechk"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:corechk"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="x86coredbg|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:coredbg"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:coredbg"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="x86coreret|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:coreret"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:coreret"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="Mac.inteldbg|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:coredbg"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:coredbg"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_X86_=1;i386=1"
- IncludeSearchPath="..\inc\;&quot;$(SolutionDir)\..\..\..\rotor\palrt\inc&quot;;&quot;$(SolutionDir)\..\..\..\rotor\pal\inc&quot;"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="amd64corechk|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:amd64/buildType:corechk"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:amd64/buildType:corechk"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_AMD64_=1;_WIN64=1"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="amd64coredbg|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:amd64/buildType:coredbg"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:amd64/buildType:coredbg"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_AMD64_=1;_WIN64=1"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="amd64coreret|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:amd64/buildType:coreret"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:amd64/buildType:coreret"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_AMD64_=1;_WIN64=1"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="armcoredbg|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:arm/buildType:coredbg"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:arm/buildType:coredbg"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_ARM_;ARM"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="armcorechk|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:arm/buildType:corechk"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:arm/buildType:corechk"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_ARM_;ARM"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="armcoreret|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:arm/buildType:coreret"
- ReBuildCommandLine="$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:arm/buildType:coreret"
- CleanCommandLine=""
- Output="Example.exe"
- PreprocessorDefinitions="_ARM_;ARM"
- IncludeSearchPath="..\inc\"
- ForcedIncludes="$(ProjectDir)..\defines\cache\defines.$(ConfigurationName).h"
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath=".\apithreadstress.cpp"
- >
- </File>
- <File
- RelativePath=".\arraylist.cpp"
- >
- </File>
- <File
- RelativePath=".\assemblyfilehash.cpp"
- >
- </File>
- <File
- RelativePath=".\bitvector.cpp"
- >
- </File>
- <File
- RelativePath=".\ccomprc.cpp"
- >
- </File>
- <File
- RelativePath=".\check.cpp"
- >
- </File>
- <File
- RelativePath=".\circularlog.cpp"
- >
- </File>
- <File
- RelativePath=".\CLRConfig.cpp"
- >
- <File
- RelativePath=".\configuration.cpp"
- >
- </File>
- <File
- RelativePath=".\clrhost.cpp"
- >
- </File>
- <File
- RelativePath=".\COMEx.cpp"
- >
- </File>
- <File
- RelativePath=".\corimage.cpp"
- >
- </File>
- <File
- RelativePath=".\corimage.cpp"
- >
- </File>
- <File
- RelativePath=".\CycleTimer.cpp"
- >
- </File>
- <File
- RelativePath=".\dacutil.cpp"
- >
- </File>
- <File
- RelativePath=".\debug.cpp"
- >
- </File>
- <File
- RelativePath=".\dlwrap.cpp"
- >
- </File>
- <File
- RelativePath=".\downlevel.cpp"
- >
- </File>
- <File
- RelativePath=".\ex.cpp"
- >
- </File>
- <File
- RelativePath=".\format1.cpp"
- >
- </File>
- <File
- RelativePath=".\genericstackprobe.cpp"
- >
- </File>
- <File
- RelativePath=".\GuidFromName.cpp"
- >
- </File>
- <File
- RelativePath=".\hostimpl.cpp"
- >
- </File>
- <File
- RelativePath=".\hostimpl.h"
- >
- </File>
- <File
- RelativePath=".\IAllocator.cpp"
- >
- </File>
- <File
- RelativePath=".\ilFormatter.cpp"
- >
- </File>
- <File
- RelativePath=".\jitperf.cpp"
- >
- </File>
- <File
- RelativePath=".\loaderheap.cpp"
- >
- </File>
- <File
- RelativePath=".\lazycow.cpp"
- >
- </File>
- <File
- RelativePath=".\log.cpp"
- >
- </File>
- <File
- RelativePath=".\makepath.cpp"
- >
- </File>
- <File
- RelativePath=".\md5.cpp"
- >
- </File>
- <File
- RelativePath=".\memorypool.cpp"
- >
- </File>
- <File
- RelativePath=".\namespaceutil.cpp"
- >
- </File>
- <File
- RelativePath=".\newapis.cpp"
- >
- </File>
- <File
- RelativePath=".\pedecoder.cpp"
- >
- </File>
- <File
- RelativePath=".\PerfLog.cpp"
- >
- </File>
- <File
- RelativePath=".\posterror.cpp"
- >
- </File>
- <File
- RelativePath=".\PrettyPrintSig.cpp"
- >
- </File>
- <File
- RelativePath=".\rangetree.cpp"
- >
- </File>
- <File
- RelativePath=".\regutil.cpp"
- >
- </File>
- <File
- RelativePath=".\safewrap.cpp"
- >
- </File>
- <File
- RelativePath=".\sbuffer.cpp"
- >
- </File>
- <File
- RelativePath=".\SecurityUtil.cpp"
- >
- </File>
- <File
- RelativePath=".\securitywrapper.cpp"
- >
- </File>
- <File
- RelativePath=".\sigbuilder.cpp"
- >
- </File>
- <File
- RelativePath=".\sigparser.cpp"
- >
- </File>
- <File
- RelativePath=".\SortVersioning.cpp"
- >
- </File>
- <File
- RelativePath=".\SortVersioning.h"
- >
- </File>
- <File
- RelativePath=".\splitpat.cpp"
- >
- </File>
- <File
- RelativePath=".\sstring.cpp"
- >
- </File>
- <File
- RelativePath=".\sstring_com.cpp"
- >
- </File>
- <File
- RelativePath=".\stacktrace.cpp"
- >
- </File>
- <File
- RelativePath=".\stdafx.cpp"
- >
- </File>
- <File
- RelativePath=".\stdafx.h"
- >
- </File>
- <File
- RelativePath=".\stgpool.cpp"
- >
- </File>
- <File
- RelativePath=".\stgpooli.cpp"
- >
- </File>
- <File
- RelativePath=".\stgpoolreadonly.cpp"
- >
- </File>
- <File
- RelativePath=".\stresslog.cpp"
- >
- </File>
- <File
- RelativePath=".\TlbUtils.cpp"
- >
- </File>
- <File
- RelativePath=".\tls.cpp"
- >
- </File>
- <File
- RelativePath=".\util.cpp"
- >
- </File>
- <File
- RelativePath=".\utilmessagebox.cpp"
- >
- </File>
- <File
- RelativePath=".\UTSEM.cpp"
- >
- </File>
- <File
- RelativePath=".\winfix.cpp"
- >
- </File>
- <File
- RelativePath=".\longfilepathwrappers.cpp"
- >
- </File>
- <File
- RelativePath=".\jithost.cpp"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/src/utilcode/UtilCode.vcxproj b/src/utilcode/UtilCode.vcxproj
deleted file mode 100644
index d3f6add8bb..0000000000
--- a/src/utilcode/UtilCode.vcxproj
+++ /dev/null
@@ -1,450 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="amd64chk|Win32">
- <Configuration>amd64chk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64corechk|Win32">
- <Configuration>amd64corechk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64coredbg|Win32">
- <Configuration>amd64coredbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64coreret|Win32">
- <Configuration>amd64coreret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64dbg|Win32">
- <Configuration>amd64dbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="amd64ret|Win32">
- <Configuration>amd64ret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="armcorechk|Win32">
- <Configuration>armcorechk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="armcoredbg|Win32">
- <Configuration>armcoredbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="armcoreret|Win32">
- <Configuration>armcoreret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Mac.inteldbg|Win32">
- <Configuration>Mac.inteldbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86chk|Win32">
- <Configuration>x86chk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86corechk|Win32">
- <Configuration>x86corechk</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86coredbg|Win32">
- <Configuration>x86coredbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86coreret|Win32">
- <Configuration>x86coreret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86dbg|Win32">
- <Configuration>x86dbg</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="x86ret|Win32">
- <Configuration>x86ret</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{82B95BDA-224E-49B4-8BB7-03E7B9EEFF3B}</ProjectGuid>
- <RootNamespace>utilcode</RootNamespace>
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- <Keyword>MakeFileProj</Keyword>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcoreret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcorechk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcoredbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64coreret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64coredbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64corechk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Mac.inteldbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86coreret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86coredbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86corechk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64ret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64chk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64dbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86ret|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86chk|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86dbg|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='armcoreret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='armcorechk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='armcoredbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64coreret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64coredbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64corechk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Mac.inteldbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86coreret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86coredbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86corechk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64ret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64chk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='amd64dbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86ret|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86chk|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='x86dbg|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>12.0.20617.1</_ProjectFileVersion>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86dbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:dbg</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:dbg</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_X86_=1;i386=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86chk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:chk</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:chk</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_X86_=1;i386=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86ret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:ret</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:ret</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_X86_=1;i386=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64dbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x64/buildType:dbg</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x64/buildType:dbg</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_AMD64_=1;_WIN64=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64chk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x64/buildType:chk</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x64/buildType:chk</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_AMD64_=1;_WIN64=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64ret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x64/buildType:ret</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x64/buildType:ret</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_AMD64_=1;_WIN64=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86corechk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:corechk</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:corechk</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_X86_=1;i386=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86coredbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:coredbg</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:coredbg</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_X86_=1;i386=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='x86coreret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:coreret</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:coreret</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_X86_=1;i386=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Mac.inteldbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:x86/buildType:coredbg</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:x86/buildType:coredbg</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_X86_=1;i386=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(SolutionDir)\..\..\..\rotor\palrt\inc;$(SolutionDir)\..\..\..\rotor\pal\inc;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64corechk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:amd64/buildType:corechk</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:amd64/buildType:corechk</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_AMD64_=1;_WIN64=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64coredbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:amd64/buildType:coredbg</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:amd64/buildType:coredbg</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_AMD64_=1;_WIN64=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='amd64coreret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:amd64/buildType:coreret</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:amd64/buildType:coreret</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_AMD64_=1;_WIN64=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcoredbg|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:arm/buildType:coredbg</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:arm/buildType:coredbg</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_ARM_;ARM;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcorechk|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:arm/buildType:corechk</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:arm/buildType:corechk</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_ARM_;ARM;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='armcoreret|Win32'">
- <OutDir>$(Configuration)\</OutDir>
- <IntDir>$(Configuration)\</IntDir>
- <NMakeBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArch:arm/buildType:coreret</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine>$(ProjectDir)..\..\bin\runjs userBuild ndp\clr\src\utilcode /buildArgs:-c/buildArch:arm/buildType:coreret</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine />
- <NMakeOutput>Example.exe</NMakeOutput>
- <NMakePreprocessorDefinitions>_ARM_;ARM;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
- <NMakeIncludeSearchPath>..\inc\;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
- <NMakeForcedIncludes>$(ProjectDir)..\defines\cache\defines.$(Configuration).h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
- </PropertyGroup>
- <ItemDefinitionGroup>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="apithreadstress.cpp" />
- <ClCompile Include="arraylist.cpp" />
- <ClCompile Include="assemblyfilehash.cpp" />
- <ClCompile Include="bitvector.cpp" />
- <ClCompile Include="ccomprc.cpp" />
- <ClCompile Include="check.cpp" />
- <ClCompile Include="circularlog.cpp" />
- <ClCompile Include="CLRConfig.cpp" />
- <ClCompile Include="configuration.cpp" />
- <ClCompile Include="clrhost.cpp" />
- <ClCompile Include="COMEx.cpp" />
- <ClCompile Include="corimage.cpp" />
- <ClCompile Include="CycleTimer.cpp" />
- <ClCompile Include="dacutil.cpp" />
- <ClCompile Include="debug.cpp" />
- <ClCompile Include="dlwrap.cpp" />
- <ClCompile Include="downlevel.cpp" />
- <ClCompile Include="ex.cpp" />
- <ClCompile Include="format1.cpp" />
- <ClCompile Include="genericstackprobe.cpp" />
- <ClCompile Include="GuidFromName.cpp" />
- <ClCompile Include="hostimpl.cpp" />
- <ClCompile Include="IAllocator.cpp" />
- <ClCompile Include="ilFormatter.cpp" />
- <ClCompile Include="jitperf.cpp" />
- <ClCompile Include="loaderheap.cpp" />
- <ClCompile Include="lazycow.cpp" />
- <ClCompile Include="log.cpp" />
- <ClCompile Include="makepath.cpp" />
- <ClCompile Include="md5.cpp" />
- <ClCompile Include="memorypool.cpp" />
- <ClCompile Include="namespaceutil.cpp" />
- <ClCompile Include="newapis.cpp" />
- <ClCompile Include="pedecoder.cpp" />
- <ClCompile Include="PerfLog.cpp" />
- <ClCompile Include="posterror.cpp" />
- <ClCompile Include="PrettyPrintSig.cpp" />
- <ClCompile Include="rangetree.cpp" />
- <ClCompile Include="regutil.cpp" />
- <ClCompile Include="safewrap.cpp" />
- <ClCompile Include="sbuffer.cpp" />
- <ClCompile Include="SecurityUtil.cpp" />
- <ClCompile Include="securitywrapper.cpp" />
- <ClCompile Include="sigbuilder.cpp" />
- <ClCompile Include="sigparser.cpp" />
- <ClCompile Include="SortVersioning.cpp" />
- <ClCompile Include="splitpat.cpp" />
- <ClCompile Include="sstring.cpp" />
- <ClCompile Include="sstring_com.cpp" />
- <ClCompile Include="stacktrace.cpp" />
- <ClCompile Include="stdafx.cpp" />
- <ClCompile Include="stgpool.cpp" />
- <ClCompile Include="stgpooli.cpp" />
- <ClCompile Include="stgpoolreadonly.cpp" />
- <ClCompile Include="stresslog.cpp" />
- <ClCompile Include="tick.cpp" />
- <ClCompile Include="TlbUtils.cpp" />
- <ClCompile Include="tls.cpp" />
- <ClCompile Include="util.cpp" />
- <ClCompile Include="utilmessagebox.cpp" />
- <ClCompile Include="UTSEM.cpp" />
- <ClCompile Include="winfix.cpp" />
- <ClCompile Include="longfilepathwrappers.cpp" />
- <ClCompile Include="jithost.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="hostimpl.h" />
- <ClInclude Include="SortVersioning.h" />
- <ClInclude Include="stdafx.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/src/utilcode/UtilCode.vcxproj.vspscc b/src/utilcode/UtilCode.vcxproj.vspscc
deleted file mode 100644
index b6d32892fd..0000000000
--- a/src/utilcode/UtilCode.vcxproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
diff --git a/src/utilcode/crossgen/utilcode_crossgen.nativeproj b/src/utilcode/crossgen/utilcode_crossgen.nativeproj
deleted file mode 100644
index 618a2eea74..0000000000
--- a/src/utilcode/crossgen/utilcode_crossgen.nativeproj
+++ /dev/null
@@ -1,21 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Utilcode\utilcode.settings.targets" />
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>utilcode_crossgen</OutputName>
- </PropertyGroup>
-
- <ItemGroup>
- <CppCompile Include="..\hostimpl.cpp" />
- </ItemGroup>
-
- <!--Leaf Project Items-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/utilcode/dac/dirs.proj b/src/utilcode/dac/dirs.proj
deleted file mode 100644
index 5556c8634c..0000000000
--- a/src/utilcode/dac/dirs.proj
+++ /dev/null
@@ -1,18 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\dac.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/utilcode/dirs.proj b/src/utilcode/dirs.proj
deleted file mode 100644
index 9749af2b11..0000000000
--- a/src/utilcode/dirs.proj
+++ /dev/null
@@ -1,27 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="dyncrt\dyncrt.nativeproj" />
- <ProjectFile Include="dyncrtnohost\dyncrtnohost.nativeproj" />
- <ProjectFile Include="staticcrt\staticcrt.nativeproj" />
- <ProjectFile Include="staticnohost\staticnohost.nativeproj" />
- <ProjectFile Include="dac\dirs.proj" />
- </ItemGroup>
-
- <!--The following projects will build during PHASE 1 of the Desktop build-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1' and '$(FeatureCoreclr)' != 'true'">
- <ProjectFile Include="nodependencies\utilcode-nodependencies.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/utilcode/dyncrt/dyncrt.nativeproj b/src/utilcode/dyncrt/dyncrt.nativeproj
deleted file mode 100644
index 50a1fb7880..0000000000
--- a/src/utilcode/dyncrt/dyncrt.nativeproj
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Utilcode\utilcode.settings.targets" />
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <!--Leaf project Properties-->
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>utilcode</OutputName>
- <!--WARNING: This is not a valid MSBuild property. Ensure that you place BUILD_PRODUCES macro in your SOURCES file after you have generated the stub version using KBC-->
- <BuildProduces>utilcode.lib</BuildProduces>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/utilcode/log.cpp b/src/utilcode/log.cpp
index 0dc85527c0..c07ac8baff 100644
--- a/src/utilcode/log.cpp
+++ b/src/utilcode/log.cpp
@@ -325,7 +325,7 @@ VOID LogSpewAlwaysValist(const char *fmt, va_list args)
needsPrefix = (fmt[strlen(fmt)-1] == '\n');
- int cCountWritten = _vsnprintf(&pBuffer[buflen], BUFFERSIZE-buflen, fmt, args );
+ int cCountWritten = _vsnprintf_s(&pBuffer[buflen], BUFFERSIZE-buflen, _TRUNCATE, fmt, args );
pBuffer[BUFFERSIZE-1] = 0;
if (cCountWritten < 0) {
buflen = BUFFERSIZE - 1;
diff --git a/src/utilcode/sstring.cpp b/src/utilcode/sstring.cpp
index ce532d70f6..7c332e08c3 100644
--- a/src/utilcode/sstring.cpp
+++ b/src/utilcode/sstring.cpp
@@ -2107,7 +2107,7 @@ void SString::VPrintf(const CHAR *format, va_list args)
else
if (errno!=0 && errno!=EBADF && errno!=ERANGE)
{
- CONSISTENCY_CHECK_MSG(FALSE, "_vsnprintf failed. Potential globalization bug.");
+ CONSISTENCY_CHECK_MSG(FALSE, "_vsnprintf_s failed. Potential globalization bug.");
ThrowHR(HRESULT_FROM_WIN32(ERROR_NO_UNICODE_TRANSLATION));
}
}
diff --git a/src/utilcode/staticnohost/staticnohost.nativeproj b/src/utilcode/staticnohost/staticnohost.nativeproj
deleted file mode 100644
index 4ef47670f3..0000000000
--- a/src/utilcode/staticnohost/staticnohost.nativeproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>utilcodestaticnohost</OutputName>
- </PropertyGroup>
- <Import Project="staticnohost.targets" />
-</Project>
diff --git a/src/utilcode/staticnohost/staticnohost.targets b/src/utilcode/staticnohost/staticnohost.targets
deleted file mode 100644
index 163090adeb..0000000000
--- a/src/utilcode/staticnohost/staticnohost.targets
+++ /dev/null
@@ -1,15 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Utilcode\utilcode.settings.targets" />
-
- <PropertyGroup>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DSELF_NO_HOST -D_CRTIMP=</ClAdditionalOptions>
- </PropertyGroup>
-
- <ItemGroup>
- <CppCompile Include="..\hostimpl.cpp" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-
-</Project>
diff --git a/src/utilcode/util.cpp b/src/utilcode/util.cpp
index bcfe74ace7..33722e5297 100644
--- a/src/utilcode/util.cpp
+++ b/src/utilcode/util.cpp
@@ -562,6 +562,17 @@ LPVOID ClrVirtualAllocAligned(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocatio
#endif // !FEATURE_PAL
}
+#ifdef _DEBUG
+static DWORD ShouldInjectFaultInRange()
+{
+ static DWORD fInjectFaultInRange = 99;
+
+ if (fInjectFaultInRange == 99)
+ fInjectFaultInRange = (CLRConfig::GetConfigValue(CLRConfig::INTERNAL_InjectFault) & 0x40);
+ return fInjectFaultInRange;
+}
+#endif
+
// Reserves free memory within the range [pMinAddr..pMaxAddr] using
// ClrVirtualQuery to find free memory and ClrVirtualAlloc to reserve it.
//
@@ -576,17 +587,6 @@ LPVOID ClrVirtualAllocAligned(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocatio
// the range.
//
-#ifdef _DEBUG
-static DWORD ShouldInjectFaultInRange()
-{
- static DWORD fInjectFaultInRange = 99;
-
- if (fInjectFaultInRange == 99)
- fInjectFaultInRange = (CLRConfig::GetConfigValue(CLRConfig::INTERNAL_InjectFault) & 0x40);
- return fInjectFaultInRange;
-}
-#endif
-
BYTE * ClrVirtualAllocWithinRange(const BYTE *pMinAddr,
const BYTE *pMaxAddr,
SIZE_T dwSize,
@@ -601,7 +601,11 @@ BYTE * ClrVirtualAllocWithinRange(const BYTE *pMinAddr,
}
CONTRACTL_END;
- BYTE *pResult = NULL;
+ BYTE *pResult = nullptr; // our return value;
+
+ static unsigned countOfCalls = 0; // We log the number of tims we call this method
+ countOfCalls++; // increment the call counter
+
//
// First lets normalize the pMinAddr and pMaxAddr values
//
@@ -630,55 +634,98 @@ BYTE * ClrVirtualAllocWithinRange(const BYTE *pMinAddr,
return NULL;
}
- // We will do one scan: [pMinAddr .. pMaxAddr]
- // Align to 64k. See docs for VirtualAllocEx and lpAddress and 64k alignment for reasons.
- BYTE *tryAddr = (BYTE *)ALIGN_UP((BYTE *)pMinAddr, VIRTUAL_ALLOC_RESERVE_GRANULARITY);
+ // We will do one scan from [pMinAddr .. pMaxAddr]
+ // First align the tryAddr up to next 64k base address.
+ // See docs for VirtualAllocEx and lpAddress and 64k alignment for reasons.
+ //
+ BYTE * tryAddr = (BYTE *)ALIGN_UP((BYTE *)pMinAddr, VIRTUAL_ALLOC_RESERVE_GRANULARITY);
+ bool virtualQueryFailed = false;
+ bool faultInjected = false;
+ unsigned virtualQueryCount = 0;
// Now scan memory and try to find a free block of the size requested.
while ((tryAddr + dwSize) <= (BYTE *) pMaxAddr)
{
MEMORY_BASIC_INFORMATION mbInfo;
-
+
// Use VirtualQuery to find out if this address is MEM_FREE
//
+ virtualQueryCount++;
if (!ClrVirtualQuery((LPCVOID)tryAddr, &mbInfo, sizeof(mbInfo)))
+ {
+ // Exit and return nullptr if the VirtualQuery call fails.
+ virtualQueryFailed = true;
break;
-
+ }
+
// Is there enough memory free from this start location?
- // The PAL version of VirtualQuery sets RegionSize to 0 for free
- // memory regions, in which case we go just ahead and try
- // VirtualAlloc without checking the size, and see if it succeeds.
- if (mbInfo.State == MEM_FREE &&
- (mbInfo.RegionSize >= (SIZE_T) dwSize || mbInfo.RegionSize == 0))
+ // Note that for most versions of UNIX the mbInfo.RegionSize returned will always be 0
+ if ((mbInfo.State == MEM_FREE) &&
+ (mbInfo.RegionSize >= (SIZE_T) dwSize || mbInfo.RegionSize == 0))
{
// Try reserving the memory using VirtualAlloc now
- pResult = (BYTE*) ClrVirtualAlloc(tryAddr, dwSize, MEM_RESERVE, flProtect);
+ pResult = (BYTE*)ClrVirtualAlloc(tryAddr, dwSize, MEM_RESERVE, flProtect);
- if (pResult != NULL)
+ // Normally this will be successful
+ //
+ if (pResult != nullptr)
{
- return pResult;
+ // return pResult
+ break;
}
-#ifdef _DEBUG
- // pResult == NULL
- else if (ShouldInjectFaultInRange())
+
+#ifdef _DEBUG
+ if (ShouldInjectFaultInRange())
{
- return NULL;
+ // return nullptr (failure)
+ faultInjected = true;
+ break;
}
#endif // _DEBUG
- // We could fail in a race. Just move on to next region and continue trying
+ // On UNIX we can also fail if our request size 'dwSize' is larger than 64K and
+ // and our tryAddr is pointing at a small MEM_FREE region (smaller than 'dwSize')
+ // However we can't distinguish between this and the race case.
+
+ // We might fail in a race. So just move on to next region and continue trying
tryAddr = tryAddr + VIRTUAL_ALLOC_RESERVE_GRANULARITY;
}
else
{
// Try another section of memory
tryAddr = max(tryAddr + VIRTUAL_ALLOC_RESERVE_GRANULARITY,
- (BYTE*) mbInfo.BaseAddress + mbInfo.RegionSize);
+ (BYTE*) mbInfo.BaseAddress + mbInfo.RegionSize);
+ }
+ }
+
+ STRESS_LOG7(LF_JIT, LL_INFO100,
+ "ClrVirtualAllocWithinRange request #%u for %08x bytes in [ %p .. %p ], query count was %u - returned %s: %p\n",
+ countOfCalls, (DWORD)dwSize, pMinAddr, pMaxAddr,
+ virtualQueryCount, (pResult != nullptr) ? "success" : "failure", pResult);
+
+ // If we failed this call the process will typically be terminated
+ // so we log any additional reason for failing this call.
+ //
+ if (pResult == nullptr)
+ {
+ if ((tryAddr + dwSize) > (BYTE *)pMaxAddr)
+ {
+ // Our tryAddr reached pMaxAddr
+ STRESS_LOG0(LF_JIT, LL_INFO100, "Additional reason: Address space exhausted.\n");
+ }
+
+ if (virtualQueryFailed)
+ {
+ STRESS_LOG0(LF_JIT, LL_INFO100, "Additional reason: VirtualQuery operation failed.\n");
+ }
+
+ if (faultInjected)
+ {
+ STRESS_LOG0(LF_JIT, LL_INFO100, "Additional reason: fault injected.\n");
}
}
- // Our tryAddr reached pMaxAddr
- return NULL;
+ return pResult;
}
//******************************************************************************
diff --git a/src/utilcode/utilcode.settings.targets b/src/utilcode/utilcode.settings.targets
deleted file mode 100644
index 7fbcb4d5cc..0000000000
--- a/src/utilcode/utilcode.settings.targets
+++ /dev/null
@@ -1,132 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <!--Leaf project Properties-->
- <PropertyGroup>
- <!--OK to delete NO_NTDLL for devdiv builds.-->
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <!--PCHHeader>stdafx.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders-->
- <!--PCH: Both precompiled header and cpp are on the same ..\ path this is likely to be wrong.-->
- <UtilCodeSrcDir>$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Utilcode</UtilCodeSrcDir>
- <!--PCHCompile>$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\Utilcode\stdafx.cpp</PCHCompile>
- <PCHObject>stdafx_utilcode.obj</PCHObject-->
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE $(_CRTIMPFLAGS)</ClAdditionalOptions>
- <ClAdditionalOptions Condition="'FeatureUtilcodeNoDependencies' != 'true'">$(ClAdditionalOptions) -DENABLE_PERF_COUNTERS</ClAdditionalOptions>
- <UserIncludes>
- $(UserIncludes);
- $(VCToolsIncPath);
- $(_NTDRIVE)$(_NTROOT)\ndp\clr\src\strongname\inc
- </UserIncludes>
- </PropertyGroup>
-
- <!-- Dependencies -->
- <ItemGroup>
- <ProjectReference Include="$(ClrSrcDirectory)inc\corguids.nativeproj">
- <Comment>clrinternal.h</Comment>
- </ProjectReference>
- </ItemGroup>
-
- <!-- Sources common for 'NoDependencies' and 'normal' build -->
- <ItemGroup>
- <CppCompile Include="$(UtilCodeSrcDir)\ClrHost_NoDependencies.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\Ex.cpp" />
-
- <CppCompile Include="$(UtilCodeSrcDir)\SBuffer.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\SString.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\SString_COM.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\FString.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\longfilepathwrappers.cpp" />
-
- <CppCompile Include="$(UtilCodeSrcDir)\NamespaceUtil.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\MakePath.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\SplitPath.cpp" />
-
- <CppCompile Include="$(UtilCodeSrcDir)\ClrConfig.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\configuration.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\RegUtil.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\RegistryWrapper.cpp" />
-
- <CppCompile Include="$(UtilCodeSrcDir)\Collections.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\Util_NoDependencies.cpp" />
-
- <CppCompile Include="$(UtilCodeSrcDir)\GenericStackProbe.cpp" />
-
- <CppCompile Include="$(UtilCodeSrcDir)\PostError.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\fstream.cpp" />
-
- <!-- File format and MetaData -->
- <CppCompile Include="$(UtilCodeSrcDir)\ClrHelpers.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\StgPool.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\StgPooli.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\StgPoolReadOnly.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\PEDecoder.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\LazyCOW.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\UTSem.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\peinformation.cpp" />
- </ItemGroup>
-
- <ItemGroup>
- <DebuggingSupportSources Include="$(UtilCodeSrcDir)\Check.cpp" />
- <DebuggingSupportSources Include="$(UtilCodeSrcDir)\Debug.cpp" />
- <DebuggingSupportSources Include="$(UtilCodeSrcDir)\Log.cpp" />
- <DebuggingSupportSources Include="$(UtilCodeSrcDir)\UtilMessageBox.cpp" />
- <DebuggingSupportSources Include="$(UtilCodeSrcDir)\StackTrace.cpp" />
-
- <DebuggingSupportSources Include="$(UtilCodeSrcDir)\SafeWrap.cpp" />
- <DebuggingSupportSources Include="$(UtilCodeSrcDir)\WinFix.cpp" />
- </ItemGroup>
-
- <!-- Sources for 'normal' build (can depend on mscoree.dll and other DLLs) -->
- <ItemGroup Condition="'$(FeatureUtilcodeNoDependencies)' != 'true'">
- <CppCompile Include="@(DebuggingSupportSources)" />
- <CppCompile Include="$(UtilCodeSrcDir)\ApiThreadStress.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\ArrayList.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\AssemblyFileHash.cpp" Condition="'$(FeatureCoreClr)' != 'true'"/>
- <CppCompile Include="$(UtilCodeSrcDir)\BitVector.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\ccomprc.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\CircularLog.cpp" Condition="'$(FeatureCoreClr)' != 'true'"/>
- <CppCompile Include="$(UtilCodeSrcDir)\ClrHost.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\COMex.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\CycleTimer.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\DelayLoadHelpers.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\GuidFromName.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\jitperf.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\md5.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\MemoryPool.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\Util.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\RangeTree.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\IAllocator.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\LoaderHeap.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\PerfLog.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\OutString.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\ilFormatter.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\OpInfo.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\DacUtil.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\TlbUtils.cpp" Condition="'$(FeatureCominteropTlbSupport)' == 'true'"/>
- <CppCompile Include="$(UtilCodeSrcDir)\SortVersioning.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\NewApis.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\DownLevel.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\StressLog.cpp" />
-
- <!-- File format and MetaData -->
- <CppCompile Include="$(UtilCodeSrcDir)\CorImage.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\format1.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\PrettyPrintSig.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\SigBuilder.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\SigParser.cpp" />
-
- <CppCompile Include="$(UtilCodeSrcDir)\dlwrap.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\LoadRC.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\SxSHelpers.cpp" Condition="'$(FeatureCoreClr)' != 'true'"/>
- <CppCompile Include="$(UtilCodeSrcDir)\TLS.cpp" Condition="'$(FeatureImplicitTls)' != 'true'"/>
- <CppCompile Include="$(UtilCodeSrcDir)\SecurityWrapper.cpp" />
- <CppCompile Include="$(UtilCodeSrcDir)\SecurityUtil.cpp" />
-
- <CppCompile Include="$(UtilCodeSrcDir)\AppXUtil.cpp" Condition="'$(FeatureAppX)' == 'true'"/>
-
- <CppCompile Include="$(UtilCodeSrcDir)\jithost.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/vm/CMakeLists.txt b/src/vm/CMakeLists.txt
index 9fdddd6c26..79bd078c45 100644
--- a/src/vm/CMakeLists.txt
+++ b/src/vm/CMakeLists.txt
@@ -216,7 +216,6 @@ set(VM_SOURCES_WKS
securitydeclarative.cpp
securitydeclarativecache.cpp
securitydescriptorappdomain.cpp
- securityhostprotection.cpp
securitymeta.cpp
securitypolicy.cpp
securitytransparentassembly.cpp
@@ -294,7 +293,6 @@ list(APPEND VM_SOURCES_WKS
rcwrefcache.cpp
rtlfunctions.cpp
runtimecallablewrapper.cpp
- securityprincipal.cpp
stacksampler.cpp
stdinterfaces.cpp
stdinterfaces_wrapper.cpp
@@ -432,6 +430,8 @@ elseif(CLR_CMAKE_TARGET_ARCH_I386)
set(VM_SOURCES_WKS_ARCH
${ARCH_SOURCES_DIR}/jitinterfacex86.cpp
${ARCH_SOURCES_DIR}/profiler.cpp
+ exceptionhandling.cpp
+ gcinfodecoder.cpp
)
elseif(CLR_CMAKE_TARGET_ARCH_ARM)
set(VM_SOURCES_DAC_AND_WKS_ARCH
diff --git a/src/vm/amd64/CLRErrorReporting.vrg b/src/vm/amd64/CLRErrorReporting.vrg
deleted file mode 100644
index f398185aff..0000000000
--- a/src/vm/amd64/CLRErrorReporting.vrg
+++ /dev/null
@@ -1,5 +0,0 @@
-VSREG 7
-
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\.NET Runtime 4.0 Error Reporting]
-"EventMessageFile"="[DWFolder.F0DF3458_A845_11D3_8D0A_0050046416B9]DW20.EXE"
-"TypesSupported"=dword:00000007
diff --git a/src/vm/amd64/jitinterfaceamd64.cpp b/src/vm/amd64/jitinterfaceamd64.cpp
index d5dec8e6e8..53d8f74f1b 100644
--- a/src/vm/amd64/jitinterfaceamd64.cpp
+++ b/src/vm/amd64/jitinterfaceamd64.cpp
@@ -16,7 +16,6 @@
#include "eeconfig.h"
#include "excep.h"
#include "threadsuspend.h"
-#include "../../gc/softwarewritewatch.h"
extern uint8_t* g_ephemeral_low;
extern uint8_t* g_ephemeral_high;
@@ -532,9 +531,9 @@ void WriteBarrierManager::UpdateWriteWatchAndCardTableLocations(bool isRuntimeSu
#ifdef FEATURE_SVR_GC
case WRITE_BARRIER_WRITE_WATCH_SVR64:
#endif // FEATURE_SVR_GC
- if (*(UINT64*)m_pWriteWatchTableImmediate != (size_t)SoftwareWriteWatch::GetTable())
+ if (*(UINT64*)m_pWriteWatchTableImmediate != (size_t)g_sw_ww_table)
{
- *(UINT64*)m_pWriteWatchTableImmediate = (size_t)SoftwareWriteWatch::GetTable();
+ *(UINT64*)m_pWriteWatchTableImmediate = (size_t)g_sw_ww_table;
fFlushCache = true;
}
break;
diff --git a/src/vm/appdomain.cpp b/src/vm/appdomain.cpp
index 34da344c94..040837a8a7 100644
--- a/src/vm/appdomain.cpp
+++ b/src/vm/appdomain.cpp
@@ -75,7 +75,6 @@
#include "appdomain.inl"
#include "typeparse.h"
#include "mdaassistants.h"
-#include "stackcompressor.h"
#ifdef FEATURE_REMOTING
#include "mscorcfg.h"
#include "appdomainconfigfactory.hpp"
@@ -165,11 +164,13 @@ CrstStatic BaseDomain::m_SpecialStaticsCrst;
int BaseDomain::m_iNumberOfProcessors = 0;
// Shared Domain Statics
+DECLSPEC_ALIGN(16)
static BYTE g_pSharedDomainMemory[sizeof(SharedDomain)];
// System Domain Statics
GlobalStringLiteralMap* SystemDomain::m_pGlobalStringLiteralMap = NULL;
+DECLSPEC_ALIGN(16)
static BYTE g_pSystemDomainMemory[sizeof(SystemDomain)];
#ifdef FEATURE_APPDOMAIN_RESOURCE_MONITORING
@@ -2872,6 +2873,9 @@ void SystemDomain::LoadBaseSystemClasses()
#ifdef FEATURE_SPAN_OF_T
// Load ByReference class
+ //
+ // NOTE: ByReference<T> must be the first by-ref-like system type to be loaded,
+ // because MethodTable::ClassifyEightBytesWithManagedLayout depends on it.
g_pByReferenceClass = MscorlibBinder::GetClass(CLASS__BYREFERENCE);
#endif
diff --git a/src/vm/appdomainnative.cpp b/src/vm/appdomainnative.cpp
index a96c643537..3935cb5b54 100644
--- a/src/vm/appdomainnative.cpp
+++ b/src/vm/appdomainnative.cpp
@@ -518,199 +518,6 @@ FCIMPL3(void, AppDomainNative::UpdateContextProperty, LPVOID fusionContext, Stri
FCIMPLEND
#endif // FEATURE_FUSION
-/* static */
-INT32 AppDomainNative::ExecuteAssemblyHelper(Assembly* pAssembly,
- BOOL bCreatedConsole,
- PTRARRAYREF *pStringArgs)
-{
- STATIC_CONTRACT_THROWS;
-
- struct Param
- {
- Assembly* pAssembly;
- PTRARRAYREF *pStringArgs;
- INT32 iRetVal;
- } param;
- param.pAssembly = pAssembly;
- param.pStringArgs = pStringArgs;
- param.iRetVal = 0;
-
- EE_TRY_FOR_FINALLY(Param *, pParam, &param)
- {
- pParam->iRetVal = pParam->pAssembly->ExecuteMainMethod(pParam->pStringArgs, FALSE /* waitForOtherThreads */);
- }
- EE_FINALLY
- {
-#ifndef FEATURE_PAL
- if(bCreatedConsole)
- FreeConsole();
-#endif // !FEATURE_PAL
- }
- EE_END_FINALLY
-
- return param.iRetVal;
-}
-
-static void UpgradeLinkTimeCheckToLateBoundDemand(MethodDesc* pMeth)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
-
- BOOL isEveryoneFullyTrusted = FALSE;
-
- struct _gc
- {
- OBJECTREF refClassNonCasDemands;
- OBJECTREF refClassCasDemands;
- OBJECTREF refMethodNonCasDemands;
- OBJECTREF refMethodCasDemands;
- OBJECTREF refThrowable;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
-
- GCPROTECT_BEGIN(gc);
-
- isEveryoneFullyTrusted = Security::AllDomainsOnStackFullyTrusted();
-
- // If all assemblies in the domain are fully trusted then we are not
- // going to do any security checks anyway..
- if (isEveryoneFullyTrusted)
- {
- goto Exit1;
- }
-
-
- if (pMeth->RequiresLinktimeCheck())
- {
- // Fetch link demand sets from all the places in metadata where we might
- // find them (class and method). These might be split into CAS and non-CAS
- // sets as well.
- Security::RetrieveLinktimeDemands(pMeth,
- &gc.refClassCasDemands,
- &gc.refClassNonCasDemands,
- &gc.refMethodCasDemands,
- &gc.refMethodNonCasDemands);
-
- if (gc.refClassCasDemands == NULL && gc.refClassNonCasDemands == NULL &&
- gc.refMethodCasDemands == NULL && gc.refMethodNonCasDemands == NULL &&
- isEveryoneFullyTrusted)
- {
- // All code access security demands will pass anyway.
- goto Exit1;
- }
-
- // The following logic turns link demands on the target method into full
- // stack walks in order to close security holes in poorly written
- // reflection users.
-
-#ifdef FEATURE_APTCA
- if (Security::IsUntrustedCallerCheckNeeded(pMeth) )
- {
- // Check for untrusted caller
- // It is possible that wrappers like VBHelper libraries that are
- // fully trusted, make calls to public methods that do not have
- // safe for Untrusted caller custom attribute set.
- // Like all other link demand that gets transformed to a full stack
- // walk for reflection, calls to public methods also gets
- // converted to full stack walk
-
- // NOTE: this will always do the APTCA check, regardless of method caller
- Security::DoUntrustedCallerChecks(NULL, pMeth, TRUE);
- }
-#endif
-
- // CAS Link Demands
- if (gc.refClassCasDemands != NULL)
- Security::DemandSet(SSWT_LATEBOUND_LINKDEMAND, gc.refClassCasDemands);
-
- if (gc.refMethodCasDemands != NULL)
- Security::DemandSet(SSWT_LATEBOUND_LINKDEMAND, gc.refMethodCasDemands);
-
- // Non-CAS demands are not applied against a grant
- // set, they're standalone.
- if (gc.refClassNonCasDemands != NULL)
- Security::CheckNonCasDemand(&gc.refClassNonCasDemands);
-
- if (gc.refMethodNonCasDemands != NULL)
- Security::CheckNonCasDemand(&gc.refMethodNonCasDemands);
- }
-
-Exit1:;
- GCPROTECT_END();
-}
-
-FCIMPL3(INT32, AppDomainNative::ExecuteAssembly, AppDomainBaseObject* refThisUNSAFE,
- AssemblyBaseObject* assemblyNameUNSAFE, PTRArray* stringArgsUNSAFE)
-{
- FCALL_CONTRACT;
-
- INT32 iRetVal = 0;
-
- struct _gc
- {
- APPDOMAINREF refThis;
- ASSEMBLYREF assemblyName;
- PTRARRAYREF stringArgs;
- } gc;
-
- gc.refThis = (APPDOMAINREF) refThisUNSAFE;
- gc.assemblyName = (ASSEMBLYREF) assemblyNameUNSAFE;
- gc.stringArgs = (PTRARRAYREF) stringArgsUNSAFE;
-
- HELPER_METHOD_FRAME_BEGIN_RET_PROTECT(gc);
-
- AppDomain* pDomain = ValidateArg(gc.refThis);
-
- if (gc.assemblyName == NULL)
- COMPlusThrow(kArgumentNullException, W("ArgumentNull_Generic"));
-
- if((BaseDomain*) pDomain == SystemDomain::System())
- COMPlusThrow(kUnauthorizedAccessException, W("UnauthorizedAccess_SystemDomain"));
-
- Assembly* pAssembly = (Assembly*) gc.assemblyName->GetAssembly();
-
- if (!pDomain->m_pRootAssembly)
- pDomain->m_pRootAssembly = pAssembly;
-
- MethodDesc *pEntryPointMethod;
- {
- pEntryPointMethod = pAssembly->GetEntryPoint();
- if (pEntryPointMethod)
- {
- UpgradeLinkTimeCheckToLateBoundDemand(pEntryPointMethod);
- }
- }
-
- BOOL bCreatedConsole = FALSE;
-
-#ifndef FEATURE_PAL
- if (pAssembly->GetManifestFile()->GetSubsystem() == IMAGE_SUBSYSTEM_WINDOWS_CUI)
- {
- {
- GCX_COOP();
- Security::CheckBeforeAllocConsole(pDomain, pAssembly);
- }
- bCreatedConsole = AllocConsole();
- StackSString codebase;
- pAssembly->GetManifestFile()->GetCodeBase(codebase);
- SetConsoleTitle(codebase);
- }
-#endif // !FEATURE_PAL
-
- // This helper will call FreeConsole()
- iRetVal = ExecuteAssemblyHelper(pAssembly, bCreatedConsole, &gc.stringArgs);
-
- HELPER_METHOD_FRAME_END();
-
- return iRetVal;
-}
-FCIMPLEND
-
#ifdef FEATURE_VERSIONING
FCIMPL1(void,
AppDomainNative::CreateContext,
@@ -773,7 +580,7 @@ void QCALLTYPE AppDomainNative::SetupBindingPaths(__in_z LPCWSTR wszTrustedPlatf
#endif // FEATURE_VERSIONING
-FCIMPL12(Object*, AppDomainNative::CreateDynamicAssembly, AppDomainBaseObject* refThisUNSAFE, AssemblyNameBaseObject* assemblyNameUNSAFE, Object* identityUNSAFE, StackCrawlMark* stackMark, Object* requiredPsetUNSAFE, Object* optionalPsetUNSAFE, Object* refusedPsetUNSAFE, U1Array *securityRulesBlobUNSAFE, U1Array *aptcaBlobUNSAFE, INT32 access, INT32 dwFlags, SecurityContextSource securityContextSource)
+FCIMPL9(Object*, AppDomainNative::CreateDynamicAssembly, AppDomainBaseObject* refThisUNSAFE, AssemblyNameBaseObject* assemblyNameUNSAFE, Object* identityUNSAFE, StackCrawlMark* stackMark, U1Array *securityRulesBlobUNSAFE, U1Array *aptcaBlobUNSAFE, INT32 access, INT32 dwFlags, SecurityContextSource securityContextSource)
{
FCALL_CONTRACT;
@@ -787,9 +594,6 @@ FCIMPL12(Object*, AppDomainNative::CreateDynamicAssembly, AppDomainBaseObject* r
args.refThis = (APPDOMAINREF) refThisUNSAFE;
args.assemblyName = (ASSEMBLYNAMEREF) assemblyNameUNSAFE;
args.identity = (OBJECTREF) identityUNSAFE;
- args.requiredPset = (OBJECTREF) requiredPsetUNSAFE;
- args.optionalPset = (OBJECTREF) optionalPsetUNSAFE;
- args.refusedPset = (OBJECTREF) refusedPsetUNSAFE;
args.securityRulesBlob = (U1ARRAYREF) securityRulesBlobUNSAFE;
args.aptcaBlob = (U1ARRAYREF) aptcaBlobUNSAFE;
args.loaderAllocator = NULL;
diff --git a/src/vm/appdomainnative.hpp b/src/vm/appdomainnative.hpp
index ee3af20aaa..cb0c364cfa 100644
--- a/src/vm/appdomainnative.hpp
+++ b/src/vm/appdomainnative.hpp
@@ -34,7 +34,7 @@ public:
static FCDECL2(void, UpdateLoaderOptimization, AppDomainBaseObject* refThisUNSAFE, DWORD optimization);
#endif // FEATURE_LOADER_OPTIMIZATION
- static FCDECL12(Object*, CreateDynamicAssembly, AppDomainBaseObject* refThisUNSAFE, AssemblyNameBaseObject* assemblyNameUNSAFE, Object* identityUNSAFE, StackCrawlMark* stackMark, Object* requiredPsetUNSAFE, Object* optionalPsetUNSAFE, Object* refusedPsetUNSAFE, U1Array* securityRulesBlobUNSAFE, U1Array* aptcaBlobUNSAFE, INT32 access, INT32 flags, SecurityContextSource securityContextSource);
+ static FCDECL9(Object*, CreateDynamicAssembly, AppDomainBaseObject* refThisUNSAFE, AssemblyNameBaseObject* assemblyNameUNSAFE, Object* identityUNSAFE, StackCrawlMark* stackMark, U1Array* securityRulesBlobUNSAFE, U1Array* aptcaBlobUNSAFE, INT32 access, INT32 flags, SecurityContextSource securityContextSource);
#ifdef FEATURE_APPDOMAINMANAGER_INITOPTIONS
static FCDECL0(FC_BOOL_RET, HasHost);
#endif // FEATURE_APPDOMAINMANAGER_INITOPTIONS
@@ -43,7 +43,6 @@ public:
static FCDECL1(FC_BOOL_RET, IsDefaultAppDomainForEvidence, AppDomainBaseObject* refThisUNSAFE);
static FCDECL2(Object*, GetAssemblies, AppDomainBaseObject* refThisUNSAFE, CLR_BOOL fForIntrospection);
static FCDECL2(Object*, GetOrInternString, AppDomainBaseObject* refThisUNSAFE, StringObject* pStringUNSAFE);
- static FCDECL3(INT32, ExecuteAssembly, AppDomainBaseObject* refThisUNSAFE, AssemblyBaseObject* assemblyNameUNSAFE, PTRArray* stringArgsUNSAFE);
#ifdef FEATURE_VERSIONING
static FCDECL1(void, CreateContext, AppDomainBaseObject *refThisUNSAFE);
static void QCALLTYPE SetupBindingPaths(__in_z LPCWSTR wszTrustedPlatformAssemblies, __in_z LPCWSTR wszPlatformResourceRoots, __in_z LPCWSTR wszAppPaths, __in_z LPCWSTR wszAppNiPaths, __in_z LPCWSTR appLocalWinMD);
diff --git a/src/vm/appdomainstack.cpp b/src/vm/appdomainstack.cpp
index bb21c8e7bd..7e55a8d597 100644
--- a/src/vm/appdomainstack.cpp
+++ b/src/vm/appdomainstack.cpp
@@ -86,91 +86,6 @@ BOOL AppDomainStackEntry::HasFlagsOrFullyTrustedWithNoStackModifiers(DWORD flags
return Security::CheckDomainWideSpecialFlag(currAppSecDesc, flags);
}
-
-void AppDomainStackEntry::UpdateHomogeneousPLS(OBJECTREF* homogeneousPLS)
-{
-
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
-
- AppDomainFromIDHolder domain(m_domainID, TRUE);
- if (domain.IsUnloaded())
- return;
-
- IApplicationSecurityDescriptor *thisAppSecDesc = domain->GetSecurityDescriptor();
-
- if (thisAppSecDesc->IsHomogeneous())
- {
- // update the intersection with the current grant set
-
- NewArrayHolder<BYTE> pbtmpSerializedObject(NULL);
-
- struct gc
- {
- OBJECTREF refGrantSet;
- } gc;
- ZeroMemory( &gc, sizeof( gc ) );
- AppDomain* pCurrentDomain;
- pCurrentDomain = GetAppDomain();
-
- GCPROTECT_BEGIN( gc );
-#ifdef FEATURE_REMOTING // should not be possible without remoting
- DWORD cbtmpSerializedObject = 0;
- if (pCurrentDomain->GetId() != m_domainID)
- {
- // Unlikely scenario where we have another homogeneous AD on the callstack that's different from
- // the current one. If there's another AD on the callstack, it's likely to be FT.
- ENTER_DOMAIN_ID(m_domainID)
- {
- // Release the holder to allow GCs. This is safe because we've entered the AD, so it won't go away.
- domain.Release();
-
- gc.refGrantSet = thisAppSecDesc->GetGrantedPermissionSet(NULL);
- AppDomainHelper::MarshalObject(GetAppDomain(), &gc.refGrantSet, &pbtmpSerializedObject, &cbtmpSerializedObject);
- if (pbtmpSerializedObject == NULL)
- {
- // this is an error: possibly an OOM prevented the blob from getting created.
- // We could return null and let the managed code use a fully restricted object or throw here.
- // Let's throw here...
- COMPlusThrow(kSecurityException);
- }
- gc.refGrantSet = NULL;
-
- }
- END_DOMAIN_TRANSITION
- AppDomainHelper::UnmarshalObject(pCurrentDomain,pbtmpSerializedObject, cbtmpSerializedObject, &gc.refGrantSet);
- }
- else
-#else
- _ASSERTE(pCurrentDomain->GetId() == m_domainID);
-#endif //!FEATURE_CORECLR
- {
- // Release the holder to allow GCs. This is safe because we're running in this AD, so it won't go away.
- domain.Release();
- gc.refGrantSet = thisAppSecDesc->GetGrantedPermissionSet(NULL);
- }
-
- // At this point gc.refGrantSet has the grantSet of pDomain (thisAppSecDesc) in the current domain.
- // We don't care about refused perms since we established there were
- // none earlier for this call stack.
- // Let's intersect with what we've already got.
-
- PREPARE_NONVIRTUAL_CALLSITE(METHOD__PERMISSION_LIST_SET__UPDATE);
- DECLARE_ARGHOLDER_ARRAY(args, 2);
- args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(*homogeneousPLS); // arg 0
- args[ARGNUM_1] = OBJECTREF_TO_ARGHOLDER(gc.refGrantSet); // arg 1
- CALL_MANAGED_METHOD_NORET(args);
-
- GCPROTECT_END();
- }
-}
-
-
BOOL AppDomainStack::AllDomainsHomogeneousWithNoStackModifiers()
{
WRAPPER_NO_CONTRACT;
diff --git a/src/vm/appdomainstack.h b/src/vm/appdomainstack.h
index 1390364e47..fffabf97e4 100644
--- a/src/vm/appdomainstack.h
+++ b/src/vm/appdomainstack.h
@@ -45,9 +45,6 @@ struct AppDomainStackEntry
BOOL IsFullyTrustedWithNoStackModifiers(void);
BOOL IsHomogeneousWithNoStackModifiers(void);
BOOL HasFlagsOrFullyTrustedWithNoStackModifiers(DWORD flags);
-#ifndef DACCESS_COMPILE
- void UpdateHomogeneousPLS(OBJECTREF* homogeneousPLS);
-#endif
};
class AppDomainStack
diff --git a/src/vm/argdestination.h b/src/vm/argdestination.h
index d8f6c854b2..8a3fb4fdf2 100644
--- a/src/vm/argdestination.h
+++ b/src/vm/argdestination.h
@@ -176,8 +176,10 @@ public:
{
LIMITED_METHOD_CONTRACT;
+ // SPAN-TODO: GC reporting - https://github.com/dotnet/coreclr/issues/8517
+
_ASSERTE(IsStructPassedInRegs());
-
+
TADDR genRegDest = dac_cast<TADDR>(GetStructGenRegDestinationAddress());
INDEBUG(int remainingBytes = fieldBytes;)
@@ -199,7 +201,8 @@ public:
_ASSERTE(eightByteSize == 8);
_ASSERTE(IS_ALIGNED((SIZE_T)genRegDest, 8));
- (*fn)(dac_cast<PTR_PTR_Object>(genRegDest), sc, 0);
+ uint32_t flags = eightByteClassification == SystemVClassificationTypeIntegerByRef ? GC_CALL_INTERIOR : 0;
+ (*fn)(dac_cast<PTR_PTR_Object>(genRegDest), sc, flags);
}
genRegDest += eightByteSize;
diff --git a/src/vm/arm/asmhelpers.S b/src/vm/arm/asmhelpers.S
index 65dc513cce..04d7527180 100644
--- a/src/vm/arm/asmhelpers.S
+++ b/src/vm/arm/asmhelpers.S
@@ -1392,8 +1392,6 @@ DelayLoad_MethodCall:
.macro DynamicHelper frameFlags, suffix
-__FakePrologName="DelayLoad_Helper\suffix\()_FakeProlog"
-
NESTED_ENTRY DelayLoad_Helper\suffix\()_FakeProlog, _TEXT, NoHandler
// Match what the lazy thunk has pushed. The actual method arguments will be spilled later.
diff --git a/src/vm/arm64/asmhelpers.S b/src/vm/arm64/asmhelpers.S
index e3011ce7b0..d92e91cfd7 100644
--- a/src/vm/arm64/asmhelpers.S
+++ b/src/vm/arm64/asmhelpers.S
@@ -93,8 +93,8 @@ LEAF_ENTRY HelperMethodFrameRestoreState, _TEXT
#endif
// If machine state is invalid, then simply exit
- ldr x1, [x0, #MachState__isValid]
- cmp x1, #0
+ ldr w1, [x0, #MachState__isValid]
+ cmp w1, #0
beq LOCAL_LABEL(Done)
RestoreRegMS 19, X19
@@ -142,7 +142,15 @@ NESTED_END NDirectImportThunk, _TEXT
// ------------------------------------------------------------------
// ARM64TODO: Implement PrecodeFixupThunk when PreCode is Enabled
NESTED_ENTRY PrecodeFixupThunk, _TEXT, NoHandler
- brk #0
+ ldrb w13, [x12, #Offset_PrecodeChunkIndex] //m_PrecodeChunkIndex
+ ldrb w14, [x12, #Offset_MethodDescChunkIndex] // m_MethodDescChunkIndex
+
+ add x12, x12, w13, uxtw #FixupPrecode_ALIGNMENT_SHIFT_1
+ add x13, x12, w13, uxtw #FixupPrecode_ALIGNMENT_SHIFT_2
+ ldr x13, [x13, #SIZEOF__FixupPrecode]
+ add x12, x13, w14, uxtw #MethodDesc_ALIGNMENT_SHIFT
+
+ b ThePreStub
NESTED_END PrecodeFixupThunk, _TEXT
// ------------------------------------------------------------------
@@ -251,14 +259,12 @@ WRITE_BARRIER_END JIT_ByRefWriteBarrier
// x15 : trashed
//
WRITE_BARRIER_ENTRY JIT_CheckedWriteBarrier
- // ARM64TODO: Temporary indirect access till support for :lo12:symbol is added
- ldr x12, =g_lowest_address
+ PREPARE_EXTERNAL_VAR g_lowest_address, x12
ldr x12, [x12]
cmp x14, x12
blt LOCAL_LABEL(NotInHeap)
- // ARM64TODO: Temporary indirect access till support for :lo12:symbol is added
- ldr x12, =g_highest_address
+ PREPARE_EXTERNAL_VAR g_highest_address, x12
ldr x12, [x12]
cmp x14, x12
blt C_FUNC(JIT_WriteBarrier)
@@ -280,25 +286,22 @@ WRITE_BARRIER_END JIT_CheckedWriteBarrier
//
WRITE_BARRIER_ENTRY JIT_WriteBarrier
dmb ST
- str x15, [x14], 8
+ str x15, [x14]
// Branch to Exit if the reference is not in the Gen0 heap
//
- // ARM64TODO: Temporary indirect access till support for :lo12:symbol is added
- ldr x12, =g_ephemeral_low
+ PREPARE_EXTERNAL_VAR g_ephemeral_low, x12
ldr x12, [x12]
cmp x15, x12
blt LOCAL_LABEL(Exit)
- // ARM64TODO: Temporary indirect access till support for :lo12:symbol is added
- ldr x12, =g_ephemeral_high
+ PREPARE_EXTERNAL_VAR g_ephemeral_high, x12
ldr x12, [x12]
cmp x15, x12
bgt LOCAL_LABEL(Exit)
// Check if we need to update the card table
- // ARM64TODO: Temporary indirect access till support for :lo12:symbol is added
- ldr x12, =g_card_table
+ PREPARE_EXTERNAL_VAR g_card_table, x12
ldr x12, [x12]
add x15, x12, x14, lsr #11
ldrb w12, [x15]
@@ -309,6 +312,7 @@ LOCAL_LABEL(UpdateCardTable):
mov x12, 0xFF
strb w12, [x15]
LOCAL_LABEL(Exit):
+ add x14, x14, 8
ret lr
WRITE_BARRIER_END JIT_WriteBarrier
@@ -476,7 +480,7 @@ LOCAL_LABEL(UMThunkStub_HaveThread):
// m_fPreemptiveGCDisabled is 4 byte field so using 32-bit variant
str w9, [x19, #Thread__m_fPreemptiveGCDisabled]
- ldr x2, =g_TrapReturningThreads
+ PREPARE_EXTERNAL_VAR g_TrapReturningThreads, x2
ldr x3, [x2]
// assuming x0 contains Thread* before jumping to UMThunkStub_DoTrapReturningThreads
cbnz x3, LOCAL_LABEL(UMThunkStub_DoTrapReturningThreads)
@@ -667,6 +671,45 @@ LOCAL_LABEL(UM2MThunk_WrapperHelper_RegArgumentsSetup):
NESTED_END UM2MThunk_WrapperHelper, _TEXT
+#ifdef FEATURE_HIJACK
+// ------------------------------------------------------------------
+// Hijack function for functions which return a scalar type or a struct (value type)
+NESTED_ENTRY OnHijackTripThread, _TEXT, NoHandler
+ PROLOG_SAVE_REG_PAIR fp, lr, #-144
+ // Spill callee saved registers
+ PROLOG_SAVE_REG_PAIR x19, x20, #16
+ PROLOG_SAVE_REG_PAIR x21, x22, #32
+ PROLOG_SAVE_REG_PAIR x23, x24, #48
+ PROLOG_SAVE_REG_PAIR x25, x26, #64
+ PROLOG_SAVE_REG_PAIR x27, x28, #80
+
+ // save any integral return value(s)
+ stp x0, x1, [sp, #96]
+
+ // save any FP/HFA return value(s)
+ stp d0, d1, [sp, #112]
+ stp d2, d3, [sp, #128]
+
+ mov x0, sp
+ bl OnHijackWorker
+
+ // restore any integral return value(s)
+ ldp x0, x1, [sp, #96]
+
+ // restore any FP/HFA return value(s)
+ ldp d0, d1, [sp, #112]
+ ldp d2, d3, [sp, #128]
+
+ EPILOG_RESTORE_REG_PAIR x19, x20, #16
+ EPILOG_RESTORE_REG_PAIR x21, x22, #32
+ EPILOG_RESTORE_REG_PAIR x23, x24, #48
+ EPILOG_RESTORE_REG_PAIR x25, x26, #64
+ EPILOG_RESTORE_REG_PAIR x27, x28, #80
+ EPILOG_RESTORE_REG_PAIR fp, lr, #144
+ EPILOG_RETURN
+NESTED_END OnHijackTripThread, _TEXT
+
+#endif // FEATURE_HIJACK
// ------------------------------------------------------------------
// Redirection Stub for GC in fully interruptible method
@@ -834,3 +877,26 @@ DynamicHelper DynamicHelperFrameFlags_ObjectArg, _Obj
DynamicHelper DynamicHelperFrameFlags_ObjectArg | DynamicHelperFrameFlags_ObjectArg2, _ObjObj
#endif
+
+#ifdef FEATURE_PREJIT
+// ------------------------------------------------------------------
+// void StubDispatchFixupStub(args in regs x0-x7 & stack and possibly retbuff arg in x8, x11:IndirectionCellAndFlags, x12:DispatchToken)
+//
+// The stub dispatch thunk which transfers control to StubDispatchFixupWorker.
+NESTED_ENTRY StubDispatchFixupStub, _TEXT, NoHandler
+
+ PROLOG_WITH_TRANSITION_BLOCK
+
+ add x0, sp, #__PWTB_TransitionBlock // pTransitionBlock
+ and x1, x11, #-4 // Indirection cell
+ mov x2, #0 // sectionIndex
+ mov x3, #0 // pModule
+ bl StubDispatchFixupWorker
+ mov x9, x0
+
+ EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
+ PATCH_LABEL StubDispatchFixupPatchLabel
+ EPILOG_BRANCH_REG x9
+
+NESTED_END StubDispatchFixupStub, _TEXT
+#endif
diff --git a/src/vm/arm64/crthelpers.S b/src/vm/arm64/crthelpers.S
index 2c677e0a31..36eb4ee7a3 100644
--- a/src/vm/arm64/crthelpers.S
+++ b/src/vm/arm64/crthelpers.S
@@ -18,7 +18,7 @@
//
//void JIT_MemSet(void *dst, int val, SIZE_T count)
//
-// uintptr_t valEx = (char)val;
+// uintptr_t valEx = (unsigned char)val;
// valEx = valEx | valEx << 8;
// valEx = valEx | valEx << 16;
// valEx = valEx | valEx << 32;
@@ -52,7 +52,7 @@
// }
// }
//
-// while(count > 8)
+// while(count >= 8)
// {
// *(uintptr_t*)dst = valEx;
// dst = (uintptr_t*)dst + 1;
@@ -85,7 +85,7 @@
// as C++ method.
LEAF_ENTRY JIT_MemSet, _TEXT
- sxtb w8,w1
+ uxtb w8,w1
sxtw x8,w8
orr x8,x8,x8, lsl #8
orr x8,x8,x8, lsl #0x10
@@ -121,11 +121,9 @@ LOCAL_LABEL(JIT_MemSet_0x60):
cbnz x2,LOCAL_LABEL(JIT_MemSet_0x60)
LOCAL_LABEL(JIT_MemSet_0x7c):
cmp x2,#8
- bls LOCAL_LABEL(JIT_MemSet_0xb8)
- mov x8,#-9
- add x8,x2,x8
- lsr x8,x8,#3
- add x11,x8,#1
+ blo LOCAL_LABEL(JIT_MemSet_0xb8)
+ lsr x8,x2,#3
+ mov x11,x8
mov x10,x0
add x8,x10,x11, lsl #3
LOCAL_LABEL(JIT_MemSet_0x9c):
@@ -150,7 +148,7 @@ LOCAL_LABEL(JIT_MemSet_0xd0):
strb w9,[x0]
LOCAL_LABEL(JIT_MemSet_0xd8):
ret lr
-LEAF_END JIT_MemSet, _TEXT
+LEAF_END_MARKED JIT_MemSet, _TEXT
// See comments above for JIT_MemSet
@@ -188,7 +186,7 @@ LEAF_END JIT_MemSet, _TEXT
// }
// }
//
-// while(count > 8)
+// while(count >= 8)
// {
// *(uintptr_t*)dst = *(uintptr_t*)src;
// dst = (uintptr_t*)dst + 1;
@@ -257,11 +255,8 @@ LOCAL_LABEL(JIT_MemCpy_0x5c):
cbnz x2,LOCAL_LABEL(JIT_MemCpy_0x5c)
LOCAL_LABEL(JIT_MemCpy_0x80):
cmp x2,#8
- bls LOCAL_LABEL(JIT_MemCpy_0xb4)
- mov x8,#-9
- add x8,x2,x8
- lsr x8,x8,#3
- add x9,x8,#1
+ blo LOCAL_LABEL(JIT_MemCpy_0xb4)
+ lsr x9,x2,#3
mov x8,#-8
madd x2,x9,x8,x2
LOCAL_LABEL(JIT_MemCpy_0xa0):
@@ -288,4 +283,4 @@ LOCAL_LABEL(JIT_MemCpy_0xdc):
strb w8,[x0]
LOCAL_LABEL(JIT_MemCpy_0xe8):
ret lr
-LEAF_END JIT_MemCpy, _TEXT
+LEAF_END_MARKED JIT_MemCpy, _TEXT
diff --git a/src/vm/assembly.cpp b/src/vm/assembly.cpp
index b3e7611205..2db3e23fff 100644
--- a/src/vm/assembly.cpp
+++ b/src/vm/assembly.cpp
@@ -924,23 +924,6 @@ Assembly *Assembly::CreateDynamic(AppDomain *pDomain, CreateDynamicAssemblyArgs
}
// Start loading process
-
-#ifdef FEATURE_CAS_POLICY
- // Get the security descriptor for the assembly.
- IAssemblySecurityDescriptor *pSecDesc = pDomainAssembly->GetSecurityDescriptor();
-
- // Propagate identity and permission request information into the assembly's
- // security descriptor. Then when policy is resolved we'll end up with the
- // correct grant set.
- // If identity has not been provided then the caller's assembly will be
- // calculated instead and we'll just copy the granted permissions from the
- // caller to the new assembly and mark policy as resolved (done
- // automatically by SetGrantedPermissionSet).
- pSecDesc->SetRequestedPermissionSet(args->requiredPset,
- args->optionalPset,
- args->refusedPset);
-#endif // FEATURE_CAS_POLICY
-
{
// Create a concrete assembly
// (!Do not remove scoping brace: order is important here: the Assembly holder must destruct before the AllocMemTracker!)
diff --git a/src/vm/assembly.hpp b/src/vm/assembly.hpp
index bcd36b9a5f..54bb03de96 100644
--- a/src/vm/assembly.hpp
+++ b/src/vm/assembly.hpp
@@ -73,9 +73,6 @@ enum DynamicAssemblyFlags
struct CreateDynamicAssemblyArgsGC
{
APPDOMAINREF refThis;
- OBJECTREF refusedPset;
- OBJECTREF optionalPset;
- OBJECTREF requiredPset;
OBJECTREF identity;
ASSEMBLYNAMEREF assemblyName;
U1ARRAYREF securityRulesBlob;
diff --git a/src/vm/assemblyspec.cpp b/src/vm/assemblyspec.cpp
index 2b4b1fb480..b9e94e8a81 100644
--- a/src/vm/assemblyspec.cpp
+++ b/src/vm/assemblyspec.cpp
@@ -1256,6 +1256,15 @@ ICLRPrivBinder* AssemblySpec::GetBindingContextFromParentAssembly(AppDomain *pDo
// ICLRPrivAssembly implements ICLRPrivBinder and thus, "is a" binder in a manner of semantics.
pParentAssemblyBinder = pParentPEAssembly->GetBindingContext();
+ if (pParentAssemblyBinder == NULL)
+ {
+ if (pParentPEAssembly->IsDynamic())
+ {
+ // If the parent assembly is dynamically generated, then use its fallback load context
+ // as the binder.
+ pParentAssemblyBinder = pParentPEAssembly->GetFallbackLoadContextBinder();
+ }
+ }
}
#if defined(FEATURE_HOST_ASSEMBLY_RESOLVER)
diff --git a/src/vm/ceemain.cpp b/src/vm/ceemain.cpp
index 5521d8a4d9..ca819ecbfd 100644
--- a/src/vm/ceemain.cpp
+++ b/src/vm/ceemain.cpp
@@ -177,7 +177,7 @@
#include "ipcfunccall.h"
#include "perflog.h"
#include "../dlls/mscorrc/resource.h"
-#if defined(FEATURE_LEGACYSURFACE) || defined(FEATURE_USE_LCID)
+#ifdef FEATURE_USE_LCID
#include "nlsinfo.h"
#endif
#include "util.hpp"
@@ -3820,7 +3820,6 @@ BOOL STDMETHODCALLTYPE EEDllMain( // TRUE on success, FALSE on error.
GetThreadUICultureId);
InitEEPolicy();
- InitHostProtectionManager();
break;
}
diff --git a/src/vm/certificatecache.cpp b/src/vm/certificatecache.cpp
deleted file mode 100644
index 21ee5a37e1..0000000000
--- a/src/vm/certificatecache.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-//
-
-
-#include "common.h"
-
-#ifdef FEATURE_CAS_POLICY
-#include "certificatecache.h"
-
-CertificateCache::CertificateCache () {
- WRAPPER_NO_CONTRACT;
- m_dwNumEntries = 0;
- for (DWORD i=0; i < MAX_CACHED_CERTIFICATES; i++) {
- m_Entry[i] = NULL;
- }
- m_CertificateCacheCrst.Init(CrstPublisherCertificate);
-}
-
-CertificateCache::~CertificateCache () {
- // Let the OS collect the memory allocated for the cached certificates.
-}
-
-COR_TRUST* CertificateCache::GetEntry (DWORD index) {
- LIMITED_METHOD_CONTRACT;
- if (index < 0 || index >= MAX_CACHED_CERTIFICATES)
- return NULL;
- return m_Entry[index];
-}
-
-EnumCertificateAdditionFlags CertificateCache::AddEntry (COR_TRUST* pCertificate, DWORD* pIndex) {
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_PREEMPTIVE;
- PRECONDITION(pIndex != NULL);
- } CONTRACTL_END;
-
- *pIndex = FindEntry(pCertificate);
- if (*pIndex < MAX_CACHED_CERTIFICATES)
- return AlreadyExists; // the certificate is already cached.
- if (m_dwNumEntries >= MAX_CACHED_CERTIFICATES)
- return CacheSaturated; // the cache is full
-
- CrstHolder csh(&m_CertificateCacheCrst);
- if (m_dwNumEntries >= MAX_CACHED_CERTIFICATES)
- return CacheSaturated;
-
- // check again now that we have the lock.
- *pIndex = FindEntry(pCertificate);
- if (*pIndex < MAX_CACHED_CERTIFICATES)
- return AlreadyExists;
-
- *pIndex = m_dwNumEntries;
- m_Entry[m_dwNumEntries++] = pCertificate;
- return Success;
-}
-
-BOOL CertificateCache::Contains (COR_TRUST* pCertificate) {
- WRAPPER_NO_CONTRACT;
- DWORD index = FindEntry(pCertificate);
- return (index < MAX_CACHED_CERTIFICATES && index >= 0);
-}
-
-DWORD CertificateCache::FindEntry (COR_TRUST* pCertificate) {
- CONTRACTL
- {
- MODE_ANY;
- GC_NOTRIGGER;
- NOTHROW;
- }CONTRACTL_END;
-
- for (DWORD i=0; i < MAX_CACHED_CERTIFICATES; i++) {
- if (m_Entry[i] != NULL) {
- if ((pCertificate->cbSigner == m_Entry[i]->cbSigner) &&
- (memcmp(pCertificate->pbSigner, m_Entry[i]->pbSigner, m_Entry[i]->cbSigner) == 0))
- return i;
- }
- }
- return 0xFFFFFFFF;
-}
-#endif // FEATURE_CAS_POLICY
diff --git a/src/vm/certificatecache.h b/src/vm/certificatecache.h
deleted file mode 100644
index bc6d92ba4c..0000000000
--- a/src/vm/certificatecache.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-//
-
-
-#ifndef _CERTIFICATECACHE_H_
-#define _CERTIFICATECACHE_H_
-
-#include "corpermp.h"
-#include "crst.h"
-
-#define MAX_CACHED_CERTIFICATES 10
-
-enum EnumCertificateAdditionFlags {
- Success = 0,
- CacheSaturated = 1,
- AlreadyExists = 2
-};
-
-class CertificateCache {
-public:
- EnumCertificateAdditionFlags AddEntry (COR_TRUST* pCertificate, DWORD* pIndex);
- COR_TRUST* GetEntry (DWORD index);
- BOOL Contains (COR_TRUST* pCertificate);
-
- CertificateCache ();
- ~CertificateCache ();
-
-private:
- DWORD m_dwNumEntries;
- COR_TRUST* m_Entry [MAX_CACHED_CERTIFICATES];
- CrstStatic m_CertificateCacheCrst;
-
- DWORD FindEntry (COR_TRUST* pCertificate);
-};
-
-#endif //_CERTIFICATECACHE_H_
diff --git a/src/vm/cgensys.h b/src/vm/cgensys.h
index 4dd1ee4b4b..d55d15dd7d 100644
--- a/src/vm/cgensys.h
+++ b/src/vm/cgensys.h
@@ -105,6 +105,7 @@ inline void GetSpecificCpuInfo(CORINFO_CPU * cpuInfo)
#if (defined(_TARGET_X86_) || defined(_TARGET_AMD64_)) && !defined(CROSSGEN_COMPILE)
extern "C" DWORD __stdcall getcpuid(DWORD arg, unsigned char result[16]);
+extern "C" DWORD __stdcall getextcpuid(DWORD arg1, DWORD arg2, unsigned char result[16]);
extern "C" DWORD __stdcall xmmYmmStateSupport();
#endif
diff --git a/src/vm/codeman.cpp b/src/vm/codeman.cpp
index 98f0e53d3d..8fc851d86b 100644
--- a/src/vm/codeman.cpp
+++ b/src/vm/codeman.cpp
@@ -70,6 +70,16 @@ SVAL_IMPL(LONG, ExecutionManager, m_dwWriterLock);
CrstStatic ExecutionManager::m_JumpStubCrst;
CrstStatic ExecutionManager::m_RangeCrst;
+unsigned ExecutionManager::m_normal_JumpStubLookup;
+unsigned ExecutionManager::m_normal_JumpStubUnique;
+unsigned ExecutionManager::m_normal_JumpStubBlockAllocCount;
+unsigned ExecutionManager::m_normal_JumpStubBlockFullCount;
+
+unsigned ExecutionManager::m_LCG_JumpStubLookup;
+unsigned ExecutionManager::m_LCG_JumpStubUnique;
+unsigned ExecutionManager::m_LCG_JumpStubBlockAllocCount;
+unsigned ExecutionManager::m_LCG_JumpStubBlockFullCount;
+
#endif // DACCESS_COMPILE
#if defined(_TARGET_AMD64_) && !defined(DACCESS_COMPILE) // We don't do this on ARM just amd64
@@ -1227,7 +1237,7 @@ bool DoesOSSupportAVX()
PGETENABLEDXSTATEFEATURES pfnGetEnabledXStateFeatures = NULL;
HMODULE hMod = WszLoadLibraryEx(WINDOWS_KERNEL32_DLLNAME_W, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
- if(hMod = NULL)
+ if(hMod == NULL)
return FALSE;
pfnGetEnabledXStateFeatures = (PGETENABLEDXSTATEFEATURES)GetProcAddress(hMod, "GetEnabledXStateFeatures");
@@ -1329,7 +1339,7 @@ void EEJitManager::SetCpuInfo()
CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_USE_AVX);
if (maxCpuId >= 0x07)
{
- (void) getcpuid(0x07, buffer);
+ (void) getextcpuid(0, 0x07, buffer);
if ((buffer[4] & 0x20) != 0)
{
CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_USE_AVX2);
@@ -3020,7 +3030,7 @@ void * EEJitManager::allocCodeFragmentBlock(size_t blockSize, unsigned alignment
{
CrstHolder ch(&m_CodeHeapCritSec);
- mem = (TADDR) allocCodeRaw(&requestInfo, sizeof(TADDR), blockSize, alignment, &pCodeHeap);
+ mem = (TADDR) allocCodeRaw(&requestInfo, sizeof(CodeHeader), blockSize, alignment, &pCodeHeap);
// CodeHeader comes immediately before the block
CodeHeader * pCodeHdr = (CodeHeader *) (mem - sizeof(CodeHeader));
@@ -4930,6 +4940,49 @@ void ExecutionManager::Unload(LoaderAllocator *pLoaderAllocator)
GetEEJitManager()->Unload(pLoaderAllocator);
}
+// This method is used by the JIT and the runtime for PreStubs. It will return
+// the address of a short jump thunk that will jump to the 'target' address.
+// It is only needed when the target architecture has a perferred call instruction
+// that doesn't actually span the full address space. This is true for x64 where
+// the preferred call instruction is a 32-bit pc-rel call instruction.
+// (This is also true on ARM64, but it not true for x86)
+//
+// For these architectures, in JITed code and in the prestub, we encode direct calls
+// using the preferred call instruction and we also try to insure that the Jitted
+// code is within the 32-bit pc-rel range of clr.dll to allow direct JIT helper calls.
+//
+// When the call target is too far away to encode using the preferred call instruction.
+// We will create a short code thunk that uncoditionally jumps to the target address.
+// We call this jump thunk a "jumpStub" in the CLR code.
+// We have the requirement that the "jumpStub" that we create on demand be usable by
+// the preferred call instruction, this requires that on x64 the location in memory
+// where we create the "jumpStub" be within the 32-bit pc-rel range of the call that
+// needs it.
+//
+// The arguments to this method:
+// pMD - the MethodDesc for the currenty managed method in Jitted code
+// or for the target method for a PreStub
+// It is required if calling from or to a dynamic method (LCG method)
+// target - The call target address (this is the address that was too far to encode)
+// loAddr
+// hiAddr - The range of the address that we must place the jumpStub in, so that it
+// can be used to encode the preferred call instruction.
+// pLoaderAllocator
+// - The Loader allocator to use for allocations, this can be null.
+// When it is null, then the pMD must be valid and is used to obtain
+// the allocator.
+//
+// This method will either locate and return an existing jumpStub thunk that can be
+// reused for this request, because it meets all of the requirements necessary.
+// Or it will allocate memory in the required region and create a new jumpStub that
+// meets all of the requirements necessary.
+//
+// Note that for dynamic methods (LCG methods) we cannot share the jumpStubs between
+// different methods. This is because we allow for the unloading (reclaiming) of
+// individual dynamic methods. And we associate the jumpStub memory allocated with
+// the dynamic method that requested the jumpStub.
+//
+
PCODE ExecutionManager::jumpStub(MethodDesc* pMD, PCODE target,
BYTE * loAddr, BYTE * hiAddr,
LoaderAllocator *pLoaderAllocator)
@@ -4949,6 +5002,8 @@ PCODE ExecutionManager::jumpStub(MethodDesc* pMD, PCODE target,
pLoaderAllocator = pMD->GetLoaderAllocatorForCode();
_ASSERTE(pLoaderAllocator != NULL);
+ bool isLCG = pMD && pMD->IsLCGMethod();
+
CrstHolder ch(&m_JumpStubCrst);
JumpStubCache * pJumpStubCache = (JumpStubCache *)pLoaderAllocator->m_pJumpStubCache;
@@ -4958,6 +5013,19 @@ PCODE ExecutionManager::jumpStub(MethodDesc* pMD, PCODE target,
pLoaderAllocator->m_pJumpStubCache = pJumpStubCache;
}
+ if (isLCG)
+ {
+ // Increment counter of LCG jump stub lookup attempts
+ m_LCG_JumpStubLookup++;
+ }
+ else
+ {
+ // Increment counter of normal jump stub lookup attempts
+ m_normal_JumpStubLookup++;
+ }
+
+ // search for a matching jumpstub in the jumpStubCache
+ //
for (JumpStubTable::KeyIterator i = pJumpStubCache->m_Table.Begin(target),
end = pJumpStubCache->m_Table.End(target); i != end; i++)
{
@@ -5000,6 +5068,8 @@ PCODE ExecutionManager::getNextJumpStub(MethodDesc* pMD, PCODE target,
JumpStubBlockHeader ** ppHead = isLCG ? &(pMD->AsDynamicMethodDesc()->GetLCGMethodResolver()->m_jumpStubBlock) : &(((JumpStubCache *)(pLoaderAllocator->m_pJumpStubCache))->m_pBlocks);
JumpStubBlockHeader * curBlock = *ppHead;
+ // allocate a new jumpstub from 'curBlock' if it is not fully allocated
+ //
while (curBlock)
{
_ASSERTE(pLoaderAllocator == (isLCG ? curBlock->GetHostCodeHeap()->GetAllocator() : curBlock->GetLoaderAllocator()));
@@ -5020,6 +5090,17 @@ PCODE ExecutionManager::getNextJumpStub(MethodDesc* pMD, PCODE target,
// If we get here then we need to allocate a new JumpStubBlock
+ if (isLCG)
+ {
+ // Increment counter of LCG jump stub block allocations
+ m_LCG_JumpStubBlockAllocCount++;
+ }
+ else
+ {
+ // Increment counter of normal jump stub block allocations
+ m_normal_JumpStubBlockAllocCount++;
+ }
+
// allocJumpStubBlock will allocate from the LoaderCodeHeap for normal methods and HostCodeHeap for LCG methods
// this can throw an OM exception
curBlock = ExecutionManager::GetEEJitManager()->allocJumpStubBlock(pMD, DEFAULT_JUMPSTUBS_PER_BLOCK, loAddr, hiAddr, pLoaderAllocator);
@@ -5062,8 +5143,54 @@ DONE:
pJumpStubCache->m_Table.Add(entry);
}
- curBlock->m_used++;
+ curBlock->m_used++; // record that we have used up one more jumpStub in the block
+
+ // Every time we create a new jumpStub thunk one of these counters is incremented
+ if (isLCG)
+ {
+ // Increment counter of LCG unique jump stubs
+ m_LCG_JumpStubUnique++;
+ }
+ else
+ {
+ // Increment counter of normal unique jump stubs
+ m_normal_JumpStubUnique++;
+ }
+ // Is the 'curBlock' now completely full?
+ if (curBlock->m_used == curBlock->m_allocated)
+ {
+ if (isLCG)
+ {
+ // Increment counter of LCG jump stub blocks that are full
+ m_LCG_JumpStubBlockFullCount++;
+
+ // Log this "LCG JumpStubBlock filled" along with the four counter values
+ STRESS_LOG4(LF_JIT, LL_INFO1000, "LCG JumpStubBlock filled - (%u, %u, %u, %u)\n",
+ m_LCG_JumpStubLookup, m_LCG_JumpStubUnique,
+ m_LCG_JumpStubBlockAllocCount, m_LCG_JumpStubBlockFullCount);
+ }
+ else
+ {
+ // Increment counter of normal jump stub blocks that are full
+ m_normal_JumpStubBlockFullCount++;
+
+ // Log this "normal JumpStubBlock filled" along with the four counter values
+ STRESS_LOG4(LF_JIT, LL_INFO1000, "Normal JumpStubBlock filled - (%u, %u, %u, %u)\n",
+ m_normal_JumpStubLookup, m_normal_JumpStubUnique,
+ m_normal_JumpStubBlockAllocCount, m_normal_JumpStubBlockFullCount);
+
+ if ((m_LCG_JumpStubLookup > 0) && ((m_normal_JumpStubBlockFullCount % 5) == 1))
+ {
+ // Every 5 occurance of the above we also
+ // Log "LCG JumpStubBlock status" along with the four counter values
+ STRESS_LOG4(LF_JIT, LL_INFO1000, "LCG JumpStubBlock status - (%u, %u, %u, %u)\n",
+ m_LCG_JumpStubLookup, m_LCG_JumpStubUnique,
+ m_LCG_JumpStubBlockAllocCount, m_LCG_JumpStubBlockFullCount);
+ }
+ }
+ }
+
RETURN((PCODE)jumpStub);
}
#endif // !DACCESS_COMPILE && !CROSSGEN_COMPILE
diff --git a/src/vm/codeman.h b/src/vm/codeman.h
index 0fe261a92f..5fbddea875 100644
--- a/src/vm/codeman.h
+++ b/src/vm/codeman.h
@@ -69,6 +69,10 @@ Abstract:
#include "pedecoder.h"
#include "gcinfo.h"
+#if defined(WIN64EXCEPTIONS) && !defined(USE_INDIRECT_CODEHEADER)
+#error "WIN64EXCEPTIONS requires USE_INDIRECT_CODEHEADER"
+#endif // WIN64EXCEPTIONS && !USE_INDIRECT_CODEHEADER
+
class MethodDesc;
class ICorJitCompiler;
class IJitManager;
@@ -177,7 +181,7 @@ public:
return phdrMDesc;
}
#if defined(FEATURE_GDBJIT)
- PTR_BYTE GetCalledMethods()
+ VOID* GetCalledMethods()
{
SUPPORTS_DAC;
return pCalledMethods;
@@ -1476,6 +1480,16 @@ private:
};
typedef SHash<JumpStubTraits> JumpStubTable;
+ static unsigned m_normal_JumpStubLookup;
+ static unsigned m_normal_JumpStubUnique;
+ static unsigned m_normal_JumpStubBlockAllocCount;
+ static unsigned m_normal_JumpStubBlockFullCount;
+
+ static unsigned m_LCG_JumpStubLookup;
+ static unsigned m_LCG_JumpStubUnique;
+ static unsigned m_LCG_JumpStubBlockAllocCount;
+ static unsigned m_LCG_JumpStubBlockFullCount;
+
struct JumpStubCache
{
JumpStubCache()
diff --git a/src/vm/comsynchronizable.cpp b/src/vm/comsynchronizable.cpp
index e62ec13dde..b486687752 100644
--- a/src/vm/comsynchronizable.cpp
+++ b/src/vm/comsynchronizable.cpp
@@ -28,7 +28,6 @@
#include "remoting.h"
#endif
#include "eeconfig.h"
-#include "stackcompressor.h"
#ifdef FEATURE_REMOTING
#include "appdomainhelper.h"
#include "objectclone.h"
@@ -53,9 +52,8 @@ struct SharedState
OBJECTHANDLE m_Threadable;
OBJECTHANDLE m_ThreadStartArg;
Thread *m_Internal;
- OBJECTHANDLE m_Principal;
- SharedState(OBJECTREF threadable, OBJECTREF threadStartArg, Thread *internal, OBJECTREF principal)
+ SharedState(OBJECTREF threadable, OBJECTREF threadStartArg, Thread *internal)
{
CONTRACTL
{
@@ -72,8 +70,6 @@ struct SharedState
m_ThreadStartArg = ad->CreateHandle(threadStartArg);
m_Internal = internal;
-
- m_Principal = ad->CreateHandle(principal);
}
~SharedState()
@@ -96,7 +92,6 @@ struct SharedState
{
DestroyHandle(m_Threadable);
DestroyHandle(m_ThreadStartArg);
- DestroyHandle(m_Principal);
}
}
};
@@ -231,7 +226,6 @@ void ThreadNative::KickOffThread_Worker(LPVOID ptr)
// we are saving the delagate and result primarily for debugging
struct _gc
{
- OBJECTREF orPrincipal;
OBJECTREF orThreadStartArg;
OBJECTREF orDelegate;
OBJECTREF orResult;
@@ -245,22 +239,6 @@ void ThreadNative::KickOffThread_Worker(LPVOID ptr)
GCPROTECT_BEGIN(gc);
BEGIN_SO_INTOLERANT_CODE(pThread);
- gc.orPrincipal = ObjectFromHandle(args->share->m_Principal);
-
-#ifdef FEATURE_IMPERSONATION
- // Push the initial security principal object (if any) onto the
- // managed thread.
- if (gc.orPrincipal != NULL)
- {
- gc.orThread = args->pThread->GetExposedObject();
- MethodDescCallSite setPrincipalInternal(METHOD__THREAD__SET_PRINCIPAL_INTERNAL, &gc.orThread);
- ARG_SLOT argsToSetPrincipal[2];
- argsToSetPrincipal[0] = ObjToArgSlot(gc.orThread);
- argsToSetPrincipal[1] = ObjToArgSlot(gc.orPrincipal);
- setPrincipalInternal.Call(argsToSetPrincipal);
- }
-#endif
-
gc.orDelegate = ObjectFromHandle(args->share->m_Threadable);
gc.orThreadStartArg = ObjectFromHandle(args->share->m_ThreadStartArg);
@@ -435,20 +413,20 @@ ULONG __stdcall ThreadNative::KickOffThread(void* pass)
}
-FCIMPL3(void, ThreadNative::Start, ThreadBaseObject* pThisUNSAFE, Object* pPrincipalUNSAFE, StackCrawlMark* pStackMark)
+FCIMPL2(void, ThreadNative::Start, ThreadBaseObject* pThisUNSAFE, StackCrawlMark* pStackMark)
{
FCALL_CONTRACT;
HELPER_METHOD_FRAME_BEGIN_NOPOLL();
- StartInner(pThisUNSAFE, pPrincipalUNSAFE, pStackMark);
+ StartInner(pThisUNSAFE, pStackMark);
HELPER_METHOD_FRAME_END_POLL();
}
FCIMPLEND
// Start up a thread, which by now should be in the ThreadStore's Unstarted list.
-void ThreadNative::StartInner(ThreadBaseObject* pThisUNSAFE, Object* pPrincipalUNSAFE, StackCrawlMark* pStackMark)
+void ThreadNative::StartInner(ThreadBaseObject* pThisUNSAFE, StackCrawlMark* pStackMark)
{
CONTRACTL
{
@@ -460,11 +438,9 @@ void ThreadNative::StartInner(ThreadBaseObject* pThisUNSAFE, Object* pPrincipalU
struct _gc
{
- OBJECTREF pPrincipal;
THREADBASEREF pThis;
} gc;
- gc.pPrincipal = (OBJECTREF) pPrincipalUNSAFE;
gc.pThis = (THREADBASEREF) pThisUNSAFE;
GCPROTECT_BEGIN(gc);
@@ -499,7 +475,7 @@ void ThreadNative::StartInner(ThreadBaseObject* pThisUNSAFE, Object* pPrincipalU
// Allocate this away from our stack, so we can unwind without affecting
// KickOffThread. It is inside a GCFrame, so we can enable GC now.
- NewHolder<SharedState> share(new SharedState(threadable, threadStartArg, pNewThread, gc.pPrincipal));
+ NewHolder<SharedState> share(new SharedState(threadable, threadStartArg, pNewThread));
pNewThread->IncExternalCount();
diff --git a/src/vm/comsynchronizable.h b/src/vm/comsynchronizable.h
index 65ec21228b..d9c2defd70 100644
--- a/src/vm/comsynchronizable.h
+++ b/src/vm/comsynchronizable.h
@@ -64,11 +64,11 @@ public:
static LPVOID F_CALL_CONV FastGetCurrentThread();
static LPVOID F_CALL_CONV FastGetDomain();
- static void StartInner(ThreadBaseObject* pThisUNSAFE, Object* pPrincipalUNSAFE, StackCrawlMark* pStackMark);
+ static void StartInner(ThreadBaseObject* pThisUNSAFE, StackCrawlMark* pStackMark);
static FCDECL1(void, Abort, ThreadBaseObject* pThis);
static FCDECL1(void, ResetAbort, ThreadBaseObject* pThis);
- static FCDECL3(void, Start, ThreadBaseObject* pThisUNSAFE, Object* pPrincipalUNSAFE, StackCrawlMark* pStackMark);
+ static FCDECL2(void, Start, ThreadBaseObject* pThisUNSAFE, StackCrawlMark* pStackMark);
#ifndef FEATURE_CORECLR
static FCDECL1(void, Suspend, ThreadBaseObject* pThisUNSAFE);
static FCDECL1(void, Resume, ThreadBaseObject* pThisUNSAFE);
diff --git a/src/vm/confighelper.cpp b/src/vm/confighelper.cpp
deleted file mode 100644
index 815aac7c08..0000000000
--- a/src/vm/confighelper.cpp
+++ /dev/null
@@ -1,309 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//*****************************************************************************
-// ConfigHelper.cpp
-//
-//*****************************************************************************
-//
-// XML Helper so that NodeFactory can be implemented in Managed code
-//
-
-
-
-#include "common.h"
-
-#include "confighelper.h"
-
-ConfigFactory::ConfigFactory(OBJECTREF *pFactory)
-{
- CONTRACTL
- {
- NOTHROW;
- MODE_COOPERATIVE;
- GC_TRIGGERS;
- }
- CONTRACTL_END;
-
- _ASSERTE(pFactory != NULL);
- Initialize(pFactory);
- AddRef();
-}
-
-HRESULT STDMETHODCALLTYPE ConfigFactory::NotifyEvent(
- /* [in] */ IXMLNodeSource __RPC_FAR *pSource,
- /* [in] */ XML_NODEFACTORY_EVENT iEvt)
-{
- CONTRACTL
- {
- GC_TRIGGERS;
- MODE_ANY;
- NOTHROW;
- SO_TOLERANT;
- }
- CONTRACTL_END;
-
- HRESULT hr = S_OK;
-
- BEGIN_SO_INTOLERANT_CODE_NOTHROW(GetThread(), return COR_E_STACKOVERFLOW)
-
- EX_TRY
- {
- GetNotifyEventFunctionality()(iEvt);
- }
- EX_CATCH_HRESULT(hr);
-
- END_SO_INTOLERANT_CODE
-
- return hr;
-}
-
-//---------------------------------------------------------------------------
-HRESULT STDMETHODCALLTYPE ConfigFactory::BeginChildren(
- /* [in] */ IXMLNodeSource __RPC_FAR *pSource,
- /* [in] */ XML_NODE_INFO __RPC_FAR *pNodeInfo)
-{
- CONTRACTL
- {
- GC_TRIGGERS;
- MODE_ANY;
- NOTHROW;
- SO_TOLERANT;
- }
- CONTRACTL_END;
-
- HRESULT hr = S_OK;
-
- BEGIN_SO_INTOLERANT_CODE_NOTHROW(GetThread(), return COR_E_STACKOVERFLOW)
- EX_TRY
- {
- GetBeginChildrenFunctionality()(pNodeInfo->dwSize,
- pNodeInfo->dwSubType,
- pNodeInfo->dwType,
- pNodeInfo->fTerminal,
- pNodeInfo->pwcText,
- pNodeInfo->ulLen,
- pNodeInfo->ulNsPrefixLen);
- }
- EX_CATCH_HRESULT(hr);
-
- END_SO_INTOLERANT_CODE
-
- return hr;
-
-}
-
-//---------------------------------------------------------------------------
-HRESULT STDMETHODCALLTYPE ConfigFactory::EndChildren(
- /* [in] */ IXMLNodeSource __RPC_FAR *pSource,
- /* [in] */ BOOL fEmptyNode,
- /* [in] */ XML_NODE_INFO __RPC_FAR *pNodeInfo)
-{
- CONTRACTL
- {
- GC_TRIGGERS;
- MODE_ANY;
- NOTHROW;
- SO_TOLERANT;
- }
- CONTRACTL_END;
-
- HRESULT hr = S_OK;
-
- BEGIN_SO_INTOLERANT_CODE_NOTHROW(GetThread(), return COR_E_STACKOVERFLOW)
-
- EX_TRY
- {
- GetEndChildrenFunctionality()(fEmptyNode,
- pNodeInfo->dwSize,
- pNodeInfo->dwSubType,
- pNodeInfo->dwType,
- pNodeInfo->fTerminal,
- pNodeInfo->pwcText,
- pNodeInfo->ulLen,
- pNodeInfo->ulNsPrefixLen);
- }
- EX_CATCH_HRESULT(hr);
-
- END_SO_INTOLERANT_CODE
-
- return hr;
-}
-
-//---------------------------------------------------------------------------
-HRESULT STDMETHODCALLTYPE ConfigFactory::CreateNode(
- /* [in] */ IXMLNodeSource __RPC_FAR *pSource,
- /* [in] */ PVOID pNode,
- /* [in] */ USHORT cNumRecs,
- /* [in] */ XML_NODE_INFO* __RPC_FAR * __RPC_FAR apNodeInfo)
-{
- CONTRACTL
- {
- GC_TRIGGERS;
- MODE_ANY;
- NOTHROW;
- SO_TOLERANT;
- }
- CONTRACTL_END;
-
- HRESULT hr = S_OK;
-
- BEGIN_SO_INTOLERANT_CODE_NOTHROW(GetThread(), return COR_E_STACKOVERFLOW)
-
- EX_TRY
- {
- DWORD i;
- WCHAR wstr[128];
- WCHAR *pString = wstr;
- DWORD dwString = sizeof(wstr)/sizeof(WCHAR);
-
- for( i = 0; i < cNumRecs; i++) {
- if ( apNodeInfo[i]->ulLen >= dwString) {
- dwString = apNodeInfo[i]->ulLen+1;
- if(pString != wstr) delete [] pString;
- pString = new(nothrow) WCHAR[dwString];
- IfNullGo(pString);
- }
-
- pString[apNodeInfo[i]->ulLen] = W('\0');
- wcsncpy_s(pString, dwString, apNodeInfo[i]->pwcText, apNodeInfo[i]->ulLen);
-
- if(i == 0) {
- GetCreateNodeFunctionality()(apNodeInfo[i]->dwSize,
- apNodeInfo[i]->dwSubType,
- apNodeInfo[i]->dwType,
- apNodeInfo[i]->fTerminal,
- pString,
- apNodeInfo[i]->ulLen,
- apNodeInfo[i]->ulNsPrefixLen);
- }
- else {
- GetCreateAttributeFunctionality()(apNodeInfo[i]->dwSize,
- apNodeInfo[i]->dwSubType,
- apNodeInfo[i]->dwType,
- apNodeInfo[i]->fTerminal,
- pString,
- apNodeInfo[i]->ulLen,
- apNodeInfo[i]->ulNsPrefixLen);
- }
-
- if (FAILED(hr))
- break;
- }
- if(pString != wstr) delete [] pString;
-ErrExit:;
- }
- EX_CATCH_HRESULT(hr);
-
- END_SO_INTOLERANT_CODE
- return hr;
-}
-
-
-
-STDAPI GetXMLObjectEx(IXMLParser **ppv);
-
-//
-//Helper routines to call into managed Node Factory
-//
-
-HRESULT ConfigNative::RunInternal(OBJECTREF *pFactory, LPCWSTR filename)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_TRIGGERS;
- INJECT_FAULT(return E_OUTOFMEMORY;);
- }
- CONTRACTL_END
-
- HRESULT hr = S_OK;
- SafeComHolder<IXMLParser> pIXMLParser;
- SafeComHolder<ConfigFactory> helperfactory;
- SafeComHolder<IStream> pFile;
- if (!pFactory){
- return E_POINTER;
- }
-
- hr = CreateConfigStreamHelper(filename,&pFile);
- if(FAILED(hr))
- return hr;
-
- hr = GetXMLObjectEx(&pIXMLParser);
- if(FAILED(hr))
- return hr;
-
- helperfactory = new (nothrow)ConfigFactory(pFactory); // RefCount = 1
- if ( ! helperfactory) {
- return E_OUTOFMEMORY;
- }
-
- hr = pIXMLParser->SetInput(pFile); // filestream's RefCount=2
- if(FAILED(hr))
- return hr;
-
- hr = pIXMLParser->SetFactory(helperfactory); // factory's RefCount=2
- if(FAILED(hr))
- return hr;
-
- // On X86, we emit a call to LogUMTransition which needs us to be in preemptive GC mode
- // Since we are done dealing with REF's after the call to ConfigFactory constructor,
- // it is safe to switch to preemptive mode here
- {
- GCX_PREEMP();
- hr = pIXMLParser->Run(-1);
- }
-
- if (hr== (HRESULT) XML_E_MISSINGROOT) //empty file
- hr=S_OK;
- return hr;
-}
-
-//
-// Entrypoint to return an Helper interface which Managed code can call to build managed Node factory
-//
-
-FCIMPL2(void, ConfigNative::RunParser, Object* refHandlerUNSAFE, StringObject* strFileNameUNSAFE)
-{
- FCALL_CONTRACT;
-
- OBJECTREF refHandler = (OBJECTREF) refHandlerUNSAFE;
- STRINGREF strFileName = (STRINGREF) strFileNameUNSAFE;
-
- HELPER_METHOD_FRAME_BEGIN_2(refHandler, strFileName);
-
- HRESULT hr;
- WCHAR* pString;
- int iString;
- LPWSTR pFileName;
- CQuickBytes qb;
-
- if (refHandler == NULL) {
- COMPlusThrowArgumentNull(W("handler"));
- }
-
- if (strFileName == NULL) {
- COMPlusThrowArgumentNull(W("fileName"));
- }
-
- //Get string data.
- strFileName->RefInterpretGetStringValuesDangerousForGC(&pString, &iString);
-
- S_UINT32 bufSize = (S_UINT32(iString) + S_UINT32(1)) * S_UINT32(sizeof(WCHAR));
- _ASSERTE(!bufSize.IsOverflow());
- if(bufSize.IsOverflow())
- {
- ThrowWin32(ERROR_ARITHMETIC_OVERFLOW);
- }
-
- pFileName = (LPWSTR) qb.AllocThrows(bufSize.Value());
- memcpy(pFileName, pString, bufSize.Value());
-
- hr = RunInternal(&refHandler, pFileName);
-
- if (FAILED(hr))
- COMPlusThrowHR(hr);
-
- HELPER_METHOD_FRAME_END();
-}
-FCIMPLEND
diff --git a/src/vm/confighelper.h b/src/vm/confighelper.h
deleted file mode 100644
index 3784dfc39b..0000000000
--- a/src/vm/confighelper.h
+++ /dev/null
@@ -1,203 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//*****************************************************************************
-// ConfigHelper.h
-//
-//*****************************************************************************
-//
-// These are unmanaged definitions of interfaces used call Managed Node Factories
-// If you make any changes please do corresponding changes in \src\bcl\system\__xmlparser.cs
-//
-
-
-#ifndef _CONFIGHELPER_H
-#define _CONFIGHELPER_H
-
-#include <mscoree.h>
-#include <xmlparser.h>
-#include <mscorcfg.h>
-#include "unknwn.h"
-#include "../xmlparser/_reference.h"
-#include "../xmlparser/_unknown.h"
-#include "comdelegate.h"
-
-class ConfigFactory : public _unknown<IXMLNodeFactory, &IID_IXMLNodeFactory>
-{
- #define ICONFIGHANDLER_CALLBACK_COUNT 6
- OBJECTREF *m_pManagedFactory;
- LPVOID eventCallbacks[ICONFIGHANDLER_CALLBACK_COUNT];
-
- // We assume the offsets as per the object layout of ConfigTreeParser defined in CfgParser.cs
- // Any changes made at either place must be propagated to the other
- LPVOID GetCallbackAtOffset(DWORD dwOffset)
- {
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(dwOffset < ICONFIGHANDLER_CALLBACK_COUNT);
- }
- CONTRACTL_END;
-
- PTRARRAYREF refAllDelegates = (PTRARRAYREF)ObjectToOBJECTREF((Object *)((*m_pManagedFactory)->GetPtrOffset(0)));
- _ASSERTE(refAllDelegates->GetNumComponents()==ICONFIGHANDLER_CALLBACK_COUNT);
- return COMDelegate::ConvertToCallback(refAllDelegates->GetAt(dwOffset));
- }
-
- void Initialize(OBJECTREF *pFactory)
- {
- CONTRACTL
- {
- NOTHROW;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(pFactory != NULL);
- }
- CONTRACTL_END;
-
- m_pManagedFactory = pFactory;
- EX_TRY
- {
- for(int i=0; i<ICONFIGHANDLER_CALLBACK_COUNT; i++)
- {
- eventCallbacks[i] = GetCallbackAtOffset(i);
- }
- } EX_CATCH { } EX_END_CATCH(SwallowAllExceptions);
- }
-
- typedef VOID (STDMETHODCALLTYPE *NotifyEventCallback)(
- /* [in] */ XML_NODEFACTORY_EVENT iEvt);
-
- NotifyEventCallback GetNotifyEventFunctionality()
- {
- LIMITED_METHOD_CONTRACT;
- _ASSERTE(eventCallbacks[0] != NULL);
- return (NotifyEventCallback)eventCallbacks[0];
- }
-
- typedef VOID (STDMETHODCALLTYPE *BeginChildrenCallback)(
- /* [in] */ DWORD dwSize,
- /* [in] */ DWORD dwSubType,
- /* [in] */ DWORD dwType,
- /* [in] */ BOOL fTerminal,
- /* [in] */ LPCWSTR pwcText,
- /* [in] */ DWORD ulLen,
- /* [in] */ DWORD ulNsPrefixLen);
-
- BeginChildrenCallback GetBeginChildrenFunctionality()
- {
- LIMITED_METHOD_CONTRACT;
- _ASSERTE(eventCallbacks[1] != NULL);
- return (BeginChildrenCallback)eventCallbacks[1];
- }
-
- typedef VOID (STDMETHODCALLTYPE *EndChildrenCallback)(
- /* [in] */ BOOL fEmpty,
- /* [in] */ DWORD dwSize,
- /* [in] */ DWORD dwSubType,
- /* [in] */ DWORD dwType,
- /* [in] */ BOOL fTerminal,
- /* [in] */ LPCWSTR pwcText,
- /* [in] */ DWORD ulLen,
- /* [in] */ DWORD ulNsPrefixLen);
-
- EndChildrenCallback GetEndChildrenFunctionality()
- {
- LIMITED_METHOD_CONTRACT;
- _ASSERTE(eventCallbacks[2] != NULL);
- return (EndChildrenCallback)eventCallbacks[2];
- }
-
- typedef VOID (STDMETHODCALLTYPE *ErrorCallback)(
- /* [in] */ DWORD dwSize,
- /* [in] */ DWORD dwSubType,
- /* [in] */ DWORD dwType,
- /* [in] */ BOOL fTerminal,
- /* [in] */ LPCWSTR pwcText,
- /* [in] */ DWORD ulLen,
- /* [in] */ DWORD ulNsPrefixLen);
-
- ErrorCallback GetErrorFunctionality()
- {
- _ASSERTE(eventCallbacks[3] != NULL);
- return (ErrorCallback)eventCallbacks[3];
- }
-
- typedef VOID (STDMETHODCALLTYPE *CreateNodeCallback)(
- /* [in] */ DWORD dwSize,
- /* [in] */ DWORD dwSubType,
- /* [in] */ DWORD dwType,
- /* [in] */ BOOL fTerminal,
- /* [in] */ LPCWSTR pwcText,
- /* [in] */ DWORD ulLen,
- /* [in] */ DWORD ulNsPrefixLen);
-
- CreateNodeCallback GetCreateNodeFunctionality()
- {
- LIMITED_METHOD_CONTRACT;
- _ASSERTE(eventCallbacks[4] != NULL);
- return (CreateNodeCallback)eventCallbacks[4];
- }
-
- typedef VOID (STDMETHODCALLTYPE *CreateAttributeCallback)(
- /* [in] */ DWORD dwSize,
- /* [in] */ DWORD dwSubType,
- /* [in] */ DWORD dwType,
- /* [in] */ BOOL fTerminal,
- /* [in] */ LPCWSTR pwcText,
- /* [in] */ DWORD ulLen,
- /* [in] */ DWORD ulNsPrefixLen);
-
- CreateAttributeCallback GetCreateAttributeFunctionality()
- {
- LIMITED_METHOD_CONTRACT;
- _ASSERTE(eventCallbacks[5] != NULL);
- return (CreateAttributeCallback)eventCallbacks[5];
- }
- #undef ICONFIGHANDLER_CALLBACK_COUNT
-
-public:
- ConfigFactory(OBJECTREF *pFactory);
-
- HRESULT STDMETHODCALLTYPE NotifyEvent(
- /* [in] */ IXMLNodeSource __RPC_FAR *pSource,
- /* [in] */ XML_NODEFACTORY_EVENT iEvt);
-
- HRESULT STDMETHODCALLTYPE BeginChildren(
- /* [in] */ IXMLNodeSource __RPC_FAR *pSource,
- /* [in] */ XML_NODE_INFO* __RPC_FAR pNodeInfo);
-
- HRESULT STDMETHODCALLTYPE EndChildren(
- /* [in] */ IXMLNodeSource __RPC_FAR *pSource,
- /* [in] */ BOOL fEmptyNode,
- /* [in] */ XML_NODE_INFO* __RPC_FAR pNodeInfo);
-
- HRESULT STDMETHODCALLTYPE Error(
- /* [in] */ IXMLNodeSource __RPC_FAR *pSource,
- /* [in] */ HRESULT hrErrorCode,
- /* [in] */ USHORT cNumRecs,
- /* [in] */ XML_NODE_INFO* __RPC_FAR * __RPC_FAR apNodeInfo)
- {
- LIMITED_METHOD_CONTRACT;
- STATIC_CONTRACT_SO_TOLERANT;
- return hrErrorCode;
- }
-
- HRESULT STDMETHODCALLTYPE CreateNode(
- /* [in] */ IXMLNodeSource __RPC_FAR *pSource,
- /* [in] */ PVOID pNodeParent,
- /* [in] */ USHORT cNumRecs,
- /* [in] */ XML_NODE_INFO* __RPC_FAR * __RPC_FAR apNodeInfo);
-};
-
-class ConfigNative
-{
- static HRESULT RunInternal(OBJECTREF *pFactory, LPCWSTR filename);
-
-public:
- static FCDECL2(void, RunParser, Object* refHandlerUNSAFE, StringObject* strFileNameUNSAFE);
-};
-
-#endif // _CONFIGHELPER_H
diff --git a/src/vm/corhost.cpp b/src/vm/corhost.cpp
index 6091bad9e2..369d6fcfd7 100644
--- a/src/vm/corhost.cpp
+++ b/src/vm/corhost.cpp
@@ -5629,14 +5629,6 @@ public:
static CLRDomainManager s_CLRDomainManager;
#endif // FEATURE_APTCA
-BYTE g_CorHostProtectionManagerInstance[sizeof(CorHostProtectionManager)];
-
-void InitHostProtectionManager()
-{
- WRAPPER_NO_CONTRACT;
- new (g_CorHostProtectionManagerInstance) CorHostProtectionManager();
-}
-
BOOL g_CLRPolicyRequested = FALSE;
class CCorCLRControl: public ICLRControl
diff --git a/src/vm/crossgen/wks_crossgen.nativeproj b/src/vm/crossgen/wks_crossgen.nativeproj
deleted file mode 100644
index 803a3cb705..0000000000
--- a/src/vm/crossgen/wks_crossgen.nativeproj
+++ /dev/null
@@ -1,164 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>cee_crossgen</OutputName>
- </PropertyGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\vm\vm.settings" />
-
- <PropertyGroup>
- <UserIncludes>
- $(UserIncludes);
- $(Clrbase)\src\binder\inc
- </UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -wd4702</ClAdditionalOptions>
- </PropertyGroup>
-
- <ItemGroup>
- <CppCompile Include="$(VmSourcesDir)\class.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AppDomain.cpp" />
- <CppCompile Include="$(VmSourcesDir)\aptca.cpp" Condition="'$(FeatureAptca)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\array.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Assembly.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AssemblySpec.cpp" />
- <CppCompile Include="$(VmSourcesDir)\binder.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ceeload.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ceemain.cpp" />
- <CppCompile Include="$(VmSourcesDir)\classhash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\clrex.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivBinderUtil.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivBinderWinRT.cpp" Condition="'$(FeatureCominterop)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\CLRPrivTypeCacheWinRT.cpp" Condition="'$(FeatureCominterop)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\clsload.cpp" />
- <CppCompile Include="$(VmSourcesDir)\comdelegate.cpp" />
- <CppCompile Include="$(VmSourcesDir)\codeman.cpp" />
- <CppCompile Include="$(VmSourcesDir)\compile.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ConstrainedExecutionRegion.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CustomMarshalerInfo.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Domainfile.cpp" />
- <CppCompile Include="$(VmSourcesDir)\BaseAssemblySpec.cpp" />
- <CppCompile Include="$(VmSourcesDir)\corebindresult.cpp" />
- <CppCompile Include="$(VmSourcesDir)\coreassemblyspec.cpp" />
- <CppCompile Include="$(VmSourcesDir)\crossdomaincalls.cpp" />
- <CppCompile Include="$(VmSourcesDir)\dataimage.cpp" />
- <CppCompile Include="$(VmSourcesDir)\decodeMD.cpp" />
- <CppCompile Include="$(VmSourcesDir)\DebugInfoStore.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ecall.cpp" />
- <CppCompile Include="$(VmSourcesDir)\eeconfig.cpp" />
- <CppCompile Include="$(VmSourcesDir)\eehash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\eetwain.cpp" />
- <CppCompile Include="$(VmSourcesDir)\excep.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Field.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Fieldmarshaler.cpp" />
- <CppCompile Include="$(VmSourcesDir)\formattype.cpp" />
- <CppCompile Include="$(VmSourcesDir)\TypeEquivalenceHash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\GCDecode.cpp" />
- <CppCompile Include="$(VmSourcesDir)\genericdict.cpp" />
- <CppCompile Include="$(VmSourcesDir)\generics.cpp" />
- <CppCompile Include="$(VmSourcesDir)\genmeth.cpp" />
- <CppCompile Include="$(VmSourcesDir)\hash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ILMarshalers.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ILStubCache.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ILStubResolver.cpp" />
- <CppCompile Include="$(VmSourcesDir)\instmethhash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\interoputil.cpp" />
- <CppCompile Include="$(VmSourcesDir)\invokeutil.cpp" />
- <CppCompile Include="$(VmSourcesDir)\inlinetracking.cpp" />
- <CppCompile Include="$(VmSourcesDir)\contractImpl.cpp" />
- <CppCompile Include="$(VmSourcesDir)\JITInterface.cpp" />
- <CppCompile Include="$(VmSourcesDir)\LoaderAllocator.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ListLock.cpp" />
- <CppCompile Include="$(VmSourcesDir)\memberload.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Method.cpp" />
- <CppCompile Include="$(VmSourcesDir)\MethodImpl.cpp" />
- <CppCompile Include="$(VmSourcesDir)\MethodTable.cpp" />
- <CppCompile Include="$(VmSourcesDir)\methodtablebuilder.cpp" />
- <CppCompile Include="$(VmSourcesDir)\mscorlib.cpp">
- <DisablePrecompiledHeaders>true</DisablePrecompiledHeaders>
- </CppCompile>
- <CppCompile Include="$(VmSourcesDir)\stubcache.cpp" />
- <CppCompile Include="$(VmSourcesDir)\mlinfo.cpp" />
- <CppCompile Include="$(VmSourcesDir)\DllImport.cpp" />
- <CppCompile Include="$(VmSourcesDir)\DllImportCallback.cpp" />
- <CppCompile Include="$(VmSourcesDir)\PEFile.cpp" />
- <CppCompile Include="$(VmSourcesDir)\PEFingerprint.cpp" />
- <CppCompile Include="$(VmSourcesDir)\PEImage.cpp" />
- <CppCompile Include="$(VmSourcesDir)\PEImageLayout.cpp" />
- <CppCompile Include="$(VmSourcesDir)\pendingload.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Precode.cpp" />
- <CppCompile Include="$(VmSourcesDir)\olevariant.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ReadyToRunInfo.cpp" Condition="'$(FeatureReadyToRun)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\security.cpp" />
- <CppCompile Include="$(VmSourcesDir)\securitypolicy.cpp" />
- <CppCompile Include="$(VmSourcesDir)\securityAttributes.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDeclarative.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDeclarativeCache.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDescriptor.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDescriptorAppdomain.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDescriptorAssembly.cpp" />
- <CppCompile Include="$(VmSourcesDir)\securitymeta.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityTransparentAssembly.cpp" />
- <CppCompile Include="$(VmSourcesDir)\siginfo.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SigFormat.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SimpleRWLock.cpp" />
- <CppCompile Include="$(VmSourcesDir)\spinlock.cpp" />
- <CppCompile Include="$(VmSourcesDir)\StackingAllocator.cpp" />
- <CppCompile Include="$(VmSourcesDir)\stubgen.cpp" />
- <CppCompile Include="$(VmSourcesDir)\stublink.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typectxt.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typedesc.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typehandle.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typehash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typeparse.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typestring.cpp" />
- <CppCompile Include="$(VmSourcesDir)\util.cpp" />
- <CppCompile Include="$(VmSourcesDir)\vars.cpp" />
- <CppCompile Include="$(VmSourcesDir)\versionresilienthashcode.cpp" />
- <CppCompile Include="$(VmSourcesDir)\zapsig.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(FeatureCominterop)' == 'true'">
- <CppCompile Include="$(VmSourcesDir)\classcompat.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMtoCLRCall.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CLRtoCOMCall.cpp" />
- <CppCompile Include="$(VmSourcesDir)\RuntimeCallableWrapper.cpp" />
- <CppCompile Include="$(VmSourcesDir)\WinRTHelpers.cpp" />
- <CppCompile Include="$(VmSourcesDir)\WinRTTypeNameConverter.cpp" />
- </ItemGroup>
-
- <!-- SOURCES_NONPAL -->
- <ItemGroup>
- <CppCompile Include="$(VmSourcesDir)\GcInfoDecoder.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Crypto\SHA1.cpp" Condition="'$(FeatureCoreclr)' != 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\SHA1.cpp" Condition="'$(FeatureCoreclr)' == 'true'"/>
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetArch)' == 'i386'">
- <CppCompile Include="$(I386SourcesDir)\stublinkerx86.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetArch)' == 'amd64'">
- <CppCompile Include="$(Amd64SourcesDir)\StubLinkerAMD64.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetArch)' == 'arm'">
- <CppCompile Include="$(ArmSourcesDir)\stubs.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetArch)' == 'arm64'">
- <CppCompile Include="$(Arm64SourcesDir)\stubs.cpp" />
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="$(VmSourcesDir)\crossgencompile.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CrossgenRoParseTypeName.cpp" Condition="'$(FeatureCominterop)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\CrossgenRoResolveNamespace.cpp" Condition="'$(FeatureCominterop)' == 'true'"/>
- </ItemGroup>
- <ItemGroup>
- <CppCompile Condition="'$(FeatureTraceLogging)' == 'true'" Include="$(VmSourcesDir)\clrtracelogging.cpp" />
- </ItemGroup>
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\vm\vm.targets" />
-
-</Project>
diff --git a/src/vm/crossgen_mscorlib/mscorlib_crossgen.nativeproj b/src/vm/crossgen_mscorlib/mscorlib_crossgen.nativeproj
deleted file mode 100644
index 67e6f4acd2..0000000000
--- a/src/vm/crossgen_mscorlib/mscorlib_crossgen.nativeproj
+++ /dev/null
@@ -1,34 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
-
- <PropertyGroup>
- <!-- Work around problems with loading System.Private.CoreLib.dll, -->
- <!-- caused by inconsistent setting of UseLegacyCompiler and FeatureSpanOfT -->
- <!-- between System.Private.CoreLib.dll and the runtime. -->
- <UseLegacyCompiler>true</UseLegacyCompiler>
- </PropertyGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
-
- <PropertyGroup>
- <!-- Pretend that we are not crossgen compiling to pick up defines matching the target -->
- <CrossGenCompile>false</CrossGenCompile>
-
- <CDefines>$(CDefines);CROSSGEN_MSCORLIB</CDefines>
- </PropertyGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>mscorlib_crossgen</OutputName>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- </PropertyGroup>
-
- <ItemGroup>
- <CppCompile Include="..\Mscorlib.cpp" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-
-</Project> \ No newline at end of file
diff --git a/src/vm/crst.h b/src/vm/crst.h
index 7b470982d5..c68f40679c 100644
--- a/src/vm/crst.h
+++ b/src/vm/crst.h
@@ -105,7 +105,6 @@ extern DWORD g_fEEShutDown;
// Total count of Crst lock of the type (Shutdown) that are currently in use
extern Volatile<LONG> g_ShutdownCrstUsageCount;
extern Volatile<LONG> g_fForbidEnterEE;
-extern bool g_fFinalizerRunOnShutDown;
// The CRST.
class CrstBase
diff --git a/src/vm/dac/dacwks.targets b/src/vm/dac/dacwks.targets
deleted file mode 100644
index 6f6b9279a2..0000000000
--- a/src/vm/dac/dacwks.targets
+++ /dev/null
@@ -1,168 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <PropertyGroup>
- <OutputName Condition="'$(OutputName)' == ''">cee_wks_dac</OutputName>
- <AsmDefines>$(AsmDefines) $(CDefines)</AsmDefines>
- </PropertyGroup>
-
- <ItemGroup>
- <CppCompile Include="$(ClrSrcDirectory)\vm\AppDomain.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\array.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\assembly.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\binder.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\ceeload.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\certificatecache.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\class.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\classhash.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\clsload.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\codeman.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\COMDelegate.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\contexts.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\contractimpl.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\corhost.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\crst.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\decodeMD.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\debugdebugger.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\debugHelp.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\debuginfostore.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\disassembler.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\DllImport.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\domainfile.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\dynamicmethod.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\ecall.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\EEDbgInterfaceImpl.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\eehash.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\EETwain.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\excep.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\ExState.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\field.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\formattype.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\fptrstubs.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\frames.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\GCDecode.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\gcheaputilities.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\genericdict.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\generics.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\hash.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\ILStubCache.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\ILStubResolver.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\instmethhash.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\inlinetracking.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\JITinterface.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\LoaderAllocator.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\memberload.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\method.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\methodimpl.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\methoditer.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\methodtable.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\object.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\pefile.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\peimage.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\peimagelayout.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\prestub.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\precode.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\rejit.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\ReadyToRunInfo.cpp" Condition="'$(FeatureReadyToRun)' == 'true'" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\remoting.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\SecurityDescriptor.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\SecurityDescriptorAssembly.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\siginfo.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\sigformat.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\stackwalk.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\stublink.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\stubmgr.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\syncblk.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\threads.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\ThreadDebugBlockingInfo.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\typedesc.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\typectxt.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\typehandle.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\typehash.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\typeString.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\util.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\vars.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\versionresilienthashcode.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\VirtualCallStub.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\ThreadPoolRequest.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\ThreadStatics.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\win32threadpool.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\hillclimbing.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\zapsig.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\BaseAssemblySpec.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\corebindresult.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\coreassemblyspec.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\CLRPrivBinderAppX.cpp" Condition="'$(FeatureAppXBinder)' == 'true'" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\CLRPrivBinderWinRT.cpp" Condition="'$(FeatureCominterop)' == 'true'" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\CLRPrivTypeCacheWinRT.cpp" Condition="'$(FeatureCominterop)' == 'true'" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\umthunkhash.cpp" Condition="'$(FeatureMixedMode)' == 'true'" />
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="$(ClrSrcDirectory)\gc\gccommon.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gceesvr.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gceewks.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gcsvr.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gcwks.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gcscan.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\handletable.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\handletablecore.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\handletablescan.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\objecthandle.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(FeatureCoreclr)' != 'true'" >
- <CppCompile Include="$(ClrSrcDirectory)\usagelog\AssemblyUsageLogger.cpp" />
- </ItemGroup>
-
- <ItemGroup >
- <CppCompile Include="$(ClrSrcDirectory)\vm\EnCEE.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\mdadac.cpp" Condition="'$(FeatureMdaSupported)' == 'true'"/>
- </ItemGroup>
-
- <ItemGroup Condition="'$(FeatureCominterop)' == 'true'">
- <CppCompile Include="$(ClrSrcDirectory)\vm\COMtoCLRCall.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\CLRtoCOMCall.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\rcwwalker.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\WinRTTypeNameConverter.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetArch)' == 'amd64'" >
- <CppCompile Include="$(ClrSrcDirectory)\vm\GcInfoDecoder.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\amd64\cGenAMD64.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\amd64\ExcepAMD64.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\amd64\gmsAMD64.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\amd64\stublinkerAMD64.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\exceptionhandling.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetArch)' == 'i386'" >
- <CppCompile Include="$(ClrSrcDirectory)\vm\i386\cgenx86.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\i386\ExcepX86.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\i386\gmsX86.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\i386\stublinkerx86.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\exinfo.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetArch)' == 'arm'" >
- <CppCompile Include="$(ClrSrcDirectory)\vm\GcInfoDecoder.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\arm\stubs.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\arm\armsinglestepper.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\exceptionhandling.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\arm\ExcepARM.cpp" />
- </ItemGroup>
-
- <ItemGroup Condition="'$(TargetArch)' == 'arm64'" >
- <CppCompile Include="$(ClrSrcDirectory)\vm\arm64\stubs.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\vm\exceptionhandling.cpp" />
- </ItemGroup>
-
- <ItemGroup>
- <RotorX86Sources Include="$(ClrSrcDirectory)\vm\rotor_x86\cgenx86.cpp" />
- <RotorX86Sources Include="$(ClrSrcDirectory)\vm\rotor_x86\gmsx86.cpp" />
- <RotorX86Sources Include="$(ClrSrcDirectory)\vm\rotor_x86\stublinkerx86.cpp" />
- <RotorX86Sources Include="$(ClrSrcDirectory)\vm\exinfo.cpp" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\vm\vm.targets" />
-
-</Project>
diff --git a/src/vm/dac/dirs.proj b/src/vm/dac/dirs.proj
deleted file mode 100644
index 244881aabe..0000000000
--- a/src/vm/dac/dirs.proj
+++ /dev/null
@@ -1,18 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="HostLocal\dacwks.nativeproj" />
- </ItemGroup>
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/vm/dirs.proj b/src/vm/dirs.proj
deleted file mode 100644
index a931bcac57..0000000000
--- a/src/vm/dirs.proj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="wks\wks.nativeproj" />
- <ProjectFile Include="dac\dirs.proj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/vm/dllimport.cpp b/src/vm/dllimport.cpp
index a3f7f30d86..b7989e92bc 100644
--- a/src/vm/dllimport.cpp
+++ b/src/vm/dllimport.cpp
@@ -7010,62 +7010,6 @@ HINSTANCE NDirect::LoadLibraryModule(NDirectMethodDesc * pMD, LoadLibErrorTracke
hmod = CheckForWellKnownModules(wszLibName, pErrorTracker);
#endif
-#ifndef FEATURE_CORECLR
- // Since fusion.dll has been incorporated into mscorwks.dll, we need to redirect
- // any PInvokes for fusion.dll over to this runtime module. In order to avoid picking
- // up invalid versions of fusion.dll, we perform this redirection first. Also redirect
- // PInvokes to mscorwks.dll and clr.dll to this runtime module (module rename back
- // compat and in-proc SxS correctness).
- if (hmod == NULL)
- {
- static LPCWSTR const rwszAliases[] =
- {
- W("fusion.dll"), W("mscorwks.dll"), W("clr.dll"),
- W("fusion"), W("mscorwks"), W("clr")
- };
-
- for (int i = 0; i < COUNTOF(rwszAliases); i++)
- {
- if (SString::_wcsicmp(wszLibName, rwszAliases[i]) == 0)
- {
- hmod = GetCLRModule();
- break;
- }
- }
- }
- // Some CLR DLLs cannot be directly PInvoked. They need in-proc SxS intialization - shim
- // (mscoreei.dll) takes care of that. Load such DLLs via shim.
- //
- // Note that we do not support PInvoking into the newly renamed SxS versions of DLLs directly.
- // For example mscorpe.dll functionality was moved to mscorpehost.dll in 4.0. When asked for
- // loading mscorpe.dll, shim will load mscorpehost.dll and will call its InitializeSxS function
- // first. However shim will not call InitializeSxS when asked for mscorpehost.dll directly.
- // As a result users cannot use mscorpehost.dll directly for PInvokes (by design), they can only
- // use the old mscorpe.dll name.
- if (hmod == NULL)
- {
- static LPCWSTR const rgSxSAwareDlls[] =
- {
- W("mscorpe.dll"), W("mscorpe")
- };
-
- for (int i = 0; i < COUNTOF(rgSxSAwareDlls); i++)
- {
- if (SString::_wcsicmp(wszLibName, rgSxSAwareDlls[i]) == 0)
- {
- // Load the DLL using shim (shim takes care of the DLL SxS initialization)
- HRESULT hr = g_pCLRRuntime->LoadLibrary(rgSxSAwareDlls[i], &hmod);
- if (FAILED(hr))
- { // We failed to load CLR DLL (probably corrupted installation)
- pErrorTracker->TrackHR_CouldNotLoad(hr);
- hmod = NULL;
- }
- break;
- }
- }
- }
-#endif //!FEATURE_CORECLR
-
#ifdef FEATURE_PAL
// In the PAL version of CoreCLR, the CLR module itself exports the functionality
// that the Windows version obtains from kernel32 and friends. In order to avoid
diff --git a/src/vm/ecalllist.h b/src/vm/ecalllist.h
index b110d0eea6..ba05e99543 100644
--- a/src/vm/ecalllist.h
+++ b/src/vm/ecalllist.h
@@ -283,7 +283,6 @@ FCFuncStart(gEnvironmentFuncs)
FCFuncElement("get_HasShutdownStarted", SystemNative::HasShutdownStarted)
QCFuncElement("GetProcessorCount", SystemNative::GetProcessorCount)
#ifndef FEATURE_CORECLR
- QCFuncElement("GetWorkingSet", SystemNative::GetWorkingSet)
FCFuncElement("nativeGetEnvironmentVariable", SystemNative::_GetEnvironmentVariable)
FCFuncElement("GetCompatibilityFlag", SystemNative::_GetCompatibilityFlag)
QCFuncElement("GetCommandLine", SystemNative::_GetCommandLine)
@@ -296,9 +295,6 @@ FCFuncStart(gEnvironmentFuncs)
QCFuncElement("WinRTSupported", SystemNative::WinRTSupported)
#endif // FEATURE_COMINTEROP
FCFuncElementSig("FailFast", &gsig_SM_Str_RetVoid, SystemNative::FailFast)
-#ifndef FEATURE_CORECLR
- FCFuncElementSig("FailFast", &gsig_SM_Str_Uint_RetVoid, SystemNative::FailFastWithExitCode)
-#endif
FCFuncElementSig("FailFast", &gsig_SM_Str_Exception_RetVoid, SystemNative::FailFastWithException)
#ifndef FEATURE_CORECLR
QCFuncElement("GetIsCLRHosted", SystemNative::IsCLRHosted)
@@ -308,17 +304,9 @@ FCFuncEnd()
FCFuncStart(gRuntimeEnvironmentFuncs)
FCFuncElement("GetModuleFileName", SystemNative::_GetModuleFileName)
- FCFuncElement("GetRuntimeDirectoryImpl", SystemNative::GetRuntimeDirectory)
-#ifdef FEATURE_FUSION
- FCFuncElement("GetDeveloperPath", SystemNative::GetDeveloperPath)
- FCFuncElement("GetHostBindingFile", SystemNative::GetHostBindingFile)
-#endif // FEATURE_FUSION
#ifndef FEATURE_CORECLR
QCFuncElement("_GetSystemVersion", SystemNative::_GetSystemVersion)
#endif
-#if defined(FEATURE_CLASSIC_COMINTEROP) && !defined(FEATURE_CORECLR)
- QCFuncElement("GetRuntimeInterfaceImpl", SystemNative::GetRuntimeInterfaceImpl)
-#endif
FCFuncEnd()
FCFuncStart(gSerializationFuncs)
@@ -373,10 +361,8 @@ FCFuncEnd()
FCFuncStart(gTypedReferenceFuncs)
FCFuncElement("InternalToObject", ReflectionInvocation::TypedReferenceToObject)
-#ifndef FEATURE_CORECLR
FCFuncElement("InternalSetTypedReference", ReflectionInvocation::SetTypedReference)
FCFuncElement("InternalMakeTypedReference", ReflectionInvocation::MakeTypedReference)
-#endif
FCFuncEnd()
FCFuncStart(gSystem_Type)
@@ -517,9 +503,6 @@ FCFuncEnd()
FCFuncStart(gRuntimeMethodHandle)
QCFuncElement("ConstructInstantiation", RuntimeMethodHandle::ConstructInstantiation)
FCFuncElement("_GetCurrentMethod", RuntimeMethodHandle::GetCurrentMethod)
-#ifdef FEATURE_SERIALIZATION
- FCFuncElement("SerializationInvoke", RuntimeMethodHandle::SerializationInvoke)
-#endif // FEATURE_SERIALIZATION
FCFuncElement("InvokeMethod", RuntimeMethodHandle::InvokeMethod)
QCFuncElement("GetFunctionPointer", RuntimeMethodHandle::GetFunctionPointer)
FCFuncElement("GetImplAttributes", RuntimeMethodHandle::GetImplAttributes)
@@ -568,12 +551,8 @@ FCFuncEnd()
FCFuncStart(gCOMFieldHandleNewFuncs)
FCFuncElement("GetValue", RuntimeFieldHandle::GetValue)
FCFuncElement("SetValue", RuntimeFieldHandle::SetValue)
-#ifndef FEATURE_CORECLR
FCFuncElement("GetValueDirect", RuntimeFieldHandle::GetValueDirect)
-#endif
-#ifdef FEATURE_SERIALIZATION
FCFuncElement("SetValueDirect", RuntimeFieldHandle::SetValueDirect)
-#endif
FCFuncElement("GetName", RuntimeFieldHandle::GetName)
FCFuncElement("_GetUtf8Name", RuntimeFieldHandle::GetUtf8Name)
FCFuncElement("MatchesNameHash", RuntimeFieldHandle::MatchesNameHash)
@@ -596,9 +575,6 @@ FCFuncStart(gCOMModuleFuncs)
QCFuncElement("GetFullyQualifiedName", COMModule::GetFullyQualifiedName)
QCFuncElement("nIsTransientInternal", COMModule::IsTransient)
FCFuncElement("IsResource", COMModule::IsResource)
-#if defined(FEATURE_X509) && defined(FEATURE_CAS_POLICY)
- QCFuncElement("GetSignerCertificate", COMModule::GetSignerCertificate)
-#endif // defined(FEATURE_X509) && defined(FEATURE_CAS_POLICY)
FCFuncEnd()
FCFuncStart(gCOMModuleBuilderFuncs)
@@ -610,18 +586,8 @@ FCFuncStart(gCOMModuleBuilderFuncs)
QCFuncElement("GetMemberRefOfMethodInfo", COMModule::GetMemberRefOfMethodInfo)
QCFuncElement("GetMemberRefOfFieldInfo", COMModule::GetMemberRefOfFieldInfo)
QCFuncElement("GetMemberRefFromSignature", COMModule::GetMemberRefFromSignature)
-#ifndef FEATURE_CORECLR
- QCFuncElement("SetModuleName", COMModule::SetModuleName)
- QCFuncElement("PreSavePEFile", COMDynamicWrite::PreSavePEFile)
- QCFuncElement("SavePEFile", COMDynamicWrite::SavePEFile)
- QCFuncElement("AddResource", COMDynamicWrite::AddResource)
-#endif
QCFuncElement("GetArrayMethodToken", COMModule::GetArrayMethodToken)
QCFuncElement("SetFieldRVAContent", COMModule::SetFieldRVAContent)
-#ifndef FEATURE_CORECLR
- QCFuncElement("DefineNativeResourceFile", COMDynamicWrite::DefineNativeResourceFile)
- QCFuncElement("DefineNativeResourceBytes", COMDynamicWrite::DefineNativeResourceBytes)
-#endif // FEATURE_CORECLR
FCFuncEnd()
FCFuncStart(gCOMModuleHandleFuncs)
@@ -644,23 +610,12 @@ FCFuncStart(gCustomAttributeEncodedArgument)
FCFuncElement("ParseAttributeArguments", Attribute::ParseAttributeArguments)
FCFuncEnd()
-#ifdef FEATURE_CAS_POLICY
-FCFuncStart(gPseudoCustomAttribute)
- FCFuncElement("_GetSecurityAttributes", COMCustomAttribute::GetSecurityAttributes)
-FCFuncEnd()
-#endif
-
FCFuncStart(gCOMCustomAttributeFuncs)
FCFuncElement("_ParseAttributeUsageAttribute", COMCustomAttribute::ParseAttributeUsageAttribute)
FCFuncElement("_CreateCaObject", COMCustomAttribute::CreateCaObject)
FCFuncElement("_GetPropertyOrFieldData", COMCustomAttribute::GetPropertyOrFieldData)
FCFuncEnd()
-FCFuncStart(gSecurityContextFrameFuncs)
- FCFuncElement("Push", COMCustomAttribute::PushSecurityContextFrame)
- FCFuncElement("Pop", COMCustomAttribute::PopSecurityContextFrame)
-FCFuncEnd()
-
FCFuncStart(gCOMClassWriter)
QCFuncElement("DefineGenericParam", COMDynamicWrite::DefineGenericParam)
QCFuncElement("DefineType", COMDynamicWrite::DefineType)
@@ -680,10 +635,6 @@ FCFuncStart(gCOMClassWriter)
QCFuncElement("SetFieldLayoutOffset", COMDynamicWrite::SetFieldLayoutOffset)
QCFuncElement("SetClassLayout", COMDynamicWrite::SetClassLayout)
QCFuncElement("SetParamInfo", COMDynamicWrite::SetParamInfo)
-#ifndef FEATURE_CORECLR
- QCFuncElement("SetPInvokeData", COMDynamicWrite::SetPInvokeData)
- QCFuncElement("SetFieldMarshal", COMDynamicWrite::SetFieldMarshal)
-#endif // FEATURE_CORECLR
QCFuncElement("SetConstantValue", COMDynamicWrite::SetConstantValue)
QCFuncElement("DefineCustomAttribute", COMDynamicWrite::DefineCustomAttribute)
#ifndef FEATURE_CORECLR
@@ -697,215 +648,15 @@ FCFuncStart(gCOMMethodRental)
FCFuncEnd()
#endif // FEATURE_METHOD_RENTAL
-#ifdef FEATURE_CAS_POLICY
-FCFuncStart(gFrameSecurityDescriptorFuncs)
- FCFuncElement("IncrementOverridesCount", SecurityPolicy::IncrementOverridesCount)
- FCFuncElement("DecrementOverridesCount", SecurityPolicy::DecrementOverridesCount)
- FCFuncElement("IncrementAssertCount", SecurityPolicy::IncrementAssertCount)
- FCFuncElement("DecrementAssertCount", SecurityPolicy::DecrementAssertCount)
-FCFuncEnd()
-#endif // FEATURE_CAS_POLICY
-
-#ifdef FEATURE_CAS_POLICY
-FCFuncStart(gCodeAccessSecurityEngineFuncs)
- FCFuncElement("SpecialDemand", SecurityStackWalk::FcallSpecialDemand)
- FCFuncElement("Check", SecurityStackWalk::Check)
- FCFuncElement("CheckNReturnSO", SecurityStackWalk::CheckNReturnSO)
- FCFuncElement("GetZoneAndOriginInternal", SecurityStackWalk::GetZoneAndOrigin)
-#ifdef FEATURE_COMPRESSEDSTACK
- FCFuncElement("QuickCheckForAllDemands", SecurityStackWalk::FCallQuickCheckForAllDemands)
- FCFuncElement("AllDomainsHomogeneousWithNoStackModifiers", SecurityStackWalk::FCallAllDomainsHomogeneousWithNoStackModifiers)
-#endif
-FCFuncEnd()
-#endif // FEATURE_CAS_POLICY
-
FCFuncStart(gCompatibilitySwitchFuncs)
FCFuncElement("GetValueInternalCall", CompatibilitySwitch::GetValue)
-#ifndef FEATURE_CORECLR
- FCFuncElement("IsEnabledInternalCall", CompatibilitySwitch::IsEnabled)
- FCFuncElement("GetAppContextOverridesInternalCall", CompatibilitySwitch::GetAppContextOverrides)
-#endif
-FCFuncEnd()
-
-
-#ifdef FEATURE_COMPRESSEDSTACK
-FCFuncStart(gCompressedStackFuncs)
- FCFuncElement("DestroyDelayedCompressedStack", SecurityStackWalk::FcallDestroyDelayedCompressedStack)
- FCFuncElement("DestroyDCSList", NewCompressedStack::DestroyDCSList)
- FCFuncElement("GetDelayedCompressedStack", SecurityStackWalk::EcallGetDelayedCompressedStack)
- FCFuncElement("GetDCSCount", NewCompressedStack::FCallGetDCSCount)
- FCFuncElement("GetDomainCompressedStack", NewCompressedStack::GetDomainCompressedStack)
- FCFuncElement("GetHomogeneousPLS", NewCompressedStack::FCallGetHomogeneousPLS)
- FCFuncElement("IsImmediateCompletionCandidate", NewCompressedStack::FCallIsImmediateCompletionCandidate)
-FCFuncEnd()
-
-FCFuncStart(gDomainCompressedStackFuncs)
- FCFuncElement("GetDescCount", DomainCompressedStack::GetDescCount)
- FCFuncElement("GetDomainPermissionSets", DomainCompressedStack::GetDomainPermissionSets)
- FCFuncElement("GetDescriptorInfo", DomainCompressedStack::GetDescriptorInfo)
- FCFuncElement("IgnoreDomain", DomainCompressedStack::IgnoreDomain)
-FCFuncEnd()
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-
-FCFuncStart(gCOMSecurityManagerFuncs)
- QCFuncElement("IsSameType", SecurityPolicy::IsSameType)
- FCFuncElement("_SetThreadSecurity", SecurityPolicy::SetThreadSecurity)
-#ifdef FEATURE_CAS_POLICY
- QCFuncElement("GetGrantedPermissions", SecurityPolicy::GetGrantedPermissions)
-#endif
-FCFuncEnd()
-
-FCFuncStart(gCOMSecurityContextFuncs)
-#ifdef FEATURE_IMPERSONATION
- FCFuncElement("GetImpersonationFlowMode", SecurityPolicy::GetImpersonationFlowMode)
-#endif
-#ifdef FEATURE_COMPRESSEDSTACK
- FCFuncElement("IsDefaultThreadSecurityInfo", SecurityPolicy::IsDefaultThreadSecurityInfo)
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-FCFuncEnd()
-
-#ifdef FEATURE_CAS_POLICY
-FCFuncStart(gCOMSecurityZone)
- QCFuncElement("_CreateFromUrl", SecurityPolicy::CreateFromUrl)
-FCFuncEnd()
-#endif // FEATURE_CAS_POLICY
-
-FCFuncStart(gCOMFileIOAccessFuncs)
- QCFuncElement("IsLocalDrive", SecurityPolicy::IsLocalDrive)
-FCFuncEnd()
-
-FCFuncStart(gCOMStringExpressionSetFuncs)
- QCFuncElement("GetLongPathName", SecurityPolicy::_GetLongPathName)
-FCFuncEnd()
-
-
-FCFuncStart(gCOMUrlStringFuncs)
- QCFuncElement("GetDeviceName", SecurityPolicy::GetDeviceName)
-FCFuncEnd()
-
-#ifdef FEATURE_CAS_POLICY
-FCFuncStart(gCOMSecurityRuntimeFuncs)
- FCFuncElement("GetSecurityObjectForFrame", SecurityRuntime::GetSecurityObjectForFrame)
-FCFuncEnd()
-#endif // FEATURE_CAS_POLICY
-
-#ifdef FEATURE_X509
-
-FCFuncStart(gX509CertificateFuncs)
-#ifndef FEATURE_CORECLR
-FCFuncElement("_AddCertificateToStore", COMX509Store::AddCertificate)
-#endif // !FEATURE_CORECLR
- FCFuncElement("_DuplicateCertContext", COMX509Certificate::DuplicateCertContext)
-#ifndef FEATURE_CORECLR
- FCFuncElement("_ExportCertificatesToBlob", COMX509Store::ExportCertificatesToBlob)
-#endif // !FEATURE_CORECLR
- FCFuncElement("_GetCertRawData", COMX509Certificate::GetCertRawData)
- FCFuncElement("_GetDateNotAfter", COMX509Certificate::GetDateNotAfter)
- FCFuncElement("_GetDateNotBefore", COMX509Certificate::GetDateNotBefore)
- FCFuncElement("_GetIssuerName", COMX509Certificate::GetIssuerName)
- FCFuncElement("_GetPublicKeyOid", COMX509Certificate::GetPublicKeyOid)
- FCFuncElement("_GetPublicKeyParameters", COMX509Certificate::GetPublicKeyParameters)
- FCFuncElement("_GetPublicKeyValue", COMX509Certificate::GetPublicKeyValue)
- FCFuncElement("_GetSerialNumber", COMX509Certificate::GetSerialNumber)
- FCFuncElement("_GetSubjectInfo", COMX509Certificate::GetSubjectInfo)
- FCFuncElement("_GetThumbprint", COMX509Certificate::GetThumbprint)
- FCFuncElement("_LoadCertFromBlob", COMX509Certificate::LoadCertFromBlob)
- FCFuncElement("_LoadCertFromFile", COMX509Certificate::LoadCertFromFile)
-#ifndef FEATURE_CORECLR
- FCFuncElement("_OpenX509Store", COMX509Store::OpenX509Store)
-#endif // !FEATURE_CORECLR
- FCFuncElement("_QueryCertBlobType", COMX509Certificate::QueryCertBlobType)
- FCFuncElement("_QueryCertFileType", COMX509Certificate::QueryCertFileType)
-FCFuncEnd()
-
-FCFuncStart(gX509SafeCertContextHandleFuncs)
- FCFuncElement("_FreePCertContext", COMX509Certificate::FreePCertContext)
-FCFuncEnd()
-
-#ifndef FEATURE_CORECLR
-FCFuncStart(gX509SafeCertStoreHandleFuncs)
- FCFuncElement("_FreeCertStoreContext", COMX509Store::FreeCertStoreContext)
FCFuncEnd()
-#endif
-#endif // FEATURE_X509
FCFuncStart(gBCLDebugFuncs)
FCFuncElement("GetRegistryLoggingValues", ManagedLoggingHelper::GetRegistryLoggingValues)
FCFuncEnd()
-#ifdef FEATURE_CRYPTO
-FCFuncStart(gCryptographyUtilsFuncs)
- FCFuncElement("_AcquireCSP", COMCryptography::_AcquireCSP)
- FCFuncElement("_CreateCSP", COMCryptography::_CreateCSP)
- FCFuncElement("_ExportKey", COMCryptography::_ExportKey)
- FCFuncElement("_GenerateKey", COMCryptography::_GenerateKey)
- FCFuncElement("_GetKeyParameter", COMCryptography::_GetKeyParameter)
- FCFuncElement("_GetUserKey", COMCryptography::_GetUserKey)
- FCFuncElement("_ImportKey", COMCryptography::_ImportKey)
- FCFuncElement("_ImportCspBlob", COMCryptography::_ImportCspBlob)
- FCFuncElement("_OpenCSP", COMCryptography::_OpenCSP)
- QCFuncElement("ExportCspBlob", COMCryptography::ExportCspBlob)
- QCFuncElement("GetPersistKeyInCsp", COMCryptography::GetPersistKeyInCsp)
- QCFuncElement("SetPersistKeyInCsp", COMCryptography::SetPersistKeyInCsp)
- QCFuncElement("SignValue", COMCryptography::SignValue)
- QCFuncElement("VerifySign", COMCryptography::VerifySign)
- FCFuncElement("_GetProviderParameter", COMCryptography::_GetProviderParameter)
- FCFuncElement("_ProduceLegacyHmacValues", COMCryptography::_ProduceLegacyHMACValues)
- QCFuncElement("CreateHash", COMCryptography::CreateHash)
- QCFuncElement("EndHash", COMCryptography::EndHash)
- QCFuncElement("HashData", COMCryptography::HashData)
- QCFuncElement("SetProviderParameter", COMCryptography::SetProviderParameter)
-#ifndef FEATURE_CORECLR
- FCFuncElement("_DecryptData", COMCryptography::_DecryptData)
- FCFuncElement("_EncryptData", COMCryptography::_EncryptData)
- FCFuncElement("_GetEnforceFipsPolicySetting", COMCryptography::_GetEnforceFipsPolicySetting)
- FCFuncElement("_ImportBulkKey", COMCryptography::_ImportBulkKey)
- FCFuncElement("_GetKeySetSecurityInfo", COMCryptography::_GetKeySetSecurityInfo)
- QCFuncElement("SearchForAlgorithm", COMCryptography::SearchForAlgorithm)
- QCFuncElement("SetKeyParamDw", COMCryptography::SetKeyParamDw)
- QCFuncElement("SetKeyParamRgb", COMCryptography::SetKeyParamRgb)
- QCFuncElement("SetKeySetSecurityInfo", COMCryptography::SetKeySetSecurityInfo)
-#endif //FEATURE_CORECLR
-FCFuncEnd()
-
-FCFuncStart(gSafeHashHandleFuncs)
- QCFuncElement("FreeHash", COMCryptography::FreeHash)
-FCFuncEnd()
-
-FCFuncStart(gSafeKeyHandleFuncs)
- QCFuncElement("FreeKey", COMCryptography::FreeKey)
-FCFuncEnd()
-
-FCFuncStart(gSafeProvHandleFuncs)
- QCFuncElement("FreeCsp", COMCryptography::FreeCsp)
-FCFuncEnd()
-
-#ifndef FEATURE_CORECLR
-FCFuncStart(gPasswordDeriveBytesFuncs)
- QCFuncElement("DeriveKey", COMCryptography::DeriveKey)
-FCFuncEnd()
-#endif
-
-#if defined(FEATURE_CRYPTO)
-FCFuncStart(gRfc2898DeriveBytesFuncs)
- QCFuncElement("DeriveKey", COMCryptography::DeriveKey)
-FCFuncEnd()
-#endif
-
-#ifndef FEATURE_CORECLR
-FCFuncStart(gRNGCryptoServiceProviderFuncs)
- QCFuncElement("GetBytes", COMCryptography::GetBytes)
- QCFuncElement("GetNonZeroBytes", COMCryptography::GetNonZeroBytes)
-FCFuncEnd()
-#endif //FEATURE_CORECLR
-
-FCFuncStart(gRSACryptoServiceProviderFuncs)
- QCFuncElement("DecryptKey", COMCryptography::DecryptKey)
- QCFuncElement("EncryptKey", COMCryptography::EncryptKey)
-FCFuncEnd()
-#endif // FEATURE_CRYPTO
-
FCFuncStart(gAppDomainManagerFuncs)
QCFuncElement("GetEntryAssembly", AssemblyNative::GetEntryAssembly)
#ifdef FEATURE_APPDOMAINMANAGER_INITOPTIONS
@@ -956,10 +707,6 @@ FCFuncStart(gAppDomainFuncs)
FCFuncElement("nIsDefaultAppDomainForEvidence", AppDomainNative::IsDefaultAppDomainForEvidence)
FCFuncElement("nGetAssemblies", AppDomainNative::GetAssemblies)
#endif
-#ifdef FEATURE_CAS_POLICY
- FCFuncElement("nSetHostSecurityManagerFlags", AppDomainNative::SetHostSecurityManagerFlags)
- QCFuncElement("SetLegacyCasPolicyEnabled", AppDomainNative::SetLegacyCasPolicyEnabled)
-#endif // FEATURE_CAS_POLICY
#ifdef FEATURE_APTCA
QCFuncElement("SetCanonicalConditionalAptcaList", AppDomainNative::SetCanonicalConditionalAptcaList)
#endif // FEATURE_ATPCA
@@ -969,9 +716,6 @@ FCFuncStart(gAppDomainFuncs)
#if FEATURE_COMINTEROP
FCFuncElement("nSetDisableInterfaceCache", AppDomainNative::SetDisableInterfaceCache)
#endif // FEATURE_COMINTEROP
-#ifndef FEATURE_CORECLR
- FCFuncElement("_nExecuteAssembly", AppDomainNative::ExecuteAssembly)
-#endif
#ifdef FEATURE_VERSIONING
FCFuncElement("nCreateContext", AppDomainNative::CreateContext)
#endif // FEATURE_VERSIONING
@@ -983,9 +727,6 @@ FCFuncStart(gAppDomainFuncs)
QCFuncElement("GetGrantSet", AppDomainNative::GetGrantSet)
#ifdef FEATURE_REMOTING
FCFuncElement("GetDynamicDir", AppDomainNative::GetDynamicDir)
-#ifdef FEATURE_CAS_POLICY
- QCFuncElement("GetIsLegacyCasPolicyEnabled", AppDomainNative::IsLegacyCasPolicyEnabled)
-#endif // FEATURE_CAS_POLICY
FCFuncElement("nChangeSecurityPolicy", AppDomainNative::ChangeSecurityPolicy)
FCFuncElement("IsDomainIdValid", AppDomainNative::IsDomainIdValid)
FCFuncElement("nApplyPolicy", AppDomainNative::nApplyPolicy)
@@ -1050,12 +791,6 @@ FCFuncStart(gTypeNameParser)
QCFuncElement("_GetAssemblyName", TypeName::QGetAssemblyName)
FCFuncEnd()
-#ifdef FEATURE_CAS_POLICY
-FCFuncStart(gPEFileFuncs)
- QCFuncElement("ReleaseSafePEFileHandle", AssemblyNative::ReleaseSafePEFileHandle)
-FCFuncEnd()
-#endif // FEATURE_CAS_POLICY
-
FCFuncStart(gManifestBasedResourceGrovelerFuncs)
QCFuncElement("GetNeutralResourcesLanguageAttribute", AssemblyNative::GetNeutralResourcesLanguageAttribute)
FCFuncEnd()
@@ -1083,7 +818,6 @@ FCFuncStart(gAssemblyFuncs)
#endif
FCFuncElement("nLoadImage", AssemblyNative::LoadImage)
#ifndef FEATURE_CORECLR
- FCFuncElement("nLoadFile", AssemblyNative::LoadFile)
QCFuncElement("LoadModule", AssemblyNative::LoadModule)
#endif // FEATURE_CORECLR
QCFuncElement("GetType", AssemblyNative::GetType)
@@ -1094,9 +828,6 @@ FCFuncStart(gAssemblyFuncs)
QCFuncElement("GetModules", AssemblyNative::GetModules)
QCFuncElement("GetModule", AssemblyNative::GetModule)
FCFuncElement("GetReferencedAssemblies", AssemblyNative::GetReferencedAssemblies)
-#ifndef FEATURE_CORECLR
- QCFuncElement("GetForwardedTypes", AssemblyNative::GetForwardedTypes)
-#endif // FEATURE_CORECLR
QCFuncElement("GetExportedTypes", AssemblyNative::GetExportedTypes)
FCFuncElement("GetManifestResourceNames", AssemblyNative::GetManifestResourceNames)
QCFuncElement("GetEntryPoint", AssemblyNative::GetEntryPoint)
@@ -1106,29 +837,14 @@ FCFuncStart(gAssemblyFuncs)
QCFuncElement("IsAllSecuritySafeCritical", AssemblyNative::IsAllSecuritySafeCritical)
QCFuncElement("IsAllPublicAreaSecuritySafeCritical", AssemblyNative::IsAllPublicAreaSecuritySafeCritical)
QCFuncElement("GetGrantSet", AssemblyNative::GetGrantSet)
- FCFuncElement("IsGlobalAssemblyCache", AssemblyNative::IsGlobalAssemblyCache)
#endif // !FEATURE_CORECLR
-#ifdef FEATURE_CAS_POLICY
- QCFuncElement("GetEvidence", SecurityPolicy::GetEvidence)
-#endif // FEATURE_CAS_POLICY
QCFuncElement("GetImageRuntimeVersion", AssemblyNative::GetImageRuntimeVersion)
FCFuncElement("IsReflectionOnly", AssemblyNative::IsReflectionOnly)
-#ifndef FEATURE_CORECLR
- QCFuncElement("GetHostContext", AssemblyNative::GetHostContext)
-#endif
-#ifdef FEATURE_CAS_POLICY
- QCFuncElement("GetIsStrongNameVerified", AssemblyNative::IsStrongNameVerified)
- QCFuncElement("GetRawBytes", AssemblyNative::GetRawBytes)
-#endif // FEATURE_CAS_POLICY
FCFuncElement("GetManifestModule", AssemblyHandle::GetManifestModule)
FCFuncElement("GetToken", AssemblyHandle::GetToken)
#ifdef FEATURE_APTCA
FCFuncElement("AptcaCheck", AssemblyHandle::AptcaCheck)
#endif // FEATURE_APTCA
-#ifdef FEATURE_APPX
- QCFuncElement("nIsDesignerBindingContext", AssemblyNative::IsDesignerBindingContext)
-#endif
-
FCFuncEnd()
#ifdef FEATURE_CORECLR
@@ -1143,7 +859,6 @@ FCFuncStart(gAssemblyLoadContextFuncs)
QCFuncElement("LoadFromPath", AssemblyNative::LoadFromPath)
QCFuncElement("GetLoadedAssembliesInternal", AssemblyNative::GetLoadedAssembliesInternal)
QCFuncElement("InternalLoadUnmanagedDllFromPath", AssemblyNative::InternalLoadUnmanagedDllFromPath)
- QCFuncElement("OverrideDefaultAssemblyLoadContextForCurrentDomain", AssemblyNative::OverrideDefaultAssemblyLoadContextForCurrentDomain)
QCFuncElement("CanUseAppPathAssemblyLoadContextInCurrentDomain", AssemblyNative::CanUseAppPathAssemblyLoadContextInCurrentDomain)
QCFuncElement("LoadFromStream", AssemblyNative::LoadFromStream)
FCFuncElement("nGetFileInformation", AssemblyNameNative::GetFileInformation)
@@ -1309,10 +1024,6 @@ FCFuncStart(gThreadFuncs)
#endif
FCFuncElement("GetDomainInternal", ThreadNative::GetDomain)
FCFuncElement("GetFastDomainInternal", ThreadNative::FastGetDomain)
-#ifdef FEATURE_COMPRESSEDSTACK
- FCFuncElement("SetAppDomainStack", ThreadNative::SetAppDomainStack)
- FCFuncElement("RestoreAppDomainStack", ThreadNative::RestoreAppDomainStack)
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
#ifdef FEATURE_REMOTING
FCFuncElement("InternalCrossContextCallback", ThreadNative::InternalCrossContextCallback)
#endif
@@ -1324,9 +1035,6 @@ FCFuncStart(gThreadFuncs)
FCFuncElement("BeginThreadAffinity", ThreadNative::BeginThreadAffinity)
FCFuncElement("EndThreadAffinity", ThreadNative::EndThreadAffinity)
#endif // FEATURE_CORECLR
-#ifdef FEATURE_LEGACYSURFACE
- FCFuncElement("AbortInternal", ThreadNative::Abort)
-#endif // FEATURE_LEGACYSURFACE
#ifndef FEATURE_CORECLR
FCFuncElement("ResetAbortNative", ThreadNative::ResetAbort)
#endif // FEATURE_CORECLR
@@ -1424,11 +1132,6 @@ FCFuncStart(gDecimalFuncs)
FCFuncElement("FCallAddSub", COMDecimal::DoAddSubThrow)
FCFuncElement("FCallMultiply", COMDecimal::DoMultiplyThrow)
FCFuncElement("FCallDivide", COMDecimal::DoDivideThrow)
-#ifndef FEATURE_CORECLR
- FCFuncElement("FCallAddSubOverflowed", COMDecimal::DoAddSub)
- FCFuncElement("FCallMultiplyOverflowed", COMDecimal::DoMultiply)
- FCFuncElement("FCallDivideOverflowed", COMDecimal::DoDivide)
-#endif // FEATURE_CORECLR
FCFuncElement("FCallCompare", COMDecimal::DoCompare)
FCFuncElement("FCallFloor", COMDecimal::DoFloor)
FCFuncElement("GetHashCode", COMDecimal::GetHashCode)
@@ -1469,9 +1172,6 @@ FCFuncStart(gEncodingTableFuncs)
FCFuncElement("GetNumEncodingItems", COMNlsInfo::nativeGetNumEncodingItems)
FCFuncElement("GetEncodingData", COMNlsInfo::nativeGetEncodingTableDataPointer)
FCFuncElement("GetCodePageData", COMNlsInfo::nativeGetCodePageTableDataPointer)
-#if FEATURE_CODEPAGES_FILE
- FCFuncElement("nativeCreateOpenFileMapping", COMNlsInfo::nativeCreateOpenFileMapping)
-#endif
FCFuncEnd()
FCFuncStart(gCalendarDataFuncs)
@@ -1496,9 +1196,6 @@ FCFuncStart(gCultureInfoFuncs)
FCFuncElement("nativeGetLocaleInfoEx", COMNlsInfo::nativeGetLocaleInfoEx)
FCFuncElement("nativeGetLocaleInfoExInt", COMNlsInfo::nativeGetLocaleInfoExInt)
-#ifndef FEATURE_CORECLR
- FCFuncElement("nativeSetThreadLocale", COMNlsInfo::nativeSetThreadLocale)
-#endif
QCFuncElement("InternalGetUserDefaultUILanguage", COMNlsInfo::InternalGetUserDefaultUILanguage)
QCFuncElement("InternalGetSystemDefaultUILanguage", COMNlsInfo::InternalGetSystemDefaultUILanguage)
// Added but disabled from desktop in .NET 4.0, stayed disabled in .NET 4.5
@@ -1640,7 +1337,9 @@ FCFuncStart(gInteropMarshalFuncs)
FCFuncElement("GetNativeActivationFactory", MarshalNative::GetNativeActivationFactory)
FCFuncElement("GetIUnknownForObjectNative", MarshalNative::GetIUnknownForObjectNative)
+#ifndef FEATURE_CORECLR
FCFuncElement("GetIDispatchForObjectNative", MarshalNative::GetIDispatchForObjectNative)
+#endif // FEATURE_CORECLR
FCFuncElement("GetComInterfaceForObjectNative", MarshalNative::GetComInterfaceForObjectNative)
FCFuncElement("InternalReleaseComObject", MarshalNative::ReleaseComObject)
FCFuncElement("Release", MarshalNative::Release)
@@ -1701,81 +1400,6 @@ FCFuncEnd()
#endif // FEATURE_COMINTEROP
-#ifdef FEATURE_CAS_POLICY
-FCFuncStart(gPolicyManagerFuncs)
-#ifdef _DEBUG
- QCFuncElement("DebugOut", SecurityConfig::DebugOut)
-#endif
-FCFuncEnd()
-
-FCFuncStart(gPolicyConfigFuncs)
- QCFuncElement("ResetCacheData", SecurityConfig::ResetCacheData)
- QCFuncElement("SaveDataByte", SecurityConfig::SaveDataByte)
- QCFuncElement("RecoverData", SecurityConfig::RecoverData)
- QCFuncElement("SetQuickCache", SecurityConfig::SetQuickCache)
- QCFuncElement("GetCacheEntry", SecurityConfig::GetCacheEntry)
- QCFuncElement("AddCacheEntry", SecurityConfig::AddCacheEntry)
- QCFuncElement("GetMachineDirectory", SecurityConfig::_GetMachineDirectory)
- QCFuncElement("GetUserDirectory", SecurityConfig::_GetUserDirectory)
- QCFuncElement("WriteToEventLog", SecurityConfig::WriteToEventLog)
-FCFuncEnd()
-#endif // FEATURE_CAS_POLICY
-
-#ifndef FEATURE_CORECLR
-FCFuncStart(gPrincipalFuncs)
- FCFuncElement("OpenThreadToken", COMPrincipal::OpenThreadToken)
- QCFuncElement("ImpersonateLoggedOnUser", COMPrincipal::ImpersonateLoggedOnUser)
- QCFuncElement("RevertToSelf", COMPrincipal::RevertToSelf)
- QCFuncElement("SetThreadToken", COMPrincipal::SetThreadToken)
-FCFuncEnd()
-#endif // !FEATURE_CORECLR
-
-#ifdef FEATURE_CAS_POLICY
-FCFuncStart(gEvidenceFuncs)
-FCFuncEnd()
-
-FCFuncStart(gAssemblyEvidenceFactoryFuncs)
- QCFuncElement("GetAssemblyPermissionRequests", SecurityPolicy::GetAssemblyPermissionRequests)
- QCFuncElement("GetStrongNameInformation", SecurityPolicy::GetStrongNameInformation)
-FCFuncEnd()
-
-FCFuncStart(gPEFileEvidenceFactoryFuncs)
- QCFuncElement("GetAssemblySuppliedEvidence", SecurityPolicy::GetAssemblySuppliedEvidence)
- QCFuncElement("GetLocationEvidence", SecurityPolicy::GetLocationEvidence)
- QCFuncElement("GetPublisherCertificate", SecurityPolicy::GetPublisherCertificate)
- QCFuncElement("FireEvidenceGeneratedEvent", SecurityPolicy::FireEvidenceGeneratedEvent)
-FCFuncEnd()
-
-FCFuncStart(gHostExecutionContextManagerFuncs)
- FCFuncElement("ReleaseHostSecurityContext", HostExecutionContextManager::ReleaseSecurityContext)
- FCFuncElement("CloneHostSecurityContext", HostExecutionContextManager::CloneSecurityContext)
- FCFuncElement("CaptureHostSecurityContext", HostExecutionContextManager::CaptureSecurityContext)
- FCFuncElement("SetHostSecurityContext", HostExecutionContextManager::SetSecurityContext)
- FCFuncElement("HostSecurityManagerPresent", HostExecutionContextManager::HostPresent)
-FCFuncEnd()
-#endif // FEATURE_CAS_POLICY
-
-#if defined(FEATURE_ISOSTORE) && !defined(FEATURE_ISOSTORE_LIGHT)
-FCFuncStart(gIsolatedStorage)
- QCFuncElement("GetCaller", COMIsolatedStorage::GetCaller)
-FCFuncEnd()
-
-FCFuncStart(gIsolatedStorageFile)
- QCFuncElement("GetRootDir", COMIsolatedStorageFile::GetRootDir)
- QCFuncElement("GetQuota", COMIsolatedStorageFile::GetQuota)
- QCFuncElement("SetQuota", COMIsolatedStorageFile::SetQuota)
- QCFuncElement("Reserve", COMIsolatedStorageFile::Reserve)
- QCFuncElement("GetUsage", COMIsolatedStorageFile::GetUsage)
- QCFuncElement("Open", COMIsolatedStorageFile::Open)
- QCFuncElement("Lock", COMIsolatedStorageFile::Lock)
- QCFuncElement("CreateDirectoryWithDacl", COMIsolatedStorageFile::CreateDirectoryWithDacl)
-FCFuncEnd()
-
-FCFuncStart(gIsolatedStorageFileHandle)
- QCFuncElement("Close", COMIsolatedStorageFile::Close)
-FCFuncEnd()
-#endif // FEATURE_ISOSTORE && !FEATURE_ISOSTORE_LIGHT
-
FCFuncStart(gTypeLoadExceptionFuncs)
QCFuncElement("GetTypeLoadExceptionMessage", GetTypeLoadExceptionMessage)
FCFuncEnd()
@@ -1813,13 +1437,11 @@ FCFuncEnd()
FCFuncStart(gVarArgFuncs)
FCFuncElementSig(COR_CTOR_METHOD_NAME, &gsig_IM_IntPtr_PtrVoid_RetVoid, VarArgsNative::Init2)
-#ifndef FEATURE_CORECLR
FCFuncElementSig(COR_CTOR_METHOD_NAME, &gsig_IM_IntPtr_RetVoid, VarArgsNative::Init)
FCFuncElement("GetRemainingCount", VarArgsNative::GetRemainingCount)
FCFuncElement("_GetNextArgType", VarArgsNative::GetNextArgType)
FCFuncElement("FCallGetNextArg", VarArgsNative::DoGetNextArg)
FCFuncElement("InternalGetNextArg", VarArgsNative::GetNextArg2)
-#endif // FEATURE_CORECLR
FCFuncEnd()
FCFuncStart(gMonitorFuncs)
@@ -2030,16 +1652,7 @@ FCFuncStart(gGCHandleFuncs)
FCFuncElement("InternalCompareExchange", MarshalNative::GCHandleInternalCompareExchange)
FCFuncElement("InternalAddrOfPinnedObject", MarshalNative::GCHandleInternalAddrOfPinnedObject)
FCFuncElement("InternalCheckDomain", MarshalNative::GCHandleInternalCheckDomain)
-#ifndef FEATURE_CORECLR
- FCFuncElement("InternalGetHandleType", MarshalNative::GCHandleInternalGetHandleType)
-#endif
-FCFuncEnd()
-
-#ifndef FEATURE_CORECLR
-FCFuncStart(gConfigHelper)
- FCFuncElement("RunParser", ConfigNative::RunParser)
FCFuncEnd()
-#endif // FEATURE_CORECLR
#ifndef FEATURE_CORECLR
FCFuncStart(gConsoleFuncs)
@@ -2056,12 +1669,6 @@ FCFuncStart(gStreamFuncs)
FCFuncElement("HasOverriddenBeginEndWrite", StreamNative::HasOverriddenBeginEndWrite)
FCFuncEnd()
-#ifndef FEATURE_CORECLR
-FCFuncStart(gConsoleStreamFuncs)
- FCFuncElement("WaitForAvailableConsoleInput", ConsoleStreamHelper::WaitForAvailableConsoleInput)
-FCFuncEnd()
-#endif
-
#if defined(FEATURE_COMINTEROP) && defined(FEATURE_REFLECTION_ONLY_LOAD)
FCFuncStart(gWindowsRuntimeMetadata)
QCFuncElement("nResolveNamespace", CLRPrivTypeCacheReflectionOnlyWinRT::ResolveNamespace)
@@ -2151,9 +1758,6 @@ FCClassElement("ArgIterator", "System", gVarArgFuncs)
FCClassElement("Array", "System", gArrayFuncs)
FCClassElement("ArrayWithOffset", "System.Runtime.InteropServices", gArrayWithOffsetFuncs)
FCClassElement("AssemblyBuilder", "System.Reflection.Emit", gAssemblyBuilderFuncs)
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("AssemblyEvidenceFactory", "System.Security.Policy", gAssemblyEvidenceFactoryFuncs)
-#endif // FEATURE_CAS_POLICY
#ifdef FEATURE_CORECLR
FCClassElement("AssemblyExtensions", "System.Reflection.Metadata", gAssemblyExtensionsFuncs)
@@ -2166,9 +1770,6 @@ FCClassElement("AssemblyLoadContext", "System.Runtime.Loader", gAssemblyLoadCont
FCClassElement("AssemblyName", "System.Reflection", gAssemblyNameFuncs)
FCClassElement("Assert", "System.Diagnostics", gDiagnosticsAssert)
FCClassElement("BCLDebug", "System", gBCLDebugFuncs)
-#ifndef FEATURE_CORECLR
-FCClassElement("BaseConfigHandler", "System", gConfigHelper)
-#endif // FEATURE_CORECLR
FCClassElement("Buffer", "System", gBufferFuncs)
#ifndef FEATURE_CORECLR
// Since the 2nd letter of the classname is capital, we need to sort this before all class names
@@ -2181,17 +1782,8 @@ FCClassElement("CalendarData", "System.Globalization", gCalendarDataFuncs)
#ifndef FEATURE_CORECLR
FCClassElement("ChannelServices", "System.Runtime.Remoting.Channels", gChannelServicesFuncs)
#endif // FEATURE_CORECLR
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("CodeAccessSecurityEngine", "System.Security", gCodeAccessSecurityEngineFuncs)
-#endif
FCClassElement("CompareInfo", "System.Globalization", gCompareInfoFuncs)
FCClassElement("CompatibilitySwitch", "System.Runtime.Versioning", gCompatibilitySwitchFuncs)
-#ifdef FEATURE_COMPRESSEDSTACK
-FCClassElement("CompressedStack", "System.Threading", gCompressedStackFuncs)
-#endif // FEATURE_COMPRESSEDSTACK
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("Config", "System.Security.Util", gPolicyConfigFuncs)
-#endif // FEATURE_CAS_POLICY
#ifndef FEATURE_CORECLR
FCClassElement("Console", "System", gConsoleFuncs)
#endif // ifndef FEATURE_CORECLR
@@ -2213,9 +1805,6 @@ FCClassElement("Decimal", "System", gDecimalFuncs)
FCClassElement("DefaultBinder", "System", gCOMDefaultBinderFuncs)
FCClassElement("Delegate", "System", gDelegateFuncs)
FCClassElement("DependentHandle", "System.Runtime.CompilerServices", gDependentHandleFuncs)
-#ifdef FEATURE_COMPRESSEDSTACK
-FCClassElement("DomainCompressedStack", "System.Threading", gDomainCompressedStackFuncs)
-#endif // FEATURE_COMPRESSEDSTACK
#if !defined(FEATURE_COREFX_GLOBALIZATION)
FCClassElement("EncodingTable", "System.Globalization", gEncodingTableFuncs)
#endif // !defined(FEATURE_COREFX_GLOBALIZATION)
@@ -2228,17 +1817,10 @@ FCClassElement("Exception", "System", gExceptionFuncs)
#if defined(FEATURE_COMINTEROP) && !defined(FEATURE_CORECLR)
FCClassElement("ExtensibleClassFactory", "System.Runtime.InteropServices", gExtensibleClassFactoryFuncs)
#endif
-FCClassElement("FileIOAccess", "System.Security.Permissions", gCOMFileIOAccessFuncs)
FCClassElement("FileLoadException", "System.IO", gFileLoadExceptionFuncs)
FCClassElement("FormatterServices", "System.Runtime.Serialization", gSerializationFuncs)
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("FrameSecurityDescriptor", "System.Security", gFrameSecurityDescriptorFuncs)
-#endif
FCClassElement("GC", "System", gGCInterfaceFuncs)
FCClassElement("GCHandle", "System.Runtime.InteropServices", gGCHandleFuncs)
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("HostExecutionContextManager", "System.Threading", gHostExecutionContextManagerFuncs)
-#endif // FEATURE_CAS_POLICY
#ifdef FEATURE_COMINTEROP
FCClassElement("IEnumerable", "System.Collections", gStdMngIEnumerableFuncs)
FCClassElement("IEnumerator", "System.Collections", gStdMngIEnumeratorFuncs)
@@ -2252,10 +1834,6 @@ FCClassElement("IReflect", "System.Reflection", gStdMngIReflectFuncs)
FCClassElement("InterfaceMarshaler", "System.StubHelpers", gInterfaceMarshalerFuncs)
#endif
FCClassElement("Interlocked", "System.Threading", gInterlockedFuncs)
-#if defined(FEATURE_ISOSTORE) && !defined(FEATURE_ISOSTORE_LIGHT)
-FCClassElement("IsolatedStorage", "System.IO.IsolatedStorage", gIsolatedStorage)
-FCClassElement("IsolatedStorageFile", "System.IO.IsolatedStorage", gIsolatedStorageFile)
-#endif // FEATURE_ISOSTORE && !FEATURE_ISOSTORE_LIGHT
FCClassElement("JitHelpers", "System.Runtime.CompilerServices", gJitHelpers)
FCClassElement("LoaderAllocatorScout", "System.Reflection", gLoaderAllocatorFuncs)
FCClassElement("Log", "System.Diagnostics", gDiagnosticsLog)
@@ -2301,33 +1879,21 @@ FCClassElement("Object", "System", gObjectFuncs)
FCClassElement("ObjectMarshaler", "System.StubHelpers", gObjectMarshalerFuncs)
#endif
FCClassElement("OverlappedData", "System.Threading", gOverlappedFuncs)
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("PEFileEvidenceFactory", "System.Security.Policy", gPEFileEvidenceFactoryFuncs)
-#endif // FEATURE_CAS_POLICY
FCClassElement("ParseNumbers", "System", gParseNumbersFuncs)
#ifndef FEATURE_CORECLR
FCClassElement("PasswordDeriveBytes", "System.Security.Cryptography", gPasswordDeriveBytesFuncs)
#endif
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("PolicyManager", "System.Security", gPolicyManagerFuncs)
-#endif
#if defined(FEATURE_MULTICOREJIT) && !defined(FEATURE_CORECLR)
FCClassElement("ProfileOptimization", "System.Runtime", gProfileOptimizationFuncs)
#endif // defined(FEATURE_MULTICOREJIT) && !defined(FEATURE_CORECLR)
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("PseudoCustomAttribute", "System.Reflection", gPseudoCustomAttribute)
-#endif
#ifdef FEATURE_CORECLR
FCClassElement("PunkSafeHandle", "System.Reflection.Emit", gSymWrapperCodePunkSafeHandleFuncs)
#endif
#ifndef FEATURE_CORECLR
FCClassElement("RNGCryptoServiceProvider", "System.Security.Cryptography", gRNGCryptoServiceProviderFuncs)
#endif
-#ifdef FEATURE_CRYPTO
-FCClassElement("RSACryptoServiceProvider", "System.Security.Cryptography", gRSACryptoServiceProviderFuncs)
-#endif
#ifdef FEATURE_RWLOCK
FCClassElement("ReaderWriterLock", "System.Threading", gRWLockFuncs)
#endif // FEATURE_RWLOCK
@@ -2344,9 +1910,6 @@ FCClassElement("RegistrationServices", "System.Runtime.InteropServices", gRegist
#ifdef FEATURE_REMOTING
FCClassElement("RemotingServices", "System.Runtime.Remoting", gRemotingFuncs)
#endif
-#if defined(FEATURE_CRYPTO)
-FCClassElement("Rfc2898DeriveBytes", "System.Security.Cryptography", gRfc2898DeriveBytesFuncs)
-#endif
FCClassElement("RtFieldInfo", "System.Reflection", gRuntimeFieldInfoFuncs)
FCClassElement("RuntimeAssembly", "System.Reflection", gAssemblyFuncs)
#ifdef FEATURE_COMINTEROP
@@ -2361,38 +1924,9 @@ FCClassElement("RuntimeThread", "Internal.Runtime.Augments", gRuntimeThreadFuncs
FCClassElement("RuntimeType", "System", gSystem_RuntimeType)
FCClassElement("RuntimeTypeHandle", "System", gCOMTypeHandleFuncs)
FCClassElement("SafeBuffer", "System.Runtime.InteropServices", gSafeBufferFuncs)
-#ifdef FEATURE_X509
-FCClassElement("SafeCertContextHandle", "System.Security.Cryptography.X509Certificates", gX509SafeCertContextHandleFuncs)
-#ifndef FEATURE_CORECLR
-FCClassElement("SafeCertStoreHandle", "System.Security.Cryptography.X509Certificates", gX509SafeCertStoreHandleFuncs)
-#endif // FEATURE_CORECLR
-#endif // FEATURE_X509
FCClassElement("SafeHandle", "System.Runtime.InteropServices", gSafeHandleFuncs)
-#ifdef FEATURE_CRYPTO
-FCClassElement("SafeHashHandle", "System.Security.Cryptography", gSafeHashHandleFuncs)
-#endif // FEATURE_CRYPTO
-#if defined(FEATURE_ISOSTORE) && !defined(FEATURE_ISOSTORE_LIGHT)
-FCClassElement("SafeIsolatedStorageFileHandle", "System.IO.IsolatedStorage", gIsolatedStorageFileHandle)
-#endif // FEATURE_ISOSTORE && !FEATURE_ISOSTORE_LIGHT
-#ifdef FEATURE_CRYPTO
-FCClassElement("SafeKeyHandle", "System.Security.Cryptography", gSafeKeyHandleFuncs)
-#endif
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("SafePEFileHandle", "Microsoft.Win32.SafeHandles", gPEFileFuncs)
-#endif // FEATURE_CAS_POLICY
-#ifdef FEATURE_CRYPTO
-FCClassElement("SafeProvHandle", "System.Security.Cryptography", gSafeProvHandleFuncs)
-#endif
FCClassElement("SafeTypeNameParserHandle", "System", gSafeTypeNameParserHandle)
-#if defined(FEATURE_IMPERSONATION) || defined(FEATURE_COMPRESSEDSTACK)
-FCClassElement("SecurityContext", "System.Security", gCOMSecurityContextFuncs)
-#endif // defined(FEATURE_IMPERSONATION) || defined(FEATURE_COMPRESSEDSTACK)
-FCClassElement("SecurityContextFrame", "System.Reflection", gSecurityContextFrameFuncs)
-FCClassElement("SecurityManager", "System.Security", gCOMSecurityManagerFuncs)
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("SecurityRuntime", "System.Security", gCOMSecurityRuntimeFuncs)
-#endif
FCClassElement("Signature", "System", gSignatureNative)
#ifndef FEATURE_CORECLR
FCClassElement("SizedReference", "System", gSizedRefHandleFuncs)
@@ -2404,7 +1938,6 @@ FCClassElement("StackTrace", "System.Diagnostics", gDiagnosticsStackTrace)
FCClassElement("Stream", "System.IO", gStreamFuncs)
FCClassElement("String", "System", gStringFuncs)
FCClassElement("StringBuilder", "System.Text", gStringBufferFuncs)
-FCClassElement("StringExpressionSet", "System.Security.Util", gCOMStringExpressionSetFuncs)
FCClassElement("StubHelpers", "System.StubHelpers", gStubHelperFuncs)
#if defined(FEATURE_SYNCHRONIZATIONCONTEXT_WAIT) || defined(FEATURE_APPX)
FCClassElement("SynchronizationContext", "System.Threading", gContextSynchronizationFuncs)
@@ -2427,14 +1960,10 @@ FCClassElement("TypeLoadException", "System", gTypeLoadExceptionFuncs)
FCClassElement("TypeNameBuilder", "System.Reflection.Emit", gTypeNameBuilder)
FCClassElement("TypeNameParser", "System", gTypeNameParser)
FCClassElement("TypedReference", "System", gTypedReferenceFuncs)
-FCClassElement("URLString", "System.Security.Util", gCOMUrlStringFuncs)
#ifdef FEATURE_COMINTEROP
FCClassElement("UriMarshaler", "System.StubHelpers", gUriMarshalerFuncs)
#endif
FCClassElement("Utf8String", "System", gUtf8String)
-#ifdef FEATURE_CRYPTO
-FCClassElement("Utils", "System.Security.Cryptography", gCryptographyUtilsFuncs)
-#endif
FCClassElement("ValueClassMarshaler", "System.StubHelpers", gValueClassMarshalerFuncs)
FCClassElement("ValueType", "System", gValueTypeFuncs)
#ifdef FEATURE_COMINTEROP
@@ -2445,10 +1974,6 @@ FCClassElement("WaitHandle", "System.Threading", gWaitHandleFuncs)
FCClassElement("WeakReference", "System", gWeakReferenceFuncs)
FCClassElement("WeakReference`1", "System", gWeakReferenceOfTFuncs)
-#ifndef FEATURE_CORECLR
-FCClassElement("Win32", "System.Security.Principal", gPrincipalFuncs)
-#endif
-
#ifdef FEATURE_COMINTEROP
FCClassElement("WinRTTypeNameConverter", "System.StubHelpers", gWinRTTypeNameConverterFuncs)
#endif // FEATURE_COMINTEROP
@@ -2465,19 +1990,9 @@ FCClassElement("WindowsRuntimeDesignerContext", "System.Runtime.DesignerServices
FCClassElement("WindowsRuntimeMetadata", "System.Runtime.InteropServices.WindowsRuntime", gWindowsRuntimeMetadata)
#endif
-#ifdef FEATURE_X509
-FCClassElement("X509Utils", "System.Security.Cryptography.X509Certificates", gX509CertificateFuncs)
-#endif // FEATURE_X509
#if defined(FEATURE_EVENTSOURCE_XPLAT)
FCClassElement("XplatEventLogger", "System.Diagnostics.Tracing", gEventLogger)
#endif //defined(FEATURE_EVENTSOURCE_XPLAT)
-#ifdef FEATURE_CAS_POLICY
-FCClassElement("Zone", "System.Security.Policy", gCOMSecurityZone)
-#endif // FEATURE_CAS_POLICY
-#ifndef FEATURE_CORECLR
-FCClassElement("__ConsoleStream", "System.IO", gConsoleStreamFuncs)
-#endif
-
#undef FCFuncElement
#undef FCFuncElementSig
diff --git a/src/vm/eeconfig.h b/src/vm/eeconfig.h
index 02342d7e93..338a97268b 100644
--- a/src/vm/eeconfig.h
+++ b/src/vm/eeconfig.h
@@ -261,8 +261,6 @@ enum ParseCtl {
stopAfterRuntimeSection // stop after <runtime>...</runtime> section
};
-extern CorHostProtectionManager s_CorHostProtectionManager;
-
class EEConfig
{
public:
@@ -1332,24 +1330,6 @@ public:
#endif
-void InitHostProtectionManager();
-
-extern BYTE g_CorHostProtectionManagerInstance[];
-
-inline CorHostProtectionManager* GetHostProtectionManager()
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
-// MODE_ANY;
- SO_TOLERANT;
- }
- CONTRACTL_END;
-
- return (CorHostProtectionManager*)g_CorHostProtectionManagerInstance;
-}
-
extern BOOL g_CLRPolicyRequested;
// NGENImagesAllowed is the safe way to determine if NGEN Images are allowed to be loaded. (Defined as
diff --git a/src/vm/eedbginterface.h b/src/vm/eedbginterface.h
index b65ab348cf..8c8c44d3e2 100644
--- a/src/vm/eedbginterface.h
+++ b/src/vm/eedbginterface.h
@@ -139,8 +139,10 @@ public:
#ifndef DACCESS_COMPILE
+#ifndef USE_GC_INFO_DECODER
virtual BOOL IsInPrologOrEpilog(const BYTE *address,
size_t* prologSize) = 0;
+#endif
// Determine whether certain native offsets of the specified function are within
// an exception filter or handler.
diff --git a/src/vm/eedbginterfaceimpl.cpp b/src/vm/eedbginterfaceimpl.cpp
index ff63d846e7..b7a4359350 100644
--- a/src/vm/eedbginterfaceimpl.cpp
+++ b/src/vm/eedbginterfaceimpl.cpp
@@ -483,6 +483,7 @@ MethodDesc *EEDbgInterfaceImpl::GetNativeCodeMethodDesc(const PCODE address)
RETURN ExecutionManager::GetCodeMethodDesc(address);
}
+#ifndef USE_GC_INFO_DECODER
// IsInPrologOrEpilog doesn't seem to be used for code that uses GC_INFO_DECODER
BOOL EEDbgInterfaceImpl::IsInPrologOrEpilog(const BYTE *address,
size_t* prologSize)
@@ -511,6 +512,7 @@ BOOL EEDbgInterfaceImpl::IsInPrologOrEpilog(const BYTE *address,
return FALSE;
}
+#endif // USE_GC_INFO_DECODER
//
// Given a collection of native offsets of a certain function, determine if each falls
diff --git a/src/vm/eedbginterfaceimpl.h b/src/vm/eedbginterfaceimpl.h
index 1752da8122..979c706fb2 100644
--- a/src/vm/eedbginterfaceimpl.h
+++ b/src/vm/eedbginterfaceimpl.h
@@ -124,8 +124,10 @@ public:
MethodDesc *GetNativeCodeMethodDesc(const PCODE address) DAC_UNEXPECTED();
+#ifndef USE_GC_INFO_DECODER
BOOL IsInPrologOrEpilog(const BYTE *address,
size_t* prologSize);
+#endif
void DetermineIfOffsetsInFilterOrHandler(const BYTE *functionAddress,
DebugOffsetToHandlerInfo *pOffsetToHandlerInfo,
diff --git a/src/vm/eetoprofinterfaceimpl.cpp b/src/vm/eetoprofinterfaceimpl.cpp
index 1ceed3d81b..e96a9e58d3 100644
--- a/src/vm/eetoprofinterfaceimpl.cpp
+++ b/src/vm/eetoprofinterfaceimpl.cpp
@@ -2370,18 +2370,6 @@ HRESULT EEToProfInterfaceImpl::SetEventMask(DWORD dwEventMask, DWORD dwEventMask
}
}
- // Flags defined in COR_PRF_REQUIRE_PROFILE_IMAGE will force to JIT mscorlib if the
- // user does not ngen mscorlib with /profiler. Similarly, the
- // COR_PRF_DISABLE_ALL_NGEN_IMAGES flag always forces us to JIT mscorlib. Using the
- // jitted version of mscorlib with HPA(Host Protection Attributes) enabled will cause
- // stack overflow inside JIT. See Dev 10 Bug 637987 for the detail.
- if (((dwEventMask & (COR_PRF_REQUIRE_PROFILE_IMAGE | COR_PRF_DISABLE_ALL_NGEN_IMAGES)) != 0) &&
- (GetHostProtectionManager() != NULL) &&
- (GetHostProtectionManager()->GetProtectedCategories() != eNoChecks))
- {
- return CORPROF_E_INCONSISTENT_FLAGS_WITH_HOST_PROTECTION_SETTING;
- }
-
// High event bits
if (((dwEventMaskHigh & COR_PRF_HIGH_ADD_ASSEMBLY_REFERENCES) != 0) &&
diff --git a/src/vm/eetwain.cpp b/src/vm/eetwain.cpp
index 2ce7b59578..340ea85e94 100644
--- a/src/vm/eetwain.cpp
+++ b/src/vm/eetwain.cpp
@@ -562,7 +562,8 @@ FrameType GetHandlerFrameInfo(hdrInfo * info,
// The slots grow towards lower address on the stack and is terminted by a NULL entry.
// Since each subsequent slot contains the SP of a more nested EH clause, the contents of the slots are
// expected to be in decreasing order.
- size_t lvl;
+ size_t lvl = 0;
+#ifndef WIN64EXCEPTIONS
PTR_TADDR pSlot;
for(lvl = 0, pSlot = pFirstBaseSPslot;
*pSlot && lvl < unwindLevel;
@@ -625,6 +626,7 @@ FrameType GetHandlerFrameInfo(hdrInfo * info,
baseSP = curSlotVal;
}
}
+#endif // WIN64EXCEPTIONS
if (unwindESP != (TADDR) IGNORE_VAL)
{
@@ -691,6 +693,7 @@ inline size_t GetSizeOfFrameHeaderForEnC(hdrInfo * info)
#endif // !USE_GC_INFO_DECODER
#ifndef DACCESS_COMPILE
+#ifndef WIN64EXCEPTIONS
/*****************************************************************************
*
@@ -716,8 +719,6 @@ void EECodeManager::FixContext( ContextType ctxType,
_ASSERTE((ctxType == FINALLY_CONTEXT) == (thrownObject == NULL));
-#ifdef _TARGET_X86_
-
_ASSERTE(sizeof(CodeManStateBuf) <= sizeof(pState->stateBuf));
CodeManStateBuf * stateBuf = (CodeManStateBuf*)pState->stateBuf;
@@ -771,12 +772,10 @@ void EECodeManager::FixContext( ContextType ctxType,
*/
*((OBJECTREF*)&(ctx->Eax)) = thrownObject;
-
-#else // !_TARGET_X86_
- _ASSERTE(!"@NYI - EECodeManager::FixContext (EETwain.cpp)");
-#endif // _TARGET_X86_
}
+#endif // !WIN64EXCEPTIONS
+
@@ -1643,10 +1642,10 @@ void * getCalleeSavedReg(PREGDISPLAY pContext, regNum reg)
switch (reg)
{
- case REGI_EBP: return pContext->pEbp;
- case REGI_EBX: return pContext->pEbx;
- case REGI_ESI: return pContext->pEsi;
- case REGI_EDI: return pContext->pEdi;
+ case REGI_EBP: return pContext->GetEbpLocation();
+ case REGI_EBX: return pContext->GetEbxLocation();
+ case REGI_ESI: return pContext->GetEsiLocation();
+ case REGI_EDI: return pContext->GetEdiLocation();
default: _ASSERTE(!"bad info.thisPtrResult"); return NULL;
}
@@ -2841,7 +2840,9 @@ void TRASH_CALLEE_UNSAVED_REGS(PREGDISPLAY pContext)
/* This is not completely correct as we lose the current value, but
it should not really be useful to anyone. */
static DWORD s_badData = 0xDEADBEEF;
- pContext->pEax = pContext->pEcx = pContext->pEdx = &s_badData;
+ pContext->SetEaxLocation(&s_badData);
+ pContext->SetEcxLocation(&s_badData);
+ pContext->SetEdxLocation(&s_badData);
#endif //_DEBUG
}
@@ -3048,7 +3049,7 @@ unsigned SKIP_ALLOC_FRAME(int size, PTR_CBYTE base, unsigned offset)
#endif // !USE_GC_INFO_DECODER
-#if !defined(_TARGET_X86_) && !defined(CROSSGEN_COMPILE)
+#if defined(WIN64EXCEPTIONS) && !defined(CROSSGEN_COMPILE)
void EECodeManager::EnsureCallerContextIsValid( PREGDISPLAY pRD, StackwalkCacheEntry* pCacheEntry, EECodeInfo * pCodeInfo /*= NULL*/ )
{
@@ -3062,7 +3063,7 @@ void EECodeManager::EnsureCallerContextIsValid( PREGDISPLAY pRD, StackwalkCache
if( !pRD->IsCallerContextValid )
{
-#if !defined(DACCESS_COMPILE)
+#if !defined(DACCESS_COMPILE) && defined(HAS_QUICKUNWIND)
if (pCacheEntry != NULL)
{
// lightened schema: take stack unwind info from stackwalk cache
@@ -3073,13 +3074,9 @@ void EECodeManager::EnsureCallerContextIsValid( PREGDISPLAY pRD, StackwalkCache
{
// We need to make a copy here (instead of switching the pointers), in order to preserve the current context
*(pRD->pCallerContext) = *(pRD->pCurrentContext);
-
- NOT_X86(*(pRD->pCallerContextPointers) = *(pRD->pCurrentContextPointers));
-
- T_KNONVOLATILE_CONTEXT_POINTERS *pCallerContextPointers = NULL;
- NOT_X86(pCallerContextPointers = pRD->pCallerContextPointers);
+ *(pRD->pCallerContextPointers) = *(pRD->pCurrentContextPointers);
- Thread::VirtualUnwindCallFrame(pRD->pCallerContext, pCallerContextPointers, pCodeInfo);
+ Thread::VirtualUnwindCallFrame(pRD->pCallerContext, pRD->pCallerContextPointers, pCodeInfo);
}
pRD->IsCallerContextValid = TRUE;
@@ -3105,8 +3102,9 @@ size_t EECodeManager::GetCallerSp( PREGDISPLAY pRD )
return (size_t) (GetSP(pRD->pCallerContext));
}
-#endif // !defined(_TARGET_X86_) && !defined(CROSSGEN_COMPILE)
+#endif // WIN64EXCEPTIONS && !CROSSGEN_COMPILE
+#ifdef HAS_QUICKUNWIND
/*
* Light unwind the current stack frame, using provided cache entry.
* pPC, Esp and pEbp of pContext are updated.
@@ -3131,19 +3129,21 @@ void EECodeManager::QuickUnwindStackFrame(PREGDISPLAY pRD, StackwalkCacheEntry *
if (pCacheEntry->fUseEbpAsFrameReg)
{
_ASSERTE(pCacheEntry->fUseEbp);
+ TADDR curEBP = (TADDR)*pRD->GetEbpLocation();
+
// EBP frame, update ESP through EBP, since ESPOffset may vary
- pRD->pEbp = PTR_DWORD((TADDR)*pRD->pEbp);
- pRD->Esp = (TADDR)pRD->pEbp + sizeof(void*);
+ pRD->SetEbpLocation(PTR_DWORD(curEBP));
+ pRD->SP = curEBP + sizeof(void*);
}
else
{
_ASSERTE(!pCacheEntry->fUseEbp);
// ESP frame, update up to retAddr using ESPOffset
- pRD->Esp += pCacheEntry->ESPOffset;
+ pRD->SP += pCacheEntry->ESPOffset;
}
- pRD->PCTAddr = (TADDR)pRD->Esp;
+ pRD->PCTAddr = (TADDR)pRD->SP;
pRD->ControlPC = *PTR_PCODE(pRD->PCTAddr);
- pRD->Esp += sizeof(void*) + pCacheEntry->argSize;
+ pRD->SP += sizeof(void*) + pCacheEntry->argSize;
#elif defined(_TARGET_AMD64_)
if (pRD->IsCallerContextValid)
@@ -3195,6 +3195,7 @@ void EECodeManager::QuickUnwindStackFrame(PREGDISPLAY pRD, StackwalkCacheEntry *
PORTABILITY_ASSERT("EECodeManager::QuickUnwindStackFrame is not implemented on this platform.");
#endif // !_TARGET_X86_ && !_TARGET_AMD64_
}
+#endif // HAS_QUICKUNWIND
/*****************************************************************************/
#ifdef _TARGET_X86_ // UnwindStackFrame
@@ -3208,13 +3209,32 @@ const RegMask CALLEE_SAVED_REGISTERS_MASK[] =
RM_EBP // last register to be pushed
};
-const SIZE_T REGDISPLAY_OFFSET_OF_CALLEE_SAVED_REGISTERS[] =
+static void SetLocation(PREGDISPLAY pRD, int ind, PDWORD loc)
{
- offsetof(REGDISPLAY, pEdi), // first register to be pushed
- offsetof(REGDISPLAY, pEsi),
- offsetof(REGDISPLAY, pEbx),
- offsetof(REGDISPLAY, pEbp) // last register to be pushed
-};
+#ifdef WIN64EXCEPTIONS
+ static const SIZE_T OFFSET_OF_CALLEE_SAVED_REGISTERS[] =
+ {
+ offsetof(T_KNONVOLATILE_CONTEXT_POINTERS, Edi), // first register to be pushed
+ offsetof(T_KNONVOLATILE_CONTEXT_POINTERS, Esi),
+ offsetof(T_KNONVOLATILE_CONTEXT_POINTERS, Ebx),
+ offsetof(T_KNONVOLATILE_CONTEXT_POINTERS, Ebp), // last register to be pushed
+ };
+
+ SIZE_T offsetOfRegPtr = OFFSET_OF_CALLEE_SAVED_REGISTERS[ind];
+ *(LPVOID*)(PBYTE(pRD->pCurrentContextPointers) + offsetOfRegPtr) = loc;
+#else
+ static const SIZE_T OFFSET_OF_CALLEE_SAVED_REGISTERS[] =
+ {
+ offsetof(REGDISPLAY, pEdi), // first register to be pushed
+ offsetof(REGDISPLAY, pEsi),
+ offsetof(REGDISPLAY, pEbx),
+ offsetof(REGDISPLAY, pEbp), // last register to be pushed
+ };
+
+ SIZE_T offsetOfRegPtr = OFFSET_OF_CALLEE_SAVED_REGISTERS[ind];
+ *(LPVOID*)(PBYTE(pRD) + offsetOfRegPtr) = loc;
+#endif
+}
/*****************************************************************************/
@@ -3232,7 +3252,7 @@ void UnwindEspFrameEpilog(
_ASSERTE(info->epilogOffs > 0);
int offset = 0;
- unsigned ESP = pContext->Esp;
+ unsigned ESP = pContext->SP;
if (info->rawStkSize)
{
@@ -3280,8 +3300,7 @@ void UnwindEspFrameEpilog(
Get the value from the stack if needed */
if ((flags & UpdateAllRegs) || (regMask == RM_EBP))
{
- SIZE_T offsetOfRegPtr = REGDISPLAY_OFFSET_OF_CALLEE_SAVED_REGISTERS[i - 1];
- *(LPVOID*)(PBYTE(pContext) + offsetOfRegPtr) = PTR_DWORD((TADDR)ESP);
+ SetLocation(pContext, i - 1, PTR_DWORD((TADDR)ESP));
}
/* Adjust ESP */
@@ -3300,7 +3319,7 @@ void UnwindEspFrameEpilog(
pContext->PCTAddr = (TADDR)ESP;
pContext->ControlPC = *PTR_PCODE(pContext->PCTAddr);
- pContext->Esp = ESP;
+ pContext->SP = ESP;
}
/*****************************************************************************/
@@ -3324,7 +3343,7 @@ void UnwindEbpDoubleAlignFrameEpilog(
have already been popped */
int offset = 0;
- unsigned ESP = pContext->Esp;
+ unsigned ESP = pContext->SP;
bool needMovEspEbp = false;
@@ -3386,7 +3405,7 @@ void UnwindEbpDoubleAlignFrameEpilog(
unsigned calleeSavedRegsSize = info->savedRegsCountExclFP * sizeof(void*);
if (!InstructionAlreadyExecuted(offset, info->epilogOffs))
- ESP = (*pContext->pEbp) - calleeSavedRegsSize;
+ ESP = *pContext->GetEbpLocation() - calleeSavedRegsSize;
offset = SKIP_LEA_ESP_EBP(-int(calleeSavedRegsSize), epilogBase, offset);
}
@@ -3404,8 +3423,7 @@ void UnwindEbpDoubleAlignFrameEpilog(
{
if (flags & UpdateAllRegs)
{
- SIZE_T offsetOfRegPtr = REGDISPLAY_OFFSET_OF_CALLEE_SAVED_REGISTERS[i - 1];
- *(LPVOID*)(PBYTE(pContext) + offsetOfRegPtr) = PTR_DWORD((TADDR)ESP);
+ SetLocation(pContext, i - 1, PTR_DWORD((TADDR)ESP));
}
ESP += sizeof(void*);
}
@@ -3416,7 +3434,7 @@ void UnwindEbpDoubleAlignFrameEpilog(
if (needMovEspEbp)
{
if (!InstructionAlreadyExecuted(offset, info->epilogOffs))
- ESP = *pContext->pEbp;
+ ESP = *pContext->GetEbpLocation();
offset = SKIP_MOV_REG_REG(epilogBase, offset);
}
@@ -3424,7 +3442,7 @@ void UnwindEbpDoubleAlignFrameEpilog(
// Have we executed the pop EBP?
if (!InstructionAlreadyExecuted(offset, info->epilogOffs))
{
- pContext->pEbp = PTR_DWORD(TADDR(ESP));
+ pContext->SetEbpLocation(PTR_DWORD(TADDR(ESP)));
ESP += sizeof(void*);
}
offset = SKIP_POP_REG(epilogBase, offset);
@@ -3432,7 +3450,13 @@ void UnwindEbpDoubleAlignFrameEpilog(
pContext->PCTAddr = (TADDR)ESP;
pContext->ControlPC = *PTR_PCODE(pContext->PCTAddr);
- pContext->Esp = ESP;
+ pContext->SP = ESP;
+}
+
+inline SIZE_T GetStackParameterSize(hdrInfo * info)
+{
+ SUPPORTS_DAC;
+ return (info->varargs ? 0 : info->argSize); // Note varargs is caller-popped
}
//****************************************************************************
@@ -3442,8 +3466,7 @@ inline SIZE_T ESPIncrOnReturn(hdrInfo * info)
{
SUPPORTS_DAC;
return sizeof(void *) + // pop off the return address
- // Note varargs is caller-popped
- (info->varargs ? 0 : info->argSize);
+ GetStackParameterSize(info);
}
/*****************************************************************************/
@@ -3476,7 +3499,7 @@ void UnwindEpilog(
/* Now adjust stack pointer */
- pContext->Esp += ESPIncrOnReturn(info);
+ pContext->SP += ESPIncrOnReturn(info);
}
/*****************************************************************************/
@@ -3506,7 +3529,7 @@ void UnwindEspFrameProlog(
#endif
const DWORD curOffs = info->prologOffs;
- unsigned ESP = pContext->Esp;
+ unsigned ESP = pContext->SP;
// Find out how many callee-saved regs have already been pushed
@@ -3552,16 +3575,16 @@ void UnwindEspFrameProlog(
// Always restore EBP
if (regsMask & RM_EBP)
- pContext->pEbp = savedRegPtr++;
+ pContext->SetEbpLocation(savedRegPtr++);
if (flags & UpdateAllRegs)
{
if (regsMask & RM_EBX)
- pContext->pEbx = savedRegPtr++;
+ pContext->SetEbxLocation(savedRegPtr++);
if (regsMask & RM_ESI)
- pContext->pEsi = savedRegPtr++;
+ pContext->SetEsiLocation(savedRegPtr++);
if (regsMask & RM_EDI)
- pContext->pEdi = savedRegPtr++;
+ pContext->SetEdiLocation(savedRegPtr++);
TRASH_CALLEE_UNSAVED_REGS(pContext);
}
@@ -3578,7 +3601,7 @@ void UnwindEspFrameProlog(
_ASSERTE(offset == info->prologOffs);
#endif
- pContext->Esp = ESP;
+ pContext->SP = ESP;
}
/*****************************************************************************/
@@ -3597,7 +3620,7 @@ void UnwindEspFrame(
_ASSERTE(!info->ebpFrame && !info->doubleAlign);
_ASSERTE(info->epilogOffs == hdrInfo::NOT_IN_EPILOG);
- unsigned ESP = pContext->Esp;
+ unsigned ESP = pContext->SP;
if (info->prologOffs != hdrInfo::NOT_IN_PROLOG)
@@ -3605,7 +3628,7 @@ void UnwindEspFrame(
if (info->prologOffs != 0) // Do nothing for the very start of the method
{
UnwindEspFrameProlog(pContext, info, methodStart, flags);
- ESP = pContext->Esp;
+ ESP = pContext->SP;
}
}
else
@@ -3627,8 +3650,7 @@ void UnwindEspFrame(
if ((regMask & regsMask) == 0)
continue;
- SIZE_T offsetOfRegPtr = REGDISPLAY_OFFSET_OF_CALLEE_SAVED_REGISTERS[i - 1];
- *(LPVOID*)(PBYTE(pContext) + offsetOfRegPtr) = PTR_DWORD((TADDR)ESP);
+ SetLocation(pContext, i - 1, PTR_DWORD((TADDR)ESP));
ESP += sizeof(unsigned);
}
@@ -3641,7 +3663,7 @@ void UnwindEspFrame(
/* Now adjust stack pointer */
- pContext->Esp = ESP + ESPIncrOnReturn(info);
+ pContext->SP = ESP + ESPIncrOnReturn(info);
}
@@ -3685,11 +3707,11 @@ void UnwindEbpDoubleAlignFrameProlog(
/* If we're past the "push ebp", adjust ESP to pop EBP off */
if (curOffs == (offset + 1))
- pContext->Esp += sizeof(TADDR);
+ pContext->SP += sizeof(TADDR);
/* Stack pointer points to return address */
- pContext->PCTAddr = (TADDR)pContext->Esp;
+ pContext->PCTAddr = (TADDR)pContext->SP;
pContext->ControlPC = *PTR_PCODE(pContext->PCTAddr);
/* EBP and callee-saved registers still have the correct value */
@@ -3706,7 +3728,7 @@ void UnwindEbpDoubleAlignFrameProlog(
can be determined using EBP. Since we are still in the prolog,
we need to know our exact location to determine the callee-saved registers */
- const unsigned curEBP = *pContext->pEbp;
+ const unsigned curEBP = *pContext->GetEbpLocation();
if (flags & UpdateAllRegs)
{
@@ -3739,8 +3761,7 @@ void UnwindEbpDoubleAlignFrameProlog(
if (InstructionAlreadyExecuted(offset, curOffs))
{
- SIZE_T offsetOfRegPtr = REGDISPLAY_OFFSET_OF_CALLEE_SAVED_REGISTERS[i];
- *(LPVOID*)(PBYTE(pContext) + offsetOfRegPtr) = --pSavedRegs;
+ SetLocation(pContext, i, PTR_DWORD(--pSavedRegs));
}
// "push reg"
@@ -3752,12 +3773,12 @@ void UnwindEbpDoubleAlignFrameProlog(
/* The caller's saved EBP is pointed to by our EBP */
- pContext->pEbp = PTR_DWORD((TADDR)curEBP);
- pContext->Esp = DWORD((TADDR)(curEBP + sizeof(void *)));
+ pContext->SetEbpLocation(PTR_DWORD((TADDR)curEBP));
+ pContext->SP = DWORD((TADDR)(curEBP + sizeof(void *)));
/* Stack pointer points to return address */
- pContext->PCTAddr = (TADDR)pContext->Esp;
+ pContext->PCTAddr = (TADDR)pContext->SP;
pContext->ControlPC = *PTR_PCODE(pContext->PCTAddr);
}
@@ -3775,8 +3796,8 @@ bool UnwindEbpDoubleAlignFrame(
_ASSERTE(info->ebpFrame || info->doubleAlign);
- const unsigned curESP = pContext->Esp;
- const unsigned curEBP = *pContext->pEbp;
+ const unsigned curESP = pContext->SP;
+ const unsigned curEBP = *pContext->GetEbpLocation();
/* First check if we are in a filter (which is obviously after the prolog) */
@@ -3806,7 +3827,7 @@ bool UnwindEbpDoubleAlignFrame(
pContext->PCTAddr = baseSP;
pContext->ControlPC = *PTR_PCODE(pContext->PCTAddr);
- pContext->Esp = (DWORD)(baseSP + sizeof(TADDR));
+ pContext->SP = (DWORD)(baseSP + sizeof(TADDR));
// pContext->pEbp = same as before;
@@ -3819,8 +3840,13 @@ bool UnwindEbpDoubleAlignFrame(
{
static DWORD s_badData = 0xDEADBEEF;
- pContext->pEax = pContext->pEbx = pContext->pEcx =
- pContext->pEdx = pContext->pEsi = pContext->pEdi = &s_badData;
+ pContext->SetEaxLocation(&s_badData);
+ pContext->SetEcxLocation(&s_badData);
+ pContext->SetEdxLocation(&s_badData);
+
+ pContext->SetEbxLocation(&s_badData);
+ pContext->SetEsiLocation(&s_badData);
+ pContext->SetEdiLocation(&s_badData);
}
#endif
@@ -3845,7 +3871,7 @@ bool UnwindEbpDoubleAlignFrame(
/* Now adjust stack pointer. */
- pContext->Esp += ESPIncrOnReturn(info);
+ pContext->SP += ESPIncrOnReturn(info);
return true;
}
@@ -3863,14 +3889,13 @@ bool UnwindEbpDoubleAlignFrame(
if ((info->savedRegMask & regMask) == 0)
continue;
- SIZE_T offsetOfRegPtr = REGDISPLAY_OFFSET_OF_CALLEE_SAVED_REGISTERS[i];
- *(LPVOID*)(PBYTE(pContext) + offsetOfRegPtr) = --pSavedRegs;
+ SetLocation(pContext, i, --pSavedRegs);
}
}
/* The caller's ESP will be equal to EBP + retAddrSize + argSize. */
- pContext->Esp = (DWORD)(curEBP + sizeof(curEBP) + ESPIncrOnReturn(info));
+ pContext->SP = (DWORD)(curEBP + sizeof(curEBP) + ESPIncrOnReturn(info));
/* The caller's saved EIP is right after our EBP */
@@ -3879,26 +3904,16 @@ bool UnwindEbpDoubleAlignFrame(
/* The caller's saved EBP is pointed to by our EBP */
- pContext->pEbp = PTR_DWORD((TADDR)curEBP);
+ pContext->SetEbpLocation(PTR_DWORD((TADDR)curEBP));
return true;
}
-/*****************************************************************************
- *
- * Unwind the current stack frame, i.e. update the virtual register
- * set in pContext. This will be similar to the state after the function
- * returns back to caller (IP points to after the call, Frame and Stack
- * pointer has been reset, callee-saved registers restored (if UpdateAllRegs),
- * callee-unsaved registers are trashed.
- * Returns success of operation.
- */
-
-bool EECodeManager::UnwindStackFrame(PREGDISPLAY pContext,
- EECodeInfo *pCodeInfo,
- unsigned flags,
- CodeManState *pState,
- StackwalkCacheUnwindInfo *pUnwindInfo /* out-only, perf improvement */)
+bool UnwindStackFrame(PREGDISPLAY pContext,
+ EECodeInfo *pCodeInfo,
+ unsigned flags,
+ CodeManState *pState,
+ StackwalkCacheUnwindInfo *pUnwindInfo /* out-only, perf improvement */)
{
CONTRACTL {
NOTHROW;
@@ -3991,8 +4006,37 @@ bool EECodeManager::UnwindStackFrame(PREGDISPLAY pContext,
return true;
}
+#endif // _TARGET_X86_
+
+#ifndef CROSSGEN_COMPILE
+#ifndef WIN64EXCEPTIONS
+
+/*****************************************************************************
+ *
+ * Unwind the current stack frame, i.e. update the virtual register
+ * set in pContext. This will be similar to the state after the function
+ * returns back to caller (IP points to after the call, Frame and Stack
+ * pointer has been reset, callee-saved registers restored (if UpdateAllRegs),
+ * callee-unsaved registers are trashed.
+ * Returns success of operation.
+ */
+
+bool EECodeManager::UnwindStackFrame(PREGDISPLAY pContext,
+ EECodeInfo *pCodeInfo,
+ unsigned flags,
+ CodeManState *pState,
+ StackwalkCacheUnwindInfo *pUnwindInfo /* out-only, perf improvement */)
+{
+#ifdef _TARGET_X86_
+ return ::UnwindStackFrame(pContext, pCodeInfo, flags, pState, pUnwindInfo);
+#else // _TARGET_X86_
+ PORTABILITY_ASSERT("EECodeManager::UnwindStackFrame");
+ return false;
+#endif // _TARGET_???_
+}
+
/*****************************************************************************/
-#elif !defined(CROSSGEN_COMPILE) // _TARGET_X86_ - UnwindStackFrame
+#else // !WIN64EXCEPTIONS
/*****************************************************************************/
bool EECodeManager::UnwindStackFrame(PREGDISPLAY pContext,
@@ -4022,19 +4066,9 @@ bool EECodeManager::UnwindStackFrame(PREGDISPLAY pContext,
}
/*****************************************************************************/
-#else // _TARGET_X86_ - UnwindStackFrame
-
-bool EECodeManager::UnwindStackFrame(PREGDISPLAY pContext,
- EECodeInfo *pCodeInfo,
- unsigned flags,
- CodeManState *pState,
- StackwalkCacheUnwindInfo *pUnwindInfo /* out-only, perf improvement */)
-{
- _ASSERTE(!"EECodeManager::UnwindStackFrame not supported in this build configuration");
- return true;
-}
+#endif // WIN64EXCEPTIONS
+#endif // !CROSSGEN_COMPILE
-#endif // _TARGET_X86_ - UnwindStackFrame
/*****************************************************************************/
/* report args in 'msig' to the GC.
@@ -4085,7 +4119,8 @@ void promoteVarArgs(PTR_BYTE argsStart, PTR_VASigCookie varArgSig, GCCONTEXT* ct
INDEBUG(void* forceStack1;)
-#if defined(_TARGET_X86_)
+#ifndef CROSSGEN_COMPILE
+#ifndef USE_GC_INFO_DECODER
/*****************************************************************************
*
@@ -4109,8 +4144,8 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pContext,
GCInfoToken gcInfoToken = pCodeInfo->GetGCInfoToken();
unsigned curOffs = pCodeInfo->GetRelOffset();
- unsigned EBP = *pContext->pEbp;
- unsigned ESP = pContext->Esp;
+ unsigned EBP = *pContext->GetEbpLocation();
+ unsigned ESP = pContext->SP;
unsigned ptrOffs;
@@ -4176,7 +4211,7 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pContext,
if (dspPtr) \
printf(" Live pointer register %s: ", #regName); \
pCallBack(hCallBack, \
- (OBJECTREF*)(pContext->p##regName), \
+ (OBJECTREF*)(pContext->Get##regName##Location()), \
(iptr ? GC_CALL_INTERIOR : 0) \
| CHECK_APP_DOMAIN \
DAC_ARG(DacSlotLocation(reg, 0, false))); \
@@ -4185,7 +4220,7 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pContext,
#define CHK_AND_REPORT_REG(reg, doIt, iptr, regName) \
if (doIt) \
pCallBack(hCallBack, \
- (OBJECTREF*)(pContext->p##regName), \
+ (OBJECTREF*)(pContext->Get##regName##Location()), \
(iptr ? GC_CALL_INTERIOR : 0) \
| CHECK_APP_DOMAIN \
DAC_ARG(DacSlotLocation(reg, 0, false)));
@@ -4726,7 +4761,7 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pContext,
return true;
}
-#elif defined(USE_GC_INFO_DECODER) && !defined(CROSSGEN_COMPILE) // !defined(_TARGET_X86_)
+#else // !USE_GC_INFO_DECODER
/*****************************************************************************
@@ -4766,7 +4801,6 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pRD,
GCInfoToken gcInfoToken = pCodeInfo->GetGCInfoToken();
#if defined(STRESS_HEAP) && defined(PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED)
-#ifdef USE_GC_INFO_DECODER
// When we simulate a hijack during gcstress
// we start with ActiveStackFrame and the offset
// after the call
@@ -4789,7 +4823,6 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pRD,
flags &= ~((unsigned)ActiveStackFrame);
}
}
-#endif // USE_GC_INFO_DECODER
#endif // STRESS_HEAP && PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED
#ifdef _DEBUG
@@ -4804,7 +4837,6 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pRD,
}
#endif
-#ifdef USE_GC_INFO_DECODER
/* If we are not in the active method, we are currently pointing
* to the return address; at the return address stack variables
* can become dead if the call is the last instruction of a try block
@@ -4864,7 +4896,6 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pRD,
methodName, curOffs));
}
-#endif // USE_GC_INFO_DECODER
#if defined(WIN64EXCEPTIONS) // funclets
if (pCodeInfo->GetJitManager()->IsFilterFunclet(pCodeInfo))
@@ -4962,11 +4993,11 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pRD,
_ASSERTE(prevSP + VASigCookieOffset >= dac_cast<PTR_BYTE>(GetSP(pRD->pCurrentContext)));
-#if defined(_DEBUG) && !defined(DACCESS_COMPILE) && !defined(CROSSGEN_COMPILE)
+#if defined(_DEBUG) && !defined(DACCESS_COMPILE)
// Note that I really want to say hCallBack is a GCCONTEXT, but this is pretty close
extern void GcEnumObject(LPVOID pData, OBJECTREF *pObj, uint32_t flags);
_ASSERTE((void*) GcEnumObject == pCallBack);
-#endif
+#endif // _DEBUG && !DACCESS_COMPILE
GCCONTEXT *pCtx = (GCCONTEXT *) hCallBack;
// For varargs, look up the signature using the varArgSig token passed on the stack
@@ -4979,21 +5010,10 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pRD,
}
-#else // !defined(_TARGET_X86_) && !(defined(USE_GC_INFO_DECODER) && !defined(CROSSGEN_COMPILE))
-
-bool EECodeManager::EnumGcRefs( PREGDISPLAY pContext,
- EECodeInfo *pCodeInfo,
- unsigned flags,
- GCEnumCallback pCallBack,
- LPVOID hCallBack,
- DWORD relOffsetOverride)
-{
- PORTABILITY_ASSERT("EECodeManager::EnumGcRefs is not implemented on this platform.");
- return false;
-}
-
-#endif // _TARGET_X86_
+#endif // USE_GC_INFO_DECODER
+#endif // !CROSSGEN_COMPILE
+#ifdef _TARGET_X86_
/*****************************************************************************
*
* Return the address of the local security object reference
@@ -5004,20 +5024,17 @@ bool EECodeManager::EnumGcRefs( PREGDISPLAY pContext,
OBJECTREF* EECodeManager::GetAddrOfSecurityObjectFromCachedInfo(PREGDISPLAY pRD, StackwalkCacheUnwindInfo * stackwalkCacheUnwindInfo)
{
LIMITED_METHOD_CONTRACT;
-#ifdef _TARGET_X86_
size_t securityObjectOffset = stackwalkCacheUnwindInfo->securityObjectOffset;
+
_ASSERTE(securityObjectOffset != 0);
// We pretend that filters are ESP-based methods in UnwindEbpDoubleAlignFrame().
// Hence we cannot enforce this assert.
// _ASSERTE(stackwalkCacheUnwindInfo->fUseEbpAsFrameReg);
- return (OBJECTREF *) (size_t) (DWORD(*pRD->pEbp) - (securityObjectOffset * sizeof(void*)));
-#else
- PORTABILITY_ASSERT("EECodeManager::GetAddrOfSecurityObjectFromContext is not implemented on this platform.");
- return NULL;
-#endif
+ return (OBJECTREF *) (size_t) (*pRD->GetEbpLocation() - (securityObjectOffset * sizeof(void*)));
}
+#endif // _TARGET_X86_
-#ifndef DACCESS_COMPILE
+#if !defined(DACCESS_COMPILE) && !defined(CROSSGEN_COMPILE)
OBJECTREF* EECodeManager::GetAddrOfSecurityObject(CrawlFrame *pCF)
{
CONTRACTL {
@@ -5035,7 +5052,7 @@ OBJECTREF* EECodeManager::GetAddrOfSecurityObject(CrawlFrame *pCF)
_ASSERTE(sizeof(CodeManStateBuf) <= sizeof(pState->stateBuf));
-#if defined(_TARGET_X86_)
+#ifndef USE_GC_INFO_DECODER
CodeManStateBuf * stateBuf = (CodeManStateBuf*)pState->stateBuf;
/* Extract the necessary information from the info block header */
@@ -5050,10 +5067,10 @@ OBJECTREF* EECodeManager::GetAddrOfSecurityObject(CrawlFrame *pCF)
if(stateBuf->hdrInfoBody.prologOffs == hdrInfo::NOT_IN_PROLOG &&
stateBuf->hdrInfoBody.epilogOffs == hdrInfo::NOT_IN_EPILOG)
{
- return (OBJECTREF *)(size_t)(((DWORD)*pRD->pEbp) - GetSecurityObjectOffset(&stateBuf->hdrInfoBody));
+ return (OBJECTREF *)(size_t)(*pRD->GetEbpLocation() - GetSecurityObjectOffset(&stateBuf->hdrInfoBody));
}
}
-#elif defined(USE_GC_INFO_DECODER) && !defined(CROSSGEN_COMPILE)
+#else // !USE_GC_INFO_DECODER
GcInfoDecoder gcInfoDecoder(
gcInfoToken,
@@ -5088,14 +5105,13 @@ OBJECTREF* EECodeManager::GetAddrOfSecurityObject(CrawlFrame *pCF)
OBJECTREF* pSlot = (OBJECTREF*) (spOffset + uCallerSP);
return pSlot;
}
-#else // !_TARGET_X86_ && !(USE_GC_INFO_DECODER && !CROSSGEN_COMPILE)
- PORTABILITY_ASSERT("EECodeManager::GetAddrOfSecurityObject is not implemented on this platform.");
-#endif
+#endif // USE_GC_INFO_DECODER
return NULL;
}
-#endif
+#endif // !DACCESS_COMPILE && !CROSSGEN_COMPILE
+#ifndef CROSSGEN_COMPILE
/*****************************************************************************
*
* Returns "this" pointer if it is a non-static method
@@ -5117,7 +5133,7 @@ OBJECTREF EECodeManager::GetInstance( PREGDISPLAY pContext,
SUPPORTS_DAC;
} CONTRACTL_END;
-#ifdef _TARGET_X86_
+#ifndef USE_GC_INFO_DECODER
GCInfoToken gcInfoToken = pCodeInfo->GetGCInfoToken();
unsigned relOffset = pCodeInfo->GetRelOffset();
@@ -5152,11 +5168,11 @@ OBJECTREF EECodeManager::GetInstance( PREGDISPLAY pContext,
if (info.ebpFrame)
{
_ASSERTE(stackDepth == 0);
- taArgBase = *pContext->pEbp;
+ taArgBase = *pContext->GetEbpLocation();
}
else
{
- taArgBase = pContext->Esp + stackDepth;
+ taArgBase = pContext->SP + stackDepth;
}
// Only synchronized methods and generic code that accesses
@@ -5225,25 +5241,22 @@ OBJECTREF EECodeManager::GetInstance( PREGDISPLAY pContext,
#endif
return NULL;
-#elif defined(USE_GC_INFO_DECODER) && !defined(CROSSGEN_COMPILE)
+#else // !USE_GC_INFO_DECODER
PTR_VOID token = EECodeManager::GetExactGenericsToken(pContext, pCodeInfo);
OBJECTREF oRef = ObjectToOBJECTREF(PTR_Object(dac_cast<TADDR>(token)));
VALIDATEOBJECTREF(oRef);
return oRef;
-#else // !_TARGET_X86_ && !(USE_GC_INFO_DECODER && !CROSSGEN_COMPILE)
- PORTABILITY_ASSERT("Port: EECodeManager::GetInstance is not implemented on this platform.");
- return NULL;
-#endif // _TARGET_X86_
+#endif // USE_GC_INFO_DECODER
}
-
+#endif // !CROSSGEN_COMPILE
GenericParamContextType EECodeManager::GetParamContextType(PREGDISPLAY pContext,
EECodeInfo * pCodeInfo)
{
LIMITED_METHOD_DAC_CONTRACT;
-#ifdef _TARGET_X86_
+#ifndef USE_GC_INFO_DECODER
/* Extract the necessary information from the info block header */
GCInfoToken gcInfoToken = pCodeInfo->GetGCInfoToken();
PTR_VOID methodInfoPtr = pCodeInfo->GetGCInfo();
@@ -5261,16 +5274,16 @@ GenericParamContextType EECodeManager::GetParamContextType(PREGDISPLAY pCont
{
return GENERIC_PARAM_CONTEXT_NONE;
}
- else if (info.genericsContextIsMethodDesc)
+
+ if (info.genericsContextIsMethodDesc)
{
return GENERIC_PARAM_CONTEXT_METHODDESC;
}
- else
- {
- return GENERIC_PARAM_CONTEXT_METHODTABLE;
- }
+
+ return GENERIC_PARAM_CONTEXT_METHODTABLE;
+
// On x86 the generic param context parameter is never this.
-#elif defined(USE_GC_INFO_DECODER)
+#else // !USE_GC_INFO_DECODER
GCInfoToken gcInfoToken = pCodeInfo->GetGCInfoToken();
GcInfoDecoder gcInfoDecoder(
@@ -5292,12 +5305,10 @@ GenericParamContextType EECodeManager::GetParamContextType(PREGDISPLAY pCont
return GENERIC_PARAM_CONTEXT_THIS;
}
return GENERIC_PARAM_CONTEXT_NONE;
-#else // !_TARGET_X86_ && !USE_GC_INFO_DECODER
- PORTABILITY_ASSERT("Port: EECodeManager::GetParamContextType is not implemented on this platform.");
- return GENERIC_PARAM_CONTEXT_NONE;
-#endif // _TARGET_X86_
+#endif // USE_GC_INFO_DECODER
}
+#ifndef CROSSGEN_COMPILE
/*****************************************************************************
*
* Returns the extra argument passed to to shared generic code if it is still alive.
@@ -5309,7 +5320,7 @@ PTR_VOID EECodeManager::GetParamTypeArg(PREGDISPLAY pContext,
{
LIMITED_METHOD_DAC_CONTRACT;
-#ifdef _TARGET_X86_
+#ifndef USE_GC_INFO_DECODER
GCInfoToken gcInfoToken = pCodeInfo->GetGCInfoToken();
PTR_VOID methodInfoPtr = pCodeInfo->GetGCInfo();
unsigned relOffset = pCodeInfo->GetRelOffset();
@@ -5332,16 +5343,14 @@ PTR_VOID EECodeManager::GetParamTypeArg(PREGDISPLAY pContext,
TADDR taParamTypeArg = *PTR_TADDR(fp - GetParamTypeArgOffset(&info));
return PTR_VOID(taParamTypeArg);
-#elif defined(USE_GC_INFO_DECODER) && !defined(CROSSGEN_COMPILE)
+#else // !USE_GC_INFO_DECODER
return EECodeManager::GetExactGenericsToken(pContext, pCodeInfo);
-#else // !_TARGET_X86_ && !(USE_GC_INFO_DECODER && !CROSSGEN_COMPILE)
- PORTABILITY_ASSERT("Port: EECodeManager::GetInstance is not implemented on this platform.");
- return NULL;
-#endif // _TARGET_X86_
+#endif // USE_GC_INFO_DECODER
}
+#endif // !CROSSGEN_COMPILE
-#if defined(WIN64EXCEPTIONS) && !defined(CROSSGEN_COMPILE)
+#if defined(WIN64EXCEPTIONS) && defined(USE_GC_INFO_DECODER) && !defined(CROSSGEN_COMPILE)
/*
Returns the generics token. This is used by GetInstance() and GetParamTypeArg() on WIN64.
*/
@@ -5412,8 +5421,9 @@ PTR_VOID EECodeManager::GetExactGenericsToken(SIZE_T baseStackSlot,
}
-#endif // WIN64EXCEPTIONS / CROSSGEN_COMPILE
+#endif // WIN64EXCEPTIONS && USE_GC_INFO_DECODER && !CROSSGEN_COMPILE
+#ifndef CROSSGEN_COMPILE
/*****************************************************************************/
void * EECodeManager::GetGSCookieAddr(PREGDISPLAY pContext,
@@ -5430,7 +5440,14 @@ void * EECodeManager::GetGSCookieAddr(PREGDISPLAY pContext,
GCInfoToken gcInfoToken = pCodeInfo->GetGCInfoToken();
unsigned relOffset = pCodeInfo->GetRelOffset();
-#if defined(_TARGET_X86_)
+#ifdef WIN64EXCEPTIONS
+ if (pCodeInfo->IsFunclet())
+ {
+ return NULL;
+ }
+#endif
+
+#ifndef USE_GC_INFO_DECODER
CodeManStateBuf * stateBuf = (CodeManStateBuf*)pState->stateBuf;
/* Extract the necessary information from the info block header */
@@ -5450,22 +5467,25 @@ void * EECodeManager::GetGSCookieAddr(PREGDISPLAY pContext,
if (info->ebpFrame)
{
- return PVOID(SIZE_T((DWORD(*pContext->pEbp) - info->gsCookieOffset)));
+ DWORD curEBP;
+
+#ifdef WIN64EXCEPTIONS
+ curEBP = GetCallerSp(pContext) - 2 * 4;
+#else
+ curEBP = *pContext->pEbp;
+#endif
+
+ return PVOID(SIZE_T(curEBP - info->gsCookieOffset));
}
else
{
PTR_CBYTE table = PTR_CBYTE(gcInfoToken.Info) + stateBuf->hdrInfoSize;
unsigned argSize = GetPushedArgSize(info, table, relOffset);
- return PVOID(SIZE_T(pContext->Esp + argSize + info->gsCookieOffset));
- }
-
-#elif defined(USE_GC_INFO_DECODER) && !defined(CROSSGEN_COMPILE)
- if (pCodeInfo->IsFunclet())
- {
- return NULL;
+ return PVOID(SIZE_T(pContext->SP + argSize + info->gsCookieOffset));
}
+#else // !USE_GC_INFO_DECODER
GcInfoDecoder gcInfoDecoder(
gcInfoToken,
DECODE_GS_COOKIE
@@ -5483,12 +5503,11 @@ void * EECodeManager::GetGSCookieAddr(PREGDISPLAY pContext,
}
return NULL;
-#else
- PORTABILITY_WARNING("EECodeManager::GetGSCookieAddr is not implemented on this platform.");
- return NULL;
-#endif
+#endif // USE_GC_INFO_DECODER
}
+#endif // !CROSSGEN_COMPILE
+#ifndef USE_GC_INFO_DECODER
/*****************************************************************************
*
* Returns true if the given IP is in the given method's prolog or epilog.
@@ -5502,7 +5521,6 @@ bool EECodeManager::IsInPrologOrEpilog(DWORD relPCoffset,
GC_NOTRIGGER;
} CONTRACTL_END;
-#ifndef USE_GC_INFO_DECODER
hdrInfo info;
DecodeGCHdrInfo(gcInfoToken, relPCoffset, &info);
@@ -5512,10 +5530,6 @@ bool EECodeManager::IsInPrologOrEpilog(DWORD relPCoffset,
return ((info.prologOffs != hdrInfo::NOT_IN_PROLOG) ||
(info.epilogOffs != hdrInfo::NOT_IN_EPILOG));
-#else // USE_GC_INFO_DECODER
- _ASSERTE(!"@NYI - EECodeManager::IsInPrologOrEpilog (EETwain.cpp)");
- return false;
-#endif // USE_GC_INFO_DECODER
}
/*****************************************************************************
@@ -5531,7 +5545,6 @@ bool EECodeManager::IsInSynchronizedRegion(DWORD relOffset,
GC_NOTRIGGER;
} CONTRACTL_END;
-#ifndef USE_GC_INFO_DECODER
hdrInfo info;
DecodeGCHdrInfo(gcInfoToken, relOffset, &info);
@@ -5548,11 +5561,8 @@ bool EECodeManager::IsInSynchronizedRegion(DWORD relOffset,
// Synchronized methods have at most one epilog. The epilog does not have to be at the end of the method though.
// Everything after the epilog is also in synchronized region.
(info.epilogCnt != 0 && info.syncEpilogStart + info.epilogSize <= relOffset);
-#else // USE_GC_INFO_DECODER
- _ASSERTE(!"@NYI - EECodeManager::IsInSynchronizedRegion (EETwain.cpp)");
- return false;
-#endif // USE_GC_INFO_DECODER
}
+#endif // !USE_GC_INFO_DECODER
/*****************************************************************************
*
@@ -5566,13 +5576,13 @@ size_t EECodeManager::GetFunctionSize(GCInfoToken gcInfoToken)
SUPPORTS_DAC;
} CONTRACTL_END;
-#if defined(_TARGET_X86_)
+#ifndef USE_GC_INFO_DECODER
hdrInfo info;
DecodeGCHdrInfo(gcInfoToken, 0, &info);
return info.methodSize;
-#elif defined(USE_GC_INFO_DECODER)
+#else // !USE_GC_INFO_DECODER
GcInfoDecoder gcInfoDecoder(
gcInfoToken,
@@ -5583,10 +5593,7 @@ size_t EECodeManager::GetFunctionSize(GCInfoToken gcInfoToken)
_ASSERTE( codeLength > 0 );
return codeLength;
-#else // !_TARGET_X86_ && !USE_GC_INFO_DECODER
- PORTABILITY_ASSERT("EECodeManager::GetFunctionSize is not implemented on this platform.");
- return 0;
-#endif
+#endif // USE_GC_INFO_DECODER
}
/*****************************************************************************
@@ -5606,23 +5613,21 @@ ReturnKind EECodeManager::GetReturnKind(GCInfoToken gcInfoToken)
return RT_Illegal;
}
-#if defined(_TARGET_X86_)
+#ifndef USE_GC_INFO_DECODER
hdrInfo info;
DecodeGCHdrInfo(gcInfoToken, 0, &info);
return info.returnKind;
-#elif defined(USE_GC_INFO_DECODER)
+#else // !USE_GC_INFO_DECODER
GcInfoDecoder gcInfoDecoder(gcInfoToken, DECODE_RETURN_KIND);
return gcInfoDecoder.GetReturnKind();
-#else // !_TARGET_X86_ && !USE_GC_INFO_DECODER
- PORTABILITY_ASSERT("EECodeManager::GetReturnKind is not implemented on this platform.");
- return 0;
-#endif
+#endif // USE_GC_INFO_DECODER
}
+#ifndef USE_GC_INFO_DECODER
/*****************************************************************************
*
* Returns the size of the frame of the given function.
@@ -5634,7 +5639,6 @@ unsigned int EECodeManager::GetFrameSize(GCInfoToken gcInfoToken)
GC_NOTRIGGER;
} CONTRACTL_END;
-#ifndef USE_GC_INFO_DECODER
hdrInfo info;
DecodeGCHdrInfo(gcInfoToken, 0, &info);
@@ -5643,26 +5647,19 @@ unsigned int EECodeManager::GetFrameSize(GCInfoToken gcInfoToken)
// in all likelyhood
_ASSERTE(!info.doubleAlign);
return info.stackSize;
-#else // USE_GC_INFO_DECODER
- PORTABILITY_ASSERT("EECodeManager::GetFrameSize is not implemented on this platform.");
- return false;
-#endif // USE_GC_INFO_DECODER
}
+#endif // USE_GC_INFO_DECODER
#ifndef DACCESS_COMPILE
/*****************************************************************************/
+#ifndef WIN64EXCEPTIONS
const BYTE* EECodeManager::GetFinallyReturnAddr(PREGDISPLAY pReg)
{
LIMITED_METHOD_CONTRACT;
-#ifdef _TARGET_X86_
return *(const BYTE**)(size_t)(GetRegdisplaySP(pReg));
-#else
- PORTABILITY_ASSERT("EECodeManager::GetFinallyReturnAddr is not implemented on this platform.");
- return NULL;
-#endif
}
BOOL EECodeManager::IsInFilter(GCInfoToken gcInfoToken,
@@ -5675,8 +5672,6 @@ BOOL EECodeManager::IsInFilter(GCInfoToken gcInfoToken,
GC_NOTRIGGER;
} CONTRACTL_END;
-#ifdef _TARGET_X86_
-
/* Extract the necessary information from the info block header */
hdrInfo info;
@@ -5701,11 +5696,6 @@ BOOL EECodeManager::IsInFilter(GCInfoToken gcInfoToken,
// _ASSERTE(nestingLevel == curNestLevel);
return frameType == FR_FILTER;
-
-#else
- PORTABILITY_ASSERT("EECodeManager::IsInFilter is not implemented on this platform.");
- return FALSE;
-#endif
}
@@ -5718,7 +5708,6 @@ BOOL EECodeManager::LeaveFinally(GCInfoToken gcInfoToken,
GC_NOTRIGGER;
} CONTRACTL_END;
-#ifdef _TARGET_X86_
hdrInfo info;
@@ -5742,10 +5731,6 @@ BOOL EECodeManager::LeaveFinally(GCInfoToken gcInfoToken,
pCtx->Esp += sizeof(TADDR); // Pop the return value off the stack
return TRUE;
-#else
- PORTABILITY_ASSERT("EEJitManager::LeaveFinally is not implemented on this platform.");
- return FALSE;
-#endif
}
void EECodeManager::LeaveCatch(GCInfoToken gcInfoToken,
@@ -5757,8 +5742,6 @@ void EECodeManager::LeaveCatch(GCInfoToken gcInfoToken,
GC_NOTRIGGER;
} CONTRACTL_END;
-#ifdef _TARGET_X86_
-
#ifdef _DEBUG
TADDR baseSP;
DWORD nestingLevel;
@@ -5773,13 +5756,8 @@ void EECodeManager::LeaveCatch(GCInfoToken gcInfoToken,
#endif
return;
-
-#else // !_TARGET_X86_
- PORTABILITY_ASSERT("EECodeManager::LeaveCatch is not implemented on this platform.");
- return;
-#endif // _TARGET_X86_
}
-
+#endif // !WIN64EXCEPTIONS
#endif // #ifndef DACCESS_COMPILE
#ifdef DACCESS_COMPILE
@@ -5792,6 +5770,7 @@ void EECodeManager::EnumMemoryRegions(CLRDataEnumMemoryFlags flags)
#endif // #ifdef DACCESS_COMPILE
+#ifdef _TARGET_X86_
/*
* GetAmbientSP
*
@@ -5814,7 +5793,6 @@ TADDR EECodeManager::GetAmbientSP(PREGDISPLAY pContext,
SUPPORTS_DAC;
} CONTRACTL_END;
-#ifdef _TARGET_X86_
GCInfoToken gcInfoToken = pCodeInfo->GetGCInfoToken();
_ASSERTE(sizeof(CodeManStateBuf) <= sizeof(pState->stateBuf));
@@ -5887,12 +5865,8 @@ TADDR EECodeManager::GetAmbientSP(PREGDISPLAY pContext,
}
return baseSP;
-
-#else // !_TARGET_X86_
- PORTABILITY_ASSERT("EECodeManager::GetAmbientSP is not implemented on this platform.");
- return 0;
-#endif // _TARGET_X86_
}
+#endif // _TARGET_X86_
/*
Get the number of bytes used for stack parameters.
@@ -5923,7 +5897,7 @@ ULONG32 EECodeManager::GetStackParameterSize(EECodeInfo * pCodeInfo)
// We need to subtract 4 here because ESPIncrOnReturn() includes the stack slot containing the return
// address.
- return (ULONG32)(ESPIncrOnReturn(pHdrInfo) - 4);
+ return (ULONG32)::GetStackParameterSize(pHdrInfo);
#else
return 0;
diff --git a/src/vm/eventtrace.cpp b/src/vm/eventtrace.cpp
index cec79214a4..2bdd441a9a 100644
--- a/src/vm/eventtrace.cpp
+++ b/src/vm/eventtrace.cpp
@@ -6853,11 +6853,8 @@ VOID ETW::MethodLog::SendEventsForNgenMethods(Module *pModule, DWORD dwEventOpti
if (!pModule)
return;
- PEImageLayout * pLoadedLayout = pModule->GetFile()->GetLoaded();
- _ASSERTE(pLoadedLayout != NULL);
-
#ifdef FEATURE_READYTORUN
- if (pLoadedLayout->HasReadyToRunHeader())
+ if (pModule->IsReadyToRun())
{
ReadyToRunInfo::MethodIterator mi(pModule->GetReadyToRunInfo());
while (mi.Next())
diff --git a/src/vm/excep.cpp b/src/vm/excep.cpp
index 5a6f7c673f..78a8f0e6eb 100644
--- a/src/vm/excep.cpp
+++ b/src/vm/excep.cpp
@@ -1644,6 +1644,7 @@ const char *TCFStringFromConst(TRY_CATCH_FINALLY tcf)
}
#endif //LOGGING
+#ifndef WIN64EXCEPTIONS
// We're unwinding if we'll return to the EE's code. Otherwise
// we'll return to someplace in the current code. Anywhere outside
// this function is "EE code".
@@ -1675,7 +1676,6 @@ bool FinallyIsUnwinding(EHRangeTreeNode *pNode,
return false;
}
-#ifndef WIN64EXCEPTIONS
BOOL LeaveCatch(ICodeManager* pEECM,
Thread *pThread,
CONTEXT *pCtx,
@@ -1690,7 +1690,6 @@ BOOL LeaveCatch(ICodeManager* pEECM,
}
CONTRACTL_END;
-#ifndef FEATURE_PAL
// We can assert these things here, and skip a call
// to COMPlusCheckForAbort later.
@@ -1708,10 +1707,6 @@ BOOL LeaveCatch(ICodeManager* pEECM,
SetSP(pCtx, (UINT_PTR)esp);
return TRUE;
-#else // FEATURE_PAL
- PORTABILITY_ASSERT("LeaveCatch");
- return FALSE;
-#endif
}
#endif // WIN64EXCEPTIONS
@@ -1926,7 +1921,7 @@ HRESULT IsLegalTransition(Thread *pThread,
case TCF_NONE:
case TCF_TRY:
{
-#if !defined(WIN64EXCEPTIONS)
+#ifndef WIN64EXCEPTIONS
if (!FinallyIsUnwinding(pNode, pEECM, pReg, addrStart))
{
CONTEXT *pFilterCtx = pThread->GetFilterContext();
@@ -1946,14 +1941,14 @@ HRESULT IsLegalTransition(Thread *pThread,
{
return CORDBG_E_CANT_SET_IP_OUT_OF_FINALLY;
}
-#else // _WIN64
+#else // !WIN64EXCEPTIONS
// <NOTE>
// Setting IP out of a non-unwinding finally clause is not supported on WIN64EXCEPTIONS because of funclets.
// This scenario is disabled with approval from VS because it's not considered to be a common user
// scenario.
// </NOTE>
return CORDBG_E_CANT_SET_IP_OUT_OF_FINALLY_ON_WIN64;
-#endif // _WIN64
+#endif // WIN64EXCEPTIONS
break;
}
@@ -7264,11 +7259,13 @@ IsDebuggerFault(EXCEPTION_RECORD *pExceptionRecord,
#ifdef WIN64EXCEPTIONS
+#ifndef _TARGET_X86_
EXTERN_C void JIT_MemSet_End();
EXTERN_C void JIT_MemCpy_End();
EXTERN_C void JIT_WriteBarrier_End();
EXTERN_C void JIT_CheckedWriteBarrier_End();
+#endif // _TARGET_X86_
#if defined(_TARGET_AMD64_) && defined(_DEBUG)
EXTERN_C void JIT_WriteBarrier_Debug();
@@ -7288,11 +7285,13 @@ bool IsIPInMarkedJitHelper(UINT_PTR uControlPc)
#define CHECK_RANGE(name) \
if (GetEEFuncEntryPoint(name) <= uControlPc && uControlPc < GetEEFuncEntryPoint(name##_End)) return true;
+#ifndef _TARGET_X86_
CHECK_RANGE(JIT_MemSet)
CHECK_RANGE(JIT_MemCpy)
CHECK_RANGE(JIT_WriteBarrier)
CHECK_RANGE(JIT_CheckedWriteBarrier)
+#endif // _TARGET_X86_
#if defined(_TARGET_AMD64_) && defined(_DEBUG)
CHECK_RANGE(JIT_WriteBarrier_Debug)
@@ -7314,8 +7313,7 @@ AdjustContextForWriteBarrier(
{
WRAPPER_NO_CONTRACT;
-#ifdef _TARGET_X86_
-
+#if defined(_TARGET_X86_) && !defined(PLATFORM_UNIX)
void* f_IP = (void *)GetIP(pContext);
if (((f_IP >= (void *) JIT_WriteBarrierStart) && (f_IP <= (void *) JIT_WriteBarrierLast)) ||
@@ -7329,11 +7327,8 @@ AdjustContextForWriteBarrier(
// put ESP back to what it was before the call.
SetSP(pContext, PCODE((BYTE*)GetSP(pContext) + sizeof(void*)));
}
-
return FALSE;
-
-#elif defined(WIN64EXCEPTIONS)
-
+#elif defined(WIN64EXCEPTIONS) // _TARGET_X86_ && !PLATFORM_UNIX
void* f_IP = dac_cast<PTR_VOID>(GetIP(pContext));
CONTEXT tempContext;
@@ -7377,7 +7372,7 @@ AdjustContextForWriteBarrier(
// Now we save the address back into the context so that it gets used
// as the faulting address.
SetIP(pContext, ControlPCPostAdjustment);
-#endif // _TARGET_ARM_
+#endif // _TARGET_ARM_ || _TARGET_ARM64_
// Unwind the frame chain - On Win64, this is required since we may handle the managed fault and to do so,
// we will replace the exception context with the managed context and "continue execution" there. Thus, we do not
@@ -7399,13 +7394,10 @@ AdjustContextForWriteBarrier(
}
return FALSE;
-
-#else // ! _X86_ && !WIN64EXCEPTIONS
-
- PORTABILITY_WARNING("AdjustContextForWriteBarrier() not implemented on this platform");
+#else // WIN64EXCEPTIONS
+ PORTABILITY_ASSERT("AdjustContextForWriteBarrier");
return FALSE;
-
-#endif
+#endif // ELSE
}
struct SavedExceptionInfo
@@ -7556,20 +7548,21 @@ void InitSavedExceptionInfo()
void FaultingExceptionFrame::Init(CONTEXT *pContext)
{
WRAPPER_NO_CONTRACT;
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
+#ifdef _TARGET_X86_
CalleeSavedRegisters *pRegs = GetCalleeSavedRegisters();
- pRegs->ebp = pContext->Ebp;
- pRegs->ebx = pContext->Ebx;
- pRegs->esi = pContext->Esi;
- pRegs->edi = pContext->Edi;
+#define CALLEE_SAVED_REGISTER(regname) pRegs->regname = pContext->regname;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
m_ReturnAddress = ::GetIP(pContext);
m_Esp = (DWORD)GetSP(pContext);
-#elif defined(WIN64EXCEPTIONS)
+#else // _TARGET_X86_
+ PORTABILITY_ASSERT("FaultingExceptionFrame::Init");
+#endif // _TARGET_???_ (ELSE)
+#else // !WIN64EXCEPTIONS
m_ReturnAddress = ::GetIP(pContext);
CopyOSContext(&m_ctx, pContext);
-#else
- PORTABILITY_ASSERT("FaultingExceptionFrame::InitAndLink");
-#endif
+#endif // !WIN64EXCEPTIONS
}
//
@@ -8986,11 +8979,13 @@ LONG ReflectionInvocationExceptionFilter(
#else // !(_WIN64 || _TARGET_X86_)
#error Unsupported platform
#endif // _WIN64
-
+
+#ifdef FEATURE_CORRUPTING_EXCEPTIONS
if (pEHTracker->GetCorruptionSeverity() == ProcessCorrupting)
{
EEPolicy::HandleFatalError(COR_E_FAILFAST, reinterpret_cast<UINT_PTR>(pExceptionInfo->ExceptionRecord->ExceptionAddress), NULL, pExceptionInfo);
}
+#endif // FEATURE_CORRUPTING_EXCEPTIONS
}
return ret;
@@ -13111,9 +13106,9 @@ StackWalkAction TAResetStateCallback(CrawlFrame* pCf, void* data)
// there is no more managed code on the stack.
//
// Note: This function should be invoked ONLY during unwind.
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
void ResetThreadAbortState(PTR_Thread pThread, void *pEstablisherFrame)
-#elif defined(WIN64EXCEPTIONS)
+#else
void ResetThreadAbortState(PTR_Thread pThread, CrawlFrame *pCf, StackFrame sfCurrentStackFrame)
#endif
{
@@ -13123,9 +13118,9 @@ void ResetThreadAbortState(PTR_Thread pThread, CrawlFrame *pCf, StackFrame sfCur
GC_NOTRIGGER;
MODE_ANY;
PRECONDITION(pThread != NULL);
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
PRECONDITION(pEstablisherFrame != NULL);
-#elif defined(WIN64EXCEPTIONS)
+#else
PRECONDITION(pCf != NULL);
PRECONDITION(!sfCurrentStackFrame.IsNull());
#endif
@@ -13136,14 +13131,14 @@ void ResetThreadAbortState(PTR_Thread pThread, CrawlFrame *pCf, StackFrame sfCur
if (pThread->IsAbortRequested())
{
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
if (GetNextCOMPlusSEHRecord(static_cast<EXCEPTION_REGISTRATION_RECORD *>(pEstablisherFrame)) == EXCEPTION_CHAIN_END)
{
// Topmost handler and abort requested.
fResetThreadAbortState = TRUE;
LOG((LF_EH, LL_INFO100, "ResetThreadAbortState: Topmost handler resets abort as no more managed code beyond %p.\n", pEstablisherFrame));
}
-#elif defined(WIN64EXCEPTIONS)
+#else // !WIN64EXCEPTIONS
// Get the active exception tracker
PTR_ExceptionTracker pCurEHTracker = pThread->GetExceptionState()->GetCurrentExceptionTracker();
_ASSERTE(pCurEHTracker != NULL);
@@ -13198,9 +13193,7 @@ void ResetThreadAbortState(PTR_Thread pThread, CrawlFrame *pCf, StackFrame sfCur
LOG((LF_EH, LL_INFO100, "ResetThreadAbortState: Resetting thread abort state since there is no more managed code beyond stack frames:\n"));
LOG((LF_EH, LL_INFO100, "sf.SP = %p ", dataCallback.sfSeedCrawlFrame.SP));
}
-#else // WIN64EXCEPTIONS
-#error Unsupported platform
-#endif // WIN64EXCEPTIONS
+#endif // !WIN64EXCEPTIONS
}
if (fResetThreadAbortState)
diff --git a/src/vm/excep.h b/src/vm/excep.h
index 7ef1921593..53fa20160a 100644
--- a/src/vm/excep.h
+++ b/src/vm/excep.h
@@ -88,11 +88,6 @@ struct ThrowCallbackType
MethodDesc * pProfilerNotify; // Context for profiler callbacks -- see COMPlusFrameHandler().
BOOL bReplaceStack; // Used to pass info to SaveStackTrace call
BOOL bSkipLastElement;// Used to pass info to SaveStackTrace call
-#ifndef FEATURE_PAL
- HANDLE hCallerToken;
- HANDLE hImpersonationToken;
- BOOL bImpersonationTokenSet;
-#endif // !FEATURE_PAL
#ifdef _DEBUG
void * pCurrentExceptionRecord;
void * pPrevExceptionRecord;
@@ -116,12 +111,6 @@ struct ThrowCallbackType
pProfilerNotify = NULL;
bReplaceStack = FALSE;
bSkipLastElement = FALSE;
-#ifndef FEATURE_PAL
- hCallerToken = NULL;
- hImpersonationToken = NULL;
- bImpersonationTokenSet = FALSE;
-#endif // !FEATURE_PAL
-
#ifdef _DEBUG
pCurrentExceptionRecord = 0;
pPrevExceptionRecord = 0;
@@ -426,7 +415,7 @@ VOID DECLSPEC_NORETURN RealCOMPlusThrowInvalidCastException(TypeHandle thCastFro
VOID DECLSPEC_NORETURN RealCOMPlusThrowInvalidCastException(OBJECTREF *pObj, TypeHandle thCastTo);
-#ifdef _TARGET_X86_
+#ifndef WIN64EXCEPTIONS
#include "eexcp.h"
#include "exinfo.h"
@@ -465,7 +454,7 @@ struct NestedHandlerExRecord : public FrameHandlerExRecord
}
};
-#endif // _TARGET_X86_
+#endif // !WIN64EXCEPTIONS
#if defined(ENABLE_CONTRACTS_IMPL)
@@ -531,10 +520,6 @@ extern "C" BOOL ExceptionIsOfRightType(TypeHandle clauseType, TypeHandle thrownT
// The stuff below is what works "behind the scenes" of the public macros.
//==========================================================================
-#ifdef _TARGET_X86_
-LPVOID COMPlusEndCatchWorker(Thread *pCurThread);
-EXTERN_C LPVOID STDCALL COMPlusEndCatch(LPVOID ebp, DWORD ebx, DWORD edi, DWORD esi, LPVOID* pRetAddress);
-#endif
// Specify NULL for uTryCatchResumeAddress when not checking for a InducedThreadRedirectAtEndOfCatch
EXTERN_C LPVOID COMPlusCheckForAbort(UINT_PTR uTryCatchResumeAddress = NULL);
@@ -957,9 +942,9 @@ public:
#ifndef DACCESS_COMPILE
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
void ResetThreadAbortState(PTR_Thread pThread, void *pEstablisherFrame);
-#elif defined(WIN64EXCEPTIONS)
+#else
void ResetThreadAbortState(PTR_Thread pThread, CrawlFrame *pCf, StackFrame sfCurrentStackFrame);
#endif
diff --git a/src/vm/exceptionhandling.cpp b/src/vm/exceptionhandling.cpp
index ed155eb998..262d3526eb 100644
--- a/src/vm/exceptionhandling.cpp
+++ b/src/vm/exceptionhandling.cpp
@@ -7,10 +7,6 @@
#include "common.h"
-#ifndef FEATURE_PAL
-#include "securityprincipal.h"
-#endif // !FEATURE_PAL
-
#ifdef WIN64EXCEPTIONS
#include "exceptionhandling.h"
#include "dbginterface.h"
@@ -94,8 +90,8 @@ bool FixNonvolatileRegisters(UINT_PTR uOriginalSP,
MethodDesc * GetUserMethodForILStub(Thread * pThread, UINT_PTR uStubSP, MethodDesc * pILStubMD, Frame ** ppFrameOut);
#ifdef FEATURE_PAL
-BOOL PALAPI HandleHardwareException(PAL_SEHException* ex);
-BOOL PALAPI IsSafeToHandleHardwareException(PCONTEXT contextRecord, PEXCEPTION_RECORD exceptionRecord);
+BOOL HandleHardwareException(PAL_SEHException* ex);
+BOOL IsSafeToHandleHardwareException(PCONTEXT contextRecord, PEXCEPTION_RECORD exceptionRecord);
#endif // FEATURE_PAL
static ExceptionTracker* GetTrackerMemory()
@@ -393,7 +389,7 @@ void ExceptionTracker::UpdateNonvolatileRegisters(CONTEXT *pContextRecord, REGDI
do { \
if (pRegDisplay->pCurrentContextPointers->reg != NULL) \
{ \
- STRESS_LOG3(LF_GCROOTS, LL_INFO100, "Updating reg %p to %p from %p\n", \
+ STRESS_LOG3(LF_GCROOTS, LL_INFO100, "Updating " #reg " %p to %p from %p\n", \
pContextRecord->reg, \
*pRegDisplay->pCurrentContextPointers->reg, \
pRegDisplay->pCurrentContextPointers->reg); \
@@ -409,7 +405,14 @@ void ExceptionTracker::UpdateNonvolatileRegisters(CONTEXT *pContextRecord, REGDI
} \
} while (0)
-#if defined(_TARGET_AMD64_)
+#if defined(_TARGET_X86_)
+
+ UPDATEREG(Ebx);
+ UPDATEREG(Esi);
+ UPDATEREG(Edi);
+ UPDATEREG(Ebp);
+
+#elif defined(_TARGET_AMD64_)
UPDATEREG(Rbx);
UPDATEREG(Rbp);
@@ -1205,12 +1208,9 @@ bool FixNonvolatileRegisters(UINT_PTR uOriginalSP,
CONTRACTL_END;
CONTEXT _ctx = {0};
-#if defined(_TARGET_AMD64_)
- REGDISPLAY regdisp = {0};
-#else
+
// Ctor will initialize it to NULL
REGDISPLAY regdisp;
-#endif // _TARGET_AMD64_
pThread->FillRegDisplay(&regdisp, &_ctx);
@@ -1373,6 +1373,8 @@ void ExceptionTracker::InitializeCrawlFrame(CrawlFrame* pcfThisFrame, Thread* pT
// </ARM and ARM64>
pThread->InitRegDisplay(pcfThisFrame->pRD, pDispatcherContext->ContextRecord, true);
+ bool fAdjustRegdisplayControlPC = false;
+
// The "if" check below is trying to determine when we have a valid current context in DC->ContextRecord and whether, or not,
// RegDisplay needs to be fixed up to set SP and ControlPC to have the values for the current frame for which personality routine
// is invoked.
@@ -1418,7 +1420,6 @@ void ExceptionTracker::InitializeCrawlFrame(CrawlFrame* pcfThisFrame, Thread* pT
// However, we do this *only* when "ControlPCForEHSearch" is the same as "DispatcherContext->ControlPC",
// indicating we are not using the thread-abort reraise loop prevention logic.
//
- bool fAdjustRegdisplayControlPC = false;
if (pDispatcherContext->ControlPc == ControlPCForEHSearch)
{
// Since DispatcherContext->ControlPc is used to initialize the
@@ -1434,7 +1435,9 @@ void ExceptionTracker::InitializeCrawlFrame(CrawlFrame* pcfThisFrame, Thread* pT
// Remove the Thumb bit
ControlPCForEHSearch = ThumbCodeToDataPointer<DWORD_PTR, DWORD_PTR>(ControlPCForEHSearch);
#endif
+#endif // _TARGET_ARM_ || _TARGET_ARM64_
+#if defined(_TARGET_ARM_) || defined(_TARGET_ARM64_) || defined(_TARGET_X86_)
// If the OS indicated that the IP is a callsite, then adjust the ControlPC by decrementing it
// by two. This is done because unwinding at callsite will make ControlPC point to the
// instruction post the callsite. If a protected region ends "at" the callsite, then
@@ -1457,7 +1460,7 @@ void ExceptionTracker::InitializeCrawlFrame(CrawlFrame* pcfThisFrame, Thread* pT
pcfThisFrame->isIPadjusted = true;
}
}
-#endif // _TARGET_ARM_ || _TARGET_ARM64_
+#endif // _TARGET_ARM_ || _TARGET_ARM64_ || _TARGET_X86_
pcfThisFrame->codeInfo.Init(ControlPCForEHSearch);
@@ -1614,7 +1617,7 @@ CLRUnwindStatus ExceptionTracker::ProcessOSExceptionNotification(
ExceptionTracker::InitializeCrawlFrame(&cfThisFrame, pThread, sf, &regdisp, pDispatcherContext, ControlPc, &uMethodStartPC, this);
-#ifdef _TARGET_AMD64_
+#if defined(_TARGET_X86_) || defined(_TARGET_AMD64_)
uCallerSP = EECodeManager::GetCallerSp(cfThisFrame.pRD);
#elif defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
// On ARM & ARM64, the EstablisherFrame is the value of SP at the time a function was called and before it's prolog
@@ -2871,28 +2874,6 @@ CLRUnwindStatus ExceptionTracker::ProcessManagedCallFrame(
// we probably don't want to be so strict in not calling handlers.
if (! IsStackOverflowException())
{
-#ifndef FEATURE_PAL
- // Check for any impersonation on the frame and save that for use during EH filter callbacks
- OBJECTREF* pRefSecDesc = pcfThisFrame->GetAddrOfSecurityObject();
- if (pRefSecDesc != NULL && *pRefSecDesc != NULL)
- {
- GCX_COOP();
- FRAMESECDESCREF fsdRef = (FRAMESECDESCREF)*pRefSecDesc;
- if (fsdRef->GetCallerToken() != NULL)
- {
- m_hCallerToken = fsdRef->GetCallerToken();
- STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallback. Found non-NULL callertoken on FSD:%d\n",m_hCallerToken);
- if (!m_ExceptionFlags.ImpersonationTokenSet())
- {
- m_hImpersonationToken = fsdRef->GetImpersonationToken();
- STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallback. Found non-NULL impersonationtoken on FSD:%d\n",m_hImpersonationToken);
- m_ExceptionFlags.SetImpersonationTokenSet();
- }
- }
- }
- BOOL impersonating = FALSE;
-#endif // !FEATURE_PAL
-
// Save the current EHClause Index and Establisher of the clause post which
// ThreadAbort was raised. This is done an exception handled inside a filter
// reset the state that was setup before the filter was invoked.
@@ -2905,16 +2886,6 @@ CLRUnwindStatus ExceptionTracker::ProcessManagedCallFrame(
EX_TRY
{
-#ifndef FEATURE_PAL
- if (m_hCallerToken != NULL)
- {
- STRESS_LOG1(LF_EH, LL_INFO100, "About to call filter with hCallerToken = %d\n",m_hCallerToken);
- // CLR_ImpersonateLoggedOnUser fails fast on error
- COMPrincipal::CLR_ImpersonateLoggedOnUser(m_hCallerToken);
- impersonating = TRUE;
- }
-#endif // !FEATURE_PAL
-
// We want to call filters even if the thread is aborting, so suppress abort
// checks while the filter runs.
ThreadPreventAsyncHolder preventAbort(TRUE);
@@ -2944,29 +2915,10 @@ CLRUnwindStatus ExceptionTracker::ProcessManagedCallFrame(
GCX_COOP();
dwResult = CallHandler(dwFilterStartPC, sf, &EHClause, pMD, Filter ARM_ARG(pCurRegDisplay->pCallerContext) ARM64_ARG(pCurRegDisplay->pCallerContext));
}
-
-#ifndef FEATURE_PAL
- if (impersonating)
- {
- STRESS_LOG1(LF_EH, LL_INFO100, "After calling filter, resetting to hImpersonationToken = %d\n",m_hImpersonationToken);
- // CLR_ImpersonateLoggedOnUser fails fast on error
- COMPrincipal::CLR_ImpersonateLoggedOnUser(m_hImpersonationToken);
- impersonating = FALSE;
- }
-#endif // !FEATURE_PAL
}
EX_CATCH
{
// We had an exception in filter invocation that remained unhandled.
-#ifndef FEATURE_PAL
- if (impersonating)
- {
- STRESS_LOG1(LF_EH, LL_INFO100, "Filter threw exception. In Catch. Resetting to hImpersonationToken = %d\n",m_hImpersonationToken);
- // CLR_ImpersonateLoggedOnUser fails fast on error
- COMPrincipal::CLR_ImpersonateLoggedOnUser(m_hImpersonationToken);
- impersonating = FALSE;
- }
-#endif // !FEATURE_PAL
// Sync managed exception state, for the managed thread, based upon the active exception tracker.
pThread->SyncManagedExceptionState(false);
@@ -4385,7 +4337,7 @@ VOID UnwindManagedExceptionPass2(PAL_SEHException& ex, CONTEXT* unwindStartConte
dispatcherContext.FunctionEntry = codeInfo.GetFunctionEntry();
dispatcherContext.ControlPc = controlPc;
dispatcherContext.ImageBase = codeInfo.GetModuleBase();
-#if defined(_TARGET_ARM_)
+#if defined(_TARGET_ARM_) || defined(_TARGET_X86_)
dispatcherContext.ControlPcIsUnwound = !!(currentFrameContext->ContextFlags & CONTEXT_UNWOUND_TO_CALL);
#endif
// Check whether we have a function table entry for the current controlPC.
@@ -4536,7 +4488,7 @@ VOID DECLSPEC_NORETURN UnwindManagedExceptionPass1(PAL_SEHException& ex, CONTEXT
dispatcherContext.FunctionEntry = codeInfo.GetFunctionEntry();
dispatcherContext.ControlPc = controlPc;
dispatcherContext.ImageBase = codeInfo.GetModuleBase();
-#if defined(_TARGET_ARM_)
+#if defined(_TARGET_ARM_) || defined(_TARGET_X86_)
dispatcherContext.ControlPcIsUnwound = !!(frameContext->ContextFlags & CONTEXT_UNWOUND_TO_CALL);
#endif
@@ -4717,6 +4669,7 @@ VOID DECLSPEC_NORETURN DispatchManagedException(PAL_SEHException& ex, bool isHar
ThreadExceptionState * pCurTES = pCurThread->GetExceptionState();
_ASSERTE(pCurTES != NULL);
+#ifdef FEATURE_CORRUPTING_EXCEPTIONS
ExceptionTracker* pEHTracker = pCurTES->GetCurrentExceptionTracker();
if (pEHTracker == NULL)
{
@@ -4728,12 +4681,13 @@ VOID DECLSPEC_NORETURN DispatchManagedException(PAL_SEHException& ex, bool isHar
pCurTES->SetLastActiveExceptionCorruptionSeverity(severity);
}
+#endif // FEATURE_CORRUPTING_EXCEPTIONS
}
throw std::move(ex);
}
-#ifdef _AMD64_
+#if defined(_TARGET_AMD64_) || defined(_TARGET_X86_)
/*++
Function :
@@ -4750,8 +4704,29 @@ Return value :
--*/
VOID* GetRegisterAddressByIndex(PCONTEXT pContext, UINT index)
{
+#if defined(_TARGET_AMD64_)
_ASSERTE(index < 16);
return &((&pContext->Rax)[index]);
+#elif defined(_TARGET_X86_)
+ _ASSERTE(index < 8);
+
+ static const SIZE_T OFFSET_OF_REGISTERS[] =
+ {
+ offsetof(CONTEXT, Eax),
+ offsetof(CONTEXT, Ecx),
+ offsetof(CONTEXT, Edx),
+ offsetof(CONTEXT, Ebx),
+ offsetof(CONTEXT, Esp),
+ offsetof(CONTEXT, Ebp),
+ offsetof(CONTEXT, Esi),
+ offsetof(CONTEXT, Edi),
+ };
+
+ return (VOID*)(PBYTE(pContext) + OFFSET_OF_REGISTERS[index]);
+#else
+ PORTABILITY_ASSERT("GetRegisterAddressByIndex");
+ return NULL;
+#endif
}
/*++
@@ -5023,7 +4998,7 @@ Return value :
--*/
bool IsDivByZeroAnIntegerOverflow(PCONTEXT pContext)
{
- BYTE * ip = (BYTE*)pContext->Rip;
+ BYTE * ip = (BYTE *)GetIP(pContext);
BYTE rex = 0;
bool hasOpSizePrefix = false;
@@ -5055,7 +5030,7 @@ bool IsDivByZeroAnIntegerOverflow(PCONTEXT pContext)
// must have been an overflow.
return divisor != 0;
}
-#endif //_AMD64_
+#endif // _TARGET_AMD64_ || _TARGET_X86_
BOOL IsSafeToCallExecutionManager()
{
@@ -5073,7 +5048,7 @@ BOOL IsSafeToCallExecutionManager()
GCStress<cfg_instr_ngen>::IsEnabled();
}
-BOOL PALAPI IsSafeToHandleHardwareException(PCONTEXT contextRecord, PEXCEPTION_RECORD exceptionRecord)
+BOOL IsSafeToHandleHardwareException(PCONTEXT contextRecord, PEXCEPTION_RECORD exceptionRecord)
{
PCODE controlPc = GetIP(contextRecord);
return g_fEEStarted && (
@@ -5086,7 +5061,7 @@ BOOL PALAPI IsSafeToHandleHardwareException(PCONTEXT contextRecord, PEXCEPTION_R
IsIPInMarkedJitHelper(controlPc));
}
-BOOL PALAPI HandleHardwareException(PAL_SEHException* ex)
+BOOL HandleHardwareException(PAL_SEHException* ex)
{
_ASSERTE(IsSafeToHandleHardwareException(ex->GetContextRecord(), ex->GetExceptionRecord()));
@@ -5102,7 +5077,7 @@ BOOL PALAPI HandleHardwareException(PAL_SEHException* ex)
return TRUE;
}
-#ifdef _AMD64_
+#if defined(_TARGET_AMD64_) || defined(_TARGET_X86_)
// It is possible that an overflow was mapped to a divide-by-zero exception.
// This happens when we try to divide the maximum negative value of a
// signed integer with -1.
@@ -5115,7 +5090,7 @@ BOOL PALAPI HandleHardwareException(PAL_SEHException* ex)
// The exception was an integer overflow, so augment the exception code.
ex->GetExceptionRecord()->ExceptionCode = EXCEPTION_INT_OVERFLOW;
}
-#endif //_AMD64_
+#endif // _TARGET_AMD64_ || _TARGET_X86_
// Create frame necessary for the exception handling
FrameWithCookie<FaultingExceptionFrame> fef;
@@ -7074,8 +7049,10 @@ void ExceptionTracker::ResetThreadAbortStatus(PTR_Thread pThread, CrawlFrame *pC
GC_NOTRIGGER;
MODE_ANY;
PRECONDITION(pThread != NULL);
- WIN64_ONLY(PRECONDITION(pCf != NULL);)
- WIN64_ONLY(PRECONDITION(!sfCurrentStackFrame.IsNull());)
+#ifdef WIN64EXCEPTIONS
+ PRECONDITION(pCf != NULL);
+ PRECONDITION(!sfCurrentStackFrame.IsNull());
+#endif // WIN64EXCEPTIONS
}
CONTRACTL_END;
diff --git a/src/vm/exceptionhandling.h b/src/vm/exceptionhandling.h
index 340cbc0d6d..8b675d596d 100644
--- a/src/vm/exceptionhandling.h
+++ b/src/vm/exceptionhandling.h
@@ -69,9 +69,7 @@ public:
ExceptionTracker() :
m_pThread(NULL),
- m_hThrowable(NULL),
- m_hCallerToken(NULL),
- m_hImpersonationToken(NULL)
+ m_hThrowable(NULL)
{
#ifndef DACCESS_COMPILE
m_StackTraceInfo.Init();
@@ -125,9 +123,7 @@ public:
// these members were added for resume frame processing
m_pClauseForCatchToken(NULL),
// end resume frame members
- m_ExceptionCode(pExceptionRecord->ExceptionCode),
- m_hCallerToken(NULL),
- m_hImpersonationToken(NULL)
+ m_ExceptionCode(pExceptionRecord->ExceptionCode)
{
m_ptrs.ExceptionRecord = pExceptionRecord;
m_ptrs.ContextRecord = pContextRecord;
@@ -749,10 +745,6 @@ private: ;
DWORD m_ExceptionCode;
PTR_Frame m_pLimitFrame;
-
- // Thread Security State
- HANDLE m_hCallerToken;
- HANDLE m_hImpersonationToken;
#ifdef DEBUGGING_SUPPORTED
//
diff --git a/src/vm/exinfo.cpp b/src/vm/exinfo.cpp
index 9e07cebaf3..1ae011e85a 100644
--- a/src/vm/exinfo.cpp
+++ b/src/vm/exinfo.cpp
@@ -9,6 +9,7 @@
#include "exinfo.h"
#include "dbginterface.h"
+#ifndef WIN64EXCEPTIONS
#ifndef DACCESS_COMPILE
//
// Destroy the handle within an ExInfo. This respects the fact that we can have preallocated global handles living
@@ -312,3 +313,4 @@ void ExInfo::SetExceptionCode(const EXCEPTION_RECORD *pCER)
DacError(E_UNEXPECTED);
#endif // !DACCESS_COMPILE
}
+#endif // !WIN64EXCEPTIONS
diff --git a/src/vm/exstate.cpp b/src/vm/exstate.cpp
index bde71db884..29c7a063f5 100644
--- a/src/vm/exstate.cpp
+++ b/src/vm/exstate.cpp
@@ -498,7 +498,7 @@ BOOL DebuggerExState::SetDebuggerInterceptInfo(IJitManager *pJitManager,
int nestingLevel = 0;
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
//
// Get the SEH frame that covers this location on the stack. Note: we pass a skip count of 1. We know that when
// this is called, there is a nested exception handler on pThread's stack that is only there during exception
@@ -517,11 +517,7 @@ BOOL DebuggerExState::SetDebuggerInterceptInfo(IJitManager *pJitManager,
nestingLevel = ComputeEnclosingHandlerNestingLevel(pJitManager,
methodToken,
natOffset);
-#elif !defined(WIN64EXCEPTIONS)
- // !_TARGET_X86_ && !WIN64EXCEPTIONS
- PORTABILITY_ASSERT("SetDebuggerInterceptInfo() (ExState.cpp) - continuable exceptions NYI\n");
- return FALSE;
-#endif // !_TARGET_X86_
+#endif // !WIN64EXCEPTIONS
//
// These values will override the normal information used by the EH subsystem to handle the exception.
diff --git a/src/vm/exstatecommon.h b/src/vm/exstatecommon.h
index a0f5a0bb3d..270293669d 100644
--- a/src/vm/exstatecommon.h
+++ b/src/vm/exstatecommon.h
@@ -51,10 +51,10 @@ public:
m_pDebuggerContext = NULL;
m_pDebuggerInterceptNativeOffset = 0;
+ #ifndef WIN64EXCEPTIONS
// x86-specific fields
- #if defined(_TARGET_X86_)
m_pDebuggerInterceptFrame = EXCEPTION_CHAIN_END;
- #endif // defined(_TARGET_X86_)
+ #endif // !WIN64EXCEPTIONS
m_dDebuggerInterceptHandlerDepth = 0;
}
@@ -133,9 +133,9 @@ public:
//
void GetDebuggerInterceptInfo(
- #if defined(_TARGET_X86_)
+ #ifndef WIN64EXCEPTIONS
PEXCEPTION_REGISTRATION_RECORD *pEstablisherFrame,
- #endif // _TARGET_X86_
+ #endif // !WIN64EXCEPTIONS
MethodDesc **ppFunc,
int *pdHandler,
BYTE **ppStack,
@@ -144,12 +144,12 @@ public:
{
LIMITED_METHOD_CONTRACT;
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
if (pEstablisherFrame != NULL)
{
*pEstablisherFrame = m_pDebuggerInterceptFrame;
}
-#endif // _TARGET_X86_
+#endif // !WIN64EXCEPTIONS
if (ppFunc != NULL)
{
@@ -195,10 +195,10 @@ private:
ULONG_PTR m_pDebuggerInterceptNativeOffset;
// The remaining fields are only used on x86.
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
// the exception registration record covering the stack range containing the interception point
PEXCEPTION_REGISTRATION_RECORD m_pDebuggerInterceptFrame;
-#endif // defined(_TARGET_X86_)
+#endif // !WIN64EXCEPTIONS
// the nesting level at which we want to resume execution
int m_dDebuggerInterceptHandlerDepth;
@@ -380,10 +380,6 @@ public:
void SetDebuggerInterceptInfo() { LIMITED_METHOD_DAC_CONTRACT; AssertIfReadOnly(); m_flags |= Ex_DebuggerInterceptInfo; }
#endif
- BOOL ImpersonationTokenSet() { LIMITED_METHOD_CONTRACT; return m_flags & Ex_ImpersonationTokenSet; }
- void SetImpersonationTokenSet() { LIMITED_METHOD_CONTRACT; AssertIfReadOnly(); m_flags |= Ex_ImpersonationTokenSet; }
- void ResetImpersonationTokenSet() { LIMITED_METHOD_CONTRACT; AssertIfReadOnly(); m_flags &= ~Ex_ImpersonationTokenSet; }
-
BOOL WasThrownByUs() { LIMITED_METHOD_CONTRACT; return m_flags & Ex_WasThrownByUs; }
void SetWasThrownByUs() { LIMITED_METHOD_CONTRACT; AssertIfReadOnly(); m_flags |= Ex_WasThrownByUs; }
void ResetWasThrownByUs() { LIMITED_METHOD_CONTRACT; AssertIfReadOnly(); m_flags &= ~Ex_WasThrownByUs; }
@@ -410,7 +406,7 @@ private:
Ex_DebuggerInterceptNotPossible = 0x00000400,
Ex_IsUnhandled = 0x00000800,
#endif
- Ex_ImpersonationTokenSet = 0x00001000,
+ // Unused = 0x00001000,
Ex_WasThrownByUs = 0x00002000,
diff --git a/src/vm/finalizerthread.cpp b/src/vm/finalizerthread.cpp
index 2f72b07957..4c0f5acbf9 100644
--- a/src/vm/finalizerthread.cpp
+++ b/src/vm/finalizerthread.cpp
@@ -1281,14 +1281,14 @@ BOOL FinalizerThread::FinalizerThreadWatchDog()
pThread->EnablePreemptiveGC();
}
- g_fFinalizerRunOnShutDown = TRUE;
+ GCHeapUtilities::GetGCHeap()->SetFinalizeRunOnShutdown(true);
// Wait for finalizer thread to finish finalizing all objects.
hEventShutDownToFinalizer->Set();
BOOL fTimeOut = FinalizerThreadWatchDogHelper();
if (!fTimeOut) {
- g_fFinalizerRunOnShutDown = FALSE;
+ GCHeapUtilities::GetGCHeap()->SetFinalizeRunOnShutdown(false);
}
// Can not call ExitProcess here if we are in a hosting environment.
@@ -1313,7 +1313,8 @@ BOOL FinalizerThread::FinalizerThreadWatchDog()
{
pThread->EnablePreemptiveGC();
}
- g_fFinalizerRunOnShutDown = TRUE;
+
+ GCHeapUtilities::GetGCHeap()->SetFinalizeRunOnShutdown(true);
hEventShutDownToFinalizer->Set();
DWORD status = WAIT_OBJECT_0;
diff --git a/src/vm/frames.cpp b/src/vm/frames.cpp
index 04a1815cf3..ae3cfdbc75 100644
--- a/src/vm/frames.cpp
+++ b/src/vm/frames.cpp
@@ -2006,8 +2006,8 @@ BOOL MulticastFrame::TraceFrame(Thread *thread, BOOL fromPatch,
#if defined(_TARGET_X86_)
// At this point the counter hasn't been incremented yet.
- delegateCount = *regs->pEdi + 1;
- pbDel = *(BYTE **)( (size_t)*(regs->pEsi) + GetOffsetOfTransitionBlock() + ArgIterator::GetThisOffset());
+ delegateCount = *regs->GetEdiLocation() + 1;
+ pbDel = *(BYTE **)( (size_t)*regs->GetEsiLocation() + GetOffsetOfTransitionBlock() + ArgIterator::GetThisOffset());
#elif defined(_TARGET_AMD64_)
// At this point the counter hasn't been incremented yet.
delegateCount = (int)regs->pCurrentContext->Rdi + 1;
diff --git a/src/vm/frames.h b/src/vm/frames.h
index 91ab3c3e5f..e37f980b9f 100644
--- a/src/vm/frames.h
+++ b/src/vm/frames.h
@@ -1114,17 +1114,19 @@ class FaultingExceptionFrame : public Frame
{
friend class CheckAsmOffsets;
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
+#ifdef _TARGET_X86_
DWORD m_Esp;
CalleeSavedRegisters m_regs;
TADDR m_ReturnAddress;
-#endif
-
-#ifdef WIN64EXCEPTIONS
+#else // _TARGET_X86_
+ #error "Unsupported architecture"
+#endif // _TARGET_X86_
+#else // WIN64EXCEPTIONS
BOOL m_fFilterExecuted; // Flag for FirstCallToHandler
TADDR m_ReturnAddress;
T_CONTEXT m_ctx;
-#endif // WIN64EXCEPTIONS
+#endif // !WIN64EXCEPTIONS
VPTR_VTABLE_CLASS(FaultingExceptionFrame, Frame)
@@ -1156,13 +1158,17 @@ public:
return FRAME_ATTR_EXCEPTION | FRAME_ATTR_FAULTED;
}
-#if defined(_TARGET_X86_)
+#ifndef WIN64EXCEPTIONS
CalleeSavedRegisters *GetCalleeSavedRegisters()
{
+#ifdef _TARGET_X86_
LIMITED_METHOD_DAC_CONTRACT;
return &m_regs;
+#else
+ PORTABILITY_ASSERT("GetCalleeSavedRegisters");
+#endif // _TARGET_X86_
}
-#endif
+#endif // WIN64EXCEPTIONS
#ifdef WIN64EXCEPTIONS
T_CONTEXT *GetExceptionContext ()
diff --git a/src/vm/gccover.cpp b/src/vm/gccover.cpp
index d5e7b60d1a..02bb0de5e0 100644
--- a/src/vm/gccover.cpp
+++ b/src/vm/gccover.cpp
@@ -1565,10 +1565,10 @@ void DoGcStress (PCONTEXT regs, MethodDesc *pMD)
_ASSERTE(pThread->PreemptiveGCDisabled()); // Epilogs should be in cooperative mode, no GC can happen right now.
bool gcHappened = gcCover->gcCount != GCHeapUtilities::GetGCHeap()->GetGcCount();
- checkAndUpdateReg(gcCover->callerRegs.Edi, *regDisp.pEdi, gcHappened);
- checkAndUpdateReg(gcCover->callerRegs.Esi, *regDisp.pEsi, gcHappened);
- checkAndUpdateReg(gcCover->callerRegs.Ebx, *regDisp.pEbx, gcHappened);
- checkAndUpdateReg(gcCover->callerRegs.Ebp, *regDisp.pEbp, gcHappened);
+ checkAndUpdateReg(gcCover->callerRegs.Edi, *regDisp.GetEdiLocation(), gcHappened);
+ checkAndUpdateReg(gcCover->callerRegs.Esi, *regDisp.GetEsiLocation(), gcHappened);
+ checkAndUpdateReg(gcCover->callerRegs.Ebx, *regDisp.GetEbxLocation(), gcHappened);
+ checkAndUpdateReg(gcCover->callerRegs.Ebp, *regDisp.GetEbpLocation(), gcHappened);
gcCover->gcCount = GCHeapUtilities::GetGCHeap()->GetGcCount();
diff --git a/src/vm/gcenv.ee.cpp b/src/vm/gcenv.ee.cpp
index 3be8384b3d..61d06421ad 100644
--- a/src/vm/gcenv.ee.cpp
+++ b/src/vm/gcenv.ee.cpp
@@ -204,6 +204,7 @@ bool FindFirstInterruptiblePointStateCB(
// the end is exclusive). Return -1 if no such point exists.
unsigned FindFirstInterruptiblePoint(CrawlFrame* pCF, unsigned offs, unsigned endOffs)
{
+#ifdef USE_GC_INFO_DECODER
GCInfoToken gcInfoToken = pCF->GetGCInfoToken();
GcInfoDecoder gcInfoDecoder(gcInfoToken, DECODE_FOR_RANGES_CALLBACK);
@@ -215,6 +216,10 @@ unsigned FindFirstInterruptiblePoint(CrawlFrame* pCF, unsigned offs, unsigned en
gcInfoDecoder.EnumerateInterruptibleRanges(&FindFirstInterruptiblePointStateCB, &state);
return state.returnOffs;
+#else
+ PORTABILITY_ASSERT("FindFirstInterruptiblePoint");
+ return -1;
+#endif // USE_GC_INFO_DECODER
}
#endif // WIN64EXCEPTIONS
@@ -283,7 +288,7 @@ StackWalkAction GcStackCrawlCallBack(CrawlFrame* pCF, VOID* pData)
#endif // _DEBUG
DWORD relOffsetOverride = NO_OVERRIDE_OFFSET;
-#if defined(WIN64EXCEPTIONS)
+#if defined(WIN64EXCEPTIONS) && defined(USE_GC_INFO_DECODER)
if (pCF->ShouldParentToFuncletUseUnwindTargetLocationForGCReporting())
{
GCInfoToken gcInfoToken = pCF->GetGCInfoToken();
@@ -313,7 +318,7 @@ StackWalkAction GcStackCrawlCallBack(CrawlFrame* pCF, VOID* pData)
}
}
-#endif // WIN64EXCEPTIONS
+#endif // WIN64EXCEPTIONS && USE_GC_INFO_DECODER
pCM->EnumGcRefs(pCF->GetRegisterSet(),
pCF->GetCodeInfo(),
@@ -1226,6 +1231,14 @@ void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args)
assert(args->lowest_address != nullptr);
assert(args->highest_address != nullptr);
g_card_table = args->card_table;
+#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+ if (args->write_watch_table != nullptr)
+ {
+ assert(args->is_runtime_suspended);
+ g_sw_ww_table = args->write_watch_table;
+ }
+#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+
::StompWriteBarrierResize(args->is_runtime_suspended, args->requires_upper_bounds_check);
// We need to make sure that other threads executing checked write barriers
@@ -1241,10 +1254,10 @@ void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args)
return;
case WriteBarrierOp::StompEphemeral:
// StompEphemeral requires a new ephemeral low and a new ephemeral high
- assert(args->ephemeral_lo != nullptr);
- assert(args->ephemeral_hi != nullptr);
- g_ephemeral_low = args->ephemeral_lo;
- g_ephemeral_high = args->ephemeral_hi;
+ assert(args->ephemeral_low != nullptr);
+ assert(args->ephemeral_high != nullptr);
+ g_ephemeral_low = args->ephemeral_low;
+ g_ephemeral_high = args->ephemeral_high;
::StompWriteBarrierEphemeral(args->is_runtime_suspended);
return;
case WriteBarrierOp::Initialize:
@@ -1255,6 +1268,8 @@ void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args)
assert(args->card_table != nullptr);
assert(args->lowest_address != nullptr);
assert(args->highest_address != nullptr);
+ assert(args->ephemeral_low != nullptr);
+ assert(args->ephemeral_high != nullptr);
assert(args->is_runtime_suspended && "the runtime must be suspended here!");
assert(!args->requires_upper_bounds_check && "the ephemeral generation must be at the top of the heap!");
@@ -1263,8 +1278,41 @@ void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args)
g_lowest_address = args->lowest_address;
VolatileStore(&g_highest_address, args->highest_address);
::StompWriteBarrierResize(true, false);
+
+ // g_ephemeral_low/high aren't needed for the write barrier stomp, but they
+ // are needed in other places.
+ g_ephemeral_low = args->ephemeral_low;
+ g_ephemeral_high = args->ephemeral_high;
+ return;
+ case WriteBarrierOp::SwitchToWriteWatch:
+#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+ assert(args->write_watch_table != nullptr);
+ assert(args->is_runtime_suspended && "the runtime must be suspended here!");
+ g_sw_ww_table = args->write_watch_table;
+ g_sw_ww_enabled_for_gc_heap = true;
+ ::SwitchToWriteWatchBarrier(true);
+#else
+ assert(!"should never be called without FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP");
+#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+ return;
+ case WriteBarrierOp::SwitchToNonWriteWatch:
+#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+ assert(args->is_runtime_suspended && "the runtime must be suspended here!");
+ g_sw_ww_enabled_for_gc_heap = false;
+ ::SwitchToNonWriteWatchBarrier(true);
+#else
+ assert(!"should never be called without FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP");
+#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
return;
default:
assert(!"unknown WriteBarrierOp enum");
}
}
+
+void GCToEEInterface::EnableFinalization(bool foundFinalizers)
+{
+ if (foundFinalizers || FinalizerThread::HaveExtraWorkForFinalizer())
+ {
+ FinalizerThread::EnableFinalization();
+ }
+}
diff --git a/src/vm/gcenv.ee.h b/src/vm/gcenv.ee.h
index f4312217ec..9aa3e59e36 100644
--- a/src/vm/gcenv.ee.h
+++ b/src/vm/gcenv.ee.h
@@ -42,6 +42,8 @@ public:
void DiagWalkLOHSurvivors(void* gcContext);
void DiagWalkBGCSurvivors(void* gcContext);
void StompWriteBarrier(WriteBarrierParameters* args);
+
+ void EnableFinalization(bool foundFinalizers);
};
#endif // FEATURE_STANDALONE_GC
diff --git a/src/vm/gcenv.h b/src/vm/gcenv.h
index ad5baa262e..2e23b270b5 100644
--- a/src/vm/gcenv.h
+++ b/src/vm/gcenv.h
@@ -51,8 +51,6 @@
#include "gcenv.interlocked.h"
#include "gcenv.interlocked.inl"
-#include "../gc/softwarewritewatch.h"
-
namespace ETW
{
typedef enum _GC_ROOT_KIND {
diff --git a/src/vm/gcheaputilities.cpp b/src/vm/gcheaputilities.cpp
index ac24fa34ce..91f259d275 100644
--- a/src/vm/gcheaputilities.cpp
+++ b/src/vm/gcheaputilities.cpp
@@ -16,4 +16,11 @@ uint8_t* g_ephemeral_low = (uint8_t*)1;
uint8_t* g_ephemeral_high = (uint8_t*)~0;
// This is the global GC heap, maintained by the VM.
-GPTR_IMPL(IGCHeap, g_pGCHeap); \ No newline at end of file
+GPTR_IMPL(IGCHeap, g_pGCHeap);
+
+#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+
+uint8_t* g_sw_ww_table = nullptr;
+bool g_sw_ww_enabled_for_gc_heap = false;
+
+#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP \ No newline at end of file
diff --git a/src/vm/gcheaputilities.h b/src/vm/gcheaputilities.h
index e5883fc919..e76a21173c 100644
--- a/src/vm/gcheaputilities.h
+++ b/src/vm/gcheaputilities.h
@@ -10,6 +10,31 @@
// The singular heap instance.
GPTR_DECL(IGCHeap, g_pGCHeap);
+#ifndef DACCESS_COMPILE
+extern "C" {
+#endif // !DACCESS_COMPILE
+GPTR_DECL(uint8_t,g_lowest_address);
+GPTR_DECL(uint8_t,g_highest_address);
+GPTR_DECL(uint32_t,g_card_table);
+#ifndef DACCESS_COMPILE
+}
+#endif // !DACCESS_COMPILE
+
+extern "C" uint8_t* g_ephemeral_low;
+extern "C" uint8_t* g_ephemeral_high;
+
+#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+
+// Table containing the dirty state. This table is translated to exclude the lowest address it represents, see
+// TranslateTableToExcludeHeapStartAddress.
+extern "C" uint8_t *g_sw_ww_table;
+
+// Write watch may be disabled when it is not needed (between GCs for instance). This indicates whether it is enabled.
+extern "C" bool g_sw_ww_enabled_for_gc_heap;
+
+#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+
+
// GCHeapUtilities provides a number of static methods
// that operate on the global heap instance. It can't be
// instantiated.
@@ -108,22 +133,74 @@ public:
return IGCHeap::maxGeneration;
}
+#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+
+ // Returns True if software write watch is currently enabled for the GC Heap,
+ // or False if it is not.
+ inline static bool SoftwareWriteWatchIsEnabled()
+ {
+ WRAPPER_NO_CONTRACT;
+
+ return g_sw_ww_enabled_for_gc_heap;
+ }
+
+ // In accordance with the SoftwareWriteWatch scheme, marks a given address as
+ // "dirty" (e.g. has been written to).
+ inline static void SoftwareWriteWatchSetDirty(void* address, size_t write_size)
+ {
+ LIMITED_METHOD_CONTRACT;
+
+ // We presumably have just written something to this address, so it can't be null.
+ assert(address != nullptr);
+
+ // The implementation is limited to writes of a pointer size or less. Writes larger
+ // than pointer size may cross page boundaries and would require us to potentially
+ // set more than one entry in the SWW table, which can't be done atomically under
+ // the current scheme.
+ assert(write_size <= sizeof(void*));
+
+ size_t table_byte_index = reinterpret_cast<size_t>(address) >> SOFTWARE_WRITE_WATCH_AddressToTableByteIndexShift;
+
+ // The table byte index that we calculate for the address should be the same as the one
+ // calculated for a pointer to the end of the written region. If this were not the case,
+ // this write crossed a boundary and would dirty two pages.
+ uint8_t* end_of_write_ptr = reinterpret_cast<uint8_t*>(address) + (write_size - 1);
+ assert(table_byte_index == reinterpret_cast<size_t>(end_of_write_ptr) >> SOFTWARE_WRITE_WATCH_AddressToTableByteIndexShift);
+ uint8_t* table_address = &g_sw_ww_table[table_byte_index];
+ if (*table_address == 0)
+ {
+ *table_address = 0xFF;
+ }
+ }
+
+ // In accordance with the SoftwareWriteWatch scheme, marks a range of addresses
+ // as dirty, starting at the given address and with the given length.
+ inline static void SoftwareWriteWatchSetDirtyRegion(void* address, size_t length)
+ {
+ LIMITED_METHOD_CONTRACT;
+
+ // We presumably have just memcopied something to this address, so it can't be null.
+ assert(address != nullptr);
+
+ // The "base index" is the first index in the SWW table that covers the target
+ // region of memory.
+ size_t base_index = reinterpret_cast<size_t>(address) >> SOFTWARE_WRITE_WATCH_AddressToTableByteIndexShift;
+
+ // The "end_index" is the last index in the SWW table that covers the target
+ // region of memory.
+ uint8_t* end_pointer = reinterpret_cast<uint8_t*>(address) + length - 1;
+ size_t end_index = reinterpret_cast<size_t>(end_pointer) >> SOFTWARE_WRITE_WATCH_AddressToTableByteIndexShift;
+
+ // We'll mark the entire region of memory as dirty by memseting all entries in
+ // the SWW table between the start and end indexes.
+ memset(&g_sw_ww_table[base_index], ~0, end_index - base_index + 1);
+ }
+#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+
+
private:
// This class should never be instantiated.
GCHeapUtilities() = delete;
};
-#ifndef DACCESS_COMPILE
-extern "C" {
-#endif // !DACCESS_COMPILE
-GPTR_DECL(uint8_t,g_lowest_address);
-GPTR_DECL(uint8_t,g_highest_address);
-GPTR_DECL(uint32_t,g_card_table);
-#ifndef DACCESS_COMPILE
-}
-#endif // !DACCESS_COMPILE
-
-extern "C" uint8_t* g_ephemeral_low;
-extern "C" uint8_t* g_ephemeral_high;
-
#endif // _GCHEAPUTILITIES_H_ \ No newline at end of file
diff --git a/src/vm/gchelpers.cpp b/src/vm/gchelpers.cpp
index 20a3a29540..30f6dd0c81 100644
--- a/src/vm/gchelpers.cpp
+++ b/src/vm/gchelpers.cpp
@@ -35,7 +35,6 @@
#endif // FEATURE_COMINTEROP
#include "rcwwalker.h"
-#include "../gc/softwarewritewatch.h"
//========================================================================
//
@@ -1241,9 +1240,9 @@ extern "C" HCIMPL2_RAW(VOID, JIT_CheckedWriteBarrier, Object **dst, Object *ref)
#endif
#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
- if (SoftwareWriteWatch::IsEnabledForGCHeap())
+ if (GCHeapUtilities::SoftwareWriteWatchIsEnabled())
{
- SoftwareWriteWatch::SetDirty(dst, sizeof(*dst));
+ GCHeapUtilities::SoftwareWriteWatchSetDirty(dst, sizeof(*dst));
}
#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
@@ -1298,9 +1297,9 @@ extern "C" HCIMPL2_RAW(VOID, JIT_WriteBarrier, Object **dst, Object *ref)
#endif
#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
- if (SoftwareWriteWatch::IsEnabledForGCHeap())
+ if (GCHeapUtilities::SoftwareWriteWatchIsEnabled())
{
- SoftwareWriteWatch::SetDirty(dst, sizeof(*dst));
+ GCHeapUtilities::SoftwareWriteWatchSetDirty(dst, sizeof(*dst));
}
#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
@@ -1366,9 +1365,9 @@ void ErectWriteBarrier(OBJECTREF *dst, OBJECTREF ref)
#endif
#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
- if (SoftwareWriteWatch::IsEnabledForGCHeap())
+ if (GCHeapUtilities::SoftwareWriteWatchIsEnabled())
{
- SoftwareWriteWatch::SetDirty(dst, sizeof(*dst));
+ GCHeapUtilities::SoftwareWriteWatchSetDirty(dst, sizeof(*dst));
}
#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
@@ -1399,10 +1398,11 @@ void ErectWriteBarrierForMT(MethodTable **dst, MethodTable *ref)
if (ref->Collectible())
{
#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
- if (SoftwareWriteWatch::IsEnabledForGCHeap())
+ if (GCHeapUtilities::SoftwareWriteWatchIsEnabled())
{
- SoftwareWriteWatch::SetDirty(dst, sizeof(*dst));
+ GCHeapUtilities::SoftwareWriteWatchSetDirty(dst, sizeof(*dst));
}
+
#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
BYTE *refObject = *(BYTE **)((MethodTable*)ref)->GetLoaderAllocatorObjectHandle();
@@ -1417,3 +1417,84 @@ void ErectWriteBarrierForMT(MethodTable **dst, MethodTable *ref)
}
}
}
+
+//----------------------------------------------------------------------------
+//
+// Write Barrier Support for bulk copy ("Clone") operations
+//
+// StartPoint is the target bulk copy start point
+// len is the length of the bulk copy (in bytes)
+//
+//
+// Performance Note:
+//
+// This is implemented somewhat "conservatively", that is we
+// assume that all the contents of the bulk copy are object
+// references. If they are not, and the value lies in the
+// ephemeral range, we will set false positives in the card table.
+//
+// We could use the pointer maps and do this more accurately if necessary
+
+#if defined(_MSC_VER) && defined(_TARGET_X86_)
+#pragma optimize("y", on) // Small critical routines, don't put in EBP frame
+#endif //_MSC_VER && _TARGET_X86_
+
+void
+SetCardsAfterBulkCopy(Object **start, size_t len)
+{
+ // Check whether the writes were even into the heap. If not there's no card update required.
+ // Also if the size is smaller than a pointer, no write barrier is required.
+ if ((BYTE*)start < g_lowest_address || (BYTE*)start >= g_highest_address || len < sizeof(uintptr_t))
+ {
+ return;
+ }
+
+
+ // Don't optimize the Generation 0 case if we are checking for write barrier violations
+ // since we need to update the shadow heap even in the generation 0 case.
+#if defined (WRITE_BARRIER_CHECK) && !defined (SERVER_GC)
+ if (g_pConfig->GetHeapVerifyLevel() & EEConfig::HEAPVERIFY_BARRIERCHECK)
+ {
+ for(unsigned i=0; i < len / sizeof(Object*); i++)
+ {
+ updateGCShadow(&start[i], start[i]);
+ }
+ }
+#endif //WRITE_BARRIER_CHECK && !SERVER_GC
+
+#ifdef FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+ if (GCHeapUtilities::SoftwareWriteWatchIsEnabled())
+ {
+ GCHeapUtilities::SoftwareWriteWatchSetDirtyRegion(start, len);
+ }
+#endif // FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
+
+ size_t startAddress = (size_t)start;
+ size_t endAddress = startAddress + len;
+ size_t startingClump = startAddress >> card_byte_shift;
+ size_t endingClump = (endAddress + (1 << card_byte_shift) - 1) >> card_byte_shift;
+
+ // calculate the number of clumps to mark (round_up(end) - start)
+ size_t clumpCount = endingClump - startingClump;
+ // VolatileLoadWithoutBarrier() is used here to prevent fetch of g_card_table from being reordered
+ // with g_lowest/highest_address check at the beginning of this function.
+ uint8_t* card = ((uint8_t*)VolatileLoadWithoutBarrier(&g_card_table)) + startingClump;
+
+ // Fill the cards. To avoid cache line thrashing we check whether the cards have already been set before
+ // writing.
+ do
+ {
+ if (*card != 0xff)
+ {
+ *card = 0xff;
+ }
+
+ card++;
+ clumpCount--;
+ }
+ while (clumpCount != 0);
+}
+
+#if defined(_MSC_VER) && defined(_TARGET_X86_)
+#pragma optimize("", on) // Go back to command line default optimizations
+#endif //_MSC_VER && _TARGET_X86_ \ No newline at end of file
diff --git a/src/vm/gchelpers.h b/src/vm/gchelpers.h
index f5590beebe..449524aa9a 100644
--- a/src/vm/gchelpers.h
+++ b/src/vm/gchelpers.h
@@ -109,6 +109,8 @@ OBJECTREF AllocateObject(MethodTable *pMT
extern void StompWriteBarrierEphemeral(bool isRuntimeSuspended);
extern void StompWriteBarrierResize(bool isRuntimeSuspended, bool bReqUpperBoundsCheck);
+extern void SwitchToWriteWatchBarrier(bool isRuntimeSuspended);
+extern void SwitchToNonWriteWatchBarrier(bool isRuntimeSuspended);
extern void ThrowOutOfMemoryDimensionsExceeded();
@@ -119,5 +121,5 @@ extern void ThrowOutOfMemoryDimensionsExceeded();
//========================================================================
void ErectWriteBarrier(OBJECTREF* dst, OBJECTREF ref);
-
+void SetCardsAfterBulkCopy(Object **start, size_t len);
#endif // _GCHELPERS_H_
diff --git a/src/vm/gdbjit.cpp b/src/vm/gdbjit.cpp
index 8e728839d6..2ae7009888 100644
--- a/src/vm/gdbjit.cpp
+++ b/src/vm/gdbjit.cpp
@@ -30,11 +30,16 @@ GetTypeInfoFromTypeHandle(TypeHandle typeHandle, NotifyGdb::PTK_TypeInfoMap pTyp
CorElementType corType = typeHandle.GetSignatureCorElementType();
switch (corType)
{
- case ELEMENT_TYPE_VOID:
- case ELEMENT_TYPE_BOOLEAN:
- case ELEMENT_TYPE_CHAR:
case ELEMENT_TYPE_I1:
case ELEMENT_TYPE_U1:
+ case ELEMENT_TYPE_CHAR:
+ typeInfo = new (nothrow) ByteTypeInfo(typeHandle, CorElementTypeToDWEncoding[corType]);
+ if (typeInfo == nullptr)
+ return nullptr;
+ typeInfo->m_type_size = CorTypeInfo::Size(corType);
+ break;
+ case ELEMENT_TYPE_VOID:
+ case ELEMENT_TYPE_BOOLEAN:
case ELEMENT_TYPE_I2:
case ELEMENT_TYPE_U2:
case ELEMENT_TYPE_I4:
@@ -132,6 +137,14 @@ GetTypeInfoFromTypeHandle(TypeHandle typeHandle, NotifyGdb::PTK_TypeInfoMap pTyp
info->members[1].m_member_type = arrayTypeInfo;
}
}
+ // Ignore inheritance from System.Object and System.ValueType classes.
+ if (!typeHandle.IsValueType() &&
+ pMT->GetParentMethodTable() && pMT->GetParentMethodTable()->GetParentMethodTable())
+ {
+ static_cast<ClassTypeInfo*>(typeInfo)->m_parent =
+ GetTypeInfoFromTypeHandle(typeHandle.GetParent(), pTypeMap);
+ }
+
if (refTypeInfo)
return refTypeInfo;
else
@@ -678,21 +691,13 @@ const unsigned char AbbrevTable[] = {
2, DW_TAG_base_type, DW_CHILDREN_no,
DW_AT_name, DW_FORM_strp, DW_AT_encoding, DW_FORM_data1, DW_AT_byte_size, DW_FORM_data1, 0, 0,
- 3, DW_TAG_typedef, DW_CHILDREN_no,
- DW_AT_name, DW_FORM_strp, DW_AT_decl_file, DW_FORM_data1, DW_AT_decl_line, DW_FORM_data1,
+ 3, DW_TAG_typedef, DW_CHILDREN_no, DW_AT_name, DW_FORM_strp,
DW_AT_type, DW_FORM_ref4, 0, 0,
4, DW_TAG_subprogram, DW_CHILDREN_yes,
DW_AT_name, DW_FORM_strp, DW_AT_linkage_name, DW_FORM_strp, DW_AT_decl_file, DW_FORM_data1, DW_AT_decl_line, DW_FORM_data1,
DW_AT_type, DW_FORM_ref4, DW_AT_external, DW_FORM_flag_present,
- DW_AT_low_pc, DW_FORM_addr, DW_AT_high_pc,
-#if defined(_TARGET_AMD64_)
- DW_FORM_data8,
-#elif defined(_TARGET_ARM_)
- DW_FORM_data4,
-#else
-#error Unsupported platform!
-#endif
+ DW_AT_low_pc, DW_FORM_addr, DW_AT_high_pc, DW_FORM_size,
DW_AT_frame_base, DW_FORM_exprloc, 0, 0,
5, DW_TAG_variable, DW_CHILDREN_no,
@@ -721,14 +726,7 @@ const unsigned char AbbrevTable[] = {
12, DW_TAG_subprogram, DW_CHILDREN_yes,
DW_AT_name, DW_FORM_strp, DW_AT_linkage_name, DW_FORM_strp, DW_AT_decl_file, DW_FORM_data1, DW_AT_decl_line, DW_FORM_data1,
DW_AT_type, DW_FORM_ref4, DW_AT_external, DW_FORM_flag_present,
- DW_AT_low_pc, DW_FORM_addr, DW_AT_high_pc,
-#if defined(_TARGET_AMD64_)
- DW_FORM_data8,
-#elif defined(_TARGET_ARM_)
- DW_FORM_data4,
-#else
-#error Unsupported platform!
-#endif
+ DW_AT_low_pc, DW_FORM_addr, DW_AT_high_pc, DW_FORM_size,
DW_AT_frame_base, DW_FORM_exprloc, DW_AT_object_pointer, DW_FORM_ref4, 0, 0,
13, DW_TAG_formal_parameter, DW_CHILDREN_no,
@@ -742,25 +740,14 @@ const unsigned char AbbrevTable[] = {
0, 0,
16, DW_TAG_try_block, DW_CHILDREN_no,
- DW_AT_low_pc, DW_FORM_addr, DW_AT_high_pc,
-#if defined(_TARGET_AMD64_)
- DW_FORM_data8,
-#elif defined(_TARGET_ARM_)
- DW_FORM_data4,
-#else
-#error Unsupported platform!
-#endif
+ DW_AT_low_pc, DW_FORM_addr, DW_AT_high_pc, DW_FORM_size,
0, 0,
17, DW_TAG_catch_block, DW_CHILDREN_no,
- DW_AT_low_pc, DW_FORM_addr, DW_AT_high_pc,
-#if defined(_TARGET_AMD64_)
- DW_FORM_data8,
-#elif defined(_TARGET_ARM_)
- DW_FORM_data4,
-#else
-#error Unsupported platform!
-#endif
+ DW_AT_low_pc, DW_FORM_addr, DW_AT_high_pc, DW_FORM_size,
+ 0, 0,
+
+ 18, DW_TAG_inheritance, DW_CHILDREN_no, DW_AT_type, DW_FORM_ref4, DW_AT_data_member_location, DW_FORM_data1,
0, 0,
0
@@ -792,13 +779,7 @@ struct __attribute__((packed)) DebugInfoCU
struct __attribute__((packed)) DebugInfoTryCatchSub
{
uint8_t m_sub_abbrev;
-#if defined(_TARGET_AMD64_)
- uint64_t m_sub_low_pc, m_sub_high_pc;
-#elif defined(_TARGET_ARM_)
- uint32_t m_sub_low_pc, m_sub_high_pc;
-#else
-#error Unsupported platform!
-#endif
+ uintptr_t m_sub_low_pc, m_sub_high_pc;
};
struct __attribute__((packed)) DebugInfoSub
@@ -808,13 +789,7 @@ struct __attribute__((packed)) DebugInfoSub
uint32_t m_linkage_name;
uint8_t m_file, m_line;
uint32_t m_sub_type;
-#if defined(_TARGET_AMD64_)
- uint64_t m_sub_low_pc, m_sub_high_pc;
-#elif defined(_TARGET_ARM_)
- uint32_t m_sub_low_pc, m_sub_high_pc;
-#else
-#error Unsupported platform!
-#endif
+ uintptr_t m_sub_low_pc, m_sub_high_pc;
uint8_t m_sub_loc[2];
};
@@ -893,6 +868,13 @@ struct __attribute__((packed)) DebugInfoVar
uint32_t m_var_type;
};
+struct __attribute__((packed)) DebugInfoTypeDef
+{
+ uint8_t m_typedef_abbrev;
+ uint32_t m_typedef_name;
+ uint32_t m_typedef_type;
+};
+
struct __attribute__((packed)) DebugInfoClassType
{
uint8_t m_type_abbrev;
@@ -900,6 +882,13 @@ struct __attribute__((packed)) DebugInfoClassType
uint8_t m_byte_size;
};
+struct __attribute__((packed)) DebugInfoInheritance
+{
+ uint8_t m_abbrev;
+ uint32_t m_type;
+ uint8_t m_data_member_location;
+};
+
struct __attribute__((packed)) DebugInfoClassMember
{
uint8_t m_member_abbrev;
@@ -964,6 +953,58 @@ TypeKey* TypeInfoBase::GetTypeKey()
return &typeKey;
}
+void TypeDefInfo::DumpStrings(char *ptr, int &offset)
+{
+ if (ptr != nullptr)
+ {
+ strcpy(ptr + offset, m_typedef_name);
+ m_typedef_name_offset = offset;
+ }
+ offset += strlen(m_typedef_name) + 1;
+}
+
+void TypeDefInfo::DumpDebugInfo(char *ptr, int &offset)
+{
+ if (ptr != nullptr)
+ {
+ DebugInfoTypeDef buf;
+ buf.m_typedef_abbrev = 3;
+ buf.m_typedef_name = m_typedef_name_offset;
+ buf.m_typedef_type = offset + sizeof(DebugInfoTypeDef);
+ m_typedef_type_offset = offset;
+
+ memcpy(ptr + offset,
+ &buf,
+ sizeof(DebugInfoTypeDef));
+ }
+
+ offset += sizeof(DebugInfoTypeDef);
+}
+
+void ByteTypeInfo::DumpStrings(char* ptr, int& offset)
+{
+ PrimitiveTypeInfo::DumpStrings(ptr, offset);
+ m_typedef_info->m_typedef_name = new (nothrow) char[strlen(m_type_name) + 1];
+ if (strcmp(m_type_name, "System.Byte") == 0)
+ strcpy(m_typedef_info->m_typedef_name, "byte");
+ else if (strcmp(m_type_name, "System.SByte") == 0)
+ strcpy(m_typedef_info->m_typedef_name, "sbyte");
+ else if (strcmp(m_type_name, "char16_t") == 0)
+ strcpy(m_typedef_info->m_typedef_name, "char");
+ else
+ strcpy(m_typedef_info->m_typedef_name, m_type_name);
+ m_typedef_info->DumpStrings(ptr, offset);
+}
+
+void ByteTypeInfo::DumpDebugInfo(char *ptr, int &offset)
+{
+ m_typedef_info->DumpDebugInfo(ptr, offset);
+ PrimitiveTypeInfo::DumpDebugInfo(ptr, offset);
+ // Replace offset from real type to typedef
+ if (ptr != nullptr)
+ m_type_offset = m_typedef_info->m_typedef_type_offset;
+}
+
void PrimitiveTypeInfo::DumpDebugInfo(char* ptr, int& offset)
{
if (m_type_offset != 0)
@@ -991,7 +1032,8 @@ void PrimitiveTypeInfo::DumpDebugInfo(char* ptr, int& offset)
ClassTypeInfo::ClassTypeInfo(TypeHandle typeHandle, int num_members)
: TypeInfoBase(typeHandle),
m_num_members(num_members),
- members(new TypeMember[num_members])
+ members(new TypeMember[num_members]),
+ m_parent(nullptr)
{
}
@@ -1331,6 +1373,11 @@ void ClassTypeInfo::DumpStrings(char* ptr, int& offset)
{
members[i].DumpStrings(ptr, offset);
}
+
+ if (m_parent != nullptr)
+ {
+ m_parent->DumpStrings(ptr, offset);
+ }
}
void RefTypeInfo::DumpStrings(char* ptr, int& offset)
@@ -1367,6 +1414,20 @@ void ClassTypeInfo::DumpDebugInfo(char* ptr, int& offset)
{
return;
}
+
+ if (m_parent != nullptr)
+ {
+ if (m_parent->m_type_offset == 0)
+ {
+ m_parent->DumpDebugInfo(ptr, offset);
+ }
+ else if (RefTypeInfo* m_p = dynamic_cast<RefTypeInfo*>(m_parent))
+ {
+ if (m_p->m_value_type->m_type_offset == 0)
+ m_p->m_value_type->DumpDebugInfo(ptr, offset);
+ }
+ }
+
// make sure that types of all members are dumped
for (int i = 0; i < m_num_members; ++i)
{
@@ -1402,6 +1463,22 @@ void ClassTypeInfo::DumpDebugInfo(char* ptr, int& offset)
}
}
+ if (m_parent != nullptr)
+ {
+ if (ptr != nullptr)
+ {
+ DebugInfoInheritance buf;
+ buf.m_abbrev = 18;
+ if (RefTypeInfo *m_p = dynamic_cast<RefTypeInfo*>(m_parent))
+ buf.m_type = m_p->m_value_type->m_type_offset;
+ else
+ buf.m_type = m_parent->m_type_offset;
+ buf.m_data_member_location = 0;
+ memcpy(ptr + offset, &buf, sizeof(DebugInfoInheritance));
+ }
+ offset += sizeof(DebugInfoInheritance);
+ }
+
// members terminator
if (ptr != nullptr)
{
@@ -1414,7 +1491,6 @@ void ClassTypeInfo::DumpDebugInfo(char* ptr, int& offset)
if (members[i].m_static_member_address != 0)
members[i].DumpStaticDebugInfo(ptr, offset);
}
-
}
void ArrayTypeInfo::DumpDebugInfo(char* ptr, int& offset)
diff --git a/src/vm/gdbjit.h b/src/vm/gdbjit.h
index 3160eccf57..1bc75772b6 100644
--- a/src/vm/gdbjit.h
+++ b/src/vm/gdbjit.h
@@ -24,12 +24,14 @@
typedef Elf32_Ehdr Elf_Ehdr;
typedef Elf32_Shdr Elf_Shdr;
typedef Elf32_Sym Elf_Sym;
+ const uint16_t DW_FORM_size = DW_FORM_data4;
#define ADDRESS_SIZE 4
#elif defined(_TARGET_AMD64_) || defined(_TARGET_ARM64_)
typedef Elf64_Ehdr Elf_Ehdr;
typedef Elf64_Shdr Elf_Shdr;
typedef Elf64_Sym Elf_Sym;
-#define ADDRESS_SIZE 8
+ const uint16_t DW_FORM_size = DW_FORM_data8;
+#define ADDRESS_SIZE 8
#else
#error "Target is not supported"
#endif
@@ -184,6 +186,43 @@ public:
int m_type_encoding;
};
+class TypeDefInfo : public DwarfDumpable
+{
+public:
+ TypeDefInfo(char *typedef_name,int typedef_type):
+ m_typedef_name(typedef_name), m_typedef_type(typedef_type) {}
+ void DumpStrings(char* ptr, int& offset) override;
+ void DumpDebugInfo(char* ptr, int& offset) override;
+ virtual ~TypeDefInfo()
+ {
+ if (m_typedef_name != nullptr)
+ {
+ delete [] m_typedef_name;
+ }
+ }
+ char *m_typedef_name;
+ int m_typedef_type;
+ int m_typedef_type_offset;
+ int m_typedef_name_offset;
+};
+
+class ByteTypeInfo : public PrimitiveTypeInfo
+{
+public:
+ ByteTypeInfo(TypeHandle typeHandle, int encoding) : PrimitiveTypeInfo(typeHandle, encoding)
+ {
+ m_typedef_info = new (nothrow) TypeDefInfo(nullptr, 0);
+ }
+ virtual ~ByteTypeInfo()
+ {
+ delete m_typedef_info;
+ }
+ void DumpDebugInfo(char* ptr, int& offset) override;
+ void DumpStrings(char* ptr, int& offset) override;
+
+ TypeDefInfo* m_typedef_info;
+};
+
class RefTypeInfo: public TypeInfoBase
{
public:
@@ -208,6 +247,7 @@ public:
int m_num_members;
TypeMember* members;
+ TypeInfoBase* m_parent;
};
class TypeMember: public DwarfDumpable
@@ -431,6 +471,8 @@ public:
m_sub_loc[0] = 1;
#if defined(_TARGET_AMD64_)
m_sub_loc[1] = DW_OP_reg6;
+#elif defined(_TARGET_X86_)
+ m_sub_loc[1] = DW_OP_reg5;
#elif defined(_TARGET_ARM_)
m_sub_loc[1] = DW_OP_reg11;
#else
diff --git a/src/vm/i386/CLRErrorReporting.vrg b/src/vm/i386/CLRErrorReporting.vrg
deleted file mode 100644
index 6e45ba967c..0000000000
--- a/src/vm/i386/CLRErrorReporting.vrg
+++ /dev/null
@@ -1,5 +0,0 @@
-VSREG 7
-
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\.NET Runtime 4.0 Error Reporting]
-"EventMessageFile"="[DWFolder.D0DF3458_A845_11D3_8D0A_0050046416B9]DW20.EXE"
-"TypesSupported"=dword:00000007
diff --git a/src/vm/i386/asmconstants.h b/src/vm/i386/asmconstants.h
index c42b167f32..ce648518f9 100644
--- a/src/vm/i386/asmconstants.h
+++ b/src/vm/i386/asmconstants.h
@@ -97,6 +97,7 @@ ASMCONSTANTS_C_ASSERT(SpinConstants_dwMaximumDuration == offsetof(SpinConstants,
#define SpinConstants_dwBackoffFactor 8
ASMCONSTANTS_C_ASSERT(SpinConstants_dwBackoffFactor == offsetof(SpinConstants,dwBackoffFactor))
+#ifndef WIN64EXCEPTIONS
// EHContext from clr/src/vm/i386/cgencpu.h
#define EHContext_Eax 0x00
ASMCONSTANTS_C_ASSERT(EHContext_Eax == offsetof(EHContext,Eax))
@@ -124,6 +125,7 @@ ASMCONSTANTS_C_ASSERT(EHContext_Esp == offsetof(EHContext,Esp))
#define EHContext_Eip 0x20
ASMCONSTANTS_C_ASSERT(EHContext_Eip == offsetof(EHContext,Eip))
+#endif // WIN64EXCEPTIONS
// from clr/src/fjit/helperframe.h
@@ -467,6 +469,38 @@ ASMCONSTANTS_C_ASSERT(Thread__m_pDomain == offsetof(Thread, m_pDomain));
#endif
+#ifdef FEATURE_STUBS_AS_IL
+// DelegateObject from src/vm/object.h
+#define DelegateObject___target 0x04 // offset 0 is m_pMethTab of base class Object
+#define DelegateObject___methodBase 0x08
+#define DelegateObject___methodPtr 0x0c
+#define DelegateObject___methodPtrAux 0x10
+#define DelegateObject___invocationList 0x14
+#define DelegateObject___invocationCount 0x18
+
+ASMCONSTANTS_C_ASSERT(DelegateObject___target == offsetof(DelegateObject, _target));
+ASMCONSTANTS_C_ASSERT(DelegateObject___methodBase == offsetof(DelegateObject, _methodBase));
+ASMCONSTANTS_C_ASSERT(DelegateObject___methodPtr == offsetof(DelegateObject, _methodPtr));
+ASMCONSTANTS_C_ASSERT(DelegateObject___methodPtrAux == offsetof(DelegateObject, _methodPtrAux));
+ASMCONSTANTS_C_ASSERT(DelegateObject___invocationList == offsetof(DelegateObject, _invocationList));
+ASMCONSTANTS_C_ASSERT(DelegateObject___invocationCount == offsetof(DelegateObject, _invocationCount));
+
+#endif
+
+#ifndef CROSSGEN_COMPILE
+// ResolveCacheElem from src/vm/virtualcallstub.h
+#define ResolveCacheElem__pMT 0x00
+#define ResolveCacheElem__token 0x04
+#define ResolveCacheElem__target 0x08
+#define ResolveCacheElem__pNext 0x0C
+
+ASMCONSTANTS_C_ASSERT(ResolveCacheElem__pMT == offsetof(ResolveCacheElem, pMT));
+ASMCONSTANTS_C_ASSERT(ResolveCacheElem__token == offsetof(ResolveCacheElem, token));
+ASMCONSTANTS_C_ASSERT(ResolveCacheElem__target == offsetof(ResolveCacheElem, target));
+ASMCONSTANTS_C_ASSERT(ResolveCacheElem__pNext == offsetof(ResolveCacheElem, pNext));
+
+#endif // !CROSSGEN_COMPILE
+
#undef ASMCONSTANTS_C_ASSERT
#undef ASMCONSTANTS_RUNTIME_ASSERT
diff --git a/src/vm/i386/asmhelpers.S b/src/vm/i386/asmhelpers.S
index 1c6f0a36f6..2bb9560e09 100644
--- a/src/vm/i386/asmhelpers.S
+++ b/src/vm/i386/asmhelpers.S
@@ -127,110 +127,6 @@ LEAF_ENTRY RestoreFPUContext, _TEXT
ret 4
LEAF_END RestoreFPUContext, _TEXT
-LEAF_ENTRY ResumeAtJitEHHelper, _TEXT
- mov edx, [esp + 4] // edx = pContext (EHContext*)
-
- mov ebx, [edx + EHContext_Ebx]
- mov esi, [edx + EHContext_Esi]
- mov edi, [edx + EHContext_Edi]
- mov ebp, [edx + EHContext_Ebp]
- mov ecx, [edx + EHContext_Esp]
- mov eax, [edx + EHContext_Eip]
- mov [ecx - 4], eax
- mov eax, [edx + EHContext_Eax]
- mov [ecx - 8], eax
- mov eax, [edx + EHContext_Ecx]
- mov [ecx - 0Ch], eax
- mov eax, [edx + EHContext_Edx]
- mov [ecx - 10h], eax
- lea esp, [ecx - 10h]
- pop edx
- pop ecx
- pop eax
- ret
-LEAF_END ResumeAtJitEHHelper, _TEXT
-
-// int __stdcall CallJitEHFilterHelper(size_t *pShadowSP, EHContext *pContext);
-// on entry, only the pContext->Esp, Ebx, Esi, Edi, Ebp, and Eip are initialized
-NESTED_ENTRY CallJitEHFilterHelper, _TEXT, NoHandler
- push ebp
- mov ebp, esp
- push ebx
- push esi
- push edi
-
- // Write esp-4 to the shadowSP slot
- mov eax, [ebp + 8] // pShadowSP = [ebp+8]
- test eax, eax
- jz LOCAL_LABEL(DONE_SHADOWSP_FILTER)
- mov ebx, esp
- sub ebx, 4
- or ebx, SHADOW_SP_IN_FILTER_ASM
- mov [eax], ebx
-
-LOCAL_LABEL(DONE_SHADOWSP_FILTER):
- mov edx, [ebp + 12] // pContext = [ebp+12]
- mov eax, [edx + EHContext_Eax]
- mov ebx, [edx + EHContext_Ebx]
- mov esi, [edx + EHContext_Esi]
- mov edi, [edx + EHContext_Edi]
- mov ebp, [edx + EHContext_Ebp]
-
- call DWORD PTR [edx + EHContext_Eip]
-#ifdef _DEBUG
- nop // Indicate that it is OK to call managed code directly from here
-#endif // _DEBUG
-
- pop edi
- pop esi
- pop ebx
- pop ebp // don't use 'leave' here, as ebp as been trashed
- ret 8
-NESTED_END CallJitEHFilterHelper, _TEXT
-
-// void __stdcall CallJITEHFinallyHelper(size_t *pShadowSP, EHContext *pContext);
-// on entry, only the pContext->Esp, Ebx, Esi, Edi, Ebp, and Eip are initialized
-NESTED_ENTRY CallJitEHFinallyHelper, _TEXT, NoHandler
- push ebp
- mov ebp, esp
- push ebx
- push esi
- push edi
-
- // Write esp-4 to the shadowSP slot
- mov eax, [ebp + 8] // pShadowSP = [ebp+8]
- test eax, eax
- jz LOCAL_LABEL(DONE_SHADOWSP_FINALLY)
- mov ebx, esp
- sub ebx, 4
- mov [eax], ebx
-
-LOCAL_LABEL(DONE_SHADOWSP_FINALLY):
- mov edx, [ebp + 12] // pContext = [ebp+12]
- mov eax, [edx + EHContext_Eax]
- mov ebx, [edx + EHContext_Ebx]
- mov esi, [edx + EHContext_Esi]
- mov edi, [edx + EHContext_Edi]
- mov ebp, [edx + EHContext_Ebp]
- call DWORD PTR [edx + EHContext_Eip]
-#ifdef _DEBUG
- nop // Indicate that it is OK to call managed code directly from here
-#endif // _DEBUG
-
- // Reflect the changes to the context and only update non-volatile registers.
- // This will be used later to update REGDISPLAY
- mov edx, [esp + 12 + 12]
- mov [edx + EHContext_Ebx], ebx
- mov [edx + EHContext_Esi], esi
- mov [edx + EHContext_Edi], edi
- mov [edx + EHContext_Ebp], ebp
-
- pop edi
- pop esi
- pop ebx
- pop ebp // don't use 'leave' here, as ebp as been trashed
- ret 8
-NESTED_END CallJitEHFinallyHelper, _TEXT
LEAF_ENTRY GetSpecificCpuTypeAsm, _TEXT
push ebx // ebx is trashed by the cpuid calls
@@ -1138,3 +1034,112 @@ NESTED_ENTRY ResolveWorkerAsmStub, _TEXT, NoHandler
// Now jump to the target
jmp eax // continue on into the method
NESTED_END ResolveWorkerAsmStub, _TEXT
+
+#ifdef FEATURE_STUBS_AS_IL
+// ==========================================================================
+// void SinglecastDelegateInvokeStub();
+//
+LEAF_ENTRY SinglecastDelegateInvokeStub, _TEXT
+
+ test ecx, ecx
+ jz LOCAL_LABEL(NullObject)
+
+ mov eax, [ecx + DelegateObject___methodPtr]
+ mov ecx, [ecx + DelegateObject___target] // replace "this" pointer
+ jmp eax
+
+LOCAL_LABEL(NullObject):
+
+ mov ecx, CORINFO_NullReferenceException_ASM
+ jmp C_FUNC(JIT_InternalThrow)
+
+LEAF_END SinglecastDelegateInvokeStub, _TEXT
+#endif // FEATURE_STUBS_AS_IL
+
+#ifndef CROSSGEN_COMPILE
+// =======================================================================================
+// void ResolveWorkerChainLookupAsmStub();
+//
+// This will perform a chained lookup of the entry if the initial cache lookup fails
+//
+// Entry stack:
+// dispatch token
+// siteAddrForRegisterIndirect (used only if this is a RegisterIndirect dispatch call)
+// return address of caller to stub
+// Also, EAX contains the pointer to the first ResolveCacheElem pointer for the calculated
+// bucket in the cache table.
+//
+NESTED_ENTRY ResolveWorkerChainLookupAsmStub, _TEXT, NoHandler
+
+#define CALL_STUB_CACHE_INITIAL_SUCCESS_COUNT 0x100
+
+// this is the part of the stack that is present as we enter this function:
+#define ChainLookup__token 0x00
+#define ChainLookup__indirect_addr 0x04
+#define ChainLookup__caller_ret_addr 0x08
+#define ChainLookup__ret_esp 0x0c
+
+#define ChainLookup_spilled_reg_size 8
+
+ // spill regs
+ push edx
+ push ecx
+
+ // move the token into edx
+ mov edx, [esp + ChainLookup_spilled_reg_size + ChainLookup__token]
+
+ // move the MT into ecx
+ mov ecx, [ecx]
+
+LOCAL_LABEL(main_loop):
+
+ // get the next entry in the chain (don't bother checking the first entry again)
+ mov eax, [eax + ResolveCacheElem__pNext]
+
+ // test if we hit a terminating NULL
+ test eax, eax
+ jz LOCAL_LABEL(fail)
+
+ // compare the MT of the ResolveCacheElem
+ cmp ecx, [eax + ResolveCacheElem__pMT]
+ jne LOCAL_LABEL(main_loop)
+
+ // compare the token of the ResolveCacheElem
+ cmp edx, [eax + ResolveCacheElem__token]
+ jne LOCAL_LABEL(main_loop)
+
+ // success
+ // decrement success counter and move entry to start if necessary
+ PREPARE_EXTERNAL_VAR g_dispatch_cache_chain_success_counter, edx
+ mov ecx, dword ptr [edx]
+ sub ecx, 1
+ mov dword ptr [edx], ecx
+
+ //@TODO: Perhaps this should be a jl for better branch prediction?
+ jge LOCAL_LABEL(nopromote)
+
+ // be quick to reset the counter so we don't get a bunch of contending threads
+ mov dword ptr [edx], CALL_STUB_CACHE_INITIAL_SUCCESS_COUNT
+
+ // promote the entry to the beginning of the chain
+ mov ecx, eax
+ // call C_FUNC(VirtualCallStubManager::PromoteChainEntry)
+ call C_FUNC(_ZN22VirtualCallStubManager17PromoteChainEntryEP16ResolveCacheElem)
+
+LOCAL_LABEL(nopromote):
+
+ pop ecx
+ pop edx
+ add esp, (ChainLookup__caller_ret_addr - ChainLookup__token)
+ mov eax, [eax + ResolveCacheElem__target]
+ jmp eax
+
+LOCAL_LABEL(fail):
+
+ // restore registers
+ pop ecx
+ pop edx
+ jmp ResolveWorkerAsmStub
+
+NESTED_END ResolveWorkerChainLookupAsmStub, _TEXT
+#endif // CROSSGEN_COMPILE
diff --git a/src/vm/i386/cgencpu.h b/src/vm/i386/cgencpu.h
index 99f4eb498f..2e47a6af90 100644
--- a/src/vm/i386/cgencpu.h
+++ b/src/vm/i386/cgencpu.h
@@ -86,6 +86,10 @@ BOOL Runtime_Test_For_SSE2();
#define JUMP_ALLOCATE_SIZE 8 // # bytes to allocate for a jump instruction
#define BACK_TO_BACK_JUMP_ALLOCATE_SIZE 8 // # bytes to allocate for a back to back jump instruction
+#ifdef WIN64EXCEPTIONS
+#define USE_INDIRECT_CODEHEADER
+#endif // WIN64EXCEPTIONS
+
#define HAS_COMPACT_ENTRYPOINTS 1
// Needed for PInvoke inlining in ngened images
@@ -150,12 +154,22 @@ typedef INT32 StackElemType;
// This represents some of the FramedMethodFrame fields that are
// stored at negative offsets.
//--------------------------------------------------------------------
+#define ENUM_ARGUMENT_AND_SCRATCH_REGISTERS() \
+ ARGUMENT_AND_SCRATCH_REGISTER(Eax) \
+ ARGUMENT_AND_SCRATCH_REGISTER(Ecx) \
+ ARGUMENT_AND_SCRATCH_REGISTER(Edx)
+
+#define ENUM_CALLEE_SAVED_REGISTERS() \
+ CALLEE_SAVED_REGISTER(Edi) \
+ CALLEE_SAVED_REGISTER(Esi) \
+ CALLEE_SAVED_REGISTER(Ebx) \
+ CALLEE_SAVED_REGISTER(Ebp)
+
typedef DPTR(struct CalleeSavedRegisters) PTR_CalleeSavedRegisters;
struct CalleeSavedRegisters {
- INT32 edi;
- INT32 esi;
- INT32 ebx;
- INT32 ebp;
+#define CALLEE_SAVED_REGISTER(regname) INT32 regname;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
};
//--------------------------------------------------------------------
@@ -194,6 +208,7 @@ struct ArgumentRegisters {
struct REGDISPLAY;
typedef REGDISPLAY *PREGDISPLAY;
+#ifndef WIN64EXCEPTIONS
// Sufficient context for Try/Catch restoration.
struct EHContext {
INT32 Eax;
@@ -242,6 +257,7 @@ struct EHContext {
Eip = 0;
}
};
+#endif // !WIN64EXCEPTIONS
#define ARGUMENTREGISTERS_SIZE sizeof(ArgumentRegisters)
diff --git a/src/vm/i386/cgenx86.cpp b/src/vm/i386/cgenx86.cpp
index 08ccd01086..528629c3a2 100644
--- a/src/vm/i386/cgenx86.cpp
+++ b/src/vm/i386/cgenx86.cpp
@@ -60,6 +60,32 @@ extern "C" DWORD STDCALL GetSpecificCpuFeaturesAsm(DWORD *pInfo);
void generate_noref_copy (unsigned nbytes, StubLinkerCPU* sl);
+#ifdef WIN64EXCEPTIONS
+void UpdateRegDisplayFromCalleeSavedRegisters(REGDISPLAY * pRD, CalleeSavedRegisters * regs)
+{
+ LIMITED_METHOD_CONTRACT;
+
+ T_CONTEXT * pContext = pRD->pCurrentContext;
+#define CALLEE_SAVED_REGISTER(regname) pContext->regname = regs->regname;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+ KNONVOLATILE_CONTEXT_POINTERS * pContextPointers = pRD->pCurrentContextPointers;
+#define CALLEE_SAVED_REGISTER(regname) pContextPointers->regname = (DWORD*)&regs->regname;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+}
+
+void ClearRegDisplayArgumentAndScratchRegisters(REGDISPLAY * pRD)
+{
+ LIMITED_METHOD_CONTRACT;
+
+#define ARGUMENT_AND_SCRATCH_REGISTER(regname) pRD->pCurrentContextPointers->regname = NULL;
+ ENUM_ARGUMENT_AND_SCRATCH_REGISTERS();
+#undef ARGUMENT_AND_SCRATCH_REGISTER
+}
+#endif // WIN64EXCEPTIONS
+
#ifndef DACCESS_COMPILE
//=============================================================================
@@ -193,6 +219,7 @@ void GetSpecificCpuInfo(CORINFO_CPU * cpuInfo)
#endif // #ifndef DACCESS_COMPILE
+#ifndef WIN64EXCEPTIONS
//---------------------------------------------------------------------------------------
//
// Initialize the EHContext using the resume PC and the REGDISPLAY. The EHContext is currently used in two
@@ -213,7 +240,7 @@ void EHContext::Setup(PCODE resumePC, PREGDISPLAY regs)
LIMITED_METHOD_DAC_CONTRACT;
// EAX ECX EDX are scratch
- this->Esp = regs->Esp;
+ this->Esp = regs->SP;
this->Ebx = *regs->pEbx;
this->Esi = *regs->pEsi;
this->Edi = *regs->pEdi;
@@ -256,6 +283,7 @@ void EHContext::UpdateFrame(PREGDISPLAY regs)
*regs->pEdi = this->Edi;
*regs->pEbp = this->Ebp;
}
+#endif // WIN64EXCEPTIONS
void TransitionFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
{
@@ -275,6 +303,8 @@ void TransitionFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
_ASSERTE(pFunc != NULL);
UpdateRegDisplayHelper(pRD, pFunc->CbStackPop());
+ LOG((LF_GCROOTS, LL_INFO100000, "STACKWALK TransitionFrame::UpdateRegDisplay(ip:%p, sp:%p)\n", pRD->ControlPC, pRD->SP));
+
RETURN;
}
@@ -292,17 +322,34 @@ void TransitionFrame::UpdateRegDisplayHelper(const PREGDISPLAY pRD, UINT cbStack
CalleeSavedRegisters* regs = GetCalleeSavedRegisters();
- // reset pContext; it's only valid for active (top-most) frame
+ pRD->PCTAddr = GetReturnAddressPtr();
+
+#ifdef WIN64EXCEPTIONS
+ pRD->IsCallerContextValid = FALSE;
+ pRD->IsCallerSPValid = FALSE;
+
+ pRD->pCurrentContext->Eip = *PTR_PCODE(pRD->PCTAddr);;
+ pRD->pCurrentContext->Esp = GetSP();
+
+ UpdateRegDisplayFromCalleeSavedRegisters(pRD, regs);
+ ClearRegDisplayArgumentAndScratchRegisters(pRD);
+
+ SyncRegDisplayToCurrentContext(pRD);
+
+#else // WIN64EXCEPTIONS
+
+ // reset pContext; it's only valid for active (top-most) frame
pRD->pContext = NULL;
- pRD->pEdi = (DWORD*) &regs->edi;
- pRD->pEsi = (DWORD*) &regs->esi;
- pRD->pEbx = (DWORD*) &regs->ebx;
- pRD->pEbp = (DWORD*) &regs->ebp;
- pRD->PCTAddr = GetReturnAddressPtr();
+#define CALLEE_SAVED_REGISTER(regname) pRD->p##regname = (DWORD*) &regs->regname;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
pRD->ControlPC = *PTR_PCODE(pRD->PCTAddr);
- pRD->Esp = (DWORD)(pRD->PCTAddr + sizeof(TADDR) + cbStackPop);
+ pRD->SP = (DWORD)(pRD->PCTAddr + sizeof(TADDR) + cbStackPop);
+
+#endif // WIN64EXCEPTIONS
RETURN;
}
@@ -322,6 +369,40 @@ void HelperMethodFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
ENABLE_FORBID_GC_LOADER_USE_IN_THIS_SCOPE();
+ LOG((LF_GCROOTS, LL_INFO100000, "STACKWALK HelperMethodFrame::UpdateRegDisplay cached ip:%p, sp:%p\n", m_MachState.GetRetAddr(), m_MachState.esp()));
+
+ pRD->PCTAddr = dac_cast<TADDR>(m_MachState.pRetAddr());
+
+#ifdef WIN64EXCEPTIONS
+
+ pRD->IsCallerContextValid = FALSE;
+ pRD->IsCallerSPValid = FALSE; // Don't add usage of this field. This is only temporary.
+
+#ifdef DACCESS_COMPILE
+ PORTABILITY_ASSERT("HelperMethodFrame::UpdateRegDisplay");
+#endif // DACCESS_COMPILE
+
+ pRD->pCurrentContext->Eip = pRD->ControlPC = m_MachState.GetRetAddr();
+ pRD->pCurrentContext->Esp = pRD->SP = (DWORD) m_MachState.esp();
+
+#define CALLEE_SAVED_REGISTER(regname) pRD->pCurrentContext->regname = *((DWORD*) m_MachState.p##regname());
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+#define CALLEE_SAVED_REGISTER(regname) pRD->pCurrentContextPointers->regname = (DWORD*) m_MachState.p##regname();
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+ //
+ // Clear all knowledge of scratch registers. We're skipping to any
+ // arbitrary point on the stack, and frames aren't required to preserve or
+ // keep track of these anyways.
+ //
+
+ ClearRegDisplayArgumentAndScratchRegisters(pRD);
+
+#else // WIN64EXCEPTIONS
+
// reset pContext; it's only valid for active (top-most) frame
pRD->pContext = NULL;
@@ -340,7 +421,7 @@ void HelperMethodFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
InsureInit(false, &unwindState);
pRD->PCTAddr = dac_cast<TADDR>(unwindState.pRetAddr());
pRD->ControlPC = unwindState.GetRetAddr();
- pRD->Esp = unwindState._esp;
+ pRD->SP = unwindState._esp;
// Get some special host instance memory
// so we have a place to point to.
@@ -363,11 +444,12 @@ void HelperMethodFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
// in the real code. I'm not sure exactly
// what should happen in the on-the-fly case,
// but go with what would happen from an InsureInit.
+
RETURN;
}
#endif // #ifdef DACCESS_COMPILE
-
+
// DACCESS: The MachState pointers are kept as PTR_TADDR so
// the host pointers here refer to the appropriate size and
// these casts are not a problem.
@@ -375,9 +457,11 @@ void HelperMethodFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
pRD->pEsi = (DWORD*) m_MachState.pEsi();
pRD->pEbx = (DWORD*) m_MachState.pEbx();
pRD->pEbp = (DWORD*) m_MachState.pEbp();
- pRD->PCTAddr = dac_cast<TADDR>(m_MachState.pRetAddr());
+
pRD->ControlPC = m_MachState.GetRetAddr();
- pRD->Esp = (DWORD) m_MachState.esp();
+ pRD->SP = (DWORD) m_MachState.esp();
+
+#endif // WIN64EXCEPTIONS
RETURN;
}
@@ -509,18 +593,44 @@ void FaultingExceptionFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
}
CONTRACT_END;
- CalleeSavedRegisters* regs = GetCalleeSavedRegisters();
-
// reset pContext; it's only valid for active (top-most) frame
pRD->pContext = NULL;
- pRD->pEdi = (DWORD*) &regs->edi;
- pRD->pEsi = (DWORD*) &regs->esi;
- pRD->pEbx = (DWORD*) &regs->ebx;
- pRD->pEbp = (DWORD*) &regs->ebp;
pRD->PCTAddr = GetReturnAddressPtr();
+
+#ifdef WIN64EXCEPTIONS
+
+ memcpy(pRD->pCurrentContext, &m_ctx, sizeof(CONTEXT));
+
+ pRD->SP = m_ctx.Esp;
+ pRD->ControlPC = m_ctx.Eip;
+
+#define ARGUMENT_AND_SCRATCH_REGISTER(regname) pRD->pCurrentContextPointers->regname = &m_ctx.regname;
+ ENUM_ARGUMENT_AND_SCRATCH_REGISTERS();
+#undef ARGUMENT_AND_SCRATCH_REGISTER
+
+#define CALLEE_SAVED_REGISTER(regname) pRD->pCurrentContextPointers->regname = &m_ctx.regname;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+ pRD->IsCallerContextValid = FALSE;
+ pRD->IsCallerSPValid = FALSE; // Don't add usage of this field. This is only temporary.
+
+#else // WIN64EXCEPTIONS
+
+ CalleeSavedRegisters* regs = GetCalleeSavedRegisters();
+
+#define CALLEE_SAVED_REGISTER(regname) pRD->p##regname = (DWORD*) &regs->regname;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+ pRD->SP = m_Esp;
pRD->ControlPC = *PTR_PCODE(pRD->PCTAddr);
- pRD->Esp = m_Esp;
+
+#endif // WIN64EXCEPTIONS
+
+ LOG((LF_GCROOTS, LL_INFO100000, "STACKWALK FaultingExceptionFrame::UpdateRegDisplay(ip:%p, sp:%p)\n", pRD->ControlPC, pRD->SP));
+
RETURN;
}
@@ -563,19 +673,44 @@ void InlinedCallFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
stackArgSize = pMD->GetStackArgumentSize();
}
+ /* The return address is just above the "ESP" */
+ pRD->PCTAddr = PTR_HOST_MEMBER_TADDR(InlinedCallFrame, this,
+ m_pCallerReturnAddress);
+
+#ifdef WIN64EXCEPTIONS
+
+ pRD->IsCallerContextValid = FALSE;
+ pRD->IsCallerSPValid = FALSE; // Don't add usage of this field. This is only temporary.
+
+ pRD->pCurrentContext->Eip = *PTR_PCODE(pRD->PCTAddr);
+ pRD->pCurrentContext->Esp = (DWORD) dac_cast<TADDR>(m_pCallSiteSP) + stackArgSize;
+ pRD->pCurrentContext->Ebp = (DWORD) m_pCalleeSavedFP;
+
+ ClearRegDisplayArgumentAndScratchRegisters(pRD);
+
+#define CALLEE_SAVED_REGISTER(regname) pRD->pCurrentContextPointers->regname = NULL;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+ pRD->pCurrentContextPointers->Ebp = (DWORD*) &m_pCalleeSavedFP;
+
+ SyncRegDisplayToCurrentContext(pRD);
+
+#else // WIN64EXCEPTIONS
+
// reset pContext; it's only valid for active (top-most) frame
pRD->pContext = NULL;
-
pRD->pEbp = (DWORD*) &m_pCalleeSavedFP;
- /* The return address is just above the "ESP" */
- pRD->PCTAddr = PTR_HOST_MEMBER_TADDR(InlinedCallFrame, this,
- m_pCallerReturnAddress);
pRD->ControlPC = *PTR_PCODE(pRD->PCTAddr);
-
/* Now we need to pop off the outgoing arguments */
- pRD->Esp = (DWORD) dac_cast<TADDR>(m_pCallSiteSP) + stackArgSize;
+ pRD->SP = (DWORD) dac_cast<TADDR>(m_pCallSiteSP) + stackArgSize;
+
+#endif // WIN64EXCEPTIONS
+
+ LOG((LF_GCROOTS, LL_INFO100000, "STACKWALK InlinedCallFrame::UpdateRegDisplay(ip:%p, sp:%p)\n", pRD->ControlPC, pRD->SP));
+
RETURN;
}
@@ -601,6 +736,28 @@ void ResumableFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
}
CONTRACT_END;
+ pRD->PCTAddr = dac_cast<TADDR>(m_Regs) + offsetof(CONTEXT, Eip);
+
+#ifdef WIN64EXCEPTIONS
+
+ memcpy(pRD->pCurrentContext, &m_Regs, sizeof(CONTEXT));
+
+ pRD->SP = m_Regs->Esp;
+ pRD->ControlPC = m_Regs->Eip;
+
+#define ARGUMENT_AND_SCRATCH_REGISTER(reg) pRD->pCurrentContextPointers->reg = &m_Regs->reg;
+ ENUM_ARGUMENT_AND_SCRATCH_REGISTERS();
+#undef ARGUMENT_AND_SCRATCH_REGISTER
+
+#define CALLEE_SAVED_REGISTER(reg) pRD->pCurrentContextPointers->reg = &m_Regs->reg;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+ pRD->IsCallerContextValid = FALSE;
+ pRD->IsCallerSPValid = FALSE; // Don't add usage of this field. This is only temporary.
+
+#else // WIN64EXCEPTIONS
+
// reset pContext; it's only valid for active (top-most) frame
pRD->pContext = NULL;
@@ -636,9 +793,10 @@ void ResumableFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
pRD->pEbp = &pUnwoundContext->Ebp;
pRD->ControlPC = pUnwoundContext->Eip;
- pRD->PCTAddr = dac_cast<TADDR>(m_Regs) + offsetof(CONTEXT, Eip);
- pRD->Esp = m_Regs->Esp;
+ pRD->SP = m_Regs->Esp;
+
+#endif // !WIN64EXCEPTIONS
RETURN;
}
@@ -654,6 +812,34 @@ void HijackFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
}
CONTRACTL_END;
+ pRD->PCTAddr = dac_cast<TADDR>(m_Args) + offsetof(HijackArgs, Eip);
+
+#ifdef WIN64EXCEPTIONS
+
+ pRD->IsCallerContextValid = FALSE;
+ pRD->IsCallerSPValid = FALSE; // Don't add usage of this field. This is only temporary.
+
+ pRD->pCurrentContext->Eip = *PTR_PCODE(pRD->PCTAddr);
+ pRD->pCurrentContext->Esp = (DWORD)(pRD->PCTAddr + sizeof(TADDR));
+
+#define CALLEE_SAVED_REGISTER(reg) pRD->pCurrentContext->reg = m_Args->reg;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+#define CALLEE_SAVED_REGISTER(reg) pRD->pCurrentContextPointers->reg = NULL;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
+
+#define ARGUMENT_AND_SCRATCH_REGISTER(reg) pRD->pCurrentContextPointers->reg = NULL;
+ ENUM_ARGUMENT_AND_SCRATCH_REGISTERS();
+#undef ARGUMENT_AND_SCRATCH_REGISTER
+
+ pRD->pCurrentContextPointers->Eax = (PDWORD) &m_Args->Eax;
+
+ SyncRegDisplayToCurrentContext(pRD);
+
+#else // WIN64EXCEPTIONS
+
// This only describes the top-most frame
pRD->pContext = NULL;
@@ -665,9 +851,10 @@ void HijackFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
pRD->pEax = &m_Args->Eax;
pRD->pEbp = &m_Args->Ebp;
- pRD->PCTAddr = dac_cast<TADDR>(m_Args) + offsetof(HijackArgs, Eip);
pRD->ControlPC = *PTR_PCODE(pRD->PCTAddr);
- pRD->Esp = (DWORD)(pRD->PCTAddr + sizeof(TADDR));
+ pRD->SP = (DWORD)(pRD->PCTAddr + sizeof(TADDR));
+
+#endif // WIN64EXCEPTIONS
}
#endif // FEATURE_HIJACK
@@ -704,15 +891,33 @@ void TailCallFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
// reset pContext; it's only valid for active (top-most) frame
pRD->pContext = NULL;
+ pRD->PCTAddr = GetReturnAddressPtr();
- pRD->pEdi = (DWORD*)&m_regs.edi;
- pRD->pEsi = (DWORD*)&m_regs.esi;
- pRD->pEbx = (DWORD*)&m_regs.ebx;
- pRD->pEbp = (DWORD*)&m_regs.ebp;
+#ifdef WIN64EXCEPTIONS
+
+ pRD->IsCallerContextValid = FALSE;
+ pRD->IsCallerSPValid = FALSE; // Don't add usage of this field. This is only temporary.
+
+ pRD->pCurrentContext->Eip = *PTR_PCODE(pRD->PCTAddr);
+ pRD->pCurrentContext->Esp = (DWORD)(pRD->PCTAddr + sizeof(TADDR));
+
+ UpdateRegDisplayFromCalleeSavedRegisters(pRD, &m_regs);
+ ClearRegDisplayArgumentAndScratchRegisters(pRD);
+
+ SyncRegDisplayToCurrentContext(pRD);
+
+#else
+
+#define CALLEE_SAVED_REGISTER(regname) pRD->p##regname = (DWORD*) &m_regs.regname;
+ ENUM_CALLEE_SAVED_REGISTERS();
+#undef CALLEE_SAVED_REGISTER
- pRD->PCTAddr = GetReturnAddressPtr();
pRD->ControlPC = *PTR_PCODE(pRD->PCTAddr);
- pRD->Esp = (DWORD)(pRD->PCTAddr + sizeof(TADDR));
+ pRD->SP = (DWORD)(pRD->PCTAddr + sizeof(TADDR));
+
+#endif
+
+ LOG((LF_GCROOTS, LL_INFO100000, "STACKWALK TailCallFrame::UpdateRegDisplay(ip:%p, sp:%p)\n", pRD->ControlPC, pRD->SP));
RETURN;
}
@@ -1058,7 +1263,7 @@ public:
{
LIMITED_METHOD_CONTRACT;
return offsetof(StubForHostStackFrame, m_calleeSavedRegisters) +
- offsetof(CalleeSavedRegisters, ebp);
+ offsetof(CalleeSavedRegisters, Ebp);
}
static INT32 GetFPrelOffsOfArgumentRegisters()
diff --git a/src/vm/i386/excepcpu.h b/src/vm/i386/excepcpu.h
index ff540e784b..d70c6620a1 100644
--- a/src/vm/i386/excepcpu.h
+++ b/src/vm/i386/excepcpu.h
@@ -21,6 +21,7 @@
#define STATUS_CLR_GCCOVER_CODE STATUS_PRIVILEGED_INSTRUCTION
+#ifndef WIN64EXCEPTIONS
class Thread;
#if defined(_MSC_VER)
@@ -28,19 +29,6 @@ class Thread;
// Actually, the handler getting set is properly registered
#endif
-#ifdef FEATURE_PAL
-
-extern VOID SetSEHRecord(PEXCEPTION_REGISTRATION_RECORD record);
-extern VOID ResetSEHRecord(PEXCEPTION_REGISTRATION_RECORD record);
-
-#define INSTALL_SEH_RECORD(record) \
- SetSEHRecord(record); \
-
-#define UNINSTALL_SEH_RECORD(record) \
- ResetSEHRecord(record);
-
-#else // FEATURE_PAL
-
#define INSTALL_SEH_RECORD(record) \
{ \
(record)->Next = (PEXCEPTION_REGISTRATION_RECORD)__readfsdword(0); \
@@ -52,8 +40,6 @@ extern VOID ResetSEHRecord(PEXCEPTION_REGISTRATION_RECORD record);
__writefsdword(0, (DWORD) ((record)->Next)); \
}
-#endif // FEATURE_PAL
-
#define INSTALL_EXCEPTION_HANDLING_RECORD(record) \
{ \
PEXCEPTION_REGISTRATION_RECORD __record = (record); \
@@ -90,14 +76,32 @@ extern VOID ResetSEHRecord(PEXCEPTION_REGISTRATION_RECORD record);
#endif
+
+PEXCEPTION_REGISTRATION_RECORD GetCurrentSEHRecord();
+PEXCEPTION_REGISTRATION_RECORD GetFirstCOMPlusSEHRecord(Thread*);
+
+LPVOID COMPlusEndCatchWorker(Thread *pCurThread);
+EXTERN_C LPVOID STDCALL COMPlusEndCatch(LPVOID ebp, DWORD ebx, DWORD edi, DWORD esi, LPVOID* pRetAddress);
+
+#else // WIN64EXCEPTIONS
+#define INSTALL_EXCEPTION_HANDLING_RECORD(record)
+#define UNINSTALL_EXCEPTION_HANDLING_RECORD(record)
+#define DECLARE_CPFH_EH_RECORD(pCurThread)
+
+#endif // WIN64EXCEPTIONS
+
//
// Retrieves the redirected CONTEXT* from the stack frame of one of the
// RedirectedHandledJITCaseForXXX_Stub's.
//
PTR_CONTEXT GetCONTEXTFromRedirectedStubStackFrame(CONTEXT * pContext);
+#ifdef WIN64EXCEPTIONS
+PTR_CONTEXT GetCONTEXTFromRedirectedStubStackFrame(T_DISPATCHER_CONTEXT * pDispatcherContext);
-PEXCEPTION_REGISTRATION_RECORD GetCurrentSEHRecord();
-PEXCEPTION_REGISTRATION_RECORD GetFirstCOMPlusSEHRecord(Thread*);
+class FaultingExceptionFrame;
+
+FaultingExceptionFrame *GetFrameFromRedirectedStubStackFrame (DISPATCHER_CONTEXT *pDispatcherContext);
+#endif // WIN64EXCEPTIONS
// Determine the address of the instruction that made the current call.
inline
diff --git a/src/vm/i386/excepx86.cpp b/src/vm/i386/excepx86.cpp
index 71200f671f..b860800943 100644
--- a/src/vm/i386/excepx86.cpp
+++ b/src/vm/i386/excepx86.cpp
@@ -33,11 +33,11 @@
#include "eeconfig.h"
#include "vars.hpp"
#include "generics.h"
-#include "securityprincipal.h"
#include "asmconstants.h"
#include "virtualcallstub.h"
+#ifndef WIN64EXCEPTIONS
MethodDesc * GetUserMethodForILStub(Thread * pThread, UINT_PTR uStubSP, MethodDesc * pILStubMD, Frame ** ppFrameOut);
#if !defined(DACCESS_COMPILE)
@@ -2018,20 +2018,6 @@ PEXCEPTION_REGISTRATION_RECORD GetCurrentSEHRecord()
return (EXCEPTION_REGISTRATION_RECORD*) fs0;
}
-#ifdef FEATURE_PAL
-VOID SetSEHRecord(PEXCEPTION_REGISTRATION_RECORD record)
-{
- WRAPPER_NO_CONTRACT;
- record->Next = CurrentSEHRecord;
- CurrentSEHRecord = record;
-}
-
-VOID ResetSEHRecord(PEXCEPTION_REGISTRATION_RECORD record)
-{
- CurrentSEHRecord = record->Next;
-}
-#endif // FEATURE_PAL
-
PEXCEPTION_REGISTRATION_RECORD GetFirstCOMPlusSEHRecord(Thread *pThread) {
WRAPPER_NO_CONTRACT;
#ifndef FEATURE_PAL
@@ -2274,19 +2260,11 @@ int COMPlusThrowCallbackHelper(IJitManager *pJitManager,
CONTRACTL_END;
int iFilt = 0;
- BOOL impersonating = FALSE;
#ifndef FEATURE_PAL
EX_TRY
{
GCPROTECT_BEGIN (throwable);
- if (pData->hCallerToken != NULL)
- {
- STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallbackHelper hCallerToken = %d\n",pData->hCallerToken);
- // CLR_ImpersonateLoggedOnUser fails fast on error
- COMPrincipal::CLR_ImpersonateLoggedOnUser(pData->hCallerToken);
- impersonating = TRUE;
- }
// We want to call filters even if the thread is aborting, so suppress abort
// checks while the filter runs.
@@ -2295,25 +2273,10 @@ int COMPlusThrowCallbackHelper(IJitManager *pJitManager,
BYTE* startAddress = (BYTE*)pCf->GetCodeInfo()->GetStartAddress();
iFilt = ::CallJitEHFilter(pCf, startAddress, EHClausePtr, nestingLevel, throwable);
- if (impersonating)
- {
- STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallbackHelper hImpersonationToken = %d\n",pData->hImpersonationToken);
- // CLR_ImpersonateLoggedOnUser fails fast on error
- COMPrincipal::CLR_ImpersonateLoggedOnUser(pData->hImpersonationToken);
- impersonating = FALSE;
- }
GCPROTECT_END();
}
EX_CATCH
{
- if (impersonating)
- {
- STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallbackHelper EX_CATCH hImpersonationToken = %d\n",pData->hImpersonationToken);
- // CLR_ImpersonateLoggedOnUser fails fast on error
- COMPrincipal::CLR_ImpersonateLoggedOnUser(pData->hImpersonationToken);
- impersonating = FALSE;
- }
-
// We had an exception in filter invocation that remained unhandled.
// Sync managed exception state, for the managed thread, based upon the active exception tracker.
pThread->SyncManagedExceptionState(false);
@@ -2445,27 +2408,6 @@ StackWalkAction COMPlusThrowCallback( // SWA value
pData->bSkipLastElement = FALSE;
}
-#ifndef FEATURE_PAL
- // Check for any impersonation on the frame and save that for use during EH filter callbacks
- OBJECTREF* pRefSecDesc = pCf->GetAddrOfSecurityObject();
- if (pRefSecDesc != NULL && *pRefSecDesc != NULL)
- {
- FRAMESECDESCREF fsdRef = (FRAMESECDESCREF)*pRefSecDesc;
- if (fsdRef->GetCallerToken() != NULL)
- {
- // Impersonation info present on the Frame
- pData->hCallerToken = fsdRef->GetCallerToken();
- STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallback. Found non-NULL callertoken on FSD:%d\n",pData->hCallerToken);
- if (!pData->bImpersonationTokenSet)
- {
- pData->hImpersonationToken = fsdRef->GetImpersonationToken();
- STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallback. Found non-NULL impersonationtoken on FSD:%d\n",pData->hImpersonationToken);
- pData->bImpersonationTokenSet = TRUE;
- }
- }
- }
-#endif // !FEATURE_PAL
-
// now we've got the stack trace, if we aren't allowed to catch this and we're first pass, return
if (pData->bDontCatch)
return SWA_CONTINUE;
@@ -3666,33 +3608,11 @@ EXCEPTION_HANDLER_IMPL(UMThunkPrestubHandler)
return retval;
}
-LONG CLRNoCatchHandler(EXCEPTION_POINTERS* pExceptionInfo, PVOID pv)
-{
- WRAPPER_NO_CONTRACT;
- STATIC_CONTRACT_ENTRY_POINT;
-
- LONG result = EXCEPTION_CONTINUE_SEARCH;
-
- // This function can be called during the handling of a SO
- //BEGIN_ENTRYPOINT_VOIDRET;
-
- result = CLRVectoredExceptionHandler(pExceptionInfo);
-
- if (EXCEPTION_EXECUTE_HANDLER == result)
- {
- result = EXCEPTION_CONTINUE_SEARCH;
- }
-
- //END_ENTRYPOINT_VOIDRET;
-
- return result;
-}
-
#ifdef FEATURE_COMINTEROP
// The reverse COM interop path needs to be sure to pop the ComMethodFrame that is pushed, but we do not want
-// to have an additional FS:0 handler between the COM callsite and the call into managed. So we push this
-// FS:0 handler, which will defer to the usual COMPlusFrameHandler and then perform the cleanup of the
-// ComMethodFrame, if needed.
+// to have an additional FS:0 handler between the COM callsite and the call into managed. So we push this
+// FS:0 handler, which will defer to the usual COMPlusFrameHandler and then perform the cleanup of the
+// ComMethodFrame, if needed.
EXCEPTION_HANDLER_IMPL(COMPlusFrameHandlerRevCom)
{
STATIC_CONTRACT_THROWS;
@@ -3711,7 +3631,36 @@ EXCEPTION_HANDLER_IMPL(COMPlusFrameHandlerRevCom)
return result;
}
#endif // FEATURE_COMINTEROP
+#endif // !DACCESS_COMPILE
+#endif // !WIN64EXCEPTIONS
+
+#ifndef DACCESS_COMPILE
+LONG CLRNoCatchHandler(EXCEPTION_POINTERS* pExceptionInfo, PVOID pv)
+{
+#ifndef WIN64EXCEPTIONS
+ WRAPPER_NO_CONTRACT;
+ STATIC_CONTRACT_ENTRY_POINT;
+
+ LONG result = EXCEPTION_CONTINUE_SEARCH;
+
+ // This function can be called during the handling of a SO
+ //BEGIN_ENTRYPOINT_VOIDRET;
+ result = CLRVectoredExceptionHandler(pExceptionInfo);
+
+ if (EXCEPTION_EXECUTE_HANDLER == result)
+ {
+ result = EXCEPTION_CONTINUE_SEARCH;
+ }
+
+ //END_ENTRYPOINT_VOIDRET;
+
+ return result;
+#else // !WIN64EXCEPTIONS
+ return EXCEPTION_CONTINUE_SEARCH;
+#endif // !WIN64EXCEPTIONS
+}
+#endif // !DACCESS_COMPILE
// Returns TRUE if caller should resume execution.
BOOL
@@ -3768,11 +3717,3 @@ AdjustContextForVirtualStub(
return TRUE;
}
-
-#ifdef FEATURE_PAL
-VOID DECLSPEC_NORETURN DispatchManagedException(PAL_SEHException& ex, bool isHardwareException)
-{
- UNREACHABLE();
-}
-#endif
-#endif // !DACCESS_COMPILE
diff --git a/src/vm/i386/gmsx86.cpp b/src/vm/i386/gmsx86.cpp
index 34d65856fe..840a50d045 100644
--- a/src/vm/i386/gmsx86.cpp
+++ b/src/vm/i386/gmsx86.cpp
@@ -1323,6 +1323,8 @@ void LazyMachState::unwindLazyState(LazyMachState* baseState,
pvControlPc = GetIP(&ctx);
+ _ASSERTE(pvControlPc != 0);
+
if (funCallDepth > 0)
{
--funCallDepth;
diff --git a/src/vm/i386/jithelp.S b/src/vm/i386/jithelp.S
index 66ae9fb451..9a7e3344cd 100644
--- a/src/vm/i386/jithelp.S
+++ b/src/vm/i386/jithelp.S
@@ -720,30 +720,3 @@ LEAF_END JIT_PatchedCodeLast, _TEXT
LEAF_ENTRY JIT_PatchedCodeEnd, _TEXT
ret
LEAF_END JIT_PatchedCodeEnd, _TEXT
-
-// Note that the debugger skips this entirely when doing SetIP,
-// since COMPlusCheckForAbort should always return 0. Excep.cpp:LeaveCatch
-// asserts that to be true. If this ends up doing more work, then the
-// debugger may need additional support.
-// void __stdcall JIT_EndCatch();
-NESTED_ENTRY JIT_EndCatch, _TEXT, NoHandler
- // make temp storage for return address, and push the address of that
- // as the last arg to COMPlusEndCatch
- mov ecx, [esp]
- push ecx
- push esp
-
- // push the rest of COMPlusEndCatch's args, right-to-left
- push esi
- push edi
- push ebx
- push ebp
-
- // returns old esp value in eax, stores jump address
- call C_FUNC(COMPlusEndCatch)
- // now eax = new esp, [esp] = new eip
-
- pop edx // edx = new eip
- mov esp, eax // esp = new esp
- jmp edx // eip = new eip
-NESTED_END JIT_EndCatch, _TEXT
diff --git a/src/vm/i386/umthunkstub.S b/src/vm/i386/umthunkstub.S
index 728964bdb6..5a557d4b32 100644
--- a/src/vm/i386/umthunkstub.S
+++ b/src/vm/i386/umthunkstub.S
@@ -10,19 +10,11 @@
// eax = UMEntryThunk*
//
NESTED_ENTRY TheUMEntryPrestub, _TEXT, UnhandledExceptionHandlerUnix
- // Preserve argument registers
- push ecx
- push edx
-
push eax // UMEntryThunk*
call C_FUNC(TheUMEntryPrestubWorker)
- pop edx
+ add esp, 4
// eax = PCODE
- // Restore argument registers
- pop edx
- pop ecx
-
jmp eax // Tail Jmp
NESTED_END TheUMEntryPrestub, _TEXT
@@ -33,11 +25,10 @@ NESTED_ENTRY UMThunkStub, _TEXT, UnhandledExceptionHandlerUnix
#define UMThunkStub_SAVEDREG (3*4) // ebx, esi, edi
#define UMThunkStub_LOCALVARS (2*4) // UMEntryThunk*, Thread*
-#define UMThunkStub_INT_ARG_SPILL (2*4) // for save ecx, edx
#define UMThunkStub_UMENTRYTHUNK_OFFSET (UMThunkStub_SAVEDREG+4)
#define UMThunkStub_THREAD_OFFSET (UMThunkStub_UMENTRYTHUNK_OFFSET+4)
#define UMThunkStub_INT_ARG_OFFSET (UMThunkStub_THREAD_OFFSET+4)
-#define UMThunkStub_FIXEDALLOCSIZE (UMThunkStub_LOCALVARS+UMThunkStub_INT_ARG_SPILL)
+#define UMThunkStub_FIXEDALLOCSIZE (UMThunkStub_LOCALVARS+4) // extra 4 is for stack alignment
// return address <-- entry ESP
// saved ebp <-- EBP
@@ -46,8 +37,7 @@ NESTED_ENTRY UMThunkStub, _TEXT, UnhandledExceptionHandlerUnix
// saved edi
// UMEntryThunk*
// Thread*
-// save ecx
-// save edx
+// dummy 4 byte for 16 byte stack alignment
// {optional stack args passed to callee} <-- new esp
PROLOG_BEG
@@ -57,9 +47,6 @@ NESTED_ENTRY UMThunkStub, _TEXT, UnhandledExceptionHandlerUnix
PROLOG_END
sub esp, UMThunkStub_FIXEDALLOCSIZE
- mov dword ptr [ebp - UMThunkStub_INT_ARG_OFFSET], ecx
- mov dword ptr [ebp - UMThunkStub_INT_ARG_OFFSET - 0x04], edx
-
mov dword ptr [ebp - UMThunkStub_UMENTRYTHUNK_OFFSET], eax
call C_FUNC(GetThread)
@@ -104,9 +91,6 @@ LOCAL_LABEL(InCooperativeMode):
LOCAL_LABEL(UMThunkStub_ArgumentsSetup):
- mov ecx, dword ptr [ebp - UMThunkStub_INT_ARG_OFFSET]
- mov edx, dword ptr [ebp - UMThunkStub_INT_ARG_OFFSET - 0x04]
-
mov eax, dword ptr [ebp - UMThunkStub_UMENTRYTHUNK_OFFSET]
mov ebx, dword ptr [eax + UMEntryThunk__m_pUMThunkMarshInfo]
mov ebx, dword ptr [ebx + UMThunkMarshInfo__m_pILStub]
@@ -139,32 +123,44 @@ LOCAL_LABEL(InvalidTransition):
LOCAL_LABEL(DoTrapReturningThreadsTHROW):
// extern "C" VOID STDCALL UMThunkStubRareDisableWorker(Thread *pThread, UMEntryThunk *pUMEntryThunk)
+ sub esp, (2*4) // add padding to ensure 16 byte stack alignment
mov eax, dword ptr [ebp - UMThunkStub_UMENTRYTHUNK_OFFSET]
push eax
mov eax, dword ptr [ebp - UMThunkStub_THREAD_OFFSET]
push eax
call C_FUNC(UMThunkStubRareDisableWorker)
+ add esp, (2*4) // restore to before stack alignment
jmp LOCAL_LABEL(InCooperativeMode)
LOCAL_LABEL(UMThunkStub_CopyStackArgs):
- // eax = m_cbActualArgSize
+ // eax = m_cbActualArgSize, in bytes
+ // esi = src
+ // edi = dest
+ // ebx = scratch
+ lea esi, [ebp + 0x08]
+
+ // first [esi] goes to ecx, in LTR
+ add eax, -4
+ mov ecx, dword ptr [esi]
+ jz LOCAL_LABEL(UMThunkStub_ArgumentsSetup)
+
+ // second [esi+04] goes to edx
+ add eax, -4
+ mov edx, dword ptr [esi + 0x04]
+ jz LOCAL_LABEL(UMThunkStub_ArgumentsSetup)
+
sub esp, eax
and esp, -16 // align with 16 byte
- lea esi, [ebp + 0x08]
lea edi, [esp]
LOCAL_LABEL(CopyLoop):
- // eax = number of bytes
- // esi = src
- // edi = dest
- // edx = sratch
-
+ // copy rest of the arguments to [esp+08+n], in RTL
add eax, -4
- mov edx, dword ptr [esi + eax]
- mov dword ptr [edi + eax], edx
+ mov ebx, dword ptr [esi + 0x08 + eax]
+ mov dword ptr [edi + eax], ebx
jnz LOCAL_LABEL(CopyLoop)
jmp LOCAL_LABEL(UMThunkStub_ArgumentsSetup)
diff --git a/src/vm/i386/unixstubs.cpp b/src/vm/i386/unixstubs.cpp
index 9fe7127946..c0c0982e71 100644
--- a/src/vm/i386/unixstubs.cpp
+++ b/src/vm/i386/unixstubs.cpp
@@ -6,7 +6,7 @@
extern "C"
{
- void ThrowControlForThread()
+ void ThrowControlForThread(FaultingExceptionFrame *pfef)
{
PORTABILITY_ASSERT("Implement for PAL");
}
@@ -45,19 +45,6 @@ extern "C"
{
}
- _Unwind_Reason_Code
- UnhandledExceptionHandlerUnix(
- IN int version,
- IN _Unwind_Action action,
- IN uint64_t exceptionClass,
- IN struct _Unwind_Exception *exception,
- IN struct _Unwind_Context *context
- )
- {
- PORTABILITY_ASSERT("UnhandledExceptionHandlerUnix");
- return _URC_FATAL_PHASE1_ERROR;
- }
-
BOOL CallRtlUnwind()
{
PORTABILITY_ASSERT("CallRtlUnwind");
@@ -70,16 +57,6 @@ VOID __cdecl PopSEHRecords(LPVOID pTargetSP)
PORTABILITY_ASSERT("Implement for PAL");
}
-EXTERN_C VOID SinglecastDelegateInvokeStub()
-{
- PORTABILITY_ASSERT("SinglecastDelegateInvokeStub");
-}
-
-EXTERN_C VOID ResolveWorkerChainLookupAsmStub()
-{
- PORTABILITY_ASSERT("ResolveWorkerChainLookupAsmStub");
-}
-
EXTERN_C VOID BackPatchWorkerAsmStub()
{
PORTABILITY_ASSERT("BackPatchWorkerAsmStub");
@@ -104,3 +81,15 @@ EXTERN_C VOID JIT_TailCallLeave()
{
PORTABILITY_ASSERT("JIT_TailCallLeave");
}
+
+PTR_CONTEXT GetCONTEXTFromRedirectedStubStackFrame(T_DISPATCHER_CONTEXT * pDispatcherContext)
+{
+ PORTABILITY_ASSERT("GetCONTEXTFromRedirectedStubStackFrame");
+ return NULL;
+}
+
+FaultingExceptionFrame *GetFrameFromRedirectedStubStackFrame(DISPATCHER_CONTEXT *pDispatcherContext)
+{
+ PORTABILITY_ASSERT("GetFrameFromRedirectedStubStackFrame");
+ return NULL;
+}
diff --git a/src/vm/jitinterface.cpp b/src/vm/jitinterface.cpp
index 2f9db3d596..5afb89bd4b 100644
--- a/src/vm/jitinterface.cpp
+++ b/src/vm/jitinterface.cpp
@@ -2286,6 +2286,59 @@ BOOL CEEInfo::checkMethodModifier(CORINFO_METHOD_HANDLE hMethod,
}
/*********************************************************************/
+static unsigned ComputeGCLayout(MethodTable * pMT, BYTE* gcPtrs)
+{
+ STANDARD_VM_CONTRACT;
+
+ unsigned result = 0;
+
+ _ASSERTE(pMT->IsValueType());
+
+ // TODO: TypedReference should ideally be implemented as a by-ref-like struct containing a ByReference<T> field, in which
+ // case the check for g_TypedReferenceMT below would not be necessary
+ if (pMT == g_TypedReferenceMT || pMT->HasSameTypeDefAs(g_pByReferenceClass))
+ {
+ if (gcPtrs[0] == TYPE_GC_NONE)
+ {
+ gcPtrs[0] = TYPE_GC_BYREF;
+ result++;
+ }
+ else if (gcPtrs[0] != TYPE_GC_BYREF)
+ {
+ COMPlusThrowHR(COR_E_BADIMAGEFORMAT);
+ }
+ return result;
+ }
+
+ ApproxFieldDescIterator fieldIterator(pMT, ApproxFieldDescIterator::INSTANCE_FIELDS);
+ for (FieldDesc *pFD = fieldIterator.Next(); pFD != NULL; pFD = fieldIterator.Next())
+ {
+ int fieldStartIndex = pFD->GetOffset() / sizeof(void*);
+
+ if (pFD->GetFieldType() != ELEMENT_TYPE_VALUETYPE)
+ {
+ if (pFD->IsObjRef())
+ {
+ if (gcPtrs[fieldStartIndex] == TYPE_GC_NONE)
+ {
+ gcPtrs[fieldStartIndex] = TYPE_GC_REF;
+ result++;
+ }
+ else if (gcPtrs[fieldStartIndex] != TYPE_GC_REF)
+ {
+ COMPlusThrowHR(COR_E_BADIMAGEFORMAT);
+ }
+ }
+ }
+ else
+ {
+ MethodTable * pFieldMT = pFD->GetApproxFieldTypeHandleThrowing().AsMethodTable();
+ result += ComputeGCLayout(pFieldMT, gcPtrs + fieldStartIndex);
+ }
+ }
+ return result;
+}
+
unsigned CEEInfo::getClassGClayout (CORINFO_CLASS_HANDLE clsHnd, BYTE* gcPtrs)
{
CONTRACTL {
@@ -2305,6 +2358,8 @@ unsigned CEEInfo::getClassGClayout (CORINFO_CLASS_HANDLE clsHnd, BYTE* gcPtrs)
if (pMT->IsByRefLike())
{
+ // TODO: TypedReference should ideally be implemented as a by-ref-like struct containing a ByReference<T> field, in
+ // which case the check for g_TypedReferenceMT below would not be necessary
if (pMT == g_TypedReferenceMT)
{
gcPtrs[0] = TYPE_GC_BYREF;
@@ -2313,10 +2368,12 @@ unsigned CEEInfo::getClassGClayout (CORINFO_CLASS_HANDLE clsHnd, BYTE* gcPtrs)
}
else
{
- // TODO-SPAN: Proper GC reporting
memset(gcPtrs, TYPE_GC_NONE,
- (VMClsHnd.GetSize() + sizeof(void*) -1)/ sizeof(void*));
- result = 0;
+ (VMClsHnd.GetSize() + sizeof(void*) - 1) / sizeof(void*));
+ // Note: This case is more complicated than the TypedReference case
+ // due to ByRefLike structs being included as fields in other value
+ // types (TypedReference can not be.)
+ result = ComputeGCLayout(VMClsHnd.AsMethodTable(), gcPtrs);
}
}
else if (VMClsHnd.IsNativeValueType())
@@ -5115,6 +5172,14 @@ void CEEInfo::getCallInfo(
{
// Pretend this was a "constrained. UnderlyingType" instruction prefix
constrainedType = TypeHandle(MscorlibBinder::GetElementType(constrainedType.GetVerifierCorElementType()));
+
+ // Native image signature encoder will use this field. It needs to match that pretended type, a bogus signature
+ // would be produced otherwise.
+ pConstrainedResolvedToken->hClass = (CORINFO_CLASS_HANDLE)constrainedType.AsPtr();
+
+ // Clear the token and typespec because of they do not match hClass anymore.
+ pConstrainedResolvedToken->token = mdTokenNil;
+ pConstrainedResolvedToken->pTypeSpec = NULL;
}
}
@@ -7079,6 +7144,16 @@ bool getILIntrinsicImplementationForUnsafe(MethodDesc * ftn,
methInfo->options = (CorInfoOptions)0;
return true;
}
+ else if (tk == MscorlibBinder::GetMethod(METHOD__UNSAFE__BYREF_INIT_BLOCK_UNALIGNED)->GetMemberDef())
+ {
+ static const BYTE ilcode[] = { CEE_LDARG_0, CEE_LDARG_1, CEE_LDARG_2, CEE_PREFIX1, (CEE_UNALIGNED & 0xFF), 0x01, CEE_PREFIX1, (CEE_INITBLK & 0xFF), CEE_RET };
+ methInfo->ILCode = const_cast<BYTE*>(ilcode);
+ methInfo->ILCodeSize = sizeof(ilcode);
+ methInfo->maxStack = 3;
+ methInfo->EHcount = 0;
+ methInfo->options = (CorInfoOptions)0;
+ return true;
+ }
return false;
}
@@ -8764,6 +8839,29 @@ CorInfoIntrinsics CEEInfo::getIntrinsicID(CORINFO_METHOD_HANDLE methodHnd,
{
result = ECall::GetIntrinsicID(method);
}
+ else
+ {
+ MethodTable * pMT = method->GetMethodTable();
+ if (pMT->IsByRefLike() && pMT->GetModule()->IsSystem())
+ {
+ if (pMT->HasSameTypeDefAs(g_pByReferenceClass))
+ {
+ // ByReference<T> has just two methods: constructor and Value property
+ if (method->IsCtor())
+ {
+ result = CORINFO_INTRINSIC_ByReference_Ctor;
+ }
+ else
+ {
+ _ASSERTE(strcmp(method->GetName(), "get_Value") == 0);
+ result = CORINFO_INTRINSIC_ByReference_Value;
+ }
+ *pMustExpand = true;
+ }
+
+ // TODO-SPAN: Span<T> intrinsics for optimizations
+ }
+ }
EE_TO_JIT_TRANSITION();
@@ -9017,10 +9115,15 @@ CorInfoType CEEInfo::getFieldTypeInternal (CORINFO_FIELD_HANDLE fieldHnd,
// <REVISIT_TODO>TODO should not burn the time to do this for anything but Value Classes</REVISIT_TODO>
_ASSERTE(type != ELEMENT_TYPE_BYREF);
- // For verifying code involving generics, use the class instantiation
- // of the optional owner (to provide exact, not representative,
- // type information)
- SigTypeContext typeContext(field, (TypeHandle) owner);
+ if (type == ELEMENT_TYPE_I)
+ {
+ PTR_MethodTable enclosingMethodTable = field->GetApproxEnclosingMethodTable();
+ if (enclosingMethodTable->IsByRefLike() && enclosingMethodTable->HasSameTypeDefAs(g_pByReferenceClass))
+ {
+ _ASSERTE(field->GetOffset() == 0);
+ return CORINFO_TYPE_BYREF;
+ }
+ }
if (!CorTypeInfo::IsPrimitiveType(type))
{
@@ -9030,11 +9133,16 @@ CorInfoType CEEInfo::getFieldTypeInternal (CORINFO_FIELD_HANDLE fieldHnd,
field->GetSig(&sig, &sigCount);
- conv = (CorCallingConvention) CorSigUncompressCallingConv(sig);
+ conv = (CorCallingConvention)CorSigUncompressCallingConv(sig);
_ASSERTE(isCallConv(conv, IMAGE_CEE_CS_CALLCONV_FIELD));
SigPointer ptr(sig, sigCount);
+ // For verifying code involving generics, use the class instantiation
+ // of the optional owner (to provide exact, not representative,
+ // type information)
+ SigTypeContext typeContext(field, (TypeHandle)owner);
+
clsHnd = ptr.GetTypeHandleThrowing(field->GetModule(), &typeContext);
_ASSERTE(!clsHnd.IsNull());
@@ -10882,6 +10990,33 @@ void CEEJitInfo::CompressDebugInfo()
EE_TO_JIT_TRANSITION();
}
+void reservePersonalityRoutineSpace(ULONG &unwindSize)
+{
+#if defined(_TARGET_X86_)
+ // Do nothing
+#elif defined(_TARGET_AMD64_)
+ // Add space for personality routine, it must be 4-byte aligned.
+ // Everything in the UNWIND_INFO up to the variable-sized UnwindCodes
+ // array has already had its size included in unwindSize by the caller.
+ unwindSize += sizeof(ULONG);
+
+ // Note that the count of unwind codes (2 bytes each) is stored as a UBYTE
+ // So the largest size could be 510 bytes, plus the header and language
+ // specific stuff. This can't overflow.
+
+ _ASSERTE(FitsInU4(unwindSize + sizeof(ULONG)));
+ unwindSize = (ULONG)(ALIGN_UP(unwindSize, sizeof(ULONG)));
+#elif defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
+ // The JIT passes in a 4-byte aligned block of unwind data.
+ _ASSERTE(IS_ALIGNED(unwindSize, sizeof(ULONG)));
+
+ // Add space for personality routine, it must be 4-byte aligned.
+ unwindSize += sizeof(ULONG);
+#else
+ PORTABILITY_ASSERT("reservePersonalityRoutineSpace");
+#endif // !defined(_TARGET_AMD64_)
+
+}
// Reserve memory for the method/funclet's unwind information.
// Note that this must be called before allocMem. It should be
// called once for the main method, once for every funclet, and
@@ -10914,27 +11049,7 @@ void CEEJitInfo::reserveUnwindInfo(BOOL isFunclet, BOOL isColdCode, ULONG unwind
ULONG currentSize = unwindSize;
-#if defined(_TARGET_AMD64_)
- // Add space for personality routine, it must be 4-byte aligned.
- // Everything in the UNWIND_INFO up to the variable-sized UnwindCodes
- // array has already had its size included in unwindSize by the caller.
- currentSize += sizeof(ULONG);
-
- // Note that the count of unwind codes (2 bytes each) is stored as a UBYTE
- // So the largest size could be 510 bytes, plus the header and language
- // specific stuff. This can't overflow.
-
- _ASSERTE(FitsInU4(currentSize + sizeof(ULONG)));
- currentSize = (ULONG)(ALIGN_UP(currentSize, sizeof(ULONG)));
-#elif defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
- // The JIT passes in a 4-byte aligned block of unwind data.
- _ASSERTE(IS_ALIGNED(currentSize, sizeof(ULONG)));
-
- // Add space for personality routine, it must be 4-byte aligned.
- currentSize += sizeof(ULONG);
-#else
- PORTABILITY_ASSERT("CEEJitInfo::reserveUnwindInfo");
-#endif // !defined(_TARGET_AMD64_)
+ reservePersonalityRoutineSpace(currentSize);
m_totalUnwindSize += currentSize;
@@ -11019,27 +11134,7 @@ void CEEJitInfo::allocUnwindInfo (
UNWIND_INFO * pUnwindInfo = (UNWIND_INFO *) &(m_theUnwindBlock[m_usedUnwindSize]);
m_usedUnwindSize += unwindSize;
-#if defined(_TARGET_AMD64_)
- // Add space for personality routine, it must be 4-byte aligned.
- // Everything in the UNWIND_INFO up to the variable-sized UnwindCodes
- // array has already had its size included in unwindSize by the caller.
- m_usedUnwindSize += sizeof(ULONG);
-
- // Note that the count of unwind codes (2 bytes each) is stored as a UBYTE
- // So the largest size could be 510 bytes, plus the header and language
- // specific stuff. This can't overflow.
-
- _ASSERTE(FitsInU4(m_usedUnwindSize + sizeof(ULONG)));
- m_usedUnwindSize = (ULONG)(ALIGN_UP(m_usedUnwindSize,sizeof(ULONG)));
-#elif defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
- // The JIT passes in a 4-byte aligned block of unwind data.
- _ASSERTE(IS_ALIGNED(m_usedUnwindSize, sizeof(ULONG)));
-
- // Add space for personality routine, it must be 4-byte aligned.
- m_usedUnwindSize += sizeof(ULONG);
-#else
- PORTABILITY_ASSERT("CEEJitInfo::reserveUnwindInfo");
-#endif
+ reservePersonalityRoutineSpace(m_usedUnwindSize);
_ASSERTE(m_usedUnwindSize <= m_totalUnwindSize);
@@ -11082,7 +11177,7 @@ void CEEJitInfo::allocUnwindInfo (
RUNTIME_FUNCTION__SetBeginAddress(pRuntimeFunction, currentCodeOffset + startOffset);
-#if defined(_TARGET_X86_) || defined(_TARGET_AMD64_)
+#ifdef _TARGET_AMD64_
pRuntimeFunction->EndAddress = currentCodeOffset + endOffset;
#endif
@@ -11102,11 +11197,15 @@ void CEEJitInfo::allocUnwindInfo (
}
#endif // _DEBUG
-#if defined(_TARGET_AMD64_)
-
/* Copy the UnwindBlock */
memcpy(pUnwindInfo, pUnwindBlock, unwindSize);
+#if defined(_TARGET_X86_)
+
+ // Do NOTHING
+
+#elif defined(_TARGET_AMD64_)
+
pUnwindInfo->Flags = UNW_FLAG_EHANDLER | UNW_FLAG_UHANDLER;
ULONG * pPersonalityRoutine = (ULONG*)ALIGN_UP(&(pUnwindInfo->UnwindCode[pUnwindInfo->CountOfUnwindCodes]), sizeof(ULONG));
@@ -11114,9 +11213,6 @@ void CEEJitInfo::allocUnwindInfo (
#elif defined(_TARGET_ARM64_)
- /* Copy the UnwindBlock */
- memcpy(pUnwindInfo, pUnwindBlock, unwindSize);
-
*(LONG *)pUnwindInfo |= (1 << 20); // X bit
ULONG * pPersonalityRoutine = (ULONG*)((BYTE *)pUnwindInfo + ALIGN_UP(unwindSize, sizeof(ULONG)));
@@ -11124,13 +11220,11 @@ void CEEJitInfo::allocUnwindInfo (
#elif defined(_TARGET_ARM_)
- /* Copy the UnwindBlock */
- memcpy(pUnwindInfo, pUnwindBlock, unwindSize);
-
*(LONG *)pUnwindInfo |= (1 << 20); // X bit
ULONG * pPersonalityRoutine = (ULONG*)((BYTE *)pUnwindInfo + ALIGN_UP(unwindSize, sizeof(ULONG)));
*pPersonalityRoutine = (TADDR)ProcessCLRException - baseAddress;
+
#endif
#if defined(_TARGET_AMD64_)
diff --git a/src/vm/jitinterface.h b/src/vm/jitinterface.h
index ee13b9cec6..df9e1d764c 100644
--- a/src/vm/jitinterface.h
+++ b/src/vm/jitinterface.h
@@ -391,7 +391,9 @@ void ValidateWriteBarrierHelpers();
extern "C"
{
+#ifndef WIN64EXCEPTIONS
void STDCALL JIT_EndCatch(); // JIThelp.asm/JIThelp.s
+#endif // _TARGET_X86_
void STDCALL JIT_ByRefWriteBarrier(); // JIThelp.asm/JIThelp.s
diff --git a/src/vm/metasig.h b/src/vm/metasig.h
index a8404615a1..5df7038360 100644
--- a/src/vm/metasig.h
+++ b/src/vm/metasig.h
@@ -32,7 +32,6 @@
// r -- Ref -- a byref
// Ret -- indicates function return type
//
-// PMS -- PermissionSet
// Var -- Variant
//
// b -- Byte -- (unsigned) byte
@@ -306,8 +305,6 @@ DEFINE_METASIG_T(SM(Exception_RetInt, C(EXCEPTION), i))
DEFINE_METASIG_T(SM(ContextBoundObject_RetObj, C(CONTEXT_BOUND_OBJECT), j))
#endif
-DEFINE_METASIG_T(SM(PMS_PMS_RetInt, C(PERMISSION_SET) C(PERMISSION_SET), i))
-
DEFINE_METASIG(SM(IntPtr_RetVoid, I, v))
DEFINE_METASIG(SM(IntPtr_Bool_RetVoid, I F, v))
DEFINE_METASIG(SM(IntPtr_UInt_IntPtr_RetVoid, I K I, v))
@@ -342,38 +339,6 @@ DEFINE_METASIG_T(SM(RefDateTimeOffset_RefDateTimeNative_RetVoid, r(g(DATE_TIME_O
DEFINE_METASIG_T(SM(RealProxy_Class_RetBool, C(REAL_PROXY) C(CLASS), F))
#endif
-DEFINE_METASIG_T(SM(IPermission_RetPermissionToken, C(IPERMISSION), C(PERMISSION_TOKEN)))
-DEFINE_METASIG_T(SM(FrameSecurityDescriptor_IPermission_PermissionToken_RuntimeMethodHandleInternal_RetBool, \
- C(FRAME_SECURITY_DESCRIPTOR) C(IPERMISSION) C(PERMISSION_TOKEN) g(METHOD_HANDLE_INTERNAL), F))
-DEFINE_METASIG_T(SM(FrameSecurityDescriptor_PMS_OutPMS_RuntimeMethodHandleInternal_RetBool, \
- C(FRAME_SECURITY_DESCRIPTOR) C(PERMISSION_SET) r(C(PERMISSION_SET)) g(METHOD_HANDLE_INTERNAL), F))
-DEFINE_METASIG_T(SM(FrameSecurityDescriptor_RetInt, C(FRAME_SECURITY_DESCRIPTOR), i))
-DEFINE_METASIG_T(SM(DynamicResolver_IPermission_PermissionToken_RuntimeMethodHandleInternal_RetBool, \
- C(DYNAMICRESOLVER) C(IPERMISSION) C(PERMISSION_TOKEN) g(METHOD_HANDLE_INTERNAL), F))
-DEFINE_METASIG_T(SM(DynamicResolver_PMS_OutPMS_RuntimeMethodHandleInternal_RetBool, \
- C(DYNAMICRESOLVER) C(PERMISSION_SET) r(C(PERMISSION_SET)) g(METHOD_HANDLE_INTERNAL), F))
-DEFINE_METASIG_T(SM(PermissionListSet_PMS_PMS_RetPermissionListSet, \
- C(PERMISSION_LIST_SET) C(PERMISSION_SET) C(PERMISSION_SET), C(PERMISSION_LIST_SET)))
-DEFINE_METASIG_T(SM(PMS_IntPtr_RuntimeMethodHandleInternal_Assembly_SecurityAction_RetVoid, C(PERMISSION_SET) I g(METHOD_HANDLE_INTERNAL) C(ASSEMBLY) g(SECURITY_ACTION), v))
-#ifdef FEATURE_COMPRESSEDSTACK
-DEFINE_METASIG_T(SM(CS_PMS_PMS_CodeAccessPermission_PermissionToken_RuntimeMethodHandleInternal_Assembly_SecurityAction_RetVoid, \
- C(COMPRESSED_STACK) C(PERMISSION_SET) C(PERMISSION_SET) C(CODE_ACCESS_PERMISSION) C(PERMISSION_TOKEN) g(METHOD_HANDLE_INTERNAL) C(ASSEMBLY) g(SECURITY_ACTION), v))
-DEFINE_METASIG_T(SM(CS_PMS_PMS_PMS_RuntimeMethodHandleInternal_Assembly_SecurityAction_RetVoid, C(COMPRESSED_STACK) C(PERMISSION_SET) C(PERMISSION_SET) C(PERMISSION_SET) g(METHOD_HANDLE_INTERNAL) C(ASSEMBLY) g(SECURITY_ACTION), v))
-#else // #ifdef FEATURE_COMPRESSEDSTACK
-DEFINE_METASIG_T(SM(CS_PMS_PMS_CodeAccessPermission_PermissionToken_RuntimeMethodHandleInternal_Assembly_SecurityAction_RetVoid, \
- j C(PERMISSION_SET) C(PERMISSION_SET) C(CODE_ACCESS_PERMISSION) C(PERMISSION_TOKEN) g(METHOD_HANDLE_INTERNAL) C(ASSEMBLY) g(SECURITY_ACTION), v))
-DEFINE_METASIG_T(SM(CS_PMS_PMS_PMS_RuntimeMethodHandleInternal_Assembly_SecurityAction_RetVoid, j C(PERMISSION_SET) C(PERMISSION_SET) C(PERMISSION_SET) g(METHOD_HANDLE_INTERNAL) C(ASSEMBLY) g(SECURITY_ACTION), v))
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-DEFINE_METASIG_T(SM(Evidence_RefInt_Bool_RetPMS, C(EVIDENCE) r(i) F, C(PERMISSION_SET)))
-#ifdef FEATURE_APTCA
-DEFINE_METASIG_T(SM(Assembly_PMS_PMS_RuntimeMethodHandleInternal_SecurityAction_Obj_IPermission_RetVoid, C(ASSEMBLY) C(PERMISSION_SET) C(PERMISSION_SET) g(METHOD_HANDLE_INTERNAL) g(SECURITY_ACTION) j C(IPERMISSION), v))
-#endif // FEATURE_APTCA
-DEFINE_METASIG_T(SM(Evidence_PMS_PMS_PMS_PMS_int_Bool_RetPMS, \
- C(EVIDENCE) C(PERMISSION_SET) C(PERMISSION_SET) C(PERMISSION_SET) r(C(PERMISSION_SET)) r(i) F, C(PERMISSION_SET)))
-DEFINE_METASIG_T(SM(Int_PMS_RetVoid, i C(PERMISSION_SET), v))
-DEFINE_METASIG_T(SM(Int_PMS_Resolver_RetVoid, i C(PERMISSION_SET) C(RESOLVER), v))
-DEFINE_METASIG_T(SM(PMS_RetVoid, C(PERMISSION_SET), v))
-
#ifndef FEATURE_CORECLR
DEFINE_METASIG_T(SM(ExecutionContext_ContextCallback_Object_Bool_RetVoid, \
C(EXECUTIONCONTEXT) C(CONTEXTCALLBACK) j F, v))
@@ -402,7 +367,6 @@ DEFINE_METASIG(SM(ArrByte_RetObj, a(b), j))
DEFINE_METASIG(SM(ArrByte_Bool_RetObj, a(b) F, j))
DEFINE_METASIG(SM(ArrByte_ArrByte_RefObj_RetObj, a(b) a(b) r(j), j))
DEFINE_METASIG_T(SM(PtrSByt_Int_Int_Encoding_RetStr, P(B) i i C(ENCODING), s))
-DEFINE_METASIG_T(SM(ArrObj_Bool_RefArrByte_OutPMS_HostProtectionResource_Bool_RetArrByte, a(j) F r(a(b)) r(C(PERMISSION_SET)) g(HOST_PROTECTION_RESOURCE) F, a(b)))
DEFINE_METASIG_T(SM(Evidence_RetEvidence, C(EVIDENCE), C(EVIDENCE)))
#ifdef FEATURE_CAS_POLICY
DEFINE_METASIG_T(SM(PEFile_Evidence_RetEvidence, C(SAFE_PEFILE_HANDLE) C(EVIDENCE), C(EVIDENCE)))
@@ -413,14 +377,6 @@ DEFINE_METASIG_T(IM(Evidence_RetVoid, C(EVIDENCE), v))
DEFINE_METASIG_T(SM(Void_RetRuntimeTypeHandle, _, g(RT_TYPE_HANDLE)))
DEFINE_METASIG(SM(Void_RetIntPtr, _, I))
-#ifdef FEATURE_CAS_POLICY
-#ifdef FEATURE_NONGENERIC_COLLECTIONS
-DEFINE_METASIG_T(SM(CS_PMS_PMS_ArrayList_ArrayList_RetVoid, \
- C(COMPRESSED_STACK) C(PERMISSION_SET) C(PERMISSION_SET) C(ARRAY_LIST) C(ARRAY_LIST), v))
-#else
-#error Need replacement for GetZoneAndOriginHelper
-#endif // FEATURE_NONGENERIC_COLLECTIONS
-#endif // #ifdef FEATURE_CAS_POLICY
DEFINE_METASIG_T(SM(UInt_UInt_PtrNativeOverlapped_RetVoid, K K P(g(NATIVEOVERLAPPED)), v))
#ifdef FEATURE_REMOTING
DEFINE_METASIG_T(SM(CrossContextDelegate_ArrObj_RetObj, C(CROSS_CONTEXT_DELEGATE) a(j), j))
@@ -526,15 +482,8 @@ DEFINE_METASIG_T(IM(Obj_Obj_BindingFlags_Binder_CultureInfo_RetVoid, j j g(BINDI
DEFINE_METASIG_T(IM(Obj_Obj_BindingFlags_Binder_ArrObj_CultureInfo_RetVoid, j j g(BINDING_FLAGS) C(BINDER) a(j) C(CULTURE_INFO), v))
DEFINE_METASIG_T(IM(Obj_BindingFlags_Binder_ArrObj_CultureInfo_RetObj, j g(BINDING_FLAGS) C(BINDER) a(j) C(CULTURE_INFO), j))
DEFINE_METASIG_T(IM(Obj_Type_CultureInfo_RetObj, j C(TYPE) C(CULTURE_INFO), j))
-DEFINE_METASIG_T(IM(IPrincipal_RetVoid, C(IPRINCIPAL), v))
DEFINE_METASIG_T(IM(MemberInfo_RetVoid, C(MEMBER), v))
DEFINE_METASIG(IM(IntPtr_ArrObj_Obj_RefArrObj_RetObj, I a(j) j r(a(j)), j))
-DEFINE_METASIG_T(IM(CodeAccessPermission_RetBool, C(CODE_ACCESS_PERMISSION), F))
-DEFINE_METASIG_T(IM(IPermission_RetIPermission, C(IPERMISSION), C(IPERMISSION)))
-DEFINE_METASIG_T(IM(IPermission_RetBool, C(IPERMISSION), F))
-DEFINE_METASIG_T(IM(PMS_RetVoid, C(PERMISSION_SET), v))
-DEFINE_METASIG_T(IM(PMS_RetPMS, C(PERMISSION_SET), C(PERMISSION_SET)))
-DEFINE_METASIG_T(IM(PMS_RetBool, C(PERMISSION_SET), F))
DEFINE_METASIG(IM(RefObject_RetBool, r(j), F))
DEFINE_METASIG_T(IM(Class_RetObj, C(CLASS), j))
DEFINE_METASIG(IM(Int_VoidPtr_RetVoid, i P(v), v))
@@ -592,7 +541,6 @@ DEFINE_METASIG_T(IM(BindingFlags_RetArrMemberInfo, g(BINDING_FLAGS), a(C(MEMBER)
DEFINE_METASIG_T(IM(BindingFlags_RetArrMethodInfo, g(BINDING_FLAGS), a(C(METHOD_INFO))))
DEFINE_METASIG_T(IM(BindingFlags_RetArrPropertyInfo, g(BINDING_FLAGS), a(C(PROPERTY_INFO))))
DEFINE_METASIG(IM(ArrByte_RetVoid, a(b), v))
-DEFINE_METASIG_T(IM(ArrByte_HostProtectionResource_HostProtectionResource_RetBool, a(b) g(HOST_PROTECTION_RESOURCE) g(HOST_PROTECTION_RESOURCE), F))
DEFINE_METASIG(IM(ArrChar_RetVoid, a(u), v))
DEFINE_METASIG(IM(ArrChar_Int_Int_RetVoid, a(u) i i, v))
DEFINE_METASIG_T(IM(ArrType_ArrException_Str_RetVoid, a(C(TYPE)) a(C(EXCEPTION)) s, v))
@@ -602,10 +550,6 @@ DEFINE_METASIG_T(IM(RuntimeType_RetVoid, C(CLASS) , v))
DEFINE_METASIG_T(SM(ArrException_PtrInt_RetVoid, a(C(EXCEPTION)) P(i), v))
DEFINE_METASIG_T(IM(RuntimeArgumentHandle_PtrVoid_RetVoid, g(ARGUMENT_HANDLE) P(v), v))
-DEFINE_METASIG_T(IM(SecurityPermissionFlag_RetVoid, g(SECURITY_PERMISSION_FLAG), v))
-DEFINE_METASIG_T(IM(PermissionState_RetVoid, g(PERMISSION_STATE), v))
-DEFINE_METASIG_T(IM(SecurityAction_RetVoid, g(SECURITY_ACTION), v))
-DEFINE_METASIG_T(IM(ReflectionPermissionFlag_RetVoid, g(REFLECTION_PERMISSION_FLAG), v))
DEFINE_METASIG_T(IM(LicenseInteropHelper_GetCurrentContextInfo, r(i) r(I) g(RT_TYPE_HANDLE), v))
DEFINE_METASIG(IM(LicenseInteropHelper_SaveKeyInCurrentContext, I, v))
DEFINE_METASIG_T(SM(LicenseInteropHelper_AllocateAndValidateLicense, g(RT_TYPE_HANDLE) I i, j))
@@ -642,8 +586,6 @@ DEFINE_METASIG(SM(Obj_OutStr_OutStr_OutArrStr_OutArrObj_RetObj, j r(s) r(s) r(a(
// Execution Context
DEFINE_METASIG_T(SM(SyncCtx_ArrIntPtr_Bool_Int_RetInt, C(SYNCHRONIZATION_CONTEXT) a(I) F i, i))
#endif // #ifdef FEATURE_SYNCHRONIZATIONCONTEXT_WAIT
-// HostProtectionException
-DEFINE_METASIG_T(IM(HPR_HPR_RetVoid, g(HOST_PROTECTION_RESOURCE) g(HOST_PROTECTION_RESOURCE), v))
#ifdef FEATURE_COMINTEROP
// The signature of the method System.Runtime.InteropServices.ICustomQueryInterface.GetInterface
diff --git a/src/vm/method.cpp b/src/vm/method.cpp
index 7afe0e9de2..07636d6950 100644
--- a/src/vm/method.cpp
+++ b/src/vm/method.cpp
@@ -2466,7 +2466,18 @@ MethodDesc* Entry2MethodDesc(PCODE entryPoint, MethodTable *pMT)
BOOL MethodDesc::IsFCallOrIntrinsic()
{
WRAPPER_NO_CONTRACT;
- return (IsFCall() || IsArray());
+
+ if (IsFCall() || IsArray())
+ return TRUE;
+
+#ifdef FEATURE_SPAN_OF_T
+ // Intrinsic methods on ByReference<T> or Span<T>
+ MethodTable * pMT = GetMethodTable();
+ if (pMT->IsByRefLike() && pMT->GetModule()->IsSystem())
+ return TRUE;
+#endif
+
+ return FALSE;
}
//*******************************************************************************
diff --git a/src/vm/methodtable.cpp b/src/vm/methodtable.cpp
index 52a2ce4d98..6fee50b9b1 100644
--- a/src/vm/methodtable.cpp
+++ b/src/vm/methodtable.cpp
@@ -2404,6 +2404,12 @@ bool MethodTable::ClassifyEightBytesWithManagedLayout(SystemVStructRegisterPassi
FieldDesc *pField = GetApproxFieldDescListRaw();
FieldDesc *pFieldEnd = pField + numIntroducedFields;
+ // System types are loaded before others, so ByReference<T> would be loaded before Span<T> or any other type that has a
+ // ByReference<T> field. ByReference<T> is the first by-ref-like system type to be loaded (see
+ // SystemDomain::LoadBaseSystemClasses), so if the current method table is marked as by-ref-like and g_pByReferenceClass is
+ // null, it must be the initial load of ByReference<T>.
+ bool isThisByReferenceOfT = IsByRefLike() && (g_pByReferenceClass == nullptr || HasSameTypeDefAs(g_pByReferenceClass));
+
for (; pField < pFieldEnd; pField++)
{
#ifdef _DEBUG
@@ -2425,7 +2431,19 @@ bool MethodTable::ClassifyEightBytesWithManagedLayout(SystemVStructRegisterPassi
CorElementType fieldType = pField->GetFieldType();
- SystemVClassificationType fieldClassificationType = CorInfoType2UnixAmd64Classification(fieldType);
+ SystemVClassificationType fieldClassificationType;
+ if (isThisByReferenceOfT)
+ {
+ // ByReference<T> is a special type whose single IntPtr field holds a by-ref potentially interior pointer to GC
+ // memory, so classify its field as such
+ _ASSERTE(numIntroducedFields == 1);
+ _ASSERTE(fieldType == CorElementType::ELEMENT_TYPE_I);
+ fieldClassificationType = SystemVClassificationTypeIntegerByRef;
+ }
+ else
+ {
+ fieldClassificationType = CorInfoType2UnixAmd64Classification(fieldType);
+ }
#ifdef _DEBUG
LPCUTF8 fieldName;
diff --git a/src/vm/methodtablebuilder.cpp b/src/vm/methodtablebuilder.cpp
index 682268eb39..303edc4683 100644
--- a/src/vm/methodtablebuilder.cpp
+++ b/src/vm/methodtablebuilder.cpp
@@ -4222,6 +4222,17 @@ VOID MethodTableBuilder::InitializeFieldDescs(FieldDesc *pFieldDescList,
// Inherit IsByRefLike characteristic from fields
if (!IsSelfRef(pByValueClass) && pByValueClass->IsByRefLike())
{
+ if (fIsStatic)
+ {
+ // By-ref-like types cannot be used for static fields
+ BuildMethodTableThrowException(IDS_CLASSLOAD_BYREFLIKE_STATICFIELD);
+ }
+ if (!IsValueClass())
+ {
+ // Non-value-classes cannot contain by-ref-like instance fields
+ BuildMethodTableThrowException(IDS_CLASSLOAD_BYREFLIKE_NOTVALUECLASSFIELD);
+ }
+
bmtFP->fIsByRefLikeType = true;
}
@@ -10216,6 +10227,14 @@ void MethodTableBuilder::CheckForSystemTypes()
if (GetCl() == g_pByReferenceClass->GetCl())
{
pMT->SetIsByRefLike();
+#ifdef _TARGET_X86_
+ // x86 by default treats the type of ByReference<T> as the actual type of its IntPtr field, see calls to
+ // ComputeInternalCorElementTypeForValueType in this file. This is a special case where the struct needs to be
+ // treated as a value type so that its field can be considered as a by-ref pointer.
+ _ASSERTE(pMT->GetFlag(MethodTable::enum_flag_Category_Mask) == MethodTable::enum_flag_Category_PrimitiveValueType);
+ pMT->ClearFlag(MethodTable::enum_flag_Category_Mask);
+ pMT->SetInternalCorElementType(ELEMENT_TYPE_VALUETYPE);
+#endif
return;
}
#endif
@@ -10278,6 +10297,14 @@ void MethodTableBuilder::CheckForSystemTypes()
else if (strcmp(name, g_ByReferenceName) == 0)
{
pMT->SetIsByRefLike();
+#ifdef _TARGET_X86_
+ // x86 by default treats the type of ByReference<T> as the actual type of its IntPtr field, see calls to
+ // ComputeInternalCorElementTypeForValueType in this file. This is a special case where the struct needs to be
+ // treated as a value type so that its field can be considered as a by-ref pointer.
+ _ASSERTE(pMT->GetFlag(MethodTable::enum_flag_Category_Mask) == MethodTable::enum_flag_Category_PrimitiveValueType);
+ pMT->ClearFlag(MethodTable::enum_flag_Category_Mask);
+ pMT->SetInternalCorElementType(ELEMENT_TYPE_VALUETYPE);
+#endif
}
#endif
else if (strcmp(name, g_ArgIteratorName) == 0)
diff --git a/src/vm/mscorlib.cpp b/src/vm/mscorlib.cpp
index 7681028653..6fb2663795 100644
--- a/src/vm/mscorlib.cpp
+++ b/src/vm/mscorlib.cpp
@@ -27,16 +27,12 @@
#include "arraynative.h"
#include "stringnative.h"
#include "stringbuffer.h"
-#include "securityimperative.h"
-#include "securitystackwalk.h"
#include "objectnative.h"
#include "comdelegate.h"
#include "customattribute.h"
#include "comdynamic.h"
#include "commethodrental.h"
-#ifndef FEATURE_LEGACYSURFACEAREA
#include "nlsinfo.h"
-#endif
#include "calendardata.h"
#include "commodule.h"
#include "marshalnative.h"
@@ -73,34 +69,16 @@
#include "reflectioninvocation.h"
#include "managedmdimport.hpp"
#include "synchronizationcontextnative.h"
-#include "newcompressedstack.h"
#include "commemoryfailpoint.h"
#include "typestring.h"
#include "comdependenthandle.h"
#include "weakreferencenative.h"
#include "varargsnative.h"
-#ifndef FEATURE_CORECLR
-#include "confighelper.h"
-#include "console.h"
-#endif
-
#ifdef MDA_SUPPORTED
#include "mdaassistants.h"
#endif
-#ifdef FEATURE_CRYPTO
-#include "cryptography.h"
-#endif // FEATURE_CRYPTO
-
-#ifndef FEATURE_CORECLR
-#include "securityprincipal.h"
-#endif // !FEATURE_CORECLR
-
-#ifdef FEATURE_X509
-#include "x509certificate.h"
-#endif // FEATURE_X509
-
#include "coverage.h"
#ifdef FEATURE_COMINTEROP
diff --git a/src/vm/mscorlib.h b/src/vm/mscorlib.h
index 20d658b2e1..78eab6c7d3 100644
--- a/src/vm/mscorlib.h
+++ b/src/vm/mscorlib.h
@@ -82,14 +82,7 @@ DEFINE_FIELD_U(ReflectionOnlyAssemblyResolve, AppDomainBaseObject, m_pReflectio
#ifdef FEATURE_REMOTING
DEFINE_FIELD_U(_DefaultContext, AppDomainBaseObject, m_pDefaultContext)
#endif
-#if defined(FEATURE_CLICKONCE)
-DEFINE_FIELD_U(_activationContext, AppDomainBaseObject, m_pActivationContext)
-DEFINE_FIELD_U(_applicationIdentity, AppDomainBaseObject, m_pApplicationIdentity)
-#endif
DEFINE_FIELD_U(_applicationTrust, AppDomainBaseObject, m_pApplicationTrust)
-#ifdef FEATURE_IMPERSONATION
-DEFINE_FIELD_U(_DefaultPrincipal, AppDomainBaseObject, m_pDefaultPrincipal)
-#endif // FEATURE_IMPERSONATION
#ifdef FEATURE_REMOTING
DEFINE_FIELD_U(_RemotingData, AppDomainBaseObject, m_pURITable)
#endif
@@ -104,9 +97,6 @@ DEFINE_FIELD_U(_compatFlags, AppDomainBaseObject, m_compatFlags)
DEFINE_FIELD_U(_firstChanceException, AppDomainBaseObject, m_pFirstChanceExceptionHandler)
#endif // FEATURE_EXCEPTION_NOTIFICATIONS
DEFINE_FIELD_U(_pDomain, AppDomainBaseObject, m_pDomain)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_FIELD_U(_PrincipalPolicy, AppDomainBaseObject, m_iPrincipalPolicy)
-#endif
DEFINE_FIELD_U(_HasSetPolicy, AppDomainBaseObject, m_bHasSetPolicy)
DEFINE_FIELD_U(_IsFastFullTrustDomain, AppDomainBaseObject, m_bIsFastFullTrustDomain)
DEFINE_FIELD_U(_compatFlagsInitialized, AppDomainBaseObject, m_compatFlagsInitialized)
@@ -135,9 +125,6 @@ DEFINE_METHOD(APP_DOMAIN, SET_DOMAIN_CONTEXT, InternalSetDomainCon
#endif // FEATURE_FUSION
#ifdef FEATURE_REMOTING
DEFINE_METHOD(APP_DOMAIN, CREATE_DOMAIN, CreateDomain, SM_Str_Evidence_AppDomainSetup_RetAppDomain)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_METHOD(APP_DOMAIN, CREATE_DOMAINEX, CreateDomain, SM_Str_Evidence_Str_Str_Bool_RetAppDomain)
-#endif // FEATURE_CAS_POLICY
DEFINE_METHOD(APP_DOMAIN, VAL_CREATE_DOMAIN, InternalCreateDomain, SM_Str_RetAppDomain)
#endif
#ifdef FEATURE_REMOTING
@@ -152,10 +139,6 @@ DEFINE_METHOD(APP_DOMAIN, TURN_ON_BINDING_REDIRECTS, TurnOnBindingRedi
DEFINE_METHOD(APP_DOMAIN, CREATE_APP_DOMAIN_MANAGER, CreateAppDomainManager, IM_RetVoid)
DEFINE_METHOD(APP_DOMAIN, INITIALIZE_COMPATIBILITY_FLAGS, InitializeCompatibilityFlags, IM_RetVoid)
DEFINE_METHOD(APP_DOMAIN, INITIALIZE_DOMAIN_SECURITY, InitializeDomainSecurity, IM_Evidence_Evidence_Bool_IntPtr_Bool_RetVoid)
-#ifdef FEATURE_CLICKONCE
-DEFINE_METHOD(APP_DOMAIN, SETUP_DEFAULT_CLICKONCE_DOMAIN, SetupDefaultClickOnceDomain, IM_Str_ArrStr_ArrStr_RetVoid)
-DEFINE_METHOD(APP_DOMAIN, ACTIVATE_APPLICATION, ActivateApplication, IM_RetInt)
-#endif // FEATURE_CLICKONCE
#ifdef FEATURE_APTCA
DEFINE_METHOD(APP_DOMAIN, IS_ASSEMBLY_ON_APTCA_VISIBLE_LIST, IsAssemblyOnAptcaVisibleList, IM_Assembly_RetBool)
DEFINE_METHOD(APP_DOMAIN, IS_ASSEMBLY_ON_APTCA_VISIBLE_LIST_RAW, IsAssemblyOnAptcaVisibleListRaw, IM_PtrChar_Int_PtrByte_Int_RetBool)
@@ -180,36 +163,12 @@ DEFINE_FIELD_U(typeKind, TypeNameNative, typeKind)
#endif
-DEFINE_CLASS_U(Policy, ApplicationTrust, ApplicationTrustObject)
-
-#ifdef FEATURE_CLICKONCE
-DEFINE_FIELD_U(m_appId, ApplicationTrustObject, _appId)
-DEFINE_FIELD_U(m_extraInfo, ApplicationTrustObject, _extraInfo)
-DEFINE_FIELD_U(m_elExtraInfo, ApplicationTrustObject, _elExtraInfo)
-#endif // FEATURE_CLICKONCE
-
-DEFINE_FIELD_U(m_psDefaultGrant, ApplicationTrustObject, _psDefaultGrant)
-DEFINE_FIELD_U(m_fullTrustAssemblies, ApplicationTrustObject, _fullTrustAssemblies)
-DEFINE_FIELD_U(m_grantSetSpecialFlags, ApplicationTrustObject, _grantSetSpecialFlags)
-
-#ifdef FEATURE_CLICKONCE
-DEFINE_FIELD_U(m_appTrustedToRun, ApplicationTrustObject, _appTrustedToRun)
-DEFINE_FIELD_U(m_persist, ApplicationTrustObject, _persist)
-#endif // FEATURE_CLICKONCE
-
-DEFINE_CLASS_U(Policy, PolicyStatement, PolicyStatementObject)
-DEFINE_FIELD_U(m_permSet, PolicyStatementObject, _permSet)
-DEFINE_FIELD_U(m_attributes, PolicyStatementObject, _attributes)
-
DEFINE_CLASS(APPDOMAIN_SETUP, System, AppDomainSetup)
DEFINE_CLASS_U(System, AppDomainSetup, AppDomainSetupObject)
DEFINE_FIELD_U(_Entries, AppDomainSetupObject, m_Entries)
DEFINE_FIELD_U(_AppBase, AppDomainSetupObject, m_AppBase)
DEFINE_FIELD_U(_AppDomainInitializer, AppDomainSetupObject, m_AppDomainInitializer)
DEFINE_FIELD_U(_AppDomainInitializerArguments, AppDomainSetupObject, m_AppDomainInitializerArguments)
-#ifdef FEATURE_CLICKONCE
-DEFINE_FIELD_U(_ActivationArguments, AppDomainSetupObject, m_ActivationArguments)
-#endif // FEATURE_CLICKONCE
DEFINE_FIELD_U(_ApplicationTrust, AppDomainSetupObject, m_ApplicationTrust)
DEFINE_FIELD_U(_ConfigurationBytes, AppDomainSetupObject, m_ConfigurationBytes)
DEFINE_FIELD_U(_AppDomainManagerAssembly, AppDomainSetupObject, m_AppDomainManagerAssembly)
@@ -318,11 +277,6 @@ DEFINE_METHOD(ASSEMBLY, ON_MODULE_RESOLVE, OnModuleResolveEvent
DEFINE_METHOD(ASSEMBLY, DEMAND_PERMISSION, DemandPermission, SM_Str_Bool_Int_RetV)
#endif
-#ifdef FEATURE_CAS_POLICY
-DEFINE_CLASS(ASSEMBLY_EVIDENCE_FACTORY, Policy, AssemblyEvidenceFactory)
-DEFINE_METHOD(ASSEMBLY_EVIDENCE_FACTORY, UPGRADE_SECURITY_IDENTITY, UpgradeSecurityIdentity, SM_Evidence_Asm_RetEvidence)
-#endif // FEATURE_CAS_POLICY
-
#ifdef FEATURE_COMINTEROP_REGISTRATION
DEFINE_CLASS(ASSEMBLY_REGISTRATION_FLAGS, Interop, AssemblyRegistrationFlags)
#endif // FEATURE_COMINTEROP_REGISTRATION
@@ -372,8 +326,6 @@ DEFINE_METHOD(CLASS, GET_PROPERTY_INFO, GetPropertyInfo,
DEFINE_CLASS(CLASS_INTROSPECTION_ONLY, System, ReflectionOnlyType)
-DEFINE_CLASS(CODE_ACCESS_PERMISSION, Security, CodeAccessPermission)
-
#ifdef FEATURE_COMINTEROP
DEFINE_CLASS_U(System, __ComObject, ComObject)
DEFINE_FIELD_U(m_ObjectToDataMap, ComObject, m_ObjectToDataMap)
@@ -466,20 +418,6 @@ DEFINE_METHOD(CONTEXT, RESERVE_SLOT, ReserveSlot,
DEFINE_CLASS(CONTEXT_BOUND_OBJECT, System, ContextBoundObject)
#endif
-#ifdef FEATURE_CRYPTO
-DEFINE_CLASS(CSP_PARAMETERS, Cryptography, CspParameters)
-
-DEFINE_FIELD(CSP_PARAMETERS, PROVIDER_TYPE, ProviderType)
-DEFINE_FIELD(CSP_PARAMETERS, PROVIDER_NAME, ProviderName)
-DEFINE_FIELD(CSP_PARAMETERS, KEY_CONTAINER_NAME, KeyContainerName)
-DEFINE_FIELD(CSP_PARAMETERS, FLAGS, m_flags)
-#endif //FEATURE_CRYPTO
-
-#if defined(FEATURE_X509) || defined(FEATURE_CRYPTO)
-DEFINE_CLASS(CRYPTO_EXCEPTION, Cryptography, CryptographicException)
-DEFINE_METHOD(CRYPTO_EXCEPTION, THROW, ThrowCryptographicException, SM_Int_RetVoid)
-#endif // FEATURE_X509 || FEATURE_CRYPTO
-
#ifndef FEATURE_CORECLR
DEFINE_CLASS_U(Globalization, AppDomainSortingSetupInfo, AppDomainSortingSetupInfoObject)
DEFINE_FIELD_U(_pfnIsNLSDefinedString, AppDomainSortingSetupInfoObject, m_pfnIsNLSDefinedString)
@@ -685,11 +623,6 @@ DEFINE_CLASS(EVENT_HANDLERGENERIC, System, EventHandler`1)
DEFINE_CLASS(EVENT_INFO, Reflection, EventInfo)
DEFINE_CLASS(EVIDENCE, Policy, Evidence)
-#ifdef FEATURE_CAS_POLICY
-// .ctor support for ICorRuntimeHost::CreateEvidence
-DEFINE_METHOD(EVIDENCE, CTOR, .ctor, IM_RetVoid)
-DEFINE_METHOD(EVIDENCE, WAS_STRONGNAME_EVIDENCE_USED, WasStrongNameEvidenceUsed, IM_RetBool)
-#endif // FEATURE_CAS_POLICY
DEFINE_CLASS_U(System, Exception, ExceptionObject)
DEFINE_FIELD_U(_className, ExceptionObject, _className)
@@ -788,21 +721,6 @@ DEFINE_FIELD_U(_completedSynchronously, AsyncResultBase, _completedSynchronously
DEFINE_CLASS(FILESTREAM_ASYNCRESULT, IO, FileStreamAsyncResult)
#endif // !FEATURE_CORECLR
-DEFINE_CLASS_U(Security, FrameSecurityDescriptor, FrameSecurityDescriptorBaseObject)
-DEFINE_FIELD_U(m_assertions, FrameSecurityDescriptorBaseObject, m_assertions)
-DEFINE_FIELD_U(m_denials, FrameSecurityDescriptorBaseObject, m_denials)
-DEFINE_FIELD_U(m_restriction, FrameSecurityDescriptorBaseObject, m_restriction)
-DEFINE_FIELD_U(m_AssertFT, FrameSecurityDescriptorBaseObject, m_assertFT)
-DEFINE_FIELD_U(m_assertAllPossible,FrameSecurityDescriptorBaseObject, m_assertAllPossible)
-DEFINE_FIELD_U(m_DeclarativeAssertions, FrameSecurityDescriptorBaseObject, m_DeclarativeAssertions)
-DEFINE_FIELD_U(m_DeclarativeDenials, FrameSecurityDescriptorBaseObject, m_DeclarativeDenials)
-DEFINE_FIELD_U(m_DeclarativeRestrictions, FrameSecurityDescriptorBaseObject, m_DeclarativeRestrictions)
-#ifndef FEATURE_PAL
-DEFINE_FIELD_U(m_callerToken, FrameSecurityDescriptorBaseObject, m_callerToken)
-DEFINE_FIELD_U(m_impToken, FrameSecurityDescriptorBaseObject, m_impToken)
-#endif
-DEFINE_CLASS(FRAME_SECURITY_DESCRIPTOR, Security, FrameSecurityDescriptor)
-
DEFINE_CLASS(GUID, System, Guid)
#ifdef FEATURE_COMINTEROP
@@ -884,10 +802,6 @@ DEFINE_CLASS(IEXPANDO, Expando, IExpando)
DEFINE_METHOD(IEXPANDO, ADD_FIELD, AddField, IM_Str_RetFieldInfo)
DEFINE_METHOD(IEXPANDO, REMOVE_MEMBER, RemoveMember, IM_MemberInfo_RetVoid)
-DEFINE_CLASS(IPERMISSION, Security, IPermission)
-
-DEFINE_CLASS(IPRINCIPAL, Principal, IPrincipal)
-
DEFINE_CLASS(IREFLECT, Reflection, IReflect)
DEFINE_METHOD(IREFLECT, GET_PROPERTIES, GetProperties, IM_BindingFlags_RetArrPropertyInfo)
DEFINE_METHOD(IREFLECT, GET_FIELDS, GetFields, IM_BindingFlags_RetArrFieldInfo)
@@ -1166,66 +1080,6 @@ DEFINE_CLASS(PARAMETER, Reflection, ParameterInfo)
DEFINE_CLASS(PARAMETER_MODIFIER, Reflection, ParameterModifier)
-// Keep this in sync with System.Security.PermissionSet
-DEFINE_CLASS_U(Security, PermissionSet, PermissionSetObject)
-DEFINE_FIELD_U(m_permSet, PermissionSetObject, _permSet)
-DEFINE_FIELD_U(m_Unrestricted, PermissionSetObject, _Unrestricted)
-DEFINE_FIELD_U(m_allPermissionsDecoded, PermissionSetObject, _allPermissionsDecoded)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_FIELD_U(m_canUnrestrictedOverride,PermissionSetObject, _canUnrestrictedOverride)
-#endif // FEATURE_CAS_POLICY
-DEFINE_FIELD_U(m_ignoreTypeLoadFailures, PermissionSetObject, _ignoreTypeLoadFailures)
-DEFINE_FIELD_U(m_CheckedForNonCas, PermissionSetObject, _CheckedForNonCas)
-DEFINE_FIELD_U(m_ContainsCas, PermissionSetObject, _ContainsCas)
-DEFINE_FIELD_U(m_ContainsNonCas, PermissionSetObject, _ContainsNonCas)
-
-DEFINE_CLASS(PERMISSION_SET, Security, PermissionSet)
-DEFINE_METHOD(PERMISSION_SET, CTOR, .ctor, IM_Bool_RetVoid)
-DEFINE_METHOD(PERMISSION_SET, CREATE_SERIALIZED, CreateSerialized, SM_ArrObj_Bool_RefArrByte_OutPMS_HostProtectionResource_Bool_RetArrByte)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_METHOD(PERMISSION_SET, SETUP_SECURITY, SetupSecurity, SM_RetVoid)
-#endif // FEATURE_CAS_POLICY
-#ifdef FEATURE_CAS_POLICY
-DEFINE_METHOD(PERMISSION_SET, DECODE_XML, DecodeXml, IM_ArrByte_HostProtectionResource_HostProtectionResource_RetBool)
-DEFINE_METHOD(PERMISSION_SET, ENCODE_XML, EncodeXml, IM_RetArrByte)
-#endif // FEATURE_CAS_POLICY
-DEFINE_METHOD(PERMISSION_SET, CONTAINS, Contains, IM_IPermission_RetBool)
-DEFINE_METHOD(PERMISSION_SET, DEMAND, Demand, IM_RetVoid)
-DEFINE_METHOD(PERMISSION_SET, DEMAND_NON_CAS, DemandNonCAS, IM_RetVoid)
-DEFINE_METHOD(PERMISSION_SET, IS_UNRESTRICTED, IsUnrestricted, IM_RetBool)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_METHOD(PERMISSION_SET, IS_SUBSET_OF, IsSubsetOf, IM_PMS_RetBool)
-DEFINE_METHOD(PERMISSION_SET, INTERSECT, Intersect, IM_PMS_RetPMS)
-#endif // #ifdef FEATURE_CAS_POLICY
-DEFINE_METHOD(PERMISSION_SET, INPLACE_UNION, InplaceUnion, IM_PMS_RetVoid)
-DEFINE_METHOD(PERMISSION_SET, UNION, Union, IM_PMS_RetPMS)
-DEFINE_METHOD(PERMISSION_SET, IS_EMPTY, IsEmpty, IM_RetBool)
-DEFINE_METHOD(PERMISSION_SET, ADD_PERMISSION, AddPermission, IM_IPermission_RetIPermission)
-
-DEFINE_CLASS(NAMEDPERMISSION_SET, Security, NamedPermissionSet)
-
-#ifdef FEATURE_CAS_POLICY
-DEFINE_CLASS(PEFILE_EVIDENCE_FACTORY, Policy, PEFileEvidenceFactory)
-DEFINE_METHOD(PEFILE_EVIDENCE_FACTORY, CREATE_SECURITY_IDENTITY, CreateSecurityIdentity, SM_PEFile_Evidence_RetEvidence)
-#endif // FEATURE_CAS_POLICY
-
-DEFINE_CLASS_U(Security, PermissionListSet, PermissionListSetObject)
-DEFINE_FIELD_U(m_firstPermSetTriple, PermissionListSetObject, _firstPermSetTriple)
-DEFINE_FIELD_U(m_permSetTriples, PermissionListSetObject, _permSetTriples)
-#ifdef FEATURE_COMPRESSEDSTACK
-DEFINE_FIELD_U(m_zoneList, PermissionListSetObject, _zoneList)
-DEFINE_FIELD_U(m_originList, PermissionListSetObject, _originList)
-#endif // FEAUTRE_COMPRESSEDSTACK
-DEFINE_CLASS(PERMISSION_LIST_SET, Security, PermissionListSet)
-DEFINE_METHOD(PERMISSION_LIST_SET, CTOR, .ctor, IM_RetVoid)
-DEFINE_METHOD(PERMISSION_LIST_SET, CHECK_DEMAND_NO_THROW, CheckDemandNoThrow, IM_CodeAccessPermission_RetBool)
-DEFINE_METHOD(PERMISSION_LIST_SET, CHECK_SET_DEMAND_NO_THROW, CheckSetDemandNoThrow, IM_PMS_RetBool)
-DEFINE_METHOD(PERMISSION_LIST_SET, UPDATE, Update, IM_PMS_RetVoid)
-
-DEFINE_CLASS(PERMISSION_STATE, Permissions, PermissionState)
-
-DEFINE_CLASS(PERMISSION_TOKEN, Security, PermissionToken)
-
DEFINE_CLASS(POINTER, Reflection, Pointer)
DEFINE_CLASS_U(Reflection, Pointer, ReflectionPointer)
@@ -1264,11 +1118,6 @@ DEFINE_METHOD(REAL_PROXY, SUPPORTSINTERFACE, SupportsInterface,
#endif // FEATURE_COMINTEROP
#endif // FEATURE_REMOTING
-DEFINE_CLASS(REFLECTION_PERMISSION, Permissions, ReflectionPermission)
-DEFINE_METHOD(REFLECTION_PERMISSION, CTOR, .ctor, IM_ReflectionPermissionFlag_RetVoid)
-
-DEFINE_CLASS(REFLECTION_PERMISSION_FLAG, Permissions, ReflectionPermissionFlag)
-
#ifdef FEATURE_COMINTEROP_REGISTRATION
DEFINE_CLASS(REGISTRATION_SERVICES, Interop, RegistrationServices)
DEFINE_METHOD(REGISTRATION_SERVICES,REGISTER_ASSEMBLY, RegisterAssembly, IM_AssemblyBase_AssemblyRegistrationFlags_RetBool)
@@ -1356,6 +1205,7 @@ DEFINE_METHOD(UNSAFE, SIZEOF, SizeOf, NoSig)
DEFINE_METHOD(UNSAFE, BYREF_AS, As, NoSig)
DEFINE_METHOD(UNSAFE, BYREF_ADD, Add, NoSig)
DEFINE_METHOD(UNSAFE, BYREF_ARE_SAME, AreSame, NoSig)
+DEFINE_METHOD(UNSAFE, BYREF_INIT_BLOCK_UNALIGNED, InitBlockUnaligned, NoSig)
#endif
DEFINE_CLASS(INTERLOCKED, Threading, Interlocked)
@@ -1386,99 +1236,18 @@ DEFINE_METHOD(SAFE_HANDLE, RELEASE_HANDLE, ReleaseHandle,
DEFINE_METHOD(SAFE_HANDLE, DISPOSE, Dispose, IM_RetVoid)
DEFINE_METHOD(SAFE_HANDLE, DISPOSE_BOOL, Dispose, IM_Bool_RetVoid)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_CLASS(SAFE_PEFILE_HANDLE, SafeHandles, SafePEFileHandle)
-#endif // FEATURE_CAS_POLICY
-
#ifndef FEATURE_CORECLR
DEFINE_CLASS(SAFE_TOKENHANDLE, SafeHandles, SafeAccessTokenHandle)
#endif
DEFINE_CLASS(SAFE_TYPENAMEPARSER_HANDLE, System, SafeTypeNameParserHandle)
-#ifdef FEATURE_COMPRESSEDSTACK
-DEFINE_CLASS(SAFE_CSHANDLE, Threading, SafeCompressedStackHandle)
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-
-
-DEFINE_CLASS(SECURITY_ACTION, Permissions, SecurityAction)
-DEFINE_CLASS(HOST_PROTECTION_RESOURCE, Permissions, HostProtectionResource)
-
-DEFINE_CLASS(SECURITY_ATTRIBUTE, Permissions, SecurityAttribute)
-DEFINE_METHOD(SECURITY_ATTRIBUTE, FIND_SECURITY_ATTRIBUTE_TYPE_HANDLE, FindSecurityAttributeTypeHandle, SM_Str_RetIntPtr)
-
-#ifdef FEATURE_CAS_POLICY
-DEFINE_CLASS(SECURITY_ELEMENT, Security, SecurityElement)
-DEFINE_METHOD(SECURITY_ELEMENT, TO_STRING, ToString, IM_RetStr)
-#endif // FEATURE_CAS_POLICY
-
-DEFINE_CLASS(SECURITY_ENGINE, Security, CodeAccessSecurityEngine)
-DEFINE_METHOD(SECURITY_ENGINE, CHECK_HELPER, CheckHelper, SM_CS_PMS_PMS_CodeAccessPermission_PermissionToken_RuntimeMethodHandleInternal_Assembly_SecurityAction_RetVoid)
-DEFINE_METHOD(SECURITY_ENGINE, CHECK_SET_HELPER, CheckSetHelper, SM_CS_PMS_PMS_PMS_RuntimeMethodHandleInternal_Assembly_SecurityAction_RetVoid)
-#ifdef FEATURE_APTCA
-DEFINE_METHOD(SECURITY_ENGINE, THROW_SECURITY_EXCEPTION, ThrowSecurityException, SM_Assembly_PMS_PMS_RuntimeMethodHandleInternal_SecurityAction_Obj_IPermission_RetVoid)
-#endif // FEATURE_APTCA
-#ifdef FEATURE_CAS_POLICY
-DEFINE_METHOD(SECURITY_ENGINE, RESOLVE_GRANT_SET, ResolveGrantSet, SM_Evidence_RefInt_Bool_RetPMS)
-DEFINE_METHOD(SECURITY_ENGINE, PRE_RESOLVE, PreResolve, SM_RefBool_RefBool_RetVoid)
-#endif // FEATURE_CAS_POLICY
-
-#ifdef FEATURE_PLS
-DEFINE_METHOD(SECURITY_ENGINE, UPDATE_APPDOMAIN_PLS, UpdateAppDomainPLS, SM_PermissionListSet_PMS_PMS_RetPermissionListSet)
-#endif // FEATURE_PLS
-
-#ifdef FEATURE_CAS_POLICY
-#ifdef FEATURE_NONGENERIC_COLLECTIONS
-DEFINE_METHOD(SECURITY_ENGINE, GET_ZONE_AND_ORIGIN_HELPER, GetZoneAndOriginHelper, SM_CS_PMS_PMS_ArrayList_ArrayList_RetVoid)
-#else
-#error Need replacement for GetZoneAndOriginHelper
-#endif // FEATURE_NONGENERIC_COLLECTIONS
-DEFINE_METHOD(SECURITY_ENGINE, REFLECTION_TARGET_DEMAND_HELPER, ReflectionTargetDemandHelper, SM_Int_PMS_RetVoid)
-DEFINE_METHOD(SECURITY_ENGINE, REFLECTION_TARGET_DEMAND_HELPER_WITH_CONTEXT, ReflectionTargetDemandHelper, SM_Int_PMS_Resolver_RetVoid)
-DEFINE_METHOD(SECURITY_ENGINE, CHECK_GRANT_SET_HELPER, CheckGrantSetHelper, SM_PMS_RetVoid)
-#endif // FEATURE_CAS_POLICY
-
DEFINE_CLASS(SECURITY_EXCEPTION, Security, SecurityException)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_METHOD(SECURITY_EXCEPTION, CTOR, .ctor, IM_Str_Type_Str_RetVoid)
-#endif // FEATURE_CAS_POLICY
-
-#ifdef FEATURE_CAS_POLICY
-DEFINE_CLASS(HOST_PROTECTION_EXCEPTION, Security, HostProtectionException)
-DEFINE_METHOD(HOST_PROTECTION_EXCEPTION, CTOR, .ctor, IM_HPR_HPR_RetVoid)
-#endif // FEATURE_CAS_POLICY
-
-DEFINE_CLASS(SECURITY_MANAGER, Security, SecurityManager)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_METHOD(SECURITY_MANAGER, RESOLVE_CAS_POLICY, ResolveCasPolicy, SM_Evidence_PMS_PMS_PMS_PMS_int_Bool_RetPMS)
-#endif
-
-DEFINE_CLASS(SECURITY_PERMISSION, Permissions, SecurityPermission)
-DEFINE_METHOD(SECURITY_PERMISSION, CTOR, .ctor, IM_SecurityPermissionFlag_RetVoid)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_METHOD(SECURITY_PERMISSION, TOXML, ToXml, IM_RetSecurityElement)
-#endif // FEATURE_CAS_POLICY
-
-DEFINE_CLASS(SECURITY_PERMISSION_FLAG,Permissions, SecurityPermissionFlag)
-
-DEFINE_CLASS(SECURITY_RUNTIME, Security, SecurityRuntime)
-DEFINE_METHOD(SECURITY_RUNTIME, FRAME_DESC_HELPER, FrameDescHelper, SM_FrameSecurityDescriptor_IPermission_PermissionToken_RuntimeMethodHandleInternal_RetBool)
-DEFINE_METHOD(SECURITY_RUNTIME, FRAME_DESC_SET_HELPER, FrameDescSetHelper, SM_FrameSecurityDescriptor_PMS_OutPMS_RuntimeMethodHandleInternal_RetBool)
-#ifdef FEATURE_COMPRESSEDSTACK
-DEFINE_METHOD(SECURITY_RUNTIME, CHECK_DYNAMIC_METHOD_HELPER, CheckDynamicMethodHelper, SM_DynamicResolver_IPermission_PermissionToken_RuntimeMethodHandleInternal_RetBool)
-DEFINE_METHOD(SECURITY_RUNTIME, CHECK_DYNAMIC_METHOD_SET_HELPER, CheckDynamicMethodSetHelper, SM_DynamicResolver_PMS_OutPMS_RuntimeMethodHandleInternal_RetBool)
-#endif // FEATURE_COMPRESSEDSTACK
#ifdef FEATURE_REMOTING
DEFINE_CLASS(SERVER_IDENTITY, Remoting, ServerIdentity)
DEFINE_FIELD(SERVER_IDENTITY, SERVER_CONTEXT, _srvCtx)
#endif // FEATURE_REMOTING
-#ifdef FEATURE_COMPRESSEDSTACK
-DEFINE_CLASS(DOMAIN_COMPRESSED_STACK, Threading, DomainCompressedStack)
-DEFINE_METHOD(DOMAIN_COMPRESSED_STACK, CREATE_MANAGED_OBJECT, CreateManagedObject, SM_IntPtr_RetDCS)
-DEFINE_CLASS(COMPRESSED_STACK, Threading, CompressedStack)
-DEFINE_METHOD(COMPRESSED_STACK, RUN, Run, SM_CompressedStack_ContextCallback_Object_RetVoid)
-#endif // FEATURE_COMPRESSEDSTACK
DEFINE_CLASS(SHARED_STATICS, System, SharedStatics)
DEFINE_FIELD(SHARED_STATICS, SHARED_STATICS, _sharedStatics)
@@ -1575,36 +1344,6 @@ DEFINE_METHOD(TCE_EVENT_ITF_INFO, CTOR, .ctor,
DEFINE_CLASS(CONTEXTCALLBACK, Threading, ContextCallback)
-#if defined(FEATURE_IMPERSONATION) || defined(FEATURE_COMPRESSEDSTACK)
-DEFINE_CLASS_U(Security, SecurityContext, SecurityContextObject)
-DEFINE_FIELD_U(_executionContext, SecurityContextObject, _executionContext)
-#if defined(FEATURE_IMPERSONATION)
-DEFINE_FIELD_U(_windowsIdentity, SecurityContextObject, _windowsIdentity)
-#endif
-DEFINE_FIELD_U(_compressedStack, SecurityContextObject, _compressedStack)
-DEFINE_FIELD_U(_disableFlow, SecurityContextObject, _disableFlow)
-DEFINE_FIELD_U(isNewCapture, SecurityContextObject, _isNewCapture)
-DEFINE_CLASS(SECURITYCONTEXT, Security, SecurityContext)
-DEFINE_METHOD(SECURITYCONTEXT, RUN, Run, SM_SecurityContext_ContextCallback_Object_RetVoid)
-#endif // #if defined(FEATURE_IMPERSONATION) || defined(FEATURE_COMPRESSEDSTACK)
-
-#ifndef FEATURE_CORECLR
-DEFINE_CLASS_U(Threading, ExecutionContext, ExecutionContextObject)
-#ifdef FEATURE_CAS_POLICY
-DEFINE_FIELD_U(_hostExecutionContext, ExecutionContextObject, _hostExecutionContext)
-#endif // FEATURE_CAS_POLICY
-DEFINE_FIELD_U(_syncContext, ExecutionContextObject, _syncContext)
-#if defined(FEATURE_IMPERSONATION) || defined(FEATURE_COMPRESSEDSTACK)
-DEFINE_FIELD_U(_securityContext, ExecutionContextObject, _securityContext)
-#endif // #if defined(FEATURE_IMPERSONATION) || defined(FEATURE_COMPRESSEDSTACK)
-#ifdef FEATURE_REMOTING
-DEFINE_FIELD_U(_logicalCallContext, ExecutionContextObject, _logicalCallContext)
-DEFINE_FIELD_U(_illogicalCallContext, ExecutionContextObject, _illogicalCallContext)
-#endif // #ifdef FEATURE_REMOTING
-DEFINE_CLASS(EXECUTIONCONTEXT, Threading, ExecutionContext)
-DEFINE_METHOD(EXECUTIONCONTEXT, RUN, Run, SM_ExecutionContext_ContextCallback_Object_Bool_RetVoid)
-#endif //FEATURE_CORECLR
-
#ifdef _DEBUG
DEFINE_CLASS(STACKCRAWMARK, Threading, StackCrawlMark)
#endif
@@ -1632,9 +1371,6 @@ DEFINE_CLASS(THREAD, Threading, Thread)
DEFINE_FIELD(THREAD, CULTURE, m_CurrentCulture)
DEFINE_FIELD(THREAD, UI_CULTURE, m_CurrentUICulture)
#endif
-#ifdef FEATURE_IMPERSONATION
-DEFINE_METHOD(THREAD, SET_PRINCIPAL_INTERNAL, SetPrincipalInternal, IM_IPrincipal_RetVoid)
-#endif
#ifdef FEATURE_REMOTING
DEFINE_STATIC_PROPERTY(THREAD, CURRENT_CONTEXT, CurrentContext, Context)
#endif
@@ -1678,9 +1414,6 @@ DEFINE_PROPERTY(TYPE, IS_IMPORT, IsImport,
DEFINE_CLASS(TYPE_DELEGATOR, Reflection, TypeDelegator)
-DEFINE_CLASS(UI_PERMISSION, Permissions, UIPermission)
-DEFINE_METHOD(UI_PERMISSION, CTOR, .ctor, IM_PermissionState_RetVoid)
-
DEFINE_CLASS(UNHANDLED_EVENTARGS, System, UnhandledExceptionEventArgs)
DEFINE_METHOD(UNHANDLED_EVENTARGS, CTOR, .ctor, IM_Obj_Bool_RetVoid)
@@ -1713,15 +1446,6 @@ DEFINE_CLASS(VALUE_TYPE, System, ValueType)
DEFINE_CLASS(VARIANT_WRAPPER, Interop, VariantWrapper)
#endif // FEATURE_COMINTEROP
-#ifdef FEATURE_IMPERSONATION
-DEFINE_CLASS(WINDOWS_IDENTITY, Principal, WindowsIdentity)
-DEFINE_METHOD(WINDOWS_IDENTITY, SERIALIZATION_CTOR, .ctor, IM_SerInfo_RetVoid)
-#endif
-#ifdef FEATURE_X509
-DEFINE_CLASS(X509_CERTIFICATE, X509, X509Certificate)
-DEFINE_METHOD(X509_CERTIFICATE, CTOR, .ctor, IM_ArrByte_RetVoid)
-#endif // FEATURE_X509
-
DEFINE_CLASS(GC, System, GC)
DEFINE_METHOD(GC, KEEP_ALIVE, KeepAlive, SM_Obj_RetVoid)
DEFINE_METHOD(GC, COLLECT, Collect, SM_RetVoid)
@@ -2193,28 +1917,6 @@ DEFINE_FIELD_U(_Kind, ContractExceptionObject, _Kind)
DEFINE_FIELD_U(_UserMessage, ContractExceptionObject, _UserMessage)
DEFINE_FIELD_U(_Condition, ContractExceptionObject, _Condition)
-// The COM interfaces for the reflection types.
-#if defined(FEATURE_COMINTEROP) && !defined(FEATURE_CORECLR)
-DEFINE_CLASS(IAPPDOMAIN, System, _AppDomain)
-DEFINE_CLASS(ITYPE, InteropServices, _Type)
-DEFINE_CLASS(IASSEMBLY, InteropServices, _Assembly)
-DEFINE_CLASS(IMEMBERINFO, InteropServices, _MemberInfo)
-DEFINE_CLASS(IMETHODBASE, InteropServices, _MethodBase)
-DEFINE_CLASS(IMETHODINFO, InteropServices, _MethodInfo)
-DEFINE_CLASS(ICONSTRUCTORINFO, InteropServices, _ConstructorInfo)
-DEFINE_CLASS(IFIELDINFO, InteropServices, _FieldInfo)
-DEFINE_CLASS(IPROPERTYINFO, InteropServices, _PropertyInfo)
-DEFINE_CLASS(IEVENTINFO, InteropServices, _EventInfo)
-DEFINE_CLASS(IPARAMETERINFO, InteropServices, _ParameterInfo)
-DEFINE_CLASS(IMODULE, InteropServices, _Module)
-#endif // FEATURE_COMINTEROP && !FEATURE_CORECLR
-
-#ifdef FEATURE_COMPRESSEDSTACK
-DEFINE_CLASS_U(Security, FrameSecurityDescriptorWithResolver, FrameSecurityDescriptorWithResolverBaseObject)
-DEFINE_FIELD_U(m_resolver, FrameSecurityDescriptorWithResolverBaseObject, m_resolver)
-DEFINE_CLASS(FRAME_SECURITY_DESCRIPTOR_WITH_RESOLVER, Security, FrameSecurityDescriptorWithResolver)
-#endif // FEATURE_COMPRESSEDSTACK
-
#ifdef FEATURE_COMINTEROP
DEFINE_CLASS(ASYNC_TRACING_EVENT_ARGS, WindowsFoundationDiag, TracingStatusChangedEventArgs)
DEFINE_CLASS(IASYNC_TRACING_EVENT_ARGS, WindowsFoundationDiag, ITracingStatusChangedEventArgs)
diff --git a/src/vm/multicorejit.cpp b/src/vm/multicorejit.cpp
index 24154a81c7..7660fd1895 100644
--- a/src/vm/multicorejit.cpp
+++ b/src/vm/multicorejit.cpp
@@ -168,7 +168,7 @@ void _MulticoreJitTrace(const char * format, ...)
int len;
len = sprintf_s(buffer, _countof(buffer), "Mcj TID %04x: ", GetCurrentThreadId());
- len += _vsnprintf(buffer + len, _countof(buffer) - len, format, args);
+ len += _vsnprintf_s(buffer + len, _countof(buffer) - len, format, args);
len += sprintf_s(buffer + len, _countof(buffer) - len, ", (time=%d ms)\r\n", GetTickCount() - s_startTick);
OutputDebugStringA(buffer);
diff --git a/src/vm/newcompressedstack.cpp b/src/vm/newcompressedstack.cpp
deleted file mode 100644
index 5957dc37f4..0000000000
--- a/src/vm/newcompressedstack.cpp
+++ /dev/null
@@ -1,1074 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-
-//
-
-#include "common.h"
-#ifdef FEATURE_COMPRESSEDSTACK
-
-#include "newcompressedstack.h"
-#include "security.h"
-#ifdef FEATURE_REMOTING
-#include "appdomainhelper.h"
-#endif
-#include "securitystackwalk.h"
-#include "appdomainstack.inl"
-#include "appdomain.inl"
-
-
-DomainCompressedStack::DomainCompressedStack(ADID domainID)
-: m_DomainID(domainID),
- m_ignoreAD(FALSE),
- m_dwOverridesCount(0),
- m_dwAssertCount(0),
- m_Homogeneous(FALSE)
-{
- WRAPPER_NO_CONTRACT;
-}
-
-BOOL DomainCompressedStack::IsAssemblyPresent(ISharedSecurityDescriptor* ssd)
-{
- CONTRACTL
- {
- MODE_ANY;
- GC_NOTRIGGER;
- NOTHROW;
- }CONTRACTL_END;
-
-
- // Only checks the first level and does not recurse into compressed stacks
- void* pEntry = NULL;
-
- if (m_EntryList.GetCount() == 0)
- return FALSE;
-
- // Quick check the last entry we added - common case
- pEntry = m_EntryList.Get(m_EntryList.GetCount() - 1);
- if (pEntry == (void *)SET_LOW_BIT(ssd))
- return TRUE;
-
- // Go thru the whole list now - is this optimal?
- ArrayList::Iterator iter = m_EntryList.Iterate();
-
- while (iter.Next())
- {
- pEntry = iter.GetElement();
- if (pEntry == (void *)SET_LOW_BIT(ssd))
- return TRUE;
- }
- return FALSE;
-}
-
-void DomainCompressedStack::AddEntry(void * ptr)
-{
- CONTRACTL
- {
- THROWS;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- IfFailThrow(m_EntryList.Append(ptr));
-
-}
-VOID FrameSecurityDescriptorCopyFrom(FRAMESECDESCREF newFsdRef, FRAMESECDESCREF fsd)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- SO_TOLERANT;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
- newFsdRef->SetImperativeAssertions(fsd->GetImperativeAssertions());
- newFsdRef->SetImperativeDenials(fsd->GetImperativeDenials());
- newFsdRef->SetImperativeRestrictions(fsd->GetImperativeRestrictions());
- newFsdRef->SetDeclarativeAssertions(fsd->GetDeclarativeAssertions());
- newFsdRef->SetDeclarativeDenials(fsd->GetDeclarativeDenials());
- newFsdRef->SetDeclarativeRestrictions(fsd->GetDeclarativeRestrictions());
- newFsdRef->SetAssertAllPossible(fsd->HasAssertAllPossible());
- newFsdRef->SetAssertFT(fsd->HasAssertFT());
-}
-
-void DomainCompressedStack::AddFrameEntry(AppDomain *pAppDomain, FRAMESECDESCREF fsdRef, BOOL bIsAHDMFrame, OBJECTREF dynamicResolverRef)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
-
- ENTER_DOMAIN_PTR(pAppDomain,ADV_RUNNINGIN) //have it on the stack
- {
- struct gc
- {
- OBJECTREF fsdRef;
- OBJECTREF newFsdRef;
- OBJECTREF dynamicResolverRef;
- } gc;
- ZeroMemory( &gc, sizeof( gc ) );
- gc.fsdRef = (OBJECTREF)fsdRef;
- gc.dynamicResolverRef = dynamicResolverRef;
-
- GCPROTECT_BEGIN(gc);
-
- static MethodTable* pMethFrameSecDesc = NULL;
- if (pMethFrameSecDesc == NULL)
- pMethFrameSecDesc = MscorlibBinder::GetClass(CLASS__FRAME_SECURITY_DESCRIPTOR);
-
- static MethodTable* pMethFrameSecDescWCS = NULL;
- if (pMethFrameSecDescWCS == NULL)
- pMethFrameSecDescWCS = MscorlibBinder::GetClass(CLASS__FRAME_SECURITY_DESCRIPTOR_WITH_RESOLVER);
-
- if(!bIsAHDMFrame)
- {
- gc.newFsdRef = AllocateObject(pMethFrameSecDesc);
- }
- else
- {
- gc.newFsdRef = AllocateObject(pMethFrameSecDescWCS);
- }
-
- // We will not call the ctor and instead patch up the object based on the fsdRef passed in
- FRAMESECDESCREF newFsdRef = (FRAMESECDESCREF)gc.newFsdRef;
- FRAMESECDESCREF fsdRef1 = (FRAMESECDESCREF)gc.fsdRef;
- if(fsdRef1 != NULL)
- {
- FrameSecurityDescriptorCopyFrom(newFsdRef, fsdRef1);
- }
- if(bIsAHDMFrame)
- {
- _ASSERTE(gc.dynamicResolverRef != NULL);
- ((FRAMESECDESWITHRESOLVERCREF)newFsdRef)->SetDynamicMethodResolver(gc.dynamicResolverRef);
- }
- OBJECTHANDLEHolder tmpHnd(pAppDomain->CreateHandle(gc.newFsdRef));
-
- AddEntry((void*)tmpHnd);
- tmpHnd.SuppressRelease();
- GCPROTECT_END();
-
- }
- END_DOMAIN_TRANSITION;
-
-}
-
-
-void DomainCompressedStack::Destroy(void)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- // Clear Domain info (handles etc.) if the AD has not been unloaded.
- ClearDomainInfo();
- return;
-}
-
-FCIMPL1(DWORD, DomainCompressedStack::GetDescCount, DomainCompressedStack* dcs)
-{
- FCALL_CONTRACT;
-
- FCUnique(0x42);
-
- return dcs->m_EntryList.GetCount();
-}
-FCIMPLEND
-
-FCIMPL3(void, DomainCompressedStack::GetDomainPermissionSets, DomainCompressedStack* dcs, OBJECTREF* ppGranted, OBJECTREF* ppDenied)
-{
- FCALL_CONTRACT;
-
- HELPER_METHOD_FRAME_BEGIN_0();
-
- *ppGranted = NULL;
- *ppDenied = NULL;
-
- AppDomain* appDomain = SystemDomain::GetAppDomainFromId(dcs->GetMyDomain(),ADV_RUNNINGIN);
- if (appDomain == NULL)
- {
- // this might be the unloading AD
- AppDomain *pUnloadingDomain = SystemDomain::System()->AppDomainBeingUnloaded();
- if (pUnloadingDomain && pUnloadingDomain->GetId() == dcs->m_DomainID)
- {
-#ifdef _DEBUG
- CheckADValidity(pUnloadingDomain, ADV_RUNNINGIN);
-#endif
- appDomain = pUnloadingDomain;
- }
- }
- _ASSERTE(appDomain != NULL);
- if (appDomain != NULL)
- {
- IApplicationSecurityDescriptor * pAppSecDesc = appDomain->GetSecurityDescriptor();
- _ASSERTE(pAppSecDesc != NULL);
- if (pAppSecDesc != NULL)
- {
- *ppGranted = pAppSecDesc->GetGrantedPermissionSet(ppDenied);
- }
- }
-
- HELPER_METHOD_FRAME_END();
-}
-FCIMPLEND
-
-FCIMPL6(FC_BOOL_RET, DomainCompressedStack::GetDescriptorInfo, DomainCompressedStack* dcs, DWORD index, OBJECTREF* ppGranted, OBJECTREF* ppDenied, OBJECTREF* ppAssembly, OBJECTREF* ppFSD)
-{
- FCALL_CONTRACT;
-
- _ASSERTE(dcs != NULL);
- AppDomain* pCurrentDomain = GetAppDomain();
- BOOL bRetVal = FALSE;
-
- HELPER_METHOD_FRAME_BEGIN_RET_0()
- *ppGranted = NULL;
- *ppDenied = NULL;
- *ppAssembly = NULL;
- *ppFSD = NULL;
- void* pEntry = dcs->m_EntryList.Get(index);
- _ASSERTE(pEntry != NULL);
- if (IS_LOW_BIT_SET(pEntry))
- {
- // Assembly found
- SharedSecurityDescriptor* pSharedSecDesc = (SharedSecurityDescriptor* )UNSET_LOW_BIT(pEntry);
- Assembly* pAssembly = pSharedSecDesc->GetAssembly();
- IAssemblySecurityDescriptor* pAsmSecDesc = pAssembly->GetSecurityDescriptor( pCurrentDomain );
- *ppGranted = pAsmSecDesc->GetGrantedPermissionSet(ppDenied);
- *ppAssembly = pAssembly->GetExposedObject();
- }
- else
- {
- //FSD
- OBJECTHANDLE objHnd = (OBJECTHANDLE)pEntry;
- if (objHnd == NULL)
- {
- // throw an ADUnloaded exception which we will catch and then look at the serializedBlob
- COMPlusThrow(kAppDomainUnloadedException);
- }
- *ppFSD = ObjectFromHandle(objHnd);
- bRetVal = TRUE;
- }
- HELPER_METHOD_FRAME_END();
-
- FC_RETURN_BOOL(bRetVal);
-}
-FCIMPLEND
-
-FCIMPL1(FC_BOOL_RET, DomainCompressedStack::IgnoreDomain, DomainCompressedStack* dcs)
-{
- FCALL_CONTRACT;
-
- _ASSERTE(dcs != NULL);
-
- FC_RETURN_BOOL(dcs->IgnoreDomainInternal());
-}
-FCIMPLEND
-
-BOOL DomainCompressedStack::IgnoreDomainInternal()
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- MODE_COOPERATIVE;
- SO_TOLERANT;
- }
- CONTRACTL_END;
-
- if (m_ignoreAD)
- return TRUE;
-
- AppDomainFromIDHolder appDomain(GetMyDomain(), TRUE);
- if (!appDomain.IsUnloaded())
- {
- IApplicationSecurityDescriptor *pAppSecDesc = appDomain->GetSecurityDescriptor();
- _ASSERTE(pAppSecDesc != NULL);
- if (pAppSecDesc != NULL)
- {
- return pAppSecDesc->IsDefaultAppDomain() || pAppSecDesc->IsInitializationInProgress();
- }
- }
-
- return FALSE;
-}
-
-
-/*
- Note that this function is called only once: when the managed PLS is being created.
- It's possible that 2 threads could race at that point: only downside of that is that they will both do the work. No races.
- Also, we'll never be operating on a DCS whose domain is not on the current callstack. This eliminates all kinds of ADU/demand eval races.
-*/
-OBJECTREF DomainCompressedStack::GetDomainCompressedStackInternal(AppDomain *pDomain)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
-
- // If we are going to skip this AppDomain, and there is nothing to compress, then we can skip building the DCS.
- if (m_EntryList.GetCount() == 0 && IgnoreDomainInternal())
- return NULL;
-
- AppDomain* pCurrentDomain = GetAppDomain();
-
- NewArrayHolder<BYTE> pbtmpSerializedObject(NULL);
-#ifndef FEATURE_CORECLR
- DWORD cbtmpSerializedObject = 0;
-#endif
-
- struct gc
- {
- OBJECTREF refRetVal;
- } gc;
- ZeroMemory( &gc, sizeof( gc ) );
-
- GCPROTECT_BEGIN( gc );
-
- // Create object
- ENTER_DOMAIN_ID (GetMyDomain()) //on the stack
- {
-
- // Go ahead and create the object
-#ifdef FEATURE_CORECLR // ignore other appdomains
- if (GetAppDomain() == pCurrentDomain)
-#endif
- {
- MethodDescCallSite createManagedObject(METHOD__DOMAIN_COMPRESSED_STACK__CREATE_MANAGED_OBJECT);
- ARG_SLOT args[] = {PtrToArgSlot(this)};
- gc.refRetVal = createManagedObject.Call_RetOBJECTREF(args);
- }
-
-#ifndef FEATURE_CORECLR
- // Do we want to marshal this object also?
- if (GetAppDomain() != pCurrentDomain)
- {
- // Serialize to a blob;
- AppDomainHelper::MarshalObject(GetAppDomain(), &gc.refRetVal, &pbtmpSerializedObject, &cbtmpSerializedObject);
- if (pbtmpSerializedObject == NULL)
- {
- // this is an error: possibly an OOM prevented the blob from getting created.
- // We could return null and let the managed code use a fully restricted object or throw here.
- // Let's throw here...
- COMPlusThrow(kSecurityException);
- }
- }
-#endif
-
- }
- END_DOMAIN_TRANSITION
-
-#ifndef FEATURE_CORECLR // should never happen for core clr
- if (GetMyDomain() != pCurrentDomain->GetId())
- {
- AppDomainHelper::UnmarshalObject(pCurrentDomain,pbtmpSerializedObject, cbtmpSerializedObject, &gc.refRetVal);
- }
-#endif
-
- GCPROTECT_END();
-
- return gc.refRetVal;
-}
-
-
-void DomainCompressedStack::ClearDomainInfo(void)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
-
-
- // So, assume mutual exclusion holds and no races occur here
-
-
- // Now it is time to go NULL out any ObjectHandle we're using in the list of entries
- ArrayList::Iterator iter = m_EntryList.Iterate();
-
- while (iter.Next())
- {
- void* pEntry = iter.GetElement();
- if (!IS_LOW_BIT_SET(pEntry))
- {
- DestroyHandle((OBJECTHANDLE)pEntry);
- }
- pEntry = NULL;
- }
-
-
- // Always clear the index into the domain object list and the domainID.
- m_DomainID = ADID(INVALID_APPDOMAIN_ID);
- return;
-}
-
-NewCompressedStack::NewCompressedStack()
-: m_DCSListCount(0),
- m_currentDCS(NULL),
- m_pCtxTxFrame(NULL),
- m_CSAD(ADID(INVALID_APPDOMAIN_ID)),
- m_ADStack(GetThread()->GetAppDomainStack()),
- m_dwOverridesCount(0),
- m_dwAssertCount(0)
-{
- CONTRACTL
- {
- THROWS;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- _ASSERTE(m_ADStack.GetNumDomains() > 0);
- m_ADStack.InitDomainIteration(&adStackIndex);
- m_DCSList = new DomainCompressedStack*[m_ADStack.GetNumDomains()];
- memset(m_DCSList, 0, (m_ADStack.GetNumDomains()*sizeof(DomainCompressedStack*)));
-
-}
-
-
-void NewCompressedStack::Destroy( CLR_BOOL bEntriesOnly )
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- if (m_DCSList != NULL)
- {
- m_currentDCS = NULL;
- m_pCtxTxFrame = NULL;
- for (DWORD i=0; i< m_ADStack.GetNumDomains(); i++)
- {
- DomainCompressedStack* dcs = m_DCSList[i];
- if (dcs != NULL)
- {
- dcs->Destroy();
- delete dcs;
- }
- }
- delete[] m_DCSList;
- m_DCSList = NULL;
- }
- if (!bEntriesOnly)
- delete this;
-
-}
-
-
-void NewCompressedStack::ProcessAppDomainTransition(void)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- // Get the current adstack entry. Note that the first time we enter this function, adStackIndex will
- // equal the size of the adstack array (similar to what happens in IEnumerator).
- // So the initial pEntry will be NULL
- AppDomainStackEntry *pEntry =
- (adStackIndex == m_ADStack.GetNumDomains() ? NULL : m_ADStack.GetCurrentDomainEntryOnStack(adStackIndex));
-
- // Updated the value on the ADStack for current domain
- if (pEntry != NULL)
- {
- DWORD domainOverrides_measured = (m_currentDCS == NULL?0:m_currentDCS->GetOverridesCount());
- DWORD domainAsserts_measured = (m_currentDCS == NULL?0:m_currentDCS->GetAssertCount());
- if (pEntry->m_dwOverridesCount != domainOverrides_measured || pEntry->m_dwAsserts != domainAsserts_measured)
- {
- m_ADStack.UpdateDomainOnStack(adStackIndex, domainAsserts_measured, domainOverrides_measured);
- GetThread()->UpdateDomainOnStack(adStackIndex, domainAsserts_measured, domainOverrides_measured);
- }
- }
-
- // Move the domain index forward if this is not the last entry
- if (adStackIndex > 0)
- m_ADStack.GetNextDomainEntryOnStack(&adStackIndex);
- m_currentDCS = NULL;
-
- return;
-
-}
-DWORD NewCompressedStack::ProcessFrame(AppDomain* pAppDomain, Assembly* pAssembly, MethodDesc* pFunc, ISharedSecurityDescriptor* pSsd, FRAMESECDESCREF* pFsdRef)
-{
- // This function will be called each time we hit a new stack frame in a stack walk.
-
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(CheckPointer(pAppDomain));
- PRECONDITION(CheckPointer(pSsd));
- } CONTRACTL_END;
-
- // Get the current adstack entry. Note that the first time we enter this function, adStackIndex will
- // equal the size of the adstack array (similar to what happens in IEnumerator).
- // So the initial pEntry will be NULL
- AppDomainStackEntry *pEntry =
- (adStackIndex == m_ADStack.GetNumDomains() ? NULL : m_ADStack.GetCurrentDomainEntryOnStack(adStackIndex));
-
-
- _ASSERTE(pEntry != NULL);
- PREFIX_ASSUME(pEntry != NULL);
- FRAMESECDESCREF FsdRef = (pFsdRef!=NULL?*pFsdRef:NULL);
- DWORD dwFlags = 0;
- if (FsdRef != NULL)
- {
-
- if (FsdRef->HasAssertFT())
- dwFlags |= CORSEC_FT_ASSERT;
- }
-
- BOOL bIsAHDMFrame = FALSE;
-
- if((pFunc != NULL) && !CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_Security_DisableAnonymouslyHostedDynamicMethodCreatorSecurityCheck))
- {
- ENTER_DOMAIN_PTR(pAppDomain, ADV_RUNNINGIN)
- {
- bIsAHDMFrame = SecurityStackWalk::MethodIsAnonymouslyHostedDynamicMethodWithCSToEvaluate(pFunc);
- }
- END_DOMAIN_TRANSITION;
- }
-
- if (!bIsAHDMFrame && ((pEntry->IsFullyTrustedWithNoStackModifiers()) ||
- (m_currentDCS != NULL && m_currentDCS->m_Homogeneous)))
- {
- // Nothing to do in this entire AD.
- return dwFlags;
- }
-
- ADID dNewDomainID = pAppDomain->GetId();
- BOOL bAddSSD = (!pSsd->IsSystem() && !IsAssemblyPresent(dNewDomainID, pSsd));
- BOOL bHasStackModifiers = FALSE;
- DWORD overridesCount = 0;
- DWORD assertCount = 0;
-
-
- if (FsdRef != NULL)
- {
- overridesCount += FsdRef->GetOverridesCount();
- assertCount += FsdRef->GetAssertCount();
- }
-
- // If this is an AHDM frame with a CS to evaluate, it may have overrides or asserts,
- // so treat it as if it does
- if(bIsAHDMFrame)
- {
- overridesCount++;
- assertCount++;
- }
-
- bHasStackModifiers = ( (assertCount + overridesCount) > 0);
-
- //
- // We need to add a new DCS if we don't already have one for this AppDomain. If we've reached this
- // point, either:
- // * the AppDomain is partially trusted
- // * the AppDomain is fully trusted, but may have stack modifiers in play
- // * we're running in legacy mode where FullTrust doesn't mean FullTrust
- //
- // If the domain is partially trusted, we'll always need to capture it. If we got this far due to a
- // fully trusted domain that might have stack modifiers, we only have to capture if there really were
- // stack walk modifiers. In the legacy mode case, we need to capture the domain if we had stack
- // modifiers or we needed to add the shared security descriptor.
- //
-
- BOOL bCreateDCS = (m_currentDCS == NULL || m_currentDCS->m_DomainID != dNewDomainID);
- if (pAppDomain->GetSecurityDescriptor()->IsFullyTrusted())
- {
- bCreateDCS &= (bAddSSD || bHasStackModifiers);
- }
-
- if (bCreateDCS)
- {
- CreateDCS(dNewDomainID);
- }
-
- // Add the ISharedSecurityDescriptor (Assembly) to the list if it is not already present in the list
- if (bAddSSD)
- {
- m_currentDCS->AddEntry((void*)SET_LOW_BIT(pSsd));
- if (pEntry->IsHomogeneousWithNoStackModifiers())
- m_currentDCS->m_Homogeneous = TRUE;
- }
- if (bHasStackModifiers)
- {
- OBJECTREF dynamicResolverRef = NULL;
- if(bIsAHDMFrame)
- {
- _ASSERTE(pFunc->IsLCGMethod());
- dynamicResolverRef = pFunc->AsDynamicMethodDesc()->GetLCGMethodResolver()->GetManagedResolver();
- }
-
- // We need to add the FSD entry here
- m_currentDCS->AddFrameEntry(pAppDomain, FsdRef, bIsAHDMFrame, dynamicResolverRef);
- m_currentDCS->m_dwOverridesCount += overridesCount;
- m_currentDCS->m_dwAssertCount += assertCount;
- m_dwOverridesCount += overridesCount;
- m_dwAssertCount += assertCount;
- }
- return dwFlags;
-}
-
-// Build a CompressedStack given that all domains on the stack are homogeneous with no stack modifiers
-FCIMPL1(void, NewCompressedStack::FCallGetHomogeneousPLS, Object* hgPLSUnsafe)
-{
- FCALL_CONTRACT;
-
- OBJECTREF refHomogeneousPLS = (OBJECTREF)hgPLSUnsafe;
-
- HELPER_METHOD_FRAME_BEGIN_1(refHomogeneousPLS);
-
-
- // Walk the adstack and update the grantSetUnion
- AppDomainStack* pADStack = GetThread()->GetAppDomainStackPointer();
- DWORD dwAppDomainIndex;
- pADStack->InitDomainIteration(&dwAppDomainIndex);
-
-#ifdef FEATURE_REMOTING // without remoting we need only current appdomain
- while (dwAppDomainIndex != 0)
-#endif
- {
- AppDomainStackEntry* pEntry = pADStack->GetNextDomainEntryOnStack(&dwAppDomainIndex);
- _ASSERTE(pEntry != NULL);
-
- pEntry->UpdateHomogeneousPLS(&refHomogeneousPLS);
- }
-
-
- HELPER_METHOD_FRAME_END();
- return ;
-}
-FCIMPLEND;
-
-// Special case of ProcessFrame called with the CS at the base of the thread
-void NewCompressedStack::ProcessCS(AppDomain* pAppDomain, COMPRESSEDSTACKREF csRef, Frame *pFrame)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(CheckPointer(pAppDomain));
- } CONTRACTL_END;
-
- _ASSERTE(csRef != NULL && "Shouldn't call this function if CS is NULL");
- ADID dNewDomainID = pAppDomain->GetId();
- NewCompressedStack* pCS = (NewCompressedStack* )csRef->GetUnmanagedCompressedStack();
- if (csRef->IsEmptyPLS() && (pCS == NULL || pCS->GetDCSListCount() == 0))
- {
- // Do nothing - empty inner CS
- return;
- }
-
- // Let's special case the 1-domain CS that has no inner CSs here
- // Check for:
- // 1. == 1 DCS
- // 2. DCS is in correct AD (it's possible that pCS is AD-X and it has only one DCS in AD-Y, because AD-X has only mscorlib frames
- // 3. No inner CS
- if ( pCS != NULL &&
- pCS->GetDCSListCount() == 1 &&
- pCS->m_DCSList != NULL &&
- pCS->m_currentDCS != NULL &&
- pCS->m_currentDCS->m_DomainID == dNewDomainID &&
- pCS->m_CSAD == ADID(INVALID_APPDOMAIN_ID))
- {
- ProcessSingleDomainNCS(pCS, pAppDomain);
- }
- else
- {
-
- // set flag to ignore Domain grant set if the current DCS is the same as the one with the CS
- if (m_currentDCS != NULL && m_currentDCS->m_DomainID == dNewDomainID)
- {
- m_currentDCS->m_ignoreAD = TRUE;
- }
-
- // Update overrides/asserts
- if (pCS != NULL)
- {
- m_dwOverridesCount += pCS->GetOverridesCount();
- m_dwAssertCount += pCS->GetAssertCount();
- }
-
-
- // Do we need to store the CtxTransitionFrame or did we get the CS from the thread?
- if (pFrame != NULL)
- {
- _ASSERTE(csRef == SecurityStackWalk::GetCSFromContextTransitionFrame(pFrame));
- // Use data from the CtxTxFrame
- m_pCtxTxFrame = pFrame;
- }
- m_CSAD = dNewDomainID;
- }
-
-}
-void NewCompressedStack::ProcessSingleDomainNCS(NewCompressedStack *pCS, AppDomain* pAppDomain)
-{
-
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(CheckPointer(pAppDomain));
- } CONTRACTL_END;
-
- _ASSERTE(pCS->GetDCSListCount() <= 1 && pCS->m_CSAD == ADID(INVALID_APPDOMAIN_ID));
- ADID newDomainID = pAppDomain->GetId();
- DomainCompressedStack* otherDCS = pCS->m_currentDCS;
-
- if (otherDCS == NULL)
- return;
- if (m_currentDCS == NULL)
- CreateDCS(newDomainID);
-
-
- // Iterate thru the entryList in the current DCS
- ArrayList::Iterator iter = otherDCS->m_EntryList.Iterate();
- while (iter.Next())
- {
- void* pEntry = iter.GetElement();
- if (IS_LOW_BIT_SET(pEntry))
- {
- if (!IsAssemblyPresent(newDomainID, (ISharedSecurityDescriptor*)UNSET_LOW_BIT(pEntry)))
- {
- //Add the assembly
- m_currentDCS->AddEntry(pEntry);
- }
- }
- else
- {
- // FrameSecurityDescriptor
- OBJECTHANDLE objHnd = (OBJECTHANDLE)pEntry;
- OBJECTREF fsdRef = ObjectFromHandle(objHnd);
- OBJECTHANDLEHolder tmpHnd(pAppDomain->CreateHandle(fsdRef));
-
- m_currentDCS->AddEntry((void*)tmpHnd);
- tmpHnd.SuppressRelease();
-
- }
-
- }
-
- m_currentDCS->m_dwOverridesCount += pCS->m_dwOverridesCount;
- m_currentDCS->m_dwAssertCount += pCS->m_dwAssertCount;
- m_dwOverridesCount += pCS->m_dwOverridesCount;
- m_dwAssertCount += pCS->m_dwAssertCount;
-}
-void NewCompressedStack::CreateDCS(ADID domainID)
-{
- CONTRACTL {
- THROWS;
- GC_NOTRIGGER;
- MODE_ANY;
- } CONTRACTL_END;
-
- _ASSERTE(adStackIndex < m_ADStack.GetNumDomains());
- _ASSERTE (m_DCSList != NULL);
- m_DCSList[adStackIndex] = new DomainCompressedStack(domainID);
- m_currentDCS = m_DCSList[adStackIndex];
- m_DCSListCount++;
-
- return;
-}
-
-
-BOOL NewCompressedStack::IsAssemblyPresent(ADID domainID, ISharedSecurityDescriptor* pSsd)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- _ASSERTE(domainID != ADID(INVALID_APPDOMAIN_ID) && "Don't pass invalid domain");
-
- BOOL bEntryPresent = FALSE;
-
- for(DWORD i=0; i < m_ADStack.GetNumDomains(); i++)
- {
-
- DomainCompressedStack* pTmpDCS = m_DCSList[i];
-
- if (pTmpDCS != NULL && pTmpDCS->m_DomainID == domainID && pTmpDCS->IsAssemblyPresent(pSsd))
- {
- bEntryPresent = TRUE;
- break;
- }
- }
- return bEntryPresent;
-}
-
-
-BOOL NewCompressedStack::IsDCSContained(DomainCompressedStack *pDCS)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- // return FALSE if no DCS or DCS is for a domain that has been unloaded
- if (pDCS == NULL || pDCS->m_DomainID == ADID(INVALID_APPDOMAIN_ID))
- return FALSE;
-
-
-
- // Iterate thru the entryList in the current DCS
- ArrayList::Iterator iter = pDCS->m_EntryList.Iterate();
- while (iter.Next())
- {
- void* pEntry = iter.GetElement();
- if (IS_LOW_BIT_SET(pEntry))
- {
- // We only check Assemblies.
- if (!IsAssemblyPresent(pDCS->m_DomainID, (ISharedSecurityDescriptor*)UNSET_LOW_BIT(pEntry)))
- return FALSE;
- }
- }
- return TRUE;
-}
-
-BOOL NewCompressedStack::IsNCSContained(NewCompressedStack *pCS)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- // Check if the first level of pCS is contained in this.
- if (pCS == NULL)
- return TRUE;
-
- // Return FALSE if there are any overrides or asserts
- if (pCS->GetOverridesCount() > 0)
- return FALSE;
- // Return FALSE if there is an inner CS
- if (pCS->m_CSAD != ADID(INVALID_APPDOMAIN_ID))
- return FALSE;
-
- for(DWORD i=0; i < m_ADStack.GetNumDomains(); i++)
- {
- DomainCompressedStack *pDCS = (DomainCompressedStack *) m_DCSList[i];
- if (!IsDCSContained(pDCS))
- return FALSE;
- }
- return TRUE;
-
-}
-
-
-// If there is a compressed stack present in the captured CompressedStack, return that CS in the current domain
-OBJECTREF NewCompressedStack::GetCompressedStackInner()
-{
- _ASSERTE(m_CSAD != ADID(INVALID_APPDOMAIN_ID));
-
- AppDomain* pCurrentDomain = GetAppDomain();
- NewArrayHolder<BYTE> pbtmpSerializedObject(NULL);
-
-
- OBJECTREF refRetVal = NULL;
-
- if (pCurrentDomain->GetId()== m_CSAD)
- {
- // we're in the right domain already
- if (m_pCtxTxFrame == NULL)
- {
- // Get CS from the thread
- refRetVal = GetThread()->GetCompressedStack();
- }
- else
- {
- // Get CS from a Ctx transition frame
- refRetVal = (OBJECTREF)SecurityStackWalk::GetCSFromContextTransitionFrame(m_pCtxTxFrame);
- _ASSERTE(refRetVal != NULL); //otherwise we would not have saved the frame in the CB data
- }
- }
- else
-#ifndef FEATURE_CORECLR // should never happen for core clr
- {
- DWORD cbtmpSerializedObject = 0;
- GCPROTECT_BEGIN (refRetVal);
- // need to marshal the CS over into the current AD
- ENTER_DOMAIN_ID(m_CSAD);
- {
- if (m_pCtxTxFrame == NULL)
- {
-
- // Get CS from the thread
- refRetVal = GetThread()->GetCompressedStack();
- }
- else
- {
- // Get CS from a Ctx transition frame
- refRetVal = (OBJECTREF)SecurityStackWalk::GetCSFromContextTransitionFrame(m_pCtxTxFrame);
- _ASSERTE(refRetVal != NULL); //otherwise we would not have saved the frame in the CB data
- }
- AppDomainHelper::MarshalObject(GetAppDomain(), &refRetVal, &pbtmpSerializedObject, &cbtmpSerializedObject);
- }
- END_DOMAIN_TRANSITION
- refRetVal = NULL;
- AppDomainHelper::UnmarshalObject(pCurrentDomain,pbtmpSerializedObject, cbtmpSerializedObject, &refRetVal);
- GCPROTECT_END ();
- _ASSERTE(refRetVal != NULL); //otherwise we would not have saved the frame in the CB data
- }
-#else
- {
- UNREACHABLE();
- }
-#endif // !FEATURE_CORECLR
-
- return refRetVal;
-
-}
-
-// == Now begin the functions used in building Demand evaluation of a compressed stack
-FCIMPL1(DWORD, NewCompressedStack::FCallGetDCSCount, SafeHandle* hcsUNSAFE)
-{
- FCALL_CONTRACT;
-
- DWORD dwRet = 0;
- if (hcsUNSAFE != NULL)
- {
- SAFEHANDLE hcsSAFE = (SAFEHANDLE) hcsUNSAFE;
-
- HELPER_METHOD_FRAME_BEGIN_RET_1(hcsSAFE);
-
- NewCompressedStack* ncs = (NewCompressedStack *)hcsSAFE->GetHandle();
-
- dwRet = ncs->m_ADStack.GetNumDomains();
- HELPER_METHOD_FRAME_END();
- }
-
- return dwRet;
-
-}
-FCIMPLEND
-
-
-FCIMPL2(FC_BOOL_RET, NewCompressedStack::FCallIsImmediateCompletionCandidate, SafeHandle* hcsUNSAFE, OBJECTREF *innerCS)
-{
- FCALL_CONTRACT;
-
- BOOL bRet = FALSE;
- if (hcsUNSAFE != NULL)
- {
- SAFEHANDLE hcsSAFE = (SAFEHANDLE) hcsUNSAFE;
-
- HELPER_METHOD_FRAME_BEGIN_RET_1(hcsSAFE);
-
- *innerCS = NULL;
-
- NewCompressedStack* ncs = (NewCompressedStack *)hcsSAFE->GetHandle();
-
- if (ncs != NULL)
- {
- // Non-FT case
-
- // Is there an inner CS?
- BOOL bHasCS = (ncs->m_CSAD != ADID(INVALID_APPDOMAIN_ID));
-
- // Is there is a DCS not in the current AD
- BOOL bHasOtherAppDomain = FALSE;
- if (ncs->m_DCSList != NULL)
- {
- for(DWORD i=0; i < ncs->m_ADStack.GetNumDomains(); i++)
- {
- DomainCompressedStack* dcs = ncs->m_DCSList[i];
- if (dcs != NULL && dcs->GetMyDomain() != GetAppDomain()->GetId())
- {
- bHasOtherAppDomain = TRUE;
- break;
- }
- }
- }
- if (bHasCS)
- {
-
-
- *innerCS = ncs->GetCompressedStackInner();
- ncs->m_pCtxTxFrame = NULL; // Clear the CtxTxFrame ASAP
-
- }
- bRet = bHasOtherAppDomain||bHasCS;
- }
-
- HELPER_METHOD_FRAME_END();
- }
-
- FC_RETURN_BOOL(bRet);
-}
-FCIMPLEND
-
-
-FCIMPL2(Object*, NewCompressedStack::GetDomainCompressedStack, SafeHandle* hcsUNSAFE, DWORD index)
-{
- FCALL_CONTRACT;
-
- OBJECTREF refRetVal = NULL;
- if (hcsUNSAFE != NULL)
- {
- SAFEHANDLE hcsSAFE = (SAFEHANDLE) hcsUNSAFE;
-
- HELPER_METHOD_FRAME_BEGIN_RET_2(refRetVal, hcsSAFE);
-
-
-
- NewCompressedStack* ncs = (NewCompressedStack *)hcsSAFE->GetHandle();
-
- // First we check to see if the DCS at index i has a blob. If so, deserialize it into the current AD and return it. Else try create it
- DomainCompressedStack* dcs = ncs->m_DCSList[index];
- if (dcs != NULL)
- {
- refRetVal = dcs->GetDomainCompressedStackInternal(NULL);
- }
-
- HELPER_METHOD_FRAME_END();
- }
-
- return OBJECTREFToObject(refRetVal);
-
-}
-FCIMPLEND
-
-FCIMPL1(void, NewCompressedStack::DestroyDCSList, SafeHandle* hcsUNSAFE)
-{
- FCALL_CONTRACT;
-
- SAFEHANDLE hcsSAFE = (SAFEHANDLE) hcsUNSAFE;
-
- HELPER_METHOD_FRAME_BEGIN_1(hcsSAFE);
-
- NewCompressedStack* ncs = (NewCompressedStack *)hcsSAFE->GetHandle();
-
- ncs->Destroy(TRUE);
-
- HELPER_METHOD_FRAME_END();
-
-}
-FCIMPLEND
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
diff --git a/src/vm/newcompressedstack.h b/src/vm/newcompressedstack.h
deleted file mode 100644
index e3a639353d..0000000000
--- a/src/vm/newcompressedstack.h
+++ /dev/null
@@ -1,197 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-
-//
-
-#ifndef __newcompressedstack_h__
-#define __newcompressedstack_h__
-#ifdef FEATURE_COMPRESSEDSTACK
-
-#include "objectlist.h"
-// Returns true if the low bit in the ptr argument is set to 1
-#define IS_LOW_BIT_SET(ptr) (((UINT_PTR)ptr) & 1)
-// Sets the low bit in the ptr passed in
-#define SET_LOW_BIT(ptr) (((UINT_PTR)ptr)|1)
-// Reset the low bit to 0
-#define UNSET_LOW_BIT(ptr) (((UINT_PTR)ptr)& ~((size_t)1))
-
-class DomainCompressedStack;
-class NewCompressedStack;
-
-
-
-// This is the class that will contain an array of entries.
-// All the entries will be for a single AppDomain
-class DomainCompressedStack
-{
- friend class NewCompressedStack;
-public:
- ADID GetMyDomain()
- {
- // It is OK if m_DomainID gets set to -1 by ADU code and we return a valid AD.
- // (what that means is that tmp_adid is not invalid, but m_DomainID is set to invalid by ADU code
- // after we cached it)
- // Two cases:
- // 1. AD has set NoEnter
- // 1.a) current thread is finalizer: it will be allowed to enter the AD, but Destroy() takes a lock and checks again. So we're good
- // 1.b) current thread is not finalizer: it will not be allowed to enter AD and the value returned here will be NULL
- // 2. AD has not set NoEnter, but is in the process of CS processing at ADU
- // A valid AD pointer is returned, which is all that this function is required to do. Since ADU unload is done handling this DCS, we'll not
- // enter that AD, but use the blob in the DCS.
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- MODE_COOPERATIVE;
- SO_TOLERANT;
- }
- CONTRACTL_END;
-
- return m_DomainID;
- }
- // Construction and maintenence
- DomainCompressedStack(ADID domainID); //ctor
- BOOL IsAssemblyPresent(ISharedSecurityDescriptor* ssd);
- void AddEntry(void *ptr);
-#ifndef DACCESS_COMPILE
- void AddFrameEntry(AppDomain * pAppDomain, FRAMESECDESCREF fsdRef, BOOL bIsAHDMFrame, OBJECTREF dynamicResolverRef);
-#endif
- void Destroy(void);
-
- // Demand evaluation
- static FCDECL1(DWORD, GetDescCount, DomainCompressedStack* dcs);
- static FCDECL3(void, GetDomainPermissionSets, DomainCompressedStack* dcs, OBJECTREF* ppGranted, OBJECTREF* ppDenied);
- static FCDECL6(FC_BOOL_RET, GetDescriptorInfo, DomainCompressedStack* dcs, DWORD index, OBJECTREF* ppGranted, OBJECTREF* ppDenied, OBJECTREF* ppAssembly, OBJECTREF* ppFSD);
- static FCDECL1(FC_BOOL_RET, IgnoreDomain, DomainCompressedStack* dcs);
- OBJECTREF GetDomainCompressedStackInternal(AppDomain *pDomain);
-
- // AppDomain unload
- void ClearDomainInfo(void);
- static void AllHandleAppDomainUnload(AppDomain* pDomain, ADID domainId, ObjectList* list );
- static void ReleaseDomainCompressedStack( DomainCompressedStack* dcs ) {
- WRAPPER_NO_CONTRACT;
- dcs->Destroy();
- };
- static DomainCompressedStack* GetNextEntryFromADList(AppDomain* pDomain, ObjectList::Iterator iter);
- void AppDomainUnloadDone(AppDomain* pDomain);
-
-
-
-private:
- ArrayList m_EntryList;
- ADID m_DomainID; // either a valid domain ID or INVALID_APPDOMAIN_ID (set by unloading AppDomain to that value)
- BOOL m_ignoreAD; // Do not look at domain grant set since we have a CS at the threadbaseobject.
- DWORD m_dwOverridesCount;
- DWORD m_dwAssertCount;
- BOOL m_Homogeneous;
-
- DWORD GetOverridesCount( void )
- {
- LIMITED_METHOD_CONTRACT;
- return m_dwOverridesCount;
- }
-
- DWORD GetAssertCount( void )
- {
- LIMITED_METHOD_CONTRACT;
- return m_dwAssertCount;
- }
-
- BOOL IgnoreDomainInternal();
-};
-typedef Holder<DomainCompressedStack*, DoNothing< DomainCompressedStack* >, DomainCompressedStack::ReleaseDomainCompressedStack > DomainCompressedStackHolder;
-
-class NewCompressedStack
-{
-
-private:
- DomainCompressedStack** m_DCSList;
- DWORD m_DCSListCount;
- DomainCompressedStack *m_currentDCS;
- Frame *m_pCtxTxFrame; // Be super careful where you use this. Remember that this is a stack location and is not always valid.
- ADID m_CSAD;
- AppDomainStack m_ADStack;
- DWORD adStackIndex;
- DWORD m_dwOverridesCount;
- DWORD m_dwAssertCount;
-
-
- void CreateDCS(ADID domainID);
- BOOL IsAssemblyPresent(ADID domainID, ISharedSecurityDescriptor* pSsd);
- BOOL IsDCSContained(DomainCompressedStack *pDCS);
- BOOL IsNCSContained(NewCompressedStack *pCS);
- void ProcessSingleDomainNCS(NewCompressedStack *pCS, AppDomain* pAppDomain);
-public:
- DWORD GetDCSListCount(void)
- {
- // Returns # of non-NULL DCSList entries;
- LIMITED_METHOD_CONTRACT;
- return m_DCSListCount;
- }
- void Destroy( CLR_BOOL bEntriesOnly = FALSE);
-
- static void DestroyCompressedStack( NewCompressedStack* stack ) {
- WRAPPER_NO_CONTRACT;
- stack->Destroy();
- };
-
- AppDomainStack& GetAppDomainStack( void )
- {
- LIMITED_METHOD_CONTRACT;
- return m_ADStack;
- }
-
- DWORD GetOverridesCount( void )
- {
- LIMITED_METHOD_CONTRACT;
- return m_dwOverridesCount;
- }
-
- DWORD GetAssertCount( void )
- {
- LIMITED_METHOD_CONTRACT;
- return m_dwAssertCount;
- }
- DWORD GetInnerAppDomainOverridesCount(void)
- {
- WRAPPER_NO_CONTRACT;
- return m_ADStack.GetInnerAppDomainOverridesCount();
- }
- DWORD GetInnerAppDomainAssertCount(void)
- {
- WRAPPER_NO_CONTRACT;
- return m_ADStack.GetInnerAppDomainAssertCount();
- }
-
- // This is called every time we hit a stack frame on a stack walk. it will be called with ASD, SSD, FSDs and this func will determine what
- // (if any) action needs to be performed.
- // For example:
- // on seeing a new SSD, we'll add an entry to the current DCS
- // on seeing an SSD we've already seen, we'll do nothing
- // on seeing a new ASD, a new DCS will be created on this CS
-#ifndef DACCESS_COMPILE
- void ProcessAppDomainTransition(void);
- DWORD ProcessFrame(AppDomain* pAppDomain, Assembly* pAssembly, MethodDesc* pFunc, ISharedSecurityDescriptor* pSsd, FRAMESECDESCREF* pFsdRef);
- void ProcessCS(AppDomain* pAppDomain, COMPRESSEDSTACKREF csRef, Frame *pFrame);
-
-#endif
- // ctor
- NewCompressedStack();
- OBJECTREF GetCompressedStackInner();
-
- // FCALLS
- static FCDECL1(DWORD, FCallGetDCSCount, SafeHandle* hcsUNSAFE);
- static FCDECL2(FC_BOOL_RET, FCallIsImmediateCompletionCandidate, SafeHandle* hcsUNSAFE, OBJECTREF *innerCS);
- static FCDECL2(Object*, GetDomainCompressedStack, SafeHandle* hcsUNSAFE, DWORD index);
- static FCDECL1(void, DestroyDCSList, SafeHandle* hcsUNSAFE);
- static FCDECL1(void, FCallGetHomogeneousPLS, Object* hgPLSUnsafe);
-
-};
-typedef Holder<NewCompressedStack*, DoNothing< NewCompressedStack* >, NewCompressedStack::DestroyCompressedStack > NewCompressedStackHolder;
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-#endif /* __newcompressedstack_h__ */
-
-
diff --git a/src/vm/object.cpp b/src/vm/object.cpp
index 531c0015f2..b219eb9e50 100644
--- a/src/vm/object.cpp
+++ b/src/vm/object.cpp
@@ -33,21 +33,6 @@ void* CompressedStackObject::GetUnmanagedCompressedStack()
}
#endif // FEATURE_COMPRESSEDSTACK
-#ifndef FEATURE_PAL
-LPVOID FrameSecurityDescriptorBaseObject::GetCallerToken()
-{
- LIMITED_METHOD_CONTRACT;
- return ((m_callerToken!= NULL)?m_callerToken->GetHandle():NULL);
-
-}
-
-LPVOID FrameSecurityDescriptorBaseObject::GetImpersonationToken()
-{
- LIMITED_METHOD_CONTRACT;
- return ((m_impToken != NULL)?m_impToken->GetHandle():NULL);
-}
-#endif
-
SVAL_IMPL(INT32, ArrayBase, s_arrayBoundsZero);
// follow the necessary rules to get a new valid hashcode for an object
diff --git a/src/vm/object.h b/src/vm/object.h
index 73ecb62b80..cb117898a1 100644
--- a/src/vm/object.h
+++ b/src/vm/object.h
@@ -2743,10 +2743,6 @@ class FrameSecurityDescriptorBaseObject : public Object
OBJECTREF m_DeclarativeAssertions;
OBJECTREF m_DeclarativeDenials;
OBJECTREF m_DeclarativeRestrictions;
-#ifndef FEATURE_PAL
- SAFEHANDLEREF m_callerToken; // the thread token (or process token if there was no thread token) when a call to Impersonate was made ("previous" token)
- SAFEHANDLEREF m_impToken; // the thread token after a call to Impersonate is made (the "current" impersonation)
-#endif // !FEATURE_PAL
CLR_BOOL m_assertFT;
CLR_BOOL m_assertAllPossible;
CLR_BOOL m_declSecComputed;
@@ -2880,10 +2876,6 @@ class FrameSecurityDescriptorBaseObject : public Object
LIMITED_METHOD_CONTRACT;
m_declSecComputed = !!declSec;
}
-#ifndef FEATURE_PAL
- LPVOID GetCallerToken();
- LPVOID GetImpersonationToken();
-#endif // FEATURE_PAL
};
#ifdef FEATURE_COMPRESSEDSTACK
@@ -3811,217 +3803,6 @@ typedef REF<DelegateObject> DELEGATEREF;
typedef DelegateObject* DELEGATEREF;
#endif // USE_CHECKED_OBJECTREFS
-// This class corresponds to PermissionSet on the managed side.
-class PermissionSetObject : public Object
-{
- friend class MscorlibBinder;
-
-public:
- BOOL AllPermissionsDecoded()
- {
- LIMITED_METHOD_CONTRACT;
- return _allPermissionsDecoded == TRUE;
- }
-
- BOOL ContainsCas()
- {
- LIMITED_METHOD_CONTRACT;
- return _ContainsCas == TRUE;
- }
-
- BOOL ContainsNonCas()
- {
- LIMITED_METHOD_CONTRACT;
- return _ContainsNonCas == TRUE;
- }
-
- BOOL CheckedForNonCas()
- {
- LIMITED_METHOD_CONTRACT;
- return _CheckedForNonCas == TRUE;
- }
-
- BOOL IsUnrestricted()
- {
- LIMITED_METHOD_CONTRACT;
- return _Unrestricted == TRUE;
- }
-
- OBJECTREF GetTokenBasedSet()
- {
- LIMITED_METHOD_CONTRACT;
- return _permSet;
- }
-
-
- // README:
- // If you modify the order of these fields, make sure to update the definition in
- // BCL for this object.
-private:
- // Order of the fields is important as it mirrors the layout of PermissionSet
- // to access the fields directly from unmanaged code given an OBJECTREF.
- // Please keep them in sync when you make changes to the fields.
- OBJECTREF _permSet;
- STRINGREF _serializedPermissionSet;
- OBJECTREF _permSetSaved;
- OBJECTREF _unrestrictedPermSet;
- OBJECTREF _normalPermSet;
- CLR_BOOL _Unrestricted;
- CLR_BOOL _allPermissionsDecoded;
- CLR_BOOL _ignoreTypeLoadFailures;
- CLR_BOOL _CheckedForNonCas;
- CLR_BOOL _ContainsCas;
- CLR_BOOL _ContainsNonCas;
- CLR_BOOL _Readable;
-#ifdef FEATURE_CAS_POLICY
- CLR_BOOL _canUnrestrictedOverride;
-#endif // FEATURE_CAS_POLICY
-};
-
-#ifdef USE_CHECKED_OBJECTREFS
-typedef REF<PermissionSetObject> PERMISSIONSETREF;
-#else // USE_CHECKED_OBJECTREFS
-typedef PermissionSetObject* PERMISSIONSETREF;
-#endif // USE_CHECKED_OBJECTREFS
-
-// This class corresponds to TokenBasedSet on the managed side.
-class TokenBasedSetObject : public Object
-{
-public:
- INT32 GetNumElements () {
- LIMITED_METHOD_CONTRACT;
- return _cElt;
- }
-
- OBJECTREF GetPermSet () {
- LIMITED_METHOD_CONTRACT;
- return _Obj;
- }
-
-private:
- // If you modify the order of these fields, make sure
- // to update the definition in BCL for this object.
- OBJECTREF _objSet;
- OBJECTREF _Obj;
- OBJECTREF _Set;
- INT32 _initSize;
- INT32 _increment;
- INT32 _cElt;
- INT32 _maxIndex;
-};
-
-#ifdef USE_CHECKED_OBJECTREFS
-typedef REF<TokenBasedSetObject> TOKENBASEDSETREF;
-#else // USE_CHECKED_OBJECTREFS
-typedef TokenBasedSetObject* TOKENBASEDSETREF;
-#endif // USE_CHECKED_OBJECTREFS
-
-// This class corresponds to PolicyStatement on the managed side.
-class PolicyStatementObject : public Object
-{
- friend class MscorlibBinder;
-private:
- PERMISSIONSETREF _permSet;
-#ifdef FEATURE_CAS_POLICY
- OBJECTREF _dependentEvidence;
-#endif // FEATURE_CAS_POLICY
- INT32 _attributes;
-
-public:
- PERMISSIONSETREF GetPermissionSet()
- {
- LIMITED_METHOD_CONTRACT;
- return _permSet;
- }
-};
-#ifdef USE_CHECKED_OBJECTREFS
-typedef REF<PolicyStatementObject> POLICYSTATEMENTREF;
-#else // USE_CHECKED_OBJECTREFS
-typedef PolicyStatementObject* POLICYSTATEMENTREF;
-#endif // USE_CHECKED_OBJECTREFS
-
-// This class corresponds to ApplicationTrust on the managed side.
-class ApplicationTrustObject : public Object
-{
- friend class MscorlibBinder;
-private:
-#ifdef FEATURE_CLICKONCE
- OBJECTREF _appId;
- OBJECTREF _extraInfo;
- OBJECTREF _elExtraInfo;
-#endif // FEATURE_CLICKONCE
- POLICYSTATEMENTREF _psDefaultGrant;
- OBJECTREF _fullTrustAssemblies;
- DWORD _grantSetSpecialFlags;
-#ifdef FEATURE_CLICKONCE
- CLR_BOOL _appTrustedToRun;
- CLR_BOOL _persist;
-#endif // FEATURE_CLICKONCE
-
-public:
- POLICYSTATEMENTREF GetPolicyStatement()
- {
- LIMITED_METHOD_CONTRACT;
- return _psDefaultGrant;
- }
-
- // The grant set special flags are mapped in the BCL for the DefaultGrantSet of the ApplicationTrust.
- // Since ApplicationTrust provides a reference to its DefaultGrantSet rather than a copy, the flags may
- // not be in sync if user code can ever get a hold of the ApplicationTrust object. Therefore, these
- // flags should only be used in code paths where we are sure that only trusted code can ever get a
- // reference to the ApplicationTrust (such as the ApplicationTrust created when setting up a homogenous
- // AppDomain).
- DWORD GetGrantSetSpecialFlags()
- {
- LIMITED_METHOD_CONTRACT;
- return _grantSetSpecialFlags;
- }
-};
-#ifdef USE_CHECKED_OBJECTREFS
-typedef REF<ApplicationTrustObject> APPLICATIONTRUSTREF;
-#else // USE_CHECKED_OBJECTREFS
-typedef ApplicationTrustObject* APPLICATIONTRUSTREF;
-#endif // USE_CHECKED_OBJECTREFS
-
-// This class corresponds to SecurityPermission on the managed side.
-class SecurityPermissionObject : public Object
-{
-public:
- DWORD GetFlags () {
- LIMITED_METHOD_CONTRACT;
- return _flags;
- }
-
-private:
- // If you modify the order of these fields, make sure
- // to update the definition in BCL for this object.
- DWORD _flags;
-};
-
-#ifdef USE_CHECKED_OBJECTREFS
-typedef REF<SecurityPermissionObject> SECURITYPERMISSIONREF;
-#else // USE_CHECKED_OBJECTREFS
-typedef SecurityPermissionObject* SECURITYPERMISSIONREF;
-#endif // USE_CHECKED_OBJECTREFS
-
-// This class corresponds to ReflectionPermission on the managed side.
-class ReflectionPermissionObject : public Object
-{
-public:
- DWORD GetFlags () {
- LIMITED_METHOD_CONTRACT;
- return _flags;
- }
-
-private:
- DWORD _flags;
-};
-
-#ifdef USE_CHECKED_OBJECTREFS
-typedef REF<ReflectionPermissionObject> REFLECTIONPERMISSIONREF;
-#else // USE_CHECKED_OBJECTREFS
-typedef ReflectionPermissionObject* REFLECTIONPERMISSIONREF;
-#endif // USE_CHECKED_OBJECTREFS
struct StackTraceElement;
class ClrDataAccess;
diff --git a/src/vm/prestub.cpp b/src/vm/prestub.cpp
index e0d4096347..9fd7c52446 100644
--- a/src/vm/prestub.cpp
+++ b/src/vm/prestub.cpp
@@ -829,15 +829,24 @@ Stub * CreateInstantiatingILStub(MethodDesc* pTargetMD, void* pHiddenArg)
CreateInstantiatingILStubTargetSig(pTargetMD, typeContext, &stubSigBuilder);
// 2. Emit the method body
+ unsigned int numArgs = msig.NumFixedArgs();
if (msig.HasThis())
{
// 2.1 Push the thisptr
pCode->EmitLoadThis();
+ numArgs++;
}
- // 2.2 Push the hidden context param
- // InstantiatingStub
- pCode->EmitLDC((TADDR)pHiddenArg);
+#if defined(_TARGET_X86_)
+ if (numArgs < NUM_ARGUMENT_REGISTERS)
+ {
+#endif // _TARGET_X86_
+ // 2.2 Push the hidden context param
+ // InstantiatingStub
+ pCode->EmitLDC((TADDR)pHiddenArg);
+#if defined(_TARGET_X86_)
+ }
+#endif // _TARGET_X86_
// 2.3 Push the rest of the arguments
for (unsigned i = 0; i < msig.NumFixedArgs();i++)
@@ -845,10 +854,19 @@ Stub * CreateInstantiatingILStub(MethodDesc* pTargetMD, void* pHiddenArg)
pCode->EmitLDARG(i);
}
- // 2.4 Push the target address
+#if defined(_TARGET_X86_)
+ if (numArgs >= NUM_ARGUMENT_REGISTERS)
+ {
+ // 2.4 Push the hidden context param
+ // InstantiatingStub
+ pCode->EmitLDC((TADDR)pHiddenArg);
+ }
+#endif // _TARGET_X86_
+
+ // 2.5 Push the target address
pCode->EmitLDC((TADDR)pTargetMD->GetMultiCallableAddrOfCode(CORINFO_ACCESS_ANY));
- // 2.5 Do the calli
+ // 2.6 Do the calli
pCode->EmitCALLI(TOKEN_ILSTUB_TARGET_SIG, msig.NumFixedArgs() + 1, msig.IsReturnTypeVoid() ? 0 : 1);
pCode->EmitRET();
diff --git a/src/vm/proftoeeinterfaceimpl.cpp b/src/vm/proftoeeinterfaceimpl.cpp
index 1aee26dde3..da66dbde44 100644
--- a/src/vm/proftoeeinterfaceimpl.cpp
+++ b/src/vm/proftoeeinterfaceimpl.cpp
@@ -7411,8 +7411,8 @@ Loop:
REGDISPLAY rd;
ZeroMemory(&rd, sizeof(rd));
- rd.pEbp = &ctxCur.Ebp;
- rd.Esp = ctxCur.Esp;
+ rd.SetEbpLocation(&ctxCur.Ebp);
+ rd.SP = ctxCur.Esp;
rd.ControlPC = ctxCur.Eip;
codeInfo.GetCodeManager()->UnwindStackFrame(
@@ -7422,8 +7422,8 @@ Loop:
&codeManState,
NULL);
- ctxCur.Ebp = *(rd.pEbp);
- ctxCur.Esp = rd.Esp;
+ ctxCur.Ebp = *rd.GetEbpLocation();
+ ctxCur.Esp = rd.SP;
ctxCur.Eip = rd.ControlPC;
}
else
diff --git a/src/vm/reflectclasswriter.cpp b/src/vm/reflectclasswriter.cpp
index 09f6589fed..093d5f7d9c 100644
--- a/src/vm/reflectclasswriter.cpp
+++ b/src/vm/reflectclasswriter.cpp
@@ -119,129 +119,4 @@ RefClassWriter::~RefClassWriter()
m_pOnDiskEmitter->Release();
m_pOnDiskEmitter = NULL;
}
-
-
-#ifndef FEATURE_CORECLR
- DestroyCeeFileGen();
-#endif // FEATURE_CORECLR
-}
-
-#ifndef FEATURE_CORECLR
-
-#include <MscorpeSxSWrapper.h>
-
-// Loads mscorpe.dll (uses shim hosting API)
-HRESULT
-LoadMscorpeDll(HMODULE * phModule)
-{
- // Load SxS version of mscorpe.dll (i.e. mscorpehost.dll) and initialize it
- return g_pCLRRuntime->LoadLibrary(W("mscorpe.dll"), phModule);
}
-
-// Wrapper for mscorpe.dll calls
-typedef MscorpeSxSWrapper<LoadMscorpeDll> MscorpeSxS;
-
-//******************************************************
-//*
-//* Make sure that CeeFileGen for this module is created for emitting to disk
-//*
-//******************************************************
-HRESULT
-RefClassWriter::EnsureCeeFileGenCreated(
- DWORD corhFlags,
- DWORD peFlags)
-{
- CONTRACT(HRESULT) {
- NOTHROW;
- GC_TRIGGERS;
- // we know that the com implementation is ours so we use mode-any to simplify
- // having to switch mode
- MODE_ANY;
- INJECT_FAULT(CONTRACT_RETURN(E_OUTOFMEMORY));
-
- POSTCONDITION(SUCCEEDED(RETVAL) ? CheckPointer(m_pCeeFileGen) : (int)(m_pCeeFileGen == NULL));
- POSTCONDITION(SUCCEEDED(RETVAL) ? CheckPointer(m_ceeFile) : (int)(m_pCeeFileGen == NULL));
- }
- CONTRACT_END;
-
- HRESULT hr = NOERROR;
-
- if (m_pCeeFileGen == NULL)
- {
- EX_TRY
- {
- IfFailGo(MscorpeSxS::CreateICeeFileGen(&m_pCeeFileGen));
-
- IfFailGo(m_pCeeFileGen->CreateCeeFileFromICeeGen(m_pCeeGen, &m_ceeFile, peFlags));
-
- IfFailGo(m_pCeeFileGen->ClearComImageFlags(m_ceeFile, COMIMAGE_FLAGS_ILONLY));
-
- IfFailGo(m_pCeeFileGen->SetComImageFlags(m_ceeFile, corhFlags));
- ErrExit:
- ;
- }
- EX_CATCH
- {
- hr = GET_EXCEPTION()->GetHR();
- }
- EX_END_CATCH(SwallowAllExceptions);
-
- if (FAILED(hr))
- {
- DestroyCeeFileGen();
- }
- }
-
- RETURN(hr);
-} // RefClassWriter::EnsureCeeFileGenCreated
-
-
-//******************************************************
-//*
-//* Destroy the instance of CeeFileGen that we created
-//*
-//******************************************************
-HRESULT RefClassWriter::DestroyCeeFileGen()
-{
- CONTRACT(HRESULT) {
- NOTHROW;
- GC_TRIGGERS;
- // we know that the com implementation is ours so we use mode-any to simplify
- // having to switch mode
- MODE_ANY;
- FORBID_FAULT;
-
- POSTCONDITION(m_pCeeFileGen == NULL);
- POSTCONDITION(m_ceeFile == NULL);
- }
- CONTRACT_END;
-
- HRESULT hr = NOERROR;
-
- if (m_pCeeFileGen != NULL)
- {
- //Cleanup the HCEEFILE.
- if (m_ceeFile != NULL)
- {
- hr = m_pCeeFileGen->DestroyCeeFile(&m_ceeFile);
- _ASSERTE_MSG(SUCCEEDED(hr), "Destory CeeFile");
- m_ceeFile = NULL;
- }
-
- //Cleanup the ICeeFileGen.
- {
- CONTRACT_VIOLATION(ThrowsViolation);
-
- // code:EnsureCeeFileGenCreated already loaded the DLL
- _ASSERTE(MscorpeSxS::Debug_IsLoaded());
-
- hr = MscorpeSxS::DestroyICeeFileGen(&m_pCeeFileGen);
- }
- _ASSERTE_MSG(SUCCEEDED(hr), "Destroy ICeeFileGen");
- m_pCeeFileGen = NULL;
- }
-
- RETURN(hr);
-} // RefClassWriter::DestroyCeeFileGen
-
-#endif //!FEATURE_CORECLR
diff --git a/src/vm/reflectioninvocation.cpp b/src/vm/reflectioninvocation.cpp
index 4edecdd2c6..4a2be35581 100644
--- a/src/vm/reflectioninvocation.cpp
+++ b/src/vm/reflectioninvocation.cpp
@@ -3333,27 +3333,6 @@ FCIMPL1(Object*, ReflectionSerialization::GetSafeUninitializedObject, ReflectCla
COMPlusThrow(kNotSupportedException, W("NotSupported_ManagedActivation"));
#endif // FEATURE_COMINTEROP
-#ifdef FEATURE_APTCA
- if (!pMT->GetAssembly()->AllowUntrustedCaller()) {
- OBJECTREF permSet = NULL;
- Security::GetPermissionInstance(&permSet, SECURITY_FULL_TRUST);
- Security::DemandSet(SSWT_LATEBOUND_LINKDEMAND, permSet);
- }
-#endif // FEATURE_APTCA
-
-#ifdef FEATURE_CAS_POLICY
- if (pMT->GetClass()->RequiresLinktimeCheck()) {
- OBJECTREF refClassNonCasDemands = NULL;
- OBJECTREF refClassCasDemands = NULL;
-
- refClassCasDemands = TypeSecurityDescriptor::GetLinktimePermissions(pMT, &refClassNonCasDemands);
-
- if (refClassCasDemands != NULL)
- Security::DemandSet(SSWT_LATEBOUND_LINKDEMAND, refClassCasDemands);
-
- }
-#endif // FEATURE_CAS_POLICY
-
// If it is a nullable, return the underlying type instead.
if (Nullable::IsNullableType(pMT))
pMT = pMT->GetInstantiation()[0].GetMethodTable();
diff --git a/src/vm/rexcep.h b/src/vm/rexcep.h
index 1d1d9385f0..3ff4963996 100644
--- a/src/vm/rexcep.h
+++ b/src/vm/rexcep.h
@@ -142,7 +142,13 @@ DEFINE_EXCEPTION(g_SystemNS, BadImageFormatException, true,
META_E_BAD_SIGNATURE,
COR_E_LOADING_WINMD_REFERENCE_ASSEMBLY)
+#ifdef FEATURE_CORECLR
+// CannotUnloadAppDomainException is removed in CoreCLR
+#define kCannotUnloadAppDomainException kException
+#else
DEFINE_EXCEPTION(g_SystemNS, CannotUnloadAppDomainException, false, COR_E_CANNOTUNLOADAPPDOMAIN)
+#endif // FEATURE_CORECLR
+
DEFINE_EXCEPTION(g_CodeContractsNS, ContractException, false, COR_E_CODECONTRACTFAILED)
#ifdef FEATURE_REMOTING
diff --git a/src/vm/security.h b/src/vm/security.h
index 2238279cd7..3f3cb38c09 100644
--- a/src/vm/security.h
+++ b/src/vm/security.h
@@ -14,7 +14,6 @@
#include "securityattributes.h"
#include "securitydeclarativecache.h"
#include "securitydeclarative.h"
-#include "securityimperative.h"
#include "securitytransparentassembly.h"
#ifdef FEATURE_APTCA
@@ -126,7 +125,6 @@ namespace Security
#endif // #ifndef DACCESS_COMPILE
inline BOOL MethodIsVisibleOutsideItsAssembly(MethodDesc * pMD);
inline BOOL MethodIsVisibleOutsideItsAssembly(DWORD dwMethodAttr, DWORD dwClassAttr, BOOL fIsGlobalClass);
- inline void CheckBeforeAllocConsole(AppDomain* pDomain, Assembly* pAssembly);
// ----------------------------------------
// SecurityStackWalk
@@ -336,8 +334,6 @@ public:
#ifdef FEATURE_CAS_POLICY
virtual HRESULT LoadSignature( COR_TRUST **ppSignature = NULL) = 0;
- virtual void SetRequestedPermissionSet(OBJECTREF RequiredPermissionSet, OBJECTREF OptionalPermissionSet, OBJECTREF DeniedPermissionSet) = 0;
-
virtual void SetAdditionalEvidence(OBJECTREF evidence) = 0;
virtual BOOL HasAdditionalEvidence() = 0;
virtual OBJECTREF GetAdditionalEvidence() = 0;
diff --git a/src/vm/security.inl b/src/vm/security.inl
index 2f1f96cca8..fe11589787 100644
--- a/src/vm/security.inl
+++ b/src/vm/security.inl
@@ -181,7 +181,9 @@ inline void Security::CheckLinkDemandAgainstAppDomain(MethodDesc *pMD)
inline void Security::LinktimeCheckMethod(Assembly *pCaller, MethodDesc *pCallee)
{
WRAPPER_NO_CONTRACT;
- SecurityDeclarative::LinktimeCheckMethod(pCaller, pCallee);
+#ifdef FEATURE_CAS_POLICY
+ SecurityDeclarative::LinktimeCheckMethod(pCaller, pCallee);
+#endif
}
inline void Security::ClassInheritanceCheck(MethodTable *pClass, MethodTable *pParent)
@@ -196,12 +198,6 @@ inline void Security::MethodInheritanceCheck(MethodDesc *pMethod, MethodDesc *pP
SecurityDeclarative::MethodInheritanceCheck(pMethod, pParent);
}
-inline void Security::GetPermissionInstance(OBJECTREF *perm, int index)
-{
- WRAPPER_NO_CONTRACT;
- SecurityDeclarative::GetPermissionInstance(perm, index);
-}
-
inline void Security::DoDeclarativeActions(MethodDesc *pMD, DeclActionInfo *pActions, LPVOID pSecObj, MethodSecurityDescriptor *pMSD)
{
WRAPPER_NO_CONTRACT;
@@ -232,14 +228,6 @@ inline BOOL Security::MethodIsVisibleOutsideItsAssembly(DWORD dwMethodAttr, DWOR
return SecurityDeclarative::MethodIsVisibleOutsideItsAssembly(dwMethodAttr, dwClassAttr, fIsGlobalClass);
}
-inline void Security::CheckBeforeAllocConsole(AppDomain* pDomain, Assembly* pAssembly)
-{
- WRAPPER_NO_CONTRACT;
-#ifdef FEATURE_CAS_POLICY
- SecurityRuntime::CheckBeforeAllocConsole(pDomain, pAssembly);
-#endif
-}
-
// ----------------------------------------
// SecurityStackWalk
// ----------------------------------------
diff --git a/src/vm/securityattributes.cpp b/src/vm/securityattributes.cpp
index 0facbbbfb3..1f8e3e1d4d 100644
--- a/src/vm/securityattributes.cpp
+++ b/src/vm/securityattributes.cpp
@@ -21,133 +21,6 @@ HRESULT BlobToAttributeSet(BYTE* pBuffer, ULONG cbBuffer, CORSEC_ATTRSET* pAttrS
#ifndef CROSSGEN_COMPILE
-OBJECTREF SecurityAttributes::CreatePermissionSet(BOOL fTrusted)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- OBJECTREF pPermSet = NULL;
- GCPROTECT_BEGIN(pPermSet);
-
- MethodTable* pMT = MscorlibBinder::GetClass(CLASS__PERMISSION_SET);
- pPermSet = (OBJECTREF) AllocateObject(pMT);
-
- ARG_SLOT fStatus = (fTrusted) ? 1 : 0;
-
- MethodDescCallSite ctor(METHOD__PERMISSION_SET__CTOR);
-
- ARG_SLOT arg[2] = {
- ObjToArgSlot(pPermSet),
- BoolToArgSlot(fStatus)
- };
- ctor.Call(arg);
-
- GCPROTECT_END();
-
- return pPermSet;
-}
-
-#ifdef FEATURE_CAS_POLICY
-
-// todo: remove the non-cas parameters (because they're bogus now anyway)
-void SecurityAttributes::XmlToPermissionSet(PBYTE pbXmlBlob,
- DWORD cbXmlBlob,
- OBJECTREF* pPermSet,
- OBJECTREF* pEncoding,
- PBYTE pbNonCasXmlBlob,
- DWORD cbNonCasXmlBlob,
- OBJECTREF* pNonCasPermSet,
- OBJECTREF* pNonCasEncoding)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(IsProtectedByGCFrame (pPermSet));
- PRECONDITION(IsProtectedByGCFrame (pEncoding));
- PRECONDITION(IsProtectedByGCFrame (pNonCasPermSet));
- PRECONDITION(IsProtectedByGCFrame (pNonCasEncoding));
- } CONTRACTL_END;
-
- // Get Host Protection Flags
- EApiCategories eProtectedCategories = GetHostProtectionManager()->GetProtectedCategories();
-
- MethodDescCallSite decodeXML(METHOD__PERMISSION_SET__DECODE_XML, pPermSet); // can trigger GC
-
- // Deserialize the CAS PermissionSet
- if(pbXmlBlob && cbXmlBlob > 0)
- {
- _ASSERTE(*pbXmlBlob != LAZY_DECL_SEC_FLAG);
-
- // Create a new (empty) permission set.
- *pPermSet = SecurityAttributes::CreatePermissionSet(FALSE);
-
- // Buffer in managed space.
- SecurityAttributes::CopyEncodingToByteArray(pbXmlBlob, cbXmlBlob, pEncoding);
-
- ARG_SLOT args[] = {
- ObjToArgSlot(*pPermSet),
- ObjToArgSlot(*pEncoding),
- (ARG_SLOT)eProtectedCategories,
- (ARG_SLOT)0,
- };
-
- // Deserialize into a managed object.
- BOOL success = FALSE;
- EX_TRY
- {
- // Elevate thread's allowed loading level. This can cause load failures if assemblies loaded from this point on require
- // any assemblies currently being loaded.
- OVERRIDE_LOAD_LEVEL_LIMIT(FILE_ACTIVE);
- OVERRIDE_TYPE_LOAD_LEVEL_LIMIT(CLASS_LOADED);
- success = decodeXML.Call_RetBool(args);
- }
- EX_SWALLOW_NONTERMINAL
-
- if (!success)
- COMPlusThrow(kSecurityException, IDS_ENCODEDPERMSET_DECODEFAILURE);
- }
-
- // Deserialize the non-CAS PermissionSet
- if(pbNonCasXmlBlob && cbNonCasXmlBlob > 0)
- {
- _ASSERTE(*pbNonCasXmlBlob != LAZY_DECL_SEC_FLAG);
-
- // Create a new (empty) permission set.
- *pNonCasPermSet = SecurityAttributes::CreatePermissionSet(FALSE);
-
- // Buffer in managed space.
- SecurityAttributes::CopyEncodingToByteArray(pbNonCasXmlBlob, cbNonCasXmlBlob, pNonCasEncoding);
-
- ARG_SLOT args[] = {
- ObjToArgSlot(*pNonCasPermSet),
- ObjToArgSlot(*pNonCasEncoding),
- (ARG_SLOT)eProtectedCategories,
- (ARG_SLOT)0,
- };
-
- // Deserialize into a managed object.
- BOOL success = FALSE;
- EX_TRY
- {
- // Elevate thread's allowed loading level. This can cause load failures if assemblies loaded from this point on require
- // any assemblies currently being loaded.
- OVERRIDE_LOAD_LEVEL_LIMIT(FILE_ACTIVE);
- OVERRIDE_TYPE_LOAD_LEVEL_LIMIT(CLASS_LOADED);
- success = decodeXML.Call_RetBool(args);
- }
- EX_SWALLOW_NONTERMINAL
-
- if (!success)
- COMPlusThrow(kSecurityException, IDS_ENCODEDPERMSET_DECODEFAILURE);
- }
-}
-
-#endif // FEATURE_CAS_POLICY
-
//
// Determine if a security action allows an optimization where an empty permission set can be represented as
// NULL. Some VM optimizations kick in if an empty permission set can be represented as NULL; however since
@@ -177,70 +50,6 @@ bool SecurityAttributes::ActionAllowsNullPermissionSet(CorDeclSecurity action)
return action != dclPermitOnly && action != dclRequestOptional;
}
-#ifdef FEATURE_CAS_POLICY
-
-PsetCacheEntry* SecurityAttributes::MergePermissionSets(IN PsetCacheEntry *pPCE1, IN PsetCacheEntry *pPCE2, IN bool fIntersect, DWORD dwAction)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- SecurityDeclarativeCache *pSDC;
- PsetCacheEntry* pMergedPCE;
-
- struct _gc {
- OBJECTREF orSet1;
- OBJECTREF orSet2;
- OBJECTREF orMergedSet;
- } gc;
- memset(&gc, '\0', sizeof(gc));
- GCPROTECT_BEGIN(gc);
- {
- // Union or Intersect the two PermissionSets
- gc.orSet1 = pPCE1->CreateManagedPsetObject (dwAction);
-
- if(gc.orSet1 == NULL)
- pMergedPCE = fIntersect ? pPCE1 : pPCE2;
- else
- {
- gc.orSet2 = pPCE2->CreateManagedPsetObject (dwAction);
- if(gc.orSet2 == NULL)
- pMergedPCE = fIntersect ? pPCE2 : pPCE1;
- else
- {
- BinderMethodID methID = (fIntersect ? METHOD__PERMISSION_SET__INTERSECT : METHOD__PERMISSION_SET__UNION);
- MethodDescCallSite mergeMethod(methID, &gc.orSet1);
-
- ARG_SLOT args[2] = {
- ObjToArgSlot(gc.orSet1),
- ObjToArgSlot(gc.orSet2),
- };
- gc.orMergedSet = mergeMethod.Call_RetOBJECTREF(args);
-
- if(gc.orMergedSet == NULL)
- gc.orMergedSet = CreatePermissionSet(false);
-
- // Convert to XML blob
- PBYTE pbData;
- DWORD cbData;
- EncodePermissionSet(&gc.orMergedSet, &pbData, &cbData);
-
- // Store XML blob and obtain an index to reference it
- pSDC = &(GetAppDomain()->m_pSecContext->m_pSecurityDeclarativeCache);
- pMergedPCE = pSDC->CreateAndCachePset (pbData, cbData);
-
- }
- }
- }
- GCPROTECT_END();
-
- return pMergedPCE;
-}
-
-#endif // FEATURE_CAS_POLICY
-
void SecurityAttributes::CopyEncodingToByteArray(IN PBYTE pbData,
IN DWORD cbData,
OUT OBJECTREF* pArray)
@@ -280,1077 +89,6 @@ void SecurityAttributes::CopyByteArrayToEncoding(IN U1ARRAYREF* pArray,
CopyMemory(*ppbData, (*pArray)->GetDirectPointerToNonObjectElements(), size);
}
-#ifdef FEATURE_CAS_POLICY
-void SecurityAttributes::EncodePermissionSet(IN OBJECTREF* pRef,
- OUT PBYTE* ppbData,
- OUT DWORD* pcbData)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(IsProtectedByGCFrame (pRef));
- } CONTRACTL_END;
-
- MethodDescCallSite encodeXML(METHOD__PERMISSION_SET__ENCODE_XML);
-
- // Encode up the result
- ARG_SLOT args1[1];
- args1[0] = ObjToArgSlot(*pRef);
- OBJECTREF pByteArray = NULL;
- pByteArray = encodeXML.Call_RetOBJECTREF(args1);
-
- SecurityAttributes::CopyByteArrayToEncoding((U1ARRAYREF*) &pByteArray,
- ppbData,
- pcbData);
-}
-
-static void SetupRestrictSecAttributes()
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- EX_TRY
- {
- MethodDescCallSite setupSecurity(METHOD__PERMISSION_SET__SETUP_SECURITY);
-
- setupSecurity.Call(NULL);
- }
- EX_CATCH
- {
- // There is a possibility that we've already set the appdomain policy
- // level for this process. In that case we'll get a policy exception
- // that we are free to ignore.
- OBJECTREF pThrowable = GET_THROWABLE();
- DefineFullyQualifiedNameForClassOnStack();
- LPCUTF8 szClass = GetFullyQualifiedNameForClass(pThrowable->GetMethodTable());
- if (strcmp(g_PolicyExceptionClassName, szClass) != 0)
- COMPlusThrow(pThrowable);
- }
- EX_END_CATCH(RethrowTerminalExceptions)
-}
-
-Assembly* SecurityAttributes::LoadAssemblyFromToken(IMetaDataAssemblyImport *pImport, mdAssemblyRef tkAssemblyRef)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- _ASSERTE(TypeFromToken(tkAssemblyRef) == mdtAssemblyRef);
-
- // Find all the details needed to name an assembly for loading.
- ASSEMBLYMETADATA sContext;
- BYTE *pbPublicKeyOrToken;
- DWORD cbPublicKeyOrToken;
- DWORD dwFlags;
- LPWSTR wszName;
- DWORD cchName;
-
- // Initialize ASSEMBLYMETADATA structure.
- ZeroMemory(&sContext, sizeof(ASSEMBLYMETADATA));
-
- // Retrieve size of assembly name.
- HRESULT hr = pImport->GetAssemblyRefProps(tkAssemblyRef, // [IN] The AssemblyRef for which to get the properties.
- NULL, // [OUT] Pointer to the public key or token.
- NULL, // [OUT] Count of bytes in the public key or token.
- NULL, // [OUT] Buffer to fill with name.
- NULL, // [IN] Size of buffer in wide chars.
- &cchName, // [OUT] Actual # of wide chars in name.
- &sContext, // [OUT] Assembly MetaData.
- NULL, // [OUT] Hash blob.
- NULL, // [OUT] Count of bytes in the hash blob.
- NULL); // [OUT] Flags.
- _ASSERTE(SUCCEEDED(hr));
-
- // Allocate the necessary buffers.
- wszName = (LPWSTR)_alloca(cchName * sizeof(WCHAR));
- sContext.szLocale = (LPWSTR)_alloca(sContext.cbLocale * sizeof(WCHAR));
- sContext.rProcessor = (DWORD *)_alloca(sContext.ulProcessor * sizeof(DWORD));
- sContext.rOS = (OSINFO *)_alloca(sContext.ulOS * sizeof(OSINFO));
-
- // Get the assembly name and rest of naming properties.
- hr = pImport->GetAssemblyRefProps(tkAssemblyRef,
- (const void **)&pbPublicKeyOrToken,
- &cbPublicKeyOrToken,
- wszName,
- cchName,
- &cchName,
- &sContext,
- NULL,
- NULL,
- &dwFlags);
- _ASSERTE(SUCCEEDED(hr));
-
- // We've got the details of the assembly, just need to load it.
-
- // Convert assembly name to UTF8.
- MAKE_UTF8PTR_FROMWIDE(uszAssemblyName, wszName);
-
- // Unfortunately we've got an ASSEMBLYMETADATA structure, but we need
- // an AssemblyMetaDataInternal
- AssemblyMetaDataInternal internalContext;
-
- // Initialize the structure.
- ZeroMemory(&internalContext, sizeof(AssemblyMetaDataInternal));
-
- internalContext.usMajorVersion = sContext.usMajorVersion;
- internalContext.usMinorVersion = sContext.usMinorVersion;
- internalContext.usBuildNumber = sContext.usBuildNumber;
- internalContext.usRevisionNumber = sContext.usRevisionNumber;
- internalContext.rProcessor = sContext.rProcessor;
- internalContext.ulProcessor = sContext.ulProcessor;
- internalContext.rOS = sContext.rOS;
- internalContext.ulOS = sContext.ulOS;
- if(sContext.cbLocale)
- {
- MAKE_UTF8PTR_FROMWIDE(pLocale, sContext.szLocale);
- internalContext.szLocale = pLocale;
- }
- else
- {
- internalContext.szLocale = "";
- }
-
- Assembly* pAssembly = NULL;
- {
- // Elevate thread's allowed loading level. This can cause load failures if assemblies loaded from this point on require
- // any assemblies currently being loaded.
- OVERRIDE_LOAD_LEVEL_LIMIT(FILE_ACTIVE);
- pAssembly = AssemblySpec::LoadAssembly(uszAssemblyName,
- &internalContext,
- pbPublicKeyOrToken,
- cbPublicKeyOrToken,
- dwFlags);
- }
-
- // @todo: Add CORSECATTR_E_ASSEMBLY_LOAD_FAILED_EX context to this exception path?
-
- return pAssembly;
-}
-
-TypeHandle FindSecurityAttributeHandle(LPCWSTR wszTypeName)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- } CONTRACTL_END;
-
- TypeHandle hType;
- MethodDescCallSite findSecurityAttributeTypeHandle(METHOD__SECURITY_ATTRIBUTE__FIND_SECURITY_ATTRIBUTE_TYPE_HANDLE);
-
- struct _gc {
- STRINGREF str;
- } gc;
-
- ZeroMemory(&gc, sizeof(gc));
-
- GCPROTECT_BEGIN(gc);
- gc.str = StringObject::NewString(wszTypeName);
- ARG_SLOT arg[1] = {
- ObjToArgSlot(gc.str)
- };
-
- TypeHandle th = TypeHandle::FromPtr(findSecurityAttributeTypeHandle.Call_RetLPVOID(arg));
- hType = th;
- GCPROTECT_END();
-
- return hType;
-}
-
-// @TODO: replace this method with a call to the reflection code that decodes CA blobs
-// and instantiates managed attribute objects. Currently the most significant perf
-// cost of this method is due to TypeName::GetTypeWorker which it calls via
-// GetTypeFromAssemblyQualifiedName, and GetTypeUsingCASearchRules
-HRESULT SecurityAttributes::AttributeSetToManaged(OBJECTREF* /*OUT*/obj, CORSEC_ATTRSET* pAttrSet, OBJECTREF* pThrowable, DWORD* pdwErrorIndex, bool bLazy)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- // Assumption: if the first obj is protected, the whole array is protected
- if (pAttrSet->dwAttrCount > 0) {PRECONDITION(IsProtectedByGCFrame (obj));}
- } CONTRACTL_END;
-
- HRESULT hr = S_OK;
- DWORD i;
- TypeHandle hType;
- MethodTable *pMT = NULL;
- MethodDesc *pMD = NULL;
-
- // Elevate the allowed loading level
- // Elevate thread's allowed loading level. This can cause load failures if assemblies loaded from this point on require any assemblies currently being loaded.
- OVERRIDE_LOAD_LEVEL_LIMIT(FILE_ACTIVE);
- OVERRIDE_TYPE_LOAD_LEVEL_LIMIT(CLASS_LOADED);
-
- for (i = 0; i < pAttrSet->dwAttrCount; i++)
- {
- CORSEC_ATTRIBUTE *pAttr = &pAttrSet->pAttrs[i];
-
- if (pdwErrorIndex)
- *pdwErrorIndex = pAttr->dwIndex;
-
- // Find the assembly that contains the security attribute class.
- _ASSERTE(pAttr->pName);
- Assembly *pAssembly;
-
- if (bLazy)
- {
- // Convert type name to Unicode
- MAKE_WIDEPTR_FROMUTF8(wszTypeName, pAttr->pName);
-
- {
- // Load the type
- {
- DWORD error = (DWORD)-1;
- NewHolder<TypeName> pTypeName = new TypeName(wszTypeName, &error);
-
- if (error == (DWORD)(-1) && !(pTypeName->GetAssembly()->IsEmpty()))
- {
- hType = pTypeName->GetTypeFromAsm(FALSE);
- }
- else
- {
- hType = TypeName::GetTypeFromAssembly(wszTypeName, SystemDomain::SystemAssembly());
- }
- }
-
- // Special workaround for if the compile-time version of the attribute is no longer available
- if (hType.IsNull() || hType.GetMethodTable() == NULL)
- hType = FindSecurityAttributeHandle(wszTypeName);
- }
- }
- else
- {
- if (!IsNilToken(pAttr->tkAssemblyRef) && TypeFromToken(pAttr->tkAssemblyRef) == mdtAssemblyRef)
- {
- // Load from AssemblyRef token stored in the CORSEC_ATTRSET
- pAssembly = LoadAssemblyFromToken(pAttrSet->pImport, pAttr->tkAssemblyRef);
- }
- else
- {
- // Load from MSCORLIB.
- pAssembly = SystemDomain::SystemAssembly();
- }
- _ASSERTE(pAssembly && "Failed to find assembly with declarative attribute");
-
- EX_TRY
- {
- hType = ClassLoader::LoadTypeByNameThrowing(pAssembly, NULL, pAttr->pName);
- }
- EX_CATCH_THROWABLE(pThrowable);
- }
-
- // Load the security attribute class.
- if (hType.IsNull() || (pMT = hType.GetMethodTable()) == NULL)
- {
- MAKE_WIDEPTR_FROMUTF8(wszTemp, pAttr->pName);
- SString sMessage;
- GetExceptionMessage(*pThrowable, sMessage);
- if (!sMessage.IsEmpty())
- hr = VMPostError(CORSECATTR_E_TYPE_LOAD_FAILED_EX, wszTemp, sMessage.GetUnicode());
- else
- hr = VMPostError(CORSECATTR_E_TYPE_LOAD_FAILED, wszTemp);
- return hr;
- }
-
- // Make sure it's not abstract.
- if (pMT->IsAbstract())
- return VMPostError(CORSECATTR_E_ABSTRACT);
-
-#ifdef _DEBUG
- // Make sure it's really a security attribute class
- /*{
- MethodTable *pParentMT = pMT->GetParentMethodTable();
- CHAR *szClass;
- DefineFullyQualifiedNameForClassOnStack();
- while (pParentMT) {
- szClass = GetFullyQualifiedNameForClass(pParentMT->GetClass());
- if (stricmpUTF8(szClass, COR_BASE_SECURITY_ATTRIBUTE_CLASS_ANSI) == 0)
- break;
- pParentMT = pParentMT->GetParentMethodTable();
- }
- _ASSERTE(pParentMT && "Security attribute not derived from COR_BASE_SECURITY_ATTRIBUTE_CLASS");
- }*/
-#endif
-
- // Instantiate an instance.
- obj[i] = pMT->Allocate();
-
- // Find and call the constructor.
- pMD = MemberLoader::FindConstructor(pMT, &gsig_IM_SecurityAction_RetVoid);
- if (pMD == NULL)
- return VMPostError(CORSECATTR_E_MISSING_CONSTRUCTOR);
- MethodDescCallSite ctor(pMD);
- ARG_SLOT args[] = {
- ObjToArgSlot(obj[i]),
- (ARG_SLOT)pAttrSet->dwAction
- };
- ctor.Call(args);
-
- // Set the attributes and properties
- hr = SetAttrFieldsAndProperties(pAttr, pThrowable, pMT, &obj[i]);
- if (FAILED(hr))
- return hr;
- }
-
- return hr;
-}
-
-
-HRESULT SecurityAttributes::SetAttrFieldsAndProperties(CORSEC_ATTRIBUTE *pAttr, OBJECTREF* pThrowable, MethodTable* pMT, OBJECTREF* pObj)
-{
- // Setup fields and properties on the object, as specified by the
- // serialized data passed to us.
- BYTE *pbBuffer = pAttr->pbValues;
- SIZE_T cbBuffer = pAttr->cbValues;
- BYTE *pbBufferEnd = pbBuffer + cbBuffer;
- DWORD j;
- HRESULT hr = S_OK;
-
- EX_TRY
- {
- for (j = 0; j < pAttr->wValues; j++)
- {
- DWORD dwType = 0;
- BOOL bIsField = FALSE;
- BYTE *pbName;
- DWORD cbName;
- DWORD dwLength;
- NewArrayHolder<CHAR> szName(NULL);
- TypeHandle hEnum;
- CorElementType eEnumType = ELEMENT_TYPE_END;
-
- // Check we've got at least the field/property specifier and the
- // type code.
- if(cbBuffer < (sizeof(BYTE) + sizeof(BYTE)))
- {
- hr = VMPostError(CORSECATTR_E_TRUNCATED);
- goto Error;
- }
-
- // Grab the field/property specifier.
- bIsField = *(BYTE*)pbBuffer == SERIALIZATION_TYPE_FIELD;
- if(!bIsField && *(BYTE*)pbBuffer != SERIALIZATION_TYPE_PROPERTY)
- {
- hr = VMPostError(CORSECATTR_E_TRUNCATED);
- goto Error;
- }
- pbBuffer += sizeof(BYTE);
- cbBuffer -= sizeof(BYTE);
-
- // Grab the value type.
- dwType = *(BYTE*)pbBuffer;
- pbBuffer += sizeof(BYTE);
- cbBuffer -= sizeof(BYTE);
-
- // If it's a type that needs further specification, get that information
- switch (dwType)
- {
- case SERIALIZATION_TYPE_ENUM:
- // Immediately after the enum type token is the fully
- // qualified name of the value type used to represent
- // the enum.
- if (FAILED(CPackedLen::SafeGetData((BYTE const *)pbBuffer,
- (BYTE const *)pbBufferEnd,
- &cbName,
- (BYTE const **)&pbName)))
- {
- hr = VMPostError(CORSECATTR_E_TRUNCATED);
- goto Error;
- }
-
- // SafeGetData ensured that the name is within the buffer
- _ASSERTE(FitsIn<DWORD>((pbName - pbBuffer) + cbName));
- dwLength = static_cast<DWORD>((pbName - pbBuffer) + cbName);
- pbBuffer += dwLength;
- cbBuffer -= dwLength;
-
- // Buffer the name and nul terminate it.
- szName = new (nothrow) CHAR[cbName + 1];
- if (szName == NULL)
- {
- hr = E_OUTOFMEMORY;
- goto Error;
- }
- memcpy(szName, pbName, cbName);
- szName[cbName] = '\0';
-
- // Lookup the type (possibly loading an assembly containing
- // the type).
- hEnum = TypeName::GetTypeUsingCASearchRules(szName, NULL);
-
- //If we couldn't find the type, post an error
- if (hEnum.IsNull())
- {
- MAKE_WIDEPTR_FROMUTF8(wszTemp, szName);
- SString sMessage;
- GetExceptionMessage(*pThrowable, sMessage);
- if (!sMessage.IsEmpty())
- hr = VMPostError(CORSECATTR_E_TYPE_LOAD_FAILED_EX, wszTemp, sMessage.GetUnicode());
- else
- hr = VMPostError(CORSECATTR_E_TYPE_LOAD_FAILED, wszTemp);
- goto Error;
- }
-
- // Calculate the underlying primitive type of the
- // enumeration.
- eEnumType = hEnum.GetInternalCorElementType();
- break;
- case SERIALIZATION_TYPE_SZARRAY:
- case SERIALIZATION_TYPE_TYPE:
- // Can't deal with these yet.
- hr = VMPostError(CORSECATTR_E_UNSUPPORTED_TYPE);
- goto Error;
- }
-
- // Grab the field/property name and length.
- if (FAILED(CPackedLen::SafeGetData((BYTE const *)pbBuffer,
- (BYTE const *)pbBufferEnd,
- &cbName,
- (BYTE const **)&pbName)))
- {
- hr = VMPostError(CORSECATTR_E_TRUNCATED);
- goto Error;
- }
-
- // SafeGetData ensured that the name is within the buffer
- _ASSERTE(FitsIn<DWORD>((pbName - pbBuffer) + cbName));
- dwLength = static_cast<DWORD>((pbName - pbBuffer) + cbName);
- pbBuffer += dwLength;
- cbBuffer -= dwLength;
-
- // Buffer the name and null terminate it.
- szName = new (nothrow) CHAR[cbName + 1];
- if (szName == NULL)
- {
- hr = E_OUTOFMEMORY;
- goto Error;
- }
- memcpy(szName, pbName, cbName);
- szName[cbName] = '\0';
-
- // Set the field or property
- if (bIsField)
- hr = SetAttrField(&pbBuffer, &cbBuffer, dwType, hEnum, pMT, szName, pObj, dwLength, pbName, cbName, eEnumType);
- else
- hr = SetAttrProperty(&pbBuffer, &cbBuffer, pMT, dwType, szName, pObj, dwLength, pbName, cbName, eEnumType);
- }
- }
-Error:;
- EX_CATCH
- {
- hr = GET_EXCEPTION()->GetHR();
- if (pThrowable)
- {
- *pThrowable = GET_THROWABLE();
- }
- }
- EX_END_CATCH(SwallowAllExceptions);
- return hr;
-}
-
-HRESULT SecurityAttributes::SetAttrField(BYTE** ppbBuffer, SIZE_T* pcbBuffer, DWORD dwType, TypeHandle hEnum, MethodTable* pMT, __in_z LPSTR szName, OBJECTREF* pObj, DWORD dwLength, BYTE* pbName, DWORD cbName, CorElementType eEnumType)
-{
- DWORD cbSig = 0;
- NewArrayHolder<BYTE> pbSig(new (nothrow) BYTE[128]);
- if (pbSig == NULL)
- return E_OUTOFMEMORY;
-
- BYTE *pbBufferEnd = *ppbBuffer + *pcbBuffer;
-
- // Build the field signature.
- cbSig += CorSigCompressData((ULONG)IMAGE_CEE_CS_CALLCONV_FIELD, &pbSig[cbSig]);
- switch (dwType)
- {
- case SERIALIZATION_TYPE_BOOLEAN:
- case SERIALIZATION_TYPE_I1:
- case SERIALIZATION_TYPE_I2:
- case SERIALIZATION_TYPE_I4:
- case SERIALIZATION_TYPE_I8:
- case SERIALIZATION_TYPE_U1:
- case SERIALIZATION_TYPE_U2:
- case SERIALIZATION_TYPE_U4:
- case SERIALIZATION_TYPE_U8:
- case SERIALIZATION_TYPE_R4:
- case SERIALIZATION_TYPE_R8:
- case SERIALIZATION_TYPE_CHAR:
- static_assert_no_msg(SERIALIZATION_TYPE_BOOLEAN == (CorSerializationType)ELEMENT_TYPE_BOOLEAN);
- static_assert_no_msg(SERIALIZATION_TYPE_I1 == (CorSerializationType)ELEMENT_TYPE_I1);
- static_assert_no_msg(SERIALIZATION_TYPE_I2 == (CorSerializationType)ELEMENT_TYPE_I2);
- static_assert_no_msg(SERIALIZATION_TYPE_I4 == (CorSerializationType)ELEMENT_TYPE_I4);
- static_assert_no_msg(SERIALIZATION_TYPE_I8 == (CorSerializationType)ELEMENT_TYPE_I8);
- static_assert_no_msg(SERIALIZATION_TYPE_U1 == (CorSerializationType)ELEMENT_TYPE_U1);
- static_assert_no_msg(SERIALIZATION_TYPE_U2 == (CorSerializationType)ELEMENT_TYPE_U2);
- static_assert_no_msg(SERIALIZATION_TYPE_U4 == (CorSerializationType)ELEMENT_TYPE_U4);
- static_assert_no_msg(SERIALIZATION_TYPE_U8 == (CorSerializationType)ELEMENT_TYPE_U8);
- static_assert_no_msg(SERIALIZATION_TYPE_R4 == (CorSerializationType)ELEMENT_TYPE_R4);
- static_assert_no_msg(SERIALIZATION_TYPE_R8 == (CorSerializationType)ELEMENT_TYPE_R8);
- static_assert_no_msg(SERIALIZATION_TYPE_CHAR == (CorSerializationType)ELEMENT_TYPE_CHAR);
- cbSig += CorSigCompressData(dwType, &pbSig[cbSig]);
- break;
- case SERIALIZATION_TYPE_STRING:
- cbSig += CorSigCompressData((ULONG)ELEMENT_TYPE_STRING, &pbSig[cbSig]);
- break;
- case SERIALIZATION_TYPE_ENUM:
- // To avoid problems when the field and enum are defined
- // in different scopes (we'd have to go hunting for
- // typerefs), we build a signature with a special type
- // (ELEMENT_TYPE_INTERNAL, which contains a TypeHandle).
- // This compares loaded types for indentity.
- cbSig += CorSigCompressData((ULONG)ELEMENT_TYPE_INTERNAL, &pbSig[cbSig]);
- cbSig += CorSigCompressPointer(hEnum.AsPtr(), &pbSig[cbSig]);
- break;
- default:
- return VMPostError(CORSECATTR_E_UNSUPPORTED_TYPE);
- }
-
-
- // Locate a field desc.
- FieldDesc* pFD = MemberLoader::FindField(pMT, szName, (PCCOR_SIGNATURE)pbSig,
- cbSig, pMT->GetModule());
- if (pFD == NULL)
- {
- MAKE_WIDEPTR_FROMUTF8(wszTemp, szName);
- return VMPostError(CORSECATTR_E_NO_FIELD, wszTemp);
- }
-
- // Set the field value.
- LPSTR szString;
- switch (dwType)
- {
- case SERIALIZATION_TYPE_BOOLEAN:
- case SERIALIZATION_TYPE_I1:
- case SERIALIZATION_TYPE_U1:
- if(*pcbBuffer < sizeof(BYTE))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- pFD->SetValue8(*pObj, *(BYTE*)(*ppbBuffer));
- (*ppbBuffer) += sizeof(BYTE);
- (*pcbBuffer) -= sizeof(BYTE);
- break;
- case SERIALIZATION_TYPE_CHAR:
- case SERIALIZATION_TYPE_I2:
- case SERIALIZATION_TYPE_U2:
- if(*pcbBuffer < sizeof(WORD))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- pFD->SetValue16(*pObj, GET_UNALIGNED_VAL16(*ppbBuffer));
- (*ppbBuffer) += sizeof(WORD);
- (*pcbBuffer) -= sizeof(WORD);
- break;
- case SERIALIZATION_TYPE_I4:
- case SERIALIZATION_TYPE_U4:
- case SERIALIZATION_TYPE_R4:
- if(*pcbBuffer < sizeof(DWORD))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- pFD->SetValue32(*pObj, GET_UNALIGNED_VAL32(*ppbBuffer));
- (*ppbBuffer) += sizeof(DWORD);
- (*pcbBuffer) -= sizeof(DWORD);
- break;
- case SERIALIZATION_TYPE_I8:
- case SERIALIZATION_TYPE_U8:
- case SERIALIZATION_TYPE_R8:
- if(*pcbBuffer < sizeof(INT64))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- pFD->SetValue64(*pObj, GET_UNALIGNED_VAL64(*ppbBuffer));
- (*ppbBuffer) += sizeof(INT64);
- (*pcbBuffer) -= sizeof(INT64);
- break;
- case SERIALIZATION_TYPE_STRING:
- // Ensures special case 'null' check below does not overrun buffer
- if(*ppbBuffer >= pbBufferEnd) {
- return VMPostError(CORSECATTR_E_TRUNCATED);
- }
- // Special case 'null' (represented as a length byte of '0xFF').
- if (*(*ppbBuffer) == 0xFF) {
- szString = NULL;
- dwLength = sizeof(BYTE);
- } else {
- if (FAILED(CPackedLen::SafeGetData((BYTE const *)*ppbBuffer,
- (BYTE const *)pbBufferEnd,
- &cbName,
- (BYTE const **)&pbName)))
- {
- return VMPostError(CORSECATTR_E_TRUNCATED);
- }
-
- // SafeGetData will ensure the name is within the buffer
- _ASSERTE(FitsIn<DWORD>((pbName - *ppbBuffer) + cbName));
- dwLength = static_cast<DWORD>((pbName - *ppbBuffer) + cbName);
-
- DWORD allocLen = cbName + 1;
- // Buffer and nul terminate it.
- szString = (LPSTR)_alloca(allocLen);
- memcpy(szString, pbName, cbName);
- szString[cbName] = '\0';
-
- }
-
- // Allocate and initialize a managed version of the string.
- {
- STRINGREF orString;
- if (szString)
- {
- orString = StringObject::NewString(szString, cbName);
- if (orString == NULL)
- COMPlusThrowOM();
- }
- else
- orString = NULL;
-
- pFD->SetRefValue(*pObj, (OBJECTREF)orString);
- }
-
- (*ppbBuffer) += dwLength;
- (*pcbBuffer) -= dwLength;
- break;
- case SERIALIZATION_TYPE_ENUM:
- // Get the underlying primitive type.
- switch (eEnumType)
- {
- case ELEMENT_TYPE_I1:
- case ELEMENT_TYPE_U1:
- if(*pcbBuffer < sizeof(BYTE))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- pFD->SetValue8(*pObj, *(BYTE*)(*ppbBuffer));
- (*ppbBuffer) += sizeof(BYTE);
- (*pcbBuffer) -= sizeof(BYTE);
- break;
- case ELEMENT_TYPE_I2:
- case ELEMENT_TYPE_U2:
- if(*pcbBuffer < sizeof(WORD))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- pFD->SetValue16(*pObj, GET_UNALIGNED_VAL16(*ppbBuffer));
- (*ppbBuffer) += sizeof(WORD);
- (*pcbBuffer) -= sizeof(WORD);
- break;
- case ELEMENT_TYPE_I4:
- case ELEMENT_TYPE_U4:
- if(*pcbBuffer < sizeof(DWORD))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- pFD->SetValue32(*pObj, GET_UNALIGNED_VAL32(*ppbBuffer));
- (*ppbBuffer) += sizeof(DWORD);
- (*pcbBuffer) -= sizeof(DWORD);
- break;
- default:
- return VMPostError(CORSECATTR_E_UNSUPPORTED_ENUM_TYPE);
- }
- break;
- default:
- return VMPostError(CORSECATTR_E_UNSUPPORTED_TYPE);
- }
- return S_OK;
-}
-
-HRESULT SecurityAttributes::SetAttrProperty(BYTE** ppbBuffer, SIZE_T* pcbBuffer, MethodTable* pMT, DWORD dwType, __in_z LPSTR szName, OBJECTREF* pObj, DWORD dwLength, BYTE* pbName, DWORD cbName, CorElementType eEnumType)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- PRECONDITION(IsProtectedByGCFrame (pObj));
- } CONTRACTL_END;
-
- // Locate the property setter.
- MethodDesc* pMD = MemberLoader::FindPropertyMethod(pMT, szName, PropertySet);
- if (pMD == NULL)
- {
- MAKE_WIDEPTR_FROMUTF8(wszTemp, szName);
- return VMPostError(CORSECATTR_E_NO_PROPERTY, wszTemp);
- }
-
- MethodDescCallSite propSet(pMD);
-
- // Build the argument list.
- ARG_SLOT args[2] = { NULL, NULL };
- LPSTR szString;
- NewHolder<BYTE> tmpLargeStringHolder (NULL);
-
- switch (dwType)
- {
- case SERIALIZATION_TYPE_BOOLEAN:
- case SERIALIZATION_TYPE_I1:
- case SERIALIZATION_TYPE_U1:
- if(*pcbBuffer < sizeof(BYTE))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- args[1] = (ARG_SLOT)*(BYTE*)(*ppbBuffer);
- (*ppbBuffer) += sizeof(BYTE);
- (*pcbBuffer) -= sizeof(BYTE);
- break;
- case SERIALIZATION_TYPE_CHAR:
- case SERIALIZATION_TYPE_I2:
- case SERIALIZATION_TYPE_U2:
- if(*pcbBuffer < sizeof(WORD))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- args[1] = (ARG_SLOT)GET_UNALIGNED_VAL16(*ppbBuffer);
- (*ppbBuffer) += sizeof(WORD);
- (*pcbBuffer) -= sizeof(WORD);
- break;
- case SERIALIZATION_TYPE_I4:
- case SERIALIZATION_TYPE_U4:
- case SERIALIZATION_TYPE_R4:
- if(*pcbBuffer < sizeof(DWORD))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- args[1] = (ARG_SLOT)GET_UNALIGNED_VAL32(*ppbBuffer);
- (*ppbBuffer) += sizeof(DWORD);
- (*pcbBuffer) -= sizeof(DWORD);
- break;
- case SERIALIZATION_TYPE_I8:
- case SERIALIZATION_TYPE_U8:
- case SERIALIZATION_TYPE_R8:
- if(*pcbBuffer < sizeof(INT64))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- args[1] = (ARG_SLOT)GET_UNALIGNED_VAL64(*ppbBuffer);
- (*ppbBuffer) += sizeof(INT64);
- (*pcbBuffer) -= sizeof(INT64);
- break;
- case SERIALIZATION_TYPE_STRING:
- // Ensures special case 'null' check below does not overrun buffer
- if(*pcbBuffer < sizeof(BYTE)) {
- return VMPostError(CORSECATTR_E_TRUNCATED);
- }
- // Special case 'null' (represented as a length byte of '0xFF').
- if (*(*ppbBuffer) == 0xFF) {
- szString = NULL;
- dwLength = sizeof(BYTE);
- if(*pcbBuffer < sizeof(BYTE))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- } else {
-
- if (FAILED(CPackedLen::SafeGetData((BYTE const *)(*ppbBuffer),
- (BYTE const *)(*ppbBuffer + *pcbBuffer),
- &cbName,
- (BYTE const **)&pbName)))
- {
- return VMPostError(CORSECATTR_E_TRUNCATED);
- }
-
- // Used below - SafeGetData ensures that name is within the buffer
- _ASSERTE(FitsIn<DWORD>((pbName - *ppbBuffer) + cbName));
- dwLength = static_cast<DWORD>((pbName - *ppbBuffer) + cbName);
-
- DWORD allocLen = cbName + 1;
-
- //
- // For smaller size strings allocate from stack, use heap otherwise
- //
-
- if ((pbName - *ppbBuffer) < 4) {
- // Buffer and nul terminate it.
- szString = (LPSTR)_alloca(allocLen);
- } else {
- tmpLargeStringHolder = new BYTE[allocLen];
- szString = (LPSTR) ((BYTE*)tmpLargeStringHolder);
- }
-
- memcpy(szString, pbName, cbName);
- szString[cbName] = '\0';
- }
-
- // Allocate and initialize a managed version of the string.
- {
- STRINGREF orString;
-
- if (szString) {
- orString = StringObject::NewString(szString, cbName);
- if (orString == NULL)
- COMPlusThrowOM();
- } else
- orString = NULL;
-
- args[1] = ObjToArgSlot(orString);
- }
-
- (*ppbBuffer) += dwLength;
- (*pcbBuffer) -= dwLength;
- break;
- case SERIALIZATION_TYPE_ENUM:
- // Get the underlying primitive type.
- switch (eEnumType)
- {
- case ELEMENT_TYPE_I1:
- case ELEMENT_TYPE_U1:
- if(*pcbBuffer < sizeof(BYTE))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- args[1] = (ARG_SLOT)*(BYTE*)(*ppbBuffer);
- (*ppbBuffer) += sizeof(BYTE);
- (*pcbBuffer) -= sizeof(BYTE);
- break;
- case ELEMENT_TYPE_I2:
- case ELEMENT_TYPE_U2:
- if(*pcbBuffer < sizeof(WORD))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- args[1] = (ARG_SLOT)GET_UNALIGNED_VAL16(*ppbBuffer);
- (*ppbBuffer) += sizeof(WORD);
- (*pcbBuffer) -= sizeof(WORD);
- break;
- case ELEMENT_TYPE_I4:
- case ELEMENT_TYPE_U4:
- if(*pcbBuffer < sizeof(DWORD))
- return VMPostError(CORSECATTR_E_TRUNCATED);
- args[1] = (ARG_SLOT)GET_UNALIGNED_VAL32(*ppbBuffer);
- (*ppbBuffer) += sizeof(DWORD);
- (*pcbBuffer) -= sizeof(DWORD);
- break;
- default:
- return VMPostError(CORSECATTR_E_UNSUPPORTED_ENUM_TYPE);
- }
- break;
- default:
- return VMPostError(CORSECATTR_E_UNSUPPORTED_TYPE);
- }
-
-
- // ! don't move this up, StringObject::NewString
- // ! inside the switch causes a GC
- args[0] = ObjToArgSlot(*pObj);
-
- // Call the setter.
- propSet.Call(args);
-
- return S_OK;
-}
-
-
-void SecurityAttributes::AttrSetBlobToPermissionSets(
- IN BYTE* pbRawPermissions,
- IN DWORD cbRawPermissions,
- OUT OBJECTREF* pObj,
- DWORD dwAction)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- } CONTRACTL_END;
-
- _ASSERTE(pbRawPermissions);
- _ASSERTE(cbRawPermissions > 0);
- _ASSERTE(pbRawPermissions[0] == LAZY_DECL_SEC_FLAG);
-
- HRESULT hr = S_OK;
- CORSEC_ATTRSET pset;
-
- // Deserialize the CORSEC_ATTRSET
- hr = BlobToAttributeSet(pbRawPermissions, cbRawPermissions, &pset, dwAction);
- if(FAILED(hr))
- COMPlusThrowHR(hr);
-
- OBJECTREF throwable = NULL;
- GCPROTECT_BEGIN(throwable);
- {
- // allocate and GC-protect an array of objectrefs to reference the permissions
- OBJECTREF* attrArray = (OBJECTREF*)_alloca(pset.dwAttrCount * sizeof(OBJECTREF));
- memset(attrArray, 0, pset.dwAttrCount * sizeof(OBJECTREF));
- GCPROTECT_ARRAY_BEGIN(*attrArray, pset.dwAttrCount);
- {
- // Convert to a managed array of attribute objects
- DWORD dwErrorIndex;
- hr = AttributeSetToManaged(/*OUT*/attrArray, &pset, &throwable, &dwErrorIndex, true);
-
- // Convert the array of attribute objects to a serialized PermissionSet
- if (SUCCEEDED(hr))
- {
- BYTE* pbXmlBlob = NULL;
- DWORD cbXmlBlob = 0;
- BYTE* pbNonCasXmlBlob = NULL;
- DWORD cbNonCasXmlBlob = 0;
-
- AttrArrayToPermissionSet(attrArray,
- false,
- pset.dwAttrCount,
- &pbXmlBlob,
- &cbXmlBlob,
- &pbNonCasXmlBlob,
- &cbNonCasXmlBlob,
- ActionAllowsNullPermissionSet(static_cast<CorDeclSecurity>(dwAction)),
- pObj);
-
- _ASSERTE(pbXmlBlob == NULL && cbXmlBlob == 0 && pbNonCasXmlBlob == NULL && cbNonCasXmlBlob == 0);
- }
- }
- GCPROTECT_END();
- }
- GCPROTECT_END();
-
- if(FAILED(hr))
- COMPlusThrowHR(hr);
-}
-
-HRESULT SecurityAttributes::TranslateSecurityAttributesHelper(
- CORSEC_ATTRSET *pAttrSet,
- BYTE **ppbOutput,
- DWORD *pcbOutput,
- BYTE **ppbNonCasOutput,
- DWORD *pcbNonCasOutput,
- DWORD *pdwErrorIndex)
-{
- CONTRACTL {
- NOTHROW;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- HRESULT hr = S_OK;
- OBJECTREF *attrArray;
- DWORD dwGlobalError = 0;
-
- EX_TRY
- {
- if (pdwErrorIndex)
- dwGlobalError = *pdwErrorIndex;
-
- // Get into the context of the special compilation appdomain (which has an
- // AppBase set to the current directory).
- ComCallWrapper *pWrap = ComCallWrapper::GetWrapperFromIP(pAttrSet->pAppDomain);
-
- ENTER_DOMAIN_ID(pWrap->GetDomainID())
- {
- struct _gc {
- OBJECTREF throwable;
- OBJECTREF orPermSet;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
- GCPROTECT_BEGIN(gc);
- {
- // we need to setup special security settings that we use during compilation
- SetupRestrictSecAttributes();
-
- // allocate and protect an array of objectrefs to reference the permissions
- attrArray = (OBJECTREF*)_alloca(pAttrSet->dwAttrCount * sizeof(OBJECTREF));
- memset(attrArray, 0, pAttrSet->dwAttrCount * sizeof(OBJECTREF));
- GCPROTECT_ARRAY_BEGIN(*attrArray, pAttrSet->dwAttrCount);
- {
- // Convert to an array of attributes, and then serialize to XML
- hr = AttributeSetToManaged(/*OUT*/attrArray, pAttrSet, &gc.throwable, pdwErrorIndex, false);
- if (SUCCEEDED(hr))
- {
- if (pdwErrorIndex)
- *pdwErrorIndex = dwGlobalError;
-
- // Convert the array of attribute objects to a serialized PermissionSet or PermissionSetCollection
- AttrArrayToPermissionSet(attrArray,
- true,
- pAttrSet->dwAttrCount,
- ppbOutput,
- pcbOutput,
- ppbNonCasOutput,
- pcbNonCasOutput,
- ActionAllowsNullPermissionSet(static_cast<CorDeclSecurity>(pAttrSet->dwAction)),
- &gc.orPermSet);
- }
- }
- GCPROTECT_END();
- }
- GCPROTECT_END(); // for throwable
- }
- END_DOMAIN_TRANSITION;
- }
- EX_CATCH_HRESULT(hr);
- return hr;
-}
-
-// Call into managed code to group permissions into a PermissionSet and serialize it to XML
-void SecurityAttributes::AttrArrayToPermissionSet(OBJECTREF* attrArray,
- bool fSerialize,
- DWORD attrCount,
- BYTE **ppbOutput,
- DWORD *pcbOutput,
- BYTE **ppbNonCasOutput,
- DWORD *pcbNonCasOutput,
- bool fAllowEmptyPermissionSet,
- OBJECTREF* pPermSet)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- EApiCategories eProtectedCategories = (EApiCategories)(GetHostProtectionManager()->GetProtectedCategories());
-
- MethodDescCallSite createSerialized(METHOD__PERMISSION_SET__CREATE_SERIALIZED);
-
- // Allocate a managed array of security attribute objects for input to the function.
- PTRARRAYREF orInput = (PTRARRAYREF) AllocateObjectArray(attrCount, g_pObjectClass);
-
- // Copy over the permission objects references.
- DWORD i;
- for (i = 0; i < attrCount; i++)
- {
- orInput->SetAt(i, attrArray[i]);
- }
-
- // Call the routine.
- struct _gc {
- U1ARRAYREF orNonCasOutput;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
- GCPROTECT_BEGIN(gc);
-
- ARG_SLOT args[] = {
- ObjToArgSlot(orInput),
- BoolToArgSlot(fSerialize),
- PtrToArgSlot(&gc.orNonCasOutput),
- PtrToArgSlot(pPermSet),
- (ARG_SLOT)eProtectedCategories,
- BoolToArgSlot(fAllowEmptyPermissionSet)
- };
- U1ARRAYREF orOutput = NULL;
-
- {
- // Elevate the allowed loading level
- // Elevate thread's allowed loading level. This can cause load failures if assemblies loaded from this point on require any assemblies currently being loaded.
- OVERRIDE_LOAD_LEVEL_LIMIT(FILE_ACTIVE);
- OVERRIDE_TYPE_LOAD_LEVEL_LIMIT(CLASS_LOADED);
-
- orOutput = (U1ARRAYREF) createSerialized.Call_RetOBJECTREF(args);
- }
-
- // Buffer the managed output in a native binary blob.
- // Special case the empty blob. We might get a second blob output if
- // there were any non-CAS permissions present.
- NewArrayHolder<BYTE> TempOutput(NULL);
- NewArrayHolder<BYTE> TempNonCasOutput(NULL);
-
- if (orOutput == NULL)
- {
- *pcbOutput = 0;
- }
- else
- {
- BYTE *pbArray = orOutput->GetDataPtr();
- DWORD cbArray = orOutput->GetNumComponents();
- TempOutput = new BYTE[cbArray];
- memcpy(TempOutput, pbArray, cbArray);
- *pcbOutput = cbArray;
- }
-
- if (gc.orNonCasOutput == NULL)
- {
- *pcbNonCasOutput = 0;
- }
- else
- {
- BYTE *pbArray = gc.orNonCasOutput->GetDataPtr();
- DWORD cbArray = gc.orNonCasOutput->GetNumComponents();
- TempNonCasOutput = new BYTE[cbArray];
- memcpy(TempNonCasOutput, pbArray, cbArray);
- *pcbNonCasOutput = cbArray;
- }
-
- *ppbOutput = TempOutput;
- *ppbNonCasOutput = TempNonCasOutput;
-
- TempOutput.SuppressRelease();
- TempNonCasOutput.SuppressRelease();
-
- GCPROTECT_END();
-}
-#endif // FEATURE_CAS_POLICY
-
//
// This is a public exported method
//
@@ -1363,27 +101,7 @@ HRESULT STDMETHODCALLTYPE TranslateSecurityAttributes(CORSEC_ATTRSET *pAttrSe
DWORD *pcbNonCasOutput,
DWORD *pdwErrorIndex)
{
-#ifdef FEATURE_CAS_POLICY
- CONTRACTL {
- NOTHROW;
- GC_TRIGGERS;
- ENTRY_POINT;
- MODE_ANY;
- } CONTRACTL_END;
- HRESULT hr = S_OK;
-
- BEGIN_ENTRYPOINT_NOTHROW;
-
- GCX_COOP(); // because it calls into managed code to instantiate the PermissionSet objects
- hr = SecurityAttributes::TranslateSecurityAttributesHelper(pAttrSet, ppbOutput, pcbOutput,
- ppbNonCasOutput, pcbNonCasOutput, pdwErrorIndex);
-
- END_ENTRYPOINT_NOTHROW;
-
- return hr;
-#else
return E_NOTIMPL;
-#endif
}
diff --git a/src/vm/securitydeclarative.cpp b/src/vm/securitydeclarative.cpp
index 25418d03e8..e0aff16ddd 100644
--- a/src/vm/securitydeclarative.cpp
+++ b/src/vm/securitydeclarative.cpp
@@ -596,109 +596,6 @@ void SecurityDeclarative::MethodInheritanceCheck(MethodDesc *pMethod, MethodDesc
MDSecDesc.InvokeInheritanceChecks(pMethod);
}
-//---------------------------------------------------------
-// Invoke linktime checks on the caller if demands exist
-// for the callee.
-//---------------------------------------------------------
-/*static*/
-void SecurityDeclarative::LinktimeCheckMethod(Assembly *pCaller, MethodDesc *pCallee)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- INJECT_FAULT(COMPlusThrowOM(););
- } CONTRACTL_END;
-
-#ifdef FEATURE_CAS_POLICY
- // Do a fulltrust check on the caller if the callee is fully trusted
- if (FullTrustCheckForLinkOrInheritanceDemand(pCaller))
- {
- return;
- }
-
-#ifdef CROSSGEN_COMPILE
- CrossGenNotSupported("SecurityDeclarative::LinktimeCheckMethod");
-#else
- GCX_COOP();
-
- MethodTable *pTargetMT = pCallee->GetMethodTable();
-
- // If it's a delegate BeginInvoke, we need to perform a HostProtection check for synchronization
- if(pTargetMT->IsDelegate())
- {
- DelegateEEClass* pDelegateClass = (DelegateEEClass*)pTargetMT->GetClass();
- if(pCallee == pDelegateClass->m_pBeginInvokeMethod)
- {
- EApiCategories eProtectedCategories = GetHostProtectionManager()->GetProtectedCategories();
- if((eProtectedCategories & eSynchronization) == eSynchronization)
- {
- if(!pCaller->GetSecurityDescriptor()->IsFullyTrusted())
- {
- ThrowHPException(eProtectedCategories, eSynchronization);
- }
- }
- }
- }
-
- // the rest of the LinkDemand checks
- {
- // Track perfmon counters. Linktime security checkes.
- COUNTER_ONLY(GetPerfCounters().m_Security.cLinkChecks++);
-
-#ifdef FEATURE_APTCA
- // APTCA check
- SecurityDeclarative::DoUntrustedCallerChecks(pCaller, pCallee, FALSE);
-#endif // FEATURE_APTCA
-
- // If the class has its own linktime checks, do them first...
- if (pTargetMT->GetClass()->RequiresLinktimeCheck())
- {
- TypeSecurityDescriptor::InvokeLinktimeChecks(pTargetMT, pCaller);
- }
-
- // If the previous check passed, check the method for
- // method-specific linktime checks...
- if (IsMdHasSecurity(pCallee->GetAttrs()) &&
- (TokenMightHaveDeclarations(pTargetMT->GetMDImport(),
- pCallee->GetMemberDef(),
- dclLinktimeCheck) ||
- TokenMightHaveDeclarations(pTargetMT->GetMDImport(),
- pCallee->GetMemberDef(),
- dclNonCasLinkDemand) ))
- {
- MethodSecurityDescriptor::InvokeLinktimeChecks(pCallee, pCaller);
- }
-
- // We perform automatic linktime checks for UnmanagedCode in three cases:
- // o P/Invoke calls
- // o Calls through an interface that have a suppress runtime check
- // attribute on them (these are almost certainly interop calls).
- // o Interop calls made through method impls.
- if (pCallee->IsNDirect() ||
- (pTargetMT->IsInterface() &&
- (pTargetMT->GetMDImport()->GetCustomAttributeByName(pTargetMT->GetCl(),
- COR_SUPPRESS_UNMANAGED_CODE_CHECK_ATTRIBUTE_ANSI,
- NULL,
- NULL) == S_OK ||
- pTargetMT->GetMDImport()->GetCustomAttributeByName(pCallee->GetMemberDef(),
- COR_SUPPRESS_UNMANAGED_CODE_CHECK_ATTRIBUTE_ANSI,
- NULL,
- NULL) == S_OK) ) ||
- (pCallee->IsComPlusCall() && !pCallee->IsInterface()))
- {
- if (!pCaller->GetSecurityDescriptor()->CanCallUnmanagedCode())
- {
- Security::ThrowSecurityException(g_SecurityPermissionClassName, SPFLAGSUNMANAGEDCODE);
- }
- }
- }
-
-#endif // !CROSSGEN_COMPILE
-
-#endif // FEATURE_CAS_POLICY
-}
-
#ifndef CROSSGEN_COMPILE
//-----------------------------------------------------------------------------
//
@@ -708,53 +605,6 @@ void SecurityDeclarative::LinktimeCheckMethod(Assembly *pCaller, MethodDesc *pCa
//
//-----------------------------------------------------------------------------
-void SecurityDeclarative::_GetSharedPermissionInstance(OBJECTREF *perm, int index)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- _ASSERTE(index < (int) NUM_PERM_OBJECTS);
-
- AppDomain *pDomain = GetAppDomain();
- SharedPermissionObjects *pShared = &pDomain->m_pSecContext->m_rPermObjects[index];
-
- if (pShared->hPermissionObject == NULL) {
- pShared->hPermissionObject = pDomain->CreateHandle(NULL);
- *perm = NULL;
- }
- else
- *perm = ObjectFromHandle(pShared->hPermissionObject);
-
- if (*perm == NULL)
- {
- MethodTable *pMT = NULL;
- OBJECTREF p = NULL;
-
- GCPROTECT_BEGIN(p);
-
- pMT = MscorlibBinder::GetClass(pShared->idClass);
- MethodDescCallSite ctor(pShared->idConstructor);
-
- p = AllocateObject(pMT);
-
- ARG_SLOT argInit[2] =
- {
- ObjToArgSlot(p),
- (ARG_SLOT) pShared->dwPermissionFlag
- };
-
- ctor.Call(argInit);
-
- StoreObjectInHandle(pShared->hPermissionObject, p);
- *perm = p;
-
- GCPROTECT_END();
- }
-}
-
#ifdef FEATURE_APTCA
void DECLSPEC_NORETURN SecurityDeclarative::ThrowAPTCAException(Assembly *pCaller, MethodDesc *pCallee)
{
diff --git a/src/vm/securitydeclarative.h b/src/vm/securitydeclarative.h
index 625e6840b9..151d094e97 100644
--- a/src/vm/securitydeclarative.h
+++ b/src/vm/securitydeclarative.h
@@ -42,9 +42,6 @@ inline LinktimeCheckReason operator&=(LinktimeCheckReason &lhs, LinktimeCheckRea
namespace SecurityDeclarative
{
- // Returns an instance of a well-known permission. (It caches them, so each permission is created only once.)
- void _GetSharedPermissionInstance(OBJECTREF *perm, int index);
-
// Perform the declarative actions
// Callers:
// DoDeclarativeSecurity
diff --git a/src/vm/securitydeclarative.inl b/src/vm/securitydeclarative.inl
index f4034bfb15..1d14c9886f 100644
--- a/src/vm/securitydeclarative.inl
+++ b/src/vm/securitydeclarative.inl
@@ -38,12 +38,6 @@ inline LinktimeCheckReason operator&=(LinktimeCheckReason &lhs, LinktimeCheckRea
return lhs;
}
-inline void SecurityDeclarative::GetPermissionInstance(OBJECTREF *perm, int index)
-{
- WRAPPER_NO_CONTRACT;
- _GetSharedPermissionInstance(perm, index);
-}
-
inline BOOL SecurityDeclarative::FullTrustCheckForLinkOrInheritanceDemand(Assembly *pAssembly)
{
WRAPPER_NO_CONTRACT;
diff --git a/src/vm/securitydescriptor.cpp b/src/vm/securitydescriptor.cpp
index a91022fa67..a14095a981 100644
--- a/src/vm/securitydescriptor.cpp
+++ b/src/vm/securitydescriptor.cpp
@@ -404,59 +404,7 @@ void PEFileSecurityDescriptor::ResolveWorker()
}
CONTRACTL_END;
- if (NingenEnabled()) {
- SetGrantedPermissionSet(NULL, NULL, 0xFFFFFFFF);
- }
-
-#ifndef CROSSGEN_COMPILE
- struct _gc
- {
- OBJECTREF evidence; // Object containing evidence
- OBJECTREF granted; // Policy based Granted Permission
- OBJECTREF grantdenied; // Policy based explicitly Denied Permissions
- }
- gc;
- ZeroMemory(&gc, sizeof(gc));
-
- GCPROTECT_BEGIN(gc);
-
- DWORD dwSpecialFlags = 0;
- if (QuickIsFullyTrusted())
- {
- Security::GetPermissionInstance(&gc.granted, SECURITY_FULL_TRUST);
- dwSpecialFlags = 0xFFFFFFFF;
- }
- else
- {
- if (IsEvidenceComputed())
- {
- gc.evidence = ObjectFromLazyHandle(m_hAdditionalEvidence, m_pLoaderAllocator);
- }
- else
- {
- gc.evidence = GetEvidence();
- }
-
- if (!m_pAppDomain->GetSecurityDescriptor()->IsLegacyCasPolicyEnabled())
- {
- gc.granted = SecurityPolicy::ResolveGrantSet(gc.evidence, &dwSpecialFlags, FALSE);
- }
- else
- {
- gc.granted = SecurityPolicy::ResolveCasPolicy(gc.evidence,
- NULL,
- NULL,
- NULL,
- &gc.grantdenied,
- &dwSpecialFlags,
- FALSE);
- }
- }
-
- SetGrantedPermissionSet(gc.granted, NULL, dwSpecialFlags);
-
- GCPROTECT_END();
-#endif // CROSSGEN_COMPILE
+ SetGrantedPermissionSet(NULL, NULL, 0xFFFFFFFF);
}
BOOL PEFileSecurityDescriptor::AllowBindingRedirects()
diff --git a/src/vm/securitydescriptorappdomain.cpp b/src/vm/securitydescriptorappdomain.cpp
index bf51d1d39b..fecb6a5d3f 100644
--- a/src/vm/securitydescriptorappdomain.cpp
+++ b/src/vm/securitydescriptorappdomain.cpp
@@ -16,83 +16,6 @@
#ifndef DACCESS_COMPILE
-#ifndef FEATURE_CORECLR
-BOOL ApplicationSecurityDescriptor::QuickIsFullyTrusted()
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
-
-#ifdef CROSSGEN_COMPILE
- return TRUE;
-#else
- if (IsDefaultAppDomain())
- {
- return TRUE;
- }
-
- // NGEN is always done in full trust
- if (m_pAppDomain->IsCompilationDomain())
- {
- return TRUE;
- }
-
- // Check if we need to call the HostSecurityManager.
- if (CallHostSecurityManager())
- {
- return FALSE;
- }
-
- APPDOMAINREF adRef = static_cast<APPDOMAINREF>(m_pAppDomain->GetExposedObject());
-
- // - If this AppDomain is a standard domain (full trust homogeneous), we are full trust
- // - If this is a homogeneous case, get the PermissionSet from managed code
- // - If CAS policy is not enabled, then we are fully trusted
- // - Otherwise, check the quick cache
- if (adRef->GetIsFastFullTrustDomain())
- {
- return TRUE;
- }
- else if (IsHomogeneous())
- {
- // A homogenous domain will be fully trusted if its grant set is full trust
- APPLICATIONTRUSTREF appTrustRef = static_cast<APPLICATIONTRUSTREF>(adRef->GetApplicationTrust());
- POLICYSTATEMENTREF psRef = static_cast<POLICYSTATEMENTREF>(appTrustRef->GetPolicyStatement());
- PERMISSIONSETREF grantSetRef = psRef->GetPermissionSet();
- return grantSetRef->IsUnrestricted();
- }
- else if (!IsLegacyCasPolicyEnabled())
- {
- return TRUE;
- }
- else
- {
- return CheckQuickCache(SecurityConfig::FullTrustAll, GetZone());
- }
-#endif // CROSSGEN_COMPILE
-}
-#endif // FEATURE_CORECLR
-
-#ifdef FEATURE_CAS_POLICY
-OBJECTREF ApplicationSecurityDescriptor::GetEvidence()
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- PRECONDITION(m_pAppDomain == GetAppDomain());
- INJECT_FAULT(COMPlusThrowOM(););
- } CONTRACTL_END;
-
- OBJECTREF retval = ObjectFromLazyHandle(m_hAdditionalEvidence, m_pLoaderAllocator);
- return retval;
-}
-#endif // FEATURE_CAS_POLICY
-
void ApplicationSecurityDescriptor::Resolve()
{
CONTRACTL {
@@ -106,200 +29,10 @@ void ApplicationSecurityDescriptor::Resolve()
if (IsResolved())
return;
-#ifndef CROSSGEN_COMPILE
- ResolveWorker();
-#else
SetGrantedPermissionSet(NULL, NULL, 0xFFFFFFFF);
-#endif
}
#ifndef CROSSGEN_COMPILE
-void ApplicationSecurityDescriptor::ResolveWorker()
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- INJECT_FAULT(COMPlusThrowOM(););
- } CONTRACTL_END;
-
- struct _gc
- {
- OBJECTREF evidence; // Object containing evidence
- OBJECTREF granted; // Policy based Granted Permission
- OBJECTREF grantdenied; // Policy based explicitly Denied Permissions
- }
- gc;
- ZeroMemory(&gc, sizeof(gc));
-
- GCPROTECT_BEGIN(gc);
- DWORD dwSpecialFlags;
-
- // On debug builds do a pre-resolution so that we can validate pre-resolve and post-resolve match up
- // assuming no host interference.
-#ifdef _DEBUG
- // We shouldn't be causing the first pre-resolution if we needed to cache this state for the host
- _ASSERTE(m_fIsPreResolved ||
- (GetAppDomain()->GetAppDomainManagerInitializeNewDomainFlags() & eInitializeNewDomainFlags_NoSecurityChanges) == eInitializeNewDomainFlags_None);
-
- BOOL fPreResolveFullTrust = FALSE;
- BOOL fPreResolveHomogeneous = FALSE;
- PreResolve(&fPreResolveFullTrust, &fPreResolveHomogeneous);
-#endif // _DEBUG
-
-#ifdef FEATURE_CORECLR
- // coreclr has 2 kinds of AppDomains - sandboxed or not. If sandboxed, then the homogeneous flag is set. If not, then it is a full-trust appdomain.
- if (!IsHomogeneous())
- {
- Security::GetPermissionInstance(&gc.granted, SECURITY_FULL_TRUST);
- dwSpecialFlags = 0xFFFFFFFF;
- }
- else
- {
- APPDOMAINREF adRef = (APPDOMAINREF)m_pAppDomain->GetExposedObject();
- if (adRef->GetIsFastFullTrustDomain())
- {
- Security::GetPermissionInstance(&gc.granted, SECURITY_FULL_TRUST);
- dwSpecialFlags = 0xFFFFFFFF;
- }
- else
- {
- APPLICATIONTRUSTREF appTrustRef = (APPLICATIONTRUSTREF)adRef->GetApplicationTrust();
- POLICYSTATEMENTREF psRef = appTrustRef->GetPolicyStatement();
- gc.granted = (OBJECTREF)psRef->GetPermissionSet();
-
- // We can trust the grant set special flags, since only mscorlib can access the root
- // ApplicationTrust reference.
- dwSpecialFlags = appTrustRef->GetGrantSetSpecialFlags();
- }
- }
-
-#else
- if (QuickIsFullyTrusted())
- {
- Security::GetPermissionInstance(&gc.granted, SECURITY_FULL_TRUST);
- dwSpecialFlags = 0xFFFFFFFF;
- }
- // We need to check the homogeneous flag directly rather than going through the accessor method, since
- // that method also considers the presence of a HostSecurityManager. The HostSecurityManager should not
- // affect the domain's grant set at this point however, as it does not have any domain policy resolution
- // callbacks and if it wanted customize the homogenous domain grant set it needed to do that when we called
- // its InitializeNewDomain. Longer term IsHomogenous should not consider the HostSecurityManager at all.
- else if (m_fHomogeneous)
- {
- // Homogeneous AppDomain case
-
- APPDOMAINREF adRef = (APPDOMAINREF)m_pAppDomain->GetExposedObject();
- _ASSERTE( adRef != NULL);
-
- if (adRef->GetIsFastFullTrustDomain())
- {
- Security::GetPermissionInstance(&gc.granted, SECURITY_FULL_TRUST);
- dwSpecialFlags = 0xFFFFFFFF;
- }
- else
- {
- APPLICATIONTRUSTREF appTrustRef = (APPLICATIONTRUSTREF)adRef->GetApplicationTrust();
- _ASSERTE(appTrustRef != NULL);
- POLICYSTATEMENTREF psRef = appTrustRef->GetPolicyStatement();
- _ASSERTE(psRef != NULL);
- gc.granted = (OBJECTREF)psRef->GetPermissionSet();
-
- // We can trust the grant set special flags, since only mscorlib can access the root
- // ApplicationTrust reference.
- dwSpecialFlags = appTrustRef->GetGrantSetSpecialFlags();
- }
- }
- else
- {
- // Regular AppDomain policy resolution based on AppDomain evidence
- if (IsEvidenceComputed())
- {
- gc.evidence = ObjectFromLazyHandle(m_hAdditionalEvidence, m_pLoaderAllocator);
- }
- else
- {
- gc.evidence = GetEvidence();
- }
-
- if (!IsLegacyCasPolicyEnabled())
- {
- // Either we have a host security manager or a homogenous AppDomain that could make this domain be
- // partially trusted. Call out to managed to get the grant set.
- gc.granted = SecurityPolicy::ResolveGrantSet(gc.evidence, &dwSpecialFlags, FALSE);
- }
- else
- {
- // Legacy CAS policy is enabled, so do a full CAS resolve
- gc.granted = SecurityPolicy::ResolveCasPolicy(gc.evidence,
- NULL,
- NULL,
- NULL,
- &gc.grantdenied,
- &dwSpecialFlags,
- FALSE);
- }
- }
-#endif
-
- SetGrantedPermissionSet(gc.granted, NULL, dwSpecialFlags);
-
-#ifdef FEATURE_CAS_POLICY
- // If the host promised not to modify the security of the AppDomain, throw an InvalidOperationException
- // if it did. We specifically want to check the cached version of this state on the security
- // descriptor, rather than any version calculated earlier on in this method since the domain manager has
- // already run by the time ResolveWorker is entered.
- if (GetAppDomain()->GetAppDomainManagerInitializeNewDomainFlags() & eInitializeNewDomainFlags_NoSecurityChanges)
- {
- _ASSERTE(m_fIsPreResolved);
-
- if (!!m_fPreResolutionFullTrust != !!IsFullyTrusted())
- {
- COMPlusThrow(kInvalidOperationException, W("InvalidOperation_HostModifiedSecurityState"));
- }
-
- if (!!m_fPreResolutionHomogeneous != !!IsHomogeneous())
- {
- COMPlusThrow(kInvalidOperationException, W("InvalidOperation_HostModifiedSecurityState"));
- }
- }
-#endif // FEATURE_CAS_POLICY
-
-#if defined(_DEBUG) && !defined(FEATURE_CORECLR)
- // Make sure that that our PreResolve routine is consistent with our actual resolution results. This is
- // only required to be true in the absence of an AppDomainManager.
- //
- // If any assert fires in this block, it means that PreResolve isn't correctly figuring out what the
- // incoming security state of an AppDomain is going to resolve into.
- if (!GetAppDomain()->HasAppDomainManagerInfo())
- {
-#ifdef FEATURE_CLICKONCE
- if (GetAppDomain()->IsClickOnceAppDomain())
- {
- _ASSERTE(!!IsHomogeneous() == !!fPreResolveHomogeneous);
- // We don't check grant set since we don't attempt to pre-resolve that - pre-resolution should
- // have always come back partial trust
- _ASSERTE(!fPreResolveFullTrust);
- }
- else
-#endif // FEATURE_CLICKONCE
- if (IsHomogeneous())
- {
- _ASSERTE(!!IsHomogeneous() == !!fPreResolveHomogeneous);
- _ASSERTE(!!IsFullyTrusted() == !!fPreResolveFullTrust);
- }
- else
- {
- _ASSERTE(!!IsHomogeneous() == !!fPreResolveHomogeneous);
- // We don't check grant sets on heterogeneous domains since they are never attempted to be pre-resolved.
- }
- }
-#endif // _DEBUG && !FEATURE_CORECLR
-
- GCPROTECT_END();
-}
-
//---------------------------------------------------------------------------------------
//
// Determine the security state of an AppDomain before the domain is fully configured.
@@ -332,140 +65,16 @@ void ApplicationSecurityDescriptor::PreResolve(BOOL *pfIsFullyTrusted, BOOL *pfI
GCX_COOP();
-#ifdef FEATURE_CORECLR
// On CoreCLR all domains are partial trust homogenous
m_fPreResolutionFullTrust = FALSE;
m_fPreResolutionHomogeneous = TRUE;
-#else // !FEATURE_CORECLR
- if (GetAppDomain()->IsClickOnceAppDomain())
- {
- // In the ClickOnce case we can't pre-resolve the grant set because it's entirely in the control of
- // the ApplicationSecurityManager. We conservatively assume that it will be partial trust; however
- // we always know that the domain will be homogenous
- m_fPreResolutionFullTrust = FALSE;
- m_fPreResolutionHomogeneous = TRUE;
- }
- else if (GetAppDomain()->IsCompilationDomain())
- {
- // NGEN is always full trust and homogenous
- m_fPreResolutionFullTrust = TRUE;
- m_fPreResolutionHomogeneous = TRUE;
- }
- else if (GetAppDomain()->IsDefaultDomain())
- {
- // Barring any shenanigans from the AppDomainManager, we know that the default domain will be fully
- // trusted and homogenous in the standard case, but heterogenous in the legacy CAS policy case.
- m_fPreResolutionFullTrust = TRUE;
- m_fPreResolutionHomogeneous = !Security::IsProcessWideLegacyCasPolicyEnabled();
- }
- else
- {
- // In all other AppDomains we need to consult the incoming AppDomainSetup in order to figure out if
- // the domain is being setup as full or partial trust.
- CLR_BOOL fPreResolutionFullTrust = FALSE;
- CLR_BOOL fPreResolutionHomogeneous = FALSE;
-
- MethodDescCallSite preResolve(METHOD__SECURITY_ENGINE__PRE_RESOLVE);
-
- ARG_SLOT args[] =
- {
- PtrToArgSlot(&fPreResolutionFullTrust),
- PtrToArgSlot(&fPreResolutionHomogeneous)
- };
-
- preResolve.Call(args);
-
- m_fPreResolutionFullTrust = !!fPreResolutionFullTrust;
- m_fPreResolutionHomogeneous = !!fPreResolutionHomogeneous;
- }
-#endif // FEATURE_CORECLR
-
*pfIsFullyTrusted = m_fPreResolutionFullTrust;
*pfIsHomogeneous = m_fPreResolutionHomogeneous;
m_fIsPreResolved = TRUE;
}
#endif // CROSSGEN_COMPILE
-#ifdef FEATURE_CAS_POLICY
-//---------------------------------------------------------------------------------------
-//
-// Determine if an AppDomain should allow an assembly to be LoadFrom-ed a remote location.
-// Since pre-v4 versions of the CLR would implicitly sandbox this load, we only want to
-// allow this if the application has either acknowledged it to be safe, or if the application
-// has taken control of sandboxing itself.
-//
-// This method returns true if the load should be allowed, false if it should be blocked
-// from a remote location.
-//
-
-BOOL ApplicationSecurityDescriptor::AllowsLoadsFromRemoteSources()
-{
- CONTRACTL
- {
- GC_TRIGGERS;
- THROWS;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- // If the application has explicitly enabled remote LoadFroms then we should allow the load
- if (Security::CanLoadFromRemoteSources())
- {
- return true;
- }
-
- // Otherwise, we only allow the load if the assembly is going to be sandboxed (or explicitly not sandboxed
- // by a host). That can happen if we've got legacy CAS polcy enabled, if we're in a homogenous AppDomain,
- // or if there is a HostSecurityManager that cares about assembly policy.
- //
- // Note that we don't allow LoadFrom a remote source in a domain that had its ApplicationTrust supplied by
- // the CLR, since that domain would have implicitly sandboxed the LoadFrom in CLR v2. Instead, these
- // domains require that there be a HostSecurityManager present which setup the sandbox.
-
- if (IsHomogeneous() && !m_fRuntimeSuppliedHomogenousGrantSet)
- {
- return true;
- }
-
- if (IsLegacyCasPolicyEnabled())
- {
- return true;
- }
-
- return false;
-}
-
-DWORD ApplicationSecurityDescriptor::GetZone()
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- INJECT_FAULT(COMPlusThrowOM(););
- PRECONDITION(IsLegacyCasPolicyEnabled());
- }
- CONTRACTL_END;
-
- SecZone dwZone = NoZone;
- if (m_pAppDomain->GetRootAssembly() != NULL && m_pAppDomain->IsDefaultDomain())
- {
- LPCWSTR wszAsmPath = m_pAppDomain->GetRootAssembly()->GetManifestFile()->GetPath();
-
- if (wszAsmPath)
- {
- StackSString ssPath( W("file://") );
- ssPath.Append( wszAsmPath );
-
- dwZone = SecurityPolicy::MapUrlToZone(ssPath.GetUnicode());
- }
- }
-
- return dwZone;
-}
-#endif // FEATURE_CAS_POLICY
-
//
// PLS (PermissionListSet) optimization Implementation
@@ -737,27 +346,6 @@ BOOL ApplicationSecurityDescriptor::ContainsAnyRefusedPermissions()
return m_fContainsAnyRefusedPermissions;
}
-#ifdef FEATURE_CAS_POLICY
-void ApplicationSecurityDescriptor::SetLegacyCasPolicyEnabled()
-{
- STANDARD_VM_CONTRACT;
-
- // APPX precludes the use of legacy CAS policy
- if (!AppX::IsAppXProcess())
- {
- SecurityPolicy::InitPolicyConfig();
- m_fLegacyCasPolicy = TRUE;
- }
-}
-
-BOOL ApplicationSecurityDescriptor::IsLegacyCasPolicyEnabled()
-{
- LIMITED_METHOD_CONTRACT;
- return m_fLegacyCasPolicy && !AppX::IsAppXProcess();
-}
-
-#endif // FEATURE_CAS_POLICY
-
// Is it possible for the AppDomain to contain partial trust code. This method may return true even if the
// domain does not currently have partial trust code in it - a true value simply means that it is possible
// for partial trust code to eventually end up in the domain.
diff --git a/src/vm/securitydescriptorassembly.cpp b/src/vm/securitydescriptorassembly.cpp
index c2aef22019..715d956123 100644
--- a/src/vm/securitydescriptorassembly.cpp
+++ b/src/vm/securitydescriptorassembly.cpp
@@ -34,82 +34,6 @@ AssemblySecurityDescriptor::AssemblySecurityDescriptor(AppDomain *pDomain, Domai
} CONTRACTL_END;
}
-#ifdef FEATURE_CAS_POLICY
-OBJECTREF AssemblySecurityDescriptor::GetRequestedPermissionSet(OBJECTREF *pOptionalPermissionSet,
- OBJECTREF *pDeniedPermissionSet)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(m_pAppDomain == GetAppDomain());
- PRECONDITION(CheckPointer(pOptionalPermissionSet));
- PRECONDITION(CheckPointer(pDeniedPermissionSet));
- PRECONDITION(m_pAppDomain->GetSecurityDescriptor()->IsLegacyCasPolicyEnabled());
- INJECT_FAULT(COMPlusThrowOM(););
- }
- CONTRACTL_END;
-
- OBJECTREF req = NULL;
- GCPROTECT_BEGIN(req);
-
- if (!IsAssemblyRequestsComputed())
- {
- ReleaseHolder<IMDInternalImport> pImport (m_pAssem->GetFile()->GetMDImportWithRef());
-
- // Try to load permission requests from assembly first.
- SecurityAttributes::LoadPermissionRequestsFromAssembly(pImport,
- &req,
- pOptionalPermissionSet,
- pDeniedPermissionSet);
-
- SetRequestedPermissionSet(req, *pOptionalPermissionSet, *pDeniedPermissionSet);
- }
- else
- {
- *pOptionalPermissionSet = ObjectFromLazyHandle(m_hOptionalPermissionSet, m_pLoaderAllocator);
- *pDeniedPermissionSet = ObjectFromLazyHandle(m_hDeniedPermissionSet, m_pLoaderAllocator);
- req = ObjectFromLazyHandle(m_hRequiredPermissionSet, m_pLoaderAllocator);
- }
-
- GCPROTECT_END();
- return req;
-}
-
-void AssemblySecurityDescriptor::SetRequestedPermissionSet(OBJECTREF RequiredPermissionSet,
- OBJECTREF OptionalPermissionSet,
- OBJECTREF DeniedPermissionSet)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
-
- struct _gc
- {
- OBJECTREF RequiredPermissionSet;
- OBJECTREF OptionalPermissionSet;
- OBJECTREF DeniedPermissionSet;
- } gc;
-
- gc.RequiredPermissionSet = RequiredPermissionSet;
- gc.OptionalPermissionSet = OptionalPermissionSet;
- gc.DeniedPermissionSet = DeniedPermissionSet;
-
- GCPROTECT_BEGIN(gc);
- StoreObjectInLazyHandle(m_hRequiredPermissionSet, gc.RequiredPermissionSet, m_pLoaderAllocator);
- StoreObjectInLazyHandle(m_hOptionalPermissionSet, gc.OptionalPermissionSet, m_pLoaderAllocator);
- StoreObjectInLazyHandle(m_hDeniedPermissionSet, gc.DeniedPermissionSet, m_pLoaderAllocator);
- GCPROTECT_END();
-
- m_fAssemblyRequestsComputed = TRUE;
-}
-#endif // FEATURE_CAS_POLICY
-
//
// This method will return TRUE if this assembly is allowed to skip verification.
//
@@ -485,160 +409,7 @@ void AssemblySecurityDescriptor::ResolveWorker()
INJECT_FAULT(COMPlusThrowOM(););
} CONTRACTL_END;
-#ifdef FEATURE_CORECLR
SetGrantedPermissionSet(NULL, NULL, 0xFFFFFFFF);
-#else
- if (CanSkipPolicyResolution() || NingenEnabled()) {
- SetGrantedPermissionSet(NULL, NULL, 0xFFFFFFFF);
- m_pAssem->GetFile()->SetStrongNameBypassed();
- return;
- }
-
-#ifndef CROSSGEN_COMPILE
- struct _gc {
- OBJECTREF reqdPset; // Required Requested Permissions
- OBJECTREF optPset; // Optional Requested Permissions
- OBJECTREF denyPset; // Denied Permissions
- OBJECTREF evidence; // Object containing evidence
- OBJECTREF granted; // Policy based Granted Permission
- OBJECTREF grantdenied; // Policy based explicitly Denied Permissions
- } gc;
- ZeroMemory(&gc, sizeof(gc));
-
- // Policy resolution can cause string comparisons that trigger .nlp module loads. (Specifically,
- // FileIOPermission can trigger this). At this point mscorlib is already loaded, so we can
- // override the load levels here to allow the .nlp module loads.
- OVERRIDE_LOAD_LEVEL_LIMIT(FILE_ACTIVE);
- OVERRIDE_TYPE_LOAD_LEVEL_LIMIT(CLASS_LOADED);
-
- // Resolve is one of the few SecurityDescriptor routines that may be called
- // from the wrong appdomain context. If that's the case we will transition
- // into the correct appdomain for the duration of the call.
-
- ENTER_DOMAIN_PTR_PREDICATED(m_pAppDomain,ADV_RUNNINGIN,!IsSystem())
- {
- GCPROTECT_BEGIN(gc);
-
- //
- // GAC assemblies with no RequestRefuse get FullTrust
- // Also AppDomains with an AppTrust that are fully trusted are
- // homogeneous and so every assembly that does not have a RequestRefuse
- // will also get FullTrust.
- //
-
- DWORD dwSpecialFlags;
-
- if (QuickIsFullyTrusted())
- {
- Security::GetPermissionInstance(&gc.granted, SECURITY_FULL_TRUST);
- dwSpecialFlags = 0xFFFFFFFF;
- }
- else
- {
- // We couldn't quickly figure out that the assembly was fully trusted, so gather its evidence and
- // call managed code to get the final grant set.
- if (IsEvidenceComputed())
- {
- gc.evidence = ObjectFromLazyHandle(m_hAdditionalEvidence, m_pLoaderAllocator);
- }
- else
- {
- gc.evidence = GetEvidence();
- }
-
- if (!m_pAppDomain->GetSecurityDescriptor()->IsLegacyCasPolicyEnabled())
- {
- // Either we have a host security manager or a homogenous AppDomain that could make this
- // assembly be partially trusted. Call out to managed to get the grant set.
- gc.granted = SecurityPolicy::ResolveGrantSet(gc.evidence, &dwSpecialFlags, TRUE);
- }
- else
- {
- // Legacy CAS policy is enabled, so do a full CAS resolve
- gc.reqdPset = GetRequestedPermissionSet(&gc.optPset, &gc.denyPset);
- gc.granted = SecurityPolicy::ResolveCasPolicy(gc.evidence,
- gc.reqdPset,
- gc.optPset,
- gc.denyPset,
- &gc.grantdenied,
- &dwSpecialFlags,
- TRUE);
- }
- }
-
- SetGrantedPermissionSet(gc.granted, gc.denyPset, dwSpecialFlags);
-
-#ifdef FEATURE_CAS_POLICY
- // If we're delaying verification of the assembly's strong name, check to see if we need to force a
- // verification at this point.
- if (!m_pAssem->IsSystem() &&
- !m_pAssem->GetFile()->IsSourceGAC() &&
- !m_pAssem->GetFile()->IsStrongNameVerified())
- {
- //
- // #StrongNameBypass
- //
- // If the application has opted into the strong name bypass feature, then we will attempt to
- // load its assemblies without verifying their strong names. We can get away with avoiding the
- // strong name verification in the case where all of the following apply.
- //
- // 1. The application has asked for strong name bypass
- // 2. The machine administrator has not disabled strong name bypass for the machine
- // 3. The assembly being loaded is fully trusted, and this trust is not soley based upon its
- // strong name.
- // 4. The AppDomain the assembly is being loaded into is fully trusted
- // 5. The assembly is fully signed
- // 6. The appdomain is not attempting to run ngen.
- //
- // Condition #3 requires that the grant set of the assembly not be obtained via the strong name
- // evidence of the assembly. Note that this requirement does not forbid matching a code group
- // with a strong name membership condition, as long as that code group and any children code
- // groups produce a grant set which was less than or equal to the grant set produced by other
- // code groups. For instance, in standard security policy:
- //
- // 1.1 MyComputer -> FullTrust
- // 1.1.1 Microsoft Strong Name -> FullTrust
- //
- // In this case, an assembly loaded from the local machine with the Microsoft strong name is
- // still eligable for strong name bypass via condition #3, since the MyComputer FullTrust grant
- // set unioned with the StrongName FullTrust grant set will produce the same results as if we
- // didn't evaluate the StrongName code group.
- //
- // Note that strong name bypass is not the same thing as strong name skip verification. Skip
- // verification is a development time feature which enables developers to test privately built
- // assemblies that do not have a full signature yet. It is not intended for use at runtime on
- // non-developer machines, nor is it intended for use on assemblies with valid strong names.
- //
- // In contrast strong name bypass is intended to be used on assemblies with valid strong names
- // that are deployed to end users machines. It's a performance feature which enables assemblies
- // that were not gaining any benefit from having their strong name validated to avoid having to
- // pay the expense of a full signature verification. This is why ngen does not skip. There
- // are potential ways to use the ngen cache to skip strong name verification if ngen participates
- // in strong name bypass, and the startup performance concern of the application is not a concern
- // when running at ngen time.
- //
-
- if (IsFullyTrusted() &&
- GetDomain()->GetSecurityDescriptor()->IsFullyTrusted() &&
- !SecurityPolicy::WasStrongNameEvidenceUsed(gc.evidence) &&
- DontNeedToFlagAccidentalDelaySigning(m_pAssem->GetFile()) &&
- !IsCompilationProcess())
- {
- m_pAssem->GetFile()->SetStrongNameBypassed();
- }
- else
- {
- m_pAssem->GetFile()->VerifyStrongName();
- }
- }
-#endif // FEATURE_CAS_POLICY
-
- GCPROTECT_END();
- }
- END_DOMAIN_TRANSITION;
-#endif // CROSSGEN_COMPILE
-
-#endif // FEATURE_CORECLR
}
void AssemblySecurityDescriptor::ResolvePolicy(ISharedSecurityDescriptor *pSharedSecDesc, BOOL fShouldSkipPolicyResolution)
diff --git a/src/vm/securitydescriptorassembly.h b/src/vm/securitydescriptorassembly.h
index 15bc83eef6..4ba65eb11d 100644
--- a/src/vm/securitydescriptorassembly.h
+++ b/src/vm/securitydescriptorassembly.h
@@ -115,10 +115,6 @@ public:
OBJECTREF GetRequestedPermissionSet(OBJECTREF *pOptionalPermissionSet, OBJECTREF *pDeniedPermissionSet);
- virtual void SetRequestedPermissionSet(OBJECTREF RequiredPermissionSet,
- OBJECTREF OptionalPermissionSet,
- OBJECTREF DeniedPermissionSet);
-
#ifndef DACCESS_COMPILE
virtual void SetAdditionalEvidence(OBJECTREF evidence);
virtual BOOL HasAdditionalEvidence();
diff --git a/src/vm/securityhostprotection.cpp b/src/vm/securityhostprotection.cpp
deleted file mode 100644
index 45825135ae..0000000000
--- a/src/vm/securityhostprotection.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-//
-
-
-#include "common.h"
-#include "securityattributes.h"
-#include "security.h"
-#include "eeconfig.h"
-#include "corhost.h"
-
-CorHostProtectionManager::CorHostProtectionManager()
-{
- CONTRACTL
- {
- MODE_ANY;
- GC_NOTRIGGER;
- NOTHROW;
- }CONTRACTL_END;
-
- m_eProtectedCategories = eNoChecks;
- m_fEagerSerializeGrantSet = false;
- m_fFrozen = false;
-}
-
-HRESULT CorHostProtectionManager::QueryInterface(REFIID id, void **pInterface)
-{
- WRAPPER_NO_CONTRACT;
- STATIC_CONTRACT_SO_TOLERANT;
-#ifdef FEATURE_INCLUDE_ALL_INTERFACES
- if (id == IID_ICLRHostProtectionManager)
- {
- *pInterface = GetHostProtectionManager();
- return S_OK;
- }
-#endif // FEATURE_INCLUDE_ALL_INTERFACES
- return E_NOINTERFACE;
-}
-
-ULONG CorHostProtectionManager::AddRef()
-{
- LIMITED_METHOD_CONTRACT;
- return 1;
-}
-
-ULONG CorHostProtectionManager::Release()
-{
- LIMITED_METHOD_CONTRACT;
- return 1;
-}
-
-void CorHostProtectionManager::Freeze()
-{
- LIMITED_METHOD_CONTRACT;
- m_fFrozen = true;
-}
-
-HRESULT CorHostProtectionManager::SetProtectedCategories(EApiCategories eProtectedCategories)
-{
- LIMITED_METHOD_CONTRACT;
- STATIC_CONTRACT_SO_TOLERANT;
-
- if(m_fFrozen)
- return E_FAIL;
- if((eProtectedCategories | eAll) != eAll)
- return E_FAIL;
- m_eProtectedCategories = eProtectedCategories;
- return S_OK;
-}
-
-EApiCategories CorHostProtectionManager::GetProtectedCategories()
-{
- WRAPPER_NO_CONTRACT;
-
- Freeze();
- return m_eProtectedCategories;
-}
-
-bool CorHostProtectionManager::GetEagerSerializeGrantSets() const
-{
- LIMITED_METHOD_CONTRACT;
-
- // To provide more context about this flag in the hosting API, this is the case where,
- // during the unload of an appdomain, we need to serialize a grant set for a shared assembly
- // that has resolved policy in order to maintain the invariant that the same assembly loaded
- // into another appdomain created in the future will be granted the same permissions
- // (since the current policy is potentially burned into the jitted code of the shared assembly already).
-
- return m_fEagerSerializeGrantSet;
-}
-
-HRESULT CorHostProtectionManager::SetEagerSerializeGrantSets()
-{
- LIMITED_METHOD_CONTRACT;
- STATIC_CONTRACT_SO_TOLERANT;
-
- m_fEagerSerializeGrantSet = true;
- return S_OK;
-}
diff --git a/src/vm/securityhostprotection.h b/src/vm/securityhostprotection.h
deleted file mode 100644
index 11e814a976..0000000000
--- a/src/vm/securityhostprotection.h
+++ /dev/null
@@ -1,14 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-//
-
-
-#ifndef __SECURITYHOSTPROTECTION_H__
-#define __SECURITYHOSTPROTECTION_H__
-
-class CorHostProtectionManager;
-
-#endif // __SECURITYHOSTPROTECTION_H__
diff --git a/src/vm/securityimperative.cpp b/src/vm/securityimperative.cpp
deleted file mode 100644
index 677fd3c6da..0000000000
--- a/src/vm/securityimperative.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-
-//
-
-#include "common.h"
-#include "security.h"
-
-//-----------------------------------------------------------+
-// P R I V A T E H E L P E R S
-//-----------------------------------------------------------+
-
-LPVOID GetSecurityObjectForFrameInternal(StackCrawlMark *stackMark, INT32 create, OBJECTREF *pRefSecDesc)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- // This is a package protected method. Assumes correct usage.
-
- Thread *pThread = GetThread();
- AppDomain * pAppDomain = pThread->GetDomain();
-
- if (pRefSecDesc == NULL)
- {
- if (!Security::SkipAndFindFunctionInfo(stackMark, NULL, &pRefSecDesc, &pAppDomain))
- return NULL;
- }
-
- if (pRefSecDesc == NULL)
- return NULL;
-
- // Is security object frame in a different context?
- bool fSwitchContext;
- fSwitchContext = pAppDomain != pThread->GetDomain();
-
- if (create && *pRefSecDesc == NULL)
- {
- // If necessary, shift to correct context to allocate security object.
- _ASSERTE(pAppDomain == GetAppDomain());
- MethodTable* pMethFrameSecDesc = MscorlibBinder::GetClass(CLASS__FRAME_SECURITY_DESCRIPTOR);
- *pRefSecDesc = AllocateObject(pMethFrameSecDesc);
- }
-
- // If we found or created a security object in a different context, make a
- // copy in the current context.
- LPVOID rv;
- if (fSwitchContext && *pRefSecDesc != NULL)
- *((OBJECTREF*)&rv) = AppDomainHelper::CrossContextCopyFrom(pAppDomain, pRefSecDesc);
- else
- *((OBJECTREF*)&rv) = *pRefSecDesc;
-
- return rv;
-}
-
-FCIMPL2(Object*, SecurityRuntime::GetSecurityObjectForFrame, StackCrawlMark* stackMark, CLR_BOOL create)
-{
- FCALL_CONTRACT;
-
- OBJECTREF refRetVal = NULL;
-
- HELPER_METHOD_FRAME_BEGIN_RET_0();
-
- refRetVal = ObjectToOBJECTREF((Object*)GetSecurityObjectForFrameInternal(stackMark, create, NULL));
-
- HELPER_METHOD_FRAME_END();
- return OBJECTREFToObject(refRetVal);
-}
-FCIMPLEND
-
-void SecurityRuntime::CheckBeforeAllocConsole(AppDomain* pDomain, Assembly* pAssembly)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- // Tell the debugger not to start on any managed code that we call in this method
- FrameWithCookie<DebuggerSecurityCodeMarkFrame> __dbgSecFrame;
-
- // Check that the assembly is granted unrestricted UIPermission
- IAssemblySecurityDescriptor* pSecDesc = pAssembly->GetSecurityDescriptor(pDomain);
- _ASSERTE(pSecDesc != NULL);
- if (!pSecDesc->HasUnrestrictedUIPermission())
- {
- struct _gc {
- OBJECTREF orDemand;
- OBJECTREF orRefused;
- OBJECTREF orGranted;
- } gc;
- ZeroMemory(&gc, sizeof(_gc));
- GCPROTECT_BEGIN(gc);
- {
- // Get the necessary managed objects
- gc.orGranted = pSecDesc->GetGrantedPermissionSet(&gc.orRefused);
- SecurityDeclarative::_GetSharedPermissionInstance(&gc.orDemand, UI_PERMISSION);
-
- // Check that the assembly is granted the necessary permission
- SecurityStackWalk sw(SSWT_DEMAND_FROM_NATIVE, NULL);
- sw.m_objects.SetObjects(gc.orDemand, NULL);
- sw.CheckPermissionAgainstGrants(NULL, gc.orGranted, gc.orRefused, pDomain, NULL, pAssembly);
- }
- GCPROTECT_END();
- }
-
- // Now do a demand against everything on the stack for unrestricted UIPermission
- Security::SpecialDemand(SSWT_DEMAND_FROM_NATIVE, UI_PERMISSION);
-
- // Pop the debugger frame
- __dbgSecFrame.Pop();
-}
-
-
diff --git a/src/vm/securityimperative.h b/src/vm/securityimperative.h
deleted file mode 100644
index f161f57cb1..0000000000
--- a/src/vm/securityimperative.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-
-//
-
-
-#ifndef __ComSecurityRuntime_h__
-#define __ComSecurityRuntime_h__
-
-#include "common.h"
-
-#include "object.h"
-#include "util.hpp"
-
-// Forward declarations to avoid pulling in too many headers.
-class Frame;
-enum StackWalkAction;
-
-//-----------------------------------------------------------
-// The SecurityRuntime implements all the native methods
-// for the managed class System.Security.SecurityRuntime
-//-----------------------------------------------------------
-namespace SecurityRuntime
-{
-//public:
- // private helper for getting a security object
- FCDECL2(Object*, GetSecurityObjectForFrame, StackCrawlMark* stackMark, CLR_BOOL create);
-//protected:
- void CheckBeforeAllocConsole(AppDomain* pDomain, Assembly* pAssembly);
-};
-
-#endif /* __ComSecurityRuntime_h__ */
-
diff --git a/src/vm/securitymeta.cpp b/src/vm/securitymeta.cpp
index 980958d49f..ff286ddb68 100644
--- a/src/vm/securitymeta.cpp
+++ b/src/vm/securitymeta.cpp
@@ -34,7 +34,6 @@
#include "objectclone.h"
#endif //FEATURE_REMOTING
#include "typestring.h"
-#include "stackcompressor.h"
#include "securitydeclarative.h"
#include "customattribute.h"
#include "../md/compiler/custattr.h"
diff --git a/src/vm/securitypolicy.h b/src/vm/securitypolicy.h
index ba77bcbda8..d22eceb11e 100644
--- a/src/vm/securitypolicy.h
+++ b/src/vm/securitypolicy.h
@@ -234,20 +234,6 @@ struct SharedPermissionObjects
// PermissionState.Unrestricted
#define PERMISSION_STATE_UNRESTRICTED 1 // PermissionState.cs
-SELECTANY const SharedPermissionObjects g_rPermObjectsTemplate[] =
-{
- {NULL, CLASS__SECURITY_PERMISSION, METHOD__SECURITY_PERMISSION__CTOR, SECURITY_PERMISSION_UNMANAGEDCODE },
- {NULL, CLASS__SECURITY_PERMISSION, METHOD__SECURITY_PERMISSION__CTOR, SECURITY_PERMISSION_SKIPVERIFICATION },
- {NULL, CLASS__REFLECTION_PERMISSION, METHOD__REFLECTION_PERMISSION__CTOR, REFLECTION_PERMISSION_TYPEINFO },
- {NULL, CLASS__SECURITY_PERMISSION, METHOD__SECURITY_PERMISSION__CTOR, SECURITY_PERMISSION_ASSERTION },
- {NULL, CLASS__REFLECTION_PERMISSION, METHOD__REFLECTION_PERMISSION__CTOR, REFLECTION_PERMISSION_MEMBERACCESS },
- {NULL, CLASS__SECURITY_PERMISSION, METHOD__SECURITY_PERMISSION__CTOR, SECURITY_PERMISSION_SERIALIZATIONFORMATTER},
- {NULL, CLASS__REFLECTION_PERMISSION, METHOD__REFLECTION_PERMISSION__CTOR, REFLECTION_PERMISSION_RESTRICTEDMEMBERACCESS},
- {NULL, CLASS__PERMISSION_SET, METHOD__PERMISSION_SET__CTOR, PERMISSION_STATE_UNRESTRICTED},
- {NULL, CLASS__SECURITY_PERMISSION, METHOD__SECURITY_PERMISSION__CTOR, SECURITY_PERMISSION_BINDINGREDIRECTS },
- {NULL, CLASS__UI_PERMISSION, METHOD__UI_PERMISSION__CTOR, PERMISSION_STATE_UNRESTRICTED },
-};
-
// Array index in SharedPermissionObjects array
// Note: these should all be permissions that implement IUnrestrictedPermission.
// Any changes to these must be reflected in bcl\system\security\codeaccesssecurityengine.cs and the above table
@@ -282,8 +268,6 @@ SELECTANY const SharedPermissionObjects g_rPermObjectsTemplate[] =
// Class holding a grab bag of security stuff we need on a per-appdomain basis.
struct SecurityContext
{
- SharedPermissionObjects m_rPermObjects[NUM_PERM_OBJECTS];
-
// Cached declarative permissions per method
EEPtrHashTable m_pCachedMethodPermissionsHash;
SimpleRWLock * m_prCachedMethodPermissionsLock;
@@ -299,7 +283,6 @@ struct SecurityContext
GC_TRIGGERS;
MODE_ANY;
} CONTRACTL_END;
- memcpy(m_rPermObjects, g_rPermObjectsTemplate, sizeof(m_rPermObjects));
// initialize cache of method-level declarative security permissions
// Note that the method-level permissions are stored elsewhere
diff --git a/src/vm/securityprincipal.cpp b/src/vm/securityprincipal.cpp
deleted file mode 100644
index 5f31d3a24d..0000000000
--- a/src/vm/securityprincipal.cpp
+++ /dev/null
@@ -1,227 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "common.h"
-
-#include "securityprincipal.h"
-#include "corhost.h"
-#include "security.h"
-
-#ifndef FEATURE_CORECLR
-INT32 QCALLTYPE COMPrincipal::ImpersonateLoggedOnUser(HANDLE hToken)
-{
- QCALL_CONTRACT;
-
- HRESULT hr = S_OK;
-
- BEGIN_QCALL;
-
-#ifdef FEATURE_INCLUDE_ALL_INTERFACES
- IHostSecurityManager *pSM = CorHost2::GetHostSecurityManager();
- if (pSM) {
- BEGIN_SO_TOLERANT_CODE_CALLING_HOST(GetThread());
- hr = pSM->ImpersonateLoggedOnUser(hToken);
- END_SO_TOLERANT_CODE_CALLING_HOST;
- }
- else
-#endif // FEATURE_INCLUDE_ALL_INTERFACES
- {
- if (!::ImpersonateLoggedOnUser(hToken))
- hr = HRESULT_FROM_GetLastError();
- }
-
- STRESS_LOG2(LF_SECURITY, LL_INFO100, "COMPrincipal::ImpersonateLoggedOnUser called with hTokenSAFE = %d. Returning 0x%x\n",hToken,hr);
-
- END_QCALL;
-
- return hr;
-}
-
-FCIMPL3(INT32, COMPrincipal::OpenThreadToken, DWORD dwDesiredAccess, DWORD dwOpenAs, SafeHandle** phThreadTokenUNSAFE)
-{
- CONTRACTL {
- FCALL_CHECK;
- PRECONDITION(CheckPointer(phThreadTokenUNSAFE));
- } CONTRACTL_END;
-
- HRESULT hr = S_OK;
- HELPER_METHOD_FRAME_BEGIN_RET_0();
-
- SafeHandle** phThreadTokenSAFE = phThreadTokenUNSAFE;
- GCPROTECT_BEGININTERIOR(phThreadTokenSAFE);
-
- *phThreadTokenUNSAFE = NULL;
- HandleHolder hThreadToken;
- {
- GCX_PREEMP();
- BOOL bOpenAsSelf = TRUE;
-#ifdef FEATURE_INCLUDE_ALL_INTERFACES
- IHostSecurityManager *pSM = CorHost2::GetHostSecurityManager();
- if (pSM) {
- if (dwOpenAs == WINSECURITYCONTEXT_THREAD)
- bOpenAsSelf = FALSE;
-
- BEGIN_SO_TOLERANT_CODE_CALLING_HOST(GetThread());
- hr = pSM->OpenThreadToken(dwDesiredAccess, bOpenAsSelf, &hThreadToken);
- END_SO_TOLERANT_CODE_CALLING_HOST;
- if (FAILED(hr) && dwOpenAs == WINSECURITYCONTEXT_BOTH) {
- bOpenAsSelf = FALSE;
- BEGIN_SO_TOLERANT_CODE_CALLING_HOST(GetThread());
- hr = pSM->OpenThreadToken(dwDesiredAccess, bOpenAsSelf, &hThreadToken);
- END_SO_TOLERANT_CODE_CALLING_HOST;
- }
- }
- else
-#endif // FEATURE_INCLUDE_ALL_INTERFACES
- {
- if (dwOpenAs == WINSECURITYCONTEXT_THREAD)
- bOpenAsSelf = FALSE;
-
- if (!::OpenThreadToken(::GetCurrentThread(), dwDesiredAccess, bOpenAsSelf, &hThreadToken)) {
- if (dwOpenAs == WINSECURITYCONTEXT_BOTH) {
- bOpenAsSelf = FALSE;
- hr = S_OK;
- if (!::OpenThreadToken(::GetCurrentThread(), dwDesiredAccess, bOpenAsSelf, &hThreadToken))
- hr = HRESULT_FROM_GetLastError();
- }
- else
- hr = HRESULT_FROM_GetLastError();
- }
- }
- }
-
- if (SUCCEEDED(hr)) {
- struct _gc {
- SAFEHANDLE pSafeTokenHandle;
- } gc;
- gc.pSafeTokenHandle = NULL;
-
- GCPROTECT_BEGIN(gc);
- // Allocate a SafeHandle here
- MethodTable *pMT = MscorlibBinder::GetClass(CLASS__SAFE_TOKENHANDLE);
- gc.pSafeTokenHandle = (SAFEHANDLE) AllocateObject(pMT);
- CallDefaultConstructor(gc.pSafeTokenHandle);
- gc.pSafeTokenHandle->SetHandle((void*) hThreadToken);
- hThreadToken.SuppressRelease();
-
- SetObjectReference((OBJECTREF*) phThreadTokenSAFE, (OBJECTREF) gc.pSafeTokenHandle, gc.pSafeTokenHandle->GetAppDomain());
- GCPROTECT_END();
- }
-
- GCPROTECT_END();
-
- HELPER_METHOD_FRAME_END();
- return hr;
-}
-FCIMPLEND
-
-INT32 QCALLTYPE COMPrincipal::RevertToSelf()
-{
- QCALL_CONTRACT;
-
- HRESULT hr = S_OK;
-
- BEGIN_QCALL;
-
-#ifdef FEATURE_INCLUDE_ALL_INTERFACES
- IHostSecurityManager *pSM = CorHost2::GetHostSecurityManager();
- if (pSM) {
- BEGIN_SO_TOLERANT_CODE_CALLING_HOST(GetThread());
- hr = pSM->RevertToSelf();
- END_SO_TOLERANT_CODE_CALLING_HOST;
- }
- else
-#endif // FEATURE_INCLUDE_ALL_INTERFACES
- {
- if (!::RevertToSelf())
- hr = HRESULT_FROM_GetLastError();
- }
-
- STRESS_LOG1(LF_SECURITY, LL_INFO100, "COMPrincipal::RevertToSelf returning 0x%x\n",hr);
-
- END_QCALL;
-
- return hr;
-}
-
-INT32 QCALLTYPE COMPrincipal::SetThreadToken(HANDLE hToken)
-{
- QCALL_CONTRACT;
-
- HRESULT hr = S_OK;
-
- BEGIN_QCALL;
-
-#ifdef FEATURE_INCLUDE_ALL_INTERFACES
- IHostSecurityManager *pSM = CorHost2::GetHostSecurityManager();
- if (pSM)
- {
- BEGIN_SO_TOLERANT_CODE_CALLING_HOST(GetThread());
- hr = pSM->SetThreadToken(hToken);
- END_SO_TOLERANT_CODE_CALLING_HOST;
- }
- else
-#endif // FEATURE_INCLUDE_ALL_INTERFACES
- {
- if (!::SetThreadToken(NULL, hToken))
- hr = HRESULT_FROM_GetLastError();
- }
-
- END_QCALL;
-
- return hr;
-}
-#endif // !FEATURE_CORECLR
-
-void COMPrincipal::CLR_ImpersonateLoggedOnUser(HANDLE hToken)
-{
- CONTRACTL {
- NOTHROW;
- GC_TRIGGERS;
- MODE_ANY;
- } CONTRACTL_END;
-
- HRESULT hr = S_OK;
-
- {
- GCX_PREEMP();
-#ifdef FEATURE_INCLUDE_ALL_INTERFACES
- IHostSecurityManager *pSM = CorHost2::GetHostSecurityManager();
- if (pSM) {
- hr = pSM->RevertToSelf();
- if (hr != S_OK)
- {
- // FailFast
- STRESS_LOG2(LF_EH, LL_INFO100, "CLR_ImpersonateLoggedOnUser failed for hImpersonateToken = %d with error:0x%x\n",hToken, hr);
- EEPOLICY_HANDLE_FATAL_ERROR(COR_E_SECURITY);
- }
- if (hToken != NULL)
- hr = pSM->ImpersonateLoggedOnUser(hToken);
- }
- else
-#endif // FEATURE_INCLUDE_ALL_INTERFACES
- {
- if (!::RevertToSelf())
- hr = HRESULT_FROM_GetLastError();
- if (hr != S_OK)
- {
- // FailFast
- STRESS_LOG2(LF_EH, LL_INFO100, "CLR_ImpersonateLoggedOnUser failed for hImpersonateToken = %d with error:0x%x\n",hToken, hr);
- EEPOLICY_HANDLE_FATAL_ERROR(COR_E_SECURITY);
- }
- if (hToken != NULL && !::ImpersonateLoggedOnUser(hToken))
- hr = HRESULT_FROM_GetLastError();
- }
-
- if (hr != S_OK)
- {
- // FailFast
- STRESS_LOG2(LF_EH, LL_INFO100, "CLR_ImpersonateLoggedOnUser failed for hImpersonateToken = %d with error:0x%x\n",hToken, hr);
- EEPOLICY_HANDLE_FATAL_ERROR(COR_E_SECURITY);
- }
- }
-
- return;
-}
-
diff --git a/src/vm/securityprincipal.h b/src/vm/securityprincipal.h
deleted file mode 100644
index 5d6b522a27..0000000000
--- a/src/vm/securityprincipal.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#pragma once
-
-// keep in sync with windowsidentity.cs
-#define WINSECURITYCONTEXT_THREAD 1
-#define WINSECURITYCONTEXT_PROCESS 2
-#define WINSECURITYCONTEXT_BOTH 3
-
-
-
-#ifndef FEATURE_PAL
-class COMPrincipal
-{
-public:
-#ifndef FEATURE_CORECLR
- static
- INT32 QCALLTYPE ImpersonateLoggedOnUser(HANDLE hToken);
-
- static FCDECL3(INT32, OpenThreadToken, DWORD dwDesiredAccess, DWORD dwOpenAs, SafeHandle** phThreadTokenUNSAFE);
-
- static
- INT32 QCALLTYPE RevertToSelf();
-
- static
- INT32 QCALLTYPE SetThreadToken(HANDLE hToken);
-#endif // !FEATURE_CORECLR
-
- static void CLR_ImpersonateLoggedOnUser(HANDLE hToken);
-};
-#endif // FEATURE_PAL
diff --git a/src/vm/securitystackwalk.cpp b/src/vm/securitystackwalk.cpp
deleted file mode 100644
index 9b8b150f68..0000000000
--- a/src/vm/securitystackwalk.cpp
+++ /dev/null
@@ -1,2439 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-
-//
-
-
-#include "common.h"
-
-#include "security.h"
-#include "perfcounters.h"
-#include "stackcompressor.h"
-#ifdef FEATURE_REMOTING
-#include "crossdomaincalls.h"
-#else
-#include "callhelpers.h"
-#endif
-#include "appdomain.inl"
-#include "appdomainstack.inl"
-
-COUNTER_ONLY(PERF_COUNTER_TIMER_PRECISION g_TotalTimeInSecurityRuntimeChecks = 0);
-COUNTER_ONLY(PERF_COUNTER_TIMER_PRECISION g_LastTimeInSecurityRuntimeChecks = 0);
-COUNTER_ONLY(UINT32 g_SecurityChecksIterations=0);
-
-bool SecurityStackWalk::IsSpecialRunFrame(MethodDesc* pMeth)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- INJECT_FAULT(COMPlusThrowOM(););
- } CONTRACTL_END;
-
-#ifndef FEATURE_CORECLR
- if (pMeth == MscorlibBinder::GetMethod(METHOD__EXECUTIONCONTEXT__RUN))
- return true;
-
-#if defined(FEATURE_IMPERSONATION) || defined(FEATURE_COMPRESSEDSTACK)
- if (pMeth == MscorlibBinder::GetMethod(METHOD__SECURITYCONTEXT__RUN))
- return true;
-#endif // #if defined(FEATURE_IMPERSONATION) || defined(FEATURE_COMPRESSEDSTACK)
-
-#ifdef FEATURE_COMPRESSEDSTACK
- if (pMeth == MscorlibBinder::GetMethod(METHOD__COMPRESSED_STACK__RUN))
- return true;
-#endif // FEATURE_COMPRESSEDSTACK
-
-#endif // !FEATURE_CORECLR
-
- return false;
-}
-
-void SecurityStackWalk::CheckPermissionAgainstGrants(OBJECTREF refCS, OBJECTREF refGrants, OBJECTREF refRefused, AppDomain *pDomain, MethodDesc* pMethod, Assembly* pAssembly)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- struct _gc {
- OBJECTREF orCS;
- OBJECTREF orGranted;
- OBJECTREF orRefused;
- OBJECTREF orDemand;
- OBJECTREF orToken;
- OBJECTREF orAssembly;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
- gc.orCS = refCS;
- gc.orGranted = refGrants;
- gc.orRefused = refRefused;
-
- GCPROTECT_BEGIN(gc);
-
- // Switch into the destination context if necessary.
- ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) //have it on the stack
- {
- // Fetch input objects that might originate from a different appdomain,
- // marshalling if necessary.
- gc.orDemand = m_objects.GetObjects(pDomain, &gc.orToken);
- if(pAssembly)
- gc.orAssembly = pAssembly->GetExposedObject();
-
- PREPARE_NONVIRTUAL_CALLSITE(METHOD__SECURITY_ENGINE__CHECK_HELPER);
-
- DECLARE_ARGHOLDER_ARRAY(helperArgs, 8);
- helperArgs[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(gc.orCS);
- helperArgs[ARGNUM_1] = OBJECTREF_TO_ARGHOLDER(gc.orGranted);
- helperArgs[ARGNUM_2] = OBJECTREF_TO_ARGHOLDER(gc.orRefused);
- helperArgs[ARGNUM_3] = OBJECTREF_TO_ARGHOLDER(gc.orDemand);
- helperArgs[ARGNUM_4] = OBJECTREF_TO_ARGHOLDER(gc.orToken);
- helperArgs[ARGNUM_5] = PTR_TO_ARGHOLDER(pMethod);
- helperArgs[ARGNUM_6] = OBJECTREF_TO_ARGHOLDER(gc.orAssembly);
- helperArgs[ARGNUM_7] = DWORD_TO_ARGHOLDER(dclDemand);
-
- CATCH_HANDLER_FOUND_NOTIFICATION_CALLSITE;
- CALL_MANAGED_METHOD_NORET(helperArgs);
-
- }
- END_DOMAIN_TRANSITION;
-
- GCPROTECT_END();
-}
-
-
-void SecurityStackWalk::CheckSetAgainstGrants(OBJECTREF refCS, OBJECTREF refGrants, OBJECTREF refRefused, AppDomain *pDomain, MethodDesc* pMethod, Assembly* pAssembly)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- struct _gc {
- OBJECTREF orCS;
- OBJECTREF orGranted;
- OBJECTREF orRefused;
- OBJECTREF orDemand;
- OBJECTREF orAssembly;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
- gc.orCS = refCS;
- gc.orGranted = refGrants;
- gc.orRefused = refRefused;
-
- GCPROTECT_BEGIN(gc);
-
- // Switch into the destination context if necessary.
- ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) //have it on the stack
- {
- // Fetch input objects that might originate from a different appdomain,
- // marshalling if necessary.
- gc.orDemand = m_objects.GetObject(pDomain);
- if(pAssembly)
- gc.orAssembly = pAssembly->GetExposedObject();
-
- PREPARE_NONVIRTUAL_CALLSITE(METHOD__SECURITY_ENGINE__CHECK_SET_HELPER);
-
- DECLARE_ARGHOLDER_ARRAY(helperArgs, 7);
- helperArgs[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(gc.orCS);
- helperArgs[ARGNUM_1] = OBJECTREF_TO_ARGHOLDER(gc.orGranted);
- helperArgs[ARGNUM_2] = OBJECTREF_TO_ARGHOLDER(gc.orRefused);
- helperArgs[ARGNUM_3] = OBJECTREF_TO_ARGHOLDER(gc.orDemand);
- helperArgs[ARGNUM_4] = PTR_TO_ARGHOLDER(pMethod);
- helperArgs[ARGNUM_5] = OBJECTREF_TO_ARGHOLDER(gc.orAssembly);
- helperArgs[ARGNUM_6] = DWORD_TO_ARGHOLDER(dclDemand);
-
- CATCH_HANDLER_FOUND_NOTIFICATION_CALLSITE;
- CALL_MANAGED_METHOD_NORET(helperArgs);
- }
- END_DOMAIN_TRANSITION;
-
- GCPROTECT_END();
-}
-
-void SecurityStackWalk::GetZoneAndOriginGrants(OBJECTREF refCS, OBJECTREF refGrants, OBJECTREF refRefused, AppDomain *pDomain, MethodDesc* pMethod, Assembly* pAssembly)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- Thread *pThread = GetThread();
-
- struct _gc {
- OBJECTREF orCS;
- OBJECTREF orGranted;
- OBJECTREF orRefused;
- OBJECTREF orZoneList;
- OBJECTREF orOriginList;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
- gc.orCS = refCS;
- gc.orGranted = refGrants;
- gc.orRefused = refRefused;
-
- GCPROTECT_BEGIN(gc);
-
- // Fetch input objects that might originate from a different appdomain,
- // marshalling if necessary.
- gc.orZoneList = m_objects.GetObjects(pDomain, &gc.orOriginList);
-
- // Switch into the destination context if necessary.
- ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) //have it on the stack
- {
-
- BOOL inProgress = pThread->IsSecurityStackwalkInProgess();
-
- // We turn security stackwalk in progress off which turns security back
- // on for a thread. This means that if the managed call throws an exception
- // we are already in the proper state so we don't need to do anything.
-
- if (inProgress)
- pThread->SetSecurityStackwalkInProgress(FALSE);
-
- MethodDescCallSite getZoneAndOriginHelper(METHOD__SECURITY_ENGINE__GET_ZONE_AND_ORIGIN_HELPER);
-
- ARG_SLOT helperArgs[5];
-
- helperArgs[0] = ObjToArgSlot(gc.orCS);
- helperArgs[1] = ObjToArgSlot(gc.orGranted);
- helperArgs[2] = ObjToArgSlot(gc.orRefused);
- helperArgs[3] = ObjToArgSlot(gc.orZoneList);
- helperArgs[4] = ObjToArgSlot(gc.orOriginList);
-
- getZoneAndOriginHelper.Call(&(helperArgs[0]));
-
- if (inProgress)
- pThread->SetSecurityStackwalkInProgress(TRUE);
- }
- END_DOMAIN_TRANSITION;
-
- GCPROTECT_END();
-}
-
-BOOL SecurityStackWalk::CheckPermissionAgainstFrameData(OBJECTREF refFrameData, AppDomain* pDomain, MethodDesc* pMethod)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- CLR_BOOL ret = FALSE;
-
- struct _gc {
- OBJECTREF orFrameData;
- OBJECTREF orDemand;
- OBJECTREF orToken;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
- gc.orFrameData = refFrameData;
-
- GCPROTECT_BEGIN(gc);
-
- // Fetch input objects that might originate from a different appdomain,
- // marshalling if necessary.
- gc.orDemand = m_objects.GetObjects(pDomain, &gc.orToken);
-
- // Switch into the destination context if necessary.
- ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) //have it on the stack
- {
- PREPARE_NONVIRTUAL_CALLSITE(METHOD__SECURITY_RUNTIME__FRAME_DESC_HELPER);
-
- DECLARE_ARGHOLDER_ARRAY(args, 4);
- args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(gc.orFrameData); // arg 0
- args[ARGNUM_1] = OBJECTREF_TO_ARGHOLDER(gc.orDemand); // arg 1
- args[ARGNUM_2] = OBJECTREF_TO_ARGHOLDER(gc.orToken); // arg 2
- args[ARGNUM_3] = PTR_TO_ARGHOLDER(pMethod); // arg 3
-
- CATCH_HANDLER_FOUND_NOTIFICATION_CALLSITE;
- CALL_MANAGED_METHOD(ret, CLR_BOOL, args);
-
- }
- END_DOMAIN_TRANSITION;
-
- GCPROTECT_END();
-
- return ret;
-}
-
-BOOL SecurityStackWalk::CheckSetAgainstFrameData(OBJECTREF refFrameData, AppDomain* pDomain, MethodDesc* pMethod)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- CLR_BOOL ret = FALSE;
-
- struct _gc {
- OBJECTREF orFrameData;
- OBJECTREF orDemand;
- OBJECTREF orPermSetOut;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
- gc.orFrameData = refFrameData;
-
- GCPROTECT_BEGIN(gc);
-
- // Fetch input objects that might originate from a different appdomain,
- // marshalling if necessary.
- gc.orDemand = m_objects.GetObject(pDomain);
-
- // Switch into the destination context if necessary.
- ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) //have it on the stack
- {
- PREPARE_NONVIRTUAL_CALLSITE(METHOD__SECURITY_RUNTIME__FRAME_DESC_SET_HELPER);
-
- DECLARE_ARGHOLDER_ARRAY(args, 4);
- args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(gc.orFrameData);
- args[ARGNUM_1] = OBJECTREF_TO_ARGHOLDER(gc.orDemand);
- args[ARGNUM_2] = PTR_TO_ARGHOLDER(&gc.orPermSetOut);
- args[ARGNUM_3] = PTR_TO_ARGHOLDER(pMethod);
-
- CATCH_HANDLER_FOUND_NOTIFICATION_CALLSITE;
- CALL_MANAGED_METHOD(ret, CLR_BOOL, args);
-
- if (gc.orPermSetOut != NULL) {
- // Update the cached object.
- m_objects.UpdateObject(pDomain, gc.orPermSetOut);
- }
- }
- END_DOMAIN_TRANSITION;
-
- GCPROTECT_END();
-
- return ret;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// -------------------------------------------------------------------------------
-//
-// DemandStackWalk
-//
-// -------------------------------------------------------------------------------
-
-class DemandStackWalk : public SecurityStackWalk
-{
-public:
- enum DemandType
- {
- DT_PERMISSION = 1,
- DT_SET = 2,
- DT_ZONE_AND_URL = 3,
- };
-
-protected:
- Frame* m_pCtxTxFrame;
- AppDomain * m_pPrevAppDomain;
- AppDomain* m_pSkipAppDomain;
- Assembly * m_pPrevAssembly;
- StackCrawlMark * m_pStackMark;
- DemandType m_eDemandType;
- bool m_bHaveFoundStartingFrameYet;
- BOOL m_bFoundStackMark;
- DWORD m_dwdemandFlags;
- DWORD m_adStackIndex;
- AppDomainStack* m_pThreadADStack;
-
-public:
- DemandStackWalk(SecurityStackWalkType eType, DWORD flags, StackCrawlMark* stackMark, DemandType eDemandType, DWORD demandFlags)
- : SecurityStackWalk(eType, flags)
- {
- WRAPPER_NO_CONTRACT;
- m_pCtxTxFrame = NULL;
- m_pPrevAppDomain = NULL;
- m_pSkipAppDomain = NULL;
- m_pPrevAssembly = NULL;
- m_eDemandType = eDemandType;
- m_bHaveFoundStartingFrameYet = false;
- m_pStackMark = stackMark;
- m_bFoundStackMark = FALSE;
- m_dwdemandFlags = demandFlags;
- m_pThreadADStack = GetThread()->GetAppDomainStackPointer();
- m_pThreadADStack->InitDomainIteration(&m_adStackIndex);
- }
-
- void DoStackWalk();
- StackWalkAction WalkFrame(CrawlFrame* pCf);
-
-protected:
- bool IsStartingFrame(CrawlFrame* pCf);
- bool IsSpecialRunFrame(MethodDesc* pMeth)
- {
- return SecurityStackWalk::IsSpecialRunFrame(pMeth);
- }
- void CheckGrant(OBJECTREF refCS, OBJECTREF refGrants, OBJECTREF refRefused, AppDomain *pDomain, MethodDesc* pMethod, Assembly* pAssembly);
- BOOL CheckFrame(OBJECTREF refFrameData, AppDomain* pDomain, MethodDesc* pMethod);
-
-private:
- FORCEINLINE BOOL QuickCheck(OBJECTREF refCS, OBJECTREF refGrants, OBJECTREF refRefused)
- {
- if (refCS == NULL && refRefused == NULL && refGrants != NULL)
- {
- // if we have a FT grant and nothing else, and our demand is for something that FT can satisfy, we're done
- PERMISSIONSETREF permSetRef = (PERMISSIONSETREF)refGrants;
- return permSetRef->IsUnrestricted();
- }
- return FALSE;
- }
- void ProcessAppDomainTransition(AppDomain * pAppDomain, bool bCheckPrevAppDomain);
-#ifdef _DEBUG
- BOOL IsValidReturnFromWalkFrame(StackWalkAction retVal, CrawlFrame* pCF)
- {
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- } CONTRACTL_END;
-
- // This function checks that when we hit a Special frame, we are indeed returning the action to stop the stackwalk
- MethodDesc *pFunc = pCF->GetFunction();
- if (pFunc != NULL && IsSpecialRunFrame(pFunc))
- {
- return (retVal == SWA_ABORT);
- }
- return TRUE;
- }
-#endif // _DEBUG
-
-#ifdef FEATURE_COMPRESSEDSTACK
- BOOL CheckAnonymouslyHostedDynamicMethodCompressedStack(OBJECTREF refDynamicResolver, AppDomain* pDomain, MethodDesc* pMethod);
- BOOL CheckAnonymouslyHostedDynamicMethodCompressedStackPermission(OBJECTREF refDynamicResolver, AppDomain* pDomain, MethodDesc* pMethod);
- BOOL CheckAnonymouslyHostedDynamicMethodCompressedStackPermissionSet(OBJECTREF refDynamicResolver, AppDomain* pDomain, MethodDesc* pMethod);
-#endif // FEATURE_COMPRESSEDSTACK
-};
-
-void DemandStackWalk::CheckGrant(OBJECTREF refCS, OBJECTREF refGrants, OBJECTREF refRefused, AppDomain *pDomain, MethodDesc* pMethod, Assembly* pAssembly)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
- switch(m_eDemandType)
- {
- case DT_PERMISSION:
- // Test early out scenario (quickcheck) before calling into managed code
- if (!QuickCheck(refCS, refGrants, refRefused))
- CheckPermissionAgainstGrants(refCS, refGrants, refRefused, pDomain, pMethod, pAssembly);
- break;
-
- case DT_SET:
- // Test early out scenario (quickcheck) before calling into managed code
- if (!QuickCheck(refCS, refGrants, refRefused))
- CheckSetAgainstGrants(refCS, refGrants, refRefused, pDomain, pMethod, pAssembly);
- break;
- case DT_ZONE_AND_URL:
- GetZoneAndOriginGrants(refCS, refGrants, refRefused, pDomain, pMethod, pAssembly);
- break;
- default:
- _ASSERTE(!"unexpected demand type");
- break;
- }
-}
-
-BOOL DemandStackWalk::CheckFrame(OBJECTREF refFrameData, AppDomain* pDomain, MethodDesc* pMethod)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
- switch(m_eDemandType)
- {
- case DT_PERMISSION:
- return CheckPermissionAgainstFrameData(refFrameData, pDomain, pMethod);
-
- case DT_SET:
- return CheckSetAgainstFrameData(refFrameData, pDomain, pMethod);
- case DT_ZONE_AND_URL:
- return TRUE; //Nothing to do here since CS cannot live on a Frame anymore.
- default:
- _ASSERTE(!"unexpected demand type");
- }
- return TRUE;
-}
-
-bool DemandStackWalk::IsStartingFrame(CrawlFrame* pCf)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- INJECT_FAULT(COMPlusThrowOM(););
- } CONTRACTL_END;
-
- switch(m_eStackWalkType)
- {
- case SSWT_DECLARATIVE_DEMAND: // Begin after the security stub(s)
- _ASSERTE(m_pStackMark == NULL);
- // skip the current method that has decl sec
- if (m_bFoundStackMark)
- return true;
- else
- {
- m_bFoundStackMark = true;
- return false;
- }
-
- case SSWT_IMPERATIVE_DEMAND: // Begin where the StackMark says to
- case SSWT_GET_ZONE_AND_URL: // Begin where the StackMark says to
- _ASSERTE(*m_pStackMark == LookForMyCaller || *m_pStackMark == LookForMyCallersCaller);
-
- // See if we've passed the stack mark yet
- if (!pCf->IsInCalleesFrames(m_pStackMark))
- return false;
-
- // Skip the frame after the stack mark as well.
- if(*m_pStackMark == LookForMyCallersCaller && !m_bFoundStackMark)
- {
- m_bFoundStackMark = TRUE;
- return false;
- }
-
- return true;
-
- case SSWT_LATEBOUND_LINKDEMAND: // Begin immediately
- case SSWT_DEMAND_FROM_NATIVE:
- _ASSERTE(m_pStackMark == NULL);
- return true;
-
- default:
- _ASSERTE(FALSE); // Unexpected stack walk type
- break;
- }
- return true;
-}
-void DemandStackWalk::ProcessAppDomainTransition(AppDomain* pAppDomain, bool bCheckPrevAppDomain)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
- _ASSERTE(pAppDomain != m_pPrevAppDomain);
-
- if (m_pPrevAppDomain != NULL && bCheckPrevAppDomain)
- {
- // We have not checked the previous AppDomain. Check it now.
- if (m_pSkipAppDomain != m_pPrevAppDomain)
- {
- ApplicationSecurityDescriptor *pSecDesc =
- static_cast<ApplicationSecurityDescriptor*>(m_pPrevAppDomain->GetSecurityDescriptor());
-
- // Only process AppDomains which have completed security initialization. If the domain is not
- // yet fully initialized then only fully trusted code can be running in the domain, so we're
- // safe to ignore the transition. The domain may also not yet have a sane grant set setup on it
- // yet if the demand is coming out of AppDomainManager code.
- if (pSecDesc && !pSecDesc->IsInitializationInProgress())
- {
- DBG_TRACE_STACKWALK(" Checking appdomain...\n", true);
-
- if (!pSecDesc->IsDefaultAppDomain() &&
- !pSecDesc->IsFullyTrusted() &&
- !pSecDesc->CheckSpecialFlag(m_dwdemandFlags))
- {
- OBJECTREF orRefused;
- OBJECTREF orGranted = pSecDesc->GetGrantedPermissionSet(&orRefused);
- CheckGrant(NULL, orGranted, orRefused, m_pPrevAppDomain, NULL, m_pPrevAssembly);
- }
- }
- else
- {
- DBG_TRACE_STACKWALK(" Skipping appdomain...\n", true);
- }
- }
- }
- // Move the domain index forward
- m_pThreadADStack->GetNextDomainEntryOnStack(&m_adStackIndex);
-
- // At the end of the stack walk, do a check on the grants of
- // the m_pPrevAppDomain by the stackwalk caller if needed.
- m_pPrevAppDomain = pAppDomain;
-
- // Check if we can skip the entire pAppDomain. If so, assign m_pSkipAppDomain
- // TODO: Can Check the AppDomain PLS also here.
- if ((m_pThreadADStack->GetCurrentDomainEntryOnStack(m_adStackIndex))->HasFlagsOrFullyTrustedWithNoStackModifiers(m_dwdemandFlags))
- m_pSkipAppDomain = pAppDomain;
- else
- m_pSkipAppDomain = NULL;
-
-
-
-}
-StackWalkAction DemandStackWalk::WalkFrame(CrawlFrame* pCf)
-{
- CONTRACT (StackWalkAction) {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- POSTCONDITION(IsValidReturnFromWalkFrame(RETVAL, pCf));
- } CONTRACT_END;
-
- StackWalkAction ret = SWA_CONTINUE;
-
-#ifdef FEATURE_REMOTING
-#ifdef FEATURE_COMPRESSEDSTACK
-
- // Save the CtxTxFrame if this is one
- if (m_pCtxTxFrame == NULL)
- {
- Frame *pFrame = pCf->GetFrame();
- if (SecurityStackWalk::IsContextTransitionFrameWithCS(pFrame))
- {
-
- m_pCtxTxFrame = pFrame;
- }
- }
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-#endif // FEATURE_REMOTING
-
- MethodDesc * pFunc = pCf->GetFunction();
- Assembly * pAssem = pCf->GetAssembly();
- // Get the current app domain.
- AppDomain *pAppDomain = pCf->GetAppDomain();
- if (pAppDomain != m_pPrevAppDomain)
- {
-#ifndef FEATURE_REMOTING
- BOOL bRealAppDomainTransition = (m_pPrevAppDomain != NULL);
-#endif
- ProcessAppDomainTransition(pAppDomain, m_bHaveFoundStartingFrameYet);
-
-#ifndef FEATURE_REMOTING
- // The first AppDomain transition is the transition from NULL to current domain. We should not stop on that.
- // We should stop on the first "real" appdomain transition - which is a transition out of the current domain.
- if (bRealAppDomainTransition)
- {
- // without remoting other appdomains do not matter (can be only createdomain call anyhow) so stop the stack walk
- m_dwFlags |= CORSEC_STACKWALK_HALTED;
- RETURN SWA_ABORT;
- }
-#endif
- }
-
- if ((pFunc == NULL && pAssem == NULL) || (pFunc && pFunc->IsILStub()))
- RETURN ret; // Not a function
-
- // Skip until the frame where the stackwalk should begin
- if (!m_bHaveFoundStartingFrameYet)
- {
- if (IsStartingFrame(pCf))
- m_bHaveFoundStartingFrameYet = true;
- else
- RETURN ret;
- }
-
- //
- // Now check the current frame!
- //
- // If this is a *.Run method, then we need to terminate the stackwalk after considering this frame
- if (pFunc && IsSpecialRunFrame(pFunc))
- {
- DBG_TRACE_STACKWALK(" Halting stackwalk for .Run.\n", false);
- // Dont mark the CORSEC_STACKWALK_HALTED in m_dwFlags because we still need to look at the CS
- ret = SWA_ABORT;
- }
-
- DBG_TRACE_STACKWALK(" Checking granted permissions for current method...\n", true);
-
- // Reached here imples we walked atleast a single frame.
- COUNTER_ONLY(GetPerfCounters().m_Security.stackWalkDepth++);
-
-
- // Get the previous assembly
- Assembly *pPrevAssem = m_pPrevAssembly;
-
-
- // Check if we can skip the entire appdomain
- if (m_pSkipAppDomain == pAppDomain)
- {
- RETURN ret;
- }
-
- // Keep track of the last module checked. If we have just checked the
- // permissions on the module, we don't need to do it again.
- if (pAssem != pPrevAssem)
- {
- DBG_TRACE_STACKWALK(" Checking grants for current assembly.\n", true);
-
- // Get the security descriptor for the current assembly and pass it to
- // the interpreted helper.
- AssemblySecurityDescriptor * pSecDesc = static_cast<AssemblySecurityDescriptor*>(pAssem->GetSecurityDescriptor(pAppDomain));
- _ASSERTE(pSecDesc != NULL);
-
- // We have to check the permissions if we are not fully trusted or
- // we cannot be overrided by full trust. Plus we always skip checks
- // on system classes.
- if (!pSecDesc->IsSystem() &&
- !pSecDesc->IsFullyTrusted() &&
- !pSecDesc->CheckSpecialFlag(m_dwdemandFlags))
- {
- OBJECTREF orRefused;
- OBJECTREF orGranted = pSecDesc->GetGrantedPermissionSet(&orRefused);
- CheckGrant(NULL, orGranted, orRefused, pAppDomain, pFunc, pAssem);
- }
-
- m_pPrevAssembly = pAssem;
- }
- else
- {
- DBG_TRACE_STACKWALK(" Current assembly same as previous. Skipping check.\n", true);
- }
-
-
- // Passed initial check. See if there is security info on this frame.
- OBJECTREF *pFrameObjectSlot = pCf->GetAddrOfSecurityObject();
- if (pFrameObjectSlot != NULL)
- {
- SecurityDeclarative::DoDeclarativeSecurityAtStackWalk(pFunc, pAppDomain, pFrameObjectSlot);
- if (*pFrameObjectSlot != NULL)
- {
- DBG_TRACE_STACKWALK(" + Frame-specific security info found. Checking...\n", false);
-
- if(!CheckFrame(*pFrameObjectSlot, pAppDomain, pFunc))
- {
- DBG_TRACE_STACKWALK(" Halting stackwalk for assert.\n", false);
- m_dwFlags |= CORSEC_STACKWALK_HALTED;
- ret = SWA_ABORT;
- }
- }
- }
-
-#if FEATURE_COMPRESSEDSTACK
- // If this frame is an anonymously hosted dynamic assembly, we need to run the demand against its compressed stack
- // to ensure the creator had the permissions for this demand
- if(pAssem != NULL && pAppDomain != NULL && pAssem->GetDomainAssembly(pAppDomain) == pAppDomain->GetAnonymouslyHostedDynamicMethodsAssembly() &&
- !CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_Security_DisableAnonymouslyHostedDynamicMethodCreatorSecurityCheck))
- {
- _ASSERTE(pFunc->IsLCGMethod());
- OBJECTREF dynamicResolver = pFunc->AsDynamicMethodDesc()->GetLCGMethodResolver()->GetManagedResolver();
- if(!CheckAnonymouslyHostedDynamicMethodCompressedStack(dynamicResolver, pAppDomain, pFunc))
- {
- m_dwFlags |= CORSEC_STACKWALK_HALTED;
- ret = SWA_ABORT;
- }
- }
-#endif // FEATURE_COMPRESSEDSTACK
-
- DBG_TRACE_STACKWALK(" Check passes for this method.\n", true);
-
-
- // Passed all the checks, return current value of ret (could be SWA_ABORT of SWA_CONTINUE based on above checks)
- RETURN ret;
-}
-
-static
-StackWalkAction CodeAccessCheckStackWalkCB(CrawlFrame* pCf, VOID* pData)
-{
- WRAPPER_NO_CONTRACT;
- DemandStackWalk *pCBdata = (DemandStackWalk*)pData;
- return pCBdata->WalkFrame(pCf);
-}
-
-void DemandStackWalk::DoStackWalk()
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- // Get the current thread.
- Thread *pThread = GetThread();
- _ASSERTE(pThread != NULL);
-
- // Don't allow recursive security stackwalks. Note that this implies that
- // *no* untrusted code must ever be called during a security stackwalk.
- if (pThread->IsSecurityStackwalkInProgess())
- return;
-
- // NOTE: Initialize the stack depth. Note that if more that one thread tries
- // to perform stackwalk then these counters gets stomped upon.
- COUNTER_ONLY(GetPerfCounters().m_Security.stackWalkDepth = 0);
-
- // Walk the thread.
- EX_TRY
- {
- pThread->SetSecurityStackwalkInProgress( TRUE );
-
- DBG_TRACE_STACKWALK("Code-access security check invoked.\n", false);
- // LIGHTUNWIND flag: allow using stackwalk cache for security stackwalks
- pThread->StackWalkFrames(CodeAccessCheckStackWalkCB, this, SKIPFUNCLETS | LIGHTUNWIND);
- DBG_TRACE_STACKWALK("\tCode-access stackwalk completed.\n", false);
-
- // check the last app domain or CompressedStack at the thread base
- if (((m_dwFlags & CORSEC_STACKWALK_HALTED) == 0) /*&& m_cCheck != 0*/)
- {
- AppDomain *pAppDomain = m_pPrevAppDomain;
-#ifdef FEATURE_COMPRESSEDSTACK
- OBJECTREF orCS = pThread->GetCompressedStack();
-
- if (orCS == NULL)
- {
- // There may have been an AD transition and we shd look at the CB data to see if this is the case
- if (m_pCtxTxFrame != NULL)
- {
- orCS = (OBJECTREF)SecurityStackWalk::GetCSFromContextTransitionFrame(m_pCtxTxFrame);
- pAppDomain = m_pCtxTxFrame->GetReturnDomain();
- }
- }
-
-
- if (orCS != NULL)
- {
- // We have a CS at the thread base - just look at that. Dont look at the last AD
- DBG_TRACE_STACKWALK("\tChoosing CompressedStack check.\n", true);
- DBG_TRACE_STACKWALK("\tChecking CompressedStack...\n", true);
-
- CheckGrant(orCS, NULL, NULL, pAppDomain, NULL, NULL);
- DBG_TRACE_STACKWALK("\tCompressedStack check passed.\n", true);
- }
- else
-#endif // FEATURE_COMPRESSEDSTACK
- {
- // No CS at thread base - must look at the last AD
- DBG_TRACE_STACKWALK("\tChoosing appdomain check.\n", true);
-
- ApplicationSecurityDescriptor *pSecDesc = static_cast<ApplicationSecurityDescriptor*>(pAppDomain->GetSecurityDescriptor());
-
- if (pSecDesc != NULL)
- {
- // Note: the order of these calls is important since you have to have done a
- // GetEvidence() on the security descriptor before you check for the
- // CORSEC_DEFAULT_APPDOMAIN property. IsFullyTrusted calls Resolve so
- // we're all good.
- if (!pSecDesc->IsDefaultAppDomain() &&
- !pSecDesc->IsFullyTrusted() &&
- !pSecDesc->CheckSpecialFlag(m_dwdemandFlags))
- {
- DBG_TRACE_STACKWALK("\tChecking appdomain...\n", true);
- OBJECTREF orRefused;
- OBJECTREF orGranted = pSecDesc->GetGrantedPermissionSet(&orRefused);
- CheckGrant(NULL, orGranted, orRefused, pAppDomain, NULL, NULL);
- DBG_TRACE_STACKWALK("\tappdomain check passed.\n", true);
- }
- }
- else
- {
- DBG_TRACE_STACKWALK("\tSkipping appdomain check.\n", true);
- }
- }
- }
- else
- {
- DBG_TRACE_STACKWALK("\tSkipping CS/appdomain check.\n", true);
- }
-
- pThread->SetSecurityStackwalkInProgress( FALSE );
- }
- EX_CATCH
- {
- // We catch exceptions and rethrow like this to ensure that we've
- // established an exception handler on the fs:[0] chain (managed
- // exception handlers won't do this). This in turn guarantees that
- // managed exception filters in any of our callers won't be found,
- // otherwise they could get to execute untrusted code with security
- // turned off.
- pThread->SetSecurityStackwalkInProgress( FALSE );
-
- EX_RETHROW;
- }
- EX_END_CATCH_UNREACHABLE
-
-
- DBG_TRACE_STACKWALK("Code-access check passed.\n", false);
-}
-
-#ifdef FEATURE_COMPRESSEDSTACK
-BOOL DemandStackWalk::CheckAnonymouslyHostedDynamicMethodCompressedStack(OBJECTREF refDynamicResolver, AppDomain* pDomain, MethodDesc* pMethod)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- BOOL ret = TRUE;
-
- switch(m_eDemandType)
- {
- case DT_PERMISSION:
- ret = CheckAnonymouslyHostedDynamicMethodCompressedStackPermission(refDynamicResolver, pDomain, pMethod);
- break;
-
- case DT_SET:
- ret = CheckAnonymouslyHostedDynamicMethodCompressedStackPermissionSet(refDynamicResolver, pDomain, pMethod);
- break;
-
- case DT_ZONE_AND_URL:
- // Not needed for compressed stack
- break;
-
- default:
- _ASSERTE(!"unexpected demand type");
- break;
- }
-
- return ret;
-}
-
-BOOL DemandStackWalk::CheckAnonymouslyHostedDynamicMethodCompressedStackPermissionSet(OBJECTREF refDynamicResolver, AppDomain* pDomain, MethodDesc* pMethod)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- CLR_BOOL ret = FALSE;
-
-
- struct _gc {
- OBJECTREF orDynamicResolver;
- OBJECTREF orDemandSet;
- OBJECTREF orPermSetOut;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
- gc.orDynamicResolver = refDynamicResolver;
-
- GCPROTECT_BEGIN(gc);
-
- // Fetch input objects that might originate from a different appdomain,
- // marshalling if necessary.
- gc.orDemandSet = m_objects.GetObject(pDomain);
-
- // Switch into the destination context if necessary.
- ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) //have it on the stack
- {
- PREPARE_NONVIRTUAL_CALLSITE(METHOD__SECURITY_RUNTIME__CHECK_DYNAMIC_METHOD_SET_HELPER);
-
- DECLARE_ARGHOLDER_ARRAY(args, 4);
- args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(gc.orDynamicResolver);
- args[ARGNUM_1] = OBJECTREF_TO_ARGHOLDER(gc.orDemandSet);
- args[ARGNUM_2] = PTR_TO_ARGHOLDER(&gc.orPermSetOut);
- args[ARGNUM_3] = PTR_TO_ARGHOLDER(pMethod);
-
- CATCH_HANDLER_FOUND_NOTIFICATION_CALLSITE;
- CALL_MANAGED_METHOD(ret, CLR_BOOL, args);
-
- if (gc.orPermSetOut != NULL) {
- // Update the cached object.
- m_objects.UpdateObject(pDomain, gc.orPermSetOut);
- }
- }
- END_DOMAIN_TRANSITION;
-
- GCPROTECT_END();
-
- return ret;
-}
-
-
-BOOL DemandStackWalk::CheckAnonymouslyHostedDynamicMethodCompressedStackPermission(OBJECTREF refDynamicResolver, AppDomain* pDomain, MethodDesc* pMethod)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- CLR_BOOL ret = FALSE;
-
-
- struct _gc {
- OBJECTREF orDynamicResolver;
- OBJECTREF orDemand;
- OBJECTREF orToken;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
- gc.orDynamicResolver = refDynamicResolver;
-
- GCPROTECT_BEGIN(gc);
-
- // Fetch input objects that might originate from a different appdomain,
- // marshalling if necessary.
- gc.orDemand = m_objects.GetObjects(pDomain, &gc.orToken);
-
- // Switch into the destination context if necessary.
- ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) //have it on the stack
- {
- PREPARE_NONVIRTUAL_CALLSITE(METHOD__SECURITY_RUNTIME__CHECK_DYNAMIC_METHOD_HELPER);
-
- DECLARE_ARGHOLDER_ARRAY(args, 4);
- args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(gc.orDynamicResolver);
- args[ARGNUM_1] = OBJECTREF_TO_ARGHOLDER(gc.orDemand);
- args[ARGNUM_2] = OBJECTREF_TO_ARGHOLDER(gc.orToken);
- args[ARGNUM_3] = PTR_TO_ARGHOLDER(pMethod);
-
- CATCH_HANDLER_FOUND_NOTIFICATION_CALLSITE;
- CALL_MANAGED_METHOD(ret, CLR_BOOL, args);
- }
- END_DOMAIN_TRANSITION;
-
- GCPROTECT_END();
-
- return ret;
-}
-#endif // FEATURE_COMPRESSEDSTACK
-
-
-
-
-// -------------------------------------------------------------------------------
-//
-// AssertStackWalk
-//
-// -------------------------------------------------------------------------------
-
-class AssertStackWalk : public SecurityStackWalk
-{
-protected:
- StackCrawlMark * m_pStackMark;
- bool m_bHaveFoundStartingFrameYet;
- INT_PTR m_cCheck;
-
-public:
- OBJECTREF* m_pSecurityObject;
- AppDomain* m_pSecurityObjectDomain;
-
- AssertStackWalk(SecurityStackWalkType eType, DWORD dwFlags, StackCrawlMark* stackMark)
- : SecurityStackWalk(eType, dwFlags)
- {
- LIMITED_METHOD_CONTRACT;
- m_pStackMark = stackMark;
- m_bHaveFoundStartingFrameYet = false;
- m_cCheck = 1;
- m_pSecurityObject = NULL;
- m_pSecurityObjectDomain = NULL;
- }
-
- void DoStackWalk();
- StackWalkAction WalkFrame(CrawlFrame* pCf);
-};
-
-StackWalkAction AssertStackWalk::WalkFrame(CrawlFrame* pCf)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- DBG_TRACE_METHOD(pCf);
-
- MethodDesc * pFunc = pCf->GetFunction();
- _ASSERTE(pFunc != NULL); // we requested functions only!
- _ASSERTE(m_eStackWalkType == SSWT_IMPERATIVE_ASSERT);
- _ASSERTE(*m_pStackMark == LookForMyCaller);
-
- // Skip until we pass the StackMark
- if (!m_bHaveFoundStartingFrameYet)
- {
- if (pCf->IsInCalleesFrames(m_pStackMark))
- m_bHaveFoundStartingFrameYet = true;
- else
- return SWA_CONTINUE;
- }
-
- // Check if we've visited the maximum number of frames
- if (m_cCheck >= 0)
- {
- if (m_cCheck == 0)
- {
- m_dwFlags |= CORSEC_STACKWALK_HALTED;
- return SWA_ABORT;
- }
- else
- --m_cCheck;
- }
-
- // Reached here imples we walked atleast a single frame.
- COUNTER_ONLY(GetPerfCounters().m_Security.stackWalkDepth++);
-
- DBG_TRACE_STACKWALK(" Checking grants for current assembly.\n", true);
-
- // Get the security descriptor for the current assembly and pass it to
- // the interpreted helper.
- // Get the current assembly
- Assembly *pAssem = pFunc->GetModule()->GetAssembly();
- AppDomain *pAppDomain = pCf->GetAppDomain();
- IAssemblySecurityDescriptor * pSecDesc = pAssem->GetSecurityDescriptor(pAppDomain);
- _ASSERTE(pSecDesc != NULL);
-
-
- if (!SecurityTransparent::IsAllowedToAssert(pFunc))
- {
- // Transparent method can't have the permission to Assert
- COMPlusThrow(kInvalidOperationException,W("InvalidOperation_AssertTransparentCode"));
- }
-
- if (!pSecDesc->IsSystem() && !pSecDesc->IsFullyTrusted())
- {
- OBJECTREF orRefused;
- OBJECTREF orGranted = pSecDesc->GetGrantedPermissionSet(&orRefused);
- CheckPermissionAgainstGrants(NULL, orGranted, orRefused, pAppDomain, pFunc, pAssem);
- }
-
- // Passed initial check. See if there is security info on this frame.
- m_pSecurityObject = pCf->GetAddrOfSecurityObject();
- m_pSecurityObjectDomain = pAppDomain;
-
- DBG_TRACE_STACKWALK(" Check Immediate passes for this method.\n", true);
-
- // Passed all the checks, so continue.
- return SWA_ABORT;
-}
-
-static
-StackWalkAction CheckNReturnSOStackWalkCB(CrawlFrame* pCf, VOID* pData)
-{
- WRAPPER_NO_CONTRACT;
- AssertStackWalk *pCBdata = (AssertStackWalk*)pData;
- return pCBdata->WalkFrame(pCf);
-}
-
-FCIMPL4(Object*, SecurityStackWalk::CheckNReturnSO, Object* permTokenUNSAFE, Object* permUNSAFE, StackCrawlMark* stackMark, INT32 create)
-{
- FCALL_CONTRACT;
-
- OBJECTREF refRetVal = NULL;
- OBJECTREF permToken = (OBJECTREF) permTokenUNSAFE;
- OBJECTREF perm = (OBJECTREF) permUNSAFE;
- HELPER_METHOD_FRAME_BEGIN_RET_2(permToken, perm);
-
- _ASSERTE((permToken != NULL) && (perm != NULL));
-
- // Track perfmon counters. Runtime security checkes.
- IncrementSecurityPerfCounter();
-
-#if defined(ENABLE_PERF_COUNTERS)
- // Perf Counter "%Time in Runtime check" support
- PERF_COUNTER_TIMER_PRECISION _startPerfCounterTimer = GET_CYCLE_COUNT();
-#endif
-
- // Initialize callback data.
- DWORD dwFlags = 0;
- AssertStackWalk walkData(SSWT_IMPERATIVE_ASSERT, dwFlags, stackMark);
- walkData.m_objects.SetObjects(perm, permToken);
-
- // Protect the object references in the callback data.
- GCPROTECT_BEGIN(walkData.m_objects.m_sGC);
-
- walkData.DoStackWalk();
-
- GCPROTECT_END();
-
-#if defined(ENABLE_PERF_COUNTERS)
- // Accumulate the counter
- PERF_COUNTER_TIMER_PRECISION _stopPerfCounterTimer = GET_CYCLE_COUNT();
- g_TotalTimeInSecurityRuntimeChecks += _stopPerfCounterTimer - _startPerfCounterTimer;
-
- // Report the accumulated counter only after NUM_OF_TERATIONS
- if (g_SecurityChecksIterations++ > PERF_COUNTER_NUM_OF_ITERATIONS)
- {
- GetPerfCounters().m_Security.timeRTchecks = static_cast<DWORD>(g_TotalTimeInSecurityRuntimeChecks);
- GetPerfCounters().m_Security.timeRTchecksBase = static_cast<DWORD>(_stopPerfCounterTimer - g_LastTimeInSecurityRuntimeChecks);
-
- g_TotalTimeInSecurityRuntimeChecks = 0;
- g_LastTimeInSecurityRuntimeChecks = _stopPerfCounterTimer;
- g_SecurityChecksIterations = 0;
- }
-#endif // #if defined(ENABLE_PERF_COUNTERS)
-
- if (walkData.m_pSecurityObject == NULL)
- {
- goto lExit;
- }
-
- // Is security object frame in a different context?
- Thread *pThread;
- pThread = GetThread();
- bool fSwitchContext;
-
- fSwitchContext = walkData.m_pSecurityObjectDomain != pThread->GetDomain();
- if (create && *walkData.m_pSecurityObject == NULL)
- {
- // If necessary, shift to correct context to allocate security object.
- ENTER_DOMAIN_PTR(walkData.m_pSecurityObjectDomain,ADV_RUNNINGIN) //on the stack
- {
- MethodTable* pMethFrameSecDesc = MscorlibBinder::GetClass(CLASS__FRAME_SECURITY_DESCRIPTOR);
-
- *walkData.m_pSecurityObject = AllocateObject(pMethFrameSecDesc);
- }
- END_DOMAIN_TRANSITION;
- }
-
- // If we found or created a security object in a different context, make a
- // copy in the current context.
-#ifndef FEATURE_CORECLR // should not happen in core clr
- if (fSwitchContext && *walkData.m_pSecurityObject != NULL)
- refRetVal = AppDomainHelper::CrossContextCopyFrom(walkData.m_pSecurityObjectDomain,
- walkData.m_pSecurityObject);
- else
-#else
- _ASSERTE(!fSwitchContext);
-#endif
-
- refRetVal = *walkData.m_pSecurityObject;
-
-lExit: ;
- HELPER_METHOD_FRAME_END();
- return OBJECTREFToObject(refRetVal);
-}
-FCIMPLEND
-
-
-void AssertStackWalk::DoStackWalk()
-{
- // Get the current thread.
- Thread *pThread = GetThread();
- _ASSERTE(pThread != NULL);
-
- // NOTE: Initialize the stack depth. Note that if more that one thread tries
- // to perform stackwalk then these counters gets stomped upon.
- COUNTER_ONLY(GetPerfCounters().m_Security.stackWalkDepth = 0);
-
- // Walk the thread.
- DBG_TRACE_STACKWALK("Code-access security check immediate invoked.\n", false);
- // LIGHTUNWIND flag: allow using stackwalk cache for security stackwalks
- pThread->StackWalkFrames(CheckNReturnSOStackWalkCB, this, FUNCTIONSONLY | SKIPFUNCLETS | LIGHTUNWIND);
-
- DBG_TRACE_STACKWALK("\tCode-access stackwalk completed.\n", false);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// -------------------------------------------------------------------------------
-//
-// CountOverridesStackWalk
-//
-// -------------------------------------------------------------------------------
-
-typedef struct _SkipFunctionsData
-{
- INT32 cSkipFunctions;
- StackCrawlMark* pStackMark;
- BOOL bUseStackMark;
- BOOL bFoundCaller;
- MethodDesc* pFunction;
- OBJECTREF* pSecurityObject;
- AppDomain* pSecurityObjectAppDomain;
-} SkipFunctionsData;
-
-static StackWalkAction SkipFunctionsCB(CrawlFrame* pCf, VOID* pData)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- INJECT_FAULT(COMPlusThrowOM(););
- } CONTRACTL_END;
- SkipFunctionsData *skipData = (SkipFunctionsData*)pData;
- _ASSERTE(skipData != NULL);
-
- MethodDesc *pFunc = pCf->GetFunction();
-
-#ifdef _DEBUG
- // Get the interesting info now, so we can get a trace
- // while debugging...
- OBJECTREF *pSecObj;
- pSecObj = pCf->GetAddrOfSecurityObject();
-#endif
-
- _ASSERTE(skipData->bUseStackMark && "you must specify a stackmark");
-
- // First check if the walk has skipped the required frames. The check
- // here is between the address of a local variable (the stack mark) and a
- // pointer to the EIP for a frame (which is actually the pointer to the
- // return address to the function from the previous frame). So we'll
- // actually notice which frame the stack mark was in one frame later. This
- // is fine for our purposes since we're always looking for the frame of the
- // caller of the method that actually created the stack mark.
- if ((skipData->pStackMark != NULL) &&
- !pCf->IsInCalleesFrames(skipData->pStackMark))
-
- return SWA_CONTINUE;
-
- skipData->pFunction = pFunc;
- skipData->pSecurityObject = pCf->GetAddrOfSecurityObject();
- skipData->pSecurityObjectAppDomain = pCf->GetAppDomain();
- return SWA_ABORT; // This actually indicates success.
-}
-
-// Version of the above method that looks for a stack mark (the address of a
-// local variable in a frame called by the target frame).
-BOOL SecurityStackWalk::SkipAndFindFunctionInfo(StackCrawlMark* stackMark, MethodDesc ** ppFunc, OBJECTREF ** ppObj, AppDomain ** ppAppDomain)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- INJECT_FAULT(COMPlusThrowOM(););
- } CONTRACTL_END;
- _ASSERTE(ppFunc != NULL || ppObj != NULL || !"Why was this function called?!");
-
- SkipFunctionsData walkData;
- walkData.pStackMark = stackMark;
- walkData.bUseStackMark = TRUE;
- walkData.bFoundCaller = FALSE;
- walkData.pFunction = NULL;
- walkData.pSecurityObject = NULL;
- // LIGHTUNWIND flag: allow using stackwalk cache for security stackwalks
- StackWalkAction action = GetThread()->StackWalkFrames(SkipFunctionsCB, &walkData, FUNCTIONSONLY | SKIPFUNCLETS | LIGHTUNWIND);
- if (action == SWA_ABORT)
- {
- if (ppFunc != NULL)
- *ppFunc = walkData.pFunction;
- if (ppObj != NULL)
- {
- *ppObj = walkData.pSecurityObject;
- if (ppAppDomain != NULL)
- *ppAppDomain = walkData.pSecurityObjectAppDomain;
- }
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// -------------------------------------------------------------------------------
-//
-// CountOverridesStackWalk
-//
-// -------------------------------------------------------------------------------
-
-class CountOverridesStackWalk
-{
-public:
- DWORD numOverrides; // Can be removed
- DWORD numAsserts; // Can be removed
- DWORD numDomainOverrides;
- DWORD numDomainAsserts;
- AppDomain* prev_AppDomain;
- Frame* pCtxTxFrame;
- DWORD adStackIndex;
-
- CountOverridesStackWalk()
- {
- LIMITED_METHOD_CONTRACT;
- numOverrides = 0;
- numAsserts = 0;
- numDomainAsserts = 0;
- numDomainOverrides = 0;
- prev_AppDomain = NULL;
- pCtxTxFrame = NULL;
- GetThread()->InitDomainIteration(&adStackIndex);
- }
- bool IsSpecialRunFrame(MethodDesc* pMeth)
- {
- return SecurityStackWalk::IsSpecialRunFrame(pMeth);
- }
-};
-
-static
-StackWalkAction UpdateOverridesCountCB(CrawlFrame* pCf, void *pData)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- DBG_TRACE_METHOD(pCf);
-
- CountOverridesStackWalk *pCBdata = static_cast<CountOverridesStackWalk *>(pData);
-
-
- // First check if the walk has skipped the required frames. The check
- // here is between the address of a local variable (the stack mark) and a
- // pointer to the EIP for a frame (which is actually the pointer to the
- // return address to the function from the previous frame). So we'll
- // actually notice which frame the stack mark was in one frame later. This
- // is fine for our purposes since we're always looking for the frame of the
- // caller (or the caller's caller) of the method that actually created the
- // stack mark.
-
-#ifdef FEATURE_REMOTING
-#ifdef FEATURE_COMPRESSEDSTACK
-
- // Save the CtxTxFrame if this is one
- if (pCBdata->pCtxTxFrame == NULL)
- {
- Frame *pFrame = pCf->GetFrame();
- if (SecurityStackWalk::IsContextTransitionFrameWithCS(pFrame))
- {
- pCBdata->pCtxTxFrame = pFrame;
- }
- }
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-#endif // FEATURE_REMOTING
- MethodDesc* pMeth = pCf->GetFunction();
- if (pMeth == NULL || pMeth->IsILStub())
- return SWA_CONTINUE; // not a function frame and not a security stub.
- // Since we were just looking for CtxTransitionFrames, resume the stackwalk...
-
-
-
-
- AppDomain* pAppDomain = pCf->GetAppDomain();
- if (pCBdata->prev_AppDomain == NULL)
- {
- pCBdata->prev_AppDomain = pAppDomain; //innermost AD
- }
- else if (pCBdata->prev_AppDomain != pAppDomain)
- {
- // AppDomain Transition
- // Update the values in the ADStack for the current AD
- Thread *t = GetThread();
- t->GetNextDomainOnStack(&pCBdata->adStackIndex, NULL, NULL);
- t->UpdateDomainOnStack(pCBdata->adStackIndex, pCBdata->numDomainAsserts, pCBdata->numDomainOverrides);
-
- // Update CBdata values
- pCBdata->numAsserts+= pCBdata->numDomainAsserts;
- pCBdata->numOverrides += pCBdata->numDomainOverrides;
- pCBdata->numDomainAsserts = 0;
- pCBdata->numDomainOverrides = 0;
- pCBdata->prev_AppDomain = pAppDomain;
-
- }
- // Get the security object for this function...
- OBJECTREF* pRefSecDesc = pCf->GetAddrOfSecurityObject();
- if (pRefSecDesc != NULL)
- {
- SecurityDeclarative::DoDeclarativeSecurityAtStackWalk(pMeth, pAppDomain, pRefSecDesc);
- FRAMESECDESCREF refFSD = *((FRAMESECDESCREF*)pRefSecDesc);
- if (refFSD != NULL)
- {
-
- INT32 ret = refFSD->GetOverridesCount();
- pCBdata->numDomainAsserts+= refFSD->GetAssertCount();
-
- if (ret > 0)
- {
- DBG_TRACE_STACKWALK(" SecurityDescriptor with overrides FOUND.\n", false);
- pCBdata->numDomainOverrides += ret;
- }
- else
- {
- DBG_TRACE_STACKWALK(" SecurityDescriptor with no override found.\n", false);
- }
- }
-
- }
-
-#ifdef FEATURE_COMPRESSEDSTACK
- if(SecurityStackWalk::MethodIsAnonymouslyHostedDynamicMethodWithCSToEvaluate(pMeth))
- {
- pCBdata->numDomainAsserts++;
- pCBdata->numDomainOverrides++;
- }
-#endif // FEATURE_COMPRESSEDSTACK
-
- // If this is a *.Run method,
- // or if it has a CompressedStack then we need to terminate the stackwalk
- if (pCBdata->IsSpecialRunFrame(pMeth))
- {
- DBG_TRACE_STACKWALK(" Halting stackwalk for .Run.\n", false);
- return SWA_ABORT;
- }
-
- return SWA_CONTINUE;
-}
-
-VOID SecurityStackWalk::UpdateOverridesCount()
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- //
- // Initialize the callback data on the stack.
- //
-
- CountOverridesStackWalk walkData;
-
- // Get the current thread that we're to walk.
- Thread * t = GetThread();
-
-
- // Don't allow recursive security stackwalks. Note that this implies that
- // *no* untrusted code must ever be called during a security stackwalk.
- if (t->IsSecurityStackwalkInProgess())
- return;
-
- EX_TRY
- {
- t->SetSecurityStackwalkInProgress( TRUE );
-
- //
- // Begin the stack walk
- //
- DBG_TRACE_STACKWALK(" Update Overrides Count invoked .\n", false);
- // LIGHTUNWIND flag: allow using stackwalk cache for security stackwalks
- t->StackWalkFrames(UpdateOverridesCountCB, &walkData, SKIPFUNCLETS | LIGHTUNWIND);
-#ifdef FEATURE_COMPRESSEDSTACK
- COMPRESSEDSTACKREF csRef = (COMPRESSEDSTACKREF)t->GetCompressedStack();
-
- // There may have been an AD transition and we shd look at the CB data to see if this is the case
- if (csRef == NULL && walkData.pCtxTxFrame != NULL)
- {
- csRef = SecurityStackWalk::GetCSFromContextTransitionFrame(walkData.pCtxTxFrame);
- }
-
- // Use CS if found
- if (csRef != NULL)
- {
-
- walkData.numDomainOverrides += StackCompressor::GetCSInnerAppDomainOverridesCount(csRef);
- walkData.numDomainAsserts += StackCompressor::GetCSInnerAppDomainAssertCount(csRef);
- }
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
- t->GetNextDomainOnStack(&walkData.adStackIndex, NULL, NULL);
- t->UpdateDomainOnStack(walkData.adStackIndex, walkData.numDomainAsserts, walkData.numDomainOverrides);
- walkData.numAsserts += walkData.numDomainAsserts;
- walkData.numOverrides += walkData.numDomainOverrides;
-
- t->SetSecurityStackwalkInProgress( FALSE );
- }
- EX_CATCH
- {
- // We catch exceptions and rethrow like this to ensure that we've
- // established an exception handler on the fs:[0] chain (managed
- // exception handlers won't do this). This in turn guarantees that
- // managed exception filters in any of our callers won't be found,
- // otherwise they could get to execute untrusted code with security
- // turned off.
- t->SetSecurityStackwalkInProgress( FALSE );
-
- EX_RETHROW;
- }
- EX_END_CATCH_UNREACHABLE
-
-
-
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// -------------------------------------------------------------------------------
-//
-// COMCodeAccessSecurityEngine
-//
-// -------------------------------------------------------------------------------
-#ifdef FEATURE_COMPRESSEDSTACK
-COMPRESSEDSTACKREF SecurityStackWalk::GetCSFromContextTransitionFrame(Frame *pFrame)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- SO_TOLERANT;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
- EXECUTIONCONTEXTREF ecRef = NULL;
-
- if (pFrame != NULL)
- ecRef = (EXECUTIONCONTEXTREF)pFrame->GetReturnExecutionContext();
- if (ecRef != NULL)
- return (ecRef->GetCompressedStack());
-
- return NULL;
-}
-
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-
-//-----------------------------------------------------------+
-// Helper used to check a demand set against a provided grant
-// and possibly denied set. Grant and denied set might be from
-// another domain.
-//-----------------------------------------------------------+
-void SecurityStackWalk::CheckSetHelper(OBJECTREF *prefDemand,
- OBJECTREF *prefGrant,
- OBJECTREF *prefRefused,
- AppDomain *pGrantDomain,
- MethodDesc *pMethod,
- OBJECTREF *pAssembly,
- CorDeclSecurity action)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(IsProtectedByGCFrame (prefDemand));
- PRECONDITION(IsProtectedByGCFrame (prefGrant));
- PRECONDITION(IsProtectedByGCFrame (prefRefused));
- PRECONDITION(IsProtectedByGCFrame (pAssembly));
- } CONTRACTL_END;
-
- // We might need to marshal the grant and denied sets into the current
- // domain.
-#ifndef FEATURE_CORECLR // should not happen in core clr
- if (pGrantDomain != GetAppDomain())
- {
- *prefGrant = AppDomainHelper::CrossContextCopyFrom(pGrantDomain, prefGrant);
- if (*prefRefused != NULL)
- *prefRefused = AppDomainHelper::CrossContextCopyFrom(pGrantDomain, prefRefused);
- }
-#else
- _ASSERTE(pGrantDomain == GetAppDomain());
-#endif
- MethodDescCallSite checkSetHelper(METHOD__SECURITY_ENGINE__CHECK_SET_HELPER);
-
- ARG_SLOT args[] = {
- ObjToArgSlot(NULL),
- ObjToArgSlot(*prefGrant),
- ObjToArgSlot(*prefRefused),
- ObjToArgSlot(*prefDemand),
- PtrToArgSlot(pMethod),
- ObjToArgSlot(*pAssembly),
- (ARG_SLOT)action
- };
-
- checkSetHelper.Call(args);
-}
-
-
-
-
-
-FCIMPL0(FC_BOOL_RET, SecurityStackWalk::FCallQuickCheckForAllDemands)
-{
- FCALL_CONTRACT;
- // This function collides with SecurityPolicy::IsDefaultThreadSecurityInfo
- FCUnique(0x17);
- FC_RETURN_BOOL(QuickCheckForAllDemands(0));
-
-}
-FCIMPLEND
-
-FCIMPL0(FC_BOOL_RET, SecurityStackWalk::FCallAllDomainsHomogeneousWithNoStackModifiers)
-{
- FCALL_CONTRACT;
-
- Thread* t = GetThread();
- FC_RETURN_BOOL(t->AllDomainsHomogeneousWithNoStackModifiers());
-
-}
-FCIMPLEND
-
-//-----------------------------------------------------------
-// Native implementation for code-access security check.
-// Checks that callers on the stack have the permission
-// specified in the arguments or checks for unrestricted
-// access if the permission is null.
-//-----------------------------------------------------------
-FCIMPL3(void, SecurityStackWalk::Check, Object* permOrPermSetUNSAFE, StackCrawlMark* stackMark, CLR_BOOL isPermSet)
-{
- FCALL_CONTRACT;
-
- if (QuickCheckForAllDemands(0))
- return;
-
- FC_INNER_RETURN_VOID(CheckFramed(permOrPermSetUNSAFE, stackMark, isPermSet));
-}
-FCIMPLEND
-
-NOINLINE void SecurityStackWalk::CheckFramed(Object* permOrPermSetUNSAFE,
- StackCrawlMark* stackMark,
- CLR_BOOL isPermSet)
-{
- CONTRACTL {
- THROWS;
- DISABLED(GC_TRIGGERS); // FCALLS with HELPER frames have issues with GC_TRIGGERS
- MODE_COOPERATIVE;
- SO_TOLERANT;
- } CONTRACTL_END;
-
- FC_INNER_PROLOG(SecurityStackWalk::Check);
-
- OBJECTREF permOrPermSet = (OBJECTREF) permOrPermSetUNSAFE;
- HELPER_METHOD_FRAME_BEGIN_ATTRIB_1(Frame::FRAME_ATTR_CAPTURE_DEPTH_2, permOrPermSet);
-
- Check_PLS_SW(isPermSet, SSWT_IMPERATIVE_DEMAND, &permOrPermSet, stackMark);
-
- HELPER_METHOD_FRAME_END();
- FC_INNER_EPILOG();
-}
-
-
-void SecurityStackWalk::Check_PLS_SW(BOOL isPermSet,
- SecurityStackWalkType eType,
- OBJECTREF* permOrPermSet,
- StackCrawlMark* stackMark)
-{
-
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- if (!PreCheck(permOrPermSet, isPermSet))
- {
- Check_StackWalk(eType, permOrPermSet, stackMark, isPermSet);
- }
-}
-void SecurityStackWalk::Check_PLS_SW_GC( BOOL isPermSet,
- SecurityStackWalkType eType,
- OBJECTREF permOrPermSet,
- StackCrawlMark* stackMark)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
- GCPROTECT_BEGIN(permOrPermSet);
- Check_PLS_SW(isPermSet, eType, &permOrPermSet, stackMark);
- GCPROTECT_END();
-}
-
-void SecurityStackWalk::Check_StackWalk(SecurityStackWalkType eType,
- OBJECTREF* pPermOrPermSet,
- StackCrawlMark* stackMark,
- BOOL isPermSet)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(*pPermOrPermSet != NULL);
- } CONTRACTL_END;
-
-#if defined(ENABLE_PERF_COUNTERS)
- // Perf Counter "%Time in Runtime check" support
- PERF_COUNTER_TIMER_PRECISION _startPerfCounterTimer = GET_CYCLE_COUNT();
-#endif
-
- if (GetThread()->GetOverridesCount() != 0)
- {
- // First let's make sure the overrides count is OK.
- UpdateOverridesCount();
- // Once the overrides count has been fixes, let's see if we really need to stackwalk
- // This is an additional cost if we do need to walk, but can remove an unnecessary SW otherwise.
- // Pick your poison.
- if (QuickCheckForAllDemands(0))
- return; //
- }
- // Initialize callback data.
- DWORD dwFlags = 0;
- DWORD demandFlags = GetPermissionSpecialFlags(pPermOrPermSet);
-
- DemandStackWalk walkData(eType, dwFlags, stackMark, (isPermSet?DemandStackWalk::DT_SET:DemandStackWalk::DT_PERMISSION), demandFlags);
- walkData.m_objects.SetObject(*pPermOrPermSet);
-
- // Protect the object references in the callback data.
- GCPROTECT_BEGIN(walkData.m_objects.m_sGC);
-
- walkData.DoStackWalk();
-
- GCPROTECT_END();
-
-#if defined(ENABLE_PERF_COUNTERS)
- // Accumulate the counter
- PERF_COUNTER_TIMER_PRECISION _stopPerfCounterTimer = GET_CYCLE_COUNT();
- g_TotalTimeInSecurityRuntimeChecks += _stopPerfCounterTimer - _startPerfCounterTimer;
-
- // Report the accumulated counter only after NUM_OF_TERATIONS
- if (g_SecurityChecksIterations++ > PERF_COUNTER_NUM_OF_ITERATIONS)
- {
- GetPerfCounters().m_Security.timeRTchecks = static_cast<DWORD>(g_TotalTimeInSecurityRuntimeChecks);
- GetPerfCounters().m_Security.timeRTchecksBase = static_cast<DWORD>(_stopPerfCounterTimer - g_LastTimeInSecurityRuntimeChecks);
-
- g_TotalTimeInSecurityRuntimeChecks = 0;
- g_LastTimeInSecurityRuntimeChecks = _stopPerfCounterTimer;
- g_SecurityChecksIterations = 0;
- }
-#endif // #if defined(ENABLE_PERF_COUNTERS)
-}
-
-FCIMPL3(void, SecurityStackWalk::GetZoneAndOrigin, Object* pZoneListUNSAFE, Object* pOriginListUNSAFE, StackCrawlMark* stackMark)
-{
- FCALL_CONTRACT;
-
- OBJECTREF zoneList = (OBJECTREF) pZoneListUNSAFE;
- OBJECTREF originList = (OBJECTREF) pOriginListUNSAFE;
- HELPER_METHOD_FRAME_BEGIN_2(zoneList, originList);
-
- // Initialize callback data.
- DWORD dwFlags = 0;
- DemandStackWalk walkData(SSWT_GET_ZONE_AND_URL, dwFlags, stackMark, DemandStackWalk::DT_ZONE_AND_URL, 0);
- walkData.m_objects.SetObjects(zoneList, originList);
-
- GCPROTECT_BEGIN(walkData.m_objects.m_sGC);
-
- walkData.DoStackWalk();
-
- GCPROTECT_END();
-
- HELPER_METHOD_FRAME_END();
-}
-FCIMPLEND
-
-
-#ifdef FEATURE_COMPRESSEDSTACK
-FCIMPL1(VOID, SecurityStackWalk::FcallDestroyDelayedCompressedStack, void *compressedStack)
-{
- FCALL_CONTRACT;
-
- HELPER_METHOD_FRAME_BEGIN_0();
-
- StackCompressor::Destroy(compressedStack);
-
- HELPER_METHOD_FRAME_END();
-}
-FCIMPLEND
-#endif // FEATURE_COMPRESSEDSTACK
-//
-// This method checks a few special demands in case we can
-// avoid looking at the real PLS object.
-//
-
-DWORD SecurityStackWalk::GetPermissionSpecialFlags (OBJECTREF* orDemand)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- INJECT_FAULT(COMPlusThrowOM(););
- } CONTRACTL_END;
-
- MethodTable* pMethPermissionSet = MscorlibBinder::GetClass(CLASS__PERMISSION_SET);
- MethodTable* pMethNamedPermissionSet = MscorlibBinder::GetClass(CLASS__NAMEDPERMISSION_SET);
- MethodTable* pMethReflectionPermission = MscorlibBinder::GetClass(CLASS__REFLECTION_PERMISSION);
- MethodTable* pMethSecurityPermission = MscorlibBinder::GetClass(CLASS__SECURITY_PERMISSION);
-
- DWORD dwSecurityPermissionFlags = 0, dwReflectionPermissionFlags = 0;
- MethodTable* pMeth = (*orDemand)->GetMethodTable();
- if (pMeth == pMethPermissionSet || pMeth == pMethNamedPermissionSet) {
- // NamedPermissionSet derives from PermissionSet and we're interested only
- // in the fields in PermissionSet: so it's OK to cast to the unmanaged
- // equivalent of PermissionSet even for a NamedPermissionSet object
- PERMISSIONSETREF permSet = (PERMISSIONSETREF) *orDemand;
-
- if (permSet->IsUnrestricted()) {
- return (1 << SECURITY_FULL_TRUST);
- }
- TOKENBASEDSETREF tokenBasedSet = (TOKENBASEDSETREF) permSet->GetTokenBasedSet();
- if (tokenBasedSet != NULL && tokenBasedSet->GetNumElements() == 1 && tokenBasedSet->GetPermSet() != NULL) {
- pMeth = (tokenBasedSet->GetPermSet())->GetMethodTable();
-
- if (pMeth == pMethReflectionPermission) {
- dwReflectionPermissionFlags = ((REFLECTIONPERMISSIONREF) tokenBasedSet->GetPermSet())->GetFlags();
- }
- else if (pMeth == pMethSecurityPermission) {
- dwSecurityPermissionFlags = ((SECURITYPERMISSIONREF) tokenBasedSet->GetPermSet())->GetFlags();
- }
- }
- }
- else {
- if (pMeth == pMethReflectionPermission)
- dwReflectionPermissionFlags = ((REFLECTIONPERMISSIONREF) (*orDemand))->GetFlags();
- else if (pMeth == pMethSecurityPermission)
- dwSecurityPermissionFlags = ((SECURITYPERMISSIONREF) (*orDemand))->GetFlags();
- }
-
- if (pMeth == pMethReflectionPermission) {
- switch (dwReflectionPermissionFlags) {
- case REFLECTION_PERMISSION_TYPEINFO:
- return (1 << REFLECTION_TYPE_INFO);
- case REFLECTION_PERMISSION_MEMBERACCESS:
- return (1 << REFLECTION_MEMBER_ACCESS);
- case REFLECTION_PERMISSION_RESTRICTEDMEMBERACCESS:
- return (1 << REFLECTION_RESTRICTED_MEMBER_ACCESS);
- default:
- return 0; // There is no mapping for this reflection permission flag
- }
- } else if (pMeth == pMethSecurityPermission) {
- switch (dwSecurityPermissionFlags) {
- case SECURITY_PERMISSION_ASSERTION:
- return (1 << SECURITY_ASSERT);
- case SECURITY_PERMISSION_UNMANAGEDCODE:
- return (1 << SECURITY_UNMANAGED_CODE);
- case SECURITY_PERMISSION_SKIPVERIFICATION:
- return (1 << SECURITY_SKIP_VER);
- case SECURITY_PERMISSION_SERIALIZATIONFORMATTER:
- return (1 << SECURITY_SERIALIZATION);
- case SECURITY_PERMISSION_BINDINGREDIRECTS:
- return (1 << SECURITY_BINDING_REDIRECTS);
- case SECURITY_PERMISSION_CONTROLEVIDENCE:
- return (1 << SECURITY_CONTROL_EVIDENCE);
- case SECURITY_PERMISSION_CONTROLPRINCIPAL:
- return (1 << SECURITY_CONTROL_PRINCIPAL);
- default:
- return 0; // There is no mapping for this security permission flag
- }
- }
-
- // We couldn't find an exact match for the permission, so we'll just return no flags.
- return 0;
-}
-
-// check is a stackwalk is needed to evaluate the demand
-BOOL SecurityStackWalk::PreCheck (OBJECTREF* orDemand, BOOL fDemandSet)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- // Track perfmon counters. Runtime security checks.
- IncrementSecurityPerfCounter();
-
- Thread* pThread = GetThread();
- // The PLS optimization does not support overrides.
- if (pThread->GetOverridesCount() > 0)
- return FALSE;
-
- DWORD dwDemandSpecialFlags = GetPermissionSpecialFlags(orDemand);
-
- // If we were able to map the demand to an exact permission special flag, and we know that all code on
- // this stack has been granted that permission, then we can take the fast path and allow the demand to
- // succeed.
- if (dwDemandSpecialFlags != 0)
- {
- return SecurityStackWalk::HasFlagsOrFullyTrustedIgnoreMode(dwDemandSpecialFlags);
- }
-
-#ifdef FEATURE_PLS
- // If we know there is only one AppDomain, then there is
- // no need to walk the AppDomainStack structure.
- if (pThread->GetNumAppDomainsOnThread() == 1)
- {
- ApplicationSecurityDescriptor* pASD = static_cast<ApplicationSecurityDescriptor*>(GetAppDomain()->GetSecurityDescriptor());
- return pASD->CheckPLS(orDemand, dwDemandSpecialFlags, fDemandSet);
- }
-
- // Walk all AppDomains in the stack and check the PLS on each one of them
- DWORD dwAppDomainIndex = 0;
- pThread->InitDomainIteration(&dwAppDomainIndex);
- _ASSERT(SystemDomain::System() && "SystemDomain not yet created!");
- while (dwAppDomainIndex != 0) {
- AppDomainFromIDHolder appDomain(pThread->GetNextDomainOnStack(&dwAppDomainIndex, NULL, NULL), FALSE);
- if (appDomain.IsUnloaded())
- // appdomain has been unloaded, so we can just continue on the loop
- continue;
-
- ApplicationSecurityDescriptor* pAppSecDesc = static_cast<ApplicationSecurityDescriptor*>(appDomain->GetSecurityDescriptor());
- appDomain.Release();
-
- if (!pAppSecDesc->CheckPLS(orDemand, dwDemandSpecialFlags, fDemandSet))
- return FALSE;
- }
- return TRUE;
-#else
- return FALSE;
-#endif // FEATURE_PLS
-}
-
-//-----------------------------------------------------------+
-// Unmanaged version of CodeAccessSecurityEngine.Demand() in BCL
-// Any change there may have to be propagated here
-// This call has to be virtual, unlike DemandSet
-//-----------------------------------------------------------+
-void
-SecurityStackWalk::Demand(SecurityStackWalkType eType, OBJECTREF demand)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- if (QuickCheckForAllDemands(0))
- return;
-
- Check_PLS_SW_GC(FALSE, eType, demand, NULL);
-}
-
-//
-// Demand which succeeds if either a demand for a single well known permission or restricted member access is
-// granted and a demand for the permission set of the target of a reflection operation would have suceeded.
-//
-// Arguments:
-// dwPermission - Permission input to the demand (See SecurityPolicy.h)
-// psdTarget - Security descriptor for the target assembly
-//
-// Return Value:
-// None, a SecurityException is thrown if the demands fail.
-//
-// Notes:
-// This is used by Reflection to implement partial trust reflection, where demands should succeed if either
-// a single permission demand, such as MemberAccess, would succeed for compatibility reasons, or if a
-// demand for the permission set of the target assembly would succeed.
-//
-// The intent is to allow reflection in partial trust when reflecting within the same permission set. Note
-// that this is inexact, since in the face of RequestRefuse, the target assembly may fail the demand even
-// within the same permission set.
-
-// static
-void SecurityStackWalk::ReflectionTargetDemand(DWORD dwPermission,
- AssemblySecurityDescriptor *psdTarget)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(dwPermission != 0);
- PRECONDITION(CheckPointer(psdTarget));
- }
- CONTRACTL_END;
-
- // If everybody on the stack has the special permission, the disjunctive demand will succeed.
- if (QuickCheckForAllDemands(1 << dwPermission))
- return;
-
- // In the simple sandbox case, we know the disjunctive demand will succeed if:
- // * we are granted restricted member access
- // * we are not reflecting on a FullTrust assembly
- // * every other AppDomain in the call stack is fully trusted
- Thread *pCurrentThread = GetThread();
- AppDomainStack appDomains = pCurrentThread->GetAppDomainStack();
-
- if (QuickCheckForAllDemands(1 << REFLECTION_RESTRICTED_MEMBER_ACCESS) &&
- !psdTarget->IsFullyTrusted() &&
- pCurrentThread->GetDomain()->GetSecurityDescriptor()->IsHomogeneous() &&
- !pCurrentThread->GetDomain()->GetSecurityDescriptor()->ContainsAnyRefusedPermissions() &&
- appDomains.GetOverridesCount() == 0)
- {
- DWORD dwCurrentDomain;
- appDomains.InitDomainIteration(&dwCurrentDomain);
-
- bool fFullTrustStack = true;
- while (dwCurrentDomain != 0 && fFullTrustStack)
- {
- AppDomainStackEntry *pCurrentDomain = appDomains.GetNextDomainEntryOnStack(&dwCurrentDomain);
- fFullTrustStack = pCurrentDomain->m_domainID == pCurrentThread->GetDomain()->GetId() ||
- pCurrentDomain->IsFullyTrustedWithNoStackModifiers();
- }
-
- if (fFullTrustStack)
- return;
- }
-
- OBJECTREF objTargetRefusedSet;
- OBJECTREF objTargetGrantSet = psdTarget->GetGrantedPermissionSet(&objTargetRefusedSet);
-
- GCPROTECT_BEGIN(objTargetGrantSet);
-
- MethodDescCallSite reflectionTargetDemandHelper(METHOD__SECURITY_ENGINE__REFLECTION_TARGET_DEMAND_HELPER);
- ARG_SLOT ilargs[] =
- {
- static_cast<ARG_SLOT>(dwPermission),
- ObjToArgSlot(objTargetGrantSet)
- };
-
- reflectionTargetDemandHelper.Call(ilargs);
-
- GCPROTECT_END();
-}
-
-//
-// Similar to a standard refelection target demand, however the demand is done against a captured compressed
-// stack instead of the current callstack
-//
-// Arguments:
-// dwPermission - Permission input to the demand (See SecurityPolicy.h)
-// psdTarget - Security descriptor for the target assembly
-// securityContext - Compressed stack to perform the demand against
-//
-// Return Value:
-// None, a SecurityException is thrown if the demands fail.
-//
-
-// static
-void SecurityStackWalk::ReflectionTargetDemand(DWORD dwPermission,
- AssemblySecurityDescriptor *psdTarget,
- DynamicResolver * pAccessContext)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(dwPermission >= 0 && dwPermission < 32);
- PRECONDITION(CheckPointer(psdTarget));
- }
- CONTRACTL_END;
-
- struct
- {
- OBJECTREF objTargetRefusedSet;
- OBJECTREF objTargetGrantSet;
- OBJECTREF objAccessContextObject;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
-
- GCPROTECT_BEGIN(gc);
-
- gc.objTargetGrantSet = psdTarget->GetGrantedPermissionSet(&(gc.objTargetRefusedSet));
-
- _ASSERTE(pAccessContext->GetDynamicMethod()->IsLCGMethod());
- gc.objAccessContextObject = ((LCGMethodResolver *)pAccessContext)->GetManagedResolver();
-
- MethodDescCallSite reflectionTargetDemandHelper(METHOD__SECURITY_ENGINE__REFLECTION_TARGET_DEMAND_HELPER_WITH_CONTEXT);
- ARG_SLOT ilargs[] =
- {
- static_cast<ARG_SLOT>(dwPermission),
- ObjToArgSlot(gc.objTargetGrantSet),
- ObjToArgSlot(gc.objAccessContextObject)
- };
-
- reflectionTargetDemandHelper.Call(ilargs);
-
- GCPROTECT_END();
-}
-
-//-----------------------------------------------------------+
-// Special case of Demand(). This remembers the result of the
-// previous demand, and reuses it if new assemblies have not
-// been added since then
-//-----------------------------------------------------------+
-void SecurityStackWalk::SpecialDemand(SecurityStackWalkType eType, DWORD whatPermission, StackCrawlMark* stackMark)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- if (QuickCheckForAllDemands(1<<whatPermission))
- {
- // Track perfmon counters. Runtime security checks.
- IncrementSecurityPerfCounter();
- return;
- }
- OBJECTREF demand = NULL;
- GCPROTECT_BEGIN(demand);
-
- SecurityDeclarative::GetPermissionInstance(&demand, whatPermission);
- Check_PLS_SW(IS_SPECIAL_FLAG_PERMISSION_SET(whatPermission), eType, &demand, stackMark);
-
- GCPROTECT_END();
-
-}
-
-// Do a demand for a special permission type
-FCIMPL2(void, SecurityStackWalk::FcallSpecialDemand, DWORD whatPermission, StackCrawlMark* stackMark)
-{
- FCALL_CONTRACT;
-
- HELPER_METHOD_FRAME_BEGIN_0();
-
- SpecialDemand(SSWT_IMPERATIVE_DEMAND, whatPermission, stackMark);
-
- HELPER_METHOD_FRAME_END();
-}
-FCIMPLEND
-
-//-----------------------------------------------------------+
-// Unmanaged version of PermissionSet.Demand()
-//-----------------------------------------------------------+
-void SecurityStackWalk::DemandSet(SecurityStackWalkType eType, OBJECTREF demand)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
-
- // Though the PermissionSet may contain non-CAS permissions, we are considering it as a CAS permission set only
- // at this point and so it's safe to check for the FT and if FTmeansFT and return
- if (QuickCheckForAllDemands(0))
- return;
-
- // Do further checks (PLS/SW) only if this set contains CAS perms
- if(((PERMISSIONSETREF)demand)->CheckedForNonCas() && !((PERMISSIONSETREF)demand)->ContainsCas())
- return;
-
- Check_PLS_SW_GC(TRUE, eType, demand, NULL);
-}
-
-void SecurityStackWalk::DemandSet(SecurityStackWalkType eType, PsetCacheEntry *pPCE, DWORD dwAction)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
-
- // Though the PermissionSet may contain non-CAS permissions, we are considering it as a CAS permission set only
- // at this point and so it's safe to check for the FT and if FTmeansFT and return
- if (QuickCheckForAllDemands(0))
- return;
-
- OBJECTREF refPermSet = pPCE->CreateManagedPsetObject (dwAction);
-
- if(refPermSet != NULL)
- {
- // Do further checks (PLS/SW) only if this set contains CAS perms
- if(((PERMISSIONSETREF)refPermSet)->CheckedForNonCas() && !((PERMISSIONSETREF)refPermSet)->ContainsCas())
- return;
-
- Check_PLS_SW_GC(TRUE, eType, refPermSet, NULL);
-
- }
-}
-
-//
-// Demand for the grant set of an assembly, without any identity permissions
-//
-// Arguments:
-// psdAssembly - assembly security descriptor to demand the grant set of
-//
-// Return Value:
-// None, a SecurityException is thrown if the demands fail.
-//
-
-// static
-void SecurityStackWalk::DemandGrantSet(AssemblySecurityDescriptor *psdAssembly)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- PRECONDITION(CheckPointer(psdAssembly));
- }
- CONTRACTL_END;
-
- OBJECTREF objRefusedSet;
- OBJECTREF objGrantSet = psdAssembly->GetGrantedPermissionSet(&objRefusedSet);
-
- GCPROTECT_BEGIN(objGrantSet);
-
- if (OBJECTREFToObject(objGrantSet) != NULL)
- {
- MethodDescCallSite checkWithoutIdentityPermissions(METHOD__SECURITY_ENGINE__CHECK_GRANT_SET_HELPER);
- ARG_SLOT ilargs[] =
- {
- ObjToArgSlot(objGrantSet)
- };
-
- checkWithoutIdentityPermissions.Call(ilargs);
- }
- else
- {
- // null grant set means full trust (mscorlib or anything created by it)
- StackCrawlMark scm = LookForMyCaller;
- SpecialDemand(SSWT_IMPERATIVE_DEMAND, SECURITY_FULL_TRUST, &scm);
- }
-
- GCPROTECT_END();
-}
-
-//-----------------------------------------------------------+
-// L I N K /I N H E R I T A N C E T I M E C H E C K
-//-----------------------------------------------------------+
-void SecurityStackWalk::LinkOrInheritanceCheck(IAssemblySecurityDescriptor *pSecDesc, OBJECTREF refDemands, Assembly* pAssembly, CorDeclSecurity action)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- // MSCORLIB is not subject to inheritance checks
- if (pAssembly->IsSystem())
- return;
-
- struct _gc {
- OBJECTREF refDemands;
- OBJECTREF refExposedAssemblyObject;
- OBJECTREF refRefused;
- OBJECTREF refGranted;
- } gc;
- ZeroMemory(&gc, sizeof(gc));
-
- gc.refDemands = refDemands;
- gc.refExposedAssemblyObject = NULL;
-
- GCPROTECT_BEGIN(gc);
-
-
- OVERRIDE_TYPE_LOAD_LEVEL_LIMIT(CLASS_LOADED);
-
- // We only do LinkDemands if the assembly is not fully trusted or if the demand contains permissions that don't implement IUnrestricted
- if (!pAssembly->GetSecurityDescriptor()->IsFullyTrusted())
- {
- if (pAssembly)
- gc.refExposedAssemblyObject = pAssembly->GetExposedObject();
-
- if (!pSecDesc->IsFullyTrusted())
- {
- MethodDescCallSite checkSetHelper(METHOD__SECURITY_ENGINE__CHECK_SET_HELPER);
- gc.refGranted = pSecDesc->GetGrantedPermissionSet(&(gc.refRefused));
- ARG_SLOT ilargs[7];
- ilargs[0] = ObjToArgSlot(NULL);
- ilargs[1] = ObjToArgSlot(gc.refGranted);
- ilargs[2] = ObjToArgSlot(gc.refRefused);
- ilargs[3] = ObjToArgSlot(gc.refDemands);
- ilargs[4] = PtrToArgSlot(NULL);
- ilargs[5] = ObjToArgSlot(gc.refExposedAssemblyObject);
- ilargs[6] = (ARG_SLOT)action;
- checkSetHelper.Call(ilargs);
- }
- }
- GCPROTECT_END();
-}
-
-
-//-----------------------------------------------------------+
-// S T A C K C O M P R E S S I O N FCALLS
-//-----------------------------------------------------------+
-
-
-
-#ifdef FEATURE_COMPRESSEDSTACK
-FCIMPL2(Object*, SecurityStackWalk::EcallGetDelayedCompressedStack, StackCrawlMark* stackMark, CLR_BOOL fWalkStack)
-{
- FCALL_CONTRACT;
-
- OBJECTREF rv = NULL;
-
- // No need to GC-protect stackMark as it a byref on the stack
- _ASSERTE(PVOID(stackMark) < GetThread()->GetCachedStackBase() &&
- PVOID(stackMark) > PVOID(&rv));
-
- HELPER_METHOD_FRAME_BEGIN_RET_0();
-
- rv = StackCompressor::GetCompressedStack(stackMark, fWalkStack);
-
- HELPER_METHOD_FRAME_END();
- return OBJECTREFToObject(rv);
-
-}
-FCIMPLEND
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-
-#ifdef FEATURE_COMPRESSEDSTACK
-BOOL SecurityStackWalk::MethodIsAnonymouslyHostedDynamicMethodWithCSToEvaluate(MethodDesc* pMeth)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- } CONTRACTL_END;
-
- if (!pMeth->IsLCGMethod())
- {
- return FALSE;
- }
- Assembly* pAssembly = pMeth->GetAssembly();
- AppDomain* pAppDomain = GetAppDomain();
- if(pAssembly != NULL && pAppDomain != NULL && pAssembly->GetDomainAssembly(pAppDomain) == pAppDomain->GetAnonymouslyHostedDynamicMethodsAssembly())
- {
- GCX_COOP();
- DynamicResolver::SecurityControlFlags dwSecurityFlags = DynamicResolver::Default;
- TypeHandle dynamicOwner; // not used
- pMeth->AsDynamicMethodDesc()->GetLCGMethodResolver()->GetJitContextCoop(&dwSecurityFlags, &dynamicOwner);
- if((dwSecurityFlags & DynamicResolver::CanSkipCSEvaluation) == 0)
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-#endif // FEATURE_COMPRESSEDSTACK
diff --git a/src/vm/securitytransparentassembly.cpp b/src/vm/securitytransparentassembly.cpp
index 4a23c276d8..be13cab612 100644
--- a/src/vm/securitytransparentassembly.cpp
+++ b/src/vm/securitytransparentassembly.cpp
@@ -690,11 +690,7 @@ CorInfoIsAccessAllowedResult SecurityTransparent::RequiresTransparentCodeChecks(
// Check to see if the callee has a LinkDemand, if so we may need to intercept the call.
if (pCalleeMD->RequiresLinktimeCheck())
{
- if (pCalleeMD->RequiresLinkTimeCheckHostProtectionOnly()
-#ifndef CROSSGEN_COMPILE
- && GetHostProtectionManager()->GetProtectedCategories() == eNoChecks
-#endif // CROSSGEN_COMPILE
- )
+ if (pCalleeMD->RequiresLinkTimeCheckHostProtectionOnly())
{
// exclude HPA which are marked as LinkDemand and there is no HostProtection enabled currently
return CORINFO_ACCESS_ALLOWED;
diff --git a/src/vm/siginfo.cpp b/src/vm/siginfo.cpp
index 9adfb4998c..b9955eca68 100644
--- a/src/vm/siginfo.cpp
+++ b/src/vm/siginfo.cpp
@@ -4953,10 +4953,52 @@ void PromoteCarefully(promote_func fn,
(*fn) (ppObj, sc, flags);
}
+void ReportByRefPointersFromByRefLikeObject(promote_func *fn, ScanContext *sc, PTR_MethodTable pMT, PTR_VOID pSrc)
+{
+ WRAPPER_NO_CONTRACT;
+
+ _ASSERTE(pMT->IsByRefLike());
+
+ // TODO: TypedReference should ideally be implemented as a by-ref-like struct containing a ByReference<T> field,
+ // in which case the check for g_TypedReferenceMT below would not be necessary
+ if (pMT == g_TypedReferenceMT || pMT->HasSameTypeDefAs(g_pByReferenceClass))
+ {
+ (*fn)(dac_cast<PTR_PTR_Object>(pSrc), sc, GC_CALL_INTERIOR);
+ return;
+ }
+
+ ApproxFieldDescIterator fieldIterator(pMT, ApproxFieldDescIterator::INSTANCE_FIELDS);
+ for (FieldDesc *pFD = fieldIterator.Next(); pFD != NULL; pFD = fieldIterator.Next())
+ {
+ if (pFD->GetFieldType() != ELEMENT_TYPE_VALUETYPE)
+ {
+ continue;
+ }
+
+ // TODO: GetApproxFieldTypeHandleThrowing may throw. This is a potential stress problem for fragile NGen of non-CoreLib
+ // assemblies. It won’t ever throw for CoreCLR with R2R. Figure out if anything needs to be done to deal with the
+ // exception.
+ PTR_MethodTable pFieldMT = pFD->GetApproxFieldTypeHandleThrowing().AsMethodTable();
+ if (!pFieldMT->IsByRefLike())
+ {
+ continue;
+ }
+
+ int fieldStartIndex = pFD->GetOffset() / sizeof(void *);
+ PTR_PTR_Object fieldRef = dac_cast<PTR_PTR_Object>(PTR_BYTE(pSrc) + fieldStartIndex);
+ ReportByRefPointersFromByRefLikeObject(fn, sc, pFieldMT, fieldRef);
+ }
+}
+
void ReportPointersFromValueType(promote_func *fn, ScanContext *sc, PTR_MethodTable pMT, PTR_VOID pSrc)
{
WRAPPER_NO_CONTRACT;
-
+
+ if (pMT->IsByRefLike())
+ {
+ ReportByRefPointersFromByRefLikeObject(fn, sc, pMT, pSrc);
+ }
+
if (!pMT->ContainsPointers())
return;
@@ -4985,9 +5027,12 @@ void ReportPointersFromValueType(promote_func *fn, ScanContext *sc, PTR_MethodTa
void ReportPointersFromValueTypeArg(promote_func *fn, ScanContext *sc, PTR_MethodTable pMT, ArgDestination *pSrc)
{
WRAPPER_NO_CONTRACT;
-
- if (!pMT->ContainsPointers())
+
+ if (!pMT->ContainsPointers() && !pMT->IsByRefLike())
+ {
return;
+ }
+
#if defined(UNIX_AMD64_ABI) && defined(FEATURE_UNIX_AMD64_STRUCT_PASSING)
if (pSrc->IsStructPassedInRegs())
{
diff --git a/src/vm/stackcompressor.cpp b/src/vm/stackcompressor.cpp
deleted file mode 100644
index 01f2a3d67f..0000000000
--- a/src/vm/stackcompressor.cpp
+++ /dev/null
@@ -1,378 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-
-//
-
-
-#include "common.h"
-
-#ifdef FEATURE_COMPRESSEDSTACK
-
-#include "stackcompressor.h"
-#include "securitystackwalk.h"
-#include "appdomainstack.inl"
-#include "comdelegate.h"
-
-//-----------------------------------------------------------
-// Stack walk callback data structure for stack compress.
-//-----------------------------------------------------------
-typedef struct _StackCompressData
-{
- void* compressedStack;
- StackCrawlMark * stackMark;
- DWORD dwFlags;
- Assembly * prevAssembly; // Previously checked assembly.
- AppDomain * prevAppDomain;
- Frame* pCtxTxFrame;
-} StackCompressData;
-
-
-void TurnSecurityStackWalkProgressOn( Thread* pThread )
-{
- WRAPPER_NO_CONTRACT;
- pThread->SetSecurityStackwalkInProgress( TRUE );
-}
-void TurnSecurityStackWalkProgressOff( Thread* pThread )
-{
- WRAPPER_NO_CONTRACT;
- pThread->SetSecurityStackwalkInProgress( FALSE );
-}
-typedef Holder< Thread*, TurnSecurityStackWalkProgressOn, TurnSecurityStackWalkProgressOff > StackWalkProgressEnableHolder;
-
-
-
-DWORD StackCompressor::GetCSInnerAppDomainOverridesCount(COMPRESSEDSTACKREF csRef)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- SO_TOLERANT;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
- //csRef can be NULL - that implies that we set the CS, then crossed an AD. So we would already have counted the overrides when we hit the
- // ctxTxFrame. Nothing to do here
- if (csRef != NULL)
- {
- NewCompressedStack* cs = (NewCompressedStack*)csRef->GetUnmanagedCompressedStack();
- if (cs != NULL)
- return cs->GetInnerAppDomainOverridesCount();
- }
- return 0;
-}
-DWORD StackCompressor::GetCSInnerAppDomainAssertCount(COMPRESSEDSTACKREF csRef)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- SO_TOLERANT;
- MODE_COOPERATIVE;
- }
- CONTRACTL_END;
- //csRef can be NULL - that implies that we set the CS, then crossed an AD. So we would already have counted the overrides when we hit the
- // ctxTxFrame. Nothing to do here
- if (csRef != NULL)
- {
- NewCompressedStack* cs = (NewCompressedStack*)csRef->GetUnmanagedCompressedStack();
- if (cs != NULL)
- return cs->GetInnerAppDomainAssertCount();
- }
- return 0;
-}
-
-void* StackCompressor::SetAppDomainStack(Thread* pThread, void* curr)
-{
- CONTRACTL
- {
- MODE_ANY;
- GC_NOTRIGGER;
- THROWS;
- } CONTRACTL_END;
-
- NewCompressedStack* unmanagedCompressedStack = (NewCompressedStack *)curr;
-
- AppDomainStack* pRetADStack = NULL;
-
- if (unmanagedCompressedStack != NULL)
- {
- pRetADStack = new AppDomainStack(pThread->GetAppDomainStack());
- pThread->SetAppDomainStack(unmanagedCompressedStack->GetAppDomainStack() );
- }
- else
- {
- if (!pThread->IsDefaultSecurityInfo()) /* Do nothing for the single domain/FT/no overrides case */
- {
- pRetADStack = new AppDomainStack(pThread->GetAppDomainStack());
- pThread->ResetSecurityInfo();
- }
- }
- return (void*)pRetADStack;
-}
-
-void StackCompressor::RestoreAppDomainStack(Thread* pThread, void* appDomainStack)
-{
- WRAPPER_NO_CONTRACT;
- _ASSERTE(appDomainStack != NULL);
- AppDomainStack* pADStack = (AppDomainStack*)appDomainStack;
- pThread->SetAppDomainStack(*pADStack);
- delete pADStack;
-}
-
-void StackCompressor::Destroy(void *stack)
-{
- WRAPPER_NO_CONTRACT;
- _ASSERTE(stack != NULL && "Don't pass NULL");
- NewCompressedStack* ncs = (NewCompressedStack*)stack;
- ncs->Destroy();
-}
-
-
-/* Forward declarations of the new CS stackwalking implementation */
-static void NCS_GetCompressedStackWorker(Thread *t, void *pData);
-static StackWalkAction NCS_CompressStackCB(CrawlFrame* pCf, void *pData);
-
-OBJECTREF StackCompressor::GetCompressedStack( StackCrawlMark* stackMark, BOOL fWalkStack )
-{
-
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- SO_INTOLERANT;// Not an entry point
- } CONTRACTL_END;
-
- // Get the current thread that we're to walk.
- Thread * t = GetThread();
-
- NewCompressedStackHolder csHolder(new NewCompressedStack());
-
-
- if (fWalkStack)
- {
- //
- // Initialize the callback data on the stack...
- //
-
- StackCompressData walkData;
-
- walkData.dwFlags = 0;
- walkData.prevAssembly = NULL;
- walkData.prevAppDomain = NULL;
- walkData.stackMark = stackMark;
- walkData.pCtxTxFrame = NULL;
-
-
- walkData.compressedStack = (void*)csHolder.GetValue();
- NCS_GetCompressedStackWorker(t, &walkData);
- }
-
- struct _gc {
- SAFEHANDLE pSafeCSHandle;
- } gc;
- gc.pSafeCSHandle = NULL;
-
- GCPROTECT_BEGIN(gc);
-
- gc.pSafeCSHandle = (SAFEHANDLE) AllocateObject(MscorlibBinder::GetClass(CLASS__SAFE_CSHANDLE));
- CallDefaultConstructor(gc.pSafeCSHandle);
- gc.pSafeCSHandle->SetHandle((void*) csHolder.GetValue());
- csHolder.SuppressRelease();
-
- GCPROTECT_END();
- return (OBJECTREF) gc.pSafeCSHandle;
-}
-
-
-void NCS_GetCompressedStackWorker(Thread *t, void *pData)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- StackCompressData *pWalkData = (StackCompressData*)pData;
- NewCompressedStack* compressedStack = (NewCompressedStack*) pWalkData->compressedStack;
-
- _ASSERTE( t != NULL );
-
- {
- StackWalkProgressEnableHolder holder( t );
-
- //
- // Begin the stack walk...
- //
- // LIGHTUNWIND flag: allow using stackwalk cache for security stackwalks
- // SKIPFUNCLETS flag: stop processing the stack after completing the current funclet (for instance
- // only process the catch block on x64, not the throw block)
- t->StackWalkFrames(NCS_CompressStackCB, pWalkData, SKIPFUNCLETS | LIGHTUNWIND);
-
-
- // Ignore CS (if present) when we hit a FT assert
- if (pWalkData->dwFlags & CORSEC_FT_ASSERT)
- return;
-
- // Check if there is a CS at the top of the thread
- COMPRESSEDSTACKREF csRef = (COMPRESSEDSTACKREF)t->GetCompressedStack();
- AppDomain *pAppDomain = t->GetDomain();
- Frame *pFrame = NULL;
-#ifdef FEATURE_REMOTING
- if (csRef == NULL)
- {
- // There may have been an AD transition and we shd look at the CB data to see if this is the case
- if (pWalkData->pCtxTxFrame != NULL)
- {
- pFrame = pWalkData->pCtxTxFrame;
- csRef = Security::GetCSFromContextTransitionFrame(pFrame);
- _ASSERTE(csRef != NULL); //otherwise we would not have saved the frame in the CB data
- pAppDomain = pWalkData->pCtxTxFrame->GetReturnDomain();
- }
- }
-#endif // FEATURE_REMOTING
-
- if (csRef != NULL)
- {
-
-
- compressedStack->ProcessCS(pAppDomain, csRef, pFrame);
- }
- else
- {
- compressedStack->ProcessAppDomainTransition(); // just to update domain overrides/assert count at the end of stackwalk
- }
-
-
- }
-
- return;
-}
-
-StackWalkAction NCS_CompressStackCB(CrawlFrame* pCf, void *pData)
-{
- CONTRACTL {
- THROWS;
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- StackCompressData *pCBdata = (StackCompressData*)pData;
- NewCompressedStack* compressedStack = (NewCompressedStack*) pCBdata->compressedStack;
-
- // First check if the walk has skipped the required frames. The check
- // here is between the address of a local variable (the stack mark) and a
- // pointer to the EIP for a frame (which is actually the pointer to the
- // return address to the function from the previous frame). So we'll
- // actually notice which frame the stack mark was in one frame later. This
- // is fine for our purposes since we're always looking for the frame of the
- // caller of the method that actually created the stack mark.
- _ASSERTE((pCBdata->stackMark == NULL) || (*pCBdata->stackMark == LookForMyCaller));
- if ((pCBdata->stackMark != NULL) &&
- !pCf->IsInCalleesFrames(pCBdata->stackMark))
- return SWA_CONTINUE;
-
- Frame *pFrame = pCf->GetFrame();
-
-#ifdef FEATURE_REMOTING
- // Save the CtxTxFrame if this is one
- if (pCBdata->pCtxTxFrame == NULL)
- {
- if (Security::IsContextTransitionFrameWithCS(pFrame))
- {
- pCBdata->pCtxTxFrame = pFrame;
- }
- }
-#endif // FEATURE_REMOTING
-
- // Handle AppDomain transitions:
- AppDomain *pAppDomain = pCf->GetAppDomain();
- if (pCBdata->prevAppDomain != pAppDomain)
- {
-#ifndef FEATURE_REMOTING
- BOOL bRealAppDomainTransition = (pCBdata->prevAppDomain != NULL);
-
- // For a "real" appdomain transition, we can stop the stackwalk since there's no managed AD transitions
- // without remoting. The "real" here denotes that this is not the first appdomain transition (from NULL to current)
- // that happens on the first crawlframe we see on a stackwalk. Also don't do the final ad transition here (that'll happen
- // outside the callback)
- if (bRealAppDomainTransition)
- {
- return SWA_ABORT;
- }
- else
-#endif // !FEATURE_REMOTING
- {
- compressedStack->ProcessAppDomainTransition();
- pCBdata->prevAppDomain = pAppDomain;
- }
-
- }
-
-
- if (pCf->GetFunction() == NULL)
- return SWA_CONTINUE; // not a function frame, so we were just looking for CtxTransitionFrames. Resume the stackwalk...
-
- // Get the security object for this function...
- OBJECTREF* pRefSecDesc = pCf->GetAddrOfSecurityObject();
-
- MethodDesc * pFunc = pCf->GetFunction();
-
- _ASSERTE(pFunc != NULL); // we requested methods!
-
- Assembly * pAssem = pCf->GetAssembly();
- _ASSERTE(pAssem != NULL);
- PREFIX_ASSUME(pAssem != NULL);
-
-
-
-
- if (pRefSecDesc != NULL)
- SecurityDeclarative::DoDeclarativeSecurityAtStackWalk(pFunc, pAppDomain, pRefSecDesc);
-
-
-
- if (pFunc->GetMethodTable()->IsDelegate())
- {
- DelegateEEClass* delegateCls = (DelegateEEClass*) pFunc->GetMethodTable()->GetClass();
- if (pFunc == delegateCls->m_pBeginInvokeMethod)
- {
- // Async delegate case: we may need to insert the creator frame into the CS
- DELEGATEREF dRef = (DELEGATEREF) ((FramedMethodFrame *)pFrame)->GetThis();
- _ASSERTE(dRef);
- if (COMDelegate::IsSecureDelegate(dRef))
- {
- if (!dRef->IsWrapperDelegate())
- {
- MethodDesc* pCreatorMethod = (MethodDesc*) dRef->GetMethodPtrAux();
- Assembly* pCreatorAssembly = pCreatorMethod->GetAssembly();
- compressedStack->ProcessFrame(pAppDomain,
- NULL,
- NULL,
- pCreatorAssembly->GetSharedSecurityDescriptor(),
- NULL) ; // ignore return value - No FSD being passed in.
- }
- }
-
- }
- }
-
-
- DWORD retFlags = compressedStack->ProcessFrame(pAppDomain,
- pAssem,
- pFunc,
- pAssem->GetSharedSecurityDescriptor(),
- (FRAMESECDESCREF *) pRefSecDesc) ;
-
- pCBdata->dwFlags |= (retFlags & CORSEC_FT_ASSERT);
- // ProcessFrame returns TRUE if we should stop stackwalking
- if (retFlags != 0 || Security::IsSpecialRunFrame(pFunc))
- return SWA_ABORT;
-
- return SWA_CONTINUE;
-
-}
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
diff --git a/src/vm/stackcompressor.h b/src/vm/stackcompressor.h
deleted file mode 100644
index 062d2f4a9c..0000000000
--- a/src/vm/stackcompressor.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-
-//
-
-
-#ifndef __stackcompressor_h__
-#define __stackcompressor_h__
-#ifdef FEATURE_COMPRESSEDSTACK
-
-#include "common.h"
-
-
-#include "newcompressedstack.h"
-
-#ifndef DACCESS_COMPILE
-
-class StackCompressor
-{
-
-public:
- static DWORD StackCompressor::GetCSInnerAppDomainAssertCount(COMPRESSEDSTACKREF csRef);
- static DWORD StackCompressor::GetCSInnerAppDomainOverridesCount(COMPRESSEDSTACKREF csRef);
- static void* SetAppDomainStack(Thread* pThread, void* curr);
- static void RestoreAppDomainStack(Thread* pThread, void* appDomainStack);
-
- static void Destroy(void *stack);
- static OBJECTREF GetCompressedStack( StackCrawlMark* stackMark = NULL, BOOL fWalkStack = TRUE );
-
-
-};
-#endif // DACCESS_COMPILE
-#endif // #ifdef FEATURE_COMPRESSEDSTACK
-
-#endif // __stackcompressor_h__
-
diff --git a/src/vm/stackwalk.cpp b/src/vm/stackwalk.cpp
index 18a8900039..36af466e12 100644
--- a/src/vm/stackwalk.cpp
+++ b/src/vm/stackwalk.cpp
@@ -20,6 +20,10 @@
#include "interpreter.h"
#endif // FEATURE_INTERPRETER
+#ifdef WIN64EXCEPTIONS
+#define PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
+#endif
+
#ifdef _DEBUG
void* forceFrame; // Variable used to force a local variable to the frame
#endif
@@ -48,6 +52,7 @@ Assembly* CrawlFrame::GetAssembly()
return pAssembly;
}
+#ifndef DACCESS_COMPILE
OBJECTREF* CrawlFrame::GetAddrOfSecurityObject()
{
CONTRACTL {
@@ -94,6 +99,7 @@ OBJECTREF* CrawlFrame::GetAddrOfSecurityObject()
}
return NULL;
}
+#endif
BOOL CrawlFrame::IsInCalleesFrames(LPVOID stackPointer)
{
@@ -555,17 +561,13 @@ UINT_PTR Thread::VirtualUnwindCallFrame(PREGDISPLAY pRD, EECodeInfo* pCodeInfo /
pRD->pCurrentContext = pRD->pCallerContext;
pRD->pCallerContext = temp;
-#if defined(_TARGET_AMD64_) || defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
PT_KNONVOLATILE_CONTEXT_POINTERS tempPtrs = pRD->pCurrentContextPointers;
pRD->pCurrentContextPointers = pRD->pCallerContextPointers;
pRD->pCallerContextPointers = tempPtrs;
-#endif // defined(_TARGET_AMD64_) || defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
}
else
{
- PT_KNONVOLATILE_CONTEXT_POINTERS pCurrentContextPointers = NULL;
- NOT_X86(pCurrentContextPointers = pRD->pCurrentContextPointers);
- VirtualUnwindCallFrame(pRD->pCurrentContext, pCurrentContextPointers, pCodeInfo);
+ VirtualUnwindCallFrame(pRD->pCurrentContext, pRD->pCurrentContextPointers, pCodeInfo);
}
SyncRegDisplayToCurrentContext(pRD);
@@ -722,15 +724,12 @@ PCODE Thread::VirtualUnwindNonLeafCallFrame(T_CONTEXT* pContext, KNONVOLATILE_CO
CONTRACTL_END;
PCODE uControlPc = GetIP(pContext);
-#if defined(_WIN64)
+#ifdef BIT64
UINT64 EstablisherFrame;
- PVOID HandlerData;
-#elif defined(_TARGET_ARM_)
+#else // BIT64
DWORD EstablisherFrame;
+#endif // BIT64
PVOID HandlerData;
-#else
- _ASSERTE(!"nyi platform stackwalking");
-#endif
if (NULL == pFunctionEntry)
{
@@ -893,7 +892,7 @@ StackWalkAction Thread::MakeStackwalkerCallback(
}
-#if !defined(DACCESS_COMPILE) && defined(_TARGET_X86_)
+#if !defined(DACCESS_COMPILE) && defined(_TARGET_X86_) && !defined(WIN64EXCEPTIONS)
#define STACKWALKER_MAY_POP_FRAMES
#endif
@@ -1191,10 +1190,10 @@ BOOL StackFrameIterator::Init(Thread * pThread,
_ASSERTE(CanThisThreadCallIntoHost() || (flags & LIGHTUNWIND) == 0);
#endif // DACCESS_COMPILE
-#if !defined(_TARGET_X86_)
+#ifdef WIN64EXCEPTIONS
_ASSERTE(!(flags & POPFRAMES));
_ASSERTE(pRegDisp->pCurrentContext);
-#endif // !_TARGET_X86_
+#endif // WIN64EXCEPTIONS
BEGIN_FORBID_TYPELOAD();
@@ -1350,7 +1349,7 @@ BOOL StackFrameIterator::ResetRegDisp(PREGDISPLAY pRegDisp,
{
TADDR curSP = GetRegdisplaySP(m_crawl.pRD);
-#if !defined(_TARGET_X86_)
+#ifdef PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
if (m_crawl.IsFrameless())
{
// On 64-bit and ARM, we stop at the explicit frames contained in a managed stack frame
@@ -1358,7 +1357,7 @@ BOOL StackFrameIterator::ResetRegDisp(PREGDISPLAY pRegDisp,
EECodeManager::EnsureCallerContextIsValid(m_crawl.pRD, NULL);
curSP = GetSP(m_crawl.pRD->pCallerContext);
}
-#endif // !_TARGET_X86_
+#endif // PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
#if defined(_TARGET_X86_)
// special processing on x86; see below for more information
@@ -2375,7 +2374,7 @@ StackWalkAction StackFrameIterator::NextRaw(void)
}
else
{
-#if defined(_TARGET_X86_)
+#ifndef PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
// On x86, we process a managed stack frame before processing any explicit frames contained in it.
// So when we are done with the skipped explicit frame, we have already processed the managed
// stack frame, and it is time to move onto the next stack frame.
@@ -2384,7 +2383,7 @@ StackWalkAction StackFrameIterator::NextRaw(void)
{
goto Cleanup;
}
-#else // _TARGET_X86_
+#else // !PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
// We are done handling the skipped explicit frame at this point. So move on to the
// managed stack frame.
m_crawl.isFrameless = true;
@@ -2394,7 +2393,7 @@ StackWalkAction StackFrameIterator::NextRaw(void)
PreProcessingForManagedFrames();
goto Cleanup;
-#endif // _TARGET_X86_
+#endif // PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
}
}
else if (m_frameState == SFITER_FRAMELESS_METHOD)
@@ -2467,7 +2466,7 @@ StackWalkAction StackFrameIterator::NextRaw(void)
DBG_ADDR(GetRegdisplaySP(m_crawl.pRD)),
DBG_ADDR(GetControlPC(m_crawl.pRD))));
-#if !defined(DACCESS_COMPILE)
+#if !defined(DACCESS_COMPILE) && defined(HAS_QUICKUNWIND)
StackwalkCacheEntry *pCacheEntry = m_crawl.GetStackwalkCacheEntry();
if (pCacheEntry != NULL)
{
@@ -2477,7 +2476,7 @@ StackWalkAction StackFrameIterator::NextRaw(void)
EECodeManager::QuickUnwindStackFrame(m_crawl.pRD, pCacheEntry, EECodeManager::UnwindCurrentStackFrame);
}
else
-#endif // !DACCESS_COMPILE
+#endif // !DACCESS_COMPILE && HAS_QUICKUNWIND
{
#if !defined(DACCESS_COMPILE)
// non-optimized stack unwind schema, doesn't use StackwalkCache
@@ -2579,14 +2578,14 @@ StackWalkAction StackFrameIterator::NextRaw(void)
m_crawl.hasFaulted = FALSE;
m_crawl.isIPadjusted = FALSE;
-#if defined(_TARGET_X86_)
+#ifndef PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
// remember, x86 handles the managed stack frame before the explicit frames contained in it
if (CheckForSkippedFrames())
{
_ASSERTE(m_frameState == SFITER_SKIPPED_FRAME_FUNCTION);
goto Cleanup;
}
-#endif // _TARGET_X86_
+#endif // !PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
PostProcessingForManagedFrames();
if (m_frameState == SFITER_NATIVE_MARKER_FRAME)
@@ -2675,11 +2674,11 @@ StackWalkAction StackFrameIterator::NextRaw(void)
#endif // !_TARGET_X86_
+#if defined(_DEBUG) && !defined(DACCESS_COMPILE) && !defined(WIN64EXCEPTIONS)
// We are transitioning from unmanaged code to managed code... lets do some validation of our
// EH mechanism on platforms that we can.
-#if defined(_DEBUG) && !defined(DACCESS_COMPILE) && (defined(_TARGET_X86_) && !defined(FEATURE_STUBS_AS_IL))
VerifyValidTransitionFromManagedCode(m_crawl.pThread, &m_crawl);
-#endif // _DEBUG && !DACCESS_COMPILE && _TARGET_X86_
+#endif // _DEBUG && !DACCESS_COMPILE && !WIN64EXCEPTIONS
}
}
@@ -2972,7 +2971,7 @@ void StackFrameIterator::ProcessCurrentFrame(void)
// Cache values which may be updated by CheckForSkippedFrames()
m_cachedCodeInfo = m_crawl.codeInfo;
-#if !defined(_TARGET_X86_)
+#ifdef PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
// On non-X86, we want to process the skipped explicit frames before the managed stack frame
// containing them.
if (CheckForSkippedFrames())
@@ -2980,7 +2979,7 @@ void StackFrameIterator::ProcessCurrentFrame(void)
_ASSERTE(m_frameState == SFITER_SKIPPED_FRAME_FUNCTION);
}
else
-#endif // !_TARGET_X86_
+#endif // PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
{
PreProcessingForManagedFrames();
_ASSERTE(m_frameState == SFITER_FRAMELESS_METHOD);
@@ -3027,9 +3026,9 @@ BOOL StackFrameIterator::CheckForSkippedFrames(void)
// Can the caller handle skipped frames;
fHandleSkippedFrames = (m_flags & HANDLESKIPPEDFRAMES);
-#if defined(_TARGET_X86_)
+#ifndef PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
pvReferenceSP = GetRegdisplaySP(m_crawl.pRD);
-#else // _TARGET_X86_
+#else // !PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
// Order the Frames relative to the caller SP of the methods
// this makes it so that any Frame that is in a managed call
// frame will be reported before its containing method.
@@ -3037,7 +3036,7 @@ BOOL StackFrameIterator::CheckForSkippedFrames(void)
// This should always succeed! If it doesn't, it's a bug somewhere else!
EECodeManager::EnsureCallerContextIsValid(m_crawl.pRD, m_crawl.GetStackwalkCacheEntry(), &m_cachedCodeInfo);
pvReferenceSP = GetSP(m_crawl.pRD->pCallerContext);
-#endif // _TARGET_X86_
+#endif // PROCESS_EXPLICIT_FRAME_BEFORE_MANAGED_FRAME
if ( !( (m_crawl.pFrame != FRAME_TOP) &&
(dac_cast<TADDR>(m_crawl.pFrame) < pvReferenceSP) )
diff --git a/src/vm/stackwalk.h b/src/vm/stackwalk.h
index f8bd519106..3de8c6acef 100644
--- a/src/vm/stackwalk.h
+++ b/src/vm/stackwalk.h
@@ -107,6 +107,7 @@ public:
BOOL IsInCalleesFrames(LPVOID stackPointer);
+#ifndef DACCESS_COMPILE
/* Returns address of the securityobject stored in the current function (method?)
Returns NULL if
- not a function OR
@@ -114,6 +115,7 @@ public:
(which is an error)
*/
OBJECTREF * GetAddrOfSecurityObject();
+#endif // DACCESS_COMPILE
// Fetch the extra type argument passed in some cases
PTR_VOID GetParamTypeArg();
diff --git a/src/vm/stubmgr.h b/src/vm/stubmgr.h
index f0098c9d55..10cba00de7 100644
--- a/src/vm/stubmgr.h
+++ b/src/vm/stubmgr.h
@@ -445,7 +445,7 @@ class PrecodeStubManager : public StubManager
#ifndef DACCESS_COMPILE
virtual BOOL TraceManager(Thread *thread,
TraceDestination *trace,
- CONTEXT *pContext,
+ T_CONTEXT *pContext,
BYTE **pRetAddr);
#endif
@@ -509,7 +509,7 @@ class StubLinkStubManager : public StubManager
#ifndef DACCESS_COMPILE
virtual BOOL TraceManager(Thread *thread,
TraceDestination *trace,
- CONTEXT *pContext,
+ T_CONTEXT *pContext,
BYTE **pRetAddr);
#endif
@@ -646,7 +646,7 @@ class RangeSectionStubManager : public StubManager
#ifndef DACCESS_COMPILE
virtual BOOL TraceManager(Thread *thread,
TraceDestination *trace,
- CONTEXT *pContext,
+ T_CONTEXT *pContext,
BYTE **pRetAddr);
#endif
@@ -708,7 +708,7 @@ class ILStubManager : public StubManager
virtual BOOL TraceManager(Thread *thread,
TraceDestination *trace,
- CONTEXT *pContext,
+ T_CONTEXT *pContext,
BYTE **pRetAddr);
#endif
@@ -752,7 +752,7 @@ class InteropDispatchStubManager : public StubManager
#ifndef DACCESS_COMPILE
virtual BOOL TraceManager(Thread *thread,
TraceDestination *trace,
- CONTEXT *pContext,
+ T_CONTEXT *pContext,
BYTE **pRetAddr);
#endif
@@ -797,7 +797,7 @@ class DelegateInvokeStubManager : public StubManager
virtual BOOL CheckIsStub_Internal(PCODE stubStartAddress);
#if !defined(DACCESS_COMPILE)
- virtual BOOL TraceManager(Thread *thread, TraceDestination *trace, CONTEXT *pContext, BYTE **pRetAddr);
+ virtual BOOL TraceManager(Thread *thread, TraceDestination *trace, T_CONTEXT *pContext, BYTE **pRetAddr);
static BOOL TraceDelegateObject(BYTE *orDel, TraceDestination *trace);
#endif // DACCESS_COMPILE
@@ -846,7 +846,7 @@ public:
TailCallStubManager() : StubManager() {WRAPPER_NO_CONTRACT;}
~TailCallStubManager() {WRAPPER_NO_CONTRACT;}
- virtual BOOL TraceManager(Thread * pThread, TraceDestination * pTrace, CONTEXT * pContext, BYTE ** ppRetAddr);
+ virtual BOOL TraceManager(Thread * pThread, TraceDestination * pTrace, T_CONTEXT * pContext, BYTE ** ppRetAddr);
static bool IsTailCallStubHelper(PCODE code);
#endif // DACCESS_COMPILE
diff --git a/src/vm/threads.cpp b/src/vm/threads.cpp
index 38094ca8b5..5bb9bf35d7 100644
--- a/src/vm/threads.cpp
+++ b/src/vm/threads.cpp
@@ -3060,7 +3060,16 @@ BOOL Thread::CreateNewOSThread(SIZE_T sizeToCommitOrReserve, LPTHREAD_START_ROUT
DWORD dwCreationFlags = CREATE_SUSPENDED;
#ifdef FEATURE_CORECLR
- dwCreationFlags |= STACK_SIZE_PARAM_IS_A_RESERVATION;
+ dwCreationFlags |= STACK_SIZE_PARAM_IS_A_RESERVATION;
+
+#ifndef FEATURE_PAL // the PAL does its own adjustments as necessary
+ if (sizeToCommitOrReserve != 0 && sizeToCommitOrReserve <= OS_PAGE_SIZE)
+ {
+ // On Windows, passing a value that is <= one page size bizarrely causes the OS to use the default stack size instead of
+ // a minimum, which is undesirable. This adjustment fixes that issue to use a minimum stack size (typically 64 KB).
+ sizeToCommitOrReserve = OS_PAGE_SIZE + 1;
+ }
+#endif // !FEATURE_PAL
#else
if(sizeToCommitOrReserve != 0)
{
@@ -4533,9 +4542,6 @@ retry:
{
// Probe all handles with a timeout of zero. When we find one that's
// invalid, move it out of the list and retry the wait.
-#ifdef _DEBUG
- BOOL fFoundInvalid = FALSE;
-#endif
for (int i = 0; i < countHandles; i++)
{
// WaitForSingleObject won't pump memssage; we already probe enough space
@@ -4548,12 +4554,8 @@ retry:
if ((countHandles - i - 1) > 0)
memmove(&handles[i], &handles[i+1], (countHandles - i - 1) * sizeof(HANDLE));
countHandles--;
-#ifdef _DEBUG
- fFoundInvalid = TRUE;
-#endif
break;
}
- _ASSERTE(fFoundInvalid);
// Compute the new timeout value by assume that the timeout
// is not large enough for more than one wrap
@@ -4599,7 +4601,6 @@ retry:
_ASSERTE(subRet == WAIT_TIMEOUT);
ret++;
}
- _ASSERTE(i != countHandles);
}
}
@@ -6807,17 +6808,14 @@ void Thread::HandleThreadInterrupt (BOOL fWaitForADUnload)
}
if ((m_UserInterrupt & TI_Interrupt) != 0)
{
- if (ReadyForInterrupt())
- {
- ResetThreadState ((ThreadState)(TS_Interrupted | TS_Interruptible));
- FastInterlockAnd ((DWORD*)&m_UserInterrupt, ~TI_Interrupt);
+ ResetThreadState ((ThreadState)(TS_Interrupted | TS_Interruptible));
+ FastInterlockAnd ((DWORD*)&m_UserInterrupt, ~TI_Interrupt);
#ifdef _DEBUG
- AddFiberInfo(ThreadTrackInfo_Abort);
+ AddFiberInfo(ThreadTrackInfo_Abort);
#endif
- COMPlusThrow(kThreadInterruptedException);
- }
+ COMPlusThrow(kThreadInterruptedException);
}
END_SO_INTOLERANT_CODE;
}
@@ -7327,11 +7325,25 @@ BOOL Thread::SetStackLimits(SetStackLimitScope scope)
return FALSE;
}
- // Compute the limit used by EnsureSufficientExecutionStack and cache it on the thread. The limit
- // is currently set at 50% of the stack, which should be sufficient to allow the average Framework
- // function to run, and to allow us to throw and dispatch an exception up a reasonable call chain.
- m_CacheStackSufficientExecutionLimit = reinterpret_cast<UINT_PTR>(m_CacheStackBase) -
- (reinterpret_cast<UINT_PTR>(m_CacheStackBase) - reinterpret_cast<UINT_PTR>(m_CacheStackLimit)) / 2;
+ // Compute the limit used by EnsureSufficientExecutionStack and cache it on the thread. This minimum stack size should
+ // be sufficient to allow a typical non-recursive call chain to execute, including potential exception handling and
+ // garbage collection. Used for probing for available stack space through RuntimeImports.EnsureSufficientExecutionStack,
+ // among other things.
+#ifdef BIT64
+ const UINT_PTR MinExecutionStackSize = 128 * 1024;
+#else // !BIT64
+ const UINT_PTR MinExecutionStackSize = 64 * 1024;
+#endif // BIT64
+ _ASSERTE(m_CacheStackBase >= m_CacheStackLimit);
+ if ((reinterpret_cast<UINT_PTR>(m_CacheStackBase) - reinterpret_cast<UINT_PTR>(m_CacheStackLimit)) >
+ MinExecutionStackSize)
+ {
+ m_CacheStackSufficientExecutionLimit = reinterpret_cast<UINT_PTR>(m_CacheStackLimit) + MinExecutionStackSize;
+ }
+ else
+ {
+ m_CacheStackSufficientExecutionLimit = reinterpret_cast<UINT_PTR>(m_CacheStackBase);
+ }
}
// Ensure that we've setup the stack guarantee properly before we cache the stack limits
@@ -8241,7 +8253,7 @@ void Thread::FillRegDisplay(const PREGDISPLAY pRD, PT_CONTEXT pctx)
}
-#if defined(DEBUG_REGDISPLAY) && !defined(_TARGET_X86_)
+#ifdef DEBUG_REGDISPLAY
void CheckRegDisplaySP (REGDISPLAY *pRD)
{
@@ -8254,7 +8266,7 @@ void CheckRegDisplaySP (REGDISPLAY *pRD)
}
}
-#endif // defined(DEBUG_REGDISPLAY) && !defined(_TARGET_X86_)
+#endif // DEBUG_REGDISPLAY
// Trip Functions
// ==============
diff --git a/src/vm/threads.h b/src/vm/threads.h
index 144e17c591..51116e1ad6 100644
--- a/src/vm/threads.h
+++ b/src/vm/threads.h
@@ -3166,12 +3166,7 @@ public:
};
private:
- BOOL ReadyForInterrupt()
- {
- return ReadyForAsyncException(TI_Interrupt);
- }
-
- BOOL ReadyForAsyncException(ThreadInterruptMode mode);
+ BOOL ReadyForAsyncException();
public:
inline BOOL IsYieldRequested()
@@ -3185,7 +3180,7 @@ public:
void SetAbortRequest(EEPolicy::ThreadAbortTypes abortType); // Should only be called by ADUnload
BOOL ReadyForAbort()
{
- return ReadyForAsyncException(TI_Abort);
+ return ReadyForAsyncException();
}
BOOL IsRudeAbort();
@@ -3386,7 +3381,7 @@ public:
m_singleStepper.Disable();
}
- void ApplySingleStep(CONTEXT *pCtx)
+ void ApplySingleStep(T_CONTEXT *pCtx)
{
m_singleStepper.Apply(pCtx);
}
@@ -3399,7 +3394,7 @@ public:
// Fixup code called by our vectored exception handler to complete the emulation of single stepping
// initiated by EnableSingleStep above. Returns true if the exception was indeed encountered during
// stepping.
- bool HandleSingleStep(CONTEXT *pCtx, DWORD dwExceptionCode)
+ bool HandleSingleStep(T_CONTEXT *pCtx, DWORD dwExceptionCode)
{
return m_singleStepper.Fixup(pCtx, dwExceptionCode);
}
diff --git a/src/vm/threadsuspend.cpp b/src/vm/threadsuspend.cpp
index 2e6563da1e..cdfbd79497 100644
--- a/src/vm/threadsuspend.cpp
+++ b/src/vm/threadsuspend.cpp
@@ -816,7 +816,7 @@ static StackWalkAction TAStackCrawlCallBackWorker(CrawlFrame* pCf, StackCrawlCon
EE_ILEXCEPTION_CLAUSE EHClause;
StackWalkAction action = SWA_CONTINUE;
-#ifdef _TARGET_X86_
+#ifndef WIN64EXCEPTIONS
// On X86, the EH encoding for catch clause is completely mess.
// If catch clause is in its own basic block, the end of catch includes everything in the basic block.
// For nested catch, the end of catch may include several jmp instructions after JIT_EndCatch call.
@@ -830,7 +830,7 @@ static StackWalkAction TAStackCrawlCallBackWorker(CrawlFrame* pCf, StackCrawlCon
fAtJitEndCatch = TRUE;
offs -= 1;
}
-#endif // _TARGET_X86_
+#endif // !WIN64EXCEPTIONS
#if _TARGET_AMD64_
STRESS_LOG1(LF_EH, LL_INFO10, "AMD64 - in TAStackCrawlCallBack 0x%x offset\n", offs);
@@ -898,7 +898,7 @@ static StackWalkAction TAStackCrawlCallBackWorker(CrawlFrame* pCf, StackCrawlCon
if (offs >= EHClause.HandlerStartPC &&
offs < EHClause.HandlerEndPC)
{
-#ifdef _TARGET_X86_
+#ifndef WIN64EXCEPTIONS
if (fAtJitEndCatch)
{
// On X86, JIT's EH info may include the instruction after JIT_EndCatch inside the same catch
@@ -911,7 +911,7 @@ static StackWalkAction TAStackCrawlCallBackWorker(CrawlFrame* pCf, StackCrawlCon
continue;
}
}
-#endif
+#endif // !WIN64EXCEPTIONS
pData->fWithinEHClause = true;
// We're within an EH clause. If we're asking about CERs too then stop the stack walk if we've reached a conclusive
// result or continue looking otherwise. Else we can stop the stackwalk now.
@@ -927,14 +927,14 @@ static StackWalkAction TAStackCrawlCallBackWorker(CrawlFrame* pCf, StackCrawlCon
}
}
-#ifdef _TARGET_X86_
+#ifndef WIN64EXCEPTIONS
#ifdef _DEBUG
if (fAtJitEndCatch)
{
_ASSERTE (countInCatch > 0);
}
#endif // _DEBUG
-#endif // _TARGET_X86_
+#endif // !WIN64EXCEPTIONS_
return action;
}
@@ -1345,7 +1345,7 @@ BOOL Thread::IsSafeToInjectThreadAbort(PTR_CONTEXT pContextToCheck)
#endif
-BOOL Thread::ReadyForAsyncException(ThreadInterruptMode mode)
+BOOL Thread::ReadyForAsyncException()
{
CONTRACTL {
NOTHROW;
@@ -1354,8 +1354,7 @@ BOOL Thread::ReadyForAsyncException(ThreadInterruptMode mode)
}
CONTRACTL_END;
- if (((mode & TI_Abort) != 0 && !IsAbortRequested()) ||
- ((mode & TI_Interrupt) != 0 && (m_UserInterrupt & TI_Interrupt) == 0))
+ if (!IsAbortRequested())
{
return FALSE;
}
@@ -2190,7 +2189,7 @@ LRetry:
| TS_Detached
| TS_Unstarted)));
-#ifdef _TARGET_X86_
+#if defined(_TARGET_X86_) && !defined(WIN64EXCEPTIONS)
// TODO WIN64: consider this if there is a way to detect of managed code on stack.
if ((m_pFrame == FRAME_TOP)
&& (GetFirstCOMPlusSEHRecord(this) == EXCEPTION_CHAIN_END)
@@ -2213,7 +2212,7 @@ LRetry:
if (!m_fPreemptiveGCDisabled)
{
if ((m_pFrame != FRAME_TOP) && m_pFrame->IsTransitionToNativeFrame()
-#ifdef _TARGET_X86_
+#if defined(_TARGET_X86_) && !defined(WIN64EXCEPTIONS)
&& ((size_t) GetFirstCOMPlusSEHRecord(this) > ((size_t) m_pFrame) - 20)
#endif // _TARGET_X86_
)
@@ -7019,7 +7018,7 @@ StackWalkAction SWCB_GetExecutionState(CrawlFrame *pCF, VOID *pData)
// return address for hijacking.
if (!pES->m_IsInterruptible)
{
-#if defined(_TARGET_AMD64_) || defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
+#ifdef WIN64EXCEPTIONS
PREGDISPLAY pRDT = pCF->GetRegisterSet();
_ASSERTE(pRDT != NULL);
@@ -7076,15 +7075,17 @@ StackWalkAction SWCB_GetExecutionState(CrawlFrame *pCF, VOID *pData)
// in the caller of the current non-interruptible frame.
pES->m_ppvRetAddrPtr = (void **) pRDT->pCallerContextPointers->Lr;
}
-#else
- pES->m_ppvRetAddrPtr = (void **) ((size_t)GetSP(pRDT->pCallerContext) - sizeof(void*));
-#endif
+#elif defined(_TARGET_X86_) || defined(_TARGET_AMD64_)
+ pES->m_ppvRetAddrPtr = (void **) (EECodeManager::GetCallerSp(pRDT) - sizeof(void*));
+#else // _TARGET_X86_ || _TARGET_AMD64_
+ PORTABILITY_ASSERT("Platform NYI");
+#endif // _TARGET_???_
}
-#else
+#else // WIN64EXCEPTIONS
// peel off the next frame to expose the return address on the stack
pES->m_FirstPass = FALSE;
action = SWA_CONTINUE;
-#endif // _TARGET_AMD64_ || _TARGET_ARM_ || _TARGET_ARM64_
+#endif // !WIN64EXCEPTIONS
}
#endif // HIJACK_NONINTERRUPTIBLE_THREADS
}
@@ -7113,7 +7114,7 @@ StackWalkAction SWCB_GetExecutionState(CrawlFrame *pCF, VOID *pData)
}
else
{
-#ifdef _TARGET_X86_
+#if defined(_TARGET_X86_) && !defined(WIN64EXCEPTIONS)
// Second pass, looking for the address of the return address so we can
// hijack:
diff --git a/src/vm/vars.cpp b/src/vm/vars.cpp
index 626ca3c9d3..cc1662b618 100644
--- a/src/vm/vars.cpp
+++ b/src/vm/vars.cpp
@@ -151,10 +151,6 @@ OBJECTHANDLE g_pPreallocatedThreadAbortException;
OBJECTHANDLE g_pPreallocatedSentinelObject;
OBJECTHANDLE g_pPreallocatedBaseException;
-#ifdef FEATURE_CAS_POLICY
-CertificateCache *g_pCertificateCache = NULL;
-#endif
-
//
//
// Global System Info
@@ -241,7 +237,6 @@ GVAL_IMPL(SIZE_T, g_runtimeVirtualSize);
#ifndef DACCESS_COMPILE
Volatile<LONG> g_fForbidEnterEE = false;
-bool g_fFinalizerRunOnShutDown = false;
bool g_fManagedAttach = false;
bool g_fNoExceptions = false;
#ifdef FEATURE_COMINTEROP
diff --git a/src/vm/vars.hpp b/src/vm/vars.hpp
index 62d6656eaf..cad41d7442 100644
--- a/src/vm/vars.hpp
+++ b/src/vm/vars.hpp
@@ -73,10 +73,6 @@ typedef unsigned short wchar_t;
#include "eeprofinterfaces.h"
#include "eehash.h"
-#ifdef FEATURE_CAS_POLICY
-#include "certificatecache.h"
-#endif
-
#include "profilepriv.h"
class ClassLoader;
@@ -493,10 +489,6 @@ typedef DPTR(RCWCleanupList) PTR_RCWCleanupList;
GPTR_DECL(RCWCleanupList,g_pRCWCleanupList);
#endif // FEATURE_COMINTEROP
-#ifdef FEATURE_CAS_POLICY
-EXTERN CertificateCache *g_pCertificateCache;
-#endif
-
#ifdef FEATURE_IPCMAN
// support for IPCManager
typedef DPTR(IPCWriterInterface) PTR_IPCWriterInterface;
@@ -592,7 +584,6 @@ EXTERN BOOL g_fSuspendOnShutdown;
EXTERN BOOL g_fSuspendFinalizerOnShutdown;
#endif // DACCESS_COMPILE
EXTERN Volatile<LONG> g_fForbidEnterEE;
-EXTERN bool g_fFinalizerRunOnShutDown;
GVAL_DECL(bool, g_fProcessDetach);
EXTERN bool g_fManagedAttach;
EXTERN bool g_fNoExceptions;
diff --git a/src/vm/vm.settings b/src/vm/vm.settings
deleted file mode 100644
index 83d7d9f72e..0000000000
--- a/src/vm/vm.settings
+++ /dev/null
@@ -1,79 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <PropertyGroup>
- <!-- Work around problems with loading System.Private.CoreLib.dll, -->
- <!-- caused by inconsistent setting of UseLegacyCompiler and FeatureSpanOfT -->
- <!-- between System.Private.CoreLib.dll and the runtime. -->
- <UseLegacyCompiler>true</UseLegacyCompiler>
- </PropertyGroup>
-
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\debug\SetDebugTargetLocal.props" />
-
- <PropertyGroup>
-
- <ClWarningLevel Condition="'$(BuildArchitecture)'=='i386'">4</ClWarningLevel>
-
- <UserIncludes>
- $(ClrSrcDirectory)\vm;
- $(ClrSrcDirectory)\vm\$(TargetCpu);
- $(IntermediateOutputDirectory);
- $(ClrSrcDirectory)\ceegen\inc;
- $(ClrSrcDirectory)\classlibnative\inc;
- $(ClrSrcDirectory)\md\inc;
- $(ClrSrcDirectory)\xmlparser;
- $(ClrSrcDirectory)\fusion\inc;
- $(ClrSrcDirectory)\classlibnative\bcltype;
- $(ClrSrcDirectory)\classlibnative\cryptography;
- $(ClrSrcDirectory)\classlibnative\remoting;
- $(VCToolsIncPath);
- $(UserIncludes);
- $(ClrSrcDirectory)\debug\inc\$(TargetCpu);
- $(ClrSrcDirectory)\debug\inc\dump;
- $(ClrSrcDirectory)\zap;
- $(ClrSrcDirectory)\strongname\inc;
- $(ClrSrcDirectory)\TraceLog;
- $(ClrSrcDirectory)\gc
- </UserIncludes>
-
- <UserAssemble386IncludePath>$(UserIncludes)</UserAssemble386IncludePath>
- <UserAssembleAmd64IncludePath>$(UserIncludes)</UserAssembleAmd64IncludePath>
- <UserAssembleArmIncludePath>$(UserIncludes)</UserAssembleArmIncludePath>
-
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
-
- <ClDefines>$(ClDefines);UNICODE;_UNICODE</ClDefines>
-
- <ClDefines Condition="'$(DebugBuild)' == 'true'">$(ClDefines);WRITE_BARRIER_CHECK=1;</ClDefines>
- <ClDefines>$(ClDefines);FEATURE_LEAVE_RUNTIME_HOLDER=1;</ClDefines>
-
- <AsmDefines Condition="'$(DebugBuild)' == 'true'">WRITE_BARRIER_CHECK=1</AsmDefines>
-
- <ClAdditionalOptions Condition="'$(LibLinkTimeCodeGeneration)' == 'true'">$(ClAdditionalOptions) -wd4702</ClAdditionalOptions>
- <ClWarningsDisabledUnderPogoAndLtcg>$(ClWarningsDisabledUnderPogoAndLtcg);4702</ClWarningsDisabledUnderPogoAndLtcg>
- <LinkWarningsDisabledUnderPogo>$(LinkWarningsDisabledUnderPogo);4702</LinkWarningsDisabledUnderPogo>
-
- <ClDefines Condition="'$(PerfcountersSupportedBuild)' == 'true'">$(ClDefines);ENABLE_PERF_COUNTERS;</ClDefines>
- <PCHHeader>common.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>$(ClrSrcDirectory)\vm\common.cpp</PCHCompile>
-
- <VmSourcesDir>$(ClrSrcDirectory)\vm</VmSourcesDir>
- <Amd64SourcesDir>$(ClrSrcDirectory)\vm\amd64</Amd64SourcesDir>
- <I386SourcesDir>$(ClrSrcDirectory)\vm\i386</I386SourcesDir>
- <ArmSourcesDir>$(ClrSrcDirectory)\vm\arm</ArmSourcesDir>
- <Arm64SourcesDir>$(ClrSrcDirectory)\vm\arm64</Arm64SourcesDir>
-
- <AsmDefines>$(AsmDefines);$(CDefines)</AsmDefines>
- <Assemble386MasmCompatible>true</Assemble386MasmCompatible>
- </PropertyGroup>
-
-
- <ItemGroup>
- <ProjectReference Include="$(ClrSrcDirectory)inc\corguids.nativeproj" />
- <ProjectReference Include="$(ClrSrcDirectory)dlls\shim\mscoreei.nativeproj" Condition="'$(FeatureCoreclr)' != 'true'"/> <!-- For eventmsg.h -->
- </ItemGroup>
-
-</Project>
diff --git a/src/vm/vm.targets b/src/vm/vm.targets
deleted file mode 100644
index ccef8079a7..0000000000
--- a/src/vm/vm.targets
+++ /dev/null
@@ -1,59 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <Import Project="$(Clrbase)\clr.targets" />
-
- <PropertyGroup>
- <Assemble386AssemblerDependsOn>
- $(Assemble386AssemblerDependsOn);
- Generate__asmconstants_inc
- </Assemble386AssemblerDependsOn>
- <AssembleAmd64AssemblerDependsOn>
- $(AssembleAmd64AssemblerDependsOn);
- Generate__asmconstants_inc
- </AssembleAmd64AssemblerDependsOn>
- <AssembleArmAssemblerDependsOn>
- $(AssembleArmAssemblerDependsOn);
- Generate__asmconstants_inc
- </AssembleArmAssemblerDependsOn>
- </PropertyGroup>
-
- <ItemGroup>
- <Clean Condition="'$(AsmSuffix)' == 'asm'" Include="$(IntermediateOutputDirectory)\asmconstants.inc" />
- </ItemGroup>
-
-
- <Target Name="Generate__asmconstants_inc" Condition="'$(AsmSuffix)' == 'asm'" Inputs="$(Clrbase)\src\vm\$(BuildArchitecture)\asmconstants.h" Outputs="$(IntermediateOutputDirectory)\asmconstants.inc">
- <Exec Command="$(PerlCommand) $(Clrbase)\src\vm\h2inc.pl $(Clrbase)\src\vm\$(BuildArchitecture)\asmconstants.h &gt; $(IntermediateOutputDirectory)\asmconstants.tmp" StandardOutputImportance="Normal" />
- <CL
- TrackerLogDirectory="$(IntermediateOutputDirectory)"
- PreprocessorDefinitions="$(CDefines);$(AsmDefines);$(TargetDefines)"
- PreprocessSuppressLineNumbers="true"
- PreprocessToFile="true"
- PreprocessOutputPath="$(IntermediateOutputDirectory)\"
- Sources="$(IntermediateOutputDirectory)\asmconstants.tmp"
- TLogReadFiles="@(ClTLogReadFile)"
- TLogWriteFiles="@(ClTLogWriteFile)"
- ToolExe="$(ClToolExe)"
- ToolPath="$(ClToolPath)"
- TrackFileAccess="$(TrackFileAccess)"
- >
- </CL>
-
- <ItemGroup>
- <Internal_AsmConstantsGenerated Include="$(IntermediateOutputDirectory)\asmconstants.tmp" Condition="Exists('$(IntermediateOutputDirectory)\asmconstants.tmp')"/>
- <AsmConstantsGenerated Include="$(IntermediateOutputDirectory)\asmconstants.i" />
- </ItemGroup>
-
- <Copy
- SourceFiles="@(AsmConstantsGenerated)"
- DestinationFiles="@(AsmConstantsGenerated->'$(IntermediateOutputDirectory)\%(Filename).inc')"
- OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
- Retries="$(CopyRetryCount)"
- RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
- Condition="'@(Internal_AsmConstantsGenerated)' != ''"
- />
-
- </Target>
-
-</Project>
-
diff --git a/src/vm/wks/wks.nativeproj b/src/vm/wks/wks.nativeproj
deleted file mode 100644
index d91655dbd2..0000000000
--- a/src/vm/wks/wks.nativeproj
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\vm\vm.settings" />
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>cee_wks</OutputName>
- </PropertyGroup>
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\vm\wks\wks.targets" />
- <ItemGroup>
- <DataFile Include="$(VmSourcesDir)\mdaboilerplate.exe.mda.config" />
- <DataFile Condition="'$(BuildArchitecture)'=='amd64'" Include="$(Amd64SourcesDir)\CLRErrorReporting.vrg" />
- <DataFile Condition="'$(BuildArchitecture)'=='i386'" Include="$(I386SourcesDir)\CLRErrorReporting.vrg" />
- </ItemGroup>
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\vm\vm.targets" />
-</Project>
diff --git a/src/vm/wks/wks.targets b/src/vm/wks/wks.targets
deleted file mode 100644
index 0df66fe558..0000000000
--- a/src/vm/wks/wks.targets
+++ /dev/null
@@ -1,391 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <PropertyGroup>
- <Win32WinNt>0x0602</Win32WinNt>
- </PropertyGroup>
-
- <ItemGroup>
- <CppCompile Include="$(VmSourcesDir)\class.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AppDomain.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AppDomainHelper.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AppDomainNative.cpp" />
- <CppCompile Include="$(VmSourcesDir)\appdomainstack.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AppXUtil.cpp" Condition="'$(FeatureAppX)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\aptca.cpp" Condition="'$(FeatureAptca)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\array.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Assembly.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AssemblyName.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AssemblyNative.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AssemblySpec.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AssemblySink.cpp" />
- <CppCompile Include="$(VmSourcesDir)\binder.cpp" />
- <CppCompile Include="$(VmSourcesDir)\cachelinealloc.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ceeload.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ceemain.cpp" />
- <CppCompile Include="$(VmSourcesDir)\certificatecache.cpp" />
- <CppCompile Include="$(VmSourcesDir)\classhash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\clrex.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivBinderUtil.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivBinderAppX.cpp" Condition="'$(FeatureAppXBinder)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivBinderFusion.cpp" Condition="'$(FeatureFusion)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivBinderLoadFile.cpp" Condition="'$(FeatureCoreclr)' != 'true'" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivBinderReflectionOnlyWinRT.cpp" Condition="'$(FeatureCoreclr)' != 'true'" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivBinderWinRT.cpp" Condition="'$(FeatureCominterop)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivTypeCacheWinRT.cpp" Condition="'$(FeatureCominterop)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\CLRPrivTypeCacheReflectionOnlyWinRT.cpp" Condition="'$(FeatureCoreclr)' != 'true'" />
- <CppCompile Include="$(VmSourcesDir)\clsload.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CLRVarArgs.cpp" />
- <CppCompile Include="$(VmSourcesDir)\codeman.cpp" />
- <CppCompile Include="$(VmSourcesDir)\compile.cpp" Condition="'$(FeatureNativeImageGeneration)'=='true'" />
- <CppCompile Include="$(VmSourcesDir)\ConfigHelper.cpp" Condition="'$(FeatureCoreclr)' != 'true'" />
- <CppCompile Include="$(VmSourcesDir)\ConstrainedExecutionRegion.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMDateTime.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMDelegate.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMDynamic.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMIsolatedStorage.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMMemoryFailPoint.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMMethodRental.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Domainfile.cpp" />
- <CppCompile Include="$(VmSourcesDir)\testhookmgr.cpp" />
- <CppCompile Include="$(VmSourcesDir)\BaseAssemblySpec.cpp" />
- <CppCompile Include="$(VmSourcesDir)\corebindresult.cpp" />
- <CppCompile Include="$(VmSourcesDir)\coreassemblyspec.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMDependentHandle.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMModule.cpp" />
- <CppCompile Include="$(VmSourcesDir)\MarshalNative.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CompatibilitySwitch.cpp"/>
- <CppCompile Include="$(VmSourcesDir)\COMSynchronizable.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMThreadPool.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMUtilNative.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMWaitHandle.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CorHost.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CustomMarshalerInfo.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CrossDomainCalls.cpp" />
- <CppCompile Include="$(VmSourcesDir)\callhelpers.cpp" />
- <CppCompile Include="$(VmSourcesDir)\crst.cpp" />
- <CppCompile Include="$(VmSourcesDir)\contexts.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CustomAttribute.cpp" />
- <CppCompile Include="$(VmSourcesDir)\dataimage.cpp" Condition="'$(FeatureNativeImageGeneration)'=='true'"/>
- <CppCompile Include="$(VmSourcesDir)\debugHelp.cpp" />
- <CppCompile Include="$(VmSourcesDir)\decodeMD.cpp" />
- <CppCompile Include="$(VmSourcesDir)\DebugDebugger.cpp" />
- <CppCompile Include="$(VmSourcesDir)\DebugInfoStore.cpp" />
- <CppCompile Include="$(VmSourcesDir)\disassembler.cpp" />
- <CppCompile Include="$(VmSourcesDir)\DynamicMethod.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ecall.cpp" />
- <CppCompile Include="$(VmSourcesDir)\eeconfig.cpp" />
- <CppCompile Include="$(VmSourcesDir)\AssemblyNamesConfigFactory.cpp" Condition="'$(FeatureCoreclr)' != 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\ngenoptout.cpp" Condition="'$(FeatureCoreclr)' != 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\eeconfigfactory.cpp" Condition="'$(FeatureCoreclr)' != 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\eecontract.cpp" />
- <CppCompile Include="$(VmSourcesDir)\eedbginterfaceimpl.cpp" />
- <CppCompile Include="$(VmSourcesDir)\eehash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\EEMessageBox.cpp" />
- <CppCompile Include="$(VmSourcesDir)\EEPolicy.cpp" />
- <CppCompile Include="$(VmSourcesDir)\EEToProfInterfaceImpl.cpp" />
- <CppCompile Include="$(VmSourcesDir)\EETwain.cpp" />
- <CppCompile Include="$(VmSourcesDir)\eventreporter.cpp" />
- <CppCompile Include="$(VmSourcesDir)\EventStore.cpp" />
- <CppCompile Include="$(VmSourcesDir)\eventtrace.cpp" />
- <CppCompile Include="$(VmSourcesDir)\excep.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ExState.cpp" />
- <CppCompile Include="$(VmSourcesDir)\fcall.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Field.cpp" />
- <CppCompile Include="$(VmSourcesDir)\finalizerthread.cpp" />
- <CppCompile Include="$(VmSourcesDir)\formattype.cpp" />
- <CppCompile Include="$(VmSourcesDir)\fptrstubs.cpp" />
- <CppCompile Include="$(VmSourcesDir)\frames.cpp" />
- <CppCompile Include="$(VmSourcesDir)\FrameworkExceptionLoader.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ThreadPoolRequest.cpp" />
- <CppCompile Include="$(VmSourcesDir)\TypeEquivalenceHash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\fusioninit.cpp" Condition="'$(FeatureFusion)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\FusionSink.cpp" Condition="'$(FeatureFusion)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\FusionBind.cpp" Condition="'$(FeatureFusion)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\GCDecode.cpp" />
- <CppCompile Include="$(VmSourcesDir)\gcenv.ee.cpp" />
- <CppCompile Include="$(VmSourcesDir)\gcenv.os.cpp" />
- <CppCompile Include="$(VmSourcesDir)\gchelpers.cpp" />
- <CppCompile Include="$(VmSourcesDir)\gchost.cpp" />
- <CppCompile Include="$(VmSourcesDir)\gcheaputilities.cpp" />
- <CppCompile Include="$(VmSourcesDir)\genericdict.cpp" />
- <CppCompile Include="$(VmSourcesDir)\generics.cpp" />
- <CppCompile Include="$(VmSourcesDir)\genmeth.cpp" />
- <CppCompile Include="$(VmSourcesDir)\hash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\hillclimbing.cpp" />
- <CppCompile Include="$(VmSourcesDir)\hosting.cpp" />
- <CppCompile Include="$(VmSourcesDir)\HostExecutionContext.cpp" />
- <CppCompile Include="$(VmSourcesDir)\IBCLogger.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ILMarshalers.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ILStubCache.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ILStubResolver.cpp" />
- <CppCompile Include="$(VmSourcesDir)\instmethhash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\InteropConverter.cpp" />
- <CppCompile Include="$(VmSourcesDir)\interoputil.cpp" />
- <CppCompile Include="$(VmSourcesDir)\interpreter.cpp" />
- <CppCompile Include="$(VmSourcesDir)\inlinetracking.cpp" />
- <CppCompile Include="$(VmSourcesDir)\WinRTTypeNameConverter.cpp" />
- <CppCompile Include="$(VmSourcesDir)\InvokeUtil.cpp" />
- <CppCompile Include="$(VmSourcesDir)\contractImpl.cpp" />
- <CppCompile Include="$(VmSourcesDir)\jithelpers.cpp" />
- <CppCompile Include="$(VmSourcesDir)\JITInterface.cpp" />
- <CppCompile Include="$(VmSourcesDir)\LoaderAllocator.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ListLock.cpp" />
- <CppCompile Include="$(VmSourcesDir)\marvin32.cpp" Condition="'$(FeatureRandomizedStringHashing)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\memberload.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ManagedMdImport.cpp" />
- <CppCompile Include="$(VmSourcesDir)\message.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Method.cpp" />
- <CppCompile Include="$(VmSourcesDir)\MethodIter.cpp" />
- <CppCompile Include="$(VmSourcesDir)\MethodImpl.cpp" />
- <CppCompile Include="$(VmSourcesDir)\MethodTable.cpp" />
- <CppCompile Include="$(VmSourcesDir)\methodtablebuilder.cpp" />
- <CppCompile Include="$(VmSourcesDir)\mixedmode.cpp" Condition="'$(FeatureMixedMode)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\mscorlib.cpp">
- <DisablePrecompiledHeaders>true</DisablePrecompiledHeaders>
- </CppCompile>
- <CppCompile Include="$(VmSourcesDir)\stubcache.cpp" />
- <CppCompile Include="$(VmSourcesDir)\mlinfo.cpp" />
- <CppCompile Include="$(VmSourcesDir)\NativeOverlapped.cpp" />
- <CppCompile Include="$(VmSourcesDir)\NewCompressedStack.cpp" Condition="'$(FeatureCompressedstack)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\DllImport.cpp" />
- <CppCompile Include="$(VmSourcesDir)\DllImportCallback.cpp" />
- <CppCompile Include="$(VmSourcesDir)\FieldMarshaler.cpp" />
- <CppCompile Include="$(VmSourcesDir)\object.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ObjectClone.cpp" Condition="'$(FeatureRemoting)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\ObjectList.cpp" />
- <CppCompile Include="$(VmSourcesDir)\OleVariant.cpp" />
- <CppCompile Include="$(VmSourcesDir)\PEFile.cpp" />
- <CppCompile Include="$(VmSourcesDir)\PEFingerprint.cpp" />
- <CppCompile Include="$(VmSourcesDir)\PEImage.cpp" />
- <CppCompile Include="$(VmSourcesDir)\PEImageLayout.cpp" />
- <CppCompile Include="$(VmSourcesDir)\pendingload.cpp" />
- <CppCompile Include="$(VmSourcesDir)\PerfDefaults.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Prestub.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Precode.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ProfilerMetadataEmitValidator.cpp"/>
- <CppCompile Include="$(VmSourcesDir)\MulticoreJIT.cpp" Condition="'$(FeatureMulticoreJIT)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\MulticoreJITPlayer.cpp" Condition="'$(FeatureMulticoreJIT)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\ProfilingEnumerators.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ProfilingHelper.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ProfToEEInterfaceImpl.cpp" />
- <CppCompile Include="$(VmSourcesDir)\QCall.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ReadyToRunInfo.cpp" Condition="'$(FeatureReadyToRun)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\ReflectClassWriter.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ReflectionInvocation.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ReJit.cpp" />
- <CppCompile Include="$(VmSourcesDir)\remoting.cpp" Condition="'$(FeatureRemoting)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\RtlFunctions.cpp" />
- <CppCompile Include="$(VmSourcesDir)\RuntimeHandles.cpp" />
- <CppCompile Include="$(VmSourcesDir)\rwlock.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SafeHandle.cpp" />
- <CppCompile Include="$(VmSourcesDir)\security.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityAttributes.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityConfig.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDeclarative.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDeclarativeCache.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDescriptor.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityHostProtection.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDescriptorAppdomain.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityDescriptorAssembly.cpp" />
- <CppCompile Include="$(VmSourcesDir)\securitymeta.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityImperative.cpp" Condition="'$(FeatureCoreclr)' != 'true'" />
- <CppCompile Include="$(VmSourcesDir)\SecurityPolicy.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityStackWalk.cpp" Condition="'$(FeatureCasPolicy)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\SecurityTransparentAssembly.cpp" />
- <CppCompile Include="$(VmSourcesDir)\siginfo.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SigFormat.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SimpleRWLock.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SourceLine.cpp" />
- <CppCompile Include="$(VmSourcesDir)\spinlock.cpp" />
- <CppCompile Include="$(VmSourcesDir)\StackingAllocator.cpp" />
- <CppCompile Include="$(VmSourcesDir)\stacksampler.cpp" />
- <CppCompile Include="$(VmSourcesDir)\stackwalk.cpp" />
- <CppCompile Include="$(VmSourcesDir)\StackBuilderSink.cpp" Condition="'$(FeatureRemoting)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\StackCompressor.cpp" Condition="'$(FeatureCompressedstack)' == 'true'" />
- <CppCompile Include="$(VmSourcesDir)\stublink.cpp" />
- <CppCompile Include="$(VmSourcesDir)\StringLiteralMap.cpp" />
- <CppCompile Include="$(VmSourcesDir)\stubmgr.cpp" />
- <CppCompile Include="$(VmSourcesDir)\stubgen.cpp" />
- <CppCompile Include="$(VmSourcesDir)\stubhelpers.cpp" />
- <CppCompile Include="$(VmSourcesDir)\syncblk.cpp" />
- <CppCompile Include="$(VmSourcesDir)\synch.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SyncClean.cpp" />
- <CppCompile Include="$(VmSourcesDir)\synchronizationcontextnative.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ThreadDebugBlockingInfo.cpp" />
- <CppCompile Include="$(VmSourcesDir)\threads.cpp" />
- <CppCompile Include="$(VmSourcesDir)\threadsuspend.cpp" />
- <CppCompile Include="$(VmSourcesDir)\threadstatics.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typectxt.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typedesc.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typehandle.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typehash.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typeparse.cpp" />
- <CppCompile Include="$(VmSourcesDir)\typestring.cpp" />
- <CppCompile Include="$(VmSourcesDir)\umthunkhash.cpp" Condition="'$(FeatureMixedMode)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\util.cpp" />
- <CppCompile Include="$(VmSourcesDir)\validator.cpp" Condition="'$(FeatureCoreclr)' != 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\vars.cpp" />
- <CppCompile Include="$(VmSourcesDir)\verifier.cpp" />
- <CppCompile Include="$(VmSourcesDir)\versionresilienthashcode.cpp" />
- <CppCompile Include="$(VmSourcesDir)\VirtualCallStub.cpp" />
- <CppCompile Include="$(VmSourcesDir)\WeakReferenceNative.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Win32Threadpool.cpp" />
- <CppCompile Include="$(VmSourcesDir)\zapsig.cpp" />
- </ItemGroup>
-
- <ItemGroup>
- <CppCompile Include="$(ClrSrcDirectory)\gc\gccommon.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gcEEsvr.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gcEEwks.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gcsvr.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gcwks.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\gcscan.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\handletable.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\handletableCache.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\handletableCore.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\handletableScan.cpp" />
- <CppCompile Include="$(ClrSrcDirectory)\gc\objecthandle.cpp" />
- </ItemGroup>
-
- <!-- SOURCES_NONPAL -->
- <ItemGroup>
- <CppCompile Include="$(VmSourcesDir)\AssemblyNativeResource.cpp" />
- <CppCompile Include="$(VmSourcesDir)\coverage.cpp" />
- <CppCompile Include="$(VmSourcesDir)\dwreport.cpp" />
- <CppCompile Include="$(VmSourcesDir)\EnCEE.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ExceptionHandling.cpp" />
- <CppCompile Include="$(VmSourcesDir)\gcCover.cpp" />
- <CppCompile Include="$(VmSourcesDir)\GcInfoDecoder.cpp" />
- <CppCompile Include="$(VmSourcesDir)\mda.cpp" Condition="'$(FeatureMdaSupported)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\mdaassistants.cpp" Condition="'$(FeatureMdaSupported)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\mdadac.cpp" Condition="'$(FeatureMdaSupported)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\ProfAttach.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ProfAttachClient.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ProfAttachServer.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ProfDetach.cpp" />
- <CppCompile Include="$(VmSourcesDir)\SecurityPrincipal.cpp" />
- <CppCompile Include="$(VmSourcesDir)\Crypto\SHA1.cpp" Condition="'$(FeatureCoreclr)' != 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\SHA1.cpp" Condition="'$(FeatureCoreclr)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\StackProbe.cpp" Condition="'$(FeatureStackProbe)' == 'true'" />
- </ItemGroup>
- <ItemGroup Condition="'$(FeatureCominterop)' == 'true'">
- <CppCompile Include="$(VmSourcesDir)\classcompat.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ClassFactory.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ComCache.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMtoCLRCall.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ComCallableWrapper.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ComConnectionPoints.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMInterfaceMarshaler.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ComMTMemberInfoMap.cpp" />
- <CppCompile Include="$(VmSourcesDir)\CLRtoCOMCall.cpp" />
- <CppCompile Include="$(VmSourcesDir)\RuntimeCallableWrapper.cpp" />
- <CppCompile Include="$(VmSourcesDir)\COMTypeLibConverter.cpp" Condition="'$(FeatureCominteropTlbSupport)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\DispatchInfo.cpp" />
- <CppCompile Include="$(VmSourcesDir)\DispParamMarshaler.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ExtensibleClassFactory.cpp" />
- <CppCompile Include="$(VmSourcesDir)\mngstdinterfaces.cpp" />
- <CCompile Include="$(VmSourcesDir)\Microsoft.ComServices_i.c" />
- <CppCompile Include="$(VmSourcesDir)\NotifyExternals.cpp" />
- <CppCompile Include="$(VmSourcesDir)\OleContextHelpers.cpp" />
- <CppCompile Include="$(VmSourcesDir)\stdinterfaces.cpp" />
- <CppCompile Include="$(VmSourcesDir)\stdinterfaces_wrapper.cpp" />
- <CppCompile Include="$(VmSourcesDir)\tlbexport.cpp" Condition="'$(FeatureCominteropTlbSupport)' == 'true'"/>
- <CppCompile Include="$(VmSourcesDir)\rcwwalker.cpp" />
- <CppCompile Include="$(VmSourcesDir)\rcwrefcache.cpp" />
- <CppCompile Include="$(VmSourcesDir)\WinRtHelpers.cpp" />
- </ItemGroup>
- <!-- AMD64_SOURCES -->
- <ItemGroup Condition="'$(BuildArchitecture)' == 'amd64'">
- <CppCompile Include="$(Amd64SourcesDir)\cGenAMD64.cpp" />
- <CppCompile Include="$(Amd64SourcesDir)\ExcepAMD64.cpp" />
- <CppCompile Include="$(Amd64SourcesDir)\gmsAMD64.cpp" />
- <CppCompile Include="$(Amd64SourcesDir)\JitHelpersAMD64.cpp" />
- <CppCompile Include="$(Amd64SourcesDir)\JITinterfaceAMD64.cpp" />
- <CppCompile Include="$(Amd64SourcesDir)\Profiler.cpp" />
- <CppCompile Include="$(Amd64SourcesDir)\RemotingAMD64.cpp" Condition="'$(FeatureRemoting)' == 'true'" />
- <CppCompile Include="$(Amd64SourcesDir)\StubLinkerAMD64.cpp" />
- <CppCompile Include="$(VmSourcesDir)\JITinterfaceGen.cpp" />
- </ItemGroup>
- <ItemGroup Condition="'$(BuildArchitecture)' == 'amd64'">
- <AssembleAmd64 Include="$(Amd64SourcesDir)\AsmHelpers.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\CallDescrWorkerAMD64.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\ComCallPreStub.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\CrtHelpers.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\GenericComCallStubs.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\GenericComPlusCallStubs.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\getstate.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\InstantiatingStub.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\JitHelpers_Fast.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\JitHelpers_FastWriteBarriers.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\JitHelpers_InlineGetAppDomain.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\JitHelpers_InlineGetThread.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\JitHelpers_Slow.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\PInvokeStubs.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\RedirectedHandledJITCase.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\RemotingThunksAMD64.asm" Condition="'$(FeatureRemoting)' == 'true'" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\ThePreStubAMD64.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\ExternalMethodFixupThunk.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\TlsGetters.asm" Condition="'$(FeatureImplicitTls)' != 'true'" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\UMThunkStub.asm" />
- <AssembleAmd64 Include="$(Amd64SourcesDir)\VirtualCallStubAMD64.asm" />
- </ItemGroup>
- <!-- I386_SOURCES -->
- <ItemGroup Condition="'$(BuildArchitecture)' == 'i386'">
- <CppCompile Include="$(I386SourcesDir)\cgenx86.cpp" />
- <CppCompile Include="$(I386SourcesDir)\ExcepX86.cpp" />
- <CppCompile Include="$(I386SourcesDir)\gmsx86.cpp" />
- <CppCompile Include="$(I386SourcesDir)\JITinterfaceX86.cpp" />
- <CppCompile Include="$(I386SourcesDir)\Profiler.cpp" />
- <CppCompile Include="$(I386SourcesDir)\remotingx86.cpp" Condition="'$(FeatureRemoting)' == 'true'" />
- <CppCompile Include="$(I386SourcesDir)\StubLinkerX86.cpp" />
- <CppCompile Include="$(VmSourcesDir)\ExInfo.cpp" />
- </ItemGroup>
- <ItemGroup Condition="'$(BuildArchitecture)' == 'i386'">
- <Assemble386 Include="$(I386SourcesDir)\asmhelpers.asm" />
- <Assemble386 Include="$(I386SourcesDir)\fptext.asm" />
- <Assemble386 Include="$(I386SourcesDir)\gmsasm.asm" />
- <Assemble386 Include="$(I386SourcesDir)\jithelp.asm" />
- <Assemble386 Include="$(I386SourcesDir)\RedirectedHandledJITCase.asm" />
- </ItemGroup>
- <!-- ARM_SOURCES -->
- <ItemGroup Condition="'$(BuildArchitecture)' == 'arm'">
- <CppCompile Include="$(ArmSourcesDir)\stubs.cpp" />
- <CppCompile Include="$(ArmSourcesDir)\ExcepArm.cpp" />
- <CppCompile Include="$(ArmSourcesDir)\ArmSingleStepper.cpp" />
- <CppCompile Include="$(ArmSourcesDir)\JitHelpersARM.cpp" />
- <CppCompile Include="$(ArmSourcesDir)\profiler.cpp" />
- </ItemGroup>
- <ItemGroup Condition="'$(BuildArchitecture)' == 'arm'">
- <PreprocessAssembleArm Include="$(ArmSourcesDir)\asmhelpers.asm" />
- <PreprocessAssembleArm Include="$(ArmSourcesDir)\crthelpers.asm" />
- <PreprocessAssembleArm Include="$(ArmSourcesDir)\ehhelpers.asm" />
- <PreprocessAssembleArm Include="$(ArmSourcesDir)\pinvokestubs.asm" />
- <PreprocessAssembleArm Include="$(ArmSourcesDir)\memcpy.asm" />
- <PreprocessAssembleArm Include="$(ArmSourcesDir)\patchedcode.asm" />
- <AssembleArm Include="$(IntermediateOutputDirectory)\asmhelpers.i" />
- <AssembleArm Include="$(IntermediateOutputDirectory)\crthelpers.i" />
- <AssembleArm Include="$(IntermediateOutputDirectory)\ehhelpers.i" />
- <AssembleArm Include="$(IntermediateOutputDirectory)\pinvokestubs.i" />
- <AssembleArm Include="$(IntermediateOutputDirectory)\memcpy.i" />
- <AssembleArm Include="$(IntermediateOutputDirectory)\patchedcode.i" />
- </ItemGroup>
- <!-- ARM64_SOURCES -->
- <ItemGroup Condition="'$(BuildArchitecture)' == 'arm64'">
- <CppCompile Include="$(Arm64SourcesDir)\stubs.cpp" />
- <CppCompile Include="$(Arm64SourcesDir)\cGenArm64.cpp" />
- </ItemGroup>
- <ItemGroup Condition="'$(BuildArchitecture)' == 'arm64'">
- <PreprocessAssembleArm Include="$(Arm64SourcesDir)\CallDescrWorkerARM64.asm" />
- <PreprocessAssembleArm Include="$(Arm64SourcesDir)\asmHelpers.asm" />
- <PreprocessAssembleArm Include="$(Arm64SourcesDir)\PInvokeStubs.asm" />
- <PreprocessAssembleArm Include="$(Arm64SourcesDir)\crtHelpers.asm" />
- <AssembleArm64 Include="$(IntermediateOutputDirectory)\CallDescrWorkerARM64.i" />
- <AssembleArm64 Include="$(IntermediateOutputDirectory)\asmHelpers.i" />
- <AssembleArm64 Include="$(IntermediateOutputDirectory)\PInvokeStubs.i" />
- <AssembleArm64 Include="$(IntermediateOutputDirectory)\crtHelpers.i" />
- </ItemGroup>
- <ItemGroup>
- <CppCompile Condition="'$(FeatureTraceLogging)' == 'true'" Include="$(VmSourcesDir)\clrtracelogging.cpp" />
- </ItemGroup>
-</Project>
diff --git a/src/zap/common.h b/src/zap/common.h
index 95655fd9b8..b3db657f87 100644
--- a/src/zap/common.h
+++ b/src/zap/common.h
@@ -21,11 +21,11 @@
#include <float.h>
#include <limits.h>
-#if !defined(_TARGET_X86_)
+#if !defined(_TARGET_X86_) || defined(FEATURE_PAL)
#ifndef WIN64EXCEPTIONS
#define WIN64EXCEPTIONS
#endif
-#endif // !_TARGET_X86_
+#endif // !_TARGET_X86_ || FEATURE_PAL
#include "utilcode.h"
#include "corjit.h"
diff --git a/src/zap/crossgen/zap_crossgen.nativeproj b/src/zap/crossgen/zap_crossgen.nativeproj
deleted file mode 100644
index 673a55b0b5..0000000000
--- a/src/zap/crossgen/zap_crossgen.nativeproj
+++ /dev/null
@@ -1,12 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\xplat\SetCrossGen.props" />
- <PropertyGroup>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>corzap_crossgen</OutputName>
- </PropertyGroup>
-
- <!-- compile items -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\zap\zap.settings.targets" />
-
-</Project>
diff --git a/src/zap/dirs.proj b/src/zap/dirs.proj
deleted file mode 100644
index d4eb62a7ca..0000000000
--- a/src/zap/dirs.proj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <PropertyGroup>
- <BuildInPhase1>true</BuildInPhase1>
- <BuildInPhaseDefault>false</BuildInPhaseDefault>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- </PropertyGroup>
-
- <!--The following projects will build during PHASE 1-->
- <ItemGroup Condition="'$(BuildExePhase)' == '1'">
- <ProjectFile Include="wks\zap.nativeproj" />
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" />
-</Project>
diff --git a/src/zap/wks/zap.nativeproj b/src/zap/wks/zap.nativeproj
deleted file mode 100644
index 44d6b435b7..0000000000
--- a/src/zap/wks/zap.nativeproj
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Label="Globals">
- <SccProjectName>SAK</SccProjectName>
- <SccAuxPath>SAK</SccAuxPath>
- <SccLocalPath>SAK</SccLocalPath>
- <SccProvider>SAK</SccProvider>
- </PropertyGroup>
- <PropertyGroup>
- <BuildCoreBinaries>true</BuildCoreBinaries>
- <BuildSysBinaries>true</BuildSysBinaries>
- <OutputName>corzap</OutputName>
- </PropertyGroup>
- <!-- compile items -->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\zap\zap.settings.targets" />
-</Project>
diff --git a/src/zap/zap.settings.targets b/src/zap/zap.settings.targets
deleted file mode 100644
index eb84c3f9fe..0000000000
--- a/src/zap/zap.settings.targets
+++ /dev/null
@@ -1,52 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood">
- <!--*****************************************************-->
- <!--This MSBuild project file was automatically generated-->
- <!--from the original SOURCES/DIRS file by the KBC tool.-->
- <!--*****************************************************-->
- <!--Import the settings-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
-
- <ItemGroup>
- <ProjectReference Include="$(ClrSrcDirectory)inc\corguids.nativeproj"/>
- <ProjectReference Include="$(ClrSrcDirectory)dlls\shim\mscoreei.nativeproj" Condition="'$(FeatureCoreclr)' != 'true'"/> <!-- For eventmsg.h -->
- </ItemGroup>
- <!--Leaf project Properties-->
- <PropertyGroup>
- <ZapSrcDirectory>$(ClrSrcDirectory)\zap</ZapSrcDirectory>
- <UserIncludes>$(Clrbase)\src\dlls\mscorrc;
- $(UserIncludes);
- $(VCToolsIncPath);
- $(Clrbase)\src\vm;
- $(Clrbase)\src\zap;
- $(Clrbase)\src\strongname\inc;</UserIncludes>
- <ClAdditionalOptions>$(ClAdditionalOptions) -DUNICODE -D_UNICODE</ClAdditionalOptions>
- <OutputPath>$(ClrLibDest)</OutputPath>
- <TargetType>LIBRARY</TargetType>
- <PCHHeader>common.h</PCHHeader>
- <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders>
- <PCHCompile>$(ZapSrcDirectory)\common.cpp</PCHCompile>
- <PCHObject>common.obj</PCHObject>
- <PCHOutput>common.pch</PCHOutput>
- </PropertyGroup>
- <!--Leaf Project Items-->
- <ItemGroup>
- <CppCompile Include="$(ZapSrcDirectory)\svcworker.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapper.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zaprelocs.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapcode.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapheaders.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapimage.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapinfo.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapimport.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapinnerptr.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapmetadata.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapwriter.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapwrapper.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapperstats.cpp" />
- <CppCompile Include="$(ZapSrcDirectory)\zapreadytorun.cpp" Condition="'$(FeatureReadyToRunCompiler)'=='true'"/>
- <CppCompile Include="$(ZapSrcDirectory)\nativeformatwriter.cpp" Condition="'$(FeatureReadyToRunCompiler)'=='true'"/>
- </ItemGroup>
-
- <!--Import the targets-->
- <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" />
-</Project>
diff --git a/src/zap/zapcode.cpp b/src/zap/zapcode.cpp
index 167c0ed912..e54e884bc2 100644
--- a/src/zap/zapcode.cpp
+++ b/src/zap/zapcode.cpp
@@ -1130,7 +1130,7 @@ void ZapUnwindInfo::Save(ZapWriter * pZapWriter)
pZapWriter->Write(&runtimeFunction, sizeof(runtimeFunction));
}
-#if defined(WIN64EXCEPTIONS) && !defined(_TARGET_X86_)
+#if defined(WIN64EXCEPTIONS)
// Compare the unwind infos by their offset
int __cdecl ZapUnwindInfo::CompareUnwindInfo(const void* a_, const void* b_)
{
diff --git a/src/zap/zapimport.cpp b/src/zap/zapimport.cpp
index 47d0def2c1..3e4e45d0c7 100644
--- a/src/zap/zapimport.cpp
+++ b/src/zap/zapimport.cpp
@@ -351,7 +351,7 @@ ZapGenericSignature * ZapImportTable::GetGenericSignature(PVOID signature, BOOL
// At ngen time Zapper::CompileModule PlaceFixups called from
// code:ZapSig.GetSignatureForTypeHandle
//
-/*static*/ DWORD __stdcall ZapImportTable::EncodeModuleHelper( LPVOID compileContext,
+/*static*/ DWORD ZapImportTable::EncodeModuleHelper( LPVOID compileContext,
CORINFO_MODULE_HANDLE referencedModule)
{
ZapImportTable * pTable = (ZapImportTable *)compileContext;
diff --git a/src/zap/zapimport.h b/src/zap/zapimport.h
index 34a673ecf5..3ab9a2734e 100644
--- a/src/zap/zapimport.h
+++ b/src/zap/zapimport.h
@@ -301,7 +301,7 @@ class ZapImportTable : public ZapNode
ModuleReferenceEntry * GetModuleReference(CORINFO_MODULE_HANDLE handle);
- static DWORD __stdcall EncodeModuleHelper(LPVOID referencingModule, CORINFO_MODULE_HANDLE referencedModule);
+ static DWORD EncodeModuleHelper(LPVOID referencingModule, CORINFO_MODULE_HANDLE referencedModule);
ImportTable m_imports; // Interned ZapImport *
SHash< NoRemoveSHashTraits < ZapBlob::SHashTraits > > m_blobs; // Interned ZapBlos for signatures and fixups
diff --git a/sync.cmd b/sync.cmd
index 094d0c1a71..f63315559d 100644
--- a/sync.cmd
+++ b/sync.cmd
@@ -7,7 +7,6 @@ if /I [%1] == [-help] goto Usage
@if [%1]==[] set __args=-p
@call %~dp0run.cmd sync %__args% %*
- @call %~dp0run.cmd sync -PublishTestNativeBins %__args% %*
@exit /b %ERRORLEVEL%
:Usage
@@ -27,6 +26,13 @@ echo -BuildMajor
echo -BuildMinor
echo To download from a specific container, specify:
echo -Container="container name"
+echo -n - Downloads test native binaries from the specified container
+echo The following properties are required:
+echo -AzureAccount="Account name"
+echo -AzureToken="Access token"
+echo -Container="Container name"
+echo -RuntimeId="RID" (Needs to match what's in the container)
+echo.
echo.
echo.
echo If no option is specified then sync.cmd -p is implied. \ No newline at end of file
diff --git a/tests/dir.props b/tests/dir.props
index 43026caed2..329e4bcc60 100644
--- a/tests/dir.props
+++ b/tests/dir.props
@@ -33,6 +33,29 @@
<SkipImportILTargets>true</SkipImportILTargets>
</PropertyGroup>
+ <!-- Common properties -->
+ <PropertyGroup>
+ <RootBinDir>$(__RootBinDir)\</RootBinDir>
+ <RootBinDir Condition="'$(__RootBinDir)'==''">$(ProjectDir)bin\</RootBinDir>
+ </PropertyGroup>
+
+<!-- Default Test platform to deploy the netstandard compiled tests to -->
+ <PropertyGroup>
+ <!-- we default TestTFM and FilterToTestTFM to netcoreapp1.0 if they are not explicity defined -->
+ <DefaultTestTFM Condition="'$(DefaultTestTFM)'==''">netcoreapp1.0</DefaultTestTFM>
+ <TestTFM Condition="'$(TestTFM)'==''">$(DefaultTestTFM)</TestTFM>
+ <FilterToTestTFM Condition="'$(FilterToTestTFM)'==''">$(DefaultTestTFM)</FilterToTestTFM>
+ </PropertyGroup>
+
+ <!-- Output paths -->
+ <PropertyGroup>
+ <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)' == ''">$(RootBinDir)obj\</BaseIntermediateOutputPath>
+ <IntermediateOutputPath Condition="'$(IntermediateOutputPath)' == ''">$(BaseIntermediateOutputPath)\$(BuildOS).$(BuildArch).$(BuildType)</IntermediateOutputPath>
+ <OutputPath Condition="'$(OutputPath)' == ''">$(BaseIntermediateOutputPath)\$(BuildOS).$(BuildArch).$(BuildType)</OutputPath>
+ </PropertyGroup>
+
+ <Import Condition="Exists('$(ToolsDir)BuildVersion.targets')" Project="$(ToolsDir)BuildVersion.targets" />
+
<!-- Provides properties for dependency versions and configures dependency verification/auto-upgrade. -->
<Import Project="$(ProjectDir)..\dependencies.props" />
diff --git a/tests/helixprep.proj b/tests/helixprep.proj
new file mode 100644
index 0000000000..ea71dbadae
--- /dev/null
+++ b/tests/helixprep.proj
@@ -0,0 +1,155 @@
+<Project ToolsVersion="12.0" DefaultTargets="ArchiveAll" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+ <UsingTask TaskName="ZipFileCreateFromDirectory" AssemblyFile="$(ToolsDir)\net45\Microsoft.DotNet.Build.Tasks.dll"/>
+
+ <Import Project="dir.props" />
+ <Import Project="..\dir.props" />
+
+ <PropertyGroup>
+ <DiscoveryDirectory>$(TestWorkingDir)</DiscoveryDirectory>
+ <CoreRootDir Condition="'$(RuntimeID)' == '' ">$(CORE_ROOT)</CoreRootDir>
+ <CoreRootDir Condition="'$(RuntimeID)' != '' ">$(CORE_OVERLAY)</CoreRootDir>
+ <CoreRootName Condition="'$(RuntimeID)' == '' ">Core_Root_Windows_NT-$(__BuildArch)</CoreRootName>
+ <CoreRootName Condition="'$(RuntimeID)' != '' ">Core_Root_$(RuntimeID)</CoreRootName>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <TestCmds Include="$(DiscoveryDirectory)\**\*.cmd" ></TestCmds>
+ <XunitDlls Include="$(DiscoveryDirectory)\*\*.XUnitWrapper.dll" ></XunitDlls>
+ <RequiresSigningFilesToDelete Include="$(DiscoveryDirectory)\**\*.requires_signing" />
+ </ItemGroup>
+
+ <!-- Build the platform-specific wrapper to run an individual xunit wrapper -->
+
+ <Target Name="GenerateWrapperExecutables"
+ Inputs="@(XunitDlls)"
+ Outputs="$(TestWorkingDir)*\runtests.cmd" >
+
+ <MSBuild Projects="helixprep.proj"
+ Properties="BuildPath=%(XunitDlls.RootDir)%(XunitDlls.Directory);ProjectName=%(XunitDlls.Filename)%(XunitDlls.Extension)"
+ Targets="GenerateWrapperCmd" />
+
+ <MSBuild Projects="helixprep.proj"
+ Properties="BuildPath=%(XunitDlls.RootDir)%(XunitDlls.Directory);ProjectName=%(XunitDlls.Filename)%(XunitDlls.Extension)"
+ Targets="GenerateWrapperSh" />
+ </Target>
+
+ <!-- Zip each top-level test folder to send to Helix -->
+
+ <Target Name="ArchiveTests"
+ Inputs="@(XunitDlls)"
+ Outputs="$(TestWorkingDir)archive\**" >
+
+ <Copy SourceFiles="$(CORE_ROOT)\xunit.console.netcore.exe"
+ DestinationFolder="%(XunitDlls.RootDir)%(XunitDlls.Directory)"
+ />
+ <Message Text="Deleting '.requires_signing' files to avoid file name lengths exceeding MAX_PATH" Importance="Low" />
+ <Delete Files="@(RequiresSigningFilesToDelete)" />
+ <MSBuild Projects="helixprep.proj"
+ Properties="BuildPath=%(XunitDlls.RootDir)%(XunitDlls.Directory);ProjectName=%(XunitDlls.Filename);BuildArchiveDir=$(TestWorkingDir)archive\tests\"
+ Targets="ArchiveBuild" />
+ </Target>
+
+ <!-- Zip Core_Root & Packages payload to send to Helix -->
+
+ <Target Name="ArchiveCoreRoot"
+ Inputs="$(CoreRootDir)"
+ Outputs="$(TestWorkingDir)archive\Core_Root" >
+ <MSBuild Projects="helixprep.proj"
+ Properties="BuildPath=$(CoreRootDir);ProjectName=$(CoreRootName);BuildArchiveDir=$(TestWorkingDir)archive\Core_Root\"
+ Targets="ArchiveBuild" />
+
+ <!-- Make dummy packages.zip to upload to Helix -->
+ <PropertyGroup>
+ <DummyDir>$(TestWorkingDir)\archive\dummy</DummyDir>
+ <DummyPackageDir>$(TestWorkingDir)\archive\packages</DummyPackageDir>
+ </PropertyGroup>
+
+ <MakeDir Directories="$(DummyDir)" />
+ <MakeDir Directories="$(DummyPackageDir)" />
+ <ZipFileCreateFromDirectory SourceDirectory="$(DummyDir)" DestinationArchive="$(DummyPackageDir)\Packages.zip" OverwriteDestination="true" />
+ </Target>
+
+ <!-- Generate wrapper .cmd file for an Xunit wrapper -->
+ <Target Name="GenerateWrapperCmd"
+ Condition="'$(RuntimeID)' == '' ">
+
+ <PropertyGroup>
+ <WrapperCmdContents>
+ <![CDATA[
+@ECHO OFF
+setlocal ENABLEDELAYEDEXPANSION
+pushd %~dp0
+
+set CORE_ROOT=%HELIX_CORRELATION_PAYLOAD%
+
+ECHO BEGIN EXECUTION
+ECHO %HELIX_CORRELATION_PAYLOAD%\CoreRun.exe %HELIX_WORKITEM_PAYLOAD%\xunit.console.netcore.exe %HELIX_WORKITEM_PAYLOAD%\$(ProjectName) -noshadow -xml testResults.xml -notrait category=outerloop -notrait category=failing
+%HELIX_CORRELATION_PAYLOAD%\CoreRun.exe %HELIX_WORKITEM_PAYLOAD%\xunit.console.netcore.exe %HELIX_WORKITEM_PAYLOAD%\$(ProjectName) -noshadow -xml testResults.xml -notrait category=outerloop -notrait category=failing
+
+echo Finished running tests. Exit code = %ERRORLEVEL%
+EXIT /B %ERRORLEVEL%
+
+ ]]>
+ </WrapperCmdContents>
+ </PropertyGroup>
+
+ <!-- Write the file -->
+ <WriteLinesToFile
+ File="$(BuildPath)\runtests.cmd"
+ Lines="$(WrapperCmdContents)"
+ Overwrite="true" />
+
+ </Target>
+
+ <Target Name="GenerateWrapperSh"
+ Condition="'$(RuntimeID)' != '' ">
+
+ <!-- Need to force in Unix line endings for Shell script -->
+ <PropertyGroup>
+ <WrapperShContents>#!/bin/sh%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)export CORE_ROOT="$HELIX_CORRELATION_PAYLOAD"%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)for scriptFilePath in %24(find . -type f -iname '%2A.sh' ! -iname "runtests.sh" | sort)%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)do%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents) perl -pi -e 's/\r\n|\n|\r/\n/g' "%24scriptFilePath"%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)done%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)echo BEGIN EXECUTION%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)echo "%24{HELIX_CORRELATION_PAYLOAD}/corerun" %24HELIX_WORKITEM_PAYLOAD/xunit.console.netcore.exe %24HELIX_WORKITEM_PAYLOAD/$(ProjectName) -noshadow -xml testResults.xml -notrait category=outerloop -notrait category=failing%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)"%24{HELIX_CORRELATION_PAYLOAD}/corerun" %24HELIX_WORKITEM_PAYLOAD/xunit.console.netcore.exe %24HELIX_WORKITEM_PAYLOAD/$(ProjectName) -noshadow -xml testResults.xml -notrait category=outerloop -notrait category=failing%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)ErrorLevel=%24%3F%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)echo Finished running tests. Exit code = %24ErrorLevel%0a</WrapperShContents>
+ <WrapperShContents>$(WrapperShContents)exit %24ErrorLevel%0a</WrapperShContents>
+
+ </PropertyGroup>
+
+ <!-- Write the file -->
+ <WriteLinesToFile
+ File="$(BuildPath)\runtests.sh"
+ Lines="$(WrapperShContents)"
+ Overwrite="true" />
+
+ </Target>
+
+ <!-- archive the test binaries along with some supporting files -->
+ <Target Name="ArchiveBuild">
+ <PropertyGroup Condition="'$(ProjectName)'==''">
+ <TestProjectName>$(MSBuildProjectName)</TestProjectName>
+ </PropertyGroup>
+
+ <!-- the project json and runner script files need to be included in the archive -->
+ <MakeDir Directories="$(BuildArchiveDir)" />
+ <ZipFileCreateFromDirectory SourceDirectory="$(BuildPath)" DestinationArchive="$(BuildArchiveDir)$(ProjectName).zip" OverwriteDestination="true" />
+ </Target>
+
+ <!-- Default target to run - builds executables & archives everything needed for Helix run -->
+
+ <Target Name="ArchiveAll" >
+ <MSBuild Projects="helixprep.proj"
+ Targets="GenerateWrapperExecutables;ArchiveTests;ArchiveCoreRoot" />
+ </Target>
+
+</Project> \ No newline at end of file
diff --git a/tests/helixpublish.proj b/tests/helixpublish.proj
new file mode 100644
index 0000000000..aa967f1d48
--- /dev/null
+++ b/tests/helixpublish.proj
@@ -0,0 +1,67 @@
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+ <PropertyGroup>
+ <__BuildType>$(ConfigurationGroup)</__BuildType>
+ </PropertyGroup>
+
+ <Import Project="..\dir.props" />
+ <Import Project="$(ToolsDir)CloudTest.targets" Condition="Exists('$(ToolsDir)CloudTest.targets')" />
+
+ <!-- Define test payload & Correlation (Core_Root) payload -->
+ <ItemGroup>
+ <TestList Include="$(TestWorkingDir)\archive\tests\*" ></TestList>
+ <CoreRootUri Include="$(TestWorkingDir)\archive\Core_Root*\*.zip" ></CoreRootUri>
+ <DummyPackages Include="$(TestWorkingDir)\archive\packages\*" ></DummyPackages>
+ <ForUpload Include="@(TestList)" ></ForUpload>
+ <ForUpload Include="@(CoreRootUri)" ></ForUpload>
+ <SupplementalPayload Include="@(DummyPackages)" >
+ <RelativeBlobPath>$(Platform)$(ConfigurationGroup)/Packages.zip</RelativeBlobPath>
+ </SupplementalPayload>
+ </ItemGroup>
+
+ <!-- Define name & location of test JSON blob -->
+ <PropertyGroup>
+ <PayloadTestListFilename>Tests.$(ConfigurationGroup).json</PayloadTestListFilename>
+ <PayloadTestListFile>$(TestWorkingDir)$(PayloadTestListFilename)</PayloadTestListFile>
+ <SkipArchive>true</SkipArchive>
+ </PropertyGroup>
+
+ <Target Name="CreateTestListJson"
+ DependsOnTargets="CreateAzureStorage">
+
+ <!-- Define Correlation Payload as a property -->
+ <PropertyGroup>
+ <CoreRootUris>$(DropUri)$(Platform)$(ConfigurationGroup)/Tests/$([System.String]::Copy('%(RecursiveDir)').Replace('\', '/'))%(CoreRootUri.Filename)%(CoreRootUri.Extension)$(DropUriReadOnlyToken)</CoreRootUris>
+ <CorrelationPayloadProperty>$(CorrelationPayloadUris);$(CoreRootUris)</CorrelationPayloadProperty>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <TestList>
+ <Command Condition="'$(TargetsWindows)' == 'true'">$(HelixPythonPath) $(RunnerScript) --script %HELIX_WORKITEM_PAYLOAD%\runtests.cmd</Command>
+ <Command Condition="'$(TargetsWindows)' != 'true'">chmod +x $HELIX_WORKITEM_PAYLOAD/runtests.sh &amp;&amp; $(HelixPythonPath) $(RunnerScript) --script $HELIX_WORKITEM_PAYLOAD/runtests.sh</Command>
+ <CorrelationPayloadUris>[$(CorrelationPayloadProperty)]</CorrelationPayloadUris>
+ <PayloadUri>$(DropUri)$(Platform)$(ConfigurationGroup)/Tests/$([System.String]::Copy('%(RecursiveDir)').Replace('\', '/'))%(Filename)%(Extension)$(DropUriReadOnlyToken)</PayloadUri>
+ <WorkItemId>%(Filename)</WorkItemId>
+ <TimeoutInSeconds>$(TimeoutInSeconds)</TimeoutInSeconds>
+ </TestList>
+ </ItemGroup>
+ <WriteItemsToJson JsonFileName="$(PayloadTestListFile)" Items="@(TestList)" />
+ <!-- add test lists to the list of items for upload -->
+ <ItemGroup>
+ <ForUpload Include="$(PayloadTestListFile)">
+ <RelativeBlobPath>$(PayloadTestListFilename)</RelativeBlobPath>
+ </ForUpload>
+ </ItemGroup>
+ <!-- for completion event -->
+ <ItemGroup>
+ <TestListFile Include="$(PayloadTestListFile)">
+ <BuildCompleteJson>$(TestWorkingDir)$(OSPlatformConfig)/FuncBuildComplete.json</BuildCompleteJson>
+ <OfficialBuildJson>$(TestWorkingDir)$(OSPlatformConfig)/FuncOfficialBuild.json</OfficialBuildJson>
+ <HelixJobUploadCompletePath>$(TestWorkingDir)$(OSPlatformConfig)/helixjobuploadcomplete.sem</HelixJobUploadCompletePath>
+ </TestListFile>
+ </ItemGroup>
+ </Target>
+
+ <Target Name="Build" />
+
+</Project> \ No newline at end of file
diff --git a/tests/issues.targets b/tests/issues.targets
index d1f3dc22b8..f24bc774c6 100644
--- a/tests/issues.targets
+++ b/tests/issues.targets
@@ -1,6 +1,9 @@
<?xml version="1.0" ?>
<Project DefaultTargets = "GetListOfTestCmds" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Condition="'$(XunitTestBinBase)' != ''">
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Scenarios\DoublinkList\doublinkgen\*">
+ <Issue>6574</Issue>
+ </ExcludeList>
<ExcludeList Include="$(XunitTestBinBase)\GC\Coverage\271010\*">
<Issue>3392</Issue>
</ExcludeList>
@@ -187,6 +190,9 @@
<ExcludeList Include="$(XunitTestBinBase)\JIT\opt\perf\doublealign\Locals\*">
<Issue>8418</Issue>
</ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\JitBlue\DevDiv_377155\DevDiv_377155\*">
+ <Issue>9282</Issue>
+ </ExcludeList>
</ItemGroup>
<!-- The following are x86 failures -->
@@ -389,4 +395,1347 @@
<Issue>needs triage</Issue>
</ExcludeList>
</ItemGroup>
+
+ <!-- The following are tests that fail when building tests against packages -->
+
+ <ItemGroup Condition="'$(XunitTestBinBase)' != '' and '$(BuildTestsAgainstPackages)' == 'true'">
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\superpmi\superpmicollect\superpmicollect.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Performance\CodeQuality\BenchmarksGame\k-nucleotide\k-nucleotide\k-nucleotide.cmd">
+ <Issue>9314</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Performance\CodeQuality\BenchmarksGame\regexdna\regexdna\regexdna.cmd">
+ <Issue>9314</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Performance\CodeQuality\BenchmarksGame\revcomp\revcomp\revcomp.cmd">
+ <Issue>9314</Issue>
+ </ExcludeList>
+ </ItemGroup>
+
+ <!-- The following are tests that fail on non-Windows, which we must not run when building against packages -->
+
+ <ItemGroup Condition="'$(XunitTestBinBase)' != '' and '$(BuildTestsAgainstPackages)' == 'true' and '$(RuntimeID)' != ''">
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\byte\ByteToString3\ByteToString3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\convert\ConvertToInt32_4\ConvertToInt32_4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\decimal\DecimalToInt32\DecimalToInt32.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\double\DoubleToString3\DoubleToString3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\double\DoubleToString4\DoubleToString4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\int64\Int64ToString3\Int64ToString3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\int\Int32ToString3\Int32ToString3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\multicastdelegate\MulticastDelegateCtor\MulticastDelegateCtor.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\runtime\interopservices\marshal\MarshalGetLastWin32Error_PSC\MarshalGetLastWin32Error_PSC.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\string\StringCompare15\StringCompare15.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\string\StringCompare1\StringCompare1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\string\StringCompare2\StringCompare2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\uint16\UInt16ToString3\UInt16ToString3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\uint16\UInt16ToString4\UInt16ToString4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\cti\system\uint32\UInt32ToString2\UInt32ToString2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\system\collections\generic\hashset\Regression_Dev10_609271\Regression_Dev10_609271.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\CoreMangLib\system\collections\generic\hashset\Regression_Dev10_624201\Regression_Dev10_624201.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Coverage\271010\271010.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Coverage\smalloom\smalloom.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Features\BackgroundGC\foregroundgc\foregroundgc.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Features\LOHFragmentation\lohfragmentation\lohfragmentation.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Features\SustainedLowLatency\scenario\scenario.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\LargeMemory\API\gc\collect\collect.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\LargeMemory\API\gc\getgeneration\getgeneration.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\LargeMemory\API\gc\reregisterforfinalize\reregisterforfinalize.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\LargeMemory\Allocation\finalizertest\finalizertest.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\LargeMemory\Allocation\largeexceptiontest\largeexceptiontest.cmd">
+ <Issue>3392</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\LargeMemory\API\gc\gettotalmemory\gettotalmemory.cmd">
+ <Issue>3392</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\LargeMemory\API\gc\keepalive\keepalive.cmd">
+ <Issue>3392</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\LargeMemory\API\gc\suppressfinalize\suppressfinalize.cmd">
+ <Issue>3392</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Regressions\dev10bugs\536168\536168\536168.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Scenarios\BaseFinal\basefinal\basefinal.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Scenarios\DoublinkList\doublinknoleak\doublinknoleak.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\GC\Stress\Framework\ReliabilityFramework\ReliabilityFramework.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Interop\MarshalAPI\GetNativeVariantForObject\GetNativeVariantForObject\GetNativeVariantForObject.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Interop\MarshalAPI\GetObjectForNativeVariant\GetObjectForNativeVariant\GetObjectForNativeVariant.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Interop\MarshalAPI\GetObjectsForNativeVariants\GetObjectsForNativeVariants\GetObjectsForNativeVariants.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Interop\MarshalAPI\IUnknown\IUnknownTest\IUnknownTest.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Interop\SizeConst\SizeConstTest\SizeConstTest.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Interop\StructMarshalling\PInvoke\MarshalStructAsLayoutExp\MarshalStructAsLayoutExp.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\IL\PInvokeTail\PInvokeTail\PInvokeTail.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\IL\PInvokeTail\TailWinApi\TailWinApi.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\PREFIX\unaligned\1\arglist\arglist.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\PREFIX\unaligned\2\arglist\arglist.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\PREFIX\unaligned\4\arglist\arglist.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\PREFIX\volatile\1\arglist\arglist.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\RVAInit\extended\extended.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\RVAInit\overlap\overlap.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\StructABI\StructABI\StructABI.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\UnrollLoop\loop2_cs_d\loop2_cs_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\UnrollLoop\loop2_cs_do\loop2_cs_do.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\UnrollLoop\loop2_cs_r\loop2_cs_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\UnrollLoop\loop2_cs_ro\loop2_cs_ro.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\UnrollLoop\loop6_cs_d\loop6_cs_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\UnrollLoop\loop6_cs_do\loop6_cs_do.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\UnrollLoop\loop6_cs_r\loop6_cs_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\UnrollLoop\loop6_cs_ro\loop6_cs_ro.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\coverage\importer\Desktop\bleref_il_d\bleref_il_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\coverage\importer\Desktop\bleref_il_r\bleref_il_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\coverage\importer\Desktop\ldelemnullarr1_il_d\ldelemnullarr1_il_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\coverage\importer\Desktop\ldelemnullarr1_il_r\ldelemnullarr1_il_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\coverage\importer\Desktop\nonrefsdarr_il_d\nonrefsdarr_il_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\coverage\importer\Desktop\nonrefsdarr_il_r\nonrefsdarr_il_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\coverage\oldtests\Desktop\callipinvoke_il_d\callipinvoke_il_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\coverage\oldtests\Desktop\callipinvoke_il_r\callipinvoke_il_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\coverage\oldtests\callipinvoke\callipinvoke.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\intrinsic\interlocked\rva_rvastatic1\rva_rvastatic1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\intrinsic\interlocked\rva_rvastatic2\rva_rvastatic2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\intrinsic\interlocked\rva_rvastatic3\rva_rvastatic3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\intrinsic\interlocked\rva_rvastatic4\rva_rvastatic4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\pinning\object-pin\object-pin\object-pin.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\pinvoke\calli_excep\calli_excep.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\pinvoke\jump\jump.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\pinvoke\pinvoke-bug\pinvoke-bug.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\pinvoke\preemptive_cooperative\preemptive_cooperative.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\pinvoke\sin\sin.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\pinvoke\sysinfo_cs\sysinfo_cs.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\pinvoke\sysinfo_il\sysinfo_il.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\pinvoke\tail\tail.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\rvastatics\rvastatic1\rvastatic1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\rvastatics\rvastatic2\rvastatic2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\rvastatics\rvastatic3\rvastatic3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\rvastatics\rvastatic4\rvastatic4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\rvastatics\rvastatic5\rvastatic5.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\tls\mutualrecurthd-tls\mutualrecurthd-tls.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Directed\tls\test-tls\test-tls.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Generics\Fields\getclassfrommethodparam\getclassfrommethodparam.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Generics\pinvoke\instance01\instance01.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Generics\pinvoke\instance02\instance02.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Generics\pinvoke\instance03\instance03.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Generics\pinvoke\static01\static01.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Generics\pinvoke\static02\static02.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_dbgsin_cs_il\_dbgsin_cs_il.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_dbgsin_il_cs\_dbgsin_il_cs.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_dbgsin_il_il\_dbgsin_il_il.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_odbgsin_cs_il\_odbgsin_cs_il.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_odbgsin_il_cs\_odbgsin_il_cs.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_odbgsin_il_il\_odbgsin_il_il.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_orelsin_cs_il\_orelsin_cs_il.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_orelsin_il_cs\_orelsin_il_cs.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_orelsin_il_il\_orelsin_il_il.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_relsin_cs_il\_relsin_cs_il.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_relsin_il_cs\_relsin_il_cs.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Boxing\xlang\_relsin_il_il\_relsin_il_il.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\Coverage\arglist_pos\arglist_pos.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\cctor\misc\global_il_d\global_il_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\cctor\misc\global_il_r\global_il_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\cctor\xassem\xprecise3_cs_d\xprecise3_cs_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\cctor\xassem\xprecise3_cs_do\xprecise3_cs_do.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\cctor\xassem\xprecise3_cs_r\xprecise3_cs_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\cctor\xassem\xprecise3_cs_ro\xprecise3_cs_ro.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\delegate\_XModuledeleg1_d\_XModuledeleg1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\delegate\_XModuledeleg1_do\_XModuledeleg1_do.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\delegate\_XModuledeleg1_r\_XModuledeleg1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\delegate\_XModuledeleg1_ro\_XModuledeleg1_ro.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\delegate\_XModuledeleg2_d\_XModuledeleg2_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\delegate\_XModuledeleg2_do\_XModuledeleg2_do.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\delegate\_XModuledeleg2_r\_XModuledeleg2_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\delegate\_XModuledeleg2_ro\_XModuledeleg2_ro.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\eh\deadcode\badcodeafterfinally_d\badcodeafterfinally_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\eh\deadcode\badcodeafterfinally_r\badcodeafterfinally_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_byte_1_d\expl_byte_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_byte_1_r\expl_byte_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_double_1_d\expl_double_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_double_1_r\expl_double_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_float_1_d\expl_float_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_float_1_r\expl_float_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_byte_1_d\expl_gc_byte_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_byte_1_r\expl_gc_byte_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_double_1_d\expl_gc_double_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_double_1_r\expl_gc_double_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_float_1_d\expl_gc_float_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_float_1_r\expl_gc_float_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_int_1_d\expl_gc_int_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_int_1_r\expl_gc_int_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_long_1_d\expl_gc_long_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_long_1_r\expl_gc_long_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_obj_1_d\expl_gc_obj_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_obj_1_r\expl_gc_obj_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_short_1_d\expl_gc_short_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_short_1_r\expl_gc_short_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_val_1_d\expl_gc_val_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_gc_val_1_r\expl_gc_val_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_int_1_d\expl_int_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_int_1_r\expl_int_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_long_1_d\expl_long_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_long_1_r\expl_long_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_obj_1_d\expl_obj_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_obj_1_r\expl_obj_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_short_1_d\expl_short_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_short_1_r\expl_short_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_val_1_d\expl_val_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\expl_val_1_r\expl_val_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_byte_1_d\seq_byte_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_byte_1_r\seq_byte_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_double_1_d\seq_double_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_double_1_r\seq_double_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_float_1_d\seq_float_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_float_1_r\seq_float_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_byte_1_d\seq_gc_byte_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_byte_1_r\seq_gc_byte_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_double_1_d\seq_gc_double_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_double_1_r\seq_gc_double_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_float_1_d\seq_gc_float_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_float_1_r\seq_gc_float_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_int_1_d\seq_gc_int_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_int_1_r\seq_gc_int_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_long_1_d\seq_gc_long_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_long_1_r\seq_gc_long_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_obj_1_d\seq_gc_obj_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_obj_1_r\seq_gc_obj_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_short_1_d\seq_gc_short_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_short_1_r\seq_gc_short_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_val_1_d\seq_gc_val_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_gc_val_1_r\seq_gc_val_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_int_1_d\seq_int_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_int_1_r\seq_int_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_long_1_d\seq_long_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_long_1_r\seq_long_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_obj_1_d\seq_obj_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_obj_1_r\seq_obj_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_short_1_d\seq_short_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_short_1_r\seq_short_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_val_1_d\seq_val_1_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\explicit\coverage\seq_val_1_r\seq_val_1_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_dbgstress1\_dbgstress1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_dbgstress3\_dbgstress3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_il_dbgseq\_il_dbgseq.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_il_relseq\_il_relseq.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_relstress1\_relstress1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_relstress3\_relstress3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_speed_dbgstress1\_speed_dbgstress1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_speed_dbgstress3\_speed_dbgstress3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_speed_relstress1\_speed_relstress1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\refany\_speed_relstress3\_speed_relstress3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\tailcall\_il_dbgpointer\_il_dbgpointer.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\tailcall\_il_dbgpointer_i\_il_dbgpointer_i.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\tailcall\_il_relpointer\_il_relpointer.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\tailcall\_il_relpointer_i\_il_relpointer_i.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\varargs\callconv\gc_ctor_il_d\gc_ctor_il_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\varargs\callconv\gc_ctor_il_r\gc_ctor_il_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\varargs\callconv\val_ctor_il_d\val_ctor_il_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\varargs\callconv\val_ctor_il_r\val_ctor_il_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\varargs\misc\Dev10_615402\Dev10_615402.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\varargs\seh\fault_il_d\fault_il_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\varargs\seh\fault_il_r\fault_il_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\varargs\seh\filter_il_d\filter_il_d.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\varargs\seh\filter_il_r\filter_il_r.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\xxobj\operand\_il_dbglocalloc\_il_dbglocalloc.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Methodical\xxobj\operand\_il_rellocalloc\_il_rellocalloc.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-EJIT\V1-M12-Beta2\b26323\b26323\b26323.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-EJIT\v1-m10\b07847\b07847\b07847.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b16423\b16423\b16423.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b26324\b26324a\b26324a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b26324\b26324b\b26324b.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b28901\b28901\b28901.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b30838\b30838\b30838.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b30864\b30864\b30864.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b32374\b32374\b32374.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b35784\b35784\b35784.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b36472\b36472\b36472.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b37598\b37598\b37598.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b41391\b41391\b41391.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b46867\b46867\b46867.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b49644\b49644\b49644.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M12-Beta2\b31745\b31745\b31745.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M12-Beta2\b31746\b31746\b31746.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M12-Beta2\b37646\b37646\b37646.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M12-Beta2\b41852\b41852\b41852.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M12-Beta2\b66533\b66533\b66533.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M12-Beta2\b79250\b79250\b79250.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M13-RTM\b88793\b88793\b88793.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1-M13-RTM\b91248\b91248\b91248.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1.2-Beta1\b102637\b102637\b102637.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1.2-M01\b03689\b03689\b03689.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1.2-M01\b07493\b07493\b07493.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1.2-M01\b08046\b08046\b08046.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V1.2-M02\b20785\b20785\b20785.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V2.0-Beta2\b409748\b409748\b409748.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V2.0-Beta2\b427411\Desktop\b427411\b427411.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\Dev11\dev10_865840\dev10_865840\dev10_865840.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\VS-ia64-JIT\V1.2-Beta1\b302509\b302509\b302509.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\VS-ia64-JIT\V1.2-M01\b15632\b15632\b15632.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\VS-ia64-JIT\V1.2-M02\b12011\b12011\b12011.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\VS-ia64-JIT\V2.0-Beta2\b410474\b410474\b410474.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\VS-ia64-JIT\V2.0-RTM\b286991\b286991\b286991.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\clr-x64-JIT\v2.1\b173569\b173569\b173569.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\clr-x64-JIT\v4.0\devdiv374539\DevDiv_374539\DevDiv_374539.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\gc\misc\funclet\funclet.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\localloc\verify\verify01_dynamic\verify01_dynamic.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\localloc\verify\verify01_large\verify01_large.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\localloc\verify\verify01_small\verify01_small.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i00\mcc_i00.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i01\mcc_i01.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i02\mcc_i02.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i03\mcc_i03.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i04\mcc_i04.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i05\mcc_i05.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i06\mcc_i06.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i07\mcc_i07.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i10\mcc_i10.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i11\mcc_i11.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i12\mcc_i12.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i13\mcc_i13.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i14\mcc_i14.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i15\mcc_i15.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i16\mcc_i16.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i17\mcc_i17.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i30\mcc_i30.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i31\mcc_i31.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i32\mcc_i32.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i33\mcc_i33.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i34\mcc_i34.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i35\mcc_i35.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i36\mcc_i36.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i37\mcc_i37.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i50\mcc_i50.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i51\mcc_i51.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i52\mcc_i52.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i53\mcc_i53.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i54\mcc_i54.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i55\mcc_i55.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i56\mcc_i56.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i57\mcc_i57.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i60\mcc_i60.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i61\mcc_i61.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i62\mcc_i62.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i63\mcc_i63.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i64\mcc_i64.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i65\mcc_i65.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i66\mcc_i66.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i67\mcc_i67.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i70\mcc_i70.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i71\mcc_i71.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i72\mcc_i72.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i73\mcc_i73.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i74\mcc_i74.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i75\mcc_i75.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i76\mcc_i76.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i77\mcc_i77.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i80\mcc_i80.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i81\mcc_i81.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i82\mcc_i82.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i83\mcc_i83.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i84\mcc_i84.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i85\mcc_i85.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i86\mcc_i86.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\mcc\interop\mcc_i87\mcc_i87.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\regress\ndpw\21220\b21220\b21220.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\jit64\regress\vsw\286991\test\test.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\opt\Inline\tests\security\security.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\opt\Inline\tests\xmodb\xmodb.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\opt\Tailcall\TailcallVerifyWithPrefix\TailcallVerifyWithPrefix.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\JIT\opt\perf\doublealign\Locals\Locals.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Loader\NativeLibs\FromNativePaths\FromNativePaths.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Loader\classloader\TypeGeneratorTests\TypeGeneratorTest612\Generated612\Generated612.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Loader\classloader\TypeGeneratorTests\TypeGeneratorTest613\Generated613\Generated613.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Loader\classloader\TypeGeneratorTests\TypeGeneratorTest614\Generated614\Generated614.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Loader\classloader\TypeGeneratorTests\TypeGeneratorTest681\Generated681\Generated681.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Loader\classloader\TypeGeneratorTests\TypeGeneratorTest682\Generated682\Generated682.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Loader\classloader\TypeGeneratorTests\TypeGeneratorTest683\Generated683\Generated683.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\Regressions\coreclr\0584\Test584\Test584.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\exceptions\regressions\Dev11\147911\test147911\test147911.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\exceptions\regressions\V1\SEH\VJ\UnmanagedToManaged\UnmanagedToManaged.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\commitstackonlyasneeded\DefaultStackCommit\DefaultStackCommit.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\interlocked\compareexchange\compareexchangetneg\compareexchangetneg.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\monitor\pulse\monitorpulse02\monitorpulse02.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\monitor\tryenter\negativetestharness\negativetestharness.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\abandonedmutex\am04waitany\am04waitany.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\abandonedmutex\am05waitanymutex\am05waitanymutex.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\abandonedmutex\am06abandonall\am06abandonall.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\abandonedmutex\am07abandonmultiplemutex\am07abandonmultiplemutex.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\abandonedmutex\am08mixedarray\am08mixedarray.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\abandonedmutex\am09threadabort\am09threadabort.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexneg1\openmutexneg1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexneg2\openmutexneg2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexneg3\openmutexneg3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexneg4\openmutexneg4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexneg5\openmutexneg5.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexneg6\openmutexneg6.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexneg7\openmutexneg7.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexneg8\openmutexneg8.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexpos1\openmutexpos1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexpos2\openmutexpos2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexpos3\openmutexpos3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\mutex\openexisting\openmutexpos4\openmutexpos4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\paramthreadstart\ThreadStartString_1\ThreadStartString_1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\readerwriterlockslim\ensurelockordering\ensurelockordering.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\regressions\135972\oswaitinlock\oswaitinlock.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\regressions\135972\oswaitinsleep\oswaitinsleep.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\regressions\beta1\322338\322338.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\regressions\beta2\417296_abort\417296_abort.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\regressions\m2\91848\91848.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\regressions\m2\tastaticconst\tastaticconst.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\regressions\whidbey_m3\105019\105019.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphorector2\semaphorector2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphorector3\semaphorector3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphorector4\semaphorector4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphorector5\semaphorector5.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphoreopenneg1\semaphoreopenneg1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphoreopenneg2\semaphoreopenneg2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphoreopenneg3\semaphoreopenneg3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphoreopenneg4\semaphoreopenneg4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphoreopenneg5\semaphoreopenneg5.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphoreopenneg6\semaphoreopenneg6.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\ctoropen\semaphoreopenneg7\semaphoreopenneg7.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\semaphore\unit\semtest\semtest.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\exceptioninfinally\argumentexception\argumentexception.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\exceptioninfinally\dividebyzero\dividebyzero.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\exceptioninfinally\nullrefexception\nullrefexception.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\rudeposnonhosted\rudenonhostedone\rudenonhostedone.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\rudeposnonhosted\rudenonhostedthree\rudenonhostedthree.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\rudeposnonhosted\rudenonhostedtwo\rudenonhostedtwo.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\rudethreadpool\rudeabortrepeat\rudeabortrepeat.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta001a\ta001a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta001b\ta001b.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta002a\ta002a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta002b\ta002b.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta003a\ta003a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta003b\ta003b.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta004a\ta004a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta004b\ta004b.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta005a\ta005a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta005b\ta005b.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta006a\ta006a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta007a\ta007a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta007b\ta007b.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta008a\ta008a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta009a\ta009a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta010a\ta010a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta011a\ta011a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta012a\ta012a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta012b\ta012b.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta013a\ta013a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta014a\ta014a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta015a\ta015a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta016a\ta016a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta017a\ta017a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta017b\ta017b.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta018a\ta018a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta019a\ta019a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\ta020a\ta020a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\threadabort\threadabort.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadabort\tasuite\threadstarttwice\threadstarttwice.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadpool\bindhandle\bindhandle1\bindhandle1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadpool\bindhandle\bindhandleinvalid3\bindhandleinvalid3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadpool\bindhandle\bindhandleinvalid4\bindhandleinvalid4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadpool\bindhandle\bindhandleinvalid5\bindhandleinvalid5.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadpool\bindhandle\bindhandleinvalid6\bindhandleinvalid6.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\threadpool\bindhandle\bindhandleinvalid\bindhandleinvalid.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\volatile\atomictest\atomictest.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\abandonedmutexscenarios\threadabort\threadabort.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex10\waitallex10.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex11\waitallex11.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex1\waitallex1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex2\waitallex2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex3\waitallex3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex4\waitallex4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex5\waitallex5.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex6\waitallex6.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex7\waitallex7.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex8\waitallex8.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex8a\waitallex8a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitall\waitallex9\waitallex9.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex10\waitanyex10.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex1\waitanyex1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex2\waitanyex2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex3\waitanyex3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex4\waitanyex4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex5\waitanyex5.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex6\waitanyex6.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex7\waitanyex7.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex8\waitanyex8.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex8a\waitanyex8a.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitany\waitanyex9\waitanyex9.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitone\waitoneex1\waitoneex1.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitone\waitoneex2\waitoneex2.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitone\waitoneex3\waitoneex3.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\baseservices\threading\waithandle\waitone\waitoneex4\waitoneex4.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ <ExcludeList Include="$(XunitTestBinBase)\managed\Compilation\Compilation\Compilation.cmd">
+ <Issue>needs triage</Issue>
+ </ExcludeList>
+ </ItemGroup>
+
</Project>
diff --git a/tests/longRunningGcTests.txt b/tests/longRunningGcTests.txt
index 0c31ec9f82..9a38363ee0 100644
--- a/tests/longRunningGcTests.txt
+++ b/tests/longRunningGcTests.txt
@@ -8,3 +8,4 @@ GC/Features/PartialCompaction/partialcompactionwloh/partialcompactionwloh.sh
GC/Features/SustainedLowLatency/sustainedlowlatency_race_reverse/sustainedlowlatency_race_reverse.sh
GC/Features/SustainedLowLatency/sustainedlowlatency_race/sustainedlowlatency_race.sh
GC/Regressions/v2.0-beta2/462651/462651/462651.sh
+GC/Coverage/delete_next_card_table/delete_next_card_table.sh
diff --git a/tests/publishdependency.targets b/tests/publishdependency.targets
index 9e286fc3ba..f9b1321698 100644
--- a/tests/publishdependency.targets
+++ b/tests/publishdependency.targets
@@ -42,7 +42,6 @@
<PropertyGroup>
<ProductDestination>$(ProjectDir)\..\bin\Product\$(BuildOS).$(BuildArch).$(BuildType)</ProductDestination>
<RefDestination>$(ProductDestination)\ref</RefDestination>
- <CoreOverlay>$(CORE_ROOT)\..\coreoverlay</CoreOverlay>
</PropertyGroup>
<Target Name="CopyDependecyToCoreRoot"
@@ -92,7 +91,7 @@
<Target Name="CopyNonWindowsDependecyToCoreRoot"
Inputs="@(NonWindowsProjectLockJsonFiles)"
- Outputs="$(CoreOverlay)\*.*">
+ Outputs="$(CORE_OVERLAY)\*.*">
<MSBuild Projects="$(SourceDir)Common\test_runtime\test_runtime.csproj"/>
@@ -114,7 +113,7 @@
<Output TaskParameter="ResolvedCopyLocalItems" ItemName="RunTimeCopyLocal" />
</PrereleaseResolveNuGetPackageAssets>
<ItemGroup>
- <RunTimeDependecyExclude Include="$(CoreOverlay)\**\*.*" />
+ <RunTimeDependecyExclude Include="$(CORE_OVERLAY)\**\*.*" />
<RunTimeDependecyExcludeFiles Include="@(RunTimeDependecyExclude -> '%(FileName)%(Extension)')" />
<RunTimeDependecyExcludeFiles Include="@(RunTimeDependecyExclude -> '%(FileName).ni%(Extension)')" />
<RunTimeDependecyExcludeFiles Include="@(RunTimeDependecyExclude -> '%(FileName).pdb')" />
@@ -127,7 +126,7 @@
<Copy
SourceFiles="@(RunTimeDependecyCopyLocal)"
- DestinationFolder="$(CoreOverlay)"
+ DestinationFolder="$(CORE_OVERLAY)"
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
Retries="$(CopyRetryCount)"
@@ -142,7 +141,7 @@
<Copy
SourceFiles="@(NonWindowsCrossGenFiles)"
- DestinationFolder="$(CoreOverlay)"
+ DestinationFolder="$(CORE_OVERLAY)"
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
Retries="$(CopyRetryCount)"
@@ -218,7 +217,7 @@
</Target>
<Target Name="CopyCrossgenToProduct"
- Outputs="$(ProductDestination)\crossgen.exe;$(CoreOverlay)\crossgen.exe">
+ Outputs="$(ProductDestination)\crossgen.exe;$(CORE_OVERLAY)\crossgen.exe">
<Copy
SourceFiles="@(CrossGenFiles)"
diff --git a/tests/runtest.cmd b/tests/runtest.cmd
index 23b4bb5f42..cfe2c3db41 100644
--- a/tests/runtest.cmd
+++ b/tests/runtest.cmd
@@ -24,9 +24,6 @@ set "__ProjectFilesDir=%__ProjectDir%"
set "__RootBinDir=%__ProjectDir%\..\bin"
set "__LogsDir=%__RootBinDir%\Logs"
-:: Default __Exclude to issues.targets
-set __Exclude0=%~dp0\issues.targets
-
set __Sequential=
set __msbuildExtraArgs=
set __LongGCTests=
@@ -55,9 +52,6 @@ if /i "%1" == "checked" (set __BuildType=Checked&shift&goto Arg_Lo
if /i "%1" == "vs2013" (set __VSVersion=%1&shift&goto Arg_Loop)
if /i "%1" == "vs2015" (set __VSVersion=%1&shift&goto Arg_Loop)
-if /i "%1" == "SkipWrapperGeneration" (set __SkipWrapperGeneration=true&shift&goto Arg_Loop)
-if /i "%1" == "Exclude" (set __Exclude=%2&shift&shift&goto Arg_Loop)
-if /i "%1" == "Exclude0" (set __Exclude0=%2&shift&shift&goto Arg_Loop)
if /i "%1" == "TestEnv" (set __TestEnv=%2&shift&shift&goto Arg_Loop)
if /i "%1" == "AgainstPackages" (set __AgainstPackages=1&shift&goto Arg_Loop)
if /i "%1" == "sequential" (set __Sequential=1&shift&goto Arg_Loop)
@@ -69,8 +63,8 @@ if /i "%1" == "jitstressregs" (set COMPlus_JitStressRegs=%2&shift&shift&
if /i "%1" == "jitminopts" (set COMPlus_JITMinOpts=1&shift&shift&goto Arg_Loop)
if /i "%1" == "jitforcerelocs" (set COMPlus_ForceRelocs=1&shift&shift&goto Arg_Loop)
if /i "%1" == "jitdisasm" (set __JitDisasm=1&shift&goto Arg_Loop)
-if /i "%1" == "GenerateLayoutOnly" (set __GenerateLayoutOnly=1&set __SkipWrapperGeneration=true&shift&goto Arg_Loop)
-if /i "%1" == "PerfTests" (set __PerfTests=true&set __SkipWrapperGeneration=true&shift&goto Arg_Loop)
+if /i "%1" == "GenerateLayoutOnly" (set __GenerateLayoutOnly=1&shift&goto Arg_Loop)
+if /i "%1" == "PerfTests" (set __PerfTests=true&shift&goto Arg_Loop)
if /i "%1" == "runcrossgentests" (set RunCrossGen=true&shift&goto Arg_Loop)
REM change it to COMPlus_GCStress when we stop using xunit harness
if /i "%1" == "gcstresslevel" (set __GCSTRESSLEVEL=%2&set __TestTimeout=1800000&shift&shift&goto Arg_Loop)
@@ -170,7 +164,6 @@ xcopy /s "%__BinDir%" "%CORE_ROOT%"
:SkipCoreRootSetup
-if defined __Exclude (if not exist %__Exclude% echo %__MsgPrefix%Error: Exclusion file %__Exclude% not found && exit /b 1)
if defined __TestEnv (if not exist %__TestEnv% echo %__MsgPrefix%Error: Test Environment script %__TestEnv% not found && exit /b 1)
REM These log files are created automatically by the test run process. Q: what do they depend on being set?
@@ -179,13 +172,6 @@ set __TestRunXmlLog=%__LogsDir%\TestRun_%__BuildOS%__%__BuildArch%__%__BuildType
if "%__PerfTests%"=="true" goto RunPerfTests
-if "%__SkipWrapperGeneration%"=="true" goto SkipWrapperGeneration
-
-set __BuildLogRootName=Tests_XunitWrapper
-call :msbuild "%__ProjectFilesDir%\runtest.proj" /p:BuildWrappers=true
-if errorlevel 1 exit /b 1
-
-:SkipWrapperGeneration
call :ResolveDependecies
@@ -385,6 +371,7 @@ if errorlevel 1 (
exit /b 1
)
echo %__MsgPrefix%Created the runtime layout with all dependencies in %CORE_ROOT%
+
exit /b 0
@@ -392,16 +379,12 @@ exit /b 0
:Usage
echo.
echo Usage:
-echo %0 BuildArch BuildType [SkipWrapperGeneration] [Exclude EXCLUSION_TARGETS] [TestEnv TEST_ENV_SCRIPT] [VSVersion] CORE_ROOT
+echo %0 BuildArch BuildType [TestEnv TEST_ENV_SCRIPT] [VSVersion] CORE_ROOT
echo where:
echo.
echo./? -? /h -h /help -help: view this message.
echo BuildArch- Optional parameter - x64 or x86 ^(default: x64^).
echo BuildType- Optional parameter - Debug, Release, or Checked ^(default: Debug^).
-echo SkipWrapperGeneration- Optional parameter - this will run the same set of tests as the last time it was run
-echo Exclude0- Optional parameter - specify location of default exclusion file (defaults to issues.targets if not specified)
-echo Set to "" to disable default exclusion file.
-echo Exclude- Optional parameter - this will exclude individual tests from running, specified by ExcludeList ItemGroup in an .targets file.
echo TestEnv- Optional parameter - this will run a custom script to set custom test environment settings.
echo VSVersion- Optional parameter - VS2013 or VS2015 ^(default: VS2015^)
echo AgainstPackages - Optional parameter - this indicates that we are running tests that were built against packages
diff --git a/tests/runtest.proj b/tests/runtest.proj
index acc4545d92..45f2bb7702 100644
--- a/tests/runtest.proj
+++ b/tests/runtest.proj
@@ -44,12 +44,10 @@
</Target>
-
- <Import Project="$(__Exclude0)" Condition="'$(__Exclude0)' != '' AND '$(XunitTestBinBase)' != ''" />
<Import Project="$(__Exclude)" Condition="'$(__Exclude)' != '' AND '$(XunitTestBinBase)' != ''" />
<PropertyGroup>
<HaveExcludes>False</HaveExcludes>
- <HaveExcludes Condition="('$(__Exclude0)' != '') Or ('$(__Exclude)' != '')">True</HaveExcludes>
+ <HaveExcludes Condition="'$(__Exclude)' != ''">True</HaveExcludes>
</PropertyGroup>
<Target Name="CreateXunitWrapper" DependsOnTargets="CreateXunitFacts">
@@ -77,8 +75,8 @@ $(_XunitEpilog)
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
<OutputType>Library</OutputType>
- <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <TargetFrameworkIdentifier Condition ="'$(BuildTestsAgainstPackages)' != 'true'">.NETFramework</TargetFrameworkIdentifier>
+ <TargetFrameworkVersion Condition ="'$(BuildTestsAgainstPackages)' != 'true'">v4.5</TargetFrameworkVersion>
<IsXunitWrapperProject>true</IsXunitWrapperProject>
<SkipSigning>true</SkipSigning>
<AppDesignerFolder>Properties</AppDesignerFolder>
@@ -88,8 +86,8 @@ $(_XunitEpilog)
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
<CLRTestKind>BuildOnly</CLRTestKind>
<IsTestProject>true</IsTestProject>
- <ProjectJson>%24(TestWrappersPackagesConfigFileDirectory)project.json</ProjectJson>
- <ProjectLockJson>%24(TestWrappersPackagesConfigFileDirectory)project.lock.json</ProjectLockJson>
+ <ProjectJson Condition="'$(BuildTestsAgainstPackages)' != 'true'">%24(TestWrappersPackagesConfigFileDirectory)project.json</ProjectJson>
+ <ProjectLockJson Condition="'$(BuildTestsAgainstPackages)' != 'true'">%24(TestWrappersPackagesConfigFileDirectory)project.lock.json</ProjectLockJson>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '%24(Configuration)|%24(Platform)' == 'Debug|AnyCPU' ">
@@ -103,7 +101,11 @@ $(_XunitEpilog)
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="$(SourceDir)Common\Desktop.Coreclr.TestWrapper\Desktop.Coreclr.TestWrapper.csproj">
+ <ProjectReference Include="$(SourceDir)Common\Desktop.Coreclr.TestWrapper\Desktop.Coreclr.TestWrapper.csproj" Condition="'$(BuildTestsAgainstPackages)' != 'true'">
+ <Project>{8ffe99c0-22f8-4462-b839-970eac1b3472}</Project>
+ <Name>coreclr</Name>
+ </ProjectReference>
+ <ProjectReference Include="$(SourceDir)Common\Coreclr.TestWrapper\Coreclr.TestWrapper.csproj" Condition="'$(BuildTestsAgainstPackages)' == 'true'">
<Project>{8ffe99c0-22f8-4462-b839-970eac1b3472}</Project>
<Name>coreclr</Name>
</ProjectReference>
@@ -114,10 +116,6 @@ $(_XunitEpilog)
<Reference Include="System.Runtime" />
<Reference Include="mscorlib" />
</ItemGroup>
- <PropertyGroup>
- <ProjectJson>%24(TestWrappersPackagesConfigFileDirectory)project.json</ProjectJson>
- <ProjectLockJson>%24(TestWrappersPackagesConfigFileDirectory)project.lock.json</ProjectLockJson>
- </PropertyGroup>
<Import Project="$(SourceDir)dir.targets" />
<PropertyGroup>
<OutDir>$(XunitTestBinBase)\$(Category)\</OutDir>
@@ -195,7 +193,8 @@ namespace $([System.String]::Copy($(Category)).Replace(".","_").Replace("\","").
throw new ArgumentException("Environment variable CORE_ROOT is not set")%3B
}
- runningInWindows = System.Environment.GetEnvironmentVariable("OS").StartsWith("Windows")%3B
+ string operatingSystem = System.Environment.GetEnvironmentVariable("OS")%3B
+ runningInWindows = (operatingSystem != null && operatingSystem.StartsWith("Windows"))%3B
}
}
@@ -214,6 +213,10 @@ namespace $([System.String]::Copy($(Category)).Replace(".","_").Replace("\","").
<CanonicalExcludeList Include="%(ExcludeList.FullPath)" Condition="$(HaveExcludes)"/>
</ItemGroup>
+ <PropertyGroup>
+ <TestExecutableReplacement Condition="'$(RuntimeID)' != '' ">testExecutable = testExecutable.Replace("\\", "/")%3B</TestExecutableReplacement>
+ </PropertyGroup>
+
<ItemGroup>
<AllCMDsPresent Include="$(_CMDDIR)\**\*.cmd" />
<AllCMDExcludeFilter Include="@(CanonicalExcludeList)" Condition="$(HaveExcludes)"/>
@@ -244,6 +247,7 @@ namespace $([System.String]::Copy($(Category)).Replace(".","_").Replace("\","").
outputFile = System.IO.Path.GetFullPath(_Global.reportBase + testSubfolder + @"%(AllCMDs.FileName).output.txt")%3B
errorFile = System.IO.Path.GetFullPath(_Global.reportBase + testSubfolder + @"%(AllCMDs.FileName).error.txt")%3B
testExecutable = System.IO.Path.GetFullPath(_Global.testBinaryBase + @"$([System.String]::Copy('%(AllCMDs.FullPath)').Replace("$(_CMDDIR)",''))")%3B
+ $(TestExecutableReplacement)
if (!_Global.runningInWindows) {
testExecutable = testExecutable.Replace(".cmd", ".sh")%3B
diff --git a/tests/runtest.sh b/tests/runtest.sh
index 1c67a70db7..8a917c3bf4 100755
--- a/tests/runtest.sh
+++ b/tests/runtest.sh
@@ -11,8 +11,7 @@ function print_usage {
echo ' --testNativeBinDir="coreclr/bin/obj/Linux.x64.Debug/tests"'
echo ' --coreClrBinDir="coreclr/bin/Product/Linux.x64.Debug"'
echo ' --mscorlibDir="windows/coreclr/bin/Product/Linux.x64.Debug"'
- echo ' --coreFxBinDir="corefx/bin/Linux.AnyCPU.Debug"'
- echo ' --coreFxNativeBinDir="corefx/bin/Linux.x64.Debug"'
+ echo ' --coreFxBinDir="corefx/bin/runtime/netcoreapp-Linux-Debug-x64'
echo ''
echo 'Required arguments:'
echo ' --testRootDir=<path> : Root directory of the test build (e.g. coreclr/bin/tests/Windows_NT.x64.Debug).'
@@ -22,14 +21,13 @@ function print_usage {
echo 'Optional arguments:'
echo ' --coreOverlayDir=<path> : Directory containing core binaries and test dependencies. If not specified, the'
echo ' default is testRootDir/Tests/coreoverlay. This switch overrides --coreClrBinDir,'
- echo ' --mscorlibDir, --coreFxBinDir, and --coreFxNativeBinDir.'
+ echo ' --mscorlibDir, and --coreFxBinDir.'
echo ' --coreClrBinDir=<path> : Directory of the CoreCLR build (e.g. coreclr/bin/Product/Linux.x64.Debug).'
echo ' --mscorlibDir=<path> : Directory containing the built mscorlib.dll. If not specified, it is expected to be'
echo ' in the directory specified by --coreClrBinDir.'
- echo ' --coreFxBinDir="<path>[;<path>]" : List of one or more directories with CoreFX build outputs (semicolon-delimited)'
- echo ' (e.g. "corefx/bin/Linux.AnyCPU.Debug;corefx/bin/Unix.AnyCPU.Debug;corefx/bin/AnyOS.AnyCPU.Debug").'
+ echo ' --coreFxBinDir="<path>" : Directory with CoreFX build outputs'
+ echo ' (e.g. "corefx/bin/runtime/netcoreapp-Linux-Debug-x64")'
echo ' If files with the same name are present in multiple directories, the first one wins.'
- echo ' --coreFxNativeBinDir=<path> : Directory of the CoreFX native build (e.g. corefx/bin/Linux.x64.Debug).'
echo ' --testDir=<path> : Run tests only in the specified directory. The path is relative to the directory'
echo ' specified by --testRootDir. Multiple of this switch may be specified.'
echo ' --testDirFile=<path> : Run tests only in the directories specified by the file at <path>. Paths are listed'
@@ -97,6 +95,7 @@ xunitOutputPath=
xunitTestOutputPath=
# libExtension determines extension for dynamic library files
+# runtimeName determines where CoreFX Runtime files will be located
OSName=$(uname -s)
libExtension=
case $OSName in
@@ -353,12 +352,6 @@ function create_core_overlay {
if [ -z "$coreFxBinDir" ]; then
exit_with_error "$errorSource" "One of --coreOverlayDir or --coreFxBinDir must be specified." "$printUsage"
fi
- if [ -z "$coreFxNativeBinDir" ]; then
- exit_with_error "$errorSource" "One of --coreOverlayDir or --coreFxBinDir must be specified." "$printUsage"
- fi
- if [ ! -d "$coreFxNativeBinDir/Native" ]; then
- exit_with_error "$errorSource" "Directory specified by --coreNativeFxBinDir does not exist: $coreFxNativeBinDir/Native"
- fi
# Create the overlay
coreOverlayDir=$testRootDir/Tests/coreoverlay
@@ -368,21 +361,7 @@ function create_core_overlay {
fi
mkdir "$coreOverlayDir"
- while IFS=';' read -ra coreFxBinDirectories; do
- for currDir in "${coreFxBinDirectories[@]}"; do
- if [ ! -d "$currDir" ]; then
- exit_with_error "$errorSource" "Directory specified in --coreFxBinDir does not exist: $currDir"
- fi
- pushd $currDir > /dev/null
- for dirName in $(find . -iname '*.dll' \! -iwholename '*test*' \! -iwholename '*/ToolRuntime/*' \! -iwholename '*/RemoteExecutorConsoleApp/*' \! -iwholename '*/net*' \! -iwholename '*aot*' -exec dirname {} \; | uniq | sed 's/\.\/\(.*\)/\1/g'); do
- cp -n -v "$currDir/$dirName/$dirName.dll" "$coreOverlayDir/"
- done
- popd $currDur > /dev/null
- done
- done <<< $coreFxBinDir
-
- cp -f -v "$coreFxNativeBinDir/Native/"*."$libExtension" "$coreOverlayDir/" 2>/dev/null
-
+ cp -f -v "$coreFxBinDir/"* "$coreOverlayDir/" 2>/dev/null
cp -f -v "$coreClrBinDir/"* "$coreOverlayDir/" 2>/dev/null
cp -f -v "$mscorlibDir/mscorlib.dll" "$coreOverlayDir/" 2>/dev/null
if [ -d "$mscorlibDir/bin" ]; then
@@ -409,8 +388,7 @@ function precompile_overlay_assemblies {
for fileToPrecompile in ${filesToPrecompile}
do
local filename=${fileToPrecompile}
- if [ $jitdisasm == 1]; then
-
+ if [ $jitdisasm == 1 ]; then
$overlayDir/corerun $overlayDir/jit-dasm.dll --crossgen $overlayDir/crossgen --platform $overlayDir --output $testRootDir/dasm $filename
local exitCode=$?
if [ $exitCode != 0 ]; then
@@ -613,7 +591,7 @@ function print_info_from_core_file {
function download_dumpling_script {
echo "Downloading latest version of dumpling script."
- wget "https://raw.githubusercontent.com/Microsoft/dotnet-reliability/master/src/triage.python/dumpling.py"
+ wget "https://dumpling.azurewebsites.net/api/client/dumpling.py"
local dumpling_script="dumpling.py"
chmod +x $dumpling_script
@@ -644,8 +622,11 @@ function upload_core_file_to_dumpling {
paths_to_add=$coreClrBinDir
fi
+ # Ensure the script has Unix line endings
+ perl -pi -e 's/\r\n|\n|\r/\n/g' "$dumpling_script"
+
# The output from this will include a unique ID for this dump.
- ./$dumpling_script "--corefile" "$core_file_name" "upload" "--addpaths" $paths_to_add "--squelch" | tee -a $dumpling_file
+ ./$dumpling_script "upload" "--dumppath" "$core_file_name" "--incpaths" $paths_to_add "--properties" "Project=CoreCLR" "--squelch" | tee -a $dumpling_file
}
function preserve_core_file {
@@ -968,7 +949,6 @@ coreOverlayDir=
coreClrBinDir=
mscorlibDir=
coreFxBinDir=
-coreFxNativeBinDir=
coreClrObjs=
coreClrSrc=
coverageOutputDir=
@@ -1035,9 +1015,6 @@ do
--coreFxBinDir=*)
coreFxBinDir=${i#*=}
;;
- --coreFxNativeBinDir=*)
- coreFxNativeBinDir=${i#*=}
- ;;
--testDir=*)
testDirectories[${#testDirectories[@]}]=${i#*=}
;;
@@ -1143,7 +1120,7 @@ if [ ! -z "$gcsimulator" ]; then
export RunningGCSimulatorTests=1
fi
-if [ ! -z "$jitdisasm" ]; then
+if [[ ! "$jitdisasm" -eq 0 ]]; then
echo "Running jit disasm"
export RunningJitDisasm=1
fi
diff --git a/tests/scripts/arm32_ci_script.sh b/tests/scripts/arm32_ci_script.sh
index 85ee4d21f5..6745e63145 100755
--- a/tests/scripts/arm32_ci_script.sh
+++ b/tests/scripts/arm32_ci_script.sh
@@ -17,8 +17,8 @@ function usage {
echo ' --mountPath=/opt/linux-arm-emulator-root'
echo ' --buildConfig=Release'
echo ' --testRootDir=~/Downloads/Windows_NT.x64.Release'
- echo ' --mscorlibDir=~/clr/bin/Product/Linux.arm-softfp.Release'
- echo ' --coreFxNativeBinDir=~/cfx/bin/Linux.arm-softfp.Release'
+ echo ' --mscorlibDir=~/clr/bin/Product/Linux.armel.Release'
+ echo ' --coreFxNativeBinDir=~/cfx/bin/Linux.armel.Release'
echo ' --coreFxBinDir="~/cfx/bin/Linux.AnyCPU.Release;~/cfx/bin/Unix.AnyCPU.Release;~/cfx/bin/AnyOS.AnyCPU.Release"'
echo ' --testDirFile=~/clr/tests/testsRunningInsideARM.txt'
echo ''
@@ -213,10 +213,6 @@ function cross_build_coreclr {
(set +x; echo 'Exporting LINUX_ARM_* environment variable')
source "$__ARMEmulRootfs"/dotnet/setenv/setenv_incpath.sh "$__ARMEmulRootfs"
- #Apply the changes needed to build for the emulator rootfs
- (set +x; echo 'Applying cross build patch to suit Linux ARM emulator rootfs')
- git am < "$__ARMEmulRootfs"/dotnet/setenv/coreclr_cross.patch
-
#Apply release optimization patch if needed
if [[ "$__buildConfig" == "Release" ]]; then
(set +x; echo 'Applying release optimization patch to build in Release mode')
@@ -228,7 +224,6 @@ function cross_build_coreclr {
#Reset the code to the upstream version
(set +x; echo 'Rewinding HEAD to master code')
- git reset --hard HEAD^
if [[ "$__buildConfig" == "Release" ]]; then
git reset --hard HEAD^
fi
@@ -316,7 +311,7 @@ __coreFxBinDir=
__testDirFile=
__verboseFlag=
__buildOS="Linux"
-__buildArch="arm-softfp"
+__buildArch="armel"
__buildDirName=
__initialGitHead=`git rev-parse --verify HEAD`
diff --git a/tests/scripts/perf-prep.sh b/tests/scripts/perf-prep.sh
index 27e4100bd6..effdc0a615 100755
--- a/tests/scripts/perf-prep.sh
+++ b/tests/scripts/perf-prep.sh
@@ -59,16 +59,16 @@ python3.5 ./tests/scripts/Microsoft.BenchView.JSONFormat/tools/machinedata.py
# Set up the copies
# Coreclr build containing the tests and mscorlib
-curl http://ci.dot.net/job/$perfBranch/job/master/job/release_windows_nt/lastSuccessfulBuild/artifact/bin/tests/tests.zip -L -o tests.zip
-
+curl https://ci.dot.net/job/$perfBranch/job/master/job/release_windows_nt/lastSuccessfulBuild/artifact/bin/tests/tests.zip -o tests.zip
# Corefx components. We now have full stack builds on all distros we test here, so we can copy straight from CoreFX jobs.
mkdir corefx
-curl http://ci.dot.net/job/dotnet_corefx/job/master/job/ubuntu14.04_release/lastSuccessfulBuild/artifact/bin/build.tar.gz -L -o ./corefx/build.tar.gz
+curl https://ci.dot.net/job/dotnet_corefx/job/master/job/ubuntu14.04_release/lastSuccessfulBuild/artifact/bin/build.tar.gz -o ./corefx/build.tar.gz
# Unpack the corefx binaries
pushd corefx > /dev/null
tar -xf build.tar.gz
+rm build.tar.gz
popd > /dev/null
# Unzip the tests first. Exit with 0
diff --git a/tests/scripts/run-corefx-tests.py b/tests/scripts/run-corefx-tests.py
new file mode 100644
index 0000000000..f0111da19c
--- /dev/null
+++ b/tests/scripts/run-corefx-tests.py
@@ -0,0 +1,333 @@
+#!/usr/bin/env python
+#
+# Licensed to the .NET Foundation under one or more agreements.
+# The .NET Foundation licenses this file to you under the MIT license.
+# See the LICENSE file in the project root for more information.
+#
+##########################################################################
+##########################################################################
+#
+# Module: run-corefx-tests.py
+#
+# Notes:
+#
+# Script to clone the CoreFx repo, build, and run its tests.
+#
+##########################################################################
+##########################################################################
+
+import argparse
+import distutils.dir_util
+import os
+import re
+import shutil
+import subprocess
+import sys
+
+
+##########################################################################
+# Globals
+##########################################################################
+
+Corefx_url = 'https://github.com/dotnet/corefx.git'
+
+# This should be factored out of build.sh
+Unix_name_map = {
+ 'Linux': 'Linux',
+ 'Darwin': 'OSX',
+ 'FreeBSD': 'FreeBSD',
+ 'OpenBSD': 'OpenBSD',
+ 'NetBSD': 'NetBSD',
+ 'SunOS': 'SunOS'
+}
+
+Is_windows = (os.name == 'nt')
+
+##########################################################################
+# Delete protocol
+##########################################################################
+
+def del_rw(action, name, exc):
+ os.chmod(name, 0651)
+ os.remove(name)
+
+##########################################################################
+# Argument Parser
+##########################################################################
+
+description = 'Tool to facilitate running CoreFx tests from the CoreCLR repo'
+
+parser = argparse.ArgumentParser(description=description)
+
+parser.add_argument('-arch', dest='arch', default='x64')
+parser.add_argument('-build_type', dest='build_type', default='Debug')
+parser.add_argument('-clr_root', dest='clr_root', default=None)
+parser.add_argument('-fx_root', dest='fx_root', default=None)
+parser.add_argument('-fx_branch', dest='fx_branch', default='master')
+parser.add_argument('-fx_commit', dest='fx_commit', default=None)
+parser.add_argument('-env_script', dest='env_script', default=None)
+
+
+##########################################################################
+# Helper Functions
+##########################################################################
+
+def validate_args(args):
+ """ Validate all of the arguments parsed.
+ Args:
+ args (argparser.ArgumentParser): Args parsed by the argument parser.
+ Returns:
+ (arch, build_type, clr_root, fx_root, fx_branch, fx_commit, env_script)
+ (str, str, str, str, str, str, str)
+ Notes:
+ If the arguments are valid then return them all in a tuple. If not, raise
+ an exception stating x argument is incorrect.
+ """
+
+ arch = args.arch
+ build_type = args.build_type
+ clr_root = args.clr_root
+ fx_root = args.fx_root
+ fx_branch = args.fx_branch
+ fx_commit = args.fx_commit
+ env_script = args.env_script
+
+ def validate_arg(arg, check):
+ """ Validate an individual arg
+ Args:
+ arg (str|bool): argument to be validated
+ check (lambda: x-> bool): test that returns either True or False
+ : based on whether the check passes.
+
+ Returns:
+ is_valid (bool): Is the argument valid?
+ """
+
+ helper = lambda item: item is not None and check(item)
+
+ if not helper(arg):
+ raise Exception('Argument: %s is not valid.' % (arg))
+
+ valid_archs = ['x86', 'x64', 'arm', 'arm64']
+ valid_build_types = ['Debug', 'Checked', 'Release']
+
+ arch = next((a for a in valid_archs if a.lower() == arch.lower()), arch)
+ build_type = next((b for b in valid_build_types if b.lower() == build_type.lower()), build_type)
+
+ validate_arg(arch, lambda item: item in valid_archs)
+ validate_arg(build_type, lambda item: item in valid_build_types)
+ validate_arg(fx_branch, lambda item: True)
+
+ if fx_commit is None:
+ fx_commit = 'HEAD'
+
+ if clr_root is None:
+ clr_root = nth_dirname(os.path.abspath(sys.argv[0]), 3)
+ else:
+ clr_root = os.path.normpath(clr_root)
+ validate_arg(clr_root, lambda item: os.path.isdir(clr_root))
+
+ if fx_root is None:
+ fx_root = os.path.join(clr_root, '_', 'fx')
+ else:
+ fx_root = os.path.normpath(fx_root)
+
+ if env_script is not None:
+ validate_arg(env_script, lambda item: os.path.isfile(env_script))
+ env_script = os.path.abspath(env_script)
+
+ args = (arch, build_type, clr_root, fx_root, fx_branch, fx_commit, env_script)
+
+ log('Configuration:')
+ log(' arch: %s' % arch)
+ log(' build_type: %s' % build_type)
+ log(' clr_root: %s' % clr_root)
+ log(' fx_root: %s' % fx_root)
+ log(' fx_branch: %s' % fx_branch)
+ log(' fx_commit: %s' % fx_commit)
+ log(' env_script: %s' % env_script)
+
+ return args
+
+def nth_dirname(path, n):
+ """ Find the Nth parent directory of the given path
+ Args:
+ path (str): path name containing at least N components
+ n (int): num of basenames to remove
+ Returns:
+ outpath (str): path with the last n components removed
+ Notes:
+ If n is 0, path is returned unmodified
+ """
+
+ assert n >= 0
+
+ for i in range(0, n):
+ path = os.path.dirname(path)
+
+ return path
+
+
+def dotnet_rid_os(dotnet_path):
+ """ Determine the OS identifier from the RID as reported by dotnet
+ Args:
+ dotnet_path (str): path to folder containing dotnet(.exe)
+ Returns:
+ rid_os (str): OS component of RID as reported by dotnet
+ """
+ dotnet_info = subprocess.check_output([os.path.join(dotnet_path, 'dotnet'), '--info'])
+ m = re.search('^\s*RID:\s+([^-]*)-(\S*)\s*$', dotnet_info, re.MULTILINE)
+ return m.group(1)
+
+
+def log(message):
+ """ Print logging information
+ Args:
+ message (str): message to be printed
+ """
+
+ print '[%s]: %s' % (sys.argv[0], message)
+
+##########################################################################
+# Main
+##########################################################################
+
+def main(args):
+ global Corefx_url
+ global Unix_name_map
+
+ testing = False
+
+ arch, build_type, clr_root, fx_root, fx_branch, fx_commit, env_script = validate_args(
+ args)
+
+ clr_os = 'Windows_NT' if Is_windows else Unix_name_map[os.uname()[0]]
+
+ core_root = os.path.join(clr_root,
+ 'bin',
+ 'Product',
+ '%s.%s.%s' % (clr_os, arch, build_type))
+
+ # corefx creates both files that are read-only and files that include non-ascii
+ # characters. Using onerror=del_rw allows us to delete all of the read-only files.
+ # To delete the files with non-ascii characters, when rmtree fails due to those
+ # files, we then will call rd on Windows.
+
+ if not testing and os.path.exists(fx_root):
+ if Is_windows:
+ while True:
+ res = subprocess.check_output(['tasklist'])
+ if not 'VBCSCompiler.exe' in res:
+ break
+ os.chdir(fx_root)
+ os.system('git clean -fxd')
+ os.chdir(clr_root)
+ shutil.rmtree(fx_root, onerror=del_rw)
+
+ # Clone the corefx branch
+
+ command = 'git clone -b %s --single-branch %s %s' % (
+ fx_branch, Corefx_url, fx_root)
+ log(command)
+ if testing:
+ if not os.path.exists(fx_root):
+ os.makedirs(fx_root)
+ returncode = 0
+ else:
+ returncode = os.system(command)
+
+ # Change directory to the corefx root
+
+ cwd = os.getcwd()
+ log('[cd] ' + fx_root)
+ os.chdir(fx_root)
+
+ # Checkout the appropriate corefx commit
+
+ command = "git checkout %s" % fx_commit
+ log(command)
+ returncode = 0 if testing else os.system(command)
+ if not returncode == 0:
+ sys.exit(returncode)
+
+ # On Unix, coreFx build.sh requires HOME to be set, and it isn't by default
+ # under our CI system, so set it now.
+
+ if not Is_windows:
+ fx_home = os.path.join(fx_root, 'tempHome')
+ if not os.path.exists(fx_home):
+ os.makedirs(fx_home)
+ os.putenv('HOME', fx_home)
+ log('HOME=' + fx_home)
+
+ # Determine the RID to specify the to corefix build scripts. This seems to
+ # be way harder than it ought to be.
+
+ if testing:
+ rid_os = dotnet_rid_os('')
+ else:
+ if Is_windows:
+ rid_os = "win7"
+ else:
+ rid_os = dotnet_rid_os(os.path.join(clr_root, 'Tools', 'dotnetcli'))
+
+ # Gather up some arguments to pass to both build and build-tests.
+
+ config_args = '-Release -RuntimeOS=%s -ArchGroup=%s' % (rid_os, arch)
+
+ # Run the primary (non-test) corefx build
+
+ command = ' '.join(('build.cmd' if Is_windows else './build.sh', config_args))
+ log(command)
+ returncode = 0 if testing else os.system(command)
+ if returncode != 0:
+ sys.exit(returncode)
+
+ # Copy the coreclr runtime we wish to run tests against. This is the recommended
+ # hack until a full-stack test solution is ready. This assumes there is a single
+ # directory under <fx_root>/bin/runtime into which we copy coreclr binaries. We
+ # assume the appropriate coreclr has already been built.
+
+ fx_runtime_dir = os.path.join(fx_root, 'bin', 'runtime')
+ overlay_dest = os.path.join(fx_runtime_dir, os.listdir(fx_runtime_dir)[0])
+ log('[overlay] %s -> %s' % (core_root, overlay_dest))
+ if not testing:
+ distutils.dir_util.copy_tree(core_root, overlay_dest)
+
+ # Build the build-tests command line.
+
+ if Is_windows:
+ command = 'build-tests.cmd'
+ if env_script is not None:
+ command = ('cmd /c %s&&' % env_script) + command
+ else:
+ command = './build-tests.sh'
+ if env_script is not None:
+ command = ('. %s;' % env_script) + command
+
+ command = ' '.join((
+ command,
+ config_args,
+ '--',
+ '/p:WithoutCategories=IgnoreForCI'
+ ))
+
+ if not Is_windows:
+ command += ' /p:TestWithLocalNativeLibraries=true'
+
+ # Run the corefx test build and run the tests themselves.
+
+ log(command)
+ returncode = 0 if testing else os.system(command)
+
+ sys.exit(returncode)
+
+
+##########################################################################
+# setup for Main
+##########################################################################
+
+if __name__ == '__main__':
+ Args = parser.parse_args(sys.argv[1:])
+
+ main(Args)
diff --git a/tests/scripts/run-xunit-perf.cmd b/tests/scripts/run-xunit-perf.cmd
index a7d3c410d7..060ba33171 100644
--- a/tests/scripts/run-xunit-perf.cmd
+++ b/tests/scripts/run-xunit-perf.cmd
@@ -65,12 +65,16 @@ goto :EOF
:DOIT
set BENCHNAME=%~n1
+set BENCHDIR=%~p1
set PERFOUT=perf-%BENCHNAME%
set XMLOUT=%PERFOUT%-summary.xml
echo --- Running %BENCHNAME%
+@rem copy benchmark and any input files
+
xcopy /s %1 . >> %RUNLOG%
+xcopy /s %BENCHDIR%*.txt . >> %RUNLOG%
set CORE_ROOT=%CORECLR_REPO%\sandbox
diff --git a/tests/scripts/run-xunit-perf.sh b/tests/scripts/run-xunit-perf.sh
index 85ac43321b..27f84c2011 100755
--- a/tests/scripts/run-xunit-perf.sh
+++ b/tests/scripts/run-xunit-perf.sh
@@ -12,7 +12,6 @@ function print_usage {
echo ' --coreClrBinDir="coreclr/bin/Product/Linux.x64.Debug"'
echo ' --mscorlibDir="windows/coreclr/bin/Product/Linux.x64.Debug"'
echo ' --coreFxBinDir="corefx/bin/Linux.AnyCPU.Debug"'
- echo ' --coreFxNativeBinDir="corefx/bin/Linux.x64.Debug"'
echo ''
echo 'Required arguments:'
echo ' --testRootDir=<path> : Root directory of the test build (e.g. coreclr/bin/tests/Windows_NT.x64.Debug).'
@@ -22,14 +21,11 @@ function print_usage {
echo 'Optional arguments:'
echo ' --coreOverlayDir=<path> : Directory containing core binaries and test dependencies. If not specified, the'
echo ' default is testRootDir/Tests/coreoverlay. This switch overrides --coreClrBinDir,'
- echo ' --mscorlibDir, --coreFxBinDir, and --coreFxNativeBinDir.'
+ echo ' --mscorlibDir, and --coreFxBinDir.'
echo ' --coreClrBinDir=<path> : Directory of the CoreCLR build (e.g. coreclr/bin/Product/Linux.x64.Debug).'
echo ' --mscorlibDir=<path> : Directory containing the built mscorlib.dll. If not specified, it is expected to be'
echo ' in the directory specified by --coreClrBinDir.'
- echo ' --coreFxBinDir="<path>[;<path>]" : List of one or more directories with CoreFX build outputs (semicolon-delimited)'
- echo ' (e.g. "corefx/bin/Linux.AnyCPU.Debug;corefx/bin/Unix.AnyCPU.Debug;corefx/bin/AnyOS.AnyCPU.Debug").'
- echo ' If files with the same name are present in multiple directories, the first one wins.'
- echo ' --coreFxNativeBinDir=<path> : Directory of the CoreFX native build (e.g. corefx/bin/Linux.x64.Debug).'
+ echo ' --coreFxBinDir="<path>" : The path to the unpacked runtime folder that is produced as part of a CoreFX build'
echo ' --uploadToBenchview : Specify this flag in order to have the results of the run uploaded to Benchview.'
echo ' This also requires that the os flag and runtype flag to be set. Lastly you must'
echo ' also have the BV_UPLOAD_SAS_TOKEN set to a SAS token for the Benchview upload container'
@@ -210,12 +206,6 @@ function create_core_overlay {
if [ -z "$coreFxBinDir" ]; then
exit_with_error "$errorSource" "One of --coreOverlayDir or --coreFxBinDir must be specified." "$printUsage"
fi
- if [ -z "$coreFxNativeBinDir" ]; then
- exit_with_error "$errorSource" "One of --coreOverlayDir or --coreFxBinDir must be specified." "$printUsage"
- fi
- if [ ! -d "$coreFxNativeBinDir/Native" ]; then
- exit_with_error "$errorSource" "Directory specified by --coreNativeFxBinDir does not exist: $coreFxNativeBinDir/Native"
- fi
# Create the overlay
coreOverlayDir=$testRootDir/Tests/coreoverlay
@@ -225,21 +215,7 @@ function create_core_overlay {
fi
mkdir "$coreOverlayDir"
- while IFS=';' read -ra coreFxBinDirectories; do
- for currDir in "${coreFxBinDirectories[@]}"; do
- if [ ! -d "$currDir" ]; then
- exit_with_error "$errorSource" "Directory specified in --coreFxBinDir does not exist: $currDir"
- fi
- pushd $currDir > /dev/null
- for dirName in $(find . -iname '*.dll' \! -iwholename '*test*' \! -iwholename '*/ToolRuntime/*' \! -iwholename '*/RemoteExecutorConsoleApp/*' \! -iwholename '*/net*' \! -iwholename '*aot*' -exec dirname {} \; | uniq | sed 's/\.\/\(.*\)/\1/g'); do
- cp -n -v "$currDir/$dirName/$dirName.dll" "$coreOverlayDir/"
- done
- popd $currDur > /dev/null
- done
- done <<< $coreFxBinDir
-
- cp -f -v "$coreFxNativeBinDir/Native/"*."$libExtension" "$coreOverlayDir/" 2>/dev/null
-
+ cp -f -v "$coreFxBinDir"/* "$coreOverlayDir/" 2>/dev/null
cp -f -v "$coreClrBinDir/"* "$coreOverlayDir/" 2>/dev/null
cp -f -v "$mscorlibDir/mscorlib.dll" "$coreOverlayDir/"
cp -n -v "$testDependenciesDir"/* "$coreOverlayDir/" 2>/dev/null
@@ -251,7 +227,7 @@ function create_core_overlay {
function precompile_overlay_assemblies {
- if [ $doCrossgen == 1 ]; then
+ if [ "$doCrossgen" == "1" ]; then
local overlayDir=$CORE_ROOT
@@ -315,7 +291,6 @@ coreOverlayDir=
coreClrBinDir=
mscorlibDir=
coreFxBinDir=
-coreFxNativeBinDir=
uploadToBenchview=
benchViewOS=
runType=
@@ -345,9 +320,6 @@ do
--coreFxBinDir=*)
coreFxBinDir=${i#*=}
;;
- --coreFxNativeBinDir=*)
- coreFxNativeBinDir=${i#*=}
- ;;
--benchViewOS=*)
benchViewOS=${i#*=}
;;
@@ -421,6 +393,7 @@ test=$(basename $testcase)
testname=$(basename $testcase .exe)
echo "....Running $testname"
cp $testcase .
+cp $testcase-*.txt .
chmod u+x ./corerun
echo "./corerun Microsoft.DotNet.xunit.performance.runner.cli.dll $test -runner xunit.console.netcore.exe -runnerhost ./corerun -verbose -runid perf-$testname"
diff --git a/tests/src/CLRTest.Execute.Bash.targets b/tests/src/CLRTest.Execute.Bash.targets
index 60270a14da..c487468149 100644
--- a/tests/src/CLRTest.Execute.Bash.targets
+++ b/tests/src/CLRTest.Execute.Bash.targets
@@ -274,6 +274,7 @@ $(BashCLRTestArgPrep)
<!-- NOTE! semicolons must be escaped with %3B boooo -->
<_CLRTestExecutionScriptText>
<![CDATA[
+%23%21/usr/bin/env bash
TakeLock()
{
echo "in takeLock"
diff --git a/tests/src/CLRTest.Jit.targets b/tests/src/CLRTest.Jit.targets
index 4eb632722e..1a0b5e3fce 100644
--- a/tests/src/CLRTest.Jit.targets
+++ b/tests/src/CLRTest.Jit.targets
@@ -25,17 +25,18 @@ WARNING: When setting properties based on their current state (for example:
<PropertyGroup>
<InputAssemblyName Condition="'$(CLRTestKind)' == 'RunOnly'">$([MSBuild]::MakeRelative($(OutputPath), $(_CLRTestToRunFileFullPath)).Replace("\","/"))</InputAssemblyName>
<InputAssemblyName Condition="'$(CLRTestKind)' == 'BuildAndRun'">$(MSBuildProjectName).exe</InputAssemblyName>
- <JitDisasmOut>$(BaseOutputPathWithConfig.Replace("\","/"))dasm/$(BuildProjectRelativeDir.Replace("\","/"))</JitDisasmOut>
+ <JitDisasmOut>$([MSBuild]::MakeRelative($(OutputPath), $(BaseOutputPathWithConfig)dasm\$(BuildProjectRelativeDir)).Replace("\","/"))</JitDisasmOut>
<JitDisasmBashScript>
<![CDATA[
# JitDisasm Script
if [ ! -z $RunningJitDisasm ]
then
- echo $CORE_ROOT/corerun "$CORE_ROOT/jit-dasm.dll" --crossgen $CORE_ROOT/crossgen.exe --platform $CORE_ROOT --output $(JitDisasmOut) $(InputAssemblyName)
- "$CORE_ROOT/corerun" "$CORE_ROOT/jit-dasm" --crossgen $CORE_ROOT/crossgen.exe --platform $CORE_ROOT --output $(JitDisasmOut) $(InputAssemblyName)
- if [ $ERRORLEVEL -ne 0 ]
+ echo $CORE_ROOT/corerun "$CORE_ROOT/jit-dasm.dll" --crossgen $CORE_ROOT/crossgen --platform $CORE_ROOT --output $(JitDisasmOut) $(InputAssemblyName)
+ "$CORE_ROOT/corerun" "$CORE_ROOT/jit-dasm.dll" --crossgen $CORE_ROOT/crossgen --platform $CORE_ROOT --output $(JitDisasmOut) $(InputAssemblyName)
+ _jdExitCode=$?
+ if [ $_jdExitCode -ne 0 ]
then
- echo EXECUTION OF JIT-DASM - FAILED $ERRORLEVEL
+ echo EXECUTION OF JIT-DASM - FAILED $_jdExitCode
exit 1
fi
fi
@@ -49,7 +50,7 @@ fi
<PropertyGroup>
<InputAssemblyName Condition="'$(CLRTestKind)' == 'RunOnly'">$([MSBuild]::MakeRelative($(OutputPath), $(_CLRTestToRunFileFullPath)))</InputAssemblyName>
<InputAssemblyName Condition="'$(CLRTestKind)' == 'BuildAndRun'">$(MSBuildProjectName).exe</InputAssemblyName>
- <JitDisasmOut>$(BaseOutputPathWithConfig)dasm\$(BuildProjectRelativeDir)</JitDisasmOut>
+ <JitDisasmOut>$([MSBuild]::MakeRelative($(OutputPath), $(BaseOutputPathWithConfig)dasm\$(BuildProjectRelativeDir)))</JitDisasmOut>
<JitDisasmBatchScript>
<![CDATA[
REM JitDisasm Script
diff --git a/tests/src/Common/Coreclr.TestWrapper/CoreclrTestWrapperLib.cs b/tests/src/Common/Coreclr.TestWrapper/CoreclrTestWrapperLib.cs
index dbdfc0ef94..ddb905087b 100644
--- a/tests/src/Common/Coreclr.TestWrapper/CoreclrTestWrapperLib.cs
+++ b/tests/src/Common/Coreclr.TestWrapper/CoreclrTestWrapperLib.cs
@@ -35,6 +35,10 @@ namespace CoreclrTestLib
string gcstressVar = Environment.GetEnvironmentVariable(GC_STRESS_LEVEL);
+ // Check if we are running in Windows
+ string operatingSystem = System.Environment.GetEnvironmentVariable("OS");
+ bool runningInWindows = (operatingSystem != null && operatingSystem.StartsWith("Windows"));
+
var outputStream = new FileStream(outputFile, FileMode.Create);
var errorStream = new FileStream(errorFile, FileMode.Create);
@@ -49,7 +53,18 @@ namespace CoreclrTestLib
process.StartInfo.EnvironmentVariables["COMPlus_GCStress"] = gcstressVar;
}
- process.StartInfo.FileName = executable;
+ // Windows can run the executable implicitly
+ if (runningInWindows)
+ {
+ process.StartInfo.FileName = executable;
+ }
+ // Non-windows needs to be told explicitly to run through /bin/bash shell
+ else
+ {
+ process.StartInfo.FileName = "/bin/bash";
+ process.StartInfo.Arguments = executable;
+ }
+
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
diff --git a/tests/src/Common/build_against_pkg_dependencies/project.json b/tests/src/Common/build_against_pkg_dependencies/project.json
index 562485594f..719be5949c 100644
--- a/tests/src/Common/build_against_pkg_dependencies/project.json
+++ b/tests/src/Common/build_against_pkg_dependencies/project.json
@@ -1,10 +1,10 @@
{
"dependencies": {
- "Microsoft.NETCore.ILAsm": "1.2.0-beta-24820-02",
- "Microsoft.NETCore.ILDAsm": "1.2.0-beta-24820-02",
- "Microsoft.NETCore.Jit": "1.2.0-beta-24820-02",
- "Microsoft.NETCore.Runtime.CoreCLR": "1.2.0-beta-24820-02",
- "Microsoft.NETCore.TestHost": "1.2.0-beta-24820-02"
+ "Microsoft.NETCore.ILAsm": "2.0.0-beta-25007-01",
+ "Microsoft.NETCore.ILDAsm": "2.0.0-beta-25007-01",
+ "Microsoft.NETCore.Jit": "2.0.0-beta-25007-01",
+ "Microsoft.NETCore.Runtime.CoreCLR": "2.0.0-beta-25007-01",
+ "Microsoft.NETCore.TestHost": "2.0.0-beta-25007-01"
},
"frameworks": {
"netcoreapp1.1": {
diff --git a/tests/src/Common/empty/project.json b/tests/src/Common/empty/project.json
index 1954111901..cc74ba8472 100644
--- a/tests/src/Common/empty/project.json
+++ b/tests/src/Common/empty/project.json
@@ -8,9 +8,13 @@
"win7-x86": {},
"win7-x64": {},
"ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "ubuntu.16.10-x64": {},
"osx.10.10-x64": {},
"centos.7-x64": {},
"rhel.7-x64": {},
- "debian.8-x64": {}
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
}
}
diff --git a/tests/src/Common/netcoreapp/project.json b/tests/src/Common/netcoreapp/project.json
index 51193fc015..ab1528282e 100644
--- a/tests/src/Common/netcoreapp/project.json
+++ b/tests/src/Common/netcoreapp/project.json
@@ -1,74 +1,9 @@
{
- "version": "1.0.0-*",
- "buildOptions": {
- "debugType": "portable",
- "emitEntryPoint": true
- },
"dependencies": {
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
- "Microsoft.NETCore.Targets": "1.2.0-beta-24820-02",
- "System.Threading.Thread": "4.4.0-beta-24820-02",
- "System.Collections": "4.4.0-beta-24820-02",
- "System.Xml.XmlSerializer": "4.4.0-beta-24820-02",
- "System.Collections.Concurrent": "4.4.0-beta-24820-02",
- "System.ObjectModel": "4.4.0-beta-24820-02",
- "System.Runtime.Numerics": "4.4.0-beta-24820-02",
- "System.Collections.NonGeneric": "4.4.0-beta-24820-02",
- "System.Collections.Specialized": "4.4.0-beta-24820-02",
- "System.ComponentModel": "4.4.0-beta-24820-02",
- "System.Reflection.Emit.Lightweight": "4.4.0-beta-24820-02",
- "System.Reflection.TypeExtensions": "4.4.0-beta-24820-02",
- "System.Console": "4.4.0-beta-24820-02",
- "System.Diagnostics.Contracts": "4.4.0-beta-24820-02",
- "System.Diagnostics.Debug": "4.4.0-beta-24820-02",
- "System.Diagnostics.Process": "4.4.0-beta-24820-02",
- "System.Diagnostics.Tools": "4.4.0-beta-24820-02",
- "System.Diagnostics.Tracing": "4.4.0-beta-24820-02",
- "System.Dynamic.Runtime": "4.4.0-beta-24820-02",
- "System.Globalization": "4.4.0-beta-24820-02",
- "System.Globalization.Calendars": "4.4.0-beta-24820-02",
- "System.IO": "4.4.0-beta-24820-02",
- "System.IO.FileSystem": "4.4.0-beta-24820-02",
- "System.IO.FileSystem.Primitives": "4.4.0-beta-24820-02",
- "System.Linq": "4.4.0-beta-24820-02",
- "System.Linq.Queryable": "4.4.0-beta-24820-02",
- "System.Linq.Expressions": "4.4.0-beta-24820-02",
- "System.Reflection": "4.4.0-beta-24820-02",
- "System.Reflection.Extensions": "4.4.0-beta-24820-02",
- "System.Resources.ResourceManager": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.CompilerServices.Unsafe": "4.4.0-beta-24820-02",
- "System.Runtime.Extensions": "4.4.0-beta-24820-02",
- "System.Runtime.Handles": "4.4.0-beta-24820-02",
- "System.Runtime.InteropServices": "4.4.0-beta-24820-02",
- "System.Runtime.InteropServices.RuntimeInformation": "4.4.0-beta-24820-02",
- "System.Runtime.Loader": "4.4.0-beta-24820-02",
- "System.Security.Cryptography.Algorithms": "4.4.0-beta-24820-02",
- "System.Text.Encoding": "4.4.0-beta-24820-02",
- "System.Text.Encoding.Extensions": "4.4.0-beta-24820-02",
- "System.Text.RegularExpressions": "4.4.0-beta-24820-02",
- "System.Threading": "4.4.0-beta-24820-02",
- "System.Threading.AccessControl": "4.4.0-beta-24820-02",
- "System.Threading.Overlapped": "4.4.0-beta-24820-02",
- "System.Threading.Tasks": "4.4.0-beta-24820-02",
- "System.Threading.Tasks.Parallel": "4.4.0-beta-24820-02",
- "System.Threading.ThreadPool": "4.4.0-beta-24820-02",
- "System.Threading.Timer": "4.4.0-beta-24820-02",
- "System.Xml.ReaderWriter": "4.4.0-beta-24820-02",
- "System.Xml.XDocument": "4.4.0-beta-24820-02",
- "System.Xml.XmlDocument": "4.4.0-beta-24820-02",
- "System.Xml.XPath": "4.4.0-beta-24820-02",
- "System.Xml.XPath.XmlDocument": "4.4.0-beta-24820-02",
- "System.Numerics.Vectors": "4.4.0-beta-24820-02"
+ "Microsoft.NETCore.App": "2.0.0-beta-001494-00",
+ "System.Runtime.CompilerServices.Unsafe": "4.4.0-beta-24913-02"
},
"frameworks": {
- "netcoreapp1.1": {
- "dependencies": {
- "Microsoft.NETCore.Runtime.CoreCLR": "1.2.0-beta-24820-02"
- }
- }
- },
- "runtimes": {
- "win7-x64": {}
+ "netcoreapp2.0": { }
}
}
diff --git a/tests/src/Common/targeting_pack_ref/project.json b/tests/src/Common/targeting_pack_ref/project.json
index c1f033b946..1743f6fc8a 100644
--- a/tests/src/Common/targeting_pack_ref/project.json
+++ b/tests/src/Common/targeting_pack_ref/project.json
@@ -1,6 +1,6 @@
{
"dependencies": {
- "Microsoft.TargetingPack.Private.CoreCLR": "1.2.0-beta-24820-02"
+ "Microsoft.TargetingPack.Private.CoreCLR": "2.0.0-beta-25007-01"
},
"frameworks": {
"netcoreapp1.1": {
@@ -14,9 +14,13 @@
"win7-x86": {},
"win7-x64": {},
"ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "ubuntu.16.10-x64": {},
"osx.10.10-x64": {},
"centos.7-x64": {},
"rhel.7-x64": {},
- "debian.8-x64": {}
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
}
}
diff --git a/tests/src/Common/test_dependencies/project.json b/tests/src/Common/test_dependencies/project.json
index 5f059148b8..771391a989 100644
--- a/tests/src/Common/test_dependencies/project.json
+++ b/tests/src/Common/test_dependencies/project.json
@@ -7,67 +7,68 @@
"Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0040",
- "Microsoft.Win32.Primitives": "4.4.0-beta-24820-02",
+ "Microsoft.Win32.Primitives": "4.4.0-beta-24913-02",
"Newtonsoft.Json": "8.0.3",
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
- "Microsoft.NETCore.Targets": "1.2.0-beta-24820-02",
- "System.Collections.Immutable": "1.4.0-beta-24820-02",
- "System.Threading.Thread": "4.4.0-beta-24820-02",
- "System.Collections": "4.4.0-beta-24820-02",
- "System.Xml.XmlSerializer": "4.4.0-beta-24820-02",
- "System.Collections.Concurrent": "4.4.0-beta-24820-02",
- "System.ObjectModel": "4.4.0-beta-24820-02",
- "System.Runtime.Numerics": "4.4.0-beta-24820-02",
- "System.Collections.NonGeneric": "4.4.0-beta-24820-02",
- "System.Collections.Specialized": "4.4.0-beta-24820-02",
- "System.ComponentModel": "4.4.0-beta-24820-02",
- "System.Reflection.Emit.Lightweight": "4.4.0-beta-24820-02",
- "System.Reflection.TypeExtensions": "4.4.0-beta-24820-02",
- "System.Console": "4.4.0-beta-24820-02",
- "System.Diagnostics.Contracts": "4.4.0-beta-24820-02",
- "System.Diagnostics.Debug": "4.4.0-beta-24820-02",
- "System.Diagnostics.Process": "4.4.0-beta-24820-02",
- "System.Diagnostics.Tools": "4.4.0-beta-24820-02",
- "System.Diagnostics.Tracing": "4.4.0-beta-24820-02",
- "System.Dynamic.Runtime": "4.4.0-beta-24820-02",
- "System.Globalization": "4.4.0-beta-24820-02",
- "System.Globalization.Calendars": "4.4.0-beta-24820-02",
- "System.IO": "4.4.0-beta-24820-02",
- "System.IO.FileSystem": "4.4.0-beta-24820-02",
- "System.IO.FileSystem.Primitives": "4.4.0-beta-24820-02",
- "System.Linq": "4.4.0-beta-24820-02",
- "System.Linq.Queryable": "4.4.0-beta-24820-02",
- "System.Linq.Expressions": "4.4.0-beta-24820-02",
- "System.Reflection": "4.4.0-beta-24820-02",
- "System.Reflection.Extensions": "4.4.0-beta-24820-02",
- "System.Resources.ResourceManager": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.CompilerServices.Unsafe": "4.4.0-beta-24820-02",
- "System.Runtime.Extensions": "4.4.0-beta-24820-02",
- "System.Runtime.Handles": "4.4.0-beta-24820-02",
- "System.Runtime.InteropServices": "4.4.0-beta-24820-02",
- "System.Runtime.InteropServices.RuntimeInformation": "4.4.0-beta-24820-02",
- "System.Runtime.Loader": "4.4.0-beta-24820-02",
- "System.Runtime.Serialization.Json": "4.4.0-beta-24820-02",
- "System.Runtime.Serialization.Primitives": "4.4.0-beta-24820-02",
- "System.Runtime.Serialization.Xml": "4.4.0-beta-24820-02",
- "System.Security.Cryptography.Algorithms": "4.4.0-beta-24820-02",
- "System.Text.Encoding": "4.4.0-beta-24820-02",
- "System.Text.Encoding.Extensions": "4.4.0-beta-24820-02",
- "System.Text.RegularExpressions": "4.4.0-beta-24820-02",
- "System.Threading": "4.4.0-beta-24820-02",
- "System.Threading.AccessControl": "4.4.0-beta-24820-02",
- "System.Threading.Overlapped": "4.4.0-beta-24820-02",
- "System.Threading.Tasks": "4.4.0-beta-24820-02",
- "System.Threading.Tasks.Parallel": "4.4.0-beta-24820-02",
- "System.Threading.ThreadPool": "4.4.0-beta-24820-02",
- "System.Threading.Timer": "4.4.0-beta-24820-02",
- "System.Xml.ReaderWriter": "4.4.0-beta-24820-02",
- "System.Xml.XDocument": "4.4.0-beta-24820-02",
- "System.Xml.XmlDocument": "4.4.0-beta-24820-02",
- "System.Xml.XPath": "4.4.0-beta-24820-02",
- "System.Xml.XPath.XmlDocument": "4.4.0-beta-24820-02",
- "System.Numerics.Vectors": "4.4.0-beta-24820-02"
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
+ "Microsoft.NETCore.Targets": "1.2.0-beta-24913-02",
+ "System.Collections.Immutable": "1.4.0-beta-24913-02",
+ "System.Threading.Thread": "4.4.0-beta-24913-02",
+ "System.Collections": "4.4.0-beta-24913-02",
+ "System.Xml.XmlSerializer": "4.4.0-beta-24913-02",
+ "System.Collections.Concurrent": "4.4.0-beta-24913-02",
+ "System.ObjectModel": "4.4.0-beta-24913-02",
+ "System.Runtime.Numerics": "4.4.0-beta-24913-02",
+ "System.Collections.NonGeneric": "4.4.0-beta-24913-02",
+ "System.Collections.Specialized": "4.4.0-beta-24913-02",
+ "System.ComponentModel": "4.4.0-beta-24913-02",
+ "System.Reflection.Emit.Lightweight": "4.4.0-beta-24913-02",
+ "System.Reflection.TypeExtensions": "4.4.0-beta-24913-02",
+ "System.Console": "4.4.0-beta-24913-02",
+ "System.Diagnostics.Contracts": "4.4.0-beta-24913-02",
+ "System.Diagnostics.Debug": "4.4.0-beta-24913-02",
+ "System.Diagnostics.Process": "4.4.0-beta-24913-02",
+ "System.Diagnostics.Tools": "4.4.0-beta-24913-02",
+ "System.Diagnostics.Tracing": "4.4.0-beta-24913-02",
+ "System.Dynamic.Runtime": "4.4.0-beta-24913-02",
+ "System.Globalization": "4.4.0-beta-24913-02",
+ "System.Globalization.Calendars": "4.4.0-beta-24913-02",
+ "System.IO": "4.4.0-beta-24913-02",
+ "System.IO.FileSystem": "4.4.0-beta-24913-02",
+ "System.IO.FileSystem.Primitives": "4.4.0-beta-24913-02",
+ "System.Linq": "4.4.0-beta-24913-02",
+ "System.Linq.Queryable": "4.4.0-beta-24913-02",
+ "System.Linq.Expressions": "4.4.0-beta-24913-02",
+ "System.Memory": "4.4.0-beta-24913-02",
+ "System.Reflection": "4.4.0-beta-24913-02",
+ "System.Reflection.Extensions": "4.4.0-beta-24913-02",
+ "System.Resources.ResourceManager": "4.4.0-beta-24913-02",
+ "System.Runtime": "4.4.0-beta-24913-02",
+ "System.Runtime.CompilerServices.Unsafe": "4.4.0-beta-24913-02",
+ "System.Runtime.Extensions": "4.4.0-beta-24913-02",
+ "System.Runtime.Handles": "4.4.0-beta-24913-02",
+ "System.Runtime.InteropServices": "4.4.0-beta-24913-02",
+ "System.Runtime.InteropServices.RuntimeInformation": "4.4.0-beta-24913-02",
+ "System.Runtime.Loader": "4.4.0-beta-24913-02",
+ "System.Runtime.Serialization.Json": "4.4.0-beta-24913-02",
+ "System.Runtime.Serialization.Primitives": "4.4.0-beta-24913-02",
+ "System.Runtime.Serialization.Xml": "4.4.0-beta-24913-02",
+ "System.Security.Cryptography.Algorithms": "4.4.0-beta-24913-02",
+ "System.Text.Encoding": "4.4.0-beta-24913-02",
+ "System.Text.Encoding.Extensions": "4.4.0-beta-24913-02",
+ "System.Text.RegularExpressions": "4.4.0-beta-24913-02",
+ "System.Threading": "4.4.0-beta-24913-02",
+ "System.Threading.AccessControl": "4.4.0-beta-24913-02",
+ "System.Threading.Overlapped": "4.4.0-beta-24913-02",
+ "System.Threading.Tasks": "4.4.0-beta-24913-02",
+ "System.Threading.Tasks.Parallel": "4.4.0-beta-24913-02",
+ "System.Threading.ThreadPool": "4.4.0-beta-24913-02",
+ "System.Threading.Timer": "4.4.0-beta-24913-02",
+ "System.Xml.ReaderWriter": "4.4.0-beta-24913-02",
+ "System.Xml.XDocument": "4.4.0-beta-24913-02",
+ "System.Xml.XmlDocument": "4.4.0-beta-24913-02",
+ "System.Xml.XPath": "4.4.0-beta-24913-02",
+ "System.Xml.XPath.XmlDocument": "4.4.0-beta-24913-02",
+ "System.Numerics.Vectors": "4.4.0-beta-24913-02"
},
"frameworks": {
"netcoreapp1.1": {
@@ -81,9 +82,13 @@
"win7-x86": {},
"win7-x64": {},
"ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "ubuntu.16.10-x64": {},
"osx.10.10-x64": {},
"centos.7-x64": {},
"rhel.7-x64": {},
- "debian.8-x64": {}
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
}
}
diff --git a/tests/src/Common/test_runtime/project.json b/tests/src/Common/test_runtime/project.json
index 2c7c15f414..ef47999b2c 100644
--- a/tests/src/Common/test_runtime/project.json
+++ b/tests/src/Common/test_runtime/project.json
@@ -1,14 +1,15 @@
{
"dependencies": {
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
"Microsoft.DotNet.CoreCLR.TestDependencies": "1.0.0-prerelease",
- "jit-dasm": "0.0.1.1",
+ "jit-dasm": "0.0.1.4",
"cijobs": "0.0.1.2",
- "jit-analyze": "0.0.1.0"
+ "jit-analyze": "0.0.1.1"
},
"frameworks": {
"netcoreapp1.1": {
"imports": [
- "dnxcore50",
+ "dnxcore50",
"portable-net45+win8"
]
}
@@ -17,9 +18,13 @@
"win7-x86": {},
"win7-x64": {},
"ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "ubuntu.16.10-x64": {},
"osx.10.10-x64": {},
"centos.7-x64": {},
"rhel.7-x64": {},
- "debian.8-x64": {}
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
}
}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor4.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor4.csproj
deleted file mode 100644
index 54149adfc8..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor4.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimector4.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor6.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor6.csproj
deleted file mode 100644
index cda720830e..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor6.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimector6.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor7.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor7.csproj
deleted file mode 100644
index 655768292a..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor7.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimector7.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeDate.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeDate.csproj
deleted file mode 100644
index 369a383c6c..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeDate.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimedate.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeGetHashCode.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeGetHashCode.csproj
deleted file mode 100644
index 4096884fd3..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeGetHashCode.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimegethashcode.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeHour.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeHour.csproj
deleted file mode 100644
index 8546ca6d70..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeHour.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimehour.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeMaxValue.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeMaxValue.csproj
deleted file mode 100644
index c588f8ce0b..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeMaxValue.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimemaxvalue.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeMillisecond.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeMillisecond.csproj
deleted file mode 100644
index 25fde7941b..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeMillisecond.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimemillisecond.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeMinValue.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeMinValue.csproj
deleted file mode 100644
index 060e586ee9..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeMinValue.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeminvalue.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeMinute.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeMinute.csproj
deleted file mode 100644
index ec37820d25..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeMinute.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeminute.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParse1.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeParse1.csproj
deleted file mode 100644
index 5a3249701c..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParse1.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeparse1.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParse2.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeParse2.csproj
deleted file mode 100644
index 1126dcdef5..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParse2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeparse2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParse3.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeParse3.csproj
deleted file mode 100644
index 007ac1ba58..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParse3.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeparse3.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact1.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact1.csproj
deleted file mode 100644
index 1c62be7593..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact1.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeparseexact1.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact2.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact2.csproj
deleted file mode 100644
index d08a7742f1..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeparseexact2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact3.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact3.csproj
deleted file mode 100644
index 5df4c9f572..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeParseExact3.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeparseexact3.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeSecond.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeSecond.csproj
deleted file mode 100644
index 347cae3ff9..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeSecond.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimesecond.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeSubtract1.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeSubtract1.csproj
deleted file mode 100644
index 6c421e788b..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeSubtract1.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimesubtract1.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeSubtract2.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeSubtract2.csproj
deleted file mode 100644
index eb699f4bdc..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeSubtract2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimesubtract2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeTicks.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeTicks.csproj
deleted file mode 100644
index 015a0c089a..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeTicks.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeticks.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeTimeOfDay.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeTimeOfDay.csproj
deleted file mode 100644
index a4272cbf1e..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeTimeOfDay.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimetimeofday.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToFileTime.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeToFileTime.csproj
deleted file mode 100644
index 7d0ba1bbe2..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToFileTime.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimetofiletime.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToFileTimeUtc.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeToFileTimeUtc.csproj
deleted file mode 100644
index 3fbd0d2c38..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToFileTimeUtc.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimetofiletimeutc.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToLocalTime.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeToLocalTime.csproj
deleted file mode 100644
index a26bc57f46..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToLocalTime.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimetolocaltime.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToString1.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeToString1.csproj
deleted file mode 100644
index b16d7d324e..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToString1.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimetostring1.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToString2.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeToString2.csproj
deleted file mode 100644
index 3d5b4700d7..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToString2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimetostring2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToString3.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeToString3.csproj
deleted file mode 100644
index 30ebd40cf2..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeToString3.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimetostring3.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeUtcNow.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimeUtcNow.csproj
deleted file mode 100644
index 4ba6627610..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeUtcNow.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeutcnow.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimetoday.csproj b/tests/src/CoreMangLib/cti/system/datetime/DateTimetoday.csproj
deleted file mode 100644
index 0b8f18605b..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimetoday.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimetoday.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/cfdatetimetools.cs b/tests/src/CoreMangLib/cti/system/datetime/cfdatetimetools.cs
deleted file mode 100644
index 0d7c8653f2..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/cfdatetimetools.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using TestLibrary;
-using System.Runtime.InteropServices;
-
-// utility functions for accessing DateTime functions in CoreFoundation for validation purposes
-
-// Important Notes:
-// CF reference types are passed as IntPtrs. In the declarations, the actual type name is given within C-style comments:
-// IntPtr /* CFTypeRef */ tr
-// many function signatures contain an allocator of type CFAllocatorRef. To use the default allocator pass in IntPtr.Zero.
-
-public class CFDateTimeTools
-{
-
- // Basic tools (should be factored out eventually, as not DateTime-specific)
- [DllImport("/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/Current/CoreFoundation")]
- protected static extern string CFStringGetCStringPtr(IntPtr /* CFStringRef */ theString, CFStringEncoding encoding);
-
- public enum CFStringEncoding : uint
- {
- kCFStringEncodingMacRoman = 0,
- kCFStringEncodingWindowsLatin1 = 0x0500,
- kCFStringEncodingISOLatin1 = 0x0201,
- kCFStringEncodingNextStepLatin = 0x0B01,
- kCFStringEncodingASCII = 0x0600,
- kCFStringEncodingUnicode = 0x0100,
- kCFStringEncodingUTF8 = 0x08000100,
- kCFStringEncodingNonLossyASCII = 0x0BFF,
-
- // The following constants are available
- // only on Mac OS X v10.4 and later,
- kCFStringEncodingUTF16 = 0x0100,
- kCFStringEncodingUTF16BE = 0x10000100,
- kCFStringEncodingUTF16LE = 0x14000100,
- kCFStringEncodingUTF32 = 0x0c000100,
- kCFStringEncodingUTF32BE = 0x18000100,
- kCFStringEncodingUTF32LE = 0x1c000100
- }
- [DllImport("/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/Current/CoreFoundation")]
- protected static extern IntPtr /* CFStringRef */ CFStringCreateWithCString(IntPtr /* CFAllocatorRef */ alloc,
- string cStr,
- CFStringEncoding encoding);
-
-
- [System.Security.SecuritySafeCritical]
- public static string CFStringToSystemString(IntPtr /* CFStringRef */ theString)
- {
- return CFStringGetCStringPtr(theString, CFStringEncoding.kCFStringEncodingMacRoman);
- }
-
- [System.Security.SecuritySafeCritical]
- public static IntPtr /* CFStringRef */ SystemStringToCFString(string theString)
- {
- return CFStringCreateWithCString(IntPtr.Zero, theString, CFStringEncoding.kCFStringEncodingMacRoman);
- }
-
- [System.Security.SecuritySafeCritical]
- public static string GetOSFormattedDate(DateTime d, bool getLocale)
- {
- IntPtr cfDateRef = CFDateTimeTools.DateTimeToCFDateRef(d);
- IntPtr cfLocaleRef = (getLocale ? CFDateTimeTools.CFLocaleCopyCurrent() : IntPtr.Zero);
- IntPtr cfDateFmtr = CFDateFormatterCreate(IntPtr.Zero, cfLocaleRef,
- CFDateFormatterStyle.kCFDateFormatterLongStyle,
- CFDateFormatterStyle.kCFDateFormatterLongStyle); // 3 for long style
-
- IntPtr cfStr = CFDateFormatterCreateStringWithDate(IntPtr.Zero, cfDateFmtr, cfDateRef);
- return CFStringToSystemString(cfStr);
- }
-
- /// CFLocale
- /// --------
-
- [DllImport("/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/Current/CoreFoundation")]
- public static extern IntPtr /* CFLocaleRef */ CFLocaleCopyCurrent();
-
- /// CFDate tools
- /// ------------
-
- [DllImport("/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/Current/CoreFoundation")]
- public static extern /* CFDateRef */ IntPtr CFDateCreate(IntPtr /* CFAllocatorRef */ allocator,
- double /* CFAbsoluteTime */ at);
-
- // convert between CLR DateTime and CoreFoundation CFAbsoluteTime (== double) and CFDateRef types
- private static DateTime CFAbsoluteTimeZero = new DateTime(2001, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-
- public static double DateTimeToCFAbsoluteTime(DateTime d)
- {
- return d.Subtract(CFAbsoluteTimeZero).TotalSeconds;
- }
-
- [System.Security.SecuritySafeCritical]
- public static IntPtr /* CFDateRef */ DateTimeToCFDateRef(DateTime d)
- {
- return CFDateCreate(IntPtr.Zero,
- DateTimeToCFAbsoluteTime(d));
- }
-
-
- /// CFDateTimeFormatter
- /// -------------------
-
- public enum CFDateFormatterStyle : int
- {
- kCFDateFormatterNoStyle = 0,
- kCFDateFormatterShortStyle = 1,
- kCFDateFormatterMediumStyle = 2,
- kCFDateFormatterLongStyle = 3,
- kCFDateFormatterFullStyle = 4
- };
-
-
- [DllImport("/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/Current/CoreFoundation")]
- public static extern IntPtr /* CFDateFormatterRef */ CFDateFormatterCreate(IntPtr /* CFAllocatorRef */ alloc,
- IntPtr /* CFLocaleRef */ locale, CFDateFormatterStyle dateStyle, CFDateFormatterStyle timeStyle);
-
-
- [DllImport("/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/Current/CoreFoundation")]
- public static extern /* CFStringRef */ IntPtr CFDateFormatterCreateStringWithDate(IntPtr /* CFAllocatorRef */ alloc,
- IntPtr /* CFDateFormatterRef */ formatter, IntPtr /* CFDateRef */ date);
-
- /// CFTimeZone
- /// -----------
-
- [DllImport("/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/Current/CoreFoundation")]
- public extern static IntPtr /* CFTimeZoneRef */ CFTimeZoneCopySystem();
-
- [DllImport("/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/Current/CoreFoundation")]
- public extern static IntPtr /* CFStringRef */ CFTimeZoneGetName(IntPtr /* CFTimeZoneRef */ tz);
-
- [System.Security.SecuritySafeCritical]
- public static string GetOSTimeZoneName(IntPtr /* CFTimeZoneRef */ tz)
- {
- return CFStringToSystemString(CFTimeZoneGetName(tz));
- }
-
- [DllImport("/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/Current/CoreFoundation")]
- public extern static bool CFTimeZoneIsDaylightSavingTime(IntPtr /* CFTimeZoneRef */ tz,
- double /* CFAbsoluteTime */ at);
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimecompare.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimecompare.cs
deleted file mode 100644
index 088f8b2932..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimecompare.cs
+++ /dev/null
@@ -1,250 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// Compare(System.DateTime,System.DateTime)
-/// </summary>
-public class DateTimeCompare
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Compare a datetime instance with itself");
-
- try
- {
- DateTime t1 = new DateTime(2006, 9, 21, 10, 54, 56, 888);
-
- if (DateTime.Compare(t1, t1) != 0)
- {
- TestLibrary.TestFramework.LogError("001.1", "Compare a datetime instance with itself does not return 0");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Compare a datetime instance with a datetime instance less than it");
-
- try
- {
- DateTime t1 = new DateTime(2006, 9, 21, 10, 54, 56, 888);
- DateTime t2 = new DateTime(2006, 9, 21, 10, 54, 56, 887);
-
- if (DateTime.Compare(t1, t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.1", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 10, 54, 55, 888);
-
- if (DateTime.Compare(t1, t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.2", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 10, 53, 56, 888);
-
- if (DateTime.Compare(t1, t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.3", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 9, 54, 56, 888);
-
- if (DateTime.Compare(t1, t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.4", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 20, 10, 54, 56, 888);
-
- if (DateTime.Compare(t1, t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.5", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 8, 21, 10, 54, 56, 888);
-
- if (DateTime.Compare(t1, t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.6", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2005, 9, 21, 10, 54, 56, 888);
-
- if (DateTime.Compare(t1, t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.7", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Compare a datetime instance equal to it");
-
- try
- {
- DateTime t1 = new DateTime(2006, 9, 21, 10, 54, 56, 888);
- DateTime t2 = new DateTime(2006, 9, 21, 10, 54, 56, 888);
-
- if (DateTime.Compare(t1, t2) != 0)
- {
- TestLibrary.TestFramework.LogError("003.1", "Compare a datetime instance equal to it does not return 0");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: Compare a datetime instance with a datetime instance greater than it");
-
- try
- {
- DateTime t1 = new DateTime(2006, 9, 21, 10, 54, 56, 888);
- DateTime t2 = new DateTime(2006, 9, 21, 10, 54, 56, 889);
-
- if (DateTime.Compare(t1, t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 10, 54, 57, 888);
-
- if (DateTime.Compare(t1, t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 10, 55, 56, 888);
-
- if (DateTime.Compare(t1, t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 11, 54, 56, 888);
-
- if (DateTime.Compare(t1, t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 22, 10, 54, 56, 888);
-
- if (DateTime.Compare(t1, t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 10, 21, 10, 54, 56, 888);
-
- if (DateTime.Compare(t1, t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2007, 9, 21, 10, 54, 56, 888);
-
- if (DateTime.Compare(t1, t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeCompare test = new DateTimeCompare();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeCompare");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimecompareto1.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimecompareto1.cs
deleted file mode 100644
index 1bb2ca2db2..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimecompareto1.cs
+++ /dev/null
@@ -1,250 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// CompareTo(System.DateTime)
-/// </summary>
-public class DateTimeCompareTo1
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Compare a datetime instance with itself");
-
- try
- {
- DateTime t = new DateTime(2006, 9, 21, 10, 54, 56, 888);
-
- if (t.CompareTo(t) != 0)
- {
- TestLibrary.TestFramework.LogError("001.1", "Compare a datetime instance with itself does not return 0");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Compare a datetime instance with a datetime instance less than it");
-
- try
- {
- DateTime t1 = new DateTime(2006, 9, 21, 10, 54, 56, 888);
- DateTime t2 = new DateTime(2006, 9, 21, 10, 54, 56, 887);
-
- if (t1.CompareTo(t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.1", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 10, 54, 55, 888);
-
- if (t1.CompareTo(t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.2", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 10, 53, 56, 888);
-
- if (t1.CompareTo(t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.3", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 9, 54, 56, 888);
-
- if (t1.CompareTo(t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.4", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 20, 10, 54, 56, 888);
-
- if (t1.CompareTo(t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.5", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 8, 21, 10, 54, 56, 888);
-
- if (t1.CompareTo(t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.6", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2005, 9, 21, 10, 54, 56, 888);
-
- if (t1.CompareTo(t2) <= 0)
- {
- TestLibrary.TestFramework.LogError("002.7", "Compare a datetime instance with a datetime instance less than it does not greater than 0");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Compare a datetime instance equal to it");
-
- try
- {
- DateTime t1 = new DateTime(2006, 9, 21, 10, 54, 56, 888);
- DateTime t2 = new DateTime(2006, 9, 21, 10, 54, 56, 888);
-
- if (t1.CompareTo(t2) != 0)
- {
- TestLibrary.TestFramework.LogError("003.1", "Compare a datetime instance equal to it does not return 0");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: Compare a datetime instance with a datetime instance greater than it");
-
- try
- {
- DateTime t1 = new DateTime(2006, 9, 21, 10, 54, 56, 888);
- DateTime t2 = new DateTime(2006, 9, 21, 10, 54, 56, 889);
-
- if (t1.CompareTo(t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 10, 54, 57, 888);
-
- if (t1.CompareTo(t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 10, 55, 56, 888);
-
- if (t1.CompareTo(t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 21, 11, 54, 56, 888);
-
- if (t1.CompareTo(t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 9, 22, 10, 54, 56, 888);
-
- if (t1.CompareTo(t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2006, 10, 21, 10, 54, 56, 888);
-
- if (t1.CompareTo(t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
-
- t2 = new DateTime(2007, 9, 21, 10, 54, 56, 888);
-
- if (t1.CompareTo(t2) >= 0)
- {
- TestLibrary.TestFramework.LogError("004.1", "Compare a datetime instance with a datetime instance greater than it does not less than 0");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeCompareTo1 test = new DateTimeCompareTo1();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeCompareTo1");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimector1.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimector1.cs
deleted file mode 100644
index 41e4c0c39d..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimector1.cs
+++ /dev/null
@@ -1,342 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// ctor(System.Int32,System.Int32,System.Int32)
-/// </summary>
-public class DateTimeCtor1
-{
- #region Private Fields
- private int m_ErrorNo = 0;
- #endregion
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: We can call ctor(System.Int32,System.Int32,System.Int32) to constructor a new DateTime instance by using valid value");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28);
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: We can call ctor(System.Int32,System.Int32,System.Int32) to constructor a new DateTime instance by using MAX/MIN values");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30);
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: We can call ctor(System.Int32,System.Int32,System.Int32) to constructor a new DateTime instance by using correct day/month pair");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29);
- retVal = retVal && VerifyDateTimeHelper(2006, 2, 28);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30);
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentOutOfRangeException should be thrown when year is less than 1 or greater than 9999.");
-
- try
- {
- DateTime value = new DateTime(0, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(10000, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is greater than 9999");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: ArgumentOutOfRangeException should be thrown when month is less than 1 or greater than 12");
-
- try
- {
- DateTime value = new DateTime(2006, 0, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 13, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is greater than 12");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: ArgumentOutOfRangeException should be thrown when day is less than 1 or greater than the number of days in month");
-
- try
- {
- DateTime value = new DateTime(2006, 1, 0);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 1, 32);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 2, 29);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 4, 31);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeCtor1 test = new DateTimeCtor1();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeCtor1");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerifyDateTimeHelper(int desiredYear, int desiredMonth, int desiredDay)
- {
- bool retVal = true;
-
- DateTime value = new DateTime(desiredYear, desiredMonth, desiredDay);
- m_ErrorNo++;
- if ((desiredYear != value.Year) || (desiredMonth != value.Month) || (desiredDay != value.Day))
- {
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "We can call ctor(System.Int32,System.Int32,System.Int32) to constructor a wrong DateTime instance by using valid value");
- TestLibrary.TestFramework.LogInformation("[LOCAL VARIABLES] desiredYear = " + desiredYear.ToString() + ", desiredMonth = " + desiredMonth.ToString() + ", desiredDay = " + desiredDay.ToString() + ", actualYear = " + value.Year.ToString() + ", actualMonth = " + value.Month.ToString() + ", actualDay = " + value.Day.ToString());
- retVal = false;
- }
-
- m_ErrorNo++;
- if ((value.Hour != 0) || (value.Minute != 0) || (value.Second != 0))
- {
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "We can call ctor(System.Int32,System.Int32,System.Int32) to constructor a wrong DateTime instance by using valid value");
- TestLibrary.TestFramework.LogInformation("[LOCAL VARIABLES] desiredHour = 0, desiredMinute = 0, desiredSecond = 0, actualHour = " + value.Hour.ToString() + ", actualMinute = " + value.Minute.ToString() + ", actualSecond = " + value.Second.ToString());
- retVal = false;
- }
-
- m_ErrorNo++;
- if (value.Kind != DateTimeKind.Unspecified)
- {
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "We can call ctor(System.Int32,System.Int32,System.Int32) to constructor a wrong DateTime instance by using valid value");
- TestLibrary.TestFramework.LogInformation("[LOCAL VARIABLES] desiredKind = DateTimeKind.Unspecified" + ", actualKind = " + value.Kind.ToString());
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimector3.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimector3.cs
deleted file mode 100644
index 8943fa3f23..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimector3.cs
+++ /dev/null
@@ -1,521 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)
-/// </summary>
-public class DateTimeCtor3
-{
- #region Private Fields
- private int m_ErrorNo = 0;
- #endregion
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: We can call ctor to constructor a new DateTime instance by using valid value");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 4, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 56, 56);
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: We can call ctor to constructor a new DateTime instance by using MAX/MIN values");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 23, 59, 59);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 59, 59);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 23, 59, 59);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 59, 59);
-
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 23, 59, 59);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 59, 59);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 23, 59, 59);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 59, 59);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 23, 59, 59);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 59, 59);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 23, 59, 59);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 59, 59);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 23, 59, 59);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 59, 59);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 23, 59, 59);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 59, 59);
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: We can call ctor to constructor a new DateTime instance by using correct day/month pair");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43);
- retVal = retVal && VerifyDateTimeHelper(2006, 2, 28, 12, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43);
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentOutOfRangeException should be thrown when year is less than 1 or greater than 9999.");
-
- try
- {
- DateTime value = new DateTime(0, 1, 1, 1, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(10000, 1, 1, 1, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is greater than 9999");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: ArgumentOutOfRangeException should be thrown when month is less than 1 or greater than 12");
-
- try
- {
- DateTime value = new DateTime(2006, 0, 1, 1, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 13, 1, 1, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is greater than 12");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: ArgumentOutOfRangeException should be thrown when day is less than 1 or greater than the number of days in month");
-
- try
- {
- DateTime value = new DateTime(2006, 1, 0, 1, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 1, 32, 1, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 2, 29, 1, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 4, 31, 1, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest4: ArgumentOutOfRangeException should be thrown when hour is less than 0 or greater than 23");
-
- try
- {
- DateTime value = new DateTime(2006, 1, 1, -1, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when hour is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 1, 1, 24, 1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when hour is greater than 23");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest5()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest5: ArgumentOutOfRangeException should be thrown when minute is less than 0 or greater than 59");
-
- try
- {
- DateTime value = new DateTime(2006, 1, 1, 1, -1, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown minute year is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 1, 1, 1, 60, 1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when minute is greater than 59");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest6()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest6: ArgumentOutOfRangeException should be thrown when second is less than 0 or greater than 59");
-
- try
- {
- DateTime value = new DateTime(2006, 1, 1, 1, 1, -1);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when second is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 60);
-
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when second is greater than 59");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- m_ErrorNo++;
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeCtor3 test = new DateTimeCtor3();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeCtor3");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerifyDateTimeHelper(int desiredYear, int desiredMonth, int desiredDay, int desiredHour, int desiredMinute, int desiredSecond)
- {
- bool retVal = true;
-
- DateTime value = new DateTime(desiredYear, desiredMonth, desiredDay, desiredHour, desiredMinute, desiredSecond);
- m_ErrorNo++;
- if ((desiredYear != value.Year) || (desiredMonth != value.Month) || (desiredDay != value.Day) ||
- (desiredHour != value.Hour) || (desiredMinute != value.Minute) || (desiredSecond != value.Second))
- {
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "We can call ctor(System.Int32,System.Int32,System.Int32) to constructor a wrong DateTime instance by using valid value");
- TestLibrary.TestFramework.LogInformation("[LOCAL VARIABLES] desiredYear = " + desiredYear.ToString() +
- ", desiredMonth = " + desiredMonth.ToString() +
- ", desiredDay = " + desiredDay.ToString() +
- ", desiredHour = " + desiredHour.ToString() +
- ", desiredMinute = " + desiredMinute.ToString() +
- ", desiredSecond = " + desiredSecond.ToString() +
- ", actualYear = " + value.Year.ToString() +
- ", actualMonth = " + value.Month.ToString() +
- ", actualDay = " + value.Day.ToString() +
- ", actualHour = " + value.Hour.ToString() +
- ", actualMinute = " + value.Minute.ToString() +
- ", actualSecond = " + value.Second.ToString());
- retVal = false;
- }
-
- m_ErrorNo++;
- if (value.Kind != DateTimeKind.Unspecified)
- {
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "We can call ctor(System.Int32,System.Int32,System.Int32) to constructor a wrong DateTime instance by using valid value");
- TestLibrary.TestFramework.LogInformation("[LOCAL VARIABLES] desiredKind = DateTimeKind.Unspecified" + ", actualKind = " + value.Kind.ToString());
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimector4.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimector4.cs
deleted file mode 100644
index 4035254ad2..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimector4.cs
+++ /dev/null
@@ -1,638 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.DateTimeKind)
-/// </summary>
-public class DateTimeCtor4
-{
- #region Private Fields
- private int m_ErrorNo = 0;
- #endregion
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
- retVal = NegTest4() && retVal;
- retVal = NegTest5() && retVal;
- retVal = NegTest6() && retVal;
- retVal = NegTest7() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: We can call ctor to constructor a new DateTime instance by using valid value");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 4, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 56, 56, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 56, 56, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 56, 56, DateTimeKind.Utc);
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: We can call ctor to constructor a new DateTime instance by using MAX/MIN values");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 23, 59, 59, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 59, 59, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 16, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 23, 59, 59, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 59, 59, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 59, 59, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 23, 59, 59, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 59, 59, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 16, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 23, 59, 59, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 59, 59, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 59, 59, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 23, 59, 59, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 59, 59, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 16, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 23, 59, 59, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 59, 59, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 59, 59, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 23, 59, 59, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 59, 59, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 16, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 23, 59, 59, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 59, 59, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 59, 59, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 23, 59, 59, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 59, 59, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 16, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 23, 59, 59, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 59, 59, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 59, 59, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 23, 59, 59, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 59, 59, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 23, 59, 59, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 59, 59, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 59, 59, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 23, 59, 59, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 59, 59, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 16, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 23, 59, 59, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 59, 59, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 59, 59, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 23, 59, 59, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 59, 59, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 16, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 23, 59, 59, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 59, 59, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 59, 59, DateTimeKind.Unspecified);
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: We can call ctor to constructor a new DateTime instance by using correct day/month pair");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2006, 2, 28, 12, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 2, 28, 12, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 2, 28, 12, 0, 0, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, DateTimeKind.Utc | DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, DateTimeKind.Local | DateTimeKind.Unspecified);
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentOutOfRangeException should be thrown when year is less than 1 or greater than 9999.");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(0, 1, 1, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(10000, 1, 1, 1, 1, 1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is greater than 9999");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: ArgumentOutOfRangeException should be thrown when month is less than 1 or greater than 12");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 0, 1, 1, 1, 1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 13, 1, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is greater than 12");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: ArgumentOutOfRangeException should be thrown when day is less than 1 or greater than the number of days in month");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 0, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 32, 1, 1, 1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 2, 29, 1, 1, 1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 4, 31, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.3", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest4: ArgumentOutOfRangeException should be thrown when hour is less than 0 or greater than 23");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, -1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when hour is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("104.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 24, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when hour is greater than 23");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("104.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest5()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest5: ArgumentOutOfRangeException should be thrown when minute is less than 0 or greater than 59");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, -1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown minute year is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("105.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 60, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when minute is greater than 59");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("105.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest6()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest6: ArgumentOutOfRangeException should be thrown when second is less than 0 or greater than 59");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, -1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when second is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("106.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 60, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when second is greater than 59");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("106.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest7()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest7: ArgumentException should be thrown when kind is not one of the DateTimeKind values.");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 1, DateTimeKind.Utc | DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentException is not thrown when kind is DateTimeKind.Utc | DateTimeKind.Local");
- retVal = false;
- }
- catch (ArgumentException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("107.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 1, (DateTimeKind)(-1));
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentException is not thrown when kind is DateTimeKind.Local | DateTimeKind.Unspecified");
- retVal = false;
- }
- catch (ArgumentException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("107.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeCtor4 test = new DateTimeCtor4();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeCtor4");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerifyDateTimeHelper(int desiredYear,
- int desiredMonth,
- int desiredDay,
- int desiredHour,
- int desiredMinute,
- int desiredSecond,
- DateTimeKind desiredKind)
- {
- bool retVal = true;
-
- DateTime value = new DateTime(desiredYear, desiredMonth, desiredDay,
- desiredHour, desiredMinute, desiredSecond, desiredKind);
-
- m_ErrorNo++;
- if ((desiredYear != value.Year) ||
- (desiredMonth != value.Month) ||
- (desiredDay != value.Day) ||
- (desiredHour != value.Hour) ||
- (desiredMinute != value.Minute) ||
- (desiredSecond != value.Second) ||
- (desiredKind != value.Kind))
- {
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Calling ctor constructors a wrong DateTime instance by using valid value");
- TestLibrary.TestFramework.LogInformation("[LOCAL VARIABLES] desiredYear = " + desiredYear.ToString() +
- ", desiredMonth = " + desiredMonth.ToString() +
- ", desiredDay = " + desiredDay.ToString() +
- ", desiredHour = " + desiredHour.ToString() +
- ", desiredMinute = " + desiredMinute.ToString() +
- ", desiredSecond = " + desiredSecond.ToString() +
- ", desiredKind = " + desiredKind.ToString() +
- ", actualYear = " + value.Year.ToString() +
- ", actualMonth = " + value.Month.ToString() +
- ", actualDay = " + value.Day.ToString() +
- ", actualHour = " + value.Hour.ToString() +
- ", actualMinute = " + value.Minute.ToString() +
- ", actualSecond = " + value.Second.ToString() +
- ", actualKind = " + value.Kind.ToString());
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimector6.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimector6.cs
deleted file mode 100644
index 8f644bd9ba..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimector6.cs
+++ /dev/null
@@ -1,570 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)
-/// </summary>
-public class DateTimeCtor6
-{
- #region Private Fields
- private int m_ErrorNo = 0;
- #endregion
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
- retVal = NegTest4() && retVal;
- retVal = NegTest5() && retVal;
- retVal = NegTest6() && retVal;
- retVal = NegTest7() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: We can call ctor to constructor a new DateTime instance by using valid value");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 0, 0, 500);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 56, 56, 900);
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: We can call ctor to constructor a new DateTime instance by using MAX/MIN values");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 23, 59, 59, 999);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 59, 59, 999);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 23, 59, 59, 999);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 0, 0, 999);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 59, 59, 0);
-
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 23, 59, 59, 999);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 0, 0, 999);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 59, 59, 0);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 23, 59, 59, 999);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 59, 59, 999);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 23, 59, 59, 999);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 59, 59, 999);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 23, 59, 59, 999);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 0, 0, 999);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 59, 59, 0);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 23, 59, 59, 999);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 59, 59, 999);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 23, 59, 59, 999);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 0, 0, 999);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 59, 59, 0);
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: We can call ctor to constructor a new DateTime instance by using correct day/month pair");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, 500);
- retVal = retVal && VerifyDateTimeHelper(2006, 2, 28, 12, 0, 0, 0);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, 100);
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentOutOfRangeException should be thrown when year is less than 1 or greater than 9999.");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(0, 1, 1, 1, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(10000, 1, 1, 1, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is greater than 9999");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: ArgumentOutOfRangeException should be thrown when month is less than 1 or greater than 12");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 0, 1, 1, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 13, 1, 1, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is greater than 12");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: ArgumentOutOfRangeException should be thrown when day is less than 1 or greater than the number of days in month");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 0, 1, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 32, 1, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 2, 29, 1, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 4, 31, 1, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.3", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest4: ArgumentOutOfRangeException should be thrown when hour is less than 0 or greater than 23");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, -1, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when hour is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("104.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 24, 1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when hour is greater than 23");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("104.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest5()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest5: ArgumentOutOfRangeException should be thrown when minute is less than 0 or greater than 59");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, -1, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown minute year is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("105.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 60, 1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when minute is greater than 59");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("105.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest6()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest6: ArgumentOutOfRangeException should be thrown when second is less than 0 or greater than 59");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, -1, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when second is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("106.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 60, 1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when second is greater than 59");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("106.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest7()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest7: ArgumentOutOfRangeException should be thrown when millisecond is less than 0 or greater than 999");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 1, -1);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when millisecond is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("107.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 1, 1000);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when millisecond is greater than 999");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("107.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeCtor6 test = new DateTimeCtor6();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeCtor6");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerifyDateTimeHelper(int desiredYear,
- int desiredMonth,
- int desiredDay,
- int desiredHour,
- int desiredMinute,
- int desiredSecond,
- int desiredMillisecond)
- {
- bool retVal = true;
-
- DateTime value = new DateTime(desiredYear, desiredMonth, desiredDay,
- desiredHour, desiredMinute, desiredSecond, desiredMillisecond);
-
- m_ErrorNo++;
- if ((desiredYear != value.Year) ||
- (desiredMonth != value.Month) ||
- (desiredDay != value.Day) ||
- (desiredHour != value.Hour) ||
- (desiredMinute != value.Minute) ||
- (desiredSecond != value.Second) ||
- (desiredMillisecond != value.Millisecond) )
- {
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Calling ctor constructors a wrong DateTime instance by using valid value");
- TestLibrary.TestFramework.LogInformation("[LOCAL VARIABLES] desiredYear = " + desiredYear.ToString() +
- ", desiredMonth = " + desiredMonth.ToString() +
- ", desiredDay = " + desiredDay.ToString() +
- ", desiredHour = " + desiredHour.ToString() +
- ", desiredMinute = " + desiredMinute.ToString() +
- ", desiredSecond = " + desiredSecond.ToString() +
- ", desiredMillisecond = " + desiredMillisecond.ToString() +
- ", actualYear = " + value.Year.ToString() +
- ", actualMonth = " + value.Month.ToString() +
- ", actualDay = " + value.Day.ToString() +
- ", actualHour = " + value.Hour.ToString() +
- ", actualMinute = " + value.Minute.ToString() +
- ", actualSecond = " + value.Second.ToString() +
- ", actualMillisecond = " + value.Millisecond.ToString());
- retVal = false;
- }
-
- m_ErrorNo++;
- if (value.Kind != DateTimeKind.Unspecified)
- {
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Calling ctor constructors a wrong DateTime instance by using valid value");
- TestLibrary.TestFramework.LogInformation("[LOCAL VARIABLES] desiredKind = DateTimeKind.Unspecified" + ", actualKind = " + value.Kind.ToString());
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimector7.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimector7.cs
deleted file mode 100644
index 3e839662fb..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimector7.cs
+++ /dev/null
@@ -1,689 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.DateTimeKind)
-/// </summary>
-public class DateTimeCtor7
-{
- #region Private Fields
- private int m_ErrorNo = 0;
- #endregion
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
- retVal = NegTest4() && retVal;
- retVal = NegTest5() && retVal;
- retVal = NegTest6() && retVal;
- retVal = NegTest7() && retVal;
- retVal = NegTest8() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: We can call ctor to constructor a new DateTime instance by using valid value");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 16, 7, 43, 500, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 4, 7, 43, 100, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 0, 0, 1, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 0, 0, 998, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 0, 0, 2, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 56, 56, 100, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 56, 56, 200, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 8, 28, 12, 56, 56, 300, DateTimeKind.Utc);
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: We can call ctor to constructor a new DateTime instance by using MAX/MIN values");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 16, 7, 43, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 23, 59, 59, 999, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 59, 59, 0, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 16, 7, 43, 500, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 23, 59, 59, 999, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 59, 59, 59, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(1, 1, 1, 0, 59, 59, 99, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 16, 7, 43, 500, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 23, 59, 59, 999, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 59, 59, 0, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 16, 7, 43, 1, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 23, 59, 59, 998, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 0, 0, 999, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 59, 59, 0, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 0, 0, 1, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(9999, 12, 31, 0, 59, 59, 999, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 16, 7, 43, 1, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 23, 59, 59, 998, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 59, 59, 999, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 16, 7, 43, 1, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 23, 59, 59, 998, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 59, 59, 999, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(1, 12, 31, 0, 59, 59, 999, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 16, 7, 43, 1, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 23, 59, 59, 998, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 59, 59, 999, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 16, 7, 43, 1, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 23, 59, 59, 998, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 59, 59, 999, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(9999, 1, 1, 0, 59, 59, 999, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 16, 7, 43, 1, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 23, 59, 59, 998, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 59, 59, 999, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 16, 7, 43, 1, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 23, 59, 59, 998, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 59, 59, 999, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2000, 1, 31, 0, 59, 59, 999, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, 1, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 23, 59, 59, 998, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 59, 59, 999, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, 1, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 23, 59, 59, 998, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 59, 59, 999, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 0, 59, 59, 999, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 16, 7, 43, 1, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 23, 59, 59, 998, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 59, 59, 999, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 16, 7, 43, 1, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 23, 59, 59, 998, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 59, 59, 999, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2001, 2, 28, 0, 59, 59, 999, DateTimeKind.Unspecified);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 16, 7, 43, 1, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 23, 59, 59, 998, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 59, 59, 999, DateTimeKind.Local);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 16, 7, 43, 1, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 23, 59, 59, 998, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 0, 0, 0, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 59, 59, 999, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2001, 4, 30, 0, 59, 59, 999, DateTimeKind.Unspecified);
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: We can call ctor to constructor a new DateTime instance by using correct day/month pair");
-
- try
- {
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, 1, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, 999, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2000, 2, 29, 16, 7, 43, 998, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2006, 2, 28, 12, 0, 0, 0, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 2, 28, 12, 0, 0, 0, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 2, 28, 12, 0, 0, 0, DateTimeKind.Utc);
-
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, 1, DateTimeKind.Local);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, 1, DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, 1, DateTimeKind.Utc);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, 1, DateTimeKind.Utc | DateTimeKind.Unspecified);
- retVal = retVal && VerifyDateTimeHelper(2006, 4, 30, 16, 7, 43, 1, DateTimeKind.Local | DateTimeKind.Unspecified);
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentOutOfRangeException should be thrown when year is less than 1 or greater than 9999.");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(0, 1, 1, 1, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(10000, 1, 1, 1, 1, 1, 1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when year is greater than 9999");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: ArgumentOutOfRangeException should be thrown when month is less than 1 or greater than 12");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 0, 1, 1, 1, 1, 1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 13, 1, 1, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when month is greater than 12");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: ArgumentOutOfRangeException should be thrown when day is less than 1 or greater than the number of days in month");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 0, 1, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is less than 1");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 32, 1, 1, 1, 1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 2, 29, 1, 1, 1, 1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 4, 31, 1, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when day is greater than the number of days in month");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.3", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest4: ArgumentOutOfRangeException should be thrown when hour is less than 0 or greater than 23");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, -1, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when hour is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("104.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 24, 1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when hour is greater than 23");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("104.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest5()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest5: ArgumentOutOfRangeException should be thrown when minute is less than 0 or greater than 59");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, -1, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown minute year is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("105.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 60, 1, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when minute is greater than 59");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("105.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest6()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest6: ArgumentOutOfRangeException should be thrown when second is less than 0 or greater than 59");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, -1, 1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when second is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("106.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 60, 1, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when second is greater than 59");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("106.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest7()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest7: ArgumentException should be thrown when kind is not one of the DateTimeKind values.");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 1, 1, DateTimeKind.Utc | DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentException is not thrown when kind is DateTimeKind.Utc | DateTimeKind.Local");
- retVal = false;
- }
- catch (ArgumentException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("107.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 1, 1, (DateTimeKind)(-1));
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentException is not thrown when kind is DateTimeKind.Local | DateTimeKind.Unspecified");
- retVal = false;
- }
- catch (ArgumentException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("107.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest8()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest8: ArgumentOutOfRangeException should be thrown when millisecond is less than 0 or greater than 999");
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 1, -1, DateTimeKind.Utc);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when millisecond is less than 0");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("108.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- m_ErrorNo++;
- DateTime value = new DateTime(2006, 1, 1, 1, 1, 1, 1000, DateTimeKind.Local);
-
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "ArgumentOutOfRangeException is not thrown when millisecond is greater than 999");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("108.1", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeCtor7 test = new DateTimeCtor7();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeCtor7");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerifyDateTimeHelper(int desiredYear,
- int desiredMonth,
- int desiredDay,
- int desiredHour,
- int desiredMinute,
- int desiredSecond,
- int desiredMillisecond,
- DateTimeKind desiredKind)
- {
- bool retVal = true;
-
- DateTime value = new DateTime(desiredYear, desiredMonth, desiredDay,
- desiredHour, desiredMinute, desiredSecond, desiredMillisecond, desiredKind);
-
- m_ErrorNo++;
- if ((desiredYear != value.Year) ||
- (desiredMonth != value.Month) ||
- (desiredDay != value.Day) ||
- (desiredHour != value.Hour) ||
- (desiredMinute != value.Minute) ||
- (desiredSecond != value.Second) ||
- (desiredMillisecond != value.Millisecond) ||
- (desiredKind != value.Kind))
- {
- TestLibrary.TestFramework.LogError(m_ErrorNo.ToString(), "Calling ctor constructors a wrong DateTime instance by using valid value");
- TestLibrary.TestFramework.LogInformation("[LOCAL VARIABLES] desiredYear = " + desiredYear.ToString() +
- ", desiredMonth = " + desiredMonth.ToString() +
- ", desiredDay = " + desiredDay.ToString() +
- ", desiredHour = " + desiredHour.ToString() +
- ", desiredMinute = " + desiredMinute.ToString() +
- ", desiredSecond = " + desiredSecond.ToString() +
- ", desiredMillisecond = " + desiredMillisecond.ToString() +
- ", desiredKind = " + desiredKind.ToString() +
- ", actualYear = " + value.Year.ToString() +
- ", actualMonth = " + value.Month.ToString() +
- ", actualDay = " + value.Day.ToString() +
- ", actualHour = " + value.Hour.ToString() +
- ", actualMinute = " + value.Minute.ToString() +
- ", actualSecond = " + value.Second.ToString() +
- ", actualMillisecond = " + value.Millisecond.ToString() +
- ", actualKind = " + value.Kind.ToString());
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimedate.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimedate.cs
deleted file mode 100644
index cfa1db7630..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimedate.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Globalization;
-
-/// <summary>
-/// System.DateTime.Date
-/// </summary>
-public class DateTimeDate
-{
- public static int Main(string[] args)
- {
- DateTimeDate date = new DateTimeDate();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.Date property...");
-
- if (date.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify Date property when the created DateTime instance just is assigned to year,month and day...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29);
- DateTime myDate = myDateTime.Date;
-
- if (myDateTime.Year != myDate.Year || myDateTime.Month != myDate.Month || myDateTime.Day != myDate.Day)
- {
- TestLibrary.TestFramework.LogError("001", "The Date is wrong!");
- retVal = false;
- }
- else
- {
- if (myDate.Hour != 0 || myDate.Minute != 0 || myDate.Second != 0)
- {
- TestLibrary.TestFramework.LogError("002", "The initial time value is not equal to minnight!");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify Date property when created DateTime instance's time value is less than 12:00:00...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 03, 00, 00);
- DateTime myDate = myDateTime.Date;
-
- if (myDate.Year != myDateTime.Year || myDate.Month != myDateTime.Month || myDate.Day != myDateTime.Day)
- {
- TestLibrary.TestFramework.LogError("004", "The Date is wrong!");
- retVal = false;
- }
- else if (myDate.Hour != 0 || myDate.Minute != 0 || myDate.Second != 0)
- {
- TestLibrary.TestFramework.LogError("005", "The initial time value is not equal to minnight!");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify Date property when created DateTime instance's time value is more than 12:00:00...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 23, 00, 00);
- DateTime myDate = myDateTime.Date;
-
- if (myDateTime.Year != myDate.Year || myDateTime.Month != myDateTime.Month || myDateTime.Day != myDate.Day)
- {
- TestLibrary.TestFramework.LogError("007", "The Date is wrong!");
- retVal = false;
- }
- else if (myDate.Hour != 0 || myDate.Minute != 0 || myDate.Second != 0)
- {
- TestLibrary.TestFramework.LogError("008", "The initial time value is not equal to minnight!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("009", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimegethashcode.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimegethashcode.cs
deleted file mode 100644
index e5d5c07d16..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimegethashcode.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// GetHashCode
-/// </summary>
-public class DateTimeGetHashCode
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call GetHashCode on a valid instance");
-
- try
- {
- DateTime t = new DateTime(2006, 9, 25, 14, 15, 59, 999);
- int hashCode1 = t.GetHashCode();
- int hashCode2 = t.GetHashCode();
- if (hashCode1 != hashCode2)
- {
- TestLibrary.TestFramework.LogError("001.1", "Call GetHashCode on a valid instance twice does not return the same hash code");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLES] hashCode1 = " + hashCode1 + ", hashCode2 = " + hashCode2);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Call GetHashCode on a boundary value");
-
- try
- {
- DateTime t = DateTime.MaxValue;
- int hashCode1 = t.GetHashCode();
- int hashCode2 = t.GetHashCode();
- if (hashCode1 != hashCode2)
- {
- TestLibrary.TestFramework.LogError("002.1", "Call GetHashCode on a valid instance twice does not return the same hash code");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLES] hashCode1 = " + hashCode1 + ", hashCode2 = " + hashCode2);
- retVal = false;
- }
-
- t = DateTime.MinValue;
- hashCode1 = t.GetHashCode();
- hashCode2 = t.GetHashCode();
- if (hashCode1 != hashCode2)
- {
- TestLibrary.TestFramework.LogError("002.2", "Call GetHashCode on a valid instance twice does not return the same hash code");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLES] hashCode1 = " + hashCode1 + ", hashCode2 = " + hashCode2);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Hash code should be the same for the same date time");
-
- try
- {
- DateTime t1 = new DateTime(2006, 9, 25, 14, 15, 59, 999);
- DateTime t2 = new DateTime(2006, 9, 25, 14, 15, 59, 999);
- int hashCode1 = t1.GetHashCode();
- int hashCode2 = t2.GetHashCode();
- if (hashCode1 != hashCode2)
- {
- TestLibrary.TestFramework.LogError("003.1", "Call GetHashCode on a valid instance twice does not return the same hash code");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLES] hashCode1 = " + hashCode1 + ", hashCode2 = " + hashCode2);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeGetHashCode test = new DateTimeGetHashCode();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeGetHashCode");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimehour.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimehour.cs
deleted file mode 100644
index b7d367f3f9..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimehour.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections;
-using System.Threading;
-using System.Globalization;
-
-
-/// <summary>
-/// System.DateTime.Hour
-/// </summary>
-public class DateTimeHour
-{
- public static int Main(string[] args)
- {
- DateTimeHour hour = new DateTimeHour();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.Hour property...");
-
- if (hour.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify DateTime.Hour property when DateTime instance's hour is assigned...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(0978, 08, 29, 03, 00, 00);
- int hour = myDateTime.Hour;
-
- if (hour != 3)
- {
- TestLibrary.TestFramework.LogError("001","The hour is not correct!");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002","Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify DateTime.Hour property When DateTime instance is only assigned year month and day...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978,08,29);
- int hour = myDateTime.Hour;
-
- if (hour != 0)
- {
- TestLibrary.TestFramework.LogError("003","The hour is not zero when no value is assigned at init time!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("", "");
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimekind.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimekind.cs
deleted file mode 100644
index b797d038e3..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimekind.cs
+++ /dev/null
@@ -1,221 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Globalization;
-
-
-/// <summary>
-/// System.DateTime.Kind
-/// </summary>
-public class DateTimeKind
-{
- public static int Main(string[] args)
- {
- DateTimeKind kind = new DateTimeKind();
- TestLibrary.TestFramework.BeginScenario("Testing System.DateTime.Kind property...");
-
- if (kind.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Check Kind property when create an instance using Utc...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 03, 00, 00, System.DateTimeKind.Utc);
-
- if (myDateTime.Kind != System.DateTimeKind.Utc)
- {
- TestLibrary.TestFramework.LogError("001", "The kind is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Check Kind property when create an instance using local...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 03, 00, 00, System.DateTimeKind.Local);
-
- if (myDateTime.Kind != System.DateTimeKind.Local)
- {
- TestLibrary.TestFramework.LogError("003", "The kind is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Check Kind property when create an instance using Unspecified...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 03, 00, 00, System.DateTimeKind.Unspecified);
-
- if (myDateTime.Kind != System.DateTimeKind.Unspecified)
- {
- TestLibrary.TestFramework.LogError("005", "The kind is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Check toUniversalTime is equal to original when create an instance using Utc...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 03, 00, 00, System.DateTimeKind.Utc);
- DateTime toUniversal = myDateTime.ToUniversalTime();
-
- if (myDateTime != toUniversal)
- {
- TestLibrary.TestFramework.LogError("007", "The two instances are not equal!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Check toLocalTime is equal to original when create an instance using local...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 03, 00, 00, System.DateTimeKind.Local);
- DateTime toLocal = myDateTime.ToLocalTime();
-
- if (myDateTime != toLocal)
- {
- TestLibrary.TestFramework.LogError("009", "The kind is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest6()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Check an instance created by Unspecified, then compare to local and universal...");
-
- try
- {
- if (TimeZoneInfo.Local.BaseUtcOffset == TimeSpan.Zero) // any TZ has same alignment with UTC
- {
- // if we are on UTC zone, then the following test wil not make sense because all date conversion will produce the same original date value
- return retVal;
- }
-
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 03, 00, 00, System.DateTimeKind.Unspecified);
-
- DateTime toLocal = myDateTime.ToLocalTime();
- DateTime toUniversal = myDateTime.ToUniversalTime();
-
- if (myDateTime == toLocal)
- {
- string errorMessage = String.Format("The Unspecified myDateTime is regard as local by default!\nTZ: '{0}'\nmyDateTime: '{1}'\ntoLocal: '{2}'", TimeZoneInfo.Local.DisplayName, myDateTime, toLocal);
- TestLibrary.TestFramework.LogError("011", errorMessage);
- retVal = false;
- }
- else if (myDateTime == toUniversal)
- {
- string errorMessage = String.Format("Unexpected exception occurs!\nTZ: '{0}'\nmyDateTime: '{1}'\ntoUniversal: '{2}'", TimeZoneInfo.Local.DisplayName, myDateTime, toUniversal);
- TestLibrary.TestFramework.LogError("012", errorMessage);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("013", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimemaxvalue.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimemaxvalue.cs
deleted file mode 100644
index d6a04de363..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimemaxvalue.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// MaxValue
-/// </summary>
-public class DateTimeMaxValue
-{
- #region Private Fields
- private const long DATETIME_MAX_VALUE_TICKS = 3155378975999999999;
- #endregion
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: DateTime.MaxValue should be 23:59:59.9999999, December 31, 9999");
-
- try
- {
- DateTime desiredValue = new DateTime(DATETIME_MAX_VALUE_TICKS);
- if (!desiredValue.Equals(DateTime.MaxValue))
- {
- TestLibrary.TestFramework.LogError("001", "DateTime.MaxValue is not 23:59:59.9999999, December 31, 9999");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeMaxValue test = new DateTimeMaxValue();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeMaxValue");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimemillisecond.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimemillisecond.cs
deleted file mode 100644
index dd54de864d..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimemillisecond.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections;
-using System.Threading;
-using System.Globalization;
-
-
-public class DateTimeMillisecond
-{
- public static int Main(string[] args)
- {
- DateTimeMillisecond milliSecond = new DateTimeMillisecond();
- TestLibrary.TestFramework.BeginScenario("Testing System.DateTime.Millisecond property...");
-
- if (milliSecond.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify DateTime.Milliscond property when DateTime instance's Millisecond is assigned...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(0978, 08, 29, 03, 00, 00,666);
- int myMillisecond = myDateTime.Millisecond;
-
- if (myMillisecond != 666)
- {
- TestLibrary.TestFramework.LogError("001", "The Millisecond is not correct!");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify DateTime.Millisecond property When DateTime instance is only assigned year month and day...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29);
- int myMillisecond = myDateTime.Millisecond;
-
- if (myMillisecond != 0)
- {
- TestLibrary.TestFramework.LogError("003", "The millisecond is not zero when no value is assigned at init time!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify DateTime.Millisecond property When DateTime instance is only assigned year,month,day,hour,minute and second...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 03, 00, 00);
- int myMillisecond = myDateTime.Millisecond;
-
- if (myMillisecond != 0)
- {
- TestLibrary.TestFramework.LogError("005", "The millisecond is not zero when no value is assigned at init time!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeminute.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeminute.cs
deleted file mode 100644
index 78256cc5dc..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeminute.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections;
-using System.Threading;
-using System.Globalization;
-
-public class DateTimeMinute
-{
- public static int Main(string[] args)
- {
- DateTimeMinute minute = new DateTimeMinute();
- TestLibrary.TestFramework.BeginScenario("Testing System.DateTime.Minute...");
-
- if (minute.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify DateTime.Minute property when DateTime instance's minute is assigned...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(0978, 08, 29, 03, 29, 00);
- int minute = myDateTime.Minute;
-
- if (minute != 29)
- {
- TestLibrary.TestFramework.LogError("001", "The minute is not correct!");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify DateTime.Minute property When DateTime instance is only assigned year month and day...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29);
- int minute = myDateTime.Minute;
-
- if (minute != 0)
- {
- TestLibrary.TestFramework.LogError("003", "The minute is not zero when no value is assigned at init time!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeminvalue.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeminvalue.cs
deleted file mode 100644
index ebe7f75b74..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeminvalue.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-/// <summary>
-/// MinValue
-/// </summary>
-public class DateTimeMinValue
-{
- #region Private Fields
- private const long DATETIME_MIN_VALUE_TICKS = 0;
- #endregion
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: DateTime.MinValue should be 00:00:00.0000000, January 1, 0001");
-
- try
- {
- DateTime desiredValue = new DateTime(DATETIME_MIN_VALUE_TICKS);
- if (!desiredValue.Equals(DateTime.MinValue))
- {
- TestLibrary.TestFramework.LogError("001", "DateTime.MinValue is not 00:00:00.0000000, January 1, 0001");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeMinValue test = new DateTimeMinValue();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeMinValue");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimenow.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimenow.cs
deleted file mode 100644
index b9c9c8ceb7..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimenow.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections;
-using System.Threading;
-
-public class DateTimeNow
-{
- public static int Main(string[] args)
- {
- DateTimeNow now = new DateTimeNow();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.Now property...");
-
- if (now.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginTestCase("Verify DateTime.Now is local kind...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new System.Globalization.CultureInfo("");
- DateTime myDateTime = DateTime.Now;
- Type typeOfNow = myDateTime.GetType();
- DateTime toLocal = myDateTime.ToLocalTime();
-
- if (myDateTime != toLocal)
- {
- TestLibrary.TestFramework.LogError("001","The kind of Now property is not local!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002","Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginTestCase("Verify the type of Now property is DateTime...");
-
- try
- {
- DateTime myDateTime = DateTime.Now;
- Type typeOfNow = myDateTime.GetType();
-
- if (typeOfNow.ToString() != "System.DateTime")
- {
- TestLibrary.TestFramework.LogError("003","The type of Now property is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004","Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeparse1.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeparse1.cs
deleted file mode 100644
index d759d4fa3e..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeparse1.cs
+++ /dev/null
@@ -1,828 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-public class DateTimeParse1
-{
- private CultureInfo CurrentCulture = TestLibrary.Utilities.CurrentCulture;
- private const int c_MIN_STRING_LEN = 1;
- private const int c_MAX_STRING_LEN = 2048;
- private const int c_NUM_LOOPS = 100;
- //new string[12] {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
- private static string[] c_MONTHS = CultureInfo.InvariantCulture.DateTimeFormat.AbbreviatedMonthNames;
- //new string[12] {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
- private static string[] c_MONTHS_SH = CultureInfo.InvariantCulture.DateTimeFormat.AbbreviatedMonthGenitiveNames;
- //new string[7] {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
- private static string[] c_DAYS_SH = CultureInfo.InvariantCulture.DateTimeFormat.AbbreviatedDayNames;
-
- public static int Main()
- {
- DateTimeParse1 test = new DateTimeParse1();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeParse1");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- TestLibrary.Utilities.CurrentCulture = CultureInfo.InvariantCulture;
-
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
- retVal = PosTest7() && retVal;
- retVal = PosTest8() && retVal;
- retVal = PosTest9() && retVal;
- retVal = PosTest10() && retVal;
- retVal = PosTest11() && retVal;
- retVal = PosTest12() && retVal;
- retVal = PosTest13() && retVal;
- retVal = PosTest14() && retVal;
-
- TestLibrary.Utilities.CurrentCulture = CurrentCulture;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- string dateBefore = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: DateTime.Parse(DateTime.Now)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.Parse( dateBefore );
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("001", "DateTime.Parse(" + dateBefore + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 29
- int year; // 1900 - 2000
- int month; // 1 - 12
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: DateTime.Parse(M/d/yyyy (ShortDatePattern ex: 1/3/2002))");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 28) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12) + 1;
-
- dateBefore = month + "/" + day + "/" + year;
- dateAfter = DateTime.Parse( dateBefore );
-
- if (month != dateAfter.Month || day != dateAfter.Day || year != dateAfter.Year)
- {
- TestLibrary.TestFramework.LogError("003", "DateTime.Parse(" + dateBefore + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("004", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int dayOfWeek; // 0 - 6
- int day; // 1 - 28
- int year; // 1900 - 2000
- int month; // 0 - 11
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: DateTime.Parse(dddd, MMMM dd, yyyy (LongDatePattern ex: Thursday, January 03, 2002))");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
-
- // cheat and get day of the week
- dateAfter = DateTime.Parse( (month+1) + "/" + day + "/" + year);
- dayOfWeek = (int)dateAfter.DayOfWeek;
-
- // parse the date
- dateBefore = (DayOfWeek)dayOfWeek + ", " + c_MONTHS[month] + " " + day + ", " + year;
- dateAfter = DateTime.Parse( dateBefore );
-
- if ((month+1) != dateAfter.Month || day != dateAfter.Day || year != dateAfter.Year || (DayOfWeek)dayOfWeek != dateAfter.DayOfWeek)
- {
- TestLibrary.TestFramework.LogError("005", "DateTime.Parse(" + dateBefore + ") did not equal (" + dateAfter.DayOfWeek + ", " + c_MONTHS[dateAfter.Month-1] + " " + dateAfter.Day + ", " + dateAfter.Year + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("006", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int dayOfWeek; // 0 - 6
- int day; // 1 - 28
- int year; // 1900 - 2000
- int month; // 0 - 11
- int hour; // 0 - 11
- int minute; // 0 - 59
- int timeOfDay; // 0 -1
- string[] twelveHour = new string[2] {"AM", "PM"};
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: DateTime.Parse(ex: Thursday, January 03, 2002 12:00 AM)");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
- hour = (TestLibrary.Generator.GetInt32(-55) % 12);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- timeOfDay = (TestLibrary.Generator.GetInt32(-55) % 2);
-
- // cheat and get day of the week
- dateAfter = DateTime.Parse( (month+1) + "/" + day + "/" + year);
- dayOfWeek = (int)dateAfter.DayOfWeek;
-
- // parse the date
- dateBefore = (DayOfWeek)dayOfWeek + ", " + c_MONTHS[month] + " " + day + ", " + year + " " + hour + ":" + minute + " " + twelveHour[timeOfDay];
- dateAfter = DateTime.Parse( dateBefore );
-
- if ((month+1) != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || (DayOfWeek)dayOfWeek != dateAfter.DayOfWeek
- || (hour + timeOfDay*12) != dateAfter.Hour
- || minute != dateAfter.Minute)
- {
- TestLibrary.TestFramework.LogError("007", "DateTime.Parse(" + dateBefore + ") did not equal (" + dateAfter.DayOfWeek + ", " + c_MONTHS[dateAfter.Month-1] + " " + dateAfter.Day + ", " + dateAfter.Year + " " + dateAfter.Hour + ":" + dateAfter.Minute + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("008", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int dayOfWeek; // 0 - 6
- int day; // 1 - 28
- int year; // 1900 - 2000
- int month; // 0 - 11
- int hour; // 0 - 11
- int minute; // 0 - 59
- int second; // 0 - 59
- int timeOfDay; // 0 -1
- string[] twelveHour = new string[2] {"AM", "PM"};
-
- TestLibrary.TestFramework.BeginScenario("PosTest5: DateTime.Parse(dddd, MMMM dd, yyyy h:mm:ss tt (FullDateTimePattern ex: Thursday, January 03, 2002 12:00:00 AM))");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
- hour = (TestLibrary.Generator.GetInt32(-55) % 12);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
- timeOfDay = (TestLibrary.Generator.GetInt32(-55) % 2);
-
- // cheat and get day of the week
- dateAfter = DateTime.Parse( (month+1) + "/" + day + "/" + year);
- dayOfWeek = (int)dateAfter.DayOfWeek;
-
- // parse the date
- dateBefore = (DayOfWeek)dayOfWeek + ", " + c_MONTHS[month] + " " + day + ", " + year + " " + hour + ":" + minute + ":" + second + " " + twelveHour[timeOfDay];
- dateAfter = DateTime.Parse( dateBefore );
-
- if ((month+1) != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || (DayOfWeek)dayOfWeek != dateAfter.DayOfWeek
- || (hour + timeOfDay*12) != dateAfter.Hour
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("009", "DateTime.Parse(" + dateBefore + ") did not equal (" + dateAfter.DayOfWeek + ", " + c_MONTHS[dateAfter.Month-1] + " " + dateAfter.Day + ", " + dateAfter.Year + " " + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("010", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest6()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 28
- int month; // 1 - 12
- int year; // 1900 - 2000
- int hour; // 0 - 11
- int minute; // 0 - 59
- int timeOfDay; // 0 -1
- string[] twelveHour = new string[2] {"AM", "PM"};
-
- TestLibrary.TestFramework.BeginScenario("PosTest6: DateTime.Parse(ex: 1/3/2002 12:00 AM)");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12) + 1;
- hour = (TestLibrary.Generator.GetInt32(-55) % 12);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- timeOfDay = (TestLibrary.Generator.GetInt32(-55) % 2);
-
- // parse the date
- dateBefore = month + "/" + day + "/" + year + " " + hour + ":" + minute + " " + twelveHour[timeOfDay];
- dateAfter = DateTime.Parse( dateBefore );
-
- if (month != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || (hour + timeOfDay*12) != dateAfter.Hour
- || minute != dateAfter.Minute)
- {
- TestLibrary.TestFramework.LogError("011", "DateTime.Parse(" + dateBefore + ") did not equal (" + dateAfter.Month + "/" + dateAfter.Day + "/" + dateAfter.Year + " " + dateAfter.Hour + ":" + dateAfter.Minute + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("012", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest7()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 28
- int month; // 1 - 12
- int year; // 1900 - 2000
- int hour; // 0 - 11
- int minute; // 0 - 59
- int second; // 0 - 59
- int timeOfDay; // 0 -1
- string[] twelveHour = new string[2] {"AM", "PM"};
-
- TestLibrary.TestFramework.BeginScenario("PosTest7: DateTime.Parse(ex: 1/3/2002 12:00:00 AM)");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12) + 1;
- hour = (TestLibrary.Generator.GetInt32(-55) % 12);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
- timeOfDay = (TestLibrary.Generator.GetInt32(-55) % 2);
-
- // parse the date
- dateBefore = month + "/" + day + "/" + year + " " + hour + ":" + minute + ":" + second + " " + twelveHour[timeOfDay];
- dateAfter = DateTime.Parse( dateBefore );
-
- if (month != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || (hour + timeOfDay*12) != dateAfter.Hour
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("013", "DateTime.Parse(" + dateBefore + ") did not equal (" + dateAfter.Month + "/" + dateAfter.Day + "/" + dateAfter.Year + " " + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("014", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("014", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest8()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 28
- int month; // 0 - 11
-
- TestLibrary.TestFramework.BeginScenario("PosTest8: DateTime.Parse(MMMM dd (MonthDayPattern ex: January 03))");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
-
- // parse the date
- dateBefore = c_MONTHS[month] + " " + day;
- dateAfter = DateTime.Parse( dateBefore );
-
- if ((month+1) != dateAfter.Month
- || day != dateAfter.Day)
- {
- TestLibrary.TestFramework.LogError("015", "DateTime.Parse(" + dateBefore + ") did not equal (" + c_MONTHS[dateAfter.Month-1] + " " + dateAfter.Day + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("016", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("016", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest9()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int dayOfWeek; // 0 - 6
- int day; // 1 - 28
- int year; // 1900 - 2000
- int month; // 0 - 11
- int hour; // 12 - 23
- int minute; // 0 - 59
- int second; // 0 - 59
-
- TestLibrary.TestFramework.BeginScenario("PosTest9: DateTime.Parse(ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (RFC1123Pattern ex: Thu, 03 Jan 2002 00:00:00 GMT))");
-
- DateTime now = DateTime.Now;
- int hourshift;
- if (now - now.ToUniversalTime() < TimeSpan.Zero) // western hemisphere
- hourshift = +12;
- else
- hourshift = 0;
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
- hour = (TestLibrary.Generator.GetInt32(-55) % 12) + hourshift; // Parse will convert perform GMT -> Local conversion
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
- dayOfWeek = (TestLibrary.Generator.GetInt32(-55) % 7);
-
- // cheat and get day of the week
- dateAfter = DateTime.Parse( (month+1) + "/" + day + "/" + year);
- dayOfWeek = (int)dateAfter.DayOfWeek;
-
- // parse the date
- dateBefore = c_DAYS_SH[dayOfWeek] + ", " + day + " " + c_MONTHS_SH[month] + " " + year + " " + hour + ":" + minute + ":" + second + " GMT";
- dateAfter = DateTime.Parse( dateBefore );
-
- if ((month+1) != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || (DayOfWeek)dayOfWeek != dateAfter.DayOfWeek
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("017", "DateTime.Parse(" + dateBefore + ") did not equal (" + c_DAYS_SH[(int)dateAfter.DayOfWeek] + ", " + dateAfter.Day + " " + c_MONTHS_SH[dateAfter.Month-1] + " " + dateAfter.Year + " " + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + " " + dateAfter.Kind + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("018", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("018", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest10()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 28
- int month; // 1 - 12
- int year; // 1900 - 2000
- int hour; // 0 - 23
- int minute; // 0 - 59
- int second; // 0 - 59
-
- TestLibrary.TestFramework.BeginScenario("PosTest10: DateTime.Parse(yyyy'-'MM'-'dd'T'HH':'mm':'ss (SortableDateTimePattern ex: 2002-01-03T00:00:00))");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12) + 1;
- hour = (TestLibrary.Generator.GetInt32(-55) % 24);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
-
- // parse the date
- dateBefore = year + "-" + month + "-" + day + "T" + ((10 > hour) ? "0" : "") + hour + ":" + ((10 > minute) ? "0" : "") + minute + ":" + ((10 > second) ? "0" : "") + second;
- dateAfter = DateTime.Parse( dateBefore );
-
- if (month != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || hour != dateAfter.Hour
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("019", "DateTime.Parse(" + dateBefore + ") did not equal (" + dateAfter.Year + "-" + dateAfter.Month + "-" + dateAfter.Day + "T" + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("020", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("020", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest11()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int hour; // 0 - 11
- int minute; // 0 - 59
- int timeOfDay; // 0 -1
- string[] twelveHour = new string[2] {"AM", "PM"};
-
- TestLibrary.TestFramework.BeginScenario("PosTest11: DateTime.Parse(h:mm tt (ShortTimePattern ex: 12:00 AM))");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- hour = (TestLibrary.Generator.GetInt32(-55) % 12);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- timeOfDay = (TestLibrary.Generator.GetInt32(-55) % 2);
-
- // parse the date
- dateBefore = hour + ":" + minute + " " + twelveHour[timeOfDay];
- dateAfter = DateTime.Parse( dateBefore );
-
- if ((hour + timeOfDay*12) != dateAfter.Hour
- || minute != dateAfter.Minute)
- {
- TestLibrary.TestFramework.LogError("021", "DateTime.Parse(" + dateBefore + ") did not equal (" + dateAfter.Hour + ":" + dateAfter.Minute + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("022", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("022", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest12()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int hour; // 0 - 11
- int minute; // 0 - 59
- int second; // 0 - 59
- int timeOfDay; // 0 -1
- string[] twelveHour = new string[2] {"AM", "PM"};
-
- TestLibrary.TestFramework.BeginScenario("PosTest12: DateTime.Parse(h:mm:ss tt (LongTimePattern ex: 12:00:00 AM))");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- hour = (TestLibrary.Generator.GetInt32(-55) % 12);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
- timeOfDay = (TestLibrary.Generator.GetInt32(-55) % 2);
-
- // parse the date
- dateBefore = hour + ":" + minute + ":" + second + " " + twelveHour[timeOfDay];
- dateAfter = DateTime.Parse( dateBefore );
-
- if ((hour + timeOfDay*12) != dateAfter.Hour
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("023", "DateTime.Parse(" + dateBefore + ") did not equal (" + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("024", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("024", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest13()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 28
- int month; // 1 - 12
- int year; // 1900 - 2000
- int hour; // 12 - 23
- int minute; // 0 - 59
- int second; // 0 - 59
-
- TestLibrary.TestFramework.BeginScenario("PosTest13: DateTime.Parse(yyyy'-'MM'-'dd HH':'mm':'ss'Z' (UniversalSortableDateTimePattern ex: 2002-01-03 00:00:00Z))");
-
- DateTime now = DateTime.Now;
- int hourshift;
- if (now - now.ToUniversalTime() < TimeSpan.Zero) // western hemisphere
- hourshift = +12;
- else
- hourshift = 0;
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12) + 1;
- hour = (TestLibrary.Generator.GetInt32(-55) % 12) + hourshift; // conversion
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
-
- // parse the date
- dateBefore = year + "-" + month + "-" + day + " " + ((10 > hour) ? "0" : "") + hour + ":" + ((10 > minute) ? "0" : "") + minute + ":" + ((10 > second) ? "0" : "") + second +"Z";
- dateAfter = DateTime.Parse( dateBefore );
-
- if (month != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("025", "DateTime.Parse(" + dateBefore + ") did not equal (" + dateAfter.Year + "-" + dateAfter.Month + "-" + dateAfter.Day + " " + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + " " + dateAfter.Kind + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("026", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("026", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest14()
- {
- bool retVal = true;
- DateTime dateAfter;
- string dateBefore = "";
- int year; // 1900 - 2000
- int month; // 0 - 11
-
- TestLibrary.TestFramework.BeginScenario("PosTest14: DateTime.Parse(MMMM, yyyy (YearMonthPattern ex: January, 2002))");
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
-
- // parse the date
- dateBefore = c_MONTHS[month] + ", " + year;
- dateAfter = DateTime.Parse( dateBefore );
-
- if ((month+1) != dateAfter.Month
- || year != dateAfter.Year)
- {
- TestLibrary.TestFramework.LogError("027", "DateTime.Parse(" + dateBefore + ") did not equal (" + c_MONTHS[dateAfter.Month-1] + ", " + dateAfter.Year + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("028", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("028", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: DateTime.Parse(null)");
-
- try
- {
- DateTime.Parse(null);
-
- TestLibrary.TestFramework.LogError("029", "DateTime.Parse(null) should have thrown");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("030", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: DateTime.Parse(String.Empty)");
-
- try
- {
- DateTime.Parse(String.Empty);
-
- TestLibrary.TestFramework.LogError("031", "DateTime.Parse(String.Empty) should have thrown");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("032", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
- string strDateTime = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: DateTime.Parse(<garbage>)");
-
- try
- {
- for (int i=0; i<c_NUM_LOOPS; i++)
- {
- try
- {
- strDateTime = TestLibrary.Generator.GetString(-55, false, c_MIN_STRING_LEN, c_MAX_STRING_LEN);
- dateAfter = DateTime.Parse(strDateTime);
-
- TestLibrary.TestFramework.LogError("033", "DateTime.Parse(" + strDateTime + ") should have thrown (" + dateAfter + ")");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("034", "Failing date: " + strDateTime);
- TestLibrary.TestFramework.LogError("034", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeparse2.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeparse2.cs
deleted file mode 100644
index f5b8bb5aea..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeparse2.cs
+++ /dev/null
@@ -1,216 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-public class DateTimeParse2
-{
- private const int c_MIN_STRING_LEN = 1;
- private const int c_MAX_STRING_LEN = 2048;
- private const int c_NUM_LOOPS = 100;
-
- public static int Main()
- {
- DateTimeParse2 test = new DateTimeParse2();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeParse2");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- string dateBefore = "";
- DateTime dateAfter;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: DateTime.Parse(DateTime.Now, formater)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.Parse( dateBefore, formater);
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("001", "DateTime.Parse(" + dateBefore + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- string dateBefore = "";
- DateTime dateAfter;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: DateTime.Parse(DateTime.Now, null)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.Parse( dateBefore, null);
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("009", "DateTime.Parse(" + dateBefore + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("010", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest1()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: DateTime.Parse(null, formater)");
-
- try
- {
- DateTime.Parse(null, formater);
-
- TestLibrary.TestFramework.LogError("003", "DateTime.Parse(null) should have thrown");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: DateTime.Parse(String.Empty, formater)");
-
- try
- {
- DateTime.Parse(String.Empty, formater);
-
- TestLibrary.TestFramework.LogError("005", "DateTime.Parse(String.Empty) should have thrown");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string strDateTime = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: DateTime.Parse(<garbage>, formater)");
-
- try
- {
- for (int i=0; i<c_NUM_LOOPS; i++)
- {
- try
- {
- strDateTime = TestLibrary.Generator.GetString(-55, false, c_MIN_STRING_LEN, c_MAX_STRING_LEN);
- dateAfter = DateTime.Parse(strDateTime, formater);
-
- TestLibrary.TestFramework.LogError("007", "DateTime.Parse(" + strDateTime + ") should have thrown (" + dateAfter + ")");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Failing date: " + strDateTime);
- TestLibrary.TestFramework.LogError("008", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
-}
-
-public class MyFormater : IFormatProvider
-{
- public object GetFormat(Type formatType)
- {
- if (typeof(IFormatProvider) == formatType)
- {
- return this;
- }
- else
- {
- return null;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeparse3.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeparse3.cs
deleted file mode 100644
index 135fb8f167..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeparse3.cs
+++ /dev/null
@@ -1,274 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization ;
-
-public class DateTimeParse3
-{
- private const int c_MIN_STRING_LEN = 1;
- private const int c_MAX_STRING_LEN = 2048;
- private const int c_NUM_LOOPS = 100;
-
- public static int Main()
- {
- DateTimeParse3 test = new DateTimeParse3();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeParse3");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- // The NoCurrentDateDefault value is the only value that is useful with
- // the DateTime.Parse method, because DateTime.Parse always ignores leading,
- // trailing, and inner white-space characters.
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- string dateBefore = "";
- DateTime dateAfter;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: DateTime.Parse(DateTime.Now, formater, DateTimeStyles.NoCurrentDateDefault)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.Parse( dateBefore, formater, DateTimeStyles.NoCurrentDateDefault);
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("001", "DateTime.Parse(" + dateBefore + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- string dateBefore = "";
- DateTime dateAfter;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: DateTime.Parse(DateTime.Now, null, DateTimeStyles.NoCurrentDateDefault)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.Parse( dateBefore, null, DateTimeStyles.NoCurrentDateDefault);
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("009", "DateTime.Parse(" + dateBefore + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("010", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
- string dateBefore = "";
- DateTime dateAfter;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: DateTime.Parse(DateTime.Now, null, <invalid DateTimeStyles>)");
-
- try
- {
- for(int i=-1024; i<1024; i++)
- {
- try
- {
- // skip the valid values
- if (0 == (i & (int)DateTimeStyles.AdjustToUniversal)
- && 0 == (i & (int)DateTimeStyles.AssumeUniversal)
- && 0 == (i & (int)DateTimeStyles.AllowInnerWhite)
- && 0 == (i & (int)DateTimeStyles.AllowLeadingWhite)
- && 0 == (i & (int)DateTimeStyles.AllowTrailingWhite)
- && 0 == (i & (int)DateTimeStyles.AllowWhiteSpaces)
- && 0 == (i & (int)DateTimeStyles.NoCurrentDateDefault)
- && i != (int)DateTimeStyles.None
- )
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.Parse( dateBefore, null, (DateTimeStyles)i);
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("011", "DateTime.Parse(" + dateBefore + ", " + (DateTimeStyles)i + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- }
- catch (System.ArgumentException)
- {
- //
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("012", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest1()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: DateTime.Parse(null, formater, DateTimeStyles.NoCurrentDateDefault)");
-
- try
- {
- DateTime.Parse(null, formater, DateTimeStyles.NoCurrentDateDefault);
-
- TestLibrary.TestFramework.LogError("003", "DateTime.Parse(null) should have thrown");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: DateTime.Parse(String.Empty, formater, DateTimeStyles.NoCurrentDateDefault)");
-
- try
- {
- DateTime.Parse(String.Empty, formater, DateTimeStyles.NoCurrentDateDefault);
-
- TestLibrary.TestFramework.LogError("005", "DateTime.Parse(String.Empty) should have thrown");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string strDateTime = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: DateTime.Parse(<garbage>, formater, DateTimeStyles.NoCurrentDateDefault)");
-
- try
- {
- for (int i=0; i<c_NUM_LOOPS; i++)
- {
- try
- {
- strDateTime = TestLibrary.Generator.GetString(-55, false, c_MIN_STRING_LEN, c_MAX_STRING_LEN);
- dateAfter = DateTime.Parse(strDateTime, formater, DateTimeStyles.NoCurrentDateDefault);
-
- TestLibrary.TestFramework.LogError("007", "DateTime.Parse(" + strDateTime + ") should have thrown (" + dateAfter + ")");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Failing date: " + strDateTime);
- TestLibrary.TestFramework.LogError("008", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-}
-
-public class MyFormater : IFormatProvider
-{
- public object GetFormat(Type formatType)
- {
- if (typeof(IFormatProvider) == formatType)
- {
- return this;
- }
- else
- {
- return null;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact1.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact1.cs
deleted file mode 100644
index b249da69a6..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact1.cs
+++ /dev/null
@@ -1,964 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-public class DateTimeParseExact1
-{
- private const int c_MIN_STRING_LEN = 1;
- private const int c_MAX_STRING_LEN = 2048;
- private const int c_NUM_LOOPS = 100;
- private static CultureInfo CurrentCulture = TestLibrary.Utilities.CurrentCulture;
- private static CultureInfo EnglishCulture = new CultureInfo("en-US");
- private static string[] c_MONTHS = EnglishCulture.DateTimeFormat.MonthGenitiveNames;
- private static string[] c_MONTHS_SH = EnglishCulture.DateTimeFormat.AbbreviatedMonthGenitiveNames;
- private static string[] c_DAYS_SH = EnglishCulture.DateTimeFormat.AbbreviatedDayNames;
-
- public static int Main()
- {
- DateTimeParseExact1 test = new DateTimeParseExact1();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeParseExact1");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest15() && retVal;
-
- TestLibrary.Utilities.CurrentCulture = EnglishCulture;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest7() && retVal;
- retVal = PosTest8() && retVal;
- retVal = PosTest9() && retVal;
- retVal = PosTest10() && retVal;
- retVal = PosTest12() && retVal;
- retVal = PosTest13() && retVal;
- retVal = PosTest14() && retVal;
- TestLibrary.Utilities.CurrentCulture = CurrentCulture;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
- retVal = NegTest4() && retVal;
- retVal = NegTest5() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string dateBefore = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: DateTime.ParseExact(G, DateTime.Now)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.ParseExact( dateBefore, "G", formater );
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("001", "DateTime.ParseExact(" + dateBefore + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 29
- int year; // 1900 - 2000
- int month; // 1 - 12
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: DateTime.ParseExact(d, M/d/yyyy (ShortDatePattern ex: 1/3/2002))");
-
- // Skipping test because format 'd' on some platforms represents the year using two digits,
- // this cause extrange results. Some dates are shifted 1 hour backward. See DDB 173277 - MAC bug
- // Culture could be customized and dateseparator may be different than / or MM is used in the format
- if (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.ShortDatePattern, "M/d/yyyy", StringComparison.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogInformation("Skipping test case, ShortDatePattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.ShortDatePattern);
- return retVal;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 28) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12) + 1;
-
- dateBefore = month + "/" + day + "/" + year;
- dateAfter = DateTime.ParseExact( dateBefore, "d", formater);
-
- if (month != dateAfter.Month || day != dateAfter.Day || year != dateAfter.Year)
- {
- TestLibrary.TestFramework.LogError("003", "DateTime.ParseExact(" + dateBefore + ") did not equal " + dateAfter.ToString() + ". Got M="+dateAfter.Month+", d="+dateAfter.Day+", y="+dateAfter.Year);
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("004", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int dayOfWeek; // 0 - 6
- int day; // 1 - 28
- int year; // 1900 - 2000
- int month; // 0 - 11
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: DateTime.ParseExact(D, dddd, MMMM dd, yyyy (LongDatePattern ex: Thursday, January 03, 2002))");
- // Culture could be customized
- if (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongDatePattern, "dddd, MMMM dd, yyyy", StringComparison.Ordinal) != 0 &&
- String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongDatePattern, "dddd, MMMM d, yyyy", StringComparison.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogInformation("Skipping test case, LongDatePattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongDatePattern);
- return retVal;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
-
- // cheat and get day of the week
- dateAfter = DateTime.Parse( (month+1) + "/" + day + "/" + year);
- dayOfWeek = (int)dateAfter.DayOfWeek;
-
- // parse the date
- dateBefore = (DayOfWeek)dayOfWeek + ", " + c_MONTHS[month] + " " +
- (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongDatePattern, "dddd, MMMM dd, yyyy", StringComparison.Ordinal) == 0 && 10 > day ? "0" : "") + day + ", " + year;
- dateAfter = DateTime.ParseExact( dateBefore, "D", formater );
-
- if ((month+1) != dateAfter.Month || day != dateAfter.Day || year != dateAfter.Year || (DayOfWeek)dayOfWeek != dateAfter.DayOfWeek)
- {
- TestLibrary.TestFramework.LogError("005", "DateTime.ParseExact(" + dateBefore + ") did not equal (" + dateAfter.DayOfWeek + ", " + c_MONTHS[dateAfter.Month-1] + " " + dateAfter.Day + ", " + dateAfter.Year + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("006", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int dayOfWeek; // 0 - 6
- int day; // 1 - 28
- int year; // 1900 - 2000
- int month; // 0 - 11
- int hour; // 0 - 11
- int minute; // 0 - 59
- int second; // 0 - 59
- int timeOfDay; // 0 -1
- string[] twelveHour = new string[2] {"AM", "PM"};
- DateTime dateBeforeForValidity;
-
- TestLibrary.TestFramework.BeginScenario("PosTest5: DateTime.ParseExact(F, dddd, MMMM dd, yyyy h:mm:ss tt (FullDateTimePattern ex: Thursday, January 03, 2002 12:00:00 AM))");
-
- // Culture could be customized
- if (!((String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongDatePattern, "dddd, MMMM dd, yyyy", StringComparison.Ordinal) == 0 ||
- String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongDatePattern, "dddd, MMMM d, yyyy", StringComparison.Ordinal) == 0) &&
- (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern, "hh:mm:ss tt", StringComparison.Ordinal) == 0 ||
- String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern, "h:mm:ss tt", StringComparison.Ordinal) == 0)))
-
- {
- TestLibrary.TestFramework.LogInformation("Skipping test case, " +
- " LongDatePattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongDatePattern +
- " LongTimePattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern);
- return retVal;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
- hour = (TestLibrary.Generator.GetInt32(-55) % 12);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
- timeOfDay = (TestLibrary.Generator.GetInt32(-55) % 2);
-
- dateBeforeForValidity = new DateTime(year, month + 1, day, hour, minute, second);
-
- // cheat and get day of the week
- dateAfter = DateTime.Parse( (month+1) + "/" + day + "/" + year);
- dayOfWeek = (int)dateAfter.DayOfWeek;
-
- // parse the date
- dateBefore = (DayOfWeek)dayOfWeek + ", " +
- c_MONTHS[month] + " " +
- (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongDatePattern, "dddd, MMMM dd, yyyy", StringComparison.Ordinal) == 0 && 10 > day ? "0" : "") + day + ", " +
- year + " " +
- (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern, "hh:mm:ss tt", StringComparison.Ordinal) == 0 && 10 > hour ? "0" : "") + hour + ":" +
- (10 > minute ? "0" : "") + minute + ":" +
- (10 > second ? "0" : "") + second + " " + twelveHour[timeOfDay];
-
- if (!TestLibrary.Utilities.IsWindows)
- {
- dateAfter = DateTime.Parse(dateBefore);
- TimeSpan span = dateAfter - dateAfter.ToUniversalTime();
- String strSpan = (span.Duration()==span ? "+" : "-") +
- (10 > span.Duration().Hours ? "0" : "") + span.Duration().Hours +
- ":" + (10 > span.Minutes ? "0" : "") + span.Minutes;
- dateBefore += " " + strSpan;
- }
-
- dateAfter = DateTime.ParseExact( dateBefore, "F", formater );
-
- //Dev10 Bug 686124: For mac, the ambiguous and invalid points in time on the Mac
- if (false == TimeZoneInfo.Local.IsInvalidTime(dateBeforeForValidity))
- {
- if ((month + 1) != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || (DayOfWeek)dayOfWeek != dateAfter.DayOfWeek
- || (hour + timeOfDay * 12) != dateAfter.Hour
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("009", "DateTime.ParseExact(" + dateBefore + ") did not equal (" + dateAfter.DayOfWeek + ", " + c_MONTHS[dateAfter.Month - 1] + " " + dateAfter.Day + ", " + dateAfter.Year + " " + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + ")");
- retVal = false;
- }
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("010", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest7()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 28
- int month; // 1 - 12
- int year; // 1900 - 2000
- int hour; // 0 - 11
- int minute; // 0 - 59
- int second; // 0 - 59
- int timeOfDay; // 0 -1
- string[] twelveHour = new string[2] {"AM", "PM"};
-
- DateTime dateBeforeForValidity;
-
- TestLibrary.TestFramework.BeginScenario("PosTest7: DateTime.ParseExact(G, ex: 1/3/2002 12:00:00 AM)");
-
- // Culture could be customized
- if (!(String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.ShortDatePattern, "M/d/yyyy", StringComparison.Ordinal) == 0 &&
- (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern, "hh:mm:ss tt", StringComparison.Ordinal) == 0 ||
- String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern, "h:mm:ss tt", StringComparison.Ordinal) == 0)))
- {
- TestLibrary.TestFramework.LogInformation("Skipping test case, " +
- " ShortDatePattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.ShortDatePattern +
- " LongTimePattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern);
- return retVal;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1930;
- month = (TestLibrary.Generator.GetInt32(-55) % 12) + 1;
- hour = (TestLibrary.Generator.GetInt32(-55) % 12);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
- timeOfDay = (TestLibrary.Generator.GetInt32(-55) % 2);
- dateBeforeForValidity = new DateTime(year, month, day, hour, minute, second);
-
- // parse the date
- dateBefore = month + "/" + + day + "/" + year + " " +
- (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern, "hh:mm:ss tt", StringComparison.Ordinal) == 0 && 10 > hour ? "0" : "") + hour + ":" +
- (10 > minute ? "0" : "") + minute + ":" + (10 > second ? "0" : "") + second + " " + twelveHour[timeOfDay];
-
- if (!TestLibrary.Utilities.IsWindows)
- {
- dateAfter = DateTime.Parse(dateBefore);
- TimeSpan span = dateAfter - dateAfter.ToUniversalTime();
- String strSpan = (span.Duration()==span ? "+" : "-") +
- (10 > span.Duration().Hours ? "0" : "") + span.Duration().Hours +
- ":" + (10 > span.Minutes ? "0" : "") + span.Minutes;
- dateBefore += " " + strSpan;
- }
-
- dateAfter = DateTime.ParseExact(dateBefore, "G", formater);
-
- //Dev10 Bug 686124: For mac, the ambiguous and invalid points in time on the Mac
- if (false == TimeZoneInfo.Local.IsInvalidTime(dateBeforeForValidity))
- {
- if (month != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || (hour + timeOfDay * 12) != dateAfter.Hour
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("013", "DateTime.ParseExact(" + dateBefore + ") did not equal (" + dateAfter.Month + "/" + dateAfter.Day + "/" + dateAfter.Year + " " + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + ")");
- retVal = false;
- }
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("014", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("014", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest8()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 28
- int month; // 0 - 11
-
- TestLibrary.TestFramework.BeginScenario("PosTest8: DateTime.ParseExact(m, MMMM dd (MonthDayPattern ex: January 03))");
-
- // Culture could be customized
- if (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.MonthDayPattern, "MMMM dd", StringComparison.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogInformation("Skipping test case, MonthDayPattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.MonthDayPattern);
- return retVal;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
-
- // parse the date
- dateBefore = c_MONTHS[month] + " " + (10>day?"0":"") + day;
- dateAfter = DateTime.ParseExact( dateBefore, "m", formater );
-
- if ((month+1) != dateAfter.Month
- || day != dateAfter.Day)
- {
- TestLibrary.TestFramework.LogError("015", "DateTime.ParseExact(" + dateBefore + ") did not equal (" + c_MONTHS[dateAfter.Month-1] + " " + dateAfter.Day + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("016", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("016", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest9()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int dayOfWeek; // 0 - 6
- int day; // 1 - 28
- int year; // 1900 - 2000
- int month; // 0 - 11
- int hour; // 12 - 23
- int minute; // 0 - 59
- int second; // 0 - 59
- DateTime dateBeforeForValidity;
-
- TestLibrary.TestFramework.BeginScenario("PosTest9: DateTime.ParseExact(R, ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (RFC1123Pattern ex: Thu, 03 Jan 2002 00:00:00 GMT))");
-
- // if there is any change in RFC1123Pattern, this test case would fail. The formatting should be updated!!!
- if (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.RFC1123Pattern, "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", StringComparison.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogError("PosTest9", "Skipping test case, RFC1123Pattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.RFC1123Pattern);
- return false;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
- hour = (TestLibrary.Generator.GetInt32(-55) % 12) + 12; // Parse will convert perform GMT -> PST conversion
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
- dayOfWeek = (TestLibrary.Generator.GetInt32(-55) % 7);
-
- dateBeforeForValidity = new DateTime(year, month + 1, day, hour, minute, second);
-
- // cheat and get day of the week
- dateAfter = DateTime.Parse( (month+1) + "/" + day + "/" + year);
- dayOfWeek = (int)dateAfter.DayOfWeek;
-
- // parse the date
- dateBefore = c_DAYS_SH[dayOfWeek] + ", " + (10>day?"0":"") + day + " " + c_MONTHS_SH[month] + " " + year + " " + (10>hour?"0":"") + hour + ":" + (10>minute?"0":"") + minute + ":" + (10>second?"0":"") + second + " GMT";
- dateAfter = DateTime.ParseExact( dateBefore, "R", formater );
-
- //Dev10 Bug 686124: For mac, the ambiguous and invalid points in time on the Mac
- if (false == TimeZoneInfo.Local.IsInvalidTime(dateBeforeForValidity))
- {
- if ((month + 1) != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || (DayOfWeek)dayOfWeek != dateAfter.DayOfWeek
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("017", "DateTime.ParseExact(" + dateBefore + ") did not equal (" + c_DAYS_SH[(int)dateAfter.DayOfWeek] + ", " + dateAfter.Day + " " + c_MONTHS_SH[dateAfter.Month - 1] + " " + dateAfter.Year + " " + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + " GMT)");
- retVal = false;
- }
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("018", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("018", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest10()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 28
- int month; // 1 - 12
- int year; // 1900 - 2000
- int hour; // 0 - 23
- int minute; // 0 - 59
- int second; // 0 - 59
- DateTime dateBeforeForValidity;
-
- TestLibrary.TestFramework.BeginScenario("PosTest10: DateTime.ParseExact(s, yyyy'-'MM'-'dd'T'HH':'mm':'ss (SortableDateTimePattern ex: 2002-01-03T00:00:00))");
- // if there is any change in SortableDateTimePattern, this test case would fail, The formatting should be updated!!!
- if (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.SortableDateTimePattern, "yyyy'-'MM'-'dd'T'HH':'mm':'ss", StringComparison.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogError("PosTest10", "Skipping test case, SortableDateTimePattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.SortableDateTimePattern);
- return false;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12) + 1;
- hour = (TestLibrary.Generator.GetInt32(-55) % 24);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
-
- dateBeforeForValidity = new DateTime(year, month, day, hour, minute, second);
-
- // parse the date
- dateBefore = year + "-" + (10>month?"0":"") + month + "-" + (10>day?"0":"") + day + "T" + ((10 > hour) ? "0" : "") + hour + ":" + ((10 > minute) ? "0" : "") + minute + ":" + ((10 > second) ? "0" : "") + second;
- dateAfter = DateTime.ParseExact( dateBefore, "s", formater );
-
- //Dev10 Bug 686124: For mac, the ambiguous and invalid points in time on the Mac
- if (false == TimeZoneInfo.Local.IsInvalidTime(dateBeforeForValidity))
- {
- if (month != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || hour != dateAfter.Hour
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("019", "DateTime.ParseExact(" + dateBefore + ") did not equal (" + dateAfter.Year + "-" + dateAfter.Month + "-" + dateAfter.Day + "T" + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + ")");
- retVal = false;
- }
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("020", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("020", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest12()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int hour; // 0 - 11
- int minute; // 0 - 59
- int second; // 0 - 59
- int timeOfDay; // 0 -1
- string[] twelveHour = new string[2] {"AM", "PM"};
-
- TestLibrary.TestFramework.BeginScenario("PosTest12: DateTime.ParseExact(T, h:mm:ss tt (LongTimePattern ex: 12:00:00 AM))");
-
- // Culture could be customized
- if (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern, "hh:mm:ss tt", StringComparison.Ordinal) != 0 &&
- String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern, "h:mm:ss tt", StringComparison.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogInformation("Skipping test case, " + " LongTimePattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern);
- return retVal;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- hour = (TestLibrary.Generator.GetInt32(-55) % 12);
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
- timeOfDay = (TestLibrary.Generator.GetInt32(-55) % 2);
-
- // parse the date
- int newHour = hour==0?12:hour;
- dateBefore = (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.LongTimePattern, "hh:mm:ss tt", StringComparison.Ordinal) == 0 && 10 > newHour ? "0" : "") + newHour +
- ":" + (10 > minute ? "0" : "") + minute + ":" + (10 > second ? "0" : "") + second + " " + twelveHour[timeOfDay];
- if (!TestLibrary.Utilities.IsWindows)
- {
- dateAfter = DateTime.Parse(dateBefore);
- TimeSpan span = dateAfter - dateAfter.ToUniversalTime();
- String strSpan = (span.Duration()==span ? "+" : "-") +
- (10 > span.Duration().Hours ? "0" : "") + span.Duration().Hours +
- ":" + (10 > span.Minutes ? "0" : "") + span.Minutes;
- dateBefore += " " + strSpan;
- }
-
- dateAfter = DateTime.ParseExact(dateBefore, "T", formater);
-
- if ((hour + timeOfDay*12) != dateAfter.Hour
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("023", "DateTime.ParseExact(" + dateBefore + ") did not equal (" + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("024", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("024", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest13()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int day; // 1 - 28
- int month; // 1 - 12
- int year; // 1900 - 2000
- int hour; // 12 - 23
- int minute; // 0 - 59
- int second; // 0 - 59
- DateTime dateBeforeForValidity;
-
- TestLibrary.TestFramework.BeginScenario("PosTest13: DateTime.ParseExact(u, yyyy'-'MM'-'dd HH':'mm':'ss'Z' (UniversalSortableDateTimePattern ex: 2002-01-03 00:00:00Z))");
-
- // if there is any change in SortableDateTimePattern, this test case would fail, The formatting should be updated!!!
- if (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.UniversalSortableDateTimePattern, "yyyy'-'MM'-'dd HH':'mm':'ss'Z'", StringComparison.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogError("PosTest13", "Skipping test case, UniversalSortableDateTimePattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.UniversalSortableDateTimePattern);
- return false;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- day = (TestLibrary.Generator.GetInt32(-55) % 27) + 1;
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12) + 1;
- hour = (TestLibrary.Generator.GetInt32(-55) % 12) + 12; // conversion
- minute = (TestLibrary.Generator.GetInt32(-55) % 60);
- second = (TestLibrary.Generator.GetInt32(-55) % 60);
-
- dateBeforeForValidity = new DateTime(year, month, day, hour, minute, second);
-
- // parse the date
- dateBefore = year + "-" + (10>month?"0":"") + month + "-" + (10>day?"0":"") + day + " " + ((10 > hour) ? "0" : "") + hour + ":" + ((10 > minute) ? "0" : "") + minute + ":" + ((10 > second) ? "0" : "") + second +"Z";
- dateAfter = DateTime.ParseExact( dateBefore, "u", formater );
-
- //Dev10 Bug 686124: For mac, the ambiguous and invalid points in time on the Mac
- if (false == TimeZoneInfo.Local.IsInvalidTime(dateBeforeForValidity))
- {
- if (month != dateAfter.Month
- || day != dateAfter.Day
- || year != dateAfter.Year
- || minute != dateAfter.Minute
- || second != dateAfter.Second)
- {
- TestLibrary.TestFramework.LogError("025", "DateTime.ParseExact(" + dateBefore + ") did not equal (" + dateAfter.Year + "-" + dateAfter.Month + "-" + dateAfter.Day + " " + dateAfter.Hour + ":" + dateAfter.Minute + ":" + dateAfter.Second + "Z)");
- retVal = false;
- }
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("026", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("026", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest14()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- DateTime dateAfter;
- string dateBefore = "";
- int year; // 1900 - 2000
- int month; // 0 - 11
-
- TestLibrary.TestFramework.BeginScenario("PosTest14: DateTime.ParseExact(y, MMMM, yyyy (YearMonthPattern ex: January, 2002))");
-
- // Culture could be customized
- if (String.Compare(TestLibrary.Utilities.CurrentCulture.DateTimeFormat.YearMonthPattern, "MMMM, yyyy", StringComparison.Ordinal) != 0 )
- {
- TestLibrary.TestFramework.LogInformation("Skipping test case, YearMonthPattern: " + TestLibrary.Utilities.CurrentCulture.DateTimeFormat.YearMonthPattern);
- return retVal;
- }
-
- try
- {
- for(int i=0; i<c_NUM_LOOPS; i++)
- {
- year = (TestLibrary.Generator.GetInt32(-55) % 100) + 1900;
- month = (TestLibrary.Generator.GetInt32(-55) % 12);
-
- dateBefore = c_MONTHS[month] + ", " + year;
- dateAfter = DateTime.ParseExact(dateBefore, "y", formater);
-
- if ((month+1) != dateAfter.Month
- || year != dateAfter.Year)
- {
- TestLibrary.TestFramework.LogError("027", "DateTime.ParseExact(" + dateBefore + ") did not equal (" + c_MONTHS[dateAfter.Month-1] + ", " + dateAfter.Year + ")-("+dateAfter.ToString()+")-DST("+dateAfter.IsDaylightSavingTime()+")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("028", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("028", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest15()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string dateBefore = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("PosTest15: DateTime.ParseExact(G, DateTime.Now, null)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.ParseExact( dateBefore, "G", null );
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("101", "DateTime.ParseExact(" + dateBefore + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("102", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest1()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: DateTime.ParseExact(null)");
-
- try
- {
- DateTime.ParseExact(null, "d", formater);
-
- TestLibrary.TestFramework.LogError("029", "DateTime.ParseExact(null) should have thrown");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("030", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: DateTime.ParseExact(String.Empty)");
-
- try
- {
- DateTime.ParseExact(String.Empty, "d", formater);
-
- TestLibrary.TestFramework.LogError("031", "DateTime.ParseExact(String.Empty) should have thrown");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("032", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string strDateTime = "";
- DateTime dateAfter;
- string[] formats = new string[17] {"d", "D", "f", "F", "g", "G", "m", "M", "r", "R", "s", "t", "T", "u", "U", "y", "Y"};
- string format;
- int formatIndex;
-
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: DateTime.ParseExact(<garbage>)");
-
- try
- {
- for (int i=0; i<c_NUM_LOOPS; i++)
- {
- try
- {
- formatIndex = TestLibrary.Generator.GetInt32(-55) % 34;
-
- if (0 <= formatIndex && formatIndex < 17)
- {
- format = formats[formatIndex];
- }
- else
- {
- format = TestLibrary.Generator.GetChar(-55) + "";
- }
-
- strDateTime = TestLibrary.Generator.GetString(-55, false, c_MIN_STRING_LEN, c_MAX_STRING_LEN);
- dateAfter = DateTime.ParseExact(strDateTime, format, formater);
-
- TestLibrary.TestFramework.LogError("033", "DateTime.ParseExact(" + strDateTime + ", "+ format + ") should have thrown (" + dateAfter + ")");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("034", "Failing date: " + strDateTime);
- TestLibrary.TestFramework.LogError("034", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest4()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string dateBefore = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("NegTest4: DateTime.ParseExact(\"\", DateTime.Now, formater)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.ParseExact( dateBefore, "", formater );
-
- TestLibrary.TestFramework.LogError("103", "DateTime.ParseExact(" + dateBefore + ") should have thrown " + dateAfter.ToString());
- retVal = false;
- }
- catch (System.FormatException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("104", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("104", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest5()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string dateBefore = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("NegTest5: DateTime.ParseExact(null, DateTime.Now, formater)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.ParseExact( dateBefore, null, formater );
-
- TestLibrary.TestFramework.LogError("105", "DateTime.ParseExact(" + dateBefore + ") should have thrown " + dateAfter.ToString());
- retVal = false;
- }
- catch (System.ArgumentNullException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("106", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("106", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-}
-
-public class MyFormater : IFormatProvider
-{
- public object GetFormat(Type formatType)
- {
- if (typeof(IFormatProvider) == formatType)
- {
- return this;
- }
- else
- {
- return null;
- }
- }
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact2.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact2.cs
deleted file mode 100644
index 53ee48b932..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact2.cs
+++ /dev/null
@@ -1,285 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-public class DateTimeParseExact2
-{
- private const int c_MIN_STRING_LEN = 1;
- private const int c_MAX_STRING_LEN = 2048;
- private const int c_NUM_LOOPS = 100;
- private static DateTimeStyles[] c_STYLES = new DateTimeStyles[7] {DateTimeStyles.AdjustToUniversal, DateTimeStyles.AllowInnerWhite, DateTimeStyles.AllowLeadingWhite, DateTimeStyles.AllowTrailingWhite , DateTimeStyles.AllowWhiteSpaces, DateTimeStyles.NoCurrentDateDefault, DateTimeStyles.None };
-
-
- public static int Main()
- {
- DateTimeParseExact2 test = new DateTimeParseExact2();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeParseExact2");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string dateBefore = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: DateTime.ParseExact(DateTime.Now)");
-
- try
- {
- for(int i=0; i<c_STYLES.Length; i++)
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.ParseExact( dateBefore, "G", formater, c_STYLES[i] );
-
- if (!TestLibrary.Utilities.IsWindows &&
- (c_STYLES[i]==DateTimeStyles.AdjustToUniversal)) // Mac prints offset
- {
- dateAfter = dateAfter.ToLocalTime();
- }
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("001", "DateTime.ParseExact(" + dateBefore + ", G, " + c_STYLES[i] + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
-
- public bool PosTest2()
- {
- bool retVal = true;
- string dateBefore = "";
- DateTime dateAfter;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: DateTime.ParseExact(DateTime.Now, g, formater, <invalid DateTimeStyles>)");
-
- try
- {
- for(int i=-1024; i<1024; i++)
- {
- try
- {
- // skip the valid values
- if (0 == (i & (int)DateTimeStyles.AdjustToUniversal)
- && 0 == (i & (int)DateTimeStyles.AssumeUniversal)
- && 0 == (i & (int)DateTimeStyles.AllowInnerWhite)
- && 0 == (i & (int)DateTimeStyles.AllowLeadingWhite)
- && 0 == (i & (int)DateTimeStyles.AllowTrailingWhite)
- && 0 == (i & (int)DateTimeStyles.AllowWhiteSpaces)
- && 0 == (i & (int)DateTimeStyles.NoCurrentDateDefault)
- && i != (int)DateTimeStyles.None
- )
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.ParseExact( dateBefore, "G", formater, (DateTimeStyles)i);
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("011", "DateTime.ParseExact(" + dateBefore + ", " + (DateTimeStyles)i + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- }
- catch (System.ArgumentException)
- {
- //
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("012", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest1()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: DateTime.ParseExact(null)");
-
- try
- {
- try
- {
- for(int i=0; i<c_STYLES.Length; i++)
- {
- DateTime.ParseExact(null, "d", formater, c_STYLES[i]);
-
- TestLibrary.TestFramework.LogError("029", "DateTime.ParseExact(null, d, " + c_STYLES[i] + ") should have thrown");
- retVal = false;
- }
- }
- catch (ArgumentNullException)
- {
- // expected
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("030", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: DateTime.ParseExact(String.Empty)");
-
- try
- {
- try
- {
- for(int i=0; i<c_STYLES.Length; i++)
- {
- DateTime.ParseExact(String.Empty, "d", formater, c_STYLES[i]);
-
- TestLibrary.TestFramework.LogError("029", "DateTime.ParseExact(String.Empty, d, " + c_STYLES[i] + ") should have thrown");
- retVal = false;
- }
- }
- catch (ArgumentNullException)
- {
- // expected
- }
- }
- catch (FormatException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("032", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string strDateTime = "";
- DateTime dateAfter;
- string[] formats = new string[17] {"d", "D", "f", "F", "g", "G", "m", "M", "r", "R", "s", "t", "T", "u", "U", "y", "Y"};
- string format;
- int formatIndex;
-
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: DateTime.ParseExact(<garbage>)");
-
- try
- {
- for (int i=0; i<c_NUM_LOOPS; i++)
- {
- for(int j=0; j<c_STYLES.Length; j++)
- {
- try
- {
- formatIndex = TestLibrary.Generator.GetInt32(-55) % 34;
-
- if (0 <= formatIndex && formatIndex < 17)
- {
- format = formats[formatIndex];
- }
- else
- {
- format = TestLibrary.Generator.GetChar(-55) + "";
- }
-
- strDateTime = TestLibrary.Generator.GetString(-55, false, c_MIN_STRING_LEN, c_MAX_STRING_LEN);
- dateAfter = DateTime.ParseExact(strDateTime, format, formater, c_STYLES[j]);
-
- TestLibrary.TestFramework.LogError("033", "DateTime.ParseExact(" + strDateTime + ", "+ format + ", " + c_STYLES[j] + ") should have thrown (" + dateAfter + ")");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("034", "Failing date: " + strDateTime);
- TestLibrary.TestFramework.LogError("034", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-}
-
-public class MyFormater : IFormatProvider
-{
- public object GetFormat(Type formatType)
- {
- if (typeof(IFormatProvider) == formatType)
- {
- return this;
- }
- else
- {
- return null;
- }
- }
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact3.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact3.cs
deleted file mode 100644
index 6f08e378bd..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeparseexact3.cs
+++ /dev/null
@@ -1,318 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-public class DateTimeParseExact2
-{
- private const int c_MIN_STRING_LEN = 1;
- private const int c_MAX_STRING_LEN = 2048;
- private const int c_NUM_LOOPS = 100;
- private static DateTimeStyles[] c_STYLES = new DateTimeStyles[7] {DateTimeStyles.AdjustToUniversal, DateTimeStyles.AllowInnerWhite, DateTimeStyles.AllowLeadingWhite, DateTimeStyles.AllowTrailingWhite , DateTimeStyles.AllowWhiteSpaces, DateTimeStyles.NoCurrentDateDefault, DateTimeStyles.None };
-
-
- public static int Main()
- {
- DateTimeParseExact2 test = new DateTimeParseExact2();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeParseExact2");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
- retVal = NegTest4() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string dateBefore = "";
- DateTime dateAfter;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: DateTime.ParseExact(DateTime.Now)");
-
- try
- {
- for(int i=0; i<c_STYLES.Length; i++)
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.ParseExact( dateBefore, new string[] {"G"}, formater, c_STYLES[i] );
-
- if (!TestLibrary.Utilities.IsWindows &&
- (c_STYLES[i]==DateTimeStyles.AdjustToUniversal)) // Mac prints offset
- {
- dateAfter = dateAfter.ToLocalTime();
- }
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("001", "DateTime.ParseExact(" + dateBefore + ", G, " + c_STYLES[i] + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- string dateBefore = "";
- DateTime dateAfter;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: DateTime.ParseExact(DateTime.Now, g, formater, <invalid DateTimeStyles>)");
-
- try
- {
- for(int i=-1024; i<1024; i++)
- {
- try
- {
- // skip the valid values
- if (0 == (i & (int)DateTimeStyles.AdjustToUniversal)
- && 0 == (i & (int)DateTimeStyles.AssumeUniversal)
- && 0 == (i & (int)DateTimeStyles.AllowInnerWhite)
- && 0 == (i & (int)DateTimeStyles.AllowLeadingWhite)
- && 0 == (i & (int)DateTimeStyles.AllowTrailingWhite)
- && 0 == (i & (int)DateTimeStyles.AllowWhiteSpaces)
- && 0 == (i & (int)DateTimeStyles.NoCurrentDateDefault)
- && i != (int)DateTimeStyles.None
- )
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.ParseExact( dateBefore, new string[] {"G"}, formater, (DateTimeStyles)i);
-
- if (!dateBefore.Equals(dateAfter.ToString()))
- {
- TestLibrary.TestFramework.LogError("011", "DateTime.ParseExact(" + dateBefore + ", " + (DateTimeStyles)i + ") did not equal " + dateAfter.ToString());
- retVal = false;
- }
- }
- }
- catch (System.ArgumentException)
- {
- //
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("012", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest1()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: DateTime.ParseExact(null)");
-
- try
- {
- try
- {
- for(int i=0; i<c_STYLES.Length; i++)
- {
- DateTime.ParseExact(null, new string[] {"d"}, formater, c_STYLES[i]);
-
- TestLibrary.TestFramework.LogError("029", "DateTime.ParseExact(null, d, " + c_STYLES[i] + ") should have thrown");
- retVal = false;
- }
- }
- catch (ArgumentNullException)
- {
- // expected
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("030", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: DateTime.ParseExact(String.Empty)");
-
- try
- {
- try
- {
- for(int i=0; i<c_STYLES.Length; i++)
- {
- DateTime.ParseExact(String.Empty, new string[] {"d"}, formater, c_STYLES[i]);
-
- TestLibrary.TestFramework.LogError("029", "DateTime.ParseExact(String.Empty, d, " + c_STYLES[i] + ") should have thrown");
- retVal = false;
- }
- }
- catch (ArgumentNullException)
- {
- // expected
- }
- }
- catch (FormatException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("032", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string strDateTime = "";
- DateTime dateAfter;
- string[] formats = new string[17] {"d", "D", "f", "F", "g", "G", "m", "M", "r", "R", "s", "t", "T", "u", "U", "y", "Y"};
- string format;
- int formatIndex;
-
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: DateTime.ParseExact(<garbage>)");
-
- try
- {
- for (int i=0; i<c_NUM_LOOPS; i++)
- {
- for(int j=0; j<c_STYLES.Length; j++)
- {
- try
- {
- formatIndex = TestLibrary.Generator.GetInt32(-55) % 34;
-
- if (0 <= formatIndex && formatIndex < 17)
- {
- format = formats[formatIndex];
- }
- else
- {
- format = TestLibrary.Generator.GetChar(-55) + "";
- }
-
- strDateTime = TestLibrary.Generator.GetString(-55, false, c_MIN_STRING_LEN, c_MAX_STRING_LEN);
- dateAfter = DateTime.ParseExact(strDateTime, new string[] {format}, formater, c_STYLES[j]);
-
- TestLibrary.TestFramework.LogError("033", "DateTime.ParseExact(" + strDateTime + ", "+ format + ", " + c_STYLES[j] + ") should have thrown (" + dateAfter + ")");
- retVal = false;
- }
- catch (FormatException)
- {
- // expected
- }
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("034", "Failing date: " + strDateTime);
- TestLibrary.TestFramework.LogError("034", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest4()
- {
- bool retVal = true;
- MyFormater formater = new MyFormater();
- string dateBefore = "";
- DateTime dateAfter;
- string[] formats = null;
-
- TestLibrary.TestFramework.BeginScenario("NegTest4: DateTime.ParseExact(DateTime.Now, null)");
-
- try
- {
- dateBefore = DateTime.Now.ToString();
-
- dateAfter = DateTime.ParseExact( dateBefore, formats, formater, DateTimeStyles.NoCurrentDateDefault );
-
- TestLibrary.TestFramework.LogError("035", "DateTime.ParseExact(" + dateBefore + ", null, " + DateTimeStyles.NoCurrentDateDefault + ") should have thrown " + dateAfter.ToString());
- retVal = false;
- }
- catch (System.ArgumentNullException)
- {
- // expected
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("036", "Failing date: " + dateBefore);
- TestLibrary.TestFramework.LogError("036", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-}
-
-public class MyFormater : IFormatProvider
-{
- public object GetFormat(Type formatType)
- {
- if (typeof(IFormatProvider) == formatType)
- {
- return this;
- }
- else
- {
- return null;
- }
- }
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimesecond.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimesecond.cs
deleted file mode 100644
index f6928c9d88..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimesecond.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Globalization;
-
-
-public class DateTimeSecond
-{
- public static int Main(string[] args)
- {
- DateTimeSecond second = new DateTimeSecond();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.Second property...");
-
- if (second.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify DateTime.Second property when DateTime instance's second is assigned...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(0978, 08, 29, 03, 29, 22);
- int second = myDateTime.Second;
-
- if (second != 22)
- {
- TestLibrary.TestFramework.LogError("001", "The second is not correct!");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify DateTime.Second property When DateTime instance is only assigned year month and day...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29);
- int second = myDateTime.Second;
-
- if (second != 0)
- {
- TestLibrary.TestFramework.LogError("003", "The second is not zero when no value is assigned at init time!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
-
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimesubtract1.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimesubtract1.cs
deleted file mode 100644
index 953dd9f3d5..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimesubtract1.cs
+++ /dev/null
@@ -1,205 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// DateTime.Subtract(DateTime)
-/// </summary>
-public class DateTimeSubtract1
-{
- public static int Main()
- {
- DateTimeSubtract1 dtsub1 = new DateTimeSubtract1();
- TestLibrary.TestFramework.BeginTestCase("DataTimeSubtract1");
- if (dtsub1.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[PosTest]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
- //TestLibrary.TestFramework.LogInformation("[NegTest]");
- //retVal = NegTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TimeSpan resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest1: The TimeSpan is in the range of MinValue and MaxValue 1");
- try
- {
- DateTime date1 = new DateTime(1,1,1);
- DateTime date2 = DateTime.MinValue.AddYears(1).AddMonths(1).AddDays(1);
- resultTime = date2.Subtract(date1);
- if (resultTime.Days != 397)
- {
- TestLibrary.TestFramework.LogError("001", "Expected: 397 days, actual: "+resultTime.Days);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TimeSpan resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest2: The TimeSpan is in the range of MinValue and MaxValue 2");
- try
- {
- DateTime date1 = new DateTime(1999, 1, 1).ToLocalTime();
- DateTime date2 = new DateTime(2000, 1, 1).ToLocalTime();
- resultTime = date2.Subtract(date1);
- if (resultTime.Days != 365)
- {
- TestLibrary.TestFramework.LogError("003", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest3()
- {
- bool retVal = true;
- TimeSpan resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest3: The TimeSpan is in the range of MinValue and MaxValue 3");
- try
- {
- DateTime date1 = new DateTime(2000, 1, 1).ToLocalTime();
- DateTime date2 = new DateTime(2001, 1, 1).ToLocalTime();
- resultTime = date2.Subtract(date1);
- if (resultTime.Days != 366)
- {
- TestLibrary.TestFramework.LogError("005", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest4()
- {
- bool retVal = true;
- TimeSpan resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest4: The TimeSpan is in the range of MinValue and MaxValue 4");
- try
- {
- DateTime date1 = new DateTime(2001, 1, 1).ToLocalTime();
- DateTime date2 = new DateTime(2000, 1, 1).ToLocalTime();
- resultTime = date2.Subtract(date1);
- if (resultTime.Days != -366)
- {
- TestLibrary.TestFramework.LogError("007", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest5()
- {
- bool retVal = true;
- TimeSpan resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest5: The TimeSpan is in the range of MinValue and MaxValue 5");
- try
- {
- DateTime date1 = new DateTime(2000, 1, 1).ToLocalTime();
- DateTime date2 = new DateTime(1999, 1, 1).ToLocalTime();
- resultTime = date2.Subtract(date1);
- if (resultTime.Days != -365)
- {
- TestLibrary.TestFramework.LogError("009", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest6()
- {
- bool retVal = true;
- TimeSpan resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest6: The TimeSpan is in the range of MinValue and MaxValue 6");
- try
- {
- DateTime date1 = new DateTime(2000, 1, 1).ToLocalTime();
- DateTime date2 = new DateTime(2000, 1, 1).ToLocalTime();
- resultTime = date2.Subtract(date1);
- if (resultTime.Days != 0)
- {
- TestLibrary.TestFramework.LogError("011", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
- #region NegativeTest
- //public bool NegTest1()
- //{
- // bool retVal = true;
- // TimeSpan resultTime;
- // TestLibrary.TestFramework.BeginScenario("NegTest1: The TimeSpan is less than DateTime MinValue");
- // try
- // {
- // DateTime date1 = DateTime.MinValue.ToLocalTime();
- // DateTime date2 = DateTime.MaxValue.ToLocalTime();
- // resultTime = date1.Subtract(date2);
- // retVal = false;
- // TestLibrary.TestFramework.LogError("N001", "the TimeSpan is less DateTime MinValue but not throw exception");
- // }
- // catch (ArgumentOutOfRangeException) { }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("N002", "Unexpect exception:" + e);
- // retVal = false;
- // }
- // return retVal;
- //}
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimesubtract2.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimesubtract2.cs
deleted file mode 100644
index 90e4a5ce38..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimesubtract2.cs
+++ /dev/null
@@ -1,225 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// DateTime.Subtract(TimeSpan)
-/// </summary>
-public class DateTimeSubtract2
-{
- public static int Main()
- {
- DateTimeSubtract2 dtsub2 = new DateTimeSubtract2();
- TestLibrary.TestFramework.BeginTestCase("DataTimeSubtract2");
- if (dtsub2.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[PosTest]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- TestLibrary.TestFramework.LogInformation("[NegTest]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- DateTime resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest1: The return dateTime is in the range of MinValue and MaxValue 1");
- try
- {
- DateTime date1 = new DateTime(2000, 1, 1).ToLocalTime();
- TimeSpan timeSpan = new TimeSpan(365, 0, 0, 0);
- resultTime = date1.Subtract(timeSpan);
- if (resultTime!= new DateTime(1999,1,1).ToLocalTime())
- {
- TestLibrary.TestFramework.LogError("001", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- DateTime resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest2: The return dateTime is in the range of MinValue and MaxValue 2");
- try
- {
- DateTime date1 = new DateTime(1999, 1, 1).ToLocalTime();
- TimeSpan timeSpan = new TimeSpan(-365, 0, 0, 0);
- resultTime = date1.Subtract(timeSpan);
- if (resultTime != new DateTime(2000, 1, 1).ToLocalTime())
- {
- TestLibrary.TestFramework.LogError("003", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest3()
- {
- bool retVal = true;
- DateTime resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest3: The return dateTime is in the range of MinValue and MaxValue 3");
- try
- {
- DateTime date1 = new DateTime(this.GetInt32(1,9999),this.GetInt32(1,12),this.GetInt32(1,28)).ToLocalTime();
- TimeSpan timeSpan = new TimeSpan(0, 0, 0, 0);
- resultTime = date1.Subtract(timeSpan);
- if (resultTime != date1)
- {
- TestLibrary.TestFramework.LogError("005", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest4()
- {
- bool retVal = true;
- DateTime resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest4: The return dateTime is in the range of MinValue and MaxValue 4");
- try
- {
- DateTime date1 = new DateTime(2001, 1, 1).ToLocalTime();
- TimeSpan timeSpan = new TimeSpan(366, 0, 0, 0);
- resultTime = date1.Subtract(timeSpan);
- if (resultTime != new DateTime(2000, 1, 1).ToLocalTime())
- {
- TestLibrary.TestFramework.LogError("007", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest5()
- {
- bool retVal = true;
- DateTime resultTime;
- TestLibrary.TestFramework.BeginScenario("PosTest5: The return dateTime is in the range of MinValue and MaxValue 5");
- try
- {
- DateTime date1 = new DateTime(2000, 1, 1).ToLocalTime();
- TimeSpan timeSpan = new TimeSpan(-366, 0, 0, 0);
- resultTime = date1.Subtract(timeSpan);
- if (resultTime != new DateTime(2001, 1, 1).ToLocalTime())
- {
- TestLibrary.TestFramework.LogError("009", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
- #region NegativeTest
- public bool NegTest1()
- {
- bool retVal = true;
- DateTime resultTime;
- TestLibrary.TestFramework.BeginScenario("NegTest1: The return dateTime is out the range of MinValue and MaxValue 1");
- try
- {
- DateTime date1 = DateTime.MinValue.ToLocalTime();
- TimeSpan timeSpan = new TimeSpan(365, 0, 0, 0);
- resultTime = date1.Subtract(timeSpan);
- TestLibrary.TestFramework.LogError("N001", "The return datetime is less than MinValue but not throw exception");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("N002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool NegTest2()
- {
- bool retVal = true;
- DateTime resultTime;
- TestLibrary.TestFramework.BeginScenario("NegTest2: The return dateTime is out the range of MinValue and MaxValue 1");
- try
- {
- DateTime date1 = DateTime.MaxValue.ToLocalTime();
- TimeSpan timeSpan = new TimeSpan(-365, 0, 0, 0);
- resultTime = date1.Subtract(timeSpan);
- retVal = false;
- TestLibrary.TestFramework.LogError("N003", "The return datetime is greater than MaxValue but not throw exception");
- }
- catch (ArgumentOutOfRangeException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("N004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
- #region HelpMethod
- private Int32 GetInt32(Int32 minValue, Int32 maxValue)
- {
- try
- {
- if (minValue == maxValue)
- {
- return minValue;
- }
- if (minValue < maxValue)
- {
- return minValue + TestLibrary.Generator.GetInt32(-55) % (maxValue - minValue);
- }
- }
- catch
- {
- throw;
- }
-
- return minValue;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeticks.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeticks.cs
deleted file mode 100644
index 198c20ccde..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeticks.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections;
-using System.Threading;
-
-
-/// <summary>
-/// System.DateTime.Ticks
-/// </summary>
-public class DateTimeTicks
-{
- public static int Main(string[] args)
- {
- DateTimeTicks ticks = new DateTimeTicks();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.Ticks property...");
-
- if (ticks.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- //retVal = PosTest3() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify ticks when DateTime instance is midnight, January 1, 0001...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new System.Globalization.CultureInfo("");
- DateTime myDateTime = new DateTime(0001,01,01,00,00,00);
- long ticks = myDateTime.Ticks;
-
- if (ticks != 0)
- {
- TestLibrary.TestFramework.LogError("001", "The ticks is not zero when the DateTime instance is midnight, January 1, 0001...");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002","Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify ticks when DateTime instance is larger than midnight, January 1, 0001");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new System.Globalization.CultureInfo("");
- DateTime myDateTime = new DateTime(1978,08,29,03,29,22);
- long ticks = myDateTime.Ticks;
-
- if (ticks <= 0)
- {
- TestLibrary.TestFramework.LogError("003","The ticks is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004","Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimetimeofday.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimetimeofday.cs
deleted file mode 100644
index 744242ee63..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimetimeofday.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections;
-using System.Threading;
-
-/// <summary>
-/// System.DateTime.TimeOfDay
-/// </summary>
-public class DateTimeTimeOfDay
-{
- public static int Main(string[] args)
- {
- DateTimeTimeOfDay timeOfDay = new DateTimeTimeOfDay();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.TimeOfDay property...");
-
- if (timeOfDay.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify TimeOfDay when created instance is assigned time...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new System.Globalization.CultureInfo("");
- DateTime myDateTime = new DateTime(1978,08,29,03,29,22);
- TimeSpan myTimeSpan = myDateTime.TimeOfDay;
-
- if (myTimeSpan.Days != 0 && myTimeSpan.Hours != 03 && myTimeSpan.Minutes != 29
- && myTimeSpan.Seconds != 22 && myTimeSpan.Milliseconds != 0)
- {
- TestLibrary.TestFramework.LogError("001","The TimeSpan is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002","Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify TimeOfDay when created instance is not assigned time...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new System.Globalization.CultureInfo("");
- DateTime myDateTime = new DateTime(1978,08,29);
- TimeSpan myTimeSpan = myDateTime.TimeOfDay;
-
- if (myTimeSpan.Hours != 0 && myTimeSpan.Minutes != 0 && myTimeSpan.Seconds != 0)
- {
- TestLibrary.TestFramework.LogError("003","The initial timeSpan is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004","Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimetoday.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimetoday.cs
deleted file mode 100644
index d2f372732d..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimetoday.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections.Generic;
-using System.Threading;
-
-
-/// <summary>
-/// System.DateTime.Today
-/// </summary>
-public class DateTimeToday
-{
- public static int Main(string[] args)
- {
- DateTimeToday today = new DateTimeToday();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.Today property...");
-
- if (today.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify the value of hour minute and second in Today property...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new System.Globalization.CultureInfo("");
- DateTime today = DateTime.Today;
-
- if (today.Hour != 0 && today.Minute != 0 && today.Second != 0)
- {
- TestLibrary.TestFramework.LogError("001","The initial value of today is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002","Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify the type of today property is System.DateTime...");
-
- try
- {
- DateTime today = DateTime.Today;
- Type typeOfToday = today.GetType();
-
- if (typeOfToday.ToString() != "System.DateTime")
- {
- TestLibrary.TestFramework.LogError("003","The type of Today property is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004","Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimetofiletime.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimetofiletime.cs
deleted file mode 100644
index 36653c9b71..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimetofiletime.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// System.DateTime.ToFileTime()
-/// </summary>
-public class DateTimeToFileTime
-{
- public static int Main()
- {
- DateTimeToFileTime dttft = new DateTimeToFileTime();
- TestLibrary.TestFramework.BeginTestCase("DataTimeToFileTime");
- if (dttft.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[PosTest]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- TestLibrary.TestFramework.LogInformation("[NegTest]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1: The current dateTime equals 1601/1/1");
- try
- {
- DateTime date1 = new DateTime(1601, 1, 1).ToLocalTime().ToUniversalTime();
- long result = date1.ToFileTime();
- if (result != 0)
- {
- TestLibrary.TestFramework.LogError("001", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest2: The current dateTime lager 1601/1/1");
- try
- {
- DateTime date1 = new DateTime(1999, 1, 1).ToLocalTime().ToUniversalTime();
- DateTime date2 = new DateTime(1601, 1, 1).ToLocalTime().ToUniversalTime();
- TimeSpan timeSpan = date1.Subtract(date2);
- long result = date1.ToFileTime();
- long expect = timeSpan.Days * 864000000000; //8640000000 = 24*3600*1000*1000*1000/100
- if (result != expect)
- {
- TestLibrary.TestFramework.LogError("003", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
- #region NegativeTest
- public bool NegTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("NegTest1: The current dateTime less than 1601/1/1 1");
- try
- {
- DateTime date1 = DateTime.MinValue.ToLocalTime().ToUniversalTime();
- long result = date1.ToFileTime();
- retVal = false;
- TestLibrary.TestFramework.LogError("N001", "The current dateTime is less than 1601/1/1 but not throw exception");
- }
- catch (ArgumentOutOfRangeException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("N002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool NegTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("NegTest2: The current dateTime less than 1601/1/1 2");
- try
- {
- DateTime date1 = new DateTime(1600, 1, 1).ToLocalTime().ToUniversalTime();
- long result = date1.ToFileTime();
- retVal = false;
- TestLibrary.TestFramework.LogError("N003", "The current dateTime is less than 1601/1/1 but not throw exception");
- }
- catch (ArgumentOutOfRangeException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("N004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimetofiletimeutc.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimetofiletimeutc.cs
deleted file mode 100644
index c3d3321636..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimetofiletimeutc.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// System.DateTime.ToFileTimeUtc()
-/// </summary>
-public class DateTimeToFileTimeUtc
-{
- public static int Main()
- {
- DateTimeToFileTimeUtc dttftu = new DateTimeToFileTimeUtc();
- TestLibrary.TestFramework.BeginTestCase("DataTimeToFileTimeUtc");
- if (dttftu.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[PosTest]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- TestLibrary.TestFramework.LogInformation("[NegTest]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1: The current dateTime equals 1601/1/1");
- try
- {
- DateTime date1 = new DateTime(1601, 1, 1).ToLocalTime().ToUniversalTime();
- long result = date1.ToFileTime();
- if (result != 0)
- {
- TestLibrary.TestFramework.LogError("001", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest2: The current dateTime lager 1601/1/1");
- try
- {
- DateTime date1 = new DateTime(1999, 1, 1).ToLocalTime().ToUniversalTime();
- DateTime date2 = new DateTime(1601, 1, 1).ToLocalTime().ToUniversalTime();
- TimeSpan timeSpan = date1.Subtract(date2);
- long result = date1.ToFileTime();
- long expect = timeSpan.Days * 864000000000; //8640000000 = 24*3600*1000*1000*1000/100
- if (result != expect)
- {
- TestLibrary.TestFramework.LogError("003", "The ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
- #region NegativeTest
- public bool NegTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("NegTest1: The current dateTime less than 1601/1/1 1");
- try
- {
- DateTime date1 = DateTime.MinValue.ToLocalTime().ToUniversalTime();
- long result = date1.ToFileTime();
- retVal = false;
- TestLibrary.TestFramework.LogError("N001", "The current dateTime is less than 1601/1/1 but not throw exception");
- }
- catch (ArgumentOutOfRangeException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("N002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool NegTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("NegTest2: The current dateTime less than 1601/1/1 2");
- try
- {
- DateTime date1 = new DateTime(1600, 1, 1).ToLocalTime().ToUniversalTime();
- long result = date1.ToFileTime();
- retVal = false;
- TestLibrary.TestFramework.LogError("N003", "The current dateTime is less than 1601/1/1 but not throw exception");
- }
- catch (ArgumentOutOfRangeException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("N004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimetolocaltime.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimetolocaltime.cs
deleted file mode 100644
index e79453f571..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimetolocaltime.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections;
-
-/// <summary>
-/// System.DateTime.ToLocalTime
-/// </summary>
-public class DateTimeToLocalTime
-{
- public static int Main(string[] args)
- {
- DateTimeToLocalTime toLocalTime = new DateTimeToLocalTime();
- TestLibrary.TestFramework.BeginTestCase("Testing DateTime.ToLocalTime...");
-
- if (toLocalTime.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Verify convvert DateTime to utc then convert back is equal to original...");
-
- try
- {
- DateTime myTime = DateTime.Now;
- DateTime myUtcTime = myTime.ToUniversalTime();
- DateTime utcToLocal = myUtcTime.ToLocalTime();
-
- if (myTime != utcToLocal)
- {
- TestLibrary.TestFramework.LogError("001","The DateTime change back to local should be equal to original!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002","Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimetostring1.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimetostring1.cs
deleted file mode 100644
index 3fd204fe73..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimetostring1.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Threading;
-
-
-/// <summary>
-/// System.DateTime.ToString
-/// </summary>
-public class DateTimeToString1
-{
- public static int Main(string[] args)
- {
- DateTimeToString1 toString = new DateTimeToString1();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.ToString method...");
-
- if (toString.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString() when DateTime instance is created by ctor(int year,int month,int day)...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978,08,29);
- string dateString = myDateTime.ToString();
- char[] splitors = {'/',' ',':'};
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 6)
- {
- TestLibrary.TestFramework.LogError("001", "The component parts are not correct!");
- retVal = false;
- }
- else
- {
- if (parts[0] != "1978" && parts[1] != "08" && parts[2] != "29" && parts[3] != "00"
- && parts[4] != "00" && parts[5] != "00")
- {
- TestLibrary.TestFramework.LogError("002","The content is not correct!");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002","Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- /// <summary>
- /// new added scenario
- /// </summary>
- /// <returns></returns>
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString() when DateTime instance is created by ctor(int year,int month,int day,int hour,int minute,int second)...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978,08,29,01,10,10);
- string dateString = myDateTime.ToString();
- char[] splitors = { '/', ' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 6)
- {
- TestLibrary.TestFramework.LogError("001", "The component parts are not correct!");
- retVal = false;
- }
- else
- {
- if (parts[0] != "1978" && parts[1] != "08" && parts[2] != "29" && parts[3] != "01"
- && parts[4] != "10" && parts[5] != "10")
- {
- TestLibrary.TestFramework.LogError("002", "The content is not correct!");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimetostring2.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimetostring2.cs
deleted file mode 100644
index d4cd95a296..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimetostring2.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Threading;
-
-
-/// <summary>
-/// System.DateTime.ToString(System.IFormatProvider)
-/// </summary>
-public class DateTimeToString2
-{
- public static int Main(string[] args)
- {
- DateTimeToString2 toString = new DateTimeToString2();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.ToString(System.IFormatProvider)...");
-
- if (toString.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.IFormatProvider) when DateTimeFormatInfo is CurrentInfo...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29);
- string dateString = myDateTime.ToString(DateTimeFormatInfo.CurrentInfo);
- char[] splitors = { '/', ' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 6)
- {
- TestLibrary.TestFramework.LogError("001", "The component parts are not correct!");
- retVal = false;
- }
- else
- {
- if (parts[0] != "1978" && parts[1] != "08" && parts[2] != "29" && parts[3] != "00"
- && parts[4] != "00" && parts[5] != "00")
- {
- TestLibrary.TestFramework.LogError("002", "The content is not correct!");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.IFormatProvider) when when DateTimeFormatInfo is InvariantInfo...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- DateTime myDateTime = new DateTime(1978, 08, 29, 01, 10, 10);
- string dateString = myDateTime.ToString(DateTimeFormatInfo.InvariantInfo);
- char[] splitors = { '/', ' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 6)
- {
- TestLibrary.TestFramework.LogError("001", "The component parts are not correct!");
- retVal = false;
- }
- else
- {
- if (parts[0] != "1978" && parts[1] != "08" && parts[2] != "29" && parts[3] != "01"
- && parts[4] != "10" && parts[5] != "10")
- {
- TestLibrary.TestFramework.LogError("002", "The content is not correct!");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimetostring3.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimetostring3.cs
deleted file mode 100644
index 79c8a31683..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimetostring3.cs
+++ /dev/null
@@ -1,588 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Threading;
-
-/// <summary>
-/// System.DateTime.ToString(System.String)
-/// </summary>
-public class DateTimeToString3
-{
- public static int Main(string[] args)
- {
- DateTimeToString3 myDateTime = new DateTimeToString3();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.ToString(System.String)...");
-
- if (myDateTime.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
- retVal = PosTest7() && retVal;
- retVal = PosTest8() && retVal;
- retVal = PosTest9() && retVal;
- retVal = PosTest10() && retVal;
- retVal = PosTest11() && retVal;
- retVal = PosTest12() && retVal;
- retVal = PosTest13() && retVal;
- retVal = PosTest14() && retVal;
- retVal = PosTest15() && retVal;
- retVal = PosTest16() && retVal;
- retVal = PosTest17() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as M/d/yyyy hh:mm:ss tt...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"M/d/yyyy hh:mm:ss tt";
- DateTime myDateTime = new DateTime(1978, 08, 29);
- string dateString = myDateTime.ToString(format);
- char[] splitors = { '/', ' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 7)
- {
- TestLibrary.TestFramework.LogError("001", "The component parts are not correct!");
- retVal = false;
- }
- else
- {
- if (parts[0] != "1978" && parts[1] != "08" && parts[2] != "29" && parts[3] != "00"
- && parts[4] != "00" && parts[5] != "00" && parts[6]!="AM")
- {
- TestLibrary.TestFramework.LogError("002", "The content is not correct!");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as M-d-yyyy hh:mm:ss tt...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"M-d-yyyy hh:mm:ss tt";
- DateTime myDateTime = new DateTime(1978, 08, 29);
- string dateString = myDateTime.ToString(format);
- char[] splitors = { '-', ' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 7)
- {
- TestLibrary.TestFramework.LogError("004", "The component parts are not correct!");
- retVal = false;
- }
- else
- {
- if (parts[0] != "1978" && parts[1] != "08" && parts[2] != "29" && parts[3] != "00"
- && parts[4] != "00" && parts[5] != "00" && parts[6]!="AM")
- {
- TestLibrary.TestFramework.LogError("005", "The content is not correct!");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as M-d-yyyy hh:mm:ss...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"M-d-yyyy hh:mm:ss";
- DateTime myDateTime = new DateTime(1978, 08, 29);
- string dateString = myDateTime.ToString(format);
- char[] splitors = { '-', ' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 6)
- {
- TestLibrary.TestFramework.LogError("007", "The component parts are not correct!");
- retVal = false;
- }
- else
- {
- if (parts[0] != "1978" && parts[1] != "08" && parts[2] != "29" && parts[3] != "00"
- && parts[4] != "00" && parts[5] != "00")
- {
- TestLibrary.TestFramework.LogError("008", "The content is not correct!");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("009", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as d...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"d";
- DateTime myDateTime = new DateTime(1978, 08, 29);
- string dateString = myDateTime.ToString(format);
- char[] splitors = { '/'};
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 3)
- {
- TestLibrary.TestFramework.LogError("010", "The component parts are not correct!");
- retVal = false;
- }
- else
- {
- if (parts[0] != "29" && parts[1] != "08" && parts[2] != "1978")
- {
- TestLibrary.TestFramework.LogError("011", "The content is not correct!");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as D...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"D";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = { ' ' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 4)
- {
- TestLibrary.TestFramework.LogError("013", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("014", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest6()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as f...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"f";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = { ' ',':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 6)
- {
- TestLibrary.TestFramework.LogError("015", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("016", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest7()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as F...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"F";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = { ' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 7)
- {
- TestLibrary.TestFramework.LogError("017", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("018", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest8()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as g...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"g";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = { '/',' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 5)
- {
- TestLibrary.TestFramework.LogError("019", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("020", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest9()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as G...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"G";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = { '/', ' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 6)
- {
- TestLibrary.TestFramework.LogError("021", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("022", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest10()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as m...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"m";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = {' '};
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 2)
- {
- TestLibrary.TestFramework.LogError("023", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("024", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest11()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as r...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"r";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = { ',',' ',':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 9)
- {
- TestLibrary.TestFramework.LogError("025", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("026", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest12()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as s...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"s";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = { '-', 'T', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 6)
- {
- TestLibrary.TestFramework.LogError("027", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("028", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest13()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as t...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"t";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = {':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 2)
- {
- TestLibrary.TestFramework.LogError("029", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("030", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest14()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as T...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"T";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = { ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 3)
- {
- TestLibrary.TestFramework.LogError("031", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("032", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest15()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as u...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"u";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = {'-',' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 6)
- {
- TestLibrary.TestFramework.LogError("033", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("034", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest16()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as U...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"U";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = {' ', ':' };
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 7)
- {
- TestLibrary.TestFramework.LogError("035", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("036", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest17()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("Testing DateTime.ToString(System.String) using format as y...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new CultureInfo("");
- string format = @"y";
- DateTime myDateTime = DateTime.Now;
- string dateString = myDateTime.ToString(format);
- char[] splitors = { ' '};
- string[] parts = dateString.Split(splitors);
-
- if (parts.Length != 2)
- {
- TestLibrary.TestFramework.LogError("037", "The component parts are not correct!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("038", "Unexpected exception occurs: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
-
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeutcnow.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeutcnow.cs
deleted file mode 100644
index 668e71f6e0..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetime/datetimeutcnow.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections;
-using System.Threading;
-
-public class DateTimeUtcNow
-{
- public static int Main(string[] args)
- {
- DateTimeUtcNow utcNow = new DateTimeUtcNow();
- TestLibrary.TestFramework.BeginTestCase("Testing System.DateTime.UtcNow property...");
-
- if (utcNow.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginTestCase("Verify DateTime.UtcNow is Universal kind...");
-
- try
- {
- TestLibrary.Utilities.CurrentCulture = new System.Globalization.CultureInfo("");
- DateTime myDateTime = DateTime.UtcNow;
- Type typeOfNow = myDateTime.GetType();
- DateTime toUniversal = myDateTime.ToUniversalTime();
-
- if (myDateTime != toUniversal)
- {
- TestLibrary.TestFramework.LogError("001", "The kind of UtcNow property is not local!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginTestCase("Verify the type of UtcNow property is DateTime...");
-
- try
- {
- DateTime myDateTime = DateTime.UtcNow;
- Type typeOfNow = myDateTime.GetType();
-
- if (typeOfNow.ToString() != "System.DateTime")
- {
- TestLibrary.TestFramework.LogError("003", "The type of Now property is wrong!");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception occurs: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindLocal.csproj b/tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindLocal.csproj
deleted file mode 100644
index 8887078638..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindLocal.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimekindlocal.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindUnspecified.csproj b/tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindUnspecified.csproj
deleted file mode 100644
index 68b0c2373c..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindUnspecified.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimekindunspecified.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindUtc.csproj b/tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindUtc.csproj
deleted file mode 100644
index c4ff4dc298..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetimekind/DateTimeKindUtc.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimekindutc.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetimekind/datetimekindlocal.cs b/tests/src/CoreMangLib/cti/system/datetimekind/datetimekindlocal.cs
deleted file mode 100644
index 5970677acb..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetimekind/datetimekindlocal.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-///<summary>
-///System.DateTimeKind.Local
-///</summary>
-
-public class DateTimeKindLocal
-{
-
- public static int Main()
- {
- DateTimeKindLocal testObj = new DateTimeKindLocal();
- TestLibrary.TestFramework.BeginTestCase("for property of System.DateTimeKind.Local");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- int expectedValue = 2;
- int actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeKind.Local");
- try
- {
- actualValue = (int)DateTimeKind.Local;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetimekind/datetimekindunspecified.cs b/tests/src/CoreMangLib/cti/system/datetimekind/datetimekindunspecified.cs
deleted file mode 100644
index 9a278fbfda..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetimekind/datetimekindunspecified.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-///<summary>
-///System.DateTimeKind.Unspecified
-///</summary>
-
-public class DateTimeKindUnspecified
-{
-
- public static int Main()
- {
- DateTimeKindUnspecified testObj = new DateTimeKindUnspecified();
- TestLibrary.TestFramework.BeginTestCase("for property of System.DateTimeKind.Unspecified");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- int expectedValue = 0;
- int actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeKind.Unspecified");
- try
- {
- actualValue = (int)DateTimeKind.Unspecified;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/datetimekind/datetimekindutc.cs b/tests/src/CoreMangLib/cti/system/datetimekind/datetimekindutc.cs
deleted file mode 100644
index 2c19aeeb00..0000000000
--- a/tests/src/CoreMangLib/cti/system/datetimekind/datetimekindutc.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-
-///<summary>
-///System.DateTimeKind.Utc
-///</summary>
-
-public class DateTimeKindUtc
-{
-
- public static int Main()
- {
- DateTimeKindUtc testObj = new DateTimeKindUtc();
- TestLibrary.TestFramework.BeginTestCase("for property of System.DateTimeKind.Utc");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- int expectedValue = 1;
- int actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeKind.Utc");
- try
- {
- actualValue = (int)DateTimeKind.Utc;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") != ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstDay.csproj b/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstDay.csproj
deleted file mode 100644
index a225d5eb2b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstDay.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="calendarweekrulefirstday.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstFourDayWeek.csproj b/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstFourDayWeek.csproj
deleted file mode 100644
index 99a9c8edda..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstFourDayWeek.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="calendarweekrulefirstfourdayweek.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstFullWeek.csproj b/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstFullWeek.csproj
deleted file mode 100644
index 3ba9a7f199..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/CalendarWeekRuleFirstFullWeek.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="calendarweekrulefirstfullweek.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstday.cs b/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstday.cs
deleted file mode 100644
index fa911175e1..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstday.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CalendarWeekRule.FirstDay
-///</summary>
-
-public class CalendarWeekRuleFirstDay
-{
-
- public static int Main()
- {
- CalendarWeekRuleFirstDay testObj = new CalendarWeekRuleFirstDay();
- TestLibrary.TestFramework.BeginTestCase("for the System.CalendarWeekRule.FirstDay");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- int expectedValue = 0;
- int actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CalendarWeekRule.FirstDay");
- try
- {
- actualValue = (int)CalendarWeekRule.FirstDay;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstfourdayweek.cs b/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstfourdayweek.cs
deleted file mode 100644
index a8c3975dcf..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstfourdayweek.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CalendarWeekRule.FirstFourDayWeek
-///</summary>
-
-public class CalendarWeekRuleFirstFourDayWeek
-{
-
- public static int Main()
- {
- CalendarWeekRuleFirstFourDayWeek testObj = new CalendarWeekRuleFirstFourDayWeek();
- TestLibrary.TestFramework.BeginTestCase("for the System.CalendarWeekRule.FirstDay");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- int expectedValue = 2;
- int actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CalendarWeekRule.FirstFourDayWeek");
- try
- {
- actualValue = (int)CalendarWeekRule.FirstFourDayWeek;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstfullweek.cs b/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstfullweek.cs
deleted file mode 100644
index 69258ffc1c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/calendarweekrule/calendarweekrulefirstfullweek.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CalendarWeekRule.FirstFullWeek
-///</summary>
-
-public class CalendarWeekRuleFirstFullWeek
-{
-
- public static int Main()
- {
- CalendarWeekRuleFirstFullWeek testObj = new CalendarWeekRuleFirstFullWeek();
- TestLibrary.TestFramework.BeginTestCase("for the System.CalendarWeekRule.FirstDay");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- int expectedValue = 1;
- int actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CalendarWeekRule.FirstFullWeek");
- try
- {
- actualValue = (int)CalendarWeekRule.FirstFullWeek;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetNumericValue1.csproj b/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetNumericValue1.csproj
deleted file mode 100644
index 7ee428d34e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetNumericValue1.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="charunicodeinfogetnumericvalue1.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetNumericValue2.csproj b/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetNumericValue2.csproj
deleted file mode 100644
index 61274599c8..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetNumericValue2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="charunicodeinfogetnumericvalue2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetUnicodeCategory1.csproj b/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetUnicodeCategory1.csproj
deleted file mode 100644
index b9b9088b6b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetUnicodeCategory1.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="charunicodeinfogetunicodecategory1.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetUnicodeCategory2.csproj b/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetUnicodeCategory2.csproj
deleted file mode 100644
index 716b0f9ccf..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/CharUnicodeInfoGetUnicodeCategory2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="charunicodeinfogetunicodecategory2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetnumericvalue1.cs b/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetnumericvalue1.cs
deleted file mode 100644
index 01926ba435..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetnumericvalue1.cs
+++ /dev/null
@@ -1,226 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CharUnicodeInfo.GetNumericValue(Char)
-///</summary>
-
-public class CharUnicodeInfoGetNumericValue
-{
-
- public static int Main()
- {
- CharUnicodeInfoGetNumericValue testObj = new CharUnicodeInfoGetNumericValue();
- TestLibrary.TestFramework.BeginTestCase("for method of System.Globalization.CharUnicodeInfo.GetNumericValue");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- Char ch = '\0';
-
- Double expectedValue = -1;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario(@"PosTest1:Test the method with '\0'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(ch);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- Char ch = '0';
-
- Double expectedValue = 0;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char '0'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(ch);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("003", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- Char ch = '9';
-
- Double expectedValue = 9;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char '9'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(ch);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("005", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- Char ch = '\u3289';
-
- Double expectedValue = 10;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char '\\u3289'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(ch);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("007", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- public bool PosTest5()
- {
- bool retVal = true;
-
- Char ch = 'a';
-
- Double expectedValue = -1;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char 'a'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(ch);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("009", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- public bool PosTest6()
- {
- bool retVal = true;
-
- Char ch = 'Z';
-
- Double expectedValue = -1;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char 'Z'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(ch);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("011", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetnumericvalue2.cs b/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetnumericvalue2.cs
deleted file mode 100644
index 2e7403e65a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetnumericvalue2.cs
+++ /dev/null
@@ -1,310 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CharUnicodeInfo.GetNumericValue(System.String,System.Int32)
-///</summary>
-
-public class CharUnicodeInfoGetNumericValue
-{
-
- public static int Main()
- {
- CharUnicodeInfoGetNumericValue testObj = new CharUnicodeInfoGetNumericValue();
- TestLibrary.TestFramework.BeginTestCase("for method of System.Globalization.CharUnicodeInfo.GetNumericValue");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
-
- #region Positive Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- String str = "\009aZ\u0f33";
-
- Double expectedValue = -1;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario(@"PosTest1:Test the method with '\0'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(str,0);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- String str = "\009aZ\u0f33";
-
- Double expectedValue = 0;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char '0'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(str,1);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("003", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- String str = "\009aZ\u0f33";
-
- Double expectedValue = 9;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char '9'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(str,2);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("005", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- String str = "\009aZ\u0f33";
-
- Double expectedValue = -1;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char 'a'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(str,3);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("007", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- public bool PosTest5()
- {
- bool retVal = true;
-
- String str = "\009aZ\u0f33";
-
- Double expectedValue = -1;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char 'Z'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(str,4);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("009", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- public bool PosTest6()
- {
- bool retVal = true;
-
- String str = "\009aZ\u0f33";
-
- Double expectedValue = -0.5;
-
- Double actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with char '\\u0f33'");
- try
- {
- actualValue = CharUnicodeInfo.GetNumericValue(str,5);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("011", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- #endregion
-
- #region Negative Test Logic
-
- public bool NegTest1()
- {
- bool retVal = true;
-
- String str = null;
- Double actureValue = 0;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1:Invoke the method with null string");
- try
- {
- actureValue = CharUnicodeInfo.GetNumericValue(str, 0);
- TestLibrary.TestFramework.LogError("013", "No ArgumentNullExcepthion thrown out expected.");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("014", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- String str = TestLibrary.Generator.GetString(-55, false,1,5);
- Double actureValue = 0;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1:Invoke the method with index out of left range");
- try
- {
- actureValue = CharUnicodeInfo.GetNumericValue(str, -1);
- TestLibrary.TestFramework.LogError("014", "No ArgumentNullExcepthion thrown out expected.");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("015", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- String str = TestLibrary.Generator.GetString(-55, false, 1, 5);
- Double actureValue = 0;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1:Invoke the method with index out of right range");
- try
- {
- actureValue = CharUnicodeInfo.GetNumericValue(str, 5);
- TestLibrary.TestFramework.LogError("014", "No ArgumentNullExcepthion thrown out expected.");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("015", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetunicodecategory1.cs b/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetunicodecategory1.cs
deleted file mode 100644
index ee79c21e2a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetunicodecategory1.cs
+++ /dev/null
@@ -1,944 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CharUnicodeInfo.GetUnicodeCategory(System.Char)
-///</summary>
-
-public class CharUnicodeInfoGetUnicodeCategory
-{
-
- public static int Main()
- {
- CharUnicodeInfoGetUnicodeCategory testObj = new CharUnicodeInfoGetUnicodeCategory();
- TestLibrary.TestFramework.BeginTestCase("for method of System.Globalization.CharUnicodeInfo.GetUnicodeCategory");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
- retVal = PosTest7() && retVal;
- retVal = PosTest8() && retVal;
- retVal = PosTest9() && retVal;
- retVal = PosTest10() && retVal;
- retVal = PosTest11() && retVal;
- retVal = PosTest12() && retVal;
- retVal = PosTest13() && retVal;
- retVal = PosTest14() && retVal;
- retVal = PosTest15() && retVal;
- retVal = PosTest16() && retVal;
- retVal = PosTest17() && retVal;
- retVal = PosTest18() && retVal;
- retVal = PosTest19() && retVal;
- retVal = PosTest20() && retVal;
- retVal = PosTest21() && retVal;
- retVal = PosTest22() && retVal;
- retVal = PosTest23() && retVal;
- retVal = PosTest24() && retVal;
- retVal = PosTest25() && retVal;
- retVal = PosTest26() && retVal;
- retVal = PosTest27() && retVal;
- retVal = PosTest28() && retVal;
- retVal = PosTest29() && retVal;
- retVal = PosTest30() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- Char ch = 'A';
-
- int expectedValue = (int)UnicodeCategory.UppercaseLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with upper letter");
-
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ") when char is '" + ch + "'" );
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- Char ch = 'a';
-
- int expectedValue = (int)UnicodeCategory.LowercaseLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2:Test the method with low case char");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("003", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- Char ch = '\u1fa8'; //this char is a TitlecaseLetter char
-
- int expectedValue = (int)UnicodeCategory.TitlecaseLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3:Test the method with '\\0'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("005", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- Char ch = '\u02b0';
-
- int expectedValue = (int)UnicodeCategory.ModifierLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4:Test the method with '\\u02b0'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("007", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
-
- Char ch = '\u404e';
-
- int expectedValue = (int)UnicodeCategory.OtherLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest5:Test the method with '\\u404e'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("009", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest6()
- {
- bool retVal = true;
-
- Char ch = '\u0300';
-
- int expectedValue = (int)UnicodeCategory.NonSpacingMark;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest6:Test the method with '\\u0300'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("011", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest7()
- {
- bool retVal = true;
-
- Char ch = '\u0903';
-
- int expectedValue = (int)UnicodeCategory.SpacingCombiningMark;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest7:Test the method with '\\u0903'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("013", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("014", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest8()
- {
- bool retVal = true;
-
- Char ch = '\u0488';
-
- int expectedValue = (int)UnicodeCategory.EnclosingMark;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest8:Test the method with '\\u0488'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("017", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("018", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest9()
- {
- bool retVal = true;
-
- Char ch = '0';
-
- int expectedValue = (int)UnicodeCategory.DecimalDigitNumber;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest9:Test the method with '0'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("017", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("018", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest10()
- {
- bool retVal = true;
-
- Char ch = '\u16ee';
-
- int expectedValue = (int)UnicodeCategory.LetterNumber;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest10:Test the method with '\\u16ee'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("019", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("020", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest11()
- {
- bool retVal = true;
-
- Char ch = '\u00b2';
-
- int expectedValue = (int)UnicodeCategory.OtherNumber;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest11:Test the method with '\\u00b2'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("021", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("022", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest12()
- {
- bool retVal = true;
-
- Char ch = '\u0020';
-
- int expectedValue = (int)UnicodeCategory.SpaceSeparator;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest12:Test the method with '\\u0020'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("023", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("024", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest13()
- {
- bool retVal = true;
-
- Char ch = '\u2028';
-
- int expectedValue = (int)UnicodeCategory.LineSeparator;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest13:Test the method with '\\u2028'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("025", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("026", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest14()
- {
- bool retVal = true;
-
- Char ch = '\u2029';
-
- int expectedValue = (int)UnicodeCategory.ParagraphSeparator;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest14:Test the method with '\\u2029'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("027", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("028", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest15()
- {
- bool retVal = true;
-
- Char ch = '\0';
-
- int expectedValue = (int)UnicodeCategory.Control;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest15:Test the method with '\\0'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("029", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("030", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest16()
- {
- bool retVal = true;
-
- Char ch = '\u00ad';
-
- int expectedValue = (int)UnicodeCategory.Format;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest16:Test the method with '\\u00ad'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("031", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("032", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest17()
- {
- bool retVal = true;
-
- Char ch = '\ud800';
-
- int expectedValue = (int)UnicodeCategory.Surrogate;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest17:Test the method with '\\ud800'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("033", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("034", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest18()
- {
- bool retVal = true;
-
- Char ch = '\ue000';
-
- int expectedValue = (int)UnicodeCategory.PrivateUse;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest18:Test the method with '\\ue000'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("035", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("036", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest19()
- {
- bool retVal = true;
-
- Char ch = '\u005f';
-
- int expectedValue = (int)UnicodeCategory.ConnectorPunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest19:Test the method with '\\u005f'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("037", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("038", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest20()
- {
- bool retVal = true;
-
- Char ch = '-';
-
- int expectedValue = (int)UnicodeCategory.DashPunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest20:Test the method with '-'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("039", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("040", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest21()
- {
- bool retVal = true;
-
- Char ch = '(';
-
- int expectedValue = (int)UnicodeCategory.OpenPunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest21:Test the method with '('");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("041", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("042", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest22()
- {
- bool retVal = true;
-
- Char ch = ')';
-
- int expectedValue = (int)UnicodeCategory.ClosePunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest22:Test the method with ')'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("043", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("044", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest23()
- {
- bool retVal = true;
-
- Char ch = '\u00ab';
-
- int expectedValue = (int)UnicodeCategory.InitialQuotePunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest23:Test the method with '\\u00ab'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("045", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("046", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest24()
- {
- bool retVal = true;
-
- Char ch = '\u00bb';
-
- int expectedValue = (int)UnicodeCategory.FinalQuotePunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest24:Test the method with '\\u00bb'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("047", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("048", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest25()
- {
- bool retVal = true;
-
- Char ch = '!';
-
- int expectedValue = (int)UnicodeCategory.OtherPunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest25:Test the method with '!'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("049", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("050", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest26()
- {
- bool retVal = true;
-
- Char ch = '+';
-
- int expectedValue = (int)UnicodeCategory.MathSymbol;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest26:Test the method with '+'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("051", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("052", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest27()
- {
- bool retVal = true;
-
- Char ch = '$';
-
- int expectedValue = (int)UnicodeCategory.CurrencySymbol;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest27:Test the method with '$'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("053", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("054", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest28()
- {
- bool retVal = true;
-
- Char ch = '^';
-
- int expectedValue = (int)UnicodeCategory.ModifierSymbol;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest28:Test the method with '^'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("055", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("056", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest29()
- {
- bool retVal = true;
-
- Char ch = '\u00a6';
-
- int expectedValue = (int)UnicodeCategory.OtherSymbol;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest29:Test the method with '\\u00a6'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("057", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("058", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest30()
- {
- bool retVal = true;
-
- Char ch = '\u0242';
-
- int expectedValue = (int)UnicodeCategory.LowercaseLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest30:Test the method with '\\u0242'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(ch));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("059", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("060", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetunicodecategory2.cs b/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetunicodecategory2.cs
deleted file mode 100644
index 200ece2abc..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/charunicodeinfo/charunicodeinfogetunicodecategory2.cs
+++ /dev/null
@@ -1,1040 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CharUnicodeInfo.GetUnicodeCategory(System.String,System.Int32)
-///</summary>
-
-public class CharUnicodeInfoGetUnicodeCategory
-{
- public String str = "Aa\u1fa8\u02b0\u404e\u0300\u0903\u0488\u0030\u16ee\u00b2\u0020\u2028\u2029\0\u00ad\ud800\ue000\u005f\u002d()\u00ab\u00bb!+$^\u00a6\u0242";
-
- public static int Main()
- {
- CharUnicodeInfoGetUnicodeCategory testObj = new CharUnicodeInfoGetUnicodeCategory();
- TestLibrary.TestFramework.BeginTestCase("for method of System.Globalization.CharUnicodeInfo.GetUnicodeCategory");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
- retVal = PosTest7() && retVal;
- retVal = PosTest8() && retVal;
- retVal = PosTest9() && retVal;
- retVal = PosTest10() && retVal;
- retVal = PosTest11() && retVal;
- retVal = PosTest12() && retVal;
- retVal = PosTest13() && retVal;
- retVal = PosTest14() && retVal;
- retVal = PosTest15() && retVal;
- retVal = PosTest16() && retVal;
- retVal = PosTest17() && retVal;
- retVal = PosTest18() && retVal;
- retVal = PosTest19() && retVal;
- retVal = PosTest20() && retVal;
- retVal = PosTest21() && retVal;
- retVal = PosTest22() && retVal;
- retVal = PosTest23() && retVal;
- retVal = PosTest24() && retVal;
- retVal = PosTest25() && retVal;
- retVal = PosTest26() && retVal;
- retVal = PosTest27() && retVal;
- retVal = PosTest28() && retVal;
- retVal = PosTest29() && retVal;
- retVal = PosTest30() && retVal;
-
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
- return retVal;
- }
-
-
- #region Positive Test Logic
- public bool PosTest1()
- {
- bool retVal = true;
-
- Char ch = 'A';
-
- int expectedValue = (int)UnicodeCategory.UppercaseLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:Test the method with upper letter");
-
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,0));
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ") when char is '" + ch + "'");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- Char ch = 'a';
-
- int expectedValue = (int)UnicodeCategory.LowercaseLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2:Test the method with low case char");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,1));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("003", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- Char ch = '\0';
-
- int expectedValue = (int)UnicodeCategory.TitlecaseLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3:Test the method with '\\0'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,2));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("005", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- Char ch = '\u02b0';
-
- int expectedValue = (int)UnicodeCategory.ModifierLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4:Test the method with '\\u02b0'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,3));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("007", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
-
- Char ch = '\u404e';
-
- int expectedValue = (int)UnicodeCategory.OtherLetter;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest5:Test the method with '\\u404e'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,4));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("009", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest6()
- {
- bool retVal = true;
-
- Char ch = '\u0300';
-
- int expectedValue = (int)UnicodeCategory.NonSpacingMark;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest6:Test the method with '\\u0300'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,5));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("011", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest7()
- {
- bool retVal = true;
-
- Char ch = '\u0903';
-
- int expectedValue = (int)UnicodeCategory.SpacingCombiningMark;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest7:Test the method with '\\u0903'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,6));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("013", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("014", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest8()
- {
- bool retVal = true;
-
- Char ch = '\u0488';
-
- int expectedValue = (int)UnicodeCategory.EnclosingMark;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest8:Test the method with '\\u0488'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,7));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("017", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("018", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest9()
- {
- bool retVal = true;
-
- Char ch = '0';
-
- int expectedValue = (int)UnicodeCategory.DecimalDigitNumber;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest9:Test the method with '0'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,8));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("017", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("018", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest10()
- {
- bool retVal = true;
-
- Char ch = '\u16ee';
-
- int expectedValue = (int)UnicodeCategory.LetterNumber;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest10:Test the method with '\\u16ee'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,9));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("019", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("020", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest11()
- {
- bool retVal = true;
-
- Char ch = '\u00b2';
-
- int expectedValue = (int)UnicodeCategory.OtherNumber;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest11:Test the method with '\\u00b2'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,10));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("021", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("022", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest12()
- {
- bool retVal = true;
-
- Char ch = '\u0020';
-
- int expectedValue = (int)UnicodeCategory.SpaceSeparator;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest12:Test the method with '\\u0020'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,11));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("023", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("024", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest13()
- {
- bool retVal = true;
-
- Char ch = '\u2028';
-
- int expectedValue = (int)UnicodeCategory.LineSeparator;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest13:Test the method with '\\u2028'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,12));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("025", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("026", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest14()
- {
- bool retVal = true;
-
- Char ch = '\u2029';
-
- int expectedValue = (int)UnicodeCategory.ParagraphSeparator;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest14:Test the method with '\\u2029'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,13));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("027", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("028", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest15()
- {
- bool retVal = true;
-
- Char ch = '\0';
-
- int expectedValue = (int)UnicodeCategory.Control;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest15:Test the method with '\\0'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,14));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("029", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("030", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest16()
- {
- bool retVal = true;
-
- Char ch = '\u00ad';
-
- int expectedValue = (int)UnicodeCategory.Format;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest16:Test the method with '\\u00ad'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,15));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("031", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("032", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest17()
- {
- bool retVal = true;
-
- Char ch = '\ud800';
-
- int expectedValue = (int)UnicodeCategory.Surrogate;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest17:Test the method with '\\ud800'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,16));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("033", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("034", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest18()
- {
- bool retVal = true;
-
- Char ch = '\ue000';
-
- int expectedValue = (int)UnicodeCategory.PrivateUse;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest18:Test the method with '\\ue000'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,17));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("035", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("036", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest19()
- {
- bool retVal = true;
-
- Char ch = '\u005f';
-
- int expectedValue = (int)UnicodeCategory.ConnectorPunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest19:Test the method with '\\u005f'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,18));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("037", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("038", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest20()
- {
- bool retVal = true;
-
- Char ch = '-';
-
- int expectedValue = (int)UnicodeCategory.DashPunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest20:Test the method with '-'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,19));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("039", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("040", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest21()
- {
- bool retVal = true;
-
- Char ch = '(';
-
- int expectedValue = (int)UnicodeCategory.OpenPunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest21:Test the method with '('");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,20));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("041", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("042", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest22()
- {
- bool retVal = true;
-
- Char ch = ')';
-
- int expectedValue = (int)UnicodeCategory.ClosePunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest22:Test the method with ')'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,21));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("043", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("044", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest23()
- {
- bool retVal = true;
-
- Char ch = '\u00ab';
-
- int expectedValue = (int)UnicodeCategory.InitialQuotePunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest23:Test the method with '\\u00ab'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,22));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("045", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("046", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest24()
- {
- bool retVal = true;
-
- Char ch = '\u00bb';
-
- int expectedValue = (int)UnicodeCategory.FinalQuotePunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest24:Test the method with '\\u00bb'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,23));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("047", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("048", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest25()
- {
- bool retVal = true;
-
- Char ch = '!';
-
- int expectedValue = (int)UnicodeCategory.OtherPunctuation;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest25:Test the method with '!'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,24));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("049", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("050", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest26()
- {
- bool retVal = true;
-
- Char ch = '+';
-
- int expectedValue = (int)UnicodeCategory.MathSymbol;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest26:Test the method with '+'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,25));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("051", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("052", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest27()
- {
- bool retVal = true;
-
- Char ch = '$';
-
- int expectedValue = (int)UnicodeCategory.CurrencySymbol;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest27:Test the method with '$'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,26));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("053", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("054", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest28()
- {
- bool retVal = true;
-
- Char ch = '^';
-
- int expectedValue = (int)UnicodeCategory.ModifierSymbol;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest28:Test the method with '^'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,27));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("055", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("056", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest29()
- {
- bool retVal = true;
-
- Char ch = '\u00a6';
-
- int expectedValue = (int)UnicodeCategory.OtherSymbol;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest29:Test the method with '\\u00a6'");
- try
- {
- actualValue = (int)(CharUnicodeInfo.GetUnicodeCategory(str,28));
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("057", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("058", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest30()
- {
- bool retVal = true;
-
- Char ch = '\u0242';
-
- // The values 0242 thru 024F on the Mac PPC (which is unicode 4.0) are OtherNotAssigned
- // On Whidbey (QFE branch), Telesto and Intel Mac this 0242 has the value of LowercaseLetter
- int expectedValue = (int)UnicodeCategory.LowercaseLetter;
- if ((!TestLibrary.Utilities.IsWindows) && (TestLibrary.Utilities.IsBigEndian))
- {
- expectedValue = (int)UnicodeCategory.OtherNotAssigned;
- }
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("PosTest30:Test the method with '\\u0242'");
- try
- {
- actualValue = (int) CharUnicodeInfo.GetUnicodeCategory(str,29);
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("059", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("060", "when char is '" + ch + "',Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-
- #region Negative Test Logic
-
- public bool NegTest1()
- {
- bool retVal = true;
-
- String testStr = null;
-
- int actualValue;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1:Invoke the method with null string");
- try
- {
- actualValue = (int)CharUnicodeInfo.GetUnicodeCategory(testStr, 0);
- TestLibrary.TestFramework.LogError("061", "No ArgumentNullExcepthion thrown out expected.");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("062", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- int actualValue;
-
- String testStr = TestLibrary.Generator.GetString(-55, false,1,5);
-
- TestLibrary.TestFramework.BeginScenario("NegTest2:Invoke the method with index out of left range.");
- try
- {
- actualValue = (int)CharUnicodeInfo.GetUnicodeCategory(testStr, -1);
- TestLibrary.TestFramework.LogError("063", "No ArgumentNullExcepthion thrown out expected.");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("064", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- int actualValue;
-
- String testStr = TestLibrary.Generator.GetString(-55, false,1,5);
-
- TestLibrary.TestFramework.BeginScenario("NegTest3:Invoke the method with index out of right range");
- try
- {
- actualValue = (int)CharUnicodeInfo.GetUnicodeCategory(testStr, 6);
- TestLibrary.TestFramework.LogError("065", "No ArgumentNullExcepthion thrown out expected.");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("066", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareinfo/CompareInfoCompare2.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareinfo/CompareInfoCompare2.csproj
deleted file mode 100644
index 4f954662f2..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareinfo/CompareInfoCompare2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareinfocompare2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareinfo/CompareInfoIndexOf2.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareinfo/CompareInfoIndexOf2.csproj
deleted file mode 100644
index e0e2211392..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareinfo/CompareInfoIndexOf2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareinfoindexof2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareinfo/compareinfocompare2.cs b/tests/src/CoreMangLib/cti/system/globalization/compareinfo/compareinfocompare2.cs
deleted file mode 100644
index f8c05e97b8..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareinfo/compareinfocompare2.cs
+++ /dev/null
@@ -1,218 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Text;
-using System.Globalization;
-using TestLibrary;
-
-public class CompareInfoCompare
-{
- public static string[] InterestingStrings = new string[] { null, "", "a", "1", "-", "A", "!", "abc", "aBc", "a\u0400Bc", "I", "i", "\u0130", "\u0131", "A", "\uFF21", "\uFE57"};
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- return retVal;
- }
-
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Compare interesting strings ordinally");
-
- try
- {
- foreach (string s in InterestingStrings)
- {
- foreach (string r in InterestingStrings)
- {
- retVal &= TestStrings(s, r);
- }
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Compare many characters");
-
- try
- {
- for (int i = 0; i < 40; i++) // Ok, 40 isn't that many... but this takes way too long
- {
- char c = Generator.GetChar(-55);
- if (Utilities.CurrentCulture.CompareInfo.Compare(new string(new char[] { c }), new string(new char[] { c }), CompareOptions.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogError("002.1", "Character " + i.ToString() + " is not equal to itself ordinally!");
- retVal = false;
- }
-
- for (int j = 0; j < (int)c; j++)
- {
- int compareResult = Utilities.CurrentCulture.CompareInfo.Compare(new string(new char[] { c }), new string(new char[] { (char)j }), CompareOptions.Ordinal);
- if (compareResult != 0) compareResult = compareResult / Math.Abs(compareResult);
- if (compareResult != 1)
- {
- TestLibrary.TestFramework.LogError("002.2", "Character " + ((int)c).ToString() + " is not greater than character " + j.ToString() + ", Compare result: " + compareResult.ToString());
- retVal = false;
- }
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.4", "Unexpected exception: " + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Compare many strings");
-
- try
- {
- for (int i = 0; i < 1000; i++)
- {
- string str1 = Generator.GetString(-55, false, 5, 20);
- string str2 = Generator.GetString(-55, false, 5, 20);
- if (Utilities.CurrentCulture.CompareInfo.Compare(str1, str1, CompareOptions.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogError("003.1", "Comparison not as expected! Acutal result: " + Utilities.CurrentCulture.CompareInfo.Compare(str1, str1, CompareOptions.Ordinal).ToString() + ", Expected result: 0");
- TestLibrary.TestFramework.LogInformation("String 1: <" + str1 + "> : " + BytesFromString(str1) + "\nString 2: <" + str1 + "> : " + BytesFromString(str1));
- retVal = false;
- }
- if (Utilities.CurrentCulture.CompareInfo.Compare(str2, str2, CompareOptions.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogError("003.2", "Comparison not as expected! Acutal result: " + Utilities.CurrentCulture.CompareInfo.Compare(str2, str2, CompareOptions.Ordinal).ToString() + ", Expected result: 0");
- TestLibrary.TestFramework.LogInformation("String 1: <" + str2 + "> : " + BytesFromString(str2) + "\nString 2: <" + str2 + "> : " + BytesFromString(str2));
- retVal = false;
- }
- TestStrings(str1, str2);
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.4", "Unexpected exception: " + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: Specific regression cases");
-
- try
- {
- CultureInfo oldCi = Utilities.CurrentCulture;
- Utilities.CurrentCulture = new CultureInfo("hu-HU");
- retVal &= TestStrings("dzsdzs", "ddzs");
- Utilities.CurrentCulture = oldCi;
-
- retVal &= TestStrings("\u00C0nimal", "A\u0300nimal");
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004.2", "Unexpected exception: " + e);
- retVal = false;
- }
- return retVal;
- }
-
- public static int Main()
- {
- CompareInfoCompare test = new CompareInfoCompare();
-
- TestLibrary.TestFramework.BeginTestCase("CompareInfoCompare");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- private bool TestStrings(string str1, string str2)
- {
- bool retVal = true;
-
- int expectValue = PredictValue(str1, str2);
- int actualValue = Utilities.CurrentCulture.CompareInfo.Compare(str1, str2, CompareOptions.Ordinal);
- if (expectValue != 0) expectValue = expectValue / Math.Abs(expectValue);
- if (actualValue != 0) actualValue = actualValue / Math.Abs(actualValue);
-
- if (actualValue != expectValue)
- {
- TestLibrary.TestFramework.LogError("001.1", "Comparison not as expected! Acutal result: " + actualValue + ", Expected result: " + expectValue);
- TestLibrary.TestFramework.LogInformation("String 1: <" + str1 + "> : " + BytesFromString(str1) + "\nString 2: <" + str2 + "> : " + BytesFromString(str2));
- retVal = false;
- }
-
- return retVal;
- }
-
- int PredictValue(string str1, string str2)
- {
- if (str1 == null)
- {
- if (str2 == null) return 0;
- else return -1;
- }
- if (str2 == null) return 1;
-
- for (int i = 0; i < str1.Length; i++)
- {
- if (i >= str2.Length) return 1;
- if ((int)str1[i] > (int)str2[i]) return 1;
- if ((int)str1[i] < (int)str2[i]) return -1;
- }
-
- if (str2.Length > str1.Length) return -1;
-
- return 0;
- }
-
- private static string BytesFromString(string str)
- {
- if (str == null) return string.Empty;
- StringBuilder output = new StringBuilder();
- for (int i = 0; i < str.Length; i++)
- {
- output.Append(Utilities.ByteArrayToString(BitConverter.GetBytes(str[i])));
- if (i != (str.Length - 1)) output.Append(", ");
- }
- return output.ToString();
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareinfo/compareinfoindexof2.cs b/tests/src/CoreMangLib/cti/system/globalization/compareinfo/compareinfoindexof2.cs
deleted file mode 100644
index 4a653b8bc9..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareinfo/compareinfoindexof2.cs
+++ /dev/null
@@ -1,185 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Text;
-using System.Globalization;
-using TestLibrary;
-
-public class CompareInfoIndexOf
-{
- public static string[] InterestingStrings = new string[] { "", "a", "1", "-", "A", "!", "abc", "aBc", "a\u0400Bc", "I", "i", "\u0130", "\u0131", "A", "\uFF21", "\uFE57"};
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- return retVal;
- }
-
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Compare interesting strings ordinally");
-
- try
- {
- foreach (string s in InterestingStrings)
- {
- foreach (string r in InterestingStrings)
- {
- retVal &= TestStrings(s, r);
- }
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Compare many strings");
-
- try
- {
- for (int i = 0; i < 1000; i++)
- {
- string str1 = Generator.GetString(-55, false, 5, 20);
- string str2 = Generator.GetString(-55, false, 5, 20);
- if (Utilities.CurrentCulture.CompareInfo.IndexOf(str1, str1, CompareOptions.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogError("003.1", "Comparison not as expected! Actual result: " + Utilities.CurrentCulture.CompareInfo.IndexOf(str1, str1, CompareOptions.Ordinal).ToString() + ", Expected result: 0");
- TestLibrary.TestFramework.LogInformation("String 1: <" + str1 + "> : " + BytesFromString(str1) + "\nString 2: <" + str1 + "> : " + BytesFromString(str1));
- retVal = false;
- }
- if (Utilities.CurrentCulture.CompareInfo.IndexOf(str2, str2, CompareOptions.Ordinal) != 0)
- {
- TestLibrary.TestFramework.LogError("003.2", "Comparison not as expected! Actual result: " + Utilities.CurrentCulture.CompareInfo.IndexOf(str2, str2, CompareOptions.Ordinal).ToString() + ", Expected result: 0");
- TestLibrary.TestFramework.LogInformation("String 1: <" + str2 + "> : " + BytesFromString(str2) + "\nString 2: <" + str2 + "> : " + BytesFromString(str2));
- retVal = false;
- }
- TestStrings(str1, str2);
- TestStrings(str1 + str2, str2);
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.4", "Unexpected exception: " + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Specific regression cases");
-
- try
- {
- CultureInfo oldCi = Utilities.CurrentCulture;
- Utilities.CurrentCulture = new CultureInfo("hu-HU");
- retVal &= TestStrings("Foodzsdzsbar", "ddzs");
- Utilities.CurrentCulture = oldCi;
-
- retVal &= TestStrings("\u00C0nimal", "A\u0300");
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004.2", "Unexpected exception: " + e);
- retVal = false;
- }
- return retVal;
- }
-
- public static int Main()
- {
- CompareInfoIndexOf test = new CompareInfoIndexOf();
-
- TestLibrary.TestFramework.BeginTestCase("CompareInfoIndexOf");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- private bool TestStrings(string str1, string str2)
- {
- bool retVal = true;
-
- int expectValue = PredictValue(str1, str2);
- int actualValue = Utilities.CurrentCulture.CompareInfo.IndexOf(str1, str2, CompareOptions.Ordinal);
-
- if (actualValue != expectValue)
- {
- TestLibrary.TestFramework.LogError("001.1", "Comparison not as expected! Actual result: " + actualValue + ", Expected result: " + expectValue);
- TestLibrary.TestFramework.LogInformation("String 1: <" + str1 + "> : " + BytesFromString(str1) + "\nString 2: <" + str2 + "> : " + BytesFromString(str2));
- retVal = false;
- }
-
- return retVal;
- }
-
- int PredictValue(string str1, string str2)
- {
- if (str1 == null)
- {
- if (str2 == null) return 0;
- else return -1;
- }
- if (str2 == null) return -1;
-
- if (str2.Length > str1.Length) return -1;
-
- for (int i = 0; i <= str1.Length - str2.Length; i++)
- {
- bool match = true;
- for (int j = 0; j < str2.Length; j++)
- {
- if ((int)str1[i + j] != (int)str2[j])
- {
- match = false;
- break;
- }
- }
- if (match) return i;
- }
- return -1;
- }
-
- private static string BytesFromString(string str)
- {
- if (str == null) return string.Empty;
- StringBuilder output = new StringBuilder();
- for (int i = 0; i < str.Length; i++)
- {
- output.Append(Utilities.ByteArrayToString(BitConverter.GetBytes(str[i])));
- if (i != (str.Length - 1)) output.Append(", ");
- }
- return output.ToString();
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreCase.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreCase.csproj
deleted file mode 100644
index 4786f6a0f0..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreCase.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareoptionsignorecase.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreKanaType.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreKanaType.csproj
deleted file mode 100644
index e281e195aa..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreKanaType.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareoptionsignorekanatype.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreNonSpace.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreNonSpace.csproj
deleted file mode 100644
index 1ef959adfe..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreNonSpace.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareoptionsignorenonspace.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreSymbols.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreSymbols.csproj
deleted file mode 100644
index 692ab099e8..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreSymbols.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareoptionsignoresymbols.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreWidth.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreWidth.csproj
deleted file mode 100644
index 79afcada8e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsIgnoreWidth.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareoptionsignorewidth.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsNone.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsNone.csproj
deleted file mode 100644
index 0657d01721..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsNone.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareoptionsnone.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsOrdinal.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsOrdinal.csproj
deleted file mode 100644
index 9884209bb5..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsOrdinal.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareoptionsordinal.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsOrdinalIgoreCase.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsOrdinalIgoreCase.csproj
deleted file mode 100644
index 719a7f491e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsOrdinalIgoreCase.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareoptionsordinaligorecase.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsStringSort.csproj b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsStringSort.csproj
deleted file mode 100644
index 339c0bb9fc..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/CompareOptionsStringSort.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="compareoptionsstringsort.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorecase.cs b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorecase.cs
deleted file mode 100644
index 7217e6d487..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorecase.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CompareOptions.IgnoreCase
-///</summary>
-
-public class CompareOptionsIgnoreCase
-{
-
- public static int Main()
- {
- CompareOptionsIgnoreCase testObj = new CompareOptionsIgnoreCase();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.CompareOptions.IgnoreCase");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000001;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CompareOptions.IgnoreCase");
- try
- {
- actualValue = (UInt64)CompareOptions.IgnoreCase;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorekanatype.cs b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorekanatype.cs
deleted file mode 100644
index 47031cd2a0..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorekanatype.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CompareOptions.IgnoreKanaType
-///</summary>
-
-public class CompareOptionsIgnoreKanaType
-{
-
- public static int Main()
- {
- CompareOptionsIgnoreKanaType testObj = new CompareOptionsIgnoreKanaType();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.CompareOptions.IgnoreKanaType");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000008;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CompareOptions.IgnoreKanaType");
- try
- {
- actualValue = (UInt64)CompareOptions.IgnoreKanaType;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorenonspace.cs b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorenonspace.cs
deleted file mode 100644
index 6a561951d8..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorenonspace.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CompareOptions.IgnoreNonSpace
-///</summary>
-
-public class CompareOptionsIgnoreNonSpace
-{
-
- public static int Main()
- {
- CompareOptionsIgnoreNonSpace testObj = new CompareOptionsIgnoreNonSpace();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.CompareOptions.IgnoreNonSpace");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000002;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CompareOptions.IgnoreNonSpace");
- try
- {
- actualValue = (UInt64)CompareOptions.IgnoreNonSpace;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignoresymbols.cs b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignoresymbols.cs
deleted file mode 100644
index 39ebfd22ce..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignoresymbols.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CompareOptions.IgnoreSymbols
-///</summary>
-
-public class CompareOptionsIgnoreSymbols
-{
-
- public static int Main()
- {
- CompareOptionsIgnoreSymbols testObj = new CompareOptionsIgnoreSymbols();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.CompareOptions.IgnoreSymbols");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000004;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CompareOptions.IgnoreSymbols");
- try
- {
- actualValue = (UInt64)CompareOptions.IgnoreSymbols;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorewidth.cs b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorewidth.cs
deleted file mode 100644
index abedd43452..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsignorewidth.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CompareOptions.IgnoreWidth
-///</summary>
-
-public class CompareOptionsIgnoreWidth
-{
-
- public static int Main()
- {
- CompareOptionsIgnoreWidth testObj = new CompareOptionsIgnoreWidth();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.CompareOptions.IgnoreWidth");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000010;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CompareOptions.IgnoreWidth");
- try
- {
- actualValue = (UInt64)CompareOptions.IgnoreWidth;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsnone.cs b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsnone.cs
deleted file mode 100644
index 5fe1b92c4d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsnone.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CompareOptions.None
-///</summary>
-
-public class CompareOptionsNone
-{
-
- public static int Main()
- {
- CompareOptionsNone testObj = new CompareOptionsNone();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.CompareOptions.None");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000000;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CompareOptions.None");
- try
- {
- actualValue = (UInt64)CompareOptions.None;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsordinal.cs b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsordinal.cs
deleted file mode 100644
index 991754c1e8..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsordinal.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CompareOptions.Ordinal
-///</summary>
-
-public class CompareOptionsOrdinal
-{
-
- public static int Main()
- {
- CompareOptionsOrdinal testObj = new CompareOptionsOrdinal();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.CompareOptions.Ordinal");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x40000000;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CompareOptions.Ordinal");
- try
- {
- actualValue = (UInt64)CompareOptions.Ordinal;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsordinaligorecase.cs b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsordinaligorecase.cs
deleted file mode 100644
index cdcc9175df..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsordinaligorecase.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CompareOptions.OrdinalIgnoreCase
-///</summary>
-
-public class CompareOptionsOrdinalIgnoreCase
-{
-
- public static int Main()
- {
- CompareOptionsOrdinalIgnoreCase testObj = new CompareOptionsOrdinalIgnoreCase();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.CompareOptions.OrdinalIgnoreCase");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x10000000;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CompareOptions.OrdinalIgnoreCase");
- try
- {
- actualValue = (UInt64)CompareOptions.OrdinalIgnoreCase;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsstringsort.cs b/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsstringsort.cs
deleted file mode 100644
index 15868acbf6..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/compareoptions/compareoptionsstringsort.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.CompareOptions.StringSort
-///</summary>
-
-public class CompareOptionsStringSort
-{
-
- public static int Main()
- {
- CompareOptionsStringSort testObj = new CompareOptionsStringSort();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.CompareOptions.StringSort");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x20000000;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get CompareOptions.StringSort");
- try
- {
- actualValue = (UInt64)CompareOptions.StringSort;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoClone.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoClone.csproj
deleted file mode 100644
index 3114583b30..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoClone.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfoclone.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoEnglishName.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoEnglishName.csproj
deleted file mode 100644
index c4ad0843ad..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoEnglishName.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfoenglishname.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoEquals.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoEquals.csproj
deleted file mode 100644
index f102f04769..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoEquals.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfoequals.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoGetCultureInfo2.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoGetCultureInfo2.csproj
deleted file mode 100644
index 849865924c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoGetCultureInfo2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfogetcultureinfo2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoGetHashCode.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoGetHashCode.csproj
deleted file mode 100644
index 635338451f..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoGetHashCode.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfogethashcode.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoInvariantCulture.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoInvariantCulture.csproj
deleted file mode 100644
index 47c0e85e3c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoInvariantCulture.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfoinvariantculture.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoIsNeutralCulture.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoIsNeutralCulture.csproj
deleted file mode 100644
index 2b4a504c11..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoIsNeutralCulture.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfoisneutralculture.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoName.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoName.csproj
deleted file mode 100644
index a923906f7f..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoName.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfoname.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoNativeName.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoNativeName.csproj
deleted file mode 100644
index fd8eeafc8b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoNativeName.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfonativename.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoParent.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoParent.csproj
deleted file mode 100644
index 91b9dee20f..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoParent.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfoparent.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoReadOnly.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoReadOnly.csproj
deleted file mode 100644
index c86f59799e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoReadOnly.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinforeadonly.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoTextInfo.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoTextInfo.csproj
deleted file mode 100644
index 77aaf35c39..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoTextInfo.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfotextinfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoToString.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoToString.csproj
deleted file mode 100644
index a70c9acf42..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoToString.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfotostring.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoTwoLetterISOLanguageName.csproj b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoTwoLetterISOLanguageName.csproj
deleted file mode 100644
index 113a11d68a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/CultureInfoTwoLetterISOLanguageName.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="cultureinfotwoletterisolanguagename.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoclone.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoclone.cs
deleted file mode 100644
index 3fb2ec0434..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoclone.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoenglishname.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoenglishname.cs
deleted file mode 100644
index 0d7244e608..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoenglishname.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoequals.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoequals.cs
deleted file mode 100644
index de2c612a3a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoequals.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfogetcultureinfo2.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfogetcultureinfo2.cs
deleted file mode 100644
index 187bdd9794..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfogetcultureinfo2.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfogethashcode.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfogethashcode.cs
deleted file mode 100644
index 14b746047a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfogethashcode.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoinvariantculture.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoinvariantculture.cs
deleted file mode 100644
index c325160b00..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoinvariantculture.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoisneutralculture.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoisneutralculture.cs
deleted file mode 100644
index 53770fba4d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoisneutralculture.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoname.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoname.cs
deleted file mode 100644
index 83dd460d10..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoname.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfonativename.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfonativename.cs
deleted file mode 100644
index b42972a706..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfonativename.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoparent.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoparent.cs
deleted file mode 100644
index 079d6c79e7..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfoparent.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinforeadonly.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinforeadonly.cs
deleted file mode 100644
index 2df3f6c921..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinforeadonly.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotextinfo.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotextinfo.cs
deleted file mode 100644
index 973a349441..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotextinfo.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotostring.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotostring.cs
deleted file mode 100644
index 250b9949e2..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotostring.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotwoletterisolanguagename.cs b/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotwoletterisolanguagename.cs
deleted file mode 100644
index 1b990e69ed..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/cultureinfo/cultureinfotwoletterisolanguagename.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoClone.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoClone.csproj
deleted file mode 100644
index b5aaef7ee3..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoClone.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfoclone.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoCurrentInfo.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoCurrentInfo.csproj
deleted file mode 100644
index 25a21a208a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoCurrentInfo.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfocurrentinfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetAbbreviatedMonthName.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetAbbreviatedMonthName.csproj
deleted file mode 100644
index a1c4a8c122..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetAbbreviatedMonthName.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfogetabbreviatedmonthname.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetFormat.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetFormat.csproj
deleted file mode 100644
index b6b29fd2d0..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetFormat.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfogetformat.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetInstance.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetInstance.csproj
deleted file mode 100644
index c78d2041ae..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetInstance.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfogetinstance.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetMonthName.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetMonthName.csproj
deleted file mode 100644
index 772207d5cd..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoGetMonthName.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfogetmonthname.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoInvariantInfo.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoInvariantInfo.csproj
deleted file mode 100644
index 0667522ae3..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoInvariantInfo.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfoinvariantinfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoIsReadOnly.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoIsReadOnly.csproj
deleted file mode 100644
index ea61dda12b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoIsReadOnly.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfoisreadonly.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoRFC1123Pattern.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoRFC1123Pattern.csproj
deleted file mode 100644
index deb0f8c023..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoRFC1123Pattern.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinforfc1123pattern.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoReadOnly.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoReadOnly.csproj
deleted file mode 100644
index b1f30a1e98..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoReadOnly.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinforeadonly.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoSortableDateTimePattern.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoSortableDateTimePattern.csproj
deleted file mode 100644
index ae1af29c3e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/DateTimeFormatInfoSortableDateTimePattern.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfosortabledatetimepattern.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/UniversalSortableDateTimePattern.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/UniversalSortableDateTimePattern.csproj
deleted file mode 100644
index 3ef122ca51..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/UniversalSortableDateTimePattern.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimeformatinfouniversalsortabledatetimepattern.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoclone.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoclone.cs
deleted file mode 100644
index 49137b156b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoclone.cs
+++ /dev/null
@@ -1,239 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// Clone
-/// </summary>
-public class DateTimeFormatInfoClone
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call Clone method on a instance created from Ctor");
-
- try
- {
- DateTimeFormatInfo expected = new DateTimeFormatInfo();
-
- retVal = VerificationHelper(expected, expected.Clone(), "001.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Call Clone method on a instance created from several cultures");
-
- try
- {
- DateTimeFormatInfo expected = new CultureInfo("en-us").DateTimeFormat;
- retVal = VerificationHelper(expected, expected.Clone(), "002.1") && retVal;
-
- expected = new CultureInfo("fr-FR").DateTimeFormat;
- retVal = VerificationHelper(expected, expected.Clone(), "002.2") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Call Clone method on a readonly instance created from several cultures");
-
- try
- {
- DateTimeFormatInfo expected = CultureInfo.InvariantCulture.DateTimeFormat;
- retVal = VerificationHelper(expected, expected.Clone(), "003.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoClone test = new DateTimeFormatInfoClone();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoClone");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerificationHelper(DateTimeFormatInfo expected, Object obj, string errorno)
- {
- bool retval = true;
-
- if (!(obj is DateTimeFormatInfo))
- {
- TestLibrary.TestFramework.LogError(errorno + ".1", "Calling Clone method does not return an DateTimeFormatInfo copy");
- retval = false;
- }
-
- DateTimeFormatInfo actual = obj as DateTimeFormatInfo;
- if ( actual.IsReadOnly )
- {
- TestLibrary.TestFramework.LogError(errorno + ".2", "Calling Clone method makes DateTimeFormatInfo copy read only");
- retval = false;
- }
-
- retval =
- IsEquals(actual.AbbreviatedDayNames, expected.AbbreviatedDayNames, errorno + ".3") &&
- IsEquals(actual.AbbreviatedMonthGenitiveNames, expected.AbbreviatedMonthGenitiveNames, errorno + ".4") &&
- IsEquals(actual.AbbreviatedMonthNames, expected.AbbreviatedMonthNames, errorno + ".5") &&
- IsEquals(actual.DayNames, expected.DayNames, errorno + ".6") &&
- IsEquals(actual.MonthGenitiveNames, expected.MonthGenitiveNames, errorno + ".7") &&
- IsEquals(actual.MonthNames, expected.MonthNames, errorno + ".8") &&
- IsEquals(actual.ShortestDayNames, expected.ShortestDayNames, errorno + ".9") &&
- IsEquals(actual.AMDesignator, expected.AMDesignator, errorno + ".10") &&
- //DateTimeFormatInfo.DateSeparator property has been removed
- IsEquals(actual.FullDateTimePattern, expected.FullDateTimePattern, errorno + ".12") &&
- IsEquals(actual.LongDatePattern, expected.LongDatePattern, errorno + ".13") &&
- IsEquals(actual.LongTimePattern, expected.LongTimePattern, errorno + ".14") &&
- IsEquals(actual.MonthDayPattern, expected.MonthDayPattern, errorno + ".15") &&
- IsEquals(actual.PMDesignator, expected.PMDesignator, errorno + ".17") &&
- IsEquals(actual.RFC1123Pattern, expected.RFC1123Pattern, errorno + ".18") &&
- IsEquals(actual.ShortDatePattern, expected.ShortDatePattern, errorno + ".19") &&
- IsEquals(actual.ShortTimePattern, expected.ShortTimePattern, errorno + ".20") &&
- IsEquals(actual.SortableDateTimePattern, expected.SortableDateTimePattern, errorno + ".21") &&
- //DateTimeFormatInfo.TimeSeparator property has been removed
- IsEquals(actual.UniversalSortableDateTimePattern, expected.UniversalSortableDateTimePattern, errorno + ".23") &&
- IsEquals(actual.YearMonthPattern, expected.YearMonthPattern, errorno + ".24") &&
- IsEquals(actual.CalendarWeekRule, expected.CalendarWeekRule, errorno + ".25") &&
- IsEquals(actual.FirstDayOfWeek, expected.FirstDayOfWeek, errorno + ".26") &&
- retval;
-
- return retval;
- }
-
- private bool IsEquals(string str1, string str2, string errorno)
- {
- bool retVal = true;
-
- if (str1 != str2)
- {
- TestLibrary.TestFramework.LogError(errorno, "Two string are not equal");
- TestLibrary.TestFramework.LogInformation("WARNING[LOCAL VARIABLES] str1 = " + str1 + ", str2 = " + str2);
- retVal = false;
- }
-
- return retVal;
- }
-
- private bool IsEquals(DayOfWeek value1, DayOfWeek value2, string errorno)
- {
- bool retVal = true;
-
- if (value1 != value2)
- {
- TestLibrary.TestFramework.LogError(errorno, "Two values are not equal");
- TestLibrary.TestFramework.LogInformation("WARNING[LOCAL VARIABLES] value1 = " + value1 + ", value2 = " + value2);
- retVal = false;
- }
-
- return retVal;
- }
-
- private bool IsEquals(CalendarWeekRule value1, CalendarWeekRule value2, string errorno)
- {
- bool retVal = true;
-
- if (value1 != value2)
- {
- TestLibrary.TestFramework.LogError(errorno, "Two values are not equal");
- TestLibrary.TestFramework.LogInformation("WARNING[LOCAL VARIABLES] value1 = " + value1 + ", value2 = " + value2);
- retVal = false;
- }
-
- return retVal;
- }
-
- private bool IsEquals(string[] array1, string[] array2, string errorno)
- {
- bool retval = true;
-
- if ((array1 == null) && (array2 == null))
- {
- return true;
- }
- if ((array1 == null) && (array2 != null))
- {
- return false;
- }
- if ((array1 != null) && (array2 == null))
- {
- return false;
- }
- if (array1.Length != array2.Length)
- {
- return false;
- }
-
- for (int i = 0; i < array1.Length; i++)
- {
- if (array1[i] != array2[i])
- {
- TestLibrary.TestFramework.LogError(errorno, "Two arrays are not equal");
- TestLibrary.TestFramework.LogInformation("WARNING[LOCAL VARIABLES] array1[i] = " + array1[i] + ", array2[i] = " + array2[i] + ", i = " + i);
- retval = false;
- break;
- }
- }
-
- return retval;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfocurrentinfo.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfocurrentinfo.cs
deleted file mode 100644
index dbe3e8a81a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfocurrentinfo.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// CurrentInfo
-/// </summary>
-public class DateTimeFormatInfoCurrentInfo
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call CurrentInfo to get a read only DateTimeFormatInfo based on the CultureInfo of the current thread");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.CurrentInfo;
- if (!info.IsReadOnly)
- {
- TestLibrary.TestFramework.LogError("001.1", "Calling CurrentInfo returns a writable instance");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoCurrentInfo test = new DateTimeFormatInfoCurrentInfo();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoCurrentInfo");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetabbreviatedmonthname.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetabbreviatedmonthname.cs
deleted file mode 100644
index 97877e73c3..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetabbreviatedmonthname.cs
+++ /dev/null
@@ -1,277 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// GetAbbreviatedMonthName(System.Int32)
-/// </summary>
-public class DateTimeFormatInfoGetAbbreviatedMonthName
-{
- #region Private Fields
- private const int c_MIN_MONTH_VALUE = 1;
- private const int c_MAX_MONTH_VALUE = 13;
- #endregion
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call GetAbbreviatedDayName on default invariant DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = CultureInfo.InvariantCulture.DateTimeFormat;
- string[] expected = new string[] {
- "",
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec",
- "",
- };
-
- retVal = VerificationHelper(info, expected, "001.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Call GetAbbreviatedDayName on en-us culture DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = new CultureInfo("en-us").DateTimeFormat;
- string[] expected = new string[] {
- "",
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec",
- "",
- };
-
- retVal = VerificationHelper(info, expected, "002.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Call GetAbbreviatedDayName on fr-FR culture DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = new CultureInfo("fr-FR").DateTimeFormat;
- string[] expected = new string[] {
- "",
- "janv.",
- "f\u00e9vr.",
- "mars",
- "avr.",
- "mai",
- "juin",
- "juil.",
- "ao\u00fbt",
- "sept.",
- "oct.",
- "nov.",
- "d\u00e9c.",
- "",
- };
-
- retVal = VerificationHelper(info, expected, "003.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: Call GetAbbreviatedDayName on DateTimeFormatInfo instance created from ctor");
-
- try
- {
- DateTimeFormatInfo info = new DateTimeFormatInfo();
- string[] expected = new string[] {
- "",
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec",
- "",
- };
-
- retVal = VerificationHelper(info, expected, "004.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentOutOfRangeException should be thrown when dayofweek is not a valid System.DayOfWeek value. ");
-
- try
- {
- DateTimeFormatInfo info = new DateTimeFormatInfo();
-
- info.GetAbbreviatedMonthName(c_MIN_MONTH_VALUE - 1);
-
- TestLibrary.TestFramework.LogError("101.1", "ArgumentOutOfRangeException is not thrown");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTimeFormatInfo info = new DateTimeFormatInfo();
-
- info.GetAbbreviatedMonthName(c_MAX_MONTH_VALUE + 1);
-
- TestLibrary.TestFramework.LogError("101.3", "ArgumentOutOfRangeException is not thrown");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.4", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoGetAbbreviatedMonthName test = new DateTimeFormatInfoGetAbbreviatedMonthName();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoGetAbbreviatedMonthName");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerificationHelper(DateTimeFormatInfo info, string[] expected, string errorno)
- {
- bool retval = true;
-
- for (int i = c_MIN_MONTH_VALUE; i <= c_MAX_MONTH_VALUE; ++i)
- {
- string actual = info.GetAbbreviatedMonthName(i);
- if (actual != expected[i])
- {
- TestLibrary.TestFramework.LogError(errorno, "GetAbbreviatedDayName returns wrong value");
- TestLibrary.TestFramework.LogInformation("WARNING[LOCAL VARIABLES] i = " + i + ", expected[i] = " + expected[i] + ", actual = " + actual);
- retval = false;
- }
- }
-
- return retval;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetformat.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetformat.cs
deleted file mode 100644
index d8a569b080..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetformat.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// GetFormat(System.Type)
-/// </summary>
-public class DateTimeFormatInfoGetFormat
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call GetFormat to to get an valid DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo expected = new DateTimeFormatInfo();
- object obj = expected.GetFormat(typeof(DateTimeFormatInfo));
-
- if (!(obj is DateTimeFormatInfo))
- {
- TestLibrary.TestFramework.LogError("001.1", "Calling GetFormat returns a non DateTimeFormatInfo instance");
- retVal = false;
- }
-
- DateTimeFormatInfo actual = obj as DateTimeFormatInfo;
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.2", "Calling GetFormat returns wrong instance");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: If the format type is not supported, null reference should be return");
-
- try
- {
- DateTimeFormatInfo info = new DateTimeFormatInfo();
- if (info.GetFormat(typeof(Object)) != null)
- {
- TestLibrary.TestFramework.LogError("002.1", "If the format type is not supported, null reference is not returned");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoGetFormat test = new DateTimeFormatInfoGetFormat();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoGetFormat");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetinstance.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetinstance.cs
deleted file mode 100644
index 6be081cc07..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetinstance.cs
+++ /dev/null
@@ -1,195 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-public class TestIFormatProviderClass : IFormatProvider
-{
- public object GetFormat(Type formatType)
- {
- return this;
- }
-}
-
-public class TestIFormatProviderClass2 : IFormatProvider
-{
- public object GetFormat(Type formatType)
- {
- return new DateTimeFormatInfo();
- }
-}
-
-/// <summary>
-/// GetInstance(System.IFormatProvider)
-/// </summary>
-public class DateTimeFormatInfoGetInstance
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call GetInstance to get an DateTimeFormatInfo instance when provider is an CultureInfo instance");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.GetInstance(new CultureInfo("en-us"));
-
- if (info == null)
- {
- TestLibrary.TestFramework.LogError("001.1", "Calling GetInstance to get an DateTimeFormatInfo instance when provider is an CultureInfo instance returns null reference");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Call GetInstance to get an DateTimeFormatInfo instance when provider is null reference");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.GetInstance(null);
-
- if (info != DateTimeFormatInfo.CurrentInfo)
- {
- TestLibrary.TestFramework.LogError("002.1", "Calling GetInstance to get an DateTimeFormatInfo instance when provider is null reference does not return CurrentInfo");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Call GetInstance to get an DateTimeFormatInfo instance when provider is a DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.GetInstance(new DateTimeFormatInfo());
-
- if (info == null)
- {
- TestLibrary.TestFramework.LogError("003.1", "Calling GetInstance to get an DateTimeFormatInfo instance when provider is a DateTimeFormatInfo instance returns null reference");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: Call GetInstance to get an DateTimeFormatInfo instance when provider.GetFormat method supports a DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.GetInstance(new TestIFormatProviderClass2());
-
- if (info == null)
- {
- TestLibrary.TestFramework.LogError("004.1", "Calling GetInstance to get an DateTimeFormatInfo instance when provider.GetFormat method supports a DateTimeFormatInfo instance returns null reference");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest5: Call GetInstance to get an DateTimeFormatInfo instance when provider.GetFormat method does not support a DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.GetInstance(new TestIFormatProviderClass());
-
- if (info != DateTimeFormatInfo.CurrentInfo)
- {
- TestLibrary.TestFramework.LogError("005.1", "Calling GetInstance to get an DateTimeFormatInfo instance when provider.GetFormat method does not support a DateTimeFormatInfo instance does not return CurrentInfo");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("005.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoGetInstance test = new DateTimeFormatInfoGetInstance();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoGetInstance");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetmonthname.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetmonthname.cs
deleted file mode 100644
index 5bdf5937c7..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfogetmonthname.cs
+++ /dev/null
@@ -1,277 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// GetMonthName(System.Int32)
-/// </summary>
-public class DateTimeFormatInfoGetMonthName
-{
- #region Private Fields
- private const int c_MIN_MONTH_VALUE = 1;
- private const int c_MAX_MONTH_VALUE = 13;
- #endregion
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call GetAbbreviatedDayName on default invariant DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = CultureInfo.InvariantCulture.DateTimeFormat;
- string[] expected = new string[] {
- "",
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December",
- "",
- };
-
- retVal = VerificationHelper(info, expected, "001.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Call GetAbbreviatedDayName on en-us culture DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = new CultureInfo("en-us").DateTimeFormat;
- string[] expected = new string[] {
- "",
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December",
- "",
- };
-
- retVal = VerificationHelper(info, expected, "002.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Call GetAbbreviatedDayName on fr-FR culture DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = new CultureInfo("fr-FR").DateTimeFormat;
- string[] expected = new string[] {
- "",
- "janvier",
- "f\u00e9vrier",
- "mars",
- "avril",
- "mai",
- "juin",
- "juillet",
- "ao\u00fbt",
- "septembre",
- "octobre",
- "novembre",
- "d\u00e9cembre",
- "",
- };
-
- retVal = VerificationHelper(info, expected, "003.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: Call GetAbbreviatedDayName on DateTimeFormatInfo instance created from ctor");
-
- try
- {
- DateTimeFormatInfo info = new DateTimeFormatInfo();
- string[] expected = new string[] {
- "",
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December",
- "",
- };
-
- retVal = VerificationHelper(info, expected, "004.1") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentOutOfRangeException should be thrown when dayofweek is not a valid System.DayOfWeek value. ");
-
- try
- {
- DateTimeFormatInfo info = new DateTimeFormatInfo();
-
- info.GetMonthName(c_MIN_MONTH_VALUE - 1);
-
- TestLibrary.TestFramework.LogError("101.1", "ArgumentOutOfRangeException is not thrown");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- try
- {
- DateTimeFormatInfo info = new DateTimeFormatInfo();
-
- info.GetMonthName(c_MAX_MONTH_VALUE + 1);
-
- TestLibrary.TestFramework.LogError("101.3", "ArgumentOutOfRangeException is not thrown");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.4", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoGetMonthName test = new DateTimeFormatInfoGetMonthName();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoGetMonthName");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerificationHelper(DateTimeFormatInfo info, string[] expected, string errorno)
- {
- bool retval = true;
-
- for (int i = c_MIN_MONTH_VALUE; i <= c_MAX_MONTH_VALUE; ++i)
- {
- string actual = info.GetMonthName(i);
- if (actual != expected[i])
- {
- TestLibrary.TestFramework.LogError(errorno + "." + i, "GetAbbreviatedDayName returns wrong value");
- TestLibrary.TestFramework.LogInformation("WARNING[LOCAL VARIABLES] i = " + i + ", expected[i] = " + expected[i] + ", actual = " + actual);
- retval = false;
- }
- }
-
- return retval;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoinvariantinfo.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoinvariantinfo.cs
deleted file mode 100644
index f93379c3af..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoinvariantinfo.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// InvariantInfo
-/// </summary>
-public class DateTimeFormatInfoInvariantInfo
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: InvariantInfo should return a read-only DateTimeFormatInfo");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.InvariantInfo;
- if (!info.IsReadOnly)
- {
- TestLibrary.TestFramework.LogError("001.1", "InvariantInfo does not return a read-only DateTimeFormatInfo");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoInvariantInfo test = new DateTimeFormatInfoInvariantInfo();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoInvariantInfo");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoisreadonly.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoisreadonly.cs
deleted file mode 100644
index 082a70ab14..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfoisreadonly.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// IsReadOnly
-/// </summary>
-public class DateTimeFormatInfoIsReadOnly
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: IsReadOnly should return false for DateTimeFormatInfo created from non invariant culture");
-
- try
- {
- DateTimeFormatInfo info = new CultureInfo("en-us").DateTimeFormat;
- if (info.IsReadOnly)
- {
- TestLibrary.TestFramework.LogError("001.1", "IsReadOnly returns true for DateTimeFormatInfo created from non invariant culture");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: IsReadOnly should return true for DateTimeFormatInfo created from invariant culture");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.InvariantInfo;
- if (!info.IsReadOnly)
- {
- TestLibrary.TestFramework.LogError("002.1", "IsReadOnly returns false for DateTimeFormatInfo created from non invariant culture");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: IsReadOnly should return true for DateTimeFormatInfo created by ReadOnly method");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.ReadOnly(new CultureInfo("en-us").DateTimeFormat);
- if (!info.IsReadOnly)
- {
- TestLibrary.TestFramework.LogError("003.1", "IsReadOnly returns false for DateTimeFormatInfo created by ReadOnly method");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoIsReadOnly test = new DateTimeFormatInfoIsReadOnly();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoIsReadOnly");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinforeadonly.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinforeadonly.cs
deleted file mode 100644
index d52985d328..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinforeadonly.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// ReadOnly(System.Globalization.DateTimeFormatInfo)
-/// </summary>
-public class DateTimeFormatInfoReadOnly
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call ReadOnly on a writable DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = new DateTimeFormatInfo();
- DateTimeFormatInfo actual = DateTimeFormatInfo.ReadOnly(info);
-
- if (!actual.IsReadOnly)
- {
- TestLibrary.TestFramework.LogError("001.1", "Calling ReadOnly on a writable DateTimeFormatInfo instance does not make the instance read only");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Call ReadOnly on a read only DateTimeFormatInfo instance");
-
- try
- {
- DateTimeFormatInfo info = DateTimeFormatInfo.InvariantInfo;
- DateTimeFormatInfo actual = DateTimeFormatInfo.ReadOnly(info);
-
- if (!actual.IsReadOnly)
- {
- TestLibrary.TestFramework.LogError("002.1", "Calling ReadOnly on a read only DateTimeFormatInfo instance does not make the instance read only");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentNullException should be thrown when dtfi is a null reference");
-
- try
- {
- DateTimeFormatInfo.ReadOnly(null);
-
- TestLibrary.TestFramework.LogError("101.1", "ArgumentNullException is not thrown when dtfi is a null reference");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoReadOnly test = new DateTimeFormatInfoReadOnly();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoReadOnly");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinforfc1123pattern.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinforfc1123pattern.cs
deleted file mode 100644
index b590b306aa..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinforfc1123pattern.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// RFC1123Pattern
-/// </summary>
-public class DateTimeFormatInfoRFC1123Pattern
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call RFC1123Pattern getter method should return correct value for InvariantInfo");
-
- try
- {
- retVal = VerificationHelper(DateTimeFormatInfo.InvariantInfo, "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", "001.1") && retVal;
- retVal = VerificationHelper(new CultureInfo("en-us").DateTimeFormat, "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", "001.2") && retVal;
- try
- {
- retVal = VerificationHelper(new CultureInfo("ja-jp").DateTimeFormat, "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", "001.3") && retVal;
- }
- catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("East Asian Languages are not installed. Skipping Japanese culture test(s).");
- retVal = retVal && true;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoRFC1123Pattern test = new DateTimeFormatInfoRFC1123Pattern();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoRFC1123Pattern");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerificationHelper(DateTimeFormatInfo info, string expected, string errorno)
- {
- bool retval = true;
-
- string actual = info.RFC1123Pattern;
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError(errorno, "Call RFC1123Pattern returns wrong value");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retval = false;
- }
-
- return retval;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfosortabledatetimepattern.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfosortabledatetimepattern.cs
deleted file mode 100644
index 5595ec0bb9..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfosortabledatetimepattern.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// SortableDateTimePattern
-/// </summary>
-public class DateTimeFormatInfoSortableDateTimePattern
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call SortableDateTimePattern getter method should return correct value for InvariantInfo");
-
- try
- {
- retVal = VerificationHelper(DateTimeFormatInfo.InvariantInfo, "yyyy'-'MM'-'dd'T'HH':'mm':'ss", "001.1") && retVal;
- retVal = VerificationHelper(new CultureInfo("en-us").DateTimeFormat, "yyyy'-'MM'-'dd'T'HH':'mm':'ss", "001.2") && retVal;
- try
- {
- retVal = VerificationHelper(new CultureInfo("ja-JP").DateTimeFormat, "yyyy'-'MM'-'dd'T'HH':'mm':'ss", "001.3") && retVal;
- }
- catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("East Asian Languages are not installed. Skipping Japanese culture test(s).");
- retVal = retVal && true;
- }
- retVal = VerificationHelper(new CultureInfo("fr-fr").DateTimeFormat, "yyyy'-'MM'-'dd'T'HH':'mm':'ss", "001.4") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoSortableDateTimePattern test = new DateTimeFormatInfoSortableDateTimePattern();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoSortableDateTimePattern");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerificationHelper(DateTimeFormatInfo info, string expected, string errorno)
- {
- bool retval = true;
-
- string actual = info.SortableDateTimePattern;
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError(errorno, "Call SortableDateTimePattern returns wrong value");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retval = false;
- }
-
- return retval;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfouniversalsortabledatetimepattern.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfouniversalsortabledatetimepattern.cs
deleted file mode 100644
index 34c348cd6a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimeformatinfo/datetimeformatinfouniversalsortabledatetimepattern.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// UniversalSortableDateTimePattern
-/// </summary>
-public class DateTimeFormatInfoUniversalSortableDateTimePattern
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call UniversalSortableDateTimePattern getter method should return correct value for InvariantInfo");
-
- try
- {
- retVal = VerificationHelper(DateTimeFormatInfo.InvariantInfo, "yyyy'-'MM'-'dd HH':'mm':'ss'Z'", "001.1") && retVal;
- retVal = VerificationHelper(new CultureInfo("en-us").DateTimeFormat, "yyyy'-'MM'-'dd HH':'mm':'ss'Z'", "001.2") && retVal;
- try
- {
- retVal = VerificationHelper(new CultureInfo("ja-jp").DateTimeFormat, "yyyy'-'MM'-'dd HH':'mm':'ss'Z'", "001.3") && retVal;
- } catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("East Asian Languages are not installed. Skipping Japanese culture test(s).");
- retVal = retVal && true;
- }
-
- retVal = VerificationHelper(new CultureInfo("fr-fr").DateTimeFormat, "yyyy'-'MM'-'dd HH':'mm':'ss'Z'", "001.4") && retVal;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.0", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- DateTimeFormatInfoUniversalSortableDateTimePattern test = new DateTimeFormatInfoUniversalSortableDateTimePattern();
-
- TestLibrary.TestFramework.BeginTestCase("DateTimeFormatInfoUniversalSortableDateTimePattern");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- #region Private Methods
- private bool VerificationHelper(DateTimeFormatInfo info, string expected, string errorno)
- {
- bool retval = true;
-
- string actual = info.UniversalSortableDateTimePattern;
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError(errorno, "Call UniversalSortableDateTimePattern returns wrong value");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retval = false;
- }
-
- return retval;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStyleAllowInnerWhite.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStyleAllowInnerWhite.csproj
deleted file mode 100644
index 1225c341db..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStyleAllowInnerWhite.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestyleallowinnerwhite.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAdjustToUniversal.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAdjustToUniversal.csproj
deleted file mode 100644
index 21dc7910ff..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAdjustToUniversal.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestylesadjusttouniversal.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowLeadingWhite.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowLeadingWhite.csproj
deleted file mode 100644
index d089b55476..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowLeadingWhite.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestylesallowleadingwhite.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowTrailingWhite.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowTrailingWhite.csproj
deleted file mode 100644
index 527f8d53a0..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowTrailingWhite.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestylesallowtrailingwhite.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowWhiteSpaces.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowWhiteSpaces.csproj
deleted file mode 100644
index fd2745ef04..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAllowWhiteSpaces.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestylesallowwhitespaces.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAssumeLocal.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAssumeLocal.csproj
deleted file mode 100644
index 7765ed7bac..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAssumeLocal.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestylesassumelocal.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAssumeUniversal.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAssumeUniversal.csproj
deleted file mode 100644
index d9fc1407f2..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesAssumeUniversal.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestylesassumeuniversal.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesNoCurrentDateDefault.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesNoCurrentDateDefault.csproj
deleted file mode 100644
index e8bb7e44b7..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesNoCurrentDateDefault.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestylesnocurrentdatedefault.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesNone.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesNone.csproj
deleted file mode 100644
index de31176a6a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesNone.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestylesnone.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesRoundTripKind.csproj b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesRoundTripKind.csproj
deleted file mode 100644
index c0ccab739e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/DateTimeStylesRoundTripKind.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimestylesroundtripkind.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestyleallowinnerwhite.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestyleallowinnerwhite.cs
deleted file mode 100644
index bf57876930..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestyleallowinnerwhite.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.AllowInnerWhite
-///</summary>
-
-public class DateTimeStylesAllowInnerWhite
-{
-
- public static int Main()
- {
- DateTimeStylesAllowInnerWhite testObj = new DateTimeStylesAllowInnerWhite();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.AllowInnerWhite");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000004;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.AllowInnerWhite");
- try
- {
- actualValue = (UInt64)DateTimeStyles.AllowInnerWhite;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesadjusttouniversal.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesadjusttouniversal.cs
deleted file mode 100644
index e4201821da..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesadjusttouniversal.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.AdjustToUniversal
-///</summary>
-
-public class DateTimeStylesAdjustToUniversal
-{
-
- public static int Main()
- {
- DateTimeStylesAdjustToUniversal testObj = new DateTimeStylesAdjustToUniversal();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.AdjustToUniversal");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000010;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.AdjustToUniversal");
- try
- {
- actualValue = (UInt64)DateTimeStyles.AdjustToUniversal;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowleadingwhite.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowleadingwhite.cs
deleted file mode 100644
index c0623b12fe..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowleadingwhite.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.AllowLeadingWhite
-///</summary>
-
-public class DateTimeStylesAllowLeadingWhite
-{
-
- public static int Main()
- {
- DateTimeStylesAllowLeadingWhite testObj = new DateTimeStylesAllowLeadingWhite();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.AllowLeadingWhite");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000001;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.AllowLeadingWhite");
- try
- {
- actualValue = (UInt64)DateTimeStyles.AllowLeadingWhite;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowtrailingwhite.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowtrailingwhite.cs
deleted file mode 100644
index f2600b0098..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowtrailingwhite.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.AllowTrailingWhite
-///</summary>
-
-public class DateTimeStylesAllowTrailingWhite
-{
-
- public static int Main()
- {
- DateTimeStylesAllowTrailingWhite testObj = new DateTimeStylesAllowTrailingWhite();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.AllowTrailingWhite");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000002;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.AllowTrailingWhite");
- try
- {
- actualValue = (UInt64)DateTimeStyles.AllowTrailingWhite;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowwhitespaces.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowwhitespaces.cs
deleted file mode 100644
index 6abb682e4e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesallowwhitespaces.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.AllowWhiteSpaces
-///</summary>
-
-public class DateTimeStylesAllowWhiteSpaces
-{
-
- public static int Main()
- {
- DateTimeStylesAllowWhiteSpaces testObj = new DateTimeStylesAllowWhiteSpaces();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.AllowWhiteSpaces");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000001 | 0x00000002 | 0x00000004;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.AllowWhiteSpaces");
- try
- {
- actualValue = (UInt64)DateTimeStyles.AllowWhiteSpaces;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesassumelocal.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesassumelocal.cs
deleted file mode 100644
index 85d5ec4d4c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesassumelocal.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.AssumeLocal
-///</summary>
-
-public class DateTimeStylesAssumeLocal
-{
-
- public static int Main()
- {
- DateTimeStylesAssumeLocal testObj = new DateTimeStylesAssumeLocal();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.AssumeLocal");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000020;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.AssumeLocal");
- try
- {
- actualValue = (UInt64)DateTimeStyles.AssumeLocal;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesassumeuniversal.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesassumeuniversal.cs
deleted file mode 100644
index bf4460bd20..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesassumeuniversal.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.AssumeUniversal
-///</summary>
-
-public class DateTimeStylesAssumeUniversal
-{
-
- public static int Main()
- {
- DateTimeStylesAssumeUniversal testObj = new DateTimeStylesAssumeUniversal();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.AssumeUniversal");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000040;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.AssumeUniversal");
- try
- {
- actualValue = (UInt64)DateTimeStyles.AssumeUniversal;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesnocurrentdatedefault.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesnocurrentdatedefault.cs
deleted file mode 100644
index b80b871e45..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesnocurrentdatedefault.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.NoCurrentDateDefault
-///</summary>
-
-public class DateTimeStylesNoCurrentDateDefault
-{
-
- public static int Main()
- {
- DateTimeStylesNoCurrentDateDefault testObj = new DateTimeStylesNoCurrentDateDefault();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.NoCurrentDateDefault");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000008;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.NoCurrentDateDefault");
- try
- {
- actualValue = (UInt64)DateTimeStyles.NoCurrentDateDefault;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesnone.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesnone.cs
deleted file mode 100644
index 300f379e0a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesnone.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.None
-///</summary>
-
-public class DateTimeStylesNone
-{
-
- public static int Main()
- {
- DateTimeStylesNone testObj = new DateTimeStylesNone();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.None");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000000;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.None");
- try
- {
- actualValue = (UInt64)DateTimeStyles.None;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesroundtripkind.cs b/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesroundtripkind.cs
deleted file mode 100644
index 652fa65906..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/datetimestyles/datetimestylesroundtripkind.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-///<summary>
-///System.Globalization.DateTimeStyles.RoundtripKind
-///</summary>
-
-public class DateTimeStylesRoundtripKind
-{
-
- public static int Main()
- {
- DateTimeStylesRoundtripKind testObj = new DateTimeStylesRoundtripKind();
- TestLibrary.TestFramework.BeginTestCase("for property of System.Globalization.DateTimeStyles.RoundtripKind");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
-
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- retVal = PosTest1() && retVal;
- return retVal;
- }
-
-
- #region Test Logic
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- UInt64 expectedValue = 0x00000080;
- UInt64 actualValue;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest1:get DateTimeStyles.RoundtripKind");
- try
- {
- actualValue = (UInt64)DateTimeStyles.RoundtripKind;
-
- if (expectedValue != actualValue)
- {
- TestLibrary.TestFramework.LogError("001", "ExpectedValue(" + expectedValue + ") !=ActualValue(" + actualValue + ")");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
-
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoClone.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoClone.csproj
deleted file mode 100644
index 27641af31b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoClone.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberformatinfoclone.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCtor.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCtor.csproj
deleted file mode 100644
index 1c25e99ceb..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCtor.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberformatinfoctor.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCurrencyDecimalSeparator.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCurrencyDecimalSeparator.csproj
deleted file mode 100644
index 775795eac5..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCurrencyDecimalSeparator.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberformatinfocurrencydecimalseparator.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCurrencyGroupSeparator.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCurrencyGroupSeparator.csproj
deleted file mode 100644
index 9e52b952fb..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoCurrencyGroupSeparator.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberformatinfocurrencygroupseparator.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoGetFormat.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoGetFormat.csproj
deleted file mode 100644
index d5ea727124..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoGetFormat.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberformatinfogetformat.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoGetInstance.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoGetInstance.csproj
deleted file mode 100644
index c686c889b3..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoGetInstance.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberformatinfogetinstance.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoReadOnly.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoReadOnly.csproj
deleted file mode 100644
index 2e54d88df2..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/NumberFormatInfoReadOnly.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberformatinforeadonly.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfoclone.cs b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfoclone.cs
deleted file mode 100644
index d866b7c6b1..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfoclone.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// Clone
-/// </summary>
-
-public class NumberFormatInfoClone
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify method Clone .");
-
- try
- {
- NumberFormatInfo nfi1 = new NumberFormatInfo();
- NumberFormatInfo nfi2 = (NumberFormatInfo)nfi1.Clone();
-
- if (!nfi1.Equals(nfi2) && nfi1.GetHashCode() == nfi2.GetHashCode())
- {
- TestLibrary.TestFramework.LogError("001.1", "Method Clone Err .");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberFormatInfoClone test = new NumberFormatInfoClone();
-
- TestLibrary.TestFramework.BeginTestCase("NumberFormatInfoClone");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfoctor.cs b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfoctor.cs
deleted file mode 100644
index 807163628a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfoctor.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.NumberFormatInfo
-/// </summary>
-
-public class NumberFormatInfoCtor
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify Ctor .");
-
- try
- {
- NumberFormatInfo nfi = new NumberFormatInfo();
-
- if (nfi == null)
- {
- TestLibrary.TestFramework.LogError("001.1", "Failed to instance a NumberFormatInfo type .");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberFormatInfoCtor test = new NumberFormatInfoCtor();
-
- TestLibrary.TestFramework.BeginTestCase("NumberFormatInfoCtor");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfocurrencydecimalseparator.cs b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfocurrencydecimalseparator.cs
deleted file mode 100644
index 716b097c78..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfocurrencydecimalseparator.cs
+++ /dev/null
@@ -1,193 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// CurrencyDecimalSeparator
-/// </summary>
-
-public class NumberFormatInfoCurrencyDecimalSeparator
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify default value of property CurrencyDecimalSeparator .");
-
- try
- {
- NumberFormatInfo nfi = new NumberFormatInfo();
-
- if (nfi.CurrencyDecimalSeparator!=".")
- {
- TestLibrary.TestFramework.LogError("001.1", "Property CurrencyDecimalSeparator Err .");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest2: Verify set value of property CurrencyDecimalSeparator .");
-
- try
- {
- string testStr = "testStr";
- NumberFormatInfo nfi = new NumberFormatInfo();
- nfi.CurrencyDecimalSeparator = testStr;
-
- if (nfi.CurrencyDecimalSeparator != testStr)
- {
- TestLibrary.TestFramework.LogError("002.1", "Property CurrencyDecimalSeparator Err .");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentNullException is not thrown.");
-
- try
- {
- string testStr = null;
- NumberFormatInfo nfi = new NumberFormatInfo();
- nfi.CurrencyDecimalSeparator = testStr;
-
- TestLibrary.TestFramework.LogError("101.1", "ArgumentNullException is not thrown.");
- retVal = false;
- }
- catch (ArgumentNullException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: InvalidOperationException is not thrown.");
-
- try
- {
- string testStr = "testStr";
- NumberFormatInfo nfi = new NumberFormatInfo();
- NumberFormatInfo nfiReadOnly = NumberFormatInfo.ReadOnly(nfi);
- nfiReadOnly.CurrencyDecimalSeparator = testStr;
-
- TestLibrary.TestFramework.LogError("102.1", "InvalidOperationException is not thrown.");
- retVal = false;
- }
- catch (InvalidOperationException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: ArgumentException is not thrown.");
-
- try
- {
- string testStr = "";
- NumberFormatInfo nfi = new NumberFormatInfo();
- NumberFormatInfo nfiReadOnly = NumberFormatInfo.ReadOnly(nfi);
- nfi.CurrencyDecimalSeparator = testStr;
-
- TestLibrary.TestFramework.LogError("103.1", "ArgumentException is not thrown.");
- retVal = false;
- }
- catch (ArgumentException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("103.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberFormatInfoCurrencyDecimalSeparator test = new NumberFormatInfoCurrencyDecimalSeparator();
-
- TestLibrary.TestFramework.BeginTestCase("NumberFormatInfoCurrencyDecimalSeparator");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfocurrencygroupseparator.cs b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfocurrencygroupseparator.cs
deleted file mode 100644
index fe75bc04de..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfocurrencygroupseparator.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// CurrencyGroupSeparator
-/// </summary>
-
-public class NumberFormatInfoCurrencyGroupSeparator
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify default value of property CurrencyGroupSeparator .");
-
- try
- {
- NumberFormatInfo nfi = new NumberFormatInfo();
-
- if (nfi.CurrencyGroupSeparator != ",")
- {
- TestLibrary.TestFramework.LogError("001.1", "Property CurrencyGroupSeparator Err .");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest2: Verify set value of property CurrencyGroupSeparator .");
-
- try
- {
- string testStr = "testStr";
- NumberFormatInfo nfi = new NumberFormatInfo();
- nfi.CurrencyGroupSeparator = testStr;
-
- if (nfi.CurrencyGroupSeparator != testStr)
- {
- TestLibrary.TestFramework.LogError("002.1", "Property CurrencyGroupSeparator Err .");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentNullException is not thrown.");
-
- try
- {
- string testStr = null;
- NumberFormatInfo nfi = new NumberFormatInfo();
- nfi.CurrencyGroupSeparator = testStr;
-
- TestLibrary.TestFramework.LogError("101.1", "ArgumentNullException is not thrown.");
- retVal = false;
- }
- catch (ArgumentNullException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: InvalidOperationException is not thrown.");
-
- try
- {
- string testStr = "testStr";
- NumberFormatInfo nfi = new NumberFormatInfo();
- NumberFormatInfo nfiReadOnly = NumberFormatInfo.ReadOnly(nfi);
- nfiReadOnly.CurrencyGroupSeparator = testStr;
-
- TestLibrary.TestFramework.LogError("102.1", "InvalidOperationException is not thrown.");
- retVal = false;
- }
- catch (InvalidOperationException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberFormatInfoCurrencyGroupSeparator test = new NumberFormatInfoCurrencyGroupSeparator();
-
- TestLibrary.TestFramework.BeginTestCase("NumberFormatInfoCurrencyGroupSeparator");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfogetformat.cs b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfogetformat.cs
deleted file mode 100644
index ee321af124..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfogetformat.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// GetFormat(System.Type)
-/// </summary>
-
-public class NumberFormatInfoGetFormat
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify method GetFormat when arg is a type of NumberFormatInfo .");
-
- try
- {
- NumberFormatInfo nfi = new NumberFormatInfo();
- Type formatType = typeof(NumberFormatInfo);
- object obj = nfi.GetFormat(formatType);
-
- bool testVerify = obj is NumberFormatInfo;
-
- if (testVerify != true)
- {
- TestLibrary.TestFramework.LogError("001.1", "Method GetFormat .");
- retVal = false;
- }
-
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest2: Verify method GetFormat when arg is not a type of NumberFormatInfo .");
-
- try
- {
- NumberFormatInfo nfi = new NumberFormatInfo();
- Type formatType = typeof(object);
-
- if (nfi.GetFormat(formatType) != null)
- {
- TestLibrary.TestFramework.LogError("002.1", "Failed to instance a NumberFormatInfo type .");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberFormatInfoGetFormat test = new NumberFormatInfoGetFormat();
-
- TestLibrary.TestFramework.BeginTestCase("NumberFormatInfoGetFormat");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfogetinstance.cs b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfogetinstance.cs
deleted file mode 100644
index 2de248c6d4..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinfogetinstance.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// GetInstance(System.IFormatProvider)
-/// </summary>
-
-public class NumberFormatInfoGetInstance
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify method GetInstance .");
-
- try
- {
- CultureInfo ci = new CultureInfo("fr-FR");
- NumberFormatInfo nfi = NumberFormatInfo.GetInstance(ci);
-
- if (nfi == null)
- {
- TestLibrary.TestFramework.LogError("001.1", "Method GetInstance Err .");
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberFormatInfoGetInstance test = new NumberFormatInfoGetInstance();
-
- TestLibrary.TestFramework.BeginTestCase("NumberFormatInfoGetInstance");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinforeadonly.cs b/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinforeadonly.cs
deleted file mode 100644
index 51f63c013e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberformatinfo/numberformatinforeadonly.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// ReadOnly(System.Globalization.NumberFormatInfo)
-/// </summary>
-
-public class NumberFormatInfoReadOnly
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify method ReadOnly .");
-
- try
- {
- NumberFormatInfo nfi = new NumberFormatInfo();
- NumberFormatInfo nfiReadOnly = NumberFormatInfo.ReadOnly(nfi);
-
- if (nfiReadOnly.IsReadOnly != true)
- {
- TestLibrary.TestFramework.LogError("001.1", "Method ReadOnly Err .");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: ArgumentNullException is not thrown.");
-
- try
- {
- NumberFormatInfo nfi = null;
- NumberFormatInfo nfiReadOnly = NumberFormatInfo.ReadOnly(nfi);
-
- TestLibrary.TestFramework.LogError("101.1", "ArgumentNullException is not thrown.");
- retVal = false;
- }
- catch (ArgumentNullException) { }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("101.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberFormatInfoReadOnly test = new NumberFormatInfoReadOnly();
-
- TestLibrary.TestFramework.BeginTestCase("NumberFormatInfoReadOnly");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowCurrencySymbol.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowCurrencySymbol.csproj
deleted file mode 100644
index 1079ef3563..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowCurrencySymbol.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowcurrencysymbol.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowDecimalPoint.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowDecimalPoint.csproj
deleted file mode 100644
index 52a9defb6e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowDecimalPoint.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowdecimalpoint.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowExponent.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowExponent.csproj
deleted file mode 100644
index ebcb0a555d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowExponent.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowexponent.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowHexSpecifier.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowHexSpecifier.csproj
deleted file mode 100644
index 012ec8e8af..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowHexSpecifier.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowhexspecifier.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowLeadingSign.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowLeadingSign.csproj
deleted file mode 100644
index 59202092f6..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowLeadingSign.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowleadingsign.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowLeadingWhite.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowLeadingWhite.csproj
deleted file mode 100644
index 11e9d6956a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowLeadingWhite.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowleadingwhite.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowParentheses.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowParentheses.csproj
deleted file mode 100644
index 23f25cef0d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowParentheses.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowparentheses.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowThousands.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowThousands.csproj
deleted file mode 100644
index e3b9323edd..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowThousands.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowthousands.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowTrailingSign.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowTrailingSign.csproj
deleted file mode 100644
index c2707d3dc7..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowTrailingSign.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowtrailingsign.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowTrailingWhite.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowTrailingWhite.csproj
deleted file mode 100644
index 1b4bac079e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAllowTrailingWhite.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesallowtrailingwhite.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAny.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAny.csproj
deleted file mode 100644
index cc74514d8b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesAny.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesany.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesCurrency.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesCurrency.csproj
deleted file mode 100644
index acca22ad3b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesCurrency.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylescurrency.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesFloat.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesFloat.csproj
deleted file mode 100644
index 331c18860d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesFloat.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesfloat.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesHexNumber.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesHexNumber.csproj
deleted file mode 100644
index d5ee79e71d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesHexNumber.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstyleshexnumber.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesInteger.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesInteger.csproj
deleted file mode 100644
index c78a6d0071..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesInteger.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesinteger.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesNone.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesNone.csproj
deleted file mode 100644
index e8ce455b93..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesNone.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesnone.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesNumber.csproj b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesNumber.csproj
deleted file mode 100644
index 0bce942aef..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/NumberStylesNumber.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="numberstylesnumber.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowcurrencysymbol.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowcurrencysymbol.cs
deleted file mode 100644
index b9c3873af7..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowcurrencysymbol.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowCurrencySymbol [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowCurrencySymbol
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowCurrencySymbol .");
-
- try
- {
- int expected = 0x00000100;
- int actual = (int)NumberStyles.AllowCurrencySymbol;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowCurrencySymbol Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowCurrencySymbol test = new NumberStylesAllowCurrencySymbol();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowCurrencySymbol");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowdecimalpoint.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowdecimalpoint.cs
deleted file mode 100644
index 10ee6edb6c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowdecimalpoint.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowDecimalPoint [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowDecimalPoint
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowDecimalPoint .");
-
- try
- {
- int expected = 0x00000020;
- int actual = (int)NumberStyles.AllowDecimalPoint;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowDecimalPoint Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowDecimalPoint test = new NumberStylesAllowDecimalPoint();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowDecimalPoint");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowexponent.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowexponent.cs
deleted file mode 100644
index 26d6b387cc..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowexponent.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowExponent [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowExponent
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowExponent .");
-
- try
- {
- int expected = 0x00000080;
- int actual = (int)NumberStyles.AllowExponent;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowExponent Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowExponent test = new NumberStylesAllowExponent();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowExponent");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowhexspecifier.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowhexspecifier.cs
deleted file mode 100644
index e366e878f7..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowhexspecifier.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowHexSpecifier [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowHexSpecifier
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowHexSpecifier .");
-
- try
- {
- int expected = 0x00000200;
- int actual = (int)NumberStyles.AllowHexSpecifier;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowHexSpecifier Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowHexSpecifier test = new NumberStylesAllowHexSpecifier();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowHexSpecifier");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowleadingsign.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowleadingsign.cs
deleted file mode 100644
index 197173aac5..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowleadingsign.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowLeadingSign [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowLeadingSign
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowLeadingSign .");
-
- try
- {
- int expected = 0x00000004;
- int actual = (int)NumberStyles.AllowLeadingSign;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowLeadingSign Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowLeadingSign test = new NumberStylesAllowLeadingSign();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowLeadingSign");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowleadingwhite.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowleadingwhite.cs
deleted file mode 100644
index 3b9af11a3d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowleadingwhite.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowLeadingWhite [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowLeadingWhite
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowLeadingWhite .");
-
- try
- {
- int expected = 0x00000001;
- int actual = (int)NumberStyles.AllowLeadingWhite;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowLeadingWhite Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowLeadingWhite test = new NumberStylesAllowLeadingWhite();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowLeadingWhite");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowparentheses.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowparentheses.cs
deleted file mode 100644
index 7bbf7ee6bb..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowparentheses.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowParentheses [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowParentheses
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowParentheses .");
-
- try
- {
- int expected = 0x00000010;
- int actual = (int)NumberStyles.AllowParentheses;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowParentheses Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowParentheses test = new NumberStylesAllowParentheses();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowParentheses");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowthousands.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowthousands.cs
deleted file mode 100644
index 8f83b564a4..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowthousands.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowThousands [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowThousands
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowThousands .");
-
- try
- {
- int expected = 0x00000040;
- int actual = (int)NumberStyles.AllowThousands;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowThousands Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowThousands test = new NumberStylesAllowThousands();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowThousands");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowtrailingsign.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowtrailingsign.cs
deleted file mode 100644
index 5153b20fbe..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowtrailingsign.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowTrailingSign [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowTrailingSign
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowTrailingSign .");
-
- try
- {
- int expected = 0x00000008;
- int actual = (int)NumberStyles.AllowTrailingSign;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowTrailingSign Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowTrailingSign test = new NumberStylesAllowTrailingSign();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowTrailingSign");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowtrailingwhite.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowtrailingwhite.cs
deleted file mode 100644
index fda107c24b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesallowtrailingwhite.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// AllowTrailingWhite [v-jianq]
-/// </summary>
-
-public class NumberStylesAllowTrailingWhite
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.AllowTrailingWhite .");
-
- try
- {
- int expected = 0x00000002;
- int actual = (int)NumberStyles.AllowTrailingWhite;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.AllowTrailingWhite Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAllowTrailingWhite test = new NumberStylesAllowTrailingWhite();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAllowTrailingWhite");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesany.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesany.cs
deleted file mode 100644
index 88da563283..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesany.cs
+++ /dev/null
@@ -1,125 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// Any [v-jianq]
-/// </summary>
-
-public class NumberStylesAny
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.Any .");
-
- try
- {
- int AllowLeadingWhite = 0x00000001,
-
- AllowTrailingWhite = 0x00000002,
-
- AllowLeadingSign = 0x00000004,
-
- AllowTrailingSign = 0x00000008,
-
- AllowParentheses = 0x00000010,
-
- AllowDecimalPoint = 0x00000020,
-
- AllowThousands = 0x00000040,
-
- AllowExponent = 0x00000080,
-
- AllowCurrencySymbol = 0x00000100;
-
- int expected = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |
- AllowParentheses | AllowDecimalPoint | AllowThousands | AllowCurrencySymbol | AllowExponent;
-
- int actual = (int)NumberStyles.Any;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.Any Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesAny test = new NumberStylesAny();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesAny");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylescurrency.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylescurrency.cs
deleted file mode 100644
index a7c053c36b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylescurrency.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// Currency
-/// </summary>
-
-public class NumberStylesCurrency
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.Currency .");
-
- try
- {
- int AllowLeadingWhite = 0x00000001,
-
- AllowTrailingWhite = 0x00000002,
-
- AllowLeadingSign = 0x00000004,
-
- AllowTrailingSign = 0x00000008,
-
- AllowParentheses = 0x00000010,
-
- AllowDecimalPoint = 0x00000020,
-
- AllowThousands = 0x00000040,
-
- AllowCurrencySymbol = 0x00000100;
-
-
- int expected = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |
- AllowParentheses | AllowDecimalPoint | AllowThousands | AllowCurrencySymbol;
-
- int actual = (int)NumberStyles.Currency;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.Currency Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesCurrency test = new NumberStylesCurrency();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesCurrency");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesfloat.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesfloat.cs
deleted file mode 100644
index f7520115c1..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesfloat.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// Float
-/// </summary>
-
-public class NumberStylesFloat
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.Float .");
-
- try
- {
- int AllowLeadingWhite = 0x00000001,
-
- AllowTrailingWhite = 0x00000002,
-
- AllowLeadingSign = 0x00000004,
-
- AllowDecimalPoint = 0x00000020,
-
- AllowExponent = 0x00000080;
-
-
- int expected = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign |
- AllowDecimalPoint | AllowExponent;
-
- int actual = (int)NumberStyles.Float;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.Float Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesFloat test = new NumberStylesFloat();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesFloat");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstyleshexnumber.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstyleshexnumber.cs
deleted file mode 100644
index ca400c53cb..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstyleshexnumber.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// HexNumber [v-jianq]
-/// </summary>
-
-public class NumberStylesHexNumber
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.HexNumber .");
-
- try
- {
- int AllowLeadingWhite = 0x00000001,
-
- AllowTrailingWhite = 0x00000002,
-
- AllowHexSpecifier = 0x00000200;
-
- int expected = AllowLeadingWhite | AllowTrailingWhite | AllowHexSpecifier;
-
- int actual = (int)NumberStyles.HexNumber;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.HexNumber Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesHexNumber test = new NumberStylesHexNumber();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesHexNumber");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesinteger.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesinteger.cs
deleted file mode 100644
index 7535463963..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesinteger.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// Integer [v-jianq]
-/// </summary>
-
-public class NumberStylesInteger
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.Integer .");
-
- try
- {
- int AllowLeadingWhite = 0x00000001,
-
- AllowTrailingWhite = 0x00000002,
-
- AllowLeadingSign = 0x00000004;
-
- int expected = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign;
- int actual = (int)NumberStyles.Integer;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.Integer Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesInteger test = new NumberStylesInteger();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesInteger");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesnone.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesnone.cs
deleted file mode 100644
index 87cb5c7481..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesnone.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// None [v-jianq]
-/// </summary>
-
-public class NumberStylesNone
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.None .");
-
- try
- {
- int expected = 0x00000000;
- int actual = (int)NumberStyles.None;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.None Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesNone test = new NumberStylesNone();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesNone");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesnumber.cs b/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesnumber.cs
deleted file mode 100644
index 225d458ec3..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/numberstyles/numberstylesnumber.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// Number [v-jianq]
-/// </summary>
-
-public class NumberStylesNumber
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- //
- // TODO: Add your negative test cases here
- //
- // TestLibrary.TestFramework.LogInformation("[Negative]");
- // retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- // Add your scenario description here
- TestLibrary.TestFramework.BeginScenario("PosTest1: Verify value of NumberStyles.Number .");
-
- try
- {
- int AllowLeadingWhite = 0x00000001,
-
- AllowTrailingWhite = 0x00000002,
-
- AllowLeadingSign = 0x00000004,
-
- AllowTrailingSign = 0x00000008,
-
- AllowDecimalPoint = 0x00000020,
-
- AllowThousands = 0x00000040;
-
- int expected = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |
- AllowDecimalPoint | AllowThousands;
-
-
- int actual = (int)NumberStyles.Number;
-
- if (actual != expected)
- {
- TestLibrary.TestFramework.LogError("001.1", "Value of NumberStyles.Number Err .");
- TestLibrary.TestFramework.LogInformation("WARNING [LOCAL VARIABLE] actual = " + actual + ", expected = " + expected);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- //public bool NegTest1()
- //{
- // bool retVal = true;
-
- // TestLibrary.TestFramework.BeginScenario("NegTest1: ");
-
- // try
- // {
- // //
- // // Add your test logic here
- // //
- // }
- // catch (Exception e)
- // {
- // TestLibrary.TestFramework.LogError("101", "Unexpected exception: " + e);
- // TestLibrary.TestFramework.LogInformation(e.StackTrace);
- // retVal = false;
- // }
-
- // return retVal;
- //}
- #endregion
- #endregion
-
- public static int Main()
- {
- NumberStylesNumber test = new NumberStylesNumber();
-
- TestLibrary.TestFramework.BeginTestCase("NumberStylesNumber");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoEquals.csproj b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoEquals.csproj
deleted file mode 100644
index 857841b57c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoEquals.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="regioninfoequals.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoGetHashCode.csproj b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoGetHashCode.csproj
deleted file mode 100644
index 500f7dbb4d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoGetHashCode.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="regioninfogethashcode.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoISOCurrencySymbol.csproj b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoISOCurrencySymbol.csproj
deleted file mode 100644
index 9c1f5e5957..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoISOCurrencySymbol.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="regioninfoisocurrencysymbol.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoIsMetric.csproj b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoIsMetric.csproj
deleted file mode 100644
index eeef871514..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoIsMetric.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="regioninfoismetric.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoName.csproj b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoName.csproj
deleted file mode 100644
index 19bada9ae4..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoName.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="regioninfoname.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoToString.csproj b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoToString.csproj
deleted file mode 100644
index a0d8a95ab1..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoToString.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="regioninfotostring.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoTwoLetterISORegionName.csproj b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoTwoLetterISORegionName.csproj
deleted file mode 100644
index 4140d72bf3..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/RegionInfoTwoLetterISORegionName.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="regioninfotwoletterisoregionname.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoequals.cs b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoequals.cs
deleted file mode 100644
index df14b135b2..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoequals.cs
+++ /dev/null
@@ -1,133 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// RegionInfo.Equals(Object)
-/// </summary>
-public class RegionInfoEquals
-{
- public static int Main()
- {
- RegionInfoEquals regInfoEquals = new RegionInfoEquals();
- TestLibrary.TestFramework.BeginTestCase("RegionInfoEquals");
- if (regInfoEquals.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- // The RegionInfo constructor will disallow partial names
- retVal = PosTest4() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Compare two RegionInfo object 1");
- try
- {
- RegionInfo regionInfo1 = new RegionInfo("en-US");
- RegionInfo regionInfo2 = new RegionInfo("en-US");
- bool boolVal = regionInfo1.Equals(regionInfo2);
- if (!boolVal)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is true but the ActualResult is " + boolVal.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest2:Compare two RegionInfo object 2");
- try
- {
- RegionInfo regionInfo1 = new RegionInfo("en-US");
- RegionInfo regionInfo2 = new RegionInfo("zh-CN");
- bool boolVal = regionInfo1.Equals(regionInfo2);
- if (boolVal)
- {
- TestLibrary.TestFramework.LogError("003", "the ExpectResult is false but the ActualResult is " + boolVal.ToString());
- retVal = false;
- }
- }
- catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("The East Asian Languages are not installed. Skipping test(s)");
- retVal = true;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest3() // The RegionInfo constructor will disallow partial names
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest3:Compare two RegionInfo object 3");
- try
- {
- RegionInfo regionInfo1 = new RegionInfo("US");
- RegionInfo regionInfo2 = new RegionInfo("en-US");
- bool boolVal = regionInfo1.Equals(regionInfo2);
- if (boolVal)
- {
- TestLibrary.TestFramework.LogError("005", "the ExpectResult is false but the ActualResult is " + boolVal.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest4()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest4:RegionInfo object compared with not RegionInfo object");
- try
- {
- RegionInfo regionInfo1 = new RegionInfo("en-US");
- object objVal = new object();
- bool boolVal = regionInfo1.Equals(objVal);
- if (boolVal)
- {
- TestLibrary.TestFramework.LogError("007", "the ExpectResult is false but the ActualResult is " + boolVal.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfogethashcode.cs b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfogethashcode.cs
deleted file mode 100644
index 119f94b9f1..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfogethashcode.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// RegionInfo.GetHashCode()
-/// </summary>
-public class RegionInfoGetHashCode
-{
- public static int Main()
- {
- RegionInfoGetHashCode regInfoGetHashCode = new RegionInfoGetHashCode();
- TestLibrary.TestFramework.BeginTestCase("RegionInfoGetHashCode");
- if (regInfoGetHashCode.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Get the hash code of the RegionInfo object 1");
- try
- {
- RegionInfo regionInfo = new RegionInfo("zh-CN");
- int hashCode = regionInfo.GetHashCode();
- if (hashCode != regionInfo.Name.GetHashCode())
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is" + regionInfo.Name.GetHashCode() +"but the ActualResult is " + hashCode);
- retVal = false;
- }
- }
- catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("The East Asian Languages are not installed. Skipping test(s)");
- retVal = true;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest2:Get the hash code of the RegionInfo object 2");
- try
- {
- RegionInfo regionInfo = new RegionInfo("en-US");
- int hashCode = regionInfo.GetHashCode();
- if (hashCode != regionInfo.Name.GetHashCode())
- {
- TestLibrary.TestFramework.LogError("003", "the ExpectResult is" + regionInfo.Name.GetHashCode() +"but the ActualResult is " + hashCode);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoismetric.cs b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoismetric.cs
deleted file mode 100644
index b89c74b29e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoismetric.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// RegionInfo.IsMetric
-/// </summary>
-public class RegionInfoIsMetric
-{
- public static int Main()
- {
- RegionInfoIsMetric regInfoIsMetric = new RegionInfoIsMetric();
- TestLibrary.TestFramework.BeginTestCase("RegionInfoIsMetric");
- if (regInfoIsMetric.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the property IsMetric in RegionInfo object 1");
- try
- {
- RegionInfo regionInfo = new RegionInfo("en-US");
- bool boolVal = regionInfo.IsMetric;
- if (boolVal)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is false but the ActualResult is " + boolVal.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest2:Return the property IsMetric in RegionInfo object 2");
- try
- {
- RegionInfo regionInfo = new RegionInfo("zh-CN");
- bool boolVal = regionInfo.IsMetric;
- if (!boolVal)
- {
- TestLibrary.TestFramework.LogError("003", "the ExpectResult is false but the ActualResult is " + boolVal.ToString());
- retVal = false;
- }
- }
- catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("The East Asian Languages are not installed. Skipping test(s)");
- retVal = true;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoisocurrencysymbol.cs b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoisocurrencysymbol.cs
deleted file mode 100644
index 47a7e0d0b2..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoisocurrencysymbol.cs
+++ /dev/null
@@ -1,153 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// RegionInfo.ISOCurrencySymbol [v-minch]
-/// </summary>
-public class RegionInfoISOCurrencySymbol
-{
- public static int Main()
- {
- RegionInfoISOCurrencySymbol regInfoISOCurrencySymbol = new RegionInfoISOCurrencySymbol();
- TestLibrary.TestFramework.BeginTestCase("RegionInfoISOCurrencySymbol");
- if (regInfoISOCurrencySymbol.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the property ISOCurrencySymbol in RegionInfo object 1");
- try
- {
- RegionInfo regionInfo = new RegionInfo("en-US");
- string strISOCurrency = regionInfo.ISOCurrencySymbol;
- if (strISOCurrency != "USD")
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is USD but the ActualResult is (" + strISOCurrency +")");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest2:Return the property ISOCurrencySymbol in RegionInfo object 2");
- try
- {
- RegionInfo regionInfo = new RegionInfo("zh-CN");
- string strISOCurrency = regionInfo.ISOCurrencySymbol;
- if (strISOCurrency != "CNY")
- {
- TestLibrary.TestFramework.LogError("003", "the ExpectResult is CNY but the ActualResult is (" + strISOCurrency +")");
- retVal = false;
- }
- }
- catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("The East Asian Languages are not installed. Skipping test(s)");
- retVal = true;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest3()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest3:Return the property ISOCurrencySymbol in RegionInfo object 3");
- try
- {
- RegionInfo regionInfo = new RegionInfo("de-DE");
- string strISOCurrency = regionInfo.ISOCurrencySymbol;
- // On an older OS which does not have the right uptodate information, we can report DEM as the currency for German
- if (TestLibrary.Utilities.IsVistaOrLater)
- {
- if (strISOCurrency != "EUR")
- {
- TestLibrary.TestFramework.LogError("005", "the ExpectResult is EUR but the ActualResult is (" + strISOCurrency + ")");
- retVal = false;
- }
- }
- else
- {
- if (strISOCurrency != "EUR" && strISOCurrency != "DEM")
- {
- TestLibrary.TestFramework.LogError("005", "the ExpectResult is EUR or DEM but the ActualResult is (" + strISOCurrency + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest4()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest4:Return the property ISOCurrencySymbol in RegionInfo object 4");
- try
- {
- RegionInfo regionInfo = new RegionInfo("it-IT");
- string strISOCurrency = regionInfo.ISOCurrencySymbol;
- // On an older OS which does not have the right uptodate information, we can report ITL as the currency for Italian
- if (TestLibrary.Utilities.IsVistaOrLater)
- {
- if (strISOCurrency != "EUR")
- {
- TestLibrary.TestFramework.LogError("007", "the ExpectResult is EUR but the ActualResult is (" + strISOCurrency + ")");
- retVal = false;
- }
- }
- else
- {
- if (strISOCurrency != "EUR" && strISOCurrency != "ITL")
- {
- TestLibrary.TestFramework.LogError("007", "the ExpectResult is EUR or ITL but the ActualResult is (" + strISOCurrency + ")");
- retVal = false;
- }
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoname.cs b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoname.cs
deleted file mode 100644
index 3b6dfa0c17..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfoname.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// RegionInfo.Name [v-minch]
-/// </summary>
-public class RegionInfoName
-{
- public static int Main()
- {
- RegionInfoName regInfoName = new RegionInfoName();
- TestLibrary.TestFramework.BeginTestCase("RegionInfoName");
- if (regInfoName.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest1() && retVal;
- // The constructor will disallow partial names
- //retVal = PosTest3() && retVal;
- //retVal = PosTest4() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the property Name in RegionInfo object 1");
- try
- {
- RegionInfo regionInfo = new RegionInfo("en-US");
- string strName = regionInfo.Name;
- if (strName != "US")
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is en-US but the ActualResult is " + strName);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest2:Return the property Name in RegionInfo object 2");
- try
- {
- RegionInfo regionInfo = new RegionInfo("zh-CN");
- string strName = regionInfo.Name;
- if (strName != "CN")
- {
- TestLibrary.TestFramework.LogError("003", "the ExpectResult is ZH-CN but the ActualResult is " + strName);
- retVal = false;
- }
- }
- catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("The East Asian Languages are not installed. Skipping test(s)");
- retVal = true;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest3() // The constructor will disallow partial names
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest3:Return the property Name in RegionInfo object 3");
- try
- {
- RegionInfo regionInfo = new RegionInfo("US");
- string strName = regionInfo.Name;
- if (strName != "US")
- {
- TestLibrary.TestFramework.LogError("005", "the ExpectResult is US but the ActualResult is " + strName);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest4() // The constructor will disallow partial names
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest4:Return the property Name in RegionInfo object 4");
- try
- {
- RegionInfo regionInfo = new RegionInfo("CN");
- string strName = regionInfo.Name;
- if (strName != "CN")
- {
- TestLibrary.TestFramework.LogError("007", "the ExpectResult is CN but the ActualResult is " + strName);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfotostring.cs b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfotostring.cs
deleted file mode 100644
index bf3b90d31e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfotostring.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// RegionInfo.ToString()
-/// </summary>
-public class RegionInfoToString
-{
- public static int Main()
- {
- RegionInfoToString regInfoToString = new RegionInfoToString();
- TestLibrary.TestFramework.BeginTestCase("RegionInfoToString");
- if (regInfoToString.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest1() && retVal;
- retVal = PosTest3() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Invoke the method ToString in RegionInfo object 1");
- try
- {
- RegionInfo regionInfo = new RegionInfo("zh-CN");
- string strVal = regionInfo.ToString();
- if (strVal != regionInfo.Name)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is" + regionInfo.Name + "but the ActualResult is" + strVal);
- retVal = false;
- }
- }
- catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("The East Asian Languages are not installed. Skipping test(s)");
- retVal = true;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest2:Invoke the method ToString in RegionInfo object 2");
- try
- {
- RegionInfo regionInfo = new RegionInfo("en-US");
- string strVal = regionInfo.ToString();
- if (strVal != regionInfo.Name)
- {
- TestLibrary.TestFramework.LogError("003", "the ExpectResult is" + regionInfo.Name + "but the ActualResult is" + strVal);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest3()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest3:Invoke the method ToString in RegionInfo object 3");
- try
- {
- RegionInfo regionInfo = new RegionInfo("en-IE");
- string strVal = regionInfo.ToString();
- if (strVal != regionInfo.Name)
- {
- TestLibrary.TestFramework.LogError("005", "the ExpectResult is" + regionInfo.Name + "but the ActualResult is" + strVal);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfotwoletterisoregionname.cs b/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfotwoletterisoregionname.cs
deleted file mode 100644
index bec7ad3814..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/regioninfo/regioninfotwoletterisoregionname.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// RegionInfo.TwoLetterISORegionName [v-minch]
-/// </summary>
-public class RegionInfoTwoLetterISORegionName
-{
- public static int Main()
- {
- RegionInfoTwoLetterISORegionName regInfoTwoLetterISOName = new RegionInfoTwoLetterISORegionName();
- TestLibrary.TestFramework.BeginTestCase("RegionInfoTwoLetterISORegionName");
- if (regInfoTwoLetterISOName.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the property TwoLetterISORegionName in RegionInfo object 1");
- try
- {
- RegionInfo regionInfo = new RegionInfo("en-US");
- string strTwoLetterName = regionInfo.TwoLetterISORegionName;
- if (strTwoLetterName != "US")
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is US but the ActualResult is " + strTwoLetterName);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest2:Return the property TwoLetterISORegionName in RegionInfo object 2");
- try
- {
- RegionInfo regionInfo = new RegionInfo("zh-CN");
- string strTwoLetterName = regionInfo.TwoLetterISORegionName;
- if (strTwoLetterName != "CN")
- {
- TestLibrary.TestFramework.LogError("003", "the ExpectResult is CN but the ActualResult is " + strTwoLetterName);
- retVal = false;
- }
- }
- catch (ArgumentException)
- {
- TestLibrary.TestFramework.LogInformation("The East Asian Languages are not installed. Skipping test(s)");
- retVal = true;
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest3()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest3:Return the property TwoLetterISORegionName in RegionInfo object 3");
- try
- {
- RegionInfo regionInfo = new RegionInfo("de-DE");
- string strTwoLetterName = regionInfo.TwoLetterISORegionName;
- if (strTwoLetterName != "DE")
- {
- TestLibrary.TestFramework.LogError("005", "the ExpectResult is DE but the ActualResult is " + strTwoLetterName);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest4()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest4:Return the property TwoLetterISORegionName in RegionInfo object 4");
- try
- {
- RegionInfo regionInfo = new RegionInfo("it-IT");
- string strTwoLetterName = regionInfo.TwoLetterISORegionName;
- if (strTwoLetterName != "IT")
- {
- TestLibrary.TestFramework.LogError("007", "the ExpectResult is IT but the ActualResult is " + strTwoLetterName);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoCtor1.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoCtor1.csproj
deleted file mode 100644
index 153e433336..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoCtor1.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfoctor1.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoCtor2.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoCtor2.csproj
deleted file mode 100644
index b32d70506b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoCtor2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfoctor2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoEquals.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoEquals.csproj
deleted file mode 100644
index 43d549dc8a..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoEquals.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfoequals.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetHashCode.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetHashCode.csproj
deleted file mode 100644
index 2b1ea4a0ff..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetHashCode.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfogethashcode.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetNextTextElement2.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetNextTextElement2.csproj
deleted file mode 100644
index 7e190a857e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetNextTextElement2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfogetnexttextelement2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetTextElementEnumerator1.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetTextElementEnumerator1.csproj
deleted file mode 100644
index f3dbb3dc33..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetTextElementEnumerator1.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfogettextelementenumerator1.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetTextElementEnumerator2.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetTextElementEnumerator2.csproj
deleted file mode 100644
index 62fbca43ea..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoGetTextElementEnumerator2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfogettextelementenumerator2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoLengthInTextElements.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoLengthInTextElements.csproj
deleted file mode 100644
index 5fb5e06563..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoLengthInTextElements.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfolengthintextelements.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoParseCombiningCharacters.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoParseCombiningCharacters.csproj
deleted file mode 100644
index 7d30397972..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoParseCombiningCharacters.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfoparsecombiningcharacters.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoString.csproj b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoString.csproj
deleted file mode 100644
index 494784f20e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/StringInfoString.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="stringinfostring.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoctor1.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoctor1.cs
deleted file mode 100644
index edd16c04d9..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoctor1.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.Ctor
-/// </summary>
-public class StringInfoCtor1
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call constructor to create an instance");
-
- try
- {
- StringInfo stringInfo = new StringInfo();
- if (stringInfo == null)
- {
- TestLibrary.TestFramework.LogError("001", "The constructor does not create a new instance");
- retVal = false;
- }
- if (stringInfo.String != string.Empty)
- {
- TestLibrary.TestFramework.LogError("002", "The constructor does not work correctly");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoCtor1 test = new StringInfoCtor1();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoCtor1");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoctor2.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoctor2.cs
deleted file mode 100644
index 09a1344117..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoctor2.cs
+++ /dev/null
@@ -1,171 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.Ctor(System.String)
-/// </summary>
-public class StringInfoCtor2
-{
- private const int c_MINI_STRING_LENGTH = 8;
- private const int c_MAX_STRING_LENGTH = 256;
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Call constructor to create an instance with a random string argument");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, false, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- StringInfo stringInfo = new StringInfo(str);
- if (stringInfo == null)
- {
- TestLibrary.TestFramework.LogError("001", "The constructor does not create a new instance");
- retVal = false;
- }
- if (stringInfo.String != str)
- {
- TestLibrary.TestFramework.LogError("002", "The constructor does not work correctly,the str is: " + str);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("003", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Call constructor to create an instance with an empty string argument");
-
- try
- {
- string str = string.Empty;
- StringInfo stringInfo = new StringInfo(str);
- if (stringInfo == null)
- {
- TestLibrary.TestFramework.LogError("004", "The constructor does not create a new instance");
- retVal = false;
- }
- if (stringInfo.String != string.Empty)
- {
- TestLibrary.TestFramework.LogError("005", "The constructor does not work correctly,the str is: " + str);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Call constructor to create an instance with a string of white space");
-
- try
- {
- string str = " ";
- StringInfo stringInfo = new StringInfo(str);
- if (stringInfo == null)
- {
- TestLibrary.TestFramework.LogError("007", "The constructor does not create a new instance");
- retVal = false;
- }
- if (stringInfo.String != " ")
- {
- TestLibrary.TestFramework.LogError("008", "The constructor does not work correctly,the str is: " + str);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("009", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: The string is a null reference");
-
- try
- {
- string str = null;
- StringInfo stringInfo = new StringInfo(str);
- TestLibrary.TestFramework.LogError("101", "The ArgumentNullException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoCtor2 test = new StringInfoCtor2();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoCtor2");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoequals.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoequals.cs
deleted file mode 100644
index 4866c64f17..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoequals.cs
+++ /dev/null
@@ -1,235 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.Equals(Object)
-/// </summary>
-public class StringInfoEquals
-{
- private const int c_MINI_STRING_LENGTH = 8;
- private const int c_MAX_STRING_LENGTH = 256;
-
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
- retVal = PosTest7() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Compare two equal StringInfo");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, false, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- StringInfo stringInfo1 = new StringInfo(str);
- StringInfo stringInfo2 = new StringInfo(str);
- if (!stringInfo1.Equals(stringInfo2))
- {
- TestLibrary.TestFramework.LogError("001", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: The two stringinfos reference to one object ");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, false, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- StringInfo stringInfo1 = new StringInfo(str);
- StringInfo stringInfo2 = stringInfo1;
- if (!stringInfo1.Equals(stringInfo2))
- {
- TestLibrary.TestFramework.LogError("003", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Using default constructor to create two equal instance");
-
- try
- {
- StringInfo stringInfo1 = new StringInfo();
- StringInfo stringInfo2 = new StringInfo();
- if (!stringInfo1.Equals(stringInfo2))
- {
- TestLibrary.TestFramework.LogError("005", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: Compare two instance with different string value");
-
- try
- {
- StringInfo stringInfo1 = new StringInfo("stringinfo1");
- StringInfo stringInfo2 = new StringInfo("stringinfo2");
- if (stringInfo1.Equals(stringInfo2))
- {
- TestLibrary.TestFramework.LogError("007", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest5: Compare with a different kind of type");
-
- try
- {
- StringInfo stringInfo1 = new StringInfo("stringinfo1");
- string str = "stringinfo1";
- if (stringInfo1.Equals(str))
- {
- TestLibrary.TestFramework.LogError("009", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest6()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest6: The argument is a null reference");
-
- try
- {
- StringInfo stringInfo1 = new StringInfo("stringinfo1");
- object ob = null;
- if (stringInfo1.Equals(ob))
- {
- TestLibrary.TestFramework.LogError("011", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest7()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest7: The argument is value type");
-
- try
- {
- StringInfo stringInfo1 = new StringInfo("123");
- int i = 123;
- if (stringInfo1.Equals(i))
- {
- TestLibrary.TestFramework.LogError("013", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("014", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoEquals test = new StringInfoEquals();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoEquals");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogethashcode.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogethashcode.cs
deleted file mode 100644
index 89b7bb45cc..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogethashcode.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.GetHashCode()
-/// </summary>
-public class StringInfoGetHashCode
-{
- private const int c_MINI_STRING_LENGTH = 8;
- private const int c_MAX_STRING_LENGTH = 256;
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: The two instances created by the same argument return the same hashcode");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, false, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- StringInfo stringInfo1 = new StringInfo(str);
- StringInfo stringInfo2 = new StringInfo(str);
- if (stringInfo1.GetHashCode() != stringInfo2.GetHashCode())
- {
- TestLibrary.TestFramework.LogError("001", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: Check two different instance");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, false, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- StringInfo stringInfo1 = new StringInfo(str);
- StringInfo stringInfo2 = new StringInfo("");
- if (stringInfo1.GetHashCode() == stringInfo2.GetHashCode())
- {
- TestLibrary.TestFramework.LogError("003", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoGetHashCode test = new StringInfoGetHashCode();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoGetHashCode");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogetnexttextelement2.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogetnexttextelement2.cs
deleted file mode 100644
index 7f323d0707..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogetnexttextelement2.cs
+++ /dev/null
@@ -1,267 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.GetNextTestElement(string,int32)
-/// </summary>
-public class StringInfoGetNextTextElement2
-{
- private const int c_MINI_STRING_LENGTH = 8;
- private const int c_MAX_STRING_LENGTH = 256;
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: Get the text element from a random index in a string");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, true, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- int index = this.GetInt32(8, str.Length);
- string result = StringInfo.GetNextTextElement(str, index);
- if (result != str[index].ToString())
- {
- TestLibrary.TestFramework.LogError("001", "The result is not the value as expected,the result is: " + result);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: The first element is a surrogate pair");
-
- try
- {
- string str = "\uDBFF\uDFFF";
- string result = StringInfo.GetNextTextElement("ef45-;\uDBFF\uDFFFabcde", 6);
- if (result.Length != 2)
- {
- TestLibrary.TestFramework.LogError("003", "The result is not the value as expected");
- retVal = false;
- }
- if (result != str)
- {
- TestLibrary.TestFramework.LogError("004", "The result is not the value as expected,the result is: " + result);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("005", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: The element is a combining character");
-
- try
- {
- string str = "a\u20D1";
- string result = StringInfo.GetNextTextElement("13229^a\u20D1abcde", 6);
- if (result != str)
- {
- TestLibrary.TestFramework.LogError("006", "The result is not the value as expected,the result is: " + result);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("007", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: The element is a combination of base character and several combining characters");
-
- try
- {
- string str = "z\uFE22\u20D1\u20EB";
- string result = StringInfo.GetNextTextElement("az\uFE22\u20D1\u20EBabcde", 1);
- if (result.Length != 4)
- {
- TestLibrary.TestFramework.LogError("008", "The result is not the value as expected,length is: " + result.Length);
- retVal = false;
- }
- if (result != str)
- {
- TestLibrary.TestFramework.LogError("009", "The result is not the value as expected,the result is: " + result);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: The string is a null reference");
-
- try
- {
- string str = null;
- string result = StringInfo.GetNextTextElement(str, 0);
- TestLibrary.TestFramework.LogError("101", "The ArgumentNullException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: The index is out of the range of the string");
-
- try
- {
- string str = "abc";
- string result = StringInfo.GetNextTextElement(str, -4);
- TestLibrary.TestFramework.LogError("103", "The ArgumentOutOfRangeException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("104", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: The index is a negative number");
-
- try
- {
- string str = "df8%^dk";
- string result = StringInfo.GetNextTextElement(str, -1);
- TestLibrary.TestFramework.LogError("105", "The ArgumentOutOfRangeException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("106", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoGetNextTextElement2 test = new StringInfoGetNextTextElement2();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoGetNextTextElement2");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- private Int32 GetInt32(Int32 minValue, Int32 maxValue)
- {
- try
- {
- if (minValue == maxValue)
- {
- return minValue;
- }
- if (minValue < maxValue)
- {
- return minValue + TestLibrary.Generator.GetInt32(-55) % (maxValue - minValue);
- }
- }
- catch
- {
- throw;
- }
-
- return minValue;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogettextelementenumerator1.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogettextelementenumerator1.cs
deleted file mode 100644
index 5b7fe1c42c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogettextelementenumerator1.cs
+++ /dev/null
@@ -1,185 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.GetTestElementEnumerator(string)
-/// </summary>
-public class StringInfoGetTextElementEnumerator1
-{
- private const int c_MINI_STRING_LENGTH = 8;
- private const int c_MAX_STRING_LENGTH = 256;
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: The argument is a random string");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, true, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator(str);
- int len = str.Length;
- TextElementEnumerator.MoveNext();
- for (int i = 0; i < len; i++)
- {
- if (TextElementEnumerator.Current.ToString() != str[i].ToString())
- {
- TestLibrary.TestFramework.LogError("001", "The result is not the value as expected,the str[i] is: " + str[i]);
- retVal = false;
- }
- TextElementEnumerator.MoveNext();
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: The string has a surrogate pair");
-
- try
- {
- string str = "\uDBFF\uDFFF";
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator("s\uDBFF\uDFFF$");
- TextElementEnumerator.MoveNext();
- if (TextElementEnumerator.Current.ToString() != "s")
- {
- TestLibrary.TestFramework.LogError("003", "The result is not the value as expected");
- retVal = false;
- }
- TextElementEnumerator.MoveNext();
- if (TextElementEnumerator.Current.ToString() != str)
- {
- TestLibrary.TestFramework.LogError("004", "The result is not the value as expected,the current is: " + TextElementEnumerator.Current.ToString());
- retVal = false;
- }
- TextElementEnumerator.MoveNext();
- if (TextElementEnumerator.Current.ToString() != "$")
- {
- TestLibrary.TestFramework.LogError("005", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: The string has a combining character");
-
- try
- {
- string str = "a\u20D1";
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator("13229^a\u20D1a");
- for (int i = 0; i < 7; i++)
- {
- TextElementEnumerator.MoveNext();
- }
- if (TextElementEnumerator.Current.ToString() != str)
- {
- TestLibrary.TestFramework.LogError("007", "The result is not the value as expected,the current is: " + TextElementEnumerator.Current.ToString());
- retVal = false;
- }
- TextElementEnumerator.MoveNext();
- if (TextElementEnumerator.MoveNext())
- {
- TestLibrary.TestFramework.LogError("008", "The result is not the value as expected,the current is: " + TextElementEnumerator.Current.ToString());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("009", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: The string is a null reference");
-
- try
- {
- string str = null;
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator(str);
- TestLibrary.TestFramework.LogError("101", "The ArgumentNullException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoGetTextElementEnumerator1 test = new StringInfoGetTextElementEnumerator1();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoGetTextElementEnumerator1");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogettextelementenumerator2.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogettextelementenumerator2.cs
deleted file mode 100644
index aeb9a27c44..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfogettextelementenumerator2.cs
+++ /dev/null
@@ -1,257 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.GetTestElementEnumerator(string,Int32)
-/// </summary>
-public class StringInfoGetTextElementEnumerator2
-{
- private const int c_MINI_STRING_LENGTH = 8;
- private const int c_MAX_STRING_LENGTH = 256;
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
- retVal = NegTest3() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: The argument is a random string,and start at a random index");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, true, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- int len = str.Length;
- int index = this.GetInt32(8, len);
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator(str, index);
- TextElementEnumerator.MoveNext();
- for (int i = 0; i < len - index; i++)
- {
- if (TextElementEnumerator.Current.ToString() != str[i + index].ToString())
- {
- TestLibrary.TestFramework.LogError("001", "The result is not the value as expected,the str is: " + str[i + index]);
- retVal = false;
- }
- TextElementEnumerator.MoveNext();
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: The string has a surrogate pair");
-
- try
- {
- string str = "\uDBFF\uDFFF";
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator("s\uDBFF\uDFFF$", 1);
- TextElementEnumerator.MoveNext();
- if (TextElementEnumerator.Current.ToString() != str)
- {
- TestLibrary.TestFramework.LogError("003", "The result is not the value as expected,the current is: " + TextElementEnumerator.Current.ToString());
- retVal = false;
- }
- TextElementEnumerator.MoveNext();
- if (TextElementEnumerator.Current.ToString() != "$")
- {
- TestLibrary.TestFramework.LogError("004", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("005", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: The string has a combining character");
-
- try
- {
- string str = "a\u20D1";
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator("13229^a\u20D1a", 6);
- TextElementEnumerator.MoveNext();
- if (TextElementEnumerator.Current.ToString() != str)
- {
- TestLibrary.TestFramework.LogError("006", "The result is not the value as expected,the current is: " + TextElementEnumerator.Current.ToString());
- retVal = false;
- }
- TextElementEnumerator.MoveNext();
- if (TextElementEnumerator.Current.ToString() != "a")
- {
- TestLibrary.TestFramework.LogError("007", "The result is not the value as expected,the current is: " + TextElementEnumerator.Current.ToString());
- retVal = false;
- }
- if (TextElementEnumerator.MoveNext())
- {
- TestLibrary.TestFramework.LogError("008", "The result is not the value as expected,the current is: " + TextElementEnumerator.Current.ToString());
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("009", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: The string is a null reference");
-
- try
- {
- string str = null;
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator(str, 0);
- TestLibrary.TestFramework.LogError("101", "The ArgumentNullException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest2: The index is out of the range of the string");
-
- try
- {
- string str = "dur8&p!";
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator(str, 10);
- TestLibrary.TestFramework.LogError("103", "The ArgumentOutOfRangeException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("104", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest3: The index is a negative number");
-
- try
- {
- string str = "dur8&p!";
- TextElementEnumerator TextElementEnumerator = StringInfo.GetTextElementEnumerator(str, -10);
- TestLibrary.TestFramework.LogError("105", "The ArgumentOutOfRangeException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("106", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoGetTextElementEnumerator2 test = new StringInfoGetTextElementEnumerator2();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoGetTextElementEnumerator2");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- private Int32 GetInt32(Int32 minValue, Int32 maxValue)
- {
- try
- {
- if (minValue == maxValue)
- {
- return minValue;
- }
- if (minValue < maxValue)
- {
- return minValue + TestLibrary.Generator.GetInt32(-55) % (maxValue - minValue);
- }
- }
- catch
- {
- throw;
- }
-
- return minValue;
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfolengthintextelements.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfolengthintextelements.cs
deleted file mode 100644
index 95e298787f..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfolengthintextelements.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.LengthInTextElements
-/// </summary>
-public class StringInfoLengthInTextElements
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: The mothod should return the number of base character in the current stringInfo object");
-
- try
- {
- retVal = VerificationHelper("\u4f00\u302a\ud800\udc00\u4f01", 3, "001.1");
- retVal = VerificationHelper("abcdefgh", 8, "001.2");
- retVal = VerificationHelper("zj\uDBFF\uDFFFlk", 5, "001.3");
- retVal = VerificationHelper("!@#$%^&", 7, "001.4");
- retVal = VerificationHelper("!\u20D1bo\uFE22\u20D1\u20EB|", 4, "001.5");
- retVal = VerificationHelper("1\uDBFF\uDFFF@\uFE22\u20D1\u20EB9", 4, "001.6");
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: The string in stringinfo is white space or empty string");
-
- try
- {
- retVal = VerificationHelper(" ", 3, "001.1");
- retVal = VerificationHelper(string.Empty, 0, "001.2");
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoLengthInTextElements test = new StringInfoLengthInTextElements();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoLengthInTextElements");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- #region Private Methods
- private bool VerificationHelper(string str, int expected, string errorno)
- {
- bool retVal = true;
-
- StringInfo stringInfo = new StringInfo(str);
- int result = stringInfo.LengthInTextElements;
- if (result != expected)
- {
- TestLibrary.TestFramework.LogError(errorno, "The result is not the value as expected,The actual is: " + result + ", the desire is: " + expected);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoparsecombiningcharacters.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoparsecombiningcharacters.cs
deleted file mode 100644
index 9fbbe76037..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfoparsecombiningcharacters.cs
+++ /dev/null
@@ -1,166 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.ParseCombiningCharacters(System.String)
-/// </summary>
-public class StringInfoParseCombiningCharacters
-{
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: The mothod should return the indexes of each base character");
-
- try
- {
- retVal = VerificationHelper("\u4f00\u302a\ud800\udc00\u4f01", new int[] { 0, 2, 4 }, "001.1");
- retVal = VerificationHelper("abcdefgh", new int[] { 0, 1, 2, 3, 4, 5, 6, 7 }, "001.2");
- retVal = VerificationHelper("zj\uDBFF\uDFFFlk", new int[] { 0, 1, 2, 4, 5 }, "001.3");
- retVal = VerificationHelper("!@#$%^&", new int[] { 0, 1, 2, 3, 4, 5, 6 }, "001.4");
- retVal = VerificationHelper("!\u20D1bo\uFE22\u20D1\u20EB|", new int[] { 0, 2, 3, 7 }, "001.5");
- retVal = VerificationHelper("1\uDBFF\uDFFF@\uFE22\u20D1\u20EB9", new int[] { 0, 1, 3, 7 }, "001.6");
- retVal = VerificationHelper(" ", new int[] { 0, 1, 2 }, "001.7");
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: The argument string is an empty string");
-
- try
- {
- int[] result = StringInfo.ParseCombiningCharacters(string.Empty);
- if (result == null)
- {
- TestLibrary.TestFramework.LogError("003", "The result is not the value as expected");
- retVal = false;
- }
- if (result.Length != 0)
- {
- TestLibrary.TestFramework.LogError("004", "The result is not the value as expected");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("005", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: The argument string is a null reference");
-
- try
- {
- string str = null;
- int[] result = StringInfo.ParseCombiningCharacters(str);
- TestLibrary.TestFramework.LogError("101", "The ArgumentNullException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoParseCombiningCharacters test = new StringInfoParseCombiningCharacters();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoParseCombiningCharacters");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- #region Private Methods
- private bool VerificationHelper(string str, int[] expected, string errorno)
- {
- bool retVal = true;
-
- int[] result = StringInfo.ParseCombiningCharacters(str);
-
- if (!compare<int>(result, expected))
- {
- TestLibrary.TestFramework.LogError(errorno, "The result is not the value as expected");
- retVal = false;
- }
-
- return retVal;
- }
-
- private bool compare<T>(T[] a, T[] b)
- {
- if (a.Length != b.Length)
- {
- return false;
- }
- else
- {
- for (int i = 0; i < a.Length; i++)
- {
- if (!a[i].Equals(b[i]))
- {
- return false;
- }
- }
- return true;
- }
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfostring.cs b/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfostring.cs
deleted file mode 100644
index 0656a630ad..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/stringinfo/stringinfostring.cs
+++ /dev/null
@@ -1,184 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.StringInfo.string
-/// </summary>
-public class StringInfoString
-{
- private const int c_MINI_STRING_LENGTH = 8;
- private const int c_MAX_STRING_LENGTH = 256;
-
- #region Public Methods
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- #region Positive Test Cases
- public bool PosTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: The string property in stringinfo object is a random string argument");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, false, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- StringInfo stringInfo = new StringInfo(str);
- if (stringInfo.String != str)
- {
- TestLibrary.TestFramework.LogError("001", "The constructor does not work correctly,the str is: " + str);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: The string property in stringinfo object is an empty string argument");
-
- try
- {
- string str = string.Empty;
- StringInfo stringInfo = new StringInfo(str);
- if (stringInfo.String != string.Empty)
- {
- TestLibrary.TestFramework.LogError("003", "The constructor does not work correctly,the str is: " + str);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: Check an instance with a string of white space");
-
- try
- {
- string str = " ";
- StringInfo stringInfo = new StringInfo(str);
- if (stringInfo.String != " ")
- {
- TestLibrary.TestFramework.LogError("005", "The constructor does not work correctly,the str is: " + str);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("PosTest4: Set the property with a random string value");
-
- try
- {
- string str = TestLibrary.Generator.GetString(-55, false, c_MINI_STRING_LENGTH, c_MAX_STRING_LENGTH);
- StringInfo stringInfo = new StringInfo();
- stringInfo.String = str;
- if (stringInfo.String != str)
- {
- TestLibrary.TestFramework.LogError("007", "The constructor does not work correctly,the str is: " + str);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008", "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Nagetive Test Cases
- public bool NegTest1()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.BeginScenario("NegTest1: The property was set with a value of null");
-
- try
- {
- string str = null;
- StringInfo stringInfo = new StringInfo();
- stringInfo.String = str;
- TestLibrary.TestFramework.LogError("101", "The ArgumentNullException was not thrown as expected");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("102", "Unexpected exception: " + e);
- TestLibrary.TestFramework.LogInformation(e.StackTrace);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
- #endregion
-
- public static int Main()
- {
- StringInfoString test = new StringInfoString();
-
- TestLibrary.TestFramework.BeginTestCase("StringInfoString");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorCurrent.csproj b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorCurrent.csproj
deleted file mode 100644
index 293566ca05..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorCurrent.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textelementenumeratorcurrent.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorElementIndex.csproj b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorElementIndex.csproj
deleted file mode 100644
index 289f05c338..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorElementIndex.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textelementenumeratorelementindex.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorGetTextElement.csproj b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorGetTextElement.csproj
deleted file mode 100644
index c43bec8922..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorGetTextElement.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textelementenumeratorgettextelement.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorMoveNext.csproj b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorMoveNext.csproj
deleted file mode 100644
index fbc809baef..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorMoveNext.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textelementenumeratormovenext.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorReset.csproj b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorReset.csproj
deleted file mode 100644
index e2089806ec..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/TextElementEnumeratorReset.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textelementenumeratorreset.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorcurrent.cs b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorcurrent.cs
deleted file mode 100644
index 7369ef772f..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorcurrent.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorelementindex.cs b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorelementindex.cs
deleted file mode 100644
index 6a9c144556..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorelementindex.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorgettextelement.cs b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorgettextelement.cs
deleted file mode 100644
index a0c6caa59e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorgettextelement.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratormovenext.cs b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratormovenext.cs
deleted file mode 100644
index adcefaefd9..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratormovenext.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorreset.cs b/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorreset.cs
deleted file mode 100644
index 0f847678fa..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textelementenumerator/textelementenumeratorreset.cs
+++ /dev/null
Binary files differ
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoCultureName.csproj b/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoCultureName.csproj
deleted file mode 100644
index 490e931df9..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoCultureName.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textinfoculturename.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoEquals.csproj b/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoEquals.csproj
deleted file mode 100644
index b3785d2b9c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoEquals.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textinfoequals.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoGetHashCode.csproj b/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoGetHashCode.csproj
deleted file mode 100644
index f3df729358..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoGetHashCode.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textinfogethashcode.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoIsReadOnly.csproj b/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoIsReadOnly.csproj
deleted file mode 100644
index 23de89ae51..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoIsReadOnly.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textinfoisreadonly.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToString.csproj b/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToString.csproj
deleted file mode 100644
index 90dc881304..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToString.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textinfotostring.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToUpper1.csproj b/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToUpper1.csproj
deleted file mode 100644
index a1ab434288..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToUpper1.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textinfotoupper1.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToUpper2.csproj b/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToUpper2.csproj
deleted file mode 100644
index 2ba47808f6..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/TextInfoToUpper2.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="textinfotoupper2.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoculturename.cs b/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoculturename.cs
deleted file mode 100644
index 7d094f80a4..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoculturename.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.TextInfo.CultureName
-/// </summary>
-public class TextInfoCultureName
-{
- public static int Main()
- {
- TextInfoCultureName testObj = new TextInfoCultureName();
- TestLibrary.TestFramework.BeginTestCase("for Property:System.Globalization.TextInfo.CultureInfo");
-
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- #region PositiveTesting
- public bool PosTest1()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest1: Verify the en-US TextInfo";
- const string c_TEST_ID = "P001";
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- CultureInfo ci = new CultureInfo("en-US");
- TextInfo textInfoUS = ci.TextInfo;
- String cultureName = ci.Name;
- try
- {
-
- if (cultureName != textInfoUS.CultureName)
- {
- string errorDesc = "Value is not " + cultureName + " as expected: Actual(" + textInfoUS.CultureName + ")";
- TestLibrary.TestFramework.LogError("001" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest2: Verify the fr-FR CultureInfo's TextInfo";
- const string c_TEST_ID = "P002";
-
-
- CultureInfo ci = new CultureInfo("fr-FR");
- TextInfo textInfoFrance = ci.TextInfo;
- String cultureName = ci.Name;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- if (cultureName != textInfoFrance.CultureName)
- {
- string errorDesc = "Value is not " + cultureName + " as expected: Actual(" + textInfoFrance.CultureName + ")";
- TestLibrary.TestFramework.LogError("003" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoequals.cs b/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoequals.cs
deleted file mode 100644
index ca7dae7f7f..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoequals.cs
+++ /dev/null
@@ -1,243 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.TextInfo.Equals(Object)
-/// </summary>
-public class TextInfoEquals
-{
-
- private int c_MINI_STRING_LENGTH = 8;
- private int c_MAX_STRING_LENGTH = 256;
-
- public static int Main()
- {
- TextInfoEquals testObj = new TextInfoEquals();
- TestLibrary.TestFramework.BeginTestCase("for Method:System.Globalization.TextInfo.Equals(Object)");
-
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
-
- return retVal;
- }
-
- #region PositiveTesting
- public bool PosTest1()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest1: Verify same culture TextInfo equals original TextInfo. ";
- const string c_TEST_ID = "P001";
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- CultureInfo ci = new CultureInfo("en-US");
- CultureInfo ci2 = new CultureInfo("en-US");
- object textInfo = ci2.TextInfo;
-
- try
- {
-
- if (!ci.TextInfo.Equals(textInfo))
- {
- string errorDesc = "the second TextInfo should equal original TextInfo.";
- TestLibrary.TestFramework.LogError("001" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest2: Verify the TextInfo is not same CultureInfo's . ";
- const string c_TEST_ID = "P002";
-
-
- TextInfo textInfoFrance = new CultureInfo("fr-FR").TextInfo;
- TextInfo textInfoUS = new CultureInfo("en-US").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- if (textInfoFrance.Equals((object)textInfoUS))
- {
- string errorDesc = "the TextInfos of differente CultureInfo should not equal. ";
- TestLibrary.TestFramework.LogError("003" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest3: Verify the TextInfo not equal a null reference . ";
- const string c_TEST_ID = "P003";
-
-
- TextInfo textInfoUS = new CultureInfo("en-US").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- if (textInfoUS.Equals(null))
- {
- string errorDesc = "the US CultureInfo's TextInfo should not equal a null reference. ";
- TestLibrary.TestFramework.LogError("003" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest4: Verify the TextInfo not equal another type object . ";
- const string c_TEST_ID = "P004";
-
-
- TextInfo textInfoUS = new CultureInfo("en-US").TextInfo;
- object obj = (object)(new MyClass());
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- if (textInfoUS.Equals(obj))
- {
- string errorDesc = "the US CultureInfo's TextInfo should not equal user-defined type object. ";
- TestLibrary.TestFramework.LogError("007" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest5: Verify the TextInfo not equal a int object . ";
- const string c_TEST_ID = "P005";
-
-
- TextInfo textInfoUS = new CultureInfo("en-US").TextInfo;
- int i = TestLibrary.Generator.GetInt32(-55);
- object intObject = i as object;
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- if (textInfoUS.Equals(intObject))
- {
- string errorDesc = "the US CultureInfo's TextInfo should not equal int object. ";
- TestLibrary.TestFramework.LogError("007" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("008" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest6()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest6: Verify the TextInfo not equal a string object . ";
- const string c_TEST_ID = "P006";
-
-
- TextInfo textInfoUS = new CultureInfo("en-US").TextInfo;
- String str = TestLibrary.Generator.GetString(-55, false,c_MINI_STRING_LENGTH,c_MAX_STRING_LENGTH);
- object strObject = str as object;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- if (textInfoUS.Equals(strObject))
- {
- string errorDesc = "the US CultureInfo's TextInfo should not equal string object. ";
- TestLibrary.TestFramework.LogError("009" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-
- #region Customer Class
- public class MyClass
- {
-
- }
- #endregion
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfogethashcode.cs b/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfogethashcode.cs
deleted file mode 100644
index f6cf23af91..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfogethashcode.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.TextInfo.GetHashCode()
-/// </summary>
-public class TextInfoGetHashCode
-{
- public static int Main()
- {
- TextInfoGetHashCode testObj = new TextInfoGetHashCode();
- TestLibrary.TestFramework.BeginTestCase("for Method:System.Globalization.TextInfo.GetHashCode()");
-
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- #region PositiveTesting
- public bool PosTest1()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest1: Verify the TextInfo equals original TextInfo. ";
- const string c_TEST_ID = "P001";
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- CultureInfo ci = new CultureInfo("en-US");
- CultureInfo ci2 = new CultureInfo("en-US");
- object textInfo = ci2.TextInfo;
-
- try
- {
- int originalHC = ci.TextInfo.GetHashCode();
- int clonedHC = (textInfo as TextInfo).GetHashCode();
- if (originalHC != clonedHC)
- {
- string errorDesc = "the cloned TextInfo'HashCode should equal original TextInfo's HashCode.";
- TestLibrary.TestFramework.LogError("001" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest2: Verify the TextInfo is not same CultureInfo's . ";
- const string c_TEST_ID = "P002";
-
-
- TextInfo textInfoFrance = new CultureInfo("fr-FR").TextInfo;
- TextInfo textInfoUS = new CultureInfo("en-US").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- int franceHashCode = textInfoFrance.GetHashCode();
- int usHashCode = textInfoUS.GetHashCode();
- if (franceHashCode == usHashCode)
- {
- string errorDesc = "the differente TextInfo's HashCode should not equal. ";
- TestLibrary.TestFramework.LogError("003" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoisreadonly.cs b/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoisreadonly.cs
deleted file mode 100644
index f0d9eb1c84..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfoisreadonly.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.TextInfo.IsReadOnly
-/// </summary>
-public class TextInfoIsReadOnly
-{
- public static int Main()
- {
- TextInfoIsReadOnly testObj = new TextInfoIsReadOnly();
- TestLibrary.TestFramework.BeginTestCase("for Property:System.Globalization.TextInfo.IsReadOnly");
-
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- #region PositiveTesting
- public bool PosTest1()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest1: Verify the new TextInfo is not readOnly";
- const string c_TEST_ID = "P001";
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- CultureInfo ci = new CultureInfo("en-US");
- TextInfo textInfoUS = ci.TextInfo;
-
- try
- {
-
- if (textInfoUS.IsReadOnly)
- {
- string errorDesc = "Value is not true as expected: Actual is false";
- TestLibrary.TestFramework.LogError("001" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest2: Verify the fr-FR CultureInfo's TextInfo";
- const string c_TEST_ID = "P002";
-
-
- CultureInfo ci = new CultureInfo("fr-FR");
- TextInfo textInfoFrance = ci.TextInfo;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- if (textInfoFrance.IsReadOnly)
- {
- string errorDesc = "Value is not true as expected: Actual is false";
- TestLibrary.TestFramework.LogError("003" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotostring.cs b/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotostring.cs
deleted file mode 100644
index 27064abb32..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotostring.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.TextInfo.ToString()
-/// </summary>
-public class TextInfoToString
-{
- public static int Main()
- {
- TextInfoToString testObj = new TextInfoToString();
- TestLibrary.TestFramework.BeginTestCase("for Method:System.Globalization.TextInfo.ToString()");
-
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
-
- return retVal;
- }
-
- #region PositiveTesting
- public bool PosTest1()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest1: Verify the en-US TextInfo";
- const string c_TEST_ID = "P001";
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- TextInfo textInfoUS = new CultureInfo("en-US").TextInfo;
- String textinfoStr = "TextInfo - en-US";
- try
- {
-
- if (textinfoStr != textInfoUS.ToString())
- {
- string errorDesc = "Value is not " + textinfoStr + " as expected: Actual(" + textInfoUS.ToString() + ")";
- TestLibrary.TestFramework.LogError("001" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
- const string c_TEST_DESC = "PosTest2: Verify the fr-FR CultureInfo's TextInfo";
- const string c_TEST_ID = "P002";
-
-
- TextInfo textInfoFrance = new CultureInfo("fr-FR").TextInfo;
- String textinfoStr = "TextInfo - fr-FR";
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- if (textinfoStr != textInfoFrance.ToString())
- {
- string errorDesc = "Value is not " + textinfoStr + " as expected: Actual(" + textInfoFrance.ToString() + ")";
- TestLibrary.TestFramework.LogError("003" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotoupper1.cs b/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotoupper1.cs
deleted file mode 100644
index d87eac576f..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotoupper1.cs
+++ /dev/null
@@ -1,223 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.TextInfo.ToUpper(Char)
-/// </summary>
-public class TextInfoToUpper1
-{
- public static int Main()
- {
- TextInfoToUpper1 testObj = new TextInfoToUpper1();
-
- TestLibrary.TestFramework.BeginTestCase("for method: System.Globalization.TextInfo.ToUpper(Char)");
- if (testObj.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest4() && retVal;
- retVal = PosTest5() && retVal;
-
- return retVal;
- }
-
- public bool PosTest1()
- {
- bool retVal = true;
-
- const string c_TEST_ID = "P001";
- const string c_TEST_DESC = "PosTest1: uppercase character";
- string errorDesc;
-
- char ch = 'A';
- char expectedChar = ch;
- TextInfo textInfo = new CultureInfo("en-US").TextInfo;
-
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
- try
- {
-
- char actualChar = textInfo.ToUpper(ch);
- if (actualChar != expectedChar)
- {
- errorDesc = string.Format("Uppercase of character \\u{0:x} is not the value ", (int)ch);
- errorDesc += string.Format("\\u{0:x} as expected: actual(\\u{1:x}", (int)expectedChar, (int)actualChar);
- TestLibrary.TestFramework.LogError("001" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- errorDesc = "Unexpected exception: " + e;
- TestLibrary.TestFramework.LogError("002" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest2()
- {
- bool retVal = true;
-
- const string c_TEST_ID = "P002";
- const string c_TEST_DESC = "PosTest2: lowercase character";
- string errorDesc;
-
- char ch = 'a';
- char expectedChar = 'A';
- TextInfo textInfo = new CultureInfo("en-US").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
- try
- {
-
- char actualChar = textInfo.ToUpper(ch);
- if (actualChar != expectedChar)
- {
- errorDesc = string.Format("Uppercase of character \\u{0:x} is not the value ", (int)ch);
- errorDesc += string.Format("\\u{0:x} as expected: actual(\\u{1:x}", (int)expectedChar, (int)actualChar);
- TestLibrary.TestFramework.LogError("003" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- errorDesc = "Unexpected exception: " + e;
- TestLibrary.TestFramework.LogError("004" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
-
- const string c_TEST_ID = "P003";
- const string c_TEST_DESC = "PosTest3: non-alphabetic character";
- string errorDesc;
-
- char ch = Convert.ToChar(TestLibrary.Generator.GetInt16(-55) % 10 + '0');
- char expectedChar = ch;
- TextInfo textInfo = new CultureInfo("en-US").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
- try
- {
-
- char actualChar = textInfo.ToUpper(ch);
- if (actualChar != expectedChar)
- {
- errorDesc = string.Format("Uppercase of character \\u{0:x} is not the value ", (int)ch);
- errorDesc += string.Format("\\u{0:x} as expected: actual(\\u{1:x}", (int)expectedChar, (int)actualChar);
- TestLibrary.TestFramework.LogError("005" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- errorDesc = "Unexpected exception: " + e;
- TestLibrary.TestFramework.LogError("006" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest4()
- {
- bool retVal = true;
-
- const string c_TEST_ID = "P004";
- const string c_TEST_DESC = "PosTest4: uppercase character and TextInfo is french CultureInfo's";
- string errorDesc;
-
- char ch = 'G';
- char expectedChar = ch;
- TextInfo textInfo = new CultureInfo("fr-FR").TextInfo;
-
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
- try
- {
-
- char actualChar = textInfo.ToUpper(ch);
- if (actualChar != expectedChar)
- {
- errorDesc = string.Format("Uppercase of character \\u{0:x} is not the value ", (int)ch);
- errorDesc += string.Format("\\u{0:x} as expected: actual(\\u{1:x}", (int)expectedChar, (int)actualChar);
- TestLibrary.TestFramework.LogError("007" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- errorDesc = "Unexpected exception: " + e;
- TestLibrary.TestFramework.LogError("008" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
-
- const string c_TEST_ID = "P005";
- const string c_TEST_DESC = "PosTest5: lowercase character and TextInfo is french(France) CultureInfo's";
- string errorDesc;
-
- char ch = 'g';
- char expectedChar = 'G';
- TextInfo textInfo = new CultureInfo("fr-FR").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
- try
- {
-
- char actualChar = textInfo.ToUpper(ch);
- if (actualChar != expectedChar)
- {
- errorDesc = string.Format("Uppercase of character \\u{0:x} is not the value ", (int)ch);
- errorDesc += string.Format("\\u{0:x} as expected: actual(\\u{1:x}", (int)expectedChar, (int)actualChar);
- TestLibrary.TestFramework.LogError("009" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
- }
- catch (Exception e)
- {
- errorDesc = "Unexpected exception: " + e;
- TestLibrary.TestFramework.LogError("010" + " TestId-" + c_TEST_ID, errorDesc);
- retVal = false;
- }
-
- return retVal;
- }
-
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotoupper2.cs b/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotoupper2.cs
deleted file mode 100644
index ff385637d3..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/textinfo/textinfotoupper2.cs
+++ /dev/null
@@ -1,244 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-/// <summary>
-/// System.Globalization.TextInfo.ToUpper(String)
-/// </summary>
-public class TextInfoToUpper2
-{
- public static int Main()
- {
- TextInfoToUpper2 stu1 = new TextInfoToUpper2();
- TestLibrary.TestFramework.BeginTestCase("for Method:System.Globalization.TextInfo.ToUpper(String)");
-
- if (stu1.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- retVal = PosTest2() && retVal;
- retVal = PosTest3() && retVal;
- retVal = PosTest5() && retVal;
- retVal = PosTest6() && retVal;
-
- TestLibrary.TestFramework.LogInformation("[Negative]");
- retVal = NegTest1() && retVal;
- retVal = NegTest2() && retVal;
-
- return retVal;
- }
-
- #region PositiveTesting
- public bool PosTest1()
- {
- bool retVal = true;
- string strA = "HelloWorld!";
- string ActualResult;
-
- TextInfo textInfo = new CultureInfo("en-US").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: normal string ToUpper");
- try
- {
- ActualResult = textInfo.ToUpper(strA);
- if (ActualResult != "HELLOWORLD!")
- {
- TestLibrary.TestFramework.LogError("001", "normal string ToUpper ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- public bool PosTest2()
- {
- bool retVal = true;
- string strA = string.Empty;
- string ActualResult;
-
- TextInfo textInfo = new CultureInfo("en-US").TextInfo;
-
-
- TestLibrary.TestFramework.BeginScenario("PosTest2: empty string ToUpper");
- try
- {
- ActualResult = textInfo.ToUpper(strA);
- if (ActualResult != string.Empty)
- {
- TestLibrary.TestFramework.LogError("003", "empty string ToUpper ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("004", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest3()
- {
- bool retVal = true;
- string strA = "Hello\n\0World\u0009!";
- string ActualResult;
-
- TextInfo textInfo = new CultureInfo("en-US").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario("PosTest3: normal string with special symbols '\u0009' and '\0'");
- try
- {
-
- ActualResult = textInfo.ToUpper(strA);
- if (ActualResult != "HELLO\n\0WORLD\t!")
- {
- TestLibrary.TestFramework.LogError("005", "normal string with special symbols ToUpper ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("006", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest5()
- {
- bool retVal = true;
- string strA = "HelloWorld!";
- string ActualResult;
-
- TextInfo textInfo = new CultureInfo("fr-FR").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario("PosTest1: normal string ToUpper and TextInfo is French (France) CultureInfo's");
- try
- {
- ActualResult = textInfo.ToUpper(strA);
- if (ActualResult != "HELLOWORLD!")
- {
- TestLibrary.TestFramework.LogError("009", "normal string ToUpper ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
-
- public bool PosTest6()
- {
- bool retVal = true;
- string strA = "Hello\n\0World\u0009!";
- string ActualResult;
-
- TextInfo textInfo = new CultureInfo("fr-FR").TextInfo;
-
- TestLibrary.TestFramework.BeginScenario("PosTest6: normal string with special symbols and TextInfo is French (France) CultureInfo's");
- try
- {
-
- ActualResult = textInfo.ToUpper(strA);
- if (ActualResult != "HELLO\n\0WORLD\t!")
- {
- TestLibrary.TestFramework.LogError("011", "normal string with special symbols ToUpper ActualResult is not the ExpectResult");
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012", "Unexpected exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-
- #region NegativeTests
- public bool NegTest1()
- {
- bool retVal = true;
-
- const string c_TEST_DESC = "NegTest1: The string is a null reference";
- const string c_TEST_ID = "N001";
-
- TextInfo textInfoUS = new CultureInfo("en-US").TextInfo;
- string str = null;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- textInfoUS.ToUpper(str);
- TestLibrary.TestFramework.LogError("009" + " TestId-" + c_TEST_ID, "ArgumentNullException is not thrown as expected.");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("010" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
-
- public bool NegTest2()
- {
- bool retVal = true;
-
- const string c_TEST_DESC = "NegTest2: The string is a null reference and TextInfo is French (France) CultureInfo's";
- const string c_TEST_ID = "N001";
-
- TextInfo textInfoUS = new CultureInfo("fr-FR").TextInfo;
- string str = null;
-
- TestLibrary.TestFramework.BeginScenario(c_TEST_DESC);
-
- try
- {
- textInfoUS.ToUpper(str);
- TestLibrary.TestFramework.LogError("011" + " TestId-" + c_TEST_ID, "ArgumentNullException is not thrown as expected.");
- retVal = false;
- }
- catch (ArgumentNullException)
- {
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("012" + " TestId-" + c_TEST_ID, "Unexpected exception: " + e);
- retVal = false;
- }
-
- return retVal;
- }
- #endregion
-}
-
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryClosePunctuation.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryClosePunctuation.csproj
deleted file mode 100644
index 8132678627..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryClosePunctuation.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryclosepunctuation.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryConnectorPunctuation.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryConnectorPunctuation.csproj
deleted file mode 100644
index 11f3d94e85..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryConnectorPunctuation.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryconnectorpunctuation.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryControl.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryControl.csproj
deleted file mode 100644
index ae4ca6c387..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryControl.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorycontrol.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryDashPunctuation.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryDashPunctuation.csproj
deleted file mode 100644
index 739caab798..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryDashPunctuation.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorydashpunctuation.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryDecimalDigitNumber.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryDecimalDigitNumber.csproj
deleted file mode 100644
index 8b3ef430e3..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryDecimalDigitNumber.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorydecimaldigitnumber.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryEnclosingMark.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryEnclosingMark.csproj
deleted file mode 100644
index 126d970b72..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryEnclosingMark.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryenclosingmark.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryFinalQuotePunctuation.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryFinalQuotePunctuation.csproj
deleted file mode 100644
index c6f43d1278..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryFinalQuotePunctuation.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryfinalquotepunctuation.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryFormat.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryFormat.csproj
deleted file mode 100644
index 96f5fc5863..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryFormat.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryformat.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryInitialQuotePunctuation.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryInitialQuotePunctuation.csproj
deleted file mode 100644
index 59366df06c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryInitialQuotePunctuation.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryinitialquotepunctuation.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLetterNumber.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLetterNumber.csproj
deleted file mode 100644
index ab5c9ceecd..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLetterNumber.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryletternumber.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLineSeparator.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLineSeparator.csproj
deleted file mode 100644
index ef9346c0e7..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLineSeparator.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorylineseparator.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLowercaseLetter.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLowercaseLetter.csproj
deleted file mode 100644
index 178bae3ca0..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryLowercaseLetter.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorylowercaseletter.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryMathSymbol.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryMathSymbol.csproj
deleted file mode 100644
index 5a32d07ad3..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryMathSymbol.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorymathsymbol.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryModifierLetter.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryModifierLetter.csproj
deleted file mode 100644
index a94578a65d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryModifierLetter.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorymodifierletter.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryModifierSymbol.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryModifierSymbol.csproj
deleted file mode 100644
index 7a9793265e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryModifierSymbol.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorymodifiersymbol.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryNonSpacingMark.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryNonSpacingMark.csproj
deleted file mode 100644
index e0278b659c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryNonSpacingMark.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorynonspacingmark.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOpenPunctuation.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOpenPunctuation.csproj
deleted file mode 100644
index e6bb5a427c..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOpenPunctuation.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryopenpunctuation.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherLetter.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherLetter.csproj
deleted file mode 100644
index ea407c0f68..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherLetter.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryotherletter.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherNotAssigned.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherNotAssigned.csproj
deleted file mode 100644
index 308e4720e5..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherNotAssigned.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryothernotassigned.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherNumber.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherNumber.csproj
deleted file mode 100644
index 704ad15cf7..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherNumber.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryothernumber.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherPunctuation.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherPunctuation.csproj
deleted file mode 100644
index 346fce411e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherPunctuation.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryotherpunctuation.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherSymbol.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherSymbol.csproj
deleted file mode 100644
index 73ef39db0f..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryOtherSymbol.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryothersymbol.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryParagraphSeparator.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryParagraphSeparator.csproj
deleted file mode 100644
index e21f98425e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryParagraphSeparator.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryparagraphseparator.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryPrivateUse.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryPrivateUse.csproj
deleted file mode 100644
index 8889136510..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryPrivateUse.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryprivateuse.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySpaceSeparator.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySpaceSeparator.csproj
deleted file mode 100644
index 3e16f7f37e..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySpaceSeparator.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryspaceseparator.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySpacingCombiningMark.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySpacingCombiningMark.csproj
deleted file mode 100644
index 5c617ba633..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySpacingCombiningMark.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryspacingcombiningmark.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySurrogate.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySurrogate.csproj
deleted file mode 100644
index cb263d0dd9..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategorySurrogate.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorysurrogate.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryTitlecaseLetter.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryTitlecaseLetter.csproj
deleted file mode 100644
index 47655c1195..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryTitlecaseLetter.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategorytitlecaseletter.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryUppercaseLetter.csproj b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryUppercaseLetter.csproj
deleted file mode 100644
index 266bb41667..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/UnicodeCategoryUppercaseLetter.csproj
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
- <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
- <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
- </PropertyGroup>
- <!-- Default configurations to help VS understand the configurations -->
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- </PropertyGroup>
- <ItemGroup>
- <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
- <Visible>False</Visible>
- </CodeAnalysisDependentAssemblyPaths>
- </ItemGroup>
- <ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="unicodecategoryuppercaseletter.cs" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
- <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryclosepunctuation.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryclosepunctuation.cs
deleted file mode 100644
index 98af37cdc0..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryclosepunctuation.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.ClosePunctuation [v-minch]
-/// </summary>
-public class UnicodeCategoryClosePunctuation
-{
- public static int Main()
- {
- UnicodeCategoryClosePunctuation unicodeClosePunc = new UnicodeCategoryClosePunctuation();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryClosePunctuation");
- if (unicodeClosePunc.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the ClosePunctuation Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.ClosePunctuation;
- if (myUnicodeCategory != (UnicodeCategory)21)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 21 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryconnectorpunctuation.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryconnectorpunctuation.cs
deleted file mode 100644
index dfd6b85756..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryconnectorpunctuation.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.ConnectorPunctuation [v-minch]
-/// </summary>
-public class UnicodeCategoryConnectorPunctuation
-{
- public static int Main()
- {
- UnicodeCategoryConnectorPunctuation unicodeConnectPunc = new UnicodeCategoryConnectorPunctuation();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryConnectorPunctuation");
- if (unicodeConnectPunc.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the ConnectorPunctuation Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.ConnectorPunctuation;
- if (myUnicodeCategory != (UnicodeCategory)18)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 18 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorycontrol.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorycontrol.cs
deleted file mode 100644
index 9aa99a8e5d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorycontrol.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.Control [v-minch]
-/// </summary>
-public class UnicodeCategoryControl
-{
- public static int Main()
- {
- UnicodeCategoryControl unicodeControl = new UnicodeCategoryControl();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryControl");
- if (unicodeControl.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the Control Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.Control;
- if (myUnicodeCategory != (UnicodeCategory)14)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 14 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorydashpunctuation.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorydashpunctuation.cs
deleted file mode 100644
index 8fb4ef20b9..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorydashpunctuation.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.DashPunctuation [v-minch]
-/// </summary>
-public class UnicodeCategoryDashPunctuation
-{
- public static int Main()
- {
- UnicodeCategoryDashPunctuation unicodeDashPunctuation = new UnicodeCategoryDashPunctuation();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryDashPunctuation");
- if (unicodeDashPunctuation.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the DashPunctuation Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.DashPunctuation;
- if (myUnicodeCategory != (UnicodeCategory)19)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 19 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorydecimaldigitnumber.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorydecimaldigitnumber.cs
deleted file mode 100644
index 06b08e4beb..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorydecimaldigitnumber.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.DecimalDigitNumber [v-minch]
-/// </summary>
-public class UnicodeCategoryDecimalDigitNumber
-{
- public static int Main()
- {
- UnicodeCategoryDecimalDigitNumber unicodeDecimalDigitNumber = new UnicodeCategoryDecimalDigitNumber();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryDecimalDigitNumber");
- if (unicodeDecimalDigitNumber.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the DecimalDigitNumber Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.DecimalDigitNumber;
- if (myUnicodeCategory != (UnicodeCategory)8)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 8 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryenclosingmark.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryenclosingmark.cs
deleted file mode 100644
index 18d837bae5..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryenclosingmark.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.EnclosingMark [v-minch]
-/// </summary>
-public class UnicodeCategoryEnclosingMark
-{
- public static int Main()
- {
- UnicodeCategoryEnclosingMark unicodeEnclosingMark = new UnicodeCategoryEnclosingMark();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryEnclosingMark");
- if (unicodeEnclosingMark.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the EnclosingMark Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.EnclosingMark;
- if (myUnicodeCategory != (UnicodeCategory)7)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 7 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryfinalquotepunctuation.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryfinalquotepunctuation.cs
deleted file mode 100644
index c1693a43a0..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryfinalquotepunctuation.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.FinalQuotePunctuation [v-minch]
-/// </summary>
-public class UnicodeCategoryFinalQuotePunctuation
-{
- public static int Main()
- {
- UnicodeCategoryFinalQuotePunctuation unicodeFinalQuotePunctuation = new UnicodeCategoryFinalQuotePunctuation();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryFinalQuotePunctuation");
- if (unicodeFinalQuotePunctuation.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the FinalQuotePunctuation Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.FinalQuotePunctuation;
- if (myUnicodeCategory != (UnicodeCategory)23)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 23 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryformat.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryformat.cs
deleted file mode 100644
index f8ce3d50a0..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryformat.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.Format [v-minch]
-/// </summary>
-public class UnicodeCategoryFormat
-{
- public static int Main()
- {
- UnicodeCategoryFormat unicodeFormat = new UnicodeCategoryFormat();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryFormat");
- if (unicodeFormat.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the Format Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.Format;
- if (myUnicodeCategory != (UnicodeCategory)15)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 15 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryinitialquotepunctuation.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryinitialquotepunctuation.cs
deleted file mode 100644
index 84070ec329..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryinitialquotepunctuation.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.InitialQuotePunctuation [v-minch]
-/// </summary>
-public class UnicodeCategoryInitialQuotePunctuation
-{
- public static int Main()
- {
- UnicodeCategoryInitialQuotePunctuation unicodeInitialQuotePunctuation = new UnicodeCategoryInitialQuotePunctuation();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryInitialQuotePunctuation");
- if (unicodeInitialQuotePunctuation.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the InitialQuotePunctuation Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.InitialQuotePunctuation;
- if (myUnicodeCategory != (UnicodeCategory)22)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 22 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryletternumber.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryletternumber.cs
deleted file mode 100644
index f95c248cef..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryletternumber.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.LetterNumber [v-minch]
-/// </summary>
-public class UnicodeCategoryLetterNumber
-{
- public static int Main()
- {
- UnicodeCategoryLetterNumber unicodeLetterNumber = new UnicodeCategoryLetterNumber();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryLetterNumber");
- if (unicodeLetterNumber.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the LetterNumber Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.LetterNumber;
- if (myUnicodeCategory != (UnicodeCategory)9)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 9 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorylineseparator.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorylineseparator.cs
deleted file mode 100644
index 8ea8f2edcd..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorylineseparator.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.LineSeparator [v-minch]
-/// </summary>
-public class UnicodeCategoryLineSeparator
-{
- public static int Main()
- {
- UnicodeCategoryLineSeparator unicodeLineSeparator = new UnicodeCategoryLineSeparator();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryLineSeparator");
- if (unicodeLineSeparator.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the LineSeparator Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.LineSeparator;
- if (myUnicodeCategory != (UnicodeCategory)12)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 12 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorylowercaseletter.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorylowercaseletter.cs
deleted file mode 100644
index 35d628066d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorylowercaseletter.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.LowercaseLette [v-minch]
-/// </summary>
-public class UnicodeCategoryLowercaseLetter
-{
- public static int Main()
- {
- UnicodeCategoryLowercaseLetter unicodeLowercaseLetter = new UnicodeCategoryLowercaseLetter();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryLowercaseLetter");
- if (unicodeLowercaseLetter.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the LowercaseLetter Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.LowercaseLetter;
- if (myUnicodeCategory != (UnicodeCategory)1)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 1 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymathsymbol.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymathsymbol.cs
deleted file mode 100644
index 66a8427b04..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymathsymbol.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.MathSymbol [v-minch]
-/// </summary>
-public class UnicodeCategoryMathSymbol
-{
- public static int Main()
- {
- UnicodeCategoryMathSymbol unicodeMathSymbol = new UnicodeCategoryMathSymbol();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryMathSymbol");
- if (unicodeMathSymbol.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the MathSymbol Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.MathSymbol;
- if (myUnicodeCategory != (UnicodeCategory)25)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 25 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymodifierletter.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymodifierletter.cs
deleted file mode 100644
index 63e6cc510b..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymodifierletter.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.ModifierLetter [v-minch]
-/// </summary>
-public class UnicodeCategoryModifierLetter
-{
- public static int Main()
- {
- UnicodeCategoryModifierLetter unicodeModifierLetter = new UnicodeCategoryModifierLetter();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryModifierLetter");
- if (unicodeModifierLetter.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the ModifierLetter Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.ModifierLetter;
- if (myUnicodeCategory != (UnicodeCategory)3)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 3 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymodifiersymbol.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymodifiersymbol.cs
deleted file mode 100644
index c63f4a7fa1..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorymodifiersymbol.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.ModifierSymbol [v-minch]
-/// </summary>
-public class UnicodeCategoryModifierSymbol
-{
- public static int Main()
- {
- UnicodeCategoryModifierSymbol unicodeModifierSymbol = new UnicodeCategoryModifierSymbol();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryModifierSymbol");
- if (unicodeModifierSymbol.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the ModifierSymbol Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.ModifierSymbol;
- if (myUnicodeCategory != (UnicodeCategory)27)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 27 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorynonspacingmark.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorynonspacingmark.cs
deleted file mode 100644
index b815da9dfb..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorynonspacingmark.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.NonSpacingMark [v-minch]
-/// </summary>
-class UnicodeCategoryNonSpacingMark
-{
- public static int Main()
- {
- UnicodeCategoryNonSpacingMark unicodeNonSpacingMark = new UnicodeCategoryNonSpacingMark();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryNonSpacingMark");
- if (unicodeNonSpacingMark.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the NonSpacingMark Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.NonSpacingMark;
- if (myUnicodeCategory != (UnicodeCategory)5)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 5 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryopenpunctuation.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryopenpunctuation.cs
deleted file mode 100644
index 914c69e55d..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryopenpunctuation.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.OpenPunctuation [v-minch]
-/// </summary>
-public class UnicodeCategoryOpenPunctuation
-{
- public static int Main()
- {
- UnicodeCategoryOpenPunctuation unicodeOpenPunctuation = new UnicodeCategoryOpenPunctuation();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryOpenPunctuation");
- if (unicodeOpenPunctuation.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the OpenPunctuation Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.OpenPunctuation;
- if (myUnicodeCategory != (UnicodeCategory)20)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 20 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryotherletter.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryotherletter.cs
deleted file mode 100644
index 90424ddbc6..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryotherletter.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.OtherLetter [v-minch]
-/// </summary>
-public class UnicodeCategoryOtherLetter
-{
- public static int Main()
- {
- UnicodeCategoryOtherLetter unicodeOtherLetter = new UnicodeCategoryOtherLetter();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryOtherLetter");
- if (unicodeOtherLetter.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the OtherLetter Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.OtherLetter;
- if (myUnicodeCategory != (UnicodeCategory)4)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 4 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothernotassigned.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothernotassigned.cs
deleted file mode 100644
index a6a7920751..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothernotassigned.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.OtherNotAssigned [v-minch]
-/// </summary>
-public class UnicodeCategoryOtherNotAssigned
-{
- public static int Main()
- {
- UnicodeCategoryOtherNotAssigned unicodeOtherNotAssigned = new UnicodeCategoryOtherNotAssigned();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryOtherNotAssigned");
- if (unicodeOtherNotAssigned.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the OtherNotAssigned Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.OtherNotAssigned;
- if (myUnicodeCategory != (UnicodeCategory)29)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 29 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothernumber.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothernumber.cs
deleted file mode 100644
index f6128de1e0..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothernumber.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.OtherNumber [v-minch]
-/// </summary>
-public class UnicodeCategoryOtherNumber
-{
- public static int Main()
- {
- UnicodeCategoryOtherNumber unicodeOtherNumber = new UnicodeCategoryOtherNumber();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryOtherNumber");
- if (unicodeOtherNumber.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the OtherNumber Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.OtherNumber;
- if (myUnicodeCategory != (UnicodeCategory)10)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 10 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryotherpunctuation.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryotherpunctuation.cs
deleted file mode 100644
index 884c0ab6ae..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryotherpunctuation.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.OtherPunctuation [v-minch]
-/// </summary>
-public class UnicodeCategoryOtherPunctuation
-{
- public static int Main()
- {
- UnicodeCategoryOtherPunctuation unicodeOtherPunctuation = new UnicodeCategoryOtherPunctuation();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryOtherPunctuation");
- if (unicodeOtherPunctuation.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the OtherPunctuation Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.OtherPunctuation;
- if (myUnicodeCategory != (UnicodeCategory)24)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 24 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothersymbol.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothersymbol.cs
deleted file mode 100644
index 4e8d4ac138..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryothersymbol.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.OtherSymbol [v-minch]
-/// </summary>
-public class UnicodeCategoryOtherSymbol
-{
- public static int Main()
- {
- UnicodeCategoryOtherSymbol unicodeOtherSymbol = new UnicodeCategoryOtherSymbol();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryOtherSymbol");
- if (unicodeOtherSymbol.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the OtherSymbol Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.OtherSymbol;
- if (myUnicodeCategory != (UnicodeCategory)28)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 28 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryparagraphseparator.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryparagraphseparator.cs
deleted file mode 100644
index 4e1bfa3280..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryparagraphseparator.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.ParagraphSeparator [v-minch]
-/// </summary>
-public class UnicodeCategoryParagraphSeparator
-{
- public static int Main()
- {
- UnicodeCategoryParagraphSeparator unicodeParagraphSeparator = new UnicodeCategoryParagraphSeparator();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryParagraphSeparator");
- if (unicodeParagraphSeparator.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the ParagraphSeparator Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.ParagraphSeparator;
- if (myUnicodeCategory != (UnicodeCategory)13)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 13 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryprivateuse.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryprivateuse.cs
deleted file mode 100644
index 53aa98f4ca..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryprivateuse.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.PrivateUse [v-minch]
-/// </summary>
-public class UnicodeCategoryPrivateUse
-{
- public static int Main()
- {
- UnicodeCategoryPrivateUse unicodePrivateUse = new UnicodeCategoryPrivateUse();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryPrivateUse");
- if (unicodePrivateUse.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the PrivateUse Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.PrivateUse;
- if (myUnicodeCategory != (UnicodeCategory)17)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 17 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryspaceseparator.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryspaceseparator.cs
deleted file mode 100644
index 5d4b5bb063..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryspaceseparator.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.SpaceSeparator [v-minch]
-/// </summary>
-public class UnicodeCategorySpaceSeparator
-{
- public static int Main()
- {
- UnicodeCategorySpaceSeparator unicodeSpaceSeparator = new UnicodeCategorySpaceSeparator();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategorySpaceSeparator");
- if (unicodeSpaceSeparator.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the SpaceSeparator Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.SpaceSeparator;
- if (myUnicodeCategory != (UnicodeCategory)11)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 11 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryspacingcombiningmark.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryspacingcombiningmark.cs
deleted file mode 100644
index 685129f854..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryspacingcombiningmark.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.SpacingCombiningMark [v-minch]
-/// </summary>
-public class UnicodeCategorySpacingCombiningMark
-{
- public static int Main()
- {
- UnicodeCategorySpacingCombiningMark unicodeSpacingCombiningMark = new UnicodeCategorySpacingCombiningMark();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategorySpacingCombiningMark");
- if (unicodeSpacingCombiningMark.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the SpacingCombiningMark Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.SpacingCombiningMark;
- if (myUnicodeCategory != (UnicodeCategory)6)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 6 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorysurrogate.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorysurrogate.cs
deleted file mode 100644
index 1acd3e5e1f..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorysurrogate.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.Surrogate [v-minch]
-/// </summary>
-public class UnicodeCategorySurrogate
-{
- public static int Main()
- {
- UnicodeCategorySurrogate unicodeSurrogate = new UnicodeCategorySurrogate();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategorySurrogate");
- if (unicodeSurrogate.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the Surrogate Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.Surrogate;
- if (myUnicodeCategory != (UnicodeCategory)16)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 16 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-}
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorytitlecaseletter.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorytitlecaseletter.cs
deleted file mode 100644
index 1e61044588..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategorytitlecaseletter.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.TitlecaseLetter [v-minch]
-/// </summary>
-public class UnicodeCategoryTitlecaseLetter
-{
- public static int Main()
- {
- UnicodeCategoryTitlecaseLetter unicodeTitlecaseLetter = new UnicodeCategoryTitlecaseLetter();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryTitlecaseLetter");
- if (unicodeTitlecaseLetter.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the TitlecaseLetter Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.TitlecaseLetter;
- if (myUnicodeCategory != (UnicodeCategory)2)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 2 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryuppercaseletter.cs b/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryuppercaseletter.cs
deleted file mode 100644
index 4a634b6242..0000000000
--- a/tests/src/CoreMangLib/cti/system/globalization/unicodecategory/unicodecategoryuppercaseletter.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-/// <summary>
-/// UnicodeCategory.UppercaseLetter
-/// </summary>
-public class UnicodeCategoryUppercaseLetter
-{
- public static int Main()
- {
- UnicodeCategoryUppercaseLetter unicodeUppercaseLetter = new UnicodeCategoryUppercaseLetter();
- TestLibrary.TestFramework.BeginTestCase("UnicodeCategoryUppercaseLetter");
- if (unicodeUppercaseLetter.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.TestFramework.LogInformation("FAIL");
- return 0;
- }
- }
- public bool RunTests()
- {
- bool retVal = true;
- TestLibrary.TestFramework.LogInformation("[Positive]");
- retVal = PosTest1() && retVal;
- return retVal;
- }
- #region PositiveTest
- public bool PosTest1()
- {
- bool retVal = true;
- TestLibrary.TestFramework.BeginScenario("PosTest1:Return the UppercaseLetter Value in UnicodeCategory Enumerator");
- try
- {
- UnicodeCategory myUnicodeCategory = UnicodeCategory.UppercaseLetter;
- if (myUnicodeCategory != (UnicodeCategory)0)
- {
- TestLibrary.TestFramework.LogError("001", "the ExpectResult is 0 but the ActualResult is " + myUnicodeCategory.GetHashCode());
- retVal = false;
- }
- }
- catch (Exception e)
- {
- TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e);
- retVal = false;
- }
- return retVal;
- }
- #endregion
-} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/system/datetime/co7510parseexact_formatarray.cs b/tests/src/CoreMangLib/system/datetime/co7510parseexact_formatarray.cs
deleted file mode 100644
index 8d31690027..0000000000
--- a/tests/src/CoreMangLib/system/datetime/co7510parseexact_formatarray.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Globalization;
-
-//Introduced as a BuildBVT as a regression test for NDPWhidbey bug #24414.
-//Make sure that a basic case of DateTime.ParseExact with a format array works.
-class Co7510ParseExact_formatarray
-{
- public static int Main()
- {
- try
- {
- string[] formats = new string[24];
- formats[0] = "HH:mm:ss";
- formats[1] = "HH:mm:ss.f";
- formats[2] = "HH:mm:ss.ff";
- formats[3] = "HH:mm:ss.fff";
- formats[4] = "HH:mm:ss.ffff";
- formats[5] = "HH:mm:ss.fffff";
- formats[6] = "HH:mm:ss.ffffff";
- formats[7] = "HH:mm:ss.fffffff";
- formats[8] = "HH:mm:ssZ";
- formats[9] = "HH:mm:ss.fZ";
- formats[10] = "HH:mm:ss.ffZ";
- formats[11] = "HH:mm:ss.fffZ";
- formats[12] = "HH:mm:ss.ffffZ";
- formats[13] = "HH:mm:ss.fffffZ";
- formats[14] = "HH:mm:ss.ffffffZ";
- formats[15] = "HH:mm:ss.fffffffZ";
- formats[16] = "HH:mm:sszzzzzz";
- formats[17] = "HH:mm:ss.fzzzzzz";
- formats[18] = "HH:mm:ss.ffzzzzzz";
- formats[19] = "HH:mm:ss.fffzzzzzz";
- formats[20] = "HH:mm:ss.ffffzzzzzz";
- formats[21] = "HH:mm:ss.fffffzzzzzz";
- formats[22] = "HH:mm:ss.ffffffzzzzzz";
- formats[23] = "HH:mm:ss.fffffffzzzzzz";
- string time = "10:27:27.123";
-
- DateTime dtReturned =
- DateTime.ParseExact(time, formats, DateTimeFormatInfo.InvariantInfo,
- DateTimeStyles.AllowLeadingWhite|DateTimeStyles.AllowTrailingWhite);
-
- DateTime dtNow = DateTime.Now;
- DateTime dtExpected = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day, 10, 27, 27, 123);
-
- if (dtExpected == dtReturned)
- {
- TestLibrary.Logging.WriteLine("PASS");
- return 100;
- }
- else
- {
- TestLibrary.Logging.WriteLine("Expected: {0}", dtExpected.ToString("M/d/yyyy HH:mm:ss.ffff tt"));
- TestLibrary.Logging.WriteLine("Actual: {0}", dtReturned.ToString("M/d/yyyy HH:mm:ss.ffff tt"));
- TestLibrary.Logging.WriteLine("FAIL");
- return 1;
- }
- }
- catch (Exception e)
- {
- TestLibrary.Logging.WriteLine("Unexpected exception: {0}", e.ToString());
- TestLibrary.Logging.WriteLine("FAIL");
- return 1;
- }
- }
-}
diff --git a/tests/src/CoreMangLib/system/text/encoding/shift_jis.cs b/tests/src/CoreMangLib/system/text/encoding/shift_jis.cs
deleted file mode 100644
index 68ce5e21ba..0000000000
--- a/tests/src/CoreMangLib/system/text/encoding/shift_jis.cs
+++ /dev/null
@@ -1,224 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-using System;
-using System.Text;
-using TestLibrary;
-
-public class Shift_JisTest
-{
- public static int Main(string[] args)
- {
- Shift_JisTest test = new Shift_JisTest();
- TestLibrary.TestFramework.BeginTestCase("Testing Shift_Jis encoding support in CoreCLR");
-
- if (test.RunTests())
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.Logging.WriteLine("PASS");
- return 100;
- }
- else
- {
- TestLibrary.TestFramework.EndTestCase();
- TestLibrary.Logging.WriteLine("FAIL");
- return 0;
- }
- }
-
- public bool RunTests()
- {
- bool retVal = true;
-
- TestLibrary.Logging.WriteLine("[Positive]");
- // We now support only Unicode and UTF8 encodings
- //retVal = PosTest1() && retVal;
- //retVal = PosTest2() && retVal;
- //retVal = PosTest3() && retVal;
- //retVal = PosTest4() && retVal;
- retVal = NegTest1() && retVal;
-
- return retVal;
- }
-
- public bool NegTest1()
- {
- bool ret = true;
- TestLibrary.TestFramework.BeginScenario("Creating the shift_jis encoding");
-
- try
- {
- Encoding enc = Encoding.GetEncoding("shift_jis");
-
- ret = false;
- TestFramework.LogError("00F", "Encoding created unexpectedly. Expected argument exception. Actual: Create encoding with name: " + enc.WebName);
- }
- catch (NotSupportedException)
- {
- // Expected
- }
- catch (ArgumentException)
- {
- // Expected
- }
- catch (Exception exc)
- {
- ret = false;
- TestFramework.LogError("010", "Unexpected error: " + exc.ToString());
- }
- return ret;
- }
-
- public bool PosTest1()
- {
- bool ret = true;
- TestLibrary.TestFramework.BeginScenario("Creating the shift_jis encoding");
-
- try
- {
- Encoding enc2 = Encoding.GetEncoding("shift_jis");
- if (enc2.WebName != "shift_jis")
- {
- ret = false;
- TestFramework.LogError("002", "Error creating encoding. Web name not as expected. Expected: shift_jis Actual: " + enc2.WebName);
- }
-
- Encoding enc3 = Encoding.GetEncoding("sHiFT_JIs");
- if (enc3.WebName != "shift_jis")
- {
- ret = false;
- TestFramework.LogError("003", "Error creating encoding. Web name not as expected. Expected: shift_jis Actual: " + enc3.WebName);
- }
- }
- catch (Exception exc)
- {
- ret = false;
- TestFramework.LogError("004", "Unexpected error: " + exc.ToString());
- }
- return ret;
- }
-
- public bool PosTest2()
- {
- bool ret = true;
- TestLibrary.TestFramework.BeginScenario("Encoding strings with the shift_jis encoding");
-
- try
- {
- Encoding enc = Encoding.GetEncoding("shift_jis");
-
- string str = "ABc";
- byte[] bytes = enc.GetBytes(str);
- byte[] expected = new byte[] { 0x41, 0x42, 0x63 };
-
- if (!Utilities.CompareBytes(bytes, expected))
- {
- ret = false;
- TestFramework.LogError("005", "Encoding str -> bytes not as expected. Str: " + str + " Expected bytes: " + Utilities.ByteArrayToString(expected) + " Actual bytes: " + Utilities.ByteArrayToString(bytes));
- }
-
- str = "";
- bytes = enc.GetBytes(str);
- expected = new byte[0];
-
- if (!Utilities.CompareBytes(bytes, expected))
- {
- ret = false;
- TestFramework.LogError("006", "Encoding str -> bytes not as expected. Str: " + str + " Expected bytes: " + Utilities.ByteArrayToString(expected) + " Actual bytes: " + Utilities.ByteArrayToString(bytes));
- }
-
- str = "A\xff70\x3000\x00b6\x25ef\x044f\x9adc\x9ed1";
- bytes = enc.GetBytes(str);
- expected = new byte[] { 0x41, 0xb0, 0x81, 0x40, 0x81, 0xf7, 0x81, 0xfc, 0x84, 0x91, 0xfc, 0x40, 0xfc, 0x4b };
-
- if (!Utilities.CompareBytes(bytes, expected))
- {
- ret = false;
- TestFramework.LogError("007", "Encoding str -> bytes not as expected. Str: " + str + " Expected bytes: " + Utilities.ByteArrayToString(expected) + " Actual bytes: " + Utilities.ByteArrayToString(bytes));
- }
- }
- catch (Exception exc)
- {
- ret = false;
- TestFramework.LogError("008", "Unexpected error: " + exc.ToString());
- }
- return ret;
- }
-
- public bool PosTest3()
- {
- bool ret = true;
- TestLibrary.TestFramework.BeginScenario("Encoding char[]s with the shift_jis encoding");
-
- try
- {
- Encoding enc = Encoding.GetEncoding("shift_jis");
-
- char[] str = new char[] { 'A', 'B', 'c' };
- byte[] bytes = enc.GetBytes(str);
- byte[] expected = new byte[] { 0x41, 0x42, 0x63 };
-
- if (!Utilities.CompareBytes(bytes, expected))
- {
- ret = false;
- TestFramework.LogError("009", "Encoding char[] -> bytes not as expected. Str: " + new string(str) + " Expected bytes: " + Utilities.ByteArrayToString(expected) + " Actual bytes: " + Utilities.ByteArrayToString(bytes));
- }
-
- str = new char[0];
- bytes = enc.GetBytes(str);
- expected = new byte[0];
-
- if (!Utilities.CompareBytes(bytes, expected))
- {
- ret = false;
- TestFramework.LogError("00A", "Encoding char[] -> bytes not as expected. Str: " + new string(str) + " Expected bytes: " + Utilities.ByteArrayToString(expected) + " Actual bytes: " + Utilities.ByteArrayToString(bytes));
- }
-
- str = new char[] { 'A', '\xff70', '\x3000', '\x00b6', '\x25ef', '\x044f', '\x9adc', '\x9ed1' };
- bytes = enc.GetBytes(str);
- expected = new byte[] { 0x41, 0xb0, 0x81, 0x40, 0x81, 0xf7, 0x81, 0xfc, 0x84, 0x91, 0xfc, 0x40, 0xfc, 0x4b };
-
- if (!Utilities.CompareBytes(bytes, expected))
- {
- ret = false;
- TestFramework.LogError("00B", "Encoding char[] -> bytes not as expected. Str: " + new string(str) + " Expected bytes: " + Utilities.ByteArrayToString(expected) + " Actual bytes: " + Utilities.ByteArrayToString(bytes));
- }
- }
- catch (Exception exc)
- {
- ret = false;
- TestFramework.LogError("00C", "Unexpected error: " + exc.ToString());
- }
- return ret;
- }
-
- public bool PosTest4()
- {
- bool ret = true;
- TestLibrary.TestFramework.BeginScenario("Decoding byte[]s with the shift_jis encoding");
-
- try
- {
- Encoding enc = Encoding.GetEncoding("shift_jis");
-
- byte[] bytes = { 0x87, 0x90 };
- char[] expected = new char[] {'\x2252'};
-
- char[] actual = enc.GetChars(bytes);
-
- if (!Utilities.CompareChars(actual, expected))
- {
- ret = false;
- TestFramework.LogError("00D", "Decoding byte[] -> char[] not as expected! Expected: 0x8786 Actual ");
- foreach (char c in actual) Logging.Write("0x" + ((int)c).ToString("x") + " ");
- }
- }
- catch (Exception exc)
- {
- ret = false;
- TestFramework.LogError("00E", "Unexpected error: " + exc.ToString());
- }
- return ret;
- }
-
-}
diff --git a/tests/src/GC/API/GC/TotalMemory.cs b/tests/src/GC/API/GC/TotalMemory.cs
index ad5384621c..d6233b1c8c 100644
--- a/tests/src/GC/API/GC/TotalMemory.cs
+++ b/tests/src/GC/API/GC/TotalMemory.cs
@@ -23,6 +23,7 @@ public class Test {
int[] array2 = new int[40000];
int memnew = (int) GC.GetTotalMemory(false);
Console.WriteLine("Total Memory: " + memnew);
+ GC.KeepAlive(array2);
if(memnew >= memold) {
Console.WriteLine("Test for GC.TotalMemory passed!");
diff --git a/tests/src/GC/Coverage/delete_next_card_table.csproj b/tests/src/GC/Coverage/delete_next_card_table.csproj
index 98bd7f38e0..0c80943169 100644
--- a/tests/src/GC/Coverage/delete_next_card_table.csproj
+++ b/tests/src/GC/Coverage/delete_next_card_table.csproj
@@ -14,6 +14,7 @@
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
<GCStressIncompatible>true</GCStressIncompatible>
+ <IsLongRunningGCTest>true</IsLongRunningGCTest>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -35,4 +36,4 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/Interop/common/types.h b/tests/src/Interop/common/types.h
index cb59c42e9d..f183a07e4e 100755
--- a/tests/src/Interop/common/types.h
+++ b/tests/src/Interop/common/types.h
@@ -5,6 +5,7 @@
#ifndef _INTEROP_TYPES__H
#define _INTEROP_TYPES__H
+#undef INT_MIN
#define INT_MIN (-2147483647 - 1)
typedef char16_t WCHAR;
diff --git a/tests/src/JIT/Directed/shift/uint64Opt.cs b/tests/src/JIT/Directed/shift/uint64Opt.cs
new file mode 100644
index 0000000000..1c8a984e7f
--- /dev/null
+++ b/tests/src/JIT/Directed/shift/uint64Opt.cs
@@ -0,0 +1,178 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+using System;
+
+// Test long and ulong shifts by 0, 32 and 64 constants that can be optimized.
+namespace ShiftTest
+{
+
+ public class ulong64Test
+ {
+ static int shiftByZero(ulong arg)
+ {
+ if (arg != arg << 0)
+ {
+ return -1;
+ }
+ if (arg != arg >> 0)
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ static int shiftBy32(ulong arg)
+ {
+ ulong powerOfTwo = 0x100000000UL;
+ if (arg * powerOfTwo != arg << 32)
+ {
+ return -1;
+ }
+ if (arg / powerOfTwo != arg >> 32)
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ static int shiftBy64(ulong arg)
+ {
+ // The shift count is computed from count & 0x3F.
+ if (arg != arg << 64)
+ {
+ return -1;
+ }
+ if (arg != arg >> 64)
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ public static int run(ulong arg)
+ {
+ bool passed = true;
+ if (shiftByZero(arg) != 100)
+ {
+ passed = false;
+ Console.WriteLine("FAILED for uLong shiftByZero");
+ }
+ if (shiftBy32(arg) != 100)
+ {
+ passed = false;
+ Console.WriteLine("FAILED for uLong shiftBy32");
+ }
+ if (shiftBy64(arg) != 100)
+ {
+ passed = false;
+ Console.WriteLine("FAILED for uLong shiftBy64");
+ }
+ if (passed)
+ {
+ return 100;
+ }
+ return -1;
+ }
+ }
+
+ public class long64Test
+ {
+ static int shiftByZero(long arg)
+ {
+ if (arg != arg << 0)
+ {
+ return -1;
+ }
+ if (arg != arg >> 0)
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ static int shiftBy32(long arg)
+ {
+ long powerOfTwo = 0x100000000L;
+ if (arg * powerOfTwo != arg << 32)
+ {
+ return -1;
+ }
+ if (arg / powerOfTwo != arg >> 32)
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ static int shiftBy64(long arg)
+ {
+ // The shift count is computed from count & 0x3F.
+ if (arg != arg << 64)
+ {
+ return -1;
+ }
+ if (arg != arg >> 64)
+ {
+ return -1;
+ }
+ if (-arg != -arg >> 64)
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ public static int run(long arg)
+ {
+ bool passed = true;
+ if (shiftByZero(arg) != 100)
+ {
+ passed = false;
+ Console.WriteLine("FAILED for Long shiftByZero");
+ }
+ if (shiftBy32(arg) != 100)
+ {
+ passed = false;
+ Console.WriteLine("FAILED for Long shiftBy32");
+ }
+ if (shiftBy64(arg) != 100)
+ {
+ passed = false;
+ Console.WriteLine("FAILED for Long shiftBy64");
+ }
+ if (passed)
+ {
+ return 100;
+ }
+ return -1;
+ }
+ }
+
+ class Test
+ {
+ public static int Main()
+ {
+ bool passed = true;
+ ulong ulongArg = 0x3F134;
+ if (ulong64Test.run(ulongArg) != 100)
+ {
+ passed = false;
+ }
+ long longArg = 0x3F134;
+ if (long64Test.run(longArg) != 100)
+ {
+ passed = false;
+ }
+ if (passed)
+ {
+ Console.WriteLine("PASSED");
+ return 100;
+ }
+ Console.WriteLine("FAILED");
+ return -1;
+ }
+ }
+}
diff --git a/tests/src/JIT/Directed/shift/uint64Opt_d.csproj b/tests/src/JIT/Directed/shift/uint64Opt_d.csproj
new file mode 100644
index 0000000000..dc1d1e1b7a
--- /dev/null
+++ b/tests/src/JIT/Directed/shift/uint64Opt_d.csproj
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{1562736B-261A-40CC-8AFE-C0F1C2892DEB}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <PropertyGroup>
+ <DebugType>
+ </DebugType>
+ <Optimize>
+ </Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="uint64Opt.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)minimal\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)minimal\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Directed/shift/uint64Opt_do.csproj b/tests/src/JIT/Directed/shift/uint64Opt_do.csproj
new file mode 100644
index 0000000000..cbef86f528
--- /dev/null
+++ b/tests/src/JIT/Directed/shift/uint64Opt_do.csproj
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{8FB8C934-E5DA-4A20-930B-5C30BE80831A}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <PropertyGroup>
+ <DebugType>
+ </DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="uint64Opt.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)minimal\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)minimal\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Directed/shift/uint64Opt_r.csproj b/tests/src/JIT/Directed/shift/uint64Opt_r.csproj
new file mode 100644
index 0000000000..157c0abaec
--- /dev/null
+++ b/tests/src/JIT/Directed/shift/uint64Opt_r.csproj
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{DB8A5DD9-466F-484E-AEBA-2B78F1FF3633}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <PropertyGroup>
+ <DebugType>
+ </DebugType>
+ <Optimize>
+ </Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="uint64Opt.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)minimal\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)minimal\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Directed/shift/uint64Opt_ro.csproj b/tests/src/JIT/Directed/shift/uint64Opt_ro.csproj
new file mode 100644
index 0000000000..c7e008d96d
--- /dev/null
+++ b/tests/src/JIT/Directed/shift/uint64Opt_ro.csproj
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{50453737-C530-4473-8D14-123A43C9DA9F}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <PropertyGroup>
+ <DebugType>
+ </DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="uint64Opt.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)minimal\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)minimal\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_d.csproj b/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_d.csproj
index a4054021e7..a694797c3c 100644
--- a/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_d.csproj
+++ b/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_d.csproj
@@ -15,8 +15,9 @@
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <!-- NOTE: this test simply takes too long to complete under GC stress; it is not fundamentally incompatible -->
+ <!-- NOTE: this test simply takes too long to complete under GC stress/heap verify; it is not fundamentally incompatible -->
<GCStressIncompatible Condition="'$(Platform)' == 'x86'">true</GCStressIncompatible>
+ <HeapVerifyIncompatible>true</HeapVerifyIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
diff --git a/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_r.csproj b/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_r.csproj
index bd5ae97d4b..4b75ff430d 100644
--- a/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_r.csproj
+++ b/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_r.csproj
@@ -15,8 +15,9 @@
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <!-- NOTE: this test simply takes too long to complete under GC stress; it is not fundamentally incompatible -->
+ <!-- NOTE: this test simply takes too long to complete under GC stress/heap verify; it is not fundamentally incompatible -->
<GCStressIncompatible Condition="'$(Platform)' == 'x86'">true</GCStressIncompatible>
+ <HeapVerifyIncompatible>true</HeapVerifyIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
diff --git a/tests/src/JIT/Methodical/refany/format.cs b/tests/src/JIT/Methodical/refany/format.cs
index 7b4c90cacc..33f9273c1a 100644
--- a/tests/src/JIT/Methodical/refany/format.cs
+++ b/tests/src/JIT/Methodical/refany/format.cs
@@ -6,6 +6,16 @@ using System;
namespace JitTest
{
+ public enum PlatformID
+ {
+ MacOSX = 6,
+ Unix = 4,
+ Win32NT = 2,
+ Win32S = 0,
+ Win32Windows = 1,
+ WinCE = 3,
+ Xbox = 5,
+ }
internal enum Mood
{
good,
diff --git a/tests/src/JIT/Methodical/refany/format.il b/tests/src/JIT/Methodical/refany/format.il
index 41bd149185..86cae213bc 100644
--- a/tests/src/JIT/Methodical/refany/format.il
+++ b/tests/src/JIT/Methodical/refany/format.il
@@ -17,6 +17,18 @@
.module format.exe
.namespace JitTest
{
+ .class public auto ansi sealed PlatformID
+ extends [mscorlib]System.Enum
+ {
+ .field public specialname rtspecialname int32 value__
+ .field public static literal valuetype JitTest.PlatformID MacOSX = int32(0x00000006)
+ .field public static literal valuetype JitTest.PlatformID Unix = int32(0x00000004)
+ .field public static literal valuetype JitTest.PlatformID Win32NT = int32(0x00000002)
+ .field public static literal valuetype JitTest.PlatformID Win32S = int32(0x00000000)
+ .field public static literal valuetype JitTest.PlatformID Win32Windows = int32(0x00000001)
+ .field public static literal valuetype JitTest.PlatformID WinCE = int32(0x00000003)
+ .field public static literal valuetype JitTest.PlatformID Xbox = int32(0x00000005)
+ } // end of class JitTest.PlatformID
.class value private auto ansi serializable sealed Mood
extends [mscorlib]System.Enum
{
@@ -37,7 +49,7 @@
.field private float64 m_dbl
.field private bool m_b
.field private static value class [mscorlib]System.DateTime m_t
- .field private value class [mscorlib]System.PlatformID m_pid
+ .field private value class JitTest.PlatformID m_pid
.field private value class JitTest.Mood m_mood
.method private hidebysig static string
Format(typedref format,
@@ -401,7 +413,7 @@
IL_031d: ldarg.1
IL_031e: refanytype
IL_0320: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(value class [mscorlib]System.RuntimeTypeHandle)
- IL_0325: ldtoken [mscorlib]System.PlatformID
+ IL_0325: ldtoken JitTest.PlatformID
IL_032a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(value class [mscorlib]System.RuntimeTypeHandle)
IL_032f: beq.s IL_0337
@@ -410,9 +422,9 @@
IL_0337: ldloc.2
IL_0338: ldarg.1
- IL_0339: refanyval [mscorlib]System.PlatformID
- ldobj [mscorlib]System.PlatformID
- IL_033e: box [mscorlib]System.PlatformID
+ IL_0339: refanyval JitTest.PlatformID
+ ldobj JitTest.PlatformID
+ IL_033e: box JitTest.PlatformID
IL_0343: call instance string [mscorlib]System.Enum::ToString()
IL_0348: call string [mscorlib]System.String::Concat(string,
string)
@@ -551,7 +563,7 @@
float64 V_5,
bool V_6,
value class [mscorlib]System.DateTime V_7,
- value class [mscorlib]System.PlatformID V_8,
+ value class JitTest.PlatformID V_8,
value class JitTest.Mood V_9)
IL_0000: ldc.i4.s 10
IL_0002: stloc.0
@@ -644,7 +656,7 @@
string)
IL_00f6: ldstr "{%p}"
IL_00fb: ldloca.s V_8
- IL_00fd: mkrefany [mscorlib]System.PlatformID
+ IL_00fd: mkrefany JitTest.PlatformID
IL_0102: ldstr "{Win32NT}"
IL_0107: call void JitTest.TestClass::Test(string,
typedref,
@@ -732,8 +744,8 @@
string)
IL_00e1: ldstr "{%p}"
IL_00e6: ldarg.0
- IL_00e7: ldflda value class [mscorlib]System.PlatformID JitTest.TestClass::m_pid
- IL_00ec: mkrefany [mscorlib]System.PlatformID
+ IL_00e7: ldflda value class JitTest.PlatformID JitTest.TestClass::m_pid
+ IL_00ec: mkrefany JitTest.PlatformID
IL_00f1: ldstr "{Win32NT}"
IL_00f6: call void JitTest.TestClass::Test(string,
typedref,
@@ -758,7 +770,7 @@
float64& dbl,
bool& b,
value class [mscorlib]System.DateTime& t,
- value class [mscorlib]System.PlatformID& pid) il managed
+ value class JitTest.PlatformID& pid) il managed
{
.maxstack 5
IL_0000: ldstr "{%d}"
@@ -825,7 +837,7 @@
string)
IL_00bd: ldstr "{%p}"
IL_00c2: ldarg.s pid
- IL_00c4: mkrefany [mscorlib]System.PlatformID
+ IL_00c4: mkrefany JitTest.PlatformID
IL_00c9: ldstr "{Win32NT}"
IL_00ce: call void JitTest.TestClass::Test(string,
typedref,
@@ -845,7 +857,7 @@
float64 V_5,
bool V_6,
value class [mscorlib]System.DateTime V_7,
- value class [mscorlib]System.PlatformID V_8)
+ value class JitTest.PlatformID V_8)
IL_0000: ldc.i4.s 20
IL_0002: stloc.0
IL_0003: ldc.i4.s 21
@@ -888,7 +900,7 @@
float64&,
bool&,
value class [mscorlib]System.DateTime&,
- value class [mscorlib]System.PlatformID&)
+ value class JitTest.PlatformID&)
IL_0049: ret
} // end of method TestClass::TestArgSlots
@@ -904,7 +916,7 @@
float64[] V_5,
bool[] V_6,
value class [mscorlib]System.DateTime[] V_7,
- value class [mscorlib]System.PlatformID[] V_8,
+ value class JitTest.PlatformID[] V_8,
value class JitTest.Mood[] V_9,
int32[] V_10,
unsigned int32[] V_11,
@@ -913,7 +925,7 @@
float32[] V_14,
float64[] V_15,
bool[] V_16,
- value class [mscorlib]System.PlatformID[] V_17,
+ value class JitTest.PlatformID[] V_17,
value class JitTest.Mood[] V_18)
IL_0000: ldc.i4.1
IL_0001: newarr [mscorlib]System.Int32
@@ -993,7 +1005,7 @@
int32,
int32)
IL_00a3: ldc.i4.1
- IL_00a4: newarr [mscorlib]System.PlatformID
+ IL_00a4: newarr JitTest.PlatformID
IL_00a9: stloc.s V_17
IL_00ab: ldloc.s V_17
IL_00ad: ldc.i4.0
@@ -1089,8 +1101,8 @@
IL_01b3: ldstr "{%p}"
IL_01b8: ldloc.s V_8
IL_01ba: ldc.i4.0
- IL_01bb: ldelema [mscorlib]System.PlatformID
- IL_01c0: mkrefany [mscorlib]System.PlatformID
+ IL_01bb: ldelema JitTest.PlatformID
+ IL_01c0: mkrefany JitTest.PlatformID
IL_01c5: ldstr "{Win32NT}"
IL_01ca: call void JitTest.TestClass::Test(string,
typedref,
@@ -1163,7 +1175,7 @@
IL_002d: stfld bool JitTest.TestClass::m_b
IL_0032: ldarg.0
IL_0033: ldc.i4.2
- IL_0034: stfld value class [mscorlib]System.PlatformID JitTest.TestClass::m_pid
+ IL_0034: stfld value class JitTest.PlatformID JitTest.TestClass::m_pid
IL_0039: ldarg.0
IL_003a: ldc.i4.0
IL_003b: stfld value class JitTest.Mood JitTest.TestClass::m_mood
diff --git a/tests/src/JIT/Methodical/refany/longsig.il b/tests/src/JIT/Methodical/refany/longsig.il
index 0aafa47aab..395d042595 100644
--- a/tests/src/JIT/Methodical/refany/longsig.il
+++ b/tests/src/JIT/Methodical/refany/longsig.il
@@ -17,6 +17,18 @@
.module format.exe
.namespace JitTest
{
+ .class public auto ansi sealed PlatformID
+ extends [mscorlib]System.Enum
+ {
+ .field public specialname rtspecialname int32 value__
+ .field public static literal valuetype JitTest.PlatformID MacOSX = int32(0x00000006)
+ .field public static literal valuetype JitTest.PlatformID Unix = int32(0x00000004)
+ .field public static literal valuetype JitTest.PlatformID Win32NT = int32(0x00000002)
+ .field public static literal valuetype JitTest.PlatformID Win32S = int32(0x00000000)
+ .field public static literal valuetype JitTest.PlatformID Win32Windows = int32(0x00000001)
+ .field public static literal valuetype JitTest.PlatformID WinCE = int32(0x00000003)
+ .field public static literal valuetype JitTest.PlatformID Xbox = int32(0x00000005)
+ } // end of class JitTest.PlatformID
.class value private auto ansi serializable sealed Mood
extends [mscorlib]System.Enum
{
@@ -37,7 +49,7 @@
.field private float64 m_dbl
.field private bool m_b
.field private static value class [mscorlib]System.DateTime m_t
- .field private value class [mscorlib]System.PlatformID m_pid
+ .field private value class JitTest.PlatformID m_pid
.field private value class JitTest.Mood m_mood
.method private hidebysig static string
Format(typedref format,
@@ -401,7 +413,7 @@
IL_031d: ldarg.1
IL_031e: refanytype
IL_0320: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(value class [mscorlib]System.RuntimeTypeHandle)
- IL_0325: ldtoken [mscorlib]System.PlatformID
+ IL_0325: ldtoken JitTest.PlatformID
IL_032a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(value class [mscorlib]System.RuntimeTypeHandle)
IL_032f: beq.s IL_0337
@@ -410,9 +422,9 @@
IL_0337: ldloc.2
IL_0338: ldarg.1
- IL_0339: refanyval [mscorlib]System.PlatformID
- ldobj [mscorlib]System.PlatformID
- IL_033e: box [mscorlib]System.PlatformID
+ IL_0339: refanyval JitTest.PlatformID
+ ldobj JitTest.PlatformID
+ IL_033e: box JitTest.PlatformID
IL_0343: call instance string [mscorlib]System.Enum::ToString()
IL_0348: call string [mscorlib]System.String::Concat(string,
string)
@@ -551,7 +563,7 @@
[5] float64 V_5,
[6] bool V_6,
[7] value class [mscorlib]System.DateTime V_7,
- [8] value class [mscorlib]System.PlatformID V_8,
+ [8] value class JitTest.PlatformID V_8,
[9] value class JitTest.Mood V_9)
IL_0000: ldc.i4.s 10
IL_0002: stloc.0
@@ -644,7 +656,7 @@
string)
IL_00f6: ldstr "{%p}"
IL_00fb: ldloca.s V_8
- IL_00fd: mkrefany [mscorlib]System.PlatformID
+ IL_00fd: mkrefany JitTest.PlatformID
IL_0102: ldstr "{Win32NT}"
IL_0107: call void JitTest.TestClass::Test(string,
typedref,
@@ -732,8 +744,8 @@
string)
IL_00e1: ldstr "{%p}"
IL_00e6: ldarg.0
- IL_00e7: ldflda value class [mscorlib]System.PlatformID JitTest.TestClass::m_pid
- IL_00ec: mkrefany [mscorlib]System.PlatformID
+ IL_00e7: ldflda value class JitTest.PlatformID JitTest.TestClass::m_pid
+ IL_00ec: mkrefany JitTest.PlatformID
IL_00f1: ldstr "{Win32NT}"
IL_00f6: call void JitTest.TestClass::Test(string,
typedref,
@@ -758,7 +770,7 @@
float64& dbl,
bool& b,
value class [mscorlib]System.DateTime& t,
- value class [mscorlib]System.PlatformID& pid) il managed
+ value class JitTest.PlatformID& pid) il managed
{
.maxstack 5
IL_0000: ldstr "{%d}"
@@ -825,7 +837,7 @@
string)
IL_00bd: ldstr "{%p}"
IL_00c2: ldarg.s pid
- IL_00c4: mkrefany [mscorlib]System.PlatformID
+ IL_00c4: mkrefany JitTest.PlatformID
IL_00c9: ldstr "{Win32NT}"
IL_00ce: call void JitTest.TestClass::Test(string,
typedref,
@@ -845,7 +857,7 @@
[5] float64 V_5,
[6] bool V_6,
[7] value class [mscorlib]System.DateTime V_7,
- [8] value class [mscorlib]System.PlatformID V_8)
+ [8] value class JitTest.PlatformID V_8)
IL_0000: ldc.i4.s 20
IL_0002: stloc.0
IL_0003: ldc.i4.s 21
@@ -888,7 +900,7 @@
float64&,
bool&,
value class [mscorlib]System.DateTime&,
- value class [mscorlib]System.PlatformID&)
+ value class JitTest.PlatformID&)
IL_0049: ret
} // end of method TestClass::TestArgSlots
@@ -904,7 +916,7 @@
[5] float64[] V_5,
[6] bool[] V_6,
[7] value class [mscorlib]System.DateTime[] V_7,
- [8] value class [mscorlib]System.PlatformID[] V_8,
+ [8] value class JitTest.PlatformID[] V_8,
[9] value class JitTest.Mood[] V_9,
[10] int32[] V_10,
[11] unsigned int32[] V_11,
@@ -913,7 +925,7 @@
[14] float32[] V_14,
[15] float64[] V_15,
[16] bool[] V_16,
- [17] value class [mscorlib]System.PlatformID[] V_17,
+ [17] value class JitTest.PlatformID[] V_17,
[18] value class JitTest.Mood[] V_18)
IL_0000: ldc.i4.1
IL_0001: newarr [mscorlib]System.Int32
@@ -993,7 +1005,7 @@
int32,
int32)
IL_00a3: ldc.i4.1
- IL_00a4: newarr [mscorlib]System.PlatformID
+ IL_00a4: newarr JitTest.PlatformID
IL_00a9: stloc.s V_17
IL_00ab: ldloc.s V_17
IL_00ad: ldc.i4.0
@@ -1089,8 +1101,8 @@
IL_01b3: ldstr "{%p}"
IL_01b8: ldloc.s V_8
IL_01ba: ldc.i4.0
- IL_01bb: ldelema [mscorlib]System.PlatformID
- IL_01c0: mkrefany [mscorlib]System.PlatformID
+ IL_01bb: ldelema JitTest.PlatformID
+ IL_01c0: mkrefany JitTest.PlatformID
IL_01c5: ldstr "{Win32NT}"
IL_01ca: call void JitTest.TestClass::Test(string,
typedref,
@@ -1163,7 +1175,7 @@
IL_002d: stfld bool JitTest.TestClass::m_b
IL_0032: ldarg.0
IL_0033: ldc.i4.2
- IL_0034: stfld value class [mscorlib]System.PlatformID JitTest.TestClass::m_pid
+ IL_0034: stfld value class JitTest.PlatformID JitTest.TestClass::m_pid
IL_0039: ldarg.0
IL_003a: ldc.i4.0
IL_003b: stfld value class JitTest.Mood JitTest.TestClass::m_mood
diff --git a/tests/src/JIT/Methodical/refany/shortsig.il b/tests/src/JIT/Methodical/refany/shortsig.il
index f336dfd2a5..e013baeecc 100644
--- a/tests/src/JIT/Methodical/refany/shortsig.il
+++ b/tests/src/JIT/Methodical/refany/shortsig.il
@@ -16,6 +16,18 @@
}
.namespace JitTest
{
+ .class public auto ansi sealed PlatformID
+ extends [mscorlib]System.Enum
+ {
+ .field public specialname rtspecialname int32 value__
+ .field public static literal valuetype JitTest.PlatformID MacOSX = int32(0x00000006)
+ .field public static literal valuetype JitTest.PlatformID Unix = int32(0x00000004)
+ .field public static literal valuetype JitTest.PlatformID Win32NT = int32(0x00000002)
+ .field public static literal valuetype JitTest.PlatformID Win32S = int32(0x00000000)
+ .field public static literal valuetype JitTest.PlatformID Win32Windows = int32(0x00000001)
+ .field public static literal valuetype JitTest.PlatformID WinCE = int32(0x00000003)
+ .field public static literal valuetype JitTest.PlatformID Xbox = int32(0x00000005)
+ } // end of class JitTest.PlatformID
.class value private auto ansi serializable sealed Mood
extends [mscorlib]System.Enum
{
@@ -36,7 +48,7 @@
.field private float64 m_dbl
.field private bool m_b
.field private static value class [mscorlib]System.DateTime m_t
- .field private value class [mscorlib]System.PlatformID m_pid
+ .field private value class JitTest.PlatformID m_pid
.field private value class JitTest.Mood m_mood
.method private hidebysig static string
Format(typedref format,
@@ -400,7 +412,7 @@
IL_031d: ldarg.1
IL_031e: refanytype
IL_0320: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(value class [mscorlib]System.RuntimeTypeHandle)
- IL_0325: ldtoken [mscorlib]System.PlatformID
+ IL_0325: ldtoken JitTest.PlatformID
IL_032a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(value class [mscorlib]System.RuntimeTypeHandle)
IL_032f: beq.s IL_0337
@@ -409,9 +421,9 @@
IL_0337: ldloc.2
IL_0338: ldarg.1
- IL_0339: refanyval [mscorlib]System.PlatformID
- ldobj [mscorlib]System.PlatformID
- IL_033e: box [mscorlib]System.PlatformID
+ IL_0339: refanyval JitTest.PlatformID
+ ldobj JitTest.PlatformID
+ IL_033e: box JitTest.PlatformID
IL_0343: call instance string [mscorlib]System.Enum::ToString()
IL_0348: call string [mscorlib]System.String::Concat(string,
string)
@@ -550,7 +562,7 @@
[5] float64 V_5,
[6] bool V_6,
[7] value class [mscorlib]System.DateTime V_7,
- [8] value class [mscorlib]System.PlatformID V_8,
+ [8] value class JitTest.PlatformID V_8,
[9] value class JitTest.Mood V_9)
IL_0000: ldc.i4.s 10
IL_0002: stloc.0
@@ -643,7 +655,7 @@
string)
IL_00f6: ldstr "{%p}"
IL_00fb: ldloca.s V_8
- IL_00fd: mkrefany [mscorlib]System.PlatformID
+ IL_00fd: mkrefany JitTest.PlatformID
IL_0102: ldstr "{Win32NT}"
IL_0107: call void JitTest.TestClass::Test(string,
typedref,
@@ -731,8 +743,8 @@
string)
IL_00e1: ldstr "{%p}"
IL_00e6: ldarg.0
- IL_00e7: ldflda value class [mscorlib]System.PlatformID JitTest.TestClass::m_pid
- IL_00ec: mkrefany [mscorlib]System.PlatformID
+ IL_00e7: ldflda value class JitTest.PlatformID JitTest.TestClass::m_pid
+ IL_00ec: mkrefany JitTest.PlatformID
IL_00f1: ldstr "{Win32NT}"
IL_00f6: call void JitTest.TestClass::Test(string,
typedref,
@@ -757,7 +769,7 @@
float64& dbl,
bool& b,
value class [mscorlib]System.DateTime& t,
- value class [mscorlib]System.PlatformID& pid) il managed
+ value class JitTest.PlatformID& pid) il managed
{
.maxstack 5
IL_0000: ldstr "{%d}"
@@ -824,7 +836,7 @@
string)
IL_00bd: ldstr "{%p}"
IL_00c2: ldarg.s pid
- IL_00c4: mkrefany [mscorlib]System.PlatformID
+ IL_00c4: mkrefany JitTest.PlatformID
IL_00c9: ldstr "{Win32NT}"
IL_00ce: call void JitTest.TestClass::Test(string,
typedref,
@@ -844,7 +856,7 @@
[5] float64 V_5,
[6] bool V_6,
[7] value class [mscorlib]System.DateTime V_7,
- [8] value class [mscorlib]System.PlatformID V_8)
+ [8] value class JitTest.PlatformID V_8)
IL_0000: ldc.i4.s 20
IL_0002: stloc.0
IL_0003: ldc.i4.s 21
@@ -887,7 +899,7 @@
float64&,
bool&,
value class [mscorlib]System.DateTime&,
- value class [mscorlib]System.PlatformID&)
+ value class JitTest.PlatformID&)
IL_0049: ret
} // end of method TestClass::TestArgSlots
@@ -903,7 +915,7 @@
[5] float64[] V_5,
[6] bool[] V_6,
[7] value class [mscorlib]System.DateTime[] V_7,
- [8] value class [mscorlib]System.PlatformID[] V_8,
+ [8] value class JitTest.PlatformID[] V_8,
[9] value class JitTest.Mood[] V_9,
[10] int32[] V_10,
[11] unsigned int32[] V_11,
@@ -912,7 +924,7 @@
[14] float32[] V_14,
[15] float64[] V_15,
[16] bool[] V_16,
- [17] value class [mscorlib]System.PlatformID[] V_17,
+ [17] value class JitTest.PlatformID[] V_17,
[18] value class JitTest.Mood[] V_18)
IL_0000: ldc.i4.1
IL_0001: newarr [mscorlib]System.Int32
@@ -992,7 +1004,7 @@
int32,
int32)
IL_00a3: ldc.i4.1
- IL_00a4: newarr [mscorlib]System.PlatformID
+ IL_00a4: newarr JitTest.PlatformID
IL_00a9: stloc.s V_17
IL_00ab: ldloc.s V_17
IL_00ad: ldc.i4.0
@@ -1088,8 +1100,8 @@
IL_01b3: ldstr "{%p}"
IL_01b8: ldloc.s V_8
IL_01ba: ldc.i4.0
- IL_01bb: ldelema [mscorlib]System.PlatformID
- IL_01c0: mkrefany [mscorlib]System.PlatformID
+ IL_01bb: ldelema JitTest.PlatformID
+ IL_01c0: mkrefany JitTest.PlatformID
IL_01c5: ldstr "{Win32NT}"
IL_01ca: call void JitTest.TestClass::Test(string,
typedref,
@@ -1162,7 +1174,7 @@
IL_002d: stfld bool JitTest.TestClass::m_b
IL_0032: ldarg.0
IL_0033: ldc.i4.2
- IL_0034: stfld value class [mscorlib]System.PlatformID JitTest.TestClass::m_pid
+ IL_0034: stfld value class JitTest.PlatformID JitTest.TestClass::m_pid
IL_0039: ldarg.0
IL_003a: ldc.i4.0
IL_003b: stfld value class JitTest.Mood JitTest.TestClass::m_mood
diff --git a/tests/src/JIT/Methodical/tailcall/Desktop/_il_relthread-race.csproj b/tests/src/JIT/Methodical/tailcall/Desktop/_il_relthread-race.csproj
index 72167fc191..d55824a331 100644
--- a/tests/src/JIT/Methodical/tailcall/Desktop/_il_relthread-race.csproj
+++ b/tests/src/JIT/Methodical/tailcall/Desktop/_il_relthread-race.csproj
@@ -14,6 +14,9 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+
+ <!-- NOTE: this test simply takes too long to complete under heap verify. It is not fundamentally incompatible. -->
+ <HeapVerifyIncompatible>true</HeapVerifyIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
diff --git a/tests/src/JIT/Methodical/tailcall_v4/hijacking.ilproj b/tests/src/JIT/Methodical/tailcall_v4/hijacking.ilproj
index 5d149734f4..f92efe2970 100644
--- a/tests/src/JIT/Methodical/tailcall_v4/hijacking.ilproj
+++ b/tests/src/JIT/Methodical/tailcall_v4/hijacking.ilproj
@@ -14,6 +14,10 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+
+ <!-- NOTE: this test simply takes too long to complete under heap verify. It is not fundamentally incompatible. -->
+ <GCStressIncompatible Condition="'$(Platform)' == 'x86'">true</GCStressIncompatible>
+ <HeapVerifyIncompatible Condition="'$(Platform)' == 'x86'">true</HeapVerifyIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/LICENSE.TXT b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/LICENSE.TXT
index 5e0fbafb8d..a4f22b13f9 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/LICENSE.TXT
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/LICENSE.TXT
@@ -4,7 +4,7 @@ This is a specific instance of the Open Source Initiative (OSI) BSD license temp
http://www.opensource.org/licenses/bsd-license.php
-Copyright © 2004-2008 Brent Fulgham, 2005-2015 Isaac Gouy
+Copyright © 2004-2008 Brent Fulgham, 2005-2016 Isaac Gouy
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp.cs
index c77e802989..05dbe94f09 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp.cs
@@ -16,6 +16,7 @@ using Xunit;
[assembly: OptimizeForBenchmarks]
[assembly: MeasureInstructionsRetired]
+[assembly: MeasureGCCounts]
namespace BenchmarksGame
{
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp3.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp3.cs
new file mode 100644
index 0000000000..6dcf48a422
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp3.cs
@@ -0,0 +1,142 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+/* The Computer Language Benchmarks Game
+ http://benchmarksgame.alioth.debian.org/
+
+ Based on code originally contributed by Marek Safar
+ and optimized by kasthack
+
+ modified for use with xunit-performance
+*/
+
+using Microsoft.Xunit.Performance;
+using System;
+using System.Runtime.CompilerServices;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
+[assembly: MeasureInstructionsRetired]
+[assembly: MeasureGCCounts]
+
+namespace BenchmarksGame
+{
+public class BinaryTrees3
+{
+ private const int minDepth = 4;
+ private const int Iterations = 1;
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ private static bool Bench(bool verbose = false)
+ {
+ int n = 16;
+ int maxDepth = Math.Max(minDepth + 2, n);
+ int stretchDepth = maxDepth + 1;
+ int t = 0;
+
+ int check = (TreeNode.bottomUpTree(0, stretchDepth)).itemCheck();
+ if (verbose)
+ {
+ Console.WriteLine("stretch tree of depth {0}\t check: {1}", stretchDepth, check);
+ }
+ t += check;
+
+ TreeNode longLivedTree = TreeNode.bottomUpTree(0, maxDepth);
+
+ for (int depth = minDepth; depth <= maxDepth; depth += 2)
+ {
+ int iterations = 1 << (maxDepth - depth + minDepth);
+
+ check = 0;
+ for (int i = 1; i <= iterations; i++)
+ {
+ check += (TreeNode.bottomUpTree(i, depth)).itemCheck();
+ check += (TreeNode.bottomUpTree(-i, depth)).itemCheck();
+ }
+
+ if (verbose)
+ {
+ Console.WriteLine("{0}\t trees of depth {1}\t check: {2}",
+ iterations * 2, depth, check);
+ }
+
+ t += check;
+ }
+
+ if (verbose)
+ {
+ Console.WriteLine("long lived tree of depth {0}\t check: {1}",
+ maxDepth, longLivedTree.itemCheck());
+ }
+
+ t += check;
+
+ return (t == -174785);
+ }
+
+ private class TreeNode
+ {
+ private TreeNode left, right;
+ private int item;
+
+ private TreeNode(int item)
+ {
+ this.item = item;
+ }
+
+ internal static TreeNode bottomUpTree(int item, int depth)
+ {
+ TreeNode t;
+ ChildTreeNodes(out t, item, depth - 1);
+ return t;
+ }
+
+ static void ChildTreeNodes(out TreeNode node, int item, int depth)
+ {
+ node = new TreeNode(item);
+ if ( depth > 0 )
+ {
+ ChildTreeNodes(out node.left, 2 * item - 1, depth - 1);
+ ChildTreeNodes(out node.right, 2 * item, depth - 1);
+ }
+ }
+
+ internal int itemCheck()
+ {
+ if (right == null) return item;
+ else return item + left.itemCheck() - right.itemCheck();
+ }
+ }
+
+ [Benchmark]
+ public static void Test()
+ {
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ Bench();
+ }
+ }
+ }
+ }
+
+ private static bool TestBase()
+ {
+ bool result = true;
+ for (int i = 0; i < Iterations; i++)
+ {
+ result &= Bench(true);
+ }
+ return result;
+ }
+
+ public static int Main()
+ {
+ bool result = TestBase();
+ return (result ? 100 : -1);
+ }
+}
+}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csproj
index d970a78c23..257a1d8466 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csproj
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csproj
@@ -20,6 +20,8 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
</PropertyGroup>
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCompare.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees3.csproj
index fc59c167fe..169e33d322 100644
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCompare.csproj
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees3.csproj
@@ -13,33 +13,34 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <GCStressIncompatible>true</GCStressIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
<ItemGroup>
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
<ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimecompare.cs" />
- </ItemGroup>
- <ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
+ <Compile Include="binarytrees.csharp3.cs" />
</ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)benchmark\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)benchmark\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide.cs
new file mode 100644
index 0000000000..54bd10702c
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide.cs
@@ -0,0 +1,312 @@
+/* The Computer Language Benchmarks Game
+ http://benchmarksgame.alioth.debian.org/
+ *
+ * submitted by Josh Goldfoot
+ *
+ */
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
+[assembly: MeasureInstructionsRetired]
+[assembly: MeasureGCCounts]
+
+namespace BenchmarksGame
+{
+
+public class knucleotide
+{
+#if DEBUG
+ const int Iterations = 1;
+ const string InputFile = "knucleotide-input.txt";
+ static int[] expectedCountLetter = new int[] { 1480, 974, 970, 1576 };
+ static int[] expectedCountPairs = new int[] { 420, 272, 292, 496, 273, 202, 201, 298, 316, 185, 167, 302, 470, 315, 310, 480 };
+ static int[] expectedCountFragments = new int[] { 54, 24, 4, 0, 0 };
+#else
+ const int Iterations = 10;
+ const string InputFile = "knucleotide-input-big.txt";
+ static int[] expectedCountLetter = new int[] { 302923, 198136, 197566, 301375 };
+ static int[] expectedCountPairs = new int[] { 91779, 60030, 59889, 91225, 60096, 39203, 39081, 59756, 59795, 39190, 39023, 59557, 91253, 59713, 59572, 90837 };
+ static int[] expectedCountFragments = new int[] { 11765, 3572, 380, 7, 7 };
+#endif
+
+
+ static string FindInput(string s)
+ {
+ string CoreRoot = System.Environment.GetEnvironmentVariable("CORE_ROOT");
+
+ if (CoreRoot == null)
+ {
+ Console.WriteLine("This benchmark requries CORE_ROOT to be set");
+ return null;
+ }
+
+ string inputFile = s ?? InputFile;
+
+ // Normal testing -- input file will end up next to the assembly
+ // and CoreRoot points at the test overlay dir
+ string[] pathPartsNormal = new string[] {
+ CoreRoot, "..", "..", "JIT", "Performance",
+ "CodeQuality", "BenchmarksGame", "k-nucleotide", "k-nucleotide", inputFile
+ };
+
+ string inputPathNormal = Path.Combine(pathPartsNormal);
+
+ // Perf testing -- input file will end up next to the assembly
+ // and CoreRoot points at this directory
+ string[] pathPartsPerf = new string[] { CoreRoot, inputFile };
+
+ string inputPathPerf = Path.Combine(pathPartsPerf);
+
+ string inputPath = null;
+
+ if (File.Exists(inputPathNormal))
+ {
+ inputPath = inputPathNormal;
+ }
+ else if (File.Exists(inputPathPerf))
+ {
+ inputPath = inputPathPerf;
+ }
+
+ if (inputPath != null)
+ {
+ Console.WriteLine("Using input file {0}", inputPath);
+ }
+ else
+ {
+ Console.WriteLine("Unable to find input file {0}", inputFile);
+ }
+
+ return inputPath;
+ }
+
+ public static int Main(string[] args)
+ {
+ int iterations = Iterations;
+
+ string inputFile = FindInput(InputFile);
+ if (inputFile == null)
+ {
+ throw new Exception("unable to find input");
+ }
+
+ PrepareLookups();
+ var source = new FileStream(inputFile, FileMode.Open);
+ var buffer = GetBytesForThirdSequence(source);
+ var fragmentLengths = new[] { 1, 2, 3, 4, 6, 12, 18 };
+ var dicts =
+ (from fragmentLength in fragmentLengths.AsParallel()
+ select CountFrequency(buffer, fragmentLength)).ToArray();
+ source.Dispose();
+ int res = 100;
+ for (ulong i = 0; i < 4; ++i){
+ if (dicts[0][i].V != expectedCountLetter[i]){
+ res = -1;
+ }
+ }
+ for (ulong i = 0; i < 16; ++i){
+ if (dicts[1][i].V != expectedCountPairs[i]){
+ res = -1;
+ }
+ }
+ int buflen = dicts[0].Values.Sum(x => x.V);
+ WriteFrequencies(dicts[0], buflen, 1);
+ WriteFrequencies(dicts[1], buflen, 2);
+ if (WriteCount(dicts[2], "GGT") != expectedCountFragments[0]) { res = -1; }
+ if (WriteCount(dicts[3], "GGTA") != expectedCountFragments[1]) { res = -1; }
+ if (WriteCount(dicts[4], "GGTATT") != expectedCountFragments[2]) { res = -1; }
+ if (WriteCount(dicts[5], "GGTATTTTAATT") != expectedCountFragments[3]) { res = -1; }
+ if (WriteCount(dicts[6], "GGTATTTTAATTTATAGT") != expectedCountFragments[4]) { res = -1; }
+ //Console.ReadKey();
+ return res;
+ }
+
+ private static void WriteFrequencies(Dictionary<ulong, Wrapper> freq, int buflen, int fragmentLength)
+ {
+
+ double percent = 100.0 / (buflen - fragmentLength + 1);
+ foreach (var line in (from k in freq.Keys
+ orderby freq[k].V descending
+ select string.Format("{0} {1:f3}", PrintKey(k, fragmentLength),
+ (freq.ContainsKey(k) ? freq[k].V : 0) * percent)))
+ Console.WriteLine(line);
+ Console.WriteLine();
+ }
+
+ private static int WriteCount(Dictionary<ulong, Wrapper> dictionary, string fragment)
+ {
+ ulong key = 0;
+ var keybytes = Encoding.ASCII.GetBytes(fragment.ToLower());
+ for (int i = 0; i < keybytes.Length; i++)
+ {
+ key <<= 2;
+ key |= tonum[keybytes[i]];
+ }
+ Wrapper w;
+ int count = dictionary.TryGetValue(key, out w) ? w.V : 0;
+ Console.WriteLine("{0}\t{1}",
+ count,
+ fragment);
+ return count;
+ }
+
+ private static string PrintKey(ulong key, int fragmentLength)
+ {
+ char[] items = new char[fragmentLength];
+ for (int i = 0; i < fragmentLength; ++i)
+ {
+ items[fragmentLength - i - 1] = tochar[key & 0x3];
+ key >>= 2;
+ }
+ return new string(items);
+ }
+
+ private static Dictionary<ulong, Wrapper> CountFrequency(byte[] buffer, int fragmentLength)
+ {
+ var dictionary = new Dictionary<ulong, Wrapper>();
+ ulong rollingKey = 0;
+ ulong mask = 0;
+ int cursor;
+ for (cursor = 0; cursor < fragmentLength - 1; cursor++)
+ {
+ rollingKey <<= 2;
+ rollingKey |= tonum[buffer[cursor]];
+ mask = (mask << 2) + 3;
+ }
+ mask = (mask << 2) + 3;
+ int stop = buffer.Length;
+ Wrapper w;
+ byte cursorByte;
+ while (cursor < stop)
+ {
+ if ((cursorByte = buffer[cursor++]) < (byte)'a')
+ cursorByte = buffer[cursor++];
+ rollingKey = ((rollingKey << 2) & mask) | tonum[cursorByte];
+ if (dictionary.TryGetValue(rollingKey, out w))
+ w.V++;
+ else
+ dictionary.Add(rollingKey, new Wrapper(1));
+ }
+ return dictionary;
+ }
+
+ private static byte[] GetBytesForThirdSequence(FileStream source)
+ {
+ const int buffersize = 2500120;
+ byte[] threebuffer = null;
+ var buffer = new byte[buffersize];
+ int amountRead, threebuflen, indexOfFirstByteInThreeSequence, indexOfGreaterThan, threepos, tocopy;
+ amountRead = threebuflen = indexOfFirstByteInThreeSequence = indexOfGreaterThan = threepos = tocopy = 0;
+ bool threeFound = false;
+ //var source = new FileStream(inputFile, FileMode.Open);
+ source.Seek(0, SeekOrigin.Begin);
+ while (!threeFound && (amountRead = source.Read(buffer, 0, buffersize)) > 0)
+ {
+ indexOfGreaterThan = Array.LastIndexOf(buffer, (byte)'>');
+ threeFound = (indexOfGreaterThan > -1 &&
+ buffer[indexOfGreaterThan + 1] == (byte)'T' &&
+ buffer[indexOfGreaterThan + 2] == (byte)'H');
+ if (threeFound)
+ {
+ threepos += indexOfGreaterThan;
+ threebuflen = threepos - 48;
+ threebuffer = new byte[threebuflen];
+ indexOfFirstByteInThreeSequence = Array.IndexOf<byte>(buffer, 10, indexOfGreaterThan) + 1;
+ tocopy = amountRead - indexOfFirstByteInThreeSequence;
+ if (amountRead < buffersize)
+ tocopy -= 1;
+ Buffer.BlockCopy(buffer, indexOfFirstByteInThreeSequence, threebuffer, 0, tocopy);
+ buffer = null;
+ }
+ else
+ threepos += amountRead;
+ }
+ int toread = threebuflen - tocopy;
+ source.Read(threebuffer, tocopy, toread);
+ return threebuffer;
+ }
+
+ private static byte[] tonum = new byte[256];
+ private static char[] tochar = new char[4];
+ private static void PrepareLookups()
+ {
+ tonum['a'] = 0;
+ tonum['c'] = 1;
+ tonum['g'] = 2;
+ tonum['t'] = 3;
+ tochar[0] = 'A';
+ tochar[1] = 'C';
+ tochar[2] = 'G';
+ tochar[3] = 'T';
+ }
+
+ [Benchmark(InnerIterationCount=Iterations)]
+ public static void Bench_Parallel()
+ {
+ PrepareLookups();
+ string inputFile = FindInput(InputFile);
+ var source = new FileStream(inputFile, FileMode.Open);
+
+ if (inputFile == null)
+ {
+ throw new Exception("unable to find input");
+ }
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Benchmark.InnerIterationCount; ++i)
+ {
+ var buffer = GetBytesForThirdSequence(source);
+ var fragmentLengths = new[] { 1, 2, 3, 4, 6, 12, 18 };
+ var dicts =
+ (from fragmentLength in fragmentLengths.AsParallel()
+ select CountFrequency(buffer, fragmentLength)).ToArray();
+ }
+ }
+ }
+ source.Dispose();
+ }
+ [Benchmark(InnerIterationCount=Iterations)]
+ public static void Bench_No_Parallel()
+ {
+ string inputFile = FindInput(InputFile);
+ var source = new FileStream(inputFile, FileMode.Open);
+
+ if (inputFile == null)
+ {
+ throw new Exception("unable to find input");
+ }
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Benchmark.InnerIterationCount; ++i)
+ {
+ PrepareLookups();
+ var buffer = GetBytesForThirdSequence(source);
+ var fragmentLengths = new[] { 1, 2, 3, 4, 6, 12, 18 };
+ var dicts =
+ (from fragmentLength in fragmentLengths
+ select CountFrequency(buffer, fragmentLength)).ToArray();
+ }
+ }
+ }
+ source.Dispose();
+ }
+}
+
+public class Wrapper
+{
+ public int V;
+ public Wrapper(int v) { V = v; }
+}
+
+} \ No newline at end of file
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor1.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide.csproj
index ec41ab4408..94e1dfbda8 100644
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor1.csproj
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide.csproj
@@ -13,32 +13,40 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
<ItemGroup>
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
<ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimector1.cs" />
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ <Compile Include="k-nucleotide.cs" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
+ <Content Include="knucleotide-input.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="knucleotide-input-big.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
</ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)benchmark\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)benchmark\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input-big.txt b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input-big.txt
new file mode 100644
index 0000000000..7af7cbecf9
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input-big.txt
@@ -0,0 +1,33337 @@
+>ONE Homo sapiens alu
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+>TWO IUB ambiguity codes
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
+tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa
+NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt
+cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga
+gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa
+HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca
+tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt
+tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt
+acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct
+tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt
+gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa
+accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt
+RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt
+tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag
+cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg
+ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat
+actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg
+YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa
+KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata
+aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa
+aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg
+gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc
+tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK
+tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt
+ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg
+ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa
+BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt
+aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc
+tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc
+cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac
+aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga
+tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga
+aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD
+gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg
+ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV
+taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa
+ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat
+gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg
+gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa
+tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt
+tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt
+taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca
+cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag
+aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt
+cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt
+ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW
+attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag
+ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa
+attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc
+tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta
+aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata
+cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc
+gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg
+attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca
+BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga
+DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat
+tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM
+tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR
+tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg
+taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc
+aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc
+DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa
+VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt
+agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat
+gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt
+tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt
+catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt
+tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR
+aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat
+aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac
+acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS
+tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga
+aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM
+acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt
+RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt
+RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta
+tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac
+gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt
+YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc
+ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt
+ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat
+gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta
+KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD
+aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg
+gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH
+taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact
+VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV
+NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa
+MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag
+cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata
+ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg
+tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN
+aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc
+actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg
+tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga
+gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa
+BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca
+aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata
+aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat
+YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt
+aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW
+cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata
+tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata
+tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt
+MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac
+taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta
+tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS
+RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc
+agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata
+NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa
+gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata
+aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt
+ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW
+cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt
+tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa
+RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt
+tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD
+gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc
+tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta
+ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM
+tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc
+ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc
+BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt
+gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga
+acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag
+gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc
+taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat
+acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta
+tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt
+catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa
+tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB
+atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR
+ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta
+ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta
+cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK
+SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW
+VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc
+BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct
+NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt
+tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa
+ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa
+cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa
+VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR
+atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac
+aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc
+tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac
+RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag
+gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc
+tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact
+attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc
+atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga
+cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt
+NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR
+ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat
+cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg
+aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac
+agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR
+tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga
+ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg
+ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa
+tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag
+taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg
+tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN
+YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt
+ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa
+tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat
+ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg
+attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt
+atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW
+YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta
+gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV
+MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta
+tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt
+ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa
+aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa
+BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM
+tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK
+StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV
+cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN
+atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg
+atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg
+ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct
+gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM
+tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD
+BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc
+agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga
+HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR
+tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt
+aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa
+catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB
+aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat
+tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt
+cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag
+DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat
+gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta
+tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM
+atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc
+KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt
+tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata
+tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK
+taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt
+NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa
+HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa
+ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg
+tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK
+cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga
+ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca
+HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg
+gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS
+BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg
+gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat
+KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact
+cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat
+tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD
+taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM
+gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt
+aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat
+acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta
+RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc
+attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac
+KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS
+KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD
+gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB
+aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct
+aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga
+ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY
+tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga
+aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta
+tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY
+MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc
+cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta
+caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt
+ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc
+acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat
+tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc
+gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa
+atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga
+aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat
+NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt
+taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa
+aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat
+ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca
+DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata
+tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat
+aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa
+ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM
+ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca
+RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa
+aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac
+aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt
+aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK
+tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat
+atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR
+BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc
+gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct
+cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN
+RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat
+taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt
+aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt
+gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct
+gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa
+aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta
+gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg
+ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat
+MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct
+SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY
+aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt
+VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat
+HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc
+agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt
+gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg
+agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg
+tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag
+gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga
+VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg
+tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV
+MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt
+actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa
+WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa
+tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD
+KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct
+BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac
+attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB
+VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD
+aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca
+tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat
+tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK
+tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt
+VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta
+tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat
+ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa
+tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg
+WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta
+tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc
+tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct
+MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat
+tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac
+atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg
+aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt
+aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa
+aatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtaga
+YctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVtt
+WtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBt
+ttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatg
+aDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtc
+ctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttD
+gaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtat
+NgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtD
+atttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKM
+tHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttattt
+aacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNa
+gtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttat
+gtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaag
+tYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaa
+aRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMaccc
+ttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRta
+tStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatN
+catacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgtt
+cttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatc
+aYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRag
+NtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacR
+ctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSgg
+RaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatH
+SaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVM
+RSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagc
+agaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcW
+gKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaacttt
+MctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattW
+aHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaN
+cttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgta
+ctgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHg
+accaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagat
+tgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtc
+acaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcat
+SVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaa
+tgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattg
+gatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtctt
+attDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNcc
+DtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDc
+aDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtac
+tggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttc
+ttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaR
+ctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMR
+tgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYa
+tagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttc
+attaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHta
+aggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgt
+cttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcag
+aMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttc
+VtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaa
+catYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctg
+taggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatatttta
+cVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBa
+DtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDga
+tgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctM
+acaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMta
+tgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStct
+YSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSc
+cKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtD
+actaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacV
+KgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVct
+WgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtc
+ScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRca
+aatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRtt
+aaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKtt
+agDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatM
+NYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccc
+taDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttat
+RtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNg
+aNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWH
+tWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagc
+aSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacM
+tRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgta
+aattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRV
+tccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHa
+DaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaata
+YaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagc
+tNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStga
+ccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccacta
+cgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtag
+atcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaat
+cttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBB
+aKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHac
+acRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaa
+tagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaa
+ccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYa
+gacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgat
+ttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcg
+aWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcat
+cagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaat
+MctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHg
+atctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDat
+taggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcg
+taDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVga
+ttaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgB
+cgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtata
+BaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBat
+tgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKt
+gBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacag
+gatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMa
+ataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBca
+aaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtt
+taaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDta
+atatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVt
+atattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSat
+aggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYta
+cYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttt
+tgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYc
+aHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNt
+acKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgt
+gatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKD
+gcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaa
+gMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgc
+MaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHa
+cMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagc
+agttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgt
+taaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRa
+ttttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaSc
+aatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRtttta
+VaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaa
+ccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatga
+tagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNa
+tcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggt
+gaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagat
+tYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcH
+DtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHa
+acttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWV
+aagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttg
+gataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcaca
+agagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMa
+aataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcB
+gttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaa
+ttgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMS
+gggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaR
+SataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttM
+tattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYt
+aNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRH
+MaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttc
+aggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaa
+ggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKt
+aNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYtt
+YaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHta
+aaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRY
+aMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBtt
+ctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaa
+atVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaa
+cVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMt
+attattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatY
+BtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatcc
+aagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataa
+agtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtact
+BtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVta
+agaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNtt
+KgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaM
+attaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattat
+BRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggat
+StattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWW
+atMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDa
+HggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggttt
+gHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWK
+gaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMactta
+caaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtg
+gattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMag
+aggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtca
+aKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcV
+HtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcS
+gRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaact
+ttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBcca
+taatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgta
+atatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacaca
+gtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagc
+YRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaa
+aacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatgg
+tDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStcta
+tttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtN
+HaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHttt
+gaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVt
+SttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcg
+HattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRac
+tctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNataca
+tttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWat
+caatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttN
+atWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNc
+ttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataM
+aaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaa
+acaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtc
+aagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNat
+ttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVg
+tVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaacca
+actMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagag
+cSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBc
+ttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaat
+tHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgH
+tgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataata
+YtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaD
+ggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcata
+aatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatg
+DtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaM
+tatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaa
+ctttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtSt
+atatatagtcttaaaaMtcatgttcaaDactgRttctaagagDtatttttagcgacttgt
+gRtgNctgSgRaaaaatgcaMtYtDcatcaaYKttHcatSWgaaaatDataggttatgBD
+MtgttataacaaYSgagttacgttatgtDStttaaatctcgWKtcSacgagagaSgttat
+BMDgtcggtgtgcgaNtaSHBatBtttVMgVcagaNatcaDDaKMtMYtatagaBccctc
+tDtgtatttatatKNtgggtatgtRaacttgaWaaYgcaHatccctggtttStatMtcgc
+MtaaaWKttMVtWctVtgttaKDWctgWaVttaDVatgKtagagtcatctaKWgtaaMtt
+SacBaMattaKaaHDataattgWtgttttgtcatBacacgtStacaaagtNctNtgtgat
+cHtWttcKaagagttttaaaaWacgRacatctNatVStgaatDHgttWcgtRKcatatat
+ctcaNttaaBDcctgaaaaaDtaYaHaKttNtaYVaVtttaDtctacttctWttaactaa
+ttttMagWcaatcccNKYtBaacatgttgaKgKcgcBHaatDMttatatcSWacatDatR
+cWaMtDgatBctHgScttaaaHtSgKtDtttattgtRStWgttccatatttcacWttcat
+attgtaHVgaBtacaMtgMaaagDaataactDatattagMaNBagcttcattcgtaaKtg
+tatttcacMtgBaVtaattStcttagtYgtgtcgccttKatgggtgaWaataggaatacM
+MagaSKRttBgatgacRtgMtagaSRataggtatcaccgaNaaaWSWacDgatacttgat
+tagcttgtgVMttatYctaRgHVcDtVRRtSaMtcaVtVtatcaYaHatattaaVaatct
+aBtgtacRatNtatttgaYatSaHctaNgNtYtYaYagattVgatcRtaacgYggtgtat
+KttaatMagatgRtatatgHaKccHaaaaYtgaacgaWaNgtYHgacagaYtctaVtacc
+cgatttttaaagcDttatNRgattKaaattttcatctaatgccgcaataataattgttat
+YtagtRNtaagttggtHaKttWMtDKgatSagBYcgRggtWaVaattHtatgtaaaMgSa
+aagataaKaaKgttDttttRaagaacaWRcaacDgtgttaatattaKtatcaWacacatt
+tVtctgatHRcagtttNcaaatcNctNttttataactWacBBttgBttaaaRaWtBKaaa
+cgtatcRcaMaatgYacaaaagtgBataStWYtggtatgacaKWtctSgcKHgtcNaMNc
+ataSatattgactacMcataattNVtDaRccaaatcagttttYttagYaacgtaatMtMV
+atNgKaaMaaBgattaKttatDaBcttKtccttttacDagaYtacHgttggacaaaVaat
+agtYatcataSgatcaaWVttcgaatgaccctccttNtaSBWaatttDttttcaatatYg
+gctatDcttatNctttagDcMttcaacWaaNattSYgctttcaHcRaattaataaaatcV
+ccRaattactctaMaVRattacagtgRcDtcgtgctcttNtWVtacagtHtatHaBDtcW
+ggtgctcaaRHtatgtDgacStgcaaaVKtagttataatactaatatgtagScaatRSac
+aattgtattgcagatHHtgBcaatKKtaaMMcaRcgactatKBaMaYatgKatttDaaNt
+RatattgtatWttagcaaaaacaWgcacaaHcataYtDaHgttataaSacgcagggggtY
+atgcKctaaaHgcVgctBDaVttccStagNgcSgtatgVYaMatcaWRBtVtgYttgtgR
+cYttcgctgaacNttgtgtctattWttttcctagMtagaWtaKgatStScatMaBtaSta
+SactattYNatctgtacRatYDaatgatgatatgaatYaaaaSHttaaYMaWtDcaNHaB
+caYtgVgcatVaacattMRatBtaatttaDacRtagtaaaNYVSMtcagaaDtttDHtRc
+YatacSNKaaMcHgatBaaVttactggBYgaYatttttgcDacHctWatcgtagagtact
+cattDggtcatKaSgctttatttagtDtRBacttaWYaaaattttgaccttaaWtaatgc
+RgccacttMtaggKtcBtgacgaHctttatcgtcStatMHDNagattatNagVaaaWcgg
+aaaYcaVactDYactaStattgBHtcYctgggtacatataaYcgaYagaggaggacaVat
+acHRtYtctgtaVgaYcNgaaaNatacVgcNgtaatttDcatttttcaacttSNcaaDat
+VYctSgcaccttagMgacgcttgaSttaaaatagttaggRHttaaacMatagcaWgMgag
+tcgctagtgtKgactaaHttattaWgcaaaaaaSatatgcgttaBNggttaYVatgaact
+ttttgccatataaataRatSaBctagttataBccgaaacaagatacttaattttgaHgHM
+gtaaKctttaYtaaRacBMtBaYgaBaaacaYtVtagcRgWatHaWagattWSacStMHa
+tttaDagacaatcgtgtKtttggaMtgtWtgtgcaaNaaaaWtKaaBcMWtcttctatga
+cVgagcgaggHaYYtttWgSaaYYaWtRYHHaMDtctttacaatggaaMctataagcttB
+cgHcNWaatttgtatatYtStatctagcactgtVttccagaaattaDtttaRtVataBtt
+WagcatDMVactYtgcatWtttgaaMggKaatgaaaaHtataDtgYcMggVaaatSMHtt
+tgVttaYaWaataRttgttaYttattttRtWtataaBgtDtttatatcVgaaBcaDtatg
+tcaDagaWtgaYtWctcVagctcagctatatagcRVtcaKtaataatHgNaccgaaaatV
+HBaatattcgttaVYttatttctBYaatKaagaccVStttcattgaMagSaaaaccccWK
+caaNtMYacctaDStagaaatttatcatVgtcaatacccKattgtaaagtggWgtatatV
+tagBcttDaBacaattWtDYKtatRKggStRtaaaWatBtaagtaattDaaaaBRacWta
+agtacaSttaaatccgctaaccKaattgVWttDattatttattKaMtcYtMRWagMtcgK
+gBagacgggVaaNaaatgctKcgtaataaKtaaagtccWcttHMatSYgataaatDttBa
+HccattgBttSgaaHYtaataaaMtgaagatgtttBgRcattaRaDHcttBgaMaWaaVM
+MattaatttgtgBRctattgKMagNcMtatttaaaWttgaaacatWgcScgYYDYgttYt
+VtattgcKcWtagcggtgBaSctaKatacaaVtcaRDccccgtgttBgKgggtHagcgaa
+ttaaagMMttScggtDttttaHcSaagaacactcacactBcVgaKNaDHacacttatSag
+aattSKHtcagtataaatKaaHtgaaRagaaVcBtaHtaaatcgatcWcaRtaaaattta
+WttaagtcaggRctgaWcttDttgactttaVSaaaatggtaWDaRMtBtaaaaaKatBga
+tMtctatatcaVaMgatttgNagtDRttDatcttttaMtYaaatcggagttctctaYatN
+tagaNcgMMactacHcaagtaaaatStaSaacaHcacSgggtNKatggaaagcggaaKgg
+gtaYtacSgccgBaggcRacgtVgDtggaMcYaaaMatggacgYStKKatgaBcaaRtSt
+ccSagcRccgccgcSDtgcggBDgaDtBtSSggacMttttaWcatcMatgtNMBWgataa
+tcaaVtgaataataaNatgcaaNttNctgacDMcaHccgatgKgWVttccaStggattct
+cDacttttttctttaaNcWaMWccWKWttgaaaMctDaaBactRtVattttBtcMaNttW
+cKacagttKSttaYaWSactHSaBtHgatgttacatgcatatMtttgtaacScWHBatHa
+ctggatatatctgagMgRSatctaaSttaVagcaRcttggaYaatKHtagBBactattcg
+taaagaagttgtVcgatgaVatHMtcaggtcgKSgWattgaaaVctccVgtDcaaatgaa
+HgMYactcaMatatatattNVttWtWaatttacRagKataaaNtttacaaWgMVactatt
+aSgaggVaaagVtaccDRHaaataRaHaRgcattMttcaatcaKaaataDcaDKtctcga
+ggBggacctDtttatHacWVaWgatDctaNaNcgKatcMtcMaatBtttggacgtgataa
+tagaaacRactcBtattttaKtgSaaggKtaggRaVtatagcccaNRttaccttSMaaga
+tcggDacNBatWcgaactacactaactNBtaStgVtNagcatctaVtaKatKgaBtcgtt
+tWaagWMgagRaNatHaaaaDtacagacaBagtgcaHaNatctcBccNttaagttDgaat
+aaNtcgctaacRBgtaatSttaatatgcataacccaSattKcccttDttggtcaatgggt
+tWaacgatacattBtgMaYgaRttatgatKaKgtattDtKWgataacgNBtaccgaKWat
+cttcttKtgtcttagcattcctWcaaHgagtatDMSgKtcagcttgVHaKcttDaataaa
+VaatttDgtgaaataaRgtcaVaatacttagtVatatgggcatgtDDtMtgtatBggatt
+HtgcVtgtgatcaaSattatKYVaacSNNttNWcgaHttKDaaMYHatcgttaattaStt
+gctWaacHtaKBtaaaaKHttcRWgaaWcRtBtttggBcDtgtacNttaagcKtaHgtag
+aaaaRttgaaacatagtWRaacYggtaaatcgctYaBtWDRtgttgSctaaKatNcattg
+tgtMttatccatatagctSacgccSNaaactacgNtgtgcttMatSKtcaaBaNaaacat
+aacagaaatagtagctcNcatcVgaagStaataVcDKKttcagDHDtattctaatgaggg
+RgBMctatacaagYactctMaaagtcgctttctcgtgaattatNcgatMtttaggcBaaa
+tctNtactaaRKtgKactattgtcatatgtacgagttMaaHSSgHgBatatcgcaSaata
+aaWgaagtatagaHgcttctttatgaccWaatttaRtaDaatttaatcgaaattgattMc
+atcaWaMtaWaKactttctBacactatNgtccttaWgtctgaccKatStaKtgagtacgg
+gcgcgtYNtatttagacctctKcatgatKWStcaataactaWgMSgHtgatctttttgtc
+gacgtSacttaYgcctWctcctctacaagVtttMaBactWVaccaYtgtSgcgttattcK
+tatStgaaKaccgNaataaHtatWtYtRacggcaDaScagcagHaYWRtRNcDtHtcVWt
+ggaataaaYttgVaNtgttagtYttgtagSaaatDgaggccDcgBRYStattatttaagg
+ccgHgggYRaaccMaagttatSttctttagcMtgcgMtgaSagaNaDagttSatgattWa
+tttagtDgcttgagtgMKaYWaYccagcaHatKctaKaDgctagacttattgattaaYtt
+atcttattattStaattWaRaYBWagYaatatgttRgScttgBagDaWgcgtgcVDaggc
+ttgtctaDRKacttgcaKBWRtaaVaSctKtacttMaaSVaWWcgSaNtttSWgtcggtc
+acttggVVtgagaataaataaDttgaaccaaaaMttaaaagaaaaaaaatcNBtatMgcc
+WagcaNgaVaNaaaaaaYaMgttaWtatHaagtNtacgacaBtMMattttWNaRtaaata
+gYaScKattacagctVKBtWNSKgYtYgtWatHaVatDaaatWgDatcctggSRagagta
+aaaMgatttRtaHacatggtaKagVcctgatgaMtaaYgatgtattattttHggBaccaD
+ctctggNNtYaatctVttgVtRtVcRacttNctttataggHSRtaRacaaattaacHaHg
+tgttgtttcBtBtatWtgtattttgcKagMcaaagaMtattagtStagcBacYaaHcagV
+gWtgtttcgtgDHaVtagDatcRaRtggtWtaactgcacgaggaaaRttSDaaVaSttaa
+aaacSMttactaNtcaacaattDtacttttYatVSacYtWtMttaattatcKtcttctat
+caKDtctStSaaacggtYccatgtgagagtWtagWKgcaBaaaaKttgNactaatcgagg
+cWtcDDaaaaaacactHattaattcactatYttaagacactaKaagRtRataaattttca
+tHggtaataaatgataHtggctaacBacDgtaatattRtYgtDNDBgKtcaggcHatttt
+gHNgWtaatttccgactactgacatVNttYYgactcgctctatttagaMcgggatHcgtt
+tatBaDSagBaaaagRttBggttaaBactVHgatgaatttattcaaaattgcacttcDga
+cttYcVttactVtttatBaKHagaWgtgaatggBtaaSggcagacNcttaDttVgMtWag
+attggVatttacHtctNcMatacttSatMagcttgtNcYaaScaYactcKctKtagScSt
+cagtttcatWaatggtgagaggHaggggcaacgcRKtaRcMaNtHaatRaRaaactVtBt
+gttaatRtWWcaaagKttccaaKaaatacgVttcacaaacgcggtgagaRaatggtgDMW
+atcWVScacaaaDaggaaHtgttSMaaaaaccYccDBtatYgtMagcSagaccaVcctcg
+gtVWaaagttatcNaagataataSaataaaKccgtaDtYttatYcttHttaagKcMctaa
+atggaatRgaaaVaaVtcKYaggatWcaBtDaggDatccttcYNtgcSMRgaRtNgaatc
+gttRttatDVMtagctttacatDVtatatatcagctaDagMtataccYgaggYaaatgDa
+aaatSgctctgatgtttVaaBcctgataKtagaaaccaKatatgttaDtgaDtatagata
+atacagtaDtatcNtgtDMtYcattRVtctataNtWttggNaSgtMgaaYctctDggHtg
+gHDccaccacKKaaacaaaatRatttccctttaagcRattMHctattHaRtataVattgg
+atcSttaaHaHgaaHNDtacattSaaggDatttcaaaYgctBcatattaaaKagtgccca
+tSctcgatRtaaaMtgWactttNMaWctYgRatDggaactcDcaattaKaactgagtatc
+tataagYaaaSRctggtacWtttccWtaYRtKHattatagWtKttaNgcDtatHacccat
+taatttataacgctMgaagtaacaacagMgtaYHYVtKMHtacMgKcaaatctgRYataN
+tcgttcaatacggWtMcaatYcBWaagYtVaDNagtatagDaaNtaaaYtttcYWttttS
+tgggataaMgatattagaaYtNctcttcBagactaYDcgtacHDWccKaHgttcttHgVg
+gVDttatcatKaMttttacWaaSattctatagaHaggKaDagBtaaagtcYccattgtYc
+atctaNgRgVtgaagtDKttatBKcggDtattRYgHccgtgcgBNMtttVRgacaYctSc
+taRacgtagagccgtacRaagtaHKagStSttttgYSatattaaaWHaaWagttDKaaNa
+NHaaHttaYcttMtcaaatgKttBtSgtccaaVaattSaacgttgNattgatatNctaWt
+VcagtactKcWacgVagggHaaRgaDaatcMttattaataacaBMaaVtgYtKgRgHact
+gtactatcBaMtVggtagKcYtHtBSaattagtaatgMcaVVagYYgWtactttccaaSt
+tDgaaMaMttcacttYtRgacttcagcttWtttagtgataMaattaagVtagaatatKat
+aagtagttaagHMRaDattaHaaVcctDtagtcVYcaataaYcNttNaaaHctcaRaatt
+tcaNRgatSHgVatagctRtcatgaBttMaaagRtcgHVtgRgStgatttgtagaKagaR
+WRctgNaHYgaaatBctgtttRttNWagaccgagKgtgcggHKVttaatattaatataat
+aDtaNcctacaaRgcaNMctctgaaSHWWHcttagtNagtWgWaaKtYaNgcBattatcc
+aaaSctRRHKaNtKcBgtgagaDRWBttactaaattSMctatatagaaYacDgatttccV
+taagRtgRataatatagtctttttatgtMgtcaacaaNtaaaaactctWtagaVaaaDta
+attatagtBStcgaatDtgattVaatMtcaDattVKWaagatagggttgtMRSgtcYgWM
+aatgNtagtcBttagtttctctWaaMtVgctWgSgtHagaSagactagKtagWggcattt
+HgttgacaaactcggggHggcWBgVgtatgggagVgagtcVcBtDctttagtctaagVWt
+HtgtttaScatacMBtKgattatRtgtttgtctttDggcHaBtRtgtaataNataattta
+taWctgaYWataStcHaatcRtaaVagDWaSatagtaccNDgaagtatacgttttacgac
+gKRtattgDctatRRattVtStaaactagatgVatttagaMaSaaaattVtatYtgttgt
+RMagtHaatttSttaaYNaggWagtgcacgaMcactgHgtgtgggHMgtKacttaaYgtc
+gcatcSatattgBaagtttacMtYagSatttatttaVtaaDtaWaHcgNatactgactHt
+ggWtataDcDScatactcStcDtgtcgtgtatgaggtHaaNKgDattgcBccaagKgtat
+gacKSMtttttgttcaaatcaaYtagtaSatgDaaaMccKNaMaatagaataagcaatta
+ttataaMgagtgaSgtctNYttattHaNaYYtcDDtaatNRgtatttaaYtaaatcactH
+VaHcStccttcccaaVatcVggatKtatgRaaDBgaYtttacttYggactSDtaBcaaNg
+gggtattatattBDcttagagYNMatBgttYaagactMatgttRgatacccgtaacacBH
+tatKacWgatRcHttaattYtKtStccaaatVDcaNKHHaaataatagtagtatcttgct
+NDggVaVVtaVaRaaagSaccgttctcMtVtgNBgtDtttctYgttactBctcRtStWtW
+DScMtcWSaRatgaataRHctaNtcStctYtWacagatgtatYBtHaHWBtacggtDcaa
+BtatcaggtcaVattaNctactgaaaatWaDgactNWtMtggagaattBaataYcMWYcg
+atMYatWtgattSatgaRtDaRgccagtSttatatRaBtattRcWtagtVgaagttMcta
+ttatatDttaggtctKtgtgtBagacgttatRKtgatctatttBtataactgataacKcg
+gagtgHgtVttcttgtKDgcDtaYatBDatcaatattgttNtaBacatcgcNcaKcaWcR
+ataWcVgtacgScaWgttcggHcMttcRccatgaRStYgNacagatacYacWWtggNaDc
+WagttHatMaNaatNtcDMDcMaKgHNatScVgatKWatatgNRgtccgYgaagattDHg
+tMtcHaSNaaattBatRagtaaatttacaagHWtKatcaagtccHtYcctgttKDMSgta
+ctactVctgacaaaaHgatatacataatKtStHgctScSatNatacaYttaaWHtctgaa
+tYtagtHtKaggccWBaStaDctaagagNtaatcaatcgttNgaYDaagtaaaaHataga
+atcgcgBaYaBgaacSaaWaaaaactccgcMttHttYgtaagaMctKBtacSagattcBa
+aWtaattttacRttatcgaRtacaRHgtgRagaaBcttaVgacVDgggaatVatagaact
+RRtacgYttNattVHgaHttacaaaaaaaYtcRWtgtgattatgccaSDtttatKWgaat
+atSNDgattttaacgtcSRtatggttcttcBtWtttMtBtMScttaHatBattHacYtaY
+acattcgttKgtcStSctcKtatatttcaKSgagcttccaacaccRDtttDaccattata
+tSgtcWtVaaagttgtagccattDtYaatattDaccatcVDaaRccagttttgtcHacMa
+ttcHgaNcatgttKcVttcctgtgcSataaatattgaKtctaWctMRaKggtaYcaagtt
+DttcgttacRtatgatggHNaWMtKttcatattaaDaSaBaaaMtMatBgKtttgHtHac
+taatcatcgtWaatKaaWcaWtcctVttaaNaggaaaagtaaagaDctNttaDBaBgata
+gMgaataacRcYggatcRaaaHaagatRDtVRactaYagttcaccaaWtctcSSaaatcS
+KattctggDgaacagDtaDagacagtgtaattcaStYttNaStgtaHgccttaScatMRc
+accWtcatttatRtaagatWtNataaWtMNtDVgWttgcWgtgaRttttRgWcttMtcta
+HacaaYtKctgaBagtRagacttDatNttaaaDgRtatNcHatcSDgtBatcttacVcYa
+cNgaattaacgagttgYgacttDattatacBattMgctagcctagatVcaactNttccta
+atgtDaacgYaNatagMatSWtYBaaaRtgMtatSRgaataYaScaVgtaScMagatNNt
+ttacaaHBaWtNtRtctaaacDaaaaWMcaNtcVaDNcagaDtgcWKYgagttaHtgcDY
+ataaacataBaWWtcggtatgtgaaScaacctttRNatcgttaaagcaDctaatgcBatt
+tacaattVaMgSMMtccYaaaBYtggattttcataWttgBtatDtBgactaatgtccWaa
+HataaScHttWttDtcgtcaagMctMDtaaaatRtBaaaacaatgtcagcatBgNNBVtt
+ttttcBacWtttWtSWWtgaaaaSacgBtaaataaagtcDStaagaactgttaatYatgD
+ctattactgaHtaaatStHaagacaKtagDtaaHaDgttccaaDtaaggacactctDggc
+gtDagtcWaHgRcHgDgaSctttattgtcttttccttRYaDgNactaaatcaWggcNSBa
+gttttatatStKgtcRtgattaaggtcaSBttaacaaKatgggatcaaattgRgcBagtN
+tcgDcatttWcctttgtNagDgctgcatttactttgtgtcaBgSatttNHaMcggcagSc
+tcKDtWBaagSagWatggYtVatSRgKagattgaVatKttcgatYatKYSgDaacNtcVg
+tttaWataWtgVctgcgSggMgatccatgagttgtWcatYWWcctVcNHagtNtgtKttt
+gatcaacttaSttattgatNcatWaVgNHcagStVHcggHacaaDttgDttWcaaRaKga
+aatKaattagtaWacattgaaatgtgaatgacagtgaRVtaaYagYtcggcatMttgaag
+gDgagDRcaKgHtacacaaaMcaBtagHactgKaatRtNttcttcatcatNgYgStggac
+tatgSMttgKtDaDgacRRgtWaVattgatttaagYctatatagactaagaggtatWtat
+aaactaYaHRctStgKWcgtRtKtYtYtagacgattRaaYBtaStcttaWataatcHtta
+taRcactgagtgggagccaattctcDtgDaggHcDRVaVVggaaBtRttaataaRRttgt
+aagKNcaVWWgtatacctgatcttBtcttRgaWcaVRKcagttSacttagcgtKtgtYWa
+tatcgNttcKaccacacVKctgattBtggacgtctgacaDtWKttattttgMBgKaacaD
+ataattWtBtBRtVtacataaatatttgtWtttatagtDtgcctagctHYaatgcaNaaR
+caatVtacctgggggKtagBgagaBgRaaNttttMtMagMtgtgattNctcNaKggWtMa
+tcttagWgtaatatatNctaYBggKaataBattYtaattataVtggNtcgtgtctaatta
+aacctHtacaaactDctDtctgatatgMtgataacWctgtgYSaaNScgDYaWtatDatM
+KgcaatttctgNcgtHtaWtagatatcYBttaattactcaaaVattYRWtatttDtaNMY
+MttgattataatgcgNggWaatYagttgBagNcaagaaaDtRgtaaaagctgcatctagc
+ttaVgtBttatagcKMSaattYtHcMaBttcagtcttgKatgVSVttKgttttttagtgt
+DHgNggtcaVtatttaacNtgaatatgctatMcatgaaaBtgBSaWctaataaattatYt
+tagtaDtaccggaatgagtaattggatttaacBtctSMgWYtgKgattacgRctctccaa
+tgtaggcctgaNaatScgYataaBBacaKtHtttcatgaaHtgBtagaKHVtacctVtca
+accaDaaWNHNaatgataattgatgWcagggtcMBtgSgRataHctMctgMHHtKaBtaa
+MtMgataaRWtagYtgaaMaSgctYtgcgaaHatDtatgtcWRatKatatYDcBgNtRaR
+acattMcagaHgaaagRccgcgWttggSatBagagcHgYtatctVtcatYaaVRtcaSac
+aMYDcgRtcaaWgaRgataMtaaaacaggtgtaaYcattgWgDHcWgttaVatttgcatc
+taatccacaaagaagSatgcgtagRgagtHDgaVcgtgcttatggMttttcatKSctNac
+HcctMaKRatttgatctaaatgHaaScataataatgtttgtgtHaVcaaaaNHaaaatcg
+ctgSVtattVttagaaNWcacagtgKtatgattHcYcttgDaWVataBatBttttWtaac
+tNaattttctttaaYHaMtttaaaccgStcHaVBaatcRacaaWactgtagVKtNRtcct
+agcWaatNgctKccttctcDaBDcatYHatatgcaataaBaagaatgDMttaHcaaYYtc
+actgttRtgacRaacctaWtBtBMagBctaaBaWtgatgVtttattataggttaattgta
+atYcaRtVctcttgcacSaaMaatactRSgcataKcagcaVNKttcgSatcaaactaatt
+DtaHtNaVtgttttttaWVtatNccagWttcgtatBcgttVctcBttaaaaMSaDattKR
+cctttcataHaattaatWaaataKcaHVaggaatataBYKHVtgVcVgtcHcttccgcct
+attDtMMgWaacttgWttYtttcMcgtcctaaVHtgWtggtgacKtcaWaYMttacttag
+VWtacgSatatcgWcKaaatHKaaaYttgtagtcaacWtttggtcaagttgaaBBaSHac
+VcgYgttWBSRWggtattttaYDtHatattcgatNttacaaaaVacaMccaaYStaataR
+ttVtcttagaVKaacaWcgccgtRatcatctaaatccMcctttaMggccHgYcDgaKcta
+tgMRYBagcaNDtgMtcRttgtgHaRttacatgaWcDtgctgtataggNggtgaatagBg
+agYNtatcagKtHcatBatgVKgaHWagattRDatatcgYcHagRtaatgWtcStagcVa
+tNaaaaKttgRaRBYNgtaaDtStaVRgcMccatMWaaattBDatttaatttataaHtag
+tVVaDRMKBtaacaatttttttDaRSgaaKDtVaBatcagtaaMttaagcctRgaNVggg
+ttcataatagNatcctacactacgcatgtcggaYgtaKcatggattgactttHtaattWN
+RaaWYggttcaaaggaaNtaatgcHcaaaattBtagcttattcaagVtatttWgcctaKt
+atBttDYcattagDacKVaYNccgYaYRaaMaattRaagaHtatgcttgcRagcgctSaa
+tagaaRacaRacSccagcacVMataatHgRtagcgaKgYRaDcVWSDVgRaMgcDgtaat
+tttaYttggtaaWcttKDaaYtatMRcgKccYcagtYcBgRccattcaKtgaSSRtactg
+acgHtgtaaaaBatWgcaMcBcYcgccagactcttcSatYattgatgaNccaaaaWaKat
+VgcaggtWtBcgttaRMagcaaagtgttcacatataaagaHWtKatctacttatatcacY
+RaaVagataagtaattttgatgtBctaataggtaRtaaHaattgtaRcStYSYaWRgMta
+caHcNSttVNScattNKaaKgBtagtgatYcaaaStactggttggggaBggtNtgtcaaW
+BaYVSNgtaataBNtagtatatcacMcScccVcgtVRRtttNcKaSRNaNtHRttattta
+ttgacaatggSaBagataaccgttcctaDNaattgctVtatNtHtatagSccaagctKtt
+aaacaaattattgtSHgMWgStttNaccattBMYatRtccStNgttgaaBcctVagcaaa
+atgatattcRaBccMWaagKtttttcMtgaRYNaataDttgttWRttattggHtNtataa
+tggttgtStYgaMcYVtcattaggtaatVcaNggaRtNataMWcctcYgcgagagRgcHM
+gcWtgaYtVSttgDaacgaaaatMttYWtWttcctgaKNttatttattRaattaagaccM
+KtttcWgtcaBagKSaWaaacaNtaYaDtBNaaagWtHgacaaagtgVtcatKcgcaatV
+aactatgcgaaactccNctatatMgactatttatSaaVttNttRttagHtccKtHtaaaN
+atttYVctaatttaaaatHWaNtSacgaaaHggaaatcacagVYcctaattcMNtgtYtg
+agttatttaBtcRgBHNacBtactctagaacgcKaaDWYYgcattactVagaYtgaVVcg
+caNctttBagKRcSgaaatttgtatccattgtggHcaatRtaVtaSaBtcYYcatcgtgt
+cHaVttaHattctgtcaBSNYaKBBattaatggctgtHatattgtBacDcBgatttaaaN
+tggaaaaYtNcaKagRRtRgttRtMtWgggatcNtacacctgtWKagatataaYVMtaaD
+taaacctctgtgtgccttScacWaggaYacttttKacgtttgtgataKYagaYaVatcWc
+SattaMcatBYttYaaatgStKagWattKtttaWgtagaaSgtRattcSaDagVaMatta
+ttYaagccSgcNaaDgaaSaggtaNgtWactaWcgHctgaNatttttcaatgtaMHSWaR
+tggtaNtaHBtttWWaaatattcVtBtctStWtaWMaBcatttcDagttDtttatatgtt
+WBtNaYatcccSgtgagcgaRYtBtagaDacBtaagaataWactaaaagKtaKaWaataa
+cKcccgDtagccaaagcggaatcgctSRtacKgcactacccHaactMgtgccaBaRaaaB
+VtcgSacRKtttStgatcaaHgKtaaKaccHaccacccKttgagcttcSttttKKcgacB
+gggtYMaatcBStcgDBtMcataWtaWaMtgaataagaaDatccSYDtgBatgactBaVt
+aagatctcNMgtcaWKtgcWggcgatacgtgtttatttWaDaNWBNaaNtNttcaaatag
+taatScgHtMWttgttgaBaDtgNatSaagtttHttaNaNKaattKatttgatcgtVcat
+gaatatBtttctaacKaNttVttSagccatRtatatcactcHHatctWSKttaMacaaDa
+ttccaRaYttttagttaatattcctYaacVactgctMcgagcaMYtttgaagctagtKgN
+WttgaaaMatcaMcttcSVatcaatgtNactaaBagatagagtDMgtNtNWatttSaHac
+tagaaaDggtaaaaNctMaatagtaHgacgMaaacMtacatHtaSagaHatYDccagtBt
+gaWatcYtVaagataattgatcgacctgcaacgttttattacNMWNcattataDVDacta
+tattatYattttgcgaagtgagYVtagYaWaHaatctgWttttatgcHaacgttaccDaK
+tatagaccaDDttaacgtHBaacatccgtYaBtVtNccaaataaaatVactDttSKtcMt
+DSgaagctaMtatattgattactgtNaagNBcagHaDattaaaWttacacaaatactcaa
+tSDatagctcaDttWactttgaStaaDtagatSaaDtgtaatKtgVataggaagWSaaaa
+KatttaaagtttgcgtaaagcccggNWaacatacatgttctaRcaHttVtcattatctag
+ttttNcataaacDttWaagVtNYtaggctttggtatgagaWgtactNaVatcactVttBK
+cttaaccttcMtatcggtaataYaMaYggttgtcaaagSWHctaRMSatVcggactMata
+tccgaatcttttttcgagtccagtttgaMtcgcatcaaKagtattRMaaaKDBttDNcca
+tttttaaBNtVtccgtaatgaKgtcagMVSattatttaWaattttaHNcaaMaHttgtgg
+ctattctacDtgaagattatcgacaaVRHttcSaSaatactNHWaaNcgtWaWgaccgRS
+ttNtHtcttcKatYatatBaagtcgctBtgagccatatScctKaagaaKDaWactWagBg
+ctgattBagKtgaaataBaaaaagSacScaaagagtagcgaDaYtaMcaYcKtaataMat
+ttttaactttgYgtcgaaggacgcHctBcgYgaaVacRYagagBaaYgtagattgcgagt
+caagtStDagatBgtgaccctaSWtctDgactaSHttctWatWttctaWtatctYacact
+gBWatKKctgtatYgacaaHSatYSaNgSagtatagatgagtatttatgaccMaatgtaH
+tStaWttgYagccaWattcagtBaYtaaNaBtaNatactggcttWcaagatDctacggaN
+ctatcacatSgKgattgacgacccccgagtNDtattgagaaatattaatcVttNKtaaWt
+YacgSNcBHgttgWtatgtttcgccaactKaattaRgacgNataatctacaacKgttBat
+YatNMSaaaNtctKgacttatgcttatKtcaVtVcagDaataattYgNtRtHaagcaata
+HcacaVgtaNNHtHDatgttaMNtggWagSVaRttcMVDtcttWgtRttctacKaaVttc
+VcgcatcctHRKtattSgttSacgaagtcccRDVaacBWagtgYtKtgattgSgaBtgcc
+BtcaKacaDatacttHatcattNatttacgtcagtgaggcBtaRNaRcaSgcatattatS
+tatgctYcacgtattcattaaRtgStcttWgtattKtSYttNaHaRtNYcRaYtVtggtD
+cKcttctactaMcacggcMtacgcttctatatHtaatggcattMDtaaMaKattgaagtB
+aaKMVMNacKaDtttKNcgagctaaagtccMMtgagaagVaataatggcaWaaaaVaBgt
+aSaVgaaaSaaaataDttVtBccaNagcSBgaMaDaVaVYYRVBgttYMtagtaactDta
+agWaattBtattttMDYHtSaStScRaKatattacacctMttgNBKtcRtRggNagtYMa
+ttaaatMctYgaatgcKHagSggaaaaBcaggtHtatWcatcgtStagMcctcatgatta
+WRcStcgWtgRgttttcctaacatcgctcgDDtRaatatMgtcMtHtMaDYatgDattta
+tagctKDtYHaaaaattaSatatctggtctttattttatMtgtYttgtcatactcaaVcY
+BgatgSctKtYcctWaRaataWcMgNgcgggagtcttRMgactataHaHtgctNtVaatc
+aaccacgSRaDtgKtaaMSKgtaaaaWaKtttVagSDtaaaaaatgttYattttNagMHa
+aRtNgBttWattatatgcttatatcatttatKtKaaaagctRaaatcgcYgacgNtacNt
+ccVtSaaatttcDVctaatacWgcaMtcttSaaWaaaWagtagtaattaactagRttaVc
+SaaatataacHgHatWaattggaagtgcgSSgaaVtgYgSttccatWVataatcgaatat
+gHtRcgtBttcttaaggatatgttgtBcNtaatgtcacVatactgaaatMBttRRcRatc
+catagagggacatcgccWttagttgWttatKagtaaaagHtttccttSatVatKtgagca
+atttattaaYVattcaaattctgSattRaMtgaatMgttattattacaNcggVagcctta
+aKgccYcaaDattWtggMcttMacWttccMVgtgaattctDaBYgacttKYtBacatgct
+DcRaaKaaRaatatctttagKcKtaactttaatNaaggctgScacctYgcgcaaaccaHt
+tVHcBaDgtaatHaHVaaatMgttggtSatHtNNaaVagtgtacaataaagacgKttcaa
+aWVacagctcacWHaatcctgtBNWtaNMKcVcVSWtSgcaattctgKtVVaaacaRaat
+tgatRcgBacaKacVccVMactagcgMNaaactgataDaSgagaatVHaatVSVtccgga
+tgRgtagRatttgtaactaBataVaggcaagHgaaSMSaKgctRagcStNcatttVgcta
+tacttcNDtcaKBDcaHtDcaatagttHttattMBgagctgtaaagtMgatStStcagat
+atYcBtataacRcaggRaaaggtaWSatKgatatgagcgtgMYatcagcatVttSgaaaa
+aatatatgttYttcattatacataatVcacgattataDggttBtRaagtHMtatagaDgN
+ttggDaKctBcaaRcgattcgtgccttacaaaWattYWVcaaWagDattgaaagggaaga
+HattBtatVggtaHtWtaMagtccagaKttSatatcaStDtgWaagtKWaggtatttaWa
+aRcattaatStgaaVtacggaacatKctacatHtaaaBtcNWatttBBaNatRcDattcg
+aactataaattataactcagtSgatataagRaYaKHctggtaaNtttaaNgaRHtttatt
+atacNttttaDccttYgtaaacaggaagtgataaacatBgaSgtaaaaaaVcBgtWNtRM
+ttBttaaBgtaaaatatcHNStaBtaggtaVatYaccNtBaWagRctNSacRtMatDact
+StVctaaDtaYSRgttaRNttttKggccagaaBcatagtYcaYNtDatcgtatVcaatWR
+taggaattMcatRtgggatgtcMggMtttataagtaBgtggacNaaKYtgctWgagYtWc
+ctWtVcttaaactaRacatggtRcatctSDcHcMgcaactttttagttaccttattHRgt
+acggcactDBggtMHcVaaRatKctSHacctacaccactaaHaacgSttagKtKttttgN
+HVgagtaYaMtVYNVcggttaSBaBtaatttSRcgtBgaWaatctttttKggacaWKaat
+tKSaccttgDRgtcatatDatVMtMaVcgaattaNaagMWccctaaHgataatatgtatt
+WataaaatBaaMtgRttcHctaagctaagatatattMcggactaRttttKaSttactWYt
+gBcaMMacRRgNtactttaaaSKtttcaYBaBttaVagtRtHcWaggaVccttNgtgagt
+catataWttYScMtWgVRgattWtaSggacggWWctBHatattataaKaagttactaMRa
+aataSRaDttDaaatataVHaatggaaBDgWgHtcKStVcatHtaatcatggBWaagHta
+gtMtgHcHtcatggggWcatacaHNHagcDatRcaaattcgcttgDggDNVcaacgSgtg
+gcaccttMttaatattVYtVgaagRttaBcagVaYaHcaRDBagatgaVHtNMtcttact
+DaggMgMaattRWDcctVtgagaaaaSKatHHttVDgtctgtcacatHNttgaatSaagt
+KBatatagacaaRVctcWtgtacKtaacHtgHataSgVtactaggtttatggBgtcaaaY
+aDgaaaaaatcgMtagaKaYatgaattatYcttKtacaatttgWttMaatBgaatSttMt
+NaVgVtScgcttctBHKgtaRcNBaatcDtacgattgacgtgctatNaaBtMgagNgKct
+tWcWKacactYgttVgNcgaattttcttgaaaaactacccctcgcNtgMctatcccacMc
+actcMatttatttagtagaacMNtttcttgYKaWtaaBtttcWttagHtgtttctcttgt
+ggctatgDgctaatWDataatttagaNcgcRRNataKtctaataHgaaMYctNaKWtact
+aacDtgaVcgagaactggtaccaactHgaggctagagHHagtMgKtaaactacaggMatg
+tYgSBaKaaaattMgatRtggggtHBVgttaattgKttaaRDacgMactcaaacStaaag
+ctctgtgccttcgtSagtSaRctacaataKatattctaVgtgtaattRacKagttattga
+MtaatgaNatacDataaggactttccNtStatatKaagaataKtatggtcctctatgagg
+ttaaDtgtattgataaaactggatcactKBtttggcgtcaaagaaaNtagtWKatctaaW
+BactDaBaYtacaWtaSgcaattattWgaaBgactgaKctatBRgtagttaBaRRgattt
+aagBHctStgtVYRtaaataaagtMWtcHgcattcacaaMWtcMccWttgVgcHaWttca
+NtgtVaggNgcVatKttataaWDcccctatgatVttttattacagRBBWttcttRaWgaa
+tBVgcgtHgWgaccagtYacaattgSttaaMcVtDatttaVttRgttKtcaYWatKtaaD
+tttWaYtaatYctSctatagtcctBtccMaMMtaMYHaSSgKaaacttctcBtMtgDtgt
+ttttagRcgtacttataHgKtNtMtKcBtaNKaHStgSagYHtataDtcKtagRtNWaac
+VgctVtRtttStNtgaaccttaVatgagaaggtcaKSttaDataagcYaSatNStcaatD
+NgttcgacaatttaSgaRaBNNacattRatNtgSttHVtgWHgtSHccaactKttYtatH
+YttVtgHcNgactMcaacttBatatgSgattttacgtatttgtggtScaacggYtHtgca
+tctatttttWtaSatcagaYatcgcagtgtgtMgtattctttcattaRatttStcaatat
+gcttDtStaaagaccDcVtaWNcHYtWMaMcgaacKcaNcttacctaBtgcDacatcaHK
+tRcDaaacataaRacNNtccDataNactttatBSDYatDtctBtaBatctDatKaMcatt
+MatatcDHctaagRgYVcatgttcgtgataHDYaagttSgHYctaaatgtaaaactNgta
+gaaactaattRaatcttttBKcgaatSctMaggVaVaaatgagataaataSgttKgtcat
+KaKatDYtaaaRttYaMtgctcSatRtagttttagcaaNtaKgatcgWYcacDgaatcaa
+tactgBgaNtaactaaWatatacaatacactaNatcaVaKaaMaaaaaatcaccBtgttg
+NctaacaBattttaaKWcaggataWMtaattgtaaHtgVtcgaHtScaHtctcHacVata
+gtaMcaaKtcccSagMYtWcaaatHHtaagRttDagtMtcYtttaaWWaaaVaRtcHNtc
+tcSttagcacaKttgtagtNgWYtatKDtcatttgaacctcKHtatccttattcttNggt
+BgtgtKaggWtYgtStgtVaRtaRaaagtagtgtcgcKtKagatgagYtttaatKcScct
+gaaaaaRaaHtttttaaaVgtatagKctaNtKaSVgttcgagacattttRSatagttSac
+ataMtaYHccacttttctatactagtatgaBaagctttaMtgaatgtcaKYtaaatatgg
+attataNcgBHatcctaRaaactgttgacttYaHtStcatcctDaMBttgtaWgagtaat
+WKataaaBgBattcttttctttaatWStaatacgNaagtWaMaaNgactMtgaaDaggaa
+aSctaSSgatatDttattatcatagBcaataVcHcRgcStaHaaatWagatHttMHacta
+RacttaYaaaaNtataHKVaataKtatgatcgtcVaaWgttYtVcaaYggctRWttaaKt
+RttDaKtgtatcaattWKaatBHaaaaNgaatggStHgVVgatMgBYtaRNgBDttMcNt
+ggaNgtcaHtgttDcNaggBtatYtacVaNttctcWtactHYcSctgtYtDtgWaatcHg
+atDatatcHtcttatattaaKaRYaDgaatgSYcgactgcRgaagttagtStYatYtttc
+cgacactacagKcaaagDttaatVatcttaaacRaDatRcBatKNtNtaaaHtcBgatKH
+cWStSRaKaSMgtaKaBacWgDDttgYaaYttaNtDgHtatSaSataaaaMBaaDtaMat
+DaagWtggaMtRcacttatggctNataaaaatatWNMtacctatgtcaYKaRacagttHD
+agccgtaaYcaatataatcatagggaaSatgMYBcKBBtaaRVRatRtccVtgtgaagVN
+ttcttagtgtcWataVggtaaNaatVgVaKctttNgtttagtaaagBatBtgaYSagHtt
+SYaacaStcgcagaSttcDBtKtttggtctacNttgNgKNNtcaaaaKWactgaaYgaYa
+ctatHtaWcaactgttSatNVtgtctSttYctgattVaatKgtaYcaaattSgttaStat
+ggtccaatgSWccaaactattgccgttacgcNatcHctctcaKatgtagtctattttaag
+gHRatcDaagSaVgaVNccaBKtacgtttStagKgtctaHtcattaYcctaVKtttaYaa
+atYtccgataaaVttcDgatWcgBtcctaatttNaattgctDYgtgatcaatttaagggc
+tctcatcKattgBtaBagcaYcKctctttNtaacHacNStggRtMatHHgtacatgcaMa
+gtgtccatRWttRKctaaaDtcMctttaNVgaNtcMatcacHcctgWtaaStcacgtctN
+aagRNNaagMaDtactDgctttttcatcYacttaKttatgcStDaStNaMgDtaacKtMt
+acctaaWattggtttNaaVHatgaaattaattacgVNaaWtggaWatctgVatcacYctc
+VHMtVaNacNtcccaWtttgcaacctcWctHaatcttWcaaaYaBaattSctYatctaag
+DgBttagtaSgaWtBcRcKtccYatatcKBgtctttatgaaHDcgNaMatggatgtWagR
+ctStagagaagaacagctWtNtataaaataRatHatKgctNactHgttRgRgVcRacatg
+HYaNttaHtattaNStaagatgtagaHcVctcYgggccYcaaaatgatcttctagctctH
+MaMMgcaVtgHgtaagaWHHtggtaactBcaMNNctagaacggWtctttgaggHcYNaaM
+HtaYcttKaagtSccgttgggNMStatacDttataaaVaYcKtcgcattttcgacctctc
+acVttNtttattgtcttctaVcatagaattMttgtHtMgacataaatagttctMtgtWgW
+ctttcaagYgcgtNaagcaaDaVHaaStMtaaagccccgtgVgtcacatcHVaDtgttBt
+BacBtcggYttDagaDYtccMttagcttacNcgaagatRtDataRtgctaatatatgRtW
+VttatWKtgcBgactcgagaSgtaaaaagttaaWaaagtatttctcWtatcBtcataacN
+cgctcRKaaDKactRaNtagtatBtgaaatttcgcDactttaNtYgagagaNttgaatta
+ataaaSMattRHNtYtgttgaDBRBttgWttagSatgacDggNVagRWcggctacDaYSg
+aaattHgtYaaagctccVtatacattaMctttgSgacatBKaattRgtaBRtttaactat
+tctagcMKMtttctgtgtgVgtctttcDcgtaaMtaggtaaaDtcaYtatccgattcYtg
+aaRttctKaNctaYgYaattYgRttWctWttaaaccaatcactVatgcgYttgaaatgat
+KBcNRgctcatgaccHagcgaaaatgtVgccatcaBSatKccRStSattaaatttggtaa
+gcVattctgVcattMtacatMgaaaaaataYNDtDaatcatWattcaggNcaccctcBtg
+cKcHagYtatBatgBttgtVttaYBgBgataaHNtacRtcaaBaKcagNtcagaatYgtt
+WgggaNDagtatagRtctcDtDaHScagttcYcatcSYacHcagagNgtgcHagtacagc
+tgRtatatMtaatRaWMHgaaKacaBRtagHtaaaNcVHcatWBgWaaacWccggtaaRc
+attgMgttaNgttVMVttgcaagagaatcaaaaaagYScKVtgccgacHgacgttcaMcc
+tcattatgcBttttaagtKatDactccgBatHYgttcatcgaaatctSaKaagaatWVtc
+gttgtcttaMaaYaSDtaaaataccgcKMtatgKtgScaaDMaaaactgtgagcVtttaR
+cttgtaNMatatatttggtMgYVatDaatttgctttaaRtaBgttaYaaagKtataMtWS
+tcHaaaaNacgctacMttDDgactacaNaatBcagtcattatatSttaVgRtWgSggcaa
+tSataVgSYgctBttataaYRRgaactgtgHtgacHWSactYNgtttBactatWStaNtc
+StcMttgattStacctgaattctWatNaaHgMatattcaaaKWaBaataatHKgaWgata
+YcaWMBtgtacKagaaaaagaattttWttDaMtggttgtgaNMtVtDcaacNttactatt
+acggKctatttaaaaBKatagttHaatggaatatYWgtaVtNaaYgataatMaccWagag
+atRttMtgKaMcgatattaacaagatgttBBcNaYattcNgtRttgaBcctaagaSMttc
+MtcctcYattcaNaRBttaatgVcMNgaacKagatcgNctaWVgttaaYRtgctSctaaa
+aNtttgctaaScttcVattaHtaaMacNgttNtKHMcctattttaRtttVtSgtacatBg
+tVaaSSaMVaRBcaSaRHtaWtWHttMtattVcaMtWaaaNaccccgHYtcatagaaRta
+aBaatttaBccaatcRctcatagWgcBHRtacaaDttcBgaHggcgctaHtgacagcSNa
+ttcctcgagaccBggtcaagWctgVcRDgVtaagtttaattatcMtgatNagYttHtYta
+gccRatagDtaatcNtaKtacaMSgDaaaatttgHaHtRDgtaattKtaMHgaBcaWtBN
+YaWgtttStttaSttgataatgactMKatHBtttaVcYatgggttttaDKcSatttMata
+tcagtYaBtgVacaatHcaDMcccgtaataatagDataatVaaagaagaVtctccgaRgt
+RtaatcgagtcacttgttSatgNDHaSNRcggtaSaagcSaBgWSgcatcaaWatgttac
+atgattcWacMtagtgNcacgatgatttttRcWttSgtaatMRRBaacNWRHaaBaattD
+aagStgatccttcaDacccctKaagScSSHaaYHWcHcaWcaaaMBataattgDtagccW
+tcRHataMNKtMgHaBcatcgaagtgtaRgtgggaVMatgttaWRtStBHactaaRaact
+NctcHaaaggcatgcVHKHgaatcSccttggSaWatWtNcaaBctaRagaaacacgcttc
+KatRattcWtgYDaaaaaaNatWtKgaacgtNttactgWHBaccaWacggttcaaVgaga
+aacVtMttatagaagtatWtaaaNHYaMacagWagtaatttgcatcttcgaatacggaHt
+aatVattctaDaHtRKRaNHcttacatcDKttMDKaWggDtaatcttYctcWtRaaaaKt
+aatcctgccccatgcgDtctaaVMtWRKKDctaatatDgactagWtaaaBcKcacMactM
+HHttgDataKHDaDttHttatttagtcaaVatccKWtacWtSVcaggtaatatDSatgcc
+tKtatDtttagacKaaaagcgtttaaSaaaYtgattgtKtgBMcKttgDaaaagttBRat
+HgcaKgDgtgcWataatMWgcVaVatcYgWttaDatcatNaVgtttgggcttgaHRDaWg
+atttctgMHgtVtgccttBtWtaatcgttcgKgRcaBaRMtaattWgctaatMaVBccaH
+tDagaBNaataRcacYcYcHcatBgaNtgaNgKHttctYaacaaaYgBttRNtNggaagc
+WtDggattgagtHaWttVacaaaBtgttaNctaatactKaMaaaaaDtaRatttDaaagN
+ttcYcaaactcMgaYgtacaaatMaaatYtcacVaacgaaDagatWgBgaataggtWtKa
+aMtgDttHtgagttaatttgVaaDagttNMataatttaSVattNaDtKVccaaatcgaYV
+taaaacKRaataatgaBDtctRtgVcttatttYtgaHgttBWatgaatatacSaacctSa
+tNNRccagtactKagaRtgSKMcgaaDattttagtHcKcaaagtggtataaaggctccta
+SatHtaMtRKattaNRcWtccgctataKggatWttaggtaatHDRatttattRWgcgatc
+ttagSgtcttactatgYgttYaVBtgcaYaaRtDaatacHHtDcttHgBgNcccataDta
+aaaatctNtacatatWaRMBgaattaaaacgctctctcaagtKcacNacgVRVcttttta
+acttgctcStatRScaRaMataNaKagtatcattRttNaVatcKgtacNatttttgaNcg
+acaaKctHWtgaKStacMaBatgWttNSacaaKcaDaatcWaKaccgYBggMScgaMcct
+agcaDatgtttcVatgtRBtKNWHtcctWDtatttttNNSaatattcMttgatKgNgaNB
+atcSggtctRcttttttatatggtNttDYNYgaaaKctcacacYHRgttacatacttYac
+aataNaagaaaagttataNaataSatacagttScacVaScaccSWtccagKHtaatcaaa
+tVacatWacgBctccaataHaaYtMtacKacHttttKtcataWWtgtgaatWaataaaaa
+catttcaccttaHtttgttccaatcccgRBaWgatKgagtttBaVgaNtaNVBgcaataa
+gaatagcaKRttgtatcaattaMtaacatataDBgtaaNttcaNcgagatYactggttat
+gtNVtaBNtDaaDtDttaSaWtactaVtHactttNttcttcatWttcDatKaacgtttgg
+VDaDtVagttatgtcagactKaatcaYtSgttttataaataDttKttKagacWgHgatat
+aaatcttagatNKtttWtWaaatattacSHaRgtttScttaatWttacgRRaaMactcat
+BacaccatRtttgaacctacttcDMggcVaSBagaatcttaKMagcaVtctDVataWtSg
+atagacttBctDtBNWgtgKatWctYgaaStccgVaaaDattYatagtatcaacBaWYct
+gaaatttaKVgYtStNtcaVggtggaNYgaRtMaacataSttcagacVactcaVaagtgg
+tattaaDBNDaagtatatMtactatatgatRSgtttgccaacgcacRMtacRYNataaga
+tcMgttgatcataaacttVcatatgWtacaaaWttggaaactttaScataactRattMtD
+acVYataaaagMaattttKtgaBttKcaacatattVtagtcatgactcgDaacDtaWcta
+tRttSSYNtgWaScaaataagaaatKtagacataatggNaatttcSKtVWtgacagKWat
+tcgVatttcKWgagcaWgNKaaaatatgtaaacgttcactaaWgacaccBNaacagaaSt
+ctgctaHcVtttMtcYttStagYcgtttBcRtaYacttgNaacMtDRtagcatgtgcgag
+cScaMgtaatBaKataactMttttattaRcattattatacgtaagSNatVRgcttcgaVa
+acHNtctaHBKYgKaccYcttagagcccaVgatttgttagactaaacgtgcaBgccaWga
+VataggattDBWaattttgtBacWtttttaatDtMgaactaagcVtctcagBMKatgatt
+gaNaVttggatDaSaBatttcgccatatgctaattgYacatgatccacaaMHtttcKYKa
+WtYcgDtNaaDccgNaNcacacHKttDtttaggctagRVtYgtaactagctttcacaaat
+YtHaattYacaattaMSagMactcctcatgtScttcaaYtataaaaScHYaKcaYacact
+VcacataNtaBcaRatgYagVBatttgtaactttgRggacaagcVacctattacRcaaMa
+cHRagagtaVNctacagtgagacgaaaggKttacattgggacaataKNtattcaagWKtt
+gatNagNtgctaNgagatNacSatctNatttatctatRgaaaatKatNKSBcKactatac
+StcagtaggtVtcaaaBYYgctattKtWNttcRacaaaNatgaacttaRtaaDSttVBYt
+aatccagtNaaacRttagaaccRBatataWaatKctcattcSacWaacaacactDttVtt
+gacYaagagtaSgcMttBttaVNgRVagKDcttcttcNtaggttgcgacYacttaaggVH
+caagDagaagataaVaatctgtatRatDtKaaSDgattcaattYtcatgYgtgaVMtMaa
+ctaagaatgRgDtHttaaccaatStaaaaMctVDDtgttatcttaBBgccNacKMaHggc
+BMttctgNctHggagaataYMgtaMccaataattHttYttKggtKaccaactcccHtMSa
+atNactcRtttcatgcKcatgcacttcatSaatatactttVtaYttDattgWcctcactc
+YccattaDDaHaaKcaatSttagKtWtcatRcaactattaattYaDggKtagtNcgSgtt
+tKRgtDWtVHtDNcHWNtKtccgtctagtatSctaBcacgcaBtaacatgagatVtttaa
+ggcaVttBttaStWtattgYaggtSatBMBDactVtggttDagacataaactactBgcac
+aacMaagaStccaWNaaSYMYtgtaKaMcYSaHaaaatatttMgtcaaDScaKtcaBVta
+MVMRRDMtcttRBgWctaacttgaacNaatgttWgtggBtRttHVKgKcHVtatattSaa
+aatBttcBtttcDgHccBagtRBRttaVagBctRcaagcattacKccaWVWtaVcggtta
+tNaSgccgKtYcBaagcWgcatgaNHaKtagNgcHcgtgtcataaaatagagacttgHYa
+tattctaBgtttatRatctatttagacattttNtWaaSagtaHatRtctcggatttatgt
+gatBtctRggggcatWctaSVMaRtcatgKattgRcatMaHaataNcBcDcaggcactat
+tHBgaatStatattcatBgMVataaSacVacKHatggttaaBKtgtaSaWMattttMacK
+tgaaWaaWgctgRatgtgDacBtSaHtDgtgtMVttagatgattagagaSttgattgtSa
+aacagHaaatacaRcaccBtaaDtcaMtKaaStttatKagaataaNcaaBtattKaVNaW
+aNactagtYattaaagWgHttaMcKaSagatSactctatMSagtggaYctcacKKgaSMg
+cRgKtgccagNMataatccaVgatcttHagttttcttaaccataggggcttaDtYatcga
+aaMataagcaaatBttgHHcHagacagagaggcacWtacccMttacgtgNttattYctVa
+aactgttaagtKatMagttcacaaagggatgaVNMatgcaSattatcKagtHaBtgaagB
+cggagtWttVaaDaccMScactgVatccaRaSatattNtgcBatgBaaNgtcaBMgggaa
+tgagtatRgaatgtNttacaggcttaHaataaHSagatagtgVctattaaagggaagDWV
+ccatcKaaaatRccccaSVaaatttMtatStgtWagtStMaaatBctgcctKWgttDDaS
+KactctaaVRtaSWcVactggaaaaNMaaaccgcacNtaVgaagcttDNgaDBtaMaMKN
+tKccaVtgctcttMMYaaaaHaattcWgHcgtacatWaMaaKtaataccgBDaYRaggat
+atSKcScYagMtaatKHMtaaccatgHgtagDaggtgtaaatatagaKVgccRYctcRaK
+BKWtgatHYcaHgBaYtttMcatataatgaDttcatttaStgtcVSgacggtggVgtBtg
+acatgtaaSgtBgatKtKtaYcatVtNattataaaHaSccHaaagctSMKattcatagca
+cagtgBRataacaatMttKcWaaaaatagStcggRttaattatWaataatMaYagatgVt
+atccttttHaScgtBgagWcatgBtgcctatcgtaaWHacagtactgaattaaaaaNatt
+RNMaSSNSctattcaaagccVVcatattttagMcgtattNtVBactacScattgKVtata
+aKtttgNaWcttNacctagtgaNaaDcagtaWgKggaaKtacgcaaaYttatacSttgYa
+YttcDNagggttVDagHatSgtacYVatataVattataSataacgKgatVtVacHYRWtt
+atcctaaDtgtaaDgRDttttattWtaaDttggatcattNgtVaaaVggaaggcYgSWaa
+attcWHcgaSaVWaMatctMDtHBgttttaatctaWaagatatDKtVttaccgaMatRaa
+aBttaNagHatDHWcDtBVttaatKtMataYttSRHHcgtaHDtggttccaaagRRtaWt
+VctRcaNDttatacgatMcaatNHtacgaattBaatHtcccatctctccBtgtataYcta
+tgtcgaaDYWtNggatNcacRtMaatNtKcttSYSctaDaaaggctDaStatKtataBgc
+VaatttggYcttaaatgatgtHctaaccaactttgggttcMaaDattatKtVacgVcSca
+actSataSccHttYctttgtggcDtMcactaNSBtMRBMaggttWKtattaatgtKHact
+tcaMVatctgttgtccaaYNtaagttKaacttctHcgcWtYttatMBgBaMacaattaDa
+actNaaatSatcVtSSgatctatgNatSYaattRatgcDgtctataagagaagRgatatt
+tcccaataHgttttWKtgaagNRtctaaBtWcHHcDgaattgaaaKtgttaaRtatgtaM
+aggDttcMaccaMaattDctgYctaWtStaNtgRKaBtNcMHcSttMtaKccYacgNNct
+ttatStgVtaYtaagttaagaBHaaStVKHatgttRVWtataMtSatgcaattcMcttat
+KgMcagtgaatcYtcctNaYcttactttctcttcatggcgNcatScStBtagctWtHaaW
+attaccgtctcgtBMcaaacKctcccaacttBgtWStVttMRgKcVagHttVtaagMaNa
+tcaHttacatcYKttDBtatgSattVcgBcBVYttHNtcatKgcYgaaSaKtatttttMt
+ctatctaSaattDttcWagHSacgttagYgacWaSaDKatcNgctaatgVSctgctYgaK
+gKtaataggtggagcgtcgaaaaRYtgYWYSaatacBgacWtaNStcaattWtRctttta
+aSYgttcNgtBWWgtgaatHttttBaMcMtKccagtattttcgaHaDtSVgatgaacatg
+cacgtcagagDYattBcagDctcttNcNtaaaatRctgMcDacaagtttagtcaaSSaag
+aaacatacaDtctctYgcaaacBcaagaBatgtattgacgagYacBDgttcgtgRtaMga
+attttcNtgVcttctgtctagtgtccatatctgatYatNtatVWgttacaDacaHDDagW
+tgataWtatcaaBRatDRtMgVcgaaattcSMagYgWacgggtaacaaattcagcatagS
+gttactBctgSVWatYcYgcBWgggRcHtataSaattBcagHgcgcctttKcttWaggct
+ttaaDtRacBactaaVaaKtaaacctcgcgccattactKactKSDcgacaVtatatagga
+taKctcgSatgHSatVcgtagtgaBtSYtgaBataatStaaccaagttcaDtHtatatta
+acYatattatcctacgagatcaccgtVSttctYgtcataaVactcgWtaVatttgttgga
+ctaaaVcaSaDtYcgNtYtctVaMtaattatWRtWcaNtaKcaaYggatgNgaatcaatc
+RtcgagtHcgVgttataHDcatttaagttctHtcgMRHtaaagaVactBMtatgaagtaa
+aaaBNtataaNttcKcctaNttaaDtcgMacgDcaMatttgYtaaNtcaccgatgagMtg
+ttaggWcacHttNgtcttHYMcaattKcagttcNcaaaacgNaaSattgKttaaBaKtta
+tttaMggHcttttaaRNVgttaYttttMVRtYVgRatKcgVtacgaatttccBatBgYBR
+tSKKctaaaatgatatgBtcttcgtttgacHagtaattatatctgDtBttatgaDtatKt
+cKRcRttagattattagHgDNaaaKgcgMtHtttKtDtgaaaagtaMatcagaaccgaat
+KgtatatVaccRaKYtDHtcSagtBgtgccWaaaggtYKcaHatDDaaattDStDtcKgg
+tMgcMtgtHtcaaVcgtttNtagtNtgKgctaDcScgBcWSatgtatagcKgWgttgaac
+gagtgcgcgtKaaaacgRtttccatatatttttMgaKagcVcVRataccWctctcgBcga
+ggcgttaatgaHYtttHtaSWtagcagtttKtYaacaaataMtaNDatRgMBaBacSaat
+aSDctgaactattgataaRtaVtttHatWaacWtVaHaaBDtactYtaDactttSgtKtR
+attgatttatatattattataattBatagattctaacDcRMaaggttcgtcatattRVYc
+ttKgtRcgWaatcgaaWWatDctacaaaagaattHaatctgttttacYatKatBaccMaM
+aaVtcacStaaYgYKgtttctcattatattNgSaaHtgRaBtcataKYtHtacttgtaca
+aaDtYtgatagNRcYatgaStaaagactgtcWDtYaatVaNStagaaaWtaaaataDYtc
+aMatSVBVaaaYagaaaattgtgcDagWSaStattttaatNcacgataNBtaattggaat
+gcMgacattHaattctctaaMatactaBaaattacaHWgBNtNaaSattttaacHtgtag
+tBtcRtttSaNNaYaMaDtatDtagaKggYgcaaSttgctactDcNRtWgtttaVtggca
+aactattgSgaagtattatgDgcgtgtcttagcNtRctKggtMaHgaDaaagtactgtcg
+atttagatcagNggtaattaKaatgaaYaaHaattggttVaaMggatactctaBgtYHMc
+ttccVcaaWtgttHHRgagttKaaagaBtaRtaaWaggttctatRatSgtatcYtaWcat
+gtaBtcaatctaatRgaYYtWtccattataBacttWtcctaHaaaaggttgacgtRattK
+gaagcattSBtttctaNcSctSStNtYtWaWtgtagtcttgtctttaagNKgaagacgDa
+RgtNaBaVDgaattggaYtaccSVYKctSKKcatagttgSttatcStactcaatSMataH
+caKgatWVYtNacagtttBtRagYHaagtaNaaVVDgatattMaagattagcatcctaMa
+aMctgNtMcSaRcgctHMttaattDtttYttcgataaagtMtaagttaWaaDcaatccKg
+tgMMcatBgtRtaHBcttgtBaBggcaDcgaWttgggtaDaggtgatRtYaMWDttatcN
+tVcttRaKagctRgtgcNaatctgattatagattagtatatgaataDNatcYaggKRaca
+atcaHcaagttagtKgRatRgttaagaaaatacVctaaaagtgtaagKVgcttSWaaHat
+agHctagtDgDtSaVtgatcatttaNKgKHataKBctatatWaNgtttgcRaVNttaDgt
+cttagHYKatYaVaBtaatgaBattaYcNtgcaBtHaacttVtccatDagVaaaYgWtND
+BgacagVgctcaRtaHaaacttttacaaggaSRaaatagaagaatacccVaHatcBRtct
+tttaaDMHWtHgacMtctcaagKDttctgYctctcNagaMgcgaaDWatMcMatatttDc
+tttactaVSctagttcaRKWgtttKRaVaaKtacaacaKttatttttggcctataaDgtc
+BctBDgcYYaatNactcaaRgaRWcgattgVNcWaatctgKagDMgctatKttRatcatt
+MaagtctaRaVaattKctgaKtatccgaaRatcHMaaaaaagattccacgtacgaDStat
+atctcataggtacgcgatgtgaaggtHYtatWagKVKgaMDcaatttWccttgKgagtct
+agatgaatgVRcctaMttgtaRaaYtRtaacWgaaaMttatcatNcgttactaaggtDaa
+ggcagtRctcatcaatggYagccagcgaatatagtgttWtaccaRctagatttDtaaatR
+cDKtccHtBWgttctWaagccYBSgtggaaagHNttHtctaaattaBatggaDMgaBgat
+atcaatactcMtaaKtcYccgatDaYgHDBaagBattWattgatttttaagaRaaggatg
+gYggaKttaKtBVBcttaWcttBtacctYaNYttgctgtBaaMtWtcWaagtaaggWcgM
+DaaNtccWMWtatcMVgaSaRctaKtBgKWDacDgaaaaNgttcaaaaataMcttaWtat
+gNaVaaRataWtgKctRatataagtgttgacgaKgaNgtaHattaaRagSgattctatgt
+YtcaattagBYBatccYtgtNacHagHtacVcVacaacaccgNgBtataYaatWHSttat
+tgctDacttgtgHgHcMcHacagctRSDtgattaggaDHtYagatggagWtaMatcRccc
+acRaaaYagcagatgatacatatttVBBcaaMtctctaWgaNtttcctaVcttaYBDBct
+RgSaagcNgatttcacgtcRDaVBttaRaggtaaggHcacttccgDBKgagaatttataa
+aMaRattagcVgtttacaaagagaaaMtgDtttYttggcttataKaStacaVttBttctt
+gBcVaataaagagtgagBgcgNcNattgaaacRcactDaaccaatWMtaaHtBgaaacaa
+ccctcMctcaaatctMWttggttttacttagcRtttacatRtccBttVcatgaaBacaYg
+agHttatWDtcctSatRtYggHtNMttRgNtgcatcacgacagaHgtYaSaactgaaNWV
+agtagttagaNgatctgcatWYaDacataHtaWttaatHaDgactYgttcaSVtttacct
+aatttaDgRcagacaDtgcYVttaagaSSKBYtgHtDtNtcgtcWttDtgtcNtgacKag
+cactccDMacDNcccctWataRKcaaatttctRVaacagcaMtataaattWBctttgKgV
+catttaVgtDgtatHtgtaSctagtatagcBtBtgtatgtcgcMcgagttctacgaaBgW
+ccgaWatgcaRtWtaagYttaNtcWaHtgattYDatWRgRWagtRcHggNatNttWaaac
+aSgcaatMatgacNgggaSatgatttcBHcctaaggWactacagaaaagctMcaaagaYt
+HVgtaaHKgKattVaWtttcctaWgaKattatgMaattBgaaagtgaSaaaWtSNBtttY
+ataVgNatgaSgcBaaccatattcctctagRtattatctttctMtgaRtctcYgaatDtR
+cHgcRVtWtaacDtcacYatRcttNgcgaDtVctWtacHtatatgtatKaaggtaNcata
+KRaataacacDctcctWgtSaWcatcDgatatBtaatHSNBtcaataaStHtacttaYaD
+aMtaagMtgNaaaaNccccgYWHaatgcBcttaBcgtMBKggccaVgacaWgaaaaaVYc
+RKctMgcaccWctcSacttcVtacgaagtYtcctttttaYgttattaataactSttRggt
+cVgagWRStatKataYcaatNMtacttcgcttVBaYRaKttaaYatacagctBgagcttc
+HcaatBaaaVcgctcacaMgttaHaggctaDtSgatattggggBgRMagtaattggattg
+YYHtVtcttSRYaacttataBtNKgatVaWSDWacatVcttgttgaagScaDaSttcact
+aattagatKttaMcHtMgKccaYatKataMcKNgattgtYtaaRHHcaWagctgtgcYat
+MHaatRDgtgttYctatNKtSDtaKgcBttgagtKtacatgaaggcgMatDaWtcBatag
+taaaatNYtSVgVatttcaNgRtaRaaNBttggaatVgaaaaagaaggtgNtttVBgcct
+tgtgaBtgMgtaaacBgtactWgtaacctatatggaSYattYtVgtttaagccaRtatRM
+cgWMgDVSNgataatBRccNagagStHttBgctaBagatattaacaagaggttttcDaRa
+gtcDgtHttcataagaacaKBttaBgactaRatgaaDYHttgVagcMcBDgYactWgSga
+cBataMMcttSaRHgcagKcgaaYaDgttcataYKcttcMWttattaaBacDcttDtttB
+catVggttVHtgtMgKcgaaVgtcgMaaHHYBMaHtaaKaDttaNgNtttttaggMcWtt
+NaaaDaaaaactRgaatagSVHtaataagttStccaatcHataatacMcattHtacaatt
+tctgatggacatatgcaaacaKBatgcagacagVcctccgcaacNatcMaHtcMtaSctg
+taYgtStcBtcatDacRggttRgagaaHatVcttYWgaDtatgYcaBKgtSWVYtttctW
+ttHtctaYttttaBtcataaNgtBRaNcgttKgtgVKgggVtWatcWagttSttttttaM
+aRWtccgttttattaHatttBVtataSctRWtgcMacaattaStBcacggaatRatactV
+gaagMaaagWacaMgctaacaHctHtaatacacgaYagtcttKagcDttaKBHccgtaHa
+acaKVtcMKcaataaaNaggttSaatcatgaNaaBtacggBcaagatcRgttttHaNgtK
+ctYatBHHtaaaDNHtaVtVagttVacKtcYgcattcatacaaagtaacKaKKtaaNtNa
+taaNaaSaBtagaattctgacacNtaHtataBDttBctataatagYSctgtaHcgccgaM
+BaggttaMHtKgttactaaHaacgDatataaagcaWtgaMtttgVatcKaattcgHVNat
+NgDaaYtataHacaaacaagagtatatDStgcNgcRtaaWVVaDStNgtcaaacgDttaa
+ggNttWcaVNaccctgaaaMcagVYVaMtBgtatacSacgSgNtaaaDtRaBSaWcNacg
+YaggtcaYtattagVStaccgatgSStMattctWtattHtHaDtatgYaatattgtttta
+NggttVatcttRcgaNtHaVaStgaagactcacaaatcactgataaKBtNHtttctWWta
+ttgactacNtaWatataaaBaatBttgggtatYtttYtgttttVttgagtcVaMVgaatN
+taaNgKMaacgtaatattKWggcagtgRttgtgacactaaYacactggaaKaWYRgcatg
+cgttctBcttggtVaaWgtttHagtcaatctcggaNWtaatBNcaMVKStaNcMtgatat
+aatDYMctttcgcatgcYtHtVNgStggagcBtggMgccctgtgNtVatactgcctcHca
+taDBtaStgNcagaYttaMtcaYtgtagatDaagaHaaaRcRataattcaDtcaDgttgt
+atRaaaaYaRgtttDBgDcgaagcNttgcVttcacttaMgtMWaYaattcggaDcgaVtY
+attaBYaaaattaHVttttWaacDttaRaSWactcBgaRctacaVStBaaatRgaacMSa
+agaatagYtNctcaatagctNttaVtgctgtttgYcttaatgtgMaStactgDBagVSgg
+tSKMYttDatgtMaaSaVtccSRMgaaaactHaatWWtcatttctDgcMcggVtgtRtca
+tctttNatcaatatYaKaaaatKWtDDDaaactaagtacRHtcKttacaataggttWctt
+ataSaYctgctVtaaVggatcctaHVttgWtgHtWttaDHaNgaccctatatgcWtNtta
+cctaYtttDWtttaggHNgccatattacKggattVatatcRcggRWMtgcaVRaaHgtaa
+taattttaggtctcDccaatatgSaaaagatDtaaVtYgNaHBtcaYttaaaaacagata
+taaagttaaaDWccMHMattggtaaagtccgaKtatDKaVHaBagaBatactataVttDt
+tDaMagctctaaDSggtttgaDacacVatcttNtgatKtVaBStatgNtgDKYcaatcat
+aWtcNatYccgRtcgBHacaBaatagaVtagcttgaKagcgHtttDNtgaagMttStttt
+gDDKRWtagtaBgtgagtgBcaDtWtaHcctatHatttgttWgagcggDtgtRDRcaaat
+agcacacRtDgtgVaWtaattRacVataBWacSYWVctgYtWDaVtaKataaacttKaaa
+MVHaaaaKNtaaacttgVataaaatMaaatMaagtatcaaRtatSYRtBtaataattgtt
+tgaWtaNNtctcaatNaataaaaaaattgaaaattattgtgttaaYatccccHtaNcatt
+cacttttaMgVDtaDMtcaWSgYWcSYtSgaatHtgctagaVattaBtaaaYgatattcg
+aaBtgaaDacacatRaagcgggagggDMtatDttaatttggaKSNtactRMttactgtBg
+gcgtcatNttctattaVacgttccKtVttMacttWtctaYcacgtaVtaaRgKcttggat
+SYatattttgttacaaMgtgagagaSatattWcagDttggNtNaaYtaggaaKtYHcttg
+KattWagNgtaagHHVatYatcattaaaaaYtHgttcaaaataattatBgcaKWKtagaa
+tagtatBagaaMtattMagaMtHcWgYcacgttagtgtDNggctatNatRcYYHtaacMa
+SStattRagRcgataaaatWNNatgaaatttVtKcRtKtDtaaMcctccaDRcaHtBSWc
+YtaKttcacaaMaataaMaactccgSgtYattDtaWctagatBtaatSgatgatHKgttg
+caaaaagaScHtgaaHRDatSagatcBcggcatcatYVaatgMaatStgNgWaaaaMttg
+cYaaagttSHaYgaaatHattBgtaaMRagSaSacBaagtttttcatgttaaYcagYtgK
+tYctaStcaagcgtaVattaNatWtHgtHKNDtcNaKaVaStSacaaStttagaaataat
+gcDSatgtaKtgMMtcaaagtNattacMYgtgctNgVcaaNcDtaaaVtYggtaaaactg
+caagaWNcaaacctDSaaSgVaKtctcatataMtggBtaRttKtagRcctgttaHgWRaa
+ttgDaaatttHtaccagctcagaccKaaBctaagtatWtaVagBgtttatgaHaaggatt
+StaactWacKDVtMHccgtacaMWYctDtagatttRctaccRagtWcWgaaaaMcagttc
+tgacSctaaaactgaatcacaNcaMWtWccYgtttNaatttggttaaNtggttSattttc
+aacgYVccMtcgaactBtatcYttcYDVMttcgattaKWtatttagcaatatcagWatgc
+RVaatgRtacWaVVBttggatRtaNgRagttDYataacDVBcaaactttgtttgaccata
+gHMtRctaWcgacagtgcVcaaVgRgtaagtRaaaattSBKacBaatcagaatgtHattc
+aVRtatVSSaKatNataWRVaaagMaacataDgataWHatcNYcMtatttggaSatttcH
+cgacaYcaKaaatattacHcSaBVatHacactaMDataaaggcacaacaSacctgtaaRg
+tcccaaaatWtDtagtcaagNtttgatDacDgcagaDcWgatDaaKagctDWtttatatW
+gDcaaaWttStDtKtatSagVgaaKtaacgaccgMgaSaatRRcagYtgttNDggcHSca
+aYDWtcaacgtaHgaStKtgMtRtaatccagtDaaacHgtacaaccHtagataNaattat
+cVtgaKaaNaaaaaaaagttgMgtcRaNaacagtaKcaBgtttgaMDgDMacttattatg
+aDgagcgtcacaaRaagtYaggMtaaactagaacagVaMWataggtatHagtttaaHtca
+gtaaatgRgcatgRctgaMttBaaataagWVtcHctgtgtYaaaaVtKtaSaaBatMttt
+gttatattattcaaBYctBWtggatBtgaggDagtgcacVataRBctaBaaaataatttt
+tNggtccgtVaaaaataaattBHaatBaagaHgttaagcctaatcaaatgaYtKaatYta
+aggtMgaRggtWgggNactaacgaRaaattSttWtaataaVtHgtacttNtaagHaSacg
+WggaYggNStcctgacgDcgHggtttHggtNtMtttDatNDgtgacgtatacgatKatat
+aaacaattSaaagcagatKtttSagcaaMttttgaKtMtagtcRacctKSttBttaatMt
+gcgttacaaagaVaataattcaSaaWcBVacYKtacaNBaaKRtRtcgWtWBaRKVtYWW
+WgattgBctaaatKaattaYtMtSBMBHDtBtaggDtcNctWYagtgSaaBaVtcttNgt
+cgttHtgtMtctatKtatVggKaSaagtttattttatgtactactHtHttSMactatHca
+agaattVataaaMKNtaMccgtgatDaHcaacttRataacaNgaatcSBtatgacBcctc
+gggtaatWaaWtacacaattctRVgattctatgtgtatHagatagggacVaattttDtNa
+WKagtatatHtagacgaggtatgtcagtgagHccccaatNataKMBaHtcWgctagtgHa
+atBatSataDatatcacccaagattttcSatKgatWtgaagtcBMataaHaaMaattatg
+cttWWtttcgVKYNBattggtacttcaaMaVNcctcHatcgctVcttKatgtctctBMgg
+acatcaggacSgaKttgagtctKVYaaagtaaSgaaaHaWactgRattaaBttVaHtgga
+ttagRWtaaDaaatgatttSMBWMaDactScgRYtgaVagNctgtSBataKacStHRatc
+tVgBKaggccaRctaacttcYKtcaDcttgaaacBBataatacYMgWgctgtacttttat
+gaSaaatYcccgattattRStccaaaBagaacaaaVtttgcttatagaaacacScccSaN
+taaaaBgtaaggcDgtSttRatMYSWatcgtaacgtStBagttaVaaaScccSggaMDBS
+gcaaKaggatatacgtatgcWactccgVctNttMaYtaaatKaaatgKStaaaHaKatat
+gBtcctatgtVaBggaatBcgcaatgagtatHcYagctDgtWaaccagtatWWtaRtKag
+atagtgKatatgaaaggcaWgtNKaaagataWaatHaaaaaKMaaatttBtatHtctNac
+tKtBVVagtatcacgtMgtgttaKtaatcgaaMHtYKNcMaatgcaSaaDBaaaaagaWa
+DtWMgaacatttDcatttaBaBtDttaaSMtcagcttttRWWaataattcNctactWaat
+NaBaattaagaaacttYRHaccatatKtaKcNVgttYagttBtaaaaVtctcgVctagct
+cgSVatatagVtMcaaHRctaHStttNtcattRaatgtaRtgttaatYtaagcattgaat
+ttaKtctaKKgaaggtcgMctttcWaagcgWaKcttcYttgtgaRaagMtDatgWgYaat
+aKaatSWScatKBtYgtaagagaVcacgctHStaacaSgBtgtaNRYaaWtWcKgaccDt
+gaWtgagMaYgVVgBaRacYtcKgatcagttgtaKcgttgagNaStctggaatVtactaS
+NtaaagtaatcaattaaVaaDattHDBaHKDHctVggcaaacccKMaatVtgttacBcct
+StgBgMtScgaaHcatgctMtStaVttttcDaNagtDVaatYcggaDaYtaactaNgtcc
+aattSacaaaaRgtagaaKgtcRSNtgatBacccttMtactatKgtaaRMagataMatgV
+tVKagaRagtcagMgMaatRHNttagaagaatgggaatcHtttttSgtNgYatgtgcYta
+atgDctMaaaMccVScgcRgKNaaagtaMtacaKaMNaBatagBttttcttttYatataN
+aWcagatttgMtgaaacaBYtHaaatgtaDactatttNatttKttSattgBatSRtgKHt
+tacgattgcggtaaaaacHHtaNgMcgHaVDtgtagaagatBaaagDttaacSatttaat
+ttaccagatataattggVgaRctRtcgccVatRNtDgcagBcVaHtBaatDttatgKRKa
+gataaRgcagtaKgagttatatcaMSagttccRcttaaatgatcttataaacaaatttcc
+cttaBaWtagtagttMaacMaKaaaagHatYKactttRatgtctcgattBcSagaDKttt
+HtBaccttNttVttVVtggttacgtaaBMRgatcgtctacaaNBtaVggttYaaggattc
+caNgRgtagBtgtaBacaagtataaatBaaatKRtaMtKHgatcgYggDSgKRaSttHSt
+catgtatatWacacRacHcatYtttaacYatatgtgttNtgcSagDHgataYttNattat
+cVattcaaYttggtaRHtWtcgaBacgtttaBaccaBaatgtcgcNagaNtKtaDtgDta
+tgDaBtcKgtBgatacNaccDDatttYtKggMtYNtaactgVacattaaHgMttatcgtH
+MNtataBtKSgccaVttaBcttattcBaagtgaWtaRtcctDVRatgaattgatatgaWg
+ccacDaatKaHtttacatNttaWNWgtacaggctacttBaYaaatatacaaaatttcgNH
+gMgttHctcKYcttgMtaacBaDVtaatttacagaRttttttagcKagtKactatMRtgt
+DtaattccRcaaKSttagttttBtctatagaKaVttttgcNagtKVccttagRgWaNaKW
+ttataDgcgaatgMKatgatRcYtctgVagaccgcgVgactagaWaaHNtcRNRKaatac
+tcYaNtSDKtcVVggNgDagtttaaKRgttaDcgtNNgtcaYttggtttYtatgtaaagg
+attttagatattKMcatgYaaatcaVactcagagtRYtgtaactatagtBaDtVaWatDa
+tctataaaSgggtactaYaKKWagaaaaataaattatagRcaaaVataVagatatgtagg
+cWagacRWattctgacgcDtaBcYattgtaDggMatgagcgagaggctaaatVtctcagR
+agDtSgKNcgtVcStacatttagNtgatSNgatcYVtHattHtBgMacRaattaHBacRc
+NaaccctVaaYaattcVccatacKcttSagtctgKMNagRaNcatNgcgHattStSKYRg
+gtcagtcaccattttagtMaccctggVattHaatVagaaMaattaVacatacacaaatta
+attacgtKtagaaaMgatWgWccatYtagacKatctKatMcggYcgcatgHRtcStVtaa
+tHgSaaaVagtgaatgtgYtattaYcRagatgatcataacacSgaYaactMKttatRcga
+ataaMSatacNgaMatttcggccacgaYYMcaKattRagDtRtatMVBtaattWtMHgNa
+WDgStaaSNggStcBcVYtaYagaHtacagttccMcgtYtYttcattgSWcttagttcgt
+HtgVRYgaMacttBtatcaactaaaaVtDgataaDgtatcatYDttaStgccBacctaaB
+agttgRtaSBtaaaagWgcacBggttagcMaYatttBgtaggtRBaSagttcacgtaDaY
+aaaacDSaKattctgtSatatgtatggVBcctctgtgaaHDKgttaRttttBMHgRMgHa
+gtagMgacgaagttaatattgRtHtHttatYaaagcagatgtgattagtggcactactVa
+ttagatctctgtttatcattYttgatHcHttagStgatgactctDaaatcagtgttgttt
+ttcYaaagtatatcYcaSaacaVttcgWtatKaaaHWtRgtttaKacttctgaaNaYacc
+tNtcStatttaaagttKgtgatcctBcaBtctttaaaKagttgDtWctDtgtgctataKa
+gtaNHatctagYgatcMgtggYaagactgacacttaRaaccHgttcaYtagWtggtgBcS
+tacaMcMHataaaNagatactccaggagttaatcatRttttgaKNgSgcaggtgttRaYc
+aaataBtaDtatHgBtatacKaataKtaggaaatatgcataaHgaKttttatMaaaNgMa
+tYattgaatNtatVaggtKctttHattcatttatYtattagtataYtttagYcattagaa
+ataHtaaccttactcatYttHMRagttctDagNSVgcgVaNNattctVcaaVagaattta
+agaggttttacRagtagtaaaBaBaaMtaScKgVaRcNtctgtataagtatVgtDgHaYt
+tcHYttaagatRgtgaattctYaaaattRtcWtacDDaRatcaKtaSacaagctaNttRY
+agMSDKtWgWaYNgaaaatatNtaatatHMtMWRaRacaaaatgctgctacNKaKtagtt
+gVatDaVccatSDtgaSggcgWatccBgaaVtgtaWttagatVaBWtacgWtaYattaaa
+tMctDgDaaKatttgaaatgctWctttaHtggHaBBSRVBWtgattgagatccNcaaaHt
+tccgVcttaDHtNgtttaMggccVWaagattgKcaacgagtatgtccctctcttaccDtH
+cttcctBatcStVaactaatctacatgtacataacDgcgaVttataagcaaRWataattc
+ggtMaaBccYgRctagatctNtBaggacMaaaNgctgttHgScgttaaVgattVDtaaNa
+ccggatatHatKcgataRtaMcagctattcaagagaatHcYRNgNgcaWtgagYtacttN
+taagStaVVagctgcaaggHatgtcaWgaattKttgtcgaBcKatKKtDtRtNYNtctac
+tatgcgatgtaacDtcaYgaactSHctDataKtcaagtccVRtWaaKMRtagKttaatag
+tggKttYtaKtVataWYgHBatataatcatNMRtDYaYcttgttHagRtYacgaDaaMMt
+cagattBVScattYcaataataBWaBatgDtBaKaHacagtBggaVtgtgttRtgacata
+aagtBtaVgttaNaatcaSgcctgtcBBaVttctHgVttcttgttatccaatacaNtgcg
+ctatacctcatHtNaBMtgtagaDtKagtHatacctHgtgaDVWtatcWgtatScattac
+tSgatcWatatDataRSgctHaaWataataYacgtacgtgDatHcgtaacSaaagYaMat
+aYaactggaagtKgattKMaatStRgtatVgttcttKSMtcataVtttaDtgttatatta
+gWtatNaDcttgccHaMDttStgtctgagtRtatRSMWttaStcatattaNaDtcaattt
+aVatgMtcaattagMYWaRcNtDttcaaagMgagaVHtatYaacggttScaaccVKHaaa
+tacWagaataaccMatWgctDtatttgaatBtNttgaaBgagaaWcttggatcRctctaD
+agWBcacaatMStBcBWtatggtagtgaagaMKatacttaYHtNctgttHSMaWttacaS
+aatgtattttggccatatSatcgctctttgaRRVVtDaatcSYHcSDNacattcMDaNVa
+gatctSctBcatagtggHagaVtgtSactctSHaMaWtgtatcattWtacgaaHatatBa
+aSaYacagtaaaagtVacatKtatatataVtagcgWccacagctcaaccttRtatNactM
+tcattaaatttNaaggctgYctctacatcaVgcMHaagaBttcgYDaSRtHgaaaNcaWY
+BggataatBactgaataYgcgtaacccactHataagaaWgcgRacccagagaVtataggc
+ttNtaaaaHatacatttttYYatHattgaatgtNcttatNaVcaaRtKctcgaaWctDtt
+ttataaatgatagcgSttcVtgatataaataataBgaatgaRacgagtaRctttaactat
+tNagtcagtgtgaSgaHRacgVtggRccatttatgtMtattaNatgttaaatRaBRttca
+tcttaRBtNtaNSWgtVSgcNacBtWaDgaaNBMgagaBMgaHaHagatttctNtWatca
+aaaDgtgcaaWaataBattaNtatgDaMaWDataNtctatDagatSWctctggaccatca
+BgtatattaaHacHgattcgatgtRtaYattactNtWgaaRgcgDaatactgWcKaMacR
+SaSaacDgtgSgSRaagNtKttattcattaagtctgtctctataaVgctHKttgVtgacg
+attgRYcatccWcMtaBagaHacaaaDaaaRVgcacatgatYaatatttMttaaWBtctc
+gaNcWDtttcagYKattaRtttagHcKaacaBcaggtaacctaHtaMtttaHacctVacc
+taaagtcactttcWcaatggatSaataHattacaMggtgaaWaacagaaattgttggRgg
+cgattatWtaKtScWKggtttcttgtcMaRgYYacacggagtgccDcDattcaaacHaac
+ttSScaaStMttaYtgtcWaaaaaaaataBataWaatatBNttcgttgtVatgacaHtgt
+acatHtaatgtKcatgSatacVRcVctttagNttaatKYgHtRccttDBggHgDtgaatc
+aagacacWtcgRWKaactgRaDNMactactgacaDgVgatcaagNRatacagattSMtta
+attYtgWctRgttaaKMgggaaataagttatgHaScYaattccRMggSagaKKttRggtt
+tgDtcgtcMttttggaDgcVctYcaaataattSctDaccatNataDtaaaWtttagHMSS
+aagaaBgatYaaggNtagtgctcMaatttWMggtctatttggaKagaggatWcatttgct
+atcgcccBacacttataagaYtcNcagaNatcaYHgNgaacRgtaDgaNYttcattRtag
+NDcHNVcgDctggDatDtgNaaaaaHgaYagtRtcaaDcgcaKatcagttattcataacc
+NaatacacaaYWcatBaaaacaRttMgtaattctWttMaMtttccgaNcatVtgatcBaR
+tttgSaactcaKYaaNtKDttttRagaMcDYgcaKcataVaaagattcatatWcHtagta
+gatttctBtcWHtctaRgaSttgHatgaHMtNtaactgaaaNWtDctgDcacattMctNg
+WattatatctSttaScctaDaatatDYataaaaatataatNctKaNaatatcSgagttaa
+gtKDttaaStaaHtttaatgaRataBtaVcBtcDWWaaDaacacRNtaVggatattatag
+tBttggcaaKcacRNgaaYaaMRaHtatBcaaacNataKacttaMtaacaacgRtaattg
+ggaRcttagtWataactKttDccgaMcacNHKtattStaRcSStDttacggagagtMtaN
+HatttWRNVgaaacattcScatgctaVSttaRaMagatcScaBggtatacgatVttKcVt
+agtgccgtcDtagtRagggcagggRRttKtcgtKDRaaatgatVttDtcatMaNKtNaca
+gMattgttcaacKaatYKttaactaatgagattttaBattBctcaaRWgtYtYBatDcat
+tggRtaaHttcaNagagctcaRatBtaagHtctcttRatagBttHtgatgattgcRcgtg
+SaagcYaccacBWgtaNtctagacgaaSatBNtHMcKagttaaDcHtaDaaDtttccaat
+McaSaaacWWggtgDtgtMtcacggcgcWttcBctaaVatggaagNgtaacctagatggY
+KRVttRtMcgttaagccaHgatHBcgNtctMKDcYtaVttHaaDWcYcKtttttgatata
+cataggaaaaacWgctgttatWHaggatcgtggcataagaaaWtttgatcaagaDatgaW
+tRtttgMagcBattcNaatNcKgaatatWBBcttKVHtgcagtagaYRatcggaagaRta
+ttaBNttattaataatatgtttttaagMggggMttctBgtcgaaMctcctaVttRtBatt
+aatattgVDcDtggtgaccBaNttDWaVtaaaaactHcaVtacKMtgaataacggHtaaa
+atatataYtacBcattttSaaSttgatcatccacatatgcYaVcattatcaagacYcMaa
+taagaWWcBataBattcBtaKatgtaRgtKgattaSttYaHcgttHcacaatatKatgRM
+gatgatgRaattctKNMRtggatNttttagYRtgtgYttaataaDcttHaDcctttgggM
+tcgcMgNYtcNacttKtttttgYBaHMgcccgggtWttatVttttMtVgaHagDNtccBV
+aaagtaKttaaacgaYgHagVatMgaacBaSacNaaaBcagaaaatatttaYgaaSccaR
+acgctgtYcctttStttaacgatVWaatKtaBtaaataVaBVcctgKaatcaggaDYatg
+VcgctaaacVtcHctggttaDggtatRatttttaaatDttaMtMaggtMaattaRcaagg
+aatVaaaactSRctatttWaDtBataaBaaKattScSVgtatcWaaaBtattVtattttt
+atYtaatacRKcgcgYtccaacVBtagcttYBtgtgttaataataWactatataaVccaN
+tcaBtttcMagataatgactMBatBctaaRtatataaaaaaRacagtatYgtHgcaDgaH
+taaNMMStKtDgtaaaaactgtaaccBttMaaMDVaaaggaVatcScMRMaBttctSgac
+KaccKcDgaWattHVtKaNcDaagRSgcgcaRgagtacMKtWaacRtcKKtBYgtagNta
+tgtttVttatcRaWtattcgtttaDccttMVtatgHagaBgtaMWKtcVagaagcaaaaS
+taaatgagaWtttDttttagNMgVttcWagacDgaMatataaataagtttgcctatRttt
+NtcttggMtggVcgaMaBMgaatDtVaDgttaaacgaagVtttNccaagtgHgtgtcSca
+ataaRYaactgcVWtaNRDccSggagttattatgcctMaaNcgtttVgtcaatctaccaD
+MtaattBaatMtKgaDcBggatVtaattRBattgcccatgaNtttMDcKtgcaccttccB
+ccaatctgDgMSgaagcactctaWtattgaHgcDaagVRgtaBtaaRtgtYcYttaagat
+aaaHaHataattaattaStcttcgatHWaaRRSHctggttgtccaacaDttcaKggcVcg
+tSBctBNaRaattcgcatagaMtNattStRSaaattVtMtgttNYaatgtaHaKNSagat
+caHctaaaKKgtaYatDgaaaBKSacaatacRgDctaSagVcagDgtYMtcatcgttcRa
+tgaatgtcBSKtSagcttagKKccgHtBRgttStgtBaaKaMtaaKHBgaVaVattaatN
+NgcattgagtcaBaggMgctHtaatatttDatcWatagRatVaaattNttttaaVctYag
+tRaHttatttaaaVtaccgtNattataKSRcgcagMgaaMccagaatatMgtgNtcttNt
+gattaBgaaaagatWtccNtDggaaagaNttttNtttSggtDcaaagagtactccattMa
+tataHcgcHMBtgaaKHSYtctaVtaattgtacctctctaaaVtatgKaWaacagttYaM
+tNgDYtttcYRtgYaWaaaacagataaacgtaVatNaaBtBattcctWaaggcacatgWt
+ttaMtVtagatatacgataMtttggtVBagatctRatKggttgcYtacSaMStattBgca
+tttKatKtVgcDgcttNaaataatWNtaDStRaacHtacttacataatacaMtYgcggca
+tYcactttttDtcaacBtgHttggctttHNtRcgatctcactctcattMtatccgattag
+gtgggNgagacgttctDtHcaaatacaVaaaHttctcMaNtaattHWaMYgatNacKNNM
+atcRtNtYMgVtataaaatttaaaBMtaaaatBtaaacttgMataaaagBaaatBVacta
+gaaaHtWtKRHttgaatVattctttgaNgaDDtatcVWtDaataaaVaaatgcaYaagga
+tgggcttaaRataaacttVDcattcaattgtaBcMtgYtBtcaMKcRNaKRtKcaatttg
+atWgaMagtWtgYVaRcagattacaWttgaataaaaWgHaagacggYccctBtWttttYV
+tttggatKBtVagHBgtaatgttcgaggaWtDtgatattaMaagttcattMtttWcgtNg
+cgaRcaactaMgaVHctctgcgagKRatWtggtcgtWaaaBctcScVcaHatattNcact
+ttccBtDaaNtYggaattRtcggctaggNVgDcgaacttMatNagaagtaaRaaRttggt
+aVSaagaattattcaatNttWcaWtaggattScaStgattBagVBttaNcNaSagttagt
+cttDccctatBatHaRRttaacBYKKtattHVcHagStaSaatNDDatcSaVgtgMttaH
+ttgttaataatcaYtDcatttHNaRgWtgtaYcaaBaagaatYaagaccKggRattttaN
+cgacStttaatKcVtcYtttcggcaaaSYacaKattgSatHtWtKVcagatccccStaat
+RMaatgtaatKtcDgNaYaaBttccRaaacttHtaRcaaagtatgtctaaBDVcKSKVat
+SagtggttaatcttaVNaagRtctgRataKgcaagactSKattaBatNttggttDtgcDa
+taKaKgKacaWHgttScVaagaWtcatHagcgattcBBtcWaactBatgacBRctgatDc
+MaaVDattWaaKtRcctYVYacggaaagVNBaaaaaattKYaKcMatgagcatStaBtcc
+tgaHgtttacHacgcttatgNHWatgctWWattttgYaaacctaacYcataVtagVagtV
+tNgaMagtcgttatcYtaagcatgKgaaagNSattKtttaaggacaBNRatttacatttH
+ctaaaHactNcNcaaaYBcacggctcaaHagaaSaagcaWtcaaaDaaBNtNacRgtttB
+SVtttccttaaDgcctgKSttgtcaaacNMcaBtagaWatttVgcRtgaRtMttgccVtt
+atNtatggacaaagWgcacNatcaDMaWtcHgaaNaMMtttgcatHtYDcDactttRYta
+aatMtaVaaattggtgtcaacatVctBtHctYNacaaactcaMaaaMcHgtaactHaaWa
+ttKttactYataagaYgcttattaWMDgStMKKatatDataNHMaSagBaaaVtYtgVta
+NtataDRcBtagttcgVKagggatacaaSRaataaatagtaataKatMattVaSatSBta
+gVaYccaaaYacaKSactctaaHctaaaSaaagNttgactaSacDtttcattVctccagY
+tcNcagtWatacattNgttagagNctaYaYNttKgttttatKacMgRatgaaacVccgtc
+aKaatHHcacRtgtgDtccatHaaaRtNgcaSagtStgWKtttgBtHtSagaaacgtaSa
+atctacWaaattagagaDaWgtataMtgataaDaaaaaaaagttcBggaHaDWWcYctYt
+catctttcaBtctBaattattagcatgWcacgcaaaaDaactRVccBtaWaatYcVVcac
+MatNatacctSgtWgtttaattcactaaagcHgaatcHatcaBtgtaWatSScMMgctat
+ctctRaaaWMgttaKaatagBtttcttagaggVttcaatRattNtccatttcagctactc
+cacMatSHtagataaaWgaagtttgDcctaagtMaaaYagaaattttVattRacatctga
+accataYtcaaatcaRttaStRgSacctBcaHcgtMcccBaagaaagaDaaattKttNta
+ataaMgtctYcttDgaactaKaacNgcaRccDKtcatgaagtactcgtgttcctBtBtgt
+tatDtctgaactataacagtagStaaaaaatgHaaacaacYgtgtgHacaaattgttcSt
+tBtVctaHaacttKtttttWatBtcccttaaVaacaMaagaattcaKaSNatMScRtgaa
+aDtSStDtHtacNtNtaHtMtNMNNcWtgctctaaWttaattaNtttKtBttttttagct
+tcDagMNagtcKWatVMgcttBcgccttttgtBtatatttYtMgctaKaacttgatttta
+tctaatRagtttggKBSatagtaVVcaattMataaSBtDtaBaactgSgtatcaactgHa
+taacaDcaRtcKttatgaatcatacgcgaagNYaNgaaacaattatHMgYgtagatctct
+WttacatVgcgRcMaagttgttDaNtScgStWgtgacaacacggVgcgaSctcactcaaa
+aYtDatatBtattaNgatactctaagtWtKSgYtatataaaaaYagaggttaKagtcYtN
+tgaagtctBWgaWtaaBaattStcatgNNtttagMtRDtWttgctYattcVSBaMDcaga
+tVgccatMatttatctatcgtBgcScYtaaccaaHcattgcagtcttMNVaactWWKcaa
+ataNaatgHatgaatgtMStgccattacHNgVataaYtgaggtKttNBVtYagKacHRgg
+YMacDatcgKtatVtWaKgtHatatMgttScgaaVHagaaattaNttaatatgcaaactt
+WgRagaaRBcNcatctaagtggatgVKaaVgNcaccagtatgHKgacaWatYcSacaRaM
+gttgcttatVcaaWcVaKaaaKaDtaaaatcgVaccatcgKgtDagBNKNatccgaacgt
+KgtYctgaKaaSKcccKgcVtttKcaaYtagcagatVcctVtgaMYctaccMcgDtgBaR
+taaattaaagctKtaaatatatVgctgaatatctMatccaattacaSYgcactWttaRac
+attgtNaYcaactatNNtaHttYcStactctatatcWSaccaVNctBtaaagataNaagt
+aaaaStBaaVtggttatttagDScttttMMWctagcaactBctcttattSatacSatttR
+tBataatcaaKVSttaaaaacaNattMBcaacagtttcVtttatatttgtaaKBgcacat
+tttHNNaVtWaggaDataatNaWtBataattVacWaaattRHtacaSgWtttataDMctt
+RScttttaaaaMgatacMatYccgacKMagVtWcMtBaaatDatatHtttDtaattHaat
+ctaHgcgtaagRgWaccattgaStttattctattcVacctccBcgttaNaacagNWtagt
+aNgtctgaHaacBgtatgMcRVatataatKNKaagtttRgtaYcYcaMaaagattKgaaa
+aKcttgtaBHNaWNgMatcacctgcaMggScBaRgMMctaDaaRgctcYtaacgtgtata
+cttcacDaKtatgcaatMtactaHDtaaVcgaagaaaggVaMaatYtttttattttatMg
+gaVYVaaatBaatMgctgWctaagKtctgBtKacaataYtgctBgKgaMtgtgataBagt
+tMaagRcccVtSNtaWcgVDctcaSSttKaaaaVaDctacYatctcHHDtgattaacctt
+ttYatattcgaaHBagWgYtSgcMtMtagaHactaSgBgBSatHtDttagaacSatccca
+YtatttgtgKcgDcRatctccNtaagctagBVWaBaaMHacaHctDVaWgtaBtaaStVt
+DYtatacttgttcttggNYtatWBSNcagatttgBtcVaacVtRgtYaatctatSatagt
+tDatgttgtKagtctagKHtcttttaccattcccctaaaaSatttaDgBactaMttctVc
+aacVgtaSYcttgYaaKaggtaWttgaaaYgagataatgccMgSHatHtacaaMatHDtt
+caagtaMatgtaagtgtaggtDtacStVaHcaactatgagttatataaBHagggccHagt
+aaagcRgcttagYaaaaaagttaaattatYNtYctagtttaacBataaWactVtRtaatg
+tHatctagacatttaKagStttgttttaaagtDttMtgMKgcgttaactaVttHcatccg
+ctaaaaDttSMccttNaaccattacaBcHctVcttctYtaaSSctVtRVattaaagtHta
+BgttcatacRcctKctHVHgttKtcatctatagNSaacHVatcVgRtgtaaaRatYtcgg
+gtBtgcKacttgataRttDattatcMaggcWWRttccgaHttNtacYtYactgtatWaaW
+taaggtacaDacaDgttStgcttatctattatgttgStaaDaaattagttRgtgcBgRDt
+aWaggMaaVttVRtcBttatcgttBDgVgatttKgaaaMttatatgattataWctcWMga
+HgaattMDatgVagtgatatcaNcaaaataSttattttaaatDgtaNDNggaaacgataa
+tttaRaaatataaaVaagttacDtgtggttctatRatgcBtaVatVtMtaYtttaaYgaH
+ttgttgagctacttaatatBHtctttaagtcaHaWYtKttacttgtttatagacataMgt
+tgcaBVcttMacttYcHcNaDatNttagatcagaatcttatcatHaNtatcMagYaacac
+McaatacaNRatDtaHDHtSYgaatcRaBtKttgaMKgcDgtacgtgYatHcggatactD
+DctaVRgtgctttRtatgtaaaccagtttacVtatttBcatcRaaYgcaMaagaacSctH
+RtctaWatatacgtattKaNagtagatataaWKcgggacgaRWttNacaaaaagaaatga
+tacDaaaaMataKacatVgcgVcgcNacaaHNattaggaacattYtcRYtggtatccBat
+caccgacaccagaaagMgataacHRgttKctDaggMaKtaaatttScBtcagKBgYtaRK
+ttagttttcBaaHYatgattaaDaDVacaagKaaRYattaMaaagVatattKactatctt
+DacHaDaatBcactattKtKtRHggtaSctaaaaagtttaggBScaatcgMStttaatKa
+caVBSattaKaaagacacaaagtaattWactttacWaaBgYtMcMccagRtacaatatct
+tatBacgNagaRtctHgaKtMgaattcKYaaMacgcaatctcNgYgtYRaHagYtcVgaa
+gaacacKgaRaacgBtttagDcgaWgaYtKataaDcaBatttccgaaaacaRRBaVtRtg
+HacttHgagtMttWattMtBtgDaNtgKtaaKDccKgctaMRtaNacattacWcttacBa
+cgRtRttaYggcKNattagtgactttcKHNcWBYagttgataaYagaWaSMttgataatc
+tataatRtggaKtcactWaataatYgtgcHgYKttaaaacNcaSatgcggacaBaRattt
+tcgacctHtaKYgttaaactataRaaSactKatSggatgtKYtatctYggcMtactatgt
+gaWtttctgYDttggtBtcHBctactacBcVacaagtgaatSttcHttttttatRYYacc
+agatctgatgacgcccVataagMaggWgYtatctgtgtatcWttRttcattattgYcHtg
+atcVatcttVSataactgtgcgtgtgaRWaacgatSgaNaVKaaaaMttccNtWgtVaat
+NtHgttgatVcttatcaaDaRScagDtaKtatttYaSctttctcatccttaattagttaa
+atactgctgNcttgctcatatatactaDtagctagRcataBcgccRaacaagcacaagta
+HYaaatgttaaRgacNgccgctcKtacataBtWtaaaDagagactacaccacggaagcSt
+HgggtcatDcKcaacctctgDVRaYaatattWttattcttataatWatattaccYaagWt
+gaataatgatttgtatBYSaDctatRattgaatDgWtMacggtattttRgtaagtgWtRt
+agtSctVtaRgttScRcattacYYatattaRaaggaataagRtttBHaggtattacBHMc
+acKaDDagtatMaaSMacaSggtVVgacctgttaaHagtactaaatYtSSBgaKatcMVH
+cDtatgtagaVgtWtMcttctYRtgctRtgaacatDctcRaggatRaaVWtgHtaMgaat
+taHataStgaKRaVacataDtgDRagBHttgNcNaRDcaaSagStDgaStattBtBNHRH
+acaYaatcagcatacDtattWctgcMattaMaaWgKttgRKgcacNYtcatcaaKtctaN
+tgacatMatMgYagNtaRWtgaaatBattctaStYgttcSYatcctMagtgatgcgtatt
+KHKtNtcattcacatccDaaWattgcacMattattgDcttgaBgccaMNaacattctcaa
+cgaggagctaactagattWaatgtagtcagtYtcKtMVSagWagataaatgtaaVtaSat
+cccVMttataacaVWHNataWtgccggBVYtacRgHatagVtctDttaccaataSaDgcg
+gtttcKaggtaaMcatgMttaaDacaccagYgtattacWgaDtaBaacctatgaWagaca
+YttcRHDgDgaaMtcagRtaattDtaagKtYMMacagcaYacgtWtctcaNcaagttttc
+tacVtatagttgttDgDRDtatScgatgcgagggSacttcaNcVaatKtattRtWttaVa
+gtaaMDtMaattHtagtttaSgWctcctggNgatgMataNRcttatataatcVtDBHgtN
+aRatgctttacHtRacgYtYaBBtaScWtttMKcStgRcaSgaagatNVtagctgtatVt
+aaagttcgWMtgtcgtHtcacSgaaWcgttaMcttWDWataVKcaatctattaKgtattc
+MttattcgtatcaaatacaDtcacatatVaatcSgtgDatBtgtagatgtagttataaag
+tctcatMNgataNgtagKcatgaagKcYgcNYtVttYtaHKcattaaMagaataRWacgS
+actctWgtcgtaaaKaWagRaBataRSVatccYacttcaggtBVatKtHctatMcttctg
+tHttcataMgttattcttRtYttagNtVtDatattgcatYBtggKtctatcYctDtagHK
+BNttYKtcWtRgtaDatgaaStgtaMagcBgaaagtSctRNaHcDgtttcYaacBcagaM
+ttatRaVacgttKaaaacMttaWSgWcNRcaVgSaaaBatNcatttatttgYatttDgtc
+aatgagaYNattggagcDagagatacNtaacaWtBHgtatNtaggctaggcaacYBtatW
+ctgaRttDatcgttKtaNtgaaaHaYtcgattgtgccaagagKatcgatatttcaDHMMt
+tVagaKRtaKtDacYgtcBtaDMacagatHcttcagactcgtagaMggtKSctagKtaBY
+MggtagcStgNgaacaatSgattaaKWNaaYggaaaacgMaaattgatagagaMtacacN
+acacSgagcYVaattHgatDWatBtaattaaYttgDaacgctcRatatacVtcaMgcBta
+agattgcgNtaHDgtcaaaDcYMRtgcataVgtaatcaagaRccctYWccaacttagaag
+aaNgccHWaaaacacaMgatScgatgDtWaaVtatacatggtgRNattattcaatctBct
+tatDaMcaaHttatacaaNcttgtttagSSatgatacccKttaMtcatWgaVataatatg
+YYtcaHaacactWHatttVYatatgDactaaggcgcaKcatHaccMtccHcaatgtWtct
+ttatgWDatctgWaagHVtDggaagagtYHttBgaDKMctMHccDaattMatcaaBtBca
+gatBcatatagatttatDtNatcaaaatctgaaSNaagatagtVBtagctaBVNtStWBg
+ctagtYgatHNatatgcWacWtaYtctatatgaatactcattagatcgHgaRattaatDt
+NcaaDgactSatactgNataBYaHKaKaactctcHcKHRagDttgtYgtaattaactagc
+tatatataaKcattttgcKtcaacSttgHRaagacNaBtatacataaaaataVWHMcaYc
+agcagRaagagttBttaaMtgatacSDaNtttgaagRtattaHtttagtatYaaatcacc
+gaYaatattWBtttataactMYactaaactaaatttcNcVatgcVgKVatatattaaatc
+cggaaNaacacaSatgcttgcHccacatgatNtatgKaNtgctggagtctataHcRRScS
+agcactcaatataggaaYaataaagtKKaaaKtBttYRtgtcNVVaaaaaatatagaNaS
+gattDtgacgtctMatcaaatggtSaYtttaatcttaagcKataaMDaMctgtYcDtgaa
+ttRctgHaatgttggtcttcaataWacaaYaNtacHNtVWagcHWtBBYagSagcaaatc
+KgataaSgDHataaacattKBttWagtRtcNagHcttaatBccgaaatVacggStctaKa
+RaVtgcaHBcgKVcattttHgctttgtgacgaBttttccatccMatRcaVataattKatt
+aaaagDatVttaSRMggtacttKHaacaatgagRaWcgDtaggcataBaVgttNBcgtag
+SttgccYtacWcgagNaatttgctagagacatacaaggataacWRtcDaacSDStcaRtc
+DcaaaHgtatcaDRtgcagtDtacBtatDMagtatcctagtgcDaSaaRtcaRactHgaa
+atccaRtWgaacttattaataScaDaatYaaaWaRNcagtaaaYcaHttBctaattctNg
+gBYBtggaacaDaatKgcagataHtgtcKaWctaVtNWYBgttttgtHScaBctRccata
+ataMaaacatgaatatNatgagtWgatggattgaNttataHcSKttgtatcatBtDtaWa
+tcaWaDNgtagctaaaWttBatDgMatgagatctKttaHactataSgattRataYaYata
+gaatDagtaDaagatcKcYgtgWSgtttttaYKtSatttgYatgYHStattaKcttatNN
+SataaaacHBtaKgcataggYtacgtttccaaVtaVaHDcaWRYSBHattattcaaaaBa
+tataaggaBtaacaYcgHgaatgcggYHagtactNagaaatttttacgaBcaaBttgagt
+KtYHaKKgttgaacgacacgBtWDtSttgNHDMgaaaaattcKcatgataMKttVHVBac
+ataKaatcggWtaccagMtttcKgScgcaactattVctHScccaacccHDtgttacgttH
+VaatcVgMtgttcatBWBttDaaactattcttaaactaYtRtgtaWataWggacVgtggW
+tatgtataaaHNctRgRtattaagtcgHgWStttaWDacacatcaHatttVacttagcgt
+HagagttgttcatcatgcaHcgtcKaagaRRacaatNgtYDtatVgYccaYKVttDttBc
+tYcttaWtatgYtaVttttacVatBaYKSSVaNNccgctgctBtcaagcacaNttctata
+YMatccWacBcgVaaatagWgccRtHMttHgBacttYScaaVtgSgttacBtctBttaRt
+SMgttaatNaRatgttgtcatVtaaYgVgcVaaYSaNcagcttatNtacgatagtcgaVt
+aacYVaMttggataaagatStcaNtDttgcBacatattaDWatDatcaatatNttagttM
+ttcaactacaRHYtcggaacVHtaggatDggStgSWtVatagctgtttaagBcccgBtgc
+gtctacYaBatactYMttHttVttaWtSttgKtcttcgtgacctaDtttMYMtaaaaaat
+tcaMgWatBtgWWtaScccttaaVVgatagaRtYataatttgKaVHtgcataYtaaaaag
+StcaRaMaattWgcaacaaRaBaataacaMNatagatattatgWtagcgVHcgtcatgaH
+gtRatcctgtcSaaatWgtatcHBcatcatcHaattattDBHggcatBtgttagNDggtc
+RttaataVtctttStaaggtcccBtccaBgBRgaDaatttgtttgcNtatBgaaaggcgN
+ttatMtggtBgMgatactDtcatMaaWctatttaaaacYNgtSgMatBcSactaKYaDVa
+VtcagaaaStagttYRcaaKacaHaacagctNcatttKtttaaacWtMNaatttattaaV
+gaMStMcagctaWgaSccatNatgMacataWaaMtataggcgtatcctagHatttttVaa
+ttttSBttScgtBSatgaHcaacgaVtMaaaactKHatatttNWtttataWtaatVttKa
+KMggatcMaaattattMgatttgtatRtaVgaaDtacacRtaaaaaMttScaggRttgtc
+ttSatYWtVMactagatVaMaaaDtaattttaBWcataaggaatBtRgtctaWDtagWta
+aWYSaHaaacgatRcttgcatcattaSDBBKttttctaYSaactcgYacatttBaattKa
+aaccaMStaHatHtatgtctKcWataactctcVNYtttMttaDatSacDKcacaaHgagg
+aaBtgNaaaHtattgtRcgacDtYtctttMttatcDaNgattagtttYtaattBMtaggt
+acatgtYBNttcMacaagaaaaaKgaaatcacaNttgtttttagDBcMgtaNacSatcWB
+WtataVatYagtttccatatHtttDtcgtggBggcKacaBWtBcaattgMatcttaVaac
+VYgMgttDcaaactctctcgcHaSatYVHRaaatccMMtaDHtaaKccactgattatcca
+tBYVDacgttMctaaVtatacaatBgaagttaattttgatatgcatKgaYttHtatggaa
+aatcaDtttBtatgccacattactcaaagctctcBKcaagcaatataNtattcVtcataa
+cMHgtattaaDtctNaNttYWcWtaVatatataWgtaWtgaHtattcgagtMVaHDHtat
+gcttctaaWYaatttaatccaMactKtcgtDaDVWttaccVtacYBgDattKtHKSVStg
+MtBgcgtDRSatggatatDKacataWtatWaVttctSRWgtcaWattKaaYWtYaHctat
+aKacMaagtctRttaatcgtgaHaggYWtcgatKttKaccttacttccgtttHcgtKtct
+taatSBgaatttcVKaMattVSgDDcaattcagtcataccBccgtgaVtaggttYgaNag
+YcHatMYaattDgtttaaMagRactHattgatttaaSKtSccggBattatatKDacaacB
+gVWBaaacaagattgtcDtcttBgcattatcaaaacagNtaaDgtggVaacYDgtttDtg
+gKccttaaaWcacgSatacaggtagVgatacctBttcaattKRtctaMgSattgtaccta
+tataaaMgVtctYMYYcacttRaBgDctRtttaRHgcRSMVaaaaacagaYaagtaMatD
+aatttaggcctNaacgaaaatgNtttaBtMtScVtVtSacStaBggtggtKtRcatagHa
+ttcctggaRtaaKaBKtagttgaattgtatttMcatgcttDaWYtaVtNDgatKtHaaat
+taattaaStaagWaaBtNcaccaatRcacttgttttcaaattctggcccttttBgHccat
+cgaWctataSttBgataacagtacggcccDcScaactgattttaSWYtaaaMaVatttag
+ctaBgSaggtNaBRgStDaatDBtatcHgDtRtgMtStWaYaggtaYatBtaWaattgaa
+YattcBVtaVSactWaWgtKaatagaaatgNttHtgtcaatMattcggtcaDcVttgata
+MNttYVgSSYMWaVtgcaRaaccYtgccattaaHVgaaaattMtaSgtaYaggctataBt
+cRtttaaBtcHDatDgtaaVttgcagNcatWggNtgRMaDcYgYttacWNtgcaWtaaVa
+NctVacaaccRcacttgMttgtRMtgtccatttgKagttctVagcttccaccaNgtgcat
+RgtSBaacggaattttttNagtDcagaHaaaatStcaMtctagcacactHWtNtgctcgt
+NaWatataKcMcWtagaggDaVatttaatttYSDgRccWattHtaggctaccDMctacVa
+attBYtDacaYctWaHaaHttcggaMKaacSagtattaaatDttNaVNtacgVttKaaHt
+gagttWcKtgtaDcDaKacgtactctttacatSgtagtaHHtgaaatRtttagttMctac
+KgaKaatBttataKWMcggtttatgtgtgaStaagaaRttaVtgttBaHgNtggaRaWat
+aacaWtRWacaactcgHWttttaDagScKgtgSagtcMgaRgttacccaaaKRaaatatt
+cKatttNgtMaVcataccaKgaWgHBWagctaagttatcDaRVVtggaaHSVacggttaH
+aWWagtSgctctVattKctKtMatHWcgccttaYtagtaKDaVcHtctgHagatcaSaca
+atKtatgatagDgtcgttttgatVtatStctYaYNtgtgKaKaVcVNgaattWccgattc
+ttgaMaRattRgcaatHctcattaBaaMtattNSSttHcagRKRaaccaYacMDtaYaaa
+atttRataBVtcacaagKtatgcctcatcgtgWataagcgtatcDtNagcatNNatgttc
+RaaScagaaaRaataMtacMSctKtDgaBactaggtWgcRtaWcaYtgtgWaagDKattt
+tttaaccaaatDHattgacSttttatWaataatDaDaaaaRtaYaggagcYatacYaKaa
+gaaNtaaaYtaVtDtBaaDcgtttKMtggcagtVatgccggtHgtgtaVaacDBaattac
+aNatttMgaDgcaDtttggaaMgtYtDtSgccaaaaYcNgaacDVgcattaNgatgaaDa
+BBttgccatttRtctaatgtHNtaaatBtaMaVattcctggaaaaatMattgtagRDaca
+aacgaataWSBctctYVcgtSaMStgtttSatNagaacaRcagtatgaNBtcKgBttRta
+ttVtaBtBaKactaWaMgRtcMtaDtYtatHattScggacMtaggcataaWaKHaataaa
+gYcgWatatStBattKaKagKttacMaRacaSaRaaWtKaatagSatcgaaaKaaVcDtt
+cVcgaKVattggaYgtMataaacRtaDaactNatYcagtDgttagacBataRYRDgttct
+tttattacBcHatgaRacMaactcatVVtttaaaHgctgttcaattaVaHtDcaYKacgK
+tcNtttgctttgHWcaaSactWKSatcgYaNVaattacRcatVNgtagatgcatYatVaa
+YWaSactgatccatatNMaNagNtaatcgttaSttattWattaggagaatcNaaccaaaW
+atRaatHMaattaNWatRaMKaWctWtDataaagHctMctttRSttaacgaSWcatcaVg
+atataattgtWMagKKaBBgatatctcgHSaaNBctgVtaStagtttgaggSgagcKtta
+aatHattDtaaattgaacatactaaWaBYtKttacWtaaVNcWacgttctcctaactBaa
+SRagaaatgttKVgtHacatctcaScaataNgaaVagaaHttaKgHgKaccgtcYtcctB
+ccataagaSacataaaggtttDtVStaVBgtcgNatgtgaVctatWaaDccWHcctttaa
+tcWactaatactcttacttgttcttatttatcaaagatWacYctacKtaSaaaStgtWaV
+caYaRctgggtSaaaWtgctgcHtttgMcgatSaagttgttttNattgaacttaaKaYcS
+BSacWattaataKDattKaHtgaaattKKttttgacDtDtattttDBDDcMgcatagaVN
+ttaWtgaDttgttttttttgacattatagBDacgatNatMBcaggtacaatgtgctttat
+atttRgBcctVtYVctgcatgtgatataatHagtttccttHatagtaMMaaWggBataaK
+tttgataaagcKgtVtaaaatgtatWWaataaHgatttYtcWataataacagaacDRWDg
+WaWaaaggattBcRctacYtagctNgtScagMcccHaBaYgtgctgtSDtHacKtNgtga
+caaaacccMcacaKctcactaaaaaNgtagWtttYtgaDcatWctataVctNttKgRtat
+ataYaaaRacaggttatagtcRgDgcaYctattNcaNtVatYattKgaaggBDtttactt
+HttNtgcatRatgaMHtRBtaagatMcacatBatgtStctagacttccKaRgaWccRata
+VtggaScgatttDMaaatNNtcYaYtaDaatctatgaVtctBKtgccYgtWatDcMYtaa
+RtcVgcttttDtMtRagtactHccRBWatatccttatMtNatgttagagBcttKacaaMt
+agaaattaDttaatatgaaaRattNcHSgaaHtaDcagctYacgccagcMtaaMgDaaaa
+aggatcttcaaVNatRcKVaaHRBctgcattatMaWaNaKataaatatgWaaatcgMaaa
+atcctgttactDtDagaccYWacttctRatgataaKtaaatcaMttttcaaRtScaWgat
+MactMtcaBNataaaBactggtWHtYaattaWacattgaaVtYtSgMcatgaatYgatta
+tacaYttaaaKRgaVagNgtaHWaattcgDaRaaacgVtBDtStttRaKgVagatatWtc
+MKaaaaMDatttaaYcataDYagtaaaaKttVWMggctgVgtgagtKagtgtBBNctaca
+aacttagattSttHagacKVttgHttatSataaWtMHttSaSaaaaDatgBtaYaaaggt
+taMttgVtVtttctaattgaacaggtttDDVMtNSgcatataagDaNttatSVttMScNa
+aattDttYaaHcNgttatatBatgDKctttgVVaaBgataaBatRaagactBYgMgNaBt
+taaattagatttttttaVgttaYtatVtccgtaagDcNVcaWtgcaKgggYtgagattaM
+aaagaatagtgaBaVcacBNtagtaDctctcVtaSctgtagcBcHMWtataattDtaact
+ttHctaRcRaaBaYacatttcVRaatctgctattDSNDgBatcaaatgcaBccKctaHcB
+tctVtaaHgatcRgaacggctRtaagtaSatatgatcaaagBtaagatttVaMagaagaW
+WgcMWBRStRggtttWttttagtccaMRMaaattaSgBccggNataagtgctctttacYa
+taRtcattgtgYBtggcatRtacttBaacDacaKtHDtaNacMtataaKKtgtaaaRMVt
+ctVcRatcgatttgcattSaaaggttRatagtagaattVcNgRtKccBgBtWcataataK
+ctctKatttttgVcaacKStcacSRtattgcggtcctcHatcgaaDgaVgctagtMNVta
+attaaatattMYNcgattaaKtMttRtYgacttgttagggcDNgagNtKBaScagttctg
+cMaaaMtHctRaYtcgRtHatVctttatcttggtYctctYgttgattttaacSttaaact
+aaaWHattgWtctactatttcgMcVaaMctaKRcttcRaatSgctVNgtgaaaNcagata
+atcaatcKtagtgacaaBVtttgtaaVctaBatgtaagtgtacctttacKtMWtaaaatW
+tcVctgagataattacggaatacgSaWgaHcagtagNWaaaSacggaaatgatRBtRctV
+ctgtVaatataVNactMgDtaatggtatctacaaatgtatacKtttgttttaaacgttgB
+ggBtgacttWacgaMtttcagaacagaaRVtttKBacttDWaccagtaaatatcgMctta
+tRtaaKKcgMtHKattWYYgttgatgttaRgacHcattcttKtcgtttaatagagWgDKa
+YatKataKcDgctaaaHWgRtagccgttcatYattcagSHtttattataBVccaNMHtta
+cgWttgDgaaRtRaatcgatNaaNtWVcctacatacYtctgKtcattatctattatcgtc
+KtaataaattagggHctcatgHttSNacctYaKttMHtctttSgacgtttgMcStgttca
+aSBggataggWttataNagaNBcatcaagtBtagcMagtcagagaaDcaaaataKgtatg
+tgSaagtgtYDtDccVaaacagaagttaHSWatagaaaMYaggtacttctccttatatHa
+tgctgVMatKttgaNtggSaRcattggttgWcatYagtaatatttgcttgaVctaataMR
+ttttScggggtgagVcacatYBggtccatMattBaatgNataDatWtDttVcataacSVt
+attagaagtaDtatcBacNaacaaBaaagaaWBHSttgattttKRcVataHatttttgaB
+tcctctacctcRYttagcatactttagaMHgtcatgtHtatctaaYacacggtaaMtatg
+ttaagaHWaRcaaBaacaVaKattHgataNatatacgtatttaDWctagatataaNtacc
+gaacaDMttDSaSYaaYgYaVtcatactaaWWtatataaVtMcagMccaDaaSatBatta
+gcaaaatgRtaHRgccgataatagcaaacacWacagaaVgBcagaYctHctgtcttaccB
+attVaYtttHatgaVgttcRgaHtttagttttataatRWggattYatatMaaaactWaDR
+aggataaWgMataggtactatatttVctataattaaatatgtgttDtcctaKataaaaac
+ggtacgtKaaatccBKtgtaattacaKtKYtgStRaagaaaaaaaggYagtNactttaaN
+aStcNtBcBaaacHtacaatSgattYttaacDacaHtcttcatttgSYgtctRaatVagc
+aWtctcDcRctNHatScRtaMgaacWaaYatcaHaaagttggagtacaNcSRttagaatc
+atVgtgaccaaYacWHHtaMtHtctaatttcactBtgNVggBgttctaDtcttaWttaat
+catatHgaDacatgaaNagtaatacgDgHttaNggatDaggactcaatttcttDaNtRag
+ttgVgaVRacWNVHBttcVtYYtagataagHtccattcaatNaataYtNctgatcRttga
+YaaaBcaKatcacgSaataHatggtacacctttatRcgtaYacgataHWVKaattVtKcg
+atcgtRtatagRgccBtaatagctcVNtttatgRtggggtttcttatactaatcMaaaWc
+gcaatKttatttgtttatHRRacaVcSgatcagcaacccaMatYacBVccNcRgagatct
+gtSgaMttHgtaattatggRatgcWtcKatattMKWtaaatctccgtgtcaHNYaagStK
+caDaMtaaaWBttacBgNctMaatDttcttgatMagtagaaatYHKaacttattSgttNa
+KagttctcataagtaatgactgaVStaatcctcDagtcataagWtataatattacagScH
+aatatagcaHYaaSagaaaaactYtRYaatcggaaHcVcDcaccctattRaatattNgVa
+atacagaataaSaaaagcWRgaKttccgtaWttctaaWacgatctMHaNWSgVtgNttVg
+tattStaatNatVttacaRWagNgcaSgRVtcYtgtctYgtRKatctStHWttcYagtgN
+tBaacgtagtgtHcgaSggcNgHgWggKatMtaHcgtKaHaWggacRRatattaHaagga
+agaSgHggtttacctagtaattBaaatSttYgtagBaSKBaaSKgctMMcacagcgtYat
+SctWctSaatRtKKtgatatctMtattagcgagaMctNtBcgtatRDtcatHtgaVcYtt
+ctaHacgagDaaMNtcttaBgWattatagaKtcWtHaMacagattgtHacttttgDaBWD
+tcSWKacKttcaHtSgttttDtHtSaVRYVgcagaatWattYtgNcgccBSttataaNct
+ttcHtccaaDRgaataSatgctVDggacagBYtBcRacDtYDNtgWaattattatYKtNc
+ggaKRatcagBactgatgcctSttttttDtcSgtcaaataataaMVttgaacBagtattc
+tatggYtcaaatDWacVtgataYYacSccVcataaagacagtNaatgtactaagtRtatt
+BMKacNacagaaWtctSaMgaKataaaMBgtYtaWaaKNtDStSNggaacgtMRtaaHct
+atacMtattttaccaataKVtcagctttatacgtSWBaStgttgWVtYaacaacRgtSgt
+acNgatgRtaYcagStcaNScaaaRttaDttctcaaBgcScDtWaggtgaacttNBBYaa
+ccaNaactNgctaaDaaaggttgagaaMtatacttgtgtctHtgagKacagcacagcgKS
+attaSDaKaatttagtHtMttaMVctaaBtgBaattttactttaKcMagcatgcDcatcB
+agaBHattVgWtaataMgtttgtDaHaggctgtVattDYacNtNStttaKaNggtBtaKt
+gHaaKcaacatDMtagatgtatMtaaacttccNBgctacgtgcaaKgWSNacttSBaggM
+tNStaKtcaatagattatctagtaBttaggactYtaaaStaaYtgaaaagYtMaagaKct
+gtVtttcgWcatctacgtatVaagtagaattBcagaDcgSgtaSggaactaRcaBRtMtt
+RgattaattWaBYcaataHMacgHactatNctacgaVataNVcHatatVHKKagaaRSat
+taacgttMattgtatagBagtatctttgaagaBctgattattHgRttacDgMgtWtaggc
+aatNttgcttagagaRatttSgtttBtgRtgaNtHcgStatgaaKtgtaBacctgaaWgt
+KatHDStatctttaRaaataacaBttStHVMaccggtaVYaaBttYNKgNaBHaaKcKaa
+atStBcattgagggcRSttttctaaatcacaRBattccacatagacatSaDtaaaSNttt
+gtatDgWgcatacgaSacRttagNaggaHtttagccttttWDtcYaVtaRtacWggctca
+aaacVctWtacatagttaattBBttMacatDtatttaaRggattatBVcacattattaag
+WctactVcaBgcttKagagttatRBgctagaHtgDgaaaSVtKgattaWtMDWaRccaaW
+aagtaaVttgWgVgacaBtSaacDaaaaKcacaRKaagttgagtNatttaSttaWRgtct
+aaccataDatagYaMgaWBcattaacSttcacDtSttgtaWYataRBHtccagaMctaag
+aWagSDaactRNaaaWagtacaScaSDcaatMaaaaaaaVBcatKacaggtgMaaMtatV
+aVgcctcDDYgtattcaatattaggagtYBaaatttagaaVWDattcgttagHKSgcWtW
+caatttaBtaatNcaMYgYagatcRRtcataaaYctNtatttKRatRggtYcgaWcgccc
+ataWttVaaBtaataaatcgNtctttaggNtatatgNaagtMttccaagactRttgtgat
+tBagBtaataattBStcaatttaWcattaatVtacatgtatttBataVYWStagcaYKDa
+agYtaggKtgagatVtMDtKgNtcatagtNcagtBagagcaNaaNtaRtagatatcYWtS
+ataWggacagagtcaDSggYatttDaaatcactKatWatcDatatRattataaatatcta
+ttHSctttggNctaagtSacgagatatatatRataagtttcatgcSaaKttctHaRgaaD
+atgStWcataaaaatWMNttaaRaVgaYcHaagWggttttaaBtcagacKtaBtggcaac
+HtaggVttttactatRWaataVcccaRaagattNttggStYaatBRaataVacgaaattt
+aBaMYgcaMgtKStStVtgVaatacccYaDVYaVaYKVtgatgcctacaaagcWgDtVtc
+taBtcctccacgatatWtcDHHaHacaaataaatataccaYRSataVagtttaaStgttg
+RHtctaDMMaYYaaagatacaBWKcagttgcaacgagBagcaaatccgKaRgtgaatcgt
+aWcatYtWaBtaBatcgRattcaagtHctctaatcttcctattaaYgaNaaaaRaDtact
+DtMNagatMtttRacKaccWaYtatcagaaKcttVtVaaaatgttgtNYgtHtaDactag
+gaRttaccVaagMacgcKtatataHaMtcaattcctMaRtttttcatgtctcaacatggt
+gacatcaBatHaaMagaatttattaaaactYgMttaKHBccgacttttaVaaVtcScHaN
+ccttacccatataMgggDtactagKgtcacRtacMacYgBaatttcagYcacaaataaaa
+ggagYaaMHtataaaHtKgaaHtctcaVatcgStcatHtcaYctttWcttattBactata
+atWctcctRKaaHtaaHYcttcaYataaaHtNcaSctgattaagaKaatWagRaVaNSHD
+aactaYVRaatgttatVYttatDcctRtgcgaacStaWttgaYcatYtggtatWNataMt
+DNRtgtttgggtHcWtatHaaataatVtaaWaVgcaatagDatgScgNcagggagtcaDt
+gagataKtgtctataattgtgaNatcaNatDgtagctaaaNtgtagtcBatgWcagagtg
+tWtaagWtaKgattHagWRaNatacaagtactYtaWgatataRctcNKcttttgaRtgKW
+tgtgRagcNtKtYtgatatgatBDKVtaaaaatttWtcaatacgRtaactttaaaaMtaM
+attaVNHRKttattattaaVaatagatYaggattVaaaRactcaagccccRtagtScgDW
+gVSagtggtaacataVatttcagtttRtattcttcYaccaaaagttNttKtggBttBcSa
+WaattataatcataBtgtMtMtaaagataYtacgMtWaaacBtttatcKacaaaatattM
+agtKccaaWccatttgtgacctttMSataMgBtcttaVgtNttttSaactatgaggaSWa
+taRtHtcgaMagSMccSaMctcgNtatgtataaVtBatHcHtattaacgactgNKtttaM
+tVaaaagaatVgttMWcttacacgtacScttcttcWtaatccatactctaacaHHaaaat
+DctNtgatMcRaaWRtMgttgttatRagtaNtatgRtaMttggaaKWttaRtHKMaDDaa
+catgcgttaaaccaaaDttatagVRBatacMaatacMaaatWcNcaaHttBgttgtacgg
+RKaaaMtcHgttaattattttaHgKtgttaatDaHatctggtaatMtYaRgMccKRaRKa
+DaagaggatBtSacatactccaKgVaaRMaBttgcataaacYtKgaVDtttgcatSaata
+ttatNattataWatWgBttaggtBttaaYataaSHtRtaccaacMttaccattccKggKN
+tMatacctctgtaYctaaccttgagtataaRatagaatRBtttttMtgWNtKtgcttatg
+actcSaatattgtBRBtSWVWYagtaWBcNatttcNNgSKacctgaaMKgatWcYHgRat
+aYggtctaMtggcagaRgaaYaYgKgaaHVtaattMgaaWaWaDataagaaaaBDataca
+tatgatcNtagagMtactcatgatgtHataaggtaHaWatMgtagcttaWtcStataStt
+agttttgcaagtgctgacDtgctcDtgaSgVMtagttKtaacgtacattaaatctHgatY
+atttcgggcaDtVttcaaacccgDgtatBggcttcBcWtacttgaatBaRNcgYtgtaaa
+aaRDctKctagtaKSatRtRatMaMtaacVYaKtactgRDcaataaatSacagctDaatg
+gttttaaacNttBaattgattaaMgVBKtBaacctYNcaKcaVtDYtcBaaataNSaBga
+tacccgtVtaatactSgtttgMSYtttgKtgtKacgtKatgataaVccaMgtaVaWattt
+atattgBNtgtVgVNtYStMtgtatBcgagaBaVatgatgBcStttgtagDgYMgaatta
+cacHtaaaaaBttKaaggHttctaggKagRNtMBaatWcagMSBaaVtgaatgtgatNaa
+tSagcaatttHctatWMtgVcNtSaNRHatVaVacVtHattcaataatgSKttttttgta
+taRKYaatccRYaatggtaVtttaaaaaWBKtatatttatgtagtcNatSaatatcMDRt
+gtBttYtatKaattaaaaYtcWccVattcDaaatgattgtHccactgNgctttBtgagat
+WDgVgtactgtRtaaggtBgacctaaatctRtDttaBRaYacaaaYYtcaaagaWaSDtt
+ctttggacttcBcgaDacHataNtNgWtVMVtRactggaaagSgtgggtgaggcctccat
+aaatNttaYYgtcBatattWMaacMRctcgttaaaVatatagagataKatRMtHaVagaa
+BBtStttaatcaaatgagtatcaagtRMtaccgtBagaWKtagaaaYttcSScttaVttt
+tcatatcaSgtcWNgtttagccaaaVgaatgtgttatgaaYaatgaataaaagagatctt
+cYacaaatataDgRttcMtcataYaBtctStgaatgagDaDgtRNaMtYMatatagWNgg
+aNtcattatgacYgtBKYttttagccttataaNRaatggaatccaBacgttacttatMNg
+gaaaMtaaRtctagtttttKKKgcBttgccgtHKatcgatVtttacataMtagNaMttct
+KHNctaaNatttWaRNgRatctagatSctaactctDttaagacgcatagcRNgagatttg
+tacattSattaacttttcgttgattWatKtgaatttaMtSBattKKcttaaSggcactaa
+taaatcactcaMgacggtRcaDScNctYtBRYVgttgtttaVtacHWattattcatttVa
+KtgKaacctaggStatttacaactcKNtaaacaagSttcgattatttcaRttVtaVaaac
+RgDtaatgtccMaacNtcggttgcctaattaaaNaWcgKataaYcctSgMcataaatttg
+aaatttHtagSBgKYggcgYaagagataaWBcMgatRBNRaYctgHatctatHttgaHtg
+cHKBKVaWaacacWNRactWBVttaatttVccaagBSWacaaaatcDgttattBtHaMtM
+tHacKgWtcctcctttHaatagtYttaagccaHtYatatttacgtcaSgtgtYttgBcat
+catttaNRgaKgBtgattttaaatgaattVaKtVYgNaatgDaacaaVtHaaatggtttg
+aYYatgctgcacatttttctacVtacaNatataHtgtcVtaacVgtYccgaactaKaaaa
+tcagtttaKNRtaaataMatgtacatatcKScctDatDcKttSattttagatgttHtcBt
+KgNVRagctaRVtttaNYWttcWYRatgatMgaMKRctNVMgttVagWcaVStcDgtttc
+tcRatBVggaccgaatcMttgagaBDgtNMgKKRBNSMgcaWHYWccNgcacaggVYtMc
+aaaatgBtaKcgaRacccgStattcHttgaYttattattctaVMttgaacDaWtNccDtc
+HBataNcRggaaNBtgaYNtaaMaDctMaaaaaaHaaattcBgtcgHtgcgaaStttcta
+cttcgMagagtaaaacaDctgcagHctHtWaacgaatgtggtDacgtcacataSaatKtc
+WBtataccaaScttNgDgcctacgBaNWtagataBaNtRcSggtaMattgaatgtRHtgH
+aaNWtgttaccatacctBataaMWatttNttVaaRagMataVtgtaccattYVcKYcgag
+taaYtttgDaKDgVacMtttaVttcYcgtMattctatatataaggaagagttaaatHgtW
+ctatttgaaatHttgScgtBataatgatRWgtttVgatMBcgctttatgtctgWKtaaca
+aHttaMtctttatcDtccaHaNYtSWcWNtHNacaaatactNggtgStacKatgtgKVct
+aBcaHcttaccaaWatHaaYtattatYtttDgtBaKcataaaatcaNgttNYcatVSgtg
+atatYDMMtggaatKMaagcttVtaNNYctKcctagMWtttatttBattNagccggaRga
+gtattaKatgatctacatcaKVaaagttYgcStagtctacttttcatKtWtKtctRaRDt
+cggtataMcMDcaattNcacattattgaBaHattHgcYattagaattataaBtattBKHt
+gtaacHtHaacaaRYaBttaRVSaagttHVtatMtcacaWctgVtgaatcVtcctcNata
+acacgWtattDWccatDDYtcgtaHaaKaacaYaHaataBtaaBKagtttcStWataccg
+NcaDtWNaaRgctcNaacttatttgttaaacaaStttagtgVaKgggtatNaatVagtat
+aVVaHtaRaccacaRatacNStaacaYDgaWaRtaKttgtaatacggtttgccaaggMWt
+caaccttcgctaMSaattaatgaaVDagttBcatccattttccaaBggRttgKgccaaaY
+NcDcaSatMcaattYDcatcWatStttggaaWtttHtatVaggttDgVWatttaBWMagt
+cagcgaSaaSgtattctacHtaaSaVacaataNKtatagRMagtKYBKggtttKatDaca
+WaYDaactagcaDttctctttHtagtMtWtttatYatWNaBgHtaBgSttRgattatgKc
+ccaaBtWcccataaNattaYtRYWgRccNatatHttWgttatactttacBYHaaaKaHYa
+NttaatagKatacaaatWSMctttcKacatMattgcaRctBataaVaHtataSctDVtRa
+acttcggScYctataHRHtgttctgtgattYatatYtcYHaataaataYtMMgttaaatg
+atcttaaattaKRtttaaRtaacttaBtgtcatgtctNcaaKactMtKatagRaDKaatg
+SaHcRtMDctagatcaYtRatMSVRMYKYaggataaatYtDBaDacDtaVtacggaKtta
+ttNaggScgWcaYtaBaaacaWaNVtHVagtBaatgaBNagHaBtaNatNttSgaaactc
+tBaggtHHtgaSagYKNcataaMcatagaSttctNBYcttattcatagagagtHWWDtct
+gMtRHtactgggagcKcacctggaYattatttgaaWgtcaVaataagaaNatRgtttacN
+tWYMBcNScgggataataaagtWYKDYcVWVggtttMcttYaatagaaKaaataDcaYMV
+caVtgtStctctWaagtaRtaagtaaatWacSKaaatYaScctggtgMKtYMtctacDat
+ctcaMatVtNaataaNtaattgaagaNaataataagcttaagtgtgcgtVgttataYaag
+VgNaaRctSctgWKVaYKgctNWMaaRaHatcgctHaaYMtccggattgtgBacatHaac
+ttggtggDVgtcaaaggSatWRaKtKacNVggaatYttatttattcaaSttttttttcaa
+tgttatttgttttaBgcatacWKDgtYNtcYtgtcttttttgtcaaatgatacttWagat
+DatttcacctaaaaggtgagttatWgtgHctaatMtRKagccagcgcVgagYagtactgt
+actttagVctaBBaYNggtYtaattttcRtaaagatctMtaVYatctYgNMaVtaWtcat
+tgRtaNataagaaaacVSctHNtcNaMaRYcgagttaHcgacNgagagBgtKaactaaat
+atYRcggatgtKtttactgDctcVaYaaSaacBcacatagaaataaaaWDctVcNtttRt
+cataatNagatVMctBgttcHtVgagaNaaaHaaSccggatSctaHgtgaYRagattDcS
+DtMStNYtgtgaagcttgggaatttttDgcaatHatgaBttHttaacatBcaaagtaggt
+KgagacaattaataHcaNaaHataMtccaKagagtttBYSagDDtaNaRtWtWagatSgc
+SKtcttttcaaRgtMattatRtYSHgaMccttttttBtHactaattcaHtMatagaattV
+tBtDatcttVgagtatttaaaattacYSattatttaYtagcaVSHattDctKcVattata
+agagRaccccWcaBtYYtctaaaaYccSgattaaaMDRtHatMaYtHtcgcaaggWgBaN
+VDatataaatWtcMYSVtacBYaaatactcgtacttttWgaacRNaattctHagcYtaSt
+taaataatttttaaSDtKaaMcWgBaagBgaatDagaaatactcctNtgRaattaNWcat
+tgYVMtRtHgBaatcaagRcagtStaaWRgtaaatHcaMacDctatNaagtactVHaaVa
+gMgttgKtgtHatcMacatagMgaBtSaaaBtagttaaNaYgStRRctYWYVtttMNBgc
+ctgMctcacttagtgtttDagacaYaattagaggKtttacaatMttctttatKagaaNtB
+tttKSHWSaVtVtgttaRSaYccgtaBgggMtKtttctYWttcaVaagctttttMBgDKc
+catagVactWDgtRtKMtgBKaDaVaggtttRaataBgttYtattatgttatgtcMMaat
+cagaatagHaacaattRcBcDatttaYWttagattggttgaMcgtYRgagMtcactaRct
+cBMaaNgcaStgcgNtgagVttaBaaagaatacgcatYMaaatDtacgatatataMtYKa
+tctScatattNgStYWgtttaYcttgtagaHaHaYtaRaaagttcMHaStatcatYtttK
+BtctataaaatcaStcatatStattatMtSatcataHcaWaccagHtaaggaHatatgag
+aaYYgtgVacSttgKaBacSYcaNNccBNtHKtHcctttMttttagtaaaBHBaaattWK
+gtaaccDataactgatatgtaaRVtaHgaattctcRttcgcatHtaagttYYctaaattt
+tgWDacBtataatttctVaYHtMtagMaHWtagatttcaVgtKaaacctgHagSgtacSW
+ttMaBcHttaatcttMaStYatatatattagtttggMaYaatHgaaaHHgatggccctac
+tatSgacaatcVMcatactBBMtaattaaatattBNDacYtgYattBttHtNcaatgcgg
+acccctDcYcDtttaKaSggtatcaBYaaBttctDSRgacHttagMcggtWgagtcctRa
+tatRcttgattggaaaKggaaaagaaSNtattcNtataatVttgagBaMaaBctWtHatg
+cDaatHccgMDcgcWaaDaacWgaagcaatattactcaaaatMgttgtaaMatatYtctR
+SctctWcatttVatgBNtaaYagNtaMatcSgSgaVttSaccaataccKRNcataaggYc
+DMWaSKVcccaaaggVtHtgHagMaggtKVatVtVMDVatBgttWagcctagagacaaag
+gtataatttgcttgtSaaccttctccttcaatgNaacaBtttaVcaacagWaHMttgtta
+agttNWaaYcgaaVtatacBatgagHtSattacBgttYgtNRRcttgatcttaHcaataa
+ttattttccttgaYgacVgNcttaRattatatctcagWWatNcDgacacgttaatRatta
+YcKtggtSggWgatMcaaDBttgaacNttctcaaHtHaagcgVtDaaDtNMcagaaatWa
+NtatcttcattSgatatgatactattWatSaattWccgtctaatcttgKDacatRatggB
+ttatggKgaagtttcBaKtgttaaaKtcgatagcNgtatVDagaDtaVtcaactttYgaB
+YcgaYgWgaWtaaaWatVtctVtgggKaVctcgRtttacMaVaaagaaggtVtKNYtWcY
+aVtRVccgaattatacttatattagcatcKBattttgVDggcKaHaYttgcggcNaatRa
+ctWagWgttcagtgWMctaataBHtttgHaggcctgacMcYaRtRtcggcaatBagttaa
+gcDatatatNttgtMcVtaaaHMgattVgaYgtattatatSaDaaaaataWacaaNttKt
+tcatttttHaMagatYtgtttcattaatatVacgcHRttacaYtaagttacaBtcgaagc
+gttWtatVWRaaSacggWaBgSgcttaScatNaHcaatWacaMatagttcagYBagYgVa
+ctWtgtStNatacatYgSYDtaaacSaaatBtttKaKRSWRcRYMgcYgVataSNNtWgV
+tSaMgBcactaaatYaKattVggacaWaaatgHtatHccacStaatagaYaaaVaMaaac
+YYMctcagaNattatctattaaatatgMaRgggtatgaMcttaHgattgtScgtgtatVa
+tHNgcYttNatatBWaaactNVtHScgataaNcBataggtaagagatttMatVtaagtaa
+atYgctgttttaagatagaWaaYcgctaacttaaagaattggtSYgtVaStttRtcKtHa
+VcWaYaWVSccRactDaattgWaBSKtaDgtataaRcttaaaatKcagtNgtaaataaat
+gattcatgtcKRctatHaYtMacaWNgagatcDcgDtatKaHgaBcaaaNWaRataYtYY
+acttgcactaaYDcKDttWcYataStKcgcaaaaaRaaNtttatttgctYatgtcVcttt
+cBKcgtcttatSttattYMttaatcatattcatSaYtgWaDacgaataactctggaDcca
+ttacgSagaaattgatttaDtHacgtcMgaMHaaNDKttgtaMgRNtacataWgttccSt
+gaaatDaagYRtDagcatcHttcVNWWataatataaccKaatWtYgcctacVaagttWtH
+actaRaagatatMMtYattMttccatactHgStagHcaattaagacagaMDtttagcHtg
+ccctttattatSatWataBaaSMaccVVgtggatgtgttgYgtDHSaaMaKcagaagcWa
+caaaBagRactKacDaDgagagagcgKcaBggtgtaYttatgcDatgaNgatagagtBtN
+taWatagcacgcgcatDRSacHttcataBtaWaNtgtaatcDctBaSttttaggcWtBac
+gacaVYtRttaacttatgKcggDStacgtagaYtaagtaatgacggVMKtWagcatatag
+tcataagMgatVagVttSaacHataatatacaatRYaHacaWaaactRtHRaatagcaVt
+cMataaacatattHaStattDcMWVtYaacYagaaHaaWaccNHcatgtcccgaNttata
+aNaacatctBtaDNKgMtcDtgMgtatgKgSatDSgMtgVaaHNWcDcaaKgHMtaRtgg
+cgRgtHtVtatHgtMggaRVgtcDgtWaactactgttagaKcccDctcNcgtagtgStac
+gtataNcgVaHHagYttStaaccWacaKctgctttaactagtVatttaaatKttRcgact
+aHttSaKtcagBBaWaacccgRatKagNagKaWtHttttcWtatatttattacagacSBa
+gDgtagtatHtgcattgcaMaRgtagatYacactYSBDgctgatcMattStSgattcNtt
+aBWaacatgcttSattttctatNttaHNtSctgtcWttKgttgtttttKaMHNMcaacaa
+gNattRtcBaccatKgtVtaaDcttgattaaaatHgaataKYtgagMtgcWaWgtRttcD
+aatgRtDgcNWSgtagtatRttDcggatHWgaagtacgcVtcaatHtttttttgaKggaS
+aStaataWBMtgcaaatacgWttctagccRtaaaattNWaMggataRRaaHaaMcagaaa
+cacacgDaatctactaactDgatgtttaaDacacVaNgagKaBcatataaattcgRtSNa
+atDttKgKDgcaaactBDtaatatagWaBgagtgtYaaVatatMtaacaggtataacgKM
+taKgcttgNMtRaaaaVcHctKctaaBcWtcHtaRaacKgcaDKaYaSHgtatttataaY
+tcaKatgNacgtcWWatgDttRaacaaDWaatDgagaStaVScctgcacaaBtatacttc
+tgtctttcactacWcaaaWcactKattaKtatWagttacttgBtgaBMagaattgtYYtt
+ttVatttWtcBagaatcctcWtatYcVttattMgNgYStaBgtttcttWtagcaggtMat
+gtRaaDtDKttgataDggtttatgctaataVYcSttBtYcatctVtBtYaVagtaaDtga
+gacctgaaatcNKDactgKtacgBtDKgattaaatagattatagactatggacgacgRga
+aYKgYaRtgaaaagRgBaacatctctMttgacNaWtctVagtStMaactacaatttcVga
+tacKctaKgcSactaDaatHgBgtHgYttaagtNYtRcaRgYtBaactaatatDctaacS
+KatSDMatWtagKtttagaaHKattaVactttSgtgtagWctaggagctttgaScatcgg
+SttaggtgHtgYatgtctNtaggaaatDttcctgagagaHagttKcttttgcHtcaDgtc
+gKtatcaatgcgStVcatcaWNcgtatttHtatctggaHWSataWaVttgKgtKBaaagg
+taMNaatttRDtcDattaStctaaatKgtaagtcVgccaHKgtgtcgaSVtaaaaHtatg
+aaVcatacacVtKattaWaKDgttctattgNcaagaacaKYaHttWcDaccattttagac
+ttttMttaRaMtaHtacNgccgaaaaacKctNgaaagagggaVttttgtBVcatttattt
+VaHcgattWttMaWcattagtaYcMagaatKaYtcatttagacttStDtcagacattctc
+YaaKMttcagtSNtBtMaHacYWNaactVaMgtcNgMcVcVtgKaaataaVataacaDta
+aggtcSgtDatttaKtgSNHcgctVaaaatatagacRaBgaNtaattVWaKtgcaattHt
+tctaNRWtaHtttaaSgWBctVacaNVcKtaaagHDaaaNagtYcYKaVKtaaatBaaaS
+aVaMtcSgtaaacctcBYWttSgMaMccagcttRgtVggaaWgagtaggYctRtaaWtgt
+acaaMNtagtacggVcttKcaMgNaaatgtatgaSgDcSBRgRVcYtaDHgaVtWaaNag
+DtagggtHagHgctRagaNacacaStaNttMaatgaataaSgagBgagtgWccDtVgagc
+DWVctBttccaWcacgHttgtcYtttacttaatVatgtKtaaatttaNaYttaStMtVaS
+tggattgtVgaMRNHtacaaNttRScRtVcgttcScatMtBtttcDtcatVctDaSctta
+gacaaDaaBtaHtacRgRgaRNtKataNgcaaScactcWtKggRagtgtaaYtaaattWg
+NagatatYtHattWtYWatagatatttKatgtcgDagaVcgKVagacagagatVgHWtaa
+gttgcatgaKaatggattaHcaatatgKtMaWtWaYSVtNBDttaaHaMcaRctWScNcg
+gtggYSttcagaattattggaaaattVccMtgggWatatHMaYtaMaacaHaagVtgDtg
+gcHtRaagtHaagVMWacaaagggataBRcaaBcttKtHtMgcKaVtaacaRatKRaMaR
+tMtcagcaataaaaVccNcttMtctattaagacacgagatNtatttataaaSagaaatat
+SccaRHKatYMacgttaWKtgttgHtgagatBBaRRWSacatacWtNtcWgttcaaacca
+ctVcaSaYtaactaHgtcVWgactaNaatRgNattatagacHatgcYWcttatctaagct
+taatatgaaRcaDVaSaHatgaatttBDacatBtttHactacaNaNtataVcaVtattKg
+MaSaSggttggDNcgtgatactaccYHttaaaMaVcBSacctgatatataBgcaattaat
+BaHtttgtaagggataaacatgcgcaaataatattaaBVcaWgttagtVaaWctRgBtgY
+tttccgYattttYMaVMtaHatRDaatgVacaatatVBccgttaagactcgcaaHtVaBa
+aRctaVgggaacRaaaaaatYaSaccVgRaaBtgataaatttcaVttataSMatacKtaW
+ttgcaRcgtgNattatttaatagaatNctcatHtSWttaVtRattcaRYtaaattDcaKa
+gcWggaWcStaatNVgHaMaBKttaaatYRMHaRtcgtagMRgtattcctHtcacaaaKt
+aNttcaRcatRtccgatNDagaBttDHtcttggccttaNtattaaStaWgKtVWNaMcca
+VgVgtatcKacDaYcccactcattcacYtattggatVgaWttctgSDagaWDattctaca
+taaaDggtactatagcNcSgagtgtMtaacNtVtcStttSgNDaDYgaaWVgtactRtaN
+cYgataHagaDtagttggaHtgtNtcgcHYgaDttgRtgStatcattttKtWVaYattgN
+taaYgYccHgWactgtaaaVBtaBattaMBtHtttYttVgtaYMWatWgWtNaccVtgMW
+aSDaatcYWccaaaHtacgKagtNcMKactcgtaaaVtaMatttcRcttgHtattattcR
+aaaWaWactgDttttccttttaKVNaVggataagaagWttcgBtBtVaYcataRtaacBg
+NaaYctggtatctacaaaagatttagttaaaaNaaattgctcaactttBKagatctgctg
+aMgtBttgtKaSatVgcacgaHNatVDgttacVBacKBaaKaBctccDtagctataWKtt
+agtcttYgtaSccaatcBttggaBtMaaaagaYtMgtgtNatgacacctWcKattctgaN
+taSgaaataatatVSaattaaWattagDtgagBaHaaNHtBgttcttatHaggaBtatcH
+tSttgccaatNgtaHtttBattaacatcactgaWaaaaaatggatagMHtSgaaBSatac
+BSaagMaDcaattttcgtctaacgHtaaaBtatcttaattagtttatcttcgtWVttata
+tcgccgaagBgRaDcBaatHVDtataacaccVgttHaaSgaagaaatcMSaHBattgcaS
+gaSVaRttcaMtgtgcaatKaatWggatBVgtataNWgNctttacctttgaaRatSaKtt
+HgaaaYSaBttVacWttcctgctDgBSgYcagcgggWRataaaatgcactagaaHStaca
+atHtggtgtBgcNDttggattatgaagaKaatStgcttHtgKNMNRagtaNtaDattgaD
+DcKtaaatcVVBtcSgNcRtcHataRcggctVBtccaWcaDgaaRaRctgaatMtaRtgB
+caWNaNatatWScYYaWttatScYtSgcataDtWcacBtactaWgcYtcgtataagctat
+aNSgBctagattaNgaKgatVKgtagttttcaaagtgcgcYattcagatggaKcMBtacg
+tttaacctaaattaaatattcatRaggtcgcccattMttaaaaaaactggSgtcccgtct
+aNtWattcaattVHDagRtggVSSaaHtattatWctatKatHtHattYBtaVaMRatgYa
+gcHtaSataaStKaaacattaagggttggVYaaDgttWSttcattaRBcMttttaacatR
+DaataaMttRgataaagVDKatcatacaacgMtaatYctKcgggcBKNgtggttcttaag
+ttYgcataVMaaVBgtVMSNagttatSttgtDtgtMgMDtNKtBgctattacagataMWt
+cSggtcHgggcgagtcRtcRattaaaatgaaYYattgtaaccttgatacgtWcHDgBtVa
+gNcSgBKtaaMtcaStgggatDaVtKScaYagtttctagNBtcMcDgKaDHtVtMaMacM
+gtagtaaWtaYtgHtttttgtctagYHtRaagacDRaatgctVMtttWaYaaNtttatat
+ttStcgactaDatKaatatattHggttgtRtattaattaaaaRtaNacKattctVaatga
+ttcttacWatgDgagggtggScatNtcMggaagggHtaaccttcWcatWaStagHtttga
+tHaRVaaSVNNtcaRacaNaKttgctgggcVattatccatVatataDtDcNgMBMgHSag
+ggaaagKctgggtcacgaatcaataaVtDttaRRgtctStattNBaaaBHatcgttaaWM
+agatagacatatVgDBttYMacaatttKtttaataaaagcacgVgaaactDBtaaccgta
+gaNtgagaaaRttcKKagtYKttttaStataaHgtcNDcgttYccaaaaMcaWtgggtta
+tcaaRaaggaataaVWcacatattaRYaaVagagVtcHggaBtaataNattagKtcVRtg
+actatcgHDaBgRBStVtSgNBccWDgaatgaggaaNctttNttttacaaggagaaDDaV
+tcgaataaataagttaattStBDccaaaBgVaDtctScgtgtttttgctgtcacgtttWg
+acStMtttVaVgaBtacDWtttagttDctaSDVtttNaDDcHatatacYtKataaatagt
+tgaacaagaatacaDDcacatttgtaaaggHattaaatgttacgtcagtNStttcVattt
+aBtHtVggttattaaHcgaWagaYtVaataaatcaBgaccctHcatKaDatRttHRMcgt
+cgggSMtaatNagtYtgaYtggMYttgtaaactacgKgStttaaaYatatDtaaSaVVcH
+gtagatgaggtcaHggMtaMWaWaHctgaatctaaBaWaDtcgggtccctaagtaVYDaN
+actataaNcctKcBcataaatttcaWSttttgacHtctRggagRaagacagWVNtctcat
+HtDHaRagctStatattggcattcattttMaNaSaRaNDHaagNtMgtVWtgtMccaact
+KNaaaVaStatcgtStgtgtaBgBgtaatcNtccgaagtttaWgactNgtaaccaatgNa
+tWttgWagtaaKgtctRgtctaataagttVDHgStgttcVttgtSWatcYaggMatgMRc
+BaStgtaaaaaMttaYagccggtgaRRatgatccaaaggtttctaaKgacaDagagatgc
+tcMgaaaMcgRaacaaatataaaagcagtgtatDHgRaVtWBVtggacatStctKccttV
+ttatgtKattttYcatctgttatgtcDKHYcctSHMttgSDRNgtaMNHaggatBcSBtH
+atDMBcttMacNaVMKtctgtttcgaHSgtMgcacagaStaBttcWcattctDtcttHtD
+KBcaaNtRNaaDgaaaaccMRtBcWVVagcttatcgaDYccacKtatgatgtcaRttatt
+YttctaMBggcaYctaNtBactgattStaDaHccYaDtgcaRDgSYtYtatBSaYaaata
+aagtctcgcgttcagaaKtttctVattagtWcacgaaVaaVtctcaVgtagttNaaacaa
+tgtccttaactaaaStaKWagttaNttatacaaaKattBctgaagaagtYDNtagatata
+DtHcKcctaBaggcaatctHttctaaDNtgtgaaaagRaattataaBMaggtDgtMaWHa
+cBStSMtcgaacYttRMatNacScgaaRtttctattcMaaBggtaKttaRcgtBattcga
+tatYtVaccSacacgtaaagtctNatYttgcSSattttcKccttataatcRtHNctttMc
+atBtacatgtYtctagcNttYacaatgtaBgcgttVtattaaWtaDRtKNaNDttDWaaa
+ataatDgcgcKtaatatcgctMctatcatcgtaaaaYNRttSaNtWggatRgtgtcttat
+aVgaaaatcWDcttDRaatMKctcatatRttBtccaattBSacctgMtaDDRagtcagac
+BNtttattttagtDacaagcaHcacgRttVtatcatatacStaatMaWagttRccKtRct
+cgaagttgaatttNtttatHaHttagctatSBaBtcaagtDaaaRtgattcatStagttc
+aRattacaVgtatWRttWggttttctaactttSaaaVHRatttYHMKVVcgttMtatBta
+SaaMctgMtcaagaMtactcDatSaaaacNgatttNcaagttRgacgataVtaacYNata
+StRtgaattactgtaKtNagaaccDaatgNDaaHcataDSYattatgtctgYWaaRaHtt
+tWggcKatgcgtagDSVtMactataKMSttaHaaaacaHatVaDKtSaaaRtcaNWHtat
+ttctWataagctttcccaacctNtaaacattcgagaBKVattaWtcVaKtWcggtaatca
+atgttcaaatccDttctcaaSaWNDataaKatBcaYttRtcataMVtKttggcaaNgtgt
+tatMaccgttgMNagtgVtNBWggaacacaKaaKctagtctacttSaKYMacaWtWDtta
+tagHBacttRttcctgttagtScVNaRtaacgScaStttatctttttSgtBgNtttStRa
+tNDWtctgatcKtgHcattatctaaaaattNaaaWgWaDWttWRtHRNcHacBVgWttgt
+NggtWtWcttgSatRtaaYtYtNaDttYagactStacYaYtNHBatggatacVtBatgcc
+aHcgtagaaMatgataHagtKgHaWcgtaccKaNatagWtDttcgtagggcSgtRatatN
+gaRtYataaataRtBtcttaSatcagatgaaSgtVtHtgtaaDtVactgattcgcatctc
+tBaWWtaagBttVgacHattWWgcKataHtBtagScWtcaNtHStBKMHBRtRagcataa
+YtNtttatacttaMgacccattgagtDYggKccNaaRgataWaaaNWDMttMacttaatg
+StDYgtattaBatBttKcSaactagtaccgttggaKacRtDaataSBaatacaKtgagDt
+NcttattaagYcagacttNNttatcBtHtgRatgccacctaSaatccaRSgtWggtgaaM
+cgcaMaagSagaaDatHcttgaaDgNRttaDKacgcataagYaagtMRttNaMMMgcggt
+tcgtRaSgacaStaaVgStcaRBKcaMtctKtctatNaactaHtaactaaatNWaKtWaS
+tRSKcatggtgBtgRBtagaatagataSBagMtDVataaDtaattgaYgaBaagWagaac
+aggaagtctgacgMgtgagaRVacMcBaaDatKatcNtKaRtcatDNBaaHatatacatt
+aWRBtcaccattctctaaWttWacgtccgcgtMctcaaaccHYtNDatttSaDMccaStR
+ttWgttattaSVKtgttttgtcWatgtgStttgttttatcaagacMttgtRDgcRtctct
+gtgggggcSaagcatVattMacattSgttaacctaaaaccgcagtgagNgtctataatBt
+HtacaaSccccMgagRVctYagcgaatttacMagVttaRDcctRgSSttttcHtVaacat
+agBgaMRagatRcDBaMtaNtcatggHgaDYgaVgWaaaaMKattBtaDYBaHRccagtt
+atacVaDcacactcgtaSctaaatatRDaccagctttttaatgtagaMaRaaKaaataaa
+atacaRagaaYaNtatKcDttgHgcVtaYgDacagMBagtgttatgMcSgWDWYWtSaKa
+agcatKatatctcaRHacagttaKtgBKtDRggtcaYcattcgcYattttgtccaagtVg
+cattttttaVaagtaaaagtWccttgacYcaagtaatataYBaatataBtaaatacactt
+ttRHagtttaDSHgNtNVcatKgaKtgagttgaaaHcgBattatHgRKtcaBaagttgtt
+tgtVatYattaattBatYgaatgMgtttatagtKcVctagttaaYWttWaRKWggYttga
+RgagaaMKtaggtattaMVttataVcagHYacaaMaattRRtataWaaRacHcattaVaB
+tHgtatBaRtttaccaaggNgtaDMtatYtaYVtNtcBRKMgaatRaaagaatactRatt
+ttNcaaaDDaagtagtacaNtSHttaaataattggtaaKtttaaBaNgtaagtcaYttac
+VaataataatDtgHSSgtSDNaattcRMBgHttctaagaYVcHcactKgaaNHcgWaWtt
+aaBactcgYtDaacgactMtaYKacBgttcttgttataBacatScBcattKaaattactt
+SSDaRgKtHHagRNRMtttBDtcaagcBcgcYattactcgtttacSaaNVagtacacgtg
+gtSaWatBtgatttWttScaaDtttggtKtNKaMtMgcttaHKaRaccgatccctgtggg
+agRMttaaMaWccggtttBtgttaaVtagMWctNtctHgtBgcttatSMYccttgHaata
+tctgNgVttagcttagggaBBSStaYgYatYgtaaaaattHatctatgtWRNgtVcSgtg
+cgtcYBagtRHgacttaaagSHatatBaaDgcaKtcccDgcacMttatRaacaataaccW
+tNBaYatttYacYtagagattRtatagKcatattDgKtNNgtttWNagggtacStataRt
+VDYaacgtaBtVKtagaagRttttttatataSaagaaKtaatatKtattagBtHataata
+tcWNaacagtgWaccatatStcYcaaNRctcKacKttgtStaaKRaWDDaatBtttgtca
+gggBgtggSctaaWtttYVWttNtctaacatagVYatcagatctVaHMgWtcaagtataH
+tgacaagttSacgtNRataaatgttgNtaattagaattgctMaRttBtacBatNgacatt
+tcaMcgtaaacctctagHctaaKNttBatatttaatattBaKtRagYtatattSgtgtcc
+BaNSattgaaattgYggcaaataatatHcaaaatcMBaagYatttttaYttYaStatttD
+tacRtgRattttttgDcRaggagcaccaattcRcttttataHcggatcatNSatgtagtH
+HcactgtWgtaggtNgactactHagagHattcaggggSaatgcaaaacSSKDtaggcDta
+tVagMtggactaBSatagMttaggatSYttaacBtagaNSVtaSaNcSScaaatattVct
+cYaWYtBcttcgaYBagWtRgagHKagagMaatttMatgtDtaYNagDtaBagcKcKcaM
+ttKaaaaatVaatHDaataacgRatBNVKtMaccYaaccMgttgtactagcttMatKgKB
+tMagtcttMWgaatRcacaaaaSgcgVtSatggcaggcgKaYaatgctcattaaaggDVa
+cStgttaMaaaaacNVtBtgcttaacgtDNaaRcgWaKtatactagcactgKVttaatct
+tRcgDHHattcStatgatcWataagtattttacgtcaRgaaMcDattYHattYgatatca
+cNNWtDatgaaaactgaatHaggaNcttcctKggNgatBaaatttgcaaaDtgctcaatg
+tYagacMgtVVtgDBaacVaatNaDtatctgaaggKcagSggVtacgatgNWtKWaggMa
+cctagaatattcttYaatDatcgttgatggtcaacgttatatgcttaWVttccRgVcaDc
+gagMtacattaMtaVWcgttRcatRacaRcMcaNtaYWNYgMtatMgccctaKctagHtt
+taaBVMaaWcSaccgMttBRgNcRWMtHMaccaatgataaggagVttYgaatcttagtgt
+cMtgcctVtaRtgcaccaDaagHactNYcNcttaaggcMBagaWtattgtgctaccacgc
+WataRaHtDtacgaaVttagttVacctatatStDgtggtaMgaSattcatgMcaRctatg
+WgatKatYYaaataNYcSaDtttgtcYttttttaBScatRtctgtaWttaatagMaacat
+DttaaaNgaacttacYttagaaccctgNgagMNHaaKacccNatgKccttaKcatDStaa
+StNaaVBatagttcacRtYcRcKaagMgctKtBagSaagNcKRttaaaaKaaRtttttta
+tHHNHaHRtcaRcMataKDDtNcKtKatctaaataaatRatYttMccaaaNaaWgctgat
+tcaaaKgaatScaNaaaKaBaaaaRNtataVcYDattagctattaaatWtgBWHgggtat
+catattatcVttcgHacgcgatMattDcaRggDYtYttNaaaatBKttKccStYVDatat
+YcctSacVcattttatMtWRctaYagRgctcttttaacVtagaNaVRaccgRaattaaVc
+aattgcgKRctMaKtttHgctttVMaNaRaNMKacHSagtWagtgNatKttatctataaH
+atgSaSattcagtDctWaataaYtcagtaYtctatHcgattSRttaaaNDgagatatact
+tVttatcataSSaBNaDataRtRRaattcaRataaRtattttNaRYtaKttaccaaaaaH
+VaBtttWtttgatRagctaMattgcttactctgatKtgatgRBttaataagYttcStKaN
+gcNatacgWatYaatctggVtaaattYccKagaVagggatttatttWacgaBcaBtaaDt
+tttcgaBcHDgaaSgVNctgaaKtgaVagtVWgRHgtacaatattgcMDNNataatagaa
+aataatNtNgccgaaMaagtgNttacgVHaacSgStBBtRagtBgtaaWgacttcKgact
+aaatgaagVaacaBtggtacattcaaagtgattagKagNatatVaKBacaMMctccatcg
+cgggRctttKaaBatcacaScaNaaaaatVgHaattaatatcWcacacactcatgctcga
+RggVgcatatcaDcatYgaggttDgWNagagaaagagaYttHKaatgtaVtYttSNaDtc
+gaatctattSKgtgtaggaMgtaccWcaMRtHttaaatgWtgtccgtKtacggacaNgaa
+cgaSgcYagcKBttNacaagatacgaagaVcBgStMacMtgKaactataSgWtaaaatDR
+ataaaNaSaagHttHWYgaccWMtatataaaaagatgtaKtVtgtcBNMtRaSaRacVat
+aaNaaaDtaatgtaaagaDgtataVDaacagatttWtDtcBgatggBcgagctcKWgtHc
+BgcMaatDNatcaYtctBgaHtccagHctttMtattgtBccaHMctatctNaaatacgcg
+tacatacatctaDactactcKtacctataDccMattRgRggHtaaaaNYcVtatccgttS
+aagYcgMatttaVattttHagVatVtttKattaagttaNaacaccHSttagDactSNgtg
+tttaNtVtatttatgaaacSaKtactctacgagttgaagtcaSBaDgtagatNaaactRK
+ttcatcWtaBaggKtKcYttaDttatMaWcStgattKattgtatatDttatDtKatgtaN
+tgtcgtcttttttaBtDBcaaaaSgDatgHtctacaattcgMtVYtatgcattaaaattc
+aVgatRtcagBtcaMaNctHgtatVatcHttcaDNKgtWcgagHtttaccattNgaactY
+acaKgaaagtggtttgtgatcgaKaHgaatYNtBgcaaVatWacNggataccaDtaaaWt
+tBMaBccagaHDaataaBaagYVacYaScctYVgagWagaYagtgatgtttWatSaaaMY
+DcactYtaStWgaaattacHgKDaYtttttgttcaaaaatttgYatatVcMatcactggR
+aaMVtStBtaaaagggatYaagtBtatcatgcDttDaaaaMatagtctaataNtcttWHa
+aatcaVttaRaKtcgatttataWRtaatatcDWcctaNMatgtttDaYaaWtMaagtcag
+aKtaMKacgccaaVatgWtSagtagctatttcactaaNcaaaNaaattaggattatMWgt
+gacgtcttcattacaYttctRRtttgMatggNtatacaataataNgatNcMttaggBcDg
+RHgatctttagtNtacaaccgBatgtHaatgttttgatatccgttatcataStaKRaKgt
+tgNaagagKttgNYMaggaattcagaactcaRataDttaagcttaccttttgVttaWWga
+cYggStacYcgatgcSccaacHcaYNtgRaHtcaYaacHctYacatagatBgtgacDaNg
+atMacgKgBaWagacaSgttaKcatactatatcaHaatataattctggtcNttaYggDRt
+DaSHgNttYaatWagagtagaacKtWtHtBatNtScttttacaattagtaMaatttHgtc
+tagMctaccagagttcaKcStaccKggaggtctgcNatctctDgYccaaVgttgaatgac
+VcatagtgtattttccttcatctacttSgaaStcagHtMaataWNDagtatttttatagg
+catNKataNaMtgctgtttVaacctVBDWattgHttatattaKtatSVSttgtaScgcMc
+ccattgggtagaKMgaSaSttYgcaaMaatVaVaKgtatgYNattcttagWgtcBaaagS
+aaatRatttNctacaStggtYcaaggttBtgaDWBtRtgaaDccacaaaVSatatBcaaS
+cWccgaKttttcgtMaVttgatgtMatacatgNttBaNaagtaggaRaBagaagtaRtaa
+gttacWatgHtttaagSaatgataNWattgtaSggHDtttBataaNNBRaatKWBgtaDc
+BaMaKtctaYatVaKataaaattWYcgtaHcttagtgYtgcKDtccatMSaaagatYcSa
+HatcaDtaatgMMatgcaaatgtttagaDDNtatttgaaKcNtagKYcaBMattaaagtt
+aaWDacgRaRtaKttaaattaVVKaMaBtaKctaaWcatctRMtgKcBaBaaagattHcg
+McgaSNgactaccRatHtaSNtctYcaaBDtaggaagcMatttcaBcDaaatggWtcaHc
+taKtHcHMcRgattgaMtNVaDagttaggcttYctcatDacWDaaaaaKtaBgtBaatca
+ataaKgactgactcNcattMcacatNMattgtaaaNaaacttgctaRtttacttaatKYg
+cttgaSStgtaDaNgtaKgBgMaKgccagtgtMgatHDtgacaWDttHKaDgMacttaKa
+agBtttgtcttaagMagtaHcttWcacaatSatgYtgacHgHcaHDgtagaDccVaKcaa
+taNttccHYctctaSRtaYagtNgDagatWtRttSttNtRNagacatattttatggacta
+cYMagtMacYaagYgVgKgtNtaVcgtgaatcataatcgattYtaaatYtctgBaMgNWN
+KMgDttttaWtaBaaHatNHaDacctccNKtgaVcWattYtgccaVRattMacBtcccNa
+gYttBYNgaBaaaStWacMgcttccatgHaacttYagMtNaaVSYgcgatatHcaatatt
+tgtgBcatWMtaaaaDRttHaBaHttgaacaaataaWaMcaDctgBtatWttaacaaWac
+acWtDtatttatWaaHacaVagVgKaaaDttWgRBVagttVNttctgcttgacatttSHH
+MKScSgSaMtDtaMcgtcaWaacactMcaHWRgaactWtcgcMNcactVDaatHcDSttW
+tagactatgaRNcttagataYgaggaagagcaSHcWtMaKStatgYatttttVaattgtt
+tWataaaDaDgataMcaMtatttctVKaKgcttcctDagtgatWatacaRtttaaaBSMc
+tHaaatcagStatStgaaVttaattatttgctaagcgagaWaaWtccgcaaSgaatVgta
+StMcSNcgtWggMVWNatHctggRtttaacNagtttRtaMBgatatHtaatcMaaaYgat
+MtaccttaagYatcgaaattMataaHatYMcccaaaDaYaVaWgRaHaaaMcHSattcat
+WSatttcaMtgataKBYtactgaNttgaaDactgBatgYgttaagVgaagDagaatttKN
+tgaMtHagtaaHRgaaatttaYtaccNcgWNcKtaYtBMctVBWttttaSagRHBtaHtc
+gtactHggagtaatttaaaVVattWDgtaaHaYgDtaacatDtacWttttttatgccact
+taDtagtaaKgYNcttMNDaBcaVMcMctWgatactaRcaaWagaatgcWcRtattccag
+KgaNgtctcKtWgaNtSttagVaagaSYtcctWatatSgaDaKcactcgBtYacDgMtaK
+ggtKcDtRtRgSaNKctaatHtRDaRgatatacattagtgccSttctDgcgatNcatttc
+HgcKtagcYgttttgNKWRattgBtaaNcRaatcNaagcgaaVKttYtWttaBttttttN
+ggKcgaRBMVtNcNtDVaaMtcBNaKtaataRMcaaaattYactactBattWcgccgWaa
+MtaBYtgtaHagtcttVttaggaHVaaNaNaatcttgtgcattttatMDYKccataScaW
+gNttccttttMaRcVtWHgaaatgBaaRatgcgatataaaWYacYggtacttaaaaDaaa
+ttgatcWaatgtttRcatatcaggaBcttttcttVKatKccaccYtDatMtcttacMtSa
+ttaatatagaatgSgagYgWNtttagtatgRggYKacaatattgggVtttaSaYcaRtBc
+ggtDaggYaaactNataggaggaDgaKcaaataagatMKaattaaNagtagttcWctata
+aDtttcgtcgtattaccStgYgatgKtgcccYatDctYtttttYttaaaagaactcaNVa
+aYaYtccagacBttKcaatKataatKVWcBataaatgttcctatYaacttaSVtgatagg
+VatgagttgatcttacgMMgtWtYtagcacaSctcHYtataattMttataYaaccKgtgt
+aaKcYagaaVtcBKattStgcaaKcaKKaHgtaaBtctgcaattaWgMcgYttMctWtaD
+NcDatggWaattggaVDagKattttgaaaRHattgMaaMgtaatcattctKgNaacaccc
+NHataaaatgaaagagSatKtacVagttggtcgtgcBtgtgcatgagcaacataagKtca
+gtttgtDBBHWcgaDtatYttgattcttaaagcMMttaKgDaHtatVgWHccgatKttca
+aNcYtcaaDWDatcaWtBtWHgctaaMDaDWtWtNKcRRaNttVgHaRgKgcWgattNaa
+attaataNcaRtagtRgaacagataDKgtatScattaDgatcatMtcgYcgtttaaaRct
+cagcRattaacatccStcBtgaccgtgWaaagaaatgaaWtattaVtHacctaccaaatg
+BgtaVVYaaaatccKgtcaactataDgNagtcaSgtKttacHtccMKKWattagtatNct
+attagtttWttRtgaKaBHStgRagattaKRtWaKttaaWaagtaVccctgcgMRWatgt
+tNKgtcSggSHtaBttgtaYaatDtaVtaatgtHcatWaYcMttataVgaaaaagBgaag
+RattccggcttDgggcttcttaacttRgaStaMBaaMtctMBHBacttVgKggcttgcgB
+cBtgDtttcctattaaRcatStNgcKgctatcccacSctcHtaHWtgWaYatgVaRRYtg
+ctaaaatggagacctMcttgttMagBaKctttYWBtaYKgcccYttaMgtHaaNYgtgta
+gagDttcBatgtStttMtBWtaaBctaggaaNgaRgcttttttgtagacRttHSagaatD
+aYgcctMBtgtNSNaaBttgVtWtttKgacaatatVttVatagatttgcgtcgDtVgtSa
+ttaaaVHtaDaatYttatKSWtcattagtaaNatctcagcgtgcKcatDtaBccaaccct
+gaYcattaNaagNaKgagttttcattaHMaVKMDDtaSHScaDattgcaggcccMattat
+acYtMatWgatttcBcBtBctKacccaaWctatccctcaacaataaataaMttgtaHHcg
+atKgaggBtRYattatacgtaYNBacagacaaatVtMcttttRtVcaattgtttgaWtaa
+SacaRccMcaaacttttaaacgtacVBtcWcSaYHgtattacgRtgtgtaKgWgaatcta
+BtcgtgRaaaWWVBcaNtcgctgYtaaaHaSccaagaVMNaacagattaHRaaMWcVgMt
+ctgcatgaagRDattactgcKHtcactYtccttatgHtKgMgKcDtacNtcaStgYccaa
+DagttDtttgYcaagcacWWttaMgccaStaaWtVactgaagtKtttcaWaatgMattat
+KcctctttttcatgtaaactttNcaaKgttttMaMcYtgWctMtttactttagaKtMgtt
+DYttctatagWcRttatYSagacttcaScaacaYtSaattcaaagtgctSaagctattaa
+agggtaactcacgDKgttaMRgggattttMcgttattaVtccaNagaRgMaataaagaSt
+cSaacgtaWttatatHgttHBcgtacggKBtSatDactRggaRgccBRttctaaaatSac
+tcKtttVaWRatatttWaHaKMatgtacatcagctaatggBgaBNSNatatcYStagaat
+SNattaccgtcaataaggYMRtaDaatVgYaDaattataRgVaagtgcaNKtgttgactt
+atHccacHaacVcWcNMDtatcatttttaHacatKtatagtgccWttaattttBSDaKaH
+aDttYacDtBgtMNgggBaaaaattDaaVMaKgatcggKtgtctatctctVatcDtaaga
+agtgtaMcWatDggaaaaaYtcDVtNttcNacgaYtcgatHctctaWgaaggtMttcKtc
+ttaMgtctKNagcRWcgBVtcBDatYKtctaVaaaBgtaRagcacggcaHHagcagaaaa
+acgggtataatcaaWtacYcWtcctaBgVVaBagHaaaaaatataRYagaacgggVtttc
+HaMtNtMgcgaaatKtattaagtMttatcttWttttRaatatgttatgtatttRaagKtB
+gtgHtHDggaBDtWccattcKtttagtttagtBYcDaMBtgatcttgacatKctBcaaaa
+caHtatggaNaVttcgttatttttttcaaDtDDaatcaaaYaaBHttaMKMVgctgWtac
+VtRaaactgYtcatggcVHtgattRttataBtcgaaRataDttaatcattHtatatccNa
+ttcaaHtgKRtRtagtKaRWaataYaggatccacttcacaatgtgatMaggactNaacca
+aMaaKtagaaMctacttDSaaaWSgctcagtWaataWaHtStMacttaDtgagWaaaata
+tttatcaacaactRtDgYcYtatatgtataatWtagccaagcgtttataatDgctgVaaa
+gHaattagaatBWggttctBaNtactHtKBtcgaaaRttHBatDaaKccaSHgtgctWtt
+cBaatcctYttgaHacgtatgagStatRtMaacKacacggaaSctagDagNttgaKKSgt
+ttctacgtagSataHttDctggBcYtttaaatcgRgagagaDtgRSaVStggVtgacgtM
+tatgaaNtWtHgtDaDtgttNaSVagaattccgcttVatatacattatataYtaggYaaa
+RDHttHYDtNgcatHggctattYtaMcWaaVtaNtatttHaagBtatcagatHtttgaaW
+WtttKaaaggBtattHagtaacactDggtattttScttaaaacaStcaacHttMtatcag
+atSaHtaVtBaNYcttHcatgHatagaaggggaWgtgBtttagtVttgacatYtKtatta
+YSggtaaaHgcaggaStHtYcgtaaDWgtaaaMcgYtNHtgNgcttttataWatttKWaa
+KtHattgRtBtMMccgtBtYttgaKaWBatcBgaaacaBgaagatYgKWaaacBgatgtD
+aaacttDcacgatSKtaVaRDWtVKgHtcRattactctattBacaaactaatgDtaatca
+tatKRattSggtcggRMaaHVtgttMcgatatcccgVctKMgBactVtWtBKtgWtaaaV
+aatRgKatttKSaYHtcVBNtgStgtatNStaaccgttaaaaYactBgaaaaattacacV
+ttKattVNgaMattNccctaVtaaStctgaaVatactgtctaaaKYNDtataWtattaaN
+gtHtaWgaBMttttccaaaDcgctgagBacacttctDSctcMtBtNccaacaaatSVtat
+WggagSattKatRBaaaNtNtttagacttaagtHttaatcgtWctHaMBaHtaaagKaaK
+ttgatattttgKcgtcDtgtKtHagDtMtatgatcttgtcSgtWgctaaaaattDaaaNg
+NYtMttNHgtHBataatMgMttctDcgtNtNatggKatHtaaRtRtDStttRVcaatKga
+aRSRtBttatccataaMttagcaaWtagtVgaVBatcVtYtagttgtaMactaaataDat
+agNttttactagcgcKctDatatDgaHtRatVWagaDtttcggSKataacaggaaKggMt
+ttctaVttMaatgattcgaagcgattaNNtYactttKgaatWttNNgctatatgttacKa
+MtaaDgtKgttBttHtDacaagaaRgDgttWtaatgVBcaaccatgcYggtRcctaaDaa
+HcatYNaaVDNtBgtBaattYYgcHttRctattVtattgttcKaaatagtacccttgcVt
+aaHttaagaKtaagSaYtgcacttDattYttaVgRcacaattDDttagattttcHagcca
+YaataKaatccVDKctNcctcaaBccaaBaYgKacWVtWttatgcSatcDHttattaaca
+agaacRSactBHttDaBBBcacgttactHaKgacaKtaWMcHtaVHttaattcgttatat
+BaaagatgaactaaYgDNattNaHgHKtaatcctcttcHttagaatVcagaHtagBgtMa
+taattaagtcSRcatSagMagaaaacgYacgagcacgBcggacaHKaaBatSatagtatc
+DttRHtcagtDtaStYtagaaagtYNHtgaacaatgcgataaNgtNVagtacccctBcga
+YWaactRtDtatttKatBccVKtHttNcttVtgaKMtgcttggcgaNatctcKggtcttt
+tataaacWaBttcgHtcaHtcgatcgcggccaHaagcVgKattBaaWttKcttaVaagYa
+VacagaacgcScDcgatataagttttacaaKcaaaBcYcHKctRagcgaatgtScBagMt
+tYHtaatHcKKtgggatgKSaaatactgWBHVcagHcttVBgYDtaVtcctcatRcVKcN
+aaYaBtattttatRtVtDaaScgtatacMatcaaactagtaKataaatStHtacaagagt
+tgtYatctagaBaHSYtaaataaaStacaHagWSRSDtagtatggctgaKtaRctaaagB
+tactcttatgBcHcNtNRNtHataaccRttagatataaHtacScgtattgttgtDcctaY
+RaattccaNatgtgctaaaactMcaWttgttgVMaSgtaVaSctMcagtcacNaWacgaa
+tWtaRtaatSgatgaaWtaaWcgtttHtWcttgatKtgDtDMcagtcattcacttgaaat
+actWgtattcHttcataactgctgtgtKatRagtaatttYgNcaatcBctgtStaggtaM
+atacgtYaRNtgNaHtNccRtgcSHgRcaatttVcctattaBKtgYtaMaactRaaaaBa
+attHHtatVNWYHaatcagtaMVtttctattWHtttacaaVccDctYtttVtNtRRKtBg
+atHtBcaatHYaSgaagaagHagtttDaVaattVactactYcaDtKttgVVVtaWtggct
+aSttgtaataDctWactcaRttWcMSYtWagaagttctKHcgKtDaYggaDttgtgtata
+acaRKctaacttcYaDtccNaNttaYtaatagRttaSagaatBtVRtaatcttatgcgtW
+tataaWgHataatttYYSttYcggKKtaHcttttagHDDBtggtttaaacatagaRagtV
+agactttacKaWDMacgYaacctgctKaNattggatggNgtKcYSttttcctttDtYttB
+catgattSHaaccVtccatctcccacDBtgaWBaMaaccgttttcttaaMgScBNatBta
+gtcttccttatKBRcctggtVStatagcDgMgtacattacccattKKtaRcRatRctYVa
+SagttatatYtcgNDDggKaHggcccgcRtacgDtcYctgaaacHtatattaVtcaatta
+aatgaWaBggYtHYYaVagWacaNtDtaRattgRacRtacacatgHtagagtaatatttc
+tgDDcttgNDagcctaaHtatYHtKtRaScgtattMttacaacHggttttatSgaHVVga
+attaatagttattactgtRtaWgataMDaaaactgNYacYtagKtaRcaYDHatatVatg
+gctKtWatHaNttaatttttgtaagcctggcgKataaNtttRMNggDtataaaatVcMRa
+taacagctMatBgMtaaVcgagattcaaaSgtgKacgtDHatWaatgttcDtWatgYcWR
+ttcatBSHtttgaatatBgaaWgggaaBcctSSVaagctSctagYatDggtatatgtaat
+atgtatgHYcRtagagtHcgggcataDHattcaaattcRgcaaaataagattcaaYVtaB
+taagRagtttgSRtgRYKgWggtttaaHgcHStgtggtctaHaccaccSaaaattaHatg
+ttVtataccagaatDKVtctagtttcaatgtNctaccgDcacgaattacactatgaaggc
+cKVatccaSWaaKHtttSggatgagMagttgcaatatKYtacBttaccatHRttaactta
+caDKKtaKaDcHHcaYatatgMagaRaNNttcggagYRtacMtHgacttagacBaagggB
+atcttgaRDactgatacatatcSBggtaaaVWgMaatttaYtaWacHattDMtttaaaRR
+ScatcttctaatacagtBVgtgtttBagtatgBNcaagHaaaSaSYKcacMtKatggcac
+gcctSRaagcataattaYacctMaaKtcggaBaVaaWaDMttgccttaaacttDaaHacN
+VtgagaataccactctMttaatcttHcctttaggaKgaggWtaNataYgtaggtgaagtc
+WDcWaBatattRtVgtRgVtataacDDNttatcYaaaagcaVgtYggaDattccgtccDc
+SttaaWtttcaaaatggataSatctRYcaaBctMMtcttaacMaSgDatgagatcaYgct
+cacHccMgaacatcDNgtNRcgBaaatagaYgatgcttRaattStccttgagcctaVaag
+ggatatcagtaNMttaaHcMaatccScBtYaYttatgaMNagtgHaatHacaHaBaaDta
+RNDNcBtagBgacatStagacttgtaatMtYaNaKSaccBtttHcDaHNBttBaacSagg
+agaacgWcMgtRcaagattSctgtaBtcaatMtaHgcaaccataVgtaagDRcDcggaac
+caBtacVMgSttgtcataaaaacaMataHatgttaacaaMgtacgtMVcatagYtKgtgt
+cctaBcYKattcaggBaaHagStcNcattatRRaSYtYDRaHYttttggaRggggttatK
+cVtHgctggaNttaagagBaacattggYaaDcSacggYaRttacaacactcDcacBDtYa
+taaaaDWtctcaggVtaYttKtaVKtDSaMtYtYcgtaacHtRcHctaacBgattttagH
+aScDctHttaaaatVaHttggttatttDtatHtcaHcBagSttttDctttWtctaaataa
+WtHYtRgtBccSaaDSaNgatcSttaaaatgaYgKaaDaVatatYaRaHDtataKaNtag
+tacataggSaatMtctMtccctWgaYtaggataMttcgtacgccYgBSgttaaHgctRgR
+gtDVSRattttttaaKtRMtatSgRaatKacMaYgggtagBgNHcgYRagHcatatgtga
+acMtacSDRMHaaacHaagtWSMcaattcagtDctBattgttcatttMBaDVHVDBtaat
+KactNacgcBYtttgatctatVVtatcKaKSgtaWcgtcgNYatSaRtcaggaRtctatt
+agattKHttYaaBtcacatataattMgtatcataKKatDVtWtaHtHHVaggaaHagWaH
+tattgtDaHRgatgtaaaWaaSStMatttgNtgtcagDWgagaBagtcattaataggagt
+tcagcHttgWagaWcRttaKttaDgaDWtYacMWgRaatatccMtaaattRaatacaKYc
+gcatgtatgtNaccataSttSatttttcgatcttcaaKcMDatgaattcaMWctKNcHtc
+tacaYgatgcaBtDDWtaRtScaYaatYSgBtDcaacYataacgcDgtaacMtSaaKcKt
+tttDVgttgtaaNcaattctcaataaatcSVcKaacattgggacatgaaaacggaggagt
+acDYgatMYttaaaBBctccYgcgagccHattttaWtataYcaKaaDYaaaStMctSatt
+aatataNaWcacaataVtcatacaHcgMgaatYgaataatRcWcgtttcNDYcacaaaca
+caNttttaatctaKtRttHDSttccWatatagtKtgtcgaccaBgtVacNaYBHgtttSS
+agcNtctacctttaacgacaDcWVacSHcaNacatttgBYaaagatWagaacYMatcKgB
+YcBggtaWatataKcNgaaaattHYtSaYDVHSactgttNRgaaaMBtatataaaaacVt
+ctWtgKggtatDBgHaKaHVcMWtYYBaaattaVtcgaaacatggagYKtaaaacagttN
+tttatcatgctagYcctctNgttctgctaYttBataaRtattgatgaaactagttBgagt
+cttccatBagatctBaaagSacagtaaStaaatatataataatcttaactatVtaaBatt
+HcHgcttSSaaDRaKtataagggKaacRagBaggtaMYttggtacMatMttttYttaact
+taBaYaaaatKgtactactKDctcttgaDtMgattgVgcRaaaKattaatataagWgttc
+aWgtcaKtatcgacatDaaSatHtttcagcNtatSggtgtaRtgatttStBaNaHgcagt
+taggggatWtttgattttatcgaBtctaggcgtgtgtWttttaaSaWKctWggtgataaa
+attacBtMRtatccattaaSWttaSMcYtHtaacttaaBaDattctatKatctttcatDt
+cgNcgacttgtaaaattDcaVatRacatgaaagtcctgtctcatacatatcSWgNDttga
+aVKatNacDggagWaaatgaaVNtttBataaagVttVataataYcNMVaNaKaatRMcag
+NacVRactcWgctttNatHaRaBRtaaatRtaKtNgYWattaatcttaRttgttcttaaW
+aaagttcNVtagMaBatcVcgccDaaBMgKttgaVaaccgYtRaactttYtcatgattgt
+WSaaBatagtagSataDgatgNtaWatcaMttaHattagVtggagaNHtaatatctNaag
+aDBatcttttaRaaNtBYagtaacVttYBtaagcaaaMatcNgKaggacagagtgaRatW
+aDaaSaDaaattVgcWttatBNctgSagtctgcSttacSRtgatHDgggcBagccDtatY
+aaagaataDgatDaBttagctatcHtcWtagggagtDtSaaacagtagcttVatgttggc
+StataacttVtaatWKtatDatcttcDaagactgtgDNBaccaattaacaaagaaHWtat
+ttaacattWaatgttcMttaNNcYaRccHtacRagatccKaaYactcVRDtcHVtgaaNa
+SatctRSaWtagagtcgcaataDcagBaagtctSNagaaaKgttataStaatagStaatS
+atataWttctcgtaDgtYRcgtHttaKtcDttRaatNacYgtagVaattNttttatDgKc
+ttttSaaattYcgYBaaggttctagYcBataacVcagggaWtaKtacatgcYcctatccD
+atatagtcRaaaSMgtggaatcaaMaatWcgctagggtcattaVtctaatgHcaSHtcac
+ttBaagaMDtactYgtttgWgacccStDtagaDaBtgctctttKaaaatMttNStggttt
+atWttYttatKMKgtctaKcgaBaaaattcccgacYtBcaKaKttRccaaBaWgMaMatg
+tWtcRDWttcggacNctataaacKaaatHatggDatSaaKtgcgRaaacgtgttcatNtg
+HtcaataaacaaWMKatattcWaKcNaccWtggttcctBaMttgRtggtWtaaVggDgtt
+aDaScgWccWHatacaagtaHtaacttWaNatgtgttaacKaVtcataDMattgtaKcct
+tttttStaaDDtHYattNtcgatataBattctWRatMVtStaSaWttNRacgatagtRcg
+cRtcctttacagBKaaVcYtRaKatVtaWttaVggBBatcaaWatgtggagattDgWttt
+caataDtactRaatBattWVacttWVNtVagHaHtatttaVagtRMMtaBattatataaN
+aagatHBtgtatVtaaacatttagtccaKDcacgWaaHagttVKBgcgRaSYtttVcgaa
+caBatttaatctaSYtccNtcatctatttatBaHcattcaBgDMYtactgScccttRcta
+agtaaNtaaaaattatggtVataaagVStcaatcacgcDaatgtaacatDBagtcgaaRD
+aSactgcagaHgttYatgaVgtNccttcaKHgcgataDcgYtgtgBatcacScgctBcVt
+tttcYaaNtttttatcBaatgataYgtgttgtatgaVcBagtatagtNaRaaatKVtcRt
+cWatctaattgtVgataaMataWagaDttaatRcgctaKHgaRagtDctScatNgHgtKg
+tDtHBVgYcagatgttagcgaataaNBactBaaRaWcRcMctctBtWKaggcaataatSY
+tccagtRtaSVtRgatctaBgDNDtBgtttgtaNtWtaatatDtataacgccDttcaMaM
+atgRtgaaaMHatgBaatgcccDagNgttRDcWtaaaKtMSaBgctgcaatgtSVattRW
+cBtDaaMKRcccWtVttaaatatttctgtcatNBgaaaatHtttWtYtttcaacaaagaa
+NYBaatatctgatNtgaacaaMaaYcNgtgatttWtNaatWcYMScMctaaStttNgHtM
+acgtMDtgagcattcacWtttKttBtKaKcHaBtttaBacgaaNYaaaatBaatNHgaaa
+tMtagatDcaagMtaattctKtgNtScaatagcaHDagtagagSRcagcaagaccYHtaN
+tBatKtStcRagtgttMaYgtgggtNatSaatStcYtaBaSBtaggtctMtatcatgaat
+tactcYtNagaaaDtggaaatKBattaaatcWgKtStKtcaWMggaattYtggccgaWca
+cagaNWaNgaacaYaHgaVtMctVHttaKDcctNccBKMDagtatgcHtttaaaDaggtg
+HtattcatatttaagcBaaaRcSgttaaatgWacRatacaaatgBatYatatRBcacaVa
+taRaKWMcDWtSaatatHattcVgMKYtgtaVBtgagattRgaatgaDgtcaStacgcta
+ggRggtSagKcWYctacaagtttBtgaBttacgaStHgVaStgtaRtacaDccNDattSR
+gttatMtNttttWHacDtttVtgacgYattccWctaagtgaaaMMatgNtctaataRctg
+aacatttVcNtgtttgaggcaaagtatgVgtaVtgRDcttBDtataaMBatatNgataat
+aHaaaNacaStgaNaHgYtgacagtcYDggagattNcaDtKgtagMaacSHRtcagNaga
+tKcatataVatactgRVatgBtatcgttattHtHcKaDtagRagtgHtaDcVtatacatt
+acggcaKttattgacatDaatgtctcattVcaRcttttgDtNHSggcttaYDcHaatcDY
+acccWaMttgRtNggYtttttggDgctacVDtBMgBaDgtMaaBgctBVttVagaHBaaa
+aatgNactaattattNagaagNVaBgVtRgggatacgctgMtgaccatMaaDYDaagctg
+gtcaatggtatBtNtccWtWKcaNcBttactgtgBYDaMtMtcWaatctWYHatccgWta
+taaaNNacNgctYagtaaaRtaaYggcagaMaagggttHaatatcaccVtagtggcgtMt
+agtcaYaaRttWgBtctgaaBtKattaatYtacaatcKcacNcMDtgtactatcDcgRta
+aYagattgccMtgtYKaRaWHgtaccttagcRaWaagDataccagcatcYtcaaSgVaca
+tttaSttSVDSctactgaNctatVattttacgaggWgtaaaKtcNgatgttgcaaNVtta
+gRtttttRttYYaYcaaagcVDMaaRaRtccVcSattttcaattagWattMMctataWat
+ggtaagagRaaattYKKtgatagcMYgcVcgggStattacgBBctNtRgacaacYHctct
+NtataattBttStaRaaaatctgtWatcRacaaMtattYttKtccaatcSttatgtaWtt
+cgcaaWgtWNcBccRgtBagNgYtDctatccMaagtgcYMtYctYttgtcVaaHtatgcB
+aaBcgaataattcttcDaacaaacBtagWYaagcaVacYcKYttgSaKVcttccgcctca
+ttctcaatgVgaaacatWWctgcagtttctttttMagWttatRggcattattVaagaBBt
+tatctattatMcNtaacagttgaaaBaRtaRRtNtataYNtttNtcctaVBtatNtNgBt
+aHHYDttKctaDctcaNcatgDaYatgYagaDcaHgactHgWWaagWtSttctagKaagg
+YtcataYgBtccRaggggaaaHagaacaDatgaaaatcaKtattgWacgtcMSaacYaYg
+cWYNgagtaMgtSccgaaaaaatctggaMMRaaaataatctaaacgatatgDaggaVKct
+tttaatgacBttNYttagtatDagYttWctttNgtHtcVtattHtcHacattatHgNStg
+tSaNaactVMcaatcccBHNatcttDtcgaKccKttatttctVRaagttaMtaYtcttca
+tMYRctttRtaMgSaaaactgWacHagtacccatttcgcatgagtaaagtHcaKgVBtaa
+ttatBtttWatgMctccattgactattcttgtcatSttaaHaVtKtDcatcatatccaac
+KatattatNggNaRatcMSDHRtcctYRaatccacYaatBattcttBVctatatttRNtg
+aNtcaaaRgtaBcttaaDRcgctacWcttgatatctHttttgtNtYatatacgaVBgYHg
+attgggtcgacacDtttKVcaattWRcaagBtgctDKDaYtttcKgNgggtcacVagatM
+gtMVgVgatttcagtcgtgKgtKYgtYSaMtgataatNggattKNgaSggactaaBagat
+aacactcataVgttataaSacaatcRRaagtaDaagDYtcactgtgaVttWtBaMttttg
+aHtKaYtattccagccaaBaggataaRtBatNcatgtatatttcttacaaYVNatagaaa
+gaSaaaagaaatSaBgtcgattacattgWccttHNattataacgVRDtYcWgaaYaVgMt
+tcttgtDtKaYVttctgggSNtaYHWaaHactaaSSagttgSaaactYaMttaMaHVRtc
+gattaccHtcgcgatgNcaYtatattacgcHaaaMNMtaYDgacaggRgaYVtVKcaSVc
+WMBBaWaWcagtatHaWBNaMcBtatccatgaScHtYtgactcattgaYatRtacttYtc
+tttgBgtattaaDtcaHgcNcaVatagtttggggRaaaccWcNNttRBgaaRKgaaNtMa
+agcVacgtgttaaMYWtcBYtgagtaatcgttttaatcgaaaagttDcaatgtggtBaBc
+NtgNatBtggactttagYttBcgttRttatSgacNaDttatRKacactgcSKaVaaaRgH
+aattaaaRctgatKaWcctWggWWagccgaactaYccttgtgaBHggcYttttBccttag
+gaKtaaaBacVDcBYYgaWagaKtaHaaactaNttatagtcttttacgaccctttKattW
+cgHgcaDccctHttatVVaagKaatatgggMaNHagattgNStatBatcgaaYgcVcaga
+atcctcYtBKDatatcNKgacaatKDatgaaacgaaatYYcgNBDtataatMcRWtaagt
+ataHgMaVggcaaDtggttcVattattaaaatSVaMaNcDBttataYgttttStacattg
+agagtccaNtgaatttttKtStatatttRaatttcgBDccctaaSWatttaaMBStcata
+cctgctctatctatKatatgaacaactctWBaNagtcgYaaaaRtctMtDgtaBaacaNt
+acagtcgataNgaVccgtttattatgatctagtDSgaHNcctKtcttatNtgatYKaaSt
+ctWDVcaaccgaVttScaagaaaaVcccggagWatcVaNtVaRcNtcagatcMMatacta
+aaWaagatYHRWcaSagcgMtttatSBtBtBgacRaVgtgattaagtBgtatcgtNgggg
+DaWgagctgatctatttHaactttcgcttttccatttNaaYgtattttactttacttRat
+aBttgatagggacattattaaSaaaYtgatggaDaMttacttatttttttaaWttttaat
+aaWaNaattgtaBtBMcatcNtaaMtDaaaatcRgcatccaMtggWggHggagSttacaY
+HatYtgtaatcatttgVtataaDVttcaYttctHtHtagttWHNYYtVRVccatacaatt
+aaaYatcgcatBagcaatDaWacVaBWattagaaBataatgtKaaaNKcagaactNaaga
+NatgKtBSctgattgWcNaaSataggtataaacVaatDttcRaRtVtVtgtataagMtSc
+caSScagttgatYattcagcMaaWctaagtYcSattNccgtcgtaBtaattgttgacaaa
+DttttattaatacSKtcgcatNttatWatacgRtgcataactYtcacHgVgHttYaataa
+WacgSVKatactagDggcattKctggataagtVgKYtatgttagcgtaRtttaaagacHg
+acacattcHKaMKtcgKtcacggtgatcaaBtMttcttattcttDaKKVgWagtaacatg
+KatVgacattagWtaRtaccRaaVHtttttRtgBccagtcgctagtRtaBcMVWMtaBta
+ggttaYcttagaSgYgttttcaaNNgtttVaagctgStttactaacWattcgtVgtgtKc
+gtYaaaaaKtaSaattgBtYgaVcagKatgaMttWDRatgtaatctagacWaccgcaNgt
+ctgtgagtMttgaaatNtttattaRKcgtaWatcaWccaKtttNactaatNcgVaaBcgR
+gDttcDcatttgagWNattttNaYtttatgcHtttBBacgttgRgtcataNtatatcaWV
+catgaacatRgtNaWaatcaggttaaSctttcaacatHttVKaHtNtMtcttcHattYat
+cgatgtacSaaataVtcttYStaagattDagtKccgaccHBYatMtcggBacatVtaaag
+McttBgtSagKgNttttcNtSaaMaStHgtattttKaRttaMtDtcKtcgagDKgaaaac
+ttaaaWNaattgaWWaaggaaacKtttVggMBcatattDacctaMgaaKgcgcaaMRtaa
+tcgataaatRDttataNtVgtaVDggttaNgatBgtggcaaYWtagctcWgtSaacgtat
+tKcgcBtttDacaaaaaStKMtatNccagKatgtVtHtWaSBgDttgWgaattWagtttt
+aagcctNcttaBtYttaRactaattggagagggtctagtatgggtttacttBtatcatat
+gctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcgtactDtDagcct
+atttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaaNtactMcSMtYt
+cMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgtcattHWtMMWcS
+tgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcagagtaBDtRacttt
+tcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYaHgtgttNtSatc
+MtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRcatttHatSttMtW
+gtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactttattRggaMcDa
+WaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSStacaStYRctVaN
+MtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaaccttacgtVtcVaat
+tVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYtgtttaagaagat
+tattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWaaccRVacacaaa
+ctaccScattRatatKVtactatatttHttaagtttSKtRtacaaagtRDttcaaaaWgc
+acatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgttgDcgtMgcatB
+tgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacagcccccacatYSc
+aMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctgttWaaataaaat
+aRattagHacacaagcgKatacBttRttaagtatttccgatctHSaatactcNttMaagt
+attMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKaggYtaaBataSaVa
+tactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSaKtWaStVcNKHK
+ttactatccctcatgWHatWaRcttactaggatctataDtDHBttataaaaHgtacVtag
+aYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBaaNtgctggMBaK
+ctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacggtttNattgVtt
+tctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgctcttagHVggaY
+tgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccKtcHaaStttMcc
+tagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMtttctWgtNtgtg
+aaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacgggtaKVattKYa
+gactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNaBKRgNacaactg
+atttcctttaNcgatttctctataScaHtataRagtcRVttacDSDttaRtSatacHgtS
+KacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacctttYtatgttac
+tttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatccgtaBVttccag
+ccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcacaattgcaNtSBa
+accgggttattaaBcKatDagttactcttcattVtttHaaggctKKgatacatcBggSca
+gtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcgaaacaHtaagtta
+RatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaDgttVHWgtcHaa
+HgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtgttHWHacgattB
+tgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcVtaBtWaaYatcD
+RaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaaccctcccctaga
+WBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagatgaaaaHctctaa
+cgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgggaWtactKKMaa
+catKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaatYttWttaWSSt
+taHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctttYatcatKgctc
+ctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactttaSatcgDataa
+actaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatcacBVctgcaVatV
+ttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBagaHSBDgtagcac
+RHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHtcgtYaaMNgBaa
+tttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctcttttVctagctDaa
+agtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBWattccgStaMSa
+MatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatagttactttacgat
+caccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaaattBgtataRaa
+aacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStctHNaaatctBBt
+cttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHcctaaagacYRcagga
+ttHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaatacKcttRaRtgat
+gaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgcgYatBtRaDatH
+aactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcgattaaatBtatg
+caaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaacaBatatVtctgaa
+aaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKgaDcWgtYtDDWKR
+gRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaattcgNaatcKWag
+cNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaMtgtKaBtRtNag
+gaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtRtttttatttaat
+atVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKgtaaYatcSRcta
+VtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNcaRtagcataBgg
+actaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHcDaagtVaBaRcc
+ctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBaVYgtaacttagt
+VttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMtagctStKctaMa
+ctacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataatgtgtYtaStatt
+attMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKttWtggcDtcgaa
+gtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVtcatNtRaaBNcH
+VagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatttggacYtattcS
+atcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYRaatRKctgtaaa
+cRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSataWVgcKKataWa
+YttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgacacaatagtttVN
+tataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaStccBcaatNgaa
+taWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtgaaNSgatactttc
+gagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNMacKtcaDaaatt
+tctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgttRtKaRtMtKaat
+gttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMtRRtSaattaMta
+gaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDcttatcatVRtttata
+aHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaacgaaKtaaataga
+taatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgtYaaHactRcggS
+BNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctcttcatgBcVgtg
+KgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagttttaagaDgatKc
+ctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagatgctaccacgggg
+tNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgtaKBcRttgaWatg
+aatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagDaaatcaVYctcc
+gggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBggttWtaaScKtt
+MWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatHtaYatDtattDc
+RNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagactVWttctttgYMa
+YaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtVNataaBttYtSt
+tacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSaMtgNttaacaaS
+aBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDagcHacgatcaHtt
+YaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctatattaNtagcgacg
+tgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcgtctaRcactctc
+tDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcNaHcctgaaHacS
+gaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtcactaactatKDa
+cSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttgtattatgtDVag
+DVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttagagRatagSaaMaa
+cgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRaBaStNagatagg
+cgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcacaaKtttScRtWtg
+catagtttWYaagBttDKgcctttatMggNttattBtctagVtacataaaYttacacaaR
+ttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSatYaSttWtcctat
+KaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYtaDaaaNtgggga
+cttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaWcggNaBagctct
+gaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacatatatatgatNHVg
+BMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHatatKtaNtgYMcct
+tatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVattMMDtMactatta
+ttgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtactaaVttaSacNa
+atactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRtatatttattatcY
+ttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaSRgMKtaaataVa
+cataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDcagtcSttcccSt
+YtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcataNctctgctatca
+MatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNagatgtaatHaga
+gSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaataaDtaattSaDaN
+aHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDtttctttggSDtN
+taStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatWcDcttHtcMtWW
+attBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagttctctaatDtcR
+VaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaaRaBctgVgggNg
+DWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttttttatctatgtt
+ataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggDgKaaatScaatt
+acgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccctDatKaVtKtcR
+gYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYtttattVaataNctgH
+gttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagMtttattacgDac
+ttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHcttaaagcNWaHa
+taaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMcBtRgctaKtgcS
+cSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWcttttgcRtgtVcgaKt
+tcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtgaacRattaaNaga
+actcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaaggWtcKcgSMtcD
+tatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYctaRtccagattD
+aWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttatacgtatttttat
+attacHactgttataMgStYaattYaccaattgagtcaaattaYtgtatcatgMcaDcgg
+gtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgtcatacMtttBct
+atctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMatcMtHcccataa
+gatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaBatggaatgtctR
+taBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSRggaacaBVaccg
+tttaStagaacaMtactccagtttVctaaRaaHttNcttagcaatttattaatRtaaaat
+ctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgtacattVcaHaNaa
+gtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtKSttgtacgaccN
+ctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBWVHSHgaaMcKat
+tgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgaccBRccMacccKga
+tgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagctNYtaHYaVYtta
+ttNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRttatagccBaacg
+caRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaattacNRVYcaaM
+acNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaacgtgatttttBa
+cNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaaVtaHtaHHtBta
+taRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaRatgNacWtaatg
+aagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStacaaaatWggaYaW
+gaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgctccYBBHYaVag
+aatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtacRttMctgtDctt
+tcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtaggttacatcattt
+atgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSctagtaaaaattt
+acaatcactSWacgtaatgKttWattagttttNaggtctcaagtcactattcttctaagK
+ggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgcatRHaagcaYcR
+aattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccgacNattgatatat
+tttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWattNHcaacttccgt
+ttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttRggRKSttgYtYa
+tDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaatcHDaacgataYc
+tRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVgaaDgtVgDcStc
+tatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttacagtcNactttDV
+ttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWRtNaataataWKK
+acttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtagattaagctaaYBD
+ttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatgataaVtcWKctt
+RggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMatacgttgggcHa
+YVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcagtaagaggtttaa
+gacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccgtHttatKgScBa
+tgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNNYcacgVaagaRa
+cttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacattataaactaDgta
+tWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaatatcggBWDtVc
+YttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWatttWtgaaaagaa
+agNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatgattaaWatKMaB
+aBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWtatttHaatgtag
+ttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaWYagcgNtaDagt
+acNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttattagcatcgagttKc
+atDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSVMaaaccagMVta
+MaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBtttatKtgtttcaaHa
+MctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaatttccattttacatt
+tDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaaaRtgVtccataB
+ggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaaBttaaVatcHca
+VgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatMtgaaRttatttt
+gWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaKStNWtgacaVta
+gaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStVcgtagaaWaKaa
+gtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaNatVVcgRcKStt
+DaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtgatNWtaagHtgc
+YtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcgccataacgMctR
+gatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacctgYgaWatgBttc
+ttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVMtttggtHtctaa
+RgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaDBggttKaacatg
+KtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMcagtatcWBttNt
+HagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtgaHtactSNYtaaN
+ccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWRtttSgccttttt
+taacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgtaVHaggtaaaaS
+gtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaacatttYcgtaac
+acattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYBaKttctVttgtt
+aDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYattttMgcBtcatR
+tgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMtcctgaDcYttgt
+ccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtagDacactagctMt
+ttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataatgccVgacccgat
+actatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWtatHttggttcttt
+atVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcMatttgtttWcaa
+StNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVcKatgtgcaacVa
+aaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactttgagSBtgtRag
+aNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaatatcaRtattcttt
+tttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataKtaRgDtKVBttt
+tcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBtNatttVKcRtta
+HctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaaHaatWtaVgaaB
+ttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaaScMNattRactt
+tgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYgtNNacMtcNRac
+MMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttKcRMtgMNccatt
+aRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWgattttttaYcttt
+KttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtacaHBNaattgttKt
+cttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcggMgaVKaBattg
+acttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDSBHaaaaSacata
+tacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatggDttaactattg
+cccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtatKSHYttWggtcY
+tttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaactcagDSgagaaYt
+MttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHattVagacgYgata
+tatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaDtaWccaaatRca
+gcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRMgDgattMMgtcH
+tcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMtaatDccSgtatt
+gaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactatacRacgHRttgc
+tatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVtaRgcttgYgttBH
+tYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctcattttaNagtHK
+taMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaacKttgatSKtYta
+gBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagSKaWttataHact
+aHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagDgatKaDctataM
+ggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgBaaaaccgNatVB
+ttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtctaaccHttttWaa
+atgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtgactattaagtMgt
+ttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtYtMcctagagHca
+ctttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtgaaataaDatcaHg
+tHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggtatcttacgcttWa
+aagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaYMtcWRgNctgNc
+cKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatccattgDWttatt
+taWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBattacaMaNcactMtt
+atgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDtggaactttggtc
+NatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMcacatStctHatg
+RcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgattYMatYcggtct
+tcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagcgcBtNtaaaSca
+KgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaaatBKgaaKtDMa
+ttttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatgaaatttgRtYtat
+taWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccatNgagtcKttKat
+aStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatttaatagcagMat
+RaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaaaaatttWacaac
+aYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaatttcKcMagNaaK
+agattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaacaDtaDatatYggt
+tBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaatatctSSBgggaaH
+MWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaataNataataRaaR
+gattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaaccagStaaacNt
+ttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgMttttatgactaa
+aatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMcaRcSVaaDatcgt
+aYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNaaattVaBtctgg
+acaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctacaatWtaDtSgta
+HcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggSttaBgtcacacWtc
+cNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHKtSaaatDgataa
+acttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSatatatattgcHRR
+YttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMRBgtHttcctaat
+YRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMcgRaacMcctNSc
+tcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattctcgttttScttgg
+taatctttYgtctaactKataHacctMctcttacHtKataacacagcNRatgKatttttS
+aaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaattaagtNacatHg
+ttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYttaaKcgttctHaK
+ttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRtgVtgcctattcN
+tctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNctgaScattccDHc
+VBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHaaaKccgHgcgtY
+aaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttattagNaWHcVgcaat
+tttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatgttgttactagWY
+taRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHatMatDcNgtHttR
+aWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVctSVgRgataDaRa
+WataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaYaWtggttHYgag
+VtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggttVcatcataaagt
+gKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatatHatcatSBagNg
+HtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatcagDtctcagatt
+tctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggtgttataagaata
+aHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcgagtaaRttacWg
+actKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMggtataatgttWYt
+tatgagaaacctNVataatHcccKtDctcctaatactggctHggaSaggRtKHaWaattc
+gSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDaggaVBagaYttKtac
+NaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcgtRccaaYgDctg
+cMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaVMctaatcttgVc
+aaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWtttactaaKatgagS
+aaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaaWBtMctaataaV
+cDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYatVattaagaBca
+cggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWDKRYcggattgRc
+tatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattctBtMKtVgYataa
+tMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaacattRcagcctHt
+WMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagBVtaNtRtYRagg
+BaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgDaMHaYVgVtaSc
+tatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtccatgKgaaaccBga
+agBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgattgHVaatcDaag
+cgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtKtatagttaDgSa
+YctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYttVcKgSDcgagaa
+gatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtctatgggtaHKgtHa
+cHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaatScagactataaR
+ttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaatctVNcYtttWa
+gHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatggWgBcgDtgVgtt
+tctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVtatDcattDtgacc
+YatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttctgaKVtaaVaRK
+DttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcctMtVtacDaaBtY
+tMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaattcggttgSWttt
+tDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtacatgaattgaaWc
+ttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcgaSMtatgWatta
+KttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHStaacagttgatat
+BtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSaaatYggtaRtat
+NtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtagaYctMattNaMVN
+tcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVttWtSagcaacatc
+ccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBtttgaHaRttggt
+tWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatgaDatataSttag
+BaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtcctcttBaHaKcK
+ccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttDgaaRcgtgYttg
+tcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtatNgctcaaaSttR
+gctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtDatttNatttaaa
+DcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKMtHtaVtagataW
+ctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttatttaacctttcacaa
+ggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNagtgaaattaNac
+ttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttatgtHttgtgatMc
+caggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaagtYagaHgtWcHa
+atgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaaaRaStDWtcaaa
+aHKtaNBctagBtgtattaactaattttVctagaatggcWSatMacccttHttaSgSgtg
+MRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRtatStRtDtatDtt
+YatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatNcatacctRataD
+DatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgttcttagtttgtgc
+DtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatcaYaKctgBatgc
+gggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRagNtaYataaVtga
+atatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacRctaWtWtataca
+atctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSggRaaaaatgcagt
+aaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatHSaaaDHttgctg
+tccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVMRSgctaatMagt
+YtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagcagaaaccccRtt
+tttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcWgKWHttHataag
+HacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaactttMctaaHaatgtB
+atgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattWaHNcYggaaatg
+ctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaNcttStggtBtta
+cNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgtactgcgggtccHH
+WHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHgaccaacWctKaa
+ggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagattgagNKggtggt
+gKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtcacaaSDctDtat
+aatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcatSVtacWWgaagg
+agtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaatgagaaRcataa
+KNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattggatatWtgagta
+ttaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtcttattDtcgtatWt
+ataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNccDtaKtaHcttaa
+taacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDcaDHtcRcgYtct
+taaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtactggMataaattt
+tHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttcttNtYNagBtaa
+acaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaRctHtatgttcat
+atVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMRtgacttttDacc
+tataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYatagatgWttcat
+KtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttcattaaaatcgKt
+attaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHtaaggccccaaaaK
+atggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgtcttBaBaNgcga
+aacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcagaMaaacaataBc
+tgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttcVtttaDtKgcaa
+WaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaacatYaRRcVRHc
+tKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctgtaggcgtttaHB
+ccatccattcNHtDaYtaataMttacggctNVaacDattgatattttacVttSaattaca
+aRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBaDtttYDaDaMcc
+MttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDgatgtatatatgYa
+tgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctMacaBSactcgga
+atDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMtatgatagtgcaKa
+gggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStctYSggaHYtacaa
+ctMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSccKtgaaKtNaBt
+atDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtDactaaStaaatt
+gcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacVKgaataHttttM
+gYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVctWgVtatHtacaa
+HttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtcScHagaaatgcY
+NggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRcaaatcacagHgag
+agtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRttaaYctacacNta
+RtaactggatgaccYtacactttaattaattgattYgttcagDtNKttagDttaaaaaaa
+BtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatMNYDKNcKgDttD
+aVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccctaDcacagcRca
+gagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttatRtttaVcaccaW
+aMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNgaNDMtaattcgV
+ttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWHtWgHtcgNWgaR
+gctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagcaSaHHtaaaVct
+RaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacMtRtctgttagcM
+tcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgtaaattaaaggcYg
+DHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRVtccttKgtSata
+atttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHaDaaatttagYat
+SatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaataYaRaYtgattVt
+tgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagctNgBcWaWgtSa
+DcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStgaccgtSDattYaa
+taHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccactacgHWMKaatgat
+WatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtagatcgaMagtgga
+RaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaatcttcataacggc
+acBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBBaKtaMVaVgtat
+tNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHacacRtctHatNVa
+gSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaatagttattactc
+ttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaaccaWWDtWagta
+RDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYagacagaMMtttt
+gMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgatttacatctgtaa
+MKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcgaWcaagtagtWt
+tHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcatcagatactaagN
+SStHcctRRNtattgtccttagttagMVgtatagactaactctVcaatMctgtttgtgtt
+gccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHgatctgKagtagB
+tVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDattaggaaatttcY
+HaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcgtaDWgtcgttaa
+tDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVgattaBVaatgaat
+aagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgBcgactatttVcM
+acHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtataBaDYcgttgcNa
+agaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBattgtcgacaatNg
+attgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKtgBttatgVttgt
+VttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacaggatgcRatSgta
+SaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMaataaataKtttY
+tagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBcaaaacDStagttV
+acaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtttaaccaaaaVtB
+cacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDtaatatRcctDWtc
+ctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVtatattactSaaa
+KNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSataggttattcVta
+aagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYtacYagDtWcHBDc
+tctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttttgSatVgaaaga
+WtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYcaHtgHataacKt
+gagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNtacKtBtactaaa
+gaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgtgatcttaDataS
+tgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKDgcgtataBKcat
+acactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaagMcgNttcatcB
+tYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgcMaWHtaatactg
+tctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHacMagtaRtctgc
+atttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagcagttaatgtNta
+aattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgttaaDVctgtttB
+WgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRattttcaaggcYS
+KaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaScaatagtattgac
+caagtgttttctaacatgtttNVaatcaaagagaaaNattaaRttttaVaaaccgcaggN
+MtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaaccBaaaSggttc
+NtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatgatagaMBRatgRc
+McgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNatcKaBaDgatgt
+aNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggtgaBaSHataacg
+ccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagattYatgtatcWta
+HtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcHDtcgctttaatg
+YcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHaacttNctBtcac
+catctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWVaagtagYatRtt
+aagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttggataaaKSRcBM
+aBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcacaagagVttaaRaa
+tVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMaaataKaaNWagK
+atagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcBgttcMatcgBaa
+NgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaattgHatctaRag
+gSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMSgggNtcKtYatR
+ggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaRSataBatMttta
+aatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttMtattggaaacct
+taacgttBtWatttatatWcDaatagattcctScacctaagggRaaYtaNaatgVtBctt
+aaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRHMaaaHtagtaaH
+tVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttcaggKDatDtatt
+gaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaaggtNHcgtcaac
+caBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKtaNttWacatYHc
+tRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYttYaatcggtatSt
+ttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHtaaaRaaRgHtagt
+WattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRYaMDtactaactt
+aWgtatctagacaagNtattHggataatYttYatcataDcgHgttBttctttVttgccga
+aWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaaatVtccRaHtaS
+acataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaacVtatctatatB
+RataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMtattattggctat
+cgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatYBtttDttgtBtN
+ttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatccaagNaaaatatt
+aggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataaagtatattaatt
+tataVaacacaDHatctatttttKYVatHRactttaBHccaWagtactBtcacgaVgcgt
+tRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVtaagaattHctHtc
+aDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNttKgttgtaDtctt
+tRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaMattaaaMtNaca
+VcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattatBRcWcaatgNNt
+actWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggatStattYcaNMtc
+aBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWWatMtBtaaatag
+DVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDaHggaaataNgaW
+SRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggtttgHgVtaHtWMtt
+NtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWKgaBctataaccg
+atttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMacttacaaDaaNtactW
+atVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtggattaKtaKctY
+aMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMagaggttaHYSttc
+KgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtcaaKMNatgaatat
+tgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcVHtgYggaDgaYa
+KagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcSgRWctacatcKS
+actctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaactttcgaagRatSc
+tgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBccataatSHatRtcH
+agacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgtaatatWtcaMgac
+tctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacacagtggggWttRtt
+agtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagcYRtBtYcgacMg
+tDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaaaacacatgYaBt
+tgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatggtDgHKgMtattt
+VtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStctatttccSagatgt
+tccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtNHaaatatDNagg
+ctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHtttgaatcaaDaHtt
+cSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVtSttcatatKaaR
+aaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcgHattcaWcttaa
+aatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRactctaRDaYagta
+acgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNatacatttHaaDHgcaD
+atMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWatcaatVYtNagat
+ttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttNatWttaccNtYt
+cDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNcttatagMatHVg
+gtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataMaaaYtgVtcKaY
+taataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaaacaVgaWtcacN
+WgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtcaagacgctDHYY
+atggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNatttaDtDtgctaa
+HHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVgtVNtcaaatYBM
+aaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaaccaactMtacataaa
+ttgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagagcSHatNtcaScN
+tttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBcttttcHtKtgct
+tYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaattHgaaMtHcaga
+aSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgHtgcDttactttt
+tttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataataYtSagctttaaa
+tSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaDggaBtatttgDa
+cataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcataaatWRgatataR
+gttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatgDtaattagatHg
+aYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaMtatRagHgVact
+YtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaactttaDtBacta
+gtaDctatagtaatatttatatataacgHaaaRagKattSagttYtStatatatagtctt
+aaaaMtcatgttcaaDactgRttctaagagDtatttttagcgacttgtgRtgNctgSgRa
+aaaatgcaMtYtDcatcaaYKttHcatSWgaaaatDataggttatgBDMtgttataacaa
+YSgagttacgttatgtDStttaaatctcgWKtcSacgagagaSgttatBMDgtcggtgtg
+cgaNtaSHBatBtttVMgVcagaNatcaDDaKMtMYtatagaBccctctDtgtatttata
+tKNtgggtatgtRaacttgaWaaYgcaHatccctggtttStatMtcgcMtaaaWKttMVt
+WctVtgttaKDWctgWaVttaDVatgKtagagtcatctaKWgtaaMttSacBaMattaKa
+aHDataattgWtgttttgtcatBacacgtStacaaagtNctNtgtgatcHtWttcKaaga
+gttttaaaaWacgRacatctNatVStgaatDHgttWcgtRKcatatatctcaNttaaBDc
+ctgaaaaaDtaYaHaKttNtaYVaVtttaDtctacttctWttaactaattttMagWcaat
+cccNKYtBaacatgttgaKgKcgcBHaatDMttatatcSWacatDatRcWaMtDgatBct
+HgScttaaaHtSgKtDtttattgtRStWgttccatatttcacWttcatattgtaHVgaBt
+acaMtgMaaagDaataactDatattagMaNBagcttcattcgtaaKtgtatttcacMtgB
+aVtaattStcttagtYgtgtcgccttKatgggtgaWaataggaatacMMagaSKRttBga
+tgacRtgMtagaSRataggtatcaccgaNaaaWSWacDgatacttgattagcttgtgVMt
+tatYctaRgHVcDtVRRtSaMtcaVtVtatcaYaHatattaaVaatctaBtgtacRatNt
+atttgaYatSaHctaNgNtYtYaYagattVgatcRtaacgYggtgtatKttaatMagatg
+RtatatgHaKccHaaaaYtgaacgaWaNgtYHgacagaYtctaVtacccgatttttaaag
+cDttatNRgattKaaattttcatctaatgccgcaataataattgttatYtagtRNtaagt
+tggtHaKttWMtDKgatSagBYcgRggtWaVaattHtatgtaaaMgSaaagataaKaaKg
+ttDttttRaagaacaWRcaacDgtgttaatattaKtatcaWacacatttVtctgatHRca
+gtttNcaaatcNctNttttataactWacBBttgBttaaaRaWtBKaaacgtatcRcaMaa
+tgYacaaaagtgBataStWYtggtatgacaKWtctSgcKHgtcNaMNcataSatattgac
+tacMcataattNVtDaRccaaatcagttttYttagYaacgtaatMtMVatNgKaaMaaBg
+attaKttatDaBcttKtccttttacDagaYtacHgttggacaaaVaatagtYatcataSg
+atcaaWVttcgaatgaccctccttNtaSBWaatttDttttcaatatYggctatDcttatN
+ctttagDcMttcaacWaaNattSYgctttcaHcRaattaataaaatcVccRaattactct
+aMaVRattacagtgRcDtcgtgctcttNtWVtacagtHtatHaBDtcWggtgctcaaRHt
+atgtDgacStgcaaaVKtagttataatactaatatgtagScaatRSacaattgtattgca
+gatHHtgBcaatKKtaaMMcaRcgactatKBaMaYatgKatttDaaNtRatattgtatWt
+tagcaaaaacaWgcacaaHcataYtDaHgttataaSacgcagggggtYatgcKctaaaHg
+cVgctBDaVttccStagNgcSgtatgVYaMatcaWRBtVtgYttgtgRcYttcgctgaac
+NttgtgtctattWttttcctagMtagaWtaKgatStScatMaBtaStaSactattYNatc
+tgtacRatYDaatgatgatatgaatYaaaaSHttaaYMaWtDcaNHaBcaYtgVgcatVa
+acattMRatBtaatttaDacRtagtaaaNYVSMtcagaaDtttDHtRcYatacSNKaaMc
+HgatBaaVttactggBYgaYatttttgcDacHctWatcgtagagtactcattDggtcatK
+aSgctttatttagtDtRBacttaWYaaaattttgaccttaaWtaatgcRgccacttMtag
+gKtcBtgacgaHctttatcgtcStatMHDNagattatNagVaaaWcggaaaYcaVactDY
+actaStattgBHtcYctgggtacatataaYcgaYagaggaggacaVatacHRtYtctgta
+VgaYcNgaaaNatacVgcNgtaatttDcatttttcaacttSNcaaDatVYctSgcacctt
+agMgacgcttgaSttaaaatagttaggRHttaaacMatagcaWgMgagtcgctagtgtKg
+actaaHttattaWgcaaaaaaSatatgcgttaBNggttaYVatgaactttttgccatata
+aataRatSaBctagttataBccgaaacaagatacttaattttgaHgHMgtaaKctttaYt
+aaRacBMtBaYgaBaaacaYtVtagcRgWatHaWagattWSacStMHatttaDagacaat
+cgtgtKtttggaMtgtWtgtgcaaNaaaaWtKaaBcMWtcttctatgacVgagcgaggHa
+YYtttWgSaaYYaWtRYHHaMDtctttacaatggaaMctataagcttBcgHcNWaatttg
+tatatYtStatctagcactgtVttccagaaattaDtttaRtVataBttWagcatDMVact
+YtgcatWtttgaaMggKaatgaaaaHtataDtgYcMggVaaatSMHtttgVttaYaWaat
+aRttgttaYttattttRtWtataaBgtDtttatatcVgaaBcaDtatgtcaDagaWtgaY
+tWctcVagctcagctatatagcRVtcaKtaataatHgNaccgaaaatVHBaatattcgtt
+aVYttatttctBYaatKaagaccVStttcattgaMagSaaaaccccWKcaaNtMYaccta
+DStagaaatttatcatVgtcaatacccKattgtaaagtggWgtatatVtagBcttDaBac
+aattWtDYKtatRKggStRtaaaWatBtaagtaattDaaaaBRacWtaagtacaSttaaa
+tccgctaaccKaattgVWttDattatttattKaMtcYtMRWagMtcgKgBagacgggVaa
+NaaatgctKcgtaataaKtaaagtccWcttHMatSYgataaatDttBaHccattgBttSg
+aaHYtaataaaMtgaagatgtttBgRcattaRaDHcttBgaMaWaaVMMattaatttgtg
+BRctattgKMagNcMtatttaaaWttgaaacatWgcScgYYDYgttYtVtattgcKcWta
+gcggtgBaSctaKatacaaVtcaRDccccgtgttBgKgggtHagcgaattaaagMMttSc
+ggtDttttaHcSaagaacactcacactBcVgaKNaDHacacttatSagaattSKHtcagt
+ataaatKaaHtgaaRagaaVcBtaHtaaatcgatcWcaRtaaaatttaWttaagtcaggR
+ctgaWcttDttgactttaVSaaaatggtaWDaRMtBtaaaaaKatBgatMtctatatcaV
+aMgatttgNagtDRttDatcttttaMtYaaatcggagttctctaYatNtagaNcgMMact
+acHcaagtaaaatStaSaacaHcacSgggtNKatggaaagcggaaKgggtaYtacSgccg
+BaggcRacgtVgDtggaMcYaaaMatggacgYStKKatgaBcaaRtStccSagcRccgcc
+gcSDtgcggBDgaDtBtSSggacMttttaWcatcMatgtNMBWgataatcaaVtgaataa
+taaNatgcaaNttNctgacDMcaHccgatgKgWVttccaStggattctcDacttttttct
+ttaaNcWaMWccWKWttgaaaMctDaaBactRtVattttBtcMaNttWcKacagttKStt
+aYaWSactHSaBtHgatgttacatgcatatMtttgtaacScWHBatHactggatatatct
+gagMgRSatctaaSttaVagcaRcttggaYaatKHtagBBactattcgtaaagaagttgt
+VcgatgaVatHMtcaggtcgKSgWattgaaaVctccVgtDcaaatgaaHgMYactcaMat
+atatattNVttWtWaatttacRagKataaaNtttacaaWgMVactattaSgaggVaaagV
+taccDRHaaataRaHaRgcattMttcaatcaKaaataDcaDKtctcgaggBggacctDtt
+tatHacWVaWgatDctaNaNcgKatcMtcMaatBtttggacgtgataatagaaacRactc
+BtattttaKtgSaaggKtaggRaVtatagcccaNRttaccttSMaagatcggDacNBatW
+cgaactacactaactNBtaStgVtNagcatctaVtaKatKgaBtcgtttWaagWMgagRa
+NatHaaaaDtacagacaBagtgcaHaNatctcBccNttaagttDgaataaNtcgctaacR
+BgtaatSttaatatgcataacccaSattKcccttDttggtcaatgggttWaacgatacat
+tBtgMaYgaRttatgatKaKgtattDtKWgataacgNBtaccgaKWatcttcttKtgtct
+tagcattcctWcaaHgagtatDMSgKtcagcttgVHaKcttDaataaaVaatttDgtgaa
+ataaRgtcaVaatacttagtVatatgggcatgtDDtMtgtatBggattHtgcVtgtgatc
+aaSattatKYVaacSNNttNWcgaHttKDaaMYHatcgttaattaSttgctWaacHtaKB
+taaaaKHttcRWgaaWcRtBtttggBcDtgtacNttaagcKtaHgtagaaaaRttgaaac
+atagtWRaacYggtaaatcgctYaBtWDRtgttgSctaaKatNcattgtgtMttatccat
+atagctSacgccSNaaactacgNtgtgcttMatSKtcaaBaNaaacataacagaaatagt
+agctcNcatcVgaagStaataVcDKKttcagDHDtattctaatgagggRgBMctatacaa
+gYactctMaaagtcgctttctcgtgaattatNcgatMtttaggcBaaatctNtactaaRK
+tgKactattgtcatatgtacgagttMaaHSSgHgBatatcgcaSaataaaWgaagtatag
+aHgcttctttatgaccWaatttaRtaDaatttaatcgaaattgattMcatcaWaMtaWaK
+actttctBacactatNgtccttaWgtctgaccKatStaKtgagtacgggcgcgtYNtatt
+tagacctctKcatgatKWStcaataactaWgMSgHtgatctttttgtcgacgtSacttaY
+gcctWctcctctacaagVtttMaBactWVaccaYtgtSgcgttattcKtatStgaaKacc
+gNaataaHtatWtYtRacggcaDaScagcagHaYWRtRNcDtHtcVWtggaataaaYttg
+VaNtgttagtYttgtagSaaatDgaggccDcgBRYStattatttaaggccgHgggYRaac
+cMaagttatSttctttagcMtgcgMtgaSagaNaDagttSatgattWatttagtDgcttg
+agtgMKaYWaYccagcaHatKctaKaDgctagacttattgattaaYttatcttattattS
+taattWaRaYBWagYaatatgttRgScttgBagDaWgcgtgcVDaggcttgtctaDRKac
+ttgcaKBWRtaaVaSctKtacttMaaSVaWWcgSaNtttSWgtcggtcacttggVVtgag
+aataaataaDttgaaccaaaaMttaaaagaaaaaaaatcNBtatMgccWagcaNgaVaNa
+aaaaaYaMgttaWtatHaagtNtacgacaBtMMattttWNaRtaaatagYaScKattaca
+gctVKBtWNSKgYtYgtWatHaVatDaaatWgDatcctggSRagagtaaaaMgatttRta
+HacatggtaKagVcctgatgaMtaaYgatgtattattttHggBaccaDctctggNNtYaa
+tctVttgVtRtVcRacttNctttataggHSRtaRacaaattaacHaHgtgttgtttcBtB
+tatWtgtattttgcKagMcaaagaMtattagtStagcBacYaaHcagVgWtgtttcgtgD
+HaVtagDatcRaRtggtWtaactgcacgaggaaaRttSDaaVaSttaaaaacSMttacta
+NtcaacaattDtacttttYatVSacYtWtMttaattatcKtcttctatcaKDtctStSaa
+acggtYccatgtgagagtWtagWKgcaBaaaaKttgNactaatcgaggcWtcDDaaaaaa
+cactHattaattcactatYttaagacactaKaagRtRataaattttcatHggtaataaat
+gataHtggctaacBacDgtaatattRtYgtDNDBgKtcaggcHattttgHNgWtaatttc
+cgactactgacatVNttYYgactcgctctatttagaMcgggatHcgtttatBaDSagBaa
+aagRttBggttaaBactVHgatgaatttattcaaaattgcacttcDgacttYcVttactV
+tttatBaKHagaWgtgaatggBtaaSggcagacNcttaDttVgMtWagattggVatttac
+HtctNcMatacttSatMagcttgtNcYaaScaYactcKctKtagScStcagtttcatWaa
+tggtgagaggHaggggcaacgcRKtaRcMaNtHaatRaRaaactVtBtgttaatRtWWca
+aagKttccaaKaaatacgVttcacaaacgcggtgagaRaatggtgDMWatcWVScacaaa
+DaggaaHtgttSMaaaaaccYccDBtatYgtMagcSagaccaVcctcggtVWaaagttat
+cNaagataataSaataaaKccgtaDtYttatYcttHttaagKcMctaaatggaatRgaaa
+VaaVtcKYaggatWcaBtDaggDatccttcYNtgcSMRgaRtNgaatcgttRttatDVMt
+agctttacatDVtatatatcagctaDagMtataccYgaggYaaatgDaaaatSgctctga
+tgtttVaaBcctgataKtagaaaccaKatatgttaDtgaDtatagataatacagtaDtat
+cNtgtDMtYcattRVtctataNtWttggNaSgtMgaaYctctDggHtggHDccaccacKK
+aaacaaaatRatttccctttaagcRattMHctattHaRtataVattggatcSttaaHaHg
+aaHNDtacattSaaggDatttcaaaYgctBcatattaaaKagtgcccatSctcgatRtaa
+aMtgWactttNMaWctYgRatDggaactcDcaattaKaactgagtatctataagYaaaSR
+ctggtacWtttccWtaYRtKHattatagWtKttaNgcDtatHacccattaatttataacg
+ctMgaagtaacaacagMgtaYHYVtKMHtacMgKcaaatctgRYataNtcgttcaatacg
+gWtMcaatYcBWaagYtVaDNagtatagDaaNtaaaYtttcYWttttStgggataaMgat
+attagaaYtNctcttcBagactaYDcgtacHDWccKaHgttcttHgVggVDttatcatKa
+MttttacWaaSattctatagaHaggKaDagBtaaagtcYccattgtYcatctaNgRgVtg
+aagtDKttatBKcggDtattRYgHccgtgcgBNMtttVRgacaYctSctaRacgtagagc
+cgtacRaagtaHKagStSttttgYSatattaaaWHaaWagttDKaaNaNHaaHttaYctt
+MtcaaatgKttBtSgtccaaVaattSaacgttgNattgatatNctaWtVcagtactKcWa
+cgVagggHaaRgaDaatcMttattaataacaBMaaVtgYtKgRgHactgtactatcBaMt
+VggtagKcYtHtBSaattagtaatgMcaVVagYYgWtactttccaaSttDgaaMaMttca
+cttYtRgacttcagcttWtttagtgataMaattaagVtagaatatKataagtagttaagH
+MRaDattaHaaVcctDtagtcVYcaataaYcNttNaaaHctcaRaatttcaNRgatSHgV
+atagctRtcatgaBttMaaagRtcgHVtgRgStgatttgtagaKagaRWRctgNaHYgaa
+atBctgtttRttNWagaccgagKgtgcggHKVttaatattaatataataDtaNcctacaa
+RgcaNMctctgaaSHWWHcttagtNagtWgWaaKtYaNgcBattatccaaaSctRRHKaN
+tKcBgtgagaDRWBttactaaattSMctatatagaaYacDgatttccVtaagRtgRataa
+tatagtctttttatgtMgtcaacaaNtaaaaactctWtagaVaaaDtaattatagtBStc
+gaatDtgattVaatMtcaDattVKWaagatagggttgtMRSgtcYgWMaatgNtagtcBt
+tagtttctctWaaMtVgctWgSgtHagaSagactagKtagWggcatttHgttgacaaact
+cggggHggcWBgVgtatgggagVgagtcVcBtDctttagtctaagVWtHtgtttaScata
+cMBtKgattatRtgtttgtctttDggcHaBtRtgtaataNataatttataWctgaYWata
+StcHaatcRtaaVagDWaSatagtaccNDgaagtatacgttttacgacgKRtattgDcta
+tRRattVtStaaactagatgVatttagaMaSaaaattVtatYtgttgtRMagtHaatttS
+ttaaYNaggWagtgcacgaMcactgHgtgtgggHMgtKacttaaYgtcgcatcSatattg
+BaagtttacMtYagSatttatttaVtaaDtaWaHcgNatactgactHtggWtataDcDSc
+atactcStcDtgtcgtgtatgaggtHaaNKgDattgcBccaagKgtatgacKSMtttttg
+ttcaaatcaaYtagtaSatgDaaaMccKNaMaatagaataagcaattattataaMgagtg
+aSgtctNYttattHaNaYYtcDDtaatNRgtatttaaYtaaatcactHVaHcStccttcc
+caaVatcVggatKtatgRaaDBgaYtttacttYggactSDtaBcaaNggggtattatatt
+BDcttagagYNMatBgttYaagactMatgttRgatacccgtaacacBHtatKacWgatRc
+HttaattYtKtStccaaatVDcaNKHHaaataatagtagtatcttgctNDggVaVVtaVa
+RaaagSaccgttctcMtVtgNBgtDtttctYgttactBctcRtStWtWDScMtcWSaRat
+gaataRHctaNtcStctYtWacagatgtatYBtHaHWBtacggtDcaaBtatcaggtcaV
+attaNctactgaaaatWaDgactNWtMtggagaattBaataYcMWYcgatMYatWtgatt
+SatgaRtDaRgccagtSttatatRaBtattRcWtagtVgaagttMctattatatDttagg
+tctKtgtgtBagacgttatRKtgatctatttBtataactgataacKcggagtgHgtVttc
+ttgtKDgcDtaYatBDatcaatattgttNtaBacatcgcNcaKcaWcRataWcVgtacgS
+caWgttcggHcMttcRccatgaRStYgNacagatacYacWWtggNaDcWagttHatMaNa
+atNtcDMDcMaKgHNatScVgatKWatatgNRgtccgYgaagattDHgtMtcHaSNaaat
+tBatRagtaaatttacaagHWtKatcaagtccHtYcctgttKDMSgtactactVctgaca
+aaaHgatatacataatKtStHgctScSatNatacaYttaaWHtctgaatYtagtHtKagg
+ccWBaStaDctaagagNtaatcaatcgttNgaYDaagtaaaaHatagaatcgcgBaYaBg
+aacSaaWaaaaactccgcMttHttYgtaagaMctKBtacSagattcBaaWtaattttacR
+ttatcgaRtacaRHgtgRagaaBcttaVgacVDgggaatVatagaactRRtacgYttNat
+tVHgaHttacaaaaaaaYtcRWtgtgattatgccaSDtttatKWgaatatSNDgatttta
+acgtcSRtatggttcttcBtWtttMtBtMScttaHatBattHacYtaYacattcgttKgt
+cStSctcKtatatttcaKSgagcttccaacaccRDtttDaccattatatSgtcWtVaaag
+ttgtagccattDtYaatattDaccatcVDaaRccagttttgtcHacMattcHgaNcatgt
+tKcVttcctgtgcSataaatattgaKtctaWctMRaKggtaYcaagttDttcgttacRta
+tgatggHNaWMtKttcatattaaDaSaBaaaMtMatBgKtttgHtHactaatcatcgtWa
+atKaaWcaWtcctVttaaNaggaaaagtaaagaDctNttaDBaBgatagMgaataacRcY
+ggatcRaaaHaagatRDtVRactaYagttcaccaaWtctcSSaaatcSKattctggDgaa
+cagDtaDagacagtgtaattcaStYttNaStgtaHgccttaScatMRcaccWtcatttat
+RtaagatWtNataaWtMNtDVgWttgcWgtgaRttttRgWcttMtctaHacaaYtKctga
+BagtRagacttDatNttaaaDgRtatNcHatcSDgtBatcttacVcYacNgaattaacga
+gttgYgacttDattatacBattMgctagcctagatVcaactNttcctaatgtDaacgYaN
+atagMatSWtYBaaaRtgMtatSRgaataYaScaVgtaScMagatNNtttacaaHBaWtN
+tRtctaaacDaaaaWMcaNtcVaDNcagaDtgcWKYgagttaHtgcDYataaacataBaW
+WtcggtatgtgaaScaacctttRNatcgttaaagcaDctaatgcBatttacaattVaMgS
+MMtccYaaaBYtggattttcataWttgBtatDtBgactaatgtccWaaHataaScHttWt
+tDtcgtcaagMctMDtaaaatRtBaaaacaatgtcagcatBgNNBVttttttcBacWttt
+WtSWWtgaaaaSacgBtaaataaagtcDStaagaactgttaatYatgDctattactgaHt
+aaatStHaagacaKtagDtaaHaDgttccaaDtaaggacactctDggcgtDagtcWaHgR
+cHgDgaSctttattgtcttttccttRYaDgNactaaatcaWggcNSBagttttatatStK
+gtcRtgattaaggtcaSBttaacaaKatgggatcaaattgRgcBagtNtcgDcatttWcc
+tttgtNagDgctgcatttactttgtgtcaBgSatttNHaMcggcagSctcKDtWBaagSa
+gWatggYtVatSRgKagattgaVatKttcgatYatKYSgDaacNtcVgtttaWataWtgV
+ctgcgSggMgatccatgagttgtWcatYWWcctVcNHagtNtgtKtttgatcaacttaSt
+tattgatNcatWaVgNHcagStVHcggHacaaDttgDttWcaaRaKgaaatKaattagta
+WacattgaaatgtgaatgacagtgaRVtaaYagYtcggcatMttgaaggDgagDRcaKgH
+tacacaaaMcaBtagHactgKaatRtNttcttcatcatNgYgStggactatgSMttgKtD
+aDgacRRgtWaVattgatttaagYctatatagactaagaggtatWtataaactaYaHRct
+StgKWcgtRtKtYtYtagacgattRaaYBtaStcttaWataatcHttataRcactgagtg
+ggagccaattctcDtgDaggHcDRVaVVggaaBtRttaataaRRttgtaagKNcaVWWgt
+atacctgatcttBtcttRgaWcaVRKcagttSacttagcgtKtgtYWatatcgNttcKac
+cacacVKctgattBtggacgtctgacaDtWKttattttgMBgKaacaDataattWtBtBR
+tVtacataaatatttgtWtttatagtDtgcctagctHYaatgcaNaaRcaatVtacctgg
+gggKtagBgagaBgRaaNttttMtMagMtgtgattNctcNaKggWtMatcttagWgtaat
+atatNctaYBggKaataBattYtaattataVtggNtcgtgtctaattaaacctHtacaaa
+ctDctDtctgatatgMtgataacWctgtgYSaaNScgDYaWtatDatMKgcaatttctgN
+cgtHtaWtagatatcYBttaattactcaaaVattYRWtatttDtaNMYMttgattataat
+gcgNggWaatYagttgBagNcaagaaaDtRgtaaaagctgcatctagcttaVgtBttata
+gcKMSaattYtHcMaBttcagtcttgKatgVSVttKgttttttagtgtDHgNggtcaVta
+tttaacNtgaatatgctatMcatgaaaBtgBSaWctaataaattatYttagtaDtaccgg
+aatgagtaattggatttaacBtctSMgWYtgKgattacgRctctccaatgtaggcctgaN
+aatScgYataaBBacaKtHtttcatgaaHtgBtagaKHVtacctVtcaaccaDaaWNHNa
+atgataattgatgWcagggtcMBtgSgRataHctMctgMHHtKaBtaaMtMgataaRWta
+gYtgaaMaSgctYtgcgaaHatDtatgtcWRatKatatYDcBgNtRaRacattMcagaHg
+aaagRccgcgWttggSatBagagcHgYtatctVtcatYaaVRtcaSacaMYDcgRtcaaW
+gaRgataMtaaaacaggtgtaaYcattgWgDHcWgttaVatttgcatctaatccacaaag
+aagSatgcgtagRgagtHDgaVcgtgcttatggMttttcatKSctNacHcctMaKRattt
+gatctaaatgHaaScataataatgtttgtgtHaVcaaaaNHaaaatcgctgSVtattVtt
+agaaNWcacagtgKtatgattHcYcttgDaWVataBatBttttWtaactNaattttcttt
+aaYHaMtttaaaccgStcHaVBaatcRacaaWactgtagVKtNRtcctagcWaatNgctK
+ccttctcDaBDcatYHatatgcaataaBaagaatgDMttaHcaaYYtcactgttRtgacR
+aacctaWtBtBMagBctaaBaWtgatgVtttattataggttaattgtaatYcaRtVctct
+tgcacSaaMaatactRSgcataKcagcaVNKttcgSatcaaactaattDtaHtNaVtgtt
+ttttaWVtatNccagWttcgtatBcgttVctcBttaaaaMSaDattKRcctttcataHaa
+ttaatWaaataKcaHVaggaatataBYKHVtgVcVgtcHcttccgcctattDtMMgWaac
+ttgWttYtttcMcgtcctaaVHtgWtggtgacKtcaWaYMttacttagVWtacgSatatc
+gWcKaaatHKaaaYttgtagtcaacWtttggtcaagttgaaBBaSHacVcgYgttWBSRW
+ggtattttaYDtHatattcgatNttacaaaaVacaMccaaYStaataRttVtcttagaVK
+aacaWcgccgtRatcatctaaatccMcctttaMggccHgYcDgaKctatgMRYBagcaND
+tgMtcRttgtgHaRttacatgaWcDtgctgtataggNggtgaatagBgagYNtatcagKt
+HcatBatgVKgaHWagattRDatatcgYcHagRtaatgWtcStagcVatNaaaaKttgRa
+RBYNgtaaDtStaVRgcMccatMWaaattBDatttaatttataaHtagtVVaDRMKBtaa
+caatttttttDaRSgaaKDtVaBatcagtaaMttaagcctRgaNVgggttcataatagNa
+tcctacactacgcatgtcggaYgtaKcatggattgactttHtaattWNRaaWYggttcaa
+aggaaNtaatgcHcaaaattBtagcttattcaagVtatttWgcctaKtatBttDYcatta
+gDacKVaYNccgYaYRaaMaattRaagaHtatgcttgcRagcgctSaatagaaRacaRac
+SccagcacVMataatHgRtagcgaKgYRaDcVWSDVgRaMgcDgtaattttaYttggtaa
+WcttKDaaYtatMRcgKccYcagtYcBgRccattcaKtgaSSRtactgacgHtgtaaaaB
+atWgcaMcBcYcgccagactcttcSatYattgatgaNccaaaaWaKatVgcaggtWtBcg
+ttaRMagcaaagtgttcacatataaagaHWtKatctacttatatcacYRaaVagataagt
+aattttgatgtBctaataggtaRtaaHaattgtaRcStYSYaWRgMtacaHcNSttVNSc
+attNKaaKgBtagtgatYcaaaStactggttggggaBggtNtgtcaaWBaYVSNgtaata
+BNtagtatatcacMcScccVcgtVRRtttNcKaSRNaNtHRttatttattgacaatggSa
+BagataaccgttcctaDNaattgctVtatNtHtatagSccaagctKttaaacaaattatt
+gtSHgMWgStttNaccattBMYatRtccStNgttgaaBcctVagcaaaatgatattcRaB
+ccMWaagKtttttcMtgaRYNaataDttgttWRttattggHtNtataatggttgtStYga
+McYVtcattaggtaatVcaNggaRtNataMWcctcYgcgagagRgcHMgcWtgaYtVStt
+gDaacgaaaatMttYWtWttcctgaKNttatttattRaattaagaccMKtttcWgtcaBa
+gKSaWaaacaNtaYaDtBNaaagWtHgacaaagtgVtcatKcgcaatVaactatgcgaaa
+ctccNctatatMgactatttatSaaVttNttRttagHtccKtHtaaaNatttYVctaatt
+taaaatHWaNtSacgaaaHggaaatcacagVYcctaattcMNtgtYtgagttatttaBtc
+RgBHNacBtactctagaacgcKaaDWYYgcattactVagaYtgaVVcgcaNctttBagKR
+cSgaaatttgtatccattgtggHcaatRtaVtaSaBtcYYcatcgtgtcHaVttaHattc
+tgtcaBSNYaKBBattaatggctgtHatattgtBacDcBgatttaaaNtggaaaaYtNca
+KagRRtRgttRtMtWgggatcNtacacctgtWKagatataaYVMtaaDtaaacctctgtg
+tgccttScacWaggaYacttttKacgtttgtgataKYagaYaVatcWcSattaMcatBYt
+tYaaatgStKagWattKtttaWgtagaaSgtRattcSaDagVaMattattYaagccSgcN
+aaDgaaSaggtaNgtWactaWcgHctgaNatttttcaatgtaMHSWaRtggtaNtaHBtt
+tWWaaatattcVtBtctStWtaWMaBcatttcDagttDtttatatgttWBtNaYatcccS
+gtgagcgaRYtBtagaDacBtaagaataWactaaaagKtaKaWaataacKcccgDtagcc
+aaagcggaatcgctSRtacKgcactacccHaactMgtgccaBaRaaaBVtcgSacRKttt
+StgatcaaHgKtaaKaccHaccacccKttgagcttcSttttKKcgacBgggtYMaatcBS
+tcgDBtMcataWtaWaMtgaataagaaDatccSYDtgBatgactBaVtaagatctcNMgt
+caWKtgcWggcgatacgtgtttatttWaDaNWBNaaNtNttcaaatagtaatScgHtMWt
+tgttgaBaDtgNatSaagtttHttaNaNKaattKatttgatcgtVcatgaatatBtttct
+aacKaNttVttSagccatRtatatcactcHHatctWSKttaMacaaDattccaRaYtttt
+agttaatattcctYaacVactgctMcgagcaMYtttgaagctagtKgNWttgaaaMatca
+McttcSVatcaatgtNactaaBagatagagtDMgtNtNWatttSaHactagaaaDggtaa
+aaNctMaatagtaHgacgMaaacMtacatHtaSagaHatYDccagtBtgaWatcYtVaag
+ataattgatcgacctgcaacgttttattacNMWNcattataDVDactatattatYatttt
+gcgaagtgagYVtagYaWaHaatctgWttttatgcHaacgttaccDaKtatagaccaDDt
+taacgtHBaacatccgtYaBtVtNccaaataaaatVactDttSKtcMtDSgaagctaMta
+tattgattactgtNaagNBcagHaDattaaaWttacacaaatactcaatSDatagctcaD
+ttWactttgaStaaDtagatSaaDtgtaatKtgVataggaagWSaaaaKatttaaagttt
+gcgtaaagcccggNWaacatacatgttctaRcaHttVtcattatctagttttNcataaac
+DttWaagVtNYtaggctttggtatgagaWgtactNaVatcactVttBKcttaaccttcMt
+atcggtaataYaMaYggttgtcaaagSWHctaRMSatVcggactMatatccgaatctttt
+ttcgagtccagtttgaMtcgcatcaaKagtattRMaaaKDBttDNccatttttaaBNtVt
+ccgtaatgaKgtcagMVSattatttaWaattttaHNcaaMaHttgtggctattctacDtg
+aagattatcgacaaVRHttcSaSaatactNHWaaNcgtWaWgaccgRSttNtHtcttcKa
+tYatatBaagtcgctBtgagccatatScctKaagaaKDaWactWagBgctgattBagKtg
+aaataBaaaaagSacScaaagagtagcgaDaYtaMcaYcKtaataMatttttaactttgY
+gtcgaaggacgcHctBcgYgaaVacRYagagBaaYgtagattgcgagtcaagtStDagat
+BgtgaccctaSWtctDgactaSHttctWatWttctaWtatctYacactgBWatKKctgta
+tYgacaaHSatYSaNgSagtatagatgagtatttatgaccMaatgtaHtStaWttgYagc
+caWattcagtBaYtaaNaBtaNatactggcttWcaagatDctacggaNctatcacatSgK
+gattgacgacccccgagtNDtattgagaaatattaatcVttNKtaaWtYacgSNcBHgtt
+gWtatgtttcgccaactKaattaRgacgNataatctacaacKgttBatYatNMSaaaNtc
+tKgacttatgcttatKtcaVtVcagDaataattYgNtRtHaagcaataHcacaVgtaNNH
+tHDatgttaMNtggWagSVaRttcMVDtcttWgtRttctacKaaVttcVcgcatcctHRK
+tattSgttSacgaagtcccRDVaacBWagtgYtKtgattgSgaBtgccBtcaKacaData
+cttHatcattNatttacgtcagtgaggcBtaRNaRcaSgcatattatStatgctYcacgt
+attcattaaRtgStcttWgtattKtSYttNaHaRtNYcRaYtVtggtDcKcttctactaM
+cacggcMtacgcttctatatHtaatggcattMDtaaMaKattgaagtBaaKMVMNacKaD
+tttKNcgagctaaagtccMMtgagaagVaataatggcaWaaaaVaBgtaSaVgaaaSaaa
+ataDttVtBccaNagcSBgaMaDaVaVYYRVBgttYMtagtaactDtaagWaattBtatt
+ttMDYHtSaStScRaKatattacacctMttgNBKtcRtRggNagtYMattaaatMctYga
+atgcKHagSggaaaaBcaggtHtatWcatcgtStagMcctcatgattaWRcStcgWtgRg
+ttttcctaacatcgctcgDDtRaatatMgtcMtHtMaDYatgDatttatagctKDtYHaa
+aaattaSatatctggtctttattttatMtgtYttgtcatactcaaVcYBgatgSctKtYc
+ctWaRaataWcMgNgcgggagtcttRMgactataHaHtgctNtVaatcaaccacgSRaDt
+gKtaaMSKgtaaaaWaKtttVagSDtaaaaaatgttYattttNagMHaaRtNgBttWatt
+atatgcttatatcatttatKtKaaaagctRaaatcgcYgacgNtacNtccVtSaaatttc
+DVctaatacWgcaMtcttSaaWaaaWagtagtaattaactagRttaVcSaaatataacHg
+HatWaattggaagtgcgSSgaaVtgYgSttccatWVataatcgaatatgHtRcgtBttct
+taaggatatgttgtBcNtaatgtcacVatactgaaatMBttRRcRatccatagagggaca
+tcgccWttagttgWttatKagtaaaagHtttccttSatVatKtgagcaatttattaaYVa
+ttcaaattctgSattRaMtgaatMgttattattacaNcggVagccttaaKgccYcaaDat
+tWtggMcttMacWttccMVgtgaattctDaBYgacttKYtBacatgctDcRaaKaaRaat
+atctttagKcKtaactttaatNaaggctgScacctYgcgcaaaccaHttVHcBaDgtaat
+HaHVaaatMgttggtSatHtNNaaVagtgtacaataaagacgKttcaaaWVacagctcac
+WHaatcctgtBNWtaNMKcVcVSWtSgcaattctgKtVVaaacaRaattgatRcgBacaK
+acVccVMactagcgMNaaactgataDaSgagaatVHaatVSVtccggatgRgtagRattt
+gtaactaBataVaggcaagHgaaSMSaKgctRagcStNcatttVgctatacttcNDtcaK
+BDcaHtDcaatagttHttattMBgagctgtaaagtMgatStStcagatatYcBtataacR
+caggRaaaggtaWSatKgatatgagcgtgMYatcagcatVttSgaaaaaatatatgttYt
+tcattatacataatVcacgattataDggttBtRaagtHMtatagaDgNttggDaKctBca
+aRcgattcgtgccttacaaaWattYWVcaaWagDattgaaagggaagaHattBtatVggt
+aHtWtaMagtccagaKttSatatcaStDtgWaagtKWaggtatttaWaaRcattaatStg
+aaVtacggaacatKctacatHtaaaBtcNWatttBBaNatRcDattcgaactataaatta
+taactcagtSgatataagRaYaKHctggtaaNtttaaNgaRHtttattatacNttttaDc
+cttYgtaaacaggaagtgataaacatBgaSgtaaaaaaVcBgtWNtRMttBttaaBgtaa
+aatatcHNStaBtaggtaVatYaccNtBaWagRctNSacRtMatDactStVctaaDtaYS
+RgttaRNttttKggccagaaBcatagtYcaYNtDatcgtatVcaatWRtaggaattMcat
+RtgggatgtcMggMtttataagtaBgtggacNaaKYtgctWgagYtWcctWtVcttaaac
+taRacatggtRcatctSDcHcMgcaactttttagttaccttattHRgtacggcactDBgg
+tMHcVaaRatKctSHacctacaccactaaHaacgSttagKtKttttgNHVgagtaYaMtV
+YNVcggttaSBaBtaatttSRcgtBgaWaatctttttKggacaWKaattKSaccttgDRg
+tcatatDatVMtMaVcgaattaNaagMWccctaaHgataatatgtattWataaaatBaaM
+tgRttcHctaagctaagatatattMcggactaRttttKaSttactWYtgBcaMMacRRgN
+tactttaaaSKtttcaYBaBttaVagtRtHcWaggaVccttNgtgagtcatataWttYSc
+MtWgVRgattWtaSggacggWWctBHatattataaKaagttactaMRaaataSRaDttDa
+aatataVHaatggaaBDgWgHtcKStVcatHtaatcatggBWaagHtagtMtgHcHtcat
+ggggWcatacaHNHagcDatRcaaattcgcttgDggDNVcaacgSgtggcaccttMttaa
+tattVYtVgaagRttaBcagVaYaHcaRDBagatgaVHtNMtcttactDaggMgMaattR
+WDcctVtgagaaaaSKatHHttVDgtctgtcacatHNttgaatSaagtKBatatagacaa
+RVctcWtgtacKtaacHtgHataSgVtactaggtttatggBgtcaaaYaDgaaaaaatcg
+MtagaKaYatgaattatYcttKtacaatttgWttMaatBgaatSttMtNaVgVtScgctt
+ctBHKgtaRcNBaatcDtacgattgacgtgctatNaaBtMgagNgKcttWcWKacactYg
+ttVgNcgaattttcttgaaaaactacccctcgcNtgMctatcccacMcactcMatttatt
+tagtagaacMNtttcttgYKaWtaaBtttcWttagHtgtttctcttgtggctatgDgcta
+atWDataatttagaNcgcRRNataKtctaataHgaaMYctNaKWtactaacDtgaVcgag
+aactggtaccaactHgaggctagagHHagtMgKtaaactacaggMatgtYgSBaKaaaat
+tMgatRtggggtHBVgttaattgKttaaRDacgMactcaaacStaaagctctgtgccttc
+gtSagtSaRctacaataKatattctaVgtgtaattRacKagttattgaMtaatgaNatac
+DataaggactttccNtStatatKaagaataKtatggtcctctatgaggttaaDtgtattg
+ataaaactggatcactKBtttggcgtcaaagaaaNtagtWKatctaaWBactDaBaYtac
+aWtaSgcaattattWgaaBgactgaKctatBRgtagttaBaRRgatttaagBHctStgtV
+YRtaaataaagtMWtcHgcattcacaaMWtcMccWttgVgcHaWttcaNtgtVaggNgcV
+atKttataaWDcccctatgatVttttattacagRBBWttcttRaWgaatBVgcgtHgWga
+ccagtYacaattgSttaaMcVtDatttaVttRgttKtcaYWatKtaaDtttWaYtaatYc
+tSctatagtcctBtccMaMMtaMYHaSSgKaaacttctcBtMtgDtgtttttagRcgtac
+ttataHgKtNtMtKcBtaNKaHStgSagYHtataDtcKtagRtNWaacVgctVtRtttSt
+NtgaaccttaVatgagaaggtcaKSttaDataagcYaSatNStcaatDNgttcgacaatt
+taSgaRaBNNacattRatNtgSttHVtgWHgtSHccaactKttYtatHYttVtgHcNgac
+tMcaacttBatatgSgattttacgtatttgtggtScaacggYtHtgcatctatttttWta
+SatcagaYatcgcagtgtgtMgtattctttcattaRatttStcaatatgcttDtStaaag
+accDcVtaWNcHYtWMaMcgaacKcaNcttacctaBtgcDacatcaHKtRcDaaacataa
+RacNNtccDataNactttatBSDYatDtctBtaBatctDatKaMcattMatatcDHctaa
+gRgYVcatgttcgtgataHDYaagttSgHYctaaatgtaaaactNgtagaaactaattRa
+atcttttBKcgaatSctMaggVaVaaatgagataaataSgttKgtcatKaKatDYtaaaR
+ttYaMtgctcSatRtagttttagcaaNtaKgatcgWYcacDgaatcaatactgBgaNtaa
+ctaaWatatacaatacactaNatcaVaKaaMaaaaaatcaccBtgttgNctaacaBattt
+taaKWcaggataWMtaattgtaaHtgVtcgaHtScaHtctcHacVatagtaMcaaKtccc
+SagMYtWcaaatHHtaagRttDagtMtcYtttaaWWaaaVaRtcHNtctcSttagcacaK
+ttgtagtNgWYtatKDtcatttgaacctcKHtatccttattcttNggtBgtgtKaggWtY
+gtStgtVaRtaRaaagtagtgtcgcKtKagatgagYtttaatKcScctgaaaaaRaaHtt
+tttaaaVgtatagKctaNtKaSVgttcgagacattttRSatagttSacataMtaYHccac
+ttttctatactagtatgaBaagctttaMtgaatgtcaKYtaaatatggattataNcgBHa
+tcctaRaaactgttgacttYaHtStcatcctDaMBttgtaWgagtaatWKataaaBgBat
+tcttttctttaatWStaatacgNaagtWaMaaNgactMtgaaDaggaaaSctaSSgatat
+DttattatcatagBcaataVcHcRgcStaHaaatWagatHttMHactaRacttaYaaaaN
+tataHKVaataKtatgatcgtcVaaWgttYtVcaaYggctRWttaaKtRttDaKtgtatc
+aattWKaatBHaaaaNgaatggStHgVVgatMgBYtaRNgBDttMcNtggaNgtcaHtgt
+tDcNaggBtatYtacVaNttctcWtactHYcSctgtYtDtgWaatcHgatDatatcHtct
+tatattaaKaRYaDgaatgSYcgactgcRgaagttagtStYatYtttccgacactacagK
+caaagDttaatVatcttaaacRaDatRcBatKNtNtaaaHtcBgatKHcWStSRaKaSMg
+taKaBacWgDDttgYaaYttaNtDgHtatSaSataaaaMBaaDtaMatDaagWtggaMtR
+cacttatggctNataaaaatatWNMtacctatgtcaYKaRacagttHDagccgtaaYcaa
+tataatcatagggaaSatgMYBcKBBtaaRVRatRtccVtgtgaagVNttcttagtgtcW
+ataVggtaaNaatVgVaKctttNgtttagtaaagBatBtgaYSagHttSYaacaStcgca
+gaSttcDBtKtttggtctacNttgNgKNNtcaaaaKWactgaaYgaYactatHtaWcaac
+tgttSatNVtgtctSttYctgattVaatKgtaYcaaattSgttaStatggtccaatgSWc
+caaactattgccgttacgcNatcHctctcaKatgtagtctattttaaggHRatcDaagSa
+VgaVNccaBKtacgtttStagKgtctaHtcattaYcctaVKtttaYaaatYtccgataaa
+VttcDgatWcgBtcctaatttNaattgctDYgtgatcaatttaagggctctcatcKattg
+BtaBagcaYcKctctttNtaacHacNStggRtMatHHgtacatgcaMagtgtccatRWtt
+RKctaaaDtcMctttaNVgaNtcMatcacHcctgWtaaStcacgtctNaagRNNaagMaD
+tactDgctttttcatcYacttaKttatgcStDaStNaMgDtaacKtMtacctaaWattgg
+tttNaaVHatgaaattaattacgVNaaWtggaWatctgVatcacYctcVHMtVaNacNtc
+ccaWtttgcaacctcWctHaatcttWcaaaYaBaattSctYatctaagDgBttagtaSga
+WtBcRcKtccYatatcKBgtctttatgaaHDcgNaMatggatgtWagRctStagagaaga
+acagctWtNtataaaataRatHatKgctNactHgttRgRgVcRacatgHYaNttaHtatt
+aNStaagatgtagaHcVctcYgggccYcaaaatgatcttctagctctHMaMMgcaVtgHg
+taagaWHHtggtaactBcaMNNctagaacggWtctttgaggHcYNaaMHtaYcttKaagt
+SccgttgggNMStatacDttataaaVaYcKtcgcattttcgacctctcacVttNtttatt
+gtcttctaVcatagaattMttgtHtMgacataaatagttctMtgtWgWctttcaagYgcg
+tNaagcaaDaVHaaStMtaaagccccgtgVgtcacatcHVaDtgttBtBacBtcggYttD
+agaDYtccMttagcttacNcgaagatRtDataRtgctaatatatgRtWVttatWKtgcBg
+actcgagaSgtaaaaagttaaWaaagtatttctcWtatcBtcataacNcgctcRKaaDKa
+ctRaNtagtatBtgaaatttcgcDactttaNtYgagagaNttgaattaataaaSMattRH
+NtYtgttgaDBRBttgWttagSatgacDggNVagRWcggctacDaYSgaaattHgtYaaa
+gctccVtatacattaMctttgSgacatBKaattRgtaBRtttaactattctagcMKMttt
+ctgtgtgVgtctttcDcgtaaMtaggtaaaDtcaYtatccgattcYtgaaRttctKaNct
+aYgYaattYgRttWctWttaaaccaatcactVatgcgYttgaaatgatKBcNRgctcatg
+accHagcgaaaatgtVgccatcaBSatKccRStSattaaatttggtaagcVattctgVca
+ttMtacatMgaaaaaataYNDtDaatcatWattcaggNcaccctcBtgcKcHagYtatBa
+tgBttgtVttaYBgBgataaHNtacRtcaaBaKcagNtcagaatYgttWgggaNDagtat
+agRtctcDtDaHScagttcYcatcSYacHcagagNgtgcHagtacagctgRtatatMtaa
+tRaWMHgaaKacaBRtagHtaaaNcVHcatWBgWaaacWccggtaaRcattgMgttaNgt
+tVMVttgcaagagaatcaaaaaagYScKVtgccgacHgacgttcaMcctcattatgcBtt
+ttaagtKatDactccgBatHYgttcatcgaaatctSaKaagaatWVtcgttgtcttaMaa
+YaSDtaaaataccgcKMtatgKtgScaaDMaaaactgtgagcVtttaRcttgtaNMatat
+atttggtMgYVatDaatttgctttaaRtaBgttaYaaagKtataMtWStcHaaaaNacgc
+tacMttDDgactacaNaatBcagtcattatatSttaVgRtWgSggcaatSataVgSYgct
+BttataaYRRgaactgtgHtgacHWSactYNgtttBactatWStaNtcStcMttgattSt
+acctgaattctWatNaaHgMatattcaaaKWaBaataatHKgaWgataYcaWMBtgtacK
+agaaaaagaattttWttDaMtggttgtgaNMtVtDcaacNttactattacggKctattta
+aaaBKatagttHaatggaatatYWgtaVtNaaYgataatMaccWagagatRttMtgKaMc
+gatattaacaagatgttBBcNaYattcNgtRttgaBcctaagaSMttcMtcctcYattca
+NaRBttaatgVcMNgaacKagatcgNctaWVgttaaYRtgctSctaaaaNtttgctaaSc
+ttcVattaHtaaMacNgttNtKHMcctattttaRtttVtSgtacatBgtVaaSSaMVaRB
+caSaRHtaWtWHttMtattVcaMtWaaaNaccccgHYtcatagaaRtaaBaatttaBcca
+atcRctcatagWgcBHRtacaaDttcBgaHggcgctaHtgacagcSNattcctcgagacc
+BggtcaagWctgVcRDgVtaagtttaattatcMtgatNagYttHtYtagccRatagDtaa
+tcNtaKtacaMSgDaaaatttgHaHtRDgtaattKtaMHgaBcaWtBNYaWgtttSttta
+SttgataatgactMKatHBtttaVcYatgggttttaDKcSatttMatatcagtYaBtgVa
+caatHcaDMcccgtaataatagDataatVaaagaagaVtctccgaRgtRtaatcgagtca
+cttgttSatgNDHaSNRcggtaSaagcSaBgWSgcatcaaWatgttacatgattcWacMt
+agtgNcacgatgatttttRcWttSgtaatMRRBaacNWRHaaBaattDaagStgatcctt
+caDacccctKaagScSSHaaYHWcHcaWcaaaMBataattgDtagccWtcRHataMNKtM
+gHaBcatcgaagtgtaRgtgggaVMatgttaWRtStBHactaaRaactNctcHaaaggca
+tgcVHKHgaatcSccttggSaWatWtNcaaBctaRagaaacacgcttcKatRattcWtgY
+DaaaaaaNatWtKgaacgtNttactgWHBaccaWacggttcaaVgagaaacVtMttatag
+aagtatWtaaaNHYaMacagWagtaatttgcatcttcgaatacggaHtaatVattctaDa
+HtRKRaNHcttacatcDKttMDKaWggDtaatcttYctcWtRaaaaKtaatcctgcccca
+tgcgDtctaaVMtWRKKDctaatatDgactagWtaaaBcKcacMactMHHttgDataKHD
+aDttHttatttagtcaaVatccKWtacWtSVcaggtaatatDSatgcctKtatDtttaga
+cKaaaagcgtttaaSaaaYtgattgtKtgBMcKttgDaaaagttBRatHgcaKgDgtgcW
+ataatMWgcVaVatcYgWttaDatcatNaVgtttgggcttgaHRDaWgatttctgMHgtV
+tgccttBtWtaatcgttcgKgRcaBaRMtaattWgctaatMaVBccaHtDagaBNaataR
+cacYcYcHcatBgaNtgaNgKHttctYaacaaaYgBttRNtNggaagcWtDggattgagt
+HaWttVacaaaBtgttaNctaatactKaMaaaaaDtaRatttDaaagNttcYcaaactcM
+gaYgtacaaatMaaatYtcacVaacgaaDagatWgBgaataggtWtKaaMtgDttHtgag
+ttaatttgVaaDagttNMataatttaSVattNaDtKVccaaatcgaYVtaaaacKRaata
+atgaBDtctRtgVcttatttYtgaHgttBWatgaatatacSaacctSatNNRccagtact
+KagaRtgSKMcgaaDattttagtHcKcaaagtggtataaaggctcctaSatHtaMtRKat
+taNRcWtccgctataKggatWttaggtaatHDRatttattRWgcgatcttagSgtcttac
+tatgYgttYaVBtgcaYaaRtDaatacHHtDcttHgBgNcccataDtaaaaatctNtaca
+tatWaRMBgaattaaaacgctctctcaagtKcacNacgVRVctttttaacttgctcStat
+RScaRaMataNaKagtatcattRttNaVatcKgtacNatttttgaNcgacaaKctHWtga
+KStacMaBatgWttNSacaaKcaDaatcWaKaccgYBggMScgaMcctagcaDatgtttc
+VatgtRBtKNWHtcctWDtatttttNNSaatattcMttgatKgNgaNBatcSggtctRct
+tttttatatggtNttDYNYgaaaKctcacacYHRgttacatacttYacaataNaagaaaa
+gttataNaataSatacagttScacVaScaccSWtccagKHtaatcaaatVacatWacgBc
+tccaataHaaYtMtacKacHttttKtcataWWtgtgaatWaataaaaacatttcacctta
+HtttgttccaatcccgRBaWgatKgagtttBaVgaNtaNVBgcaataagaatagcaKRtt
+gtatcaattaMtaacatataDBgtaaNttcaNcgagatYactggttatgtNVtaBNtDaa
+DtDttaSaWtactaVtHactttNttcttcatWttcDatKaacgtttggVDaDtVagttat
+gtcagactKaatcaYtSgttttataaataDttKttKagacWgHgatataaatcttagatN
+KtttWtWaaatattacSHaRgtttScttaatWttacgRRaaMactcatBacaccatRttt
+gaacctacttcDMggcVaSBagaatcttaKMagcaVtctDVataWtSgatagacttBctD
+tBNWgtgKatWctYgaaStccgVaaaDattYatagtatcaacBaWYctgaaatttaKVgY
+tStNtcaVggtggaNYgaRtMaacataSttcagacVactcaVaagtggtattaaDBNDaa
+gtatatMtactatatgatRSgtttgccaacgcacRMtacRYNataagatcMgttgatcat
+aaacttVcatatgWtacaaaWttggaaactttaScataactRattMtDacVYataaaagM
+aattttKtgaBttKcaacatattVtagtcatgactcgDaacDtaWctatRttSSYNtgWa
+ScaaataagaaatKtagacataatggNaatttcSKtVWtgacagKWattcgVatttcKWg
+agcaWgNKaaaatatgtaaacgttcactaaWgacaccBNaacagaaStctgctaHcVttt
+MtcYttStagYcgtttBcRtaYacttgNaacMtDRtagcatgtgcgagcScaMgtaatBa
+KataactMttttattaRcattattatacgtaagSNatVRgcttcgaVaacHNtctaHBKY
+gKaccYcttagagcccaVgatttgttagactaaacgtgcaBgccaWgaVataggattDBW
+aattttgtBacWtttttaatDtMgaactaagcVtctcagBMKatgattgaNaVttggatD
+aSaBatttcgccatatgctaattgYacatgatccacaaMHtttcKYKaWtYcgDtNaaDc
+cgNaNcacacHKttDtttaggctagRVtYgtaactagctttcacaaatYtHaattYacaa
+ttaMSagMactcctcatgtScttcaaYtataaaaScHYaKcaYacactVcacataNtaBc
+aRatgYagVBatttgtaactttgRggacaagcVacctattacRcaaMacHRagagtaVNc
+tacagtgagacgaaaggKttacattgggacaataKNtattcaagWKttgatNagNtgcta
+NgagatNacSatctNatttatctatRgaaaatKatNKSBcKactatacStcagtaggtVt
+caaaBYYgctattKtWNttcRacaaaNatgaacttaRtaaDSttVBYtaatccagtNaaa
+cRttagaaccRBatataWaatKctcattcSacWaacaacactDttVttgacYaagagtaS
+gcMttBttaVNgRVagKDcttcttcNtaggttgcgacYacttaaggVHcaagDagaagat
+aaVaatctgtatRatDtKaaSDgattcaattYtcatgYgtgaVMtMaactaagaatgRgD
+tHttaaccaatStaaaaMctVDDtgttatcttaBBgccNacKMaHggcBMttctgNctHg
+gagaataYMgtaMccaataattHttYttKggtKaccaactcccHtMSaatNactcRtttc
+atgcKcatgcacttcatSaatatactttVtaYttDattgWcctcactcYccattaDDaHa
+aKcaatSttagKtWtcatRcaactattaattYaDggKtagtNcgSgtttKRgtDWtVHtD
+NcHWNtKtccgtctagtatSctaBcacgcaBtaacatgagatVtttaaggcaVttBttaS
+tWtattgYaggtSatBMBDactVtggttDagacataaactactBgcacaacMaagaStcc
+aWNaaSYMYtgtaKaMcYSaHaaaatatttMgtcaaDScaKtcaBVtaMVMRRDMtcttR
+BgWctaacttgaacNaatgttWgtggBtRttHVKgKcHVtatattSaaaatBttcBtttc
+DgHccBagtRBRttaVagBctRcaagcattacKccaWVWtaVcggttatNaSgccgKtYc
+BaagcWgcatgaNHaKtagNgcHcgtgtcataaaatagagacttgHYatattctaBgttt
+atRatctatttagacattttNtWaaSagtaHatRtctcggatttatgtgatBtctRgggg
+catWctaSVMaRtcatgKattgRcatMaHaataNcBcDcaggcactattHBgaatStata
+ttcatBgMVataaSacVacKHatggttaaBKtgtaSaWMattttMacKtgaaWaaWgctg
+RatgtgDacBtSaHtDgtgtMVttagatgattagagaSttgattgtSaaacagHaaatac
+aRcaccBtaaDtcaMtKaaStttatKagaataaNcaaBtattKaVNaWaNactagtYatt
+aaagWgHttaMcKaSagatSactctatMSagtggaYctcacKKgaSMgcRgKtgccagNM
+ataatccaVgatcttHagttttcttaaccataggggcttaDtYatcgaaaMataagcaaa
+tBttgHHcHagacagagaggcacWtacccMttacgtgNttattYctVaaactgttaagtK
+atMagttcacaaagggatgaVNMatgcaSattatcKagtHaBtgaagBcggagtWttVaa
+DaccMScactgVatccaRaSatattNtgcBatgBaaNgtcaBMgggaatgagtatRgaat
+gtNttacaggcttaHaataaHSagatagtgVctattaaagggaagDWVccatcKaaaatR
+ccccaSVaaatttMtatStgtWagtStMaaatBctgcctKWgttDDaSKactctaaVRta
+SWcVactggaaaaNMaaaccgcacNtaVgaagcttDNgaDBtaMaMKNtKccaVtgctct
+tMMYaaaaHaattcWgHcgtacatWaMaaKtaataccgBDaYRaggatatSKcScYagMt
+aatKHMtaaccatgHgtagDaggtgtaaatatagaKVgccRYctcRaKBKWtgatHYcaH
+gBaYtttMcatataatgaDttcatttaStgtcVSgacggtggVgtBtgacatgtaaSgtB
+gatKtKtaYcatVtNattataaaHaSccHaaagctSMKattcatagcacagtgBRataac
+aatMttKcWaaaaatagStcggRttaattatWaataatMaYagatgVtatccttttHaSc
+gtBgagWcatgBtgcctatcgtaaWHacagtactgaattaaaaaNattRNMaSSNSctat
+tcaaagccVVcatattttagMcgtattNtVBactacScattgKVtataaKtttgNaWctt
+NacctagtgaNaaDcagtaWgKggaaKtacgcaaaYttatacSttgYaYttcDNagggtt
+VDagHatSgtacYVatataVattataSataacgKgatVtVacHYRWttatcctaaDtgta
+aDgRDttttattWtaaDttggatcattNgtVaaaVggaaggcYgSWaaattcWHcgaSaV
+WaMatctMDtHBgttttaatctaWaagatatDKtVttaccgaMatRaaaBttaNagHatD
+HWcDtBVttaatKtMataYttSRHHcgtaHDtggttccaaagRRtaWtVctRcaNDttat
+acgatMcaatNHtacgaattBaatHtcccatctctccBtgtataYctatgtcgaaDYWtN
+ggatNcacRtMaatNtKcttSYSctaDaaaggctDaStatKtataBgcVaatttggYctt
+aaatgatgtHctaaccaactttgggttcMaaDattatKtVacgVcScaactSataSccHt
+tYctttgtggcDtMcactaNSBtMRBMaggttWKtattaatgtKHacttcaMVatctgtt
+gtccaaYNtaagttKaacttctHcgcWtYttatMBgBaMacaattaDaactNaaatSatc
+VtSSgatctatgNatSYaattRatgcDgtctataagagaagRgatatttcccaataHgtt
+ttWKtgaagNRtctaaBtWcHHcDgaattgaaaKtgttaaRtatgtaMaggDttcMacca
+MaattDctgYctaWtStaNtgRKaBtNcMHcSttMtaKccYacgNNctttatStgVtaYt
+aagttaagaBHaaStVKHatgttRVWtataMtSatgcaattcMcttatKgMcagtgaatc
+YtcctNaYcttactttctcttcatggcgNcatScStBtagctWtHaaWattaccgtctcg
+tBMcaaacKctcccaacttBgtWStVttMRgKcVagHttVtaagMaNatcaHttacatcY
+KttDBtatgSattVcgBcBVYttHNtcatKgcYgaaSaKtatttttMtctatctaSaatt
+DttcWagHSacgttagYgacWaSaDKatcNgctaatgVSctgctYgaKgKtaataggtgg
+agcgtcgaaaaRYtgYWYSaatacBgacWtaNStcaattWtRcttttaaSYgttcNgtBW
+WgtgaatHttttBaMcMtKccagtattttcgaHaDtSVgatgaacatgcacgtcagagDY
+attBcagDctcttNcNtaaaatRctgMcDacaagtttagtcaaSSaagaaacatacaDtc
+tctYgcaaacBcaagaBatgtattgacgagYacBDgttcgtgRtaMgaattttcNtgVct
+tctgtctagtgtccatatctgatYatNtatVWgttacaDacaHDDagWtgataWtatcaa
+BRatDRtMgVcgaaattcSMagYgWacgggtaacaaattcagcatagSgttactBctgSV
+WatYcYgcBWgggRcHtataSaattBcagHgcgcctttKcttWaggctttaaDtRacBac
+taaVaaKtaaacctcgcgccattactKactKSDcgacaVtatataggataKctcgSatgH
+SatVcgtagtgaBtSYtgaBataatStaaccaagttcaDtHtatattaacYatattatcc
+tacgagatcaccgtVSttctYgtcataaVactcgWtaVatttgttggactaaaVcaSaDt
+YcgNtYtctVaMtaattatWRtWcaNtaKcaaYggatgNgaatcaatcRtcgagtHcgVg
+ttataHDcatttaagttctHtcgMRHtaaagaVactBMtatgaagtaaaaaBNtataaNt
+tcKcctaNttaaDtcgMacgDcaMatttgYtaaNtcaccgatgagMtgttaggWcacHtt
+NgtcttHYMcaattKcagttcNcaaaacgNaaSattgKttaaBaKttatttaMggHcttt
+taaRNVgttaYttttMVRtYVgRatKcgVtacgaatttccBatBgYBRtSKKctaaaatg
+atatgBtcttcgtttgacHagtaattatatctgDtBttatgaDtatKtcKRcRttagatt
+attagHgDNaaaKgcgMtHtttKtDtgaaaagtaMatcagaaccgaatKgtatatVaccR
+aKYtDHtcSagtBgtgccWaaaggtYKcaHatDDaaattDStDtcKggtMgcMtgtHtca
+aVcgtttNtagtNtgKgctaDcScgBcWSatgtatagcKgWgttgaacgagtgcgcgtKa
+aaacgRtttccatatatttttMgaKagcVcVRataccWctctcgBcgaggcgttaatgaH
+YtttHtaSWtagcagtttKtYaacaaataMtaNDatRgMBaBacSaataSDctgaactat
+tgataaRtaVtttHatWaacWtVaHaaBDtactYtaDactttSgtKtRattgatttatat
+attattataattBatagattctaacDcRMaaggttcgtcatattRVYcttKgtRcgWaat
+cgaaWWatDctacaaaagaattHaatctgttttacYatKatBaccMaMaaVtcacStaaY
+gYKgtttctcattatattNgSaaHtgRaBtcataKYtHtacttgtacaaaDtYtgatagN
+RcYatgaStaaagactgtcWDtYaatVaNStagaaaWtaaaataDYtcaMatSVBVaaaY
+agaaaattgtgcDagWSaStattttaatNcacgataNBtaattggaatgcMgacattHaa
+ttctctaaMatactaBaaattacaHWgBNtNaaSattttaacHtgtagtBtcRtttSaNN
+aYaMaDtatDtagaKggYgcaaSttgctactDcNRtWgtttaVtggcaaactattgSgaa
+gtattatgDgcgtgtcttagcNtRctKggtMaHgaDaaagtactgtcgatttagatcagN
+ggtaattaKaatgaaYaaHaattggttVaaMggatactctaBgtYHMcttccVcaaWtgt
+tHHRgagttKaaagaBtaRtaaWaggttctatRatSgtatcYtaWcatgtaBtcaatcta
+atRgaYYtWtccattataBacttWtcctaHaaaaggttgacgtRattKgaagcattSBtt
+tctaNcSctSStNtYtWaWtgtagtcttgtctttaagNKgaagacgDaRgtNaBaVDgaa
+ttggaYtaccSVYKctSKKcatagttgSttatcStactcaatSMataHcaKgatWVYtNa
+cagtttBtRagYHaagtaNaaVVDgatattMaagattagcatcctaMaaMctgNtMcSaR
+cgctHMttaattDtttYttcgataaagtMtaagttaWaaDcaatccKgtgMMcatBgtRt
+aHBcttgtBaBggcaDcgaWttgggtaDaggtgatRtYaMWDttatcNtVcttRaKagct
+RgtgcNaatctgattatagattagtatatgaataDNatcYaggKRacaatcaHcaagtta
+gtKgRatRgttaagaaaatacVctaaaagtgtaagKVgcttSWaaHatagHctagtDgDt
+SaVtgatcatttaNKgKHataKBctatatWaNgtttgcRaVNttaDgtcttagHYKatYa
+VaBtaatgaBattaYcNtgcaBtHaacttVtccatDagVaaaYgWtNDBgacagVgctca
+RtaHaaacttttacaaggaSRaaatagaagaatacccVaHatcBRtcttttaaDMHWtHg
+acMtctcaagKDttctgYctctcNagaMgcgaaDWatMcMatatttDctttactaVScta
+gttcaRKWgtttKRaVaaKtacaacaKttatttttggcctataaDgtcBctBDgcYYaat
+NactcaaRgaRWcgattgVNcWaatctgKagDMgctatKttRatcattMaagtctaRaVa
+attKctgaKtatccgaaRatcHMaaaaaagattccacgtacgaDStatatctcataggta
+cgcgatgtgaaggtHYtatWagKVKgaMDcaatttWccttgKgagtctagatgaatgVRc
+ctaMttgtaRaaYtRtaacWgaaaMttatcatNcgttactaaggtDaaggcagtRctcat
+caatggYagccagcgaatatagtgttWtaccaRctagatttDtaaatRcDKtccHtBWgt
+tctWaagccYBSgtggaaagHNttHtctaaattaBatggaDMgaBgatatcaatactcMt
+aaKtcYccgatDaYgHDBaagBattWattgatttttaagaRaaggatggYggaKttaKtB
+VBcttaWcttBtacctYaNYttgctgtBaaMtWtcWaagtaaggWcgMDaaNtccWMWta
+tcMVgaSaRctaKtBgKWDacDgaaaaNgttcaaaaataMcttaWtatgNaVaaRataWt
+gKctRatataagtgttgacgaKgaNgtaHattaaRagSgattctatgtYtcaattagBYB
+atccYtgtNacHagHtacVcVacaacaccgNgBtataYaatWHSttattgctDacttgtg
+HgHcMcHacagctRSDtgattaggaDHtYagatggagWtaMatcRcccacRaaaYagcag
+atgatacatatttVBBcaaMtctctaWgaNtttcctaVcttaYBDBctRgSaagcNgatt
+tcacgtcRDaVBttaRaggtaaggHcacttccgDBKgagaatttataaaMaRattagcVg
+tttacaaagagaaaMtgDtttYttggcttataKaStacaVttBttcttgBcVaataaaga
+gtgagBgcgNcNattgaaacRcactDaaccaatWMtaaHtBgaaacaaccctcMctcaaa
+tctMWttggttttacttagcRtttacatRtccBttVcatgaaBacaYgagHttatWDtcc
+tSatRtYggHtNMttRgNtgcatcacgacagaHgtYaSaactgaaNWVagtagttagaNg
+atctgcatWYaDacataHtaWttaatHaDgactYgttcaSVtttacctaatttaDgRcag
+acaDtgcYVttaagaSSKBYtgHtDtNtcgtcWttDtgtcNtgacKagcactccDMacDN
+cccctWataRKcaaatttctRVaacagcaMtataaattWBctttgKgVcatttaVgtDgt
+atHtgtaSctagtatagcBtBtgtatgtcgcMcgagttctacgaaBgWccgaWatgcaRt
+WtaagYttaNtcWaHtgattYDatWRgRWagtRcHggNatNttWaaacaSgcaatMatga
+cNgggaSatgatttcBHcctaaggWactacagaaaagctMcaaagaYtHVgtaaHKgKat
+tVaWtttcctaWgaKattatgMaattBgaaagtgaSaaaWtSNBtttYataVgNatgaSg
+cBaaccatattcctctagRtattatctttctMtgaRtctcYgaatDtRcHgcRVtWtaac
+DtcacYatRcttNgcgaDtVctWtacHtatatgtatKaaggtaNcataKRaataacacDc
+tcctWgtSaWcatcDgatatBtaatHSNBtcaataaStHtacttaYaDaMtaagMtgNaa
+aaNccccgYWHaatgcBcttaBcgtMBKggccaVgacaWgaaaaaVYcRKctMgcaccWc
+tcSacttcVtacgaagtYtcctttttaYgttattaataactSttRggtcVgagWRStatK
+ataYcaatNMtacttcgcttVBaYRaKttaaYatacagctBgagcttcHcaatBaaaVcg
+ctcacaMgttaHaggctaDtSgatattggggBgRMagtaattggattgYYHtVtcttSRY
+aacttataBtNKgatVaWSDWacatVcttgttgaagScaDaSttcactaattagatKtta
+McHtMgKccaYatKataMcKNgattgtYtaaRHHcaWagctgtgcYatMHaatRDgtgtt
+YctatNKtSDtaKgcBttgagtKtacatgaaggcgMatDaWtcBatagtaaaatNYtSVg
+VatttcaNgRtaRaaNBttggaatVgaaaaagaaggtgNtttVBgccttgtgaBtgMgta
+aacBgtactWgtaacctatatggaSYattYtVgtttaagccaRtatRMcgWMgDVSNgat
+aatBRccNagagStHttBgctaBagatattaacaagaggttttcDaRagtcDgtHttcat
+aagaacaKBttaBgactaRatgaaDYHttgVagcMcBDgYactWgSgacBataMMcttSa
+RHgcagKcgaaYaDgttcataYKcttcMWttattaaBacDcttDtttBcatVggttVHtg
+tMgKcgaaVgtcgMaaHHYBMaHtaaKaDttaNgNtttttaggMcWttNaaaDaaaaact
+RgaatagSVHtaataagttStccaatcHataatacMcattHtacaatttctgatggacat
+atgcaaacaKBatgcagacagVcctccgcaacNatcMaHtcMtaSctgtaYgtStcBtca
+tDacRggttRgagaaHatVcttYWgaDtatgYcaBKgtSWVYtttctWttHtctaYtttt
+aBtcataaNgtBRaNcgttKgtgVKgggVtWatcWagttSttttttaMaRWtccgtttta
+ttaHatttBVtataSctRWtgcMacaattaStBcacggaatRatactVgaagMaaagWac
+aMgctaacaHctHtaatacacgaYagtcttKagcDttaKBHccgtaHaacaKVtcMKcaa
+taaaNaggttSaatcatgaNaaBtacggBcaagatcRgttttHaNgtKctYatBHHtaaa
+DNHtaVtVagttVacKtcYgcattcatacaaagtaacKaKKtaaNtNataaNaaSaBtag
+aattctgacacNtaHtataBDttBctataatagYSctgtaHcgccgaMBaggttaMHtKg
+ttactaaHaacgDatataaagcaWtgaMtttgVatcKaattcgHVNatNgDaaYtataHa
+caaacaagagtatatDStgcNgcRtaaWVVaDStNgtcaaacgDttaaggNttWcaVNac
+cctgaaaMcagVYVaMtBgtatacSacgSgNtaaaDtRaBSaWcNacgYaggtcaYtatt
+agVStaccgatgSStMattctWtattHtHaDtatgYaatattgttttaNggttVatcttR
+cgaNtHaVaStgaagactcacaaatcactgataaKBtNHtttctWWtattgactacNtaW
+atataaaBaatBttgggtatYtttYtgttttVttgagtcVaMVgaatNtaaNgKMaacgt
+aatattKWggcagtgRttgtgacactaaYacactggaaKaWYRgcatgcgttctBcttgg
+tVaaWgtttHagtcaatctcggaNWtaatBNcaMVKStaNcMtgatataatDYMctttcg
+catgcYtHtVNgStggagcBtggMgccctgtgNtVatactgcctcHcataDBtaStgNca
+gaYttaMtcaYtgtagatDaagaHaaaRcRataattcaDtcaDgttgtatRaaaaYaRgt
+ttDBgDcgaagcNttgcVttcacttaMgtMWaYaattcggaDcgaVtYattaBYaaaatt
+aHVttttWaacDttaRaSWactcBgaRctacaVStBaaatRgaacMSaagaatagYtNct
+caatagctNttaVtgctgtttgYcttaatgtgMaStactgDBagVSggtSKMYttDatgt
+MaaSaVtccSRMgaaaactHaatWWtcatttctDgcMcggVtgtRtcatctttNatcaat
+atYaKaaaatKWtDDDaaactaagtacRHtcKttacaataggttWcttataSaYctgctV
+taaVggatcctaHVttgWtgHtWttaDHaNgaccctatatgcWtNttacctaYtttDWtt
+taggHNgccatattacKggattVatatcRcggRWMtgcaVRaaHgtaataattttaggtc
+tcDccaatatgSaaaagatDtaaVtYgNaHBtcaYttaaaaacagatataaagttaaaDW
+ccMHMattggtaaagtccgaKtatDKaVHaBagaBatactataVttDttDaMagctctaa
+DSggtttgaDacacVatcttNtgatKtVaBStatgNtgDKYcaatcataWtcNatYccgR
+tcgBHacaBaatagaVtagcttgaKagcgHtttDNtgaagMttSttttgDDKRWtagtaB
+gtgagtgBcaDtWtaHcctatHatttgttWgagcggDtgtRDRcaaatagcacacRtDgt
+gVaWtaattRacVataBWacSYWVctgYtWDaVtaKataaacttKaaaMVHaaaaKNtaa
+acttgVataaaatMaaatMaagtatcaaRtatSYRtBtaataattgtttgaWtaNNtctc
+aatNaataaaaaaattgaaaattattgtgttaaYatccccHtaNcattcacttttaMgVD
+taDMtcaWSgYWcSYtSgaatHtgctagaVattaBtaaaYgatattcgaaBtgaaDacac
+atRaagcgggagggDMtatDttaatttggaKSNtactRMttactgtBggcgtcatNttct
+attaVacgttccKtVttMacttWtctaYcacgtaVtaaRgKcttggatSYatattttgtt
+acaaMgtgagagaSatattWcagDttggNtNaaYtaggaaKtYHcttgKattWagNgtaa
+gHHVatYatcattaaaaaYtHgttcaaaataattatBgcaKWKtagaatagtatBagaaM
+tattMagaMtHcWgYcacgttagtgtDNggctatNatRcYYHtaacMaSStattRagRcg
+ataaaatWNNatgaaatttVtKcRtKtDtaaMcctccaDRcaHtBSWcYtaKttcacaaM
+aataaMaactccgSgtYattDtaWctagatBtaatSgatgatHKgttgcaaaaagaScHt
+gaaHRDatSagatcBcggcatcatYVaatgMaatStgNgWaaaaMttgcYaaagttSHaY
+gaaatHattBgtaaMRagSaSacBaagtttttcatgttaaYcagYtgKtYctaStcaagc
+gtaVattaNatWtHgtHKNDtcNaKaVaStSacaaStttagaaataatgcDSatgtaKtg
+MMtcaaagtNattacMYgtgctNgVcaaNcDtaaaVtYggtaaaactgcaagaWNcaaac
+ctDSaaSgVaKtctcatataMtggBtaRttKtagRcctgttaHgWRaattgDaaatttHt
+accagctcagaccKaaBctaagtatWtaVagBgtttatgaHaaggattStaactWacKDV
+tMHccgtacaMWYctDtagatttRctaccRagtWcWgaaaaMcagttctgacSctaaaac
+tgaatcacaNcaMWtWccYgtttNaatttggttaaNtggttSattttcaacgYVccMtcg
+aactBtatcYttcYDVMttcgattaKWtatttagcaatatcagWatgcRVaatgRtacWa
+VVBttggatRtaNgRagttDYataacDVBcaaactttgtttgaccatagHMtRctaWcga
+cagtgcVcaaVgRgtaagtRaaaattSBKacBaatcagaatgtHattcaVRtatVSSaKa
+tNataWRVaaagMaacataDgataWHatcNYcMtatttggaSatttcHcgacaYcaKaaa
+tattacHcSaBVatHacactaMDataaaggcacaacaSacctgtaaRgtcccaaaatWtD
+tagtcaagNtttgatDacDgcagaDcWgatDaaKagctDWtttatatWgDcaaaWttStD
+tKtatSagVgaaKtaacgaccgMgaSaatRRcagYtgttNDggcHScaaYDWtcaacgta
+HgaStKtgMtRtaatccagtDaaacHgtacaaccHtagataNaattatcVtgaKaaNaaa
+aaaaagttgMgtcRaNaacagtaKcaBgtttgaMDgDMacttattatgaDgagcgtcaca
+aRaagtYaggMtaaactagaacagVaMWataggtatHagtttaaHtcagtaaatgRgcat
+gRctgaMttBaaataagWVtcHctgtgtYaaaaVtKtaSaaBatMtttgttatattattc
+aaBYctBWtggatBtgaggDagtgcacVataRBctaBaaaataatttttNggtccgtVaa
+aaataaattBHaatBaagaHgttaagcctaatcaaatgaYtKaatYtaaggtMgaRggtW
+gggNactaacgaRaaattSttWtaataaVtHgtacttNtaagHaSacgWggaYggNStcc
+tgacgDcgHggtttHggtNtMtttDatNDgtgacgtatacgatKatataaacaattSaaa
+gcagatKtttSagcaaMttttgaKtMtagtcRacctKSttBttaatMtgcgttacaaaga
+VaataattcaSaaWcBVacYKtacaNBaaKRtRtcgWtWBaRKVtYWWWgattgBctaaa
+tKaattaYtMtSBMBHDtBtaggDtcNctWYagtgSaaBaVtcttNgtcgttHtgtMtct
+atKtatVggKaSaagtttattttatgtactactHtHttSMactatHcaagaattVataaa
+MKNtaMccgtgatDaHcaacttRataacaNgaatcSBtatgacBcctcgggtaatWaaWt
+acacaattctRVgattctatgtgtatHagatagggacVaattttDtNaWKagtatatHta
+gacgaggtatgtcagtgagHccccaatNataKMBaHtcWgctagtgHaatBatSataDat
+atcacccaagattttcSatKgatWtgaagtcBMataaHaaMaattatgcttWWtttcgVK
+YNBattggtacttcaaMaVNcctcHatcgctVcttKatgtctctBMggacatcaggacSg
+aKttgagtctKVYaaagtaaSgaaaHaWactgRattaaBttVaHtggattagRWtaaDaa
+atgatttSMBWMaDactScgRYtgaVagNctgtSBataKacStHRatctVgBKaggccaR
+ctaacttcYKtcaDcttgaaacBBataatacYMgWgctgtacttttatgaSaaatYcccg
+attattRStccaaaBagaacaaaVtttgcttatagaaacacScccSaNtaaaaBgtaagg
+cDgtSttRatMYSWatcgtaacgtStBagttaVaaaScccSggaMDBSgcaaKaggatat
+acgtatgcWactccgVctNttMaYtaaatKaaatgKStaaaHaKatatgBtcctatgtVa
+BggaatBcgcaatgagtatHcYagctDgtWaaccagtatWWtaRtKagatagtgKatatg
+aaaggcaWgtNKaaagataWaatHaaaaaKMaaatttBtatHtctNactKtBVVagtatc
+acgtMgtgttaKtaatcgaaMHtYKNcMaatgcaSaaDBaaaaagaWaDtWMgaacattt
+DcatttaBaBtDttaaSMtcagcttttRWWaataattcNctactWaatNaBaattaagaa
+acttYRHaccatatKtaKcNVgttYagttBtaaaaVtctcgVctagctcgSVatatagVt
+McaaHRctaHStttNtcattRaatgtaRtgttaatYtaagcattgaatttaKtctaKKga
+aggtcgMctttcWaagcgWaKcttcYttgtgaRaagMtDatgWgYaataKaatSWScatK
+BtYgtaagagaVcacgctHStaacaSgBtgtaNRYaaWtWcKgaccDtgaWtgagMaYgV
+VgBaRacYtcKgatcagttgtaKcgttgagNaStctggaatVtactaSNtaaagtaatca
+attaaVaaDattHDBaHKDHctVggcaaacccKMaatVtgttacBcctStgBgMtScgaa
+HcatgctMtStaVttttcDaNagtDVaatYcggaDaYtaactaNgtccaattSacaaaaR
+gtagaaKgtcRSNtgatBacccttMtactatKgtaaRMagataMatgVtVKagaRagtca
+gMgMaatRHNttagaagaatgggaatcHtttttSgtNgYatgtgcYtaatgDctMaaaMc
+cVScgcRgKNaaagtaMtacaKaMNaBatagBttttcttttYatataNaWcagatttgMt
+gaaacaBYtHaaatgtaDactatttNatttKttSattgBatSRtgKHttacgattgcggt
+aaaaacHHtaNgMcgHaVDtgtagaagatBaaagDttaacSatttaatttaccagatata
+attggVgaRctRtcgccVatRNtDgcagBcVaHtBaatDttatgKRKagataaRgcagta
+KgagttatatcaMSagttccRcttaaatgatcttataaacaaatttcccttaBaWtagta
+gttMaacMaKaaaagHatYKactttRatgtctcgattBcSagaDKtttHtBaccttNttV
+ttVVtggttacgtaaBMRgatcgtctacaaNBtaVggttYaaggattccaNgRgtagBtg
+taBacaagtataaatBaaatKRtaMtKHgatcgYggDSgKRaSttHStcatgtatatWac
+acRacHcatYtttaacYatatgtgttNtgcSagDHgataYttNattatcVattcaaYttg
+gtaRHtWtcgaBacgtttaBaccaBaatgtcgcNagaNtKtaDtgDtatgDaBtcKgtBg
+atacNaccDDatttYtKggMtYNtaactgVacattaaHgMttatcgtHMNtataBtKSgc
+caVttaBcttattcBaagtgaWtaRtcctDVRatgaattgatatgaWgccacDaatKaHt
+ttacatNttaWNWgtacaggctacttBaYaaatatacaaaatttcgNHgMgttHctcKYc
+ttgMtaacBaDVtaatttacagaRttttttagcKagtKactatMRtgtDtaattccRcaa
+KSttagttttBtctatagaKaVttttgcNagtKVccttagRgWaNaKWttataDgcgaat
+gMKatgatRcYtctgVagaccgcgVgactagaWaaHNtcRNRKaatactcYaNtSDKtcV
+VggNgDagtttaaKRgttaDcgtNNgtcaYttggtttYtatgtaaaggattttagatatt
+KMcatgYaaatcaVactcagagtRYtgtaactatagtBaDtVaWatDatctataaaSggg
+tactaYaKKWagaaaaataaattatagRcaaaVataVagatatgtaggcWagacRWattc
+tgacgcDtaBcYattgtaDggMatgagcgagaggctaaatVtctcagRagDtSgKNcgtV
+cStacatttagNtgatSNgatcYVtHattHtBgMacRaattaHBacRcNaaccctVaaYa
+attcVccatacKcttSagtctgKMNagRaNcatNgcgHattStSKYRggtcagtcaccat
+tttagtMaccctggVattHaatVagaaMaattaVacatacacaaattaattacgtKtaga
+aaMgatWgWccatYtagacKatctKatMcggYcgcatgHRtcStVtaatHgSaaaVagtg
+aatgtgYtattaYcRagatgatcataacacSgaYaactMKttatRcgaataaMSatacNg
+aMatttcggccacgaYYMcaKattRagDtRtatMVBtaattWtMHgNaWDgStaaSNggS
+tcBcVYtaYagaHtacagttccMcgtYtYttcattgSWcttagttcgtHtgVRYgaMact
+tBtatcaactaaaaVtDgataaDgtatcatYDttaStgccBacctaaBagttgRtaSBta
+aaagWgcacBggttagcMaYatttBgtaggtRBaSagttcacgtaDaYaaaacDSaKatt
+ctgtSatatgtatggVBcctctgtgaaHDKgttaRttttBMHgRMgHagtagMgacgaag
+ttaatattgRtHtHttatYaaagcagatgtgattagtggcactactVattagatctctgt
+ttatcattYttgatHcHttagStgatgactctDaaatcagtgttgtttttcYaaagtata
+tcYcaSaacaVttcgWtatKaaaHWtRgtttaKacttctgaaNaYacctNtcStatttaa
+agttKgtgatcctBcaBtctttaaaKagttgDtWctDtgtgctataKagtaNHatctagY
+gatcMgtggYaagactgacacttaRaaccHgttcaYtagWtggtgBcStacaMcMHataa
+aNagatactccaggagttaatcatRttttgaKNgSgcaggtgttRaYcaaataBtaDtat
+HgBtatacKaataKtaggaaatatgcataaHgaKttttatMaaaNgMatYattgaatNta
+tVaggtKctttHattcatttatYtattagtataYtttagYcattagaaataHtaacctta
+ctcatYttHMRagttctDagNSVgcgVaNNattctVcaaVagaatttaagaggttttacR
+agtagtaaaBaBaaMtaScKgVaRcNtctgtataagtatVgtDgHaYttcHYttaagatR
+gtgaattctYaaaattRtcWtacDDaRatcaKtaSacaagctaNttRYagMSDKtWgWaY
+NgaaaatatNtaatatHMtMWRaRacaaaatgctgctacNKaKtagttgVatDaVccatS
+DtgaSggcgWatccBgaaVtgtaWttagatVaBWtacgWtaYattaaatMctDgDaaKat
+ttgaaatgctWctttaHtggHaBBSRVBWtgattgagatccNcaaaHttccgVcttaDHt
+NgtttaMggccVWaagattgKcaacgagtatgtccctctcttaccDtHcttcctBatcSt
+VaactaatctacatgtacataacDgcgaVttataagcaaRWataattcggtMaaBccYgR
+ctagatctNtBaggacMaaaNgctgttHgScgttaaVgattVDtaaNaccggatatHatK
+cgataRtaMcagctattcaagagaatHcYRNgNgcaWtgagYtacttNtaagStaVVagc
+tgcaaggHatgtcaWgaattKttgtcgaBcKatKKtDtRtNYNtctactatgcgatgtaa
+cDtcaYgaactSHctDataKtcaagtccVRtWaaKMRtagKttaatagtggKttYtaKtV
+ataWYgHBatataatcatNMRtDYaYcttgttHagRtYacgaDaaMMtcagattBVScat
+tYcaataataBWaBatgDtBaKaHacagtBggaVtgtgttRtgacataaagtBtaVgtta
+NaatcaSgcctgtcBBaVttctHgVttcttgttatccaatacaNtgcgctatacctcatH
+tNaBMtgtagaDtKagtHatacctHgtgaDVWtatcWgtatScattactSgatcWatatD
+ataRSgctHaaWataataYacgtacgtgDatHcgtaacSaaagYaMataYaactggaagt
+KgattKMaatStRgtatVgttcttKSMtcataVtttaDtgttatattagWtatNaDcttg
+ccHaMDttStgtctgagtRtatRSMWttaStcatattaNaDtcaatttaVatgMtcaatt
+agMYWaRcNtDttcaaagMgagaVHtatYaacggttScaaccVKHaaatacWagaataac
+cMatWgctDtatttgaatBtNttgaaBgagaaWcttggatcRctctaDagWBcacaatMS
+tBcBWtatggtagtgaagaMKatacttaYHtNctgttHSMaWttacaSaatgtattttgg
+ccatatSatcgctctttgaRRVVtDaatcSYHcSDNacattcMDaNVagatctSctBcat
+agtggHagaVtgtSactctSHaMaWtgtatcattWtacgaaHatatBaaSaYacagtaaa
+agtVacatKtatatataVtagcgWccacagctcaaccttRtatNactMtcattaaatttN
+aaggctgYctctacatcaVgcMHaagaBttcgYDaSRtHgaaaNcaWYBggataatBact
+gaataYgcgtaacccactHataagaaWgcgRacccagagaVtataggcttNtaaaaHata
+catttttYYatHattgaatgtNcttatNaVcaaRtKctcgaaWctDttttataaatgata
+gcgSttcVtgatataaataataBgaatgaRacgagtaRctttaactattNagtcagtgtg
+aSgaHRacgVtggRccatttatgtMtattaNatgttaaatRaBRttcatcttaRBtNtaN
+SWgtVSgcNacBtWaDgaaNBMgagaBMgaHaHagatttctNtWatcaaaaDgtgcaaWa
+ataBattaNtatgDaMaWDataNtctatDagatSWctctggaccatcaBgtatattaaHa
+cHgattcgatgtRtaYattactNtWgaaRgcgDaatactgWcKaMacRSaSaacDgtgSg
+SRaagNtKttattcattaagtctgtctctataaVgctHKttgVtgacgattgRYcatccW
+cMtaBagaHacaaaDaaaRVgcacatgatYaatatttMttaaWBtctcgaNcWDtttcag
+YKattaRtttagHcKaacaBcaggtaacctaHtaMtttaHacctVacctaaagtcacttt
+cWcaatggatSaataHattacaMggtgaaWaacagaaattgttggRggcgattatWtaKt
+ScWKggtttcttgtcMaRgYYacacggagtgccDcDattcaaacHaacttSScaaStMtt
+aYtgtcWaaaaaaaataBataWaatatBNttcgttgtVatgacaHtgtacatHtaatgtK
+catgSatacVRcVctttagNttaatKYgHtRccttDBggHgDtgaatcaagacacWtcgR
+WKaactgRaDNMactactgacaDgVgatcaagNRatacagattSMttaattYtgWctRgt
+taaKMgggaaataagttatgHaScYaattccRMggSagaKKttRggtttgDtcgtcMttt
+tggaDgcVctYcaaataattSctDaccatNataDtaaaWtttagHMSSaagaaBgatYaa
+ggNtagtgctcMaatttWMggtctatttggaKagaggatWcatttgctatcgcccBacac
+ttataagaYtcNcagaNatcaYHgNgaacRgtaDgaNYttcattRtagNDcHNVcgDctg
+gDatDtgNaaaaaHgaYagtRtcaaDcgcaKatcagttattcataaccNaatacacaaYW
+catBaaaacaRttMgtaattctWttMaMtttccgaNcatVtgatcBaRtttgSaactcaK
+YaaNtKDttttRagaMcDYgcaKcataVaaagattcatatWcHtagtagatttctBtcWH
+tctaRgaSttgHatgaHMtNtaactgaaaNWtDctgDcacattMctNgWattatatctSt
+taScctaDaatatDYataaaaatataatNctKaNaatatcSgagttaagtKDttaaStaa
+HtttaatgaRataBtaVcBtcDWWaaDaacacRNtaVggatattatagtBttggcaaKca
+cRNgaaYaaMRaHtatBcaaacNataKacttaMtaacaacgRtaattgggaRcttagtWa
+taactKttDccgaMcacNHKtattStaRcSStDttacggagagtMtaNHatttWRNVgaa
+acattcScatgctaVSttaRaMagatcScaBggtatacgatVttKcVtagtgccgtcDta
+gtRagggcagggRRttKtcgtKDRaaatgatVttDtcatMaNKtNacagMattgttcaac
+KaatYKttaactaatgagattttaBattBctcaaRWgtYtYBatDcattggRtaaHttca
+NagagctcaRatBtaagHtctcttRatagBttHtgatgattgcRcgtgSaagcYaccacB
+WgtaNtctagacgaaSatBNtHMcKagttaaDcHtaDaaDtttccaatMcaSaaacWWgg
+tgDtgtMtcacggcgcWttcBctaaVatggaagNgtaacctagatggYKRVttRtMcgtt
+aagccaHgatHBcgNtctMKDcYtaVttHaaDWcYcKtttttgatatacataggaaaaac
+WgctgttatWHaggatcgtggcataagaaaWtttgatcaagaDatgaWtRtttgMagcBa
+ttcNaatNcKgaatatWBBcttKVHtgcagtagaYRatcggaagaRtattaBNttattaa
+taatatgtttttaagMggggMttctBgtcgaaMctcctaVttRtBattaatattgVDcDt
+ggtgaccBaNttDWaVtaaaaactHcaVtacKMtgaataacggHtaaaatatataYtacB
+cattttSaaSttgatcatccacatatgcYaVcattatcaagacYcMaataagaWWcBata
+BattcBtaKatgtaRgtKgattaSttYaHcgttHcacaatatKatgRMgatgatgRaatt
+ctKNMRtggatNttttagYRtgtgYttaataaDcttHaDcctttgggMtcgcMgNYtcNa
+cttKtttttgYBaHMgcccgggtWttatVttttMtVgaHagDNtccBVaaagtaKttaaa
+cgaYgHagVatMgaacBaSacNaaaBcagaaaatatttaYgaaSccaRacgctgtYcctt
+tStttaacgatVWaatKtaBtaaataVaBVcctgKaatcaggaDYatgVcgctaaacVtc
+HctggttaDggtatRatttttaaatDttaMtMaggtMaattaRcaaggaatVaaaactSR
+ctatttWaDtBataaBaaKattScSVgtatcWaaaBtattVtatttttatYtaatacRKc
+gcgYtccaacVBtagcttYBtgtgttaataataWactatataaVccaNtcaBtttcMaga
+taatgactMBatBctaaRtatataaaaaaRacagtatYgtHgcaDgaHtaaNMMStKtDg
+taaaaactgtaaccBttMaaMDVaaaggaVatcScMRMaBttctSgacKaccKcDgaWat
+tHVtKaNcDaagRSgcgcaRgagtacMKtWaacRtcKKtBYgtagNtatgtttVttatcR
+aWtattcgtttaDccttMVtatgHagaBgtaMWKtcVagaagcaaaaStaaatgagaWtt
+tDttttagNMgVttcWagacDgaMatataaataagtttgcctatRtttNtcttggMtggV
+cgaMaBMgaatDtVaDgttaaacgaagVtttNccaagtgHgtgtcScaataaRYaactgc
+VWtaNRDccSggagttattatgcctMaaNcgtttVgtcaatctaccaDMtaattBaatMt
+KgaDcBggatVtaattRBattgcccatgaNtttMDcKtgcaccttccBccaatctgDgMS
+gaagcactctaWtattgaHgcDaagVRgtaBtaaRtgtYcYttaagataaaHaHataatt
+aattaStcttcgatHWaaRRSHctggttgtccaacaDttcaKggcVcgtSBctBNaRaat
+tcgcatagaMtNattStRSaaattVtMtgttNYaatgtaHaKNSagatcaHctaaaKKgt
+aYatDgaaaBKSacaatacRgDctaSagVcagDgtYMtcatcgttcRatgaatgtcBSKt
+SagcttagKKccgHtBRgttStgtBaaKaMtaaKHBgaVaVattaatNNgcattgagtca
+BaggMgctHtaatatttDatcWatagRatVaaattNttttaaVctYagtRaHttatttaa
+aVtaccgtNattataKSRcgcagMgaaMccagaatatMgtgNtcttNtgattaBgaaaag
+atWtccNtDggaaagaNttttNtttSggtDcaaagagtactccattMatataHcgcHMBt
+gaaKHSYtctaVtaattgtacctctctaaaVtatgKaWaacagttYaMtNgDYtttcYRt
+gYaWaaaacagataaacgtaVatNaaBtBattcctWaaggcacatgWtttaMtVtagata
+tacgataMtttggtVBagatctRatKggttgcYtacSaMStattBgcatttKatKtVgcD
+gcttNaaataatWNtaDStRaacHtacttacataatacaMtYgcggcatYcactttttDt
+caacBtgHttggctttHNtRcgatctcactctcattMtatccgattaggtgggNgagacg
+ttctDtHcaaatacaVaaaHttctcMaNtaattHWaMYgatNacKNNMatcRtNtYMgVt
+ataaaatttaaaBMtaaaatBtaaacttgMataaaagBaaatBVactagaaaHtWtKRHt
+tgaatVattctttgaNgaDDtatcVWtDaataaaVaaatgcaYaaggatgggcttaaRat
+aaacttVDcattcaattgtaBcMtgYtBtcaMKcRNaKRtKcaatttgatWgaMagtWtg
+YVaRcagattacaWttgaataaaaWgHaagacggYccctBtWttttYVtttggatKBtVa
+gHBgtaatgttcgaggaWtDtgatattaMaagttcattMtttWcgtNgcgaRcaactaMg
+aVHctctgcgagKRatWtggtcgtWaaaBctcScVcaHatattNcactttccBtDaaNtY
+ggaattRtcggctaggNVgDcgaacttMatNagaagtaaRaaRttggtaVSaagaattat
+tcaatNttWcaWtaggattScaStgattBagVBttaNcNaSagttagtcttDccctatBa
+tHaRRttaacBYKKtattHVcHagStaSaatNDDatcSaVgtgMttaHttgttaataatc
+aYtDcatttHNaRgWtgtaYcaaBaagaatYaagaccKggRattttaNcgacStttaatK
+cVtcYtttcggcaaaSYacaKattgSatHtWtKVcagatccccStaatRMaatgtaatKt
+cDgNaYaaBttccRaaacttHtaRcaaagtatgtctaaBDVcKSKVatSagtggttaatc
+ttaVNaagRtctgRataKgcaagactSKattaBatNttggttDtgcDataKaKgKacaWH
+gttScVaagaWtcatHagcgattcBBtcWaactBatgacBRctgatDcMaaVDattWaaK
+tRcctYVYacggaaagVNBaaaaaattKYaKcMatgagcatStaBtcctgaHgtttacHa
+cgcttatgNHWatgctWWattttgYaaacctaacYcataVtagVagtVtNgaMagtcgtt
+atcYtaagcatgKgaaagNSattKtttaaggacaBNRatttacatttHctaaaHactNcN
+caaaYBcacggctcaaHagaaSaagcaWtcaaaDaaBNtNacRgtttBSVtttccttaaD
+gcctgKSttgtcaaacNMcaBtagaWatttVgcRtgaRtMttgccVttatNtatggacaa
+agWgcacNatcaDMaWtcHgaaNaMMtttgcatHtYDcDactttRYtaaatMtaVaaatt
+ggtgtcaacatVctBtHctYNacaaactcaMaaaMcHgtaactHaaWattKttactYata
+agaYgcttattaWMDgStMKKatatDataNHMaSagBaaaVtYtgVtaNtataDRcBtag
+ttcgVKagggatacaaSRaataaatagtaataKatMattVaSatSBtagVaYccaaaYac
+aKSactctaaHctaaaSaaagNttgactaSacDtttcattVctccagYtcNcagtWatac
+attNgttagagNctaYaYNttKgttttatKacMgRatgaaacVccgtcaKaatHHcacRt
+gtgDtccatHaaaRtNgcaSagtStgWKtttgBtHtSagaaacgtaSaatctacWaaatt
+agagaDaWgtataMtgataaDaaaaaaaagttcBggaHaDWWcYctYtcatctttcaBtc
+tBaattattagcatgWcacgcaaaaDaactRVccBtaWaatYcVVcacMatNatacctSg
+tWgtttaattcactaaagcHgaatcHatcaBtgtaWatSScMMgctatctctRaaaWMgt
+taKaatagBtttcttagaggVttcaatRattNtccatttcagctactccacMatSHtaga
+taaaWgaagtttgDcctaagtMaaaYagaaattttVattRacatctgaaccataYtcaaa
+tcaRttaStRgSacctBcaHcgtMcccBaagaaagaDaaattKttNtaataaMgtctYct
+tDgaactaKaacNgcaRccDKtcatgaagtactcgtgttcctBtBtgttatDtctgaact
+ataacagtagStaaaaaatgHaaacaacYgtgtgHacaaattgttcSttBtVctaHaact
+tKtttttWatBtcccttaaVaacaMaagaattcaKaSNatMScRtgaaaDtSStDtHtac
+NtNtaHtMtNMNNcWtgctctaaWttaattaNtttKtBttttttagcttcDagMNagtcK
+WatVMgcttBcgccttttgtBtatatttYtMgctaKaacttgattttatctaatRagttt
+ggKBSatagtaVVcaattMataaSBtDtaBaactgSgtatcaactgHataacaDcaRtcK
+ttatgaatcatacgcgaagNYaNgaaacaattatHMgYgtagatctctWttacatVgcgR
+cMaagttgttDaNtScgStWgtgacaacacggVgcgaSctcactcaaaaYtDatatBtat
+taNgatactctaagtWtKSgYtatataaaaaYagaggttaKagtcYtNtgaagtctBWga
+WtaaBaattStcatgNNtttagMtRDtWttgctYattcVSBaMDcagatVgccatMattt
+atctatcgtBgcScYtaaccaaHcattgcagtcttMNVaactWWKcaaataNaatgHatg
+aatgtMStgccattacHNgVataaYtgaggtKttNBVtYagKacHRggYMacDatcgKta
+tVtWaKgtHatatMgttScgaaVHagaaattaNttaatatgcaaacttWgRagaaRBcNc
+atctaagtggatgVKaaVgNcaccagtatgHKgacaWatYcSacaRaMgttgcttatVca
+aWcVaKaaaKaDtaaaatcgVaccatcgKgtDagBNKNatccgaacgtKgtYctgaKaaS
+KcccKgcVtttKcaaYtagcagatVcctVtgaMYctaccMcgDtgBaRtaaattaaagct
+KtaaatatatVgctgaatatctMatccaattacaSYgcactWttaRacattgtNaYcaac
+tatNNtaHttYcStactctatatcWSaccaVNctBtaaagataNaagtaaaaStBaaVtg
+gttatttagDScttttMMWctagcaactBctcttattSatacSatttRtBataatcaaKV
+SttaaaaacaNattMBcaacagtttcVtttatatttgtaaKBgcacattttHNNaVtWag
+gaDataatNaWtBataattVacWaaattRHtacaSgWtttataDMcttRScttttaaaaM
+gatacMatYccgacKMagVtWcMtBaaatDatatHtttDtaattHaatctaHgcgtaagR
+gWaccattgaStttattctattcVacctccBcgttaNaacagNWtagtaNgtctgaHaac
+BgtatgMcRVatataatKNKaagtttRgtaYcYcaMaaagattKgaaaaKcttgtaBHNa
+WNgMatcacctgcaMggScBaRgMMctaDaaRgctcYtaacgtgtatacttcacDaKtat
+gcaatMtactaHDtaaVcgaagaaaggVaMaatYtttttattttatMggaVYVaaatBaa
+tMgctgWctaagKtctgBtKacaataYtgctBgKgaMtgtgataBagttMaagRcccVtS
+NtaWcgVDctcaSSttKaaaaVaDctacYatctcHHDtgattaaccttttYatattcgaa
+HBagWgYtSgcMtMtagaHactaSgBgBSatHtDttagaacSatcccaYtatttgtgKcg
+DcRatctccNtaagctagBVWaBaaMHacaHctDVaWgtaBtaaStVtDYtatacttgtt
+cttggNYtatWBSNcagatttgBtcVaacVtRgtYaatctatSatagttDatgttgtKag
+tctagKHtcttttaccattcccctaaaaSatttaDgBactaMttctVcaacVgtaSYctt
+gYaaKaggtaWttgaaaYgagataatgccMgSHatHtacaaMatHDttcaagtaMatgta
+agtgtaggtDtacStVaHcaactatgagttatataaBHagggccHagtaaagcRgcttag
+YaaaaaagttaaattatYNtYctagtttaacBataaWactVtRtaatgtHatctagacat
+ttaKagStttgttttaaagtDttMtgMKgcgttaactaVttHcatccgctaaaaDttSMc
+cttNaaccattacaBcHctVcttctYtaaSSctVtRVattaaagtHtaBgttcatacRcc
+tKctHVHgttKtcatctatagNSaacHVatcVgRtgtaaaRatYtcgggtBtgcKacttg
+ataRttDattatcMaggcWWRttccgaHttNtacYtYactgtatWaaWtaaggtacaDac
+aDgttStgcttatctattatgttgStaaDaaattagttRgtgcBgRDtaWaggMaaVttV
+RtcBttatcgttBDgVgatttKgaaaMttatatgattataWctcWMgaHgaattMDatgV
+agtgatatcaNcaaaataSttattttaaatDgtaNDNggaaacgataatttaRaaatata
+aaVaagttacDtgtggttctatRatgcBtaVatVtMtaYtttaaYgaHttgttgagctac
+ttaatatBHtctttaagtcaHaWYtKttacttgtttatagacataMgttgcaBVcttMac
+ttYcHcNaDatNttagatcagaatcttatcatHaNtatcMagYaacacMcaatacaNRat
+DtaHDHtSYgaatcRaBtKttgaMKgcDgtacgtgYatHcggatactDDctaVRgtgctt
+tRtatgtaaaccagtttacVtatttBcatcRaaYgcaMaagaacSctHRtctaWatatac
+gtattKaNagtagatataaWKcgggacgaRWttNacaaaaagaaatgatacDaaaaMata
+KacatVgcgVcgcNacaaHNattaggaacattYtcRYtggtatccBatcaccgacaccag
+aaagMgataacHRgttKctDaggMaKtaaatttScBtcagKBgYtaRKttagttttcBaa
+HYatgattaaDaDVacaagKaaRYattaMaaagVatattKactatcttDacHaDaatBca
+ctattKtKtRHggtaSctaaaaagtttaggBScaatcgMStttaatKacaVBSattaKaa
+agacacaaagtaattWactttacWaaBgYtMcMccagRtacaatatcttatBacgNagaR
+tctHgaKtMgaattcKYaaMacgcaatctcNgYgtYRaHagYtcVgaagaacacKgaRaa
+cgBtttagDcgaWgaYtKataaDcaBatttccgaaaacaRRBaVtRtgHacttHgagtMt
+tWattMtBtgDaNtgKtaaKDccKgctaMRtaNacattacWcttacBacgRtRttaYggc
+KNattagtgactttcKHNcWBYagttgataaYagaWaSMttgataatctataatRtggaK
+tcactWaataatYgtgcHgYKttaaaacNcaSatgcggacaBaRattttcgacctHtaKY
+gttaaactataRaaSactKatSggatgtKYtatctYggcMtactatgtgaWtttctgYDt
+tggtBtcHBctactacBcVacaagtgaatSttcHttttttatRYYaccagatctgatgac
+gcccVataagMaggWgYtatctgtgtatcWttRttcattattgYcHtgatcVatcttVSa
+taactgtgcgtgtgaRWaacgatSgaNaVKaaaaMttccNtWgtVaatNtHgttgatVct
+tatcaaDaRScagDtaKtatttYaSctttctcatccttaattagttaaatactgctgNct
+tgctcatatatactaDtagctagRcataBcgccRaacaagcacaagtaHYaaatgttaaR
+gacNgccgctcKtacataBtWtaaaDagagactacaccacggaagcStHgggtcatDcKc
+aacctctgDVRaYaatattWttattcttataatWatattaccYaagWtgaataatgattt
+gtatBYSaDctatRattgaatDgWtMacggtattttRgtaagtgWtRtagtSctVtaRgt
+tScRcattacYYatattaRaaggaataagRtttBHaggtattacBHMcacKaDDagtatM
+aaSMacaSggtVVgacctgttaaHagtactaaatYtSSBgaKatcMVHcDtatgtagaVg
+tWtMcttctYRtgctRtgaacatDctcRaggatRaaVWtgHtaMgaattaHataStgaKR
+aVacataDtgDRagBHttgNcNaRDcaaSagStDgaStattBtBNHRHacaYaatcagca
+tacDtattWctgcMattaMaaWgKttgRKgcacNYtcatcaaKtctaNtgacatMatMgY
+agNtaRWtgaaatBattctaStYgttcSYatcctMagtgatgcgtattKHKtNtcattca
+catccDaaWattgcacMattattgDcttgaBgccaMNaacattctcaacgaggagctaac
+tagattWaatgtagtcagtYtcKtMVSagWagataaatgtaaVtaSatcccVMttataac
+aVWHNataWtgccggBVYtacRgHatagVtctDttaccaataSaDgcggtttcKaggtaa
+McatgMttaaDacaccagYgtattacWgaDtaBaacctatgaWagacaYttcRHDgDgaa
+MtcagRtaattDtaagKtYMMacagcaYacgtWtctcaNcaagttttctacVtatagttg
+ttDgDRDtatScgatgcgagggSacttcaNcVaatKtattRtWttaVagtaaMDtMaatt
+HtagtttaSgWctcctggNgatgMataNRcttatataatcVtDBHgtNaRatgctttacH
+tRacgYtYaBBtaScWtttMKcStgRcaSgaagatNVtagctgtatVtaaagttcgWMtg
+tcgtHtcacSgaaWcgttaMcttWDWataVKcaatctattaKgtattcMttattcgtatc
+aaatacaDtcacatatVaatcSgtgDatBtgtagatgtagttataaagtctcatMNgata
+NgtagKcatgaagKcYgcNYtVttYtaHKcattaaMagaataRWacgSactctWgtcgta
+aaKaWagRaBataRSVatccYacttcaggtBVatKtHctatMcttctgtHttcataMgtt
+attcttRtYttagNtVtDatattgcatYBtggKtctatcYctDtagHKBNttYKtcWtRg
+taDatgaaStgtaMagcBgaaagtSctRNaHcDgtttcYaacBcagaMttatRaVacgtt
+KaaaacMttaWSgWcNRcaVgSaaaBatNcatttatttgYatttDgtcaatgagaYNatt
+ggagcDagagatacNtaacaWtBHgtatNtaggctaggcaacYBtatWctgaRttDatcg
+ttKtaNtgaaaHaYtcgattgtgccaagagKatcgatatttcaDHMMttVagaKRtaKtD
+acYgtcBtaDMacagatHcttcagactcgtagaMggtKSctagKtaBYMggtagcStgNg
+aacaatSgattaaKWNaaYggaaaacgMaaattgatagagaMtacacNacacSgagcYVa
+attHgatDWatBtaattaaYttgDaacgctcRatatacVtcaMgcBtaagattgcgNtaH
+DgtcaaaDcYMRtgcataVgtaatcaagaRccctYWccaacttagaagaaNgccHWaaaa
+cacaMgatScgatgDtWaaVtatacatggtgRNattattcaatctBcttatDaMcaaHtt
+atacaaNcttgtttagSSatgatacccKttaMtcatWgaVataatatgYYtcaHaacact
+WHatttVYatatgDactaaggcgcaKcatHaccMtccHcaatgtWtctttatgWDatctg
+WaagHVtDggaagagtYHttBgaDKMctMHccDaattMatcaaBtBcagatBcatataga
+tttatDtNatcaaaatctgaaSNaagatagtVBtagctaBVNtStWBgctagtYgatHNa
+tatgcWacWtaYtctatatgaatactcattagatcgHgaRattaatDtNcaaDgactSat
+actgNataBYaHKaKaactctcHcKHRagDttgtYgtaattaactagctatatataaKca
+ttttgcKtcaacSttgHRaagacNaBtatacataaaaataVWHMcaYcagcagRaagagt
+tBttaaMtgatacSDaNtttgaagRtattaHtttagtatYaaatcaccgaYaatattWBt
+ttataactMYactaaactaaatttcNcVatgcVgKVatatattaaatccggaaNaacaca
+SatgcttgcHccacatgatNtatgKaNtgctggagtctataHcRRScSagcactcaatat
+aggaaYaataaagtKKaaaKtBttYRtgtcNVVaaaaaatatagaNaSgattDtgacgtc
+tMatcaaatggtSaYtttaatcttaagcKataaMDaMctgtYcDtgaattRctgHaatgt
+tggtcttcaataWacaaYaNtacHNtVWagcHWtBBYagSagcaaatcKgataaSgDHat
+aaacattKBttWagtRtcNagHcttaatBccgaaatVacggStctaKaRaVtgcaHBcgK
+VcattttHgctttgtgacgaBttttccatccMatRcaVataattKattaaaagDatVtta
+SRMggtacttKHaacaatgagRaWcgDtaggcataBaVgttNBcgtagSttgccYtacWc
+gagNaatttgctagagacatacaaggataacWRtcDaacSDStcaRtcDcaaaHgtatca
+DRtgcagtDtacBtatDMagtatcctagtgcDaSaaRtcaRactHgaaatccaRtWgaac
+ttattaataScaDaatYaaaWaRNcagtaaaYcaHttBctaattctNggBYBtggaacaD
+aatKgcagataHtgtcKaWctaVtNWYBgttttgtHScaBctRccataataMaaacatga
+atatNatgagtWgatggattgaNttataHcSKttgtatcatBtDtaWatcaWaDNgtagc
+taaaWttBatDgMatgagatctKttaHactataSgattRataYaYatagaatDagtaDaa
+gatcKcYgtgWSgtttttaYKtSatttgYatgYHStattaKcttatNNSataaaacHBta
+KgcataggYtacgtttccaaVtaVaHDcaWRYSBHattattcaaaaBatataaggaBtaa
+caYcgHgaatgcggYHagtactNagaaatttttacgaBcaaBttgagtKtYHaKKgttga
+acgacacgBtWDtSttgNHDMgaaaaattcKcatgataMKttVHVBacataKaatcggWt
+accagMtttcKgScgcaactattVctHScccaacccHDtgttacgttHVaatcVgMtgtt
+catBWBttDaaactattcttaaactaYtRtgtaWataWggacVgtggWtatgtataaaHN
+ctRgRtattaagtcgHgWStttaWDacacatcaHatttVacttagcgtHagagttgttca
+tcatgcaHcgtcKaagaRRacaatNgtYDtatVgYccaYKVttDttBctYcttaWtatgY
+taVttttacVatBaYKSSVaNNccgctgctBtcaagcacaNttctataYMatccWacBcg
+VaaatagWgccRtHMttHgBacttYScaaVtgSgttacBtctBttaRtSMgttaatNaRa
+tgttgtcatVtaaYgVgcVaaYSaNcagcttatNtacgatagtcgaVtaacYVaMttgga
+taaagatStcaNtDttgcBacatattaDWatDatcaatatNttagttMttcaactacaRH
+YtcggaacVHtaggatDggStgSWtVatagctgtttaagBcccgBtgcgtctacYaBata
+ctYMttHttVttaWtSttgKtcttcgtgacctaDtttMYMtaaaaaattcaMgWatBtgW
+WtaScccttaaVVgatagaRtYataatttgKaVHtgcataYtaaaaagStcaRaMaattW
+gcaacaaRaBaataacaMNatagatattatgWtagcgVHcgtcatgaHgtRatcctgtcS
+aaatWgtatcHBcatcatcHaattattDBHggcatBtgttagNDggtcRttaataVtctt
+tStaaggtcccBtccaBgBRgaDaatttgtttgcNtatBgaaaggcgNttatMtggtBgM
+gatactDtcatMaaWctatttaaaacYNgtSgMatBcSactaKYaDVaVtcagaaaStag
+ttYRcaaKacaHaacagctNcatttKtttaaacWtMNaatttattaaVgaMStMcagcta
+WgaSccatNatgMacataWaaMtataggcgtatcctagHatttttVaattttSBttScgt
+BSatgaHcaacgaVtMaaaactKHatatttNWtttataWtaatVttKaKMggatcMaaat
+tattMgatttgtatRtaVgaaDtacacRtaaaaaMttScaggRttgtcttSatYWtVMac
+tagatVaMaaaDtaattttaBWcataaggaatBtRgtctaWDtagWtaaWYSaHaaacga
+tRcttgcatcattaSDBBKttttctaYSaactcgYacatttBaattKaaaccaMStaHat
+HtatgtctKcWataactctcVNYtttMttaDatSacDKcacaaHgaggaaBtgNaaaHta
+ttgtRcgacDtYtctttMttatcDaNgattagtttYtaattBMtaggtacatgtYBNttc
+MacaagaaaaaKgaaatcacaNttgtttttagDBcMgtaNacSatcWBWtataVatYagt
+ttccatatHtttDtcgtggBggcKacaBWtBcaattgMatcttaVaacVYgMgttDcaaa
+ctctctcgcHaSatYVHRaaatccMMtaDHtaaKccactgattatccatBYVDacgttMc
+taaVtatacaatBgaagttaattttgatatgcatKgaYttHtatggaaaatcaDtttBta
+tgccacattactcaaagctctcBKcaagcaatataNtattcVtcataacMHgtattaaDt
+ctNaNttYWcWtaVatatataWgtaWtgaHtattcgagtMVaHDHtatgcttctaaWYaa
+tttaatccaMactKtcgtDaDVWttaccVtacYBgDattKtHKSVStgMtBgcgtDRSat
+ggatatDKacataWtatWaVttctSRWgtcaWattKaaYWtYaHctataKacMaagtctR
+ttaatcgtgaHaggYWtcgatKttKaccttacttccgtttHcgtKtcttaatSBgaattt
+cVKaMattVSgDDcaattcagtcataccBccgtgaVtaggttYgaNagYcHatMYaattD
+gtttaaMagRactHattgatttaaSKtSccggBattatatKDacaacBgVWBaaacaaga
+ttgtcDtcttBgcattatcaaaacagNtaaDgtggVaacYDgtttDtggKccttaaaWca
+cgSatacaggtagVgatacctBttcaattKRtctaMgSattgtacctatataaaMgVtct
+YMYYcacttRaBgDctRtttaRHgcRSMVaaaaacagaYaagtaMatDaatttaggcctN
+aacgaaaatgNtttaBtMtScVtVtSacStaBggtggtKtRcatagHattcctggaRtaa
+KaBKtagttgaattgtatttMcatgcttDaWYtaVtNDgatKtHaaattaattaaStaag
+WaaBtNcaccaatRcacttgttttcaaattctggcccttttBgHccatcgaWctataStt
+BgataacagtacggcccDcScaactgattttaSWYtaaaMaVatttagctaBgSaggtNa
+BRgStDaatDBtatcHgDtRtgMtStWaYaggtaYatBtaWaattgaaYattcBVtaVSa
+ctWaWgtKaatagaaatgNttHtgtcaatMattcggtcaDcVttgataMNttYVgSSYMW
+aVtgcaRaaccYtgccattaaHVgaaaattMtaSgtaYaggctataBtcRtttaaBtcHD
+atDgtaaVttgcagNcatWggNtgRMaDcYgYttacWNtgcaWtaaVaNctVacaaccRc
+acttgMttgtRMtgtccatttgKagttctVagcttccaccaNgtgcatRgtSBaacggaa
+ttttttNagtDcagaHaaaatStcaMtctagcacactHWtNtgctcgtNaWatataKcMc
+WtagaggDaVatttaatttYSDgRccWattHtaggctaccDMctacVaattBYtDacaYc
+tWaHaaHttcggaMKaacSagtattaaatDttNaVNtacgVttKaaHtgagttWcKtgta
+DcDaKacgtactctttacatSgtagtaHHtgaaatRtttagttMctacKgaKaatBttat
+aKWMcggtttatgtgtgaStaagaaRttaVtgttBaHgNtggaRaWataacaWtRWacaa
+ctcgHWttttaDagScKgtgSagtcMgaRgttacccaaaKRaaatattcKatttNgtMaV
+cataccaKgaWgHBWagctaagttatcDaRVVtggaaHSVacggttaHaWWagtSgctct
+VattKctKtMatHWcgccttaYtagtaKDaVcHtctgHagatcaSacaatKtatgatagD
+gtcgttttgatVtatStctYaYNtgtgKaKaVcVNgaattWccgattcttgaMaRattRg
+caatHctcattaBaaMtattNSSttHcagRKRaaccaYacMDtaYaaaatttRataBVtc
+acaagKtatgcctcatcgtgWataagcgtatcDtNagcatNNatgttcRaaScagaaaRa
+ataMtacMSctKtDgaBactaggtWgcRtaWcaYtgtgWaagDKattttttaaccaaatD
+HattgacSttttatWaataatDaDaaaaRtaYaggagcYatacYaKaagaaNtaaaYtaV
+tDtBaaDcgtttKMtggcagtVatgccggtHgtgtaVaacDBaattacaNatttMgaDgc
+aDtttggaaMgtYtDtSgccaaaaYcNgaacDVgcattaNgatgaaDaBBttgccatttR
+tctaatgtHNtaaatBtaMaVattcctggaaaaatMattgtagRDacaaacgaataWSBc
+tctYVcgtSaMStgtttSatNagaacaRcagtatgaNBtcKgBttRtattVtaBtBaKac
+taWaMgRtcMtaDtYtatHattScggacMtaggcataaWaKHaataaagYcgWatatStB
+attKaKagKttacMaRacaSaRaaWtKaatagSatcgaaaKaaVcDttcVcgaKVattgg
+aYgtMataaacRtaDaactNatYcagtDgttagacBataRYRDgttcttttattacBcHa
+tgaRacMaactcatVVtttaaaHgctgttcaattaVaHtDcaYKacgKtcNtttgctttg
+HWcaaSactWKSatcgYaNVaattacRcatVNgtagatgcatYatVaaYWaSactgatcc
+atatNMaNagNtaatcgttaSttattWattaggagaatcNaaccaaaWatRaatHMaatt
+aNWatRaMKaWctWtDataaagHctMctttRSttaacgaSWcatcaVgatataattgtWM
+agKKaBBgatatctcgHSaaNBctgVtaStagtttgaggSgagcKttaaatHattDtaaa
+ttgaacatactaaWaBYtKttacWtaaVNcWacgttctcctaactBaaSRagaaatgttK
+VgtHacatctcaScaataNgaaVagaaHttaKgHgKaccgtcYtcctBccataagaSaca
+taaaggtttDtVStaVBgtcgNatgtgaVctatWaaDccWHcctttaatcWactaatact
+cttacttgttcttatttatcaaagatWacYctacKtaSaaaStgtWaVcaYaRctgggtS
+aaaWtgctgcHtttgMcgatSaagttgttttNattgaacttaaKaYcSBSacWattaata
+KDattKaHtgaaattKKttttgacDtDtattttDBDDcMgcatagaVNttaWtgaDttgt
+tttttttgacattatagBDacgatNatMBcaggtacaatgtgctttatatttRgBcctVt
+YVctgcatgtgatataatHagtttccttHatagtaMMaaWggBataaKtttgataaagcK
+gtVtaaaatgtatWWaataaHgatttYtcWataataacagaacDRWDgWaWaaaggattB
+cRctacYtagctNgtScagMcccHaBaYgtgctgtSDtHacKtNgtgacaaaacccMcac
+aKctcactaaaaaNgtagWtttYtgaDcatWctataVctNttKgRtatataYaaaRacag
+gttatagtcRgDgcaYctattNcaNtVatYattKgaaggBDtttacttHttNtgcatRat
+gaMHtRBtaagatMcacatBatgtStctagacttccKaRgaWccRataVtggaScgattt
+DMaaatNNtcYaYtaDaatctatgaVtctBKtgccYgtWatDcMYtaaRtcVgcttttDt
+MtRagtactHccRBWatatccttatMtNatgttagagBcttKacaaMtagaaattaDtta
+atatgaaaRattNcHSgaaHtaDcagctYacgccagcMtaaMgDaaaaaggatcttcaaV
+NatRcKVaaHRBctgcattatMaWaNaKataaatatgWaaatcgMaaaatcctgttactD
+tDagaccYWacttctRatgataaKtaaatcaMttttcaaRtScaWgatMactMtcaBNat
+aaaBactggtWHtYaattaWacattgaaVtYtSgMcatgaatYgattatacaYttaaaKR
+gaVagNgtaHWaattcgDaRaaacgVtBDtStttRaKgVagatatWtcMKaaaaMDattt
+aaYcataDYagtaaaaKttVWMggctgVgtgagtKagtgtBBNctacaaacttagattSt
+tHagacKVttgHttatSataaWtMHttSaSaaaaDatgBtaYaaaggttaMttgVtVttt
+ctaattgaacaggtttDDVMtNSgcatataagDaNttatSVttMScNaaattDttYaaHc
+NgttatatBatgDKctttgVVaaBgataaBatRaagactBYgMgNaBttaaattagattt
+ttttaVgttaYtatVtccgtaagDcNVcaWtgcaKgggYtgagattaMaaagaatagtga
+BaVcacBNtagtaDctctcVtaSctgtagcBcHMWtataattDtaactttHctaRcRaaB
+aYacatttcVRaatctgctattDSNDgBatcaaatgcaBccKctaHcBtctVtaaHgatc
+RgaacggctRtaagtaSatatgatcaaagBtaagatttVaMagaagaWWgcMWBRStRgg
+tttWttttagtccaMRMaaattaSgBccggNataagtgctctttacYataRtcattgtgY
+BtggcatRtacttBaacDacaKtHDtaNacMtataaKKtgtaaaRMVtctVcRatcgatt
+tgcattSaaaggttRatagtagaattVcNgRtKccBgBtWcataataKctctKatttttg
+VcaacKStcacSRtattgcggtcctcHatcgaaDgaVgctagtMNVtaattaaatattMY
+NcgattaaKtMttRtYgacttgttagggcDNgagNtKBaScagttctgcMaaaMtHctRa
+YtcgRtHatVctttatcttggtYctctYgttgattttaacSttaaactaaaWHattgWtc
+tactatttcgMcVaaMctaKRcttcRaatSgctVNgtgaaaNcagataatcaatcKtagt
+gacaaBVtttgtaaVctaBatgtaagtgtacctttacKtMWtaaaatWtcVctgagataa
+ttacggaatacgSaWgaHcagtagNWaaaSacggaaatgatRBtRctVctgtVaatataV
+NactMgDtaatggtatctacaaatgtatacKtttgttttaaacgttgBggBtgacttWac
+gaMtttcagaacagaaRVtttKBacttDWaccagtaaatatcgMcttatRtaaKKcgMtH
+KattWYYgttgatgttaRgacHcattcttKtcgtttaatagagWgDKaYatKataKcDgc
+taaaHWgRtagccgttcatYattcagSHtttattataBVccaNMHttacgWttgDgaaRt
+RaatcgatNaaNtWVcctacatacYtctgKtcattatctattatcgtcKtaataaattag
+ggHctcatgHttSNacctYaKttMHtctttSgacgtttgMcStgttcaaSBggataggWt
+tataNagaNBcatcaagtBtagcMagtcagagaaDcaaaataKgtatgtgSaagtgtYDt
+DccVaaacagaagttaHSWatagaaaMYaggtacttctccttatatHatgctgVMatKtt
+gaNtggSaRcattggttgWcatYagtaatatttgcttgaVctaataMRttttScggggtg
+agVcacatYBggtccatMattBaatgNataDatWtDttVcataacSVtattagaagtaDt
+atcBacNaacaaBaaagaaWBHSttgattttKRcVataHatttttgaBtcctctacctcR
+YttagcatactttagaMHgtcatgtHtatctaaYacacggtaaMtatgttaagaHWaRca
+aBaacaVaKattHgataNatatacgtatttaDWctagatataaNtaccgaacaDMttDSa
+SYaaYgYaVtcatactaaWWtatataaVtMcagMccaDaaSatBattagcaaaatgRtaH
+RgccgataatagcaaacacWacagaaVgBcagaYctHctgtcttaccBattVaYtttHat
+gaVgttcRgaHtttagttttataatRWggattYatatMaaaactWaDRaggataaWgMat
+aggtactatatttVctataattaaatatgtgttDtcctaKataaaaacggtacgtKaaat
+ccBKtgtaattacaKtKYtgStRaagaaaaaaaggYagtNactttaaNaStcNtBcBaaa
+cHtacaatSgattYttaacDacaHtcttcatttgSYgtctRaatVagcaWtctcDcRctN
+HatScRtaMgaacWaaYatcaHaaagttggagtacaNcSRttagaatcatVgtgaccaaY
+acWHHtaMtHtctaatttcactBtgNVggBgttctaDtcttaWttaatcatatHgaDaca
+tgaaNagtaatacgDgHttaNggatDaggactcaatttcttDaNtRagttgVgaVRacWN
+VHBttcVtYYtagataagHtccattcaatNaataYtNctgatcRttgaYaaaBcaKatca
+cgSaataHatggtacacctttatRcgtaYacgataHWVKaattVtKcgatcgtRtatagR
+gccBtaatagctcVNtttatgRtggggtttcttatactaatcMaaaWcgcaatKttattt
+gtttatHRRacaVcSgatcagcaacccaMatYacBVccNcRgagatctgtSgaMttHgta
+attatggRatgcWtcKatattMKWtaaatctccgtgtcaHNYaagStKcaDaMtaaaWBt
+tacBgNctMaatDttcttgatMagtagaaatYHKaacttattSgttNaKagttctcataa
+gtaatgactgaVStaatcctcDagtcataagWtataatattacagScHaatatagcaHYa
+aSagaaaaactYtRYaatcggaaHcVcDcaccctattRaatattNgVaatacagaataaS
+aaaagcWRgaKttccgtaWttctaaWacgatctMHaNWSgVtgNttVgtattStaatNat
+VttacaRWagNgcaSgRVtcYtgtctYgtRKatctStHWttcYagtgNtBaacgtagtgt
+HcgaSggcNgHgWggKatMtaHcgtKaHaWggacRRatattaHaaggaagaSgHggttta
+cctagtaattBaaatSttYgtagBaSKBaaSKgctMMcacagcgtYatSctWctSaatRt
+KKtgatatctMtattagcgagaMctNtBcgtatRDtcatHtgaVcYttctaHacgagDaa
+MNtcttaBgWattatagaKtcWtHaMacagattgtHacttttgDaBWDtcSWKacKttca
+HtSgttttDtHtSaVRYVgcagaatWattYtgNcgccBSttataaNctttcHtccaaDRg
+aataSatgctVDggacagBYtBcRacDtYDNtgWaattattatYKtNcggaKRatcagBa
+ctgatgcctSttttttDtcSgtcaaataataaMVttgaacBagtattctatggYtcaaat
+DWacVtgataYYacSccVcataaagacagtNaatgtactaagtRtattBMKacNacagaa
+WtctSaMgaKataaaMBgtYtaWaaKNtDStSNggaacgtMRtaaHctatacMtatttta
+ccaataKVtcagctttatacgtSWBaStgttgWVtYaacaacRgtSgtacNgatgRtaYc
+agStcaNScaaaRttaDttctcaaBgcScDtWaggtgaacttNBBYaaccaNaactNgct
+aaDaaaggttgagaaMtatacttgtgtctHtgagKacagcacagcgKSattaSDaKaatt
+tagtHtMttaMVctaaBtgBaattttactttaKcMagcatgcDcatcBagaBHattVgWt
+aataMgtttgtDaHaggctgtVattDYacNtNStttaKaNggtBtaKtgHaaKcaacatD
+MtagatgtatMtaaacttccNBgctacgtgcaaKgWSNacttSBaggMtNStaKtcaata
+gattatctagtaBttaggactYtaaaStaaYtgaaaagYtMaagaKctgtVtttcgWcat
+ctacgtatVaagtagaattBcagaDcgSgtaSggaactaRcaBRtMttRgattaattWaB
+YcaataHMacgHactatNctacgaVataNVcHatatVHKKagaaRSattaacgttMattg
+tatagBagtatctttgaagaBctgattattHgRttacDgMgtWtaggcaatNttgcttag
+agaRatttSgtttBtgRtgaNtHcgStatgaaKtgtaBacctgaaWgtKatHDStatctt
+taRaaataacaBttStHVMaccggtaVYaaBttYNKgNaBHaaKcKaaatStBcattgag
+ggcRSttttctaaatcacaRBattccacatagacatSaDtaaaSNtttgtatDgWgcata
+cgaSacRttagNaggaHtttagccttttWDtcYaVtaRtacWggctcaaaacVctWtaca
+tagttaattBBttMacatDtatttaaRggattatBVcacattattaagWctactVcaBgc
+ttKagagttatRBgctagaHtgDgaaaSVtKgattaWtMDWaRccaaWaagtaaVttgWg
+VgacaBtSaacDaaaaKcacaRKaagttgagtNatttaSttaWRgtctaaccataDatag
+YaMgaWBcattaacSttcacDtSttgtaWYataRBHtccagaMctaagaWagSDaactRN
+aaaWagtacaScaSDcaatMaaaaaaaVBcatKacaggtgMaaMtatVaVgcctcDDYgt
+attcaatattaggagtYBaaatttagaaVWDattcgttagHKSgcWtWcaatttaBtaat
+NcaMYgYagatcRRtcataaaYctNtatttKRatRggtYcgaWcgcccataWttVaaBta
+ataaatcgNtctttaggNtatatgNaagtMttccaagactRttgtgattBagBtaataat
+tBStcaatttaWcattaatVtacatgtatttBataVYWStagcaYKDaagYtaggKtgag
+atVtMDtKgNtcatagtNcagtBagagcaNaaNtaRtagatatcYWtSataWggacagag
+tcaDSggYatttDaaatcactKatWatcDatatRattataaatatctattHSctttggNc
+taagtSacgagatatatatRataagtttcatgcSaaKttctHaRgaaDatgStWcataaa
+aatWMNttaaRaVgaYcHaagWggttttaaBtcagacKtaBtggcaacHtaggVttttac
+tatRWaataVcccaRaagattNttggStYaatBRaataVacgaaatttaBaMYgcaMgtK
+StStVtgVaatacccYaDVYaVaYKVtgatgcctacaaagcWgDtVtctaBtcctccacg
+atatWtcDHHaHacaaataaatataccaYRSataVagtttaaStgttgRHtctaDMMaYY
+aaagatacaBWKcagttgcaacgagBagcaaatccgKaRgtgaatcgtaWcatYtWaBta
+BatcgRattcaagtHctctaatcttcctattaaYgaNaaaaRaDtactDtMNagatMttt
+RacKaccWaYtatcagaaKcttVtVaaaatgttgtNYgtHtaDactaggaRttaccVaag
+MacgcKtatataHaMtcaattcctMaRtttttcatgtctcaacatggtgacatcaBatHa
+aMagaatttattaaaactYgMttaKHBccgacttttaVaaVtcScHaNccttacccatat
+aMgggDtactagKgtcacRtacMacYgBaatttcagYcacaaataaaaggagYaaMHtat
+aaaHtKgaaHtctcaVatcgStcatHtcaYctttWcttattBactataatWctcctRKaa
+HtaaHYcttcaYataaaHtNcaSctgattaagaKaatWagRaVaNSHDaactaYVRaatg
+ttatVYttatDcctRtgcgaacStaWttgaYcatYtggtatWNataMtDNRtgtttgggt
+HcWtatHaaataatVtaaWaVgcaatagDatgScgNcagggagtcaDtgagataKtgtct
+ataattgtgaNatcaNatDgtagctaaaNtgtagtcBatgWcagagtgtWtaagWtaKga
+ttHagWRaNatacaagtactYtaWgatataRctcNKcttttgaRtgKWtgtgRagcNtKt
+YtgatatgatBDKVtaaaaatttWtcaatacgRtaactttaaaaMtaMattaVNHRKtta
+ttattaaVaatagatYaggattVaaaRactcaagccccRtagtScgDWgVSagtggtaac
+ataVatttcagtttRtattcttcYaccaaaagttNttKtggBttBcSaWaattataatca
+taBtgtMtMtaaagataYtacgMtWaaacBtttatcKacaaaatattMagtKccaaWcca
+tttgtgacctttMSataMgBtcttaVgtNttttSaactatgaggaSWataRtHtcgaMag
+SMccSaMctcgNtatgtataaVtBatHcHtattaacgactgNKtttaMtVaaaagaatVg
+ttMWcttacacgtacScttcttcWtaatccatactctaacaHHaaaatDctNtgatMcRa
+aWRtMgttgttatRagtaNtatgRtaMttggaaKWttaRtHKMaDDaacatgcgttaaac
+caaaDttatagVRBatacMaatacMaaatWcNcaaHttBgttgtacggRKaaaMtcHgtt
+aattattttaHgKtgttaatDaHatctggtaatMtYaRgMccKRaRKaDaagaggatBtS
+acatactccaKgVaaRMaBttgcataaacYtKgaVDtttgcatSaatattatNattataW
+atWgBttaggtBttaaYataaSHtRtaccaacMttaccattccKggKNtMatacctctgt
+aYctaaccttgagtataaRatagaatRBtttttMtgWNtKtgcttatgactcSaatattg
+tBRBtSWVWYagtaWBcNatttcNNgSKacctgaaMKgatWcYHgRataYggtctaMtgg
+cagaRgaaYaYgKgaaHVtaattMgaaWaWaDataagaaaaBDatacatatgatcNtaga
+gMtactcatgatgtHataaggtaHaWatMgtagcttaWtcStataSttagttttgcaagt
+gctgacDtgctcDtgaSgVMtagttKtaacgtacattaaatctHgatYatttcgggcaDt
+VttcaaacccgDgtatBggcttcBcWtacttgaatBaRNcgYtgtaaaaaRDctKctagt
+aKSatRtRatMaMtaacVYaKtactgRDcaataaatSacagctDaatggttttaaacNtt
+BaattgattaaMgVBKtBaacctYNcaKcaVtDYtcBaaataNSaBgatacccgtVtaat
+actSgtttgMSYtttgKtgtKacgtKatgataaVccaMgtaVaWatttatattgBNtgtV
+gVNtYStMtgtatBcgagaBaVatgatgBcStttgtagDgYMgaattacacHtaaaaaBt
+tKaaggHttctaggKagRNtMBaatWcagMSBaaVtgaatgtgatNaatSagcaatttHc
+tatWMtgVcNtSaNRHatVaVacVtHattcaataatgSKttttttgtataRKYaatccRY
+aatggtaVtttaaaaaWBKtatatttatgtagtcNatSaatatcMDRtgtBttYtatKaa
+ttaaaaYtcWccVattcDaaatgattgtHccactgNgctttBtgagatWDgVgtactgtR
+taaggtBgacctaaatctRtDttaBRaYacaaaYYtcaaagaWaSDttctttggacttcB
+cgaDacHataNtNgWtVMVtRactggaaagSgtgggtgaggcctccataaatNttaYYgt
+cBatattWMaacMRctcgttaaaVatatagagataKatRMtHaVagaaBBtStttaatca
+aatgagtatcaagtRMtaccgtBagaWKtagaaaYttcSScttaVttttcatatcaSgtc
+WNgtttagccaaaVgaatgtgttatgaaYaatgaataaaagagatcttcYacaaatataD
+gRttcMtcataYaBtctStgaatgagDaDgtRNaMtYMatatagWNggaNtcattatgac
+YgtBKYttttagccttataaNRaatggaatccaBacgttacttatMNggaaaMtaaRtct
+agtttttKKKgcBttgccgtHKatcgatVtttacataMtagNaMttctKHNctaaNattt
+WaRNgRatctagatSctaactctDttaagacgcatagcRNgagatttgtacattSattaa
+cttttcgttgattWatKtgaatttaMtSBattKKcttaaSggcactaataaatcactcaM
+gacggtRcaDScNctYtBRYVgttgtttaVtacHWattattcatttVaKtgKaacctagg
+StatttacaactcKNtaaacaagSttcgattatttcaRttVtaVaaacRgDtaatgtccM
+aacNtcggttgcctaattaaaNaWcgKataaYcctSgMcataaatttgaaatttHtagSB
+gKYggcgYaagagataaWBcMgatRBNRaYctgHatctatHttgaHtgcHKBKVaWaaca
+cWNRactWBVttaatttVccaagBSWacaaaatcDgttattBtHaMtMtHacKgWtcctc
+ctttHaatagtYttaagccaHtYatatttacgtcaSgtgtYttgBcatcatttaNRgaKg
+BtgattttaaatgaattVaKtVYgNaatgDaacaaVtHaaatggtttgaYYatgctgcac
+atttttctacVtacaNatataHtgtcVtaacVgtYccgaactaKaaaatcagtttaKNRt
+aaataMatgtacatatcKScctDatDcKttSattttagatgttHtcBtKgNVRagctaRV
+tttaNYWttcWYRatgatMgaMKRctNVMgttVagWcaVStcDgtttctcRatBVggacc
+gaatcMttgagaBDgtNMgKKRBNSMgcaWHYWccNgcacaggVYtMcaaaatgBtaKcg
+aRacccgStattcHttgaYttattattctaVMttgaacDaWtNccDtcHBataNcRggaa
+NBtgaYNtaaMaDctMaaaaaaHaaattcBgtcgHtgcgaaStttctacttcgMagagta
+aaacaDctgcagHctHtWaacgaatgtggtDacgtcacataSaatKtcWBtataccaaSc
+ttNgDgcctacgBaNWtagataBaNtRcSggtaMattgaatgtRHtgHaaNWtgttacca
+tacctBataaMWatttNttVaaRagMataVtgtaccattYVcKYcgagtaaYtttgDaKD
+gVacMtttaVttcYcgtMattctatatataaggaagagttaaatHgtWctatttgaaatH
+ttgScgtBataatgatRWgtttVgatMBcgctttatgtctgWKtaacaaHttaMtcttta
+tcDtccaHaNYtSWcWNtHNacaaatactNggtgStacKatgtgKVctaBcaHcttacca
+aWatHaaYtattatYtttDgtBaKcataaaatcaNgttNYcatVSgtgatatYDMMtgga
+atKMaagcttVtaNNYctKcctagMWtttatttBattNagccggaRgagtattaKatgat
+ctacatcaKVaaagttYgcStagtctacttttcatKtWtKtctRaRDtcggtataMcMDc
+aattNcacattattgaBaHattHgcYattagaattataaBtattBKHtgtaacHtHaaca
+aRYaBttaRVSaagttHVtatMtcacaWctgVtgaatcVtcctcNataacacgWtattDW
+ccatDDYtcgtaHaaKaacaYaHaataBtaaBKagtttcStWataccgNcaDtWNaaRgc
+tcNaacttatttgttaaacaaStttagtgVaKgggtatNaatVagtataVVaHtaRacca
+caRatacNStaacaYDgaWaRtaKttgtaatacggtttgccaaggMWtcaaccttcgcta
+MSaattaatgaaVDagttBcatccattttccaaBggRttgKgccaaaYNcDcaSatMcaa
+ttYDcatcWatStttggaaWtttHtatVaggttDgVWatttaBWMagtcagcgaSaaSgt
+attctacHtaaSaVacaataNKtatagRMagtKYBKggtttKatDacaWaYDaactagca
+DttctctttHtagtMtWtttatYatWNaBgHtaBgSttRgattatgKcccaaBtWcccat
+aaNattaYtRYWgRccNatatHttWgttatactttacBYHaaaKaHYaNttaatagKata
+caaatWSMctttcKacatMattgcaRctBataaVaHtataSctDVtRaacttcggScYct
+ataHRHtgttctgtgattYatatYtcYHaataaataYtMMgttaaatgatcttaaattaK
+RtttaaRtaacttaBtgtcatgtctNcaaKactMtKatagRaDKaatgSaHcRtMDctag
+atcaYtRatMSVRMYKYaggataaatYtDBaDacDtaVtacggaKttattNaggScgWca
+YtaBaaacaWaNVtHVagtBaatgaBNagHaBtaNatNttSgaaactctBaggtHHtgaS
+agYKNcataaMcatagaSttctNBYcttattcatagagagtHWWDtctgMtRHtactggg
+agcKcacctggaYattatttgaaWgtcaVaataagaaNatRgtttacNtWYMBcNScggg
+ataataaagtWYKDYcVWVggtttMcttYaatagaaKaaataDcaYMVcaVtgtStctct
+WaagtaRtaagtaaatWacSKaaatYaScctggtgMKtYMtctacDatctcaMatVtNaa
+taaNtaattgaagaNaataataagcttaagtgtgcgtVgttataYaagVgNaaRctSctg
+WKVaYKgctNWMaaRaHatcgctHaaYMtccggattgtgBacatHaacttggtggDVgtc
+aaaggSatWRaKtKacNVggaatYttatttattcaaSttttttttcaatgttatttgttt
+taBgcatacWKDgtYNtcYtgtcttttttgtcaaatgatacttWagatDatttcacctaa
+aaggtgagttatWgtgHctaatMtRKagccagcgcVgagYagtactgtactttagVctaB
+BaYNggtYtaattttcRtaaagatctMtaVYatctYgNMaVtaWtcattgRtaNataaga
+aaacVSctHNtcNaMaRYcgagttaHcgacNgagagBgtKaactaaatatYRcggatgtK
+tttactgDctcVaYaaSaacBcacatagaaataaaaWDctVcNtttRtcataatNagatV
+MctBgttcHtVgagaNaaaHaaSccggatSctaHgtgaYRagattDcSDtMStNYtgtga
+agcttgggaatttttDgcaatHatgaBttHttaacatBcaaagtaggtKgagacaattaa
+taHcaNaaHataMtccaKagagtttBYSagDDtaNaRtWtWagatSgcSKtcttttcaaR
+gtMattatRtYSHgaMccttttttBtHactaattcaHtMatagaattVtBtDatcttVga
+gtatttaaaattacYSattatttaYtagcaVSHattDctKcVattataagagRaccccWc
+aBtYYtctaaaaYccSgattaaaMDRtHatMaYtHtcgcaaggWgBaNVDatataaatWt
+cMYSVtacBYaaatactcgtacttttWgaacRNaattctHagcYtaSttaaataattttt
+aaSDtKaaMcWgBaagBgaatDagaaatactcctNtgRaattaNWcattgYVMtRtHgBa
+atcaagRcagtStaaWRgtaaatHcaMacDctatNaagtactVHaaVagMgttgKtgtHa
+tcMacatagMgaBtSaaaBtagttaaNaYgStRRctYWYVtttMNBgcctgMctcactta
+gtgtttDagacaYaattagaggKtttacaatMttctttatKagaaNtBtttKSHWSaVtV
+tgttaRSaYccgtaBgggMtKtttctYWttcaVaagctttttMBgDKccatagVactWDg
+tRtKMtgBKaDaVaggtttRaataBgttYtattatgttatgtcMMaatcagaatagHaac
+aattRcBcDatttaYWttagattggttgaMcgtYRgagMtcactaRctcBMaaNgcaStg
+cgNtgagVttaBaaagaatacgcatYMaaatDtacgatatataMtYKatctScatattNg
+StYWgtttaYcttgtagaHaHaYtaRaaagttcMHaStatcatYtttKBtctataaaatc
+aStcatatStattatMtSatcataHcaWaccagHtaaggaHatatgagaaYYgtgVacSt
+tgKaBacSYcaNNccBNtHKtHcctttMttttagtaaaBHBaaattWKgtaaccDataac
+tgatatgtaaRVtaHgaattctcRttcgcatHtaagttYYctaaattttgWDacBtataa
+tttctVaYHtMtagMaHWtagatttcaVgtKaaacctgHagSgtacSWttMaBcHttaat
+cttMaStYatatatattagtttggMaYaatHgaaaHHgatggccctactatSgacaatcV
+McatactBBMtaattaaatattBNDacYtgYattBttHtNcaatgcggacccctDcYcDt
+ttaKaSggtatcaBYaaBttctDSRgacHttagMcggtWgagtcctRatatRcttgattg
+gaaaKggaaaagaaSNtattcNtataatVttgagBaMaaBctWtHatgcDaatHccgMDc
+gcWaaDaacWgaagcaatattactcaaaatMgttgtaaMatatYtctRSctctWcatttV
+atgBNtaaYagNtaMatcSgSgaVttSaccaataccKRNcataaggYcDMWaSKVcccaa
+aggVtHtgHagMaggtKVatVtVMDVatBgttWagcctagagacaaaggtataatttgct
+tgtSaaccttctccttcaatgNaacaBtttaVcaacagWaHMttgttaagttNWaaYcga
+aVtatacBatgagHtSattacBgttYgtNRRcttgatcttaHcaataattattttccttg
+aYgacVgNcttaRattatatctcagWWatNcDgacacgttaatRattaYcKtggtSggWg
+atMcaaDBttgaacNttctcaaHtHaagcgVtDaaDtNMcagaaatWaNtatcttcattS
+gatatgatactattWatSaattWccgtctaatcttgKDacatRatggBttatggKgaagt
+ttcBaKtgttaaaKtcgatagcNgtatVDagaDtaVtcaactttYgaBYcgaYgWgaWta
+aaWatVtctVtgggKaVctcgRtttacMaVaaagaaggtVtKNYtWcYaVtRVccgaatt
+atacttatattagcatcKBattttgVDggcKaHaYttgcggcNaatRactWagWgttcag
+tgWMctaataBHtttgHaggcctgacMcYaRtRtcggcaatBagttaagcDatatatNtt
+gtMcVtaaaHMgattVgaYgtattatatSaDaaaaataWacaaNttKttcatttttHaMa
+gatYtgtttcattaatatVacgcHRttacaYtaagttacaBtcgaagcgttWtatVWRaa
+SacggWaBgSgcttaScatNaHcaatWacaMatagttcagYBagYgVactWtgtStNata
+catYgSYDtaaacSaaatBtttKaKRSWRcRYMgcYgVataSNNtWgVtSaMgBcactaa
+atYaKattVggacaWaaatgHtatHccacStaatagaYaaaVaMaaacYYMctcagaNat
+tatctattaaatatgMaRgggtatgaMcttaHgattgtScgtgtatVatHNgcYttNata
+tBWaaactNVtHScgataaNcBataggtaagagatttMatVtaagtaaatYgctgtttta
+agatagaWaaYcgctaacttaaagaattggtSYgtVaStttRtcKtHaVcWaYaWVSccR
+actDaattgWaBSKtaDgtataaRcttaaaatKcagtNgtaaataaatgattcatgtcKR
+ctatHaYtMacaWNgagatcDcgDtatKaHgaBcaaaNWaRataYtYYacttgcactaaY
+DcKDttWcYataStKcgcaaaaaRaaNtttatttgctYatgtcVctttcBKcgtcttatS
+ttattYMttaatcatattcatSaYtgWaDacgaataactctggaDccattacgSagaaat
+tgatttaDtHacgtcMgaMHaaNDKttgtaMgRNtacataWgttccStgaaatDaagYRt
+DagcatcHttcVNWWataatataaccKaatWtYgcctacVaagttWtHactaRaagatat
+MMtYattMttccatactHgStagHcaattaagacagaMDtttagcHtgccctttattatS
+atWataBaaSMaccVVgtggatgtgttgYgtDHSaaMaKcagaagcWacaaaBagRactK
+acDaDgagagagcgKcaBggtgtaYttatgcDatgaNgatagagtBtNtaWatagcacgc
+gcatDRSacHttcataBtaWaNtgtaatcDctBaSttttaggcWtBacgacaVYtRttaa
+cttatgKcggDStacgtagaYtaagtaatgacggVMKtWagcatatagtcataagMgatV
+agVttSaacHataatatacaatRYaHacaWaaactRtHRaatagcaVtcMataaacatat
+tHaStattDcMWVtYaacYagaaHaaWaccNHcatgtcccgaNttataaNaacatctBta
+DNKgMtcDtgMgtatgKgSatDSgMtgVaaHNWcDcaaKgHMtaRtggcgRgtHtVtatH
+gtMggaRVgtcDgtWaactactgttagaKcccDctcNcgtagtgStacgtataNcgVaHH
+agYttStaaccWacaKctgctttaactagtVatttaaatKttRcgactaHttSaKtcagB
+BaWaacccgRatKagNagKaWtHttttcWtatatttattacagacSBagDgtagtatHtg
+cattgcaMaRgtagatYacactYSBDgctgatcMattStSgattcNttaBWaacatgctt
+SattttctatNttaHNtSctgtcWttKgttgtttttKaMHNMcaacaagNattRtcBacc
+atKgtVtaaDcttgattaaaatHgaataKYtgagMtgcWaWgtRttcDaatgRtDgcNWS
+gtagtatRttDcggatHWgaagtacgcVtcaatHtttttttgaKggaSaStaataWBMtg
+caaatacgWttctagccRtaaaattNWaMggataRRaaHaaMcagaaacacacgDaatct
+actaactDgatgtttaaDacacVaNgagKaBcatataaattcgRtSNaatDttKgKDgca
+aactBDtaatatagWaBgagtgtYaaVatatMtaacaggtataacgKMtaKgcttgNMtR
+aaaaVcHctKctaaBcWtcHtaRaacKgcaDKaYaSHgtatttataaYtcaKatgNacgt
+cWWatgDttRaacaaDWaatDgagaStaVScctgcacaaBtatacttctgtctttcacta
+cWcaaaWcactKattaKtatWagttacttgBtgaBMagaattgtYYttttVatttWtcBa
+gaatcctcWtatYcVttattMgNgYStaBgtttcttWtagcaggtMatgtRaaDtDKttg
+ataDggtttatgctaataVYcSttBtYcatctVtBtYaVagtaaDtgagacctgaaatcN
+KDactgKtacgBtDKgattaaatagattatagactatggacgacgRgaaYKgYaRtgaaa
+agRgBaacatctctMttgacNaWtctVagtStMaactacaatttcVgatacKctaKgcSa
+ctaDaatHgBgtHgYttaagtNYtRcaRgYtBaactaatatDctaacSKatSDMatWtag
+KtttagaaHKattaVactttSgtgtagWctaggagctttgaScatcggSttaggtgHtgY
+atgtctNtaggaaatDttcctgagagaHagttKcttttgcHtcaDgtcgKtatcaatgcg
+StVcatcaWNcgtatttHtatctggaHWSataWaVttgKgtKBaaaggtaMNaatttRDt
+cDattaStctaaatKgtaagtcVgccaHKgtgtcgaSVtaaaaHtatgaaVcatacacVt
+KattaWaKDgttctattgNcaagaacaKYaHttWcDaccattttagacttttMttaRaMt
+aHtacNgccgaaaaacKctNgaaagagggaVttttgtBVcatttatttVaHcgattWttM
+aWcattagtaYcMagaatKaYtcatttagacttStDtcagacattctcYaaKMttcagtS
+NtBtMaHacYWNaactVaMgtcNgMcVcVtgKaaataaVataacaDtaaggtcSgtDatt
+taKtgSNHcgctVaaaatatagacRaBgaNtaattVWaKtgcaattHttctaNRWtaHtt
+taaSgWBctVacaNVcKtaaagHDaaaNagtYcYKaVKtaaatBaaaSaVaMtcSgtaaa
+cctcBYWttSgMaMccagcttRgtVggaaWgagtaggYctRtaaWtgtacaaMNtagtac
+ggVcttKcaMgNaaatgtatgaSgDcSBRgRVcYtaDHgaVtWaaNagDtagggtHagHg
+ctRagaNacacaStaNttMaatgaataaSgagBgagtgWccDtVgagcDWVctBttccaW
+cacgHttgtcYtttacttaatVatgtKtaaatttaNaYttaStMtVaStggattgtVgaM
+RNHtacaaNttRScRtVcgttcScatMtBtttcDtcatVctDaScttagacaaDaaBtaH
+tacRgRgaRNtKataNgcaaScactcWtKggRagtgtaaYtaaattWgNagatatYtHat
+tWtYWatagatatttKatgtcgDagaVcgKVagacagagatVgHWtaagttgcatgaKaa
+tggattaHcaatatgKtMaWtWaYSVtNBDttaaHaMcaRctWScNcggtggYSttcaga
+attattggaaaattVccMtgggWatatHMaYtaMaacaHaagVtgDtggcHtRaagtHaa
+gVMWacaaagggataBRcaaBcttKtHtMgcKaVtaacaRatKRaMaRtMtcagcaataa
+aaVccNcttMtctattaagacacgagatNtatttataaaSagaaatatSccaRHKatYMa
+cgttaWKtgttgHtgagatBBaRRWSacatacWtNtcWgttcaaaccactVcaSaYtaac
+taHgtcVWgactaNaatRgNattatagacHatgcYWcttatctaagcttaatatgaaRca
+DVaSaHatgaatttBDacatBtttHactacaNaNtataVcaVtattKgMaSaSggttggD
+NcgtgatactaccYHttaaaMaVcBSacctgatatataBgcaattaatBaHtttgtaagg
+gataaacatgcgcaaataatattaaBVcaWgttagtVaaWctRgBtgYtttccgYatttt
+YMaVMtaHatRDaatgVacaatatVBccgttaagactcgcaaHtVaBaaRctaVgggaac
+RaaaaaatYaSaccVgRaaBtgataaatttcaVttataSMatacKtaWttgcaRcgtgNa
+ttatttaatagaatNctcatHtSWttaVtRattcaRYtaaattDcaKagcWggaWcStaa
+tNVgHaMaBKttaaatYRMHaRtcgtagMRgtattcctHtcacaaaKtaNttcaRcatRt
+ccgatNDagaBttDHtcttggccttaNtattaaStaWgKtVWNaMccaVgVgtatcKacD
+aYcccactcattcacYtattggatVgaWttctgSDagaWDattctacataaaDggtacta
+tagcNcSgagtgtMtaacNtVtcStttSgNDaDYgaaWVgtactRtaNcYgataHagaDt
+agttggaHtgtNtcgcHYgaDttgRtgStatcattttKtWVaYattgNtaaYgYccHgWa
+ctgtaaaVBtaBattaMBtHtttYttVgtaYMWatWgWtNaccVtgMWaSDaatcYWcca
+aaHtacgKagtNcMKactcgtaaaVtaMatttcRcttgHtattattcRaaaWaWactgDt
+tttccttttaKVNaVggataagaagWttcgBtBtVaYcataRtaacBgNaaYctggtatc
+tacaaaagatttagttaaaaNaaattgctcaactttBKagatctgctgaMgtBttgtKaS
+atVgcacgaHNatVDgttacVBacKBaaKaBctccDtagctataWKttagtcttYgtaSc
+caatcBttggaBtMaaaagaYtMgtgtNatgacacctWcKattctgaNtaSgaaataata
+tVSaattaaWattagDtgagBaHaaNHtBgttcttatHaggaBtatcHtSttgccaatNg
+taHtttBattaacatcactgaWaaaaaatggatagMHtSgaaBSatacBSaagMaDcaat
+tttcgtctaacgHtaaaBtatcttaattagtttatcttcgtWVttatatcgccgaagBgR
+aDcBaatHVDtataacaccVgttHaaSgaagaaatcMSaHBattgcaSgaSVaRttcaMt
+gtgcaatKaatWggatBVgtataNWgNctttacctttgaaRatSaKttHgaaaYSaBttV
+acWttcctgctDgBSgYcagcgggWRataaaatgcactagaaHStacaatHtggtgtBgc
+NDttggattatgaagaKaatStgcttHtgKNMNRagtaNtaDattgaDDcKtaaatcVVB
+tcSgNcRtcHataRcggctVBtccaWcaDgaaRaRctgaatMtaRtgBcaWNaNatatWS
+cYYaWttatScYtSgcataDtWcacBtactaWgcYtcgtataagctataNSgBctagatt
+aNgaKgatVKgtagttttcaaagtgcgcYattcagatggaKcMBtacgtttaacctaaat
+taaatattcatRaggtcgcccattMttaaaaaaactggSgtcccgtctaNtWattcaatt
+VHDagRtggVSSaaHtattatWctatKatHtHattYBtaVaMRatgYagcHtaSataaSt
+KaaacattaagggttggVYaaDgttWSttcattaRBcMttttaacatRDaataaMttRga
+taaagVDKatcatacaacgMtaatYctKcgggcBKNgtggttcttaagttYgcataVMaa
+VBgtVMSNagttatSttgtDtgtMgMDtNKtBgctattacagataMWtcSggtcHgggcg
+agtcRtcRattaaaatgaaYYattgtaaccttgatacgtWcHDgBtVagNcSgBKtaaMt
+caStgggatDaVtKScaYagtttctagNBtcMcDgKaDHtVtMaMacMgtagtaaWtaYt
+gHtttttgtctagYHtRaagacDRaatgctVMtttWaYaaNtttatatttStcgactaDa
+tKaatatattHggttgtRtattaattaaaaRtaNacKattctVaatgattcttacWatgD
+gagggtggScatNtcMggaagggHtaaccttcWcatWaStagHtttgatHaRVaaSVNNt
+caRacaNaKttgctgggcVattatccatVatataDtDcNgMBMgHSagggaaagKctggg
+tcacgaatcaataaVtDttaRRgtctStattNBaaaBHatcgttaaWMagatagacatat
+VgDBttYMacaatttKtttaataaaagcacgVgaaactDBtaaccgtagaNtgagaaaRt
+tcKKagtYKttttaStataaHgtcNDcgttYccaaaaMcaWtgggttatcaaRaaggaat
+aaVWcacatattaRYaaVagagVtcHggaBtaataNattagKtcVRtgactatcgHDaBg
+RBStVtSgNBccWDgaatgaggaaNctttNttttacaaggagaaDDaVtcgaataaataa
+gttaattStBDccaaaBgVaDtctScgtgtttttgctgtcacgtttWgacStMtttVaVg
+aBtacDWtttagttDctaSDVtttNaDDcHatatacYtKataaatagttgaacaagaata
+caDDcacatttgtaaaggHattaaatgttacgtcagtNStttcVatttaBtHtVggttat
+taaHcgaWagaYtVaataaatcaBgaccctHcatKaDatRttHRMcgtcgggSMtaatNa
+gtYtgaYtggMYttgtaaactacgKgStttaaaYatatDtaaSaVVcHgtagatgaggtc
+aHggMtaMWaWaHctgaatctaaBaWaDtcgggtccctaagtaVYDaNactataaNcctK
+cBcataaatttcaWSttttgacHtctRggagRaagacagWVNtctcatHtDHaRagctSt
+atattggcattcattttMaNaSaRaNDHaagNtMgtVWtgtMccaactKNaaaVaStatc
+gtStgtgtaBgBgtaatcNtccgaagtttaWgactNgtaaccaatgNatWttgWagtaaK
+gtctRgtctaataagttVDHgStgttcVttgtSWatcYaggMatgMRcBaStgtaaaaaM
+ttaYagccggtgaRRatgatccaaaggtttctaaKgacaDagagatgctcMgaaaMcgRa
+acaaatataaaagcagtgtatDHgRaVtWBVtggacatStctKccttVttatgtKatttt
+YcatctgttatgtcDKHYcctSHMttgSDRNgtaMNHaggatBcSBtHatDMBcttMacN
+aVMKtctgtttcgaHSgtMgcacagaStaBttcWcattctDtcttHtDKBcaaNtRNaaD
+gaaaaccMRtBcWVVagcttatcgaDYccacKtatgatgtcaRttattYttctaMBggca
+YctaNtBactgattStaDaHccYaDtgcaRDgSYtYtatBSaYaaataaagtctcgcgtt
+cagaaKtttctVattagtWcacgaaVaaVtctcaVgtagttNaaacaatgtccttaacta
+aaStaKWagttaNttatacaaaKattBctgaagaagtYDNtagatataDtHcKcctaBag
+gcaatctHttctaaDNtgtgaaaagRaattataaBMaggtDgtMaWHacBStSMtcgaac
+YttRMatNacScgaaRtttctattcMaaBggtaKttaRcgtBattcgatatYtVaccSac
+acgtaaagtctNatYttgcSSattttcKccttataatcRtHNctttMcatBtacatgtYt
+ctagcNttYacaatgtaBgcgttVtattaaWtaDRtKNaNDttDWaaaataatDgcgcKt
+aatatcgctMctatcatcgtaaaaYNRttSaNtWggatRgtgtcttataVgaaaatcWDc
+ttDRaatMKctcatatRttBtccaattBSacctgMtaDDRagtcagacBNtttattttag
+tDacaagcaHcacgRttVtatcatatacStaatMaWagttRccKtRctcgaagttgaatt
+tNtttatHaHttagctatSBaBtcaagtDaaaRtgattcatStagttcaRattacaVgta
+tWRttWggttttctaactttSaaaVHRatttYHMKVVcgttMtatBtaSaaMctgMtcaa
+gaMtactcDatSaaaacNgatttNcaagttRgacgataVtaacYNataStRtgaattact
+gtaKtNagaaccDaatgNDaaHcataDSYattatgtctgYWaaRaHtttWggcKatgcgt
+agDSVtMactataKMSttaHaaaacaHatVaDKtSaaaRtcaNWHtatttctWataagct
+ttcccaacctNtaaacattcgagaBKVattaWtcVaKtWcggtaatcaatgttcaaatcc
+DttctcaaSaWNDataaKatBcaYttRtcataMVtKttggcaaNgtgttatMaccgttgM
+NagtgVtNBWggaacacaKaaKctagtctacttSaKYMacaWtWDttatagHBacttRtt
+cctgttagtScVNaRtaacgScaStttatctttttSgtBgNtttStRatNDWtctgatcK
+tgHcattatctaaaaattNaaaWgWaDWttWRtHRNcHacBVgWttgtNggtWtWcttgS
+atRtaaYtYtNaDttYagactStacYaYtNHBatggatacVtBatgccaHcgtagaaMat
+gataHagtKgHaWcgtaccKaNatagWtDttcgtagggcSgtRatatNgaRtYataaata
+RtBtcttaSatcagatgaaSgtVtHtgtaaDtVactgattcgcatctctBaWWtaagBtt
+VgacHattWWgcKataHtBtagScWtcaNtHStBKMHBRtRagcataaYtNtttatactt
+aMgacccattgagtDYggKccNaaRgataWaaaNWDMttMacttaatgStDYgtattaBa
+tBttKcSaactagtaccgttggaKacRtDaataSBaatacaKtgagDtNcttattaagYc
+agacttNNttatcBtHtgRatgccacctaSaatccaRSgtWggtgaaMcgcaMaagSaga
+aDatHcttgaaDgNRttaDKacgcataagYaagtMRttNaMMMgcggttcgtRaSgacaS
+taaVgStcaRBKcaMtctKtctatNaactaHtaactaaatNWaKtWaStRSKcatggtgB
+tgRBtagaatagataSBagMtDVataaDtaattgaYgaBaagWagaacaggaagtctgac
+gMgtgagaRVacMcBaaDatKatcNtKaRtcatDNBaaHatatacattaWRBtcaccatt
+ctctaaWttWacgtccgcgtMctcaaaccHYtNDatttSaDMccaStRttWgttattaSV
+KtgttttgtcWatgtgStttgttttatcaagacMttgtRDgcRtctctgtgggggcSaag
+catVattMacattSgttaacctaaaaccgcagtgagNgtctataatBtHtacaaSccccM
+gagRVctYagcgaatttacMagVttaRDcctRgSSttttcHtVaacatagBgaMRagatR
+cDBaMtaNtcatggHgaDYgaVgWaaaaMKattBtaDYBaHRccagttatacVaDcacac
+tcgtaSctaaatatRDaccagctttttaatgtagaMaRaaKaaataaaatacaRagaaYa
+NtatKcDttgHgcVtaYgDacagMBagtgttatgMcSgWDWYWtSaKaagcatKatatct
+caRHacagttaKtgBKtDRggtcaYcattcgcYattttgtccaagtVgcattttttaVaa
+gtaaaagtWccttgacYcaagtaatataYBaatataBtaaatacacttttRHagtttaDS
+HgNtNVcatKgaKtgagttgaaaHcgBattatHgRKtcaBaagttgtttgtVatYattaa
+ttBatYgaatgMgtttatagtKcVctagttaaYWttWaRKWggYttgaRgagaaMKtagg
+tattaMVttataVcagHYacaaMaattRRtataWaaRacHcattaVaBtHgtatBaRttt
+accaaggNgtaDMtatYtaYVtNtcBRKMgaatRaaagaatactRattttNcaaaDDaag
+tagtacaNtSHttaaataattggtaaKtttaaBaNgtaagtcaYttacVaataataatDt
+gHSSgtSDNaattcRMBgHttctaagaYVcHcactKgaaNHcgWaWttaaBactcgYtDa
+acgactMtaYKacBgttcttgttataBacatScBcattKaaattacttSSDaRgKtHHag
+RNRMtttBDtcaagcBcgcYattactcgtttacSaaNVagtacacgtggtSaWatBtgat
+ttWttScaaDtttggtKtNKaMtMgcttaHKaRaccgatccctgtgggagRMttaaMaWc
+cggtttBtgttaaVtagMWctNtctHgtBgcttatSMYccttgHaatatctgNgVttagc
+ttagggaBBSStaYgYatYgtaaaaattHatctatgtWRNgtVcSgtgcgtcYBagtRHg
+acttaaagSHatatBaaDgcaKtcccDgcacMttatRaacaataaccWtNBaYatttYac
+YtagagattRtatagKcatattDgKtNNgtttWNagggtacStataRtVDYaacgtaBtV
+KtagaagRttttttatataSaagaaKtaatatKtattagBtHataatatcWNaacagtgW
+accatatStcYcaaNRctcKacKttgtStaaKRaWDDaatBtttgtcagggBgtggScta
+aWtttYVWttNtctaacatagVYatcagatctVaHMgWtcaagtataHtgacaagttSac
+gtNRataaatgttgNtaattagaattgctMaRttBtacBatNgacatttcaMcgtaaacc
+tctagHctaaKNttBatatttaatattBaKtRagYtatattSgtgtccBaNSattgaaat
+tgYggcaaataatatHcaaaatcMBaagYatttttaYttYaStatttDtacRtgRatttt
+ttgDcRaggagcaccaattcRcttttataHcggatcatNSatgtagtHHcactgtWgtag
+gtNgactactHagagHattcaggggSaatgcaaaacSSKDtaggcDtatVagMtggacta
+BSatagMttaggatSYttaacBtagaNSVtaSaNcSScaaatattVctcYaWYtBcttcg
+aYBagWtRgagHKagagMaatttMatgtDtaYNagDtaBagcKcKcaMttKaaaaatVaa
+tHDaataacgRatBNVKtMaccYaaccMgttgtactagcttMatKgKBtMagtcttMWga
+atRcacaaaaSgcgVtSatggcaggcgKaYaatgctcattaaaggDVacStgttaMaaaa
+acNVtBtgcttaacgtDNaaRcgWaKtatactagcactgKVttaatcttRcgDHHattcS
+tatgatcWataagtattttacgtcaRgaaMcDattYHattYgatatcacNNWtDatgaaa
+actgaatHaggaNcttcctKggNgatBaaatttgcaaaDtgctcaatgtYagacMgtVVt
+gDBaacVaatNaDtatctgaaggKcagSggVtacgatgNWtKWaggMacctagaatattc
+ttYaatDatcgttgatggtcaacgttatatgcttaWVttccRgVcaDcgagMtacattaM
+taVWcgttRcatRacaRcMcaNtaYWNYgMtatMgccctaKctagHtttaaBVMaaWcSa
+ccgMttBRgNcRWMtHMaccaatgataaggagVttYgaatcttagtgtcMtgcctVtaRt
+gcaccaDaagHactNYcNcttaaggcMBagaWtattgtgctaccacgcWataRaHtDtac
+gaaVttagttVacctatatStDgtggtaMgaSattcatgMcaRctatgWgatKatYYaaa
+taNYcSaDtttgtcYttttttaBScatRtctgtaWttaatagMaacatDttaaaNgaact
+tacYttagaaccctgNgagMNHaaKacccNatgKccttaKcatDStaaStNaaVBatagt
+tcacRtYcRcKaagMgctKtBagSaagNcKRttaaaaKaaRttttttatHHNHaHRtcaR
+cMataKDDtNcKtKatctaaataaatRatYttMccaaaNaaWgctgattcaaaKgaatSc
+aNaaaKaBaaaaRNtataVcYDattagctattaaatWtgBWHgggtatcatattatcVtt
+cgHacgcgatMattDcaRggDYtYttNaaaatBKttKccStYVDatatYcctSacVcatt
+ttatMtWRctaYagRgctcttttaacVtagaNaVRaccgRaattaaVcaattgcgKRctM
+aKtttHgctttVMaNaRaNMKacHSagtWagtgNatKttatctataaHatgSaSattcag
+tDctWaataaYtcagtaYtctatHcgattSRttaaaNDgagatatacttVttatcataSS
+aBNaDataRtRRaattcaRataaRtattttNaRYtaKttaccaaaaaHVaBtttWtttga
+tRagctaMattgcttactctgatKtgatgRBttaataagYttcStKaNgcNatacgWatY
+aatctggVtaaattYccKagaVagggatttatttWacgaBcaBtaaDttttcgaBcHDga
+aSgVNctgaaKtgaVagtVWgRHgtacaatattgcMDNNataatagaaaataatNtNgcc
+gaaMaagtgNttacgVHaacSgStBBtRagtBgtaaWgacttcKgactaaatgaagVaac
+aBtggtacattcaaagtgattagKagNatatVaKBacaMMctccatcgcgggRctttKaa
+BatcacaScaNaaaaatVgHaattaatatcWcacacactcatgctcgaRggVgcatatca
+DcatYgaggttDgWNagagaaagagaYttHKaatgtaVtYttSNaDtcgaatctattSKg
+tgtaggaMgtaccWcaMRtHttaaatgWtgtccgtKtacggacaNgaacgaSgcYagcKB
+ttNacaagatacgaagaVcBgStMacMtgKaactataSgWtaaaatDRataaaNaSaagH
+ttHWYgaccWMtatataaaaagatgtaKtVtgtcBNMtRaSaRacVataaNaaaDtaatg
+taaagaDgtataVDaacagatttWtDtcBgatggBcgagctcKWgtHcBgcMaatDNatc
+aYtctBgaHtccagHctttMtattgtBccaHMctatctNaaatacgcgtacatacatcta
+DactactcKtacctataDccMattRgRggHtaaaaNYcVtatccgttSaagYcgMattta
+VattttHagVatVtttKattaagttaNaacaccHSttagDactSNgtgtttaNtVtattt
+atgaaacSaKtactctacgagttgaagtcaSBaDgtagatNaaactRKttcatcWtaBag
+gKtKcYttaDttatMaWcStgattKattgtatatDttatDtKatgtaNtgtcgtcttttt
+taBtDBcaaaaSgDatgHtctacaattcgMtVYtatgcattaaaattcaVgatRtcagBt
+caMaNctHgtatVatcHttcaDNKgtWcgagHtttaccattNgaactYacaKgaaagtgg
+tttgtgatcgaKaHgaatYNtBgcaaVatWacNggataccaDtaaaWttBMaBccagaHD
+aataaBaagYVacYaScctYVgagWagaYagtgatgtttWatSaaaMYDcactYtaStWg
+aaattacHgKDaYtttttgttcaaaaatttgYatatVcMatcactggRaaMVtStBtaaa
+agggatYaagtBtatcatgcDttDaaaaMatagtctaataNtcttWHaaatcaVttaRaK
+tcgatttataWRtaatatcDWcctaNMatgtttDaYaaWtMaagtcagaKtaMKacgcca
+aVatgWtSagtagctatttcactaaNcaaaNaaattaggattatMWgtgacgtcttcatt
+acaYttctRRtttgMatggNtatacaataataNgatNcMttaggBcDgRHgatctttagt
+NtacaaccgBatgtHaatgttttgatatccgttatcataStaKRaKgttgNaagagKttg
+NYMaggaattcagaactcaRataDttaagcttaccttttgVttaWWgacYggStacYcga
+tgcSccaacHcaYNtgRaHtcaYaacHctYacatagatBgtgacDaNgatMacgKgBaWa
+gacaSgttaKcatactatatcaHaatataattctggtcNttaYggDRtDaSHgNttYaat
+WagagtagaacKtWtHtBatNtScttttacaattagtaMaatttHgtctagMctaccaga
+gttcaKcStaccKggaggtctgcNatctctDgYccaaVgttgaatgacVcatagtgtatt
+ttccttcatctacttSgaaStcagHtMaataWNDagtatttttataggcatNKataNaMt
+gctgtttVaacctVBDWattgHttatattaKtatSVSttgtaScgcMcccattgggtaga
+KMgaSaSttYgcaaMaatVaVaKgtatgYNattcttagWgtcBaaagSaaatRatttNct
+acaStggtYcaaggttBtgaDWBtRtgaaDccacaaaVSatatBcaaScWccgaKttttc
+gtMaVttgatgtMatacatgNttBaNaagtaggaRaBagaagtaRtaagttacWatgHtt
+taagSaatgataNWattgtaSggHDtttBataaNNBRaatKWBgtaDcBaMaKtctaYat
+VaKataaaattWYcgtaHcttagtgYtgcKDtccatMSaaagatYcSaHatcaDtaatgM
+MatgcaaatgtttagaDDNtatttgaaKcNtagKYcaBMattaaagttaaWDacgRaRta
+KttaaattaVVKaMaBtaKctaaWcatctRMtgKcBaBaaagattHcgMcgaSNgactac
+cRatHtaSNtctYcaaBDtaggaagcMatttcaBcDaaatggWtcaHctaKtHcHMcRga
+ttgaMtNVaDagttaggcttYctcatDacWDaaaaaKtaBgtBaatcaataaKgactgac
+tcNcattMcacatNMattgtaaaNaaacttgctaRtttacttaatKYgcttgaSStgtaD
+aNgtaKgBgMaKgccagtgtMgatHDtgacaWDttHKaDgMacttaKaagBtttgtctta
+agMagtaHcttWcacaatSatgYtgacHgHcaHDgtagaDccVaKcaataNttccHYctc
+taSRtaYagtNgDagatWtRttSttNtRNagacatattttatggactacYMagtMacYaa
+gYgVgKgtNtaVcgtgaatcataatcgattYtaaatYtctgBaMgNWNKMgDttttaWta
+BaaHatNHaDacctccNKtgaVcWattYtgccaVRattMacBtcccNagYttBYNgaBaa
+aStWacMgcttccatgHaacttYagMtNaaVSYgcgatatHcaatatttgtgBcatWMta
+aaaDRttHaBaHttgaacaaataaWaMcaDctgBtatWttaacaaWacacWtDtatttat
+WaaHacaVagVgKaaaDttWgRBVagttVNttctgcttgacatttSHHMKScSgSaMtDt
+aMcgtcaWaacactMcaHWRgaactWtcgcMNcactVDaatHcDSttWtagactatgaRN
+cttagataYgaggaagagcaSHcWtMaKStatgYatttttVaattgtttWataaaDaDga
+taMcaMtatttctVKaKgcttcctDagtgatWatacaRtttaaaBSMctHaaatcagSta
+tStgaaVttaattatttgctaagcgagaWaaWtccgcaaSgaatVgtaStMcSNcgtWgg
+MVWNatHctggRtttaacNagtttRtaMBgatatHtaatcMaaaYgatMtaccttaagYa
+tcgaaattMataaHatYMcccaaaDaYaVaWgRaHaaaMcHSattcatWSatttcaMtga
+taKBYtactgaNttgaaDactgBatgYgttaagVgaagDagaatttKNtgaMtHagtaaH
+RgaaatttaYtaccNcgWNcKtaYtBMctVBWttttaSagRHBtaHtcgtactHggagta
+atttaaaVVattWDgtaaHaYgDtaacatDtacWttttttatgccacttaDtagtaaKgY
+NcttMNDaBcaVMcMctWgatactaRcaaWagaatgcWcRtattccagKgaNgtctcKtW
+gaNtSttagVaagaSYtcctWatatSgaDaKcactcgBtYacDgMtaKggtKcDtRtRgS
+aNKctaatHtRDaRgatatacattagtgccSttctDgcgatNcatttcHgcKtagcYgtt
+ttgNKWRattgBtaaNcRaatcNaagcgaaVKttYtWttaBttttttNggKcgaRBMVtN
+cNtDVaaMtcBNaKtaataRMcaaaattYactactBattWcgccgWaaMtaBYtgtaHag
+tcttVttaggaHVaaNaNaatcttgtgcattttatMDYKccataScaWgNttccttttMa
+RcVtWHgaaatgBaaRatgcgatataaaWYacYggtacttaaaaDaaattgatcWaatgt
+ttRcatatcaggaBcttttcttVKatKccaccYtDatMtcttacMtSattaatatagaat
+gSgagYgWNtttagtatgRggYKacaatattgggVtttaSaYcaRtBcggtDaggYaaac
+tNataggaggaDgaKcaaataagatMKaattaaNagtagttcWctataaDtttcgtcgta
+ttaccStgYgatgKtgcccYatDctYtttttYttaaaagaactcaNVaaYaYtccagacB
+ttKcaatKataatKVWcBataaatgttcctatYaacttaSVtgataggVatgagttgatc
+ttacgMMgtWtYtagcacaSctcHYtataattMttataYaaccKgtgtaaKcYagaaVtc
+BKattStgcaaKcaKKaHgtaaBtctgcaattaWgMcgYttMctWtaDNcDatggWaatt
+ggaVDagKattttgaaaRHattgMaaMgtaatcattctKgNaacacccNHataaaatgaa
+agagSatKtacVagttggtcgtgcBtgtgcatgagcaacataagKtcagtttgtDBBHWc
+gaDtatYttgattcttaaagcMMttaKgDaHtatVgWHccgatKttcaaNcYtcaaDWDa
+tcaWtBtWHgctaaMDaDWtWtNKcRRaNttVgHaRgKgcWgattNaaattaataNcaRt
+agtRgaacagataDKgtatScattaDgatcatMtcgYcgtttaaaRctcagcRattaaca
+tccStcBtgaccgtgWaaagaaatgaaWtattaVtHacctaccaaatgBgtaVVYaaaat
+ccKgtcaactataDgNagtcaSgtKttacHtccMKKWattagtatNctattagtttWttR
+tgaKaBHStgRagattaKRtWaKttaaWaagtaVccctgcgMRWatgttNKgtcSggSHt
+aBttgtaYaatDtaVtaatgtHcatWaYcMttataVgaaaaagBgaagRattccggcttD
+gggcttcttaacttRgaStaMBaaMtctMBHBacttVgKggcttgcgBcBtgDtttccta
+ttaaRcatStNgcKgctatcccacSctcHtaHWtgWaYatgVaRRYtgctaaaatggaga
+cctMcttgttMagBaKctttYWBtaYKgcccYttaMgtHaaNYgtgtagagDttcBatgt
+StttMtBWtaaBctaggaaNgaRgcttttttgtagacRttHSagaatDaYgcctMBtgtN
+SNaaBttgVtWtttKgacaatatVttVatagatttgcgtcgDtVgtSattaaaVHtaDaa
+tYttatKSWtcattagtaaNatctcagcgtgcKcatDtaBccaaccctgaYcattaNaag
+NaKgagttttcattaHMaVKMDDtaSHScaDattgcaggcccMattatacYtMatWgatt
+tcBcBtBctKacccaaWctatccctcaacaataaataaMttgtaHHcgatKgaggBtRYa
+ttatacgtaYNBacagacaaatVtMcttttRtVcaattgtttgaWtaaSacaRccMcaaa
+cttttaaacgtacVBtcWcSaYHgtattacgRtgtgtaKgWgaatctaBtcgtgRaaaWW
+VBcaNtcgctgYtaaaHaSccaagaVMNaacagattaHRaaMWcVgMtctgcatgaagRD
+attactgcKHtcactYtccttatgHtKgMgKcDtacNtcaStgYccaaDagttDtttgYc
+aagcacWWttaMgccaStaaWtVactgaagtKtttcaWaatgMattatKcctctttttca
+tgtaaactttNcaaKgttttMaMcYtgWctMtttactttagaKtMgttDYttctatagWc
+RttatYSagacttcaScaacaYtSaattcaaagtgctSaagctattaaagggtaactcac
+gDKgttaMRgggattttMcgttattaVtccaNagaRgMaataaagaStcSaacgtaWtta
+tatHgttHBcgtacggKBtSatDactRggaRgccBRttctaaaatSactcKtttVaWRat
+atttWaHaKMatgtacatcagctaatggBgaBNSNatatcYStagaatSNattaccgtca
+ataaggYMRtaDaatVgYaDaattataRgVaagtgcaNKtgttgacttatHccacHaacV
+cWcNMDtatcatttttaHacatKtatagtgccWttaattttBSDaKaHaDttYacDtBgt
+MNgggBaaaaattDaaVMaKgatcggKtgtctatctctVatcDtaagaagtgtaMcWatD
+ggaaaaaYtcDVtNttcNacgaYtcgatHctctaWgaaggtMttcKtcttaMgtctKNag
+cRWcgBVtcBDatYKtctaVaaaBgtaRagcacggcaHHagcagaaaaacgggtataatc
+aaWtacYcWtcctaBgVVaBagHaaaaaatataRYagaacgggVtttcHaMtNtMgcgaa
+atKtattaagtMttatcttWttttRaatatgttatgtatttRaagKtBgtgHtHDggaBD
+tWccattcKtttagtttagtBYcDaMBtgatcttgacatKctBcaaaacaHtatggaNaV
+ttcgttatttttttcaaDtDDaatcaaaYaaBHttaMKMVgctgWtacVtRaaactgYtc
+atggcVHtgattRttataBtcgaaRataDttaatcattHtatatccNattcaaHtgKRtR
+tagtKaRWaataYaggatccacttcacaatgtgatMaggactNaaccaaMaaKtagaaMc
+tacttDSaaaWSgctcagtWaataWaHtStMacttaDtgagWaaaatatttatcaacaac
+tRtDgYcYtatatgtataatWtagccaagcgtttataatDgctgVaaagHaattagaatB
+WggttctBaNtactHtKBtcgaaaRttHBatDaaKccaSHgtgctWttcBaatcctYttg
+aHacgtatgagStatRtMaacKacacggaaSctagDagNttgaKKSgtttctacgtagSa
+taHttDctggBcYtttaaatcgRgagagaDtgRSaVStggVtgacgtMtatgaaNtWtHg
+tDaDtgttNaSVagaattccgcttVatatacattatataYtaggYaaaRDHttHYDtNgc
+atHggctattYtaMcWaaVtaNtatttHaagBtatcagatHtttgaaWWtttKaaaggBt
+attHagtaacactDggtattttScttaaaacaStcaacHttMtatcagatSaHtaVtBaN
+YcttHcatgHatagaaggggaWgtgBtttagtVttgacatYtKtattaYSggtaaaHgca
+ggaStHtYcgtaaDWgtaaaMcgYtNHtgNgcttttataWatttKWaaKtHattgRtBtM
+MccgtBtYttgaKaWBatcBgaaacaBgaagatYgKWaaacBgatgtDaaacttDcacga
+tSKtaVaRDWtVKgHtcRattactctattBacaaactaatgDtaatcatatKRattSggt
+cggRMaaHVtgttMcgatatcccgVctKMgBactVtWtBKtgWtaaaVaatRgKatttKS
+aYHtcVBNtgStgtatNStaaccgttaaaaYactBgaaaaattacacVttKattVNgaMa
+ttNccctaVtaaStctgaaVatactgtctaaaKYNDtataWtattaaNgtHtaWgaBMtt
+ttccaaaDcgctgagBacacttctDSctcMtBtNccaacaaatSVtatWggagSattKat
+RBaaaNtNtttagacttaagtHttaatcgtWctHaMBaHtaaagKaaKttgatattttgK
+cgtcDtgtKtHagDtMtatgatcttgtcSgtWgctaaaaattDaaaNgNYtMttNHgtHB
+ataatMgMttctDcgtNtNatggKatHtaaRtRtDStttRVcaatKgaaRSRtBttatcc
+ataaMttagcaaWtagtVgaVBatcVtYtagttgtaMactaaataDatagNttttactag
+cgcKctDatatDgaHtRatVWagaDtttcggSKataacaggaaKggMtttctaVttMaat
+gattcgaagcgattaNNtYactttKgaatWttNNgctatatgttacKaMtaaDgtKgttB
+ttHtDacaagaaRgDgttWtaatgVBcaaccatgcYggtRcctaaDaaHcatYNaaVDNt
+BgtBaattYYgcHttRctattVtattgttcKaaatagtacccttgcVtaaHttaagaKta
+agSaYtgcacttDattYttaVgRcacaattDDttagattttcHagccaYaataKaatccV
+DKctNcctcaaBccaaBaYgKacWVtWttatgcSatcDHttattaacaagaacRSactBH
+ttDaBBBcacgttactHaKgacaKtaWMcHtaVHttaattcgttatatBaaagatgaact
+aaYgDNattNaHgHKtaatcctcttcHttagaatVcagaHtagBgtMataattaagtcSR
+catSagMagaaaacgYacgagcacgBcggacaHKaaBatSatagtatcDttRHtcagtDt
+aStYtagaaagtYNHtgaacaatgcgataaNgtNVagtacccctBcgaYWaactRtDtat
+ttKatBccVKtHttNcttVtgaKMtgcttggcgaNatctcKggtcttttataaacWaBtt
+cgHtcaHtcgatcgcggccaHaagcVgKattBaaWttKcttaVaagYaVacagaacgcSc
+DcgatataagttttacaaKcaaaBcYcHKctRagcgaatgtScBagMttYHtaatHcKKt
+gggatgKSaaatactgWBHVcagHcttVBgYDtaVtcctcatRcVKcNaaYaBtatttta
+tRtVtDaaScgtatacMatcaaactagtaKataaatStHtacaagagttgtYatctagaB
+aHSYtaaataaaStacaHagWSRSDtagtatggctgaKtaRctaaagBtactcttatgBc
+HcNtNRNtHataaccRttagatataaHtacScgtattgttgtDcctaYRaattccaNatg
+tgctaaaactMcaWttgttgVMaSgtaVaSctMcagtcacNaWacgaatWtaRtaatSga
+tgaaWtaaWcgtttHtWcttgatKtgDtDMcagtcattcacttgaaatactWgtattcHt
+tcataactgctgtgtKatRagtaatttYgNcaatcBctgtStaggtaMatacgtYaRNtg
+NaHtNccRtgcSHgRcaatttVcctattaBKtgYtaMaactRaaaaBaattHHtatVNWY
+HaatcagtaMVtttctattWHtttacaaVccDctYtttVtNtRRKtBgatHtBcaatHYa
+SgaagaagHagtttDaVaattVactactYcaDtKttgVVVtaWtggctaSttgtaataDc
+tWactcaRttWcMSYtWagaagttctKHcgKtDaYggaDttgtgtataacaRKctaactt
+cYaDtccNaNttaYtaatagRttaSagaatBtVRtaatcttatgcgtWtataaWgHataa
+tttYYSttYcggKKtaHcttttagHDDBtggtttaaacatagaRagtVagactttacKaW
+DMacgYaacctgctKaNattggatggNgtKcYSttttcctttDtYttBcatgattSHaac
+cVtccatctcccacDBtgaWBaMaaccgttttcttaaMgScBNatBtagtcttccttatK
+BRcctggtVStatagcDgMgtacattacccattKKtaRcRatRctYVaSagttatatYtc
+gNDDggKaHggcccgcRtacgDtcYctgaaacHtatattaVtcaattaaatgaWaBggYt
+HYYaVagWacaNtDtaRattgRacRtacacatgHtagagtaatatttctgDDcttgNDag
+cctaaHtatYHtKtRaScgtattMttacaacHggttttatSgaHVVgaattaatagttat
+tactgtRtaWgataMDaaaactgNYacYtagKtaRcaYDHatatVatggctKtWatHaNt
+taatttttgtaagcctggcgKataaNtttRMNggDtataaaatVcMRataacagctMatB
+gMtaaVcgagattcaaaSgtgKacgtDHatWaatgttcDtWatgYcWRttcatBSHtttg
+aatatBgaaWgggaaBcctSSVaagctSctagYatDggtatatgtaatatgtatgHYcRt
+agagtHcgggcataDHattcaaattcRgcaaaataagattcaaYVtaBtaagRagtttgS
+RtgRYKgWggtttaaHgcHStgtggtctaHaccaccSaaaattaHatgttVtataccaga
+atDKVtctagtttcaatgtNctaccgDcacgaattacactatgaaggccKVatccaSWaa
+KHtttSggatgagMagttgcaatatKYtacBttaccatHRttaacttacaDKKtaKaDcH
+HcaYatatgMagaRaNNttcggagYRtacMtHgacttagacBaagggBatcttgaRDact
+gatacatatcSBggtaaaVWgMaatttaYtaWacHattDMtttaaaRRScatcttctaat
+acagtBVgtgtttBagtatgBNcaagHaaaSaSYKcacMtKatggcacgcctSRaagcat
+aattaYacctMaaKtcggaBaVaaWaDMttgccttaaacttDaaHacNVtgagaatacca
+ctctMttaatcttHcctttaggaKgaggWtaNataYgtaggtgaagtcWDcWaBatattR
+tVgtRgVtataacDDNttatcYaaaagcaVgtYggaDattccgtccDcSttaaWtttcaa
+aatggataSatctRYcaaBctMMtcttaacMaSgDatgagatcaYgctcacHccMgaaca
+tcDNgtNRcgBaaatagaYgatgcttRaattStccttgagcctaVaagggatatcagtaN
+MttaaHcMaatccScBtYaYttatgaMNagtgHaatHacaHaBaaDtaRNDNcBtagBga
+catStagacttgtaatMtYaNaKSaccBtttHcDaHNBttBaacSaggagaacgWcMgtR
+caagattSctgtaBtcaatMtaHgcaaccataVgtaagDRcDcggaaccaBtacVMgStt
+gtcataaaaacaMataHatgttaacaaMgtacgtMVcatagYtKgtgtcctaBcYKattc
+aggBaaHagStcNcattatRRaSYtYDRaHYttttggaRggggttatKcVtHgctggaNt
+taagagBaacattggYaaDcSacggYaRttacaacactcDcacBDtYataaaaDWtctca
+ggVtaYttKtaVKtDSaMtYtYcgtaacHtRcHctaacBgattttagHaScDctHttaaa
+atVaHttggttatttDtatHtcaHcBagSttttDctttWtctaaataaWtHYtRgtBccS
+aaDSaNgatcSttaaaatgaYgKaaDaVatatYaRaHDtataKaNtagtacataggSaat
+MtctMtccctWgaYtaggataMttcgtacgccYgBSgttaaHgctRgRgtDVSRattttt
+taaKtRMtatSgRaatKacMaYgggtagBgNHcgYRagHcatatgtgaacMtacSDRMHa
+aacHaagtWSMcaattcagtDctBattgttcatttMBaDVHVDBtaatKactNacgcBYt
+ttgatctatVVtatcKaKSgtaWcgtcgNYatSaRtcaggaRtctattagattKHttYaa
+BtcacatataattMgtatcataKKatDVtWtaHtHHVaggaaHagWaHtattgtDaHRga
+tgtaaaWaaSStMatttgNtgtcagDWgagaBagtcattaataggagttcagcHttgWag
+aWcRttaKttaDgaDWtYacMWgRaatatccMtaaattRaatacaKYcgcatgtatgtNa
+ccataSttSatttttcgatcttcaaKcMDatgaattcaMWctKNcHtctacaYgatgcaB
+tDDWtaRtScaYaatYSgBtDcaacYataacgcDgtaacMtSaaKcKttttDVgttgtaa
+NcaattctcaataaatcSVcKaacattgggacatgaaaacggaggagtacDYgatMYtta
+aaBBctccYgcgagccHattttaWtataYcaKaaDYaaaStMctSattaatataNaWcac
+aataVtcatacaHcgMgaatYgaataatRcWcgtttcNDYcacaaacacaNttttaatct
+aKtRttHDSttccWatatagtKtgtcgaccaBgtVacNaYBHgtttSSagcNtctacctt
+taacgacaDcWVacSHcaNacatttgBYaaagatWagaacYMatcKgBYcBggtaWatat
+aKcNgaaaattHYtSaYDVHSactgttNRgaaaMBtatataaaaacVtctWtgKggtatD
+BgHaKaHVcMWtYYBaaattaVtcgaaacatggagYKtaaaacagttNtttatcatgcta
+gYcctctNgttctgctaYttBataaRtattgatgaaactagttBgagtcttccatBagat
+ctBaaagSacagtaaStaaatatataataatcttaactatVtaaBattHcHgcttSSaaD
+RaKtataagggKaacRagBaggtaMYttggtacMatMttttYttaacttaBaYaaaatKg
+tactactKDctcttgaDtMgattgVgcRaaaKattaatataagWgttcaWgtcaKtatcg
+acatDaaSatHtttcagcNtatSggtgtaRtgatttStBaNaHgcagttaggggatWttt
+gattttatcgaBtctaggcgtgtgtWttttaaSaWKctWggtgataaaattacBtMRtat
+ccattaaSWttaSMcYtHtaacttaaBaDattctatKatctttcatDtcgNcgacttgta
+aaattDcaVatRacatgaaagtcctgtctcatacatatcSWgNDttgaaVKatNacDgga
+gWaaatgaaVNtttBataaagVttVataataYcNMVaNaKaatRMcagNacVRactcWgc
+tttNatHaRaBRtaaatRtaKtNgYWattaatcttaRttgttcttaaWaaagttcNVtag
+MaBatcVcgccDaaBMgKttgaVaaccgYtRaactttYtcatgattgtWSaaBatagtag
+SataDgatgNtaWatcaMttaHattagVtggagaNHtaatatctNaagaDBatcttttaR
+aaNtBYagtaacVttYBtaagcaaaMatcNgKaggacagagtgaRatWaDaaSaDaaatt
+VgcWttatBNctgSagtctgcSttacSRtgatHDgggcBagccDtatYaaagaataDgat
+DaBttagctatcHtcWtagggagtDtSaaacagtagcttVatgttggcStataacttVta
+atWKtatDatcttcDaagactgtgDNBaccaattaacaaagaaHWtatttaacattWaat
+gttcMttaNNcYaRccHtacRagatccKaaYactcVRDtcHVtgaaNaSatctRSaWtag
+agtcgcaataDcagBaagtctSNagaaaKgttataStaatagStaatSatataWttctcg
+taDgtYRcgtHttaKtcDttRaatNacYgtagVaattNttttatDgKcttttSaaattYc
+gYBaaggttctagYcBataacVcagggaWtaKtacatgcYcctatccDatatagtcRaaa
+SMgtggaatcaaMaatWcgctagggtcattaVtctaatgHcaSHtcacttBaagaMDtac
+tYgtttgWgacccStDtagaDaBtgctctttKaaaatMttNStggtttatWttYttatKM
+KgtctaKcgaBaaaattcccgacYtBcaKaKttRccaaBaWgMaMatgtWtcRDWttcgg
+acNctataaacKaaatHatggDatSaaKtgcgRaaacgtgttcatNtgHtcaataaacaa
+WMKatattcWaKcNaccWtggttcctBaMttgRtggtWtaaVggDgttaDaScgWccWHa
+tacaagtaHtaacttWaNatgtgttaacKaVtcataDMattgtaKccttttttStaaDDt
+HYattNtcgatataBattctWRatMVtStaSaWttNRacgatagtRcgcRtcctttacag
+BKaaVcYtRaKatVtaWttaVggBBatcaaWatgtggagattDgWtttcaataDtactRa
+atBattWVacttWVNtVagHaHtatttaVagtRMMtaBattatataaNaagatHBtgtat
+VtaaacatttagtccaKDcacgWaaHagttVKBgcgRaSYtttVcgaacaBatttaatct
+aSYtccNtcatctatttatBaHcattcaBgDMYtactgScccttRctaagtaaNtaaaaa
+ttatggtVataaagVStcaatcacgcDaatgtaacatDBagtcgaaRDaSactgcagaHg
+ttYatgaVgtNccttcaKHgcgataDcgYtgtgBatcacScgctBcVttttcYaaNtttt
+tatcBaatgataYgtgttgtatgaVcBagtatagtNaRaaatKVtcRtcWatctaattgt
+VgataaMataWagaDttaatRcgctaKHgaRagtDctScatNgHgtKgtDtHBVgYcaga
+tgttagcgaataaNBactBaaRaWcRcMctctBtWKaggcaataatSYtccagtRtaSVt
+RgatctaBgDNDtBgtttgtaNtWtaatatDtataacgccDttcaMaMatgRtgaaaMHa
+tgBaatgcccDagNgttRDcWtaaaKtMSaBgctgcaatgtSVattRWcBtDaaMKRccc
+WtVttaaatatttctgtcatNBgaaaatHtttWtYtttcaacaaagaaNYBaatatctga
+tNtgaacaaMaaYcNgtgatttWtNaatWcYMScMctaaStttNgHtMacgtMDtgagca
+ttcacWtttKttBtKaKcHaBtttaBacgaaNYaaaatBaatNHgaaatMtagatDcaag
+MtaattctKtgNtScaatagcaHDagtagagSRcagcaagaccYHtaNtBatKtStcRag
+tgttMaYgtgggtNatSaatStcYtaBaSBtaggtctMtatcatgaattactcYtNagaa
+aDtggaaatKBattaaatcWgKtStKtcaWMggaattYtggccgaWcacagaNWaNgaac
+aYaHgaVtMctVHttaKDcctNccBKMDagtatgcHtttaaaDaggtgHtattcatattt
+aagcBaaaRcSgttaaatgWacRatacaaatgBatYatatRBcacaVataRaKWMcDWtS
+aatatHattcVgMKYtgtaVBtgagattRgaatgaDgtcaStacgctaggRggtSagKcW
+YctacaagtttBtgaBttacgaStHgVaStgtaRtacaDccNDattSRgttatMtNtttt
+WHacDtttVtgacgYattccWctaagtgaaaMMatgNtctaataRctgaacatttVcNtg
+tttgaggcaaagtatgVgtaVtgRDcttBDtataaMBatatNgataataHaaaNacaStg
+aNaHgYtgacagtcYDggagattNcaDtKgtagMaacSHRtcagNagatKcatataVata
+ctgRVatgBtatcgttattHtHcKaDtagRagtgHtaDcVtatacattacggcaKttatt
+gacatDaatgtctcattVcaRcttttgDtNHSggcttaYDcHaatcDYacccWaMttgRt
+NggYtttttggDgctacVDtBMgBaDgtMaaBgctBVttVagaHBaaaaatgNactaatt
+attNagaagNVaBgVtRgggatacgctgMtgaccatMaaDYDaagctggtcaatggtatB
+tNtccWtWKcaNcBttactgtgBYDaMtMtcWaatctWYHatccgWtataaaNNacNgct
+YagtaaaRtaaYggcagaMaagggttHaatatcaccVtagtggcgtMtagtcaYaaRttW
+gBtctgaaBtKattaatYtacaatcKcacNcMDtgtactatcDcgRtaaYagattgccMt
+gtYKaRaWHgtaccttagcRaWaagDataccagcatcYtcaaSgVacatttaSttSVDSc
+tactgaNctatVattttacgaggWgtaaaKtcNgatgttgcaaNVttagRtttttRttYY
+aYcaaagcVDMaaRaRtccVcSattttcaattagWattMMctataWatggtaagagRaaa
+ttYKKtgatagcMYgcVcgggStattacgBBctNtRgacaacYHctctNtataattBttS
+taRaaaatctgtWatcRacaaMtattYttKtccaatcSttatgtaWttcgcaaWgtWNcB
+ccRgtBagNgYtDctatccMaagtgcYMtYctYttgtcVaaHtatgcBaaBcgaataatt
+cttcDaacaaacBtagWYaagcaVacYcKYttgSaKVcttccgcctcattctcaatgVga
+aacatWWctgcagtttctttttMagWttatRggcattattVaagaBBttatctattatMc
+NtaacagttgaaaBaRtaRRtNtataYNtttNtcctaVBtatNtNgBtaHHYDttKctaD
+ctcaNcatgDaYatgYagaDcaHgactHgWWaagWtSttctagKaaggYtcataYgBtcc
+RaggggaaaHagaacaDatgaaaatcaKtattgWacgtcMSaacYaYgcWYNgagtaMgt
+SccgaaaaaatctggaMMRaaaataatctaaacgatatgDaggaVKcttttaatgacBtt
+NYttagtatDagYttWctttNgtHtcVtattHtcHacattatHgNStgtSaNaactVMca
+atcccBHNatcttDtcgaKccKttatttctVRaagttaMtaYtcttcatMYRctttRtaM
+gSaaaactgWacHagtacccatttcgcatgagtaaagtHcaKgVBtaattatBtttWatg
+MctccattgactattcttgtcatSttaaHaVtKtDcatcatatccaacKatattatNggN
+aRatcMSDHRtcctYRaatccacYaatBattcttBVctatatttRNtgaNtcaaaRgtaB
+cttaaDRcgctacWcttgatatctHttttgtNtYatatacgaVBgYHgattgggtcgaca
+cDtttKVcaattWRcaagBtgctDKDaYtttcKgNgggtcacVagatMgtMVgVgatttc
+agtcgtgKgtKYgtYSaMtgataatNggattKNgaSggactaaBagataacactcataVg
+ttataaSacaatcRRaagtaDaagDYtcactgtgaVttWtBaMttttgaHtKaYtattcc
+agccaaBaggataaRtBatNcatgtatatttcttacaaYVNatagaaagaSaaaagaaat
+SaBgtcgattacattgWccttHNattataacgVRDtYcWgaaYaVgMttcttgtDtKaYV
+ttctgggSNtaYHWaaHactaaSSagttgSaaactYaMttaMaHVRtcgattaccHtcgc
+gatgNcaYtatattacgcHaaaMNMtaYDgacaggRgaYVtVKcaSVcWMBBaWaWcagt
+atHaWBNaMcBtatccatgaScHtYtgactcattgaYatRtacttYtctttgBgtattaa
+DtcaHgcNcaVatagtttggggRaaaccWcNNttRBgaaRKgaaNtMaagcVacgtgtta
+aMYWtcBYtgagtaatcgttttaatcgaaaagttDcaatgtggtBaBcNtgNatBtggac
+tttagYttBcgttRttatSgacNaDttatRKacactgcSKaVaaaRgHaattaaaRctga
+tKaWcctWggWWagccgaactaYccttgtgaBHggcYttttBccttaggaKtaaaBacVD
+cBYYgaWagaKtaHaaactaNttatagtcttttacgaccctttKattWcgHgcaDccctH
+ttatVVaagKaatatgggMaNHagattgNStatBatcgaaYgcVcagaatcctcYtBKDa
+tatcNKgacaatKDatgaaacgaaatYYcgNBDtataatMcRWtaagtataHgMaVggca
+aDtggttcVattattaaaatSVaMaNcDBttataYgttttStacattgagagtccaNtga
+atttttKtStatatttRaatttcgBDccctaaSWatttaaMBStcatacctgctctatct
+atKatatgaacaactctWBaNagtcgYaaaaRtctMtDgtaBaacaNtacagtcgataNg
+aVccgtttattatgatctagtDSgaHNcctKtcttatNtgatYKaaStctWDVcaaccga
+VttScaagaaaaVcccggagWatcVaNtVaRcNtcagatcMMatactaaaWaagatYHRW
+caSagcgMtttatSBtBtBgacRaVgtgattaagtBgtatcgtNggggDaWgagctgatc
+tatttHaactttcgcttttccatttNaaYgtattttactttacttRataBttgataggga
+cattattaaSaaaYtgatggaDaMttacttatttttttaaWttttaataaWaNaattgta
+BtBMcatcNtaaMtDaaaatcRgcatccaMtggWggHggagSttacaYHatYtgtaatca
+tttgVtataaDVttcaYttctHtHtagttWHNYYtVRVccatacaattaaaYatcgcatB
+agcaatDaWacVaBWattagaaBataatgtKaaaNKcagaactNaagaNatgKtBSctga
+ttgWcNaaSataggtataaacVaatDttcRaRtVtVtgtataagMtSccaSScagttgat
+YattcagcMaaWctaagtYcSattNccgtcgtaBtaattgttgacaaaDttttattaata
+cSKtcgcatNttatWatacgRtgcataactYtcacHgVgHttYaataaWacgSVKatact
+agDggcattKctggataagtVgKYtatgttagcgtaRtttaaagacHgacacattcHKaM
+KtcgKtcacggtgatcaaBtMttcttattcttDaKKVgWagtaacatgKatVgacattag
+WtaRtaccRaaVHtttttRtgBccagtcgctagtRtaBcMVWMtaBtaggttaYcttaga
+SgYgttttcaaNNgtttVaagctgStttactaacWattcgtVgtgtKcgtYaaaaaKtaS
+aattgBtYgaVcagKatgaMttWDRatgtaatctagacWaccgcaNgtctgtgagtMttg
+aaatNtttattaRKcgtaWatcaWccaKtttNactaatNcgVaaBcgRgDttcDcatttg
+agWNattttNaYtttatgcHtttBBacgttgRgtcataNtatatcaWVcatgaacatRgt
+NaWaatcaggttaaSctttcaacatHttVKaHtNtMtcttcHattYatcgatgtacSaaa
+taVtcttYStaagattDagtKccgaccHBYatMtcggBacatVtaaagMcttBgtSagKg
+NttttcNtSaaMaStHgtattttKaRttaMtDtcKtcgagDKgaaaacttaaaWNaattg
+aWWaaggaaacKtttVggMBcatattDacctaMgaaKgcgcaaMRtaatcgataaatRDt
+tataNtVgtaVDggttaNgatBgtggcaaYWtagctcWgtSaacgtattKcgcBtttDac
+aaaaaStKMtatNccagKatgtVtHtWaSBgDttgWgaattWagttttaagcctNcttaB
+tYttaRactaattggagagggtctagtatgggtttacttBtatcatatgctaKggNcata
+aaSatgtaaaDcDRtBggDtctttataattcBgtcgtactDtDagcctatttSVHtHttK
+tgtHMaSattgWaHKHttttagacatWatgtRgaaaNtactMcSMtYtcMgRtacttctW
+BacgaaatatagScDtttgaagacacatagtVgYgtcattHWtMMWcStgttaggKtSga
+YaaccWStcgBttgcgaMttBYatcWtgacaYcagagtaBDtRacttttcWatMttDBca
+tWtatcttactaBgaYtcttgttttttttYaaScYaHgtgttNtSatcMtcVaaaStccR
+cctDaataataStcYtRDSaMtDttgttSagtRRcatttHatSttMtWgtcgtatSSaga
+ctYaaattcaMtWatttaSgYttaRgKaRtccactttattRggaMcDaWaWagttttgac
+atgttctacaaaRaatataataaMttcgDacgaSStacaStYRctVaNMtMgtaggcKat
+cttttattaaaaagVWaHKYagtttttatttaaccttacgtVtcVaattVMBcttaMttt
+aStgacttagattWWacVtgWYagWVRctDattBYtgtttaagaagattattgacVatMa
+acattVctgtBSgaVtgWWggaKHaatKWcBScSWaaccRVacacaaactaccScattRa
+tatKVtactatatttHttaagtttSKtRtacaaagtRDttcaaaaWgcacatWaDgtDKa
+cgaacaattacaRNWaatHtttStgttattaaMtgttgDcgtMgcatBtgcttcgcgaDW
+gagctgcgaggggVtaaScNatttacttaatgacagcccccacatYScaMgtaggtYaNg
+ttctgaMaacNaMRaacaaacaKctacatagYWctgttWaaataaaataRattagHacac
+aagcgKatacBttRttaagtatttccgatctHSaatactcNttMaagtattMtgRtgaMg
+cataatHcMtaBSaRattagttgatHtMttaaKaggYtaaBataSaVatactWtataVWg
+KgttaaaacagtgcgRatatacatVtHRtVYataSaKtWaStVcNKHKttactatccctc
+atgWHatWaRcttactaggatctataDtDHBttataaaaHgtacVtagaYttYaKcctat
+tcttcttaataNDaaggaaaDYgcggctaaWSctBaaNtgctggMBaKctaMVKagBaac
+taWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacggtttNattgVtttctgtBaWgtaa
+ttcaagtcaVWtactNggattctttaYtaaagccgctcttagHVggaYtgtNcDaVagct
+ctctKgacgtatagYcctRYHDtgBattDaaDgccKtcHaaStttMcctagtattgcRgW
+BaVatHaaaataYtgtttagMDMRtaataaggatMtttctWgtNtgtgaaaaMaatatRt
+ttMtDgHHtgtcattttcWattRSHcVagaagtacgggtaKVattKYagactNaatgttt
+gKMMgYNtcccgSKttctaStatatNVataYHgtNaBKRgNacaactgatttcctttaNc
+gatttctctataScaHtataRagtcRVttacDSDttaRtSatacHgtSKacYagttMHtW
+ataggatgactNtatSaNctataVtttRNKtgRacctttYtatgttactttttcctttaa
+acatacaHactMacacggtWataMtBVacRaSaatccgtaBVttccagccBcttaRKtgt
+gcctttttRtgtcagcRttKtaaacKtaaatctcacaattgcaNtSBaaccgggttatta
+aBcKatDagttactcttcattVtttHaaggctKKgatacatcBggScagtVcacattttg
+aHaDSgHatRMaHWggtatatRgccDttcgtatcgaaacaHtaagttaRatgaVacttag
+attVKtaaYttaaatcaNatccRttRRaMScNaaaDgttVHWgtcHaaHgacVaWtgttS
+cactaagSgttatcttagggDtaccagWattWtRtgttHWHacgattBtgVcaYatcggt
+tgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcVtaBtWaaYatcDRaaRtSctgaHa
+YRttagatMatgcatttNattaDttaattgttctaaccctcccctagaWBtttHtBcctt
+agaVaatMcBHagaVcWcagBVttcBtaYMccagatgaaaaHctctaacgttagNWRtcg
+gattNatcRaNHttcagtKttttgWatWttcSaNgggaWtactKKMaacatKatacNatt
+gctWtatctaVgagctatgtRaHtYcWcttagccaatYttWttaWSSttaHcaaaaagVa
+cVgtaVaRMgattaVcDactttcHHggHRtgNcctttYatcatKgctcctctatVcaaaa
+KaaaagtatatctgMtWtaaaacaStttMtcgactttaSatcgDataaactaaacaagta
+aVctaggaSccaatMVtaaSKNVattttgHccatcacBVctgcaVatVttRtactgtVca
+attHgtaaattaaattttYtatattaaRSgYtgBagaHSBDgtagcacRHtYcBgtcact
+tacactaYcgctWtattgSHtSatcataaatataHtcgtYaaMNgBaatttaRgaMaata
+tttBtttaaaHHKaatctgatWatYaacttMctcttttVctagctDaaagtaVaKaKRta
+acBgtatccaaccactHHaagaagaaggaNaaatBWattccgStaMSaMatBttgcatgR
+SacgttVVtaaDMtcSgVatWcaSatcttttVatagttactttacgatcaccNtaDVgSR
+cgVcgtgaacgaNtaNatatagtHtMgtHcMtagaaattBgtataRaaaacaYKgtRccY
+tatgaagtaataKgtaaMttgaaRVatgcagaKStctHNaaatctBBtcttaYaBWHgtV
+tgacagcaRcataWctcaBcYacYgatDgtDHcctaaagacYRcaggattHaYgtKtaat
+gcVcaataMYacccatatcacgWDBtgaatcBaatacKcttRaRtgatgaBDacggtaat
+taaYtataStgVHDtDctgactcaaatKtacaatgcgYatBtRaDatHaactgtttatat
+DttttaaaKVccYcaaccNcBcgHaaVcattHctcgattaaatBtatgcaaaaatYMctS
+actHatacgaWacattacMBgHttcgaatVaaaacaBatatVtctgaaaaWtctRacgBM
+aatSgRgtgtcgactatcRtattaScctaStagKgaDcWgtYtDDWKRgRtHatRtggtc
+gaHgggcgtattaMgtcagccaBggWVcWctVaaattcgNaatcKWagcNaHtgaaaSaa
+agctcYctttRVtaaaatNtataaccKtaRgtttaMtgtKaBtRtNaggaSattHatatW
+actcagtgtactaKctatttgRYYatKatgtccgtRtttttatttaatatVgKtttgtat
+gtNtataRatWYNgtRtHggtaaKaYtKSDcatcKgtaaYatcSRctaVtSMWtVtRWHa
+tttagataDtVggacagVcgKWagBgatBtaaagNcaRtagcataBggactaacacRctK
+gttaatcctHgDgttKHHagttgttaatgHBtatHcDaagtVaBaRccctVgtgDtacRH
+SctaagagcggWYaBtSaKtHBtaaactYacgNKBaVYgtaacttagtVttcttaatgtB
+tatMtMtttaattaatBWccatRtttcatagVgMMtagctStKctaMactacDNYgKYHg
+aWcgaHgagattacVgtttgtRaSttaWaVgataatgtgtYtaStattattMtNgWtgtt
+KaccaatagNYttattcgtatHcWtctaaaNVYKKttWtggcDtcgaagtNcagatacgc
+attaagaccWctgcagcttggNSgaNcHggatgtVtcatNtRaaBNcHVagagaaBtaaS
+ggDaatWaatRccaVgggStctDaacataKttKatttggacYtattcSatcttagcaatg
+aVBMcttDattctYaaRgatgcattttNgVHtKcYRaatRKctgtaaacRatVSagctgt
+WacBtKVatctgttttKcgtctaaDcaagtatcSataWVgcKKataWaYttcccSaatga
+aaacccWgcRctWatNcWtBRttYaattataaNgacacaatagtttVNtataNaYtaatR
+aVWKtBatKagtaatataDaNaaaaataMtaagaaStccBcaatNgaataWtHaNactgt
+cDtRcYaaVaaaaaDgtttRatctatgHtgttKtgaaNSgatactttcgagWaaatctKa
+aDaRttgtggKKagcDgataaattgSaacWaVtaNMacKtcaDaaatttctRaaVcagNa
+caScRBatatctRatcctaNatWgRtcDcSaWSgttRtKaRtMtKaatgttBHcYaaBtg
+atSgaSWaScMgatNtctcctatttctYtatMatMtRRtSaattaMtagaaaaStcgVgR
+ttSVaScagtgDtttatcatcatacRcatatDcttatcatVRtttataaHtattcYtcaa
+aatactttgVctagtaaYttagatagtSYacKaaacgaaKtaaatagataatSatatgaa
+atSgKtaatVtttatcctgKHaatHattagaaccgtYaaHactRcggSBNgtgctaaBag
+BttgtRttaaattYtVRaaaattgtaatVatttctcttcatgBcVgtgKgaHaaatattY
+atagWacNctgaaMcgaattStagWaSgtaaKagttttaagaDgatKcctgtaHtcatgg
+KttVDatcaaggtYcgccagNgtgcVttttagagatgctaccacggggtNttttaSHaNt
+atNcctcatSaaVgtactgBHtagcaYggYVKNgtaKBcRttgaWatgaatVtagtcgat
+tYgatgtaatttacDacSctgctaaaStttaWMagDaaatcaVYctccgggcgaVtaaWt
+StaKMgDtttcaaMtVgBaatccagNaaatcYRMBggttWtaaScKttMWtYataRaDBM
+aDataatHBcacDaaKDactaMgagttDattaHatHtaYatDtattDcRNStgaatattS
+DttggtattaaNSYacttcDMgYgBatWtaMagactVWttctttgYMaYaacRgHWaatt
+gRtaagcattctMKVStatactacHVtatgatcBtVNataaBttYtSttacKgggWgYDt
+gaVtYgatDaacattYgatggtRDaVDttNactaSaMtgNttaacaaSaBStcDctacca
+cagacgcaHatMataWKYtaYattMcaMtgSttDagcHacgatcaHttYaKHggagttcc
+gatYcaatgatRaVRcaagatcagtatggScctatattaNtagcgacgtgKaaWaactSg
+agtMYtcttccaKtStaacggMtaagNttattatcgtctaRcactctctDtaacWYtgaY
+aSaagaWtNtatttRacatgNaatgttattgWDDcNaHcctgaaHacSgaataaRaataM
+HttatMtgaSDSKatatHHaNtacagtccaYatWtcactaactatKDacSaStcggataH
+gYatagKtaatKagStaNgtatactatggRHacttgtattatgtDVagDVaRctacMYat
+tDgtttYgtctatggtKaRSttRccRtaaccttagagRatagSaaMaacgcaNtatgaaa
+tcaRaagataatagatactcHaaYKBctccaagaRaBaStNagataggcgaatgaMtaga
+atgtcaKttaaatgtaWcaBttaatRcggtgNcacaaKtttScRtWtgcatagtttWYaa
+gBttDKgcctttatMggNttattBtctagVtacataaaYttacacaaRttcYtWttgHca
+YYtaMgBaBatctNgcDtNttacgacDcgataaSatYaSttWtcctatKaatgcagHaVa
+acgctgcatDtgttaSataaaaYSNttatagtaNYtaDaaaNtggggacttaBggcHgcg
+tNtaaMcctggtVtaKcgNacNtatVaSWctWtgaWcggNaBagctctgaYataMgaaga
+tBSttctatacttgtgtKtaattttRagtDtacatatatatgatNHVgBMtKtaKaNttD
+HaagatactHaccHtcatttaaagttVaMcNgHatatKtaNtgYMccttatcaaNagctg
+gacStttcNtggcaVtattactHaSttatgNMVattMMDtMactattattgWMSgtHBtt
+StStgatatRaDaagattttctatMtaaaaaggtactaaVttaSacNaatactgMttgac
+HaHRttgMacaaaatagttaatatWKRgacDgaRtatatttattatcYttaWtgtBRtWa
+tgHaaattHataagtVaDtWaVaWtgStcgtMSgaSRgMKtaaataVacataatgtaSaa
+tttagtcgaaHtaKaatgcacatcggRaggSKctDcagtcSttcccStYtccRtctctYt
+caaKcgagtaMttttcRaYDttgttatctaatcataNctctgctatcaMatactataggD
+aHaaSttMtaDtcNatataattctMcStaaBYtaNagatgtaatHagagSttgWHVctta
+tKaYgDctcttggtgttMcRaVgSgggtagacaataaDtaattSaDaNaHaBctattgNt
+accaaRgaVtKNtaaYggHtaKKgHcatctWtctDtttctttggSDtNtaStagttataa
+acaattgcaBaBWggHgcaaaBtYgctaatgaaatWcDcttHtcMtWWattBHatcatca
+aatctKMagtDNatttWaBtHaaaNgMttaaStagttctctaatDtcRVaYttgttMtRt
+gtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaaRaBctgVgggNgDWStNaNBKcBc
+taaKtttDcttBaaggBttgaccatgaaaNgttttttttatctatgttataccaaDRaaS
+agtaVtDtcaWatBtacattaWacttaSgtattggDgKaaatScaattacgWcagKHaac
+caYcRcaRttaDttRtttHgaHVggcttBaRgtccctDatKaVtKtcRgYtaKttacgta
+tBtStaagcaattaagaRgBagSaattccSWYtttattVaataNctgHgttaaNBgcVYg
+tRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagMtttattacgDacttBtactatcat
+tggaaatVccggttRttcatagttVYcatYaSHaHcttaaagcNWaHataaaRWtctVtR
+YtagHtaaaYMataHYtNBctNtKaatattStgaMcBtRgctaKtgcScSttDgYatcVt
+ggaaKtaagatWccHccgKYctaNNctacaWcttttgcRtgtVcgaKttcMRHgctaHtV
+aataaDtatgKDcttatBtDttggNtacttttMtgaacRattaaNagaactcaaaBBVtc
+DtcgaStaDctgaaaSgttMaDtcgttcaccaaaaggWtcKcgSMtcDtatgtttStaaB
+tatagDcatYatWtaaaBacaKgcaDatgRggaaYctaRtccagattDaWtttggacBaV
+cHtHtaacDacYgtaatataMagaatgHMatcttatacgtatttttatattacHactgtt
+ataMgStYaattYaccaattgagtcaaattaYtgtatcatgMcaDcgggtcttDtKgcat
+gWRtataatatRacacNRBttcHtBgcRttgtgcgtcatacMtttBctatctBaatcatt
+MttMYgattaaVYatgDaatVagtattDacaacDMatcMtHcccataagatgBggaccat
+tVWtRtSacatgctcaaggggYtttDtaaNgNtaaBatggaatgtctRtaBgBtcNYata
+tNRtagaacMgagSaSDDSaDcctRagtVWSHtVSRggaacaBVaccgtttaStagaaca
+MtactccagtttVctaaRaaHttNcttagcaatttattaatRtaaaatctaacDaBttgg
+SagagctacHtaaRWgattcaaBtctRtSHaNtgtacattVcaHaNaagtataccacaWt
+aRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtKSttgtacgaccNctSaattcDcat
+cttcaaaDKttacHtggttHggRRaRcaWacaMtBWVHSHgaaMcKattgtaRWttScNa
+ttBBatYtaNRgcggaagacHSaattRtttcYgaccBRccMacccKgatgaacttcgDgH
+caaaaaRtatatDtatYVtttttHgSHaSaatagctNYtaHYaVYttattNtttgaaaYt
+aKttWtctaNtgagaaaNctNDctaaHgttagDcRttatagccBaacgcaRBtRctRtgg
+taMYYttWtgataatcgaataattattataVaaaaattacNRVYcaaMacNatRttcKat
+MctgaagactaattataaYgcKcaSYaatMNctcaacgtgatttttBacNtgatDccaat
+tattKWWcattttatatatgatBcDtaaaagttgaaVtaHtaHHtBtataRBgtgDtaat
+aMttRtDgDcttattNtggtctatctaaBcatctaRatgNacWtaatgaagtcMNaacNg
+HttatactaWgcNtaStaRgttaaHacccgaYStacaaaatWggaYaWgaattattcMaa
+ctcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgctccYBBHYaVagaatagaaaacag
+YtctVccaMtcgtttVatcaatttDRtgWctagtacRttMctgtDctttcKtWttttata
+aatgVttgBKtgtKWDaWagMtaaagaaattDVtaggttacatcatttatgtcgMHaVct
+taBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSctagtaaaaatttacaatcactSWa
+cgtaatgKttWattagttttNaggtctcaagtcactattcttctaagKggaataMgtttc
+ataagataaaaatagattatDgcBVHWgaBKttDgcatRHaagcaYcRaattattatgtM
+atatattgHDtcaDtcaaaHctStattaatHaccgacNattgatatattttgtgtDtRat
+agSacaMtcRtcattcccgacacSattgttKaWattNHcaacttccgtttSRtgtctgDc
+gctcaaMagVtBctBMcMcWtgtaacgactctcttRggRKSttgYtYatDccagttDgaK
+ccacgVatWcataVaaagaataMgtgataaKYaaatcHDaacgataYctRtcYatcgcaM
+gtNttaBttttgatttaRtStgcaacaaaataccVgaaDgtVgDcStctatatttattaa
+aaRKDatagaaagaKaaYYcaYSgKStctccSttacagtcNactttDVttagaaagMHtt
+RaNcSaRaMgBttattggtttaRMggatggcKDgWRtNaataataWKKacttcKWaaagN
+aBttaBatMHtccattaacttccccYtcBcYRtagattaagctaaYBDttaNtgaaaccH
+caRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatgataaVtcWKcttRggWatcattga
+RagHgaattNtatttctctattaattaatgaDaaMatacgttgggcHaYVaaNaDDttHt
+caaHtcVVDgBVagcMacgtgttaaBRNtatRtcagtaagaggtttaagacaVaaggtta
+WatctccgtVtaDtcDatttccVatgtacNtttccgtHttatKgScBatgtVgHtYcWag
+caKtaMYaaHgtaattaSaHcgcagtWNaatNccNNYcacgVaagaRacttctcattccc
+RtgtgtaattagcSttaaStWaMtctNNcSMacattataaactaDgtatWgtagtttaag
+aaaattgtagtNagtcaataaatttgatMMYactaatatcggBWDtVcYttcDHtVttat
+acYaRgaMaacaStaatcRttttVtagaDtcacWatttWtgaaaagaaagNRacDtttSt
+VatBaDNtaactatatcBSMcccaSttccggaMatgattaaWatKMaBaBatttgataNc
+tgttKtVaagtcagScgaaaDggaWgtgttttKtWtatttHaatgtagttcactaaKMag
+ttSYBtKtaYgaactcagagRtatagtVtatcaaaWYagcgNtaDagtacNSaaYDgatB
+gtcgataacYDtaaactacagWDcYKaagtttattagcatcgagttKcatDaattgatta
+tDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSVMaaaccagMVtaMaDtMaHaBgaa
+cataBBVtaatVYaNSWcSgNtDNaaKacacBtttatKtgtttcaaHaMctcagtaacgt
+cgYtactDcgcctaNgagagcYgatattttaaatttccattttacatttDaaRctatttt
+WctttacgtDatYtttcagacgcaaVttagtaaKaaaRtgVtccataBggacttatttgt
+ttaWNtgttVWtaWNVDaattgtatttBaagcBtaaBttaaVatcHcaVgacattccNgg
+tcgacKttaaaRtagRtctWagaYggtgMtataatMtgaaRttattttgWcttNtDRRgM
+DKacagaaaaggaaaRStcccagtYccVattaNaaKStNWtgacaVtagaagcttSaaDt
+cacaacgDYacWDYtgtttKatcVtgcMaDaSKStVcgtagaaWaKaagtttcHaHgMgM
+tctataagBtKaaaKKcactggagRRttaagaBaaNatVVcgRcKSttDaactagtSttS
+attgttgaaRYatggttVttaataaHttccaagDtgatNWtaagHtgcYtaactRgcaat
+gMgtgtRaatRaNaacHKtagactactggaatttcgccataacgMctRgatgttacccta
+HgtgWaYcactcacYaattcttaBtgacttaaacctgYgaWatgBttcttVttcgttWtt
+McNYgtaaaatctYgMgaaattacNgaHgaacDVVMtttggtHtctaaRgtacagacgHt
+VtaBMNBgattagcttaRcttacaHcRctgttcaaDBggttKaacatgKtttYataVaNa
+ttccgMcgcgtagtRaVVaattaKaatggttRgaMcagtatcWBttNtHagctaatctag
+aaNaaacaYBctatcgcVctBtgcaaagDgttVtgaHtactSNYtaaNccatgtgDacga
+VtDcgKaRtacDcttgctaagggcagMDagggtBWRtttSgccttttttaacgtcHctaV
+tVDtagatcaNMaVtcVacatHctDWNaataRgcgtaVHaggtaaaaSgtttMtattDgB
+tctgatSgtRagagYtctSaKWaataMgattRKtaacatttYcgtaacacattRWtBtcg
+gtaaatMtaaacBatttctKagtcDtttgcBtKYYBaKttctVttgttaDtgattttctt
+ccacttgSaaacggaaaNDaattcYNNaWcgaaYattttMgcBtcatRtgtaaagatgaW
+tgaccaYBHgaatagataVVtHtttVgYBtMctaMtcctgaDcYttgtccaaaRNtacag
+cMctKaaaggatttacatgtttaaWSaYaKttBtagDacactagctMtttNaKtctttcN
+cSattNacttggaacaatDagtattRtgSHaataatgccVgacccgatactatccctgtR
+ctttgagaSgatcatatcgDcagWaaHSgctYYWtatHttggttctttatVattatcgac
+taagtgtagcatVgtgHMtttgtttcgttaKattcMatttgtttWcaaStNatgtHcaaa
+DtaagBaKBtRgaBgDtSagtatMtaacYaatYtVcKatgtgcaacVaaaatactKcRgt
+aYtgtNgBBNcKtcttaccttKgaRaYcaNKtactttgagSBtgtRagaNgcaaaNcaca
+gtVtttHWatgttaNatBgtttaatNgVtctgaatatcaRtattcttttttttRaaKcRS
+tctcggDgKagattaMaaaKtcaHacttaataataKtaRgDtKVBttttcgtKaggHHca
+tgttagHggttNctcgtatKKagVagRaaaggaaBtNatttVKcRttaHctaHtcaaatg
+taggHccaBataNaNaggttgcWaatctgatYcaaaHaatWtaVgaaBttagtaagaKKt
+aaaKtRHatMaDBtBctagcatWtatttgWttVaaaScMNattRactttgtYtttaaaag
+taagtMtaMaSttMBtatgaBtttaKtgaatgagYgtNNacMtcNRacMMHcttWtgtRt
+ctttaacaacattattcYaMagBaacYttMatcttKcRMtgMNccattaRttNatHaHNa
+SaaHMacacaVaatacaKaSttHatattMtVatWgattttttaYctttKttHgScWaacg
+HtttcaVaaMgaacagNatcgttaacaaaaagtacaHBNaattgttKtcttVttaaBtct
+gctacgBgcWtttcaggacacatMgacatcccagcggMgaVKaBattgacttaatgacac
+acaaaaaatRKaaBctacgtRaDcgtagcVBaacDSBHaaaaSacatatacagacRNatc
+ttNaaVtaaaataHattagtaaaaSWccgtatWatggDttaactattgcccatcttHaSg
+YataBttBaactattBtcHtgatcaataSttaBtatKSHYttWggtcYtttBttaatacc
+RgVatStaHaKagaatNtagRMNgtcttYaaSaactcagDSgagaaYtMttDtMRVgWKW
+tgMaKtKaDttttgactatacataatcNtatNaHattVagacgYgatatatttttgtStW
+aaatctWaMgagaRttRatacgStgattcttaagaDtaWccaaatRcagcagaaNKagta
+aDggcgccBtYtagSBMtactaaataMataBSacRMgDgattMMgtcHtcaYDtRaDaac
+ggttDaggcMtttatgttaNctaattaVacgaaMMtaatDccSgtattgaRtWWaccacc
+gagtactMcgVNgctDctaMScatagcgtcaactatacRacgHRttgctatttaatgaat
+tataYKttgtaagWgtYttgcHgMtaMattWaWVtaRgcttgYgttBHtYataSccStBt
+gtagMgtDtggcVaaSBaatagDttgBgtctttctcattttaNagtHKtaMWcYactVcg
+cgtatMVtttRacVagDaatcttgctBBcRDgcaacKttgatSKtYtagBMagaRtcgBa
+ttHcBWcaactgatttaatttWDccatttatcgagSKaWttataHactaHMttaatHtgg
+aHtHagaatgtKtaaRactgtttMatacgatcaagDgatKaDctataMggtHDtggHacc
+tttRtatcttYattttgacttgaaSaataaatYcgBaaaaccgNatVBttMacHaKaata
+agtatKgtcaagactcttaHttcggaattgttDtctaaccHttttWaaatgaaatataaa
+WattccYDtKtaaaacggtgaggWVtctattagtgactattaagtMgtttaagcatttgS
+gaaatatccHaaggMaaaattttcWtatKctagDtYtMcctagagHcactttactataca
+aacattaacttaHatcVMYattYgVgtMttaaRtgaaataaDatcaHgtHHatKcDYaat
+cttMtNcgatYatgSaMaNtcttKcWataScKggtatcttacgcttWaaagNatgMgHtc
+tttNtaacVtgttcMaaRatccggggactcMtttaYMtcWRgNctgNccKatcttgYDcM
+gattNYaRagatHaaHgKctcataRDttacatBatccattgDWttatttaWgtcggagaa
+aaatacaatacSNtgggtttccttacSMaagBattacaMaNcactMttatgaRBacYcYt
+caaaWtagctSaacttWgDMHgaggatgBVgcHaDtggaactttggtcNatNgtaKaBcc
+caNtaagttBaacagtatacDYttcctNgWgcgSMcacatStctHatgRcNcgtacacaa
+tRttMggaNKKggataaaSaYcMVcMgtaMaHtgattYMatYcggtcttcctHtcDccgt
+gRatcattgcgccgatatMaaYaataaYSggatagcgcBtNtaaaScaKgttBgagVagt
+taKagagtatVaactaSacWactSaKatWccaKaaaatBKgaaKtDMattttgtaaatcR
+ctMatcaaMagMttDgVatggMaaWgttcgaWatgaaatttgRtYtattaWHKcRgctac
+atKttctaccaaHttRatctaYattaaWatVNccatNgagtcKttKataStRaatatatt
+cctRWatDctVagttYDgSBaatYgttttgtVaatttaatagcagMatRaacttBctatt
+gtMagagattaaactaMatVtHtaaatctRgaaaaaaaatttWacaacaYccYDSaattM
+atgaccKtaBKWBattgtcaagcHKaagttMMtaatttcKcMagNaaKagattggMagag
+gtaatttYacatcWaaDgatMgKHacMacgcVaacaDtaDatatYggttBcgtatgWgaS
+atttgtagaHYRVacaRtctHaaRtatgaactaatatctSSBgggaaHMWtcaagatKga
+gtDaSatagttgattVRatNtctMtcSaagaSHaataNataataRaaRgattctttaata
+aagWaRHcYgcatgtWRcttgaaggaMcaataBRaaccagStaaacNtttcaatataYta
+atatgHaDgcStcWttaacctaRgtYaRtataKtgMttttatgactaaaatttacYatcc
+cRWtttHRtattaaatgtttatatttgttYaatMcaRcSVaaDatcgtaYMcatgtagac
+atgaaattgRtcaaYaaYtRBatKacttataccaNaaattVaBtctggacaagKaaYaaa
+tatWtMtatcYaaVNtcgHaactBaagKcHgtctacaatWtaDtSgtaHcataHtactga
+taNctRgttMtDcDttatHtcgtacatcccaggSttaBgtcacacWtccNMcNatMVaVg
+tccDYStatMaccDatggYaRKaaagataRatttHKtSaaatDgataaacttaHgttgVB
+tcttVttHgDacgaKatgtatatNYataactctSatatatattgcHRRYttStggaactH
+gttttYtttaWtatMcttttctatctDtagVHYgMRBgtHttcctaatYRttKtaagatg
+gaVRataKDctaMtKBNtMtHNtWtttYcVtattMcgRaacMcctNSctcatttaaagDc
+aHtYccSgatgcaatYaaaaDcttcgtaWtaattctcgttttScttggtaatctttYgtc
+taactKataHacctMctcttacHtKataacacagcNRatgKatttttSaaatRYcgDtta
+MRcgaaattactMtgcgtaagcgttatBtttttaattaagtNacatHgttcRgacKcBBt
+VgatKttcgaBaatactDRgtRtgaNacWtcacYttaaKcgttctHaKttaNaMgWgWag
+gtctRgaKgWttSttBtDcNtgtttacaaatYcDRtgVtgcctattcNtctaaaDMNttt
+tNtggctgagaVctDaacVtWccaagtaacacaNctgaScattccDHcVBatcgatgtMt
+aatBgHaatDctMYgagaatgYWKcctaatNaStHaaaKccgHgcgtYaaYtattgtStg
+tgcaaRtattaKatattagaWVtcaMtBagttattagNaWHcVgcaattttDcMtgtaRH
+VYtHtctgtaaaaHVtMKacatcgNaatttMatatgttgttactagWYtaRacgataKag
+YNKcattataNaRtgaacKaYgcaaYYacaNccHatMatDcNgtHttRaWttagaaDcaa
+aaaatagggtKDtStaDaRtaVtHWKNtgtattVctSVgRgataDaRaWataBgaagaaK
+taataaYgDcaStaNgtaDaaggtattHaRaWMYaYaWtggttHYgagVtgtgcttttca
+aDKcagVcgttagacNaaWtagtaataDttctggttVcatcataaagtgKaaaNaMtaBB
+aattaatWaattgctHaVKaSgDaaVKaHtatatatHatcatSBagNgHtatcHYMHgtt
+DgtaHtBttWatcgtttaRaattgStKgSKNWKatcagDtctcagatttctRtYtBatBg
+HHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggtgttataagaataaHaatattagta
+taatMHgttYgaRttagtaRtcaaVatacggtcMcgagtaaRttacWgactKRYataaaa
+gSattYaWgagatYagKagatgSaagKgttaatMggtataatgttWYttatgagaaacct
+NVataatHcccKtDctcctaatactggctHggaSaggRtKHaWaattcgSatMatttaga
+ggcYtctaMcgctcataSatatgRagacNaaDaggaVBagaYttKtacNaKgtSYtagtt
+ggaWcatcWttaatctatgaVtcgtgtMtatcaYcgtRccaaYgDctgcMgtgtWgacWt
+gataacacgcgctBtgttaKtYDtatDcatcagKaVMctaatcttgVcaaRgcRMtDcga
+ttaHttcaNatgaatMtactacVgtRgatggaWtttactaaKatgagSaaKggtaNtact
+VaYtaaKRagaacccacaMtaaMtKtatBcttgtaaWBtMctaataaVcDaaYtcRHBtc
+gttNtaaHatttBNgRStVDattBatVtaagttaYatVattaagaBcacggtSgtVtatt
+taRattgatgtaHDKgcaatattKtggcctatgaWDKRYcggattgRctatNgatacaat
+MNttctgtcRBYRaaaHctNYattcHtaWcaattctBtMKtVgYataatMgYtcagcttM
+DataVtggRtKtgaatgccNcRttcaMtRgattaacattRcagcctHtWMtgtDRagaKa
+BtgDttYaaaaKatKgatctVaaYaacWcgcatagBVtaNtRtYRaggBaaBtgKgttac
+ataagagcatgtRattccacttaccatRaaatgWgDaMHaYVgVtaSctatcgKaatata
+ttaDgacccYagtgtaYNaaatKcagtBRgagtccatgKgaaaccBgaagBtgSttWtac
+gatWHaYatcgatttRaaNRgcaNaKVacaNtDgattgHVaatcDaagcgtatgcNttaD
+ataatcSataaKcaataaHWataBtttatBtcaKtKtatagttaDgSaYctacaRatNta
+WctSaatatttYaKaKtaccWtatcRagacttaYttVcKgSDcgagaagatccHtaattc
+tSttatggtKYgtMaHagVaBRatttctgtRgtctatgggtaHKgtHacHtSYacgtaca
+cHatacKaaBaVaccaDtatcSaataaHaagagaatScagactataaRttagcaaVcaHa
+taKgDacatWccccaagcaBgagWatctaYttgaaatctVNcYtttWagHcgcgcDcVaa
+atgttKcHtNtcaatagtgtNRaactttttcaatggWgBcgDtgVgtttctacMtaaata
+aaRggaaacWaHttaRtNtgctaaRRtVBctYtVtatDcattDtgaccYatagatYRKat
+NYKttNgcctagtaWtgaactaMVaacctgaStttctgaKVtaaVaRKDttVtVctaDNt
+ataaaDtccccaagtWtcgatcactDgYaBcatcctMtVtacDaaBtYtMaKNatNtcaN
+acgDatYcatcgcaRatWBgaacWttKttagYtaattcggttgSWttttDWctttacYta
+tatWtcatDtMgtBttgRtVDggttaacYtacgtacatgaattgaaWcttMStaDgtata
+ttgaDtcRBcattSgaaVBRgagccaaKtttcDgcgaSMtatgWattaKttWtgDBMagg
+BBttBaatWttRtgcNtHcgttttHtKtcWtagHStaacagttgatatBtaWSaWggtaa
+taaMttaKacDaatactcBttcaatatHttcBaaSaaatYggtaRtatNtHcaatcaHta
+gVtgtattataNggaMtcttHtNagctaaaggtagaYctMattNaMVNtcKtactBKcaH
+HcBttaSagaKacataYgctaKaYgttYcgacWVttWtSagcaacatcccHaccKtctta
+acgaKttcacKtNtacHtatatRtaaatacactaBtttgaHaRttggttWtatYagcatY
+DatcggagagcWBataagRtacctataRKgtBgatgaDatataSttagBaHtaatNtaDW
+cWtgtaattacagKttcNtMagtattaNgtctcgtcctcttBaHaKcKccgtRcaaYagS
+attaagtKataDatatatagtcDtaacaWHcaKttDgaaRcgtgYttgtcatatNtattt
+ttatggccHtgDtYHtWgttatYaacaattcaWtatNgctcaaaSttRgctaatcaaatN
+atcgtttaBtNNVtgttataagcaaagattBacgtDatttNatttaaaDcBgtaSKgacg
+tagataatttcHMVNttgttBtDtgtaWKaaRMcKMtHtaVtagataWctccNNaSWtVa
+HatctcMgggDgtNHtDaDttatatVWttgttatttaacctttcacaaggaSaDcggttt
+tttatatVtctgVtaacaStDVaKactaMtttaSNagtgaaattaNacttSKctattcct
+ctaSagKcaVttaagNaVcttaVaaRNaHaaHttatgtHttgtgatMccaggtaDcgacc
+gtWgtWMtttaHcRtattgScctatttKtaaccaagtYagaHgtWcHaatgccKNRttta
+gtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaaaRaStDWtcaaaaHKtaNBctagB
+tgtattaactaattttVctagaatggcWSatMacccttHttaSgSgtgMRcatRVKtatc
+tgaaaccDNatYgaaVHNgatMgHRtacttaaaRtatStRtDtatDttYatattHggaBc
+ttHgcgattgaKcKtttcRataMtcgaVttWacatNcatacctRataDDatVaWNcggtt
+gaHtgtMacVtttaBHtgagVttMaataattatgttcttagtttgtgcDtSatttgBtca
+acHattaaBagVWcgcaSYttMgcttacYKtVtatcaYaKctgBatgcgggcYcaaaaac
+gNtctagKBtattatctttKtaVttatagtaYtRagNtaYataaVtgaatatcHgcaaRa
+taHtacacatgtaNtgtcgYatWMatttgaactacRctaWtWtatacaatctBatatgYt
+aagtatgtgtatSttactVatcttYtaBcKgRaSggRaaaaatgcagtaaaWgtaRgcga
+taatcBaataccgtatttttccatcNHtatWYgatHSaaaDHttgctgtccHtggggcct
+aataatttttctatattYWtcattBtgBRcVttaVMRSgctaatMagtYtttaaaaatBR
+tcBttcaaVtaacagctccSaaSttKNtHtKYcagcagaaaccccRtttttaaDcDtaSt
+atccaagcgctHtatcttaDRYgatDHtWcaaaBcWgKWHttHataagHacgMNKttMKH
+ccaYcatMVaacgttaKgYcaVaaBtacgcaactttMctaaHaatgtBatgagaSatgta
+tgSRgHgWaVWgataaatatttccKagVgataattWaHNcYggaaatgctHtKtaDtcta
+aagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaNcttStggtBttacNagcatagRgt
+KtgcgaacaacBcgKaatgataagatgaaaattgtactgcgggtccHHWHaaNacaBttN
+KtKtcaaBatatgctaHNgtKcDWgtttatNgVDHgaccaacWctKaaggHttgaRgYaa
+tHcaBacaatgagcaaattactgtaVaaYaDtagattgagNKggtggtgKtWKaatacag
+DRtatRaMRtgattDggtcaaYRtatttNtagaDtcacaaSDctDtataatcgtactaHt
+tatacaatYaacaaHttHatHtgcgatRRttNgcatSVtacWWgaaggagtatVMaVaaa
+ttScDDKNcaYBYaDatHgtctatBagcaacaagaatgagaaRcataaKNaRtBDatcaa
+acgcattttttaaBtcSgtacaRggatgtMNaattggatatWtgagtattaaaVctgcaY
+MtatgatttttYgaHtgtcttaagWBttHttgtcttattDtcgtatWtataataSgctaH
+agcDVcNtaatcaagtaBDaWaDgtttagYctaNccDtaKtaHcttaataacccaRKtac
+aVaatNgcWRaMgaattatgaBaaagattVYaHMDcaDHtcRcgYtcttaaaWaaaVKga
+tacRtttRRKYgaatacaWVacVcRtatMacaBtactggMataaattttHggNagSctac
+HgtBagcgtcgtgattNtttgatSaaggMttctttcttNtYNagBtaaacaaatttMgac
+cttacataattgYtcgacBtVMctgStgMDtagtaRctHtatgttcatatVRNWataDKa
+tWcgaaaaagttaaaagcacgHNacgtaatctttMRtgacttttDacctataaacgaaat
+atgattagaactccSYtaBctttaataacWgaaaYatagatgWttcatKtNgatttttca
+agHtaYgaaRaDaagtaggagcttatVtagtctttcattaaaatcgKtattaRttacagV
+aDatgcatVgattgggtctttHVtagKaaRBtaHtaaggccccaaaaKatggtttaMWgt
+BtaaacttcactttKHtcgatctccctaYaBacMgtcttBaBaNgcgaaacaatctagtH
+ccHtKttcRtRVttccVctttcatacYagMVtMcagaMaaacaataBctgYtaatRaaag
+attaaccatVRatHtaRagcgcaBcgDttStttttcVtttaDtKgcaaWaaaaatSccMc
+VatgtKgtaKgcgatatgtagtSaaaDttatacaaacatYaRRcVRHctKtcgacKttaa
+VctaDaatgttMggRcWaacttttHaDaKaDaBctgtaggcgtttaHBccatccattcNH
+tDaYtaataMttacggctNVaacDattgatattttacVttSaattacaaRtataNDgacV
+tgaacataVRttttaDtcaaacataYDBtttaatBaDtttYDaDaMccMttNBttatatg
+agaaMgaNtattHccNataattcaHagtgaaggDgatgtatatatgYatgaStcataaBS
+tWacgtcccataRMaaDattggttaaattcMKtctMacaBSactcggaatDDgatDgcWc
+taacaccgggaVcacWKVacggtaNatatacctMtatgatagtgcaKagggVaDtgtaac
+ttggagtcKatatcgMcttRaMagcattaBRaStctYSggaHYtacaactMBaagDcaBD
+RaaacMYacaHaattagcattaaaHgcgctaaggSccKtgaaKtNaBtatDDcKBSaVtg
+atVYaagVtctSgMctacgttaacWaaattctSgtDactaaStaaattgcagBBRVctaa
+tatacctNttMcRggctttMttagacRaHcaBaacVKgaataHttttMgYgattcYaNRg
+ttMgcVaaacaVVcDHaatttgKtMYgtatBtVVctWgVtatHtacaaHttcacgatagc
+agtaaNattBatatatttcVgaDagcggttMaagtcScHagaaatgcYNggcgtttttMt
+StggtRatctacttaaatVVtBacttHNttttaRcaaatcacagHgagagtMgatcSWaN
+RacagDtatactaaDKaSRtgattctccatSaaRttaaYctacacNtaRtaactggatga
+ccYtacactttaattaattgattYgttcagDtNKttagDttaaaaaaaBtttaaNaYWKM
+BaaaacVcBMtatWtgBatatgaacVtattMtYatMNYDKNcKgDttDaVtaaaatggga
+tttctgtaaatWtctcWgtVVagtcgRgacttcccctaDcacagcRcagagtgtWSatgt
+acatgttaaSttgtaaHcgatgggMagtgaacttatRtttaVcaccaWaMgtactaatSS
+aHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNgaNDMtaattcgVttttaacatgVa
+tgtWVMatatcaKgaaattcaBcctccWcttgaaWHtWgHtcgNWgaRgctcBgSgaatt
+gcaaHtgattgtgNagtDttHHgBttaaWcaaWagcaSaHHtaaaVctRaaMagtaDaat
+HtDMtcVaWMtagSagcttHSattaacaaagtRacMtRtctgttagcMtcaBatVKtKtK
+acgagaSNatSactgtatatcBctgagVtYactgtaaattaaaggcYgDHgtaacatSRD
+atMMccHatKgttaacgactKtgKagtcttcaaHRVtccttKgtSataatttacaactgg
+atDNgaacttcaRtVaagDcaWatcBctctHYatHaDaaatttagYatSatccaWtttag
+aaatVaacBatHcatcgtacaatatcgcNYRcaataYaRaYtgattVttgaatgaVaact
+cRcaNStgtgtattMtgaggtNttBaDRcgaaaagctNgBcWaWgtSaDcVtgVaatMKB
+tttcgtttctaaHctaaagYactgMtatBDtcStgaccgtSDattYaataHctgggaYYt
+tcggttaWaatctggtRagWMaDagtaacBccactacgHWMKaatgatWatcctgHcaBa
+SctVtcMtgtDttacctaVgatYcWaDRaaaaRtagatcgaMagtggaRaWctctgMgcW
+ttaagKBRtaaDaaWtctgtaagYMttactaHtaatcttcataacggcacBtSgcgttNH
+tgtHccatgttttaaagtatcgaKtMttVcataYBBaKtaMVaVgtattNDSataHcagt
+WMtaggtaSaaKgttgBtVtttgttatcatKcgHacacRtctHatNVagSBgatgHtgaR
+aSgttRcctaacaaattDNttgacctaaYtBgaaaatagttattactcttttgatgtNNt
+VtgtatMgtcttRttcatttgatgacacttcHSaaaccaWWDtWagtaRDDVNacVaRat
+gttBccttaatHtgtaaacStcVNtcacaSRttcYagacagaMMttttgMcNttBcgWBt
+actgVtaRttctccaaYHBtaaagaBattaYacgatttacatctgtaaMKaRYtttttac
+taaVatWgctBtttDVttctggcDaHaggDaagtcgaWcaagtagtWttHtgKtVataSt
+ccaMcWcaagataagatcactctHatgtcYgaKcatcagatactaagNSStHcctRRNta
+ttgtccttagttagMVgtatagactaactctVcaatMctgtttgtgttgccttatWgtaB
+VtttctggMcaaKgDWtcgtaaYStgSactatttHgatctgKagtagBtVacRaagRtMc
+tatgggcaaaKaaaatacttcHctaRtgtDcttDattaggaaatttcYHaRaaBttaatg
+gcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcgtaDWgtcgttaatDgKgagcSata
+tcSHtagtagttggtgtHaWtaHKtatagctgtVgattaBVaatgaataagtaatVatSt
+taHctttKtttgtagttaccttaatcgtagtcctgBcgactatttVcMacHaaaggaatg
+DatggKtaHtgStatattaaSagctWcctccRtataBaDYcgttgcNaagaggatRaaaY
+taWgNtSMcaatttactaacatttaaWttHtatBattgtcgacaatNgattgcNgtMaaa
+KaBDattHacttggtRtttaYaacgVactBtaBaKtgBttatgVttgtVttcaatcWcNc
+tDBaaBgaDHacBttattNtgtDtatttVSaaacaggatgcRatSgtaSaNtgBatagtt
+cHBgcBBaaattaHgtDattatDaKaatBaaYaaMaataaataKtttYtagtBgMatNca
+tgtttgaNagtgttgtgKaNaSagtttgaSMaYBcaaaacDStagttVacaaaaactaaW
+ttBaagtctgtgcgtMgtaattctcctacctcaNtttaaccaaaaVtBcacataacaccc
+cBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDtaatatRcctDWtcctaccMtVVatK
+ttaWaaKaaatataaagScHBagaggBaSMtaWaVtatattactSaaaKNaactatNatc
+cttgaYctattcaaaVgatttYHcRagattttaSataggttattcVtaaagaKgtattat
+tKtRttNcggcRgtgtgtWYtaacHgKatKgatYtacYagDtWcHBDctctgRaYKaYag
+cactKcacSaRtBttttBHKcMtNtcBatttatttttgSatVgaaagaWtcDtagDatat
+gMacaacRgatatatgtttgtKtNRaatatNatgYcaHtgHataacKtgagtagtaacYt
+taNccaaatHcacaacaVDtagtaYtccagcattNtacKtBtactaaagaBatVtKaaHB
+ctgStgtBgtatgaSNtgDataaccctgtagcaBgtgatcttaDataStgaMaccaSBBg
+WagtacKcgattgaDgNNaaaacacagtSatBacKDgcgtataBKcatacactaSaatYt
+YcDaactHttcatRtttaatcaattataRtttgtaagMcgNttcatcBtYBagtNWNMtS
+HcattcRctttttRWgaKacKttgggagBcgttcgcMaWHtaatactgtctctatttata
+VgtttaBScttttaBMaNaatMacactYtBMggtHacMagtaRtctgcatttaHtcaaaa
+tttgagKtgNtactBacaHtcgtatttctMaSRagcagttaatgtNtaaattgagagWcK
+taNttagVtacgatttgaatttcgRtgtWcVatcgttaaDVctgtttBWgaccagaaagt
+cSgtVtatagaBccttttcctaaattgHtatcggRattttcaaggcYSKaagWaWtRact
+aaaacccBatMtttBaatYtaagaactSttcgaaScaatagtattgaccaagtgttttct
+aacatgtttNVaatcaaagagaaaNattaaRttttaVaaaccgcaggNMtatattVctca
+agaggaacgBgtttaacaagttcKcYaatatactaaccBaaaSggttcNtattctagttR
+tBacgScVctcaatttaatYtaaaaaaatgSaatgatagaMBRatgRcMcgttgaWHtca
+VYgaatYtaatctttYttatRaWtctgBtDcgatNatcKaBaDgatgtaNatWKctccga
+tattaacattNaaacDatgBgttctgtDtaaaMggtgaBaSHataacgccSctaBtttaR
+BtcNHcDatcDcctagagtcRtaBgWttDRVHagattYatgtatcWtaHtttYcattWta
+aagtctNgtStggRNcgcggagSSaaagaaaatYcHDtcgctttaatgYcKBVSgtattR
+aYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHaacttNctBtcaccatctMcatatt
+ccaSatttgcgaDagDgtatYtaaaVDtaagtttWVaagtagYatRttaagDcNgacKBc
+ScagHtattatcDaDactaaaaaYgHttBcgaDttggataaaKSRcBMaBcgaBSttcWt
+gNBatRaccgattcatttataacggHVtaattcacaagagVttaaRaatVVRKcgWtVga
+cctgDgYaaHaWtctttcacMagggatVgactagMaaataKaaNWagKatagNaaWtaaa
+atttgaattttatttgctaaVgaHatBatcaaBWcBgttcMatcgBaaNgttcgSNaggS
+aRtttgHtRtattaNttcDcatSaVttttcgaaaaattgHatctaRaggSaNatMDaaat
+DcacgattttagaHgHaWtYgattaatHNSttatMSgggNtcKtYatRggtttgtMWVtt
+taYtagcagBagHaYagttatatggtBacYcattaRSataBatMtttaaatctHcaaaSa
+aaagttNSaaWcWRccRtKaagtBWtcaaattSttMtattggaaaccttaacgttBtWat
+ttatatWcDaatagattcctScacctaagggRaaYtaNaatgVtBcttaaBaacaMVaaa
+ttatStYgRcctgtactatcMcVKatttcgSgatRHMaaaHtagtaaHtVgcaaataata
+tcgKKtgccaatBNgaaWcVttgagttaKatagttcaggKDatDtattgaKaVcaKtaat
+aDataataHSaHcattagttaatRVYcNaHtaRcaaggtNHcgtcaaccaBaaagYtHWa
+aaRcKgaYaaDttgcWYtataRgaatatgtYtgcKtaNttWacatYHctRaDtYtattcB
+ttttatcSataYaYgttWaRagcacHMgtttHtYttYaatcggtatStttcgtRSattaa
+DaKMaatatactaNBaWgctacacYtgaYVgtgHtaaaRaaRgHtagtWattataaaSDa
+aWtgMattatcgaaaagtaYRSaWtSgNtBgagcRYaMDtactaacttaWgtatctagac
+aagNtattHggataatYttYatcataDcgHgttBttctttVttgccgaaWtaaaacgKgt
+atctaaaaaNtccDtaDatBMaMggaatNKtatBaaatVtccRaHtaSacataHattgtt
+tKVYattcataVaattWtcgtgMttcttKtgtctaacVtatctatatBRataactcgKat
+StatattcatHHRttKtccaacgtgggtgRgtgaMtattattggctatcgtgacMtRcBD
+tcttgtactaatRHttttaagatcgVMDStattatYBtttDttgtBtNttgRcMtYtgBa
+cHaWaBaatDKctaagtgaaactaatgRaaKgatccaagNaaaatattaggWNtaagtat
+acttttKcgtcggSYtcttgRctataYcttatataaagtatattaatttataVaacacaD
+HatctatttttKYVatHRactttaBHccaWagtactBtcacgaVgcgttRtttttttSVg
+tSagtBaaattctgaHgactcttgMcattttagVtaagaattHctHtcaDaaNtaacRgg
+WatagttcgtSttgaDatcNgNagctagDgatcNttKgttgtaDtctttRaaYStRatDt
+gMggactSttaDtagSaVtBDttgtDgccatcacaMattaaaMtNacaVcgSWcVaaDat
+caHaatgaattaMtatccVtctBtaattgtWattatBRcWcaatgNNtactWYtDaKtta
+aatcactcagtRaaRgatggtKgcgccaaHgaggatStattYcaNMtcaBttacttatga
+gDaNtaMgaaWtgtttcttctaHtMNgttatctaWWatMtBtaaatagDVatgtBYtatc
+ggcttaagacMRtaHScgatatYgRDtcattatSDaHggaaataNgaWSRRaaaBaatag
+BattaDctttgHWNttacaataaaaaaatacggtttgHgVtaHtWMttNtBtctagtMcg
+KMgHgYtataHaNagWtcaacYattaataYRgtaWKgaBctataaccgatttaHaNBRaR
+aMtccggtNgacMtctcatttgcaattcWgMacttacaaDaaNtactWatVtttagcctt
+MaatcagVaagtctVaaDaBtattaattaYtNaYtggattaKtaKctYaMtattYgatat
+tataatKtVgDcttatatNBtcgttgtStttttMagaggttaHYSttcKgtcKtDNtata
+agttataagSgttatDtRttattgttttSNggRtcaaKMNatgaatattgtBWtaMacct
+gggYgaSgaagYataagattacgagaatBtggtRcVHtgYggaDgaYaKagWagctatag
+acgaaHgtWaNgacttHRatVaWacKYtgRVNgVcSgRWctacatcKSactctgWYtBgg
+tataagcttNRttVtgRcaWaaatDMatYattaactttcgaagRatSctgccttgcRKac
+cHtttSNVagtagHagBagttagaccaRtataBccataatSHatRtcHagacBWatagca
+MtacaRtgtgaaBatctKRtScttccaNaatcNgtaatatWtcaMgactctBtWtaaNac
+tHaaaaRctcgcatggctMcaaNtcagaaaaacacagtggggWttRttagtaagaVctVM
+tcgaatcttcMaaaHcaHBttcgattatgtcaDagcYRtBtYcgacMgtDcagcgaNgtt
+aataatagcagKYYtcgtaBtYctMaRtaRtDagaaaacacatgYaBttgattattcgaa
+NttBctSataaMataWRgaHtttccgtDgaYtatggtDgHKgMtatttVtMtVagttaRa
+tMattRagataaccctKctMtSttgaHagtcStctatttccSagatgttccacgaggYNt
+tHRacgattcDatatDcataaaatBBttatcgaHtNHaaatatDNaggctgaNcaaggag
+ttBttMgRagVatBcRtaWgatgBtSgaKtcgHtttgaatcaaDaHttcSBgHcagtVaa
+SttDcagccgttNBtgttHagYtattctttRWaaVtSttcatatKaaRaaaNacaVtVct
+MtSDtDtRHRcgtaatgctcttaaatSacacaatcgHattcaWcttaaaatHaaatcNct
+WttaNMcMtaKctVtcctaagYgatgatcYaaaRactctaRDaYagtaacgtDgaggaaa
+tctcaaacatcaScttcKttNtaccatNtaNatacatttHaaDHgcaDatMWaaBttcRg
+gctMaagctVYcacgatcaDttatYtaatcKatWatcaatVYtNagatttgattgaYttt
+tYgacttVtcKaRagaaaHVgDtaMatKYagagttNatWttaccNtYtcDWgSatgaRgt
+MatgKtcgacaagWtacttaagtcgKtgatccttNcttatagMatHVggtagcgHctata
+gccctYttggtaattKNaacgaaYatatVctaataMaaaYtgVtcKaYtaataacagaat
+HcacVagatYWHttagaaSMaatWtYtgtaaagNaaacaVgaWtcacNWgataNttcaSa
+gctMDaRttgNactaccgataMaaatgtttattDtcaagacgctDHYYatggttcaagcc
+NctccttcMctttagacBtaaWtaWVHggaaaaNatttaDtDtgctaaHHtMtatNtMta
+gtcatttgcaaaRatacagRHtatDNtgtDgaatVgtVNtcaaatYBMaaaagcaKgtga
+tgatMgWWMaHttttMgMagatDtataaattaaccaactMtacataaattgRataatacg
+BtKtaataattRgtatDagDtcRDacctatRcagagcSHatNtcaScNtttggacNtaag
+gaccgtgKNttgttNcttgaaRgYgRtNtcagttBcttttcHtKtgcttYaaNgYagtaa
+atgaatggWaMattBHtatctatSgtcYtgcHtaattHgaaMtHcagaaSatggtatgcc
+aHBtYtcNattWtgtNgctttaggtttgtWatNtgHtgcDttactttttttgcNtactKt
+WRaVcttcatagtgSNKaNccgaataaBttataataYtSagctttaaatSttggctaaKS
+aatRccgWHgagDttaaatcatgagMtcgagtVtaDggaBtatttgDacataaacgtagY
+RagBWtgDStKDgatgaagttcattatttaKWcataaatWRgatataRgttRacaaNKtt
+NtKagaaYaStaactScattattaacgatttaaatgDtaattagatHgaYataaactatg
+gggatVHtgccgtNgatNYcaStRtagaccacWcaMtatRagHgVactYtWHtcttcatg
+atWgagaKggagtatgaWtDtVtNaNtcgYYgtaaactttaDtBactagtaDctatagta
+atatttatatataacgHaaaRagKattSagttYtStatatatagtcttaaaaMtcatgtt
+caaDactgRttctaagagDtatttttagcgacttgtgRtgNctgSgRaaaaatgcaMtYt
+DcatcaaYKttHcatSWgaaaatDataggttatgBDMtgttataacaaYSgagttacgtt
+atgtDStttaaatctcgWKtcSacgagagaSgttatBMDgtcggtgtgcgaNtaSHBatB
+tttVMgVcagaNatcaDDaKMtMYtatagaBccctctDtgtatttatatKNtgggtatgt
+RaacttgaWaaYgcaHatccctggtttStatMtcgcMtaaaWKttMVtWctVtgttaKDW
+ctgWaVttaDVatgKtagagtcatctaKWgtaaMttSacBaMattaKaaHDataattgWt
+gttttgtcatBacacgtStacaaagtNctNtgtgatcHtWttcKaagagttttaaaaWac
+gRacatctNatVStgaatDHgttWcgtRKcatatatctcaNttaaBDcctgaaaaaDtaY
+aHaKttNtaYVaVtttaDtctacttctWttaactaattttMagWcaatcccNKYtBaaca
+tgttgaKgKcgcBHaatDMttatatcSWacatDatRcWaMtDgatBctHgScttaaaHtS
+gKtDtttattgtRStWgttccatatttcacWttcatattgtaHVgaBtacaMtgMaaagD
+aataactDatattagMaNBagcttcattcgtaaKtgtatttcacMtgBaVtaattStctt
+agtYgtgtcgccttKatgggtgaWaataggaatacMMagaSKRttBgatgacRtgMtaga
+SRataggtatcaccgaNaaaWSWacDgatacttgattagcttgtgVMttatYctaRgHVc
+DtVRRtSaMtcaVtVtatcaYaHatattaaVaatctaBtgtacRatNtatttgaYatSaH
+ctaNgNtYtYaYagattVgatcRtaacgYggtgtatKttaatMagatgRtatatgHaKcc
+HaaaaYtgaacgaWaNgtYHgacagaYtctaVtacccgatttttaaagcDttatNRgatt
+KaaattttcatctaatgccgcaataataattgttatYtagtRNtaagttggtHaKttWMt
+DKgatSagBYcgRggtWaVaattHtatgtaaaMgSaaagataaKaaKgttDttttRaaga
+acaWRcaacDgtgttaatattaKtatcaWacacatttVtctgatHRcagtttNcaaatcN
+ctNttttataactWacBBttgBttaaaRaWtBKaaacgtatcRcaMaatgYacaaaagtg
+BataStWYtggtatgacaKWtctSgcKHgtcNaMNcataSatattgactacMcataattN
+VtDaRccaaatcagttttYttagYaacgtaatMtMVatNgKaaMaaBgattaKttatDaB
+cttKtccttttacDagaYtacHgttggacaaaVaatagtYatcataSgatcaaWVttcga
+atgaccctccttNtaSBWaatttDttttcaatatYggctatDcttatNctttagDcMttc
+aacWaaNattSYgctttcaHcRaattaataaaatcVccRaattactctaMaVRattacag
+tgRcDtcgtgctcttNtWVtacagtHtatHaBDtcWggtgctcaaRHtatgtDgacStgc
+aaaVKtagttataatactaatatgtagScaatRSacaattgtattgcagatHHtgBcaat
+KKtaaMMcaRcgactatKBaMaYatgKatttDaaNtRatattgtatWttagcaaaaacaW
+gcacaaHcataYtDaHgttataaSacgcagggggtYatgcKctaaaHgcVgctBDaVttc
+cStagNgcSgtatgVYaMatcaWRBtVtgYttgtgRcYttcgctgaacNttgtgtctatt
+WttttcctagMtagaWtaKgatStScatMaBtaStaSactattYNatctgtacRatYDaa
+tgatgatatgaatYaaaaSHttaaYMaWtDcaNHaBcaYtgVgcatVaacattMRatBta
+atttaDacRtagtaaaNYVSMtcagaaDtttDHtRcYatacSNKaaMcHgatBaaVttac
+tggBYgaYatttttgcDacHctWatcgtagagtactcattDggtcatKaSgctttattta
+gtDtRBacttaWYaaaattttgaccttaaWtaatgcRgccacttMtaggKtcBtgacgaH
+ctttatcgtcStatMHDNagattatNagVaaaWcggaaaYcaVactDYactaStattgBH
+tcYctgggtacatataaYcgaYagaggaggacaVatacHRtYtctgtaVgaYcNgaaaNa
+tacVgcNgtaatttDcatttttcaacttSNcaaDatVYctSgcaccttagMgacgcttga
+SttaaaatagttaggRHttaaacMatagcaWgMgagtcgctagtgtKgactaaHttatta
+WgcaaaaaaSatatgcgttaBNggttaYVatgaactttttgccatataaataRatSaBct
+agttataBccgaaacaagatacttaattttgaHgHMgtaaKctttaYtaaRacBMtBaYg
+aBaaacaYtVtagcRgWatHaWagattWSacStMHatttaDagacaatcgtgtKtttgga
+MtgtWtgtgcaaNaaaaWtKaaBcMWtcttctatgacVgagcgaggHaYYtttWgSaaYY
+aWtRYHHaMDtctttacaatggaaMctataagcttBcgHcNWaatttgtatatYtStatc
+tagcactgtVttccagaaattaDtttaRtVataBttWagcatDMVactYtgcatWtttga
+aMggKaatgaaaaHtataDtgYcMggVaaatSMHtttgVttaYaWaataRttgttaYtta
+ttttRtWtataaBgtDtttatatcVgaaBcaDtatgtcaDagaWtgaYtWctcVagctca
+gctatatagcRVtcaKtaataatHgNaccgaaaatVHBaatattcgttaVYttatttctB
+YaatKaagaccVStttcattgaMagSaaaaccccWKcaaNtMYacctaDStagaaattta
+tcatVgtcaatacccKattgtaaagtggWgtatatVtagBcttDaBacaattWtDYKtat
+RKggStRtaaaWatBtaagtaattDaaaaBRacWtaagtacaSttaaatccgctaaccKa
+attgVWttDattatttattKaMtcYtMRWagMtcgKgBagacgggVaaNaaatgctKcgt
+aataaKtaaagtccWcttHMatSYgataaatDttBaHccattgBttSgaaHYtaataaaM
+tgaagatgtttBgRcattaRaDHcttBgaMaWaaVMMattaatttgtgBRctattgKMag
+NcMtatttaaaWttgaaacatWgcScgYYDYgttYtVtattgcKcWtagcggtgBaScta
+KatacaaVtcaRDccccgtgttBgKgggtHagcgaattaaagMMttScggtDttttaHcS
+aagaacactcacactBcVgaKNaDHacacttatSagaattSKHtcagtataaatKaaHtg
+aaRagaaVcBtaHtaaatcgatcWcaRtaaaatttaWttaagtcaggRctgaWcttDttg
+actttaVSaaaatggtaWDaRMtBtaaaaaKatBgatMtctatatcaVaMgatttgNagt
+DRttDatcttttaMtYaaatcggagttctctaYatNtagaNcgMMactacHcaagtaaaa
+tStaSaacaHcacSgggtNKatggaaagcggaaKgggtaYtacSgccgBaggcRacgtVg
+DtggaMcYaaaMatggacgYStKKatgaBcaaRtStccSagcRccgccgcSDtgcggBDg
+aDtBtSSggacMttttaWcatcMatgtNMBWgataatcaaVtgaataataaNatgcaaNt
+tNctgacDMcaHccgatgKgWVttccaStggattctcDacttttttctttaaNcWaMWcc
+WKWttgaaaMctDaaBactRtVattttBtcMaNttWcKacagttKSttaYaWSactHSaB
+tHgatgttacatgcatatMtttgtaacScWHBatHactggatatatctgagMgRSatcta
+aSttaVagcaRcttggaYaatKHtagBBactattcgtaaagaagttgtVcgatgaVatHM
+tcaggtcgKSgWattgaaaVctccVgtDcaaatgaaHgMYactcaMatatatattNVttW
+tWaatttacRagKataaaNtttacaaWgMVactattaSgaggVaaagVtaccDRHaaata
+RaHaRgcattMttcaatcaKaaataDcaDKtctcgaggBggacctDtttatHacWVaWga
+tDctaNaNcgKatcMtcMaatBtttggacgtgataatagaaacRactcBtattttaKtgS
+aaggKtaggRaVtatagcccaNRttaccttSMaagatcggDacNBatWcgaactacacta
+actNBtaStgVtNagcatctaVtaKatKgaBtcgtttWaagWMgagRaNatHaaaaDtac
+agacaBagtgcaHaNatctcBccNttaagttDgaataaNtcgctaacRBgtaatSttaat
+atgcataacccaSattKcccttDttggtcaatgggttWaacgatacattBtgMaYgaRtt
+atgatKaKgtattDtKWgataacgNBtaccgaKWatcttcttKtgtcttagcattcctWc
+aaHgagtatDMSgKtcagcttgVHaKcttDaataaaVaatttDgtgaaataaRgtcaVaa
+tacttagtVatatgggcatgtDDtMtgtatBggattHtgcVtgtgatcaaSattatKYVa
+acSNNttNWcgaHttKDaaMYHatcgttaattaSttgctWaacHtaKBtaaaaKHttcRW
+gaaWcRtBtttggBcDtgtacNttaagcKtaHgtagaaaaRttgaaacatagtWRaacYg
+gtaaatcgctYaBtWDRtgttgSctaaKatNcattgtgtMttatccatatagctSacgcc
+SNaaactacgNtgtgcttMatSKtcaaBaNaaacataacagaaatagtagctcNcatcVg
+aagStaataVcDKKttcagDHDtattctaatgagggRgBMctatacaagYactctMaaag
+tcgctttctcgtgaattatNcgatMtttaggcBaaatctNtactaaRKtgKactattgtc
+atatgtacgagttMaaHSSgHgBatatcgcaSaataaaWgaagtatagaHgcttctttat
+gaccWaatttaRtaDaatttaatcgaaattgattMcatcaWaMtaWaKactttctBacac
+tatNgtccttaWgtctgaccKatStaKtgagtacgggcgcgtYNtatttagacctctKca
+tgatKWStcaataactaWgMSgHtgatctttttgtcgacgtSacttaYgcctWctcctct
+acaagVtttMaBactWVaccaYtgtSgcgttattcKtatStgaaKaccgNaataaHtatW
+tYtRacggcaDaScagcagHaYWRtRNcDtHtcVWtggaataaaYttgVaNtgttagtYt
+tgtagSaaatDgaggccDcgBRYStattatttaaggccgHgggYRaaccMaagttatStt
+ctttagcMtgcgMtgaSagaNaDagttSatgattWatttagtDgcttgagtgMKaYWaYc
+cagcaHatKctaKaDgctagacttattgattaaYttatcttattattStaattWaRaYBW
+agYaatatgttRgScttgBagDaWgcgtgcVDaggcttgtctaDRKacttgcaKBWRtaa
+VaSctKtacttMaaSVaWWcgSaNtttSWgtcggtcacttggVVtgagaataaataaDtt
+gaaccaaaaMttaaaagaaaaaaaatcNBtatMgccWagcaNgaVaNaaaaaaYaMgtta
+WtatHaagtNtacgacaBtMMattttWNaRtaaatagYaScKattacagctVKBtWNSKg
+YtYgtWatHaVatDaaatWgDatcctggSRagagtaaaaMgatttRtaHacatggtaKag
+VcctgatgaMtaaYgatgtattattttHggBaccaDctctggNNtYaatctVttgVtRtV
+cRacttNctttataggHSRtaRacaaattaacHaHgtgttgtttcBtBtatWtgtatttt
+gcKagMcaaagaMtattagtStagcBacYaaHcagVgWtgtttcgtgDHaVtagDatcRa
+RtggtWtaactgcacgaggaaaRttSDaaVaSttaaaaacSMttactaNtcaacaattDt
+acttttYatVSacYtWtMttaattatcKtcttctatcaKDtctStSaaacggtYccatgt
+gagagtWtagWKgcaBaaaaKttgNactaatcgaggcWtcDDaaaaaacactHattaatt
+cactatYttaagacactaKaagRtRataaattttcatHggtaataaatgataHtggctaa
+cBacDgtaatattRtYgtDNDBgKtcaggcHattttgHNgWtaatttccgactactgaca
+tVNttYYgactcgctctatttagaMcgggatHcgtttatBaDSagBaaaagRttBggtta
+aBactVHgatgaatttattcaaaattgcacttcDgacttYcVttactVtttatBaKHaga
+WgtgaatggBtaaSggcagacNcttaDttVgMtWagattggVatttacHtctNcMatact
+tSatMagcttgtNcYaaScaYactcKctKtagScStcagtttcatWaatggtgagaggHa
+ggggcaacgcRKtaRcMaNtHaatRaRaaactVtBtgttaatRtWWcaaagKttccaaKa
+aatacgVttcacaaacgcggtgagaRaatggtgDMWatcWVScacaaaDaggaaHtgttS
+MaaaaaccYccDBtatYgtMagcSagaccaVcctcggtVWaaagttatcNaagataataS
+aataaaKccgtaDtYttatYcttHttaagKcMctaaatggaatRgaaaVaaVtcKYagga
+tWcaBtDaggDatccttcYNtgcSMRgaRtNgaatcgttRttatDVMtagctttacatDV
+tatatatcagctaDagMtataccYgaggYaaatgDaaaatSgctctgatgtttVaaBcct
+gataKtagaaaccaKatatgttaDtgaDtatagataatacagtaDtatcNtgtDMtYcat
+tRVtctataNtWttggNaSgtMgaaYctctDggHtggHDccaccacKKaaacaaaatRat
+ttccctttaagcRattMHctattHaRtataVattggatcSttaaHaHgaaHNDtacattS
+aaggDatttcaaaYgctBcatattaaaKagtgcccatSctcgatRtaaaMtgWactttNM
+aWctYgRatDggaactcDcaattaKaactgagtatctataagYaaaSRctggtacWtttc
+cWtaYRtKHattatagWtKttaNgcDtatHacccattaatttataacgctMgaagtaaca
+acagMgtaYHYVtKMHtacMgKcaaatctgRYataNtcgttcaatacggWtMcaatYcBW
+aagYtVaDNagtatagDaaNtaaaYtttcYWttttStgggataaMgatattagaaYtNct
+cttcBagactaYDcgtacHDWccKaHgttcttHgVggVDttatcatKaMttttacWaaSa
+ttctatagaHaggKaDagBtaaagtcYccattgtYcatctaNgRgVtgaagtDKttatBK
+cggDtattRYgHccgtgcgBNMtttVRgacaYctSctaRacgtagagccgtacRaagtaH
+KagStSttttgYSatattaaaWHaaWagttDKaaNaNHaaHttaYcttMtcaaatgKttB
+tSgtccaaVaattSaacgttgNattgatatNctaWtVcagtactKcWacgVagggHaaRg
+aDaatcMttattaataacaBMaaVtgYtKgRgHactgtactatcBaMtVggtagKcYtHt
+BSaattagtaatgMcaVVagYYgWtactttccaaSttDgaaMaMttcacttYtRgacttc
+agcttWtttagtgataMaattaagVtagaatatKataagtagttaagHMRaDattaHaaV
+cctDtagtcVYcaataaYcNttNaaaHctcaRaatttcaNRgatSHgVatagctRtcatg
+aBttMaaagRtcgHVtgRgStgatttgtagaKagaRWRctgNaHYgaaatBctgtttRtt
+NWagaccgagKgtgcggHKVttaatattaatataataDtaNcctacaaRgcaNMctctga
+aSHWWHcttagtNagtWgWaaKtYaNgcBattatccaaaSctRRHKaNtKcBgtgagaDR
+WBttactaaattSMctatatagaaYacDgatttccVtaagRtgRataatatagtcttttt
+atgtMgtcaacaaNtaaaaactctWtagaVaaaDtaattatagtBStcgaatDtgattVa
+atMtcaDattVKWaagatagggttgtMRSgtcYgWMaatgNtagtcBttagtttctctWa
+aMtVgctWgSgtHagaSagactagKtagWggcatttHgttgacaaactcggggHggcWBg
+VgtatgggagVgagtcVcBtDctttagtctaagVWtHtgtttaScatacMBtKgattatR
+tgtttgtctttDggcHaBtRtgtaataNataatttataWctgaYWataStcHaatcRtaa
+VagDWaSatagtaccNDgaagtatacgttttacgacgKRtattgDctatRRattVtStaa
+actagatgVatttagaMaSaaaattVtatYtgttgtRMagtHaatttSttaaYNaggWag
+tgcacgaMcactgHgtgtgggHMgtKacttaaYgtcgcatcSatattgBaagtttacMtY
+agSatttatttaVtaaDtaWaHcgNatactgactHtggWtataDcDScatactcStcDtg
+tcgtgtatgaggtHaaNKgDattgcBccaagKgtatgacKSMtttttgttcaaatcaaYt
+agtaSatgDaaaMccKNaMaatagaataagcaattattataaMgagtgaSgtctNYttat
+tHaNaYYtcDDtaatNRgtatttaaYtaaatcactHVaHcStccttcccaaVatcVggat
+KtatgRaaDBgaYtttacttYggactSDtaBcaaNggggtattatattBDcttagagYNM
+atBgttYaagactMatgttRgatacccgtaacacBHtatKacWgatRcHttaattYtKtS
+tccaaatVDcaNKHHaaataatagtagtatcttgctNDggVaVVtaVaRaaagSaccgtt
+ctcMtVtgNBgtDtttctYgttactBctcRtStWtWDScMtcWSaRatgaataRHctaNt
+cStctYtWacagatgtatYBtHaHWBtacggtDcaaBtatcaggtcaVattaNctactga
+aaatWaDgactNWtMtggagaattBaataYcMWYcgatMYatWtgattSatgaRtDaRgc
+cagtSttatatRaBtattRcWtagtVgaagttMctattatatDttaggtctKtgtgtBag
+acgttatRKtgatctatttBtataactgataacKcggagtgHgtVttcttgtKDgcDtaY
+atBDatcaatattgttNtaBacatcgcNcaKcaWcRataWcVgtacgScaWgttcggHcM
+ttcRccatgaRStYgNacagatacYacWWtggNaDcWagttHatMaNaatNtcDMDcMaK
+gHNatScVgatKWatatgNRgtccgYgaagattDHgtMtcHaSNaaattBatRagtaaat
+ttacaagHWtKatcaagtccHtYcctgttKDMSgtactactVctgacaaaaHgatataca
+taatKtStHgctScSatNatacaYttaaWHtctgaatYtagtHtKaggccWBaStaDcta
+agagNtaatcaatcgttNgaYDaagtaaaaHatagaatcgcgBaYaBgaacSaaWaaaaa
+ctccgcMttHttYgtaagaMctKBtacSagattcBaaWtaattttacRttatcgaRtaca
+RHgtgRagaaBcttaVgacVDgggaatVatagaactRRtacgYttNattVHgaHttacaa
+aaaaaYtcRWtgtgattatgccaSDtttatKWgaatatSNDgattttaacgtcSRtatgg
+ttcttcBtWtttMtBtMScttaHatBattHacYtaYacattcgttKgtcStSctcKtata
+tttcaKSgagcttccaacaccRDtttDaccattatatSgtcWtVaaagttgtagccattD
+tYaatattDaccatcVDaaRccagttttgtcHacMattcHgaNcatgttKcVttcctgtg
+cSataaatattgaKtctaWctMRaKggtaYcaagttDttcgttacRtatgatggHNaWMt
+KttcatattaaDaSaBaaaMtMatBgKtttgHtHactaatcatcgtWaatKaaWcaWtcc
+tVttaaNaggaaaagtaaagaDctNttaDBaBgatagMgaataacRcYggatcRaaaHaa
+gatRDtVRactaYagttcaccaaWtctcSSaaatcSKattctggDgaacagDtaDagaca
+gtgtaattcaStYttNaStgtaHgccttaScatMRcaccWtcatttatRtaagatWtNat
+aaWtMNtDVgWttgcWgtgaRttttRgWcttMtctaHacaaYtKctgaBagtRagacttD
+atNttaaaDgRtatNcHatcSDgtBatcttacVcYacNgaattaacgagttgYgacttDa
+ttatacBattMgctagcctagatVcaactNttcctaatgtDaacgYaNatagMatSWtYB
+aaaRtgMtatSRgaataYaScaVgtaScMagatNNtttacaaHBaWtNtRtctaaacDaa
+aaWMcaNtcVaDNcagaDtgcWKYgagttaHtgcDYataaacataBaWWtcggtatgtga
+aScaacctttRNatcgttaaagcaDctaatgcBatttacaattVaMgSMMtccYaaaBYt
+ggattttcataWttgBtatDtBgactaatgtccWaaHataaScHttWttDtcgtcaagMc
+tMDtaaaatRtBaaaacaatgtcagcatBgNNBVttttttcBacWtttWtSWWtgaaaaS
+acgBtaaataaagtcDStaagaactgttaatYatgDctattactgaHtaaatStHaagac
+aKtagDtaaHaDgttccaaDtaaggacactctDggcgtDagtcWaHgRcHgDgaScttta
+ttgtcttttccttRYaDgNactaaatcaWggcNSBagttttatatStKgtcRtgattaag
+gtcaSBttaacaaKatgggatcaaattgRgcBagtNtcgDcatttWcctttgtNagDgct
+gcatttactttgtgtcaBgSatttNHaMcggcagSctcKDtWBaagSagWatggYtVatS
+RgKagattgaVatKttcgatYatKYSgDaacNtcVgtttaWataWtgVctgcgSggMgat
+ccatgagttgtWcatYWWcctVcNHagtNtgtKtttgatcaacttaSttattgatNcatW
+aVgNHcagStVHcggHacaaDttgDttWcaaRaKgaaatKaattagtaWacattgaaatg
+tgaatgacagtgaRVtaaYagYtcggcatMttgaaggDgagDRcaKgHtacacaaaMcaB
+tagHactgKaatRtNttcttcatcatNgYgStggactatgSMttgKtDaDgacRRgtWaV
+attgatttaagYctatatagactaagaggtatWtataaactaYaHRctStgKWcgtRtKt
+YtYtagacgattRaaYBtaStcttaWataatcHttataRcactgagtgggagccaattct
+cDtgDaggHcDRVaVVggaaBtRttaataaRRttgtaagKNcaVWWgtatacctgatctt
+BtcttRgaWcaVRKcagttSacttagcgtKtgtYWatatcgNttcKaccacacVKctgat
+tBtggacgtctgacaDtWKttattttgMBgKaacaDataattWtBtBRtVtacataaata
+tttgtWtttatagtDtgcctagctHYaatgcaNaaRcaatVtacctgggggKtagBgaga
+BgRaaNttttMtMagMtgtgattNctcNaKggWtMatcttagWgtaatatatNctaYBgg
+KaataBattYtaattataVtggNtcgtgtctaattaaacctHtacaaactDctDtctgat
+atgMtgataacWctgtgYSaaNScgDYaWtatDatMKgcaatttctgNcgtHtaWtagat
+atcYBttaattactcaaaVattYRWtatttDtaNMYMttgattataatgcgNggWaatYa
+gttgBagNcaagaaaDtRgtaaaagctgcatctagcttaVgtBttatagcKMSaattYtH
+cMaBttcagtcttgKatgVSVttKgttttttagtgtDHgNggtcaVtatttaacNtgaat
+atgctatMcatgaaaBtgBSaWctaataaattatYttagtaDtaccggaatgagtaattg
+gatttaacBtctSMgWYtgKgattacgRctctccaatgtaggcctgaNaatScgYataaB
+BacaKtHtttcatgaaHtgBtagaKHVtacctVtcaaccaDaaWNHNaatgataattgat
+gWcagggtcMBtgSgRataHctMctgMHHtKaBtaaMtMgataaRWtagYtgaaMaSgct
+YtgcgaaHatDtatgtcWRatKatatYDcBgNtRaRacattMcagaHgaaagRccgcgWt
+tggSatBagagcHgYtatctVtcatYaaVRtcaSacaMYDcgRtcaaWgaRgataMtaaa
+acaggtgtaaYcattgWgDHcWgttaVatttgcatctaatccacaaagaagSatgcgtag
+RgagtHDgaVcgtgcttatggMttttcatKSctNacHcctMaKRatttgatctaaatgHa
+aScataataatgtttgtgtHaVcaaaaNHaaaatcgctgSVtattVttagaaNWcacagt
+gKtatgattHcYcttgDaWVataBatBttttWtaactNaattttctttaaYHaMtttaaa
+ccgStcHaVBaatcRacaaWactgtagVKtNRtcctagcWaatNgctKccttctcDaBDc
+atYHatatgcaataaBaagaatgDMttaHcaaYYtcactgttRtgacRaacctaWtBtBM
+agBctaaBaWtgatgVtttattataggttaattgtaatYcaRtVctcttgcacSaaMaat
+actRSgcataKcagcaVNKttcgSatcaaactaattDtaHtNaVtgttttttaWVtatNc
+cagWttcgtatBcgttVctcBttaaaaMSaDattKRcctttcataHaattaatWaaataK
+caHVaggaatataBYKHVtgVcVgtcHcttccgcctattDtMMgWaacttgWttYtttcM
+cgtcctaaVHtgWtggtgacKtcaWaYMttacttagVWtacgSatatcgWcKaaatHKaa
+aYttgtagtcaacWtttggtcaagttgaaBBaSHacVcgYgttWBSRWggtattttaYDt
+HatattcgatNttacaaaaVacaMccaaYStaataRttVtcttagaVKaacaWcgccgtR
+atcatctaaatccMcctttaMggccHgYcDgaKctatgMRYBagcaNDtgMtcRttgtgH
+aRttacatgaWcDtgctgtataggNggtgaatagBgagYNtatcagKtHcatBatgVKga
+HWagattRDatatcgYcHagRtaatgWtcStagcVatNaaaaKttgRaRBYNgtaaDtSt
+aVRgcMccatMWaaattBDatttaatttataaHtagtVVaDRMKBtaacaatttttttDa
+RSgaaKDtVaBatcagtaaMttaagcctRgaNVgggttcataatagNatcctacactacg
+catgtcggaYgtaKcatggattgactttHtaattWNRaaWYggttcaaaggaaNtaatgc
+HcaaaattBtagcttattcaagVtatttWgcctaKtatBttDYcattagDacKVaYNccg
+YaYRaaMaattRaagaHtatgcttgcRagcgctSaatagaaRacaRacSccagcacVMat
+aatHgRtagcgaKgYRaDcVWSDVgRaMgcDgtaattttaYttggtaaWcttKDaaYtat
+MRcgKccYcagtYcBgRccattcaKtgaSSRtactgacgHtgtaaaaBatWgcaMcBcYc
+gccagactcttcSatYattgatgaNccaaaaWaKatVgcaggtWtBcgttaRMagcaaag
+tgttcacatataaagaHWtKatctacttatatcacYRaaVagataagtaattttgatgtB
+ctaataggtaRtaaHaattgtaRcStYSYaWRgMtacaHcNSttVNScattNKaaKgBta
+gtgatYcaaaStactggttggggaBggtNtgtcaaWBaYVSNgtaataBNtagtatatca
+cMcScccVcgtVRRtttNcKaSRNaNtHRttatttattgacaatggSaBagataaccgtt
+cctaDNaattgctVtatNtHtatagSccaagctKttaaacaaattattgtSHgMWgSttt
+NaccattBMYatRtccStNgttgaaBcctVagcaaaatgatattcRaBccMWaagKtttt
+tcMtgaRYNaataDttgttWRttattggHtNtataatggttgtStYgaMcYVtcattagg
+taatVcaNggaRtNataMWcctcYgcgagagRgcHMgcWtgaYtVSttgDaacgaaaatM
+ttYWtWttcctgaKNttatttattRaattaagaccMKtttcWgtcaBagKSaWaaacaNt
+aYaDtBNaaagWtHgacaaagtgVtcatKcgcaatVaactatgcgaaactccNctatatM
+gactatttatSaaVttNttRttagHtccKtHtaaaNatttYVctaatttaaaatHWaNtS
+acgaaaHggaaatcacagVYcctaattcMNtgtYtgagttatttaBtcRgBHNacBtact
+ctagaacgcKaaDWYYgcattactVagaYtgaVVcgcaNctttBagKRcSgaaatttgta
+tccattgtggHcaatRtaVtaSaBtcYYcatcgtgtcHaVttaHattctgtcaBSNYaKB
+BattaatggctgtHatattgtBacDcBgatttaaaNtggaaaaYtNcaKagRRtRgttRt
+MtWgggatcNtacacctgtWKagatataaYVMtaaDtaaacctctgtgtgccttScacWa
+ggaYacttttKacgtttgtgataKYagaYaVatcWcSattaMcatBYttYaaatgStKag
+WattKtttaWgtagaaSgtRattcSaDagVaMattattYaagccSgcNaaDgaaSaggta
+NgtWactaWcgHctgaNatttttcaatgtaMHSWaRtggtaNtaHBtttWWaaatattcV
+tBtctStWtaWMaBcatttcDagttDtttatatgttWBtNaYatcccSgtgagcgaRYtB
+tagaDacBtaagaataWactaaaagKtaKaWaataacKcccgDtagccaaagcggaatcg
+ctSRtacKgcactacccHaactMgtgccaBaRaaaBVtcgSacRKtttStgatcaaHgKt
+aaKaccHaccacccKttgagcttcSttttKKcgacBgggtYMaatcBStcgDBtMcataW
+taWaMtgaataagaaDatccSYDtgBatgactBaVtaagatctcNMgtcaWKtgcWggcg
+atacgtgtttatttWaDaNWBNaaNtNttcaaatagtaatScgHtMWttgttgaBaDtgN
+atSaagtttHttaNaNKaattKatttgatcgtVcatgaatatBtttctaacKaNttVttS
+agccatRtatatcactcHHatctWSKttaMacaaDattccaRaYttttagttaatattcc
+tYaacVactgctMcgagcaMYtttgaagctagtKgNWttgaaaMatcaMcttcSVatcaa
+tgtNactaaBagatagagtDMgtNtNWatttSaHactagaaaDggtaaaaNctMaatagt
+aHgacgMaaacMtacatHtaSagaHatYDccagtBtgaWatcYtVaagataattgatcga
+cctgcaacgttttattacNMWNcattataDVDactatattatYattttgcgaagtgagYV
+tagYaWaHaatctgWttttatgcHaacgttaccDaKtatagaccaDDttaacgtHBaaca
+tccgtYaBtVtNccaaataaaatVactDttSKtcMtDSgaagctaMtatattgattactg
+tNaagNBcagHaDattaaaWttacacaaatactcaatSDatagctcaDttWactttgaSt
+aaDtagatSaaDtgtaatKtgVataggaagWSaaaaKatttaaagtttgcgtaaagcccg
+gNWaacatacatgttctaRcaHttVtcattatctagttttNcataaacDttWaagVtNYt
+aggctttggtatgagaWgtactNaVatcactVttBKcttaaccttcMtatcggtaataYa
+MaYggttgtcaaagSWHctaRMSatVcggactMatatccgaatcttttttcgagtccagt
+ttgaMtcgcatcaaKagtattRMaaaKDBttDNccatttttaaBNtVtccgtaatgaKgt
+cagMVSattatttaWaattttaHNcaaMaHttgtggctattctacDtgaagattatcgac
+aaVRHttcSaSaatactNHWaaNcgtWaWgaccgRSttNtHtcttcKatYatatBaagtc
+gctBtgagccatatScctKaagaaKDaWactWagBgctgattBagKtgaaataBaaaaag
+SacScaaagagtagcgaDaYtaMcaYcKtaataMatttttaactttgYgtcgaaggacgc
+HctBcgYgaaVacRYagagBaaYgtagattgcgagtcaagtStDagatBgtgaccctaSW
+tctDgactaSHttctWatWttctaWtatctYacactgBWatKKctgtatYgacaaHSatY
+SaNgSagtatagatgagtatttatgaccMaatgtaHtStaWttgYagccaWattcagtBa
+YtaaNaBtaNatactggcttWcaagatDctacggaNctatcacatSgKgattgacgaccc
+ccgagtNDtattgagaaatattaatcVttNKtaaWtYacgSNcBHgttgWtatgtttcgc
+caactKaattaRgacgNataatctacaacKgttBatYatNMSaaaNtctKgacttatgct
+tatKtcaVtVcagDaataattYgNtRtHaagcaataHcacaVgtaNNHtHDatgttaMNt
+ggWagSVaRttcMVDtcttWgtRttctacKaaVttcVcgcatcctHRKtattSgttSacg
+aagtcccRDVaacBWagtgYtKtgattgSgaBtgccBtcaKacaDatacttHatcattNa
+tttacgtcagtgaggcBtaRNaRcaSgcatattatStatgctYcacgtattcattaaRtg
+StcttWgtattKtSYttNaHaRtNYcRaYtVtggtDcKcttctactaMcacggcMtacgc
+ttctatatHtaatggcattMDtaaMaKattgaagtBaaKMVMNacKaDtttKNcgagcta
+aagtccMMtgagaagVaataatggcaWaaaaVaBgtaSaVgaaaSaaaataDttVtBcca
+NagcSBgaMaDaVaVYYRVBgttYMtagtaactDtaagWaattBtattttMDYHtSaStS
+cRaKatattacacctMttgNBKtcRtRggNagtYMattaaatMctYgaatgcKHagSgga
+aaaBcaggtHtatWcatcgtStagMcctcatgattaWRcStcgWtgRgttttcctaacat
+cgctcgDDtRaatatMgtcMtHtMaDYatgDatttatagctKDtYHaaaaattaSatatc
+tggtctttattttatMtgtYttgtcatactcaaVcYBgatgSctKtYcctWaRaataWcM
+gNgcgggagtcttRMgactataHaHtgctNtVaatcaaccacgSRaDtgKtaaMSKgtaa
+aaWaKtttVagSDtaaaaaatgttYattttNagMHaaRtNgBttWattatatgcttatat
+catttatKtKaaaagctRaaatcgcYgacgNtacNtccVtSaaatttcDVctaatacWgc
+aMtcttSaaWaaaWagtagtaattaactagRttaVcSaaatataacHgHatWaattggaa
+gtgcgSSgaaVtgYgSttccatWVataatcgaatatgHtRcgtBttcttaaggatatgtt
+gtBcNtaatgtcacVatactgaaatMBttRRcRatccatagagggacatcgccWttagtt
+gWttatKagtaaaagHtttccttSatVatKtgagcaatttattaaYVattcaaattctgS
+attRaMtgaatMgttattattacaNcggVagccttaaKgccYcaaDattWtggMcttMac
+WttccMVgtgaattctDaBYgacttKYtBacatgctDcRaaKaaRaatatctttagKcKt
+aactttaatNaaggctgScacctYgcgcaaaccaHttVHcBaDgtaatHaHVaaatMgtt
+ggtSatHtNNaaVagtgtacaataaagacgKttcaaaWVacagctcacWHaatcctgtBN
+WtaNMKcVcVSWtSgcaattctgKtVVaaacaRaattgatRcgBacaKacVccVMactag
+cgMNaaactgataDaSgagaatVHaatVSVtccggatgRgtagRatttgtaactaBataV
+aggcaagHgaaSMSaKgctRagcStNcatttVgctatacttcNDtcaKBDcaHtDcaata
+gttHttattMBgagctgtaaagtMgatStStcagatatYcBtataacRcaggRaaaggta
+WSatKgatatgagcgtgMYatcagcatVttSgaaaaaatatatgttYttcattatacata
+atVcacgattataDggttBtRaagtHMtatagaDgNttggDaKctBcaaRcgattcgtgc
+cttacaaaWattYWVcaaWagDattgaaagggaagaHattBtatVggtaHtWtaMagtcc
+agaKttSatatcaStDtgWaagtKWaggtatttaWaaRcattaatStgaaVtacggaaca
+tKctacatHtaaaBtcNWatttBBaNatRcDattcgaactataaattataactcagtSga
+tataagRaYaKHctggtaaNtttaaNgaRHtttattatacNttttaDccttYgtaaacag
+gaagtgataaacatBgaSgtaaaaaaVcBgtWNtRMttBttaaBgtaaaatatcHNStaB
+taggtaVatYaccNtBaWagRctNSacRtMatDactStVctaaDtaYSRgttaRNttttK
+ggccagaaBcatagtYcaYNtDatcgtatVcaatWRtaggaattMcatRtgggatgtcMg
+gMtttataagtaBgtggacNaaKYtgctWgagYtWcctWtVcttaaactaRacatggtRc
+atctSDcHcMgcaactttttagttaccttattHRgtacggcactDBggtMHcVaaRatKc
+tSHacctacaccactaaHaacgSttagKtKttttgNHVgagtaYaMtVYNVcggttaSBa
+BtaatttSRcgtBgaWaatctttttKggacaWKaattKSaccttgDRgtcatatDatVMt
+MaVcgaattaNaagMWccctaaHgataatatgtattWataaaatBaaMtgRttcHctaag
+ctaagatatattMcggactaRttttKaSttactWYtgBcaMMacRRgNtactttaaaSKt
+ttcaYBaBttaVagtRtHcWaggaVccttNgtgagtcatataWttYScMtWgVRgattWt
+aSggacggWWctBHatattataaKaagttactaMRaaataSRaDttDaaatataVHaatg
+gaaBDgWgHtcKStVcatHtaatcatggBWaagHtagtMtgHcHtcatggggWcatacaH
+NHagcDatRcaaattcgcttgDggDNVcaacgSgtggcaccttMttaatattVYtVgaag
+RttaBcagVaYaHcaRDBagatgaVHtNMtcttactDaggMgMaattRWDcctVtgagaa
+aaSKatHHttVDgtctgtcacatHNttgaatSaagtKBatatagacaaRVctcWtgtacK
+taacHtgHataSgVtactaggtttatggBgtcaaaYaDgaaaaaatcgMtagaKaYatga
+attatYcttKtacaatttgWttMaatBgaatSttMtNaVgVtScgcttctBHKgtaRcNB
+aatcDtacgattgacgtgctatNaaBtMgagNgKcttWcWKacactYgttVgNcgaattt
+tcttgaaaaactacccctcgcNtgMctatcccacMcactcMatttatttagtagaacMNt
+ttcttgYKaWtaaBtttcWttagHtgtttctcttgtggctatgDgctaatWDataattta
+gaNcgcRRNataKtctaataHgaaMYctNaKWtactaacDtgaVcgagaactggtaccaa
+ctHgaggctagagHHagtMgKtaaactacaggMatgtYgSBaKaaaattMgatRtggggt
+HBVgttaattgKttaaRDacgMactcaaacStaaagctctgtgccttcgtSagtSaRcta
+caataKatattctaVgtgtaattRacKagttattgaMtaatgaNatacDataaggacttt
+ccNtStatatKaagaataKtatggtcctctatgaggttaaDtgtattgataaaactggat
+cactKBtttggcgtcaaagaaaNtagtWKatctaaWBactDaBaYtacaWtaSgcaatta
+ttWgaaBgactgaKctatBRgtagttaBaRRgatttaagBHctStgtVYRtaaataaagt
+MWtcHgcattcacaaMWtcMccWttgVgcHaWttcaNtgtVaggNgcVatKttataaWDc
+ccctatgatVttttattacagRBBWttcttRaWgaatBVgcgtHgWgaccagtYacaatt
+gSttaaMcVtDatttaVttRgttKtcaYWatKtaaDtttWaYtaatYctSctatagtcct
+BtccMaMMtaMYHaSSgKaaacttctcBtMtgDtgtttttagRcgtacttataHgKtNtM
+tKcBtaNKaHStgSagYHtataDtcKtagRtNWaacVgctVtRtttStNtgaaccttaVa
+tgagaaggtcaKSttaDataagcYaSatNStcaatDNgttcgacaatttaSgaRaBNNac
+attRatNtgSttHVtgWHgtSHccaactKttYtatHYttVtgHcNgactMcaacttBata
+tgSgattttacgtatttgtggtScaacggYtHtgcatctatttttWtaSatcagaYatcg
+cagtgtgtMgtattctttcattaRatttStcaatatgcttDtStaaagaccDcVtaWNcH
+YtWMaMcgaacKcaNcttacctaBtgcDacatcaHKtRcDaaacataaRacNNtccData
+NactttatBSDYatDtctBtaBatctDatKaMcattMatatcDHctaagRgYVcatgttc
+gtgataHDYaagttSgHYctaaatgtaaaactNgtagaaactaattRaatcttttBKcga
+atSctMaggVaVaaatgagataaataSgttKgtcatKaKatDYtaaaRttYaMtgctcSa
+tRtagttttagcaaNtaKgatcgWYcacDgaatcaatactgBgaNtaactaaWatataca
+atacactaNatcaVaKaaMaaaaaatcaccBtgttgNctaacaBattttaaKWcaggata
+WMtaattgtaaHtgVtcgaHtScaHtctcHacVatagtaMcaaKtcccSagMYtWcaaat
+HHtaagRttDagtMtcYtttaaWWaaaVaRtcHNtctcSttagcacaKttgtagtNgWYt
+atKDtcatttgaacctcKHtatccttattcttNggtBgtgtKaggWtYgtStgtVaRtaR
+aaagtagtgtcgcKtKagatgagYtttaatKcScctgaaaaaRaaHtttttaaaVgtata
+gKctaNtKaSVgttcgagacattttRSatagttSacataMtaYHccacttttctatacta
+gtatgaBaagctttaMtgaatgtcaKYtaaatatggattataNcgBHatcctaRaaactg
+ttgacttYaHtStcatcctDaMBttgtaWgagtaatWKataaaBgBattcttttctttaa
+tWStaatacgNaagtWaMaaNgactMtgaaDaggaaaSctaSSgatatDttattatcata
+gBcaataVcHcRgcStaHaaatWagatHttMHactaRacttaYaaaaNtataHKVaataK
+tatgatcgtcVaaWgttYtVcaaYggctRWttaaKtRttDaKtgtatcaattWKaatBHa
+aaaNgaatggStHgVVgatMgBYtaRNgBDttMcNtggaNgtcaHtgttDcNaggBtatY
+tacVaNttctcWtactHYcSctgtYtDtgWaatcHgatDatatcHtcttatattaaKaRY
+aDgaatgSYcgactgcRgaagttagtStYatYtttccgacactacagKcaaagDttaatV
+atcttaaacRaDatRcBatKNtNtaaaHtcBgatKHcWStSRaKaSMgtaKaBacWgDDt
+tgYaaYttaNtDgHtatSaSataaaaMBaaDtaMatDaagWtggaMtRcacttatggctN
+ataaaaatatWNMtacctatgtcaYKaRacagttHDagccgtaaYcaatataatcatagg
+gaaSatgMYBcKBBtaaRVRatRtccVtgtgaagVNttcttagtgtcWataVggtaaNaa
+tVgVaKctttNgtttagtaaagBatBtgaYSagHttSYaacaStcgcagaSttcDBtKtt
+tggtctacNttgNgKNNtcaaaaKWactgaaYgaYactatHtaWcaactgttSatNVtgt
+ctSttYctgattVaatKgtaYcaaattSgttaStatggtccaatgSWccaaactattgcc
+gttacgcNatcHctctcaKatgtagtctattttaaggHRatcDaagSaVgaVNccaBKta
+cgtttStagKgtctaHtcattaYcctaVKtttaYaaatYtccgataaaVttcDgatWcgB
+tcctaatttNaattgctDYgtgatcaatttaagggctctcatcKattgBtaBagcaYcKc
+tctttNtaacHacNStggRtMatHHgtacatgcaMagtgtccatRWttRKctaaaDtcMc
+tttaNVgaNtcMatcacHcctgWtaaStcacgtctNaagRNNaagMaDtactDgcttttt
+catcYacttaKttatgcStDaStNaMgDtaacKtMtacctaaWattggtttNaaVHatga
+aattaattacgVNaaWtggaWatctgVatcacYctcVHMtVaNacNtcccaWtttgcaac
+ctcWctHaatcttWcaaaYaBaattSctYatctaagDgBttagtaSgaWtBcRcKtccYa
+tatcKBgtctttatgaaHDcgNaMatggatgtWagRctStagagaagaacagctWtNtat
+aaaataRatHatKgctNactHgttRgRgVcRacatgHYaNttaHtattaNStaagatgta
+gaHcVctcYgggccYcaaaatgatcttctagctctHMaMMgcaVtgHgtaagaWHHtggt
+aactBcaMNNctagaacggWtctttgaggHcYNaaMHtaYcttKaagtSccgttgggNMS
+tatacDttataaaVaYcKtcgcattttcgacctctcacVttNtttattgtcttctaVcat
+agaattMttgtHtMgacataaatagttctMtgtWgWctttcaagYgcgtNaagcaaDaVH
+aaStMtaaagccccgtgVgtcacatcHVaDtgttBtBacBtcggYttDagaDYtccMtta
+gcttacNcgaagatRtDataRtgctaatatatgRtWVttatWKtgcBgactcgagaSgta
+aaaagttaaWaaagtatttctcWtatcBtcataacNcgctcRKaaDKactRaNtagtatB
+tgaaatttcgcDactttaNtYgagagaNttgaattaataaaSMattRHNtYtgttgaDBR
+BttgWttagSatgacDggNVagRWcggctacDaYSgaaattHgtYaaagctccVtataca
+ttaMctttgSgacatBKaattRgtaBRtttaactattctagcMKMtttctgtgtgVgtct
+ttcDcgtaaMtaggtaaaDtcaYtatccgattcYtgaaRttctKaNctaYgYaattYgRt
+tWctWttaaaccaatcactVatgcgYttgaaatgatKBcNRgctcatgaccHagcgaaaa
+tgtVgccatcaBSatKccRStSattaaatttggtaagcVattctgVcattMtacatMgaa
+aaaataYNDtDaatcatWattcaggNcaccctcBtgcKcHagYtatBatgBttgtVttaY
+BgBgataaHNtacRtcaaBaKcagNtcagaatYgttWgggaNDagtatagRtctcDtDaH
+ScagttcYcatcSYacHcagagNgtgcHagtacagctgRtatatMtaatRaWMHgaaKac
+aBRtagHtaaaNcVHcatWBgWaaacWccggtaaRcattgMgttaNgttVMVttgcaaga
+gaatcaaaaaagYScKVtgccgacHgacgttcaMcctcattatgcBttttaagtKatDac
+tccgBatHYgttcatcgaaatctSaKaagaatWVtcgttgtcttaMaaYaSDtaaaatac
+cgcKMtatgKtgScaaDMaaaactgtgagcVtttaRcttgtaNMatatatttggtMgYVa
+tDaatttgctttaaRtaBgttaYaaagKtataMtWStcHaaaaNacgctacMttDDgact
+acaNaatBcagtcattatatSttaVgRtWgSggcaatSataVgSYgctBttataaYRRga
+actgtgHtgacHWSactYNgtttBactatWStaNtcStcMttgattStacctgaattctW
+atNaaHgMatattcaaaKWaBaataatHKgaWgataYcaWMBtgtacKagaaaaagaatt
+ttWttDaMtggttgtgaNMtVtDcaacNttactattacggKctatttaaaaBKatagttH
+aatggaatatYWgtaVtNaaYgataatMaccWagagatRttMtgKaMcgatattaacaag
+atgttBBcNaYattcNgtRttgaBcctaagaSMttcMtcctcYattcaNaRBttaatgVc
+MNgaacKagatcgNctaWVgttaaYRtgctSctaaaaNtttgctaaScttcVattaHtaa
+MacNgttNtKHMcctattttaRtttVtSgtacatBgtVaaSSaMVaRBcaSaRHtaWtWH
+ttMtattVcaMtWaaaNaccccgHYtcatagaaRtaaBaatttaBccaatcRctcatagW
+gcBHRtacaaDttcBgaHggcgctaHtgacagcSNattcctcgagaccBggtcaagWctg
+VcRDgVtaagtttaattatcMtgatNagYttHtYtagccRatagDtaatcNtaKtacaMS
+gDaaaatttgHaHtRDgtaattKtaMHgaBcaWtBNYaWgtttStttaSttgataatgac
+tMKatHBtttaVcYatgggttttaDKcSatttMatatcagtYaBtgVacaatHcaDMccc
+gtaataatagDataatVaaagaagaVtctccgaRgtRtaatcgagtcacttgttSatgND
+HaSNRcggtaSaagcSaBgWSgcatcaaWatgttacatgattcWacMtagtgNcacgatg
+atttttRcWttSgtaatMRRBaacNWRHaaBaattDaagStgatccttcaDacccctKaa
+gScSSHaaYHWcHcaWcaaaMBataattgDtagccWtcRHataMNKtMgHaBcatcgaag
+tgtaRgtgggaVMatgttaWRtStBHactaaRaactNctcHaaaggcatgcVHKHgaatc
+SccttggSaWatWtNcaaBctaRagaaacacgcttcKatRattcWtgYDaaaaaaNatWt
+KgaacgtNttactgWHBaccaWacggttcaaVgagaaacVtMttatagaagtatWtaaaN
+HYaMacagWagtaatttgcatcttcgaatacggaHtaatVattctaDaHtRKRaNHctta
+catcDKttMDKaWggDtaatcttYctcWtRaaaaKtaatcctgccccatgcgDtctaaVM
+tWRKKDctaatatDgactagWtaaaBcKcacMactMHHttgDataKHDaDttHttattta
+gtcaaVatccKWtacWtSVcaggtaatatDSatgcctKtatDtttagacKaaaagcgttt
+aaSaaaYtgattgtKtgBMcKttgDaaaagttBRatHgcaKgDgtgcWataatMWgcVaV
+atcYgWttaDatcatNaVgtttgggcttgaHRDaWgatttctgMHgtVtgccttBtWtaa
+tcgttcgKgRcaBaRMtaattWgctaatMaVBccaHtDagaBNaataRcacYcYcHcatB
+gaNtgaNgKHttctYaacaaaYgBttRNtNggaagcWtDggattgagtHaWttVacaaaB
+tgttaNctaatactKaMaaaaaDtaRatttDaaagNttcYcaaactcMgaYgtacaaatM
+aaatYtcacVaacgaaDagatWgBgaataggtWtKaaMtgDttHtgagttaatttgVaaD
+agttNMataatttaSVattNaDtKVccaaatcgaYVtaaaacKRaataatgaBDtctRtg
+VcttatttYtgaHgttBWatgaatatacSaacctSatNNRccagtactKagaRtgSKMcg
+aaDattttagtHcKcaaagtggtataaaggctcctaSatHtaMtRKattaNRcWtccgct
+ataKggatWttaggtaatHDRatttattRWgcgatcttagSgtcttactatgYgttYaVB
+tgcaYaaRtDaatacHHtDcttHgBgNcccataDtaaaaatctNtacatatWaRMBgaat
+taaaacgctctctcaagtKcacNacgVRVctttttaacttgctcStatRScaRaMataNa
+KagtatcattRttNaVatcKgtacNatttttgaNcgacaaKctHWtgaKStacMaBatgW
+ttNSacaaKcaDaatcWaKaccgYBggMScgaMcctagcaDatgtttcVatgtRBtKNWH
+tcctWDtatttttNNSaatattcMttgatKgNgaNBatcSggtctRcttttttatatggt
+NttDYNYgaaaKctcacacYHRgttacatacttYacaataNaagaaaagttataNaataS
+atacagttScacVaScaccSWtccagKHtaatcaaatVacatWacgBctccaataHaaYt
+MtacKacHttttKtcataWWtgtgaatWaataaaaacatttcaccttaHtttgttccaat
+cccgRBaWgatKgagtttBaVgaNtaNVBgcaataagaatagcaKRttgtatcaattaMt
+aacatataDBgtaaNttcaNcgagatYactggttatgtNVtaBNtDaaDtDttaSaWtac
+taVtHactttNttcttcatWttcDatKaacgtttggVDaDtVagttatgtcagactKaat
+caYtSgttttataaataDttKttKagacWgHgatataaatcttagatNKtttWtWaaata
+ttacSHaRgtttScttaatWttacgRRaaMactcatBacaccatRtttgaacctacttcD
+MggcVaSBagaatcttaKMagcaVtctDVataWtSgatagacttBctDtBNWgtgKatWc
+tYgaaStccgVaaaDattYatagtatcaacBaWYctgaaatttaKVgYtStNtcaVggtg
+gaNYgaRtMaacataSttcagacVactcaVaagtggtattaaDBNDaagtatatMtacta
+tatgatRSgtttgccaacgcacRMtacRYNataagatcMgttgatcataaacttVcatat
+gWtacaaaWttggaaactttaScataactRattMtDacVYataaaagMaattttKtgaBt
+tKcaacatattVtagtcatgactcgDaacDtaWctatRttSSYNtgWaScaaataagaaa
+tKtagacataatggNaatttcSKtVWtgacagKWattcgVatttcKWgagcaWgNKaaaa
+tatgtaaacgttcactaaWgacaccBNaacagaaStctgctaHcVtttMtcYttStagYc
+gtttBcRtaYacttgNaacMtDRtagcatgtgcgagcScaMgtaatBaKataactMtttt
+attaRcattattatacgtaagSNatVRgcttcgaVaacHNtctaHBKYgKaccYcttaga
+gcccaVgatttgttagactaaacgtgcaBgccaWgaVataggattDBWaattttgtBacW
+tttttaatDtMgaactaagcVtctcagBMKatgattgaNaVttggatDaSaBatttcgcc
+atatgctaattgYacatgatccacaaMHtttcKYKaWtYcgDtNaaDccgNaNcacacHK
+ttDtttaggctagRVtYgtaactagctttcacaaatYtHaattYacaattaMSagMactc
+ctcatgtScttcaaYtataaaaScHYaKcaYacactVcacataNtaBcaRatgYagVBat
+ttgtaactttgRggacaagcVacctattacRcaaMacHRagagtaVNctacagtgagacg
+aaaggKttacattgggacaataKNtattcaagWKttgatNagNtgctaNgagatNacSat
+ctNatttatctatRgaaaatKatNKSBcKactatacStcagtaggtVtcaaaBYYgctat
+tKtWNttcRacaaaNatgaacttaRtaaDSttVBYtaatccagtNaaacRttagaaccRB
+atataWaatKctcattcSacWaacaacactDttVttgacYaagagtaSgcMttBttaVNg
+RVagKDcttcttcNtaggttgcgacYacttaaggVHcaagDagaagataaVaatctgtat
+RatDtKaaSDgattcaattYtcatgYgtgaVMtMaactaagaatgRgDtHttaaccaatS
+taaaaMctVDDtgttatcttaBBgccNacKMaHggcBMttctgNctHggagaataYMgta
+MccaataattHttYttKggtKaccaactcccHtMSaatNactcRtttcatgcKcatgcac
+ttcatSaatatactttVtaYttDattgWcctcactcYccattaDDaHaaKcaatSttagK
+tWtcatRcaactattaattYaDggKtagtNcgSgtttKRgtDWtVHtDNcHWNtKtccgt
+ctagtatSctaBcacgcaBtaacatgagatVtttaaggcaVttBttaStWtattgYaggt
+SatBMBDactVtggttDagacataaactactBgcacaacMaagaStccaWNaaSYMYtgt
+aKaMcYSaHaaaatatttMgtcaaDScaKtcaBVtaMVMRRDMtcttRBgWctaacttga
+acNaatgttWgtggBtRttHVKgKcHVtatattSaaaatBttcBtttcDgHccBagtRBR
+ttaVagBctRcaagcattacKccaWVWtaVcggttatNaSgccgKtYcBaagcWgcatga
+NHaKtagNgcHcgtgtcataaaatagagacttgHYatattctaBgtttatRatctattta
+gacattttNtWaaSagtaHatRtctcggatttatgtgatBtctRggggcatWctaSVMaR
+tcatgKattgRcatMaHaataNcBcDcaggcactattHBgaatStatattcatBgMVata
+aSacVacKHatggttaaBKtgtaSaWMattttMacKtgaaWaaWgctgRatgtgDacBtS
+aHtDgtgtMVttagatgattagagaSttgattgtSaaacagHaaatacaRcaccBtaaDt
+caMtKaaStttatKagaataaNcaaBtattKaVNaWaNactagtYattaaagWgHttaMc
+KaSagatSactctatMSagtggaYctcacKKgaSMgcRgKtgccagNMataatccaVgat
+cttHagttttcttaaccataggggcttaDtYatcgaaaMataagcaaatBttgHHcHaga
+cagagaggcacWtacccMttacgtgNttattYctVaaactgttaagtKatMagttcacaa
+agggatgaVNMatgcaSattatcKagtHaBtgaagBcggagtWttVaaDaccMScactgV
+atccaRaSatattNtgcBatgBaaNgtcaBMgggaatgagtatRgaatgtNttacaggct
+taHaataaHSagatagtgVctattaaagggaagDWVccatcKaaaatRccccaSVaaatt
+tMtatStgtWagtStMaaatBctgcctKWgttDDaSKactctaaVRtaSWcVactggaaa
+aNMaaaccgcacNtaVgaagcttDNgaDBtaMaMKNtKccaVtgctcttMMYaaaaHaat
+tcWgHcgtacatWaMaaKtaataccgBDaYRaggatatSKcScYagMtaatKHMtaacca
+tgHgtagDaggtgtaaatatagaKVgccRYctcRaKBKWtgatHYcaHgBaYtttMcata
+taatgaDttcatttaStgtcVSgacggtggVgtBtgacatgtaaSgtBgatKtKtaYcat
+VtNattataaaHaSccHaaagctSMKattcatagcacagtgBRataacaatMttKcWaaa
+aatagStcggRttaattatWaataatMaYagatgVtatccttttHaScgtBgagWcatgB
+tgcctatcgtaaWHacagtactgaattaaaaaNattRNMaSSNSctattcaaagccVVca
+tattttagMcgtattNtVBactacScattgKVtataaKtttgNaWcttNacctagtgaNa
+aDcagtaWgKggaaKtacgcaaaYttatacSttgYaYttcDNagggttVDagHatSgtac
+YVatataVattataSataacgKgatVtVacHYRWttatcctaaDtgtaaDgRDttttatt
+WtaaDttggatcattNgtVaaaVggaaggcYgSWaaattcWHcgaSaVWaMatctMDtHB
+gttttaatctaWaagatatDKtVttaccgaMatRaaaBttaNagHatDHWcDtBVttaat
+KtMataYttSRHHcgtaHDtggttccaaagRRtaWtVctRcaNDttatacgatMcaatNH
+tacgaattBaatHtcccatctctccBtgtataYctatgtcgaaDYWtNggatNcacRtMa
+atNtKcttSYSctaDaaaggctDaStatKtataBgcVaatttggYcttaaatgatgtHct
+aaccaactttgggttcMaaDattatKtVacgVcScaactSataSccHttYctttgtggcD
+tMcactaNSBtMRBMaggttWKtattaatgtKHacttcaMVatctgttgtccaaYNtaag
+ttKaacttctHcgcWtYttatMBgBaMacaattaDaactNaaatSatcVtSSgatctatg
+NatSYaattRatgcDgtctataagagaagRgatatttcccaataHgttttWKtgaagNRt
+ctaaBtWcHHcDgaattgaaaKtgttaaRtatgtaMaggDttcMaccaMaattDctgYct
+aWtStaNtgRKaBtNcMHcSttMtaKccYacgNNctttatStgVtaYtaagttaagaBHa
+aStVKHatgttRVWtataMtSatgcaattcMcttatKgMcagtgaatcYtcctNaYctta
+ctttctcttcatggcgNcatScStBtagctWtHaaWattaccgtctcgtBMcaaacKctc
+ccaacttBgtWStVttMRgKcVagHttVtaagMaNatcaHttacatcYKttDBtatgSat
+tVcgBcBVYttHNtcatKgcYgaaSaKtatttttMtctatctaSaattDttcWagHSacg
+ttagYgacWaSaDKatcNgctaatgVSctgctYgaKgKtaataggtggagcgtcgaaaaR
+YtgYWYSaatacBgacWtaNStcaattWtRcttttaaSYgttcNgtBWWgtgaatHtttt
+BaMcMtKccagtattttcgaHaDtSVgatgaacatgcacgtcagagDYattBcagDctct
+tNcNtaaaatRctgMcDacaagtttagtcaaSSaagaaacatacaDtctctYgcaaacBc
+aagaBatgtattgacgagYacBDgttcgtgRtaMgaattttcNtgVcttctgtctagtgt
+ccatatctgatYatNtatVWgttacaDacaHDDagWtgataWtatcaaBRatDRtMgVcg
+aaattcSMagYgWacgggtaacaaattcagcatagSgttactBctgSVWatYcYgcBWgg
+gRcHtataSaattBcagHgcgcctttKcttWaggctttaaDtRacBactaaVaaKtaaac
+ctcgcgccattactKactKSDcgacaVtatataggataKctcgSatgHSatVcgtagtga
+BtSYtgaBataatStaaccaagttcaDtHtatattaacYatattatcctacgagatcacc
+gtVSttctYgtcataaVactcgWtaVatttgttggactaaaVcaSaDtYcgNtYtctVaM
+taattatWRtWcaNtaKcaaYggatgNgaatcaatcRtcgagtHcgVgttataHDcattt
+aagttctHtcgMRHtaaagaVactBMtatgaagtaaaaaBNtataaNttcKcctaNttaa
+DtcgMacgDcaMatttgYtaaNtcaccgatgagMtgttaggWcacHttNgtcttHYMcaa
+ttKcagttcNcaaaacgNaaSattgKttaaBaKttatttaMggHcttttaaRNVgttaYt
+tttMVRtYVgRatKcgVtacgaatttccBatBgYBRtSKKctaaaatgatatgBtcttcg
+tttgacHagtaattatatctgDtBttatgaDtatKtcKRcRttagattattagHgDNaaa
+KgcgMtHtttKtDtgaaaagtaMatcagaaccgaatKgtatatVaccRaKYtDHtcSagt
+BgtgccWaaaggtYKcaHatDDaaattDStDtcKggtMgcMtgtHtcaaVcgtttNtagt
+NtgKgctaDcScgBcWSatgtatagcKgWgttgaacgagtgcgcgtKaaaacgRtttcca
+tatatttttMgaKagcVcVRataccWctctcgBcgaggcgttaatgaHYtttHtaSWtag
+cagtttKtYaacaaataMtaNDatRgMBaBacSaataSDctgaactattgataaRtaVtt
+tHatWaacWtVaHaaBDtactYtaDactttSgtKtRattgatttatatattattataatt
+BatagattctaacDcRMaaggttcgtcatattRVYcttKgtRcgWaatcgaaWWatDcta
+caaaagaattHaatctgttttacYatKatBaccMaMaaVtcacStaaYgYKgtttctcat
+tatattNgSaaHtgRaBtcataKYtHtacttgtacaaaDtYtgatagNRcYatgaStaaa
+gactgtcWDtYaatVaNStagaaaWtaaaataDYtcaMatSVBVaaaYagaaaattgtgc
+DagWSaStattttaatNcacgataNBtaattggaatgcMgacattHaattctctaaMata
+ctaBaaattacaHWgBNtNaaSattttaacHtgtagtBtcRtttSaNNaYaMaDtatDta
+gaKggYgcaaSttgctactDcNRtWgtttaVtggcaaactattgSgaagtattatgDgcg
+tgtcttagcNtRctKggtMaHgaDaaagtactgtcgatttagatcagNggtaattaKaat
+gaaYaaHaattggttVaaMggatactctaBgtYHMcttccVcaaWtgttHHRgagttKaa
+agaBtaRtaaWaggttctatRatSgtatcYtaWcatgtaBtcaatctaatRgaYYtWtcc
+attataBacttWtcctaHaaaaggttgacgtRattKgaagcattSBtttctaNcSctSSt
+NtYtWaWtgtagtcttgtctttaagNKgaagacgDaRgtNaBaVDgaattggaYtaccSV
+YKctSKKcatagttgSttatcStactcaatSMataHcaKgatWVYtNacagtttBtRagY
+HaagtaNaaVVDgatattMaagattagcatcctaMaaMctgNtMcSaRcgctHMttaatt
+DtttYttcgataaagtMtaagttaWaaDcaatccKgtgMMcatBgtRtaHBcttgtBaBg
+gcaDcgaWttgggtaDaggtgatRtYaMWDttatcNtVcttRaKagctRgtgcNaatctg
+attatagattagtatatgaataDNatcYaggKRacaatcaHcaagttagtKgRatRgtta
+agaaaatacVctaaaagtgtaagKVgcttSWaaHatagHctagtDgDtSaVtgatcattt
+aNKgKHataKBctatatWaNgtttgcRaVNttaDgtcttagHYKatYaVaBtaatgaBat
+taYcNtgcaBtHaacttVtccatDagVaaaYgWtNDBgacagVgctcaRtaHaaactttt
+acaaggaSRaaatagaagaatacccVaHatcBRtcttttaaDMHWtHgacMtctcaagKD
+ttctgYctctcNagaMgcgaaDWatMcMatatttDctttactaVSctagttcaRKWgttt
+KRaVaaKtacaacaKttatttttggcctataaDgtcBctBDgcYYaatNactcaaRgaRW
+cgattgVNcWaatctgKagDMgctatKttRatcattMaagtctaRaVaattKctgaKtat
+ccgaaRatcHMaaaaaagattccacgtacgaDStatatctcataggtacgcgatgtgaag
+gtHYtatWagKVKgaMDcaatttWccttgKgagtctagatgaatgVRcctaMttgtaRaa
+YtRtaacWgaaaMttatcatNcgttactaaggtDaaggcagtRctcatcaatggYagcca
+gcgaatatagtgttWtaccaRctagatttDtaaatRcDKtccHtBWgttctWaagccYBS
+gtggaaagHNttHtctaaattaBatggaDMgaBgatatcaatactcMtaaKtcYccgatD
+aYgHDBaagBattWattgatttttaagaRaaggatggYggaKttaKtBVBcttaWcttBt
+acctYaNYttgctgtBaaMtWtcWaagtaaggWcgMDaaNtccWMWtatcMVgaSaRcta
+KtBgKWDacDgaaaaNgttcaaaaataMcttaWtatgNaVaaRataWtgKctRatataag
+tgttgacgaKgaNgtaHattaaRagSgattctatgtYtcaattagBYBatccYtgtNacH
+agHtacVcVacaacaccgNgBtataYaatWHSttattgctDacttgtgHgHcMcHacagc
+tRSDtgattaggaDHtYagatggagWtaMatcRcccacRaaaYagcagatgatacatatt
+tVBBcaaMtctctaWgaNtttcctaVcttaYBDBctRgSaagcNgatttcacgtcRDaVB
+ttaRaggtaaggHcacttccgDBKgagaatttataaaMaRattagcVgtttacaaagaga
+aaMtgDtttYttggcttataKaStacaVttBttcttgBcVaataaagagtgagBgcgNcN
+attgaaacRcactDaaccaatWMtaaHtBgaaacaaccctcMctcaaatctMWttggttt
+tacttagcRtttacatRtccBttVcatgaaBacaYgagHttatWDtcctSatRtYggHtN
+MttRgNtgcatcacgacagaHgtYaSaactgaaNWVagtagttagaNgatctgcatWYaD
+acataHtaWttaatHaDgactYgttcaSVtttacctaatttaDgRcagacaDtgcYVtta
+agaSSKBYtgHtDtNtcgtcWttDtgtcNtgacKagcactccDMacDNcccctWataRKc
+aaatttctRVaacagcaMtataaattWBctttgKgVcatttaVgtDgtatHtgtaSctag
+tatagcBtBtgtatgtcgcMcgagttctacgaaBgWccgaWatgcaRtWtaagYttaNtc
+WaHtgattYDatWRgRWagtRcHggNatNttWaaacaSgcaatMatgacNgggaSatgat
+ttcBHcctaaggWactacagaaaagctMcaaagaYtHVgtaaHKgKattVaWtttcctaW
+gaKattatgMaattBgaaagtgaSaaaWtSNBtttYataVgNatgaSgcBaaccatattc
+ctctagRtattatctttctMtgaRtctcYgaatDtRcHgcRVtWtaacDtcacYatRctt
+NgcgaDtVctWtacHtatatgtatKaaggtaNcataKRaataacacDctcctWgtSaWca
+tcDgatatBtaatHSNBtcaataaStHtacttaYaDaMtaagMtgNaaaaNccccgYWHa
+atgcBcttaBcgtMBKggccaVgacaWgaaaaaVYcRKctMgcaccWctcSacttcVtac
+gaagtYtcctttttaYgttattaataactSttRggtcVgagWRStatKataYcaatNMta
+cttcgcttVBaYRaKttaaYatacagctBgagcttcHcaatBaaaVcgctcacaMgttaH
+aggctaDtSgatattggggBgRMagtaattggattgYYHtVtcttSRYaacttataBtNK
+gatVaWSDWacatVcttgttgaagScaDaSttcactaattagatKttaMcHtMgKccaYa
+tKataMcKNgattgtYtaaRHHcaWagctgtgcYatMHaatRDgtgttYctatNKtSDta
+KgcBttgagtKtacatgaaggcgMatDaWtcBatagtaaaatNYtSVgVatttcaNgRta
+RaaNBttggaatVgaaaaagaaggtgNtttVBgccttgtgaBtgMgtaaacBgtactWgt
+aacctatatggaSYattYtVgtttaagccaRtatRMcgWMgDVSNgataatBRccNagag
+StHttBgctaBagatattaacaagaggttttcDaRagtcDgtHttcataagaacaKBtta
+BgactaRatgaaDYHttgVagcMcBDgYactWgSgacBataMMcttSaRHgcagKcgaaY
+aDgttcataYKcttcMWttattaaBacDcttDtttBcatVggttVHtgtMgKcgaaVgtc
+gMaaHHYBMaHtaaKaDttaNgNtttttaggMcWttNaaaDaaaaactRgaatagSVHta
+ataagttStccaatcHataatacMcattHtacaatttctgatggacatatgcaaacaKBa
+tgcagacagVcctccgcaacNatcMaHtcMtaSctgtaYgtStcBtcatDacRggttRga
+gaaHatVcttYWgaDtatgYcaBKgtSWVYtttctWttHtctaYttttaBtcataaNgtB
+RaNcgttKgtgVKgggVtWatcWagttSttttttaMaRWtccgttttattaHatttBVta
+taSctRWtgcMacaattaStBcacggaatRatactVgaagMaaagWacaMgctaacaHct
+HtaatacacgaYagtcttKagcDttaKBHccgtaHaacaKVtcMKcaataaaNaggttSa
+atcatgaNaaBtacggBcaagatcRgttttHaNgtKctYatBHHtaaaDNHtaVtVagtt
+VacKtcYgcattcatacaaagtaacKaKKtaaNtNataaNaaSaBtagaattctgacacN
+taHtataBDttBctataatagYSctgtaHcgccgaMBaggttaMHtKgttactaaHaacg
+DatataaagcaWtgaMtttgVatcKaattcgHVNatNgDaaYtataHacaaacaagagta
+tatDStgcNgcRtaaWVVaDStNgtcaaacgDttaaggNttWcaVNaccctgaaaMcagV
+YVaMtBgtatacSacgSgNtaaaDtRaBSaWcNacgYaggtcaYtattagVStaccgatg
+SStMattctWtattHtHaDtatgYaatattgttttaNggttVatcttRcgaNtHaVaStg
+aagactcacaaatcactgataaKBtNHtttctWWtattgactacNtaWatataaaBaatB
+ttgggtatYtttYtgttttVttgagtcVaMVgaatNtaaNgKMaacgtaatattKWggca
+gtgRttgtgacactaaYacactggaaKaWYRgcatgcgttctBcttggtVaaWgtttHag
+tcaatctcggaNWtaatBNcaMVKStaNcMtgatataatDYMctttcgcatgcYtHtVNg
+StggagcBtggMgccctgtgNtVatactgcctcHcataDBtaStgNcagaYttaMtcaYt
+gtagatDaagaHaaaRcRataattcaDtcaDgttgtatRaaaaYaRgtttDBgDcgaagc
+NttgcVttcacttaMgtMWaYaattcggaDcgaVtYattaBYaaaattaHVttttWaacD
+ttaRaSWactcBgaRctacaVStBaaatRgaacMSaagaatagYtNctcaatagctNtta
+VtgctgtttgYcttaatgtgMaStactgDBagVSggtSKMYttDatgtMaaSaVtccSRM
+gaaaactHaatWWtcatttctDgcMcggVtgtRtcatctttNatcaatatYaKaaaatKW
+tDDDaaactaagtacRHtcKttacaataggttWcttataSaYctgctVtaaVggatccta
+HVttgWtgHtWttaDHaNgaccctatatgcWtNttacctaYtttDWtttaggHNgccata
+ttacKggattVatatcRcggRWMtgcaVRaaHgtaataattttaggtctcDccaatatgS
+aaaagatDtaaVtYgNaHBtcaYttaaaaacagatataaagttaaaDWccMHMattggta
+aagtccgaKtatDKaVHaBagaBatactataVttDttDaMagctctaaDSggtttgaDac
+acVatcttNtgatKtVaBStatgNtgDKYcaatcataWtcNatYccgRtcgBHacaBaat
+agaVtagcttgaKagcgHtttDNtgaagMttSttttgDDKRWtagtaBgtgagtgBcaDt
+WtaHcctatHatttgttWgagcggDtgtRDRcaaatagcacacRtDgtgVaWtaattRac
+VataBWacSYWVctgYtWDaVtaKataaacttKaaaMVHaaaaKNtaaacttgVataaaa
+tMaaatMaagtatcaaRtatSYRtBtaataattgtttgaWtaNNtctcaatNaataaaaa
+aattgaaaattattgtgttaaYatccccHtaNcattcacttttaMgVDtaDMtcaWSgYW
+cSYtSgaatHtgctagaVattaBtaaaYgatattcgaaBtgaaDacacatRaagcgggag
+ggDMtatDttaatttggaKSNtactRMttactgtBggcgtcatNttctattaVacgttcc
+KtVttMacttWtctaYcacgtaVtaaRgKcttggatSYatattttgttacaaMgtgagag
+aSatattWcagDttggNtNaaYtaggaaKtYHcttgKattWagNgtaagHHVatYatcat
+taaaaaYtHgttcaaaataattatBgcaKWKtagaatagtatBagaaMtattMagaMtHc
+WgYcacgttagtgtDNggctatNatRcYYHtaacMaSStattRagRcgataaaatWNNat
+gaaatttVtKcRtKtDtaaMcctccaDRcaHtBSWcYtaKttcacaaMaataaMaactcc
+gSgtYattDtaWctagatBtaatSgatgatHKgttgcaaaaagaScHtgaaHRDatSaga
+tcBcggcatcatYVaatgMaatStgNgWaaaaMttgcYaaagttSHaYgaaatHattBgt
+aaMRagSaSacBaagtttttcatgttaaYcagYtgKtYctaStcaagcgtaVattaNatW
+tHgtHKNDtcNaKaVaStSacaaStttagaaataatgcDSatgtaKtgMMtcaaagtNat
+tacMYgtgctNgVcaaNcDtaaaVtYggtaaaactgcaagaWNcaaacctDSaaSgVaKt
+ctcatataMtggBtaRttKtagRcctgttaHgWRaattgDaaatttHtaccagctcagac
+cKaaBctaagtatWtaVagBgtttatgaHaaggattStaactWacKDVtMHccgtacaMW
+YctDtagatttRctaccRagtWcWgaaaaMcagttctgacSctaaaactgaatcacaNca
+MWtWccYgtttNaatttggttaaNtggttSattttcaacgYVccMtcgaactBtatcYtt
+cYDVMttcgattaKWtatttagcaatatcagWatgcRVaatgRtacWaVVBttggatRta
+NgRagttDYataacDVBcaaactttgtttgaccatagHMtRctaWcgacagtgcVcaaVg
+RgtaagtRaaaattSBKacBaatcagaatgtHattcaVRtatVSSaKatNataWRVaaag
+MaacataDgataWHatcNYcMtatttggaSatttcHcgacaYcaKaaatattacHcSaBV
+atHacactaMDataaaggcacaacaSacctgtaaRgtcccaaaatWtDtagtcaagNttt
+gatDacDgcagaDcWgatDaaKagctDWtttatatWgDcaaaWttStDtKtatSagVgaa
+KtaacgaccgMgaSaatRRcagYtgttNDggcHScaaYDWtcaacgtaHgaStKtgMtRt
+aatccagtDaaacHgtacaaccHtagataNaattatcVtgaKaaNaaaaaaaagttgMgt
+cRaNaacagtaKcaBgtttgaMDgDMacttattatgaDgagcgtcacaaRaagtYaggMt
+aaactagaacagVaMWataggtatHagtttaaHtcagtaaatgRgcatgRctgaMttBaa
+ataagWVtcHctgtgtYaaaaVtKtaSaaBatMtttgttatattattcaaBYctBWtgga
+tBtgaggDagtgcacVataRBctaBaaaataatttttNggtccgtVaaaaataaattBHa
+atBaagaHgttaagcctaatcaaatgaYtKaatYtaaggtMgaRggtWgggNactaacga
+RaaattSttWtaataaVtHgtacttNtaagHaSacgWggaYggNStcctgacgDcgHggt
+ttHggtNtMtttDatNDgtgacgtatacgatKatataaacaattSaaagcagatKtttSa
+gcaaMttttgaKtMtagtcRacctKSttBttaatMtgcgttacaaagaVaataattcaSa
+aWcBVacYKtacaNBaaKRtRtcgWtWBaRKVtYWWWgattgBctaaatKaattaYtMtS
+BMBHDtBtaggDtcNctWYagtgSaaBaVtcttNgtcgttHtgtMtctatKtatVggKaS
+aagtttattttatgtactactHtHttSMactatHcaagaattVataaaMKNtaMccgtga
+tDaHcaacttRataacaNgaatcSBtatgacBcctcgggtaatWaaWtacacaattctRV
+gattctatgtgtatHagatagggacVaattttDtNaWKagtatatHtagacgaggtatgt
+cagtgagHccccaatNataKMBaHtcWgctagtgHaatBatSataDatatcacccaagat
+tttcSatKgatWtgaagtcBMataaHaaMaattatgcttWWtttcgVKYNBattggtact
+tcaaMaVNcctcHatcgctVcttKatgtctctBMggacatcaggacSgaKttgagtctKV
+YaaagtaaSgaaaHaWactgRattaaBttVaHtggattagRWtaaDaaatgatttSMBWM
+aDactScgRYtgaVagNctgtSBataKacStHRatctVgBKaggccaRctaacttcYKtc
+aDcttgaaacBBataatacYMgWgctgtacttttatgaSaaatYcccgattattRStcca
+aaBagaacaaaVtttgcttatagaaacacScccSaNtaaaaBgtaaggcDgtSttRatMY
+SWatcgtaacgtStBagttaVaaaScccSggaMDBSgcaaKaggatatacgtatgcWact
+ccgVctNttMaYtaaatKaaatgKStaaaHaKatatgBtcctatgtVaBggaatBcgcaa
+tgagtatHcYagctDgtWaaccagtatWWtaRtKagatagtgKatatgaaaggcaWgtNK
+aaagataWaatHaaaaaKMaaatttBtatHtctNactKtBVVagtatcacgtMgtgttaK
+taatcgaaMHtYKNcMaatgcaSaaDBaaaaagaWaDtWMgaacatttDcatttaBaBtD
+ttaaSMtcagcttttRWWaataattcNctactWaatNaBaattaagaaacttYRHaccat
+atKtaKcNVgttYagttBtaaaaVtctcgVctagctcgSVatatagVtMcaaHRctaHSt
+ttNtcattRaatgtaRtgttaatYtaagcattgaatttaKtctaKKgaaggtcgMctttc
+WaagcgWaKcttcYttgtgaRaagMtDatgWgYaataKaatSWScatKBtYgtaagagaV
+cacgctHStaacaSgBtgtaNRYaaWtWcKgaccDtgaWtgagMaYgVVgBaRacYtcKg
+atcagttgtaKcgttgagNaStctggaatVtactaSNtaaagtaatcaattaaVaaDatt
+HDBaHKDHctVggcaaacccKMaatVtgttacBcctStgBgMtScgaaHcatgctMtSta
+VttttcDaNagtDVaatYcggaDaYtaactaNgtccaattSacaaaaRgtagaaKgtcRS
+NtgatBacccttMtactatKgtaaRMagataMatgVtVKagaRagtcagMgMaatRHNtt
+agaagaatgggaatcHtttttSgtNgYatgtgcYtaatgDctMaaaMccVScgcRgKNaa
+agtaMtacaKaMNaBatagBttttcttttYatataNaWcagatttgMtgaaacaBYtHaa
+atgtaDactatttNatttKttSattgBatSRtgKHttacgattgcggtaaaaacHHtaNg
+McgHaVDtgtagaagatBaaagDttaacSatttaatttaccagatataattggVgaRctR
+tcgccVatRNtDgcagBcVaHtBaatDttatgKRKagataaRgcagtaKgagttatatca
+MSagttccRcttaaatgatcttataaacaaatttcccttaBaWtagtagttMaacMaKaa
+aagHatYKactttRatgtctcgattBcSagaDKtttHtBaccttNttVttVVtggttacg
+taaBMRgatcgtctacaaNBtaVggttYaaggattccaNgRgtagBtgtaBacaagtata
+aatBaaatKRtaMtKHgatcgYggDSgKRaSttHStcatgtatatWacacRacHcatYtt
+taacYatatgtgttNtgcSagDHgataYttNattatcVattcaaYttggtaRHtWtcgaB
+acgtttaBaccaBaatgtcgcNagaNtKtaDtgDtatgDaBtcKgtBgatacNaccDDat
+ttYtKggMtYNtaactgVacattaaHgMttatcgtHMNtataBtKSgccaVttaBcttat
+tcBaagtgaWtaRtcctDVRatgaattgatatgaWgccacDaatKaHtttacatNttaWN
+WgtacaggctacttBaYaaatatacaaaatttcgNHgMgttHctcKYcttgMtaacBaDV
+taatttacagaRttttttagcKagtKactatMRtgtDtaattccRcaaKSttagttttBt
+ctatagaKaVttttgcNagtKVccttagRgWaNaKWttataDgcgaatgMKatgatRcYt
+ctgVagaccgcgVgactagaWaaHNtcRNRKaatactcYaNtSDKtcVVggNgDagttta
+aKRgttaDcgtNNgtcaYttggtttYtatgtaaaggattttagatattKMcatgYaaatc
+aVactcagagtRYtgtaactatagtBaDtVaWatDatctataaaSgggtactaYaKKWag
+aaaaataaattatagRcaaaVataVagatatgtaggcWagacRWattctgacgcDtaBcY
+attgtaDggMatgagcgagaggctaaatVtctcagRagDtSgKNcgtVcStacatttagN
+tgatSNgatcYVtHattHtBgMacRaattaHBacRcNaaccctVaaYaattcVccatacK
+cttSagtctgKMNagRaNcatNgcgHattStSKYRggtcagtcaccattttagtMaccct
+ggVattHaatVagaaMaattaVacatacacaaattaattacgtKtagaaaMgatWgWcca
+tYtagacKatctKatMcggYcgcatgHRtcStVtaatHgSaaaVagtgaatgtgYtatta
+YcRagatgatcataacacSgaYaactMKttatRcgaataaMSatacNgaMatttcggcca
+cgaYYMcaKattRagDtRtatMVBtaattWtMHgNaWDgStaaSNggStcBcVYtaYaga
+HtacagttccMcgtYtYttcattgSWcttagttcgtHtgVRYgaMacttBtatcaactaa
+aaVtDgataaDgtatcatYDttaStgccBacctaaBagttgRtaSBtaaaagWgcacBgg
+ttagcMaYatttBgtaggtRBaSagttcacgtaDaYaaaacDSaKattctgtSatatgta
+tggVBcctctgtgaaHDKgttaRttttBMHgRMgHagtagMgacgaagttaatattgRtH
+tHttatYaaagcagatgtgattagtggcactactVattagatctctgtttatcattYttg
+atHcHttagStgatgactctDaaatcagtgttgtttttcYaaagtatatcYcaSaacaVt
+tcgWtatKaaaHWtRgtttaKacttctgaaNaYacctNtcStatttaaagttKgtgatcc
+tBcaBtctttaaaKagttgDtWctDtgtgctataKagtaNHatctagYgatcMgtggYaa
+gactgacacttaRaaccHgttcaYtagWtggtgBcStacaMcMHataaaNagatactcca
+ggagttaatcatRttttgaKNgSgcaggtgttRaYcaaataBtaDtatHgBtatacKaat
+aKtaggaaatatgcataaHgaKttttatMaaaNgMatYattgaatNtatVaggtKctttH
+attcatttatYtattagtataYtttagYcattagaaataHtaaccttactcatYttHMRa
+gttctDagNSVgcgVaNNattctVcaaVagaatttaagaggttttacRagtagtaaaBaB
+aaMtaScKgVaRcNtctgtataagtatVgtDgHaYttcHYttaagatRgtgaattctYaa
+aattRtcWtacDDaRatcaKtaSacaagctaNttRYagMSDKtWgWaYNgaaaatatNta
+atatHMtMWRaRacaaaatgctgctacNKaKtagttgVatDaVccatSDtgaSggcgWat
+ccBgaaVtgtaWttagatVaBWtacgWtaYattaaatMctDgDaaKatttgaaatgctWc
+tttaHtggHaBBSRVBWtgattgagatccNcaaaHttccgVcttaDHtNgtttaMggccV
+WaagattgKcaacgagtatgtccctctcttaccDtHcttcctBatcStVaactaatctac
+atgtacataacDgcgaVttataagcaaRWataattcggtMaaBccYgRctagatctNtBa
+ggacMaaaNgctgttHgScgttaaVgattVDtaaNaccggatatHatKcgataRtaMcag
+ctattcaagagaatHcYRNgNgcaWtgagYtacttNtaagStaVVagctgcaaggHatgt
+caWgaattKttgtcgaBcKatKKtDtRtNYNtctactatgcgatgtaacDtcaYgaactS
+HctDataKtcaagtccVRtWaaKMRtagKttaatagtggKttYtaKtVataWYgHBatat
+aatcatNMRtDYaYcttgttHagRtYacgaDaaMMtcagattBVScattYcaataataBW
+aBatgDtBaKaHacagtBggaVtgtgttRtgacataaagtBtaVgttaNaatcaSgcctg
+tcBBaVttctHgVttcttgttatccaatacaNtgcgctatacctcatHtNaBMtgtagaD
+tKagtHatacctHgtgaDVWtatcWgtatScattactSgatcWatatDataRSgctHaaW
+ataataYacgtacgtgDatHcgtaacSaaagYaMataYaactggaagtKgattKMaatSt
+RgtatVgttcttKSMtcataVtttaDtgttatattagWtatNaDcttgccHaMDttStgt
+ctgagtRtatRSMWttaStcatattaNaDtcaatttaVatgMtcaattagMYWaRcNtDt
+tcaaagMgagaVHtatYaacggttScaaccVKHaaatacWagaataaccMatWgctDtat
+ttgaatBtNttgaaBgagaaWcttggatcRctctaDagWBcacaatMStBcBWtatggta
+gtgaagaMKatacttaYHtNctgttHSMaWttacaSaatgtattttggccatatSatcgc
+tctttgaRRVVtDaatcSYHcSDNacattcMDaNVagatctSctBcatagtggHagaVtg
+tSactctSHaMaWtgtatcattWtacgaaHatatBaaSaYacagtaaaagtVacatKtat
+atataVtagcgWccacagctcaaccttRtatNactMtcattaaatttNaaggctgYctct
+acatcaVgcMHaagaBttcgYDaSRtHgaaaNcaWYBggataatBactgaataYgcgtaa
+cccactHataagaaWgcgRacccagagaVtataggcttNtaaaaHatacatttttYYatH
+attgaatgtNcttatNaVcaaRtKctcgaaWctDttttataaatgatagcgSttcVtgat
+ataaataataBgaatgaRacgagtaRctttaactattNagtcagtgtgaSgaHRacgVtg
+gRccatttatgtMtattaNatgttaaatRaBRttcatcttaRBtNtaNSWgtVSgcNacB
+tWaDgaaNBMgagaBMgaHaHagatttctNtWatcaaaaDgtgcaaWaataBattaNtat
+gDaMaWDataNtctatDagatSWctctggaccatcaBgtatattaaHacHgattcgatgt
+RtaYattactNtWgaaRgcgDaatactgWcKaMacRSaSaacDgtgSgSRaagNtKttat
+tcattaagtctgtctctataaVgctHKttgVtgacgattgRYcatccWcMtaBagaHaca
+aaDaaaRVgcacatgatYaatatttMttaaWBtctcgaNcWDtttcagYKattaRtttag
+HcKaacaBcaggtaacctaHtaMtttaHacctVacctaaagtcactttcWcaatggatSa
+ataHattacaMggtgaaWaacagaaattgttggRggcgattatWtaKtScWKggtttctt
+gtcMaRgYYacacggagtgccDcDattcaaacHaacttSScaaStMttaYtgtcWaaaaa
+aaataBataWaatatBNttcgttgtVatgacaHtgtacatHtaatgtKcatgSatacVRc
+VctttagNttaatKYgHtRccttDBggHgDtgaatcaagacacWtcgRWKaactgRaDNM
+actactgacaDgVgatcaagNRatacagattSMttaattYtgWctRgttaaKMgggaaat
+aagttatgHaScYaattccRMggSagaKKttRggtttgDtcgtcMttttggaDgcVctYc
+aaataattSctDaccatNataDtaaaWtttagHMSSaagaaBgatYaaggNtagtgctcM
+aatttWMggtctatttggaKagaggatWcatttgctatcgcccBacacttataagaYtcN
+cagaNatcaYHgNgaacRgtaDgaNYttcattRtagNDcHNVcgDctggDatDtgNaaaa
+aHgaYagtRtcaaDcgcaKatcagttattcataaccNaatacacaaYWcatBaaaacaRt
+tMgtaattctWttMaMtttccgaNcatVtgatcBaRtttgSaactcaKYaaNtKDttttR
+agaMcDYgcaKcataVaaagattcatatWcHtagtagatttctBtcWHtctaRgaSttgH
+atgaHMtNtaactgaaaNWtDctgDcacattMctNgWattatatctSttaScctaDaata
+tDYataaaaatataatNctKaNaatatcSgagttaagtKDttaaStaaHtttaatgaRat
+aBtaVcBtcDWWaaDaacacRNtaVggatattatagtBttggcaaKcacRNgaaYaaMRa
+HtatBcaaacNataKacttaMtaacaacgRtaattgggaRcttagtWataactKttDccg
+aMcacNHKtattStaRcSStDttacggagagtMtaNHatttWRNVgaaacattcScatgc
+taVSttaRaMagatcScaBggtatacgatVttKcVtagtgccgtcDtagtRagggcaggg
+RRttKtcgtKDRaaatgatVttDtcatMaNKtNacagMattgttcaacKaatYKttaact
+aatgagattttaBattBctcaaRWgtYtYBatDcattggRtaaHttcaNagagctcaRat
+BtaagHtctcttRatagBttHtgatgattgcRcgtgSaagcYaccacBWgtaNtctagac
+gaaSatBNtHMcKagttaaDcHtaDaaDtttccaatMcaSaaacWWggtgDtgtMtcacg
+gcgcWttcBctaaVatggaagNgtaacctagatggYKRVttRtMcgttaagccaHgatHB
+cgNtctMKDcYtaVttHaaDWcYcKtttttgatatacataggaaaaacWgctgttatWHa
+ggatcgtggcataagaaaWtttgatcaagaDatgaWtRtttgMagcBattcNaatNcKga
+atatWBBcttKVHtgcagtagaYRatcggaagaRtattaBNttattaataatatgttttt
+aagMggggMttctBgtcgaaMctcctaVttRtBattaatattgVDcDtggtgaccBaNtt
+DWaVtaaaaactHcaVtacKMtgaataacggHtaaaatatataYtacBcattttSaaStt
+gatcatccacatatgcYaVcattatcaagacYcMaataagaWWcBataBattcBtaKatg
+taRgtKgattaSttYaHcgttHcacaatatKatgRMgatgatgRaattctKNMRtggatN
+ttttagYRtgtgYttaataaDcttHaDcctttgggMtcgcMgNYtcNacttKtttttgYB
+aHMgcccgggtWttatVttttMtVgaHagDNtccBVaaagtaKttaaacgaYgHagVatM
+gaacBaSacNaaaBcagaaaatatttaYgaaSccaRacgctgtYcctttStttaacgatV
+WaatKtaBtaaataVaBVcctgKaatcaggaDYatgVcgctaaacVtcHctggttaDggt
+atRatttttaaatDttaMtMaggtMaattaRcaaggaatVaaaactSRctatttWaDtBa
+taaBaaKattScSVgtatcWaaaBtattVtatttttatYtaatacRKcgcgYtccaacVB
+tagcttYBtgtgttaataataWactatataaVccaNtcaBtttcMagataatgactMBat
+BctaaRtatataaaaaaRacagtatYgtHgcaDgaHtaaNMMStKtDgtaaaaactgtaa
+ccBttMaaMDVaaaggaVatcScMRMaBttctSgacKaccKcDgaWattHVtKaNcDaag
+RSgcgcaRgagtacMKtWaacRtcKKtBYgtagNtatgtttVttatcRaWtattcgttta
+DccttMVtatgHagaBgtaMWKtcVagaagcaaaaStaaatgagaWtttDttttagNMgV
+ttcWagacDgaMatataaataagtttgcctatRtttNtcttggMtggVcgaMaBMgaatD
+tVaDgttaaacgaagVtttNccaagtgHgtgtcScaataaRYaactgcVWtaNRDccSgg
+agttattatgcctMaaNcgtttVgtcaatctaccaDMtaattBaatMtKgaDcBggatVt
+aattRBattgcccatgaNtttMDcKtgcaccttccBccaatctgDgMSgaagcactctaW
+tattgaHgcDaagVRgtaBtaaRtgtYcYttaagataaaHaHataattaattaStcttcg
+atHWaaRRSHctggttgtccaacaDttcaKggcVcgtSBctBNaRaattcgcatagaMtN
+attStRSaaattVtMtgttNYaatgtaHaKNSagatcaHctaaaKKgtaYatDgaaaBKS
+acaatacRgDctaSagVcagDgtYMtcatcgttcRatgaatgtcBSKtSagcttagKKcc
+gHtBRgttStgtBaaKaMtaaKHBgaVaVattaatNNgcattgagtcaBaggMgctHtaa
+tatttDatcWatagRatVaaattNttttaaVctYagtRaHttatttaaaVtaccgtNatt
+ataKSRcgcagMgaaMccagaatatMgtgNtcttNtgattaBgaaaagatWtccNtDgga
+aagaNttttNtttSggtDcaaagagtactccattMatataHcgcHMBtgaaKHSYtctaV
+taattgtacctctctaaaVtatgKaWaacagttYaMtNgDYtttcYRtgYaWaaaacaga
+taaacgtaVatNaaBtBattcctWaaggcacatgWtttaMtVtagatatacgataMtttg
+gtVBagatctRatKggttgcYtacSaMStattBgcatttKatKtVgcDgcttNaaataat
+WNtaDStRaacHtacttacataatacaMtYgcggcatYcactttttDtcaacBtgHttgg
+ctttHNtRcgatctcactctcattMtatccgattaggtgggNgagacgttctDtHcaaat
+acaVaaaHttctcMaNtaattHWaMYgatNacKNNMatcRtNtYMgVtataaaatttaaa
+BMtaaaatBtaaacttgMataaaagBaaatBVactagaaaHtWtKRHttgaatVattctt
+tgaNgaDDtatcVWtDaataaaVaaatgcaYaaggatgggcttaaRataaacttVDcatt
+caattgtaBcMtgYtBtcaMKcRNaKRtKcaatttgatWgaMagtWtgYVaRcagattac
+aWttgaataaaaWgHaagacggYccctBtWttttYVtttggatKBtVagHBgtaatgttc
+gaggaWtDtgatattaMaagttcattMtttWcgtNgcgaRcaactaMgaVHctctgcgag
+KRatWtggtcgtWaaaBctcScVcaHatattNcactttccBtDaaNtYggaattRtcggc
+taggNVgDcgaacttMatNagaagtaaRaaRttggtaVSaagaattattcaatNttWcaW
+taggattScaStgattBagVBttaNcNaSagttagtcttDccctatBatHaRRttaacBY
+KKtattHVcHagStaSaatNDDatcSaVgtgMttaHttgttaataatcaYtDcatttHNa
+RgWtgtaYcaaBaagaatYaagaccKggRattttaNcgacStttaatKcVtcYtttcggc
+aaaSYacaKattgSatHtWtKVcagatccccStaatRMaatgtaatKtcDgNaYaaBttc
+cRaaacttHtaRcaaagtatgtctaaBDVcKSKVatSagtggttaatcttaVNaagRtct
+gRataKgcaagactSKattaBatNttggttDtgcDataKaKgKacaWHgttScVaagaWt
+catHagcgattcBBtcWaactBatgacBRctgatDcMaaVDattWaaKtRcctYVYacgg
+aaagVNBaaaaaattKYaKcMatgagcatStaBtcctgaHgtttacHacgcttatgNHWa
+tgctWWattttgYaaacctaacYcataVtagVagtVtNgaMagtcgttatcYtaagcatg
+KgaaagNSattKtttaaggacaBNRatttacatttHctaaaHactNcNcaaaYBcacggc
+tcaaHagaaSaagcaWtcaaaDaaBNtNacRgtttBSVtttccttaaDgcctgKSttgtc
+aaacNMcaBtagaWatttVgcRtgaRtMttgccVttatNtatggacaaagWgcacNatca
+DMaWtcHgaaNaMMtttgcatHtYDcDactttRYtaaatMtaVaaattggtgtcaacatV
+ctBtHctYNacaaactcaMaaaMcHgtaactHaaWattKttactYataagaYgcttatta
+WMDgStMKKatatDataNHMaSagBaaaVtYtgVtaNtataDRcBtagttcgVKagggat
+acaaSRaataaatagtaataKatMattVaSatSBtagVaYccaaaYacaKSactctaaHc
+taaaSaaagNttgactaSacDtttcattVctccagYtcNcagtWatacattNgttagagN
+ctaYaYNttKgttttatKacMgRatgaaacVccgtcaKaatHHcacRtgtgDtccatHaa
+aRtNgcaSagtStgWKtttgBtHtSagaaacgtaSaatctacWaaattagagaDaWgtat
+aMtgataaDaaaaaaaagttcBggaHaDWWcYctYtcatctttcaBtctBaattattagc
+atgWcacgcaaaaDaactRVccBtaWaatYcVVcacMatNatacctSgtWgtttaattca
+ctaaagcHgaatcHatcaBtgtaWatSScMMgctatctctRaaaWMgttaKaatagBttt
+cttagaggVttcaatRattNtccatttcagctactccacMatSHtagataaaWgaagttt
+gDcctaagtMaaaYagaaattttVattRacatctgaaccataYtcaaatcaRttaStRgS
+acctBcaHcgtMcccBaagaaagaDaaattKttNtaataaMgtctYcttDgaactaKaac
+NgcaRccDKtcatgaagtactcgtgttcctBtBtgttatDtctgaactataacagtagSt
+aaaaaatgHaaacaacYgtgtgHacaaattgttcSttBtVctaHaacttKtttttWatBt
+cccttaaVaacaMaagaattcaKaSNatMScRtgaaaDtSStDtHtacNtNtaHtMtNMN
+NcWtgctctaaWttaattaNtttKtBttttttagcttcDagMNagtcKWatVMgcttBcg
+ccttttgtBtatatttYtMgctaKaacttgattttatctaatRagtttggKBSatagtaV
+VcaattMataaSBtDtaBaactgSgtatcaactgHataacaDcaRtcKttatgaatcata
+cgcgaagNYaNgaaacaattatHMgYgtagatctctWttacatVgcgRcMaagttgttDa
+NtScgStWgtgacaacacggVgcgaSctcactcaaaaYtDatatBtattaNgatactcta
+agtWtKSgYtatataaaaaYagaggttaKagtcYtNtgaagtctBWgaWtaaBaattStc
+atgNNtttagMtRDtWttgctYattcVSBaMDcagatVgccatMatttatctatcgtBgc
+ScYtaaccaaHcattgcagtcttMNVaactWWKcaaataNaatgHatgaatgtMStgcca
+ttacHNgVataaYtgaggtKttNBVtYagKacHRggYMacDatcgKtatVtWaKgtHata
+tMgttScgaaVHagaaattaNttaatatgcaaacttWgRagaaRBcNcatctaagtggat
+gVKaaVgNcaccagtatgHKgacaWatYcSacaRaMgttgcttatVcaaWcVaKaaaKaD
+taaaatcgVaccatcgKgtDagBNKNatccgaacgtKgtYctgaKaaSKcccKgcVtttK
+caaYtagcagatVcctVtgaMYctaccMcgDtgBaRtaaattaaagctKtaaatatatVg
+ctgaatatctMatccaattacaSYgcactWttaRacattgtNaYcaactatNNtaHttYc
+StactctatatcWSaccaVNctBtaaagataNaagtaaaaStBaaVtggttatttagDSc
+ttttMMWctagcaactBctcttattSatacSatttRtBataatcaaKVSttaaaaacaNa
+ttMBcaacagtttcVtttatatttgtaaKBgcacattttHNNaVtWaggaDataatNaWt
+BataattVacWaaattRHtacaSgWtttataDMcttRScttttaaaaMgatacMatYccg
+acKMagVtWcMtBaaatDatatHtttDtaattHaatctaHgcgtaagRgWaccattgaSt
+ttattctattcVacctccBcgttaNaacagNWtagtaNgtctgaHaacBgtatgMcRVat
+ataatKNKaagtttRgtaYcYcaMaaagattKgaaaaKcttgtaBHNaWNgMatcacctg
+caMggScBaRgMMctaDaaRgctcYtaacgtgtatacttcacDaKtatgcaatMtactaH
+DtaaVcgaagaaaggVaMaatYtttttattttatMggaVYVaaatBaatMgctgWctaag
+KtctgBtKacaataYtgctBgKgaMtgtgataBagttMaagRcccVtSNtaWcgVDctca
+SSttKaaaaVaDctacYatctcHHDtgattaaccttttYatattcgaaHBagWgYtSgcM
+tMtagaHactaSgBgBSatHtDttagaacSatcccaYtatttgtgKcgDcRatctccNta
+agctagBVWaBaaMHacaHctDVaWgtaBtaaStVtDYtatacttgttcttggNYtatWB
+SNcagatttgBtcVaacVtRgtYaatctatSatagttDatgttgtKagtctagKHtcttt
+taccattcccctaaaaSatttaDgBactaMttctVcaacVgtaSYcttgYaaKaggtaWt
+tgaaaYgagataatgccMgSHatHtacaaMatHDttcaagtaMatgtaagtgtaggtDta
+cStVaHcaactatgagttatataaBHagggccHagtaaagcRgcttagYaaaaaagttaa
+attatYNtYctagtttaacBataaWactVtRtaatgtHatctagacatttaKagStttgt
+tttaaagtDttMtgMKgcgttaactaVttHcatccgctaaaaDttSMccttNaaccatta
+caBcHctVcttctYtaaSSctVtRVattaaagtHtaBgttcatacRcctKctHVHgttKt
+catctatagNSaacHVatcVgRtgtaaaRatYtcgggtBtgcKacttgataRttDattat
+cMaggcWWRttccgaHttNtacYtYactgtatWaaWtaaggtacaDacaDgttStgctta
+tctattatgttgStaaDaaattagttRgtgcBgRDtaWaggMaaVttVRtcBttatcgtt
+BDgVgatttKgaaaMttatatgattataWctcWMgaHgaattMDatgVagtgatatcaNc
+aaaataSttattttaaatDgtaNDNggaaacgataatttaRaaatataaaVaagttacDt
+gtggttctatRatgcBtaVatVtMtaYtttaaYgaHttgttgagctacttaatatBHtct
+ttaagtcaHaWYtKttacttgtttatagacataMgttgcaBVcttMacttYcHcNaDatN
+ttagatcagaatcttatcatHaNtatcMagYaacacMcaatacaNRatDtaHDHtSYgaa
+tcRaBtKttgaMKgcDgtacgtgYatHcggatactDDctaVRgtgctttRtatgtaaacc
+agtttacVtatttBcatcRaaYgcaMaagaacSctHRtctaWatatacgtattKaNagta
+gatataaWKcgggacgaRWttNacaaaaagaaatgatacDaaaaMataKacatVgcgVcg
+cNacaaHNattaggaacattYtcRYtggtatccBatcaccgacaccagaaagMgataacH
+RgttKctDaggMaKtaaatttScBtcagKBgYtaRKttagttttcBaaHYatgattaaDa
+DVacaagKaaRYattaMaaagVatattKactatcttDacHaDaatBcactattKtKtRHg
+gtaSctaaaaagtttaggBScaatcgMStttaatKacaVBSattaKaaagacacaaagta
+attWactttacWaaBgYtMcMccagRtacaatatcttatBacgNagaRtctHgaKtMgaa
+ttcKYaaMacgcaatctcNgYgtYRaHagYtcVgaagaacacKgaRaacgBtttagDcga
+WgaYtKataaDcaBatttccgaaaacaRRBaVtRtgHacttHgagtMttWattMtBtgDa
+NtgKtaaKDccKgctaMRtaNacattacWcttacBacgRtRttaYggcKNattagtgact
+ttcKHNcWBYagttgataaYagaWaSMttgataatctataatRtggaKtcactWaataat
+YgtgcHgYKttaaaacNcaSatgcggacaBaRattttcgacctHtaKYgttaaactataR
+aaSactKatSggatgtKYtatctYggcMtactatgtgaWtttctgYDttggtBtcHBcta
+ctacBcVacaagtgaatSttcHttttttatRYYaccagatctgatgacgcccVataagMa
+ggWgYtatctgtgtatcWttRttcattattgYcHtgatcVatcttVSataactgtgcgtg
+tgaRWaacgatSgaNaVKaaaaMttccNtWgtVaatNtHgttgatVcttatcaaDaRSca
+gDtaKtatttYaSctttctcatccttaattagttaaatactgctgNcttgctcatatata
+ctaDtagctagRcataBcgccRaacaagcacaagtaHYaaatgttaaRgacNgccgctcK
+tacataBtWtaaaDagagactacaccacggaagcStHgggtcatDcKcaacctctgDVRa
+YaatattWttattcttataatWatattaccYaagWtgaataatgatttgtatBYSaDcta
+tRattgaatDgWtMacggtattttRgtaagtgWtRtagtSctVtaRgttScRcattacYY
+atattaRaaggaataagRtttBHaggtattacBHMcacKaDDagtatMaaSMacaSggtV
+VgacctgttaaHagtactaaatYtSSBgaKatcMVHcDtatgtagaVgtWtMcttctYRt
+gctRtgaacatDctcRaggatRaaVWtgHtaMgaattaHataStgaKRaVacataDtgDR
+agBHttgNcNaRDcaaSagStDgaStattBtBNHRHacaYaatcagcatacDtattWctg
+cMattaMaaWgKttgRKgcacNYtcatcaaKtctaNtgacatMatMgYagNtaRWtgaaa
+tBattctaStYgttcSYatcctMagtgatgcgtattKHKtNtcattcacatccDaaWatt
+gcacMattattgDcttgaBgccaMNaacattctcaacgaggagctaactagattWaatgt
+agtcagtYtcKtMVSagWagataaatgtaaVtaSatcccVMttataacaVWHNataWtgc
+cggBVYtacRgHatagVtctDttaccaataSaDgcggtttcKaggtaaMcatgMttaaDa
+caccagYgtattacWgaDtaBaacctatgaWagacaYttcRHDgDgaaMtcagRtaattD
+taagKtYMMacagcaYacgtWtctcaNcaagttttctacVtatagttgttDgDRDtatSc
+gatgcgagggSacttcaNcVaatKtattRtWttaVagtaaMDtMaattHtagtttaSgWc
+tcctggNgatgMataNRcttatataatcVtDBHgtNaRatgctttacHtRacgYtYaBBt
+aScWtttMKcStgRcaSgaagatNVtagctgtatVtaaagttcgWMtgtcgtHtcacSga
+aWcgttaMcttWDWataVKcaatctattaKgtattcMttattcgtatcaaatacaDtcac
+atatVaatcSgtgDatBtgtagatgtagttataaagtctcatMNgataNgtagKcatgaa
+gKcYgcNYtVttYtaHKcattaaMagaataRWacgSactctWgtcgtaaaKaWagRaBat
+aRSVatccYacttcaggtBVatKtHctatMcttctgtHttcataMgttattcttRtYtta
+gNtVtDatattgcatYBtggKtctatcYctDtagHKBNttYKtcWtRgtaDatgaaStgt
+aMagcBgaaagtSctRNaHcDgtttcYaacBcagaMttatRaVacgttKaaaacMttaWS
+gWcNRcaVgSaaaBatNcatttatttgYatttDgtcaatgagaYNattggagcDagagat
+acNtaacaWtBHgtatNtaggctaggcaacYBtatWctgaRttDatcgttKtaNtgaaaH
+aYtcgattgtgccaagagKatcgatatttcaDHMMttVagaKRtaKtDacYgtcBtaDMa
+cagatHcttcagactcgtagaMggtKSctagKtaBYMggtagcStgNgaacaatSgatta
+aKWNaaYggaaaacgMaaattgatagagaMtacacNacacSgagcYVaattHgatDWatB
+taattaaYttgDaacgctcRatatacVtcaMgcBtaagattgcgNtaHDgtcaaaDcYMR
+tgcataVgtaatcaagaRccctYWccaacttagaagaaNgccHWaaaacacaMgatScga
+tgDtWaaVtatacatggtgRNattattcaatctBcttatDaMcaaHttatacaaNcttgt
+ttagSSatgatacccKttaMtcatWgaVataatatgYYtcaHaacactWHatttVYatat
+gDactaaggcgcaKcatHaccMtccHcaatgtWtctttatgWDatctgWaagHVtDggaa
+gagtYHttBgaDKMctMHccDaattMatcaaBtBcagatBcatatagatttatDtNatca
+aaatctgaaSNaagatagtVBtagctaBVNtStWBgctagtYgatHNatatgcWacWtaY
+tctatatgaatactcattagatcgHgaRattaatDtNcaaDgactSatactgNataBYaH
+KaKaactctcHcKHRagDttgtYgtaattaactagctatatataaKcattttgcKtcaac
+SttgHRaagacNaBtatacataaaaataVWHMcaYcagcagRaagagttBttaaMtgata
+cSDaNtttgaagRtattaHtttagtatYaaatcaccgaYaatattWBtttataactMYac
+taaactaaatttcNcVatgcVgKVatatattaaatccggaaNaacacaSatgcttgcHcc
+acatgatNtatgKaNtgctggagtctataHcRRScSagcactcaatataggaaYaataaa
+gtKKaaaKtBttYRtgtcNVVaaaaaatatagaNaSgattDtgacgtctMatcaaatggt
+SaYtttaatcttaagcKataaMDaMctgtYcDtgaattRctgHaatgttggtcttcaata
+WacaaYaNtacHNtVWagcHWtBBYagSagcaaatcKgataaSgDHataaacattKBttW
+agtRtcNagHcttaatBccgaaatVacggStctaKaRaVtgcaHBcgKVcattttHgctt
+tgtgacgaBttttccatccMatRcaVataattKattaaaagDatVttaSRMggtacttKH
+aacaatgagRaWcgDtaggcataBaVgttNBcgtagSttgccYtacWcgagNaatttgct
+agagacatacaaggataacWRtcDaacSDStcaRtcDcaaaHgtatcaDRtgcagtDtac
+BtatDMagtatcctagtgcDaSaaRtcaRactHgaaatccaRtWgaacttattaataSca
+DaatYaaaWaRNcagtaaaYcaHttBctaattctNggBYBtggaacaDaatKgcagataH
+tgtcKaWctaVtNWYBgttttgtHScaBctRccataataMaaacatgaatatNatgagtW
+gatggattgaNttataHcSKttgtatcatBtDtaWatcaWaDNgtagctaaaWttBatDg
+MatgagatctKttaHactataSgattRataYaYatagaatDagtaDaagatcKcYgtgWS
+gtttttaYKtSatttgYatgYHStattaKcttatNNSataaaacHBtaKgcataggYtac
+gtttccaaVtaVaHDcaWRYSBHattattcaaaaBatataaggaBtaacaYcgHgaatgc
+ggYHagtactNagaaatttttacgaBcaaBttgagtKtYHaKKgttgaacgacacgBtWD
+tSttgNHDMgaaaaattcKcatgataMKttVHVBacataKaatcggWtaccagMtttcKg
+ScgcaactattVctHScccaacccHDtgttacgttHVaatcVgMtgttcatBWBttDaaa
+ctattcttaaactaYtRtgtaWataWggacVgtggWtatgtataaaHNctRgRtattaag
+tcgHgWStttaWDacacatcaHatttVacttagcgtHagagttgttcatcatgcaHcgtc
+KaagaRRacaatNgtYDtatVgYccaYKVttDttBctYcttaWtatgYtaVttttacVat
+BaYKSSVaNNccgctgctBtcaagcacaNttctataYMatccWacBcgVaaatagWgccR
+tHMttHgBacttYScaaVtgSgttacBtctBttaRtSMgttaatNaRatgttgtcatVta
+aYgVgcVaaYSaNcagcttatNtacgatagtcgaVtaacYVaMttggataaagatStcaN
+tDttgcBacatattaDWatDatcaatatNttagttMttcaactacaRHYtcggaacVHta
+ggatDggStgSWtVatagctgtttaagBcccgBtgcgtctacYaBatactYMttHttVtt
+aWtSttgKtcttcgtgacctaDtttMYMtaaaaaattcaMgWatBtgWWtaScccttaaV
+VgatagaRtYataatttgKaVHtgcataYtaaaaagStcaRaMaattWgcaacaaRaBaa
+taacaMNatagatattatgWtagcgVHcgtcatgaHgtRatcctgtcSaaatWgtatcHB
+catcatcHaattattDBHggcatBtgttagNDggtcRttaataVtctttStaaggtcccB
+tccaBgBRgaDaatttgtttgcNtatBgaaaggcgNttatMtggtBgMgatactDtcatM
+aaWctatttaaaacYNgtSgMatBcSactaKYaDVaVtcagaaaStagttYRcaaKacaH
+aacagctNcatttKtttaaacWtMNaatttattaaVgaMStMcagctaWgaSccatNatg
+MacataWaaMtataggcgtatcctagHatttttVaattttSBttScgtBSatgaHcaacg
+aVtMaaaactKHatatttNWtttataWtaatVttKaKMggatcMaaattattMgatttgt
+atRtaVgaaDtacacRtaaaaaMttScaggRttgtcttSatYWtVMactagatVaMaaaD
+taattttaBWcataaggaatBtRgtctaWDtagWtaaWYSaHaaacgatRcttgcatcat
+taSDBBKttttctaYSaactcgYacatttBaattKaaaccaMStaHatHtatgtctKcWa
+taactctcVNYtttMttaDatSacDKcacaaHgaggaaBtgNaaaHtattgtRcgacDtY
+tctttMttatcDaNgattagtttYtaattBMtaggtacatgtYBNttcMacaagaaaaaK
+gaaatcacaNttgtttttagDBcMgtaNacSatcWBWtataVatYagtttccatatHttt
+DtcgtggBggcKacaBWtBcaattgMatcttaVaacVYgMgttDcaaactctctcgcHaS
+atYVHRaaatccMMtaDHtaaKccactgattatccatBYVDacgttMctaaVtatacaat
+BgaagttaattttgatatgcatKgaYttHtatggaaaatcaDtttBtatgccacattact
+caaagctctcBKcaagcaatataNtattcVtcataacMHgtattaaDtctNaNttYWcWt
+aVatatataWgtaWtgaHtattcgagtMVaHDHtatgcttctaaWYaatttaatccaMac
+tKtcgtDaDVWttaccVtacYBgDattKtHKSVStgMtBgcgtDRSatggatatDKacat
+aWtatWaVttctSRWgtcaWattKaaYWtYaHctataKacMaagtctRttaatcgtgaHa
+ggYWtcgatKttKaccttacttccgtttHcgtKtcttaatSBgaatttcVKaMattVSgD
+DcaattcagtcataccBccgtgaVtaggttYgaNagYcHatMYaattDgtttaaMagRac
+tHattgatttaaSKtSccggBattatatKDacaacBgVWBaaacaagattgtcDtcttBg
+cattatcaaaacagNtaaDgtggVaacYDgtttDtggKccttaaaWcacgSatacaggta
+gVgatacctBttcaattKRtctaMgSattgtacctatataaaMgVtctYMYYcacttRaB
+gDctRtttaRHgcRSMVaaaaacagaYaagtaMatDaatttaggcctNaacgaaaatgNt
+ttaBtMtScVtVtSacStaBggtggtKtRcatagHattcctggaRtaaKaBKtagttgaa
+ttgtatttMcatgcttDaWYtaVtNDgatKtHaaattaattaaStaagWaaBtNcaccaa
+tRcacttgttttcaaattctggcccttttBgHccatcgaWctataSttBgataacagtac
+ggcccDcScaactgattttaSWYtaaaMaVatttagctaBgSaggtNaBRgStDaatDBt
+atcHgDtRtgMtStWaYaggtaYatBtaWaattgaaYattcBVtaVSactWaWgtKaata
+gaaatgNttHtgtcaatMattcggtcaDcVttgataMNttYVgSSYMWaVtgcaRaaccY
+tgccattaaHVgaaaattMtaSgtaYaggctataBtcRtttaaBtcHDatDgtaaVttgc
+agNcatWggNtgRMaDcYgYttacWNtgcaWtaaVaNctVacaaccRcacttgMttgtRM
+tgtccatttgKagttctVagcttccaccaNgtgcatRgtSBaacggaattttttNagtDc
+agaHaaaatStcaMtctagcacactHWtNtgctcgtNaWatataKcMcWtagaggDaVat
+ttaatttYSDgRccWattHtaggctaccDMctacVaattBYtDacaYctWaHaaHttcgg
+aMKaacSagtattaaatDttNaVNtacgVttKaaHtgagttWcKtgtaDcDaKacgtact
+ctttacatSgtagtaHHtgaaatRtttagttMctacKgaKaatBttataKWMcggtttat
+gtgtgaStaagaaRttaVtgttBaHgNtggaRaWataacaWtRWacaactcgHWttttaD
+agScKgtgSagtcMgaRgttacccaaaKRaaatattcKatttNgtMaVcataccaKgaWg
+HBWagctaagttatcDaRVVtggaaHSVacggttaHaWWagtSgctctVattKctKtMat
+HWcgccttaYtagtaKDaVcHtctgHagatcaSacaatKtatgatagDgtcgttttgatV
+tatStctYaYNtgtgKaKaVcVNgaattWccgattcttgaMaRattRgcaatHctcatta
+BaaMtattNSSttHcagRKRaaccaYacMDtaYaaaatttRataBVtcacaagKtatgcc
+tcatcgtgWataagcgtatcDtNagcatNNatgttcRaaScagaaaRaataMtacMSctK
+tDgaBactaggtWgcRtaWcaYtgtgWaagDKattttttaaccaaatDHattgacStttt
+atWaataatDaDaaaaRtaYaggagcYatacYaKaagaaNtaaaYtaVtDtBaaDcgttt
+KMtggcagtVatgccggtHgtgtaVaacDBaattacaNatttMgaDgcaDtttggaaMgt
+YtDtSgccaaaaYcNgaacDVgcattaNgatgaaDaBBttgccatttRtctaatgtHNta
+aatBtaMaVattcctggaaaaatMattgtagRDacaaacgaataWSBctctYVcgtSaMS
+tgtttSatNagaacaRcagtatgaNBtcKgBttRtattVtaBtBaKactaWaMgRtcMta
+DtYtatHattScggacMtaggcataaWaKHaataaagYcgWatatStBattKaKagKtta
+cMaRacaSaRaaWtKaatagSatcgaaaKaaVcDttcVcgaKVattggaYgtMataaacR
+taDaactNatYcagtDgttagacBataRYRDgttcttttattacBcHatgaRacMaactc
+atVVtttaaaHgctgttcaattaVaHtDcaYKacgKtcNtttgctttgHWcaaSactWKS
+atcgYaNVaattacRcatVNgtagatgcatYatVaaYWaSactgatccatatNMaNagNt
+aatcgttaSttattWattaggagaatcNaaccaaaWatRaatHMaattaNWatRaMKaWc
+tWtDataaagHctMctttRSttaacgaSWcatcaVgatataattgtWMagKKaBBgatat
+ctcgHSaaNBctgVtaStagtttgaggSgagcKttaaatHattDtaaattgaacatacta
+aWaBYtKttacWtaaVNcWacgttctcctaactBaaSRagaaatgttKVgtHacatctca
+ScaataNgaaVagaaHttaKgHgKaccgtcYtcctBccataagaSacataaaggtttDtV
+StaVBgtcgNatgtgaVctatWaaDccWHcctttaatcWactaatactcttacttgttct
+tatttatcaaagatWacYctacKtaSaaaStgtWaVcaYaRctgggtSaaaWtgctgcHt
+ttgMcgatSaagttgttttNattgaacttaaKaYcSBSacWattaataKDattKaHtgaa
+attKKttttgacDtDtattttDBDDcMgcatagaVNttaWtgaDttgttttttttgacat
+tatagBDacgatNatMBcaggtacaatgtgctttatatttRgBcctVtYVctgcatgtga
+tataatHagtttccttHatagtaMMaaWggBataaKtttgataaagcKgtVtaaaatgta
+tWWaataaHgatttYtcWataataacagaacDRWDgWaWaaaggattBcRctacYtagct
+NgtScagMcccHaBaYgtgctgtSDtHacKtNgtgacaaaacccMcacaKctcactaaaa
+aNgtagWtttYtgaDcatWctataVctNttKgRtatataYaaaRacaggttatagtcRgD
+gcaYctattNcaNtVatYattKgaaggBDtttacttHttNtgcatRatgaMHtRBtaaga
+tMcacatBatgtStctagacttccKaRgaWccRataVtggaScgatttDMaaatNNtcYa
+YtaDaatctatgaVtctBKtgccYgtWatDcMYtaaRtcVgcttttDtMtRagtactHcc
+RBWatatccttatMtNatgttagagBcttKacaaMtagaaattaDttaatatgaaaRatt
+NcHSgaaHtaDcagctYacgccagcMtaaMgDaaaaaggatcttcaaVNatRcKVaaHRB
+ctgcattatMaWaNaKataaatatgWaaatcgMaaaatcctgttactDtDagaccYWact
+tctRatgataaKtaaatcaMttttcaaRtScaWgatMactMtcaBNataaaBactggtWH
+tYaattaWacattgaaVtYtSgMcatgaatYgattatacaYttaaaKRgaVagNgtaHWa
+attcgDaRaaacgVtBDtStttRaKgVagatatWtcMKaaaaMDatttaaYcataDYagt
+aaaaKttVWMggctgVgtgagtKagtgtBBNctacaaacttagattSttHagacKVttgH
+ttatSataaWtMHttSaSaaaaDatgBtaYaaaggttaMttgVtVtttctaattgaacag
+gtttDDVMtNSgcatataagDaNttatSVttMScNaaattDttYaaHcNgttatatBatg
+DKctttgVVaaBgataaBatRaagactBYgMgNaBttaaattagatttttttaVgttaYt
+atVtccgtaagDcNVcaWtgcaKgggYtgagattaMaaagaatagtgaBaVcacBNtagt
+aDctctcVtaSctgtagcBcHMWtataattDtaactttHctaRcRaaBaYacatttcVRa
+atctgctattDSNDgBatcaaatgcaBccKctaHcBtctVtaaHgatcRgaacggctRta
+agtaSatatgatcaaagBtaagatttVaMagaagaWWgcMWBRStRggtttWttttagtc
+caMRMaaattaSgBccggNataagtgctctttacYataRtcattgtgYBtggcatRtact
+tBaacDacaKtHDtaNacMtataaKKtgtaaaRMVtctVcRatcgatttgcattSaaagg
+ttRatagtagaattVcNgRtKccBgBtWcataataKctctKatttttgVcaacKStcacS
+RtattgcggtcctcHatcgaaDgaVgctagtMNVtaattaaatattMYNcgattaaKtMt
+tRtYgacttgttagggcDNgagNtKBaScagttctgcMaaaMtHctRaYtcgRtHatVct
+ttatcttggtYctctYgttgattttaacSttaaactaaaWHattgWtctactatttcgMc
+VaaMctaKRcttcRaatSgctVNgtgaaaNcagataatcaatcKtagtgacaaBVtttgt
+aaVctaBatgtaagtgtacctttacKtMWtaaaatWtcVctgagataattacggaatacg
+SaWgaHcagtagNWaaaSacggaaatgatRBtRctVctgtVaatataVNactMgDtaatg
+gtatctacaaatgtatacKtttgttttaaacgttgBggBtgacttWacgaMtttcagaac
+agaaRVtttKBacttDWaccagtaaatatcgMcttatRtaaKKcgMtHKattWYYgttga
+tgttaRgacHcattcttKtcgtttaatagagWgDKaYatKataKcDgctaaaHWgRtagc
+cgttcatYattcagSHtttattataBVccaNMHttacgWttgDgaaRtRaatcgatNaaN
+tWVcctacatacYtctgKtcattatctattatcgtcKtaataaattagggHctcatgHtt
+SNacctYaKttMHtctttSgacgtttgMcStgttcaaSBggataggWttataNagaNBca
+tcaagtBtagcMagtcagagaaDcaaaataKgtatgtgSaagtgtYDtDccVaaacagaa
+gttaHSWatagaaaMYaggtacttctccttatatHatgctgVMatKttgaNtggSaRcat
+tggttgWcatYagtaatatttgcttgaVctaataMRttttScggggtgagVcacatYBgg
+tccatMattBaatgNataDatWtDttVcataacSVtattagaagtaDtatcBacNaacaa
+BaaagaaWBHSttgattttKRcVataHatttttgaBtcctctacctcRYttagcatactt
+tagaMHgtcatgtHtatctaaYacacggtaaMtatgttaagaHWaRcaaBaacaVaKatt
+HgataNatatacgtatttaDWctagatataaNtaccgaacaDMttDSaSYaaYgYaVtca
+tactaaWWtatataaVtMcagMccaDaaSatBattagcaaaatgRtaHRgccgataatag
+caaacacWacagaaVgBcagaYctHctgtcttaccBattVaYtttHatgaVgttcRgaHt
+ttagttttataatRWggattYatatMaaaactWaDRaggataaWgMataggtactatatt
+tVctataattaaatatgtgttDtcctaKataaaaacggtacgtKaaatccBKtgtaatta
+caKtKYtgStRaagaaaaaaaggYagtNactttaaNaStcNtBcBaaacHtacaatSgat
+tYttaacDacaHtcttcatttgSYgtctRaatVagcaWtctcDcRctNHatScRtaMgaa
+cWaaYatcaHaaagttggagtacaNcSRttagaatcatVgtgaccaaYacWHHtaMtHtc
+taatttcactBtgNVggBgttctaDtcttaWttaatcatatHgaDacatgaaNagtaata
+cgDgHttaNggatDaggactcaatttcttDaNtRagttgVgaVRacWNVHBttcVtYYta
+gataagHtccattcaatNaataYtNctgatcRttgaYaaaBcaKatcacgSaataHatgg
+tacacctttatRcgtaYacgataHWVKaattVtKcgatcgtRtatagRgccBtaatagct
+cVNtttatgRtggggtttcttatactaatcMaaaWcgcaatKttatttgtttatHRRaca
+VcSgatcagcaacccaMatYacBVccNcRgagatctgtSgaMttHgtaattatggRatgc
+WtcKatattMKWtaaatctccgtgtcaHNYaagStKcaDaMtaaaWBttacBgNctMaat
+DttcttgatMagtagaaatYHKaacttattSgttNaKagttctcataagtaatgactgaV
+StaatcctcDagtcataagWtataatattacagScHaatatagcaHYaaSagaaaaactY
+tRYaatcggaaHcVcDcaccctattRaatattNgVaatacagaataaSaaaagcWRgaKt
+tccgtaWttctaaWacgatctMHaNWSgVtgNttVgtattStaatNatVttacaRWagNg
+caSgRVtcYtgtctYgtRKatctStHWttcYagtgNtBaacgtagtgtHcgaSggcNgHg
+WggKatMtaHcgtKaHaWggacRRatattaHaaggaagaSgHggtttacctagtaattBa
+aatSttYgtagBaSKBaaSKgctMMcacagcgtYatSctWctSaatRtKKtgatatctMt
+attagcgagaMctNtBcgtatRDtcatHtgaVcYttctaHacgagDaaMNtcttaBgWat
+tatagaKtcWtHaMacagattgtHacttttgDaBWDtcSWKacKttcaHtSgttttDtHt
+SaVRYVgcagaatWattYtgNcgccBSttataaNctttcHtccaaDRgaataSatgctVD
+ggacagBYtBcRacDtYDNtgWaattattatYKtNcggaKRatcagBactgatgcctStt
+ttttDtcSgtcaaataataaMVttgaacBagtattctatggYtcaaatDWacVtgataYY
+acSccVcataaagacagtNaatgtactaagtRtattBMKacNacagaaWtctSaMgaKat
+aaaMBgtYtaWaaKNtDStSNggaacgtMRtaaHctatacMtattttaccaataKVtcag
+ctttatacgtSWBaStgttgWVtYaacaacRgtSgtacNgatgRtaYcagStcaNScaaa
+RttaDttctcaaBgcScDtWaggtgaacttNBBYaaccaNaactNgctaaDaaaggttga
+gaaMtatacttgtgtctHtgagKacagcacagcgKSattaSDaKaatttagtHtMttaMV
+ctaaBtgBaattttactttaKcMagcatgcDcatcBagaBHattVgWtaataMgtttgtD
+aHaggctgtVattDYacNtNStttaKaNggtBtaKtgHaaKcaacatDMtagatgtatMt
+aaacttccNBgctacgtgcaaKgWSNacttSBaggMtNStaKtcaatagattatctagta
+BttaggactYtaaaStaaYtgaaaagYtMaagaKctgtVtttcgWcatctacgtatVaag
+tagaattBcagaDcgSgtaSggaactaRcaBRtMttRgattaattWaBYcaataHMacgH
+actatNctacgaVataNVcHatatVHKKagaaRSattaacgttMattgtatagBagtatc
+tttgaagaBctgattattHgRttacDgMgtWtaggcaatNttgcttagagaRatttSgtt
+tBtgRtgaNtHcgStatgaaKtgtaBacctgaaWgtKatHDStatctttaRaaataacaB
+ttStHVMaccggtaVYaaBttYNKgNaBHaaKcKaaatStBcattgagggcRSttttcta
+aatcacaRBattccacatagacatSaDtaaaSNtttgtatDgWgcatacgaSacRttagN
+aggaHtttagccttttWDtcYaVtaRtacWggctcaaaacVctWtacatagttaattBBt
+tMacatDtatttaaRggattatBVcacattattaagWctactVcaBgcttKagagttatR
+BgctagaHtgDgaaaSVtKgattaWtMDWaRccaaWaagtaaVttgWgVgacaBtSaacD
+aaaaKcacaRKaagttgagtNatttaSttaWRgtctaaccataDatagYaMgaWBcatta
+acSttcacDtSttgtaWYataRBHtccagaMctaagaWagSDaactRNaaaWagtacaSc
+aSDcaatMaaaaaaaVBcatKacaggtgMaaMtatVaVgcctcDDYgtattcaatattag
+gagtYBaaatttagaaVWDattcgttagHKSgcWtWcaatttaBtaatNcaMYgYagatc
+RRtcataaaYctNtatttKRatRggtYcgaWcgcccataWttVaaBtaataaatcgNtct
+ttaggNtatatgNaagtMttccaagactRttgtgattBagBtaataattBStcaatttaW
+cattaatVtacatgtatttBataVYWStagcaYKDaagYtaggKtgagatVtMDtKgNtc
+atagtNcagtBagagcaNaaNtaRtagatatcYWtSataWggacagagtcaDSggYattt
+DaaatcactKatWatcDatatRattataaatatctattHSctttggNctaagtSacgaga
+tatatatRataagtttcatgcSaaKttctHaRgaaDatgStWcataaaaatWMNttaaRa
+VgaYcHaagWggttttaaBtcagacKtaBtggcaacHtaggVttttactatRWaataVcc
+caRaagattNttggStYaatBRaataVacgaaatttaBaMYgcaMgtKStStVtgVaata
+cccYaDVYaVaYKVtgatgcctacaaagcWgDtVtctaBtcctccacgatatWtcDHHaH
+acaaataaatataccaYRSataVagtttaaStgttgRHtctaDMMaYYaaagatacaBWK
+cagttgcaacgagBagcaaatccgKaRgtgaatcgtaWcatYtWaBtaBatcgRattcaa
+gtHctctaatcttcctattaaYgaNaaaaRaDtactDtMNagatMtttRacKaccWaYta
+tcagaaKcttVtVaaaatgttgtNYgtHtaDactaggaRttaccVaagMacgcKtatata
+HaMtcaattcctMaRtttttcatgtctcaacatggtgacatcaBatHaaMagaatttatt
+aaaactYgMttaKHBccgacttttaVaaVtcScHaNccttacccatataMgggDtactag
+KgtcacRtacMacYgBaatttcagYcacaaataaaaggagYaaMHtataaaHtKgaaHtc
+tcaVatcgStcatHtcaYctttWcttattBactataatWctcctRKaaHtaaHYcttcaY
+ataaaHtNcaSctgattaagaKaatWagRaVaNSHDaactaYVRaatgttatVYttatDc
+ctRtgcgaacStaWttgaYcatYtggtatWNataMtDNRtgtttgggtHcWtatHaaata
+atVtaaWaVgcaatagDatgScgNcagggagtcaDtgagataKtgtctataattgtgaNa
+tcaNatDgtagctaaaNtgtagtcBatgWcagagtgtWtaagWtaKgattHagWRaNata
+caagtactYtaWgatataRctcNKcttttgaRtgKWtgtgRagcNtKtYtgatatgatBD
+KVtaaaaatttWtcaatacgRtaactttaaaaMtaMattaVNHRKttattattaaVaata
+gatYaggattVaaaRactcaagccccRtagtScgDWgVSagtggtaacataVatttcagt
+ttRtattcttcYaccaaaagttNttKtggBttBcSaWaattataatcataBtgtMtMtaa
+agataYtacgMtWaaacBtttatcKacaaaatattMagtKccaaWccatttgtgaccttt
+MSataMgBtcttaVgtNttttSaactatgaggaSWataRtHtcgaMagSMccSaMctcgN
+tatgtataaVtBatHcHtattaacgactgNKtttaMtVaaaagaatVgttMWcttacacg
+tacScttcttcWtaatccatactctaacaHHaaaatDctNtgatMcRaaWRtMgttgtta
+tRagtaNtatgRtaMttggaaKWttaRtHKMaDDaacatgcgttaaaccaaaDttatagV
+RBatacMaatacMaaatWcNcaaHttBgttgtacggRKaaaMtcHgttaattattttaHg
+KtgttaatDaHatctggtaatMtYaRgMccKRaRKaDaagaggatBtSacatactccaKg
+VaaRMaBttgcataaacYtKgaVDtttgcatSaatattatNattataWatWgBttaggtB
+ttaaYataaSHtRtaccaacMttaccattccKggKNtMatacctctgtaYctaaccttga
+gtataaRatagaatRBtttttMtgWNtKtgcttatgactcSaatattgtBRBtSWVWYag
+taWBcNatttcNNgSKacctgaaMKgatWcYHgRataYggtctaMtggcagaRgaaYaYg
+KgaaHVtaattMgaaWaWaDataagaaaaBDatacatatgatcNtagagMtactcatgat
+gtHataaggtaHaWatMgtagcttaWtcStataSttagttttgcaagtgctgacDtgctc
+DtgaSgVMtagttKtaacgtacattaaatctHgatYatttcgggcaDtVttcaaacccgD
+gtatBggcttcBcWtacttgaatBaRNcgYtgtaaaaaRDctKctagtaKSatRtRatMa
+MtaacVYaKtactgRDcaataaatSacagctDaatggttttaaacNttBaattgattaaM
+gVBKtBaacctYNcaKcaVtDYtcBaaataNSaBgatacccgtVtaatactSgtttgMSY
+tttgKtgtKacgtKatgataaVccaMgtaVaWatttatattgBNtgtVgVNtYStMtgta
+tBcgagaBaVatgatgBcStttgtagDgYMgaattacacHtaaaaaBttKaaggHttcta
+ggKagRNtMBaatWcagMSBaaVtgaatgtgatNaatSagcaatttHctatWMtgVcNtS
+aNRHatVaVacVtHattcaataatgSKttttttgtataRKYaatccRYaatggtaVttta
+aaaaWBKtatatttatgtagtcNatSaatatcMDRtgtBttYtatKaattaaaaYtcWcc
+VattcDaaatgattgtHccactgNgctttBtgagatWDgVgtactgtRtaaggtBgacct
+aaatctRtDttaBRaYacaaaYYtcaaagaWaSDttctttggacttcBcgaDacHataNt
+NgWtVMVtRactggaaagSgtgggtgaggcctccataaatNttaYYgtcBatattWMaac
+MRctcgttaaaVatatagagataKatRMtHaVagaaBBtStttaatcaaatgagtatcaa
+gtRMtaccgtBagaWKtagaaaYttcSScttaVttttcatatcaSgtcWNgtttagccaa
+aVgaatgtgttatgaaYaatgaataaaagagatcttcYacaaatataDgRttcMtcataY
+aBtctStgaatgagDaDgtRNaMtYMatatagWNggaNtcattatgacYgtBKYttttag
+ccttataaNRaatggaatccaBacgttacttatMNggaaaMtaaRtctagtttttKKKgc
+BttgccgtHKatcgatVtttacataMtagNaMttctKHNctaaNatttWaRNgRatctag
+atSctaactctDttaagacgcatagcRNgagatttgtacattSattaacttttcgttgat
+tWatKtgaatttaMtSBattKKcttaaSggcactaataaatcactcaMgacggtRcaDSc
+NctYtBRYVgttgtttaVtacHWattattcatttVaKtgKaacctaggStatttacaact
+cKNtaaacaagSttcgattatttcaRttVtaVaaacRgDtaatgtccMaacNtcggttgc
+ctaattaaaNaWcgKataaYcctSgMcataaatttgaaatttHtagSBgKYggcgYaaga
+gataaWBcMgatRBNRaYctgHatctatHttgaHtgcHKBKVaWaacacWNRactWBVtt
+aatttVccaagBSWacaaaatcDgttattBtHaMtMtHacKgWtcctcctttHaatagtY
+ttaagccaHtYatatttacgtcaSgtgtYttgBcatcatttaNRgaKgBtgattttaaat
+gaattVaKtVYgNaatgDaacaaVtHaaatggtttgaYYatgctgcacatttttctacVt
+acaNatataHtgtcVtaacVgtYccgaactaKaaaatcagtttaKNRtaaataMatgtac
+atatcKScctDatDcKttSattttagatgttHtcBtKgNVRagctaRVtttaNYWttcWY
+RatgatMgaMKRctNVMgttVagWcaVStcDgtttctcRatBVggaccgaatcMttgaga
+BDgtNMgKKRBNSMgcaWHYWccNgcacaggVYtMcaaaatgBtaKcgaRacccgStatt
+cHttgaYttattattctaVMttgaacDaWtNccDtcHBataNcRggaaNBtgaYNtaaMa
+DctMaaaaaaHaaattcBgtcgHtgcgaaStttctacttcgMagagtaaaacaDctgcag
+HctHtWaacgaatgtggtDacgtcacataSaatKtcWBtataccaaScttNgDgcctacg
+BaNWtagataBaNtRcSggtaMattgaatgtRHtgHaaNWtgttaccatacctBataaMW
+atttNttVaaRagMataVtgtaccattYVcKYcgagtaaYtttgDaKDgVacMtttaVtt
+cYcgtMattctatatataaggaagagttaaatHgtWctatttgaaatHttgScgtBataa
+tgatRWgtttVgatMBcgctttatgtctgWKtaacaaHttaMtctttatcDtccaHaNYt
+SWcWNtHNacaaatactNggtgStacKatgtgKVctaBcaHcttaccaaWatHaaYtatt
+atYtttDgtBaKcataaaatcaNgttNYcatVSgtgatatYDMMtggaatKMaagcttVt
+aNNYctKcctagMWtttatttBattNagccggaRgagtattaKatgatctacatcaKVaa
+agttYgcStagtctacttttcatKtWtKtctRaRDtcggtataMcMDcaattNcacatta
+ttgaBaHattHgcYattagaattataaBtattBKHtgtaacHtHaacaaRYaBttaRVSa
+agttHVtatMtcacaWctgVtgaatcVtcctcNataacacgWtattDWccatDDYtcgta
+HaaKaacaYaHaataBtaaBKagtttcStWataccgNcaDtWNaaRgctcNaacttattt
+gttaaacaaStttagtgVaKgggtatNaatVagtataVVaHtaRaccacaRatacNStaa
+caYDgaWaRtaKttgtaatacggtttgccaaggMWtcaaccttcgctaMSaattaatgaa
+VDagttBcatccattttccaaBggRttgKgccaaaYNcDcaSatMcaattYDcatcWatS
+tttggaaWtttHtatVaggttDgVWatttaBWMagtcagcgaSaaSgtattctacHtaaS
+aVacaataNKtatagRMagtKYBKggtttKatDacaWaYDaactagcaDttctctttHta
+gtMtWtttatYatWNaBgHtaBgSttRgattatgKcccaaBtWcccataaNattaYtRYW
+gRccNatatHttWgttatactttacBYHaaaKaHYaNttaatagKatacaaatWSMcttt
+cKacatMattgcaRctBataaVaHtataSctDVtRaacttcggScYctataHRHtgttct
+gtgattYatatYtcYHaataaataYtMMgttaaatgatcttaaattaKRtttaaRtaact
+taBtgtcatgtctNcaaKactMtKatagRaDKaatgSaHcRtMDctagatcaYtRatMSV
+RMYKYaggataaatYtDBaDacDtaVtacggaKttattNaggScgWcaYtaBaaacaWaN
+VtHVagtBaatgaBNagHaBtaNatNttSgaaactctBaggtHHtgaSagYKNcataaMc
+atagaSttctNBYcttattcatagagagtHWWDtctgMtRHtactgggagcKcacctgga
+YattatttgaaWgtcaVaataagaaNatRgtttacNtWYMBcNScgggataataaagtWY
+KDYcVWVggtttMcttYaatagaaKaaataDcaYMVcaVtgtStctctWaagtaRtaagt
+aaatWacSKaaatYaScctggtgMKtYMtctacDatctcaMatVtNaataaNtaattgaa
+gaNaataataagcttaagtgtgcgtVgttataYaagVgNaaRctSctgWKVaYKgctNWM
+aaRaHatcgctHaaYMtccggattgtgBacatHaacttggtggDVgtcaaaggSatWRaK
+tKacNVggaatYttatttattcaaSttttttttcaatgttatttgttttaBgcatacWKD
+gtYNtcYtgtcttttttgtcaaatgatacttWagatDatttcacctaaaaggtgagttat
+WgtgHctaatMtRKagccagcgcVgagYagtactgtactttagVctaBBaYNggtYtaat
+tttcRtaaagatctMtaVYatctYgNMaVtaWtcattgRtaNataagaaaacVSctHNtc
+NaMaRYcgagttaHcgacNgagagBgtKaactaaatatYRcggatgtKtttactgDctcV
+aYaaSaacBcacatagaaataaaaWDctVcNtttRtcataatNagatVMctBgttcHtVg
+agaNaaaHaaSccggatSctaHgtgaYRagattDcSDtMStNYtgtgaagcttgggaatt
+tttDgcaatHatgaBttHttaacatBcaaagtaggtKgagacaattaataHcaNaaHata
+MtccaKagagtttBYSagDDtaNaRtWtWagatSgcSKtcttttcaaRgtMattatRtYS
+HgaMccttttttBtHactaattcaHtMatagaattVtBtDatcttVgagtatttaaaatt
+acYSattatttaYtagcaVSHattDctKcVattataagagRaccccWcaBtYYtctaaaa
+YccSgattaaaMDRtHatMaYtHtcgcaaggWgBaNVDatataaatWtcMYSVtacBYaa
+atactcgtacttttWgaacRNaattctHagcYtaSttaaataatttttaaSDtKaaMcWg
+BaagBgaatDagaaatactcctNtgRaattaNWcattgYVMtRtHgBaatcaagRcagtS
+taaWRgtaaatHcaMacDctatNaagtactVHaaVagMgttgKtgtHatcMacatagMga
+BtSaaaBtagttaaNaYgStRRctYWYVtttMNBgcctgMctcacttagtgtttDagaca
+YaattagaggKtttacaatMttctttatKagaaNtBtttKSHWSaVtVtgttaRSaYccg
+taBgggMtKtttctYWttcaVaagctttttMBgDKccatagVactWDgtRtKMtgBKaDa
+VaggtttRaataBgttYtattatgttatgtcMMaatcagaatagHaacaattRcBcDatt
+taYWttagattggttgaMcgtYRgagMtcactaRctcBMaaNgcaStgcgNtgagVttaB
+aaagaatacgcatYMaaatDtacgatatataMtYKatctScatattNgStYWgtttaYct
+tgtagaHaHaYtaRaaagttcMHaStatcatYtttKBtctataaaatcaStcatatStat
+tatMtSatcataHcaWaccagHtaaggaHatatgagaaYYgtgVacSttgKaBacSYcaN
+NccBNtHKtHcctttMttttagtaaaBHBaaattWKgtaaccDataactgatatgtaaRV
+taHgaattctcRttcgcatHtaagttYYctaaattttgWDacBtataatttctVaYHtMt
+agMaHWtagatttcaVgtKaaacctgHagSgtacSWttMaBcHttaatcttMaStYatat
+atattagtttggMaYaatHgaaaHHgatggccctactatSgacaatcVMcatactBBMta
+attaaatattBNDacYtgYattBttHtNcaatgcggacccctDcYcDtttaKaSggtatc
+aBYaaBttctDSRgacHttagMcggtWgagtcctRatatRcttgattggaaaKggaaaag
+aaSNtattcNtataatVttgagBaMaaBctWtHatgcDaatHccgMDcgcWaaDaacWga
+agcaatattactcaaaatMgttgtaaMatatYtctRSctctWcatttVatgBNtaaYagN
+taMatcSgSgaVttSaccaataccKRNcataaggYcDMWaSKVcccaaaggVtHtgHagM
+aggtKVatVtVMDVatBgttWagcctagagacaaaggtataatttgcttgtSaaccttct
+ccttcaatgNaacaBtttaVcaacagWaHMttgttaagttNWaaYcgaaVtatacBatga
+gHtSattacBgttYgtNRRcttgatcttaHcaataattattttccttgaYgacVgNctta
+RattatatctcagWWatNcDgacacgttaatRattaYcKtggtSggWgatMcaaDBttga
+acNttctcaaHtHaagcgVtDaaDtNMcagaaatWaNtatcttcattSgatatgatacta
+ttWatSaattWccgtctaatcttgKDacatRatggBttatggKgaagtttcBaKtgttaa
+aKtcgatagcNgtatVDagaDtaVtcaactttYgaBYcgaYgWgaWtaaaWatVtctVtg
+ggKaVctcgRtttacMaVaaagaaggtVtKNYtWcYaVtRVccgaattatacttatatta
+gcatcKBattttgVDggcKaHaYttgcggcNaatRactWagWgttcagtgWMctaataBH
+tttgHaggcctgacMcYaRtRtcggcaatBagttaagcDatatatNttgtMcVtaaaHMg
+attVgaYgtattatatSaDaaaaataWacaaNttKttcatttttHaMagatYtgtttcat
+taatatVacgcHRttacaYtaagttacaBtcgaagcgttWtatVWRaaSacggWaBgSgc
+ttaScatNaHcaatWacaMatagttcagYBagYgVactWtgtStNatacatYgSYDtaaa
+cSaaatBtttKaKRSWRcRYMgcYgVataSNNtWgVtSaMgBcactaaatYaKattVgga
+caWaaatgHtatHccacStaatagaYaaaVaMaaacYYMctcagaNattatctattaaat
+atgMaRgggtatgaMcttaHgattgtScgtgtatVatHNgcYttNatatBWaaactNVtH
+ScgataaNcBataggtaagagatttMatVtaagtaaatYgctgttttaagatagaWaaYc
+gctaacttaaagaattggtSYgtVaStttRtcKtHaVcWaYaWVSccRactDaattgWaB
+SKtaDgtataaRcttaaaatKcagtNgtaaataaatgattcatgtcKRctatHaYtMaca
+WNgagatcDcgDtatKaHgaBcaaaNWaRataYtYYacttgcactaaYDcKDttWcYata
+StKcgcaaaaaRaaNtttatttgctYatgtcVctttcBKcgtcttatSttattYMttaat
+catattcatSaYtgWaDacgaataactctggaDccattacgSagaaattgatttaDtHac
+gtcMgaMHaaNDKttgtaMgRNtacataWgttccStgaaatDaagYRtDagcatcHttcV
+NWWataatataaccKaatWtYgcctacVaagttWtHactaRaagatatMMtYattMttcc
+atactHgStagHcaattaagacagaMDtttagcHtgccctttattatSatWataBaaSMa
+ccVVgtggatgtgttgYgtDHSaaMaKcagaagcWacaaaBagRactKacDaDgagagag
+cgKcaBggtgtaYttatgcDatgaNgatagagtBtNtaWatagcacgcgcatDRSacHtt
+cataBtaWaNtgtaatcDctBaSttttaggcWtBacgacaVYtRttaacttatgKcggDS
+tacgtagaYtaagtaatgacggVMKtWagcatatagtcataagMgatVagVttSaacHat
+aatatacaatRYaHacaWaaactRtHRaatagcaVtcMataaacatattHaStattDcMW
+VtYaacYagaaHaaWaccNHcatgtcccgaNttataaNaacatctBtaDNKgMtcDtgMg
+tatgKgSatDSgMtgVaaHNWcDcaaKgHMtaRtggcgRgtHtVtatHgtMggaRVgtcD
+gtWaactactgttagaKcccDctcNcgtagtgStacgtataNcgVaHHagYttStaaccW
+acaKctgctttaactagtVatttaaatKttRcgactaHttSaKtcagBBaWaacccgRat
+KagNagKaWtHttttcWtatatttattacagacSBagDgtagtatHtgcattgcaMaRgt
+agatYacactYSBDgctgatcMattStSgattcNttaBWaacatgcttSattttctatNt
+taHNtSctgtcWttKgttgtttttKaMHNMcaacaagNattRtcBaccatKgtVtaaDct
+tgattaaaatHgaataKYtgagMtgcWaWgtRttcDaatgRtDgcNWSgtagtatRttDc
+ggatHWgaagtacgcVtcaatHtttttttgaKggaSaStaataWBMtgcaaatacgWttc
+tagccRtaaaattNWaMggataRRaaHaaMcagaaacacacgDaatctactaactDgatg
+tttaaDacacVaNgagKaBcatataaattcgRtSNaatDttKgKDgcaaactBDtaatat
+agWaBgagtgtYaaVatatMtaacaggtataacgKMtaKgcttgNMtRaaaaVcHctKct
+aaBcWtcHtaRaacKgcaDKaYaSHgtatttataaYtcaKatgNacgtcWWatgDttRaa
+caaDWaatDgagaStaVScctgcacaaBtatacttctgtctttcactacWcaaaWcactK
+attaKtatWagttacttgBtgaBMagaattgtYYttttVatttWtcBagaatcctcWtat
+YcVttattMgNgYStaBgtttcttWtagcaggtMatgtRaaDtDKttgataDggtttatg
+ctaataVYcSttBtYcatctVtBtYaVagtaaDtgagacctgaaatcNKDactgKtacgB
+tDKgattaaatagattatagactatggacgacgRgaaYKgYaRtgaaaagRgBaacatct
+ctMttgacNaWtctVagtStMaactacaatttcVgatacKctaKgcSactaDaatHgBgt
+HgYttaagtNYtRcaRgYtBaactaatatDctaacSKatSDMatWtagKtttagaaHKat
+taVactttSgtgtagWctaggagctttgaScatcggSttaggtgHtgYatgtctNtagga
+aatDttcctgagagaHagttKcttttgcHtcaDgtcgKtatcaatgcgStVcatcaWNcg
+tatttHtatctggaHWSataWaVttgKgtKBaaaggtaMNaatttRDtcDattaStctaa
+atKgtaagtcVgccaHKgtgtcgaSVtaaaaHtatgaaVcatacacVtKattaWaKDgtt
+ctattgNcaagaacaKYaHttWcDaccattttagacttttMttaRaMtaHtacNgccgaa
+aaacKctNgaaagagggaVttttgtBVcatttatttVaHcgattWttMaWcattagtaYc
+MagaatKaYtcatttagacttStDtcagacattctcYaaKMttcagtSNtBtMaHacYWN
+aactVaMgtcNgMcVcVtgKaaataaVataacaDtaaggtcSgtDatttaKtgSNHcgct
+VaaaatatagacRaBgaNtaattVWaKtgcaattHttctaNRWtaHtttaaSgWBctVac
+aNVcKtaaagHDaaaNagtYcYKaVKtaaatBaaaSaVaMtcSgtaaacctcBYWttSgM
+aMccagcttRgtVggaaWgagtaggYctRtaaWtgtacaaMNtagtacggVcttKcaMgN
+aaatgtatgaSgDcSBRgRVcYtaDHgaVtWaaNagDtagggtHagHgctRagaNacaca
+StaNttMaatgaataaSgagBgagtgWccDtVgagcDWVctBttccaWcacgHttgtcYt
+ttacttaatVatgtKtaaatttaNaYttaStMtVaStggattgtVgaMRNHtacaaNttR
+ScRtVcgttcScatMtBtttcDtcatVctDaScttagacaaDaaBtaHtacRgRgaRNtK
+ataNgcaaScactcWtKggRagtgtaaYtaaattWgNagatatYtHattWtYWatagata
+tttKatgtcgDagaVcgKVagacagagatVgHWtaagttgcatgaKaatggattaHcaat
+atgKtMaWtWaYSVtNBDttaaHaMcaRctWScNcggtggYSttcagaattattggaaaa
+ttVccMtgggWatatHMaYtaMaacaHaagVtgDtggcHtRaagtHaagVMWacaaaggg
+ataBRcaaBcttKtHtMgcKaVtaacaRatKRaMaRtMtcagcaataaaaVccNcttMtc
+tattaagacacgagatNtatttataaaSagaaatatSccaRHKatYMacgttaWKtgttg
+HtgagatBBaRRWSacatacWtNtcWgttcaaaccactVcaSaYtaactaHgtcVWgact
+aNaatRgNattatagacHatgcYWcttatctaagcttaatatgaaRcaDVaSaHatgaat
+ttBDacatBtttHactacaNaNtataVcaVtattKgMaSaSggttggDNcgtgatactac
+cYHttaaaMaVcBSacctgatatataBgcaattaatBaHtttgtaagggataaacatgcg
+caaataatattaaBVcaWgttagtVaaWctRgBtgYtttccgYattttYMaVMtaHatRD
+aatgVacaatatVBccgttaagactcgcaaHtVaBaaRctaVgggaacRaaaaaatYaSa
+ccVgRaaBtgataaatttcaVttataSMatacKtaWttgcaRcgtgNattatttaataga
+atNctcatHtSWttaVtRattcaRYtaaattDcaKagcWggaWcStaatNVgHaMaBKtt
+aaatYRMHaRtcgtagMRgtattcctHtcacaaaKtaNttcaRcatRtccgatNDagaBt
+tDHtcttggccttaNtattaaStaWgKtVWNaMccaVgVgtatcKacDaYcccactcatt
+cacYtattggatVgaWttctgSDagaWDattctacataaaDggtactatagcNcSgagtg
+tMtaacNtVtcStttSgNDaDYgaaWVgtactRtaNcYgataHagaDtagttggaHtgtN
+tcgcHYgaDttgRtgStatcattttKtWVaYattgNtaaYgYccHgWactgtaaaVBtaB
+attaMBtHtttYttVgtaYMWatWgWtNaccVtgMWaSDaatcYWccaaaHtacgKagtN
+cMKactcgtaaaVtaMatttcRcttgHtattattcRaaaWaWactgDttttccttttaKV
+NaVggataagaagWttcgBtBtVaYcataRtaacBgNaaYctggtatctacaaaagattt
+agttaaaaNaaattgctcaactttBKagatctgctgaMgtBttgtKaSatVgcacgaHNa
+tVDgttacVBacKBaaKaBctccDtagctataWKttagtcttYgtaSccaatcBttggaB
+tMaaaagaYtMgtgtNatgacacctWcKattctgaNtaSgaaataatatVSaattaaWat
+tagDtgagBaHaaNHtBgttcttatHaggaBtatcHtSttgccaatNgtaHtttBattaa
+catcactgaWaaaaaatggatagMHtSgaaBSatacBSaagMaDcaattttcgtctaacg
+HtaaaBtatcttaattagtttatcttcgtWVttatatcgccgaagBgRaDcBaatHVDta
+taacaccVgttHaaSgaagaaatcMSaHBattgcaSgaSVaRttcaMtgtgcaatKaatW
+ggatBVgtataNWgNctttacctttgaaRatSaKttHgaaaYSaBttVacWttcctgctD
+gBSgYcagcgggWRataaaatgcactagaaHStacaatHtggtgtBgcNDttggattatg
+aagaKaatStgcttHtgKNMNRagtaNtaDattgaDDcKtaaatcVVBtcSgNcRtcHat
+aRcggctVBtccaWcaDgaaRaRctgaatMtaRtgBcaWNaNatatWScYYaWttatScY
+tSgcataDtWcacBtactaWgcYtcgtataagctataNSgBctagattaNgaKgatVKgt
+agttttcaaagtgcgcYattcagatggaKcMBtacgtttaacctaaattaaatattcatR
+aggtcgcccattMttaaaaaaactggSgtcccgtctaNtWattcaattVHDagRtggVSS
+aaHtattatWctatKatHtHattYBtaVaMRatgYagcHtaSataaStKaaacattaagg
+gttggVYaaDgttWSttcattaRBcMttttaacatRDaataaMttRgataaagVDKatca
+tacaacgMtaatYctKcgggcBKNgtggttcttaagttYgcataVMaaVBgtVMSNagtt
+atSttgtDtgtMgMDtNKtBgctattacagataMWtcSggtcHgggcgagtcRtcRatta
+aaatgaaYYattgtaaccttgatacgtWcHDgBtVagNcSgBKtaaMtcaStgggatDaV
+tKScaYagtttctagNBtcMcDgKaDHtVtMaMacMgtagtaaWtaYtgHtttttgtcta
+gYHtRaagacDRaatgctVMtttWaYaaNtttatatttStcgactaDatKaatatattHg
+gttgtRtattaattaaaaRtaNacKattctVaatgattcttacWatgDgagggtggScat
+NtcMggaagggHtaaccttcWcatWaStagHtttgatHaRVaaSVNNtcaRacaNaKttg
+ctgggcVattatccatVatataDtDcNgMBMgHSagggaaagKctgggtcacgaatcaat
+aaVtDttaRRgtctStattNBaaaBHatcgttaaWMagatagacatatVgDBttYMacaa
+tttKtttaataaaagcacgVgaaactDBtaaccgtagaNtgagaaaRttcKKagtYKttt
+taStataaHgtcNDcgttYccaaaaMcaWtgggttatcaaRaaggaataaVWcacatatt
+aRYaaVagagVtcHggaBtaataNattagKtcVRtgactatcgHDaBgRBStVtSgNBcc
+WDgaatgaggaaNctttNttttacaaggagaaDDaVtcgaataaataagttaattStBDc
+caaaBgVaDtctScgtgtttttgctgtcacgtttWgacStMtttVaVgaBtacDWtttag
+ttDctaSDVtttNaDDcHatatacYtKataaatagttgaacaagaatacaDDcacatttg
+taaaggHattaaatgttacgtcagtNStttcVatttaBtHtVggttattaaHcgaWagaY
+tVaataaatcaBgaccctHcatKaDatRttHRMcgtcgggSMtaatNagtYtgaYtggMY
+ttgtaaactacgKgStttaaaYatatDtaaSaVVcHgtagatgaggtcaHggMtaMWaWa
+HctgaatctaaBaWaDtcgggtccctaagtaVYDaNactataaNcctKcBcataaatttc
+aWSttttgacHtctRggagRaagacagWVNtctcatHtDHaRagctStatattggcattc
+attttMaNaSaRaNDHaagNtMgtVWtgtMccaactKNaaaVaStatcgtStgtgtaBgB
+gtaatcNtccgaagtttaWgactNgtaaccaatgNatWttgWagtaaKgtctRgtctaat
+aagttVDHgStgttcVttgtSWatcYaggMatgMRcBaStgtaaaaaMttaYagccggtg
+aRRatgatccaaaggtttctaaKgacaDagagatgctcMgaaaMcgRaacaaatataaaa
+gcagtgtatDHgRaVtWBVtggacatStctKccttVttatgtKattttYcatctgttatg
+tcDKHYcctSHMttgSDRNgtaMNHaggatBcSBtHatDMBcttMacNaVMKtctgtttc
+gaHSgtMgcacagaStaBttcWcattctDtcttHtDKBcaaNtRNaaDgaaaaccMRtBc
+WVVagcttatcgaDYccacKtatgatgtcaRttattYttctaMBggcaYctaNtBactga
+ttStaDaHccYaDtgcaRDgSYtYtatBSaYaaataaagtctcgcgttcagaaKtttctV
+attagtWcacgaaVaaVtctcaVgtagttNaaacaatgtccttaactaaaStaKWagtta
+NttatacaaaKattBctgaagaagtYDNtagatataDtHcKcctaBaggcaatctHttct
+aaDNtgtgaaaagRaattataaBMaggtDgtMaWHacBStSMtcgaacYttRMatNacSc
+gaaRtttctattcMaaBggtaKttaRcgtBattcgatatYtVaccSacacgtaaagtctN
+atYttgcSSattttcKccttataatcRtHNctttMcatBtacatgtYtctagcNttYaca
+atgtaBgcgttVtattaaWtaDRtKNaNDttDWaaaataatDgcgcKtaatatcgctMct
+atcatcgtaaaaYNRttSaNtWggatRgtgtcttataVgaaaatcWDcttDRaatMKctc
+atatRttBtccaattBSacctgMtaDDRagtcagacBNtttattttagtDacaagcaHca
+cgRttVtatcatatacStaatMaWagttRccKtRctcgaagttgaatttNtttatHaHtt
+agctatSBaBtcaagtDaaaRtgattcatStagttcaRattacaVgtatWRttWggtttt
+ctaactttSaaaVHRatttYHMKVVcgttMtatBtaSaaMctgMtcaagaMtactcDatS
+aaaacNgatttNcaagttRgacgataVtaacYNataStRtgaattactgtaKtNagaacc
+DaatgNDaaHcataDSYattatgtctgYWaaRaHtttWggcKatgcgtagDSVtMactat
+aKMSttaHaaaacaHatVaDKtSaaaRtcaNWHtatttctWataagctttcccaacctNt
+aaacattcgagaBKVattaWtcVaKtWcggtaatcaatgttcaaatccDttctcaaSaWN
+DataaKatBcaYttRtcataMVtKttggcaaNgtgttatMaccgttgMNagtgVtNBWgg
+aacacaKaaKctagtctacttSaKYMacaWtWDttatagHBacttRttcctgttagtScV
+NaRtaacgScaStttatctttttSgtBgNtttStRatNDWtctgatcKtgHcattatcta
+aaaattNaaaWgWaDWttWRtHRNcHacBVgWttgtNggtWtWcttgSatRtaaYtYtNa
+DttYagactStacYaYtNHBatggatacVtBatgccaHcgtagaaMatgataHagtKgHa
+WcgtaccKaNatagWtDttcgtagggcSgtRatatNgaRtYataaataRtBtcttaSatc
+agatgaaSgtVtHtgtaaDtVactgattcgcatctctBaWWtaagBttVgacHattWWgc
+KataHtBtagScWtcaNtHStBKMHBRtRagcataaYtNtttatacttaMgacccattga
+gtDYggKccNaaRgataWaaaNWDMttMacttaatgStDYgtattaBatBttKcSaacta
+gtaccgttggaKacRtDaataSBaatacaKtgagDtNcttattaagYcagacttNNttat
+cBtHtgRatgccacctaSaatccaRSgtWggtgaaMcgcaMaagSagaaDatHcttgaaD
+gNRttaDKacgcataagYaagtMRttNaMMMgcggttcgtRaSgacaStaaVgStcaRBK
+caMtctKtctatNaactaHtaactaaatNWaKtWaStRSKcatggtgBtgRBtagaatag
+ataSBagMtDVataaDtaattgaYgaBaagWagaacaggaagtctgacgMgtgagaRVac
+McBaaDatKatcNtKaRtcatDNBaaHatatacattaWRBtcaccattctctaaWttWac
+gtccgcgtMctcaaaccHYtNDatttSaDMccaStRttWgttattaSVKtgttttgtcWa
+tgtgStttgttttatcaagacMttgtRDgcRtctctgtgggggcSaagcatVattMacat
+tSgttaacctaaaaccgcagtgagNgtctataatBtHtacaaSccccMgagRVctYagcg
+aatttacMagVttaRDcctRgSSttttcHtVaacatagBgaMRagatRcDBaMtaNtcat
+ggHgaDYgaVgWaaaaMKattBtaDYBaHRccagttatacVaDcacactcgtaSctaaat
+atRDaccagctttttaatgtagaMaRaaKaaataaaatacaRagaaYaNtatKcDttgHg
+cVtaYgDacagMBagtgttatgMcSgWDWYWtSaKaagcatKatatctcaRHacagttaK
+tgBKtDRggtcaYcattcgcYattttgtccaagtVgcattttttaVaagtaaaagtWcct
+tgacYcaagtaatataYBaatataBtaaatacacttttRHagtttaDSHgNtNVcatKga
+KtgagttgaaaHcgBattatHgRKtcaBaagttgtttgtVatYattaattBatYgaatgM
+gtttatagtKcVctagttaaYWttWaRKWggYttgaRgagaaMKtaggtattaMVttata
+VcagHYacaaMaattRRtataWaaRacHcattaVaBtHgtatBaRtttaccaaggNgtaD
+MtatYtaYVtNtcBRKMgaatRaaagaatactRattttNcaaaDDaagtagtacaNtSHt
+taaataattggtaaKtttaaBaNgtaagtcaYttacVaataataatDtgHSSgtSDNaat
+tcRMBgHttctaagaYVcHcactKgaaNHcgWaWttaaBactcgYtDaacgactMtaYKa
+cBgttcttgttataBacatScBcattKaaattacttSSDaRgKtHHagRNRMtttBDtca
+agcBcgcYattactcgtttacSaaNVagtacacgtggtSaWatBtgatttWttScaaDtt
+tggtKtNKaMtMgcttaHKaRaccgatccctgtgggagRMttaaMaWccggtttBtgtta
+aVtagMWctNtctHgtBgcttatSMYccttgHaatatctgNgVttagcttagggaBBSSt
+aYgYatYgtaaaaattHatctatgtWRNgtVcSgtgcgtcYBagtRHgacttaaagSHat
+atBaaDgcaKtcccDgcacMttatRaacaataaccWtNBaYatttYacYtagagattRta
+tagKcatattDgKtNNgtttWNagggtacStataRtVDYaacgtaBtVKtagaagRtttt
+ttatataSaagaaKtaatatKtattagBtHataatatcWNaacagtgWaccatatStcYc
+aaNRctcKacKttgtStaaKRaWDDaatBtttgtcagggBgtggSctaaWtttYVWttNt
+ctaacatagVYatcagatctVaHMgWtcaagtataHtgacaagttSacgtNRataaatgt
+tgNtaattagaattgctMaRttBtacBatNgacatttcaMcgtaaacctctagHctaaKN
+ttBatatttaatattBaKtRagYtatattSgtgtccBaNSattgaaattgYggcaaataa
+tatHcaaaatcMBaagYatttttaYttYaStatttDtacRtgRattttttgDcRaggagc
+accaattcRcttttataHcggatcatNSatgtagtHHcactgtWgtaggtNgactactHa
+gagHattcaggggSaatgcaaaacSSKDtaggcDtatVagMtggactaBSatagMttagg
+atSYttaacBtagaNSVtaSaNcSScaaatattVctcYaWYtBcttcgaYBagWtRgagH
+KagagMaatttMatgtDtaYNagDtaBagcKcKcaMttKaaaaatVaatHDaataacgRa
+tBNVKtMaccYaaccMgttgtactagcttMatKgKBtMagtcttMWgaatRcacaaaaSg
+cgVtSatggcaggcgKaYaatgctcattaaaggDVacStgttaMaaaaacNVtBtgctta
+acgtDNaaRcgWaKtatactagcactgKVttaatcttRcgDHHattcStatgatcWataa
+gtattttacgtcaRgaaMcDattYHattYgatatcacNNWtDatgaaaactgaatHagga
+NcttcctKggNgatBaaatttgcaaaDtgctcaatgtYagacMgtVVtgDBaacVaatNa
+DtatctgaaggKcagSggVtacgatgNWtKWaggMacctagaatattcttYaatDatcgt
+tgatggtcaacgttatatgcttaWVttccRgVcaDcgagMtacattaMtaVWcgttRcat
+RacaRcMcaNtaYWNYgMtatMgccctaKctagHtttaaBVMaaWcSaccgMttBRgNcR
+WMtHMaccaatgataaggagVttYgaatcttagtgtcMtgcctVtaRtgcaccaDaagHa
+ctNYcNcttaaggcMBagaWtattgtgctaccacgcWataRaHtDtacgaaVttagttVa
+cctatatStDgtggtaMgaSattcatgMcaRctatgWgatKatYYaaataNYcSaDtttg
+tcYttttttaBScatRtctgtaWttaatagMaacatDttaaaNgaacttacYttagaacc
+ctgNgagMNHaaKacccNatgKccttaKcatDStaaStNaaVBatagttcacRtYcRcKa
+agMgctKtBagSaagNcKRttaaaaKaaRttttttatHHNHaHRtcaRcMataKDDtNcK
+tKatctaaataaatRatYttMccaaaNaaWgctgattcaaaKgaatScaNaaaKaBaaaa
+RNtataVcYDattagctattaaatWtgBWHgggtatcatattatcVttcgHacgcgatMa
+ttDcaRggDYtYttNaaaatBKttKccStYVDatatYcctSacVcattttatMtWRctaY
+agRgctcttttaacVtagaNaVRaccgRaattaaVcaattgcgKRctMaKtttHgctttV
+MaNaRaNMKacHSagtWagtgNatKttatctataaHatgSaSattcagtDctWaataaYt
+cagtaYtctatHcgattSRttaaaNDgagatatacttVttatcataSSaBNaDataRtRR
+aattcaRataaRtattttNaRYtaKttaccaaaaaHVaBtttWtttgatRagctaMattg
+cttactctgatKtgatgRBttaataagYttcStKaNgcNatacgWatYaatctggVtaaa
+ttYccKagaVagggatttatttWacgaBcaBtaaDttttcgaBcHDgaaSgVNctgaaKt
+gaVagtVWgRHgtacaatattgcMDNNataatagaaaataatNtNgccgaaMaagtgNtt
+acgVHaacSgStBBtRagtBgtaaWgacttcKgactaaatgaagVaacaBtggtacattc
+aaagtgattagKagNatatVaKBacaMMctccatcgcgggRctttKaaBatcacaScaNa
+aaaatVgHaattaatatcWcacacactcatgctcgaRggVgcatatcaDcatYgaggttD
+gWNagagaaagagaYttHKaatgtaVtYttSNaDtcgaatctattSKgtgtaggaMgtac
+cWcaMRtHttaaatgWtgtccgtKtacggacaNgaacgaSgcYagcKBttNacaagatac
+gaagaVcBgStMacMtgKaactataSgWtaaaatDRataaaNaSaagHttHWYgaccWMt
+atataaaaagatgtaKtVtgtcBNMtRaSaRacVataaNaaaDtaatgtaaagaDgtata
+VDaacagatttWtDtcBgatggBcgagctcKWgtHcBgcMaatDNatcaYtctBgaHtcc
+agHctttMtattgtBccaHMctatctNaaatacgcgtacatacatctaDactactcKtac
+ctataDccMattRgRggHtaaaaNYcVtatccgttSaagYcgMatttaVattttHagVat
+VtttKattaagttaNaacaccHSttagDactSNgtgtttaNtVtatttatgaaacSaKta
+ctctacgagttgaagtcaSBaDgtagatNaaactRKttcatcWtaBaggKtKcYttaDtt
+atMaWcStgattKattgtatatDttatDtKatgtaNtgtcgtcttttttaBtDBcaaaaS
+gDatgHtctacaattcgMtVYtatgcattaaaattcaVgatRtcagBtcaMaNctHgtat
+VatcHttcaDNKgtWcgagHtttaccattNgaactYacaKgaaagtggtttgtgatcgaK
+aHgaatYNtBgcaaVatWacNggataccaDtaaaWttBMaBccagaHDaataaBaagYVa
+cYaScctYVgagWagaYagtgatgtttWatSaaaMYDcactYtaStWgaaattacHgKDa
+YtttttgttcaaaaatttgYatatVcMatcactggRaaMVtStBtaaaagggatYaagtB
+tatcatgcDttDaaaaMatagtctaataNtcttWHaaatcaVttaRaKtcgatttataWR
+taatatcDWcctaNMatgtttDaYaaWtMaagtcagaKtaMKacgccaaVatgWtSagta
+gctatttcactaaNcaaaNaaattaggattatMWgtgacgtcttcattacaYttctRRtt
+tgMatggNtatacaataataNgatNcMttaggBcDgRHgatctttagtNtacaaccgBat
+gtHaatgttttgatatccgttatcataStaKRaKgttgNaagagKttgNYMaggaattca
+gaactcaRataDttaagcttaccttttgVttaWWgacYggStacYcgatgcSccaacHca
+YNtgRaHtcaYaacHctYacatagatBgtgacDaNgatMacgKgBaWagacaSgttaKca
+tactatatcaHaatataattctggtcNttaYggDRtDaSHgNttYaatWagagtagaacK
+tWtHtBatNtScttttacaattagtaMaatttHgtctagMctaccagagttcaKcStacc
+KggaggtctgcNatctctDgYccaaVgttgaatgacVcatagtgtattttccttcatcta
+cttSgaaStcagHtMaataWNDagtatttttataggcatNKataNaMtgctgtttVaacc
+tVBDWattgHttatattaKtatSVSttgtaScgcMcccattgggtagaKMgaSaSttYgc
+aaMaatVaVaKgtatgYNattcttagWgtcBaaagSaaatRatttNctacaStggtYcaa
+ggttBtgaDWBtRtgaaDccacaaaVSatatBcaaScWccgaKttttcgtMaVttgatgt
+MatacatgNttBaNaagtaggaRaBagaagtaRtaagttacWatgHtttaagSaatgata
+NWattgtaSggHDtttBataaNNBRaatKWBgtaDcBaMaKtctaYatVaKataaaattW
+YcgtaHcttagtgYtgcKDtccatMSaaagatYcSaHatcaDtaatgMMatgcaaatgtt
+tagaDDNtatttgaaKcNtagKYcaBMattaaagttaaWDacgRaRtaKttaaattaVVK
+aMaBtaKctaaWcatctRMtgKcBaBaaagattHcgMcgaSNgactaccRatHtaSNtct
+YcaaBDtaggaagcMatttcaBcDaaatggWtcaHctaKtHcHMcRgattgaMtNVaDag
+ttaggcttYctcatDacWDaaaaaKtaBgtBaatcaataaKgactgactcNcattMcaca
+tNMattgtaaaNaaacttgctaRtttacttaatKYgcttgaSStgtaDaNgtaKgBgMaK
+gccagtgtMgatHDtgacaWDttHKaDgMacttaKaagBtttgtcttaagMagtaHcttW
+cacaatSatgYtgacHgHcaHDgtagaDccVaKcaataNttccHYctctaSRtaYagtNg
+DagatWtRttSttNtRNagacatattttatggactacYMagtMacYaagYgVgKgtNtaV
+cgtgaatcataatcgattYtaaatYtctgBaMgNWNKMgDttttaWtaBaaHatNHaDac
+ctccNKtgaVcWattYtgccaVRattMacBtcccNagYttBYNgaBaaaStWacMgcttc
+catgHaacttYagMtNaaVSYgcgatatHcaatatttgtgBcatWMtaaaaDRttHaBaH
+ttgaacaaataaWaMcaDctgBtatWttaacaaWacacWtDtatttatWaaHacaVagVg
+KaaaDttWgRBVagttVNttctgcttgacatttSHHMKScSgSaMtDtaMcgtcaWaaca
+ctMcaHWRgaactWtcgcMNcactVDaatHcDSttWtagactatgaRNcttagataYgag
+gaagagcaSHcWtMaKStatgYatttttVaattgtttWataaaDaDgataMcaMtatttc
+tVKaKgcttcctDagtgatWatacaRtttaaaBSMctHaaatcagStatStgaaVttaat
+tatttgctaagcgagaWaaWtccgcaaSgaatVgtaStMcSNcgtWggMVWNatHctggR
+tttaacNagtttRtaMBgatatHtaatcMaaaYgatMtaccttaagYatcgaaattMata
+aHatYMcccaaaDaYaVaWgRaHaaaMcHSattcatWSatttcaMtgataKBYtactgaN
+ttgaaDactgBatgYgttaagVgaagDagaatttKNtgaMtHagtaaHRgaaatttaYta
+ccNcgWNcKtaYtBMctVBWttttaSagRHBtaHtcgtactHggagtaatttaaaVVatt
+WDgtaaHaYgDtaacatDtacWttttttatgccacttaDtagtaaKgYNcttMNDaBcaV
+McMctWgatactaRcaaWagaatgcWcRtattccagKgaNgtctcKtWgaNtSttagVaa
+gaSYtcctWatatSgaDaKcactcgBtYacDgMtaKggtKcDtRtRgSaNKctaatHtRD
+aRgatatacattagtgccSttctDgcgatNcatttcHgcKtagcYgttttgNKWRattgB
+taaNcRaatcNaagcgaaVKttYtWttaBttttttNggKcgaRBMVtNcNtDVaaMtcBN
+aKtaataRMcaaaattYactactBattWcgccgWaaMtaBYtgtaHagtcttVttaggaH
+VaaNaNaatcttgtgcattttatMDYKccataScaWgNttccttttMaRcVtWHgaaatg
+BaaRatgcgatataaaWYacYggtacttaaaaDaaattgatcWaatgtttRcatatcagg
+aBcttttcttVKatKccaccYtDatMtcttacMtSattaatatagaatgSgagYgWNttt
+agtatgRggYKacaatattgggVtttaSaYcaRtBcggtDaggYaaactNataggaggaD
+gaKcaaataagatMKaattaaNagtagttcWctataaDtttcgtcgtattaccStgYgat
+gKtgcccYatDctYtttttYttaaaagaactcaNVaaYaYtccagacBttKcaatKataa
+tKVWcBataaatgttcctatYaacttaSVtgataggVatgagttgatcttacgMMgtWtY
+tagcacaSctcHYtataattMttataYaaccKgtgtaaKcYagaaVtcBKattStgcaaK
+caKKaHgtaaBtctgcaattaWgMcgYttMctWtaDNcDatggWaattggaVDagKattt
+tgaaaRHattgMaaMgtaatcattctKgNaacacccNHataaaatgaaagagSatKtacV
+agttggtcgtgcBtgtgcatgagcaacataagKtcagtttgtDBBHWcgaDtatYttgat
+tcttaaagcMMttaKgDaHtatVgWHccgatKttcaaNcYtcaaDWDatcaWtBtWHgct
+aaMDaDWtWtNKcRRaNttVgHaRgKgcWgattNaaattaataNcaRtagtRgaacagat
+aDKgtatScattaDgatcatMtcgYcgtttaaaRctcagcRattaacatccStcBtgacc
+gtgWaaagaaatgaaWtattaVtHacctaccaaatgBgtaVVYaaaatccKgtcaactat
+aDgNagtcaSgtKttacHtccMKKWattagtatNctattagtttWttRtgaKaBHStgRa
+gattaKRtWaKttaaWaagtaVccctgcgMRWatgttNKgtcSggSHtaBttgtaYaatD
+taVtaatgtHcatWaYcMttataVgaaaaagBgaagRattccggcttDgggcttcttaac
+ttRgaStaMBaaMtctMBHBacttVgKggcttgcgBcBtgDtttcctattaaRcatStNg
+cKgctatcccacSctcHtaHWtgWaYatgVaRRYtgctaaaatggagacctMcttgttMa
+gBaKctttYWBtaYKgcccYttaMgtHaaNYgtgtagagDttcBatgtStttMtBWtaaB
+ctaggaaNgaRgcttttttgtagacRttHSagaatDaYgcctMBtgtNSNaaBttgVtWt
+ttKgacaatatVttVatagatttgcgtcgDtVgtSattaaaVHtaDaatYttatKSWtca
+ttagtaaNatctcagcgtgcKcatDtaBccaaccctgaYcattaNaagNaKgagttttca
+ttaHMaVKMDDtaSHScaDattgcaggcccMattatacYtMatWgatttcBcBtBctKac
+ccaaWctatccctcaacaataaataaMttgtaHHcgatKgaggBtRYattatacgtaYNB
+acagacaaatVtMcttttRtVcaattgtttgaWtaaSacaRccMcaaacttttaaacgta
+cVBtcWcSaYHgtattacgRtgtgtaKgWgaatctaBtcgtgRaaaWWVBcaNtcgctgY
+taaaHaSccaagaVMNaacagattaHRaaMWcVgMtctgcatgaagRDattactgcKHtc
+actYtccttatgHtKgMgKcDtacNtcaStgYccaaDagttDtttgYcaagcacWWttaM
+gccaStaaWtVactgaagtKtttcaWaatgMattatKcctctttttcatgtaaactttNc
+aaKgttttMaMcYtgWctMtttactttagaKtMgttDYttctatagWcRttatYSagact
+tcaScaacaYtSaattcaaagtgctSaagctattaaagggtaactcacgDKgttaMRggg
+attttMcgttattaVtccaNagaRgMaataaagaStcSaacgtaWttatatHgttHBcgt
+acggKBtSatDactRggaRgccBRttctaaaatSactcKtttVaWRatatttWaHaKMat
+gtacatcagctaatggBgaBNSNatatcYStagaatSNattaccgtcaataaggYMRtaD
+aatVgYaDaattataRgVaagtgcaNKtgttgacttatHccacHaacVcWcNMDtatcat
+ttttaHacatKtatagtgccWttaattttBSDaKaHaDttYacDtBgtMNgggBaaaaat
+tDaaVMaKgatcggKtgtctatctctVatcDtaagaagtgtaMcWatDggaaaaaYtcDV
+tNttcNacgaYtcgatHctctaWgaaggtMttcKtcttaMgtctKNagcRWcgBVtcBDa
+tYKtctaVaaaBgtaRagcacggcaHHagcagaaaaacgggtataatcaaWtacYcWtcc
+taBgVVaBagHaaaaaatataRYagaacgggVtttcHaMtNtMgcgaaatKtattaagtM
+ttatcttWttttRaatatgttatgtatttRaagKtBgtgHtHDggaBDtWccattcKttt
+agtttagtBYcDaMBtgatcttgacatKctBcaaaacaHtatggaNaVttcgttattttt
+ttcaaDtDDaatcaaaYaaBHttaMKMVgctgWtacVtRaaactgYtcatggcVHtgatt
+RttataBtcgaaRataDttaatcattHtatatccNattcaaHtgKRtRtagtKaRWaata
+YaggatccacttcacaatgtgatMaggactNaaccaaMaaKtagaaMctacttDSaaaWS
+gctcagtWaataWaHtStMacttaDtgagWaaaatatttatcaacaactRtDgYcYtata
+tgtataatWtagccaagcgtttataatDgctgVaaagHaattagaatBWggttctBaNta
+ctHtKBtcgaaaRttHBatDaaKccaSHgtgctWttcBaatcctYttgaHacgtatgagS
+tatRtMaacKacacggaaSctagDagNttgaKKSgtttctacgtagSataHttDctggBc
+YtttaaatcgRgagagaDtgRSaVStggVtgacgtMtatgaaNtWtHgtDaDtgttNaSV
+agaattccgcttVatatacattatataYtaggYaaaRDHttHYDtNgcatHggctattYt
+aMcWaaVtaNtatttHaagBtatcagatHtttgaaWWtttKaaaggBtattHagtaacac
+tDggtattttScttaaaacaStcaacHttMtatcagatSaHtaVtBaNYcttHcatgHat
+agaaggggaWgtgBtttagtVttgacatYtKtattaYSggtaaaHgcaggaStHtYcgta
+aDWgtaaaMcgYtNHtgNgcttttataWatttKWaaKtHattgRtBtMMccgtBtYttga
+KaWBatcBgaaacaBgaagatYgKWaaacBgatgtDaaacttDcacgatSKtaVaRDWtV
+KgHtcRattactctattBacaaactaatgDtaatcatatKRattSggtcggRMaaHVtgt
+tMcgatatcccgVctKMgBactVtWtBKtgWtaaaVaatRgKatttKSaYHtcVBNtgSt
+gtatNStaaccgttaaaaYactBgaaaaattacacVttKattVNgaMattNccctaVtaa
+StctgaaVatactgtctaaaKYNDtataWtattaaNgtHtaWgaBMttttccaaaDcgct
+gagBacacttctDSctcMtBtNccaacaaatSVtatWggagSattKatRBaaaNtNttta
+gacttaagtHttaatcgtWctHaMBaHtaaagKaaKttgatattttgKcgtcDtgtKtHa
+gDtMtatgatcttgtcSgtWgctaaaaattDaaaNgNYtMttNHgtHBataatMgMttct
+DcgtNtNatggKatHtaaRtRtDStttRVcaatKgaaRSRtBttatccataaMttagcaa
+WtagtVgaVBatcVtYtagttgtaMactaaataDatagNttttactagcgcKctDatatD
+gaHtRatVWagaDtttcggSKataacaggaaKggMtttctaVttMaatgattcgaagcga
+ttaNNtYactttKgaatWttNNgctatatgttacKaMtaaDgtKgttBttHtDacaagaa
+RgDgttWtaatgVBcaaccatgcYggtRcctaaDaaHcatYNaaVDNtBgtBaattYYgc
+HttRctattVtattgttcKaaatagtacccttgcVtaaHttaagaKtaagSaYtgcactt
+DattYttaVgRcacaattDDttagattttcHagccaYaataKaatccVDKctNcctcaaB
+ccaaBaYgKacWVtWttatgcSatcDHttattaacaagaacRSactBHttDaBBBcacgt
+tactHaKgacaKtaWMcHtaVHttaattcgttatatBaaagatgaactaaYgDNattNaH
+gHKtaatcctcttcHttagaatVcagaHtagBgtMataattaagtcSRcatSagMagaaa
+acgYacgagcacgBcggacaHKaaBatSatagtatcDttRHtcagtDtaStYtagaaagt
+YNHtgaacaatgcgataaNgtNVagtacccctBcgaYWaactRtDtatttKatBccVKtH
+ttNcttVtgaKMtgcttggcgaNatctcKggtcttttataaacWaBttcgHtcaHtcgat
+cgcggccaHaagcVgKattBaaWttKcttaVaagYaVacagaacgcScDcgatataagtt
+ttacaaKcaaaBcYcHKctRagcgaatgtScBagMttYHtaatHcKKtgggatgKSaaat
+actgWBHVcagHcttVBgYDtaVtcctcatRcVKcNaaYaBtattttatRtVtDaaScgt
+atacMatcaaactagtaKataaatStHtacaagagttgtYatctagaBaHSYtaaataaa
+StacaHagWSRSDtagtatggctgaKtaRctaaagBtactcttatgBcHcNtNRNtHata
+accRttagatataaHtacScgtattgttgtDcctaYRaattccaNatgtgctaaaactMc
+aWttgttgVMaSgtaVaSctMcagtcacNaWacgaatWtaRtaatSgatgaaWtaaWcgt
+ttHtWcttgatKtgDtDMcagtcattcacttgaaatactWgtattcHttcataactgctg
+tgtKatRagtaatttYgNcaatcBctgtStaggtaMatacgtYaRNtgNaHtNccRtgcS
+HgRcaatttVcctattaBKtgYtaMaactRaaaaBaattHHtatVNWYHaatcagtaMVt
+ttctattWHtttacaaVccDctYtttVtNtRRKtBgatHtBcaatHYaSgaagaagHagt
+ttDaVaattVactactYcaDtKttgVVVtaWtggctaSttgtaataDctWactcaRttWc
+MSYtWagaagttctKHcgKtDaYggaDttgtgtataacaRKctaacttcYaDtccNaNtt
+aYtaatagRttaSagaatBtVRtaatcttatgcgtWtataaWgHataatttYYSttYcgg
+KKtaHcttttagHDDBtggtttaaacatagaRagtVagactttacKaWDMacgYaacctg
+ctKaNattggatggNgtKcYSttttcctttDtYttBcatgattSHaaccVtccatctccc
+acDBtgaWBaMaaccgttttcttaaMgScBNatBtagtcttccttatKBRcctggtVSta
+tagcDgMgtacattacccattKKtaRcRatRctYVaSagttatatYtcgNDDggKaHggc
+ccgcRtacgDtcYctgaaacHtatattaVtcaattaaatgaWaBggYtHYYaVagWacaN
+tDtaRattgRacRtacacatgHtagagtaatatttctgDDcttgNDagcctaaHtatYHt
+KtRaScgtattMttacaacHggttttatSgaHVVgaattaatagttattactgtRtaWga
+taMDaaaactgNYacYtagKtaRcaYDHatatVatggctKtWatHaNttaatttttgtaa
+gcctggcgKataaNtttRMNggDtataaaatVcMRataacagctMatBgMtaaVcgagat
+tcaaaSgtgKacgtDHatWaatgttcDtWatgYcWRttcatBSHtttgaatatBgaaWgg
+gaaBcctSSVaagctSctagYatDggtatatgtaatatgtatgHYcRtagagtHcgggca
+taDHattcaaattcRgcaaaataagattcaaYVtaBtaagRagtttgSRtgRYKgWggtt
+taaHgcHStgtggtctaHaccaccSaaaattaHatgttVtataccagaatDKVtctagtt
+tcaatgtNctaccgDcacgaattacactatgaaggccKVatccaSWaaKHtttSggatga
+gMagttgcaatatKYtacBttaccatHRttaacttacaDKKtaKaDcHHcaYatatgMag
+aRaNNttcggagYRtacMtHgacttagacBaagggBatcttgaRDactgatacatatcSB
+ggtaaaVWgMaatttaYtaWacHattDMtttaaaRRScatcttctaatacagtBVgtgtt
+tBagtatgBNcaagHaaaSaSYKcacMtKatggcacgcctSRaagcataattaYacctMa
+aKtcggaBaVaaWaDMttgccttaaacttDaaHacNVtgagaataccactctMttaatct
+tHcctttaggaKgaggWtaNataYgtaggtgaagtcWDcWaBatattRtVgtRgVtataa
+cDDNttatcYaaaagcaVgtYggaDattccgtccDcSttaaWtttcaaaatggataSatc
+tRYcaaBctMMtcttaacMaSgDatgagatcaYgctcacHccMgaacatcDNgtNRcgBa
+aatagaYgatgcttRaattStccttgagcctaVaagggatatcagtaNMttaaHcMaatc
+cScBtYaYttatgaMNagtgHaatHacaHaBaaDtaRNDNcBtagBgacatStagacttg
+taatMtYaNaKSaccBtttHcDaHNBttBaacSaggagaacgWcMgtRcaagattSctgt
+aBtcaatMtaHgcaaccataVgtaagDRcDcggaaccaBtacVMgSttgtcataaaaaca
+MataHatgttaacaaMgtacgtMVcatagYtKgtgtcctaBcYKattcaggBaaHagStc
+NcattatRRaSYtYDRaHYttttggaRggggttatKcVtHgctggaNttaagagBaacat
+tggYaaDcSacggYaRttacaacactcDcacBDtYataaaaDWtctcaggVtaYttKtaV
+KtDSaMtYtYcgtaacHtRcHctaacBgattttagHaScDctHttaaaatVaHttggtta
+tttDtatHtcaHcBagSttttDctttWtctaaataaWtHYtRgtBccSaaDSaNgatcSt
+taaaatgaYgKaaDaVatatYaRaHDtataKaNtagtacataggSaatMtctMtccctWg
+aYtaggataMttcgtacgccYgBSgttaaHgctRgRgtDVSRattttttaaKtRMtatSg
+RaatKacMaYgggtagBgNHcgYRagHcatatgtgaacMtacSDRMHaaacHaagtWSMc
+aattcagtDctBattgttcatttMBaDVHVDBtaatKactNacgcBYtttgatctatVVt
+atcKaKSgtaWcgtcgNYatSaRtcaggaRtctattagattKHttYaaBtcacatataat
+tMgtatcataKKatDVtWtaHtHHVaggaaHagWaHtattgtDaHRgatgtaaaWaaSSt
+MatttgNtgtcagDWgagaBagtcattaataggagttcagcHttgWagaWcRttaKttaD
+gaDWtYacMWgRaatatccMtaaattRaatacaKYcgcatgtatgtNaccataSttSatt
+tttcgatcttcaaKcMDatgaattcaMWctKNcHtctacaYgatgcaBtDDWtaRtScaY
+aatYSgBtDcaacYataacgcDgtaacMtSaaKcKttttDVgttgtaaNcaattctcaat
+aaatcSVcKaacattgggacatgaaaacggaggagtacDYgatMYttaaaBBctccYgcg
+agccHattttaWtataYcaKaaDYaaaStMctSattaatataNaWcacaataVtcataca
+HcgMgaatYgaataatRcWcgtttcNDYcacaaacacaNttttaatctaKtRttHDSttc
+cWatatagtKtgtcgaccaBgtVacNaYBHgtttSSagcNtctacctttaacgacaDcWV
+acSHcaNacatttgBYaaagatWagaacYMatcKgBYcBggtaWatataKcNgaaaattH
+YtSaYDVHSactgttNRgaaaMBtatataaaaacVtctWtgKggtatDBgHaKaHVcMWt
+YYBaaattaVtcgaaacatggagYKtaaaacagttNtttatcatgctagYcctctNgttc
+tgctaYttBataaRtattgatgaaactagttBgagtcttccatBagatctBaaagSacag
+taaStaaatatataataatcttaactatVtaaBattHcHgcttSSaaDRaKtataagggK
+aacRagBaggtaMYttggtacMatMttttYttaacttaBaYaaaatKgtactactKDctc
+ttgaDtMgattgVgcRaaaKattaatataagWgttcaWgtcaKtatcgacatDaaSatHt
+ttcagcNtatSggtgtaRtgatttStBaNaHgcagttaggggatWtttgattttatcgaB
+tctaggcgtgtgtWttttaaSaWKctWggtgataaaattacBtMRtatccattaaSWtta
+SMcYtHtaacttaaBaDattctatKatctttcatDtcgNcgacttgtaaaattDcaVatR
+acatgaaagtcctgtctcatacatatcSWgNDttgaaVKatNacDggagWaaatgaaVNt
+ttBataaagVttVataataYcNMVaNaKaatRMcagNacVRactcWgctttNatHaRaBR
+taaatRtaKtNgYWattaatcttaRttgttcttaaWaaagttcNVtagMaBatcVcgccD
+aaBMgKttgaVaaccgYtRaactttYtcatgattgtWSaaBatagtagSataDgatgNta
+WatcaMttaHattagVtggagaNHtaatatctNaagaDBatcttttaRaaNtBYagtaac
+VttYBtaagcaaaMatcNgKaggacagagtgaRatWaDaaSaDaaattVgcWttatBNct
+gSagtctgcSttacSRtgatHDgggcBagccDtatYaaagaataDgatDaBttagctatc
+HtcWtagggagtDtSaaacagtagcttVatgttggcStataacttVtaatWKtatDatct
+tcDaagactgtgDNBaccaattaacaaagaaHWtatttaacattWaatgttcMttaNNcY
+aRccHtacRagatccKaaYactcVRDtcHVtgaaNaSatctRSaWtagagtcgcaataDc
+agBaagtctSNagaaaKgttataStaatagStaatSatataWttctcgtaDgtYRcgtHt
+taKtcDttRaatNacYgtagVaattNttttatDgKcttttSaaattYcgYBaaggttcta
+gYcBataacVcagggaWtaKtacatgcYcctatccDatatagtcRaaaSMgtggaatcaa
+MaatWcgctagggtcattaVtctaatgHcaSHtcacttBaagaMDtactYgtttgWgacc
+cStDtagaDaBtgctctttKaaaatMttNStggtttatWttYttatKMKgtctaKcgaBa
+aaattcccgacYtBcaKaKttRccaaBaWgMaMatgtWtcRDWttcggacNctataaacK
+aaatHatggDatSaaKtgcgRaaacgtgttcatNtgHtcaataaacaaWMKatattcWaK
+cNaccWtggttcctBaMttgRtggtWtaaVggDgttaDaScgWccWHatacaagtaHtaa
+cttWaNatgtgttaacKaVtcataDMattgtaKccttttttStaaDDtHYattNtcgata
+taBattctWRatMVtStaSaWttNRacgatagtRcgcRtcctttacagBKaaVcYtRaKa
+tVtaWttaVggBBatcaaWatgtggagattDgWtttcaataDtactRaatBattWVactt
+WVNtVagHaHtatttaVagtRMMtaBattatataaNaagatHBtgtatVtaaacatttag
+tccaKDcacgWaaHagttVKBgcgRaSYtttVcgaacaBatttaatctaSYtccNtcatc
+tatttatBaHcattcaBgDMYtactgScccttRctaagtaaNtaaaaattatggtVataa
+agVStcaatcacgcDaatgtaacatDBagtcgaaRDaSactgcagaHgttYatgaVgtNc
+cttcaKHgcgataDcgYtgtgBatcacScgctBcVttttcYaaNtttttatcBaatgata
+YgtgttgtatgaVcBagtatagtNaRaaatKVtcRtcWatctaattgtVgataaMataWa
+gaDttaatRcgctaKHgaRagtDctScatNgHgtKgtDtHBVgYcagatgttagcgaata
+aNBactBaaRaWcRcMctctBtWKaggcaataatSYtccagtRtaSVtRgatctaBgDND
+tBgtttgtaNtWtaatatDtataacgccDttcaMaMatgRtgaaaMHatgBaatgcccDa
+gNgttRDcWtaaaKtMSaBgctgcaatgtSVattRWcBtDaaMKRcccWtVttaaatatt
+tctgtcatNBgaaaatHtttWtYtttcaacaaagaaNYBaatatctgatNtgaacaaMaa
+YcNgtgatttWtNaatWcYMScMctaaStttNgHtMacgtMDtgagcattcacWtttKtt
+BtKaKcHaBtttaBacgaaNYaaaatBaatNHgaaatMtagatDcaagMtaattctKtgN
+tScaatagcaHDagtagagSRcagcaagaccYHtaNtBatKtStcRagtgttMaYgtggg
+tNatSaatStcYtaBaSBtaggtctMtatcatgaattactcYtNagaaaDtggaaatKBa
+ttaaatcWgKtStKtcaWMggaattYtggccgaWcacagaNWaNgaacaYaHgaVtMctV
+HttaKDcctNccBKMDagtatgcHtttaaaDaggtgHtattcatatttaagcBaaaRcSg
+ttaaatgWacRatacaaatgBatYatatRBcacaVataRaKWMcDWtSaatatHattcVg
+MKYtgtaVBtgagattRgaatgaDgtcaStacgctaggRggtSagKcWYctacaagtttB
+tgaBttacgaStHgVaStgtaRtacaDccNDattSRgttatMtNttttWHacDtttVtga
+cgYattccWctaagtgaaaMMatgNtctaataRctgaacatttVcNtgtttgaggcaaag
+tatgVgtaVtgRDcttBDtataaMBatatNgataataHaaaNacaStgaNaHgYtgacag
+tcYDggagattNcaDtKgtagMaacSHRtcagNagatKcatataVatactgRVatgBtat
+cgttattHtHcKaDtagRagtgHtaDcVtatacattacggcaKttattgacatDaatgtc
+tcattVcaRcttttgDtNHSggcttaYDcHaatcDYacccWaMttgRtNggYtttttggD
+gctacVDtBMgBaDgtMaaBgctBVttVagaHBaaaaatgNactaattattNagaagNVa
+BgVtRgggatacgctgMtgaccatMaaDYDaagctggtcaatggtatBtNtccWtWKcaN
+cBttactgtgBYDaMtMtcWaatctWYHatccgWtataaaNNacNgctYagtaaaRtaaY
+ggcagaMaagggttHaatatcaccVtagtggcgtMtagtcaYaaRttWgBtctgaaBtKa
+ttaatYtacaatcKcacNcMDtgtactatcDcgRtaaYagattgccMtgtYKaRaWHgta
+ccttagcRaWaagDataccagcatcYtcaaSgVacatttaSttSVDSctactgaNctatV
+attttacgaggWgtaaaKtcNgatgttgcaaNVttagRtttttRttYYaYcaaagcVDMa
+aRaRtccVcSattttcaattagWattMMctataWatggtaagagRaaattYKKtgatagc
+MYgcVcgggStattacgBBctNtRgacaacYHctctNtataattBttStaRaaaatctgt
+WatcRacaaMtattYttKtccaatcSttatgtaWttcgcaaWgtWNcBccRgtBagNgYt
+DctatccMaagtgcYMtYctYttgtcVaaHtatgcBaaBcgaataattcttcDaacaaac
+BtagWYaagcaVacYcKYttgSaKVcttccgcctcattctcaatgVgaaacatWWctgca
+gtttctttttMagWttatRggcattattVaagaBBttatctattatMcNtaacagttgaa
+aBaRtaRRtNtataYNtttNtcctaVBtatNtNgBtaHHYDttKctaDctcaNcatgDaY
+atgYagaDcaHgactHgWWaagWtSttctagKaaggYtcataYgBtccRaggggaaaHag
+aacaDatgaaaatcaKtattgWacgtcMSaacYaYgcWYNgagtaMgtSccgaaaaaatc
+tggaMMRaaaataatctaaacgatatgDaggaVKcttttaatgacBttNYttagtatDag
+YttWctttNgtHtcVtattHtcHacattatHgNStgtSaNaactVMcaatcccBHNatct
+tDtcgaKccKttatttctVRaagttaMtaYtcttcatMYRctttRtaMgSaaaactgWac
+HagtacccatttcgcatgagtaaagtHcaKgVBtaattatBtttWatgMctccattgact
+attcttgtcatSttaaHaVtKtDcatcatatccaacKatattatNggNaRatcMSDHRtc
+ctYRaatccacYaatBattcttBVctatatttRNtgaNtcaaaRgtaBcttaaDRcgcta
+cWcttgatatctHttttgtNtYatatacgaVBgYHgattgggtcgacacDtttKVcaatt
+WRcaagBtgctDKDaYtttcKgNgggtcacVagatMgtMVgVgatttcagtcgtgKgtKY
+gtYSaMtgataatNggattKNgaSggactaaBagataacactcataVgttataaSacaat
+cRRaagtaDaagDYtcactgtgaVttWtBaMttttgaHtKaYtattccagccaaBaggat
+aaRtBatNcatgtatatttcttacaaYVNatagaaagaSaaaagaaatSaBgtcgattac
+attgWccttHNattataacgVRDtYcWgaaYaVgMttcttgtDtKaYVttctgggSNtaY
+HWaaHactaaSSagttgSaaactYaMttaMaHVRtcgattaccHtcgcgatgNcaYtata
+ttacgcHaaaMNMtaYDgacaggRgaYVtVKcaSVcWMBBaWaWcagtatHaWBNaMcBt
+atccatgaScHtYtgactcattgaYatRtacttYtctttgBgtattaaDtcaHgcNcaVa
+tagtttggggRaaaccWcNNttRBgaaRKgaaNtMaagcVacgtgttaaMYWtcBYtgag
+taatcgttttaatcgaaaagttDcaatgtggtBaBcNtgNatBtggactttagYttBcgt
+tRttatSgacNaDttatRKacactgcSKaVaaaRgHaattaaaRctgatKaWcctWggWW
+agccgaactaYccttgtgaBHggcYttttBccttaggaKtaaaBacVDcBYYgaWagaKt
+aHaaactaNttatagtcttttacgaccctttKattWcgHgcaDccctHttatVVaagKaa
+tatgggMaNHagattgNStatBatcgaaYgcVcagaatcctcYtBKDatatcNKgacaat
+KDatgaaacgaaatYYcgNBDtataatMcRWtaagtataHgMaVggcaaDtggttcVatt
+attaaaatSVaMaNcDBttataYgttttStacattgagagtccaNtgaatttttKtStat
+atttRaatttcgBDccctaaSWatttaaMBStcatacctgctctatctatKatatgaaca
+actctWBaNagtcgYaaaaRtctMtDgtaBaacaNtacagtcgataNgaVccgtttatta
+tgatctagtDSgaHNcctKtcttatNtgatYKaaStctWDVcaaccgaVttScaagaaaa
+VcccggagWatcVaNtVaRcNtcagatcMMatactaaaWaagatYHRWcaSagcgMttta
+tSBtBtBgacRaVgtgattaagtBgtatcgtNggggDaWgagctgatctatttHaacttt
+cgcttttccatttNaaYgtattttactttacttRataBttgatagggacattattaaSaa
+aYtgatggaDaMttacttatttttttaaWttttaataaWaNaattgtaBtBMcatcNtaa
+MtDaaaatcRgcatccaMtggWggHggagSttacaYHatYtgtaatcatttgVtataaDV
+ttcaYttctHtHtagttWHNYYtVRVccatacaattaaaYatcgcatBagcaatDaWacV
+aBWattagaaBataatgtKaaaNKcagaactNaagaNatgKtBSctgattgWcNaaSata
+ggtataaacVaatDttcRaRtVtVtgtataagMtSccaSScagttgatYattcagcMaaW
+ctaagtYcSattNccgtcgtaBtaattgttgacaaaDttttattaatacSKtcgcatNtt
+atWatacgRtgcataactYtcacHgVgHttYaataaWacgSVKatactagDggcattKct
+ggataagtVgKYtatgttagcgtaRtttaaagacHgacacattcHKaMKtcgKtcacggt
+gatcaaBtMttcttattcttDaKKVgWagtaacatgKatVgacattagWtaRtaccRaaV
+HtttttRtgBccagtcgctagtRtaBcMVWMtaBtaggttaYcttagaSgYgttttcaaN
+NgtttVaagctgStttactaacWattcgtVgtgtKcgtYaaaaaKtaSaattgBtYgaVc
+agKatgaMttWDRatgtaatctagacWaccgcaNgtctgtgagtMttgaaatNtttatta
+RKcgtaWatcaWccaKtttNactaatNcgVaaBcgRgDttcDcatttgagWNattttNaY
+tttatgcHtttBBacgttgRgtcataNtatatcaWVcatgaacatRgtNaWaatcaggtt
+aaSctttcaacatHttVKaHtNtMtcttcHattYatcgatgtacSaaataVtcttYStaa
+gattDagtKccgaccHBYatMtcggBacatVtaaagMcttBgtSagKgNttttcNtSaaM
+aStHgtattttKaRttaMtDtcKtcgagDKgaaaacttaaaWNaattgaWWaaggaaacK
+tttVggMBcatattDacctaMgaaKgcgcaaMRtaatcgataaatRDttataNtVgtaVD
+ggttaNgatBgtggcaaYWtagctcWgtSaacgtattKcgcBtttDacaaaaaStKMtat
+NccagKatgtVtHtWaSBgDttgWgaattWagttttaagcctNcttaBtYttaRactaat
+tggagagggtctagtatgggtttacttBtatcatatgctaKggNcataaaSatgtaaaDc
+DRtBggDtctttataattcBgtcgtactDtDagcctatttSVHtHttKtgtHMaSattgW
+aHKHttttagacatWatgtRgaaaNtactMcSMtYtcMgRtacttctWBacgaaatatag
+ScDtttgaagacacatagtVgYgtcattHWtMMWcStgttaggKtSgaYaaccWStcgBt
+tgcgaMttBYatcWtgacaYcagagtaBDtRacttttcWatMttDBcatWtatcttacta
+BgaYtcttgttttttttYaaScYaHgtgttNtSatcMtcVaaaStccRcctDaataataS
+tcYtRDSaMtDttgttSagtRRcatttHatSttMtWgtcgtatSSagactYaaattcaMt
+WatttaSgYttaRgKaRtccactttattRggaMcDaWaWagttttgacatgttctacaaa
+RaatataataaMttcgDacgaSStacaStYRctVaNMtMgtaggcKatcttttattaaaa
+agVWaHKYagtttttatttaaccttacgtVtcVaattVMBcttaMtttaStgacttagat
+tWWacVtgWYagWVRctDattBYtgtttaagaagattattgacVatMaacattVctgtBS
+gaVtgWWggaKHaatKWcBScSWaaccRVacacaaactaccScattRatatKVtactata
+tttHttaagtttSKtRtacaaagtRDttcaaaaWgcacatWaDgtDKacgaacaattaca
+RNWaatHtttStgttattaaMtgttgDcgtMgcatBtgcttcgcgaDWgagctgcgaggg
+gVtaaScNatttacttaatgacagcccccacatYScaMgtaggtYaNgttctgaMaacNa
+MRaacaaacaKctacatagYWctgttWaaataaaataRattagHacacaagcgKatacBt
+tRttaagtatttccgatctHSaatactcNttMaagtattMtgRtgaMgcataatHcMtaB
+SaRattagttgatHtMttaaKaggYtaaBataSaVatactWtataVWgKgttaaaacagt
+gcgRatatacatVtHRtVYataSaKtWaStVcNKHKttactatccctcatgWHatWaRct
+tactaggatctataDtDHBttataaaaHgtacVtagaYttYaKcctattcttcttaataN
+DaaggaaaDYgcggctaaWSctBaaNtgctggMBaKctaMVKagBaactaWaDaMaccYV
+tNtaHtVWtKgRtcaaNtYaNacggtttNattgVtttctgtBaWgtaattcaagtcaVWt
+actNggattctttaYtaaagccgctcttagHVggaYtgtNcDaVagctctctKgacgtat
+agYcctRYHDtgBattDaaDgccKtcHaaStttMcctagtattgcRgWBaVatHaaaata
+YtgtttagMDMRtaataaggatMtttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtc
+attttcWattRSHcVagaagtacgggtaKVattKYagactNaatgtttgKMMgYNtcccg
+SKttctaStatatNVataYHgtNaBKRgNacaactgatttcctttaNcgatttctctata
+ScaHtataRagtcRVttacDSDttaRtSatacHgtSKacYagttMHtWataggatgactN
+tatSaNctataVtttRNKtgRacctttYtatgttactttttcctttaaacatacaHactM
+acacggtWataMtBVacRaSaatccgtaBVttccagccBcttaRKtgtgcctttttRtgt
+cagcRttKtaaacKtaaatctcacaattgcaNtSBaaccgggttattaaBcKatDagtta
+ctcttcattVtttHaaggctKKgatacatcBggScagtVcacattttgaHaDSgHatRMa
+HWggtatatRgccDttcgtatcgaaacaHtaagttaRatgaVacttagattVKtaaYtta
+aatcaNatccRttRRaMScNaaaDgttVHWgtcHaaHgacVaWtgttScactaagSgtta
+tcttagggDtaccagWattWtRtgttHWHacgattBtgVcaYatcggttgagKcWtKKca
+VtgaYgWctgYggVctgtHgaNcVtaBtWaaYatcDRaaRtSctgaHaYRttagatMatg
+catttNattaDttaattgttctaaccctcccctagaWBtttHtBccttagaVaatMcBHa
+gaVcWcagBVttcBtaYMccagatgaaaaHctctaacgttagNWRtcggattNatcRaNH
+ttcagtKttttgWatWttcSaNgggaWtactKKMaacatKatacNattgctWtatctaVg
+agctatgtRaHtYcWcttagccaatYttWttaWSSttaHcaaaaagVacVgtaVaRMgat
+taVcDactttcHHggHRtgNcctttYatcatKgctcctctatVcaaaaKaaaagtatatc
+tgMtWtaaaacaStttMtcgactttaSatcgDataaactaaacaagtaaVctaggaScca
+atMVtaaSKNVattttgHccatcacBVctgcaVatVttRtactgtVcaattHgtaaatta
+aattttYtatattaaRSgYtgBagaHSBDgtagcacRHtYcBgtcacttacactaYcgct
+WtattgSHtSatcataaatataHtcgtYaaMNgBaatttaRgaMaatatttBtttaaaHH
+KaatctgatWatYaacttMctcttttVctagctDaaagtaVaKaKRtaacBgtatccaac
+cactHHaagaagaaggaNaaatBWattccgStaMSaMatBttgcatgRSacgttVVtaaD
+MtcSgVatWcaSatcttttVatagttactttacgatcaccNtaDVgSRcgVcgtgaacga
+NtaNatatagtHtMgtHcMtagaaattBgtataRaaaacaYKgtRccYtatgaagtaata
+KgtaaMttgaaRVatgcagaKStctHNaaatctBBtcttaYaBWHgtVtgacagcaRcat
+aWctcaBcYacYgatDgtDHcctaaagacYRcaggattHaYgtKtaatgcVcaataMYac
+ccatatcacgWDBtgaatcBaatacKcttRaRtgatgaBDacggtaattaaYtataStgV
+HDtDctgactcaaatKtacaatgcgYatBtRaDatHaactgtttatatDttttaaaKVcc
+YcaaccNcBcgHaaVcattHctcgattaaatBtatgcaaaaatYMctSactHatacgaWa
+cattacMBgHttcgaatVaaaacaBatatVtctgaaaaWtctRacgBMaatSgRgtgtcg
+actatcRtattaScctaStagKgaDcWgtYtDDWKRgRtHatRtggtcgaHgggcgtatt
+aMgtcagccaBggWVcWctVaaattcgNaatcKWagcNaHtgaaaSaaagctcYctttRV
+taaaatNtataaccKtaRgtttaMtgtKaBtRtNaggaSattHatatWactcagtgtact
+aKctatttgRYYatKatgtccgtRtttttatttaatatVgKtttgtatgtNtataRatWY
+NgtRtHggtaaKaYtKSDcatcKgtaaYatcSRctaVtSMWtVtRWHatttagataDtVg
+gacagVcgKWagBgatBtaaagNcaRtagcataBggactaacacRctKgttaatcctHgD
+gttKHHagttgttaatgHBtatHcDaagtVaBaRccctVgtgDtacRHSctaagagcggW
+YaBtSaKtHBtaaactYacgNKBaVYgtaacttagtVttcttaatgtBtatMtMtttaat
+taatBWccatRtttcatagVgMMtagctStKctaMactacDNYgKYHgaWcgaHgagatt
+acVgtttgtRaSttaWaVgataatgtgtYtaStattattMtNgWtgttKaccaatagNYt
+tattcgtatHcWtctaaaNVYKKttWtggcDtcgaagtNcagatacgcattaagaccWct
+gcagcttggNSgaNcHggatgtVtcatNtRaaBNcHVagagaaBtaaSggDaatWaatRc
+caVgggStctDaacataKttKatttggacYtattcSatcttagcaatgaVBMcttDattc
+tYaaRgatgcattttNgVHtKcYRaatRKctgtaaacRatVSagctgtWacBtKVatctg
+ttttKcgtctaaDcaagtatcSataWVgcKKataWaYttcccSaatgaaaacccWgcRct
+WatNcWtBRttYaattataaNgacacaatagtttVNtataNaYtaatRaVWKtBatKagt
+aatataDaNaaaaataMtaagaaStccBcaatNgaataWtHaNactgtcDtRcYaaVaaa
+aaDgtttRatctatgHtgttKtgaaNSgatactttcgagWaaatctKaaDaRttgtggKK
+agcDgataaattgSaacWaVtaNMacKtcaDaaatttctRaaVcagNacaScRBatatct
+RatcctaNatWgRtcDcSaWSgttRtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMg
+atNtctcctatttctYtatMatMtRRtSaattaMtagaaaaStcgVgRttSVaScagtgD
+tttatcatcatacRcatatDcttatcatVRtttataaHtattcYtcaaaatactttgVct
+agtaaYttagatagtSYacKaaacgaaKtaaatagataatSatatgaaatSgKtaatVtt
+tatcctgKHaatHattagaaccgtYaaHactRcggSBNgtgctaaBagBttgtRttaaat
+tYtVRaaaattgtaatVatttctcttcatgBcVgtgKgaHaaatattYatagWacNctga
+aMcgaattStagWaSgtaaKagttttaagaDgatKcctgtaHtcatggKttVDatcaagg
+tYcgccagNgtgcVttttagagatgctaccacggggtNttttaSHaNtatNcctcatSaa
+VgtactgBHtagcaYggYVKNgtaKBcRttgaWatgaatVtagtcgattYgatgtaattt
+acDacSctgctaaaStttaWMagDaaatcaVYctccgggcgaVtaaWtStaKMgDtttca
+aMtVgBaatccagNaaatcYRMBggttWtaaScKttMWtYataRaDBMaDataatHBcac
+DaaKDactaMgagttDattaHatHtaYatDtattDcRNStgaatattSDttggtattaaN
+SYacttcDMgYgBatWtaMagactVWttctttgYMaYaacRgHWaattgRtaagcattct
+MKVStatactacHVtatgatcBtVNataaBttYtSttacKgggWgYDtgaVtYgatDaac
+attYgatggtRDaVDttNactaSaMtgNttaacaaSaBStcDctaccacagacgcaHatM
+ataWKYtaYattMcaMtgSttDagcHacgatcaHttYaKHggagttccgatYcaatgatR
+aVRcaagatcagtatggScctatattaNtagcgacgtgKaaWaactSgagtMYtcttcca
+KtStaacggMtaagNttattatcgtctaRcactctctDtaacWYtgaYaSaagaWtNtat
+ttRacatgNaatgttattgWDDcNaHcctgaaHacSgaataaRaataMHttatMtgaSDS
+KatatHHaNtacagtccaYatWtcactaactatKDacSaStcggataHgYatagKtaatK
+agStaNgtatactatggRHacttgtattatgtDVagDVaRctacMYattDgtttYgtcta
+tggtKaRSttRccRtaaccttagagRatagSaaMaacgcaNtatgaaatcaRaagataat
+agatactcHaaYKBctccaagaRaBaStNagataggcgaatgaMtagaatgtcaKttaaa
+tgtaWcaBttaatRcggtgNcacaaKtttScRtWtgcatagtttWYaagBttDKgccttt
+atMggNttattBtctagVtacataaaYttacacaaRttcYtWttgHcaYYtaMgBaBatc
+tNgcDtNttacgacDcgataaSatYaSttWtcctatKaatgcagHaVaacgctgcatDtg
+ttaSataaaaYSNttatagtaNYtaDaaaNtggggacttaBggcHgcgtNtaaMcctggt
+VtaKcgNacNtatVaSWctWtgaWcggNaBagctctgaYataMgaagatBSttctatact
+tgtgtKtaattttRagtDtacatatatatgatNHVgBMtKtaKaNttDHaagatactHac
+cHtcatttaaagttVaMcNgHatatKtaNtgYMccttatcaaNagctggacStttcNtgg
+caVtattactHaSttatgNMVattMMDtMactattattgWMSgtHBttStStgatatRaD
+aagattttctatMtaaaaaggtactaaVttaSacNaatactgMttgacHaHRttgMacaa
+aatagttaatatWKRgacDgaRtatatttattatcYttaWtgtBRtWatgHaaattHata
+agtVaDtWaVaWtgStcgtMSgaSRgMKtaaataVacataatgtaSaatttagtcgaaHt
+aKaatgcacatcggRaggSKctDcagtcSttcccStYtccRtctctYtcaaKcgagtaMt
+tttcRaYDttgttatctaatcataNctctgctatcaMatactataggDaHaaSttMtaDt
+cNatataattctMcStaaBYtaNagatgtaatHagagSttgWHVcttatKaYgDctcttg
+gtgttMcRaVgSgggtagacaataaDtaattSaDaNaHaBctattgNtaccaaRgaVtKN
+taaYggHtaKKgHcatctWtctDtttctttggSDtNtaStagttataaacaattgcaBaB
+WggHgcaaaBtYgctaatgaaatWcDcttHtcMtWWattBHatcatcaaatctKMagtDN
+atttWaBtHaaaNgMttaaStagttctctaatDtcRVaYttgttMtRtgtcaSaaYVgSW
+DRtaatagctcagDgcWWaaaBaaRaBctgVgggNgDWStNaNBKcBctaaKtttDcttB
+aaggBttgaccatgaaaNgttttttttatctatgttataccaaDRaaSagtaVtDtcaWa
+tBtacattaWacttaSgtattggDgKaaatScaattacgWcagKHaaccaYcRcaRttaD
+ttRtttHgaHVggcttBaRgtccctDatKaVtKtcRgYtaKttacgtatBtStaagcaat
+taagaRgBagSaattccSWYtttattVaataNctgHgttaaNBgcVYgtRtcccagWNaa
+aacaDNaBcaaaaRVtcWMgBagMtttattacgDacttBtactatcattggaaatVccgg
+ttRttcatagttVYcatYaSHaHcttaaagcNWaHataaaRWtctVtRYtagHtaaaYMa
+taHYtNBctNtKaatattStgaMcBtRgctaKtgcScSttDgYatcVtggaaKtaagatW
+ccHccgKYctaNNctacaWcttttgcRtgtVcgaKttcMRHgctaHtVaataaDtatgKD
+cttatBtDttggNtacttttMtgaacRattaaNagaactcaaaBBVtcDtcgaStaDctg
+aaaSgttMaDtcgttcaccaaaaggWtcKcgSMtcDtatgtttStaaBtatagDcatYat
+WtaaaBacaKgcaDatgRggaaYctaRtccagattDaWtttggacBaVcHtHtaacDacY
+gtaatataMagaatgHMatcttatacgtatttttatattacHactgttataMgStYaatt
+YaccaattgagtcaaattaYtgtatcatgMcaDcgggtcttDtKgcatgWRtataatatR
+acacNRBttcHtBgcRttgtgcgtcatacMtttBctatctBaatcattMttMYgattaaV
+YatgDaatVagtattDacaacDMatcMtHcccataagatgBggaccattVWtRtSacatg
+ctcaaggggYtttDtaaNgNtaaBatggaatgtctRtaBgBtcNYatatNRtagaacMga
+gSaSDDSaDcctRagtVWSHtVSRggaacaBVaccgtttaStagaacaMtactccagttt
+VctaaRaaHttNcttagcaatttattaatRtaaaatctaacDaBttggSagagctacHta
+aRWgattcaaBtctRtSHaNtgtacattVcaHaNaagtataccacaWtaRtaaVKgMYaW
+gttaKggKMtKcgWatcaDatYtKSttgtacgaccNctSaattcDcatcttcaaaDKtta
+cHtggttHggRRaRcaWacaMtBWVHSHgaaMcKattgtaRWttScNattBBatYtaNRg
+cggaagacHSaattRtttcYgaccBRccMacccKgatgaacttcgDgHcaaaaaRtatat
+DtatYVtttttHgSHaSaatagctNYtaHYaVYttattNtttgaaaYtaKttWtctaNtg
+agaaaNctNDctaaHgttagDcRttatagccBaacgcaRBtRctRtggtaMYYttWtgat
+aatcgaataattattataVaaaaattacNRVYcaaMacNatRttcKatMctgaagactaa
+ttataaYgcKcaSYaatMNctcaacgtgatttttBacNtgatDccaattattKWWcattt
+tatatatgatBcDtaaaagttgaaVtaHtaHHtBtataRBgtgDtaataMttRtDgDctt
+attNtggtctatctaaBcatctaRatgNacWtaatgaagtcMNaacNgHttatactaWgc
+NtaStaRgttaaHacccgaYStacaaaatWggaYaWgaattattcMaactcBKaaaRVNc
+aNRDcYcgaBctKaacaaaaaSgctccYBBHYaVagaatagaaaacagYtctVccaMtcg
+tttVatcaatttDRtgWctagtacRttMctgtDctttcKtWttttataaatgVttgBKtg
+tKWDaWagMtaaagaaattDVtaggttacatcatttatgtcgMHaVcttaBtVRtcgtaY
+gBRHatttHgaBcKaYWaatcNSctagtaaaaatttacaatcactSWacgtaatgKttWa
+ttagttttNaggtctcaagtcactattcttctaagKggaataMgtttcataagataaaaa
+tagattatDgcBVHWgaBKttDgcatRHaagcaYcRaattattatgtMatatattgHDtc
+aDtcaaaHctStattaatHaccgacNattgatatattttgtgtDtRatagSacaMtcRtc
+attcccgacacSattgttKaWattNHcaacttccgtttSRtgtctgDcgctcaaMagVtB
+ctBMcMcWtgtaacgactctcttRggRKSttgYtYatDccagttDgaKccacgVatWcat
+aVaaagaataMgtgataaKYaaatcHDaacgataYctRtcYatcgcaMgtNttaBttttg
+atttaRtStgcaacaaaataccVgaaDgtVgDcStctatatttattaaaaRKDatagaaa
+gaKaaYYcaYSgKStctccSttacagtcNactttDVttagaaagMHttRaNcSaRaMgBt
+tattggtttaRMggatggcKDgWRtNaataataWKKacttcKWaaagNaBttaBatMHtc
+cattaacttccccYtcBcYRtagattaagctaaYBDttaNtgaaaccHcaRMtKtaaHMc
+NBttaNaNcVcgVttWNtDaBatgataaVtcWKcttRggWatcattgaRagHgaattNta
+tttctctattaattaatgaDaaMatacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBV
+agcMacgtgttaaBRNtatRtcagtaagaggtttaagacaVaaggttaWatctccgtVta
+DtcDatttccVatgtacNtttccgtHttatKgScBatgtVgHtYcWagcaKtaMYaaHgt
+aattaSaHcgcagtWNaatNccNNYcacgVaagaRacttctcattcccRtgtgtaattag
+cSttaaStWaMtctNNcSMacattataaactaDgtatWgtagtttaagaaaattgtagtN
+agtcaataaatttgatMMYactaatatcggBWDtVcYttcDHtVttatacYaRgaMaaca
+StaatcRttttVtagaDtcacWatttWtgaaaagaaagNRacDtttStVatBaDNtaact
+atatcBSMcccaSttccggaMatgattaaWatKMaBaBatttgataNctgttKtVaagtc
+agScgaaaDggaWgtgttttKtWtatttHaatgtagttcactaaKMagttSYBtKtaYga
+actcagagRtatagtVtatcaaaWYagcgNtaDagtacNSaaYDgatBgtcgataacYDt
+aaactacagWDcYKaagtttattagcatcgagttKcatDaattgattatDtcagRtWSKt
+cgNtMaaaaacaMttKcaWcaaSVMaaaccagMVtaMaDtMaHaBgaacataBBVtaatV
+YaNSWcSgNtDNaaKacacBtttatKtgtttcaaHaMctcagtaacgtcgYtactDcgcc
+taNgagagcYgatattttaaatttccattttacatttDaaRctattttWctttacgtDat
+YtttcagacgcaaVttagtaaKaaaRtgVtccataBggacttatttgtttaWNtgttVWt
+aWNVDaattgtatttBaagcBtaaBttaaVatcHcaVgacattccNggtcgacKttaaaR
+tagRtctWagaYggtgMtataatMtgaaRttattttgWcttNtDRRgMDKacagaaaagg
+aaaRStcccagtYccVattaNaaKStNWtgacaVtagaagcttSaaDtcacaacgDYacW
+DYtgtttKatcVtgcMaDaSKStVcgtagaaWaKaagtttcHaHgMgMtctataagBtKa
+aaKKcactggagRRttaagaBaaNatVVcgRcKSttDaactagtSttSattgttgaaRYa
+tggttVttaataaHttccaagDtgatNWtaagHtgcYtaactRgcaatgMgtgtRaatRa
+NaacHKtagactactggaatttcgccataacgMctRgatgttaccctaHgtgWaYcactc
+acYaattcttaBtgacttaaacctgYgaWatgBttcttVttcgttWttMcNYgtaaaatc
+tYgMgaaattacNgaHgaacDVVMtttggtHtctaaRgtacagacgHtVtaBMNBgatta
+gcttaRcttacaHcRctgttcaaDBggttKaacatgKtttYataVaNattccgMcgcgta
+gtRaVVaattaKaatggttRgaMcagtatcWBttNtHagctaatctagaaNaaacaYBct
+atcgcVctBtgcaaagDgttVtgaHtactSNYtaaNccatgtgDacgaVtDcgKaRtacD
+cttgctaagggcagMDagggtBWRtttSgccttttttaacgtcHctaVtVDtagatcaNM
+aVtcVacatHctDWNaataRgcgtaVHaggtaaaaSgtttMtattDgBtctgatSgtRag
+agYtctSaKWaataMgattRKtaacatttYcgtaacacattRWtBtcggtaaatMtaaac
+BatttctKagtcDtttgcBtKYYBaKttctVttgttaDtgattttcttccacttgSaaac
+ggaaaNDaattcYNNaWcgaaYattttMgcBtcatRtgtaaagatgaWtgaccaYBHgaa
+tagataVVtHtttVgYBtMctaMtcctgaDcYttgtccaaaRNtacagcMctKaaaggat
+ttacatgtttaaWSaYaKttBtagDacactagctMtttNaKtctttcNcSattNacttgg
+aacaatDagtattRtgSHaataatgccVgacccgatactatccctgtRctttgagaSgat
+catatcgDcagWaaHSgctYYWtatHttggttctttatVattatcgactaagtgtagcat
+VgtgHMtttgtttcgttaKattcMatttgtttWcaaStNatgtHcaaaDtaagBaKBtRg
+aBgDtSagtatMtaacYaatYtVcKatgtgcaacVaaaatactKcRgtaYtgtNgBBNcK
+tcttaccttKgaRaYcaNKtactttgagSBtgtRagaNgcaaaNcacagtVtttHWatgt
+taNatBgtttaatNgVtctgaatatcaRtattcttttttttRaaKcRStctcggDgKaga
+ttaMaaaKtcaHacttaataataKtaRgDtKVBttttcgtKaggHHcatgttagHggttN
+ctcgtatKKagVagRaaaggaaBtNatttVKcRttaHctaHtcaaatgtaggHccaBata
+NaNaggttgcWaatctgatYcaaaHaatWtaVgaaBttagtaagaKKtaaaKtRHatMaD
+BtBctagcatWtatttgWttVaaaScMNattRactttgtYtttaaaagtaagtMtaMaSt
+tMBtatgaBtttaKtgaatgagYgtNNacMtcNRacMMHcttWtgtRtctttaacaacat
+tattcYaMagBaacYttMatcttKcRMtgMNccattaRttNatHaHNaSaaHMacacaVa
+atacaKaSttHatattMtVatWgattttttaYctttKttHgScWaacgHtttcaVaaMga
+acagNatcgttaacaaaaagtacaHBNaattgttKtcttVttaaBtctgctacgBgcWtt
+tcaggacacatMgacatcccagcggMgaVKaBattgacttaatgacacacaaaaaatRKa
+aBctacgtRaDcgtagcVBaacDSBHaaaaSacatatacagacRNatcttNaaVtaaaat
+aHattagtaaaaSWccgtatWatggDttaactattgcccatcttHaSgYataBttBaact
+attBtcHtgatcaataSttaBtatKSHYttWggtcYtttBttaataccRgVatStaHaKa
+gaatNtagRMNgtcttYaaSaactcagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttt
+tgactatacataatcNtatNaHattVagacgYgatatatttttgtStWaaatctWaMgag
+aRttRatacgStgattcttaagaDtaWccaaatRcagcagaaNKagtaaDggcgccBtYt
+agSBMtactaaataMataBSacRMgDgattMMgtcHtcaYDtRaDaacggttDaggcMtt
+tatgttaNctaattaVacgaaMMtaatDccSgtattgaRtWWaccaccgagtactMcgVN
+gctDctaMScatagcgtcaactatacRacgHRttgctatttaatgaattataYKttgtaa
+gWgtYttgcHgMtaMattWaWVtaRgcttgYgttBHtYataSccStBtgtagMgtDtggc
+VaaSBaatagDttgBgtctttctcattttaNagtHKtaMWcYactVcgcgtatMVtttRa
+cVagDaatcttgctBBcRDgcaacKttgatSKtYtagBMagaRtcgBattHcBWcaactg
+atttaatttWDccatttatcgagSKaWttataHactaHMttaatHtggaHtHagaatgtK
+taaRactgtttMatacgatcaagDgatKaDctataMggtHDtggHacctttRtatcttYa
+ttttgacttgaaSaataaatYcgBaaaaccgNatVBttMacHaKaataagtatKgtcaag
+actcttaHttcggaattgttDtctaaccHttttWaaatgaaatataaaWattccYDtKta
+aaacggtgaggWVtctattagtgactattaagtMgtttaagcatttgSgaaatatccHaa
+ggMaaaattttcWtatKctagDtYtMcctagagHcactttactatacaaacattaactta
+HatcVMYattYgVgtMttaaRtgaaataaDatcaHgtHHatKcDYaatcttMtNcgatYa
+tgSaMaNtcttKcWataScKggtatcttacgcttWaaagNatgMgHtctttNtaacVtgt
+tcMaaRatccggggactcMtttaYMtcWRgNctgNccKatcttgYDcMgattNYaRagat
+HaaHgKctcataRDttacatBatccattgDWttatttaWgtcggagaaaaatacaatacS
+NtgggtttccttacSMaagBattacaMaNcactMttatgaRBacYcYtcaaaWtagctSa
+acttWgDMHgaggatgBVgcHaDtggaactttggtcNatNgtaKaBcccaNtaagttBaa
+cagtatacDYttcctNgWgcgSMcacatStctHatgRcNcgtacacaatRttMggaNKKg
+gataaaSaYcMVcMgtaMaHtgattYMatYcggtcttcctHtcDccgtgRatcattgcgc
+cgatatMaaYaataaYSggatagcgcBtNtaaaScaKgttBgagVagttaKagagtatVa
+actaSacWactSaKatWccaKaaaatBKgaaKtDMattttgtaaatcRctMatcaaMagM
+ttDgVatggMaaWgttcgaWatgaaatttgRtYtattaWHKcRgctacatKttctaccaa
+HttRatctaYattaaWatVNccatNgagtcKttKataStRaatatattcctRWatDctVa
+gttYDgSBaatYgttttgtVaatttaatagcagMatRaacttBctattgtMagagattaa
+actaMatVtHtaaatctRgaaaaaaaatttWacaacaYccYDSaattMatgaccKtaBKW
+BattgtcaagcHKaagttMMtaatttcKcMagNaaKagattggMagaggtaatttYacat
+cWaaDgatMgKHacMacgcVaacaDtaDatatYggttBcgtatgWgaSatttgtagaHYR
+VacaRtctHaaRtatgaactaatatctSSBgggaaHMWtcaagatKgagtDaSatagttg
+attVRatNtctMtcSaagaSHaataNataataRaaRgattctttaataaagWaRHcYgca
+tgtWRcttgaaggaMcaataBRaaccagStaaacNtttcaatataYtaatatgHaDgcSt
+cWttaacctaRgtYaRtataKtgMttttatgactaaaatttacYatcccRWtttHRtatt
+aaatgtttatatttgttYaatMcaRcSVaaDatcgtaYMcatgtagacatgaaattgRtc
+aaYaaYtRBatKacttataccaNaaattVaBtctggacaagKaaYaaatatWtMtatcYa
+aVNtcgHaactBaagKcHgtctacaatWtaDtSgtaHcataHtactgataNctRgttMtD
+cDttatHtcgtacatcccaggSttaBgtcacacWtccNMcNatMVaVgtccDYStatMac
+cDatggYaRKaaagataRatttHKtSaaatDgataaacttaHgttgVBtcttVttHgDac
+gaKatgtatatNYataactctSatatatattgcHRRYttStggaactHgttttYtttaWt
+atMcttttctatctDtagVHYgMRBgtHttcctaatYRttKtaagatggaVRataKDcta
+MtKBNtMtHNtWtttYcVtattMcgRaacMcctNSctcatttaaagDcaHtYccSgatgc
+aatYaaaaDcttcgtaWtaattctcgttttScttggtaatctttYgtctaactKataHac
+ctMctcttacHtKataacacagcNRatgKatttttSaaatRYcgDttaMRcgaaattact
+MtgcgtaagcgttatBtttttaattaagtNacatHgttcRgacKcBBtVgatKttcgaBa
+atactDRgtRtgaNacWtcacYttaaKcgttctHaKttaNaMgWgWaggtctRgaKgWtt
+SttBtDcNtgtttacaaatYcDRtgVtgcctattcNtctaaaDMNttttNtggctgagaV
+ctDaacVtWccaagtaacacaNctgaScattccDHcVBatcgatgtMtaatBgHaatDct
+MYgagaatgYWKcctaatNaStHaaaKccgHgcgtYaaYtattgtStgtgcaaRtattaK
+atattagaWVtcaMtBagttattagNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaa
+aHVtMKacatcgNaatttMatatgttgttactagWYtaRacgataKagYNKcattataNa
+RtgaacKaYgcaaYYacaNccHatMatDcNgtHttRaWttagaaDcaaaaaatagggtKD
+tStaDaRtaVtHWKNtgtattVctSVgRgataDaRaWataBgaagaaKtaataaYgDcaS
+taNgtaDaaggtattHaRaWMYaYaWtggttHYgagVtgtgcttttcaaDKcagVcgtta
+gacNaaWtagtaataDttctggttVcatcataaagtgKaaaNaMtaBBaattaatWaatt
+gctHaVKaSgDaaVKaHtatatatHatcatSBagNgHtatcHYMHgttDgtaHtBttWat
+cgtttaRaattgStKgSKNWKatcagDtctcagatttctRtYtBatBgHHtKaWtgYBga
+cVVWaKtacKcDttKMaKaVcggtgttataagaataaHaatattagtataatMHgttYga
+RttagtaRtcaaVatacggtcMcgagtaaRttacWgactKRYataaaagSattYaWgaga
+tYagKagatgSaagKgttaatMggtataatgttWYttatgagaaacctNVataatHcccK
+tDctcctaatactggctHggaSaggRtKHaWaattcgSatMatttagaggcYtctaMcgc
+tcataSatatgRagacNaaDaggaVBagaYttKtacNaKgtSYtagttggaWcatcWtta
+atctatgaVtcgtgtMtatcaYcgtRccaaYgDctgcMgtgtWgacWtgataacacgcgc
+tBtgttaKtYDtatDcatcagKaVMctaatcttgVcaaRgcRMtDcgattaHttcaNatg
+aatMtactacVgtRgatggaWtttactaaKatgagSaaKggtaNtactVaYtaaKRagaa
+cccacaMtaaMtKtatBcttgtaaWBtMctaataaVcDaaYtcRHBtcgttNtaaHattt
+BNgRStVDattBatVtaagttaYatVattaagaBcacggtSgtVtatttaRattgatgta
+HDKgcaatattKtggcctatgaWDKRYcggattgRctatNgatacaatMNttctgtcRBY
+RaaaHctNYattcHtaWcaattctBtMKtVgYataatMgYtcagcttMDataVtggRtKt
+gaatgccNcRttcaMtRgattaacattRcagcctHtWMtgtDRagaKaBtgDttYaaaaK
+atKgatctVaaYaacWcgcatagBVtaNtRtYRaggBaaBtgKgttacataagagcatgt
+RattccacttaccatRaaatgWgDaMHaYVgVtaSctatcgKaatatattaDgacccYag
+tgtaYNaaatKcagtBRgagtccatgKgaaaccBgaagBtgSttWtacgatWHaYatcga
+tttRaaNRgcaNaKVacaNtDgattgHVaatcDaagcgtatgcNttaDataatcSataaK
+caataaHWataBtttatBtcaKtKtatagttaDgSaYctacaRatNtaWctSaatatttY
+aKaKtaccWtatcRagacttaYttVcKgSDcgagaagatccHtaattctSttatggtKYg
+tMaHagVaBRatttctgtRgtctatgggtaHKgtHacHtSYacgtacacHatacKaaBaV
+accaDtatcSaataaHaagagaatScagactataaRttagcaaVcaHataKgDacatWcc
+ccaagcaBgagWatctaYttgaaatctVNcYtttWagHcgcgcDcVaaatgttKcHtNtc
+aatagtgtNRaactttttcaatggWgBcgDtgVgtttctacMtaaataaaRggaaacWaH
+ttaRtNtgctaaRRtVBctYtVtatDcattDtgaccYatagatYRKatNYKttNgcctag
+taWtgaactaMVaacctgaStttctgaKVtaaVaRKDttVtVctaDNtataaaDtcccca
+agtWtcgatcactDgYaBcatcctMtVtacDaaBtYtMaKNatNtcaNacgDatYcatcg
+caRatWBgaacWttKttagYtaattcggttgSWttttDWctttacYtatatWtcatDtMg
+tBttgRtVDggttaacYtacgtacatgaattgaaWcttMStaDgtatattgaDtcRBcat
+tSgaaVBRgagccaaKtttcDgcgaSMtatgWattaKttWtgDBMaggBBttBaatWttR
+tgcNtHcgttttHtKtcWtagHStaacagttgatatBtaWSaWggtaataaMttaKacDa
+atactcBttcaatatHttcBaaSaaatYggtaRtatNtHcaatcaHtagVtgtattataN
+ggaMtcttHtNagctaaaggtagaYctMattNaMVNtcKtactBKcaHHcBttaSagaKa
+cataYgctaKaYgttYcgacWVttWtSagcaacatcccHaccKtcttaacgaKttcacKt
+NtacHtatatRtaaatacactaBtttgaHaRttggttWtatYagcatYDatcggagagcW
+BataagRtacctataRKgtBgatgaDatataSttagBaHtaatNtaDWcWtgtaattaca
+gKttcNtMagtattaNgtctcgtcctcttBaHaKcKccgtRcaaYagSattaagtKataD
+atatatagtcDtaacaWHcaKttDgaaRcgtgYttgtcatatNtatttttatggccHtgD
+tYHtWgttatYaacaattcaWtatNgctcaaaSttRgctaatcaaatNatcgtttaBtNN
+VtgttataagcaaagattBacgtDatttNatttaaaDcBgtaSKgacgtagataatttcH
+MVNttgttBtDtgtaWKaaRMcKMtHtaVtagataWctccNNaSWtVaHatctcMgggDg
+tNHtDaDttatatVWttgttatttaacctttcacaaggaSaDcggttttttatatVtctg
+VtaacaStDVaKactaMtttaSNagtgaaattaNacttSKctattcctctaSagKcaVtt
+aagNaVcttaVaaRNaHaaHttatgtHttgtgatMccaggtaDcgaccgtWgtWMtttaH
+cRtattgScctatttKtaaccaagtYagaHgtWcHaatgccKNRtttagtMYSgaDatct
+gtgaWDtccMNcgHgcaaacNDaaaRaStDWtcaaaaHKtaNBctagBtgtattaactaa
+ttttVctagaatggcWSatMacccttHttaSgSgtgMRcatRVKtatctgaaaccDNatY
+gaaVHNgatMgHRtacttaaaRtatStRtDtatDttYatattHggaBcttHgcgattgaK
+cKtttcRataMtcgaVttWacatNcatacctRataDDatVaWNcggttgaHtgtMacVtt
+taBHtgagVttMaataattatgttcttagtttgtgcDtSatttgBtcaacHattaaBagV
+WcgcaSYttMgcttacYKtVtatcaYaKctgBatgcgggcYcaaaaacgNtctagKBtat
+tatctttKtaVttatagtaYtRagNtaYataaVtgaatatcHgcaaRataHtacacatgt
+aNtgtcgYatWMatttgaactacRctaWtWtatacaatctBatatgYtaagtatgtgtat
+SttactVatcttYtaBcKgRaSggRaaaaatgcagtaaaWgtaRgcgataatcBaatacc
+gtatttttccatcNHtatWYgatHSaaaDHttgctgtccHtggggcctaataatttttct
+atattYWtcattBtgBRcVttaVMRSgctaatMagtYtttaaaaatBRtcBttcaaVtaa
+cagctccSaaSttKNtHtKYcagcagaaaccccRtttttaaDcDtaStatccaagcgctH
+tatcttaDRYgatDHtWcaaaBcWgKWHttHataagHacgMNKttMKHccaYcatMVaac
+gttaKgYcaVaaBtacgcaactttMctaaHaatgtBatgagaSatgtatgSRgHgWaVWg
+ataaatatttccKagVgataattWaHNcYggaaatgctHtKtaDtctaaagtMaatVDVa
+ctWtSaaWaaMtaHtaSKtcBRaNcttStggtBttacNagcatagRgtKtgcgaacaacB
+cgKaatgataagatgaaaattgtactgcgggtccHHWHaaNacaBttNKtKtcaaBatat
+gctaHNgtKcDWgtttatNgVDHgaccaacWctKaaggHttgaRgYaatHcaBacaatga
+gcaaattactgtaVaaYaDtagattgagNKggtggtgKtWKaatacagDRtatRaMRtga
+ttDggtcaaYRtatttNtagaDtcacaaSDctDtataatcgtactaHttatacaatYaac
+aaHttHatHtgcgatRRttNgcatSVtacWWgaaggagtatVMaVaaattScDDKNcaYB
+YaDatHgtctatBagcaacaagaatgagaaRcataaKNaRtBDatcaaacgcatttttta
+aBtcSgtacaRggatgtMNaattggatatWtgagtattaaaVctgcaYMtatgatttttY
+gaHtgtcttaagWBttHttgtcttattDtcgtatWtataataSgctaHagcDVcNtaatc
+aagtaBDaWaDgtttagYctaNccDtaKtaHcttaataacccaRKtacaVaatNgcWRaM
+gaattatgaBaaagattVYaHMDcaDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYg
+aatacaWVacVcRtatMacaBtactggMataaattttHggNagSctacHgtBagcgtcgt
+gattNtttgatSaaggMttctttcttNtYNagBtaaacaaatttMgaccttacataattg
+YtcgacBtVMctgStgMDtagtaRctHtatgttcatatVRNWataDKatWcgaaaaagtt
+aaaagcacgHNacgtaatctttMRtgacttttDacctataaacgaaatatgattagaact
+ccSYtaBctttaataacWgaaaYatagatgWttcatKtNgatttttcaagHtaYgaaRaD
+aagtaggagcttatVtagtctttcattaaaatcgKtattaRttacagVaDatgcatVgat
+tgggtctttHVtagKaaRBtaHtaaggccccaaaaKatggtttaMWgtBtaaacttcact
+ttKHtcgatctccctaYaBacMgtcttBaBaNgcgaaacaatctagtHccHtKttcRtRV
+ttccVctttcatacYagMVtMcagaMaaacaataBctgYtaatRaaagattaaccatVRa
+tHtaRagcgcaBcgDttStttttcVtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgc
+gatatgtagtSaaaDttatacaaacatYaRRcVRHctKtcgacKttaaVctaDaatgttM
+ggRcWaacttttHaDaKaDaBctgtaggcgtttaHBccatccattcNHtDaYtaataMtt
+acggctNVaacDattgatattttacVttSaattacaaRtataNDgacVtgaacataVRtt
+ttaDtcaaacataYDBtttaatBaDtttYDaDaMccMttNBttatatgagaaMgaNtatt
+HccNataattcaHagtgaaggDgatgtatatatgYatgaStcataaBStWacgtcccata
+RMaaDattggttaaattcMKtctMacaBSactcggaatDDgatDgcWctaacaccgggaV
+cacWKVacggtaNatatacctMtatgatagtgcaKagggVaDtgtaacttggagtcKata
+tcgMcttRaMagcattaBRaStctYSggaHYtacaactMBaagDcaBDRaaacMYacaHa
+attagcattaaaHgcgctaaggSccKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctS
+gMctacgttaacWaaattctSgtDactaaStaaattgcagBBRVctaatatacctNttMc
+RggctttMttagacRaHcaBaacVKgaataHttttMgYgattcYaNRgttMgcVaaacaV
+VcDHaatttgKtMYgtatBtVVctWgVtatHtacaaHttcacgatagcagtaaNattBat
+atatttcVgaDagcggttMaagtcScHagaaatgcYNggcgtttttMtStggtRatctac
+ttaaatVVtBacttHNttttaRcaaatcacagHgagagtMgatcSWaNRacagDtatact
+aaDKaSRtgattctccatSaaRttaaYctacacNtaRtaactggatgaccYtacacttta
+attaattgattYgttcagDtNKttagDttaaaaaaaBtttaaNaYWKMBaaaacVcBMta
+tWtgBatatgaacVtattMtYatMNYDKNcKgDttDaVtaaaatgggatttctgtaaatW
+tctcWgtVVagtcgRgacttcccctaDcacagcRcagagtgtWSatgtacatgttaaStt
+gtaaHcgatgggMagtgaacttatRtttaVcaccaWaMgtactaatSSaHtcMgaaYtat
+cgaaggYgggcgtgaNDtgttMNgaNDMtaattcgVttttaacatgVatgtWVMatatca
+KgaaattcaBcctccWcttgaaWHtWgHtcgNWgaRgctcBgSgaattgcaaHtgattgt
+gNagtDttHHgBttaaWcaaWagcaSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMta
+gSagcttHSattaacaaagtRacMtRtctgttagcMtcaBatVKtKtKacgagaSNatSa
+ctgtatatcBctgagVtYactgtaaattaaaggcYgDHgtaacatSRDatMMccHatKgt
+taacgactKtgKagtcttcaaHRVtccttKgtSataatttacaactggatDNgaacttca
+RtVaagDcaWatcBctctHYatHaDaaatttagYatSatccaWtttagaaatVaacBatH
+catcgtacaatatcgcNYRcaataYaRaYtgattVttgaatgaVaactcRcaNStgtgta
+ttMtgaggtNttBaDRcgaaaagctNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaa
+HctaaagYactgMtatBDtcStgaccgtSDattYaataHctgggaYYttcggttaWaatc
+tggtRagWMaDagtaacBccactacgHWMKaatgatWatcctgHcaBaSctVtcMtgtDt
+tacctaVgatYcWaDRaaaaRtagatcgaMagtggaRaWctctgMgcWttaagKBRtaaD
+aaWtctgtaagYMttactaHtaatcttcataacggcacBtSgcgttNHtgtHccatgttt
+taaagtatcgaKtMttVcataYBBaKtaMVaVgtattNDSataHcagtWMtaggtaSaaK
+gttgBtVtttgttatcatKcgHacacRtctHatNVagSBgatgHtgaRaSgttRcctaac
+aaattDNttgacctaaYtBgaaaatagttattactcttttgatgtNNtVtgtatMgtctt
+RttcatttgatgacacttcHSaaaccaWWDtWagtaRDDVNacVaRatgttBccttaatH
+tgtaaacStcVNtcacaSRttcYagacagaMMttttgMcNttBcgWBtactgVtaRttct
+ccaaYHBtaaagaBattaYacgatttacatctgtaaMKaRYtttttactaaVatWgctBt
+ttDVttctggcDaHaggDaagtcgaWcaagtagtWttHtgKtVataStccaMcWcaagat
+aagatcactctHatgtcYgaKcatcagatactaagNSStHcctRRNtattgtccttagtt
+agMVgtatagactaactctVcaatMctgtttgtgttgccttatWgtaBVtttctggMcaa
+KgDWtcgtaaYStgSactatttHgatctgKagtagBtVacRaagRtMctatgggcaaaKa
+aaatacttcHctaRtgtDcttDattaggaaatttcYHaRaaBttaatggcacKtgctHVc
+aDcaaaVDaaaVcgMttgtNagcgtaDWgtcgttaatDgKgagcSatatcSHtagtagtt
+ggtgtHaWtaHKtatagctgtVgattaBVaatgaataagtaatVatSttaHctttKtttg
+tagttaccttaatcgtagtcctgBcgactatttVcMacHaaaggaatgDatggKtaHtgS
+tatattaaSagctWcctccRtataBaDYcgttgcNaagaggatRaaaYtaWgNtSMcaat
+ttactaacatttaaWttHtatBattgtcgacaatNgattgcNgtMaaaKaBDattHactt
+ggtRtttaYaacgVactBtaBaKtgBttatgVttgtVttcaatcWcNctDBaaBgaDHac
+BttattNtgtDtatttVSaaacaggatgcRatSgtaSaNtgBatagttcHBgcBBaaatt
+aHgtDattatDaKaatBaaYaaMaataaataKtttYtagtBgMatNcatgtttgaNagtg
+ttgtgKaNaSagtttgaSMaYBcaaaacDStagttVacaaaaactaaWttBaagtctgtg
+cgtMgtaattctcctacctcaNtttaaccaaaaVtBcacataacaccccBcWMtatVtgg
+aatgaWtcaaWaaaaaaaaWtDtaatatRcctDWtcctaccMtVVatKttaWaaKaaata
+taaagScHBagaggBaSMtaWaVtatattactSaaaKNaactatNatccttgaYctattc
+aaaVgatttYHcRagattttaSataggttattcVtaaagaKgtattattKtRttNcggcR
+gtgtgtWYtaacHgKatKgatYtacYagDtWcHBDctctgRaYKaYagcactKcacSaRt
+BttttBHKcMtNtcBatttatttttgSatVgaaagaWtcDtagDatatgMacaacRgata
+tatgtttgtKtNRaatatNatgYcaHtgHataacKtgagtagtaacYttaNccaaatHca
+caacaVDtagtaYtccagcattNtacKtBtactaaagaBatVtKaaHBctgStgtBgtat
+gaSNtgDataaccctgtagcaBgtgatcttaDataStgaMaccaSBBgWagtacKcgatt
+gaDgNNaaaacacagtSatBacKDgcgtataBKcatacactaSaatYtYcDaactHttca
+tRtttaatcaattataRtttgtaagMcgNttcatcBtYBagtNWNMtSHcattcRctttt
+tRWgaKacKttgggagBcgttcgcMaWHtaatactgtctctatttataVgtttaBScttt
+taBMaNaatMacactYtBMggtHacMagtaRtctgcatttaHtcaaaatttgagKtgNta
+ctBacaHtcgtatttctMaSRagcagttaatgtNtaaattgagagWcKtaNttagVtacg
+atttgaatttcgRtgtWcVatcgttaaDVctgtttBWgaccagaaagtcSgtVtatagaB
+ccttttcctaaattgHtatcggRattttcaaggcYSKaagWaWtRactaaaacccBatMt
+ttBaatYtaagaactSttcgaaScaatagtattgaccaagtgttttctaacatgtttNVa
+atcaaagagaaaNattaaRttttaVaaaccgcaggNMtatattVctcaagaggaacgBgt
+ttaacaagttcKcYaatatactaaccBaaaSggttcNtattctagttRtBacgScVctca
+atttaatYtaaaaaaatgSaatgatagaMBRatgRcMcgttgaWHtcaVYgaatYtaatc
+tttYttatRaWtctgBtDcgatNatcKaBaDgatgtaNatWKctccgatattaacattNa
+aacDatgBgttctgtDtaaaMggtgaBaSHataacgccSctaBtttaRBtcNHcDatcDc
+ctagagtcRtaBgWttDRVHagattYatgtatcWtaHtttYcattWtaaagtctNgtStg
+gRNcgcggagSSaaagaaaatYcHDtcgctttaatgYcKBVSgtattRaYBaDaaatBgt
+atgaHtaaRaRgcaSWNtagatHaacttNctBtcaccatctMcatattccaSatttgcga
+DagDgtatYtaaaVDtaagtttWVaagtagYatRttaagDcNgacKBcScagHtattatc
+DaDactaaaaaYgHttBcgaDttggataaaKSRcBMaBcgaBSttcWtgNBatRaccgat
+tcatttataacggHVtaattcacaagagVttaaRaatVVRKcgWtVgacctgDgYaaHaW
+tctttcacMagggatVgactagMaaataKaaNWagKatagNaaWtaaaatttgaatttta
+tttgctaaVgaHatBatcaaBWcBgttcMatcgBaaNgttcgSNaggSaRtttgHtRtat
+taNttcDcatSaVttttcgaaaaattgHatctaRaggSaNatMDaaatDcacgattttag
+aHgHaWtYgattaatHNSttatMSgggNtcKtYatRggtttgtMWVtttaYtagcagBag
+HaYagttatatggtBacYcattaRSataBatMtttaaatctHcaaaSaaaagttNSaaWc
+WRccRtKaagtBWtcaaattSttMtattggaaaccttaacgttBtWatttatatWcDaat
+agattcctScacctaagggRaaYtaNaatgVtBcttaaBaacaMVaaattatStYgRcct
+gtactatcMcVKatttcgSgatRHMaaaHtagtaaHtVgcaaataatatcgKKtgccaat
+BNgaaWcVttgagttaKatagttcaggKDatDtattgaKaVcaKtaataDataataHSaH
+cattagttaatRVYcNaHtaRcaaggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDt
+tgcWYtataRgaatatgtYtgcKtaNttWacatYHctRaDtYtattcBttttatcSataY
+aYgttWaRagcacHMgtttHtYttYaatcggtatStttcgtRSattaaDaKMaatatact
+aNBaWgctacacYtgaYVgtgHtaaaRaaRgHtagtWattataaaSDaaWtgMattatcg
+aaaagtaYRSaWtSgNtBgagcRYaMDtactaacttaWgtatctagacaagNtattHgga
+taatYttYatcataDcgHgttBttctttVttgccgaaWtaaaacgKgtatctaaaaaNtc
+cDtaDatBMaMggaatNKtatBaaatVtccRaHtaSacataHattgtttKVYattcataV
+aattWtcgtgMttcttKtgtctaacVtatctatatBRataactcgKatStatattcatHH
+RttKtccaacgtgggtgRgtgaMtattattggctatcgtgacMtRcBDtcttgtactaat
+RHttttaagatcgVMDStattatYBtttDttgtBtNttgRcMtYtgBacHaWaBaatDKc
+taagtgaaactaatgRaaKgatccaagNaaaatattaggWNtaagtatacttttKcgtcg
+gSYtcttgRctataYcttatataaagtatattaatttataVaacacaDHatctatttttK
+YVatHRactttaBHccaWagtactBtcacgaVgcgttRtttttttSVgtSagtBaaattc
+tgaHgactcttgMcattttagVtaagaattHctHtcaDaaNtaacRggWatagttcgtSt
+tgaDatcNgNagctagDgatcNttKgttgtaDtctttRaaYStRatDtgMggactSttaD
+tagSaVtBDttgtDgccatcacaMattaaaMtNacaVcgSWcVaaDatcaHaatgaatta
+MtatccVtctBtaattgtWattatBRcWcaatgNNtactWYtDaKttaaatcactcagtR
+aaRgatggtKgcgccaaHgaggatStattYcaNMtcaBttacttatgagDaNtaMgaaWt
+gtttcttctaHtMNgttatctaWWatMtBtaaatagDVatgtBYtatcggcttaagacMR
+taHScgatatYgRDtcattatSDaHggaaataNgaWSRRaaaBaatagBattaDctttgH
+WNttacaataaaaaaatacggtttgHgVtaHtWMttNtBtctagtMcgKMgHgYtataHa
+NagWtcaacYattaataYRgtaWKgaBctataaccgatttaHaNBRaRaMtccggtNgac
+MtctcatttgcaattcWgMacttacaaDaaNtactWatVtttagccttMaatcagVaagt
+ctVaaDaBtattaattaYtNaYtggattaKtaKctYaMtattYgatattataatKtVgDc
+ttatatNBtcgttgtStttttMagaggttaHYSttcKgtcKtDNtataagttataagSgt
+tatDtRttattgttttSNggRtcaaKMNatgaatattgtBWtaMacctgggYgaSgaagY
+ataagattacgagaatBtggtRcVHtgYggaDgaYaKagWagctatagacgaaHgtWaNg
+acttHRatVaWacKYtgRVNgVcSgRWctacatcKSactctgWYtBggtataagcttNRt
+tVtgRcaWaaatDMatYattaactttcgaagRatSctgccttgcRKaccHtttSNVagta
+gHagBagttagaccaRtataBccataatSHatRtcHagacBWatagcaMtacaRtgtgaa
+BatctKRtScttccaNaatcNgtaatatWtcaMgactctBtWtaaNactHaaaaRctcgc
+atggctMcaaNtcagaaaaacacagtggggWttRttagtaagaVctVMtcgaatcttcMa
+aaHcaHBttcgattatgtcaDagcYRtBtYcgacMgtDcagcgaNgttaataatagcagK
+YYtcgtaBtYctMaRtaRtDagaaaacacatgYaBttgattattcgaaNttBctSataaM
+ataWRgaHtttccgtDgaYtatggtDgHKgMtatttVtMtVagttaRatMattRagataa
+ccctKctMtSttgaHagtcStctatttccSagatgttccacgaggYNttHRacgattcDa
+tatDcataaaatBBttatcgaHtNHaaatatDNaggctgaNcaaggagttBttMgRagVa
+tBcRtaWgatgBtSgaKtcgHtttgaatcaaDaHttcSBgHcagtVaaSttDcagccgtt
+NBtgttHagYtattctttRWaaVtSttcatatKaaRaaaNacaVtVctMtSDtDtRHRcg
+taatgctcttaaatSacacaatcgHattcaWcttaaaatHaaatcNctWttaNMcMtaKc
+tVtcctaagYgatgatcYaaaRactctaRDaYagtaacgtDgaggaaatctcaaacatca
+ScttcKttNtaccatNtaNatacatttHaaDHgcaDatMWaaBttcRggctMaagctVYc
+acgatcaDttatYtaatcKatWatcaatVYtNagatttgattgaYttttYgacttVtcKa
+RagaaaHVgDtaMatKYagagttNatWttaccNtYtcDWgSatgaRgtMatgKtcgacaa
+gWtacttaagtcgKtgatccttNcttatagMatHVggtagcgHctatagccctYttggta
+attKNaacgaaYatatVctaataMaaaYtgVtcKaYtaataacagaatHcacVagatYWH
+ttagaaSMaatWtYtgtaaagNaaacaVgaWtcacNWgataNttcaSagctMDaRttgNa
+ctaccgataMaaatgtttattDtcaagacgctDHYYatggttcaagccNctccttcMctt
+tagacBtaaWtaWVHggaaaaNatttaDtDtgctaaHHtMtatNtMtagtcatttgcaaa
+RatacagRHtatDNtgtDgaatVgtVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHt
+tttMgMagatDtataaattaaccaactMtacataaattgRataatacgBtKtaataattR
+gtatDagDtcRDacctatRcagagcSHatNtcaScNtttggacNtaaggaccgtgKNttg
+ttNcttgaaRgYgRtNtcagttBcttttcHtKtgcttYaaNgYagtaaatgaatggWaMa
+ttBHtatctatSgtcYtgcHtaattHgaaMtHcagaaSatggtatgccaHBtYtcNattW
+tgtNgctttaggtttgtWatNtgHtgcDttactttttttgcNtactKtWRaVcttcatag
+tgSNKaNccgaataaBttataataYtSagctttaaatSttggctaaKSaatRccgWHgag
+DttaaatcatgagMtcgagtVtaDggaBtatttgDacataaacgtagYRagBWtgDStKD
+gatgaagttcattatttaKWcataaatWRgatataRgttRacaaNKttNtKagaaYaSta
+actScattattaacgatttaaatgDtaattagatHgaYataaactatggggatVHtgccg
+tNgatNYcaStRtagaccacWcaMtatRagHgVactYtWHtcttcatgatWgagaKggag
+tatgaWtDtVtNaNtcgYYgtaaactttaDtBactagtaDctatagtaatatttatatat
+aacgHaaaRagKattSagttYtStatatatagtcttaaaaMtcatgttcaaDactgRttc
+taagagDtatttttagcgacttgtgRtgNctgSgRaaaaatgcaMtYtDcatcaaYKttH
+catSWgaaaatDataggttatgBDMtgttataacaaYSgagttacgttatgtDStttaaa
+tctcgWKtcSacgagagaSgttatBMDgtcggtgtgcgaNtaSHBatBtttVMgVcagaN
+atcaDDaKMtMYtatagaBccctctDtgtatttatatKNtgggtatgtRaacttgaWaaY
+gcaHatccctggtttStatMtcgcMtaaaWKttMVtWctVtgttaKDWctgWaVttaDVa
+tgKtagagtcatctaKWgtaaMttSacBaMattaKaaHDataattgWtgttttgtcatBa
+cacgtStacaaagtNctNtgtgatcHtWttcKaagagttttaaaaWacgRacatctNatV
+StgaatDHgttWcgtRKcatatatctcaNttaaBDcctgaaaaaDtaYaHaKttNtaYVa
+VtttaDtctacttctWttaactaattttMagWcaatcccNKYtBaacatgttgaKgKcgc
+BHaatDMttatatcSWacatDatRcWaMtDgatBctHgScttaaaHtSgKtDtttattgt
+RStWgttccatatttcacWttcatattgtaHVgaBtacaMtgMaaagDaataactDatat
+tagMaNBagcttcattcgtaaKtgtatttcacMtgBaVtaattStcttagtYgtgtcgcc
+ttKatgggtgaWaataggaatacMMagaSKRttBgatgacRtgMtagaSRataggtatca
+ccgaNaaaWSWacDgatacttgattagcttgtgVMttatYctaRgHVcDtVRRtSaMtca
+VtVtatcaYaHatattaaVaatctaBtgtacRatNtatttgaYatSaHctaNgNtYtYaY
+agattVgatcRtaacgYggtgtatKttaatMagatgRtatatgHaKccHaaaaYtgaacg
+aWaNgtYHgacagaYtctaVtacccgatttttaaagcDttatNRgattKaaattttcatc
+taatgccgcaataataattgttatYtagtRNtaagttggtHaKttWMtDKgatSagBYcg
+RggtWaVaattHtatgtaaaMgSaaagataaKaaKgttDttttRaagaacaWRcaacDgt
+gttaatattaKtatcaWacacatttVtctgatHRcagtttNcaaatcNctNttttataac
+tWacBBttgBttaaaRaWtBKaaacgtatcRcaMaatgYacaaaagtgBataStWYtggt
+atgacaKWtctSgcKHgtcNaMNcataSatattgactacMcataattNVtDaRccaaatc
+agttttYttagYaacgtaatMtMVatNgKaaMaaBgattaKttatDaBcttKtcctttta
+cDagaYtacHgttggacaaaVaatagtYatcataSgatcaaWVttcgaatgaccctcctt
+NtaSBWaatttDttttcaatatYggctatDcttatNctttagDcMttcaacWaaNattSY
+gctttcaHcRaattaataaaatcVccRaattactctaMaVRattacagtgRcDtcgtgct
+cttNtWVtacagtHtatHaBDtcWggtgctcaaRHtatgtDgacStgcaaaVKtagttat
+aatactaatatgtagScaatRSacaattgtattgcagatHHtgBcaatKKtaaMMcaRcg
+actatKBaMaYatgKatttDaaNtRatattgtatWttagcaaaaacaWgcacaaHcataY
+tDaHgttataaSacgcagggggtYatgcKctaaaHgcVgctBDaVttccStagNgcSgta
+tgVYaMatcaWRBtVtgYttgtgRcYttcgctgaacNttgtgtctattWttttcctagMt
+agaWtaKgatStScatMaBtaStaSactattYNatctgtacRatYDaatgatgatatgaa
+tYaaaaSHttaaYMaWtDcaNHaBcaYtgVgcatVaacattMRatBtaatttaDacRtag
+taaaNYVSMtcagaaDtttDHtRcYatacSNKaaMcHgatBaaVttactggBYgaYattt
+ttgcDacHctWatcgtagagtactcattDggtcatKaSgctttatttagtDtRBacttaW
+YaaaattttgaccttaaWtaatgcRgccacttMtaggKtcBtgacgaHctttatcgtcSt
+atMHDNagattatNagVaaaWcggaaaYcaVactDYactaStattgBHtcYctgggtaca
+tataaYcgaYagaggaggacaVatacHRtYtctgtaVgaYcNgaaaNatacVgcNgtaat
+ttDcatttttcaacttSNcaaDatVYctSgcaccttagMgacgcttgaSttaaaatagtt
+aggRHttaaacMatagcaWgMgagtcgctagtgtKgactaaHttattaWgcaaaaaaSat
+atgcgttaBNggttaYVatgaactttttgccatataaataRatSaBctagttataBccga
+aacaagatacttaattttgaHgHMgtaaKctttaYtaaRacBMtBaYgaBaaacaYtVta
+gcRgWatHaWagattWSacStMHatttaDagacaatcgtgtKtttggaMtgtWtgtgcaa
+NaaaaWtKaaBcMWtcttctatgacVgagcgaggHaYYtttWgSaaYYaWtRYHHaMDtc
+tttacaatggaaMctataagcttBcgHcNWaatttgtatatYtStatctagcactgtVtt
+ccagaaattaDtttaRtVataBttWagcatDMVactYtgcatWtttgaaMggKaatgaaa
+aHtataDtgYcMggVaaatSMHtttgVttaYaWaataRttgttaYttattttRtWtataa
+BgtDtttatatcVgaaBcaDtatgtcaDagaWtgaYtWctcVagctcagctatatagcRV
+tcaKtaataatHgNaccgaaaatVHBaatattcgttaVYttatttctBYaatKaagaccV
+StttcattgaMagSaaaaccccWKcaaNtMYacctaDStagaaatttatcatVgtcaata
+cccKattgtaaagtggWgtatatVtagBcttDaBacaattWtDYKtatRKggStRtaaaW
+atBtaagtaattDaaaaBRacWtaagtacaSttaaatccgctaaccKaattgVWttDatt
+atttattKaMtcYtMRWagMtcgKgBagacgggVaaNaaatgctKcgtaataaKtaaagt
+ccWcttHMatSYgataaatDttBaHccattgBttSgaaHYtaataaaMtgaagatgtttB
+gRcattaRaDHcttBgaMaWaaVMMattaatttgtgBRctattgKMagNcMtatttaaaW
+ttgaaacatWgcScgYYDYgttYtVtattgcKcWtagcggtgBaSctaKatacaaVtcaR
+DccccgtgttBgKgggtHagcgaattaaagMMttScggtDttttaHcSaagaacactcac
+actBcVgaKNaDHacacttatSagaattSKHtcagtataaatKaaHtgaaRagaaVcBta
+HtaaatcgatcWcaRtaaaatttaWttaagtcaggRctgaWcttDttgactttaVSaaaa
+tggtaWDaRMtBtaaaaaKatBgatMtctatatcaVaMgatttgNagtDRttDatctttt
+aMtYaaatcggagttctctaYatNtagaNcgMMactacHcaagtaaaatStaSaacaHca
+cSgggtNKatggaaagcggaaKgggtaYtacSgccgBaggcRacgtVgDtggaMcYaaaM
+atggacgYStKKatgaBcaaRtStccSagcRccgccgcSDtgcggBDgaDtBtSSggacM
+ttttaWcatcMatgtNMBWgataatcaaVtgaataataaNatgcaaNttNctgacDMcaH
+ccgatgKgWVttccaStggattctcDacttttttctttaaNcWaMWccWKWttgaaaMct
+DaaBactRtVattttBtcMaNttWcKacagttKSttaYaWSactHSaBtHgatgttacat
+gcatatMtttgtaacScWHBatHactggatatatctgagMgRSatctaaSttaVagcaRc
+ttggaYaatKHtagBBactattcgtaaagaagttgtVcgatgaVatHMtcaggtcgKSgW
+attgaaaVctccVgtDcaaatgaaHgMYactcaMatatatattNVttWtWaatttacRag
+KataaaNtttacaaWgMVactattaSgaggVaaagVtaccDRHaaataRaHaRgcattMt
+tcaatcaKaaataDcaDKtctcgaggBggacctDtttatHacWVaWgatDctaNaNcgKa
+tcMtcMaatBtttggacgtgataatagaaacRactcBtattttaKtgSaaggKtaggRaV
+tatagcccaNRttaccttSMaagatcggDacNBatWcgaactacactaactNBtaStgVt
+NagcatctaVtaKatKgaBtcgtttWaagWMgagRaNatHaaaaDtacagacaBagtgca
+HaNatctcBccNttaagttDgaataaNtcgctaacRBgtaatSttaatatgcataaccca
+SattKcccttDttggtcaatgggttWaacgatacattBtgMaYgaRttatgatKaKgtat
+tDtKWgataacgNBtaccgaKWatcttcttKtgtcttagcattcctWcaaHgagtatDMS
+gKtcagcttgVHaKcttDaataaaVaatttDgtgaaataaRgtcaVaatacttagtVata
+tgggcatgtDDtMtgtatBggattHtgcVtgtgatcaaSattatKYVaacSNNttNWcga
+HttKDaaMYHatcgttaattaSttgctWaacHtaKBtaaaaKHttcRWgaaWcRtBtttg
+gBcDtgtacNttaagcKtaHgtagaaaaRttgaaacatagtWRaacYggtaaatcgctYa
+BtWDRtgttgSctaaKatNcattgtgtMttatccatatagctSacgccSNaaactacgNt
+gtgcttMatSKtcaaBaNaaacataacagaaatagtagctcNcatcVgaagStaataVcD
+KKttcagDHDtattctaatgagggRgBMctatacaagYactctMaaagtcgctttctcgt
+gaattatNcgatMtttaggcBaaatctNtactaaRKtgKactattgtcatatgtacgagt
+tMaaHSSgHgBatatcgcaSaataaaWgaagtatagaHgcttctttatgaccWaatttaR
+taDaatttaatcgaaattgattMcatcaWaMtaWaKactttctBacactatNgtccttaW
+gtctgaccKatStaKtgagtacgggcgcgtYNtatttagacctctKcatgatKWStcaat
+aactaWgMSgHtgatctttttgtcgacgtSacttaYgcctWctcctctacaagVtttMaB
+actWVaccaYtgtSgcgttattcKtatStgaaKaccgNaataaHtatWtYtRacggcaDa
+ScagcagHaYWRtRNcDtHtcVWtggaataaaYttgVaNtgttagtYttgtagSaaatDg
+aggccDcgBRYStattatttaaggccgHgggYRaaccMaagttatSttctttagcMtgcg
+MtgaSagaNaDagttSatgattWatttagtDgcttgagtgMKaYWaYccagcaHatKcta
+KaDgctagacttattgattaaYttatcttattattStaattWaRaYBWagYaatatgttR
+gScttgBagDaWgcgtgcVDaggcttgtctaDRKacttgcaKBWRtaaVaSctKtacttM
+aaSVaWWcgSaNtttSWgtcggtcacttggVVtgagaataaataaDttgaaccaaaaMtt
+aaaagaaaaaaaatcNBtatMgccWagcaNgaVaNaaaaaaYaMgttaWtatHaagtNta
+cgacaBtMMattttWNaRtaaatagYaScKattacagctVKBtWNSKgYtYgtWatHaVa
+tDaaatWgDatcctggSRagagtaaaaMgatttRtaHacatggtaKagVcctgatgaMta
+aYgatgtattattttHggBaccaDctctggNNtYaatctVttgVtRtVcRacttNcttta
+taggHSRtaRacaaattaacHaHgtgttgtttcBtBtatWtgtattttgcKagMcaaaga
+MtattagtStagcBacYaaHcagVgWtgtttcgtgDHaVtagDatcRaRtggtWtaactg
+cacgaggaaaRttSDaaVaSttaaaaacSMttactaNtcaacaattDtacttttYatVSa
+cYtWtMttaattatcKtcttctatcaKDtctStSaaacggtYccatgtgagagtWtagWK
+gcaBaaaaKttgNactaatcgaggcWtcDDaaaaaacactHattaattcactatYttaag
+acactaKaagRtRataaattttcatHggtaataaatgataHtggctaacBacDgtaatat
+tRtYgtDNDBgKtcaggcHattttgHNgWtaatttccgactactgacatVNttYYgactc
+gctctatttagaMcgggatHcgtttatBaDSagBaaaagRttBggttaaBactVHgatga
+atttattcaaaattgcacttcDgacttYcVttactVtttatBaKHagaWgtgaatggBta
+aSggcagacNcttaDttVgMtWagattggVatttacHtctNcMatacttSatMagcttgt
+NcYaaScaYactcKctKtagScStcagtttcatWaatggtgagaggHaggggcaacgcRK
+taRcMaNtHaatRaRaaactVtBtgttaatRtWWcaaagKttccaaKaaatacgVttcac
+aaacgcggtgagaRaatggtgDMWatcWVScacaaaDaggaaHtgttSMaaaaaccYccD
+BtatYgtMagcSagaccaVcctcggtVWaaagttatcNaagataataSaataaaKccgta
+DtYttatYcttHttaagKcMctaaatggaatRgaaaVaaVtcKYaggatWcaBtDaggDa
+tccttcYNtgcSMRgaRtNgaatcgttRttatDVMtagctttacatDVtatatatcagct
+aDagMtataccYgaggYaaatgDaaaatSgctctgatgtttVaaBcctgataKtagaaac
+caKatatgttaDtgaDtatagataatacagtaDtatcNtgtDMtYcattRVtctataNtW
+ttggNaSgtMgaaYctctDggHtggHDccaccacKKaaacaaaatRatttccctttaagc
+RattMHctattHaRtataVattggatcSttaaHaHgaaHNDtacattSaaggDatttcaa
+aYgctBcatattaaaKagtgcccatSctcgatRtaaaMtgWactttNMaWctYgRatDgg
+aactcDcaattaKaactgagtatctataagYaaaSRctggtacWtttccWtaYRtKHatt
+atagWtKttaNgcDtatHacccattaatttataacgctMgaagtaacaacagMgtaYHYV
+tKMHtacMgKcaaatctgRYataNtcgttcaatacggWtMcaatYcBWaagYtVaDNagt
+atagDaaNtaaaYtttcYWttttStgggataaMgatattagaaYtNctcttcBagactaY
+DcgtacHDWccKaHgttcttHgVggVDttatcatKaMttttacWaaSattctatagaHag
+gKaDagBtaaagtcYccattgtYcatctaNgRgVtgaagtDKttatBKcggDtattRYgH
+ccgtgcgBNMtttVRgacaYctSctaRacgtagagccgtacRaagtaHKagStSttttgY
+SatattaaaWHaaWagttDKaaNaNHaaHttaYcttMtcaaatgKttBtSgtccaaVaat
+tSaacgttgNattgatatNctaWtVcagtactKcWacgVagggHaaRgaDaatcMttatt
+aataacaBMaaVtgYtKgRgHactgtactatcBaMtVggtagKcYtHtBSaattagtaat
+gMcaVVagYYgWtactttccaaSttDgaaMaMttcacttYtRgacttcagcttWtttagt
+gataMaattaagVtagaatatKataagtagttaagHMRaDattaHaaVcctDtagtcVYc
+aataaYcNttNaaaHctcaRaatttcaNRgatSHgVatagctRtcatgaBttMaaagRtc
+gHVtgRgStgatttgtagaKagaRWRctgNaHYgaaatBctgtttRttNWagaccgagKg
+tgcggHKVttaatattaatataataDtaNcctacaaRgcaNMctctgaaSHWWHcttagt
+NagtWgWaaKtYaNgcBattatccaaaSctRRHKaNtKcBgtgagaDRWBttactaaatt
+SMctatatagaaYacDgatttccVtaagRtgRataatatagtctttttatgtMgtcaaca
+aNtaaaaactctWtagaVaaaDtaattatagtBStcgaatDtgattVaatMtcaDattVK
+WaagatagggttgtMRSgtcYgWMaatgNtagtcBttagtttctctWaaMtVgctWgSgt
+HagaSagactagKtagWggcatttHgttgacaaactcggggHggcWBgVgtatgggagVg
+agtcVcBtDctttagtctaagVWtHtgtttaScatacMBtKgattatRtgtttgtctttD
+ggcHaBtRtgtaataNataatttataWctgaYWataStcHaatcRtaaVagDWaSatagt
+accNDgaagtatacgttttacgacgKRtattgDctatRRattVtStaaactagatgVatt
+tagaMaSaaaattVtatYtgttgtRMagtHaatttSttaaYNaggWagtgcacgaMcact
+gHgtgtgggHMgtKacttaaYgtcgcatcSatattgBaagtttacMtYagSatttattta
+VtaaDtaWaHcgNatactgactHtggWtataDcDScatactcStcDtgtcgtgtatgagg
+tHaaNKgDattgcBccaagKgtatgacKSMtttttgttcaaatcaaYtagtaSatgDaaa
+MccKNaMaatagaataagcaattattataaMgagtgaSgtctNYttattHaNaYYtcDDt
+aatNRgtatttaaYtaaatcactHVaHcStccttcccaaVatcVggatKtatgRaaDBga
+YtttacttYggactSDtaBcaaNggggtattatattBDcttagagYNMatBgttYaagac
+tMatgttRgatacccgtaacacBHtatKacWgatRcHttaattYtKtStccaaatVDcaN
+KHHaaataatagtagtatcttgctNDggVaVVtaVaRaaagSaccgttctcMtVtgNBgt
+DtttctYgttactBctcRtStWtWDScMtcWSaRatgaataRHctaNtcStctYtWacag
+atgtatYBtHaHWBtacggtDcaaBtatcaggtcaVattaNctactgaaaatWaDgactN
+WtMtggagaattBaataYcMWYcgatMYatWtgattSatgaRtDaRgccagtSttatatR
+aBtattRcWtagtVgaagttMctattatatDttaggtctKtgtgtBagacgttatRKtga
+tctatttBtataactgataacKcggagtgHgtVttcttgtKDgcDtaYatBDatcaatat
+tgttNtaBacatcgcNcaKcaWcRataWcVgtacgScaWgttcggHcMttcRccatgaRS
+tYgNacagatacYacWWtggNaDcWagttHatMaNaatNtcDMDcMaKgHNatScVgatK
+WatatgNRgtccgYgaagattDHgtMtcHaSNaaattBatRagtaaatttacaagHWtKa
+tcaagtccHtYcctgttKDMSgtactactVctgacaaaaHgatatacataatKtStHgct
+ScSatNatacaYttaaWHtctgaatYtagtHtKaggccWBaStaDctaagagNtaatcaa
+tcgttNgaYDaagtaaaaHatagaatcgcgBaYaBgaacSaaWaaaaactccgcMttHtt
+YgtaagaMctKBtacSagattcBaaWtaattttacRttatcgaRtacaRHgtgRagaaBc
+ttaVgacVDgggaatVatagaactRRtacgYttNattVHgaHttacaaaaaaaYtcRWtg
+tgattatgccaSDtttatKWgaatatSNDgattttaacgtcSRtatggttcttcBtWttt
+MtBtMScttaHatBattHacYtaYacattcgttKgtcStSctcKtatatttcaKSgagct
+tccaacaccRDtttDaccattatatSgtcWtVaaagttgtagccattDtYaatattDacc
+atcVDaaRccagttttgtcHacMattcHgaNcatgttKcVttcctgtgcSataaatattg
+aKtctaWctMRaKggtaYcaagttDttcgttacRtatgatggHNaWMtKttcatattaaD
+aSaBaaaMtMatBgKtttgHtHactaatcatcgtWaatKaaWcaWtcctVttaaNaggaa
+aagtaaagaDctNttaDBaBgatagMgaataacRcYggatcRaaaHaagatRDtVRacta
+YagttcaccaaWtctcSSaaatcSKattctggDgaacagDtaDagacagtgtaattcaSt
+YttNaStgtaHgccttaScatMRcaccWtcatttatRtaagatWtNataaWtMNtDVgWt
+tgcWgtgaRttttRgWcttMtctaHacaaYtKctgaBagtRagacttDatNttaaaDgRt
+atNcHatcSDgtBatcttacVcYacNgaattaacgagttgYgacttDattatacBattMg
+ctagcctagatVcaactNttcctaatgtDaacgYaNatagMatSWtYBaaaRtgMtatSR
+gaataYaScaVgtaScMagatNNtttacaaHBaWtNtRtctaaacDaaaaWMcaNtcVaD
+NcagaDtgcWKYgagttaHtgcDYataaacataBaWWtcggtatgtgaaScaacctttRN
+atcgttaaagcaDctaatgcBatttacaattVaMgSMMtccYaaaBYtggattttcataW
+ttgBtatDtBgactaatgtccWaaHataaScHttWttDtcgtcaagMctMDtaaaatRtB
+aaaacaatgtcagcatBgNNBVttttttcBacWtttWtSWWtgaaaaSacgBtaaataaa
+gtcDStaagaactgttaatYatgDctattactgaHtaaatStHaagacaKtagDtaaHaD
+gttccaaDtaaggacactctDggcgtDagtcWaHgRcHgDgaSctttattgtcttttcct
+tRYaDgNactaaatcaWggcNSBagttttatatStKgtcRtgattaaggtcaSBttaaca
+aKatgggatcaaattgRgcBagtNtcgDcatttWcctttgtNagDgctgcatttactttg
+tgtcaBgSatttNHaMcggcagSctcKDtWBaagSagWatggYtVatSRgKagattgaVa
+tKttcgatYatKYSgDaacNtcVgtttaWataWtgVctgcgSggMgatccatgagttgtW
+catYWWcctVcNHagtNtgtKtttgatcaacttaSttattgatNcatWaVgNHcagStVH
+cggHacaaDttgDttWcaaRaKgaaatKaattagtaWacattgaaatgtgaatgacagtg
+aRVtaaYagYtcggcatMttgaaggDgagDRcaKgHtacacaaaMcaBtagHactgKaat
+RtNttcttcatcatNgYgStggactatgSMttgKtDaDgacRRgtWaVattgatttaagY
+ctatatagactaagaggtatWtataaactaYaHRctStgKWcgtRtKtYtYtagacgatt
+RaaYBtaStcttaWataatcHttataRcactgagtgggagccaattctcDtgDaggHcDR
+VaVVggaaBtRttaataaRRttgtaagKNcaVWWgtatacctgatcttBtcttRgaWcaV
+RKcagttSacttagcgtKtgtYWatatcgNttcKaccacacVKctgattBtggacgtctg
+acaDtWKttattttgMBgKaacaDataattWtBtBRtVtacataaatatttgtWtttata
+gtDtgcctagctHYaatgcaNaaRcaatVtacctgggggKtagBgagaBgRaaNttttMt
+MagMtgtgattNctcNaKggWtMatcttagWgtaatatatNctaYBggKaataBattYta
+attataVtggNtcgtgtctaattaaacctHtacaaactDctDtctgatatgMtgataacW
+ctgtgYSaaNScgDYaWtatDatMKgcaatttctgNcgtHtaWtagatatcYBttaatta
+ctcaaaVattYRWtatttDtaNMYMttgattataatgcgNggWaatYagttgBagNcaag
+aaaDtRgtaaaagctgcatctagcttaVgtBttatagcKMSaattYtHcMaBttcagtct
+tgKatgVSVttKgttttttagtgtDHgNggtcaVtatttaacNtgaatatgctatMcatg
+aaaBtgBSaWctaataaattatYttagtaDtaccggaatgagtaattggatttaacBtct
+SMgWYtgKgattacgRctctccaatgtaggcctgaNaatScgYataaBBacaKtHtttca
+tgaaHtgBtagaKHVtacctVtcaaccaDaaWNHNaatgataattgatgWcagggtcMBt
+gSgRataHctMctgMHHtKaBtaaMtMgataaRWtagYtgaaMaSgctYtgcgaaHatDt
+atgtcWRatKatatYDcBgNtRaRacattMcagaHgaaagRccgcgWttggSatBagagc
+HgYtatctVtcatYaaVRtcaSacaMYDcgRtcaaWgaRgataMtaaaacaggtgtaaYc
+attgWgDHcWgttaVatttgcatctaatccacaaagaagSatgcgtagRgagtHDgaVcg
+tgcttatggMttttcatKSctNacHcctMaKRatttgatctaaatgHaaScataataatg
+tttgtgtHaVcaaaaNHaaaatcgctgSVtattVttagaaNWcacagtgKtatgattHcY
+cttgDaWVataBatBttttWtaactNaattttctttaaYHaMtttaaaccgStcHaVBaa
+tcRacaaWactgtagVKtNRtcctagcWaatNgctKccttctcDaBDcatYHatatgcaa
+taaBaagaatgDMttaHcaaYYtcactgttRtgacRaacctaWtBtBMagBctaaBaWtg
+atgVtttattataggttaattgtaatYcaRtVctcttgcacSaaMaatactRSgcataKc
+agcaVNKttcgSatcaaactaattDtaHtNaVtgttttttaWVtatNccagWttcgtatB
+cgttVctcBttaaaaMSaDattKRcctttcataHaattaatWaaataKcaHVaggaatat
+aBYKHVtgVcVgtcHcttccgcctattDtMMgWaacttgWttYtttcMcgtcctaaVHtg
+WtggtgacKtcaWaYMttacttagVWtacgSatatcgWcKaaatHKaaaYttgtagtcaa
+cWtttggtcaagttgaaBBaSHacVcgYgttWBSRWggtattttaYDtHatattcgatNt
+tacaaaaVacaMccaaYStaataRttVtcttagaVKaacaWcgccgtRatcatctaaatc
+cMcctttaMggccHgYcDgaKctatgMRYBagcaNDtgMtcRttgtgHaRttacatgaWc
+DtgctgtataggNggtgaatagBgagYNtatcagKtHcatBatgVKgaHWagattRData
+tcgYcHagRtaatgWtcStagcVatNaaaaKttgRaRBYNgtaaDtStaVRgcMccatMW
+aaattBDatttaatttataaHtagtVVaDRMKBtaacaatttttttDaRSgaaKDtVaBa
+tcagtaaMttaagcctRgaNVgggttcataatagNatcctacactacgcatgtcggaYgt
+aKcatggattgactttHtaattWNRaaWYggttcaaaggaaNtaatgcHcaaaattBtag
+cttattcaagVtatttWgcctaKtatBttDYcattagDacKVaYNccgYaYRaaMaattR
+aagaHtatgcttgcRagcgctSaatagaaRacaRacSccagcacVMataatHgRtagcga
+KgYRaDcVWSDVgRaMgcDgtaattttaYttggtaaWcttKDaaYtatMRcgKccYcagt
+YcBgRccattcaKtgaSSRtactgacgHtgtaaaaBatWgcaMcBcYcgccagactcttc
+SatYattgatgaNccaaaaWaKatVgcaggtWtBcgttaRMagcaaagtgttcacatata
+aagaHWtKatctacttatatcacYRaaVagataagtaattttgatgtBctaataggtaRt
+aaHaattgtaRcStYSYaWRgMtacaHcNSttVNScattNKaaKgBtagtgatYcaaaSt
+actggttggggaBggtNtgtcaaWBaYVSNgtaataBNtagtatatcacMcScccVcgtV
+RRtttNcKaSRNaNtHRttatttattgacaatggSaBagataaccgttcctaDNaattgc
+tVtatNtHtatagSccaagctKttaaacaaattattgtSHgMWgStttNaccattBMYat
+RtccStNgttgaaBcctVagcaaaatgatattcRaBccMWaagKtttttcMtgaRYNaat
+aDttgttWRttattggHtNtataatggttgtStYgaMcYVtcattaggtaatVcaNggaR
+tNataMWcctcYgcgagagRgcHMgcWtgaYtVSttgDaacgaaaatMttYWtWttcctg
+aKNttatttattRaattaagaccMKtttcWgtcaBagKSaWaaacaNtaYaDtBNaaagW
+tHgacaaagtgVtcatKcgcaatVaactatgcgaaactccNctatatMgactatttatSa
+aVttNttRttagHtccKtHtaaaNatttYVctaatttaaaatHWaNtSacgaaaHggaaa
+tcacagVYcctaattcMNtgtYtgagttatttaBtcRgBHNacBtactctagaacgcKaa
+DWYYgcattactVagaYtgaVVcgcaNctttBagKRcSgaaatttgtatccattgtggHc
+aatRtaVtaSaBtcYYcatcgtgtcHaVttaHattctgtcaBSNYaKBBattaatggctg
+tHatattgtBacDcBgatttaaaNtggaaaaYtNcaKagRRtRgttRtMtWgggatcNta
+cacctgtWKagatataaYVMtaaDtaaacctctgtgtgccttScacWaggaYacttttKa
+cgtttgtgataKYagaYaVatcWcSattaMcatBYttYaaatgStKagWattKtttaWgt
+agaaSgtRattcSaDagVaMattattYaagccSgcNaaDgaaSaggtaNgtWactaWcgH
+ctgaNatttttcaatgtaMHSWaRtggtaNtaHBtttWWaaatattcVtBtctStWtaWM
+aBcatttcDagttDtttatatgttWBtNaYatcccSgtgagcgaRYtBtagaDacBtaag
+aataWactaaaagKtaKaWaataacKcccgDtagccaaagcggaatcgctSRtacKgcac
+tacccHaactMgtgccaBaRaaaBVtcgSacRKtttStgatcaaHgKtaaKaccHaccac
+ccKttgagcttcSttttKKcgacBgggtYMaatcBStcgDBtMcataWtaWaMtgaataa
+gaaDatccSYDtgBatgactBaVtaagatctcNMgtcaWKtgcWggcgatacgtgtttat
+ttWaDaNWBNaaNtNttcaaatagtaatScgHtMWttgttgaBaDtgNatSaagtttHtt
+aNaNKaattKatttgatcgtVcatgaatatBtttctaacKaNttVttSagccatRtatat
+cactcHHatctWSKttaMacaaDattccaRaYttttagttaatattcctYaacVactgct
+McgagcaMYtttgaagctagtKgNWttgaaaMatcaMcttcSVatcaatgtNactaaBag
+atagagtDMgtNtNWatttSaHactagaaaDggtaaaaNctMaatagtaHgacgMaaacM
+tacatHtaSagaHatYDccagtBtgaWatcYtVaagataattgatcgacctgcaacgttt
+tattacNMWNcattataDVDactatattatYattttgcgaagtgagYVtagYaWaHaatc
+tgWttttatgcHaacgttaccDaKtatagaccaDDttaacgtHBaacatccgtYaBtVtN
+ccaaataaaatVactDttSKtcMtDSgaagctaMtatattgattactgtNaagNBcagHa
+DattaaaWttacacaaatactcaatSDatagctcaDttWactttgaStaaDtagatSaaD
+tgtaatKtgVataggaagWSaaaaKatttaaagtttgcgtaaagcccggNWaacatacat
+gttctaRcaHttVtcattatctagttttNcataaacDttWaagVtNYtaggctttggtat
+gagaWgtactNaVatcactVttBKcttaaccttcMtatcggtaataYaMaYggttgtcaa
+agSWHctaRMSatVcggactMatatccgaatcttttttcgagtccagtttgaMtcgcatc
+aaKagtattRMaaaKDBttDNccatttttaaBNtVtccgtaatgaKgtcagMVSattatt
+taWaattttaHNcaaMaHttgtggctattctacDtgaagattatcgacaaVRHttcSaSa
+atactNHWaaNcgtWaWgaccgRSttNtHtcttcKatYatatBaagtcgctBtgagccat
+atScctKaagaaKDaWactWagBgctgattBagKtgaaataBaaaaagSacScaaagagt
+agcgaDaYtaMcaYcKtaataMatttttaactttgYgtcgaaggacgcHctBcgYgaaVa
+cRYagagBaaYgtagattgcgagtcaagtStDagatBgtgaccctaSWtctDgactaSHt
+tctWatWttctaWtatctYacactgBWatKKctgtatYgacaaHSatYSaNgSagtatag
+atgagtatttatgaccMaatgtaHtStaWttgYagccaWattcagtBaYtaaNaBtaNat
+actggcttWcaagatDctacggaNctatcacatSgKgattgacgacccccgagtNDtatt
+gagaaatattaatcVttNKtaaWtYacgSNcBHgttgWtatgtttcgccaactKaattaR
+gacgNataatctacaacKgttBatYatNMSaaaNtctKgacttatgcttatKtcaVtVca
+gDaataattYgNtRtHaagcaataHcacaVgtaNNHtHDatgttaMNtggWagSVaRttc
+MVDtcttWgtRttctacKaaVttcVcgcatcctHRKtattSgttSacgaagtcccRDVaa
+cBWagtgYtKtgattgSgaBtgccBtcaKacaDatacttHatcattNatttacgtcagtg
+aggcBtaRNaRcaSgcatattatStatgctYcacgtattcattaaRtgStcttWgtattK
+tSYttNaHaRtNYcRaYtVtggtDcKcttctactaMcacggcMtacgcttctatatHtaa
+tggcattMDtaaMaKattgaagtBaaKMVMNacKaDtttKNcgagctaaagtccMMtgag
+aagVaataatggcaWaaaaVaBgtaSaVgaaaSaaaataDttVtBccaNagcSBgaMaDa
+VaVYYRVBgttYMtagtaactDtaagWaattBtattttMDYHtSaStScRaKatattaca
+cctMttgNBKtcRtRggNagtYMattaaatMctYgaatgcKHagSggaaaaBcaggtHta
+tWcatcgtStagMcctcatgattaWRcStcgWtgRgttttcctaacatcgctcgDDtRaa
+tatMgtcMtHtMaDYatgDatttatagctKDtYHaaaaattaSatatctggtctttattt
+tatMtgtYttgtcatactcaaVcYBgatgSctKtYcctWaRaataWcMgNgcgggagtct
+tRMgactataHaHtgctNtVaatcaaccacgSRaDtgKtaaMSKgtaaaaWaKtttVagS
+DtaaaaaatgttYattttNagMHaaRtNgBttWattatatgcttatatcatttatKtKaa
+aagctRaaatcgcYgacgNtacNtccVtSaaatttcDVctaatacWgcaMtcttSaaWaa
+aWagtagtaattaactagRttaVcSaaatataacHgHatWaattggaagtgcgSSgaaVt
+gYgSttccatWVataatcgaatatgHtRcgtBttcttaaggatatgttgtBcNtaatgtc
+acVatactgaaatMBttRRcRatccatagagggacatcgccWttagttgWttatKagtaa
+aagHtttccttSatVatKtgagcaatttattaaYVattcaaattctgSattRaMtgaatM
+gttattattacaNcggVagccttaaKgccYcaaDattWtggMcttMacWttccMVgtgaa
+ttctDaBYgacttKYtBacatgctDcRaaKaaRaatatctttagKcKtaactttaatNaa
+ggctgScacctYgcgcaaaccaHttVHcBaDgtaatHaHVaaatMgttggtSatHtNNaa
+VagtgtacaataaagacgKttcaaaWVacagctcacWHaatcctgtBNWtaNMKcVcVSW
+tSgcaattctgKtVVaaacaRaattgatRcgBacaKacVccVMactagcgMNaaactgat
+aDaSgagaatVHaatVSVtccggatgRgtagRatttgtaactaBataVaggcaagHgaaS
+MSaKgctRagcStNcatttVgctatacttcNDtcaKBDcaHtDcaatagttHttattMBg
+agctgtaaagtMgatStStcagatatYcBtataacRcaggRaaaggtaWSatKgatatga
+gcgtgMYatcagcatVttSgaaaaaatatatgttYttcattatacataatVcacgattat
+aDggttBtRaagtHMtatagaDgNttggDaKctBcaaRcgattcgtgccttacaaaWatt
+YWVcaaWagDattgaaagggaagaHattBtatVggtaHtWtaMagtccagaKttSatatc
+aStDtgWaagtKWaggtatttaWaaRcattaatStgaaVtacggaacatKctacatHtaa
+aBtcNWatttBBaNatRcDattcgaactataaattataactcagtSgatataagRaYaKH
+ctggtaaNtttaaNgaRHtttattatacNttttaDccttYgtaaacaggaagtgataaac
+atBgaSgtaaaaaaVcBgtWNtRMttBttaaBgtaaaatatcHNStaBtaggtaVatYac
+cNtBaWagRctNSacRtMatDactStVctaaDtaYSRgttaRNttttKggccagaaBcat
+agtYcaYNtDatcgtatVcaatWRtaggaattMcatRtgggatgtcMggMtttataagta
+BgtggacNaaKYtgctWgagYtWcctWtVcttaaactaRacatggtRcatctSDcHcMgc
+aactttttagttaccttattHRgtacggcactDBggtMHcVaaRatKctSHacctacacc
+actaaHaacgSttagKtKttttgNHVgagtaYaMtVYNVcggttaSBaBtaatttSRcgt
+BgaWaatctttttKggacaWKaattKSaccttgDRgtcatatDatVMtMaVcgaattaNa
+agMWccctaaHgataatatgtattWataaaatBaaMtgRttcHctaagctaagatatatt
+McggactaRttttKaSttactWYtgBcaMMacRRgNtactttaaaSKtttcaYBaBttaV
+agtRtHcWaggaVccttNgtgagtcatataWttYScMtWgVRgattWtaSggacggWWct
+BHatattataaKaagttactaMRaaataSRaDttDaaatataVHaatggaaBDgWgHtcK
+StVcatHtaatcatggBWaagHtagtMtgHcHtcatggggWcatacaHNHagcDatRcaa
+attcgcttgDggDNVcaacgSgtggcaccttMttaatattVYtVgaagRttaBcagVaYa
+HcaRDBagatgaVHtNMtcttactDaggMgMaattRWDcctVtgagaaaaSKatHHttVD
+gtctgtcacatHNttgaatSaagtKBatatagacaaRVctcWtgtacKtaacHtgHataS
+gVtactaggtttatggBgtcaaaYaDgaaaaaatcgMtagaKaYatgaattatYcttKta
+caatttgWttMaatBgaatSttMtNaVgVtScgcttctBHKgtaRcNBaatcDtacgatt
+gacgtgctatNaaBtMgagNgKcttWcWKacactYgttVgNcgaattttcttgaaaaact
+acccctcgcNtgMctatcccacMcactcMatttatttagtagaacMNtttcttgYKaWta
+aBtttcWttagHtgtttctcttgtggctatgDgctaatWDataatttagaNcgcRRNata
+KtctaataHgaaMYctNaKWtactaacDtgaVcgagaactggtaccaactHgaggctaga
+gHHagtMgKtaaactacaggMatgtYgSBaKaaaattMgatRtggggtHBVgttaattgK
+ttaaRDacgMactcaaacStaaagctctgtgccttcgtSagtSaRctacaataKatattc
+taVgtgtaattRacKagttattgaMtaatgaNatacDataaggactttccNtStatatKa
+agaataKtatggtcctctatgaggttaaDtgtattgataaaactggatcactKBtttggc
+gtcaaagaaaNtagtWKatctaaWBactDaBaYtacaWtaSgcaattattWgaaBgactg
+aKctatBRgtagttaBaRRgatttaagBHctStgtVYRtaaataaagtMWtcHgcattca
+caaMWtcMccWttgVgcHaWttcaNtgtVaggNgcVatKttataaWDcccctatgatVtt
+ttattacagRBBWttcttRaWgaatBVgcgtHgWgaccagtYacaattgSttaaMcVtDa
+tttaVttRgttKtcaYWatKtaaDtttWaYtaatYctSctatagtcctBtccMaMMtaMY
+HaSSgKaaacttctcBtMtgDtgtttttagRcgtacttataHgKtNtMtKcBtaNKaHSt
+gSagYHtataDtcKtagRtNWaacVgctVtRtttStNtgaaccttaVatgagaaggtcaK
+SttaDataagcYaSatNStcaatDNgttcgacaatttaSgaRaBNNacattRatNtgStt
+HVtgWHgtSHccaactKttYtatHYttVtgHcNgactMcaacttBatatgSgattttacg
+tatttgtggtScaacggYtHtgcatctatttttWtaSatcagaYatcgcagtgtgtMgta
+ttctttcattaRatttStcaatatgcttDtStaaagaccDcVtaWNcHYtWMaMcgaacK
+caNcttacctaBtgcDacatcaHKtRcDaaacataaRacNNtccDataNactttatBSDY
+atDtctBtaBatctDatKaMcattMatatcDHctaagRgYVcatgttcgtgataHDYaag
+ttSgHYctaaatgtaaaactNgtagaaactaattRaatcttttBKcgaatSctMaggVaV
+aaatgagataaataSgttKgtcatKaKatDYtaaaRttYaMtgctcSatRtagttttagc
+aaNtaKgatcgWYcacDgaatcaatactgBgaNtaactaaWatatacaatacactaNatc
+aVaKaaMaaaaaatcaccBtgttgNctaacaBattttaaKWcaggataWMtaattgtaaH
+tgVtcgaHtScaHtctcHacVatagtaMcaaKtcccSagMYtWcaaatHHtaagRttDag
+tMtcYtttaaWWaaaVaRtcHNtctcSttagcacaKttgtagtNgWYtatKDtcatttga
+acctcKHtatccttattcttNggtBgtgtKaggWtYgtStgtVaRtaRaaagtagtgtcg
+cKtKagatgagYtttaatKcScctgaaaaaRaaHtttttaaaVgtatagKctaNtKaSVg
+ttcgagacattttRSatagttSacataMtaYHccacttttctatactagtatgaBaagct
+ttaMtgaatgtcaKYtaaatatggattataNcgBHatcctaRaaactgttgacttYaHtS
+tcatcctDaMBttgtaWgagtaatWKataaaBgBattcttttctttaatWStaatacgNa
+agtWaMaaNgactMtgaaDaggaaaSctaSSgatatDttattatcatagBcaataVcHcR
+gcStaHaaatWagatHttMHactaRacttaYaaaaNtataHKVaataKtatgatcgtcVa
+aWgttYtVcaaYggctRWttaaKtRttDaKtgtatcaattWKaatBHaaaaNgaatggSt
+HgVVgatMgBYtaRNgBDttMcNtggaNgtcaHtgttDcNaggBtatYtacVaNttctcW
+tactHYcSctgtYtDtgWaatcHgatDatatcHtcttatattaaKaRYaDgaatgSYcga
+ctgcRgaagttagtStYatYtttccgacactacagKcaaagDttaatVatcttaaacRaD
+atRcBatKNtNtaaaHtcBgatKHcWStSRaKaSMgtaKaBacWgDDttgYaaYttaNtD
+gHtatSaSataaaaMBaaDtaMatDaagWtggaMtRcacttatggctNataaaaatatWN
+MtacctatgtcaYKaRacagttHDagccgtaaYcaatataatcatagggaaSatgMYBcK
+BBtaaRVRatRtccVtgtgaagVNttcttagtgtcWataVggtaaNaatVgVaKctttNg
+tttagtaaagBatBtgaYSagHttSYaacaStcgcagaSttcDBtKtttggtctacNttg
+NgKNNtcaaaaKWactgaaYgaYactatHtaWcaactgttSatNVtgtctSttYctgatt
+VaatKgtaYcaaattSgttaStatggtccaatgSWccaaactattgccgttacgcNatcH
+ctctcaKatgtagtctattttaaggHRatcDaagSaVgaVNccaBKtacgtttStagKgt
+ctaHtcattaYcctaVKtttaYaaatYtccgataaaVttcDgatWcgBtcctaatttNaa
+ttgctDYgtgatcaatttaagggctctcatcKattgBtaBagcaYcKctctttNtaacHa
+cNStggRtMatHHgtacatgcaMagtgtccatRWttRKctaaaDtcMctttaNVgaNtcM
+atcacHcctgWtaaStcacgtctNaagRNNaagMaDtactDgctttttcatcYacttaKt
+tatgcStDaStNaMgDtaacKtMtacctaaWattggtttNaaVHatgaaattaattacgV
+NaaWtggaWatctgVatcacYctcVHMtVaNacNtcccaWtttgcaacctcWctHaatct
+tWcaaaYaBaattSctYatctaagDgBttagtaSgaWtBcRcKtccYatatcKBgtcttt
+atgaaHDcgNaMatggatgtWagRctStagagaagaacagctWtNtataaaataRatHat
+KgctNactHgttRgRgVcRacatgHYaNttaHtattaNStaagatgtagaHcVctcYggg
+ccYcaaaatgatcttctagctctHMaMMgcaVtgHgtaagaWHHtggtaactBcaMNNct
+agaacggWtctttgaggHcYNaaMHtaYcttKaagtSccgttgggNMStatacDttataa
+aVaYcKtcgcattttcgacctctcacVttNtttattgtcttctaVcatagaattMttgtH
+tMgacataaatagttctMtgtWgWctttcaagYgcgtNaagcaaDaVHaaStMtaaagcc
+ccgtgVgtcacatcHVaDtgttBtBacBtcggYttDagaDYtccMttagcttacNcgaag
+atRtDataRtgctaatatatgRtWVttatWKtgcBgactcgagaSgtaaaaagttaaWaa
+agtatttctcWtatcBtcataacNcgctcRKaaDKactRaNtagtatBtgaaatttcgcD
+actttaNtYgagagaNttgaattaataaaSMattRHNtYtgttgaDBRBttgWttagSat
+gacDggNVagRWcggctacDaYSgaaattHgtYaaagctccVtatacattaMctttgSga
+catBKaattRgtaBRtttaactattctagcMKMtttctgtgtgVgtctttcDcgtaaMta
+ggtaaaDtcaYtatccgattcYtgaaRttctKaNctaYgYaattYgRttWctWttaaacc
+aatcactVatgcgYttgaaatgatKBcNRgctcatgaccHagcgaaaatgtVgccatcaB
+SatKccRStSattaaatttggtaagcVattctgVcattMtacatMgaaaaaataYNDtDa
+atcatWattcaggNcaccctcBtgcKcHagYtatBatgBttgtVttaYBgBgataaHNta
+cRtcaaBaKcagNtcagaatYgttWgggaNDagtatagRtctcDtDaHScagttcYcatc
+SYacHcagagNgtgcHagtacagctgRtatatMtaatRaWMHgaaKacaBRtagHtaaaN
+cVHcatWBgWaaacWccggtaaRcattgMgttaNgttVMVttgcaagagaatcaaaaaag
+YScKVtgccgacHgacgttcaMcctcattatgcBttttaagtKatDactccgBatHYgtt
+catcgaaatctSaKaagaatWVtcgttgtcttaMaaYaSDtaaaataccgcKMtatgKtg
+ScaaDMaaaactgtgagcVtttaRcttgtaNMatatatttggtMgYVatDaatttgcttt
+aaRtaBgttaYaaagKtataMtWStcHaaaaNacgctacMttDDgactacaNaatBcagt
+cattatatSttaVgRtWgSggcaatSataVgSYgctBttataaYRRgaactgtgHtgacH
+WSactYNgtttBactatWStaNtcStcMttgattStacctgaattctWatNaaHgMatat
+tcaaaKWaBaataatHKgaWgataYcaWMBtgtacKagaaaaagaattttWttDaMtggt
+tgtgaNMtVtDcaacNttactattacggKctatttaaaaBKatagttHaatggaatatYW
+gtaVtNaaYgataatMaccWagagatRttMtgKaMcgatattaacaagatgttBBcNaYa
+ttcNgtRttgaBcctaagaSMttcMtcctcYattcaNaRBttaatgVcMNgaacKagatc
+gNctaWVgttaaYRtgctSctaaaaNtttgctaaScttcVattaHtaaMacNgttNtKHM
+cctattttaRtttVtSgtacatBgtVaaSSaMVaRBcaSaRHtaWtWHttMtattVcaMt
+WaaaNaccccgHYtcatagaaRtaaBaatttaBccaatcRctcatagWgcBHRtacaaDt
+tcBgaHggcgctaHtgacagcSNattcctcgagaccBggtcaagWctgVcRDgVtaagtt
+taattatcMtgatNagYttHtYtagccRatagDtaatcNtaKtacaMSgDaaaatttgHa
+HtRDgtaattKtaMHgaBcaWtBNYaWgtttStttaSttgataatgactMKatHBtttaV
+cYatgggttttaDKcSatttMatatcagtYaBtgVacaatHcaDMcccgtaataatagDa
+taatVaaagaagaVtctccgaRgtRtaatcgagtcacttgttSatgNDHaSNRcggtaSa
+agcSaBgWSgcatcaaWatgttacatgattcWacMtagtgNcacgatgatttttRcWttS
+gtaatMRRBaacNWRHaaBaattDaagStgatccttcaDacccctKaagScSSHaaYHWc
+HcaWcaaaMBataattgDtagccWtcRHataMNKtMgHaBcatcgaagtgtaRgtgggaV
+MatgttaWRtStBHactaaRaactNctcHaaaggcatgcVHKHgaatcSccttggSaWat
+WtNcaaBctaRagaaacacgcttcKatRattcWtgYDaaaaaaNatWtKgaacgtNttac
+tgWHBaccaWacggttcaaVgagaaacVtMttatagaagtatWtaaaNHYaMacagWagt
+aatttgcatcttcgaatacggaHtaatVattctaDaHtRKRaNHcttacatcDKttMDKa
+WggDtaatcttYctcWtRaaaaKtaatcctgccccatgcgDtctaaVMtWRKKDctaata
+tDgactagWtaaaBcKcacMactMHHttgDataKHDaDttHttatttagtcaaVatccKW
+tacWtSVcaggtaatatDSatgcctKtatDtttagacKaaaagcgtttaaSaaaYtgatt
+gtKtgBMcKttgDaaaagttBRatHgcaKgDgtgcWataatMWgcVaVatcYgWttaDat
+catNaVgtttgggcttgaHRDaWgatttctgMHgtVtgccttBtWtaatcgttcgKgRca
+BaRMtaattWgctaatMaVBccaHtDagaBNaataRcacYcYcHcatBgaNtgaNgKHtt
+ctYaacaaaYgBttRNtNggaagcWtDggattgagtHaWttVacaaaBtgttaNctaata
+ctKaMaaaaaDtaRatttDaaagNttcYcaaactcMgaYgtacaaatMaaatYtcacVaa
+cgaaDagatWgBgaataggtWtKaaMtgDttHtgagttaatttgVaaDagttNMataatt
+taSVattNaDtKVccaaatcgaYVtaaaacKRaataatgaBDtctRtgVcttatttYtga
+HgttBWatgaatatacSaacctSatNNRccagtactKagaRtgSKMcgaaDattttagtH
+cKcaaagtggtataaaggctcctaSatHtaMtRKattaNRcWtccgctataKggatWtta
+ggtaatHDRatttattRWgcgatcttagSgtcttactatgYgttYaVBtgcaYaaRtDaa
+tacHHtDcttHgBgNcccataDtaaaaatctNtacatatWaRMBgaattaaaacgctctc
+tcaagtKcacNacgVRVctttttaacttgctcStatRScaRaMataNaKagtatcattRt
+tNaVatcKgtacNatttttgaNcgacaaKctHWtgaKStacMaBatgWttNSacaaKcaD
+aatcWaKaccgYBggMScgaMcctagcaDatgtttcVatgtRBtKNWHtcctWDtatttt
+tNNSaatattcMttgatKgNgaNBatcSggtctRcttttttatatggtNttDYNYgaaaK
+ctcacacYHRgttacatacttYacaataNaagaaaagttataNaataSatacagttScac
+VaScaccSWtccagKHtaatcaaatVacatWacgBctccaataHaaYtMtacKacHtttt
+KtcataWWtgtgaatWaataaaaacatttcaccttaHtttgttccaatcccgRBaWgatK
+gagtttBaVgaNtaNVBgcaataagaatagcaKRttgtatcaattaMtaacatataDBgt
+aaNttcaNcgagatYactggttatgtNVtaBNtDaaDtDttaSaWtactaVtHactttNt
+tcttcatWttcDatKaacgtttggVDaDtVagttatgtcagactKaatcaYtSgttttat
+aaataDttKttKagacWgHgatataaatcttagatNKtttWtWaaatattacSHaRgttt
+ScttaatWttacgRRaaMactcatBacaccatRtttgaacctacttcDMggcVaSBagaa
+tcttaKMagcaVtctDVataWtSgatagacttBctDtBNWgtgKatWctYgaaStccgVa
+aaDattYatagtatcaacBaWYctgaaatttaKVgYtStNtcaVggtggaNYgaRtMaac
+ataSttcagacVactcaVaagtggtattaaDBNDaagtatatMtactatatgatRSgttt
+gccaacgcacRMtacRYNataagatcMgttgatcataaacttVcatatgWtacaaaWttg
+gaaactttaScataactRattMtDacVYataaaagMaattttKtgaBttKcaacatattV
+tagtcatgactcgDaacDtaWctatRttSSYNtgWaScaaataagaaatKtagacataat
+ggNaatttcSKtVWtgacagKWattcgVatttcKWgagcaWgNKaaaatatgtaaacgtt
+cactaaWgacaccBNaacagaaStctgctaHcVtttMtcYttStagYcgtttBcRtaYac
+ttgNaacMtDRtagcatgtgcgagcScaMgtaatBaKataactMttttattaRcattatt
+atacgtaagSNatVRgcttcgaVaacHNtctaHBKYgKaccYcttagagcccaVgatttg
+ttagactaaacgtgcaBgccaWgaVataggattDBWaattttgtBacWtttttaatDtMg
+aactaagcVtctcagBMKatgattgaNaVttggatDaSaBatttcgccatatgctaattg
+YacatgatccacaaMHtttcKYKaWtYcgDtNaaDccgNaNcacacHKttDtttaggcta
+gRVtYgtaactagctttcacaaatYtHaattYacaattaMSagMactcctcatgtScttc
+aaYtataaaaScHYaKcaYacactVcacataNtaBcaRatgYagVBatttgtaactttgR
+ggacaagcVacctattacRcaaMacHRagagtaVNctacagtgagacgaaaggKttacat
+tgggacaataKNtattcaagWKttgatNagNtgctaNgagatNacSatctNatttatcta
+tRgaaaatKatNKSBcKactatacStcagtaggtVtcaaaBYYgctattKtWNttcRaca
+aaNatgaacttaRtaaDSttVBYtaatccagtNaaacRttagaaccRBatataWaatKct
+cattcSacWaacaacactDttVttgacYaagagtaSgcMttBttaVNgRVagKDcttctt
+cNtaggttgcgacYacttaaggVHcaagDagaagataaVaatctgtatRatDtKaaSDga
+ttcaattYtcatgYgtgaVMtMaactaagaatgRgDtHttaaccaatStaaaaMctVDDt
+gttatcttaBBgccNacKMaHggcBMttctgNctHggagaataYMgtaMccaataattHt
+tYttKggtKaccaactcccHtMSaatNactcRtttcatgcKcatgcacttcatSaatata
+ctttVtaYttDattgWcctcactcYccattaDDaHaaKcaatSttagKtWtcatRcaact
+attaattYaDggKtagtNcgSgtttKRgtDWtVHtDNcHWNtKtccgtctagtatSctaB
+cacgcaBtaacatgagatVtttaaggcaVttBttaStWtattgYaggtSatBMBDactVt
+ggttDagacataaactactBgcacaacMaagaStccaWNaaSYMYtgtaKaMcYSaHaaa
+atatttMgtcaaDScaKtcaBVtaMVMRRDMtcttRBgWctaacttgaacNaatgttWgt
+ggBtRttHVKgKcHVtatattSaaaatBttcBtttcDgHccBagtRBRttaVagBctRca
+agcattacKccaWVWtaVcggttatNaSgccgKtYcBaagcWgcatgaNHaKtagNgcHc
+gtgtcataaaatagagacttgHYatattctaBgtttatRatctatttagacattttNtWa
+aSagtaHatRtctcggatttatgtgatBtctRggggcatWctaSVMaRtcatgKattgRc
+atMaHaataNcBcDcaggcactattHBgaatStatattcatBgMVataaSacVacKHatg
+gttaaBKtgtaSaWMattttMacKtgaaWaaWgctgRatgtgDacBtSaHtDgtgtMVtt
+agatgattagagaSttgattgtSaaacagHaaatacaRcaccBtaaDtcaMtKaaSttta
+tKagaataaNcaaBtattKaVNaWaNactagtYattaaagWgHttaMcKaSagatSactc
+tatMSagtggaYctcacKKgaSMgcRgKtgccagNMataatccaVgatcttHagttttct
+taaccataggggcttaDtYatcgaaaMataagcaaatBttgHHcHagacagagaggcacW
+tacccMttacgtgNttattYctVaaactgttaagtKatMagttcacaaagggatgaVNMa
+tgcaSattatcKagtHaBtgaagBcggagtWttVaaDaccMScactgVatccaRaSatat
+tNtgcBatgBaaNgtcaBMgggaatgagtatRgaatgtNttacaggcttaHaataaHSag
+atagtgVctattaaagggaagDWVccatcKaaaatRccccaSVaaatttMtatStgtWag
+tStMaaatBctgcctKWgttDDaSKactctaaVRtaSWcVactggaaaaNMaaaccgcac
+NtaVgaagcttDNgaDBtaMaMKNtKccaVtgctcttMMYaaaaHaattcWgHcgtacat
+WaMaaKtaataccgBDaYRaggatatSKcScYagMtaatKHMtaaccatgHgtagDaggt
+gtaaatatagaKVgccRYctcRaKBKWtgatHYcaHgBaYtttMcatataatgaDttcat
+ttaStgtcVSgacggtggVgtBtgacatgtaaSgtBgatKtKtaYcatVtNattataaaH
+aSccHaaagctSMKattcatagcacagtgBRataacaatMttKcWaaaaatagStcggRt
+taattatWaataatMaYagatgVtatccttttHaScgtBgagWcatgBtgcctatcgtaa
+WHacagtactgaattaaaaaNattRNMaSSNSctattcaaagccVVcatattttagMcgt
+attNtVBactacScattgKVtataaKtttgNaWcttNacctagtgaNaaDcagtaWgKgg
+aaKtacgcaaaYttatacSttgYaYttcDNagggttVDagHatSgtacYVatataVatta
+taSataacgKgatVtVacHYRWttatcctaaDtgtaaDgRDttttattWtaaDttggatc
+attNgtVaaaVggaaggcYgSWaaattcWHcgaSaVWaMatctMDtHBgttttaatctaW
+aagatatDKtVttaccgaMatRaaaBttaNagHatDHWcDtBVttaatKtMataYttSRH
+HcgtaHDtggttccaaagRRtaWtVctRcaNDttatacgatMcaatNHtacgaattBaat
+HtcccatctctccBtgtataYctatgtcgaaDYWtNggatNcacRtMaatNtKcttSYSc
+taDaaaggctDaStatKtataBgcVaatttggYcttaaatgatgtHctaaccaactttgg
+gttcMaaDattatKtVacgVcScaactSataSccHttYctttgtggcDtMcactaNSBtM
+RBMaggttWKtattaatgtKHacttcaMVatctgttgtccaaYNtaagttKaacttctHc
+gcWtYttatMBgBaMacaattaDaactNaaatSatcVtSSgatctatgNatSYaattRat
+gcDgtctataagagaagRgatatttcccaataHgttttWKtgaagNRtctaaBtWcHHcD
+gaattgaaaKtgttaaRtatgtaMaggDttcMaccaMaattDctgYctaWtStaNtgRKa
+BtNcMHcSttMtaKccYacgNNctttatStgVtaYtaagttaagaBHaaStVKHatgttR
+VWtataMtSatgcaattcMcttatKgMcagtgaatcYtcctNaYcttactttctcttcat
+ggcgNcatScStBtagctWtHaaWattaccgtctcgtBMcaaacKctcccaacttBgtWS
+tVttMRgKcVagHttVtaagMaNatcaHttacatcYKttDBtatgSattVcgBcBVYttH
+NtcatKgcYgaaSaKtatttttMtctatctaSaattDttcWagHSacgttagYgacWaSa
+DKatcNgctaatgVSctgctYgaKgKtaataggtggagcgtcgaaaaRYtgYWYSaatac
+BgacWtaNStcaattWtRcttttaaSYgttcNgtBWWgtgaatHttttBaMcMtKccagt
+attttcgaHaDtSVgatgaacatgcacgtcagagDYattBcagDctcttNcNtaaaatRc
+tgMcDacaagtttagtcaaSSaagaaacatacaDtctctYgcaaacBcaagaBatgtatt
+gacgagYacBDgttcgtgRtaMgaattttcNtgVcttctgtctagtgtccatatctgatY
+atNtatVWgttacaDacaHDDagWtgataWtatcaaBRatDRtMgVcgaaattcSMagYg
+WacgggtaacaaattcagcatagSgttactBctgSVWatYcYgcBWgggRcHtataSaat
+tBcagHgcgcctttKcttWaggctttaaDtRacBactaaVaaKtaaacctcgcgccatta
+ctKactKSDcgacaVtatataggataKctcgSatgHSatVcgtagtgaBtSYtgaBataa
+tStaaccaagttcaDtHtatattaacYatattatcctacgagatcaccgtVSttctYgtc
+ataaVactcgWtaVatttgttggactaaaVcaSaDtYcgNtYtctVaMtaattatWRtWc
+aNtaKcaaYggatgNgaatcaatcRtcgagtHcgVgttataHDcatttaagttctHtcgM
+RHtaaagaVactBMtatgaagtaaaaaBNtataaNttcKcctaNttaaDtcgMacgDcaM
+atttgYtaaNtcaccgatgagMtgttaggWcacHttNgtcttHYMcaattKcagttcNca
+aaacgNaaSattgKttaaBaKttatttaMggHcttttaaRNVgttaYttttMVRtYVgRa
+tKcgVtacgaatttccBatBgYBRtSKKctaaaatgatatgBtcttcgtttgacHagtaa
+ttatatctgDtBttatgaDtatKtcKRcRttagattattagHgDNaaaKgcgMtHtttKt
+DtgaaaagtaMatcagaaccgaatKgtatatVaccRaKYtDHtcSagtBgtgccWaaagg
+tYKcaHatDDaaattDStDtcKggtMgcMtgtHtcaaVcgtttNtagtNtgKgctaDcSc
+gBcWSatgtatagcKgWgttgaacgagtgcgcgtKaaaacgRtttccatatatttttMga
+KagcVcVRataccWctctcgBcgaggcgttaatgaHYtttHtaSWtagcagtttKtYaac
+aaataMtaNDatRgMBaBacSaataSDctgaactattgataaRtaVtttHatWaacWtVa
+HaaBDtactYtaDactttSgtKtRattgatttatatattattataattBatagattctaa
+cDcRMaaggttcgtcatattRVYcttKgtRcgWaatcgaaWWatDctacaaaagaattHa
+atctgttttacYatKatBaccMaMaaVtcacStaaYgYKgtttctcattatattNgSaaH
+tgRaBtcataKYtHtacttgtacaaaDtYtgatagNRcYatgaStaaagactgtcWDtYa
+atVaNStagaaaWtaaaataDYtcaMatSVBVaaaYagaaaattgtgcDagWSaStattt
+taatNcacgataNBtaattggaatgcMgacattHaattctctaaMatactaBaaattaca
+HWgBNtNaaSattttaacHtgtagtBtcRtttSaNNaYaMaDtatDtagaKggYgcaaSt
+tgctactDcNRtWgtttaVtggcaaactattgSgaagtattatgDgcgtgtcttagcNtR
+ctKggtMaHgaDaaagtactgtcgatttagatcagNggtaattaKaatgaaYaaHaattg
+gttVaaMggatactctaBgtYHMcttccVcaaWtgttHHRgagttKaaagaBtaRtaaWa
+ggttctatRatSgtatcYtaWcatgtaBtcaatctaatRgaYYtWtccattataBacttW
+tcctaHaaaaggttgacgtRattKgaagcattSBtttctaNcSctSStNtYtWaWtgtag
+tcttgtctttaagNKgaagacgDaRgtNaBaVDgaattggaYtaccSVYKctSKKcatag
+ttgSttatcStactcaatSMataHcaKgatWVYtNacagtttBtRagYHaagtaNaaVVD
+gatattMaagattagcatcctaMaaMctgNtMcSaRcgctHMttaattDtttYttcgata
+aagtMtaagttaWaaDcaatccKgtgMMcatBgtRtaHBcttgtBaBggcaDcgaWttgg
+gtaDaggtgatRtYaMWDttatcNtVcttRaKagctRgtgcNaatctgattatagattag
+tatatgaataDNatcYaggKRacaatcaHcaagttagtKgRatRgttaagaaaatacVct
+aaaagtgtaagKVgcttSWaaHatagHctagtDgDtSaVtgatcatttaNKgKHataKBc
+tatatWaNgtttgcRaVNttaDgtcttagHYKatYaVaBtaatgaBattaYcNtgcaBtH
+aacttVtccatDagVaaaYgWtNDBgacagVgctcaRtaHaaacttttacaaggaSRaaa
+tagaagaatacccVaHatcBRtcttttaaDMHWtHgacMtctcaagKDttctgYctctcN
+agaMgcgaaDWatMcMatatttDctttactaVSctagttcaRKWgtttKRaVaaKtacaa
+caKttatttttggcctataaDgtcBctBDgcYYaatNactcaaRgaRWcgattgVNcWaa
+tctgKagDMgctatKttRatcattMaagtctaRaVaattKctgaKtatccgaaRatcHMa
+aaaaagattccacgtacgaDStatatctcataggtacgcgatgtgaaggtHYtatWagKV
+KgaMDcaatttWccttgKgagtctagatgaatgVRcctaMttgtaRaaYtRtaacWgaaa
+MttatcatNcgttactaaggtDaaggcagtRctcatcaatggYagccagcgaatatagtg
+ttWtaccaRctagatttDtaaatRcDKtccHtBWgttctWaagccYBSgtggaaagHNtt
+HtctaaattaBatggaDMgaBgatatcaatactcMtaaKtcYccgatDaYgHDBaagBat
+tWattgatttttaagaRaaggatggYggaKttaKtBVBcttaWcttBtacctYaNYttgc
+tgtBaaMtWtcWaagtaaggWcgMDaaNtccWMWtatcMVgaSaRctaKtBgKWDacDga
+aaaNgttcaaaaataMcttaWtatgNaVaaRataWtgKctRatataagtgttgacgaKga
+NgtaHattaaRagSgattctatgtYtcaattagBYBatccYtgtNacHagHtacVcVaca
+acaccgNgBtataYaatWHSttattgctDacttgtgHgHcMcHacagctRSDtgattagg
+aDHtYagatggagWtaMatcRcccacRaaaYagcagatgatacatatttVBBcaaMtctc
+taWgaNtttcctaVcttaYBDBctRgSaagcNgatttcacgtcRDaVBttaRaggtaagg
+HcacttccgDBKgagaatttataaaMaRattagcVgtttacaaagagaaaMtgDtttYtt
+ggcttataKaStacaVttBttcttgBcVaataaagagtgagBgcgNcNattgaaacRcac
+tDaaccaatWMtaaHtBgaaacaaccctcMctcaaatctMWttggttttacttagcRttt
+acatRtccBttVcatgaaBacaYgagHttatWDtcctSatRtYggHtNMttRgNtgcatc
+acgacagaHgtYaSaactgaaNWVagtagttagaNgatctgcatWYaDacataHtaWtta
+atHaDgactYgttcaSVtttacctaatttaDgRcagacaDtgcYVttaagaSSKBYtgHt
+DtNtcgtcWttDtgtcNtgacKagcactccDMacDNcccctWataRKcaaatttctRVaa
+cagcaMtataaattWBctttgKgVcatttaVgtDgtatHtgtaSctagtatagcBtBtgt
+atgtcgcMcgagttctacgaaBgWccgaWatgcaRtWtaagYttaNtcWaHtgattYDat
+WRgRWagtRcHggNatNttWaaacaSgcaatMatgacNgggaSatgatttcBHcctaagg
+WactacagaaaagctMcaaagaYtHVgtaaHKgKattVaWtttcctaWgaKattatgMaa
+ttBgaaagtgaSaaaWtSNBtttYataVgNatgaSgcBaaccatattcctctagRtatta
+tctttctMtgaRtctcYgaatDtRcHgcRVtWtaacDtcacYatRcttNgcgaDtVctWt
+acHtatatgtatKaaggtaNcataKRaataacacDctcctWgtSaWcatcDgatatBtaa
+tHSNBtcaataaStHtacttaYaDaMtaagMtgNaaaaNccccgYWHaatgcBcttaBcg
+tMBKggccaVgacaWgaaaaaVYcRKctMgcaccWctcSacttcVtacgaagtYtccttt
+ttaYgttattaataactSttRggtcVgagWRStatKataYcaatNMtacttcgcttVBaY
+RaKttaaYatacagctBgagcttcHcaatBaaaVcgctcacaMgttaHaggctaDtSgat
+attggggBgRMagtaattggattgYYHtVtcttSRYaacttataBtNKgatVaWSDWaca
+tVcttgttgaagScaDaSttcactaattagatKttaMcHtMgKccaYatKataMcKNgat
+tgtYtaaRHHcaWagctgtgcYatMHaatRDgtgttYctatNKtSDtaKgcBttgagtKt
+acatgaaggcgMatDaWtcBatagtaaaatNYtSVgVatttcaNgRtaRaaNBttggaat
+VgaaaaagaaggtgNtttVBgccttgtgaBtgMgtaaacBgtactWgtaacctatatgga
+SYattYtVgtttaagccaRtatRMcgWMgDVSNgataatBRccNagagStHttBgctaBa
+gatattaacaagaggttttcDaRagtcDgtHttcataagaacaKBttaBgactaRatgaa
+DYHttgVagcMcBDgYactWgSgacBataMMcttSaRHgcagKcgaaYaDgttcataYKc
+ttcMWttattaaBacDcttDtttBcatVggttVHtgtMgKcgaaVgtcgMaaHHYBMaHt
+aaKaDttaNgNtttttaggMcWttNaaaDaaaaactRgaatagSVHtaataagttStcca
+atcHataatacMcattHtacaatttctgatggacatatgcaaacaKBatgcagacagVcc
+tccgcaacNatcMaHtcMtaSctgtaYgtStcBtcatDacRggttRgagaaHatVcttYW
+gaDtatgYcaBKgtSWVYtttctWttHtctaYttttaBtcataaNgtBRaNcgttKgtgV
+KgggVtWatcWagttSttttttaMaRWtccgttttattaHatttBVtataSctRWtgcMa
+caattaStBcacggaatRatactVgaagMaaagWacaMgctaacaHctHtaatacacgaY
+agtcttKagcDttaKBHccgtaHaacaKVtcMKcaataaaNaggttSaatcatgaNaaBt
+acggBcaagatcRgttttHaNgtKctYatBHHtaaaDNHtaVtVagttVacKtcYgcatt
+catacaaagtaacKaKKtaaNtNataaNaaSaBtagaattctgacacNtaHtataBDttB
+ctataatagYSctgtaHcgccgaMBaggttaMHtKgttactaaHaacgDatataaagcaW
+tgaMtttgVatcKaattcgHVNatNgDaaYtataHacaaacaagagtatatDStgcNgcR
+taaWVVaDStNgtcaaacgDttaaggNttWcaVNaccctgaaaMcagVYVaMtBgtatac
+SacgSgNtaaaDtRaBSaWcNacgYaggtcaYtattagVStaccgatgSStMattctWta
+ttHtHaDtatgYaatattgttttaNggttVatcttRcgaNtHaVaStgaagactcacaaa
+tcactgataaKBtNHtttctWWtattgactacNtaWatataaaBaatBttgggtatYttt
+YtgttttVttgagtcVaMVgaatNtaaNgKMaacgtaatattKWggcagtgRttgtgaca
+ctaaYacactggaaKaWYRgcatgcgttctBcttggtVaaWgtttHagtcaatctcggaN
+WtaatBNcaMVKStaNcMtgatataatDYMctttcgcatgcYtHtVNgStggagcBtggM
+gccctgtgNtVatactgcctcHcataDBtaStgNcagaYttaMtcaYtgtagatDaagaH
+aaaRcRataattcaDtcaDgttgtatRaaaaYaRgtttDBgDcgaagcNttgcVttcact
+taMgtMWaYaattcggaDcgaVtYattaBYaaaattaHVttttWaacDttaRaSWactcB
+gaRctacaVStBaaatRgaacMSaagaatagYtNctcaatagctNttaVtgctgtttgYc
+ttaatgtgMaStactgDBagVSggtSKMYttDatgtMaaSaVtccSRMgaaaactHaatW
+WtcatttctDgcMcggVtgtRtcatctttNatcaatatYaKaaaatKWtDDDaaactaag
+tacRHtcKttacaataggttWcttataSaYctgctVtaaVggatcctaHVttgWtgHtWt
+taDHaNgaccctatatgcWtNttacctaYtttDWtttaggHNgccatattacKggattVa
+tatcRcggRWMtgcaVRaaHgtaataattttaggtctcDccaatatgSaaaagatDtaaV
+tYgNaHBtcaYttaaaaacagatataaagttaaaDWccMHMattggtaaagtccgaKtat
+DKaVHaBagaBatactataVttDttDaMagctctaaDSggtttgaDacacVatcttNtga
+tKtVaBStatgNtgDKYcaatcataWtcNatYccgRtcgBHacaBaatagaVtagcttga
+KagcgHtttDNtgaagMttSttttgDDKRWtagtaBgtgagtgBcaDtWtaHcctatHat
+ttgttWgagcggDtgtRDRcaaatagcacacRtDgtgVaWtaattRacVataBWacSYWV
+ctgYtWDaVtaKataaacttKaaaMVHaaaaKNtaaacttgVataaaatMaaatMaagta
+tcaaRtatSYRtBtaataattgtttgaWtaNNtctcaatNaataaaaaaattgaaaatta
+ttgtgttaaYatccccHtaNcattcacttttaMgVDtaDMtcaWSgYWcSYtSgaatHtg
+ctagaVattaBtaaaYgatattcgaaBtgaaDacacatRaagcgggagggDMtatDttaa
+tttggaKSNtactRMttactgtBggcgtcatNttctattaVacgttccKtVttMacttWt
+ctaYcacgtaVtaaRgKcttggatSYatattttgttacaaMgtgagagaSatattWcagD
+ttggNtNaaYtaggaaKtYHcttgKattWagNgtaagHHVatYatcattaaaaaYtHgtt
+caaaataattatBgcaKWKtagaatagtatBagaaMtattMagaMtHcWgYcacgttagt
+gtDNggctatNatRcYYHtaacMaSStattRagRcgataaaatWNNatgaaatttVtKcR
+tKtDtaaMcctccaDRcaHtBSWcYtaKttcacaaMaataaMaactccgSgtYattDtaW
+ctagatBtaatSgatgatHKgttgcaaaaagaScHtgaaHRDatSagatcBcggcatcat
+YVaatgMaatStgNgWaaaaMttgcYaaagttSHaYgaaatHattBgtaaMRagSaSacB
+aagtttttcatgttaaYcagYtgKtYctaStcaagcgtaVattaNatWtHgtHKNDtcNa
+KaVaStSacaaStttagaaataatgcDSatgtaKtgMMtcaaagtNattacMYgtgctNg
+VcaaNcDtaaaVtYggtaaaactgcaagaWNcaaacctDSaaSgVaKtctcatataMtgg
+BtaRttKtagRcctgttaHgWRaattgDaaatttHtaccagctcagaccKaaBctaagta
+tWtaVagBgtttatgaHaaggattStaactWacKDVtMHccgtacaMWYctDtagatttR
+ctaccRagtWcWgaaaaMcagttctgacSctaaaactgaatcacaNcaMWtWccYgtttN
+aatttggttaaNtggttSattttcaacgYVccMtcgaactBtatcYttcYDVMttcgatt
+aKWtatttagcaatatcagWatgcRVaatgRtacWaVVBttggatRtaNgRagttDYata
+acDVBcaaactttgtttgaccatagHMtRctaWcgacagtgcVcaaVgRgtaagtRaaaa
+ttSBKacBaatcagaatgtHattcaVRtatVSSaKatNataWRVaaagMaacataDgata
+WHatcNYcMtatttggaSatttcHcgacaYcaKaaatattacHcSaBVatHacactaMDa
+taaaggcacaacaSacctgtaaRgtcccaaaatWtDtagtcaagNtttgatDacDgcaga
+DcWgatDaaKagctDWtttatatWgDcaaaWttStDtKtatSagVgaaKtaacgaccgMg
+aSaatRRcagYtgttNDggcHScaaYDWtcaacgtaHgaStKtgMtRtaatccagtDaaa
+cHgtacaaccHtagataNaattatcVtgaKaaNaaaaaaaagttgMgtcRaNaacagtaK
+caBgtttgaMDgDMacttattatgaDgagcgtcacaaRaagtYaggMtaaactagaacag
+VaMWataggtatHagtttaaHtcagtaaatgRgcatgRctgaMttBaaataagWVtcHct
+gtgtYaaaaVtKtaSaaBatMtttgttatattattcaaBYctBWtggatBtgaggDagtg
+cacVataRBctaBaaaataatttttNggtccgtVaaaaataaattBHaatBaagaHgtta
+agcctaatcaaatgaYtKaatYtaaggtMgaRggtWgggNactaacgaRaaattSttWta
+ataaVtHgtacttNtaagHaSacgWggaYggNStcctgacgDcgHggtttHggtNtMttt
+DatNDgtgacgtatacgatKatataaacaattSaaagcagatKtttSagcaaMttttgaK
+tMtagtcRacctKSttBttaatMtgcgttacaaagaVaataattcaSaaWcBVacYKtac
+aNBaaKRtRtcgWtWBaRKVtYWWWgattgBctaaatKaattaYtMtSBMBHDtBtaggD
+tcNctWYagtgSaaBaVtcttNgtcgttHtgtMtctatKtatVggKaSaagtttatttta
+tgtactactHtHttSMactatHcaagaattVataaaMKNtaMccgtgatDaHcaacttRa
+taacaNgaatcSBtatgacBcctcgggtaatWaaWtacacaattctRVgattctatgtgt
+atHagatagggacVaattttDtNaWKagtatatHtagacgaggtatgtcagtgagHcccc
+aatNataKMBaHtcWgctagtgHaatBatSataDatatcacccaagattttcSatKgatW
+tgaagtcBMataaHaaMaattatgcttWWtttcgVKYNBattggtacttcaaMaVNcctc
+HatcgctVcttKatgtctctBMggacatcaggacSgaKttgagtctKVYaaagtaaSgaa
+aHaWactgRattaaBttVaHtggattagRWtaaDaaatgatttSMBWMaDactScgRYtg
+aVagNctgtSBataKacStHRatctVgBKaggccaRctaacttcYKtcaDcttgaaacBB
+ataatacYMgWgctgtacttttatgaSaaatYcccgattattRStccaaaBagaacaaaV
+tttgcttatagaaacacScccSaNtaaaaBgtaaggcDgtSttRatMYSWatcgtaacgt
+StBagttaVaaaScccSggaMDBSgcaaKaggatatacgtatgcWactccgVctNttMaY
+taaatKaaatgKStaaaHaKatatgBtcctatgtVaBggaatBcgcaatgagtatHcYag
+ctDgtWaaccagtatWWtaRtKagatagtgKatatgaaaggcaWgtNKaaagataWaatH
+aaaaaKMaaatttBtatHtctNactKtBVVagtatcacgtMgtgttaKtaatcgaaMHtY
+KNcMaatgcaSaaDBaaaaagaWaDtWMgaacatttDcatttaBaBtDttaaSMtcagct
+tttRWWaataattcNctactWaatNaBaattaagaaacttYRHaccatatKtaKcNVgtt
+YagttBtaaaaVtctcgVctagctcgSVatatagVtMcaaHRctaHStttNtcattRaat
+gtaRtgttaatYtaagcattgaatttaKtctaKKgaaggtcgMctttcWaagcgWaKctt
+cYttgtgaRaagMtDatgWgYaataKaatSWScatKBtYgtaagagaVcacgctHStaac
+aSgBtgtaNRYaaWtWcKgaccDtgaWtgagMaYgVVgBaRacYtcKgatcagttgtaKc
+gttgagNaStctggaatVtactaSNtaaagtaatcaattaaVaaDattHDBaHKDHctVg
+gcaaacccKMaatVtgttacBcctStgBgMtScgaaHcatgctMtStaVttttcDaNagt
+DVaatYcggaDaYtaactaNgtccaattSacaaaaRgtagaaKgtcRSNtgatBaccctt
+MtactatKgtaaRMagataMatgVtVKagaRagtcagMgMaatRHNttagaagaatggga
+atcHtttttSgtNgYatgtgcYtaatgDctMaaaMccVScgcRgKNaaagtaMtacaKaM
+NaBatagBttttcttttYatataNaWcagatttgMtgaaacaBYtHaaatgtaDactatt
+tNatttKttSattgBatSRtgKHttacgattgcggtaaaaacHHtaNgMcgHaVDtgtag
+aagatBaaagDttaacSatttaatttaccagatataattggVgaRctRtcgccVatRNtD
+gcagBcVaHtBaatDttatgKRKagataaRgcagtaKgagttatatcaMSagttccRctt
+aaatgatcttataaacaaatttcccttaBaWtagtagttMaacMaKaaaagHatYKactt
+tRatgtctcgattBcSagaDKtttHtBaccttNttVttVVtggttacgtaaBMRgatcgt
+ctacaaNBtaVggttYaaggattccaNgRgtagBtgtaBacaagtataaatBaaatKRta
+MtKHgatcgYggDSgKRaSttHStcatgtatatWacacRacHcatYtttaacYatatgtg
+ttNtgcSagDHgataYttNattatcVattcaaYttggtaRHtWtcgaBacgtttaBacca
+BaatgtcgcNagaNtKtaDtgDtatgDaBtcKgtBgatacNaccDDatttYtKggMtYNt
+aactgVacattaaHgMttatcgtHMNtataBtKSgccaVttaBcttattcBaagtgaWta
+RtcctDVRatgaattgatatgaWgccacDaatKaHtttacatNttaWNWgtacaggctac
+ttBaYaaatatacaaaatttcgNHgMgttHctcKYcttgMtaacBaDVtaatttacagaR
+ttttttagcKagtKactatMRtgtDtaattccRcaaKSttagttttBtctatagaKaVtt
+ttgcNagtKVccttagRgWaNaKWttataDgcgaatgMKatgatRcYtctgVagaccgcg
+VgactagaWaaHNtcRNRKaatactcYaNtSDKtcVVggNgDagtttaaKRgttaDcgtN
+NgtcaYttggtttYtatgtaaaggattttagatattKMcatgYaaatcaVactcagagtR
+YtgtaactatagtBaDtVaWatDatctataaaSgggtactaYaKKWagaaaaataaatta
+tagRcaaaVataVagatatgtaggcWagacRWattctgacgcDtaBcYattgtaDggMat
+gagcgagaggctaaatVtctcagRagDtSgKNcgtVcStacatttagNtgatSNgatcYV
+tHattHtBgMacRaattaHBacRcNaaccctVaaYaattcVccatacKcttSagtctgKM
+NagRaNcatNgcgHattStSKYRggtcagtcaccattttagtMaccctggVattHaatVa
+gaaMaattaVacatacacaaattaattacgtKtagaaaMgatWgWccatYtagacKatct
+KatMcggYcgcatgHRtcStVtaatHgSaaaVagtgaatgtgYtattaYcRagatgatca
+taacacSgaYaactMKttatRcgaataaMSatacNgaMatttcggccacgaYYMcaKatt
+RagDtRtatMVBtaattWtMHgNaWDgStaaSNggStcBcVYtaYagaHtacagttccMc
+gtYtYttcattgSWcttagttcgtHtgVRYgaMacttBtatcaactaaaaVtDgataaDg
+tatcatYDttaStgccBacctaaBagttgRtaSBtaaaagWgcacBggttagcMaYattt
+BgtaggtRBaSagttcacgtaDaYaaaacDSaKattctgtSatatgtatggVBcctctgt
+gaaHDKgttaRttttBMHgRMgHagtagMgacgaagttaatattgRtHtHttatYaaagc
+agatgtgattagtggcactactVattagatctctgtttatcattYttgatHcHttagStg
+atgactctDaaatcagtgttgtttttcYaaagtatatcYcaSaacaVttcgWtatKaaaH
+WtRgtttaKacttctgaaNaYacctNtcStatttaaagttKgtgatcctBcaBtctttaa
+aKagttgDtWctDtgtgctataKagtaNHatctagYgatcMgtggYaagactgacactta
+RaaccHgttcaYtagWtggtgBcStacaMcMHataaaNagatactccaggagttaatcat
+RttttgaKNgSgcaggtgttRaYcaaataBtaDtatHgBtatacKaataKtaggaaatat
+gcataaHgaKttttatMaaaNgMatYattgaatNtatVaggtKctttHattcatttatYt
+attagtataYtttagYcattagaaataHtaaccttactcatYttHMRagttctDagNSVg
+cgVaNNattctVcaaVagaatttaagaggttttacRagtagtaaaBaBaaMtaScKgVaR
+cNtctgtataagtatVgtDgHaYttcHYttaagatRgtgaattctYaaaattRtcWtacD
+DaRatcaKtaSacaagctaNttRYagMSDKtWgWaYNgaaaatatNtaatatHMtMWRaR
+acaaaatgctgctacNKaKtagttgVatDaVccatSDtgaSggcgWatccBgaaVtgtaW
+ttagatVaBWtacgWtaYattaaatMctDgDaaKatttgaaatgctWctttaHtggHaBB
+SRVBWtgattgagatccNcaaaHttccgVcttaDHtNgtttaMggccVWaagattgKcaa
+cgagtatgtccctctcttaccDtHcttcctBatcStVaactaatctacatgtacataacD
+gcgaVttataagcaaRWataattcggtMaaBccYgRctagatctNtBaggacMaaaNgct
+gttHgScgttaaVgattVDtaaNaccggatatHatKcgataRtaMcagctattcaagaga
+atHcYRNgNgcaWtgagYtacttNtaagStaVVagctgcaaggHatgtcaWgaattKttg
+tcgaBcKatKKtDtRtNYNtctactatgcgatgtaacDtcaYgaactSHctDataKtcaa
+gtccVRtWaaKMRtagKttaatagtggKttYtaKtVataWYgHBatataatcatNMRtDY
+aYcttgttHagRtYacgaDaaMMtcagattBVScattYcaataataBWaBatgDtBaKaH
+acagtBggaVtgtgttRtgacataaagtBtaVgttaNaatcaSgcctgtcBBaVttctHg
+VttcttgttatccaatacaNtgcgctatacctcatHtNaBMtgtagaDtKagtHatacct
+HgtgaDVWtatcWgtatScattactSgatcWatatDataRSgctHaaWataataYacgta
+cgtgDatHcgtaacSaaagYaMataYaactggaagtKgattKMaatStRgtatVgttctt
+KSMtcataVtttaDtgttatattagWtatNaDcttgccHaMDttStgtctgagtRtatRS
+MWttaStcatattaNaDtcaatttaVatgMtcaattagMYWaRcNtDttcaaagMgagaV
+HtatYaacggttScaaccVKHaaatacWagaataaccMatWgctDtatttgaatBtNttg
+aaBgagaaWcttggatcRctctaDagWBcacaatMStBcBWtatggtagtgaagaMKata
+cttaYHtNctgttHSMaWttacaSaatgtattttggccatatSatcgctctttgaRRVVt
+DaatcSYHcSDNacattcMDaNVagatctSctBcatagtggHagaVtgtSactctSHaMa
+WtgtatcattWtacgaaHatatBaaSaYacagtaaaagtVacatKtatatataVtagcgW
+ccacagctcaaccttRtatNactMtcattaaatttNaaggctgYctctacatcaVgcMHa
+agaBttcgYDaSRtHgaaaNcaWYBggataatBactgaataYgcgtaacccactHataag
+aaWgcgRacccagagaVtataggcttNtaaaaHatacatttttYYatHattgaatgtNct
+tatNaVcaaRtKctcgaaWctDttttataaatgatagcgSttcVtgatataaataataBg
+aatgaRacgagtaRctttaactattNagtcagtgtgaSgaHRacgVtggRccatttatgt
+MtattaNatgttaaatRaBRttcatcttaRBtNtaNSWgtVSgcNacBtWaDgaaNBMga
+gaBMgaHaHagatttctNtWatcaaaaDgtgcaaWaataBattaNtatgDaMaWDataNt
+ctatDagatSWctctggaccatcaBgtatattaaHacHgattcgatgtRtaYattactNt
+WgaaRgcgDaatactgWcKaMacRSaSaacDgtgSgSRaagNtKttattcattaagtctg
+tctctataaVgctHKttgVtgacgattgRYcatccWcMtaBagaHacaaaDaaaRVgcac
+atgatYaatatttMttaaWBtctcgaNcWDtttcagYKattaRtttagHcKaacaBcagg
+taacctaHtaMtttaHacctVacctaaagtcactttcWcaatggatSaataHattacaMg
+gtgaaWaacagaaattgttggRggcgattatWtaKtScWKggtttcttgtcMaRgYYaca
+cggagtgccDcDattcaaacHaacttSScaaStMttaYtgtcWaaaaaaaataBataWaa
+tatBNttcgttgtVatgacaHtgtacatHtaatgtKcatgSatacVRcVctttagNttaa
+tKYgHtRccttDBggHgDtgaatcaagacacWtcgRWKaactgRaDNMactactgacaDg
+VgatcaagNRatacagattSMttaattYtgWctRgttaaKMgggaaataagttatgHaSc
+YaattccRMggSagaKKttRggtttgDtcgtcMttttggaDgcVctYcaaataattSctD
+accatNataDtaaaWtttagHMSSaagaaBgatYaaggNtagtgctcMaatttWMggtct
+atttggaKagaggatWcatttgctatcgcccBacacttataagaYtcNcagaNatcaYHg
+NgaacRgtaDgaNYttcattRtagNDcHNVcgDctggDatDtgNaaaaaHgaYagtRtca
+aDcgcaKatcagttattcataaccNaatacacaaYWcatBaaaacaRttMgtaattctWt
+tMaMtttccgaNcatVtgatcBaRtttgSaactcaKYaaNtKDttttRagaMcDYgcaKc
+ataVaaagattcatatWcHtagtagatttctBtcWHtctaRgaSttgHatgaHMtNtaac
+tgaaaNWtDctgDcacattMctNgWattatatctSttaScctaDaatatDYataaaaata
+taatNctKaNaatatcSgagttaagtKDttaaStaaHtttaatgaRataBtaVcBtcDWW
+aaDaacacRNtaVggatattatagtBttggcaaKcacRNgaaYaaMRaHtatBcaaacNa
+taKacttaMtaacaacgRtaattgggaRcttagtWataactKttDccgaMcacNHKtatt
+StaRcSStDttacggagagtMtaNHatttWRNVgaaacattcScatgctaVSttaRaMag
+atcScaBggtatacgatVttKcVtagtgccgtcDtagtRagggcagggRRttKtcgtKDR
+aaatgatVttDtcatMaNKtNacagMattgttcaacKaatYKttaactaatgagatttta
+BattBctcaaRWgtYtYBatDcattggRtaaHttcaNagagctcaRatBtaagHtctctt
+RatagBttHtgatgattgcRcgtgSaagcYaccacBWgtaNtctagacgaaSatBNtHMc
+KagttaaDcHtaDaaDtttccaatMcaSaaacWWggtgDtgtMtcacggcgcWttcBcta
+aVatggaagNgtaacctagatggYKRVttRtMcgttaagccaHgatHBcgNtctMKDcYt
+aVttHaaDWcYcKtttttgatatacataggaaaaacWgctgttatWHaggatcgtggcat
+aagaaaWtttgatcaagaDatgaWtRtttgMagcBattcNaatNcKgaatatWBBcttKV
+HtgcagtagaYRatcggaagaRtattaBNttattaataatatgtttttaagMggggMttc
+tBgtcgaaMctcctaVttRtBattaatattgVDcDtggtgaccBaNttDWaVtaaaaact
+HcaVtacKMtgaataacggHtaaaatatataYtacBcattttSaaSttgatcatccacat
+atgcYaVcattatcaagacYcMaataagaWWcBataBattcBtaKatgtaRgtKgattaS
+ttYaHcgttHcacaatatKatgRMgatgatgRaattctKNMRtggatNttttagYRtgtg
+YttaataaDcttHaDcctttgggMtcgcMgNYtcNacttKtttttgYBaHMgcccgggtW
+ttatVttttMtVgaHagDNtccBVaaagtaKttaaacgaYgHagVatMgaacBaSacNaa
+aBcagaaaatatttaYgaaSccaRacgctgtYcctttStttaacgatVWaatKtaBtaaa
+taVaBVcctgKaatcaggaDYatgVcgctaaacVtcHctggttaDggtatRatttttaaa
+tDttaMtMaggtMaattaRcaaggaatVaaaactSRctatttWaDtBataaBaaKattSc
+SVgtatcWaaaBtattVtatttttatYtaatacRKcgcgYtccaacVBtagcttYBtgtg
+ttaataataWactatataaVccaNtcaBtttcMagataatgactMBatBctaaRtatata
+aaaaaRacagtatYgtHgcaDgaHtaaNMMStKtDgtaaaaactgtaaccBttMaaMDVa
+aaggaVatcScMRMaBttctSgacKaccKcDgaWattHVtKaNcDaagRSgcgcaRgagt
+acMKtWaacRtcKKtBYgtagNtatgtttVttatcRaWtattcgtttaDccttMVtatgH
+agaBgtaMWKtcVagaagcaaaaStaaatgagaWtttDttttagNMgVttcWagacDgaM
+atataaataagtttgcctatRtttNtcttggMtggVcgaMaBMgaatDtVaDgttaaacg
+aagVtttNccaagtgHgtgtcScaataaRYaactgcVWtaNRDccSggagttattatgcc
+tMaaNcgtttVgtcaatctaccaDMtaattBaatMtKgaDcBggatVtaattRBattgcc
+catgaNtttMDcKtgcaccttccBccaatctgDgMSgaagcactctaWtattgaHgcDaa
+gVRgtaBtaaRtgtYcYttaagataaaHaHataattaattaStcttcgatHWaaRRSHct
+ggttgtccaacaDttcaKggcVcgtSBctBNaRaattcgcatagaMtNattStRSaaatt
+VtMtgttNYaatgtaHaKNSagatcaHctaaaKKgtaYatDgaaaBKSacaatacRgDct
+aSagVcagDgtYMtcatcgttcRatgaatgtcBSKtSagcttagKKccgHtBRgttStgt
+BaaKaMtaaKHBgaVaVattaatNNgcattgagtcaBaggMgctHtaatatttDatcWat
+agRatVaaattNttttaaVctYagtRaHttatttaaaVtaccgtNattataKSRcgcagM
+gaaMccagaatatMgtgNtcttNtgattaBgaaaagatWtccNtDggaaagaNttttNtt
+tSggtDcaaagagtactccattMatataHcgcHMBtgaaKHSYtctaVtaattgtacctc
+tctaaaVtatgKaWaacagttYaMtNgDYtttcYRtgYaWaaaacagataaacgtaVatN
+aaBtBattcctWaaggcacatgWtttaMtVtagatatacgataMtttggtVBagatctRa
+tKggttgcYtacSaMStattBgcatttKatKtVgcDgcttNaaataatWNtaDStRaacH
+tacttacataatacaMtYgcggcatYcactttttDtcaacBtgHttggctttHNtRcgat
+ctcactctcattMtatccgattaggtgggNgagacgttctDtHcaaatacaVaaaHttct
+cMaNtaattHWaMYgatNacKNNMatcRtNtYMgVtataaaatttaaaBMtaaaatBtaa
+acttgMataaaagBaaatBVactagaaaHtWtKRHttgaatVattctttgaNgaDDtatc
+VWtDaataaaVaaatgcaYaaggatgggcttaaRataaacttVDcattcaattgtaBcMt
+gYtBtcaMKcRNaKRtKcaatttgatWgaMagtWtgYVaRcagattacaWttgaataaaa
+WgHaagacggYccctBtWttttYVtttggatKBtVagHBgtaatgttcgaggaWtDtgat
+attaMaagttcattMtttWcgtNgcgaRcaactaMgaVHctctgcgagKRatWtggtcgt
+WaaaBctcScVcaHatattNcactttccBtDaaNtYggaattRtcggctaggNVgDcgaa
+cttMatNagaagtaaRaaRttggtaVSaagaattattcaatNttWcaWtaggattScaSt
+gattBagVBttaNcNaSagttagtcttDccctatBatHaRRttaacBYKKtattHVcHag
+StaSaatNDDatcSaVgtgMttaHttgttaataatcaYtDcatttHNaRgWtgtaYcaaB
+aagaatYaagaccKggRattttaNcgacStttaatKcVtcYtttcggcaaaSYacaKatt
+gSatHtWtKVcagatccccStaatRMaatgtaatKtcDgNaYaaBttccRaaacttHtaR
+caaagtatgtctaaBDVcKSKVatSagtggttaatcttaVNaagRtctgRataKgcaaga
+ctSKattaBatNttggttDtgcDataKaKgKacaWHgttScVaagaWtcatHagcgattc
+BBtcWaactBatgacBRctgatDcMaaVDattWaaKtRcctYVYacggaaagVNBaaaaa
+attKYaKcMatgagcatStaBtcctgaHgtttacHacgcttatgNHWatgctWWattttg
+YaaacctaacYcataVtagVagtVtNgaMagtcgttatcYtaagcatgKgaaagNSattK
+tttaaggacaBNRatttacatttHctaaaHactNcNcaaaYBcacggctcaaHagaaSaa
+gcaWtcaaaDaaBNtNacRgtttBSVtttccttaaDgcctgKSttgtcaaacNMcaBtag
+aWatttVgcRtgaRtMttgccVttatNtatggacaaagWgcacNatcaDMaWtcHgaaNa
+MMtttgcatHtYDcDactttRYtaaatMtaVaaattggtgtcaacatVctBtHctYNaca
+aactcaMaaaMcHgtaactHaaWattKttactYataagaYgcttattaWMDgStMKKata
+tDataNHMaSagBaaaVtYtgVtaNtataDRcBtagttcgVKagggatacaaSRaataaa
+tagtaataKatMattVaSatSBtagVaYccaaaYacaKSactctaaHctaaaSaaagNtt
+gactaSacDtttcattVctccagYtcNcagtWatacattNgttagagNctaYaYNttKgt
+tttatKacMgRatgaaacVccgtcaKaatHHcacRtgtgDtccatHaaaRtNgcaSagtS
+tgWKtttgBtHtSagaaacgtaSaatctacWaaattagagaDaWgtataMtgataaDaaa
+aaaaagttcBggaHaDWWcYctYtcatctttcaBtctBaattattagcatgWcacgcaaa
+aDaactRVccBtaWaatYcVVcacMatNatacctSgtWgtttaattcactaaagcHgaat
+cHatcaBtgtaWatSScMMgctatctctRaaaWMgttaKaatagBtttcttagaggVttc
+aatRattNtccatttcagctactccacMatSHtagataaaWgaagtttgDcctaagtMaa
+aYagaaattttVattRacatctgaaccataYtcaaatcaRttaStRgSacctBcaHcgtM
+cccBaagaaagaDaaattKttNtaataaMgtctYcttDgaactaKaacNgcaRccDKtca
+tgaagtactcgtgttcctBtBtgttatDtctgaactataacagtagStaaaaaatgHaaa
+caacYgtgtgHacaaattgttcSttBtVctaHaacttKtttttWatBtcccttaaVaaca
+MaagaattcaKaSNatMScRtgaaaDtSStDtHtacNtNtaHtMtNMNNcWtgctctaaW
+ttaattaNtttKtBttttttagcttcDagMNagtcKWatVMgcttBcgccttttgtBtat
+atttYtMgctaKaacttgattttatctaatRagtttggKBSatagtaVVcaattMataaS
+BtDtaBaactgSgtatcaactgHataacaDcaRtcKttatgaatcatacgcgaagNYaNg
+aaacaattatHMgYgtagatctctWttacatVgcgRcMaagttgttDaNtScgStWgtga
+caacacggVgcgaSctcactcaaaaYtDatatBtattaNgatactctaagtWtKSgYtat
+ataaaaaYagaggttaKagtcYtNtgaagtctBWgaWtaaBaattStcatgNNtttagMt
+RDtWttgctYattcVSBaMDcagatVgccatMatttatctatcgtBgcScYtaaccaaHc
+attgcagtcttMNVaactWWKcaaataNaatgHatgaatgtMStgccattacHNgVataa
+YtgaggtKttNBVtYagKacHRggYMacDatcgKtatVtWaKgtHatatMgttScgaaVH
+agaaattaNttaatatgcaaacttWgRagaaRBcNcatctaagtggatgVKaaVgNcacc
+agtatgHKgacaWatYcSacaRaMgttgcttatVcaaWcVaKaaaKaDtaaaatcgVacc
+atcgKgtDagBNKNatccgaacgtKgtYctgaKaaSKcccKgcVtttKcaaYtagcagat
+VcctVtgaMYctaccMcgDtgBaRtaaattaaagctKtaaatatatVgctgaatatctMa
+tccaattacaSYgcactWttaRacattgtNaYcaactatNNtaHttYcStactctatatc
+WSaccaVNctBtaaagataNaagtaaaaStBaaVtggttatttagDScttttMMWctagc
+aactBctcttattSatacSatttRtBataatcaaKVSttaaaaacaNattMBcaacagtt
+tcVtttatatttgtaaKBgcacattttHNNaVtWaggaDataatNaWtBataattVacWa
+aattRHtacaSgWtttataDMcttRScttttaaaaMgatacMatYccgacKMagVtWcMt
+BaaatDatatHtttDtaattHaatctaHgcgtaagRgWaccattgaStttattctattcV
+acctccBcgttaNaacagNWtagtaNgtctgaHaacBgtatgMcRVatataatKNKaagt
+ttRgtaYcYcaMaaagattKgaaaaKcttgtaBHNaWNgMatcacctgcaMggScBaRgM
+MctaDaaRgctcYtaacgtgtatacttcacDaKtatgcaatMtactaHDtaaVcgaagaa
+aggVaMaatYtttttattttatMggaVYVaaatBaatMgctgWctaagKtctgBtKacaa
+taYtgctBgKgaMtgtgataBagttMaagRcccVtSNtaWcgVDctcaSSttKaaaaVaD
+ctacYatctcHHDtgattaaccttttYatattcgaaHBagWgYtSgcMtMtagaHactaS
+gBgBSatHtDttagaacSatcccaYtatttgtgKcgDcRatctccNtaagctagBVWaBa
+aMHacaHctDVaWgtaBtaaStVtDYtatacttgttcttggNYtatWBSNcagatttgBt
+cVaacVtRgtYaatctatSatagttDatgttgtKagtctagKHtcttttaccattcccct
+aaaaSatttaDgBactaMttctVcaacVgtaSYcttgYaaKaggtaWttgaaaYgagata
+atgccMgSHatHtacaaMatHDttcaagtaMatgtaagtgtaggtDtacStVaHcaacta
+tgagttatataaBHagggccHagtaaagcRgcttagYaaaaaagttaaattatYNtYcta
+gtttaacBataaWactVtRtaatgtHatctagacatttaKagStttgttttaaagtDttM
+tgMKgcgttaactaVttHcatccgctaaaaDttSMccttNaaccattacaBcHctVcttc
+tYtaaSSctVtRVattaaagtHtaBgttcatacRcctKctHVHgttKtcatctatagNSa
+acHVatcVgRtgtaaaRatYtcgggtBtgcKacttgataRttDattatcMaggcWWRttc
+cgaHttNtacYtYactgtatWaaWtaaggtacaDacaDgttStgcttatctattatgttg
+StaaDaaattagttRgtgcBgRDtaWaggMaaVttVRtcBttatcgttBDgVgatttKga
+aaMttatatgattataWctcWMgaHgaattMDatgVagtgatatcaNcaaaataSttatt
+ttaaatDgtaNDNggaaacgataatttaRaaatataaaVaagttacDtgtggttctatRa
+tgcBtaVatVtMtaYtttaaYgaHttgttgagctacttaatatBHtctttaagtcaHaWY
+tKttacttgtttatagacataMgttgcaBVcttMacttYcHcNaDatNttagatcagaat
+cttatcatHaNtatcMagYaacacMcaatacaNRatDtaHDHtSYgaatcRaBtKttgaM
+KgcDgtacgtgYatHcggatactDDctaVRgtgctttRtatgtaaaccagtttacVtatt
+tBcatcRaaYgcaMaagaacSctHRtctaWatatacgtattKaNagtagatataaWKcgg
+gacgaRWttNacaaaaagaaatgatacDaaaaMataKacatVgcgVcgcNacaaHNatta
+ggaacattYtcRYtggtatccBatcaccgacaccagaaagMgataacHRgttKctDaggM
+aKtaaatttScBtcagKBgYtaRKttagttttcBaaHYatgattaaDaDVacaagKaaRY
+attaMaaagVatattKactatcttDacHaDaatBcactattKtKtRHggtaSctaaaaag
+tttaggBScaatcgMStttaatKacaVBSattaKaaagacacaaagtaattWactttacW
+aaBgYtMcMccagRtacaatatcttatBacgNagaRtctHgaKtMgaattcKYaaMacgc
+aatctcNgYgtYRaHagYtcVgaagaacacKgaRaacgBtttagDcgaWgaYtKataaDc
+aBatttccgaaaacaRRBaVtRtgHacttHgagtMttWattMtBtgDaNtgKtaaKDccK
+gctaMRtaNacattacWcttacBacgRtRttaYggcKNattagtgactttcKHNcWBYag
+ttgataaYagaWaSMttgataatctataatRtggaKtcactWaataatYgtgcHgYKtta
+aaacNcaSatgcggacaBaRattttcgacctHtaKYgttaaactataRaaSactKatSgg
+atgtKYtatctYggcMtactatgtgaWtttctgYDttggtBtcHBctactacBcVacaag
+tgaatSttcHttttttatRYYaccagatctgatgacgcccVataagMaggWgYtatctgt
+gtatcWttRttcattattgYcHtgatcVatcttVSataactgtgcgtgtgaRWaacgatS
+gaNaVKaaaaMttccNtWgtVaatNtHgttgatVcttatcaaDaRScagDtaKtatttYa
+SctttctcatccttaattagttaaatactgctgNcttgctcatatatactaDtagctagR
+cataBcgccRaacaagcacaagtaHYaaatgttaaRgacNgccgctcKtacataBtWtaa
+aDagagactacaccacggaagcStHgggtcatDcKcaacctctgDVRaYaatattWttat
+tcttataatWatattaccYaagWtgaataatgatttgtatBYSaDctatRattgaatDgW
+tMacggtattttRgtaagtgWtRtagtSctVtaRgttScRcattacYYatattaRaagga
+ataagRtttBHaggtattacBHMcacKaDDagtatMaaSMacaSggtVVgacctgttaaH
+agtactaaatYtSSBgaKatcMVHcDtatgtagaVgtWtMcttctYRtgctRtgaacatD
+ctcRaggatRaaVWtgHtaMgaattaHataStgaKRaVacataDtgDRagBHttgNcNaR
+DcaaSagStDgaStattBtBNHRHacaYaatcagcatacDtattWctgcMattaMaaWgK
+ttgRKgcacNYtcatcaaKtctaNtgacatMatMgYagNtaRWtgaaatBattctaStYg
+ttcSYatcctMagtgatgcgtattKHKtNtcattcacatccDaaWattgcacMattattg
+DcttgaBgccaMNaacattctcaacgaggagctaactagattWaatgtagtcagtYtcKt
+MVSagWagataaatgtaaVtaSatcccVMttataacaVWHNataWtgccggBVYtacRgH
+atagVtctDttaccaataSaDgcggtttcKaggtaaMcatgMttaaDacaccagYgtatt
+acWgaDtaBaacctatgaWagacaYttcRHDgDgaaMtcagRtaattDtaagKtYMMaca
+gcaYacgtWtctcaNcaagttttctacVtatagttgttDgDRDtatScgatgcgagggSa
+cttcaNcVaatKtattRtWttaVagtaaMDtMaattHtagtttaSgWctcctggNgatgM
+ataNRcttatataatcVtDBHgtNaRatgctttacHtRacgYtYaBBtaScWtttMKcSt
+gRcaSgaagatNVtagctgtatVtaaagttcgWMtgtcgtHtcacSgaaWcgttaMcttW
+DWataVKcaatctattaKgtattcMttattcgtatcaaatacaDtcacatatVaatcSgt
+gDatBtgtagatgtagttataaagtctcatMNgataNgtagKcatgaagKcYgcNYtVtt
+YtaHKcattaaMagaataRWacgSactctWgtcgtaaaKaWagRaBataRSVatccYact
+tcaggtBVatKtHctatMcttctgtHttcataMgttattcttRtYttagNtVtDatattg
+catYBtggKtctatcYctDtagHKBNttYKtcWtRgtaDatgaaStgtaMagcBgaaagt
+SctRNaHcDgtttcYaacBcagaMttatRaVacgttKaaaacMttaWSgWcNRcaVgSaa
+aBatNcatttatttgYatttDgtcaatgagaYNattggagcDagagatacNtaacaWtBH
+gtatNtaggctaggcaacYBtatWctgaRttDatcgttKtaNtgaaaHaYtcgattgtgc
+caagagKatcgatatttcaDHMMttVagaKRtaKtDacYgtcBtaDMacagatHcttcag
+actcgtagaMggtKSctagKtaBYMggtagcStgNgaacaatSgattaaKWNaaYggaaa
+acgMaaattgatagagaMtacacNacacSgagcYVaattHgatDWatBtaattaaYttgD
+aacgctcRatatacVtcaMgcBtaagattgcgNtaHDgtcaaaDcYMRtgcataVgtaat
+caagaRccctYWccaacttagaagaaNgccHWaaaacacaMgatScgatgDtWaaVtata
+catggtgRNattattcaatctBcttatDaMcaaHttatacaaNcttgtttagSSatgata
+cccKttaMtcatWgaVataatatgYYtcaHaacactWHatttVYatatgDactaaggcgc
+aKcatHaccMtccHcaatgtWtctttatgWDatctgWaagHVtDggaagagtYHttBgaD
+KMctMHccDaattMatcaaBtBcagatBcatatagatttatDtNatcaaaatctgaaSNa
+agatagtVBtagctaBVNtStWBgctagtYgatHNatatgcWacWtaYtctatatgaata
+ctcattagatcgHgaRattaatDtNcaaDgactSatactgNataBYaHKaKaactctcHc
+KHRagDttgtYgtaattaactagctatatataaKcattttgcKtcaacSttgHRaagacN
+aBtatacataaaaataVWHMcaYcagcagRaagagttBttaaMtgatacSDaNtttgaag
+RtattaHtttagtatYaaatcaccgaYaatattWBtttataactMYactaaactaaattt
+cNcVatgcVgKVatatattaaatccggaaNaacacaSatgcttgcHccacatgatNtatg
+KaNtgctggagtctataHcRRScSagcactcaatataggaaYaataaagtKKaaaKtBtt
+YRtgtcNVVaaaaaatatagaNaSgattDtgacgtctMatcaaatggtSaYtttaatctt
+aagcKataaMDaMctgtYcDtgaattRctgHaatgttggtcttcaataWacaaYaNtacH
+NtVWagcHWtBBYagSagcaaatcKgataaSgDHataaacattKBttWagtRtcNagHct
+taatBccgaaatVacggStctaKaRaVtgcaHBcgKVcattttHgctttgtgacgaBttt
+tccatccMatRcaVataattKattaaaagDatVttaSRMggtacttKHaacaatgagRaW
+cgDtaggcataBaVgttNBcgtagSttgccYtacWcgagNaatttgctagagacatacaa
+ggataacWRtcDaacSDStcaRtcDcaaaHgtatcaDRtgcagtDtacBtatDMagtatc
+ctagtgcDaSaaRtcaRactHgaaatccaRtWgaacttattaataScaDaatYaaaWaRN
+cagtaaaYcaHttBctaattctNggBYBtggaacaDaatKgcagataHtgtcKaWctaVt
+NWYBgttttgtHScaBctRccataataMaaacatgaatatNatgagtWgatggattgaNt
+tataHcSKttgtatcatBtDtaWatcaWaDNgtagctaaaWttBatDgMatgagatctKt
+taHactataSgattRataYaYatagaatDagtaDaagatcKcYgtgWSgtttttaYKtSa
+tttgYatgYHStattaKcttatNNSataaaacHBtaKgcataggYtacgtttccaaVtaV
+aHDcaWRYSBHattattcaaaaBatataaggaBtaacaYcgHgaatgcggYHagtactNa
+gaaatttttacgaBcaaBttgagtKtYHaKKgttgaacgacacgBtWDtSttgNHDMgaa
+aaattcKcatgataMKttVHVBacataKaatcggWtaccagMtttcKgScgcaactattV
+ctHScccaacccHDtgttacgttHVaatcVgMtgttcatBWBttDaaactattcttaaac
+taYtRtgtaWataWggacVgtggWtatgtataaaHNctRgRtattaagtcgHgWStttaW
+DacacatcaHatttVacttagcgtHagagttgttcatcatgcaHcgtcKaagaRRacaat
+NgtYDtatVgYccaYKVttDttBctYcttaWtatgYtaVttttacVatBaYKSSVaNNcc
+gctgctBtcaagcacaNttctataYMatccWacBcgVaaatagWgccRtHMttHgBactt
+YScaaVtgSgttacBtctBttaRtSMgttaatNaRatgttgtcatVtaaYgVgcVaaYSa
+NcagcttatNtacgatagtcgaVtaacYVaMttggataaagatStcaNtDttgcBacata
+ttaDWatDatcaatatNttagttMttcaactacaRHYtcggaacVHtaggatDggStgSW
+tVatagctgtttaagBcccgBtgcgtctacYaBatactYMttHttVttaWtSttgKtctt
+cgtgacctaDtttMYMtaaaaaattcaMgWatBtgWWtaScccttaaVVgatagaRtYat
+aatttgKaVHtgcataYtaaaaagStcaRaMaattWgcaacaaRaBaataacaMNataga
+tattatgWtagcgVHcgtcatgaHgtRatcctgtcSaaatWgtatcHBcatcatcHaatt
+attDBHggcatBtgttagNDggtcRttaataVtctttStaaggtcccBtccaBgBRgaDa
+atttgtttgcNtatBgaaaggcgNttatMtggtBgMgatactDtcatMaaWctatttaaa
+acYNgtSgMatBcSactaKYaDVaVtcagaaaStagttYRcaaKacaHaacagctNcatt
+tKtttaaacWtMNaatttattaaVgaMStMcagctaWgaSccatNatgMacataWaaMta
+taggcgtatcctagHatttttVaattttSBttScgtBSatgaHcaacgaVtMaaaactKH
+atatttNWtttataWtaatVttKaKMggatcMaaattattMgatttgtatRtaVgaaDta
+cacRtaaaaaMttScaggRttgtcttSatYWtVMactagatVaMaaaDtaattttaBWca
+taaggaatBtRgtctaWDtagWtaaWYSaHaaacgatRcttgcatcattaSDBBKttttc
+taYSaactcgYacatttBaattKaaaccaMStaHatHtatgtctKcWataactctcVNYt
+ttMttaDatSacDKcacaaHgaggaaBtgNaaaHtattgtRcgacDtYtctttMttatcD
+aNgattagtttYtaattBMtaggtacatgtYBNttcMacaagaaaaaKgaaatcacaNtt
+gtttttagDBcMgtaNacSatcWBWtataVatYagtttccatatHtttDtcgtggBggcK
+acaBWtBcaattgMatcttaVaacVYgMgttDcaaactctctcgcHaSatYVHRaaatcc
+MMtaDHtaaKccactgattatccatBYVDacgttMctaaVtatacaatBgaagttaattt
+tgatatgcatKgaYttHtatggaaaatcaDtttBtatgccacattactcaaagctctcBK
+caagcaatataNtattcVtcataacMHgtattaaDtctNaNttYWcWtaVatatataWgt
+aWtgaHtattcgagtMVaHDHtatgcttctaaWYaatttaatccaMactKtcgtDaDVWt
+taccVtacYBgDattKtHKSVStgMtBgcgtDRSatggatatDKacataWtatWaVttct
+SRWgtcaWattKaaYWtYaHctataKacMaagtctRttaatcgtgaHaggYWtcgatKtt
+KaccttacttccgtttHcgtKtcttaatSBgaatttcVKaMattVSgDDcaattcagtca
+taccBccgtgaVtaggttYgaNagYcHatMYaattDgtttaaMagRactHattgatttaa
+SKtSccggBattatatKDacaacBgVWBaaacaagattgtcDtcttBgcattatcaaaac
+agNtaaDgtggVaacYDgtttDtggKccttaaaWcacgSatacaggtagVgatacctBtt
+caattKRtctaMgSattgtacctatataaaMgVtctYMYYcacttRaBgDctRtttaRHg
+cRSMVaaaaacagaYaagtaMatDaatttaggcctNaacgaaaatgNtttaBtMtScVtV
+tSacStaBggtggtKtRcatagHattcctggaRtaaKaBKtagttgaattgtatttMcat
+gcttDaWYtaVtNDgatKtHaaattaattaaStaagWaaBtNcaccaatRcacttgtttt
+caaattctggcccttttBgHccatcgaWctataSttBgataacagtacggcccDcScaac
+tgattttaSWYtaaaMaVatttagctaBgSaggtNaBRgStDaatDBtatcHgDtRtgMt
+StWaYaggtaYatBtaWaattgaaYattcBVtaVSactWaWgtKaatagaaatgNttHtg
+tcaatMattcggtcaDcVttgataMNttYVgSSYMWaVtgcaRaaccYtgccattaaHVg
+aaaattMtaSgtaYaggctataBtcRtttaaBtcHDatDgtaaVttgcagNcatWggNtg
+RMaDcYgYttacWNtgcaWtaaVaNctVacaaccRcacttgMttgtRMtgtccatttgKa
+gttctVagcttccaccaNgtgcatRgtSBaacggaattttttNagtDcagaHaaaatStc
+aMtctagcacactHWtNtgctcgtNaWatataKcMcWtagaggDaVatttaatttYSDgR
+ccWattHtaggctaccDMctacVaattBYtDacaYctWaHaaHttcggaMKaacSagtat
+taaatDttNaVNtacgVttKaaHtgagttWcKtgtaDcDaKacgtactctttacatSgta
+gtaHHtgaaatRtttagttMctacKgaKaatBttataKWMcggtttatgtgtgaStaaga
+aRttaVtgttBaHgNtggaRaWataacaWtRWacaactcgHWttttaDagScKgtgSagt
+cMgaRgttacccaaaKRaaatattcKatttNgtMaVcataccaKgaWgHBWagctaagtt
+atcDaRVVtggaaHSVacggttaHaWWagtSgctctVattKctKtMatHWcgccttaYta
+gtaKDaVcHtctgHagatcaSacaatKtatgatagDgtcgttttgatVtatStctYaYNt
+gtgKaKaVcVNgaattWccgattcttgaMaRattRgcaatHctcattaBaaMtattNSSt
+tHcagRKRaaccaYacMDtaYaaaatttRataBVtcacaagKtatgcctcatcgtgWata
+agcgtatcDtNagcatNNatgttcRaaScagaaaRaataMtacMSctKtDgaBactaggt
+WgcRtaWcaYtgtgWaagDKattttttaaccaaatDHattgacSttttatWaataatDaD
+aaaaRtaYaggagcYatacYaKaagaaNtaaaYtaVtDtBaaDcgtttKMtggcagtVat
+gccggtHgtgtaVaacDBaattacaNatttMgaDgcaDtttggaaMgtYtDtSgccaaaa
+YcNgaacDVgcattaNgatgaaDaBBttgccatttRtctaatgtHNtaaatBtaMaVatt
+cctggaaaaatMattgtagRDacaaacgaataWSBctctYVcgtSaMStgtttSatNaga
+acaRcagtatgaNBtcKgBttRtattVtaBtBaKactaWaMgRtcMtaDtYtatHattSc
+ggacMtaggcataaWaKHaataaagYcgWatatStBattKaKagKttacMaRacaSaRaa
+WtKaatagSatcgaaaKaaVcDttcVcgaKVattggaYgtMataaacRtaDaactNatYc
+agtDgttagacBataRYRDgttcttttattacBcHatgaRacMaactcatVVtttaaaHg
+ctgttcaattaVaHtDcaYKacgKtcNtttgctttgHWcaaSactWKSatcgYaNVaatt
+acRcatVNgtagatgcatYatVaaYWaSactgatccatatNMaNagNtaatcgttaStta
+ttWattaggagaatcNaaccaaaWatRaatHMaattaNWatRaMKaWctWtDataaagHc
+tMctttRSttaacgaSWcatcaVgatataattgtWMagKKaBBgatatctcgHSaaNBct
+gVtaStagtttgaggSgagcKttaaatHattDtaaattgaacatactaaWaBYtKttacW
+taaVNcWacgttctcctaactBaaSRagaaatgttKVgtHacatctcaScaataNgaaVa
+gaaHttaKgHgKaccgtcYtcctBccataagaSacataaaggtttDtVStaVBgtcgNat
+gtgaVctatWaaDccWHcctttaatcWactaatactcttacttgttcttatttatcaaag
+atWacYctacKtaSaaaStgtWaVcaYaRctgggtSaaaWtgctgcHtttgMcgatSaag
+ttgttttNattgaacttaaKaYcSBSacWattaataKDattKaHtgaaattKKttttgac
+DtDtattttDBDDcMgcatagaVNttaWtgaDttgttttttttgacattatagBDacgat
+NatMBcaggtacaatgtgctttatatttRgBcctVtYVctgcatgtgatataatHagttt
+ccttHatagtaMMaaWggBataaKtttgataaagcKgtVtaaaatgtatWWaataaHgat
+ttYtcWataataacagaacDRWDgWaWaaaggattBcRctacYtagctNgtScagMcccH
+aBaYgtgctgtSDtHacKtNgtgacaaaacccMcacaKctcactaaaaaNgtagWtttYt
+gaDcatWctataVctNttKgRtatataYaaaRacaggttatagtcRgDgcaYctattNca
+NtVatYattKgaaggBDtttacttHttNtgcatRatgaMHtRBtaagatMcacatBatgt
+StctagacttccKaRgaWccRataVtggaScgatttDMaaatNNtcYaYtaDaatctatg
+aVtctBKtgccYgtWatDcMYtaaRtcVgcttttDtMtRagtactHccRBWatatcctta
+tMtNatgttagagBcttKacaaMtagaaattaDttaatatgaaaRattNcHSgaaHtaDc
+agctYacgccagcMtaaMgDaaaaaggatcttcaaVNatRcKVaaHRBctgcattatMaW
+aNaKataaatatgWaaatcgMaaaatcctgttactDtDagaccYWacttctRatgataaK
+taaatcaMttttcaaRtScaWgatMactMtcaBNataaaBactggtWHtYaattaWacat
+tgaaVtYtSgMcatgaatYgattatacaYttaaaKRgaVagNgtaHWaattcgDaRaaac
+gVtBDtStttRaKgVagatatWtcMKaaaaMDatttaaYcataDYagtaaaaKttVWMgg
+ctgVgtgagtKagtgtBBNctacaaacttagattSttHagacKVttgHttatSataaWtM
+HttSaSaaaaDatgBtaYaaaggttaMttgVtVtttctaattgaacaggtttDDVMtNSg
+catataagDaNttatSVttMScNaaattDttYaaHcNgttatatBatgDKctttgVVaaB
+gataaBatRaagactBYgMgNaBttaaattagatttttttaVgttaYtatVtccgtaagD
+cNVcaWtgcaKgggYtgagattaMaaagaatagtgaBaVcacBNtagtaDctctcVtaSc
+tgtagcBcHMWtataattDtaactttHctaRcRaaBaYacatttcVRaatctgctattDS
+NDgBatcaaatgcaBccKctaHcBtctVtaaHgatcRgaacggctRtaagtaSatatgat
+caaagBtaagatttVaMagaagaWWgcMWBRStRggtttWttttagtccaMRMaaattaS
+gBccggNataagtgctctttacYataRtcattgtgYBtggcatRtacttBaacDacaKtH
+DtaNacMtataaKKtgtaaaRMVtctVcRatcgatttgcattSaaaggttRatagtagaa
+ttVcNgRtKccBgBtWcataataKctctKatttttgVcaacKStcacSRtattgcggtcc
+tcHatcgaaDgaVgctagtMNVtaattaaatattMYNcgattaaKtMttRtYgacttgtt
+agggcDNgagNtKBaScagttctgcMaaaMtHctRaYtcgRtHatVctttatcttggtYc
+tctYgttgattttaacSttaaactaaaWHattgWtctactatttcgMcVaaMctaKRctt
+cRaatSgctVNgtgaaaNcagataatcaatcKtagtgacaaBVtttgtaaVctaBatgta
+agtgtacctttacKtMWtaaaatWtcVctgagataattacggaatacgSaWgaHcagtag
+NWaaaSacggaaatgatRBtRctVctgtVaatataVNactMgDtaatggtatctacaaat
+gtatacKtttgttttaaacgttgBggBtgacttWacgaMtttcagaacagaaRVtttKBa
+cttDWaccagtaaatatcgMcttatRtaaKKcgMtHKattWYYgttgatgttaRgacHca
+ttcttKtcgtttaatagagWgDKaYatKataKcDgctaaaHWgRtagccgttcatYattc
+agSHtttattataBVccaNMHttacgWttgDgaaRtRaatcgatNaaNtWVcctacatac
+YtctgKtcattatctattatcgtcKtaataaattagggHctcatgHttSNacctYaKttM
+HtctttSgacgtttgMcStgttcaaSBggataggWttataNagaNBcatcaagtBtagcM
+agtcagagaaDcaaaataKgtatgtgSaagtgtYDtDccVaaacagaagttaHSWataga
+aaMYaggtacttctccttatatHatgctgVMatKttgaNtggSaRcattggttgWcatYa
+gtaatatttgcttgaVctaataMRttttScggggtgagVcacatYBggtccatMattBaa
+tgNataDatWtDttVcataacSVtattagaagtaDtatcBacNaacaaBaaagaaWBHSt
+tgattttKRcVataHatttttgaBtcctctacctcRYttagcatactttagaMHgtcatg
+tHtatctaaYacacggtaaMtatgttaagaHWaRcaaBaacaVaKattHgataNatatac
+gtatttaDWctagatataaNtaccgaacaDMttDSaSYaaYgYaVtcatactaaWWtata
+taaVtMcagMccaDaaSatBattagcaaaatgRtaHRgccgataatagcaaacacWacag
+aaVgBcagaYctHctgtcttaccBattVaYtttHatgaVgttcRgaHtttagttttataa
+tRWggattYatatMaaaactWaDRaggataaWgMataggtactatatttVctataattaa
+atatgtgttDtcctaKataaaaacggtacgtKaaatccBKtgtaattacaKtKYtgStRa
+agaaaaaaaggYagtNactttaaNaStcNtBcBaaacHtacaatSgattYttaacDacaH
+tcttcatttgSYgtctRaatVagcaWtctcDcRctNHatScRtaMgaacWaaYatcaHaa
+agttggagtacaNcSRttagaatcatVgtgaccaaYacWHHtaMtHtctaatttcactBt
+gNVggBgttctaDtcttaWttaatcatatHgaDacatgaaNagtaatacgDgHttaNgga
+tDaggactcaatttcttDaNtRagttgVgaVRacWNVHBttcVtYYtagataagHtccat
+tcaatNaataYtNctgatcRttgaYaaaBcaKatcacgSaataHatggtacacctttatR
+cgtaYacgataHWVKaattVtKcgatcgtRtatagRgccBtaatagctcVNtttatgRtg
+gggtttcttatactaatcMaaaWcgcaatKttatttgtttatHRRacaVcSgatcagcaa
+cccaMatYacBVccNcRgagatctgtSgaMttHgtaattatggRatgcWtcKatattMKW
+taaatctccgtgtcaHNYaagStKcaDaMtaaaWBttacBgNctMaatDttcttgatMag
+tagaaatYHKaacttattSgttNaKagttctcataagtaatgactgaVStaatcctcDag
+tcataagWtataatattacagScHaatatagcaHYaaSagaaaaactYtRYaatcggaaH
+cVcDcaccctattRaatattNgVaatacagaataaSaaaagcWRgaKttccgtaWttcta
+aWacgatctMHaNWSgVtgNttVgtattStaatNatVttacaRWagNgcaSgRVtcYtgt
+ctYgtRKatctStHWttcYagtgNtBaacgtagtgtHcgaSggcNgHgWggKatMtaHcg
+tKaHaWggacRRatattaHaaggaagaSgHggtttacctagtaattBaaatSttYgtagB
+aSKBaaSKgctMMcacagcgtYatSctWctSaatRtKKtgatatctMtattagcgagaMc
+tNtBcgtatRDtcatHtgaVcYttctaHacgagDaaMNtcttaBgWattatagaKtcWtH
+aMacagattgtHacttttgDaBWDtcSWKacKttcaHtSgttttDtHtSaVRYVgcagaa
+tWattYtgNcgccBSttataaNctttcHtccaaDRgaataSatgctVDggacagBYtBcR
+acDtYDNtgWaattattatYKtNcggaKRatcagBactgatgcctSttttttDtcSgtca
+aataataaMVttgaacBagtattctatggYtcaaatDWacVtgataYYacSccVcataaa
+gacagtNaatgtactaagtRtattBMKacNacagaaWtctSaMgaKataaaMBgtYtaWa
+aKNtDStSNggaacgtMRtaaHctatacMtattttaccaataKVtcagctttatacgtSW
+BaStgttgWVtYaacaacRgtSgtacNgatgRtaYcagStcaNScaaaRttaDttctcaa
+BgcScDtWaggtgaacttNBBYaaccaNaactNgctaaDaaaggttgagaaMtatacttg
+tgtctHtgagKacagcacagcgKSattaSDaKaatttagtHtMttaMVctaaBtgBaatt
+ttactttaKcMagcatgcDcatcBagaBHattVgWtaataMgtttgtDaHaggctgtVat
+tDYacNtNStttaKaNggtBtaKtgHaaKcaacatDMtagatgtatMtaaacttccNBgc
+tacgtgcaaKgWSNacttSBaggMtNStaKtcaatagattatctagtaBttaggactYta
+aaStaaYtgaaaagYtMaagaKctgtVtttcgWcatctacgtatVaagtagaattBcaga
+DcgSgtaSggaactaRcaBRtMttRgattaattWaBYcaataHMacgHactatNctacga
+VataNVcHatatVHKKagaaRSattaacgttMattgtatagBagtatctttgaagaBctg
+attattHgRttacDgMgtWtaggcaatNttgcttagagaRatttSgtttBtgRtgaNtHc
+gStatgaaKtgtaBacctgaaWgtKatHDStatctttaRaaataacaBttStHVMaccgg
+taVYaaBttYNKgNaBHaaKcKaaatStBcattgagggcRSttttctaaatcacaRBatt
+ccacatagacatSaDtaaaSNtttgtatDgWgcatacgaSacRttagNaggaHtttagcc
+ttttWDtcYaVtaRtacWggctcaaaacVctWtacatagttaattBBttMacatDtattt
+aaRggattatBVcacattattaagWctactVcaBgcttKagagttatRBgctagaHtgDg
+aaaSVtKgattaWtMDWaRccaaWaagtaaVttgWgVgacaBtSaacDaaaaKcacaRKa
+agttgagtNatttaSttaWRgtctaaccataDatagYaMgaWBcattaacSttcacDtSt
+tgtaWYataRBHtccagaMctaagaWagSDaactRNaaaWagtacaScaSDcaatMaaaa
+aaaVBcatKacaggtgMaaMtatVaVgcctcDDYgtattcaatattaggagtYBaaattt
+agaaVWDattcgttagHKSgcWtWcaatttaBtaatNcaMYgYagatcRRtcataaaYct
+NtatttKRatRggtYcgaWcgcccataWttVaaBtaataaatcgNtctttaggNtatatg
+NaagtMttccaagactRttgtgattBagBtaataattBStcaatttaWcattaatVtaca
+tgtatttBataVYWStagcaYKDaagYtaggKtgagatVtMDtKgNtcatagtNcagtBa
+gagcaNaaNtaRtagatatcYWtSataWggacagagtcaDSggYatttDaaatcactKat
+WatcDatatRattataaatatctattHSctttggNctaagtSacgagatatatatRataa
+gtttcatgcSaaKttctHaRgaaDatgStWcataaaaatWMNttaaRaVgaYcHaagWgg
+ttttaaBtcagacKtaBtggcaacHtaggVttttactatRWaataVcccaRaagattNtt
+ggStYaatBRaataVacgaaatttaBaMYgcaMgtKStStVtgVaatacccYaDVYaVaY
+KVtgatgcctacaaagcWgDtVtctaBtcctccacgatatWtcDHHaHacaaataaatat
+accaYRSataVagtttaaStgttgRHtctaDMMaYYaaagatacaBWKcagttgcaacga
+gBagcaaatccgKaRgtgaatcgtaWcatYtWaBtaBatcgRattcaagtHctctaatct
+tcctattaaYgaNaaaaRaDtactDtMNagatMtttRacKaccWaYtatcagaaKcttVt
+VaaaatgttgtNYgtHtaDactaggaRttaccVaagMacgcKtatataHaMtcaattcct
+MaRtttttcatgtctcaacatggtgacatcaBatHaaMagaatttattaaaactYgMtta
+KHBccgacttttaVaaVtcScHaNccttacccatataMgggDtactagKgtcacRtacMa
+cYgBaatttcagYcacaaataaaaggagYaaMHtataaaHtKgaaHtctcaVatcgStca
+tHtcaYctttWcttattBactataatWctcctRKaaHtaaHYcttcaYataaaHtNcaSc
+tgattaagaKaatWagRaVaNSHDaactaYVRaatgttatVYttatDcctRtgcgaacSt
+aWttgaYcatYtggtatWNataMtDNRtgtttgggtHcWtatHaaataatVtaaWaVgca
+atagDatgScgNcagggagtcaDtgagataKtgtctataattgtgaNatcaNatDgtagc
+taaaNtgtagtcBatgWcagagtgtWtaagWtaKgattHagWRaNatacaagtactYtaW
+gatataRctcNKcttttgaRtgKWtgtgRagcNtKtYtgatatgatBDKVtaaaaatttW
+tcaatacgRtaactttaaaaMtaMattaVNHRKttattattaaVaatagatYaggattVa
+aaRactcaagccccRtagtScgDWgVSagtggtaacataVatttcagtttRtattcttcY
+accaaaagttNttKtggBttBcSaWaattataatcataBtgtMtMtaaagataYtacgMt
+WaaacBtttatcKacaaaatattMagtKccaaWccatttgtgacctttMSataMgBtctt
+aVgtNttttSaactatgaggaSWataRtHtcgaMagSMccSaMctcgNtatgtataaVtB
+atHcHtattaacgactgNKtttaMtVaaaagaatVgttMWcttacacgtacScttcttcW
+taatccatactctaacaHHaaaatDctNtgatMcRaaWRtMgttgttatRagtaNtatgR
+taMttggaaKWttaRtHKMaDDaacatgcgttaaaccaaaDttatagVRBatacMaatac
+MaaatWcNcaaHttBgttgtacggRKaaaMtcHgttaattattttaHgKtgttaatDaHa
+tctggtaatMtYaRgMccKRaRKaDaagaggatBtSacatactccaKgVaaRMaBttgca
+taaacYtKgaVDtttgcatSaatattatNattataWatWgBttaggtBttaaYataaSHt
+RtaccaacMttaccattccKggKNtMatacctctgtaYctaaccttgagtataaRataga
+atRBtttttMtgWNtKtgcttatgactcSaatattgtBRBtSWVWYagtaWBcNatttcN
+NgSKacctgaaMKgatWcYHgRataYggtctaMtggcagaRgaaYaYgKgaaHVtaattM
+gaaWaWaDataagaaaaBDatacatatgatcNtagagMtactcatgatgtHataaggtaH
+aWatMgtagcttaWtcStataSttagttttgcaagtgctgacDtgctcDtgaSgVMtagt
+tKtaacgtacattaaatctHgatYatttcgggcaDtVttcaaacccgDgtatBggcttcB
+cWtacttgaatBaRNcgYtgtaaaaaRDctKctagtaKSatRtRatMaMtaacVYaKtac
+tgRDcaataaatSacagctDaatggttttaaacNttBaattgattaaMgVBKtBaacctY
+NcaKcaVtDYtcBaaataNSaBgatacccgtVtaatactSgtttgMSYtttgKtgtKacg
+tKatgataaVccaMgtaVaWatttatattgBNtgtVgVNtYStMtgtatBcgagaBaVat
+gatgBcStttgtagDgYMgaattacacHtaaaaaBttKaaggHttctaggKagRNtMBaa
+tWcagMSBaaVtgaatgtgatNaatSagcaatttHctatWMtgVcNtSaNRHatVaVacV
+tHattcaataatgSKttttttgtataRKYaatccRYaatggtaVtttaaaaaWBKtatat
+ttatgtagtcNatSaatatcMDRtgtBttYtatKaattaaaaYtcWccVattcDaaatga
+ttgtHccactgNgctttBtgagatWDgVgtactgtRtaaggtBgacctaaatctRtDtta
+BRaYacaaaYYtcaaagaWaSDttctttggacttcBcgaDacHataNtNgWtVMVtRact
+ggaaagSgtgggtgaggcctccataaatNttaYYgtcBatattWMaacMRctcgttaaaV
+atatagagataKatRMtHaVagaaBBtStttaatcaaatgagtatcaagtRMtaccgtBa
+gaWKtagaaaYttcSScttaVttttcatatcaSgtcWNgtttagccaaaVgaatgtgtta
+tgaaYaatgaataaaagagatcttcYacaaatataDgRttcMtcataYaBtctStgaatg
+agDaDgtRNaMtYMatatagWNggaNtcattatgacYgtBKYttttagccttataaNRaa
+tggaatccaBacgttacttatMNggaaaMtaaRtctagtttttKKKgcBttgccgtHKat
+cgatVtttacataMtagNaMttctKHNctaaNatttWaRNgRatctagatSctaactctD
+ttaagacgcatagcRNgagatttgtacattSattaacttttcgttgattWatKtgaattt
+aMtSBattKKcttaaSggcactaataaatcactcaMgacggtRcaDScNctYtBRYVgtt
+gtttaVtacHWattattcatttVaKtgKaacctaggStatttacaactcKNtaaacaagS
+ttcgattatttcaRttVtaVaaacRgDtaatgtccMaacNtcggttgcctaattaaaNaW
+cgKataaYcctSgMcataaatttgaaatttHtagSBgKYggcgYaagagataaWBcMgat
+RBNRaYctgHatctatHttgaHtgcHKBKVaWaacacWNRactWBVttaatttVccaagB
+SWacaaaatcDgttattBtHaMtMtHacKgWtcctcctttHaatagtYttaagccaHtYa
+tatttacgtcaSgtgtYttgBcatcatttaNRgaKgBtgattttaaatgaattVaKtVYg
+NaatgDaacaaVtHaaatggtttgaYYatgctgcacatttttctacVtacaNatataHtg
+tcVtaacVgtYccgaactaKaaaatcagtttaKNRtaaataMatgtacatatcKScctDa
+tDcKttSattttagatgttHtcBtKgNVRagctaRVtttaNYWttcWYRatgatMgaMKR
+ctNVMgttVagWcaVStcDgtttctcRatBVggaccgaatcMttgagaBDgtNMgKKRBN
+SMgcaWHYWccNgcacaggVYtMcaaaatgBtaKcgaRacccgStattcHttgaYttatt
+attctaVMttgaacDaWtNccDtcHBataNcRggaaNBtgaYNtaaMaDctMaaaaaaHa
+aattcBgtcgHtgcgaaStttctacttcgMagagtaaaacaDctgcagHctHtWaacgaa
+tgtggtDacgtcacataSaatKtcWBtataccaaScttNgDgcctacgBaNWtagataBa
+NtRcSggtaMattgaatgtRHtgHaaNWtgttaccatacctBataaMWatttNttVaaRa
+gMataVtgtaccattYVcKYcgagtaaYtttgDaKDgVacMtttaVttcYcgtMattcta
+tatataaggaagagttaaatHgtWctatttgaaatHttgScgtBataatgatRWgtttVg
+atMBcgctttatgtctgWKtaacaaHttaMtctttatcDtccaHaNYtSWcWNtHNacaa
+atactNggtgStacKatgtgKVctaBcaHcttaccaaWatHaaYtattatYtttDgtBaK
+cataaaatcaNgttNYcatVSgtgatatYDMMtggaatKMaagcttVtaNNYctKcctag
+MWtttatttBattNagccggaRgagtattaKatgatctacatcaKVaaagttYgcStagt
+ctacttttcatKtWtKtctRaRDtcggtataMcMDcaattNcacattattgaBaHattHg
+cYattagaattataaBtattBKHtgtaacHtHaacaaRYaBttaRVSaagttHVtatMtc
+acaWctgVtgaatcVtcctcNataacacgWtattDWccatDDYtcgtaHaaKaacaYaHa
+ataBtaaBKagtttcStWataccgNcaDtWNaaRgctcNaacttatttgttaaacaaStt
+tagtgVaKgggtatNaatVagtataVVaHtaRaccacaRatacNStaacaYDgaWaRtaK
+ttgtaatacggtttgccaaggMWtcaaccttcgctaMSaattaatgaaVDagttBcatcc
+attttccaaBggRttgKgccaaaYNcDcaSatMcaattYDcatcWatStttggaaWtttH
+tatVaggttDgVWatttaBWMagtcagcgaSaaSgtattctacHtaaSaVacaataNKta
+tagRMagtKYBKggtttKatDacaWaYDaactagcaDttctctttHtagtMtWtttatYa
+tWNaBgHtaBgSttRgattatgKcccaaBtWcccataaNattaYtRYWgRccNatatHtt
+WgttatactttacBYHaaaKaHYaNttaatagKatacaaatWSMctttcKacatMattgc
+aRctBataaVaHtataSctDVtRaacttcggScYctataHRHtgttctgtgattYatatY
+tcYHaataaataYtMMgttaaatgatcttaaattaKRtttaaRtaacttaBtgtcatgtc
+tNcaaKactMtKatagRaDKaatgSaHcRtMDctagatcaYtRatMSVRMYKYaggataa
+atYtDBaDacDtaVtacggaKttattNaggScgWcaYtaBaaacaWaNVtHVagtBaatg
+aBNagHaBtaNatNttSgaaactctBaggtHHtgaSagYKNcataaMcatagaSttctNB
+YcttattcatagagagtHWWDtctgMtRHtactgggagcKcacctggaYattatttgaaW
+gtcaVaataagaaNatRgtttacNtWYMBcNScgggataataaagtWYKDYcVWVggttt
+McttYaatagaaKaaataDcaYMVcaVtgtStctctWaagtaRtaagtaaatWacSKaaa
+tYaScctggtgMKtYMtctacDatctcaMatVtNaataaNtaattgaagaNaataataag
+cttaagtgtgcgtVgttataYaagVgNaaRctSctgWKVaYKgctNWMaaRaHatcgctH
+aaYMtccggattgtgBacatHaacttggtggDVgtcaaaggSatWRaKtKacNVggaatY
+ttatttattcaaSttttttttcaatgttatttgttttaBgcatacWKDgtYNtcYtgtct
+tttttgtcaaatgatacttWagatDatttcacctaaaaggtgagttatWgtgHctaatMt
+RKagccagcgcVgagYagtactgtactttagVctaBBaYNggtYtaattttcRtaaagat
+ctMtaVYatctYgNMaVtaWtcattgRtaNataagaaaacVSctHNtcNaMaRYcgagtt
+aHcgacNgagagBgtKaactaaatatYRcggatgtKtttactgDctcVaYaaSaacBcac
+atagaaataaaaWDctVcNtttRtcataatNagatVMctBgttcHtVgagaNaaaHaaSc
+cggatSctaHgtgaYRagattDcSDtMStNYtgtgaagcttgggaatttttDgcaatHat
+gaBttHttaacatBcaaagtaggtKgagacaattaataHcaNaaHataMtccaKagagtt
+tBYSagDDtaNaRtWtWagatSgcSKtcttttcaaRgtMattatRtYSHgaMcctttttt
+BtHactaattcaHtMatagaattVtBtDatcttVgagtatttaaaattacYSattattta
+YtagcaVSHattDctKcVattataagagRaccccWcaBtYYtctaaaaYccSgattaaaM
+DRtHatMaYtHtcgcaaggWgBaNVDatataaatWtcMYSVtacBYaaatactcgtactt
+ttWgaacRNaattctHagcYtaSttaaataatttttaaSDtKaaMcWgBaagBgaatDag
+aaatactcctNtgRaattaNWcattgYVMtRtHgBaatcaagRcagtStaaWRgtaaatH
+caMacDctatNaagtactVHaaVagMgttgKtgtHatcMacatagMgaBtSaaaBtagtt
+aaNaYgStRRctYWYVtttMNBgcctgMctcacttagtgtttDagacaYaattagaggKt
+ttacaatMttctttatKagaaNtBtttKSHWSaVtVtgttaRSaYccgtaBgggMtKttt
+ctYWttcaVaagctttttMBgDKccatagVactWDgtRtKMtgBKaDaVaggtttRaata
+BgttYtattatgttatgtcMMaatcagaatagHaacaattRcBcDatttaYWttagattg
+gttgaMcgtYRgagMtcactaRctcBMaaNgcaStgcgNtgagVttaBaaagaatacgca
+tYMaaatDtacgatatataMtYKatctScatattNgStYWgtttaYcttgtagaHaHaYt
+aRaaagttcMHaStatcatYtttKBtctataaaatcaStcatatStattatMtSatcata
+HcaWaccagHtaaggaHatatgagaaYYgtgVacSttgKaBacSYcaNNccBNtHKtHcc
+tttMttttagtaaaBHBaaattWKgtaaccDataactgatatgtaaRVtaHgaattctcR
+ttcgcatHtaagttYYctaaattttgWDacBtataatttctVaYHtMtagMaHWtagatt
+tcaVgtKaaacctgHagSgtacSWttMaBcHttaatcttMaStYatatatattagtttgg
+MaYaatHgaaaHHgatggccctactatSgacaatcVMcatactBBMtaattaaatattBN
+DacYtgYattBttHtNcaatgcggacccctDcYcDtttaKaSggtatcaBYaaBttctDS
+RgacHttagMcggtWgagtcctRatatRcttgattggaaaKggaaaagaaSNtattcNta
+taatVttgagBaMaaBctWtHatgcDaatHccgMDcgcWaaDaacWgaagcaatattact
+caaaatMgttgtaaMatatYtctRSctctWcatttVatgBNtaaYagNtaMatcSgSgaV
+ttSaccaataccKRNcataaggYcDMWaSKVcccaaaggVtHtgHagMaggtKVatVtVM
+DVatBgttWagcctagagacaaaggtataatttgcttgtSaaccttctccttcaatgNaa
+caBtttaVcaacagWaHMttgttaagttNWaaYcgaaVtatacBatgagHtSattacBgt
+tYgtNRRcttgatcttaHcaataattattttccttgaYgacVgNcttaRattatatctca
+gWWatNcDgacacgttaatRattaYcKtggtSggWgatMcaaDBttgaacNttctcaaHt
+HaagcgVtDaaDtNMcagaaatWaNtatcttcattSgatatgatactattWatSaattWc
+cgtctaatcttgKDacatRatggBttatggKgaagtttcBaKtgttaaaKtcgatagcNg
+tatVDagaDtaVtcaactttYgaBYcgaYgWgaWtaaaWatVtctVtgggKaVctcgRtt
+tacMaVaaagaaggtVtKNYtWcYaVtRVccgaattatacttatattagcatcKBatttt
+gVDggcKaHaYttgcggcNaatRactWagWgttcagtgWMctaataBHtttgHaggcctg
+acMcYaRtRtcggcaatBagttaagcDatatatNttgtMcVtaaaHMgattVgaYgtatt
+atatSaDaaaaataWacaaNttKttcatttttHaMagatYtgtttcattaatatVacgcH
+RttacaYtaagttacaBtcgaagcgttWtatVWRaaSacggWaBgSgcttaScatNaHca
+atWacaMatagttcagYBagYgVactWtgtStNatacatYgSYDtaaacSaaatBtttKa
+KRSWRcRYMgcYgVataSNNtWgVtSaMgBcactaaatYaKattVggacaWaaatgHtat
+HccacStaatagaYaaaVaMaaacYYMctcagaNattatctattaaatatgMaRgggtat
+gaMcttaHgattgtScgtgtatVatHNgcYttNatatBWaaactNVtHScgataaNcBat
+aggtaagagatttMatVtaagtaaatYgctgttttaagatagaWaaYcgctaacttaaag
+aattggtSYgtVaStttRtcKtHaVcWaYaWVSccRactDaattgWaBSKtaDgtataaR
+cttaaaatKcagtNgtaaataaatgattcatgtcKRctatHaYtMacaWNgagatcDcgD
+tatKaHgaBcaaaNWaRataYtYYacttgcactaaYDcKDttWcYataStKcgcaaaaaR
+aaNtttatttgctYatgtcVctttcBKcgtcttatSttattYMttaatcatattcatSaY
+tgWaDacgaataactctggaDccattacgSagaaattgatttaDtHacgtcMgaMHaaND
+KttgtaMgRNtacataWgttccStgaaatDaagYRtDagcatcHttcVNWWataatataa
+ccKaatWtYgcctacVaagttWtHactaRaagatatMMtYattMttccatactHgStagH
+caattaagacagaMDtttagcHtgccctttattatSatWataBaaSMaccVVgtggatgt
+gttgYgtDHSaaMaKcagaagcWacaaaBagRactKacDaDgagagagcgKcaBggtgta
+YttatgcDatgaNgatagagtBtNtaWatagcacgcgcatDRSacHttcataBtaWaNtg
+taatcDctBaSttttaggcWtBacgacaVYtRttaacttatgKcggDStacgtagaYtaa
+gtaatgacggVMKtWagcatatagtcataagMgatVagVttSaacHataatatacaatRY
+aHacaWaaactRtHRaatagcaVtcMataaacatattHaStattDcMWVtYaacYagaaH
+aaWaccNHcatgtcccgaNttataaNaacatctBtaDNKgMtcDtgMgtatgKgSatDSg
+MtgVaaHNWcDcaaKgHMtaRtggcgRgtHtVtatHgtMggaRVgtcDgtWaactactgt
+tagaKcccDctcNcgtagtgStacgtataNcgVaHHagYttStaaccWacaKctgcttta
+actagtVatttaaatKttRcgactaHttSaKtcagBBaWaacccgRatKagNagKaWtHt
+tttcWtatatttattacagacSBagDgtagtatHtgcattgcaMaRgtagatYacactYS
+BDgctgatcMattStSgattcNttaBWaacatgcttSattttctatNttaHNtSctgtcW
+ttKgttgtttttKaMHNMcaacaagNattRtcBaccatKgtVtaaDcttgattaaaatHg
+aataKYtgagMtgcWaWgtRttcDaatgRtDgcNWSgtagtatRttDcggatHWgaagta
+cgcVtcaatHtttttttgaKggaSaStaataWBMtgcaaatacgWttctagccRtaaaat
+tNWaMggataRRaaHaaMcagaaacacacgDaatctactaactDgatgtttaaDacacVa
+NgagKaBcatataaattcgRtSNaatDttKgKDgcaaactBDtaatatagWaBgagtgtY
+aaVatatMtaacaggtataacgKMtaKgcttgNMtRaaaaVcHctKctaaBcWtcHtaRa
+acKgcaDKaYaSHgtatttataaYtcaKatgNacgtcWWatgDttRaacaaDWaatDgag
+aStaVScctgcacaaBtatacttctgtctttcactacWcaaaWcactKattaKtatWagt
+tacttgBtgaBMagaattgtYYttttVatttWtcBagaatcctcWtatYcVttattMgNg
+YStaBgtttcttWtagcaggtMatgtRaaDtDKttgataDggtttatgctaataVYcStt
+BtYcatctVtBtYaVagtaaDtgagacctgaaatcNKDactgKtacgBtDKgattaaata
+gattatagactatggacgacgRgaaYKgYaRtgaaaagRgBaacatctctMttgacNaWt
+ctVagtStMaactacaatttcVgatacKctaKgcSactaDaatHgBgtHgYttaagtNYt
+RcaRgYtBaactaatatDctaacSKatSDMatWtagKtttagaaHKattaVactttSgtg
+tagWctaggagctttgaScatcggSttaggtgHtgYatgtctNtaggaaatDttcctgag
+agaHagttKcttttgcHtcaDgtcgKtatcaatgcgStVcatcaWNcgtatttHtatctg
+gaHWSataWaVttgKgtKBaaaggtaMNaatttRDtcDattaStctaaatKgtaagtcVg
+ccaHKgtgtcgaSVtaaaaHtatgaaVcatacacVtKattaWaKDgttctattgNcaaga
+acaKYaHttWcDaccattttagacttttMttaRaMtaHtacNgccgaaaaacKctNgaaa
+gagggaVttttgtBVcatttatttVaHcgattWttMaWcattagtaYcMagaatKaYtca
+tttagacttStDtcagacattctcYaaKMttcagtSNtBtMaHacYWNaactVaMgtcNg
+McVcVtgKaaataaVataacaDtaaggtcSgtDatttaKtgSNHcgctVaaaatatagac
+RaBgaNtaattVWaKtgcaattHttctaNRWtaHtttaaSgWBctVacaNVcKtaaagHD
+aaaNagtYcYKaVKtaaatBaaaSaVaMtcSgtaaacctcBYWttSgMaMccagcttRgt
+VggaaWgagtaggYctRtaaWtgtacaaMNtagtacggVcttKcaMgNaaatgtatgaSg
+DcSBRgRVcYtaDHgaVtWaaNagDtagggtHagHgctRagaNacacaStaNttMaatga
+ataaSgagBgagtgWccDtVgagcDWVctBttccaWcacgHttgtcYtttacttaatVat
+gtKtaaatttaNaYttaStMtVaStggattgtVgaMRNHtacaaNttRScRtVcgttcSc
+atMtBtttcDtcatVctDaScttagacaaDaaBtaHtacRgRgaRNtKataNgcaaScac
+tcWtKggRagtgtaaYtaaattWgNagatatYtHattWtYWatagatatttKatgtcgDa
+gaVcgKVagacagagatVgHWtaagttgcatgaKaatggattaHcaatatgKtMaWtWaY
+SVtNBDttaaHaMcaRctWScNcggtggYSttcagaattattggaaaattVccMtgggWa
+tatHMaYtaMaacaHaagVtgDtggcHtRaagtHaagVMWacaaagggataBRcaaBctt
+KtHtMgcKaVtaacaRatKRaMaRtMtcagcaataaaaVccNcttMtctattaagacacg
+agatNtatttataaaSagaaatatSccaRHKatYMacgttaWKtgttgHtgagatBBaRR
+WSacatacWtNtcWgttcaaaccactVcaSaYtaactaHgtcVWgactaNaatRgNatta
+tagacHatgcYWcttatctaagcttaatatgaaRcaDVaSaHatgaatttBDacatBttt
+HactacaNaNtataVcaVtattKgMaSaSggttggDNcgtgatactaccYHttaaaMaVc
+BSacctgatatataBgcaattaatBaHtttgtaagggataaacatgcgcaaataatatta
+aBVcaWgttagtVaaWctRgBtgYtttccgYattttYMaVMtaHatRDaatgVacaatat
+VBccgttaagactcgcaaHtVaBaaRctaVgggaacRaaaaaatYaSaccVgRaaBtgat
+aaatttcaVttataSMatacKtaWttgcaRcgtgNattatttaatagaatNctcatHtSW
+ttaVtRattcaRYtaaattDcaKagcWggaWcStaatNVgHaMaBKttaaatYRMHaRtc
+gtagMRgtattcctHtcacaaaKtaNttcaRcatRtccgatNDagaBttDHtcttggcct
+taNtattaaStaWgKtVWNaMccaVgVgtatcKacDaYcccactcattcacYtattggat
+VgaWttctgSDagaWDattctacataaaDggtactatagcNcSgagtgtMtaacNtVtcS
+tttSgNDaDYgaaWVgtactRtaNcYgataHagaDtagttggaHtgtNtcgcHYgaDttg
+RtgStatcattttKtWVaYattgNtaaYgYccHgWactgtaaaVBtaBattaMBtHtttY
+ttVgtaYMWatWgWtNaccVtgMWaSDaatcYWccaaaHtacgKagtNcMKactcgtaaa
+VtaMatttcRcttgHtattattcRaaaWaWactgDttttccttttaKVNaVggataagaa
+gWttcgBtBtVaYcataRtaacBgNaaYctggtatctacaaaagatttagttaaaaNaaa
+ttgctcaactttBKagatctgctgaMgtBttgtKaSatVgcacgaHNatVDgttacVBac
+KBaaKaBctccDtagctataWKttagtcttYgtaSccaatcBttggaBtMaaaagaYtMg
+tgtNatgacacctWcKattctgaNtaSgaaataatatVSaattaaWattagDtgagBaHa
+aNHtBgttcttatHaggaBtatcHtSttgccaatNgtaHtttBattaacatcactgaWaa
+aaaatggatagMHtSgaaBSatacBSaagMaDcaattttcgtctaacgHtaaaBtatctt
+aattagtttatcttcgtWVttatatcgccgaagBgRaDcBaatHVDtataacaccVgttH
+aaSgaagaaatcMSaHBattgcaSgaSVaRttcaMtgtgcaatKaatWggatBVgtataN
+WgNctttacctttgaaRatSaKttHgaaaYSaBttVacWttcctgctDgBSgYcagcggg
+WRataaaatgcactagaaHStacaatHtggtgtBgcNDttggattatgaagaKaatStgc
+ttHtgKNMNRagtaNtaDattgaDDcKtaaatcVVBtcSgNcRtcHataRcggctVBtcc
+aWcaDgaaRaRctgaatMtaRtgBcaWNaNatatWScYYaWttatScYtSgcataDtWca
+cBtactaWgcYtcgtataagctataNSgBctagattaNgaKgatVKgtagttttcaaagt
+gcgcYattcagatggaKcMBtacgtttaacctaaattaaatattcatRaggtcgcccatt
+MttaaaaaaactggSgtcccgtctaNtWattcaattVHDagRtggVSSaaHtattatWct
+atKatHtHattYBtaVaMRatgYagcHtaSataaStKaaacattaagggttggVYaaDgt
+tWSttcattaRBcMttttaacatRDaataaMttRgataaagVDKatcatacaacgMtaat
+YctKcgggcBKNgtggttcttaagttYgcataVMaaVBgtVMSNagttatSttgtDtgtM
+gMDtNKtBgctattacagataMWtcSggtcHgggcgagtcRtcRattaaaatgaaYYatt
+gtaaccttgatacgtWcHDgBtVagNcSgBKtaaMtcaStgggatDaVtKScaYagtttc
+tagNBtcMcDgKaDHtVtMaMacMgtagtaaWtaYtgHtttttgtctagYHtRaagacDR
+aatgctVMtttWaYaaNtttatatttStcgactaDatKaatatattHggttgtRtattaa
+ttaaaaRtaNacKattctVaatgattcttacWatgDgagggtggScatNtcMggaagggH
+taaccttcWcatWaStagHtttgatHaRVaaSVNNtcaRacaNaKttgctgggcVattat
+ccatVatataDtDcNgMBMgHSagggaaagKctgggtcacgaatcaataaVtDttaRRgt
+ctStattNBaaaBHatcgttaaWMagatagacatatVgDBttYMacaatttKtttaataa
+aagcacgVgaaactDBtaaccgtagaNtgagaaaRttcKKagtYKttttaStataaHgtc
+NDcgttYccaaaaMcaWtgggttatcaaRaaggaataaVWcacatattaRYaaVagagVt
+cHggaBtaataNattagKtcVRtgactatcgHDaBgRBStVtSgNBccWDgaatgaggaa
+NctttNttttacaaggagaaDDaVtcgaataaataagttaattStBDccaaaBgVaDtct
+ScgtgtttttgctgtcacgtttWgacStMtttVaVgaBtacDWtttagttDctaSDVttt
+NaDDcHatatacYtKataaatagttgaacaagaatacaDDcacatttgtaaaggHattaa
+atgttacgtcagtNStttcVatttaBtHtVggttattaaHcgaWagaYtVaataaatcaB
+gaccctHcatKaDatRttHRMcgtcgggSMtaatNagtYtgaYtggMYttgtaaactacg
+KgStttaaaYatatDtaaSaVVcHgtagatgaggtcaHggMtaMWaWaHctgaatctaaB
+aWaDtcgggtccctaagtaVYDaNactataaNcctKcBcataaatttcaWSttttgacHt
+ctRggagRaagacagWVNtctcatHtDHaRagctStatattggcattcattttMaNaSaR
+aNDHaagNtMgtVWtgtMccaactKNaaaVaStatcgtStgtgtaBgBgtaatcNtccga
+agtttaWgactNgtaaccaatgNatWttgWagtaaKgtctRgtctaataagttVDHgStg
+ttcVttgtSWatcYaggMatgMRcBaStgtaaaaaMttaYagccggtgaRRatgatccaa
+aggtttctaaKgacaDagagatgctcMgaaaMcgRaacaaatataaaagcagtgtatDHg
+RaVtWBVtggacatStctKccttVttatgtKattttYcatctgttatgtcDKHYcctSHM
+ttgSDRNgtaMNHaggatBcSBtHatDMBcttMacNaVMKtctgtttcgaHSgtMgcaca
+gaStaBttcWcattctDtcttHtDKBcaaNtRNaaDgaaaaccMRtBcWVVagcttatcg
+aDYccacKtatgatgtcaRttattYttctaMBggcaYctaNtBactgattStaDaHccYa
+DtgcaRDgSYtYtatBSaYaaataaagtctcgcgttcagaaKtttctVattagtWcacga
+aVaaVtctcaVgtagttNaaacaatgtccttaactaaaStaKWagttaNttatacaaaKa
+ttBctgaagaagtYDNtagatataDtHcKcctaBaggcaatctHttctaaDNtgtgaaaa
+gRaattataaBMaggtDgtMaWHacBStSMtcgaacYttRMatNacScgaaRtttctatt
+cMaaBggtaKttaRcgtBattcgatatYtVaccSacacgtaaagtctNatYttgcSSatt
+ttcKccttataatcRtHNctttMcatBtacatgtYtctagcNttYacaatgtaBgcgttV
+tattaaWtaDRtKNaNDttDWaaaataatDgcgcKtaatatcgctMctatcatcgtaaaa
+YNRttSaNtWggatRgtgtcttataVgaaaatcWDcttDRaatMKctcatatRttBtcca
+attBSacctgMtaDDRagtcagacBNtttattttagtDacaagcaHcacgRttVtatcat
+atacStaatMaWagttRccKtRctcgaagttgaatttNtttatHaHttagctatSBaBtc
+aagtDaaaRtgattcatStagttcaRattacaVgtatWRttWggttttctaactttSaaa
+VHRatttYHMKVVcgttMtatBtaSaaMctgMtcaagaMtactcDatSaaaacNgatttN
+caagttRgacgataVtaacYNataStRtgaattactgtaKtNagaaccDaatgNDaaHca
+taDSYattatgtctgYWaaRaHtttWggcKatgcgtagDSVtMactataKMSttaHaaaa
+caHatVaDKtSaaaRtcaNWHtatttctWataagctttcccaacctNtaaacattcgaga
+BKVattaWtcVaKtWcggtaatcaatgttcaaatccDttctcaaSaWNDataaKatBcaY
+ttRtcataMVtKttggcaaNgtgttatMaccgttgMNagtgVtNBWggaacacaKaaKct
+agtctacttSaKYMacaWtWDttatagHBacttRttcctgttagtScVNaRtaacgScaS
+tttatctttttSgtBgNtttStRatNDWtctgatcKtgHcattatctaaaaattNaaaWg
+WaDWttWRtHRNcHacBVgWttgtNggtWtWcttgSatRtaaYtYtNaDttYagactSta
+cYaYtNHBatggatacVtBatgccaHcgtagaaMatgataHagtKgHaWcgtaccKaNat
+agWtDttcgtagggcSgtRatatNgaRtYataaataRtBtcttaSatcagatgaaSgtVt
+HtgtaaDtVactgattcgcatctctBaWWtaagBttVgacHattWWgcKataHtBtagSc
+WtcaNtHStBKMHBRtRagcataaYtNtttatacttaMgacccattgagtDYggKccNaa
+RgataWaaaNWDMttMacttaatgStDYgtattaBatBttKcSaactagtaccgttggaK
+acRtDaataSBaatacaKtgagDtNcttattaagYcagacttNNttatcBtHtgRatgcc
+acctaSaatccaRSgtWggtgaaMcgcaMaagSagaaDatHcttgaaDgNRttaDKacgc
+ataagYaagtMRttNaMMMgcggttcgtRaSgacaStaaVgStcaRBKcaMtctKtctat
+NaactaHtaactaaatNWaKtWaStRSKcatggtgBtgRBtagaatagataSBagMtDVa
+taaDtaattgaYgaBaagWagaacaggaagtctgacgMgtgagaRVacMcBaaDatKatc
+NtKaRtcatDNBaaHatatacattaWRBtcaccattctctaaWttWacgtccgcgtMctc
+aaaccHYtNDatttSaDMccaStRttWgttattaSVKtgttttgtcWatgtgStttgttt
+tatcaagacMttgtRDgcRtctctgtgggggcSaagcatVattMacattSgttaacctaa
+aaccgcagtgagNgtctataatBtHtacaaSccccMgagRVctYagcgaatttacMagVt
+taRDcctRgSSttttcHtVaacatagBgaMRagatRcDBaMtaNtcatggHgaDYgaVgW
+aaaaMKattBtaDYBaHRccagttatacVaDcacactcgtaSctaaatatRDaccagctt
+tttaatgtagaMaRaaKaaataaaatacaRagaaYaNtatKcDttgHgcVtaYgDacagM
+BagtgttatgMcSgWDWYWtSaKaagcatKatatctcaRHacagttaKtgBKtDRggtca
+YcattcgcYattttgtccaagtVgcattttttaVaagtaaaagtWccttgacYcaagtaa
+tataYBaatataBtaaatacacttttRHagtttaDSHgNtNVcatKgaKtgagttgaaaH
+cgBattatHgRKtcaBaagttgtttgtVatYattaattBatYgaatgMgtttatagtKcV
+ctagttaaYWttWaRKWggYttgaRgagaaMKtaggtattaMVttataVcagHYacaaMa
+attRRtataWaaRacHcattaVaBtHgtatBaRtttaccaaggNgtaDMtatYtaYVtNt
+cBRKMgaatRaaagaatactRattttNcaaaDDaagtagtacaNtSHttaaataattggt
+aaKtttaaBaNgtaagtcaYttacVaataataatDtgHSSgtSDNaattcRMBgHttcta
+agaYVcHcactKgaaNHcgWaWttaaBactcgYtDaacgactMtaYKacBgttcttgtta
+taBacatScBcattKaaattacttSSDaRgKtHHagRNRMtttBDtcaagcBcgcYatta
+ctcgtttacSaaNVagtacacgtggtSaWatBtgatttWttScaaDtttggtKtNKaMtM
+gcttaHKaRaccgatccctgtgggagRMttaaMaWccggtttBtgttaaVtagMWctNtc
+tHgtBgcttatSMYccttgHaatatctgNgVttagcttagggaBBSStaYgYatYgtaaa
+aattHatctatgtWRNgtVcSgtgcgtcYBagtRHgacttaaagSHatatBaaDgcaKtc
+ccDgcacMttatRaacaataaccWtNBaYatttYacYtagagattRtatagKcatattDg
+KtNNgtttWNagggtacStataRtVDYaacgtaBtVKtagaagRttttttatataSaaga
+aKtaatatKtattagBtHataatatcWNaacagtgWaccatatStcYcaaNRctcKacKt
+tgtStaaKRaWDDaatBtttgtcagggBgtggSctaaWtttYVWttNtctaacatagVYa
+tcagatctVaHMgWtcaagtataHtgacaagttSacgtNRataaatgttgNtaattagaa
+ttgctMaRttBtacBatNgacatttcaMcgtaaacctctagHctaaKNttBatatttaat
+attBaKtRagYtatattSgtgtccBaNSattgaaattgYggcaaataatatHcaaaatcM
+BaagYatttttaYttYaStatttDtacRtgRattttttgDcRaggagcaccaattcRctt
+ttataHcggatcatNSatgtagtHHcactgtWgtaggtNgactactHagagHattcaggg
+gSaatgcaaaacSSKDtaggcDtatVagMtggactaBSatagMttaggatSYttaacBta
+gaNSVtaSaNcSScaaatattVctcYaWYtBcttcgaYBagWtRgagHKagagMaatttM
+atgtDtaYNagDtaBagcKcKcaMttKaaaaatVaatHDaataacgRatBNVKtMaccYa
+accMgttgtactagcttMatKgKBtMagtcttMWgaatRcacaaaaSgcgVtSatggcag
+gcgKaYaatgctcattaaaggDVacStgttaMaaaaacNVtBtgcttaacgtDNaaRcgW
+aKtatactagcactgKVttaatcttRcgDHHattcStatgatcWataagtattttacgtc
+aRgaaMcDattYHattYgatatcacNNWtDatgaaaactgaatHaggaNcttcctKggNg
+atBaaatttgcaaaDtgctcaatgtYagacMgtVVtgDBaacVaatNaDtatctgaaggK
+cagSggVtacgatgNWtKWaggMacctagaatattcttYaatDatcgttgatggtcaacg
+ttatatgcttaWVttccRgVcaDcgagMtacattaMtaVWcgttRcatRacaRcMcaNta
+YWNYgMtatMgccctaKctagHtttaaBVMaaWcSaccgMttBRgNcRWMtHMaccaatg
+ataaggagVttYgaatcttagtgtcMtgcctVtaRtgcaccaDaagHactNYcNcttaag
+gcMBagaWtattgtgctaccacgcWataRaHtDtacgaaVttagttVacctatatStDgt
+ggtaMgaSattcatgMcaRctatgWgatKatYYaaataNYcSaDtttgtcYttttttaBS
+catRtctgtaWttaatagMaacatDttaaaNgaacttacYttagaaccctgNgagMNHaa
+KacccNatgKccttaKcatDStaaStNaaVBatagttcacRtYcRcKaagMgctKtBagS
+aagNcKRttaaaaKaaRttttttatHHNHaHRtcaRcMataKDDtNcKtKatctaaataa
+atRatYttMccaaaNaaWgctgattcaaaKgaatScaNaaaKaBaaaaRNtataVcYDat
+tagctattaaatWtgBWHgggtatcatattatcVttcgHacgcgatMattDcaRggDYtY
+ttNaaaatBKttKccStYVDatatYcctSacVcattttatMtWRctaYagRgctctttta
+acVtagaNaVRaccgRaattaaVcaattgcgKRctMaKtttHgctttVMaNaRaNMKacH
+SagtWagtgNatKttatctataaHatgSaSattcagtDctWaataaYtcagtaYtctatH
+cgattSRttaaaNDgagatatacttVttatcataSSaBNaDataRtRRaattcaRataaR
+tattttNaRYtaKttaccaaaaaHVaBtttWtttgatRagctaMattgcttactctgatK
+tgatgRBttaataagYttcStKaNgcNatacgWatYaatctggVtaaattYccKagaVag
+ggatttatttWacgaBcaBtaaDttttcgaBcHDgaaSgVNctgaaKtgaVagtVWgRHg
+tacaatattgcMDNNataatagaaaataatNtNgccgaaMaagtgNttacgVHaacSgSt
+BBtRagtBgtaaWgacttcKgactaaatgaagVaacaBtggtacattcaaagtgattagK
+agNatatVaKBacaMMctccatcgcgggRctttKaaBatcacaScaNaaaaatVgHaatt
+aatatcWcacacactcatgctcgaRggVgcatatcaDcatYgaggttDgWNagagaaaga
+gaYttHKaatgtaVtYttSNaDtcgaatctattSKgtgtaggaMgtaccWcaMRtHttaa
+atgWtgtccgtKtacggacaNgaacgaSgcYagcKBttNacaagatacgaagaVcBgStM
+acMtgKaactataSgWtaaaatDRataaaNaSaagHttHWYgaccWMtatataaaaagat
+gtaKtVtgtcBNMtRaSaRacVataaNaaaDtaatgtaaagaDgtataVDaacagatttW
+tDtcBgatggBcgagctcKWgtHcBgcMaatDNatcaYtctBgaHtccagHctttMtatt
+gtBccaHMctatctNaaatacgcgtacatacatctaDactactcKtacctataDccMatt
+RgRggHtaaaaNYcVtatccgttSaagYcgMatttaVattttHagVatVtttKattaagt
+taNaacaccHSttagDactSNgtgtttaNtVtatttatgaaacSaKtactctacgagttg
+aagtcaSBaDgtagatNaaactRKttcatcWtaBaggKtKcYttaDttatMaWcStgatt
+KattgtatatDttatDtKatgtaNtgtcgtcttttttaBtDBcaaaaSgDatgHtctaca
+attcgMtVYtatgcattaaaattcaVgatRtcagBtcaMaNctHgtatVatcHttcaDNK
+gtWcgagHtttaccattNgaactYacaKgaaagtggtttgtgatcgaKaHgaatYNtBgc
+aaVatWacNggataccaDtaaaWttBMaBccagaHDaataaBaagYVacYaScctYVgag
+WagaYagtgatgtttWatSaaaMYDcactYtaStWgaaattacHgKDaYtttttgttcaa
+aaatttgYatatVcMatcactggRaaMVtStBtaaaagggatYaagtBtatcatgcDttD
+aaaaMatagtctaataNtcttWHaaatcaVttaRaKtcgatttataWRtaatatcDWcct
+aNMatgtttDaYaaWtMaagtcagaKtaMKacgccaaVatgWtSagtagctatttcacta
+aNcaaaNaaattaggattatMWgtgacgtcttcattacaYttctRRtttgMatggNtata
+caataataNgatNcMttaggBcDgRHgatctttagtNtacaaccgBatgtHaatgttttg
+atatccgttatcataStaKRaKgttgNaagagKttgNYMaggaattcagaactcaRataD
+ttaagcttaccttttgVttaWWgacYggStacYcgatgcSccaacHcaYNtgRaHtcaYa
+acHctYacatagatBgtgacDaNgatMacgKgBaWagacaSgttaKcatactatatcaHa
+atataattctggtcNttaYggDRtDaSHgNttYaatWagagtagaacKtWtHtBatNtSc
+ttttacaattagtaMaatttHgtctagMctaccagagttcaKcStaccKggaggtctgcN
+atctctDgYccaaVgttgaatgacVcatagtgtattttccttcatctacttSgaaStcag
+HtMaataWNDagtatttttataggcatNKataNaMtgctgtttVaacctVBDWattgHtt
+atattaKtatSVSttgtaScgcMcccattgggtagaKMgaSaSttYgcaaMaatVaVaKg
+tatgYNattcttagWgtcBaaagSaaatRatttNctacaStggtYcaaggttBtgaDWBt
+RtgaaDccacaaaVSatatBcaaScWccgaKttttcgtMaVttgatgtMatacatgNttB
+aNaagtaggaRaBagaagtaRtaagttacWatgHtttaagSaatgataNWattgtaSggH
+DtttBataaNNBRaatKWBgtaDcBaMaKtctaYatVaKataaaattWYcgtaHcttagt
+gYtgcKDtccatMSaaagatYcSaHatcaDtaatgMMatgcaaatgtttagaDDNtattt
+gaaKcNtagKYcaBMattaaagttaaWDacgRaRtaKttaaattaVVKaMaBtaKctaaW
+catctRMtgKcBaBaaagattHcgMcgaSNgactaccRatHtaSNtctYcaaBDtaggaa
+gcMatttcaBcDaaatggWtcaHctaKtHcHMcRgattgaMtNVaDagttaggcttYctc
+atDacWDaaaaaKtaBgtBaatcaataaKgactgactcNcattMcacatNMattgtaaaN
+aaacttgctaRtttacttaatKYgcttgaSStgtaDaNgtaKgBgMaKgccagtgtMgat
+HDtgacaWDttHKaDgMacttaKaagBtttgtcttaagMagtaHcttWcacaatSatgYt
+gacHgHcaHDgtagaDccVaKcaataNttccHYctctaSRtaYagtNgDagatWtRttSt
+tNtRNagacatattttatggactacYMagtMacYaagYgVgKgtNtaVcgtgaatcataa
+tcgattYtaaatYtctgBaMgNWNKMgDttttaWtaBaaHatNHaDacctccNKtgaVcW
+attYtgccaVRattMacBtcccNagYttBYNgaBaaaStWacMgcttccatgHaacttYa
+gMtNaaVSYgcgatatHcaatatttgtgBcatWMtaaaaDRttHaBaHttgaacaaataa
+WaMcaDctgBtatWttaacaaWacacWtDtatttatWaaHacaVagVgKaaaDttWgRBV
+agttVNttctgcttgacatttSHHMKScSgSaMtDtaMcgtcaWaacactMcaHWRgaac
+tWtcgcMNcactVDaatHcDSttWtagactatgaRNcttagataYgaggaagagcaSHcW
+tMaKStatgYatttttVaattgtttWataaaDaDgataMcaMtatttctVKaKgcttcct
+DagtgatWatacaRtttaaaBSMctHaaatcagStatStgaaVttaattatttgctaagc
+gagaWaaWtccgcaaSgaatVgtaStMcSNcgtWggMVWNatHctggRtttaacNagttt
+RtaMBgatatHtaatcMaaaYgatMtaccttaagYatcgaaattMataaHatYMcccaaa
+DaYaVaWgRaHaaaMcHSattcatWSatttcaMtgataKBYtactgaNttgaaDactgBa
+tgYgttaagVgaagDagaatttKNtgaMtHagtaaHRgaaatttaYtaccNcgWNcKtaY
+tBMctVBWttttaSagRHBtaHtcgtactHggagtaatttaaaVVattWDgtaaHaYgDt
+aacatDtacWttttttatgccacttaDtagtaaKgYNcttMNDaBcaVMcMctWgatact
+aRcaaWagaatgcWcRtattccagKgaNgtctcKtWgaNtSttagVaagaSYtcctWata
+tSgaDaKcactcgBtYacDgMtaKggtKcDtRtRgSaNKctaatHtRDaRgatatacatt
+agtgccSttctDgcgatNcatttcHgcKtagcYgttttgNKWRattgBtaaNcRaatcNa
+agcgaaVKttYtWttaBttttttNggKcgaRBMVtNcNtDVaaMtcBNaKtaataRMcaa
+aattYactactBattWcgccgWaaMtaBYtgtaHagtcttVttaggaHVaaNaNaatctt
+gtgcattttatMDYKccataScaWgNttccttttMaRcVtWHgaaatgBaaRatgcgata
+taaaWYacYggtacttaaaaDaaattgatcWaatgtttRcatatcaggaBcttttcttVK
+atKccaccYtDatMtcttacMtSattaatatagaatgSgagYgWNtttagtatgRggYKa
+caatattgggVtttaSaYcaRtBcggtDaggYaaactNataggaggaDgaKcaaataaga
+tMKaattaaNagtagttcWctataaDtttcgtcgtattaccStgYgatgKtgcccYatDc
+tYtttttYttaaaagaactcaNVaaYaYtccagacBttKcaatKataatKVWcBataaat
+gttcctatYaacttaSVtgataggVatgagttgatcttacgMMgtWtYtagcacaSctcH
+YtataattMttataYaaccKgtgtaaKcYagaaVtcBKattStgcaaKcaKKaHgtaaBt
+ctgcaattaWgMcgYttMctWtaDNcDatggWaattggaVDagKattttgaaaRHattgM
+aaMgtaatcattctKgNaacacccNHataaaatgaaagagSatKtacVagttggtcgtgc
+BtgtgcatgagcaacataagKtcagtttgtDBBHWcgaDtatYttgattcttaaagcMMt
+taKgDaHtatVgWHccgatKttcaaNcYtcaaDWDatcaWtBtWHgctaaMDaDWtWtNK
+cRRaNttVgHaRgKgcWgattNaaattaataNcaRtagtRgaacagataDKgtatScatt
+aDgatcatMtcgYcgtttaaaRctcagcRattaacatccStcBtgaccgtgWaaagaaat
+gaaWtattaVtHacctaccaaatgBgtaVVYaaaatccKgtcaactataDgNagtcaSgt
+KttacHtccMKKWattagtatNctattagtttWttRtgaKaBHStgRagattaKRtWaKt
+taaWaagtaVccctgcgMRWatgttNKgtcSggSHtaBttgtaYaatDtaVtaatgtHca
+tWaYcMttataVgaaaaagBgaagRattccggcttDgggcttcttaacttRgaStaMBaa
+MtctMBHBacttVgKggcttgcgBcBtgDtttcctattaaRcatStNgcKgctatcccac
+SctcHtaHWtgWaYatgVaRRYtgctaaaatggagacctMcttgttMagBaKctttYWBt
+aYKgcccYttaMgtHaaNYgtgtagagDttcBatgtStttMtBWtaaBctaggaaNgaRg
+cttttttgtagacRttHSagaatDaYgcctMBtgtNSNaaBttgVtWtttKgacaatatV
+ttVatagatttgcgtcgDtVgtSattaaaVHtaDaatYttatKSWtcattagtaaNatct
+cagcgtgcKcatDtaBccaaccctgaYcattaNaagNaKgagttttcattaHMaVKMDDt
+aSHScaDattgcaggcccMattatacYtMatWgatttcBcBtBctKacccaaWctatccc
+tcaacaataaataaMttgtaHHcgatKgaggBtRYattatacgtaYNBacagacaaatVt
+McttttRtVcaattgtttgaWtaaSacaRccMcaaacttttaaacgtacVBtcWcSaYHg
+tattacgRtgtgtaKgWgaatctaBtcgtgRaaaWWVBcaNtcgctgYtaaaHaSccaag
+aVMNaacagattaHRaaMWcVgMtctgcatgaagRDattactgcKHtcactYtccttatg
+HtKgMgKcDtacNtcaStgYccaaDagttDtttgYcaagcacWWttaMgccaStaaWtVa
+ctgaagtKtttcaWaatgMattatKcctctttttcatgtaaactttNcaaKgttttMaMc
+YtgWctMtttactttagaKtMgttDYttctatagWcRttatYSagacttcaScaacaYtS
+aattcaaagtgctSaagctattaaagggtaactcacgDKgttaMRgggattttMcgttat
+taVtccaNagaRgMaataaagaStcSaacgtaWttatatHgttHBcgtacggKBtSatDa
+ctRggaRgccBRttctaaaatSactcKtttVaWRatatttWaHaKMatgtacatcagcta
+atggBgaBNSNatatcYStagaatSNattaccgtcaataaggYMRtaDaatVgYaDaatt
+ataRgVaagtgcaNKtgttgacttatHccacHaacVcWcNMDtatcatttttaHacatKt
+atagtgccWttaattttBSDaKaHaDttYacDtBgtMNgggBaaaaattDaaVMaKgatc
+ggKtgtctatctctVatcDtaagaagtgtaMcWatDggaaaaaYtcDVtNttcNacgaYt
+cgatHctctaWgaaggtMttcKtcttaMgtctKNagcRWcgBVtcBDatYKtctaVaaaB
+gtaRagcacggcaHHagcagaaaaacgggtataatcaaWtacYcWtcctaBgVVaBagHa
+aaaaatataRYagaacgggVtttcHaMtNtMgcgaaatKtattaagtMttatcttWtttt
+RaatatgttatgtatttRaagKtBgtgHtHDggaBDtWccattcKtttagtttagtBYcD
+aMBtgatcttgacatKctBcaaaacaHtatggaNaVttcgttatttttttcaaDtDDaat
+caaaYaaBHttaMKMVgctgWtacVtRaaactgYtcatggcVHtgattRttataBtcgaa
+RataDttaatcattHtatatccNattcaaHtgKRtRtagtKaRWaataYaggatccactt
+cacaatgtgatMaggactNaaccaaMaaKtagaaMctacttDSaaaWSgctcagtWaata
+WaHtStMacttaDtgagWaaaatatttatcaacaactRtDgYcYtatatgtataatWtag
+ccaagcgtttataatDgctgVaaagHaattagaatBWggttctBaNtactHtKBtcgaaa
+RttHBatDaaKccaSHgtgctWttcBaatcctYttgaHacgtatgagStatRtMaacKac
+acggaaSctagDagNttgaKKSgtttctacgtagSataHttDctggBcYtttaaatcgRg
+agagaDtgRSaVStggVtgacgtMtatgaaNtWtHgtDaDtgttNaSVagaattccgctt
+VatatacattatataYtaggYaaaRDHttHYDtNgcatHggctattYtaMcWaaVtaNta
+tttHaagBtatcagatHtttgaaWWtttKaaaggBtattHagtaacactDggtattttSc
+ttaaaacaStcaacHttMtatcagatSaHtaVtBaNYcttHcatgHatagaaggggaWgt
+gBtttagtVttgacatYtKtattaYSggtaaaHgcaggaStHtYcgtaaDWgtaaaMcgY
+tNHtgNgcttttataWatttKWaaKtHattgRtBtMMccgtBtYttgaKaWBatcBgaaa
+caBgaagatYgKWaaacBgatgtDaaacttDcacgatSKtaVaRDWtVKgHtcRattact
+ctattBacaaactaatgDtaatcatatKRattSggtcggRMaaHVtgttMcgatatcccg
+VctKMgBactVtWtBKtgWtaaaVaatRgKatttKSaYHtcVBNtgStgtatNStaaccg
+ttaaaaYactBgaaaaattacacVttKattVNgaMattNccctaVtaaStctgaaVatac
+tgtctaaaKYNDtataWtattaaNgtHtaWgaBMttttccaaaDcgctgagBacacttct
+DSctcMtBtNccaacaaatSVtatWggagSattKatRBaaaNtNtttagacttaagtHtt
+aatcgtWctHaMBaHtaaagKaaKttgatattttgKcgtcDtgtKtHagDtMtatgatct
+tgtcSgtWgctaaaaattDaaaNgNYtMttNHgtHBataatMgMttctDcgtNtNatggK
+atHtaaRtRtDStttRVcaatKgaaRSRtBttatccataaMttagcaaWtagtVgaVBat
+cVtYtagttgtaMactaaataDatagNttttactagcgcKctDatatDgaHtRatVWaga
+DtttcggSKataacaggaaKggMtttctaVttMaatgattcgaagcgattaNNtYacttt
+KgaatWttNNgctatatgttacKaMtaaDgtKgttBttHtDacaagaaRgDgttWtaatg
+VBcaaccatgcYggtRcctaaDaaHcatYNaaVDNtBgtBaattYYgcHttRctattVta
+ttgttcKaaatagtacccttgcVtaaHttaagaKtaagSaYtgcacttDattYttaVgRc
+acaattDDttagattttcHagccaYaataKaatccVDKctNcctcaaBccaaBaYgKacW
+VtWttatgcSatcDHttattaacaagaacRSactBHttDaBBBcacgttactHaKgacaK
+taWMcHtaVHttaattcgttatatBaaagatgaactaaYgDNattNaHgHKtaatcctct
+tcHttagaatVcagaHtagBgtMataattaagtcSRcatSagMagaaaacgYacgagcac
+gBcggacaHKaaBatSatagtatcDttRHtcagtDtaStYtagaaagtYNHtgaacaatg
+cgataaNgtNVagtacccctBcgaYWaactRtDtatttKatBccVKtHttNcttVtgaKM
+tgcttggcgaNatctcKggtcttttataaacWaBttcgHtcaHtcgatcgcggccaHaag
+cVgKattBaaWttKcttaVaagYaVacagaacgcScDcgatataagttttacaaKcaaaB
+cYcHKctRagcgaatgtScBagMttYHtaatHcKKtgggatgKSaaatactgWBHVcagH
+cttVBgYDtaVtcctcatRcVKcNaaYaBtattttatRtVtDaaScgtatacMatcaaac
+tagtaKataaatStHtacaagagttgtYatctagaBaHSYtaaataaaStacaHagWSRS
+DtagtatggctgaKtaRctaaagBtactcttatgBcHcNtNRNtHataaccRttagatat
+aaHtacScgtattgttgtDcctaYRaattccaNatgtgctaaaactMcaWttgttgVMaS
+gtaVaSctMcagtcacNaWacgaatWtaRtaatSgatgaaWtaaWcgtttHtWcttgatK
+tgDtDMcagtcattcacttgaaatactWgtattcHttcataactgctgtgtKatRagtaa
+tttYgNcaatcBctgtStaggtaMatacgtYaRNtgNaHtNccRtgcSHgRcaatttVcc
+tattaBKtgYtaMaactRaaaaBaattHHtatVNWYHaatcagtaMVtttctattWHttt
+acaaVccDctYtttVtNtRRKtBgatHtBcaatHYaSgaagaagHagtttDaVaattVac
+tactYcaDtKttgVVVtaWtggctaSttgtaataDctWactcaRttWcMSYtWagaagtt
+ctKHcgKtDaYggaDttgtgtataacaRKctaacttcYaDtccNaNttaYtaatagRtta
+SagaatBtVRtaatcttatgcgtWtataaWgHataatttYYSttYcggKKtaHcttttag
+HDDBtggtttaaacatagaRagtVagactttacKaWDMacgYaacctgctKaNattggat
+ggNgtKcYSttttcctttDtYttBcatgattSHaaccVtccatctcccacDBtgaWBaMa
+accgttttcttaaMgScBNatBtagtcttccttatKBRcctggtVStatagcDgMgtaca
+ttacccattKKtaRcRatRctYVaSagttatatYtcgNDDggKaHggcccgcRtacgDtc
+YctgaaacHtatattaVtcaattaaatgaWaBggYtHYYaVagWacaNtDtaRattgRac
+RtacacatgHtagagtaatatttctgDDcttgNDagcctaaHtatYHtKtRaScgtattM
+ttacaacHggttttatSgaHVVgaattaatagttattactgtRtaWgataMDaaaactgN
+YacYtagKtaRcaYDHatatVatggctKtWatHaNttaatttttgtaagcctggcgKata
+aNtttRMNggDtataaaatVcMRataacagctMatBgMtaaVcgagattcaaaSgtgKac
+gtDHatWaatgttcDtWatgYcWRttcatBSHtttgaatatBgaaWgggaaBcctSSVaa
+gctSctagYatDggtatatgtaatatgtatgHYcRtagagtHcgggcataDHattcaaat
+tcRgcaaaataagattcaaYVtaBtaagRagtttgSRtgRYKgWggtttaaHgcHStgtg
+gtctaHaccaccSaaaattaHatgttVtataccagaatDKVtctagtttcaatgtNctac
+cgDcacgaattacactatgaaggccKVatccaSWaaKHtttSggatgagMagttgcaata
+tKYtacBttaccatHRttaacttacaDKKtaKaDcHHcaYatatgMagaRaNNttcggag
+YRtacMtHgacttagacBaagggBatcttgaRDactgatacatatcSBggtaaaVWgMaa
+tttaYtaWacHattDMtttaaaRRScatcttctaatacagtBVgtgtttBagtatgBNca
+agHaaaSaSYKcacMtKatggcacgcctSRaagcataattaYacctMaaKtcggaBaVaa
+WaDMttgccttaaacttDaaHacNVtgagaataccactctMttaatcttHcctttaggaK
+gaggWtaNataYgtaggtgaagtcWDcWaBatattRtVgtRgVtataacDDNttatcYaa
+aagcaVgtYggaDattccgtccDcSttaaWtttcaaaatggataSatctRYcaaBctMMt
+cttaacMaSgDatgagatcaYgctcacHccMgaacatcDNgtNRcgBaaatagaYgatgc
+ttRaattStccttgagcctaVaagggatatcagtaNMttaaHcMaatccScBtYaYttat
+gaMNagtgHaatHacaHaBaaDtaRNDNcBtagBgacatStagacttgtaatMtYaNaKS
+accBtttHcDaHNBttBaacSaggagaacgWcMgtRcaagattSctgtaBtcaatMtaHg
+caaccataVgtaagDRcDcggaaccaBtacVMgSttgtcataaaaacaMataHatgttaa
+caaMgtacgtMVcatagYtKgtgtcctaBcYKattcaggBaaHagStcNcattatRRaSY
+tYDRaHYttttggaRggggttatKcVtHgctggaNttaagagBaacattggYaaDcSacg
+gYaRttacaacactcDcacBDtYataaaaDWtctcaggVtaYttKtaVKtDSaMtYtYcg
+taacHtRcHctaacBgattttagHaScDctHttaaaatVaHttggttatttDtatHtcaH
+cBagSttttDctttWtctaaataaWtHYtRgtBccSaaDSaNgatcSttaaaatgaYgKa
+aDaVatatYaRaHDtataKaNtagtacataggSaatMtctMtccctWgaYtaggataMtt
+cgtacgccYgBSgttaaHgctRgRgtDVSRattttttaaKtRMtatSgRaatKacMaYgg
+gtagBgNHcgYRagHcatatgtgaacMtacSDRMHaaacHaagtWSMcaattcagtDctB
+attgttcatttMBaDVHVDBtaatKactNacgcBYtttgatctatVVtatcKaKSgtaWc
+gtcgNYatSaRtcaggaRtctattagattKHttYaaBtcacatataattMgtatcataKK
+atDVtWtaHtHHVaggaaHagWaHtattgtDaHRgatgtaaaWaaSStMatttgNtgtca
+gDWgagaBagtcattaataggagttcagcHttgWagaWcRttaKttaDgaDWtYacMWgR
+aatatccMtaaattRaatacaKYcgcatgtatgtNaccataSttSatttttcgatcttca
+aKcMDatgaattcaMWctKNcHtctacaYgatgcaBtDDWtaRtScaYaatYSgBtDcaa
+cYataacgcDgtaacMtSaaKcKttttDVgttgtaaNcaattctcaataaatcSVcKaac
+attgggacatgaaaacggaggagtacDYgatMYttaaaBBctccYgcgagccHattttaW
+tataYcaKaaDYaaaStMctSattaatataNaWcacaataVtcatacaHcgMgaatYgaa
+taatRcWcgtttcNDYcacaaacacaNttttaatctaKtRttHDSttccWatatagtKtg
+tcgaccaBgtVacNaYBHgtttSSagcNtctacctttaacgacaDcWVacSHcaNacatt
+tgBYaaagatWagaacYMatcKgBYcBggtaWatataKcNgaaaattHYtSaYDVHSact
+gttNRgaaaMBtatataaaaacVtctWtgKggtatDBgHaKaHVcMWtYYBaaattaVtc
+gaaacatggagYKtaaaacagttNtttatcatgctagYcctctNgttctgctaYttBata
+aRtattgatgaaactagttBgagtcttccatBagatctBaaagSacagtaaStaaatata
+taataatcttaactatVtaaBattHcHgcttSSaaDRaKtataagggKaacRagBaggta
+MYttggtacMatMttttYttaacttaBaYaaaatKgtactactKDctcttgaDtMgattg
+VgcRaaaKattaatataagWgttcaWgtcaKtatcgacatDaaSatHtttcagcNtatSg
+gtgtaRtgatttStBaNaHgcagttaggggatWtttgattttatcgaBtctaggcgtgtg
+tWttttaaSaWKctWggtgataaaattacBtMRtatccattaaSWttaSMcYtHtaactt
+aaBaDattctatKatctttcatDtcgNcgacttgtaaaattDcaVatRacatgaaagtcc
+tgtctcatacatatcSWgNDttgaaVKatNacDggagWaaatgaaVNtttBataaagVtt
+VataataYcNMVaNaKaatRMcagNacVRactcWgctttNatHaRaBRtaaatRtaKtNg
+YWattaatcttaRttgttcttaaWaaagttcNVtagMaBatcVcgccDaaBMgKttgaVa
+accgYtRaactttYtcatgattgtWSaaBatagtagSataDgatgNtaWatcaMttaHat
+tagVtggagaNHtaatatctNaagaDBatcttttaRaaNtBYagtaacVttYBtaagcaa
+aMatcNgKaggacagagtgaRatWaDaaSaDaaattVgcWttatBNctgSagtctgcStt
+acSRtgatHDgggcBagccDtatYaaagaataDgatDaBttagctatcHtcWtagggagt
+DtSaaacagtagcttVatgttggcStataacttVtaatWKtatDatcttcDaagactgtg
+DNBaccaattaacaaagaaHWtatttaacattWaatgttcMttaNNcYaRccHtacRaga
+tccKaaYactcVRDtcHVtgaaNaSatctRSaWtagagtcgcaataDcagBaagtctSNa
+gaaaKgttataStaatagStaatSatataWttctcgtaDgtYRcgtHttaKtcDttRaat
+NacYgtagVaattNttttatDgKcttttSaaattYcgYBaaggttctagYcBataacVca
+gggaWtaKtacatgcYcctatccDatatagtcRaaaSMgtggaatcaaMaatWcgctagg
+gtcattaVtctaatgHcaSHtcacttBaagaMDtactYgtttgWgacccStDtagaDaBt
+gctctttKaaaatMttNStggtttatWttYttatKMKgtctaKcgaBaaaattcccgacY
+tBcaKaKttRccaaBaWgMaMatgtWtcRDWttcggacNctataaacKaaatHatggDat
+SaaKtgcgRaaacgtgttcatNtgHtcaataaacaaWMKatattcWaKcNaccWtggttc
+ctBaMttgRtggtWtaaVggDgttaDaScgWccWHatacaagtaHtaacttWaNatgtgt
+taacKaVtcataDMattgtaKccttttttStaaDDtHYattNtcgatataBattctWRat
+MVtStaSaWttNRacgatagtRcgcRtcctttacagBKaaVcYtRaKatVtaWttaVggB
+BatcaaWatgtggagattDgWtttcaataDtactRaatBattWVacttWVNtVagHaHta
+tttaVagtRMMtaBattatataaNaagatHBtgtatVtaaacatttagtccaKDcacgWa
+aHagttVKBgcgRaSYtttVcgaacaBatttaatctaSYtccNtcatctatttatBaHca
+ttcaBgDMYtactgScccttRctaagtaaNtaaaaattatggtVataaagVStcaatcac
+gcDaatgtaacatDBagtcgaaRDaSactgcagaHgttYatgaVgtNccttcaKHgcgat
+aDcgYtgtgBatcacScgctBcVttttcYaaNtttttatcBaatgataYgtgttgtatga
+VcBagtatagtNaRaaatKVtcRtcWatctaattgtVgataaMataWagaDttaatRcgc
+taKHgaRagtDctScatNgHgtKgtDtHBVgYcagatgttagcgaataaNBactBaaRaW
+cRcMctctBtWKaggcaataatSYtccagtRtaSVtRgatctaBgDNDtBgtttgtaNtW
+taatatDtataacgccDttcaMaMatgRtgaaaMHatgBaatgcccDagNgttRDcWtaa
+aKtMSaBgctgcaatgtSVattRWcBtDaaMKRcccWtVttaaatatttctgtcatNBga
+aaatHtttWtYtttcaacaaagaaNYBaatatctgatNtgaacaaMaaYcNgtgatttWt
+NaatWcYMScMctaaStttNgHtMacgtMDtgagcattcacWtttKttBtKaKcHaBttt
+aBacgaaNYaaaatBaatNHgaaatMtagatDcaagMtaattctKtgNtScaatagcaHD
+agtagagSRcagcaagaccYHtaNtBatKtStcRagtgttMaYgtgggtNatSaatStcY
+taBaSBtaggtctMtatcatgaattactcYtNagaaaDtggaaatKBattaaatcWgKtS
+tKtcaWMggaattYtggccgaWcacagaNWaNgaacaYaHgaVtMctVHttaKDcctNcc
+BKMDagtatgcHtttaaaDaggtgHtattcatatttaagcBaaaRcSgttaaatgWacRa
+tacaaatgBatYatatRBcacaVataRaKWMcDWtSaatatHattcVgMKYtgtaVBtga
+gattRgaatgaDgtcaStacgctaggRggtSagKcWYctacaagtttBtgaBttacgaSt
+HgVaStgtaRtacaDccNDattSRgttatMtNttttWHacDtttVtgacgYattccWcta
+agtgaaaMMatgNtctaataRctgaacatttVcNtgtttgaggcaaagtatgVgtaVtgR
+DcttBDtataaMBatatNgataataHaaaNacaStgaNaHgYtgacagtcYDggagattN
+caDtKgtagMaacSHRtcagNagatKcatataVatactgRVatgBtatcgttattHtHcK
+aDtagRagtgHtaDcVtatacattacggcaKttattgacatDaatgtctcattVcaRctt
+ttgDtNHSggcttaYDcHaatcDYacccWaMttgRtNggYtttttggDgctacVDtBMgB
+aDgtMaaBgctBVttVagaHBaaaaatgNactaattattNagaagNVaBgVtRgggatac
+gctgMtgaccatMaaDYDaagctggtcaatggtatBtNtccWtWKcaNcBttactgtgBY
+DaMtMtcWaatctWYHatccgWtataaaNNacNgctYagtaaaRtaaYggcagaMaaggg
+ttHaatatcaccVtagtggcgtMtagtcaYaaRttWgBtctgaaBtKattaatYtacaat
+cKcacNcMDtgtactatcDcgRtaaYagattgccMtgtYKaRaWHgtaccttagcRaWaa
+gDataccagcatcYtcaaSgVacatttaSttSVDSctactgaNctatVattttacgaggW
+gtaaaKtcNgatgttgcaaNVttagRtttttRttYYaYcaaagcVDMaaRaRtccVcSat
+tttcaattagWattMMctataWatggtaagagRaaattYKKtgatagcMYgcVcgggSta
+ttacgBBctNtRgacaacYHctctNtataattBttStaRaaaatctgtWatcRacaaMta
+ttYttKtccaatcSttatgtaWttcgcaaWgtWNcBccRgtBagNgYtDctatccMaagt
+gcYMtYctYttgtcVaaHtatgcBaaBcgaataattcttcDaacaaacBtagWYaagcaV
+acYcKYttgSaKVcttccgcctcattctcaatgVgaaacatWWctgcagtttctttttMa
+gWttatRggcattattVaagaBBttatctattatMcNtaacagttgaaaBaRtaRRtNta
+taYNtttNtcctaVBtatNtNgBtaHHYDttKctaDctcaNcatgDaYatgYagaDcaHg
+actHgWWaagWtSttctagKaaggYtcataYgBtccRaggggaaaHagaacaDatgaaaa
+tcaKtattgWacgtcMSaacYaYgcWYNgagtaMgtSccgaaaaaatctggaMMRaaaat
+aatctaaacgatatgDaggaVKcttttaatgacBttNYttagtatDagYttWctttNgtH
+tcVtattHtcHacattatHgNStgtSaNaactVMcaatcccBHNatcttDtcgaKccKtt
+atttctVRaagttaMtaYtcttcatMYRctttRtaMgSaaaactgWacHagtacccattt
+cgcatgagtaaagtHcaKgVBtaattatBtttWatgMctccattgactattcttgtcatS
+ttaaHaVtKtDcatcatatccaacKatattatNggNaRatcMSDHRtcctYRaatccacY
+aatBattcttBVctatatttRNtgaNtcaaaRgtaBcttaaDRcgctacWcttgatatct
+HttttgtNtYatatacgaVBgYHgattgggtcgacacDtttKVcaattWRcaagBtgctD
+KDaYtttcKgNgggtcacVagatMgtMVgVgatttcagtcgtgKgtKYgtYSaMtgataa
+tNggattKNgaSggactaaBagataacactcataVgttataaSacaatcRRaagtaDaag
+DYtcactgtgaVttWtBaMttttgaHtKaYtattccagccaaBaggataaRtBatNcatg
+tatatttcttacaaYVNatagaaagaSaaaagaaatSaBgtcgattacattgWccttHNa
+ttataacgVRDtYcWgaaYaVgMttcttgtDtKaYVttctgggSNtaYHWaaHactaaSS
+agttgSaaactYaMttaMaHVRtcgattaccHtcgcgatgNcaYtatattacgcHaaaMN
+MtaYDgacaggRgaYVtVKcaSVcWMBBaWaWcagtatHaWBNaMcBtatccatgaScHt
+YtgactcattgaYatRtacttYtctttgBgtattaaDtcaHgcNcaVatagtttggggRa
+aaccWcNNttRBgaaRKgaaNtMaagcVacgtgttaaMYWtcBYtgagtaatcgttttaa
+tcgaaaagttDcaatgtggtBaBcNtgNatBtggactttagYttBcgttRttatSgacNa
+DttatRKacactgcSKaVaaaRgHaattaaaRctgatKaWcctWggWWagccgaactaYc
+cttgtgaBHggcYttttBccttaggaKtaaaBacVDcBYYgaWagaKtaHaaactaNtta
+tagtcttttacgaccctttKattWcgHgcaDccctHttatVVaagKaatatgggMaNHag
+attgNStatBatcgaaYgcVcagaatcctcYtBKDatatcNKgacaatKDatgaaacgaa
+atYYcgNBDtataatMcRWtaagtataHgMaVggcaaDtggttcVattattaaaatSVaM
+aNcDBttataYgttttStacattgagagtccaNtgaatttttKtStatatttRaatttcg
+BDccctaaSWatttaaMBStcatacctgctctatctatKatatgaacaactctWBaNagt
+cgYaaaaRtctMtDgtaBaacaNtacagtcgataNgaVccgtttattatgatctagtDSg
+aHNcctKtcttatNtgatYKaaStctWDVcaaccgaVttScaagaaaaVcccggagWatc
+VaNtVaRcNtcagatcMMatactaaaWaagatYHRWcaSagcgMtttatSBtBtBgacRa
+VgtgattaagtBgtatcgtNggggDaWgagctgatctatttHaactttcgcttttccatt
+tNaaYgtattttactttacttRataBttgatagggacattattaaSaaaYtgatggaDaM
+ttacttatttttttaaWttttaataaWaNaattgtaBtBMcatcNtaaMtDaaaatcRgc
+atccaMtggWggHggagSttacaYHatYtgtaatcatttgVtataaDVttcaYttctHtH
+tagttWHNYYtVRVccatacaattaaaYatcgcatBagcaatDaWacVaBWattagaaBa
+taatgtKaaaNKcagaactNaagaNatgKtBSctgattgWcNaaSataggtataaacVaa
+tDttcRaRtVtVtgtataagMtSccaSScagttgatYattcagcMaaWctaagtYcSatt
+NccgtcgtaBtaattgttgacaaaDttttattaatacSKtcgcatNttatWatacgRtgc
+ataactYtcacHgVgHttYaataaWacgSVKatactagDggcattKctggataagtVgKY
+tatgttagcgtaRtttaaagacHgacacattcHKaMKtcgKtcacggtgatcaaBtMttc
+ttattcttDaKKVgWagtaacatgKatVgacattagWtaRtaccRaaVHtttttRtgBcc
+agtcgctagtRtaBcMVWMtaBtaggttaYcttagaSgYgttttcaaNNgtttVaagctg
+StttactaacWattcgtVgtgtKcgtYaaaaaKtaSaattgBtYgaVcagKatgaMttWD
+RatgtaatctagacWaccgcaNgtctgtgagtMttgaaatNtttattaRKcgtaWatcaW
+ccaKtttNactaatNcgVaaBcgRgDttcDcatttgagWNattttNaYtttatgcHtttB
+BacgttgRgtcataNtatatcaWVcatgaacatRgtNaWaatcaggttaaSctttcaaca
+tHttVKaHtNtMtcttcHattYatcgatgtacSaaataVtcttYStaagattDagtKccg
+accHBYatMtcggBacatVtaaagMcttBgtSagKgNttttcNtSaaMaStHgtattttK
+aRttaMtDtcKtcgagDKgaaaacttaaaWNaattgaWWaaggaaacKtttVggMBcata
+ttDacctaMgaaKgcgcaaMRtaatcgataaatRDttataNtVgtaVDggttaNgatBgt
+ggcaaYWtagctcWgtSaacgtattKcgcBtttDacaaaaaStKMtatNccagKatgtVt
+HtWaSBgDttgWgaattWagttttaagcctNcttaBtYttaRactaattggagagggtct
+agtatgggtttacttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtcttt
+ataattcBgtcgtactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagac
+atWatgtRgaaaNtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagac
+acatagtVgYgtcattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYat
+cWtgacaYcagagtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttt
+tttttYaaScYaHgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDt
+tgttSagtRRcatttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYtta
+RgKaRtccactttattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaM
+ttcgDacgaSStacaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtt
+tttatttaaccttacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYag
+WVRctDattBYtgtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKH
+aatKWcBScSWaaccRVacacaaactaccScattRatatKVtactatatttHttaagttt
+SKtRtacaaagtRDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttSt
+gttattaaMtgttgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNattt
+acttaatgacagcccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKc
+tacatagYWctgttWaaataaaataRattagHacacaagcgKatacBttRttaagtattt
+ccgatctHSaatactcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttga
+tHtMttaaKaggYtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacat
+VtHRtVYataSaKtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatcta
+taDtDHBttataaaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgc
+ggctaaWSctBaaNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgR
+tcaaNtYaNacggtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctt
+taYtaaagccgctcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtg
+BattDaaDgccKtcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMR
+taataaggatMtttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRS
+HcVagaagtacgggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStata
+tNVataYHgtNaBKRgNacaactgatttcctttaNcgatttctctataScaHtataRagt
+cRVttacDSDttaRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataV
+tttRNKtgRacctttYtatgttactttttcctttaaacatacaHactMacacggtWataM
+tBVacRaSaatccgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaa
+cKtaaatctcacaattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtt
+tHaaggctKKgatacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgc
+cDttcgtatcgaaacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRt
+tRRaMScNaaaDgttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtac
+cagWattWtRtgttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYg
+gVctgtHgaNcVtaBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDt
+taattgttctaaccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVtt
+cBtaYMccagatgaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttg
+WatWttcSaNgggaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHt
+YcWcttagccaatYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcH
+HggHRtgNcctttYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaaca
+StttMtcgactttaSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVa
+ttttgHccatcacBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatat
+taaRSgYtgBagaHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSat
+cataaatataHtcgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWat
+YaacttMctcttttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaag
+aaggaNaaatBWattccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaS
+atcttttVatagttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtH
+tMgtHcMtagaaattBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaR
+VatgcagaKStctHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacY
+gatDgtDHcctaaagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWD
+BtgaatcBaatacKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactca
+aatKtacaatgcgYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgH
+aaVcattHctcgattaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHtt
+cgaatVaaaacaBatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtatta
+ScctaStagKgaDcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBg
+gWVcWctVaaattcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataa
+ccKtaRgtttaMtgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYY
+atKatgtccgtRtttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaK
+aYtKSDcatcKgtaaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWag
+BgatBtaaagNcaRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgt
+taatgHBtatHcDaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBta
+aactYacgNKBaVYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRt
+ttcatagVgMMtagctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaS
+ttaWaVgataatgtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcW
+tctaaaNVYKKttWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSg
+aNcHggatgtVtcatNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDa
+acataKttKatttggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcat
+tttNgVHtKcYRaatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaa
+DcaagtatcSataWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttY
+aattataaNgacacaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaa
+aataMtaagaaStccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatct
+atgHtgttKtgaaNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaatt
+gSaacWaVtaNMacKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWg
+RtcDcSaWSgttRtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatt
+tctYtatMatMtRRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcata
+cRcatatDcttatcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagat
+agtSYacKaaacgaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaat
+HattagaaccgtYaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattg
+taatVatttctcttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStag
+WaSgtaaKagttttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtg
+cVttttagagatgctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtag
+caYggYVKNgtaKBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgcta
+aaStttaWMagDaaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatcca
+gNaaatcYRMBggttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMga
+gttDattaHatHtaYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYg
+BatWtaMagactVWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactac
+HVtatgatcBtVNataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRD
+aVDttNactaSaMtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYatt
+McaMtgSttDagcHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcag
+tatggScctatattaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMta
+agNttattatcgtctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaat
+gttattgWDDcNaHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtac
+agtccaYatWtcactaactatKDacSaStcggataHgYatagKtaatKagStaNgtatac
+tatggRHacttgtattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRc
+cRtaaccttagagRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaY
+KBctccaagaRaBaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaa
+tRcggtgNcacaaKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattB
+tctagVtacataaaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacg
+acDcgataaSatYaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYS
+NttatagtaNYtaDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNta
+tVaSWctWtgaWcggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattt
+tRagtDtacatatatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaag
+ttVaMcNgHatatKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHa
+SttatgNMVattMMDtMactattattgWMSgtHBttStStgatatRaDaagattttctat
+MtaaaaaggtactaaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatat
+WKRgacDgaRtatatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaW
+tgStcgtMSgaSRgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatc
+ggRaggSKctDcagtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgt
+tatctaatcataNctctgctatcaMatactataggDaHaaSttMtaDtcNatataattct
+McStaaBYtaNagatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgS
+gggtagacaataaDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKg
+HcatctWtctDtttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtY
+gctaatgaaatWcDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaa
+NgMttaaStagttctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctca
+gDgcWWaaaBaaRaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgacca
+tgaaaNgttttttttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWac
+ttaSgtattggDgKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVg
+gcttBaRgtccctDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSa
+attccSWYtttattVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaa
+aRVtcWMgBagMtttattacgDacttBtactatcattggaaatVccggttRttcatagtt
+VYcatYaSHaHcttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtK
+aatattStgaMcBtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaN
+NctacaWcttttgcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttgg
+NtacttttMtgaacRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtc
+gttcaccaaaaggWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgc
+aDatgRggaaYctaRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMaga
+atgHMatcttatacgtatttttatattacHactgttataMgStYaattYaccaattgagt
+caaattaYtgtatcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHt
+BgcRttgtgcgtcatacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagt
+attDacaacDMatcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtt
+tDtaaNgNtaaBatggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcct
+RagtVWSHtVSRggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttN
+cttagcaatttattaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBt
+ctRtSHaNtgtacattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKc
+gWatcaDatYtKSttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRR
+aRcaWacaMtBWVHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaa
+ttRtttcYgaccBRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttH
+gSHaSaatagctNYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDct
+aaHgttagDcRttatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataatt
+attataVaaaaattacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKca
+SYaatMNctcaacgtgatttttBacNtgatDccaattattKWWcattttatatatgatBc
+DtaaaagttgaaVtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctat
+ctaaBcatctaRatgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaa
+HacccgaYStacaaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBct
+KaacaaaaaSgctccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaattt
+DRtgWctagtacRttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaa
+agaaattDVtaggttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaB
+cKaYWaatcNSctagtaaaaatttacaatcactSWacgtaatgKttWattagttttNagg
+tctcaagtcactattcttctaagKggaataMgtttcataagataaaaatagattatDgcB
+VHWgaBKttDgcatRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctSt
+attaatHaccgacNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacS
+attgttKaWattNHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgta
+acgactctcttRggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMg
+tgataaKYaaatcHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgca
+acaaaataccVgaaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSg
+KStctccSttacagtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRM
+ggatggcKDgWRtNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccc
+cYtcBcYRtagattaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcg
+VttWNtDaBatgataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaa
+ttaatgaDaaMatacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgtta
+aBRNtatRtcagtaagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVa
+tgtacNtttccgtHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgca
+gtWNaatNccNNYcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMt
+ctNNcSMacattataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatt
+tgatMMYactaatatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttV
+tagaDtcacWatttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMccca
+SttccggaMatgattaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDgga
+WgtgttttKtWtatttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtat
+agtVtatcaaaWYagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDc
+YKaagtttattagcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaaca
+MttKcaWcaaSVMaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDN
+aaKacacBtttatKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYga
+tattttaaatttccattttacatttDaaRctattttWctttacgtDatYtttcagacgca
+aVttagtaaKaaaRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgta
+tttBaagcBtaaBttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaY
+ggtgMtataatMtgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagt
+YccVattaNaaKStNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcV
+tgcMaDaSKStVcgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggag
+RRttaagaBaaNatVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaata
+aHttccaagDtgatNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagact
+actggaatttcgccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaB
+tgacttaaacctgYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattac
+NgaHgaacDVVMtttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttaca
+HcRctgttcaaDBggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaK
+aatggttRgaMcagtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgc
+aaagDgttVtgaHtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggc
+agMDagggtBWRtttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHct
+DWNaataRgcgtaVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaa
+taMgattRKtaacatttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtc
+DtttgcBtKYYBaKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattc
+YNNaWcgaaYattttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtt
+tVgYBtMctaMtcctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaa
+WSaYaKttBtagDacactagctMtttNaKtctttcNcSattNacttggaacaatDagtat
+tRtgSHaataatgccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagW
+aaHSgctYYWtatHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtt
+tcgttaKattcMatttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatM
+taacYaatYtVcKatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKga
+RaYcaNKtactttgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaa
+tNgVtctgaatatcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaH
+acttaataataKtaRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagV
+agRaaaggaaBtNatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWa
+atctgatYcaaaHaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWt
+atttgWttVaaaScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBttt
+aKtgaatgagYgtNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBa
+acYttMatcttKcRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHa
+tattMtVatWgattttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgtta
+acaaaaagtacaHBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatM
+gacatcccagcggMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDc
+gtagcVBaacDSBHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaa
+SWccgtatWatggDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatc
+aataSttaBtatKSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNg
+tcttYaaSaactcagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacata
+atcNtatNaHattVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgSt
+gattcttaagaDtaWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaa
+taMataBSacRMgDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaa
+ttaVacgaaMMtaatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScat
+agcgtcaactatacRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgM
+taMattWaWVtaRgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDt
+tgBgtctttctcattttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttg
+ctBBcRDgcaacKttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDc
+catttatcgagSKaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttM
+atacgatcaagDgatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaa
+SaataaatYcgBaaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcg
+gaattgttDtctaaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggW
+VtctattagtgactattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttc
+WtatKctagDtYtMcctagagHcactttactatacaaacattaacttaHatcVMYattYg
+VgtMttaaRtgaaataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttK
+cWataScKggtatcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccgg
+ggactcMtttaYMtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcata
+RDttacatBatccattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttcctt
+acSMaagBattacaMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgag
+gatgBVgcHaDtggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYtt
+cctNgWgcgSMcacatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMV
+cMgtaMaHtgattYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaa
+taaYSggatagcgcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactS
+aKatWccaKaaaatBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaa
+WgttcgaWatgaaatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYat
+taaWatVNccatNgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatY
+gttttgtVaatttaatagcagMatRaacttBctattgtMagagattaaactaMatVtHta
+aatctRgaaaaaaaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcH
+KaagttMMtaatttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKH
+acMacgcVaacaDtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaR
+tatgaactaatatctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctM
+tcSaagaSHaataNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaag
+gaMcaataBRaaccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRg
+tYaRtataKtgMttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatat
+ttgttYaatMcaRcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatK
+acttataccaNaaattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactB
+aagKcHgtctacaatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgta
+catcccaggSttaBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaa
+agataRatttHKtSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatN
+YataactctSatatatattgcHRRYttStggaactHgttttYtttaWtatMcttttctat
+ctDtagVHYgMRBgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtW
+tttYcVtattMcgRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDctt
+cgtaWtaattctcgttttScttggtaatctttYgtctaactKataHacctMctcttacHt
+KataacacagcNRatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgt
+tatBtttttaattaagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtg
+aNacWtcacYttaaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtt
+tacaaatYcDRtgVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWcca
+agtaacacaNctgaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWK
+cctaatNaStHaaaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtc
+aMtBagttattagNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcg
+NaatttMatatgttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgca
+aYYacaNccHatMatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtH
+WKNtgtattVctSVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggt
+attHaRaWMYaYaWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagta
+ataDttctggttVcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDa
+aVKaHtatatatHatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattg
+StKgSKNWKatcagDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcD
+ttKMaKaVcggtgttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaa
+VatacggtcMcgagtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSa
+agKgttaatMggtataatgttWYttatgagaaacctNVataatHcccKtDctcctaatac
+tggctHggaSaggRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgR
+agacNaaDaggaVBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcg
+tgtMtatcaYcgtRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDt
+atDcatcagKaVMctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVg
+tRgatggaWtttactaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMt
+KtatBcttgtaaWBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattB
+atVtaagttaYatVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattK
+tggcctatgaWDKRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYatt
+cHtaWcaattctBtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRtt
+caMtRgattaacattRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaY
+aacWcgcatagBVtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttac
+catRaaatgWgDaMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKc
+agtBRgagtccatgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaN
+aKVacaNtDgattgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataB
+tttatBtcaKtKtatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtat
+cRagacttaYttVcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRat
+ttctgtRgtctatgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaa
+taaHaagagaatScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagW
+atctaYttgaaatctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaa
+ctttttcaatggWgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaa
+RRtVBctYtVtatDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMV
+aacctgaStttctgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcac
+tDgYaBcatcctMtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacW
+ttKttagYtaattcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggt
+taacYtacgtacatgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagc
+caaKtttcDgcgaSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgtttt
+HtKtcWtagHStaacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaa
+tatHttcBaaSaaatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNa
+gctaaaggtagaYctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaY
+gttYcgacWVttWtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRt
+aaatacactaBtttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacct
+ataRKgtBgatgaDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagta
+ttaNgtctcgtcctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDt
+aacaWHcaKttDgaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYa
+acaattcaWtatNgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagca
+aagattBacgtDatttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDt
+gtaWKaaRMcKMtHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttata
+tVWttgttatttaacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaK
+actaMtttaSNagtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVa
+aRNaHaaHttatgtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgSccta
+tttKtaaccaagtYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNc
+gHgcaaacNDaaaRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaat
+ggcWSatMacccttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgH
+RtacttaaaRtatStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMt
+cgaVttWacatNcatacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttM
+aataattatgttcttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgc
+ttacYKtVtatcaYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVt
+tatagtaYtRagNtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWM
+atttgaactacRctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatctt
+YtaBcKgRaSggRaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccat
+cNHtatWYgatHSaaaDHttgctgtccHtggggcctaataatttttctatattYWtcatt
+BtgBRcVttaVMRSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSt
+tKNtHtKYcagcagaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYga
+tDHtWcaaaBcWgKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaa
+BtacgcaactttMctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttcc
+KagVgataattWaHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMt
+aHtaSKtcBRaNcttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataag
+atgaaaattgtactgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDW
+gtttatNgVDHgaccaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgt
+aVaaYaDtagattgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRt
+atttNtagaDtcacaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgc
+gatRRttNgcatSVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctat
+BagcaacaagaatgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRg
+gatgtMNaattggatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaag
+WBttHttgtcttattDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDg
+tttagYctaNccDtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaa
+agattVYaHMDcaDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVc
+RtatMacaBtactggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatS
+aaggMttctttcttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMct
+gStgMDtagtaRctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNa
+cgtaatctttMRtgacttttDacctataaacgaaatatgattagaactccSYtaBcttta
+ataacWgaaaYatagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagctt
+atVtagtctttcattaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVt
+agKaaRBtaHtaaggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctc
+cctaYaBacMgtcttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcat
+acYagMVtMcagaMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaB
+cgDttStttttcVtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSa
+aaDttatacaaacatYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaactttt
+HaDaKaDaBctgtaggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacD
+attgatattttacVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacat
+aYDBtttaatBaDtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattca
+HagtgaaggDgatgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggtt
+aaattcMKtctMacaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggta
+NatatacctMtatgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMag
+cattaBRaStctYSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaa
+HgcgctaaggSccKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaac
+WaaattctSgtDactaaStaaattgcagBBRVctaatatacctNttMcRggctttMttag
+acRaHcaBaacVKgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKt
+MYgtatBtVVctWgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDa
+gcggttMaagtcScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBac
+ttHNttttaRcaaatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgatt
+ctccatSaaRttaaYctacacNtaRtaactggatgaccYtacactttaattaattgattY
+gttcagDtNKttagDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaa
+cVtattMtYatMNYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagt
+cgRgacttcccctaDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatggg
+MagtgaacttatRtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcg
+tgaNDtgttMNgaNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcc
+tccWcttgaaWHtWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgB
+ttaaWcaaWagcaSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSatt
+aacaaagtRacMtRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBct
+gagVtYactgtaaattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgK
+agtcttcaaHRVtccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWat
+cBctctHYatHaDaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaata
+tcgcNYRcaataYaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNtt
+BaDRcgaaaagctNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactg
+MtatBDtcStgaccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDa
+gtaacBccactacgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYc
+WaDRaaaaRtagatcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagY
+MttactaHtaatcttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaK
+tMttVcataYBBaKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgt
+tatcatKcgHacacRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgac
+ctaaYtBgaaaatagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatg
+acacttcHSaaaccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVN
+tcacaSRttcYagacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaag
+aBattaYacgatttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcD
+aHaggDaagtcgaWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctH
+atgtcYgaKcatcagatactaagNSStHcctRRNtattgtccttagttagMVgtatagac
+taactctVcaatMctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYS
+tgSactatttHgatctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHct
+aRtgtDcttDattaggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaV
+cgMttgtNagcgtaDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHK
+tatagctgtVgattaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaa
+tcgtagtcctgBcgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagc
+tWcctccRtataBaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacattt
+aaWttHtatBattgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaac
+gVactBtaBaKtgBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDt
+atttVSaaacaggatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDa
+KaatBaaYaaMaataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSag
+tttgaSMaYBcaaaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattct
+cctacctcaNtttaaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWa
+aaaaaaaWtDtaatatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBaga
+ggBaSMtaWaVtatattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHc
+RagattttaSataggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaac
+HgKatKgatYtacYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtN
+tcBatttatttttgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtN
+RaatatNatgYcaHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagta
+YtccagcattNtacKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataac
+cctgtagcaBgtgatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaaca
+cagtSatBacKDgcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaat
+tataRtttgtaagMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttg
+ggagBcgttcgcMaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMac
+actYtBMggtHacMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgta
+tttctMaSRagcagttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcg
+RtgtWcVatcgttaaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaa
+ttgHtatcggRattttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaaga
+actSttcgaaScaatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaa
+NattaaRttttaVaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcK
+cYaatatactaaccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaa
+aaaatgSaatgatagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWt
+ctgBtDcgatNatcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttc
+tgtDtaaaMggtgaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaB
+gWttDRVHagattYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSS
+aaagaaaatYcHDtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRg
+caSWNtagatHaacttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaa
+aVDtaagtttWVaagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaY
+gHttBcgaDttggataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacg
+gHVtaattcacaagagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagg
+gatVgactagMaaataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaH
+atBatcaaBWcBgttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSa
+VttttcgaaaaattgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgatt
+aatHNSttatMSgggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatg
+gtBacYcattaRSataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtB
+WtcaaattSttMtattggaaaccttaacgttBtWatttatatWcDaatagattcctScac
+ctaagggRaaYtaNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVK
+atttcgSgatRHMaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttga
+gttaKatagttcaggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatR
+VYcNaHtaRcaaggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRga
+atatgtYtgcKtaNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagca
+cHMgtttHtYttYaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacac
+YtgaYVgtgHtaaaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaW
+tSgNtBgagcRYaMDtactaacttaWgtatctagacaagNtattHggataatYttYatca
+taDcgHgttBttctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMg
+gaatNKtatBaaatVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMt
+tcttKtgtctaacVtatctatatBRataactcgKatStatattcatHHRttKtccaacgt
+gggtgRgtgaMtattattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatc
+gVMDStattatYBtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaacta
+atgRaaKgatccaagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRcta
+taYcttatataaagtatattaatttataVaacacaDHatctatttttKYVatHRacttta
+BHccaWagtactBtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttg
+McattttagVtaagaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNag
+ctagDgatcNttKgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttg
+tDgccatcacaMattaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBt
+aattgtWattatBRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgc
+gccaaHgaggatStattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHt
+MNgttatctaWWatMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYg
+RDtcattatSDaHggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaa
+aaaatacggtttgHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYat
+taataYRgtaWKgaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgca
+attcWgMacttacaaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtatt
+aattaYtNaYtggattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgt
+tgtStttttMagaggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattg
+ttttSNggRtcaaKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacga
+gaatBtggtRcVHtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWa
+cKYtgRVNgVcSgRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaat
+DMatYattaactttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttaga
+ccaRtataBccataatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtSctt
+ccaNaatcNgtaatatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNt
+cagaaaaacacagtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcga
+ttatgtcaDagcYRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYct
+MaRtaRtDagaaaacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttc
+cgtDgaYtatggtDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtStt
+gaHagtcStctatttccSagatgttccacgaggYNttHRacgattcDatatDcataaaat
+BBttatcgaHtNHaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgB
+tSgaKtcgHtttgaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYta
+ttctttRWaaVtSttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaa
+atSacacaatcgHattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYga
+tgatcYaaaRactctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtac
+catNtaNatacatttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttat
+YtaatcKatWatcaatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDta
+MatKYagagttNatWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtc
+gKtgatccttNcttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaY
+atatVctaataMaaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatW
+tYtgtaaagNaaacaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaa
+atgtttattDtcaagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWta
+WVHggaaaaNatttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtat
+DNtgtDgaatVgtVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDt
+ataaattaaccaactMtacataaattgRataatacgBtKtaataattRgtatDagDtcRD
+acctatRcagagcSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgY
+gRtNtcagttBcttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatS
+gtcYtgcHtaattHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttagg
+tttgtWatNtgHtgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaa
+taaBttataataYtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatga
+gMtcgagtVtaDggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcat
+tatttaKWcataaatWRgatataRgttRacaaNKttNtKagaaYaStaactScattatta
+acgatttaaatgDtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStR
+tagaccacWcaMtatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtN
+aNtcgYYgtaaactttaDtBactagtaDctatagtaatatttatatataacgHaaaRagK
+attSagttYtStatatatagtcttaaaaMtcatgttcaaDactgRttctaagagDtattt
+ttagcgacttgtgRtgNctgSgRaaaaatgcaMtYtDcatcaaYKttHcatSWgaaaatD
+ataggttatgBDMtgttataacaaYSgagttacgttatgtDStttaaatctcgWKtcSac
+gagagaSgttatBMDgtcggtgtgcgaNtaSHBatBtttVMgVcagaNatcaDDaKMtMY
+tatagaBccctctDtgtatttatatKNtgggtatgtRaacttgaWaaYgcaHatccctgg
+tttStatMtcgcMtaaaWKttMVtWctVtgttaKDWctgWaVttaDVatgKtagagtcat
+ctaKWgtaaMttSacBaMattaKaaHDataattgWtgttttgtcatBacacgtStacaaa
+gtNctNtgtgatcHtWttcKaagagttttaaaaWacgRacatctNatVStgaatDHgttW
+cgtRKcatatatctcaNttaaBDcctgaaaaaDtaYaHaKttNtaYVaVtttaDtctact
+tctWttaactaattttMagWcaatcccNKYtBaacatgttgaKgKcgcBHaatDMttata
+tcSWacatDatRcWaMtDgatBctHgScttaaaHtSgKtDtttattgtRStWgttccata
+tttcacWttcatattgtaHVgaBtacaMtgMaaagDaataactDatattagMaNBagctt
+cattcgtaaKtgtatttcacMtgBaVtaattStcttagtYgtgtcgccttKatgggtgaW
+aataggaatacMMagaSKRttBgatgacRtgMtagaSRataggtatcaccgaNaaaWSWa
+cDgatacttgattagcttgtgVMttatYctaRgHVcDtVRRtSaMtcaVtVtatcaYaHa
+tattaaVaatctaBtgtacRatNtatttgaYatSaHctaNgNtYtYaYagattVgatcRt
+aacgYggtgtatKttaatMagatgRtatatgHaKccHaaaaYtgaacgaWaNgtYHgaca
+gaYtctaVtacccgatttttaaagcDttatNRgattKaaattttcatctaatgccgcaat
+aataattgttatYtagtRNtaagttggtHaKttWMtDKgatSagBYcgRggtWaVaattH
+tatgtaaaMgSaaagataaKaaKgttDttttRaagaacaWRcaacDgtgttaatattaKt
+atcaWacacatttVtctgatHRcagtttNcaaatcNctNttttataactWacBBttgBtt
+aaaRaWtBKaaacgtatcRcaMaatgYacaaaagtgBataStWYtggtatgacaKWtctS
+gcKHgtcNaMNcataSatattgactacMcataattNVtDaRccaaatcagttttYttagY
+aacgtaatMtMVatNgKaaMaaBgattaKttatDaBcttKtccttttacDagaYtacHgt
+tggacaaaVaatagtYatcataSgatcaaWVttcgaatgaccctccttNtaSBWaatttD
+ttttcaatatYggctatDcttatNctttagDcMttcaacWaaNattSYgctttcaHcRaa
+ttaataaaatcVccRaattactctaMaVRattacagtgRcDtcgtgctcttNtWVtacag
+tHtatHaBDtcWggtgctcaaRHtatgtDgacStgcaaaVKtagttataatactaatatg
+tagScaatRSacaattgtattgcagatHHtgBcaatKKtaaMMcaRcgactatKBaMaYa
+tgKatttDaaNtRatattgtatWttagcaaaaacaWgcacaaHcataYtDaHgttataaS
+acgcagggggtYatgcKctaaaHgcVgctBDaVttccStagNgcSgtatgVYaMatcaWR
+BtVtgYttgtgRcYttcgctgaacNttgtgtctattWttttcctagMtagaWtaKgatSt
+ScatMaBtaStaSactattYNatctgtacRatYDaatgatgatatgaatYaaaaSHttaa
+YMaWtDcaNHaBcaYtgVgcatVaacattMRatBtaatttaDacRtagtaaaNYVSMtca
+gaaDtttDHtRcYatacSNKaaMcHgatBaaVttactggBYgaYatttttgcDacHctWa
+tcgtagagtactcattDggtcatKaSgctttatttagtDtRBacttaWYaaaattttgac
+cttaaWtaatgcRgccacttMtaggKtcBtgacgaHctttatcgtcStatMHDNagatta
+tNagVaaaWcggaaaYcaVactDYactaStattgBHtcYctgggtacatataaYcgaYag
+aggaggacaVatacHRtYtctgtaVgaYcNgaaaNatacVgcNgtaatttDcatttttca
+acttSNcaaDatVYctSgcaccttagMgacgcttgaSttaaaatagttaggRHttaaacM
+atagcaWgMgagtcgctagtgtKgactaaHttattaWgcaaaaaaSatatgcgttaBNgg
+ttaYVatgaactttttgccatataaataRatSaBctagttataBccgaaacaagatactt
+aattttgaHgHMgtaaKctttaYtaaRacBMtBaYgaBaaacaYtVtagcRgWatHaWag
+attWSacStMHatttaDagacaatcgtgtKtttggaMtgtWtgtgcaaNaaaaWtKaaBc
+MWtcttctatgacVgagcgaggHaYYtttWgSaaYYaWtRYHHaMDtctttacaatggaa
+MctataagcttBcgHcNWaatttgtatatYtStatctagcactgtVttccagaaattaDt
+ttaRtVataBttWagcatDMVactYtgcatWtttgaaMggKaatgaaaaHtataDtgYcM
+ggVaaatSMHtttgVttaYaWaataRttgttaYttattttRtWtataaBgtDtttatatc
+VgaaBcaDtatgtcaDagaWtgaYtWctcVagctcagctatatagcRVtcaKtaataatH
+gNaccgaaaatVHBaatattcgttaVYttatttctBYaatKaagaccVStttcattgaMa
+gSaaaaccccWKcaaNtMYacctaDStagaaatttatcatVgtcaatacccKattgtaaa
+gtggWgtatatVtagBcttDaBacaattWtDYKtatRKggStRtaaaWatBtaagtaatt
+DaaaaBRacWtaagtacaSttaaatccgctaaccKaattgVWttDattatttattKaMtc
+YtMRWagMtcgKgBagacgggVaaNaaatgctKcgtaataaKtaaagtccWcttHMatSY
+gataaatDttBaHccattgBttSgaaHYtaataaaMtgaagatgtttBgRcattaRaDHc
+ttBgaMaWaaVMMattaatttgtgBRctattgKMagNcMtatttaaaWttgaaacatWgc
+ScgYYDYgttYtVtattgcKcWtagcggtgBaSctaKatacaaVtcaRDccccgtgttBg
+KgggtHagcgaattaaagMMttScggtDttttaHcSaagaacactcacactBcVgaKNaD
+HacacttatSagaattSKHtcagtataaatKaaHtgaaRagaaVcBtaHtaaatcgatcW
+caRtaaaatttaWttaagtcaggRctgaWcttDttgactttaVSaaaatggtaWDaRMtB
+taaaaaKatBgatMtctatatcaVaMgatttgNagtDRttDatcttttaMtYaaatcgga
+gttctctaYatNtagaNcgMMactacHcaagtaaaatStaSaacaHcacSgggtNKatgg
+aaagcggaaKgggtaYtacSgccgBaggcRacgtVgDtggaMcYaaaMatggacgYStKK
+atgaBcaaRtStccSagcRccgccgcSDtgcggBDgaDtBtSSggacMttttaWcatcMa
+tgtNMBWgataatcaaVtgaataataaNatgcaaNttNctgacDMcaHccgatgKgWVtt
+ccaStggattctcDacttttttctttaaNcWaMWccWKWttgaaaMctDaaBactRtVat
+tttBtcMaNttWcKacagttKSttaYaWSactHSaBtHgatgttacatgcatatMtttgt
+aacScWHBatHactggatatatctgagMgRSatctaaSttaVagcaRcttggaYaatKHt
+agBBactattcgtaaagaagttgtVcgatgaVatHMtcaggtcgKSgWattgaaaVctcc
+VgtDcaaatgaaHgMYactcaMatatatattNVttWtWaatttacRagKataaaNtttac
+aaWgMVactattaSgaggVaaagVtaccDRHaaataRaHaRgcattMttcaatcaKaaat
+aDcaDKtctcgaggBggacctDtttatHacWVaWgatDctaNaNcgKatcMtcMaatBtt
+tggacgtgataatagaaacRactcBtattttaKtgSaaggKtaggRaVtatagcccaNRt
+taccttSMaagatcggDacNBatWcgaactacactaactNBtaStgVtNagcatctaVta
+KatKgaBtcgtttWaagWMgagRaNatHaaaaDtacagacaBagtgcaHaNatctcBccN
+ttaagttDgaataaNtcgctaacRBgtaatSttaatatgcataacccaSattKcccttDt
+tggtcaatgggttWaacgatacattBtgMaYgaRttatgatKaKgtattDtKWgataacg
+NBtaccgaKWatcttcttKtgtcttagcattcctWcaaHgagtatDMSgKtcagcttgVH
+aKcttDaataaaVaatttDgtgaaataaRgtcaVaatacttagtVatatgggcatgtDDt
+MtgtatBggattHtgcVtgtgatcaaSattatKYVaacSNNttNWcgaHttKDaaMYHat
+cgttaattaSttgctWaacHtaKBtaaaaKHttcRWgaaWcRtBtttggBcDtgtacNtt
+aagcKtaHgtagaaaaRttgaaacatagtWRaacYggtaaatcgctYaBtWDRtgttgSc
+taaKatNcattgtgtMttatccatatagctSacgccSNaaactacgNtgtgcttMatSKt
+caaBaNaaacataacagaaatagtagctcNcatcVgaagStaataVcDKKttcagDHDta
+ttctaatgagggRgBMctatacaagYactctMaaagtcgctttctcgtgaattatNcgat
+MtttaggcBaaatctNtactaaRKtgKactattgtcatatgtacgagttMaaHSSgHgBa
+tatcgcaSaataaaWgaagtatagaHgcttctttatgaccWaatttaRtaDaatttaatc
+gaaattgattMcatcaWaMtaWaKactttctBacactatNgtccttaWgtctgaccKatS
+taKtgagtacgggcgcgtYNtatttagacctctKcatgatKWStcaataactaWgMSgHt
+gatctttttgtcgacgtSacttaYgcctWctcctctacaagVtttMaBactWVaccaYtg
+tSgcgttattcKtatStgaaKaccgNaataaHtatWtYtRacggcaDaScagcagHaYWR
+tRNcDtHtcVWtggaataaaYttgVaNtgttagtYttgtagSaaatDgaggccDcgBRYS
+tattatttaaggccgHgggYRaaccMaagttatSttctttagcMtgcgMtgaSagaNaDa
+gttSatgattWatttagtDgcttgagtgMKaYWaYccagcaHatKctaKaDgctagactt
+attgattaaYttatcttattattStaattWaRaYBWagYaatatgttRgScttgBagDaW
+gcgtgcVDaggcttgtctaDRKacttgcaKBWRtaaVaSctKtacttMaaSVaWWcgSaN
+tttSWgtcggtcacttggVVtgagaataaataaDttgaaccaaaaMttaaaagaaaaaaa
+atcNBtatMgccWagcaNgaVaNaaaaaaYaMgttaWtatHaagtNtacgacaBtMMatt
+ttWNaRtaaatagYaScKattacagctVKBtWNSKgYtYgtWatHaVatDaaatWgDatc
+ctggSRagagtaaaaMgatttRtaHacatggtaKagVcctgatgaMtaaYgatgtattat
+tttHggBaccaDctctggNNtYaatctVttgVtRtVcRacttNctttataggHSRtaRac
+aaattaacHaHgtgttgtttcBtBtatWtgtattttgcKagMcaaagaMtattagtStag
+cBacYaaHcagVgWtgtttcgtgDHaVtagDatcRaRtggtWtaactgcacgaggaaaRt
+tSDaaVaSttaaaaacSMttactaNtcaacaattDtacttttYatVSacYtWtMttaatt
+atcKtcttctatcaKDtctStSaaacggtYccatgtgagagtWtagWKgcaBaaaaKttg
+NactaatcgaggcWtcDDaaaaaacactHattaattcactatYttaagacactaKaagRt
+RataaattttcatHggtaataaatgataHtggctaacBacDgtaatattRtYgtDNDBgK
+tcaggcHattttgHNgWtaatttccgactactgacatVNttYYgactcgctctatttaga
+McgggatHcgtttatBaDSagBaaaagRttBggttaaBactVHgatgaatttattcaaaa
+ttgcacttcDgacttYcVttactVtttatBaKHagaWgtgaatggBtaaSggcagacNct
+taDttVgMtWagattggVatttacHtctNcMatacttSatMagcttgtNcYaaScaYact
+cKctKtagScStcagtttcatWaatggtgagaggHaggggcaacgcRKtaRcMaNtHaat
+RaRaaactVtBtgttaatRtWWcaaagKttccaaKaaatacgVttcacaaacgcggtgag
+aRaatggtgDMWatcWVScacaaaDaggaaHtgttSMaaaaaccYccDBtatYgtMagcS
+agaccaVcctcggtVWaaagttatcNaagataataSaataaaKccgtaDtYttatYcttH
+ttaagKcMctaaatggaatRgaaaVaaVtcKYaggatWcaBtDaggDatccttcYNtgcS
+MRgaRtNgaatcgttRttatDVMtagctttacatDVtatatatcagctaDagMtataccY
+gaggYaaatgDaaaatSgctctgatgtttVaaBcctgataKtagaaaccaKatatgttaD
+tgaDtatagataatacagtaDtatcNtgtDMtYcattRVtctataNtWttggNaSgtMga
+aYctctDggHtggHDccaccacKKaaacaaaatRatttccctttaagcRattMHctattH
+aRtataVattggatcSttaaHaHgaaHNDtacattSaaggDatttcaaaYgctBcatatt
+aaaKagtgcccatSctcgatRtaaaMtgWactttNMaWctYgRatDggaactcDcaatta
+KaactgagtatctataagYaaaSRctggtacWtttccWtaYRtKHattatagWtKttaNg
+cDtatHacccattaatttataacgctMgaagtaacaacagMgtaYHYVtKMHtacMgKca
+aatctgRYataNtcgttcaatacggWtMcaatYcBWaagYtVaDNagtatagDaaNtaaa
+YtttcYWttttStgggataaMgatattagaaYtNctcttcBagactaYDcgtacHDWccK
+aHgttcttHgVggVDttatcatKaMttttacWaaSattctatagaHaggKaDagBtaaag
+tcYccattgtYcatctaNgRgVtgaagtDKttatBKcggDtattRYgHccgtgcgBNMtt
+tVRgacaYctSctaRacgtagagccgtacRaagtaHKagStSttttgYSatattaaaWHa
+aWagttDKaaNaNHaaHttaYcttMtcaaatgKttBtSgtccaaVaattSaacgttgNat
+tgatatNctaWtVcagtactKcWacgVagggHaaRgaDaatcMttattaataacaBMaaV
+tgYtKgRgHactgtactatcBaMtVggtagKcYtHtBSaattagtaatgMcaVVagYYgW
+tactttccaaSttDgaaMaMttcacttYtRgacttcagcttWtttagtgataMaattaag
+VtagaatatKataagtagttaagHMRaDattaHaaVcctDtagtcVYcaataaYcNttNa
+aaHctcaRaatttcaNRgatSHgVatagctRtcatgaBttMaaagRtcgHVtgRgStgat
+ttgtagaKagaRWRctgNaHYgaaatBctgtttRttNWagaccgagKgtgcggHKVttaa
+tattaatataataDtaNcctacaaRgcaNMctctgaaSHWWHcttagtNagtWgWaaKtY
+aNgcBattatccaaaSctRRHKaNtKcBgtgagaDRWBttactaaattSMctatatagaa
+YacDgatttccVtaagRtgRataatatagtctttttatgtMgtcaacaaNtaaaaactct
+WtagaVaaaDtaattatagtBStcgaatDtgattVaatMtcaDattVKWaagatagggtt
+gtMRSgtcYgWMaatgNtagtcBttagtttctctWaaMtVgctWgSgtHagaSagactag
+KtagWggcatttHgttgacaaactcggggHggcWBgVgtatgggagVgagtcVcBtDctt
+tagtctaagVWtHtgtttaScatacMBtKgattatRtgtttgtctttDggcHaBtRtgta
+ataNataatttataWctgaYWataStcHaatcRtaaVagDWaSatagtaccNDgaagtat
+acgttttacgacgKRtattgDctatRRattVtStaaactagatgVatttagaMaSaaaat
+tVtatYtgttgtRMagtHaatttSttaaYNaggWagtgcacgaMcactgHgtgtgggHMg
+tKacttaaYgtcgcatcSatattgBaagtttacMtYagSatttatttaVtaaDtaWaHcg
+NatactgactHtggWtataDcDScatactcStcDtgtcgtgtatgaggtHaaNKgDattg
+cBccaagKgtatgacKSMtttttgttcaaatcaaYtagtaSatgDaaaMccKNaMaatag
+aataagcaattattataaMgagtgaSgtctNYttattHaNaYYtcDDtaatNRgtattta
+aYtaaatcactHVaHcStccttcccaaVatcVggatKtatgRaaDBgaYtttacttYgga
+ctSDtaBcaaNggggtattatattBDcttagagYNMatBgttYaagactMatgttRgata
+cccgtaacacBHtatKacWgatRcHttaattYtKtStccaaatVDcaNKHHaaataatag
+tagtatcttgctNDggVaVVtaVaRaaagSaccgttctcMtVtgNBgtDtttctYgttac
+tBctcRtStWtWDScMtcWSaRatgaataRHctaNtcStctYtWacagatgtatYBtHaH
+WBtacggtDcaaBtatcaggtcaVattaNctactgaaaatWaDgactNWtMtggagaatt
+BaataYcMWYcgatMYatWtgattSatgaRtDaRgccagtSttatatRaBtattRcWtag
+tVgaagttMctattatatDttaggtctKtgtgtBagacgttatRKtgatctatttBtata
+actgataacKcggagtgHgtVttcttgtKDgcDtaYatBDatcaatattgttNtaBacat
+cgcNcaKcaWcRataWcVgtacgScaWgttcggHcMttcRccatgaRStYgNacagatac
+YacWWtggNaDcWagttHatMaNaatNtcDMDcMaKgHNatScVgatKWatatgNRgtcc
+gYgaagattDHgtMtcHaSNaaattBatRagtaaatttacaagHWtKatcaagtccHtYc
+ctgttKDMSgtactactVctgacaaaaHgatatacataatKtStHgctScSatNatacaY
+ttaaWHtctgaatYtagtHtKaggccWBaStaDctaagagNtaatcaatcgttNgaYDaa
+gtaaaaHatagaatcgcgBaYaBgaacSaaWaaaaactccgcMttHttYgtaagaMctKB
+tacSagattcBaaWtaattttacRttatcgaRtacaRHgtgRagaaBcttaVgacVDggg
+aatVatagaactRRtacgYttNattVHgaHttacaaaaaaaYtcRWtgtgattatgccaS
+DtttatKWgaatatSNDgattttaacgtcSRtatggttcttcBtWtttMtBtMScttaHa
+tBattHacYtaYacattcgttKgtcStSctcKtatatttcaKSgagcttccaacaccRDt
+>THREE Homo sapiens frequency
+gttaacaggatagtctatgtaaacttcgagacatgtttaagagttaccagcttaatccac
+ggtgctctactagtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgtta
+tcctatcaacggttgccgtactgagcagccttattgtggaagagtaatatataaatgtag
+tcttgtctttacgaagcagacgtaagtaataatgacttggaataccaaaactaaacatag
+tggattatcatactcaagaactctccagataaataacagtttttacgatacgtcaccaat
+gagcttaaagattaggatcctcaaaactgatacaaacgctaattcatttgttattggatc
+cagtatcagttaaactgaatggagtgaagattgtagaatgttgttctggcctcgcatggg
+gtctaggtgatatacaatttctcatacttacacggtagtggaaatctgattctagcttcg
+tagctgactatactcaaggaaccactgctcaaggtaggagactagttccgaccctacagt
+caaagtggccgaagcttaaactatagactagttgttaaatgctgatttcaagatatcatc
+tatatacagtttggacaattatgtgtgcgaaactaaaattcatgctattcagatggattt
+cacttatgccttagaaacagatattgcccgagctcaatcaacagttttagccggaaacaa
+tcgaagcatagggacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtca
+cgaagcgcataatagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgca
+gcagtctttttggggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaac
+tctgaagtagctcgagtactcattaaagtgtaacacattagtgaatatcggccaatgaac
+caaacgcttcccggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaa
+agcatccctttacgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaa
+attctcatacgtgcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtg
+ttataccaactcgctttttaactactatgctgtagttctacaggcatagtggccagtatt
+ttctaacttctctggatagatgctctcactcctcatccatcacggcttcagtttacgtct
+tacttgcttgttcagcaacggatggaggcattaagtatcttcactgttccctaaaattgc
+tgttcaatatcaaagtaaggacgatacagggaaagctcaagcacactcattgaatactgc
+cccagttgcaacctcacttaatctgacaaaaataatgactactctaagtgttgcggaagc
+agtctcttccacgagcttgtctgtatcacttcgtataggcatgtaactcgatagacacga
+acaccgagtgagaaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcgg
+atataagctggagatcactcacgcccacacaaggcgctgctacctctttattccaatgtg
+taagaatttgctaacttcatttctagaccgcagctttgcggtcataatttcacggtacgg
+acccttgggttagagacttgataacacacttcgcagtttccaccgcgcacatgttttagt
+ggcttctaacatagaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccg
+ttaagccataatcaattgaaagccccgtgagtcacatctaattggttgtactgcgcattt
+agctatcctttagctgactcgaagagattcgattcctaatataggttaattagatggctg
+ccgcgcgaagtaaaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaatta
+cttatgagtagttccaagttcgctacgttatgagagagattggaattaagcaaatatgtt
+ttatggtgattttgggatgagaaggactgctaagtacggctactaaacaaatttctaaaa
+ccgccatctaccttatcttggagacatttaagttgtatatgtcactagtctagcttttgt
+ctgtgggacgcgttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatct
+aagaaagtagtggactattacaccaagcacgaatgccagggaactgctttcttgctcagg
+acctcgcgacaaggtaccccgcataagtcctagaattacatttggtcagcaatgctgaca
+tttgaccgtgaaaacataattttaatcagaaggcagctcacccgcttgctctagatctta
+tctttgtatgaatgtcagaatttactgcaatatccgttccgaatagtgagggcttagtat
+agttctctgtatacaggtcacatcaaactccccctgtcctagtacagctctgagctttaa
+ttaattgcatacatttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcg
+tatagggcaagagaagcaacaaacaactagcccgactcacgttcatccgccgtatccttg
+ttcagttcttactccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatca
+aaattaaaatcccgcttgaggttgacaattaaaacgctgagcagttatcggctattagat
+agtggggtgaaagtaattggctggaattatgttaaaacgtgatattaagctaaaatacgc
+tacttgttgccgacctaattcagtcattcgatattcagttagagccaagaataacaagct
+tgtataaattgaacggggtgcactaaacgatgtgttactctaatattcagcttggagtat
+acctgaaggcgaattcatgtatcggccaataataagacgttgaagatcacaatttggact
+agcaaaagaaggtgatttatgcgtggggattgagtccactgtacgagtacggtctctgga
+aaattataggttcagggaatataaggaagtaaagataattaccaagagatttttggtatc
+gctatgacccagaggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgca
+tatttgacggacttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaac
+ttcaattattactactctttttttcctagggtattgtagaggccagtggacaaaataaat
+caaatttaagatgtttcggacattaacatcccccgtagcatagaaatcatcagttatcca
+atctctcatcgagcttttacaatttctgctggcgctatggacagcatatgccgcgagacc
+tccgcaagactcacttgatcactgtaagtatcttcattagaggttagagcctatagttaa
+gctgctgacctagtaaaattggtattttctaattttattgctcaagttaaaggttagtga
+agggataatgacgttatttttgaacaatgggttgtattcaattttatatcacgaatggaa
+cccttcattcccggcataatactagacgacacgaacaagctccgatctatcagccaggca
+cgtgttaaggtttaattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaactt
+agggtcacgatgagtttttcaggactacttattacctattaataagttaacatgagcctt
+cataccccgtaagacaatacatactccaccaattagaattctgagccatcttatcttttt
+gtatcatcgaagggtatggccgaataggttaattagttactcctaacgtctctacaggca
+tgcatttgacgcaccttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagca
+tcaaaaatatagtccacggtttccggattaccaaacgcggcaaagagaaacattgtatcg
+acggagataacttaatacagaaggaaggggcatcttcgaatacggatgaataattctatc
+tgtttattctgacatcttgttttcaggttaatcttacgcattcaaatgacgcctgcccca
+tgcgtgcgcaattattttctaatattgacgagagcaatctcactccttttgggtctattt
+atgttttattgaggcacaagcctatacagaacaggtactattaaggccgtgagtgtgaga
+ctcaaaccgtggaaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggca
+atccttaccaaaatcagatgctatccttaactttgggctgcatttaagatggcggttgga
+ggcctgtgagaatcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagat
+cacacactcattccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagt
+taagtaacaacttgggatcgcatacttataaaaattatatgttaaactttcacaaacgct
+gaagtccaaagtaactagcccaaacgcctcgagagtcactaggtattaatggtgtttgag
+ttcctgtgaaatagtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaata
+aggcttgcttgcacggaggtatgatgtttactgactctacaaccctaattttccagtacg
+tacattcattccaataggttagttctcaaagtgctatacaggctcctcaattgatgatat
+gcttcagccgctctatggatattagctcattttatttaggaagcccgcttagaggcttac
+tatgagggaaatgccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttaca
+tagaatttgaattaaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatat
+tacatatagatataggatcattttttaaagctgtactaggtttgatcgacaatcttatgc
+tatactatatgatgtaaccctcataatcaataccgatcgtacgatcctagcataggtggc
+aagcgattttatgccgattattgtgttaaatagtctgtgagtgtgattatcagggctacg
+ttggtagaggggttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaa
+ctgatataataaatccccttacccaaacaccaatcccgttgaatcaactaccataacgtc
+tcccatataaattgcctacttgtttgcataaatctgaatacataacaccattgcaccttc
+ttgtgttccaatcccgttaagattgccttgtcagatgatatgcaagaacaatagcatttg
+ctagcaattattaacagctcttcgaattgcctccacataacgcgggagggtatattttaa
+tttggcaaatactaagtactgttggcgtcatatgctattaacggttggatattaagttat
+gtcagccgtaagcaagagtgggcgaaatattttgttacccagtgagagcactcttagagt
+ttggatacaataggccatatgttgacttaagaggacgtaactacgccgtacaccattgtt
+caaccgacttcttggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgt
+gttagggtatactacaaatccgaaaatcttaagaggatcacctaaactgaaatttataca
+tatttcaacgtggatagatttaacataattcagccacctccaacctgggagtaattttca
+gtagatttactagatgattagtggcccaacgcacttgactatataagatctggggatcct
+aacctgacctatgagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagt
+aagttgttgctgttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaa
+acaaatacgcaatttagacagaatggtacggtcatgaatgacagtaattcgaagtgctag
+accaacttaaaataggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatgg
+tgcagtatcgacgtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagta
+tatcacgtgtttctgaaccggcttatccctaagatatatccgtcgcaaactttcgattta
+gtcccacgtagagcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagttta
+aatttggttacatggttaattttgaccgaagcatcgcactttatgattgataattggatt
+caatatgtcgccctatgcgaatgcaacatgatccacaatttggctataagacgtttaatc
+cgtatcacactttgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaa
+ttataagtactccgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatc
+atctgaagatatttggaactttctcgacaaccaccctcgtactcaatacttacactaatc
+gacaggcacacgcaacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcga
+tgagcgtacacgcttatttctctagtcacaattagttatctacgagacatcacgagggag
+caaataagcgatgttatggctacacataggcacgtatgaatatgatataagccagttaaa
+cagtcgaaccatcgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaa
+gctgtttgaatgtaacttcttctgctgagcgggccccaacgtaaggatcaactagaagag
+aaaactcggtattagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtct
+gtgtaaccaatataacatctatttgttatctgattgcctacttatggctttgcggtcgtg
+gcgactaatgtctccaatccttttgaggtcggtaccaactccctttaaattacgctgtgc
+aggctcatgcactgcatacatatacggtagcaggtagggacctcacgcacccttattata
+atcaatagtagttatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattt
+tctatgtgccgtctaggcgactatcacgcattaccaggcgagatttaagccaattttgaa
+tatagtcaacgtaatttttactatgggttccaccgaaacgccttgcacaactaagaatcc
+cataaaatatcgatatcaaataaaagattgtgtcaataccttcatatatattttttcggt
+tgactaacgtgaactaaggttaggggttttgtatgtctatataggaaacagtttcttttc
+tgtcctactttagtaaagtcttcaagccttactccaaaatcacggtgattaagccgttac
+tcagcagcatgattctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgt
+attagctagggagacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcg
+catactcaatcttcagctcgtgtcattataatatctctcccccacgcttttcactagata
+tgccgtgtaagcaaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctg
+taggggtacttaatgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagcc
+ctcacctgacttcatgtaaatggcttagaagactccatgatttaataaatactacgaagg
+aaagactggatctaaagataactctagtaaggccaactcccttcaatgctgttgccagtt
+ataatccaagagctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaa
+gttggttctagccagacagccacataccctgtacgggtgtattactaaaactggtccggt
+attagttcaccaagggaggaattaggcaaaggatctaggtatgcaagtcggagtattaca
+tccctaccctgaatccatcaataggttcctctgtactggccttcgcaatgagtattcaag
+gttgtacagccgtataataataagatagtgactatgaacgggaagtaacccgctcacctt
+ccccaaaacattgttatatctaagtattaaagtctgccgtagtgttaatactcgaaaata
+aacaactggcaaattacaccgcacttaagccgcttttgatttatatttttccaatgcgct
+tttaaaaataattcagtcctacatactaattaagacccttaaacggagatatcacaagtt
+aagttttaaccatctcgactaggtggaactatagatacccaactcaatttatcattacct
+gtaatgttcctagaaggattgcatttcatgtcaagacggtggagtttcacagcgaaactt
+cagtgtgaacagattctgagaaatcacctaaacctattagtcagagcacccggttagaac
+cagttgtcaaaaaatagagcggttgcatgagacagaagtaacgatgagatccgttgtaac
+gttgagacatctggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactag
+gcaaacccaacataggttagtcctatgtgatacgccacatggtatatcattttgtaacgt
+tacctagggataatcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggtt
+atagtctagtccaaagataaaggataaagcacgtcagagaactatattagccgaatggga
+atcattgttaggagactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaa
+aatctcgtttttgtttgaatctaaaagagctttgatgaccgatagtacctgtatactagt
+tactgtattacgtgtctaatgatttcggattggggtccccagaatcagacgtcattgtag
+acgattcaagtttaccaatttaatttcccagctctccttggagaactatcgccaataatt
+gcagtcactttccttttctgaaacgataaagccgtcagagttctctgcaacgttggactt
+acctgaggttctaacccactttcggttctaatagtagttaacgacacaacgaataacctt
+tactgtggggctttcacgatattttttcgcttattattaatggttacgtcataagctggt
+gtccaaattaaggttaccggcttcgcagagtagttgtatccaagtataacttccctaatc
+ataagatcgaggtagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtg
+gtatggacgttgctaattacttctgaagggaaattggtcattatggatacgtgtctacca
+tcaggtcggacgcagatatggttctgtcttcagttgatccaccgttctttataggataat
+aactgacgattaaagattatggtaaatagattaagccaattctcttcttgtcagtgaagc
+atccttaactgacttgctctgcagcccctcatacatttagctattcaaagtaccggctcg
+tttcaaactctcccacctttggaagaggttgtcaacttgataagtatatcatttacagca
+ttttttcggacgtacctctaatgtttcattgcagaaaattagttttttctatcgcacatt
+ttgcaagtaacgttagagacacaattatctgcgaatgaactgctagatctgacgaccggg
+agcctcgcaaatatcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggta
+agtcaattggtttatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagta
+atgtcactctcgttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattc
+tcgagcccactcacgatatgtagggacgacaacttgtgcggcttatgaattgtctggact
+gcgggcgagggtccatatctccgaagttagaagggacatacctttagatgataagatcaa
+ttcttattgacgaaattcatccacaacggggaacaacttcaccctagacttacgtctgaa
+aagacacctagcgtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctac
+gcaaacttaaacctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgt
+actacggaggcatgaatcatatactagaaccaagtgcctgtgatattaacaagatgatcc
+gacgcgagcaccgtaattctaggcataaaactccagcaatttgggggccgaaaacaaatg
+acgttagctaattaattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgac
+gtatattcattgaacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctg
+tctcctatttcatgcgtacctcctagttgataattccccgagcagtggttaggacacttt
+tgtcggtatcaagttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgt
+gaattagttaatttttatgaagtcgtcgagacgcagttcctattgatttattctaaacgg
+agatgtgcttcgtgggactcggaagtagatctgtgtttatgattattgctactttagatg
+ctgactgttaactccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacct
+atagtttcaagttctgccacaaggtatcatatttacagttagtgctggttgcttctttca
+aacgtggtgagtttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttc
+aaccctgttccagagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgat
+agtttgcaagagccggtgttaaacacatattattattgttatccaactaatcggacctat
+gcataaagcattgtctaaacagaataattgcctatatacggtagttttagtgatttatat
+cttagtatcagttagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaag
+cgaaaacttctacaaacgaatgtaagcggttttccaagtagtacctataaatcacagaaa
+gatctgtctcagtatagttgaaatggtattcagctagtgacgtgtaccaattatcatagt
+tcactcaagcaagacgctcattaacgaatatagacaagacactatatcatataataaaaa
+agaacatggtgctcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaa
+ttcgctactagacgatcaattccctacttgtcaaagttgaactggtacgttcttggaatt
+aaatatgattgcgctggaccaaattgcgacttcttgagtttcagggcaaacgattgagcc
+ggaggatgtccgtctcttacctttcttgcttatgataaacgacggtccctgtacatcact
+gggaattctcagcaaaaataattgggtaaatcgagactcgatgtattcggccacaaaggt
+gttagacgttaaagattattcaacggggcgataataggatcataaccggtatgcaagcgc
+attgaaagagccatgagatccttatccgataaacgctgcacggtatgtgcagccttattg
+tcgatcacgaatttataaatgtagtctgggctgtaagttgaagacctaagttataatgaa
+gtgcaataccaaatcgattcatagtggattatcagactcaagatatctcctgataaatta
+cagttgttaagatacggataaaatgagatttaagattagcagcctctaatctgtttcaat
+cccgttggaatgtggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttg
+attcttgttctgccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagct
+tgtgctaatctgagtatagattcgtagaggaatattatcaagcttccacgcctcaacgta
+cgtgtattggtcacacaagacactaaaagtggaagtagcgtaaactatagtctagttgtt
+aaatgctcagttcttgttatattcgatatactcttggctaatttatgtctgagtatataa
+aattaatgatattaacttgcatttcacggatcccttagaaaaagattttgaccgagcgca
+ttataaacggttacaccgaatcaatagaagcatacccaatagctttctttgaatttattg
+cctgcgcaacttggctgactctctagatccgaataattctatatggtcgtgacgaaacta
+gttcattactgtttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaat
+tactcaatgatacgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaa
+atgtctgattatccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcga
+cgcgaggggaaccttatctaactatcattccatttaccgggtgactctcgatgcaggatc
+cgattgggataaattgcccagaaatggctcattcctgactaagggtaaggccgttctcag
+caagggaaccccgcgaatctaggcttataccatctagattgttaactacttgcctgtagt
+tctacagccatactggacagttgtttctaaatgatcgggattcatgctagcactcctctg
+aatgcaccgcgtaagtttaactattacgtccgtgggcagataaggatggaggctgtatgt
+atcttaactgttacctaatatggctggtaattatcaaagtaaggaccttaatgccatagc
+gctagcaatcgctttgtatactgaccatgtgccaacctctcttaatctgtaaaatataat
+gtcttagctaactgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctat
+agccagcgtactagtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctg
+tctctctacagcttattgatgaggattgaacatggacatatagctccccctcaaaagcag
+atgctacctctttattccattctcgaacatttgccgaacttaatttcgacaaacctgagg
+tcacgtcttaatttatcggtaacgtcacgtccctttgagactggataaatatattaccag
+gggccaacgagcaattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaaga
+cggcgtgcgtctcgtgcaactcacttaaccaatattaatgtgaaacccccctctctcaca
+tcttatgcggtgtactgccctggtacatttcctgtacaggactccaacagtgtagattcc
+taagatagctgttggagttgcctcacgccagatcgaaaaactgaataaactagtgagctg
+agctgcagaaataccgcttaattacttatgactagttcaaagggacctacgtgatgtcag
+acattgcaaggaagaaattaggtttgtgcgtcattttggctggactagcactccttactt
+cccctactattcaaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtct
+attgggaacgaggctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatg
+agcacagtatgcaattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggc
+ctgggaaatcagttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtag
+taaatgtccgaacctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcac
+ctaacccgattcctctacttagtagctttctttgattctcagaattgactgcaatatcac
+tgcacaattctgtgccattactagacttctctgtattaacgtctcatcttactaacactc
+gcctaggacacatctgagagtgaagtatttcaatacatttactgaaatcttcagttctaa
+aatccccgaataaggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccac
+tcaccttcatacgcaggagcctggggaacttagtaataactatttcggcagacaaagctt
+ataacaagttgccggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacg
+ctcacctggtataggctattagatagtgccgtcttagtaaggggcgggaattatcggata
+aactgatattttgataaaataaccgacttgttcacgacataagtcactaaggagatttta
+tctttctccaaagtatatcttccttggataatttcaaagcgctgcaatttaagttctgtt
+actagtttatgctgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataag
+aagttcatcatatcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgta
+aactggacgagtaccctagatggaaaattatacgttaagccaagatttcgatgtaatgat
+aattacctacacatttttgctatccataggaacaagagctgttctataggctcgtggcat
+acgaacatttgctgccgctatgaatattggaagctcttcaactacagactctattcttaa
+ttgccgtcgaaaatgggccgaatcggctattattaatactcggtttttccgaggggattg
+ttgtcgacagtcgtaattattattaatattgatgttggtgaggtcatttaaatacaacct
+tgcagacaatgaataagggatccaatctctcatactccttttacaattgctcatgcccct
+atgcaaaccttatgccgccacacctccgcaactctctcttctgaactgtaagtagcttca
+ttactggtttgagactatactgaagctgatgacattctaaaatggctattttcgaatgtg
+attcataatgtttatcgtttgggatggcagaatcacgttatttttgatatagcccgggta
+ttctattgtatagaacgtatgctacaagtcattccccgaagaagactagaagtaaacaac
+atgcgaccatcgttaagccacgcaaggctgtagctttatttcccgataacctatcttcca
+taaatagcggacagcaggatactgacgctcaacatcagtggttatggtctaatttttaac
+ttttaataaggtaacttcagcaggcatacacagtaactctttaatttataatcaaattag
+aagtctgacacttcttatatttttctatcatccaacgcgatcgcccattagcttattgtg
+ttactaataacgtatctaaaccaatccttttcaagctactgcctatattgtcaatatata
+caaacaacaggatagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatac
+ccggaaatcacaaactttgtagacaacgagtgaaatttatacactacgaagggccagcgt
+acaagacccatgaattaggcgatatgtttattctgacatattggtttatccttaatctgt
+cgctgtaaaatgaagccgcccccatccctgcgaattttttttcgaagattcacgactgaa
+atataaatacgtttggctatatttatgttggagggaggcaatagcctttactgttaaccg
+aagatttagccagtgagtgtgacactaaaacactggaataaatgcaggcgttcttctggg
+taaaaggtttagtcaatctcgcctataagttcatatagctctggatataattatctggcc
+catgcatttatcatggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtcc
+gaagtattccatgtacattaagatcactctctcattcatgcatcttggcttaacaaatct
+ggttgtccaagctttccaggcacgtatggtacaaattcggatcgaatacttataaaaatg
+atatgttaaactgtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtct
+caagaccgtgtaatgctggtgcactgaatgtgtaatacggttagaagggattagttatgt
+tacaaatccattgaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaag
+agactaacattattttcaacgacgtacatgctttacaatagggtacttatcaaacgccga
+gaaacgcgcctatagtgatgttatgattatgacccgatatccattggaccgaattttatg
+taggttcccagcgtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtc
+tctcccagatgaaaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaata
+cctttaggggtaacggccgctgatttcatatagatatacgataagttggtatagctctac
+taggtggcatccacaatcgttgcatttactatagctggttacaatcataatctataccgt
+tccttacatactaccatagcgggatagcgtttttttgccgttgattgggtttaagaggat
+gtcagtctcattatatccgattcggtgggagagccgttgttttcaaatcgcacactttgt
+gacataatgtacaagataacaaaactgatataagatataaactgtcaatatcaccttgac
+acttgaatcaaagtaaattaactcgcaaatataatttgactaattgggtgcagatttctc
+aattaataaaaaaatggcaccggatgggcttacaagccccttatcattcacttgtatcat
+gatttccaagaacaatagaatttgctagcaagtatgaacagagattcgaattgcatccac
+agtacgccggagcgtttattttaatgtggatatgacgatgtactgttggcggcatttgct
+agtaaccggtccttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggt
+acaatctcagagaaagattacagtttggtttaaataggacttatcgggtcggaagtggaa
+cttaataagcagtacacaattgggcaacagacgtcttgcctattacaataggattacaat
+gcgttagatttcagacacgttcgtgtttggctattcgtcaattccctaaatagttagacg
+atcaactattatcaaagtgattctttgttcatcctccattcatgtaacagatggcacact
+acgcataacgccgaggaattttaacgagatttaagagagcagttcgggcacaacccactt
+gactttataacagctcggcagcataaacggtaatatgtgacaaatttccaaacgttataa
+gaacgtatgtgtacttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagc
+ctaacttatctattggttttgctataaaagaacaaagttacacagaatcctaagggcttg
+tttcacacttatgcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaac
+cttaaaacaatgcgcagatattggtgatggtgactccgggtatgataatggtaactgttg
+accagcgcccacctcatcgaagtatagaaagtggttaggataaggatgagaccgaactta
+tttccggccataactttagattttctacctagtacacaacatcagggcggacacgaaacc
+gccatcacatcatataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcg
+aactttagcaggcatatggccattatatatggccccagagcagaatgctacagcagacaa
+aatttggatttatgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacga
+cagtgcacaaagtgtaagttacaattattactactcagcagcttctgcaatgataaaatc
+ttatcatacacgtcacatatgataatatctacttagggggaacgggctccacaacctaca
+tagtactcaatacttacactattcgacaggcacaccaaacctgtacagtcccaaaagatt
+gagtcaactttgcagtactgcagatcacagtaatagcttagttagcgagtcaaaattagt
+tttctacgagactgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgta
+tgaatttgtttgaagccacgtaaactgtacaaccttagagataagtctcaggctactaaa
+aacacgttgtggcactaacaggatcatggttgattcttacttattcggctgaccggccca
+ataagtaaccttcaactagaacagaataatcgggagtagtttaattcagtcaaggtgcag
+gtctcattgtaactaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattc
+cctacttatggatttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaac
+aacgaaattttaattacgctgtgcagcctcatccaaggaattaatagaaggttgatggta
+ggctccgaacgctccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcc
+tgacgtcgtggtgttcgtttttgttatttgtgccctatacgagtagataaaccatgaaca
+gcacagtgtgaacccatggttgattttaggctaccttatttttaatttccgttacacaga
+aacgaattccacaactaacatgccattaatttttcgatatcttataaaagatggtcgaaa
+ttcattcatttattttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttct
+ctttagaggtaaaagtggctttgatctcctacgtttggatactagtcaaccattactcca
+tttgatccgtgagtatcacctgtctaacatccagcattatgactcctcggcgaagaaaag
+acacacttcttagagtcgatgtgtattagctagggacacagttgtttaatacgatagtga
+gcccagggagggcagtgcgtcccccagtagatttattcagctagtgtaagtataagatat
+ctcacccacgaggttcaagtgatatgcagtcttagaataatacttatcctgaatttcgat
+attatgggtacttcaataatccgctagcgctactttatgtctcgttggacagcaggacac
+atggcagtcttaaacactaaagacatcacctgaatgaatgtaatgggattacaagaatca
+atgaggtattatatacgacgtaggaaactctggatatatacagtaatctagttacgccat
+cgcacttcattcctctggaaacttagaagacatcagctgtacgtggaggaaccagacccc
+cgtatgtagccaaatagaaccaaagttgcttatacaaacacacccaatgacaatggaccg
+ctggagttcgtaaactcggaacgtagtactgcacaaacccagcatttagcaataggagct
+acgtatgcaactcccacgtggtaataccttcaagctatcaatatataggtgcctagctaa
+tcgcattcgcaagcagtattcaagcttgtaaaccagtataataattacagaggctctatg
+aaacccaactttccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgc
+ccgttctgttattacgcgaattgattctactccaaaattaaacacaaattatcaaccgtt
+tcatttatatttgtcaatgcagctgtttaaaataaggctctactaaattataattaagac
+acttattaccagatttctctagttaagtttgaaccagctcgactaccgcgaaagatacat
+tcccttctctatttttcagttcatctatgggtcagagaagcattgaatttattctattca
+ccctcgtcgttcacagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgt
+ttagtcagaccacacgcttagaacaagtggtctaaaaagactgccctggaaggagtaaga
+agtatacagctgatccggtgtatccttcagtcatctgccctatactaattacacgacgca
+aggaaaaataggtttattttctaggcaaacccttcataggtgactccgatgtgttacgaa
+tcatgcttgagaatgtgctatcgttaccgacggataataacgatctccaatgaaccaaat
+gtagaatgtctattgattacccttttactattcgacttagagataggagatagaacctca
+gtgtacttttttagccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatc
+caaccctcttaaagtcttccatattatatcgttgttcgtggaatcgataacagatttgtt
+gacccatagtaaatgtatactagtttatgttgtaagtgtagattgttttccgattgccgt
+ccaaactttatgtcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatc
+ctgcgagatcgatcgccaatttttccagtcactgtaagtgtaggtttagataaagccgta
+tgagttatatcataagggcctcggaaagcagcttcgaaccaaagttcccttataatagta
+gtttaactataaaagtatatactggtctgtcgccctttcacgatttgttttaccggttta
+tgaagcgttacgtcattagagcggctccaatttaaggttaacggcttccatgtgtagttg
+tatacaaggataacttaaagtatctgttcagcgagctagttaagttatcctcgatagaac
+acaactcagaggtcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattg
+ggaattatcgatacctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtg
+atcctaccttagttagtgctgattaacggaacattaatgtttatcgttttgagatttagc
+caattctctgattctaactcaagatgccttatctgacgtgctatgcagcccctaagtatt
+ttacattgtaataggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctac
+tggttaactatataatttacagctttgttgagctagttcctctttggtttaagtcctcaa
+tattagttggttcgagcgataagttggctagttaccttagtcactatattagatccgaat
+gttatgcttcatctgaagaccgccaccctccaaaatttcttttaagactcacttattgca
+aggtgtaggtgaattcggctcgtttctcaagtggtgtatctgtacacgagtttccatatt
+ttcatcaacagccaccgcacacttatgtcactctaggtattaaaagtcgctctacaaggg
+gacgcaattaagaaacagacatgctagtcaaaaataaacatagcgaggcaccactaattc
+ggccgcttatcaatgggatgctctgcgcgagacgcgccagagctcagtagttagttcgga
+catacatttacttcagatgatcaattagttttctacaaatgcttactctaccccgaaaaa
+agtcaccagactcttacgtctctttagtatccttccgtcttatataaggtcagtcccccg
+tttcggtaccctggaatttactaagaataatgaaacagcccccaaggacgtacgtttaca
+aatgatagaccagatcgcctagcttattccgacgcatgttgcatagaattgaaccaacgg
+aatgtgagagtaactagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctg
+atagttcggccacgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcga
+gctcaagcaagcttacacttcctcggatattcagggaacttagtgcctttgaaagatacg
+ttgatcaacgaaaaattgataatggctcatatggaatgcctacctcatagtgctgaatta
+acacagcactgcggacctaacttttcgaggtttcaagttcacgtctcaaaacctaatagg
+ctggaatatgtagggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaag
+tgaatattctttttttctaaaagcagatctgctgccgggcactacgaaggagatctctgt
+gtatcattattgcttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgata
+gcacaacccaattcgatagtacatattgttgatacttcgcactaaaccgttcatatttaa
+aggttgtgctccttccttcgttaaatactggtgacttggtcctatctactattagctaga
+cctctggggaaccacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagac
+atcgcgcctccaccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattat
+tcttatactaatattagcaaagatgcataatgatttgtattaaatgtataattgaattga
+taagggtcttttagtcagtgatagagtagtataaggtagacattagaactcttaaccgga
+cgcagatttttcggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttact
+agtagtacctataatgcactgaatcttcggtcgaagtatagttctaatgctatgcagatt
+gtgacggcgacaaatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaa
+tgaaaagattgaatatttttaaatacaaaatgcgcctacttattaggggaattaaccaga
+ttgaaggccaatcctcacatgtaatgagataatagacgataaatgaaattcttgtaatag
+ttgaactgctacgtgatgggtattatatatgattgagatcctccaattgccgacgtcttg
+tcttgatgcccaaaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcat
+aaacgacgcgacatgtacagcactccgaagtataagcaataataatgcgggtaatccaga
+ctagatcttttcggactcaatgcggtttcacggtaaacatgattaataccggagagtagt
+cgagcttatcagcgatgcaagcgaattcattgtgccaggagatacgttgcagataaaacc
+ggcaacgtatgtcaacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaa
+cttcaagaactatcgtatattcaagtccattaccttttagtttcagactggtggagctga
+ctaaagttatatcatcattttgtacactggtttagttaacgataatttcagatttaacat
+gaccagacgataatcgctgtatatccagttggaatgtggtttgccagaaaggttaactta
+taatcaagcctctcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagt
+gtatttggagctgtagttataccgtgtgctaagatcagtagacatgacgagagcaatatt
+atctaccttacaagcatcaacggacgtctagtcggaacaaaagactctaaaactcgaact
+tcaggttaatatactatagttctgtattcagcagttattcttatattcgatattatcttg
+cctattggatgtctgactttagtatattaatcatagtatctgccatgtaaaggtgccagt
+actaaatctgtttcacagtgcgaattataaacggttacaaccattaaagacaacaagacc
+ctatagctttatttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaatta
+gtctatagggtcgggacgattctacggcatttctggttataatgacaacatggattgtgg
+cccgagaatcgctctttcattaattaagcaatcattacagtcttataagcgctacttccg
+agtggtagcaggtaactcgatataaggtcgcatgagccgaatagcttaaaaaacaggcca
+ccgaacattgatagagaataccgaccacagcgcaacctttgattactttcattaaattgt
+acggctcactcgacatcaagcttaagattgcgataatgtgaactcaaatggatcagtact
+gaagaaccgtaacccacttcgcagaaagcgtacccagagaagatacgctgttacaatata
+cagggtgaaattattgcctgttcttcgtaaccatttcgccaaacttggttagaaatgata
+gccattcatgatagaaataagctgaatgataccagtatctttaactatgtagtcaggggg
+aagataacgatggtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgct
+aacgaagctacttaatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaa
+agatagtatgagctataatatatgctagtagagaactctggaccatcatctatatgaata
+ctgattcgagcgtgcaattactttagcctgcgtactactgactctacaaaacactctgag
+ataagtttgtagtcagtaagtcgctctctataaaccttttggatgaccattgtacagcca
+cttatagatcccaataaatagcacaggagacagagtttttcaatgctcgatcatttgccg
+atagtattttcgtctaacctcagggcacctattatttgatacctaacctaacggcccttt
+cacaatggagaaatatatgacatcgggacaaacacaaatggtgggtggccaggagatatg
+acatggtggcgtctctaagaaacacggactccctctaggcaaactcacgtaaccaatttt
+aatgtcaaacaaaacgctcgaaaagattttgccgtgtaatgacctggtacattgactggt
+caggaatacatcactgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgt
+ataacgcaatttacgacggacatcagatcaagttatacagattatttaagtatcacgtgt
+gcattgggacataagggatctcacacatgccttggaacatttttgctttgtgccgctttt
+tcgctgcactaccaatccttacttaccagtatattcaaaggtcgttaacagaatgagaaa
+ggttagggctctaagttatcgtcgattgggatagacgagacatttgcgagcgccctccac
+ggatacgaatctcccatatcaatgtgaactggatgctatgcagtttagttcttacgtctc
+ctagtggtaaaaatcaaagtagcactcgcatagcagttattcagaacctaatacacaaaa
+ccgtcaaacattttctaattctaggtatgggccgatcataggagctaaggtgaaactcat
+aaatgttttgttagatctagcatcctaaaaagatgcatatactgagtagctggcgtgcat
+tctctcaattgtatcctttttaactgaactagtcggtcccatttcgtgactgagatctat
+taaccgataagattaataacactcgcattcgtatcagctcagagtgaagtttttcaataa
+tttgactgatatattaacttctaaaataaccctttaagcctcggatccgtttcccaatca
+catcaaaaattcttattccaactatctacggattaacaacgtgcatggggatcgtagtaa
+gaacttgttccgatcactttgagtatatcaagttgacggcccggttattattgaatagaa
+acattcacctgctaaattaaataccgcacatcggatacccgatttcagagggccgtctta
+ctaagggcaggctttgttcggtttaactgagatgttcattattttacagtatgcttcaac
+taatatgtaacgaaggacagtggatctgtctccatagtagatcttcagtcgtgaatttca
+taccgctcctatttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccct
+agtattctagacgaaaattttttctagttcatctgataatttgccaattcaaaaacaacc
+gctggtttcccggcgcattctctaaaatggaagtcgaacctagagccattatttgtcggt
+aacccatgagttccttcttttcagaagttaatacactgtggtcctatacagaggaaaaac
+agcggttatatacgatcgtggcataacaacattggatcaagatagcaatttggctaccta
+ttctaattctcactagattcggtattccactacaatatcggcagattaggattggatgaa
+taatcggtgtttaagtccggttgcgtctccaatctcctaatttttattaatattgatctt
+ggtgacctattgtaaataaaaacttcaagactttgaataacggtgaaaagatagaagact
+catttgaaaatggatcatccacagatccaaacattagcaagacactaatccccaactagc
+tattctgatcgcgatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaatt
+ctttttgggctttgttcgatggtgattcagaatctttatccggtcgcttccctgtagcta
+ctttgtggggatattgcccggggattatagggttgagatcgtttcctaaaagtatttaaa
+ccaagtagacttcaactaaactacatcagaacatcgtgaagacaccatacgcggtacctt
+tatttaccgataacatttcttcaagaaataccggtaagcagcataatgaccctaaacagc
+tcggggtatcgtcgtagttttaaattttatttaggttactgctcaaggaataaaaactaa
+ctatttaatttataataatattacaaggctcacactgattagatttgtctataagacttc
+gcgatcccccattaccggattgtcttaagaataaactagataaaccatgcattttctaga
+taaggcctttagtctaattagatacaaaaaacacgatagttgcatccttaatttattgtg
+tcaaacctggaaccttttaattacccgcaaatcactttatgtcgagactacctctgaaat
+ttattatctacctaccgcatgaggacttgaaccatcttgtaggagttatgtttattagct
+aagattcgtttatcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaatt
+gtttttagttgagtcaagactgatatataaataagtttccctagttttttcgtggtggga
+cgatattgaattgaatcttaaccgaagagtttcccactctgtcgcacaataatacacgcc
+aatatttccagccctgcttatgccttaatcggttactcaatctcccattgaagttcattt
+tgatctgcatagaagtttcgggcccagccttttttctgccaccttcctccaagctctgta
+gacgcactctaagattgatgctcacatgtattaattctacattaacataaatatataagt
+catgcatcttcgagtaaaatatctggttctccaacatgtcctggcacgtatcgttataat
+gcccatacatgtagtattaaaatgattgggttaactggatattaagatcatcgaaattgt
+aaagtcaaattaacaatactgtctcaagaccgtgtattcctcgtgctcggaagggctatt
+acgcttacttccgttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcc
+tacctgcgtgcatcggttagcaagagtataaaagttgtttaaacgaactacttgctttac
+aataccggtcgtatatatcgccgtgaatccagaagattgtcttctttggattatcaaccg
+agatcctgtggaccgatgttttgggaccttcacagaggactccaggtagagctcgctttt
+gcattaatctaagaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatg
+gaaaaacacagagaaacgtaaattactttaggccgaaaggcacatgagttattatacata
+tacgagatggtggtatacatcgaattcggggcatacactatagttgcattgtatttagct
+gctttaaataatatgatattaccttccttacataagacattaccggcataccctggtttt
+caacttgtggggctttttgacgatcgcactctcatttgatccgagtagggcggtgacccc
+tgcttttcaaatacaaaaatttcgctatgaaggtaatagattacttttcgctgttatgat
+agaaacggtaaatttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttg
+tgaataatgcggtcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatag
+aaacttatcagtcacgggtatcttgatttcattcttcttgtcaattgccgacataggatg
+aaatcagattccaatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaa
+gttgtacgcgtcgacgaagtggatagtatacgggccttttgtacggtgcgatcaactatg
+aatctcggcgagttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatga
+cgaattttcggctaggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggat
+tccattttacaagacgattacaatgagttacatgtctctcaacgtagtctttccctagta
+gtctttgaactatttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgc
+cattcatgtttatgatggaacaataagaataacgccctcgtatgttatcgacagtgaagt
+cagcagttcggccaaaaacatattcaatttagtacagatccccagaagttaagctaagtg
+ctctaaaatggcctaaacggttatcaaagtaggtctaattactatactaacgggtgcatc
+gtaataactgctgtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaat
+gtgacaaagaagccttagcgattcttgcaaacttaggacttcggattctcaatcttaaat
+gtccgaaaacgcaaagattcaaaaatttaatctatgagcagatatgcctgatggtgacta
+cgcgtatgttaaggctaaatgttgacaaccgcacacataatcgaactattgatagtcggg
+agcataaccaggtgaacgtactttgttcacgacatttattgacatgttctaaatacgtct
+caaaatcacggcgcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaat
+gccggtagtgtcaaacttcatgagaactttagctggcttttggccagtatttagggacca
+agagcactagccttaagctgaatattttgccatttatctactgttataactttaaaactt
+ggtggcaccagacttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaaga
+acaagcgtaggaattgagtttatattatatttaaactaaaagatgatattagcttctgag
+ggcgatagggctccaaatcataaagaggaatatattattacacgattagaaacccacaac
+atacctcgaatcgcccaaaagtttgacgaaacttggcagtactccacatctcagtaatac
+agttgggagagtctcaaatgttgttttattactcaatgaaccaccctcataatttcactg
+ctgttccattaaatttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaatt
+acagataagtagatgcataataaaaaaaactgctcgctataacacgatcatcgtgcattc
+ttacttaggagcatcacccgcacaataacgtaccttaaactacaacactattagaccgag
+tactgtaattcacgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgt
+gataatagtttgcggagaggattcaattattttccattgcacctactccactagattcga
+taaaagaaggtggtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaa
+gcatgtaagtgaaccgtcatccttccctaagaaacataaaggtttttaataatgtcgact
+gtgaactataactgcatcctttcctgacctactccggttccttgttgttatttctgaacg
+agaccagtagataaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccg
+ttgttttaagtgcccgtacaaacataagaagtcataatcttacttgaaattaattttgcc
+ttttattttttttcaggctcgaaattaatgatttgttttttttgaccttctagttacgct
+aatatgcggtcgcctgtggtttctattgagtcctataacgggatgggatctaatacgttt
+ggttactagtaaacaaggtataaatttgataccggagtatcaactgtataacatcaagct
+ttatgactcatacgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagcca
+ctaaggggtgtattacgatagtgacaccaccgagcgcactcactccccaagtagatttat
+gatcctacgctaagtattagatatataaccaaagaggttctagtcagtgcaactcttaga
+ataataattagccggttttgcctttttaggcctaatgcaatattcagctagcccttatgt
+atctcgcgttccacagcaccactcatggcacgcgtttaaactaatcaaatataatctatg
+aatgttatgccagtacttgaataaatcaggttttttataagtccttgcatactctcgtta
+tatactgttagagtcttaccccatagaaattctttcatctgcaaacttagaagaattctc
+agctacggggagcataaagtccccaggatgttgacaaatacaacaaatgtggcttataca
+aacactccatatgaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaa
+tccctccattttccaatagcagatacctatcctactacctcgtggtattaaattaaagct
+tgaaatatagagctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccac
+gatttgatttacagacgctagagcaaacccatctttaaacatataagtaaaaattaaagg
+gtgagtgcgtacgtgtttactagcaacttcgcttattaagacaattgtttataagccata
+attaaaaacatatgttcaacaggttcattgatatttgtaattgcacaggtttttaataag
+gatctacgtaagtataatgaacaaactttttaccagagttatattctgtactttgaaaat
+gctcctctaccgccttagagactttcaattagattttttgcagttaatctatgcgtaagt
+gaaccatgcaagggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataac
+tgtaggtctaatataattttcagttttcgaacacataaccctttgaaaatctgctattta
+atgtctcacctgcatgcactatcttctatactgctcagaacggctatacgtcactatgct
+ccaagtgacgatttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaa
+gtgcggactacgtgctctttacaataagccttgtgattgggctataggttaagtcccata
+ttaacgatctccaatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaa
+ttacagatagctgttagatactcactctaattttggacaacaatcccaatcttggggtcg
+tctatcgcctgaagctcgtaaatccttccatcttaaacgattacatattatagacttgtt
+cggggtagagatatcacagttgtgcaaacattgtaaatcgatactagtttatgttggtag
+tctagttgcttttaccattccccgaaaaacttgatctactatttcgacaacagtaaactt
+gaactaggtaagtgaaaacagagaatgcctcatagtgccactatttgtccactatatgta
+agtgtagctttacataatccactatgactgagatcattacggcctaggaaagcagcgtag
+aaaaaaagggcccggatattacgactgtaactataaaactagttactggtagcgcgccat
+gtatagatttgttttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatc
+cgttaaccagtccatctcgacttctataaaacgataaagtaaagttgatgttcagcctcc
+ttcttatggttgcatcgagagtacactactcagtgggaaatagatcggggttcctacttc
+agattgtattatctaggcaattgccgattgtgccatacctggataaaataagctacctac
+atgtgatgcttatctattatcgtcatactaccttagggtgtcctgttgaacgctacatta
+atctttagccgtttgagatgttccaatggataggagtctaacgcatgatgaagtttagga
+aggcagagcatcccactaagtatgtgacagtgtatttcgaaacgagacgttataaataga
+aaaaaggtccttctggttctattctgctgaactattgaatggaaagattggttgacctac
+gtactatttgcttgaagtcatcaatttgacggggtgagagacatatggtgcatactttac
+ggactctatattttagatcagaagcttagcagtcttctctacaccccctcacgacataat
+tgcttttaagaatctatgtttgattcctctacgggaattcggatccgttcgcatgtgcgg
+tttatctaaaccaggggacatatgttcagctaaagcatacgaacactttgctaactagac
+gtatgtatagtagctataaatcccgacgatatttacaaaaagaaatgagactcaaatata
+tacatagcgaccctacacttattcgcaccctgatctaggcgatcctagcacccacacccg
+aaagtgagcactagtgtcttccgtattaaatttactgcagttgagattttagttgtctac
+taaggattactctaacccgtaataaggatcaagactcggtactagctttactatcattcc
+ctatgtgttttcctaactcacaagggtacgtaccagcctatgtaattacaataatgataa
+agacacaaaggaagtaactttacaaatgagtctccagttacactagcttagtccctccca
+tcttgctttgaagtctaaatacgcaatctctgaggatatacagcagaagaacactcataa
+cgttggagtccaagaattagactcatagggcccccaacatttaatatgtactgtgagttt
+gaaggtgttctattgttaattcctgctcttgatacatgacacgtactccgtgtttaaggc
+ttcggactgactttctttcataagttgagcaacgaaaatttcagaatcgataagttggat
+tcactaactaatacggctgattgaaaactccactccggacctatatggtcgacctttata
+cgtaaccgatataaaacttataggctggtatatcgagccttcctagcgcaatttcggatg
+gggtttcttctactactcaacaacggaatagtctttgtttagtaaaccagagctcaggac
+gcccaatacgtaggagagcgctgtggagcatgtgtcattatggactggagcactcttaaa
+tcactctgcgtgtgctaaacgatagatcataacatgtcctgagtaaattttcttgatacg
+tcgcaatataccgttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcg
+tgctcagatatactattagcgactcatctcgcctaacacgcacacgtataaactcggaat
+gactgccgctcttacatattagaaatacagactacaccacggaagcattgggtcattctc
+aaccgctgtataaaagatgattagtcttataataagattaccaaagaggcagaatcatgg
+gtagtaaatctattattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatgg
+tactcaggacaaatattaaccggacgaagtggtttacgtcgtactttcactattagtagt
+aaatacaaggtaacaccggggaatagtactaaatataatgatatctatcttcgggagaac
+gagtcgtctattgctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgata
+caaccgattgttacttttgtctattcaaaagattgaatagttttttatacaaaagccgca
+tacttatgacggctagtatacagtttcatcccctagcatcaatgctatggacagtattga
+acttataggaaattcttctaatagggcaaatccgtcgtgatgcctattttttttcagtca
+catcctcaaatggcactagtattgtcgggatcccattaacaggctcaaccacgagctcac
+gcgaggacatgtagtccgtatctttaacgaagcgacagcgacagaactcccatggataac
+caattataaggcccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaa
+tcatgttgaataccccagagtagtccagatgataaccgatgaaacacaagtctttctcaa
+tgcacttacggtgaacttattaccgccaacgtagctcatcaaggttgcgacatctagttg
+tgtgtttgcgacgagcccagcgaacttcatcaactttcgtatattcaacgccttgtaatt
+ttactttaagacgcctggtgatgtagattcttagataatcagtttgttatcggctgtact
+ttaccataatttcacaggtttcaggtcaagaagattatagctgtatatacagttccatgc
+tcggtgcacagaaacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatc
+caatacatgccccgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagc
+tcgagtcaggacgtcagctagattagattccttaatagaatataccgacctctagtccga
+actaaactatagataacgccaacttcaggttaattgtctagtcgtctgtttgcagatggg
+attcttagatgagtgagtatcggccatattggttcgagcactttagtttttgatgcatag
+gatatgcaatgtatagctgaaagtactttatctgtttcaaactcacattgattaaaccgg
+taaacctttaaagactacaagaaaatattcagtgagggcaattttgtcaatcacaatctt
+ccagctagagatacttcacaatttgtcttgaggctacgcaacattagacggattttcgcg
+ttttattgaaataatcgaggggcccaagagtatccatagttcattttgtaagatttcttt
+acaggcttattacagcttcttcagactcctacatgcttacgagttatatgctagcatgtg
+aacaatagattaatatacaggaaaacgtacattgagagagatgaccctacacagcgcaac
+cgttgagtactttcattaaagggtaacgctctcgagacagcatccttaagatggccttat
+tgtcaaatcatttgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaa
+cacatgagacgcggtgaaaatagacagggtgttagtattcaatcttcggagtatcaattt
+cgccaatcttggtgagaaagcataccctttcttcagagaaagaagatcaatcataacact
+atctttaacgaggtacgcacgcgcatcattacctgcctccatggatctttaggatagcgg
+aaagtattggcagcgtattgtgatttcgttcctactttatcaatttcacattcatataca
+tgtcttttatcaaaatcgccaataagataggatgagctatattagatgctagtagagttc
+gcgccaacatcatcgataggaatactcaggacagcgtgataggacttttcaatccctaat
+actctctataattataactctctcttaagtttggaggcagtaacgcgctctatataatca
+gtttgctgcaccattcttcagcctctgatacatacaaataaattccacagcagtaagagg
+gtttaattgagacatcttgggaacttaggattttactctaacatcaccgaaacgattatt
+ggataccgtacctaaacgaactttctcaaggcagtaatataggacatccgcaataacaca
+aatgctgcctccccaggagttatgtcttcctggaggctatatcttacacccactcactat
+aggcaaactaaagtttaaatgttgattgtctaaaaaaaagatagataagagttggccggc
+gtagcacatgcgaaagtgaatcgtaagctataattctctggacttgaagttctgtcctgt
+tcctctgcaagaaacaaacttcctttaaagctatttacgacgcacatctcagcaagttat
+aaacatgttggaagtttctagtcggaattcccaaagaacggatctatctaatgcattcct
+acatttttcctgtctgccgatggtgccatcctattcaaagaatttcttaaaagtagatta
+aatgggacttttaacaatgagtaaccttacgcctctaagggttcctcgagtgccatacac
+cagtcaggtccgagccacatacacggagaacattctaacatagcattctcaactcgatca
+tttgcaggttacttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcac
+ggattaagaacctaagaaacaattcagtaaaacatgttcgaattcttggtatgggaacat
+cattgcagctatggtctaacgcattaatgtttgggtacatcttccatcatataaacagga
+agagtctgacgacagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagc
+tcacatgtcgtctatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataa
+gatctcactgaacttttgaatgaatgtgaagcatatatgatctgctttaataaaacttta
+tccataggatacgtttccaaatcaattcaataattattagtcaaaatagataaggatgaa
+caacctgaaggccgatcggacgtagaaagtggtcccatcactttgagttgatattgttga
+accacacgttattatggttttcaaacagtctcaggatattgtatatacagataatccgat
+accagttgtctgacgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgtt
+cagtattttaaactaggcggcaactaatttggaaagaagcacagtggatatgtctaaatt
+cttgttattcaggcctgaatttaatacaccgcatagttaacttcgcggtagagttgttca
+tcatgcctcctctaagctaccacttctatgatacaccaatagttgttctacggaatctga
+taattggccaagtcataaacttccgctgcgttcaacccccttgctcgaatatccaactcg
+aaaagacagccttttggtgtccggaacaaatcagttacttcttttctgatgttaattctc
+tgtggtcagatacagaccaaaaactccgcggatttaccatcctccaagaacaaatttgca
+tcaacatagcattttggctacatattctaagtctcaatagtttaggttttcaactacatt
+atcccaacattaggattggaggaataatagctgggtaagtccccttgcgtctacaatcga
+ctattttttatgaatatgcttctgccgcacctatggttattaaaaaagtcatgactttga
+agaaccctgaaaagatagatgaatcaggtgtaatggcagcagccaaagagcatataatta
+gcaacactctaagaacattatagatatgatgatagcgatcgtcatgatgttatccggtca
+caatagtagcttcatcagctaattcgttttgccagtggtgacttgcgctggaagaatcgt
+tatacggtcccttccctcttgatacggtgggggcttattcaaccgcgtggattgggttgt
+catacttgcattaaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatag
+tgatcaatacatacccgcttcatggttttaaccatttaattgattaaagatattccgcta
+agaaccattatctacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccg
+taatgatcaacgaagtaaaacgttatattgtatgtagaataataggtcttggagctaaat
+gatgtgattggtagtgaagacttacccttacaactttaccggtttctcggaagaatatac
+tagagaatcaatgcatgggctacataagcactttagtctaatgagataaaaaatacacga
+gtcttccatcatgaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatct
+ttatgtcgtcaataactctcatatgttttatataacttcccaatcacgacttgtaactgc
+ttgttcgactgagctgtttgagctatgaggccgggatccggttgagctacatctatttgc
+tacaagaaaaatgaaagcacatttgttgggagttctggctacactcatagagaaataagt
+ggcccgagtgggtgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaa
+cgctcgcgctaaagaattaaagcctttatttcctccacggagtagcccgtaatccggttc
+gaaagagaccattgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttc
+tgccacatgcctcaaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatg
+cgtctgtaacataaatatagaaggaatgattcggcgagttaattttcgccttctccaaca
+tggcatccctacgttcgttataaggaccatacatgtaggttttaaaggtttgcggttaat
+cgatatttacatcatagaaattctatagtcaaatttacaagactctagatactcactcgt
+tgcagccggctaggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaattt
+catatagtaagttcaaggcactcatacctccgtgaagagggtagatagactattaaagtt
+gtttaatagtacgtattgatggaaatgacccgtaggagatttaccactcaatccacaaga
+ttcgctgctgtgcattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaaca
+cgaatccaggtagagatacctttgcaatttttcgatgaaggcgaccgagataaatgagct
+ataacactgtatgtcttttgattgctataaaacacagaaacggatattaatttaggccgt
+aaccaacatctgttatttgacatagaacagatggtcctttacagcgtattccggccttaa
+tattgaggtccagtgtattgtcctcctttaaagaagttgattgtaactgacttaaataag
+acatgtcacccattcactgggttgcaactgctggccctttttgtccatcgcacgctaatg
+tgataacagtaccgccctcacacctgcgtttaaaagacataaatgtcgctatgaaggtta
+ttcattaattttagctgttttcttagaaaaggtaaatttaaaattgaaaaggctagaaaa
+ctaaagttacgacaaatgtgtttgtcaagtaggcgggcatcattgagattgtaagaaata
+aagccataaccagccccggaatagaaaatgttaaggaaaggcgatcttctttgaattctt
+attgtcaagtgcagtcatacgttcttatcagaggacattgcaataaaatctaacaccctc
+ccttgtgtggttgggccatttgtacttcgaagcgtccaccatgtgcagaggataacggaa
+tgtggttccgtcccataaacgatcattctcgcccacttagtggcgcggtaaatcgctctc
+atagaggtaactggcctgtaatgtccaatgttaggctaccttctccaactttagtacaac
+gaataatgtccgattaacaaggagtcaatttgtcatgaccagttcattcaggtacttgta
+tctatacggacgcgttccagagtagtatttgaaattttgaggttctactgataagtttag
+ctatcgctgtatgtctgaataagaatttaatgtttatcttcgataaataacaattaacaa
+ctcctaggtgatacactgtgaagtctgctgttccccaaattacatatgctattttgttca
+cataccatgaagttaagctaagtgctctataatggcataaacggttatcaaactagctcg
+aatttcttttattacgccggaagcggattaactgctgtagatcaaacacgttaggatagt
+gtcgttttcatatatatctaaattcggtctaacatgcattacccatgcttgataacgtag
+cacttcgcagtctaattatgtaatgtccgtttaaccaaactttaaaaaagtttatctatc
+accagtgatgcctcatcgtgactacccggatctttagcctttagggtctaaacagaacta
+atattactacgtgtcatactccggagcttaaccaggtgaaacttatttgttaaccaaatt
+tagtgacagggtagaaatacgtatcaaattaacccagcaatacaataagcatgaaaataa
+ttgtaatcgggtttgggccggaatcccgcttggcgaaaacttaatgacatagtgtgatgc
+attttgcactggattgagccacaaactcaactagcattatgctcaatatttggccagtgt
+tctacggtttgaaatttataaaggccgcgcaaaagtcttgtagttacaaacgcataaatc
+tcgaacgtaataggtttaattagaacatccgtaggatttctgtttatagtagatttatac
+taaatgttctgattagattctgacggccttacccatacaattaataaagacgaatatatt
+agttatagtttactatccaaataaattaagcgaatcgaaataaactgtcacgatactggg
+cagttatcaacttatcacttatacagttcggacactctatattggtctgtgagtactcta
+tcaaactaactcataagttaactgcgcttccattaaatttcaatacgttcttgtgctgtg
+tacaaacctataatcgaataaatgacacatatggagatgcataataaaaaaaacggctcc
+atatttctcgttaatcgggcattcttaaggaggagcatctcaccaaaaataacgttcctg
+ataagtcttaactattagaccgtcttcgggaatgaacgaaacctcaagctagcatggtat
+agttcttgatagcgcgtaaattctgataatactgggcggacagctggaaattagttgcca
+gtgcacctacgcaaatagtttacataaatcaacgggctccgaacgtaaatacaaagggtt
+agttacatcgcaacaagatgaaaagcatgtatgtctaccgtcatccgtccctaacaaaca
+taaaggtggtgaagaatctcgtaggtcaactataactccatccttgaagcaactactccg
+cgtccgtgtgcgtagttcgcaacgagaacactactgaaaaaagctaaacaactctcggta
+caaatgcggcttgtgtcgataaagttggtggtagtgcacggaataacataacaaggaata
+ttatttattcaaattttttgtgactgttatttgttttctgcctagaatgtaaggatgtgt
+tttttgtgacctgatagttacgcttatttcaggtccacggtgcgtgagagtgtgtcctat
+aacggcaggggagcgaagtagtgtcctttagactattcaaggtagaattttgataacgct
+ctataaaaggtagaaaatcatgattgagcaataagaccccaacttatcaaaaaaggagtt
+ctcgacagcgcgtgtacagtccctataacggctgtatttcctgtgtcacaacaccctccc
+atcgcactcaaaatgtagatttatgatcagacgctaacttgttcttagagaaaaatacac
+gggatactctgtgcaacgatttcattaataaggtgcagcttgggacttttttggccgtag
+gctttattaacattcacagtaggtagcgagacttcctatgaaccaatcatgccacgcgtt
+ttaacgtttcaaatataagctaggaagcgtttgccaggacttctataatgcaccgttttt
+tttagtacttccttactagccttagtttatgttagagtctttccaattacaaaggattga
+atagccaaaatttctacaattctcagcgaacgccagcttaatctaaacacgagcttcaaa
+tattctacatatcggcaggagtcaatatataaatatgaaaatcgtaccatcctcgtactt
+ttagaccaaacgtcttcggataattaaatcctttttcaattaccacagtacgtgcattag
+aactactgctatgaaagtaaaccttgaaatatagtcctcaagagcgtatccaagtacatt
+gcacgtgtatacagtcgtataaacgagttgatgttctgacgctagagcttaccattcgtt
+aaacagataactaaaatttaatggctgagtgacttagtgttttcgacaaacgtcgcggat
+gtagactattgtttataagcaatttttaaaaacatatgttcaaaacggtatgggatatgt
+cgaattccacaggggtttatgtaccatagaagtatgtataaggtactaaaggtttaaatc
+tgtgatattcggttcggtgaaaatcagactagtcacacttagtgtctgtaaattagattg
+ggtgaaggtaagcgatcccgaactctacaaggcatgggatgagattctaccgactccgga
+taacactttacgatcgcgcataactctagctcttagataagtttaacttgtcgatctcat
+aaacagttcaaaatctgcgatttattgtatcaaatccatcctctatcttctataatcatc
+tgaaccgcgatacggcactatgagccaagtgaagattgaatccaagaaagctataattgg
+tttattttagtccatttaaattaagtccggtataagtgctctgtacaatatgcagtctca
+tgggcatatacgttaactaccttttgatacttcgaattggtaaaatatcgactatcgatt
+tgcagtaaaaggtgtagagtccaattactctttcctgttacatacgatctcttagtttgg
+acaactagcccatgatggcgctcctctagcgcatgaacctactttataattacatcttta
+tcgatgaatttttttagactgcggaggccttgagttttaacagggctgctaaatttctta
+agcgattagacggtagcgtcgtacgctacttgcttggaacaggcaccgaaaatattgatc
+tactattgcgtcaactctattctgctaatagcgatggcaaatcacagaagccctcttagt
+gacaatagttgtcaactatatctaagtcgacctttactgtatcaacgatcacggagagaa
+ttaccgaatacgaaacctcaggactaaaaaacggaaaggatttgtcgacggtaaatataa
+tacttgttaagggtagcgacacaggtatactttgggtgtaaacgtggtgcttcccggaac
+gattttcagaccagaaaattgttccggtaaccaggaaatctcgtctgcgttaattcgtgt
+tagtaaacttgatcttcagactccttcttttcgttgcagcgagacttaaattatatctgc
+gaaatagtgccccgtgcatacttcagatggtaggagataccatttggcccattgtgactt
+tacgcgattaattaaccgacatacatctgttcctgagctatgatcgtctgaataaattac
+ggtctcctcttgatacctaatggtttctggagacgtttctcatgttcaaatggatagcag
+gagatcgcttcatcaagtttagctacgcagagcatcaaaatatgtatgggaaagtcgatt
+tccaaaccagaagggataaagagaaataacggacttctccgtagattagcctgatatttt
+gatgggaatcatggcggcacatacgtaagagttgcgtgaacgaatattttggacggcggg
+agacacatatcggccattcgttaaggtctctatattggacatcacaagcttagcagtatg
+agctactaacactcaagacattattgattttttcaagatatgtttcattcctctaccgct
+attcccatacgttcgattcgccgggtgagcgaaaccacgggactgaggttaagctaatca
+ataacaactcgttgcgatagagacctatgtatactagagagaattccccaacatttttac
+aaaaacaaagcagactaaaatagatacagtccctccatacaattaggaccaacatgttat
+tgccgatcctagcacacacaccacaaactcagaacttctgtcttacctatgaaagggtct
+gcacttctgattgtacgtgtctaattagcattaatattaaaactaattaggataaactat
+aggtacgagctttactataagtcactaggtgttttccgatcgaaaaacgggaccttcaag
+ccttggtaagtacatttaggataaagaaaaaaaggaaggtacgtgactaatctgtctaaa
+ctgacaatagagtagtacctacatgcttcatgtcaagtcttaatacgcaagcgctctcgt
+tatactgctcaacaaaactcataaagttggactccatcatttagaatcatagggaccaaa
+acatttatttgctactgtcactttgtaggtgttctattctgaattcctcatattgataca
+tgaatcggaatacctgtggatcccttaggacgcacgtgctttctttacgtcagaatacat
+attgtcagaatcgagaagttccatgcaattaagaattcgcctctttgaaaactcatatcc
+ccacatatagggtccaccgttattcggaaacgatataataattattccagcgttgagcgt
+cccttaagagcgcattttcgcttggcctttcttctacgactctacaacgcaagtggctgt
+gtggagtttaccacagcgcagcaccccatagaactacctctgagagcgcgagatggtggc
+agtatgctctgcagctagcgtttagaacgcgcccgcgcattaaccagtcatattaaaatg
+gactgtcttaattgtcggcattaggagcaatattaactgatgagggtatcggtcgcagaa
+gtaatgacggaaatacgcctctagtccgcagagatacgattacagactcagatcccctaa
+caagcaaaacgattaaatcggaatcactccccctatgacatatttgaaatacacaagaaa
+ccacgcaacatgtcccgcattctcaaccgcgctttataagatgttgagtctgagaattag
+atgacctaactgcaagaatcatggcgagtttatctagtaggcaagtctgtaccctagggt
+tcgaacgctgtgacgtcgtgatcggtctaaggacttagatgataaccaagaactggttta
+ccgagtactttcactattaggagtaattacatgcgttcaccgcggaatacgacgaaattt
+tttcatatctttatgagcgagatcgtgtcgtctttgcattgcaacagtcgctaccagtaa
+ttgctgatcaattatagattcattatacagatgcttacttttctctattcaatactgtca
+tgagttgtttttaaataagcaccagaattatgtcgcctagtataatcttgcttccacttg
+aatcaatgcgatggacagtattctactgattgcaaagtagtctatttcggcttagcagta
+cgcatgcctatttttttgcaggcacagaataatatgcaactaggattctcggcatccaat
+taacaggctaaaacaccaccgaaagacaggtaatctacgaagttgatgtttactacagaa
+agcgaatgatatcacttggagaacattttagatgcccccttttaatctagactgagtgta
+ccaatatatcaccggtctaccgaatcagcttgaataaaccactctagtactcatgataac
+cgagcatacacatgtatttctcaatgcactgaaggtgaactgtttacaccataccttgcg
+aatcaacgtggcgacttatacttctgtctttgagtacagcacaccctaatgaatctaagt
+tagttgttgatacgaattgtaatttgactggatctcgcctcctcatctagattcttagag
+aagatgtttcttatagccggtactgtaactttattgatctggtttatggtaatcaacatt
+ttacctctatttaaacgtccttgcgccgtgcactcaatcctgatcggtttagattcaagc
+gattatcgagtctggaggccgagaaaagaaatgcacagagtaagctctctattgcgacat
+ctacgtagaaactcgcatttcagatcgagtaagcaactctcattgtgttgattcagtaat
+acaagattacctacgcttctacgaaatatactatagatttagcctacgtcacctttagtg
+tcgagtcggagctttgaagatcggatgcggtgtggactgtgtataggcaattttgctgcg
+agctcgtgacttttggttgatgtcgatatcaatgggatacctcaaacgtctttatctctg
+gataactcacattgagtataccggtaaaaatttattctattcatctaaatagtcagtgag
+ggctagggtcgcaatcacattaggccacatacacatacttaacatgttctattgacccga
+cccaactttagtagcattgtagccgtttatgcaaatatgccaggcgccaaacactagcca
+gagggcattttgttacatttatttaatcgattattacacagtcggaacacgcctacatgc
+gttcgacttatttgcgacatggtcaacaattcagtaatttaatccaaaacctaaagtcag
+agacatgacactaaaatcacattaaggtcagttagtgaaggaatggctaaccagctagag
+aatgcatcattaacaggcacttattgtcaaatattttccagatctaagcaacatcacgtt
+aaaaagtacaacaatcacttaaaacacatcagtccaggtgtaattagaaagccgcttagt
+aggcaagcgtaggagtataaatgtagacaatagtcgggacttagcagacactggatgcag
+tcatagaagatcttgcataacacgttagggttagagctacgaacgcccatcattaactgc
+ctaaagcgtgcgtgagcttagcgctaacttttccaacacgtttgtgatttcgttcataat
+gtatcaatttcacagtcatatacagggagtgtagaaaaatcgcaattaacatacgttgac
+ctatttttgttcagagttcagttagagcctaatgattcgagagcaataatcaggacagcc
+tcataggaagtgtcaatcacttagaagctatattattataaatcgctctttactgtcgtc
+gaaggaacgagcgagagagaatcagttgcctgcaactggcttaacaatatgatacataaa
+aatattttcatcaccactaagacggtggaattcagacttattggcaacttaggatgggac
+tattaaataacccataagatgttgggataaagttacgaaacgaaagggatatagcctgtt
+agataggaaatccccaataaaacatagccggcctccacagcagtgatctattccgccacg
+cgatatctttataccacgcaatataccaataataaaggttaaatgtggttgcgatttaaa
+aaagatacatatcagttgcaccgcgtagcaaatccgtatgtgaagcgtaacctagaatta
+tagcgtctgcaagttctctaagcttcctctgcaagatacaatatgactttttagcttttt
+tactaccaaatctcagaatcttagaaacaggttggtacgtgctactcggaattcccaaag
+taccctgctatatatgccattccttcattggtccgggctcaccatggggccatcatagta
+atagaaggtagtaaaactagttgatttccgacttttaacaatcactatcctgacccagat
+atgggttccgactggcccttactccagtaagggcagacacacagacaacgagaacttgat
+aactttgaattctcaaatcgatcattgcaacgtgacttatttactagcctactcctataa
+ttcatacgtcaaatacatttcaacggaggaagataataagtaaatattcactaaataatg
+gtcgaaggagtcctttgccaacataagtccacatatgcgctatagattttttcttggggt
+tcatattcaataagataaacagcaagagtatcacgtcagcgagtcattgagatcttggct
+agcattgtgatagcatattctacctaaatggtagtctagcacagagtggataagatatca
+gttagatatagacaagtactataacagatctcgcttcgttggattgtatggctagctttg
+atgatatgattttataaaaattgatccagacctgacctggccaattatattcatttttta
+tgagtaaaaatagataaccatgaaaatactcaagccccttaggacgtacaaagtggtaac
+ataaatttcaggtgttattctgcaaccacacctgttttgggttttcaaaaaggctaagca
+gattggttttacagataatccctgaacactggtatctcccaacgatgtcgttcccaaccc
+ttgctgaccttttaagctctgctgaagttttgtaaactaggcggaaaatatgttcgatag
+atccactcgcctgaggtagaaattcgtcttagtaacgcctctttggattacacagaatag
+tgtactgacacgtacactgctgcagcagccatacgctaacattaaaattcgttgagtcta
+catttgttgttattcggattatgttattgggaatagtatttttattcccctgcgtgaaac
+cacatggatagattagcctactcctaaagactcccttttggtctacggttcaattctctt
+actgagtttatgttcgtaattatatcggcgcagtgaatctcctaattatcaccggagtta
+ccagacgccatgaacttatggccagaaacattgcatgtggcctacataggattagtatca
+agagtttacgtttgcaacgacatttgaccaacttgaccattcctgcttgtagaccgcggg
+aactcccctgcacgcgactatagaagttggtggtggatgtggcttatgccgcaaatatgg
+ttttgaaaaaagtaatctattgcttgatacctgaattgagacatgtataagggctattgc
+cagatgaaaaactgcatataaggtcaaacaatataagaacattatacataggatcttagc
+gttcctcaggatggtatacgctataaagtctagcttcagcagctaaggagttttgccagt
+gcggacttccgctggaagattaggtttaaccgccctgacatcttcataaggtcgggcctg
+attcaaacccctggagtgccgtctcatacttgaattaatcgatggaaaacttcttctagt
+ctaatattattattaacaaatgacggttcaataaataacaccgtaagggtgggaaactgt
+taagtgatgaatcattttaacctatcatccattagctacagataatgataccccgatccg
+actagggggtaagtggttgttccgttaggataaaccatgtaaaacgttagagggtttgta
+gattaattggtattccagataaatgaggtcagggcgagtgatcaattacactgaaaaatt
+gtcagcttgcgcggtagttgttaagacagtataaatgaaggggattcagaagcaagtttc
+tcgattgactgaatttataaaccagtcgtcaatcatgatttttgtgtcgattaaagccta
+aatggtaatttaaaccattgatatttatcgagtctataaatatctttggttgtatattac
+ttcacaatcaccaattctaaatgattcttccactgtgcgggtggagatatcaggacgggt
+taaggttgacctacatcgttttgatacaacaaaaatcaaagcacatggctggggacttct
+cgatactatctttgagatagtacgggcaagagtgggtgacgcctccctacattttcaagt
+ctatcggataacttctcggtaaaacgctcgcgatatagttttaaagcattgatttaatcc
+acgcaggagcaagttttaccggtcgaatgagaaaattcaacgtaagtgtcatatccagtc
+atggttagccaaaagcatgggttatccaaaaggaataaaacagctcttcaacaaagagat
+gaggcttcataacttcgatgaatgcgtatggttctgatatatagatcgatgcatgaggac
+actttattttagccggcgaattaatggaatccatacgttacttatttggacatgacttct
+aggtgtttttgctgtcccgtttagcgatatttacagattagtatttcgtttctcatagtt
+aattgtatctagatactaactcgttgaagacgcataccttgccatttgtacaggacttaa
+ctgttccgtgcgtaatttgaatttcttataggttcttcaaggcacgaatacctcactcat
+gaccgttcatactctagttaaggtcgggaatactacgtatgcagggaattgtaacctagg
+agatttacaactctttaaacaagagtcgctgaggtccaggatcaaaacactgaatctcct
+aacttcgggtgcctccgtaaatcacctagaaacctactcatacatttgcaattttgagat
+gtaggcgaaagagagaaatctgctttttaacggtatctcttgggattccttttaaaaaca
+cataacgatagtaatgtaccaagtaaccaaaagctgggatgtgtctgtgtactgatccgc
+cgtgtcagagtagtccgccatgaatattgacgtcaaggctagtgtcatcaggtattgatg
+ttcattgtaaatgaaggaatgaactaatgtcaccaagtaaagggggtgaaaatgctcccc
+agggttctacagacatagagatggtcagaacacgacccccctctcaacgcagtgtatttg
+aaatatatggacatatctaccttattctgtaattttagatgtgttctgtgtataccgata
+ttgataagtcaataggcttgattacgtatcttaagacaaatctgtttcgcaagtaggacc
+gcatctttcagattgtttctttttatgccataacctgcccaggaattcaaaaggttatcg
+atacccgatatgctgtgaattattattctaatggccactcattcctgcttatatctggaa
+ttggcatgaatatcttacaacctaaagtctggcgttgcgccagttctacttcgtaccgga
+caccatctccagtcgttaaccgaaggtgggtacgtcacataaaagttcattagaccacac
+tttgtgccgacgtatatagatatattacacgtatagggaatgttttctcctaggtgaccc
+gaccttctactaaggttgtacatcgtataatggcccattaactacgaggaaagtggtatt
+gacctggtaatgcacgttcttcgatatataccgacgaggtaaagtctactattgcaaagt
+ttgacgttatactgataagtttagatttccctggatcgcgcatgaacaatgtatgcgtta
+tctgccatatataacatgttacaaatccttggggatactatcgctactatcatcggacca
+aaattaaataggctagtgtcttatcagaacatcatgtttaccgaactgatctattttcca
+atttaagctgatattacgtccgcgtatttattttagttccccggatgacgattatctgag
+ctacatcatacaagttagcatactcgccggtgcattgatttcttatttcgctatatcttc
+aagttcacaggcttcatatagttccaattagcagtataattaggttttgtaactttaacc
+atactttataaaaggttatattgcacaactgatcaagcatccgctataacccgagcttta
+ccagttagcggctaataacaaataagatgacttcgtgtcatacgaccgtcatgatcatgc
+tctaacttaggtgggaaccaaatttaggcaatgggtagtaataagtataaaatgatacca
+catatactataacaatgaaattatttgtaatccggtttgccaacgtatcccccttcgcga
+taaattaatgacatagggtcatccatgtgccaatcgtgtgtgccaaaatctcaaattcaa
+ttatcatcaatattggccaagtgttataagcgttgaaagtgatataggccgccaaaaagt
+agtctacttaaaaaccaatatttatcgttcgttattgctggtagtacaacatcacgagca
+tttctcttttgagttgatttatactatatctgctgatgtgattatgtcccacttacccag
+aatattaagaaagtcctagattgtaggtatacttgactataaatataatttaagactata
+caaataatctggctacattatgccatcgtagaaactgataacgtagtaacgtcggacact
+agattttggtcggggagtaatctagcatactaacgaatttgttaaatccgctgaaagtat
+atgtcattacctgcttggcctgtcttcaatacgtttagactattaaggactcatttcgag
+atccagtattaattatacgcatccatatttatactgaagacggattgagttaggacgaca
+agctaaacaaatattaagttaaggattagtattatattgtagaaactcgtcgggttggaa
+cgattcatcatcatagaatgcgttacttattcagagagacttaattcggttatgactggc
+agctcacctggaaagtaggtgaaaggcaacagaagaatattgttgactgaattctacggg
+ctacgaacgtaattacaaagcggttcgtaaagagcataaagatcaatacaatggatctct
+acagtattacgtaaataacatacataaacctggtgttgattcgactagctcatagattaa
+tcattaattgaagctacgaagacgcggaagtctgcggagtgagcaaacagtaatcgactg
+ataaatgcttataatatcgcgcttaaatgccgcatggtgtacattaacgtgggggtagtc
+aaaggaatatatttactaggaatattagttatgcaaatgttgtgtcaatgtgatgtgttt
+tatccagacattggatgcatggctgtgggggcacaggatacttaccattagttcacctac
+aagcggcgtgagagggtctcagttttagccagcgcagagaagtacgggcctttagacgat
+taatgctagaattgtcataaacctcgtgaaaagctagttaataatcatggtgctagaaga
+acacaacttttctataaaccagttctcgactgacagtcgtaactcactatatcgccgctt
+tgtactgtcgcaaaaaaacctcacatagaaagaaaaatctactgggtgcatcagtagaga
+tcgtgttctgagagataaatacaccggatacgatctgcatcgagttcatgtattaggtca
+agcttgggactgttgtgccagtagcattttttaacagtcaaagtagggtgagacacgtca
+tatcataatatatgccatcgaggtttaaagtttatatgataagctagcatgcgttgcaat
+cgtattcttgaatgctccgtggtttgtactaattcctttatagactgagtgtatcgtaca
+ctcggtacaattacaaaggatggaagagcaaataggtcttcaattataacagtaccccac
+cttaatctaaaaaccagcttcaattagtattaatttcgccaggagtatatatataaatat
+ctaaagactaaaagactcgtacttttacaacttacgtcgtagcataattaaatcatgggt
+aaatgtcatcagtaagtgcattagaaatactcctttgtaaggatacagtgaatgtgtctc
+agcaagtcagtagaaatggaaattcatactcgattaaggcctataaaactgttgttggta
+tctacagagtgattaaaattagtgaatcagattacgaaaatgttttcccgctcgcactta
+cgcgtttagacaaaagtacaggtggtacaattggctgtagtagaattttggtataaaata
+ggtgataaaccggatgggtgtgggcgaattcaaaagcggtttttgttccatagaactatg
+tagttggttataaaggttgtaatctcggagattaggttagggcttaatcagaatagtaac
+aatttctctatgtaaagtacagtgggtgatcgtatgagttcacgaactcttaatgccatg
+cctggacaggataaacaatacgcatataacttgacgatcgagcttatatcgacctatttg
+agaagtttaacgggtcgatataatatacaggtcttaatagccgattttttctagaaaagc
+aatcctatatcttagttaatcagatcaaccccgtgaacgatatatcagcaaactgaacat
+tgtatacaacattcctttttgtccgggtggggactccatttaaagtatctcacctagaac
+tcagcggtaatagatgcagtctcttgcccagttacggtaactaaatgttgatacttagaa
+ttgctaaattttagtctagacatttccaggtaaaccggtagacgacaatttctctgtcat
+ctgtcataagatcgcttagtgtgctcaaattgcaattgagggccctactatagacaatca
+tcagactttttaattaaatagttttccatgaatgtgttgtcaaggcggaccccttcactt
+ttatcacggctcataaatgtcgtatgactgtagtcggtagcggccttcgagtcttcaggg
+gaaatggaaaagaaattaggcttctaagatggactataatcgattaggctaattccgttc
+gcaaatcacagaagcaatcttactcaaaattgttggaatcgatagcgaacgcgaccgtga
+atgtttaaaagtgctcgcacagaattacccaatacctatcatcacgacttaaatacccaa
+agcagttgtagtcgcgtaatagattaagtctgaagcctagagacaaagggatactgggcg
+gggaaacctgctccttcacggtaacatggtaacaacagaatttggttaaggttaaaacga
+aatatactcggagtgaattactgttaggtttcgtcatcggatcaataagtagtttccgtg
+aagacactcttatattagatctccgaaattctgacccgtgcattaggcacttggtaggag
+attccatttggaacttgctcaatgtaagccagtaatgttccgaaataattcgctgcagga
+gcgaggagccgctgaataaaggaccctcgcatcttgttaccttatggttgagggtcaccg
+ttctctgcgtcaattccagagctggagatacattcatcaacgttacctacgcacagaata
+aaaagatcgagcgctaactcgttttcctaaacacaacggatttagacaaattaccgaatg
+cgccggagagtagcatcttagtgtcatgcctatcatggcggctcagtacgaagagttcag
+gcatcgaatattgtggtagcccgcactcaaagttccgccattaggtaagctatatattgt
+ggtcagaacttgaggacaactatgagctactaaaaataaacaattttgtcatttgttcta
+gatatgtggcattcatcgaacgcttgtaccagaagttacattcgcagcgtgagcgaataa
+acccgaatgagcgtaacattatcaataacatatagttcagatagagaacgaggtattcga
+cagagaattacccaacattggttattaatctatgcagaataatttagataatgtcactac
+ataatattaggaccaaaaggtgattccccagaagacaaaacaataaacaatctcacatat
+tcgctagtacctatgtatgggtatgatcttctgattggacggggataatttccaggtata
+ttaaaacttattaccataatctagacctaagagaggttatataagtaaagagctgtgttc
+cgatagaaaaacccgaccttaaagacttgcgaagtaaattttgctttaacaaaaaaacct
+acgtaagggaatattctgtataaactgaaaagtcaggtgtaactacatgagtcatgtctt
+cgattaattacaatgcgatctcgttattctgatcaactaatatcataaactgccactaca
+tcttgtacaatcattcgcaacaatacttttatgtgctaaggtcacgtgcttcctctgcta
+tgctgatttaatcagattcataaaggaatacgaataactctggatccattaccacgcaag
+ggatttatttacggctgattactttttggctgttgacagaactgccatgaaagtaagatg
+tcgcatcttgcataaataatagcacctaatatagccgacaaagtgattccgataacagat
+tttaagttgtccagccttgagactccatgaagaccgcttgggagcttccccgtgattaga
+agaatctaaatcccaagtggatggggggagtttaaatctcagcaccaacaaatagtactt
+cctctcagagcgcgtcatggtcgaaggagcctatcctgatagaggtttgaaagcgcacgc
+gcatttaactgtcatattaaattggaatctcgtaagtgtcggcagtacgacaaattttaa
+ctgatgtcggtatacggagaagaaggaagcacgcattgaagcagctacgcagaactgaga
+agatgacactctaagatacaattaatacaaaaacgttttaagcccaatctatcaacagat
+gtaagatgtctaatacacaagaataaaaccttcatgtcccgatgtataataacagcttta
+tttctgctggtcgaggtgaagtagtggaaattactccatcttgctgcgcgtctttatagt
+gttggctactctgtaaccgacgcgtccatccctctctcctagtgatccgtatatccaatt
+agaggataaccaacatctgcgttaccgacgaatttaaatttttcgactatttaattccgt
+tcaaacccgtattcgtagtaagtgtttcatagatttatgaccgacatcgtgtacgagttg
+cagtgcatatgtagataccactaattgctgatctaggatacatgctttataaacatgctt
+acttggctattttatttactgtcatgtgggggtttttattttcaacaagtatgtgctacc
+attggataatctggcttcaaattgaagatatgcgttccaaacttgtctactgtttgctaa
+gtaggagttgtcccattagaactacgcagcacgtggtttgtgatcgaaaagaataattgg
+caaatacgaggctagccttcaaatttaatgcagattactcctcagaaacacacgtaagcg
+acgaacgtgatgtttactacacaatgcgtatcatagaaattcgtgataatttttgttcca
+acctttgaatctagactgagtggaaaaagatttcaccgggataccgtttatgctggtttt
+aaaaactcgtcgaatcatcttataactgcattcaaatggatttctcaatcatctgtacgt
+caactgttttaacaataacgtcagaataaaccggcacaatgagacggcggtctttcacta
+caccacacccttaggattataagtgacgtgtggattcgaattctaaggtgacgggatcta
+caagcctcagctacattaggtctgaagatctttcgtatagccgcgtatgttactgtttgg
+atatgggttatgctaatcaacagttgacagcgagtgaaacggccttgcgacctgaaatct
+ttacggttaccttttgattcaagacaggatcgacgatggaccacgtgaaatgaattcaaa
+actgtaacatcgcttgtgcctcagcgaccgagtaacgacaagttcacatcctctatgcaa
+ctatcattgtggtcattaaggtattcaagattaactaagagtcgaccatatattctagag
+ttttacaattaggaaccgttagtctagactaggagcgtgcaacatcgcaggaggtgtgga
+ctgtcttgacccaagttgcctgacacatagtgtcttttgcttcatgtccttagcaatgcg
+atacctcaatcgtagttttatcgggataaataacatggtgtttaaccctattaatggttt
+ctattaatctaaattgtaaggcagcccttgggtcgaaagcacattaggccacatacacag
+tatgaaattgttcgagtgtccagaccataattgactaccatggtacacggtgttgctatt
+atgactcccgcaaaactcttgacagagggaattttggtacattgatgtaatcgatgattt
+aacagtaggaactagacgtcatccgttagactgagttccgacatgctcaaattgtcagga
+tttttatccaataactaatggctctcacatgtaaataaaatcacattaacgtcacttagt
+gatggattcgctaaacagatagactatcattcatgaactggcactgtttcgattatattt
+gcaacatcgaacatacttaaagttaaatacgacatcattcaattaaaaaaattcagtaca
+cctctaatgagtatcccgctttggaggaaagagtagcactttaaatggacaatttaggcc
+ggactttcctgtaaatggatgaagtcattgtacagcttgaataaatcgttagggttagtc
+cttacatccaccatatgttaatgaataaagcctgagggaccttagagctaacttgtccaa
+cacgttgctcatttacttaataaggttgaaatgtatcagtaagtgacagcgagtgtagat
+tttgaccatttaactgaccttcacagttttgtcttcagacgtcacttacaccataatgat
+gacagagcttgtagatgcacacactcattcctagtgtaaatcaagtagtagctagattat
+tataaagagatattttctggcgtcgaacgtaacacagagagagtataaggggcatgataa
+tggcttatcaatatgtgtaagaaaaagtttttaatatcatctaactcggtggaatgcaca
+cttatggccaactgaccttgggacgagttaagataccataagaggttgcctgtaagttaa
+gataacaaagggatattccatctttgtgtgctaagaacctatttatatttgcagccataa
+aaacctctgtgctatgcagccaccagagttatttatacaaagaaagagaccatttagata
+cgttaattctgcttgcgatttattaaacagacatttcacgtccaaccactacaaaagccc
+tatcgcaagacgatcattgtattatagcctatgcaacgtagctaagcggccgaggaatca
+taaaatatgaattgttacattgtttactacatatgatcacaatctttgtaaaaggttcgt
+tcgtgatactaccatgtacctaactaacctgagatatatgcaatgacttatggggtcagc
+gcgcaacatccgcaaagcatagtaatacaaggtaggaaaacttctggatttcccaaggtt
+ataatgctctatactgaccaagagatccgttacgactcgcaatgaatactctaagggcac
+tcacaaagaaaaccactaattgataaatttcaatgataatatcctgaattgcatcgtgta
+tgagttacgagaagtcgcatttaatgaattagtcatagaaatgtcatagcaggaacataa
+ttactatattttaacgatttaatcgtagttggagtcctttcccaaattatgtcatcagtt
+ccgatttagatgttttcgggcccttcttagtaaagaagttaatatccaagactagctcct
+cacccacgcatgcacatattcgcgagaagtctgatagaatattcgacagaaatgcgactc
+tagctcacactcgttaactgatcaggtacttatagacaagtacgttatcagatatcgctt
+cggggcattgttgcgctacctttgtgcatagcagttttgaaaaattgttcaagacctgaa
+cgggaaaatgatattatttttttaggaggaataatacagtaccatgtaaatactcaacca
+ccttacgtacttcttacgccgaacatatatggcacgtgttattcggctaacaaaactgtt
+gtgccttttctataaggataagcagattcgttttaaacatatgacctgtaaactgggatc
+tacaaaagaggtacttaaaataaattgcgcaacggtttagatctgcggatctttggttaa
+agagcaccattagatgtgccatacttcctatcgcctgagcgagaatttagtctgaggaac
+cactcttgggatttaaaacaattcggttaggacacctactcggcggatgaagcaatacga
+taacattaaaagtcgttcagtctaattttggtcgtagtacgatgagctgatggccaattg
+tatttttattaacagcactgaaacaaaatggagactttagactaatactaaagtctcaat
+gttcgtcgaaccttaaatgctcggaatgaggggatcttcggaagtatagcgccgaagtgt
+atctcattattataacaccagtgtacagacgacatctaattatggccagaaactgtcatt
+gtgccattaagaggattagtagatagtctggaccgtggaatagaattttgaccaaattga
+ccagtcctgcttgtagacagcgcgatctaaactgcacgagaatatacaagttggtggtgc
+ttgtggctgagcacgctaagatgcgtttgtttttacgattctagtgcttcttaacgcaat
+tcagtcttctagatccgctattccaacatcaatatctcaatttaaggtcaatatatataa
+caaaattagacagagcagctgacacttacgaagcatcgtagaaccgatatagtcgacctt
+atgatgatatggacgtgtccaagtccgcacttccgatgcatcttgacggtgaaccgaaat
+gaaatcttcattagggcccccatgtgtcaaaccactcgagtcccgtctctgaagtcaagt
+attactgcgaaaaattcgtctactattagtttattatgaacttatgacgcttaaataaat
+taaacagtaagcctgggaaaatgttaaggcaggaatctttgtaacagttcataatgttgc
+taaagattatcagaccccgtgaagacttcgggctttgggcttcgtaccgtagcataatac
+atctatatagttagaggcttgcgtgttgttgtgctattccacatatagcagctctgggcg
+actcttcaatgaaaatgaaaaatggtaacctggcgacctacttgttaagtcagtttaatt
+caaggggattaagtaccaagggtcgagtttctctgtatttattatactgtaggcaagaag
+cttttttggcgagatttaagacttaagcctatggtaaaaatttgatagtgagcgactata
+gtaagagatttgggtggttagtaattaaaattctcctatgctaaatcaggcgtacaatct
+gagggtgcacatttctcgacgcgtgaaccttcaccgaaagcgtgtggattatacaaattt
+caaacatattggcggggcacttatccataatagatttctgtttgtacgccaaactctgcc
+tcacccctccataaattgtattggctagaggttaaattctccgtaaatagagacacatat
+agttttatacaattgtttgaatcaaagcacgagaaacttttaaccgtacattgacaaatg
+tcttcggatggggcagagcatctcttcgtgacccaaatcaatcgctgagcaataagcaag
+aaaacacagattatacaaagagatctggatgaagatattcgtgcaatcactatcgttatg
+ttagagagttccatgcatgaggactcgttttttgaccaggagaattaagccaagaaataa
+ctgacgtatttccaaatgaattctacgtgtttttcctgtcacctttagccagtgttaaag
+atgactatggagtttcgaataggttattctatagacattataacgagtggaacacccata
+ccttcacagtgctaaaggtaggaacgggtacgtcaggtagttcaagggattttaggttct
+taatccaacgaagaaataacgcatcacccgtcattctattgttttcgtcgggattactta
+gtaggcagggtattctaacctacctgagttacaaatctttaaaaaactggccatgaggtc
+atggtgataaaatctgaatcgcctaaattcgcgtccctaaggaaatatactagaatccgt
+ctcagaaagtgcaaaggttgacttcttcccctaacacagaattctcagttttatagctat
+ctagtggcattcctttttataaaactttacgtttgtaagggtccaactttacaaaagctc
+ggatgtgtatgtgtaatcttccgccgtgtaagacttggaacccatgtatattgacggcat
+ggcgtggctaagcaggtattgatcttcagtgtaaagcaaggtatgttctaatctaacaat
+gtaaagccggggattagccgccaaaggggtctaatgacatagagatgctctgaaatcgta
+ccaactataaaagcacgggatttgaaatatagcgacagatcttccgtattctgttagttg
+acatctgtgctgtctttaccgattgtgatttggctttagcagtcatttagtttcgttact
+cattgctcgtgcgatagttccaccgaatatggcacattcgttctttttttccattttact
+gcaaaccttttcaaaagctgatcgataccactgatgatggcattgattagtcgattggca
+actatgtcctgcttatatctccaattgcattgaatatagtaaaaaataaaggctcgcctt
+cccaatgggctacggagtacacgaaaaaatcgcaactcgtttaaccaagcgccgtaccta
+acatataagtgattgagacaaatagttctccagacgtattgagatatatgtctcctatag
+gcaagcgtttctaattgctgaccagaaattagaattaggttgttaatactatattcgacc
+attttattccacgaatgtgctattctactggtattgctccgtatgcgatatataaccaac
+acggaaagtcgtcgattgcaaagtggctccgtagaatcatttctggtcatttaccgggag
+cgcgcttgaacaatggatgcggtatctgccatattgttattgttaaaaagacttccgctt
+actatcgcttcgatcatcggaaaaatattaatgaggattgggtcgtataagaaaatcatc
+ttttcagttcgcagatttttgccaatttaaccggttatttcgtcagacttggtagtgtag
+ttacaagcatcacgattatatcagctacagaattaaactgtcctgactcgacggggcagt
+gtgtgagtattgcgctatatattcaaggtaacaggaggcatataggtcatagtacaagga
+taatgaggtttgctaactttaaaaattattgatttaacggttgattgaaaatctctgcaa
+gatgacgctagaacacctgatgttcaagtttgccgataataacatataagatgaattact
+gtctttagaccctcatgttaatccgctaacttagggcggaaacaatgttaggctatgcgg
+agtaagtactatattatgataccacatagaatttaacattcatatgatgtctaatacccg
+ttcccaaccttgcaaccgtcccgattaattaagcaattacggtcatcaatgggccaatcc
+tgtctcaaaaattatcatattcaaggttcagctattttggcaatgggtgagtaccgttct
+tagtgatttacgaacccataatctaggcgacttaatatacaagatttagagttacgtttt
+ccgggtagtacatattaacgaccatggatcgggtgaggtgttgtattagttatctgatct
+tgtcagtagctcccaatgtcccagaatattatgtttctactagagtgttcgtatactgga
+atttaaatattatgtaagactagacaaattttatggatacattaggccatcgtagaatat
+gatatagttgtaacgtccctctatagattttcggagggcaggtatattgcttaataaaga
+tgttcggaaatcagcggaaaggatttgtaattaactgatgcgcagcgcttaaataagttt
+agactattaagctatatgttcgacagcatgtagttttttttaccagaaagtgttatactg
+atgacccatggaggtagctcctcatgataaaaatattgttacttaagcattactattata
+gtgttcaaactagtaccgttgcatactttaagaatcagacatggcgtttcttatgcagac
+acacttttttagctgttgacgcccacctcacatccatagtaggtcaatcgcataagaaca
+atattctggactgttttattacccagaagaaagttttttctttccggttcgttaagacaa
+taaagatcatttcattcgttctcttaacgatgaactaaagtacttaaagtatccgcctct
+tgtttcgactagcgcatagtgtaataattaaggcaagataagaagaacaggaacgcgcac
+gtcggagataactctaatagtctctttattccgtttaatatagcccgtaattgcaccatg
+cgctacagtaacggccgccttcgcaaacctatttatgtaattccaagtttaggtatgcaa
+tggttggggcaatgtgaggggttttatcaagactttcgttgcttcgcggggggcgcaaag
+cagactttacagtagttaaccgaaaaccgcagggagtcgctctaagtgttaccaacccct
+cactactacgcgaaggtactcgattattccttgaatgggctgaaacatcgtgattagcgt
+cttatgattcaggctgatagaagaaaacttattttctatattccacgtatacaatcacac
+tcgtaactaaatagttcccagcgttgtaatgtcgctataataaataaaatacaaagaaaa
+ttcgtctgggtgcataagtacagttagtcgtctgtcacataaataatccgcagtcgatct
+cattacaggtattgttgttggtcaaccttcgcaaggtggtccaagtagcattgttgaaca
+gtaaaactaccgtcacacaaggaatatcataatagatgccatacacggttttacttgata
+tgtttacagtccttgagttgcaatcgtagtattgtttcatccggggtgtgtacgaagtaa
+tttagacaaggtgtgtagcggtcactaggtaaaatgacttaggatggatgagcatttagg
+tattctatgataacactaaccatcatgtttctaaaatcctcaggaaatttgtattatttt
+accaacctgtatttatagaaagtgcttttgacttaaagaagccgaagtgttcaaattaag
+gagtacctgattgaaagaatggggaattgtaatctgtaactcaattacaaataagccgtt
+ctaaggattaaggctttgtgtctaagcaactcacgtgaattcgaaattcatactcgatta
+acgactttaatactcttctgcgtatctacagactcatttaaattacggaatatgttttcg
+tttttggtttccagctcgcacgtacgcgtttacaaataaggacacctggtacaattggct
+ggagtacaatgttggtttttatttgctgattatcccgatccctgtgggcgttggcataac
+cgggttttcttcaagactactttcgtgttgcttatatacctggtaatatcggtgagtagc
+ttagggcttaatcacaatactaacaagttctctatggattggacagggcggcatccgttg
+actgaacgatctattaatccattccctgcactggataaacaagacccatttaaattgacc
+atagagatgttagcgtcatatttctgttcgtgatagggtacatatattataaacggatta
+tgagcagtggttttctagaaaagcattcatagttaggagtgtatcagatcataccactga
+accatagagcacaattctctactggctatacttcattcctttttgtccgggtggggacga
+aatttaaaggttctaacctagaacgcagagcgaattgatcaaggcgctggccaagtgaac
+ggttctaaatgttcttaatgagaattgcgtattttgactattgacagggcatcgtaaacc
+gctactcgacttggtatctgtaatctgtatgtagatagagtacgggcctataattcaaat
+tcagccaccgaagattcacaatcttcagacgtttgaaggaaagaggtttactggtatgtg
+gtgtcaagccccacccattctctgttatatccgagcattaatgtagtttcactgtactac
+ggtcacgccgtagagtcggcagggcaaatccaaaacaatttaggctgagaagtggcacta
+taatagtttagcctaagtcccttcgctaataactcaacaaagatgacgcaaaagtcggcg
+aatagattgcgttcgcgtaagggtatcttgaatactgatagctctcatggtaccaagaac
+tttcataacctctttatttaccaaacctgttctactagcgttagtgttttagtctgtagc
+cgacacaaaaaccgagaatggccggcgtaaccggcgcctgcaagctaacatgggatcaaa
+actattggcttaacgtttaatcgaatgagactagcactgtattactctttcgtttcggca
+gcggatcaataaggaggtgacggcatcactctcttatagtagatatcacttattctcaca
+acggaagtaggatcttccgtcctcattaaatttgcaactggctcaatgtaacactgtaat
+gttaacaaagtatgagctgaaggtcagagcagacgatgtagtaaggtccctcgaagctgc
+ttacagtatccttgaggctcaacgggctatgcggaaattccagacctcgagttacattat
+gaaacgtgtcattccatctcattaaatagttcgtgccctatcgccttgtaatataaacaa
+ccgtttttgtctattttcccaaggagaaggagagtagcagcttagtggcttgcctatatg
+gccccctaagtacgtactcggcacgcttagaagattgggctaccccgcactatatgttcc
+caaagtaggtaacctagatagtgtcgtatgaaattcaggtcatcgatgagagtataaaaa
+tatacaattttggcaggggttatacattgcgggcatgaagagtaacattggacatgaacg
+gacattcgaaccctgtgagtttaataccctatctccggatcattataaagtaaatatacg
+tcacttactctacgtgcgtttagacagtctttgaaactaaattggttatttttctttcat
+ctagatttgtctgtatctaactaaattatagttccacataaagctgattcaactgaagac
+ataaatataaactttctaacatagtagcgaggaaagagctatgcctagcatcggatcatg
+cgtccgcgagtagttcctggtagagttaaaagtttttccagaatctagaccgaacacagg
+gtagtgaacgaaagtgcgcggtgaacatacataataccgaacgtaaacaattccgttcgt
+attgttgctgtatctatatttcctacgtaaggctatttgatctataatatgaaaagtcac
+gtcgaaataaatcaggaagcgcttcgagtatgtacattcagatctccttagtatcatcaa
+attatagattttacggccacgaattattggtctagatgtcccaaaaataatttgatgtca
+gtagcgatcgtgcttcctcggagttgaggttggaagaagagtcattatgctataccaaga
+actctccatccagtacctagaaaggcaggtatgtaccgctcattaattttgcgatcttga
+cagatctgcatgcaaagtaacttgtaccagatggcttttataatagaaactaagtttccc
+gaataacggtgtacgataacagatttttaggtgtacagacgtctgactcaatgaacacac
+attgggacctgccccgggaggagtagtagataattaccttctccagcgcgggtcttttaa
+tatcacaacataaaaatactaattaatatcacacaccctcatcctcgatggagcctagca
+tcatacacgtttgatagacaacgccaattttactgtaatatgatattcgaatctagtatg
+tggacgctgtaccacattgtttaaaggagctccctttaccgacatgaacgaagcaagctt
+tgtacaagatacgaagaactcagtactggtaactataagagacaatttatacataaaagt
+gttaagaccattatataaaaagaggtatgaggtctttgtaactacaataatacattcatc
+gaacgatggagaataacagagttatttctgctgctcgagctctagttctgctaatttctc
+aatcttgatgccactcgtttgagtcttccattcgctcttaacgacgcgtacatccctctc
+tcctactcttacctatatcctattactggttaacctacatctccgggaaagacgtaggta
+aagtggtccacgattgtattcacttataacacctagtagtactatgtgttgctgagagtg
+aggacacacttactctacgagttcaagtccatatggacattacactttttcagcatctag
+gtgtcatgatgtattaacagccgttaggggctatttgattttatcgattgtcggcgtgtg
+tattttcaacaactaggtgctacaattcgtgaataggcatgaaaattcaagattgcagtt
+cctatcttgtataatctttcctttggacgagttgtaccatttcaactaacctgcaagtgg
+ggggtcatccatatgaagatttgccaaatacctggagaccctgaaaagtttatccagatt
+aataataacaaacaaacctaagcgaagaacgtcagctttaataaactatcactatcatag
+aaattcctgttaattgttcttccaaacgttgaatagactatcacgggtaatagattgaac
+acggagaacgtttatccggcttgtaaaatatcgtcgaatctgctgataactcaattatat
+tcgatggagaattcatatctaccgcttagcttttaaaaattaagtcagattattccgcca
+caatgagaaggcgcgagtgcactaatcaaatcacttaggattattacggacgtctgcatt
+acaatgctttggggtagggttatacaagcatatgattctttaggtctcttgatcgggcgt
+ttaccaccgtagcttaatgttggcatatccgtgatcctaatattctgttgtcagcgtgtg
+tataggaatgcacaacgcaaatctttaagctgacctgttcatgaaagacaggagacacga
+ggcaccacctcaattctatgcaaaactctaacatagcgtggcactatgagtacgtgtaac
+gacaaggtctcatactcgatcctaagataattctcgtctggaaggttttaatctttaact
+aagagtagaacttagtttattgacttttacaattaggatacggttcgcgactctaccaca
+gggcatcatacctggagctctgctatctcgtgaccaaagtggcagcacacatagggtcgg
+gtcctgcatctactgagcaatccctttaagcattcctagtttgagagccatttagatatt
+gctgtttaaaccgattaatggtttctattattataaagtgtaacgctcccattcgggaca
+ttgaaaattagcaataagacaatgtatgatattcggcgagtctcaacaacattatggtct
+accatgggacaaggggttgatatgatgaatccacaaaaaatagtcaaacacccatggttc
+gttaagtgagggtatccaggtgttataaggacgatctagaagtattcaggtacacggtgt
+tcagacatgctctaattgtcaggttgtttataatttaacgtatcgctctctattctaaat
+aatataaaattaaccgctcgtagggatgctttccagtaaaagatacactatcattaaggt
+tatgcaaatgtggcgatttgatttgaatcttagtacattcttaaacttaaatacgtatta
+tttaaagtaaatatattatctaaaccgcttttgtctatccacatttcgtcgaatcacgac
+ctcgttaatgcgacaatttacgaccctctttcatctaaagcgatcatctatttcttctga
+ttgatgtaatactgacccttactccgtacatacaaatgatggtaagcaagaatgactgac
+gctcctgtcacctttcgtggcaatcaactggcgctggtactgaagtagcttgaaagggat
+atggatgtgtatgccaggcttcattttgacaatttttctgtcctgctcagtgttgtctga
+agtcgtatcgtacacaataatgatgactctcattgtagatccaatcacgctttcctacgc
+taatgaaagttctagatagtgtaggtgttagacagaggttagcgcctacatccttacaca
+cacagtgttgaacggcaagcataatcgagtatcaatagctgtatgtatttgtttggaata
+tcatatttctcccgcctttgaacaatgatgccaaaatgtcctgccctagagttatgataa
+aataactgctgccctgtaacttaagtttacaaaccgatattcaatcgttgtgtcctatga
+aaatatttatatttgcaccaagaaaatcatctgtgcgatgaacaaaacacagtgatttat
+aaatacaaagagtacatttagttaccggattgcggcttgacatttattttacagaatttt
+atcggcaaaacacttcatatgaactatcgcttcacgataagtctatgatagactagcatt
+cgtagagaacaggaagagcaatcattatatatgaagtgttacagtgggtactacatatga
+gatcattaggtctatatccggccttcctcataagaccttggaaatatcttacatcagaga
+tatcaaaggaagtatgggcgaacccagaaaaagccccaaagaatagtaattcatcggacg
+taatagtctggttttaactaggggttattgatatttaagctaaaagagttccctgaacac
+tcgaaatgtataatctatcccaactaaaaaagtatacctctaattcagaaatgtcattga
+gattagactgatgtcaatacgctaggaggtaagacaagtagaagtttttgatttaggaat
+tgaaatgtaatacctccatcttaagttctatattttaaagttttatgcggacttcgagta
+agtgcacaaatgatggcataagtgcccagttacatgtttgcggccccgtatgagtaatga
+tctgtttatcaatctctagctactatcccacgaatgcactgatgccagtcatggcgctta
+cattagtcgacagaaatccgacgatacctatcacgcgtgaactgttctggttcttattca
+attcgaagtgatctcagatacattacggccatgcttgcccttcatgtctgctgagcagtt
+ttgttataggctgaatctcctctaagcgaaattgataggatttttggtggtcgatttagt
+ctgtacctgcttattaagattcaaaatgacctacttcttacgccgaaatgatagggatcg
+gctgaggaggataaatatacgctggtgcctggtatttatccagaacaagttgcctgtgta
+tcagatgaactctaatctccgagataaaaaacaggtacgtaaaataaaggccgcaaaggg
+ttacatctcaggatcgtggcgtatagtccaccattagttctgacttacttaatatagact
+gaccgagattgtagtatgtggatccaagcttgccatgtaaaacatgtcggttagcaaaac
+gtataggagcatgatcaaagaagagttaattaatagtactgcactataattgtcggcgga
+gtaccatgagctgttgcccaattcgatgtttattaacagcacgcataaaaaatccagact
+tttcaattagaattaactataaatggtccgcgaaccttaaatgatcggaaggacgggatc
+tgccgttgtatagaccccaactctatctaatttttataacacctctgtaatcaacaaatc
+ttattatgccatcattatgtcattcgccaagtaagtccagttcgagattctctggaccgt
+gcaatagtattgtcaaattatggtaatggaatccttcttctaacacccttagaaaagcca
+cgagaattgacaagttgggcgtgcttgtccaggagcaacataagtgccgtttctttttac
+gatgatagggattcttaaagcttttctctattctagatcccagttgccatcatcaatatc
+tcaattgatgctcattatatagttcttatttagtatgtccagatgtcactgaagatcctg
+cctagaaccgatattctcgacaggatcatcagttcgacggggcaaacgcacctatgcaca
+tccatcttgaccgtgaaacgaaaggaaagagtcagtaccgacccaatgtggaaaaaaact
+cctgtccacgatatgtaggcaagttttactgcctttaattagtagtcgattagtgtagtt
+tgatattatctaccttatagaatgtaaacagtaacccggccttaatggtttggcaggatt
+ctttgtaaaagttaataatgttcataaactttatcagaaaacctgaagtagtccgccttt
+cgcctgcgtaacgttgcagattaattcgttttacggagtggcttgcgtcttgttgtccga
+gtacacatattgctcctctcccccactcttctaggaaaatcaattatgctaacctgcaga
+ccttcttctttactatctttaatgcatgcccagtatgttcatagggtagacttgctatct
+attttgtataatctacgaatgatgcttggggcgcgacttttaacaattaagccgttgggt
+ataatttgagagggtgccacgatagtaagagatttccggcgtgagtaaggaaaatgataa
+taggattaagcaggcgtaatagctcaccctcctcagttctccaaccctgaaccggctaag
+tatgactgtgcagtattaattttgaatacatattgcagcccctaggatacattatagatg
+tctctttcttacccaaactcgcccgcaccaagaaagaatgtggattcgattgaggttaaa
+ttagccggaattacagacacagattcttgtttacaattgtgggaagaaaaccacctcaaa
+cgttgaaacctacattcacaaatggattacgttggggatgagaatcgattccggtcaaaa
+atcatgcccggagcaataaccaagaattcacagaggattaatacacttctccatgaagat
+aggactgcttgcactatccttatctttgtgtcttccttcaagcaccaatcgtttggggac
+aaccacaattatgccaagaaataacggaaggtgttccaaatctatgagtccgcggtttca
+tcgcaacgtttcactgtgggtatcatgactttggactttagatttgggtattctagagac
+tgtagaaagactgcaacaacaagacattcacagggcgaaacctaggaaaggggaccgcac
+gttgtgctagggatgtttccttaggaatccatacatgtaagaaagaatcaaccgtaatta
+tagtgttttcggccccttgaattacgtgcatgcctttgctaaaagacctctgggaaatag
+attgaatattctggacagcagcgaatcctgattatatctcaagcgaatatatgacccgca
+agaaggatttatactagaataagtctaagaaagggcattgggtcacttcttccactaaca
+cacttttatcagttttataccttgagagtcccatgcatttttatatatatttaactttcg
+ttgcgtaaaactttaaatatgatccgtgctctatctctaatctgaacaacggtatcacgt
+cgaacaaatctagtggctacgaatcgcgtcgctaagaacggtttcttctgctggcgttag
+ctacgtatcttctatgctaaaaatgtatagccccgcattagcagcaaaaccgggagaatc
+aaatacacatccgatgaaatcgtaacaaagataaaacaacgcgatttctatgtttgccaa
+agtgattaagttgtatcgtaggggtcagcgctgatgtcttttcagtttgggttttggatt
+taccagtcttttagtttcggtactatttgatcgggacattcgtccaaacatgatggctca
+ttcgttctttttttcaattttaatcaaaaccttgtatttacctgatacattaaactgagc
+atcgcatggaggtggagattcccatatatgtaatcatttgatatcctattccattctttt
+tagttataaataaacgctccactgcacaatgggagtaggacttcaccaataattagcatc
+tactgtaaacaagcgccgtaacgaaatgattactgattgagaaaaataggtctcaacaac
+ttttgacagatatgtatccgatacccaagcgttgctaattgcgcaaaagtaagtagaatt
+acggtcgtattacttgttgccaaatggttattactccaatgggctattctaatccgatgg
+atacgtaggagagagtgtacctacaccgaaactcgtagtgggcttagtggctacgtagaa
+gctgttcgggtcagttacagcgtgcgaccttgtaaaatcgatcacggtgatgaattattg
+ttattgtttaaaagaagtcccctgaatagcccttagataatacgaaaatttgttatgtcc
+agtcgctcgtatatcaaaagattcggttaagttcgcagagttttgccaagtttacaggtg
+atttactaacacttgggagggtacgtacaaccatcacctggttagcagagaatgaattat
+acggtcatgtcgcgaagggcaagtgtgtgagtattgaccgagttattaaacgtaaatgca
+ggcatttacgtcataggacatcgagtttgtcctttgcgaaatgttaaatttatggttttt
+tccgttgagtgataatagctgcaacatgaagatagtaaaactgaggttaaactttcacca
+tattaaattatatgttcaattacgcgatgtacaaactaatgttaatcagatttaggagcg
+cgcttaatatgggtccctatcccgactttgtacgagattttgataaaaaatagtattgta
+aattcatttgatggcgtagaaccgggcaaaaccttgaaaaaggacacatttaggatgcta
+tttccctaagaaagcggaaaatcctggctcaatatttataatagtaatggttaagattgt
+ggcccaatcgctgagtacccgtcttacgctttttccaacacataatcgacgagaatgtat
+ttaaatgtttgagacttacgttttccgcgtacttattattaaagtcattggagagggtgt
+cgtctgggtgtagttttctcatctgctcaggagctaaaaatgtaaatctattggttgttt
+ctaattctgtcgtccgtgtaggctatttaatttttatggtacacttgaatatgtttagcc
+ataatgtagccaatactacaatatcagatacttgtatacgacctatagacttttgccgac
+cgctcgtagagtgatttagaaagatgttcggatagcacagcaatcgtttgcgaatgtaag
+catgcgaagcgagtatttaactgttgactattttgctatatgttactctgaatgttgttt
+tttttaccagaatgtgttataatgatcaaccatgcacgttcctactaatcatataaattt
+tgttacgtaagcttttctatgatagtggtctaaagactacccttgcatactttaagatta
+agacatgcactttaggaggaactcacacgttttgagctgttctagcccacctataagcca
+ttcgtccgcaatcccataactacaatagtcggcaatcttttattacccagaactaacgtt
+tttatttcccggtacgtatcacattaatcttaatttaatgcgtgagagtaacgatgaacg
+aaagttatttatgtttaagccgcttcttgagaatacagattactgttagaatgaaggcat
+cataactagaacaccaacgcgcacctcgcacattactctaatagtagctttattcagttt
+aatatagacagtatttgaaccaggcgctaatgttaaggcccccttcgaaaaccttgttat
+gttattccatgtggtcggaggatttgcggggcgatagcgctgggcggggatcaacaattt
+cgttcatgcgagcgcccccataaccagtaggtacagttcggaaaagaaaaccccacgcac
+tcgctagaagtgttacaatcacatcacttcgtaccgaagggactactgtattccgtcttg
+gggatgtaacagactgattacagtcttatgatgaagcctcattcatctaaaattagttga
+tttattccacggatactatcacactcctatagaaagagttaccaccgtgggaagctagat
+ataataaataaaagacatacaatattagtatggctcatgatctacacttactcggatctc
+tctttttttataaccagtagatcgcattacacgtattgttgttccgcatcaggccctagg
+ggctcaaacttccatggtggataactaaaacgtccgtcactaaacgaagatattaataga
+tgaaatacacgggtttacttgatttctgttcagtcattcacgggaaatcctaggagtctt
+tcataacggcggtcttagtaggaatgtagtcaagctctgtagaggtctcgacggaattgg
+tatttcctggcatcacaatttacctagtattggagatcacttaaaataatgttgagataa
+taatcaggatatttctagtatgtgacaaacctctatttagtgattgtgattttcaattaa
+acaagacgtaggggtcaaattaacgactacatgttggaaagaaggccgaattgtaatatc
+taactcatgtactaagaagaagtgctttcgtttaaggctttctgtctaacattctaacgt
+caattcctatgtaatactactgtaaccaagttattactcggctgcgtagataaagtctca
+tgtaaatgacggtttatctgttacttttgggtttcaacctagctaggacgccggtactaa
+ttacgacacctgcgtatagtgcagggtgttcaatgtgcctttttatgtccggattataac
+catccctctcccacttggaatatcaccgggttcttaatgacttagttcgtcttccttatt
+ttccgggtaagatcgctgtggaccggacccattttgatctagtctaaaaaggtatatagc
+gtttcgtctggcccgcttacgttcactgaaacttagattaatcaatgcactgcactggat
+taacaagaacatgttatagtgtactgacacatgttagactaagaggtctgttcgggttag
+ccgacttatatgtttaaccgattttgacaactgggttgagagataacaatgaagagtgag
+gactgtagaagatcttaaaactgtaccatagtgctcaattcgctaatggcttgaattatt
+taattgttctaaccctggcgtcgaatttttttggttcgaaaatacttagcacagcgtatt
+gttcaacgagatgcacaactgtaccgttagaaagcggcttaatgacaaggcagtattgtg
+actattgacagggaatcctaaaaagctactcgaattggtatatggaagaggtatgtactg
+agaggtcgcgcctattagtcaaattctgccaaagaagagtcaaaagcttaactagtttga
+tggtatgaggtttaatgctaggtggtctataccaccaaaaagtatatgggatatcccaga
+atttatcgactttcaatcgtctaccgtcacgacgtacactaggcagccctaatccaaaac
+ttttgaggatgagtactgccactattatactgtaccatttgtaacttacattttatatct
+tcaaagaggtagatattgtcggccattactgtcacttacactaagggtagcttgattact
+gatacctctcatggtaaaaagtaatttaagaacctatttttttacataacctctgctact
+accgttagtgttttagtcggttcaagtcacaaaatccctgtagcgcacccctataagcag
+aaggaaaccttaatgcggataaaaacttttgccggaaccgttaatcctatgagaatacca
+ctcttggaatcggtcctttaggctgaggatatagaacgaggggaacgcatcaatctaggt
+taggtgagagaactttgtatcaaaacgcaagtaccatatgccgtcctcagtaaattgcca
+aatgcagaaatcttacactcttttcttaactaagtatgagagcaacctcactcctgaaca
+gcttgttacctaacgagaagaggctttaagtagcctggagcctcaaccggatatccggat
+ttgactctcatccacttacatgatgattacggtcattacatctcatgattttctgagtgc
+cctatagactgggaatttaatctaccctgtttctatttgttaacaaggagaaccactggt
+caagatgacgcgcttccatttatgccaccataagtaagttctcggaacccttacatgatt
+ggcctaccaacctatatatgtgaccaatgtacggtacatagagtgtggcctatcatattc
+aggtcatcgagctcagtatttaaagattatatggtcgctgggggtattcagtgcgcgatg
+gaagactaacattggaaatcaacggaattgacaacacgctcactttaataacctatctca
+ggataagtttaatgtaattagacggaactttctctaactccgtgtactaactctttgaaa
+ataatgtgggtatttttatttcatctagatttgtctgtatcgaaagaaagtattggtcca
+aataatcctcagtaaaatcaagtcataaatataaaatttagatcttaggacagaggaaag
+tgctttcccgagcataggatctggcctacgccagtagttcatgcttgtgttaaaagttgt
+tactgtttatagtccgtactcagggtagtgttcgatactcagcggggaactgacatatta
+cactaaggaatcaaggcccttcgtatgggtcatgtttatatatttaattacttacgctat
+ttgatcgagaatagctatagtaacgtcgtaagaatgcaggatgcgattcgagtttgtaaa
+ttcacagatactgtgtatcatattattatagatgttaaggcatagaattattggtattga
+tgtacaaaaaattatgggtgggcagtaccgataggcattacgagcagtgcagcttggaag
+aactggatgtatcctataactagtaagagccttaaaggtactacatacccagggatgtta
+ccatcattaatttggccatcttcaatcttcgcaatgcatactttcttctacaagatgcct
+tttagaagacaaaataagtgtcaacaataacgctgtaacttaactctgttgtacgtggaa
+tcaagtctcactaaagcaactaacattccgacatgcaaacgcaggactactagattatta
+aattcgccagcccgcctcgtttaatataacatcataaaaattctaagtaatatctcacac
+actaatccgccatcgtccatagcatcagtcacctgtcttacacaaacacatgtttaatcg
+atgttgttatgccaagctagtttcgcgaccatgtaactaattgtggaaagctgctacctt
+gaacgacatcaaccatcctacctttgtacaacagaccaacatctctgtactggtaaatag
+atctgaaaagttataaatataactgttttcacattgatagaaaaacagctatgtgctatt
+tgtatatactataataaattaagcgaaacatggagattaaaacagtgttttctcatcctc
+cacctcttgttctgctaatttataattcttgatgccactcgtgtgagtcgtccattcgat
+cgtaaagaacccgacataaatagatacgacgctgaacgagatcctatttctcctgaaaat
+tattagcacggtaactcctagggatagtggtactagttggtatgaacgtataaaaacttg
+tactactttctcgggatgtgagggagcaaactattactcgaccagtgcaacgcattatcg
+acagtaaaagttttcagctgatacctgtctggatggattatatgcaggtaggcgagagtg
+gattgtagcgatgctcggcgggggtattttaaaaatctaggtgataaaagtcctgtttag
+ccaggaaaagtcatcattgcactgcatatcgtcgattagctgtcatttcgtccactggta
+ccagttcaacgtacatcaaagtccgggcgcatccatatcaagttttgcaatagtactcca
+gaccatgaaatggttatccagattaataataacttaatatactttcactacatactcagc
+gggtattaaatttcactttatgtcaaaggactcttatgtggtcttcaaaaaggtctagag
+tctatcacgcctaattgtgtgaaaaccgagtaacttgatcagccttgtaaaatatagtag
+aatatgatgttaaatcatttatattccagggagattgaatagcttacgattagctggtat
+aatttaactcacatgattaagcaaatatctgtaggaccgagggaaagaataaaataaagt
+accatgagttcggaacgctgcattacatggcgttgggctagcctgatacaagaagatgag
+tatggagctctcttcatcgggacgtgacaaccctagcgtaatcttggcagatcccggagc
+agatgattatcgtctaacactgtctttaccaatgcacaacgcatagatttaacctgaact
+gttctggattcactcctgactacagcctacaactcatttctatgcataactcttaaagac
+agtcgcaatatcagtacctctatacacatcggatcagactagatcataagataagtctcc
+tctggatccttgtattctgttaagtacactacaaatttgtttagtgtctgggacaattac
+gataagggtcgcgactagaccacagggcatatgacctccaccgctcctagcgagtctcca
+atctgcaagcactcatacgctaggggcatgaatcgactgtcaatgcactgtaagatttac
+gagggtgagacccatttagatatgcctcgtttaaccgttttaggcttgataggatgagtt
+tgtcgatccatcaaattcccgacattcatattgtccaataagtatatctagcttattcgg
+actcgctaaactaaattatggtataaatgccgtcaaccggtgcatttgttcaatcaacaa
+attatagtcaatctcccatggggccttatggcagcgtatacagctggtataacgaccata
+tacaactatgaacggactagctgtgaactaagcagattattggatccttgtgtataattt
+taagtttcgatctatatgctatagtatagaaaatgttccgatcgtacgcttcctttacag
+ttaaacagtctatatcatgaagcttatccaaagctggacatttgatggcaatcttactta
+attatgaaacttaattacctattattgaaagtatttatatgatcgaataagatttgctct
+ataaacaggtcgtccattcacgacctagtgattgcgtaaattgaccaacctaggtaatct
+aaagcctgcatctatttcttatcattcatgttatactgacccgttctcagtacttaaaaa
+tgatcgtaagcaagaatcactcacgctcatgtcacatttagtcgaaataaactgccgatg
+ggaaggaagttccgtcattgcgatatcgatgtctatcccacgcgtcattttcaaattggt
+tatctacggataactgtgcgatgaactactataggtcaaaattatcttcaatctcattct
+agatcatataaagatgtccttcgcgattgatacgtctacagtgtgttggtgttacacaga
+gggtagcgactacttacttactaactctctcttgatccgcaagcataagccaggttaaag
+tgctctatctttttctgtggattataatagttataccgccttgcatctaggtgcccatta
+ggtaatgccctagtgttttcataaatttactcctgccatctaacgttactttaatttccc
+agattcaataggtctctcatttgaaaattgttatatgtcaacaaagaatataatagctga
+gtggaacaatacactgtgagggagtaatacatactctaaattttctttacggtttgcgcc
+tgcacagttttttttatctatgtgatccgcataaaaagtaatttcaacgttccattcaag
+ttaagtcttggtgacactagcattaggagagatcaccaagaccattatttatttagctag
+ggtttaagtcggttagaaatatcagataatgaggtctttatccggccttacgcagtagaa
+attggaaatttcgtaaagcactgagttcaatggaagtatggccgaacccacataatgcac
+aaatcaagtcgatttcttccgtccttttagtctcctgggaactacgggttattcatagtt
+aagctaaatcagttaacggaactagacaaatgtataatagttcccaaatatatatctata
+aatcttatgcagttagggaatgcagatttgaatcatggcaatacgctagctcggaactca
+actacaagtgttggatgtacgaattcaaaggtattacatccttatgatgttcttttttgg
+atacttttatgacgacttccacgaagtgaaattatgttcgaatatctgaacagttacttg
+gttgagcccaaggatgacgaatgttctgtttataattctcgtcataatataaatacaagc
+atatgaggccagtcatggagctttcatttggactaacatttccgtagagtcatatcacgc
+ctgtaatctgatccgtctttttctattcgaagtgttatcagatacatgacgcccttgcgt
+gacattcatggctcctgacatcgggtcttttaggctgaatctaatctaacccaatttgtt
+tggattgtgggtcctccattttgtctgttaatgcttattaagattaaaaatgtactacgt
+atttagacctaatgattgcgatacgctgtggaccattaatataagctgcgccaggggatt
+tttccagatcatctggcctgtgtatatgttcaaatctaatagccgagagaaattactccg
+acggaaaataaaggcagataagcgtttcagagcaccatcgtggcgtttagtcaaccttta
+gttcggaatttattaatatacaatctcactctttggacgagctccttaaaagatgccctt
+gtatatcatgtcccgtacctaaaagtataccagcatcatcaaagaacagttaaggaatac
+gactgctctataattgtccgaggagtaccttctcatctgccaatagtcgttgggttggaa
+aacaacgcattaatatgccacacttgtcaattagaagtttctataaaggggacgagtaac
+tgatttgagacctagcacggcagaggacgttcgtgtgacaacatctctttataagtttga
+gataaaatcgctaatctacaatgattatttgccaatcattatcgaatgcgcaaagtatct
+cctgttcgtgattctagcctaaggccattactatggtcaaattatgctaatcgaagcagt
+cttctaacacccttagaaaagcaaacactattgaatactgccgccgcattcgccagcacc
+aacataactgcacgtgcttttttccatgattggcattatgaaagatttgatctatgattc
+ttaccagttgcaatattcaatttagcatgtgttcctaattattgtgttattatggtctat
+ctcatcatgtaaatgaagatcatgacgtcaacacagattctagtcaggatcatcagttcc
+tcggggaaatcgcacctaggaacagccttatgcaaccgctaaacaaagcaatgaggatgt
+accgacaaaagctcgatttaaaagcctcgaaacgagatgtacgaatcgtttactgccttt
+tatgaggagtcgagtactgttggttcatatttgctacatgattgtatgtaataacgatcc
+cgccctttatcggttcgatcctttatggcgataagttatgaatcgtcagtatctttagat
+caaaaactcaactagtacccagttccccggaggaacggtcatgattaatgcgttttacgg
+tctcccgtccctcttcttgtcagaggaatcagtttcatccgatcccactcgatgattggt
+atagctatttgccgaaaagccacaacgtattcggtactatcttgtttgattcccctgtat
+cttaattcgcgacacttgatatcttttgtgtttaatcgacgaatcatcctgggggcgaca
+cttgttacaattatccagttgcgtttaatggctgtgggtcacaagattgttagacaggtc
+ccgcgtgtcgtaggaaattgataattggagtttgcaggacgaatagctcacccgcctaag
+tgatccaaccctcatcaggataactatcactgggcagtattatttttgatttcatatgcc
+accccctaggagactgtagtcatgtatctttcttacccaatctagcccgaaacaagaaag
+aatgtcgattccagtcaccttttattagaccgatttacacacaaagtgtcttggtttaaa
+ggctggcatgaatacatactcaaaagttgaaaacgacttgctctattcgattaccttcgc
+gatctcaatcgattacgctaaattttaatgcccgctgaaatatccaacatttaaaacagg
+attaattctctgatccatgaacttaggactcattgcacgtgacttatctttctctcttaa
+ttcatgctccaatacggtgggctaaaccacttttatcacatgaatgtacgcaacgtgtta
+ataagctatgagtacgcgggggcagcgaaacgggtcaatctgggtatcttctattgggac
+ggtacatttcggttttatagactatgtagttacacggcatcaacatgtaattaaaacggc
+gtaacctaggaaagccgaacgcaccttgggattgccatgtgtccggaggattacatacat
+ctaagaaacattctaaactatgtatagtcgtttacgacccttgtagtacgtgcatccctt
+ggcgaaaagtactctgggtattagagtgtatattatcgacagcaccgaatcctcatttta
+tagcttgacaatttatgacccgaaagaaccttttataagtctataagtatatctaacgca
+attgcggcactgagtccactaactatctttgagcagtgttatacagtgagacgccatgga
+aggggtttatatattttactgtcgttccctaaaaagttaattatcagacctgcgcgatct
+cgtagatgaacaacgcgatctagtcgaaaaatgcttgtggctaccattccagtcgagatc
+aaccgtttctgcggatcgcgttacattccttgcttatttgcgataaatcgatacaacccc
+attaccagaaaaacccggagaatcaattactctgcagatcttatactaaaaaagagatta
+caacccctgttctatgtgtcccaaagtgagtaacgtggagcgttggggtaagagcggagc
+gattttaactttcgcttttccattttccagtattgtactttacgttatatttgagcggca
+cattcgtcaaaacatgatccatatggactgaggtgtttaaatgttaatcaaataattgta
+ttttcagctgactttaaaatctgcagccattggaggtggagattccaatagatgtaagca
+ggtgatatcatatgcaattcttgtgacttattaagataccagacacggcacaatcgcagt
+agcacgtaaacaataatgacaatcgacggttaaattccgaacgtaagatatgtttacgga
+tgcactaaaataggtagcaacaacgtttctctgagatgtataagttaccaaacactggag
+aattccgctaaactaaggacaatttccgtcgtattaattgttgacaaatggttagtaata
+cattcgcagtggataatccgttgcatacctagcactgagtgtaaataaaaccaatcgact
+actggcatttcgggctaacgactagatgttagcctatgtgaaagcctcacacatgcttat
+tgccttcacggtgagcaatgtttcttattcgttattagaagtcacctgtagagacagtag
+agatgacctaaatttggtttgtccagtcccgaggtgatctaatgattaggttaacttaga
+acagtggtcaattggttaaagctgatttacgaacacttccgaggggtcgtaaaacattaa
+actggtgagaacagtatgatgtattcggtcatctagacaaccccatcgctgggagtttgg
+acagtgttatgattcgtaaatccaccatgtgtccgaattcgaaatcctgttgctccgggg
+agatagggttaatttaggcttttttacggtgtggcatattagctcaaacatcaacattct
+taaaatcagcgtaaacggtcaccagttgatatttgttctgctaggaagcgatgtacaaaa
+taagcttaataagatttaggtccgaccttaatttcggtccatagcacctctttctaagtg
+ttttgcttaaataattgtattgttattgattttctgcgagttgaacacggaaaataagtc
+aaaaaggacacttttaggttcatatgtaccgatgaatgcgcaatagaatcgagaaatttt
+tagattagtaatcgtgatgattgtggccaaatcccgcactaaacggctttcgctgtttcc
+aaaaaattttagtccactaggtatttaaatgttggacactgaacgtggaagccgtcgtat
+tatgaaactaatggcagaggggctcctctgcgtgtactttgagcagatgctatcgtcaga
+aaaaggtaaatcttttggttctttataattctggcgtccgtgtagcctagtgaatgtgtt
+tggttcaagtgaatttgtttagccagaatggaccaattacgtcattagctgttacgtcta
+tacgaaatatagactgtggacgacccatcgtagagtcatgtagttacatgtgaccttaga
+acaccaatcgtgtgcgattgtaagcaggacaacacagtattgtactggtcaattggttca
+tagatctgactatgaatcttcgtttttgtacaacaatctcggtgaagcttcaaaaagcct
+ccttcctaataatcagttaatttttcgtaaggttcctgttcgaggttagtcgtataaaga
+cgaaacggccttaatgtaacattaactattccactgtaggtggatctaacaaggttggac
+atgtgctaccaataagataagaatttcgtccgcaatacaatatctacttttgtagcctat
+cttggattaacaacaacttacgttggtatttcaccggacgtatcaaatgattctgatttt
+aatgactgagagtaaacatcaacgaatcttatgtatctttaagccgctgcttgacaagtc
+acattactgttagaatgaacgcttcattactacaaaacctaccaccaactcccacattaa
+tattatactagatgtttgaagtttatttgacaaaggttttcaaaaagcacagaatcgtta
+cgaacacgtacattaaattgttagggtattaattgtggtcggtgcatttccggccccata
+gcgctccgcggggagaaactatggccttcatgacagcccccccataacatctaggtaatg
+gtcggataactataaacaaccctctccagagaactgtgaaaataaaatctcttagtacac
+aagcgtatactggtttaagtcttgcccatcttaaagactcttttcactattttcttgatg
+cctcattcttctaatattaggtgattttttaatccgagaatataaaaagacgatagaaag
+tgttaaaacacggcgtagcgacatattttaaagaaatgaaatactttttgactatccctc
+atgatctaaacttacgcggagctatctttttgtataacatgtacagagaattaatccgat
+gcttcttccgattaaggacatagcgccgaaaacgtcatggcggcttatcgatatcgtaac
+gcactataccaagtgattaagtgatcaatgaatacgggtttcgggatttctgttaagtca
+tgcacggcaaatacttggagtcttgaataacgccgcgcgtagtacgaaggttctcaagct
+cgcgtgacgtatagaccgtattgctatttcctgccttctcaattgtccgaggattgctga
+taacttaaaataaggttgagtttttaataacgatttgtcgagtttgggaaaatcctcgtt
+tgtgtgtttgtcattttcaagttatcaagaactacgggtataatttacgacgtaatgttg
+gtttgatgcccgattgcgaatatcgtacgaatggtatttgtacaactgctttcctttatc
+gattgctcgagaacattataaagtctattactatggattaagactgtatacaagtgttta
+agcggagcccgtgataatctataaggttttggtacctttatctgttacttttgccttgaa
+acatacatacgtacacgggaatatttacctaaacgccgtatagtccagcctcgtatttgg
+gccgtgttttgtcagcattttaaactgaaagcgcccacttgcattataacccggtgcgga
+atctcttagtgactcgtcaggagtttacgcctttgagacctctcgacaggacccattttg
+atctagtcgttataggtagagtgcctttcctatcgcaccattaccttctagcaaacttag
+agtattcaatgaaatcatatcctgtttatactaaatgttataggctaatgacacagctga
+cactaagaggtctcttcgggttacccgaatgagttgtttatacgatgttgacaactcggg
+ggagtcatttcaatgaagactgaggactcttgatcagattaaaacgcttaatgactgata
+atttagattatgccgtgtattatttaagtgggcgaaccctcccctagaatgggtttcctg
+agaaaagtcttagaacacagtattctgaatccagatgcaaatcgctaacgttagtaagcg
+gctgtagctcttggcagtttggtcaatagtcaatcgcaatccgtttaaccgtctactatt
+cctagagcgaagagctatgttctgacacgtccccaatattaggcaaaggctccaaaagaa
+cagtcaattgattaactacgggcttggtttctccgtgaatccttgcgccgctataccaca
+taaaaggatagcggtgataccacaagtttgcgacgttaaagcgtcgaccctcaacaagta
+cactagcaaccccttagcaattaattttgtccatcactactgccaagagttgactggacc
+agttggaaatgacatttgatatattaatagagctacatattgtaccactttactgtcact
+tacactaaccctagcgtgattactcatacatatattcgtaaattctaagttatgatacta
+gttttgtaaatttaatcggcgaagacacgttctcttgtacgagcttcaactaaatatttc
+actgtagccaaccactttaaccagaaggataccttaatgccgatataatattgtccagga
+aacgttaatactttcacaagacaaagcttggaagaggtactttacgatcacctgatagat
+cgaccggaacgattctatataggtttggtctgagaaatttgtagctaaaaccatgttcca
+taggaactcctctgtaatgggcaaaatgcagatagcgttcaatcgttgcttaactatcta
+tcacagcatcctaactcctcaacagcttctttcctaaagacatcagcaggtaagttgacg
+gcacccgataacccagagcacgattggaatctaatactctgtatggatcattacgctaag
+taaatataatgattttctgactcaaagttacactgcgaattttatattaactggttctat
+ttgttaaataccacaacctctcgtcaacaggtcgcgatgcaagtgatccaaaaatatcta
+acttataccaaccattacttctggcgcagaaaaacatagatatctgaacaatcgaccgtt
+aagactgtctcgccgatcttaggaacctaatactgctcagtagttattgtttatttgggc
+catccccggattatgtcagccatggaacactaaaagtcctaatctaacctatggacaaaa
+agctcacttttataaaattgctcaccttatgttgattgttatttgtccgaaatgtctata
+actcagtgtactatctattggaaaattatggccggagttttattgaatatacttttgtat
+gttgagaaagaatgttgtcgtaataattatcagctggaaaatcatctaatatatattata
+ttgagatattacgacagacctaagtgctttcccgtcatgagcagatggactaacactctt
+ggtaatccttctcgttttagttggtaatgtttagtctaagtaatatcccgactcttactt
+actcagagcggaaatgactttttaaactaacgtttaaaggcacttagtatgcgtcagggt
+tatttttttaattacgtacccttgtgcagagagtttagctattcgatcctacttagtatg
+aaccatgagagtacaggttggtaattcacagagaaggtcgagaagattatttttgatgtt
+taccaatactatgaggcgtattcatcgaaataattttatggctgcgcacttcacatacgc
+aggaagaccactgcagcttgctagatctggatgtatcattgtacttctaagagcctgaaa
+ggtaatacattcccagcgagcgtaacagattgtatggggacatattcaatcttagcaatg
+cattcgttcttcgaaatcaggcatttttgatgtcataagttctgtcaactataaccctgg
+aactttaatctgttgttcgtcgaatcaaggatcaagaaagcttctaaaaggcccaaagca
+aaacccaccactacttcagttttaaattagaatcacaccctagggtattagataataatt
+aaatgtcttaggaagagatatcaaaagatgcagacatcctcaagtgaataagtctccggt
+ctttcacaaacacatggttaagcgatgtggttttgactagagacgttcgccaccatcgta
+atatttctggttacctgcgaacgtgaaccaaatcttacttcatacattgcttaaacagta
+caacttatctcttatcctatagagatctcaaaagtttgtatttttactggtttcaaattg
+agagaaaaactgcgttctccgatttctatattattgtttaaatgatgccaaacatccagt
+ttaaaacacggtgtgatcagccgactcagattcgtatcctatgttagaatgagtcatcaa
+actacggtcacgcgtacattacagagtaaactacacgaatgaaagagataagaagatgaa
+agagttaataggtctcctgttaattatgagaaccctaactactacggattggcctactag
+tgggttggaacggatataaaattcgactaagttcgcggcatgtcaggctcctaaatatga
+agagaactcggcatcgaattatccacagtaatagttggaacatgattcctctatgcatgg
+tgtatatccacgtacgccagtgtgcagtgtagccatgcgaccacgggcgttgtgaatatt
+cttcctcagaaaaggactgttgagcaaggaattggattctgtgaacggaatatagtcgag
+tagatggaatttcctacactgcgaaaaggtcatagtaaatcaaacgccgcgcgcagacat
+atcttcttggcaattagtactccactaaatcaattggttataaacttttagaatatcttt
+atataagttcactacttacgctgcgggtagtatatttaaagtgatgtcttaggaatctta
+tggcggcggaataaacggcttgactatagataccctaattctggcataaccctgtaacgt
+gtgaagcatgctttaatagacgactagatcagcttatagaatggatatgactgccacatt
+gaagagattaacattagcgggtataatgttacgaacttgtttaacaaaatagctctacca
+cacacgcatagtataatataaaggtcctggagttcgctacgagcctggaattgcagttcc
+cctaccctgagtaaacaagatcagtatggacctatcttctgacccacgtgtaaaaactac
+cgttagcggccctgagaacggtgaagttgattatcggctaacactcgctttaccaaggaa
+caaacaattgatggaacaggtaagcggctggattctatcctgaatacagcataataatat
+ttgctttcaatatatagttatgacactcccaatatcactaactctttacaaatcggatat
+gaagagtgaattagagatggagccgatcgttccttgtattctggtaagtactcgactaat
+gtgtgtagtctaggggtaaaggtccttaaccgtcgagtctagaactcacgcattatgaaa
+tcctccgagcatagagactctaaattcgccaagcaataagtcccgacgcgaaggatgaga
+agctcattgaactgtaacatttacgtcgggctcaccatgttacatatgcagcgggtaaaa
+gtttttgcctggagtggttgagtttcgcgatacataaaaggccccactttcatatggtca
+aatatctatatcgtgctttggacgactcgataaactaaagtagcctagtaatgccctaaa
+ccgctgcatttgtgcaataaaaaatttagagtatatataacttccggacgtatggctgcc
+ttgaatcctcggatatcgtccttatacaacgatgaacggtatagctcggaactatgcaga
+ttaggcgatccttgggttgaatttttagtttccatagatatgagttagttttgatatggt
+taccatacgtccctgcattgaaacttaatctgtatattgattgatccttagcaatagcgg
+cacatttctgggcaatatgacttaattaggttacggtttttactatgatggatacgtttt
+atatgatagaataacagttgctatttaaacaggtactacattcaactaatactgtttcac
+tattgtgtccaacatagggaatatattgcctgaatagatgtattatcaggcatcttttac
+gctccaggtagaactaattaaaaatgatccttagaaactttcaagcaacataagctaaaa
+gttacgccaattataagccacatcggtaggatcttcaggcattcccatatccttctctat
+caatcccgtctgttgctaattggttatctaagcatatcgcggcgagcatctacgataggt
+ataaagttgctgctatctaattcgtcataatatatacatggaattacagattcatacgtc
+ttcagtctcgtggtgtttctaagagcggacccaagaattacgtaatatctctctcgtgtt
+acccaagaagttgacacgtgattgtcagctatctttttctggcgatgttaatagttataa
+acaattgcatatagctgcaaattagctaatcaaatactcgtttcttaaatgttatcagca
+aagctttaggttctgtaatttcactgtgtaaagagggcgctaagttcaaaattggttttt
+ggcaacaaacaatttaatagcgcagtgcaaaaataatatctcagggtgtaattatttctc
+taattggtctttacggttggaccaggcaatgggttttttatctatgtgataccaattaaa
+agtaatttcaaagtgacattaaacttaagtattgctgtcaagaccattacgacacttcac
+caacacatttatgtattgtgctacgcggtatggcccgtagtaatttctgatattgaccgc
+gttatcagcaagtacgctgtacaaatgccaaatttagtaaagctctgtgtgcattccaag
+gtgcccacatcacacattatcaacatatcatgtcgttgtattacgtccttttactagcct
+gggaaataccggtgattcagagtgaacataaatctctgaaagctactagacaaagctagt
+atagttaaaatatatatttcttttaatattaggatctttgcgattgcacatttcaagcat
+cgcattaacctacctccgtactcttctacaacggttgcatgtacgatttctatgcgatga
+aatacttatgttcttagtttggggttactttgttcacctagtcctcgaacgcaaattagc
+ttcgaatatctgaaaagtgtatgcgggcaccaaaacgatctcgattcttaggtttataat
+tatagtcagaagataaatacatgcatatctggacactcttccacatgtcatgtcgactaa
+ctttgaactacagtcatatatagactgttatctgatccgtatgtgtctattactactctt
+atctgagaaaggacccaatggagtcacagtaagcgatcatgtcatcggggctttttccct
+gattataagattacactattgctgtgcttggggcctcctactttttctatcttaatcatt
+ttgtacattaaaaagctaagaagtaggtacaacttatctttcccatacgagctggaccat
+taatttaacagccgcaaggcgagttttaatgttaatctggaagggctttatgttctaagc
+ttttagcactgagaaattaatccgtaggaaattaatcccacataacccggtaagagaacc
+ttacgccccgttactaataatgttctgcgcaatgtaggaagtgacaagctcactcttgcg
+acgagctccttaatacaggccctgcgttatattcgaccgtacctataactagaccaccat
+cttaaatgtacagttatggttttcgacgcatagagtatgggaccacctcgaaatgctcag
+ctgcaaattgtactgggggtggttatcaaacatttaatatgaatctatggtaaagtacta
+gtttatagatagccgaacactaaaggtttgcagaccttcctcccctgaggaacttcgtgt
+cacaaattagattgagaaggtggtgataaaatcgcgtatctacaatgatttggtgcaaat
+atttatcgattgcccaatcgttctactcgtactctttatagcctaacgccttttcttggc
+gctaattagcctaatccaagaaggagtctaacaaaattacttaaccatactcttgtctat
+tcggcccacgcatgcgcaagctcaaaaagttctcaacgggcgtttttacttgagtcccag
+gaggtaacattggatctatgagtcttaacagtggaaatatgatttttagattgtgttcag
+atttattgtcttattttggtctatctcatcagctatagctacataatgacgtcttaactg
+tttcgactaaccttcagatctgactaccccaaatacaacatagcaaaagaatgatgctaa
+cgcttaactatcctttcacgatcttaacaaaaaagctccatttaaaagaatcgaaaacag
+atctaccattcgtggaatcaatttttggacgagtactggtcgggtcgtgcttatttgcta
+caggattgtttcgtataacgttcaagcactttagcggttccatccttgatggcgttaact
+gatgatgcgtaagtttatggtgatctaaaactctactacgaaccaggtcccagcacgaaa
+cgtcatctttaatgagtttttaggtctccaggcactaggctgcgaagtggaatatgtgtc
+atcagagacaaatagatgattcctatagctttttgcagttaagccactaagtaggcggtt
+ctatagggtttcattcaaatcgatcgtaattcccgactctgcatagcgtgggtcttgtat
+agaccattcttcaggcccgccacaatggtttcaagtttcaacttccgtttattggctgtc
+cctcaatagagtcgttctcagggcacgactctcgttcgttattcataagtccagtttgat
+ccacgaatacagaacacgcatatctgataataaaagcttaacgataactttcacgcgcat
+ggtttatttttgatttattaggcaaccaaataccagaatgtagtcagcgatatgtagtaa
+aatttagacaaacataaaacaaagtatcgccattacagtctcctgttaggagaacctttt
+tatcaatatgtgtaggcgtgtattggcgcccttgatttaataataattacggctaaacgt
+attgatattttccaggaactgccccatctcatgagatgaccctaaattttattcacacct
+catttttaattcttttatatcacgattatttatctgagcaagcatctttgcaagcattca
+tagtgacggtgctgtctctatgaatgcatgctaatatacggtgcgctaaacatattggtt
+caattcaatgtaagctacctcggaatttgcttgcactaagacggggaagccaaaacggta
+aatcgccgtatatgctagtgccaagggacttgtccgttggagtcactatggagttacaag
+cattataaatctaaggaaatcgcagtatcagtccttaccccaaagatacttcgcattccc
+tggggtacggaccatgaaatacttctttcatacatgataaacgatggagactcggttacc
+accctggtagttactccatcaattggagttaactaagatcgctattacaggctttattag
+ccaatcatcacaagcctctttttagagattcacaagttagcaaaccaaagttcctttgat
+aagtctttaacgagatctatcccaattccggctaggagtaaaatttatatatttgagatc
+ggggttaaagtcacacgcaatgcaaggggtttttatatggtaatgtccttccctaattag
+gtaattttcagacctccgagagagagtagatcaacaacgcgttatactcctaaaatgctt
+gtcgataacatgacactacagatcatccctggatgagcatcgactttcattacttgatta
+gttcagttaattcgtttcaaaccattttcaacaaaatcccccagtagatatgtatatgca
+catcttagactaaataacagttttcataccctgggatttgtgtcactatctcaggaacgt
+cgagacgtcccctatcaccgcagcgagggtaactggccctgttccattgtaatcgatggg
+acgggacgttatattgcagacccaaagtagtaataaattcagccatatggacggaggggg
+ggaattgttaagaatataattcgattttcagctgaatgtaaaagctccagccattcctcc
+tccacttgacattagttcgaagaaggtctgagaattggaattgcttgtgacgttttttgt
+ttccagacaaggaaatagcccagtaccaagtataatattatgacaatagaagcttaaatt
+cacaacgtaacatatctgttagcatgctctaatagaccgagaaaataagtgtctatgtgt
+gcgagaactgtcaattcacggcagtagtcacctaatctaacgtctagttcccgactatga
+agtcttcacaaatggttagtaataatttcccagtggagtagaagtggcataacgtgcact
+ctctgttaataatacctttagactactcccatttcgccagaacgtcttgatggtacccta
+tgggaaacactcacacatgcttattgcctgcaacctcagcaatgtgtcgtatgcggtatt
+tctacgaacagctagtgaaaggactgatgacctaattttggtttctcaagtccagacgtg
+atattttgatgaccgtatctgacatctctgggcaattcggttaacctctggtacgaaata
+gtccgtcgcgtaggtaaaaatgataatgctgtcatcactatcatgttttagctaagctac
+actaccccatcgctcgcacgtggcaaagtgtgaggattccgatatcatccatgtgtacga
+attcctaatactcttgctcagggcacttagggttattgtagcctgtgttaccgtctcgca
+tattagatcattaatcaacagtcttataatcaccgtaatcggtaaacagttgttatttgt
+tctgataggtagacagctaataaagatgctgttgaacagttacgtcccacctttattgcc
+ctacagtgaaactagttcttactctgttgctgtaatatgtctagggttattgatttgctg
+ccacttcaaaacggaaattaagtcattaacgaaaatggttccttcataggtaaagatcaa
+tccccaattgaagccagaaattttgagatgtcgattcctgatcattcgccaaatttacag
+ctcgtaaacgagttccatgtgtaaaaaaatgttgagtccactagcttgtttattctggct
+caaggtacgtggaacacgtagtattttgatactaatgccagacccgctacgatccctgta
+ctgtgagcagagccgatcctcagaaatagctaaatcttgtgcttcgttagaagtctcgac
+tacgtgtagcctagtgtttgtgttgcgttatagtctatttgtggacacagtatggtcaaa
+tgacgtcttttgatctgacggcgttaacaaagatactctgggcaacacacatacttctct
+catgttgtttcttcggacctttcataacctttcctggcacatggttagctgcacatcaca
+ggattgtaagggtctagtggttcagtgagcggaatatcattcgtcggtggtgttaatcta
+tctcggtgtagcttataaatgcatccgtaagaatattatgtttatttgtcggtacgttca
+tggtagtggtgtcgccgatttagacgtaaaggcatgtatggatcttgatctatgcaaagg
+taggtccatctatatacgttgcacagcggatacaaataagataagaatttactaacattt
+aaattttcttattgtcgagcatagattggaggaaaaacttatttacttggtatttaaacg
+gaagtttctaatgtttatgattggatgcacggacagtttactgcttactttcttaggttt
+cttgaacaacaggatgcactagtaacatgtctcgttcatgcttccattaagttcttctta
+aacttacacaaactacctaatttagagttgacgagatggttgaacgtgttgtgacaaacg
+tttgcaaaatgcacagtatcgttaccaaaaagtacatttaagtgtgtgcgtaggaattct
+gctacgtccattgcaggccacattcacatcccacccctgaatatatggactgaatcacac
+acaccaaatttcatctaccttatcgtagcataactattaacaaacatatacagacttcgc
+ggtaaataaaatatattagtacacaaccgtatactggttgaactattgcccagctttaag
+acgcttttaactaggtgcttgatcaagaagtattattatatgacggcagtgtgtaatacc
+tgaatagatatagacgttagattgtctgaaaacacgccgtagagacatttttgttagata
+tgtatttctttttgacgagccagcatcttagtatctgaagacgagctatatgtttgtaga
+aaatcgactgacattgtatacgaggcggcgtaagattaaccaaattccccagaattagta
+atggcgccttatcgatttactaacgatatataacttgtgatgttgtctgcaatgtatacc
+cgtgtaggctgtgctcttatcgaaggaaacgcattgaagtccaggctggatgaaaccacc
+gcgtacttccatgcgtctatacatagcgtcaccgatactacgttttgctatgtaatccat
+tctaatgggtaagaggattcctcttatagtaaaatatgcttgactttttaagaaccattg
+ggagtggttggcaaaataatagtgggtgtctttctcagtgtatagttttctacaactacc
+cctattaggttacaagtaatctggctttcttgccacttggcgatgatagttagattcgta
+tttctacaacgcagttactgtatccatggcgcgagataattagatacgatttgaatttgg
+atgtagactcgttactactgttgtagaccagcacgtgagtatctagatgggtttgctacc
+ttgttagcggacttttgccgggaaaaagacatacgtacaaccgtatattttactataagc
+agtattggccaccctcgtattgcggcagggtgtgctcacctggttaaaatgaaagagaaa
+aattccattttaaaacccggaggaatctattactgacgaggaaggtgtttaacccgttga
+gacatctcctaacgtaaaaggttcatattctagttattccgagagtcactttcctatcca
+aacatgaactgatagcataatgacaggttgaatggaaagcatatcctgtttattctaaat
+ctgtttcgctaatcaatatgctgtcacgaactcggagcttacccttacaactatgtgttc
+tgtttaccaggtgctaatatcccggcactcttttcatgcatgtcgctcctagcgtcatct
+gatttaatagcttaatgtctcatattttacagtagccagtgtagtatggaaggcggcgaa
+ccagcccctacattgggtttcctgacataagtattacatatcacttgtctgattacacag
+caaaatcgctaaccttactttgcgcatgtagctattggaactttgggctagtgtctatcc
+cattaagtttaacagtagactagtccgtgagcgatcaccgagcttatgtctcgtacccaa
+gttttggatttggatcaaaaactactcgatattcatgatctacgggcttcctttctccgg
+gtatcattgcgccgagattaaaaataaaacgatagcgctgtgaaaacatgtttgacacgg
+gatagcgtagaaactaaacaacgaatagaccatccaatttgaattttattgggtccagca
+cttcgccatagtgttgaatggtaaagttcgaaaggaaatttgttatattaattctgctac
+attttcgaccacttgtatctcaaggacaatatcccttgaggcttttagcagaaagagatg
+ccgtaattctaagggatgataataggttgggaaatttaagagcagtagtaacggtcgcgg
+gttcgaccttaaactatatatttaaatctagccaaacaagttaacaacaaccataaagtt
+atgaccttattatattggcaagcttaacgttttaattgctctagtaatagagtggtagag
+gtaagggaccatcacctgattcttcctccgcaaccattatatagacgtgtcgtctgacaa
+atttcgagataaaacattcgtccttagcaacgaatatcgaatggcaattagccacattga
+gttaaatagttgaggatatttcttgcacagaatcagatctaatctaatgattcgttacta
+aacacttcaccaggtatcgtgaaggctcaagattacccagagaacctttgcaatataaga
+atatgtatgcagcattaccctaagtaattatattctttttctgactcaaagtgacaagcc
+ctagtgtatattaaatcggtatatttgggaaattcctcaaactatcctaatcaggtagcc
+atgaaagtgatcaaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaa
+tagattgcgcaaaattcgtaccttaagtctctcgccaagatattaggatcctattactca
+tatcgtgtttttctttattgccgccatccccggagtatctcacccatccttctcttaaag
+gcctaatattacctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgat
+tcttatgtgtaccatatgtatagtaatcacgcgactatatagtgctttagtatcgcccgt
+gggtgagtgaatattctgggctagcgtgagatagtttcttgtcctaatatttttcagatc
+gaatagcttctatttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtc
+atgaccagatccacgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtc
+taacttatatcccgtcgcttactttctaacaccccttatgtatttttaaaattacgttta
+ttcgaacgtacttggcggaagcgttattttttgaagtaagttacattgggcagactcttg
+acattttcgatacgactttctttcatccatcacaggactcgttcgtattgatatcagaag
+ctcgtgatgattagttgtcttctttaccaatactttgaggcctattctgcgaaatttttg
+ttgccctgcgaacttcacataccaaggaacacctcgcaacatgccttcatatccatcgtt
+cattgtaattcttacacaatgaatcctaagtaattacatccctgcgtaaaagatggtagg
+ggcactgaggatatattaccaagcatttagttatgagtaatcagcaatgtttcttgtatt
+aagttctctaaaatagttacatcgtaatgttatctcgggttccgcgaataaacgagatag
+attcattatatatggccctaagcaaaaacctcctcgtattctgttggtaattagaatcac
+acaatacgggttgagatattaattatttgtagtacgaagagatataaaaagatgaacaat
+tactcaagtcaagatgtatacgggatttataataaaaatcgggtagagatctgctttgca
+attcagacgtgccactaaatcgtaatatgtcgcgttacatcagaaagggtaactattatt
+aattaataaagggcttaatcactacatattagatcttatccgatagtcttatctattcgt
+tgtatttttaagcggttctaattcagtcattatatcagtgctccgagttctttattattg
+ttttaaggatgacaaaatgcctcttgttataacgctgggagaagcagactaagagtcgga
+gcagttggtagaatgaggctgcaaaagacggtctcgacgaatggacagactttactaaac
+caatgaaagacagaagtagagcaaagtctgaagtggtatcagcttaattatgacaaccct
+taatacttccctttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttaga
+ggcatctctcgctcataaataggtagactactcgcaatccaatgtgactatgtaatactg
+ggaacatcagtccgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacat
+gagaccacccccgtggggattattagtccgcagtaatcgactcttgacaatccttttcga
+ttatgtcatagcaatttacgacagttcagcgaagtgactactcggcgaaatggtattact
+aaagcattcgaacccacatgaatgtgattcttggcaatttctaatccactaaagcttttc
+cgttgaatctggttgtagatatttatataagttcactaattaagatcacggtagtatatt
+gatagtgatgtctttgcaagaggttggccgaggaatttacggattctctattgatacaat
+ttgtctggcttataactcttaaggctgaaccaggcgtttttagacgacttgatcagctgt
+tagaatggtttggactccctctttcatgtcagtaacatttcagccgttattgttacgata
+tgcttgaacaatattgatctaccacacacccatagtatattttataggtcatgctgttac
+ctacgagcatggtattccacttcccattcaatgagtattcaacatcactagcctcagaga
+tgatgacccacctctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagac
+gatatcaagcgctttaaattgcatataacatttgagggtaaagctaagcggatgctttat
+ataatcaatactcaataataagatttgattgcattttagagttatgacacgacatagttc
+actaacgagttactattcccagatctagactgaagtactgatcgagacgatccttacgtc
+gatgatcgttagttatcgacttaggtcgggtctctagcggtattggtacttaaccggaca
+ctatactaataacccatgatcaaagcataacagaatacagacgataatttcgccaacata
+tatgtacagaccccaagcatgagaagctcattgaaagctatcattgaagtcccgctcaca
+atgtgtcttttccagacggtttaactggttcccgggagtcctggagtttcgacttacata
+aatggaaacaatgtattttgctaatttatctatagcgtcatttggaccaatacagaatat
+tatgttgcctagtaatccactataacccgcaagtgctgatagaaaatttttagacgattt
+ataaatgccccaagtatccctcccgtgaatcctccgttatactaattagtattcgttcat
+acgtataccgcgcatatatgaacatttggcgataaggcgcgtgaattgttacgtgacaga
+gatagcagtttcttgtgatatggttaacagacgtacatgaagggaaactttatatctata
+gtgatgcttccgtagaaataccgccactggtctgccaatgatgaagtatgtagctttagg
+tttgtactatgaggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgac
+gaatttatactaatacgctttcactattggctacaaaatagggaagagtttcaatcatga
+gagggagtatatggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcat
+tcttgaaagatacataagcgataagttacgacaattataagcaacatccctaccttcgta
+acgatttcactgttactgcgcttgaaatacactatggggctattggcggagagaagcaga
+tcgcgccgagcatatacgagacctataatgttgatgatagagaaggcgtctgaattgata
+catcgaagtacactttctttcgtagtatctctcgtcctctttctatctccggacacaaga
+attaagttatatatatagagtcttaccaatcatgttgaatcctgattctcagagttcttt
+ggcgggccttgtgatgactgagaaacaatgcaatattgctccaaatttcctaagcaaatt
+ctcggttatgttatgttatcagcaaagcgttacgttatgttatttaaatctggaatgacg
+gagcgaagttcttatgtcggtgtgggaataattcttttgaagacagcactccttaaataa
+tatcgctccgtgtttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtgg
+tgtatatatcggataacaattaatacgatgttcatagtgacagtatactgatcgagtcct
+ctaaagtcaattacctcacttaacaatctcattgatgttgtgtcattcccggtatcgccc
+gtagtatgtgctctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgtta
+ggtaagatctctctgaattccttcgtgccaacttaaaacattatcaaaatttcttctact
+tggattaactacttttacgagcatggcaaattcccctgtggaagacggttcattattatc
+ggaaaccttatagaaattgcgtgttgactgaaattagatttttattgtaagagttgcatc
+tttgcgattcctctggtctagcttccaatgaacagtcctcccttctattcgacatcgggt
+ccttcgtacatgtctttgcgatgtaataattaggttcggagtgtggccttaatgggtgca
+actaggaatacaacgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaac
+gtgctccttgcttagcttgtgaatgagactcagtagttaaataaatccatatctgcaatc
+gattccacaggtattgtccactatctttgaactactctaagagatacaagcttagctgag
+accgaggtgtatatgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcga
+gaagctaataccggctgtttccagctttataagattaaaatttggctgtcctggcggcct
+cagaattgttctatcgtaatcagttggttcattaattagctaagtacgaggtacaactta
+tctgtcccagaacagctccacaagtttttttacagccgaaacccctgtgtgaatcttaat
+atccaagcgcgttatctgattagagtttacaactcagtattttatcagtacgttttgttt
+ccaacattacccggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgta
+ggaagtgaaaagataaatattgcctacacatactgaattcaggcaatgcgttttattcga
+aaggtcatataactagaaaacatgatgaattcttatcggatccttttactagcatagtgt
+tggcgaacacctcgtaatgctcagcggcaaattggactgcgggtccttatcatacatttt
+ttttcaatataggcgattggtctaggttagtgattccccaacacttaaggtttgctgaca
+ttcataccctcagcaacttcctctcaaaaattagagtgagttggtggtcttataagaccg
+ttgattatttgaggtggtcaaatgatggtgcgatgcacaaatcgttataatcgtactctg
+tagacaataacccattgtagtgccgattttgtgcataatacaagaaggaggatataaaaa
+tgacttttcaataatattggctattagcaacaagaaggagaatcctcattaagttagcaa
+ccgcagggggtactgcagtccaaggaggtttcattggagagagcagtatgaaaacggcaa
+ttatgattgtgagattcgctgaagattgtgtctctgattttcctagatagaataagctat
+agctacttaatcaactcttaactgtggagactatcctgatgatctgaataccccatttac
+aaaattccatatcaatgaggctaacgcttaaatttcatttctccatcgtaacaaaaatca
+gcctttttatacaagacaaaacactgcttccattacgggtagcaatggttgctcgactac
+tggtagcgtcgtgatgtggtgataaagctgtcttgcgtttatacttaaacaaattttgac
+ctgacataatggagcgacttatcggatgttgccgatctttagggtcatctattaagctta
+tacgaaaaagggacaagcacgttacgtaatctggtaggactgggtacctagaaacgcaag
+aggaggcgaactccaatatctgtaagaacagaaaaatacaggagtccttttcatttttca
+agttaacaatataagtaggagcttagagaggcttgcatgaaaatcgttaggaattacaga
+ataggcagagagtggggcgtgtagactacattcttcaggccccacaatatgggttatagg
+ttaaactgcactttttgcgatctcccgaaatactgtcgttctctgcgaaccacgctcgtt
+ccttttgctgtagtccacgttcatccaactattcagataaacaagatcgcagaattaaag
+cttaaccatatcttgatagcccatcgtgtatggggcatgtatgtgcaaacaaaagacctc
+aatcttgtctgcgagagggaggaaaatttagacaaacataattcattctttcgactggac
+acgctaaggtttggacaaactttgtatctatatctggaggcctgtattccagcccttctt
+ttaataagatttacggcttaaactatggatatttgccaggaaatgacactgctattgaca
+ggaacataattttgattcaaacctcattgttaattattttatatctcctgtttttatatc
+agaatgcttctgtcctagaaggcatactcaaggtgagggctcgaggaatgaatcataata
+gaccggcccctattaatattggttcaattctttcttacataacgcggaatttgattgcac
+gaacaccgggaacacataaccgtatagcgcccgttatgctagtgcctagcgactgggacc
+gtggagtctatatcgtctttctaccattattaatctaaggatataccactttaagtcctt
+tcaactaacataaggcgcattccatgcgctaaggaccttgaatttattatttcttacatg
+ataaaagatcgagtcgacgggaacaaaaggctacgtactcaataaagtgcagtttactaa
+gagccctttttctggcttgtggagactatcataacatgaagatgttttgacattcaatag
+tttgcaaaacaaacttactttgtgtagtattgaacgagatctttccaattgccccatagc
+aggaatagttatatattgcagatcgcggtgtaacgcactccaaatccatcgcggtgtgtg
+agggtaagcgacttaaagaattacggtttttgatcaaagcacagtgagagttgagcaaat
+tacagttatacgacttaattcagtctccataaattgaaacgacacttcttaacgggagga
+ccagacacgttcattaagtgaggagtgcactttttgactttaaaaacatggtaatcaatt
+taaaccacttgatatgtatatgaacagatttgaagttatttctgttttaatacactggga
+gttctgtcaatatcgcaggaaccgcctgacgtcccctatcacacctcagagggtaaaggg
+acaggggaaagggtaatcgaggggtagggaacgtagttggcacacccaatggacgaataa
+atgctgccatatccacggagggcgggattgcggttgattttaaggcgatggtaacctgaa
+tgtaatagatcatcaaatgcctcctccactggaaattactgcgtacatccgctgagaatt
+gcaatggagtgtctcggtttttctttaaacaaaaccaaattgacaacttcatagtataat
+ttttgcacattacaagcgttaattaacaaacttactttgctgttagctgcctatatttgt
+ccgacaatataactggatatctctgcgagaactgtaaattaacggcacttggaacataat
+agttcctattggtaacgacgttgtaggcggcaattatccggtggaagaattgacaactgc
+agttgaactgcatgaaagtcaaatctctcgtaagtataactttagaagactccaaggtac
+ccagaacctcttcagcggacacgatcgctatcaatcaataaggattattcactgaaaccg
+ctcatatctggaggtggacgtttttcttcgaaaagcttgtcaaaggactcatcaaatttt
+tggccgtgctaatcgacacacctgttattttcatgaccggataggacatctcgcggaaat
+tcgggtaacagctgggtagatataggacctcccctacgtattaatgataagcctgtcata
+actagcttggtttaccgaagagacaataaacattcgagcgctcgtgccaaactcggtgca
+ttacgtttgaataaatcggtaacatgtactattactctgcctaacggcacttacccgttt
+gggtccatggggtaaccgctcgatgttgacagaattatgctaaagtcgtttaagatcccg
+attaccgaaaatctggttatgtctgagcattcgtacactgcgtattaagatcaggttgaa
+caggttcctaacaaattttgtgacctaaagtgaaactaggtcgtactctgggcatgtttt
+atgtcgtggcgtatgcatgtgctgacacttctaaaaccaaattaaggctttatccaatat
+gggtccttaagtgctaaacatcattcacaatttcaagacagattgttggtcttgtcgatt
+ccgcatctgtcgccaaattgacacatcgtaaaccaggtacatcggtaattatatgttgac
+taaactaccgtgtgtattctggctctaggtacggcgaacaagtacgatgtgcttaagaag
+ccctcaccccagacgagcccgcgtaggtcacatcagcagatcctaagtaattccgtttta
+ttgtcctgagggagtaggatcgacgaactctacaagtcgctttgtcgtgccttataggct
+atttcgggtcaatgtagcgtcaaatgaactattgtcatctgtacgagttaactaagtgtc
+tatcgccaactaaaagacgtctcgatggttctttatgcggacctgtcatatcattgactg
+gcacttgcttacatccaaataacacgtttgttagcggatagtcgttaagtgtgcgcaaga
+tcatgaggcggggggggtaatatttcgccctctacatgataaatgaataagtaagaagat
+gatctttttgtggcggtaccttaagcgtactcctgtcgacgagttactactaaaggaatg
+tagggttctggatctatgaaaagcgacctccatatatatacgggcctaagcggagtaaaa
+taagtgatcaatggactaacattgaaatgttagtattgtcgaccattgagggctggtaaa
+tcttatttacgggcgtgggaaaacgaacgtgatatggtttagcatgggatgcaagcactc
+gttaatgcttactttagttggttgcgggaacaacaggaggctatactaactggtagcgtt
+cttgcttccattatgttattattataattaaaaataagacatatggtagagttgtagtca
+gggtggatcgggttgtctataacgttggaataatcaaaactatcgttaacaaaaacgaaa
+tttaagtcggtgcggtggaatgcgcctacctcatgtgcaccacacattcacagcacaccc
+ctcattataggcaaggaagcaaacaaaaaaaagttaatcgaccgtatccgaccttaaatt
+ttaaaataaatagaaacacttagcggtaatgaaaagataggactaaaattcactagtatc
+ctggaacgaggcaacagagttatctagatggtaacgaggtgctgcatcaagatgtatgat
+ttttggtccgctgtgtggaatacctctattgatatacaagtgactttctcggtaataacg
+cacttcacaatgtgttgtttcttttctatgtattttgcaagagaaagaagcttagtatag
+gtacacctcagagatgtttcgtgtaaatcgtatcacatggtataactgcaggaggaacat
+tatccaaattcaccacaattactaatccacccttttacttttactaaagatatattaatt
+ctcatgttgtctgaattgtataacccggtaccctgggagcgtatcgaaggataccaattg
+aagtcctcgaggcatgttacaacacacgacttccttccgtctattcagacactcaacgag
+actaacttttcctaggtaatcaatgatattgggtaactcgtggcatcttatagttattga
+tccggctcttttgtagatcctgtgcgactcgtgcgctaattaagactggctctcttgcgc
+aggggatacgtttattctacgtacccgatttggttactactaagcggcctttcttcaaac
+ttgcagttgtgacttacattcctatttcttcaaagcagggaagggttacagggagagact
+tattgagatacgattggaatttccatgtacaatcgttaatacgcttgtagaccagcaact
+cagtatagagatccgtttcctaaagggtgagcggtaggggcaaggcaataagaaattact
+aaaaccctagttgttaatataagaacgattcgaaacaataggattgcccaagggggtgcg
+aacatggtgtaaatcaaagagaaataggcattgttaaaacccgcacgtttctagtacgca
+agaggaacgtcggtaaccagttctcaaagatcctaacctaaaaggggcttattctacttt
+ttccgacactcaatggacgagacaaacatgaacggatagctttaggtctcgttgaatgca
+aagaatagaatcgttattattaatcggtttccattatctatatgcggtatagatctccga
+gaggaccctgtaaactagctctgcggtttaactggtgctaatagaccgccactatgttat
+tgcttctagctcctagcgtcttatcatgttatacattaatgtcgcatattggacagtagc
+caggcttggatggatcgccgacaaaaagaaaagactttccctgtaaggacttaactatta
+catataacttggatcattaatctgcaaattagagtaacggtctttcaccagcttcatatt
+ccaacgtggcgctagtcgatatcccatgaagtttaaaactagaattggcagtctcacttc
+acagtgcgtatctatacgacaaaagtggtcgatttgcataaatatcttatcgatattcag
+gttattaccgattccttgctaacgctagaagtcacaccagagtaataataattccagaca
+cctgtgaaataatcggtcactacggatagactagtaacgataatacgtatagtccataaa
+agttgaattttaggggctaaagatattagcaatactggtctagcctaatcgtcgatagca
+aagggctgtgaggatttctcctacattttcgaccaattgtatcgataggaatagttacag
+tcacgcttgtagatgtaagagatgacgttattcttagggttcttaagtcggggggtaatt
+taagaccactagtaaaggtagaggcgtacacagtaaacgatattttgaaatcgtcaaaaa
+aaagtttacaacatcctttaagttagcaactgattttagtggcaaccttaacggttgaat
+tgatctactaatacaggcctacaccgaagggtacagataatgattcttactaccctaaca
+tgatagagtcctgtcctatctcataggtcgacattttaaattcgtaatgagcaacgaaga
+tcgtttcccaatttgcaacattcacttatagacttcaggttatttcgtgctaacattaag
+atagaatataatcagtcgttaagaaactattatccagctttcgtcaaccataaagattaa
+aaactgaaacttggcaagatatgaatagctatcctgctttaaccgatcgtatgagatgct
+ttgtagcaagaaaagtgactagcacttgtgtttagtaaagcgggagagtgcggtaattaa
+tattaatatactattaagctacacagcaaaggctgcaataatgttagtaagtagaacata
+aaggtattctccacaagtaataaatagtgtgagctaattgactaacttaactctcgcgac
+aagtgatgtggataagatgactcatatcgtctttttctgtagtgccgacatcccacctgg
+atcgaacaattccttctagttatcgactttgattacctatcctattaaacagatagggtt
+gtaaagtcagaaaatgatcggcttgcgttggtctaccatagctagagttagaacgcgtag
+atagaggccttttgttgccaacgtgggggtgggatgagtctgggcgagcgtgactttctt
+tcgtgtccgaatttgtttaacatccattagattagatgtttgtgttttgggtctgatgtc
+ctaactactttctcagtgaaactaatgtcatcatccaagtaaaatagtccgatgaagtct
+ccgttttcggccgaagcttgtctataacgtatataaagtcgctgaatttagaacacacct
+tatctatgttgtaaagttactttattccaaaggacgtgcacgaagcgtgagtgtgggaag
+gaacttaaagtcggatcactcttgtcagtgtagataagaatttctttcatacttcactgg
+aatccggcgtatggatatctctaccgcgtcatctggtggtgtctgcggtaaaaagtcttg
+ctgcacgagtctgagaaatttttggtgccatcacatcgtaactgtacaacgaacaaatag
+catcaggccttcttatccagcgtgaagtctaattatttcacaagctttcctaagtatgta
+aatccctcacttaatgatgcttgcgccaatgaggatagaggacattgcatgtacgtagga
+ctattctccaaggggtcttctattttgttagcgaaaattgttacagcctaatgttagagc
+ggcgtacgactttataccagatactttcattagatatgcaaatatccaattaaatcatag
+tagtatcgtggtatggacaatcaaaaaagacccgttgtgatatgatgtttttctagttcg
+ttctcatatatatagatcaacaatgaataatctcatgatctataaccgatgtatatttat
+attccggttgactgctccggtgcaattcactacggacactaatgactaatatggcgcctt
+tcatcagaaacgctaaatatgattaatgaattaagggagtattatctaattattagagag
+tagcagttagtctgatattttcggtgtatgtgttagccgttataatgctgtctttttatc
+agtgagaacagggagtgtgtagtgttgtatgcttcactttatgactctggttatatccct
+cggagaacaagaataagagtacgagaagttcggtcattgaggatgaaatagaaccgctag
+acgaatggactcacgtttataaaactatgtatcacagtactacagctaactctgaagtcc
+gagaagcttttgtaggacaaaacgttataagtacctttcgcagaatacggccgtgcatac
+ctgttataaggcgtagtagggacaccatgctatccctcatatagagctacactaatacca
+ttacatggtgactatcgtttacggccatcatctgtaagcgatcatgcctcgttagcatcc
+gtacaatctcgcatggcgtcactgcagaaaaaccccgtgcggattttgagtcagaactat
+tcgaagcttctcaatccttttccattatggcatagcaagtgacgactcgtcagccatggg
+aataatagcactaatccgattacttatgaattagaacccacatgaatgtgattctgcgaa
+ttgtctaagaatctaatgattttccggtgaatatggttgttgttatttattgaacttata
+ttattaacatcacccttcgttagtgatagtcagctatttccaagaggttccccgagcatt
+tttaccattctctagtcatacaagttggagcgcttttaaatctttaggctgatcaaggcg
+ttttgtctagaattctgcagatgttagattcgtgtgcaatccctcttgcatgtcagtaac
+aggtcacccgtttttcgttacatatgctggtaaaatattcatagtaataactacaatact
+tgatttgttacgtaatgctcgtacataacacaatcgtattccacggaacagtaaagctct
+attattctgatcgagcctaagagaggatcacactacgctattaaagtcacgttcacgaaa
+tctcaaacctcaactgctggtgaccagttatagacagtgtaattccatattacatgtcag
+gcttaagctaacccgagcctttatataagctataatcaagaattagattggagtgcattt
+tagacttatctatcgaaatagtgatagtaagagtttatatgacctgatctagactgatgt
+tctcttccacaacagccttaaggcgtggagcctttcttatactattaggtcgcgtcgaga
+gccctattcgtaatgttaacgacactagactaatatacaatgagctaagaataacacaag
+tcacaagataatttacaaatcatatatctacagtccacaaccatcactagcgattgcaaa
+gcgttattggtactaccgctctaaatcggtatgtgcaagacgcgttaactggttcaagcc
+tctcctgctcgtgagactgaaagaaatcgaaaatatggatgtgcctaattgttcttgtga
+gtcatgtgcaactatacagtttagtttggtcaagactatgcaactattaacagcatgtgc
+gcattgaatatttggtgtcgattgataaatgccccaacgttccatcacgtctataagccg
+tgttactaatgtgtattagtgcatacctattcagaccatagttcaactgttggactgaag
+gcccgtcttggggttcgtgaatgagagtgcagtttcttgtcttttccttaactgacctaa
+atgaaggcaatcggtttatctagagtcatgcttaaggtgaatttcagccaatgggctccc
+attgagctagtatggtgctttacctttgtaagtggtggctttccttggtgtgctgacttt
+aacacggcagagtgattatccgaagaatggataataagacgctggcaatattggctaata
+aagtccgatgagtttcaatcatgactgcgaggagatccatgcggtgtacctaaacctaca
+tcgtatgtatttgctgacgttcattcttgatacataaagatccgatatcggtccactttg
+tttaccaaaagccctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatg
+gggatattgccggtgagtacaagttagaccacacattagaactgacctatattcgtcatc
+atagagatggagtatgaattgattctgcgaagtacactggctttacgagtatctagacgc
+cgcggtatatctcccgtcaatactatgaaggtatatatatagaggctgaaaattcatgtt
+caatcctctttctaagagtgagtgggagccccttctgttgtcggagtaaaaaggcattat
+tcctcaaattgtcagaagcaaagtatacgtgatgtttgcttagaacaaaagagttacctt
+agggtaggtaaatctcgattcaccgagagaagtgattttggcggtgtgcgattaattctt
+ttgatgacagatctcattattttatatagctccctctttgtatttagagtttgcgtaggt
+aacctggcaaaaccatatcccggggggagagtgcgctgaacattttatacgatgtgatta
+ctcaaaggataaggttcgaggcctctatactcatggaactatcttataattataatggat
+cgtggctcattccacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaac
+gtacatcttctaaggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaa
+atatttttaaaaattgattctactgcgaggaactaaggtgtagacaagcccttagtaacc
+ggtggatgtcgcttcagttttatagcaaacattattcaatttcagtcttgactgaaatta
+gtttgttagtgttagaggtccatatgtcacatgcatatggtctagatgccattgtacagt
+aataccttagattagtattagcggcatgcgtacttggatttcacttgtaagaatgagctt
+aggacggtcgcctgtagggctgcaaataggaatacttacaatttttgatgacttgttagc
+atatcgctatcacccataaaaaacctgatacttgatgagcgggtgattgagactatgtac
+tgatataattcaatagctccaatagatgaaacagctatgcgcctatttatgtcaaataat
+cgatgtgatacaagcttagagctgaacgagcgcgagtggaattagcggtgatctctatcc
+taaaaagccacgaaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagt
+taaatttgcatctcatgccccacgaagaatgggtagagagtttgaaggtgcttctggatt
+ttcctaagtacgtggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaacc
+acaaacccctgggtgaatctgattagccaacccagtgatctgatttcagttgtcaaatct
+cttttttataactaccttttgtttccataatttaaccggatctcataatgaacaaacggg
+tagaataatggtagcacatagcgagcttgtctattcagaaatatggcctactcagaatgt
+attctccaaatcagtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttat
+cggttccttgtactacaatactcttgcccaacaaatactaagcataacagcaaaattcga
+atccccctccttttaataaatggtttttcaatatagccgattcgtattcgttagtctttc
+accaactattaacctggcatctaattaataaaatcaccaaaggactctataatatgacag
+tcacttcggcctcttttaagacagttgattattgcaggtccgcaattgatggtgacatgc
+acaattagttagaatccgactatggagacaattaacaattgtagtgcccatttggtccag
+ttgacttcaaccacgagttataaaggtattttaatttatagtcgatagtaccaacaacaa
+gcacaatcataattatgttagaaaacccagggggtaatgctctaaatccagctttaaggc
+cagagtgcactatgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctagg
+aggtgccgagtgagaatatcagataccttatgaagcaacgattatatctggactagatca
+tgatgatcggaataaaacattgaaataagtccttatcaaggagcataaacattttattta
+atttatacttcgtaaataaattcagaattttttttcaagacattaatctgagtaaatgac
+ggctagaaagggttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgc
+gtttttactgaaacaaaggttcaccggaaagaaggctgccacttttagcttcttgacgat
+ctttagcgtcatatttttagattagtcgaaaaacggaaaacaaacttaacgaagctggtt
+gcacggggtaccgagaaaccaaagagcaggacaactccttgatcgggaagaactgaaata
+gacagctgtcattttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgc
+atgaaaatactgaggatgtaaactatagccagtcaggcccgcgtgttgactaattgatga
+agcaaacaaaatagccggtattcgttaaaaggaacgggttgccagctacagatatactct
+aggtatatcccaaacaagagacgtcctttggctgttgtaatcggtcataatacttgtcac
+ataaacaagatcgctgaattaaacattaaacagttagtgatacacaatcgtggttggggc
+tgggatgtgcaataaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaa
+cattattatttcttgacaatggaatcgataagcgttcctctaacttggtatatatatctc
+gaccccgggattccagccattcttgtatgaagatttaaccatttaactatgcatagttga
+atggtaaggaaaatgatattgactgcaacagattttggatgcaaaaatatttgtgaatta
+ttggttatatactggttgtatagcacaatcattaggtcctagaaggcatactcaacctca
+gcgagagagctagcatgcataattgtaccgcccatattaatattcctgaaatgatttctt
+acattacgcccaatttcagtcatcgaacacccccatcaatttacccgatagagaacgtga
+tcatacgcaataccctatgcgaacgtccactctatagcgtctgtatacaatgattattcg
+ttccatttacaacgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctc
+ctggaatgtatgagttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgt
+acgaatgaaaggccacttttagaagagacctttgtatccattgtggagaatatcataaat
+tcaagatggggtgtcatgctattcggtcctaaacattcttaatggctgttctattgttag
+tctgatttaaaatggaaccatagcacgaatagttagatagggctcatacccctgtaacga
+tctacaaatccttccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatca
+aagaacactcacacgtcagattattacactgatacgaattatttcagtcgacagtaattg
+aatagaaacttattaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttg
+actgtaaaaaaatggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagt
+tttttctctgttattaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaa
+gatcacacatcacacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtag
+tgggatcaacatatggacgaatttatgctcaatgagccaacctcccccgcattgcggttc
+attttaaggcctgggtaacatctatcgtttagataatcaaaggaatccgactatgcaatt
+gtctgacttcatccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaatacc
+atattgaaatcgtaatacgataattgttgctattgactacaggttatgaaaaaacttact
+ttgcgggtacatgcatatttttgtaccacattattacgcgatatctctcagtgtactcta
+aattaaaccctcttcgaacattttagttcctattcgtaaacacgtgctacgcggcaattt
+gccggtcgtagaatggacaactccagttcaactgcatgtaactcatagctcgcgttagta
+taaattgactagtagccatgggacaaagtaactagtcagcggaaaagatccctttaaaga
+tatatgcaggttgcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagc
+gtctctatcgtatcttctaattttgggccgtgagaatcgaaactactctgatttgctgca
+cacgttaggtaatatcgcccattttcccgtataagctccgtacttatacgaactacacga
+ccttttaagcattagccgctcatatcgtgattcgtgtacagatgagtctattaaaattac
+agacatactccatatctcgctccttgaactttgaataatgcgctaacttgtactatgaat
+aggcagaacccaactttcccgtttgcgtcaagcggggaaacgatacatgttgtcagattt
+atgattatctagttttagatcacgtttaccgataatcggctgtggtctgagcagtcctac
+actgagtatttacttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaa
+tacggagtacgatgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaa
+ccatttttacgatttttactatagcggtcatgaagtgcgaaactgcttgcaaattttcta
+cacacattgtggctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccag
+ggaaagcgcgaattatttggtgactaatagtccgtgggtttgagccatatacctaacgcc
+ataaactacgtggtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcag
+cacagactaactttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaag
+tcgcttgcgcggcacggattcgattgggcggctcaatcttgcctaatttctactattgtc
+agctgtacgactgtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttat
+gaccaaaggtcttataattgaagcgcacttccgttcatcaaattaaatcctggcttaccc
+gattctccggaagtctgacctagagattgacgacggccgcgtattattgagacctcttca
+ggattaatcaataacgaagtagttgatctgtttggcgacgtaccttaagccgactccgct
+acacgagtttctactaaaccaatgtagccttatgcttagatgaataccgtcctaattaga
+tattccggcataacagcagtaaattatctgttcaatggacgaacattgaattgttagtat
+tctacacaagtcaggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatg
+cttgagcttgcgttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacac
+cagcatattctatatgctagacgtcttccttaaaggatcgtagtattataattaataata
+agaaatatggttgacgtctagtcagcgggcatacgctgctctatatactggcattattca
+aaacttgacggtaaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgg
+gaaccaaaatgtcacagaaaacacctctttattgccaagcatgcaataaaaaaaatgtta
+atagtacgtttacgacattttattttataataaagagaaactattacacctattgatatg
+ataggacgtaaattaacgagtagcctgcatagaggcaaatgaggtttctacatggtatag
+acctgatgctgaaacatcgatgagttttggtcccctcgctcgttgaaatctagtcattta
+ctactgtctttcgagctattataccacttcactatgtggtgtttctttgctatgtatggg
+gctagtcaaacatgatgactatagctacaactcagagagcgggcgtgttaagagtatctc
+atgctagaactgcacgacgaacttgatacaaagtaacaacatttacgattccacaaggtg
+actttgaagaaacatagtttaattctctgcttcgatcatttctataaaccggtaccatcg
+cagcggatagatgcataacatttctactactccaggcatcttaaaacacacgtagtactt
+cactagattaagacacgataagtgtataacttggcagtgggaagcaaggagattggcgaa
+ctcctggcatctgttacgttttgttcaggctcggttgttgataatgtccgactcctgcca
+tattgaagactcgctcgagggagatcgggattcgttgattataagtacacgtgttccgta
+atactatgaggcagtgattcaaaatggcacttctgacttacatgactaggtattattacc
+acggaagcgttaaaggcacactcttatggacttaagattgcaagtgccttcttctagcct
+gaattcgcgggttcaacacaaactctctttagacatccgttgcctaaaggctgagacgta
+ggggcaaccctttaactatgtactaaaaaactagttggtaatttaacaacgtgtccaatc
+aagacgatgcaccaacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtga
+taaaccccaccttgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataa
+cctaaatccggatgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagca
+tacatttaggtctcctgcattgcattcaattgaatcgtttgtattatgagctgtacagta
+gctatatcagctatagttatcccagaggaacaggtaaactagctctgagcgtgaaatccg
+gatattagaacccctagatgggattgattctagctaatacaggcttatctggttttacag
+ttatctagatgattggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtat
+tgcccgggaagctattttctaggtattataaagtcgagcattaatatcaatttgacagta
+aaggtctttcaccagcttcatatgccatagggcccatactcgatttaaattgaacggttt
+aacgagtattggaactctcacttataactgagtagctatacgaaaaatctggtccatttc
+cagaaatttattatcgatttgctgcttagtacccaggaagtgataacccttgaaggcaca
+acactgtaataagttttcctgtcacatctgtaatattcggtcactacgcattcacgacta
+aagataattactatactaattaaaagttcaatgttagggccgaatcatagtagaaattct
+cgtctagcctaatcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaa
+tgctagagataggtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagtt
+cgcttctttagtccgggcgtttgggatgacaactactatacgtagagccgtactcaggat
+tagatagtgtgaaagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtt
+taggccaaacattaaccgttgtagggatattctaatacaggccttcaccgaaccctaatg
+ataatctgtcttaataacattaaatgattgtctccgctacgagctcttagggcctcattt
+taaatgactaatgtccaaagaagagactttcccaatttcaatctgtcacgtatagacggc
+accttagtgagtcatatcattaagatagaagattatcaggagggaagtttctattatcaa
+ccgttacgcaaccataaacttttaaatctcataatggcattgagatcaagagctttcatg
+atggtaaagttcgtatgtgatgctggggagctagatatcggtataccacttcggttgtgg
+taagcccgagtgggccgttagtaatattaatagacgattatccgacaatgcattcgctga
+aataatcttacttaggagaaattaatgctatgagccaaaactatttatgtctgtcacatt
+attgactaaagtatctatcgacaaaactgatgtccataagttgtagcagatagtcggtgt
+atggtgtcaccaatgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaa
+attgcctattatacagataggcttgtttagtcagataaggttccgcttgaggtgctctaa
+cttagcgagagttagaaagcctagtgagaggcattttggtgccaaactccggctcgcatg
+agtaggccagagagtcactttctttcgtcgaagaagttggtgaacagccttttgattagt
+tgtttgtcttgtggctatgtgctactatataagttagaacgcaaactaatctaatcagca
+aagtaaaataggaccttgaacgagacggggtacgccgttgaggctcgagatagtagataa
+actagaggaatgtagataaaacattagctagggggtttagttactggattacataggaag
+tgcaccatcacggtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggactta
+acaagttcgtgcataatgaaatcctatacggactttgcatatctctaccgactcatctgg
+tcgtctatgcgggtaattgtattgctccaagtggatgactattttggcgtcccagcacat
+agtaaatgtaaatccttataatagcataagcaattattagactgcgtgaagtcttagtag
+ttctcaagctttacgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccat
+tgaggtcattgaatgtacggagcactattatcaatgcggtatgcgattttctgagcgatt
+attgttaaagacttagcgttgagccccggaacacttgattacagattctttaaggagtta
+tccaaatatcattttaaataatagtagtatcgtgctttggacaataaaaaaagacccgtt
+ctcttatgttgttttgcgacgtacttctctgatatatacttcaactatgaagattctatt
+catcgataacccaggtatatttatatgcccgttcactgcgcagggcaaattatctacgga
+caataatgacgtagttggacccggtaagaactaacgcttaatatgattaaggatgtatgc
+cagtattatcttattatgtcagagtagaagtttctctgagattttccgtcgttgtggtac
+accggatttggctctctttttagaactgagaactcggagtgtgtagtcttgtttccttca
+atttatcaatatgcttttataccgccctcatcaactataacaggacgacaagttccgtct
+tgctccatcatatactaccgatacaccaatcgtatcaagtttagtatacttgctttctct
+cttctacagcttactcgcttgtccgagaagcggttggtgctcataaagttagtagtaaat
+gtacaactagtagccagtccttacctgtttttacgactactacggacaccatgagataca
+gaagttagtgctacaattataccattacatgctcaatatcgttgtcggccataagatcga
+agagtgcatcacgcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacaca
+ctccccttgttgactaacatcttttacaagaggctaaatcattgtccaggatcgaatacc
+ttgtgtacaatcgtcacccatcggaagaataccacttttccgatgtagtatgatttacaa
+aaaacatctatgtgagtaggccaattgtagtagaatatattcatttgaccgtcattagcc
+ttcttcttaggttgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcga
+tttcatacagctgccaacaccttttttaccaggctagagtcagaaaagttggagccatgt
+taaatagttaccatcataaaccactgttgtctactagtctgatcagctttcatgcctgtg
+caagcaatatggattctcacgtaatggtaacaactgttgcgttacttaggctggttaatt
+tgtcagagtaataaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcc
+taggaataggaaaagtaaagctcttttattctgatagtgactaactcaggatctaaatac
+gcgattatactaaccttcaccaaagctcaaaaatcatctgctggtgaccagttatagaca
+gggtaattcaatatttaatgtctcccttaacatttcaccagcatggattgaagatagtat
+aaagttttacatggcagtcattgtgtcacggttctatacaaattctgatagttagacggt
+atttgaaatgtgcttctagcatggtatcttacacaactgaatgaacgactggagccgttc
+gtatactatttgcgagcctcgagaccccgtttcctaatgttaacgaatatagtataatat
+aaattgtgatatgaataacacaagtaactacagtttggacaattaattgttctaaactaa
+aaatcattcacttcagatggcatagagttatggctactacacatataaagcggtatgtga
+aacacccgttttagccggaaaccctctactgctcgggacaatgaatgatttccaaaatat
+ggatgtgcagaattgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtc
+gttgcaaagtttaaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaa
+acgtgacagaaagtctagaagaactgtgaataatgtctattactgattaactagtaagac
+attagtgcatctggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtc
+gtggctgttccggtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaag
+gtcaatttcacaatatccgatcacattgtgctaggttcgtcctttaccttgcttagtgct
+gcatgtacggggtgtcatgacttgttatcggcagactctttatcccaagaatggataata
+tgtacatggaaagtgtccataattaagtcccttcactgtaaagaatgactgccacgtgat
+ccatgaggtctacagaaaccgacttacttgctttttgatcaacttaattatggattcata
+aagttcagatatcggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatc
+tgaatgacagtgatagaaaagatccccatttgcccggtcagttcatgttacaccactcat
+tagtactgtaagtgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaa
+ctggatgtacgacgatcgagacgaagaggtatatataacctaaatactaggtacgttgtt
+agagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgct
+cttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctt
+tgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggat
+tttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctc
+gttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacc
+tgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatgg
+tactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcat
+atgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagag
+cgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaa
+ggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagt
+ctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcat
+atgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgc
+gattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatact
+tacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgag
+gacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcg
+atgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgag
+tggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaac
+ccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggag
+tgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgta
+aacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagt
+gtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaa
+ccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattc
+agatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagtttt
+agtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataat
+acttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtc
+cagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagct
+cataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgct
+cgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaa
+aatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatt
+tatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgt
+atcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgct
+cttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatga
+tacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattat
+catgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttc
+tagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacg
+caggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggc
+tcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatccc
+aaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatag
+aattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatat
+ttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcac
+gcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaag
+ggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatctt
+cgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgtta
+gtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatca
+ctcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggt
+cctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatgg
+taccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgg
+gcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagc
+taatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagt
+ttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaaccctt
+aaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagt
+gactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaatta
+acgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcct
+ctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggta
+tccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatt
+tattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttg
+tgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaa
+ggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtac
+aatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaaggga
+tggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattca
+gtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagt
+gagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcc
+cgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtg
+actacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaa
+tcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcg
+ctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgt
+ctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagta
+agccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtcc
+gaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaa
+tcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagt
+atgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgcca
+cctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaa
+tacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaaca
+gccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctg
+gtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaat
+aatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccg
+gtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattat
+cggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaa
+taaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccagg
+tgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgt
+ccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgac
+aaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtc
+gcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacag
+aacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccc
+tcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaa
+tcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataata
+aatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagtta
+ataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgaccc
+ccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgc
+caccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgct
+gagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattg
+cgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaacc
+ccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcattta
+tggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatgg
+atcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttaccc
+ggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgc
+acgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccc
+taccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaaga
+ctatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacagga
+aaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccat
+cgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatc
+tcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcact
+gtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaa
+aaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgag
+cattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacc
+cttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaa
+gtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccatagggg
+cttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgg
+gagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctca
+agttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtac
+aggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtctt
+aacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtg
+cgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgcttt
+agatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcg
+cgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaa
+agccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaaga
+gggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagcta
+aaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacata
+agacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgc
+cttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtcc
+agcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccaca
+ttctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgaga
+tataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacag
+gaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatat
+gacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggt
+ggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctg
+gttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtc
+atctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttc
+tataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaata
+ttaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatg
+tcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaag
+cgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatg
+ttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattat
+aacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatg
+gcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacat
+ttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaag
+atgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagac
+aaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcct
+gaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatga
+atgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatctt
+aagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtt
+tcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttg
+ttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagtta
+gatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccac
+cttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggct
+ttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcga
+ccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtg
+ccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgat
+cactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaagga
+tgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgt
+tatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatc
+cccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaatt
+gattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcct
+ttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgttt
+ttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaa
+tgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttcc
+agttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtcta
+ggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcc
+cactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatct
+agatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatc
+tacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttc
+gtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcga
+ctacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaa
+ttgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagaca
+agccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggata
+attaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaact
+ttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaat
+agtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgat
+aaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggata
+gtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctacta
+gtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacgg
+ttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttac
+gaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcata
+ctcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagat
+taggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagtta
+aactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgata
+tacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactata
+ctcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccga
+agcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagttt
+ggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgcctt
+agaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagg
+gacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataa
+tagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttg
+gggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagct
+cgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttccc
+ggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatcccttta
+cgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgt
+gcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactc
+gctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctc
+tggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgtt
+cagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatca
+aagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaac
+ctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccac
+gagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgag
+aaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctgga
+gatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgct
+aacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggtta
+gagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacat
+agaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataat
+caattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatccttta
+gctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagta
+aaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagt
+tccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattt
+tgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctacc
+ttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcg
+ttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtg
+gactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaa
+ggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaa
+aacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaa
+tgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtat
+acaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatac
+atttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaaga
+gaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttac
+tccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcc
+cgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaa
+gtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccg
+acctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattga
+acggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcga
+attcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaagg
+tgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggtt
+cagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccag
+aggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggac
+ttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattac
+tactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagat
+gtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcga
+gcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactc
+acttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgaccta
+gtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgac
+gttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattccc
+ggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtt
+taattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatg
+agtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaa
+gacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaag
+ggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgc
+accttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatag
+tccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataact
+taatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctga
+catcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaat
+tattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattga
+ggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtgg
+aaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaa
+atcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaa
+tcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcatt
+ccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaact
+tgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagt
+aactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaat
+agtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgc
+acggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattcc
+aataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgct
+ctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaat
+gccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaat
+taaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagata
+taggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatga
+tgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttat
+gccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagagggg
+ttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataa
+atccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaat
+tgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaat
+cccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattatt
+aacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatac
+taagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaag
+caagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaata
+ggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttct
+tggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatac
+tacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtg
+gatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttacta
+gatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctat
+gagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctg
+ttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaa
+tttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaa
+taggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgac
+gtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgttt
+ctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtaga
+gcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttaca
+tggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgcc
+ctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactt
+tgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactc
+cgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatat
+ttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacg
+caacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacg
+cttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgat
+gttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccat
+cgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatg
+taacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtat
+tagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaata
+taacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtc
+tccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcac
+tgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagt
+tatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgt
+ctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgt
+aatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcg
+atatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtga
+actaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctacttta
+gtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatga
+ttctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctaggga
+gacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatct
+tcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagc
+aaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtactta
+atgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgactt
+catgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatc
+taaagataactctagtaaggccaactcccttcaatgctgttgccagttataatccaagag
+ctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaagttggttctagc
+cagacagccacataccctgtacgggtgtattactaaaactggtccggtattagttcacca
+agggaggaattaggcaaaggatctaggtatgcaagtcggagtattacatccctaccctga
+atccatcaataggttcctctgtactggccttcgcaatgagtattcaaggttgtacagccg
+tataataataagatagtgactatgaacgggaagtaacccgctcaccttccccaaaacatt
+gttatatctaagtattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaa
+attacaccgcacttaagccgcttttgatttatatttttccaatgcgcttttaaaaataat
+tcagtcctacatactaattaagacccttaaacggagatatcacaagttaagttttaacca
+tctcgactaggtggaactatagatacccaactcaatttatcattacctgtaatgttccta
+gaaggattgcatttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacag
+attctgagaaatcacctaaacctattagtcagagcacccggttagaaccagttgtcaaaa
+aatagagcggttgcatgagacagaagtaacgatgagatccgttgtaacgttgagacatct
+ggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactaggcaaacccaaca
+taggttagtcctatgtgatacgccacatggtatatcattttgtaacgttacctagggata
+atcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggttatagtctagtcc
+aaagataaaggataaagcacgtcagagaactatattagccgaatgggaatcattgttagg
+agactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgttttt
+gtttgaatctaaaagagctttgatgaccgatagtacctgtatactagttactgtattacg
+tgtctaatgatttcggattggggtccccagaatcagacgtcattgtagacgattcaagtt
+taccaatttaatttcccagctctccttggagaactatcgccaataattgcagtcactttc
+cttttctgaaacgataaagccgtcagagttctctgcaacgttggacttacctgaggttct
+aacccactttcggttctaatagtagttaacgacacaacgaataacctttactgtggggct
+ttcacgatattttttcgcttattattaatggttacgtcataagctggtgtccaaattaag
+gttaccggcttcgcagagtagttgtatccaagtataacttccctaatcataagatcgagg
+tagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtggtatggacgttg
+ctaattacttctgaagggaaattggtcattatggatacgtgtctaccatcaggtcggacg
+cagatatggttctgtcttcagttgatccaccgttctttataggataataactgacgatta
+aagattatggtaaatagattaagccaattctcttcttgtcagtgaagcatccttaactga
+cttgctctgcagcccctcatacatttagctattcaaagtaccggctcgtttcaaactctc
+ccacctttggaagaggttgtcaacttgataagtatatcatttacagcattttttcggacg
+tacctctaatgtttcattgcagaaaattagttttttctatcgcacattttgcaagtaacg
+ttagagacacaattatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaat
+atcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtt
+tatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcg
+ttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattctcgagcccactc
+acgatatgtagggacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggt
+ccatatctccgaagttagaagggacatacctttagatgataagatcaattcttattgacg
+aaattcatccacaacggggaacaacttcaccctagacttacgtctgaaaagacacctagc
+gtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaac
+ctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgtactacggaggca
+tgaatcatatactagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcacc
+gtaattctaggcataaaactccagcaatttgggggccgaaaacaaatgacgttagctaat
+taattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattg
+aacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttca
+tgcgtacctcctagttgataattccccgagcagtggttaggacacttttgtcggtatcaa
+gttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaat
+ttttatgaagtcgtcgagacgcagttcctattgatttattctaaacggagatgtgcttcg
+tgggactcggaagtagatctgtgtttatgattattgctactttagatgctgactgttaac
+tccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagt
+tctgccacaaggtatcatatttacagttagtgctggttgcttctttcaaacgtggtgagt
+ttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttcca
+gagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagag
+ccggtgttaaacacatattattattgttatccaactaatcggacctatgcataaagcatt
+gtctaaacagaataattgcctatatacggtagttttagtgatttatatcttagtatcagt
+tagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttcta
+caaacgaatgtaagcggttttccaagtagtacctataaatcacagaaagatctgtctcag
+tatagttgaaatggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaa
+gacgctcattaacgaatatagacaagacactatatcatataataaaaaagaacatggtgc
+tcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaattcgctactaga
+cgatcaattccctacttgtcaaagttgaactggtacgttcttggaattaaatatgattgc
+gctggaccaaattgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccg
+tctcttacctttcttgcttatgataaacgacggtccctgtacatcactgggaattctcag
+caaaaataattgggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaa
+agattattcaacggggcgataataggatcataaccggtatgcaagcgcattgaaagagcc
+atgagatccttatccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaat
+ttataaatgtagtctgggctgtaagttgaagacctaagttataatgaagtgcaataccaa
+atcgattcatagtggattatcagactcaagatatctcctgataaattacagttgttaaga
+tacggataaaatgagatttaagattagcagcctctaatctgtttcaatcccgttggaatg
+tggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctg
+ccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctg
+agtatagattcgtagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtc
+acacaagacactaaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagtt
+cttgttatattcgatatactcttggctaatttatgtctgagtatataaaattaatgatat
+taacttgcatttcacggatcccttagaaaaagattttgaccgagcgcattataaacggtt
+acaccgaatcaatagaagcatacccaatagctttctttgaatttattgcctgcgcaactt
+ggctgactctctagatccgaataattctatatggtcgtgacgaaactagttcattactgt
+ttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaattactcaatgata
+cgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattat
+ccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcgacgcgaggggaac
+cttatctaactatcattccatttaccgggtgactctcgatgcaggatccgattgggataa
+attgcccagaaatggctcattcctgactaagggtaaggccgttctcagcaagggaacccc
+gcgaatctaggcttataccatctagattgttaactacttgcctgtagttctacagccata
+ctggacagttgtttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgt
+aagtttaactattacgtccgtgggcagataaggatggaggctgtatgtatcttaactgtt
+acctaatatggctggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgc
+tttgtatactgaccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaac
+tgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctatagccagcgtact
+agtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctgtctctctacagc
+ttattgatgaggattgaacatggacatatagctccccctcaaaagcagatgctacctctt
+tattccattctcgaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaat
+ttatcggtaacgtcacgtccctttgagactggataaatatattaccaggggccaacgagc
+aattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtct
+cgtgcaactcacttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtg
+tactgccctggtacatttcctgtacaggactccaacagtgtagattcctaagatagctgt
+tggagttgcctcacgccagatcgaaaaactgaataaactagtgagctgagctgcagaaat
+accgcttaattacttatgactagttcaaagggacctacgtgatgtcagacattgcaagga
+agaaattaggtttgtgcgtcattttggctggactagcactccttacttcccctactattc
+aaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtctattgggaacgag
+gctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgc
+aattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcag
+ttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaa
+cctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattc
+ctctacttagtagctttctttgattctcagaattgactgcaatatcactgcacaattctg
+tgccattactagacttctctgtattaacgtctcatcttactaacactcgcctaggacaca
+tctgagagtgaagtatttcaatacatttactgaaatcttcagttctaaaatccccgaata
+aggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatac
+gcaggagcctggggaacttagtaataactatttcggcagacaaagcttataacaagttgc
+cggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacgctcacctggtat
+aggctattagatagtgccgtcttagtaaggggcgggaattatcggataaactgatatttt
+gataaaataaccgacttgttcacgacataagtcactaaggagattttatctttctccaaa
+gtatatcttccttggataatttcaaagcgctgcaatttaagttctgttactagtttatgc
+tgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataagaagttcatcata
+tcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagt
+accctagatggaaaattatacgttaagccaagatttcgatgtaatgataattacctacac
+atttttgctatccataggaacaagagctgttctataggctcgtggcatacgaacatttgc
+tgccgctatgaatattggaagctcttcaactacagactctattcttaattgccgtcgaaa
+atgggccgaatcggctattattaatactcggtttttccgaggggattgttgtcgacagtc
+gtaattattattaatattgatgttggtgaggtcatttaaatacaaccttgcagacaatga
+ataagggatccaatctctcatactccttttacaattgctcatgcccctatgcaaacctta
+tgccgccacacctccgcaactctctcttctgaactgtaagtagcttcattactggtttga
+gactatactgaagctgatgacattctaaaatggctattttcgaatgtgattcataatgtt
+tatcgtttgggatggcagaatcacgttatttttgatatagcccgggtattctattgtata
+gaacgtatgctacaagtcattccccgaagaagactagaagtaaacaacatgcgaccatcg
+ttaagccacgcaaggctgtagctttatttcccgataacctatcttccataaatagcggac
+agcaggatactgacgctcaacatcagtggttatggtctaatttttaacttttaataaggt
+aacttcagcaggcatacacagtaactctttaatttataatcaaattagaagtctgacact
+tcttatatttttctatcatccaacgcgatcgcccattagcttattgtgttactaataacg
+tatctaaaccaatccttttcaagctactgcctatattgtcaatatatacaaacaacagga
+tagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcaca
+aactttgtagacaacgagtgaaatttatacactacgaagggccagcgtacaagacccatg
+aattaggcgatatgtttattctgacatattggtttatccttaatctgtcgctgtaaaatg
+aagccgcccccatccctgcgaattttttttcgaagattcacgactgaaatataaatacgt
+ttggctatatttatgttggagggaggcaatagcctttactgttaaccgaagatttagcca
+gtgagtgtgacactaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttag
+tcaatctcgcctataagttcatatagctctggatataattatctggcccatgcatttatc
+atggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtccgaagtattccat
+gtacattaagatcactctctcattcatgcatcttggcttaacaaatctggttgtccaagc
+tttccaggcacgtatggtacaaattcggatcgaatacttataaaaatgatatgttaaact
+gtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgta
+atgctggtgcactgaatgtgtaatacggttagaagggattagttatgttacaaatccatt
+gaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaagagactaacatta
+ttttcaacgacgtacatgctttacaatagggtacttatcaaacgccgagaaacgcgccta
+tagtgatgttatgattatgacccgatatccattggaccgaattttatgtaggttcccagc
+gtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtctctcccagatga
+aaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggta
+acggccgctgatttcatatagatatacgataagttggtatagctctactaggtggcatcc
+acaatcgttgcatttactatagctggttacaatcataatctataccgttccttacatact
+accatagcgggatagcgtttttttgccgttgattgggtttaagaggatgtcagtctcatt
+atatccgattcggtgggagagccgttgttttcaaatcgcacactttgtgacataatgtac
+aagataacaaaactgatataagatataaactgtcaatatcaccttgacacttgaatcaaa
+gtaaattaactcgcaaatataatttgactaattgggtgcagatttctcaattaataaaaa
+aatggcaccggatgggcttacaagccccttatcattcacttgtatcatgatttccaagaa
+caatagaatttgctagcaagtatgaacagagattcgaattgcatccacagtacgccggag
+cgtttattttaatgtggatatgacgatgtactgttggcggcatttgctagtaaccggtcc
+ttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagag
+aaagattacagtttggtttaaataggacttatcgggtcggaagtggaacttaataagcag
+tacacaattgggcaacagacgtcttgcctattacaataggattacaatgcgttagatttc
+agacacgttcgtgtttggctattcgtcaattccctaaatagttagacgatcaactattat
+caaagtgattctttgttcatcctccattcatgtaacagatggcacactacgcataacgcc
+gaggaattttaacgagatttaagagagcagttcgggcacaacccacttgactttataaca
+gctcggcagcataaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgt
+acttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagcctaacttatcta
+ttggttttgctataaaagaacaaagttacacagaatcctaagggcttgtttcacacttat
+gcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatg
+cgcagatattggtgatggtgactccgggtatgataatggtaactgttgaccagcgcccac
+ctcatcgaagtatagaaagtggttaggataaggatgagaccgaacttatttccggccata
+actttagattttctacctagtacacaacatcagggcggacacgaaaccgccatcacatca
+tataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcagg
+catatggccattatatatggccccagagcagaatgctacagcagacaaaatttggattta
+tgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaag
+tgtaagttacaattattactactcagcagcttctgcaatgataaaatcttatcatacacg
+tcacatatgataatatctacttagggggaacgggctccacaacctacatagtactcaata
+cttacactattcgacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttg
+cagtactgcagatcacagtaatagcttagttagcgagtcaaaattagttttctacgagac
+tgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttg
+aagccacgtaaactgtacaaccttagagataagtctcaggctactaaaaacacgttgtgg
+cactaacaggatcatggttgattcttacttattcggctgaccggcccaataagtaacctt
+caactagaacagaataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaa
+ctaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattccctacttatgga
+tttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaacaacgaaatttta
+attacgctgtgcagcctcatccaaggaattaatagaaggttgatggtaggctccgaacgc
+tccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggt
+gttcgtttttgttatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaa
+cccatggttgattttaggctaccttatttttaatttccgttacacagaaacgaattccac
+aactaacatgccattaatttttcgatatcttataaaagatggtcgaaattcattcattta
+ttttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaa
+aagtggctttgatctcctacgtttggatactagtcaaccattactccatttgatccgtga
+gtatcacctgtctaacatccagcattatgactcctcggcgaagaaaagacacacttctta
+gagtcgatgtgtattagctagggacacagttgtttaatacgatagtgagcccagggaggg
+cagtgcgtcccccagtagatttattcagctagtgtaagtataagatatctcacccacgag
+gttcaagtgatatgcagtcttagaataatacttatcctgaatttcgatattatgggtact
+tcaataatccgctagcgctactttatgtctcgttggacagcaggacacatggcagtctta
+aacactaaagacatcacctgaatgaatgtaatgggattacaagaatcaatgaggtattat
+atacgacgtaggaaactctggatatatacagtaatctagttacgccatcgcacttcattc
+ctctggaaacttagaagacatcagctgtacgtggaggaaccagacccccgtatgtagcca
+aatagaaccaaagttgcttatacaaacacacccaatgacaatggaccgctggagttcgta
+aactcggaacgtagtactgcacaaacccagcatttagcaataggagctacgtatgcaact
+cccacgtggtaataccttcaagctatcaatatataggtgcctagctaatcgcattcgcaa
+gcagtattcaagcttgtaaaccagtataataattacagaggctctatgaaacccaacttt
+ccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgcccgttctgttat
+tacgcgaattgattctactccaaaattaaacacaaattatcaaccgtttcatttatattt
+gtcaatgcagctgtttaaaataaggctctactaaattataattaagacacttattaccag
+atttctctagttaagtttgaaccagctcgactaccgcgaaagatacattcccttctctat
+ttttcagttcatctatgggtcagagaagcattgaatttattctattcaccctcgtcgttc
+acagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagacca
+cacgcttagaacaagtggtctaaaaagactgccctggaaggagtaagaagtatacagctg
+atccggtgtatccttcagtcatctgccctatactaattacacgacgcaaggaaaaatagg
+tttattttctaggcaaacccttcataggtgactccgatgtgttacgaatcatgcttgaga
+atgtgctatcgttaccgacggataataacgatctccaatgaaccaaatgtagaatgtcta
+ttgattacccttttactattcgacttagagataggagatagaacctcagtgtactttttt
+agccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaa
+agtcttccatattatatcgttgttcgtggaatcgataacagatttgttgacccatagtaa
+atgtatactagtttatgttgtaagtgtagattgttttccgattgccgtccaaactttatg
+tcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcga
+tcgccaatttttccagtcactgtaagtgtaggtttagataaagccgtatgagttatatca
+taagggcctcggaaagcagcttcgaaccaaagttcccttataatagtagtttaactataa
+aagtatatactggtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacg
+tcattagagcggctccaatttaaggttaacggcttccatgtgtagttgtatacaaggata
+acttaaagtatctgttcagcgagctagttaagttatcctcgatagaacacaactcagagg
+tcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattgggaattatcgat
+acctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttag
+ttagtgctgattaacggaacattaatgtttatcgttttgagatttagccaattctctgat
+tctaactcaagatgccttatctgacgtgctatgcagcccctaagtattttacattgtaat
+aggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctactggttaactata
+taatttacagctttgttgagctagttcctctttggtttaagtcctcaatattagttggtt
+cgagcgataagttggctagttaccttagtcactatattagatccgaatgttatgcttcat
+ctgaagaccgccaccctccaaaatttcttttaagactcacttattgcaaggtgtaggtga
+attcggctcgtttctcaagtggtgtatctgtacacgagtttccatattttcatcaacagc
+caccgcacacttatgtcactctaggtattaaaagtcgctctacaaggggacgcaattaag
+aaacagacatgctagtcaaaaataaacatagcgaggcaccactaattcggccgcttatca
+atgggatgctctgcgcgagacgcgccagagctcagtagttagttcggacatacatttact
+tcagatgatcaattagttttctacaaatgcttactctaccccgaaaaaagtcaccagact
+cttacgtctctttagtatccttccgtcttatataaggtcagtcccccgtttcggtaccct
+ggaatttactaagaataatgaaacagcccccaaggacgtacgtttacaaatgatagacca
+gatcgcctagcttattccgacgcatgttgcatagaattgaaccaacggaatgtgagagta
+actagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggcca
+cgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagc
+ttacacttcctcggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaa
+aaattgataatggctcatatggaatgcctacctcatagtgctgaattaacacagcactgc
+ggacctaacttttcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgta
+gggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaagtgaatattcttt
+ttttctaaaagcagatctgctgccgggcactacgaaggagatctctgtgtatcattattg
+cttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaat
+tcgatagtacatattgttgatacttcgcactaaaccgttcatatttaaaggttgtgctcc
+ttccttcgttaaatactggtgacttggtcctatctactattagctagacctctggggaac
+cacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagacatcgcgcctcca
+ccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattattcttatactaat
+attagcaaagatgcataatgatttgtattaaatgtataattgaattgataagggtctttt
+agtcagtgatagagtagtataaggtagacattagaactcttaaccggacgcagatttttc
+ggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttactagtagtacctat
+aatgcactgaatcttcggtcgaagtatagttctaatgctatgcagattgtgacggcgaca
+aatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattga
+atatttttaaatacaaaatgcgcctacttattaggggaattaaccagattgaaggccaat
+cctcacatgtaatgagataatagacgataaatgaaattcttgtaatagttgaactgctac
+gtgatgggtattatatatgattgagatcctccaattgccgacgtcttgtcttgatgccca
+aaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgac
+atgtacagcactccgaagtataagcaataataatgcgggtaatccagactagatcttttc
+ggactcaatgcggtttcacggtaaacatgattaataccggagagtagtcgagcttatcag
+cgatgcaagcgaattcattgtgccaggagatacgttgcagataaaaccggcaacgtatgt
+caacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaacta
+tcgtatattcaagtccattaccttttagtttcagactggtggagctgactaaagttatat
+catcattttgtacactggtttagttaacgataatttcagatttaacatgaccagacgata
+atcgctgtatatccagttggaatgtggtttgccagaaaggttaacttataatcaagcctc
+tcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagtgtatttggagct
+gtagttataccgtgtgctaagatcagtagacatgacgagagcaatattatctaccttaca
+agcatcaacggacgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatat
+actatagttctgtattcagcagttattcttatattcgatattatcttgcctattggatgt
+ctgactttagtatattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtt
+tcacagtgcgaattataaacggttacaaccattaaagacaacaagaccctatagctttat
+ttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaattagtctatagggtc
+gggacgattctacggcatttctggttataatgacaacatggattgtggcccgagaatcgc
+tctttcattaattaagcaatcattacagtcttataagcgctacttccgagtggtagcagg
+taactcgatataaggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgat
+agagaataccgaccacagcgcaacctttgattactttcattaaattgtacggctcactcg
+acatcaagcttaagattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaa
+cccacttcgcagaaagcgtacccagagaagatacgctgttacaatatacagggtgaaatt
+attgcctgttcttcgtaaccatttcgccaaacttggttagaaatgatagccattcatgat
+agaaataagctgaatgataccagtatctttaactatgtagtcagggggaagataacgatg
+gtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgctaacgaagctact
+taatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgag
+ctataatatatgctagtagagaactctggaccatcatctatatgaatactgattcgagcg
+tgcaattactttagcctgcgtactactgactctacaaaacactctgagataagtttgtag
+tcagtaagtcgctctctataaaccttttggatgaccattgtacagccacttatagatccc
+aataaatagcacaggagacagagtttttcaatgctcgatcatttgccgatagtattttcg
+tctaacctcagggcacctattatttgatacctaacctaacggccctttcacaatggagaa
+atatatgacatcgggacaaacacaaatggtgggtggccaggagatatgacatggtggcgt
+ctctaagaaacacggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaa
+aacgctcgaaaagattttgccgtgtaatgacctggtacattgactggtcaggaatacatc
+actgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgtataacgcaattt
+acgacggacatcagatcaagttatacagattatttaagtatcacgtgtgcattgggacat
+aagggatctcacacatgccttggaacatttttgctttgtgccgctttttcgctgcactac
+caatccttacttaccagtatattcaaaggtcgttaacagaatgagaaaggttagggctct
+aagttatcgtcgattgggatagacgagacatttgcgagcgccctccacggatacgaatct
+cccatatcaatgtgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaa
+atcaaagtagcactcgcatagcagttattcagaacctaatacacaaaaccgtcaaacatt
+ttctaattctaggtatgggccgatcataggagctaaggtgaaactcataaatgttttgtt
+agatctagcatcctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgt
+atcctttttaactgaactagtcggtcccatttcgtgactgagatctattaaccgataaga
+ttaataacactcgcattcgtatcagctcagagtgaagtttttcaataatttgactgatat
+attaacttctaaaataaccctttaagcctcggatccgtttcccaatcacatcaaaaattc
+ttattccaactatctacggattaacaacgtgcatggggatcgtagtaagaacttgttccg
+atcactttgagtatatcaagttgacggcccggttattattgaatagaaacattcacctgc
+taaattaaataccgcacatcggatacccgatttcagagggccgtcttactaagggcaggc
+tttgttcggtttaactgagatgttcattattttacagtatgcttcaactaatatgtaacg
+aaggacagtggatctgtctccatagtagatcttcagtcgtgaatttcataccgctcctat
+ttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccctagtattctagac
+gaaaattttttctagttcatctgataatttgccaattcaaaaacaaccgctggtttcccg
+gcgcattctctaaaatggaagtcgaacctagagccattatttgtcggtaacccatgagtt
+ccttcttttcagaagttaatacactgtggtcctatacagaggaaaaacagcggttatata
+cgatcgtggcataacaacattggatcaagatagcaatttggctacctattctaattctca
+ctagattcggtattccactacaatatcggcagattaggattggatgaataatcggtgttt
+aagtccggttgcgtctccaatctcctaatttttattaatattgatcttggtgacctattg
+taaataaaaacttcaagactttgaataacggtgaaaagatagaagactcatttgaaaatg
+gatcatccacagatccaaacattagcaagacactaatccccaactagctattctgatcgc
+gatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaattctttttgggctt
+tgttcgatggtgattcagaatctttatccggtcgcttccctgtagctactttgtggggat
+attgcccggggattatagggttgagatcgtttcctaaaagtatttaaaccaagtagactt
+caactaaactacatcagaacatcgtgaagacaccatacgcggtacctttatttaccgata
+acatttcttcaagaaataccggtaagcagcataatgaccctaaacagctcggggtatcgt
+cgtagttttaaattttatttaggttactgctcaaggaataaaaactaactatttaattta
+taataatattacaaggctcacactgattagatttgtctataagacttcgcgatcccccat
+taccggattgtcttaagaataaactagataaaccatgcattttctagataaggcctttag
+tctaattagatacaaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaa
+ccttttaattacccgcaaatcactttatgtcgagactacctctgaaatttattatctacc
+taccgcatgaggacttgaaccatcttgtaggagttatgtttattagctaagattcgttta
+tcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaattgtttttagttga
+gtcaagactgatatataaataagtttccctagttttttcgtggtgggacgatattgaatt
+gaatcttaaccgaagagtttcccactctgtcgcacaataatacacgccaatatttccagc
+cctgcttatgccttaatcggttactcaatctcccattgaagttcattttgatctgcatag
+aagtttcgggcccagccttttttctgccaccttcctccaagctctgtagacgcactctaa
+gattgatgctcacatgtattaattctacattaacataaatatataagtcatgcatcttcg
+agtaaaatatctggttctccaacatgtcctggcacgtatcgttataatgcccatacatgt
+agtattaaaatgattgggttaactggatattaagatcatcgaaattgtaaagtcaaatta
+acaatactgtctcaagaccgtgtattcctcgtgctcggaagggctattacgcttacttcc
+gttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgca
+tcggttagcaagagtataaaagttgtttaaacgaactacttgctttacaataccggtcgt
+atatatcgccgtgaatccagaagattgtcttctttggattatcaaccgagatcctgtgga
+ccgatgttttgggaccttcacagaggactccaggtagagctcgcttttgcattaatctaa
+gaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacaga
+gaaacgtaaattactttaggccgaaaggcacatgagttattatacatatacgagatggtg
+gtatacatcgaattcggggcatacactatagttgcattgtatttagctgctttaaataat
+atgatattaccttccttacataagacattaccggcataccctggttttcaacttgtgggg
+ctttttgacgatcgcactctcatttgatccgagtagggcggtgacccctgcttttcaaat
+acaaaaatttcgctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaa
+tttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcgg
+tcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagt
+cacgggtatcttgatttcattcttcttgtcaattgccgacataggatgaaatcagattcc
+aatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtc
+gacgaagtggatagtatacgggccttttgtacggtgcgatcaactatgaatctcggcgag
+ttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatgacgaattttcggc
+taggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggattccattttacaa
+gacgattacaatgagttacatgtctctcaacgtagtctttccctagtagtctttgaacta
+tttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgccattcatgttta
+tgatggaacaataagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggc
+caaaaacatattcaatttagtacagatccccagaagttaagctaagtgctctaaaatggc
+ctaaacggttatcaaagtaggtctaattactatactaacgggtgcatcgtaataactgct
+gtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaag
+ccttagcgattcttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgc
+aaagattcaaaaatttaatctatgagcagatatgcctgatggtgactacgcgtatgttaa
+ggctaaatgttgacaaccgcacacataatcgaactattgatagtcgggagcataaccagg
+tgaacgtactttgttcacgacatttattgacatgttctaaatacgtctcaaaatcacggc
+gcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtc
+aaacttcatgagaactttagctggcttttggccagtatttagggaccaagagcactagcc
+ttaagctgaatattttgccatttatctactgttataactttaaaacttggtggcaccaga
+cttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtagga
+attgagtttatattatatttaaactaaaagatgatattagcttctgagggcgatagggct
+ccaaatcataaagaggaatatattattacacgattagaaacccacaacatacctcgaatc
+gcccaaaagtttgacgaaacttggcagtactccacatctcagtaatacagttgggagagt
+ctcaaatgttgttttattactcaatgaaccaccctcataatttcactgctgttccattaa
+atttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtag
+atgcataataaaaaaaactgctcgctataacacgatcatcgtgcattcttacttaggagc
+atcacccgcacaataacgtaccttaaactacaacactattagaccgagtactgtaattca
+cgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttg
+cggagaggattcaattattttccattgcacctactccactagattcgataaaagaaggtg
+gtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtga
+accgtcatccttccctaagaaacataaaggtttttaataatgtcgactgtgaactataac
+tgcatcctttcctgacctactccggttccttgttgttatttctgaacgagaccagtagat
+aaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtg
+cccgtacaaacataagaagtcataatcttacttgaaattaattttgccttttattttttt
+tcaggctcgaaattaatgatttgttttttttgaccttctagttacgctaatatgcggtcg
+cctgtggtttctattgagtcctataacgggatgggatctaatacgtttggttactagtaa
+acaaggtataaatttgataccggagtatcaactgtataacatcaagctttatgactcata
+cgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagccactaaggggtgta
+ttacgatagtgacaccaccgagcgcactcactccccaagtagatttatgatcctacgcta
+agtattagatatataaccaaagaggttctagtcagtgcaactcttagaataataattagc
+cggttttgcctttttaggcctaatgcaatattcagctagcccttatgtatctcgcgttcc
+acagcaccactcatggcacgcgtttaaactaatcaaatataatctatgaatgttatgcca
+gtacttgaataaatcaggttttttataagtccttgcatactctcgttatatactgttaga
+gtcttaccccatagaaattctttcatctgcaaacttagaagaattctcagctacggggag
+cataaagtccccaggatgttgacaaatacaacaaatgtggcttatacaaacactccatat
+gaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaatccctccatttt
+ccaatagcagatacctatcctactacctcgtggtattaaattaaagcttgaaatatagag
+ctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttac
+agacgctagagcaaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtac
+gtgtttactagcaacttcgcttattaagacaattgtttataagccataattaaaaacata
+tgttcaacaggttcattgatatttgtaattgcacaggtttttaataaggatctacgtaag
+tataatgaacaaactttttaccagagttatattctgtactttgaaaatgctcctctaccg
+ccttagagactttcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaag
+ggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaat
+ataattttcagttttcgaacacataaccctttgaaaatctgctatttaatgtctcacctg
+catgcactatcttctatactgctcagaacggctatacgtcactatgctccaagtgacgat
+ttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaagtgcggactacg
+tgctctttacaataagccttgtgattgggctataggttaagtcccatattaacgatctcc
+aatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaattacagatagct
+gttagatactcactctaattttggacaacaatcccaatcttggggtcgtctatcgcctga
+agctcgtaaatccttccatcttaaacgattacatattatagacttgttcggggtagagat
+atcacagttgtgcaaacattgtaaatcgatactagtttatgttggtagtctagttgcttt
+taccattccccgaaaaacttgatctactatttcgacaacagtaaacttgaactaggtaag
+tgaaaacagagaatgcctcatagtgccactatttgtccactatatgtaagtgtagcttta
+cataatccactatgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcc
+cggatattacgactgtaactataaaactagttactggtagcgcgccatgtatagatttgt
+tttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtc
+catctcgacttctataaaacgataaagtaaagttgatgttcagcctccttcttatggttg
+catcgagagtacactactcagtgggaaatagatcggggttcctacttcagattgtattat
+ctaggcaattgccgattgtgccatacctggataaaataagctacctacatgtgatgctta
+tctattatcgtcatactaccttagggtgtcctgttgaacgctacattaatctttagccgt
+ttgagatgttccaatggataggagtctaacgcatgatgaagtttaggaaggcagagcatc
+ccactaagtatgtgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtcctt
+ctggttctattctgctgaactattgaatggaaagattggttgacctacgtactatttgct
+tgaagtcatcaatttgacggggtgagagacatatggtgcatactttacggactctatatt
+ttagatcagaagcttagcagtcttctctacaccccctcacgacataattgcttttaagaa
+tctatgtttgattcctctacgggaattcggatccgttcgcatgtgcggtttatctaaacc
+aggggacatatgttcagctaaagcatacgaacactttgctaactagacgtatgtatagta
+gctataaatcccgacgatatttacaaaaagaaatgagactcaaatatatacatagcgacc
+ctacacttattcgcaccctgatctaggcgatcctagcacccacacccgaaagtgagcact
+agtgtcttccgtattaaatttactgcagttgagattttagttgtctactaaggattactc
+taacccgtaataaggatcaagactcggtactagctttactatcattccctatgtgttttc
+ctaactcacaagggtacgtaccagcctatgtaattacaataatgataaagacacaaagga
+agtaactttacaaatgagtctccagttacactagcttagtccctcccatcttgctttgaa
+gtctaaatacgcaatctctgaggatatacagcagaagaacactcataacgttggagtcca
+agaattagactcatagggcccccaacatttaatatgtactgtgagtttgaaggtgttcta
+ttgttaattcctgctcttgatacatgacacgtactccgtgtttaaggcttcggactgact
+ttctttcataagttgagcaacgaaaatttcagaatcgataagttggattcactaactaat
+acggctgattgaaaactccactccggacctatatggtcgacctttatacgtaaccgatat
+aaaacttataggctggtatatcgagccttcctagcgcaatttcggatggggtttcttcta
+ctactcaacaacggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgta
+ggagagcgctgtggagcatgtgtcattatggactggagcactcttaaatcactctgcgtg
+tgctaaacgatagatcataacatgtcctgagtaaattttcttgatacgtcgcaatatacc
+gttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatata
+ctattagcgactcatctcgcctaacacgcacacgtataaactcggaatgactgccgctct
+tacatattagaaatacagactacaccacggaagcattgggtcattctcaaccgctgtata
+aaagatgattagtcttataataagattaccaaagaggcagaatcatgggtagtaaatcta
+ttattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaa
+atattaaccggacgaagtggtttacgtcgtactttcactattagtagtaaatacaaggta
+acaccggggaatagtactaaatataatgatatctatcttcgggagaacgagtcgtctatt
+gctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgtt
+acttttgtctattcaaaagattgaatagttttttatacaaaagccgcatacttatgacgg
+ctagtatacagtttcatcccctagcatcaatgctatggacagtattgaacttataggaaa
+ttcttctaatagggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatg
+gcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgt
+agtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggc
+ccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaata
+ccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggt
+gaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgac
+gagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagac
+gcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataattt
+cacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacaga
+aacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccc
+cgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggac
+gtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatag
+ataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatga
+gtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgt
+atagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaa
+gactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagat
+acttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaat
+aatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttatta
+cagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagatta
+atatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactt
+tcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatt
+tgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgc
+ggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttgg
+tgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgag
+gtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggca
+gcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatca
+aaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatca
+tcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataat
+tataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcacc
+attcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgaga
+catcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacc
+taaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctcc
+ccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaa
+gtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcg
+aaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaaga
+aacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttgga
+agtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctg
+tctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggactttt
+aacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccg
+agccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttac
+ttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacc
+taagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctat
+ggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacga
+cagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtc
+tatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaa
+cttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatac
+gtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggc
+cgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttat
+tatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctg
+acgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaa
+ctaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcag
+gcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctc
+taagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaag
+tcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagcct
+tttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagata
+cagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcat
+tttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacatta
+ggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatg
+aatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaa
+agatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaa
+gaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagctt
+catcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtccct
+tccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcatt
+aaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacat
+acccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatc
+tacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacg
+aagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggt
+agtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaat
+gcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcat
+gaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaa
+taactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactga
+gctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaat
+gaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtggg
+tgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaa
+agaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccat
+tgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcct
+caaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacat
+aaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctac
+gttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacat
+catagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggcta
+ggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagt
+tcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtac
+gtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtg
+cattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggta
+gagatacctttgcaatttttcgatgaaggcgaccgagataaatgagctataacactgtat
+gtcttttgattgctataaaacacagaaacggatattaatttaggccgtaaccaacatctg
+ttatttgacatagaacagatggtcctttacagcgtattccggccttaatattgaggtcca
+gtgtattgtcctcctttaaagaagttgattgtaactgacttaaataagacatgtcaccca
+ttcactgggttgcaactgctggccctttttgtccatcgcacgctaatgtgataacagtac
+cgccctcacacctgcgtttaaaagacataaatgtcgctatgaaggttattcattaatttt
+agctgttttcttagaaaaggtaaatttaaaattgaaaaggctagaaaactaaagttacga
+caaatgtgtttgtcaagtaggcgggcatcattgagattgtaagaaataaagccataacca
+gccccggaatagaaaatgttaaggaaaggcgatcttctttgaattcttattgtcaagtgc
+agtcatacgttcttatcagaggacattgcaataaaatctaacaccctcccttgtgtggtt
+gggccatttgtacttcgaagcgtccaccatgtgcagaggataacggaatgtggttccgtc
+ccataaacgatcattctcgcccacttagtggcgcggtaaatcgctctcatagaggtaact
+ggcctgtaatgtccaatgttaggctaccttctccaactttagtacaacgaataatgtccg
+attaacaaggagtcaatttgtcatgaccagttcattcaggtacttgtatctatacggacg
+cgttccagagtagtatttgaaattttgaggttctactgataagtttagctatcgctgtat
+gtctgaataagaatttaatgtttatcttcgataaataacaattaacaactcctaggtgat
+acactgtgaagtctgctgttccccaaattacatatgctattttgttcacataccatgaag
+ttaagctaagtgctctataatggcataaacggttatcaaactagctcgaatttcttttat
+tacgccggaagcggattaactgctgtagatcaaacacgttaggatagtgtcgttttcata
+tatatctaaattcggtctaacatgcattacccatgcttgataacgtagcacttcgcagtc
+taattatgtaatgtccgtttaaccaaactttaaaaaagtttatctatcaccagtgatgcc
+tcatcgtgactacccggatctttagcctttagggtctaaacagaactaatattactacgt
+gtcatactccggagcttaaccaggtgaaacttatttgttaaccaaatttagtgacagggt
+agaaatacgtatcaaattaacccagcaatacaataagcatgaaaataattgtaatcgggt
+ttgggccggaatcccgcttggcgaaaacttaatgacatagtgtgatgcattttgcactgg
+attgagccacaaactcaactagcattatgctcaatatttggccagtgttctacggtttga
+aatttataaaggccgcgcaaaagtcttgtagttacaaacgcataaatctcgaacgtaata
+ggtttaattagaacatccgtaggatttctgtttatagtagatttatactaaatgttctga
+ttagattctgacggccttacccatacaattaataaagacgaatatattagttatagttta
+ctatccaaataaattaagcgaatcgaaataaactgtcacgatactgggcagttatcaact
+tatcacttatacagttcggacactctatattggtctgtgagtactctatcaaactaactc
+ataagttaactgcgcttccattaaatttcaatacgttcttgtgctgtgtacaaacctata
+atcgaataaatgacacatatggagatgcataataaaaaaaacggctccatatttctcgtt
+aatcgggcattcttaaggaggagcatctcaccaaaaataacgttcctgataagtcttaac
+tattagaccgtcttcgggaatgaacgaaacctcaagctagcatggtatagttcttgatag
+cgcgtaaattctgataatactgggcggacagctggaaattagttgccagtgcacctacgc
+aaatagtttacataaatcaacgggctccgaacgtaaatacaaagggttagttacatcgca
+acaagatgaaaagcatgtatgtctaccgtcatccgtccctaacaaacataaaggtggtga
+agaatctcgtaggtcaactataactccatccttgaagcaactactccgcgtccgtgtgcg
+tagttcgcaacgagaacactactgaaaaaagctaaacaactctcggtacaaatgcggctt
+gtgtcgataaagttggtggtagtgcacggaataacataacaaggaatattatttattcaa
+attttttgtgactgttatttgttttctgcctagaatgtaaggatgtgttttttgtgacct
+gatagttacgcttatttcaggtccacggtgcgtgagagtgtgtcctataacggcagggga
+gcgaagtagtgtcctttagactattcaaggtagaattttgataacgctctataaaaggta
+gaaaatcatgattgagcaataagaccccaacttatcaaaaaaggagttctcgacagcgcg
+tgtacagtccctataacggctgtatttcctgtgtcacaacaccctcccatcgcactcaaa
+atgtagatttatgatcagacgctaacttgttcttagagaaaaatacacgggatactctgt
+gcaacgatttcattaataaggtgcagcttgggacttttttggccgtaggctttattaaca
+ttcacagtaggtagcgagacttcctatgaaccaatcatgccacgcgttttaacgtttcaa
+atataagctaggaagcgtttgccaggacttctataatgcaccgttttttttagtacttcc
+ttactagccttagtttatgttagagtctttccaattacaaaggattgaatagccaaaatt
+tctacaattctcagcgaacgccagcttaatctaaacacgagcttcaaatattctacatat
+cggcaggagtcaatatataaatatgaaaatcgtaccatcctcgtacttttagaccaaacg
+tcttcggataattaaatcctttttcaattaccacagtacgtgcattagaactactgctat
+gaaagtaaaccttgaaatatagtcctcaagagcgtatccaagtacattgcacgtgtatac
+agtcgtataaacgagttgatgttctgacgctagagcttaccattcgttaaacagataact
+aaaatttaatggctgagtgacttagtgttttcgacaaacgtcgcggatgtagactattgt
+ttataagcaatttttaaaaacatatgttcaaaacggtatgggatatgtcgaattccacag
+gggtttatgtaccatagaagtatgtataaggtactaaaggtttaaatctgtgatattcgg
+ttcggtgaaaatcagactagtcacacttagtgtctgtaaattagattgggtgaaggtaag
+cgatcccgaactctacaaggcatgggatgagattctaccgactccggataacactttacg
+atcgcgcataactctagctcttagataagtttaacttgtcgatctcataaacagttcaaa
+atctgcgatttattgtatcaaatccatcctctatcttctataatcatctgaaccgcgata
+cggcactatgagccaagtgaagattgaatccaagaaagctataattggtttattttagtc
+catttaaattaagtccggtataagtgctctgtacaatatgcagtctcatgggcatatacg
+ttaactaccttttgatacttcgaattggtaaaatatcgactatcgatttgcagtaaaagg
+tgtagagtccaattactctttcctgttacatacgatctcttagtttggacaactagccca
+tgatggcgctcctctagcgcatgaacctactttataattacatctttatcgatgaatttt
+tttagactgcggaggccttgagttttaacagggctgctaaatttcttaagcgattagacg
+gtagcgtcgtacgctacttgcttggaacaggcaccgaaaatattgatctactattgcgtc
+aactctattctgctaatagcgatggcaaatcacagaagccctcttagtgacaatagttgt
+caactatatctaagtcgacctttactgtatcaacgatcacggagagaattaccgaatacg
+aaacctcaggactaaaaaacggaaaggatttgtcgacggtaaatataatacttgttaagg
+gtagcgacacaggtatactttgggtgtaaacgtggtgcttcccggaacgattttcagacc
+agaaaattgttccggtaaccaggaaatctcgtctgcgttaattcgtgttagtaaacttga
+tcttcagactccttcttttcgttgcagcgagacttaaattatatctgcgaaatagtgccc
+cgtgcatacttcagatggtaggagataccatttggcccattgtgactttacgcgattaat
+taaccgacatacatctgttcctgagctatgatcgtctgaataaattacggtctcctcttg
+atacctaatggtttctggagacgtttctcatgttcaaatggatagcaggagatcgcttca
+tcaagtttagctacgcagagcatcaaaatatgtatgggaaagtcgatttccaaaccagaa
+gggataaagagaaataacggacttctccgtagattagcctgatattttgatgggaatcat
+ggcggcacatacgtaagagttgcgtgaacgaatattttggacggcgggagacacatatcg
+gccattcgttaaggtctctatattggacatcacaagcttagcagtatgagctactaacac
+tcaagacattattgattttttcaagatatgtttcattcctctaccgctattcccatacgt
+tcgattcgccgggtgagcgaaaccacgggactgaggttaagctaatcaataacaactcgt
+tgcgatagagacctatgtatactagagagaattccccaacatttttacaaaaacaaagca
+gactaaaatagatacagtccctccatacaattaggaccaacatgttattgccgatcctag
+cacacacaccacaaactcagaacttctgtcttacctatgaaagggtctgcacttctgatt
+gtacgtgtctaattagcattaatattaaaactaattaggataaactataggtacgagctt
+tactataagtcactaggtgttttccgatcgaaaaacgggaccttcaagccttggtaagta
+catttaggataaagaaaaaaaggaaggtacgtgactaatctgtctaaactgacaatagag
+tagtacctacatgcttcatgtcaagtcttaatacgcaagcgctctcgttatactgctcaa
+caaaactcataaagttggactccatcatttagaatcatagggaccaaaacatttatttgc
+tactgtcactttgtaggtgttctattctgaattcctcatattgatacatgaatcggaata
+cctgtggatcccttaggacgcacgtgctttctttacgtcagaatacatattgtcagaatc
+gagaagttccatgcaattaagaattcgcctctttgaaaactcatatccccacatataggg
+tccaccgttattcggaaacgatataataattattccagcgttgagcgtcccttaagagcg
+cattttcgcttggcctttcttctacgactctacaacgcaagtggctgtgtggagtttacc
+acagcgcagcaccccatagaactacctctgagagcgcgagatggtggcagtatgctctgc
+agctagcgtttagaacgcgcccgcgcattaaccagtcatattaaaatggactgtcttaat
+tgtcggcattaggagcaatattaactgatgagggtatcggtcgcagaagtaatgacggaa
+atacgcctctagtccgcagagatacgattacagactcagatcccctaacaagcaaaacga
+ttaaatcggaatcactccccctatgacatatttgaaatacacaagaaaccacgcaacatg
+tcccgcattctcaaccgcgctttataagatgttgagtctgagaattagatgacctaactg
+caagaatcatggcgagtttatctagtaggcaagtctgtaccctagggttcgaacgctgtg
+acgtcgtgatcggtctaaggacttagatgataaccaagaactggtttaccgagtactttc
+actattaggagtaattacatgcgttcaccgcggaatacgacgaaattttttcatatcttt
+atgagcgagatcgtgtcgtctttgcattgcaacagtcgctaccagtaattgctgatcaat
+tatagattcattatacagatgcttacttttctctattcaatactgtcatgagttgttttt
+aaataagcaccagaattatgtcgcctagtataatcttgcttccacttgaatcaatgcgat
+ggacagtattctactgattgcaaagtagtctatttcggcttagcagtacgcatgcctatt
+tttttgcaggcacagaataatatgcaactaggattctcggcatccaattaacaggctaaa
+acaccaccgaaagacaggtaatctacgaagttgatgtttactacagaaagcgaatgatat
+cacttggagaacattttagatgcccccttttaatctagactgagtgtaccaatatatcac
+cggtctaccgaatcagcttgaataaaccactctagtactcatgataaccgagcatacaca
+tgtatttctcaatgcactgaaggtgaactgtttacaccataccttgcgaatcaacgtggc
+gacttatacttctgtctttgagtacagcacaccctaatgaatctaagttagttgttgata
+cgaattgtaatttgactggatctcgcctcctcatctagattcttagagaagatgtttctt
+atagccggtactgtaactttattgatctggtttatggtaatcaacattttacctctattt
+aaacgtccttgcgccgtgcactcaatcctgatcggtttagattcaagcgattatcgagtc
+tggaggccgagaaaagaaatgcacagagtaagctctctattgcgacatctacgtagaaac
+tcgcatttcagatcgagtaagcaactctcattgtgttgattcagtaatacaagattacct
+acgcttctacgaaatatactatagatttagcctacgtcacctttagtgtcgagtcggagc
+tttgaagatcggatgcggtgtggactgtgtataggcaattttgctgcgagctcgtgactt
+ttggttgatgtcgatatcaatgggatacctcaaacgtctttatctctggataactcacat
+tgagtataccggtaaaaatttattctattcatctaaatagtcagtgagggctagggtcgc
+aatcacattaggccacatacacatacttaacatgttctattgacccgacccaactttagt
+agcattgtagccgtttatgcaaatatgccaggcgccaaacactagccagagggcattttg
+ttacatttatttaatcgattattacacagtcggaacacgcctacatgcgttcgacttatt
+tgcgacatggtcaacaattcagtaatttaatccaaaacctaaagtcagagacatgacact
+aaaatcacattaaggtcagttagtgaaggaatggctaaccagctagagaatgcatcatta
+acaggcacttattgtcaaatattttccagatctaagcaacatcacgttaaaaagtacaac
+aatcacttaaaacacatcagtccaggtgtaattagaaagccgcttagtaggcaagcgtag
+gagtataaatgtagacaatagtcgggacttagcagacactggatgcagtcatagaagatc
+ttgcataacacgttagggttagagctacgaacgcccatcattaactgcctaaagcgtgcg
+tgagcttagcgctaacttttccaacacgtttgtgatttcgttcataatgtatcaatttca
+cagtcatatacagggagtgtagaaaaatcgcaattaacatacgttgacctatttttgttc
+agagttcagttagagcctaatgattcgagagcaataatcaggacagcctcataggaagtg
+tcaatcacttagaagctatattattataaatcgctctttactgtcgtcgaaggaacgagc
+gagagagaatcagttgcctgcaactggcttaacaatatgatacataaaaatattttcatc
+accactaagacggtggaattcagacttattggcaacttaggatgggactattaaataacc
+cataagatgttgggataaagttacgaaacgaaagggatatagcctgttagataggaaatc
+cccaataaaacatagccggcctccacagcagtgatctattccgccacgcgatatctttat
+accacgcaatataccaataataaaggttaaatgtggttgcgatttaaaaaagatacatat
+cagttgcaccgcgtagcaaatccgtatgtgaagcgtaacctagaattatagcgtctgcaa
+gttctctaagcttcctctgcaagatacaatatgactttttagcttttttactaccaaatc
+tcagaatcttagaaacaggttggtacgtgctactcggaattcccaaagtaccctgctata
+tatgccattccttcattggtccgggctcaccatggggccatcatagtaatagaaggtagt
+aaaactagttgatttccgacttttaacaatcactatcctgacccagatatgggttccgac
+tggcccttactccagtaagggcagacacacagacaacgagaacttgataactttgaattc
+tcaaatcgatcattgcaacgtgacttatttactagcctactcctataattcatacgtcaa
+atacatttcaacggaggaagataataagtaaatattcactaaataatggtcgaaggagtc
+ctttgccaacataagtccacatatgcgctatagattttttcttggggttcatattcaata
+agataaacagcaagagtatcacgtcagcgagtcattgagatcttggctagcattgtgata
+gcatattctacctaaatggtagtctagcacagagtggataagatatcagttagatataga
+caagtactataacagatctcgcttcgttggattgtatggctagctttgatgatatgattt
+tataaaaattgatccagacctgacctggccaattatattcattttttatgagtaaaaata
+gataaccatgaaaatactcaagccccttaggacgtacaaagtggtaacataaatttcagg
+tgttattctgcaaccacacctgttttgggttttcaaaaaggctaagcagattggttttac
+agataatccctgaacactggtatctcccaacgatgtcgttcccaacccttgctgaccttt
+taagctctgctgaagttttgtaaactaggcggaaaatatgttcgatagatccactcgcct
+gaggtagaaattcgtcttagtaacgcctctttggattacacagaatagtgtactgacacg
+tacactgctgcagcagccatacgctaacattaaaattcgttgagtctacatttgttgtta
+ttcggattatgttattgggaatagtatttttattcccctgcgtgaaaccacatggataga
+ttagcctactcctaaagactcccttttggtctacggttcaattctcttactgagtttatg
+ttcgtaattatatcggcgcagtgaatctcctaattatcaccggagttaccagacgccatg
+aacttatggccagaaacattgcatgtggcctacataggattagtatcaagagtttacgtt
+tgcaacgacatttgaccaacttgaccattcctgcttgtagaccgcgggaactcccctgca
+cgcgactatagaagttggtggtggatgtggcttatgccgcaaatatggttttgaaaaaag
+taatctattgcttgatacctgaattgagacatgtataagggctattgccagatgaaaaac
+tgcatataaggtcaaacaatataagaacattatacataggatcttagcgttcctcaggat
+ggtatacgctataaagtctagcttcagcagctaaggagttttgccagtgcggacttccgc
+tggaagattaggtttaaccgccctgacatcttcataaggtcgggcctgattcaaacccct
+ggagtgccgtctcatacttgaattaatcgatggaaaacttcttctagtctaatattatta
+ttaacaaatgacggttcaataaataacaccgtaagggtgggaaactgttaagtgatgaat
+cattttaacctatcatccattagctacagataatgataccccgatccgactagggggtaa
+gtggttgttccgttaggataaaccatgtaaaacgttagagggtttgtagattaattggta
+ttccagataaatgaggtcagggcgagtgatcaattacactgaaaaattgtcagcttgcgc
+ggtagttgttaagacagtataaatgaaggggattcagaagcaagtttctcgattgactga
+atttataaaccagtcgtcaatcatgatttttgtgtcgattaaagcctaaatggtaattta
+aaccattgatatttatcgagtctataaatatctttggttgtatattacttcacaatcacc
+aattctaaatgattcttccactgtgcgggtggagatatcaggacgggttaaggttgacct
+acatcgttttgatacaacaaaaatcaaagcacatggctggggacttctcgatactatctt
+tgagatagtacgggcaagagtgggtgacgcctccctacattttcaagtctatcggataac
+ttctcggtaaaacgctcgcgatatagttttaaagcattgatttaatccacgcaggagcaa
+gttttaccggtcgaatgagaaaattcaacgtaagtgtcatatccagtcatggttagccaa
+aagcatgggttatccaaaaggaataaaacagctcttcaacaaagagatgaggcttcataa
+cttcgatgaatgcgtatggttctgatatatagatcgatgcatgaggacactttattttag
+ccggcgaattaatggaatccatacgttacttatttggacatgacttctaggtgtttttgc
+tgtcccgtttagcgatatttacagattagtatttcgtttctcatagttaattgtatctag
+atactaactcgttgaagacgcataccttgccatttgtacaggacttaactgttccgtgcg
+taatttgaatttcttataggttcttcaaggcacgaatacctcactcatgaccgttcatac
+tctagttaaggtcgggaatactacgtatgcagggaattgtaacctaggagatttacaact
+ctttaaacaagagtcgctgaggtccaggatcaaaacactgaatctcctaacttcgggtgc
+ctccgtaaatcacctagaaacctactcatacatttgcaattttgagatgtaggcgaaaga
+gagaaatctgctttttaacggtatctcttgggattccttttaaaaacacataacgatagt
+aatgtaccaagtaaccaaaagctgggatgtgtctgtgtactgatccgccgtgtcagagta
+gtccgccatgaatattgacgtcaaggctagtgtcatcaggtattgatgttcattgtaaat
+gaaggaatgaactaatgtcaccaagtaaagggggtgaaaatgctccccagggttctacag
+acatagagatggtcagaacacgacccccctctcaacgcagtgtatttgaaatatatggac
+atatctaccttattctgtaattttagatgtgttctgtgtataccgatattgataagtcaa
+taggcttgattacgtatcttaagacaaatctgtttcgcaagtaggaccgcatctttcaga
+ttgtttctttttatgccataacctgcccaggaattcaaaaggttatcgatacccgatatg
+ctgtgaattattattctaatggccactcattcctgcttatatctggaattggcatgaata
+tcttacaacctaaagtctggcgttgcgccagttctacttcgtaccggacaccatctccag
+tcgttaaccgaaggtgggtacgtcacataaaagttcattagaccacactttgtgccgacg
+tatatagatatattacacgtatagggaatgttttctcctaggtgacccgaccttctacta
+aggttgtacatcgtataatggcccattaactacgaggaaagtggtattgacctggtaatg
+cacgttcttcgatatataccgacgaggtaaagtctactattgcaaagtttgacgttatac
+tgataagtttagatttccctggatcgcgcatgaacaatgtatgcgttatctgccatatat
+aacatgttacaaatccttggggatactatcgctactatcatcggaccaaaattaaatagg
+ctagtgtcttatcagaacatcatgtttaccgaactgatctattttccaatttaagctgat
+attacgtccgcgtatttattttagttccccggatgacgattatctgagctacatcataca
+agttagcatactcgccggtgcattgatttcttatttcgctatatcttcaagttcacaggc
+ttcatatagttccaattagcagtataattaggttttgtaactttaaccatactttataaa
+aggttatattgcacaactgatcaagcatccgctataacccgagctttaccagttagcggc
+taataacaaataagatgacttcgtgtcatacgaccgtcatgatcatgctctaacttaggt
+gggaaccaaatttaggcaatgggtagtaataagtataaaatgataccacatatactataa
+caatgaaattatttgtaatccggtttgccaacgtatcccccttcgcgataaattaatgac
+atagggtcatccatgtgccaatcgtgtgtgccaaaatctcaaattcaattatcatcaata
+ttggccaagtgttataagcgttgaaagtgatataggccgccaaaaagtagtctacttaaa
+aaccaatatttatcgttcgttattgctggtagtacaacatcacgagcatttctcttttga
+gttgatttatactatatctgctgatgtgattatgtcccacttacccagaatattaagaaa
+gtcctagattgtaggtatacttgactataaatataatttaagactatacaaataatctgg
+ctacattatgccatcgtagaaactgataacgtagtaacgtcggacactagattttggtcg
+gggagtaatctagcatactaacgaatttgttaaatccgctgaaagtatatgtcattacct
+gcttggcctgtcttcaatacgtttagactattaaggactcatttcgagatccagtattaa
+ttatacgcatccatatttatactgaagacggattgagttaggacgacaagctaaacaaat
+attaagttaaggattagtattatattgtagaaactcgtcgggttggaacgattcatcatc
+atagaatgcgttacttattcagagagacttaattcggttatgactggcagctcacctgga
+aagtaggtgaaaggcaacagaagaatattgttgactgaattctacgggctacgaacgtaa
+ttacaaagcggttcgtaaagagcataaagatcaatacaatggatctctacagtattacgt
+aaataacatacataaacctggtgttgattcgactagctcatagattaatcattaattgaa
+gctacgaagacgcggaagtctgcggagtgagcaaacagtaatcgactgataaatgcttat
+aatatcgcgcttaaatgccgcatggtgtacattaacgtgggggtagtcaaaggaatatat
+ttactaggaatattagttatgcaaatgttgtgtcaatgtgatgtgttttatccagacatt
+ggatgcatggctgtgggggcacaggatacttaccattagttcacctacaagcggcgtgag
+agggtctcagttttagccagcgcagagaagtacgggcctttagacgattaatgctagaat
+tgtcataaacctcgtgaaaagctagttaataatcatggtgctagaagaacacaacttttc
+tataaaccagttctcgactgacagtcgtaactcactatatcgccgctttgtactgtcgca
+aaaaaacctcacatagaaagaaaaatctactgggtgcatcagtagagatcgtgttctgag
+agataaatacaccggatacgatctgcatcgagttcatgtattaggtcaagcttgggactg
+ttgtgccagtagcattttttaacagtcaaagtagggtgagacacgtcatatcataatata
+tgccatcgaggtttaaagtttatatgataagctagcatgcgttgcaatcgtattcttgaa
+tgctccgtggtttgtactaattcctttatagactgagtgtatcgtacactcggtacaatt
+acaaaggatggaagagcaaataggtcttcaattataacagtaccccaccttaatctaaaa
+accagcttcaattagtattaatttcgccaggagtatatatataaatatctaaagactaaa
+agactcgtacttttacaacttacgtcgtagcataattaaatcatgggtaaatgtcatcag
+taagtgcattagaaatactcctttgtaaggatacagtgaatgtgtctcagcaagtcagta
+gaaatggaaattcatactcgattaaggcctataaaactgttgttggtatctacagagtga
+ttaaaattagtgaatcagattacgaaaatgttttcccgctcgcacttacgcgtttagaca
+aaagtacaggtggtacaattggctgtagtagaattttggtataaaataggtgataaaccg
+gatgggtgtgggcgaattcaaaagcggtttttgttccatagaactatgtagttggttata
+aaggttgtaatctcggagattaggttagggcttaatcagaatagtaacaatttctctatg
+taaagtacagtgggtgatcgtatgagttcacgaactcttaatgccatgcctggacaggat
+aaacaatacgcatataacttgacgatcgagcttatatcgacctatttgagaagtttaacg
+ggtcgatataatatacaggtcttaatagccgattttttctagaaaagcaatcctatatct
+tagttaatcagatcaaccccgtgaacgatatatcagcaaactgaacattgtatacaacat
+tcctttttgtccgggtggggactccatttaaagtatctcacctagaactcagcggtaata
+gatgcagtctcttgcccagttacggtaactaaatgttgatacttagaattgctaaatttt
+agtctagacatttccaggtaaaccggtagacgacaatttctctgtcatctgtcataagat
+cgcttagtgtgctcaaattgcaattgagggccctactatagacaatcatcagacttttta
+attaaatagttttccatgaatgtgttgtcaaggcggaccccttcacttttatcacggctc
+ataaatgtcgtatgactgtagtcggtagcggccttcgagtcttcaggggaaatggaaaag
+aaattaggcttctaagatggactataatcgattaggctaattccgttcgcaaatcacaga
+agcaatcttactcaaaattgttggaatcgatagcgaacgcgaccgtgaatgtttaaaagt
+gctcgcacagaattacccaatacctatcatcacgacttaaatacccaaagcagttgtagt
+cgcgtaatagattaagtctgaagcctagagacaaagggatactgggcggggaaacctgct
+ccttcacggtaacatggtaacaacagaatttggttaaggttaaaacgaaatatactcgga
+gtgaattactgttaggtttcgtcatcggatcaataagtagtttccgtgaagacactctta
+tattagatctccgaaattctgacccgtgcattaggcacttggtaggagattccatttgga
+acttgctcaatgtaagccagtaatgttccgaaataattcgctgcaggagcgaggagccgc
+tgaataaaggaccctcgcatcttgttaccttatggttgagggtcaccgttctctgcgtca
+attccagagctggagatacattcatcaacgttacctacgcacagaataaaaagatcgagc
+gctaactcgttttcctaaacacaacggatttagacaaattaccgaatgcgccggagagta
+gcatcttagtgtcatgcctatcatggcggctcagtacgaagagttcaggcatcgaatatt
+gtggtagcccgcactcaaagttccgccattaggtaagctatatattgtggtcagaacttg
+aggacaactatgagctactaaaaataaacaattttgtcatttgttctagatatgtggcat
+tcatcgaacgcttgtaccagaagttacattcgcagcgtgagcgaataaacccgaatgagc
+gtaacattatcaataacatatagttcagatagagaacgaggtattcgacagagaattacc
+caacattggttattaatctatgcagaataatttagataatgtcactacataatattagga
+ccaaaaggtgattccccagaagacaaaacaataaacaatctcacatattcgctagtacct
+atgtatgggtatgatcttctgattggacggggataatttccaggtatattaaaacttatt
+accataatctagacctaagagaggttatataagtaaagagctgtgttccgatagaaaaac
+ccgaccttaaagacttgcgaagtaaattttgctttaacaaaaaaacctacgtaagggaat
+attctgtataaactgaaaagtcaggtgtaactacatgagtcatgtcttcgattaattaca
+atgcgatctcgttattctgatcaactaatatcataaactgccactacatcttgtacaatc
+attcgcaacaatacttttatgtgctaaggtcacgtgcttcctctgctatgctgatttaat
+cagattcataaaggaatacgaataactctggatccattaccacgcaagggatttatttac
+ggctgattactttttggctgttgacagaactgccatgaaagtaagatgtcgcatcttgca
+taaataatagcacctaatatagccgacaaagtgattccgataacagattttaagttgtcc
+agccttgagactccatgaagaccgcttgggagcttccccgtgattagaagaatctaaatc
+ccaagtggatggggggagtttaaatctcagcaccaacaaatagtacttcctctcagagcg
+cgtcatggtcgaaggagcctatcctgatagaggtttgaaagcgcacgcgcatttaactgt
+catattaaattggaatctcgtaagtgtcggcagtacgacaaattttaactgatgtcggta
+tacggagaagaaggaagcacgcattgaagcagctacgcagaactgagaagatgacactct
+aagatacaattaatacaaaaacgttttaagcccaatctatcaacagatgtaagatgtcta
+atacacaagaataaaaccttcatgtcccgatgtataataacagctttatttctgctggtc
+gaggtgaagtagtggaaattactccatcttgctgcgcgtctttatagtgttggctactct
+gtaaccgacgcgtccatccctctctcctagtgatccgtatatccaattagaggataacca
+acatctgcgttaccgacgaatttaaatttttcgactatttaattccgttcaaacccgtat
+tcgtagtaagtgtttcatagatttatgaccgacatcgtgtacgagttgcagtgcatatgt
+agataccactaattgctgatctaggatacatgctttataaacatgcttacttggctattt
+tatttactgtcatgtgggggtttttattttcaacaagtatgtgctaccattggataatct
+ggcttcaaattgaagatatgcgttccaaacttgtctactgtttgctaagtaggagttgtc
+ccattagaactacgcagcacgtggtttgtgatcgaaaagaataattggcaaatacgaggc
+tagccttcaaatttaatgcagattactcctcagaaacacacgtaagcgacgaacgtgatg
+tttactacacaatgcgtatcatagaaattcgtgataatttttgttccaacctttgaatct
+agactgagtggaaaaagatttcaccgggataccgtttatgctggttttaaaaactcgtcg
+aatcatcttataactgcattcaaatggatttctcaatcatctgtacgtcaactgttttaa
+caataacgtcagaataaaccggcacaatgagacggcggtctttcactacaccacaccctt
+aggattataagtgacgtgtggattcgaattctaaggtgacgggatctacaagcctcagct
+acattaggtctgaagatctttcgtatagccgcgtatgttactgtttggatatgggttatg
+ctaatcaacagttgacagcgagtgaaacggccttgcgacctgaaatctttacggttacct
+tttgattcaagacaggatcgacgatggaccacgtgaaatgaattcaaaactgtaacatcg
+cttgtgcctcagcgaccgagtaacgacaagttcacatcctctatgcaactatcattgtgg
+tcattaaggtattcaagattaactaagagtcgaccatatattctagagttttacaattag
+gaaccgttagtctagactaggagcgtgcaacatcgcaggaggtgtggactgtcttgaccc
+aagttgcctgacacatagtgtcttttgcttcatgtccttagcaatgcgatacctcaatcg
+tagttttatcgggataaataacatggtgtttaaccctattaatggtttctattaatctaa
+attgtaaggcagcccttgggtcgaaagcacattaggccacatacacagtatgaaattgtt
+cgagtgtccagaccataattgactaccatggtacacggtgttgctattatgactcccgca
+aaactcttgacagagggaattttggtacattgatgtaatcgatgatttaacagtaggaac
+tagacgtcatccgttagactgagttccgacatgctcaaattgtcaggatttttatccaat
+aactaatggctctcacatgtaaataaaatcacattaacgtcacttagtgatggattcgct
+aaacagatagactatcattcatgaactggcactgtttcgattatatttgcaacatcgaac
+atacttaaagttaaatacgacatcattcaattaaaaaaattcagtacacctctaatgagt
+atcccgctttggaggaaagagtagcactttaaatggacaatttaggccggactttcctgt
+aaatggatgaagtcattgtacagcttgaataaatcgttagggttagtccttacatccacc
+atatgttaatgaataaagcctgagggaccttagagctaacttgtccaacacgttgctcat
+ttacttaataaggttgaaatgtatcagtaagtgacagcgagtgtagattttgaccattta
+actgaccttcacagttttgtcttcagacgtcacttacaccataatgatgacagagcttgt
+agatgcacacactcattcctagtgtaaatcaagtagtagctagattattataaagagata
+ttttctggcgtcgaacgtaacacagagagagtataaggggcatgataatggcttatcaat
+atgtgtaagaaaaagtttttaatatcatctaactcggtggaatgcacacttatggccaac
+tgaccttgggacgagttaagataccataagaggttgcctgtaagttaagataacaaaggg
+atattccatctttgtgtgctaagaacctatttatatttgcagccataaaaacctctgtgc
+tatgcagccaccagagttatttatacaaagaaagagaccatttagatacgttaattctgc
+ttgcgatttattaaacagacatttcacgtccaaccactacaaaagccctatcgcaagacg
+atcattgtattatagcctatgcaacgtagctaagcggccgaggaatcataaaatatgaat
+tgttacattgtttactacatatgatcacaatctttgtaaaaggttcgttcgtgatactac
+catgtacctaactaacctgagatatatgcaatgacttatggggtcagcgcgcaacatccg
+caaagcatagtaatacaaggtaggaaaacttctggatttcccaaggttataatgctctat
+actgaccaagagatccgttacgactcgcaatgaatactctaagggcactcacaaagaaaa
+ccactaattgataaatttcaatgataatatcctgaattgcatcgtgtatgagttacgaga
+agtcgcatttaatgaattagtcatagaaatgtcatagcaggaacataattactatatttt
+aacgatttaatcgtagttggagtcctttcccaaattatgtcatcagttccgatttagatg
+ttttcgggcccttcttagtaaagaagttaatatccaagactagctcctcacccacgcatg
+cacatattcgcgagaagtctgatagaatattcgacagaaatgcgactctagctcacactc
+gttaactgatcaggtacttatagacaagtacgttatcagatatcgcttcggggcattgtt
+gcgctacctttgtgcatagcagttttgaaaaattgttcaagacctgaacgggaaaatgat
+attatttttttaggaggaataatacagtaccatgtaaatactcaaccaccttacgtactt
+cttacgccgaacatatatggcacgtgttattcggctaacaaaactgttgtgccttttcta
+taaggataagcagattcgttttaaacatatgacctgtaaactgggatctacaaaagaggt
+acttaaaataaattgcgcaacggtttagatctgcggatctttggttaaagagcaccatta
+gatgtgccatacttcctatcgcctgagcgagaatttagtctgaggaaccactcttgggat
+ttaaaacaattcggttaggacacctactcggcggatgaagcaatacgataacattaaaag
+tcgttcagtctaattttggtcgtagtacgatgagctgatggccaattgtatttttattaa
+cagcactgaaacaaaatggagactttagactaatactaaagtctcaatgttcgtcgaacc
+ttaaatgctcggaatgaggggatcttcggaagtatagcgccgaagtgtatctcattatta
+taacaccagtgtacagacgacatctaattatggccagaaactgtcattgtgccattaaga
+ggattagtagatagtctggaccgtggaatagaattttgaccaaattgaccagtcctgctt
+gtagacagcgcgatctaaactgcacgagaatatacaagttggtggtgcttgtggctgagc
+acgctaagatgcgtttgtttttacgattctagtgcttcttaacgcaattcagtcttctag
+atccgctattccaacatcaatatctcaatttaaggtcaatatatataacaaaattagaca
+gagcagctgacacttacgaagcatcgtagaaccgatatagtcgaccttatgatgatatgg
+acgtgtccaagtccgcacttccgatgcatcttgacggtgaaccgaaatgaaatcttcatt
+agggcccccatgtgtcaaaccactcgagtcccgtctctgaagtcaagtattactgcgaaa
+aattcgtctactattagtttattatgaacttatgacgcttaaataaattaaacagtaagc
+ctgggaaaatgttaaggcaggaatctttgtaacagttcataatgttgctaaagattatca
+gaccccgtgaagacttcgggctttgggcttcgtaccgtagcataatacatctatatagtt
+agaggcttgcgtgttgttgtgctattccacatatagcagctctgggcgactcttcaatga
+aaatgaaaaatggtaacctggcgacctacttgttaagtcagtttaattcaaggggattaa
+gtaccaagggtcgagtttctctgtatttattatactgtaggcaagaagcttttttggcga
+gatttaagacttaagcctatggtaaaaatttgatagtgagcgactatagtaagagatttg
+ggtggttagtaattaaaattctcctatgctaaatcaggcgtacaatctgagggtgcacat
+ttctcgacgcgtgaaccttcaccgaaagcgtgtggattatacaaatttcaaacatattgg
+cggggcacttatccataatagatttctgtttgtacgccaaactctgcctcacccctccat
+aaattgtattggctagaggttaaattctccgtaaatagagacacatatagttttatacaa
+ttgtttgaatcaaagcacgagaaacttttaaccgtacattgacaaatgtcttcggatggg
+gcagagcatctcttcgtgacccaaatcaatcgctgagcaataagcaagaaaacacagatt
+atacaaagagatctggatgaagatattcgtgcaatcactatcgttatgttagagagttcc
+atgcatgaggactcgttttttgaccaggagaattaagccaagaaataactgacgtatttc
+caaatgaattctacgtgtttttcctgtcacctttagccagtgttaaagatgactatggag
+tttcgaataggttattctatagacattataacgagtggaacacccataccttcacagtgc
+taaaggtaggaacgggtacgtcaggtagttcaagggattttaggttcttaatccaacgaa
+gaaataacgcatcacccgtcattctattgttttcgtcgggattacttagtaggcagggta
+ttctaacctacctgagttacaaatctttaaaaaactggccatgaggtcatggtgataaaa
+tctgaatcgcctaaattcgcgtccctaaggaaatatactagaatccgtctcagaaagtgc
+aaaggttgacttcttcccctaacacagaattctcagttttatagctatctagtggcattc
+ctttttataaaactttacgtttgtaagggtccaactttacaaaagctcggatgtgtatgt
+gtaatcttccgccgtgtaagacttggaacccatgtatattgacggcatggcgtggctaag
+caggtattgatcttcagtgtaaagcaaggtatgttctaatctaacaatgtaaagccgggg
+attagccgccaaaggggtctaatgacatagagatgctctgaaatcgtaccaactataaaa
+gcacgggatttgaaatatagcgacagatcttccgtattctgttagttgacatctgtgctg
+tctttaccgattgtgatttggctttagcagtcatttagtttcgttactcattgctcgtgc
+gatagttccaccgaatatggcacattcgttctttttttccattttactgcaaaccttttc
+aaaagctgatcgataccactgatgatggcattgattagtcgattggcaactatgtcctgc
+ttatatctccaattgcattgaatatagtaaaaaataaaggctcgccttcccaatgggcta
+cggagtacacgaaaaaatcgcaactcgtttaaccaagcgccgtacctaacatataagtga
+ttgagacaaatagttctccagacgtattgagatatatgtctcctataggcaagcgtttct
+aattgctgaccagaaattagaattaggttgttaatactatattcgaccattttattccac
+gaatgtgctattctactggtattgctccgtatgcgatatataaccaacacggaaagtcgt
+cgattgcaaagtggctccgtagaatcatttctggtcatttaccgggagcgcgcttgaaca
+atggatgcggtatctgccatattgttattgttaaaaagacttccgcttactatcgcttcg
+atcatcggaaaaatattaatgaggattgggtcgtataagaaaatcatcttttcagttcgc
+agatttttgccaatttaaccggttatttcgtcagacttggtagtgtagttacaagcatca
+cgattatatcagctacagaattaaactgtcctgactcgacggggcagtgtgtgagtattg
+cgctatatattcaaggtaacaggaggcatataggtcatagtacaaggataatgaggtttg
+ctaactttaaaaattattgatttaacggttgattgaaaatctctgcaagatgacgctaga
+acacctgatgttcaagtttgccgataataacatataagatgaattactgtctttagaccc
+tcatgttaatccgctaacttagggcggaaacaatgttaggctatgcggagtaagtactat
+attatgataccacatagaatttaacattcatatgatgtctaatacccgttcccaaccttg
+caaccgtcccgattaattaagcaattacggtcatcaatgggccaatcctgtctcaaaaat
+tatcatattcaaggttcagctattttggcaatgggtgagtaccgttcttagtgatttacg
+aacccataatctaggcgacttaatatacaagatttagagttacgttttccgggtagtaca
+tattaacgaccatggatcgggtgaggtgttgtattagttatctgatcttgtcagtagctc
+ccaatgtcccagaatattatgtttctactagagtgttcgtatactggaatttaaatatta
+tgtaagactagacaaattttatggatacattaggccatcgtagaatatgatatagttgta
+acgtccctctatagattttcggagggcaggtatattgcttaataaagatgttcggaaatc
+agcggaaaggatttgtaattaactgatgcgcagcgcttaaataagtttagactattaagc
+tatatgttcgacagcatgtagttttttttaccagaaagtgttatactgatgacccatgga
+ggtagctcctcatgataaaaatattgttacttaagcattactattatagtgttcaaacta
+gtaccgttgcatactttaagaatcagacatggcgtttcttatgcagacacacttttttag
+ctgttgacgcccacctcacatccatagtaggtcaatcgcataagaacaatattctggact
+gttttattacccagaagaaagttttttctttccggttcgttaagacaataaagatcattt
+cattcgttctcttaacgatgaactaaagtacttaaagtatccgcctcttgtttcgactag
+cgcatagtgtaataattaaggcaagataagaagaacaggaacgcgcacgtcggagataac
+tctaatagtctctttattccgtttaatatagcccgtaattgcaccatgcgctacagtaac
+ggccgccttcgcaaacctatttatgtaattccaagtttaggtatgcaatggttggggcaa
+tgtgaggggttttatcaagactttcgttgcttcgcggggggcgcaaagcagactttacag
+tagttaaccgaaaaccgcagggagtcgctctaagtgttaccaacccctcactactacgcg
+aaggtactcgattattccttgaatgggctgaaacatcgtgattagcgtcttatgattcag
+gctgatagaagaaaacttattttctatattccacgtatacaatcacactcgtaactaaat
+agttcccagcgttgtaatgtcgctataataaataaaatacaaagaaaattcgtctgggtg
+cataagtacagttagtcgtctgtcacataaataatccgcagtcgatctcattacaggtat
+tgttgttggtcaaccttcgcaaggtggtccaagtagcattgttgaacagtaaaactaccg
+tcacacaaggaatatcataatagatgccatacacggttttacttgatatgtttacagtcc
+ttgagttgcaatcgtagtattgtttcatccggggtgtgtacgaagtaatttagacaaggt
+gtgtagcggtcactaggtaaaatgacttaggatggatgagcatttaggtattctatgata
+acactaaccatcatgtttctaaaatcctcaggaaatttgtattattttaccaacctgtat
+ttatagaaagtgcttttgacttaaagaagccgaagtgttcaaattaaggagtacctgatt
+gaaagaatggggaattgtaatctgtaactcaattacaaataagccgttctaaggattaag
+gctttgtgtctaagcaactcacgtgaattcgaaattcatactcgattaacgactttaata
+ctcttctgcgtatctacagactcatttaaattacggaatatgttttcgtttttggtttcc
+agctcgcacgtacgcgtttacaaataaggacacctggtacaattggctggagtacaatgt
+tggtttttatttgctgattatcccgatccctgtgggcgttggcataaccgggttttcttc
+aagactactttcgtgttgcttatatacctggtaatatcggtgagtagcttagggcttaat
+cacaatactaacaagttctctatggattggacagggcggcatccgttgactgaacgatct
+attaatccattccctgcactggataaacaagacccatttaaattgaccatagagatgtta
+gcgtcatatttctgttcgtgatagggtacatatattataaacggattatgagcagtggtt
+ttctagaaaagcattcatagttaggagtgtatcagatcataccactgaaccatagagcac
+aattctctactggctatacttcattcctttttgtccgggtggggacgaaatttaaaggtt
+ctaacctagaacgcagagcgaattgatcaaggcgctggccaagtgaacggttctaaatgt
+tcttaatgagaattgcgtattttgactattgacagggcatcgtaaaccgctactcgactt
+ggtatctgtaatctgtatgtagatagagtacgggcctataattcaaattcagccaccgaa
+gattcacaatcttcagacgtttgaaggaaagaggtttactggtatgtggtgtcaagcccc
+acccattctctgttatatccgagcattaatgtagtttcactgtactacggtcacgccgta
+gagtcggcagggcaaatccaaaacaatttaggctgagaagtggcactataatagtttagc
+ctaagtcccttcgctaataactcaacaaagatgacgcaaaagtcggcgaatagattgcgt
+tcgcgtaagggtatcttgaatactgatagctctcatggtaccaagaactttcataacctc
+tttatttaccaaacctgttctactagcgttagtgttttagtctgtagccgacacaaaaac
+cgagaatggccggcgtaaccggcgcctgcaagctaacatgggatcaaaactattggctta
+acgtttaatcgaatgagactagcactgtattactctttcgtttcggcagcggatcaataa
+ggaggtgacggcatcactctcttatagtagatatcacttattctcacaacggaagtagga
+tcttccgtcctcattaaatttgcaactggctcaatgtaacactgtaatgttaacaaagta
+tgagctgaaggtcagagcagacgatgtagtaaggtccctcgaagctgcttacagtatcct
+tgaggctcaacgggctatgcggaaattccagacctcgagttacattatgaaacgtgtcat
+tccatctcattaaatagttcgtgccctatcgccttgtaatataaacaaccgtttttgtct
+attttcccaaggagaaggagagtagcagcttagtggcttgcctatatggccccctaagta
+cgtactcggcacgcttagaagattgggctaccccgcactatatgttcccaaagtaggtaa
+cctagatagtgtcgtatgaaattcaggtcatcgatgagagtataaaaatatacaattttg
+gcaggggttatacattgcgggcatgaagagtaacattggacatgaacggacattcgaacc
+ctgtgagtttaataccctatctccggatcattataaagtaaatatacgtcacttactcta
+cgtgcgtttagacagtctttgaaactaaattggttatttttctttcatctagatttgtct
+gtatctaactaaattatagttccacataaagctgattcaactgaagacataaatataaac
+tttctaacatagtagcgaggaaagagctatgcctagcatcggatcatgcgtccgcgagta
+gttcctggtagagttaaaagtttttccagaatctagaccgaacacagggtagtgaacgaa
+agtgcgcggtgaacatacataataccgaacgtaaacaattccgttcgtattgttgctgta
+tctatatttcctacgtaaggctatttgatctataatatgaaaagtcacgtcgaaataaat
+caggaagcgcttcgagtatgtacattcagatctccttagtatcatcaaattatagatttt
+acggccacgaattattggtctagatgtcccaaaaataatttgatgtcagtagcgatcgtg
+cttcctcggagttgaggttggaagaagagtcattatgctataccaagaactctccatcca
+gtacctagaaaggcaggtatgtaccgctcattaattttgcgatcttgacagatctgcatg
+caaagtaacttgtaccagatggcttttataatagaaactaagtttcccgaataacggtgt
+acgataacagatttttaggtgtacagacgtctgactcaatgaacacacattgggacctgc
+cccgggaggagtagtagataattaccttctccagcgcgggtcttttaatatcacaacata
+aaaatactaattaatatcacacaccctcatcctcgatggagcctagcatcatacacgttt
+gatagacaacgccaattttactgtaatatgatattcgaatctagtatgtggacgctgtac
+cacattgtttaaaggagctccctttaccgacatgaacgaagcaagctttgtacaagatac
+gaagaactcagtactggtaactataagagacaatttatacataaaagtgttaagaccatt
+atataaaaagaggtatgaggtctttgtaactacaataatacattcatcgaacgatggaga
+ataacagagttatttctgctgctcgagctctagttctgctaatttctcaatcttgatgcc
+actcgtttgagtcttccattcgctcttaacgacgcgtacatccctctctcctactcttac
+ctatatcctattactggttaacctacatctccgggaaagacgtaggtaaagtggtccacg
+attgtattcacttataacacctagtagtactatgtgttgctgagagtgaggacacactta
+ctctacgagttcaagtccatatggacattacactttttcagcatctaggtgtcatgatgt
+attaacagccgttaggggctatttgattttatcgattgtcggcgtgtgtattttcaacaa
+ctaggtgctacaattcgtgaataggcatgaaaattcaagattgcagttcctatcttgtat
+aatctttcctttggacgagttgtaccatttcaactaacctgcaagtggggggtcatccat
+atgaagatttgccaaatacctggagaccctgaaaagtttatccagattaataataacaaa
+caaacctaagcgaagaacgtcagctttaataaactatcactatcatagaaattcctgtta
+attgttcttccaaacgttgaatagactatcacgggtaatagattgaacacggagaacgtt
+tatccggcttgtaaaatatcgtcgaatctgctgataactcaattatattcgatggagaat
+tcatatctaccgcttagcttttaaaaattaagtcagattattccgccacaatgagaaggc
+gcgagtgcactaatcaaatcacttaggattattacggacgtctgcattacaatgctttgg
+ggtagggttatacaagcatatgattctttaggtctcttgatcgggcgtttaccaccgtag
+cttaatgttggcatatccgtgatcctaatattctgttgtcagcgtgtgtataggaatgca
+caacgcaaatctttaagctgacctgttcatgaaagacaggagacacgaggcaccacctca
+attctatgcaaaactctaacatagcgtggcactatgagtacgtgtaacgacaaggtctca
+tactcgatcctaagataattctcgtctggaaggttttaatctttaactaagagtagaact
+tagtttattgacttttacaattaggatacggttcgcgactctaccacagggcatcatacc
+tggagctctgctatctcgtgaccaaagtggcagcacacatagggtcgggtcctgcatcta
+ctgagcaatccctttaagcattcctagtttgagagccatttagatattgctgtttaaacc
+gattaatggtttctattattataaagtgtaacgctcccattcgggacattgaaaattagc
+aataagacaatgtatgatattcggcgagtctcaacaacattatggtctaccatgggacaa
+ggggttgatatgatgaatccacaaaaaatagtcaaacacccatggttcgttaagtgaggg
+tatccaggtgttataaggacgatctagaagtattcaggtacacggtgttcagacatgctc
+taattgtcaggttgtttataatttaacgtatcgctctctattctaaataatataaaatta
+accgctcgtagggatgctttccagtaaaagatacactatcattaaggttatgcaaatgtg
+gcgatttgatttgaatcttagtacattcttaaacttaaatacgtattatttaaagtaaat
+atattatctaaaccgcttttgtctatccacatttcgtcgaatcacgacctcgttaatgcg
+acaatttacgaccctctttcatctaaagcgatcatctatttcttctgattgatgtaatac
+tgacccttactccgtacatacaaatgatggtaagcaagaatgactgacgctcctgtcacc
+tttcgtggcaatcaactggcgctggtactgaagtagcttgaaagggatatggatgtgtat
+gccaggcttcattttgacaatttttctgtcctgctcagtgttgtctgaagtcgtatcgta
+cacaataatgatgactctcattgtagatccaatcacgctttcctacgctaatgaaagttc
+tagatagtgtaggtgttagacagaggttagcgcctacatccttacacacacagtgttgaa
+cggcaagcataatcgagtatcaatagctgtatgtatttgtttggaatatcatatttctcc
+cgcctttgaacaatgatgccaaaatgtcctgccctagagttatgataaaataactgctgc
+cctgtaacttaagtttacaaaccgatattcaatcgttgtgtcctatgaaaatatttatat
+ttgcaccaagaaaatcatctgtgcgatgaacaaaacacagtgatttataaatacaaagag
+tacatttagttaccggattgcggcttgacatttattttacagaattttatcggcaaaaca
+cttcatatgaactatcgcttcacgataagtctatgatagactagcattcgtagagaacag
+gaagagcaatcattatatatgaagtgttacagtgggtactacatatgagatcattaggtc
+tatatccggccttcctcataagaccttggaaatatcttacatcagagatatcaaaggaag
+tatgggcgaacccagaaaaagccccaaagaatagtaattcatcggacgtaatagtctggt
+tttaactaggggttattgatatttaagctaaaagagttccctgaacactcgaaatgtata
+atctatcccaactaaaaaagtatacctctaattcagaaatgtcattgagattagactgat
+gtcaatacgctaggaggtaagacaagtagaagtttttgatttaggaattgaaatgtaata
+cctccatcttaagttctatattttaaagttttatgcggacttcgagtaagtgcacaaatg
+atggcataagtgcccagttacatgtttgcggccccgtatgagtaatgatctgtttatcaa
+tctctagctactatcccacgaatgcactgatgccagtcatggcgcttacattagtcgaca
+gaaatccgacgatacctatcacgcgtgaactgttctggttcttattcaattcgaagtgat
+ctcagatacattacggccatgcttgcccttcatgtctgctgagcagttttgttataggct
+gaatctcctctaagcgaaattgataggatttttggtggtcgatttagtctgtacctgctt
+attaagattcaaaatgacctacttcttacgccgaaatgatagggatcggctgaggaggat
+aaatatacgctggtgcctggtatttatccagaacaagttgcctgtgtatcagatgaactc
+taatctccgagataaaaaacaggtacgtaaaataaaggccgcaaagggttacatctcagg
+atcgtggcgtatagtccaccattagttctgacttacttaatatagactgaccgagattgt
+agtatgtggatccaagcttgccatgtaaaacatgtcggttagcaaaacgtataggagcat
+gatcaaagaagagttaattaatagtactgcactataattgtcggcggagtaccatgagct
+gttgcccaattcgatgtttattaacagcacgcataaaaaatccagacttttcaattagaa
+ttaactataaatggtccgcgaaccttaaatgatcggaaggacgggatctgccgttgtata
+gaccccaactctatctaatttttataacacctctgtaatcaacaaatcttattatgccat
+cattatgtcattcgccaagtaagtccagttcgagattctctggaccgtgcaatagtattg
+tcaaattatggtaatggaatccttcttctaacacccttagaaaagccacgagaattgaca
+agttgggcgtgcttgtccaggagcaacataagtgccgtttctttttacgatgatagggat
+tcttaaagcttttctctattctagatcccagttgccatcatcaatatctcaattgatgct
+cattatatagttcttatttagtatgtccagatgtcactgaagatcctgcctagaaccgat
+attctcgacaggatcatcagttcgacggggcaaacgcacctatgcacatccatcttgacc
+gtgaaacgaaaggaaagagtcagtaccgacccaatgtggaaaaaaactcctgtccacgat
+atgtaggcaagttttactgcctttaattagtagtcgattagtgtagtttgatattatcta
+ccttatagaatgtaaacagtaacccggccttaatggtttggcaggattctttgtaaaagt
+taataatgttcataaactttatcagaaaacctgaagtagtccgcctttcgcctgcgtaac
+gttgcagattaattcgttttacggagtggcttgcgtcttgttgtccgagtacacatattg
+ctcctctcccccactcttctaggaaaatcaattatgctaacctgcagaccttcttcttta
+ctatctttaatgcatgcccagtatgttcatagggtagacttgctatctattttgtataat
+ctacgaatgatgcttggggcgcgacttttaacaattaagccgttgggtataatttgagag
+ggtgccacgatagtaagagatttccggcgtgagtaaggaaaatgataataggattaagca
+ggcgtaatagctcaccctcctcagttctccaaccctgaaccggctaagtatgactgtgca
+gtattaattttgaatacatattgcagcccctaggatacattatagatgtctctttcttac
+ccaaactcgcccgcaccaagaaagaatgtggattcgattgaggttaaattagccggaatt
+acagacacagattcttgtttacaattgtgggaagaaaaccacctcaaacgttgaaaccta
+cattcacaaatggattacgttggggatgagaatcgattccggtcaaaaatcatgcccgga
+gcaataaccaagaattcacagaggattaatacacttctccatgaagataggactgcttgc
+actatccttatctttgtgtcttccttcaagcaccaatcgtttggggacaaccacaattat
+gccaagaaataacggaaggtgttccaaatctatgagtccgcggtttcatcgcaacgtttc
+actgtgggtatcatgactttggactttagatttgggtattctagagactgtagaaagact
+gcaacaacaagacattcacagggcgaaacctaggaaaggggaccgcacgttgtgctaggg
+atgtttccttaggaatccatacatgtaagaaagaatcaaccgtaattatagtgttttcgg
+ccccttgaattacgtgcatgcctttgctaaaagacctctgggaaatagattgaatattct
+ggacagcagcgaatcctgattatatctcaagcgaatatatgacccgcaagaaggatttat
+actagaataagtctaagaaagggcattgggtcacttcttccactaacacacttttatcag
+ttttataccttgagagtcccatgcatttttatatatatttaactttcgttgcgtaaaact
+ttaaatatgatccgtgctctatctctaatctgaacaacggtatcacgtcgaacaaatcta
+gtggctacgaatcgcgtcgctaagaacggtttcttctgctggcgttagctacgtatcttc
+tatgctaaaaatgtatagccccgcattagcagcaaaaccgggagaatcaaatacacatcc
+gatgaaatcgtaacaaagataaaacaacgcgatttctatgtttgccaaagtgattaagtt
+gtatcgtaggggtcagcgctgatgtcttttcagtttgggttttggatttaccagtctttt
+agtttcggtactatttgatcgggacattcgtccaaacatgatggctcattcgttcttttt
+ttcaattttaatcaaaaccttgtatttacctgatacattaaactgagcatcgcatggagg
+tggagattcccatatatgtaatcatttgatatcctattccattctttttagttataaata
+aacgctccactgcacaatgggagtaggacttcaccaataattagcatctactgtaaacaa
+gcgccgtaacgaaatgattactgattgagaaaaataggtctcaacaacttttgacagata
+tgtatccgatacccaagcgttgctaattgcgcaaaagtaagtagaattacggtcgtatta
+cttgttgccaaatggttattactccaatgggctattctaatccgatggatacgtaggaga
+gagtgtacctacaccgaaactcgtagtgggcttagtggctacgtagaagctgttcgggtc
+agttacagcgtgcgaccttgtaaaatcgatcacggtgatgaattattgttattgtttaaa
+agaagtcccctgaatagcccttagataatacgaaaatttgttatgtccagtcgctcgtat
+atcaaaagattcggttaagttcgcagagttttgccaagtttacaggtgatttactaacac
+ttgggagggtacgtacaaccatcacctggttagcagagaatgaattatacggtcatgtcg
+cgaagggcaagtgtgtgagtattgaccgagttattaaacgtaaatgcaggcatttacgtc
+ataggacatcgagtttgtcctttgcgaaatgttaaatttatggttttttccgttgagtga
+taatagctgcaacatgaagatagtaaaactgaggttaaactttcaccatattaaattata
+tgttcaattacgcgatgtacaaactaatgttaatcagatttaggagcgcgcttaatatgg
+gtccctatcccgactttgtacgagattttgataaaaaatagtattgtaaattcatttgat
+ggcgtagaaccgggcaaaaccttgaaaaaggacacatttaggatgctatttccctaagaa
+agcggaaaatcctggctcaatatttataatagtaatggttaagattgtggcccaatcgct
+gagtacccgtcttacgctttttccaacacataatcgacgagaatgtatttaaatgtttga
+gacttacgttttccgcgtacttattattaaagtcattggagagggtgtcgtctgggtgta
+gttttctcatctgctcaggagctaaaaatgtaaatctattggttgtttctaattctgtcg
+tccgtgtaggctatttaatttttatggtacacttgaatatgtttagccataatgtagcca
+atactacaatatcagatacttgtatacgacctatagacttttgccgaccgctcgtagagt
+gatttagaaagatgttcggatagcacagcaatcgtttgcgaatgtaagcatgcgaagcga
+gtatttaactgttgactattttgctatatgttactctgaatgttgttttttttaccagaa
+tgtgttataatgatcaaccatgcacgttcctactaatcatataaattttgttacgtaagc
+ttttctatgatagtggtctaaagactacccttgcatactttaagattaagacatgcactt
+taggaggaactcacacgttttgagctgttctagcccacctataagccattcgtccgcaat
+cccataactacaatagtcggcaatcttttattacccagaactaacgtttttatttcccgg
+tacgtatcacattaatcttaatttaatgcgtgagagtaacgatgaacgaaagttatttat
+gtttaagccgcttcttgagaatacagattactgttagaatgaaggcatcataactagaac
+accaacgcgcacctcgcacattactctaatagtagctttattcagtttaatatagacagt
+atttgaaccaggcgctaatgttaaggcccccttcgaaaaccttgttatgttattccatgt
+ggtcggaggatttgcggggcgatagcgctgggcggggatcaacaatttcgttcatgcgag
+cgcccccataaccagtaggtacagttcggaaaagaaaaccccacgcactcgctagaagtg
+ttacaatcacatcacttcgtaccgaagggactactgtattccgtcttggggatgtaacag
+actgattacagtcttatgatgaagcctcattcatctaaaattagttgatttattccacgg
+atactatcacactcctatagaaagagttaccaccgtgggaagctagatataataaataaa
+agacatacaatattagtatggctcatgatctacacttactcggatctctctttttttata
+accagtagatcgcattacacgtattgttgttccgcatcaggccctaggggctcaaacttc
+catggtggataactaaaacgtccgtcactaaacgaagatattaatagatgaaatacacgg
+gtttacttgatttctgttcagtcattcacgggaaatcctaggagtctttcataacggcgg
+tcttagtaggaatgtagtcaagctctgtagaggtctcgacggaattggtatttcctggca
+tcacaatttacctagtattggagatcacttaaaataatgttgagataataatcaggatat
+ttctagtatgtgacaaacctctatttagtgattgtgattttcaattaaacaagacgtagg
+ggtcaaattaacgactacatgttggaaagaaggccgaattgtaatatctaactcatgtac
+taagaagaagtgctttcgtttaaggctttctgtctaacattctaacgtcaattcctatgt
+aatactactgtaaccaagttattactcggctgcgtagataaagtctcatgtaaatgacgg
+tttatctgttacttttgggtttcaacctagctaggacgccggtactaattacgacacctg
+cgtatagtgcagggtgttcaatgtgcctttttatgtccggattataaccatccctctccc
+acttggaatatcaccgggttcttaatgacttagttcgtcttccttattttccgggtaaga
+tcgctgtggaccggacccattttgatctagtctaaaaaggtatatagcgtttcgtctggc
+ccgcttacgttcactgaaacttagattaatcaatgcactgcactggattaacaagaacat
+gttatagtgtactgacacatgttagactaagaggtctgttcgggttagccgacttatatg
+tttaaccgattttgacaactgggttgagagataacaatgaagagtgaggactgtagaaga
+tcttaaaactgtaccatagtgctcaattcgctaatggcttgaattatttaattgttctaa
+ccctggcgtcgaatttttttggttcgaaaatacttagcacagcgtattgttcaacgagat
+gcacaactgtaccgttagaaagcggcttaatgacaaggcagtattgtgactattgacagg
+gaatcctaaaaagctactcgaattggtatatggaagaggtatgtactgagaggtcgcgcc
+tattagtcaaattctgccaaagaagagtcaaaagcttaactagtttgatggtatgaggtt
+taatgctaggtggtctataccaccaaaaagtatatgggatatcccagaatttatcgactt
+tcaatcgtctaccgtcacgacgtacactaggcagccctaatccaaaacttttgaggatga
+gtactgccactattatactgtaccatttgtaacttacattttatatcttcaaagaggtag
+atattgtcggccattactgtcacttacactaagggtagcttgattactgatacctctcat
+ggtaaaaagtaatttaagaacctatttttttacataacctctgctactaccgttagtgtt
+ttagtcggttcaagtcacaaaatccctgtagcgcacccctataagcagaaggaaacctta
+atgcggataaaaacttttgccggaaccgttaatcctatgagaataccactcttggaatcg
+gtcctttaggctgaggatatagaacgaggggaacgcatcaatctaggttaggtgagagaa
+ctttgtatcaaaacgcaagtaccatatgccgtcctcagtaaattgccaaatgcagaaatc
+ttacactcttttcttaactaagtatgagagcaacctcactcctgaacagcttgttaccta
+acgagaagaggctttaagtagcctggagcctcaaccggatatccggatttgactctcatc
+cacttacatgatgattacggtcattacatctcatgattttctgagtgccctatagactgg
+gaatttaatctaccctgtttctatttgttaacaaggagaaccactggtcaagatgacgcg
+cttccatttatgccaccataagtaagttctcggaacccttacatgattggcctaccaacc
+tatatatgtgaccaatgtacggtacatagagtgtggcctatcatattcaggtcatcgagc
+tcagtatttaaagattatatggtcgctgggggtattcagtgcgcgatggaagactaacat
+tggaaatcaacggaattgacaacacgctcactttaataacctatctcaggataagtttaa
+tgtaattagacggaactttctctaactccgtgtactaactctttgaaaataatgtgggta
+tttttatttcatctagatttgtctgtatcgaaagaaagtattggtccaaataatcctcag
+taaaatcaagtcataaatataaaatttagatcttaggacagaggaaagtgctttcccgag
+cataggatctggcctacgccagtagttcatgcttgtgttaaaagttgttactgtttatag
+tccgtactcagggtagtgttcgatactcagcggggaactgacatattacactaaggaatc
+aaggcccttcgtatgggtcatgtttatatatttaattacttacgctatttgatcgagaat
+agctatagtaacgtcgtaagaatgcaggatgcgattcgagtttgtaaattcacagatact
+gtgtatcatattattatagatgttaaggcatagaattattggtattgatgtacaaaaaat
+tatgggtgggcagtaccgataggcattacgagcagtgcagcttggaagaactggatgtat
+cctataactagtaagagccttaaaggtactacatacccagggatgttaccatcattaatt
+tggccatcttcaatcttcgcaatgcatactttcttctacaagatgccttttagaagacaa
+aataagtgtcaacaataacgctgtaacttaactctgttgtacgtggaatcaagtctcact
+aaagcaactaacattccgacatgcaaacgcaggactactagattattaaattcgccagcc
+cgcctcgtttaatataacatcataaaaattctaagtaatatctcacacactaatccgcca
+tcgtccatagcatcagtcacctgtcttacacaaacacatgtttaatcgatgttgttatgc
+caagctagtttcgcgaccatgtaactaattgtggaaagctgctaccttgaacgacatcaa
+ccatcctacctttgtacaacagaccaacatctctgtactggtaaatagatctgaaaagtt
+ataaatataactgttttcacattgatagaaaaacagctatgtgctatttgtatatactat
+aataaattaagcgaaacatggagattaaaacagtgttttctcatcctccacctcttgttc
+tgctaatttataattcttgatgccactcgtgtgagtcgtccattcgatcgtaaagaaccc
+gacataaatagatacgacgctgaacgagatcctatttctcctgaaaattattagcacggt
+aactcctagggatagtggtactagttggtatgaacgtataaaaacttgtactactttctc
+gggatgtgagggagcaaactattactcgaccagtgcaacgcattatcgacagtaaaagtt
+ttcagctgatacctgtctggatggattatatgcaggtaggcgagagtggattgtagcgat
+gctcggcgggggtattttaaaaatctaggtgataaaagtcctgtttagccaggaaaagtc
+atcattgcactgcatatcgtcgattagctgtcatttcgtccactggtaccagttcaacgt
+acatcaaagtccgggcgcatccatatcaagttttgcaatagtactccagaccatgaaatg
+gttatccagattaataataacttaatatactttcactacatactcagcgggtattaaatt
+tcactttatgtcaaaggactcttatgtggtcttcaaaaaggtctagagtctatcacgcct
+aattgtgtgaaaaccgagtaacttgatcagccttgtaaaatatagtagaatatgatgtta
+aatcatttatattccagggagattgaatagcttacgattagctggtataatttaactcac
+atgattaagcaaatatctgtaggaccgagggaaagaataaaataaagtaccatgagttcg
+gaacgctgcattacatggcgttgggctagcctgatacaagaagatgagtatggagctctc
+ttcatcgggacgtgacaaccctagcgtaatcttggcagatcccggagcagatgattatcg
+tctaacactgtctttaccaatgcacaacgcatagatttaacctgaactgttctggattca
+ctcctgactacagcctacaactcatttctatgcataactcttaaagacagtcgcaatatc
+agtacctctatacacatcggatcagactagatcataagataagtctcctctggatccttg
+tattctgttaagtacactacaaatttgtttagtgtctgggacaattacgataagggtcgc
+gactagaccacagggcatatgacctccaccgctcctagcgagtctccaatctgcaagcac
+tcatacgctaggggcatgaatcgactgtcaatgcactgtaagatttacgagggtgagacc
+catttagatatgcctcgtttaaccgttttaggcttgataggatgagtttgtcgatccatc
+aaattcccgacattcatattgtccaataagtatatctagcttattcggactcgctaaact
+aaattatggtataaatgccgtcaaccggtgcatttgttcaatcaacaaattatagtcaat
+ctcccatggggccttatggcagcgtatacagctggtataacgaccatatacaactatgaa
+cggactagctgtgaactaagcagattattggatccttgtgtataattttaagtttcgatc
+tatatgctatagtatagaaaatgttccgatcgtacgcttcctttacagttaaacagtcta
+tatcatgaagcttatccaaagctggacatttgatggcaatcttacttaattatgaaactt
+aattacctattattgaaagtatttatatgatcgaataagatttgctctataaacaggtcg
+tccattcacgacctagtgattgcgtaaattgaccaacctaggtaatctaaagcctgcatc
+tatttcttatcattcatgttatactgacccgttctcagtacttaaaaatgatcgtaagca
+agaatcactcacgctcatgtcacatttagtcgaaataaactgccgatgggaaggaagttc
+cgtcattgcgatatcgatgtctatcccacgcgtcattttcaaattggttatctacggata
+actgtgcgatgaactactataggtcaaaattatcttcaatctcattctagatcatataaa
+gatgtccttcgcgattgatacgtctacagtgtgttggtgttacacagagggtagcgacta
+cttacttactaactctctcttgatccgcaagcataagccaggttaaagtgctctatcttt
+ttctgtggattataatagttataccgccttgcatctaggtgcccattaggtaatgcccta
+gtgttttcataaatttactcctgccatctaacgttactttaatttcccagattcaatagg
+tctctcatttgaaaattgttatatgtcaacaaagaatataatagctgagtggaacaatac
+actgtgagggagtaatacatactctaaattttctttacggtttgcgcctgcacagttttt
+tttatctatgtgatccgcataaaaagtaatttcaacgttccattcaagttaagtcttggt
+gacactagcattaggagagatcaccaagaccattatttatttagctagggtttaagtcgg
+ttagaaatatcagataatgaggtctttatccggccttacgcagtagaaattggaaatttc
+gtaaagcactgagttcaatggaagtatggccgaacccacataatgcacaaatcaagtcga
+tttcttccgtccttttagtctcctgggaactacgggttattcatagttaagctaaatcag
+ttaacggaactagacaaatgtataatagttcccaaatatatatctataaatcttatgcag
+ttagggaatgcagatttgaatcatggcaatacgctagctcggaactcaactacaagtgtt
+ggatgtacgaattcaaaggtattacatccttatgatgttcttttttggatacttttatga
+cgacttccacgaagtgaaattatgttcgaatatctgaacagttacttggttgagcccaag
+gatgacgaatgttctgtttataattctcgtcataatataaatacaagcatatgaggccag
+tcatggagctttcatttggactaacatttccgtagagtcatatcacgcctgtaatctgat
+ccgtctttttctattcgaagtgttatcagatacatgacgcccttgcgtgacattcatggc
+tcctgacatcgggtcttttaggctgaatctaatctaacccaatttgtttggattgtgggt
+cctccattttgtctgttaatgcttattaagattaaaaatgtactacgtatttagacctaa
+tgattgcgatacgctgtggaccattaatataagctgcgccaggggatttttccagatcat
+ctggcctgtgtatatgttcaaatctaatagccgagagaaattactccgacggaaaataaa
+ggcagataagcgtttcagagcaccatcgtggcgtttagtcaacctttagttcggaattta
+ttaatatacaatctcactctttggacgagctccttaaaagatgcccttgtatatcatgtc
+ccgtacctaaaagtataccagcatcatcaaagaacagttaaggaatacgactgctctata
+attgtccgaggagtaccttctcatctgccaatagtcgttgggttggaaaacaacgcatta
+atatgccacacttgtcaattagaagtttctataaaggggacgagtaactgatttgagacc
+tagcacggcagaggacgttcgtgtgacaacatctctttataagtttgagataaaatcgct
+aatctacaatgattatttgccaatcattatcgaatgcgcaaagtatctcctgttcgtgat
+tctagcctaaggccattactatggtcaaattatgctaatcgaagcagtcttctaacaccc
+ttagaaaagcaaacactattgaatactgccgccgcattcgccagcaccaacataactgca
+cgtgcttttttccatgattggcattatgaaagatttgatctatgattcttaccagttgca
+atattcaatttagcatgtgttcctaattattgtgttattatggtctatctcatcatgtaa
+atgaagatcatgacgtcaacacagattctagtcaggatcatcagttcctcggggaaatcg
+cacctaggaacagccttatgcaaccgctaaacaaagcaatgaggatgtaccgacaaaagc
+tcgatttaaaagcctcgaaacgagatgtacgaatcgtttactgccttttatgaggagtcg
+agtactgttggttcatatttgctacatgattgtatgtaataacgatcccgccctttatcg
+gttcgatcctttatggcgataagttatgaatcgtcagtatctttagatcaaaaactcaac
+tagtacccagttccccggaggaacggtcatgattaatgcgttttacggtctcccgtccct
+cttcttgtcagaggaatcagtttcatccgatcccactcgatgattggtatagctatttgc
+cgaaaagccacaacgtattcggtactatcttgtttgattcccctgtatcttaattcgcga
+cacttgatatcttttgtgtttaatcgacgaatcatcctgggggcgacacttgttacaatt
+atccagttgcgtttaatggctgtgggtcacaagattgttagacaggtcccgcgtgtcgta
+ggaaattgataattggagtttgcaggacgaatagctcacccgcctaagtgatccaaccct
+catcaggataactatcactgggcagtattatttttgatttcatatgccaccccctaggag
+actgtagtcatgtatctttcttacccaatctagcccgaaacaagaaagaatgtcgattcc
+agtcaccttttattagaccgatttacacacaaagtgtcttggtttaaaggctggcatgaa
+tacatactcaaaagttgaaaacgacttgctctattcgattaccttcgcgatctcaatcga
+ttacgctaaattttaatgcccgctgaaatatccaacatttaaaacaggattaattctctg
+atccatgaacttaggactcattgcacgtgacttatctttctctcttaattcatgctccaa
+tacggtgggctaaaccacttttatcacatgaatgtacgcaacgtgttaataagctatgag
+tacgcgggggcagcgaaacgggtcaatctgggtatcttctattgggacggtacatttcgg
+ttttatagactatgtagttacacggcatcaacatgtaattaaaacggcgtaacctaggaa
+agccgaacgcaccttgggattgccatgtgtccggaggattacatacatctaagaaacatt
+ctaaactatgtatagtcgtttacgacccttgtagtacgtgcatcccttggcgaaaagtac
+tctgggtattagagtgtatattatcgacagcaccgaatcctcattttatagcttgacaat
+ttatgacccgaaagaaccttttataagtctataagtatatctaacgcaattgcggcactg
+agtccactaactatctttgagcagtgttatacagtgagacgccatggaaggggtttatat
+attttactgtcgttccctaaaaagttaattatcagacctgcgcgatctcgtagatgaaca
+acgcgatctagtcgaaaaatgcttgtggctaccattccagtcgagatcaaccgtttctgc
+ggatcgcgttacattccttgcttatttgcgataaatcgatacaaccccattaccagaaaa
+acccggagaatcaattactctgcagatcttatactaaaaaagagattacaacccctgttc
+tatgtgtcccaaagtgagtaacgtggagcgttggggtaagagcggagcgattttaacttt
+cgcttttccattttccagtattgtactttacgttatatttgagcggcacattcgtcaaaa
+catgatccatatggactgaggtgtttaaatgttaatcaaataattgtattttcagctgac
+tttaaaatctgcagccattggaggtggagattccaatagatgtaagcaggtgatatcata
+tgcaattcttgtgacttattaagataccagacacggcacaatcgcagtagcacgtaaaca
+ataatgacaatcgacggttaaattccgaacgtaagatatgtttacggatgcactaaaata
+ggtagcaacaacgtttctctgagatgtataagttaccaaacactggagaattccgctaaa
+ctaaggacaatttccgtcgtattaattgttgacaaatggttagtaatacattcgcagtgg
+ataatccgttgcatacctagcactgagtgtaaataaaaccaatcgactactggcatttcg
+ggctaacgactagatgttagcctatgtgaaagcctcacacatgcttattgccttcacggt
+gagcaatgtttcttattcgttattagaagtcacctgtagagacagtagagatgacctaaa
+tttggtttgtccagtcccgaggtgatctaatgattaggttaacttagaacagtggtcaat
+tggttaaagctgatttacgaacacttccgaggggtcgtaaaacattaaactggtgagaac
+agtatgatgtattcggtcatctagacaaccccatcgctgggagtttggacagtgttatga
+ttcgtaaatccaccatgtgtccgaattcgaaatcctgttgctccggggagatagggttaa
+tttaggcttttttacggtgtggcatattagctcaaacatcaacattcttaaaatcagcgt
+aaacggtcaccagttgatatttgttctgctaggaagcgatgtacaaaataagcttaataa
+gatttaggtccgaccttaatttcggtccatagcacctctttctaagtgttttgcttaaat
+aattgtattgttattgattttctgcgagttgaacacggaaaataagtcaaaaaggacact
+tttaggttcatatgtaccgatgaatgcgcaatagaatcgagaaatttttagattagtaat
+cgtgatgattgtggccaaatcccgcactaaacggctttcgctgtttccaaaaaattttag
+tccactaggtatttaaatgttggacactgaacgtggaagccgtcgtattatgaaactaat
+ggcagaggggctcctctgcgtgtactttgagcagatgctatcgtcagaaaaaggtaaatc
+ttttggttctttataattctggcgtccgtgtagcctagtgaatgtgtttggttcaagtga
+atttgtttagccagaatggaccaattacgtcattagctgttacgtctatacgaaatatag
+actgtggacgacccatcgtagagtcatgtagttacatgtgaccttagaacaccaatcgtg
+tgcgattgtaagcaggacaacacagtattgtactggtcaattggttcatagatctgacta
+tgaatcttcgtttttgtacaacaatctcggtgaagcttcaaaaagcctccttcctaataa
+tcagttaatttttcgtaaggttcctgttcgaggttagtcgtataaagacgaaacggcctt
+aatgtaacattaactattccactgtaggtggatctaacaaggttggacatgtgctaccaa
+taagataagaatttcgtccgcaatacaatatctacttttgtagcctatcttggattaaca
+acaacttacgttggtatttcaccggacgtatcaaatgattctgattttaatgactgagag
+taaacatcaacgaatcttatgtatctttaagccgctgcttgacaagtcacattactgtta
+gaatgaacgcttcattactacaaaacctaccaccaactcccacattaatattatactaga
+tgtttgaagtttatttgacaaaggttttcaaaaagcacagaatcgttacgaacacgtaca
+ttaaattgttagggtattaattgtggtcggtgcatttccggccccatagcgctccgcggg
+gagaaactatggccttcatgacagcccccccataacatctaggtaatggtcggataacta
+taaacaaccctctccagagaactgtgaaaataaaatctcttagtacacaagcgtatactg
+gtttaagtcttgcccatcttaaagactcttttcactattttcttgatgcctcattcttct
+aatattaggtgattttttaatccgagaatataaaaagacgatagaaagtgttaaaacacg
+gcgtagcgacatattttaaagaaatgaaatactttttgactatccctcatgatctaaact
+tacgcggagctatctttttgtataacatgtacagagaattaatccgatgcttcttccgat
+taaggacatagcgccgaaaacgtcatggcggcttatcgatatcgtaacgcactataccaa
+gtgattaagtgatcaatgaatacgggtttcgggatttctgttaagtcatgcacggcaaat
+acttggagtcttgaataacgccgcgcgtagtacgaaggttctcaagctcgcgtgacgtat
+agaccgtattgctatttcctgccttctcaattgtccgaggattgctgataacttaaaata
+aggttgagtttttaataacgatttgtcgagtttgggaaaatcctcgtttgtgtgtttgtc
+attttcaagttatcaagaactacgggtataatttacgacgtaatgttggtttgatgcccg
+attgcgaatatcgtacgaatggtatttgtacaactgctttcctttatcgattgctcgaga
+acattataaagtctattactatggattaagactgtatacaagtgtttaagcggagcccgt
+gataatctataaggttttggtacctttatctgttacttttgccttgaaacatacatacgt
+acacgggaatatttacctaaacgccgtatagtccagcctcgtatttgggccgtgttttgt
+cagcattttaaactgaaagcgcccacttgcattataacccggtgcggaatctcttagtga
+ctcgtcaggagtttacgcctttgagacctctcgacaggacccattttgatctagtcgtta
+taggtagagtgcctttcctatcgcaccattaccttctagcaaacttagagtattcaatga
+aatcatatcctgtttatactaaatgttataggctaatgacacagctgacactaagaggtc
+tcttcgggttacccgaatgagttgtttatacgatgttgacaactcgggggagtcatttca
+atgaagactgaggactcttgatcagattaaaacgcttaatgactgataatttagattatg
+ccgtgtattatttaagtgggcgaaccctcccctagaatgggtttcctgagaaaagtctta
+gaacacagtattctgaatccagatgcaaatcgctaacgttagtaagcggctgtagctctt
+ggcagtttggtcaatagtcaatcgcaatccgtttaaccgtctactattcctagagcgaag
+agctatgttctgacacgtccccaatattaggcaaaggctccaaaagaacagtcaattgat
+taactacgggcttggtttctccgtgaatccttgcgccgctataccacataaaaggatagc
+ggtgataccacaagtttgcgacgttaaagcgtcgaccctcaacaagtacactagcaaccc
+cttagcaattaattttgtccatcactactgccaagagttgactggaccagttggaaatga
+catttgatatattaatagagctacatattgtaccactttactgtcacttacactaaccct
+agcgtgattactcatacatatattcgtaaattctaagttatgatactagttttgtaaatt
+taatcggcgaagacacgttctcttgtacgagcttcaactaaatatttcactgtagccaac
+cactttaaccagaaggataccttaatgccgatataatattgtccaggaaacgttaatact
+ttcacaagacaaagcttggaagaggtactttacgatcacctgatagatcgaccggaacga
+ttctatataggtttggtctgagaaatttgtagctaaaaccatgttccataggaactcctc
+tgtaatgggcaaaatgcagatagcgttcaatcgttgcttaactatctatcacagcatcct
+aactcctcaacagcttctttcctaaagacatcagcaggtaagttgacggcacccgataac
+ccagagcacgattggaatctaatactctgtatggatcattacgctaagtaaatataatga
+ttttctgactcaaagttacactgcgaattttatattaactggttctatttgttaaatacc
+acaacctctcgtcaacaggtcgcgatgcaagtgatccaaaaatatctaacttataccaac
+cattacttctggcgcagaaaaacatagatatctgaacaatcgaccgttaagactgtctcg
+ccgatcttaggaacctaatactgctcagtagttattgtttatttgggccatccccggatt
+atgtcagccatggaacactaaaagtcctaatctaacctatggacaaaaagctcactttta
+taaaattgctcaccttatgttgattgttatttgtccgaaatgtctataactcagtgtact
+atctattggaaaattatggccggagttttattgaatatacttttgtatgttgagaaagaa
+tgttgtcgtaataattatcagctggaaaatcatctaatatatattatattgagatattac
+gacagacctaagtgctttcccgtcatgagcagatggactaacactcttggtaatccttct
+cgttttagttggtaatgtttagtctaagtaatatcccgactcttacttactcagagcgga
+aatgactttttaaactaacgtttaaaggcacttagtatgcgtcagggttatttttttaat
+tacgtacccttgtgcagagagtttagctattcgatcctacttagtatgaaccatgagagt
+acaggttggtaattcacagagaaggtcgagaagattatttttgatgtttaccaatactat
+gaggcgtattcatcgaaataattttatggctgcgcacttcacatacgcaggaagaccact
+gcagcttgctagatctggatgtatcattgtacttctaagagcctgaaaggtaatacattc
+ccagcgagcgtaacagattgtatggggacatattcaatcttagcaatgcattcgttcttc
+gaaatcaggcatttttgatgtcataagttctgtcaactataaccctggaactttaatctg
+ttgttcgtcgaatcaaggatcaagaaagcttctaaaaggcccaaagcaaaacccaccact
+acttcagttttaaattagaatcacaccctagggtattagataataattaaatgtcttagg
+aagagatatcaaaagatgcagacatcctcaagtgaataagtctccggtctttcacaaaca
+catggttaagcgatgtggttttgactagagacgttcgccaccatcgtaatatttctggtt
+acctgcgaacgtgaaccaaatcttacttcatacattgcttaaacagtacaacttatctct
+tatcctatagagatctcaaaagtttgtatttttactggtttcaaattgagagaaaaactg
+cgttctccgatttctatattattgtttaaatgatgccaaacatccagtttaaaacacggt
+gtgatcagccgactcagattcgtatcctatgttagaatgagtcatcaaactacggtcacg
+cgtacattacagagtaaactacacgaatgaaagagataagaagatgaaagagttaatagg
+tctcctgttaattatgagaaccctaactactacggattggcctactagtgggttggaacg
+gatataaaattcgactaagttcgcggcatgtcaggctcctaaatatgaagagaactcggc
+atcgaattatccacagtaatagttggaacatgattcctctatgcatggtgtatatccacg
+tacgccagtgtgcagtgtagccatgcgaccacgggcgttgtgaatattcttcctcagaaa
+aggactgttgagcaaggaattggattctgtgaacggaatatagtcgagtagatggaattt
+cctacactgcgaaaaggtcatagtaaatcaaacgccgcgcgcagacatatcttcttggca
+attagtactccactaaatcaattggttataaacttttagaatatctttatataagttcac
+tacttacgctgcgggtagtatatttaaagtgatgtcttaggaatcttatggcggcggaat
+aaacggcttgactatagataccctaattctggcataaccctgtaacgtgtgaagcatgct
+ttaatagacgactagatcagcttatagaatggatatgactgccacattgaagagattaac
+attagcgggtataatgttacgaacttgtttaacaaaatagctctaccacacacgcatagt
+ataatataaaggtcctggagttcgctacgagcctggaattgcagttcccctaccctgagt
+aaacaagatcagtatggacctatcttctgacccacgtgtaaaaactaccgttagcggccc
+tgagaacggtgaagttgattatcggctaacactcgctttaccaaggaacaaacaattgat
+ggaacaggtaagcggctggattctatcctgaatacagcataataatatttgctttcaata
+tatagttatgacactcccaatatcactaactctttacaaatcggatatgaagagtgaatt
+agagatggagccgatcgttccttgtattctggtaagtactcgactaatgtgtgtagtcta
+ggggtaaaggtccttaaccgtcgagtctagaactcacgcattatgaaatcctccgagcat
+agagactctaaattcgccaagcaataagtcccgacgcgaaggatgagaagctcattgaac
+tgtaacatttacgtcgggctcaccatgttacatatgcagcgggtaaaagtttttgcctgg
+agtggttgagtttcgcgatacataaaaggccccactttcatatggtcaaatatctatatc
+gtgctttggacgactcgataaactaaagtagcctagtaatgccctaaaccgctgcatttg
+tgcaataaaaaatttagagtatatataacttccggacgtatggctgccttgaatcctcgg
+atatcgtccttatacaacgatgaacggtatagctcggaactatgcagattaggcgatcct
+tgggttgaatttttagtttccatagatatgagttagttttgatatggttaccatacgtcc
+ctgcattgaaacttaatctgtatattgattgatccttagcaatagcggcacatttctggg
+caatatgacttaattaggttacggtttttactatgatggatacgttttatatgatagaat
+aacagttgctatttaaacaggtactacattcaactaatactgtttcactattgtgtccaa
+catagggaatatattgcctgaatagatgtattatcaggcatcttttacgctccaggtaga
+actaattaaaaatgatccttagaaactttcaagcaacataagctaaaagttacgccaatt
+ataagccacatcggtaggatcttcaggcattcccatatccttctctatcaatcccgtctg
+ttgctaattggttatctaagcatatcgcggcgagcatctacgataggtataaagttgctg
+ctatctaattcgtcataatatatacatggaattacagattcatacgtcttcagtctcgtg
+gtgtttctaagagcggacccaagaattacgtaatatctctctcgtgttacccaagaagtt
+gacacgtgattgtcagctatctttttctggcgatgttaatagttataaacaattgcatat
+agctgcaaattagctaatcaaatactcgtttcttaaatgttatcagcaaagctttaggtt
+ctgtaatttcactgtgtaaagagggcgctaagttcaaaattggtttttggcaacaaacaa
+tttaatagcgcagtgcaaaaataatatctcagggtgtaattatttctctaattggtcttt
+acggttggaccaggcaatgggttttttatctatgtgataccaattaaaagtaatttcaaa
+gtgacattaaacttaagtattgctgtcaagaccattacgacacttcaccaacacatttat
+gtattgtgctacgcggtatggcccgtagtaatttctgatattgaccgcgttatcagcaag
+tacgctgtacaaatgccaaatttagtaaagctctgtgtgcattccaaggtgcccacatca
+cacattatcaacatatcatgtcgttgtattacgtccttttactagcctgggaaataccgg
+tgattcagagtgaacataaatctctgaaagctactagacaaagctagtatagttaaaata
+tatatttcttttaatattaggatctttgcgattgcacatttcaagcatcgcattaaccta
+cctccgtactcttctacaacggttgcatgtacgatttctatgcgatgaaatacttatgtt
+cttagtttggggttactttgttcacctagtcctcgaacgcaaattagcttcgaatatctg
+aaaagtgtatgcgggcaccaaaacgatctcgattcttaggtttataattatagtcagaag
+ataaatacatgcatatctggacactcttccacatgtcatgtcgactaactttgaactaca
+gtcatatatagactgttatctgatccgtatgtgtctattactactcttatctgagaaagg
+acccaatggagtcacagtaagcgatcatgtcatcggggctttttccctgattataagatt
+acactattgctgtgcttggggcctcctactttttctatcttaatcattttgtacattaaa
+aagctaagaagtaggtacaacttatctttcccatacgagctggaccattaatttaacagc
+cgcaaggcgagttttaatgttaatctggaagggctttatgttctaagcttttagcactga
+gaaattaatccgtaggaaattaatcccacataacccggtaagagaaccttacgccccgtt
+actaataatgttctgcgcaatgtaggaagtgacaagctcactcttgcgacgagctcctta
+atacaggccctgcgttatattcgaccgtacctataactagaccaccatcttaaatgtaca
+gttatggttttcgacgcatagagtatgggaccacctcgaaatgctcagctgcaaattgta
+ctgggggtggttatcaaacatttaatatgaatctatggtaaagtactagtttatagatag
+ccgaacactaaaggtttgcagaccttcctcccctgaggaacttcgtgtcacaaattagat
+tgagaaggtggtgataaaatcgcgtatctacaatgatttggtgcaaatatttatcgattg
+cccaatcgttctactcgtactctttatagcctaacgccttttcttggcgctaattagcct
+aatccaagaaggagtctaacaaaattacttaaccatactcttgtctattcggcccacgca
+tgcgcaagctcaaaaagttctcaacgggcgtttttacttgagtcccaggaggtaacattg
+gatctatgagtcttaacagtggaaatatgatttttagattgtgttcagatttattgtctt
+attttggtctatctcatcagctatagctacataatgacgtcttaactgtttcgactaacc
+ttcagatctgactaccccaaatacaacatagcaaaagaatgatgctaacgcttaactatc
+ctttcacgatcttaacaaaaaagctccatttaaaagaatcgaaaacagatctaccattcg
+tggaatcaatttttggacgagtactggtcgggtcgtgcttatttgctacaggattgtttc
+gtataacgttcaagcactttagcggttccatccttgatggcgttaactgatgatgcgtaa
+gtttatggtgatctaaaactctactacgaaccaggtcccagcacgaaacgtcatctttaa
+tgagtttttaggtctccaggcactaggctgcgaagtggaatatgtgtcatcagagacaaa
+tagatgattcctatagctttttgcagttaagccactaagtaggcggttctatagggtttc
+attcaaatcgatcgtaattcccgactctgcatagcgtgggtcttgtatagaccattcttc
+aggcccgccacaatggtttcaagtttcaacttccgtttattggctgtccctcaatagagt
+cgttctcagggcacgactctcgttcgttattcataagtccagtttgatccacgaatacag
+aacacgcatatctgataataaaagcttaacgataactttcacgcgcatggtttatttttg
+atttattaggcaaccaaataccagaatgtagtcagcgatatgtagtaaaatttagacaaa
+cataaaacaaagtatcgccattacagtctcctgttaggagaacctttttatcaatatgtg
+taggcgtgtattggcgcccttgatttaataataattacggctaaacgtattgatattttc
+caggaactgccccatctcatgagatgaccctaaattttattcacacctcatttttaattc
+ttttatatcacgattatttatctgagcaagcatctttgcaagcattcatagtgacggtgc
+tgtctctatgaatgcatgctaatatacggtgcgctaaacatattggttcaattcaatgta
+agctacctcggaatttgcttgcactaagacggggaagccaaaacggtaaatcgccgtata
+tgctagtgccaagggacttgtccgttggagtcactatggagttacaagcattataaatct
+aaggaaatcgcagtatcagtccttaccccaaagatacttcgcattccctggggtacggac
+catgaaatacttctttcatacatgataaacgatggagactcggttaccaccctggtagtt
+actccatcaattggagttaactaagatcgctattacaggctttattagccaatcatcaca
+agcctctttttagagattcacaagttagcaaaccaaagttcctttgataagtctttaacg
+agatctatcccaattccggctaggagtaaaatttatatatttgagatcggggttaaagtc
+acacgcaatgcaaggggtttttatatggtaatgtccttccctaattaggtaattttcaga
+cctccgagagagagtagatcaacaacgcgttatactcctaaaatgcttgtcgataacatg
+acactacagatcatccctggatgagcatcgactttcattacttgattagttcagttaatt
+cgtttcaaaccattttcaacaaaatcccccagtagatatgtatatgcacatcttagacta
+aataacagttttcataccctgggatttgtgtcactatctcaggaacgtcgagacgtcccc
+tatcaccgcagcgagggtaactggccctgttccattgtaatcgatgggacgggacgttat
+attgcagacccaaagtagtaataaattcagccatatggacggagggggggaattgttaag
+aatataattcgattttcagctgaatgtaaaagctccagccattcctcctccacttgacat
+tagttcgaagaaggtctgagaattggaattgcttgtgacgttttttgtttccagacaagg
+aaatagcccagtaccaagtataatattatgacaatagaagcttaaattcacaacgtaaca
+tatctgttagcatgctctaatagaccgagaaaataagtgtctatgtgtgcgagaactgtc
+aattcacggcagtagtcacctaatctaacgtctagttcccgactatgaagtcttcacaaa
+tggttagtaataatttcccagtggagtagaagtggcataacgtgcactctctgttaataa
+tacctttagactactcccatttcgccagaacgtcttgatggtaccctatgggaaacactc
+acacatgcttattgcctgcaacctcagcaatgtgtcgtatgcggtatttctacgaacagc
+tagtgaaaggactgatgacctaattttggtttctcaagtccagacgtgatattttgatga
+ccgtatctgacatctctgggcaattcggttaacctctggtacgaaatagtccgtcgcgta
+ggtaaaaatgataatgctgtcatcactatcatgttttagctaagctacactaccccatcg
+ctcgcacgtggcaaagtgtgaggattccgatatcatccatgtgtacgaattcctaatact
+cttgctcagggcacttagggttattgtagcctgtgttaccgtctcgcatattagatcatt
+aatcaacagtcttataatcaccgtaatcggtaaacagttgttatttgttctgataggtag
+acagctaataaagatgctgttgaacagttacgtcccacctttattgccctacagtgaaac
+tagttcttactctgttgctgtaatatgtctagggttattgatttgctgccacttcaaaac
+ggaaattaagtcattaacgaaaatggttccttcataggtaaagatcaatccccaattgaa
+gccagaaattttgagatgtcgattcctgatcattcgccaaatttacagctcgtaaacgag
+ttccatgtgtaaaaaaatgttgagtccactagcttgtttattctggctcaaggtacgtgg
+aacacgtagtattttgatactaatgccagacccgctacgatccctgtactgtgagcagag
+ccgatcctcagaaatagctaaatcttgtgcttcgttagaagtctcgactacgtgtagcct
+agtgtttgtgttgcgttatagtctatttgtggacacagtatggtcaaatgacgtcttttg
+atctgacggcgttaacaaagatactctgggcaacacacatacttctctcatgttgtttct
+tcggacctttcataacctttcctggcacatggttagctgcacatcacaggattgtaaggg
+tctagtggttcagtgagcggaatatcattcgtcggtggtgttaatctatctcggtgtagc
+ttataaatgcatccgtaagaatattatgtttatttgtcggtacgttcatggtagtggtgt
+cgccgatttagacgtaaaggcatgtatggatcttgatctatgcaaaggtaggtccatcta
+tatacgttgcacagcggatacaaataagataagaatttactaacatttaaattttcttat
+tgtcgagcatagattggaggaaaaacttatttacttggtatttaaacggaagtttctaat
+gtttatgattggatgcacggacagtttactgcttactttcttaggtttcttgaacaacag
+gatgcactagtaacatgtctcgttcatgcttccattaagttcttcttaaacttacacaaa
+ctacctaatttagagttgacgagatggttgaacgtgttgtgacaaacgtttgcaaaatgc
+acagtatcgttaccaaaaagtacatttaagtgtgtgcgtaggaattctgctacgtccatt
+gcaggccacattcacatcccacccctgaatatatggactgaatcacacacaccaaatttc
+atctaccttatcgtagcataactattaacaaacatatacagacttcgcggtaaataaaat
+atattagtacacaaccgtatactggttgaactattgcccagctttaagacgcttttaact
+aggtgcttgatcaagaagtattattatatgacggcagtgtgtaatacctgaatagatata
+gacgttagattgtctgaaaacacgccgtagagacatttttgttagatatgtatttctttt
+tgacgagccagcatcttagtatctgaagacgagctatatgtttgtagaaaatcgactgac
+attgtatacgaggcggcgtaagattaaccaaattccccagaattagtaatggcgccttat
+cgatttactaacgatatataacttgtgatgttgtctgcaatgtatacccgtgtaggctgt
+gctcttatcgaaggaaacgcattgaagtccaggctggatgaaaccaccgcgtacttccat
+gcgtctatacatagcgtcaccgatactacgttttgctatgtaatccattctaatgggtaa
+gaggattcctcttatagtaaaatatgcttgactttttaagaaccattgggagtggttggc
+aaaataatagtgggtgtctttctcagtgtatagttttctacaactacccctattaggtta
+caagtaatctggctttcttgccacttggcgatgatagttagattcgtatttctacaacgc
+agttactgtatccatggcgcgagataattagatacgatttgaatttggatgtagactcgt
+tactactgttgtagaccagcacgtgagtatctagatgggtttgctaccttgttagcggac
+ttttgccgggaaaaagacatacgtacaaccgtatattttactataagcagtattggccac
+cctcgtattgcggcagggtgtgctcacctggttaaaatgaaagagaaaaattccatttta
+aaacccggaggaatctattactgacgaggaaggtgtttaacccgttgagacatctcctaa
+cgtaaaaggttcatattctagttattccgagagtcactttcctatccaaacatgaactga
+tagcataatgacaggttgaatggaaagcatatcctgtttattctaaatctgtttcgctaa
+tcaatatgctgtcacgaactcggagcttacccttacaactatgtgttctgtttaccaggt
+gctaatatcccggcactcttttcatgcatgtcgctcctagcgtcatctgatttaatagct
+taatgtctcatattttacagtagccagtgtagtatggaaggcggcgaaccagcccctaca
+ttgggtttcctgacataagtattacatatcacttgtctgattacacagcaaaatcgctaa
+ccttactttgcgcatgtagctattggaactttgggctagtgtctatcccattaagtttaa
+cagtagactagtccgtgagcgatcaccgagcttatgtctcgtacccaagttttggatttg
+gatcaaaaactactcgatattcatgatctacgggcttcctttctccgggtatcattgcgc
+cgagattaaaaataaaacgatagcgctgtgaaaacatgtttgacacgggatagcgtagaa
+actaaacaacgaatagaccatccaatttgaattttattgggtccagcacttcgccatagt
+gttgaatggtaaagttcgaaaggaaatttgttatattaattctgctacattttcgaccac
+ttgtatctcaaggacaatatcccttgaggcttttagcagaaagagatgccgtaattctaa
+gggatgataataggttgggaaatttaagagcagtagtaacggtcgcgggttcgaccttaa
+actatatatttaaatctagccaaacaagttaacaacaaccataaagttatgaccttatta
+tattggcaagcttaacgttttaattgctctagtaatagagtggtagaggtaagggaccat
+cacctgattcttcctccgcaaccattatatagacgtgtcgtctgacaaatttcgagataa
+aacattcgtccttagcaacgaatatcgaatggcaattagccacattgagttaaatagttg
+aggatatttcttgcacagaatcagatctaatctaatgattcgttactaaacacttcacca
+ggtatcgtgaaggctcaagattacccagagaacctttgcaatataagaatatgtatgcag
+cattaccctaagtaattatattctttttctgactcaaagtgacaagccctagtgtatatt
+aaatcggtatatttgggaaattcctcaaactatcctaatcaggtagccatgaaagtgatc
+aaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaatagattgcgcaa
+aattcgtaccttaagtctctcgccaagatattaggatcctattactcatatcgtgttttt
+ctttattgccgccatccccggagtatctcacccatccttctcttaaaggcctaatattac
+ctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgattcttatgtgtac
+catatgtatagtaatcacgcgactatatagtgctttagtatcgcccgtgggtgagtgaat
+attctgggctagcgtgagatagtttcttgtcctaatatttttcagatcgaatagcttcta
+tttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtcatgaccagatcc
+acgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtctaacttatatcc
+cgtcgcttactttctaacaccccttatgtatttttaaaattacgtttattcgaacgtact
+tggcggaagcgttattttttgaagtaagttacattgggcagactcttgacattttcgata
+cgactttctttcatccatcacaggactcgttcgtattgatatcagaagctcgtgatgatt
+agttgtcttctttaccaatactttgaggcctattctgcgaaatttttgttgccctgcgaa
+cttcacataccaaggaacacctcgcaacatgccttcatatccatcgttcattgtaattct
+tacacaatgaatcctaagtaattacatccctgcgtaaaagatggtaggggcactgaggat
+atattaccaagcatttagttatgagtaatcagcaatgtttcttgtattaagttctctaaa
+atagttacatcgtaatgttatctcgggttccgcgaataaacgagatagattcattatata
+tggccctaagcaaaaacctcctcgtattctgttggtaattagaatcacacaatacgggtt
+gagatattaattatttgtagtacgaagagatataaaaagatgaacaattactcaagtcaa
+gatgtatacgggatttataataaaaatcgggtagagatctgctttgcaattcagacgtgc
+cactaaatcgtaatatgtcgcgttacatcagaaagggtaactattattaattaataaagg
+gcttaatcactacatattagatcttatccgatagtcttatctattcgttgtatttttaag
+cggttctaattcagtcattatatcagtgctccgagttctttattattgttttaaggatga
+caaaatgcctcttgttataacgctgggagaagcagactaagagtcggagcagttggtaga
+atgaggctgcaaaagacggtctcgacgaatggacagactttactaaaccaatgaaagaca
+gaagtagagcaaagtctgaagtggtatcagcttaattatgacaacccttaatacttccct
+ttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttagaggcatctctcgc
+tcataaataggtagactactcgcaatccaatgtgactatgtaatactgggaacatcagtc
+cgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacatgagaccaccccc
+gtggggattattagtccgcagtaatcgactcttgacaatccttttcgattatgtcatagc
+aatttacgacagttcagcgaagtgactactcggcgaaatggtattactaaagcattcgaa
+cccacatgaatgtgattcttggcaatttctaatccactaaagcttttccgttgaatctgg
+ttgtagatatttatataagttcactaattaagatcacggtagtatattgatagtgatgtc
+tttgcaagaggttggccgaggaatttacggattctctattgatacaatttgtctggctta
+taactcttaaggctgaaccaggcgtttttagacgacttgatcagctgttagaatggtttg
+gactccctctttcatgtcagtaacatttcagccgttattgttacgatatgcttgaacaat
+attgatctaccacacacccatagtatattttataggtcatgctgttacctacgagcatgg
+tattccacttcccattcaatgagtattcaacatcactagcctcagagatgatgacccacc
+tctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagacgatatcaagcgc
+tttaaattgcatataacatttgagggtaaagctaagcggatgctttatataatcaatact
+caataataagatttgattgcattttagagttatgacacgacatagttcactaacgagtta
+ctattcccagatctagactgaagtactgatcgagacgatccttacgtcgatgatcgttag
+ttatcgacttaggtcgggtctctagcggtattggtacttaaccggacactatactaataa
+cccatgatcaaagcataacagaatacagacgataatttcgccaacatatatgtacagacc
+ccaagcatgagaagctcattgaaagctatcattgaagtcccgctcacaatgtgtcttttc
+cagacggtttaactggttcccgggagtcctggagtttcgacttacataaatggaaacaat
+gtattttgctaatttatctatagcgtcatttggaccaatacagaatattatgttgcctag
+taatccactataacccgcaagtgctgatagaaaatttttagacgatttataaatgcccca
+agtatccctcccgtgaatcctccgttatactaattagtattcgttcatacgtataccgcg
+catatatgaacatttggcgataaggcgcgtgaattgttacgtgacagagatagcagtttc
+ttgtgatatggttaacagacgtacatgaagggaaactttatatctatagtgatgcttccg
+tagaaataccgccactggtctgccaatgatgaagtatgtagctttaggtttgtactatga
+ggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgacgaatttatacta
+atacgctttcactattggctacaaaatagggaagagtttcaatcatgagagggagtatat
+ggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcattcttgaaagata
+cataagcgataagttacgacaattataagcaacatccctaccttcgtaacgatttcactg
+ttactgcgcttgaaatacactatggggctattggcggagagaagcagatcgcgccgagca
+tatacgagacctataatgttgatgatagagaaggcgtctgaattgatacatcgaagtaca
+ctttctttcgtagtatctctcgtcctctttctatctccggacacaagaattaagttatat
+atatagagtcttaccaatcatgttgaatcctgattctcagagttctttggcgggccttgt
+gatgactgagaaacaatgcaatattgctccaaatttcctaagcaaattctcggttatgtt
+atgttatcagcaaagcgttacgttatgttatttaaatctggaatgacggagcgaagttct
+tatgtcggtgtgggaataattcttttgaagacagcactccttaaataatatcgctccgtg
+tttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtggtgtatatatcgg
+ataacaattaatacgatgttcatagtgacagtatactgatcgagtcctctaaagtcaatt
+acctcacttaacaatctcattgatgttgtgtcattcccggtatcgcccgtagtatgtgct
+ctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgttaggtaagatctct
+ctgaattccttcgtgccaacttaaaacattatcaaaatttcttctacttggattaactac
+ttttacgagcatggcaaattcccctgtggaagacggttcattattatcggaaaccttata
+gaaattgcgtgttgactgaaattagatttttattgtaagagttgcatctttgcgattcct
+ctggtctagcttccaatgaacagtcctcccttctattcgacatcgggtccttcgtacatg
+tctttgcgatgtaataattaggttcggagtgtggccttaatgggtgcaactaggaataca
+acgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaacgtgctccttgct
+tagcttgtgaatgagactcagtagttaaataaatccatatctgcaatcgattccacaggt
+attgtccactatctttgaactactctaagagatacaagcttagctgagaccgaggtgtat
+atgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcgagaagctaatacc
+ggctgtttccagctttataagattaaaatttggctgtcctggcggcctcagaattgttct
+atcgtaatcagttggttcattaattagctaagtacgaggtacaacttatctgtcccagaa
+cagctccacaagtttttttacagccgaaacccctgtgtgaatcttaatatccaagcgcgt
+tatctgattagagtttacaactcagtattttatcagtacgttttgtttccaacattaccc
+ggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgtaggaagtgaaaag
+ataaatattgcctacacatactgaattcaggcaatgcgttttattcgaaaggtcatataa
+ctagaaaacatgatgaattcttatcggatccttttactagcatagtgttggcgaacacct
+cgtaatgctcagcggcaaattggactgcgggtccttatcatacattttttttcaatatag
+gcgattggtctaggttagtgattccccaacacttaaggtttgctgacattcataccctca
+gcaacttcctctcaaaaattagagtgagttggtggtcttataagaccgttgattatttga
+ggtggtcaaatgatggtgcgatgcacaaatcgttataatcgtactctgtagacaataacc
+cattgtagtgccgattttgtgcataatacaagaaggaggatataaaaatgacttttcaat
+aatattggctattagcaacaagaaggagaatcctcattaagttagcaaccgcagggggta
+ctgcagtccaaggaggtttcattggagagagcagtatgaaaacggcaattatgattgtga
+gattcgctgaagattgtgtctctgattttcctagatagaataagctatagctacttaatc
+aactcttaactgtggagactatcctgatgatctgaataccccatttacaaaattccatat
+caatgaggctaacgcttaaatttcatttctccatcgtaacaaaaatcagcctttttatac
+aagacaaaacactgcttccattacgggtagcaatggttgctcgactactggtagcgtcgt
+gatgtggtgataaagctgtcttgcgtttatacttaaacaaattttgacctgacataatgg
+agcgacttatcggatgttgccgatctttagggtcatctattaagcttatacgaaaaaggg
+acaagcacgttacgtaatctggtaggactgggtacctagaaacgcaagaggaggcgaact
+ccaatatctgtaagaacagaaaaatacaggagtccttttcatttttcaagttaacaatat
+aagtaggagcttagagaggcttgcatgaaaatcgttaggaattacagaataggcagagag
+tggggcgtgtagactacattcttcaggccccacaatatgggttataggttaaactgcact
+ttttgcgatctcccgaaatactgtcgttctctgcgaaccacgctcgttccttttgctgta
+gtccacgttcatccaactattcagataaacaagatcgcagaattaaagcttaaccatatc
+ttgatagcccatcgtgtatggggcatgtatgtgcaaacaaaagacctcaatcttgtctgc
+gagagggaggaaaatttagacaaacataattcattctttcgactggacacgctaaggttt
+ggacaaactttgtatctatatctggaggcctgtattccagcccttcttttaataagattt
+acggcttaaactatggatatttgccaggaaatgacactgctattgacaggaacataattt
+tgattcaaacctcattgttaattattttatatctcctgtttttatatcagaatgcttctg
+tcctagaaggcatactcaaggtgagggctcgaggaatgaatcataatagaccggccccta
+ttaatattggttcaattctttcttacataacgcggaatttgattgcacgaacaccgggaa
+cacataaccgtatagcgcccgttatgctagtgcctagcgactgggaccgtggagtctata
+tcgtctttctaccattattaatctaaggatataccactttaagtcctttcaactaacata
+aggcgcattccatgcgctaaggaccttgaatttattatttcttacatgataaaagatcga
+gtcgacgggaacaaaaggctacgtactcaataaagtgcagtttactaagagccctttttc
+tggcttgtggagactatcataacatgaagatgttttgacattcaatagtttgcaaaacaa
+acttactttgtgtagtattgaacgagatctttccaattgccccatagcaggaatagttat
+atattgcagatcgcggtgtaacgcactccaaatccatcgcggtgtgtgagggtaagcgac
+ttaaagaattacggtttttgatcaaagcacagtgagagttgagcaaattacagttatacg
+acttaattcagtctccataaattgaaacgacacttcttaacgggaggaccagacacgttc
+attaagtgaggagtgcactttttgactttaaaaacatggtaatcaatttaaaccacttga
+tatgtatatgaacagatttgaagttatttctgttttaatacactgggagttctgtcaata
+tcgcaggaaccgcctgacgtcccctatcacacctcagagggtaaagggacaggggaaagg
+gtaatcgaggggtagggaacgtagttggcacacccaatggacgaataaatgctgccatat
+ccacggagggcgggattgcggttgattttaaggcgatggtaacctgaatgtaatagatca
+tcaaatgcctcctccactggaaattactgcgtacatccgctgagaattgcaatggagtgt
+ctcggtttttctttaaacaaaaccaaattgacaacttcatagtataatttttgcacatta
+caagcgttaattaacaaacttactttgctgttagctgcctatatttgtccgacaatataa
+ctggatatctctgcgagaactgtaaattaacggcacttggaacataatagttcctattgg
+taacgacgttgtaggcggcaattatccggtggaagaattgacaactgcagttgaactgca
+tgaaagtcaaatctctcgtaagtataactttagaagactccaaggtacccagaacctctt
+cagcggacacgatcgctatcaatcaataaggattattcactgaaaccgctcatatctgga
+ggtggacgtttttcttcgaaaagcttgtcaaaggactcatcaaatttttggccgtgctaa
+tcgacacacctgttattttcatgaccggataggacatctcgcggaaattcgggtaacagc
+tgggtagatataggacctcccctacgtattaatgataagcctgtcataactagcttggtt
+taccgaagagacaataaacattcgagcgctcgtgccaaactcggtgcattacgtttgaat
+aaatcggtaacatgtactattactctgcctaacggcacttacccgtttgggtccatgggg
+taaccgctcgatgttgacagaattatgctaaagtcgtttaagatcccgattaccgaaaat
+ctggttatgtctgagcattcgtacactgcgtattaagatcaggttgaacaggttcctaac
+aaattttgtgacctaaagtgaaactaggtcgtactctgggcatgttttatgtcgtggcgt
+atgcatgtgctgacacttctaaaaccaaattaaggctttatccaatatgggtccttaagt
+gctaaacatcattcacaatttcaagacagattgttggtcttgtcgattccgcatctgtcg
+ccaaattgacacatcgtaaaccaggtacatcggtaattatatgttgactaaactaccgtg
+tgtattctggctctaggtacggcgaacaagtacgatgtgcttaagaagccctcaccccag
+acgagcccgcgtaggtcacatcagcagatcctaagtaattccgttttattgtcctgaggg
+agtaggatcgacgaactctacaagtcgctttgtcgtgccttataggctatttcgggtcaa
+tgtagcgtcaaatgaactattgtcatctgtacgagttaactaagtgtctatcgccaacta
+aaagacgtctcgatggttctttatgcggacctgtcatatcattgactggcacttgcttac
+atccaaataacacgtttgttagcggatagtcgttaagtgtgcgcaagatcatgaggcggg
+gggggtaatatttcgccctctacatgataaatgaataagtaagaagatgatctttttgtg
+gcggtaccttaagcgtactcctgtcgacgagttactactaaaggaatgtagggttctgga
+tctatgaaaagcgacctccatatatatacgggcctaagcggagtaaaataagtgatcaat
+ggactaacattgaaatgttagtattgtcgaccattgagggctggtaaatcttatttacgg
+gcgtgggaaaacgaacgtgatatggtttagcatgggatgcaagcactcgttaatgcttac
+tttagttggttgcgggaacaacaggaggctatactaactggtagcgttcttgcttccatt
+atgttattattataattaaaaataagacatatggtagagttgtagtcagggtggatcggg
+ttgtctataacgttggaataatcaaaactatcgttaacaaaaacgaaatttaagtcggtg
+cggtggaatgcgcctacctcatgtgcaccacacattcacagcacacccctcattataggc
+aaggaagcaaacaaaaaaaagttaatcgaccgtatccgaccttaaattttaaaataaata
+gaaacacttagcggtaatgaaaagataggactaaaattcactagtatcctggaacgaggc
+aacagagttatctagatggtaacgaggtgctgcatcaagatgtatgatttttggtccgct
+gtgtggaatacctctattgatatacaagtgactttctcggtaataacgcacttcacaatg
+tgttgtttcttttctatgtattttgcaagagaaagaagcttagtataggtacacctcaga
+gatgtttcgtgtaaatcgtatcacatggtataactgcaggaggaacattatccaaattca
+ccacaattactaatccacccttttacttttactaaagatatattaattctcatgttgtct
+gaattgtataacccggtaccctgggagcgtatcgaaggataccaattgaagtcctcgagg
+catgttacaacacacgacttccttccgtctattcagacactcaacgagactaacttttcc
+taggtaatcaatgatattgggtaactcgtggcatcttatagttattgatccggctctttt
+gtagatcctgtgcgactcgtgcgctaattaagactggctctcttgcgcaggggatacgtt
+tattctacgtacccgatttggttactactaagcggcctttcttcaaacttgcagttgtga
+cttacattcctatttcttcaaagcagggaagggttacagggagagacttattgagatacg
+attggaatttccatgtacaatcgttaatacgcttgtagaccagcaactcagtatagagat
+ccgtttcctaaagggtgagcggtaggggcaaggcaataagaaattactaaaaccctagtt
+gttaatataagaacgattcgaaacaataggattgcccaagggggtgcgaacatggtgtaa
+atcaaagagaaataggcattgttaaaacccgcacgtttctagtacgcaagaggaacgtcg
+gtaaccagttctcaaagatcctaacctaaaaggggcttattctactttttccgacactca
+atggacgagacaaacatgaacggatagctttaggtctcgttgaatgcaaagaatagaatc
+gttattattaatcggtttccattatctatatgcggtatagatctccgagaggaccctgta
+aactagctctgcggtttaactggtgctaatagaccgccactatgttattgcttctagctc
+ctagcgtcttatcatgttatacattaatgtcgcatattggacagtagccaggcttggatg
+gatcgccgacaaaaagaaaagactttccctgtaaggacttaactattacatataacttgg
+atcattaatctgcaaattagagtaacggtctttcaccagcttcatattccaacgtggcgc
+tagtcgatatcccatgaagtttaaaactagaattggcagtctcacttcacagtgcgtatc
+tatacgacaaaagtggtcgatttgcataaatatcttatcgatattcaggttattaccgat
+tccttgctaacgctagaagtcacaccagagtaataataattccagacacctgtgaaataa
+tcggtcactacggatagactagtaacgataatacgtatagtccataaaagttgaatttta
+ggggctaaagatattagcaatactggtctagcctaatcgtcgatagcaaagggctgtgag
+gatttctcctacattttcgaccaattgtatcgataggaatagttacagtcacgcttgtag
+atgtaagagatgacgttattcttagggttcttaagtcggggggtaatttaagaccactag
+taaaggtagaggcgtacacagtaaacgatattttgaaatcgtcaaaaaaaagtttacaac
+atcctttaagttagcaactgattttagtggcaaccttaacggttgaattgatctactaat
+acaggcctacaccgaagggtacagataatgattcttactaccctaacatgatagagtcct
+gtcctatctcataggtcgacattttaaattcgtaatgagcaacgaagatcgtttcccaat
+ttgcaacattcacttatagacttcaggttatttcgtgctaacattaagatagaatataat
+cagtcgttaagaaactattatccagctttcgtcaaccataaagattaaaaactgaaactt
+ggcaagatatgaatagctatcctgctttaaccgatcgtatgagatgctttgtagcaagaa
+aagtgactagcacttgtgtttagtaaagcgggagagtgcggtaattaatattaatatact
+attaagctacacagcaaaggctgcaataatgttagtaagtagaacataaaggtattctcc
+acaagtaataaatagtgtgagctaattgactaacttaactctcgcgacaagtgatgtgga
+taagatgactcatatcgtctttttctgtagtgccgacatcccacctggatcgaacaattc
+cttctagttatcgactttgattacctatcctattaaacagatagggttgtaaagtcagaa
+aatgatcggcttgcgttggtctaccatagctagagttagaacgcgtagatagaggccttt
+tgttgccaacgtgggggtgggatgagtctgggcgagcgtgactttctttcgtgtccgaat
+ttgtttaacatccattagattagatgtttgtgttttgggtctgatgtcctaactactttc
+tcagtgaaactaatgtcatcatccaagtaaaatagtccgatgaagtctccgttttcggcc
+gaagcttgtctataacgtatataaagtcgctgaatttagaacacaccttatctatgttgt
+aaagttactttattccaaaggacgtgcacgaagcgtgagtgtgggaaggaacttaaagtc
+ggatcactcttgtcagtgtagataagaatttctttcatacttcactggaatccggcgtat
+ggatatctctaccgcgtcatctggtggtgtctgcggtaaaaagtcttgctgcacgagtct
+gagaaatttttggtgccatcacatcgtaactgtacaacgaacaaatagcatcaggccttc
+ttatccagcgtgaagtctaattatttcacaagctttcctaagtatgtaaatccctcactt
+aatgatgcttgcgccaatgaggatagaggacattgcatgtacgtaggactattctccaag
+gggtcttctattttgttagcgaaaattgttacagcctaatgttagagcggcgtacgactt
+tataccagatactttcattagatatgcaaatatccaattaaatcatagtagtatcgtggt
+atggacaatcaaaaaagacccgttgtgatatgatgtttttctagttcgttctcatatata
+tagatcaacaatgaataatctcatgatctataaccgatgtatatttatattccggttgac
+tgctccggtgcaattcactacggacactaatgactaatatggcgcctttcatcagaaacg
+ctaaatatgattaatgaattaagggagtattatctaattattagagagtagcagttagtc
+tgatattttcggtgtatgtgttagccgttataatgctgtctttttatcagtgagaacagg
+gagtgtgtagtgttgtatgcttcactttatgactctggttatatccctcggagaacaaga
+ataagagtacgagaagttcggtcattgaggatgaaatagaaccgctagacgaatggactc
+acgtttataaaactatgtatcacagtactacagctaactctgaagtccgagaagcttttg
+taggacaaaacgttataagtacctttcgcagaatacggccgtgcatacctgttataaggc
+gtagtagggacaccatgctatccctcatatagagctacactaataccattacatggtgac
+tatcgtttacggccatcatctgtaagcgatcatgcctcgttagcatccgtacaatctcgc
+atggcgtcactgcagaaaaaccccgtgcggattttgagtcagaactattcgaagcttctc
+aatccttttccattatggcatagcaagtgacgactcgtcagccatgggaataatagcact
+aatccgattacttatgaattagaacccacatgaatgtgattctgcgaattgtctaagaat
+ctaatgattttccggtgaatatggttgttgttatttattgaacttatattattaacatca
+cccttcgttagtgatagtcagctatttccaagaggttccccgagcatttttaccattctc
+tagtcatacaagttggagcgcttttaaatctttaggctgatcaaggcgttttgtctagaa
+ttctgcagatgttagattcgtgtgcaatccctcttgcatgtcagtaacaggtcacccgtt
+tttcgttacatatgctggtaaaatattcatagtaataactacaatacttgatttgttacg
+taatgctcgtacataacacaatcgtattccacggaacagtaaagctctattattctgatc
+gagcctaagagaggatcacactacgctattaaagtcacgttcacgaaatctcaaacctca
+actgctggtgaccagttatagacagtgtaattccatattacatgtcaggcttaagctaac
+ccgagcctttatataagctataatcaagaattagattggagtgcattttagacttatcta
+tcgaaatagtgatagtaagagtttatatgacctgatctagactgatgttctcttccacaa
+cagccttaaggcgtggagcctttcttatactattaggtcgcgtcgagagccctattcgta
+atgttaacgacactagactaatatacaatgagctaagaataacacaagtcacaagataat
+ttacaaatcatatatctacagtccacaaccatcactagcgattgcaaagcgttattggta
+ctaccgctctaaatcggtatgtgcaagacgcgttaactggttcaagcctctcctgctcgt
+gagactgaaagaaatcgaaaatatggatgtgcctaattgttcttgtgagtcatgtgcaac
+tatacagtttagtttggtcaagactatgcaactattaacagcatgtgcgcattgaatatt
+tggtgtcgattgataaatgccccaacgttccatcacgtctataagccgtgttactaatgt
+gtattagtgcatacctattcagaccatagttcaactgttggactgaaggcccgtcttggg
+gttcgtgaatgagagtgcagtttcttgtcttttccttaactgacctaaatgaaggcaatc
+ggtttatctagagtcatgcttaaggtgaatttcagccaatgggctcccattgagctagta
+tggtgctttacctttgtaagtggtggctttccttggtgtgctgactttaacacggcagag
+tgattatccgaagaatggataataagacgctggcaatattggctaataaagtccgatgag
+tttcaatcatgactgcgaggagatccatgcggtgtacctaaacctacatcgtatgtattt
+gctgacgttcattcttgatacataaagatccgatatcggtccactttgtttaccaaaagc
+cctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatggggatattgccg
+gtgagtacaagttagaccacacattagaactgacctatattcgtcatcatagagatggag
+tatgaattgattctgcgaagtacactggctttacgagtatctagacgccgcggtatatct
+cccgtcaatactatgaaggtatatatatagaggctgaaaattcatgttcaatcctctttc
+taagagtgagtgggagccccttctgttgtcggagtaaaaaggcattattcctcaaattgt
+cagaagcaaagtatacgtgatgtttgcttagaacaaaagagttaccttagggtaggtaaa
+tctcgattcaccgagagaagtgattttggcggtgtgcgattaattcttttgatgacagat
+ctcattattttatatagctccctctttgtatttagagtttgcgtaggtaacctggcaaaa
+ccatatcccggggggagagtgcgctgaacattttatacgatgtgattactcaaaggataa
+ggttcgaggcctctatactcatggaactatcttataattataatggatcgtggctcattc
+cacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaacgtacatcttcta
+aggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaaatatttttaaaa
+attgattctactgcgaggaactaaggtgtagacaagcccttagtaaccggtggatgtcgc
+ttcagttttatagcaaacattattcaatttcagtcttgactgaaattagtttgttagtgt
+tagaggtccatatgtcacatgcatatggtctagatgccattgtacagtaataccttagat
+tagtattagcggcatgcgtacttggatttcacttgtaagaatgagcttaggacggtcgcc
+tgtagggctgcaaataggaatacttacaatttttgatgacttgttagcatatcgctatca
+cccataaaaaacctgatacttgatgagcgggtgattgagactatgtactgatataattca
+atagctccaatagatgaaacagctatgcgcctatttatgtcaaataatcgatgtgataca
+agcttagagctgaacgagcgcgagtggaattagcggtgatctctatcctaaaaagccacg
+aaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagttaaatttgcatc
+tcatgccccacgaagaatgggtagagagtttgaaggtgcttctggattttcctaagtacg
+tggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaaccacaaacccctgg
+gtgaatctgattagccaacccagtgatctgatttcagttgtcaaatctcttttttataac
+taccttttgtttccataatttaaccggatctcataatgaacaaacgggtagaataatggt
+agcacatagcgagcttgtctattcagaaatatggcctactcagaatgtattctccaaatc
+agtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttatcggttccttgta
+ctacaatactcttgcccaacaaatactaagcataacagcaaaattcgaatccccctcctt
+ttaataaatggtttttcaatatagccgattcgtattcgttagtctttcaccaactattaa
+cctggcatctaattaataaaatcaccaaaggactctataatatgacagtcacttcggcct
+cttttaagacagttgattattgcaggtccgcaattgatggtgacatgcacaattagttag
+aatccgactatggagacaattaacaattgtagtgcccatttggtccagttgacttcaacc
+acgagttataaaggtattttaatttatagtcgatagtaccaacaacaagcacaatcataa
+ttatgttagaaaacccagggggtaatgctctaaatccagctttaaggccagagtgcacta
+tgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctaggaggtgccgagtg
+agaatatcagataccttatgaagcaacgattatatctggactagatcatgatgatcggaa
+taaaacattgaaataagtccttatcaaggagcataaacattttatttaatttatacttcg
+taaataaattcagaattttttttcaagacattaatctgagtaaatgacggctagaaaggg
+ttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgcgtttttactgaa
+acaaaggttcaccggaaagaaggctgccacttttagcttcttgacgatctttagcgtcat
+atttttagattagtcgaaaaacggaaaacaaacttaacgaagctggttgcacggggtacc
+gagaaaccaaagagcaggacaactccttgatcgggaagaactgaaatagacagctgtcat
+tttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgcatgaaaatactg
+aggatgtaaactatagccagtcaggcccgcgtgttgactaattgatgaagcaaacaaaat
+agccggtattcgttaaaaggaacgggttgccagctacagatatactctaggtatatccca
+aacaagagacgtcctttggctgttgtaatcggtcataatacttgtcacataaacaagatc
+gctgaattaaacattaaacagttagtgatacacaatcgtggttggggctgggatgtgcaa
+taaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaacattattatttc
+ttgacaatggaatcgataagcgttcctctaacttggtatatatatctcgaccccgggatt
+ccagccattcttgtatgaagatttaaccatttaactatgcatagttgaatggtaaggaaa
+atgatattgactgcaacagattttggatgcaaaaatatttgtgaattattggttatatac
+tggttgtatagcacaatcattaggtcctagaaggcatactcaacctcagcgagagagcta
+gcatgcataattgtaccgcccatattaatattcctgaaatgatttcttacattacgccca
+atttcagtcatcgaacacccccatcaatttacccgatagagaacgtgatcatacgcaata
+ccctatgcgaacgtccactctatagcgtctgtatacaatgattattcgttccatttacaa
+cgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctcctggaatgtatg
+agttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgtacgaatgaaagg
+ccacttttagaagagacctttgtatccattgtggagaatatcataaattcaagatggggt
+gtcatgctattcggtcctaaacattcttaatggctgttctattgttagtctgatttaaaa
+tggaaccatagcacgaatagttagatagggctcatacccctgtaacgatctacaaatcct
+tccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatcaaagaacactcac
+acgtcagattattacactgatacgaattatttcagtcgacagtaattgaatagaaactta
+ttaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttgactgtaaaaaaa
+tggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagttttttctctgtt
+attaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaagatcacacatca
+cacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtagtgggatcaacat
+atggacgaatttatgctcaatgagccaacctcccccgcattgcggttcattttaaggcct
+gggtaacatctatcgtttagataatcaaaggaatccgactatgcaattgtctgacttcat
+ccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaataccatattgaaatcg
+taatacgataattgttgctattgactacaggttatgaaaaaacttactttgcgggtacat
+gcatatttttgtaccacattattacgcgatatctctcagtgtactctaaattaaaccctc
+ttcgaacattttagttcctattcgtaaacacgtgctacgcggcaatttgccggtcgtaga
+atggacaactccagttcaactgcatgtaactcatagctcgcgttagtataaattgactag
+tagccatgggacaaagtaactagtcagcggaaaagatccctttaaagatatatgcaggtt
+gcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagcgtctctatcgta
+tcttctaattttgggccgtgagaatcgaaactactctgatttgctgcacacgttaggtaa
+tatcgcccattttcccgtataagctccgtacttatacgaactacacgaccttttaagcat
+tagccgctcatatcgtgattcgtgtacagatgagtctattaaaattacagacatactcca
+tatctcgctccttgaactttgaataatgcgctaacttgtactatgaataggcagaaccca
+actttcccgtttgcgtcaagcggggaaacgatacatgttgtcagatttatgattatctag
+ttttagatcacgtttaccgataatcggctgtggtctgagcagtcctacactgagtattta
+cttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaatacggagtacga
+tgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaaccatttttacga
+tttttactatagcggtcatgaagtgcgaaactgcttgcaaattttctacacacattgtgg
+ctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccagggaaagcgcgaa
+ttatttggtgactaatagtccgtgggtttgagccatatacctaacgccataaactacgtg
+gtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcagcacagactaact
+ttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaagtcgcttgcgcgg
+cacggattcgattgggcggctcaatcttgcctaatttctactattgtcagctgtacgact
+gtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttatgaccaaaggtct
+tataattgaagcgcacttccgttcatcaaattaaatcctggcttacccgattctccggaa
+gtctgacctagagattgacgacggccgcgtattattgagacctcttcaggattaatcaat
+aacgaagtagttgatctgtttggcgacgtaccttaagccgactccgctacacgagtttct
+actaaaccaatgtagccttatgcttagatgaataccgtcctaattagatattccggcata
+acagcagtaaattatctgttcaatggacgaacattgaattgttagtattctacacaagtc
+aggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatgcttgagcttgcg
+ttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacaccagcatattcta
+tatgctagacgtcttccttaaaggatcgtagtattataattaataataagaaatatggtt
+gacgtctagtcagcgggcatacgctgctctatatactggcattattcaaaacttgacggt
+aaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgggaaccaaaatgt
+cacagaaaacacctctttattgccaagcatgcaataaaaaaaatgttaatagtacgttta
+cgacattttattttataataaagagaaactattacacctattgatatgataggacgtaaa
+ttaacgagtagcctgcatagaggcaaatgaggtttctacatggtatagacctgatgctga
+aacatcgatgagttttggtcccctcgctcgttgaaatctagtcatttactactgtctttc
+gagctattataccacttcactatgtggtgtttctttgctatgtatggggctagtcaaaca
+tgatgactatagctacaactcagagagcgggcgtgttaagagtatctcatgctagaactg
+cacgacgaacttgatacaaagtaacaacatttacgattccacaaggtgactttgaagaaa
+catagtttaattctctgcttcgatcatttctataaaccggtaccatcgcagcggatagat
+gcataacatttctactactccaggcatcttaaaacacacgtagtacttcactagattaag
+acacgataagtgtataacttggcagtgggaagcaaggagattggcgaactcctggcatct
+gttacgttttgttcaggctcggttgttgataatgtccgactcctgccatattgaagactc
+gctcgagggagatcgggattcgttgattataagtacacgtgttccgtaatactatgaggc
+agtgattcaaaatggcacttctgacttacatgactaggtattattaccacggaagcgtta
+aaggcacactcttatggacttaagattgcaagtgccttcttctagcctgaattcgcgggt
+tcaacacaaactctctttagacatccgttgcctaaaggctgagacgtaggggcaaccctt
+taactatgtactaaaaaactagttggtaatttaacaacgtgtccaatcaagacgatgcac
+caacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtgataaaccccacct
+tgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataacctaaatccgga
+tgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagcatacatttaggtc
+tcctgcattgcattcaattgaatcgtttgtattatgagctgtacagtagctatatcagct
+atagttatcccagaggaacaggtaaactagctctgagcgtgaaatccggatattagaacc
+cctagatgggattgattctagctaatacaggcttatctggttttacagttatctagatga
+ttggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtattgcccgggaagc
+tattttctaggtattataaagtcgagcattaatatcaatttgacagtaaaggtctttcac
+cagcttcatatgccatagggcccatactcgatttaaattgaacggtttaacgagtattgg
+aactctcacttataactgagtagctatacgaaaaatctggtccatttccagaaatttatt
+atcgatttgctgcttagtacccaggaagtgataacccttgaaggcacaacactgtaataa
+gttttcctgtcacatctgtaatattcggtcactacgcattcacgactaaagataattact
+atactaattaaaagttcaatgttagggccgaatcatagtagaaattctcgtctagcctaa
+tcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaatgctagagatag
+gtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagttcgcttctttagt
+ccgggcgtttgggatgacaactactatacgtagagccgtactcaggattagatagtgtga
+aagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtttaggccaaacat
+taaccgttgtagggatattctaatacaggccttcaccgaaccctaatgataatctgtctt
+aataacattaaatgattgtctccgctacgagctcttagggcctcattttaaatgactaat
+gtccaaagaagagactttcccaatttcaatctgtcacgtatagacggcaccttagtgagt
+catatcattaagatagaagattatcaggagggaagtttctattatcaaccgttacgcaac
+cataaacttttaaatctcataatggcattgagatcaagagctttcatgatggtaaagttc
+gtatgtgatgctggggagctagatatcggtataccacttcggttgtggtaagcccgagtg
+ggccgttagtaatattaatagacgattatccgacaatgcattcgctgaaataatcttact
+taggagaaattaatgctatgagccaaaactatttatgtctgtcacattattgactaaagt
+atctatcgacaaaactgatgtccataagttgtagcagatagtcggtgtatggtgtcacca
+atgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaaattgcctattat
+acagataggcttgtttagtcagataaggttccgcttgaggtgctctaacttagcgagagt
+tagaaagcctagtgagaggcattttggtgccaaactccggctcgcatgagtaggccagag
+agtcactttctttcgtcgaagaagttggtgaacagccttttgattagttgtttgtcttgt
+ggctatgtgctactatataagttagaacgcaaactaatctaatcagcaaagtaaaatagg
+accttgaacgagacggggtacgccgttgaggctcgagatagtagataaactagaggaatg
+tagataaaacattagctagggggtttagttactggattacataggaagtgcaccatcacg
+gtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggacttaacaagttcgtgc
+ataatgaaatcctatacggactttgcatatctctaccgactcatctggtcgtctatgcgg
+gtaattgtattgctccaagtggatgactattttggcgtcccagcacatagtaaatgtaaa
+tccttataatagcataagcaattattagactgcgtgaagtcttagtagttctcaagcttt
+acgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccattgaggtcattga
+atgtacggagcactattatcaatgcggtatgcgattttctgagcgattattgttaaagac
+ttagcgttgagccccggaacacttgattacagattctttaaggagttatccaaatatcat
+tttaaataatagtagtatcgtgctttggacaataaaaaaagacccgttctcttatgttgt
+tttgcgacgtacttctctgatatatacttcaactatgaagattctattcatcgataaccc
+aggtatatttatatgcccgttcactgcgcagggcaaattatctacggacaataatgacgt
+agttggacccggtaagaactaacgcttaatatgattaaggatgtatgccagtattatctt
+attatgtcagagtagaagtttctctgagattttccgtcgttgtggtacaccggatttggc
+tctctttttagaactgagaactcggagtgtgtagtcttgtttccttcaatttatcaatat
+gcttttataccgccctcatcaactataacaggacgacaagttccgtcttgctccatcata
+tactaccgatacaccaatcgtatcaagtttagtatacttgctttctctcttctacagctt
+actcgcttgtccgagaagcggttggtgctcataaagttagtagtaaatgtacaactagta
+gccagtccttacctgtttttacgactactacggacaccatgagatacagaagttagtgct
+acaattataccattacatgctcaatatcgttgtcggccataagatcgaagagtgcatcac
+gcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacacactccccttgttg
+actaacatcttttacaagaggctaaatcattgtccaggatcgaataccttgtgtacaatc
+gtcacccatcggaagaataccacttttccgatgtagtatgatttacaaaaaacatctatg
+tgagtaggccaattgtagtagaatatattcatttgaccgtcattagccttcttcttaggt
+tgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcgatttcatacagct
+gccaacaccttttttaccaggctagagtcagaaaagttggagccatgttaaatagttacc
+atcataaaccactgttgtctactagtctgatcagctttcatgcctgtgcaagcaatatgg
+attctcacgtaatggtaacaactgttgcgttacttaggctggttaatttgtcagagtaat
+aaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcctaggaataggaa
+aagtaaagctcttttattctgatagtgactaactcaggatctaaatacgcgattatacta
+accttcaccaaagctcaaaaatcatctgctggtgaccagttatagacagggtaattcaat
+atttaatgtctcccttaacatttcaccagcatggattgaagatagtataaagttttacat
+ggcagtcattgtgtcacggttctatacaaattctgatagttagacggtatttgaaatgtg
+cttctagcatggtatcttacacaactgaatgaacgactggagccgttcgtatactatttg
+cgagcctcgagaccccgtttcctaatgttaacgaatatagtataatataaattgtgatat
+gaataacacaagtaactacagtttggacaattaattgttctaaactaaaaatcattcact
+tcagatggcatagagttatggctactacacatataaagcggtatgtgaaacacccgtttt
+agccggaaaccctctactgctcgggacaatgaatgatttccaaaatatggatgtgcagaa
+ttgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtcgttgcaaagttt
+aaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaaacgtgacagaaa
+gtctagaagaactgtgaataatgtctattactgattaactagtaagacattagtgcatct
+ggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtcgtggctgttccg
+gtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaaggtcaatttcaca
+atatccgatcacattgtgctaggttcgtcctttaccttgcttagtgctgcatgtacgggg
+tgtcatgacttgttatcggcagactctttatcccaagaatggataatatgtacatggaaa
+gtgtccataattaagtcccttcactgtaaagaatgactgccacgtgatccatgaggtcta
+cagaaaccgacttacttgctttttgatcaacttaattatggattcataaagttcagatat
+cggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatctgaatgacagtg
+atagaaaagatccccatttgcccggtcagttcatgttacaccactcattagtactgtaag
+tgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaactggatgtacga
+cgatcgagacgaagaggtatatataacctaaatactaggtacgttgttagagagacgatg
+aaaattaatcgtcaatacgctggcgaacactgagggggacccaatgctcttctcggtcta
+aaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctttgcggagaacaa
+ttcacggaacgtagcgttgggaaatatcctttctaccacacatcggattttcgccctctc
+ccattatttattgtgttctcacatagaattattgtttagacatccctcgttgtatggaga
+gttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacctgaaattgtttt
+tagttgggatttcgctatggattagcttacacgaagagattctaatggtactataggata
+attataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcatatgtggctaaca
+cggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagagcgcattgaatta
+ctcaaaaattatatatgttgattatttgattagactgcgtggaaagaaggggtactcaag
+ccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagtctatttcagtct
+tctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcatatgcgattcatg
+acatgctaaactaagaaagtagattactattaccggcatgcctaatgcgattgcactgct
+atgaaggtgcggacgtcgcgcccatgtagccctgataataccaatacttacatttggtca
+gcaattctgacattatacctagcacccataaatttactcagacttgaggacaggctcttg
+gagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcgatgcgactagtt
+agggcatagtatagatctgtgtatacagttcagctgaacgtccgcgagtggaagtacagc
+tgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaacccagggggaaac
+attgagttcagttaaattggcagcgaatcccccaagaagaaggcggagtgacgttgaacg
+ggcttatggtttttcagtacttcctccgtataagttgagcgaaatgtaaacagaataatc
+gttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagtgtgagcatttca
+cttgtaaaatatctttggtagaacttactttgctttaaatatgttaaaccgatctaataa
+tctacaaaacggtagattttgcctagcacattgcgtccttctctattcagatagaggcaa
+tactcagaaggttttatccaaagcactgtgttgactaacctaagttttagtctaataatc
+atgattgattataggtgccgtggactacatgactcgtccacaaataatacttagcagatc
+agcaattggccaagcacccgacttttatttaatggttgtgcaatagtccagattcgtatt
+cgggactctttcaaataatagtttcctggcatctaagtaagaaaagctcataaggaagcg
+atattatgacacgctcttccgccgctgttttgaaacttgagtattgctcgtccgaaattg
+agggtcacttcaaaatttactgagaagacgaagatcgactaaagttaaaatgctagtcca
+cagttggtcaagttgaattcatccacgagttatatagctattttaatttatagtcgagtg
+tacaaaaaacatccacaataagatttatcttagaataacaacccccgtatcatcgaaatc
+ctccgttatggcctgactcctcgagcttatagcatttgtgctggcgctcttgccaggaac
+ttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatgatacgattttatc
+gcgactagttaatcatcatagcaagtaaaatttgaattatgtcattatcatgctccatta
+acaggttatttaattgatactgacgaaattttttcacaatgggttttctagaatttaata
+tcagtaattgaagccttcataggggtcctactagtatcctacacgacgcaggtccgcagt
+atcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggctcacaatgttac
+ctgcttcaccatagtgagccgatgagttttacattagtactaaatcccaaatcatacttt
+acgatgaggcttgctagcgctaaagagaatacatacaccaccacatagaattgttagcga
+tgatatcaaatagactcctggaagtgtcagggggaaactgttcaatatttcgtccacagg
+actgaccaggcatggaaaagactgacgttggaaactataccatctcacgcccgacgcttc
+actaattgatgatccaaaaaatatagcccggattcctgattagcaaagggttcacagaga
+aagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatcttcgaatcgggatg
+aatacttgtatcataaaaatgtgacctctagtatacaggttaatgttagtgatacacaat
+actcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatcactcacccacgta
+tttggtctaattatgttttatttagtgacaatccaatagataaccggtcctattaagggc
+tatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatggtaccagtttaat
+tgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgggcttgatataag
+atttcggatgtatgggttttataatcgttggagagctcaatcatgagctaatacatggat
+ttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagtttaataggccgg
+attggattgagttaattaagaccttgttcagtcatagtaaaaacccttaaattttaccga
+ttgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagtgactaggtatac
+aaggtttttgagttcctttgaaatagttaactaatttaaaattaattaacgacatggaaa
+tcacagaacctaatgctttgtaggagttatttatgctgtttactgcctctacaaccctaa
+taaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggtatccagggtggtc
+aatttaataaattcaacatcgggtctcaggatattcggtcatataatttattaagggctc
+ttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttgtgaggcatctta
+caccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaaggaaacttgtta
+ccttggggatataagaaaactcacacgtctcattattaaactgagtacaatttttgcacg
+agaaagtaatgcaatacaatatgatgaaagccagctaatgaaaagggatggaacgcacct
+cggatctgttgcactggattaaaatccgattatttttaaaaatattcagtgctagagcat
+atcaggtctacttttttatctggtatgtaaagcccacggagcgatagtgagatccttacg
+actcaacgaaaagttataacataactcccgttagccaaagcccaatcccgattactgccc
+taccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtgactacctcccac
+cctttccccttcatttgttccactggggataagctagcgttttcagaatcaatgcaataa
+gaatagccaattgtctcacttcatcagagctcttggcaattccaggcgctacgtggttct
+ggaatatattcatttttcaaatagtaatacgtttagtgttgctattgtctacacgtttgg
+atattacgttatgtgagcggacatcaatagttgtctaactctttagtaagccagagatag
+cactcttagcgaatggataccatcttccataagtttagttaatagtccgaaacaactgct
+tcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaatcttactaatag
+atagagtttgttttaagggactactagaaatgggacaatcttaatagtatgacctaaact
+gacatttaaagatatatccaggtggcaagcataaagatcattgcgccacctccaccgtgg
+gattacttatcagtcgatatcctatatgctaagtttgcgacggcagaatacaaactaagc
+tgagttgatgctaaccttacctatgataccccattggaccggttaacagccctacttatt
+ccaaataaaagaacttttatgctgtagaagctattatagtgatgcctggtaacttcagta
+tattaaaatgacacacatacgccatatagagctcctggaactttgaataatgagcgaact
+tcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccggtaaccagacat
+gtgctatcattgatcattatcgaggttttcataaccttgacccattatcggctgtgcgcg
+gacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaataaggttggcaa
+agaatcgcataagacggacgtagagccgcagcgttgtgcgagtccaggtgcatgcgcagc
+aataggattttaaattttgttccatttttaatttagccgtaaggatgtccgtaaatgatt
+gaaaattggattcaatctttgggcctatgctactggaacctgatcgacaaaatttcaaac
+atacgttaactccgaaagaccgtatttttgcggctagaatagtcagtcgcttggagccat
+ataccttaccacttaaacgacgtgctcctgtagttgaaatataaacagaacacaaagact
+accgatcatatcaactgaagatctttgtaactttgaggcgaagcaccctcttcgagacaa
+ctaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaatcttgacgaatt
+gctaagaggctcagagctaccactgtaatttctctagagcccataataaatgaacgatac
+atccgtaggtagcacctaagggattataatggaagccaaatgcagttaataatattatat
+actggcgtacacgattcgacggatctctcacatagtgattcacgacccccccctttgatt
+gacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgccaccgtaaggat
+gacgtcgaagctacaactgggtataatttaccatgcttccctgatgctgagtgcaataca
+ctaagaatgagtttttaccccatatcaccagtatttgttctgttattgcgaagaaatggc
+tatgctgagttggcgactaaagtcacccatcctttttattaggtaaccccctcccttaaa
+ctaactgatttgctggagctgccctgcatacatatactttatcatttatggacgtccgtg
+acgcttattatccaccatagtcgatatgctacacggattcattaatggatcgtaggagtt
+taagttatatttactaagatcggtctcggctactatcccgccttacccggcgctatttac
+ggccatttttaatatattgacggtaattattcctatggtttcgaccgcacgtccttggac
+aagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccctaccatcatata
+aaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaagactatctattaca
+ccttttgttttctgtcgtagtatattaaagtctagaagccttacaggaaaatcagggtta
+tacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccatcgcgccttgtaa
+tcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatctcggctttatgt
+gattgggaggggcctactcaaacatgatgacttgacctaataatcactgtgcgggcgtct
+tatgactagctattccttgaaatccaccaccaaatggttaatatgtaaaaactttgacga
+tgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgagcattgcttgtaa
+aaccgtcaatcgcacacgttacttccataaaatttctacgaatacacccttcttaaaaaa
+aacgtaggaattcacgagtttaacaaacgataactgtataaagtggaagtccgaagaaag
+cagatgcccgaactactcgaagatgtttcgttttcttaaccataggggcttcttaatggc
+ccactacgcacattttgttcaagcccgagagggacatccccattacgggagtattactaa
+aactgttccgtaatacgttcagcaagggatgaaaaaggccactgctcaagttattgacgt
+gggagtattacatcggaagcctgaatcccacactatgatggtctgtacaggcctagggac
+tgcgtctagacggtattaccggcttctaatcatacgatcgtgagtcttaacgggaagtaa
+ggctcacacctaccccaaaccatttatctatgtaagtataaaattgtgcgtaagtgttca
+aagtggacaataaagacgtggcaaaaacccccgcacataagccgctttagatttcacaaa
+taccaatgcggttaaaaacatccttgagtcgtacatacaccatactcgcgttaaacggat
+ataacagaagataataaatccggatgtggagtcggtgtaactatagaaagccaagtgaaa
+taatgcttaccagtcatttagctatacggctttcatttcatgtcaagagggtggagtttg
+acctgtacagttgatatatcaccgatacttagaactcacctaaagctaaaattgctcgca
+gcgtgtaatccgcatattacaaacaatagatgggattcattatacataagacacgatgat
+ctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgccttacaccactt
+aaacaaaagtattgacagggaacctattttcgaggtattatatagtccagcttgaatatc
+aatttgacagttaacctagtgaaaatcagtaagaggaaatacgccacattctccagtgaa
+attctacgggttatcgtctagtccaactatcaattataactcacgagatataagtaaatt
+ctcgtacttggcctgatttttattatactttggatccttagtaaacaggaagggagaaac
+cttcaacgaaaaacactggattttgttttactctcaaagctcttatatgacggaaatacc
+ctgtcaagtcttaactttattactagactaatgaaatgggcttggggtggccagaatcat
+agtacaatttagcggatacactattcggactttcctatcggctgtctggttggataagta
+tggggactaataggctagacatacctatacttaaactatacaggcgtcatctatctctgc
+aactttggagttccctgatgttctcccgccctttgggttcacatcttctataccgacacc
+cctaataacgattagtttgtgggttagagtaaattaatacggttaatattaatgtatcgt
+tgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatgtcacgaagtata
+actaccctaatgataagctgtaggaataaaattaatgctgtctctaagcgaagagatatt
+tccgactctgttttaatgacgaatctcattacttctgacttgcaaatgttcaatatggca
+cggtttcacggcacctttgtgacgcatataatgaacttagaagattataacgacggaact
+ttatatgataatccgttacgattaaagaatctgttaaatatcataatggcattcagttct
+agaccgtgcatcatggtaaacttactttctctgcatggcgacatacatttcgctattcaa
+attcgcgtgtggttacacccactcgcacctttggaatattaagagaagatgatcagaaaa
+tccattcgctcaatttttctgacgtacgtctaatttatcctaggagacaaatcgttttat
+gtctctcacatttttgaagaaaggttcgagagacaatactcaggtcctgaactgctagaa
+gatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatgaatgatacttttc
+caagttcagttaagtgaatatgtttaacatacccggcttttcgatcttaagctgacgctg
+gacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtttcgtcaaaaacg
+ccccctcccttctcgagcccactcacgctatgtattgacgcgaacttgttcgggatcaga
+cttttcaggagttcggtcgcgtgtccctatgtgctaatatataagttagatcgcattaga
+tgctaatctgaatacttatagacgaccttcaacgagaacgggtaccaccttgaggctaga
+gttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggctttagttaagggt
+ttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcgaccatctagaggc
+taaggggactgtactaggtagtgattaatgatatcctagacgcacgtgccttagatcttc
+agactctgatggtccgcgatcaccgtaattgtagtcctccaactcgatcactttgttggc
+gtcaaagaaattacgatatctaaatacttataatacaataaccaaggatgagaatgactc
+atcgcgttggagttatattgcttgaagttctatggaatgaaagcacgttatctgccgtcc
+caatatctccagtgagctaattcattggacggtccactttgatcaatccccgaggagatg
+ttcggacactttagtctgtaacacttagcgttgagaccacgaacaattgattactcagtc
+ttgaaggtgttttccaaagttcattttaaataagactacgataggcctttcctattgata
+taaactacccggctctgttgttcgtgtgagtcgtacttctctgtgtttttctgattatag
+caagattcgattcttagtgtaaacagcgatttttatttgacccgtcaatgagaagcgcat
+aggatctaagcaaaattatcaagttgtgccacaaggtaagatctttccagttattgcagg
+taggatgtatcccacgttgatagtatgaggtctgacgtcaactgtctaggagagttgacc
+gcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcccactgtcgtggc
+ggcgttcctgatatttagcaagaggcgttgataaagccctcatcatctagatctcgacct
+catctgccctcttgctccatcattttctacacagactactttcctatctacgttagtata
+attgctttctatcttagtatcatttagagcttctccgtcaacaggttcgtgctattaaag
+ttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcgactacttcgcaca
+aaatcagataaagaagtttgtcattctattagacattgaattgcgcaattgacttgtacc
+acttatgatcgaacactgaatcaagactgtgattaactaaaatagacaagccactatatc
+aactaataaaaacgcccctggtggtcgaacatagttgactacaggataattaattggact
+ggagccattacattctctacaatcgtatcacttcccaagtagacaactttgaccttgtag
+tttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaatagtttcatggga
+acctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgataaagtcgtgtcg
+ctttcgatgagagggaattcaccggaaaacaccttggttaacaggatagtctatgtaaac
+ttcgagacatgtttaagagttaccagcttaatccacggtgctctactagtatcatcagct
+gtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacggttgccgtactga
+gcagccttattgtggaagagtaatatataaatgtagtcttgtctttacgaagcagacgta
+agtaataatgacttggaataccaaaactaaacatagtggattatcatactcaagaactct
+ccagataaataacagtttttacgatacgtcaccaatgagcttaaagattaggatcctcaa
+aactgatacaaacgctaattcatttgttattggatccagtatcagttaaactgaatggag
+tgaagattgtagaatgttgttctggcctcgcatggggtctaggtgatatacaatttctca
+tacttacacggtagtggaaatctgattctagcttcgtagctgactatactcaaggaacca
+ctgctcaaggtaggagactagttccgaccctacagtcaaagtggccgaagcttaaactat
+agactagttgttaaatgctgatttcaagatatcatctatatacagtttggacaattatgt
+gtgcgaaactaaaattcatgctattcagatggatttcacttatgccttagaaacagatat
+tgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagggacaatgtatct
+tttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataatagaatcttgtg
+ttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttggggtctactgtg
+tgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagctcgagtactcatt
+aaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttcccggtacgctatct
+ctctcatcgggaggcgatgtgcaggttatctacgaaagcatccctttacgttgagagtgt
+cgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgtgcctcagggtcc
+gggcgtactcctccatggaagggcgcgcatctagtgttataccaactcgctttttaacta
+ctatgctgtagttctacaggcatagtggccagtattttctaacttctctggatagatgct
+ctcactcctcatccatcacggcttcagtttacgtcttacttgcttgttcagcaacggatg
+gaggcattaagtatcttcactgttccctaaaattgctgttcaatatcaaagtaaggacga
+tacagggaaagctcaagcacactcattgaatactgccccagttgcaacctcacttaatct
+gacaaaaataatgactactctaagtgttgcggaagcagtctcttccacgagcttgtctgt
+atcacttcgtataggcatgtaactcgatagacacgaacaccgagtgagaaactatattct
+tgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctggagatcactcacgc
+ccacacaaggcgctgctacctctttattccaatgtgtaagaatttgctaacttcatttct
+agaccgcagctttgcggtcataatttcacggtacggacccttgggttagagacttgataa
+cacacttcgcagtttccaccgcgcacatgttttagtggcttctaacatagaatttttgtt
+gtgacataaagagtgcgtgggagacttgcccgaccgttaagccataatcaattgaaagcc
+ccgtgagtcacatctaattggttgtactgcgcatttagctatcctttagctgactcgaag
+agattcgattcctaatataggttaattagatggctgccgcgcgaagtaaaacgtgaaaaa
+cgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagttccaagttcgct
+acgttatgagagagattggaattaagcaaatatgttttatggtgattttgggatgagaag
+gactgctaagtacggctactaaacaaatttctaaaaccgccatctaccttatcttggaga
+catttaagttgtatatgtcactagtctagcttttgtctgtgggacgcgttctcggaatga
+gggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtggactattacacc
+aagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaaggtaccccgcat
+aagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaaaacataatttta
+atcagaaggcagctcacccgcttgctctagatcttatctttgtatgaatgtcagaattta
+ctgcaatatccgttccgaatagtgagggcttagtatagttctctgtatacaggtcacatc
+aaactccccctgtcctagtacagctctgagctttaattaattgcatacatttccttcaat
+catcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaagagaagcaacaaac
+aactagcccgactcacgttcatccgccgtatccttgttcagttcttactccgtattaggt
+cagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcccgcttgaggttg
+acaattaaaacgctgagcagttatcggctattagatagtggggtgaaagtaattggctgg
+aattatgttaaaacgtgatattaagctaaaatacgctacttgttgccgacctaattcagt
+cattcgatattcagttagagccaagaataacaagcttgtataaattgaacggggtgcact
+aaacgatgtgttactctaatattcagcttggagtatacctgaaggcgaattcatgtatcg
+gccaataataagacgttgaagatcacaatttggactagcaaaagaaggtgatttatgcgt
+ggggattgagtccactgtacgagtacggtctctggaaaattataggttcagggaatataa
+ggaagtaaagataattaccaagagatttttggtatcgctatgacccagaggtgttctaac
+gtctgttttgatccgcagaatttctgcctcaatgcatatttgacggacttgaactagagc
+ctctaaagttaaatggcgacgcaactgttcctaaacttcaattattactactcttttttt
+cctagggtattgtagaggccagtggacaaaataaatcaaatttaagatgtttcggacatt
+aacatcccccgtagcatagaaatcatcagttatccaatctctcatcgagcttttacaatt
+tctgctggcgctatggacagcatatgccgcgagacctccgcaagactcacttgatcactg
+taagtatcttcattagaggttagagcctatagttaagctgctgacctagtaaaattggta
+ttttctaattttattgctcaagttaaaggttagtgaagggataatgacgttatttttgaa
+caatgggttgtattcaattttatatcacgaatggaacccttcattcccggcataatacta
+gacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtttaattccggcaa
+accaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatgagtttttcagga
+ctacttattacctattaataagttaacatgagccttcataccccgtaagacaatacatac
+tccaccaattagaattctgagccatcttatctttttgtatcatcgaagggtatggccgaa
+taggttaattagttactcctaacgtctctacaggcatgcatttgacgcaccttcgaaaat
+agtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatagtccacggtttcc
+ggattaccaaacgcggcaaagagaaacattgtatcgacggagataacttaatacagaagg
+aaggggcatcttcgaatacggatgaataattctatctgtttattctgacatcttgttttc
+aggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaattattttctaata
+ttgacgagagcaatctcactccttttgggtctatttatgttttattgaggcacaagccta
+tacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtggaaacaaaggatg
+ggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaaatcagatgctat
+ccttaactttgggctgcatttaagatggcggttggaggcctgtgagaatcctgcgtgtca
+tctttaatgaccgaattcatccatgtagattcagatcacacactcattccttgatgttgt
+ctaaacaaaagttgttgtggacgcattggagggagttaagtaacaacttgggatcgcata
+cttataaaaattatatgttaaactttcacaaacgctgaagtccaaagtaactagcccaaa
+cgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaatagtgttcgaagg
+taaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgcacggaggtatga
+tgtttactgactctacaaccctaattttccagtacgtacattcattccaataggttagtt
+ctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgctctatggatatta
+gctcattttatttaggaagcccgcttagaggcttactatgagggaaatgccaaaatgtca
+tacttttcggtgtgtcccatatgacaccgctttacatagaatttgaattaaaacgcgctc
+tcccgttcactaccatacttggtaccgtgcgcatattacatatagatataggatcatttt
+ttaaagctgtactaggtttgatcgacaatcttatgctatactatatgatgtaaccctcat
+aatcaataccgatcgtacgatcctagcataggtggcaagcgattttatgccgattattgt
+gttaaatagtctgtgagtgtgattatcagggctacgttggtagaggggttgtatagacct
+cgcacacattgtgacatacttaacaatatacgaaaactgatataataaatccccttaccc
+aaacaccaatcccgttgaatcaactaccataacgtctcccatataaattgcctacttgtt
+tgcataaatctgaatacataacaccattgcaccttcttgtgttccaatcccgttaagatt
+gccttgtcagatgatatgcaagaacaatagcatttgctagcaattattaacagctcttcg
+aattgcctccacataacgcgggagggtatattttaatttggcaaatactaagtactgttg
+gcgtcatatgctattaacggttggatattaagttatgtcagccgtaagcaagagtgggcg
+aaatattttgttacccagtgagagcactcttagagtttggatacaataggccatatgttg
+acttaagaggacgtaactacgccgtacaccattgttcaaccgacttcttggcaaatagaa
+tcgtattagcaatcttaagaatagagacacgttcgtgttagggtatactacaaatccgaa
+aatcttaagaggatcacctaaactgaaatttatacatatttcaacgtggatagatttaac
+ataattcagccacctccaacctgggagtaattttcagtagatttactagatgattagtgg
+cccaacgcacttgactatataagatctggggatcctaacctgacctatgagacaaaattg
+gaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctgttcaacagatga
+tagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaatttagacagaat
+ggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaataggtaaacgtg
+cccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgacgtgttcagaaac
+ttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgtttctgaaccggctt
+atccctaagatatatccgtcgcaaactttcgatttagtcccacgtagagcccaagcgttg
+tgcgactccacgtgcatgcccagaaatacgagtttaaatttggttacatggttaattttg
+accgaagcatcgcactttatgattgataattggattcaatatgtcgccctatgcgaatgc
+aacatgatccacaatttggctataagacgtttaatccgtatcacactttgtttgcggcta
+gtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactccgcaggtacttc
+aaatataaaaactaatcaaacacgacccatatgatcatctgaagatatttggaactttct
+cgacaaccaccctcgtactcaatacttacactaatcgacaggcacacgcaacgtgtacag
+tcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacgcttatttctcta
+gtcacaattagttatctacgagacatcacgagggagcaaataagcgatgttatggctaca
+cataggcacgtatgaatatgatataagccagttaaacagtcgaaccatcgagcaaattct
+catgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatgtaacttcttctg
+ctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtattagtttaaatgc
+gtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaatataacatctattt
+gttatctgattgcctacttatggctttgcggtcgtggcgactaatgtctccaatcctttt
+gaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcactgcatacatata
+cggtagcaggtagggacctcacgcacccttattataatcaatagtagttatcagtcaacg
+aggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgtctaggcgactat
+cacgcattaccaggcgagatttaagccaattttgaatatagtcaacgtaatttttactat
+gggttccaccgaaacgccttgcacaactaagaatcccataaaatatcgatatcaaataaa
+agattgtgtcaataccttcatatatattttttcggttgactaacgtgaactaaggttagg
+ggttttgtatgtctatataggaaacagtttcttttctgtcctactttagtaaagtcttca
+agccttactccaaaatcacggtgattaagccgttactcagcagcatgattctgcctgctc
+gggtcctaaaatccagccttgtaagagtcgctgtgtattagctagggagacctttgttaa
+aaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatcttcagctcgtgtc
+attataatatctctcccccacgcttttcactagatatgccgtgtaagcaaacaccttatg
+cttaatttcgaaaatattggtacttgaaaaaagctgtaggggtacttaatgtctggtagg
+agatcaggagagaattgagtgtaaaaccgtaaagccctcacctgacttcatgtaaatggc
+ttagaagactccatgatttaataaatactacgaaggaaagactggatctaaagataactc
+tagtaaggccaactcccttcaatgctgttgccagttataatccaagagctgtccttttct
+gaaccatagcggcttctgaagcgaactagaagcaaagttggttctagccagacagccaca
+taccctgtacgggtgtattactaaaactggtccggtattagttcaccaagggaggaatta
+ggcaaaggatctaggtatgcaagtcggagtattacatccctaccctgaatccatcaatag
+gttcctctgtactggccttcgcaatgagtattcaaggttgtacagccgtataataataag
+atagtgactatgaacgggaagtaacccgctcaccttccccaaaacattgttatatctaag
+tattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaaattacaccgcac
+ttaagccgcttttgatttatatttttccaatgcgcttttaaaaataattcagtcctacat
+actaattaagacccttaaacggagatatcacaagttaagttttaaccatctcgactaggt
+ggaactatagatacccaactcaatttatcattacctgtaatgttcctagaaggattgcat
+ttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacagattctgagaaat
+cacctaaacctattagtcagagcacccggttagaaccagttgtcaaaaaatagagcggtt
+gcatgagacagaagtaacgatgagatccgttgtaacgttgagacatctggcctatcgtca
+atacagtcctcccttaaaaatatttttaaatactaggcaaacccaacataggttagtcct
+atgtgatacgccacatggtatatcattttgtaacgttacctagggataatcaggaagtgg
+aattacgcaaaagtagacagtgaaatgcttagggttatagtctagtccaaagataaagga
+taaagcacgtcagagaactatattagccgaatgggaatcattgttaggagactgtggatc
+atgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgtttttgtttgaatctaa
+aagagctttgatgaccgatagtacctgtatactagttactgtattacgtgtctaatgatt
+tcggattggggtccccagaatcagacgtcattgtagacgattcaagtttaccaatttaat
+ttcccagctctccttggagaactatcgccaataattgcagtcactttccttttctgaaac
+gataaagccgtcagagttctctgcaacgttggacttacctgaggttctaacccactttcg
+gttctaatagtagttaacgacacaacgaataacctttactgtggggctttcacgatattt
+tttcgcttattattaatggttacgtcataagctggtgtccaaattaaggttaccggcttc
+gcagagtagttgtatccaagtataacttccctaatcataagatcgaggtagaaaattaat
+gctgtctctaaccgaacagatatgtcccactatgtggtatggacgttgctaattacttct
+gaagggaaattggtcattatggatacgtgtctaccatcaggtcggacgcagatatggttc
+tgtcttcagttgatccaccgttctttataggataataactgacgattaaagattatggta
+aatagattaagccaattctcttcttgtcagtgaagcatccttaactgacttgctctgcag
+cccctcatacatttagctattcaaagtaccggctcgtttcaaactctcccacctttggaa
+gaggttgtcaacttgataagtatatcatttacagcattttttcggacgtacctctaatgt
+ttcattgcagaaaattagttttttctatcgcacattttgcaagtaacgttagagacacaa
+ttatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaatatcaaaaaagac
+tgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtttatctgtcccgg
+cgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcgttcttacaagtc
+tgtctccaagggtcggcaaaaaagacccctccattctcgagcccactcacgatatgtagg
+gacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggtccatatctccga
+agttagaagggacatacctttagatgataagatcaattcttattgacgaaattcatccac
+aacggggaacaacttcaccctagacttacgtctgaaaagacacctagcgtcttataaaag
+gtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaacctcgcgcccttc
+cttacgtatcgacaagatagaggctatcgcgaatgtactacggaggcatgaatcatatac
+tagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcaccgtaattctaggc
+ataaaactccagcaatttgggggccgaaaacaaatgacgttagctaattaattatatgac
+atgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattgaacttcgtgcgt
+ttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttcatgcgtacctcct
+agttgataattccccgagcagtggttaggacacttttgtcggtatcaagttccggtctca
+aaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaatttttatgaagtc
+gtcgagacgcagttcctattgatttattctaaacggagatgtgcttcgtgggactcggaa
+gtagatctgtgtttatgattattgctactttagatgctgactgttaactccgtgttgttt
+ttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagttctgccacaagg
+tatcatatttacagttagtgctggttgcttctttcaaacgtggtgagtttgtgctatcac
+gtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttccagagagggtgtga
+tagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagagccggtgttaaac
+acatattattattgttatccaactaatcggacctatgcataaagcattgtctaaacagaa
+taattgcctatatacggtagttttagtgatttatatcttagtatcagttagagcttcgaa
+ctcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttctacaaacgaatgta
+agcggttttccaagtagtacctataaatcacagaaagatctgtctcagtatagttgaaat
+ggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaagacgctcattaa
+cgaatatagacaagacactatatcatataataaaaaagaacatggtgctcgaacatagtt
+gaattcaccatattgaaggggaatgctgacatgtaattcgctactagacgatcaattccc
+tacttgtcaaagttgaactggtacgttcttggaattaaatatgattgcgctggaccaaat
+tgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccgtctcttaccttt
+cttgcttatgataaacgacggtccctgtacatcactgggaattctcagcaaaaataattg
+ggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaaagattattcaac
+ggggcgataataggatcataaccggtatgcaagcgcattgaaagagccatgagatcctta
+tccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaatttataaatgtag
+tctgggctgtaagttgaagacctaagttataatgaagtgcaataccaaatcgattcatag
+tggattatcagactcaagatatctcctgataaattacagttgttaagatacggataaaat
+gagatttaagattagcagcctctaatctgtttcaatcccgttggaatgtggtatgcgatc
+aaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctgccatcgcatgcg
+gtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctgagtatagattcg
+tagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtcacacaagacact
+aaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagttcttgttatattc
+gatatactcttggctaatttatgtctgagtatataaaattaatgatattaacttgcattt
+cacggatcccttagaaaaagattttgaccgagcgcattataaacggttacaccgaatcaa
+tagaagcatacccaatagctttctttgaatttattgcctgcgcaacttggctgactctct
+agatccgaataattctatatggtcgtgacgaaactagttcattactgtttaaaatgccaa
+catgtcttttgggccgataatggctctttgcaaaattactcaatgatacgattgatcaaa
+gcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattatccgaaaatcttc
+caaaagagtccacgtaccatatctatctcatagcgacgcgaggggaaccttatctaacta
+tcattccatttaccgggtgactctcgatgcaggatccgattgggataaattgcccagaaa
+tggctcattcctgactaagggtaaggccgttctcagcaagggaaccccgcgaatctaggc
+ttataccatctagattgttaactacttgcctgtagttctacagccatactggacagttgt
+ttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgtaagtttaactat
+tacgtccgtgggcagataaggatggaggctgtatgtatcttaactgttacctaatatggc
+tggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgctttgtatactga
+ccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaactgtggacgatca
+tgtctctgcctagagcttcgctgtatcaattcctatagccagcgtactagtgacacaaca
+acaccgtgtgagaaaagatattagtccttacgtctgtctctctacagcttattgatgagg
+attgaacatggacatatagctccccctcaaaagcagatgctacctctttattccattctc
+gaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaatttatcggtaacg
+tcacgtccctttgagactggataaatatattaccaggggccaacgagcaattgttggagg
+cgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtctcgtgcaactcac
+ttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtgtactgccctggt
+acatttcctgtacaggactccaacagtgtagattcctaagatagctgttggagttgcctc
+acgccagatcgaaaaactgaataaactagtgagctgagctgcagaaataccgcttaatta
+cttatgactagttcaaagggacctacgtgatgtcagacattgcaaggaagaaattaggtt
+tgtgcgtcattttggctggactagcactccttacttcccctactattcaaatgtcgtaaa
+cagcatgagacaggatcgtgctgacatttaaggtctattgggaacgaggctacctttggt
+cgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgcaattgcttatag
+atctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcagttcttcctcagc
+aactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaacctatgcgctca
+tttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattcctctacttagta
+gctttctttgattctcagaattgactgcaatatcactgcacaattctgtgccattactag
+acttctctgtattaacgtctcatcttactaacactcgcctaggacacatctgagagtgaa
+gtatttcaatacatttactgaaatcttcagttctaaaatccccgaataaggctcttatcg
+gtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatacgcaggagcctgg
+ggaacttagtaataactatttcggcagacaaagcttataacaagttgccggcgcgtataa
+tatttaaaagaccccttgagctgctcaattaaaacgctcacctggtataggctattagat
+agtgccgtcttagtaaggggcgggaattatcggataaactgatattttgataaaataacc
+gacttgttcacgacataagtcactaaggagattttatctttctccaaagtatatcttcct
+tggataatttcaaagcgctgcaatttaagttctgttactagtttatgctgctgggaggtg
+accggaaggcgtagtaatctagaggcaaattataagaagttcatcatatcattttcgact
+acaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagtaccctagatgga
+aaattatacgttaagccaagatttcgatgtaatgataattacctacacatttttgctatc
+cataggaacaagagctgttctataggctcgtggcatacgaacatttgctgccgctatgaa
+tattggaagctcttcaactacagactctattcttaattgccgtcgaaaatgggccgaatc
+ggctattattaatactcggtttttccgaggggattgttgtcgacagtcgtaattattatt
+aatattgatgttggtgaggtcatttaaatacaaccttgcagacaatgaataagggatcca
+atctctcatactccttttacaattgctcatgcccctatgcaaaccttatgccgccacacc
+tccgcaactctctcttctgaactgtaagtagcttcattactggtttgagactatactgaa
+gctgatgacattctaaaatggctattttcgaatgtgattcataatgtttatcgtttggga
+tggcagaatcacgttatttttgatatagcccgggtattctattgtatagaacgtatgcta
+caagtcattccccgaagaagactagaagtaaacaacatgcgaccatcgttaagccacgca
+aggctgtagctttatttcccgataacctatcttccataaatagcggacagcaggatactg
+acgctcaacatcagtggttatggtctaatttttaacttttaataaggtaacttcagcagg
+catacacagtaactctttaatttataatcaaattagaagtctgacacttcttatattttt
+ctatcatccaacgcgatcgcccattagcttattgtgttactaataacgtatctaaaccaa
+tccttttcaagctactgcctatattgtcaatatatacaaacaacaggatagtaggctgct
+taaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcacaaactttgtagac
+aacgagtgaaatttatacactacgaagggccagcgtacaagacccatgaattaggcgata
+tgtttattctgacatattggtttatccttaatctgtcgctgtaaaatgaagccgccccca
+tccctgcgaattttttttcgaagattcacgactgaaatataaatacgtttggctatattt
+atgttggagggaggcaatagcctttactgttaaccgaagatttagccagtgagtgtgaca
+ctaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttagtcaatctcgcct
+ataagttcatatagctctggatataattatctggcccatgcatttatcatggcgcttggt
+gccctgtgtgaagccggcctctcatattgaaggtccgaagtattccatgtacattaagat
+cactctctcattcatgcatcttggcttaacaaatctggttgtccaagctttccaggcacg
+tatggtacaaattcggatcgaatacttataaaaatgatatgttaaactgtctaaaacgct
+catctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgtaatgctggtgcac
+tgaatgtgtaatacggttagaagggattagttatgttacaaatccattgaaaacttaaga
+agcattgcgtgctcggagggtgcatcttttatcaagagactaacattattttcaacgacg
+tacatgctttacaatagggtacttatcaaacgccgagaaacgcgcctatagtgatgttat
+gattatgacccgatatccattggaccgaattttatgtaggttcccagcgtactcgcgtaa
+tatctcggtattgccataatgtaatacttgtcggtctctcccagatgaaaaagcgttaca
+gagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggtaacggccgctgat
+ttcatatagatatacgataagttggtatagctctactaggtggcatccacaatcgttgca
+tttactatagctggttacaatcataatctataccgttccttacatactaccatagcggga
+tagcgtttttttgccgttgattgggtttaagaggatgtcagtctcattatatccgattcg
+gtgggagagccgttgttttcaaatcgcacactttgtgacataatgtacaagataacaaaa
+ctgatataagatataaactgtcaatatcaccttgacacttgaatcaaagtaaattaactc
+gcaaatataatttgactaattgggtgcagatttctcaattaataaaaaaatggcaccgga
+tgggcttacaagccccttatcattcacttgtatcatgatttccaagaacaatagaatttg
+ctagcaagtatgaacagagattcgaattgcatccacagtacgccggagcgtttattttaa
+tgtggatatgacgatgtactgttggcggcatttgctagtaaccggtccttatttacgtag
+cgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagagaaagattacagt
+ttggtttaaataggacttatcgggtcggaagtggaacttaataagcagtacacaattggg
+caacagacgtcttgcctattacaataggattacaatgcgttagatttcagacacgttcgt
+gtttggctattcgtcaattccctaaatagttagacgatcaactattatcaaagtgattct
+ttgttcatcctccattcatgtaacagatggcacactacgcataacgccgaggaattttaa
+cgagatttaagagagcagttcgggcacaacccacttgactttataacagctcggcagcat
+aaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgtacttagaaaact
+aagtggttcatgttcaacagatgtgacgcagcaagcctaacttatctattggttttgcta
+taaaagaacaaagttacacagaatcctaagggcttgtttcacacttatgcctagtgcttc
+accatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatgcgcagatattgg
+tgatggtgactccgggtatgataatggtaactgttgaccagcgcccacctcatcgaagta
+tagaaagtggttaggataaggatgagaccgaacttatttccggccataactttagatttt
+ctacctagtacacaacatcagggcggacacgaaaccgccatcacatcatataccaggttt
+aatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcaggcatatggccatt
+atatatggccccagagcagaatgctacagcagacaaaatttggatttatgtagtttaata
+cctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaagtgtaagttacaa
+ttattactactcagcagcttctgcaatgataaaatcttatcatacacgtcacatatgata
+atatctacttagggggaacgggctccacaacctacatagtactcaatacttacactattc
+gacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttgcagtactgcaga
+tcacagtaatagcttagttagcgagtcaaaattagttttctacgagactgcacgaccgtg
+caaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttgaagccacgtaaa
+ctgtacaaccttagagataagtctcaggctactaaaaacacgttgtggcactaacaggat
+catggttgattcttacttattcggctgaccggcccaataagtaaccttcaactagaacag
+aataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaactaacaagctct
+gtgtaaccaagttaaaatcgttttcttagcggattccctacttatggatttgagctcgtc
+cacaatattcgatacaagaagtttgtggtccgtaacaacgaaattttaattacgctgtgc
+agcctcatccaaggaattaatagaaggttgatggtaggctccgaacgctccatgattata
+atcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggtgttcgtttttgt
+tatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaacccatggttgat
+tttaggctaccttatttttaatttccgttacacagaaacgaattccacaactaacatgcc
+attaatttttcgatatcttataaaagatggtcgaaattcattcatttattttttttcggt
+tctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaaaagtggctttga
+tctcctacgtttggatactagtcaaccattactccatttgatccgtgagtatcacctgtc
+taacatccagcattatgactcctcggcgaagaaaagacacacttcttagagtcgatgtgt
+attagctagggacacagttgtttaatacgatagtgagcccagggagggcagtgcgtcccc
+cagtagatttattcagctagtgtaagtataagatatctcacccacgaggttcaagtgata
+tgcagtcttagaataatacttatcctgaatttcgatattatgggtacttcaataatccgc
+tagcgctactttatgtctcgttggacagcaggacacatggcagtcttaaacactaaagac
+atcacctgaatgaatgtaatgggattacaagaatcaatgaggtattatatacgacgtagg
+aaactctggatatatacagtaatctagttacgccatcgcacttcattcctctggaaactt
+agaagacatcagctgtacgtggaggaaccagacccccgtatgtagccaaatagaaccaaa
+gttgcttatacaaacacacccaatgacaatggaccgctggagttcgtaaactcggaacgt
+agtactgcacaaacccagcatttagcaataggagctacgtatgcaactcccacgtggtaa
+taccttcaagctatcaatatataggtgcctagctaatcgcattcgcaagcagtattcaag
+cttgtaaaccagtataataattacagaggctctatgaaacccaactttccagctaaaagt
+cccaattaaatggttatttcgtacttttaaagtcgcccgttctgttattacgcgaattga
+ttctactccaaaattaaacacaaattatcaaccgtttcatttatatttgtcaatgcagct
+gtttaaaataaggctctactaaattataattaagacacttattaccagatttctctagtt
+aagtttgaaccagctcgactaccgcgaaagatacattcccttctctatttttcagttcat
+ctatgggtcagagaagcattgaatttattctattcaccctcgtcgttcacagcgaatcgt
+cagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagaccacacgcttagaac
+aagtggtctaaaaagactgccctggaaggagtaagaagtatacagctgatccggtgtatc
+cttcagtcatctgccctatactaattacacgacgcaaggaaaaataggtttattttctag
+gcaaacccttcataggtgactccgatgtgttacgaatcatgcttgagaatgtgctatcgt
+taccgacggataataacgatctccaatgaaccaaatgtagaatgtctattgattaccctt
+ttactattcgacttagagataggagatagaacctcagtgtacttttttagccgaatggga
+atctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaaagtcttccatat
+tatatcgttgttcgtggaatcgataacagatttgttgacccatagtaaatgtatactagt
+ttatgttgtaagtgtagattgttttccgattgccgtccaaactttatgtcgtaattgtag
+accagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcgatcgccaattttt
+ccagtcactgtaagtgtaggtttagataaagccgtatgagttatatcataagggcctcgg
+aaagcagcttcgaaccaaagttcccttataatagtagtttaactataaaagtatatactg
+gtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacgtcattagagcgg
+ctccaatttaaggttaacggcttccatgtgtagttgtatacaaggataacttaaagtatc
+tgttcagcgagctagttaagttatcctcgatagaacacaactcagaggtcccaagatcgg
+gtttgcaacttgctaatttattctcaaggcaaattgggaattatcgatacctgtatacca
+taaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttagttagtgctgatt
+aacggaacattaatgtttatcgttttgagatttagccaattctctgattctaactcaaga
+tgccttatctgacgtgctatgcagcccctaagtattttacattgtaataggacacgctcc
+tttaaaactcgccaaaaggtcgttgtggttctctactggttaactatataatttacagct
+ttgttgagctagttcctctttggtttaagtcctcaatattagttggttcgagcgataagt
+tggctagttaccttagtcactatattagatccgaatgttatgcttcatctgaagaccgcc
+accctccaaaatttcttttaagactcacttattgcaaggtgtaggtgaattcggctcgtt
+tctcaagtggtgtatctgtacacgagtttccatattttcatcaacagccaccgcacactt
+atgtcactctaggtattaaaagtcgctctacaaggggacgcaattaagaaacagacatgc
+tagtcaaaaataaacatagcgaggcaccactaattcggccgcttatcaatgggatgctct
+gcgcgagacgcgccagagctcagtagttagttcggacatacatttacttcagatgatcaa
+ttagttttctacaaatgcttactctaccccgaaaaaagtcaccagactcttacgtctctt
+tagtatccttccgtcttatataaggtcagtcccccgtttcggtaccctggaatttactaa
+gaataatgaaacagcccccaaggacgtacgtttacaaatgatagaccagatcgcctagct
+tattccgacgcatgttgcatagaattgaaccaacggaatgtgagagtaactagatgagcc
+gaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggccacgaaatcatatg
+tcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagcttacacttcctc
+ggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaaaaattgataatg
+gctcatatggaatgcctacctcatagtgctgaattaacacagcactgcggacctaacttt
+tcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgtagggatcctcggt
+gaatttgtgattgggtttgttgtagtactgaccaagtgaatattctttttttctaaaagc
+agatctgctgccgggcactacgaaggagatctctgtgtatcattattgcttcttgacatg
+atgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaattcgatagtacat
+attgttgatacttcgcactaaaccgttcatatttaaaggttgtgctccttccttcgttaa
+atactggtgacttggtcctatctactattagctagacctctggggaaccacgcccccgta
+aaacctgtgcaagagagggggtcatacatcttagacatcgcgcctccaccagggaagcat
+tgggtgattgaccaggtgtgtaacaaatatgattattcttatactaatattagcaaagat
+gcataatgatttgtattaaatgtataattgaattgataagggtcttttagtcagtgatag
+agtagtataaggtagacattagaactcttaaccggacgcagatttttcggtcttagtaag
+ccaattagtcgacaaaacaaggtaagagcggttactagtagtacctataatgcactgaat
+cttcggtcgaagtatagttctaatgctatgcagattgtgacggcgacaaatgttcagact
+tatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattgaatatttttaaat
+acaaaatgcgcctacttattaggggaattaaccagattgaaggccaatcctcacatgtaa
+tgagataatagacgataaatgaaattcttgtaatagttgaactgctacgtgatgggtatt
+atatatgattgagatcctccaattgccgacgtcttgtcttgatgcccaaaagattgtcaa
+cgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgacatgtacagcact
+ccgaagtataagcaataataatgcgggtaatccagactagatcttttcggactcaatgcg
+gtttcacggtaaacatgattaataccggagagtagtcgagcttatcagcgatgcaagcga
+attcattgtgccaggagatacgttgcagataaaaccggcaacgtatgtcaacaagttttg
+gcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaactatcgtatattcaa
+gtccattaccttttagtttcagactggtggagctgactaaagttatatcatcattttgta
+cactggtttagttaacgataatttcagatttaacatgaccagacgataatcgctgtatat
+ccagttggaatgtggtttgccagaaaggttaacttataatcaagcctctcttcagtcttg
+attcgtcgtatcccatccattgcgctatacctcagtgtatttggagctgtagttataccg
+tgtgctaagatcagtagacatgacgagagcaatattatctaccttacaagcatcaacgga
+cgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatatactatagttctg
+tattcagcagttattcttatattcgatattatcttgcctattggatgtctgactttagta
+tattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtttcacagtgcgaa
+ttataaacggttacaaccattaaagacaacaagaccctatagctttatttgaattttgtc
+aatgcgcaacttggagctcgcgatacatcccaattagtctatagggtcgggacgattcta
+cggcatttctggttataatgacaacatggattgtggcccgagaatcgctctttcattaat
+taagcaatcattacagtcttataagcgctacttccgagtggtagcaggtaactcgatata
+aggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgatagagaataccga
+ccacagcgcaacctttgattactttcattaaattgtacggctcactcgacatcaagctta
+agattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaacccacttcgcag
+aaagcgtacccagagaagatacgctgttacaatatacagggtgaaattattgcctgttct
+tcgtaaccatttcgccaaacttggttagaaatgatagccattcatgatagaaataagctg
+aatgataccagtatctttaactatgtagtcagggggaagataacgatggtccatgtatgt
+ttctgatatgtgacagtattggccgcgtaatttgctaacgaagctacttaatgcctttga
+gcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgagctataatatatg
+ctagtagagaactctggaccatcatctatatgaatactgattcgagcgtgcaattacttt
+agcctgcgtactactgactctacaaaacactctgagataagtttgtagtcagtaagtcgc
+tctctataaaccttttggatgaccattgtacagccacttatagatcccaataaatagcac
+aggagacagagtttttcaatgctcgatcatttgccgatagtattttcgtctaacctcagg
+gcacctattatttgatacctaacctaacggccctttcacaatggagaaatatatgacatc
+gggacaaacacaaatggtgggtggccaggagatatgacatggtggcgtctctaagaaaca
+cggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaaaacgctcgaaaa
+gattttgccgtgtaatgacctggtacattgactggtcaggaatacatcactgtagttgcc
+gtagtgtcctgttggtgttccatcaagacacatcgtataacgcaatttacgacggacatc
+agatcaagttatacagattatttaagtatcacgtgtgcattgggacataagggatctcac
+acatgccttggaacatttttgctttgtgccgctttttcgctgcactaccaatccttactt
+accagtatattcaaaggtcgttaacagaatgagaaaggttagggctctaagttatcgtcg
+attgggatagacgagacatttgcgagcgccctccacggatacgaatctcccatatcaatg
+tgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaaatcaaagtagca
+ctcgcatagcagttattcagaacctaatacacaaaaccgtcaaacattttctaattctag
+gtatgggccgatcataggagctaaggtgaaactcataaatgttttgttagatctagcatc
+ctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgtatcctttttaac
+tgaactagtcggtcccatttcgtgactgagatctattaaccgataagattaataacactc
+gcattcgtatcagctcagagtgaagtttttcaataatttgactgatatattaacttctaa
+aataaccctttaagcctcggatccgtttcccaatcacatcaaaaattcttattccaacta
+tctacggattaacaacgtgcatggggatcgtagtaagaacttgttccgatcactttgagt
+atatcaagttgacggcccggttattattgaatagaaacattcacctgctaaattaaatac
+cgcacatcggatacccgatttcagagggccgtcttactaagggcaggctttgttcggttt
+aactgagatgttcattattttacagtatgcttcaactaatatgtaacgaaggacagtgga
+tctgtctccatagtagatcttcagtcgtgaatttcataccgctcctatttaagttcgcgt
+tcgagttgttgatcatggcacgtgaaagcaacccctagtattctagacgaaaattttttc
+tagttcatctgataatttgccaattcaaaaacaaccgctggtttcccggcgcattctcta
+aaatggaagtcgaacctagagccattatttgtcggtaacccatgagttccttcttttcag
+aagttaatacactgtggtcctatacagaggaaaaacagcggttatatacgatcgtggcat
+aacaacattggatcaagatagcaatttggctacctattctaattctcactagattcggta
+ttccactacaatatcggcagattaggattggatgaataatcggtgtttaagtccggttgc
+gtctccaatctcctaatttttattaatattgatcttggtgacctattgtaaataaaaact
+tcaagactttgaataacggtgaaaagatagaagactcatttgaaaatggatcatccacag
+atccaaacattagcaagacactaatccccaactagctattctgatcgcgatcgtgctgca
+gtactcctgtcacaatagtctgttcatgatctaattctttttgggctttgttcgatggtg
+attcagaatctttatccggtcgcttccctgtagctactttgtggggatattgcccgggga
+ttatagggttgagatcgtttcctaaaagtatttaaaccaagtagacttcaactaaactac
+atcagaacatcgtgaagacaccatacgcggtacctttatttaccgataacatttcttcaa
+gaaataccggtaagcagcataatgaccctaaacagctcggggtatcgtcgtagttttaaa
+ttttatttaggttactgctcaaggaataaaaactaactatttaatttataataatattac
+aaggctcacactgattagatttgtctataagacttcgcgatcccccattaccggattgtc
+ttaagaataaactagataaaccatgcattttctagataaggcctttagtctaattagata
+caaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaaccttttaattac
+ccgcaaatcactttatgtcgagactacctctgaaatttattatctacctaccgcatgagg
+acttgaaccatcttgtaggagttatgtttattagctaagattcgtttatcctgtagcggt
+ccatgtatattcaacaagcaaaaagcactcagaattgtttttagttgagtcaagactgat
+atataaataagtttccctagttttttcgtggtgggacgatattgaattgaatcttaaccg
+aagagtttcccactctgtcgcacaataatacacgccaatatttccagccctgcttatgcc
+ttaatcggttactcaatctcccattgaagttcattttgatctgcatagaagtttcgggcc
+cagccttttttctgccaccttcctccaagctctgtagacgcactctaagattgatgctca
+catgtattaattctacattaacataaatatataagtcatgcatcttcgagtaaaatatct
+ggttctccaacatgtcctggcacgtatcgttataatgcccatacatgtagtattaaaatg
+attgggttaactggatattaagatcatcgaaattgtaaagtcaaattaacaatactgtct
+caagaccgtgtattcctcgtgctcggaagggctattacgcttacttccgttttggtatct
+taatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgcatcggttagcaag
+agtataaaagttgtttaaacgaactacttgctttacaataccggtcgtatatatcgccgt
+gaatccagaagattgtcttctttggattatcaaccgagatcctgtggaccgatgttttgg
+gaccttcacagaggactccaggtagagctcgcttttgcattaatctaagaattgtacctc
+tctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacagagaaacgtaaatt
+actttaggccgaaaggcacatgagttattatacatatacgagatggtggtatacatcgaa
+ttcggggcatacactatagttgcattgtatttagctgctttaaataatatgatattacct
+tccttacataagacattaccggcataccctggttttcaacttgtggggctttttgacgat
+cgcactctcatttgatccgagtagggcggtgacccctgcttttcaaatacaaaaatttcg
+ctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaatttaaaattgaa
+acttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcggtcatgattgcgc
+aagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagtcacgggtatctt
+gatttcattcttcttgtcaattgccgacataggatgaaatcagattccaatgcaatacac
+agtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtcgacgaagtggat
+agtatacgggccttttgtacggtgcgatcaactatgaatctcggcgagttagatggtcgt
+acaatctcacacatagaggtcacttgcctgtaatgacgaattttcggctaggtactcgaa
+ctttattagaagtaaaaatgtgggcaaaagaaggattccattttacaagacgattacaat
+gagttacatgtctctcaacgtagtctttccctagtagtctttgaactatttaggtactcc
+agaaaattttagcaaagggtttctgtgtgaatccgccattcatgtttatgatggaacaat
+aagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggccaaaaacatatt
+caatttagtacagatccccagaagttaagctaagtgctctaaaatggcctaaacggttat
+caaagtaggtctaattactatactaacgggtgcatcgtaataactgctgtcgatgcaaca
+ctatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaagccttagcgattc
+ttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgcaaagattcaaaa
+atttaatctatgagcagatatgcctgatggtgactacgcgtatgttaaggctaaatgttg
+acaaccgcacacataatcgaactattgatagtcgggagcataaccaggtgaacgtacttt
+gttcacgacatttattgacatgttctaaatacgtctcaaaatcacggcgcactagaaaac
+gcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtcaaacttcatgag
+aactttagctggcttttggccagtatttagggaccaagagcactagccttaagctgaata
+ttttgccatttatctactgttataactttaaaacttggtggcaccagacttgtcgataca
+cacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtaggaattgagtttata
+ttatatttaaactaaaagatgatattagcttctgagggcgatagggctccaaatcataaa
+gaggaatatattattacacgattagaaacccacaacatacctcgaatcgcccaaaagttt
+gacgaaacttggcagtactccacatctcagtaatacagttgggagagtctcaaatgttgt
+tttattactcaatgaaccaccctcataatttcactgctgttccattaaatttgcaaacga
+tcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtagatgcataataaa
+aaaaactgctcgctataacacgatcatcgtgcattcttacttaggagcatcacccgcaca
+ataacgtaccttaaactacaacactattagaccgagtactgtaattcacgaaagctcaag
+ctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttgcggagaggattc
+aattattttccattgcacctactccactagattcgataaaagaaggtggtcctcccttaa
+aaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtgaaccgtcatcctt
+ccctaagaaacataaaggtttttaataatgtcgactgtgaactataactgcatcctttcc
+tgacctactccggttccttgttgttatttctgaacgagaccagtagataaacaatgtaaa
+ccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtgcccgtacaaaca
+taagaagtcataatcttacttgaaattaattttgccttttattttttttcaggctcgaaa
+ttaatgatttgttttttttgaccttctagttacgctaatatgcggtcgcctgtggtttct
+attgagtcctataacgggatgggatctaatacgtttggttactagtaaacaaggtataaa
+tttgataccggagtatcaactgtataacatcaagctttatgactcatacgcgaagtaatg
+acacaaggctttcaggagatcgcgagtacagagccactaaggggtgtattacgatagtga
+caccaccgagcgcactcactccccaagtagatttatgatcctacgctaagtattagatat
+ataaccaaagaggttctagtcagtgcaactcttagaataataattagccggttttgcctt
+tttaggcctaatgcaatattcagctagcccttatgtatctcgcgttccacagcaccactc
+atggcacgcgtttaaactaatcaaatataatctatgaatgttatgccagtacttgaataa
+atcaggttttttataagtccttgcatactctcgttatatactgttagagtcttaccccat
+agaaattctttcatctgcaaacttagaagaattctcagctacggggagcataaagtcccc
+aggatgttgacaaatacaacaaatgtggcttatacaaacactccatatgaaaatcgaacc
+ctcgtggtagttttagccgaaccttgtacggataaatccctccattttccaatagcagat
+acctatcctactacctcgtggtattaaattaaagcttgaaatatagagctgcatagctta
+tccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttacagacgctagagc
+aaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtacgtgtttactagc
+aacttcgcttattaagacaattgtttataagccataattaaaaacatatgttcaacaggt
+tcattgatatttgtaattgcacaggtttttaataaggatctacgtaagtataatgaacaa
+actttttaccagagttatattctgtactttgaaaatgctcctctaccgccttagagactt
+tcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaagggatgcgattca
+accgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaatataattttcagt
+tttcgaacacataaccctttgaaaatctgctatttaatgtctcacctgcatgcactatct
+tctatactgctcagaacggctatacgtcactatgctccaagtgacgatttaaacgaagca
+aggaataataggtttattttagtgcaaaacaattaagtgcggactacgtgctctttacaa
+taagccttgtgattgggctataggttaagtcccatattaacgatctccaatgtacaaaat
+cgacaatcgctttgcattacccggttactagtcgaattacagatagctgttagatactca
+ctctaattttggacaacaatcccaatcttggggtcgtctatcgcctgaagctcgtaaatc
+cttccatcttaaacgattacatattatagacttgttcggggtagagatatcacagttgtg
+caaacattgtaaatcgatactagtttatgttggtagtctagttgcttttaccattccccg
+aaaaacttgatctactatttcgacaacagtaaacttgaactaggtaagtgaaaacagaga
+atgcctcatagtgccactatttgtccactatatgtaagtgtagctttacataatccacta
+tgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcccggatattacga
+ctgtaactataaaactagttactggtagcgcgccatgtatagatttgttttaccggttgt
+ggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtccatctcgacttc
+tataaaacgataaagtaaagttgatgttcagcctccttcttatggttgcatcgagagtac
+actactcagtgggaaatagatcggggttcctacttcagattgtattatctaggcaattgc
+cgattgtgccatacctggataaaataagctacctacatgtgatgcttatctattatcgtc
+atactaccttagggtgtcctgttgaacgctacattaatctttagccgtttgagatgttcc
+aatggataggagtctaacgcatgatgaagtttaggaaggcagagcatcccactaagtatg
+tgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtccttctggttctattc
+tgctgaactattgaatggaaagattggttgacctacgtactatttgcttgaagtcatcaa
+tttgacggggtgagagacatatggtgcatactttacggactctatattttagatcagaag
+cttagcagtcttctctacaccccctcacgacataattgcttttaagaatctatgtttgat
+tcctctacgggaattcggatccgttcgcatgtgcggtttatctaaaccaggggacatatg
+ttcagctaaagcatacgaacactttgctaactagacgtatgtatagtagctataaatccc
+gacgatatttacaaaaagaaatgagactcaaatatatacatagcgaccctacacttattc
+gcaccctgatctaggcgatcctagcacccacacccgaaagtgagcactagtgtcttccgt
+attaaatttactgcagttgagattttagttgtctactaaggattactctaacccgtaata
+aggatcaagactcggtactagctttactatcattccctatgtgttttcctaactcacaag
+ggtacgtaccagcctatgtaattacaataatgataaagacacaaaggaagtaactttaca
+aatgagtctccagttacactagcttagtccctcccatcttgctttgaagtctaaatacgc
+aatctctgaggatatacagcagaagaacactcataacgttggagtccaagaattagactc
+atagggcccccaacatttaatatgtactgtgagtttgaaggtgttctattgttaattcct
+gctcttgatacatgacacgtactccgtgtttaaggcttcggactgactttctttcataag
+ttgagcaacgaaaatttcagaatcgataagttggattcactaactaatacggctgattga
+aaactccactccggacctatatggtcgacctttatacgtaaccgatataaaacttatagg
+ctggtatatcgagccttcctagcgcaatttcggatggggtttcttctactactcaacaac
+ggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgtaggagagcgctgt
+ggagcatgtgtcattatggactggagcactcttaaatcactctgcgtgtgctaaacgata
+gatcataacatgtcctgagtaaattttcttgatacgtcgcaatataccgttattagttaa
+acgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatatactattagcgact
+catctcgcctaacacgcacacgtataaactcggaatgactgccgctcttacatattagaa
+atacagactacaccacggaagcattgggtcattctcaaccgctgtataaaagatgattag
+tcttataataagattaccaaagaggcagaatcatgggtagtaaatctattattcaagtga
+ttaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaaatattaaccgga
+cgaagtggtttacgtcgtactttcactattagtagtaaatacaaggtaacaccggggaat
+agtactaaatataatgatatctatcttcgggagaacgagtcgtctattgctttgaacatt
+ctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgttacttttgtctat
+tcaaaagattgaatagttttttatacaaaagccgcatacttatgacggctagtatacagt
+ttcatcccctagcatcaatgctatggacagtattgaacttataggaaattcttctaatag
+ggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatggcactagtattg
+tcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgtagtccgtatctt
+taacgaagcgacagcgacagaactcccatggataaccaattataaggcccgtaatcctct
+agacatcgtttaccaataaatccgctttctccgtaatcatgttgaataccccagagtagt
+ccagatgataaccgatgaaacacaagtctttctcaatgcacttacggtgaacttattacc
+gccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgacgagcccagcgaa
+cttcatcaactttcgtatattcaacgccttgtaattttactttaagacgcctggtgatgt
+agattcttagataatcagtttgttatcggctgtactttaccataatttcacaggtttcag
+gtcaagaagattatagctgtatatacagttccatgctcggtgcacagaaacgtgatcgga
+taataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccccgataccgcagt
+gtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggacgtcagctagatt
+agattccttaatagaatataccgacctctagtccgaactaaactatagataacgccaact
+tcaggttaattgtctagtcgtctgtttgcagatgggattcttagatgagtgagtatcggc
+catattggttcgagcactttagtttttgatgcataggatatgcaatgtatagctgaaagt
+actttatctgtttcaaactcacattgattaaaccggtaaacctttaaagactacaagaaa
+atattcagtgagggcaattttgtcaatcacaatcttccagctagagatacttcacaattt
+gtcttgaggctacgcaacattagacggattttcgcgttttattgaaataatcgaggggcc
+caagagtatccatagttcattttgtaagatttctttacaggcttattacagcttcttcag
+actcctacatgcttacgagttatatgctagcatgtgaacaatagattaatatacaggaaa
+acgtacattgagagagatgaccctacacagcgcaaccgttgagtactttcattaaagggt
+aacgctctcgagacagcatccttaagatggccttattgtcaaatcatttgcagaagtacg
+caagatccctaaccaacgtagaagaatccctacaaacacatgagacgcggtgaaaataga
+cagggtgttagtattcaatcttcggagtatcaatttcgccaatcttggtgagaaagcata
+ccctttcttcagagaaagaagatcaatcataacactatctttaacgaggtacgcacgcgc
+atcattacctgcctccatggatctttaggatagcggaaagtattggcagcgtattgtgat
+ttcgttcctactttatcaatttcacattcatatacatgtcttttatcaaaatcgccaata
+agataggatgagctatattagatgctagtagagttcgcgccaacatcatcgataggaata
+ctcaggacagcgtgataggacttttcaatccctaatactctctataattataactctctc
+ttaagtttggaggcagtaacgcgctctatataatcagtttgctgcaccattcttcagcct
+ctgatacatacaaataaattccacagcagtaagagggtttaattgagacatcttgggaac
+ttaggattttactctaacatcaccgaaacgattattggataccgtacctaaacgaacttt
+ctcaaggcagtaatataggacatccgcaataacacaaatgctgcctccccaggagttatg
+tcttcctggaggctatatcttacacccactcactataggcaaactaaagtttaaatgttg
+attgtctaaaaaaaagatagataagagttggccggcgtagcacatgcgaaagtgaatcgt
+aagctataattctctggacttgaagttctgtcctgttcctctgcaagaaacaaacttcct
+ttaaagctatttacgacgcacatctcagcaagttataaacatgttggaagtttctagtcg
+gaattcccaaagaacggatctatctaatgcattcctacatttttcctgtctgccgatggt
+gccatcctattcaaagaatttcttaaaagtagattaaatgggacttttaacaatgagtaa
+ccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccgagccacatacac
+ggagaacattctaacatagcattctcaactcgatcatttgcaggttacttctttcctatc
+ctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacctaagaaacaatt
+cagtaaaacatgttcgaattcttggtatgggaacatcattgcagctatggtctaacgcat
+taatgtttgggtacatcttccatcatataaacaggaagagtctgacgacagggagtgctt
+gcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtctatgagagcgtg
+tatccgataagatttagaaaaatagaagtcgtataagatctcactgaacttttgaatgaa
+tgtgaagcatatatgatctgctttaataaaactttatccataggatacgtttccaaatca
+attcaataattattagtcaaaatagataaggatgaacaacctgaaggccgatcggacgta
+gaaagtggtcccatcactttgagttgatattgttgaaccacacgttattatggttttcaa
+acagtctcaggatattgtatatacagataatccgataccagttgtctgacgcccctctta
+cgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaactaggcggcaac
+taatttggaaagaagcacagtggatatgtctaaattcttgttattcaggcctgaatttaa
+tacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctctaagctaccact
+tctatgatacaccaatagttgttctacggaatctgataattggccaagtcataaacttcc
+gctgcgttcaacccccttgctcgaatatccaactcgaaaagacagccttttggtgtccgg
+aacaaatcagttacttcttttctgatgttaattctctgtggtcagatacagaccaaaaac
+tccgcggatttaccatcctccaagaacaaatttgcatcaacatagcattttggctacata
+ttctaagtctcaatagtttaggttttcaactacattatcccaacattaggattggaggaa
+taatagctgggtaagtccccttgcgtctacaatcgactattttttatgaatatgcttctg
+ccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaaagatagatgaat
+caggtgtaatggcagcagccaaagagcatataattagcaacactctaagaacattataga
+tatgatgatagcgatcgtcatgatgttatccggtcacaatagtagcttcatcagctaatt
+cgttttgccagtggtgacttgcgctggaagaatcgttatacggtcccttccctcttgata
+cggtgggggcttattcaaccgcgtggattgggttgtcatacttgcattaaacgatgtaaa
+ccatctagtagtcaactatactaaatcacaaaatagtgatcaatacatacccgcttcatg
+gttttaaccatttaattgattaaagatattccgctaagaaccattatctacctaaactga
+tcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacgaagtaaaacgtt
+atattgtatgtagaataataggtcttggagctaaatgatgtgattggtagtgaagactta
+cccttacaactttaccggtttctcggaagaatatactagagaatcaatgcatgggctaca
+taagcactttagtctaatgagataaaaaatacacgagtcttccatcatgaattttttgtc
+gaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaataactctcatat
+gttttatataacttcccaatcacgacttgtaactgcttgttcgactgagctgtttgagct
+atgaggccgggatccggttgagctacatctatttgctacaagaaaaatgaaagcacattt
+gttgggagttctggctacactcatagagaaataagtggcccgagtgggtgcggcctgcct
+ccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaaagaattaaagcc
+tttatttcctccacggagtagcccgtaatccggttcgaaagagaccattgaagttaattt
+tcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcctcaaagcgctctt
+caaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacataaatatagaagg
+aatgattcggcgagttaattttcgccttctccaacatggcatccctacgttcgttataag
+gaccatacatgtaggttttaaaggtttgcggttaatcgatatttacatcatagaaattct
+atagtcaaatttacaagactctagatactcactcgttgcagccggctaggaagcgctttg
+taccttacttcccttttcgttgcgtaatatgaatttcatatagtaagttcaaggcactca
+tacctccgtgaagagggtagatagactattaaagttgtttaatagtacgtattgatggaa
+atgacccgtaggagatttaccactcaatccacaagattcgctgctgtgcattatcaaaac
+agtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggtagagatacctttg
+caatttttcgatgaaggcgaccgagataaatgagctataacactgtatgtcttttgattg
+ctataaaacacagaaacggatattaatttaggccgtaaccaacatctgttatttgacata
+gaacagatggtcctttacagcgtattccggccttaatattgaggtccagtgtattgtcct
+cctttaaagaagttgattgtaactgacttaaataagacatgtcacccattcactgggttg
+caactgctggccctttttgtccatcgcacgctaatgtgataacagtaccgccctcacacc
+tgcgtttaaaagacataaatgtcgctatgaaggttattcattaattttagctgttttctt
+agaaaaggtaaatttaaaattgaaaaggctagaaaactaaagttacgacaaatgtgtttg
+tcaagtaggcgggcatcattgagattgtaagaaataaagccataaccagccccggaatag
+aaaatgttaaggaaaggcgatcttctttgaattcttattgtcaagtgcagtcatacgttc
+ttatcagaggacattgcaataaaatctaacaccctcccttgtgtggttgggccatttgta
+cttcgaagcgtccaccatgtgcagaggataacggaatgtggttccgtcccataaacgatc
+attctcgcccacttagtggcgcggtaaatcgctctcatagaggtaactggcctgtaatgt
+ccaatgttaggctaccttctccaactttagtacaacgaataatgtccgattaacaaggag
+tcaatttgtcatgaccagttcattcaggtacttgtatctatacggacgcgttccagagta
+gtatttgaaattttgaggttctactgataagtttagctatcgctgtatgtctgaataaga
+atttaatgtttatcttcgataaataacaattaacaactcctaggtgatacactgtgaagt
+ctgctgttccccaaattacatatgctattttgttcacataccatgaagttaagctaagtg
+ctctataatggcataaacggttatcaaactagctcgaatttcttttattacgccggaagc
+ggattaactgctgtagatcaaacacgttaggatagtgtcgttttcatatatatctaaatt
+cggtctaacatgcattacccatgcttgataacgtagcacttcgcagtctaattatgtaat
+gtccgtttaaccaaactttaaaaaagtttatctatcaccagtgatgcctcatcgtgacta
+cccggatctttagcctttagggtctaaacagaactaatattactacgtgtcatactccgg
+agcttaaccaggtgaaacttatttgttaaccaaatttagtgacagggtagaaatacgtat
+caaattaacccagcaatacaataagcatgaaaataattgtaatcgggtttgggccggaat
+cccgcttggcgaaaacttaatgacatagtgtgatgcattttgcactggattgagccacaa
+actcaactagcattatgctcaatatttggccagtgttctacggtttgaaatttataaagg
+ccgcgcaaaagtcttgtagttacaaacgcataaatctcgaacgtaataggtttaattaga
+acatccgtaggatttctgtttatagtagatttatactaaatgttctgattagattctgac
+ggccttacccatacaattaataaagacgaatatattagttatagtttactatccaaataa
+attaagcgaatcgaaataaactgtcacgatactgggcagttatcaacttatcacttatac
+agttcggacactctatattggtctgtgagtactctatcaaactaactcataagttaactg
+cgcttccattaaatttcaatacgttcttgtgctgtgtacaaacctataatcgaataaatg
+acacatatggagatgcataataaaaaaaacggctccatatttctcgttaatcgggcattc
+ttaaggaggagcatctcaccaaaaataacgttcctgataagtcttaactattagaccgtc
+ttcgggaatgaacgaaacctcaagctagcatggtatagttcttgatagcgcgtaaattct
+gataatactgggcggacagctggaaattagttgccagtgcacctacgcaaatagtttaca
+taaatcaacgggctccgaacgtaaatacaaagggttagttacatcgcaacaagatgaaaa
+gcatgtatgtctaccgtcatccgtccctaacaaacataaaggtggtgaagaatctcgtag
+gtcaactataactccatccttgaagcaactactccgcgtccgtgtgcgtagttcgcaacg
+agaacactactgaaaaaagctaaacaactctcggtacaaatgcggcttgtgtcgataaag
+ttggtggtagtgcacggaataacataacaaggaatattatttattcaaattttttgtgac
+tgttatttgttttctgcctagaatgtaaggatgtgttttttgtgacctgatagttacgct
+tatttcaggtccacggtgcgtgagagtgtgtcctataacggcaggggagcgaagtagtgt
+cctttagactattcaaggtagaattttgataacgctctataaaaggtagaaaatcatgat
+tgagcaataagaccccaacttatcaaaaaaggagttctcgacagcgcgtgtacagtccct
+ataacggctgtatttcctgtgtcacaacaccctcccatcgcactcaaaatgtagatttat
+gatcagacgctaacttgttcttagagaaaaatacacgggatactctgtgcaacgatttca
+ttaataaggtgcagcttgggacttttttggccgtaggctttattaacattcacagtaggt
+agcgagacttcctatgaaccaatcatgccacgcgttttaacgtttcaaatataagctagg
+aagcgtttgccaggacttctataatgcaccgttttttttagtacttccttactagcctta
+gtttatgttagagtctttccaattacaaaggattgaatagccaaaatttctacaattctc
+agcgaacgccagcttaatctaaacacgagcttcaaatattctacatatcggcaggagtca
+atatataaatatgaaaatcgtaccatcctcgtacttttagaccaaacgtcttcggataat
+taaatcctttttcaattaccacagtacgtgcattagaactactgctatgaaagtaaacct
+tgaaatatagtcctcaagagcgtatccaagtacattgcacgtgtatacagtcgtataaac
+gagttgatgttctgacgctagagcttaccattcgttaaacagataactaaaatttaatgg
+ctgagtgacttagtgttttcgacaaacgtcgcggatgtagactattgtttataagcaatt
+tttaaaaacatatgttcaaaacggtatgggatatgtcgaattccacaggggtttatgtac
+catagaagtatgtataaggtactaaaggtttaaatctgtgatattcggttcggtgaaaat
+cagactagtcacacttagtgtctgtaaattagattgggtgaaggtaagcgatcccgaact
+ctacaaggcatgggatgagattctaccgactccggataacactttacgatcgcgcataac
+tctagctcttagataagtttaacttgtcgatctcataaacagttcaaaatctgcgattta
+ttgtatcaaatccatcctctatcttctataatcatctgaaccgcgatacggcactatgag
+ccaagtgaagattgaatccaagaaagctataattggtttattttagtccatttaaattaa
+gtccggtataagtgctctgtacaatatgcagtctcatgggcatatacgttaactaccttt
+tgatacttcgaattggtaaaatatcgactatcgatttgcagtaaaaggtgtagagtccaa
+ttactctttcctgttacatacgatctcttagtttggacaactagcccatgatggcgctcc
+tctagcgcatgaacctactttataattacatctttatcgatgaatttttttagactgcgg
+aggccttgagttttaacagggctgctaaatttcttaagcgattagacggtagcgtcgtac
+gctacttgcttggaacaggcaccgaaaatattgatctactattgcgtcaactctattctg
+ctaatagcgatggcaaatcacagaagccctcttagtgacaatagttgtcaactatatcta
+agtcgacctttactgtatcaacgatcacggagagaattaccgaatacgaaacctcaggac
+taaaaaacggaaaggatttgtcgacggtaaatataatacttgttaagggtagcgacacag
+gtatactttgggtgtaaacgtggtgcttcccggaacgattttcagaccagaaaattgttc
+cggtaaccaggaaatctcgtctgcgttaattcgtgttagtaaacttgatcttcagactcc
+ttcttttcgttgcagcgagacttaaattatatctgcgaaatagtgccccgtgcatacttc
+agatggtaggagataccatttggcccattgtgactttacgcgattaattaaccgacatac
+atctgttcctgagctatgatcgtctgaataaattacggtctcctcttgatacctaatggt
+ttctggagacgtttctcatgttcaaatggatagcaggagatcgcttcatcaagtttagct
+acgcagagcatcaaaatatgtatgggaaagtcgatttccaaaccagaagggataaagaga
+aataacggacttctccgtagattagcctgatattttgatgggaatcatggcggcacatac
+gtaagagttgcgtgaacgaatattttggacggcgggagacacatatcggccattcgttaa
+ggtctctatattggacatcacaagcttagcagtatgagctactaacactcaagacattat
+tgattttttcaagatatgtttcattcctctaccgctattcccatacgttcgattcgccgg
+gtgagcgaaaccacgggactgaggttaagctaatcaataacaactcgttgcgatagagac
+ctatgtatactagagagaattccccaacatttttacaaaaacaaagcagactaaaataga
+tacagtccctccatacaattaggaccaacatgttattgccgatcctagcacacacaccac
+aaactcagaacttctgtcttacctatgaaagggtctgcacttctgattgtacgtgtctaa
+ttagcattaatattaaaactaattaggataaactataggtacgagctttactataagtca
+ctaggtgttttccgatcgaaaaacgggaccttcaagccttggtaagtacatttaggataa
+agaaaaaaaggaaggtacgtgactaatctgtctaaactgacaatagagtagtacctacat
+gcttcatgtcaagtcttaatacgcaagcgctctcgttatactgctcaacaaaactcataa
+agttggactccatcatttagaatcatagggaccaaaacatttatttgctactgtcacttt
+gtaggtgttctattctgaattcctcatattgatacatgaatcggaatacctgtggatccc
+ttaggacgcacgtgctttctttacgtcagaatacatattgtcagaatcgagaagttccat
+gcaattaagaattcgcctctttgaaaactcatatccccacatatagggtccaccgttatt
+cggaaacgatataataattattccagcgttgagcgtcccttaagagcgcattttcgcttg
+gcctttcttctacgactctacaacgcaagtggctgtgtggagtttaccacagcgcagcac
+cccatagaactacctctgagagcgcgagatggtggcagtatgctctgcagctagcgttta
+gaacgcgcccgcgcattaaccagtcatattaaaatggactgtcttaattgtcggcattag
+gagcaatattaactgatgagggtatcggtcgcagaagtaatgacggaaatacgcctctag
+tccgcagagatacgattacagactcagatcccctaacaagcaaaacgattaaatcggaat
+cactccccctatgacatatttgaaatacacaagaaaccacgcaacatgtcccgcattctc
+aaccgcgctttataagatgttgagtctgagaattagatgacctaactgcaagaatcatgg
+cgagtttatctagtaggcaagtctgtaccctagggttcgaacgctgtgacgtcgtgatcg
+gtctaaggacttagatgataaccaagaactggtttaccgagtactttcactattaggagt
+aattacatgcgttcaccgcggaatacgacgaaattttttcatatctttatgagcgagatc
+gtgtcgtctttgcattgcaacagtcgctaccagtaattgctgatcaattatagattcatt
+atacagatgcttacttttctctattcaatactgtcatgagttgtttttaaataagcacca
+gaattatgtcgcctagtataatcttgcttccacttgaatcaatgcgatggacagtattct
+actgattgcaaagtagtctatttcggcttagcagtacgcatgcctatttttttgcaggca
+cagaataatatgcaactaggattctcggcatccaattaacaggctaaaacaccaccgaaa
+gacaggtaatctacgaagttgatgtttactacagaaagcgaatgatatcacttggagaac
+attttagatgcccccttttaatctagactgagtgtaccaatatatcaccggtctaccgaa
+tcagcttgaataaaccactctagtactcatgataaccgagcatacacatgtatttctcaa
+tgcactgaaggtgaactgtttacaccataccttgcgaatcaacgtggcgacttatacttc
+tgtctttgagtacagcacaccctaatgaatctaagttagttgttgatacgaattgtaatt
+tgactggatctcgcctcctcatctagattcttagagaagatgtttcttatagccggtact
+gtaactttattgatctggtttatggtaatcaacattttacctctatttaaacgtccttgc
+gccgtgcactcaatcctgatcggtttagattcaagcgattatcgagtctggaggccgaga
+aaagaaatgcacagagtaagctctctattgcgacatctacgtagaaactcgcatttcaga
+tcgagtaagcaactctcattgtgttgattcagtaatacaagattacctacgcttctacga
+aatatactatagatttagcctacgtcacctttagtgtcgagtcggagctttgaagatcgg
+atgcggtgtggactgtgtataggcaattttgctgcgagctcgtgacttttggttgatgtc
+gatatcaatgggatacctcaaacgtctttatctctggataactcacattgagtataccgg
+taaaaatttattctattcatctaaatagtcagtgagggctagggtcgcaatcacattagg
+ccacatacacatacttaacatgttctattgacccgacccaactttagtagcattgtagcc
+gtttatgcaaatatgccaggcgccaaacactagccagagggcattttgttacatttattt
+aatcgattattacacagtcggaacacgcctacatgcgttcgacttatttgcgacatggtc
+aacaattcagtaatttaatccaaaacctaaagtcagagacatgacactaaaatcacatta
+aggtcagttagtgaaggaatggctaaccagctagagaatgcatcattaacaggcacttat
+tgtcaaatattttccagatctaagcaacatcacgttaaaaagtacaacaatcacttaaaa
+cacatcagtccaggtgtaattagaaagccgcttagtaggcaagcgtaggagtataaatgt
+agacaatagtcgggacttagcagacactggatgcagtcatagaagatcttgcataacacg
+ttagggttagagctacgaacgcccatcattaactgcctaaagcgtgcgtgagcttagcgc
+taacttttccaacacgtttgtgatttcgttcataatgtatcaatttcacagtcatataca
+gggagtgtagaaaaatcgcaattaacatacgttgacctatttttgttcagagttcagtta
+gagcctaatgattcgagagcaataatcaggacagcctcataggaagtgtcaatcacttag
+aagctatattattataaatcgctctttactgtcgtcgaaggaacgagcgagagagaatca
+gttgcctgcaactggcttaacaatatgatacataaaaatattttcatcaccactaagacg
+gtggaattcagacttattggcaacttaggatgggactattaaataacccataagatgttg
+ggataaagttacgaaacgaaagggatatagcctgttagataggaaatccccaataaaaca
+tagccggcctccacagcagtgatctattccgccacgcgatatctttataccacgcaatat
+accaataataaaggttaaatgtggttgcgatttaaaaaagatacatatcagttgcaccgc
+gtagcaaatccgtatgtgaagcgtaacctagaattatagcgtctgcaagttctctaagct
+tcctctgcaagatacaatatgactttttagcttttttactaccaaatctcagaatcttag
+aaacaggttggtacgtgctactcggaattcccaaagtaccctgctatatatgccattcct
+tcattggtccgggctcaccatggggccatcatagtaatagaaggtagtaaaactagttga
+tttccgacttttaacaatcactatcctgacccagatatgggttccgactggcccttactc
+cagtaagggcagacacacagacaacgagaacttgataactttgaattctcaaatcgatca
+ttgcaacgtgacttatttactagcctactcctataattcatacgtcaaatacatttcaac
+ggaggaagataataagtaaatattcactaaataatggtcgaaggagtcctttgccaacat
+aagtccacatatgcgctatagattttttcttggggttcatattcaataagataaacagca
+agagtatcacgtcagcgagtcattgagatcttggctagcattgtgatagcatattctacc
+taaatggtagtctagcacagagtggataagatatcagttagatatagacaagtactataa
+cagatctcgcttcgttggattgtatggctagctttgatgatatgattttataaaaattga
+tccagacctgacctggccaattatattcattttttatgagtaaaaatagataaccatgaa
+aatactcaagccccttaggacgtacaaagtggtaacataaatttcaggtgttattctgca
+accacacctgttttgggttttcaaaaaggctaagcagattggttttacagataatccctg
+aacactggtatctcccaacgatgtcgttcccaacccttgctgaccttttaagctctgctg
+aagttttgtaaactaggcggaaaatatgttcgatagatccactcgcctgaggtagaaatt
+cgtcttagtaacgcctctttggattacacagaatagtgtactgacacgtacactgctgca
+gcagccatacgctaacattaaaattcgttgagtctacatttgttgttattcggattatgt
+tattgggaatagtatttttattcccctgcgtgaaaccacatggatagattagcctactcc
+taaagactcccttttggtctacggttcaattctcttactgagtttatgttcgtaattata
+tcggcgcagtgaatctcctaattatcaccggagttaccagacgccatgaacttatggcca
+gaaacattgcatgtggcctacataggattagtatcaagagtttacgtttgcaacgacatt
+tgaccaacttgaccattcctgcttgtagaccgcgggaactcccctgcacgcgactataga
+agttggtggtggatgtggcttatgccgcaaatatggttttgaaaaaagtaatctattgct
+tgatacctgaattgagacatgtataagggctattgccagatgaaaaactgcatataaggt
+caaacaatataagaacattatacataggatcttagcgttcctcaggatggtatacgctat
+aaagtctagcttcagcagctaaggagttttgccagtgcggacttccgctggaagattagg
+tttaaccgccctgacatcttcataaggtcgggcctgattcaaacccctggagtgccgtct
+catacttgaattaatcgatggaaaacttcttctagtctaatattattattaacaaatgac
+ggttcaataaataacaccgtaagggtgggaaactgttaagtgatgaatcattttaaccta
+tcatccattagctacagataatgataccccgatccgactagggggtaagtggttgttccg
+ttaggataaaccatgtaaaacgttagagggtttgtagattaattggtattccagataaat
+gaggtcagggcgagtgatcaattacactgaaaaattgtcagcttgcgcggtagttgttaa
+gacagtataaatgaaggggattcagaagcaagtttctcgattgactgaatttataaacca
+gtcgtcaatcatgatttttgtgtcgattaaagcctaaatggtaatttaaaccattgatat
+ttatcgagtctataaatatctttggttgtatattacttcacaatcaccaattctaaatga
+ttcttccactgtgcgggtggagatatcaggacgggttaaggttgacctacatcgttttga
+tacaacaaaaatcaaagcacatggctggggacttctcgatactatctttgagatagtacg
+ggcaagagtgggtgacgcctccctacattttcaagtctatcggataacttctcggtaaaa
+cgctcgcgatatagttttaaagcattgatttaatccacgcaggagcaagttttaccggtc
+gaatgagaaaattcaacgtaagtgtcatatccagtcatggttagccaaaagcatgggtta
+tccaaaaggaataaaacagctcttcaacaaagagatgaggcttcataacttcgatgaatg
+cgtatggttctgatatatagatcgatgcatgaggacactttattttagccggcgaattaa
+tggaatccatacgttacttatttggacatgacttctaggtgtttttgctgtcccgtttag
+cgatatttacagattagtatttcgtttctcatagttaattgtatctagatactaactcgt
+tgaagacgcataccttgccatttgtacaggacttaactgttccgtgcgtaatttgaattt
+cttataggttcttcaaggcacgaatacctcactcatgaccgttcatactctagttaaggt
+cgggaatactacgtatgcagggaattgtaacctaggagatttacaactctttaaacaaga
+gtcgctgaggtccaggatcaaaacactgaatctcctaacttcgggtgcctccgtaaatca
+cctagaaacctactcatacatttgcaattttgagatgtaggcgaaagagagaaatctgct
+ttttaacggtatctcttgggattccttttaaaaacacataacgatagtaatgtaccaagt
+aaccaaaagctgggatgtgtctgtgtactgatccgccgtgtcagagtagtccgccatgaa
+tattgacgtcaaggctagtgtcatcaggtattgatgttcattgtaaatgaaggaatgaac
+taatgtcaccaagtaaagggggtgaaaatgctccccagggttctacagacatagagatgg
+tcagaacacgacccccctctcaacgcagtgtatttgaaatatatggacatatctacctta
+ttctgtaattttagatgtgttctgtgtataccgatattgataagtcaataggcttgatta
+cgtatcttaagacaaatctgtttcgcaagtaggaccgcatctttcagattgtttcttttt
+atgccataacctgcccaggaattcaaaaggttatcgatacccgatatgctgtgaattatt
+attctaatggccactcattcctgcttatatctggaattggcatgaatatcttacaaccta
+aagtctggcgttgcgccagttctacttcgtaccggacaccatctccagtcgttaaccgaa
+ggtgggtacgtcacataaaagttcattagaccacactttgtgccgacgtatatagatata
+ttacacgtatagggaatgttttctcctaggtgacccgaccttctactaaggttgtacatc
+gtataatggcccattaactacgaggaaagtggtattgacctggtaatgcacgttcttcga
+tatataccgacgaggtaaagtctactattgcaaagtttgacgttatactgataagtttag
+atttccctggatcgcgcatgaacaatgtatgcgttatctgccatatataacatgttacaa
+atccttggggatactatcgctactatcatcggaccaaaattaaataggctagtgtcttat
+cagaacatcatgtttaccgaactgatctattttccaatttaagctgatattacgtccgcg
+tatttattttagttccccggatgacgattatctgagctacatcatacaagttagcatact
+cgccggtgcattgatttcttatttcgctatatcttcaagttcacaggcttcatatagttc
+caattagcagtataattaggttttgtaactttaaccatactttataaaaggttatattgc
+acaactgatcaagcatccgctataacccgagctttaccagttagcggctaataacaaata
+agatgacttcgtgtcatacgaccgtcatgatcatgctctaacttaggtgggaaccaaatt
+taggcaatgggtagtaataagtataaaatgataccacatatactataacaatgaaattat
+ttgtaatccggtttgccaacgtatcccccttcgcgataaattaatgacatagggtcatcc
+atgtgccaatcgtgtgtgccaaaatctcaaattcaattatcatcaatattggccaagtgt
+tataagcgttgaaagtgatataggccgccaaaaagtagtctacttaaaaaccaatattta
+tcgttcgttattgctggtagtacaacatcacgagcatttctcttttgagttgatttatac
+tatatctgctgatgtgattatgtcccacttacccagaatattaagaaagtcctagattgt
+aggtatacttgactataaatataatttaagactatacaaataatctggctacattatgcc
+atcgtagaaactgataacgtagtaacgtcggacactagattttggtcggggagtaatcta
+gcatactaacgaatttgttaaatccgctgaaagtatatgtcattacctgcttggcctgtc
+ttcaatacgtttagactattaaggactcatttcgagatccagtattaattatacgcatcc
+atatttatactgaagacggattgagttaggacgacaagctaaacaaatattaagttaagg
+attagtattatattgtagaaactcgtcgggttggaacgattcatcatcatagaatgcgtt
+acttattcagagagacttaattcggttatgactggcagctcacctggaaagtaggtgaaa
+ggcaacagaagaatattgttgactgaattctacgggctacgaacgtaattacaaagcggt
+tcgtaaagagcataaagatcaatacaatggatctctacagtattacgtaaataacataca
+taaacctggtgttgattcgactagctcatagattaatcattaattgaagctacgaagacg
+cggaagtctgcggagtgagcaaacagtaatcgactgataaatgcttataatatcgcgctt
+aaatgccgcatggtgtacattaacgtgggggtagtcaaaggaatatatttactaggaata
+ttagttatgcaaatgttgtgtcaatgtgatgtgttttatccagacattggatgcatggct
+gtgggggcacaggatacttaccattagttcacctacaagcggcgtgagagggtctcagtt
+ttagccagcgcagagaagtacgggcctttagacgattaatgctagaattgtcataaacct
+cgtgaaaagctagttaataatcatggtgctagaagaacacaacttttctataaaccagtt
+ctcgactgacagtcgtaactcactatatcgccgctttgtactgtcgcaaaaaaacctcac
+atagaaagaaaaatctactgggtgcatcagtagagatcgtgttctgagagataaatacac
+cggatacgatctgcatcgagttcatgtattaggtcaagcttgggactgttgtgccagtag
+cattttttaacagtcaaagtagggtgagacacgtcatatcataatatatgccatcgaggt
+ttaaagtttatatgataagctagcatgcgttgcaatcgtattcttgaatgctccgtggtt
+tgtactaattcctttatagactgagtgtatcgtacactcggtacaattacaaaggatgga
+agagcaaataggtcttcaattataacagtaccccaccttaatctaaaaaccagcttcaat
+tagtattaatttcgccaggagtatatatataaatatctaaagactaaaagactcgtactt
+ttacaacttacgtcgtagcataattaaatcatgggtaaatgtcatcagtaagtgcattag
+aaatactcctttgtaaggatacagtgaatgtgtctcagcaagtcagtagaaatggaaatt
+catactcgattaaggcctataaaactgttgttggtatctacagagtgattaaaattagtg
+aatcagattacgaaaatgttttcccgctcgcacttacgcgtttagacaaaagtacaggtg
+gtacaattggctgtagtagaattttggtataaaataggtgataaaccggatgggtgtggg
+cgaattcaaaagcggtttttgttccatagaactatgtagttggttataaaggttgtaatc
+tcggagattaggttagggcttaatcagaatagtaacaatttctctatgtaaagtacagtg
+ggtgatcgtatgagttcacgaactcttaatgccatgcctggacaggataaacaatacgca
+tataacttgacgatcgagcttatatcgacctatttgagaagtttaacgggtcgatataat
+atacaggtcttaatagccgattttttctagaaaagcaatcctatatcttagttaatcaga
+tcaaccccgtgaacgatatatcagcaaactgaacattgtatacaacattcctttttgtcc
+gggtggggactccatttaaagtatctcacctagaactcagcggtaatagatgcagtctct
+tgcccagttacggtaactaaatgttgatacttagaattgctaaattttagtctagacatt
+tccaggtaaaccggtagacgacaatttctctgtcatctgtcataagatcgcttagtgtgc
+tcaaattgcaattgagggccctactatagacaatcatcagactttttaattaaatagttt
+tccatgaatgtgttgtcaaggcggaccccttcacttttatcacggctcataaatgtcgta
+tgactgtagtcggtagcggccttcgagtcttcaggggaaatggaaaagaaattaggcttc
+taagatggactataatcgattaggctaattccgttcgcaaatcacagaagcaatcttact
+caaaattgttggaatcgatagcgaacgcgaccgtgaatgtttaaaagtgctcgcacagaa
+ttacccaatacctatcatcacgacttaaatacccaaagcagttgtagtcgcgtaatagat
+taagtctgaagcctagagacaaagggatactgggcggggaaacctgctccttcacggtaa
+catggtaacaacagaatttggttaaggttaaaacgaaatatactcggagtgaattactgt
+taggtttcgtcatcggatcaataagtagtttccgtgaagacactcttatattagatctcc
+gaaattctgacccgtgcattaggcacttggtaggagattccatttggaacttgctcaatg
+taagccagtaatgttccgaaataattcgctgcaggagcgaggagccgctgaataaaggac
+cctcgcatcttgttaccttatggttgagggtcaccgttctctgcgtcaattccagagctg
+gagatacattcatcaacgttacctacgcacagaataaaaagatcgagcgctaactcgttt
+tcctaaacacaacggatttagacaaattaccgaatgcgccggagagtagcatcttagtgt
+catgcctatcatggcggctcagtacgaagagttcaggcatcgaatattgtggtagcccgc
+actcaaagttccgccattaggtaagctatatattgtggtcagaacttgaggacaactatg
+agctactaaaaataaacaattttgtcatttgttctagatatgtggcattcatcgaacgct
+tgtaccagaagttacattcgcagcgtgagcgaataaacccgaatgagcgtaacattatca
+ataacatatagttcagatagagaacgaggtattcgacagagaattacccaacattggtta
+ttaatctatgcagaataatttagataatgtcactacataatattaggaccaaaaggtgat
+tccccagaagacaaaacaataaacaatctcacatattcgctagtacctatgtatgggtat
+gatcttctgattggacggggataatttccaggtatattaaaacttattaccataatctag
+acctaagagaggttatataagtaaagagctgtgttccgatagaaaaacccgaccttaaag
+acttgcgaagtaaattttgctttaacaaaaaaacctacgtaagggaatattctgtataaa
+ctgaaaagtcaggtgtaactacatgagtcatgtcttcgattaattacaatgcgatctcgt
+tattctgatcaactaatatcataaactgccactacatcttgtacaatcattcgcaacaat
+acttttatgtgctaaggtcacgtgcttcctctgctatgctgatttaatcagattcataaa
+ggaatacgaataactctggatccattaccacgcaagggatttatttacggctgattactt
+tttggctgttgacagaactgccatgaaagtaagatgtcgcatcttgcataaataatagca
+cctaatatagccgacaaagtgattccgataacagattttaagttgtccagccttgagact
+ccatgaagaccgcttgggagcttccccgtgattagaagaatctaaatcccaagtggatgg
+ggggagtttaaatctcagcaccaacaaatagtacttcctctcagagcgcgtcatggtcga
+aggagcctatcctgatagaggtttgaaagcgcacgcgcatttaactgtcatattaaattg
+gaatctcgtaagtgtcggcagtacgacaaattttaactgatgtcggtatacggagaagaa
+ggaagcacgcattgaagcagctacgcagaactgagaagatgacactctaagatacaatta
+atacaaaaacgttttaagcccaatctatcaacagatgtaagatgtctaatacacaagaat
+aaaaccttcatgtcccgatgtataataacagctttatttctgctggtcgaggtgaagtag
+tggaaattactccatcttgctgcgcgtctttatagtgttggctactctgtaaccgacgcg
+tccatccctctctcctagtgatccgtatatccaattagaggataaccaacatctgcgtta
+ccgacgaatttaaatttttcgactatttaattccgttcaaacccgtattcgtagtaagtg
+tttcatagatttatgaccgacatcgtgtacgagttgcagtgcatatgtagataccactaa
+ttgctgatctaggatacatgctttataaacatgcttacttggctattttatttactgtca
+tgtgggggtttttattttcaacaagtatgtgctaccattggataatctggcttcaaattg
+aagatatgcgttccaaacttgtctactgtttgctaagtaggagttgtcccattagaacta
+cgcagcacgtggtttgtgatcgaaaagaataattggcaaatacgaggctagccttcaaat
+ttaatgcagattactcctcagaaacacacgtaagcgacgaacgtgatgtttactacacaa
+tgcgtatcatagaaattcgtgataatttttgttccaacctttgaatctagactgagtgga
+aaaagatttcaccgggataccgtttatgctggttttaaaaactcgtcgaatcatcttata
+actgcattcaaatggatttctcaatcatctgtacgtcaactgttttaacaataacgtcag
+aataaaccggcacaatgagacggcggtctttcactacaccacacccttaggattataagt
+gacgtgtggattcgaattctaaggtgacgggatctacaagcctcagctacattaggtctg
+aagatctttcgtatagccgcgtatgttactgtttggatatgggttatgctaatcaacagt
+tgacagcgagtgaaacggccttgcgacctgaaatctttacggttaccttttgattcaaga
+caggatcgacgatggaccacgtgaaatgaattcaaaactgtaacatcgcttgtgcctcag
+cgaccgagtaacgacaagttcacatcctctatgcaactatcattgtggtcattaaggtat
+tcaagattaactaagagtcgaccatatattctagagttttacaattaggaaccgttagtc
+tagactaggagcgtgcaacatcgcaggaggtgtggactgtcttgacccaagttgcctgac
+acatagtgtcttttgcttcatgtccttagcaatgcgatacctcaatcgtagttttatcgg
+gataaataacatggtgtttaaccctattaatggtttctattaatctaaattgtaaggcag
+cccttgggtcgaaagcacattaggccacatacacagtatgaaattgttcgagtgtccaga
+ccataattgactaccatggtacacggtgttgctattatgactcccgcaaaactcttgaca
+gagggaattttggtacattgatgtaatcgatgatttaacagtaggaactagacgtcatcc
+gttagactgagttccgacatgctcaaattgtcaggatttttatccaataactaatggctc
+tcacatgtaaataaaatcacattaacgtcacttagtgatggattcgctaaacagatagac
+tatcattcatgaactggcactgtttcgattatatttgcaacatcgaacatacttaaagtt
+aaatacgacatcattcaattaaaaaaattcagtacacctctaatgagtatcccgctttgg
+aggaaagagtagcactttaaatggacaatttaggccggactttcctgtaaatggatgaag
+tcattgtacagcttgaataaatcgttagggttagtccttacatccaccatatgttaatga
+ataaagcctgagggaccttagagctaacttgtccaacacgttgctcatttacttaataag
+gttgaaatgtatcagtaagtgacagcgagtgtagattttgaccatttaactgaccttcac
+agttttgtcttcagacgtcacttacaccataatgatgacagagcttgtagatgcacacac
+tcattcctagtgtaaatcaagtagtagctagattattataaagagatattttctggcgtc
+gaacgtaacacagagagagtataaggggcatgataatggcttatcaatatgtgtaagaaa
+aagtttttaatatcatctaactcggtggaatgcacacttatggccaactgaccttgggac
+gagttaagataccataagaggttgcctgtaagttaagataacaaagggatattccatctt
+tgtgtgctaagaacctatttatatttgcagccataaaaacctctgtgctatgcagccacc
+agagttatttatacaaagaaagagaccatttagatacgttaattctgcttgcgatttatt
+aaacagacatttcacgtccaaccactacaaaagccctatcgcaagacgatcattgtatta
+tagcctatgcaacgtagctaagcggccgaggaatcataaaatatgaattgttacattgtt
+tactacatatgatcacaatctttgtaaaaggttcgttcgtgatactaccatgtacctaac
+taacctgagatatatgcaatgacttatggggtcagcgcgcaacatccgcaaagcatagta
+atacaaggtaggaaaacttctggatttcccaaggttataatgctctatactgaccaagag
+atccgttacgactcgcaatgaatactctaagggcactcacaaagaaaaccactaattgat
+aaatttcaatgataatatcctgaattgcatcgtgtatgagttacgagaagtcgcatttaa
+tgaattagtcatagaaatgtcatagcaggaacataattactatattttaacgatttaatc
+gtagttggagtcctttcccaaattatgtcatcagttccgatttagatgttttcgggccct
+tcttagtaaagaagttaatatccaagactagctcctcacccacgcatgcacatattcgcg
+agaagtctgatagaatattcgacagaaatgcgactctagctcacactcgttaactgatca
+ggtacttatagacaagtacgttatcagatatcgcttcggggcattgttgcgctacctttg
+tgcatagcagttttgaaaaattgttcaagacctgaacgggaaaatgatattattttttta
+ggaggaataatacagtaccatgtaaatactcaaccaccttacgtacttcttacgccgaac
+atatatggcacgtgttattcggctaacaaaactgttgtgccttttctataaggataagca
+gattcgttttaaacatatgacctgtaaactgggatctacaaaagaggtacttaaaataaa
+ttgcgcaacggtttagatctgcggatctttggttaaagagcaccattagatgtgccatac
+ttcctatcgcctgagcgagaatttagtctgaggaaccactcttgggatttaaaacaattc
+ggttaggacacctactcggcggatgaagcaatacgataacattaaaagtcgttcagtcta
+attttggtcgtagtacgatgagctgatggccaattgtatttttattaacagcactgaaac
+aaaatggagactttagactaatactaaagtctcaatgttcgtcgaaccttaaatgctcgg
+aatgaggggatcttcggaagtatagcgccgaagtgtatctcattattataacaccagtgt
+acagacgacatctaattatggccagaaactgtcattgtgccattaagaggattagtagat
+agtctggaccgtggaatagaattttgaccaaattgaccagtcctgcttgtagacagcgcg
+atctaaactgcacgagaatatacaagttggtggtgcttgtggctgagcacgctaagatgc
+gtttgtttttacgattctagtgcttcttaacgcaattcagtcttctagatccgctattcc
+aacatcaatatctcaatttaaggtcaatatatataacaaaattagacagagcagctgaca
+cttacgaagcatcgtagaaccgatatagtcgaccttatgatgatatggacgtgtccaagt
+ccgcacttccgatgcatcttgacggtgaaccgaaatgaaatcttcattagggcccccatg
+tgtcaaaccactcgagtcccgtctctgaagtcaagtattactgcgaaaaattcgtctact
+attagtttattatgaacttatgacgcttaaataaattaaacagtaagcctgggaaaatgt
+taaggcaggaatctttgtaacagttcataatgttgctaaagattatcagaccccgtgaag
+acttcgggctttgggcttcgtaccgtagcataatacatctatatagttagaggcttgcgt
+gttgttgtgctattccacatatagcagctctgggcgactcttcaatgaaaatgaaaaatg
+gtaacctggcgacctacttgttaagtcagtttaattcaaggggattaagtaccaagggtc
+gagtttctctgtatttattatactgtaggcaagaagcttttttggcgagatttaagactt
+aagcctatggtaaaaatttgatagtgagcgactatagtaagagatttgggtggttagtaa
+ttaaaattctcctatgctaaatcaggcgtacaatctgagggtgcacatttctcgacgcgt
+gaaccttcaccgaaagcgtgtggattatacaaatttcaaacatattggcggggcacttat
+ccataatagatttctgtttgtacgccaaactctgcctcacccctccataaattgtattgg
+ctagaggttaaattctccgtaaatagagacacatatagttttatacaattgtttgaatca
+aagcacgagaaacttttaaccgtacattgacaaatgtcttcggatggggcagagcatctc
+ttcgtgacccaaatcaatcgctgagcaataagcaagaaaacacagattatacaaagagat
+ctggatgaagatattcgtgcaatcactatcgttatgttagagagttccatgcatgaggac
+tcgttttttgaccaggagaattaagccaagaaataactgacgtatttccaaatgaattct
+acgtgtttttcctgtcacctttagccagtgttaaagatgactatggagtttcgaataggt
+tattctatagacattataacgagtggaacacccataccttcacagtgctaaaggtaggaa
+cgggtacgtcaggtagttcaagggattttaggttcttaatccaacgaagaaataacgcat
+cacccgtcattctattgttttcgtcgggattacttagtaggcagggtattctaacctacc
+tgagttacaaatctttaaaaaactggccatgaggtcatggtgataaaatctgaatcgcct
+aaattcgcgtccctaaggaaatatactagaatccgtctcagaaagtgcaaaggttgactt
+cttcccctaacacagaattctcagttttatagctatctagtggcattcctttttataaaa
+ctttacgtttgtaagggtccaactttacaaaagctcggatgtgtatgtgtaatcttccgc
+cgtgtaagacttggaacccatgtatattgacggcatggcgtggctaagcaggtattgatc
+ttcagtgtaaagcaaggtatgttctaatctaacaatgtaaagccggggattagccgccaa
+aggggtctaatgacatagagatgctctgaaatcgtaccaactataaaagcacgggatttg
+aaatatagcgacagatcttccgtattctgttagttgacatctgtgctgtctttaccgatt
+gtgatttggctttagcagtcatttagtttcgttactcattgctcgtgcgatagttccacc
+gaatatggcacattcgttctttttttccattttactgcaaaccttttcaaaagctgatcg
+ataccactgatgatggcattgattagtcgattggcaactatgtcctgcttatatctccaa
+ttgcattgaatatagtaaaaaataaaggctcgccttcccaatgggctacggagtacacga
+aaaaatcgcaactcgtttaaccaagcgccgtacctaacatataagtgattgagacaaata
+gttctccagacgtattgagatatatgtctcctataggcaagcgtttctaattgctgacca
+gaaattagaattaggttgttaatactatattcgaccattttattccacgaatgtgctatt
+ctactggtattgctccgtatgcgatatataaccaacacggaaagtcgtcgattgcaaagt
+ggctccgtagaatcatttctggtcatttaccgggagcgcgcttgaacaatggatgcggta
+tctgccatattgttattgttaaaaagacttccgcttactatcgcttcgatcatcggaaaa
+atattaatgaggattgggtcgtataagaaaatcatcttttcagttcgcagatttttgcca
+atttaaccggttatttcgtcagacttggtagtgtagttacaagcatcacgattatatcag
+ctacagaattaaactgtcctgactcgacggggcagtgtgtgagtattgcgctatatattc
+aaggtaacaggaggcatataggtcatagtacaaggataatgaggtttgctaactttaaaa
+attattgatttaacggttgattgaaaatctctgcaagatgacgctagaacacctgatgtt
+caagtttgccgataataacatataagatgaattactgtctttagaccctcatgttaatcc
+gctaacttagggcggaaacaatgttaggctatgcggagtaagtactatattatgatacca
+catagaatttaacattcatatgatgtctaatacccgttcccaaccttgcaaccgtcccga
+ttaattaagcaattacggtcatcaatgggccaatcctgtctcaaaaattatcatattcaa
+ggttcagctattttggcaatgggtgagtaccgttcttagtgatttacgaacccataatct
+aggcgacttaatatacaagatttagagttacgttttccgggtagtacatattaacgacca
+tggatcgggtgaggtgttgtattagttatctgatcttgtcagtagctcccaatgtcccag
+aatattatgtttctactagagtgttcgtatactggaatttaaatattatgtaagactaga
+caaattttatggatacattaggccatcgtagaatatgatatagttgtaacgtccctctat
+agattttcggagggcaggtatattgcttaataaagatgttcggaaatcagcggaaaggat
+ttgtaattaactgatgcgcagcgcttaaataagtttagactattaagctatatgttcgac
+agcatgtagttttttttaccagaaagtgttatactgatgacccatggaggtagctcctca
+tgataaaaatattgttacttaagcattactattatagtgttcaaactagtaccgttgcat
+actttaagaatcagacatggcgtttcttatgcagacacacttttttagctgttgacgccc
+acctcacatccatagtaggtcaatcgcataagaacaatattctggactgttttattaccc
+agaagaaagttttttctttccggttcgttaagacaataaagatcatttcattcgttctct
+taacgatgaactaaagtacttaaagtatccgcctcttgtttcgactagcgcatagtgtaa
+taattaaggcaagataagaagaacaggaacgcgcacgtcggagataactctaatagtctc
+tttattccgtttaatatagcccgtaattgcaccatgcgctacagtaacggccgccttcgc
+aaacctatttatgtaattccaagtttaggtatgcaatggttggggcaatgtgaggggttt
+tatcaagactttcgttgcttcgcggggggcgcaaagcagactttacagtagttaaccgaa
+aaccgcagggagtcgctctaagtgttaccaacccctcactactacgcgaaggtactcgat
+tattccttgaatgggctgaaacatcgtgattagcgtcttatgattcaggctgatagaaga
+aaacttattttctatattccacgtatacaatcacactcgtaactaaatagttcccagcgt
+tgtaatgtcgctataataaataaaatacaaagaaaattcgtctgggtgcataagtacagt
+tagtcgtctgtcacataaataatccgcagtcgatctcattacaggtattgttgttggtca
+accttcgcaaggtggtccaagtagcattgttgaacagtaaaactaccgtcacacaaggaa
+tatcataatagatgccatacacggttttacttgatatgtttacagtccttgagttgcaat
+cgtagtattgtttcatccggggtgtgtacgaagtaatttagacaaggtgtgtagcggtca
+ctaggtaaaatgacttaggatggatgagcatttaggtattctatgataacactaaccatc
+atgtttctaaaatcctcaggaaatttgtattattttaccaacctgtatttatagaaagtg
+cttttgacttaaagaagccgaagtgttcaaattaaggagtacctgattgaaagaatgggg
+aattgtaatctgtaactcaattacaaataagccgttctaaggattaaggctttgtgtcta
+agcaactcacgtgaattcgaaattcatactcgattaacgactttaatactcttctgcgta
+tctacagactcatttaaattacggaatatgttttcgtttttggtttccagctcgcacgta
+cgcgtttacaaataaggacacctggtacaattggctggagtacaatgttggtttttattt
+gctgattatcccgatccctgtgggcgttggcataaccgggttttcttcaagactactttc
+gtgttgcttatatacctggtaatatcggtgagtagcttagggcttaatcacaatactaac
+aagttctctatggattggacagggcggcatccgttgactgaacgatctattaatccattc
+cctgcactggataaacaagacccatttaaattgaccatagagatgttagcgtcatatttc
+tgttcgtgatagggtacatatattataaacggattatgagcagtggttttctagaaaagc
+attcatagttaggagtgtatcagatcataccactgaaccatagagcacaattctctactg
+gctatacttcattcctttttgtccgggtggggacgaaatttaaaggttctaacctagaac
+gcagagcgaattgatcaaggcgctggccaagtgaacggttctaaatgttcttaatgagaa
+ttgcgtattttgactattgacagggcatcgtaaaccgctactcgacttggtatctgtaat
+ctgtatgtagatagagtacgggcctataattcaaattcagccaccgaagattcacaatct
+tcagacgtttgaaggaaagaggtttactggtatgtggtgtcaagccccacccattctctg
+ttatatccgagcattaatgtagtttcactgtactacggtcacgccgtagagtcggcaggg
+caaatccaaaacaatttaggctgagaagtggcactataatagtttagcctaagtcccttc
+gctaataactcaacaaagatgacgcaaaagtcggcgaatagattgcgttcgcgtaagggt
+atcttgaatactgatagctctcatggtaccaagaactttcataacctctttatttaccaa
+acctgttctactagcgttagtgttttagtctgtagccgacacaaaaaccgagaatggccg
+gcgtaaccggcgcctgcaagctaacatgggatcaaaactattggcttaacgtttaatcga
+atgagactagcactgtattactctttcgtttcggcagcggatcaataaggaggtgacggc
+atcactctcttatagtagatatcacttattctcacaacggaagtaggatcttccgtcctc
+attaaatttgcaactggctcaatgtaacactgtaatgttaacaaagtatgagctgaaggt
+cagagcagacgatgtagtaaggtccctcgaagctgcttacagtatccttgaggctcaacg
+ggctatgcggaaattccagacctcgagttacattatgaaacgtgtcattccatctcatta
+aatagttcgtgccctatcgccttgtaatataaacaaccgtttttgtctattttcccaagg
+agaaggagagtagcagcttagtggcttgcctatatggccccctaagtacgtactcggcac
+gcttagaagattgggctaccccgcactatatgttcccaaagtaggtaacctagatagtgt
+cgtatgaaattcaggtcatcgatgagagtataaaaatatacaattttggcaggggttata
+cattgcgggcatgaagagtaacattggacatgaacggacattcgaaccctgtgagtttaa
+taccctatctccggatcattataaagtaaatatacgtcacttactctacgtgcgtttaga
+cagtctttgaaactaaattggttatttttctttcatctagatttgtctgtatctaactaa
+attatagttccacataaagctgattcaactgaagacataaatataaactttctaacatag
+tagcgaggaaagagctatgcctagcatcggatcatgcgtccgcgagtagttcctggtaga
+gttaaaagtttttccagaatctagaccgaacacagggtagtgaacgaaagtgcgcggtga
+acatacataataccgaacgtaaacaattccgttcgtattgttgctgtatctatatttcct
+acgtaaggctatttgatctataatatgaaaagtcacgtcgaaataaatcaggaagcgctt
+cgagtatgtacattcagatctccttagtatcatcaaattatagattttacggccacgaat
+tattggtctagatgtcccaaaaataatttgatgtcagtagcgatcgtgcttcctcggagt
+tgaggttggaagaagagtcattatgctataccaagaactctccatccagtacctagaaag
+gcaggtatgtaccgctcattaattttgcgatcttgacagatctgcatgcaaagtaacttg
+taccagatggcttttataatagaaactaagtttcccgaataacggtgtacgataacagat
+ttttaggtgtacagacgtctgactcaatgaacacacattgggacctgccccgggaggagt
+agtagataattaccttctccagcgcgggtcttttaatatcacaacataaaaatactaatt
+aatatcacacaccctcatcctcgatggagcctagcatcatacacgtttgatagacaacgc
+caattttactgtaatatgatattcgaatctagtatgtggacgctgtaccacattgtttaa
+aggagctccctttaccgacatgaacgaagcaagctttgtacaagatacgaagaactcagt
+actggtaactataagagacaatttatacataaaagtgttaagaccattatataaaaagag
+gtatgaggtctttgtaactacaataatacattcatcgaacgatggagaataacagagtta
+tttctgctgctcgagctctagttctgctaatttctcaatcttgatgccactcgtttgagt
+cttccattcgctcttaacgacgcgtacatccctctctcctactcttacctatatcctatt
+actggttaacctacatctccgggaaagacgtaggtaaagtggtccacgattgtattcact
+tataacacctagtagtactatgtgttgctgagagtgaggacacacttactctacgagttc
+aagtccatatggacattacactttttcagcatctaggtgtcatgatgtattaacagccgt
+taggggctatttgattttatcgattgtcggcgtgtgtattttcaacaactaggtgctaca
+attcgtgaataggcatgaaaattcaagattgcagttcctatcttgtataatctttccttt
+ggacgagttgtaccatttcaactaacctgcaagtggggggtcatccatatgaagatttgc
+caaatacctggagaccctgaaaagtttatccagattaataataacaaacaaacctaagcg
+aagaacgtcagctttaataaactatcactatcatagaaattcctgttaattgttcttcca
+aacgttgaatagactatcacgggtaatagattgaacacggagaacgtttatccggcttgt
+aaaatatcgtcgaatctgctgataactcaattatattcgatggagaattcatatctaccg
+cttagcttttaaaaattaagtcagattattccgccacaatgagaaggcgcgagtgcacta
+atcaaatcacttaggattattacggacgtctgcattacaatgctttggggtagggttata
+caagcatatgattctttaggtctcttgatcgggcgtttaccaccgtagcttaatgttggc
+atatccgtgatcctaatattctgttgtcagcgtgtgtataggaatgcacaacgcaaatct
+ttaagctgacctgttcatgaaagacaggagacacgaggcaccacctcaattctatgcaaa
+actctaacatagcgtggcactatgagtacgtgtaacgacaaggtctcatactcgatccta
+agataattctcgtctggaaggttttaatctttaactaagagtagaacttagtttattgac
+ttttacaattaggatacggttcgcgactctaccacagggcatcatacctggagctctgct
+atctcgtgaccaaagtggcagcacacatagggtcgggtcctgcatctactgagcaatccc
+tttaagcattcctagtttgagagccatttagatattgctgtttaaaccgattaatggttt
+ctattattataaagtgtaacgctcccattcgggacattgaaaattagcaataagacaatg
+tatgatattcggcgagtctcaacaacattatggtctaccatgggacaaggggttgatatg
+atgaatccacaaaaaatagtcaaacacccatggttcgttaagtgagggtatccaggtgtt
+ataaggacgatctagaagtattcaggtacacggtgttcagacatgctctaattgtcaggt
+tgtttataatttaacgtatcgctctctattctaaataatataaaattaaccgctcgtagg
+gatgctttccagtaaaagatacactatcattaaggttatgcaaatgtggcgatttgattt
+gaatcttagtacattcttaaacttaaatacgtattatttaaagtaaatatattatctaaa
+ccgcttttgtctatccacatttcgtcgaatcacgacctcgttaatgcgacaatttacgac
+cctctttcatctaaagcgatcatctatttcttctgattgatgtaatactgacccttactc
+cgtacatacaaatgatggtaagcaagaatgactgacgctcctgtcacctttcgtggcaat
+caactggcgctggtactgaagtagcttgaaagggatatggatgtgtatgccaggcttcat
+tttgacaatttttctgtcctgctcagtgttgtctgaagtcgtatcgtacacaataatgat
+gactctcattgtagatccaatcacgctttcctacgctaatgaaagttctagatagtgtag
+gtgttagacagaggttagcgcctacatccttacacacacagtgttgaacggcaagcataa
+tcgagtatcaatagctgtatgtatttgtttggaatatcatatttctcccgcctttgaaca
+atgatgccaaaatgtcctgccctagagttatgataaaataactgctgccctgtaacttaa
+gtttacaaaccgatattcaatcgttgtgtcctatgaaaatatttatatttgcaccaagaa
+aatcatctgtgcgatgaacaaaacacagtgatttataaatacaaagagtacatttagtta
+ccggattgcggcttgacatttattttacagaattttatcggcaaaacacttcatatgaac
+tatcgcttcacgataagtctatgatagactagcattcgtagagaacaggaagagcaatca
+ttatatatgaagtgttacagtgggtactacatatgagatcattaggtctatatccggcct
+tcctcataagaccttggaaatatcttacatcagagatatcaaaggaagtatgggcgaacc
+cagaaaaagccccaaagaatagtaattcatcggacgtaatagtctggttttaactagggg
+ttattgatatttaagctaaaagagttccctgaacactcgaaatgtataatctatcccaac
+taaaaaagtatacctctaattcagaaatgtcattgagattagactgatgtcaatacgcta
+ggaggtaagacaagtagaagtttttgatttaggaattgaaatgtaatacctccatcttaa
+gttctatattttaaagttttatgcggacttcgagtaagtgcacaaatgatggcataagtg
+cccagttacatgtttgcggccccgtatgagtaatgatctgtttatcaatctctagctact
+atcccacgaatgcactgatgccagtcatggcgcttacattagtcgacagaaatccgacga
+tacctatcacgcgtgaactgttctggttcttattcaattcgaagtgatctcagatacatt
+acggccatgcttgcccttcatgtctgctgagcagttttgttataggctgaatctcctcta
+agcgaaattgataggatttttggtggtcgatttagtctgtacctgcttattaagattcaa
+aatgacctacttcttacgccgaaatgatagggatcggctgaggaggataaatatacgctg
+gtgcctggtatttatccagaacaagttgcctgtgtatcagatgaactctaatctccgaga
+taaaaaacaggtacgtaaaataaaggccgcaaagggttacatctcaggatcgtggcgtat
+agtccaccattagttctgacttacttaatatagactgaccgagattgtagtatgtggatc
+caagcttgccatgtaaaacatgtcggttagcaaaacgtataggagcatgatcaaagaaga
+gttaattaatagtactgcactataattgtcggcggagtaccatgagctgttgcccaattc
+gatgtttattaacagcacgcataaaaaatccagacttttcaattagaattaactataaat
+ggtccgcgaaccttaaatgatcggaaggacgggatctgccgttgtatagaccccaactct
+atctaatttttataacacctctgtaatcaacaaatcttattatgccatcattatgtcatt
+cgccaagtaagtccagttcgagattctctggaccgtgcaatagtattgtcaaattatggt
+aatggaatccttcttctaacacccttagaaaagccacgagaattgacaagttgggcgtgc
+ttgtccaggagcaacataagtgccgtttctttttacgatgatagggattcttaaagcttt
+tctctattctagatcccagttgccatcatcaatatctcaattgatgctcattatatagtt
+cttatttagtatgtccagatgtcactgaagatcctgcctagaaccgatattctcgacagg
+atcatcagttcgacggggcaaacgcacctatgcacatccatcttgaccgtgaaacgaaag
+gaaagagtcagtaccgacccaatgtggaaaaaaactcctgtccacgatatgtaggcaagt
+tttactgcctttaattagtagtcgattagtgtagtttgatattatctaccttatagaatg
+taaacagtaacccggccttaatggtttggcaggattctttgtaaaagttaataatgttca
+taaactttatcagaaaacctgaagtagtccgcctttcgcctgcgtaacgttgcagattaa
+ttcgttttacggagtggcttgcgtcttgttgtccgagtacacatattgctcctctccccc
+actcttctaggaaaatcaattatgctaacctgcagaccttcttctttactatctttaatg
+catgcccagtatgttcatagggtagacttgctatctattttgtataatctacgaatgatg
+cttggggcgcgacttttaacaattaagccgttgggtataatttgagagggtgccacgata
+gtaagagatttccggcgtgagtaaggaaaatgataataggattaagcaggcgtaatagct
+caccctcctcagttctccaaccctgaaccggctaagtatgactgtgcagtattaattttg
+aatacatattgcagcccctaggatacattatagatgtctctttcttacccaaactcgccc
+gcaccaagaaagaatgtggattcgattgaggttaaattagccggaattacagacacagat
+tcttgtttacaattgtgggaagaaaaccacctcaaacgttgaaacctacattcacaaatg
+gattacgttggggatgagaatcgattccggtcaaaaatcatgcccggagcaataaccaag
+aattcacagaggattaatacacttctccatgaagataggactgcttgcactatccttatc
+tttgtgtcttccttcaagcaccaatcgtttggggacaaccacaattatgccaagaaataa
+cggaaggtgttccaaatctatgagtccgcggtttcatcgcaacgtttcactgtgggtatc
+atgactttggactttagatttgggtattctagagactgtagaaagactgcaacaacaaga
+cattcacagggcgaaacctaggaaaggggaccgcacgttgtgctagggatgtttccttag
+gaatccatacatgtaagaaagaatcaaccgtaattatagtgttttcggccccttgaatta
+cgtgcatgcctttgctaaaagacctctgggaaatagattgaatattctggacagcagcga
+atcctgattatatctcaagcgaatatatgacccgcaagaaggatttatactagaataagt
+ctaagaaagggcattgggtcacttcttccactaacacacttttatcagttttataccttg
+agagtcccatgcatttttatatatatttaactttcgttgcgtaaaactttaaatatgatc
+cgtgctctatctctaatctgaacaacggtatcacgtcgaacaaatctagtggctacgaat
+cgcgtcgctaagaacggtttcttctgctggcgttagctacgtatcttctatgctaaaaat
+gtatagccccgcattagcagcaaaaccgggagaatcaaatacacatccgatgaaatcgta
+acaaagataaaacaacgcgatttctatgtttgccaaagtgattaagttgtatcgtagggg
+tcagcgctgatgtcttttcagtttgggttttggatttaccagtcttttagtttcggtact
+atttgatcgggacattcgtccaaacatgatggctcattcgttctttttttcaattttaat
+caaaaccttgtatttacctgatacattaaactgagcatcgcatggaggtggagattccca
+tatatgtaatcatttgatatcctattccattctttttagttataaataaacgctccactg
+cacaatgggagtaggacttcaccaataattagcatctactgtaaacaagcgccgtaacga
+aatgattactgattgagaaaaataggtctcaacaacttttgacagatatgtatccgatac
+ccaagcgttgctaattgcgcaaaagtaagtagaattacggtcgtattacttgttgccaaa
+tggttattactccaatgggctattctaatccgatggatacgtaggagagagtgtacctac
+accgaaactcgtagtgggcttagtggctacgtagaagctgttcgggtcagttacagcgtg
+cgaccttgtaaaatcgatcacggtgatgaattattgttattgtttaaaagaagtcccctg
+aatagcccttagataatacgaaaatttgttatgtccagtcgctcgtatatcaaaagattc
+ggttaagttcgcagagttttgccaagtttacaggtgatttactaacacttgggagggtac
+gtacaaccatcacctggttagcagagaatgaattatacggtcatgtcgcgaagggcaagt
+gtgtgagtattgaccgagttattaaacgtaaatgcaggcatttacgtcataggacatcga
+gtttgtcctttgcgaaatgttaaatttatggttttttccgttgagtgataatagctgcaa
+catgaagatagtaaaactgaggttaaactttcaccatattaaattatatgttcaattacg
+cgatgtacaaactaatgttaatcagatttaggagcgcgcttaatatgggtccctatcccg
+actttgtacgagattttgataaaaaatagtattgtaaattcatttgatggcgtagaaccg
+ggcaaaaccttgaaaaaggacacatttaggatgctatttccctaagaaagcggaaaatcc
+tggctcaatatttataatagtaatggttaagattgtggcccaatcgctgagtacccgtct
+tacgctttttccaacacataatcgacgagaatgtatttaaatgtttgagacttacgtttt
+ccgcgtacttattattaaagtcattggagagggtgtcgtctgggtgtagttttctcatct
+gctcaggagctaaaaatgtaaatctattggttgtttctaattctgtcgtccgtgtaggct
+atttaatttttatggtacacttgaatatgtttagccataatgtagccaatactacaatat
+cagatacttgtatacgacctatagacttttgccgaccgctcgtagagtgatttagaaaga
+tgttcggatagcacagcaatcgtttgcgaatgtaagcatgcgaagcgagtatttaactgt
+tgactattttgctatatgttactctgaatgttgttttttttaccagaatgtgttataatg
+atcaaccatgcacgttcctactaatcatataaattttgttacgtaagcttttctatgata
+gtggtctaaagactacccttgcatactttaagattaagacatgcactttaggaggaactc
+acacgttttgagctgttctagcccacctataagccattcgtccgcaatcccataactaca
+atagtcggcaatcttttattacccagaactaacgtttttatttcccggtacgtatcacat
+taatcttaatttaatgcgtgagagtaacgatgaacgaaagttatttatgtttaagccgct
+tcttgagaatacagattactgttagaatgaaggcatcataactagaacaccaacgcgcac
+ctcgcacattactctaatagtagctttattcagtttaatatagacagtatttgaaccagg
+cgctaatgttaaggcccccttcgaaaaccttgttatgttattccatgtggtcggaggatt
+tgcggggcgatagcgctgggcggggatcaacaatttcgttcatgcgagcgcccccataac
+cagtaggtacagttcggaaaagaaaaccccacgcactcgctagaagtgttacaatcacat
+cacttcgtaccgaagggactactgtattccgtcttggggatgtaacagactgattacagt
+cttatgatgaagcctcattcatctaaaattagttgatttattccacggatactatcacac
+tcctatagaaagagttaccaccgtgggaagctagatataataaataaaagacatacaata
+ttagtatggctcatgatctacacttactcggatctctctttttttataaccagtagatcg
+cattacacgtattgttgttccgcatcaggccctaggggctcaaacttccatggtggataa
+ctaaaacgtccgtcactaaacgaagatattaatagatgaaatacacgggtttacttgatt
+tctgttcagtcattcacgggaaatcctaggagtctttcataacggcggtcttagtaggaa
+tgtagtcaagctctgtagaggtctcgacggaattggtatttcctggcatcacaatttacc
+tagtattggagatcacttaaaataatgttgagataataatcaggatatttctagtatgtg
+acaaacctctatttagtgattgtgattttcaattaaacaagacgtaggggtcaaattaac
+gactacatgttggaaagaaggccgaattgtaatatctaactcatgtactaagaagaagtg
+ctttcgtttaaggctttctgtctaacattctaacgtcaattcctatgtaatactactgta
+accaagttattactcggctgcgtagataaagtctcatgtaaatgacggtttatctgttac
+ttttgggtttcaacctagctaggacgccggtactaattacgacacctgcgtatagtgcag
+ggtgttcaatgtgcctttttatgtccggattataaccatccctctcccacttggaatatc
+accgggttcttaatgacttagttcgtcttccttattttccgggtaagatcgctgtggacc
+ggacccattttgatctagtctaaaaaggtatatagcgtttcgtctggcccgcttacgttc
+actgaaacttagattaatcaatgcactgcactggattaacaagaacatgttatagtgtac
+tgacacatgttagactaagaggtctgttcgggttagccgacttatatgtttaaccgattt
+tgacaactgggttgagagataacaatgaagagtgaggactgtagaagatcttaaaactgt
+accatagtgctcaattcgctaatggcttgaattatttaattgttctaaccctggcgtcga
+atttttttggttcgaaaatacttagcacagcgtattgttcaacgagatgcacaactgtac
+cgttagaaagcggcttaatgacaaggcagtattgtgactattgacagggaatcctaaaaa
+gctactcgaattggtatatggaagaggtatgtactgagaggtcgcgcctattagtcaaat
+tctgccaaagaagagtcaaaagcttaactagtttgatggtatgaggtttaatgctaggtg
+gtctataccaccaaaaagtatatgggatatcccagaatttatcgactttcaatcgtctac
+cgtcacgacgtacactaggcagccctaatccaaaacttttgaggatgagtactgccacta
+ttatactgtaccatttgtaacttacattttatatcttcaaagaggtagatattgtcggcc
+attactgtcacttacactaagggtagcttgattactgatacctctcatggtaaaaagtaa
+tttaagaacctatttttttacataacctctgctactaccgttagtgttttagtcggttca
+agtcacaaaatccctgtagcgcacccctataagcagaaggaaaccttaatgcggataaaa
+acttttgccggaaccgttaatcctatgagaataccactcttggaatcggtcctttaggct
+gaggatatagaacgaggggaacgcatcaatctaggttaggtgagagaactttgtatcaaa
+acgcaagtaccatatgccgtcctcagtaaattgccaaatgcagaaatcttacactctttt
+cttaactaagtatgagagcaacctcactcctgaacagcttgttacctaacgagaagaggc
+tttaagtagcctggagcctcaaccggatatccggatttgactctcatccacttacatgat
+gattacggtcattacatctcatgattttctgagtgccctatagactgggaatttaatcta
+ccctgtttctatttgttaacaaggagaaccactggtcaagatgacgcgcttccatttatg
+ccaccataagtaagttctcggaacccttacatgattggcctaccaacctatatatgtgac
+caatgtacggtacatagagtgtggcctatcatattcaggtcatcgagctcagtatttaaa
+gattatatggtcgctgggggtattcagtgcgcgatggaagactaacattggaaatcaacg
+gaattgacaacacgctcactttaataacctatctcaggataagtttaatgtaattagacg
+gaactttctctaactccgtgtactaactctttgaaaataatgtgggtatttttatttcat
+ctagatttgtctgtatcgaaagaaagtattggtccaaataatcctcagtaaaatcaagtc
+ataaatataaaatttagatcttaggacagaggaaagtgctttcccgagcataggatctgg
+cctacgccagtagttcatgcttgtgttaaaagttgttactgtttatagtccgtactcagg
+gtagtgttcgatactcagcggggaactgacatattacactaaggaatcaaggcccttcgt
+atgggtcatgtttatatatttaattacttacgctatttgatcgagaatagctatagtaac
+gtcgtaagaatgcaggatgcgattcgagtttgtaaattcacagatactgtgtatcatatt
+attatagatgttaaggcatagaattattggtattgatgtacaaaaaattatgggtgggca
+gtaccgataggcattacgagcagtgcagcttggaagaactggatgtatcctataactagt
+aagagccttaaaggtactacatacccagggatgttaccatcattaatttggccatcttca
+atcttcgcaatgcatactttcttctacaagatgccttttagaagacaaaataagtgtcaa
+caataacgctgtaacttaactctgttgtacgtggaatcaagtctcactaaagcaactaac
+attccgacatgcaaacgcaggactactagattattaaattcgccagcccgcctcgtttaa
+tataacatcataaaaattctaagtaatatctcacacactaatccgccatcgtccatagca
+tcagtcacctgtcttacacaaacacatgtttaatcgatgttgttatgccaagctagtttc
+gcgaccatgtaactaattgtggaaagctgctaccttgaacgacatcaaccatcctacctt
+tgtacaacagaccaacatctctgtactggtaaatagatctgaaaagttataaatataact
+gttttcacattgatagaaaaacagctatgtgctatttgtatatactataataaattaagc
+gaaacatggagattaaaacagtgttttctcatcctccacctcttgttctgctaatttata
+attcttgatgccactcgtgtgagtcgtccattcgatcgtaaagaacccgacataaataga
+tacgacgctgaacgagatcctatttctcctgaaaattattagcacggtaactcctaggga
+tagtggtactagttggtatgaacgtataaaaacttgtactactttctcgggatgtgaggg
+agcaaactattactcgaccagtgcaacgcattatcgacagtaaaagttttcagctgatac
+ctgtctggatggattatatgcaggtaggcgagagtggattgtagcgatgctcggcggggg
+tattttaaaaatctaggtgataaaagtcctgtttagccaggaaaagtcatcattgcactg
+catatcgtcgattagctgtcatttcgtccactggtaccagttcaacgtacatcaaagtcc
+gggcgcatccatatcaagttttgcaatagtactccagaccatgaaatggttatccagatt
+aataataacttaatatactttcactacatactcagcgggtattaaatttcactttatgtc
+aaaggactcttatgtggtcttcaaaaaggtctagagtctatcacgcctaattgtgtgaaa
+accgagtaacttgatcagccttgtaaaatatagtagaatatgatgttaaatcatttatat
+tccagggagattgaatagcttacgattagctggtataatttaactcacatgattaagcaa
+atatctgtaggaccgagggaaagaataaaataaagtaccatgagttcggaacgctgcatt
+acatggcgttgggctagcctgatacaagaagatgagtatggagctctcttcatcgggacg
+tgacaaccctagcgtaatcttggcagatcccggagcagatgattatcgtctaacactgtc
+tttaccaatgcacaacgcatagatttaacctgaactgttctggattcactcctgactaca
+gcctacaactcatttctatgcataactcttaaagacagtcgcaatatcagtacctctata
+cacatcggatcagactagatcataagataagtctcctctggatccttgtattctgttaag
+tacactacaaatttgtttagtgtctgggacaattacgataagggtcgcgactagaccaca
+gggcatatgacctccaccgctcctagcgagtctccaatctgcaagcactcatacgctagg
+ggcatgaatcgactgtcaatgcactgtaagatttacgagggtgagacccatttagatatg
+cctcgtttaaccgttttaggcttgataggatgagtttgtcgatccatcaaattcccgaca
+ttcatattgtccaataagtatatctagcttattcggactcgctaaactaaattatggtat
+aaatgccgtcaaccggtgcatttgttcaatcaacaaattatagtcaatctcccatggggc
+cttatggcagcgtatacagctggtataacgaccatatacaactatgaacggactagctgt
+gaactaagcagattattggatccttgtgtataattttaagtttcgatctatatgctatag
+tatagaaaatgttccgatcgtacgcttcctttacagttaaacagtctatatcatgaagct
+tatccaaagctggacatttgatggcaatcttacttaattatgaaacttaattacctatta
+ttgaaagtatttatatgatcgaataagatttgctctataaacaggtcgtccattcacgac
+ctagtgattgcgtaaattgaccaacctaggtaatctaaagcctgcatctatttcttatca
+ttcatgttatactgacccgttctcagtacttaaaaatgatcgtaagcaagaatcactcac
+gctcatgtcacatttagtcgaaataaactgccgatgggaaggaagttccgtcattgcgat
+atcgatgtctatcccacgcgtcattttcaaattggttatctacggataactgtgcgatga
+actactataggtcaaaattatcttcaatctcattctagatcatataaagatgtccttcgc
+gattgatacgtctacagtgtgttggtgttacacagagggtagcgactacttacttactaa
+ctctctcttgatccgcaagcataagccaggttaaagtgctctatctttttctgtggatta
+taatagttataccgccttgcatctaggtgcccattaggtaatgccctagtgttttcataa
+atttactcctgccatctaacgttactttaatttcccagattcaataggtctctcatttga
+aaattgttatatgtcaacaaagaatataatagctgagtggaacaatacactgtgagggag
+taatacatactctaaattttctttacggtttgcgcctgcacagttttttttatctatgtg
+atccgcataaaaagtaatttcaacgttccattcaagttaagtcttggtgacactagcatt
+aggagagatcaccaagaccattatttatttagctagggtttaagtcggttagaaatatca
+gataatgaggtctttatccggccttacgcagtagaaattggaaatttcgtaaagcactga
+gttcaatggaagtatggccgaacccacataatgcacaaatcaagtcgatttcttccgtcc
+ttttagtctcctgggaactacgggttattcatagttaagctaaatcagttaacggaacta
+gacaaatgtataatagttcccaaatatatatctataaatcttatgcagttagggaatgca
+gatttgaatcatggcaatacgctagctcggaactcaactacaagtgttggatgtacgaat
+tcaaaggtattacatccttatgatgttcttttttggatacttttatgacgacttccacga
+agtgaaattatgttcgaatatctgaacagttacttggttgagcccaaggatgacgaatgt
+tctgtttataattctcgtcataatataaatacaagcatatgaggccagtcatggagcttt
+catttggactaacatttccgtagagtcatatcacgcctgtaatctgatccgtctttttct
+attcgaagtgttatcagatacatgacgcccttgcgtgacattcatggctcctgacatcgg
+gtcttttaggctgaatctaatctaacccaatttgtttggattgtgggtcctccattttgt
+ctgttaatgcttattaagattaaaaatgtactacgtatttagacctaatgattgcgatac
+gctgtggaccattaatataagctgcgccaggggatttttccagatcatctggcctgtgta
+tatgttcaaatctaatagccgagagaaattactccgacggaaaataaaggcagataagcg
+tttcagagcaccatcgtggcgtttagtcaacctttagttcggaatttattaatatacaat
+ctcactctttggacgagctccttaaaagatgcccttgtatatcatgtcccgtacctaaaa
+gtataccagcatcatcaaagaacagttaaggaatacgactgctctataattgtccgagga
+gtaccttctcatctgccaatagtcgttgggttggaaaacaacgcattaatatgccacact
+tgtcaattagaagtttctataaaggggacgagtaactgatttgagacctagcacggcaga
+ggacgttcgtgtgacaacatctctttataagtttgagataaaatcgctaatctacaatga
+ttatttgccaatcattatcgaatgcgcaaagtatctcctgttcgtgattctagcctaagg
+ccattactatggtcaaattatgctaatcgaagcagtcttctaacacccttagaaaagcaa
+acactattgaatactgccgccgcattcgccagcaccaacataactgcacgtgcttttttc
+catgattggcattatgaaagatttgatctatgattcttaccagttgcaatattcaattta
+gcatgtgttcctaattattgtgttattatggtctatctcatcatgtaaatgaagatcatg
+acgtcaacacagattctagtcaggatcatcagttcctcggggaaatcgcacctaggaaca
+gccttatgcaaccgctaaacaaagcaatgaggatgtaccgacaaaagctcgatttaaaag
+cctcgaaacgagatgtacgaatcgtttactgccttttatgaggagtcgagtactgttggt
+tcatatttgctacatgattgtatgtaataacgatcccgccctttatcggttcgatccttt
+atggcgataagttatgaatcgtcagtatctttagatcaaaaactcaactagtacccagtt
+ccccggaggaacggtcatgattaatgcgttttacggtctcccgtccctcttcttgtcaga
+ggaatcagtttcatccgatcccactcgatgattggtatagctatttgccgaaaagccaca
+acgtattcggtactatcttgtttgattcccctgtatcttaattcgcgacacttgatatct
+tttgtgtttaatcgacgaatcatcctgggggcgacacttgttacaattatccagttgcgt
+ttaatggctgtgggtcacaagattgttagacaggtcccgcgtgtcgtaggaaattgataa
+ttggagtttgcaggacgaatagctcacccgcctaagtgatccaaccctcatcaggataac
+tatcactgggcagtattatttttgatttcatatgccaccccctaggagactgtagtcatg
+tatctttcttacccaatctagcccgaaacaagaaagaatgtcgattccagtcacctttta
+ttagaccgatttacacacaaagtgtcttggtttaaaggctggcatgaatacatactcaaa
+agttgaaaacgacttgctctattcgattaccttcgcgatctcaatcgattacgctaaatt
+ttaatgcccgctgaaatatccaacatttaaaacaggattaattctctgatccatgaactt
+aggactcattgcacgtgacttatctttctctcttaattcatgctccaatacggtgggcta
+aaccacttttatcacatgaatgtacgcaacgtgttaataagctatgagtacgcgggggca
+gcgaaacgggtcaatctgggtatcttctattgggacggtacatttcggttttatagacta
+tgtagttacacggcatcaacatgtaattaaaacggcgtaacctaggaaagccgaacgcac
+cttgggattgccatgtgtccggaggattacatacatctaagaaacattctaaactatgta
+tagtcgtttacgacccttgtagtacgtgcatcccttggcgaaaagtactctgggtattag
+agtgtatattatcgacagcaccgaatcctcattttatagcttgacaatttatgacccgaa
+agaaccttttataagtctataagtatatctaacgcaattgcggcactgagtccactaact
+atctttgagcagtgttatacagtgagacgccatggaaggggtttatatattttactgtcg
+ttccctaaaaagttaattatcagacctgcgcgatctcgtagatgaacaacgcgatctagt
+cgaaaaatgcttgtggctaccattccagtcgagatcaaccgtttctgcggatcgcgttac
+attccttgcttatttgcgataaatcgatacaaccccattaccagaaaaacccggagaatc
+aattactctgcagatcttatactaaaaaagagattacaacccctgttctatgtgtcccaa
+agtgagtaacgtggagcgttggggtaagagcggagcgattttaactttcgcttttccatt
+ttccagtattgtactttacgttatatttgagcggcacattcgtcaaaacatgatccatat
+ggactgaggtgtttaaatgttaatcaaataattgtattttcagctgactttaaaatctgc
+agccattggaggtggagattccaatagatgtaagcaggtgatatcatatgcaattcttgt
+gacttattaagataccagacacggcacaatcgcagtagcacgtaaacaataatgacaatc
+gacggttaaattccgaacgtaagatatgtttacggatgcactaaaataggtagcaacaac
+gtttctctgagatgtataagttaccaaacactggagaattccgctaaactaaggacaatt
+tccgtcgtattaattgttgacaaatggttagtaatacattcgcagtggataatccgttgc
+atacctagcactgagtgtaaataaaaccaatcgactactggcatttcgggctaacgacta
+gatgttagcctatgtgaaagcctcacacatgcttattgccttcacggtgagcaatgtttc
+ttattcgttattagaagtcacctgtagagacagtagagatgacctaaatttggtttgtcc
+agtcccgaggtgatctaatgattaggttaacttagaacagtggtcaattggttaaagctg
+atttacgaacacttccgaggggtcgtaaaacattaaactggtgagaacagtatgatgtat
+tcggtcatctagacaaccccatcgctgggagtttggacagtgttatgattcgtaaatcca
+ccatgtgtccgaattcgaaatcctgttgctccggggagatagggttaatttaggcttttt
+tacggtgtggcatattagctcaaacatcaacattcttaaaatcagcgtaaacggtcacca
+gttgatatttgttctgctaggaagcgatgtacaaaataagcttaataagatttaggtccg
+accttaatttcggtccatagcacctctttctaagtgttttgcttaaataattgtattgtt
+attgattttctgcgagttgaacacggaaaataagtcaaaaaggacacttttaggttcata
+tgtaccgatgaatgcgcaatagaatcgagaaatttttagattagtaatcgtgatgattgt
+ggccaaatcccgcactaaacggctttcgctgtttccaaaaaattttagtccactaggtat
+ttaaatgttggacactgaacgtggaagccgtcgtattatgaaactaatggcagaggggct
+cctctgcgtgtactttgagcagatgctatcgtcagaaaaaggtaaatcttttggttcttt
+ataattctggcgtccgtgtagcctagtgaatgtgtttggttcaagtgaatttgtttagcc
+agaatggaccaattacgtcattagctgttacgtctatacgaaatatagactgtggacgac
+ccatcgtagagtcatgtagttacatgtgaccttagaacaccaatcgtgtgcgattgtaag
+caggacaacacagtattgtactggtcaattggttcatagatctgactatgaatcttcgtt
+tttgtacaacaatctcggtgaagcttcaaaaagcctccttcctaataatcagttaatttt
+tcgtaaggttcctgttcgaggttagtcgtataaagacgaaacggccttaatgtaacatta
+actattccactgtaggtggatctaacaaggttggacatgtgctaccaataagataagaat
+ttcgtccgcaatacaatatctacttttgtagcctatcttggattaacaacaacttacgtt
+ggtatttcaccggacgtatcaaatgattctgattttaatgactgagagtaaacatcaacg
+aatcttatgtatctttaagccgctgcttgacaagtcacattactgttagaatgaacgctt
+cattactacaaaacctaccaccaactcccacattaatattatactagatgtttgaagttt
+atttgacaaaggttttcaaaaagcacagaatcgttacgaacacgtacattaaattgttag
+ggtattaattgtggtcggtgcatttccggccccatagcgctccgcggggagaaactatgg
+ccttcatgacagcccccccataacatctaggtaatggtcggataactataaacaaccctc
+tccagagaactgtgaaaataaaatctcttagtacacaagcgtatactggtttaagtcttg
+cccatcttaaagactcttttcactattttcttgatgcctcattcttctaatattaggtga
+ttttttaatccgagaatataaaaagacgatagaaagtgttaaaacacggcgtagcgacat
+attttaaagaaatgaaatactttttgactatccctcatgatctaaacttacgcggagcta
+tctttttgtataacatgtacagagaattaatccgatgcttcttccgattaaggacatagc
+gccgaaaacgtcatggcggcttatcgatatcgtaacgcactataccaagtgattaagtga
+tcaatgaatacgggtttcgggatttctgttaagtcatgcacggcaaatacttggagtctt
+gaataacgccgcgcgtagtacgaaggttctcaagctcgcgtgacgtatagaccgtattgc
+tatttcctgccttctcaattgtccgaggattgctgataacttaaaataaggttgagtttt
+taataacgatttgtcgagtttgggaaaatcctcgtttgtgtgtttgtcattttcaagtta
+tcaagaactacgggtataatttacgacgtaatgttggtttgatgcccgattgcgaatatc
+gtacgaatggtatttgtacaactgctttcctttatcgattgctcgagaacattataaagt
+ctattactatggattaagactgtatacaagtgtttaagcggagcccgtgataatctataa
+ggttttggtacctttatctgttacttttgccttgaaacatacatacgtacacgggaatat
+ttacctaaacgccgtatagtccagcctcgtatttgggccgtgttttgtcagcattttaaa
+ctgaaagcgcccacttgcattataacccggtgcggaatctcttagtgactcgtcaggagt
+ttacgcctttgagacctctcgacaggacccattttgatctagtcgttataggtagagtgc
+ctttcctatcgcaccattaccttctagcaaacttagagtattcaatgaaatcatatcctg
+tttatactaaatgttataggctaatgacacagctgacactaagaggtctcttcgggttac
+ccgaatgagttgtttatacgatgttgacaactcgggggagtcatttcaatgaagactgag
+gactcttgatcagattaaaacgcttaatgactgataatttagattatgccgtgtattatt
+taagtgggcgaaccctcccctagaatgggtttcctgagaaaagtcttagaacacagtatt
+ctgaatccagatgcaaatcgctaacgttagtaagcggctgtagctcttggcagtttggtc
+aatagtcaatcgcaatccgtttaaccgtctactattcctagagcgaagagctatgttctg
+acacgtccccaatattaggcaaaggctccaaaagaacagtcaattgattaactacgggct
+tggtttctccgtgaatccttgcgccgctataccacataaaaggatagcggtgataccaca
+agtttgcgacgttaaagcgtcgaccctcaacaagtacactagcaaccccttagcaattaa
+ttttgtccatcactactgccaagagttgactggaccagttggaaatgacatttgatatat
+taatagagctacatattgtaccactttactgtcacttacactaaccctagcgtgattact
+catacatatattcgtaaattctaagttatgatactagttttgtaaatttaatcggcgaag
+acacgttctcttgtacgagcttcaactaaatatttcactgtagccaaccactttaaccag
+aaggataccttaatgccgatataatattgtccaggaaacgttaatactttcacaagacaa
+agcttggaagaggtactttacgatcacctgatagatcgaccggaacgattctatataggt
+ttggtctgagaaatttgtagctaaaaccatgttccataggaactcctctgtaatgggcaa
+aatgcagatagcgttcaatcgttgcttaactatctatcacagcatcctaactcctcaaca
+gcttctttcctaaagacatcagcaggtaagttgacggcacccgataacccagagcacgat
+tggaatctaatactctgtatggatcattacgctaagtaaatataatgattttctgactca
+aagttacactgcgaattttatattaactggttctatttgttaaataccacaacctctcgt
+caacaggtcgcgatgcaagtgatccaaaaatatctaacttataccaaccattacttctgg
+cgcagaaaaacatagatatctgaacaatcgaccgttaagactgtctcgccgatcttagga
+acctaatactgctcagtagttattgtttatttgggccatccccggattatgtcagccatg
+gaacactaaaagtcctaatctaacctatggacaaaaagctcacttttataaaattgctca
+ccttatgttgattgttatttgtccgaaatgtctataactcagtgtactatctattggaaa
+attatggccggagttttattgaatatacttttgtatgttgagaaagaatgttgtcgtaat
+aattatcagctggaaaatcatctaatatatattatattgagatattacgacagacctaag
+tgctttcccgtcatgagcagatggactaacactcttggtaatccttctcgttttagttgg
+taatgtttagtctaagtaatatcccgactcttacttactcagagcggaaatgacttttta
+aactaacgtttaaaggcacttagtatgcgtcagggttatttttttaattacgtacccttg
+tgcagagagtttagctattcgatcctacttagtatgaaccatgagagtacaggttggtaa
+ttcacagagaaggtcgagaagattatttttgatgtttaccaatactatgaggcgtattca
+tcgaaataattttatggctgcgcacttcacatacgcaggaagaccactgcagcttgctag
+atctggatgtatcattgtacttctaagagcctgaaaggtaatacattcccagcgagcgta
+acagattgtatggggacatattcaatcttagcaatgcattcgttcttcgaaatcaggcat
+ttttgatgtcataagttctgtcaactataaccctggaactttaatctgttgttcgtcgaa
+tcaaggatcaagaaagcttctaaaaggcccaaagcaaaacccaccactacttcagtttta
+aattagaatcacaccctagggtattagataataattaaatgtcttaggaagagatatcaa
+aagatgcagacatcctcaagtgaataagtctccggtctttcacaaacacatggttaagcg
+atgtggttttgactagagacgttcgccaccatcgtaatatttctggttacctgcgaacgt
+gaaccaaatcttacttcatacattgcttaaacagtacaacttatctcttatcctatagag
+atctcaaaagtttgtatttttactggtttcaaattgagagaaaaactgcgttctccgatt
+tctatattattgtttaaatgatgccaaacatccagtttaaaacacggtgtgatcagccga
+ctcagattcgtatcctatgttagaatgagtcatcaaactacggtcacgcgtacattacag
+agtaaactacacgaatgaaagagataagaagatgaaagagttaataggtctcctgttaat
+tatgagaaccctaactactacggattggcctactagtgggttggaacggatataaaattc
+gactaagttcgcggcatgtcaggctcctaaatatgaagagaactcggcatcgaattatcc
+acagtaatagttggaacatgattcctctatgcatggtgtatatccacgtacgccagtgtg
+cagtgtagccatgcgaccacgggcgttgtgaatattcttcctcagaaaaggactgttgag
+caaggaattggattctgtgaacggaatatagtcgagtagatggaatttcctacactgcga
+aaaggtcatagtaaatcaaacgccgcgcgcagacatatcttcttggcaattagtactcca
+ctaaatcaattggttataaacttttagaatatctttatataagttcactacttacgctgc
+gggtagtatatttaaagtgatgtcttaggaatcttatggcggcggaataaacggcttgac
+tatagataccctaattctggcataaccctgtaacgtgtgaagcatgctttaatagacgac
+tagatcagcttatagaatggatatgactgccacattgaagagattaacattagcgggtat
+aatgttacgaacttgtttaacaaaatagctctaccacacacgcatagtataatataaagg
+tcctggagttcgctacgagcctggaattgcagttcccctaccctgagtaaacaagatcag
+tatggacctatcttctgacccacgtgtaaaaactaccgttagcggccctgagaacggtga
+agttgattatcggctaacactcgctttaccaaggaacaaacaattgatggaacaggtaag
+cggctggattctatcctgaatacagcataataatatttgctttcaatatatagttatgac
+actcccaatatcactaactctttacaaatcggatatgaagagtgaattagagatggagcc
+gatcgttccttgtattctggtaagtactcgactaatgtgtgtagtctaggggtaaaggtc
+cttaaccgtcgagtctagaactcacgcattatgaaatcctccgagcatagagactctaaa
+ttcgccaagcaataagtcccgacgcgaaggatgagaagctcattgaactgtaacatttac
+gtcgggctcaccatgttacatatgcagcgggtaaaagtttttgcctggagtggttgagtt
+tcgcgatacataaaaggccccactttcatatggtcaaatatctatatcgtgctttggacg
+actcgataaactaaagtagcctagtaatgccctaaaccgctgcatttgtgcaataaaaaa
+tttagagtatatataacttccggacgtatggctgccttgaatcctcggatatcgtcctta
+tacaacgatgaacggtatagctcggaactatgcagattaggcgatccttgggttgaattt
+ttagtttccatagatatgagttagttttgatatggttaccatacgtccctgcattgaaac
+ttaatctgtatattgattgatccttagcaatagcggcacatttctgggcaatatgactta
+attaggttacggtttttactatgatggatacgttttatatgatagaataacagttgctat
+ttaaacaggtactacattcaactaatactgtttcactattgtgtccaacatagggaatat
+attgcctgaatagatgtattatcaggcatcttttacgctccaggtagaactaattaaaaa
+tgatccttagaaactttcaagcaacataagctaaaagttacgccaattataagccacatc
+ggtaggatcttcaggcattcccatatccttctctatcaatcccgtctgttgctaattggt
+tatctaagcatatcgcggcgagcatctacgataggtataaagttgctgctatctaattcg
+tcataatatatacatggaattacagattcatacgtcttcagtctcgtggtgtttctaaga
+gcggacccaagaattacgtaatatctctctcgtgttacccaagaagttgacacgtgattg
+tcagctatctttttctggcgatgttaatagttataaacaattgcatatagctgcaaatta
+gctaatcaaatactcgtttcttaaatgttatcagcaaagctttaggttctgtaatttcac
+tgtgtaaagagggcgctaagttcaaaattggtttttggcaacaaacaatttaatagcgca
+gtgcaaaaataatatctcagggtgtaattatttctctaattggtctttacggttggacca
+ggcaatgggttttttatctatgtgataccaattaaaagtaatttcaaagtgacattaaac
+ttaagtattgctgtcaagaccattacgacacttcaccaacacatttatgtattgtgctac
+gcggtatggcccgtagtaatttctgatattgaccgcgttatcagcaagtacgctgtacaa
+atgccaaatttagtaaagctctgtgtgcattccaaggtgcccacatcacacattatcaac
+atatcatgtcgttgtattacgtccttttactagcctgggaaataccggtgattcagagtg
+aacataaatctctgaaagctactagacaaagctagtatagttaaaatatatatttctttt
+aatattaggatctttgcgattgcacatttcaagcatcgcattaacctacctccgtactct
+tctacaacggttgcatgtacgatttctatgcgatgaaatacttatgttcttagtttgggg
+ttactttgttcacctagtcctcgaacgcaaattagcttcgaatatctgaaaagtgtatgc
+gggcaccaaaacgatctcgattcttaggtttataattatagtcagaagataaatacatgc
+atatctggacactcttccacatgtcatgtcgactaactttgaactacagtcatatataga
+ctgttatctgatccgtatgtgtctattactactcttatctgagaaaggacccaatggagt
+cacagtaagcgatcatgtcatcggggctttttccctgattataagattacactattgctg
+tgcttggggcctcctactttttctatcttaatcattttgtacattaaaaagctaagaagt
+aggtacaacttatctttcccatacgagctggaccattaatttaacagccgcaaggcgagt
+tttaatgttaatctggaagggctttatgttctaagcttttagcactgagaaattaatccg
+taggaaattaatcccacataacccggtaagagaaccttacgccccgttactaataatgtt
+ctgcgcaatgtaggaagtgacaagctcactcttgcgacgagctccttaatacaggccctg
+cgttatattcgaccgtacctataactagaccaccatcttaaatgtacagttatggttttc
+gacgcatagagtatgggaccacctcgaaatgctcagctgcaaattgtactgggggtggtt
+atcaaacatttaatatgaatctatggtaaagtactagtttatagatagccgaacactaaa
+ggtttgcagaccttcctcccctgaggaacttcgtgtcacaaattagattgagaaggtggt
+gataaaatcgcgtatctacaatgatttggtgcaaatatttatcgattgcccaatcgttct
+actcgtactctttatagcctaacgccttttcttggcgctaattagcctaatccaagaagg
+agtctaacaaaattacttaaccatactcttgtctattcggcccacgcatgcgcaagctca
+aaaagttctcaacgggcgtttttacttgagtcccaggaggtaacattggatctatgagtc
+ttaacagtggaaatatgatttttagattgtgttcagatttattgtcttattttggtctat
+ctcatcagctatagctacataatgacgtcttaactgtttcgactaaccttcagatctgac
+taccccaaatacaacatagcaaaagaatgatgctaacgcttaactatcctttcacgatct
+taacaaaaaagctccatttaaaagaatcgaaaacagatctaccattcgtggaatcaattt
+ttggacgagtactggtcgggtcgtgcttatttgctacaggattgtttcgtataacgttca
+agcactttagcggttccatccttgatggcgttaactgatgatgcgtaagtttatggtgat
+ctaaaactctactacgaaccaggtcccagcacgaaacgtcatctttaatgagtttttagg
+tctccaggcactaggctgcgaagtggaatatgtgtcatcagagacaaatagatgattcct
+atagctttttgcagttaagccactaagtaggcggttctatagggtttcattcaaatcgat
+cgtaattcccgactctgcatagcgtgggtcttgtatagaccattcttcaggcccgccaca
+atggtttcaagtttcaacttccgtttattggctgtccctcaatagagtcgttctcagggc
+acgactctcgttcgttattcataagtccagtttgatccacgaatacagaacacgcatatc
+tgataataaaagcttaacgataactttcacgcgcatggtttatttttgatttattaggca
+accaaataccagaatgtagtcagcgatatgtagtaaaatttagacaaacataaaacaaag
+tatcgccattacagtctcctgttaggagaacctttttatcaatatgtgtaggcgtgtatt
+ggcgcccttgatttaataataattacggctaaacgtattgatattttccaggaactgccc
+catctcatgagatgaccctaaattttattcacacctcatttttaattcttttatatcacg
+attatttatctgagcaagcatctttgcaagcattcatagtgacggtgctgtctctatgaa
+tgcatgctaatatacggtgcgctaaacatattggttcaattcaatgtaagctacctcgga
+atttgcttgcactaagacggggaagccaaaacggtaaatcgccgtatatgctagtgccaa
+gggacttgtccgttggagtcactatggagttacaagcattataaatctaaggaaatcgca
+gtatcagtccttaccccaaagatacttcgcattccctggggtacggaccatgaaatactt
+ctttcatacatgataaacgatggagactcggttaccaccctggtagttactccatcaatt
+ggagttaactaagatcgctattacaggctttattagccaatcatcacaagcctcttttta
+gagattcacaagttagcaaaccaaagttcctttgataagtctttaacgagatctatccca
+attccggctaggagtaaaatttatatatttgagatcggggttaaagtcacacgcaatgca
+aggggtttttatatggtaatgtccttccctaattaggtaattttcagacctccgagagag
+agtagatcaacaacgcgttatactcctaaaatgcttgtcgataacatgacactacagatc
+atccctggatgagcatcgactttcattacttgattagttcagttaattcgtttcaaacca
+ttttcaacaaaatcccccagtagatatgtatatgcacatcttagactaaataacagtttt
+cataccctgggatttgtgtcactatctcaggaacgtcgagacgtcccctatcaccgcagc
+gagggtaactggccctgttccattgtaatcgatgggacgggacgttatattgcagaccca
+aagtagtaataaattcagccatatggacggagggggggaattgttaagaatataattcga
+ttttcagctgaatgtaaaagctccagccattcctcctccacttgacattagttcgaagaa
+ggtctgagaattggaattgcttgtgacgttttttgtttccagacaaggaaatagcccagt
+accaagtataatattatgacaatagaagcttaaattcacaacgtaacatatctgttagca
+tgctctaatagaccgagaaaataagtgtctatgtgtgcgagaactgtcaattcacggcag
+tagtcacctaatctaacgtctagttcccgactatgaagtcttcacaaatggttagtaata
+atttcccagtggagtagaagtggcataacgtgcactctctgttaataatacctttagact
+actcccatttcgccagaacgtcttgatggtaccctatgggaaacactcacacatgcttat
+tgcctgcaacctcagcaatgtgtcgtatgcggtatttctacgaacagctagtgaaaggac
+tgatgacctaattttggtttctcaagtccagacgtgatattttgatgaccgtatctgaca
+tctctgggcaattcggttaacctctggtacgaaatagtccgtcgcgtaggtaaaaatgat
+aatgctgtcatcactatcatgttttagctaagctacactaccccatcgctcgcacgtggc
+aaagtgtgaggattccgatatcatccatgtgtacgaattcctaatactcttgctcagggc
+acttagggttattgtagcctgtgttaccgtctcgcatattagatcattaatcaacagtct
+tataatcaccgtaatcggtaaacagttgttatttgttctgataggtagacagctaataaa
+gatgctgttgaacagttacgtcccacctttattgccctacagtgaaactagttcttactc
+tgttgctgtaatatgtctagggttattgatttgctgccacttcaaaacggaaattaagtc
+attaacgaaaatggttccttcataggtaaagatcaatccccaattgaagccagaaatttt
+gagatgtcgattcctgatcattcgccaaatttacagctcgtaaacgagttccatgtgtaa
+aaaaatgttgagtccactagcttgtttattctggctcaaggtacgtggaacacgtagtat
+tttgatactaatgccagacccgctacgatccctgtactgtgagcagagccgatcctcaga
+aatagctaaatcttgtgcttcgttagaagtctcgactacgtgtagcctagtgtttgtgtt
+gcgttatagtctatttgtggacacagtatggtcaaatgacgtcttttgatctgacggcgt
+taacaaagatactctgggcaacacacatacttctctcatgttgtttcttcggacctttca
+taacctttcctggcacatggttagctgcacatcacaggattgtaagggtctagtggttca
+gtgagcggaatatcattcgtcggtggtgttaatctatctcggtgtagcttataaatgcat
+ccgtaagaatattatgtttatttgtcggtacgttcatggtagtggtgtcgccgatttaga
+cgtaaaggcatgtatggatcttgatctatgcaaaggtaggtccatctatatacgttgcac
+agcggatacaaataagataagaatttactaacatttaaattttcttattgtcgagcatag
+attggaggaaaaacttatttacttggtatttaaacggaagtttctaatgtttatgattgg
+atgcacggacagtttactgcttactttcttaggtttcttgaacaacaggatgcactagta
+acatgtctcgttcatgcttccattaagttcttcttaaacttacacaaactacctaattta
+gagttgacgagatggttgaacgtgttgtgacaaacgtttgcaaaatgcacagtatcgtta
+ccaaaaagtacatttaagtgtgtgcgtaggaattctgctacgtccattgcaggccacatt
+cacatcccacccctgaatatatggactgaatcacacacaccaaatttcatctaccttatc
+gtagcataactattaacaaacatatacagacttcgcggtaaataaaatatattagtacac
+aaccgtatactggttgaactattgcccagctttaagacgcttttaactaggtgcttgatc
+aagaagtattattatatgacggcagtgtgtaatacctgaatagatatagacgttagattg
+tctgaaaacacgccgtagagacatttttgttagatatgtatttctttttgacgagccagc
+atcttagtatctgaagacgagctatatgtttgtagaaaatcgactgacattgtatacgag
+gcggcgtaagattaaccaaattccccagaattagtaatggcgccttatcgatttactaac
+gatatataacttgtgatgttgtctgcaatgtatacccgtgtaggctgtgctcttatcgaa
+ggaaacgcattgaagtccaggctggatgaaaccaccgcgtacttccatgcgtctatacat
+agcgtcaccgatactacgttttgctatgtaatccattctaatgggtaagaggattcctct
+tatagtaaaatatgcttgactttttaagaaccattgggagtggttggcaaaataatagtg
+ggtgtctttctcagtgtatagttttctacaactacccctattaggttacaagtaatctgg
+ctttcttgccacttggcgatgatagttagattcgtatttctacaacgcagttactgtatc
+catggcgcgagataattagatacgatttgaatttggatgtagactcgttactactgttgt
+agaccagcacgtgagtatctagatgggtttgctaccttgttagcggacttttgccgggaa
+aaagacatacgtacaaccgtatattttactataagcagtattggccaccctcgtattgcg
+gcagggtgtgctcacctggttaaaatgaaagagaaaaattccattttaaaacccggagga
+atctattactgacgaggaaggtgtttaacccgttgagacatctcctaacgtaaaaggttc
+atattctagttattccgagagtcactttcctatccaaacatgaactgatagcataatgac
+aggttgaatggaaagcatatcctgtttattctaaatctgtttcgctaatcaatatgctgt
+cacgaactcggagcttacccttacaactatgtgttctgtttaccaggtgctaatatcccg
+gcactcttttcatgcatgtcgctcctagcgtcatctgatttaatagcttaatgtctcata
+ttttacagtagccagtgtagtatggaaggcggcgaaccagcccctacattgggtttcctg
+acataagtattacatatcacttgtctgattacacagcaaaatcgctaaccttactttgcg
+catgtagctattggaactttgggctagtgtctatcccattaagtttaacagtagactagt
+ccgtgagcgatcaccgagcttatgtctcgtacccaagttttggatttggatcaaaaacta
+ctcgatattcatgatctacgggcttcctttctccgggtatcattgcgccgagattaaaaa
+taaaacgatagcgctgtgaaaacatgtttgacacgggatagcgtagaaactaaacaacga
+atagaccatccaatttgaattttattgggtccagcacttcgccatagtgttgaatggtaa
+agttcgaaaggaaatttgttatattaattctgctacattttcgaccacttgtatctcaag
+gacaatatcccttgaggcttttagcagaaagagatgccgtaattctaagggatgataata
+ggttgggaaatttaagagcagtagtaacggtcgcgggttcgaccttaaactatatattta
+aatctagccaaacaagttaacaacaaccataaagttatgaccttattatattggcaagct
+taacgttttaattgctctagtaatagagtggtagaggtaagggaccatcacctgattctt
+cctccgcaaccattatatagacgtgtcgtctgacaaatttcgagataaaacattcgtcct
+tagcaacgaatatcgaatggcaattagccacattgagttaaatagttgaggatatttctt
+gcacagaatcagatctaatctaatgattcgttactaaacacttcaccaggtatcgtgaag
+gctcaagattacccagagaacctttgcaatataagaatatgtatgcagcattaccctaag
+taattatattctttttctgactcaaagtgacaagccctagtgtatattaaatcggtatat
+ttgggaaattcctcaaactatcctaatcaggtagccatgaaagtgatcaaaaaagttcgt
+acttataccatacatgaattctggccaagtaaaaaatagattgcgcaaaattcgtacctt
+aagtctctcgccaagatattaggatcctattactcatatcgtgtttttctttattgccgc
+catccccggagtatctcacccatccttctcttaaaggcctaatattacctatgcaaataa
+acatatattgttgaaaattgagaacctgatcgtgattcttatgtgtaccatatgtatagt
+aatcacgcgactatatagtgctttagtatcgcccgtgggtgagtgaatattctgggctag
+cgtgagatagtttcttgtcctaatatttttcagatcgaatagcttctatttttgtgttta
+ttgacatatgtcgaaactccttactcagtgaaagtcatgaccagatccacgaacaatctt
+cggaatcagtctcgttttacggcggaatcttgagtctaacttatatcccgtcgcttactt
+tctaacaccccttatgtatttttaaaattacgtttattcgaacgtacttggcggaagcgt
+tattttttgaagtaagttacattgggcagactcttgacattttcgatacgactttctttc
+atccatcacaggactcgttcgtattgatatcagaagctcgtgatgattagttgtcttctt
+taccaatactttgaggcctattctgcgaaatttttgttgccctgcgaacttcacatacca
+aggaacacctcgcaacatgccttcatatccatcgttcattgtaattcttacacaatgaat
+cctaagtaattacatccctgcgtaaaagatggtaggggcactgaggatatattaccaagc
+atttagttatgagtaatcagcaatgtttcttgtattaagttctctaaaatagttacatcg
+taatgttatctcgggttccgcgaataaacgagatagattcattatatatggccctaagca
+aaaacctcctcgtattctgttggtaattagaatcacacaatacgggttgagatattaatt
+atttgtagtacgaagagatataaaaagatgaacaattactcaagtcaagatgtatacggg
+atttataataaaaatcgggtagagatctgctttgcaattcagacgtgccactaaatcgta
+atatgtcgcgttacatcagaaagggtaactattattaattaataaagggcttaatcacta
+catattagatcttatccgatagtcttatctattcgttgtatttttaagcggttctaattc
+agtcattatatcagtgctccgagttctttattattgttttaaggatgacaaaatgcctct
+tgttataacgctgggagaagcagactaagagtcggagcagttggtagaatgaggctgcaa
+aagacggtctcgacgaatggacagactttactaaaccaatgaaagacagaagtagagcaa
+agtctgaagtggtatcagcttaattatgacaacccttaatacttccctttcgccgaatac
+tggcgtggaaaggttttaaaagtcgaagtagttagaggcatctctcgctcataaataggt
+agactactcgcaatccaatgtgactatgtaatactgggaacatcagtccgcgatgcagcg
+tgtttatcaaccgtccccactcgcctggggagacatgagaccacccccgtggggattatt
+agtccgcagtaatcgactcttgacaatccttttcgattatgtcatagcaatttacgacag
+ttcagcgaagtgactactcggcgaaatggtattactaaagcattcgaacccacatgaatg
+tgattcttggcaatttctaatccactaaagcttttccgttgaatctggttgtagatattt
+atataagttcactaattaagatcacggtagtatattgatagtgatgtctttgcaagaggt
+tggccgaggaatttacggattctctattgatacaatttgtctggcttataactcttaagg
+ctgaaccaggcgtttttagacgacttgatcagctgttagaatggtttggactccctcttt
+catgtcagtaacatttcagccgttattgttacgatatgcttgaacaatattgatctacca
+cacacccatagtatattttataggtcatgctgttacctacgagcatggtattccacttcc
+cattcaatgagtattcaacatcactagcctcagagatgatgacccacctctaataacgtc
+acgttgcggccatgtgaaacctgaacttgagtagacgatatcaagcgctttaaattgcat
+ataacatttgagggtaaagctaagcggatgctttatataatcaatactcaataataagat
+ttgattgcattttagagttatgacacgacatagttcactaacgagttactattcccagat
+ctagactgaagtactgatcgagacgatccttacgtcgatgatcgttagttatcgacttag
+gtcgggtctctagcggtattggtacttaaccggacactatactaataacccatgatcaaa
+gcataacagaatacagacgataatttcgccaacatatatgtacagaccccaagcatgaga
+agctcattgaaagctatcattgaagtcccgctcacaatgtgtcttttccagacggtttaa
+ctggttcccgggagtcctggagtttcgacttacataaatggaaacaatgtattttgctaa
+tttatctatagcgtcatttggaccaatacagaatattatgttgcctagtaatccactata
+acccgcaagtgctgatagaaaatttttagacgatttataaatgccccaagtatccctccc
+gtgaatcctccgttatactaattagtattcgttcatacgtataccgcgcatatatgaaca
+tttggcgataaggcgcgtgaattgttacgtgacagagatagcagtttcttgtgatatggt
+taacagacgtacatgaagggaaactttatatctatagtgatgcttccgtagaaataccgc
+cactggtctgccaatgatgaagtatgtagctttaggtttgtactatgaggctttcgtttg
+tttgcagagtataacagttgcgagtgaaaaaccgacgaatttatactaatacgctttcac
+tattggctacaaaatagggaagagtttcaatcatgagagggagtatatggatgctttgta
+gctaaaggtagaacgtatgtatatgctgccgttcattcttgaaagatacataagcgataa
+gttacgacaattataagcaacatccctaccttcgtaacgatttcactgttactgcgcttg
+aaatacactatggggctattggcggagagaagcagatcgcgccgagcatatacgagacct
+ataatgttgatgatagagaaggcgtctgaattgatacatcgaagtacactttctttcgta
+gtatctctcgtcctctttctatctccggacacaagaattaagttatatatatagagtctt
+accaatcatgttgaatcctgattctcagagttctttggcgggccttgtgatgactgagaa
+acaatgcaatattgctccaaatttcctaagcaaattctcggttatgttatgttatcagca
+aagcgttacgttatgttatttaaatctggaatgacggagcgaagttcttatgtcggtgtg
+ggaataattcttttgaagacagcactccttaaataatatcgctccgtgtttgtatttatc
+gaatgggtctgtaaccttgcacaagcaaatcggtggtgtatatatcggataacaattaat
+acgatgttcatagtgacagtatactgatcgagtcctctaaagtcaattacctcacttaac
+aatctcattgatgttgtgtcattcccggtatcgcccgtagtatgtgctctgattgaccga
+gtgtgaaccaaggaacatctactaatgcctttgttaggtaagatctctctgaattccttc
+gtgccaacttaaaacattatcaaaatttcttctacttggattaactacttttacgagcat
+ggcaaattcccctgtggaagacggttcattattatcggaaaccttatagaaattgcgtgt
+tgactgaaattagatttttattgtaagagttgcatctttgcgattcctctggtctagctt
+ccaatgaacagtcctcccttctattcgacatcgggtccttcgtacatgtctttgcgatgt
+aataattaggttcggagtgtggccttaatgggtgcaactaggaatacaacgcaaatttgc
+tgacatgatagcaaatcggtatgccggcaccaaaacgtgctccttgcttagcttgtgaat
+gagactcagtagttaaataaatccatatctgcaatcgattccacaggtattgtccactat
+ctttgaactactctaagagatacaagcttagctgagaccgaggtgtatatgactacgctg
+atatctgtaaggtaccaatgcaggcaaagtatgcgagaagctaataccggctgtttccag
+ctttataagattaaaatttggctgtcctggcggcctcagaattgttctatcgtaatcagt
+tggttcattaattagctaagtacgaggtacaacttatctgtcccagaacagctccacaag
+tttttttacagccgaaacccctgtgtgaatcttaatatccaagcgcgttatctgattaga
+gtttacaactcagtattttatcagtacgttttgtttccaacattacccggtatgacaaaa
+tgacgccacgtgtcgaataatggtctgaccaatgtaggaagtgaaaagataaatattgcc
+tacacatactgaattcaggcaatgcgttttattcgaaaggtcatataactagaaaacatg
+atgaattcttatcggatccttttactagcatagtgttggcgaacacctcgtaatgctcag
+cggcaaattggactgcgggtccttatcatacattttttttcaatataggcgattggtcta
+ggttagtgattccccaacacttaaggtttgctgacattcataccctcagcaacttcctct
+caaaaattagagtgagttggtggtcttataagaccgttgattatttgaggtggtcaaatg
+atggtgcgatgcacaaatcgttataatcgtactctgtagacaataacccattgtagtgcc
+gattttgtgcataatacaagaaggaggatataaaaatgacttttcaataatattggctat
+tagcaacaagaaggagaatcctcattaagttagcaaccgcagggggtactgcagtccaag
+gaggtttcattggagagagcagtatgaaaacggcaattatgattgtgagattcgctgaag
+attgtgtctctgattttcctagatagaataagctatagctacttaatcaactcttaactg
+tggagactatcctgatgatctgaataccccatttacaaaattccatatcaatgaggctaa
+cgcttaaatttcatttctccatcgtaacaaaaatcagcctttttatacaagacaaaacac
+tgcttccattacgggtagcaatggttgctcgactactggtagcgtcgtgatgtggtgata
+aagctgtcttgcgtttatacttaaacaaattttgacctgacataatggagcgacttatcg
+gatgttgccgatctttagggtcatctattaagcttatacgaaaaagggacaagcacgtta
+cgtaatctggtaggactgggtacctagaaacgcaagaggaggcgaactccaatatctgta
+agaacagaaaaatacaggagtccttttcatttttcaagttaacaatataagtaggagctt
+agagaggcttgcatgaaaatcgttaggaattacagaataggcagagagtggggcgtgtag
+actacattcttcaggccccacaatatgggttataggttaaactgcactttttgcgatctc
+ccgaaatactgtcgttctctgcgaaccacgctcgttccttttgctgtagtccacgttcat
+ccaactattcagataaacaagatcgcagaattaaagcttaaccatatcttgatagcccat
+cgtgtatggggcatgtatgtgcaaacaaaagacctcaatcttgtctgcgagagggaggaa
+aatttagacaaacataattcattctttcgactggacacgctaaggtttggacaaactttg
+tatctatatctggaggcctgtattccagcccttcttttaataagatttacggcttaaact
+atggatatttgccaggaaatgacactgctattgacaggaacataattttgattcaaacct
+cattgttaattattttatatctcctgtttttatatcagaatgcttctgtcctagaaggca
+tactcaaggtgagggctcgaggaatgaatcataatagaccggcccctattaatattggtt
+caattctttcttacataacgcggaatttgattgcacgaacaccgggaacacataaccgta
+tagcgcccgttatgctagtgcctagcgactgggaccgtggagtctatatcgtctttctac
+cattattaatctaaggatataccactttaagtcctttcaactaacataaggcgcattcca
+tgcgctaaggaccttgaatttattatttcttacatgataaaagatcgagtcgacgggaac
+aaaaggctacgtactcaataaagtgcagtttactaagagccctttttctggcttgtggag
+actatcataacatgaagatgttttgacattcaatagtttgcaaaacaaacttactttgtg
+tagtattgaacgagatctttccaattgccccatagcaggaatagttatatattgcagatc
+gcggtgtaacgcactccaaatccatcgcggtgtgtgagggtaagcgacttaaagaattac
+ggtttttgatcaaagcacagtgagagttgagcaaattacagttatacgacttaattcagt
+ctccataaattgaaacgacacttcttaacgggaggaccagacacgttcattaagtgagga
+gtgcactttttgactttaaaaacatggtaatcaatttaaaccacttgatatgtatatgaa
+cagatttgaagttatttctgttttaatacactgggagttctgtcaatatcgcaggaaccg
+cctgacgtcccctatcacacctcagagggtaaagggacaggggaaagggtaatcgagggg
+tagggaacgtagttggcacacccaatggacgaataaatgctgccatatccacggagggcg
+ggattgcggttgattttaaggcgatggtaacctgaatgtaatagatcatcaaatgcctcc
+tccactggaaattactgcgtacatccgctgagaattgcaatggagtgtctcggtttttct
+ttaaacaaaaccaaattgacaacttcatagtataatttttgcacattacaagcgttaatt
+aacaaacttactttgctgttagctgcctatatttgtccgacaatataactggatatctct
+gcgagaactgtaaattaacggcacttggaacataatagttcctattggtaacgacgttgt
+aggcggcaattatccggtggaagaattgacaactgcagttgaactgcatgaaagtcaaat
+ctctcgtaagtataactttagaagactccaaggtacccagaacctcttcagcggacacga
+tcgctatcaatcaataaggattattcactgaaaccgctcatatctggaggtggacgtttt
+tcttcgaaaagcttgtcaaaggactcatcaaatttttggccgtgctaatcgacacacctg
+ttattttcatgaccggataggacatctcgcggaaattcgggtaacagctgggtagatata
+ggacctcccctacgtattaatgataagcctgtcataactagcttggtttaccgaagagac
+aataaacattcgagcgctcgtgccaaactcggtgcattacgtttgaataaatcggtaaca
+tgtactattactctgcctaacggcacttacccgtttgggtccatggggtaaccgctcgat
+gttgacagaattatgctaaagtcgtttaagatcccgattaccgaaaatctggttatgtct
+gagcattcgtacactgcgtattaagatcaggttgaacaggttcctaacaaattttgtgac
+ctaaagtgaaactaggtcgtactctgggcatgttttatgtcgtggcgtatgcatgtgctg
+acacttctaaaaccaaattaaggctttatccaatatgggtccttaagtgctaaacatcat
+tcacaatttcaagacagattgttggtcttgtcgattccgcatctgtcgccaaattgacac
+atcgtaaaccaggtacatcggtaattatatgttgactaaactaccgtgtgtattctggct
+ctaggtacggcgaacaagtacgatgtgcttaagaagccctcaccccagacgagcccgcgt
+aggtcacatcagcagatcctaagtaattccgttttattgtcctgagggagtaggatcgac
+gaactctacaagtcgctttgtcgtgccttataggctatttcgggtcaatgtagcgtcaaa
+tgaactattgtcatctgtacgagttaactaagtgtctatcgccaactaaaagacgtctcg
+atggttctttatgcggacctgtcatatcattgactggcacttgcttacatccaaataaca
+cgtttgttagcggatagtcgttaagtgtgcgcaagatcatgaggcggggggggtaatatt
+tcgccctctacatgataaatgaataagtaagaagatgatctttttgtggcggtaccttaa
+gcgtactcctgtcgacgagttactactaaaggaatgtagggttctggatctatgaaaagc
+gacctccatatatatacgggcctaagcggagtaaaataagtgatcaatggactaacattg
+aaatgttagtattgtcgaccattgagggctggtaaatcttatttacgggcgtgggaaaac
+gaacgtgatatggtttagcatgggatgcaagcactcgttaatgcttactttagttggttg
+cgggaacaacaggaggctatactaactggtagcgttcttgcttccattatgttattatta
+taattaaaaataagacatatggtagagttgtagtcagggtggatcgggttgtctataacg
+ttggaataatcaaaactatcgttaacaaaaacgaaatttaagtcggtgcggtggaatgcg
+cctacctcatgtgcaccacacattcacagcacacccctcattataggcaaggaagcaaac
+aaaaaaaagttaatcgaccgtatccgaccttaaattttaaaataaatagaaacacttagc
+ggtaatgaaaagataggactaaaattcactagtatcctggaacgaggcaacagagttatc
+tagatggtaacgaggtgctgcatcaagatgtatgatttttggtccgctgtgtggaatacc
+tctattgatatacaagtgactttctcggtaataacgcacttcacaatgtgttgtttcttt
+tctatgtattttgcaagagaaagaagcttagtataggtacacctcagagatgtttcgtgt
+aaatcgtatcacatggtataactgcaggaggaacattatccaaattcaccacaattacta
+atccacccttttacttttactaaagatatattaattctcatgttgtctgaattgtataac
+ccggtaccctgggagcgtatcgaaggataccaattgaagtcctcgaggcatgttacaaca
+cacgacttccttccgtctattcagacactcaacgagactaacttttcctaggtaatcaat
+gatattgggtaactcgtggcatcttatagttattgatccggctcttttgtagatcctgtg
+cgactcgtgcgctaattaagactggctctcttgcgcaggggatacgtttattctacgtac
+ccgatttggttactactaagcggcctttcttcaaacttgcagttgtgacttacattccta
+tttcttcaaagcagggaagggttacagggagagacttattgagatacgattggaatttcc
+atgtacaatcgttaatacgcttgtagaccagcaactcagtatagagatccgtttcctaaa
+gggtgagcggtaggggcaaggcaataagaaattactaaaaccctagttgttaatataaga
+acgattcgaaacaataggattgcccaagggggtgcgaacatggtgtaaatcaaagagaaa
+taggcattgttaaaacccgcacgtttctagtacgcaagaggaacgtcggtaaccagttct
+caaagatcctaacctaaaaggggcttattctactttttccgacactcaatggacgagaca
+aacatgaacggatagctttaggtctcgttgaatgcaaagaatagaatcgttattattaat
+cggtttccattatctatatgcggtatagatctccgagaggaccctgtaaactagctctgc
+ggtttaactggtgctaatagaccgccactatgttattgcttctagctcctagcgtcttat
+catgttatacattaatgtcgcatattggacagtagccaggcttggatggatcgccgacaa
+aaagaaaagactttccctgtaaggacttaactattacatataacttggatcattaatctg
+caaattagagtaacggtctttcaccagcttcatattccaacgtggcgctagtcgatatcc
+catgaagtttaaaactagaattggcagtctcacttcacagtgcgtatctatacgacaaaa
+gtggtcgatttgcataaatatcttatcgatattcaggttattaccgattccttgctaacg
+ctagaagtcacaccagagtaataataattccagacacctgtgaaataatcggtcactacg
+gatagactagtaacgataatacgtatagtccataaaagttgaattttaggggctaaagat
+attagcaatactggtctagcctaatcgtcgatagcaaagggctgtgaggatttctcctac
+attttcgaccaattgtatcgataggaatagttacagtcacgcttgtagatgtaagagatg
+acgttattcttagggttcttaagtcggggggtaatttaagaccactagtaaaggtagagg
+cgtacacagtaaacgatattttgaaatcgtcaaaaaaaagtttacaacatcctttaagtt
+agcaactgattttagtggcaaccttaacggttgaattgatctactaatacaggcctacac
+cgaagggtacagataatgattcttactaccctaacatgatagagtcctgtcctatctcat
+aggtcgacattttaaattcgtaatgagcaacgaagatcgtttcccaatttgcaacattca
+cttatagacttcaggttatttcgtgctaacattaagatagaatataatcagtcgttaaga
+aactattatccagctttcgtcaaccataaagattaaaaactgaaacttggcaagatatga
+atagctatcctgctttaaccgatcgtatgagatgctttgtagcaagaaaagtgactagca
+cttgtgtttagtaaagcgggagagtgcggtaattaatattaatatactattaagctacac
+agcaaaggctgcaataatgttagtaagtagaacataaaggtattctccacaagtaataaa
+tagtgtgagctaattgactaacttaactctcgcgacaagtgatgtggataagatgactca
+tatcgtctttttctgtagtgccgacatcccacctggatcgaacaattccttctagttatc
+gactttgattacctatcctattaaacagatagggttgtaaagtcagaaaatgatcggctt
+gcgttggtctaccatagctagagttagaacgcgtagatagaggccttttgttgccaacgt
+gggggtgggatgagtctgggcgagcgtgactttctttcgtgtccgaatttgtttaacatc
+cattagattagatgtttgtgttttgggtctgatgtcctaactactttctcagtgaaacta
+atgtcatcatccaagtaaaatagtccgatgaagtctccgttttcggccgaagcttgtcta
+taacgtatataaagtcgctgaatttagaacacaccttatctatgttgtaaagttacttta
+ttccaaaggacgtgcacgaagcgtgagtgtgggaaggaacttaaagtcggatcactcttg
+tcagtgtagataagaatttctttcatacttcactggaatccggcgtatggatatctctac
+cgcgtcatctggtggtgtctgcggtaaaaagtcttgctgcacgagtctgagaaatttttg
+gtgccatcacatcgtaactgtacaacgaacaaatagcatcaggccttcttatccagcgtg
+aagtctaattatttcacaagctttcctaagtatgtaaatccctcacttaatgatgcttgc
+gccaatgaggatagaggacattgcatgtacgtaggactattctccaaggggtcttctatt
+ttgttagcgaaaattgttacagcctaatgttagagcggcgtacgactttataccagatac
+tttcattagatatgcaaatatccaattaaatcatagtagtatcgtggtatggacaatcaa
+aaaagacccgttgtgatatgatgtttttctagttcgttctcatatatatagatcaacaat
+gaataatctcatgatctataaccgatgtatatttatattccggttgactgctccggtgca
+attcactacggacactaatgactaatatggcgcctttcatcagaaacgctaaatatgatt
+aatgaattaagggagtattatctaattattagagagtagcagttagtctgatattttcgg
+tgtatgtgttagccgttataatgctgtctttttatcagtgagaacagggagtgtgtagtg
+ttgtatgcttcactttatgactctggttatatccctcggagaacaagaataagagtacga
+gaagttcggtcattgaggatgaaatagaaccgctagacgaatggactcacgtttataaaa
+ctatgtatcacagtactacagctaactctgaagtccgagaagcttttgtaggacaaaacg
+ttataagtacctttcgcagaatacggccgtgcatacctgttataaggcgtagtagggaca
+ccatgctatccctcatatagagctacactaataccattacatggtgactatcgtttacgg
+ccatcatctgtaagcgatcatgcctcgttagcatccgtacaatctcgcatggcgtcactg
+cagaaaaaccccgtgcggattttgagtcagaactattcgaagcttctcaatccttttcca
+ttatggcatagcaagtgacgactcgtcagccatgggaataatagcactaatccgattact
+tatgaattagaacccacatgaatgtgattctgcgaattgtctaagaatctaatgattttc
+cggtgaatatggttgttgttatttattgaacttatattattaacatcacccttcgttagt
+gatagtcagctatttccaagaggttccccgagcatttttaccattctctagtcatacaag
+ttggagcgcttttaaatctttaggctgatcaaggcgttttgtctagaattctgcagatgt
+tagattcgtgtgcaatccctcttgcatgtcagtaacaggtcacccgtttttcgttacata
+tgctggtaaaatattcatagtaataactacaatacttgatttgttacgtaatgctcgtac
+ataacacaatcgtattccacggaacagtaaagctctattattctgatcgagcctaagaga
+ggatcacactacgctattaaagtcacgttcacgaaatctcaaacctcaactgctggtgac
+cagttatagacagtgtaattccatattacatgtcaggcttaagctaacccgagcctttat
+ataagctataatcaagaattagattggagtgcattttagacttatctatcgaaatagtga
+tagtaagagtttatatgacctgatctagactgatgttctcttccacaacagccttaaggc
+gtggagcctttcttatactattaggtcgcgtcgagagccctattcgtaatgttaacgaca
+ctagactaatatacaatgagctaagaataacacaagtcacaagataatttacaaatcata
+tatctacagtccacaaccatcactagcgattgcaaagcgttattggtactaccgctctaa
+atcggtatgtgcaagacgcgttaactggttcaagcctctcctgctcgtgagactgaaaga
+aatcgaaaatatggatgtgcctaattgttcttgtgagtcatgtgcaactatacagtttag
+tttggtcaagactatgcaactattaacagcatgtgcgcattgaatatttggtgtcgattg
+ataaatgccccaacgttccatcacgtctataagccgtgttactaatgtgtattagtgcat
+acctattcagaccatagttcaactgttggactgaaggcccgtcttggggttcgtgaatga
+gagtgcagtttcttgtcttttccttaactgacctaaatgaaggcaatcggtttatctaga
+gtcatgcttaaggtgaatttcagccaatgggctcccattgagctagtatggtgctttacc
+tttgtaagtggtggctttccttggtgtgctgactttaacacggcagagtgattatccgaa
+gaatggataataagacgctggcaatattggctaataaagtccgatgagtttcaatcatga
+ctgcgaggagatccatgcggtgtacctaaacctacatcgtatgtatttgctgacgttcat
+tcttgatacataaagatccgatatcggtccactttgtttaccaaaagccctaccttcgta
+acgatggaaatgtgaatgagagtgaaatacacgatggggatattgccggtgagtacaagt
+tagaccacacattagaactgacctatattcgtcatcatagagatggagtatgaattgatt
+ctgcgaagtacactggctttacgagtatctagacgccgcggtatatctcccgtcaatact
+atgaaggtatatatatagaggctgaaaattcatgttcaatcctctttctaagagtgagtg
+ggagccccttctgttgtcggagtaaaaaggcattattcctcaaattgtcagaagcaaagt
+atacgtgatgtttgcttagaacaaaagagttaccttagggtaggtaaatctcgattcacc
+gagagaagtgattttggcggtgtgcgattaattcttttgatgacagatctcattatttta
+tatagctccctctttgtatttagagtttgcgtaggtaacctggcaaaaccatatcccggg
+gggagagtgcgctgaacattttatacgatgtgattactcaaaggataaggttcgaggcct
+ctatactcatggaactatcttataattataatggatcgtggctcattccacctatccaaa
+cttctttgtgatctgatgctacgagtgtgaacaaacgtacatcttctaaggaatttggga
+cgtttcatagctcgcatttcattcctgaaaacttaaatatttttaaaaattgattctact
+gcgaggaactaaggtgtagacaagcccttagtaaccggtggatgtcgcttcagttttata
+gcaaacattattcaatttcagtcttgactgaaattagtttgttagtgttagaggtccata
+tgtcacatgcatatggtctagatgccattgtacagtaataccttagattagtattagcgg
+catgcgtacttggatttcacttgtaagaatgagcttaggacggtcgcctgtagggctgca
+aataggaatacttacaatttttgatgacttgttagcatatcgctatcacccataaaaaac
+ctgatacttgatgagcgggtgattgagactatgtactgatataattcaatagctccaata
+gatgaaacagctatgcgcctatttatgtcaaataatcgatgtgatacaagcttagagctg
+aacgagcgcgagtggaattagcggtgatctctatcctaaaaagccacgaaatcgatccca
+gaagctaatacccgaggtgtcaagcttgagttcagttaaatttgcatctcatgccccacg
+aagaatgggtagagagtttgaaggtgcttctggattttcctaagtacgtggtaaaaattt
+gatgtaaatgaacacctcctaatggttgtgttaaccacaaacccctgggtgaatctgatt
+agccaacccagtgatctgatttcagttgtcaaatctcttttttataactaccttttgttt
+ccataatttaaccggatctcataatgaacaaacgggtagaataatggtagcacatagcga
+gcttgtctattcagaaatatggcctactcagaatgtattctccaaatcagtgttatgcga
+aacgtaattttacgtgtaataatgatgatttcttatcggttccttgtactacaatactct
+tgcccaacaaatactaagcataacagcaaaattcgaatccccctccttttaataaatggt
+ttttcaatatagccgattcgtattcgttagtctttcaccaactattaacctggcatctaa
+ttaataaaatcaccaaaggactctataatatgacagtcacttcggcctcttttaagacag
+ttgattattgcaggtccgcaattgatggtgacatgcacaattagttagaatccgactatg
+gagacaattaacaattgtagtgcccatttggtccagttgacttcaaccacgagttataaa
+ggtattttaatttatagtcgatagtaccaacaacaagcacaatcataattatgttagaaa
+acccagggggtaatgctctaaatccagctttaaggccagagtgcactatgaaatcgccat
+tgatcattgtgtcattcgctgaacttggtgtctaggaggtgccgagtgagaatatcagat
+accttatgaagcaacgattatatctggactagatcatgatgatcggaataaaacattgaa
+ataagtccttatcaaggagcataaacattttatttaatttatacttcgtaaataaattca
+gaattttttttcaagacattaatctgagtaaatgacggctagaaagggttcctactcgaa
+tcgtagcctacgcatgtgggcagtaacctggcttgcgtttttactgaaacaaaggttcac
+cggaaagaaggctgccacttttagcttcttgacgatctttagcgtcatatttttagatta
+gtcgaaaaacggaaaacaaacttaacgaagctggttgcacggggtaccgagaaaccaaag
+agcaggacaactccttgatcgggaagaactgaaatagacagctgtcattttcattggtca
+acttatcaatataacgaccaccgtagtgacgcttgcatgaaaatactgaggatgtaaact
+atagccagtcaggcccgcgtgttgactaattgatgaagcaaacaaaatagccggtattcg
+ttaaaaggaacgggttgccagctacagatatactctaggtatatcccaaacaagagacgt
+cctttggctgttgtaatcggtcataatacttgtcacataaacaagatcgctgaattaaac
+attaaacagttagtgatacacaatcgtggttggggctgggatgtgcaataaaaagtcatc
+tatcgtctatcacagagcgacgtaaatttagacaaacattattatttcttgacaatggaa
+tcgataagcgttcctctaacttggtatatatatctcgaccccgggattccagccattctt
+gtatgaagatttaaccatttaactatgcatagttgaatggtaaggaaaatgatattgact
+gcaacagattttggatgcaaaaatatttgtgaattattggttatatactggttgtatagc
+acaatcattaggtcctagaaggcatactcaacctcagcgagagagctagcatgcataatt
+gtaccgcccatattaatattcctgaaatgatttcttacattacgcccaatttcagtcatc
+gaacacccccatcaatttacccgatagagaacgtgatcatacgcaataccctatgcgaac
+gtccactctatagcgtctgtatacaatgattattcgttccatttacaacgttaagtaatt
+taaacttacataaggacaaggaaatccgcgaacctcctggaatgtatgagttatttatgc
+agttaacttcgtctcgaccggaactaaaggcgtcgtacgaatgaaaggccacttttagaa
+gagacctttgtatccattgtggagaatatcataaattcaagatggggtgtcatgctattc
+ggtcctaaacattcttaatggctgttctattgttagtctgatttaaaatggaaccatagc
+acgaatagttagatagggctcatacccctgtaacgatctacaaatccttccccgggtgtg
+tgcgttagcgacggaaagttttacggtttgtgatcaaagaacactcacacgtcagattat
+tacactgatacgaattatttcagtcgacagtaattgaatagaaacttattaacgccagca
+cctgacacggtaagtaaggcaggtctgaactgtttgactgtaaaaaaatggtaatatttt
+taaaaatcttgatttctatatcaaatgatgtgtagttttttctctgttattaaaatccca
+gtgcgcgaaatttagatcgttacgactcacgtacaagatcacacatcacacgcgttagcg
+aaagcggaatggctaatacagccctacgcaacgtagtgggatcaacatatggacgaattt
+atgctcaatgagccaacctcccccgcattgcggttcattttaaggcctgggtaacatcta
+tcgtttagataatcaaaggaatccgactatgcaattgtctgacttcatccgctctcaagt
+ccaatgcaggcgctacgtgtttctttaatcaataccatattgaaatcgtaatacgataat
+tgttgctattgactacaggttatgaaaaaacttactttgcgggtacatgcatatttttgt
+accacattattacgcgatatctctcagtgtactctaaattaaaccctcttcgaacatttt
+agttcctattcgtaaacacgtgctacgcggcaatttgccggtcgtagaatggacaactcc
+agttcaactgcatgtaactcatagctcgcgttagtataaattgactagtagccatgggac
+aaagtaactagtcagcggaaaagatccctttaaagatatatgcaggttgcaagcataaag
+ctcattgctcgaggtgcaccgtggtattccaaaagcgtctctatcgtatcttctaatttt
+gggccgtgagaatcgaaactactctgatttgctgcacacgttaggtaatatcgcccattt
+tcccgtataagctccgtacttatacgaactacacgaccttttaagcattagccgctcata
+tcgtgattcgtgtacagatgagtctattaaaattacagacatactccatatctcgctcct
+tgaactttgaataatgcgctaacttgtactatgaataggcagaacccaactttcccgttt
+gcgtcaagcggggaaacgatacatgttgtcagatttatgattatctagttttagatcacg
+tttaccgataatcggctgtggtctgagcagtcctacactgagtatttacttcagcttcat
+atcggtccgaaaaaaggttgtgaccgaatgtcaaaatacggagtacgatgggcatctttt
+ttcgagtcgcggttgcagggcagcaaaaggcttaaaccatttttacgatttttactatag
+cggtcatgaagtgcgaaactgcttgcaaattttctacacacattgtggctcttgtccttg
+aagcttatggcgaaaatttgaaacatagtataccagggaaagcgcgaattatttggtgac
+taatagtccgtgggtttgagccatatacctaacgccataaactacgtggtgctttagatg
+caatctaaacagaacagaaagcgtagcgctcatcagcacagactaactttttcagtttga
+gtcgccggagggacttcgagacaagaacgcgtcaagtcgcttgcgcggcacggattcgat
+tgggcggctcaatcttgcctaatttctactattgtcagctgtacgactgtactaagtgta
+tagccccaaataaaagaagtatcgatgcgtctttatgaccaaaggtcttataattgaagc
+gcacttccgttcatcaaattaaatcctggcttacccgattctccggaagtctgacctaga
+gattgacgacggccgcgtattattgagacctcttcaggattaatcaataacgaagtagtt
+gatctgtttggcgacgtaccttaagccgactccgctacacgagtttctactaaaccaatg
+tagccttatgcttagatgaataccgtcctaattagatattccggcataacagcagtaaat
+tatctgttcaatggacgaacattgaattgttagtattctacacaagtcaggcctcgtaaa
+tattaggtaaggccgtgggataacctacgtgatatgcttgagcttgcgttgcaagctctc
+gttaatcattaatttaggtgcgtgagggttaaacaccagcatattctatatgctagacgt
+cttccttaaaggatcgtagtattataattaataataagaaatatggttgacgtctagtca
+gcgggcatacgctgctctatatactggcattattcaaaacttgacggtaaaaaaacgaat
+tttaaggcgctcacgtcgaatgagccgaactcatgggaaccaaaatgtcacagaaaacac
+ctctttattgccaagcatgcaataaaaaaaatgttaatagtacgtttacgacattttatt
+ttataataaagagaaactattacacctattgatatgataggacgtaaattaacgagtagc
+ctgcatagaggcaaatgaggtttctacatggtatagacctgatgctgaaacatcgatgag
+ttttggtcccctcgctcgttgaaatctagtcatttactactgtctttcgagctattatac
+cacttcactatgtggtgtttctttgctatgtatggggctagtcaaacatgatgactatag
+ctacaactcagagagcgggcgtgttaagagtatctcatgctagaactgcacgacgaactt
+gatacaaagtaacaacatttacgattccacaaggtgactttgaagaaacatagtttaatt
+ctctgcttcgatcatttctataaaccggtaccatcgcagcggatagatgcataacatttc
+tactactccaggcatcttaaaacacacgtagtacttcactagattaagacacgataagtg
+tataacttggcagtgggaagcaaggagattggcgaactcctggcatctgttacgttttgt
+tcaggctcggttgttgataatgtccgactcctgccatattgaagactcgctcgagggaga
+tcgggattcgttgattataagtacacgtgttccgtaatactatgaggcagtgattcaaaa
+tggcacttctgacttacatgactaggtattattaccacggaagcgttaaaggcacactct
+tatggacttaagattgcaagtgccttcttctagcctgaattcgcgggttcaacacaaact
+ctctttagacatccgttgcctaaaggctgagacgtaggggcaaccctttaactatgtact
+aaaaaactagttggtaatttaacaacgtgtccaatcaagacgatgcaccaacgcggtgcg
+aaaatcgggttaagcaaacacaaataggaattgtgataaaccccaccttgagaggtcgca
+agaccaacctcgggaacaacggctctaagagaataacctaaatccggatgagtagactgt
+gtaactctctaaagggaagtgaaaaaaagctaagcatacatttaggtctcctgcattgca
+ttcaattgaatcgtttgtattatgagctgtacagtagctatatcagctatagttatccca
+gaggaacaggtaaactagctctgagcgtgaaatccggatattagaacccctagatgggat
+tgattctagctaatacaggcttatctggttttacagttatctagatgattggtaaggtga
+aacgcttggtgccttccaccacttaaacaaaagtattgcccgggaagctattttctaggt
+attataaagtcgagcattaatatcaatttgacagtaaaggtctttcaccagcttcatatg
+ccatagggcccatactcgatttaaattgaacggtttaacgagtattggaactctcactta
+taactgagtagctatacgaaaaatctggtccatttccagaaatttattatcgatttgctg
+cttagtacccaggaagtgataacccttgaaggcacaacactgtaataagttttcctgtca
+catctgtaatattcggtcactacgcattcacgactaaagataattactatactaattaaa
+agttcaatgttagggccgaatcatagtagaaattctcgtctagcctaatcggacttacct
+atgggctgtgaggatttatcagtatgtggacaaaaatgctagagataggtatagttaaag
+tcaccatggtacatctatgtgaggaagtttgtagttcgcttctttagtccgggcgtttgg
+gatgacaactactatacgtagagccgtactcaggattagatagtgtgaaagagtcaaata
+aaagggttaatattaatttaacgttgcaaatgtgtttaggccaaacattaaccgttgtag
+ggatattctaatacaggccttcaccgaaccctaatgataatctgtcttaataacattaaa
+tgattgtctccgctacgagctcttagggcctcattttaaatgactaatgtccaaagaaga
+gactttcccaatttcaatctgtcacgtatagacggcaccttagtgagtcatatcattaag
+atagaagattatcaggagggaagtttctattatcaaccgttacgcaaccataaactttta
+aatctcataatggcattgagatcaagagctttcatgatggtaaagttcgtatgtgatgct
+ggggagctagatatcggtataccacttcggttgtggtaagcccgagtgggccgttagtaa
+tattaatagacgattatccgacaatgcattcgctgaaataatcttacttaggagaaatta
+atgctatgagccaaaactatttatgtctgtcacattattgactaaagtatctatcgacaa
+aactgatgtccataagttgtagcagatagtcggtgtatggtgtcaccaatgaaaacctcg
+agcgaaaaatgaattatagttatccaatttgagtaaattgcctattatacagataggctt
+gtttagtcagataaggttccgcttgaggtgctctaacttagcgagagttagaaagcctag
+tgagaggcattttggtgccaaactccggctcgcatgagtaggccagagagtcactttctt
+tcgtcgaagaagttggtgaacagccttttgattagttgtttgtcttgtggctatgtgcta
+ctatataagttagaacgcaaactaatctaatcagcaaagtaaaataggaccttgaacgag
+acggggtacgccgttgaggctcgagatagtagataaactagaggaatgtagataaaacat
+tagctagggggtttagttactggattacataggaagtgcaccatcacggtgtgggggttc
+gtacgtaaagtcgcatcaatattgtcagtggacttaacaagttcgtgcataatgaaatcc
+tatacggactttgcatatctctaccgactcatctggtcgtctatgcgggtaattgtattg
+ctccaagtggatgactattttggcgtcccagcacatagtaaatgtaaatccttataatag
+cataagcaattattagactgcgtgaagtcttagtagttctcaagctttacgttgtatgta
+aataactcacgtaatcagccgtccccaaatcaccattgaggtcattgaatgtacggagca
+ctattatcaatgcggtatgcgattttctgagcgattattgttaaagacttagcgttgagc
+cccggaacacttgattacagattctttaaggagttatccaaatatcattttaaataatag
+tagtatcgtgctttggacaataaaaaaagacccgttctcttatgttgttttgcgacgtac
+ttctctgatatatacttcaactatgaagattctattcatcgataacccaggtatatttat
+atgcccgttcactgcgcagggcaaattatctacggacaataatgacgtagttggacccgg
+taagaactaacgcttaatatgattaaggatgtatgccagtattatcttattatgtcagag
+tagaagtttctctgagattttccgtcgttgtggtacaccggatttggctctctttttaga
+actgagaactcggagtgtgtagtcttgtttccttcaatttatcaatatgcttttataccg
+ccctcatcaactataacaggacgacaagttccgtcttgctccatcatatactaccgatac
+accaatcgtatcaagtttagtatacttgctttctctcttctacagcttactcgcttgtcc
+gagaagcggttggtgctcataaagttagtagtaaatgtacaactagtagccagtccttac
+ctgtttttacgactactacggacaccatgagatacagaagttagtgctacaattatacca
+ttacatgctcaatatcgttgtcggccataagatcgaagagtgcatcacgcgtgtgaatac
+gtaaaatctaccatcccgtcaatgcacaaaaacacactccccttgttgactaacatcttt
+tacaagaggctaaatcattgtccaggatcgaataccttgtgtacaatcgtcacccatcgg
+aagaataccacttttccgatgtagtatgatttacaaaaaacatctatgtgagtaggccaa
+ttgtagtagaatatattcatttgaccgtcattagccttcttcttaggttgtgtacggata
+gtaggtacataaaccgtcgtgtggcatacgctgcgatttcatacagctgccaacaccttt
+tttaccaggctagagtcagaaaagttggagccatgttaaatagttaccatcataaaccac
+tgttgtctactagtctgatcagctttcatgcctgtgcaagcaatatggattctcacgtaa
+tggtaacaactgttgcgttacttaggctggttaatttgtcagagtaataaatacatgtct
+tgttgtgtttcctaatcctcggaaagtacacaagcctaggaataggaaaagtaaagctct
+tttattctgatagtgactaactcaggatctaaatacgcgattatactaaccttcaccaaa
+gctcaaaaatcatctgctggtgaccagttatagacagggtaattcaatatttaatgtctc
+ccttaacatttcaccagcatggattgaagatagtataaagttttacatggcagtcattgt
+gtcacggttctatacaaattctgatagttagacggtatttgaaatgtgcttctagcatgg
+tatcttacacaactgaatgaacgactggagccgttcgtatactatttgcgagcctcgaga
+ccccgtttcctaatgttaacgaatatagtataatataaattgtgatatgaataacacaag
+taactacagtttggacaattaattgttctaaactaaaaatcattcacttcagatggcata
+gagttatggctactacacatataaagcggtatgtgaaacacccgttttagccggaaaccc
+tctactgctcgggacaatgaatgatttccaaaatatggatgtgcagaattgttagtgtga
+ctcaggtccaaatagacactttagtttcgtcaagtcgttgcaaagtttaaaaccatcgca
+gcattctttatttggtctacattgagaaatgaaaaaacgtgacagaaagtctagaagaac
+tgtgaataatgtctattactgattaactagtaagacattagtgcatctggtccactgaag
+cacccgcttggcgttaggcaatctctgtgaactgtcgtggctgttccggtaatgtacgaa
+agcaagcctataggttgatcgagtcgcttcattaaggtcaatttcacaatatccgatcac
+attgtgctaggttcgtcctttaccttgcttagtgctgcatgtacggggtgtcatgacttg
+ttatcggcagactctttatcccaagaatggataatatgtacatggaaagtgtccataatt
+aagtcccttcactgtaaagaatgactgccacgtgatccatgaggtctacagaaaccgact
+tacttgctttttgatcaacttaattatggattcataaagttcagatatcggtacaattgg
+tgtacaatatgaaattaatgaggaaacatggaaatctgaatgacagtgatagaaaagatc
+cccatttgcccggtcagttcatgttacaccactcattagtactgtaagtgtttcgtcagc
+attgagatccacgatcatgtgtttatgccttcgaaactggatgtacgacgatcgagacga
+agaggtatatataacctaaatactaggtacgttgttagagagacgatgaaaattaatcgt
+caatacgctggcgaacactgagggggacccaatgctcttctcggtctaaaaaggaatgtg
+tcagaaattggtcagttcaaaagtagaccggatctttgcggagaacaattcacggaacgt
+agcgttgggaaatatcctttctaccacacatcggattttcgccctctcccattatttatt
+gtgttctcacatagaattattgtttagacatccctcgttgtatggagagttgcccgagcg
+taaaggcataatccatataccgccgggtgagtgacctgaaattgtttttagttgggattt
+cgctatggattagcttacacgaagagattctaatggtactataggataattataatgctg
+cgtggcgcagtacaccgttacaaacgtcgttcgcatatgtggctaacacggtgaaaatac
+ctacatcgtatttgcaatttcggtcgtttcatagagcgcattgaattactcaaaaattat
+atatgttgattatttgattagactgcgtggaaagaaggggtactcaagccatttgtaaaa
+gctgcatctcgcttaagtttgagagcttacattagtctatttcagtcttctaggaaatgt
+ctgtgtgagtggttgtcgtccataggtcactggcatatgcgattcatgacatgctaaact
+aagaaagtagattactattaccggcatgcctaatgcgattgcactgctatgaaggtgcgg
+acgtcgcgcccatgtagccctgataataccaatacttacatttggtcagcaattctgaca
+ttatacctagcacccataaatttactcagacttgaggacaggctcttggagtcgatcttc
+tgtttgtatgcatgtgatcatatagatgaataagcgatgcgactagttagggcatagtat
+agatctgtgtatacagttcagctgaacgtccgcgagtggaagtacagctgagatctatcc
+taaaatgcaaccatatcgttcacacatgatatgaacccagggggaaacattgagttcagt
+taaattggcagcgaatcccccaagaagaaggcggagtgacgttgaacgggcttatggttt
+ttcagtacttcctccgtataagttgagcgaaatgtaaacagaataatcgttgtgttaaca
+acattaaaatcgcggaatatgatgagaatacacagtgtgagcatttcacttgtaaaatat
+ctttggtagaacttactttgctttaaatatgttaaaccgatctaataatctacaaaacgg
+tagattttgcctagcacattgcgtccttctctattcagatagaggcaatactcagaaggt
+tttatccaaagcactgtgttgactaacctaagttttagtctaataatcatgattgattat
+aggtgccgtggactacatgactcgtccacaaataatacttagcagatcagcaattggcca
+agcacccgacttttatttaatggttgtgcaatagtccagattcgtattcgggactctttc
+aaataatagtttcctggcatctaagtaagaaaagctcataaggaagcgatattatgacac
+gctcttccgccgctgttttgaaacttgagtattgctcgtccgaaattgagggtcacttca
+aaatttactgagaagacgaagatcgactaaagttaaaatgctagtccacagttggtcaag
+ttgaattcatccacgagttatatagctattttaatttatagtcgagtgtacaaaaaacat
+ccacaataagatttatcttagaataacaacccccgtatcatcgaaatcctccgttatggc
+ctgactcctcgagcttatagcatttgtgctggcgctcttgccaggaacttgctcgcgagg
+tggtgacgagtgagatgatcagtttcattatgatgatacgattttatcgcgactagttaa
+tcatcatagcaagtaaaatttgaattatgtcattatcatgctccattaacaggttattta
+attgatactgacgaaattttttcacaatgggttttctagaatttaatatcagtaattgaa
+gccttcataggggtcctactagtatcctacacgacgcaggtccgcagtatcctggaggga
+cgtgttactgattaaaagggtcaaaggaatgaaggctcacaatgttacctgcttcaccat
+agtgagccgatgagttttacattagtactaaatcccaaatcatactttacgatgaggctt
+gctagcgctaaagagaatacatacaccaccacatagaattgttagcgatgatatcaaata
+gactcctggaagtgtcagggggaaactgttcaatatttcgtccacaggactgaccaggca
+tggaaaagactgacgttggaaactataccatctcacgcccgacgcttcactaattgatga
+tccaaaaaatatagcccggattcctgattagcaaagggttcacagagaaagatattatcg
+acgtatatcccaaaaaacagacgtaatgtgcatcttcgaatcgggatgaatacttgtatc
+ataaaaatgtgacctctagtatacaggttaatgttagtgatacacaatactcgtgggcca
+tgggttctcaaataaaatgtaatattgcgtcgatcactcacccacgtatttggtctaatt
+atgttttatttagtgacaatccaatagataaccggtcctattaagggctatatttttagc
+gaccacgcgtttaaacaaaggattgtatgtagatggtaccagtttaattgccagtgggca
+atcctaagcaaaatgagattctatcctaaagtttgggcttgatataagatttcggatgta
+tgggttttataatcgttggagagctcaatcatgagctaatacatggatttcgctacctca
+ccgagagaccttgcatgaagaattctaaccaaaagtttaataggccggattggattgagt
+taattaagaccttgttcagtcatagtaaaaacccttaaattttaccgattgacaaagtga
+gcagtcgcaataccctatgcgaaacgcctcgatagtgactaggtatacaaggtttttgag
+ttcctttgaaatagttaactaatttaaaattaattaacgacatggaaatcacagaaccta
+atgctttgtaggagttatttatgctgtttactgcctctacaaccctaataaagcagtcct
+aagaatgaaacgcatcttttagttcagaaagtggtatccagggtggtcaatttaataaat
+tcaacatcgggtctcaggatattcggtcatataatttattaagggctcttcgagtcttac
+tctgagtgaaattggaaacagtcatccttttcgttgtgaggcatcttacaccgctatcga
+tatacaatgcattccaccgcggtgtcccgtacacaaggaaacttgttaccttggggatat
+aagaaaactcacacgtctcattattaaactgagtacaatttttgcacgagaaagtaatgc
+aatacaatatgatgaaagccagctaatgaaaagggatggaacgcacctcggatctgttgc
+actggattaaaatccgattatttttaaaaatattcagtgctagagcatatcaggtctact
+tttttatctggtatgtaaagcccacggagcgatagtgagatccttacgactcaacgaaaa
+gttataacataactcccgttagccaaagcccaatcccgattactgccctaccctaacgtc
+tgccatctaaatatcgaacttgttatgatcaatgtgactacctcccaccctttccccttc
+atttgttccactggggataagctagcgttttcagaatcaatgcaataagaatagccaatt
+gtctcacttcatcagagctcttggcaattccaggcgctacgtggttctggaatatattca
+tttttcaaatagtaatacgtttagtgttgctattgtctacacgtttggatattacgttat
+gtgagcggacatcaatagttgtctaactctttagtaagccagagatagcactcttagcga
+atggataccatcttccataagtttagttaatagtccgaaacaactgcttcgagcatattt
+gaacctccttgtaggcaaatagcctcttcaaagcaatcttactaatagatagagtttgtt
+ttaagggactactagaaatgggacaatcttaatagtatgacctaaactgacatttaaaga
+tatatccaggtggcaagcataaagatcattgcgccacctccaccgtgggattacttatca
+gtcgatatcctatatgctaagtttgcgacggcagaatacaaactaagctgagttgatgct
+aaccttacctatgataccccattggaccggttaacagccctacttattccaaataaaaga
+acttttatgctgtagaagctattatagtgatgcctggtaacttcagtatattaaaatgac
+acacatacgccatatagagctcctggaactttgaataatgagcgaacttcgaagttgaag
+agcaagaaaccatatgtcacggttgcctaaagcccggtaaccagacatgtgctatcattg
+atcattatcgaggttttcataaccttgacccattatcggctgtgcgcggacaagtactta
+aatcactagtttcttcacctgcttatcggtaagaaataaggttggcaaagaatcgcataa
+gacggacgtagagccgcagcgttgtgcgagtccaggtgcatgcgcagcaataggatttta
+aattttgttccatttttaatttagccgtaaggatgtccgtaaatgattgaaaattggatt
+caatctttgggcctatgctactggaacctgatcgacaaaatttcaaacatacgttaactc
+cgaaagaccgtatttttgcggctagaatagtcagtcgcttggagccatataccttaccac
+ttaaacgacgtgctcctgtagttgaaatataaacagaacacaaagactaccgatcatatc
+aactgaagatctttgtaactttgaggcgaagcaccctcttcgagacaactaagagtaaag
+taccgggcgccgcaaggagtcgattgggaccctaaatcttgacgaattgctaagaggctc
+agagctaccactgtaatttctctagagcccataataaatgaacgatacatccgtaggtag
+cacctaagggattataatggaagccaaatgcagttaataatattatatactggcgtacac
+gattcgacggatctctcacatagtgattcacgacccccccctttgattgacacagcgtca
+gcattttgcaagaacgatcttctgcatagggtgcgccaccgtaaggatgacgtcgaagct
+acaactgggtataatttaccatgcttccctgatgctgagtgcaatacactaagaatgagt
+ttttaccccatatcaccagtatttgttctgttattgcgaagaaatggctatgctgagttg
+gcgactaaagtcacccatcctttttattaggtaaccccctcccttaaactaactgatttg
+ctggagctgccctgcatacatatactttatcatttatggacgtccgtgacgcttattatc
+caccatagtcgatatgctacacggattcattaatggatcgtaggagtttaagttatattt
+actaagatcggtctcggctactatcccgccttacccggcgctatttacggccatttttaa
+tatattgacggtaattattcctatggtttcgaccgcacgtccttggacaagaaagaatgg
+caaaaaaaatgtaaaagaaaaaaaatattgagtccctaccatcatataaaaaatatgtga
+tgagtaacttgacgaaatgttagtggttattaaagactatctattacaccttttgttttc
+tgtcgtagtatattaaagtctagaagccttacaggaaaatcagggttatacagccgatac
+tccgcagcatgaatcatcgaggaggtgtcctaccatcgcgccttgtaatcttgtctgtgt
+atactgtatttagaccttttatacaaagtaaatatctcggctttatgtgattgggagggg
+cctactcaaacatgatgacttgacctaataatcactgtgcgggcgtcttatgactagcta
+ttccttgaaatccaccaccaaatggttaatatgtaaaaactttgacgatgaaacaaggtg
+aatgtgtagttactttgtgtaattagctgcgtcgagcattgcttgtaaaaccgtcaatcg
+cacacgttacttccataaaatttctacgaatacacccttcttaaaaaaaacgtaggaatt
+cacgagtttaacaaacgataactgtataaagtggaagtccgaagaaagcagatgcccgaa
+ctactcgaagatgtttcgttttcttaaccataggggcttcttaatggcccactacgcaca
+ttttgttcaagcccgagagggacatccccattacgggagtattactaaaactgttccgta
+atacgttcagcaagggatgaaaaaggccactgctcaagttattgacgtgggagtattaca
+tcggaagcctgaatcccacactatgatggtctgtacaggcctagggactgcgtctagacg
+gtattaccggcttctaatcatacgatcgtgagtcttaacgggaagtaaggctcacaccta
+ccccaaaccatttatctatgtaagtataaaattgtgcgtaagtgttcaaagtggacaata
+aagacgtggcaaaaacccccgcacataagccgctttagatttcacaaataccaatgcggt
+taaaaacatccttgagtcgtacatacaccatactcgcgttaaacggatataacagaagat
+aataaatccggatgtggagtcggtgtaactatagaaagccaagtgaaataatgcttacca
+gtcatttagctatacggctttcatttcatgtcaagagggtggagtttgacctgtacagtt
+gatatatcaccgatacttagaactcacctaaagctaaaattgctcgcagcgtgtaatccg
+catattacaaacaatagatgggattcattatacataagacacgatgatctgctttttcag
+gttgcgagatgttgcctatcgtcaatcgagtcctgccttacaccacttaaacaaaagtat
+tgacagggaacctattttcgaggtattatatagtccagcttgaatatcaatttgacagtt
+aacctagtgaaaatcagtaagaggaaatacgccacattctccagtgaaattctacgggtt
+atcgtctagtccaactatcaattataactcacgagatataagtaaattctcgtacttggc
+ctgatttttattatactttggatccttagtaaacaggaagggagaaaccttcaacgaaaa
+acactggattttgttttactctcaaagctcttatatgacggaaataccctgtcaagtctt
+aactttattactagactaatgaaatgggcttggggtggccagaatcatagtacaatttag
+cggatacactattcggactttcctatcggctgtctggttggataagtatggggactaata
+ggctagacatacctatacttaaactatacaggcgtcatctatctctgcaactttggagtt
+ccctgatgttctcccgccctttgggttcacatcttctataccgacacccctaataacgat
+tagtttgtgggttagagtaaattaatacggttaatattaatgtatcgttgaaaagctggt
+gtcgccaataaggtaaccggctaggcagagtatatgtcacgaagtataactaccctaatg
+ataagctgtaggaataaaattaatgctgtctctaagcgaagagatatttccgactctgtt
+ttaatgacgaatctcattacttctgacttgcaaatgttcaatatggcacggtttcacggc
+acctttgtgacgcatataatgaacttagaagattataacgacggaactttatatgataat
+ccgttacgattaaagaatctgttaaatatcataatggcattcagttctagaccgtgcatc
+atggtaaacttactttctctgcatggcgacatacatttcgctattcaaattcgcgtgtgg
+ttacacccactcgcacctttggaatattaagagaagatgatcagaaaatccattcgctca
+atttttctgacgtacgtctaatttatcctaggagacaaatcgttttatgtctctcacatt
+tttgaagaaaggttcgagagacaatactcaggtcctgaactgctagaagatactcggtgg
+agcgtggcaacaatgaaaaactcgtgacataaatgaatgatacttttccaagttcagtta
+agtgaatatgtttaacatacccggcttttcgatcttaagctgacgctggacgtgcgagta
+atgtcagtctcttacatacactagtgactccaagtttcgtcaaaaacgccccctcccttc
+tcgagcccactcacgctatgtattgacgcgaacttgttcgggatcagacttttcaggagt
+tcggtcgcgtgtccctatgtgctaatatataagttagatcgcattagatgctaatctgaa
+tacttatagacgaccttcaacgagaacgggtaccaccttgaggctagagttaggtgtgaa
+acgacaggtagggacatataaaatttgagtgcggctttagttaagggtttaattacctac
+tcaaacatcacgctcgcgcccttcgtacgtaatcgaccatctagaggctaaggggactgt
+actaggtagtgattaatgatatcctagacgcacgtgccttagatcttcagactctgatgg
+tccgcgatcaccgtaattgtagtcctccaactcgatcactttgttggcgtcaaagaaatt
+acgatatctaaatacttataatacaataaccaaggatgagaatgactcatcgcgttggag
+ttatattgcttgaagttctatggaatgaaagcacgttatctgccgtcccaatatctccag
+tgagctaattcattggacggtccactttgatcaatccccgaggagatgttcggacacttt
+agtctgtaacacttagcgttgagaccacgaacaattgattactcagtcttgaaggtgttt
+tccaaagttcattttaaataagactacgataggcctttcctattgatataaactacccgg
+ctctgttgttcgtgtgagtcgtacttctctgtgtttttctgattatagcaagattcgatt
+cttagtgtaaacagcgatttttatttgacccgtcaatgagaagcgcataggatctaagca
+aaattatcaagttgtgccacaaggtaagatctttccagttattgcaggtaggatgtatcc
+cacgttgatagtatgaggtctgacgtcaactgtctaggagagttgaccgcgtgcgggtac
+accggatttgcatcgatgttgagaacgcagaactcccactgtcgtggcggcgttcctgat
+atttagcaagaggcgttgataaagccctcatcatctagatctcgacctcatctgccctct
+tgctccatcattttctacacagactactttcctatctacgttagtataattgctttctat
+cttagtatcatttagagcttctccgtcaacaggttcgtgctattaaagttagtacgaaag
+ggacaacttgtagcaacgcatttaatcggttttcgactacttcgcacaaaatcagataaa
+gaagtttgtcattctattagacattgaattgcgcaattgacttgtaccacttatgatcga
+acactgaatcaagactgtgattaactaaaatagacaagccactatatcaactaataaaaa
+cgcccctggtggtcgaacatagttgactacaggataattaattggactggagccattaca
+ttctctacaatcgtatcacttcccaagtagacaactttgaccttgtagtttcatgtacaa
+aaaaatgctttcgcaggagcacattggtagttcaatagtttcatgggaacctcttgagcc
+gtcttctgtgggtgtgttcggatagtaggtactgataaagtcgtgtcgctttcgatgaga
+gggaattcaccggaaaacaccttggttaacaggatagtctatgtaaacttcgagacatgt
+ttaagagttaccagcttaatccacggtgctctactagtatcatcagctgtcttgcctcgc
+ctagaaatatgcattctatcgttatcctatcaacggttgccgtactgagcagccttattg
+tggaagagtaatatataaatgtagtcttgtctttacgaagcagacgtaagtaataatgac
+ttggaataccaaaactaaacatagtggattatcatactcaagaactctccagataaataa
+cagtttttacgatacgtcaccaatgagcttaaagattaggatcctcaaaactgatacaaa
+cgctaattcatttgttattggatccagtatcagttaaactgaatggagtgaagattgtag
+aatgttgttctggcctcgcatggggtctaggtgatatacaatttctcatacttacacggt
+agtggaaatctgattctagcttcgtagctgactatactcaaggaaccactgctcaaggta
+ggagactagttccgaccctacagtcaaagtggccgaagcttaaactatagactagttgtt
+aaatgctgatttcaagatatcatctatatacagtttggacaattatgtgtgcgaaactaa
+aattcatgctattcagatggatttcacttatgccttagaaacagatattgcccgagctca
+atcaacagttttagccggaaacaatcgaagcatagggacaatgtatcttttcctaaattg
+ccatgtgcagatttctgagtgtcacgaagcgcataatagaatcttgtgttgcctcaactc
+gttgaaaagtttaaaacaatcgcagcagtctttttggggtctactgtgtgtttgcaaaat
+aactgaaagaaacgcttgaacaactctgaagtagctcgagtactcattaaagtgtaacac
+attagtgaatatcggccaatgaaccaaacgcttcccggtacgctatctctctcatcggga
+ggcgatgtgcaggttatctacgaaagcatccctttacgttgagagtgtcgatgcatgaac
+ctcattgtaacaatagcccagcaaattctcatacgtgcctcagggtccgggcgtactcct
+ccatggaagggcgcgcatctagtgttataccaactcgctttttaactactatgctgtagt
+tctacaggcatagtggccagtattttctaacttctctggatagatgctctcactcctcat
+ccatcacggcttcagtttacgtcttacttgcttgttcagcaacggatggaggcattaagt
+atcttcactgttccctaaaattgctgttcaatatcaaagtaaggacgatacagggaaagc
+tcaagcacactcattgaatactgccccagttgcaacctcacttaatctgacaaaaataat
+gactactctaagtgttgcggaagcagtctcttccacgagcttgtctgtatcacttcgtat
+aggcatgtaactcgatagacacgaacaccgagtgagaaactatattcttgcttccgtgtg
+tgtgacaccaggtaattgatgcggatataagctggagatcactcacgcccacacaaggcg
+ctgctacctctttattccaatgtgtaagaatttgctaacttcatttctagaccgcagctt
+tgcggtcataatttcacggtacggacccttgggttagagacttgataacacacttcgcag
+tttccaccgcgcacatgttttagtggcttctaacatagaatttttgttgtgacataaaga
+gtgcgtgggagacttgcccgaccgttaagccataatcaattgaaagccccgtgagtcaca
+tctaattggttgtactgcgcatttagctatcctttagctgactcgaagagattcgattcc
+taatataggttaattagatggctgccgcgcgaagtaaaacgtgaaaaacgtagtgcgcag
+atctgcataactcgcgcttaattacttatgagtagttccaagttcgctacgttatgagag
+agattggaattaagcaaatatgttttatggtgattttgggatgagaaggactgctaagta
+cggctactaaacaaatttctaaaaccgccatctaccttatcttggagacatttaagttgt
+atatgtcactagtctagcttttgtctgtgggacgcgttctcggaatgagggaaatgcaag
+agccgattcatcaaatgcttatctaagaaagtagtggactattacaccaagcacgaatgc
+cagggaactgctttcttgctcaggacctcgcgacaaggtaccccgcataagtcctagaat
+tacatttggtcagcaatgctgacatttgaccgtgaaaacataattttaatcagaaggcag
+ctcacccgcttgctctagatcttatctttgtatgaatgtcagaatttactgcaatatccg
+ttccgaatagtgagggcttagtatagttctctgtatacaggtcacatcaaactccccctg
+tcctagtacagctctgagctttaattaattgcatacatttccttcaatcatcagatgaaa
+acaccgcgaatcatgctcttctcgtatagggcaagagaagcaacaaacaactagcccgac
+tcacgttcatccgccgtatccttgttcagttcttactccgtattaggtcagcgaaatcta
+atcagaataatcggtcgcgtatcaaaattaaaatcccgcttgaggttgacaattaaaacg
+ctgagcagttatcggctattagatagtggggtgaaagtaattggctggaattatgttaaa
+acgtgatattaagctaaaatacgctacttgttgccgacctaattcagtcattcgatattc
+agttagagccaagaataacaagcttgtataaattgaacggggtgcactaaacgatgtgtt
+actctaatattcagcttggagtatacctgaaggcgaattcatgtatcggccaataataag
+acgttgaagatcacaatttggactagcaaaagaaggtgatttatgcgtggggattgagtc
+cactgtacgagtacggtctctggaaaattataggttcagggaatataaggaagtaaagat
+aattaccaagagatttttggtatcgctatgacccagaggtgttctaacgtctgttttgat
+ccgcagaatttctgcctcaatgcatatttgacggacttgaactagagcctctaaagttaa
+atggcgacgcaactgttcctaaacttcaattattactactctttttttcctagggtattg
+tagaggccagtggacaaaataaatcaaatttaagatgtttcggacattaacatcccccgt
+agcatagaaatcatcagttatccaatctctcatcgagcttttacaatttctgctggcgct
+atggacagcatatgccgcgagacctccgcaagactcacttgatcactgtaagtatcttca
+ttagaggttagagcctatagttaagctgctgacctagtaaaattggtattttctaatttt
+attgctcaagttaaaggttagtgaagggataatgacgttatttttgaacaatgggttgta
+ttcaattttatatcacgaatggaacccttcattcccggcataatactagacgacacgaac
+aagctccgatctatcagccaggcacgtgttaaggtttaattccggcaaaccaatgaagca
+tcaaaaggtgacctgatgcaacttagggtcacgatgagtttttcaggactacttattacc
+tattaataagttaacatgagccttcataccccgtaagacaatacatactccaccaattag
+aattctgagccatcttatctttttgtatcatcgaagggtatggccgaataggttaattag
+ttactcctaacgtctctacaggcatgcatttgacgcaccttcgaaaatagtcaatctctc
+gccacacgcgtctagtatgcagcatcaaaaatatagtccacggtttccggattaccaaac
+gcggcaaagagaaacattgtatcgacggagataacttaatacagaaggaaggggcatctt
+cgaatacggatgaataattctatctgtttattctgacatcttgttttcaggttaatctta
+cgcattcaaatgacgcctgccccatgcgtgcgcaattattttctaatattgacgagagca
+atctcactccttttgggtctatttatgttttattgaggcacaagcctatacagaacaggt
+actattaaggccgtgagtgtgagactcaaaccgtggaaacaaaggatgggttgttcttgg
+tacaagttttagtgcatgtgggcaatccttaccaaaatcagatgctatccttaactttgg
+gctgcatttaagatggcggttggaggcctgtgagaatcctgcgtgtcatctttaatgacc
+gaattcatccatgtagattcagatcacacactcattccttgatgttgtctaaacaaaagt
+tgttgtggacgcattggagggagttaagtaacaacttgggatcgcatacttataaaaatt
+atatgttaaactttcacaaacgctgaagtccaaagtaactagcccaaacgcctcgagagt
+cactaggtattaatggtgtttgagttcctgtgaaatagtgttcgaaggtaaaatttatgt
+accaaatcgaaagaacacttaataaggcttgcttgcacggaggtatgatgtttactgact
+ctacaaccctaattttccagtacgtacattcattccaataggttagttctcaaagtgcta
+tacaggctcctcaattgatgatatgcttcagccgctctatggatattagctcattttatt
+taggaagcccgcttagaggcttactatgagggaaatgccaaaatgtcatacttttcggtg
+tgtcccatatgacaccgctttacatagaatttgaattaaaacgcgctctcccgttcacta
+ccatacttggtaccgtgcgcatattacatatagatataggatcattttttaaagctgtac
+taggtttgatcgacaatcttatgctatactatatgatgtaaccctcataatcaataccga
+tcgtacgatcctagcataggtggcaagcgattttatgccgattattgtgttaaatagtct
+gtgagtgtgattatcagggctacgttggtagaggggttgtatagacctcgcacacattgt
+gacatacttaacaatatacgaaaactgatataataaatccccttacccaaacaccaatcc
+cgttgaatcaactaccataacgtctcccatataaattgcctacttgtttgcataaatctg
+aatacataacaccattgcaccttcttgtgttccaatcccgttaagattgccttgtcagat
+gatatgcaagaacaatagcatttgctagcaattattaacagctcttcgaattgcctccac
+ataacgcgggagggtatattttaatttggcaaatactaagtactgttggcgtcatatgct
+attaacggttggatattaagttatgtcagccgtaagcaagagtgggcgaaatattttgtt
+acccagtgagagcactcttagagtttggatacaataggccatatgttgacttaagaggac
+gtaactacgccgtacaccattgttcaaccgacttcttggcaaatagaatcgtattagcaa
+tcttaagaatagagacacgttcgtgttagggtatactacaaatccgaaaatcttaagagg
+atcacctaaactgaaatttatacatatttcaacgtggatagatttaacataattcagcca
+cctccaacctgggagtaattttcagtagatttactagatgattagtggcccaacgcactt
+gactatataagatctggggatcctaacctgacctatgagacaaaattggaaacgttaaca
+gcccttatgtgtacaaagaaaagtaagttgttgctgttcaacagatgatagtcatgacgc
+gtaacttcactatagtaaattgaaacaaatacgcaatttagacagaatggtacggtcatg
+aatgacagtaattcgaagtgctagaccaacttaaaataggtaaacgtgcccgaaaccccc
+cttaacagaaagctgctatcatggtgcagtatcgacgtgttcagaaacttgtaacttttg
+agcaggtccgagcacatggaagtatatcacgtgtttctgaaccggcttatccctaagata
+tatccgtcgcaaactttcgatttagtcccacgtagagcccaagcgttgtgcgactccacg
+tgcatgcccagaaatacgagtttaaatttggttacatggttaattttgaccgaagcatcg
+cactttatgattgataattggattcaatatgtcgccctatgcgaatgcaacatgatccac
+aatttggctataagacgtttaatccgtatcacactttgtttgcggctagtatagtaacgc
+ccgtgcaccaagagtcagtaacaattataagtactccgcaggtacttcaaatataaaaac
+taatcaaacacgacccatatgatcatctgaagatatttggaactttctcgacaaccaccc
+tcgtactcaatacttacactaatcgacaggcacacgcaacgtgtacagtcgcaccatatt
+gagtcaagatttgcttagtggcgatgagcgtacacgcttatttctctagtcacaattagt
+tatctacgagacatcacgagggagcaaataagcgatgttatggctacacataggcacgta
+tgaatatgatataagccagttaaacagtcgaaccatcgagcaaattctcatgcaccaacc
+cacacgttgaggcacaaagagtaagctgtttgaatgtaacttcttctgctgagcgggccc
+caacgtaaggatcaactagaagagaaaactcggtattagtttaaatgcgtcacggagcat
+gagtgcatttcactaagaatgtctgtgtaaccaatataacatctatttgttatctgattg
+cctacttatggctttgcggtcgtggcgactaatgtctccaatccttttgaggtcggtacc
+aactccctttaaattacgctgtgcaggctcatgcactgcatacatatacggtagcaggta
+gggacctcacgcacccttattataatcaatagtagttatcagtcaacgaggcaggaatgc
+tgaggtcgaggtgttggtatattttctatgtgccgtctaggcgactatcacgcattacca
+ggcgagatttaagccaattttgaatatagtcaacgtaatttttactatgggttccaccga
+aacgccttgcacaactaagaatcccataaaatatcgatatcaaataaaagattgtgtcaa
+taccttcatatatattttttcggttgactaacgtgaactaaggttaggggttttgtatgt
+ctatataggaaacagtttcttttctgtcctactttagtaaagtcttcaagccttactcca
+aaatcacggtgattaagccgttactcagcagcatgattctgcctgctcgggtcctaaaat
+ccagccttgtaagagtcgctgtgtattagctagggagacctttgttaaaaaggatatatc
+gcggcgggatgtgagtgcgtggcgcatactcaatcttcagctcgtgtcattataatatct
+ctcccccacgcttttcactagatatgccgtgtaagcaaacaccttatgcttaatttcgaa
+aatattggtacttgaaaaaagctgtaggggtacttaatgtctggtaggagatcaggagag
+aattgagtgtaaaaccgtaaagccctcacctgacttcatgtaaatggcttagaagactcc
+atgatttaataaatactacgaaggaaagactggatctaaagataactctagtaaggccaa
+ctcccttcaatgctgttgccagttataatccaagagctgtccttttctgaaccatagcgg
+cttctgaagcgaactagaagcaaagttggttctagccagacagccacataccctgtacgg
+gtgtattactaaaactggtccggtattagttcaccaagggaggaattaggcaaaggatct
+aggtatgcaagtcggagtattacatccctaccctgaatccatcaataggttcctctgtac
+tggccttcgcaatgagtattcaaggttgtacagccgtataataataagatagtgactatg
+aacgggaagtaacccgctcaccttccccaaaacattgttatatctaagtattaaagtctg
+ccgtagtgttaatactcgaaaataaacaactggcaaattacaccgcacttaagccgcttt
+tgatttatatttttccaatgcgcttttaaaaataattcagtcctacatactaattaagac
+ccttaaacggagatatcacaagttaagttttaaccatctcgactaggtggaactatagat
+acccaactcaatttatcattacctgtaatgttcctagaaggattgcatttcatgtcaaga
+cggtggagtttcacagcgaaacttcagtgtgaacagattctgagaaatcacctaaaccta
+ttagtcagagcacccggttagaaccagttgtcaaaaaatagagcggttgcatgagacaga
+agtaacgatgagatccgttgtaacgttgagacatctggcctatcgtcaatacagtcctcc
+cttaaaaatatttttaaatactaggcaaacccaacataggttagtcctatgtgatacgcc
+acatggtatatcattttgtaacgttacctagggataatcaggaagtggaattacgcaaaa
+gtagacagtgaaatgcttagggttatagtctagtccaaagataaaggataaagcacgtca
+gagaactatattagccgaatgggaatcattgttaggagactgtggatcatgtctaaaaag
+caacgcagaaacagtcatcgaaaaaatctcgtttttgtttgaatctaaaagagctttgat
+gaccgatagtacctgtatactagttactgtattacgtgtctaatgatttcggattggggt
+ccccagaatcagacgtcattgtagacgattcaagtttaccaatttaatttcccagctctc
+cttggagaactatcgccaataattgcagtcactttccttttctgaaacgataaagccgtc
+agagttctctgcaacgttggacttacctgaggttctaacccactttcggttctaatagta
+gttaacgacacaacgaataacctttactgtggggctttcacgatattttttcgcttatta
+ttaatggttacgtcataagctggtgtccaaattaaggttaccggcttcgcagagtagttg
+tatccaagtataacttccctaatcataagatcgaggtagaaaattaatgctgtctctaac
+cgaacagatatgtcccactatgtggtatggacgttgctaattacttctgaagggaaattg
+gtcattatggatacgtgtctaccatcaggtcggacgcagatatggttctgtcttcagttg
+atccaccgttctttataggataataactgacgattaaagattatggtaaatagattaagc
+caattctcttcttgtcagtgaagcatccttaactgacttgctctgcagcccctcatacat
+ttagctattcaaagtaccggctcgtttcaaactctcccacctttggaagaggttgtcaac
+ttgataagtatatcatttacagcattttttcggacgtacctctaatgtttcattgcagaa
+aattagttttttctatcgcacattttgcaagtaacgttagagacacaattatctgcgaat
+gaactgctagatctgacgaccgggagcctcgcaaatatcaaaaaagactgacatatatca
+aggagtcgttgacaagtgctggtaagtcaattggtttatctgtcccggcgtttcgatctt
+aagctgaccatgcacggcagagtaatgtcactctcgttcttacaagtctgtctccaaggg
+tcggcaaaaaagacccctccattctcgagcccactcacgatatgtagggacgacaacttg
+tgcggcttatgaattgtctggactgcgggcgagggtccatatctccgaagttagaaggga
+catacctttagatgataagatcaattcttattgacgaaattcatccacaacggggaacaa
+cttcaccctagacttacgtctgaaaagacacctagcgtcttataaaaggtcagtgccccg
+tttcgtaaggctggaattacctacgcaaacttaaacctcgcgcccttccttacgtatcga
+caagatagaggctatcgcgaatgtactacggaggcatgaatcatatactagaaccaagtg
+cctgtgatattaacaagatgatccgacgcgagcaccgtaattctaggcataaaactccag
+caatttgggggccgaaaacaaatgacgttagctaattaattatatgacatgatcaaagga
+ggtcaatcacgcatcgagttcgacgtatattcattgaacttcgtgcgtttgaaagaaact
+tttatgaaggcaaaattgatcctgtctcctatttcatgcgtacctcctagttgataattc
+cccgagcagtggttaggacacttttgtcggtatcaagttccggtctcaaaacgtaaaatt
+ctgtaatctgtatggatggtctgtgaattagttaatttttatgaagtcgtcgagacgcag
+ttcctattgatttattctaaacggagatgtgcttcgtgggactcggaagtagatctgtgt
+ttatgattattgctactttagatgctgactgttaactccgtgttgtttttcaaccgtata
+tcacaaccgaattggatagaacctatagtttcaagttctgccacaaggtatcatatttac
+agttagtgctggttgcttctttcaaacgtggtgagtttgtgctatcacgtcaacggtaga
+gctcagtggaccgagtgcgcgttcaaccctgttccagagagggtgtgatagcacatatac
+cacgctcgtcgaggcgttcatgatagtttgcaagagccggtgttaaacacatattattat
+tgttatccaactaatcggacctatgcataaagcattgtctaaacagaataattgcctata
+tacggtagttttagtgatttatatcttagtatcagttagagcttcgaactcttcaggttc
+ctcatatttaacgttcttcgaaagcgaaaacttctacaaacgaatgtaagcggttttcca
+agtagtacctataaatcacagaaagatctgtctcagtatagttgaaatggtattcagcta
+gtgacgtgtaccaattatcatagttcactcaagcaagacgctcattaacgaatatagaca
+agacactatatcatataataaaaaagaacatggtgctcgaacatagttgaattcaccata
+ttgaaggggaatgctgacatgtaattcgctactagacgatcaattccctacttgtcaaag
+ttgaactggtacgttcttggaattaaatatgattgcgctggaccaaattgcgacttcttg
+agtttcagggcaaacgattgagccggaggatgtccgtctcttacctttcttgcttatgat
+aaacgacggtccctgtacatcactgggaattctcagcaaaaataattgggtaaatcgaga
+ctcgatgtattcggccacaaaggtgttagacgttaaagattattcaacggggcgataata
+ggatcataaccggtatgcaagcgcattgaaagagccatgagatccttatccgataaacgc
+tgcacggtatgtgcagccttattgtcgatcacgaatttataaatgtagtctgggctgtaa
+gttgaagacctaagttataatgaagtgcaataccaaatcgattcatagtggattatcaga
+ctcaagatatctcctgataaattacagttgttaagatacggataaaatgagatttaagat
+tagcagcctctaatctgtttcaatcccgttggaatgtggtatgcgatcaaggttaagtta
+aaatcaagcctgtcttcagtcttgattcttgttctgccatcgcatgcggtctacgtgagt
+taatatgtagcttacgttctagcttgtgctaatctgagtatagattcgtagaggaatatt
+atcaagcttccacgcctcaacgtacgtgtattggtcacacaagacactaaaagtggaagt
+agcgtaaactatagtctagttgttaaatgctcagttcttgttatattcgatatactcttg
+gctaatttatgtctgagtatataaaattaatgatattaacttgcatttcacggatccctt
+agaaaaagattttgaccgagcgcattataaacggttacaccgaatcaatagaagcatacc
+caatagctttctttgaatttattgcctgcgcaacttggctgactctctagatccgaataa
+ttctatatggtcgtgacgaaactagttcattactgtttaaaatgccaacatgtcttttgg
+gccgataatggctctttgcaaaattactcaatgatacgattgatcaaagcggtagttgct
+agtggtagcatgtaagtctatcaaatgtctgattatccgaaaatcttccaaaagagtcca
+cgtaccatatctatctcatagcgacgcgaggggaaccttatctaactatcattccattta
+ccgggtgactctcgatgcaggatccgattgggataaattgcccagaaatggctcattcct
+gactaagggtaaggccgttctcagcaagggaaccccgcgaatctaggcttataccatcta
+gattgttaactacttgcctgtagttctacagccatactggacagttgtttctaaatgatc
+gggattcatgctagcactcctctgaatgcaccgcgtaagtttaactattacgtccgtggg
+cagataaggatggaggctgtatgtatcttaactgttacctaatatggctggtaattatca
+aagtaaggaccttaatgccatagcgctagcaatcgctttgtatactgaccatgtgccaac
+ctctcttaatctgtaaaatataatgtcttagctaactgtggacgatcatgtctctgccta
+gagcttcgctgtatcaattcctatagccagcgtactagtgacacaacaacaccgtgtgag
+aaaagatattagtccttacgtctgtctctctacagcttattgatgaggattgaacatgga
+catatagctccccctcaaaagcagatgctacctctttattccattctcgaacatttgccg
+aacttaatttcgacaaacctgaggtcacgtcttaatttatcggtaacgtcacgtcccttt
+gagactggataaatatattaccaggggccaacgagcaattgttggaggcgcttctataat
+acaaggtgtcttgtcaaagaaagacggcgtgcgtctcgtgcaactcacttaaccaatatt
+aatgtgaaacccccctctctcacatcttatgcggtgtactgccctggtacatttcctgta
+caggactccaacagtgtagattcctaagatagctgttggagttgcctcacgccagatcga
+aaaactgaataaactagtgagctgagctgcagaaataccgcttaattacttatgactagt
+tcaaagggacctacgtgatgtcagacattgcaaggaagaaattaggtttgtgcgtcattt
+tggctggactagcactccttacttcccctactattcaaatgtcgtaaacagcatgagaca
+ggatcgtgctgacatttaaggtctattgggaacgaggctacctttggtcgcgcgctcgcg
+ttctccgaatgaccgaaatgcatgagcacagtatgcaattgcttatagatctaaggtctg
+gtcgttgaaaccaagcacgtaggcctgggaaatcagttcttcctcagcaactacacaaaa
+gcgtccaagcattagtacttgtagtaaatgtccgaacctatgcgctcatttgaaagtcaa
+aaaatatttttaagcagtaggcacctaacccgattcctctacttagtagctttctttgat
+tctcagaattgactgcaatatcactgcacaattctgtgccattactagacttctctgtat
+taacgtctcatcttactaacactcgcctaggacacatctgagagtgaagtatttcaatac
+atttactgaaatcttcagttctaaaatccccgaataaggctcttatcggtttggccaaca
+caagaaaaaaacttcttgcaccactcaccttcatacgcaggagcctggggaacttagtaa
+taactatttcggcagacaaagcttataacaagttgccggcgcgtataatatttaaaagac
+cccttgagctgctcaattaaaacgctcacctggtataggctattagatagtgccgtctta
+gtaaggggcgggaattatcggataaactgatattttgataaaataaccgacttgttcacg
+acataagtcactaaggagattttatctttctccaaagtatatcttccttggataatttca
+aagcgctgcaatttaagttctgttactagtttatgctgctgggaggtgaccggaaggcgt
+agtaatctagaggcaaattataagaagttcatcatatcattttcgactacaaaaacaagg
+tgttgtatgccggcgcattgtgtaaactggacgagtaccctagatggaaaattatacgtt
+aagccaagatttcgatgtaatgataattacctacacatttttgctatccataggaacaag
+agctgttctataggctcgtggcatacgaacatttgctgccgctatgaatattggaagctc
+ttcaactacagactctattcttaattgccgtcgaaaatgggccgaatcggctattattaa
+tactcggtttttccgaggggattgttgtcgacagtcgtaattattattaatattgatgtt
+ggtgaggtcatttaaatacaaccttgcagacaatgaataagggatccaatctctcatact
+ccttttacaattgctcatgcccctatgcaaaccttatgccgccacacctccgcaactctc
+tcttctgaactgtaagtagcttcattactggtttgagactatactgaagctgatgacatt
+ctaaaatggctattttcgaatgtgattcataatgtttatcgtttgggatggcagaatcac
+gttatttttgatatagcccgggtattctattgtatagaacgtatgctacaagtcattccc
+cgaagaagactagaagtaaacaacatgcgaccatcgttaagccacgcaaggctgtagctt
+tatttcccgataacctatcttccataaatagcggacagcaggatactgacgctcaacatc
+agtggttatggtctaatttttaacttttaataaggtaacttcagcaggcatacacagtaa
+ctctttaatttataatcaaattagaagtctgacacttcttatatttttctatcatccaac
+gcgatcgcccattagcttattgtgttactaataacgtatctaaaccaatccttttcaagc
+tactgcctatattgtcaatatatacaaacaacaggatagtaggctgcttaaaaaatattg
+tcaaccgtgtacgctttacaatacccggaaatcacaaactttgtagacaacgagtgaaat
+ttatacactacgaagggccagcgtacaagacccatgaattaggcgatatgtttattctga
+catattggtttatccttaatctgtcgctgtaaaatgaagccgcccccatccctgcgaatt
+ttttttcgaagattcacgactgaaatataaatacgtttggctatatttatgttggaggga
+ggcaatagcctttactgttaaccgaagatttagccagtgagtgtgacactaaaacactgg
+aataaatgcaggcgttcttctgggtaaaaggtttagtcaatctcgcctataagttcatat
+agctctggatataattatctggcccatgcatttatcatggcgcttggtgccctgtgtgaa
+gccggcctctcatattgaaggtccgaagtattccatgtacattaagatcactctctcatt
+catgcatcttggcttaacaaatctggttgtccaagctttccaggcacgtatggtacaaat
+tcggatcgaatacttataaaaatgatatgttaaactgtctaaaacgctcatctacaaagt
+aaagtgcactaaccaatagagtctcaagaccgtgtaatgctggtgcactgaatgtgtaat
+acggttagaagggattagttatgttacaaatccattgaaaacttaagaagcattgcgtgc
+tcggagggtgcatcttttatcaagagactaacattattttcaacgacgtacatgctttac
+aatagggtacttatcaaacgccgagaaacgcgcctatagtgatgttatgattatgacccg
+atatccattggaccgaattttatgtaggttcccagcgtactcgcgtaatatctcggtatt
+gccataatgtaatacttgtcggtctctcccagatgaaaaagcgttacagagtatttcaat
+gaaaaacagcgcgcaacgtcaatacctttaggggtaacggccgctgatttcatatagata
+tacgataagttggtatagctctactaggtggcatccacaatcgttgcatttactatagct
+ggttacaatcataatctataccgttccttacatactaccatagcgggatagcgttttttt
+gccgttgattgggtttaagaggatgtcagtctcattatatccgattcggtgggagagccg
+ttgttttcaaatcgcacactttgtgacataatgtacaagataacaaaactgatataagat
+ataaactgtcaatatcaccttgacacttgaatcaaagtaaattaactcgcaaatataatt
+tgactaattgggtgcagatttctcaattaataaaaaaatggcaccggatgggcttacaag
+ccccttatcattcacttgtatcatgatttccaagaacaatagaatttgctagcaagtatg
+aacagagattcgaattgcatccacagtacgccggagcgtttattttaatgtggatatgac
+gatgtactgttggcggcatttgctagtaaccggtccttatttacgtagcgcacacgtaag
+catgtctgggagaaatatggtggtacaatctcagagaaagattacagtttggtttaaata
+ggacttatcgggtcggaagtggaacttaataagcagtacacaattgggcaacagacgtct
+tgcctattacaataggattacaatgcgttagatttcagacacgttcgtgtttggctattc
+gtcaattccctaaatagttagacgatcaactattatcaaagtgattctttgttcatcctc
+cattcatgtaacagatggcacactacgcataacgccgaggaattttaacgagatttaaga
+gagcagttcgggcacaacccacttgactttataacagctcggcagcataaacggtaatat
+gtgacaaatttccaaacgttataagaacgtatgtgtacttagaaaactaagtggttcatg
+ttcaacagatgtgacgcagcaagcctaacttatctattggttttgctataaaagaacaaa
+gttacacagaatcctaagggcttgtttcacacttatgcctagtgcttcaccatcttaaaa
+tagcgaaaccggcacgaatcaaaccttaaaacaatgcgcagatattggtgatggtgactc
+cgggtatgataatggtaactgttgaccagcgcccacctcatcgaagtatagaaagtggtt
+aggataaggatgagaccgaacttatttccggccataactttagattttctacctagtaca
+caacatcagggcggacacgaaaccgccatcacatcatataccaggtttaatttgcttaat
+gggggaagtgtcaacgaaccttcgaactttagcaggcatatggccattatatatggcccc
+agagcagaatgctacagcagacaaaatttggatttatgtagtttaatacctatcaaactt
+ggtgtgaccatacttgtctaacgacagtgcacaaagtgtaagttacaattattactactc
+agcagcttctgcaatgataaaatcttatcatacacgtcacatatgataatatctacttag
+ggggaacgggctccacaacctacatagtactcaatacttacactattcgacaggcacacc
+aaacctgtacagtcccaaaagattgagtcaactttgcagtactgcagatcacagtaatag
+cttagttagcgagtcaaaattagttttctacgagactgcacgaccgtgcaaatttccgat
+gtgttggctacaaatagcaacgtatgaatttgtttgaagccacgtaaactgtacaacctt
+agagataagtctcaggctactaaaaacacgttgtggcactaacaggatcatggttgattc
+ttacttattcggctgaccggcccaataagtaaccttcaactagaacagaataatcgggag
+tagtttaattcagtcaaggtgcaggtctcattgtaactaacaagctctgtgtaaccaagt
+taaaatcgttttcttagcggattccctacttatggatttgagctcgtccacaatattcga
+tacaagaagtttgtggtccgtaacaacgaaattttaattacgctgtgcagcctcatccaa
+ggaattaatagaaggttgatggtaggctccgaacgctccatgattataatcaagtggact
+gtgcagtaaacgaggaaggtatcctgacgtcgtggtgttcgtttttgttatttgtgccct
+atacgagtagataaaccatgaacagcacagtgtgaacccatggttgattttaggctacct
+tatttttaatttccgttacacagaaacgaattccacaactaacatgccattaatttttcg
+atatcttataaaagatggtcgaaattcattcatttattttttttcggttctcgaaagtca
+actaagctgtcgcgttttgtttctctttagaggtaaaagtggctttgatctcctacgttt
+ggatactagtcaaccattactccatttgatccgtgagtatcacctgtctaacatccagca
+ttatgactcctcggcgaagaaaagacacacttcttagagtcgatgtgtattagctaggga
+cacagttgtttaatacgatagtgagcccagggagggcagtgcgtcccccagtagatttat
+tcagctagtgtaagtataagatatctcacccacgaggttcaagtgatatgcagtcttaga
+ataatacttatcctgaatttcgatattatgggtacttcaataatccgctagcgctacttt
+atgtctcgttggacagcaggacacatggcagtcttaaacactaaagacatcacctgaatg
+aatgtaatgggattacaagaatcaatgaggtattatatacgacgtaggaaactctggata
+tatacagtaatctagttacgccatcgcacttcattcctctggaaacttagaagacatcag
+ctgtacgtggaggaaccagacccccgtatgtagccaaatagaaccaaagttgcttataca
+aacacacccaatgacaatggaccgctggagttcgtaaactcggaacgtagtactgcacaa
+acccagcatttagcaataggagctacgtatgcaactcccacgtggtaataccttcaagct
+atcaatatataggtgcctagctaatcgcattcgcaagcagtattcaagcttgtaaaccag
+tataataattacagaggctctatgaaacccaactttccagctaaaagtcccaattaaatg
+gttatttcgtacttttaaagtcgcccgttctgttattacgcgaattgattctactccaaa
+attaaacacaaattatcaaccgtttcatttatatttgtcaatgcagctgtttaaaataag
+gctctactaaattataattaagacacttattaccagatttctctagttaagtttgaacca
+gctcgactaccgcgaaagatacattcccttctctatttttcagttcatctatgggtcaga
+gaagcattgaatttattctattcaccctcgtcgttcacagcgaatcgtcagtgtgatcag
+tgtatgagaaatatcctaaaccgtttagtcagaccacacgcttagaacaagtggtctaaa
+aagactgccctggaaggagtaagaagtatacagctgatccggtgtatccttcagtcatct
+gccctatactaattacacgacgcaaggaaaaataggtttattttctaggcaaacccttca
+taggtgactccgatgtgttacgaatcatgcttgagaatgtgctatcgttaccgacggata
+ataacgatctccaatgaaccaaatgtagaatgtctattgattacccttttactattcgac
+ttagagataggagatagaacctcagtgtacttttttagccgaatgggaatctttgggagg
+tgaatggccataaggtcgtaaatccaaccctcttaaagtcttccatattatatcgttgtt
+cgtggaatcgataacagatttgttgacccatagtaaatgtatactagtttatgttgtaag
+tgtagattgttttccgattgccgtccaaactttatgtcgtaattgtagaccagtaaagtt
+gaccaaggtaagtgcccagcgatcctgcgagatcgatcgccaatttttccagtcactgta
+agtgtaggtttagataaagccgtatgagttatatcataagggcctcggaaagcagcttcg
+aaccaaagttcccttataatagtagtttaactataaaagtatatactggtctgtcgccct
+ttcacgatttgttttaccggtttatgaagcgttacgtcattagagcggctccaatttaag
+gttaacggcttccatgtgtagttgtatacaaggataacttaaagtatctgttcagcgagc
+tagttaagttatcctcgatagaacacaactcagaggtcccaagatcgggtttgcaacttg
+ctaatttattctcaaggcaaattgggaattatcgatacctgtataccataaggtcgctcg
+atgtgatgcttatgtcttctggtgatcctaccttagttagtgctgattaacggaacatta
+atgtttatcgttttgagatttagccaattctctgattctaactcaagatgccttatctga
+cgtgctatgcagcccctaagtattttacattgtaataggacacgctcctttaaaactcgc
+caaaaggtcgttgtggttctctactggttaactatataatttacagctttgttgagctag
+ttcctctttggtttaagtcctcaatattagttggttcgagcgataagttggctagttacc
+ttagtcactatattagatccgaatgttatgcttcatctgaagaccgccaccctccaaaat
+ttcttttaagactcacttattgcaaggtgtaggtgaattcggctcgtttctcaagtggtg
+tatctgtacacgagtttccatattttcatcaacagccaccgcacacttatgtcactctag
+gtattaaaagtcgctctacaaggggacgcaattaagaaacagacatgctagtcaaaaata
+aacatagcgaggcaccactaattcggccgcttatcaatgggatgctctgcgcgagacgcg
+ccagagctcagtagttagttcggacatacatttacttcagatgatcaattagttttctac
+aaatgcttactctaccccgaaaaaagtcaccagactcttacgtctctttagtatccttcc
+gtcttatataaggtcagtcccccgtttcggtaccctggaatttactaagaataatgaaac
+agcccccaaggacgtacgtttacaaatgatagaccagatcgcctagcttattccgacgca
+tgttgcatagaattgaaccaacggaatgtgagagtaactagatgagccgaccacagcacc
+cgtttgcgtcgcagaatacgcctgatagttcggccacgaaatcatatgtcctttgagtat
+taagtatttgtaatgatcaatcgagctcaagcaagcttacacttcctcggatattcaggg
+aacttagtgcctttgaaagatacgttgatcaacgaaaaattgataatggctcatatggaa
+tgcctacctcatagtgctgaattaacacagcactgcggacctaacttttcgaggtttcaa
+gttcacgtctcaaaacctaataggctggaatatgtagggatcctcggtgaatttgtgatt
+gggtttgttgtagtactgaccaagtgaatattctttttttctaaaagcagatctgctgcc
+gggcactacgaaggagatctctgtgtatcattattgcttcttgacatgatgactcttaaa
+tcactgtgggtgtgcaaaacgatagcacaacccaattcgatagtacatattgttgatact
+tcgcactaaaccgttcatatttaaaggttgtgctccttccttcgttaaatactggtgact
+tggtcctatctactattagctagacctctggggaaccacgcccccgtaaaacctgtgcaa
+gagagggggtcatacatcttagacatcgcgcctccaccagggaagcattgggtgattgac
+caggtgtgtaacaaatatgattattcttatactaatattagcaaagatgcataatgattt
+gtattaaatgtataattgaattgataagggtcttttagtcagtgatagagtagtataagg
+tagacattagaactcttaaccggacgcagatttttcggtcttagtaagccaattagtcga
+caaaacaaggtaagagcggttactagtagtacctataatgcactgaatcttcggtcgaag
+tatagttctaatgctatgcagattgtgacggcgacaaatgttcagacttatatcatgaaa
+caagctcttgtaagtattgacaaatgaaaagattgaatatttttaaatacaaaatgcgcc
+tacttattaggggaattaaccagattgaaggccaatcctcacatgtaatgagataataga
+cgataaatgaaattcttgtaatagttgaactgctacgtgatgggtattatatatgattga
+gatcctccaattgccgacgtcttgtcttgatgcccaaaagattgtcaacgaggagctccc
+tcgcgtacctgtcgtccgtatcataaacgacgcgacatgtacagcactccgaagtataag
+caataataatgcgggtaatccagactagatcttttcggactcaatgcggtttcacggtaa
+acatgattaataccggagagtagtcgagcttatcagcgatgcaagcgaattcattgtgcc
+aggagatacgttgcagataaaaccggcaacgtatgtcaacaagttttggcgatctcgttg
+tttgtattcgacgaggcgcgggaacttcaagaactatcgtatattcaagtccattacctt
+ttagtttcagactggtggagctgactaaagttatatcatcattttgtacactggtttagt
+taacgataatttcagatttaacatgaccagacgataatcgctgtatatccagttggaatg
+tggtttgccagaaaggttaacttataatcaagcctctcttcagtcttgattcgtcgtatc
+ccatccattgcgctatacctcagtgtatttggagctgtagttataccgtgtgctaagatc
+agtagacatgacgagagcaatattatctaccttacaagcatcaacggacgtctagtcgga
+acaaaagactctaaaactcgaacttcaggttaatatactatagttctgtattcagcagtt
+attcttatattcgatattatcttgcctattggatgtctgactttagtatattaatcatag
+tatctgccatgtaaaggtgccagtactaaatctgtttcacagtgcgaattataaacggtt
+acaaccattaaagacaacaagaccctatagctttatttgaattttgtcaatgcgcaactt
+ggagctcgcgatacatcccaattagtctatagggtcgggacgattctacggcatttctgg
+ttataatgacaacatggattgtggcccgagaatcgctctttcattaattaagcaatcatt
+acagtcttataagcgctacttccgagtggtagcaggtaactcgatataaggtcgcatgag
+ccgaatagcttaaaaaacaggccaccgaacattgatagagaataccgaccacagcgcaac
+ctttgattactttcattaaattgtacggctcactcgacatcaagcttaagattgcgataa
+tgtgaactcaaatggatcagtactgaagaaccgtaacccacttcgcagaaagcgtaccca
+gagaagatacgctgttacaatatacagggtgaaattattgcctgttcttcgtaaccattt
+cgccaaacttggttagaaatgatagccattcatgatagaaataagctgaatgataccagt
+atctttaactatgtagtcagggggaagataacgatggtccatgtatgtttctgatatgtg
+acagtattggccgcgtaatttgctaacgaagctacttaatgcctttgagcttcatataga
+tttctttaatcaaaatcggcaaaaagatagtatgagctataatatatgctagtagagaac
+tctggaccatcatctatatgaatactgattcgagcgtgcaattactttagcctgcgtact
+actgactctacaaaacactctgagataagtttgtagtcagtaagtcgctctctataaacc
+ttttggatgaccattgtacagccacttatagatcccaataaatagcacaggagacagagt
+ttttcaatgctcgatcatttgccgatagtattttcgtctaacctcagggcacctattatt
+tgatacctaacctaacggccctttcacaatggagaaatatatgacatcgggacaaacaca
+aatggtgggtggccaggagatatgacatggtggcgtctctaagaaacacggactccctct
+aggcaaactcacgtaaccaattttaatgtcaaacaaaacgctcgaaaagattttgccgtg
+taatgacctggtacattgactggtcaggaatacatcactgtagttgccgtagtgtcctgt
+tggtgttccatcaagacacatcgtataacgcaatttacgacggacatcagatcaagttat
+acagattatttaagtatcacgtgtgcattgggacataagggatctcacacatgccttgga
+acatttttgctttgtgccgctttttcgctgcactaccaatccttacttaccagtatattc
+aaaggtcgttaacagaatgagaaaggttagggctctaagttatcgtcgattgggatagac
+gagacatttgcgagcgccctccacggatacgaatctcccatatcaatgtgaactggatgc
+tatgcagtttagttcttacgtctcctagtggtaaaaatcaaagtagcactcgcatagcag
+ttattcagaacctaatacacaaaaccgtcaaacattttctaattctaggtatgggccgat
+cataggagctaaggtgaaactcataaatgttttgttagatctagcatcctaaaaagatgc
+atatactgagtagctggcgtgcattctctcaattgtatcctttttaactgaactagtcgg
+tcccatttcgtgactgagatctattaaccgataagattaataacactcgcattcgtatca
+gctcagagtgaagtttttcaataatttgactgatatattaacttctaaaataacccttta
+agcctcggatccgtttcccaatcacatcaaaaattcttattccaactatctacggattaa
+caacgtgcatggggatcgtagtaagaacttgttccgatcactttgagtatatcaagttga
+cggcccggttattattgaatagaaacattcacctgctaaattaaataccgcacatcggat
+acccgatttcagagggccgtcttactaagggcaggctttgttcggtttaactgagatgtt
+cattattttacagtatgcttcaactaatatgtaacgaaggacagtggatctgtctccata
+gtagatcttcagtcgtgaatttcataccgctcctatttaagttcgcgttcgagttgttga
+tcatggcacgtgaaagcaacccctagtattctagacgaaaattttttctagttcatctga
+taatttgccaattcaaaaacaaccgctggtttcccggcgcattctctaaaatggaagtcg
+aacctagagccattatttgtcggtaacccatgagttccttcttttcagaagttaatacac
+tgtggtcctatacagaggaaaaacagcggttatatacgatcgtggcataacaacattgga
+tcaagatagcaatttggctacctattctaattctcactagattcggtattccactacaat
+atcggcagattaggattggatgaataatcggtgtttaagtccggttgcgtctccaatctc
+ctaatttttattaatattgatcttggtgacctattgtaaataaaaacttcaagactttga
+ataacggtgaaaagatagaagactcatttgaaaatggatcatccacagatccaaacatta
+gcaagacactaatccccaactagctattctgatcgcgatcgtgctgcagtactcctgtca
+caatagtctgttcatgatctaattctttttgggctttgttcgatggtgattcagaatctt
+tatccggtcgcttccctgtagctactttgtggggatattgcccggggattatagggttga
+gatcgtttcctaaaagtatttaaaccaagtagacttcaactaaactacatcagaacatcg
+tgaagacaccatacgcggtacctttatttaccgataacatttcttcaagaaataccggta
+agcagcataatgaccctaaacagctcggggtatcgtcgtagttttaaattttatttaggt
+tactgctcaaggaataaaaactaactatttaatttataataatattacaaggctcacact
+gattagatttgtctataagacttcgcgatcccccattaccggattgtcttaagaataaac
+tagataaaccatgcattttctagataaggcctttagtctaattagatacaaaaaacacga
+tagttgcatccttaatttattgtgtcaaacctggaaccttttaattacccgcaaatcact
+ttatgtcgagactacctctgaaatttattatctacctaccgcatgaggacttgaaccatc
+ttgtaggagttatgtttattagctaagattcgtttatcctgtagcggtccatgtatattc
+aacaagcaaaaagcactcagaattgtttttagttgagtcaagactgatatataaataagt
+ttccctagttttttcgtggtgggacgatattgaattgaatcttaaccgaagagtttccca
+ctctgtcgcacaataatacacgccaatatttccagccctgcttatgccttaatcggttac
+tcaatctcccattgaagttcattttgatctgcatagaagtttcgggcccagccttttttc
+tgccaccttcctccaagctctgtagacgcactctaagattgatgctcacatgtattaatt
+ctacattaacataaatatataagtcatgcatcttcgagtaaaatatctggttctccaaca
+tgtcctggcacgtatcgttataatgcccatacatgtagtattaaaatgattgggttaact
+ggatattaagatcatcgaaattgtaaagtcaaattaacaatactgtctcaagaccgtgta
+ttcctcgtgctcggaagggctattacgcttacttccgttttggtatcttaatatgacttt
+caaaaattaagttgcagtgagtcctacctgcgtgcatcggttagcaagagtataaaagtt
+gtttaaacgaactacttgctttacaataccggtcgtatatatcgccgtgaatccagaaga
+ttgtcttctttggattatcaaccgagatcctgtggaccgatgttttgggaccttcacaga
+ggactccaggtagagctcgcttttgcattaatctaagaattgtacctctctaaaagatct
+aaaacagtgaatgtgtatttcatggaaaaacacagagaaacgtaaattactttaggccga
+aaggcacatgagttattatacatatacgagatggtggtatacatcgaattcggggcatac
+actatagttgcattgtatttagctgctttaaataatatgatattaccttccttacataag
+acattaccggcataccctggttttcaacttgtggggctttttgacgatcgcactctcatt
+tgatccgagtagggcggtgacccctgcttttcaaatacaaaaatttcgctatgaaggtaa
+tagattacttttcgctgttatgatagaaacggtaaatttaaaattgaaacttctagaaaa
+gtaaagtaacgagaaatgattttgtgaataatgcggtcatgattgcgcaagtaagaaaaa
+aaggcaaaaggatgcgcggaatagaaacttatcagtcacgggtatcttgatttcattctt
+cttgtcaattgccgacataggatgaaatcagattccaatgcaatacacagtaacccccac
+ccttgattgtaatgtcgatttgaagttgtacgcgtcgacgaagtggatagtatacgggcc
+ttttgtacggtgcgatcaactatgaatctcggcgagttagatggtcgtacaatctcacac
+atagaggtcacttgcctgtaatgacgaattttcggctaggtactcgaactttattagaag
+taaaaatgtgggcaaaagaaggattccattttacaagacgattacaatgagttacatgtc
+tctcaacgtagtctttccctagtagtctttgaactatttaggtactccagaaaattttag
+caaagggtttctgtgtgaatccgccattcatgtttatgatggaacaataagaataacgcc
+ctcgtatgttatcgacagtgaagtcagcagttcggccaaaaacatattcaatttagtaca
+gatccccagaagttaagctaagtgctctaaaatggcctaaacggttatcaaagtaggtct
+aattactatactaacgggtgcatcgtaataactgctgtcgatgcaacactatatgatagt
+gtcgttttgctatatatgtacaatgtgacaaagaagccttagcgattcttgcaaacttag
+gacttcggattctcaatcttaaatgtccgaaaacgcaaagattcaaaaatttaatctatg
+agcagatatgcctgatggtgactacgcgtatgttaaggctaaatgttgacaaccgcacac
+ataatcgaactattgatagtcgggagcataaccaggtgaacgtactttgttcacgacatt
+tattgacatgttctaaatacgtctcaaaatcacggcgcactagaaaacgcaatcaaatca
+ttgtcctggtttaagggccgtaatgccggtagtgtcaaacttcatgagaactttagctgg
+cttttggccagtatttagggaccaagagcactagccttaagctgaatattttgccattta
+tctactgttataactttaaaacttggtggcaccagacttgtcgatacacacgcatcaatc
+tgtaacgtaaaaggtttactaagaacaagcgtaggaattgagtttatattatatttaaac
+taaaagatgatattagcttctgagggcgatagggctccaaatcataaagaggaatatatt
+attacacgattagaaacccacaacatacctcgaatcgcccaaaagtttgacgaaacttgg
+cagtactccacatctcagtaatacagttgggagagtctcaaatgttgttttattactcaa
+tgaaccaccctcataatttcactgctgttccattaaatttgcaaacgatcatttgctttg
+aagaaacgtaaaatcgacaaaattacagataagtagatgcataataaaaaaaactgctcg
+ctataacacgatcatcgtgcattcttacttaggagcatcacccgcacaataacgtacctt
+aaactacaacactattagaccgagtactgtaattcacgaaagctcaagctcgcattgtaa
+agaacttgctctctcgtaaaatgtgataatagtttgcggagaggattcaattattttcca
+ttgcacctactccactagattcgataaaagaaggtggtcctcccttaaaaagaaatgtta
+agtaacatcggaaccataagcaaagcatgtaagtgaaccgtcatccttccctaagaaaca
+taaaggtttttaataatgtcgactgtgaactataactgcatcctttcctgacctactccg
+gttccttgttgttatttctgaacgagaccagtagataaacaatgtaaaccacagtgggta
+ccaatggtgcatgtgacgctaccgttgttttaagtgcccgtacaaacataagaagtcata
+atcttacttgaaattaattttgccttttattttttttcaggctcgaaattaatgatttgt
+tttttttgaccttctagttacgctaatatgcggtcgcctgtggtttctattgagtcctat
+aacgggatgggatctaatacgtttggttactagtaaacaaggtataaatttgataccgga
+gtatcaactgtataacatcaagctttatgactcatacgcgaagtaatgacacaaggcttt
+caggagatcgcgagtacagagccactaaggggtgtattacgatagtgacaccaccgagcg
+cactcactccccaagtagatttatgatcctacgctaagtattagatatataaccaaagag
+gttctagtcagtgcaactcttagaataataattagccggttttgcctttttaggcctaat
+gcaatattcagctagcccttatgtatctcgcgttccacagcaccactcatggcacgcgtt
+taaactaatcaaatataatctatgaatgttatgccagtacttgaataaatcaggtttttt
+ataagtccttgcatactctcgttatatactgttagagtcttaccccatagaaattctttc
+atctgcaaacttagaagaattctcagctacggggagcataaagtccccaggatgttgaca
+aatacaacaaatgtggcttatacaaacactccatatgaaaatcgaaccctcgtggtagtt
+ttagccgaaccttgtacggataaatccctccattttccaatagcagatacctatcctact
+acctcgtggtattaaattaaagcttgaaatatagagctgcatagcttatccaattcccaa
+gcacgagtctaccgtcgtaaccacgatttgatttacagacgctagagcaaacccatcttt
+aaacatataagtaaaaattaaagggtgagtgcgtacgtgtttactagcaacttcgcttat
+taagacaattgtttataagccataattaaaaacatatgttcaacaggttcattgatattt
+gtaattgcacaggtttttaataaggatctacgtaagtataatgaacaaactttttaccag
+agttatattctgtactttgaaaatgctcctctaccgccttagagactttcaattagattt
+tttgcagttaatctatgcgtaagtgaaccatgcaagggatgcgattcaaccgcctcgtgc
+taaccctatcgtctgtctcataactgtaggtctaatataattttcagttttcgaacacat
+aaccctttgaaaatctgctatttaatgtctcacctgcatgcactatcttctatactgctc
+agaacggctatacgtcactatgctccaagtgacgatttaaacgaagcaaggaataatagg
+tttattttagtgcaaaacaattaagtgcggactacgtgctctttacaataagccttgtga
+ttgggctataggttaagtcccatattaacgatctccaatgtacaaaatcgacaatcgctt
+tgcattacccggttactagtcgaattacagatagctgttagatactcactctaattttgg
+acaacaatcccaatcttggggtcgtctatcgcctgaagctcgtaaatccttccatcttaa
+acgattacatattatagacttgttcggggtagagatatcacagttgtgcaaacattgtaa
+atcgatactagtttatgttggtagtctagttgcttttaccattccccgaaaaacttgatc
+tactatttcgacaacagtaaacttgaactaggtaagtgaaaacagagaatgcctcatagt
+gccactatttgtccactatatgtaagtgtagctttacataatccactatgactgagatca
+ttacggcctaggaaagcagcgtagaaaaaaagggcccggatattacgactgtaactataa
+aactagttactggtagcgcgccatgtatagatttgttttaccggttgtggttgcgttaac
+gaatttcagccgcgaaaattgatccgttaaccagtccatctcgacttctataaaacgata
+aagtaaagttgatgttcagcctccttcttatggttgcatcgagagtacactactcagtgg
+gaaatagatcggggttcctacttcagattgtattatctaggcaattgccgattgtgccat
+acctggataaaataagctacctacatgtgatgcttatctattatcgtcatactaccttag
+ggtgtcctgttgaacgctacattaatctttagccgtttgagatgttccaatggataggag
+tctaacgcatgatgaagtttaggaaggcagagcatcccactaagtatgtgacagtgtatt
+tcgaaacgagacgttataaatagaaaaaaggtccttctggttctattctgctgaactatt
+gaatggaaagattggttgacctacgtactatttgcttgaagtcatcaatttgacggggtg
+agagacatatggtgcatactttacggactctatattttagatcagaagcttagcagtctt
+ctctacaccccctcacgacataattgcttttaagaatctatgtttgattcctctacggga
+attcggatccgttcgcatgtgcggtttatctaaaccaggggacatatgttcagctaaagc
+atacgaacactttgctaactagacgtatgtatagtagctataaatcccgacgatatttac
+aaaaagaaatgagactcaaatatatacatagcgaccctacacttattcgcaccctgatct
+aggcgatcctagcacccacacccgaaagtgagcactagtgtcttccgtattaaatttact
+gcagttgagattttagttgtctactaaggattactctaacccgtaataaggatcaagact
+cggtactagctttactatcattccctatgtgttttcctaactcacaagggtacgtaccag
+cctatgtaattacaataatgataaagacacaaaggaagtaactttacaaatgagtctcca
+gttacactagcttagtccctcccatcttgctttgaagtctaaatacgcaatctctgagga
+tatacagcagaagaacactcataacgttggagtccaagaattagactcatagggccccca
+acatttaatatgtactgtgagtttgaaggtgttctattgttaattcctgctcttgataca
+tgacacgtactccgtgtttaaggcttcggactgactttctttcataagttgagcaacgaa
+aatttcagaatcgataagttggattcactaactaatacggctgattgaaaactccactcc
+ggacctatatggtcgacctttatacgtaaccgatataaaacttataggctggtatatcga
+gccttcctagcgcaatttcggatggggtttcttctactactcaacaacggaatagtcttt
+gtttagtaaaccagagctcaggacgcccaatacgtaggagagcgctgtggagcatgtgtc
+attatggactggagcactcttaaatcactctgcgtgtgctaaacgatagatcataacatg
+tcctgagtaaattttcttgatacgtcgcaatataccgttattagttaaacgttctcatcc
+gtcatgcgtgaaatacggctgtcgtgctcagatatactattagcgactcatctcgcctaa
+cacgcacacgtataaactcggaatgactgccgctcttacatattagaaatacagactaca
+ccacggaagcattgggtcattctcaaccgctgtataaaagatgattagtcttataataag
+attaccaaagaggcagaatcatgggtagtaaatctattattcaagtgattaccgtcgtgt
+aggcagggagtgaggacgagatggtactcaggacaaatattaaccggacgaagtggttta
+cgtcgtactttcactattagtagtaaatacaaggtaacaccggggaatagtactaaatat
+aatgatatctatcttcgggagaacgagtcgtctattgctttgaacattctcaaggcgtaa
+aatgtgctgacttatagcatgatacaaccgattgttacttttgtctattcaaaagattga
+atagttttttatacaaaagccgcatacttatgacggctagtatacagtttcatcccctag
+catcaatgctatggacagtattgaacttataggaaattcttctaatagggcaaatccgtc
+gtgatgcctattttttttcagtcacatcctcaaatggcactagtattgtcgggatcccat
+taacaggctcaaccacgagctcacgcgaggacatgtagtccgtatctttaacgaagcgac
+agcgacagaactcccatggataaccaattataaggcccgtaatcctctagacatcgttta
+ccaataaatccgctttctccgtaatcatgttgaataccccagagtagtccagatgataac
+cgatgaaacacaagtctttctcaatgcacttacggtgaacttattaccgccaacgtagct
+catcaaggttgcgacatctagttgtgtgtttgcgacgagcccagcgaacttcatcaactt
+tcgtatattcaacgccttgtaattttactttaagacgcctggtgatgtagattcttagat
+aatcagtttgttatcggctgtactttaccataatttcacaggtttcaggtcaagaagatt
+atagctgtatatacagttccatgctcggtgcacagaaacgtgatcggataataatcaatc
+gcttatgtcgtctttaggcgtatccaatacatgccccgataccgcagtgtatttcgacat
+gtaggtataccgtcgcatttgagctcgagtcaggacgtcagctagattagattccttaat
+agaatataccgacctctagtccgaactaaactatagataacgccaacttcaggttaattg
+tctagtcgtctgtttgcagatgggattcttagatgagtgagtatcggccatattggttcg
+agcactttagtttttgatgcataggatatgcaatgtatagctgaaagtactttatctgtt
+tcaaactcacattgattaaaccggtaaacctttaaagactacaagaaaatattcagtgag
+ggcaattttgtcaatcacaatcttccagctagagatacttcacaatttgtcttgaggcta
+cgcaacattagacggattttcgcgttttattgaaataatcgaggggcccaagagtatcca
+tagttcattttgtaagatttctttacaggcttattacagcttcttcagactcctacatgc
+ttacgagttatatgctagcatgtgaacaatagattaatatacaggaaaacgtacattgag
+agagatgaccctacacagcgcaaccgttgagtactttcattaaagggtaacgctctcgag
+acagcatccttaagatggccttattgtcaaatcatttgcagaagtacgcaagatccctaa
+ccaacgtagaagaatccctacaaacacatgagacgcggtgaaaatagacagggtgttagt
+attcaatcttcggagtatcaatttcgccaatcttggtgagaaagcataccctttcttcag
+agaaagaagatcaatcataacactatctttaacgaggtacgcacgcgcatcattacctgc
+ctccatggatctttaggatagcggaaagtattggcagcgtattgtgatttcgttcctact
+ttatcaatttcacattcatatacatgtcttttatcaaaatcgccaataagataggatgag
+ctatattagatgctagtagagttcgcgccaacatcatcgataggaatactcaggacagcg
+tgataggacttttcaatccctaatactctctataattataactctctcttaagtttggag
+gcagtaacgcgctctatataatcagtttgctgcaccattcttcagcctctgatacataca
+aataaattccacagcagtaagagggtttaattgagacatcttgggaacttaggattttac
+tctaacatcaccgaaacgattattggataccgtacctaaacgaactttctcaaggcagta
+atataggacatccgcaataacacaaatgctgcctccccaggagttatgtcttcctggagg
+ctatatcttacacccactcactataggcaaactaaagtttaaatgttgattgtctaaaaa
+aaagatagataagagttggccggcgtagcacatgcgaaagtgaatcgtaagctataattc
+tctggacttgaagttctgtcctgttcctctgcaagaaacaaacttcctttaaagctattt
+acgacgcacatctcagcaagttataaacatgttggaagtttctagtcggaattcccaaag
+aacggatctatctaatgcattcctacatttttcctgtctgccgatggtgccatcctattc
+aaagaatttcttaaaagtagattaaatgggacttttaacaatgagtaaccttacgcctct
+aagggttcctcgagtgccatacaccagtcaggtccgagccacatacacggagaacattct
+aacatagcattctcaactcgatcatttgcaggttacttctttcctatcctagtgctaaaa
+atcatacttgcaatcccatagcacggattaagaacctaagaaacaattcagtaaaacatg
+ttcgaattcttggtatgggaacatcattgcagctatggtctaacgcattaatgtttgggt
+acatcttccatcatataaacaggaagagtctgacgacagggagtgcttgcgatcatgtct
+atcattgtgaaatcaaattgtagctcacatgtcgtctatgagagcgtgtatccgataaga
+tttagaaaaatagaagtcgtataagatctcactgaacttttgaatgaatgtgaagcatat
+atgatctgctttaataaaactttatccataggatacgtttccaaatcaattcaataatta
+ttagtcaaaatagataaggatgaacaacctgaaggccgatcggacgtagaaagtggtccc
+atcactttgagttgatattgttgaaccacacgttattatggttttcaaacagtctcagga
+tattgtatatacagataatccgataccagttgtctgacgcccctcttacgtaccccaccc
+tttgtgacgtttaaagcagttgttcagtattttaaactaggcggcaactaatttggaaag
+aagcacagtggatatgtctaaattcttgttattcaggcctgaatttaatacaccgcatag
+ttaacttcgcggtagagttgttcatcatgcctcctctaagctaccacttctatgatacac
+caatagttgttctacggaatctgataattggccaagtcataaacttccgctgcgttcaac
+ccccttgctcgaatatccaactcgaaaagacagccttttggtgtccggaacaaatcagtt
+acttcttttctgatgttaattctctgtggtcagatacagaccaaaaactccgcggattta
+ccatcctccaagaacaaatttgcatcaacatagcattttggctacatattctaagtctca
+atagtttaggttttcaactacattatcccaacattaggattggaggaataatagctgggt
+aagtccccttgcgtctacaatcgactattttttatgaatatgcttctgccgcacctatgg
+ttattaaaaaagtcatgactttgaagaaccctgaaaagatagatgaatcaggtgtaatgg
+cagcagccaaagagcatataattagcaacactctaagaacattatagatatgatgatagc
+gatcgtcatgatgttatccggtcacaatagtagcttcatcagctaattcgttttgccagt
+ggtgacttgcgctggaagaatcgttatacggtcccttccctcttgatacggtgggggctt
+attcaaccgcgtggattgggttgtcatacttgcattaaacgatgtaaaccatctagtagt
+caactatactaaatcacaaaatagtgatcaatacatacccgcttcatggttttaaccatt
+taattgattaaagatattccgctaagaaccattatctacctaaactgatcgccgtatcct
+agtagtttgaaatttgatgtaccgtaatgatcaacgaagtaaaacgttatattgtatgta
+gaataataggtcttggagctaaatgatgtgattggtagtgaagacttacccttacaactt
+taccggtttctcggaagaatatactagagaatcaatgcatgggctacataagcactttag
+tctaatgagataaaaaatacacgagtcttccatcatgaattttttgtcgaaaaactcgaa
+cctggtaatttaaaccatatatctttatgtcgtcaataactctcatatgttttatataac
+ttcccaatcacgacttgtaactgcttgttcgactgagctgtttgagctatgaggccggga
+tccggttgagctacatctatttgctacaagaaaaatgaaagcacatttgttgggagttct
+ggctacactcatagagaaataagtggcccgagtgggtgcggcctgcctccatattcaagt
+gtatcttaaaccaagtggttccaacgctcgcgctaaagaattaaagcctttatttcctcc
+acggagtagcccgtaatccggttcgaaagagaccattgaagttaattttcatatccagtg
+aagtttaggcacaagcatgtgttctgccacatgcctcaaagcgctcttcaaccaagatat
+gattcatcctaacttcgatgaatgcgtctgtaacataaatatagaaggaatgattcggcg
+agttaattttcgccttctccaacatggcatccctacgttcgttataaggaccatacatgt
+aggttttaaaggtttgcggttaatcgatatttacatcatagaaattctatagtcaaattt
+acaagactctagatactcactcgttgcagccggctaggaagcgctttgtaccttacttcc
+cttttcgttgcgtaatatgaatttcatatagtaagttcaaggcactcatacctccgtgaa
+gagggtagatagactattaaagttgtttaatagtacgtattgatggaaatgacccgtagg
+agatttaccactcaatccacaagattcgctgctgtgcattatcaaaacagtgcatgtcga
+aacatgggttgggtccttcaaacacgaatccaggtagagatacctttgcaatttttcgat
+gaaggcgaccgagataaatgagctataacactgtatgtcttttgattgctataaaacaca
+gaaacggatattaatttaggccgtaaccaacatctgttatttgacatagaacagatggtc
+ctttacagcgtattccggccttaatattgaggtccagtgtattgtcctcctttaaagaag
+ttgattgtaactgacttaaataagacatgtcacccattcactgggttgcaactgctggcc
+ctttttgtccatcgcacgctaatgtgataacagtaccgccctcacacctgcgtttaaaag
+acataaatgtcgctatgaaggttattcattaattttagctgttttcttagaaaaggtaaa
+tttaaaattgaaaaggctagaaaactaaagttacgacaaatgtgtttgtcaagtaggcgg
+gcatcattgagattgtaagaaataaagccataaccagccccggaatagaaaatgttaagg
+aaaggcgatcttctttgaattcttattgtcaagtgcagtcatacgttcttatcagaggac
+attgcaataaaatctaacaccctcccttgtgtggttgggccatttgtacttcgaagcgtc
+caccatgtgcagaggataacggaatgtggttccgtcccataaacgatcattctcgcccac
+ttagtggcgcggtaaatcgctctcatagaggtaactggcctgtaatgtccaatgttaggc
+taccttctccaactttagtacaacgaataatgtccgattaacaaggagtcaatttgtcat
+gaccagttcattcaggtacttgtatctatacggacgcgttccagagtagtatttgaaatt
+ttgaggttctactgataagtttagctatcgctgtatgtctgaataagaatttaatgttta
+tcttcgataaataacaattaacaactcctaggtgatacactgtgaagtctgctgttcccc
+aaattacatatgctattttgttcacataccatgaagttaagctaagtgctctataatggc
+ataaacggttatcaaactagctcgaatttcttttattacgccggaagcggattaactgct
+gtagatcaaacacgttaggatagtgtcgttttcatatatatctaaattcggtctaacatg
+cattacccatgcttgataacgtagcacttcgcagtctaattatgtaatgtccgtttaacc
+aaactttaaaaaagtttatctatcaccagtgatgcctcatcgtgactacccggatcttta
+gcctttagggtctaaacagaactaatattactacgtgtcatactccggagcttaaccagg
+tgaaacttatttgttaaccaaatttagtgacagggtagaaatacgtatcaaattaaccca
+gcaatacaataagcatgaaaataattgtaatcgggtttgggccggaatcccgcttggcga
+aaacttaatgacatagtgtgatgcattttgcactggattgagccacaaactcaactagca
+ttatgctcaatatttggccagtgttctacggtttgaaatttataaaggccgcgcaaaagt
+cttgtagttacaaacgcataaatctcgaacgtaataggtttaattagaacatccgtagga
+tttctgtttatagtagatttatactaaatgttctgattagattctgacggccttacccat
+acaattaataaagacgaatatattagttatagtttactatccaaataaattaagcgaatc
+gaaataaactgtcacgatactgggcagttatcaacttatcacttatacagttcggacact
+ctatattggtctgtgagtactctatcaaactaactcataagttaactgcgcttccattaa
+atttcaatacgttcttgtgctgtgtacaaacctataatcgaataaatgacacatatggag
+atgcataataaaaaaaacggctccatatttctcgttaatcgggcattcttaaggaggagc
+atctcaccaaaaataacgttcctgataagtcttaactattagaccgtcttcgggaatgaa
+cgaaacctcaagctagcatggtatagttcttgatagcgcgtaaattctgataatactggg
+cggacagctggaaattagttgccagtgcacctacgcaaatagtttacataaatcaacggg
+ctccgaacgtaaatacaaagggttagttacatcgcaacaagatgaaaagcatgtatgtct
+accgtcatccgtccctaacaaacataaaggtggtgaagaatctcgtaggtcaactataac
+tccatccttgaagcaactactccgcgtccgtgtgcgtagttcgcaacgagaacactactg
+aaaaaagctaaacaactctcggtacaaatgcggcttgtgtcgataaagttggtggtagtg
+cacggaataacataacaaggaatattatttattcaaattttttgtgactgttatttgttt
+tctgcctagaatgtaaggatgtgttttttgtgacctgatagttacgcttatttcaggtcc
+acggtgcgtgagagtgtgtcctataacggcaggggagcgaagtagtgtcctttagactat
+tcaaggtagaattttgataacgctctataaaaggtagaaaatcatgattgagcaataaga
+ccccaacttatcaaaaaaggagttctcgacagcgcgtgtacagtccctataacggctgta
+tttcctgtgtcacaacaccctcccatcgcactcaaaatgtagatttatgatcagacgcta
+acttgttcttagagaaaaatacacgggatactctgtgcaacgatttcattaataaggtgc
+agcttgggacttttttggccgtaggctttattaacattcacagtaggtagcgagacttcc
+tatgaaccaatcatgccacgcgttttaacgtttcaaatataagctaggaagcgtttgcca
+ggacttctataatgcaccgttttttttagtacttccttactagccttagtttatgttaga
+gtctttccaattacaaaggattgaatagccaaaatttctacaattctcagcgaacgccag
+cttaatctaaacacgagcttcaaatattctacatatcggcaggagtcaatatataaatat
+gaaaatcgtaccatcctcgtacttttagaccaaacgtcttcggataattaaatccttttt
+caattaccacagtacgtgcattagaactactgctatgaaagtaaaccttgaaatatagtc
+ctcaagagcgtatccaagtacattgcacgtgtatacagtcgtataaacgagttgatgttc
+tgacgctagagcttaccattcgttaaacagataactaaaatttaatggctgagtgactta
+gtgttttcgacaaacgtcgcggatgtagactattgtttataagcaatttttaaaaacata
+tgttcaaaacggtatgggatatgtcgaattccacaggggtttatgtaccatagaagtatg
+tataaggtactaaaggtttaaatctgtgatattcggttcggtgaaaatcagactagtcac
+acttagtgtctgtaaattagattgggtgaaggtaagcgatcccgaactctacaaggcatg
+ggatgagattctaccgactccggataacactttacgatcgcgcataactctagctcttag
+ataagtttaacttgtcgatctcataaacagttcaaaatctgcgatttattgtatcaaatc
+catcctctatcttctataatcatctgaaccgcgatacggcactatgagccaagtgaagat
+tgaatccaagaaagctataattggtttattttagtccatttaaattaagtccggtataag
+tgctctgtacaatatgcagtctcatgggcatatacgttaactaccttttgatacttcgaa
+ttggtaaaatatcgactatcgatttgcagtaaaaggtgtagagtccaattactctttcct
+gttacatacgatctcttagtttggacaactagcccatgatggcgctcctctagcgcatga
+acctactttataattacatctttatcgatgaatttttttagactgcggaggccttgagtt
+ttaacagggctgctaaatttcttaagcgattagacggtagcgtcgtacgctacttgcttg
+gaacaggcaccgaaaatattgatctactattgcgtcaactctattctgctaatagcgatg
+gcaaatcacagaagccctcttagtgacaatagttgtcaactatatctaagtcgaccttta
+ctgtatcaacgatcacggagagaattaccgaatacgaaacctcaggactaaaaaacggaa
+aggatttgtcgacggtaaatataatacttgttaagggtagcgacacaggtatactttggg
+tgtaaacgtggtgcttcccggaacgattttcagaccagaaaattgttccggtaaccagga
+aatctcgtctgcgttaattcgtgttagtaaacttgatcttcagactccttcttttcgttg
+cagcgagacttaaattatatctgcgaaatagtgccccgtgcatacttcagatggtaggag
+ataccatttggcccattgtgactttacgcgattaattaaccgacatacatctgttcctga
+gctatgatcgtctgaataaattacggtctcctcttgatacctaatggtttctggagacgt
+ttctcatgttcaaatggatagcaggagatcgcttcatcaagtttagctacgcagagcatc
+aaaatatgtatgggaaagtcgatttccaaaccagaagggataaagagaaataacggactt
+ctccgtagattagcctgatattttgatgggaatcatggcggcacatacgtaagagttgcg
+tgaacgaatattttggacggcgggagacacatatcggccattcgttaaggtctctatatt
+ggacatcacaagcttagcagtatgagctactaacactcaagacattattgattttttcaa
+gatatgtttcattcctctaccgctattcccatacgttcgattcgccgggtgagcgaaacc
+acgggactgaggttaagctaatcaataacaactcgttgcgatagagacctatgtatacta
+gagagaattccccaacatttttacaaaaacaaagcagactaaaatagatacagtccctcc
+atacaattaggaccaacatgttattgccgatcctagcacacacaccacaaactcagaact
+tctgtcttacctatgaaagggtctgcacttctgattgtacgtgtctaattagcattaata
+ttaaaactaattaggataaactataggtacgagctttactataagtcactaggtgttttc
+cgatcgaaaaacgggaccttcaagccttggtaagtacatttaggataaagaaaaaaagga
+aggtacgtgactaatctgtctaaactgacaatagagtagtacctacatgcttcatgtcaa
+gtcttaatacgcaagcgctctcgttatactgctcaacaaaactcataaagttggactcca
+tcatttagaatcatagggaccaaaacatttatttgctactgtcactttgtaggtgttcta
+ttctgaattcctcatattgatacatgaatcggaatacctgtggatcccttaggacgcacg
+tgctttctttacgtcagaatacatattgtcagaatcgagaagttccatgcaattaagaat
+tcgcctctttgaaaactcatatccccacatatagggtccaccgttattcggaaacgatat
+aataattattccagcgttgagcgtcccttaagagcgcattttcgcttggcctttcttcta
+cgactctacaacgcaagtggctgtgtggagtttaccacagcgcagcaccccatagaacta
+cctctgagagcgcgagatggtggcagtatgctctgcagctagcgtttagaacgcgcccgc
+gcattaaccagtcatattaaaatggactgtcttaattgtcggcattaggagcaatattaa
+ctgatgagggtatcggtcgcagaagtaatgacggaaatacgcctctagtccgcagagata
+cgattacagactcagatcccctaacaagcaaaacgattaaatcggaatcactccccctat
+gacatatttgaaatacacaagaaaccacgcaacatgtcccgcattctcaaccgcgcttta
+taagatgttgagtctgagaattagatgacctaactgcaagaatcatggcgagtttatcta
+gtaggcaagtctgtaccctagggttcgaacgctgtgacgtcgtgatcggtctaaggactt
+agatgataaccaagaactggtttaccgagtactttcactattaggagtaattacatgcgt
+tcaccgcggaatacgacgaaattttttcatatctttatgagcgagatcgtgtcgtctttg
+cattgcaacagtcgctaccagtaattgctgatcaattatagattcattatacagatgctt
+acttttctctattcaatactgtcatgagttgtttttaaataagcaccagaattatgtcgc
+ctagtataatcttgcttccacttgaatcaatgcgatggacagtattctactgattgcaaa
+gtagtctatttcggcttagcagtacgcatgcctatttttttgcaggcacagaataatatg
+caactaggattctcggcatccaattaacaggctaaaacaccaccgaaagacaggtaatct
+acgaagttgatgtttactacagaaagcgaatgatatcacttggagaacattttagatgcc
+cccttttaatctagactgagtgtaccaatatatcaccggtctaccgaatcagcttgaata
+aaccactctagtactcatgataaccgagcatacacatgtatttctcaatgcactgaaggt
+gaactgtttacaccataccttgcgaatcaacgtggcgacttatacttctgtctttgagta
+cagcacaccctaatgaatctaagttagttgttgatacgaattgtaatttgactggatctc
+gcctcctcatctagattcttagagaagatgtttcttatagccggtactgtaactttattg
+atctggtttatggtaatcaacattttacctctatttaaacgtccttgcgccgtgcactca
+atcctgatcggtttagattcaagcgattatcgagtctggaggccgagaaaagaaatgcac
+agagtaagctctctattgcgacatctacgtagaaactcgcatttcagatcgagtaagcaa
+ctctcattgtgttgattcagtaatacaagattacctacgcttctacgaaatatactatag
+atttagcctacgtcacctttagtgtcgagtcggagctttgaagatcggatgcggtgtgga
+ctgtgtataggcaattttgctgcgagctcgtgacttttggttgatgtcgatatcaatggg
+atacctcaaacgtctttatctctggataactcacattgagtataccggtaaaaatttatt
+ctattcatctaaatagtcagtgagggctagggtcgcaatcacattaggccacatacacat
+acttaacatgttctattgacccgacccaactttagtagcattgtagccgtttatgcaaat
+atgccaggcgccaaacactagccagagggcattttgttacatttatttaatcgattatta
+cacagtcggaacacgcctacatgcgttcgacttatttgcgacatggtcaacaattcagta
+atttaatccaaaacctaaagtcagagacatgacactaaaatcacattaaggtcagttagt
+gaaggaatggctaaccagctagagaatgcatcattaacaggcacttattgtcaaatattt
+tccagatctaagcaacatcacgttaaaaagtacaacaatcacttaaaacacatcagtcca
+ggtgtaattagaaagccgcttagtaggcaagcgtaggagtataaatgtagacaatagtcg
+ggacttagcagacactggatgcagtcatagaagatcttgcataacacgttagggttagag
+ctacgaacgcccatcattaactgcctaaagcgtgcgtgagcttagcgctaacttttccaa
+cacgtttgtgatttcgttcataatgtatcaatttcacagtcatatacagggagtgtagaa
+aaatcgcaattaacatacgttgacctatttttgttcagagttcagttagagcctaatgat
+tcgagagcaataatcaggacagcctcataggaagtgtcaatcacttagaagctatattat
+tataaatcgctctttactgtcgtcgaaggaacgagcgagagagaatcagttgcctgcaac
+tggcttaacaatatgatacataaaaatattttcatcaccactaagacggtggaattcaga
+cttattggcaacttaggatgggactattaaataacccataagatgttgggataaagttac
+gaaacgaaagggatatagcctgttagataggaaatccccaataaaacatagccggcctcc
+acagcagtgatctattccgccacgcgatatctttataccacgcaatataccaataataaa
+ggttaaatgtggttgcgatttaaaaaagatacatatcagttgcaccgcgtagcaaatccg
+tatgtgaagcgtaacctagaattatagcgtctgcaagttctctaagcttcctctgcaaga
+tacaatatgactttttagcttttttactaccaaatctcagaatcttagaaacaggttggt
+acgtgctactcggaattcccaaagtaccctgctatatatgccattccttcattggtccgg
+gctcaccatggggccatcatagtaatagaaggtagtaaaactagttgatttccgactttt
+aacaatcactatcctgacccagatatgggttccgactggcccttactccagtaagggcag
+acacacagacaacgagaacttgataactttgaattctcaaatcgatcattgcaacgtgac
+ttatttactagcctactcctataattcatacgtcaaatacatttcaacggaggaagataa
+taagtaaatattcactaaataatggtcgaaggagtcctttgccaacataagtccacatat
+gcgctatagattttttcttggggttcatattcaataagataaacagcaagagtatcacgt
+cagcgagtcattgagatcttggctagcattgtgatagcatattctacctaaatggtagtc
+tagcacagagtggataagatatcagttagatatagacaagtactataacagatctcgctt
+cgttggattgtatggctagctttgatgatatgattttataaaaattgatccagacctgac
+ctggccaattatattcattttttatgagtaaaaatagataaccatgaaaatactcaagcc
+ccttaggacgtacaaagtggtaacataaatttcaggtgttattctgcaaccacacctgtt
+ttgggttttcaaaaaggctaagcagattggttttacagataatccctgaacactggtatc
+tcccaacgatgtcgttcccaacccttgctgaccttttaagctctgctgaagttttgtaaa
+ctaggcggaaaatatgttcgatagatccactcgcctgaggtagaaattcgtcttagtaac
+gcctctttggattacacagaatagtgtactgacacgtacactgctgcagcagccatacgc
+taacattaaaattcgttgagtctacatttgttgttattcggattatgttattgggaatag
+tatttttattcccctgcgtgaaaccacatggatagattagcctactcctaaagactccct
+tttggtctacggttcaattctcttactgagtttatgttcgtaattatatcggcgcagtga
+atctcctaattatcaccggagttaccagacgccatgaacttatggccagaaacattgcat
+gtggcctacataggattagtatcaagagtttacgtttgcaacgacatttgaccaacttga
+ccattcctgcttgtagaccgcgggaactcccctgcacgcgactatagaagttggtggtgg
+atgtggcttatgccgcaaatatggttttgaaaaaagtaatctattgcttgatacctgaat
+tgagacatgtataagggctattgccagatgaaaaactgcatataaggtcaaacaatataa
+gaacattatacataggatcttagcgttcctcaggatggtatacgctataaagtctagctt
+cagcagctaaggagttttgccagtgcggacttccgctggaagattaggtttaaccgccct
+gacatcttcataaggtcgggcctgattcaaacccctggagtgccgtctcatacttgaatt
+aatcgatggaaaacttcttctagtctaatattattattaacaaatgacggttcaataaat
+aacaccgtaagggtgggaaactgttaagtgatgaatcattttaacctatcatccattagc
+tacagataatgataccccgatccgactagggggtaagtggttgttccgttaggataaacc
+atgtaaaacgttagagggtttgtagattaattggtattccagataaatgaggtcagggcg
+agtgatcaattacactgaaaaattgtcagcttgcgcggtagttgttaagacagtataaat
+gaaggggattcagaagcaagtttctcgattgactgaatttataaaccagtcgtcaatcat
+gatttttgtgtcgattaaagcctaaatggtaatttaaaccattgatatttatcgagtcta
+taaatatctttggttgtatattacttcacaatcaccaattctaaatgattcttccactgt
+gcgggtggagatatcaggacgggttaaggttgacctacatcgttttgatacaacaaaaat
+caaagcacatggctggggacttctcgatactatctttgagatagtacgggcaagagtggg
+tgacgcctccctacattttcaagtctatcggataacttctcggtaaaacgctcgcgatat
+agttttaaagcattgatttaatccacgcaggagcaagttttaccggtcgaatgagaaaat
+tcaacgtaagtgtcatatccagtcatggttagccaaaagcatgggttatccaaaaggaat
+aaaacagctcttcaacaaagagatgaggcttcataacttcgatgaatgcgtatggttctg
+atatatagatcgatgcatgaggacactttattttagccggcgaattaatggaatccatac
+gttacttatttggacatgacttctaggtgtttttgctgtcccgtttagcgatatttacag
+attagtatttcgtttctcatagttaattgtatctagatactaactcgttgaagacgcata
+ccttgccatttgtacaggacttaactgttccgtgcgtaatttgaatttcttataggttct
+tcaaggcacgaatacctcactcatgaccgttcatactctagttaaggtcgggaatactac
+gtatgcagggaattgtaacctaggagatttacaactctttaaacaagagtcgctgaggtc
+caggatcaaaacactgaatctcctaacttcgggtgcctccgtaaatcacctagaaaccta
+ctcatacatttgcaattttgagatgtaggcgaaagagagaaatctgctttttaacggtat
+ctcttgggattccttttaaaaacacataacgatagtaatgtaccaagtaaccaaaagctg
+ggatgtgtctgtgtactgatccgccgtgtcagagtagtccgccatgaatattgacgtcaa
+ggctagtgtcatcaggtattgatgttcattgtaaatgaaggaatgaactaatgtcaccaa
+gtaaagggggtgaaaatgctccccagggttctacagacatagagatggtcagaacacgac
+ccccctctcaacgcagtgtatttgaaatatatggacatatctaccttattctgtaatttt
+agatgtgttctgtgtataccgatattgataagtcaataggcttgattacgtatcttaaga
+caaatctgtttcgcaagtaggaccgcatctttcagattgtttctttttatgccataacct
+gcccaggaattcaaaaggttatcgatacccgatatgctgtgaattattattctaatggcc
+actcattcctgcttatatctggaattggcatgaatatcttacaacctaaagtctggcgtt
+gcgccagttctacttcgtaccggacaccatctccagtcgttaaccgaaggtgggtacgtc
+acataaaagttcattagaccacactttgtgccgacgtatatagatatattacacgtatag
+ggaatgttttctcctaggtgacccgaccttctactaaggttgtacatcgtataatggccc
+attaactacgaggaaagtggtattgacctggtaatgcacgttcttcgatatataccgacg
+aggtaaagtctactattgcaaagtttgacgttatactgataagtttagatttccctggat
+cgcgcatgaacaatgtatgcgttatctgccatatataacatgttacaaatccttggggat
+actatcgctactatcatcggaccaaaattaaataggctagtgtcttatcagaacatcatg
+tttaccgaactgatctattttccaatttaagctgatattacgtccgcgtatttattttag
+ttccccggatgacgattatctgagctacatcatacaagttagcatactcgccggtgcatt
+gatttcttatttcgctatatcttcaagttcacaggcttcatatagttccaattagcagta
+taattaggttttgtaactttaaccatactttataaaaggttatattgcacaactgatcaa
+gcatccgctataacccgagctttaccagttagcggctaataacaaataagatgacttcgt
+gtcatacgaccgtcatgatcatgctctaacttaggtgggaaccaaatttaggcaatgggt
+agtaataagtataaaatgataccacatatactataacaatgaaattatttgtaatccggt
+ttgccaacgtatcccccttcgcgataaattaatgacatagggtcatccatgtgccaatcg
+tgtgtgccaaaatctcaaattcaattatcatcaatattggccaagtgttataagcgttga
+aagtgatataggccgccaaaaagtagtctacttaaaaaccaatatttatcgttcgttatt
+gctggtagtacaacatcacgagcatttctcttttgagttgatttatactatatctgctga
+tgtgattatgtcccacttacccagaatattaagaaagtcctagattgtaggtatacttga
+ctataaatataatttaagactatacaaataatctggctacattatgccatcgtagaaact
+gataacgtagtaacgtcggacactagattttggtcggggagtaatctagcatactaacga
+atttgttaaatccgctgaaagtatatgtcattacctgcttggcctgtcttcaatacgttt
+agactattaaggactcatttcgagatccagtattaattatacgcatccatatttatactg
+aagacggattgagttaggacgacaagctaaacaaatattaagttaaggattagtattata
+ttgtagaaactcgtcgggttggaacgattcatcatcatagaatgcgttacttattcagag
+agacttaattcggttatgactggcagctcacctggaaagtaggtgaaaggcaacagaaga
+atattgttgactgaattctacgggctacgaacgtaattacaaagcggttcgtaaagagca
+taaagatcaatacaatggatctctacagtattacgtaaataacatacataaacctggtgt
+tgattcgactagctcatagattaatcattaattgaagctacgaagacgcggaagtctgcg
+gagtgagcaaacagtaatcgactgataaatgcttataatatcgcgcttaaatgccgcatg
+gtgtacattaacgtgggggtagtcaaaggaatatatttactaggaatattagttatgcaa
+atgttgtgtcaatgtgatgtgttttatccagacattggatgcatggctgtgggggcacag
+gatacttaccattagttcacctacaagcggcgtgagagggtctcagttttagccagcgca
+gagaagtacgggcctttagacgattaatgctagaattgtcataaacctcgtgaaaagcta
+gttaataatcatggtgctagaagaacacaacttttctataaaccagttctcgactgacag
+tcgtaactcactatatcgccgctttgtactgtcgcaaaaaaacctcacatagaaagaaaa
+atctactgggtgcatcagtagagatcgtgttctgagagataaatacaccggatacgatct
+gcatcgagttcatgtattaggtcaagcttgggactgttgtgccagtagcattttttaaca
+gtcaaagtagggtgagacacgtcatatcataatatatgccatcgaggtttaaagtttata
+tgataagctagcatgcgttgcaatcgtattcttgaatgctccgtggtttgtactaattcc
+tttatagactgagtgtatcgtacactcggtacaattacaaaggatggaagagcaaatagg
+tcttcaattataacagtaccccaccttaatctaaaaaccagcttcaattagtattaattt
+cgccaggagtatatatataaatatctaaagactaaaagactcgtacttttacaacttacg
+tcgtagcataattaaatcatgggtaaatgtcatcagtaagtgcattagaaatactccttt
+gtaaggatacagtgaatgtgtctcagcaagtcagtagaaatggaaattcatactcgatta
+aggcctataaaactgttgttggtatctacagagtgattaaaattagtgaatcagattacg
+aaaatgttttcccgctcgcacttacgcgtttagacaaaagtacaggtggtacaattggct
+gtagtagaattttggtataaaataggtgataaaccggatgggtgtgggcgaattcaaaag
+cggtttttgttccatagaactatgtagttggttataaaggttgtaatctcggagattagg
+ttagggcttaatcagaatagtaacaatttctctatgtaaagtacagtgggtgatcgtatg
+agttcacgaactcttaatgccatgcctggacaggataaacaatacgcatataacttgacg
+atcgagcttatatcgacctatttgagaagtttaacgggtcgatataatatacaggtctta
+atagccgattttttctagaaaagcaatcctatatcttagttaatcagatcaaccccgtga
+acgatatatcagcaaactgaacattgtatacaacattcctttttgtccgggtggggactc
+catttaaagtatctcacctagaactcagcggtaatagatgcagtctcttgcccagttacg
+gtaactaaatgttgatacttagaattgctaaattttagtctagacatttccaggtaaacc
+ggtagacgacaatttctctgtcatctgtcataagatcgcttagtgtgctcaaattgcaat
+tgagggccctactatagacaatcatcagactttttaattaaatagttttccatgaatgtg
+ttgtcaaggcggaccccttcacttttatcacggctcataaatgtcgtatgactgtagtcg
+gtagcggccttcgagtcttcaggggaaatggaaaagaaattaggcttctaagatggacta
+taatcgattaggctaattccgttcgcaaatcacagaagcaatcttactcaaaattgttgg
+aatcgatagcgaacgcgaccgtgaatgtttaaaagtgctcgcacagaattacccaatacc
+tatcatcacgacttaaatacccaaagcagttgtagtcgcgtaatagattaagtctgaagc
+ctagagacaaagggatactgggcggggaaacctgctccttcacggtaacatggtaacaac
+agaatttggttaaggttaaaacgaaatatactcggagtgaattactgttaggtttcgtca
+tcggatcaataagtagtttccgtgaagacactcttatattagatctccgaaattctgacc
+cgtgcattaggcacttggtaggagattccatttggaacttgctcaatgtaagccagtaat
+gttccgaaataattcgctgcaggagcgaggagccgctgaataaaggaccctcgcatcttg
+ttaccttatggttgagggtcaccgttctctgcgtcaattccagagctggagatacattca
+tcaacgttacctacgcacagaataaaaagatcgagcgctaactcgttttcctaaacacaa
+cggatttagacaaattaccgaatgcgccggagagtagcatcttagtgtcatgcctatcat
+ggcggctcagtacgaagagttcaggcatcgaatattgtggtagcccgcactcaaagttcc
+gccattaggtaagctatatattgtggtcagaacttgaggacaactatgagctactaaaaa
+taaacaattttgtcatttgttctagatatgtggcattcatcgaacgcttgtaccagaagt
+tacattcgcagcgtgagcgaataaacccgaatgagcgtaacattatcaataacatatagt
+tcagatagagaacgaggtattcgacagagaattacccaacattggttattaatctatgca
+gaataatttagataatgtcactacataatattaggaccaaaaggtgattccccagaagac
+aaaacaataaacaatctcacatattcgctagtacctatgtatgggtatgatcttctgatt
+ggacggggataatttccaggtatattaaaacttattaccataatctagacctaagagagg
+ttatataagtaaagagctgtgttccgatagaaaaacccgaccttaaagacttgcgaagta
+aattttgctttaacaaaaaaacctacgtaagggaatattctgtataaactgaaaagtcag
+gtgtaactacatgagtcatgtcttcgattaattacaatgcgatctcgttattctgatcaa
+ctaatatcataaactgccactacatcttgtacaatcattcgcaacaatacttttatgtgc
+taaggtcacgtgcttcctctgctatgctgatttaatcagattcataaaggaatacgaata
+actctggatccattaccacgcaagggatttatttacggctgattactttttggctgttga
+cagaactgccatgaaagtaagatgtcgcatcttgcataaataatagcacctaatatagcc
+gacaaagtgattccgataacagattttaagttgtccagccttgagactccatgaagaccg
+cttgggagcttccccgtgattagaagaatctaaatcccaagtggatggggggagtttaaa
+tctcagcaccaacaaatagtacttcctctcagagcgcgtcatggtcgaaggagcctatcc
+tgatagaggtttgaaagcgcacgcgcatttaactgtcatattaaattggaatctcgtaag
+tgtcggcagtacgacaaattttaactgatgtcggtatacggagaagaaggaagcacgcat
+tgaagcagctacgcagaactgagaagatgacactctaagatacaattaatacaaaaacgt
+tttaagcccaatctatcaacagatgtaagatgtctaatacacaagaataaaaccttcatg
+tcccgatgtataataacagctttatttctgctggtcgaggtgaagtagtggaaattactc
+catcttgctgcgcgtctttatagtgttggctactctgtaaccgacgcgtccatccctctc
+tcctagtgatccgtatatccaattagaggataaccaacatctgcgttaccgacgaattta
+aatttttcgactatttaattccgttcaaacccgtattcgtagtaagtgtttcatagattt
+atgaccgacatcgtgtacgagttgcagtgcatatgtagataccactaattgctgatctag
+gatacatgctttataaacatgcttacttggctattttatttactgtcatgtgggggtttt
+tattttcaacaagtatgtgctaccattggataatctggcttcaaattgaagatatgcgtt
+ccaaacttgtctactgtttgctaagtaggagttgtcccattagaactacgcagcacgtgg
+tttgtgatcgaaaagaataattggcaaatacgaggctagccttcaaatttaatgcagatt
+actcctcagaaacacacgtaagcgacgaacgtgatgtttactacacaatgcgtatcatag
+aaattcgtgataatttttgttccaacctttgaatctagactgagtggaaaaagatttcac
+cgggataccgtttatgctggttttaaaaactcgtcgaatcatcttataactgcattcaaa
+tggatttctcaatcatctgtacgtcaactgttttaacaataacgtcagaataaaccggca
+caatgagacggcggtctttcactacaccacacccttaggattataagtgacgtgtggatt
+cgaattctaaggtgacgggatctacaagcctcagctacattaggtctgaagatctttcgt
+atagccgcgtatgttactgtttggatatgggttatgctaatcaacagttgacagcgagtg
+aaacggccttgcgacctgaaatctttacggttaccttttgattcaagacaggatcgacga
+tggaccacgtgaaatgaattcaaaactgtaacatcgcttgtgcctcagcgaccgagtaac
+gacaagttcacatcctctatgcaactatcattgtggtcattaaggtattcaagattaact
+aagagtcgaccatatattctagagttttacaattaggaaccgttagtctagactaggagc
+gtgcaacatcgcaggaggtgtggactgtcttgacccaagttgcctgacacatagtgtctt
+ttgcttcatgtccttagcaatgcgatacctcaatcgtagttttatcgggataaataacat
+ggtgtttaaccctattaatggtttctattaatctaaattgtaaggcagcccttgggtcga
+aagcacattaggccacatacacagtatgaaattgttcgagtgtccagaccataattgact
+accatggtacacggtgttgctattatgactcccgcaaaactcttgacagagggaattttg
+gtacattgatgtaatcgatgatttaacagtaggaactagacgtcatccgttagactgagt
+tccgacatgctcaaattgtcaggatttttatccaataactaatggctctcacatgtaaat
+aaaatcacattaacgtcacttagtgatggattcgctaaacagatagactatcattcatga
+actggcactgtttcgattatatttgcaacatcgaacatacttaaagttaaatacgacatc
+attcaattaaaaaaattcagtacacctctaatgagtatcccgctttggaggaaagagtag
+cactttaaatggacaatttaggccggactttcctgtaaatggatgaagtcattgtacagc
+ttgaataaatcgttagggttagtccttacatccaccatatgttaatgaataaagcctgag
+ggaccttagagctaacttgtccaacacgttgctcatttacttaataaggttgaaatgtat
+cagtaagtgacagcgagtgtagattttgaccatttaactgaccttcacagttttgtcttc
+agacgtcacttacaccataatgatgacagagcttgtagatgcacacactcattcctagtg
+taaatcaagtagtagctagattattataaagagatattttctggcgtcgaacgtaacaca
+gagagagtataaggggcatgataatggcttatcaatatgtgtaagaaaaagtttttaata
+tcatctaactcggtggaatgcacacttatggccaactgaccttgggacgagttaagatac
+cataagaggttgcctgtaagttaagataacaaagggatattccatctttgtgtgctaaga
+acctatttatatttgcagccataaaaacctctgtgctatgcagccaccagagttatttat
+acaaagaaagagaccatttagatacgttaattctgcttgcgatttattaaacagacattt
+cacgtccaaccactacaaaagccctatcgcaagacgatcattgtattatagcctatgcaa
+cgtagctaagcggccgaggaatcataaaatatgaattgttacattgtttactacatatga
+tcacaatctttgtaaaaggttcgttcgtgatactaccatgtacctaactaacctgagata
+tatgcaatgacttatggggtcagcgcgcaacatccgcaaagcatagtaatacaaggtagg
+aaaacttctggatttcccaaggttataatgctctatactgaccaagagatccgttacgac
+tcgcaatgaatactctaagggcactcacaaagaaaaccactaattgataaatttcaatga
+taatatcctgaattgcatcgtgtatgagttacgagaagtcgcatttaatgaattagtcat
+agaaatgtcatagcaggaacataattactatattttaacgatttaatcgtagttggagtc
+ctttcccaaattatgtcatcagttccgatttagatgttttcgggcccttcttagtaaaga
+agttaatatccaagactagctcctcacccacgcatgcacatattcgcgagaagtctgata
+gaatattcgacagaaatgcgactctagctcacactcgttaactgatcaggtacttataga
+caagtacgttatcagatatcgcttcggggcattgttgcgctacctttgtgcatagcagtt
+ttgaaaaattgttcaagacctgaacgggaaaatgatattatttttttaggaggaataata
+cagtaccatgtaaatactcaaccaccttacgtacttcttacgccgaacatatatggcacg
+tgttattcggctaacaaaactgttgtgccttttctataaggataagcagattcgttttaa
+acatatgacctgtaaactgggatctacaaaagaggtacttaaaataaattgcgcaacggt
+ttagatctgcggatctttggttaaagagcaccattagatgtgccatacttcctatcgcct
+gagcgagaatttagtctgaggaaccactcttgggatttaaaacaattcggttaggacacc
+tactcggcggatgaagcaatacgataacattaaaagtcgttcagtctaattttggtcgta
+gtacgatgagctgatggccaattgtatttttattaacagcactgaaacaaaatggagact
+ttagactaatactaaagtctcaatgttcgtcgaaccttaaatgctcggaatgaggggatc
+ttcggaagtatagcgccgaagtgtatctcattattataacaccagtgtacagacgacatc
+taattatggccagaaactgtcattgtgccattaagaggattagtagatagtctggaccgt
+ggaatagaattttgaccaaattgaccagtcctgcttgtagacagcgcgatctaaactgca
+cgagaatatacaagttggtggtgcttgtggctgagcacgctaagatgcgtttgtttttac
+gattctagtgcttcttaacgcaattcagtcttctagatccgctattccaacatcaatatc
+tcaatttaaggtcaatatatataacaaaattagacagagcagctgacacttacgaagcat
+cgtagaaccgatatagtcgaccttatgatgatatggacgtgtccaagtccgcacttccga
+tgcatcttgacggtgaaccgaaatgaaatcttcattagggcccccatgtgtcaaaccact
+cgagtcccgtctctgaagtcaagtattactgcgaaaaattcgtctactattagtttatta
+tgaacttatgacgcttaaataaattaaacagtaagcctgggaaaatgttaaggcaggaat
+ctttgtaacagttcataatgttgctaaagattatcagaccccgtgaagacttcgggcttt
+gggcttcgtaccgtagcataatacatctatatagttagaggcttgcgtgttgttgtgcta
+ttccacatatagcagctctgggcgactcttcaatgaaaatgaaaaatggtaacctggcga
+cctacttgttaagtcagtttaattcaaggggattaagtaccaagggtcgagtttctctgt
+atttattatactgtaggcaagaagcttttttggcgagatttaagacttaagcctatggta
+aaaatttgatagtgagcgactatagtaagagatttgggtggttagtaattaaaattctcc
+tatgctaaatcaggcgtacaatctgagggtgcacatttctcgacgcgtgaaccttcaccg
+aaagcgtgtggattatacaaatttcaaacatattggcggggcacttatccataatagatt
+tctgtttgtacgccaaactctgcctcacccctccataaattgtattggctagaggttaaa
+ttctccgtaaatagagacacatatagttttatacaattgtttgaatcaaagcacgagaaa
+cttttaaccgtacattgacaaatgtcttcggatggggcagagcatctcttcgtgacccaa
+atcaatcgctgagcaataagcaagaaaacacagattatacaaagagatctggatgaagat
+attcgtgcaatcactatcgttatgttagagagttccatgcatgaggactcgttttttgac
+caggagaattaagccaagaaataactgacgtatttccaaatgaattctacgtgtttttcc
+tgtcacctttagccagtgttaaagatgactatggagtttcgaataggttattctatagac
+attataacgagtggaacacccataccttcacagtgctaaaggtaggaacgggtacgtcag
+gtagttcaagggattttaggttcttaatccaacgaagaaataacgcatcacccgtcattc
+tattgttttcgtcgggattacttagtaggcagggtattctaacctacctgagttacaaat
+ctttaaaaaactggccatgaggtcatggtgataaaatctgaatcgcctaaattcgcgtcc
+ctaaggaaatatactagaatccgtctcagaaagtgcaaaggttgacttcttcccctaaca
+cagaattctcagttttatagctatctagtggcattcctttttataaaactttacgtttgt
+aagggtccaactttacaaaagctcggatgtgtatgtgtaatcttccgccgtgtaagactt
+ggaacccatgtatattgacggcatggcgtggctaagcaggtattgatcttcagtgtaaag
+caaggtatgttctaatctaacaatgtaaagccggggattagccgccaaaggggtctaatg
+acatagagatgctctgaaatcgtaccaactataaaagcacgggatttgaaatatagcgac
+agatcttccgtattctgttagttgacatctgtgctgtctttaccgattgtgatttggctt
+tagcagtcatttagtttcgttactcattgctcgtgcgatagttccaccgaatatggcaca
+ttcgttctttttttccattttactgcaaaccttttcaaaagctgatcgataccactgatg
+atggcattgattagtcgattggcaactatgtcctgcttatatctccaattgcattgaata
+tagtaaaaaataaaggctcgccttcccaatgggctacggagtacacgaaaaaatcgcaac
+tcgtttaaccaagcgccgtacctaacatataagtgattgagacaaatagttctccagacg
+tattgagatatatgtctcctataggcaagcgtttctaattgctgaccagaaattagaatt
+aggttgttaatactatattcgaccattttattccacgaatgtgctattctactggtattg
+ctccgtatgcgatatataaccaacacggaaagtcgtcgattgcaaagtggctccgtagaa
+tcatttctggtcatttaccgggagcgcgcttgaacaatggatgcggtatctgccatattg
+ttattgttaaaaagacttccgcttactatcgcttcgatcatcggaaaaatattaatgagg
+attgggtcgtataagaaaatcatcttttcagttcgcagatttttgccaatttaaccggtt
+atttcgtcagacttggtagtgtagttacaagcatcacgattatatcagctacagaattaa
+actgtcctgactcgacggggcagtgtgtgagtattgcgctatatattcaaggtaacagga
+ggcatataggtcatagtacaaggataatgaggtttgctaactttaaaaattattgattta
+acggttgattgaaaatctctgcaagatgacgctagaacacctgatgttcaagtttgccga
+taataacatataagatgaattactgtctttagaccctcatgttaatccgctaacttaggg
+cggaaacaatgttaggctatgcggagtaagtactatattatgataccacatagaatttaa
+cattcatatgatgtctaatacccgttcccaaccttgcaaccgtcccgattaattaagcaa
+ttacggtcatcaatgggccaatcctgtctcaaaaattatcatattcaaggttcagctatt
+ttggcaatgggtgagtaccgttcttagtgatttacgaacccataatctaggcgacttaat
+atacaagatttagagttacgttttccgggtagtacatattaacgaccatggatcgggtga
+ggtgttgtattagttatctgatcttgtcagtagctcccaatgtcccagaatattatgttt
+ctactagagtgttcgtatactggaatttaaatattatgtaagactagacaaattttatgg
+atacattaggccatcgtagaatatgatatagttgtaacgtccctctatagattttcggag
+ggcaggtatattgcttaataaagatgttcggaaatcagcggaaaggatttgtaattaact
+gatgcgcagcgcttaaataagtttagactattaagctatatgttcgacagcatgtagttt
+tttttaccagaaagtgttatactgatgacccatggaggtagctcctcatgataaaaatat
+tgttacttaagcattactattatagtgttcaaactagtaccgttgcatactttaagaatc
+agacatggcgtttcttatgcagacacacttttttagctgttgacgcccacctcacatcca
+tagtaggtcaatcgcataagaacaatattctggactgttttattacccagaagaaagttt
+tttctttccggttcgttaagacaataaagatcatttcattcgttctcttaacgatgaact
+aaagtacttaaagtatccgcctcttgtttcgactagcgcatagtgtaataattaaggcaa
+gataagaagaacaggaacgcgcacgtcggagataactctaatagtctctttattccgttt
+aatatagcccgtaattgcaccatgcgctacagtaacggccgccttcgcaaacctatttat
+gtaattccaagtttaggtatgcaatggttggggcaatgtgaggggttttatcaagacttt
+cgttgcttcgcggggggcgcaaagcagactttacagtagttaaccgaaaaccgcagggag
+tcgctctaagtgttaccaacccctcactactacgcgaaggtactcgattattccttgaat
+gggctgaaacatcgtgattagcgtcttatgattcaggctgatagaagaaaacttattttc
+tatattccacgtatacaatcacactcgtaactaaatagttcccagcgttgtaatgtcgct
+ataataaataaaatacaaagaaaattcgtctgggtgcataagtacagttagtcgtctgtc
+acataaataatccgcagtcgatctcattacaggtattgttgttggtcaaccttcgcaagg
+tggtccaagtagcattgttgaacagtaaaactaccgtcacacaaggaatatcataataga
+tgccatacacggttttacttgatatgtttacagtccttgagttgcaatcgtagtattgtt
+tcatccggggtgtgtacgaagtaatttagacaaggtgtgtagcggtcactaggtaaaatg
+acttaggatggatgagcatttaggtattctatgataacactaaccatcatgtttctaaaa
+tcctcaggaaatttgtattattttaccaacctgtatttatagaaagtgcttttgacttaa
+agaagccgaagtgttcaaattaaggagtacctgattgaaagaatggggaattgtaatctg
+taactcaattacaaataagccgttctaaggattaaggctttgtgtctaagcaactcacgt
+gaattcgaaattcatactcgattaacgactttaatactcttctgcgtatctacagactca
+tttaaattacggaatatgttttcgtttttggtttccagctcgcacgtacgcgtttacaaa
+taaggacacctggtacaattggctggagtacaatgttggtttttatttgctgattatccc
+gatccctgtgggcgttggcataaccgggttttcttcaagactactttcgtgttgcttata
+tacctggtaatatcggtgagtagcttagggcttaatcacaatactaacaagttctctatg
+gattggacagggcggcatccgttgactgaacgatctattaatccattccctgcactggat
+aaacaagacccatttaaattgaccatagagatgttagcgtcatatttctgttcgtgatag
+ggtacatatattataaacggattatgagcagtggttttctagaaaagcattcatagttag
+gagtgtatcagatcataccactgaaccatagagcacaattctctactggctatacttcat
+tcctttttgtccgggtggggacgaaatttaaaggttctaacctagaacgcagagcgaatt
+gatcaaggcgctggccaagtgaacggttctaaatgttcttaatgagaattgcgtattttg
+actattgacagggcatcgtaaaccgctactcgacttggtatctgtaatctgtatgtagat
+agagtacgggcctataattcaaattcagccaccgaagattcacaatcttcagacgtttga
+aggaaagaggtttactggtatgtggtgtcaagccccacccattctctgttatatccgagc
+attaatgtagtttcactgtactacggtcacgccgtagagtcggcagggcaaatccaaaac
+aatttaggctgagaagtggcactataatagtttagcctaagtcccttcgctaataactca
+acaaagatgacgcaaaagtcggcgaatagattgcgttcgcgtaagggtatcttgaatact
+gatagctctcatggtaccaagaactttcataacctctttatttaccaaacctgttctact
+agcgttagtgttttagtctgtagccgacacaaaaaccgagaatggccggcgtaaccggcg
+cctgcaagctaacatgggatcaaaactattggcttaacgtttaatcgaatgagactagca
+ctgtattactctttcgtttcggcagcggatcaataaggaggtgacggcatcactctctta
+tagtagatatcacttattctcacaacggaagtaggatcttccgtcctcattaaatttgca
+actggctcaatgtaacactgtaatgttaacaaagtatgagctgaaggtcagagcagacga
+tgtagtaaggtccctcgaagctgcttacagtatccttgaggctcaacgggctatgcggaa
+attccagacctcgagttacattatgaaacgtgtcattccatctcattaaatagttcgtgc
+cctatcgccttgtaatataaacaaccgtttttgtctattttcccaaggagaaggagagta
+gcagcttagtggcttgcctatatggccccctaagtacgtactcggcacgcttagaagatt
+gggctaccccgcactatatgttcccaaagtaggtaacctagatagtgtcgtatgaaattc
+aggtcatcgatgagagtataaaaatatacaattttggcaggggttatacattgcgggcat
+gaagagtaacattggacatgaacggacattcgaaccctgtgagtttaataccctatctcc
+ggatcattataaagtaaatatacgtcacttactctacgtgcgtttagacagtctttgaaa
+ctaaattggttatttttctttcatctagatttgtctgtatctaactaaattatagttcca
+cataaagctgattcaactgaagacataaatataaactttctaacatagtagcgaggaaag
+agctatgcctagcatcggatcatgcgtccgcgagtagttcctggtagagttaaaagtttt
+tccagaatctagaccgaacacagggtagtgaacgaaagtgcgcggtgaacatacataata
+ccgaacgtaaacaattccgttcgtattgttgctgtatctatatttcctacgtaaggctat
+ttgatctataatatgaaaagtcacgtcgaaataaatcaggaagcgcttcgagtatgtaca
+ttcagatctccttagtatcatcaaattatagattttacggccacgaattattggtctaga
+tgtcccaaaaataatttgatgtcagtagcgatcgtgcttcctcggagttgaggttggaag
+aagagtcattatgctataccaagaactctccatccagtacctagaaaggcaggtatgtac
+cgctcattaattttgcgatcttgacagatctgcatgcaaagtaacttgtaccagatggct
+tttataatagaaactaagtttcccgaataacggtgtacgataacagatttttaggtgtac
+agacgtctgactcaatgaacacacattgggacctgccccgggaggagtagtagataatta
+ccttctccagcgcgggtcttttaatatcacaacataaaaatactaattaatatcacacac
+cctcatcctcgatggagcctagcatcatacacgtttgatagacaacgccaattttactgt
+aatatgatattcgaatctagtatgtggacgctgtaccacattgtttaaaggagctccctt
+taccgacatgaacgaagcaagctttgtacaagatacgaagaactcagtactggtaactat
+aagagacaatttatacataaaagtgttaagaccattatataaaaagaggtatgaggtctt
+tgtaactacaataatacattcatcgaacgatggagaataacagagttatttctgctgctc
+gagctctagttctgctaatttctcaatcttgatgccactcgtttgagtcttccattcgct
+cttaacgacgcgtacatccctctctcctactcttacctatatcctattactggttaacct
+acatctccgggaaagacgtaggtaaagtggtccacgattgtattcacttataacacctag
+tagtactatgtgttgctgagagtgaggacacacttactctacgagttcaagtccatatgg
+acattacactttttcagcatctaggtgtcatgatgtattaacagccgttaggggctattt
+gattttatcgattgtcggcgtgtgtattttcaacaactaggtgctacaattcgtgaatag
+gcatgaaaattcaagattgcagttcctatcttgtataatctttcctttggacgagttgta
+ccatttcaactaacctgcaagtggggggtcatccatatgaagatttgccaaatacctgga
+gaccctgaaaagtttatccagattaataataacaaacaaacctaagcgaagaacgtcagc
+tttaataaactatcactatcatagaaattcctgttaattgttcttccaaacgttgaatag
+actatcacgggtaatagattgaacacggagaacgtttatccggcttgtaaaatatcgtcg
+aatctgctgataactcaattatattcgatggagaattcatatctaccgcttagcttttaa
+aaattaagtcagattattccgccacaatgagaaggcgcgagtgcactaatcaaatcactt
+aggattattacggacgtctgcattacaatgctttggggtagggttatacaagcatatgat
+tctttaggtctcttgatcgggcgtttaccaccgtagcttaatgttggcatatccgtgatc
+ctaatattctgttgtcagcgtgtgtataggaatgcacaacgcaaatctttaagctgacct
+gttcatgaaagacaggagacacgaggcaccacctcaattctatgcaaaactctaacatag
+cgtggcactatgagtacgtgtaacgacaaggtctcatactcgatcctaagataattctcg
+tctggaaggttttaatctttaactaagagtagaacttagtttattgacttttacaattag
+gatacggttcgcgactctaccacagggcatcatacctggagctctgctatctcgtgacca
+aagtggcagcacacatagggtcgggtcctgcatctactgagcaatccctttaagcattcc
+tagtttgagagccatttagatattgctgtttaaaccgattaatggtttctattattataa
+agtgtaacgctcccattcgggacattgaaaattagcaataagacaatgtatgatattcgg
+cgagtctcaacaacattatggtctaccatgggacaaggggttgatatgatgaatccacaa
+aaaatagtcaaacacccatggttcgttaagtgagggtatccaggtgttataaggacgatc
+tagaagtattcaggtacacggtgttcagacatgctctaattgtcaggttgtttataattt
+aacgtatcgctctctattctaaataatataaaattaaccgctcgtagggatgctttccag
+taaaagatacactatcattaaggttatgcaaatgtggcgatttgatttgaatcttagtac
+attcttaaacttaaatacgtattatttaaagtaaatatattatctaaaccgcttttgtct
+atccacatttcgtcgaatcacgacctcgttaatgcgacaatttacgaccctctttcatct
+aaagcgatcatctatttcttctgattgatgtaatactgacccttactccgtacatacaaa
+tgatggtaagcaagaatgactgacgctcctgtcacctttcgtggcaatcaactggcgctg
+gtactgaagtagcttgaaagggatatggatgtgtatgccaggcttcattttgacaatttt
+tctgtcctgctcagtgttgtctgaagtcgtatcgtacacaataatgatgactctcattgt
+agatccaatcacgctttcctacgctaatgaaagttctagatagtgtaggtgttagacaga
+ggttagcgcctacatccttacacacacagtgttgaacggcaagcataatcgagtatcaat
+agctgtatgtatttgtttggaatatcatatttctcccgcctttgaacaatgatgccaaaa
+tgtcctgccctagagttatgataaaataactgctgccctgtaacttaagtttacaaaccg
+atattcaatcgttgtgtcctatgaaaatatttatatttgcaccaagaaaatcatctgtgc
+gatgaacaaaacacagtgatttataaatacaaagagtacatttagttaccggattgcggc
+ttgacatttattttacagaattttatcggcaaaacacttcatatgaactatcgcttcacg
+ataagtctatgatagactagcattcgtagagaacaggaagagcaatcattatatatgaag
+tgttacagtgggtactacatatgagatcattaggtctatatccggccttcctcataagac
+cttggaaatatcttacatcagagatatcaaaggaagtatgggcgaacccagaaaaagccc
+caaagaatagtaattcatcggacgtaatagtctggttttaactaggggttattgatattt
+aagctaaaagagttccctgaacactcgaaatgtataatctatcccaactaaaaaagtata
+cctctaattcagaaatgtcattgagattagactgatgtcaatacgctaggaggtaagaca
+agtagaagtttttgatttaggaattgaaatgtaatacctccatcttaagttctatatttt
+aaagttttatgcggacttcgagtaagtgcacaaatgatggcataagtgcccagttacatg
+tttgcggccccgtatgagtaatgatctgtttatcaatctctagctactatcccacgaatg
+cactgatgccagtcatggcgcttacattagtcgacagaaatccgacgatacctatcacgc
+gtgaactgttctggttcttattcaattcgaagtgatctcagatacattacggccatgctt
+gcccttcatgtctgctgagcagttttgttataggctgaatctcctctaagcgaaattgat
+aggatttttggtggtcgatttagtctgtacctgcttattaagattcaaaatgacctactt
+cttacgccgaaatgatagggatcggctgaggaggataaatatacgctggtgcctggtatt
+tatccagaacaagttgcctgtgtatcagatgaactctaatctccgagataaaaaacaggt
+acgtaaaataaaggccgcaaagggttacatctcaggatcgtggcgtatagtccaccatta
+gttctgacttacttaatatagactgaccgagattgtagtatgtggatccaagcttgccat
+gtaaaacatgtcggttagcaaaacgtataggagcatgatcaaagaagagttaattaatag
+tactgcactataattgtcggcggagtaccatgagctgttgcccaattcgatgtttattaa
+cagcacgcataaaaaatccagacttttcaattagaattaactataaatggtccgcgaacc
+ttaaatgatcggaaggacgggatctgccgttgtatagaccccaactctatctaattttta
+taacacctctgtaatcaacaaatcttattatgccatcattatgtcattcgccaagtaagt
+ccagttcgagattctctggaccgtgcaatagtattgtcaaattatggtaatggaatcctt
+cttctaacacccttagaaaagccacgagaattgacaagttgggcgtgcttgtccaggagc
+aacataagtgccgtttctttttacgatgatagggattcttaaagcttttctctattctag
+atcccagttgccatcatcaatatctcaattgatgctcattatatagttcttatttagtat
+gtccagatgtcactgaagatcctgcctagaaccgatattctcgacaggatcatcagttcg
+acggggcaaacgcacctatgcacatccatcttgaccgtgaaacgaaaggaaagagtcagt
+accgacccaatgtggaaaaaaactcctgtccacgatatgtaggcaagttttactgccttt
+aattagtagtcgattagtgtagtttgatattatctaccttatagaatgtaaacagtaacc
+cggccttaatggtttggcaggattctttgtaaaagttaataatgttcataaactttatca
+gaaaacctgaagtagtccgcctttcgcctgcgtaacgttgcagattaattcgttttacgg
+agtggcttgcgtcttgttgtccgagtacacatattgctcctctcccccactcttctagga
+aaatcaattatgctaacctgcagaccttcttctttactatctttaatgcatgcccagtat
+gttcatagggtagacttgctatctattttgtataatctacgaatgatgcttggggcgcga
+cttttaacaattaagccgttgggtataatttgagagggtgccacgatagtaagagatttc
+cggcgtgagtaaggaaaatgataataggattaagcaggcgtaatagctcaccctcctcag
+ttctccaaccctgaaccggctaagtatgactgtgcagtattaattttgaatacatattgc
+agcccctaggatacattatagatgtctctttcttacccaaactcgcccgcaccaagaaag
+aatgtggattcgattgaggttaaattagccggaattacagacacagattcttgtttacaa
+ttgtgggaagaaaaccacctcaaacgttgaaacctacattcacaaatggattacgttggg
+gatgagaatcgattccggtcaaaaatcatgcccggagcaataaccaagaattcacagagg
+attaatacacttctccatgaagataggactgcttgcactatccttatctttgtgtcttcc
+ttcaagcaccaatcgtttggggacaaccacaattatgccaagaaataacggaaggtgttc
+caaatctatgagtccgcggtttcatcgcaacgtttcactgtgggtatcatgactttggac
+tttagatttgggtattctagagactgtagaaagactgcaacaacaagacattcacagggc
+gaaacctaggaaaggggaccgcacgttgtgctagggatgtttccttaggaatccatacat
+gtaagaaagaatcaaccgtaattatagtgttttcggccccttgaattacgtgcatgcctt
+tgctaaaagacctctgggaaatagattgaatattctggacagcagcgaatcctgattata
+tctcaagcgaatatatgacccgcaagaaggatttatactagaataagtctaagaaagggc
+attgggtcacttcttccactaacacacttttatcagttttataccttgagagtcccatgc
+atttttatatatatttaactttcgttgcgtaaaactttaaatatgatccgtgctctatct
+ctaatctgaacaacggtatcacgtcgaacaaatctagtggctacgaatcgcgtcgctaag
+aacggtttcttctgctggcgttagctacgtatcttctatgctaaaaatgtatagccccgc
+attagcagcaaaaccgggagaatcaaatacacatccgatgaaatcgtaacaaagataaaa
+caacgcgatttctatgtttgccaaagtgattaagttgtatcgtaggggtcagcgctgatg
+tcttttcagtttgggttttggatttaccagtcttttagtttcggtactatttgatcggga
+cattcgtccaaacatgatggctcattcgttctttttttcaattttaatcaaaaccttgta
+tttacctgatacattaaactgagcatcgcatggaggtggagattcccatatatgtaatca
+tttgatatcctattccattctttttagttataaataaacgctccactgcacaatgggagt
+aggacttcaccaataattagcatctactgtaaacaagcgccgtaacgaaatgattactga
+ttgagaaaaataggtctcaacaacttttgacagatatgtatccgatacccaagcgttgct
+aattgcgcaaaagtaagtagaattacggtcgtattacttgttgccaaatggttattactc
+caatgggctattctaatccgatggatacgtaggagagagtgtacctacaccgaaactcgt
+agtgggcttagtggctacgtagaagctgttcgggtcagttacagcgtgcgaccttgtaaa
+atcgatcacggtgatgaattattgttattgtttaaaagaagtcccctgaatagcccttag
+ataatacgaaaatttgttatgtccagtcgctcgtatatcaaaagattcggttaagttcgc
+agagttttgccaagtttacaggtgatttactaacacttgggagggtacgtacaaccatca
+cctggttagcagagaatgaattatacggtcatgtcgcgaagggcaagtgtgtgagtattg
+accgagttattaaacgtaaatgcaggcatttacgtcataggacatcgagtttgtcctttg
+cgaaatgttaaatttatggttttttccgttgagtgataatagctgcaacatgaagatagt
+aaaactgaggttaaactttcaccatattaaattatatgttcaattacgcgatgtacaaac
+taatgttaatcagatttaggagcgcgcttaatatgggtccctatcccgactttgtacgag
+attttgataaaaaatagtattgtaaattcatttgatggcgtagaaccgggcaaaaccttg
+aaaaaggacacatttaggatgctatttccctaagaaagcggaaaatcctggctcaatatt
+tataatagtaatggttaagattgtggcccaatcgctgagtacccgtcttacgctttttcc
+aacacataatcgacgagaatgtatttaaatgtttgagacttacgttttccgcgtacttat
+tattaaagtcattggagagggtgtcgtctgggtgtagttttctcatctgctcaggagcta
+aaaatgtaaatctattggttgtttctaattctgtcgtccgtgtaggctatttaattttta
+tggtacacttgaatatgtttagccataatgtagccaatactacaatatcagatacttgta
+tacgacctatagacttttgccgaccgctcgtagagtgatttagaaagatgttcggatagc
+acagcaatcgtttgcgaatgtaagcatgcgaagcgagtatttaactgttgactattttgc
+tatatgttactctgaatgttgttttttttaccagaatgtgttataatgatcaaccatgca
+cgttcctactaatcatataaattttgttacgtaagcttttctatgatagtggtctaaaga
+ctacccttgcatactttaagattaagacatgcactttaggaggaactcacacgttttgag
+ctgttctagcccacctataagccattcgtccgcaatcccataactacaatagtcggcaat
+cttttattacccagaactaacgtttttatttcccggtacgtatcacattaatcttaattt
+aatgcgtgagagtaacgatgaacgaaagttatttatgtttaagccgcttcttgagaatac
+agattactgttagaatgaaggcatcataactagaacaccaacgcgcacctcgcacattac
+tctaatagtagctttattcagtttaatatagacagtatttgaaccaggcgctaatgttaa
+ggcccccttcgaaaaccttgttatgttattccatgtggtcggaggatttgcggggcgata
+gcgctgggcggggatcaacaatttcgttcatgcgagcgcccccataaccagtaggtacag
+ttcggaaaagaaaaccccacgcactcgctagaagtgttacaatcacatcacttcgtaccg
+aagggactactgtattccgtcttggggatgtaacagactgattacagtcttatgatgaag
+cctcattcatctaaaattagttgatttattccacggatactatcacactcctatagaaag
+agttaccaccgtgggaagctagatataataaataaaagacatacaatattagtatggctc
+atgatctacacttactcggatctctctttttttataaccagtagatcgcattacacgtat
+tgttgttccgcatcaggccctaggggctcaaacttccatggtggataactaaaacgtccg
+tcactaaacgaagatattaatagatgaaatacacgggtttacttgatttctgttcagtca
+ttcacgggaaatcctaggagtctttcataacggcggtcttagtaggaatgtagtcaagct
+ctgtagaggtctcgacggaattggtatttcctggcatcacaatttacctagtattggaga
+tcacttaaaataatgttgagataataatcaggatatttctagtatgtgacaaacctctat
+ttagtgattgtgattttcaattaaacaagacgtaggggtcaaattaacgactacatgttg
+gaaagaaggccgaattgtaatatctaactcatgtactaagaagaagtgctttcgtttaag
+gctttctgtctaacattctaacgtcaattcctatgtaatactactgtaaccaagttatta
+ctcggctgcgtagataaagtctcatgtaaatgacggtttatctgttacttttgggtttca
+acctagctaggacgccggtactaattacgacacctgcgtatagtgcagggtgttcaatgt
+gcctttttatgtccggattataaccatccctctcccacttggaatatcaccgggttctta
+atgacttagttcgtcttccttattttccgggtaagatcgctgtggaccggacccattttg
+atctagtctaaaaaggtatatagcgtttcgtctggcccgcttacgttcactgaaacttag
+attaatcaatgcactgcactggattaacaagaacatgttatagtgtactgacacatgtta
+gactaagaggtctgttcgggttagccgacttatatgtttaaccgattttgacaactgggt
+tgagagataacaatgaagagtgaggactgtagaagatcttaaaactgtaccatagtgctc
+aattcgctaatggcttgaattatttaattgttctaaccctggcgtcgaatttttttggtt
+cgaaaatacttagcacagcgtattgttcaacgagatgcacaactgtaccgttagaaagcg
+gcttaatgacaaggcagtattgtgactattgacagggaatcctaaaaagctactcgaatt
+ggtatatggaagaggtatgtactgagaggtcgcgcctattagtcaaattctgccaaagaa
+gagtcaaaagcttaactagtttgatggtatgaggtttaatgctaggtggtctataccacc
+aaaaagtatatgggatatcccagaatttatcgactttcaatcgtctaccgtcacgacgta
+cactaggcagccctaatccaaaacttttgaggatgagtactgccactattatactgtacc
+atttgtaacttacattttatatcttcaaagaggtagatattgtcggccattactgtcact
+tacactaagggtagcttgattactgatacctctcatggtaaaaagtaatttaagaaccta
+tttttttacataacctctgctactaccgttagtgttttagtcggttcaagtcacaaaatc
+cctgtagcgcacccctataagcagaaggaaaccttaatgcggataaaaacttttgccgga
+accgttaatcctatgagaataccactcttggaatcggtcctttaggctgaggatatagaa
+cgaggggaacgcatcaatctaggttaggtgagagaactttgtatcaaaacgcaagtacca
+tatgccgtcctcagtaaattgccaaatgcagaaatcttacactcttttcttaactaagta
+tgagagcaacctcactcctgaacagcttgttacctaacgagaagaggctttaagtagcct
+ggagcctcaaccggatatccggatttgactctcatccacttacatgatgattacggtcat
+tacatctcatgattttctgagtgccctatagactgggaatttaatctaccctgtttctat
+ttgttaacaaggagaaccactggtcaagatgacgcgcttccatttatgccaccataagta
+agttctcggaacccttacatgattggcctaccaacctatatatgtgaccaatgtacggta
+catagagtgtggcctatcatattcaggtcatcgagctcagtatttaaagattatatggtc
+gctgggggtattcagtgcgcgatggaagactaacattggaaatcaacggaattgacaaca
+cgctcactttaataacctatctcaggataagtttaatgtaattagacggaactttctcta
+actccgtgtactaactctttgaaaataatgtgggtatttttatttcatctagatttgtct
+gtatcgaaagaaagtattggtccaaataatcctcagtaaaatcaagtcataaatataaaa
+tttagatcttaggacagaggaaagtgctttcccgagcataggatctggcctacgccagta
+gttcatgcttgtgttaaaagttgttactgtttatagtccgtactcagggtagtgttcgat
+actcagcggggaactgacatattacactaaggaatcaaggcccttcgtatgggtcatgtt
+tatatatttaattacttacgctatttgatcgagaatagctatagtaacgtcgtaagaatg
+caggatgcgattcgagtttgtaaattcacagatactgtgtatcatattattatagatgtt
+aaggcatagaattattggtattgatgtacaaaaaattatgggtgggcagtaccgataggc
+attacgagcagtgcagcttggaagaactggatgtatcctataactagtaagagccttaaa
+ggtactacatacccagggatgttaccatcattaatttggccatcttcaatcttcgcaatg
+catactttcttctacaagatgccttttagaagacaaaataagtgtcaacaataacgctgt
+aacttaactctgttgtacgtggaatcaagtctcactaaagcaactaacattccgacatgc
+aaacgcaggactactagattattaaattcgccagcccgcctcgtttaatataacatcata
+aaaattctaagtaatatctcacacactaatccgccatcgtccatagcatcagtcacctgt
+cttacacaaacacatgtttaatcgatgttgttatgccaagctagtttcgcgaccatgtaa
+ctaattgtggaaagctgctaccttgaacgacatcaaccatcctacctttgtacaacagac
+caacatctctgtactggtaaatagatctgaaaagttataaatataactgttttcacattg
+atagaaaaacagctatgtgctatttgtatatactataataaattaagcgaaacatggaga
+ttaaaacagtgttttctcatcctccacctcttgttctgctaatttataattcttgatgcc
+actcgtgtgagtcgtccattcgatcgtaaagaacccgacataaatagatacgacgctgaa
+cgagatcctatttctcctgaaaattattagcacggtaactcctagggatagtggtactag
+ttggtatgaacgtataaaaacttgtactactttctcgggatgtgagggagcaaactatta
+ctcgaccagtgcaacgcattatcgacagtaaaagttttcagctgatacctgtctggatgg
+attatatgcaggtaggcgagagtggattgtagcgatgctcggcgggggtattttaaaaat
+ctaggtgataaaagtcctgtttagccaggaaaagtcatcattgcactgcatatcgtcgat
+tagctgtcatttcgtccactggtaccagttcaacgtacatcaaagtccgggcgcatccat
+atcaagttttgcaatagtactccagaccatgaaatggttatccagattaataataactta
+atatactttcactacatactcagcgggtattaaatttcactttatgtcaaaggactctta
+tgtggtcttcaaaaaggtctagagtctatcacgcctaattgtgtgaaaaccgagtaactt
+gatcagccttgtaaaatatagtagaatatgatgttaaatcatttatattccagggagatt
+gaatagcttacgattagctggtataatttaactcacatgattaagcaaatatctgtagga
+ccgagggaaagaataaaataaagtaccatgagttcggaacgctgcattacatggcgttgg
+gctagcctgatacaagaagatgagtatggagctctcttcatcgggacgtgacaaccctag
+cgtaatcttggcagatcccggagcagatgattatcgtctaacactgtctttaccaatgca
+caacgcatagatttaacctgaactgttctggattcactcctgactacagcctacaactca
+tttctatgcataactcttaaagacagtcgcaatatcagtacctctatacacatcggatca
+gactagatcataagataagtctcctctggatccttgtattctgttaagtacactacaaat
+ttgtttagtgtctgggacaattacgataagggtcgcgactagaccacagggcatatgacc
+tccaccgctcctagcgagtctccaatctgcaagcactcatacgctaggggcatgaatcga
+ctgtcaatgcactgtaagatttacgagggtgagacccatttagatatgcctcgtttaacc
+gttttaggcttgataggatgagtttgtcgatccatcaaattcccgacattcatattgtcc
+aataagtatatctagcttattcggactcgctaaactaaattatggtataaatgccgtcaa
+ccggtgcatttgttcaatcaacaaattatagtcaatctcccatggggccttatggcagcg
+tatacagctggtataacgaccatatacaactatgaacggactagctgtgaactaagcaga
+ttattggatccttgtgtataattttaagtttcgatctatatgctatagtatagaaaatgt
+tccgatcgtacgcttcctttacagttaaacagtctatatcatgaagcttatccaaagctg
+gacatttgatggcaatcttacttaattatgaaacttaattacctattattgaaagtattt
+atatgatcgaataagatttgctctataaacaggtcgtccattcacgacctagtgattgcg
+taaattgaccaacctaggtaatctaaagcctgcatctatttcttatcattcatgttatac
+tgacccgttctcagtacttaaaaatgatcgtaagcaagaatcactcacgctcatgtcaca
+tttagtcgaaataaactgccgatgggaaggaagttccgtcattgcgatatcgatgtctat
+cccacgcgtcattttcaaattggttatctacggataactgtgcgatgaactactataggt
+caaaattatcttcaatctcattctagatcatataaagatgtccttcgcgattgatacgtc
+tacagtgtgttggtgttacacagagggtagcgactacttacttactaactctctcttgat
+ccgcaagcataagccaggttaaagtgctctatctttttctgtggattataatagttatac
+cgccttgcatctaggtgcccattaggtaatgccctagtgttttcataaatttactcctgc
+catctaacgttactttaatttcccagattcaataggtctctcatttgaaaattgttatat
+gtcaacaaagaatataatagctgagtggaacaatacactgtgagggagtaatacatactc
+taaattttctttacggtttgcgcctgcacagttttttttatctatgtgatccgcataaaa
+agtaatttcaacgttccattcaagttaagtcttggtgacactagcattaggagagatcac
+caagaccattatttatttagctagggtttaagtcggttagaaatatcagataatgaggtc
+tttatccggccttacgcagtagaaattggaaatttcgtaaagcactgagttcaatggaag
+tatggccgaacccacataatgcacaaatcaagtcgatttcttccgtccttttagtctcct
+gggaactacgggttattcatagttaagctaaatcagttaacggaactagacaaatgtata
+atagttcccaaatatatatctataaatcttatgcagttagggaatgcagatttgaatcat
+ggcaatacgctagctcggaactcaactacaagtgttggatgtacgaattcaaaggtatta
+catccttatgatgttcttttttggatacttttatgacgacttccacgaagtgaaattatg
+ttcgaatatctgaacagttacttggttgagcccaaggatgacgaatgttctgtttataat
+tctcgtcataatataaatacaagcatatgaggccagtcatggagctttcatttggactaa
+catttccgtagagtcatatcacgcctgtaatctgatccgtctttttctattcgaagtgtt
+atcagatacatgacgcccttgcgtgacattcatggctcctgacatcgggtcttttaggct
+gaatctaatctaacccaatttgtttggattgtgggtcctccattttgtctgttaatgctt
+attaagattaaaaatgtactacgtatttagacctaatgattgcgatacgctgtggaccat
+taatataagctgcgccaggggatttttccagatcatctggcctgtgtatatgttcaaatc
+taatagccgagagaaattactccgacggaaaataaaggcagataagcgtttcagagcacc
+atcgtggcgtttagtcaacctttagttcggaatttattaatatacaatctcactctttgg
+acgagctccttaaaagatgcccttgtatatcatgtcccgtacctaaaagtataccagcat
+catcaaagaacagttaaggaatacgactgctctataattgtccgaggagtaccttctcat
+ctgccaatagtcgttgggttggaaaacaacgcattaatatgccacacttgtcaattagaa
+gtttctataaaggggacgagtaactgatttgagacctagcacggcagaggacgttcgtgt
+gacaacatctctttataagtttgagataaaatcgctaatctacaatgattatttgccaat
+cattatcgaatgcgcaaagtatctcctgttcgtgattctagcctaaggccattactatgg
+tcaaattatgctaatcgaagcagtcttctaacacccttagaaaagcaaacactattgaat
+actgccgccgcattcgccagcaccaacataactgcacgtgcttttttccatgattggcat
+tatgaaagatttgatctatgattcttaccagttgcaatattcaatttagcatgtgttcct
+aattattgtgttattatggtctatctcatcatgtaaatgaagatcatgacgtcaacacag
+attctagtcaggatcatcagttcctcggggaaatcgcacctaggaacagccttatgcaac
+cgctaaacaaagcaatgaggatgtaccgacaaaagctcgatttaaaagcctcgaaacgag
+atgtacgaatcgtttactgccttttatgaggagtcgagtactgttggttcatatttgcta
+catgattgtatgtaataacgatcccgccctttatcggttcgatcctttatggcgataagt
+tatgaatcgtcagtatctttagatcaaaaactcaactagtacccagttccccggaggaac
+ggtcatgattaatgcgttttacggtctcccgtccctcttcttgtcagaggaatcagtttc
+atccgatcccactcgatgattggtatagctatttgccgaaaagccacaacgtattcggta
+ctatcttgtttgattcccctgtatcttaattcgcgacacttgatatcttttgtgtttaat
+cgacgaatcatcctgggggcgacacttgttacaattatccagttgcgtttaatggctgtg
+ggtcacaagattgttagacaggtcccgcgtgtcgtaggaaattgataattggagtttgca
+ggacgaatagctcacccgcctaagtgatccaaccctcatcaggataactatcactgggca
+gtattatttttgatttcatatgccaccccctaggagactgtagtcatgtatctttcttac
+ccaatctagcccgaaacaagaaagaatgtcgattccagtcaccttttattagaccgattt
+acacacaaagtgtcttggtttaaaggctggcatgaatacatactcaaaagttgaaaacga
+cttgctctattcgattaccttcgcgatctcaatcgattacgctaaattttaatgcccgct
+gaaatatccaacatttaaaacaggattaattctctgatccatgaacttaggactcattgc
+acgtgacttatctttctctcttaattcatgctccaatacggtgggctaaaccacttttat
+cacatgaatgtacgcaacgtgttaataagctatgagtacgcgggggcagcgaaacgggtc
+aatctgggtatcttctattgggacggtacatttcggttttatagactatgtagttacacg
+gcatcaacatgtaattaaaacggcgtaacctaggaaagccgaacgcaccttgggattgcc
+atgtgtccggaggattacatacatctaagaaacattctaaactatgtatagtcgtttacg
+acccttgtagtacgtgcatcccttggcgaaaagtactctgggtattagagtgtatattat
+cgacagcaccgaatcctcattttatagcttgacaatttatgacccgaaagaaccttttat
+aagtctataagtatatctaacgcaattgcggcactgagtccactaactatctttgagcag
+tgttatacagtgagacgccatggaaggggtttatatattttactgtcgttccctaaaaag
+ttaattatcagacctgcgcgatctcgtagatgaacaacgcgatctagtcgaaaaatgctt
+gtggctaccattccagtcgagatcaaccgtttctgcggatcgcgttacattccttgctta
+tttgcgataaatcgatacaaccccattaccagaaaaacccggagaatcaattactctgca
+gatcttatactaaaaaagagattacaacccctgttctatgtgtcccaaagtgagtaacgt
+ggagcgttggggtaagagcggagcgattttaactttcgcttttccattttccagtattgt
+actttacgttatatttgagcggcacattcgtcaaaacatgatccatatggactgaggtgt
+ttaaatgttaatcaaataattgtattttcagctgactttaaaatctgcagccattggagg
+tggagattccaatagatgtaagcaggtgatatcatatgcaattcttgtgacttattaaga
+taccagacacggcacaatcgcagtagcacgtaaacaataatgacaatcgacggttaaatt
+ccgaacgtaagatatgtttacggatgcactaaaataggtagcaacaacgtttctctgaga
+tgtataagttaccaaacactggagaattccgctaaactaaggacaatttccgtcgtatta
+attgttgacaaatggttagtaatacattcgcagtggataatccgttgcatacctagcact
+gagtgtaaataaaaccaatcgactactggcatttcgggctaacgactagatgttagccta
+tgtgaaagcctcacacatgcttattgccttcacggtgagcaatgtttcttattcgttatt
+agaagtcacctgtagagacagtagagatgacctaaatttggtttgtccagtcccgaggtg
+atctaatgattaggttaacttagaacagtggtcaattggttaaagctgatttacgaacac
+ttccgaggggtcgtaaaacattaaactggtgagaacagtatgatgtattcggtcatctag
+acaaccccatcgctgggagtttggacagtgttatgattcgtaaatccaccatgtgtccga
+attcgaaatcctgttgctccggggagatagggttaatttaggcttttttacggtgtggca
+tattagctcaaacatcaacattcttaaaatcagcgtaaacggtcaccagttgatatttgt
+tctgctaggaagcgatgtacaaaataagcttaataagatttaggtccgaccttaatttcg
+gtccatagcacctctttctaagtgttttgcttaaataattgtattgttattgattttctg
+cgagttgaacacggaaaataagtcaaaaaggacacttttaggttcatatgtaccgatgaa
+tgcgcaatagaatcgagaaatttttagattagtaatcgtgatgattgtggccaaatcccg
+cactaaacggctttcgctgtttccaaaaaattttagtccactaggtatttaaatgttgga
+cactgaacgtggaagccgtcgtattatgaaactaatggcagaggggctcctctgcgtgta
+ctttgagcagatgctatcgtcagaaaaaggtaaatcttttggttctttataattctggcg
+tccgtgtagcctagtgaatgtgtttggttcaagtgaatttgtttagccagaatggaccaa
+ttacgtcattagctgttacgtctatacgaaatatagactgtggacgacccatcgtagagt
+catgtagttacatgtgaccttagaacaccaatcgtgtgcgattgtaagcaggacaacaca
+gtattgtactggtcaattggttcatagatctgactatgaatcttcgtttttgtacaacaa
+tctcggtgaagcttcaaaaagcctccttcctaataatcagttaatttttcgtaaggttcc
+tgttcgaggttagtcgtataaagacgaaacggccttaatgtaacattaactattccactg
+taggtggatctaacaaggttggacatgtgctaccaataagataagaatttcgtccgcaat
+acaatatctacttttgtagcctatcttggattaacaacaacttacgttggtatttcaccg
+gacgtatcaaatgattctgattttaatgactgagagtaaacatcaacgaatcttatgtat
+ctttaagccgctgcttgacaagtcacattactgttagaatgaacgcttcattactacaaa
+acctaccaccaactcccacattaatattatactagatgtttgaagtttatttgacaaagg
+ttttcaaaaagcacagaatcgttacgaacacgtacattaaattgttagggtattaattgt
+ggtcggtgcatttccggccccatagcgctccgcggggagaaactatggccttcatgacag
+cccccccataacatctaggtaatggtcggataactataaacaaccctctccagagaactg
+tgaaaataaaatctcttagtacacaagcgtatactggtttaagtcttgcccatcttaaag
+actcttttcactattttcttgatgcctcattcttctaatattaggtgattttttaatccg
+agaatataaaaagacgatagaaagtgttaaaacacggcgtagcgacatattttaaagaaa
+tgaaatactttttgactatccctcatgatctaaacttacgcggagctatctttttgtata
+acatgtacagagaattaatccgatgcttcttccgattaaggacatagcgccgaaaacgtc
+atggcggcttatcgatatcgtaacgcactataccaagtgattaagtgatcaatgaatacg
+ggtttcgggatttctgttaagtcatgcacggcaaatacttggagtcttgaataacgccgc
+gcgtagtacgaaggttctcaagctcgcgtgacgtatagaccgtattgctatttcctgcct
+tctcaattgtccgaggattgctgataacttaaaataaggttgagtttttaataacgattt
+gtcgagtttgggaaaatcctcgtttgtgtgtttgtcattttcaagttatcaagaactacg
+ggtataatttacgacgtaatgttggtttgatgcccgattgcgaatatcgtacgaatggta
+tttgtacaactgctttcctttatcgattgctcgagaacattataaagtctattactatgg
+attaagactgtatacaagtgtttaagcggagcccgtgataatctataaggttttggtacc
+tttatctgttacttttgccttgaaacatacatacgtacacgggaatatttacctaaacgc
+cgtatagtccagcctcgtatttgggccgtgttttgtcagcattttaaactgaaagcgccc
+acttgcattataacccggtgcggaatctcttagtgactcgtcaggagtttacgcctttga
+gacctctcgacaggacccattttgatctagtcgttataggtagagtgcctttcctatcgc
+accattaccttctagcaaacttagagtattcaatgaaatcatatcctgtttatactaaat
+gttataggctaatgacacagctgacactaagaggtctcttcgggttacccgaatgagttg
+tttatacgatgttgacaactcgggggagtcatttcaatgaagactgaggactcttgatca
+gattaaaacgcttaatgactgataatttagattatgccgtgtattatttaagtgggcgaa
+ccctcccctagaatgggtttcctgagaaaagtcttagaacacagtattctgaatccagat
+gcaaatcgctaacgttagtaagcggctgtagctcttggcagtttggtcaatagtcaatcg
+caatccgtttaaccgtctactattcctagagcgaagagctatgttctgacacgtccccaa
+tattaggcaaaggctccaaaagaacagtcaattgattaactacgggcttggtttctccgt
+gaatccttgcgccgctataccacataaaaggatagcggtgataccacaagtttgcgacgt
+taaagcgtcgaccctcaacaagtacactagcaaccccttagcaattaattttgtccatca
+ctactgccaagagttgactggaccagttggaaatgacatttgatatattaatagagctac
+atattgtaccactttactgtcacttacactaaccctagcgtgattactcatacatatatt
+cgtaaattctaagttatgatactagttttgtaaatttaatcggcgaagacacgttctctt
+gtacgagcttcaactaaatatttcactgtagccaaccactttaaccagaaggatacctta
+atgccgatataatattgtccaggaaacgttaatactttcacaagacaaagcttggaagag
+gtactttacgatcacctgatagatcgaccggaacgattctatataggtttggtctgagaa
+atttgtagctaaaaccatgttccataggaactcctctgtaatgggcaaaatgcagatagc
+gttcaatcgttgcttaactatctatcacagcatcctaactcctcaacagcttctttccta
+aagacatcagcaggtaagttgacggcacccgataacccagagcacgattggaatctaata
+ctctgtatggatcattacgctaagtaaatataatgattttctgactcaaagttacactgc
+gaattttatattaactggttctatttgttaaataccacaacctctcgtcaacaggtcgcg
+atgcaagtgatccaaaaatatctaacttataccaaccattacttctggcgcagaaaaaca
+tagatatctgaacaatcgaccgttaagactgtctcgccgatcttaggaacctaatactgc
+tcagtagttattgtttatttgggccatccccggattatgtcagccatggaacactaaaag
+tcctaatctaacctatggacaaaaagctcacttttataaaattgctcaccttatgttgat
+tgttatttgtccgaaatgtctataactcagtgtactatctattggaaaattatggccgga
+gttttattgaatatacttttgtatgttgagaaagaatgttgtcgtaataattatcagctg
+gaaaatcatctaatatatattatattgagatattacgacagacctaagtgctttcccgtc
+atgagcagatggactaacactcttggtaatccttctcgttttagttggtaatgtttagtc
+taagtaatatcccgactcttacttactcagagcggaaatgactttttaaactaacgttta
+aaggcacttagtatgcgtcagggttatttttttaattacgtacccttgtgcagagagttt
+agctattcgatcctacttagtatgaaccatgagagtacaggttggtaattcacagagaag
+gtcgagaagattatttttgatgtttaccaatactatgaggcgtattcatcgaaataattt
+tatggctgcgcacttcacatacgcaggaagaccactgcagcttgctagatctggatgtat
+cattgtacttctaagagcctgaaaggtaatacattcccagcgagcgtaacagattgtatg
+gggacatattcaatcttagcaatgcattcgttcttcgaaatcaggcatttttgatgtcat
+aagttctgtcaactataaccctggaactttaatctgttgttcgtcgaatcaaggatcaag
+aaagcttctaaaaggcccaaagcaaaacccaccactacttcagttttaaattagaatcac
+accctagggtattagataataattaaatgtcttaggaagagatatcaaaagatgcagaca
+tcctcaagtgaataagtctccggtctttcacaaacacatggttaagcgatgtggttttga
+ctagagacgttcgccaccatcgtaatatttctggttacctgcgaacgtgaaccaaatctt
+acttcatacattgcttaaacagtacaacttatctcttatcctatagagatctcaaaagtt
+tgtatttttactggtttcaaattgagagaaaaactgcgttctccgatttctatattattg
+tttaaatgatgccaaacatccagtttaaaacacggtgtgatcagccgactcagattcgta
+tcctatgttagaatgagtcatcaaactacggtcacgcgtacattacagagtaaactacac
+gaatgaaagagataagaagatgaaagagttaataggtctcctgttaattatgagaaccct
+aactactacggattggcctactagtgggttggaacggatataaaattcgactaagttcgc
+ggcatgtcaggctcctaaatatgaagagaactcggcatcgaattatccacagtaatagtt
+ggaacatgattcctctatgcatggtgtatatccacgtacgccagtgtgcagtgtagccat
+gcgaccacgggcgttgtgaatattcttcctcagaaaaggactgttgagcaaggaattgga
+ttctgtgaacggaatatagtcgagtagatggaatttcctacactgcgaaaaggtcatagt
+aaatcaaacgccgcgcgcagacatatcttcttggcaattagtactccactaaatcaattg
+gttataaacttttagaatatctttatataagttcactacttacgctgcgggtagtatatt
+taaagtgatgtcttaggaatcttatggcggcggaataaacggcttgactatagataccct
+aattctggcataaccctgtaacgtgtgaagcatgctttaatagacgactagatcagctta
+tagaatggatatgactgccacattgaagagattaacattagcgggtataatgttacgaac
+ttgtttaacaaaatagctctaccacacacgcatagtataatataaaggtcctggagttcg
+ctacgagcctggaattgcagttcccctaccctgagtaaacaagatcagtatggacctatc
+ttctgacccacgtgtaaaaactaccgttagcggccctgagaacggtgaagttgattatcg
+gctaacactcgctttaccaaggaacaaacaattgatggaacaggtaagcggctggattct
+atcctgaatacagcataataatatttgctttcaatatatagttatgacactcccaatatc
+actaactctttacaaatcggatatgaagagtgaattagagatggagccgatcgttccttg
+tattctggtaagtactcgactaatgtgtgtagtctaggggtaaaggtccttaaccgtcga
+gtctagaactcacgcattatgaaatcctccgagcatagagactctaaattcgccaagcaa
+taagtcccgacgcgaaggatgagaagctcattgaactgtaacatttacgtcgggctcacc
+atgttacatatgcagcgggtaaaagtttttgcctggagtggttgagtttcgcgatacata
+aaaggccccactttcatatggtcaaatatctatatcgtgctttggacgactcgataaact
+aaagtagcctagtaatgccctaaaccgctgcatttgtgcaataaaaaatttagagtatat
+ataacttccggacgtatggctgccttgaatcctcggatatcgtccttatacaacgatgaa
+cggtatagctcggaactatgcagattaggcgatccttgggttgaatttttagtttccata
+gatatgagttagttttgatatggttaccatacgtccctgcattgaaacttaatctgtata
+ttgattgatccttagcaatagcggcacatttctgggcaatatgacttaattaggttacgg
+tttttactatgatggatacgttttatatgatagaataacagttgctatttaaacaggtac
+tacattcaactaatactgtttcactattgtgtccaacatagggaatatattgcctgaata
+gatgtattatcaggcatcttttacgctccaggtagaactaattaaaaatgatccttagaa
+actttcaagcaacataagctaaaagttacgccaattataagccacatcggtaggatcttc
+aggcattcccatatccttctctatcaatcccgtctgttgctaattggttatctaagcata
+tcgcggcgagcatctacgataggtataaagttgctgctatctaattcgtcataatatata
+catggaattacagattcatacgtcttcagtctcgtggtgtttctaagagcggacccaaga
+attacgtaatatctctctcgtgttacccaagaagttgacacgtgattgtcagctatcttt
+ttctggcgatgttaatagttataaacaattgcatatagctgcaaattagctaatcaaata
+ctcgtttcttaaatgttatcagcaaagctttaggttctgtaatttcactgtgtaaagagg
+gcgctaagttcaaaattggtttttggcaacaaacaatttaatagcgcagtgcaaaaataa
+tatctcagggtgtaattatttctctaattggtctttacggttggaccaggcaatgggttt
+tttatctatgtgataccaattaaaagtaatttcaaagtgacattaaacttaagtattgct
+gtcaagaccattacgacacttcaccaacacatttatgtattgtgctacgcggtatggccc
+gtagtaatttctgatattgaccgcgttatcagcaagtacgctgtacaaatgccaaattta
+gtaaagctctgtgtgcattccaaggtgcccacatcacacattatcaacatatcatgtcgt
+tgtattacgtccttttactagcctgggaaataccggtgattcagagtgaacataaatctc
+tgaaagctactagacaaagctagtatagttaaaatatatatttcttttaatattaggatc
+tttgcgattgcacatttcaagcatcgcattaacctacctccgtactcttctacaacggtt
+gcatgtacgatttctatgcgatgaaatacttatgttcttagtttggggttactttgttca
+cctagtcctcgaacgcaaattagcttcgaatatctgaaaagtgtatgcgggcaccaaaac
+gatctcgattcttaggtttataattatagtcagaagataaatacatgcatatctggacac
+tcttccacatgtcatgtcgactaactttgaactacagtcatatatagactgttatctgat
+ccgtatgtgtctattactactcttatctgagaaaggacccaatggagtcacagtaagcga
+tcatgtcatcggggctttttccctgattataagattacactattgctgtgcttggggcct
+cctactttttctatcttaatcattttgtacattaaaaagctaagaagtaggtacaactta
+tctttcccatacgagctggaccattaatttaacagccgcaaggcgagttttaatgttaat
+ctggaagggctttatgttctaagcttttagcactgagaaattaatccgtaggaaattaat
+cccacataacccggtaagagaaccttacgccccgttactaataatgttctgcgcaatgta
+ggaagtgacaagctcactcttgcgacgagctccttaatacaggccctgcgttatattcga
+ccgtacctataactagaccaccatcttaaatgtacagttatggttttcgacgcatagagt
+atgggaccacctcgaaatgctcagctgcaaattgtactgggggtggttatcaaacattta
+atatgaatctatggtaaagtactagtttatagatagccgaacactaaaggtttgcagacc
+ttcctcccctgaggaacttcgtgtcacaaattagattgagaaggtggtgataaaatcgcg
+tatctacaatgatttggtgcaaatatttatcgattgcccaatcgttctactcgtactctt
+tatagcctaacgccttttcttggcgctaattagcctaatccaagaaggagtctaacaaaa
+ttacttaaccatactcttgtctattcggcccacgcatgcgcaagctcaaaaagttctcaa
+cgggcgtttttacttgagtcccaggaggtaacattggatctatgagtcttaacagtggaa
+atatgatttttagattgtgttcagatttattgtcttattttggtctatctcatcagctat
+agctacataatgacgtcttaactgtttcgactaaccttcagatctgactaccccaaatac
+aacatagcaaaagaatgatgctaacgcttaactatcctttcacgatcttaacaaaaaagc
+tccatttaaaagaatcgaaaacagatctaccattcgtggaatcaatttttggacgagtac
+tggtcgggtcgtgcttatttgctacaggattgtttcgtataacgttcaagcactttagcg
+gttccatccttgatggcgttaactgatgatgcgtaagtttatggtgatctaaaactctac
+tacgaaccaggtcccagcacgaaacgtcatctttaatgagtttttaggtctccaggcact
+aggctgcgaagtggaatatgtgtcatcagagacaaatagatgattcctatagctttttgc
+agttaagccactaagtaggcggttctatagggtttcattcaaatcgatcgtaattcccga
+ctctgcatagcgtgggtcttgtatagaccattcttcaggcccgccacaatggtttcaagt
+ttcaacttccgtttattggctgtccctcaatagagtcgttctcagggcacgactctcgtt
+cgttattcataagtccagtttgatccacgaatacagaacacgcatatctgataataaaag
+cttaacgataactttcacgcgcatggtttatttttgatttattaggcaaccaaataccag
+aatgtagtcagcgatatgtagtaaaatttagacaaacataaaacaaagtatcgccattac
+agtctcctgttaggagaacctttttatcaatatgtgtaggcgtgtattggcgcccttgat
+ttaataataattacggctaaacgtattgatattttccaggaactgccccatctcatgaga
+tgaccctaaattttattcacacctcatttttaattcttttatatcacgattatttatctg
+agcaagcatctttgcaagcattcatagtgacggtgctgtctctatgaatgcatgctaata
+tacggtgcgctaaacatattggttcaattcaatgtaagctacctcggaatttgcttgcac
+taagacggggaagccaaaacggtaaatcgccgtatatgctagtgccaagggacttgtccg
+ttggagtcactatggagttacaagcattataaatctaaggaaatcgcagtatcagtcctt
+accccaaagatacttcgcattccctggggtacggaccatgaaatacttctttcatacatg
+ataaacgatggagactcggttaccaccctggtagttactccatcaattggagttaactaa
+gatcgctattacaggctttattagccaatcatcacaagcctctttttagagattcacaag
+ttagcaaaccaaagttcctttgataagtctttaacgagatctatcccaattccggctagg
+agtaaaatttatatatttgagatcggggttaaagtcacacgcaatgcaaggggtttttat
+atggtaatgtccttccctaattaggtaattttcagacctccgagagagagtagatcaaca
+acgcgttatactcctaaaatgcttgtcgataacatgacactacagatcatccctggatga
+gcatcgactttcattacttgattagttcagttaattcgtttcaaaccattttcaacaaaa
+tcccccagtagatatgtatatgcacatcttagactaaataacagttttcataccctggga
+tttgtgtcactatctcaggaacgtcgagacgtcccctatcaccgcagcgagggtaactgg
+ccctgttccattgtaatcgatgggacgggacgttatattgcagacccaaagtagtaataa
+attcagccatatggacggagggggggaattgttaagaatataattcgattttcagctgaa
+tgtaaaagctccagccattcctcctccacttgacattagttcgaagaaggtctgagaatt
+ggaattgcttgtgacgttttttgtttccagacaaggaaatagcccagtaccaagtataat
+attatgacaatagaagcttaaattcacaacgtaacatatctgttagcatgctctaataga
+ccgagaaaataagtgtctatgtgtgcgagaactgtcaattcacggcagtagtcacctaat
+ctaacgtctagttcccgactatgaagtcttcacaaatggttagtaataatttcccagtgg
+agtagaagtggcataacgtgcactctctgttaataatacctttagactactcccatttcg
+ccagaacgtcttgatggtaccctatgggaaacactcacacatgcttattgcctgcaacct
+cagcaatgtgtcgtatgcggtatttctacgaacagctagtgaaaggactgatgacctaat
+tttggtttctcaagtccagacgtgatattttgatgaccgtatctgacatctctgggcaat
+tcggttaacctctggtacgaaatagtccgtcgcgtaggtaaaaatgataatgctgtcatc
+actatcatgttttagctaagctacactaccccatcgctcgcacgtggcaaagtgtgagga
+ttccgatatcatccatgtgtacgaattcctaatactcttgctcagggcacttagggttat
+tgtagcctgtgttaccgtctcgcatattagatcattaatcaacagtcttataatcaccgt
+aatcggtaaacagttgttatttgttctgataggtagacagctaataaagatgctgttgaa
+cagttacgtcccacctttattgccctacagtgaaactagttcttactctgttgctgtaat
+atgtctagggttattgatttgctgccacttcaaaacggaaattaagtcattaacgaaaat
+ggttccttcataggtaaagatcaatccccaattgaagccagaaattttgagatgtcgatt
+cctgatcattcgccaaatttacagctcgtaaacgagttccatgtgtaaaaaaatgttgag
+tccactagcttgtttattctggctcaaggtacgtggaacacgtagtattttgatactaat
+gccagacccgctacgatccctgtactgtgagcagagccgatcctcagaaatagctaaatc
+ttgtgcttcgttagaagtctcgactacgtgtagcctagtgtttgtgttgcgttatagtct
+atttgtggacacagtatggtcaaatgacgtcttttgatctgacggcgttaacaaagatac
+tctgggcaacacacatacttctctcatgttgtttcttcggacctttcataacctttcctg
+gcacatggttagctgcacatcacaggattgtaagggtctagtggttcagtgagcggaata
+tcattcgtcggtggtgttaatctatctcggtgtagcttataaatgcatccgtaagaatat
+tatgtttatttgtcggtacgttcatggtagtggtgtcgccgatttagacgtaaaggcatg
+tatggatcttgatctatgcaaaggtaggtccatctatatacgttgcacagcggatacaaa
+taagataagaatttactaacatttaaattttcttattgtcgagcatagattggaggaaaa
+acttatttacttggtatttaaacggaagtttctaatgtttatgattggatgcacggacag
+tttactgcttactttcttaggtttcttgaacaacaggatgcactagtaacatgtctcgtt
+catgcttccattaagttcttcttaaacttacacaaactacctaatttagagttgacgaga
+tggttgaacgtgttgtgacaaacgtttgcaaaatgcacagtatcgttaccaaaaagtaca
+tttaagtgtgtgcgtaggaattctgctacgtccattgcaggccacattcacatcccaccc
+ctgaatatatggactgaatcacacacaccaaatttcatctaccttatcgtagcataacta
+ttaacaaacatatacagacttcgcggtaaataaaatatattagtacacaaccgtatactg
+gttgaactattgcccagctttaagacgcttttaactaggtgcttgatcaagaagtattat
+tatatgacggcagtgtgtaatacctgaatagatatagacgttagattgtctgaaaacacg
+ccgtagagacatttttgttagatatgtatttctttttgacgagccagcatcttagtatct
+gaagacgagctatatgtttgtagaaaatcgactgacattgtatacgaggcggcgtaagat
+taaccaaattccccagaattagtaatggcgccttatcgatttactaacgatatataactt
+gtgatgttgtctgcaatgtatacccgtgtaggctgtgctcttatcgaaggaaacgcattg
+aagtccaggctggatgaaaccaccgcgtacttccatgcgtctatacatagcgtcaccgat
+actacgttttgctatgtaatccattctaatgggtaagaggattcctcttatagtaaaata
+tgcttgactttttaagaaccattgggagtggttggcaaaataatagtgggtgtctttctc
+agtgtatagttttctacaactacccctattaggttacaagtaatctggctttcttgccac
+ttggcgatgatagttagattcgtatttctacaacgcagttactgtatccatggcgcgaga
+taattagatacgatttgaatttggatgtagactcgttactactgttgtagaccagcacgt
+gagtatctagatgggtttgctaccttgttagcggacttttgccgggaaaaagacatacgt
+acaaccgtatattttactataagcagtattggccaccctcgtattgcggcagggtgtgct
+cacctggttaaaatgaaagagaaaaattccattttaaaacccggaggaatctattactga
+cgaggaaggtgtttaacccgttgagacatctcctaacgtaaaaggttcatattctagtta
+ttccgagagtcactttcctatccaaacatgaactgatagcataatgacaggttgaatgga
+aagcatatcctgtttattctaaatctgtttcgctaatcaatatgctgtcacgaactcgga
+gcttacccttacaactatgtgttctgtttaccaggtgctaatatcccggcactcttttca
+tgcatgtcgctcctagcgtcatctgatttaatagcttaatgtctcatattttacagtagc
+cagtgtagtatggaaggcggcgaaccagcccctacattgggtttcctgacataagtatta
+catatcacttgtctgattacacagcaaaatcgctaaccttactttgcgcatgtagctatt
+ggaactttgggctagtgtctatcccattaagtttaacagtagactagtccgtgagcgatc
+accgagcttatgtctcgtacccaagttttggatttggatcaaaaactactcgatattcat
+gatctacgggcttcctttctccgggtatcattgcgccgagattaaaaataaaacgatagc
+gctgtgaaaacatgtttgacacgggatagcgtagaaactaaacaacgaatagaccatcca
+atttgaattttattgggtccagcacttcgccatagtgttgaatggtaaagttcgaaagga
+aatttgttatattaattctgctacattttcgaccacttgtatctcaaggacaatatccct
+tgaggcttttagcagaaagagatgccgtaattctaagggatgataataggttgggaaatt
+taagagcagtagtaacggtcgcgggttcgaccttaaactatatatttaaatctagccaaa
+caagttaacaacaaccataaagttatgaccttattatattggcaagcttaacgttttaat
+tgctctagtaatagagtggtagaggtaagggaccatcacctgattcttcctccgcaacca
+ttatatagacgtgtcgtctgacaaatttcgagataaaacattcgtccttagcaacgaata
+tcgaatggcaattagccacattgagttaaatagttgaggatatttcttgcacagaatcag
+atctaatctaatgattcgttactaaacacttcaccaggtatcgtgaaggctcaagattac
+ccagagaacctttgcaatataagaatatgtatgcagcattaccctaagtaattatattct
+ttttctgactcaaagtgacaagccctagtgtatattaaatcggtatatttgggaaattcc
+tcaaactatcctaatcaggtagccatgaaagtgatcaaaaaagttcgtacttataccata
+catgaattctggccaagtaaaaaatagattgcgcaaaattcgtaccttaagtctctcgcc
+aagatattaggatcctattactcatatcgtgtttttctttattgccgccatccccggagt
+atctcacccatccttctcttaaaggcctaatattacctatgcaaataaacatatattgtt
+gaaaattgagaacctgatcgtgattcttatgtgtaccatatgtatagtaatcacgcgact
+atatagtgctttagtatcgcccgtgggtgagtgaatattctgggctagcgtgagatagtt
+tcttgtcctaatatttttcagatcgaatagcttctatttttgtgtttattgacatatgtc
+gaaactccttactcagtgaaagtcatgaccagatccacgaacaatcttcggaatcagtct
+cgttttacggcggaatcttgagtctaacttatatcccgtcgcttactttctaacacccct
+tatgtatttttaaaattacgtttattcgaacgtacttggcggaagcgttattttttgaag
+taagttacattgggcagactcttgacattttcgatacgactttctttcatccatcacagg
+actcgttcgtattgatatcagaagctcgtgatgattagttgtcttctttaccaatacttt
+gaggcctattctgcgaaatttttgttgccctgcgaacttcacataccaaggaacacctcg
+caacatgccttcatatccatcgttcattgtaattcttacacaatgaatcctaagtaatta
+catccctgcgtaaaagatggtaggggcactgaggatatattaccaagcatttagttatga
+gtaatcagcaatgtttcttgtattaagttctctaaaatagttacatcgtaatgttatctc
+gggttccgcgaataaacgagatagattcattatatatggccctaagcaaaaacctcctcg
+tattctgttggtaattagaatcacacaatacgggttgagatattaattatttgtagtacg
+aagagatataaaaagatgaacaattactcaagtcaagatgtatacgggatttataataaa
+aatcgggtagagatctgctttgcaattcagacgtgccactaaatcgtaatatgtcgcgtt
+acatcagaaagggtaactattattaattaataaagggcttaatcactacatattagatct
+tatccgatagtcttatctattcgttgtatttttaagcggttctaattcagtcattatatc
+agtgctccgagttctttattattgttttaaggatgacaaaatgcctcttgttataacgct
+gggagaagcagactaagagtcggagcagttggtagaatgaggctgcaaaagacggtctcg
+acgaatggacagactttactaaaccaatgaaagacagaagtagagcaaagtctgaagtgg
+tatcagcttaattatgacaacccttaatacttccctttcgccgaatactggcgtggaaag
+gttttaaaagtcgaagtagttagaggcatctctcgctcataaataggtagactactcgca
+atccaatgtgactatgtaatactgggaacatcagtccgcgatgcagcgtgtttatcaacc
+gtccccactcgcctggggagacatgagaccacccccgtggggattattagtccgcagtaa
+tcgactcttgacaatccttttcgattatgtcatagcaatttacgacagttcagcgaagtg
+actactcggcgaaatggtattactaaagcattcgaacccacatgaatgtgattcttggca
+atttctaatccactaaagcttttccgttgaatctggttgtagatatttatataagttcac
+taattaagatcacggtagtatattgatagtgatgtctttgcaagaggttggccgaggaat
+ttacggattctctattgatacaatttgtctggcttataactcttaaggctgaaccaggcg
+tttttagacgacttgatcagctgttagaatggtttggactccctctttcatgtcagtaac
+atttcagccgttattgttacgatatgcttgaacaatattgatctaccacacacccatagt
+atattttataggtcatgctgttacctacgagcatggtattccacttcccattcaatgagt
+attcaacatcactagcctcagagatgatgacccacctctaataacgtcacgttgcggcca
+tgtgaaacctgaacttgagtagacgatatcaagcgctttaaattgcatataacatttgag
+ggtaaagctaagcggatgctttatataatcaatactcaataataagatttgattgcattt
+tagagttatgacacgacatagttcactaacgagttactattcccagatctagactgaagt
+actgatcgagacgatccttacgtcgatgatcgttagttatcgacttaggtcgggtctcta
+gcggtattggtacttaaccggacactatactaataacccatgatcaaagcataacagaat
+acagacgataatttcgccaacatatatgtacagaccccaagcatgagaagctcattgaaa
+gctatcattgaagtcccgctcacaatgtgtcttttccagacggtttaactggttcccggg
+agtcctggagtttcgacttacataaatggaaacaatgtattttgctaatttatctatagc
+gtcatttggaccaatacagaatattatgttgcctagtaatccactataacccgcaagtgc
+tgatagaaaatttttagacgatttataaatgccccaagtatccctcccgtgaatcctccg
+ttatactaattagtattcgttcatacgtataccgcgcatatatgaacatttggcgataag
+gcgcgtgaattgttacgtgacagagatagcagtttcttgtgatatggttaacagacgtac
+atgaagggaaactttatatctatagtgatgcttccgtagaaataccgccactggtctgcc
+aatgatgaagtatgtagctttaggtttgtactatgaggctttcgtttgtttgcagagtat
+aacagttgcgagtgaaaaaccgacgaatttatactaatacgctttcactattggctacaa
+aatagggaagagtttcaatcatgagagggagtatatggatgctttgtagctaaaggtaga
+acgtatgtatatgctgccgttcattcttgaaagatacataagcgataagttacgacaatt
+ataagcaacatccctaccttcgtaacgatttcactgttactgcgcttgaaatacactatg
+gggctattggcggagagaagcagatcgcgccgagcatatacgagacctataatgttgatg
+atagagaaggcgtctgaattgatacatcgaagtacactttctttcgtagtatctctcgtc
+ctctttctatctccggacacaagaattaagttatatatatagagtcttaccaatcatgtt
+gaatcctgattctcagagttctttggcgggccttgtgatgactgagaaacaatgcaatat
+tgctccaaatttcctaagcaaattctcggttatgttatgttatcagcaaagcgttacgtt
+atgttatttaaatctggaatgacggagcgaagttcttatgtcggtgtgggaataattctt
+ttgaagacagcactccttaaataatatcgctccgtgtttgtatttatcgaatgggtctgt
+aaccttgcacaagcaaatcggtggtgtatatatcggataacaattaatacgatgttcata
+gtgacagtatactgatcgagtcctctaaagtcaattacctcacttaacaatctcattgat
+gttgtgtcattcccggtatcgcccgtagtatgtgctctgattgaccgagtgtgaaccaag
+gaacatctactaatgcctttgttaggtaagatctctctgaattccttcgtgccaacttaa
+aacattatcaaaatttcttctacttggattaactacttttacgagcatggcaaattcccc
+tgtggaagacggttcattattatcggaaaccttatagaaattgcgtgttgactgaaatta
+gatttttattgtaagagttgcatctttgcgattcctctggtctagcttccaatgaacagt
+cctcccttctattcgacatcgggtccttcgtacatgtctttgcgatgtaataattaggtt
+cggagtgtggccttaatgggtgcaactaggaatacaacgcaaatttgctgacatgatagc
+aaatcggtatgccggcaccaaaacgtgctccttgcttagcttgtgaatgagactcagtag
+ttaaataaatccatatctgcaatcgattccacaggtattgtccactatctttgaactact
+ctaagagatacaagcttagctgagaccgaggtgtatatgactacgctgatatctgtaagg
+taccaatgcaggcaaagtatgcgagaagctaataccggctgtttccagctttataagatt
+aaaatttggctgtcctggcggcctcagaattgttctatcgtaatcagttggttcattaat
+tagctaagtacgaggtacaacttatctgtcccagaacagctccacaagtttttttacagc
+cgaaacccctgtgtgaatcttaatatccaagcgcgttatctgattagagtttacaactca
+gtattttatcagtacgttttgtttccaacattacccggtatgacaaaatgacgccacgtg
+tcgaataatggtctgaccaatgtaggaagtgaaaagataaatattgcctacacatactga
+attcaggcaatgcgttttattcgaaaggtcatataactagaaaacatgatgaattcttat
+cggatccttttactagcatagtgttggcgaacacctcgtaatgctcagcggcaaattgga
+ctgcgggtccttatcatacattttttttcaatataggcgattggtctaggttagtgattc
+cccaacacttaaggtttgctgacattcataccctcagcaacttcctctcaaaaattagag
+tgagttggtggtcttataagaccgttgattatttgaggtggtcaaatgatggtgcgatgc
+acaaatcgttataatcgtactctgtagacaataacccattgtagtgccgattttgtgcat
+aatacaagaaggaggatataaaaatgacttttcaataatattggctattagcaacaagaa
+ggagaatcctcattaagttagcaaccgcagggggtactgcagtccaaggaggtttcattg
+gagagagcagtatgaaaacggcaattatgattgtgagattcgctgaagattgtgtctctg
+attttcctagatagaataagctatagctacttaatcaactcttaactgtggagactatcc
+tgatgatctgaataccccatttacaaaattccatatcaatgaggctaacgcttaaatttc
+atttctccatcgtaacaaaaatcagcctttttatacaagacaaaacactgcttccattac
+gggtagcaatggttgctcgactactggtagcgtcgtgatgtggtgataaagctgtcttgc
+gtttatacttaaacaaattttgacctgacataatggagcgacttatcggatgttgccgat
+ctttagggtcatctattaagcttatacgaaaaagggacaagcacgttacgtaatctggta
+ggactgggtacctagaaacgcaagaggaggcgaactccaatatctgtaagaacagaaaaa
+tacaggagtccttttcatttttcaagttaacaatataagtaggagcttagagaggcttgc
+atgaaaatcgttaggaattacagaataggcagagagtggggcgtgtagactacattcttc
+aggccccacaatatgggttataggttaaactgcactttttgcgatctcccgaaatactgt
+cgttctctgcgaaccacgctcgttccttttgctgtagtccacgttcatccaactattcag
+ataaacaagatcgcagaattaaagcttaaccatatcttgatagcccatcgtgtatggggc
+atgtatgtgcaaacaaaagacctcaatcttgtctgcgagagggaggaaaatttagacaaa
+cataattcattctttcgactggacacgctaaggtttggacaaactttgtatctatatctg
+gaggcctgtattccagcccttcttttaataagatttacggcttaaactatggatatttgc
+caggaaatgacactgctattgacaggaacataattttgattcaaacctcattgttaatta
+ttttatatctcctgtttttatatcagaatgcttctgtcctagaaggcatactcaaggtga
+gggctcgaggaatgaatcataatagaccggcccctattaatattggttcaattctttctt
+acataacgcggaatttgattgcacgaacaccgggaacacataaccgtatagcgcccgtta
+tgctagtgcctagcgactgggaccgtggagtctatatcgtctttctaccattattaatct
+aaggatataccactttaagtcctttcaactaacataaggcgcattccatgcgctaaggac
+cttgaatttattatttcttacatgataaaagatcgagtcgacgggaacaaaaggctacgt
+actcaataaagtgcagtttactaagagccctttttctggcttgtggagactatcataaca
+tgaagatgttttgacattcaatagtttgcaaaacaaacttactttgtgtagtattgaacg
+agatctttccaattgccccatagcaggaatagttatatattgcagatcgcggtgtaacgc
+actccaaatccatcgcggtgtgtgagggtaagcgacttaaagaattacggtttttgatca
+aagcacagtgagagttgagcaaattacagttatacgacttaattcagtctccataaattg
+aaacgacacttcttaacgggaggaccagacacgttcattaagtgaggagtgcactttttg
+actttaaaaacatggtaatcaatttaaaccacttgatatgtatatgaacagatttgaagt
+tatttctgttttaatacactgggagttctgtcaatatcgcaggaaccgcctgacgtcccc
+tatcacacctcagagggtaaagggacaggggaaagggtaatcgaggggtagggaacgtag
+ttggcacacccaatggacgaataaatgctgccatatccacggagggcgggattgcggttg
+attttaaggcgatggtaacctgaatgtaatagatcatcaaatgcctcctccactggaaat
+tactgcgtacatccgctgagaattgcaatggagtgtctcggtttttctttaaacaaaacc
+aaattgacaacttcatagtataatttttgcacattacaagcgttaattaacaaacttact
+ttgctgttagctgcctatatttgtccgacaatataactggatatctctgcgagaactgta
+aattaacggcacttggaacataatagttcctattggtaacgacgttgtaggcggcaatta
+tccggtggaagaattgacaactgcagttgaactgcatgaaagtcaaatctctcgtaagta
+taactttagaagactccaaggtacccagaacctcttcagcggacacgatcgctatcaatc
+aataaggattattcactgaaaccgctcatatctggaggtggacgtttttcttcgaaaagc
+ttgtcaaaggactcatcaaatttttggccgtgctaatcgacacacctgttattttcatga
+ccggataggacatctcgcggaaattcgggtaacagctgggtagatataggacctccccta
+cgtattaatgataagcctgtcataactagcttggtttaccgaagagacaataaacattcg
+agcgctcgtgccaaactcggtgcattacgtttgaataaatcggtaacatgtactattact
+ctgcctaacggcacttacccgtttgggtccatggggtaaccgctcgatgttgacagaatt
+atgctaaagtcgtttaagatcccgattaccgaaaatctggttatgtctgagcattcgtac
+actgcgtattaagatcaggttgaacaggttcctaacaaattttgtgacctaaagtgaaac
+taggtcgtactctgggcatgttttatgtcgtggcgtatgcatgtgctgacacttctaaaa
+ccaaattaaggctttatccaatatgggtccttaagtgctaaacatcattcacaatttcaa
+gacagattgttggtcttgtcgattccgcatctgtcgccaaattgacacatcgtaaaccag
+gtacatcggtaattatatgttgactaaactaccgtgtgtattctggctctaggtacggcg
+aacaagtacgatgtgcttaagaagccctcaccccagacgagcccgcgtaggtcacatcag
+cagatcctaagtaattccgttttattgtcctgagggagtaggatcgacgaactctacaag
+tcgctttgtcgtgccttataggctatttcgggtcaatgtagcgtcaaatgaactattgtc
+atctgtacgagttaactaagtgtctatcgccaactaaaagacgtctcgatggttctttat
+gcggacctgtcatatcattgactggcacttgcttacatccaaataacacgtttgttagcg
+gatagtcgttaagtgtgcgcaagatcatgaggcggggggggtaatatttcgccctctaca
+tgataaatgaataagtaagaagatgatctttttgtggcggtaccttaagcgtactcctgt
+cgacgagttactactaaaggaatgtagggttctggatctatgaaaagcgacctccatata
+tatacgggcctaagcggagtaaaataagtgatcaatggactaacattgaaatgttagtat
+tgtcgaccattgagggctggtaaatcttatttacgggcgtgggaaaacgaacgtgatatg
+gtttagcatgggatgcaagcactcgttaatgcttactttagttggttgcgggaacaacag
+gaggctatactaactggtagcgttcttgcttccattatgttattattataattaaaaata
+agacatatggtagagttgtagtcagggtggatcgggttgtctataacgttggaataatca
+aaactatcgttaacaaaaacgaaatttaagtcggtgcggtggaatgcgcctacctcatgt
+gcaccacacattcacagcacacccctcattataggcaaggaagcaaacaaaaaaaagtta
+atcgaccgtatccgaccttaaattttaaaataaatagaaacacttagcggtaatgaaaag
+ataggactaaaattcactagtatcctggaacgaggcaacagagttatctagatggtaacg
+aggtgctgcatcaagatgtatgatttttggtccgctgtgtggaatacctctattgatata
+caagtgactttctcggtaataacgcacttcacaatgtgttgtttcttttctatgtatttt
+gcaagagaaagaagcttagtataggtacacctcagagatgtttcgtgtaaatcgtatcac
+atggtataactgcaggaggaacattatccaaattcaccacaattactaatccaccctttt
+acttttactaaagatatattaattctcatgttgtctgaattgtataacccggtaccctgg
+gagcgtatcgaaggataccaattgaagtcctcgaggcatgttacaacacacgacttcctt
+ccgtctattcagacactcaacgagactaacttttcctaggtaatcaatgatattgggtaa
+ctcgtggcatcttatagttattgatccggctcttttgtagatcctgtgcgactcgtgcgc
+taattaagactggctctcttgcgcaggggatacgtttattctacgtacccgatttggtta
+ctactaagcggcctttcttcaaacttgcagttgtgacttacattcctatttcttcaaagc
+agggaagggttacagggagagacttattgagatacgattggaatttccatgtacaatcgt
+taatacgcttgtagaccagcaactcagtatagagatccgtttcctaaagggtgagcggta
+ggggcaaggcaataagaaattactaaaaccctagttgttaatataagaacgattcgaaac
+aataggattgcccaagggggtgcgaacatggtgtaaatcaaagagaaataggcattgtta
+aaacccgcacgtttctagtacgcaagaggaacgtcggtaaccagttctcaaagatcctaa
+cctaaaaggggcttattctactttttccgacactcaatggacgagacaaacatgaacgga
+tagctttaggtctcgttgaatgcaaagaatagaatcgttattattaatcggtttccatta
+tctatatgcggtatagatctccgagaggaccctgtaaactagctctgcggtttaactggt
+gctaatagaccgccactatgttattgcttctagctcctagcgtcttatcatgttatacat
+taatgtcgcatattggacagtagccaggcttggatggatcgccgacaaaaagaaaagact
+ttccctgtaaggacttaactattacatataacttggatcattaatctgcaaattagagta
+acggtctttcaccagcttcatattccaacgtggcgctagtcgatatcccatgaagtttaa
+aactagaattggcagtctcacttcacagtgcgtatctatacgacaaaagtggtcgatttg
+cataaatatcttatcgatattcaggttattaccgattccttgctaacgctagaagtcaca
+ccagagtaataataattccagacacctgtgaaataatcggtcactacggatagactagta
+acgataatacgtatagtccataaaagttgaattttaggggctaaagatattagcaatact
+ggtctagcctaatcgtcgatagcaaagggctgtgaggatttctcctacattttcgaccaa
+ttgtatcgataggaatagttacagtcacgcttgtagatgtaagagatgacgttattctta
+gggttcttaagtcggggggtaatttaagaccactagtaaaggtagaggcgtacacagtaa
+acgatattttgaaatcgtcaaaaaaaagtttacaacatcctttaagttagcaactgattt
+tagtggcaaccttaacggttgaattgatctactaatacaggcctacaccgaagggtacag
+ataatgattcttactaccctaacatgatagagtcctgtcctatctcataggtcgacattt
+taaattcgtaatgagcaacgaagatcgtttcccaatttgcaacattcacttatagacttc
+aggttatttcgtgctaacattaagatagaatataatcagtcgttaagaaactattatcca
+gctttcgtcaaccataaagattaaaaactgaaacttggcaagatatgaatagctatcctg
+ctttaaccgatcgtatgagatgctttgtagcaagaaaagtgactagcacttgtgtttagt
+aaagcgggagagtgcggtaattaatattaatatactattaagctacacagcaaaggctgc
+aataatgttagtaagtagaacataaaggtattctccacaagtaataaatagtgtgagcta
+attgactaacttaactctcgcgacaagtgatgtggataagatgactcatatcgtcttttt
+ctgtagtgccgacatcccacctggatcgaacaattccttctagttatcgactttgattac
+ctatcctattaaacagatagggttgtaaagtcagaaaatgatcggcttgcgttggtctac
+catagctagagttagaacgcgtagatagaggccttttgttgccaacgtgggggtgggatg
+agtctgggcgagcgtgactttctttcgtgtccgaatttgtttaacatccattagattaga
+tgtttgtgttttgggtctgatgtcctaactactttctcagtgaaactaatgtcatcatcc
+aagtaaaatagtccgatgaagtctccgttttcggccgaagcttgtctataacgtatataa
+agtcgctgaatttagaacacaccttatctatgttgtaaagttactttattccaaaggacg
+tgcacgaagcgtgagtgtgggaaggaacttaaagtcggatcactcttgtcagtgtagata
+agaatttctttcatacttcactggaatccggcgtatggatatctctaccgcgtcatctgg
+tggtgtctgcggtaaaaagtcttgctgcacgagtctgagaaatttttggtgccatcacat
+cgtaactgtacaacgaacaaatagcatcaggccttcttatccagcgtgaagtctaattat
+ttcacaagctttcctaagtatgtaaatccctcacttaatgatgcttgcgccaatgaggat
+agaggacattgcatgtacgtaggactattctccaaggggtcttctattttgttagcgaaa
+attgttacagcctaatgttagagcggcgtacgactttataccagatactttcattagata
+tgcaaatatccaattaaatcatagtagtatcgtggtatggacaatcaaaaaagacccgtt
+gtgatatgatgtttttctagttcgttctcatatatatagatcaacaatgaataatctcat
+gatctataaccgatgtatatttatattccggttgactgctccggtgcaattcactacgga
+cactaatgactaatatggcgcctttcatcagaaacgctaaatatgattaatgaattaagg
+gagtattatctaattattagagagtagcagttagtctgatattttcggtgtatgtgttag
+ccgttataatgctgtctttttatcagtgagaacagggagtgtgtagtgttgtatgcttca
+ctttatgactctggttatatccctcggagaacaagaataagagtacgagaagttcggtca
+ttgaggatgaaatagaaccgctagacgaatggactcacgtttataaaactatgtatcaca
+gtactacagctaactctgaagtccgagaagcttttgtaggacaaaacgttataagtacct
+ttcgcagaatacggccgtgcatacctgttataaggcgtagtagggacaccatgctatccc
+tcatatagagctacactaataccattacatggtgactatcgtttacggccatcatctgta
+agcgatcatgcctcgttagcatccgtacaatctcgcatggcgtcactgcagaaaaacccc
+gtgcggattttgagtcagaactattcgaagcttctcaatccttttccattatggcatagc
+aagtgacgactcgtcagccatgggaataatagcactaatccgattacttatgaattagaa
+cccacatgaatgtgattctgcgaattgtctaagaatctaatgattttccggtgaatatgg
+ttgttgttatttattgaacttatattattaacatcacccttcgttagtgatagtcagcta
+tttccaagaggttccccgagcatttttaccattctctagtcatacaagttggagcgcttt
+taaatctttaggctgatcaaggcgttttgtctagaattctgcagatgttagattcgtgtg
+caatccctcttgcatgtcagtaacaggtcacccgtttttcgttacatatgctggtaaaat
+attcatagtaataactacaatacttgatttgttacgtaatgctcgtacataacacaatcg
+tattccacggaacagtaaagctctattattctgatcgagcctaagagaggatcacactac
+gctattaaagtcacgttcacgaaatctcaaacctcaactgctggtgaccagttatagaca
+gtgtaattccatattacatgtcaggcttaagctaacccgagcctttatataagctataat
+caagaattagattggagtgcattttagacttatctatcgaaatagtgatagtaagagttt
+atatgacctgatctagactgatgttctcttccacaacagccttaaggcgtggagcctttc
+ttatactattaggtcgcgtcgagagccctattcgtaatgttaacgacactagactaatat
+acaatgagctaagaataacacaagtcacaagataatttacaaatcatatatctacagtcc
+acaaccatcactagcgattgcaaagcgttattggtactaccgctctaaatcggtatgtgc
+aagacgcgttaactggttcaagcctctcctgctcgtgagactgaaagaaatcgaaaatat
+ggatgtgcctaattgttcttgtgagtcatgtgcaactatacagtttagtttggtcaagac
+tatgcaactattaacagcatgtgcgcattgaatatttggtgtcgattgataaatgcccca
+acgttccatcacgtctataagccgtgttactaatgtgtattagtgcatacctattcagac
+catagttcaactgttggactgaaggcccgtcttggggttcgtgaatgagagtgcagtttc
+ttgtcttttccttaactgacctaaatgaaggcaatcggtttatctagagtcatgcttaag
+gtgaatttcagccaatgggctcccattgagctagtatggtgctttacctttgtaagtggt
+ggctttccttggtgtgctgactttaacacggcagagtgattatccgaagaatggataata
+agacgctggcaatattggctaataaagtccgatgagtttcaatcatgactgcgaggagat
+ccatgcggtgtacctaaacctacatcgtatgtatttgctgacgttcattcttgatacata
+aagatccgatatcggtccactttgtttaccaaaagccctaccttcgtaacgatggaaatg
+tgaatgagagtgaaatacacgatggggatattgccggtgagtacaagttagaccacacat
+tagaactgacctatattcgtcatcatagagatggagtatgaattgattctgcgaagtaca
+ctggctttacgagtatctagacgccgcggtatatctcccgtcaatactatgaaggtatat
+atatagaggctgaaaattcatgttcaatcctctttctaagagtgagtgggagccccttct
+gttgtcggagtaaaaaggcattattcctcaaattgtcagaagcaaagtatacgtgatgtt
+tgcttagaacaaaagagttaccttagggtaggtaaatctcgattcaccgagagaagtgat
+tttggcggtgtgcgattaattcttttgatgacagatctcattattttatatagctccctc
+tttgtatttagagtttgcgtaggtaacctggcaaaaccatatcccggggggagagtgcgc
+tgaacattttatacgatgtgattactcaaaggataaggttcgaggcctctatactcatgg
+aactatcttataattataatggatcgtggctcattccacctatccaaacttctttgtgat
+ctgatgctacgagtgtgaacaaacgtacatcttctaaggaatttgggacgtttcatagct
+cgcatttcattcctgaaaacttaaatatttttaaaaattgattctactgcgaggaactaa
+ggtgtagacaagcccttagtaaccggtggatgtcgcttcagttttatagcaaacattatt
+caatttcagtcttgactgaaattagtttgttagtgttagaggtccatatgtcacatgcat
+atggtctagatgccattgtacagtaataccttagattagtattagcggcatgcgtacttg
+gatttcacttgtaagaatgagcttaggacggtcgcctgtagggctgcaaataggaatact
+tacaatttttgatgacttgttagcatatcgctatcacccataaaaaacctgatacttgat
+gagcgggtgattgagactatgtactgatataattcaatagctccaatagatgaaacagct
+atgcgcctatttatgtcaaataatcgatgtgatacaagcttagagctgaacgagcgcgag
+tggaattagcggtgatctctatcctaaaaagccacgaaatcgatcccagaagctaatacc
+cgaggtgtcaagcttgagttcagttaaatttgcatctcatgccccacgaagaatgggtag
+agagtttgaaggtgcttctggattttcctaagtacgtggtaaaaatttgatgtaaatgaa
+cacctcctaatggttgtgttaaccacaaacccctgggtgaatctgattagccaacccagt
+gatctgatttcagttgtcaaatctcttttttataactaccttttgtttccataatttaac
+cggatctcataatgaacaaacgggtagaataatggtagcacatagcgagcttgtctattc
+agaaatatggcctactcagaatgtattctccaaatcagtgttatgcgaaacgtaatttta
+cgtgtaataatgatgatttcttatcggttccttgtactacaatactcttgcccaacaaat
+actaagcataacagcaaaattcgaatccccctccttttaataaatggtttttcaatatag
+ccgattcgtattcgttagtctttcaccaactattaacctggcatctaattaataaaatca
+ccaaaggactctataatatgacagtcacttcggcctcttttaagacagttgattattgca
+ggtccgcaattgatggtgacatgcacaattagttagaatccgactatggagacaattaac
+aattgtagtgcccatttggtccagttgacttcaaccacgagttataaaggtattttaatt
+tatagtcgatagtaccaacaacaagcacaatcataattatgttagaaaacccagggggta
+atgctctaaatccagctttaaggccagagtgcactatgaaatcgccattgatcattgtgt
+cattcgctgaacttggtgtctaggaggtgccgagtgagaatatcagataccttatgaagc
+aacgattatatctggactagatcatgatgatcggaataaaacattgaaataagtccttat
+caaggagcataaacattttatttaatttatacttcgtaaataaattcagaattttttttc
+aagacattaatctgagtaaatgacggctagaaagggttcctactcgaatcgtagcctacg
+catgtgggcagtaacctggcttgcgtttttactgaaacaaaggttcaccggaaagaaggc
+tgccacttttagcttcttgacgatctttagcgtcatatttttagattagtcgaaaaacgg
+aaaacaaacttaacgaagctggttgcacggggtaccgagaaaccaaagagcaggacaact
+ccttgatcgggaagaactgaaatagacagctgtcattttcattggtcaacttatcaatat
+aacgaccaccgtagtgacgcttgcatgaaaatactgaggatgtaaactatagccagtcag
+gcccgcgtgttgactaattgatgaagcaaacaaaatagccggtattcgttaaaaggaacg
+ggttgccagctacagatatactctaggtatatcccaaacaagagacgtcctttggctgtt
+gtaatcggtcataatacttgtcacataaacaagatcgctgaattaaacattaaacagtta
+gtgatacacaatcgtggttggggctgggatgtgcaataaaaagtcatctatcgtctatca
+cagagcgacgtaaatttagacaaacattattatttcttgacaatggaatcgataagcgtt
+cctctaacttggtatatatatctcgaccccgggattccagccattcttgtatgaagattt
+aaccatttaactatgcatagttgaatggtaaggaaaatgatattgactgcaacagatttt
+ggatgcaaaaatatttgtgaattattggttatatactggttgtatagcacaatcattagg
+tcctagaaggcatactcaacctcagcgagagagctagcatgcataattgtaccgcccata
+ttaatattcctgaaatgatttcttacattacgcccaatttcagtcatcgaacacccccat
+caatttacccgatagagaacgtgatcatacgcaataccctatgcgaacgtccactctata
+gcgtctgtatacaatgattattcgttccatttacaacgttaagtaatttaaacttacata
+aggacaaggaaatccgcgaacctcctggaatgtatgagttatttatgcagttaacttcgt
+ctcgaccggaactaaaggcgtcgtacgaatgaaaggccacttttagaagagacctttgta
+tccattgtggagaatatcataaattcaagatggggtgtcatgctattcggtcctaaacat
+tcttaatggctgttctattgttagtctgatttaaaatggaaccatagcacgaatagttag
+atagggctcatacccctgtaacgatctacaaatccttccccgggtgtgtgcgttagcgac
+ggaaagttttacggtttgtgatcaaagaacactcacacgtcagattattacactgatacg
+aattatttcagtcgacagtaattgaatagaaacttattaacgccagcacctgacacggta
+agtaaggcaggtctgaactgtttgactgtaaaaaaatggtaatatttttaaaaatcttga
+tttctatatcaaatgatgtgtagttttttctctgttattaaaatcccagtgcgcgaaatt
+tagatcgttacgactcacgtacaagatcacacatcacacgcgttagcgaaagcggaatgg
+ctaatacagccctacgcaacgtagtgggatcaacatatggacgaatttatgctcaatgag
+ccaacctcccccgcattgcggttcattttaaggcctgggtaacatctatcgtttagataa
+tcaaaggaatccgactatgcaattgtctgacttcatccgctctcaagtccaatgcaggcg
+ctacgtgtttctttaatcaataccatattgaaatcgtaatacgataattgttgctattga
+ctacaggttatgaaaaaacttactttgcgggtacatgcatatttttgtaccacattatta
+cgcgatatctctcagtgtactctaaattaaaccctcttcgaacattttagttcctattcg
+taaacacgtgctacgcggcaatttgccggtcgtagaatggacaactccagttcaactgca
+tgtaactcatagctcgcgttagtataaattgactagtagccatgggacaaagtaactagt
+cagcggaaaagatccctttaaagatatatgcaggttgcaagcataaagctcattgctcga
+ggtgcaccgtggtattccaaaagcgtctctatcgtatcttctaattttgggccgtgagaa
+tcgaaactactctgatttgctgcacacgttaggtaatatcgcccattttcccgtataagc
+tccgtacttatacgaactacacgaccttttaagcattagccgctcatatcgtgattcgtg
+tacagatgagtctattaaaattacagacatactccatatctcgctccttgaactttgaat
+aatgcgctaacttgtactatgaataggcagaacccaactttcccgtttgcgtcaagcggg
+gaaacgatacatgttgtcagatttatgattatctagttttagatcacgtttaccgataat
+cggctgtggtctgagcagtcctacactgagtatttacttcagcttcatatcggtccgaaa
+aaaggttgtgaccgaatgtcaaaatacggagtacgatgggcatcttttttcgagtcgcgg
+ttgcagggcagcaaaaggcttaaaccatttttacgatttttactatagcggtcatgaagt
+gcgaaactgcttgcaaattttctacacacattgtggctcttgtccttgaagcttatggcg
+aaaatttgaaacatagtataccagggaaagcgcgaattatttggtgactaatagtccgtg
+ggtttgagccatatacctaacgccataaactacgtggtgctttagatgcaatctaaacag
+aacagaaagcgtagcgctcatcagcacagactaactttttcagtttgagtcgccggaggg
+acttcgagacaagaacgcgtcaagtcgcttgcgcggcacggattcgattgggcggctcaa
+tcttgcctaatttctactattgtcagctgtacgactgtactaagtgtatagccccaaata
+aaagaagtatcgatgcgtctttatgaccaaaggtcttataattgaagcgcacttccgttc
+atcaaattaaatcctggcttacccgattctccggaagtctgacctagagattgacgacgg
+ccgcgtattattgagacctcttcaggattaatcaataacgaagtagttgatctgtttggc
+gacgtaccttaagccgactccgctacacgagtttctactaaaccaatgtagccttatgct
+tagatgaataccgtcctaattagatattccggcataacagcagtaaattatctgttcaat
+ggacgaacattgaattgttagtattctacacaagtcaggcctcgtaaatattaggtaagg
+ccgtgggataacctacgtgatatgcttgagcttgcgttgcaagctctcgttaatcattaa
+tttaggtgcgtgagggttaaacaccagcatattctatatgctagacgtcttccttaaagg
+atcgtagtattataattaataataagaaatatggttgacgtctagtcagcgggcatacgc
+tgctctatatactggcattattcaaaacttgacggtaaaaaaacgaattttaaggcgctc
+acgtcgaatgagccgaactcatgggaaccaaaatgtcacagaaaacacctctttattgcc
+aagcatgcaataaaaaaaatgttaatagtacgtttacgacattttattttataataaaga
+gaaactattacacctattgatatgataggacgtaaattaacgagtagcctgcatagaggc
+aaatgaggtttctacatggtatagacctgatgctgaaacatcgatgagttttggtcccct
+cgctcgttgaaatctagtcatttactactgtctttcgagctattataccacttcactatg
+tggtgtttctttgctatgtatggggctagtcaaacatgatgactatagctacaactcaga
+gagcgggcgtgttaagagtatctcatgctagaactgcacgacgaacttgatacaaagtaa
+caacatttacgattccacaaggtgactttgaagaaacatagtttaattctctgcttcgat
+catttctataaaccggtaccatcgcagcggatagatgcataacatttctactactccagg
+catcttaaaacacacgtagtacttcactagattaagacacgataagtgtataacttggca
+gtgggaagcaaggagattggcgaactcctggcatctgttacgttttgttcaggctcggtt
+gttgataatgtccgactcctgccatattgaagactcgctcgagggagatcgggattcgtt
+gattataagtacacgtgttccgtaatactatgaggcagtgattcaaaatggcacttctga
+cttacatgactaggtattattaccacggaagcgttaaaggcacactcttatggacttaag
+attgcaagtgccttcttctagcctgaattcgcgggttcaacacaaactctctttagacat
+ccgttgcctaaaggctgagacgtaggggcaaccctttaactatgtactaaaaaactagtt
+ggtaatttaacaacgtgtccaatcaagacgatgcaccaacgcggtgcgaaaatcgggtta
+agcaaacacaaataggaattgtgataaaccccaccttgagaggtcgcaagaccaacctcg
+ggaacaacggctctaagagaataacctaaatccggatgagtagactgtgtaactctctaa
+agggaagtgaaaaaaagctaagcatacatttaggtctcctgcattgcattcaattgaatc
+gtttgtattatgagctgtacagtagctatatcagctatagttatcccagaggaacaggta
+aactagctctgagcgtgaaatccggatattagaacccctagatgggattgattctagcta
+atacaggcttatctggttttacagttatctagatgattggtaaggtgaaacgcttggtgc
+cttccaccacttaaacaaaagtattgcccgggaagctattttctaggtattataaagtcg
+agcattaatatcaatttgacagtaaaggtctttcaccagcttcatatgccatagggccca
+tactcgatttaaattgaacggtttaacgagtattggaactctcacttataactgagtagc
+tatacgaaaaatctggtccatttccagaaatttattatcgatttgctgcttagtacccag
+gaagtgataacccttgaaggcacaacactgtaataagttttcctgtcacatctgtaatat
+tcggtcactacgcattcacgactaaagataattactatactaattaaaagttcaatgtta
+gggccgaatcatagtagaaattctcgtctagcctaatcggacttacctatgggctgtgag
+gatttatcagtatgtggacaaaaatgctagagataggtatagttaaagtcaccatggtac
+atctatgtgaggaagtttgtagttcgcttctttagtccgggcgtttgggatgacaactac
+tatacgtagagccgtactcaggattagatagtgtgaaagagtcaaataaaagggttaata
+ttaatttaacgttgcaaatgtgtttaggccaaacattaaccgttgtagggatattctaat
+acaggccttcaccgaaccctaatgataatctgtcttaataacattaaatgattgtctccg
+ctacgagctcttagggcctcattttaaatgactaatgtccaaagaagagactttcccaat
+ttcaatctgtcacgtatagacggcaccttagtgagtcatatcattaagatagaagattat
+caggagggaagtttctattatcaaccgttacgcaaccataaacttttaaatctcataatg
+gcattgagatcaagagctttcatgatggtaaagttcgtatgtgatgctggggagctagat
+atcggtataccacttcggttgtggtaagcccgagtgggccgttagtaatattaatagacg
+attatccgacaatgcattcgctgaaataatcttacttaggagaaattaatgctatgagcc
+aaaactatttatgtctgtcacattattgactaaagtatctatcgacaaaactgatgtcca
+taagttgtagcagatagtcggtgtatggtgtcaccaatgaaaacctcgagcgaaaaatga
+attatagttatccaatttgagtaaattgcctattatacagataggcttgtttagtcagat
+aaggttccgcttgaggtgctctaacttagcgagagttagaaagcctagtgagaggcattt
+tggtgccaaactccggctcgcatgagtaggccagagagtcactttctttcgtcgaagaag
+ttggtgaacagccttttgattagttgtttgtcttgtggctatgtgctactatataagtta
+gaacgcaaactaatctaatcagcaaagtaaaataggaccttgaacgagacggggtacgcc
+gttgaggctcgagatagtagataaactagaggaatgtagataaaacattagctagggggt
+ttagttactggattacataggaagtgcaccatcacggtgtgggggttcgtacgtaaagtc
+gcatcaatattgtcagtggacttaacaagttcgtgcataatgaaatcctatacggacttt
+gcatatctctaccgactcatctggtcgtctatgcgggtaattgtattgctccaagtggat
+gactattttggcgtcccagcacatagtaaatgtaaatccttataatagcataagcaatta
+ttagactgcgtgaagtcttagtagttctcaagctttacgttgtatgtaaataactcacgt
+aatcagccgtccccaaatcaccattgaggtcattgaatgtacggagcactattatcaatg
+cggtatgcgattttctgagcgattattgttaaagacttagcgttgagccccggaacactt
+gattacagattctttaaggagttatccaaatatcattttaaataatagtagtatcgtgct
+ttggacaataaaaaaagacccgttctcttatgttgttttgcgacgtacttctctgatata
+tacttcaactatgaagattctattcatcgataacccaggtatatttatatgcccgttcac
+tgcgcagggcaaattatctacggacaataatgacgtagttggacccggtaagaactaacg
+cttaatatgattaaggatgtatgccagtattatcttattatgtcagagtagaagtttctc
+tgagattttccgtcgttgtggtacaccggatttggctctctttttagaactgagaactcg
+gagtgtgtagtcttgtttccttcaatttatcaatatgcttttataccgccctcatcaact
+ataacaggacgacaagttccgtcttgctccatcatatactaccgatacaccaatcgtatc
+aagtttagtatacttgctttctctcttctacagcttactcgcttgtccgagaagcggttg
+gtgctcataaagttagtagtaaatgtacaactagtagccagtccttacctgtttttacga
+ctactacggacaccatgagatacagaagttagtgctacaattataccattacatgctcaa
+tatcgttgtcggccataagatcgaagagtgcatcacgcgtgtgaatacgtaaaatctacc
+atcccgtcaatgcacaaaaacacactccccttgttgactaacatcttttacaagaggcta
+aatcattgtccaggatcgaataccttgtgtacaatcgtcacccatcggaagaataccact
+tttccgatgtagtatgatttacaaaaaacatctatgtgagtaggccaattgtagtagaat
+atattcatttgaccgtcattagccttcttcttaggttgtgtacggatagtaggtacataa
+accgtcgtgtggcatacgctgcgatttcatacagctgccaacaccttttttaccaggcta
+gagtcagaaaagttggagccatgttaaatagttaccatcataaaccactgttgtctacta
+gtctgatcagctttcatgcctgtgcaagcaatatggattctcacgtaatggtaacaactg
+ttgcgttacttaggctggttaatttgtcagagtaataaatacatgtcttgttgtgtttcc
+taatcctcggaaagtacacaagcctaggaataggaaaagtaaagctcttttattctgata
+gtgactaactcaggatctaaatacgcgattatactaaccttcaccaaagctcaaaaatca
+tctgctggtgaccagttatagacagggtaattcaatatttaatgtctcccttaacatttc
+accagcatggattgaagatagtataaagttttacatggcagtcattgtgtcacggttcta
+tacaaattctgatagttagacggtatttgaaatgtgcttctagcatggtatcttacacaa
+ctgaatgaacgactggagccgttcgtatactatttgcgagcctcgagaccccgtttccta
+atgttaacgaatatagtataatataaattgtgatatgaataacacaagtaactacagttt
+ggacaattaattgttctaaactaaaaatcattcacttcagatggcatagagttatggcta
+ctacacatataaagcggtatgtgaaacacccgttttagccggaaaccctctactgctcgg
+gacaatgaatgatttccaaaatatggatgtgcagaattgttagtgtgactcaggtccaaa
+tagacactttagtttcgtcaagtcgttgcaaagtttaaaaccatcgcagcattctttatt
+tggtctacattgagaaatgaaaaaacgtgacagaaagtctagaagaactgtgaataatgt
+ctattactgattaactagtaagacattagtgcatctggtccactgaagcacccgcttggc
+gttaggcaatctctgtgaactgtcgtggctgttccggtaatgtacgaaagcaagcctata
+ggttgatcgagtcgcttcattaaggtcaatttcacaatatccgatcacattgtgctaggt
+tcgtcctttaccttgcttagtgctgcatgtacggggtgtcatgacttgttatcggcagac
+tctttatcccaagaatggataatatgtacatggaaagtgtccataattaagtcccttcac
+tgtaaagaatgactgccacgtgatccatgaggtctacagaaaccgacttacttgcttttt
+gatcaacttaattatggattcataaagttcagatatcggtacaattggtgtacaatatga
+aattaatgaggaaacatggaaatctgaatgacagtgatagaaaagatccccatttgcccg
+gtcagttcatgttacaccactcattagtactgtaagtgtttcgtcagcattgagatccac
+gatcatgtgtttatgccttcgaaactggatgtacgacgatcgagacgaagaggtatatat
+aacctaaatactaggtacgttgttagagagacgatgaaaattaatcgtcaatacgctggc
+gaacactgagggggacccaatgctcttctcggtctaaaaaggaatgtgtcagaaattggt
+cagttcaaaagtagaccggatctttgcggagaacaattcacggaacgtagcgttgggaaa
+tatcctttctaccacacatcggattttcgccctctcccattatttattgtgttctcacat
+agaattattgtttagacatccctcgttgtatggagagttgcccgagcgtaaaggcataat
+ccatataccgccgggtgagtgacctgaaattgtttttagttgggatttcgctatggatta
+gcttacacgaagagattctaatggtactataggataattataatgctgcgtggcgcagta
+caccgttacaaacgtcgttcgcatatgtggctaacacggtgaaaatacctacatcgtatt
+tgcaatttcggtcgtttcatagagcgcattgaattactcaaaaattatatatgttgatta
+tttgattagactgcgtggaaagaaggggtactcaagccatttgtaaaagctgcatctcgc
+ttaagtttgagagcttacattagtctatttcagtcttctaggaaatgtctgtgtgagtgg
+ttgtcgtccataggtcactggcatatgcgattcatgacatgctaaactaagaaagtagat
+tactattaccggcatgcctaatgcgattgcactgctatgaaggtgcggacgtcgcgccca
+tgtagccctgataataccaatacttacatttggtcagcaattctgacattatacctagca
+cccataaatttactcagacttgaggacaggctcttggagtcgatcttctgtttgtatgca
+tgtgatcatatagatgaataagcgatgcgactagttagggcatagtatagatctgtgtat
+acagttcagctgaacgtccgcgagtggaagtacagctgagatctatcctaaaatgcaacc
+atatcgttcacacatgatatgaacccagggggaaacattgagttcagttaaattggcagc
+gaatcccccaagaagaaggcggagtgacgttgaacgggcttatggtttttcagtacttcc
+tccgtataagttgagcgaaatgtaaacagaataatcgttgtgttaacaacattaaaatcg
+cggaatatgatgagaatacacagtgtgagcatttcacttgtaaaatatctttggtagaac
+ttactttgctttaaatatgttaaaccgatctaataatctacaaaacggtagattttgcct
+agcacattgcgtccttctctattcagatagaggcaatactcagaaggttttatccaaagc
+actgtgttgactaacctaagttttagtctaataatcatgattgattataggtgccgtgga
+ctacatgactcgtccacaaataatacttagcagatcagcaattggccaagcacccgactt
+ttatttaatggttgtgcaatagtccagattcgtattcgggactctttcaaataatagttt
+cctggcatctaagtaagaaaagctcataaggaagcgatattatgacacgctcttccgccg
+ctgttttgaaacttgagtattgctcgtccgaaattgagggtcacttcaaaatttactgag
+aagacgaagatcgactaaagttaaaatgctagtccacagttggtcaagttgaattcatcc
+acgagttatatagctattttaatttatagtcgagtgtacaaaaaacatccacaataagat
+ttatcttagaataacaacccccgtatcatcgaaatcctccgttatggcctgactcctcga
+gcttatagcatttgtgctggcgctcttgccaggaacttgctcgcgaggtggtgacgagtg
+agatgatcagtttcattatgatgatacgattttatcgcgactagttaatcatcatagcaa
+gtaaaatttgaattatgtcattatcatgctccattaacaggttatttaattgatactgac
+gaaattttttcacaatgggttttctagaatttaatatcagtaattgaagccttcataggg
+gtcctactagtatcctacacgacgcaggtccgcagtatcctggagggacgtgttactgat
+taaaagggtcaaaggaatgaaggctcacaatgttacctgcttcaccatagtgagccgatg
+agttttacattagtactaaatcccaaatcatactttacgatgaggcttgctagcgctaaa
+gagaatacatacaccaccacatagaattgttagcgatgatatcaaatagactcctggaag
+tgtcagggggaaactgttcaatatttcgtccacaggactgaccaggcatggaaaagactg
+acgttggaaactataccatctcacgcccgacgcttcactaattgatgatccaaaaaatat
+agcccggattcctgattagcaaagggttcacagagaaagatattatcgacgtatatccca
+aaaaacagacgtaatgtgcatcttcgaatcgggatgaatacttgtatcataaaaatgtga
+cctctagtatacaggttaatgttagtgatacacaatactcgtgggccatgggttctcaaa
+taaaatgtaatattgcgtcgatcactcacccacgtatttggtctaattatgttttattta
+gtgacaatccaatagataaccggtcctattaagggctatatttttagcgaccacgcgttt
+aaacaaaggattgtatgtagatggtaccagtttaattgccagtgggcaatcctaagcaaa
+atgagattctatcctaaagtttgggcttgatataagatttcggatgtatgggttttataa
+tcgttggagagctcaatcatgagctaatacatggatttcgctacctcaccgagagacctt
+gcatgaagaattctaaccaaaagtttaataggccggattggattgagttaattaagacct
+tgttcagtcatagtaaaaacccttaaattttaccgattgacaaagtgagcagtcgcaata
+ccctatgcgaaacgcctcgatagtgactaggtatacaaggtttttgagttcctttgaaat
+agttaactaatttaaaattaattaacgacatggaaatcacagaacctaatgctttgtagg
+agttatttatgctgtttactgcctctacaaccctaataaagcagtcctaagaatgaaacg
+catcttttagttcagaaagtggtatccagggtggtcaatttaataaattcaacatcgggt
+ctcaggatattcggtcatataatttattaagggctcttcgagtcttactctgagtgaaat
+tggaaacagtcatccttttcgttgtgaggcatcttacaccgctatcgatatacaatgcat
+tccaccgcggtgtcccgtacacaaggaaacttgttaccttggggatataagaaaactcac
+acgtctcattattaaactgagtacaatttttgcacgagaaagtaatgcaatacaatatga
+tgaaagccagctaatgaaaagggatggaacgcacctcggatctgttgcactggattaaaa
+tccgattatttttaaaaatattcagtgctagagcatatcaggtctacttttttatctggt
+atgtaaagcccacggagcgatagtgagatccttacgactcaacgaaaagttataacataa
+ctcccgttagccaaagcccaatcccgattactgccctaccctaacgtctgccatctaaat
+atcgaacttgttatgatcaatgtgactacctcccaccctttccccttcatttgttccact
+ggggataagctagcgttttcagaatcaatgcaataagaatagccaattgtctcacttcat
+cagagctcttggcaattccaggcgctacgtggttctggaatatattcatttttcaaatag
+taatacgtttagtgttgctattgtctacacgtttggatattacgttatgtgagcggacat
+caatagttgtctaactctttagtaagccagagatagcactcttagcgaatggataccatc
+ttccataagtttagttaatagtccgaaacaactgcttcgagcatatttgaacctccttgt
+aggcaaatagcctcttcaaagcaatcttactaatagatagagtttgttttaagggactac
+tagaaatgggacaatcttaatagtatgacctaaactgacatttaaagatatatccaggtg
+gcaagcataaagatcattgcgccacctccaccgtgggattacttatcagtcgatatccta
+tatgctaagtttgcgacggcagaatacaaactaagctgagttgatgctaaccttacctat
+gataccccattggaccggttaacagccctacttattccaaataaaagaacttttatgctg
+tagaagctattatagtgatgcctggtaacttcagtatattaaaatgacacacatacgcca
+tatagagctcctggaactttgaataatgagcgaacttcgaagttgaagagcaagaaacca
+tatgtcacggttgcctaaagcccggtaaccagacatgtgctatcattgatcattatcgag
+gttttcataaccttgacccattatcggctgtgcgcggacaagtacttaaatcactagttt
+cttcacctgcttatcggtaagaaataaggttggcaaagaatcgcataagacggacgtaga
+gccgcagcgttgtgcgagtccaggtgcatgcgcagcaataggattttaaattttgttcca
+tttttaatttagccgtaaggatgtccgtaaatgattgaaaattggattcaatctttgggc
+ctatgctactggaacctgatcgacaaaatttcaaacatacgttaactccgaaagaccgta
+tttttgcggctagaatagtcagtcgcttggagccatataccttaccacttaaacgacgtg
+ctcctgtagttgaaatataaacagaacacaaagactaccgatcatatcaactgaagatct
+ttgtaactttgaggcgaagcaccctcttcgagacaactaagagtaaagtaccgggcgccg
+caaggagtcgattgggaccctaaatcttgacgaattgctaagaggctcagagctaccact
+gtaatttctctagagcccataataaatgaacgatacatccgtaggtagcacctaagggat
+tataatggaagccaaatgcagttaataatattatatactggcgtacacgattcgacggat
+ctctcacatagtgattcacgacccccccctttgattgacacagcgtcagcattttgcaag
+aacgatcttctgcatagggtgcgccaccgtaaggatgacgtcgaagctacaactgggtat
+aatttaccatgcttccctgatgctgagtgcaatacactaagaatgagtttttaccccata
+tcaccagtatttgttctgttattgcgaagaaatggctatgctgagttggcgactaaagtc
+acccatcctttttattaggtaaccccctcccttaaactaactgatttgctggagctgccc
+tgcatacatatactttatcatttatggacgtccgtgacgcttattatccaccatagtcga
+tatgctacacggattcattaatggatcgtaggagtttaagttatatttactaagatcggt
+ctcggctactatcccgccttacccggcgctatttacggccatttttaatatattgacggt
+aattattcctatggtttcgaccgcacgtccttggacaagaaagaatggcaaaaaaaatgt
+aaaagaaaaaaaatattgagtccctaccatcatataaaaaatatgtgatgagtaacttga
+cgaaatgttagtggttattaaagactatctattacaccttttgttttctgtcgtagtata
+ttaaagtctagaagccttacaggaaaatcagggttatacagccgatactccgcagcatga
+atcatcgaggaggtgtcctaccatcgcgccttgtaatcttgtctgtgtatactgtattta
+gaccttttatacaaagtaaatatctcggctttatgtgattgggaggggcctactcaaaca
+tgatgacttgacctaataatcactgtgcgggcgtcttatgactagctattccttgaaatc
+caccaccaaatggttaatatgtaaaaactttgacgatgaaacaaggtgaatgtgtagtta
+ctttgtgtaattagctgcgtcgagcattgcttgtaaaaccgtcaatcgcacacgttactt
+ccataaaatttctacgaatacacccttcttaaaaaaaacgtaggaattcacgagtttaac
+aaacgataactgtataaagtggaagtccgaagaaagcagatgcccgaactactcgaagat
+gtttcgttttcttaaccataggggcttcttaatggcccactacgcacattttgttcaagc
+ccgagagggacatccccattacgggagtattactaaaactgttccgtaatacgttcagca
+agggatgaaaaaggccactgctcaagttattgacgtgggagtattacatcggaagcctga
+atcccacactatgatggtctgtacaggcctagggactgcgtctagacggtattaccggct
+tctaatcatacgatcgtgagtcttaacgggaagtaaggctcacacctaccccaaaccatt
+tatctatgtaagtataaaattgtgcgtaagtgttcaaagtggacaataaagacgtggcaa
+aaacccccgcacataagccgctttagatttcacaaataccaatgcggttaaaaacatcct
+tgagtcgtacatacaccatactcgcgttaaacggatataacagaagataataaatccgga
+tgtggagtcggtgtaactatagaaagccaagtgaaataatgcttaccagtcatttagcta
+tacggctttcatttcatgtcaagagggtggagtttgacctgtacagttgatatatcaccg
+atacttagaactcacctaaagctaaaattgctcgcagcgtgtaatccgcatattacaaac
+aatagatgggattcattatacataagacacgatgatctgctttttcaggttgcgagatgt
+tgcctatcgtcaatcgagtcctgccttacaccacttaaacaaaagtattgacagggaacc
+tattttcgaggtattatatagtccagcttgaatatcaatttgacagttaacctagtgaaa
+atcagtaagaggaaatacgccacattctccagtgaaattctacgggttatcgtctagtcc
+aactatcaattataactcacgagatataagtaaattctcgtacttggcctgatttttatt
+atactttggatccttagtaaacaggaagggagaaaccttcaacgaaaaacactggatttt
+gttttactctcaaagctcttatatgacggaaataccctgtcaagtcttaactttattact
+agactaatgaaatgggcttggggtggccagaatcatagtacaatttagcggatacactat
+tcggactttcctatcggctgtctggttggataagtatggggactaataggctagacatac
+ctatacttaaactatacaggcgtcatctatctctgcaactttggagttccctgatgttct
+cccgccctttgggttcacatcttctataccgacacccctaataacgattagtttgtgggt
+tagagtaaattaatacggttaatattaatgtatcgttgaaaagctggtgtcgccaataag
+gtaaccggctaggcagagtatatgtcacgaagtataactaccctaatgataagctgtagg
+aataaaattaatgctgtctctaagcgaagagatatttccgactctgttttaatgacgaat
+ctcattacttctgacttgcaaatgttcaatatggcacggtttcacggcacctttgtgacg
+catataatgaacttagaagattataacgacggaactttatatgataatccgttacgatta
+aagaatctgttaaatatcataatggcattcagttctagaccgtgcatcatggtaaactta
+ctttctctgcatggcgacatacatttcgctattcaaattcgcgtgtggttacacccactc
+gcacctttggaatattaagagaagatgatcagaaaatccattcgctcaatttttctgacg
+tacgtctaatttatcctaggagacaaatcgttttatgtctctcacatttttgaagaaagg
+ttcgagagacaatactcaggtcctgaactgctagaagatactcggtggagcgtggcaaca
+atgaaaaactcgtgacataaatgaatgatacttttccaagttcagttaagtgaatatgtt
+taacatacccggcttttcgatcttaagctgacgctggacgtgcgagtaatgtcagtctct
+tacatacactagtgactccaagtttcgtcaaaaacgccccctcccttctcgagcccactc
+acgctatgtattgacgcgaacttgttcgggatcagacttttcaggagttcggtcgcgtgt
+ccctatgtgctaatatataagttagatcgcattagatgctaatctgaatacttatagacg
+accttcaacgagaacgggtaccaccttgaggctagagttaggtgtgaaacgacaggtagg
+gacatataaaatttgagtgcggctttagttaagggtttaattacctactcaaacatcacg
+ctcgcgcccttcgtacgtaatcgaccatctagaggctaaggggactgtactaggtagtga
+ttaatgatatcctagacgcacgtgccttagatcttcagactctgatggtccgcgatcacc
+gtaattgtagtcctccaactcgatcactttgttggcgtcaaagaaattacgatatctaaa
+tacttataatacaataaccaaggatgagaatgactcatcgcgttggagttatattgcttg
+aagttctatggaatgaaagcacgttatctgccgtcccaatatctccagtgagctaattca
+ttggacggtccactttgatcaatccccgaggagatgttcggacactttagtctgtaacac
+ttagcgttgagaccacgaacaattgattactcagtcttgaaggtgttttccaaagttcat
+tttaaataagactacgataggcctttcctattgatataaactacccggctctgttgttcg
+tgtgagtcgtacttctctgtgtttttctgattatagcaagattcgattcttagtgtaaac
+agcgatttttatttgacccgtcaatgagaagcgcataggatctaagcaaaattatcaagt
+tgtgccacaaggtaagatctttccagttattgcaggtaggatgtatcccacgttgatagt
+atgaggtctgacgtcaactgtctaggagagttgaccgcgtgcgggtacaccggatttgca
+tcgatgttgagaacgcagaactcccactgtcgtggcggcgttcctgatatttagcaagag
+gcgttgataaagccctcatcatctagatctcgacctcatctgccctcttgctccatcatt
+ttctacacagactactttcctatctacgttagtataattgctttctatcttagtatcatt
+tagagcttctccgtcaacaggttcgtgctattaaagttagtacgaaagggacaacttgta
+gcaacgcatttaatcggttttcgactacttcgcacaaaatcagataaagaagtttgtcat
+tctattagacattgaattgcgcaattgacttgtaccacttatgatcgaacactgaatcaa
+gactgtgattaactaaaatagacaagccactatatcaactaataaaaacgcccctggtgg
+tcgaacatagttgactacaggataattaattggactggagccattacattctctacaatc
+gtatcacttcccaagtagacaactttgaccttgtagtttcatgtacaaaaaaatgctttc
+gcaggagcacattggtagttcaatagtttcatgggaacctcttgagccgtcttctgtggg
+tgtgttcggatagtaggtactgataaagtcgtgtcgctttcgatgagagggaattcaccg
+gaaaacaccttggttaacaggatagtctatgtaaacttcgagacatgtttaagagttacc
+agcttaatccacggtgctctactagtatcatcagctgtcttgcctcgcctagaaatatgc
+attctatcgttatcctatcaacggttgccgtactgagcagccttattgtggaagagtaat
+atataaatgtagtcttgtctttacgaagcagacgtaagtaataatgacttggaataccaa
+aactaaacatagtggattatcatactcaagaactctccagataaataacagtttttacga
+tacgtcaccaatgagcttaaagattaggatcctcaaaactgatacaaacgctaattcatt
+tgttattggatccagtatcagttaaactgaatggagtgaagattgtagaatgttgttctg
+gcctcgcatggggtctaggtgatatacaatttctcatacttacacggtagtggaaatctg
+attctagcttcgtagctgactatactcaaggaaccactgctcaaggtaggagactagttc
+cgaccctacagtcaaagtggccgaagcttaaactatagactagttgttaaatgctgattt
+caagatatcatctatatacagtttggacaattatgtgtgcgaaactaaaattcatgctat
+tcagatggatttcacttatgccttagaaacagatattgcccgagctcaatcaacagtttt
+agccggaaacaatcgaagcatagggacaatgtatcttttcctaaattgccatgtgcagat
+ttctgagtgtcacgaagcgcataatagaatcttgtgttgcctcaactcgttgaaaagttt
+aaaacaatcgcagcagtctttttggggtctactgtgtgtttgcaaaataactgaaagaaa
+cgcttgaacaactctgaagtagctcgagtactcattaaagtgtaacacattagtgaatat
+cggccaatgaaccaaacgcttcccggtacgctatctctctcatcgggaggcgatgtgcag
+gttatctacgaaagcatccctttacgttgagagtgtcgatgcatgaacctcattgtaaca
+atagcccagcaaattctcatacgtgcctcagggtccgggcgtactcctccatggaagggc
+gcgcatctagtgttataccaactcgctttttaactactatgctgtagttctacaggcata
+gtggccagtattttctaacttctctggatagatgctctcactcctcatccatcacggctt
+cagtttacgtcttacttgcttgttcagcaacggatggaggcattaagtatcttcactgtt
+ccctaaaattgctgttcaatatcaaagtaaggacgatacagggaaagctcaagcacactc
+attgaatactgccccagttgcaacctcacttaatctgacaaaaataatgactactctaag
+tgttgcggaagcagtctcttccacgagcttgtctgtatcacttcgtataggcatgtaact
+cgatagacacgaacaccgagtgagaaactatattcttgcttccgtgtgtgtgacaccagg
+taattgatgcggatataagctggagatcactcacgcccacacaaggcgctgctacctctt
+tattccaatgtgtaagaatttgctaacttcatttctagaccgcagctttgcggtcataat
+ttcacggtacggacccttgggttagagacttgataacacacttcgcagtttccaccgcgc
+acatgttttagtggcttctaacatagaatttttgttgtgacataaagagtgcgtgggaga
+cttgcccgaccgttaagccataatcaattgaaagccccgtgagtcacatctaattggttg
+tactgcgcatttagctatcctttagctgactcgaagagattcgattcctaatataggtta
+attagatggctgccgcgcgaagtaaaacgtgaaaaacgtagtgcgcagatctgcataact
+cgcgcttaattacttatgagtagttccaagttcgctacgttatgagagagattggaatta
+agcaaatatgttttatggtgattttgggatgagaaggactgctaagtacggctactaaac
+aaatttctaaaaccgccatctaccttatcttggagacatttaagttgtatatgtcactag
+tctagcttttgtctgtgggacgcgttctcggaatgagggaaatgcaagagccgattcatc
+aaatgcttatctaagaaagtagtggactattacaccaagcacgaatgccagggaactgct
+ttcttgctcaggacctcgcgacaaggtaccccgcataagtcctagaattacatttggtca
+gcaatgctgacatttgaccgtgaaaacataattttaatcagaaggcagctcacccgcttg
+ctctagatcttatctttgtatgaatgtcagaatttactgcaatatccgttccgaatagtg
+agggcttagtatagttctctgtatacaggtcacatcaaactccccctgtcctagtacagc
+tctgagctttaattaattgcatacatttccttcaatcatcagatgaaaacaccgcgaatc
+atgctcttctcgtatagggcaagagaagcaacaaacaactagcccgactcacgttcatcc
+gccgtatccttgttcagttcttactccgtattaggtcagcgaaatctaatcagaataatc
+ggtcgcgtatcaaaattaaaatcccgcttgaggttgacaattaaaacgctgagcagttat
+cggctattagatagtggggtgaaagtaattggctggaattatgttaaaacgtgatattaa
+gctaaaatacgctacttgttgccgacctaattcagtcattcgatattcagttagagccaa
+gaataacaagcttgtataaattgaacggggtgcactaaacgatgtgttactctaatattc
+agcttggagtatacctgaaggcgaattcatgtatcggccaataataagacgttgaagatc
+acaatttggactagcaaaagaaggtgatttatgcgtggggattgagtccactgtacgagt
+acggtctctggaaaattataggttcagggaatataaggaagtaaagataattaccaagag
+atttttggtatcgctatgacccagaggtgttctaacgtctgttttgatccgcagaatttc
+tgcctcaatgcatatttgacggacttgaactagagcctctaaagttaaatggcgacgcaa
+ctgttcctaaacttcaattattactactctttttttcctagggtattgtagaggccagtg
+gacaaaataaatcaaatttaagatgtttcggacattaacatcccccgtagcatagaaatc
+atcagttatccaatctctcatcgagcttttacaatttctgctggcgctatggacagcata
+tgccgcgagacctccgcaagactcacttgatcactgtaagtatcttcattagaggttaga
+gcctatagttaagctgctgacctagtaaaattggtattttctaattttattgctcaagtt
+aaaggttagtgaagggataatgacgttatttttgaacaatgggttgtattcaattttata
+tcacgaatggaacccttcattcccggcataatactagacgacacgaacaagctccgatct
+atcagccaggcacgtgttaaggtttaattccggcaaaccaatgaagcatcaaaaggtgac
+ctgatgcaacttagggtcacgatgagtttttcaggactacttattacctattaataagtt
+aacatgagccttcataccccgtaagacaatacatactccaccaattagaattctgagcca
+tcttatctttttgtatcatcgaagggtatggccgaataggttaattagttactcctaacg
+tctctacaggcatgcatttgacgcaccttcgaaaatagtcaatctctcgccacacgcgtc
+tagtatgcagcatcaaaaatatagtccacggtttccggattaccaaacgcggcaaagaga
+aacattgtatcgacggagataacttaatacagaaggaaggggcatcttcgaatacggatg
+aataattctatctgtttattctgacatcttgttttcaggttaatcttacgcattcaaatg
+acgcctgccccatgcgtgcgcaattattttctaatattgacgagagcaatctcactcctt
+ttgggtctatttatgttttattgaggcacaagcctatacagaacaggtactattaaggcc
+gtgagtgtgagactcaaaccgtggaaacaaaggatgggttgttcttggtacaagttttag
+tgcatgtgggcaatccttaccaaaatcagatgctatccttaactttgggctgcatttaag
+atggcggttggaggcctgtgagaatcctgcgtgtcatctttaatgaccgaattcatccat
+gtagattcagatcacacactcattccttgatgttgtctaaacaaaagttgttgtggacgc
+attggagggagttaagtaacaacttgggatcgcatacttataaaaattatatgttaaact
+ttcacaaacgctgaagtccaaagtaactagcccaaacgcctcgagagtcactaggtatta
+atggtgtttgagttcctgtgaaatagtgttcgaaggtaaaatttatgtaccaaatcgaaa
+gaacacttaataaggcttgcttgcacggaggtatgatgtttactgactctacaaccctaa
+ttttccagtacgtacattcattccaataggttagttctcaaagtgctatacaggctcctc
+aattgatgatatgcttcagccgctctatggatattagctcattttatttaggaagcccgc
+ttagaggcttactatgagggaaatgccaaaatgtcatacttttcggtgtgtcccatatga
+caccgctttacatagaatttgaattaaaacgcgctctcccgttcactaccatacttggta
+ccgtgcgcatattacatatagatataggatcattttttaaagctgtactaggtttgatcg
+acaatcttatgctatactatatgatgtaaccctcataatcaataccgatcgtacgatcct
+agcataggtggcaagcgattttatgccgattattgtgttaaatagtctgtgagtgtgatt
+atcagggctacgttggtagaggggttgtatagacctcgcacacattgtgacatacttaac
+aatatacgaaaactgatataataaatccccttacccaaacaccaatcccgttgaatcaac
+taccataacgtctcccatataaattgcctacttgtttgcataaatctgaatacataacac
+cattgcaccttcttgtgttccaatcccgttaagattgccttgtcagatgatatgcaagaa
+caatagcatttgctagcaattattaacagctcttcgaattgcctccacataacgcgggag
+ggtatattttaatttggcaaatactaagtactgttggcgtcatatgctattaacggttgg
+atattaagttatgtcagccgtaagcaagagtgggcgaaatattttgttacccagtgagag
+cactcttagagtttggatacaataggccatatgttgacttaagaggacgtaactacgccg
+tacaccattgttcaaccgacttcttggcaaatagaatcgtattagcaatcttaagaatag
+agacacgttcgtgttagggtatactacaaatccgaaaatcttaagaggatcacctaaact
+gaaatttatacatatttcaacgtggatagatttaacataattcagccacctccaacctgg
+gagtaattttcagtagatttactagatgattagtggcccaacgcacttgactatataaga
+tctggggatcctaacctgacctatgagacaaaattggaaacgttaacagcccttatgtgt
+acaaagaaaagtaagttgttgctgttcaacagatgatagtcatgacgcgtaacttcacta
+tagtaaattgaaacaaatacgcaatttagacagaatggtacggtcatgaatgacagtaat
+tcgaagtgctagaccaacttaaaataggtaaacgtgcccgaaaccccccttaacagaaag
+ctgctatcatggtgcagtatcgacgtgttcagaaacttgtaacttttgagcaggtccgag
+cacatggaagtatatcacgtgtttctgaaccggcttatccctaagatatatccgtcgcaa
+actttcgatttagtcccacgtagagcccaagcgttgtgcgactccacgtgcatgcccaga
+aatacgagtttaaatttggttacatggttaattttgaccgaagcatcgcactttatgatt
+gataattggattcaatatgtcgccctatgcgaatgcaacatgatccacaatttggctata
+agacgtttaatccgtatcacactttgtttgcggctagtatagtaacgcccgtgcaccaag
+agtcagtaacaattataagtactccgcaggtacttcaaatataaaaactaatcaaacacg
+acccatatgatcatctgaagatatttggaactttctcgacaaccaccctcgtactcaata
+cttacactaatcgacaggcacacgcaacgtgtacagtcgcaccatattgagtcaagattt
+gcttagtggcgatgagcgtacacgcttatttctctagtcacaattagttatctacgagac
+atcacgagggagcaaataagcgatgttatggctacacataggcacgtatgaatatgatat
+aagccagttaaacagtcgaaccatcgagcaaattctcatgcaccaacccacacgttgagg
+cacaaagagtaagctgtttgaatgtaacttcttctgctgagcgggccccaacgtaaggat
+caactagaagagaaaactcggtattagtttaaatgcgtcacggagcatgagtgcatttca
+ctaagaatgtctgtgtaaccaatataacatctatttgttatctgattgcctacttatggc
+tttgcggtcgtggcgactaatgtctccaatccttttgaggtcggtaccaactccctttaa
+attacgctgtgcaggctcatgcactgcatacatatacggtagcaggtagggacctcacgc
+acccttattataatcaatagtagttatcagtcaacgaggcaggaatgctgaggtcgaggt
+gttggtatattttctatgtgccgtctaggcgactatcacgcattaccaggcgagatttaa
+gccaattttgaatatagtcaacgtaatttttactatgggttccaccgaaacgccttgcac
+aactaagaatcccataaaatatcgatatcaaataaaagattgtgtcaataccttcatata
+tattttttcggttgactaacgtgaactaaggttaggggttttgtatgtctatataggaaa
+cagtttcttttctgtcctactttagtaaagtcttcaagccttactccaaaatcacggtga
+ttaagccgttactcagcagcatgattctgcctgctcgggtcctaaaatccagccttgtaa
+gagtcgctgtgtattagctagggagacctttgttaaaaaggatatatcgcggcgggatgt
+gagtgcgtggcgcatactcaatcttcagctcgtgtcattataatatctctcccccacgct
+tttcactagatatgccgtgtaagcaaacaccttatgcttaatttcgaaaatattggtact
+tgaaaaaagctgtaggggtacttaatgtctggtaggagatcaggagagaattgagtgtaa
+aaccgtaaagccctcacctgacttcatgtaaatggcttagaagactccatgatttaataa
+atactacgaaggaaagactggatctaaagataactctagtaaggccaactcccttcaatg
+ctgttgccagttataatccaagagctgtccttttctgaaccatagcggcttctgaagcga
+actagaagcaaagttggttctagccagacagccacataccctgtacgggtgtattactaa
+aactggtccggtattagttcaccaagggaggaattaggcaaaggatctaggtatgcaagt
+cggagtattacatccctaccctgaatccatcaataggttcctctgtactggccttcgcaa
+tgagtattcaaggttgtacagccgtataataataagatagtgactatgaacgggaagtaa
+cccgctcaccttccccaaaacattgttatatctaagtattaaagtctgccgtagtgttaa
+tactcgaaaataaacaactggcaaattacaccgcacttaagccgcttttgatttatattt
+ttccaatgcgcttttaaaaataattcagtcctacatactaattaagacccttaaacggag
+atatcacaagttaagttttaaccatctcgactaggtggaactatagatacccaactcaat
+ttatcattacctgtaatgttcctagaaggattgcatttcatgtcaagacggtggagtttc
+acagcgaaacttcagtgtgaacagattctgagaaatcacctaaacctattagtcagagca
+cccggttagaaccagttgtcaaaaaatagagcggttgcatgagacagaagtaacgatgag
+atccgttgtaacgttgagacatctggcctatcgtcaatacagtcctcccttaaaaatatt
+tttaaatactaggcaaacccaacataggttagtcctatgtgatacgccacatggtatatc
+attttgtaacgttacctagggataatcaggaagtggaattacgcaaaagtagacagtgaa
+atgcttagggttatagtctagtccaaagataaaggataaagcacgtcagagaactatatt
+agccgaatgggaatcattgttaggagactgtggatcatgtctaaaaagcaacgcagaaac
+agtcatcgaaaaaatctcgtttttgtttgaatctaaaagagctttgatgaccgatagtac
+ctgtatactagttactgtattacgtgtctaatgatttcggattggggtccccagaatcag
+acgtcattgtagacgattcaagtttaccaatttaatttcccagctctccttggagaacta
+tcgccaataattgcagtcactttccttttctgaaacgataaagccgtcagagttctctgc
+aacgttggacttacctgaggttctaacccactttcggttctaatagtagttaacgacaca
+acgaataacctttactgtggggctttcacgatattttttcgcttattattaatggttacg
+tcataagctggtgtccaaattaaggttaccggcttcgcagagtagttgtatccaagtata
+acttccctaatcataagatcgaggtagaaaattaatgctgtctctaaccgaacagatatg
+tcccactatgtggtatggacgttgctaattacttctgaagggaaattggtcattatggat
+acgtgtctaccatcaggtcggacgcagatatggttctgtcttcagttgatccaccgttct
+ttataggataataactgacgattaaagattatggtaaatagattaagccaattctcttct
+tgtcagtgaagcatccttaactgacttgctctgcagcccctcatacatttagctattcaa
+agtaccggctcgtttcaaactctcccacctttggaagaggttgtcaacttgataagtata
+tcatttacagcattttttcggacgtacctctaatgtttcattgcagaaaattagtttttt
+ctatcgcacattttgcaagtaacgttagagacacaattatctgcgaatgaactgctagat
+ctgacgaccgggagcctcgcaaatatcaaaaaagactgacatatatcaaggagtcgttga
+caagtgctggtaagtcaattggtttatctgtcccggcgtttcgatcttaagctgaccatg
+cacggcagagtaatgtcactctcgttcttacaagtctgtctccaagggtcggcaaaaaag
+acccctccattctcgagcccactcacgatatgtagggacgacaacttgtgcggcttatga
+attgtctggactgcgggcgagggtccatatctccgaagttagaagggacatacctttaga
+tgataagatcaattcttattgacgaaattcatccacaacggggaacaacttcaccctaga
+cttacgtctgaaaagacacctagcgtcttataaaaggtcagtgccccgtttcgtaaggct
+ggaattacctacgcaaacttaaacctcgcgcccttccttacgtatcgacaagatagaggc
+tatcgcgaatgtactacggaggcatgaatcatatactagaaccaagtgcctgtgatatta
+acaagatgatccgacgcgagcaccgtaattctaggcataaaactccagcaatttgggggc
+cgaaaacaaatgacgttagctaattaattatatgacatgatcaaaggaggtcaatcacgc
+atcgagttcgacgtatattcattgaacttcgtgcgtttgaaagaaacttttatgaaggca
+aaattgatcctgtctcctatttcatgcgtacctcctagttgataattccccgagcagtgg
+ttaggacacttttgtcggtatcaagttccggtctcaaaacgtaaaattctgtaatctgta
+tggatggtctgtgaattagttaatttttatgaagtcgtcgagacgcagttcctattgatt
+tattctaaacggagatgtgcttcgtgggactcggaagtagatctgtgtttatgattattg
+ctactttagatgctgactgttaactccgtgttgtttttcaaccgtatatcacaaccgaat
+tggatagaacctatagtttcaagttctgccacaaggtatcatatttacagttagtgctgg
+ttgcttctttcaaacgtggtgagtttgtgctatcacgtcaacggtagagctcagtggacc
+gagtgcgcgttcaaccctgttccagagagggtgtgatagcacatataccacgctcgtcga
+ggcgttcatgatagtttgcaagagccggtgttaaacacatattattattgttatccaact
+aatcggacctatgcataaagcattgtctaaacagaataattgcctatatacggtagtttt
+agtgatttatatcttagtatcagttagagcttcgaactcttcaggttcctcatatttaac
+gttcttcgaaagcgaaaacttctacaaacgaatgtaagcggttttccaagtagtacctat
+aaatcacagaaagatctgtctcagtatagttgaaatggtattcagctagtgacgtgtacc
+aattatcatagttcactcaagcaagacgctcattaacgaatatagacaagacactatatc
+atataataaaaaagaacatggtgctcgaacatagttgaattcaccatattgaaggggaat
+gctgacatgtaattcgctactagacgatcaattccctacttgtcaaagttgaactggtac
+gttcttggaattaaatatgattgcgctggaccaaattgcgacttcttgagtttcagggca
+aacgattgagccggaggatgtccgtctcttacctttcttgcttatgataaacgacggtcc
+ctgtacatcactgggaattctcagcaaaaataattgggtaaatcgagactcgatgtattc
+ggccacaaaggtgttagacgttaaagattattcaacggggcgataataggatcataaccg
+gtatgcaagcgcattgaaagagccatgagatccttatccgataaacgctgcacggtatgt
+gcagccttattgtcgatcacgaatttataaatgtagtctgggctgtaagttgaagaccta
+agttataatgaagtgcaataccaaatcgattcatagtggattatcagactcaagatatct
+cctgataaattacagttgttaagatacggataaaatgagatttaagattagcagcctcta
+atctgtttcaatcccgttggaatgtggtatgcgatcaaggttaagttaaaatcaagcctg
+tcttcagtcttgattcttgttctgccatcgcatgcggtctacgtgagttaatatgtagct
+tacgttctagcttgtgctaatctgagtatagattcgtagaggaatattatcaagcttcca
+cgcctcaacgtacgtgtattggtcacacaagacactaaaagtggaagtagcgtaaactat
+agtctagttgttaaatgctcagttcttgttatattcgatatactcttggctaatttatgt
+ctgagtatataaaattaatgatattaacttgcatttcacggatcccttagaaaaagattt
+tgaccgagcgcattataaacggttacaccgaatcaatagaagcatacccaatagctttct
+ttgaatttattgcctgcgcaacttggctgactctctagatccgaataattctatatggtc
+gtgacgaaactagttcattactgtttaaaatgccaacatgtcttttgggccgataatggc
+tctttgcaaaattactcaatgatacgattgatcaaagcggtagttgctagtggtagcatg
+taagtctatcaaatgtctgattatccgaaaatcttccaaaagagtccacgtaccatatct
+atctcatagcgacgcgaggggaaccttatctaactatcattccatttaccgggtgactct
+cgatgcaggatccgattgggataaattgcccagaaatggctcattcctgactaagggtaa
+ggccgttctcagcaagggaaccccgcgaatctaggcttataccatctagattgttaacta
+cttgcctgtagttctacagccatactggacagttgtttctaaatgatcgggattcatgct
+agcactcctctgaatgcaccgcgtaagtttaactattacgtccgtgggcagataaggatg
+gaggctgtatgtatcttaactgttacctaatatggctggtaattatcaaagtaaggacct
+taatgccatagcgctagcaatcgctttgtatactgaccatgtgccaacctctcttaatct
+gtaaaatataatgtcttagctaactgtggacgatcatgtctctgcctagagcttcgctgt
+atcaattcctatagccagcgtactagtgacacaacaacaccgtgtgagaaaagatattag
+tccttacgtctgtctctctacagcttattgatgaggattgaacatggacatatagctccc
+cctcaaaagcagatgctacctctttattccattctcgaacatttgccgaacttaatttcg
+acaaacctgaggtcacgtcttaatttatcggtaacgtcacgtccctttgagactggataa
+atatattaccaggggccaacgagcaattgttggaggcgcttctataatacaaggtgtctt
+gtcaaagaaagacggcgtgcgtctcgtgcaactcacttaaccaatattaatgtgaaaccc
+ccctctctcacatcttatgcggtgtactgccctggtacatttcctgtacaggactccaac
+agtgtagattcctaagatagctgttggagttgcctcacgccagatcgaaaaactgaataa
+actagtgagctgagctgcagaaataccgcttaattacttatgactagttcaaagggacct
+acgtgatgtcagacattgcaaggaagaaattaggtttgtgcgtcattttggctggactag
+cactccttacttcccctactattcaaatgtcgtaaacagcatgagacaggatcgtgctga
+catttaaggtctattgggaacgaggctacctttggtcgcgcgctcgcgttctccgaatga
+ccgaaatgcatgagcacagtatgcaattgcttatagatctaaggtctggtcgttgaaacc
+aagcacgtaggcctgggaaatcagttcttcctcagcaactacacaaaagcgtccaagcat
+tagtacttgtagtaaatgtccgaacctatgcgctcatttgaaagtcaaaaaatattttta
+agcagtaggcacctaacccgattcctctacttagtagctttctttgattctcagaattga
+ctgcaatatcactgcacaattctgtgccattactagacttctctgtattaacgtctcatc
+ttactaacactcgcctaggacacatctgagagtgaagtatttcaatacatttactgaaat
+cttcagttctaaaatccccgaataaggctcttatcggtttggccaacacaagaaaaaaac
+ttcttgcaccactcaccttcatacgcaggagcctggggaacttagtaataactatttcgg
+cagacaaagcttataacaagttgccggcgcgtataatatttaaaagaccccttgagctgc
+tcaattaaaacgctcacctggtataggctattagatagtgccgtcttagtaaggggcggg
+aattatcggataaactgatattttgataaaataaccgacttgttcacgacataagtcact
+aaggagattttatctttctccaaagtatatcttccttggataatttcaaagcgctgcaat
+ttaagttctgttactagtttatgctgctgggaggtgaccggaaggcgtagtaatctagag
+gcaaattataagaagttcatcatatcattttcgactacaaaaacaaggtgttgtatgccg
+gcgcattgtgtaaactggacgagtaccctagatggaaaattatacgttaagccaagattt
+cgatgtaatgataattacctacacatttttgctatccataggaacaagagctgttctata
+ggctcgtggcatacgaacatttgctgccgctatgaatattggaagctcttcaactacaga
+ctctattcttaattgccgtcgaaaatgggccgaatcggctattattaatactcggttttt
+ccgaggggattgttgtcgacagtcgtaattattattaatattgatgttggtgaggtcatt
+taaatacaaccttgcagacaatgaataagggatccaatctctcatactccttttacaatt
+gctcatgcccctatgcaaaccttatgccgccacacctccgcaactctctcttctgaactg
+taagtagcttcattactggtttgagactatactgaagctgatgacattctaaaatggcta
+ttttcgaatgtgattcataatgtttatcgtttgggatggcagaatcacgttatttttgat
+atagcccgggtattctattgtatagaacgtatgctacaagtcattccccgaagaagacta
+gaagtaaacaacatgcgaccatcgttaagccacgcaaggctgtagctttatttcccgata
+acctatcttccataaatagcggacagcaggatactgacgctcaacatcagtggttatggt
+ctaatttttaacttttaataaggtaacttcagcaggcatacacagtaactctttaattta
+taatcaaattagaagtctgacacttcttatatttttctatcatccaacgcgatcgcccat
+tagcttattgtgttactaataacgtatctaaaccaatccttttcaagctactgcctatat
+tgtcaatatatacaaacaacaggatagtaggctgcttaaaaaatattgtcaaccgtgtac
+gctttacaatacccggaaatcacaaactttgtagacaacgagtgaaatttatacactacg
+aagggccagcgtacaagacccatgaattaggcgatatgtttattctgacatattggttta
+tccttaatctgtcgctgtaaaatgaagccgcccccatccctgcgaattttttttcgaaga
+ttcacgactgaaatataaatacgtttggctatatttatgttggagggaggcaatagcctt
+tactgttaaccgaagatttagccagtgagtgtgacactaaaacactggaataaatgcagg
+cgttcttctgggtaaaaggtttagtcaatctcgcctataagttcatatagctctggatat
+aattatctggcccatgcatttatcatggcgcttggtgccctgtgtgaagccggcctctca
+tattgaaggtccgaagtattccatgtacattaagatcactctctcattcatgcatcttgg
+cttaacaaatctggttgtccaagctttccaggcacgtatggtacaaattcggatcgaata
+cttataaaaatgatatgttaaactgtctaaaacgctcatctacaaagtaaagtgcactaa
+ccaatagagtctcaagaccgtgtaatgctggtgcactgaatgtgtaatacggttagaagg
+gattagttatgttacaaatccattgaaaacttaagaagcattgcgtgctcggagggtgca
+tcttttatcaagagactaacattattttcaacgacgtacatgctttacaatagggtactt
+atcaaacgccgagaaacgcgcctatagtgatgttatgattatgacccgatatccattgga
+ccgaattttatgtaggttcccagcgtactcgcgtaatatctcggtattgccataatgtaa
+tacttgtcggtctctcccagatgaaaaagcgttacagagtatttcaatgaaaaacagcgc
+gcaacgtcaatacctttaggggtaacggccgctgatttcatatagatatacgataagttg
+gtatagctctactaggtggcatccacaatcgttgcatttactatagctggttacaatcat
+aatctataccgttccttacatactaccatagcgggatagcgtttttttgccgttgattgg
+gtttaagaggatgtcagtctcattatatccgattcggtgggagagccgttgttttcaaat
+cgcacactttgtgacataatgtacaagataacaaaactgatataagatataaactgtcaa
+tatcaccttgacacttgaatcaaagtaaattaactcgcaaatataatttgactaattggg
+tgcagatttctcaattaataaaaaaatggcaccggatgggcttacaagccccttatcatt
+cacttgtatcatgatttccaagaacaatagaatttgctagcaagtatgaacagagattcg
+aattgcatccacagtacgccggagcgtttattttaatgtggatatgacgatgtactgttg
+gcggcatttgctagtaaccggtccttatttacgtagcgcacacgtaagcatgtctgggag
+aaatatggtggtacaatctcagagaaagattacagtttggtttaaataggacttatcggg
+tcggaagtggaacttaataagcagtacacaattgggcaacagacgtcttgcctattacaa
+taggattacaatgcgttagatttcagacacgttcgtgtttggctattcgtcaattcccta
+aatagttagacgatcaactattatcaaagtgattctttgttcatcctccattcatgtaac
+agatggcacactacgcataacgccgaggaattttaacgagatttaagagagcagttcggg
+cacaacccacttgactttataacagctcggcagcataaacggtaatatgtgacaaatttc
+caaacgttataagaacgtatgtgtacttagaaaactaagtggttcatgttcaacagatgt
+gacgcagcaagcctaacttatctattggttttgctataaaagaacaaagttacacagaat
+cctaagggcttgtttcacacttatgcctagtgcttcaccatcttaaaatagcgaaaccgg
+cacgaatcaaaccttaaaacaatgcgcagatattggtgatggtgactccgggtatgataa
+tggtaactgttgaccagcgcccacctcatcgaagtatagaaagtggttaggataaggatg
+agaccgaacttatttccggccataactttagattttctacctagtacacaacatcagggc
+ggacacgaaaccgccatcacatcatataccaggtttaatttgcttaatgggggaagtgtc
+aacgaaccttcgaactttagcaggcatatggccattatatatggccccagagcagaatgc
+tacagcagacaaaatttggatttatgtagtttaatacctatcaaacttggtgtgaccata
+cttgtctaacgacagtgcacaaagtgtaagttacaattattactactcagcagcttctgc
+aatgataaaatcttatcatacacgtcacatatgataatatctacttagggggaacgggct
+ccacaacctacatagtactcaatacttacactattcgacaggcacaccaaacctgtacag
+tcccaaaagattgagtcaactttgcagtactgcagatcacagtaatagcttagttagcga
+gtcaaaattagttttctacgagactgcacgaccgtgcaaatttccgatgtgttggctaca
+aatagcaacgtatgaatttgtttgaagccacgtaaactgtacaaccttagagataagtct
+caggctactaaaaacacgttgtggcactaacaggatcatggttgattcttacttattcgg
+ctgaccggcccaataagtaaccttcaactagaacagaataatcgggagtagtttaattca
+gtcaaggtgcaggtctcattgtaactaacaagctctgtgtaaccaagttaaaatcgtttt
+cttagcggattccctacttatggatttgagctcgtccacaatattcgatacaagaagttt
+gtggtccgtaacaacgaaattttaattacgctgtgcagcctcatccaaggaattaataga
+aggttgatggtaggctccgaacgctccatgattataatcaagtggactgtgcagtaaacg
+aggaaggtatcctgacgtcgtggtgttcgtttttgttatttgtgccctatacgagtagat
+aaaccatgaacagcacagtgtgaacccatggttgattttaggctaccttatttttaattt
+ccgttacacagaaacgaattccacaactaacatgccattaatttttcgatatcttataaa
+agatggtcgaaattcattcatttattttttttcggttctcgaaagtcaactaagctgtcg
+cgttttgtttctctttagaggtaaaagtggctttgatctcctacgtttggatactagtca
+accattactccatttgatccgtgagtatcacctgtctaacatccagcattatgactcctc
+ggcgaagaaaagacacacttcttagagtcgatgtgtattagctagggacacagttgttta
+atacgatagtgagcccagggagggcagtgcgtcccccagtagatttattcagctagtgta
+agtataagatatctcacccacgaggttcaagtgatatgcagtcttagaataatacttatc
+ctgaatttcgatattatgggtacttcaataatccgctagcgctactttatgtctcgttgg
+acagcaggacacatggcagtcttaaacactaaagacatcacctgaatgaatgtaatggga
+ttacaagaatcaatgaggtattatatacgacgtaggaaactctggatatatacagtaatc
+tagttacgccatcgcacttcattcctctggaaacttagaagacatcagctgtacgtggag
+gaaccagacccccgtatgtagccaaatagaaccaaagttgcttatacaaacacacccaat
+gacaatggaccgctggagttcgtaaactcggaacgtagtactgcacaaacccagcattta
+gcaataggagctacgtatgcaactcccacgtggtaataccttcaagctatcaatatatag
+gtgcctagctaatcgcattcgcaagcagtattcaagcttgtaaaccagtataataattac
+agaggctctatgaaacccaactttccagctaaaagtcccaattaaatggttatttcgtac
+ttttaaagtcgcccgttctgttattacgcgaattgattctactccaaaattaaacacaaa
+ttatcaaccgtttcatttatatttgtcaatgcagctgtttaaaataaggctctactaaat
+tataattaagacacttattaccagatttctctagttaagtttgaaccagctcgactaccg
+cgaaagatacattcccttctctatttttcagttcatctatgggtcagagaagcattgaat
+ttattctattcaccctcgtcgttcacagcgaatcgtcagtgtgatcagtgtatgagaaat
+atcctaaaccgtttagtcagaccacacgcttagaacaagtggtctaaaaagactgccctg
+gaaggagtaagaagtatacagctgatccggtgtatccttcagtcatctgccctatactaa
+ttacacgacgcaaggaaaaataggtttattttctaggcaaacccttcataggtgactccg
+atgtgttacgaatcatgcttgagaatgtgctatcgttaccgacggataataacgatctcc
+aatgaaccaaatgtagaatgtctattgattacccttttactattcgacttagagatagga
+gatagaacctcagtgtacttttttagccgaatgggaatctttgggaggtgaatggccata
+aggtcgtaaatccaaccctcttaaagtcttccatattatatcgttgttcgtggaatcgat
+aacagatttgttgacccatagtaaatgtatactagtttatgttgtaagtgtagattgttt
+tccgattgccgtccaaactttatgtcgtaattgtagaccagtaaagttgaccaaggtaag
+tgcccagcgatcctgcgagatcgatcgccaatttttccagtcactgtaagtgtaggttta
+gataaagccgtatgagttatatcataagggcctcggaaagcagcttcgaaccaaagttcc
+cttataatagtagtttaactataaaagtatatactggtctgtcgccctttcacgatttgt
+tttaccggtttatgaagcgttacgtcattagagcggctccaatttaaggttaacggcttc
+catgtgtagttgtatacaaggataacttaaagtatctgttcagcgagctagttaagttat
+cctcgatagaacacaactcagaggtcccaagatcgggtttgcaacttgctaatttattct
+caaggcaaattgggaattatcgatacctgtataccataaggtcgctcgatgtgatgctta
+tgtcttctggtgatcctaccttagttagtgctgattaacggaacattaatgtttatcgtt
+ttgagatttagccaattctctgattctaactcaagatgccttatctgacgtgctatgcag
+cccctaagtattttacattgtaataggacacgctcctttaaaactcgccaaaaggtcgtt
+gtggttctctactggttaactatataatttacagctttgttgagctagttcctctttggt
+ttaagtcctcaatattagttggttcgagcgataagttggctagttaccttagtcactata
+ttagatccgaatgttatgcttcatctgaagaccgccaccctccaaaatttcttttaagac
+tcacttattgcaaggtgtaggtgaattcggctcgtttctcaagtggtgtatctgtacacg
+agtttccatattttcatcaacagccaccgcacacttatgtcactctaggtattaaaagtc
+gctctacaaggggacgcaattaagaaacagacatgctagtcaaaaataaacatagcgagg
+caccactaattcggccgcttatcaatgggatgctctgcgcgagacgcgccagagctcagt
+agttagttcggacatacatttacttcagatgatcaattagttttctacaaatgcttactc
+taccccgaaaaaagtcaccagactcttacgtctctttagtatccttccgtcttatataag
+gtcagtcccccgtttcggtaccctggaatttactaagaataatgaaacagcccccaagga
+cgtacgtttacaaatgatagaccagatcgcctagcttattccgacgcatgttgcatagaa
+ttgaaccaacggaatgtgagagtaactagatgagccgaccacagcacccgtttgcgtcgc
+agaatacgcctgatagttcggccacgaaatcatatgtcctttgagtattaagtatttgta
+atgatcaatcgagctcaagcaagcttacacttcctcggatattcagggaacttagtgcct
+ttgaaagatacgttgatcaacgaaaaattgataatggctcatatggaatgcctacctcat
+agtgctgaattaacacagcactgcggacctaacttttcgaggtttcaagttcacgtctca
+aaacctaataggctggaatatgtagggatcctcggtgaatttgtgattgggtttgttgta
+gtactgaccaagtgaatattctttttttctaaaagcagatctgctgccgggcactacgaa
+ggagatctctgtgtatcattattgcttcttgacatgatgactcttaaatcactgtgggtg
+tgcaaaacgatagcacaacccaattcgatagtacatattgttgatacttcgcactaaacc
+gttcatatttaaaggttgtgctccttccttcgttaaatactggtgacttggtcctatcta
+ctattagctagacctctggggaaccacgcccccgtaaaacctgtgcaagagagggggtca
+tacatcttagacatcgcgcctccaccagggaagcattgggtgattgaccaggtgtgtaac
+aaatatgattattcttatactaatattagcaaagatgcataatgatttgtattaaatgta
+taattgaattgataagggtcttttagtcagtgatagagtagtataaggtagacattagaa
+ctcttaaccggacgcagatttttcggtcttagtaagccaattagtcgacaaaacaaggta
+agagcggttactagtagtacctataatgcactgaatcttcggtcgaagtatagttctaat
+gctatgcagattgtgacggcgacaaatgttcagacttatatcatgaaacaagctcttgta
+agtattgacaaatgaaaagattgaatatttttaaatacaaaatgcgcctacttattaggg
+gaattaaccagattgaaggccaatcctcacatgtaatgagataatagacgataaatgaaa
+ttcttgtaatagttgaactgctacgtgatgggtattatatatgattgagatcctccaatt
+gccgacgtcttgtcttgatgcccaaaagattgtcaacgaggagctccctcgcgtacctgt
+cgtccgtatcataaacgacgcgacatgtacagcactccgaagtataagcaataataatgc
+gggtaatccagactagatcttttcggactcaatgcggtttcacggtaaacatgattaata
+ccggagagtagtcgagcttatcagcgatgcaagcgaattcattgtgccaggagatacgtt
+gcagataaaaccggcaacgtatgtcaacaagttttggcgatctcgttgtttgtattcgac
+gaggcgcgggaacttcaagaactatcgtatattcaagtccattaccttttagtttcagac
+tggtggagctgactaaagttatatcatcattttgtacactggtttagttaacgataattt
+cagatttaacatgaccagacgataatcgctgtatatccagttggaatgtggtttgccaga
+aaggttaacttataatcaagcctctcttcagtcttgattcgtcgtatcccatccattgcg
+ctatacctcagtgtatttggagctgtagttataccgtgtgctaagatcagtagacatgac
+gagagcaatattatctaccttacaagcatcaacggacgtctagtcggaacaaaagactct
+aaaactcgaacttcaggttaatatactatagttctgtattcagcagttattcttatattc
+gatattatcttgcctattggatgtctgactttagtatattaatcatagtatctgccatgt
+aaaggtgccagtactaaatctgtttcacagtgcgaattataaacggttacaaccattaaa
+gacaacaagaccctatagctttatttgaattttgtcaatgcgcaacttggagctcgcgat
+acatcccaattagtctatagggtcgggacgattctacggcatttctggttataatgacaa
+catggattgtggcccgagaatcgctctttcattaattaagcaatcattacagtcttataa
+gcgctacttccgagtggtagcaggtaactcgatataaggtcgcatgagccgaatagctta
+aaaaacaggccaccgaacattgatagagaataccgaccacagcgcaacctttgattactt
+tcattaaattgtacggctcactcgacatcaagcttaagattgcgataatgtgaactcaaa
+tggatcagtactgaagaaccgtaacccacttcgcagaaagcgtacccagagaagatacgc
+tgttacaatatacagggtgaaattattgcctgttcttcgtaaccatttcgccaaacttgg
+ttagaaatgatagccattcatgatagaaataagctgaatgataccagtatctttaactat
+gtagtcagggggaagataacgatggtccatgtatgtttctgatatgtgacagtattggcc
+gcgtaatttgctaacgaagctacttaatgcctttgagcttcatatagatttctttaatca
+aaatcggcaaaaagatagtatgagctataatatatgctagtagagaactctggaccatca
+tctatatgaatactgattcgagcgtgcaattactttagcctgcgtactactgactctaca
+aaacactctgagataagtttgtagtcagtaagtcgctctctataaaccttttggatgacc
+attgtacagccacttatagatcccaataaatagcacaggagacagagtttttcaatgctc
+gatcatttgccgatagtattttcgtctaacctcagggcacctattatttgatacctaacc
+taacggccctttcacaatggagaaatatatgacatcgggacaaacacaaatggtgggtgg
+ccaggagatatgacatggtggcgtctctaagaaacacggactccctctaggcaaactcac
+gtaaccaattttaatgtcaaacaaaacgctcgaaaagattttgccgtgtaatgacctggt
+acattgactggtcaggaatacatcactgtagttgccgtagtgtcctgttggtgttccatc
+aagacacatcgtataacgcaatttacgacggacatcagatcaagttatacagattattta
+agtatcacgtgtgcattgggacataagggatctcacacatgccttggaacatttttgctt
+tgtgccgctttttcgctgcactaccaatccttacttaccagtatattcaaaggtcgttaa
+cagaatgagaaaggttagggctctaagttatcgtcgattgggatagacgagacatttgcg
+agcgccctccacggatacgaatctcccatatcaatgtgaactggatgctatgcagtttag
+ttcttacgtctcctagtggtaaaaatcaaagtagcactcgcatagcagttattcagaacc
+taatacacaaaaccgtcaaacattttctaattctaggtatgggccgatcataggagctaa
+ggtgaaactcataaatgttttgttagatctagcatcctaaaaagatgcatatactgagta
+gctggcgtgcattctctcaattgtatcctttttaactgaactagtcggtcccatttcgtg
+actgagatctattaaccgataagattaataacactcgcattcgtatcagctcagagtgaa
+gtttttcaataatttgactgatatattaacttctaaaataaccctttaagcctcggatcc
+gtttcccaatcacatcaaaaattcttattccaactatctacggattaacaacgtgcatgg
+ggatcgtagtaagaacttgttccgatcactttgagtatatcaagttgacggcccggttat
+tattgaatagaaacattcacctgctaaattaaataccgcacatcggatacccgatttcag
+agggccgtcttactaagggcaggctttgttcggtttaactgagatgttcattattttaca
+gtatgcttcaactaatatgtaacgaaggacagtggatctgtctccatagtagatcttcag
+tcgtgaatttcataccgctcctatttaagttcgcgttcgagttgttgatcatggcacgtg
+aaagcaacccctagtattctagacgaaaattttttctagttcatctgataatttgccaat
+tcaaaaacaaccgctggtttcccggcgcattctctaaaatggaagtcgaacctagagcca
+ttatttgtcggtaacccatgagttccttcttttcagaagttaatacactgtggtcctata
+cagaggaaaaacagcggttatatacgatcgtggcataacaacattggatcaagatagcaa
+tttggctacctattctaattctcactagattcggtattccactacaatatcggcagatta
+ggattggatgaataatcggtgtttaagtccggttgcgtctccaatctcctaatttttatt
+aatattgatcttggtgacctattgtaaataaaaacttcaagactttgaataacggtgaaa
+agatagaagactcatttgaaaatggatcatccacagatccaaacattagcaagacactaa
+tccccaactagctattctgatcgcgatcgtgctgcagtactcctgtcacaatagtctgtt
+catgatctaattctttttgggctttgttcgatggtgattcagaatctttatccggtcgct
+tccctgtagctactttgtggggatattgcccggggattatagggttgagatcgtttccta
+aaagtatttaaaccaagtagacttcaactaaactacatcagaacatcgtgaagacaccat
+acgcggtacctttatttaccgataacatttcttcaagaaataccggtaagcagcataatg
+accctaaacagctcggggtatcgtcgtagttttaaattttatttaggttactgctcaagg
+aataaaaactaactatttaatttataataatattacaaggctcacactgattagatttgt
+ctataagacttcgcgatcccccattaccggattgtcttaagaataaactagataaaccat
+gcattttctagataaggcctttagtctaattagatacaaaaaacacgatagttgcatcct
+taatttattgtgtcaaacctggaaccttttaattacccgcaaatcactttatgtcgagac
+tacctctgaaatttattatctacctaccgcatgaggacttgaaccatcttgtaggagtta
+tgtttattagctaagattcgtttatcctgtagcggtccatgtatattcaacaagcaaaaa
+gcactcagaattgtttttagttgagtcaagactgatatataaataagtttccctagtttt
+ttcgtggtgggacgatattgaattgaatcttaaccgaagagtttcccactctgtcgcaca
+ataatacacgccaatatttccagccctgcttatgccttaatcggttactcaatctcccat
+tgaagttcattttgatctgcatagaagtttcgggcccagccttttttctgccaccttcct
+ccaagctctgtagacgcactctaagattgatgctcacatgtattaattctacattaacat
+aaatatataagtcatgcatcttcgagtaaaatatctggttctccaacatgtcctggcacg
+tatcgttataatgcccatacatgtagtattaaaatgattgggttaactggatattaagat
+catcgaaattgtaaagtcaaattaacaatactgtctcaagaccgtgtattcctcgtgctc
+ggaagggctattacgcttacttccgttttggtatcttaatatgactttcaaaaattaagt
+tgcagtgagtcctacctgcgtgcatcggttagcaagagtataaaagttgtttaaacgaac
+tacttgctttacaataccggtcgtatatatcgccgtgaatccagaagattgtcttctttg
+gattatcaaccgagatcctgtggaccgatgttttgggaccttcacagaggactccaggta
+gagctcgcttttgcattaatctaagaattgtacctctctaaaagatctaaaacagtgaat
+gtgtatttcatggaaaaacacagagaaacgtaaattactttaggccgaaaggcacatgag
+ttattatacatatacgagatggtggtatacatcgaattcggggcatacactatagttgca
+ttgtatttagctgctttaaataatatgatattaccttccttacataagacattaccggca
+taccctggttttcaacttgtggggctttttgacgatcgcactctcatttgatccgagtag
+ggcggtgacccctgcttttcaaatacaaaaatttcgctatgaaggtaatagattactttt
+cgctgttatgatagaaacggtaaatttaaaattgaaacttctagaaaagtaaagtaacga
+gaaatgattttgtgaataatgcggtcatgattgcgcaagtaagaaaaaaaggcaaaagga
+tgcgcggaatagaaacttatcagtcacgggtatcttgatttcattcttcttgtcaattgc
+cgacataggatgaaatcagattccaatgcaatacacagtaacccccacccttgattgtaa
+tgtcgatttgaagttgtacgcgtcgacgaagtggatagtatacgggccttttgtacggtg
+cgatcaactatgaatctcggcgagttagatggtcgtacaatctcacacatagaggtcact
+tgcctgtaatgacgaattttcggctaggtactcgaactttattagaagtaaaaatgtggg
+caaaagaaggattccattttacaagacgattacaatgagttacatgtctctcaacgtagt
+ctttccctagtagtctttgaactatttaggtactccagaaaattttagcaaagggtttct
+gtgtgaatccgccattcatgtttatgatggaacaataagaataacgccctcgtatgttat
+cgacagtgaagtcagcagttcggccaaaaacatattcaatttagtacagatccccagaag
+ttaagctaagtgctctaaaatggcctaaacggttatcaaagtaggtctaattactatact
+aacgggtgcatcgtaataactgctgtcgatgcaacactatatgatagtgtcgttttgcta
+tatatgtacaatgtgacaaagaagccttagcgattcttgcaaacttaggacttcggattc
+tcaatcttaaatgtccgaaaacgcaaagattcaaaaatttaatctatgagcagatatgcc
+tgatggtgactacgcgtatgttaaggctaaatgttgacaaccgcacacataatcgaacta
+ttgatagtcgggagcataaccaggtgaacgtactttgttcacgacatttattgacatgtt
+ctaaatacgtctcaaaatcacggcgcactagaaaacgcaatcaaatcattgtcctggttt
+aagggccgtaatgccggtagtgtcaaacttcatgagaactttagctggcttttggccagt
+atttagggaccaagagcactagccttaagctgaatattttgccatttatctactgttata
+actttaaaacttggtggcaccagacttgtcgatacacacgcatcaatctgtaacgtaaaa
+ggtttactaagaacaagcgtaggaattgagtttatattatatttaaactaaaagatgata
+ttagcttctgagggcgatagggctccaaatcataaagaggaatatattattacacgatta
+gaaacccacaacatacctcgaatcgcccaaaagtttgacgaaacttggcagtactccaca
+tctcagtaatacagttgggagagtctcaaatgttgttttattactcaatgaaccaccctc
+ataatttcactgctgttccattaaatttgcaaacgatcatttgctttgaagaaacgtaaa
+atcgacaaaattacagataagtagatgcataataaaaaaaactgctcgctataacacgat
+catcgtgcattcttacttaggagcatcacccgcacaataacgtaccttaaactacaacac
+tattagaccgagtactgtaattcacgaaagctcaagctcgcattgtaaagaacttgctct
+ctcgtaaaatgtgataatagtttgcggagaggattcaattattttccattgcacctactc
+cactagattcgataaaagaaggtggtcctcccttaaaaagaaatgttaagtaacatcgga
+accataagcaaagcatgtaagtgaaccgtcatccttccctaagaaacataaaggttttta
+ataatgtcgactgtgaactataactgcatcctttcctgacctactccggttccttgttgt
+tatttctgaacgagaccagtagataaacaatgtaaaccacagtgggtaccaatggtgcat
+gtgacgctaccgttgttttaagtgcccgtacaaacataagaagtcataatcttacttgaa
+attaattttgccttttattttttttcaggctcgaaattaatgatttgttttttttgacct
+tctagttacgctaatatgcggtcgcctgtggtttctattgagtcctataacgggatggga
+tctaatacgtttggttactagtaaacaaggtataaatttgataccggagtatcaactgta
+taacatcaagctttatgactcatacgcgaagtaatgacacaaggctttcaggagatcgcg
+agtacagagccactaaggggtgtattacgatagtgacaccaccgagcgcactcactcccc
+aagtagatttatgatcctacgctaagtattagatatataaccaaagaggttctagtcagt
+gcaactcttagaataataattagccggttttgcctttttaggcctaatgcaatattcagc
+tagcccttatgtatctcgcgttccacagcaccactcatggcacgcgtttaaactaatcaa
+atataatctatgaatgttatgccagtacttgaataaatcaggttttttataagtccttgc
+atactctcgttatatactgttagagtcttaccccatagaaattctttcatctgcaaactt
+agaagaattctcagctacggggagcataaagtccccaggatgttgacaaatacaacaaat
+gtggcttatacaaacactccatatgaaaatcgaaccctcgtggtagttttagccgaacct
+tgtacggataaatccctccattttccaatagcagatacctatcctactacctcgtggtat
+taaattaaagcttgaaatatagagctgcatagcttatccaattcccaagcacgagtctac
+cgtcgtaaccacgatttgatttacagacgctagagcaaacccatctttaaacatataagt
+aaaaattaaagggtgagtgcgtacgtgtttactagcaacttcgcttattaagacaattgt
+ttataagccataattaaaaacatatgttcaacaggttcattgatatttgtaattgcacag
+gtttttaataaggatctacgtaagtataatgaacaaactttttaccagagttatattctg
+tactttgaaaatgctcctctaccgccttagagactttcaattagattttttgcagttaat
+ctatgcgtaagtgaaccatgcaagggatgcgattcaaccgcctcgtgctaaccctatcgt
+ctgtctcataactgtaggtctaatataattttcagttttcgaacacataaccctttgaaa
+atctgctatttaatgtctcacctgcatgcactatcttctatactgctcagaacggctata
+cgtcactatgctccaagtgacgatttaaacgaagcaaggaataataggtttattttagtg
+caaaacaattaagtgcggactacgtgctctttacaataagccttgtgattgggctatagg
+ttaagtcccatattaacgatctccaatgtacaaaatcgacaatcgctttgcattacccgg
+ttactagtcgaattacagatagctgttagatactcactctaattttggacaacaatccca
+atcttggggtcgtctatcgcctgaagctcgtaaatccttccatcttaaacgattacatat
+tatagacttgttcggggtagagatatcacagttgtgcaaacattgtaaatcgatactagt
+ttatgttggtagtctagttgcttttaccattccccgaaaaacttgatctactatttcgac
+aacagtaaacttgaactaggtaagtgaaaacagagaatgcctcatagtgccactatttgt
+ccactatatgtaagtgtagctttacataatccactatgactgagatcattacggcctagg
+aaagcagcgtagaaaaaaagggcccggatattacgactgtaactataaaactagttactg
+gtagcgcgccatgtatagatttgttttaccggttgtggttgcgttaacgaatttcagccg
+cgaaaattgatccgttaaccagtccatctcgacttctataaaacgataaagtaaagttga
+tgttcagcctccttcttatggttgcatcgagagtacactactcagtgggaaatagatcgg
+ggttcctacttcagattgtattatctaggcaattgccgattgtgccatacctggataaaa
+taagctacctacatgtgatgcttatctattatcgtcatactaccttagggtgtcctgttg
+aacgctacattaatctttagccgtttgagatgttccaatggataggagtctaacgcatga
+tgaagtttaggaaggcagagcatcccactaagtatgtgacagtgtatttcgaaacgagac
+gttataaatagaaaaaaggtccttctggttctattctgctgaactattgaatggaaagat
+tggttgacctacgtactatttgcttgaagtcatcaatttgacggggtgagagacatatgg
+tgcatactttacggactctatattttagatcagaagcttagcagtcttctctacaccccc
+tcacgacataattgcttttaagaatctatgtttgattcctctacgggaattcggatccgt
+tcgcatgtgcggtttatctaaaccaggggacatatgttcagctaaagcatacgaacactt
+tgctaactagacgtatgtatagtagctataaatcccgacgatatttacaaaaagaaatga
+gactcaaatatatacatagcgaccctacacttattcgcaccctgatctaggcgatcctag
+cacccacacccgaaagtgagcactagtgtcttccgtattaaatttactgcagttgagatt
+ttagttgtctactaaggattactctaacccgtaataaggatcaagactcggtactagctt
+tactatcattccctatgtgttttcctaactcacaagggtacgtaccagcctatgtaatta
+caataatgataaagacacaaaggaagtaactttacaaatgagtctccagttacactagct
+tagtccctcccatcttgctttgaagtctaaatacgcaatctctgaggatatacagcagaa
+gaacactcataacgttggagtccaagaattagactcatagggcccccaacatttaatatg
+tactgtgagtttgaaggtgttctattgttaattcctgctcttgatacatgacacgtactc
+cgtgtttaaggcttcggactgactttctttcataagttgagcaacgaaaatttcagaatc
+gataagttggattcactaactaatacggctgattgaaaactccactccggacctatatgg
+tcgacctttatacgtaaccgatataaaacttataggctggtatatcgagccttcctagcg
+caatttcggatggggtttcttctactactcaacaacggaatagtctttgtttagtaaacc
+agagctcaggacgcccaatacgtaggagagcgctgtggagcatgtgtcattatggactgg
+agcactcttaaatcactctgcgtgtgctaaacgatagatcataacatgtcctgagtaaat
+tttcttgatacgtcgcaatataccgttattagttaaacgttctcatccgtcatgcgtgaa
+atacggctgtcgtgctcagatatactattagcgactcatctcgcctaacacgcacacgta
+taaactcggaatgactgccgctcttacatattagaaatacagactacaccacggaagcat
+tgggtcattctcaaccgctgtataaaagatgattagtcttataataagattaccaaagag
+gcagaatcatgggtagtaaatctattattcaagtgattaccgtcgtgtaggcagggagtg
+aggacgagatggtactcaggacaaatattaaccggacgaagtggtttacgtcgtactttc
+actattagtagtaaatacaaggtaacaccggggaatagtactaaatataatgatatctat
+cttcgggagaacgagtcgtctattgctttgaacattctcaaggcgtaaaatgtgctgact
+tatagcatgatacaaccgattgttacttttgtctattcaaaagattgaatagttttttat
+acaaaagccgcatacttatgacggctagtatacagtttcatcccctagcatcaatgctat
+ggacagtattgaacttataggaaattcttctaatagggcaaatccgtcgtgatgcctatt
+ttttttcagtcacatcctcaaatggcactagtattgtcgggatcccattaacaggctcaa
+ccacgagctcacgcgaggacatgtagtccgtatctttaacgaagcgacagcgacagaact
+cccatggataaccaattataaggcccgtaatcctctagacatcgtttaccaataaatccg
+ctttctccgtaatcatgttgaataccccagagtagtccagatgataaccgatgaaacaca
+agtctttctcaatgcacttacggtgaacttattaccgccaacgtagctcatcaaggttgc
+gacatctagttgtgtgtttgcgacgagcccagcgaacttcatcaactttcgtatattcaa
+cgccttgtaattttactttaagacgcctggtgatgtagattcttagataatcagtttgtt
+atcggctgtactttaccataatttcacaggtttcaggtcaagaagattatagctgtatat
+acagttccatgctcggtgcacagaaacgtgatcggataataatcaatcgcttatgtcgtc
+tttaggcgtatccaatacatgccccgataccgcagtgtatttcgacatgtaggtataccg
+tcgcatttgagctcgagtcaggacgtcagctagattagattccttaatagaatataccga
+cctctagtccgaactaaactatagataacgccaacttcaggttaattgtctagtcgtctg
+tttgcagatgggattcttagatgagtgagtatcggccatattggttcgagcactttagtt
+tttgatgcataggatatgcaatgtatagctgaaagtactttatctgtttcaaactcacat
+tgattaaaccggtaaacctttaaagactacaagaaaatattcagtgagggcaattttgtc
+aatcacaatcttccagctagagatacttcacaatttgtcttgaggctacgcaacattaga
+cggattttcgcgttttattgaaataatcgaggggcccaagagtatccatagttcattttg
+taagatttctttacaggcttattacagcttcttcagactcctacatgcttacgagttata
+tgctagcatgtgaacaatagattaatatacaggaaaacgtacattgagagagatgaccct
+acacagcgcaaccgttgagtactttcattaaagggtaacgctctcgagacagcatcctta
+agatggccttattgtcaaatcatttgcagaagtacgcaagatccctaaccaacgtagaag
+aatccctacaaacacatgagacgcggtgaaaatagacagggtgttagtattcaatcttcg
+gagtatcaatttcgccaatcttggtgagaaagcataccctttcttcagagaaagaagatc
+aatcataacactatctttaacgaggtacgcacgcgcatcattacctgcctccatggatct
+ttaggatagcggaaagtattggcagcgtattgtgatttcgttcctactttatcaatttca
+cattcatatacatgtcttttatcaaaatcgccaataagataggatgagctatattagatg
+ctagtagagttcgcgccaacatcatcgataggaatactcaggacagcgtgataggacttt
+tcaatccctaatactctctataattataactctctcttaagtttggaggcagtaacgcgc
+tctatataatcagtttgctgcaccattcttcagcctctgatacatacaaataaattccac
+agcagtaagagggtttaattgagacatcttgggaacttaggattttactctaacatcacc
+gaaacgattattggataccgtacctaaacgaactttctcaaggcagtaatataggacatc
+cgcaataacacaaatgctgcctccccaggagttatgtcttcctggaggctatatcttaca
+cccactcactataggcaaactaaagtttaaatgttgattgtctaaaaaaaagatagataa
+gagttggccggcgtagcacatgcgaaagtgaatcgtaagctataattctctggacttgaa
+gttctgtcctgttcctctgcaagaaacaaacttcctttaaagctatttacgacgcacatc
+tcagcaagttataaacatgttggaagtttctagtcggaattcccaaagaacggatctatc
+taatgcattcctacatttttcctgtctgccgatggtgccatcctattcaaagaatttctt
+aaaagtagattaaatgggacttttaacaatgagtaaccttacgcctctaagggttcctcg
+agtgccatacaccagtcaggtccgagccacatacacggagaacattctaacatagcattc
+tcaactcgatcatttgcaggttacttctttcctatcctagtgctaaaaatcatacttgca
+atcccatagcacggattaagaacctaagaaacaattcagtaaaacatgttcgaattcttg
+gtatgggaacatcattgcagctatggtctaacgcattaatgtttgggtacatcttccatc
+atataaacaggaagagtctgacgacagggagtgcttgcgatcatgtctatcattgtgaaa
+tcaaattgtagctcacatgtcgtctatgagagcgtgtatccgataagatttagaaaaata
+gaagtcgtataagatctcactgaacttttgaatgaatgtgaagcatatatgatctgcttt
+aataaaactttatccataggatacgtttccaaatcaattcaataattattagtcaaaata
+gataaggatgaacaacctgaaggccgatcggacgtagaaagtggtcccatcactttgagt
+tgatattgttgaaccacacgttattatggttttcaaacagtctcaggatattgtatatac
+agataatccgataccagttgtctgacgcccctcttacgtaccccaccctttgtgacgttt
+aaagcagttgttcagtattttaaactaggcggcaactaatttggaaagaagcacagtgga
+tatgtctaaattcttgttattcaggcctgaatttaatacaccgcatagttaacttcgcgg
+tagagttgttcatcatgcctcctctaagctaccacttctatgatacaccaatagttgttc
+tacggaatctgataattggccaagtcataaacttccgctgcgttcaacccccttgctcga
+atatccaactcgaaaagacagccttttggtgtccggaacaaatcagttacttcttttctg
+atgttaattctctgtggtcagatacagaccaaaaactccgcggatttaccatcctccaag
+aacaaatttgcatcaacatagcattttggctacatattctaagtctcaatagtttaggtt
+ttcaactacattatcccaacattaggattggaggaataatagctgggtaagtccccttgc
+gtctacaatcgactattttttatgaatatgcttctgccgcacctatggttattaaaaaag
+tcatgactttgaagaaccctgaaaagatagatgaatcaggtgtaatggcagcagccaaag
+agcatataattagcaacactctaagaacattatagatatgatgatagcgatcgtcatgat
+gttatccggtcacaatagtagcttcatcagctaattcgttttgccagtggtgacttgcgc
+tggaagaatcgttatacggtcccttccctcttgatacggtgggggcttattcaaccgcgt
+ggattgggttgtcatacttgcattaaacgatgtaaaccatctagtagtcaactatactaa
+atcacaaaatagtgatcaatacatacccgcttcatggttttaaccatttaattgattaaa
+gatattccgctaagaaccattatctacctaaactgatcgccgtatcctagtagtttgaaa
+tttgatgtaccgtaatgatcaacgaagtaaaacgttatattgtatgtagaataataggtc
+ttggagctaaatgatgtgattggtagtgaagacttacccttacaactttaccggtttctc
+ggaagaatatactagagaatcaatgcatgggctacataagcactttagtctaatgagata
+aaaaatacacgagtcttccatcatgaattttttgtcgaaaaactcgaacctggtaattta
+aaccatatatctttatgtcgtcaataactctcatatgttttatataacttcccaatcacg
+acttgtaactgcttgttcgactgagctgtttgagctatgaggccgggatccggttgagct
+acatctatttgctacaagaaaaatgaaagcacatttgttgggagttctggctacactcat
+agagaaataagtggcccgagtgggtgcggcctgcctccatattcaagtgtatcttaaacc
+aagtggttccaacgctcgcgctaaagaattaaagcctttatttcctccacggagtagccc
+gtaatccggttcgaaagagaccattgaagttaattttcatatccagtgaagtttaggcac
+aagcatgtgttctgccacatgcctcaaagcgctcttcaaccaagatatgattcatcctaa
+cttcgatgaatgcgtctgtaacataaatatagaaggaatgattcggcgagttaattttcg
+ccttctccaacatggcatccctacgttcgttataaggaccatacatgtaggttttaaagg
+tttgcggttaatcgatatttacatcatagaaattctatagtcaaatttacaagactctag
+atactcactcgttgcagccggctaggaagcgctttgtaccttacttcccttttcgttgcg
+taatatgaatttcatatagtaagttcaaggcactcatacctccgtgaagagggtagatag
+actattaaagttgtttaatagtacgtattgatggaaatgacccgtaggagatttaccact
+caatccacaagattcgctgctgtgcattatcaaaacagtgcatgtcgaaacatgggttgg
+gtccttcaaacacgaatccaggtagagatacctttgcaatttttcgatgaaggcgaccga
+gataaatgagctataacactgtatgtcttttgattgctataaaacacagaaacggatatt
+aatttaggccgtaaccaacatctgttatttgacatagaacagatggtcctttacagcgta
+ttccggccttaatattgaggtccagtgtattgtcctcctttaaagaagttgattgtaact
+gacttaaataagacatgtcacccattcactgggttgcaactgctggccctttttgtccat
+cgcacgctaatgtgataacagtaccgccctcacacctgcgtttaaaagacataaatgtcg
+ctatgaaggttattcattaattttagctgttttcttagaaaaggtaaatttaaaattgaa
+aaggctagaaaactaaagttacgacaaatgtgtttgtcaagtaggcgggcatcattgaga
+ttgtaagaaataaagccataaccagccccggaatagaaaatgttaaggaaaggcgatctt
+ctttgaattcttattgtcaagtgcagtcatacgttcttatcagaggacattgcaataaaa
+tctaacaccctcccttgtgtggttgggccatttgtacttcgaagcgtccaccatgtgcag
+aggataacggaatgtggttccgtcccataaacgatcattctcgcccacttagtggcgcgg
+taaatcgctctcatagaggtaactggcctgtaatgtccaatgttaggctaccttctccaa
+ctttagtacaacgaataatgtccgattaacaaggagtcaatttgtcatgaccagttcatt
+caggtacttgtatctatacggacgcgttccagagtagtatttgaaattttgaggttctac
+tgataagtttagctatcgctgtatgtctgaataagaatttaatgtttatcttcgataaat
+aacaattaacaactcctaggtgatacactgtgaagtctgctgttccccaaattacatatg
+ctattttgttcacataccatgaagttaagctaagtgctctataatggcataaacggttat
+caaactagctcgaatttcttttattacgccggaagcggattaactgctgtagatcaaaca
+cgttaggatagtgtcgttttcatatatatctaaattcggtctaacatgcattacccatgc
+ttgataacgtagcacttcgcagtctaattatgtaatgtccgtttaaccaaactttaaaaa
+agtttatctatcaccagtgatgcctcatcgtgactacccggatctttagcctttagggtc
+taaacagaactaatattactacgtgtcatactccggagcttaaccaggtgaaacttattt
+gttaaccaaatttagtgacagggtagaaatacgtatcaaattaacccagcaatacaataa
+gcatgaaaataattgtaatcgggtttgggccggaatcccgcttggcgaaaacttaatgac
+atagtgtgatgcattttgcactggattgagccacaaactcaactagcattatgctcaata
+tttggccagtgttctacggtttgaaatttataaaggccgcgcaaaagtcttgtagttaca
+aacgcataaatctcgaacgtaataggtttaattagaacatccgtaggatttctgtttata
+gtagatttatactaaatgttctgattagattctgacggccttacccatacaattaataaa
+gacgaatatattagttatagtttactatccaaataaattaagcgaatcgaaataaactgt
+cacgatactgggcagttatcaacttatcacttatacagttcggacactctatattggtct
+gtgagtactctatcaaactaactcataagttaactgcgcttccattaaatttcaatacgt
+tcttgtgctgtgtacaaacctataatcgaataaatgacacatatggagatgcataataaa
+aaaaacggctccatatttctcgttaatcgggcattcttaaggaggagcatctcaccaaaa
+ataacgttcctgataagtcttaactattagaccgtcttcgggaatgaacgaaacctcaag
+ctagcatggtatagttcttgatagcgcgtaaattctgataatactgggcggacagctgga
+aattagttgccagtgcacctacgcaaatagtttacataaatcaacgggctccgaacgtaa
+atacaaagggttagttacatcgcaacaagatgaaaagcatgtatgtctaccgtcatccgt
+ccctaacaaacataaaggtggtgaagaatctcgtaggtcaactataactccatccttgaa
+gcaactactccgcgtccgtgtgcgtagttcgcaacgagaacactactgaaaaaagctaaa
+caactctcggtacaaatgcggcttgtgtcgataaagttggtggtagtgcacggaataaca
+taacaaggaatattatttattcaaattttttgtgactgttatttgttttctgcctagaat
+gtaaggatgtgttttttgtgacctgatagttacgcttatttcaggtccacggtgcgtgag
+agtgtgtcctataacggcaggggagcgaagtagtgtcctttagactattcaaggtagaat
+tttgataacgctctataaaaggtagaaaatcatgattgagcaataagaccccaacttatc
+aaaaaaggagttctcgacagcgcgtgtacagtccctataacggctgtatttcctgtgtca
+caacaccctcccatcgcactcaaaatgtagatttatgatcagacgctaacttgttcttag
+agaaaaatacacgggatactctgtgcaacgatttcattaataaggtgcagcttgggactt
+ttttggccgtaggctttattaacattcacagtaggtagcgagacttcctatgaaccaatc
+atgccacgcgttttaacgtttcaaatataagctaggaagcgtttgccaggacttctataa
+tgcaccgttttttttagtacttccttactagccttagtttatgttagagtctttccaatt
+acaaaggattgaatagccaaaatttctacaattctcagcgaacgccagcttaatctaaac
+acgagcttcaaatattctacatatcggcaggagtcaatatataaatatgaaaatcgtacc
+atcctcgtacttttagaccaaacgtcttcggataattaaatcctttttcaattaccacag
+tacgtgcattagaactactgctatgaaagtaaaccttgaaatatagtcctcaagagcgta
+tccaagtacattgcacgtgtatacagtcgtataaacgagttgatgttctgacgctagagc
+ttaccattcgttaaacagataactaaaatttaatggctgagtgacttagtgttttcgaca
+aacgtcgcggatgtagactattgtttataagcaatttttaaaaacatatgttcaaaacgg
+tatgggatatgtcgaattccacaggggtttatgtaccatagaagtatgtataaggtacta
+aaggtttaaatctgtgatattcggttcggtgaaaatcagactagtcacacttagtgtctg
+taaattagattgggtgaaggtaagcgatcccgaactctacaaggcatgggatgagattct
+accgactccggataacactttacgatcgcgcataactctagctcttagataagtttaact
+tgtcgatctcataaacagttcaaaatctgcgatttattgtatcaaatccatcctctatct
+tctataatcatctgaaccgcgatacggcactatgagccaagtgaagattgaatccaagaa
+agctataattggtttattttagtccatttaaattaagtccggtataagtgctctgtacaa
+tatgcagtctcatgggcatatacgttaactaccttttgatacttcgaattggtaaaatat
+cgactatcgatttgcagtaaaaggtgtagagtccaattactctttcctgttacatacgat
+ctcttagtttggacaactagcccatgatggcgctcctctagcgcatgaacctactttata
+attacatctttatcgatgaatttttttagactgcggaggccttgagttttaacagggctg
+ctaaatttcttaagcgattagacggtagcgtcgtacgctacttgcttggaacaggcaccg
+aaaatattgatctactattgcgtcaactctattctgctaatagcgatggcaaatcacaga
+agccctcttagtgacaatagttgtcaactatatctaagtcgacctttactgtatcaacga
+tcacggagagaattaccgaatacgaaacctcaggactaaaaaacggaaaggatttgtcga
+cggtaaatataatacttgttaagggtagcgacacaggtatactttgggtgtaaacgtggt
+gcttcccggaacgattttcagaccagaaaattgttccggtaaccaggaaatctcgtctgc
+gttaattcgtgttagtaaacttgatcttcagactccttcttttcgttgcagcgagactta
+aattatatctgcgaaatagtgccccgtgcatacttcagatggtaggagataccatttggc
+ccattgtgactttacgcgattaattaaccgacatacatctgttcctgagctatgatcgtc
+tgaataaattacggtctcctcttgatacctaatggtttctggagacgtttctcatgttca
+aatggatagcaggagatcgcttcatcaagtttagctacgcagagcatcaaaatatgtatg
+ggaaagtcgatttccaaaccagaagggataaagagaaataacggacttctccgtagatta
+gcctgatattttgatgggaatcatggcggcacatacgtaagagttgcgtgaacgaatatt
+ttggacggcgggagacacatatcggccattcgttaaggtctctatattggacatcacaag
+cttagcagtatgagctactaacactcaagacattattgattttttcaagatatgtttcat
+tcctctaccgctattcccatacgttcgattcgccgggtgagcgaaaccacgggactgagg
+ttaagctaatcaataacaactcgttgcgatagagacctatgtatactagagagaattccc
+caacatttttacaaaaacaaagcagactaaaatagatacagtccctccatacaattagga
+ccaacatgttattgccgatcctagcacacacaccacaaactcagaacttctgtcttacct
+atgaaagggtctgcacttctgattgtacgtgtctaattagcattaatattaaaactaatt
+aggataaactataggtacgagctttactataagtcactaggtgttttccgatcgaaaaac
+gggaccttcaagccttggtaagtacatttaggataaagaaaaaaaggaaggtacgtgact
+aatctgtctaaactgacaatagagtagtacctacatgcttcatgtcaagtcttaatacgc
+aagcgctctcgttatactgctcaacaaaactcataaagttggactccatcatttagaatc
+atagggaccaaaacatttatttgctactgtcactttgtaggtgttctattctgaattcct
+catattgatacatgaatcggaatacctgtggatcccttaggacgcacgtgctttctttac
+gtcagaatacatattgtcagaatcgagaagttccatgcaattaagaattcgcctctttga
+aaactcatatccccacatatagggtccaccgttattcggaaacgatataataattattcc
+agcgttgagcgtcccttaagagcgcattttcgcttggcctttcttctacgactctacaac
+gcaagtggctgtgtggagtttaccacagcgcagcaccccatagaactacctctgagagcg
+cgagatggtggcagtatgctctgcagctagcgtttagaacgcgcccgcgcattaaccagt
+catattaaaatggactgtcttaattgtcggcattaggagcaatattaactgatgagggta
+tcggtcgcagaagtaatgacggaaatacgcctctagtccgcagagatacgattacagact
+cagatcccctaacaagcaaaacgattaaatcggaatcactccccctatgacatatttgaa
+atacacaagaaaccacgcaacatgtcccgcattctcaaccgcgctttataagatgttgag
+tctgagaattagatgacctaactgcaagaatcatggcgagtttatctagtaggcaagtct
+gtaccctagggttcgaacgctgtgacgtcgtgatcggtctaaggacttagatgataacca
+agaactggtttaccgagtactttcactattaggagtaattacatgcgttcaccgcggaat
+acgacgaaattttttcatatctttatgagcgagatcgtgtcgtctttgcattgcaacagt
+cgctaccagtaattgctgatcaattatagattcattatacagatgcttacttttctctat
+tcaatactgtcatgagttgtttttaaataagcaccagaattatgtcgcctagtataatct
+tgcttccacttgaatcaatgcgatggacagtattctactgattgcaaagtagtctatttc
+ggcttagcagtacgcatgcctatttttttgcaggcacagaataatatgcaactaggattc
+tcggcatccaattaacaggctaaaacaccaccgaaagacaggtaatctacgaagttgatg
+tttactacagaaagcgaatgatatcacttggagaacattttagatgcccccttttaatct
+agactgagtgtaccaatatatcaccggtctaccgaatcagcttgaataaaccactctagt
+actcatgataaccgagcatacacatgtatttctcaatgcactgaaggtgaactgtttaca
+ccataccttgcgaatcaacgtggcgacttatacttctgtctttgagtacagcacacccta
+atgaatctaagttagttgttgatacgaattgtaatttgactggatctcgcctcctcatct
+agattcttagagaagatgtttcttatagccggtactgtaactttattgatctggtttatg
+gtaatcaacattttacctctatttaaacgtccttgcgccgtgcactcaatcctgatcggt
+ttagattcaagcgattatcgagtctggaggccgagaaaagaaatgcacagagtaagctct
+ctattgcgacatctacgtagaaactcgcatttcagatcgagtaagcaactctcattgtgt
+tgattcagtaatacaagattacctacgcttctacgaaatatactatagatttagcctacg
+tcacctttagtgtcgagtcggagctttgaagatcggatgcggtgtggactgtgtataggc
+aattttgctgcgagctcgtgacttttggttgatgtcgatatcaatgggatacctcaaacg
+tctttatctctggataactcacattgagtataccggtaaaaatttattctattcatctaa
+atagtcagtgagggctagggtcgcaatcacattaggccacatacacatacttaacatgtt
+ctattgacccgacccaactttagtagcattgtagccgtttatgcaaatatgccaggcgcc
+aaacactagccagagggcattttgttacatttatttaatcgattattacacagtcggaac
+acgcctacatgcgttcgacttatttgcgacatggtcaacaattcagtaatttaatccaaa
+acctaaagtcagagacatgacactaaaatcacattaaggtcagttagtgaaggaatggct
+aaccagctagagaatgcatcattaacaggcacttattgtcaaatattttccagatctaag
+caacatcacgttaaaaagtacaacaatcacttaaaacacatcagtccaggtgtaattaga
+aagccgcttagtaggcaagcgtaggagtataaatgtagacaatagtcgggacttagcaga
+cactggatgcagtcatagaagatcttgcataacacgttagggttagagctacgaacgccc
+atcattaactgcctaaagcgtgcgtgagcttagcgctaacttttccaacacgtttgtgat
+ttcgttcataatgtatcaatttcacagtcatatacagggagtgtagaaaaatcgcaatta
+acatacgttgacctatttttgttcagagttcagttagagcctaatgattcgagagcaata
+atcaggacagcctcataggaagtgtcaatcacttagaagctatattattataaatcgctc
+tttactgtcgtcgaaggaacgagcgagagagaatcagttgcctgcaactggcttaacaat
+atgatacataaaaatattttcatcaccactaagacggtggaattcagacttattggcaac
+ttaggatgggactattaaataacccataagatgttgggataaagttacgaaacgaaaggg
+atatagcctgttagataggaaatccccaataaaacatagccggcctccacagcagtgatc
+tattccgccacgcgatatctttataccacgcaatataccaataataaaggttaaatgtgg
+ttgcgatttaaaaaagatacatatcagttgcaccgcgtagcaaatccgtatgtgaagcgt
+aacctagaattatagcgtctgcaagttctctaagcttcctctgcaagatacaatatgact
+ttttagcttttttactaccaaatctcagaatcttagaaacaggttggtacgtgctactcg
+gaattcccaaagtaccctgctatatatgccattccttcattggtccgggctcaccatggg
+gccatcatagtaatagaaggtagtaaaactagttgatttccgacttttaacaatcactat
+cctgacccagatatgggttccgactggcccttactccagtaagggcagacacacagacaa
+cgagaacttgataactttgaattctcaaatcgatcattgcaacgtgacttatttactagc
+ctactcctataattcatacgtcaaatacatttcaacggaggaagataataagtaaatatt
+cactaaataatggtcgaaggagtcctttgccaacataagtccacatatgcgctatagatt
+ttttcttggggttcatattcaataagataaacagcaagagtatcacgtcagcgagtcatt
+gagatcttggctagcattgtgatagcatattctacctaaatggtagtctagcacagagtg
+gataagatatcagttagatatagacaagtactataacagatctcgcttcgttggattgta
+tggctagctttgatgatatgattttataaaaattgatccagacctgacctggccaattat
+attcattttttatgagtaaaaatagataaccatgaaaatactcaagccccttaggacgta
+caaagtggtaacataaatttcaggtgttattctgcaaccacacctgttttgggttttcaa
+aaaggctaagcagattggttttacagataatccctgaacactggtatctcccaacgatgt
+cgttcccaacccttgctgaccttttaagctctgctgaagttttgtaaactaggcggaaaa
+tatgttcgatagatccactcgcctgaggtagaaattcgtcttagtaacgcctctttggat
+tacacagaatagtgtactgacacgtacactgctgcagcagccatacgctaacattaaaat
+tcgttgagtctacatttgttgttattcggattatgttattgggaatagtatttttattcc
+cctgcgtgaaaccacatggatagattagcctactcctaaagactcccttttggtctacgg
+ttcaattctcttactgagtttatgttcgtaattatatcggcgcagtgaatctcctaatta
+tcaccggagttaccagacgccatgaacttatggccagaaacattgcatgtggcctacata
+ggattagtatcaagagtttacgtttgcaacgacatttgaccaacttgaccattcctgctt
+gtagaccgcgggaactcccctgcacgcgactatagaagttggtggtggatgtggcttatg
+ccgcaaatatggttttgaaaaaagtaatctattgcttgatacctgaattgagacatgtat
+aagggctattgccagatgaaaaactgcatataaggtcaaacaatataagaacattataca
+taggatcttagcgttcctcaggatggtatacgctataaagtctagcttcagcagctaagg
+agttttgccagtgcggacttccgctggaagattaggtttaaccgccctgacatcttcata
+aggtcgggcctgattcaaacccctggagtgccgtctcatacttgaattaatcgatggaaa
+acttcttctagtctaatattattattaacaaatgacggttcaataaataacaccgtaagg
+gtgggaaactgttaagtgatgaatcattttaacctatcatccattagctacagataatga
+taccccgatccgactagggggtaagtggttgttccgttaggataaaccatgtaaaacgtt
+agagggtttgtagattaattggtattccagataaatgaggtcagggcgagtgatcaatta
+cactgaaaaattgtcagcttgcgcggtagttgttaagacagtataaatgaaggggattca
+gaagcaagtttctcgattgactgaatttataaaccagtcgtcaatcatgatttttgtgtc
+gattaaagcctaaatggtaatttaaaccattgatatttatcgagtctataaatatctttg
+gttgtatattacttcacaatcaccaattctaaatgattcttccactgtgcgggtggagat
+atcaggacgggttaaggttgacctacatcgttttgatacaacaaaaatcaaagcacatgg
+ctggggacttctcgatactatctttgagatagtacgggcaagagtgggtgacgcctccct
+acattttcaagtctatcggataacttctcggtaaaacgctcgcgatatagttttaaagca
+ttgatttaatccacgcaggagcaagttttaccggtcgaatgagaaaattcaacgtaagtg
+tcatatccagtcatggttagccaaaagcatgggttatccaaaaggaataaaacagctctt
+caacaaagagatgaggcttcataacttcgatgaatgcgtatggttctgatatatagatcg
+atgcatgaggacactttattttagccggcgaattaatggaatccatacgttacttatttg
+gacatgacttctaggtgtttttgctgtcccgtttagcgatatttacagattagtatttcg
+tttctcatagttaattgtatctagatactaactcgttgaagacgcataccttgccatttg
+tacaggacttaactgttccgtgcgtaatttgaatttcttataggttcttcaaggcacgaa
+tacctcactcatgaccgttcatactctagttaaggtcgggaatactacgtatgcagggaa
+ttgtaacctaggagatttacaactctttaaacaagagtcgctgaggtccaggatcaaaac
+actgaatctcctaacttcgggtgcctccgtaaatcacctagaaacctactcatacatttg
+caattttgagatgtaggcgaaagagagaaatctgctttttaacggtatctcttgggattc
+cttttaaaaacacataacgatagtaatgtaccaagtaaccaaaagctgggatgtgtctgt
+gtactgatccgccgtgtcagagtagtccgccatgaatattgacgtcaaggctagtgtcat
+caggtattgatgttcattgtaaatgaaggaatgaactaatgtcaccaagtaaagggggtg
+aaaatgctccccagggttctacagacatagagatggtcagaacacgacccccctctcaac
+gcagtgtatttgaaatatatggacatatctaccttattctgtaattttagatgtgttctg
+tgtataccgatattgataagtcaataggcttgattacgtatcttaagacaaatctgtttc
+gcaagtaggaccgcatctttcagattgtttctttttatgccataacctgcccaggaattc
+aaaaggttatcgatacccgatatgctgtgaattattattctaatggccactcattcctgc
+ttatatctggaattggcatgaatatcttacaacctaaagtctggcgttgcgccagttcta
+cttcgtaccggacaccatctccagtcgttaaccgaaggtgggtacgtcacataaaagttc
+attagaccacactttgtgccgacgtatatagatatattacacgtatagggaatgttttct
+cctaggtgacccgaccttctactaaggttgtacatcgtataatggcccattaactacgag
+gaaagtggtattgacctggtaatgcacgttcttcgatatataccgacgaggtaaagtcta
+ctattgcaaagtttgacgttatactgataagtttagatttccctggatcgcgcatgaaca
+atgtatgcgttatctgccatatataacatgttacaaatccttggggatactatcgctact
+atcatcggaccaaaattaaataggctagtgtcttatcagaacatcatgtttaccgaactg
+atctattttccaatttaagctgatattacgtccgcgtatttattttagttccccggatga
+cgattatctgagctacatcatacaagttagcatactcgccggtgcattgatttcttattt
+cgctatatcttcaagttcacaggcttcatatagttccaattagcagtataattaggtttt
+gtaactttaaccatactttataaaaggttatattgcacaactgatcaagcatccgctata
+acccgagctttaccagttagcggctaataacaaataagatgacttcgtgtcatacgaccg
+tcatgatcatgctctaacttaggtgggaaccaaatttaggcaatgggtagtaataagtat
+aaaatgataccacatatactataacaatgaaattatttgtaatccggtttgccaacgtat
+cccccttcgcgataaattaatgacatagggtcatccatgtgccaatcgtgtgtgccaaaa
+tctcaaattcaattatcatcaatattggccaagtgttataagcgttgaaagtgatatagg
+ccgccaaaaagtagtctacttaaaaaccaatatttatcgttcgttattgctggtagtaca
+acatcacgagcatttctcttttgagttgatttatactatatctgctgatgtgattatgtc
+ccacttacccagaatattaagaaagtcctagattgtaggtatacttgactataaatataa
+tttaagactatacaaataatctggctacattatgccatcgtagaaactgataacgtagta
+acgtcggacactagattttggtcggggagtaatctagcatactaacgaatttgttaaatc
+cgctgaaagtatatgtcattacctgcttggcctgtcttcaatacgtttagactattaagg
+actcatttcgagatccagtattaattatacgcatccatatttatactgaagacggattga
+gttaggacgacaagctaaacaaatattaagttaaggattagtattatattgtagaaactc
+gtcgggttggaacgattcatcatcatagaatgcgttacttattcagagagacttaattcg
+gttatgactggcagctcacctggaaagtaggtgaaaggcaacagaagaatattgttgact
+gaattctacgggctacgaacgtaattacaaagcggttcgtaaagagcataaagatcaata
+caatggatctctacagtattacgtaaataacatacataaacctggtgttgattcgactag
+ctcatagattaatcattaattgaagctacgaagacgcggaagtctgcggagtgagcaaac
+agtaatcgactgataaatgcttataatatcgcgcttaaatgccgcatggtgtacattaac
+gtgggggtagtcaaaggaatatatttactaggaatattagttatgcaaatgttgtgtcaa
+tgtgatgtgttttatccagacattggatgcatggctgtgggggcacaggatacttaccat
+tagttcacctacaagcggcgtgagagggtctcagttttagccagcgcagagaagtacggg
+cctttagacgattaatgctagaattgtcataaacctcgtgaaaagctagttaataatcat
+ggtgctagaagaacacaacttttctataaaccagttctcgactgacagtcgtaactcact
+atatcgccgctttgtactgtcgcaaaaaaacctcacatagaaagaaaaatctactgggtg
+catcagtagagatcgtgttctgagagataaatacaccggatacgatctgcatcgagttca
+tgtattaggtcaagcttgggactgttgtgccagtagcattttttaacagtcaaagtaggg
+tgagacacgtcatatcataatatatgccatcgaggtttaaagtttatatgataagctagc
+atgcgttgcaatcgtattcttgaatgctccgtggtttgtactaattcctttatagactga
+gtgtatcgtacactcggtacaattacaaaggatggaagagcaaataggtcttcaattata
+acagtaccccaccttaatctaaaaaccagcttcaattagtattaatttcgccaggagtat
+atatataaatatctaaagactaaaagactcgtacttttacaacttacgtcgtagcataat
+taaatcatgggtaaatgtcatcagtaagtgcattagaaatactcctttgtaaggatacag
+tgaatgtgtctcagcaagtcagtagaaatggaaattcatactcgattaaggcctataaaa
+ctgttgttggtatctacagagtgattaaaattagtgaatcagattacgaaaatgttttcc
+cgctcgcacttacgcgtttagacaaaagtacaggtggtacaattggctgtagtagaattt
+tggtataaaataggtgataaaccggatgggtgtgggcgaattcaaaagcggtttttgttc
+catagaactatgtagttggttataaaggttgtaatctcggagattaggttagggcttaat
+cagaatagtaacaatttctctatgtaaagtacagtgggtgatcgtatgagttcacgaact
+cttaatgccatgcctggacaggataaacaatacgcatataacttgacgatcgagcttata
+tcgacctatttgagaagtttaacgggtcgatataatatacaggtcttaatagccgatttt
+ttctagaaaagcaatcctatatcttagttaatcagatcaaccccgtgaacgatatatcag
+caaactgaacattgtatacaacattcctttttgtccgggtggggactccatttaaagtat
+ctcacctagaactcagcggtaatagatgcagtctcttgcccagttacggtaactaaatgt
+tgatacttagaattgctaaattttagtctagacatttccaggtaaaccggtagacgacaa
+tttctctgtcatctgtcataagatcgcttagtgtgctcaaattgcaattgagggccctac
+tatagacaatcatcagactttttaattaaatagttttccatgaatgtgttgtcaaggcgg
+accccttcacttttatcacggctcataaatgtcgtatgactgtagtcggtagcggccttc
+gagtcttcaggggaaatggaaaagaaattaggcttctaagatggactataatcgattagg
+ctaattccgttcgcaaatcacagaagcaatcttactcaaaattgttggaatcgatagcga
+acgcgaccgtgaatgtttaaaagtgctcgcacagaattacccaatacctatcatcacgac
+ttaaatacccaaagcagttgtagtcgcgtaatagattaagtctgaagcctagagacaaag
+ggatactgggcggggaaacctgctccttcacggtaacatggtaacaacagaatttggtta
+aggttaaaacgaaatatactcggagtgaattactgttaggtttcgtcatcggatcaataa
+gtagtttccgtgaagacactcttatattagatctccgaaattctgacccgtgcattaggc
+acttggtaggagattccatttggaacttgctcaatgtaagccagtaatgttccgaaataa
+ttcgctgcaggagcgaggagccgctgaataaaggaccctcgcatcttgttaccttatggt
+tgagggtcaccgttctctgcgtcaattccagagctggagatacattcatcaacgttacct
+acgcacagaataaaaagatcgagcgctaactcgttttcctaaacacaacggatttagaca
+aattaccgaatgcgccggagagtagcatcttagtgtcatgcctatcatggcggctcagta
+cgaagagttcaggcatcgaatattgtggtagcccgcactcaaagttccgccattaggtaa
+gctatatattgtggtcagaacttgaggacaactatgagctactaaaaataaacaattttg
+tcatttgttctagatatgtggcattcatcgaacgcttgtaccagaagttacattcgcagc
+gtgagcgaataaacccgaatgagcgtaacattatcaataacatatagttcagatagagaa
+cgaggtattcgacagagaattacccaacattggttattaatctatgcagaataatttaga
+taatgtcactacataatattaggaccaaaaggtgattccccagaagacaaaacaataaac
+aatctcacatattcgctagtacctatgtatgggtatgatcttctgattggacggggataa
+tttccaggtatattaaaacttattaccataatctagacctaagagaggttatataagtaa
+agagctgtgttccgatagaaaaacccgaccttaaagacttgcgaagtaaattttgcttta
+acaaaaaaacctacgtaagggaatattctgtataaactgaaaagtcaggtgtaactacat
+gagtcatgtcttcgattaattacaatgcgatctcgttattctgatcaactaatatcataa
+actgccactacatcttgtacaatcattcgcaacaatacttttatgtgctaaggtcacgtg
+cttcctctgctatgctgatttaatcagattcataaaggaatacgaataactctggatcca
+ttaccacgcaagggatttatttacggctgattactttttggctgttgacagaactgccat
+gaaagtaagatgtcgcatcttgcataaataatagcacctaatatagccgacaaagtgatt
+ccgataacagattttaagttgtccagccttgagactccatgaagaccgcttgggagcttc
+cccgtgattagaagaatctaaatcccaagtggatggggggagtttaaatctcagcaccaa
+caaatagtacttcctctcagagcgcgtcatggtcgaaggagcctatcctgatagaggttt
+gaaagcgcacgcgcatttaactgtcatattaaattggaatctcgtaagtgtcggcagtac
+gacaaattttaactgatgtcggtatacggagaagaaggaagcacgcattgaagcagctac
+gcagaactgagaagatgacactctaagatacaattaatacaaaaacgttttaagcccaat
+ctatcaacagatgtaagatgtctaatacacaagaataaaaccttcatgtcccgatgtata
+ataacagctttatttctgctggtcgaggtgaagtagtggaaattactccatcttgctgcg
+cgtctttatagtgttggctactctgtaaccgacgcgtccatccctctctcctagtgatcc
+gtatatccaattagaggataaccaacatctgcgttaccgacgaatttaaatttttcgact
+atttaattccgttcaaacccgtattcgtagtaagtgtttcatagatttatgaccgacatc
+gtgtacgagttgcagtgcatatgtagataccactaattgctgatctaggatacatgcttt
+ataaacatgcttacttggctattttatttactgtcatgtgggggtttttattttcaacaa
+gtatgtgctaccattggataatctggcttcaaattgaagatatgcgttccaaacttgtct
+actgtttgctaagtaggagttgtcccattagaactacgcagcacgtggtttgtgatcgaa
+aagaataattggcaaatacgaggctagccttcaaatttaatgcagattactcctcagaaa
+cacacgtaagcgacgaacgtgatgtttactacacaatgcgtatcatagaaattcgtgata
+atttttgttccaacctttgaatctagactgagtggaaaaagatttcaccgggataccgtt
+tatgctggttttaaaaactcgtcgaatcatcttataactgcattcaaatggatttctcaa
+tcatctgtacgtcaactgttttaacaataacgtcagaataaaccggcacaatgagacggc
+ggtctttcactacaccacacccttaggattataagtgacgtgtggattcgaattctaagg
+tgacgggatctacaagcctcagctacattaggtctgaagatctttcgtatagccgcgtat
+gttactgtttggatatgggttatgctaatcaacagttgacagcgagtgaaacggccttgc
+gacctgaaatctttacggttaccttttgattcaagacaggatcgacgatggaccacgtga
+aatgaattcaaaactgtaacatcgcttgtgcctcagcgaccgagtaacgacaagttcaca
+tcctctatgcaactatcattgtggtcattaaggtattcaagattaactaagagtcgacca
+tatattctagagttttacaattaggaaccgttagtctagactaggagcgtgcaacatcgc
+aggaggtgtggactgtcttgacccaagttgcctgacacatagtgtcttttgcttcatgtc
+cttagcaatgcgatacctcaatcgtagttttatcgggataaataacatggtgtttaaccc
+tattaatggtttctattaatctaaattgtaaggcagcccttgggtcgaaagcacattagg
+ccacatacacagtatgaaattgttcgagtgtccagaccataattgactaccatggtacac
+ggtgttgctattatgactcccgcaaaactcttgacagagggaattttggtacattgatgt
+aatcgatgatttaacagtaggaactagacgtcatccgttagactgagttccgacatgctc
+aaattgtcaggatttttatccaataactaatggctctcacatgtaaataaaatcacatta
+acgtcacttagtgatggattcgctaaacagatagactatcattcatgaactggcactgtt
+tcgattatatttgcaacatcgaacatacttaaagttaaatacgacatcattcaattaaaa
+aaattcagtacacctctaatgagtatcccgctttggaggaaagagtagcactttaaatgg
+acaatttaggccggactttcctgtaaatggatgaagtcattgtacagcttgaataaatcg
+ttagggttagtccttacatccaccatatgttaatgaataaagcctgagggaccttagagc
+taacttgtccaacacgttgctcatttacttaataaggttgaaatgtatcagtaagtgaca
+gcgagtgtagattttgaccatttaactgaccttcacagttttgtcttcagacgtcactta
+caccataatgatgacagagcttgtagatgcacacactcattcctagtgtaaatcaagtag
+tagctagattattataaagagatattttctggcgtcgaacgtaacacagagagagtataa
+ggggcatgataatggcttatcaatatgtgtaagaaaaagtttttaatatcatctaactcg
+gtggaatgcacacttatggccaactgaccttgggacgagttaagataccataagaggttg
+cctgtaagttaagataacaaagggatattccatctttgtgtgctaagaacctatttatat
+ttgcagccataaaaacctctgtgctatgcagccaccagagttatttatacaaagaaagag
+accatttagatacgttaattctgcttgcgatttattaaacagacatttcacgtccaacca
+ctacaaaagccctatcgcaagacgatcattgtattatagcctatgcaacgtagctaagcg
+gccgaggaatcataaaatatgaattgttacattgtttactacatatgatcacaatctttg
+taaaaggttcgttcgtgatactaccatgtacctaactaacctgagatatatgcaatgact
+tatggggtcagcgcgcaacatccgcaaagcatagtaatacaaggtaggaaaacttctgga
+tttcccaaggttataatgctctatactgaccaagagatccgttacgactcgcaatgaata
+ctctaagggcactcacaaagaaaaccactaattgataaatttcaatgataatatcctgaa
+ttgcatcgtgtatgagttacgagaagtcgcatttaatgaattagtcatagaaatgtcata
+gcaggaacataattactatattttaacgatttaatcgtagttggagtcctttcccaaatt
+atgtcatcagttccgatttagatgttttcgggcccttcttagtaaagaagttaatatcca
+agactagctcctcacccacgcatgcacatattcgcgagaagtctgatagaatattcgaca
+gaaatgcgactctagctcacactcgttaactgatcaggtacttatagacaagtacgttat
+cagatatcgcttcggggcattgttgcgctacctttgtgcatagcagttttgaaaaattgt
+tcaagacctgaacgggaaaatgatattatttttttaggaggaataatacagtaccatgta
+aatactcaaccaccttacgtacttcttacgccgaacatatatggcacgtgttattcggct
+aacaaaactgttgtgccttttctataaggataagcagattcgttttaaacatatgacctg
+taaactgggatctacaaaagaggtacttaaaataaattgcgcaacggtttagatctgcgg
+atctttggttaaagagcaccattagatgtgccatacttcctatcgcctgagcgagaattt
+agtctgaggaaccactcttgggatttaaaacaattcggttaggacacctactcggcggat
+gaagcaatacgataacattaaaagtcgttcagtctaattttggtcgtagtacgatgagct
+gatggccaattgtatttttattaacagcactgaaacaaaatggagactttagactaatac
+taaagtctcaatgttcgtcgaaccttaaatgctcggaatgaggggatcttcggaagtata
+gcgccgaagtgtatctcattattataacaccagtgtacagacgacatctaattatggcca
+gaaactgtcattgtgccattaagaggattagtagatagtctggaccgtggaatagaattt
+tgaccaaattgaccagtcctgcttgtagacagcgcgatctaaactgcacgagaatataca
+agttggtggtgcttgtggctgagcacgctaagatgcgtttgtttttacgattctagtgct
+tcttaacgcaattcagtcttctagatccgctattccaacatcaatatctcaatttaaggt
+caatatatataacaaaattagacagagcagctgacacttacgaagcatcgtagaaccgat
+atagtcgaccttatgatgatatggacgtgtccaagtccgcacttccgatgcatcttgacg
+gtgaaccgaaatgaaatcttcattagggcccccatgtgtcaaaccactcgagtcccgtct
+ctgaagtcaagtattactgcgaaaaattcgtctactattagtttattatgaacttatgac
+gcttaaataaattaaacagtaagcctgggaaaatgttaaggcaggaatctttgtaacagt
+tcataatgttgctaaagattatcagaccccgtgaagacttcgggctttgggcttcgtacc
+gtagcataatacatctatatagttagaggcttgcgtgttgttgtgctattccacatatag
+cagctctgggcgactcttcaatgaaaatgaaaaatggtaacctggcgacctacttgttaa
+gtcagtttaattcaaggggattaagtaccaagggtcgagtttctctgtatttattatact
+gtaggcaagaagcttttttggcgagatttaagacttaagcctatggtaaaaatttgatag
+tgagcgactatagtaagagatttgggtggttagtaattaaaattctcctatgctaaatca
+ggcgtacaatctgagggtgcacatttctcgacgcgtgaaccttcaccgaaagcgtgtgga
+ttatacaaatttcaaacatattggcggggcacttatccataatagatttctgtttgtacg
+ccaaactctgcctcacccctccataaattgtattggctagaggttaaattctccgtaaat
+agagacacatatagttttatacaattgtttgaatcaaagcacgagaaacttttaaccgta
+cattgacaaatgtcttcggatggggcagagcatctcttcgtgacccaaatcaatcgctga
+gcaataagcaagaaaacacagattatacaaagagatctggatgaagatattcgtgcaatc
+actatcgttatgttagagagttccatgcatgaggactcgttttttgaccaggagaattaa
+gccaagaaataactgacgtatttccaaatgaattctacgtgtttttcctgtcacctttag
+ccagtgttaaagatgactatggagtttcgaataggttattctatagacattataacgagt
+ggaacacccataccttcacagtgctaaaggtaggaacgggtacgtcaggtagttcaaggg
+attttaggttcttaatccaacgaagaaataacgcatcacccgtcattctattgttttcgt
+cgggattacttagtaggcagggtattctaacctacctgagttacaaatctttaaaaaact
+ggccatgaggtcatggtgataaaatctgaatcgcctaaattcgcgtccctaaggaaatat
+actagaatccgtctcagaaagtgcaaaggttgacttcttcccctaacacagaattctcag
+ttttatagctatctagtggcattcctttttataaaactttacgtttgtaagggtccaact
+ttacaaaagctcggatgtgtatgtgtaatcttccgccgtgtaagacttggaacccatgta
+tattgacggcatggcgtggctaagcaggtattgatcttcagtgtaaagcaaggtatgttc
+taatctaacaatgtaaagccggggattagccgccaaaggggtctaatgacatagagatgc
+tctgaaatcgtaccaactataaaagcacgggatttgaaatatagcgacagatcttccgta
+ttctgttagttgacatctgtgctgtctttaccgattgtgatttggctttagcagtcattt
+agtttcgttactcattgctcgtgcgatagttccaccgaatatggcacattcgttcttttt
+ttccattttactgcaaaccttttcaaaagctgatcgataccactgatgatggcattgatt
+agtcgattggcaactatgtcctgcttatatctccaattgcattgaatatagtaaaaaata
+aaggctcgccttcccaatgggctacggagtacacgaaaaaatcgcaactcgtttaaccaa
+gcgccgtacctaacatataagtgattgagacaaatagttctccagacgtattgagatata
+tgtctcctataggcaagcgtttctaattgctgaccagaaattagaattaggttgttaata
+ctatattcgaccattttattccacgaatgtgctattctactggtattgctccgtatgcga
+tatataaccaacacggaaagtcgtcgattgcaaagtggctccgtagaatcatttctggtc
+atttaccgggagcgcgcttgaacaatggatgcggtatctgccatattgttattgttaaaa
+agacttccgcttactatcgcttcgatcatcggaaaaatattaatgaggattgggtcgtat
+aagaaaatcatcttttcagttcgcagatttttgccaatttaaccggttatttcgtcagac
+ttggtagtgtagttacaagcatcacgattatatcagctacagaattaaactgtcctgact
+cgacggggcagtgtgtgagtattgcgctatatattcaaggtaacaggaggcatataggtc
+atagtacaaggataatgaggtttgctaactttaaaaattattgatttaacggttgattga
+aaatctctgcaagatgacgctagaacacctgatgttcaagtttgccgataataacatata
+agatgaattactgtctttagaccctcatgttaatccgctaacttagggcggaaacaatgt
+taggctatgcggagtaagtactatattatgataccacatagaatttaacattcatatgat
+gtctaatacccgttcccaaccttgcaaccgtcccgattaattaagcaattacggtcatca
+atgggccaatcctgtctcaaaaattatcatattcaaggttcagctattttggcaatgggt
+gagtaccgttcttagtgatttacgaacccataatctaggcgacttaatatacaagattta
+gagttacgttttccgggtagtacatattaacgaccatggatcgggtgaggtgttgtatta
+gttatctgatcttgtcagtagctcccaatgtcccagaatattatgtttctactagagtgt
+tcgtatactggaatttaaatattatgtaagactagacaaattttatggatacattaggcc
+atcgtagaatatgatatagttgtaacgtccctctatagattttcggagggcaggtatatt
+gcttaataaagatgttcggaaatcagcggaaaggatttgtaattaactgatgcgcagcgc
+ttaaataagtttagactattaagctatatgttcgacagcatgtagttttttttaccagaa
+agtgttatactgatgacccatggaggtagctcctcatgataaaaatattgttacttaagc
+attactattatagtgttcaaactagtaccgttgcatactttaagaatcagacatggcgtt
+tcttatgcagacacacttttttagctgttgacgcccacctcacatccatagtaggtcaat
+cgcataagaacaatattctggactgttttattacccagaagaaagttttttctttccggt
+tcgttaagacaataaagatcatttcattcgttctcttaacgatgaactaaagtacttaaa
+gtatccgcctcttgtttcgactagcgcatagtgtaataattaaggcaagataagaagaac
+aggaacgcgcacgtcggagataactctaatagtctctttattccgtttaatatagcccgt
+aattgcaccatgcgctacagtaacggccgccttcgcaaacctatttatgtaattccaagt
+ttaggtatgcaatggttggggcaatgtgaggggttttatcaagactttcgttgcttcgcg
+gggggcgcaaagcagactttacagtagttaaccgaaaaccgcagggagtcgctctaagtg
+ttaccaacccctcactactacgcgaaggtactcgattattccttgaatgggctgaaacat
+cgtgattagcgtcttatgattcaggctgatagaagaaaacttattttctatattccacgt
+atacaatcacactcgtaactaaatagttcccagcgttgtaatgtcgctataataaataaa
+atacaaagaaaattcgtctgggtgcataagtacagttagtcgtctgtcacataaataatc
+cgcagtcgatctcattacaggtattgttgttggtcaaccttcgcaaggtggtccaagtag
+cattgttgaacagtaaaactaccgtcacacaaggaatatcataatagatgccatacacgg
+ttttacttgatatgtttacagtccttgagttgcaatcgtagtattgtttcatccggggtg
+tgtacgaagtaatttagacaaggtgtgtagcggtcactaggtaaaatgacttaggatgga
+tgagcatttaggtattctatgataacactaaccatcatgtttctaaaatcctcaggaaat
+ttgtattattttaccaacctgtatttatagaaagtgcttttgacttaaagaagccgaagt
+gttcaaattaaggagtacctgattgaaagaatggggaattgtaatctgtaactcaattac
+aaataagccgttctaaggattaaggctttgtgtctaagcaactcacgtgaattcgaaatt
+catactcgattaacgactttaatactcttctgcgtatctacagactcatttaaattacgg
+aatatgttttcgtttttggtttccagctcgcacgtacgcgtttacaaataaggacacctg
+gtacaattggctggagtacaatgttggtttttatttgctgattatcccgatccctgtggg
+cgttggcataaccgggttttcttcaagactactttcgtgttgcttatatacctggtaata
+tcggtgagtagcttagggcttaatcacaatactaacaagttctctatggattggacaggg
+cggcatccgttgactgaacgatctattaatccattccctgcactggataaacaagaccca
+tttaaattgaccatagagatgttagcgtcatatttctgttcgtgatagggtacatatatt
+ataaacggattatgagcagtggttttctagaaaagcattcatagttaggagtgtatcaga
+tcataccactgaaccatagagcacaattctctactggctatacttcattcctttttgtcc
+gggtggggacgaaatttaaaggttctaacctagaacgcagagcgaattgatcaaggcgct
+ggccaagtgaacggttctaaatgttcttaatgagaattgcgtattttgactattgacagg
+gcatcgtaaaccgctactcgacttggtatctgtaatctgtatgtagatagagtacgggcc
+tataattcaaattcagccaccgaagattcacaatcttcagacgtttgaaggaaagaggtt
+tactggtatgtggtgtcaagccccacccattctctgttatatccgagcattaatgtagtt
+tcactgtactacggtcacgccgtagagtcggcagggcaaatccaaaacaatttaggctga
+gaagtggcactataatagtttagcctaagtcccttcgctaataactcaacaaagatgacg
+caaaagtcggcgaatagattgcgttcgcgtaagggtatcttgaatactgatagctctcat
+ggtaccaagaactttcataacctctttatttaccaaacctgttctactagcgttagtgtt
+ttagtctgtagccgacacaaaaaccgagaatggccggcgtaaccggcgcctgcaagctaa
+catgggatcaaaactattggcttaacgtttaatcgaatgagactagcactgtattactct
+ttcgtttcggcagcggatcaataaggaggtgacggcatcactctcttatagtagatatca
+cttattctcacaacggaagtaggatcttccgtcctcattaaatttgcaactggctcaatg
+taacactgtaatgttaacaaagtatgagctgaaggtcagagcagacgatgtagtaaggtc
+cctcgaagctgcttacagtatccttgaggctcaacgggctatgcggaaattccagacctc
+gagttacattatgaaacgtgtcattccatctcattaaatagttcgtgccctatcgccttg
+taatataaacaaccgtttttgtctattttcccaaggagaaggagagtagcagcttagtgg
+cttgcctatatggccccctaagtacgtactcggcacgcttagaagattgggctaccccgc
+actatatgttcccaaagtaggtaacctagatagtgtcgtatgaaattcaggtcatcgatg
+agagtataaaaatatacaattttggcaggggttatacattgcgggcatgaagagtaacat
+tggacatgaacggacattcgaaccctgtgagtttaataccctatctccggatcattataa
+agtaaatatacgtcacttactctacgtgcgtttagacagtctttgaaactaaattggtta
+tttttctttcatctagatttgtctgtatctaactaaattatagttccacataaagctgat
+tcaactgaagacataaatataaactttctaacatagtagcgaggaaagagctatgcctag
+catcggatcatgcgtccgcgagtagttcctggtagagttaaaagtttttccagaatctag
+accgaacacagggtagtgaacgaaagtgcgcggtgaacatacataataccgaacgtaaac
+aattccgttcgtattgttgctgtatctatatttcctacgtaaggctatttgatctataat
+atgaaaagtcacgtcgaaataaatcaggaagcgcttcgagtatgtacattcagatctcct
+tagtatcatcaaattatagattttacggccacgaattattggtctagatgtcccaaaaat
+aatttgatgtcagtagcgatcgtgcttcctcggagttgaggttggaagaagagtcattat
+gctataccaagaactctccatccagtacctagaaaggcaggtatgtaccgctcattaatt
+ttgcgatcttgacagatctgcatgcaaagtaacttgtaccagatggcttttataatagaa
+actaagtttcccgaataacggtgtacgataacagatttttaggtgtacagacgtctgact
+caatgaacacacattgggacctgccccgggaggagtagtagataattaccttctccagcg
+cgggtcttttaatatcacaacataaaaatactaattaatatcacacaccctcatcctcga
+tggagcctagcatcatacacgtttgatagacaacgccaattttactgtaatatgatattc
+gaatctagtatgtggacgctgtaccacattgtttaaaggagctccctttaccgacatgaa
+cgaagcaagctttgtacaagatacgaagaactcagtactggtaactataagagacaattt
+atacataaaagtgttaagaccattatataaaaagaggtatgaggtctttgtaactacaat
+aatacattcatcgaacgatggagaataacagagttatttctgctgctcgagctctagttc
+tgctaatttctcaatcttgatgccactcgtttgagtcttccattcgctcttaacgacgcg
+tacatccctctctcctactcttacctatatcctattactggttaacctacatctccggga
+aagacgtaggtaaagtggtccacgattgtattcacttataacacctagtagtactatgtg
+ttgctgagagtgaggacacacttactctacgagttcaagtccatatggacattacacttt
+ttcagcatctaggtgtcatgatgtattaacagccgttaggggctatttgattttatcgat
+tgtcggcgtgtgtattttcaacaactaggtgctacaattcgtgaataggcatgaaaattc
+aagattgcagttcctatcttgtataatctttcctttggacgagttgtaccatttcaacta
+acctgcaagtggggggtcatccatatgaagatttgccaaatacctggagaccctgaaaag
+tttatccagattaataataacaaacaaacctaagcgaagaacgtcagctttaataaacta
+tcactatcatagaaattcctgttaattgttcttccaaacgttgaatagactatcacgggt
+aatagattgaacacggagaacgtttatccggcttgtaaaatatcgtcgaatctgctgata
+actcaattatattcgatggagaattcatatctaccgcttagcttttaaaaattaagtcag
+attattccgccacaatgagaaggcgcgagtgcactaatcaaatcacttaggattattacg
+gacgtctgcattacaatgctttggggtagggttatacaagcatatgattctttaggtctc
+ttgatcgggcgtttaccaccgtagcttaatgttggcatatccgtgatcctaatattctgt
+tgtcagcgtgtgtataggaatgcacaacgcaaatctttaagctgacctgttcatgaaaga
+caggagacacgaggcaccacctcaattctatgcaaaactctaacatagcgtggcactatg
+agtacgtgtaacgacaaggtctcatactcgatcctaagataattctcgtctggaaggttt
+taatctttaactaagagtagaacttagtttattgacttttacaattaggatacggttcgc
+gactctaccacagggcatcatacctggagctctgctatctcgtgaccaaagtggcagcac
+acatagggtcgggtcctgcatctactgagcaatccctttaagcattcctagtttgagagc
+catttagatattgctgtttaaaccgattaatggtttctattattataaagtgtaacgctc
+ccattcgggacattgaaaattagcaataagacaatgtatgatattcggcgagtctcaaca
+acattatggtctaccatgggacaaggggttgatatgatgaatccacaaaaaatagtcaaa
+cacccatggttcgttaagtgagggtatccaggtgttataaggacgatctagaagtattca
+ggtacacggtgttcagacatgctctaattgtcaggttgtttataatttaacgtatcgctc
+tctattctaaataatataaaattaaccgctcgtagggatgctttccagtaaaagatacac
+tatcattaaggttatgcaaatgtggcgatttgatttgaatcttagtacattcttaaactt
+aaatacgtattatttaaagtaaatatattatctaaaccgcttttgtctatccacatttcg
+tcgaatcacgacctcgttaatgcgacaatttacgaccctctttcatctaaagcgatcatc
+tatttcttctgattgatgtaatactgacccttactccgtacatacaaatgatggtaagca
+agaatgactgacgctcctgtcacctttcgtggcaatcaactggcgctggtactgaagtag
+cttgaaagggatatggatgtgtatgccaggcttcattttgacaatttttctgtcctgctc
+agtgttgtctgaagtcgtatcgtacacaataatgatgactctcattgtagatccaatcac
+gctttcctacgctaatgaaagttctagatagtgtaggtgttagacagaggttagcgccta
+catccttacacacacagtgttgaacggcaagcataatcgagtatcaatagctgtatgtat
+ttgtttggaatatcatatttctcccgcctttgaacaatgatgccaaaatgtcctgcccta
+gagttatgataaaataactgctgccctgtaacttaagtttacaaaccgatattcaatcgt
+tgtgtcctatgaaaatatttatatttgcaccaagaaaatcatctgtgcgatgaacaaaac
+acagtgatttataaatacaaagagtacatttagttaccggattgcggcttgacatttatt
+ttacagaattttatcggcaaaacacttcatatgaactatcgcttcacgataagtctatga
+tagactagcattcgtagagaacaggaagagcaatcattatatatgaagtgttacagtggg
+tactacatatgagatcattaggtctatatccggccttcctcataagaccttggaaatatc
+ttacatcagagatatcaaaggaagtatgggcgaacccagaaaaagccccaaagaatagta
+attcatcggacgtaatagtctggttttaactaggggttattgatatttaagctaaaagag
+ttccctgaacactcgaaatgtataatctatcccaactaaaaaagtatacctctaattcag
+aaatgtcattgagattagactgatgtcaatacgctaggaggtaagacaagtagaagtttt
+tgatttaggaattgaaatgtaatacctccatcttaagttctatattttaaagttttatgc
+ggacttcgagtaagtgcacaaatgatggcataagtgcccagttacatgtttgcggccccg
+tatgagtaatgatctgtttatcaatctctagctactatcccacgaatgcactgatgccag
+tcatggcgcttacattagtcgacagaaatccgacgatacctatcacgcgtgaactgttct
+ggttcttattcaattcgaagtgatctcagatacattacggccatgcttgcccttcatgtc
+tgctgagcagttttgttataggctgaatctcctctaagcgaaattgataggatttttggt
+ggtcgatttagtctgtacctgcttattaagattcaaaatgacctacttcttacgccgaaa
+tgatagggatcggctgaggaggataaatatacgctggtgcctggtatttatccagaacaa
+gttgcctgtgtatcagatgaactctaatctccgagataaaaaacaggtacgtaaaataaa
+ggccgcaaagggttacatctcaggatcgtggcgtatagtccaccattagttctgacttac
+ttaatatagactgaccgagattgtagtatgtggatccaagcttgccatgtaaaacatgtc
+ggttagcaaaacgtataggagcatgatcaaagaagagttaattaatagtactgcactata
+attgtcggcggagtaccatgagctgttgcccaattcgatgtttattaacagcacgcataa
+aaaatccagacttttcaattagaattaactataaatggtccgcgaaccttaaatgatcgg
+aaggacgggatctgccgttgtatagaccccaactctatctaatttttataacacctctgt
+aatcaacaaatcttattatgccatcattatgtcattcgccaagtaagtccagttcgagat
+tctctggaccgtgcaatagtattgtcaaattatggtaatggaatccttcttctaacaccc
+ttagaaaagccacgagaattgacaagttgggcgtgcttgtccaggagcaacataagtgcc
+gtttctttttacgatgatagggattcttaaagcttttctctattctagatcccagttgcc
+atcatcaatatctcaattgatgctcattatatagttcttatttagtatgtccagatgtca
+ctgaagatcctgcctagaaccgatattctcgacaggatcatcagttcgacggggcaaacg
+cacctatgcacatccatcttgaccgtgaaacgaaaggaaagagtcagtaccgacccaatg
+tggaaaaaaactcctgtccacgatatgtaggcaagttttactgcctttaattagtagtcg
+attagtgtagtttgatattatctaccttatagaatgtaaacagtaacccggccttaatgg
+tttggcaggattctttgtaaaagttaataatgttcataaactttatcagaaaacctgaag
+tagtccgcctttcgcctgcgtaacgttgcagattaattcgttttacggagtggcttgcgt
+cttgttgtccgagtacacatattgctcctctcccccactcttctaggaaaatcaattatg
+ctaacctgcagaccttcttctttactatctttaatgcatgcccagtatgttcatagggta
+gacttgctatctattttgtataatctacgaatgatgcttggggcgcgacttttaacaatt
+aagccgttgggtataatttgagagggtgccacgatagtaagagatttccggcgtgagtaa
+ggaaaatgataataggattaagcaggcgtaatagctcaccctcctcagttctccaaccct
+gaaccggctaagtatgactgtgcagtattaattttgaatacatattgcagcccctaggat
+acattatagatgtctctttcttacccaaactcgcccgcaccaagaaagaatgtggattcg
+attgaggttaaattagccggaattacagacacagattcttgtttacaattgtgggaagaa
+aaccacctcaaacgttgaaacctacattcacaaatggattacgttggggatgagaatcga
+ttccggtcaaaaatcatgcccggagcaataaccaagaattcacagaggattaatacactt
+ctccatgaagataggactgcttgcactatccttatctttgtgtcttccttcaagcaccaa
+tcgtttggggacaaccacaattatgccaagaaataacggaaggtgttccaaatctatgag
+tccgcggtttcatcgcaacgtttcactgtgggtatcatgactttggactttagatttggg
+tattctagagactgtagaaagactgcaacaacaagacattcacagggcgaaacctaggaa
+aggggaccgcacgttgtgctagggatgtttccttaggaatccatacatgtaagaaagaat
+caaccgtaattatagtgttttcggccccttgaattacgtgcatgcctttgctaaaagacc
+tctgggaaatagattgaatattctggacagcagcgaatcctgattatatctcaagcgaat
+atatgacccgcaagaaggatttatactagaataagtctaagaaagggcattgggtcactt
+cttccactaacacacttttatcagttttataccttgagagtcccatgcatttttatatat
+atttaactttcgttgcgtaaaactttaaatatgatccgtgctctatctctaatctgaaca
+acggtatcacgtcgaacaaatctagtggctacgaatcgcgtcgctaagaacggtttcttc
+tgctggcgttagctacgtatcttctatgctaaaaatgtatagccccgcattagcagcaaa
+accgggagaatcaaatacacatccgatgaaatcgtaacaaagataaaacaacgcgatttc
+tatgtttgccaaagtgattaagttgtatcgtaggggtcagcgctgatgtcttttcagttt
+gggttttggatttaccagtcttttagtttcggtactatttgatcgggacattcgtccaaa
+catgatggctcattcgttctttttttcaattttaatcaaaaccttgtatttacctgatac
+attaaactgagcatcgcatggaggtggagattcccatatatgtaatcatttgatatccta
+ttccattctttttagttataaataaacgctccactgcacaatgggagtaggacttcacca
+ataattagcatctactgtaaacaagcgccgtaacgaaatgattactgattgagaaaaata
+ggtctcaacaacttttgacagatatgtatccgatacccaagcgttgctaattgcgcaaaa
+gtaagtagaattacggtcgtattacttgttgccaaatggttattactccaatgggctatt
+ctaatccgatggatacgtaggagagagtgtacctacaccgaaactcgtagtgggcttagt
+ggctacgtagaagctgttcgggtcagttacagcgtgcgaccttgtaaaatcgatcacggt
+gatgaattattgttattgtttaaaagaagtcccctgaatagcccttagataatacgaaaa
+tttgttatgtccagtcgctcgtatatcaaaagattcggttaagttcgcagagttttgcca
+agtttacaggtgatttactaacacttgggagggtacgtacaaccatcacctggttagcag
+agaatgaattatacggtcatgtcgcgaagggcaagtgtgtgagtattgaccgagttatta
+aacgtaaatgcaggcatttacgtcataggacatcgagtttgtcctttgcgaaatgttaaa
+tttatggttttttccgttgagtgataatagctgcaacatgaagatagtaaaactgaggtt
+aaactttcaccatattaaattatatgttcaattacgcgatgtacaaactaatgttaatca
+gatttaggagcgcgcttaatatgggtccctatcccgactttgtacgagattttgataaaa
+aatagtattgtaaattcatttgatggcgtagaaccgggcaaaaccttgaaaaaggacaca
+tttaggatgctatttccctaagaaagcggaaaatcctggctcaatatttataatagtaat
+ggttaagattgtggcccaatcgctgagtacccgtcttacgctttttccaacacataatcg
+acgagaatgtatttaaatgtttgagacttacgttttccgcgtacttattattaaagtcat
+tggagagggtgtcgtctgggtgtagttttctcatctgctcaggagctaaaaatgtaaatc
+tattggttgtttctaattctgtcgtccgtgtaggctatttaatttttatggtacacttga
+atatgtttagccataatgtagccaatactacaatatcagatacttgtatacgacctatag
+acttttgccgaccgctcgtagagtgatttagaaagatgttcggatagcacagcaatcgtt
+tgcgaatgtaagcatgcgaagcgagtatttaactgttgactattttgctatatgttactc
+tgaatgttgttttttttaccagaatgtgttataatgatcaaccatgcacgttcctactaa
+tcatataaattttgttacgtaagcttttctatgatagtggtctaaagactacccttgcat
+actttaagattaagacatgcactttaggaggaactcacacgttttgagctgttctagccc
+acctataagccattcgtccgcaatcccataactacaatagtcggcaatcttttattaccc
+agaactaacgtttttatttcccggtacgtatcacattaatcttaatttaatgcgtgagag
+taacgatgaacgaaagttatttatgtttaagccgcttcttgagaatacagattactgtta
+gaatgaaggcatcataactagaacaccaacgcgcacctcgcacattactctaatagtagc
+tttattcagtttaatatagacagtatttgaaccaggcgctaatgttaaggcccccttcga
+aaaccttgttatgttattccatgtggtcggaggatttgcggggcgatagcgctgggcggg
+gatcaacaatttcgttcatgcgagcgcccccataaccagtaggtacagttcggaaaagaa
+aaccccacgcactcgctagaagtgttacaatcacatcacttcgtaccgaagggactactg
+tattccgtcttggggatgtaacagactgattacagtcttatgatgaagcctcattcatct
+aaaattagttgatttattccacggatactatcacactcctatagaaagagttaccaccgt
+gggaagctagatataataaataaaagacatacaatattagtatggctcatgatctacact
+tactcggatctctctttttttataaccagtagatcgcattacacgtattgttgttccgca
+tcaggccctaggggctcaaacttccatggtggataactaaaacgtccgtcactaaacgaa
+gatattaatagatgaaatacacgggtttacttgatttctgttcagtcattcacgggaaat
+cctaggagtctttcataacggcggtcttagtaggaatgtagtcaagctctgtagaggtct
+cgacggaattggtatttcctggcatcacaatttacctagtattggagatcacttaaaata
+atgttgagataataatcaggatatttctagtatgtgacaaacctctatttagtgattgtg
+attttcaattaaacaagacgtaggggtcaaattaacgactacatgttggaaagaaggccg
+aattgtaatatctaactcatgtactaagaagaagtgctttcgtttaaggctttctgtcta
+acattctaacgtcaattcctatgtaatactactgtaaccaagttattactcggctgcgta
+gataaagtctcatgtaaatgacggtttatctgttacttttgggtttcaacctagctagga
+cgccggtactaattacgacacctgcgtatagtgcagggtgttcaatgtgcctttttatgt
+ccggattataaccatccctctcccacttggaatatcaccgggttcttaatgacttagttc
+gtcttccttattttccgggtaagatcgctgtggaccggacccattttgatctagtctaaa
+aaggtatatagcgtttcgtctggcccgcttacgttcactgaaacttagattaatcaatgc
+actgcactggattaacaagaacatgttatagtgtactgacacatgttagactaagaggtc
+tgttcgggttagccgacttatatgtttaaccgattttgacaactgggttgagagataaca
+atgaagagtgaggactgtagaagatcttaaaactgtaccatagtgctcaattcgctaatg
+gcttgaattatttaattgttctaaccctggcgtcgaatttttttggttcgaaaatactta
+gcacagcgtattgttcaacgagatgcacaactgtaccgttagaaagcggcttaatgacaa
+ggcagtattgtgactattgacagggaatcctaaaaagctactcgaattggtatatggaag
+aggtatgtactgagaggtcgcgcctattagtcaaattctgccaaagaagagtcaaaagct
+taactagtttgatggtatgaggtttaatgctaggtggtctataccaccaaaaagtatatg
+ggatatcccagaatttatcgactttcaatcgtctaccgtcacgacgtacactaggcagcc
+ctaatccaaaacttttgaggatgagtactgccactattatactgtaccatttgtaactta
+cattttatatcttcaaagaggtagatattgtcggccattactgtcacttacactaagggt
+agcttgattactgatacctctcatggtaaaaagtaatttaagaacctatttttttacata
+acctctgctactaccgttagtgttttagtcggttcaagtcacaaaatccctgtagcgcac
+ccctataagcagaaggaaaccttaatgcggataaaaacttttgccggaaccgttaatcct
+atgagaataccactcttggaatcggtcctttaggctgaggatatagaacgaggggaacgc
+atcaatctaggttaggtgagagaactttgtatcaaaacgcaagtaccatatgccgtcctc
+agtaaattgccaaatgcagaaatcttacactcttttcttaactaagtatgagagcaacct
+cactcctgaacagcttgttacctaacgagaagaggctttaagtagcctggagcctcaacc
+ggatatccggatttgactctcatccacttacatgatgattacggtcattacatctcatga
+ttttctgagtgccctatagactgggaatttaatctaccctgtttctatttgttaacaagg
+agaaccactggtcaagatgacgcgcttccatttatgccaccataagtaagttctcggaac
+ccttacatgattggcctaccaacctatatatgtgaccaatgtacggtacatagagtgtgg
+cctatcatattcaggtcatcgagctcagtatttaaagattatatggtcgctgggggtatt
+cagtgcgcgatggaagactaacattggaaatcaacggaattgacaacacgctcactttaa
+taacctatctcaggataagtttaatgtaattagacggaactttctctaactccgtgtact
+aactctttgaaaataatgtgggtatttttatttcatctagatttgtctgtatcgaaagaa
+agtattggtccaaataatcctcagtaaaatcaagtcataaatataaaatttagatcttag
+gacagaggaaagtgctttcccgagcataggatctggcctacgccagtagttcatgcttgt
+gttaaaagttgttactgtttatagtccgtactcagggtagtgttcgatactcagcgggga
+actgacatattacactaaggaatcaaggcccttcgtatgggtcatgtttatatatttaat
+tacttacgctatttgatcgagaatagctatagtaacgtcgtaagaatgcaggatgcgatt
+cgagtttgtaaattcacagatactgtgtatcatattattatagatgttaaggcatagaat
+tattggtattgatgtacaaaaaattatgggtgggcagtaccgataggcattacgagcagt
+gcagcttggaagaactggatgtatcctataactagtaagagccttaaaggtactacatac
+ccagggatgttaccatcattaatttggccatcttcaatcttcgcaatgcatactttcttc
+tacaagatgccttttagaagacaaaataagtgtcaacaataacgctgtaacttaactctg
+ttgtacgtggaatcaagtctcactaaagcaactaacattccgacatgcaaacgcaggact
+actagattattaaattcgccagcccgcctcgtttaatataacatcataaaaattctaagt
+aatatctcacacactaatccgccatcgtccatagcatcagtcacctgtcttacacaaaca
+catgtttaatcgatgttgttatgccaagctagtttcgcgaccatgtaactaattgtggaa
+agctgctaccttgaacgacatcaaccatcctacctttgtacaacagaccaacatctctgt
+actggtaaatagatctgaaaagttataaatataactgttttcacattgatagaaaaacag
+ctatgtgctatttgtatatactataataaattaagcgaaacatggagattaaaacagtgt
+tttctcatcctccacctcttgttctgctaatttataattcttgatgccactcgtgtgagt
+cgtccattcgatcgtaaagaacccgacataaatagatacgacgctgaacgagatcctatt
+tctcctgaaaattattagcacggtaactcctagggatagtggtactagttggtatgaacg
+tataaaaacttgtactactttctcgggatgtgagggagcaaactattactcgaccagtgc
+aacgcattatcgacagtaaaagttttcagctgatacctgtctggatggattatatgcagg
+taggcgagagtggattgtagcgatgctcggcgggggtattttaaaaatctaggtgataaa
+agtcctgtttagccaggaaaagtcatcattgcactgcatatcgtcgattagctgtcattt
+cgtccactggtaccagttcaacgtacatcaaagtccgggcgcatccatatcaagttttgc
+aatagtactccagaccatgaaatggttatccagattaataataacttaatatactttcac
+tacatactcagcgggtattaaatttcactttatgtcaaaggactcttatgtggtcttcaa
+aaaggtctagagtctatcacgcctaattgtgtgaaaaccgagtaacttgatcagccttgt
+aaaatatagtagaatatgatgttaaatcatttatattccagggagattgaatagcttacg
+attagctggtataatttaactcacatgattaagcaaatatctgtaggaccgagggaaaga
+ataaaataaagtaccatgagttcggaacgctgcattacatggcgttgggctagcctgata
+caagaagatgagtatggagctctcttcatcgggacgtgacaaccctagcgtaatcttggc
+agatcccggagcagatgattatcgtctaacactgtctttaccaatgcacaacgcatagat
+ttaacctgaactgttctggattcactcctgactacagcctacaactcatttctatgcata
+actcttaaagacagtcgcaatatcagtacctctatacacatcggatcagactagatcata
+agataagtctcctctggatccttgtattctgttaagtacactacaaatttgtttagtgtc
+tgggacaattacgataagggtcgcgactagaccacagggcatatgacctccaccgctcct
+agcgagtctccaatctgcaagcactcatacgctaggggcatgaatcgactgtcaatgcac
+tgtaagatttacgagggtgagacccatttagatatgcctcgtttaaccgttttaggcttg
+ataggatgagtttgtcgatccatcaaattcccgacattcatattgtccaataagtatatc
+tagcttattcggactcgctaaactaaattatggtataaatgccgtcaaccggtgcatttg
+ttcaatcaacaaattatagtcaatctcccatggggccttatggcagcgtatacagctggt
+ataacgaccatatacaactatgaacggactagctgtgaactaagcagattattggatcct
+tgtgtataattttaagtttcgatctatatgctatagtatagaaaatgttccgatcgtacg
+cttcctttacagttaaacagtctatatcatgaagcttatccaaagctggacatttgatgg
+caatcttacttaattatgaaacttaattacctattattgaaagtatttatatgatcgaat
+aagatttgctctataaacaggtcgtccattcacgacctagtgattgcgtaaattgaccaa
+cctaggtaatctaaagcctgcatctatttcttatcattcatgttatactgacccgttctc
+agtacttaaaaatgatcgtaagcaagaatcactcacgctcatgtcacatttagtcgaaat
+aaactgccgatgggaaggaagttccgtcattgcgatatcgatgtctatcccacgcgtcat
+tttcaaattggttatctacggataactgtgcgatgaactactataggtcaaaattatctt
+caatctcattctagatcatataaagatgtccttcgcgattgatacgtctacagtgtgttg
+gtgttacacagagggtagcgactacttacttactaactctctcttgatccgcaagcataa
+gccaggttaaagtgctctatctttttctgtggattataatagttataccgccttgcatct
+aggtgcccattaggtaatgccctagtgttttcataaatttactcctgccatctaacgtta
+ctttaatttcccagattcaataggtctctcatttgaaaattgttatatgtcaacaaagaa
+tataatagctgagtggaacaatacactgtgagggagtaatacatactctaaattttcttt
+acggtttgcgcctgcacagttttttttatctatgtgatccgcataaaaagtaatttcaac
+gttccattcaagttaagtcttggtgacactagcattaggagagatcaccaagaccattat
+ttatttagctagggtttaagtcggttagaaatatcagataatgaggtctttatccggcct
+tacgcagtagaaattggaaatttcgtaaagcactgagttcaatggaagtatggccgaacc
+cacataatgcacaaatcaagtcgatttcttccgtccttttagtctcctgggaactacggg
+ttattcatagttaagctaaatcagttaacggaactagacaaatgtataatagttcccaaa
+tatatatctataaatcttatgcagttagggaatgcagatttgaatcatggcaatacgcta
+gctcggaactcaactacaagtgttggatgtacgaattcaaaggtattacatccttatgat
+gttcttttttggatacttttatgacgacttccacgaagtgaaattatgttcgaatatctg
+aacagttacttggttgagcccaaggatgacgaatgttctgtttataattctcgtcataat
+ataaatacaagcatatgaggccagtcatggagctttcatttggactaacatttccgtaga
+gtcatatcacgcctgtaatctgatccgtctttttctattcgaagtgttatcagatacatg
+acgcccttgcgtgacattcatggctcctgacatcgggtcttttaggctgaatctaatcta
+acccaatttgtttggattgtgggtcctccattttgtctgttaatgcttattaagattaaa
+aatgtactacgtatttagacctaatgattgcgatacgctgtggaccattaatataagctg
+cgccaggggatttttccagatcatctggcctgtgtatatgttcaaatctaatagccgaga
+gaaattactccgacggaaaataaaggcagataagcgtttcagagcaccatcgtggcgttt
+agtcaacctttagttcggaatttattaatatacaatctcactctttggacgagctcctta
+aaagatgcccttgtatatcatgtcccgtacctaaaagtataccagcatcatcaaagaaca
+gttaaggaatacgactgctctataattgtccgaggagtaccttctcatctgccaatagtc
+gttgggttggaaaacaacgcattaatatgccacacttgtcaattagaagtttctataaag
+gggacgagtaactgatttgagacctagcacggcagaggacgttcgtgtgacaacatctct
+ttataagtttgagataaaatcgctaatctacaatgattatttgccaatcattatcgaatg
+cgcaaagtatctcctgttcgtgattctagcctaaggccattactatggtcaaattatgct
+aatcgaagcagtcttctaacacccttagaaaagcaaacactattgaatactgccgccgca
+ttcgccagcaccaacataactgcacgtgcttttttccatgattggcattatgaaagattt
+gatctatgattcttaccagttgcaatattcaatttagcatgtgttcctaattattgtgtt
+attatggtctatctcatcatgtaaatgaagatcatgacgtcaacacagattctagtcagg
+atcatcagttcctcggggaaatcgcacctaggaacagccttatgcaaccgctaaacaaag
+caatgaggatgtaccgacaaaagctcgatttaaaagcctcgaaacgagatgtacgaatcg
+tttactgccttttatgaggagtcgagtactgttggttcatatttgctacatgattgtatg
+taataacgatcccgccctttatcggttcgatcctttatggcgataagttatgaatcgtca
+gtatctttagatcaaaaactcaactagtacccagttccccggaggaacggtcatgattaa
+tgcgttttacggtctcccgtccctcttcttgtcagaggaatcagtttcatccgatcccac
+tcgatgattggtatagctatttgccgaaaagccacaacgtattcggtactatcttgtttg
+attcccctgtatcttaattcgcgacacttgatatcttttgtgtttaatcgacgaatcatc
+ctgggggcgacacttgttacaattatccagttgcgtttaatggctgtgggtcacaagatt
+gttagacaggtcccgcgtgtcgtaggaaattgataattggagtttgcaggacgaatagct
+cacccgcctaagtgatccaaccctcatcaggataactatcactgggcagtattatttttg
+atttcatatgccaccccctaggagactgtagtcatgtatctttcttacccaatctagccc
+gaaacaagaaagaatgtcgattccagtcaccttttattagaccgatttacacacaaagtg
+tcttggtttaaaggctggcatgaatacatactcaaaagttgaaaacgacttgctctattc
+gattaccttcgcgatctcaatcgattacgctaaattttaatgcccgctgaaatatccaac
+atttaaaacaggattaattctctgatccatgaacttaggactcattgcacgtgacttatc
+tttctctcttaattcatgctccaatacggtgggctaaaccacttttatcacatgaatgta
+cgcaacgtgttaataagctatgagtacgcgggggcagcgaaacgggtcaatctgggtatc
+ttctattgggacggtacatttcggttttatagactatgtagttacacggcatcaacatgt
+aattaaaacggcgtaacctaggaaagccgaacgcaccttgggattgccatgtgtccggag
+gattacatacatctaagaaacattctaaactatgtatagtcgtttacgacccttgtagta
+cgtgcatcccttggcgaaaagtactctgggtattagagtgtatattatcgacagcaccga
+atcctcattttatagcttgacaatttatgacccgaaagaaccttttataagtctataagt
+atatctaacgcaattgcggcactgagtccactaactatctttgagcagtgttatacagtg
+agacgccatggaaggggtttatatattttactgtcgttccctaaaaagttaattatcaga
+cctgcgcgatctcgtagatgaacaacgcgatctagtcgaaaaatgcttgtggctaccatt
+ccagtcgagatcaaccgtttctgcggatcgcgttacattccttgcttatttgcgataaat
+cgatacaaccccattaccagaaaaacccggagaatcaattactctgcagatcttatacta
+aaaaagagattacaacccctgttctatgtgtcccaaagtgagtaacgtggagcgttgggg
+taagagcggagcgattttaactttcgcttttccattttccagtattgtactttacgttat
+atttgagcggcacattcgtcaaaacatgatccatatggactgaggtgtttaaatgttaat
+caaataattgtattttcagctgactttaaaatctgcagccattggaggtggagattccaa
+tagatgtaagcaggtgatatcatatgcaattcttgtgacttattaagataccagacacgg
+cacaatcgcagtagcacgtaaacaataatgacaatcgacggttaaattccgaacgtaaga
+tatgtttacggatgcactaaaataggtagcaacaacgtttctctgagatgtataagttac
+caaacactggagaattccgctaaactaaggacaatttccgtcgtattaattgttgacaaa
+tggttagtaatacattcgcagtggataatccgttgcatacctagcactgagtgtaaataa
+aaccaatcgactactggcatttcgggctaacgactagatgttagcctatgtgaaagcctc
+acacatgcttattgccttcacggtgagcaatgtttcttattcgttattagaagtcacctg
+tagagacagtagagatgacctaaatttggtttgtccagtcccgaggtgatctaatgatta
+ggttaacttagaacagtggtcaattggttaaagctgatttacgaacacttccgaggggtc
+gtaaaacattaaactggtgagaacagtatgatgtattcggtcatctagacaaccccatcg
+ctgggagtttggacagtgttatgattcgtaaatccaccatgtgtccgaattcgaaatcct
+gttgctccggggagatagggttaatttaggcttttttacggtgtggcatattagctcaaa
+catcaacattcttaaaatcagcgtaaacggtcaccagttgatatttgttctgctaggaag
+cgatgtacaaaataagcttaataagatttaggtccgaccttaatttcggtccatagcacc
+tctttctaagtgttttgcttaaataattgtattgttattgattttctgcgagttgaacac
+ggaaaataagtcaaaaaggacacttttaggttcatatgtaccgatgaatgcgcaatagaa
+tcgagaaatttttagattagtaatcgtgatgattgtggccaaatcccgcactaaacggct
+ttcgctgtttccaaaaaattttagtccactaggtatttaaatgttggacactgaacgtgg
+aagccgtcgtattatgaaactaatggcagaggggctcctctgcgtgtactttgagcagat
+gctatcgtcagaaaaaggtaaatcttttggttctttataattctggcgtccgtgtagcct
+agtgaatgtgtttggttcaagtgaatttgtttagccagaatggaccaattacgtcattag
+ctgttacgtctatacgaaatatagactgtggacgacccatcgtagagtcatgtagttaca
+tgtgaccttagaacaccaatcgtgtgcgattgtaagcaggacaacacagtattgtactgg
+tcaattggttcatagatctgactatgaatcttcgtttttgtacaacaatctcggtgaagc
+ttcaaaaagcctccttcctaataatcagttaatttttcgtaaggttcctgttcgaggtta
+gtcgtataaagacgaaacggccttaatgtaacattaactattccactgtaggtggatcta
+acaaggttggacatgtgctaccaataagataagaatttcgtccgcaatacaatatctact
+tttgtagcctatcttggattaacaacaacttacgttggtatttcaccggacgtatcaaat
+gattctgattttaatgactgagagtaaacatcaacgaatcttatgtatctttaagccgct
+gcttgacaagtcacattactgttagaatgaacgcttcattactacaaaacctaccaccaa
+ctcccacattaatattatactagatgtttgaagtttatttgacaaaggttttcaaaaagc
+acagaatcgttacgaacacgtacattaaattgttagggtattaattgtggtcggtgcatt
+tccggccccatagcgctccgcggggagaaactatggccttcatgacagcccccccataac
+atctaggtaatggtcggataactataaacaaccctctccagagaactgtgaaaataaaat
+ctcttagtacacaagcgtatactggtttaagtcttgcccatcttaaagactcttttcact
+attttcttgatgcctcattcttctaatattaggtgattttttaatccgagaatataaaaa
+gacgatagaaagtgttaaaacacggcgtagcgacatattttaaagaaatgaaatactttt
+tgactatccctcatgatctaaacttacgcggagctatctttttgtataacatgtacagag
+aattaatccgatgcttcttccgattaaggacatagcgccgaaaacgtcatggcggcttat
+cgatatcgtaacgcactataccaagtgattaagtgatcaatgaatacgggtttcgggatt
+tctgttaagtcatgcacggcaaatacttggagtcttgaataacgccgcgcgtagtacgaa
+ggttctcaagctcgcgtgacgtatagaccgtattgctatttcctgccttctcaattgtcc
+gaggattgctgataacttaaaataaggttgagtttttaataacgatttgtcgagtttggg
+aaaatcctcgtttgtgtgtttgtcattttcaagttatcaagaactacgggtataatttac
+gacgtaatgttggtttgatgcccgattgcgaatatcgtacgaatggtatttgtacaactg
+ctttcctttatcgattgctcgagaacattataaagtctattactatggattaagactgta
+tacaagtgtttaagcggagcccgtgataatctataaggttttggtacctttatctgttac
+ttttgccttgaaacatacatacgtacacgggaatatttacctaaacgccgtatagtccag
+cctcgtatttgggccgtgttttgtcagcattttaaactgaaagcgcccacttgcattata
+acccggtgcggaatctcttagtgactcgtcaggagtttacgcctttgagacctctcgaca
+ggacccattttgatctagtcgttataggtagagtgcctttcctatcgcaccattaccttc
+tagcaaacttagagtattcaatgaaatcatatcctgtttatactaaatgttataggctaa
+tgacacagctgacactaagaggtctcttcgggttacccgaatgagttgtttatacgatgt
+tgacaactcgggggagtcatttcaatgaagactgaggactcttgatcagattaaaacgct
+taatgactgataatttagattatgccgtgtattatttaagtgggcgaaccctcccctaga
+atgggtttcctgagaaaagtcttagaacacagtattctgaatccagatgcaaatcgctaa
+cgttagtaagcggctgtagctcttggcagtttggtcaatagtcaatcgcaatccgtttaa
+ccgtctactattcctagagcgaagagctatgttctgacacgtccccaatattaggcaaag
+gctccaaaagaacagtcaattgattaactacgggcttggtttctccgtgaatccttgcgc
+cgctataccacataaaaggatagcggtgataccacaagtttgcgacgttaaagcgtcgac
+cctcaacaagtacactagcaaccccttagcaattaattttgtccatcactactgccaaga
+gttgactggaccagttggaaatgacatttgatatattaatagagctacatattgtaccac
+tttactgtcacttacactaaccctagcgtgattactcatacatatattcgtaaattctaa
+gttatgatactagttttgtaaatttaatcggcgaagacacgttctcttgtacgagcttca
+actaaatatttcactgtagccaaccactttaaccagaaggataccttaatgccgatataa
+tattgtccaggaaacgttaatactttcacaagacaaagcttggaagaggtactttacgat
+cacctgatagatcgaccggaacgattctatataggtttggtctgagaaatttgtagctaa
+aaccatgttccataggaactcctctgtaatgggcaaaatgcagatagcgttcaatcgttg
+cttaactatctatcacagcatcctaactcctcaacagcttctttcctaaagacatcagca
+ggtaagttgacggcacccgataacccagagcacgattggaatctaatactctgtatggat
+cattacgctaagtaaatataatgattttctgactcaaagttacactgcgaattttatatt
+aactggttctatttgttaaataccacaacctctcgtcaacaggtcgcgatgcaagtgatc
+caaaaatatctaacttataccaaccattacttctggcgcagaaaaacatagatatctgaa
+caatcgaccgttaagactgtctcgccgatcttaggaacctaatactgctcagtagttatt
+gtttatttgggccatccccggattatgtcagccatggaacactaaaagtcctaatctaac
+ctatggacaaaaagctcacttttataaaattgctcaccttatgttgattgttatttgtcc
+gaaatgtctataactcagtgtactatctattggaaaattatggccggagttttattgaat
+atacttttgtatgttgagaaagaatgttgtcgtaataattatcagctggaaaatcatcta
+atatatattatattgagatattacgacagacctaagtgctttcccgtcatgagcagatgg
+actaacactcttggtaatccttctcgttttagttggtaatgtttagtctaagtaatatcc
+cgactcttacttactcagagcggaaatgactttttaaactaacgtttaaaggcacttagt
+atgcgtcagggttatttttttaattacgtacccttgtgcagagagtttagctattcgatc
+ctacttagtatgaaccatgagagtacaggttggtaattcacagagaaggtcgagaagatt
+atttttgatgtttaccaatactatgaggcgtattcatcgaaataattttatggctgcgca
+cttcacatacgcaggaagaccactgcagcttgctagatctggatgtatcattgtacttct
+aagagcctgaaaggtaatacattcccagcgagcgtaacagattgtatggggacatattca
+atcttagcaatgcattcgttcttcgaaatcaggcatttttgatgtcataagttctgtcaa
+ctataaccctggaactttaatctgttgttcgtcgaatcaaggatcaagaaagcttctaaa
+aggcccaaagcaaaacccaccactacttcagttttaaattagaatcacaccctagggtat
+tagataataattaaatgtcttaggaagagatatcaaaagatgcagacatcctcaagtgaa
+taagtctccggtctttcacaaacacatggttaagcgatgtggttttgactagagacgttc
+gccaccatcgtaatatttctggttacctgcgaacgtgaaccaaatcttacttcatacatt
+gcttaaacagtacaacttatctcttatcctatagagatctcaaaagtttgtatttttact
+ggtttcaaattgagagaaaaactgcgttctccgatttctatattattgtttaaatgatgc
+caaacatccagtttaaaacacggtgtgatcagccgactcagattcgtatcctatgttaga
+atgagtcatcaaactacggtcacgcgtacattacagagtaaactacacgaatgaaagaga
+taagaagatgaaagagttaataggtctcctgttaattatgagaaccctaactactacgga
+ttggcctactagtgggttggaacggatataaaattcgactaagttcgcggcatgtcaggc
+tcctaaatatgaagagaactcggcatcgaattatccacagtaatagttggaacatgattc
+ctctatgcatggtgtatatccacgtacgccagtgtgcagtgtagccatgcgaccacgggc
+gttgtgaatattcttcctcagaaaaggactgttgagcaaggaattggattctgtgaacgg
+aatatagtcgagtagatggaatttcctacactgcgaaaaggtcatagtaaatcaaacgcc
+gcgcgcagacatatcttcttggcaattagtactccactaaatcaattggttataaacttt
+tagaatatctttatataagttcactacttacgctgcgggtagtatatttaaagtgatgtc
+ttaggaatcttatggcggcggaataaacggcttgactatagataccctaattctggcata
+accctgtaacgtgtgaagcatgctttaatagacgactagatcagcttatagaatggatat
+gactgccacattgaagagattaacattagcgggtataatgttacgaacttgtttaacaaa
+atagctctaccacacacgcatagtataatataaaggtcctggagttcgctacgagcctgg
+aattgcagttcccctaccctgagtaaacaagatcagtatggacctatcttctgacccacg
+tgtaaaaactaccgttagcggccctgagaacggtgaagttgattatcggctaacactcgc
+tttaccaaggaacaaacaattgatggaacaggtaagcggctggattctatcctgaataca
+gcataataatatttgctttcaatatatagttatgacactcccaatatcactaactcttta
+caaatcggatatgaagagtgaattagagatggagccgatcgttccttgtattctggtaag
+tactcgactaatgtgtgtagtctaggggtaaaggtccttaaccgtcgagtctagaactca
+cgcattatgaaatcctccgagcatagagactctaaattcgccaagcaataagtcccgacg
+cgaaggatgagaagctcattgaactgtaacatttacgtcgggctcaccatgttacatatg
+cagcgggtaaaagtttttgcctggagtggttgagtttcgcgatacataaaaggccccact
+ttcatatggtcaaatatctatatcgtgctttggacgactcgataaactaaagtagcctag
+taatgccctaaaccgctgcatttgtgcaataaaaaatttagagtatatataacttccgga
+cgtatggctgccttgaatcctcggatatcgtccttatacaacgatgaacggtatagctcg
+gaactatgcagattaggcgatccttgggttgaatttttagtttccatagatatgagttag
+ttttgatatggttaccatacgtccctgcattgaaacttaatctgtatattgattgatcct
+tagcaatagcggcacatttctgggcaatatgacttaattaggttacggtttttactatga
+tggatacgttttatatgatagaataacagttgctatttaaacaggtactacattcaacta
+atactgtttcactattgtgtccaacatagggaatatattgcctgaatagatgtattatca
+ggcatcttttacgctccaggtagaactaattaaaaatgatccttagaaactttcaagcaa
+cataagctaaaagttacgccaattataagccacatcggtaggatcttcaggcattcccat
+atccttctctatcaatcccgtctgttgctaattggttatctaagcatatcgcggcgagca
+tctacgataggtataaagttgctgctatctaattcgtcataatatatacatggaattaca
+gattcatacgtcttcagtctcgtggtgtttctaagagcggacccaagaattacgtaatat
+ctctctcgtgttacccaagaagttgacacgtgattgtcagctatctttttctggcgatgt
+taatagttataaacaattgcatatagctgcaaattagctaatcaaatactcgtttcttaa
+atgttatcagcaaagctttaggttctgtaatttcactgtgtaaagagggcgctaagttca
+aaattggtttttggcaacaaacaatttaatagcgcagtgcaaaaataatatctcagggtg
+taattatttctctaattggtctttacggttggaccaggcaatgggttttttatctatgtg
+ataccaattaaaagtaatttcaaagtgacattaaacttaagtattgctgtcaagaccatt
+acgacacttcaccaacacatttatgtattgtgctacgcggtatggcccgtagtaatttct
+gatattgaccgcgttatcagcaagtacgctgtacaaatgccaaatttagtaaagctctgt
+gtgcattccaaggtgcccacatcacacattatcaacatatcatgtcgttgtattacgtcc
+ttttactagcctgggaaataccggtgattcagagtgaacataaatctctgaaagctacta
+gacaaagctagtatagttaaaatatatatttcttttaatattaggatctttgcgattgca
+catttcaagcatcgcattaacctacctccgtactcttctacaacggttgcatgtacgatt
+tctatgcgatgaaatacttatgttcttagtttggggttactttgttcacctagtcctcga
+acgcaaattagcttcgaatatctgaaaagtgtatgcgggcaccaaaacgatctcgattct
+taggtttataattatagtcagaagataaatacatgcatatctggacactcttccacatgt
+catgtcgactaactttgaactacagtcatatatagactgttatctgatccgtatgtgtct
+attactactcttatctgagaaaggacccaatggagtcacagtaagcgatcatgtcatcgg
+ggctttttccctgattataagattacactattgctgtgcttggggcctcctactttttct
+atcttaatcattttgtacattaaaaagctaagaagtaggtacaacttatctttcccatac
+gagctggaccattaatttaacagccgcaaggcgagttttaatgttaatctggaagggctt
+tatgttctaagcttttagcactgagaaattaatccgtaggaaattaatcccacataaccc
+ggtaagagaaccttacgccccgttactaataatgttctgcgcaatgtaggaagtgacaag
+ctcactcttgcgacgagctccttaatacaggccctgcgttatattcgaccgtacctataa
+ctagaccaccatcttaaatgtacagttatggttttcgacgcatagagtatgggaccacct
+cgaaatgctcagctgcaaattgtactgggggtggttatcaaacatttaatatgaatctat
+ggtaaagtactagtttatagatagccgaacactaaaggtttgcagaccttcctcccctga
+ggaacttcgtgtcacaaattagattgagaaggtggtgataaaatcgcgtatctacaatga
+tttggtgcaaatatttatcgattgcccaatcgttctactcgtactctttatagcctaacg
+ccttttcttggcgctaattagcctaatccaagaaggagtctaacaaaattacttaaccat
+actcttgtctattcggcccacgcatgcgcaagctcaaaaagttctcaacgggcgttttta
+cttgagtcccaggaggtaacattggatctatgagtcttaacagtggaaatatgattttta
+gattgtgttcagatttattgtcttattttggtctatctcatcagctatagctacataatg
+acgtcttaactgtttcgactaaccttcagatctgactaccccaaatacaacatagcaaaa
+gaatgatgctaacgcttaactatcctttcacgatcttaacaaaaaagctccatttaaaag
+aatcgaaaacagatctaccattcgtggaatcaatttttggacgagtactggtcgggtcgt
+gcttatttgctacaggattgtttcgtataacgttcaagcactttagcggttccatccttg
+atggcgttaactgatgatgcgtaagtttatggtgatctaaaactctactacgaaccaggt
+cccagcacgaaacgtcatctttaatgagtttttaggtctccaggcactaggctgcgaagt
+ggaatatgtgtcatcagagacaaatagatgattcctatagctttttgcagttaagccact
+aagtaggcggttctatagggtttcattcaaatcgatcgtaattcccgactctgcatagcg
+tgggtcttgtatagaccattcttcaggcccgccacaatggtttcaagtttcaacttccgt
+ttattggctgtccctcaatagagtcgttctcagggcacgactctcgttcgttattcataa
+gtccagtttgatccacgaatacagaacacgcatatctgataataaaagcttaacgataac
+tttcacgcgcatggtttatttttgatttattaggcaaccaaataccagaatgtagtcagc
+gatatgtagtaaaatttagacaaacataaaacaaagtatcgccattacagtctcctgtta
+ggagaacctttttatcaatatgtgtaggcgtgtattggcgcccttgatttaataataatt
+acggctaaacgtattgatattttccaggaactgccccatctcatgagatgaccctaaatt
+ttattcacacctcatttttaattcttttatatcacgattatttatctgagcaagcatctt
+tgcaagcattcatagtgacggtgctgtctctatgaatgcatgctaatatacggtgcgcta
+aacatattggttcaattcaatgtaagctacctcggaatttgcttgcactaagacggggaa
+gccaaaacggtaaatcgccgtatatgctagtgccaagggacttgtccgttggagtcacta
+tggagttacaagcattataaatctaaggaaatcgcagtatcagtccttaccccaaagata
+cttcgcattccctggggtacggaccatgaaatacttctttcatacatgataaacgatgga
+gactcggttaccaccctggtagttactccatcaattggagttaactaagatcgctattac
+aggctttattagccaatcatcacaagcctctttttagagattcacaagttagcaaaccaa
+agttcctttgataagtctttaacgagatctatcccaattccggctaggagtaaaatttat
+atatttgagatcggggttaaagtcacacgcaatgcaaggggtttttatatggtaatgtcc
+ttccctaattaggtaattttcagacctccgagagagagtagatcaacaacgcgttatact
+cctaaaatgcttgtcgataacatgacactacagatcatccctggatgagcatcgactttc
+attacttgattagttcagttaattcgtttcaaaccattttcaacaaaatcccccagtaga
+tatgtatatgcacatcttagactaaataacagttttcataccctgggatttgtgtcacta
+tctcaggaacgtcgagacgtcccctatcaccgcagcgagggtaactggccctgttccatt
+gtaatcgatgggacgggacgttatattgcagacccaaagtagtaataaattcagccatat
+ggacggagggggggaattgttaagaatataattcgattttcagctgaatgtaaaagctcc
+agccattcctcctccacttgacattagttcgaagaaggtctgagaattggaattgcttgt
+gacgttttttgtttccagacaaggaaatagcccagtaccaagtataatattatgacaata
+gaagcttaaattcacaacgtaacatatctgttagcatgctctaatagaccgagaaaataa
+gtgtctatgtgtgcgagaactgtcaattcacggcagtagtcacctaatctaacgtctagt
+tcccgactatgaagtcttcacaaatggttagtaataatttcccagtggagtagaagtggc
+ataacgtgcactctctgttaataatacctttagactactcccatttcgccagaacgtctt
+gatggtaccctatgggaaacactcacacatgcttattgcctgcaacctcagcaatgtgtc
+gtatgcggtatttctacgaacagctagtgaaaggactgatgacctaattttggtttctca
+agtccagacgtgatattttgatgaccgtatctgacatctctgggcaattcggttaacctc
+tggtacgaaatagtccgtcgcgtaggtaaaaatgataatgctgtcatcactatcatgttt
+tagctaagctacactaccccatcgctcgcacgtggcaaagtgtgaggattccgatatcat
+ccatgtgtacgaattcctaatactcttgctcagggcacttagggttattgtagcctgtgt
+taccgtctcgcatattagatcattaatcaacagtcttataatcaccgtaatcggtaaaca
+gttgttatttgttctgataggtagacagctaataaagatgctgttgaacagttacgtccc
+acctttattgccctacagtgaaactagttcttactctgttgctgtaatatgtctagggtt
+attgatttgctgccacttcaaaacggaaattaagtcattaacgaaaatggttccttcata
+ggtaaagatcaatccccaattgaagccagaaattttgagatgtcgattcctgatcattcg
+ccaaatttacagctcgtaaacgagttccatgtgtaaaaaaatgttgagtccactagcttg
+tttattctggctcaaggtacgtggaacacgtagtattttgatactaatgccagacccgct
+acgatccctgtactgtgagcagagccgatcctcagaaatagctaaatcttgtgcttcgtt
+agaagtctcgactacgtgtagcctagtgtttgtgttgcgttatagtctatttgtggacac
+agtatggtcaaatgacgtcttttgatctgacggcgttaacaaagatactctgggcaacac
+acatacttctctcatgttgtttcttcggacctttcataacctttcctggcacatggttag
+ctgcacatcacaggattgtaagggtctagtggttcagtgagcggaatatcattcgtcggt
+ggtgttaatctatctcggtgtagcttataaatgcatccgtaagaatattatgtttatttg
+tcggtacgttcatggtagtggtgtcgccgatttagacgtaaaggcatgtatggatcttga
+tctatgcaaaggtaggtccatctatatacgttgcacagcggatacaaataagataagaat
+ttactaacatttaaattttcttattgtcgagcatagattggaggaaaaacttatttactt
+ggtatttaaacggaagtttctaatgtttatgattggatgcacggacagtttactgcttac
+tttcttaggtttcttgaacaacaggatgcactagtaacatgtctcgttcatgcttccatt
+aagttcttcttaaacttacacaaactacctaatttagagttgacgagatggttgaacgtg
+ttgtgacaaacgtttgcaaaatgcacagtatcgttaccaaaaagtacatttaagtgtgtg
+cgtaggaattctgctacgtccattgcaggccacattcacatcccacccctgaatatatgg
+actgaatcacacacaccaaatttcatctaccttatcgtagcataactattaacaaacata
+tacagacttcgcggtaaataaaatatattagtacacaaccgtatactggttgaactattg
+cccagctttaagacgcttttaactaggtgcttgatcaagaagtattattatatgacggca
+gtgtgtaatacctgaatagatatagacgttagattgtctgaaaacacgccgtagagacat
+ttttgttagatatgtatttctttttgacgagccagcatcttagtatctgaagacgagcta
+tatgtttgtagaaaatcgactgacattgtatacgaggcggcgtaagattaaccaaattcc
+ccagaattagtaatggcgccttatcgatttactaacgatatataacttgtgatgttgtct
+gcaatgtatacccgtgtaggctgtgctcttatcgaaggaaacgcattgaagtccaggctg
+gatgaaaccaccgcgtacttccatgcgtctatacatagcgtcaccgatactacgttttgc
+tatgtaatccattctaatgggtaagaggattcctcttatagtaaaatatgcttgactttt
+taagaaccattgggagtggttggcaaaataatagtgggtgtctttctcagtgtatagttt
+tctacaactacccctattaggttacaagtaatctggctttcttgccacttggcgatgata
+gttagattcgtatttctacaacgcagttactgtatccatggcgcgagataattagatacg
+atttgaatttggatgtagactcgttactactgttgtagaccagcacgtgagtatctagat
+gggtttgctaccttgttagcggacttttgccgggaaaaagacatacgtacaaccgtatat
+tttactataagcagtattggccaccctcgtattgcggcagggtgtgctcacctggttaaa
+atgaaagagaaaaattccattttaaaacccggaggaatctattactgacgaggaaggtgt
+ttaacccgttgagacatctcctaacgtaaaaggttcatattctagttattccgagagtca
+ctttcctatccaaacatgaactgatagcataatgacaggttgaatggaaagcatatcctg
+tttattctaaatctgtttcgctaatcaatatgctgtcacgaactcggagcttacccttac
+aactatgtgttctgtttaccaggtgctaatatcccggcactcttttcatgcatgtcgctc
+ctagcgtcatctgatttaatagcttaatgtctcatattttacagtagccagtgtagtatg
+gaaggcggcgaaccagcccctacattgggtttcctgacataagtattacatatcacttgt
+ctgattacacagcaaaatcgctaaccttactttgcgcatgtagctattggaactttgggc
+tagtgtctatcccattaagtttaacagtagactagtccgtgagcgatcaccgagcttatg
+tctcgtacccaagttttggatttggatcaaaaactactcgatattcatgatctacgggct
+tcctttctccgggtatcattgcgccgagattaaaaataaaacgatagcgctgtgaaaaca
+tgtttgacacgggatagcgtagaaactaaacaacgaatagaccatccaatttgaatttta
+ttgggtccagcacttcgccatagtgttgaatggtaaagttcgaaaggaaatttgttatat
+taattctgctacattttcgaccacttgtatctcaaggacaatatcccttgaggcttttag
+cagaaagagatgccgtaattctaagggatgataataggttgggaaatttaagagcagtag
+taacggtcgcgggttcgaccttaaactatatatttaaatctagccaaacaagttaacaac
+aaccataaagttatgaccttattatattggcaagcttaacgttttaattgctctagtaat
+agagtggtagaggtaagggaccatcacctgattcttcctccgcaaccattatatagacgt
+gtcgtctgacaaatttcgagataaaacattcgtccttagcaacgaatatcgaatggcaat
+tagccacattgagttaaatagttgaggatatttcttgcacagaatcagatctaatctaat
+gattcgttactaaacacttcaccaggtatcgtgaaggctcaagattacccagagaacctt
+tgcaatataagaatatgtatgcagcattaccctaagtaattatattctttttctgactca
+aagtgacaagccctagtgtatattaaatcggtatatttgggaaattcctcaaactatcct
+aatcaggtagccatgaaagtgatcaaaaaagttcgtacttataccatacatgaattctgg
+ccaagtaaaaaatagattgcgcaaaattcgtaccttaagtctctcgccaagatattagga
+tcctattactcatatcgtgtttttctttattgccgccatccccggagtatctcacccatc
+cttctcttaaaggcctaatattacctatgcaaataaacatatattgttgaaaattgagaa
+cctgatcgtgattcttatgtgtaccatatgtatagtaatcacgcgactatatagtgcttt
+agtatcgcccgtgggtgagtgaatattctgggctagcgtgagatagtttcttgtcctaat
+atttttcagatcgaatagcttctatttttgtgtttattgacatatgtcgaaactccttac
+tcagtgaaagtcatgaccagatccacgaacaatcttcggaatcagtctcgttttacggcg
+gaatcttgagtctaacttatatcccgtcgcttactttctaacaccccttatgtattttta
+aaattacgtttattcgaacgtacttggcggaagcgttattttttgaagtaagttacattg
+ggcagactcttgacattttcgatacgactttctttcatccatcacaggactcgttcgtat
+tgatatcagaagctcgtgatgattagttgtcttctttaccaatactttgaggcctattct
+gcgaaatttttgttgccctgcgaacttcacataccaaggaacacctcgcaacatgccttc
+atatccatcgttcattgtaattcttacacaatgaatcctaagtaattacatccctgcgta
+aaagatggtaggggcactgaggatatattaccaagcatttagttatgagtaatcagcaat
+gtttcttgtattaagttctctaaaatagttacatcgtaatgttatctcgggttccgcgaa
+taaacgagatagattcattatatatggccctaagcaaaaacctcctcgtattctgttggt
+aattagaatcacacaatacgggttgagatattaattatttgtagtacgaagagatataaa
+aagatgaacaattactcaagtcaagatgtatacgggatttataataaaaatcgggtagag
+atctgctttgcaattcagacgtgccactaaatcgtaatatgtcgcgttacatcagaaagg
+gtaactattattaattaataaagggcttaatcactacatattagatcttatccgatagtc
+ttatctattcgttgtatttttaagcggttctaattcagtcattatatcagtgctccgagt
+tctttattattgttttaaggatgacaaaatgcctcttgttataacgctgggagaagcaga
+ctaagagtcggagcagttggtagaatgaggctgcaaaagacggtctcgacgaatggacag
+actttactaaaccaatgaaagacagaagtagagcaaagtctgaagtggtatcagcttaat
+tatgacaacccttaatacttccctttcgccgaatactggcgtggaaaggttttaaaagtc
+gaagtagttagaggcatctctcgctcataaataggtagactactcgcaatccaatgtgac
+tatgtaatactgggaacatcagtccgcgatgcagcgtgtttatcaaccgtccccactcgc
+ctggggagacatgagaccacccccgtggggattattagtccgcagtaatcgactcttgac
+aatccttttcgattatgtcatagcaatttacgacagttcagcgaagtgactactcggcga
+aatggtattactaaagcattcgaacccacatgaatgtgattcttggcaatttctaatcca
+ctaaagcttttccgttgaatctggttgtagatatttatataagttcactaattaagatca
+cggtagtatattgatagtgatgtctttgcaagaggttggccgaggaatttacggattctc
+tattgatacaatttgtctggcttataactcttaaggctgaaccaggcgtttttagacgac
+ttgatcagctgttagaatggtttggactccctctttcatgtcagtaacatttcagccgtt
+attgttacgatatgcttgaacaatattgatctaccacacacccatagtatattttatagg
+tcatgctgttacctacgagcatggtattccacttcccattcaatgagtattcaacatcac
+tagcctcagagatgatgacccacctctaataacgtcacgttgcggccatgtgaaacctga
+acttgagtagacgatatcaagcgctttaaattgcatataacatttgagggtaaagctaag
+cggatgctttatataatcaatactcaataataagatttgattgcattttagagttatgac
+acgacatagttcactaacgagttactattcccagatctagactgaagtactgatcgagac
+gatccttacgtcgatgatcgttagttatcgacttaggtcgggtctctagcggtattggta
+cttaaccggacactatactaataacccatgatcaaagcataacagaatacagacgataat
+ttcgccaacatatatgtacagaccccaagcatgagaagctcattgaaagctatcattgaa
+gtcccgctcacaatgtgtcttttccagacggtttaactggttcccgggagtcctggagtt
+tcgacttacataaatggaaacaatgtattttgctaatttatctatagcgtcatttggacc
+aatacagaatattatgttgcctagtaatccactataacccgcaagtgctgatagaaaatt
+tttagacgatttataaatgccccaagtatccctcccgtgaatcctccgttatactaatta
+gtattcgttcatacgtataccgcgcatatatgaacatttggcgataaggcgcgtgaattg
+ttacgtgacagagatagcagtttcttgtgatatggttaacagacgtacatgaagggaaac
+tttatatctatagtgatgcttccgtagaaataccgccactggtctgccaatgatgaagta
+tgtagctttaggtttgtactatgaggctttcgtttgtttgcagagtataacagttgcgag
+tgaaaaaccgacgaatttatactaatacgctttcactattggctacaaaatagggaagag
+tttcaatcatgagagggagtatatggatgctttgtagctaaaggtagaacgtatgtatat
+gctgccgttcattcttgaaagatacataagcgataagttacgacaattataagcaacatc
+cctaccttcgtaacgatttcactgttactgcgcttgaaatacactatggggctattggcg
+gagagaagcagatcgcgccgagcatatacgagacctataatgttgatgatagagaaggcg
+tctgaattgatacatcgaagtacactttctttcgtagtatctctcgtcctctttctatct
+ccggacacaagaattaagttatatatatagagtcttaccaatcatgttgaatcctgattc
+tcagagttctttggcgggccttgtgatgactgagaaacaatgcaatattgctccaaattt
+cctaagcaaattctcggttatgttatgttatcagcaaagcgttacgttatgttatttaaa
+tctggaatgacggagcgaagttcttatgtcggtgtgggaataattcttttgaagacagca
+ctccttaaataatatcgctccgtgtttgtatttatcgaatgggtctgtaaccttgcacaa
+gcaaatcggtggtgtatatatcggataacaattaatacgatgttcatagtgacagtatac
+tgatcgagtcctctaaagtcaattacctcacttaacaatctcattgatgttgtgtcattc
+ccggtatcgcccgtagtatgtgctctgattgaccgagtgtgaaccaaggaacatctacta
+atgcctttgttaggtaagatctctctgaattccttcgtgccaacttaaaacattatcaaa
+atttcttctacttggattaactacttttacgagcatggcaaattcccctgtggaagacgg
+ttcattattatcggaaaccttatagaaattgcgtgttgactgaaattagatttttattgt
+aagagttgcatctttgcgattcctctggtctagcttccaatgaacagtcctcccttctat
+tcgacatcgggtccttcgtacatgtctttgcgatgtaataattaggttcggagtgtggcc
+ttaatgggtgcaactaggaatacaacgcaaatttgctgacatgatagcaaatcggtatgc
+cggcaccaaaacgtgctccttgcttagcttgtgaatgagactcagtagttaaataaatcc
+atatctgcaatcgattccacaggtattgtccactatctttgaactactctaagagataca
+agcttagctgagaccgaggtgtatatgactacgctgatatctgtaaggtaccaatgcagg
+caaagtatgcgagaagctaataccggctgtttccagctttataagattaaaatttggctg
+tcctggcggcctcagaattgttctatcgtaatcagttggttcattaattagctaagtacg
+aggtacaacttatctgtcccagaacagctccacaagtttttttacagccgaaacccctgt
+gtgaatcttaatatccaagcgcgttatctgattagagtttacaactcagtattttatcag
+tacgttttgtttccaacattacccggtatgacaaaatgacgccacgtgtcgaataatggt
+ctgaccaatgtaggaagtgaaaagataaatattgcctacacatactgaattcaggcaatg
+cgttttattcgaaaggtcatataactagaaaacatgatgaattcttatcggatcctttta
+ctagcatagtgttggcgaacacctcgtaatgctcagcggcaaattggactgcgggtcctt
+atcatacattttttttcaatataggcgattggtctaggttagtgattccccaacacttaa
+ggtttgctgacattcataccctcagcaacttcctctcaaaaattagagtgagttggtggt
+cttataagaccgttgattatttgaggtggtcaaatgatggtgcgatgcacaaatcgttat
+aatcgtactctgtagacaataacccattgtagtgccgattttgtgcataatacaagaagg
+aggatataaaaatgacttttcaataatattggctattagcaacaagaaggagaatcctca
+ttaagttagcaaccgcagggggtactgcagtccaaggaggtttcattggagagagcagta
+tgaaaacggcaattatgattgtgagattcgctgaagattgtgtctctgattttcctagat
+agaataagctatagctacttaatcaactcttaactgtggagactatcctgatgatctgaa
+taccccatttacaaaattccatatcaatgaggctaacgcttaaatttcatttctccatcg
+taacaaaaatcagcctttttatacaagacaaaacactgcttccattacgggtagcaatgg
+ttgctcgactactggtagcgtcgtgatgtggtgataaagctgtcttgcgtttatacttaa
+acaaattttgacctgacataatggagcgacttatcggatgttgccgatctttagggtcat
+ctattaagcttatacgaaaaagggacaagcacgttacgtaatctggtaggactgggtacc
+tagaaacgcaagaggaggcgaactccaatatctgtaagaacagaaaaatacaggagtcct
+tttcatttttcaagttaacaatataagtaggagcttagagaggcttgcatgaaaatcgtt
+aggaattacagaataggcagagagtggggcgtgtagactacattcttcaggccccacaat
+atgggttataggttaaactgcactttttgcgatctcccgaaatactgtcgttctctgcga
+accacgctcgttccttttgctgtagtccacgttcatccaactattcagataaacaagatc
+gcagaattaaagcttaaccatatcttgatagcccatcgtgtatggggcatgtatgtgcaa
+acaaaagacctcaatcttgtctgcgagagggaggaaaatttagacaaacataattcattc
+tttcgactggacacgctaaggtttggacaaactttgtatctatatctggaggcctgtatt
+ccagcccttcttttaataagatttacggcttaaactatggatatttgccaggaaatgaca
+ctgctattgacaggaacataattttgattcaaacctcattgttaattattttatatctcc
+tgtttttatatcagaatgcttctgtcctagaaggcatactcaaggtgagggctcgaggaa
+tgaatcataatagaccggcccctattaatattggttcaattctttcttacataacgcgga
+atttgattgcacgaacaccgggaacacataaccgtatagcgcccgttatgctagtgccta
+gcgactgggaccgtggagtctatatcgtctttctaccattattaatctaaggatatacca
+ctttaagtcctttcaactaacataaggcgcattccatgcgctaaggaccttgaatttatt
+atttcttacatgataaaagatcgagtcgacgggaacaaaaggctacgtactcaataaagt
+gcagtttactaagagccctttttctggcttgtggagactatcataacatgaagatgtttt
+gacattcaatagtttgcaaaacaaacttactttgtgtagtattgaacgagatctttccaa
+ttgccccatagcaggaatagttatatattgcagatcgcggtgtaacgcactccaaatcca
+tcgcggtgtgtgagggtaagcgacttaaagaattacggtttttgatcaaagcacagtgag
+agttgagcaaattacagttatacgacttaattcagtctccataaattgaaacgacacttc
+ttaacgggaggaccagacacgttcattaagtgaggagtgcactttttgactttaaaaaca
+tggtaatcaatttaaaccacttgatatgtatatgaacagatttgaagttatttctgtttt
+aatacactgggagttctgtcaatatcgcaggaaccgcctgacgtcccctatcacacctca
+gagggtaaagggacaggggaaagggtaatcgaggggtagggaacgtagttggcacaccca
+atggacgaataaatgctgccatatccacggagggcgggattgcggttgattttaaggcga
+tggtaacctgaatgtaatagatcatcaaatgcctcctccactggaaattactgcgtacat
+ccgctgagaattgcaatggagtgtctcggtttttctttaaacaaaaccaaattgacaact
+tcatagtataatttttgcacattacaagcgttaattaacaaacttactttgctgttagct
+gcctatatttgtccgacaatataactggatatctctgcgagaactgtaaattaacggcac
+ttggaacataatagttcctattggtaacgacgttgtaggcggcaattatccggtggaaga
+attgacaactgcagttgaactgcatgaaagtcaaatctctcgtaagtataactttagaag
+actccaaggtacccagaacctcttcagcggacacgatcgctatcaatcaataaggattat
+tcactgaaaccgctcatatctggaggtggacgtttttcttcgaaaagcttgtcaaaggac
+tcatcaaatttttggccgtgctaatcgacacacctgttattttcatgaccggataggaca
+tctcgcggaaattcgggtaacagctgggtagatataggacctcccctacgtattaatgat
+aagcctgtcataactagcttggtttaccgaagagacaataaacattcgagcgctcgtgcc
+aaactcggtgcattacgtttgaataaatcggtaacatgtactattactctgcctaacggc
+acttacccgtttgggtccatggggtaaccgctcgatgttgacagaattatgctaaagtcg
+tttaagatcccgattaccgaaaatctggttatgtctgagcattcgtacactgcgtattaa
+gatcaggttgaacaggttcctaacaaattttgtgacctaaagtgaaactaggtcgtactc
+tgggcatgttttatgtcgtggcgtatgcatgtgctgacacttctaaaaccaaattaaggc
+tttatccaatatgggtccttaagtgctaaacatcattcacaatttcaagacagattgttg
+gtcttgtcgattccgcatctgtcgccaaattgacacatcgtaaaccaggtacatcggtaa
+ttatatgttgactaaactaccgtgtgtattctggctctaggtacggcgaacaagtacgat
+gtgcttaagaagccctcaccccagacgagcccgcgtaggtcacatcagcagatcctaagt
+aattccgttttattgtcctgagggagtaggatcgacgaactctacaagtcgctttgtcgt
+gccttataggctatttcgggtcaatgtagcgtcaaatgaactattgtcatctgtacgagt
+taactaagtgtctatcgccaactaaaagacgtctcgatggttctttatgcggacctgtca
+tatcattgactggcacttgcttacatccaaataacacgtttgttagcggatagtcgttaa
+gtgtgcgcaagatcatgaggcggggggggtaatatttcgccctctacatgataaatgaat
+aagtaagaagatgatctttttgtggcggtaccttaagcgtactcctgtcgacgagttact
+actaaaggaatgtagggttctggatctatgaaaagcgacctccatatatatacgggccta
+agcggagtaaaataagtgatcaatggactaacattgaaatgttagtattgtcgaccattg
+agggctggtaaatcttatttacgggcgtgggaaaacgaacgtgatatggtttagcatggg
+atgcaagcactcgttaatgcttactttagttggttgcgggaacaacaggaggctatacta
+actggtagcgttcttgcttccattatgttattattataattaaaaataagacatatggta
+gagttgtagtcagggtggatcgggttgtctataacgttggaataatcaaaactatcgtta
+acaaaaacgaaatttaagtcggtgcggtggaatgcgcctacctcatgtgcaccacacatt
+cacagcacacccctcattataggcaaggaagcaaacaaaaaaaagttaatcgaccgtatc
+cgaccttaaattttaaaataaatagaaacacttagcggtaatgaaaagataggactaaaa
+ttcactagtatcctggaacgaggcaacagagttatctagatggtaacgaggtgctgcatc
+aagatgtatgatttttggtccgctgtgtggaatacctctattgatatacaagtgactttc
+tcggtaataacgcacttcacaatgtgttgtttcttttctatgtattttgcaagagaaaga
+agcttagtataggtacacctcagagatgtttcgtgtaaatcgtatcacatggtataactg
+caggaggaacattatccaaattcaccacaattactaatccacccttttacttttactaaa
+gatatattaattctcatgttgtctgaattgtataacccggtaccctgggagcgtatcgaa
+ggataccaattgaagtcctcgaggcatgttacaacacacgacttccttccgtctattcag
+acactcaacgagactaacttttcctaggtaatcaatgatattgggtaactcgtggcatct
+tatagttattgatccggctcttttgtagatcctgtgcgactcgtgcgctaattaagactg
+gctctcttgcgcaggggatacgtttattctacgtacccgatttggttactactaagcggc
+ctttcttcaaacttgcagttgtgacttacattcctatttcttcaaagcagggaagggtta
+cagggagagacttattgagatacgattggaatttccatgtacaatcgttaatacgcttgt
+agaccagcaactcagtatagagatccgtttcctaaagggtgagcggtaggggcaaggcaa
+taagaaattactaaaaccctagttgttaatataagaacgattcgaaacaataggattgcc
+caagggggtgcgaacatggtgtaaatcaaagagaaataggcattgttaaaacccgcacgt
+ttctagtacgcaagaggaacgtcggtaaccagttctcaaagatcctaacctaaaaggggc
+ttattctactttttccgacactcaatggacgagacaaacatgaacggatagctttaggtc
+tcgttgaatgcaaagaatagaatcgttattattaatcggtttccattatctatatgcggt
+atagatctccgagaggaccctgtaaactagctctgcggtttaactggtgctaatagaccg
+ccactatgttattgcttctagctcctagcgtcttatcatgttatacattaatgtcgcata
+ttggacagtagccaggcttggatggatcgccgacaaaaagaaaagactttccctgtaagg
+acttaactattacatataacttggatcattaatctgcaaattagagtaacggtctttcac
+cagcttcatattccaacgtggcgctagtcgatatcccatgaagtttaaaactagaattgg
+cagtctcacttcacagtgcgtatctatacgacaaaagtggtcgatttgcataaatatctt
+atcgatattcaggttattaccgattccttgctaacgctagaagtcacaccagagtaataa
+taattccagacacctgtgaaataatcggtcactacggatagactagtaacgataatacgt
+atagtccataaaagttgaattttaggggctaaagatattagcaatactggtctagcctaa
+tcgtcgatagcaaagggctgtgaggatttctcctacattttcgaccaattgtatcgatag
+gaatagttacagtcacgcttgtagatgtaagagatgacgttattcttagggttcttaagt
+cggggggtaatttaagaccactagtaaaggtagaggcgtacacagtaaacgatattttga
+aatcgtcaaaaaaaagtttacaacatcctttaagttagcaactgattttagtggcaacct
+taacggttgaattgatctactaatacaggcctacaccgaagggtacagataatgattctt
+actaccctaacatgatagagtcctgtcctatctcataggtcgacattttaaattcgtaat
+gagcaacgaagatcgtttcccaatttgcaacattcacttatagacttcaggttatttcgt
+gctaacattaagatagaatataatcagtcgttaagaaactattatccagctttcgtcaac
+cataaagattaaaaactgaaacttggcaagatatgaatagctatcctgctttaaccgatc
+gtatgagatgctttgtagcaagaaaagtgactagcacttgtgtttagtaaagcgggagag
+tgcggtaattaatattaatatactattaagctacacagcaaaggctgcaataatgttagt
+aagtagaacataaaggtattctccacaagtaataaatagtgtgagctaattgactaactt
+aactctcgcgacaagtgatgtggataagatgactcatatcgtctttttctgtagtgccga
+catcccacctggatcgaacaattccttctagttatcgactttgattacctatcctattaa
+acagatagggttgtaaagtcagaaaatgatcggcttgcgttggtctaccatagctagagt
+tagaacgcgtagatagaggccttttgttgccaacgtgggggtgggatgagtctgggcgag
+cgtgactttctttcgtgtccgaatttgtttaacatccattagattagatgtttgtgtttt
+gggtctgatgtcctaactactttctcagtgaaactaatgtcatcatccaagtaaaatagt
+ccgatgaagtctccgttttcggccgaagcttgtctataacgtatataaagtcgctgaatt
+tagaacacaccttatctatgttgtaaagttactttattccaaaggacgtgcacgaagcgt
+gagtgtgggaaggaacttaaagtcggatcactcttgtcagtgtagataagaatttctttc
+atacttcactggaatccggcgtatggatatctctaccgcgtcatctggtggtgtctgcgg
+taaaaagtcttgctgcacgagtctgagaaatttttggtgccatcacatcgtaactgtaca
+acgaacaaatagcatcaggccttcttatccagcgtgaagtctaattatttcacaagcttt
+cctaagtatgtaaatccctcacttaatgatgcttgcgccaatgaggatagaggacattgc
+atgtacgtaggactattctccaaggggtcttctattttgttagcgaaaattgttacagcc
+taatgttagagcggcgtacgactttataccagatactttcattagatatgcaaatatcca
+attaaatcatagtagtatcgtggtatggacaatcaaaaaagacccgttgtgatatgatgt
+ttttctagttcgttctcatatatatagatcaacaatgaataatctcatgatctataaccg
+atgtatatttatattccggttgactgctccggtgcaattcactacggacactaatgacta
+atatggcgcctttcatcagaaacgctaaatatgattaatgaattaagggagtattatcta
+attattagagagtagcagttagtctgatattttcggtgtatgtgttagccgttataatgc
+tgtctttttatcagtgagaacagggagtgtgtagtgttgtatgcttcactttatgactct
+ggttatatccctcggagaacaagaataagagtacgagaagttcggtcattgaggatgaaa
+tagaaccgctagacgaatggactcacgtttataaaactatgtatcacagtactacagcta
+actctgaagtccgagaagcttttgtaggacaaaacgttataagtacctttcgcagaatac
+ggccgtgcatacctgttataaggcgtagtagggacaccatgctatccctcatatagagct
+acactaataccattacatggtgactatcgtttacggccatcatctgtaagcgatcatgcc
+tcgttagcatccgtacaatctcgcatggcgtcactgcagaaaaaccccgtgcggattttg
+agtcagaactattcgaagcttctcaatccttttccattatggcatagcaagtgacgactc
+gtcagccatgggaataatagcactaatccgattacttatgaattagaacccacatgaatg
+tgattctgcgaattgtctaagaatctaatgattttccggtgaatatggttgttgttattt
+attgaacttatattattaacatcacccttcgttagtgatagtcagctatttccaagaggt
+tccccgagcatttttaccattctctagtcatacaagttggagcgcttttaaatctttagg
+ctgatcaaggcgttttgtctagaattctgcagatgttagattcgtgtgcaatccctcttg
+catgtcagtaacaggtcacccgtttttcgttacatatgctggtaaaatattcatagtaat
+aactacaatacttgatttgttacgtaatgctcgtacataacacaatcgtattccacggaa
+cagtaaagctctattattctgatcgagcctaagagaggatcacactacgctattaaagtc
+acgttcacgaaatctcaaacctcaactgctggtgaccagttatagacagtgtaattccat
+attacatgtcaggcttaagctaacccgagcctttatataagctataatcaagaattagat
+tggagtgcattttagacttatctatcgaaatagtgatagtaagagtttatatgacctgat
+ctagactgatgttctcttccacaacagccttaaggcgtggagcctttcttatactattag
+gtcgcgtcgagagccctattcgtaatgttaacgacactagactaatatacaatgagctaa
+gaataacacaagtcacaagataatttacaaatcatatatctacagtccacaaccatcact
+agcgattgcaaagcgttattggtactaccgctctaaatcggtatgtgcaagacgcgttaa
+ctggttcaagcctctcctgctcgtgagactgaaagaaatcgaaaatatggatgtgcctaa
+ttgttcttgtgagtcatgtgcaactatacagtttagtttggtcaagactatgcaactatt
+aacagcatgtgcgcattgaatatttggtgtcgattgataaatgccccaacgttccatcac
+gtctataagccgtgttactaatgtgtattagtgcatacctattcagaccatagttcaact
+gttggactgaaggcccgtcttggggttcgtgaatgagagtgcagtttcttgtcttttcct
+taactgacctaaatgaaggcaatcggtttatctagagtcatgcttaaggtgaatttcagc
+caatgggctcccattgagctagtatggtgctttacctttgtaagtggtggctttccttgg
+tgtgctgactttaacacggcagagtgattatccgaagaatggataataagacgctggcaa
+tattggctaataaagtccgatgagtttcaatcatgactgcgaggagatccatgcggtgta
+cctaaacctacatcgtatgtatttgctgacgttcattcttgatacataaagatccgatat
+cggtccactttgtttaccaaaagccctaccttcgtaacgatggaaatgtgaatgagagtg
+aaatacacgatggggatattgccggtgagtacaagttagaccacacattagaactgacct
+atattcgtcatcatagagatggagtatgaattgattctgcgaagtacactggctttacga
+gtatctagacgccgcggtatatctcccgtcaatactatgaaggtatatatatagaggctg
+aaaattcatgttcaatcctctttctaagagtgagtgggagccccttctgttgtcggagta
+aaaaggcattattcctcaaattgtcagaagcaaagtatacgtgatgtttgcttagaacaa
+aagagttaccttagggtaggtaaatctcgattcaccgagagaagtgattttggcggtgtg
+cgattaattcttttgatgacagatctcattattttatatagctccctctttgtatttaga
+gtttgcgtaggtaacctggcaaaaccatatcccggggggagagtgcgctgaacattttat
+acgatgtgattactcaaaggataaggttcgaggcctctatactcatggaactatcttata
+attataatggatcgtggctcattccacctatccaaacttctttgtgatctgatgctacga
+gtgtgaacaaacgtacatcttctaaggaatttgggacgtttcatagctcgcatttcattc
+ctgaaaacttaaatatttttaaaaattgattctactgcgaggaactaaggtgtagacaag
+cccttagtaaccggtggatgtcgcttcagttttatagcaaacattattcaatttcagtct
+tgactgaaattagtttgttagtgttagaggtccatatgtcacatgcatatggtctagatg
+ccattgtacagtaataccttagattagtattagcggcatgcgtacttggatttcacttgt
+aagaatgagcttaggacggtcgcctgtagggctgcaaataggaatacttacaatttttga
+tgacttgttagcatatcgctatcacccataaaaaacctgatacttgatgagcgggtgatt
+gagactatgtactgatataattcaatagctccaatagatgaaacagctatgcgcctattt
+atgtcaaataatcgatgtgatacaagcttagagctgaacgagcgcgagtggaattagcgg
+tgatctctatcctaaaaagccacgaaatcgatcccagaagctaatacccgaggtgtcaag
+cttgagttcagttaaatttgcatctcatgccccacgaagaatgggtagagagtttgaagg
+tgcttctggattttcctaagtacgtggtaaaaatttgatgtaaatgaacacctcctaatg
+gttgtgttaaccacaaacccctgggtgaatctgattagccaacccagtgatctgatttca
+gttgtcaaatctcttttttataactaccttttgtttccataatttaaccggatctcataa
+tgaacaaacgggtagaataatggtagcacatagcgagcttgtctattcagaaatatggcc
+tactcagaatgtattctccaaatcagtgttatgcgaaacgtaattttacgtgtaataatg
+atgatttcttatcggttccttgtactacaatactcttgcccaacaaatactaagcataac
+agcaaaattcgaatccccctccttttaataaatggtttttcaatatagccgattcgtatt
+cgttagtctttcaccaactattaacctggcatctaattaataaaatcaccaaaggactct
+ataatatgacagtcacttcggcctcttttaagacagttgattattgcaggtccgcaattg
+atggtgacatgcacaattagttagaatccgactatggagacaattaacaattgtagtgcc
+catttggtccagttgacttcaaccacgagttataaaggtattttaatttatagtcgatag
+taccaacaacaagcacaatcataattatgttagaaaacccagggggtaatgctctaaatc
+cagctttaaggccagagtgcactatgaaatcgccattgatcattgtgtcattcgctgaac
+ttggtgtctaggaggtgccgagtgagaatatcagataccttatgaagcaacgattatatc
+tggactagatcatgatgatcggaataaaacattgaaataagtccttatcaaggagcataa
+acattttatttaatttatacttcgtaaataaattcagaattttttttcaagacattaatc
+tgagtaaatgacggctagaaagggttcctactcgaatcgtagcctacgcatgtgggcagt
+aacctggcttgcgtttttactgaaacaaaggttcaccggaaagaaggctgccacttttag
+cttcttgacgatctttagcgtcatatttttagattagtcgaaaaacggaaaacaaactta
+acgaagctggttgcacggggtaccgagaaaccaaagagcaggacaactccttgatcggga
+agaactgaaatagacagctgtcattttcattggtcaacttatcaatataacgaccaccgt
+agtgacgcttgcatgaaaatactgaggatgtaaactatagccagtcaggcccgcgtgttg
+actaattgatgaagcaaacaaaatagccggtattcgttaaaaggaacgggttgccagcta
+cagatatactctaggtatatcccaaacaagagacgtcctttggctgttgtaatcggtcat
+aatacttgtcacataaacaagatcgctgaattaaacattaaacagttagtgatacacaat
+cgtggttggggctgggatgtgcaataaaaagtcatctatcgtctatcacagagcgacgta
+aatttagacaaacattattatttcttgacaatggaatcgataagcgttcctctaacttgg
+tatatatatctcgaccccgggattccagccattcttgtatgaagatttaaccatttaact
+atgcatagttgaatggtaaggaaaatgatattgactgcaacagattttggatgcaaaaat
+atttgtgaattattggttatatactggttgtatagcacaatcattaggtcctagaaggca
+tactcaacctcagcgagagagctagcatgcataattgtaccgcccatattaatattcctg
+aaatgatttcttacattacgcccaatttcagtcatcgaacacccccatcaatttacccga
+tagagaacgtgatcatacgcaataccctatgcgaacgtccactctatagcgtctgtatac
+aatgattattcgttccatttacaacgttaagtaatttaaacttacataaggacaaggaaa
+tccgcgaacctcctggaatgtatgagttatttatgcagttaacttcgtctcgaccggaac
+taaaggcgtcgtacgaatgaaaggccacttttagaagagacctttgtatccattgtggag
+aatatcataaattcaagatggggtgtcatgctattcggtcctaaacattcttaatggctg
+ttctattgttagtctgatttaaaatggaaccatagcacgaatagttagatagggctcata
+cccctgtaacgatctacaaatccttccccgggtgtgtgcgttagcgacggaaagttttac
+ggtttgtgatcaaagaacactcacacgtcagattattacactgatacgaattatttcagt
+cgacagtaattgaatagaaacttattaacgccagcacctgacacggtaagtaaggcaggt
+ctgaactgtttgactgtaaaaaaatggtaatatttttaaaaatcttgatttctatatcaa
+atgatgtgtagttttttctctgttattaaaatcccagtgcgcgaaatttagatcgttacg
+actcacgtacaagatcacacatcacacgcgttagcgaaagcggaatggctaatacagccc
+tacgcaacgtagtgggatcaacatatggacgaatttatgctcaatgagccaacctccccc
+gcattgcggttcattttaaggcctgggtaacatctatcgtttagataatcaaaggaatcc
+gactatgcaattgtctgacttcatccgctctcaagtccaatgcaggcgctacgtgtttct
+ttaatcaataccatattgaaatcgtaatacgataattgttgctattgactacaggttatg
+aaaaaacttactttgcgggtacatgcatatttttgtaccacattattacgcgatatctct
+cagtgtactctaaattaaaccctcttcgaacattttagttcctattcgtaaacacgtgct
+acgcggcaatttgccggtcgtagaatggacaactccagttcaactgcatgtaactcatag
+ctcgcgttagtataaattgactagtagccatgggacaaagtaactagtcagcggaaaaga
+tccctttaaagatatatgcaggttgcaagcataaagctcattgctcgaggtgcaccgtgg
+tattccaaaagcgtctctatcgtatcttctaattttgggccgtgagaatcgaaactactc
+tgatttgctgcacacgttaggtaatatcgcccattttcccgtataagctccgtacttata
+cgaactacacgaccttttaagcattagccgctcatatcgtgattcgtgtacagatgagtc
+tattaaaattacagacatactccatatctcgctccttgaactttgaataatgcgctaact
+tgtactatgaataggcagaacccaactttcccgtttgcgtcaagcggggaaacgatacat
+gttgtcagatttatgattatctagttttagatcacgtttaccgataatcggctgtggtct
+gagcagtcctacactgagtatttacttcagcttcatatcggtccgaaaaaaggttgtgac
+cgaatgtcaaaatacggagtacgatgggcatcttttttcgagtcgcggttgcagggcagc
+aaaaggcttaaaccatttttacgatttttactatagcggtcatgaagtgcgaaactgctt
+gcaaattttctacacacattgtggctcttgtccttgaagcttatggcgaaaatttgaaac
+atagtataccagggaaagcgcgaattatttggtgactaatagtccgtgggtttgagccat
+atacctaacgccataaactacgtggtgctttagatgcaatctaaacagaacagaaagcgt
+agcgctcatcagcacagactaactttttcagtttgagtcgccggagggacttcgagacaa
+gaacgcgtcaagtcgcttgcgcggcacggattcgattgggcggctcaatcttgcctaatt
+tctactattgtcagctgtacgactgtactaagtgtatagccccaaataaaagaagtatcg
+atgcgtctttatgaccaaaggtcttataattgaagcgcacttccgttcatcaaattaaat
+cctggcttacccgattctccggaagtctgacctagagattgacgacggccgcgtattatt
+gagacctcttcaggattaatcaataacgaagtagttgatctgtttggcgacgtaccttaa
+gccgactccgctacacgagtttctactaaaccaatgtagccttatgcttagatgaatacc
+gtcctaattagatattccggcataacagcagtaaattatctgttcaatggacgaacattg
+aattgttagtattctacacaagtcaggcctcgtaaatattaggtaaggccgtgggataac
+ctacgtgatatgcttgagcttgcgttgcaagctctcgttaatcattaatttaggtgcgtg
+agggttaaacaccagcatattctatatgctagacgtcttccttaaaggatcgtagtatta
+taattaataataagaaatatggttgacgtctagtcagcgggcatacgctgctctatatac
+tggcattattcaaaacttgacggtaaaaaaacgaattttaaggcgctcacgtcgaatgag
+ccgaactcatgggaaccaaaatgtcacagaaaacacctctttattgccaagcatgcaata
+aaaaaaatgttaatagtacgtttacgacattttattttataataaagagaaactattaca
+cctattgatatgataggacgtaaattaacgagtagcctgcatagaggcaaatgaggtttc
+tacatggtatagacctgatgctgaaacatcgatgagttttggtcccctcgctcgttgaaa
+tctagtcatttactactgtctttcgagctattataccacttcactatgtggtgtttcttt
+gctatgtatggggctagtcaaacatgatgactatagctacaactcagagagcgggcgtgt
+taagagtatctcatgctagaactgcacgacgaacttgatacaaagtaacaacatttacga
+ttccacaaggtgactttgaagaaacatagtttaattctctgcttcgatcatttctataaa
+ccggtaccatcgcagcggatagatgcataacatttctactactccaggcatcttaaaaca
+cacgtagtacttcactagattaagacacgataagtgtataacttggcagtgggaagcaag
+gagattggcgaactcctggcatctgttacgttttgttcaggctcggttgttgataatgtc
+cgactcctgccatattgaagactcgctcgagggagatcgggattcgttgattataagtac
+acgtgttccgtaatactatgaggcagtgattcaaaatggcacttctgacttacatgacta
+ggtattattaccacggaagcgttaaaggcacactcttatggacttaagattgcaagtgcc
+ttcttctagcctgaattcgcgggttcaacacaaactctctttagacatccgttgcctaaa
+ggctgagacgtaggggcaaccctttaactatgtactaaaaaactagttggtaatttaaca
+acgtgtccaatcaagacgatgcaccaacgcggtgcgaaaatcgggttaagcaaacacaaa
+taggaattgtgataaaccccaccttgagaggtcgcaagaccaacctcgggaacaacggct
+ctaagagaataacctaaatccggatgagtagactgtgtaactctctaaagggaagtgaaa
+aaaagctaagcatacatttaggtctcctgcattgcattcaattgaatcgtttgtattatg
+agctgtacagtagctatatcagctatagttatcccagaggaacaggtaaactagctctga
+gcgtgaaatccggatattagaacccctagatgggattgattctagctaatacaggcttat
+ctggttttacagttatctagatgattggtaaggtgaaacgcttggtgccttccaccactt
+aaacaaaagtattgcccgggaagctattttctaggtattataaagtcgagcattaatatc
+aatttgacagtaaaggtctttcaccagcttcatatgccatagggcccatactcgatttaa
+attgaacggtttaacgagtattggaactctcacttataactgagtagctatacgaaaaat
+ctggtccatttccagaaatttattatcgatttgctgcttagtacccaggaagtgataacc
+cttgaaggcacaacactgtaataagttttcctgtcacatctgtaatattcggtcactacg
+cattcacgactaaagataattactatactaattaaaagttcaatgttagggccgaatcat
+agtagaaattctcgtctagcctaatcggacttacctatgggctgtgaggatttatcagta
+tgtggacaaaaatgctagagataggtatagttaaagtcaccatggtacatctatgtgagg
+aagtttgtagttcgcttctttagtccgggcgtttgggatgacaactactatacgtagagc
+cgtactcaggattagatagtgtgaaagagtcaaataaaagggttaatattaatttaacgt
+tgcaaatgtgtttaggccaaacattaaccgttgtagggatattctaatacaggccttcac
+cgaaccctaatgataatctgtcttaataacattaaatgattgtctccgctacgagctctt
+agggcctcattttaaatgactaatgtccaaagaagagactttcccaatttcaatctgtca
+cgtatagacggcaccttagtgagtcatatcattaagatagaagattatcaggagggaagt
+ttctattatcaaccgttacgcaaccataaacttttaaatctcataatggcattgagatca
+agagctttcatgatggtaaagttcgtatgtgatgctggggagctagatatcggtatacca
+cttcggttgtggtaagcccgagtgggccgttagtaatattaatagacgattatccgacaa
+tgcattcgctgaaataatcttacttaggagaaattaatgctatgagccaaaactatttat
+gtctgtcacattattgactaaagtatctatcgacaaaactgatgtccataagttgtagca
+gatagtcggtgtatggtgtcaccaatgaaaacctcgagcgaaaaatgaattatagttatc
+caatttgagtaaattgcctattatacagataggcttgtttagtcagataaggttccgctt
+gaggtgctctaacttagcgagagttagaaagcctagtgagaggcattttggtgccaaact
+ccggctcgcatgagtaggccagagagtcactttctttcgtcgaagaagttggtgaacagc
+cttttgattagttgtttgtcttgtggctatgtgctactatataagttagaacgcaaacta
+atctaatcagcaaagtaaaataggaccttgaacgagacggggtacgccgttgaggctcga
+gatagtagataaactagaggaatgtagataaaacattagctagggggtttagttactgga
+ttacataggaagtgcaccatcacggtgtgggggttcgtacgtaaagtcgcatcaatattg
+tcagtggacttaacaagttcgtgcataatgaaatcctatacggactttgcatatctctac
+cgactcatctggtcgtctatgcgggtaattgtattgctccaagtggatgactattttggc
+gtcccagcacatagtaaatgtaaatccttataatagcataagcaattattagactgcgtg
+aagtcttagtagttctcaagctttacgttgtatgtaaataactcacgtaatcagccgtcc
+ccaaatcaccattgaggtcattgaatgtacggagcactattatcaatgcggtatgcgatt
+ttctgagcgattattgttaaagacttagcgttgagccccggaacacttgattacagattc
+tttaaggagttatccaaatatcattttaaataatagtagtatcgtgctttggacaataaa
+aaaagacccgttctcttatgttgttttgcgacgtacttctctgatatatacttcaactat
+gaagattctattcatcgataacccaggtatatttatatgcccgttcactgcgcagggcaa
+attatctacggacaataatgacgtagttggacccggtaagaactaacgcttaatatgatt
+aaggatgtatgccagtattatcttattatgtcagagtagaagtttctctgagattttccg
+tcgttgtggtacaccggatttggctctctttttagaactgagaactcggagtgtgtagtc
+ttgtttccttcaatttatcaatatgcttttataccgccctcatcaactataacaggacga
+caagttccgtcttgctccatcatatactaccgatacaccaatcgtatcaagtttagtata
+cttgctttctctcttctacagcttactcgcttgtccgagaagcggttggtgctcataaag
+ttagtagtaaatgtacaactagtagccagtccttacctgtttttacgactactacggaca
+ccatgagatacagaagttagtgctacaattataccattacatgctcaatatcgttgtcgg
+ccataagatcgaagagtgcatcacgcgtgtgaatacgtaaaatctaccatcccgtcaatg
+cacaaaaacacactccccttgttgactaacatcttttacaagaggctaaatcattgtcca
+ggatcgaataccttgtgtacaatcgtcacccatcggaagaataccacttttccgatgtag
+tatgatttacaaaaaacatctatgtgagtaggccaattgtagtagaatatattcatttga
+ccgtcattagccttcttcttaggttgtgtacggatagtaggtacataaaccgtcgtgtgg
+catacgctgcgatttcatacagctgccaacaccttttttaccaggctagagtcagaaaag
+ttggagccatgttaaatagttaccatcataaaccactgttgtctactagtctgatcagct
+ttcatgcctgtgcaagcaatatggattctcacgtaatggtaacaactgttgcgttactta
+ggctggttaatttgtcagagtaataaatacatgtcttgttgtgtttcctaatcctcggaa
+agtacacaagcctaggaataggaaaagtaaagctcttttattctgatagtgactaactca
+ggatctaaatacgcgattatactaaccttcaccaaagctcaaaaatcatctgctggtgac
+cagttatagacagggtaattcaatatttaatgtctcccttaacatttcaccagcatggat
+tgaagatagtataaagttttacatggcagtcattgtgtcacggttctatacaaattctga
+tagttagacggtatttgaaatgtgcttctagcatggtatcttacacaactgaatgaacga
+ctggagccgttcgtatactatttgcgagcctcgagaccccgtttcctaatgttaacgaat
+atagtataatataaattgtgatatgaataacacaagtaactacagtttggacaattaatt
+gttctaaactaaaaatcattcacttcagatggcatagagttatggctactacacatataa
+agcggtatgtgaaacacccgttttagccggaaaccctctactgctcgggacaatgaatga
+tttccaaaatatggatgtgcagaattgttagtgtgactcaggtccaaatagacactttag
+tttcgtcaagtcgttgcaaagtttaaaaccatcgcagcattctttatttggtctacattg
+agaaatgaaaaaacgtgacagaaagtctagaagaactgtgaataatgtctattactgatt
+aactagtaagacattagtgcatctggtccactgaagcacccgcttggcgttaggcaatct
+ctgtgaactgtcgtggctgttccggtaatgtacgaaagcaagcctataggttgatcgagt
+cgcttcattaaggtcaatttcacaatatccgatcacattgtgctaggttcgtcctttacc
+ttgcttagtgctgcatgtacggggtgtcatgacttgttatcggcagactctttatcccaa
+gaatggataatatgtacatggaaagtgtccataattaagtcccttcactgtaaagaatga
+ctgccacgtgatccatgaggtctacagaaaccgacttacttgctttttgatcaacttaat
+tatggattcataaagttcagatatcggtacaattggtgtacaatatgaaattaatgagga
+aacatggaaatctgaatgacagtgatagaaaagatccccatttgcccggtcagttcatgt
+tacaccactcattagtactgtaagtgtttcgtcagcattgagatccacgatcatgtgttt
+atgccttcgaaactggatgtacgacgatcgagacgaagaggtatatataacctaaatact
+aggtacgttgttagagagacgatgaaaattaatcgtcaatacgctggcgaacactgaggg
+ggacccaatgctcttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagt
+agaccggatctttgcggagaacaattcacggaacgtagcgttgggaaatatcctttctac
+cacacatcggattttcgccctctcccattatttattgtgttctcacatagaattattgtt
+tagacatccctcgttgtatggagagttgcccgagcgtaaaggcataatccatataccgcc
+gggtgagtgacctgaaattgtttttagttgggatttcgctatggattagcttacacgaag
+agattctaatggtactataggataattataatgctgcgtggcgcagtacaccgttacaaa
+cgtcgttcgcatatgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggt
+cgtttcatagagcgcattgaattactcaaaaattatatatgttgattatttgattagact
+gcgtggaaagaaggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgaga
+gcttacattagtctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccata
+ggtcactggcatatgcgattcatgacatgctaaactaagaaagtagattactattaccgg
+catgcctaatgcgattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgat
+aataccaatacttacatttggtcagcaattctgacattatacctagcacccataaattta
+ctcagacttgaggacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatata
+gatgaataagcgatgcgactagttagggcatagtatagatctgtgtatacagttcagctg
+aacgtccgcgagtggaagtacagctgagatctatcctaaaatgcaaccatatcgttcaca
+catgatatgaacccagggggaaacattgagttcagttaaattggcagcgaatcccccaag
+aagaaggcggagtgacgttgaacgggcttatggtttttcagtacttcctccgtataagtt
+gagcgaaatgtaaacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatg
+agaatacacagtgtgagcatttcacttgtaaaatatctttggtagaacttactttgcttt
+aaatatgttaaaccgatctaataatctacaaaacggtagattttgcctagcacattgcgt
+ccttctctattcagatagaggcaatactcagaaggttttatccaaagcactgtgttgact
+aacctaagttttagtctaataatcatgattgattataggtgccgtggactacatgactcg
+tccacaaataatacttagcagatcagcaattggccaagcacccgacttttatttaatggt
+tgtgcaatagtccagattcgtattcgggactctttcaaataatagtttcctggcatctaa
+gtaagaaaagctcataaggaagcgatattatgacacgctcttccgccgctgttttgaaac
+ttgagtattgctcgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatc
+gactaaagttaaaatgctagtccacagttggtcaagttgaattcatccacgagttatata
+gctattttaatttatagtcgagtgtacaaaaaacatccacaataagatttatcttagaat
+aacaacccccgtatcatcgaaatcctccgttatggcctgactcctcgagcttatagcatt
+tgtgctggcgctcttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtt
+tcattatgatgatacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaa
+ttatgtcattatcatgctccattaacaggttatttaattgatactgacgaaattttttca
+caatgggttttctagaatttaatatcagtaattgaagccttcataggggtcctactagta
+tcctacacgacgcaggtccgcagtatcctggagggacgtgttactgattaaaagggtcaa
+aggaatgaaggctcacaatgttacctgcttcaccatagtgagccgatgagttttacatta
+gtactaaatcccaaatcatactttacgatgaggcttgctagcgctaaagagaatacatac
+accaccacatagaattgttagcgatgatatcaaatagactcctggaagtgtcagggggaa
+actgttcaatatttcgtccacaggactgaccaggcatggaaaagactgacgttggaaact
+ataccatctcacgcccgacgcttcactaattgatgatccaaaaaatatagcccggattcc
+tgattagcaaagggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgt
+aatgtgcatcttcgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatac
+aggttaatgttagtgatacacaatactcgtgggccatgggttctcaaataaaatgtaata
+ttgcgtcgatcactcacccacgtatttggtctaattatgttttatttagtgacaatccaa
+tagataaccggtcctattaagggctatatttttagcgaccacgcgtttaaacaaaggatt
+gtatgtagatggtaccagtttaattgccagtgggcaatcctaagcaaaatgagattctat
+cctaaagtttgggcttgatataagatttcggatgtatgggttttataatcgttggagagc
+tcaatcatgagctaatacatggatttcgctacctcaccgagagaccttgcatgaagaatt
+ctaaccaaaagtttaataggccggattggattgagttaattaagaccttgttcagtcata
+gtaaaaacccttaaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaa
+cgcctcgatagtgactaggtatacaaggtttttgagttcctttgaaatagttaactaatt
+taaaattaattaacgacatggaaatcacagaacctaatgctttgtaggagttatttatgc
+tgtttactgcctctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagtt
+cagaaagtggtatccagggtggtcaatttaataaattcaacatcgggtctcaggatattc
+ggtcatataatttattaagggctcttcgagtcttactctgagtgaaattggaaacagtca
+tccttttcgttgtgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtg
+tcccgtacacaaggaaacttgttaccttggggatataagaaaactcacacgtctcattat
+taaactgagtacaatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagct
+aatgaaaagggatggaacgcacctcggatctgttgcactggattaaaatccgattatttt
+taaaaatattcagtgctagagcatatcaggtctacttttttatctggtatgtaaagccca
+cggagcgatagtgagatccttacgactcaacgaaaagttataacataactcccgttagcc
+aaagcccaatcccgattactgccctaccctaacgtctgccatctaaatatcgaacttgtt
+atgatcaatgtgactacctcccaccctttccccttcatttgttccactggggataagcta
+gcgttttcagaatcaatgcaataagaatagccaattgtctcacttcatcagagctcttgg
+caattccaggcgctacgtggttctggaatatattcatttttcaaatagtaatacgtttag
+tgttgctattgtctacacgtttggatattacgttatgtgagcggacatcaatagttgtct
+aactctttagtaagccagagatagcactcttagcgaatggataccatcttccataagttt
+agttaatagtccgaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcc
+tcttcaaagcaatcttactaatagatagagtttgttttaagggactactagaaatgggac
+aatcttaatagtatgacctaaactgacatttaaagatatatccaggtggcaagcataaag
+atcattgcgccacctccaccgtgggattacttatcagtcgatatcctatatgctaagttt
+gcgacggcagaatacaaactaagctgagttgatgctaaccttacctatgataccccattg
+gaccggttaacagccctacttattccaaataaaagaacttttatgctgtagaagctatta
+tagtgatgcctggtaacttcagtatattaaaatgacacacatacgccatatagagctcct
+ggaactttgaataatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggtt
+gcctaaagcccggtaaccagacatgtgctatcattgatcattatcgaggttttcataacc
+ttgacccattatcggctgtgcgcggacaagtacttaaatcactagtttcttcacctgctt
+atcggtaagaaataaggttggcaaagaatcgcataagacggacgtagagccgcagcgttg
+tgcgagtccaggtgcatgcgcagcaataggattttaaattttgttccatttttaatttag
+ccgtaaggatgtccgtaaatgattgaaaattggattcaatctttgggcctatgctactgg
+aacctgatcgacaaaatttcaaacatacgttaactccgaaagaccgtatttttgcggcta
+gaatagtcagtcgcttggagccatataccttaccacttaaacgacgtgctcctgtagttg
+aaatataaacagaacacaaagactaccgatcatatcaactgaagatctttgtaactttga
+ggcgaagcaccctcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgat
+tgggaccctaaatcttgacgaattgctaagaggctcagagctaccactgtaatttctcta
+gagcccataataaatgaacgatacatccgtaggtagcacctaagggattataatggaagc
+caaatgcagttaataatattatatactggcgtacacgattcgacggatctctcacatagt
+gattcacgacccccccctttgattgacacagcgtcagcattttgcaagaacgatcttctg
+catagggtgcgccaccgtaaggatgacgtcgaagctacaactgggtataatttaccatgc
+ttccctgatgctgagtgcaatacactaagaatgagtttttaccccatatcaccagtattt
+gttctgttattgcgaagaaatggctatgctgagttggcgactaaagtcacccatcctttt
+tattaggtaaccccctcccttaaactaactgatttgctggagctgccctgcatacatata
+ctttatcatttatggacgtccgtgacgcttattatccaccatagtcgatatgctacacgg
+attcattaatggatcgtaggagtttaagttatatttactaagatcggtctcggctactat
+cccgccttacccggcgctatttacggccatttttaatatattgacggtaattattcctat
+ggtttcgaccgcacgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaa
+atattgagtccctaccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagt
+ggttattaaagactatctattacaccttttgttttctgtcgtagtatattaaagtctaga
+agccttacaggaaaatcagggttatacagccgatactccgcagcatgaatcatcgaggag
+gtgtcctaccatcgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatac
+aaagtaaatatctcggctttatgtgattgggaggggcctactcaaacatgatgacttgac
+ctaataatcactgtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatg
+gttaatatgtaaaaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaatt
+agctgcgtcgagcattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttc
+tacgaatacacccttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactg
+tataaagtggaagtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttct
+taaccataggggcttcttaatggcccactacgcacattttgttcaagcccgagagggaca
+tccccattacgggagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaa
+ggccactgctcaagttattgacgtgggagtattacatcggaagcctgaatcccacactat
+gatggtctgtacaggcctagggactgcgtctagacggtattaccggcttctaatcatacg
+atcgtgagtcttaacgggaagtaaggctcacacctaccccaaaccatttatctatgtaag
+tataaaattgtgcgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcac
+ataagccgctttagatttcacaaataccaatgcggttaaaaacatccttgagtcgtacat
+acaccatactcgcgttaaacggatataacagaagataataaatccggatgtggagtcggt
+gtaactatagaaagccaagtgaaataatgcttaccagtcatttagctatacggctttcat
+ttcatgtcaagagggtggagtttgacctgtacagttgatatatcaccgatacttagaact
+cacctaaagctaaaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggat
+tcattatacataagacacgatgatctgctttttcaggttgcgagatgttgcctatcgtca
+atcgagtcctgccttacaccacttaaacaaaagtattgacagggaacctattttcgaggt
+attatatagtccagcttgaatatcaatttgacagttaacctagtgaaaatcagtaagagg
+aaatacgccacattctccagtgaaattctacgggttatcgtctagtccaactatcaatta
+taactcacgagatataagtaaattctcgtacttggcctgatttttattatactttggatc
+cttagtaaacaggaagggagaaaccttcaacgaaaaacactggattttgttttactctca
+aagctcttatatgacggaaataccctgtcaagtcttaactttattactagactaatgaaa
+tgggcttggggtggccagaatcatagtacaatttagcggatacactattcggactttcct
+atcggctgtctggttggataagtatggggactaataggctagacatacctatacttaaac
+tatacaggcgtcatctatctctgcaactttggagttccctgatgttctcccgccctttgg
+gttcacatcttctataccgacacccctaataacgattagtttgtgggttagagtaaatta
+atacggttaatattaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctag
+gcagagtatatgtcacgaagtataactaccctaatgataagctgtaggaataaaattaat
+gctgtctctaagcgaagagatatttccgactctgttttaatgacgaatctcattacttct
+gacttgcaaatgttcaatatggcacggtttcacggcacctttgtgacgcatataatgaac
+ttagaagattataacgacggaactttatatgataatccgttacgattaaagaatctgtta
+aatatcataatggcattcagttctagaccgtgcatcatggtaaacttactttctctgcat
+ggcgacatacatttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaa
+tattaagagaagatgatcagaaaatccattcgctcaatttttctgacgtacgtctaattt
+atcctaggagacaaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaa
+tactcaggtcctgaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcg
+tgacataaatgaatgatacttttccaagttcagttaagtgaatatgtttaacatacccgg
+cttttcgatcttaagctgacgctggacgtgcgagtaatgtcagtctcttacatacactag
+tgactccaagtttcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtatt
+gacgcgaacttgttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgcta
+atatataagttagatcgcattagatgctaatctgaatacttatagacgaccttcaacgag
+aacgggtaccaccttgaggctagagttaggtgtgaaacgacaggtagggacatataaaat
+ttgagtgcggctttagttaagggtttaattacctactcaaacatcacgctcgcgcccttc
+gtacgtaatcgaccatctagaggctaaggggactgtactaggtagtgattaatgatatcc
+tagacgcacgtgccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtc
+ctccaactcgatcactttgttggcgtcaaagaaattacgatatctaaatacttataatac
+aataaccaaggatgagaatgactcatcgcgttggagttatattgcttgaagttctatgga
+atgaaagcacgttatctgccgtcccaatatctccagtgagctaattcattggacggtcca
+ctttgatcaatccccgaggagatgttcggacactttagtctgtaacacttagcgttgaga
+ccacgaacaattgattactcagtcttgaaggtgttttccaaagttcattttaaataagac
+tacgataggcctttcctattgatataaactacccggctctgttgttcgtgtgagtcgtac
+ttctctgtgtttttctgattatagcaagattcgattcttagtgtaaacagcgatttttat
+ttgacccgtcaatgagaagcgcataggatctaagcaaaattatcaagttgtgccacaagg
+taagatctttccagttattgcaggtaggatgtatcccacgttgatagtatgaggtctgac
+gtcaactgtctaggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgaga
+acgcagaactcccactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaag
+ccctcatcatctagatctcgacctcatctgccctcttgctccatcattttctacacagac
+tactttcctatctacgttagtataattgctttctatcttagtatcatttagagcttctcc
+gtcaacaggttcgtgctattaaagttagtacgaaagggacaacttgtagcaacgcattta
+atcggttttcgactacttcgcacaaaatcagataaagaagtttgtcattctattagacat
+tgaattgcgcaattgacttgtaccacttatgatcgaacactgaatcaagactgtgattaa
+ctaaaatagacaagccactatatcaactaataaaaacgcccctggtggtcgaacatagtt
+gactacaggataattaattggactggagccattacattctctacaatcgtatcacttccc
+aagtagacaactttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacat
+tggtagttcaatagtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggata
+gtaggtactgataaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttg
+gttaacaggatagtctatgtaaacttcgagacatgtttaagagttaccagcttaatccac
+ggtgctctactagtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgtta
+tcctatcaacggttgccgtactgagcagccttattgtggaagagtaatatataaatgtag
+tcttgtctttacgaagcagacgtaagtaataatgacttggaataccaaaactaaacatag
+tggattatcatactcaagaactctccagataaataacagtttttacgatacgtcaccaat
+gagcttaaagattaggatcctcaaaactgatacaaacgctaattcatttgttattggatc
+cagtatcagttaaactgaatggagtgaagattgtagaatgttgttctggcctcgcatggg
+gtctaggtgatatacaatttctcatacttacacggtagtggaaatctgattctagcttcg
+tagctgactatactcaaggaaccactgctcaaggtaggagactagttccgaccctacagt
+caaagtggccgaagcttaaactatagactagttgttaaatgctgatttcaagatatcatc
+tatatacagtttggacaattatgtgtgcgaaactaaaattcatgctattcagatggattt
+cacttatgccttagaaacagatattgcccgagctcaatcaacagttttagccggaaacaa
+tcgaagcatagggacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtca
+cgaagcgcataatagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgca
+gcagtctttttggggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaac
+tctgaagtagctcgagtactcattaaagtgtaacacattagtgaatatcggccaatgaac
+caaacgcttcccggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaa
+agcatccctttacgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaa
+attctcatacgtgcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtg
+ttataccaactcgctttttaactactatgctgtagttctacaggcatagtggccagtatt
+ttctaacttctctggatagatgctctcactcctcatccatcacggcttcagtttacgtct
+tacttgcttgttcagcaacggatggaggcattaagtatcttcactgttccctaaaattgc
+tgttcaatatcaaagtaaggacgatacagggaaagctcaagcacactcattgaatactgc
+cccagttgcaacctcacttaatctgacaaaaataatgactactctaagtgttgcggaagc
+agtctcttccacgagcttgtctgtatcacttcgtataggcatgtaactcgatagacacga
+acaccgagtgagaaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcgg
+atataagctggagatcactcacgcccacacaaggcgctgctacctctttattccaatgtg
+taagaatttgctaacttcatttctagaccgcagctttgcggtcataatttcacggtacgg
+acccttgggttagagacttgataacacacttcgcagtttccaccgcgcacatgttttagt
+ggcttctaacatagaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccg
+ttaagccataatcaattgaaagccccgtgagtcacatctaattggttgtactgcgcattt
+agctatcctttagctgactcgaagagattcgattcctaatataggttaattagatggctg
+ccgcgcgaagtaaaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaatta
+cttatgagtagttccaagttcgctacgttatgagagagattggaattaagcaaatatgtt
+ttatggtgattttgggatgagaaggactgctaagtacggctactaaacaaatttctaaaa
+ccgccatctaccttatcttggagacatttaagttgtatatgtcactagtctagcttttgt
+ctgtgggacgcgttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatct
+aagaaagtagtggactattacaccaagcacgaatgccagggaactgctttcttgctcagg
+acctcgcgacaaggtaccccgcataagtcctagaattacatttggtcagcaatgctgaca
+tttgaccgtgaaaacataattttaatcagaaggcagctcacccgcttgctctagatctta
+tctttgtatgaatgtcagaatttactgcaatatccgttccgaatagtgagggcttagtat
+agttctctgtatacaggtcacatcaaactccccctgtcctagtacagctctgagctttaa
+ttaattgcatacatttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcg
+tatagggcaagagaagcaacaaacaactagcccgactcacgttcatccgccgtatccttg
+ttcagttcttactccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatca
+aaattaaaatcccgcttgaggttgacaattaaaacgctgagcagttatcggctattagat
+agtggggtgaaagtaattggctggaattatgttaaaacgtgatattaagctaaaatacgc
+tacttgttgccgacctaattcagtcattcgatattcagttagagccaagaataacaagct
+tgtataaattgaacggggtgcactaaacgatgtgttactctaatattcagcttggagtat
+acctgaaggcgaattcatgtatcggccaataataagacgttgaagatcacaatttggact
+agcaaaagaaggtgatttatgcgtggggattgagtccactgtacgagtacggtctctgga
+aaattataggttcagggaatataaggaagtaaagataattaccaagagatttttggtatc
+gctatgacccagaggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgca
+tatttgacggacttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaac
+ttcaattattactactctttttttcctagggtattgtagaggccagtggacaaaataaat
+caaatttaagatgtttcggacattaacatcccccgtagcatagaaatcatcagttatcca
+atctctcatcgagcttttacaatttctgctggcgctatggacagcatatgccgcgagacc
+tccgcaagactcacttgatcactgtaagtatcttcattagaggttagagcctatagttaa
+gctgctgacctagtaaaattggtattttctaattttattgctcaagttaaaggttagtga
+agggataatgacgttatttttgaacaatgggttgtattcaattttatatcacgaatggaa
+cccttcattcccggcataatactagacgacacgaacaagctccgatctatcagccaggca
+cgtgttaaggtttaattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaactt
+agggtcacgatgagtttttcaggactacttattacctattaataagttaacatgagcctt
+cataccccgtaagacaatacatactccaccaattagaattctgagccatcttatcttttt
+gtatcatcgaagggtatggccgaataggttaattagttactcctaacgtctctacaggca
+tgcatttgacgcaccttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagca
+tcaaaaatatagtccacggtttccggattaccaaacgcggcaaagagaaacattgtatcg
+acggagataacttaatacagaaggaaggggcatcttcgaatacggatgaataattctatc
+tgtttattctgacatcttgttttcaggttaatcttacgcattcaaatgacgcctgcccca
+tgcgtgcgcaattattttctaatattgacgagagcaatctcactccttttgggtctattt
+atgttttattgaggcacaagcctatacagaacaggtactattaaggccgtgagtgtgaga
+ctcaaaccgtggaaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggca
+atccttaccaaaatcagatgctatccttaactttgggctgcatttaagatggcggttgga
+ggcctgtgagaatcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagat
+cacacactcattccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagt
+taagtaacaacttgggatcgcatacttataaaaattatatgttaaactttcacaaacgct
+gaagtccaaagtaactagcccaaacgcctcgagagtcactaggtattaatggtgtttgag
+ttcctgtgaaatagtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaata
+aggcttgcttgcacggaggtatgatgtttactgactctacaaccctaattttccagtacg
+tacattcattccaataggttagttctcaaagtgctatacaggctcctcaattgatgatat
+gcttcagccgctctatggatattagctcattttatttaggaagcccgcttagaggcttac
+tatgagggaaatgccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttaca
+tagaatttgaattaaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatat
+tacatatagatataggatcattttttaaagctgtactaggtttgatcgacaatcttatgc
+tatactatatgatgtaaccctcataatcaataccgatcgtacgatcctagcataggtggc
+aagcgattttatgccgattattgtgttaaatagtctgtgagtgtgattatcagggctacg
+ttggtagaggggttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaa
+ctgatataataaatccccttacccaaacaccaatcccgttgaatcaactaccataacgtc
+tcccatataaattgcctacttgtttgcataaatctgaatacataacaccattgcaccttc
+ttgtgttccaatcccgttaagattgccttgtcagatgatatgcaagaacaatagcatttg
+ctagcaattattaacagctcttcgaattgcctccacataacgcgggagggtatattttaa
+tttggcaaatactaagtactgttggcgtcatatgctattaacggttggatattaagttat
+gtcagccgtaagcaagagtgggcgaaatattttgttacccagtgagagcactcttagagt
+ttggatacaataggccatatgttgacttaagaggacgtaactacgccgtacaccattgtt
+caaccgacttcttggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgt
+gttagggtatactacaaatccgaaaatcttaagaggatcacctaaactgaaatttataca
+tatttcaacgtggatagatttaacataattcagccacctccaacctgggagtaattttca
+gtagatttactagatgattagtggcccaacgcacttgactatataagatctggggatcct
+aacctgacctatgagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagt
+aagttgttgctgttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaa
+acaaatacgcaatttagacagaatggtacggtcatgaatgacagtaattcgaagtgctag
+accaacttaaaataggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatgg
+tgcagtatcgacgtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagta
+tatcacgtgtttctgaaccggcttatccctaagatatatccgtcgcaaactttcgattta
+gtcccacgtagagcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagttta
+aatttggttacatggttaattttgaccgaagcatcgcactttatgattgataattggatt
+caatatgtcgccctatgcgaatgcaacatgatccacaatttggctataagacgtttaatc
+cgtatcacactttgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaa
+ttataagtactccgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatc
+atctgaagatatttggaactttctcgacaaccaccctcgtactcaatacttacactaatc
+gacaggcacacgcaacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcga
+tgagcgtacacgcttatttctctagtcacaattagttatctacgagacatcacgagggag
+caaataagcgatgttatggctacacataggcacgtatgaatatgatataagccagttaaa
+cagtcgaaccatcgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaa
+gctgtttgaatgtaacttcttctgctgagcgggccccaacgtaaggatcaactagaagag
+aaaactcggtattagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtct
+gtgtaaccaatataacatctatttgttatctgattgcctacttatggctttgcggtcgtg
+gcgactaatgtctccaatccttttgaggtcggtaccaactccctttaaattacgctgtgc
+aggctcatgcactgcatacatatacggtagcaggtagggacctcacgcacccttattata
+atcaatagtagttatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattt
+tctatgtgccgtctaggcgactatcacgcattaccaggcgagatttaagccaattttgaa
+tatagtcaacgtaatttttactatgggttccaccgaaacgccttgcacaactaagaatcc
+cataaaatatcgatatcaaataaaagattgtgtcaataccttcatatatattttttcggt
+tgactaacgtgaactaaggttaggggttttgtatgtctatataggaaacagtttcttttc
+tgtcctactttagtaaagtcttcaagccttactccaaaatcacggtgattaagccgttac
+tcagcagcatgattctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgt
+attagctagggagacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcg
+catactcaatcttcagctcgtgtcattataatatctctcccccacgcttttcactagata
+tgccgtgtaagcaaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctg
+taggggtacttaatgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagcc
+ctcacctgacttcatgtaaatggcttagaagactccatgatttaataaatactacgaagg
+aaagactggatctaaagataactctagtaaggccaactcccttcaatgctgttgccagtt
+ataatccaagagctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaa
+gttggttctagccagacagccacataccctgtacgggtgtattactaaaactggtccggt
+attagttcaccaagggaggaattaggcaaaggatctaggtatgcaagtcggagtattaca
+tccctaccctgaatccatcaataggttcctctgtactggccttcgcaatgagtattcaag
+gttgtacagccgtataataataagatagtgactatgaacgggaagtaacccgctcacctt
+ccccaaaacattgttatatctaagtattaaagtctgccgtagtgttaatactcgaaaata
+aacaactggcaaattacaccgcacttaagccgcttttgatttatatttttccaatgcgct
+tttaaaaataattcagtcctacatactaattaagacccttaaacggagatatcacaagtt
+aagttttaaccatctcgactaggtggaactatagatacccaactcaatttatcattacct
+gtaatgttcctagaaggattgcatttcatgtcaagacggtggagtttcacagcgaaactt
+cagtgtgaacagattctgagaaatcacctaaacctattagtcagagcacccggttagaac
+cagttgtcaaaaaatagagcggttgcatgagacagaagtaacgatgagatccgttgtaac
+gttgagacatctggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactag
+gcaaacccaacataggttagtcctatgtgatacgccacatggtatatcattttgtaacgt
+tacctagggataatcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggtt
+atagtctagtccaaagataaaggataaagcacgtcagagaactatattagccgaatggga
+atcattgttaggagactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaa
+aatctcgtttttgtttgaatctaaaagagctttgatgaccgatagtacctgtatactagt
+tactgtattacgtgtctaatgatttcggattggggtccccagaatcagacgtcattgtag
+acgattcaagtttaccaatttaatttcccagctctccttggagaactatcgccaataatt
+gcagtcactttccttttctgaaacgataaagccgtcagagttctctgcaacgttggactt
+acctgaggttctaacccactttcggttctaatagtagttaacgacacaacgaataacctt
+tactgtggggctttcacgatattttttcgcttattattaatggttacgtcataagctggt
+gtccaaattaaggttaccggcttcgcagagtagttgtatccaagtataacttccctaatc
+ataagatcgaggtagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtg
+gtatggacgttgctaattacttctgaagggaaattggtcattatggatacgtgtctacca
+tcaggtcggacgcagatatggttctgtcttcagttgatccaccgttctttataggataat
+aactgacgattaaagattatggtaaatagattaagccaattctcttcttgtcagtgaagc
+atccttaactgacttgctctgcagcccctcatacatttagctattcaaagtaccggctcg
+tttcaaactctcccacctttggaagaggttgtcaacttgataagtatatcatttacagca
+ttttttcggacgtacctctaatgtttcattgcagaaaattagttttttctatcgcacatt
+ttgcaagtaacgttagagacacaattatctgcgaatgaactgctagatctgacgaccggg
+agcctcgcaaatatcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggta
+agtcaattggtttatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagta
+atgtcactctcgttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattc
+tcgagcccactcacgatatgtagggacgacaacttgtgcggcttatgaattgtctggact
+gcgggcgagggtccatatctccgaagttagaagggacatacctttagatgataagatcaa
+ttcttattgacgaaattcatccacaacggggaacaacttcaccctagacttacgtctgaa
+aagacacctagcgtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctac
+gcaaacttaaacctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgt
+actacggaggcatgaatcatatactagaaccaagtgcctgtgatattaacaagatgatcc
+gacgcgagcaccgtaattctaggcataaaactccagcaatttgggggccgaaaacaaatg
+acgttagctaattaattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgac
+gtatattcattgaacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctg
+tctcctatttcatgcgtacctcctagttgataattccccgagcagtggttaggacacttt
+tgtcggtatcaagttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgt
+gaattagttaatttttatgaagtcgtcgagacgcagttcctattgatttattctaaacgg
+agatgtgcttcgtgggactcggaagtagatctgtgtttatgattattgctactttagatg
+ctgactgttaactccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacct
+atagtttcaagttctgccacaaggtatcatatttacagttagtgctggttgcttctttca
+aacgtggtgagtttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttc
+aaccctgttccagagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgat
+agtttgcaagagccggtgttaaacacatattattattgttatccaactaatcggacctat
+gcataaagcattgtctaaacagaataattgcctatatacggtagttttagtgatttatat
+cttagtatcagttagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaag
+cgaaaacttctacaaacgaatgtaagcggttttccaagtagtacctataaatcacagaaa
+gatctgtctcagtatagttgaaatggtattcagctagtgacgtgtaccaattatcatagt
+tcactcaagcaagacgctcattaacgaatatagacaagacactatatcatataataaaaa
+agaacatggtgctcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaa
+ttcgctactagacgatcaattccctacttgtcaaagttgaactggtacgttcttggaatt
+aaatatgattgcgctggaccaaattgcgacttcttgagtttcagggcaaacgattgagcc
+ggaggatgtccgtctcttacctttcttgcttatgataaacgacggtccctgtacatcact
+gggaattctcagcaaaaataattgggtaaatcgagactcgatgtattcggccacaaaggt
+gttagacgttaaagattattcaacggggcgataataggatcataaccggtatgcaagcgc
+attgaaagagccatgagatccttatccgataaacgctgcacggtatgtgcagccttattg
+tcgatcacgaatttataaatgtagtctgggctgtaagttgaagacctaagttataatgaa
+gtgcaataccaaatcgattcatagtggattatcagactcaagatatctcctgataaatta
+cagttgttaagatacggataaaatgagatttaagattagcagcctctaatctgtttcaat
+cccgttggaatgtggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttg
+attcttgttctgccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagct
+tgtgctaatctgagtatagattcgtagaggaatattatcaagcttccacgcctcaacgta
+cgtgtattggtcacacaagacactaaaagtggaagtagcgtaaactatagtctagttgtt
+aaatgctcagttcttgttatattcgatatactcttggctaatttatgtctgagtatataa
+aattaatgatattaacttgcatttcacggatcccttagaaaaagattttgaccgagcgca
+ttataaacggttacaccgaatcaatagaagcatacccaatagctttctttgaatttattg
+cctgcgcaacttggctgactctctagatccgaataattctatatggtcgtgacgaaacta
+gttcattactgtttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaat
+tactcaatgatacgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaa
+atgtctgattatccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcga
+cgcgaggggaaccttatctaactatcattccatttaccgggtgactctcgatgcaggatc
+cgattgggataaattgcccagaaatggctcattcctgactaagggtaaggccgttctcag
+caagggaaccccgcgaatctaggcttataccatctagattgttaactacttgcctgtagt
+tctacagccatactggacagttgtttctaaatgatcgggattcatgctagcactcctctg
+aatgcaccgcgtaagtttaactattacgtccgtgggcagataaggatggaggctgtatgt
+atcttaactgttacctaatatggctggtaattatcaaagtaaggaccttaatgccatagc
+gctagcaatcgctttgtatactgaccatgtgccaacctctcttaatctgtaaaatataat
+gtcttagctaactgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctat
+agccagcgtactagtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctg
+tctctctacagcttattgatgaggattgaacatggacatatagctccccctcaaaagcag
+atgctacctctttattccattctcgaacatttgccgaacttaatttcgacaaacctgagg
+tcacgtcttaatttatcggtaacgtcacgtccctttgagactggataaatatattaccag
+gggccaacgagcaattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaaga
+cggcgtgcgtctcgtgcaactcacttaaccaatattaatgtgaaacccccctctctcaca
+tcttatgcggtgtactgccctggtacatttcctgtacaggactccaacagtgtagattcc
+taagatagctgttggagttgcctcacgccagatcgaaaaactgaataaactagtgagctg
+agctgcagaaataccgcttaattacttatgactagttcaaagggacctacgtgatgtcag
+acattgcaaggaagaaattaggtttgtgcgtcattttggctggactagcactccttactt
+cccctactattcaaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtct
+attgggaacgaggctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatg
+agcacagtatgcaattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggc
+ctgggaaatcagttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtag
+taaatgtccgaacctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcac
+ctaacccgattcctctacttagtagctttctttgattctcagaattgactgcaatatcac
+tgcacaattctgtgccattactagacttctctgtattaacgtctcatcttactaacactc
+gcctaggacacatctgagagtgaagtatttcaatacatttactgaaatcttcagttctaa
+aatccccgaataaggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccac
+tcaccttcatacgcaggagcctggggaacttagtaataactatttcggcagacaaagctt
+ataacaagttgccggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacg
+ctcacctggtataggctattagatagtgccgtcttagtaaggggcgggaattatcggata
+aactgatattttgataaaataaccgacttgttcacgacataagtcactaaggagatttta
+tctttctccaaagtatatcttccttggataatttcaaagcgctgcaatttaagttctgtt
+actagtttatgctgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataag
+aagttcatcatatcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgta
+aactggacgagtaccctagatggaaaattatacgttaagccaagatttcgatgtaatgat
+aattacctacacatttttgctatccataggaacaagagctgttctataggctcgtggcat
+acgaacatttgctgccgctatgaatattggaagctcttcaactacagactctattcttaa
+ttgccgtcgaaaatgggccgaatcggctattattaatactcggtttttccgaggggattg
+ttgtcgacagtcgtaattattattaatattgatgttggtgaggtcatttaaatacaacct
+tgcagacaatgaataagggatccaatctctcatactccttttacaattgctcatgcccct
+atgcaaaccttatgccgccacacctccgcaactctctcttctgaactgtaagtagcttca
+ttactggtttgagactatactgaagctgatgacattctaaaatggctattttcgaatgtg
+attcataatgtttatcgtttgggatggcagaatcacgttatttttgatatagcccgggta
+ttctattgtatagaacgtatgctacaagtcattccccgaagaagactagaagtaaacaac
+atgcgaccatcgttaagccacgcaaggctgtagctttatttcccgataacctatcttcca
+taaatagcggacagcaggatactgacgctcaacatcagtggttatggtctaatttttaac
+ttttaataaggtaacttcagcaggcatacacagtaactctttaatttataatcaaattag
+aagtctgacacttcttatatttttctatcatccaacgcgatcgcccattagcttattgtg
+ttactaataacgtatctaaaccaatccttttcaagctactgcctatattgtcaatatata
+caaacaacaggatagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatac
+ccggaaatcacaaactttgtagacaacgagtgaaatttatacactacgaagggccagcgt
+acaagacccatgaattaggcgatatgtttattctgacatattggtttatccttaatctgt
+cgctgtaaaatgaagccgcccccatccctgcgaattttttttcgaagattcacgactgaa
+atataaatacgtttggctatatttatgttggagggaggcaatagcctttactgttaaccg
+aagatttagccagtgagtgtgacactaaaacactggaataaatgcaggcgttcttctggg
+taaaaggtttagtcaatctcgcctataagttcatatagctctggatataattatctggcc
+catgcatttatcatggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtcc
+gaagtattccatgtacattaagatcactctctcattcatgcatcttggcttaacaaatct
+ggttgtccaagctttccaggcacgtatggtacaaattcggatcgaatacttataaaaatg
+atatgttaaactgtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtct
+caagaccgtgtaatgctggtgcactgaatgtgtaatacggttagaagggattagttatgt
+tacaaatccattgaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaag
+agactaacattattttcaacgacgtacatgctttacaatagggtacttatcaaacgccga
+gaaacgcgcctatagtgatgttatgattatgacccgatatccattggaccgaattttatg
+taggttcccagcgtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtc
+tctcccagatgaaaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaata
+cctttaggggtaacggccgctgatttcatatagatatacgataagttggtatagctctac
+taggtggcatccacaatcgttgcatttactatagctggttacaatcataatctataccgt
+tccttacatactaccatagcgggatagcgtttttttgccgttgattgggtttaagaggat
+gtcagtctcattatatccgattcggtgggagagccgttgttttcaaatcgcacactttgt
+gacataatgtacaagataacaaaactgatataagatataaactgtcaatatcaccttgac
+acttgaatcaaagtaaattaactcgcaaatataatttgactaattgggtgcagatttctc
+aattaataaaaaaatggcaccggatgggcttacaagccccttatcattcacttgtatcat
+gatttccaagaacaatagaatttgctagcaagtatgaacagagattcgaattgcatccac
+agtacgccggagcgtttattttaatgtggatatgacgatgtactgttggcggcatttgct
+agtaaccggtccttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggt
+acaatctcagagaaagattacagtttggtttaaataggacttatcgggtcggaagtggaa
+cttaataagcagtacacaattgggcaacagacgtcttgcctattacaataggattacaat
+gcgttagatttcagacacgttcgtgtttggctattcgtcaattccctaaatagttagacg
+atcaactattatcaaagtgattctttgttcatcctccattcatgtaacagatggcacact
+acgcataacgccgaggaattttaacgagatttaagagagcagttcgggcacaacccactt
+gactttataacagctcggcagcataaacggtaatatgtgacaaatttccaaacgttataa
+gaacgtatgtgtacttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagc
+ctaacttatctattggttttgctataaaagaacaaagttacacagaatcctaagggcttg
+tttcacacttatgcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaac
+cttaaaacaatgcgcagatattggtgatggtgactccgggtatgataatggtaactgttg
+accagcgcccacctcatcgaagtatagaaagtggttaggataaggatgagaccgaactta
+tttccggccataactttagattttctacctagtacacaacatcagggcggacacgaaacc
+gccatcacatcatataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcg
+aactttagcaggcatatggccattatatatggccccagagcagaatgctacagcagacaa
+aatttggatttatgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacga
+cagtgcacaaagtgtaagttacaattattactactcagcagcttctgcaatgataaaatc
+ttatcatacacgtcacatatgataatatctacttagggggaacgggctccacaacctaca
+tagtactcaatacttacactattcgacaggcacaccaaacctgtacagtcccaaaagatt
+gagtcaactttgcagtactgcagatcacagtaatagcttagttagcgagtcaaaattagt
+tttctacgagactgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgta
+tgaatttgtttgaagccacgtaaactgtacaaccttagagataagtctcaggctactaaa
+aacacgttgtggcactaacaggatcatggttgattcttacttattcggctgaccggccca
+ataagtaaccttcaactagaacagaataatcgggagtagtttaattcagtcaaggtgcag
+gtctcattgtaactaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattc
+cctacttatggatttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaac
+aacgaaattttaattacgctgtgcagcctcatccaaggaattaatagaaggttgatggta
+ggctccgaacgctccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcc
+tgacgtcgtggtgttcgtttttgttatttgtgccctatacgagtagataaaccatgaaca
+gcacagtgtgaacccatggttgattttaggctaccttatttttaatttccgttacacaga
+aacgaattccacaactaacatgccattaatttttcgatatcttataaaagatggtcgaaa
+ttcattcatttattttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttct
+ctttagaggtaaaagtggctttgatctcctacgtttggatactagtcaaccattactcca
+tttgatccgtgagtatcacctgtctaacatccagcattatgactcctcggcgaagaaaag
+acacacttcttagagtcgatgtgtattagctagggacacagttgtttaatacgatagtga
+gcccagggagggcagtgcgtcccccagtagatttattcagctagtgtaagtataagatat
+ctcacccacgaggttcaagtgatatgcagtcttagaataatacttatcctgaatttcgat
+attatgggtacttcaataatccgctagcgctactttatgtctcgttggacagcaggacac
+atggcagtcttaaacactaaagacatcacctgaatgaatgtaatgggattacaagaatca
+atgaggtattatatacgacgtaggaaactctggatatatacagtaatctagttacgccat
+cgcacttcattcctctggaaacttagaagacatcagctgtacgtggaggaaccagacccc
+cgtatgtagccaaatagaaccaaagttgcttatacaaacacacccaatgacaatggaccg
+ctggagttcgtaaactcggaacgtagtactgcacaaacccagcatttagcaataggagct
+acgtatgcaactcccacgtggtaataccttcaagctatcaatatataggtgcctagctaa
+tcgcattcgcaagcagtattcaagcttgtaaaccagtataataattacagaggctctatg
+aaacccaactttccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgc
+ccgttctgttattacgcgaattgattctactccaaaattaaacacaaattatcaaccgtt
+tcatttatatttgtcaatgcagctgtttaaaataaggctctactaaattataattaagac
+acttattaccagatttctctagttaagtttgaaccagctcgactaccgcgaaagatacat
+tcccttctctatttttcagttcatctatgggtcagagaagcattgaatttattctattca
+ccctcgtcgttcacagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgt
+ttagtcagaccacacgcttagaacaagtggtctaaaaagactgccctggaaggagtaaga
+agtatacagctgatccggtgtatccttcagtcatctgccctatactaattacacgacgca
+aggaaaaataggtttattttctaggcaaacccttcataggtgactccgatgtgttacgaa
+tcatgcttgagaatgtgctatcgttaccgacggataataacgatctccaatgaaccaaat
+gtagaatgtctattgattacccttttactattcgacttagagataggagatagaacctca
+gtgtacttttttagccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatc
+caaccctcttaaagtcttccatattatatcgttgttcgtggaatcgataacagatttgtt
+gacccatagtaaatgtatactagtttatgttgtaagtgtagattgttttccgattgccgt
+ccaaactttatgtcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatc
+ctgcgagatcgatcgccaatttttccagtcactgtaagtgtaggtttagataaagccgta
+tgagttatatcataagggcctcggaaagcagcttcgaaccaaagttcccttataatagta
+gtttaactataaaagtatatactggtctgtcgccctttcacgatttgttttaccggttta
+tgaagcgttacgtcattagagcggctccaatttaaggttaacggcttccatgtgtagttg
+tatacaaggataacttaaagtatctgttcagcgagctagttaagttatcctcgatagaac
+acaactcagaggtcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattg
+ggaattatcgatacctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtg
+atcctaccttagttagtgctgattaacggaacattaatgtttatcgttttgagatttagc
+caattctctgattctaactcaagatgccttatctgacgtgctatgcagcccctaagtatt
+ttacattgtaataggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctac
+tggttaactatataatttacagctttgttgagctagttcctctttggtttaagtcctcaa
+tattagttggttcgagcgataagttggctagttaccttagtcactatattagatccgaat
+gttatgcttcatctgaagaccgccaccctccaaaatttcttttaagactcacttattgca
+aggtgtaggtgaattcggctcgtttctcaagtggtgtatctgtacacgagtttccatatt
+ttcatcaacagccaccgcacacttatgtcactctaggtattaaaagtcgctctacaaggg
+gacgcaattaagaaacagacatgctagtcaaaaataaacatagcgaggcaccactaattc
+ggccgcttatcaatgggatgctctgcgcgagacgcgccagagctcagtagttagttcgga
+catacatttacttcagatgatcaattagttttctacaaatgcttactctaccccgaaaaa
+agtcaccagactcttacgtctctttagtatccttccgtcttatataaggtcagtcccccg
+tttcggtaccctggaatttactaagaataatgaaacagcccccaaggacgtacgtttaca
+aatgatagaccagatcgcctagcttattccgacgcatgttgcatagaattgaaccaacgg
+aatgtgagagtaactagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctg
+atagttcggccacgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcga
+gctcaagcaagcttacacttcctcggatattcagggaacttagtgcctttgaaagatacg
+ttgatcaacgaaaaattgataatggctcatatggaatgcctacctcatagtgctgaatta
+acacagcactgcggacctaacttttcgaggtttcaagttcacgtctcaaaacctaatagg
+ctggaatatgtagggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaag
+tgaatattctttttttctaaaagcagatctgctgccgggcactacgaaggagatctctgt
+gtatcattattgcttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgata
+gcacaacccaattcgatagtacatattgttgatacttcgcactaaaccgttcatatttaa
+aggttgtgctccttccttcgttaaatactggtgacttggtcctatctactattagctaga
+cctctggggaaccacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagac
+atcgcgcctccaccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattat
+tcttatactaatattagcaaagatgcataatgatttgtattaaatgtataattgaattga
+taagggtcttttagtcagtgatagagtagtataaggtagacattagaactcttaaccgga
+cgcagatttttcggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttact
+agtagtacctataatgcactgaatcttcggtcgaagtatagttctaatgctatgcagatt
+gtgacggcgacaaatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaa
+tgaaaagattgaatatttttaaatacaaaatgcgcctacttattaggggaattaaccaga
+ttgaaggccaatcctcacatgtaatgagataatagacgataaatgaaattcttgtaatag
+ttgaactgctacgtgatgggtattatatatgattgagatcctccaattgccgacgtcttg
+tcttgatgcccaaaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcat
+aaacgacgcgacatgtacagcactccgaagtataagcaataataatgcgggtaatccaga
+ctagatcttttcggactcaatgcggtttcacggtaaacatgattaataccggagagtagt
+cgagcttatcagcgatgcaagcgaattcattgtgccaggagatacgttgcagataaaacc
+ggcaacgtatgtcaacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaa
+cttcaagaactatcgtatattcaagtccattaccttttagtttcagactggtggagctga
+ctaaagttatatcatcattttgtacactggtttagttaacgataatttcagatttaacat
+gaccagacgataatcgctgtatatccagttggaatgtggtttgccagaaaggttaactta
+taatcaagcctctcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagt
+gtatttggagctgtagttataccgtgtgctaagatcagtagacatgacgagagcaatatt
+atctaccttacaagcatcaacggacgtctagtcggaacaaaagactctaaaactcgaact
+tcaggttaatatactatagttctgtattcagcagttattcttatattcgatattatcttg
+cctattggatgtctgactttagtatattaatcatagtatctgccatgtaaaggtgccagt
+actaaatctgtttcacagtgcgaattataaacggttacaaccattaaagacaacaagacc
+ctatagctttatttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaatta
+gtctatagggtcgggacgattctacggcatttctggttataatgacaacatggattgtgg
+cccgagaatcgctctttcattaattaagcaatcattacagtcttataagcgctacttccg
+agtggtagcaggtaactcgatataaggtcgcatgagccgaatagcttaaaaaacaggcca
+ccgaacattgatagagaataccgaccacagcgcaacctttgattactttcattaaattgt
+acggctcactcgacatcaagcttaagattgcgataatgtgaactcaaatggatcagtact
+gaagaaccgtaacccacttcgcagaaagcgtacccagagaagatacgctgttacaatata
+cagggtgaaattattgcctgttcttcgtaaccatttcgccaaacttggttagaaatgata
+gccattcatgatagaaataagctgaatgataccagtatctttaactatgtagtcaggggg
+aagataacgatggtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgct
+aacgaagctacttaatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaa
+agatagtatgagctataatatatgctagtagagaactctggaccatcatctatatgaata
+ctgattcgagcgtgcaattactttagcctgcgtactactgactctacaaaacactctgag
+ataagtttgtagtcagtaagtcgctctctataaaccttttggatgaccattgtacagcca
+cttatagatcccaataaatagcacaggagacagagtttttcaatgctcgatcatttgccg
+atagtattttcgtctaacctcagggcacctattatttgatacctaacctaacggcccttt
+cacaatggagaaatatatgacatcgggacaaacacaaatggtgggtggccaggagatatg
+acatggtggcgtctctaagaaacacggactccctctaggcaaactcacgtaaccaatttt
+aatgtcaaacaaaacgctcgaaaagattttgccgtgtaatgacctggtacattgactggt
+caggaatacatcactgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgt
+ataacgcaatttacgacggacatcagatcaagttatacagattatttaagtatcacgtgt
+gcattgggacataagggatctcacacatgccttggaacatttttgctttgtgccgctttt
+tcgctgcactaccaatccttacttaccagtatattcaaaggtcgttaacagaatgagaaa
+ggttagggctctaagttatcgtcgattgggatagacgagacatttgcgagcgccctccac
+ggatacgaatctcccatatcaatgtgaactggatgctatgcagtttagttcttacgtctc
+ctagtggtaaaaatcaaagtagcactcgcatagcagttattcagaacctaatacacaaaa
+ccgtcaaacattttctaattctaggtatgggccgatcataggagctaaggtgaaactcat
+aaatgttttgttagatctagcatcctaaaaagatgcatatactgagtagctggcgtgcat
+tctctcaattgtatcctttttaactgaactagtcggtcccatttcgtgactgagatctat
+taaccgataagattaataacactcgcattcgtatcagctcagagtgaagtttttcaataa
+tttgactgatatattaacttctaaaataaccctttaagcctcggatccgtttcccaatca
+catcaaaaattcttattccaactatctacggattaacaacgtgcatggggatcgtagtaa
+gaacttgttccgatcactttgagtatatcaagttgacggcccggttattattgaatagaa
+acattcacctgctaaattaaataccgcacatcggatacccgatttcagagggccgtctta
+ctaagggcaggctttgttcggtttaactgagatgttcattattttacagtatgcttcaac
+taatatgtaacgaaggacagtggatctgtctccatagtagatcttcagtcgtgaatttca
+taccgctcctatttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccct
+agtattctagacgaaaattttttctagttcatctgataatttgccaattcaaaaacaacc
+gctggtttcccggcgcattctctaaaatggaagtcgaacctagagccattatttgtcggt
+aacccatgagttccttcttttcagaagttaatacactgtggtcctatacagaggaaaaac
+agcggttatatacgatcgtggcataacaacattggatcaagatagcaatttggctaccta
+ttctaattctcactagattcggtattccactacaatatcggcagattaggattggatgaa
+taatcggtgtttaagtccggttgcgtctccaatctcctaatttttattaatattgatctt
+ggtgacctattgtaaataaaaacttcaagactttgaataacggtgaaaagatagaagact
+catttgaaaatggatcatccacagatccaaacattagcaagacactaatccccaactagc
+tattctgatcgcgatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaatt
+ctttttgggctttgttcgatggtgattcagaatctttatccggtcgcttccctgtagcta
+ctttgtggggatattgcccggggattatagggttgagatcgtttcctaaaagtatttaaa
+ccaagtagacttcaactaaactacatcagaacatcgtgaagacaccatacgcggtacctt
+tatttaccgataacatttcttcaagaaataccggtaagcagcataatgaccctaaacagc
+tcggggtatcgtcgtagttttaaattttatttaggttactgctcaaggaataaaaactaa
+ctatttaatttataataatattacaaggctcacactgattagatttgtctataagacttc
+gcgatcccccattaccggattgtcttaagaataaactagataaaccatgcattttctaga
+taaggcctttagtctaattagatacaaaaaacacgatagttgcatccttaatttattgtg
+tcaaacctggaaccttttaattacccgcaaatcactttatgtcgagactacctctgaaat
+ttattatctacctaccgcatgaggacttgaaccatcttgtaggagttatgtttattagct
+aagattcgtttatcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaatt
+gtttttagttgagtcaagactgatatataaataagtttccctagttttttcgtggtggga
+cgatattgaattgaatcttaaccgaagagtttcccactctgtcgcacaataatacacgcc
+aatatttccagccctgcttatgccttaatcggttactcaatctcccattgaagttcattt
+tgatctgcatagaagtttcgggcccagccttttttctgccaccttcctccaagctctgta
+gacgcactctaagattgatgctcacatgtattaattctacattaacataaatatataagt
+catgcatcttcgagtaaaatatctggttctccaacatgtcctggcacgtatcgttataat
+gcccatacatgtagtattaaaatgattgggttaactggatattaagatcatcgaaattgt
+aaagtcaaattaacaatactgtctcaagaccgtgtattcctcgtgctcggaagggctatt
+acgcttacttccgttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcc
+tacctgcgtgcatcggttagcaagagtataaaagttgtttaaacgaactacttgctttac
+aataccggtcgtatatatcgccgtgaatccagaagattgtcttctttggattatcaaccg
+agatcctgtggaccgatgttttgggaccttcacagaggactccaggtagagctcgctttt
+gcattaatctaagaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatg
+gaaaaacacagagaaacgtaaattactttaggccgaaaggcacatgagttattatacata
+tacgagatggtggtatacatcgaattcggggcatacactatagttgcattgtatttagct
+gctttaaataatatgatattaccttccttacataagacattaccggcataccctggtttt
+caacttgtggggctttttgacgatcgcactctcatttgatccgagtagggcggtgacccc
+tgcttttcaaatacaaaaatttcgctatgaaggtaatagattacttttcgctgttatgat
+agaaacggtaaatttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttg
+tgaataatgcggtcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatag
+aaacttatcagtcacgggtatcttgatttcattcttcttgtcaattgccgacataggatg
+aaatcagattccaatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaa
+gttgtacgcgtcgacgaagtggatagtatacgggccttttgtacggtgcgatcaactatg
+aatctcggcgagttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatga
+cgaattttcggctaggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggat
+tccattttacaagacgattacaatgagttacatgtctctcaacgtagtctttccctagta
+gtctttgaactatttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgc
+cattcatgtttatgatggaacaataagaataacgccctcgtatgttatcgacagtgaagt
+cagcagttcggccaaaaacatattcaatttagtacagatccccagaagttaagctaagtg
+ctctaaaatggcctaaacggttatcaaagtaggtctaattactatactaacgggtgcatc
+gtaataactgctgtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaat
+gtgacaaagaagccttagcgattcttgcaaacttaggacttcggattctcaatcttaaat
+gtccgaaaacgcaaagattcaaaaatttaatctatgagcagatatgcctgatggtgacta
+cgcgtatgttaaggctaaatgttgacaaccgcacacataatcgaactattgatagtcggg
+agcataaccaggtgaacgtactttgttcacgacatttattgacatgttctaaatacgtct
+caaaatcacggcgcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaat
+gccggtagtgtcaaacttcatgagaactttagctggcttttggccagtatttagggacca
+agagcactagccttaagctgaatattttgccatttatctactgttataactttaaaactt
+ggtggcaccagacttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaaga
+acaagcgtaggaattgagtttatattatatttaaactaaaagatgatattagcttctgag
+ggcgatagggctccaaatcataaagaggaatatattattacacgattagaaacccacaac
+atacctcgaatcgcccaaaagtttgacgaaacttggcagtactccacatctcagtaatac
+agttgggagagtctcaaatgttgttttattactcaatgaaccaccctcataatttcactg
+ctgttccattaaatttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaatt
+acagataagtagatgcataataaaaaaaactgctcgctataacacgatcatcgtgcattc
+ttacttaggagcatcacccgcacaataacgtaccttaaactacaacactattagaccgag
+tactgtaattcacgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgt
+gataatagtttgcggagaggattcaattattttccattgcacctactccactagattcga
+taaaagaaggtggtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaa
+gcatgtaagtgaaccgtcatccttccctaagaaacataaaggtttttaataatgtcgact
+gtgaactataactgcatcctttcctgacctactccggttccttgttgttatttctgaacg
+agaccagtagataaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccg
+ttgttttaagtgcccgtacaaacataagaagtcataatcttacttgaaattaattttgcc
+ttttattttttttcaggctcgaaattaatgatttgttttttttgaccttctagttacgct
+aatatgcggtcgcctgtggtttctattgagtcctataacgggatgggatctaatacgttt
+ggttactagtaaacaaggtataaatttgataccggagtatcaactgtataacatcaagct
+ttatgactcatacgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagcca
+ctaaggggtgtattacgatagtgacaccaccgagcgcactcactccccaagtagatttat
+gatcctacgctaagtattagatatataaccaaagaggttctagtcagtgcaactcttaga
+ataataattagccggttttgcctttttaggcctaatgcaatattcagctagcccttatgt
+atctcgcgttccacagcaccactcatggcacgcgtttaaactaatcaaatataatctatg
+aatgttatgccagtacttgaataaatcaggttttttataagtccttgcatactctcgtta
+tatactgttagagtcttaccccatagaaattctttcatctgcaaacttagaagaattctc
+agctacggggagcataaagtccccaggatgttgacaaatacaacaaatgtggcttataca
+aacactccatatgaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaa
+tccctccattttccaatagcagatacctatcctactacctcgtggtattaaattaaagct
+tgaaatatagagctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccac
+gatttgatttacagacgctagagcaaacccatctttaaacatataagtaaaaattaaagg
+gtgagtgcgtacgtgtttactagcaacttcgcttattaagacaattgtttataagccata
+attaaaaacatatgttcaacaggttcattgatatttgtaattgcacaggtttttaataag
+gatctacgtaagtataatgaacaaactttttaccagagttatattctgtactttgaaaat
+gctcctctaccgccttagagactttcaattagattttttgcagttaatctatgcgtaagt
+gaaccatgcaagggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataac
+tgtaggtctaatataattttcagttttcgaacacataaccctttgaaaatctgctattta
+atgtctcacctgcatgcactatcttctatactgctcagaacggctatacgtcactatgct
+ccaagtgacgatttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaa
+gtgcggactacgtgctctttacaataagccttgtgattgggctataggttaagtcccata
+ttaacgatctccaatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaa
+ttacagatagctgttagatactcactctaattttggacaacaatcccaatcttggggtcg
+tctatcgcctgaagctcgtaaatccttccatcttaaacgattacatattatagacttgtt
+cggggtagagatatcacagttgtgcaaacattgtaaatcgatactagtttatgttggtag
+tctagttgcttttaccattccccgaaaaacttgatctactatttcgacaacagtaaactt
+gaactaggtaagtgaaaacagagaatgcctcatagtgccactatttgtccactatatgta
+agtgtagctttacataatccactatgactgagatcattacggcctaggaaagcagcgtag
+aaaaaaagggcccggatattacgactgtaactataaaactagttactggtagcgcgccat
+gtatagatttgttttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatc
+cgttaaccagtccatctcgacttctataaaacgataaagtaaagttgatgttcagcctcc
+ttcttatggttgcatcgagagtacactactcagtgggaaatagatcggggttcctacttc
+agattgtattatctaggcaattgccgattgtgccatacctggataaaataagctacctac
+atgtgatgcttatctattatcgtcatactaccttagggtgtcctgttgaacgctacatta
+atctttagccgtttgagatgttccaatggataggagtctaacgcatgatgaagtttagga
+aggcagagcatcccactaagtatgtgacagtgtatttcgaaacgagacgttataaataga
+aaaaaggtccttctggttctattctgctgaactattgaatggaaagattggttgacctac
+gtactatttgcttgaagtcatcaatttgacggggtgagagacatatggtgcatactttac
+ggactctatattttagatcagaagcttagcagtcttctctacaccccctcacgacataat
+tgcttttaagaatctatgtttgattcctctacgggaattcggatccgttcgcatgtgcgg
+tttatctaaaccaggggacatatgttcagctaaagcatacgaacactttgctaactagac
+gtatgtatagtagctataaatcccgacgatatttacaaaaagaaatgagactcaaatata
+tacatagcgaccctacacttattcgcaccctgatctaggcgatcctagcacccacacccg
+aaagtgagcactagtgtcttccgtattaaatttactgcagttgagattttagttgtctac
+taaggattactctaacccgtaataaggatcaagactcggtactagctttactatcattcc
+ctatgtgttttcctaactcacaagggtacgtaccagcctatgtaattacaataatgataa
+agacacaaaggaagtaactttacaaatgagtctccagttacactagcttagtccctccca
+tcttgctttgaagtctaaatacgcaatctctgaggatatacagcagaagaacactcataa
+cgttggagtccaagaattagactcatagggcccccaacatttaatatgtactgtgagttt
+gaaggtgttctattgttaattcctgctcttgatacatgacacgtactccgtgtttaaggc
+ttcggactgactttctttcataagttgagcaacgaaaatttcagaatcgataagttggat
+tcactaactaatacggctgattgaaaactccactccggacctatatggtcgacctttata
+cgtaaccgatataaaacttataggctggtatatcgagccttcctagcgcaatttcggatg
+gggtttcttctactactcaacaacggaatagtctttgtttagtaaaccagagctcaggac
+gcccaatacgtaggagagcgctgtggagcatgtgtcattatggactggagcactcttaaa
+tcactctgcgtgtgctaaacgatagatcataacatgtcctgagtaaattttcttgatacg
+tcgcaatataccgttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcg
+tgctcagatatactattagcgactcatctcgcctaacacgcacacgtataaactcggaat
+gactgccgctcttacatattagaaatacagactacaccacggaagcattgggtcattctc
+aaccgctgtataaaagatgattagtcttataataagattaccaaagaggcagaatcatgg
+gtagtaaatctattattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatgg
+tactcaggacaaatattaaccggacgaagtggtttacgtcgtactttcactattagtagt
+aaatacaaggtaacaccggggaatagtactaaatataatgatatctatcttcgggagaac
+gagtcgtctattgctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgata
+caaccgattgttacttttgtctattcaaaagattgaatagttttttatacaaaagccgca
+tacttatgacggctagtatacagtttcatcccctagcatcaatgctatggacagtattga
+acttataggaaattcttctaatagggcaaatccgtcgtgatgcctattttttttcagtca
+catcctcaaatggcactagtattgtcgggatcccattaacaggctcaaccacgagctcac
+gcgaggacatgtagtccgtatctttaacgaagcgacagcgacagaactcccatggataac
+caattataaggcccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaa
+tcatgttgaataccccagagtagtccagatgataaccgatgaaacacaagtctttctcaa
+tgcacttacggtgaacttattaccgccaacgtagctcatcaaggttgcgacatctagttg
+tgtgtttgcgacgagcccagcgaacttcatcaactttcgtatattcaacgccttgtaatt
+ttactttaagacgcctggtgatgtagattcttagataatcagtttgttatcggctgtact
+ttaccataatttcacaggtttcaggtcaagaagattatagctgtatatacagttccatgc
+tcggtgcacagaaacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatc
+caatacatgccccgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagc
+tcgagtcaggacgtcagctagattagattccttaatagaatataccgacctctagtccga
+actaaactatagataacgccaacttcaggttaattgtctagtcgtctgtttgcagatggg
+attcttagatgagtgagtatcggccatattggttcgagcactttagtttttgatgcatag
+gatatgcaatgtatagctgaaagtactttatctgtttcaaactcacattgattaaaccgg
+taaacctttaaagactacaagaaaatattcagtgagggcaattttgtcaatcacaatctt
+ccagctagagatacttcacaatttgtcttgaggctacgcaacattagacggattttcgcg
+ttttattgaaataatcgaggggcccaagagtatccatagttcattttgtaagatttcttt
+acaggcttattacagcttcttcagactcctacatgcttacgagttatatgctagcatgtg
+aacaatagattaatatacaggaaaacgtacattgagagagatgaccctacacagcgcaac
+cgttgagtactttcattaaagggtaacgctctcgagacagcatccttaagatggccttat
+tgtcaaatcatttgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaa
+cacatgagacgcggtgaaaatagacagggtgttagtattcaatcttcggagtatcaattt
+cgccaatcttggtgagaaagcataccctttcttcagagaaagaagatcaatcataacact
+atctttaacgaggtacgcacgcgcatcattacctgcctccatggatctttaggatagcgg
+aaagtattggcagcgtattgtgatttcgttcctactttatcaatttcacattcatataca
+tgtcttttatcaaaatcgccaataagataggatgagctatattagatgctagtagagttc
+gcgccaacatcatcgataggaatactcaggacagcgtgataggacttttcaatccctaat
+actctctataattataactctctcttaagtttggaggcagtaacgcgctctatataatca
+gtttgctgcaccattcttcagcctctgatacatacaaataaattccacagcagtaagagg
+gtttaattgagacatcttgggaacttaggattttactctaacatcaccgaaacgattatt
+ggataccgtacctaaacgaactttctcaaggcagtaatataggacatccgcaataacaca
+aatgctgcctccccaggagttatgtcttcctggaggctatatcttacacccactcactat
+aggcaaactaaagtttaaatgttgattgtctaaaaaaaagatagataagagttggccggc
+gtagcacatgcgaaagtgaatcgtaagctataattctctggacttgaagttctgtcctgt
+tcctctgcaagaaacaaacttcctttaaagctatttacgacgcacatctcagcaagttat
+aaacatgttggaagtttctagtcggaattcccaaagaacggatctatctaatgcattcct
+acatttttcctgtctgccgatggtgccatcctattcaaagaatttcttaaaagtagatta
+aatgggacttttaacaatgagtaaccttacgcctctaagggttcctcgagtgccatacac
+cagtcaggtccgagccacatacacggagaacattctaacatagcattctcaactcgatca
+tttgcaggttacttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcac
+ggattaagaacctaagaaacaattcagtaaaacatgttcgaattcttggtatgggaacat
+cattgcagctatggtctaacgcattaatgtttgggtacatcttccatcatataaacagga
+agagtctgacgacagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagc
+tcacatgtcgtctatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataa
+gatctcactgaacttttgaatgaatgtgaagcatatatgatctgctttaataaaacttta
+tccataggatacgtttccaaatcaattcaataattattagtcaaaatagataaggatgaa
+caacctgaaggccgatcggacgtagaaagtggtcccatcactttgagttgatattgttga
+accacacgttattatggttttcaaacagtctcaggatattgtatatacagataatccgat
+accagttgtctgacgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgtt
+cagtattttaaactaggcggcaactaatttggaaagaagcacagtggatatgtctaaatt
+cttgttattcaggcctgaatttaatacaccgcatagttaacttcgcggtagagttgttca
+tcatgcctcctctaagctaccacttctatgatacaccaatagttgttctacggaatctga
+taattggccaagtcataaacttccgctgcgttcaacccccttgctcgaatatccaactcg
+aaaagacagccttttggtgtccggaacaaatcagttacttcttttctgatgttaattctc
+tgtggtcagatacagaccaaaaactccgcggatttaccatcctccaagaacaaatttgca
+tcaacatagcattttggctacatattctaagtctcaatagtttaggttttcaactacatt
+atcccaacattaggattggaggaataatagctgggtaagtccccttgcgtctacaatcga
+ctattttttatgaatatgcttctgccgcacctatggttattaaaaaagtcatgactttga
+agaaccctgaaaagatagatgaatcaggtgtaatggcagcagccaaagagcatataatta
+gcaacactctaagaacattatagatatgatgatagcgatcgtcatgatgttatccggtca
+caatagtagcttcatcagctaattcgttttgccagtggtgacttgcgctggaagaatcgt
+tatacggtcccttccctcttgatacggtgggggcttattcaaccgcgtggattgggttgt
+catacttgcattaaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatag
+tgatcaatacatacccgcttcatggttttaaccatttaattgattaaagatattccgcta
+agaaccattatctacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccg
+taatgatcaacgaagtaaaacgttatattgtatgtagaataataggtcttggagctaaat
+gatgtgattggtagtgaagacttacccttacaactttaccggtttctcggaagaatatac
+tagagaatcaatgcatgggctacataagcactttagtctaatgagataaaaaatacacga
+gtcttccatcatgaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatct
+ttatgtcgtcaataactctcatatgttttatataacttcccaatcacgacttgtaactgc
+ttgttcgactgagctgtttgagctatgaggccgggatccggttgagctacatctatttgc
+tacaagaaaaatgaaagcacatttgttgggagttctggctacactcatagagaaataagt
+ggcccgagtgggtgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaa
+cgctcgcgctaaagaattaaagcctttatttcctccacggagtagcccgtaatccggttc
+gaaagagaccattgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttc
+tgccacatgcctcaaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatg
+cgtctgtaacataaatatagaaggaatgattcggcgagttaattttcgccttctccaaca
+tggcatccctacgttcgttataaggaccatacatgtaggttttaaaggtttgcggttaat
+cgatatttacatcatagaaattctatagtcaaatttacaagactctagatactcactcgt
+tgcagccggctaggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaattt
+catatagtaagttcaaggcactcatacctccgtgaagagggtagatagactattaaagtt
+gtttaatagtacgtattgatggaaatgacccgtaggagatttaccactcaatccacaaga
+ttcgctgctgtgcattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaaca
+cgaatccaggtagagatacctttgcaatttttcgatgaaggcgaccgagataaatgagct
+ataacactgtatgtcttttgattgctataaaacacagaaacggatattaatttaggccgt
+aaccaacatctgttatttgacatagaacagatggtcctttacagcgtattccggccttaa
+tattgaggtccagtgtattgtcctcctttaaagaagttgattgtaactgacttaaataag
+acatgtcacccattcactgggttgcaactgctggccctttttgtccatcgcacgctaatg
+tgataacagtaccgccctcacacctgcgtttaaaagacataaatgtcgctatgaaggtta
+ttcattaattttagctgttttcttagaaaaggtaaatttaaaattgaaaaggctagaaaa
+ctaaagttacgacaaatgtgtttgtcaagtaggcgggcatcattgagattgtaagaaata
+aagccataaccagccccggaatagaaaatgttaaggaaaggcgatcttctttgaattctt
+attgtcaagtgcagtcatacgttcttatcagaggacattgcaataaaatctaacaccctc
+ccttgtgtggttgggccatttgtacttcgaagcgtccaccatgtgcagaggataacggaa
+tgtggttccgtcccataaacgatcattctcgcccacttagtggcgcggtaaatcgctctc
+atagaggtaactggcctgtaatgtccaatgttaggctaccttctccaactttagtacaac
+gaataatgtccgattaacaaggagtcaatttgtcatgaccagttcattcaggtacttgta
+tctatacggacgcgttccagagtagtatttgaaattttgaggttctactgataagtttag
+ctatcgctgtatgtctgaataagaatttaatgtttatcttcgataaataacaattaacaa
+ctcctaggtgatacactgtgaagtctgctgttccccaaattacatatgctattttgttca
+cataccatgaagttaagctaagtgctctataatggcataaacggttatcaaactagctcg
+aatttcttttattacgccggaagcggattaactgctgtagatcaaacacgttaggatagt
+gtcgttttcatatatatctaaattcggtctaacatgcattacccatgcttgataacgtag
+cacttcgcagtctaattatgtaatgtccgtttaaccaaactttaaaaaagtttatctatc
+accagtgatgcctcatcgtgactacccggatctttagcctttagggtctaaacagaacta
+atattactacgtgtcatactccggagcttaaccaggtgaaacttatttgttaaccaaatt
+tagtgacagggtagaaatacgtatcaaattaacccagcaatacaataagcatgaaaataa
+ttgtaatcgggtttgggccggaatcccgcttggcgaaaacttaatgacatagtgtgatgc
+attttgcactggattgagccacaaactcaactagcattatgctcaatatttggccagtgt
+tctacggtttgaaatttataaaggccgcgcaaaagtcttgtagttacaaacgcataaatc
+tcgaacgtaataggtttaattagaacatccgtaggatttctgtttatagtagatttatac
+taaatgttctgattagattctgacggccttacccatacaattaataaagacgaatatatt
+agttatagtttactatccaaataaattaagcgaatcgaaataaactgtcacgatactggg
+cagttatcaacttatcacttatacagttcggacactctatattggtctgtgagtactcta
+tcaaactaactcataagttaactgcgcttccattaaatttcaatacgttcttgtgctgtg
+tacaaacctataatcgaataaatgacacatatggagatgcataataaaaaaaacggctcc
+atatttctcgttaatcgggcattcttaaggaggagcatctcaccaaaaataacgttcctg
+ataagtcttaactattagaccgtcttcgggaatgaacgaaacctcaagctagcatggtat
+agttcttgatagcgcgtaaattctgataatactgggcggacagctggaaattagttgcca
+gtgcacctacgcaaatagtttacataaatcaacgggctccgaacgtaaatacaaagggtt
+agttacatcgcaacaagatgaaaagcatgtatgtctaccgtcatccgtccctaacaaaca
+taaaggtggtgaagaatctcgtaggtcaactataactccatccttgaagcaactactccg
+cgtccgtgtgcgtagttcgcaacgagaacactactgaaaaaagctaaacaactctcggta
+caaatgcggcttgtgtcgataaagttggtggtagtgcacggaataacataacaaggaata
+ttatttattcaaattttttgtgactgttatttgttttctgcctagaatgtaaggatgtgt
+tttttgtgacctgatagttacgcttatttcaggtccacggtgcgtgagagtgtgtcctat
+aacggcaggggagcgaagtagtgtcctttagactattcaaggtagaattttgataacgct
+ctataaaaggtagaaaatcatgattgagcaataagaccccaacttatcaaaaaaggagtt
+ctcgacagcgcgtgtacagtccctataacggctgtatttcctgtgtcacaacaccctccc
+atcgcactcaaaatgtagatttatgatcagacgctaacttgttcttagagaaaaatacac
+gggatactctgtgcaacgatttcattaataaggtgcagcttgggacttttttggccgtag
+gctttattaacattcacagtaggtagcgagacttcctatgaaccaatcatgccacgcgtt
+ttaacgtttcaaatataagctaggaagcgtttgccaggacttctataatgcaccgttttt
+tttagtacttccttactagccttagtttatgttagagtctttccaattacaaaggattga
+atagccaaaatttctacaattctcagcgaacgccagcttaatctaaacacgagcttcaaa
+tattctacatatcggcaggagtcaatatataaatatgaaaatcgtaccatcctcgtactt
+ttagaccaaacgtcttcggataattaaatcctttttcaattaccacagtacgtgcattag
+aactactgctatgaaagtaaaccttgaaatatagtcctcaagagcgtatccaagtacatt
+gcacgtgtatacagtcgtataaacgagttgatgttctgacgctagagcttaccattcgtt
+aaacagataactaaaatttaatggctgagtgacttagtgttttcgacaaacgtcgcggat
+gtagactattgtttataagcaatttttaaaaacatatgttcaaaacggtatgggatatgt
+cgaattccacaggggtttatgtaccatagaagtatgtataaggtactaaaggtttaaatc
+tgtgatattcggttcggtgaaaatcagactagtcacacttagtgtctgtaaattagattg
+ggtgaaggtaagcgatcccgaactctacaaggcatgggatgagattctaccgactccgga
+taacactttacgatcgcgcataactctagctcttagataagtttaacttgtcgatctcat
+aaacagttcaaaatctgcgatttattgtatcaaatccatcctctatcttctataatcatc
+tgaaccgcgatacggcactatgagccaagtgaagattgaatccaagaaagctataattgg
+tttattttagtccatttaaattaagtccggtataagtgctctgtacaatatgcagtctca
+tgggcatatacgttaactaccttttgatacttcgaattggtaaaatatcgactatcgatt
+tgcagtaaaaggtgtagagtccaattactctttcctgttacatacgatctcttagtttgg
+acaactagcccatgatggcgctcctctagcgcatgaacctactttataattacatcttta
+tcgatgaatttttttagactgcggaggccttgagttttaacagggctgctaaatttctta
+agcgattagacggtagcgtcgtacgctacttgcttggaacaggcaccgaaaatattgatc
+tactattgcgtcaactctattctgctaatagcgatggcaaatcacagaagccctcttagt
+gacaatagttgtcaactatatctaagtcgacctttactgtatcaacgatcacggagagaa
+ttaccgaatacgaaacctcaggactaaaaaacggaaaggatttgtcgacggtaaatataa
+tacttgttaagggtagcgacacaggtatactttgggtgtaaacgtggtgcttcccggaac
+gattttcagaccagaaaattgttccggtaaccaggaaatctcgtctgcgttaattcgtgt
+tagtaaacttgatcttcagactccttcttttcgttgcagcgagacttaaattatatctgc
+gaaatagtgccccgtgcatacttcagatggtaggagataccatttggcccattgtgactt
+tacgcgattaattaaccgacatacatctgttcctgagctatgatcgtctgaataaattac
+ggtctcctcttgatacctaatggtttctggagacgtttctcatgttcaaatggatagcag
+gagatcgcttcatcaagtttagctacgcagagcatcaaaatatgtatgggaaagtcgatt
+tccaaaccagaagggataaagagaaataacggacttctccgtagattagcctgatatttt
+gatgggaatcatggcggcacatacgtaagagttgcgtgaacgaatattttggacggcggg
+agacacatatcggccattcgttaaggtctctatattggacatcacaagcttagcagtatg
+agctactaacactcaagacattattgattttttcaagatatgtttcattcctctaccgct
+attcccatacgttcgattcgccgggtgagcgaaaccacgggactgaggttaagctaatca
+ataacaactcgttgcgatagagacctatgtatactagagagaattccccaacatttttac
+aaaaacaaagcagactaaaatagatacagtccctccatacaattaggaccaacatgttat
+tgccgatcctagcacacacaccacaaactcagaacttctgtcttacctatgaaagggtct
+gcacttctgattgtacgtgtctaattagcattaatattaaaactaattaggataaactat
+aggtacgagctttactataagtcactaggtgttttccgatcgaaaaacgggaccttcaag
+ccttggtaagtacatttaggataaagaaaaaaaggaaggtacgtgactaatctgtctaaa
+ctgacaatagagtagtacctacatgcttcatgtcaagtcttaatacgcaagcgctctcgt
+tatactgctcaacaaaactcataaagttggactccatcatttagaatcatagggaccaaa
+acatttatttgctactgtcactttgtaggtgttctattctgaattcctcatattgataca
+tgaatcggaatacctgtggatcccttaggacgcacgtgctttctttacgtcagaatacat
+attgtcagaatcgagaagttccatgcaattaagaattcgcctctttgaaaactcatatcc
+ccacatatagggtccaccgttattcggaaacgatataataattattccagcgttgagcgt
+cccttaagagcgcattttcgcttggcctttcttctacgactctacaacgcaagtggctgt
+gtggagtttaccacagcgcagcaccccatagaactacctctgagagcgcgagatggtggc
+agtatgctctgcagctagcgtttagaacgcgcccgcgcattaaccagtcatattaaaatg
+gactgtcttaattgtcggcattaggagcaatattaactgatgagggtatcggtcgcagaa
+gtaatgacggaaatacgcctctagtccgcagagatacgattacagactcagatcccctaa
+caagcaaaacgattaaatcggaatcactccccctatgacatatttgaaatacacaagaaa
+ccacgcaacatgtcccgcattctcaaccgcgctttataagatgttgagtctgagaattag
+atgacctaactgcaagaatcatggcgagtttatctagtaggcaagtctgtaccctagggt
+tcgaacgctgtgacgtcgtgatcggtctaaggacttagatgataaccaagaactggttta
+ccgagtactttcactattaggagtaattacatgcgttcaccgcggaatacgacgaaattt
+tttcatatctttatgagcgagatcgtgtcgtctttgcattgcaacagtcgctaccagtaa
+ttgctgatcaattatagattcattatacagatgcttacttttctctattcaatactgtca
+tgagttgtttttaaataagcaccagaattatgtcgcctagtataatcttgcttccacttg
+aatcaatgcgatggacagtattctactgattgcaaagtagtctatttcggcttagcagta
+cgcatgcctatttttttgcaggcacagaataatatgcaactaggattctcggcatccaat
+taacaggctaaaacaccaccgaaagacaggtaatctacgaagttgatgtttactacagaa
+agcgaatgatatcacttggagaacattttagatgcccccttttaatctagactgagtgta
+ccaatatatcaccggtctaccgaatcagcttgaataaaccactctagtactcatgataac
+cgagcatacacatgtatttctcaatgcactgaaggtgaactgtttacaccataccttgcg
+aatcaacgtggcgacttatacttctgtctttgagtacagcacaccctaatgaatctaagt
+tagttgttgatacgaattgtaatttgactggatctcgcctcctcatctagattcttagag
+aagatgtttcttatagccggtactgtaactttattgatctggtttatggtaatcaacatt
+ttacctctatttaaacgtccttgcgccgtgcactcaatcctgatcggtttagattcaagc
+gattatcgagtctggaggccgagaaaagaaatgcacagagtaagctctctattgcgacat
+ctacgtagaaactcgcatttcagatcgagtaagcaactctcattgtgttgattcagtaat
+acaagattacctacgcttctacgaaatatactatagatttagcctacgtcacctttagtg
+tcgagtcggagctttgaagatcggatgcggtgtggactgtgtataggcaattttgctgcg
+agctcgtgacttttggttgatgtcgatatcaatgggatacctcaaacgtctttatctctg
+gataactcacattgagtataccggtaaaaatttattctattcatctaaatagtcagtgag
+ggctagggtcgcaatcacattaggccacatacacatacttaacatgttctattgacccga
+cccaactttagtagcattgtagccgtttatgcaaatatgccaggcgccaaacactagcca
+gagggcattttgttacatttatttaatcgattattacacagtcggaacacgcctacatgc
+gttcgacttatttgcgacatggtcaacaattcagtaatttaatccaaaacctaaagtcag
+agacatgacactaaaatcacattaaggtcagttagtgaaggaatggctaaccagctagag
+aatgcatcattaacaggcacttattgtcaaatattttccagatctaagcaacatcacgtt
+aaaaagtacaacaatcacttaaaacacatcagtccaggtgtaattagaaagccgcttagt
+aggcaagcgtaggagtataaatgtagacaatagtcgggacttagcagacactggatgcag
+tcatagaagatcttgcataacacgttagggttagagctacgaacgcccatcattaactgc
+ctaaagcgtgcgtgagcttagcgctaacttttccaacacgtttgtgatttcgttcataat
+gtatcaatttcacagtcatatacagggagtgtagaaaaatcgcaattaacatacgttgac
+ctatttttgttcagagttcagttagagcctaatgattcgagagcaataatcaggacagcc
+tcataggaagtgtcaatcacttagaagctatattattataaatcgctctttactgtcgtc
+gaaggaacgagcgagagagaatcagttgcctgcaactggcttaacaatatgatacataaa
+aatattttcatcaccactaagacggtggaattcagacttattggcaacttaggatgggac
+tattaaataacccataagatgttgggataaagttacgaaacgaaagggatatagcctgtt
+agataggaaatccccaataaaacatagccggcctccacagcagtgatctattccgccacg
+cgatatctttataccacgcaatataccaataataaaggttaaatgtggttgcgatttaaa
+aaagatacatatcagttgcaccgcgtagcaaatccgtatgtgaagcgtaacctagaatta
+tagcgtctgcaagttctctaagcttcctctgcaagatacaatatgactttttagcttttt
+tactaccaaatctcagaatcttagaaacaggttggtacgtgctactcggaattcccaaag
+taccctgctatatatgccattccttcattggtccgggctcaccatggggccatcatagta
+atagaaggtagtaaaactagttgatttccgacttttaacaatcactatcctgacccagat
+atgggttccgactggcccttactccagtaagggcagacacacagacaacgagaacttgat
+aactttgaattctcaaatcgatcattgcaacgtgacttatttactagcctactcctataa
+ttcatacgtcaaatacatttcaacggaggaagataataagtaaatattcactaaataatg
+gtcgaaggagtcctttgccaacataagtccacatatgcgctatagattttttcttggggt
+tcatattcaataagataaacagcaagagtatcacgtcagcgagtcattgagatcttggct
+agcattgtgatagcatattctacctaaatggtagtctagcacagagtggataagatatca
+gttagatatagacaagtactataacagatctcgcttcgttggattgtatggctagctttg
+atgatatgattttataaaaattgatccagacctgacctggccaattatattcatttttta
+tgagtaaaaatagataaccatgaaaatactcaagccccttaggacgtacaaagtggtaac
+ataaatttcaggtgttattctgcaaccacacctgttttgggttttcaaaaaggctaagca
+gattggttttacagataatccctgaacactggtatctcccaacgatgtcgttcccaaccc
+ttgctgaccttttaagctctgctgaagttttgtaaactaggcggaaaatatgttcgatag
+atccactcgcctgaggtagaaattcgtcttagtaacgcctctttggattacacagaatag
+tgtactgacacgtacactgctgcagcagccatacgctaacattaaaattcgttgagtcta
+catttgttgttattcggattatgttattgggaatagtatttttattcccctgcgtgaaac
+cacatggatagattagcctactcctaaagactcccttttggtctacggttcaattctctt
+actgagtttatgttcgtaattatatcggcgcagtgaatctcctaattatcaccggagtta
+ccagacgccatgaacttatggccagaaacattgcatgtggcctacataggattagtatca
+agagtttacgtttgcaacgacatttgaccaacttgaccattcctgcttgtagaccgcggg
+aactcccctgcacgcgactatagaagttggtggtggatgtggcttatgccgcaaatatgg
+ttttgaaaaaagtaatctattgcttgatacctgaattgagacatgtataagggctattgc
+cagatgaaaaactgcatataaggtcaaacaatataagaacattatacataggatcttagc
+gttcctcaggatggtatacgctataaagtctagcttcagcagctaaggagttttgccagt
+gcggacttccgctggaagattaggtttaaccgccctgacatcttcataaggtcgggcctg
+attcaaacccctggagtgccgtctcatacttgaattaatcgatggaaaacttcttctagt
+ctaatattattattaacaaatgacggttcaataaataacaccgtaagggtgggaaactgt
+taagtgatgaatcattttaacctatcatccattagctacagataatgataccccgatccg
+actagggggtaagtggttgttccgttaggataaaccatgtaaaacgttagagggtttgta
+gattaattggtattccagataaatgaggtcagggcgagtgatcaattacactgaaaaatt
+gtcagcttgcgcggtagttgttaagacagtataaatgaaggggattcagaagcaagtttc
+tcgattgactgaatttataaaccagtcgtcaatcatgatttttgtgtcgattaaagccta
+aatggtaatttaaaccattgatatttatcgagtctataaatatctttggttgtatattac
+ttcacaatcaccaattctaaatgattcttccactgtgcgggtggagatatcaggacgggt
+taaggttgacctacatcgttttgatacaacaaaaatcaaagcacatggctggggacttct
+cgatactatctttgagatagtacgggcaagagtgggtgacgcctccctacattttcaagt
+ctatcggataacttctcggtaaaacgctcgcgatatagttttaaagcattgatttaatcc
+acgcaggagcaagttttaccggtcgaatgagaaaattcaacgtaagtgtcatatccagtc
+atggttagccaaaagcatgggttatccaaaaggaataaaacagctcttcaacaaagagat
+gaggcttcataacttcgatgaatgcgtatggttctgatatatagatcgatgcatgaggac
+actttattttagccggcgaattaatggaatccatacgttacttatttggacatgacttct
+aggtgtttttgctgtcccgtttagcgatatttacagattagtatttcgtttctcatagtt
+aattgtatctagatactaactcgttgaagacgcataccttgccatttgtacaggacttaa
+ctgttccgtgcgtaatttgaatttcttataggttcttcaaggcacgaatacctcactcat
+gaccgttcatactctagttaaggtcgggaatactacgtatgcagggaattgtaacctagg
+agatttacaactctttaaacaagagtcgctgaggtccaggatcaaaacactgaatctcct
+aacttcgggtgcctccgtaaatcacctagaaacctactcatacatttgcaattttgagat
+gtaggcgaaagagagaaatctgctttttaacggtatctcttgggattccttttaaaaaca
+cataacgatagtaatgtaccaagtaaccaaaagctgggatgtgtctgtgtactgatccgc
+cgtgtcagagtagtccgccatgaatattgacgtcaaggctagtgtcatcaggtattgatg
+ttcattgtaaatgaaggaatgaactaatgtcaccaagtaaagggggtgaaaatgctcccc
+agggttctacagacatagagatggtcagaacacgacccccctctcaacgcagtgtatttg
+aaatatatggacatatctaccttattctgtaattttagatgtgttctgtgtataccgata
+ttgataagtcaataggcttgattacgtatcttaagacaaatctgtttcgcaagtaggacc
+gcatctttcagattgtttctttttatgccataacctgcccaggaattcaaaaggttatcg
+atacccgatatgctgtgaattattattctaatggccactcattcctgcttatatctggaa
+ttggcatgaatatcttacaacctaaagtctggcgttgcgccagttctacttcgtaccgga
+caccatctccagtcgttaaccgaaggtgggtacgtcacataaaagttcattagaccacac
+tttgtgccgacgtatatagatatattacacgtatagggaatgttttctcctaggtgaccc
+gaccttctactaaggttgtacatcgtataatggcccattaactacgaggaaagtggtatt
+gacctggtaatgcacgttcttcgatatataccgacgaggtaaagtctactattgcaaagt
+ttgacgttatactgataagtttagatttccctggatcgcgcatgaacaatgtatgcgtta
+tctgccatatataacatgttacaaatccttggggatactatcgctactatcatcggacca
+aaattaaataggctagtgtcttatcagaacatcatgtttaccgaactgatctattttcca
+atttaagctgatattacgtccgcgtatttattttagttccccggatgacgattatctgag
+ctacatcatacaagttagcatactcgccggtgcattgatttcttatttcgctatatcttc
+aagttcacaggcttcatatagttccaattagcagtataattaggttttgtaactttaacc
+atactttataaaaggttatattgcacaactgatcaagcatccgctataacccgagcttta
+ccagttagcggctaataacaaataagatgacttcgtgtcatacgaccgtcatgatcatgc
+tctaacttaggtgggaaccaaatttaggcaatgggtagtaataagtataaaatgatacca
+catatactataacaatgaaattatttgtaatccggtttgccaacgtatcccccttcgcga
+taaattaatgacatagggtcatccatgtgccaatcgtgtgtgccaaaatctcaaattcaa
+ttatcatcaatattggccaagtgttataagcgttgaaagtgatataggccgccaaaaagt
+agtctacttaaaaaccaatatttatcgttcgttattgctggtagtacaacatcacgagca
+tttctcttttgagttgatttatactatatctgctgatgtgattatgtcccacttacccag
+aatattaagaaagtcctagattgtaggtatacttgactataaatataatttaagactata
+caaataatctggctacattatgccatcgtagaaactgataacgtagtaacgtcggacact
+agattttggtcggggagtaatctagcatactaacgaatttgttaaatccgctgaaagtat
+atgtcattacctgcttggcctgtcttcaatacgtttagactattaaggactcatttcgag
+atccagtattaattatacgcatccatatttatactgaagacggattgagttaggacgaca
+agctaaacaaatattaagttaaggattagtattatattgtagaaactcgtcgggttggaa
+cgattcatcatcatagaatgcgttacttattcagagagacttaattcggttatgactggc
+agctcacctggaaagtaggtgaaaggcaacagaagaatattgttgactgaattctacggg
+ctacgaacgtaattacaaagcggttcgtaaagagcataaagatcaatacaatggatctct
+acagtattacgtaaataacatacataaacctggtgttgattcgactagctcatagattaa
+tcattaattgaagctacgaagacgcggaagtctgcggagtgagcaaacagtaatcgactg
+ataaatgcttataatatcgcgcttaaatgccgcatggtgtacattaacgtgggggtagtc
+aaaggaatatatttactaggaatattagttatgcaaatgttgtgtcaatgtgatgtgttt
+tatccagacattggatgcatggctgtgggggcacaggatacttaccattagttcacctac
+aagcggcgtgagagggtctcagttttagccagcgcagagaagtacgggcctttagacgat
+taatgctagaattgtcataaacctcgtgaaaagctagttaataatcatggtgctagaaga
+acacaacttttctataaaccagttctcgactgacagtcgtaactcactatatcgccgctt
+tgtactgtcgcaaaaaaacctcacatagaaagaaaaatctactgggtgcatcagtagaga
+tcgtgttctgagagataaatacaccggatacgatctgcatcgagttcatgtattaggtca
+agcttgggactgttgtgccagtagcattttttaacagtcaaagtagggtgagacacgtca
+tatcataatatatgccatcgaggtttaaagtttatatgataagctagcatgcgttgcaat
+cgtattcttgaatgctccgtggtttgtactaattcctttatagactgagtgtatcgtaca
+ctcggtacaattacaaaggatggaagagcaaataggtcttcaattataacagtaccccac
+cttaatctaaaaaccagcttcaattagtattaatttcgccaggagtatatatataaatat
+ctaaagactaaaagactcgtacttttacaacttacgtcgtagcataattaaatcatgggt
+aaatgtcatcagtaagtgcattagaaatactcctttgtaaggatacagtgaatgtgtctc
+agcaagtcagtagaaatggaaattcatactcgattaaggcctataaaactgttgttggta
+tctacagagtgattaaaattagtgaatcagattacgaaaatgttttcccgctcgcactta
+cgcgtttagacaaaagtacaggtggtacaattggctgtagtagaattttggtataaaata
+ggtgataaaccggatgggtgtgggcgaattcaaaagcggtttttgttccatagaactatg
+tagttggttataaaggttgtaatctcggagattaggttagggcttaatcagaatagtaac
+aatttctctatgtaaagtacagtgggtgatcgtatgagttcacgaactcttaatgccatg
+cctggacaggataaacaatacgcatataacttgacgatcgagcttatatcgacctatttg
+agaagtttaacgggtcgatataatatacaggtcttaatagccgattttttctagaaaagc
+aatcctatatcttagttaatcagatcaaccccgtgaacgatatatcagcaaactgaacat
+tgtatacaacattcctttttgtccgggtggggactccatttaaagtatctcacctagaac
+tcagcggtaatagatgcagtctcttgcccagttacggtaactaaatgttgatacttagaa
+ttgctaaattttagtctagacatttccaggtaaaccggtagacgacaatttctctgtcat
+ctgtcataagatcgcttagtgtgctcaaattgcaattgagggccctactatagacaatca
+tcagactttttaattaaatagttttccatgaatgtgttgtcaaggcggaccccttcactt
+ttatcacggctcataaatgtcgtatgactgtagtcggtagcggccttcgagtcttcaggg
+gaaatggaaaagaaattaggcttctaagatggactataatcgattaggctaattccgttc
+gcaaatcacagaagcaatcttactcaaaattgttggaatcgatagcgaacgcgaccgtga
+atgtttaaaagtgctcgcacagaattacccaatacctatcatcacgacttaaatacccaa
+agcagttgtagtcgcgtaatagattaagtctgaagcctagagacaaagggatactgggcg
+gggaaacctgctccttcacggtaacatggtaacaacagaatttggttaaggttaaaacga
+aatatactcggagtgaattactgttaggtttcgtcatcggatcaataagtagtttccgtg
+aagacactcttatattagatctccgaaattctgacccgtgcattaggcacttggtaggag
+attccatttggaacttgctcaatgtaagccagtaatgttccgaaataattcgctgcagga
+gcgaggagccgctgaataaaggaccctcgcatcttgttaccttatggttgagggtcaccg
+ttctctgcgtcaattccagagctggagatacattcatcaacgttacctacgcacagaata
+aaaagatcgagcgctaactcgttttcctaaacacaacggatttagacaaattaccgaatg
+cgccggagagtagcatcttagtgtcatgcctatcatggcggctcagtacgaagagttcag
+gcatcgaatattgtggtagcccgcactcaaagttccgccattaggtaagctatatattgt
+ggtcagaacttgaggacaactatgagctactaaaaataaacaattttgtcatttgttcta
+gatatgtggcattcatcgaacgcttgtaccagaagttacattcgcagcgtgagcgaataa
+acccgaatgagcgtaacattatcaataacatatagttcagatagagaacgaggtattcga
+cagagaattacccaacattggttattaatctatgcagaataatttagataatgtcactac
+ataatattaggaccaaaaggtgattccccagaagacaaaacaataaacaatctcacatat
+tcgctagtacctatgtatgggtatgatcttctgattggacggggataatttccaggtata
+ttaaaacttattaccataatctagacctaagagaggttatataagtaaagagctgtgttc
+cgatagaaaaacccgaccttaaagacttgcgaagtaaattttgctttaacaaaaaaacct
+acgtaagggaatattctgtataaactgaaaagtcaggtgtaactacatgagtcatgtctt
+cgattaattacaatgcgatctcgttattctgatcaactaatatcataaactgccactaca
+tcttgtacaatcattcgcaacaatacttttatgtgctaaggtcacgtgcttcctctgcta
+tgctgatttaatcagattcataaaggaatacgaataactctggatccattaccacgcaag
+ggatttatttacggctgattactttttggctgttgacagaactgccatgaaagtaagatg
+tcgcatcttgcataaataatagcacctaatatagccgacaaagtgattccgataacagat
+tttaagttgtccagccttgagactccatgaagaccgcttgggagcttccccgtgattaga
+agaatctaaatcccaagtggatggggggagtttaaatctcagcaccaacaaatagtactt
+cctctcagagcgcgtcatggtcgaaggagcctatcctgatagaggtttgaaagcgcacgc
+gcatttaactgtcatattaaattggaatctcgtaagtgtcggcagtacgacaaattttaa
+ctgatgtcggtatacggagaagaaggaagcacgcattgaagcagctacgcagaactgaga
+agatgacactctaagatacaattaatacaaaaacgttttaagcccaatctatcaacagat
+gtaagatgtctaatacacaagaataaaaccttcatgtcccgatgtataataacagcttta
+tttctgctggtcgaggtgaagtagtggaaattactccatcttgctgcgcgtctttatagt
+gttggctactctgtaaccgacgcgtccatccctctctcctagtgatccgtatatccaatt
+agaggataaccaacatctgcgttaccgacgaatttaaatttttcgactatttaattccgt
+tcaaacccgtattcgtagtaagtgtttcatagatttatgaccgacatcgtgtacgagttg
+cagtgcatatgtagataccactaattgctgatctaggatacatgctttataaacatgctt
+acttggctattttatttactgtcatgtgggggtttttattttcaacaagtatgtgctacc
+attggataatctggcttcaaattgaagatatgcgttccaaacttgtctactgtttgctaa
+gtaggagttgtcccattagaactacgcagcacgtggtttgtgatcgaaaagaataattgg
+caaatacgaggctagccttcaaatttaatgcagattactcctcagaaacacacgtaagcg
+acgaacgtgatgtttactacacaatgcgtatcatagaaattcgtgataatttttgttcca
+acctttgaatctagactgagtggaaaaagatttcaccgggataccgtttatgctggtttt
+aaaaactcgtcgaatcatcttataactgcattcaaatggatttctcaatcatctgtacgt
+caactgttttaacaataacgtcagaataaaccggcacaatgagacggcggtctttcacta
+caccacacccttaggattataagtgacgtgtggattcgaattctaaggtgacgggatcta
+caagcctcagctacattaggtctgaagatctttcgtatagccgcgtatgttactgtttgg
+atatgggttatgctaatcaacagttgacagcgagtgaaacggccttgcgacctgaaatct
+ttacggttaccttttgattcaagacaggatcgacgatggaccacgtgaaatgaattcaaa
+actgtaacatcgcttgtgcctcagcgaccgagtaacgacaagttcacatcctctatgcaa
+ctatcattgtggtcattaaggtattcaagattaactaagagtcgaccatatattctagag
+ttttacaattaggaaccgttagtctagactaggagcgtgcaacatcgcaggaggtgtgga
+ctgtcttgacccaagttgcctgacacatagtgtcttttgcttcatgtccttagcaatgcg
+atacctcaatcgtagttttatcgggataaataacatggtgtttaaccctattaatggttt
+ctattaatctaaattgtaaggcagcccttgggtcgaaagcacattaggccacatacacag
+tatgaaattgttcgagtgtccagaccataattgactaccatggtacacggtgttgctatt
+atgactcccgcaaaactcttgacagagggaattttggtacattgatgtaatcgatgattt
+aacagtaggaactagacgtcatccgttagactgagttccgacatgctcaaattgtcagga
+tttttatccaataactaatggctctcacatgtaaataaaatcacattaacgtcacttagt
+gatggattcgctaaacagatagactatcattcatgaactggcactgtttcgattatattt
+gcaacatcgaacatacttaaagttaaatacgacatcattcaattaaaaaaattcagtaca
+cctctaatgagtatcccgctttggaggaaagagtagcactttaaatggacaatttaggcc
+ggactttcctgtaaatggatgaagtcattgtacagcttgaataaatcgttagggttagtc
+cttacatccaccatatgttaatgaataaagcctgagggaccttagagctaacttgtccaa
+cacgttgctcatttacttaataaggttgaaatgtatcagtaagtgacagcgagtgtagat
+tttgaccatttaactgaccttcacagttttgtcttcagacgtcacttacaccataatgat
+gacagagcttgtagatgcacacactcattcctagtgtaaatcaagtagtagctagattat
+tataaagagatattttctggcgtcgaacgtaacacagagagagtataaggggcatgataa
+tggcttatcaatatgtgtaagaaaaagtttttaatatcatctaactcggtggaatgcaca
+cttatggccaactgaccttgggacgagttaagataccataagaggttgcctgtaagttaa
+gataacaaagggatattccatctttgtgtgctaagaacctatttatatttgcagccataa
+aaacctctgtgctatgcagccaccagagttatttatacaaagaaagagaccatttagata
+cgttaattctgcttgcgatttattaaacagacatttcacgtccaaccactacaaaagccc
+tatcgcaagacgatcattgtattatagcctatgcaacgtagctaagcggccgaggaatca
+taaaatatgaattgttacattgtttactacatatgatcacaatctttgtaaaaggttcgt
+tcgtgatactaccatgtacctaactaacctgagatatatgcaatgacttatggggtcagc
+gcgcaacatccgcaaagcatagtaatacaaggtaggaaaacttctggatttcccaaggtt
+ataatgctctatactgaccaagagatccgttacgactcgcaatgaatactctaagggcac
+tcacaaagaaaaccactaattgataaatttcaatgataatatcctgaattgcatcgtgta
+tgagttacgagaagtcgcatttaatgaattagtcatagaaatgtcatagcaggaacataa
+ttactatattttaacgatttaatcgtagttggagtcctttcccaaattatgtcatcagtt
+ccgatttagatgttttcgggcccttcttagtaaagaagttaatatccaagactagctcct
+cacccacgcatgcacatattcgcgagaagtctgatagaatattcgacagaaatgcgactc
+tagctcacactcgttaactgatcaggtacttatagacaagtacgttatcagatatcgctt
+cggggcattgttgcgctacctttgtgcatagcagttttgaaaaattgttcaagacctgaa
+cgggaaaatgatattatttttttaggaggaataatacagtaccatgtaaatactcaacca
+ccttacgtacttcttacgccgaacatatatggcacgtgttattcggctaacaaaactgtt
+gtgccttttctataaggataagcagattcgttttaaacatatgacctgtaaactgggatc
+tacaaaagaggtacttaaaataaattgcgcaacggtttagatctgcggatctttggttaa
+agagcaccattagatgtgccatacttcctatcgcctgagcgagaatttagtctgaggaac
+cactcttgggatttaaaacaattcggttaggacacctactcggcggatgaagcaatacga
+taacattaaaagtcgttcagtctaattttggtcgtagtacgatgagctgatggccaattg
+tatttttattaacagcactgaaacaaaatggagactttagactaatactaaagtctcaat
+gttcgtcgaaccttaaatgctcggaatgaggggatcttcggaagtatagcgccgaagtgt
+atctcattattataacaccagtgtacagacgacatctaattatggccagaaactgtcatt
+gtgccattaagaggattagtagatagtctggaccgtggaatagaattttgaccaaattga
+ccagtcctgcttgtagacagcgcgatctaaactgcacgagaatatacaagttggtggtgc
+ttgtggctgagcacgctaagatgcgtttgtttttacgattctagtgcttcttaacgcaat
+tcagtcttctagatccgctattccaacatcaatatctcaatttaaggtcaatatatataa
+caaaattagacagagcagctgacacttacgaagcatcgtagaaccgatatagtcgacctt
+atgatgatatggacgtgtccaagtccgcacttccgatgcatcttgacggtgaaccgaaat
+gaaatcttcattagggcccccatgtgtcaaaccactcgagtcccgtctctgaagtcaagt
+attactgcgaaaaattcgtctactattagtttattatgaacttatgacgcttaaataaat
+taaacagtaagcctgggaaaatgttaaggcaggaatctttgtaacagttcataatgttgc
+taaagattatcagaccccgtgaagacttcgggctttgggcttcgtaccgtagcataatac
+atctatatagttagaggcttgcgtgttgttgtgctattccacatatagcagctctgggcg
+actcttcaatgaaaatgaaaaatggtaacctggcgacctacttgttaagtcagtttaatt
+caaggggattaagtaccaagggtcgagtttctctgtatttattatactgtaggcaagaag
+cttttttggcgagatttaagacttaagcctatggtaaaaatttgatagtgagcgactata
+gtaagagatttgggtggttagtaattaaaattctcctatgctaaatcaggcgtacaatct
+gagggtgcacatttctcgacgcgtgaaccttcaccgaaagcgtgtggattatacaaattt
+caaacatattggcggggcacttatccataatagatttctgtttgtacgccaaactctgcc
+tcacccctccataaattgtattggctagaggttaaattctccgtaaatagagacacatat
+agttttatacaattgtttgaatcaaagcacgagaaacttttaaccgtacattgacaaatg
+tcttcggatggggcagagcatctcttcgtgacccaaatcaatcgctgagcaataagcaag
+aaaacacagattatacaaagagatctggatgaagatattcgtgcaatcactatcgttatg
+ttagagagttccatgcatgaggactcgttttttgaccaggagaattaagccaagaaataa
+ctgacgtatttccaaatgaattctacgtgtttttcctgtcacctttagccagtgttaaag
+atgactatggagtttcgaataggttattctatagacattataacgagtggaacacccata
+ccttcacagtgctaaaggtaggaacgggtacgtcaggtagttcaagggattttaggttct
+taatccaacgaagaaataacgcatcacccgtcattctattgttttcgtcgggattactta
+gtaggcagggtattctaacctacctgagttacaaatctttaaaaaactggccatgaggtc
+atggtgataaaatctgaatcgcctaaattcgcgtccctaaggaaatatactagaatccgt
+ctcagaaagtgcaaaggttgacttcttcccctaacacagaattctcagttttatagctat
+ctagtggcattcctttttataaaactttacgtttgtaagggtccaactttacaaaagctc
+ggatgtgtatgtgtaatcttccgccgtgtaagacttggaacccatgtatattgacggcat
+ggcgtggctaagcaggtattgatcttcagtgtaaagcaaggtatgttctaatctaacaat
+gtaaagccggggattagccgccaaaggggtctaatgacatagagatgctctgaaatcgta
+ccaactataaaagcacgggatttgaaatatagcgacagatcttccgtattctgttagttg
+acatctgtgctgtctttaccgattgtgatttggctttagcagtcatttagtttcgttact
+cattgctcgtgcgatagttccaccgaatatggcacattcgttctttttttccattttact
+gcaaaccttttcaaaagctgatcgataccactgatgatggcattgattagtcgattggca
+actatgtcctgcttatatctccaattgcattgaatatagtaaaaaataaaggctcgcctt
+cccaatgggctacggagtacacgaaaaaatcgcaactcgtttaaccaagcgccgtaccta
+acatataagtgattgagacaaatagttctccagacgtattgagatatatgtctcctatag
+gcaagcgtttctaattgctgaccagaaattagaattaggttgttaatactatattcgacc
+attttattccacgaatgtgctattctactggtattgctccgtatgcgatatataaccaac
+acggaaagtcgtcgattgcaaagtggctccgtagaatcatttctggtcatttaccgggag
+cgcgcttgaacaatggatgcggtatctgccatattgttattgttaaaaagacttccgctt
+actatcgcttcgatcatcggaaaaatattaatgaggattgggtcgtataagaaaatcatc
+ttttcagttcgcagatttttgccaatttaaccggttatttcgtcagacttggtagtgtag
+ttacaagcatcacgattatatcagctacagaattaaactgtcctgactcgacggggcagt
+gtgtgagtattgcgctatatattcaaggtaacaggaggcatataggtcatagtacaagga
+taatgaggtttgctaactttaaaaattattgatttaacggttgattgaaaatctctgcaa
+gatgacgctagaacacctgatgttcaagtttgccgataataacatataagatgaattact
+gtctttagaccctcatgttaatccgctaacttagggcggaaacaatgttaggctatgcgg
+agtaagtactatattatgataccacatagaatttaacattcatatgatgtctaatacccg
+ttcccaaccttgcaaccgtcccgattaattaagcaattacggtcatcaatgggccaatcc
+tgtctcaaaaattatcatattcaaggttcagctattttggcaatgggtgagtaccgttct
+tagtgatttacgaacccataatctaggcgacttaatatacaagatttagagttacgtttt
+ccgggtagtacatattaacgaccatggatcgggtgaggtgttgtattagttatctgatct
+tgtcagtagctcccaatgtcccagaatattatgtttctactagagtgttcgtatactgga
+atttaaatattatgtaagactagacaaattttatggatacattaggccatcgtagaatat
+gatatagttgtaacgtccctctatagattttcggagggcaggtatattgcttaataaaga
+tgttcggaaatcagcggaaaggatttgtaattaactgatgcgcagcgcttaaataagttt
+agactattaagctatatgttcgacagcatgtagttttttttaccagaaagtgttatactg
+atgacccatggaggtagctcctcatgataaaaatattgttacttaagcattactattata
+gtgttcaaactagtaccgttgcatactttaagaatcagacatggcgtttcttatgcagac
+acacttttttagctgttgacgcccacctcacatccatagtaggtcaatcgcataagaaca
+atattctggactgttttattacccagaagaaagttttttctttccggttcgttaagacaa
+taaagatcatttcattcgttctcttaacgatgaactaaagtacttaaagtatccgcctct
+tgtttcgactagcgcatagtgtaataattaaggcaagataagaagaacaggaacgcgcac
+gtcggagataactctaatagtctctttattccgtttaatatagcccgtaattgcaccatg
+cgctacagtaacggccgccttcgcaaacctatttatgtaattccaagtttaggtatgcaa
+tggttggggcaatgtgaggggttttatcaagactttcgttgcttcgcggggggcgcaaag
+cagactttacagtagttaaccgaaaaccgcagggagtcgctctaagtgttaccaacccct
+cactactacgcgaaggtactcgattattccttgaatgggctgaaacatcgtgattagcgt
+cttatgattcaggctgatagaagaaaacttattttctatattccacgtatacaatcacac
+tcgtaactaaatagttcccagcgttgtaatgtcgctataataaataaaatacaaagaaaa
+ttcgtctgggtgcataagtacagttagtcgtctgtcacataaataatccgcagtcgatct
+cattacaggtattgttgttggtcaaccttcgcaaggtggtccaagtagcattgttgaaca
+gtaaaactaccgtcacacaaggaatatcataatagatgccatacacggttttacttgata
+tgtttacagtccttgagttgcaatcgtagtattgtttcatccggggtgtgtacgaagtaa
+tttagacaaggtgtgtagcggtcactaggtaaaatgacttaggatggatgagcatttagg
+tattctatgataacactaaccatcatgtttctaaaatcctcaggaaatttgtattatttt
+accaacctgtatttatagaaagtgcttttgacttaaagaagccgaagtgttcaaattaag
+gagtacctgattgaaagaatggggaattgtaatctgtaactcaattacaaataagccgtt
+ctaaggattaaggctttgtgtctaagcaactcacgtgaattcgaaattcatactcgatta
+acgactttaatactcttctgcgtatctacagactcatttaaattacggaatatgttttcg
+tttttggtttccagctcgcacgtacgcgtttacaaataaggacacctggtacaattggct
+ggagtacaatgttggtttttatttgctgattatcccgatccctgtgggcgttggcataac
+cgggttttcttcaagactactttcgtgttgcttatatacctggtaatatcggtgagtagc
+ttagggcttaatcacaatactaacaagttctctatggattggacagggcggcatccgttg
+actgaacgatctattaatccattccctgcactggataaacaagacccatttaaattgacc
+atagagatgttagcgtcatatttctgttcgtgatagggtacatatattataaacggatta
+tgagcagtggttttctagaaaagcattcatagttaggagtgtatcagatcataccactga
+accatagagcacaattctctactggctatacttcattcctttttgtccgggtggggacga
+aatttaaaggttctaacctagaacgcagagcgaattgatcaaggcgctggccaagtgaac
+ggttctaaatgttcttaatgagaattgcgtattttgactattgacagggcatcgtaaacc
+gctactcgacttggtatctgtaatctgtatgtagatagagtacgggcctataattcaaat
+tcagccaccgaagattcacaatcttcagacgtttgaaggaaagaggtttactggtatgtg
+gtgtcaagccccacccattctctgttatatccgagcattaatgtagtttcactgtactac
+ggtcacgccgtagagtcggcagggcaaatccaaaacaatttaggctgagaagtggcacta
+taatagtttagcctaagtcccttcgctaataactcaacaaagatgacgcaaaagtcggcg
+aatagattgcgttcgcgtaagggtatcttgaatactgatagctctcatggtaccaagaac
+tttcataacctctttatttaccaaacctgttctactagcgttagtgttttagtctgtagc
+cgacacaaaaaccgagaatggccggcgtaaccggcgcctgcaagctaacatgggatcaaa
+actattggcttaacgtttaatcgaatgagactagcactgtattactctttcgtttcggca
+gcggatcaataaggaggtgacggcatcactctcttatagtagatatcacttattctcaca
+acggaagtaggatcttccgtcctcattaaatttgcaactggctcaatgtaacactgtaat
+gttaacaaagtatgagctgaaggtcagagcagacgatgtagtaaggtccctcgaagctgc
+ttacagtatccttgaggctcaacgggctatgcggaaattccagacctcgagttacattat
+gaaacgtgtcattccatctcattaaatagttcgtgccctatcgccttgtaatataaacaa
+ccgtttttgtctattttcccaaggagaaggagagtagcagcttagtggcttgcctatatg
+gccccctaagtacgtactcggcacgcttagaagattgggctaccccgcactatatgttcc
+caaagtaggtaacctagatagtgtcgtatgaaattcaggtcatcgatgagagtataaaaa
+tatacaattttggcaggggttatacattgcgggcatgaagagtaacattggacatgaacg
+gacattcgaaccctgtgagtttaataccctatctccggatcattataaagtaaatatacg
+tcacttactctacgtgcgtttagacagtctttgaaactaaattggttatttttctttcat
+ctagatttgtctgtatctaactaaattatagttccacataaagctgattcaactgaagac
+ataaatataaactttctaacatagtagcgaggaaagagctatgcctagcatcggatcatg
+cgtccgcgagtagttcctggtagagttaaaagtttttccagaatctagaccgaacacagg
+gtagtgaacgaaagtgcgcggtgaacatacataataccgaacgtaaacaattccgttcgt
+attgttgctgtatctatatttcctacgtaaggctatttgatctataatatgaaaagtcac
+gtcgaaataaatcaggaagcgcttcgagtatgtacattcagatctccttagtatcatcaa
+attatagattttacggccacgaattattggtctagatgtcccaaaaataatttgatgtca
+gtagcgatcgtgcttcctcggagttgaggttggaagaagagtcattatgctataccaaga
+actctccatccagtacctagaaaggcaggtatgtaccgctcattaattttgcgatcttga
+cagatctgcatgcaaagtaacttgtaccagatggcttttataatagaaactaagtttccc
+gaataacggtgtacgataacagatttttaggtgtacagacgtctgactcaatgaacacac
+attgggacctgccccgggaggagtagtagataattaccttctccagcgcgggtcttttaa
+tatcacaacataaaaatactaattaatatcacacaccctcatcctcgatggagcctagca
+tcatacacgtttgatagacaacgccaattttactgtaatatgatattcgaatctagtatg
+tggacgctgtaccacattgtttaaaggagctccctttaccgacatgaacgaagcaagctt
+tgtacaagatacgaagaactcagtactggtaactataagagacaatttatacataaaagt
+gttaagaccattatataaaaagaggtatgaggtctttgtaactacaataatacattcatc
+gaacgatggagaataacagagttatttctgctgctcgagctctagttctgctaatttctc
+aatcttgatgccactcgtttgagtcttccattcgctcttaacgacgcgtacatccctctc
+tcctactcttacctatatcctattactggttaacctacatctccgggaaagacgtaggta
+aagtggtccacgattgtattcacttataacacctagtagtactatgtgttgctgagagtg
+aggacacacttactctacgagttcaagtccatatggacattacactttttcagcatctag
+gtgtcatgatgtattaacagccgttaggggctatttgattttatcgattgtcggcgtgtg
+tattttcaacaactaggtgctacaattcgtgaataggcatgaaaattcaagattgcagtt
+cctatcttgtataatctttcctttggacgagttgtaccatttcaactaacctgcaagtgg
+ggggtcatccatatgaagatttgccaaatacctggagaccctgaaaagtttatccagatt
+aataataacaaacaaacctaagcgaagaacgtcagctttaataaactatcactatcatag
+aaattcctgttaattgttcttccaaacgttgaatagactatcacgggtaatagattgaac
+acggagaacgtttatccggcttgtaaaatatcgtcgaatctgctgataactcaattatat
+tcgatggagaattcatatctaccgcttagcttttaaaaattaagtcagattattccgcca
+caatgagaaggcgcgagtgcactaatcaaatcacttaggattattacggacgtctgcatt
+acaatgctttggggtagggttatacaagcatatgattctttaggtctcttgatcgggcgt
+ttaccaccgtagcttaatgttggcatatccgtgatcctaatattctgttgtcagcgtgtg
+tataggaatgcacaacgcaaatctttaagctgacctgttcatgaaagacaggagacacga
+ggcaccacctcaattctatgcaaaactctaacatagcgtggcactatgagtacgtgtaac
+gacaaggtctcatactcgatcctaagataattctcgtctggaaggttttaatctttaact
+aagagtagaacttagtttattgacttttacaattaggatacggttcgcgactctaccaca
+gggcatcatacctggagctctgctatctcgtgaccaaagtggcagcacacatagggtcgg
+gtcctgcatctactgagcaatccctttaagcattcctagtttgagagccatttagatatt
+gctgtttaaaccgattaatggtttctattattataaagtgtaacgctcccattcgggaca
+ttgaaaattagcaataagacaatgtatgatattcggcgagtctcaacaacattatggtct
+accatgggacaaggggttgatatgatgaatccacaaaaaatagtcaaacacccatggttc
+gttaagtgagggtatccaggtgttataaggacgatctagaagtattcaggtacacggtgt
+tcagacatgctctaattgtcaggttgtttataatttaacgtatcgctctctattctaaat
+aatataaaattaaccgctcgtagggatgctttccagtaaaagatacactatcattaaggt
+tatgcaaatgtggcgatttgatttgaatcttagtacattcttaaacttaaatacgtatta
+tttaaagtaaatatattatctaaaccgcttttgtctatccacatttcgtcgaatcacgac
+ctcgttaatgcgacaatttacgaccctctttcatctaaagcgatcatctatttcttctga
+ttgatgtaatactgacccttactccgtacatacaaatgatggtaagcaagaatgactgac
+gctcctgtcacctttcgtggcaatcaactggcgctggtactgaagtagcttgaaagggat
+atggatgtgtatgccaggcttcattttgacaatttttctgtcctgctcagtgttgtctga
+agtcgtatcgtacacaataatgatgactctcattgtagatccaatcacgctttcctacgc
+taatgaaagttctagatagtgtaggtgttagacagaggttagcgcctacatccttacaca
+cacagtgttgaacggcaagcataatcgagtatcaatagctgtatgtatttgtttggaata
+tcatatttctcccgcctttgaacaatgatgccaaaatgtcctgccctagagttatgataa
+aataactgctgccctgtaacttaagtttacaaaccgatattcaatcgttgtgtcctatga
+aaatatttatatttgcaccaagaaaatcatctgtgcgatgaacaaaacacagtgatttat
+aaatacaaagagtacatttagttaccggattgcggcttgacatttattttacagaatttt
+atcggcaaaacacttcatatgaactatcgcttcacgataagtctatgatagactagcatt
+cgtagagaacaggaagagcaatcattatatatgaagtgttacagtgggtactacatatga
+gatcattaggtctatatccggccttcctcataagaccttggaaatatcttacatcagaga
+tatcaaaggaagtatgggcgaacccagaaaaagccccaaagaatagtaattcatcggacg
+taatagtctggttttaactaggggttattgatatttaagctaaaagagttccctgaacac
+tcgaaatgtataatctatcccaactaaaaaagtatacctctaattcagaaatgtcattga
+gattagactgatgtcaatacgctaggaggtaagacaagtagaagtttttgatttaggaat
+tgaaatgtaatacctccatcttaagttctatattttaaagttttatgcggacttcgagta
+agtgcacaaatgatggcataagtgcccagttacatgtttgcggccccgtatgagtaatga
+tctgtttatcaatctctagctactatcccacgaatgcactgatgccagtcatggcgctta
+cattagtcgacagaaatccgacgatacctatcacgcgtgaactgttctggttcttattca
+attcgaagtgatctcagatacattacggccatgcttgcccttcatgtctgctgagcagtt
+ttgttataggctgaatctcctctaagcgaaattgataggatttttggtggtcgatttagt
+ctgtacctgcttattaagattcaaaatgacctacttcttacgccgaaatgatagggatcg
+gctgaggaggataaatatacgctggtgcctggtatttatccagaacaagttgcctgtgta
+tcagatgaactctaatctccgagataaaaaacaggtacgtaaaataaaggccgcaaaggg
+ttacatctcaggatcgtggcgtatagtccaccattagttctgacttacttaatatagact
+gaccgagattgtagtatgtggatccaagcttgccatgtaaaacatgtcggttagcaaaac
+gtataggagcatgatcaaagaagagttaattaatagtactgcactataattgtcggcgga
+gtaccatgagctgttgcccaattcgatgtttattaacagcacgcataaaaaatccagact
+tttcaattagaattaactataaatggtccgcgaaccttaaatgatcggaaggacgggatc
+tgccgttgtatagaccccaactctatctaatttttataacacctctgtaatcaacaaatc
+ttattatgccatcattatgtcattcgccaagtaagtccagttcgagattctctggaccgt
+gcaatagtattgtcaaattatggtaatggaatccttcttctaacacccttagaaaagcca
+cgagaattgacaagttgggcgtgcttgtccaggagcaacataagtgccgtttctttttac
+gatgatagggattcttaaagcttttctctattctagatcccagttgccatcatcaatatc
+tcaattgatgctcattatatagttcttatttagtatgtccagatgtcactgaagatcctg
+cctagaaccgatattctcgacaggatcatcagttcgacggggcaaacgcacctatgcaca
+tccatcttgaccgtgaaacgaaaggaaagagtcagtaccgacccaatgtggaaaaaaact
+cctgtccacgatatgtaggcaagttttactgcctttaattagtagtcgattagtgtagtt
+tgatattatctaccttatagaatgtaaacagtaacccggccttaatggtttggcaggatt
+ctttgtaaaagttaataatgttcataaactttatcagaaaacctgaagtagtccgccttt
+cgcctgcgtaacgttgcagattaattcgttttacggagtggcttgcgtcttgttgtccga
+gtacacatattgctcctctcccccactcttctaggaaaatcaattatgctaacctgcaga
+ccttcttctttactatctttaatgcatgcccagtatgttcatagggtagacttgctatct
+attttgtataatctacgaatgatgcttggggcgcgacttttaacaattaagccgttgggt
+ataatttgagagggtgccacgatagtaagagatttccggcgtgagtaaggaaaatgataa
+taggattaagcaggcgtaatagctcaccctcctcagttctccaaccctgaaccggctaag
+tatgactgtgcagtattaattttgaatacatattgcagcccctaggatacattatagatg
+tctctttcttacccaaactcgcccgcaccaagaaagaatgtggattcgattgaggttaaa
+ttagccggaattacagacacagattcttgtttacaattgtgggaagaaaaccacctcaaa
+cgttgaaacctacattcacaaatggattacgttggggatgagaatcgattccggtcaaaa
+atcatgcccggagcaataaccaagaattcacagaggattaatacacttctccatgaagat
+aggactgcttgcactatccttatctttgtgtcttccttcaagcaccaatcgtttggggac
+aaccacaattatgccaagaaataacggaaggtgttccaaatctatgagtccgcggtttca
+tcgcaacgtttcactgtgggtatcatgactttggactttagatttgggtattctagagac
+tgtagaaagactgcaacaacaagacattcacagggcgaaacctaggaaaggggaccgcac
+gttgtgctagggatgtttccttaggaatccatacatgtaagaaagaatcaaccgtaatta
+tagtgttttcggccccttgaattacgtgcatgcctttgctaaaagacctctgggaaatag
+attgaatattctggacagcagcgaatcctgattatatctcaagcgaatatatgacccgca
+agaaggatttatactagaataagtctaagaaagggcattgggtcacttcttccactaaca
+cacttttatcagttttataccttgagagtcccatgcatttttatatatatttaactttcg
+ttgcgtaaaactttaaatatgatccgtgctctatctctaatctgaacaacggtatcacgt
+cgaacaaatctagtggctacgaatcgcgtcgctaagaacggtttcttctgctggcgttag
+ctacgtatcttctatgctaaaaatgtatagccccgcattagcagcaaaaccgggagaatc
+aaatacacatccgatgaaatcgtaacaaagataaaacaacgcgatttctatgtttgccaa
+agtgattaagttgtatcgtaggggtcagcgctgatgtcttttcagtttgggttttggatt
+taccagtcttttagtttcggtactatttgatcgggacattcgtccaaacatgatggctca
+ttcgttctttttttcaattttaatcaaaaccttgtatttacctgatacattaaactgagc
+atcgcatggaggtggagattcccatatatgtaatcatttgatatcctattccattctttt
+tagttataaataaacgctccactgcacaatgggagtaggacttcaccaataattagcatc
+tactgtaaacaagcgccgtaacgaaatgattactgattgagaaaaataggtctcaacaac
+ttttgacagatatgtatccgatacccaagcgttgctaattgcgcaaaagtaagtagaatt
+acggtcgtattacttgttgccaaatggttattactccaatgggctattctaatccgatgg
+atacgtaggagagagtgtacctacaccgaaactcgtagtgggcttagtggctacgtagaa
+gctgttcgggtcagttacagcgtgcgaccttgtaaaatcgatcacggtgatgaattattg
+ttattgtttaaaagaagtcccctgaatagcccttagataatacgaaaatttgttatgtcc
+agtcgctcgtatatcaaaagattcggttaagttcgcagagttttgccaagtttacaggtg
+atttactaacacttgggagggtacgtacaaccatcacctggttagcagagaatgaattat
+acggtcatgtcgcgaagggcaagtgtgtgagtattgaccgagttattaaacgtaaatgca
+ggcatttacgtcataggacatcgagtttgtcctttgcgaaatgttaaatttatggttttt
+tccgttgagtgataatagctgcaacatgaagatagtaaaactgaggttaaactttcacca
+tattaaattatatgttcaattacgcgatgtacaaactaatgttaatcagatttaggagcg
+cgcttaatatgggtccctatcccgactttgtacgagattttgataaaaaatagtattgta
+aattcatttgatggcgtagaaccgggcaaaaccttgaaaaaggacacatttaggatgcta
+tttccctaagaaagcggaaaatcctggctcaatatttataatagtaatggttaagattgt
+ggcccaatcgctgagtacccgtcttacgctttttccaacacataatcgacgagaatgtat
+ttaaatgtttgagacttacgttttccgcgtacttattattaaagtcattggagagggtgt
+cgtctgggtgtagttttctcatctgctcaggagctaaaaatgtaaatctattggttgttt
+ctaattctgtcgtccgtgtaggctatttaatttttatggtacacttgaatatgtttagcc
+ataatgtagccaatactacaatatcagatacttgtatacgacctatagacttttgccgac
+cgctcgtagagtgatttagaaagatgttcggatagcacagcaatcgtttgcgaatgtaag
+catgcgaagcgagtatttaactgttgactattttgctatatgttactctgaatgttgttt
+tttttaccagaatgtgttataatgatcaaccatgcacgttcctactaatcatataaattt
+tgttacgtaagcttttctatgatagtggtctaaagactacccttgcatactttaagatta
+agacatgcactttaggaggaactcacacgttttgagctgttctagcccacctataagcca
+ttcgtccgcaatcccataactacaatagtcggcaatcttttattacccagaactaacgtt
+tttatttcccggtacgtatcacattaatcttaatttaatgcgtgagagtaacgatgaacg
+aaagttatttatgtttaagccgcttcttgagaatacagattactgttagaatgaaggcat
+cataactagaacaccaacgcgcacctcgcacattactctaatagtagctttattcagttt
+aatatagacagtatttgaaccaggcgctaatgttaaggcccccttcgaaaaccttgttat
+gttattccatgtggtcggaggatttgcggggcgatagcgctgggcggggatcaacaattt
+cgttcatgcgagcgcccccataaccagtaggtacagttcggaaaagaaaaccccacgcac
+tcgctagaagtgttacaatcacatcacttcgtaccgaagggactactgtattccgtcttg
+gggatgtaacagactgattacagtcttatgatgaagcctcattcatctaaaattagttga
+tttattccacggatactatcacactcctatagaaagagttaccaccgtgggaagctagat
+ataataaataaaagacatacaatattagtatggctcatgatctacacttactcggatctc
+tctttttttataaccagtagatcgcattacacgtattgttgttccgcatcaggccctagg
+ggctcaaacttccatggtggataactaaaacgtccgtcactaaacgaagatattaataga
+tgaaatacacgggtttacttgatttctgttcagtcattcacgggaaatcctaggagtctt
+tcataacggcggtcttagtaggaatgtagtcaagctctgtagaggtctcgacggaattgg
+tatttcctggcatcacaatttacctagtattggagatcacttaaaataatgttgagataa
+taatcaggatatttctagtatgtgacaaacctctatttagtgattgtgattttcaattaa
+acaagacgtaggggtcaaattaacgactacatgttggaaagaaggccgaattgtaatatc
+taactcatgtactaagaagaagtgctttcgtttaaggctttctgtctaacattctaacgt
+caattcctatgtaatactactgtaaccaagttattactcggctgcgtagataaagtctca
+tgtaaatgacggtttatctgttacttttgggtttcaacctagctaggacgccggtactaa
+ttacgacacctgcgtatagtgcagggtgttcaatgtgcctttttatgtccggattataac
+catccctctcccacttggaatatcaccgggttcttaatgacttagttcgtcttccttatt
+ttccgggtaagatcgctgtggaccggacccattttgatctagtctaaaaaggtatatagc
+gtttcgtctggcccgcttacgttcactgaaacttagattaatcaatgcactgcactggat
+taacaagaacatgttatagtgtactgacacatgttagactaagaggtctgttcgggttag
+ccgacttatatgtttaaccgattttgacaactgggttgagagataacaatgaagagtgag
+gactgtagaagatcttaaaactgtaccatagtgctcaattcgctaatggcttgaattatt
+taattgttctaaccctggcgtcgaatttttttggttcgaaaatacttagcacagcgtatt
+gttcaacgagatgcacaactgtaccgttagaaagcggcttaatgacaaggcagtattgtg
+actattgacagggaatcctaaaaagctactcgaattggtatatggaagaggtatgtactg
+agaggtcgcgcctattagtcaaattctgccaaagaagagtcaaaagcttaactagtttga
+tggtatgaggtttaatgctaggtggtctataccaccaaaaagtatatgggatatcccaga
+atttatcgactttcaatcgtctaccgtcacgacgtacactaggcagccctaatccaaaac
+ttttgaggatgagtactgccactattatactgtaccatttgtaacttacattttatatct
+tcaaagaggtagatattgtcggccattactgtcacttacactaagggtagcttgattact
+gatacctctcatggtaaaaagtaatttaagaacctatttttttacataacctctgctact
+accgttagtgttttagtcggttcaagtcacaaaatccctgtagcgcacccctataagcag
+aaggaaaccttaatgcggataaaaacttttgccggaaccgttaatcctatgagaatacca
+ctcttggaatcggtcctttaggctgaggatatagaacgaggggaacgcatcaatctaggt
+taggtgagagaactttgtatcaaaacgcaagtaccatatgccgtcctcagtaaattgcca
+aatgcagaaatcttacactcttttcttaactaagtatgagagcaacctcactcctgaaca
+gcttgttacctaacgagaagaggctttaagtagcctggagcctcaaccggatatccggat
+ttgactctcatccacttacatgatgattacggtcattacatctcatgattttctgagtgc
+cctatagactgggaatttaatctaccctgtttctatttgttaacaaggagaaccactggt
+caagatgacgcgcttccatttatgccaccataagtaagttctcggaacccttacatgatt
+ggcctaccaacctatatatgtgaccaatgtacggtacatagagtgtggcctatcatattc
+aggtcatcgagctcagtatttaaagattatatggtcgctgggggtattcagtgcgcgatg
+gaagactaacattggaaatcaacggaattgacaacacgctcactttaataacctatctca
+ggataagtttaatgtaattagacggaactttctctaactccgtgtactaactctttgaaa
+ataatgtgggtatttttatttcatctagatttgtctgtatcgaaagaaagtattggtcca
+aataatcctcagtaaaatcaagtcataaatataaaatttagatcttaggacagaggaaag
+tgctttcccgagcataggatctggcctacgccagtagttcatgcttgtgttaaaagttgt
+tactgtttatagtccgtactcagggtagtgttcgatactcagcggggaactgacatatta
+cactaaggaatcaaggcccttcgtatgggtcatgtttatatatttaattacttacgctat
+ttgatcgagaatagctatagtaacgtcgtaagaatgcaggatgcgattcgagtttgtaaa
+ttcacagatactgtgtatcatattattatagatgttaaggcatagaattattggtattga
+tgtacaaaaaattatgggtgggcagtaccgataggcattacgagcagtgcagcttggaag
+aactggatgtatcctataactagtaagagccttaaaggtactacatacccagggatgtta
+ccatcattaatttggccatcttcaatcttcgcaatgcatactttcttctacaagatgcct
+tttagaagacaaaataagtgtcaacaataacgctgtaacttaactctgttgtacgtggaa
+tcaagtctcactaaagcaactaacattccgacatgcaaacgcaggactactagattatta
+aattcgccagcccgcctcgtttaatataacatcataaaaattctaagtaatatctcacac
+actaatccgccatcgtccatagcatcagtcacctgtcttacacaaacacatgtttaatcg
+atgttgttatgccaagctagtttcgcgaccatgtaactaattgtggaaagctgctacctt
+gaacgacatcaaccatcctacctttgtacaacagaccaacatctctgtactggtaaatag
+atctgaaaagttataaatataactgttttcacattgatagaaaaacagctatgtgctatt
+tgtatatactataataaattaagcgaaacatggagattaaaacagtgttttctcatcctc
+cacctcttgttctgctaatttataattcttgatgccactcgtgtgagtcgtccattcgat
+cgtaaagaacccgacataaatagatacgacgctgaacgagatcctatttctcctgaaaat
+tattagcacggtaactcctagggatagtggtactagttggtatgaacgtataaaaacttg
+tactactttctcgggatgtgagggagcaaactattactcgaccagtgcaacgcattatcg
+acagtaaaagttttcagctgatacctgtctggatggattatatgcaggtaggcgagagtg
+gattgtagcgatgctcggcgggggtattttaaaaatctaggtgataaaagtcctgtttag
+ccaggaaaagtcatcattgcactgcatatcgtcgattagctgtcatttcgtccactggta
+ccagttcaacgtacatcaaagtccgggcgcatccatatcaagttttgcaatagtactcca
+gaccatgaaatggttatccagattaataataacttaatatactttcactacatactcagc
+gggtattaaatttcactttatgtcaaaggactcttatgtggtcttcaaaaaggtctagag
+tctatcacgcctaattgtgtgaaaaccgagtaacttgatcagccttgtaaaatatagtag
+aatatgatgttaaatcatttatattccagggagattgaatagcttacgattagctggtat
+aatttaactcacatgattaagcaaatatctgtaggaccgagggaaagaataaaataaagt
+accatgagttcggaacgctgcattacatggcgttgggctagcctgatacaagaagatgag
+tatggagctctcttcatcgggacgtgacaaccctagcgtaatcttggcagatcccggagc
+agatgattatcgtctaacactgtctttaccaatgcacaacgcatagatttaacctgaact
+gttctggattcactcctgactacagcctacaactcatttctatgcataactcttaaagac
+agtcgcaatatcagtacctctatacacatcggatcagactagatcataagataagtctcc
+tctggatccttgtattctgttaagtacactacaaatttgtttagtgtctgggacaattac
+gataagggtcgcgactagaccacagggcatatgacctccaccgctcctagcgagtctcca
+atctgcaagcactcatacgctaggggcatgaatcgactgtcaatgcactgtaagatttac
+gagggtgagacccatttagatatgcctcgtttaaccgttttaggcttgataggatgagtt
+tgtcgatccatcaaattcccgacattcatattgtccaataagtatatctagcttattcgg
+actcgctaaactaaattatggtataaatgccgtcaaccggtgcatttgttcaatcaacaa
+attatagtcaatctcccatggggccttatggcagcgtatacagctggtataacgaccata
+tacaactatgaacggactagctgtgaactaagcagattattggatccttgtgtataattt
+taagtttcgatctatatgctatagtatagaaaatgttccgatcgtacgcttcctttacag
+ttaaacagtctatatcatgaagcttatccaaagctggacatttgatggcaatcttactta
+attatgaaacttaattacctattattgaaagtatttatatgatcgaataagatttgctct
+ataaacaggtcgtccattcacgacctagtgattgcgtaaattgaccaacctaggtaatct
+aaagcctgcatctatttcttatcattcatgttatactgacccgttctcagtacttaaaaa
+tgatcgtaagcaagaatcactcacgctcatgtcacatttagtcgaaataaactgccgatg
+ggaaggaagttccgtcattgcgatatcgatgtctatcccacgcgtcattttcaaattggt
+tatctacggataactgtgcgatgaactactataggtcaaaattatcttcaatctcattct
+agatcatataaagatgtccttcgcgattgatacgtctacagtgtgttggtgttacacaga
+gggtagcgactacttacttactaactctctcttgatccgcaagcataagccaggttaaag
+tgctctatctttttctgtggattataatagttataccgccttgcatctaggtgcccatta
+ggtaatgccctagtgttttcataaatttactcctgccatctaacgttactttaatttccc
+agattcaataggtctctcatttgaaaattgttatatgtcaacaaagaatataatagctga
+gtggaacaatacactgtgagggagtaatacatactctaaattttctttacggtttgcgcc
+tgcacagttttttttatctatgtgatccgcataaaaagtaatttcaacgttccattcaag
+ttaagtcttggtgacactagcattaggagagatcaccaagaccattatttatttagctag
+ggtttaagtcggttagaaatatcagataatgaggtctttatccggccttacgcagtagaa
+attggaaatttcgtaaagcactgagttcaatggaagtatggccgaacccacataatgcac
+aaatcaagtcgatttcttccgtccttttagtctcctgggaactacgggttattcatagtt
+aagctaaatcagttaacggaactagacaaatgtataatagttcccaaatatatatctata
+aatcttatgcagttagggaatgcagatttgaatcatggcaatacgctagctcggaactca
+actacaagtgttggatgtacgaattcaaaggtattacatccttatgatgttcttttttgg
+atacttttatgacgacttccacgaagtgaaattatgttcgaatatctgaacagttacttg
+gttgagcccaaggatgacgaatgttctgtttataattctcgtcataatataaatacaagc
+atatgaggccagtcatggagctttcatttggactaacatttccgtagagtcatatcacgc
+ctgtaatctgatccgtctttttctattcgaagtgttatcagatacatgacgcccttgcgt
+gacattcatggctcctgacatcgggtcttttaggctgaatctaatctaacccaatttgtt
+tggattgtgggtcctccattttgtctgttaatgcttattaagattaaaaatgtactacgt
+atttagacctaatgattgcgatacgctgtggaccattaatataagctgcgccaggggatt
+tttccagatcatctggcctgtgtatatgttcaaatctaatagccgagagaaattactccg
+acggaaaataaaggcagataagcgtttcagagcaccatcgtggcgtttagtcaaccttta
+gttcggaatttattaatatacaatctcactctttggacgagctccttaaaagatgccctt
+gtatatcatgtcccgtacctaaaagtataccagcatcatcaaagaacagttaaggaatac
+gactgctctataattgtccgaggagtaccttctcatctgccaatagtcgttgggttggaa
+aacaacgcattaatatgccacacttgtcaattagaagtttctataaaggggacgagtaac
+tgatttgagacctagcacggcagaggacgttcgtgtgacaacatctctttataagtttga
+gataaaatcgctaatctacaatgattatttgccaatcattatcgaatgcgcaaagtatct
+cctgttcgtgattctagcctaaggccattactatggtcaaattatgctaatcgaagcagt
+cttctaacacccttagaaaagcaaacactattgaatactgccgccgcattcgccagcacc
+aacataactgcacgtgcttttttccatgattggcattatgaaagatttgatctatgattc
+ttaccagttgcaatattcaatttagcatgtgttcctaattattgtgttattatggtctat
+ctcatcatgtaaatgaagatcatgacgtcaacacagattctagtcaggatcatcagttcc
+tcggggaaatcgcacctaggaacagccttatgcaaccgctaaacaaagcaatgaggatgt
+accgacaaaagctcgatttaaaagcctcgaaacgagatgtacgaatcgtttactgccttt
+tatgaggagtcgagtactgttggttcatatttgctacatgattgtatgtaataacgatcc
+cgccctttatcggttcgatcctttatggcgataagttatgaatcgtcagtatctttagat
+caaaaactcaactagtacccagttccccggaggaacggtcatgattaatgcgttttacgg
+tctcccgtccctcttcttgtcagaggaatcagtttcatccgatcccactcgatgattggt
+atagctatttgccgaaaagccacaacgtattcggtactatcttgtttgattcccctgtat
+cttaattcgcgacacttgatatcttttgtgtttaatcgacgaatcatcctgggggcgaca
+cttgttacaattatccagttgcgtttaatggctgtgggtcacaagattgttagacaggtc
+ccgcgtgtcgtaggaaattgataattggagtttgcaggacgaatagctcacccgcctaag
+tgatccaaccctcatcaggataactatcactgggcagtattatttttgatttcatatgcc
+accccctaggagactgtagtcatgtatctttcttacccaatctagcccgaaacaagaaag
+aatgtcgattccagtcaccttttattagaccgatttacacacaaagtgtcttggtttaaa
+ggctggcatgaatacatactcaaaagttgaaaacgacttgctctattcgattaccttcgc
+gatctcaatcgattacgctaaattttaatgcccgctgaaatatccaacatttaaaacagg
+attaattctctgatccatgaacttaggactcattgcacgtgacttatctttctctcttaa
+ttcatgctccaatacggtgggctaaaccacttttatcacatgaatgtacgcaacgtgtta
+ataagctatgagtacgcgggggcagcgaaacgggtcaatctgggtatcttctattgggac
+ggtacatttcggttttatagactatgtagttacacggcatcaacatgtaattaaaacggc
+gtaacctaggaaagccgaacgcaccttgggattgccatgtgtccggaggattacatacat
+ctaagaaacattctaaactatgtatagtcgtttacgacccttgtagtacgtgcatccctt
+ggcgaaaagtactctgggtattagagtgtatattatcgacagcaccgaatcctcatttta
+tagcttgacaatttatgacccgaaagaaccttttataagtctataagtatatctaacgca
+attgcggcactgagtccactaactatctttgagcagtgttatacagtgagacgccatgga
+aggggtttatatattttactgtcgttccctaaaaagttaattatcagacctgcgcgatct
+cgtagatgaacaacgcgatctagtcgaaaaatgcttgtggctaccattccagtcgagatc
+aaccgtttctgcggatcgcgttacattccttgcttatttgcgataaatcgatacaacccc
+attaccagaaaaacccggagaatcaattactctgcagatcttatactaaaaaagagatta
+caacccctgttctatgtgtcccaaagtgagtaacgtggagcgttggggtaagagcggagc
+gattttaactttcgcttttccattttccagtattgtactttacgttatatttgagcggca
+cattcgtcaaaacatgatccatatggactgaggtgtttaaatgttaatcaaataattgta
+ttttcagctgactttaaaatctgcagccattggaggtggagattccaatagatgtaagca
+ggtgatatcatatgcaattcttgtgacttattaagataccagacacggcacaatcgcagt
+agcacgtaaacaataatgacaatcgacggttaaattccgaacgtaagatatgtttacgga
+tgcactaaaataggtagcaacaacgtttctctgagatgtataagttaccaaacactggag
+aattccgctaaactaaggacaatttccgtcgtattaattgttgacaaatggttagtaata
+cattcgcagtggataatccgttgcatacctagcactgagtgtaaataaaaccaatcgact
+actggcatttcgggctaacgactagatgttagcctatgtgaaagcctcacacatgcttat
+tgccttcacggtgagcaatgtttcttattcgttattagaagtcacctgtagagacagtag
+agatgacctaaatttggtttgtccagtcccgaggtgatctaatgattaggttaacttaga
+acagtggtcaattggttaaagctgatttacgaacacttccgaggggtcgtaaaacattaa
+actggtgagaacagtatgatgtattcggtcatctagacaaccccatcgctgggagtttgg
+acagtgttatgattcgtaaatccaccatgtgtccgaattcgaaatcctgttgctccgggg
+agatagggttaatttaggcttttttacggtgtggcatattagctcaaacatcaacattct
+taaaatcagcgtaaacggtcaccagttgatatttgttctgctaggaagcgatgtacaaaa
+taagcttaataagatttaggtccgaccttaatttcggtccatagcacctctttctaagtg
+ttttgcttaaataattgtattgttattgattttctgcgagttgaacacggaaaataagtc
+aaaaaggacacttttaggttcatatgtaccgatgaatgcgcaatagaatcgagaaatttt
+tagattagtaatcgtgatgattgtggccaaatcccgcactaaacggctttcgctgtttcc
+aaaaaattttagtccactaggtatttaaatgttggacactgaacgtggaagccgtcgtat
+tatgaaactaatggcagaggggctcctctgcgtgtactttgagcagatgctatcgtcaga
+aaaaggtaaatcttttggttctttataattctggcgtccgtgtagcctagtgaatgtgtt
+tggttcaagtgaatttgtttagccagaatggaccaattacgtcattagctgttacgtcta
+tacgaaatatagactgtggacgacccatcgtagagtcatgtagttacatgtgaccttaga
+acaccaatcgtgtgcgattgtaagcaggacaacacagtattgtactggtcaattggttca
+tagatctgactatgaatcttcgtttttgtacaacaatctcggtgaagcttcaaaaagcct
+ccttcctaataatcagttaatttttcgtaaggttcctgttcgaggttagtcgtataaaga
+cgaaacggccttaatgtaacattaactattccactgtaggtggatctaacaaggttggac
+atgtgctaccaataagataagaatttcgtccgcaatacaatatctacttttgtagcctat
+cttggattaacaacaacttacgttggtatttcaccggacgtatcaaatgattctgatttt
+aatgactgagagtaaacatcaacgaatcttatgtatctttaagccgctgcttgacaagtc
+acattactgttagaatgaacgcttcattactacaaaacctaccaccaactcccacattaa
+tattatactagatgtttgaagtttatttgacaaaggttttcaaaaagcacagaatcgtta
+cgaacacgtacattaaattgttagggtattaattgtggtcggtgcatttccggccccata
+gcgctccgcggggagaaactatggccttcatgacagcccccccataacatctaggtaatg
+gtcggataactataaacaaccctctccagagaactgtgaaaataaaatctcttagtacac
+aagcgtatactggtttaagtcttgcccatcttaaagactcttttcactattttcttgatg
+cctcattcttctaatattaggtgattttttaatccgagaatataaaaagacgatagaaag
+tgttaaaacacggcgtagcgacatattttaaagaaatgaaatactttttgactatccctc
+atgatctaaacttacgcggagctatctttttgtataacatgtacagagaattaatccgat
+gcttcttccgattaaggacatagcgccgaaaacgtcatggcggcttatcgatatcgtaac
+gcactataccaagtgattaagtgatcaatgaatacgggtttcgggatttctgttaagtca
+tgcacggcaaatacttggagtcttgaataacgccgcgcgtagtacgaaggttctcaagct
+cgcgtgacgtatagaccgtattgctatttcctgccttctcaattgtccgaggattgctga
+taacttaaaataaggttgagtttttaataacgatttgtcgagtttgggaaaatcctcgtt
+tgtgtgtttgtcattttcaagttatcaagaactacgggtataatttacgacgtaatgttg
+gtttgatgcccgattgcgaatatcgtacgaatggtatttgtacaactgctttcctttatc
+gattgctcgagaacattataaagtctattactatggattaagactgtatacaagtgttta
+agcggagcccgtgataatctataaggttttggtacctttatctgttacttttgccttgaa
+acatacatacgtacacgggaatatttacctaaacgccgtatagtccagcctcgtatttgg
+gccgtgttttgtcagcattttaaactgaaagcgcccacttgcattataacccggtgcgga
+atctcttagtgactcgtcaggagtttacgcctttgagacctctcgacaggacccattttg
+atctagtcgttataggtagagtgcctttcctatcgcaccattaccttctagcaaacttag
+agtattcaatgaaatcatatcctgtttatactaaatgttataggctaatgacacagctga
+cactaagaggtctcttcgggttacccgaatgagttgtttatacgatgttgacaactcggg
+ggagtcatttcaatgaagactgaggactcttgatcagattaaaacgcttaatgactgata
+atttagattatgccgtgtattatttaagtgggcgaaccctcccctagaatgggtttcctg
+agaaaagtcttagaacacagtattctgaatccagatgcaaatcgctaacgttagtaagcg
+gctgtagctcttggcagtttggtcaatagtcaatcgcaatccgtttaaccgtctactatt
+cctagagcgaagagctatgttctgacacgtccccaatattaggcaaaggctccaaaagaa
+cagtcaattgattaactacgggcttggtttctccgtgaatccttgcgccgctataccaca
+taaaaggatagcggtgataccacaagtttgcgacgttaaagcgtcgaccctcaacaagta
+cactagcaaccccttagcaattaattttgtccatcactactgccaagagttgactggacc
+agttggaaatgacatttgatatattaatagagctacatattgtaccactttactgtcact
+tacactaaccctagcgtgattactcatacatatattcgtaaattctaagttatgatacta
+gttttgtaaatttaatcggcgaagacacgttctcttgtacgagcttcaactaaatatttc
+actgtagccaaccactttaaccagaaggataccttaatgccgatataatattgtccagga
+aacgttaatactttcacaagacaaagcttggaagaggtactttacgatcacctgatagat
+cgaccggaacgattctatataggtttggtctgagaaatttgtagctaaaaccatgttcca
+taggaactcctctgtaatgggcaaaatgcagatagcgttcaatcgttgcttaactatcta
+tcacagcatcctaactcctcaacagcttctttcctaaagacatcagcaggtaagttgacg
+gcacccgataacccagagcacgattggaatctaatactctgtatggatcattacgctaag
+taaatataatgattttctgactcaaagttacactgcgaattttatattaactggttctat
+ttgttaaataccacaacctctcgtcaacaggtcgcgatgcaagtgatccaaaaatatcta
+acttataccaaccattacttctggcgcagaaaaacatagatatctgaacaatcgaccgtt
+aagactgtctcgccgatcttaggaacctaatactgctcagtagttattgtttatttgggc
+catccccggattatgtcagccatggaacactaaaagtcctaatctaacctatggacaaaa
+agctcacttttataaaattgctcaccttatgttgattgttatttgtccgaaatgtctata
+actcagtgtactatctattggaaaattatggccggagttttattgaatatacttttgtat
+gttgagaaagaatgttgtcgtaataattatcagctggaaaatcatctaatatatattata
+ttgagatattacgacagacctaagtgctttcccgtcatgagcagatggactaacactctt
+ggtaatccttctcgttttagttggtaatgtttagtctaagtaatatcccgactcttactt
+actcagagcggaaatgactttttaaactaacgtttaaaggcacttagtatgcgtcagggt
+tatttttttaattacgtacccttgtgcagagagtttagctattcgatcctacttagtatg
+aaccatgagagtacaggttggtaattcacagagaaggtcgagaagattatttttgatgtt
+taccaatactatgaggcgtattcatcgaaataattttatggctgcgcacttcacatacgc
+aggaagaccactgcagcttgctagatctggatgtatcattgtacttctaagagcctgaaa
+ggtaatacattcccagcgagcgtaacagattgtatggggacatattcaatcttagcaatg
+cattcgttcttcgaaatcaggcatttttgatgtcataagttctgtcaactataaccctgg
+aactttaatctgttgttcgtcgaatcaaggatcaagaaagcttctaaaaggcccaaagca
+aaacccaccactacttcagttttaaattagaatcacaccctagggtattagataataatt
+aaatgtcttaggaagagatatcaaaagatgcagacatcctcaagtgaataagtctccggt
+ctttcacaaacacatggttaagcgatgtggttttgactagagacgttcgccaccatcgta
+atatttctggttacctgcgaacgtgaaccaaatcttacttcatacattgcttaaacagta
+caacttatctcttatcctatagagatctcaaaagtttgtatttttactggtttcaaattg
+agagaaaaactgcgttctccgatttctatattattgtttaaatgatgccaaacatccagt
+ttaaaacacggtgtgatcagccgactcagattcgtatcctatgttagaatgagtcatcaa
+actacggtcacgcgtacattacagagtaaactacacgaatgaaagagataagaagatgaa
+agagttaataggtctcctgttaattatgagaaccctaactactacggattggcctactag
+tgggttggaacggatataaaattcgactaagttcgcggcatgtcaggctcctaaatatga
+agagaactcggcatcgaattatccacagtaatagttggaacatgattcctctatgcatgg
+tgtatatccacgtacgccagtgtgcagtgtagccatgcgaccacgggcgttgtgaatatt
+cttcctcagaaaaggactgttgagcaaggaattggattctgtgaacggaatatagtcgag
+tagatggaatttcctacactgcgaaaaggtcatagtaaatcaaacgccgcgcgcagacat
+atcttcttggcaattagtactccactaaatcaattggttataaacttttagaatatcttt
+atataagttcactacttacgctgcgggtagtatatttaaagtgatgtcttaggaatctta
+tggcggcggaataaacggcttgactatagataccctaattctggcataaccctgtaacgt
+gtgaagcatgctttaatagacgactagatcagcttatagaatggatatgactgccacatt
+gaagagattaacattagcgggtataatgttacgaacttgtttaacaaaatagctctacca
+cacacgcatagtataatataaaggtcctggagttcgctacgagcctggaattgcagttcc
+cctaccctgagtaaacaagatcagtatggacctatcttctgacccacgtgtaaaaactac
+cgttagcggccctgagaacggtgaagttgattatcggctaacactcgctttaccaaggaa
+caaacaattgatggaacaggtaagcggctggattctatcctgaatacagcataataatat
+ttgctttcaatatatagttatgacactcccaatatcactaactctttacaaatcggatat
+gaagagtgaattagagatggagccgatcgttccttgtattctggtaagtactcgactaat
+gtgtgtagtctaggggtaaaggtccttaaccgtcgagtctagaactcacgcattatgaaa
+tcctccgagcatagagactctaaattcgccaagcaataagtcccgacgcgaaggatgaga
+agctcattgaactgtaacatttacgtcgggctcaccatgttacatatgcagcgggtaaaa
+gtttttgcctggagtggttgagtttcgcgatacataaaaggccccactttcatatggtca
+aatatctatatcgtgctttggacgactcgataaactaaagtagcctagtaatgccctaaa
+ccgctgcatttgtgcaataaaaaatttagagtatatataacttccggacgtatggctgcc
+ttgaatcctcggatatcgtccttatacaacgatgaacggtatagctcggaactatgcaga
+ttaggcgatccttgggttgaatttttagtttccatagatatgagttagttttgatatggt
+taccatacgtccctgcattgaaacttaatctgtatattgattgatccttagcaatagcgg
+cacatttctgggcaatatgacttaattaggttacggtttttactatgatggatacgtttt
+atatgatagaataacagttgctatttaaacaggtactacattcaactaatactgtttcac
+tattgtgtccaacatagggaatatattgcctgaatagatgtattatcaggcatcttttac
+gctccaggtagaactaattaaaaatgatccttagaaactttcaagcaacataagctaaaa
+gttacgccaattataagccacatcggtaggatcttcaggcattcccatatccttctctat
+caatcccgtctgttgctaattggttatctaagcatatcgcggcgagcatctacgataggt
+ataaagttgctgctatctaattcgtcataatatatacatggaattacagattcatacgtc
+ttcagtctcgtggtgtttctaagagcggacccaagaattacgtaatatctctctcgtgtt
+acccaagaagttgacacgtgattgtcagctatctttttctggcgatgttaatagttataa
+acaattgcatatagctgcaaattagctaatcaaatactcgtttcttaaatgttatcagca
+aagctttaggttctgtaatttcactgtgtaaagagggcgctaagttcaaaattggttttt
+ggcaacaaacaatttaatagcgcagtgcaaaaataatatctcagggtgtaattatttctc
+taattggtctttacggttggaccaggcaatgggttttttatctatgtgataccaattaaa
+agtaatttcaaagtgacattaaacttaagtattgctgtcaagaccattacgacacttcac
+caacacatttatgtattgtgctacgcggtatggcccgtagtaatttctgatattgaccgc
+gttatcagcaagtacgctgtacaaatgccaaatttagtaaagctctgtgtgcattccaag
+gtgcccacatcacacattatcaacatatcatgtcgttgtattacgtccttttactagcct
+gggaaataccggtgattcagagtgaacataaatctctgaaagctactagacaaagctagt
+atagttaaaatatatatttcttttaatattaggatctttgcgattgcacatttcaagcat
+cgcattaacctacctccgtactcttctacaacggttgcatgtacgatttctatgcgatga
+aatacttatgttcttagtttggggttactttgttcacctagtcctcgaacgcaaattagc
+ttcgaatatctgaaaagtgtatgcgggcaccaaaacgatctcgattcttaggtttataat
+tatagtcagaagataaatacatgcatatctggacactcttccacatgtcatgtcgactaa
+ctttgaactacagtcatatatagactgttatctgatccgtatgtgtctattactactctt
+atctgagaaaggacccaatggagtcacagtaagcgatcatgtcatcggggctttttccct
+gattataagattacactattgctgtgcttggggcctcctactttttctatcttaatcatt
+ttgtacattaaaaagctaagaagtaggtacaacttatctttcccatacgagctggaccat
+taatttaacagccgcaaggcgagttttaatgttaatctggaagggctttatgttctaagc
+ttttagcactgagaaattaatccgtaggaaattaatcccacataacccggtaagagaacc
+ttacgccccgttactaataatgttctgcgcaatgtaggaagtgacaagctcactcttgcg
+acgagctccttaatacaggccctgcgttatattcgaccgtacctataactagaccaccat
+cttaaatgtacagttatggttttcgacgcatagagtatgggaccacctcgaaatgctcag
+ctgcaaattgtactgggggtggttatcaaacatttaatatgaatctatggtaaagtacta
+gtttatagatagccgaacactaaaggtttgcagaccttcctcccctgaggaacttcgtgt
+cacaaattagattgagaaggtggtgataaaatcgcgtatctacaatgatttggtgcaaat
+atttatcgattgcccaatcgttctactcgtactctttatagcctaacgccttttcttggc
+gctaattagcctaatccaagaaggagtctaacaaaattacttaaccatactcttgtctat
+tcggcccacgcatgcgcaagctcaaaaagttctcaacgggcgtttttacttgagtcccag
+gaggtaacattggatctatgagtcttaacagtggaaatatgatttttagattgtgttcag
+atttattgtcttattttggtctatctcatcagctatagctacataatgacgtcttaactg
+tttcgactaaccttcagatctgactaccccaaatacaacatagcaaaagaatgatgctaa
+cgcttaactatcctttcacgatcttaacaaaaaagctccatttaaaagaatcgaaaacag
+atctaccattcgtggaatcaatttttggacgagtactggtcgggtcgtgcttatttgcta
+caggattgtttcgtataacgttcaagcactttagcggttccatccttgatggcgttaact
+gatgatgcgtaagtttatggtgatctaaaactctactacgaaccaggtcccagcacgaaa
+cgtcatctttaatgagtttttaggtctccaggcactaggctgcgaagtggaatatgtgtc
+atcagagacaaatagatgattcctatagctttttgcagttaagccactaagtaggcggtt
+ctatagggtttcattcaaatcgatcgtaattcccgactctgcatagcgtgggtcttgtat
+agaccattcttcaggcccgccacaatggtttcaagtttcaacttccgtttattggctgtc
+cctcaatagagtcgttctcagggcacgactctcgttcgttattcataagtccagtttgat
+ccacgaatacagaacacgcatatctgataataaaagcttaacgataactttcacgcgcat
+ggtttatttttgatttattaggcaaccaaataccagaatgtagtcagcgatatgtagtaa
+aatttagacaaacataaaacaaagtatcgccattacagtctcctgttaggagaacctttt
+tatcaatatgtgtaggcgtgtattggcgcccttgatttaataataattacggctaaacgt
+attgatattttccaggaactgccccatctcatgagatgaccctaaattttattcacacct
+catttttaattcttttatatcacgattatttatctgagcaagcatctttgcaagcattca
+tagtgacggtgctgtctctatgaatgcatgctaatatacggtgcgctaaacatattggtt
+caattcaatgtaagctacctcggaatttgcttgcactaagacggggaagccaaaacggta
+aatcgccgtatatgctagtgccaagggacttgtccgttggagtcactatggagttacaag
+cattataaatctaaggaaatcgcagtatcagtccttaccccaaagatacttcgcattccc
+tggggtacggaccatgaaatacttctttcatacatgataaacgatggagactcggttacc
+accctggtagttactccatcaattggagttaactaagatcgctattacaggctttattag
+ccaatcatcacaagcctctttttagagattcacaagttagcaaaccaaagttcctttgat
+aagtctttaacgagatctatcccaattccggctaggagtaaaatttatatatttgagatc
+ggggttaaagtcacacgcaatgcaaggggtttttatatggtaatgtccttccctaattag
+gtaattttcagacctccgagagagagtagatcaacaacgcgttatactcctaaaatgctt
+gtcgataacatgacactacagatcatccctggatgagcatcgactttcattacttgatta
+gttcagttaattcgtttcaaaccattttcaacaaaatcccccagtagatatgtatatgca
+catcttagactaaataacagttttcataccctgggatttgtgtcactatctcaggaacgt
+cgagacgtcccctatcaccgcagcgagggtaactggccctgttccattgtaatcgatggg
+acgggacgttatattgcagacccaaagtagtaataaattcagccatatggacggaggggg
+ggaattgttaagaatataattcgattttcagctgaatgtaaaagctccagccattcctcc
+tccacttgacattagttcgaagaaggtctgagaattggaattgcttgtgacgttttttgt
+ttccagacaaggaaatagcccagtaccaagtataatattatgacaatagaagcttaaatt
+cacaacgtaacatatctgttagcatgctctaatagaccgagaaaataagtgtctatgtgt
+gcgagaactgtcaattcacggcagtagtcacctaatctaacgtctagttcccgactatga
+agtcttcacaaatggttagtaataatttcccagtggagtagaagtggcataacgtgcact
+ctctgttaataatacctttagactactcccatttcgccagaacgtcttgatggtacccta
+tgggaaacactcacacatgcttattgcctgcaacctcagcaatgtgtcgtatgcggtatt
+tctacgaacagctagtgaaaggactgatgacctaattttggtttctcaagtccagacgtg
+atattttgatgaccgtatctgacatctctgggcaattcggttaacctctggtacgaaata
+gtccgtcgcgtaggtaaaaatgataatgctgtcatcactatcatgttttagctaagctac
+actaccccatcgctcgcacgtggcaaagtgtgaggattccgatatcatccatgtgtacga
+attcctaatactcttgctcagggcacttagggttattgtagcctgtgttaccgtctcgca
+tattagatcattaatcaacagtcttataatcaccgtaatcggtaaacagttgttatttgt
+tctgataggtagacagctaataaagatgctgttgaacagttacgtcccacctttattgcc
+ctacagtgaaactagttcttactctgttgctgtaatatgtctagggttattgatttgctg
+ccacttcaaaacggaaattaagtcattaacgaaaatggttccttcataggtaaagatcaa
+tccccaattgaagccagaaattttgagatgtcgattcctgatcattcgccaaatttacag
+ctcgtaaacgagttccatgtgtaaaaaaatgttgagtccactagcttgtttattctggct
+caaggtacgtggaacacgtagtattttgatactaatgccagacccgctacgatccctgta
+ctgtgagcagagccgatcctcagaaatagctaaatcttgtgcttcgttagaagtctcgac
+tacgtgtagcctagtgtttgtgttgcgttatagtctatttgtggacacagtatggtcaaa
+tgacgtcttttgatctgacggcgttaacaaagatactctgggcaacacacatacttctct
+catgttgtttcttcggacctttcataacctttcctggcacatggttagctgcacatcaca
+ggattgtaagggtctagtggttcagtgagcggaatatcattcgtcggtggtgttaatcta
+tctcggtgtagcttataaatgcatccgtaagaatattatgtttatttgtcggtacgttca
+tggtagtggtgtcgccgatttagacgtaaaggcatgtatggatcttgatctatgcaaagg
+taggtccatctatatacgttgcacagcggatacaaataagataagaatttactaacattt
+aaattttcttattgtcgagcatagattggaggaaaaacttatttacttggtatttaaacg
+gaagtttctaatgtttatgattggatgcacggacagtttactgcttactttcttaggttt
+cttgaacaacaggatgcactagtaacatgtctcgttcatgcttccattaagttcttctta
+aacttacacaaactacctaatttagagttgacgagatggttgaacgtgttgtgacaaacg
+tttgcaaaatgcacagtatcgttaccaaaaagtacatttaagtgtgtgcgtaggaattct
+gctacgtccattgcaggccacattcacatcccacccctgaatatatggactgaatcacac
+acaccaaatttcatctaccttatcgtagcataactattaacaaacatatacagacttcgc
+ggtaaataaaatatattagtacacaaccgtatactggttgaactattgcccagctttaag
+acgcttttaactaggtgcttgatcaagaagtattattatatgacggcagtgtgtaatacc
+tgaatagatatagacgttagattgtctgaaaacacgccgtagagacatttttgttagata
+tgtatttctttttgacgagccagcatcttagtatctgaagacgagctatatgtttgtaga
+aaatcgactgacattgtatacgaggcggcgtaagattaaccaaattccccagaattagta
+atggcgccttatcgatttactaacgatatataacttgtgatgttgtctgcaatgtatacc
+cgtgtaggctgtgctcttatcgaaggaaacgcattgaagtccaggctggatgaaaccacc
+gcgtacttccatgcgtctatacatagcgtcaccgatactacgttttgctatgtaatccat
+tctaatgggtaagaggattcctcttatagtaaaatatgcttgactttttaagaaccattg
+ggagtggttggcaaaataatagtgggtgtctttctcagtgtatagttttctacaactacc
+cctattaggttacaagtaatctggctttcttgccacttggcgatgatagttagattcgta
+tttctacaacgcagttactgtatccatggcgcgagataattagatacgatttgaatttgg
+atgtagactcgttactactgttgtagaccagcacgtgagtatctagatgggtttgctacc
+ttgttagcggacttttgccgggaaaaagacatacgtacaaccgtatattttactataagc
+agtattggccaccctcgtattgcggcagggtgtgctcacctggttaaaatgaaagagaaa
+aattccattttaaaacccggaggaatctattactgacgaggaaggtgtttaacccgttga
+gacatctcctaacgtaaaaggttcatattctagttattccgagagtcactttcctatcca
+aacatgaactgatagcataatgacaggttgaatggaaagcatatcctgtttattctaaat
+ctgtttcgctaatcaatatgctgtcacgaactcggagcttacccttacaactatgtgttc
+tgtttaccaggtgctaatatcccggcactcttttcatgcatgtcgctcctagcgtcatct
+gatttaatagcttaatgtctcatattttacagtagccagtgtagtatggaaggcggcgaa
+ccagcccctacattgggtttcctgacataagtattacatatcacttgtctgattacacag
+caaaatcgctaaccttactttgcgcatgtagctattggaactttgggctagtgtctatcc
+cattaagtttaacagtagactagtccgtgagcgatcaccgagcttatgtctcgtacccaa
+gttttggatttggatcaaaaactactcgatattcatgatctacgggcttcctttctccgg
+gtatcattgcgccgagattaaaaataaaacgatagcgctgtgaaaacatgtttgacacgg
+gatagcgtagaaactaaacaacgaatagaccatccaatttgaattttattgggtccagca
+cttcgccatagtgttgaatggtaaagttcgaaaggaaatttgttatattaattctgctac
+attttcgaccacttgtatctcaaggacaatatcccttgaggcttttagcagaaagagatg
+ccgtaattctaagggatgataataggttgggaaatttaagagcagtagtaacggtcgcgg
+gttcgaccttaaactatatatttaaatctagccaaacaagttaacaacaaccataaagtt
+atgaccttattatattggcaagcttaacgttttaattgctctagtaatagagtggtagag
+gtaagggaccatcacctgattcttcctccgcaaccattatatagacgtgtcgtctgacaa
+atttcgagataaaacattcgtccttagcaacgaatatcgaatggcaattagccacattga
+gttaaatagttgaggatatttcttgcacagaatcagatctaatctaatgattcgttacta
+aacacttcaccaggtatcgtgaaggctcaagattacccagagaacctttgcaatataaga
+atatgtatgcagcattaccctaagtaattatattctttttctgactcaaagtgacaagcc
+ctagtgtatattaaatcggtatatttgggaaattcctcaaactatcctaatcaggtagcc
+atgaaagtgatcaaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaa
+tagattgcgcaaaattcgtaccttaagtctctcgccaagatattaggatcctattactca
+tatcgtgtttttctttattgccgccatccccggagtatctcacccatccttctcttaaag
+gcctaatattacctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgat
+tcttatgtgtaccatatgtatagtaatcacgcgactatatagtgctttagtatcgcccgt
+gggtgagtgaatattctgggctagcgtgagatagtttcttgtcctaatatttttcagatc
+gaatagcttctatttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtc
+atgaccagatccacgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtc
+taacttatatcccgtcgcttactttctaacaccccttatgtatttttaaaattacgttta
+ttcgaacgtacttggcggaagcgttattttttgaagtaagttacattgggcagactcttg
+acattttcgatacgactttctttcatccatcacaggactcgttcgtattgatatcagaag
+ctcgtgatgattagttgtcttctttaccaatactttgaggcctattctgcgaaatttttg
+ttgccctgcgaacttcacataccaaggaacacctcgcaacatgccttcatatccatcgtt
+cattgtaattcttacacaatgaatcctaagtaattacatccctgcgtaaaagatggtagg
+ggcactgaggatatattaccaagcatttagttatgagtaatcagcaatgtttcttgtatt
+aagttctctaaaatagttacatcgtaatgttatctcgggttccgcgaataaacgagatag
+attcattatatatggccctaagcaaaaacctcctcgtattctgttggtaattagaatcac
+acaatacgggttgagatattaattatttgtagtacgaagagatataaaaagatgaacaat
+tactcaagtcaagatgtatacgggatttataataaaaatcgggtagagatctgctttgca
+attcagacgtgccactaaatcgtaatatgtcgcgttacatcagaaagggtaactattatt
+aattaataaagggcttaatcactacatattagatcttatccgatagtcttatctattcgt
+tgtatttttaagcggttctaattcagtcattatatcagtgctccgagttctttattattg
+ttttaaggatgacaaaatgcctcttgttataacgctgggagaagcagactaagagtcgga
+gcagttggtagaatgaggctgcaaaagacggtctcgacgaatggacagactttactaaac
+caatgaaagacagaagtagagcaaagtctgaagtggtatcagcttaattatgacaaccct
+taatacttccctttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttaga
+ggcatctctcgctcataaataggtagactactcgcaatccaatgtgactatgtaatactg
+ggaacatcagtccgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacat
+gagaccacccccgtggggattattagtccgcagtaatcgactcttgacaatccttttcga
+ttatgtcatagcaatttacgacagttcagcgaagtgactactcggcgaaatggtattact
+aaagcattcgaacccacatgaatgtgattcttggcaatttctaatccactaaagcttttc
+cgttgaatctggttgtagatatttatataagttcactaattaagatcacggtagtatatt
+gatagtgatgtctttgcaagaggttggccgaggaatttacggattctctattgatacaat
+ttgtctggcttataactcttaaggctgaaccaggcgtttttagacgacttgatcagctgt
+tagaatggtttggactccctctttcatgtcagtaacatttcagccgttattgttacgata
+tgcttgaacaatattgatctaccacacacccatagtatattttataggtcatgctgttac
+ctacgagcatggtattccacttcccattcaatgagtattcaacatcactagcctcagaga
+tgatgacccacctctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagac
+gatatcaagcgctttaaattgcatataacatttgagggtaaagctaagcggatgctttat
+ataatcaatactcaataataagatttgattgcattttagagttatgacacgacatagttc
+actaacgagttactattcccagatctagactgaagtactgatcgagacgatccttacgtc
+gatgatcgttagttatcgacttaggtcgggtctctagcggtattggtacttaaccggaca
+ctatactaataacccatgatcaaagcataacagaatacagacgataatttcgccaacata
+tatgtacagaccccaagcatgagaagctcattgaaagctatcattgaagtcccgctcaca
+atgtgtcttttccagacggtttaactggttcccgggagtcctggagtttcgacttacata
+aatggaaacaatgtattttgctaatttatctatagcgtcatttggaccaatacagaatat
+tatgttgcctagtaatccactataacccgcaagtgctgatagaaaatttttagacgattt
+ataaatgccccaagtatccctcccgtgaatcctccgttatactaattagtattcgttcat
+acgtataccgcgcatatatgaacatttggcgataaggcgcgtgaattgttacgtgacaga
+gatagcagtttcttgtgatatggttaacagacgtacatgaagggaaactttatatctata
+gtgatgcttccgtagaaataccgccactggtctgccaatgatgaagtatgtagctttagg
+tttgtactatgaggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgac
+gaatttatactaatacgctttcactattggctacaaaatagggaagagtttcaatcatga
+gagggagtatatggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcat
+tcttgaaagatacataagcgataagttacgacaattataagcaacatccctaccttcgta
+acgatttcactgttactgcgcttgaaatacactatggggctattggcggagagaagcaga
+tcgcgccgagcatatacgagacctataatgttgatgatagagaaggcgtctgaattgata
+catcgaagtacactttctttcgtagtatctctcgtcctctttctatctccggacacaaga
+attaagttatatatatagagtcttaccaatcatgttgaatcctgattctcagagttcttt
+ggcgggccttgtgatgactgagaaacaatgcaatattgctccaaatttcctaagcaaatt
+ctcggttatgttatgttatcagcaaagcgttacgttatgttatttaaatctggaatgacg
+gagcgaagttcttatgtcggtgtgggaataattcttttgaagacagcactccttaaataa
+tatcgctccgtgtttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtgg
+tgtatatatcggataacaattaatacgatgttcatagtgacagtatactgatcgagtcct
+ctaaagtcaattacctcacttaacaatctcattgatgttgtgtcattcccggtatcgccc
+gtagtatgtgctctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgtta
+ggtaagatctctctgaattccttcgtgccaacttaaaacattatcaaaatttcttctact
+tggattaactacttttacgagcatggcaaattcccctgtggaagacggttcattattatc
+ggaaaccttatagaaattgcgtgttgactgaaattagatttttattgtaagagttgcatc
+tttgcgattcctctggtctagcttccaatgaacagtcctcccttctattcgacatcgggt
+ccttcgtacatgtctttgcgatgtaataattaggttcggagtgtggccttaatgggtgca
+actaggaatacaacgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaac
+gtgctccttgcttagcttgtgaatgagactcagtagttaaataaatccatatctgcaatc
+gattccacaggtattgtccactatctttgaactactctaagagatacaagcttagctgag
+accgaggtgtatatgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcga
+gaagctaataccggctgtttccagctttataagattaaaatttggctgtcctggcggcct
+cagaattgttctatcgtaatcagttggttcattaattagctaagtacgaggtacaactta
+tctgtcccagaacagctccacaagtttttttacagccgaaacccctgtgtgaatcttaat
+atccaagcgcgttatctgattagagtttacaactcagtattttatcagtacgttttgttt
+ccaacattacccggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgta
+ggaagtgaaaagataaatattgcctacacatactgaattcaggcaatgcgttttattcga
+aaggtcatataactagaaaacatgatgaattcttatcggatccttttactagcatagtgt
+tggcgaacacctcgtaatgctcagcggcaaattggactgcgggtccttatcatacatttt
+ttttcaatataggcgattggtctaggttagtgattccccaacacttaaggtttgctgaca
+ttcataccctcagcaacttcctctcaaaaattagagtgagttggtggtcttataagaccg
+ttgattatttgaggtggtcaaatgatggtgcgatgcacaaatcgttataatcgtactctg
+tagacaataacccattgtagtgccgattttgtgcataatacaagaaggaggatataaaaa
+tgacttttcaataatattggctattagcaacaagaaggagaatcctcattaagttagcaa
+ccgcagggggtactgcagtccaaggaggtttcattggagagagcagtatgaaaacggcaa
+ttatgattgtgagattcgctgaagattgtgtctctgattttcctagatagaataagctat
+agctacttaatcaactcttaactgtggagactatcctgatgatctgaataccccatttac
+aaaattccatatcaatgaggctaacgcttaaatttcatttctccatcgtaacaaaaatca
+gcctttttatacaagacaaaacactgcttccattacgggtagcaatggttgctcgactac
+tggtagcgtcgtgatgtggtgataaagctgtcttgcgtttatacttaaacaaattttgac
+ctgacataatggagcgacttatcggatgttgccgatctttagggtcatctattaagctta
+tacgaaaaagggacaagcacgttacgtaatctggtaggactgggtacctagaaacgcaag
+aggaggcgaactccaatatctgtaagaacagaaaaatacaggagtccttttcatttttca
+agttaacaatataagtaggagcttagagaggcttgcatgaaaatcgttaggaattacaga
+ataggcagagagtggggcgtgtagactacattcttcaggccccacaatatgggttatagg
+ttaaactgcactttttgcgatctcccgaaatactgtcgttctctgcgaaccacgctcgtt
+ccttttgctgtagtccacgttcatccaactattcagataaacaagatcgcagaattaaag
+cttaaccatatcttgatagcccatcgtgtatggggcatgtatgtgcaaacaaaagacctc
+aatcttgtctgcgagagggaggaaaatttagacaaacataattcattctttcgactggac
+acgctaaggtttggacaaactttgtatctatatctggaggcctgtattccagcccttctt
+ttaataagatttacggcttaaactatggatatttgccaggaaatgacactgctattgaca
+ggaacataattttgattcaaacctcattgttaattattttatatctcctgtttttatatc
+agaatgcttctgtcctagaaggcatactcaaggtgagggctcgaggaatgaatcataata
+gaccggcccctattaatattggttcaattctttcttacataacgcggaatttgattgcac
+gaacaccgggaacacataaccgtatagcgcccgttatgctagtgcctagcgactgggacc
+gtggagtctatatcgtctttctaccattattaatctaaggatataccactttaagtcctt
+tcaactaacataaggcgcattccatgcgctaaggaccttgaatttattatttcttacatg
+ataaaagatcgagtcgacgggaacaaaaggctacgtactcaataaagtgcagtttactaa
+gagccctttttctggcttgtggagactatcataacatgaagatgttttgacattcaatag
+tttgcaaaacaaacttactttgtgtagtattgaacgagatctttccaattgccccatagc
+aggaatagttatatattgcagatcgcggtgtaacgcactccaaatccatcgcggtgtgtg
+agggtaagcgacttaaagaattacggtttttgatcaaagcacagtgagagttgagcaaat
+tacagttatacgacttaattcagtctccataaattgaaacgacacttcttaacgggagga
+ccagacacgttcattaagtgaggagtgcactttttgactttaaaaacatggtaatcaatt
+taaaccacttgatatgtatatgaacagatttgaagttatttctgttttaatacactggga
+gttctgtcaatatcgcaggaaccgcctgacgtcccctatcacacctcagagggtaaaggg
+acaggggaaagggtaatcgaggggtagggaacgtagttggcacacccaatggacgaataa
+atgctgccatatccacggagggcgggattgcggttgattttaaggcgatggtaacctgaa
+tgtaatagatcatcaaatgcctcctccactggaaattactgcgtacatccgctgagaatt
+gcaatggagtgtctcggtttttctttaaacaaaaccaaattgacaacttcatagtataat
+ttttgcacattacaagcgttaattaacaaacttactttgctgttagctgcctatatttgt
+ccgacaatataactggatatctctgcgagaactgtaaattaacggcacttggaacataat
+agttcctattggtaacgacgttgtaggcggcaattatccggtggaagaattgacaactgc
+agttgaactgcatgaaagtcaaatctctcgtaagtataactttagaagactccaaggtac
+ccagaacctcttcagcggacacgatcgctatcaatcaataaggattattcactgaaaccg
+ctcatatctggaggtggacgtttttcttcgaaaagcttgtcaaaggactcatcaaatttt
+tggccgtgctaatcgacacacctgttattttcatgaccggataggacatctcgcggaaat
+tcgggtaacagctgggtagatataggacctcccctacgtattaatgataagcctgtcata
+actagcttggtttaccgaagagacaataaacattcgagcgctcgtgccaaactcggtgca
+ttacgtttgaataaatcggtaacatgtactattactctgcctaacggcacttacccgttt
+gggtccatggggtaaccgctcgatgttgacagaattatgctaaagtcgtttaagatcccg
+attaccgaaaatctggttatgtctgagcattcgtacactgcgtattaagatcaggttgaa
+caggttcctaacaaattttgtgacctaaagtgaaactaggtcgtactctgggcatgtttt
+atgtcgtggcgtatgcatgtgctgacacttctaaaaccaaattaaggctttatccaatat
+gggtccttaagtgctaaacatcattcacaatttcaagacagattgttggtcttgtcgatt
+ccgcatctgtcgccaaattgacacatcgtaaaccaggtacatcggtaattatatgttgac
+taaactaccgtgtgtattctggctctaggtacggcgaacaagtacgatgtgcttaagaag
+ccctcaccccagacgagcccgcgtaggtcacatcagcagatcctaagtaattccgtttta
+ttgtcctgagggagtaggatcgacgaactctacaagtcgctttgtcgtgccttataggct
+atttcgggtcaatgtagcgtcaaatgaactattgtcatctgtacgagttaactaagtgtc
+tatcgccaactaaaagacgtctcgatggttctttatgcggacctgtcatatcattgactg
+gcacttgcttacatccaaataacacgtttgttagcggatagtcgttaagtgtgcgcaaga
+tcatgaggcggggggggtaatatttcgccctctacatgataaatgaataagtaagaagat
+gatctttttgtggcggtaccttaagcgtactcctgtcgacgagttactactaaaggaatg
+tagggttctggatctatgaaaagcgacctccatatatatacgggcctaagcggagtaaaa
+taagtgatcaatggactaacattgaaatgttagtattgtcgaccattgagggctggtaaa
+tcttatttacgggcgtgggaaaacgaacgtgatatggtttagcatgggatgcaagcactc
+gttaatgcttactttagttggttgcgggaacaacaggaggctatactaactggtagcgtt
+cttgcttccattatgttattattataattaaaaataagacatatggtagagttgtagtca
+gggtggatcgggttgtctataacgttggaataatcaaaactatcgttaacaaaaacgaaa
+tttaagtcggtgcggtggaatgcgcctacctcatgtgcaccacacattcacagcacaccc
+ctcattataggcaaggaagcaaacaaaaaaaagttaatcgaccgtatccgaccttaaatt
+ttaaaataaatagaaacacttagcggtaatgaaaagataggactaaaattcactagtatc
+ctggaacgaggcaacagagttatctagatggtaacgaggtgctgcatcaagatgtatgat
+ttttggtccgctgtgtggaatacctctattgatatacaagtgactttctcggtaataacg
+cacttcacaatgtgttgtttcttttctatgtattttgcaagagaaagaagcttagtatag
+gtacacctcagagatgtttcgtgtaaatcgtatcacatggtataactgcaggaggaacat
+tatccaaattcaccacaattactaatccacccttttacttttactaaagatatattaatt
+ctcatgttgtctgaattgtataacccggtaccctgggagcgtatcgaaggataccaattg
+aagtcctcgaggcatgttacaacacacgacttccttccgtctattcagacactcaacgag
+actaacttttcctaggtaatcaatgatattgggtaactcgtggcatcttatagttattga
+tccggctcttttgtagatcctgtgcgactcgtgcgctaattaagactggctctcttgcgc
+aggggatacgtttattctacgtacccgatttggttactactaagcggcctttcttcaaac
+ttgcagttgtgacttacattcctatttcttcaaagcagggaagggttacagggagagact
+tattgagatacgattggaatttccatgtacaatcgttaatacgcttgtagaccagcaact
+cagtatagagatccgtttcctaaagggtgagcggtaggggcaaggcaataagaaattact
+aaaaccctagttgttaatataagaacgattcgaaacaataggattgcccaagggggtgcg
+aacatggtgtaaatcaaagagaaataggcattgttaaaacccgcacgtttctagtacgca
+agaggaacgtcggtaaccagttctcaaagatcctaacctaaaaggggcttattctacttt
+ttccgacactcaatggacgagacaaacatgaacggatagctttaggtctcgttgaatgca
+aagaatagaatcgttattattaatcggtttccattatctatatgcggtatagatctccga
+gaggaccctgtaaactagctctgcggtttaactggtgctaatagaccgccactatgttat
+tgcttctagctcctagcgtcttatcatgttatacattaatgtcgcatattggacagtagc
+caggcttggatggatcgccgacaaaaagaaaagactttccctgtaaggacttaactatta
+catataacttggatcattaatctgcaaattagagtaacggtctttcaccagcttcatatt
+ccaacgtggcgctagtcgatatcccatgaagtttaaaactagaattggcagtctcacttc
+acagtgcgtatctatacgacaaaagtggtcgatttgcataaatatcttatcgatattcag
+gttattaccgattccttgctaacgctagaagtcacaccagagtaataataattccagaca
+cctgtgaaataatcggtcactacggatagactagtaacgataatacgtatagtccataaa
+agttgaattttaggggctaaagatattagcaatactggtctagcctaatcgtcgatagca
+aagggctgtgaggatttctcctacattttcgaccaattgtatcgataggaatagttacag
+tcacgcttgtagatgtaagagatgacgttattcttagggttcttaagtcggggggtaatt
+taagaccactagtaaaggtagaggcgtacacagtaaacgatattttgaaatcgtcaaaaa
+aaagtttacaacatcctttaagttagcaactgattttagtggcaaccttaacggttgaat
+tgatctactaatacaggcctacaccgaagggtacagataatgattcttactaccctaaca
+tgatagagtcctgtcctatctcataggtcgacattttaaattcgtaatgagcaacgaaga
+tcgtttcccaatttgcaacattcacttatagacttcaggttatttcgtgctaacattaag
+atagaatataatcagtcgttaagaaactattatccagctttcgtcaaccataaagattaa
+aaactgaaacttggcaagatatgaatagctatcctgctttaaccgatcgtatgagatgct
+ttgtagcaagaaaagtgactagcacttgtgtttagtaaagcgggagagtgcggtaattaa
+tattaatatactattaagctacacagcaaaggctgcaataatgttagtaagtagaacata
+aaggtattctccacaagtaataaatagtgtgagctaattgactaacttaactctcgcgac
+aagtgatgtggataagatgactcatatcgtctttttctgtagtgccgacatcccacctgg
+atcgaacaattccttctagttatcgactttgattacctatcctattaaacagatagggtt
+gtaaagtcagaaaatgatcggcttgcgttggtctaccatagctagagttagaacgcgtag
+atagaggccttttgttgccaacgtgggggtgggatgagtctgggcgagcgtgactttctt
+tcgtgtccgaatttgtttaacatccattagattagatgtttgtgttttgggtctgatgtc
+ctaactactttctcagtgaaactaatgtcatcatccaagtaaaatagtccgatgaagtct
+ccgttttcggccgaagcttgtctataacgtatataaagtcgctgaatttagaacacacct
+tatctatgttgtaaagttactttattccaaaggacgtgcacgaagcgtgagtgtgggaag
+gaacttaaagtcggatcactcttgtcagtgtagataagaatttctttcatacttcactgg
+aatccggcgtatggatatctctaccgcgtcatctggtggtgtctgcggtaaaaagtcttg
+ctgcacgagtctgagaaatttttggtgccatcacatcgtaactgtacaacgaacaaatag
+catcaggccttcttatccagcgtgaagtctaattatttcacaagctttcctaagtatgta
+aatccctcacttaatgatgcttgcgccaatgaggatagaggacattgcatgtacgtagga
+ctattctccaaggggtcttctattttgttagcgaaaattgttacagcctaatgttagagc
+ggcgtacgactttataccagatactttcattagatatgcaaatatccaattaaatcatag
+tagtatcgtggtatggacaatcaaaaaagacccgttgtgatatgatgtttttctagttcg
+ttctcatatatatagatcaacaatgaataatctcatgatctataaccgatgtatatttat
+attccggttgactgctccggtgcaattcactacggacactaatgactaatatggcgcctt
+tcatcagaaacgctaaatatgattaatgaattaagggagtattatctaattattagagag
+tagcagttagtctgatattttcggtgtatgtgttagccgttataatgctgtctttttatc
+agtgagaacagggagtgtgtagtgttgtatgcttcactttatgactctggttatatccct
+cggagaacaagaataagagtacgagaagttcggtcattgaggatgaaatagaaccgctag
+acgaatggactcacgtttataaaactatgtatcacagtactacagctaactctgaagtcc
+gagaagcttttgtaggacaaaacgttataagtacctttcgcagaatacggccgtgcatac
+ctgttataaggcgtagtagggacaccatgctatccctcatatagagctacactaatacca
+ttacatggtgactatcgtttacggccatcatctgtaagcgatcatgcctcgttagcatcc
+gtacaatctcgcatggcgtcactgcagaaaaaccccgtgcggattttgagtcagaactat
+tcgaagcttctcaatccttttccattatggcatagcaagtgacgactcgtcagccatggg
+aataatagcactaatccgattacttatgaattagaacccacatgaatgtgattctgcgaa
+ttgtctaagaatctaatgattttccggtgaatatggttgttgttatttattgaacttata
+ttattaacatcacccttcgttagtgatagtcagctatttccaagaggttccccgagcatt
+tttaccattctctagtcatacaagttggagcgcttttaaatctttaggctgatcaaggcg
+ttttgtctagaattctgcagatgttagattcgtgtgcaatccctcttgcatgtcagtaac
+aggtcacccgtttttcgttacatatgctggtaaaatattcatagtaataactacaatact
+tgatttgttacgtaatgctcgtacataacacaatcgtattccacggaacagtaaagctct
+attattctgatcgagcctaagagaggatcacactacgctattaaagtcacgttcacgaaa
+tctcaaacctcaactgctggtgaccagttatagacagtgtaattccatattacatgtcag
+gcttaagctaacccgagcctttatataagctataatcaagaattagattggagtgcattt
+tagacttatctatcgaaatagtgatagtaagagtttatatgacctgatctagactgatgt
+tctcttccacaacagccttaaggcgtggagcctttcttatactattaggtcgcgtcgaga
+gccctattcgtaatgttaacgacactagactaatatacaatgagctaagaataacacaag
+tcacaagataatttacaaatcatatatctacagtccacaaccatcactagcgattgcaaa
+gcgttattggtactaccgctctaaatcggtatgtgcaagacgcgttaactggttcaagcc
+tctcctgctcgtgagactgaaagaaatcgaaaatatggatgtgcctaattgttcttgtga
+gtcatgtgcaactatacagtttagtttggtcaagactatgcaactattaacagcatgtgc
+gcattgaatatttggtgtcgattgataaatgccccaacgttccatcacgtctataagccg
+tgttactaatgtgtattagtgcatacctattcagaccatagttcaactgttggactgaag
+gcccgtcttggggttcgtgaatgagagtgcagtttcttgtcttttccttaactgacctaa
+atgaaggcaatcggtttatctagagtcatgcttaaggtgaatttcagccaatgggctccc
+attgagctagtatggtgctttacctttgtaagtggtggctttccttggtgtgctgacttt
+aacacggcagagtgattatccgaagaatggataataagacgctggcaatattggctaata
+aagtccgatgagtttcaatcatgactgcgaggagatccatgcggtgtacctaaacctaca
+tcgtatgtatttgctgacgttcattcttgatacataaagatccgatatcggtccactttg
+tttaccaaaagccctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatg
+gggatattgccggtgagtacaagttagaccacacattagaactgacctatattcgtcatc
+atagagatggagtatgaattgattctgcgaagtacactggctttacgagtatctagacgc
+cgcggtatatctcccgtcaatactatgaaggtatatatatagaggctgaaaattcatgtt
+caatcctctttctaagagtgagtgggagccccttctgttgtcggagtaaaaaggcattat
+tcctcaaattgtcagaagcaaagtatacgtgatgtttgcttagaacaaaagagttacctt
+agggtaggtaaatctcgattcaccgagagaagtgattttggcggtgtgcgattaattctt
+ttgatgacagatctcattattttatatagctccctctttgtatttagagtttgcgtaggt
+aacctggcaaaaccatatcccggggggagagtgcgctgaacattttatacgatgtgatta
+ctcaaaggataaggttcgaggcctctatactcatggaactatcttataattataatggat
+cgtggctcattccacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaac
+gtacatcttctaaggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaa
+atatttttaaaaattgattctactgcgaggaactaaggtgtagacaagcccttagtaacc
+ggtggatgtcgcttcagttttatagcaaacattattcaatttcagtcttgactgaaatta
+gtttgttagtgttagaggtccatatgtcacatgcatatggtctagatgccattgtacagt
+aataccttagattagtattagcggcatgcgtacttggatttcacttgtaagaatgagctt
+aggacggtcgcctgtagggctgcaaataggaatacttacaatttttgatgacttgttagc
+atatcgctatcacccataaaaaacctgatacttgatgagcgggtgattgagactatgtac
+tgatataattcaatagctccaatagatgaaacagctatgcgcctatttatgtcaaataat
+cgatgtgatacaagcttagagctgaacgagcgcgagtggaattagcggtgatctctatcc
+taaaaagccacgaaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagt
+taaatttgcatctcatgccccacgaagaatgggtagagagtttgaaggtgcttctggatt
+ttcctaagtacgtggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaacc
+acaaacccctgggtgaatctgattagccaacccagtgatctgatttcagttgtcaaatct
+cttttttataactaccttttgtttccataatttaaccggatctcataatgaacaaacggg
+tagaataatggtagcacatagcgagcttgtctattcagaaatatggcctactcagaatgt
+attctccaaatcagtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttat
+cggttccttgtactacaatactcttgcccaacaaatactaagcataacagcaaaattcga
+atccccctccttttaataaatggtttttcaatatagccgattcgtattcgttagtctttc
+accaactattaacctggcatctaattaataaaatcaccaaaggactctataatatgacag
+tcacttcggcctcttttaagacagttgattattgcaggtccgcaattgatggtgacatgc
+acaattagttagaatccgactatggagacaattaacaattgtagtgcccatttggtccag
+ttgacttcaaccacgagttataaaggtattttaatttatagtcgatagtaccaacaacaa
+gcacaatcataattatgttagaaaacccagggggtaatgctctaaatccagctttaaggc
+cagagtgcactatgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctagg
+aggtgccgagtgagaatatcagataccttatgaagcaacgattatatctggactagatca
+tgatgatcggaataaaacattgaaataagtccttatcaaggagcataaacattttattta
+atttatacttcgtaaataaattcagaattttttttcaagacattaatctgagtaaatgac
+ggctagaaagggttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgc
+gtttttactgaaacaaaggttcaccggaaagaaggctgccacttttagcttcttgacgat
+ctttagcgtcatatttttagattagtcgaaaaacggaaaacaaacttaacgaagctggtt
+gcacggggtaccgagaaaccaaagagcaggacaactccttgatcgggaagaactgaaata
+gacagctgtcattttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgc
+atgaaaatactgaggatgtaaactatagccagtcaggcccgcgtgttgactaattgatga
+agcaaacaaaatagccggtattcgttaaaaggaacgggttgccagctacagatatactct
+aggtatatcccaaacaagagacgtcctttggctgttgtaatcggtcataatacttgtcac
+ataaacaagatcgctgaattaaacattaaacagttagtgatacacaatcgtggttggggc
+tgggatgtgcaataaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaa
+cattattatttcttgacaatggaatcgataagcgttcctctaacttggtatatatatctc
+gaccccgggattccagccattcttgtatgaagatttaaccatttaactatgcatagttga
+atggtaaggaaaatgatattgactgcaacagattttggatgcaaaaatatttgtgaatta
+ttggttatatactggttgtatagcacaatcattaggtcctagaaggcatactcaacctca
+gcgagagagctagcatgcataattgtaccgcccatattaatattcctgaaatgatttctt
+acattacgcccaatttcagtcatcgaacacccccatcaatttacccgatagagaacgtga
+tcatacgcaataccctatgcgaacgtccactctatagcgtctgtatacaatgattattcg
+ttccatttacaacgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctc
+ctggaatgtatgagttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgt
+acgaatgaaaggccacttttagaagagacctttgtatccattgtggagaatatcataaat
+tcaagatggggtgtcatgctattcggtcctaaacattcttaatggctgttctattgttag
+tctgatttaaaatggaaccatagcacgaatagttagatagggctcatacccctgtaacga
+tctacaaatccttccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatca
+aagaacactcacacgtcagattattacactgatacgaattatttcagtcgacagtaattg
+aatagaaacttattaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttg
+actgtaaaaaaatggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagt
+tttttctctgttattaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaa
+gatcacacatcacacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtag
+tgggatcaacatatggacgaatttatgctcaatgagccaacctcccccgcattgcggttc
+attttaaggcctgggtaacatctatcgtttagataatcaaaggaatccgactatgcaatt
+gtctgacttcatccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaatacc
+atattgaaatcgtaatacgataattgttgctattgactacaggttatgaaaaaacttact
+ttgcgggtacatgcatatttttgtaccacattattacgcgatatctctcagtgtactcta
+aattaaaccctcttcgaacattttagttcctattcgtaaacacgtgctacgcggcaattt
+gccggtcgtagaatggacaactccagttcaactgcatgtaactcatagctcgcgttagta
+taaattgactagtagccatgggacaaagtaactagtcagcggaaaagatccctttaaaga
+tatatgcaggttgcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagc
+gtctctatcgtatcttctaattttgggccgtgagaatcgaaactactctgatttgctgca
+cacgttaggtaatatcgcccattttcccgtataagctccgtacttatacgaactacacga
+ccttttaagcattagccgctcatatcgtgattcgtgtacagatgagtctattaaaattac
+agacatactccatatctcgctccttgaactttgaataatgcgctaacttgtactatgaat
+aggcagaacccaactttcccgtttgcgtcaagcggggaaacgatacatgttgtcagattt
+atgattatctagttttagatcacgtttaccgataatcggctgtggtctgagcagtcctac
+actgagtatttacttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaa
+tacggagtacgatgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaa
+ccatttttacgatttttactatagcggtcatgaagtgcgaaactgcttgcaaattttcta
+cacacattgtggctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccag
+ggaaagcgcgaattatttggtgactaatagtccgtgggtttgagccatatacctaacgcc
+ataaactacgtggtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcag
+cacagactaactttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaag
+tcgcttgcgcggcacggattcgattgggcggctcaatcttgcctaatttctactattgtc
+agctgtacgactgtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttat
+gaccaaaggtcttataattgaagcgcacttccgttcatcaaattaaatcctggcttaccc
+gattctccggaagtctgacctagagattgacgacggccgcgtattattgagacctcttca
+ggattaatcaataacgaagtagttgatctgtttggcgacgtaccttaagccgactccgct
+acacgagtttctactaaaccaatgtagccttatgcttagatgaataccgtcctaattaga
+tattccggcataacagcagtaaattatctgttcaatggacgaacattgaattgttagtat
+tctacacaagtcaggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatg
+cttgagcttgcgttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacac
+cagcatattctatatgctagacgtcttccttaaaggatcgtagtattataattaataata
+agaaatatggttgacgtctagtcagcgggcatacgctgctctatatactggcattattca
+aaacttgacggtaaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgg
+gaaccaaaatgtcacagaaaacacctctttattgccaagcatgcaataaaaaaaatgtta
+atagtacgtttacgacattttattttataataaagagaaactattacacctattgatatg
+ataggacgtaaattaacgagtagcctgcatagaggcaaatgaggtttctacatggtatag
+acctgatgctgaaacatcgatgagttttggtcccctcgctcgttgaaatctagtcattta
+ctactgtctttcgagctattataccacttcactatgtggtgtttctttgctatgtatggg
+gctagtcaaacatgatgactatagctacaactcagagagcgggcgtgttaagagtatctc
+atgctagaactgcacgacgaacttgatacaaagtaacaacatttacgattccacaaggtg
+actttgaagaaacatagtttaattctctgcttcgatcatttctataaaccggtaccatcg
+cagcggatagatgcataacatttctactactccaggcatcttaaaacacacgtagtactt
+cactagattaagacacgataagtgtataacttggcagtgggaagcaaggagattggcgaa
+ctcctggcatctgttacgttttgttcaggctcggttgttgataatgtccgactcctgcca
+tattgaagactcgctcgagggagatcgggattcgttgattataagtacacgtgttccgta
+atactatgaggcagtgattcaaaatggcacttctgacttacatgactaggtattattacc
+acggaagcgttaaaggcacactcttatggacttaagattgcaagtgccttcttctagcct
+gaattcgcgggttcaacacaaactctctttagacatccgttgcctaaaggctgagacgta
+ggggcaaccctttaactatgtactaaaaaactagttggtaatttaacaacgtgtccaatc
+aagacgatgcaccaacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtga
+taaaccccaccttgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataa
+cctaaatccggatgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagca
+tacatttaggtctcctgcattgcattcaattgaatcgtttgtattatgagctgtacagta
+gctatatcagctatagttatcccagaggaacaggtaaactagctctgagcgtgaaatccg
+gatattagaacccctagatgggattgattctagctaatacaggcttatctggttttacag
+ttatctagatgattggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtat
+tgcccgggaagctattttctaggtattataaagtcgagcattaatatcaatttgacagta
+aaggtctttcaccagcttcatatgccatagggcccatactcgatttaaattgaacggttt
+aacgagtattggaactctcacttataactgagtagctatacgaaaaatctggtccatttc
+cagaaatttattatcgatttgctgcttagtacccaggaagtgataacccttgaaggcaca
+acactgtaataagttttcctgtcacatctgtaatattcggtcactacgcattcacgacta
+aagataattactatactaattaaaagttcaatgttagggccgaatcatagtagaaattct
+cgtctagcctaatcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaa
+tgctagagataggtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagtt
+cgcttctttagtccgggcgtttgggatgacaactactatacgtagagccgtactcaggat
+tagatagtgtgaaagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtt
+taggccaaacattaaccgttgtagggatattctaatacaggccttcaccgaaccctaatg
+ataatctgtcttaataacattaaatgattgtctccgctacgagctcttagggcctcattt
+taaatgactaatgtccaaagaagagactttcccaatttcaatctgtcacgtatagacggc
+accttagtgagtcatatcattaagatagaagattatcaggagggaagtttctattatcaa
+ccgttacgcaaccataaacttttaaatctcataatggcattgagatcaagagctttcatg
+atggtaaagttcgtatgtgatgctggggagctagatatcggtataccacttcggttgtgg
+taagcccgagtgggccgttagtaatattaatagacgattatccgacaatgcattcgctga
+aataatcttacttaggagaaattaatgctatgagccaaaactatttatgtctgtcacatt
+attgactaaagtatctatcgacaaaactgatgtccataagttgtagcagatagtcggtgt
+atggtgtcaccaatgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaa
+attgcctattatacagataggcttgtttagtcagataaggttccgcttgaggtgctctaa
+cttagcgagagttagaaagcctagtgagaggcattttggtgccaaactccggctcgcatg
+agtaggccagagagtcactttctttcgtcgaagaagttggtgaacagccttttgattagt
+tgtttgtcttgtggctatgtgctactatataagttagaacgcaaactaatctaatcagca
+aagtaaaataggaccttgaacgagacggggtacgccgttgaggctcgagatagtagataa
+actagaggaatgtagataaaacattagctagggggtttagttactggattacataggaag
+tgcaccatcacggtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggactta
+acaagttcgtgcataatgaaatcctatacggactttgcatatctctaccgactcatctgg
+tcgtctatgcgggtaattgtattgctccaagtggatgactattttggcgtcccagcacat
+agtaaatgtaaatccttataatagcataagcaattattagactgcgtgaagtcttagtag
+ttctcaagctttacgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccat
+tgaggtcattgaatgtacggagcactattatcaatgcggtatgcgattttctgagcgatt
+attgttaaagacttagcgttgagccccggaacacttgattacagattctttaaggagtta
+tccaaatatcattttaaataatagtagtatcgtgctttggacaataaaaaaagacccgtt
+ctcttatgttgttttgcgacgtacttctctgatatatacttcaactatgaagattctatt
+catcgataacccaggtatatttatatgcccgttcactgcgcagggcaaattatctacgga
+caataatgacgtagttggacccggtaagaactaacgcttaatatgattaaggatgtatgc
+cagtattatcttattatgtcagagtagaagtttctctgagattttccgtcgttgtggtac
+accggatttggctctctttttagaactgagaactcggagtgtgtagtcttgtttccttca
+atttatcaatatgcttttataccgccctcatcaactataacaggacgacaagttccgtct
+tgctccatcatatactaccgatacaccaatcgtatcaagtttagtatacttgctttctct
+cttctacagcttactcgcttgtccgagaagcggttggtgctcataaagttagtagtaaat
+gtacaactagtagccagtccttacctgtttttacgactactacggacaccatgagataca
+gaagttagtgctacaattataccattacatgctcaatatcgttgtcggccataagatcga
+agagtgcatcacgcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacaca
+ctccccttgttgactaacatcttttacaagaggctaaatcattgtccaggatcgaatacc
+ttgtgtacaatcgtcacccatcggaagaataccacttttccgatgtagtatgatttacaa
+aaaacatctatgtgagtaggccaattgtagtagaatatattcatttgaccgtcattagcc
+ttcttcttaggttgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcga
+tttcatacagctgccaacaccttttttaccaggctagagtcagaaaagttggagccatgt
+taaatagttaccatcataaaccactgttgtctactagtctgatcagctttcatgcctgtg
+caagcaatatggattctcacgtaatggtaacaactgttgcgttacttaggctggttaatt
+tgtcagagtaataaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcc
+taggaataggaaaagtaaagctcttttattctgatagtgactaactcaggatctaaatac
+gcgattatactaaccttcaccaaagctcaaaaatcatctgctggtgaccagttatagaca
+gggtaattcaatatttaatgtctcccttaacatttcaccagcatggattgaagatagtat
+aaagttttacatggcagtcattgtgtcacggttctatacaaattctgatagttagacggt
+atttgaaatgtgcttctagcatggtatcttacacaactgaatgaacgactggagccgttc
+gtatactatttgcgagcctcgagaccccgtttcctaatgttaacgaatatagtataatat
+aaattgtgatatgaataacacaagtaactacagtttggacaattaattgttctaaactaa
+aaatcattcacttcagatggcatagagttatggctactacacatataaagcggtatgtga
+aacacccgttttagccggaaaccctctactgctcgggacaatgaatgatttccaaaatat
+ggatgtgcagaattgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtc
+gttgcaaagtttaaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaa
+acgtgacagaaagtctagaagaactgtgaataatgtctattactgattaactagtaagac
+attagtgcatctggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtc
+gtggctgttccggtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaag
+gtcaatttcacaatatccgatcacattgtgctaggttcgtcctttaccttgcttagtgct
+gcatgtacggggtgtcatgacttgttatcggcagactctttatcccaagaatggataata
+tgtacatggaaagtgtccataattaagtcccttcactgtaaagaatgactgccacgtgat
+ccatgaggtctacagaaaccgacttacttgctttttgatcaacttaattatggattcata
+aagttcagatatcggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatc
+tgaatgacagtgatagaaaagatccccatttgcccggtcagttcatgttacaccactcat
+tagtactgtaagtgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaa
+ctggatgtacgacgatcgagacgaagaggtatatataacctaaatactaggtacgttgtt
+agagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgct
+cttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctt
+tgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggat
+tttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctc
+gttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacc
+tgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatgg
+tactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcat
+atgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagag
+cgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaa
+ggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagt
+ctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcat
+atgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgc
+gattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatact
+tacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgag
+gacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcg
+atgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgag
+tggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaac
+ccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggag
+tgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgta
+aacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagt
+gtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaa
+ccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattc
+agatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagtttt
+agtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataat
+acttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtc
+cagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagct
+cataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgct
+cgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaa
+aatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatt
+tatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgt
+atcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgct
+cttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatga
+tacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattat
+catgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttc
+tagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacg
+caggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggc
+tcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatccc
+aaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatag
+aattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatat
+ttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcac
+gcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaag
+ggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatctt
+cgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgtta
+gtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatca
+ctcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggt
+cctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatgg
+taccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgg
+gcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagc
+taatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagt
+ttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaaccctt
+aaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagt
+gactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaatta
+acgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcct
+ctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggta
+tccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatt
+tattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttg
+tgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaa
+ggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtac
+aatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaaggga
+tggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattca
+gtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagt
+gagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcc
+cgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtg
+actacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaa
+tcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcg
+ctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgt
+ctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagta
+agccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtcc
+gaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaa
+tcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagt
+atgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgcca
+cctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaa
+tacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaaca
+gccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctg
+gtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaat
+aatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccg
+gtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattat
+cggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaa
+taaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccagg
+tgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgt
+ccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgac
+aaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtc
+gcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacag
+aacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccc
+tcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaa
+tcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataata
+aatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagtta
+ataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgaccc
+ccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgc
+caccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgct
+gagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattg
+cgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaacc
+ccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcattta
+tggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatgg
+atcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttaccc
+ggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgc
+acgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccc
+taccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaaga
+ctatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacagga
+aaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccat
+cgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatc
+tcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcact
+gtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaa
+aaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgag
+cattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacc
+cttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaa
+gtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccatagggg
+cttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgg
+gagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctca
+agttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtac
+aggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtctt
+aacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtg
+cgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgcttt
+agatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcg
+cgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaa
+agccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaaga
+gggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagcta
+aaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacata
+agacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgc
+cttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtcc
+agcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccaca
+ttctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgaga
+tataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacag
+gaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatat
+gacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggt
+ggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctg
+gttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtc
+atctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttc
+tataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaata
+ttaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatg
+tcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaag
+cgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatg
+ttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattat
+aacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatg
+gcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacat
+ttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaag
+atgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagac
+aaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcct
+gaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatga
+atgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatctt
+aagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtt
+tcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttg
+ttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagtta
+gatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccac
+cttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggct
+ttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcga
+ccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtg
+ccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgat
+cactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaagga
+tgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgt
+tatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatc
+cccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaatt
+gattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcct
+ttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgttt
+ttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaa
+tgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttcc
+agttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtcta
+ggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcc
+cactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatct
+agatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatc
+tacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttc
+gtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcga
+ctacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaa
+ttgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagaca
+agccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggata
+attaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaact
+ttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaat
+agtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgat
+aaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggata
+gtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctacta
+gtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacgg
+ttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttac
+gaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcata
+ctcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagat
+taggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagtta
+aactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgata
+tacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactata
+ctcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccga
+agcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagttt
+ggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgcctt
+agaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagg
+gacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataa
+tagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttg
+gggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagct
+cgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttccc
+ggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatcccttta
+cgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgt
+gcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactc
+gctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctc
+tggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgtt
+cagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatca
+aagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaac
+ctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccac
+gagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgag
+aaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctgga
+gatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgct
+aacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggtta
+gagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacat
+agaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataat
+caattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatccttta
+gctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagta
+aaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagt
+tccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattt
+tgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctacc
+ttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcg
+ttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtg
+gactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaa
+ggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaa
+aacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaa
+tgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtat
+acaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatac
+atttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaaga
+gaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttac
+tccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcc
+cgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaa
+gtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccg
+acctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattga
+acggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcga
+attcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaagg
+tgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggtt
+cagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccag
+aggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggac
+ttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattac
+tactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagat
+gtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcga
+gcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactc
+acttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgaccta
+gtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgac
+gttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattccc
+ggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtt
+taattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatg
+agtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaa
+gacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaag
+ggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgc
+accttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatag
+tccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataact
+taatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctga
+catcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaat
+tattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattga
+ggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtgg
+aaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaa
+atcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaa
+tcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcatt
+ccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaact
+tgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagt
+aactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaat
+agtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgc
+acggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattcc
+aataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgct
+ctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaat
+gccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaat
+taaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagata
+taggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatga
+tgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttat
+gccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagagggg
+ttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataa
+atccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaat
+tgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaat
+cccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattatt
+aacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatac
+taagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaag
+caagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaata
+ggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttct
+tggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatac
+tacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtg
+gatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttacta
+gatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctat
+gagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctg
+ttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaa
+tttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaa
+taggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgac
+gtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgttt
+ctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtaga
+gcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttaca
+tggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgcc
+ctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactt
+tgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactc
+cgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatat
+ttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacg
+caacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacg
+cttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgat
+gttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccat
+cgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatg
+taacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtat
+tagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaata
+taacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtc
+tccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcac
+tgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagt
+tatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgt
+ctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgt
+aatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcg
+atatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtga
+actaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctacttta
+gtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatga
+ttctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctaggga
+gacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatct
+tcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagc
+aaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtactta
+atgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgactt
+catgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatc
+taaagataactctagtaaggccaactcccttcaatgctgttgccagttataatccaagag
+ctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaagttggttctagc
+cagacagccacataccctgtacgggtgtattactaaaactggtccggtattagttcacca
+agggaggaattaggcaaaggatctaggtatgcaagtcggagtattacatccctaccctga
+atccatcaataggttcctctgtactggccttcgcaatgagtattcaaggttgtacagccg
+tataataataagatagtgactatgaacgggaagtaacccgctcaccttccccaaaacatt
+gttatatctaagtattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaa
+attacaccgcacttaagccgcttttgatttatatttttccaatgcgcttttaaaaataat
+tcagtcctacatactaattaagacccttaaacggagatatcacaagttaagttttaacca
+tctcgactaggtggaactatagatacccaactcaatttatcattacctgtaatgttccta
+gaaggattgcatttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacag
+attctgagaaatcacctaaacctattagtcagagcacccggttagaaccagttgtcaaaa
+aatagagcggttgcatgagacagaagtaacgatgagatccgttgtaacgttgagacatct
+ggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactaggcaaacccaaca
+taggttagtcctatgtgatacgccacatggtatatcattttgtaacgttacctagggata
+atcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggttatagtctagtcc
+aaagataaaggataaagcacgtcagagaactatattagccgaatgggaatcattgttagg
+agactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgttttt
+gtttgaatctaaaagagctttgatgaccgatagtacctgtatactagttactgtattacg
+tgtctaatgatttcggattggggtccccagaatcagacgtcattgtagacgattcaagtt
+taccaatttaatttcccagctctccttggagaactatcgccaataattgcagtcactttc
+cttttctgaaacgataaagccgtcagagttctctgcaacgttggacttacctgaggttct
+aacccactttcggttctaatagtagttaacgacacaacgaataacctttactgtggggct
+ttcacgatattttttcgcttattattaatggttacgtcataagctggtgtccaaattaag
+gttaccggcttcgcagagtagttgtatccaagtataacttccctaatcataagatcgagg
+tagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtggtatggacgttg
+ctaattacttctgaagggaaattggtcattatggatacgtgtctaccatcaggtcggacg
+cagatatggttctgtcttcagttgatccaccgttctttataggataataactgacgatta
+aagattatggtaaatagattaagccaattctcttcttgtcagtgaagcatccttaactga
+cttgctctgcagcccctcatacatttagctattcaaagtaccggctcgtttcaaactctc
+ccacctttggaagaggttgtcaacttgataagtatatcatttacagcattttttcggacg
+tacctctaatgtttcattgcagaaaattagttttttctatcgcacattttgcaagtaacg
+ttagagacacaattatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaat
+atcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtt
+tatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcg
+ttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattctcgagcccactc
+acgatatgtagggacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggt
+ccatatctccgaagttagaagggacatacctttagatgataagatcaattcttattgacg
+aaattcatccacaacggggaacaacttcaccctagacttacgtctgaaaagacacctagc
+gtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaac
+ctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgtactacggaggca
+tgaatcatatactagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcacc
+gtaattctaggcataaaactccagcaatttgggggccgaaaacaaatgacgttagctaat
+taattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattg
+aacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttca
+tgcgtacctcctagttgataattccccgagcagtggttaggacacttttgtcggtatcaa
+gttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaat
+ttttatgaagtcgtcgagacgcagttcctattgatttattctaaacggagatgtgcttcg
+tgggactcggaagtagatctgtgtttatgattattgctactttagatgctgactgttaac
+tccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagt
+tctgccacaaggtatcatatttacagttagtgctggttgcttctttcaaacgtggtgagt
+ttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttcca
+gagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagag
+ccggtgttaaacacatattattattgttatccaactaatcggacctatgcataaagcatt
+gtctaaacagaataattgcctatatacggtagttttagtgatttatatcttagtatcagt
+tagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttcta
+caaacgaatgtaagcggttttccaagtagtacctataaatcacagaaagatctgtctcag
+tatagttgaaatggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaa
+gacgctcattaacgaatatagacaagacactatatcatataataaaaaagaacatggtgc
+tcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaattcgctactaga
+cgatcaattccctacttgtcaaagttgaactggtacgttcttggaattaaatatgattgc
+gctggaccaaattgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccg
+tctcttacctttcttgcttatgataaacgacggtccctgtacatcactgggaattctcag
+caaaaataattgggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaa
+agattattcaacggggcgataataggatcataaccggtatgcaagcgcattgaaagagcc
+atgagatccttatccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaat
+ttataaatgtagtctgggctgtaagttgaagacctaagttataatgaagtgcaataccaa
+atcgattcatagtggattatcagactcaagatatctcctgataaattacagttgttaaga
+tacggataaaatgagatttaagattagcagcctctaatctgtttcaatcccgttggaatg
+tggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctg
+ccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctg
+agtatagattcgtagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtc
+acacaagacactaaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagtt
+cttgttatattcgatatactcttggctaatttatgtctgagtatataaaattaatgatat
+taacttgcatttcacggatcccttagaaaaagattttgaccgagcgcattataaacggtt
+acaccgaatcaatagaagcatacccaatagctttctttgaatttattgcctgcgcaactt
+ggctgactctctagatccgaataattctatatggtcgtgacgaaactagttcattactgt
+ttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaattactcaatgata
+cgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattat
+ccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcgacgcgaggggaac
+cttatctaactatcattccatttaccgggtgactctcgatgcaggatccgattgggataa
+attgcccagaaatggctcattcctgactaagggtaaggccgttctcagcaagggaacccc
+gcgaatctaggcttataccatctagattgttaactacttgcctgtagttctacagccata
+ctggacagttgtttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgt
+aagtttaactattacgtccgtgggcagataaggatggaggctgtatgtatcttaactgtt
+acctaatatggctggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgc
+tttgtatactgaccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaac
+tgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctatagccagcgtact
+agtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctgtctctctacagc
+ttattgatgaggattgaacatggacatatagctccccctcaaaagcagatgctacctctt
+tattccattctcgaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaat
+ttatcggtaacgtcacgtccctttgagactggataaatatattaccaggggccaacgagc
+aattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtct
+cgtgcaactcacttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtg
+tactgccctggtacatttcctgtacaggactccaacagtgtagattcctaagatagctgt
+tggagttgcctcacgccagatcgaaaaactgaataaactagtgagctgagctgcagaaat
+accgcttaattacttatgactagttcaaagggacctacgtgatgtcagacattgcaagga
+agaaattaggtttgtgcgtcattttggctggactagcactccttacttcccctactattc
+aaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtctattgggaacgag
+gctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgc
+aattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcag
+ttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaa
+cctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattc
+ctctacttagtagctttctttgattctcagaattgactgcaatatcactgcacaattctg
+tgccattactagacttctctgtattaacgtctcatcttactaacactcgcctaggacaca
+tctgagagtgaagtatttcaatacatttactgaaatcttcagttctaaaatccccgaata
+aggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatac
+gcaggagcctggggaacttagtaataactatttcggcagacaaagcttataacaagttgc
+cggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacgctcacctggtat
+aggctattagatagtgccgtcttagtaaggggcgggaattatcggataaactgatatttt
+gataaaataaccgacttgttcacgacataagtcactaaggagattttatctttctccaaa
+gtatatcttccttggataatttcaaagcgctgcaatttaagttctgttactagtttatgc
+tgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataagaagttcatcata
+tcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagt
+accctagatggaaaattatacgttaagccaagatttcgatgtaatgataattacctacac
+atttttgctatccataggaacaagagctgttctataggctcgtggcatacgaacatttgc
+tgccgctatgaatattggaagctcttcaactacagactctattcttaattgccgtcgaaa
+atgggccgaatcggctattattaatactcggtttttccgaggggattgttgtcgacagtc
+gtaattattattaatattgatgttggtgaggtcatttaaatacaaccttgcagacaatga
+ataagggatccaatctctcatactccttttacaattgctcatgcccctatgcaaacctta
+tgccgccacacctccgcaactctctcttctgaactgtaagtagcttcattactggtttga
+gactatactgaagctgatgacattctaaaatggctattttcgaatgtgattcataatgtt
+tatcgtttgggatggcagaatcacgttatttttgatatagcccgggtattctattgtata
+gaacgtatgctacaagtcattccccgaagaagactagaagtaaacaacatgcgaccatcg
+ttaagccacgcaaggctgtagctttatttcccgataacctatcttccataaatagcggac
+agcaggatactgacgctcaacatcagtggttatggtctaatttttaacttttaataaggt
+aacttcagcaggcatacacagtaactctttaatttataatcaaattagaagtctgacact
+tcttatatttttctatcatccaacgcgatcgcccattagcttattgtgttactaataacg
+tatctaaaccaatccttttcaagctactgcctatattgtcaatatatacaaacaacagga
+tagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcaca
+aactttgtagacaacgagtgaaatttatacactacgaagggccagcgtacaagacccatg
+aattaggcgatatgtttattctgacatattggtttatccttaatctgtcgctgtaaaatg
+aagccgcccccatccctgcgaattttttttcgaagattcacgactgaaatataaatacgt
+ttggctatatttatgttggagggaggcaatagcctttactgttaaccgaagatttagcca
+gtgagtgtgacactaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttag
+tcaatctcgcctataagttcatatagctctggatataattatctggcccatgcatttatc
+atggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtccgaagtattccat
+gtacattaagatcactctctcattcatgcatcttggcttaacaaatctggttgtccaagc
+tttccaggcacgtatggtacaaattcggatcgaatacttataaaaatgatatgttaaact
+gtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgta
+atgctggtgcactgaatgtgtaatacggttagaagggattagttatgttacaaatccatt
+gaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaagagactaacatta
+ttttcaacgacgtacatgctttacaatagggtacttatcaaacgccgagaaacgcgccta
+tagtgatgttatgattatgacccgatatccattggaccgaattttatgtaggttcccagc
+gtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtctctcccagatga
+aaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggta
+acggccgctgatttcatatagatatacgataagttggtatagctctactaggtggcatcc
+acaatcgttgcatttactatagctggttacaatcataatctataccgttccttacatact
+accatagcgggatagcgtttttttgccgttgattgggtttaagaggatgtcagtctcatt
+atatccgattcggtgggagagccgttgttttcaaatcgcacactttgtgacataatgtac
+aagataacaaaactgatataagatataaactgtcaatatcaccttgacacttgaatcaaa
+gtaaattaactcgcaaatataatttgactaattgggtgcagatttctcaattaataaaaa
+aatggcaccggatgggcttacaagccccttatcattcacttgtatcatgatttccaagaa
+caatagaatttgctagcaagtatgaacagagattcgaattgcatccacagtacgccggag
+cgtttattttaatgtggatatgacgatgtactgttggcggcatttgctagtaaccggtcc
+ttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagag
+aaagattacagtttggtttaaataggacttatcgggtcggaagtggaacttaataagcag
+tacacaattgggcaacagacgtcttgcctattacaataggattacaatgcgttagatttc
+agacacgttcgtgtttggctattcgtcaattccctaaatagttagacgatcaactattat
+caaagtgattctttgttcatcctccattcatgtaacagatggcacactacgcataacgcc
+gaggaattttaacgagatttaagagagcagttcgggcacaacccacttgactttataaca
+gctcggcagcataaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgt
+acttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagcctaacttatcta
+ttggttttgctataaaagaacaaagttacacagaatcctaagggcttgtttcacacttat
+gcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatg
+cgcagatattggtgatggtgactccgggtatgataatggtaactgttgaccagcgcccac
+ctcatcgaagtatagaaagtggttaggataaggatgagaccgaacttatttccggccata
+actttagattttctacctagtacacaacatcagggcggacacgaaaccgccatcacatca
+tataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcagg
+catatggccattatatatggccccagagcagaatgctacagcagacaaaatttggattta
+tgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaag
+tgtaagttacaattattactactcagcagcttctgcaatgataaaatcttatcatacacg
+tcacatatgataatatctacttagggggaacgggctccacaacctacatagtactcaata
+cttacactattcgacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttg
+cagtactgcagatcacagtaatagcttagttagcgagtcaaaattagttttctacgagac
+tgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttg
+aagccacgtaaactgtacaaccttagagataagtctcaggctactaaaaacacgttgtgg
+cactaacaggatcatggttgattcttacttattcggctgaccggcccaataagtaacctt
+caactagaacagaataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaa
+ctaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattccctacttatgga
+tttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaacaacgaaatttta
+attacgctgtgcagcctcatccaaggaattaatagaaggttgatggtaggctccgaacgc
+tccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggt
+gttcgtttttgttatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaa
+cccatggttgattttaggctaccttatttttaatttccgttacacagaaacgaattccac
+aactaacatgccattaatttttcgatatcttataaaagatggtcgaaattcattcattta
+ttttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaa
+aagtggctttgatctcctacgtttggatactagtcaaccattactccatttgatccgtga
+gtatcacctgtctaacatccagcattatgactcctcggcgaagaaaagacacacttctta
+gagtcgatgtgtattagctagggacacagttgtttaatacgatagtgagcccagggaggg
+cagtgcgtcccccagtagatttattcagctagtgtaagtataagatatctcacccacgag
+gttcaagtgatatgcagtcttagaataatacttatcctgaatttcgatattatgggtact
+tcaataatccgctagcgctactttatgtctcgttggacagcaggacacatggcagtctta
+aacactaaagacatcacctgaatgaatgtaatgggattacaagaatcaatgaggtattat
+atacgacgtaggaaactctggatatatacagtaatctagttacgccatcgcacttcattc
+ctctggaaacttagaagacatcagctgtacgtggaggaaccagacccccgtatgtagcca
+aatagaaccaaagttgcttatacaaacacacccaatgacaatggaccgctggagttcgta
+aactcggaacgtagtactgcacaaacccagcatttagcaataggagctacgtatgcaact
+cccacgtggtaataccttcaagctatcaatatataggtgcctagctaatcgcattcgcaa
+gcagtattcaagcttgtaaaccagtataataattacagaggctctatgaaacccaacttt
+ccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgcccgttctgttat
+tacgcgaattgattctactccaaaattaaacacaaattatcaaccgtttcatttatattt
+gtcaatgcagctgtttaaaataaggctctactaaattataattaagacacttattaccag
+atttctctagttaagtttgaaccagctcgactaccgcgaaagatacattcccttctctat
+ttttcagttcatctatgggtcagagaagcattgaatttattctattcaccctcgtcgttc
+acagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagacca
+cacgcttagaacaagtggtctaaaaagactgccctggaaggagtaagaagtatacagctg
+atccggtgtatccttcagtcatctgccctatactaattacacgacgcaaggaaaaatagg
+tttattttctaggcaaacccttcataggtgactccgatgtgttacgaatcatgcttgaga
+atgtgctatcgttaccgacggataataacgatctccaatgaaccaaatgtagaatgtcta
+ttgattacccttttactattcgacttagagataggagatagaacctcagtgtactttttt
+agccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaa
+agtcttccatattatatcgttgttcgtggaatcgataacagatttgttgacccatagtaa
+atgtatactagtttatgttgtaagtgtagattgttttccgattgccgtccaaactttatg
+tcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcga
+tcgccaatttttccagtcactgtaagtgtaggtttagataaagccgtatgagttatatca
+taagggcctcggaaagcagcttcgaaccaaagttcccttataatagtagtttaactataa
+aagtatatactggtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacg
+tcattagagcggctccaatttaaggttaacggcttccatgtgtagttgtatacaaggata
+acttaaagtatctgttcagcgagctagttaagttatcctcgatagaacacaactcagagg
+tcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattgggaattatcgat
+acctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttag
+ttagtgctgattaacggaacattaatgtttatcgttttgagatttagccaattctctgat
+tctaactcaagatgccttatctgacgtgctatgcagcccctaagtattttacattgtaat
+aggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctactggttaactata
+taatttacagctttgttgagctagttcctctttggtttaagtcctcaatattagttggtt
+cgagcgataagttggctagttaccttagtcactatattagatccgaatgttatgcttcat
+ctgaagaccgccaccctccaaaatttcttttaagactcacttattgcaaggtgtaggtga
+attcggctcgtttctcaagtggtgtatctgtacacgagtttccatattttcatcaacagc
+caccgcacacttatgtcactctaggtattaaaagtcgctctacaaggggacgcaattaag
+aaacagacatgctagtcaaaaataaacatagcgaggcaccactaattcggccgcttatca
+atgggatgctctgcgcgagacgcgccagagctcagtagttagttcggacatacatttact
+tcagatgatcaattagttttctacaaatgcttactctaccccgaaaaaagtcaccagact
+cttacgtctctttagtatccttccgtcttatataaggtcagtcccccgtttcggtaccct
+ggaatttactaagaataatgaaacagcccccaaggacgtacgtttacaaatgatagacca
+gatcgcctagcttattccgacgcatgttgcatagaattgaaccaacggaatgtgagagta
+actagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggcca
+cgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagc
+ttacacttcctcggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaa
+aaattgataatggctcatatggaatgcctacctcatagtgctgaattaacacagcactgc
+ggacctaacttttcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgta
+gggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaagtgaatattcttt
+ttttctaaaagcagatctgctgccgggcactacgaaggagatctctgtgtatcattattg
+cttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaat
+tcgatagtacatattgttgatacttcgcactaaaccgttcatatttaaaggttgtgctcc
+ttccttcgttaaatactggtgacttggtcctatctactattagctagacctctggggaac
+cacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagacatcgcgcctcca
+ccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattattcttatactaat
+attagcaaagatgcataatgatttgtattaaatgtataattgaattgataagggtctttt
+agtcagtgatagagtagtataaggtagacattagaactcttaaccggacgcagatttttc
+ggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttactagtagtacctat
+aatgcactgaatcttcggtcgaagtatagttctaatgctatgcagattgtgacggcgaca
+aatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattga
+atatttttaaatacaaaatgcgcctacttattaggggaattaaccagattgaaggccaat
+cctcacatgtaatgagataatagacgataaatgaaattcttgtaatagttgaactgctac
+gtgatgggtattatatatgattgagatcctccaattgccgacgtcttgtcttgatgccca
+aaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgac
+atgtacagcactccgaagtataagcaataataatgcgggtaatccagactagatcttttc
+ggactcaatgcggtttcacggtaaacatgattaataccggagagtagtcgagcttatcag
+cgatgcaagcgaattcattgtgccaggagatacgttgcagataaaaccggcaacgtatgt
+caacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaacta
+tcgtatattcaagtccattaccttttagtttcagactggtggagctgactaaagttatat
+catcattttgtacactggtttagttaacgataatttcagatttaacatgaccagacgata
+atcgctgtatatccagttggaatgtggtttgccagaaaggttaacttataatcaagcctc
+tcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagtgtatttggagct
+gtagttataccgtgtgctaagatcagtagacatgacgagagcaatattatctaccttaca
+agcatcaacggacgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatat
+actatagttctgtattcagcagttattcttatattcgatattatcttgcctattggatgt
+ctgactttagtatattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtt
+tcacagtgcgaattataaacggttacaaccattaaagacaacaagaccctatagctttat
+ttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaattagtctatagggtc
+gggacgattctacggcatttctggttataatgacaacatggattgtggcccgagaatcgc
+tctttcattaattaagcaatcattacagtcttataagcgctacttccgagtggtagcagg
+taactcgatataaggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgat
+agagaataccgaccacagcgcaacctttgattactttcattaaattgtacggctcactcg
+acatcaagcttaagattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaa
+cccacttcgcagaaagcgtacccagagaagatacgctgttacaatatacagggtgaaatt
+attgcctgttcttcgtaaccatttcgccaaacttggttagaaatgatagccattcatgat
+agaaataagctgaatgataccagtatctttaactatgtagtcagggggaagataacgatg
+gtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgctaacgaagctact
+taatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgag
+ctataatatatgctagtagagaactctggaccatcatctatatgaatactgattcgagcg
+tgcaattactttagcctgcgtactactgactctacaaaacactctgagataagtttgtag
+tcagtaagtcgctctctataaaccttttggatgaccattgtacagccacttatagatccc
+aataaatagcacaggagacagagtttttcaatgctcgatcatttgccgatagtattttcg
+tctaacctcagggcacctattatttgatacctaacctaacggccctttcacaatggagaa
+atatatgacatcgggacaaacacaaatggtgggtggccaggagatatgacatggtggcgt
+ctctaagaaacacggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaa
+aacgctcgaaaagattttgccgtgtaatgacctggtacattgactggtcaggaatacatc
+actgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgtataacgcaattt
+acgacggacatcagatcaagttatacagattatttaagtatcacgtgtgcattgggacat
+aagggatctcacacatgccttggaacatttttgctttgtgccgctttttcgctgcactac
+caatccttacttaccagtatattcaaaggtcgttaacagaatgagaaaggttagggctct
+aagttatcgtcgattgggatagacgagacatttgcgagcgccctccacggatacgaatct
+cccatatcaatgtgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaa
+atcaaagtagcactcgcatagcagttattcagaacctaatacacaaaaccgtcaaacatt
+ttctaattctaggtatgggccgatcataggagctaaggtgaaactcataaatgttttgtt
+agatctagcatcctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgt
+atcctttttaactgaactagtcggtcccatttcgtgactgagatctattaaccgataaga
+ttaataacactcgcattcgtatcagctcagagtgaagtttttcaataatttgactgatat
+attaacttctaaaataaccctttaagcctcggatccgtttcccaatcacatcaaaaattc
+ttattccaactatctacggattaacaacgtgcatggggatcgtagtaagaacttgttccg
+atcactttgagtatatcaagttgacggcccggttattattgaatagaaacattcacctgc
+taaattaaataccgcacatcggatacccgatttcagagggccgtcttactaagggcaggc
+tttgttcggtttaactgagatgttcattattttacagtatgcttcaactaatatgtaacg
+aaggacagtggatctgtctccatagtagatcttcagtcgtgaatttcataccgctcctat
+ttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccctagtattctagac
+gaaaattttttctagttcatctgataatttgccaattcaaaaacaaccgctggtttcccg
+gcgcattctctaaaatggaagtcgaacctagagccattatttgtcggtaacccatgagtt
+ccttcttttcagaagttaatacactgtggtcctatacagaggaaaaacagcggttatata
+cgatcgtggcataacaacattggatcaagatagcaatttggctacctattctaattctca
+ctagattcggtattccactacaatatcggcagattaggattggatgaataatcggtgttt
+aagtccggttgcgtctccaatctcctaatttttattaatattgatcttggtgacctattg
+taaataaaaacttcaagactttgaataacggtgaaaagatagaagactcatttgaaaatg
+gatcatccacagatccaaacattagcaagacactaatccccaactagctattctgatcgc
+gatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaattctttttgggctt
+tgttcgatggtgattcagaatctttatccggtcgcttccctgtagctactttgtggggat
+attgcccggggattatagggttgagatcgtttcctaaaagtatttaaaccaagtagactt
+caactaaactacatcagaacatcgtgaagacaccatacgcggtacctttatttaccgata
+acatttcttcaagaaataccggtaagcagcataatgaccctaaacagctcggggtatcgt
+cgtagttttaaattttatttaggttactgctcaaggaataaaaactaactatttaattta
+taataatattacaaggctcacactgattagatttgtctataagacttcgcgatcccccat
+taccggattgtcttaagaataaactagataaaccatgcattttctagataaggcctttag
+tctaattagatacaaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaa
+ccttttaattacccgcaaatcactttatgtcgagactacctctgaaatttattatctacc
+taccgcatgaggacttgaaccatcttgtaggagttatgtttattagctaagattcgttta
+tcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaattgtttttagttga
+gtcaagactgatatataaataagtttccctagttttttcgtggtgggacgatattgaatt
+gaatcttaaccgaagagtttcccactctgtcgcacaataatacacgccaatatttccagc
+cctgcttatgccttaatcggttactcaatctcccattgaagttcattttgatctgcatag
+aagtttcgggcccagccttttttctgccaccttcctccaagctctgtagacgcactctaa
+gattgatgctcacatgtattaattctacattaacataaatatataagtcatgcatcttcg
+agtaaaatatctggttctccaacatgtcctggcacgtatcgttataatgcccatacatgt
+agtattaaaatgattgggttaactggatattaagatcatcgaaattgtaaagtcaaatta
+acaatactgtctcaagaccgtgtattcctcgtgctcggaagggctattacgcttacttcc
+gttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgca
+tcggttagcaagagtataaaagttgtttaaacgaactacttgctttacaataccggtcgt
+atatatcgccgtgaatccagaagattgtcttctttggattatcaaccgagatcctgtgga
+ccgatgttttgggaccttcacagaggactccaggtagagctcgcttttgcattaatctaa
+gaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacaga
+gaaacgtaaattactttaggccgaaaggcacatgagttattatacatatacgagatggtg
+gtatacatcgaattcggggcatacactatagttgcattgtatttagctgctttaaataat
+atgatattaccttccttacataagacattaccggcataccctggttttcaacttgtgggg
+ctttttgacgatcgcactctcatttgatccgagtagggcggtgacccctgcttttcaaat
+acaaaaatttcgctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaa
+tttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcgg
+tcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagt
+cacgggtatcttgatttcattcttcttgtcaattgccgacataggatgaaatcagattcc
+aatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtc
+gacgaagtggatagtatacgggccttttgtacggtgcgatcaactatgaatctcggcgag
+ttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatgacgaattttcggc
+taggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggattccattttacaa
+gacgattacaatgagttacatgtctctcaacgtagtctttccctagtagtctttgaacta
+tttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgccattcatgttta
+tgatggaacaataagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggc
+caaaaacatattcaatttagtacagatccccagaagttaagctaagtgctctaaaatggc
+ctaaacggttatcaaagtaggtctaattactatactaacgggtgcatcgtaataactgct
+gtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaag
+ccttagcgattcttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgc
+aaagattcaaaaatttaatctatgagcagatatgcctgatggtgactacgcgtatgttaa
+ggctaaatgttgacaaccgcacacataatcgaactattgatagtcgggagcataaccagg
+tgaacgtactttgttcacgacatttattgacatgttctaaatacgtctcaaaatcacggc
+gcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtc
+aaacttcatgagaactttagctggcttttggccagtatttagggaccaagagcactagcc
+ttaagctgaatattttgccatttatctactgttataactttaaaacttggtggcaccaga
+cttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtagga
+attgagtttatattatatttaaactaaaagatgatattagcttctgagggcgatagggct
+ccaaatcataaagaggaatatattattacacgattagaaacccacaacatacctcgaatc
+gcccaaaagtttgacgaaacttggcagtactccacatctcagtaatacagttgggagagt
+ctcaaatgttgttttattactcaatgaaccaccctcataatttcactgctgttccattaa
+atttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtag
+atgcataataaaaaaaactgctcgctataacacgatcatcgtgcattcttacttaggagc
+atcacccgcacaataacgtaccttaaactacaacactattagaccgagtactgtaattca
+cgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttg
+cggagaggattcaattattttccattgcacctactccactagattcgataaaagaaggtg
+gtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtga
+accgtcatccttccctaagaaacataaaggtttttaataatgtcgactgtgaactataac
+tgcatcctttcctgacctactccggttccttgttgttatttctgaacgagaccagtagat
+aaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtg
+cccgtacaaacataagaagtcataatcttacttgaaattaattttgccttttattttttt
+tcaggctcgaaattaatgatttgttttttttgaccttctagttacgctaatatgcggtcg
+cctgtggtttctattgagtcctataacgggatgggatctaatacgtttggttactagtaa
+acaaggtataaatttgataccggagtatcaactgtataacatcaagctttatgactcata
+cgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagccactaaggggtgta
+ttacgatagtgacaccaccgagcgcactcactccccaagtagatttatgatcctacgcta
+agtattagatatataaccaaagaggttctagtcagtgcaactcttagaataataattagc
+cggttttgcctttttaggcctaatgcaatattcagctagcccttatgtatctcgcgttcc
+acagcaccactcatggcacgcgtttaaactaatcaaatataatctatgaatgttatgcca
+gtacttgaataaatcaggttttttataagtccttgcatactctcgttatatactgttaga
+gtcttaccccatagaaattctttcatctgcaaacttagaagaattctcagctacggggag
+cataaagtccccaggatgttgacaaatacaacaaatgtggcttatacaaacactccatat
+gaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaatccctccatttt
+ccaatagcagatacctatcctactacctcgtggtattaaattaaagcttgaaatatagag
+ctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttac
+agacgctagagcaaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtac
+gtgtttactagcaacttcgcttattaagacaattgtttataagccataattaaaaacata
+tgttcaacaggttcattgatatttgtaattgcacaggtttttaataaggatctacgtaag
+tataatgaacaaactttttaccagagttatattctgtactttgaaaatgctcctctaccg
+ccttagagactttcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaag
+ggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaat
+ataattttcagttttcgaacacataaccctttgaaaatctgctatttaatgtctcacctg
+catgcactatcttctatactgctcagaacggctatacgtcactatgctccaagtgacgat
+ttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaagtgcggactacg
+tgctctttacaataagccttgtgattgggctataggttaagtcccatattaacgatctcc
+aatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaattacagatagct
+gttagatactcactctaattttggacaacaatcccaatcttggggtcgtctatcgcctga
+agctcgtaaatccttccatcttaaacgattacatattatagacttgttcggggtagagat
+atcacagttgtgcaaacattgtaaatcgatactagtttatgttggtagtctagttgcttt
+taccattccccgaaaaacttgatctactatttcgacaacagtaaacttgaactaggtaag
+tgaaaacagagaatgcctcatagtgccactatttgtccactatatgtaagtgtagcttta
+cataatccactatgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcc
+cggatattacgactgtaactataaaactagttactggtagcgcgccatgtatagatttgt
+tttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtc
+catctcgacttctataaaacgataaagtaaagttgatgttcagcctccttcttatggttg
+catcgagagtacactactcagtgggaaatagatcggggttcctacttcagattgtattat
+ctaggcaattgccgattgtgccatacctggataaaataagctacctacatgtgatgctta
+tctattatcgtcatactaccttagggtgtcctgttgaacgctacattaatctttagccgt
+ttgagatgttccaatggataggagtctaacgcatgatgaagtttaggaaggcagagcatc
+ccactaagtatgtgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtcctt
+ctggttctattctgctgaactattgaatggaaagattggttgacctacgtactatttgct
+tgaagtcatcaatttgacggggtgagagacatatggtgcatactttacggactctatatt
+ttagatcagaagcttagcagtcttctctacaccccctcacgacataattgcttttaagaa
+tctatgtttgattcctctacgggaattcggatccgttcgcatgtgcggtttatctaaacc
+aggggacatatgttcagctaaagcatacgaacactttgctaactagacgtatgtatagta
+gctataaatcccgacgatatttacaaaaagaaatgagactcaaatatatacatagcgacc
+ctacacttattcgcaccctgatctaggcgatcctagcacccacacccgaaagtgagcact
+agtgtcttccgtattaaatttactgcagttgagattttagttgtctactaaggattactc
+taacccgtaataaggatcaagactcggtactagctttactatcattccctatgtgttttc
+ctaactcacaagggtacgtaccagcctatgtaattacaataatgataaagacacaaagga
+agtaactttacaaatgagtctccagttacactagcttagtccctcccatcttgctttgaa
+gtctaaatacgcaatctctgaggatatacagcagaagaacactcataacgttggagtcca
+agaattagactcatagggcccccaacatttaatatgtactgtgagtttgaaggtgttcta
+ttgttaattcctgctcttgatacatgacacgtactccgtgtttaaggcttcggactgact
+ttctttcataagttgagcaacgaaaatttcagaatcgataagttggattcactaactaat
+acggctgattgaaaactccactccggacctatatggtcgacctttatacgtaaccgatat
+aaaacttataggctggtatatcgagccttcctagcgcaatttcggatggggtttcttcta
+ctactcaacaacggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgta
+ggagagcgctgtggagcatgtgtcattatggactggagcactcttaaatcactctgcgtg
+tgctaaacgatagatcataacatgtcctgagtaaattttcttgatacgtcgcaatatacc
+gttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatata
+ctattagcgactcatctcgcctaacacgcacacgtataaactcggaatgactgccgctct
+tacatattagaaatacagactacaccacggaagcattgggtcattctcaaccgctgtata
+aaagatgattagtcttataataagattaccaaagaggcagaatcatgggtagtaaatcta
+ttattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaa
+atattaaccggacgaagtggtttacgtcgtactttcactattagtagtaaatacaaggta
+acaccggggaatagtactaaatataatgatatctatcttcgggagaacgagtcgtctatt
+gctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgtt
+acttttgtctattcaaaagattgaatagttttttatacaaaagccgcatacttatgacgg
+ctagtatacagtttcatcccctagcatcaatgctatggacagtattgaacttataggaaa
+ttcttctaatagggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatg
+gcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgt
+agtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggc
+ccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaata
+ccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggt
+gaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgac
+gagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagac
+gcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataattt
+cacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacaga
+aacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccc
+cgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggac
+gtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatag
+ataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatga
+gtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgt
+atagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaa
+gactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagat
+acttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaat
+aatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttatta
+cagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagatta
+atatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactt
+tcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatt
+tgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgc
+ggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttgg
+tgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgag
+gtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggca
+gcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatca
+aaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatca
+tcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataat
+tataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcacc
+attcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgaga
+catcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacc
+taaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctcc
+ccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaa
+gtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcg
+aaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaaga
+aacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttgga
+agtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctg
+tctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggactttt
+aacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccg
+agccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttac
+ttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacc
+taagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctat
+ggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacga
+cagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtc
+tatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaa
+cttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatac
+gtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggc
+cgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttat
+tatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctg
+acgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaa
+ctaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcag
+gcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctc
+taagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaag
+tcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagcct
+tttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagata
+cagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcat
+tttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacatta
+ggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatg
+aatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaa
+agatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaa
+gaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagctt
+catcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtccct
+tccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcatt
+aaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacat
+acccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatc
+tacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacg
+aagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggt
+agtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaat
+gcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcat
+gaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaa
+taactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactga
+gctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaat
+gaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtggg
+tgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaa
+agaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccat
+tgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcct
+caaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacat
+aaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctac
+gttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacat
+catagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggcta
+ggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagt
+tcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtac
+gtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtg
+cattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggta
+gagatacctttgcaatttttcgatgaaggcgaccgagataaatgagctataacactgtat
+gtcttttgattgctataaaacacagaaacggatattaatttaggccgtaaccaacatctg
+ttatttgacatagaacagatggtcctttacagcgtattccggccttaatattgaggtcca
+gtgtattgtcctcctttaaagaagttgattgtaactgacttaaataagacatgtcaccca
+ttcactgggttgcaactgctggccctttttgtccatcgcacgctaatgtgataacagtac
+cgccctcacacctgcgtttaaaagacataaatgtcgctatgaaggttattcattaatttt
+agctgttttcttagaaaaggtaaatttaaaattgaaaaggctagaaaactaaagttacga
+caaatgtgtttgtcaagtaggcgggcatcattgagattgtaagaaataaagccataacca
+gccccggaatagaaaatgttaaggaaaggcgatcttctttgaattcttattgtcaagtgc
+agtcatacgttcttatcagaggacattgcaataaaatctaacaccctcccttgtgtggtt
+gggccatttgtacttcgaagcgtccaccatgtgcagaggataacggaatgtggttccgtc
+ccataaacgatcattctcgcccacttagtggcgcggtaaatcgctctcatagaggtaact
+ggcctgtaatgtccaatgttaggctaccttctccaactttagtacaacgaataatgtccg
+attaacaaggagtcaatttgtcatgaccagttcattcaggtacttgtatctatacggacg
+cgttccagagtagtatttgaaattttgaggttctactgataagtttagctatcgctgtat
+gtctgaataagaatttaatgtttatcttcgataaataacaattaacaactcctaggtgat
+acactgtgaagtctgctgttccccaaattacatatgctattttgttcacataccatgaag
+ttaagctaagtgctctataatggcataaacggttatcaaactagctcgaatttcttttat
+tacgccggaagcggattaactgctgtagatcaaacacgttaggatagtgtcgttttcata
+tatatctaaattcggtctaacatgcattacccatgcttgataacgtagcacttcgcagtc
+taattatgtaatgtccgtttaaccaaactttaaaaaagtttatctatcaccagtgatgcc
+tcatcgtgactacccggatctttagcctttagggtctaaacagaactaatattactacgt
+gtcatactccggagcttaaccaggtgaaacttatttgttaaccaaatttagtgacagggt
+agaaatacgtatcaaattaacccagcaatacaataagcatgaaaataattgtaatcgggt
+ttgggccggaatcccgcttggcgaaaacttaatgacatagtgtgatgcattttgcactgg
+attgagccacaaactcaactagcattatgctcaatatttggccagtgttctacggtttga
+aatttataaaggccgcgcaaaagtcttgtagttacaaacgcataaatctcgaacgtaata
+ggtttaattagaacatccgtaggatttctgtttatagtagatttatactaaatgttctga
+ttagattctgacggccttacccatacaattaataaagacgaatatattagttatagttta
+ctatccaaataaattaagcgaatcgaaataaactgtcacgatactgggcagttatcaact
+tatcacttatacagttcggacactctatattggtctgtgagtactctatcaaactaactc
+ataagttaactgcgcttccattaaatttcaatacgttcttgtgctgtgtacaaacctata
+atcgaataaatgacacatatggagatgcataataaaaaaaacggctccatatttctcgtt
+aatcgggcattcttaaggaggagcatctcaccaaaaataacgttcctgataagtcttaac
+tattagaccgtcttcgggaatgaacgaaacctcaagctagcatggtatagttcttgatag
+cgcgtaaattctgataatactgggcggacagctggaaattagttgccagtgcacctacgc
+aaatagtttacataaatcaacgggctccgaacgtaaatacaaagggttagttacatcgca
+acaagatgaaaagcatgtatgtctaccgtcatccgtccctaacaaacataaaggtggtga
+agaatctcgtaggtcaactataactccatccttgaagcaactactccgcgtccgtgtgcg
+tagttcgcaacgagaacactactgaaaaaagctaaacaactctcggtacaaatgcggctt
+gtgtcgataaagttggtggtagtgcacggaataacataacaaggaatattatttattcaa
+attttttgtgactgttatttgttttctgcctagaatgtaaggatgtgttttttgtgacct
+gatagttacgcttatttcaggtccacggtgcgtgagagtgtgtcctataacggcagggga
+gcgaagtagtgtcctttagactattcaaggtagaattttgataacgctctataaaaggta
+gaaaatcatgattgagcaataagaccccaacttatcaaaaaaggagttctcgacagcgcg
+tgtacagtccctataacggctgtatttcctgtgtcacaacaccctcccatcgcactcaaa
+atgtagatttatgatcagacgctaacttgttcttagagaaaaatacacgggatactctgt
+gcaacgatttcattaataaggtgcagcttgggacttttttggccgtaggctttattaaca
+ttcacagtaggtagcgagacttcctatgaaccaatcatgccacgcgttttaacgtttcaa
+atataagctaggaagcgtttgccaggacttctataatgcaccgttttttttagtacttcc
+ttactagccttagtttatgttagagtctttccaattacaaaggattgaatagccaaaatt
+tctacaattctcagcgaacgccagcttaatctaaacacgagcttcaaatattctacatat
+cggcaggagtcaatatataaatatgaaaatcgtaccatcctcgtacttttagaccaaacg
+tcttcggataattaaatcctttttcaattaccacagtacgtgcattagaactactgctat
+gaaagtaaaccttgaaatatagtcctcaagagcgtatccaagtacattgcacgtgtatac
+agtcgtataaacgagttgatgttctgacgctagagcttaccattcgttaaacagataact
+aaaatttaatggctgagtgacttagtgttttcgacaaacgtcgcggatgtagactattgt
+ttataagcaatttttaaaaacatatgttcaaaacggtatgggatatgtcgaattccacag
+gggtttatgtaccatagaagtatgtataaggtactaaaggtttaaatctgtgatattcgg
+ttcggtgaaaatcagactagtcacacttagtgtctgtaaattagattgggtgaaggtaag
+cgatcccgaactctacaaggcatgggatgagattctaccgactccggataacactttacg
+atcgcgcataactctagctcttagataagtttaacttgtcgatctcataaacagttcaaa
+atctgcgatttattgtatcaaatccatcctctatcttctataatcatctgaaccgcgata
+cggcactatgagccaagtgaagattgaatccaagaaagctataattggtttattttagtc
+catttaaattaagtccggtataagtgctctgtacaatatgcagtctcatgggcatatacg
+ttaactaccttttgatacttcgaattggtaaaatatcgactatcgatttgcagtaaaagg
+tgtagagtccaattactctttcctgttacatacgatctcttagtttggacaactagccca
+tgatggcgctcctctagcgcatgaacctactttataattacatctttatcgatgaatttt
+tttagactgcggaggccttgagttttaacagggctgctaaatttcttaagcgattagacg
+gtagcgtcgtacgctacttgcttggaacaggcaccgaaaatattgatctactattgcgtc
+aactctattctgctaatagcgatggcaaatcacagaagccctcttagtgacaatagttgt
+caactatatctaagtcgacctttactgtatcaacgatcacggagagaattaccgaatacg
+aaacctcaggactaaaaaacggaaaggatttgtcgacggtaaatataatacttgttaagg
+gtagcgacacaggtatactttgggtgtaaacgtggtgcttcccggaacgattttcagacc
+agaaaattgttccggtaaccaggaaatctcgtctgcgttaattcgtgttagtaaacttga
+tcttcagactccttcttttcgttgcagcgagacttaaattatatctgcgaaatagtgccc
+cgtgcatacttcagatggtaggagataccatttggcccattgtgactttacgcgattaat
+taaccgacatacatctgttcctgagctatgatcgtctgaataaattacggtctcctcttg
+atacctaatggtttctggagacgtttctcatgttcaaatggatagcaggagatcgcttca
+tcaagtttagctacgcagagcatcaaaatatgtatgggaaagtcgatttccaaaccagaa
+gggataaagagaaataacggacttctccgtagattagcctgatattttgatgggaatcat
+ggcggcacatacgtaagagttgcgtgaacgaatattttggacggcgggagacacatatcg
+gccattcgttaaggtctctatattggacatcacaagcttagcagtatgagctactaacac
+tcaagacattattgattttttcaagatatgtttcattcctctaccgctattcccatacgt
+tcgattcgccgggtgagcgaaaccacgggactgaggttaagctaatcaataacaactcgt
+tgcgatagagacctatgtatactagagagaattccccaacatttttacaaaaacaaagca
+gactaaaatagatacagtccctccatacaattaggaccaacatgttattgccgatcctag
+cacacacaccacaaactcagaacttctgtcttacctatgaaagggtctgcacttctgatt
+gtacgtgtctaattagcattaatattaaaactaattaggataaactataggtacgagctt
+tactataagtcactaggtgttttccgatcgaaaaacgggaccttcaagccttggtaagta
+catttaggataaagaaaaaaaggaaggtacgtgactaatctgtctaaactgacaatagag
+tagtacctacatgcttcatgtcaagtcttaatacgcaagcgctctcgttatactgctcaa
+caaaactcataaagttggactccatcatttagaatcatagggaccaaaacatttatttgc
+tactgtcactttgtaggtgttctattctgaattcctcatattgatacatgaatcggaata
+cctgtggatcccttaggacgcacgtgctttctttacgtcagaatacatattgtcagaatc
+gagaagttccatgcaattaagaattcgcctctttgaaaactcatatccccacatataggg
+tccaccgttattcggaaacgatataataattattccagcgttgagcgtcccttaagagcg
+cattttcgcttggcctttcttctacgactctacaacgcaagtggctgtgtggagtttacc
+acagcgcagcaccccatagaactacctctgagagcgcgagatggtggcagtatgctctgc
+agctagcgtttagaacgcgcccgcgcattaaccagtcatattaaaatggactgtcttaat
+tgtcggcattaggagcaatattaactgatgagggtatcggtcgcagaagtaatgacggaa
+atacgcctctagtccgcagagatacgattacagactcagatcccctaacaagcaaaacga
+ttaaatcggaatcactccccctatgacatatttgaaatacacaagaaaccacgcaacatg
+tcccgcattctcaaccgcgctttataagatgttgagtctgagaattagatgacctaactg
+caagaatcatggcgagtttatctagtaggcaagtctgtaccctagggttcgaacgctgtg
+acgtcgtgatcggtctaaggacttagatgataaccaagaactggtttaccgagtactttc
+actattaggagtaattacatgcgttcaccgcggaatacgacgaaattttttcatatcttt
+atgagcgagatcgtgtcgtctttgcattgcaacagtcgctaccagtaattgctgatcaat
+tatagattcattatacagatgcttacttttctctattcaatactgtcatgagttgttttt
+aaataagcaccagaattatgtcgcctagtataatcttgcttccacttgaatcaatgcgat
+ggacagtattctactgattgcaaagtagtctatttcggcttagcagtacgcatgcctatt
+tttttgcaggcacagaataatatgcaactaggattctcggcatccaattaacaggctaaa
+acaccaccgaaagacaggtaatctacgaagttgatgtttactacagaaagcgaatgatat
+cacttggagaacattttagatgcccccttttaatctagactgagtgtaccaatatatcac
+cggtctaccgaatcagcttgaataaaccactctagtactcatgataaccgagcatacaca
+tgtatttctcaatgcactgaaggtgaactgtttacaccataccttgcgaatcaacgtggc
+gacttatacttctgtctttgagtacagcacaccctaatgaatctaagttagttgttgata
+cgaattgtaatttgactggatctcgcctcctcatctagattcttagagaagatgtttctt
+atagccggtactgtaactttattgatctggtttatggtaatcaacattttacctctattt
+aaacgtccttgcgccgtgcactcaatcctgatcggtttagattcaagcgattatcgagtc
+tggaggccgagaaaagaaatgcacagagtaagctctctattgcgacatctacgtagaaac
+tcgcatttcagatcgagtaagcaactctcattgtgttgattcagtaatacaagattacct
+acgcttctacgaaatatactatagatttagcctacgtcacctttagtgtcgagtcggagc
+tttgaagatcggatgcggtgtggactgtgtataggcaattttgctgcgagctcgtgactt
+ttggttgatgtcgatatcaatgggatacctcaaacgtctttatctctggataactcacat
+tgagtataccggtaaaaatttattctattcatctaaatagtcagtgagggctagggtcgc
+aatcacattaggccacatacacatacttaacatgttctattgacccgacccaactttagt
+agcattgtagccgtttatgcaaatatgccaggcgccaaacactagccagagggcattttg
+ttacatttatttaatcgattattacacagtcggaacacgcctacatgcgttcgacttatt
+tgcgacatggtcaacaattcagtaatttaatccaaaacctaaagtcagagacatgacact
+aaaatcacattaaggtcagttagtgaaggaatggctaaccagctagagaatgcatcatta
+acaggcacttattgtcaaatattttccagatctaagcaacatcacgttaaaaagtacaac
+aatcacttaaaacacatcagtccaggtgtaattagaaagccgcttagtaggcaagcgtag
+gagtataaatgtagacaatagtcgggacttagcagacactggatgcagtcatagaagatc
+ttgcataacacgttagggttagagctacgaacgcccatcattaactgcctaaagcgtgcg
+tgagcttagcgctaacttttccaacacgtttgtgatttcgttcataatgtatcaatttca
+cagtcatatacagggagtgtagaaaaatcgcaattaacatacgttgacctatttttgttc
+agagttcagttagagcctaatgattcgagagcaataatcaggacagcctcataggaagtg
+tcaatcacttagaagctatattattataaatcgctctttactgtcgtcgaaggaacgagc
+gagagagaatcagttgcctgcaactggcttaacaatatgatacataaaaatattttcatc
+accactaagacggtggaattcagacttattggcaacttaggatgggactattaaataacc
+cataagatgttgggataaagttacgaaacgaaagggatatagcctgttagataggaaatc
+cccaataaaacatagccggcctccacagcagtgatctattccgccacgcgatatctttat
+accacgcaatataccaataataaaggttaaatgtggttgcgatttaaaaaagatacatat
+cagttgcaccgcgtagcaaatccgtatgtgaagcgtaacctagaattatagcgtctgcaa
+gttctctaagcttcctctgcaagatacaatatgactttttagcttttttactaccaaatc
+tcagaatcttagaaacaggttggtacgtgctactcggaattcccaaagtaccctgctata
+tatgccattccttcattggtccgggctcaccatggggccatcatagtaatagaaggtagt
+aaaactagttgatttccgacttttaacaatcactatcctgacccagatatgggttccgac
+tggcccttactccagtaagggcagacacacagacaacgagaacttgataactttgaattc
+tcaaatcgatcattgcaacgtgacttatttactagcctactcctataattcatacgtcaa
+atacatttcaacggaggaagataataagtaaatattcactaaataatggtcgaaggagtc
+ctttgccaacataagtccacatatgcgctatagattttttcttggggttcatattcaata
+agataaacagcaagagtatcacgtcagcgagtcattgagatcttggctagcattgtgata
+gcatattctacctaaatggtagtctagcacagagtggataagatatcagttagatataga
+caagtactataacagatctcgcttcgttggattgtatggctagctttgatgatatgattt
+tataaaaattgatccagacctgacctggccaattatattcattttttatgagtaaaaata
+gataaccatgaaaatactcaagccccttaggacgtacaaagtggtaacataaatttcagg
+tgttattctgcaaccacacctgttttgggttttcaaaaaggctaagcagattggttttac
+agataatccctgaacactggtatctcccaacgatgtcgttcccaacccttgctgaccttt
+taagctctgctgaagttttgtaaactaggcggaaaatatgttcgatagatccactcgcct
+gaggtagaaattcgtcttagtaacgcctctttggattacacagaatagtgtactgacacg
+tacactgctgcagcagccatacgctaacattaaaattcgttgagtctacatttgttgtta
+ttcggattatgttattgggaatagtatttttattcccctgcgtgaaaccacatggataga
+ttagcctactcctaaagactcccttttggtctacggttcaattctcttactgagtttatg
+ttcgtaattatatcggcgcagtgaatctcctaattatcaccggagttaccagacgccatg
+aacttatggccagaaacattgcatgtggcctacataggattagtatcaagagtttacgtt
+tgcaacgacatttgaccaacttgaccattcctgcttgtagaccgcgggaactcccctgca
+cgcgactatagaagttggtggtggatgtggcttatgccgcaaatatggttttgaaaaaag
+taatctattgcttgatacctgaattgagacatgtataagggctattgccagatgaaaaac
+tgcatataaggtcaaacaatataagaacattatacataggatcttagcgttcctcaggat
+ggtatacgctataaagtctagcttcagcagctaaggagttttgccagtgcggacttccgc
+tggaagattaggtttaaccgccctgacatcttcataaggtcgggcctgattcaaacccct
+ggagtgccgtctcatacttgaattaatcgatggaaaacttcttctagtctaatattatta
+ttaacaaatgacggttcaataaataacaccgtaagggtgggaaactgttaagtgatgaat
+cattttaacctatcatccattagctacagataatgataccccgatccgactagggggtaa
+gtggttgttccgttaggataaaccatgtaaaacgttagagggtttgtagattaattggta
+ttccagataaatgaggtcagggcgagtgatcaattacactgaaaaattgtcagcttgcgc
+ggtagttgttaagacagtataaatgaaggggattcagaagcaagtttctcgattgactga
+atttataaaccagtcgtcaatcatgatttttgtgtcgattaaagcctaaatggtaattta
+aaccattgatatttatcgagtctataaatatctttggttgtatattacttcacaatcacc
+aattctaaatgattcttccactgtgcgggtggagatatcaggacgggttaaggttgacct
+acatcgttttgatacaacaaaaatcaaagcacatggctggggacttctcgatactatctt
+tgagatagtacgggcaagagtgggtgacgcctccctacattttcaagtctatcggataac
+ttctcggtaaaacgctcgcgatatagttttaaagcattgatttaatccacgcaggagcaa
+gttttaccggtcgaatgagaaaattcaacgtaagtgtcatatccagtcatggttagccaa
+aagcatgggttatccaaaaggaataaaacagctcttcaacaaagagatgaggcttcataa
+cttcgatgaatgcgtatggttctgatatatagatcgatgcatgaggacactttattttag
+ccggcgaattaatggaatccatacgttacttatttggacatgacttctaggtgtttttgc
+tgtcccgtttagcgatatttacagattagtatttcgtttctcatagttaattgtatctag
+atactaactcgttgaagacgcataccttgccatttgtacaggacttaactgttccgtgcg
+taatttgaatttcttataggttcttcaaggcacgaatacctcactcatgaccgttcatac
+tctagttaaggtcgggaatactacgtatgcagggaattgtaacctaggagatttacaact
+ctttaaacaagagtcgctgaggtccaggatcaaaacactgaatctcctaacttcgggtgc
+ctccgtaaatcacctagaaacctactcatacatttgcaattttgagatgtaggcgaaaga
+gagaaatctgctttttaacggtatctcttgggattccttttaaaaacacataacgatagt
+aatgtaccaagtaaccaaaagctgggatgtgtctgtgtactgatccgccgtgtcagagta
+gtccgccatgaatattgacgtcaaggctagtgtcatcaggtattgatgttcattgtaaat
+gaaggaatgaactaatgtcaccaagtaaagggggtgaaaatgctccccagggttctacag
+acatagagatggtcagaacacgacccccctctcaacgcagtgtatttgaaatatatggac
+atatctaccttattctgtaattttagatgtgttctgtgtataccgatattgataagtcaa
+taggcttgattacgtatcttaagacaaatctgtttcgcaagtaggaccgcatctttcaga
+ttgtttctttttatgccataacctgcccaggaattcaaaaggttatcgatacccgatatg
+ctgtgaattattattctaatggccactcattcctgcttatatctggaattggcatgaata
+tcttacaacctaaagtctggcgttgcgccagttctacttcgtaccggacaccatctccag
+tcgttaaccgaaggtgggtacgtcacataaaagttcattagaccacactttgtgccgacg
+tatatagatatattacacgtatagggaatgttttctcctaggtgacccgaccttctacta
+aggttgtacatcgtataatggcccattaactacgaggaaagtggtattgacctggtaatg
+cacgttcttcgatatataccgacgaggtaaagtctactattgcaaagtttgacgttatac
+tgataagtttagatttccctggatcgcgcatgaacaatgtatgcgttatctgccatatat
+aacatgttacaaatccttggggatactatcgctactatcatcggaccaaaattaaatagg
+ctagtgtcttatcagaacatcatgtttaccgaactgatctattttccaatttaagctgat
+attacgtccgcgtatttattttagttccccggatgacgattatctgagctacatcataca
+agttagcatactcgccggtgcattgatttcttatttcgctatatcttcaagttcacaggc
+ttcatatagttccaattagcagtataattaggttttgtaactttaaccatactttataaa
+aggttatattgcacaactgatcaagcatccgctataacccgagctttaccagttagcggc
+taataacaaataagatgacttcgtgtcatacgaccgtcatgatcatgctctaacttaggt
+gggaaccaaatttaggcaatgggtagtaataagtataaaatgataccacatatactataa
+caatgaaattatttgtaatccggtttgccaacgtatcccccttcgcgataaattaatgac
+atagggtcatccatgtgccaatcgtgtgtgccaaaatctcaaattcaattatcatcaata
+ttggccaagtgttataagcgttgaaagtgatataggccgccaaaaagtagtctacttaaa
+aaccaatatttatcgttcgttattgctggtagtacaacatcacgagcatttctcttttga
+gttgatttatactatatctgctgatgtgattatgtcccacttacccagaatattaagaaa
+gtcctagattgtaggtatacttgactataaatataatttaagactatacaaataatctgg
+ctacattatgccatcgtagaaactgataacgtagtaacgtcggacactagattttggtcg
+gggagtaatctagcatactaacgaatttgttaaatccgctgaaagtatatgtcattacct
+gcttggcctgtcttcaatacgtttagactattaaggactcatttcgagatccagtattaa
+ttatacgcatccatatttatactgaagacggattgagttaggacgacaagctaaacaaat
+attaagttaaggattagtattatattgtagaaactcgtcgggttggaacgattcatcatc
+atagaatgcgttacttattcagagagacttaattcggttatgactggcagctcacctgga
+aagtaggtgaaaggcaacagaagaatattgttgactgaattctacgggctacgaacgtaa
+ttacaaagcggttcgtaaagagcataaagatcaatacaatggatctctacagtattacgt
+aaataacatacataaacctggtgttgattcgactagctcatagattaatcattaattgaa
+gctacgaagacgcggaagtctgcggagtgagcaaacagtaatcgactgataaatgcttat
+aatatcgcgcttaaatgccgcatggtgtacattaacgtgggggtagtcaaaggaatatat
+ttactaggaatattagttatgcaaatgttgtgtcaatgtgatgtgttttatccagacatt
+ggatgcatggctgtgggggcacaggatacttaccattagttcacctacaagcggcgtgag
+agggtctcagttttagccagcgcagagaagtacgggcctttagacgattaatgctagaat
+tgtcataaacctcgtgaaaagctagttaataatcatggtgctagaagaacacaacttttc
+tataaaccagttctcgactgacagtcgtaactcactatatcgccgctttgtactgtcgca
+aaaaaacctcacatagaaagaaaaatctactgggtgcatcagtagagatcgtgttctgag
+agataaatacaccggatacgatctgcatcgagttcatgtattaggtcaagcttgggactg
+ttgtgccagtagcattttttaacagtcaaagtagggtgagacacgtcatatcataatata
+tgccatcgaggtttaaagtttatatgataagctagcatgcgttgcaatcgtattcttgaa
+tgctccgtggtttgtactaattcctttatagactgagtgtatcgtacactcggtacaatt
+acaaaggatggaagagcaaataggtcttcaattataacagtaccccaccttaatctaaaa
+accagcttcaattagtattaatttcgccaggagtatatatataaatatctaaagactaaa
+agactcgtacttttacaacttacgtcgtagcataattaaatcatgggtaaatgtcatcag
+taagtgcattagaaatactcctttgtaaggatacagtgaatgtgtctcagcaagtcagta
+gaaatggaaattcatactcgattaaggcctataaaactgttgttggtatctacagagtga
+ttaaaattagtgaatcagattacgaaaatgttttcccgctcgcacttacgcgtttagaca
+aaagtacaggtggtacaattggctgtagtagaattttggtataaaataggtgataaaccg
+gatgggtgtgggcgaattcaaaagcggtttttgttccatagaactatgtagttggttata
+aaggttgtaatctcggagattaggttagggcttaatcagaatagtaacaatttctctatg
+taaagtacagtgggtgatcgtatgagttcacgaactcttaatgccatgcctggacaggat
+aaacaatacgcatataacttgacgatcgagcttatatcgacctatttgagaagtttaacg
+ggtcgatataatatacaggtcttaatagccgattttttctagaaaagcaatcctatatct
+tagttaatcagatcaaccccgtgaacgatatatcagcaaactgaacattgtatacaacat
+tcctttttgtccgggtggggactccatttaaagtatctcacctagaactcagcggtaata
+gatgcagtctcttgcccagttacggtaactaaatgttgatacttagaattgctaaatttt
+agtctagacatttccaggtaaaccggtagacgacaatttctctgtcatctgtcataagat
+cgcttagtgtgctcaaattgcaattgagggccctactatagacaatcatcagacttttta
+attaaatagttttccatgaatgtgttgtcaaggcggaccccttcacttttatcacggctc
+ataaatgtcgtatgactgtagtcggtagcggccttcgagtcttcaggggaaatggaaaag
+aaattaggcttctaagatggactataatcgattaggctaattccgttcgcaaatcacaga
+agcaatcttactcaaaattgttggaatcgatagcgaacgcgaccgtgaatgtttaaaagt
+gctcgcacagaattacccaatacctatcatcacgacttaaatacccaaagcagttgtagt
+cgcgtaatagattaagtctgaagcctagagacaaagggatactgggcggggaaacctgct
+ccttcacggtaacatggtaacaacagaatttggttaaggttaaaacgaaatatactcgga
+gtgaattactgttaggtttcgtcatcggatcaataagtagtttccgtgaagacactctta
+tattagatctccgaaattctgacccgtgcattaggcacttggtaggagattccatttgga
+acttgctcaatgtaagccagtaatgttccgaaataattcgctgcaggagcgaggagccgc
+tgaataaaggaccctcgcatcttgttaccttatggttgagggtcaccgttctctgcgtca
+attccagagctggagatacattcatcaacgttacctacgcacagaataaaaagatcgagc
+gctaactcgttttcctaaacacaacggatttagacaaattaccgaatgcgccggagagta
+gcatcttagtgtcatgcctatcatggcggctcagtacgaagagttcaggcatcgaatatt
+gtggtagcccgcactcaaagttccgccattaggtaagctatatattgtggtcagaacttg
+aggacaactatgagctactaaaaataaacaattttgtcatttgttctagatatgtggcat
+tcatcgaacgcttgtaccagaagttacattcgcagcgtgagcgaataaacccgaatgagc
+gtaacattatcaataacatatagttcagatagagaacgaggtattcgacagagaattacc
+caacattggttattaatctatgcagaataatttagataatgtcactacataatattagga
+ccaaaaggtgattccccagaagacaaaacaataaacaatctcacatattcgctagtacct
+atgtatgggtatgatcttctgattggacggggataatttccaggtatattaaaacttatt
+accataatctagacctaagagaggttatataagtaaagagctgtgttccgatagaaaaac
+ccgaccttaaagacttgcgaagtaaattttgctttaacaaaaaaacctacgtaagggaat
+attctgtataaactgaaaagtcaggtgtaactacatgagtcatgtcttcgattaattaca
+atgcgatctcgttattctgatcaactaatatcataaactgccactacatcttgtacaatc
+attcgcaacaatacttttatgtgctaaggtcacgtgcttcctctgctatgctgatttaat
+cagattcataaaggaatacgaataactctggatccattaccacgcaagggatttatttac
+ggctgattactttttggctgttgacagaactgccatgaaagtaagatgtcgcatcttgca
+taaataatagcacctaatatagccgacaaagtgattccgataacagattttaagttgtcc
+agccttgagactccatgaagaccgcttgggagcttccccgtgattagaagaatctaaatc
+ccaagtggatggggggagtttaaatctcagcaccaacaaatagtacttcctctcagagcg
+cgtcatggtcgaaggagcctatcctgatagaggtttgaaagcgcacgcgcatttaactgt
+catattaaattggaatctcgtaagtgtcggcagtacgacaaattttaactgatgtcggta
+tacggagaagaaggaagcacgcattgaagcagctacgcagaactgagaagatgacactct
+aagatacaattaatacaaaaacgttttaagcccaatctatcaacagatgtaagatgtcta
+atacacaagaataaaaccttcatgtcccgatgtataataacagctttatttctgctggtc
+gaggtgaagtagtggaaattactccatcttgctgcgcgtctttatagtgttggctactct
+gtaaccgacgcgtccatccctctctcctagtgatccgtatatccaattagaggataacca
+acatctgcgttaccgacgaatttaaatttttcgactatttaattccgttcaaacccgtat
+tcgtagtaagtgtttcatagatttatgaccgacatcgtgtacgagttgcagtgcatatgt
+agataccactaattgctgatctaggatacatgctttataaacatgcttacttggctattt
+tatttactgtcatgtgggggtttttattttcaacaagtatgtgctaccattggataatct
+ggcttcaaattgaagatatgcgttccaaacttgtctactgtttgctaagtaggagttgtc
+ccattagaactacgcagcacgtggtttgtgatcgaaaagaataattggcaaatacgaggc
+tagccttcaaatttaatgcagattactcctcagaaacacacgtaagcgacgaacgtgatg
+tttactacacaatgcgtatcatagaaattcgtgataatttttgttccaacctttgaatct
+agactgagtggaaaaagatttcaccgggataccgtttatgctggttttaaaaactcgtcg
+aatcatcttataactgcattcaaatggatttctcaatcatctgtacgtcaactgttttaa
+caataacgtcagaataaaccggcacaatgagacggcggtctttcactacaccacaccctt
+aggattataagtgacgtgtggattcgaattctaaggtgacgggatctacaagcctcagct
+acattaggtctgaagatctttcgtatagccgcgtatgttactgtttggatatgggttatg
+ctaatcaacagttgacagcgagtgaaacggccttgcgacctgaaatctttacggttacct
+tttgattcaagacaggatcgacgatggaccacgtgaaatgaattcaaaactgtaacatcg
+cttgtgcctcagcgaccgagtaacgacaagttcacatcctctatgcaactatcattgtgg
+tcattaaggtattcaagattaactaagagtcgaccatatattctagagttttacaattag
+gaaccgttagtctagactaggagcgtgcaacatcgcaggaggtgtggactgtcttgaccc
+aagttgcctgacacatagtgtcttttgcttcatgtccttagcaatgcgatacctcaatcg
+tagttttatcgggataaataacatggtgtttaaccctattaatggtttctattaatctaa
+attgtaaggcagcccttgggtcgaaagcacattaggccacatacacagtatgaaattgtt
+cgagtgtccagaccataattgactaccatggtacacggtgttgctattatgactcccgca
+aaactcttgacagagggaattttggtacattgatgtaatcgatgatttaacagtaggaac
+tagacgtcatccgttagactgagttccgacatgctcaaattgtcaggatttttatccaat
+aactaatggctctcacatgtaaataaaatcacattaacgtcacttagtgatggattcgct
+aaacagatagactatcattcatgaactggcactgtttcgattatatttgcaacatcgaac
+atacttaaagttaaatacgacatcattcaattaaaaaaattcagtacacctctaatgagt
+atcccgctttggaggaaagagtagcactttaaatggacaatttaggccggactttcctgt
+aaatggatgaagtcattgtacagcttgaataaatcgttagggttagtccttacatccacc
+atatgttaatgaataaagcctgagggaccttagagctaacttgtccaacacgttgctcat
+ttacttaataaggttgaaatgtatcagtaagtgacagcgagtgtagattttgaccattta
+actgaccttcacagttttgtcttcagacgtcacttacaccataatgatgacagagcttgt
+agatgcacacactcattcctagtgtaaatcaagtagtagctagattattataaagagata
+ttttctggcgtcgaacgtaacacagagagagtataaggggcatgataatggcttatcaat
+atgtgtaagaaaaagtttttaatatcatctaactcggtggaatgcacacttatggccaac
+tgaccttgggacgagttaagataccataagaggttgcctgtaagttaagataacaaaggg
+atattccatctttgtgtgctaagaacctatttatatttgcagccataaaaacctctgtgc
+tatgcagccaccagagttatttatacaaagaaagagaccatttagatacgttaattctgc
+ttgcgatttattaaacagacatttcacgtccaaccactacaaaagccctatcgcaagacg
+atcattgtattatagcctatgcaacgtagctaagcggccgaggaatcataaaatatgaat
+tgttacattgtttactacatatgatcacaatctttgtaaaaggttcgttcgtgatactac
+catgtacctaactaacctgagatatatgcaatgacttatggggtcagcgcgcaacatccg
+caaagcatagtaatacaaggtaggaaaacttctggatttcccaaggttataatgctctat
+actgaccaagagatccgttacgactcgcaatgaatactctaagggcactcacaaagaaaa
+ccactaattgataaatttcaatgataatatcctgaattgcatcgtgtatgagttacgaga
+agtcgcatttaatgaattagtcatagaaatgtcatagcaggaacataattactatatttt
+aacgatttaatcgtagttggagtcctttcccaaattatgtcatcagttccgatttagatg
+ttttcgggcccttcttagtaaagaagttaatatccaagactagctcctcacccacgcatg
+cacatattcgcgagaagtctgatagaatattcgacagaaatgcgactctagctcacactc
+gttaactgatcaggtacttatagacaagtacgttatcagatatcgcttcggggcattgtt
+gcgctacctttgtgcatagcagttttgaaaaattgttcaagacctgaacgggaaaatgat
+attatttttttaggaggaataatacagtaccatgtaaatactcaaccaccttacgtactt
+cttacgccgaacatatatggcacgtgttattcggctaacaaaactgttgtgccttttcta
+taaggataagcagattcgttttaaacatatgacctgtaaactgggatctacaaaagaggt
+acttaaaataaattgcgcaacggtttagatctgcggatctttggttaaagagcaccatta
+gatgtgccatacttcctatcgcctgagcgagaatttagtctgaggaaccactcttgggat
+ttaaaacaattcggttaggacacctactcggcggatgaagcaatacgataacattaaaag
+tcgttcagtctaattttggtcgtagtacgatgagctgatggccaattgtatttttattaa
+cagcactgaaacaaaatggagactttagactaatactaaagtctcaatgttcgtcgaacc
+ttaaatgctcggaatgaggggatcttcggaagtatagcgccgaagtgtatctcattatta
+taacaccagtgtacagacgacatctaattatggccagaaactgtcattgtgccattaaga
+ggattagtagatagtctggaccgtggaatagaattttgaccaaattgaccagtcctgctt
+gtagacagcgcgatctaaactgcacgagaatatacaagttggtggtgcttgtggctgagc
+acgctaagatgcgtttgtttttacgattctagtgcttcttaacgcaattcagtcttctag
+atccgctattccaacatcaatatctcaatttaaggtcaatatatataacaaaattagaca
+gagcagctgacacttacgaagcatcgtagaaccgatatagtcgaccttatgatgatatgg
+acgtgtccaagtccgcacttccgatgcatcttgacggtgaaccgaaatgaaatcttcatt
+agggcccccatgtgtcaaaccactcgagtcccgtctctgaagtcaagtattactgcgaaa
+aattcgtctactattagtttattatgaacttatgacgcttaaataaattaaacagtaagc
+ctgggaaaatgttaaggcaggaatctttgtaacagttcataatgttgctaaagattatca
+gaccccgtgaagacttcgggctttgggcttcgtaccgtagcataatacatctatatagtt
+agaggcttgcgtgttgttgtgctattccacatatagcagctctgggcgactcttcaatga
+aaatgaaaaatggtaacctggcgacctacttgttaagtcagtttaattcaaggggattaa
+gtaccaagggtcgagtttctctgtatttattatactgtaggcaagaagcttttttggcga
+gatttaagacttaagcctatggtaaaaatttgatagtgagcgactatagtaagagatttg
+ggtggttagtaattaaaattctcctatgctaaatcaggcgtacaatctgagggtgcacat
+ttctcgacgcgtgaaccttcaccgaaagcgtgtggattatacaaatttcaaacatattgg
+cggggcacttatccataatagatttctgtttgtacgccaaactctgcctcacccctccat
+aaattgtattggctagaggttaaattctccgtaaatagagacacatatagttttatacaa
+ttgtttgaatcaaagcacgagaaacttttaaccgtacattgacaaatgtcttcggatggg
+gcagagcatctcttcgtgacccaaatcaatcgctgagcaataagcaagaaaacacagatt
+atacaaagagatctggatgaagatattcgtgcaatcactatcgttatgttagagagttcc
+atgcatgaggactcgttttttgaccaggagaattaagccaagaaataactgacgtatttc
+caaatgaattctacgtgtttttcctgtcacctttagccagtgttaaagatgactatggag
+tttcgaataggttattctatagacattataacgagtggaacacccataccttcacagtgc
+taaaggtaggaacgggtacgtcaggtagttcaagggattttaggttcttaatccaacgaa
+gaaataacgcatcacccgtcattctattgttttcgtcgggattacttagtaggcagggta
+ttctaacctacctgagttacaaatctttaaaaaactggccatgaggtcatggtgataaaa
+tctgaatcgcctaaattcgcgtccctaaggaaatatactagaatccgtctcagaaagtgc
+aaaggttgacttcttcccctaacacagaattctcagttttatagctatctagtggcattc
+ctttttataaaactttacgtttgtaagggtccaactttacaaaagctcggatgtgtatgt
+gtaatcttccgccgtgtaagacttggaacccatgtatattgacggcatggcgtggctaag
+caggtattgatcttcagtgtaaagcaaggtatgttctaatctaacaatgtaaagccgggg
+attagccgccaaaggggtctaatgacatagagatgctctgaaatcgtaccaactataaaa
+gcacgggatttgaaatatagcgacagatcttccgtattctgttagttgacatctgtgctg
+tctttaccgattgtgatttggctttagcagtcatttagtttcgttactcattgctcgtgc
+gatagttccaccgaatatggcacattcgttctttttttccattttactgcaaaccttttc
+aaaagctgatcgataccactgatgatggcattgattagtcgattggcaactatgtcctgc
+ttatatctccaattgcattgaatatagtaaaaaataaaggctcgccttcccaatgggcta
+cggagtacacgaaaaaatcgcaactcgtttaaccaagcgccgtacctaacatataagtga
+ttgagacaaatagttctccagacgtattgagatatatgtctcctataggcaagcgtttct
+aattgctgaccagaaattagaattaggttgttaatactatattcgaccattttattccac
+gaatgtgctattctactggtattgctccgtatgcgatatataaccaacacggaaagtcgt
+cgattgcaaagtggctccgtagaatcatttctggtcatttaccgggagcgcgcttgaaca
+atggatgcggtatctgccatattgttattgttaaaaagacttccgcttactatcgcttcg
+atcatcggaaaaatattaatgaggattgggtcgtataagaaaatcatcttttcagttcgc
+agatttttgccaatttaaccggttatttcgtcagacttggtagtgtagttacaagcatca
+cgattatatcagctacagaattaaactgtcctgactcgacggggcagtgtgtgagtattg
+cgctatatattcaaggtaacaggaggcatataggtcatagtacaaggataatgaggtttg
+ctaactttaaaaattattgatttaacggttgattgaaaatctctgcaagatgacgctaga
+acacctgatgttcaagtttgccgataataacatataagatgaattactgtctttagaccc
+tcatgttaatccgctaacttagggcggaaacaatgttaggctatgcggagtaagtactat
+attatgataccacatagaatttaacattcatatgatgtctaatacccgttcccaaccttg
+caaccgtcccgattaattaagcaattacggtcatcaatgggccaatcctgtctcaaaaat
+tatcatattcaaggttcagctattttggcaatgggtgagtaccgttcttagtgatttacg
+aacccataatctaggcgacttaatatacaagatttagagttacgttttccgggtagtaca
+tattaacgaccatggatcgggtgaggtgttgtattagttatctgatcttgtcagtagctc
+ccaatgtcccagaatattatgtttctactagagtgttcgtatactggaatttaaatatta
+tgtaagactagacaaattttatggatacattaggccatcgtagaatatgatatagttgta
+acgtccctctatagattttcggagggcaggtatattgcttaataaagatgttcggaaatc
+agcggaaaggatttgtaattaactgatgcgcagcgcttaaataagtttagactattaagc
+tatatgttcgacagcatgtagttttttttaccagaaagtgttatactgatgacccatgga
+ggtagctcctcatgataaaaatattgttacttaagcattactattatagtgttcaaacta
+gtaccgttgcatactttaagaatcagacatggcgtttcttatgcagacacacttttttag
+ctgttgacgcccacctcacatccatagtaggtcaatcgcataagaacaatattctggact
+gttttattacccagaagaaagttttttctttccggttcgttaagacaataaagatcattt
+cattcgttctcttaacgatgaactaaagtacttaaagtatccgcctcttgtttcgactag
+cgcatagtgtaataattaaggcaagataagaagaacaggaacgcgcacgtcggagataac
+tctaatagtctctttattccgtttaatatagcccgtaattgcaccatgcgctacagtaac
+ggccgccttcgcaaacctatttatgtaattccaagtttaggtatgcaatggttggggcaa
+tgtgaggggttttatcaagactttcgttgcttcgcggggggcgcaaagcagactttacag
+tagttaaccgaaaaccgcagggagtcgctctaagtgttaccaacccctcactactacgcg
+aaggtactcgattattccttgaatgggctgaaacatcgtgattagcgtcttatgattcag
+gctgatagaagaaaacttattttctatattccacgtatacaatcacactcgtaactaaat
+agttcccagcgttgtaatgtcgctataataaataaaatacaaagaaaattcgtctgggtg
+cataagtacagttagtcgtctgtcacataaataatccgcagtcgatctcattacaggtat
+tgttgttggtcaaccttcgcaaggtggtccaagtagcattgttgaacagtaaaactaccg
+tcacacaaggaatatcataatagatgccatacacggttttacttgatatgtttacagtcc
+ttgagttgcaatcgtagtattgtttcatccggggtgtgtacgaagtaatttagacaaggt
+gtgtagcggtcactaggtaaaatgacttaggatggatgagcatttaggtattctatgata
+acactaaccatcatgtttctaaaatcctcaggaaatttgtattattttaccaacctgtat
+ttatagaaagtgcttttgacttaaagaagccgaagtgttcaaattaaggagtacctgatt
+gaaagaatggggaattgtaatctgtaactcaattacaaataagccgttctaaggattaag
+gctttgtgtctaagcaactcacgtgaattcgaaattcatactcgattaacgactttaata
+ctcttctgcgtatctacagactcatttaaattacggaatatgttttcgtttttggtttcc
+agctcgcacgtacgcgtttacaaataaggacacctggtacaattggctggagtacaatgt
+tggtttttatttgctgattatcccgatccctgtgggcgttggcataaccgggttttcttc
+aagactactttcgtgttgcttatatacctggtaatatcggtgagtagcttagggcttaat
+cacaatactaacaagttctctatggattggacagggcggcatccgttgactgaacgatct
+attaatccattccctgcactggataaacaagacccatttaaattgaccatagagatgtta
+gcgtcatatttctgttcgtgatagggtacatatattataaacggattatgagcagtggtt
+ttctagaaaagcattcatagttaggagtgtatcagatcataccactgaaccatagagcac
+aattctctactggctatacttcattcctttttgtccgggtggggacgaaatttaaaggtt
+ctaacctagaacgcagagcgaattgatcaaggcgctggccaagtgaacggttctaaatgt
+tcttaatgagaattgcgtattttgactattgacagggcatcgtaaaccgctactcgactt
+ggtatctgtaatctgtatgtagatagagtacgggcctataattcaaattcagccaccgaa
+gattcacaatcttcagacgtttgaaggaaagaggtttactggtatgtggtgtcaagcccc
+acccattctctgttatatccgagcattaatgtagtttcactgtactacggtcacgccgta
+gagtcggcagggcaaatccaaaacaatttaggctgagaagtggcactataatagtttagc
+ctaagtcccttcgctaataactcaacaaagatgacgcaaaagtcggcgaatagattgcgt
+tcgcgtaagggtatcttgaatactgatagctctcatggtaccaagaactttcataacctc
+tttatttaccaaacctgttctactagcgttagtgttttagtctgtagccgacacaaaaac
+cgagaatggccggcgtaaccggcgcctgcaagctaacatgggatcaaaactattggctta
+acgtttaatcgaatgagactagcactgtattactctttcgtttcggcagcggatcaataa
+ggaggtgacggcatcactctcttatagtagatatcacttattctcacaacggaagtagga
+tcttccgtcctcattaaatttgcaactggctcaatgtaacactgtaatgttaacaaagta
+tgagctgaaggtcagagcagacgatgtagtaaggtccctcgaagctgcttacagtatcct
+tgaggctcaacgggctatgcggaaattccagacctcgagttacattatgaaacgtgtcat
+tccatctcattaaatagttcgtgccctatcgccttgtaatataaacaaccgtttttgtct
+attttcccaaggagaaggagagtagcagcttagtggcttgcctatatggccccctaagta
+cgtactcggcacgcttagaagattgggctaccccgcactatatgttcccaaagtaggtaa
+cctagatagtgtcgtatgaaattcaggtcatcgatgagagtataaaaatatacaattttg
+gcaggggttatacattgcgggcatgaagagtaacattggacatgaacggacattcgaacc
+ctgtgagtttaataccctatctccggatcattataaagtaaatatacgtcacttactcta
+cgtgcgtttagacagtctttgaaactaaattggttatttttctttcatctagatttgtct
+gtatctaactaaattatagttccacataaagctgattcaactgaagacataaatataaac
+tttctaacatagtagcgaggaaagagctatgcctagcatcggatcatgcgtccgcgagta
+gttcctggtagagttaaaagtttttccagaatctagaccgaacacagggtagtgaacgaa
+agtgcgcggtgaacatacataataccgaacgtaaacaattccgttcgtattgttgctgta
+tctatatttcctacgtaaggctatttgatctataatatgaaaagtcacgtcgaaataaat
+caggaagcgcttcgagtatgtacattcagatctccttagtatcatcaaattatagatttt
+acggccacgaattattggtctagatgtcccaaaaataatttgatgtcagtagcgatcgtg
+cttcctcggagttgaggttggaagaagagtcattatgctataccaagaactctccatcca
+gtacctagaaaggcaggtatgtaccgctcattaattttgcgatcttgacagatctgcatg
+caaagtaacttgtaccagatggcttttataatagaaactaagtttcccgaataacggtgt
+acgataacagatttttaggtgtacagacgtctgactcaatgaacacacattgggacctgc
+cccgggaggagtagtagataattaccttctccagcgcgggtcttttaatatcacaacata
+aaaatactaattaatatcacacaccctcatcctcgatggagcctagcatcatacacgttt
+gatagacaacgccaattttactgtaatatgatattcgaatctagtatgtggacgctgtac
+cacattgtttaaaggagctccctttaccgacatgaacgaagcaagctttgtacaagatac
+gaagaactcagtactggtaactataagagacaatttatacataaaagtgttaagaccatt
+atataaaaagaggtatgaggtctttgtaactacaataatacattcatcgaacgatggaga
+ataacagagttatttctgctgctcgagctctagttctgctaatttctcaatcttgatgcc
+actcgtttgagtcttccattcgctcttaacgacgcgtacatccctctctcctactcttac
+ctatatcctattactggttaacctacatctccgggaaagacgtaggtaaagtggtccacg
+attgtattcacttataacacctagtagtactatgtgttgctgagagtgaggacacactta
+ctctacgagttcaagtccatatggacattacactttttcagcatctaggtgtcatgatgt
+attaacagccgttaggggctatttgattttatcgattgtcggcgtgtgtattttcaacaa
+ctaggtgctacaattcgtgaataggcatgaaaattcaagattgcagttcctatcttgtat
+aatctttcctttggacgagttgtaccatttcaactaacctgcaagtggggggtcatccat
+atgaagatttgccaaatacctggagaccctgaaaagtttatccagattaataataacaaa
+caaacctaagcgaagaacgtcagctttaataaactatcactatcatagaaattcctgtta
+attgttcttccaaacgttgaatagactatcacgggtaatagattgaacacggagaacgtt
+tatccggcttgtaaaatatcgtcgaatctgctgataactcaattatattcgatggagaat
+tcatatctaccgcttagcttttaaaaattaagtcagattattccgccacaatgagaaggc
+gcgagtgcactaatcaaatcacttaggattattacggacgtctgcattacaatgctttgg
+ggtagggttatacaagcatatgattctttaggtctcttgatcgggcgtttaccaccgtag
+cttaatgttggcatatccgtgatcctaatattctgttgtcagcgtgtgtataggaatgca
+caacgcaaatctttaagctgacctgttcatgaaagacaggagacacgaggcaccacctca
+attctatgcaaaactctaacatagcgtggcactatgagtacgtgtaacgacaaggtctca
+tactcgatcctaagataattctcgtctggaaggttttaatctttaactaagagtagaact
+tagtttattgacttttacaattaggatacggttcgcgactctaccacagggcatcatacc
+tggagctctgctatctcgtgaccaaagtggcagcacacatagggtcgggtcctgcatcta
+ctgagcaatccctttaagcattcctagtttgagagccatttagatattgctgtttaaacc
+gattaatggtttctattattataaagtgtaacgctcccattcgggacattgaaaattagc
+aataagacaatgtatgatattcggcgagtctcaacaacattatggtctaccatgggacaa
+ggggttgatatgatgaatccacaaaaaatagtcaaacacccatggttcgttaagtgaggg
+tatccaggtgttataaggacgatctagaagtattcaggtacacggtgttcagacatgctc
+taattgtcaggttgtttataatttaacgtatcgctctctattctaaataatataaaatta
+accgctcgtagggatgctttccagtaaaagatacactatcattaaggttatgcaaatgtg
+gcgatttgatttgaatcttagtacattcttaaacttaaatacgtattatttaaagtaaat
+atattatctaaaccgcttttgtctatccacatttcgtcgaatcacgacctcgttaatgcg
+acaatttacgaccctctttcatctaaagcgatcatctatttcttctgattgatgtaatac
+tgacccttactccgtacatacaaatgatggtaagcaagaatgactgacgctcctgtcacc
+tttcgtggcaatcaactggcgctggtactgaagtagcttgaaagggatatggatgtgtat
+gccaggcttcattttgacaatttttctgtcctgctcagtgttgtctgaagtcgtatcgta
+cacaataatgatgactctcattgtagatccaatcacgctttcctacgctaatgaaagttc
+tagatagtgtaggtgttagacagaggttagcgcctacatccttacacacacagtgttgaa
+cggcaagcataatcgagtatcaatagctgtatgtatttgtttggaatatcatatttctcc
+cgcctttgaacaatgatgccaaaatgtcctgccctagagttatgataaaataactgctgc
+cctgtaacttaagtttacaaaccgatattcaatcgttgtgtcctatgaaaatatttatat
+ttgcaccaagaaaatcatctgtgcgatgaacaaaacacagtgatttataaatacaaagag
+tacatttagttaccggattgcggcttgacatttattttacagaattttatcggcaaaaca
+cttcatatgaactatcgcttcacgataagtctatgatagactagcattcgtagagaacag
+gaagagcaatcattatatatgaagtgttacagtgggtactacatatgagatcattaggtc
+tatatccggccttcctcataagaccttggaaatatcttacatcagagatatcaaaggaag
+tatgggcgaacccagaaaaagccccaaagaatagtaattcatcggacgtaatagtctggt
+tttaactaggggttattgatatttaagctaaaagagttccctgaacactcgaaatgtata
+atctatcccaactaaaaaagtatacctctaattcagaaatgtcattgagattagactgat
+gtcaatacgctaggaggtaagacaagtagaagtttttgatttaggaattgaaatgtaata
+cctccatcttaagttctatattttaaagttttatgcggacttcgagtaagtgcacaaatg
+atggcataagtgcccagttacatgtttgcggccccgtatgagtaatgatctgtttatcaa
+tctctagctactatcccacgaatgcactgatgccagtcatggcgcttacattagtcgaca
+gaaatccgacgatacctatcacgcgtgaactgttctggttcttattcaattcgaagtgat
+ctcagatacattacggccatgcttgcccttcatgtctgctgagcagttttgttataggct
+gaatctcctctaagcgaaattgataggatttttggtggtcgatttagtctgtacctgctt
+attaagattcaaaatgacctacttcttacgccgaaatgatagggatcggctgaggaggat
+aaatatacgctggtgcctggtatttatccagaacaagttgcctgtgtatcagatgaactc
+taatctccgagataaaaaacaggtacgtaaaataaaggccgcaaagggttacatctcagg
+atcgtggcgtatagtccaccattagttctgacttacttaatatagactgaccgagattgt
+agtatgtggatccaagcttgccatgtaaaacatgtcggttagcaaaacgtataggagcat
+gatcaaagaagagttaattaatagtactgcactataattgtcggcggagtaccatgagct
+gttgcccaattcgatgtttattaacagcacgcataaaaaatccagacttttcaattagaa
+ttaactataaatggtccgcgaaccttaaatgatcggaaggacgggatctgccgttgtata
+gaccccaactctatctaatttttataacacctctgtaatcaacaaatcttattatgccat
+cattatgtcattcgccaagtaagtccagttcgagattctctggaccgtgcaatagtattg
+tcaaattatggtaatggaatccttcttctaacacccttagaaaagccacgagaattgaca
+agttgggcgtgcttgtccaggagcaacataagtgccgtttctttttacgatgatagggat
+tcttaaagcttttctctattctagatcccagttgccatcatcaatatctcaattgatgct
+cattatatagttcttatttagtatgtccagatgtcactgaagatcctgcctagaaccgat
+attctcgacaggatcatcagttcgacggggcaaacgcacctatgcacatccatcttgacc
+gtgaaacgaaaggaaagagtcagtaccgacccaatgtggaaaaaaactcctgtccacgat
+atgtaggcaagttttactgcctttaattagtagtcgattagtgtagtttgatattatcta
+ccttatagaatgtaaacagtaacccggccttaatggtttggcaggattctttgtaaaagt
+taataatgttcataaactttatcagaaaacctgaagtagtccgcctttcgcctgcgtaac
+gttgcagattaattcgttttacggagtggcttgcgtcttgttgtccgagtacacatattg
+ctcctctcccccactcttctaggaaaatcaattatgctaacctgcagaccttcttcttta
+ctatctttaatgcatgcccagtatgttcatagggtagacttgctatctattttgtataat
+ctacgaatgatgcttggggcgcgacttttaacaattaagccgttgggtataatttgagag
+ggtgccacgatagtaagagatttccggcgtgagtaaggaaaatgataataggattaagca
+ggcgtaatagctcaccctcctcagttctccaaccctgaaccggctaagtatgactgtgca
+gtattaattttgaatacatattgcagcccctaggatacattatagatgtctctttcttac
+ccaaactcgcccgcaccaagaaagaatgtggattcgattgaggttaaattagccggaatt
+acagacacagattcttgtttacaattgtgggaagaaaaccacctcaaacgttgaaaccta
+cattcacaaatggattacgttggggatgagaatcgattccggtcaaaaatcatgcccgga
+gcaataaccaagaattcacagaggattaatacacttctccatgaagataggactgcttgc
+actatccttatctttgtgtcttccttcaagcaccaatcgtttggggacaaccacaattat
+gccaagaaataacggaaggtgttccaaatctatgagtccgcggtttcatcgcaacgtttc
+actgtgggtatcatgactttggactttagatttgggtattctagagactgtagaaagact
+gcaacaacaagacattcacagggcgaaacctaggaaaggggaccgcacgttgtgctaggg
+atgtttccttaggaatccatacatgtaagaaagaatcaaccgtaattatagtgttttcgg
+ccccttgaattacgtgcatgcctttgctaaaagacctctgggaaatagattgaatattct
+ggacagcagcgaatcctgattatatctcaagcgaatatatgacccgcaagaaggatttat
+actagaataagtctaagaaagggcattgggtcacttcttccactaacacacttttatcag
+ttttataccttgagagtcccatgcatttttatatatatttaactttcgttgcgtaaaact
+ttaaatatgatccgtgctctatctctaatctgaacaacggtatcacgtcgaacaaatcta
+gtggctacgaatcgcgtcgctaagaacggtttcttctgctggcgttagctacgtatcttc
+tatgctaaaaatgtatagccccgcattagcagcaaaaccgggagaatcaaatacacatcc
+gatgaaatcgtaacaaagataaaacaacgcgatttctatgtttgccaaagtgattaagtt
+gtatcgtaggggtcagcgctgatgtcttttcagtttgggttttggatttaccagtctttt
+agtttcggtactatttgatcgggacattcgtccaaacatgatggctcattcgttcttttt
+ttcaattttaatcaaaaccttgtatttacctgatacattaaactgagcatcgcatggagg
+tggagattcccatatatgtaatcatttgatatcctattccattctttttagttataaata
+aacgctccactgcacaatgggagtaggacttcaccaataattagcatctactgtaaacaa
+gcgccgtaacgaaatgattactgattgagaaaaataggtctcaacaacttttgacagata
+tgtatccgatacccaagcgttgctaattgcgcaaaagtaagtagaattacggtcgtatta
+cttgttgccaaatggttattactccaatgggctattctaatccgatggatacgtaggaga
+gagtgtacctacaccgaaactcgtagtgggcttagtggctacgtagaagctgttcgggtc
+agttacagcgtgcgaccttgtaaaatcgatcacggtgatgaattattgttattgtttaaa
+agaagtcccctgaatagcccttagataatacgaaaatttgttatgtccagtcgctcgtat
+atcaaaagattcggttaagttcgcagagttttgccaagtttacaggtgatttactaacac
+ttgggagggtacgtacaaccatcacctggttagcagagaatgaattatacggtcatgtcg
+cgaagggcaagtgtgtgagtattgaccgagttattaaacgtaaatgcaggcatttacgtc
+ataggacatcgagtttgtcctttgcgaaatgttaaatttatggttttttccgttgagtga
+taatagctgcaacatgaagatagtaaaactgaggttaaactttcaccatattaaattata
+tgttcaattacgcgatgtacaaactaatgttaatcagatttaggagcgcgcttaatatgg
+gtccctatcccgactttgtacgagattttgataaaaaatagtattgtaaattcatttgat
+ggcgtagaaccgggcaaaaccttgaaaaaggacacatttaggatgctatttccctaagaa
+agcggaaaatcctggctcaatatttataatagtaatggttaagattgtggcccaatcgct
+gagtacccgtcttacgctttttccaacacataatcgacgagaatgtatttaaatgtttga
+gacttacgttttccgcgtacttattattaaagtcattggagagggtgtcgtctgggtgta
+gttttctcatctgctcaggagctaaaaatgtaaatctattggttgtttctaattctgtcg
+tccgtgtaggctatttaatttttatggtacacttgaatatgtttagccataatgtagcca
+atactacaatatcagatacttgtatacgacctatagacttttgccgaccgctcgtagagt
+gatttagaaagatgttcggatagcacagcaatcgtttgcgaatgtaagcatgcgaagcga
+gtatttaactgttgactattttgctatatgttactctgaatgttgttttttttaccagaa
+tgtgttataatgatcaaccatgcacgttcctactaatcatataaattttgttacgtaagc
+ttttctatgatagtggtctaaagactacccttgcatactttaagattaagacatgcactt
+taggaggaactcacacgttttgagctgttctagcccacctataagccattcgtccgcaat
+cccataactacaatagtcggcaatcttttattacccagaactaacgtttttatttcccgg
+tacgtatcacattaatcttaatttaatgcgtgagagtaacgatgaacgaaagttatttat
+gtttaagccgcttcttgagaatacagattactgttagaatgaaggcatcataactagaac
+accaacgcgcacctcgcacattactctaatagtagctttattcagtttaatatagacagt
+atttgaaccaggcgctaatgttaaggcccccttcgaaaaccttgttatgttattccatgt
+ggtcggaggatttgcggggcgatagcgctgggcggggatcaacaatttcgttcatgcgag
+cgcccccataaccagtaggtacagttcggaaaagaaaaccccacgcactcgctagaagtg
+ttacaatcacatcacttcgtaccgaagggactactgtattccgtcttggggatgtaacag
+actgattacagtcttatgatgaagcctcattcatctaaaattagttgatttattccacgg
+atactatcacactcctatagaaagagttaccaccgtgggaagctagatataataaataaa
+agacatacaatattagtatggctcatgatctacacttactcggatctctctttttttata
+accagtagatcgcattacacgtattgttgttccgcatcaggccctaggggctcaaacttc
+catggtggataactaaaacgtccgtcactaaacgaagatattaatagatgaaatacacgg
+gtttacttgatttctgttcagtcattcacgggaaatcctaggagtctttcataacggcgg
+tcttagtaggaatgtagtcaagctctgtagaggtctcgacggaattggtatttcctggca
+tcacaatttacctagtattggagatcacttaaaataatgttgagataataatcaggatat
+ttctagtatgtgacaaacctctatttagtgattgtgattttcaattaaacaagacgtagg
+ggtcaaattaacgactacatgttggaaagaaggccgaattgtaatatctaactcatgtac
+taagaagaagtgctttcgtttaaggctttctgtctaacattctaacgtcaattcctatgt
+aatactactgtaaccaagttattactcggctgcgtagataaagtctcatgtaaatgacgg
+tttatctgttacttttgggtttcaacctagctaggacgccggtactaattacgacacctg
+cgtatagtgcagggtgttcaatgtgcctttttatgtccggattataaccatccctctccc
+acttggaatatcaccgggttcttaatgacttagttcgtcttccttattttccgggtaaga
+tcgctgtggaccggacccattttgatctagtctaaaaaggtatatagcgtttcgtctggc
+ccgcttacgttcactgaaacttagattaatcaatgcactgcactggattaacaagaacat
+gttatagtgtactgacacatgttagactaagaggtctgttcgggttagccgacttatatg
+tttaaccgattttgacaactgggttgagagataacaatgaagagtgaggactgtagaaga
+tcttaaaactgtaccatagtgctcaattcgctaatggcttgaattatttaattgttctaa
+ccctggcgtcgaatttttttggttcgaaaatacttagcacagcgtattgttcaacgagat
+gcacaactgtaccgttagaaagcggcttaatgacaaggcagtattgtgactattgacagg
+gaatcctaaaaagctactcgaattggtatatggaagaggtatgtactgagaggtcgcgcc
+tattagtcaaattctgccaaagaagagtcaaaagcttaactagtttgatggtatgaggtt
+taatgctaggtggtctataccaccaaaaagtatatgggatatcccagaatttatcgactt
+tcaatcgtctaccgtcacgacgtacactaggcagccctaatccaaaacttttgaggatga
+gtactgccactattatactgtaccatttgtaacttacattttatatcttcaaagaggtag
+atattgtcggccattactgtcacttacactaagggtagcttgattactgatacctctcat
+ggtaaaaagtaatttaagaacctatttttttacataacctctgctactaccgttagtgtt
+ttagtcggttcaagtcacaaaatccctgtagcgcacccctataagcagaaggaaacctta
+atgcggataaaaacttttgccggaaccgttaatcctatgagaataccactcttggaatcg
+gtcctttaggctgaggatatagaacgaggggaacgcatcaatctaggttaggtgagagaa
+ctttgtatcaaaacgcaagtaccatatgccgtcctcagtaaattgccaaatgcagaaatc
+ttacactcttttcttaactaagtatgagagcaacctcactcctgaacagcttgttaccta
+acgagaagaggctttaagtagcctggagcctcaaccggatatccggatttgactctcatc
+cacttacatgatgattacggtcattacatctcatgattttctgagtgccctatagactgg
+gaatttaatctaccctgtttctatttgttaacaaggagaaccactggtcaagatgacgcg
+cttccatttatgccaccataagtaagttctcggaacccttacatgattggcctaccaacc
+tatatatgtgaccaatgtacggtacatagagtgtggcctatcatattcaggtcatcgagc
+tcagtatttaaagattatatggtcgctgggggtattcagtgcgcgatggaagactaacat
+tggaaatcaacggaattgacaacacgctcactttaataacctatctcaggataagtttaa
+tgtaattagacggaactttctctaactccgtgtactaactctttgaaaataatgtgggta
+tttttatttcatctagatttgtctgtatcgaaagaaagtattggtccaaataatcctcag
+taaaatcaagtcataaatataaaatttagatcttaggacagaggaaagtgctttcccgag
+cataggatctggcctacgccagtagttcatgcttgtgttaaaagttgttactgtttatag
+tccgtactcagggtagtgttcgatactcagcggggaactgacatattacactaaggaatc
+aaggcccttcgtatgggtcatgtttatatatttaattacttacgctatttgatcgagaat
+agctatagtaacgtcgtaagaatgcaggatgcgattcgagtttgtaaattcacagatact
+gtgtatcatattattatagatgttaaggcatagaattattggtattgatgtacaaaaaat
+tatgggtgggcagtaccgataggcattacgagcagtgcagcttggaagaactggatgtat
+cctataactagtaagagccttaaaggtactacatacccagggatgttaccatcattaatt
+tggccatcttcaatcttcgcaatgcatactttcttctacaagatgccttttagaagacaa
+aataagtgtcaacaataacgctgtaacttaactctgttgtacgtggaatcaagtctcact
+aaagcaactaacattccgacatgcaaacgcaggactactagattattaaattcgccagcc
+cgcctcgtttaatataacatcataaaaattctaagtaatatctcacacactaatccgcca
+tcgtccatagcatcagtcacctgtcttacacaaacacatgtttaatcgatgttgttatgc
+caagctagtttcgcgaccatgtaactaattgtggaaagctgctaccttgaacgacatcaa
+ccatcctacctttgtacaacagaccaacatctctgtactggtaaatagatctgaaaagtt
+ataaatataactgttttcacattgatagaaaaacagctatgtgctatttgtatatactat
+aataaattaagcgaaacatggagattaaaacagtgttttctcatcctccacctcttgttc
+tgctaatttataattcttgatgccactcgtgtgagtcgtccattcgatcgtaaagaaccc
+gacataaatagatacgacgctgaacgagatcctatttctcctgaaaattattagcacggt
+aactcctagggatagtggtactagttggtatgaacgtataaaaacttgtactactttctc
+gggatgtgagggagcaaactattactcgaccagtgcaacgcattatcgacagtaaaagtt
+ttcagctgatacctgtctggatggattatatgcaggtaggcgagagtggattgtagcgat
+gctcggcgggggtattttaaaaatctaggtgataaaagtcctgtttagccaggaaaagtc
+atcattgcactgcatatcgtcgattagctgtcatttcgtccactggtaccagttcaacgt
+acatcaaagtccgggcgcatccatatcaagttttgcaatagtactccagaccatgaaatg
+gttatccagattaataataacttaatatactttcactacatactcagcgggtattaaatt
+tcactttatgtcaaaggactcttatgtggtcttcaaaaaggtctagagtctatcacgcct
+aattgtgtgaaaaccgagtaacttgatcagccttgtaaaatatagtagaatatgatgtta
+aatcatttatattccagggagattgaatagcttacgattagctggtataatttaactcac
+atgattaagcaaatatctgtaggaccgagggaaagaataaaataaagtaccatgagttcg
+gaacgctgcattacatggcgttgggctagcctgatacaagaagatgagtatggagctctc
+ttcatcgggacgtgacaaccctagcgtaatcttggcagatcccggagcagatgattatcg
+tctaacactgtctttaccaatgcacaacgcatagatttaacctgaactgttctggattca
+ctcctgactacagcctacaactcatttctatgcataactcttaaagacagtcgcaatatc
+agtacctctatacacatcggatcagactagatcataagataagtctcctctggatccttg
+tattctgttaagtacactacaaatttgtttagtgtctgggacaattacgataagggtcgc
+gactagaccacagggcatatgacctccaccgctcctagcgagtctccaatctgcaagcac
+tcatacgctaggggcatgaatcgactgtcaatgcactgtaagatttacgagggtgagacc
+catttagatatgcctcgtttaaccgttttaggcttgataggatgagtttgtcgatccatc
+aaattcccgacattcatattgtccaataagtatatctagcttattcggactcgctaaact
+aaattatggtataaatgccgtcaaccggtgcatttgttcaatcaacaaattatagtcaat
+ctcccatggggccttatggcagcgtatacagctggtataacgaccatatacaactatgaa
+cggactagctgtgaactaagcagattattggatccttgtgtataattttaagtttcgatc
+tatatgctatagtatagaaaatgttccgatcgtacgcttcctttacagttaaacagtcta
+tatcatgaagcttatccaaagctggacatttgatggcaatcttacttaattatgaaactt
+aattacctattattgaaagtatttatatgatcgaataagatttgctctataaacaggtcg
+tccattcacgacctagtgattgcgtaaattgaccaacctaggtaatctaaagcctgcatc
+tatttcttatcattcatgttatactgacccgttctcagtacttaaaaatgatcgtaagca
+agaatcactcacgctcatgtcacatttagtcgaaataaactgccgatgggaaggaagttc
+cgtcattgcgatatcgatgtctatcccacgcgtcattttcaaattggttatctacggata
+actgtgcgatgaactactataggtcaaaattatcttcaatctcattctagatcatataaa
+gatgtccttcgcgattgatacgtctacagtgtgttggtgttacacagagggtagcgacta
+cttacttactaactctctcttgatccgcaagcataagccaggttaaagtgctctatcttt
+ttctgtggattataatagttataccgccttgcatctaggtgcccattaggtaatgcccta
+gtgttttcataaatttactcctgccatctaacgttactttaatttcccagattcaatagg
+tctctcatttgaaaattgttatatgtcaacaaagaatataatagctgagtggaacaatac
+actgtgagggagtaatacatactctaaattttctttacggtttgcgcctgcacagttttt
+tttatctatgtgatccgcataaaaagtaatttcaacgttccattcaagttaagtcttggt
+gacactagcattaggagagatcaccaagaccattatttatttagctagggtttaagtcgg
+ttagaaatatcagataatgaggtctttatccggccttacgcagtagaaattggaaatttc
+gtaaagcactgagttcaatggaagtatggccgaacccacataatgcacaaatcaagtcga
+tttcttccgtccttttagtctcctgggaactacgggttattcatagttaagctaaatcag
+ttaacggaactagacaaatgtataatagttcccaaatatatatctataaatcttatgcag
+ttagggaatgcagatttgaatcatggcaatacgctagctcggaactcaactacaagtgtt
+ggatgtacgaattcaaaggtattacatccttatgatgttcttttttggatacttttatga
+cgacttccacgaagtgaaattatgttcgaatatctgaacagttacttggttgagcccaag
+gatgacgaatgttctgtttataattctcgtcataatataaatacaagcatatgaggccag
+tcatggagctttcatttggactaacatttccgtagagtcatatcacgcctgtaatctgat
+ccgtctttttctattcgaagtgttatcagatacatgacgcccttgcgtgacattcatggc
+tcctgacatcgggtcttttaggctgaatctaatctaacccaatttgtttggattgtgggt
+cctccattttgtctgttaatgcttattaagattaaaaatgtactacgtatttagacctaa
+tgattgcgatacgctgtggaccattaatataagctgcgccaggggatttttccagatcat
+ctggcctgtgtatatgttcaaatctaatagccgagagaaattactccgacggaaaataaa
+ggcagataagcgtttcagagcaccatcgtggcgtttagtcaacctttagttcggaattta
+ttaatatacaatctcactctttggacgagctccttaaaagatgcccttgtatatcatgtc
+ccgtacctaaaagtataccagcatcatcaaagaacagttaaggaatacgactgctctata
+attgtccgaggagtaccttctcatctgccaatagtcgttgggttggaaaacaacgcatta
+atatgccacacttgtcaattagaagtttctataaaggggacgagtaactgatttgagacc
+tagcacggcagaggacgttcgtgtgacaacatctctttataagtttgagataaaatcgct
+aatctacaatgattatttgccaatcattatcgaatgcgcaaagtatctcctgttcgtgat
+tctagcctaaggccattactatggtcaaattatgctaatcgaagcagtcttctaacaccc
+ttagaaaagcaaacactattgaatactgccgccgcattcgccagcaccaacataactgca
+cgtgcttttttccatgattggcattatgaaagatttgatctatgattcttaccagttgca
+atattcaatttagcatgtgttcctaattattgtgttattatggtctatctcatcatgtaa
+atgaagatcatgacgtcaacacagattctagtcaggatcatcagttcctcggggaaatcg
+cacctaggaacagccttatgcaaccgctaaacaaagcaatgaggatgtaccgacaaaagc
+tcgatttaaaagcctcgaaacgagatgtacgaatcgtttactgccttttatgaggagtcg
+agtactgttggttcatatttgctacatgattgtatgtaataacgatcccgccctttatcg
+gttcgatcctttatggcgataagttatgaatcgtcagtatctttagatcaaaaactcaac
+tagtacccagttccccggaggaacggtcatgattaatgcgttttacggtctcccgtccct
+cttcttgtcagaggaatcagtttcatccgatcccactcgatgattggtatagctatttgc
+cgaaaagccacaacgtattcggtactatcttgtttgattcccctgtatcttaattcgcga
+cacttgatatcttttgtgtttaatcgacgaatcatcctgggggcgacacttgttacaatt
+atccagttgcgtttaatggctgtgggtcacaagattgttagacaggtcccgcgtgtcgta
+ggaaattgataattggagtttgcaggacgaatagctcacccgcctaagtgatccaaccct
+catcaggataactatcactgggcagtattatttttgatttcatatgccaccccctaggag
+actgtagtcatgtatctttcttacccaatctagcccgaaacaagaaagaatgtcgattcc
+agtcaccttttattagaccgatttacacacaaagtgtcttggtttaaaggctggcatgaa
+tacatactcaaaagttgaaaacgacttgctctattcgattaccttcgcgatctcaatcga
+ttacgctaaattttaatgcccgctgaaatatccaacatttaaaacaggattaattctctg
+atccatgaacttaggactcattgcacgtgacttatctttctctcttaattcatgctccaa
+tacggtgggctaaaccacttttatcacatgaatgtacgcaacgtgttaataagctatgag
+tacgcgggggcagcgaaacgggtcaatctgggtatcttctattgggacggtacatttcgg
+ttttatagactatgtagttacacggcatcaacatgtaattaaaacggcgtaacctaggaa
+agccgaacgcaccttgggattgccatgtgtccggaggattacatacatctaagaaacatt
+ctaaactatgtatagtcgtttacgacccttgtagtacgtgcatcccttggcgaaaagtac
+tctgggtattagagtgtatattatcgacagcaccgaatcctcattttatagcttgacaat
+ttatgacccgaaagaaccttttataagtctataagtatatctaacgcaattgcggcactg
+agtccactaactatctttgagcagtgttatacagtgagacgccatggaaggggtttatat
+attttactgtcgttccctaaaaagttaattatcagacctgcgcgatctcgtagatgaaca
+acgcgatctagtcgaaaaatgcttgtggctaccattccagtcgagatcaaccgtttctgc
+ggatcgcgttacattccttgcttatttgcgataaatcgatacaaccccattaccagaaaa
+acccggagaatcaattactctgcagatcttatactaaaaaagagattacaacccctgttc
+tatgtgtcccaaagtgagtaacgtggagcgttggggtaagagcggagcgattttaacttt
+cgcttttccattttccagtattgtactttacgttatatttgagcggcacattcgtcaaaa
+catgatccatatggactgaggtgtttaaatgttaatcaaataattgtattttcagctgac
+tttaaaatctgcagccattggaggtggagattccaatagatgtaagcaggtgatatcata
+tgcaattcttgtgacttattaagataccagacacggcacaatcgcagtagcacgtaaaca
+ataatgacaatcgacggttaaattccgaacgtaagatatgtttacggatgcactaaaata
+ggtagcaacaacgtttctctgagatgtataagttaccaaacactggagaattccgctaaa
+ctaaggacaatttccgtcgtattaattgttgacaaatggttagtaatacattcgcagtgg
+ataatccgttgcatacctagcactgagtgtaaataaaaccaatcgactactggcatttcg
+ggctaacgactagatgttagcctatgtgaaagcctcacacatgcttattgccttcacggt
+gagcaatgtttcttattcgttattagaagtcacctgtagagacagtagagatgacctaaa
+tttggtttgtccagtcccgaggtgatctaatgattaggttaacttagaacagtggtcaat
+tggttaaagctgatttacgaacacttccgaggggtcgtaaaacattaaactggtgagaac
+agtatgatgtattcggtcatctagacaaccccatcgctgggagtttggacagtgttatga
+ttcgtaaatccaccatgtgtccgaattcgaaatcctgttgctccggggagatagggttaa
+tttaggcttttttacggtgtggcatattagctcaaacatcaacattcttaaaatcagcgt
+aaacggtcaccagttgatatttgttctgctaggaagcgatgtacaaaataagcttaataa
+gatttaggtccgaccttaatttcggtccatagcacctctttctaagtgttttgcttaaat
+aattgtattgttattgattttctgcgagttgaacacggaaaataagtcaaaaaggacact
+tttaggttcatatgtaccgatgaatgcgcaatagaatcgagaaatttttagattagtaat
+cgtgatgattgtggccaaatcccgcactaaacggctttcgctgtttccaaaaaattttag
+tccactaggtatttaaatgttggacactgaacgtggaagccgtcgtattatgaaactaat
+ggcagaggggctcctctgcgtgtactttgagcagatgctatcgtcagaaaaaggtaaatc
+ttttggttctttataattctggcgtccgtgtagcctagtgaatgtgtttggttcaagtga
+atttgtttagccagaatggaccaattacgtcattagctgttacgtctatacgaaatatag
+actgtggacgacccatcgtagagtcatgtagttacatgtgaccttagaacaccaatcgtg
+tgcgattgtaagcaggacaacacagtattgtactggtcaattggttcatagatctgacta
+tgaatcttcgtttttgtacaacaatctcggtgaagcttcaaaaagcctccttcctaataa
+tcagttaatttttcgtaaggttcctgttcgaggttagtcgtataaagacgaaacggcctt
+aatgtaacattaactattccactgtaggtggatctaacaaggttggacatgtgctaccaa
+taagataagaatttcgtccgcaatacaatatctacttttgtagcctatcttggattaaca
+acaacttacgttggtatttcaccggacgtatcaaatgattctgattttaatgactgagag
+taaacatcaacgaatcttatgtatctttaagccgctgcttgacaagtcacattactgtta
+gaatgaacgcttcattactacaaaacctaccaccaactcccacattaatattatactaga
+tgtttgaagtttatttgacaaaggttttcaaaaagcacagaatcgttacgaacacgtaca
+ttaaattgttagggtattaattgtggtcggtgcatttccggccccatagcgctccgcggg
+gagaaactatggccttcatgacagcccccccataacatctaggtaatggtcggataacta
+taaacaaccctctccagagaactgtgaaaataaaatctcttagtacacaagcgtatactg
+gtttaagtcttgcccatcttaaagactcttttcactattttcttgatgcctcattcttct
+aatattaggtgattttttaatccgagaatataaaaagacgatagaaagtgttaaaacacg
+gcgtagcgacatattttaaagaaatgaaatactttttgactatccctcatgatctaaact
+tacgcggagctatctttttgtataacatgtacagagaattaatccgatgcttcttccgat
+taaggacatagcgccgaaaacgtcatggcggcttatcgatatcgtaacgcactataccaa
+gtgattaagtgatcaatgaatacgggtttcgggatttctgttaagtcatgcacggcaaat
+acttggagtcttgaataacgccgcgcgtagtacgaaggttctcaagctcgcgtgacgtat
+agaccgtattgctatttcctgccttctcaattgtccgaggattgctgataacttaaaata
+aggttgagtttttaataacgatttgtcgagtttgggaaaatcctcgtttgtgtgtttgtc
+attttcaagttatcaagaactacgggtataatttacgacgtaatgttggtttgatgcccg
+attgcgaatatcgtacgaatggtatttgtacaactgctttcctttatcgattgctcgaga
+acattataaagtctattactatggattaagactgtatacaagtgtttaagcggagcccgt
+gataatctataaggttttggtacctttatctgttacttttgccttgaaacatacatacgt
+acacgggaatatttacctaaacgccgtatagtccagcctcgtatttgggccgtgttttgt
+cagcattttaaactgaaagcgcccacttgcattataacccggtgcggaatctcttagtga
+ctcgtcaggagtttacgcctttgagacctctcgacaggacccattttgatctagtcgtta
+taggtagagtgcctttcctatcgcaccattaccttctagcaaacttagagtattcaatga
+aatcatatcctgtttatactaaatgttataggctaatgacacagctgacactaagaggtc
+tcttcgggttacccgaatgagttgtttatacgatgttgacaactcgggggagtcatttca
+atgaagactgaggactcttgatcagattaaaacgcttaatgactgataatttagattatg
+ccgtgtattatttaagtgggcgaaccctcccctagaatgggtttcctgagaaaagtctta
+gaacacagtattctgaatccagatgcaaatcgctaacgttagtaagcggctgtagctctt
+ggcagtttggtcaatagtcaatcgcaatccgtttaaccgtctactattcctagagcgaag
+agctatgttctgacacgtccccaatattaggcaaaggctccaaaagaacagtcaattgat
+taactacgggcttggtttctccgtgaatccttgcgccgctataccacataaaaggatagc
+ggtgataccacaagtttgcgacgttaaagcgtcgaccctcaacaagtacactagcaaccc
+cttagcaattaattttgtccatcactactgccaagagttgactggaccagttggaaatga
+catttgatatattaatagagctacatattgtaccactttactgtcacttacactaaccct
+agcgtgattactcatacatatattcgtaaattctaagttatgatactagttttgtaaatt
+taatcggcgaagacacgttctcttgtacgagcttcaactaaatatttcactgtagccaac
+cactttaaccagaaggataccttaatgccgatataatattgtccaggaaacgttaatact
+ttcacaagacaaagcttggaagaggtactttacgatcacctgatagatcgaccggaacga
+ttctatataggtttggtctgagaaatttgtagctaaaaccatgttccataggaactcctc
+tgtaatgggcaaaatgcagatagcgttcaatcgttgcttaactatctatcacagcatcct
+aactcctcaacagcttctttcctaaagacatcagcaggtaagttgacggcacccgataac
+ccagagcacgattggaatctaatactctgtatggatcattacgctaagtaaatataatga
+ttttctgactcaaagttacactgcgaattttatattaactggttctatttgttaaatacc
+acaacctctcgtcaacaggtcgcgatgcaagtgatccaaaaatatctaacttataccaac
+cattacttctggcgcagaaaaacatagatatctgaacaatcgaccgttaagactgtctcg
+ccgatcttaggaacctaatactgctcagtagttattgtttatttgggccatccccggatt
+atgtcagccatggaacactaaaagtcctaatctaacctatggacaaaaagctcactttta
+taaaattgctcaccttatgttgattgttatttgtccgaaatgtctataactcagtgtact
+atctattggaaaattatggccggagttttattgaatatacttttgtatgttgagaaagaa
+tgttgtcgtaataattatcagctggaaaatcatctaatatatattatattgagatattac
+gacagacctaagtgctttcccgtcatgagcagatggactaacactcttggtaatccttct
+cgttttagttggtaatgtttagtctaagtaatatcccgactcttacttactcagagcgga
+aatgactttttaaactaacgtttaaaggcacttagtatgcgtcagggttatttttttaat
+tacgtacccttgtgcagagagtttagctattcgatcctacttagtatgaaccatgagagt
+acaggttggtaattcacagagaaggtcgagaagattatttttgatgtttaccaatactat
+gaggcgtattcatcgaaataattttatggctgcgcacttcacatacgcaggaagaccact
+gcagcttgctagatctggatgtatcattgtacttctaagagcctgaaaggtaatacattc
+ccagcgagcgtaacagattgtatggggacatattcaatcttagcaatgcattcgttcttc
+gaaatcaggcatttttgatgtcataagttctgtcaactataaccctggaactttaatctg
+ttgttcgtcgaatcaaggatcaagaaagcttctaaaaggcccaaagcaaaacccaccact
+acttcagttttaaattagaatcacaccctagggtattagataataattaaatgtcttagg
+aagagatatcaaaagatgcagacatcctcaagtgaataagtctccggtctttcacaaaca
+catggttaagcgatgtggttttgactagagacgttcgccaccatcgtaatatttctggtt
+acctgcgaacgtgaaccaaatcttacttcatacattgcttaaacagtacaacttatctct
+tatcctatagagatctcaaaagtttgtatttttactggtttcaaattgagagaaaaactg
+cgttctccgatttctatattattgtttaaatgatgccaaacatccagtttaaaacacggt
+gtgatcagccgactcagattcgtatcctatgttagaatgagtcatcaaactacggtcacg
+cgtacattacagagtaaactacacgaatgaaagagataagaagatgaaagagttaatagg
+tctcctgttaattatgagaaccctaactactacggattggcctactagtgggttggaacg
+gatataaaattcgactaagttcgcggcatgtcaggctcctaaatatgaagagaactcggc
+atcgaattatccacagtaatagttggaacatgattcctctatgcatggtgtatatccacg
+tacgccagtgtgcagtgtagccatgcgaccacgggcgttgtgaatattcttcctcagaaa
+aggactgttgagcaaggaattggattctgtgaacggaatatagtcgagtagatggaattt
+cctacactgcgaaaaggtcatagtaaatcaaacgccgcgcgcagacatatcttcttggca
+attagtactccactaaatcaattggttataaacttttagaatatctttatataagttcac
+tacttacgctgcgggtagtatatttaaagtgatgtcttaggaatcttatggcggcggaat
+aaacggcttgactatagataccctaattctggcataaccctgtaacgtgtgaagcatgct
+ttaatagacgactagatcagcttatagaatggatatgactgccacattgaagagattaac
+attagcgggtataatgttacgaacttgtttaacaaaatagctctaccacacacgcatagt
+ataatataaaggtcctggagttcgctacgagcctggaattgcagttcccctaccctgagt
+aaacaagatcagtatggacctatcttctgacccacgtgtaaaaactaccgttagcggccc
+tgagaacggtgaagttgattatcggctaacactcgctttaccaaggaacaaacaattgat
+ggaacaggtaagcggctggattctatcctgaatacagcataataatatttgctttcaata
+tatagttatgacactcccaatatcactaactctttacaaatcggatatgaagagtgaatt
+agagatggagccgatcgttccttgtattctggtaagtactcgactaatgtgtgtagtcta
+ggggtaaaggtccttaaccgtcgagtctagaactcacgcattatgaaatcctccgagcat
+agagactctaaattcgccaagcaataagtcccgacgcgaaggatgagaagctcattgaac
+tgtaacatttacgtcgggctcaccatgttacatatgcagcgggtaaaagtttttgcctgg
+agtggttgagtttcgcgatacataaaaggccccactttcatatggtcaaatatctatatc
+gtgctttggacgactcgataaactaaagtagcctagtaatgccctaaaccgctgcatttg
+tgcaataaaaaatttagagtatatataacttccggacgtatggctgccttgaatcctcgg
+atatcgtccttatacaacgatgaacggtatagctcggaactatgcagattaggcgatcct
+tgggttgaatttttagtttccatagatatgagttagttttgatatggttaccatacgtcc
+ctgcattgaaacttaatctgtatattgattgatccttagcaatagcggcacatttctggg
+caatatgacttaattaggttacggtttttactatgatggatacgttttatatgatagaat
+aacagttgctatttaaacaggtactacattcaactaatactgtttcactattgtgtccaa
+catagggaatatattgcctgaatagatgtattatcaggcatcttttacgctccaggtaga
+actaattaaaaatgatccttagaaactttcaagcaacataagctaaaagttacgccaatt
+ataagccacatcggtaggatcttcaggcattcccatatccttctctatcaatcccgtctg
+ttgctaattggttatctaagcatatcgcggcgagcatctacgataggtataaagttgctg
+ctatctaattcgtcataatatatacatggaattacagattcatacgtcttcagtctcgtg
+gtgtttctaagagcggacccaagaattacgtaatatctctctcgtgttacccaagaagtt
+gacacgtgattgtcagctatctttttctggcgatgttaatagttataaacaattgcatat
+agctgcaaattagctaatcaaatactcgtttcttaaatgttatcagcaaagctttaggtt
+ctgtaatttcactgtgtaaagagggcgctaagttcaaaattggtttttggcaacaaacaa
+tttaatagcgcagtgcaaaaataatatctcagggtgtaattatttctctaattggtcttt
+acggttggaccaggcaatgggttttttatctatgtgataccaattaaaagtaatttcaaa
+gtgacattaaacttaagtattgctgtcaagaccattacgacacttcaccaacacatttat
+gtattgtgctacgcggtatggcccgtagtaatttctgatattgaccgcgttatcagcaag
+tacgctgtacaaatgccaaatttagtaaagctctgtgtgcattccaaggtgcccacatca
+cacattatcaacatatcatgtcgttgtattacgtccttttactagcctgggaaataccgg
+tgattcagagtgaacataaatctctgaaagctactagacaaagctagtatagttaaaata
+tatatttcttttaatattaggatctttgcgattgcacatttcaagcatcgcattaaccta
+cctccgtactcttctacaacggttgcatgtacgatttctatgcgatgaaatacttatgtt
+cttagtttggggttactttgttcacctagtcctcgaacgcaaattagcttcgaatatctg
+aaaagtgtatgcgggcaccaaaacgatctcgattcttaggtttataattatagtcagaag
+ataaatacatgcatatctggacactcttccacatgtcatgtcgactaactttgaactaca
+gtcatatatagactgttatctgatccgtatgtgtctattactactcttatctgagaaagg
+acccaatggagtcacagtaagcgatcatgtcatcggggctttttccctgattataagatt
+acactattgctgtgcttggggcctcctactttttctatcttaatcattttgtacattaaa
+aagctaagaagtaggtacaacttatctttcccatacgagctggaccattaatttaacagc
+cgcaaggcgagttttaatgttaatctggaagggctttatgttctaagcttttagcactga
+gaaattaatccgtaggaaattaatcccacataacccggtaagagaaccttacgccccgtt
+actaataatgttctgcgcaatgtaggaagtgacaagctcactcttgcgacgagctcctta
+atacaggccctgcgttatattcgaccgtacctataactagaccaccatcttaaatgtaca
+gttatggttttcgacgcatagagtatgggaccacctcgaaatgctcagctgcaaattgta
+ctgggggtggttatcaaacatttaatatgaatctatggtaaagtactagtttatagatag
+ccgaacactaaaggtttgcagaccttcctcccctgaggaacttcgtgtcacaaattagat
+tgagaaggtggtgataaaatcgcgtatctacaatgatttggtgcaaatatttatcgattg
+cccaatcgttctactcgtactctttatagcctaacgccttttcttggcgctaattagcct
+aatccaagaaggagtctaacaaaattacttaaccatactcttgtctattcggcccacgca
+tgcgcaagctcaaaaagttctcaacgggcgtttttacttgagtcccaggaggtaacattg
+gatctatgagtcttaacagtggaaatatgatttttagattgtgttcagatttattgtctt
+attttggtctatctcatcagctatagctacataatgacgtcttaactgtttcgactaacc
+ttcagatctgactaccccaaatacaacatagcaaaagaatgatgctaacgcttaactatc
+ctttcacgatcttaacaaaaaagctccatttaaaagaatcgaaaacagatctaccattcg
+tggaatcaatttttggacgagtactggtcgggtcgtgcttatttgctacaggattgtttc
+gtataacgttcaagcactttagcggttccatccttgatggcgttaactgatgatgcgtaa
+gtttatggtgatctaaaactctactacgaaccaggtcccagcacgaaacgtcatctttaa
+tgagtttttaggtctccaggcactaggctgcgaagtggaatatgtgtcatcagagacaaa
+tagatgattcctatagctttttgcagttaagccactaagtaggcggttctatagggtttc
+attcaaatcgatcgtaattcccgactctgcatagcgtgggtcttgtatagaccattcttc
+aggcccgccacaatggtttcaagtttcaacttccgtttattggctgtccctcaatagagt
+cgttctcagggcacgactctcgttcgttattcataagtccagtttgatccacgaatacag
+aacacgcatatctgataataaaagcttaacgataactttcacgcgcatggtttatttttg
+atttattaggcaaccaaataccagaatgtagtcagcgatatgtagtaaaatttagacaaa
+cataaaacaaagtatcgccattacagtctcctgttaggagaacctttttatcaatatgtg
+taggcgtgtattggcgcccttgatttaataataattacggctaaacgtattgatattttc
+caggaactgccccatctcatgagatgaccctaaattttattcacacctcatttttaattc
+ttttatatcacgattatttatctgagcaagcatctttgcaagcattcatagtgacggtgc
+tgtctctatgaatgcatgctaatatacggtgcgctaaacatattggttcaattcaatgta
+agctacctcggaatttgcttgcactaagacggggaagccaaaacggtaaatcgccgtata
+tgctagtgccaagggacttgtccgttggagtcactatggagttacaagcattataaatct
+aaggaaatcgcagtatcagtccttaccccaaagatacttcgcattccctggggtacggac
+catgaaatacttctttcatacatgataaacgatggagactcggttaccaccctggtagtt
+actccatcaattggagttaactaagatcgctattacaggctttattagccaatcatcaca
+agcctctttttagagattcacaagttagcaaaccaaagttcctttgataagtctttaacg
+agatctatcccaattccggctaggagtaaaatttatatatttgagatcggggttaaagtc
+acacgcaatgcaaggggtttttatatggtaatgtccttccctaattaggtaattttcaga
+cctccgagagagagtagatcaacaacgcgttatactcctaaaatgcttgtcgataacatg
+acactacagatcatccctggatgagcatcgactttcattacttgattagttcagttaatt
+cgtttcaaaccattttcaacaaaatcccccagtagatatgtatatgcacatcttagacta
+aataacagttttcataccctgggatttgtgtcactatctcaggaacgtcgagacgtcccc
+tatcaccgcagcgagggtaactggccctgttccattgtaatcgatgggacgggacgttat
+attgcagacccaaagtagtaataaattcagccatatggacggagggggggaattgttaag
+aatataattcgattttcagctgaatgtaaaagctccagccattcctcctccacttgacat
+tagttcgaagaaggtctgagaattggaattgcttgtgacgttttttgtttccagacaagg
+aaatagcccagtaccaagtataatattatgacaatagaagcttaaattcacaacgtaaca
+tatctgttagcatgctctaatagaccgagaaaataagtgtctatgtgtgcgagaactgtc
+aattcacggcagtagtcacctaatctaacgtctagttcccgactatgaagtcttcacaaa
+tggttagtaataatttcccagtggagtagaagtggcataacgtgcactctctgttaataa
+tacctttagactactcccatttcgccagaacgtcttgatggtaccctatgggaaacactc
+acacatgcttattgcctgcaacctcagcaatgtgtcgtatgcggtatttctacgaacagc
+tagtgaaaggactgatgacctaattttggtttctcaagtccagacgtgatattttgatga
+ccgtatctgacatctctgggcaattcggttaacctctggtacgaaatagtccgtcgcgta
+ggtaaaaatgataatgctgtcatcactatcatgttttagctaagctacactaccccatcg
+ctcgcacgtggcaaagtgtgaggattccgatatcatccatgtgtacgaattcctaatact
+cttgctcagggcacttagggttattgtagcctgtgttaccgtctcgcatattagatcatt
+aatcaacagtcttataatcaccgtaatcggtaaacagttgttatttgttctgataggtag
+acagctaataaagatgctgttgaacagttacgtcccacctttattgccctacagtgaaac
+tagttcttactctgttgctgtaatatgtctagggttattgatttgctgccacttcaaaac
+ggaaattaagtcattaacgaaaatggttccttcataggtaaagatcaatccccaattgaa
+gccagaaattttgagatgtcgattcctgatcattcgccaaatttacagctcgtaaacgag
+ttccatgtgtaaaaaaatgttgagtccactagcttgtttattctggctcaaggtacgtgg
+aacacgtagtattttgatactaatgccagacccgctacgatccctgtactgtgagcagag
+ccgatcctcagaaatagctaaatcttgtgcttcgttagaagtctcgactacgtgtagcct
+agtgtttgtgttgcgttatagtctatttgtggacacagtatggtcaaatgacgtcttttg
+atctgacggcgttaacaaagatactctgggcaacacacatacttctctcatgttgtttct
+tcggacctttcataacctttcctggcacatggttagctgcacatcacaggattgtaaggg
+tctagtggttcagtgagcggaatatcattcgtcggtggtgttaatctatctcggtgtagc
+ttataaatgcatccgtaagaatattatgtttatttgtcggtacgttcatggtagtggtgt
+cgccgatttagacgtaaaggcatgtatggatcttgatctatgcaaaggtaggtccatcta
+tatacgttgcacagcggatacaaataagataagaatttactaacatttaaattttcttat
+tgtcgagcatagattggaggaaaaacttatttacttggtatttaaacggaagtttctaat
+gtttatgattggatgcacggacagtttactgcttactttcttaggtttcttgaacaacag
+gatgcactagtaacatgtctcgttcatgcttccattaagttcttcttaaacttacacaaa
+ctacctaatttagagttgacgagatggttgaacgtgttgtgacaaacgtttgcaaaatgc
+acagtatcgttaccaaaaagtacatttaagtgtgtgcgtaggaattctgctacgtccatt
+gcaggccacattcacatcccacccctgaatatatggactgaatcacacacaccaaatttc
+atctaccttatcgtagcataactattaacaaacatatacagacttcgcggtaaataaaat
+atattagtacacaaccgtatactggttgaactattgcccagctttaagacgcttttaact
+aggtgcttgatcaagaagtattattatatgacggcagtgtgtaatacctgaatagatata
+gacgttagattgtctgaaaacacgccgtagagacatttttgttagatatgtatttctttt
+tgacgagccagcatcttagtatctgaagacgagctatatgtttgtagaaaatcgactgac
+attgtatacgaggcggcgtaagattaaccaaattccccagaattagtaatggcgccttat
+cgatttactaacgatatataacttgtgatgttgtctgcaatgtatacccgtgtaggctgt
+gctcttatcgaaggaaacgcattgaagtccaggctggatgaaaccaccgcgtacttccat
+gcgtctatacatagcgtcaccgatactacgttttgctatgtaatccattctaatgggtaa
+gaggattcctcttatagtaaaatatgcttgactttttaagaaccattgggagtggttggc
+aaaataatagtgggtgtctttctcagtgtatagttttctacaactacccctattaggtta
+caagtaatctggctttcttgccacttggcgatgatagttagattcgtatttctacaacgc
+agttactgtatccatggcgcgagataattagatacgatttgaatttggatgtagactcgt
+tactactgttgtagaccagcacgtgagtatctagatgggtttgctaccttgttagcggac
+ttttgccgggaaaaagacatacgtacaaccgtatattttactataagcagtattggccac
+cctcgtattgcggcagggtgtgctcacctggttaaaatgaaagagaaaaattccatttta
+aaacccggaggaatctattactgacgaggaaggtgtttaacccgttgagacatctcctaa
+cgtaaaaggttcatattctagttattccgagagtcactttcctatccaaacatgaactga
+tagcataatgacaggttgaatggaaagcatatcctgtttattctaaatctgtttcgctaa
+tcaatatgctgtcacgaactcggagcttacccttacaactatgtgttctgtttaccaggt
+gctaatatcccggcactcttttcatgcatgtcgctcctagcgtcatctgatttaatagct
+taatgtctcatattttacagtagccagtgtagtatggaaggcggcgaaccagcccctaca
+ttgggtttcctgacataagtattacatatcacttgtctgattacacagcaaaatcgctaa
+ccttactttgcgcatgtagctattggaactttgggctagtgtctatcccattaagtttaa
+cagtagactagtccgtgagcgatcaccgagcttatgtctcgtacccaagttttggatttg
+gatcaaaaactactcgatattcatgatctacgggcttcctttctccgggtatcattgcgc
+cgagattaaaaataaaacgatagcgctgtgaaaacatgtttgacacgggatagcgtagaa
+actaaacaacgaatagaccatccaatttgaattttattgggtccagcacttcgccatagt
+gttgaatggtaaagttcgaaaggaaatttgttatattaattctgctacattttcgaccac
+ttgtatctcaaggacaatatcccttgaggcttttagcagaaagagatgccgtaattctaa
+gggatgataataggttgggaaatttaagagcagtagtaacggtcgcgggttcgaccttaa
+actatatatttaaatctagccaaacaagttaacaacaaccataaagttatgaccttatta
+tattggcaagcttaacgttttaattgctctagtaatagagtggtagaggtaagggaccat
+cacctgattcttcctccgcaaccattatatagacgtgtcgtctgacaaatttcgagataa
+aacattcgtccttagcaacgaatatcgaatggcaattagccacattgagttaaatagttg
+aggatatttcttgcacagaatcagatctaatctaatgattcgttactaaacacttcacca
+ggtatcgtgaaggctcaagattacccagagaacctttgcaatataagaatatgtatgcag
+cattaccctaagtaattatattctttttctgactcaaagtgacaagccctagtgtatatt
+aaatcggtatatttgggaaattcctcaaactatcctaatcaggtagccatgaaagtgatc
+aaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaatagattgcgcaa
+aattcgtaccttaagtctctcgccaagatattaggatcctattactcatatcgtgttttt
+ctttattgccgccatccccggagtatctcacccatccttctcttaaaggcctaatattac
+ctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgattcttatgtgtac
+catatgtatagtaatcacgcgactatatagtgctttagtatcgcccgtgggtgagtgaat
+attctgggctagcgtgagatagtttcttgtcctaatatttttcagatcgaatagcttcta
+tttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtcatgaccagatcc
+acgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtctaacttatatcc
+cgtcgcttactttctaacaccccttatgtatttttaaaattacgtttattcgaacgtact
+tggcggaagcgttattttttgaagtaagttacattgggcagactcttgacattttcgata
+cgactttctttcatccatcacaggactcgttcgtattgatatcagaagctcgtgatgatt
+agttgtcttctttaccaatactttgaggcctattctgcgaaatttttgttgccctgcgaa
+cttcacataccaaggaacacctcgcaacatgccttcatatccatcgttcattgtaattct
+tacacaatgaatcctaagtaattacatccctgcgtaaaagatggtaggggcactgaggat
+atattaccaagcatttagttatgagtaatcagcaatgtttcttgtattaagttctctaaa
+atagttacatcgtaatgttatctcgggttccgcgaataaacgagatagattcattatata
+tggccctaagcaaaaacctcctcgtattctgttggtaattagaatcacacaatacgggtt
+gagatattaattatttgtagtacgaagagatataaaaagatgaacaattactcaagtcaa
+gatgtatacgggatttataataaaaatcgggtagagatctgctttgcaattcagacgtgc
+cactaaatcgtaatatgtcgcgttacatcagaaagggtaactattattaattaataaagg
+gcttaatcactacatattagatcttatccgatagtcttatctattcgttgtatttttaag
+cggttctaattcagtcattatatcagtgctccgagttctttattattgttttaaggatga
+caaaatgcctcttgttataacgctgggagaagcagactaagagtcggagcagttggtaga
+atgaggctgcaaaagacggtctcgacgaatggacagactttactaaaccaatgaaagaca
+gaagtagagcaaagtctgaagtggtatcagcttaattatgacaacccttaatacttccct
+ttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttagaggcatctctcgc
+tcataaataggtagactactcgcaatccaatgtgactatgtaatactgggaacatcagtc
+cgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacatgagaccaccccc
+gtggggattattagtccgcagtaatcgactcttgacaatccttttcgattatgtcatagc
+aatttacgacagttcagcgaagtgactactcggcgaaatggtattactaaagcattcgaa
+cccacatgaatgtgattcttggcaatttctaatccactaaagcttttccgttgaatctgg
+ttgtagatatttatataagttcactaattaagatcacggtagtatattgatagtgatgtc
+tttgcaagaggttggccgaggaatttacggattctctattgatacaatttgtctggctta
+taactcttaaggctgaaccaggcgtttttagacgacttgatcagctgttagaatggtttg
+gactccctctttcatgtcagtaacatttcagccgttattgttacgatatgcttgaacaat
+attgatctaccacacacccatagtatattttataggtcatgctgttacctacgagcatgg
+tattccacttcccattcaatgagtattcaacatcactagcctcagagatgatgacccacc
+tctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagacgatatcaagcgc
+tttaaattgcatataacatttgagggtaaagctaagcggatgctttatataatcaatact
+caataataagatttgattgcattttagagttatgacacgacatagttcactaacgagtta
+ctattcccagatctagactgaagtactgatcgagacgatccttacgtcgatgatcgttag
+ttatcgacttaggtcgggtctctagcggtattggtacttaaccggacactatactaataa
+cccatgatcaaagcataacagaatacagacgataatttcgccaacatatatgtacagacc
+ccaagcatgagaagctcattgaaagctatcattgaagtcccgctcacaatgtgtcttttc
+cagacggtttaactggttcccgggagtcctggagtttcgacttacataaatggaaacaat
+gtattttgctaatttatctatagcgtcatttggaccaatacagaatattatgttgcctag
+taatccactataacccgcaagtgctgatagaaaatttttagacgatttataaatgcccca
+agtatccctcccgtgaatcctccgttatactaattagtattcgttcatacgtataccgcg
+catatatgaacatttggcgataaggcgcgtgaattgttacgtgacagagatagcagtttc
+ttgtgatatggttaacagacgtacatgaagggaaactttatatctatagtgatgcttccg
+tagaaataccgccactggtctgccaatgatgaagtatgtagctttaggtttgtactatga
+ggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgacgaatttatacta
+atacgctttcactattggctacaaaatagggaagagtttcaatcatgagagggagtatat
+ggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcattcttgaaagata
+cataagcgataagttacgacaattataagcaacatccctaccttcgtaacgatttcactg
+ttactgcgcttgaaatacactatggggctattggcggagagaagcagatcgcgccgagca
+tatacgagacctataatgttgatgatagagaaggcgtctgaattgatacatcgaagtaca
+ctttctttcgtagtatctctcgtcctctttctatctccggacacaagaattaagttatat
+atatagagtcttaccaatcatgttgaatcctgattctcagagttctttggcgggccttgt
+gatgactgagaaacaatgcaatattgctccaaatttcctaagcaaattctcggttatgtt
+atgttatcagcaaagcgttacgttatgttatttaaatctggaatgacggagcgaagttct
+tatgtcggtgtgggaataattcttttgaagacagcactccttaaataatatcgctccgtg
+tttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtggtgtatatatcgg
+ataacaattaatacgatgttcatagtgacagtatactgatcgagtcctctaaagtcaatt
+acctcacttaacaatctcattgatgttgtgtcattcccggtatcgcccgtagtatgtgct
+ctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgttaggtaagatctct
+ctgaattccttcgtgccaacttaaaacattatcaaaatttcttctacttggattaactac
+ttttacgagcatggcaaattcccctgtggaagacggttcattattatcggaaaccttata
+gaaattgcgtgttgactgaaattagatttttattgtaagagttgcatctttgcgattcct
+ctggtctagcttccaatgaacagtcctcccttctattcgacatcgggtccttcgtacatg
+tctttgcgatgtaataattaggttcggagtgtggccttaatgggtgcaactaggaataca
+acgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaacgtgctccttgct
+tagcttgtgaatgagactcagtagttaaataaatccatatctgcaatcgattccacaggt
+attgtccactatctttgaactactctaagagatacaagcttagctgagaccgaggtgtat
+atgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcgagaagctaatacc
+ggctgtttccagctttataagattaaaatttggctgtcctggcggcctcagaattgttct
+atcgtaatcagttggttcattaattagctaagtacgaggtacaacttatctgtcccagaa
+cagctccacaagtttttttacagccgaaacccctgtgtgaatcttaatatccaagcgcgt
+tatctgattagagtttacaactcagtattttatcagtacgttttgtttccaacattaccc
+ggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgtaggaagtgaaaag
+ataaatattgcctacacatactgaattcaggcaatgcgttttattcgaaaggtcatataa
+ctagaaaacatgatgaattcttatcggatccttttactagcatagtgttggcgaacacct
+cgtaatgctcagcggcaaattggactgcgggtccttatcatacattttttttcaatatag
+gcgattggtctaggttagtgattccccaacacttaaggtttgctgacattcataccctca
+gcaacttcctctcaaaaattagagtgagttggtggtcttataagaccgttgattatttga
+ggtggtcaaatgatggtgcgatgcacaaatcgttataatcgtactctgtagacaataacc
+cattgtagtgccgattttgtgcataatacaagaaggaggatataaaaatgacttttcaat
+aatattggctattagcaacaagaaggagaatcctcattaagttagcaaccgcagggggta
+ctgcagtccaaggaggtttcattggagagagcagtatgaaaacggcaattatgattgtga
+gattcgctgaagattgtgtctctgattttcctagatagaataagctatagctacttaatc
+aactcttaactgtggagactatcctgatgatctgaataccccatttacaaaattccatat
+caatgaggctaacgcttaaatttcatttctccatcgtaacaaaaatcagcctttttatac
+aagacaaaacactgcttccattacgggtagcaatggttgctcgactactggtagcgtcgt
+gatgtggtgataaagctgtcttgcgtttatacttaaacaaattttgacctgacataatgg
+agcgacttatcggatgttgccgatctttagggtcatctattaagcttatacgaaaaaggg
+acaagcacgttacgtaatctggtaggactgggtacctagaaacgcaagaggaggcgaact
+ccaatatctgtaagaacagaaaaatacaggagtccttttcatttttcaagttaacaatat
+aagtaggagcttagagaggcttgcatgaaaatcgttaggaattacagaataggcagagag
+tggggcgtgtagactacattcttcaggccccacaatatgggttataggttaaactgcact
+ttttgcgatctcccgaaatactgtcgttctctgcgaaccacgctcgttccttttgctgta
+gtccacgttcatccaactattcagataaacaagatcgcagaattaaagcttaaccatatc
+ttgatagcccatcgtgtatggggcatgtatgtgcaaacaaaagacctcaatcttgtctgc
+gagagggaggaaaatttagacaaacataattcattctttcgactggacacgctaaggttt
+ggacaaactttgtatctatatctggaggcctgtattccagcccttcttttaataagattt
+acggcttaaactatggatatttgccaggaaatgacactgctattgacaggaacataattt
+tgattcaaacctcattgttaattattttatatctcctgtttttatatcagaatgcttctg
+tcctagaaggcatactcaaggtgagggctcgaggaatgaatcataatagaccggccccta
+ttaatattggttcaattctttcttacataacgcggaatttgattgcacgaacaccgggaa
+cacataaccgtatagcgcccgttatgctagtgcctagcgactgggaccgtggagtctata
+tcgtctttctaccattattaatctaaggatataccactttaagtcctttcaactaacata
+aggcgcattccatgcgctaaggaccttgaatttattatttcttacatgataaaagatcga
+gtcgacgggaacaaaaggctacgtactcaataaagtgcagtttactaagagccctttttc
+tggcttgtggagactatcataacatgaagatgttttgacattcaatagtttgcaaaacaa
+acttactttgtgtagtattgaacgagatctttccaattgccccatagcaggaatagttat
+atattgcagatcgcggtgtaacgcactccaaatccatcgcggtgtgtgagggtaagcgac
+ttaaagaattacggtttttgatcaaagcacagtgagagttgagcaaattacagttatacg
+acttaattcagtctccataaattgaaacgacacttcttaacgggaggaccagacacgttc
+attaagtgaggagtgcactttttgactttaaaaacatggtaatcaatttaaaccacttga
+tatgtatatgaacagatttgaagttatttctgttttaatacactgggagttctgtcaata
+tcgcaggaaccgcctgacgtcccctatcacacctcagagggtaaagggacaggggaaagg
+gtaatcgaggggtagggaacgtagttggcacacccaatggacgaataaatgctgccatat
+ccacggagggcgggattgcggttgattttaaggcgatggtaacctgaatgtaatagatca
+tcaaatgcctcctccactggaaattactgcgtacatccgctgagaattgcaatggagtgt
+ctcggtttttctttaaacaaaaccaaattgacaacttcatagtataatttttgcacatta
+caagcgttaattaacaaacttactttgctgttagctgcctatatttgtccgacaatataa
+ctggatatctctgcgagaactgtaaattaacggcacttggaacataatagttcctattgg
+taacgacgttgtaggcggcaattatccggtggaagaattgacaactgcagttgaactgca
+tgaaagtcaaatctctcgtaagtataactttagaagactccaaggtacccagaacctctt
+cagcggacacgatcgctatcaatcaataaggattattcactgaaaccgctcatatctgga
+ggtggacgtttttcttcgaaaagcttgtcaaaggactcatcaaatttttggccgtgctaa
+tcgacacacctgttattttcatgaccggataggacatctcgcggaaattcgggtaacagc
+tgggtagatataggacctcccctacgtattaatgataagcctgtcataactagcttggtt
+taccgaagagacaataaacattcgagcgctcgtgccaaactcggtgcattacgtttgaat
+aaatcggtaacatgtactattactctgcctaacggcacttacccgtttgggtccatgggg
+taaccgctcgatgttgacagaattatgctaaagtcgtttaagatcccgattaccgaaaat
+ctggttatgtctgagcattcgtacactgcgtattaagatcaggttgaacaggttcctaac
+aaattttgtgacctaaagtgaaactaggtcgtactctgggcatgttttatgtcgtggcgt
+atgcatgtgctgacacttctaaaaccaaattaaggctttatccaatatgggtccttaagt
+gctaaacatcattcacaatttcaagacagattgttggtcttgtcgattccgcatctgtcg
+ccaaattgacacatcgtaaaccaggtacatcggtaattatatgttgactaaactaccgtg
+tgtattctggctctaggtacggcgaacaagtacgatgtgcttaagaagccctcaccccag
+acgagcccgcgtaggtcacatcagcagatcctaagtaattccgttttattgtcctgaggg
+agtaggatcgacgaactctacaagtcgctttgtcgtgccttataggctatttcgggtcaa
+tgtagcgtcaaatgaactattgtcatctgtacgagttaactaagtgtctatcgccaacta
+aaagacgtctcgatggttctttatgcggacctgtcatatcattgactggcacttgcttac
+atccaaataacacgtttgttagcggatagtcgttaagtgtgcgcaagatcatgaggcggg
+gggggtaatatttcgccctctacatgataaatgaataagtaagaagatgatctttttgtg
+gcggtaccttaagcgtactcctgtcgacgagttactactaaaggaatgtagggttctgga
+tctatgaaaagcgacctccatatatatacgggcctaagcggagtaaaataagtgatcaat
+ggactaacattgaaatgttagtattgtcgaccattgagggctggtaaatcttatttacgg
+gcgtgggaaaacgaacgtgatatggtttagcatgggatgcaagcactcgttaatgcttac
+tttagttggttgcgggaacaacaggaggctatactaactggtagcgttcttgcttccatt
+atgttattattataattaaaaataagacatatggtagagttgtagtcagggtggatcggg
+ttgtctataacgttggaataatcaaaactatcgttaacaaaaacgaaatttaagtcggtg
+cggtggaatgcgcctacctcatgtgcaccacacattcacagcacacccctcattataggc
+aaggaagcaaacaaaaaaaagttaatcgaccgtatccgaccttaaattttaaaataaata
+gaaacacttagcggtaatgaaaagataggactaaaattcactagtatcctggaacgaggc
+aacagagttatctagatggtaacgaggtgctgcatcaagatgtatgatttttggtccgct
+gtgtggaatacctctattgatatacaagtgactttctcggtaataacgcacttcacaatg
+tgttgtttcttttctatgtattttgcaagagaaagaagcttagtataggtacacctcaga
+gatgtttcgtgtaaatcgtatcacatggtataactgcaggaggaacattatccaaattca
+ccacaattactaatccacccttttacttttactaaagatatattaattctcatgttgtct
+gaattgtataacccggtaccctgggagcgtatcgaaggataccaattgaagtcctcgagg
+catgttacaacacacgacttccttccgtctattcagacactcaacgagactaacttttcc
+taggtaatcaatgatattgggtaactcgtggcatcttatagttattgatccggctctttt
+gtagatcctgtgcgactcgtgcgctaattaagactggctctcttgcgcaggggatacgtt
+tattctacgtacccgatttggttactactaagcggcctttcttcaaacttgcagttgtga
+cttacattcctatttcttcaaagcagggaagggttacagggagagacttattgagatacg
+attggaatttccatgtacaatcgttaatacgcttgtagaccagcaactcagtatagagat
+ccgtttcctaaagggtgagcggtaggggcaaggcaataagaaattactaaaaccctagtt
+gttaatataagaacgattcgaaacaataggattgcccaagggggtgcgaacatggtgtaa
+atcaaagagaaataggcattgttaaaacccgcacgtttctagtacgcaagaggaacgtcg
+gtaaccagttctcaaagatcctaacctaaaaggggcttattctactttttccgacactca
+atggacgagacaaacatgaacggatagctttaggtctcgttgaatgcaaagaatagaatc
+gttattattaatcggtttccattatctatatgcggtatagatctccgagaggaccctgta
+aactagctctgcggtttaactggtgctaatagaccgccactatgttattgcttctagctc
+ctagcgtcttatcatgttatacattaatgtcgcatattggacagtagccaggcttggatg
+gatcgccgacaaaaagaaaagactttccctgtaaggacttaactattacatataacttgg
+atcattaatctgcaaattagagtaacggtctttcaccagcttcatattccaacgtggcgc
+tagtcgatatcccatgaagtttaaaactagaattggcagtctcacttcacagtgcgtatc
+tatacgacaaaagtggtcgatttgcataaatatcttatcgatattcaggttattaccgat
+tccttgctaacgctagaagtcacaccagagtaataataattccagacacctgtgaaataa
+tcggtcactacggatagactagtaacgataatacgtatagtccataaaagttgaatttta
+ggggctaaagatattagcaatactggtctagcctaatcgtcgatagcaaagggctgtgag
+gatttctcctacattttcgaccaattgtatcgataggaatagttacagtcacgcttgtag
+atgtaagagatgacgttattcttagggttcttaagtcggggggtaatttaagaccactag
+taaaggtagaggcgtacacagtaaacgatattttgaaatcgtcaaaaaaaagtttacaac
+atcctttaagttagcaactgattttagtggcaaccttaacggttgaattgatctactaat
+acaggcctacaccgaagggtacagataatgattcttactaccctaacatgatagagtcct
+gtcctatctcataggtcgacattttaaattcgtaatgagcaacgaagatcgtttcccaat
+ttgcaacattcacttatagacttcaggttatttcgtgctaacattaagatagaatataat
+cagtcgttaagaaactattatccagctttcgtcaaccataaagattaaaaactgaaactt
+ggcaagatatgaatagctatcctgctttaaccgatcgtatgagatgctttgtagcaagaa
+aagtgactagcacttgtgtttagtaaagcgggagagtgcggtaattaatattaatatact
+attaagctacacagcaaaggctgcaataatgttagtaagtagaacataaaggtattctcc
+acaagtaataaatagtgtgagctaattgactaacttaactctcgcgacaagtgatgtgga
+taagatgactcatatcgtctttttctgtagtgccgacatcccacctggatcgaacaattc
+cttctagttatcgactttgattacctatcctattaaacagatagggttgtaaagtcagaa
+aatgatcggcttgcgttggtctaccatagctagagttagaacgcgtagatagaggccttt
+tgttgccaacgtgggggtgggatgagtctgggcgagcgtgactttctttcgtgtccgaat
+ttgtttaacatccattagattagatgtttgtgttttgggtctgatgtcctaactactttc
+tcagtgaaactaatgtcatcatccaagtaaaatagtccgatgaagtctccgttttcggcc
+gaagcttgtctataacgtatataaagtcgctgaatttagaacacaccttatctatgttgt
+aaagttactttattccaaaggacgtgcacgaagcgtgagtgtgggaaggaacttaaagtc
+ggatcactcttgtcagtgtagataagaatttctttcatacttcactggaatccggcgtat
+ggatatctctaccgcgtcatctggtggtgtctgcggtaaaaagtcttgctgcacgagtct
+gagaaatttttggtgccatcacatcgtaactgtacaacgaacaaatagcatcaggccttc
+ttatccagcgtgaagtctaattatttcacaagctttcctaagtatgtaaatccctcactt
+aatgatgcttgcgccaatgaggatagaggacattgcatgtacgtaggactattctccaag
+gggtcttctattttgttagcgaaaattgttacagcctaatgttagagcggcgtacgactt
+tataccagatactttcattagatatgcaaatatccaattaaatcatagtagtatcgtggt
+atggacaatcaaaaaagacccgttgtgatatgatgtttttctagttcgttctcatatata
+tagatcaacaatgaataatctcatgatctataaccgatgtatatttatattccggttgac
+tgctccggtgcaattcactacggacactaatgactaatatggcgcctttcatcagaaacg
+ctaaatatgattaatgaattaagggagtattatctaattattagagagtagcagttagtc
+tgatattttcggtgtatgtgttagccgttataatgctgtctttttatcagtgagaacagg
+gagtgtgtagtgttgtatgcttcactttatgactctggttatatccctcggagaacaaga
+ataagagtacgagaagttcggtcattgaggatgaaatagaaccgctagacgaatggactc
+acgtttataaaactatgtatcacagtactacagctaactctgaagtccgagaagcttttg
+taggacaaaacgttataagtacctttcgcagaatacggccgtgcatacctgttataaggc
+gtagtagggacaccatgctatccctcatatagagctacactaataccattacatggtgac
+tatcgtttacggccatcatctgtaagcgatcatgcctcgttagcatccgtacaatctcgc
+atggcgtcactgcagaaaaaccccgtgcggattttgagtcagaactattcgaagcttctc
+aatccttttccattatggcatagcaagtgacgactcgtcagccatgggaataatagcact
+aatccgattacttatgaattagaacccacatgaatgtgattctgcgaattgtctaagaat
+ctaatgattttccggtgaatatggttgttgttatttattgaacttatattattaacatca
+cccttcgttagtgatagtcagctatttccaagaggttccccgagcatttttaccattctc
+tagtcatacaagttggagcgcttttaaatctttaggctgatcaaggcgttttgtctagaa
+ttctgcagatgttagattcgtgtgcaatccctcttgcatgtcagtaacaggtcacccgtt
+tttcgttacatatgctggtaaaatattcatagtaataactacaatacttgatttgttacg
+taatgctcgtacataacacaatcgtattccacggaacagtaaagctctattattctgatc
+gagcctaagagaggatcacactacgctattaaagtcacgttcacgaaatctcaaacctca
+actgctggtgaccagttatagacagtgtaattccatattacatgtcaggcttaagctaac
+ccgagcctttatataagctataatcaagaattagattggagtgcattttagacttatcta
+tcgaaatagtgatagtaagagtttatatgacctgatctagactgatgttctcttccacaa
+cagccttaaggcgtggagcctttcttatactattaggtcgcgtcgagagccctattcgta
+atgttaacgacactagactaatatacaatgagctaagaataacacaagtcacaagataat
+ttacaaatcatatatctacagtccacaaccatcactagcgattgcaaagcgttattggta
+ctaccgctctaaatcggtatgtgcaagacgcgttaactggttcaagcctctcctgctcgt
+gagactgaaagaaatcgaaaatatggatgtgcctaattgttcttgtgagtcatgtgcaac
+tatacagtttagtttggtcaagactatgcaactattaacagcatgtgcgcattgaatatt
+tggtgtcgattgataaatgccccaacgttccatcacgtctataagccgtgttactaatgt
+gtattagtgcatacctattcagaccatagttcaactgttggactgaaggcccgtcttggg
+gttcgtgaatgagagtgcagtttcttgtcttttccttaactgacctaaatgaaggcaatc
+ggtttatctagagtcatgcttaaggtgaatttcagccaatgggctcccattgagctagta
+tggtgctttacctttgtaagtggtggctttccttggtgtgctgactttaacacggcagag
+tgattatccgaagaatggataataagacgctggcaatattggctaataaagtccgatgag
+tttcaatcatgactgcgaggagatccatgcggtgtacctaaacctacatcgtatgtattt
+gctgacgttcattcttgatacataaagatccgatatcggtccactttgtttaccaaaagc
+cctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatggggatattgccg
+gtgagtacaagttagaccacacattagaactgacctatattcgtcatcatagagatggag
+tatgaattgattctgcgaagtacactggctttacgagtatctagacgccgcggtatatct
+cccgtcaatactatgaaggtatatatatagaggctgaaaattcatgttcaatcctctttc
+taagagtgagtgggagccccttctgttgtcggagtaaaaaggcattattcctcaaattgt
+cagaagcaaagtatacgtgatgtttgcttagaacaaaagagttaccttagggtaggtaaa
+tctcgattcaccgagagaagtgattttggcggtgtgcgattaattcttttgatgacagat
+ctcattattttatatagctccctctttgtatttagagtttgcgtaggtaacctggcaaaa
+ccatatcccggggggagagtgcgctgaacattttatacgatgtgattactcaaaggataa
+ggttcgaggcctctatactcatggaactatcttataattataatggatcgtggctcattc
+cacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaacgtacatcttcta
+aggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaaatatttttaaaa
+attgattctactgcgaggaactaaggtgtagacaagcccttagtaaccggtggatgtcgc
+ttcagttttatagcaaacattattcaatttcagtcttgactgaaattagtttgttagtgt
+tagaggtccatatgtcacatgcatatggtctagatgccattgtacagtaataccttagat
+tagtattagcggcatgcgtacttggatttcacttgtaagaatgagcttaggacggtcgcc
+tgtagggctgcaaataggaatacttacaatttttgatgacttgttagcatatcgctatca
+cccataaaaaacctgatacttgatgagcgggtgattgagactatgtactgatataattca
+atagctccaatagatgaaacagctatgcgcctatttatgtcaaataatcgatgtgataca
+agcttagagctgaacgagcgcgagtggaattagcggtgatctctatcctaaaaagccacg
+aaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagttaaatttgcatc
+tcatgccccacgaagaatgggtagagagtttgaaggtgcttctggattttcctaagtacg
+tggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaaccacaaacccctgg
+gtgaatctgattagccaacccagtgatctgatttcagttgtcaaatctcttttttataac
+taccttttgtttccataatttaaccggatctcataatgaacaaacgggtagaataatggt
+agcacatagcgagcttgtctattcagaaatatggcctactcagaatgtattctccaaatc
+agtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttatcggttccttgta
+ctacaatactcttgcccaacaaatactaagcataacagcaaaattcgaatccccctcctt
+ttaataaatggtttttcaatatagccgattcgtattcgttagtctttcaccaactattaa
+cctggcatctaattaataaaatcaccaaaggactctataatatgacagtcacttcggcct
+cttttaagacagttgattattgcaggtccgcaattgatggtgacatgcacaattagttag
+aatccgactatggagacaattaacaattgtagtgcccatttggtccagttgacttcaacc
+acgagttataaaggtattttaatttatagtcgatagtaccaacaacaagcacaatcataa
+ttatgttagaaaacccagggggtaatgctctaaatccagctttaaggccagagtgcacta
+tgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctaggaggtgccgagtg
+agaatatcagataccttatgaagcaacgattatatctggactagatcatgatgatcggaa
+taaaacattgaaataagtccttatcaaggagcataaacattttatttaatttatacttcg
+taaataaattcagaattttttttcaagacattaatctgagtaaatgacggctagaaaggg
+ttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgcgtttttactgaa
+acaaaggttcaccggaaagaaggctgccacttttagcttcttgacgatctttagcgtcat
+atttttagattagtcgaaaaacggaaaacaaacttaacgaagctggttgcacggggtacc
+gagaaaccaaagagcaggacaactccttgatcgggaagaactgaaatagacagctgtcat
+tttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgcatgaaaatactg
+aggatgtaaactatagccagtcaggcccgcgtgttgactaattgatgaagcaaacaaaat
+agccggtattcgttaaaaggaacgggttgccagctacagatatactctaggtatatccca
+aacaagagacgtcctttggctgttgtaatcggtcataatacttgtcacataaacaagatc
+gctgaattaaacattaaacagttagtgatacacaatcgtggttggggctgggatgtgcaa
+taaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaacattattatttc
+ttgacaatggaatcgataagcgttcctctaacttggtatatatatctcgaccccgggatt
+ccagccattcttgtatgaagatttaaccatttaactatgcatagttgaatggtaaggaaa
+atgatattgactgcaacagattttggatgcaaaaatatttgtgaattattggttatatac
+tggttgtatagcacaatcattaggtcctagaaggcatactcaacctcagcgagagagcta
+gcatgcataattgtaccgcccatattaatattcctgaaatgatttcttacattacgccca
+atttcagtcatcgaacacccccatcaatttacccgatagagaacgtgatcatacgcaata
+ccctatgcgaacgtccactctatagcgtctgtatacaatgattattcgttccatttacaa
+cgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctcctggaatgtatg
+agttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgtacgaatgaaagg
+ccacttttagaagagacctttgtatccattgtggagaatatcataaattcaagatggggt
+gtcatgctattcggtcctaaacattcttaatggctgttctattgttagtctgatttaaaa
+tggaaccatagcacgaatagttagatagggctcatacccctgtaacgatctacaaatcct
+tccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatcaaagaacactcac
+acgtcagattattacactgatacgaattatttcagtcgacagtaattgaatagaaactta
+ttaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttgactgtaaaaaaa
+tggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagttttttctctgtt
+attaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaagatcacacatca
+cacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtagtgggatcaacat
+atggacgaatttatgctcaatgagccaacctcccccgcattgcggttcattttaaggcct
+gggtaacatctatcgtttagataatcaaaggaatccgactatgcaattgtctgacttcat
+ccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaataccatattgaaatcg
+taatacgataattgttgctattgactacaggttatgaaaaaacttactttgcgggtacat
+gcatatttttgtaccacattattacgcgatatctctcagtgtactctaaattaaaccctc
+ttcgaacattttagttcctattcgtaaacacgtgctacgcggcaatttgccggtcgtaga
+atggacaactccagttcaactgcatgtaactcatagctcgcgttagtataaattgactag
+tagccatgggacaaagtaactagtcagcggaaaagatccctttaaagatatatgcaggtt
+gcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagcgtctctatcgta
+tcttctaattttgggccgtgagaatcgaaactactctgatttgctgcacacgttaggtaa
+tatcgcccattttcccgtataagctccgtacttatacgaactacacgaccttttaagcat
+tagccgctcatatcgtgattcgtgtacagatgagtctattaaaattacagacatactcca
+tatctcgctccttgaactttgaataatgcgctaacttgtactatgaataggcagaaccca
+actttcccgtttgcgtcaagcggggaaacgatacatgttgtcagatttatgattatctag
+ttttagatcacgtttaccgataatcggctgtggtctgagcagtcctacactgagtattta
+cttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaatacggagtacga
+tgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaaccatttttacga
+tttttactatagcggtcatgaagtgcgaaactgcttgcaaattttctacacacattgtgg
+ctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccagggaaagcgcgaa
+ttatttggtgactaatagtccgtgggtttgagccatatacctaacgccataaactacgtg
+gtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcagcacagactaact
+ttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaagtcgcttgcgcgg
+cacggattcgattgggcggctcaatcttgcctaatttctactattgtcagctgtacgact
+gtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttatgaccaaaggtct
+tataattgaagcgcacttccgttcatcaaattaaatcctggcttacccgattctccggaa
+gtctgacctagagattgacgacggccgcgtattattgagacctcttcaggattaatcaat
+aacgaagtagttgatctgtttggcgacgtaccttaagccgactccgctacacgagtttct
+actaaaccaatgtagccttatgcttagatgaataccgtcctaattagatattccggcata
+acagcagtaaattatctgttcaatggacgaacattgaattgttagtattctacacaagtc
+aggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatgcttgagcttgcg
+ttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacaccagcatattcta
+tatgctagacgtcttccttaaaggatcgtagtattataattaataataagaaatatggtt
+gacgtctagtcagcgggcatacgctgctctatatactggcattattcaaaacttgacggt
+aaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgggaaccaaaatgt
+cacagaaaacacctctttattgccaagcatgcaataaaaaaaatgttaatagtacgttta
+cgacattttattttataataaagagaaactattacacctattgatatgataggacgtaaa
+ttaacgagtagcctgcatagaggcaaatgaggtttctacatggtatagacctgatgctga
+aacatcgatgagttttggtcccctcgctcgttgaaatctagtcatttactactgtctttc
+gagctattataccacttcactatgtggtgtttctttgctatgtatggggctagtcaaaca
+tgatgactatagctacaactcagagagcgggcgtgttaagagtatctcatgctagaactg
+cacgacgaacttgatacaaagtaacaacatttacgattccacaaggtgactttgaagaaa
+catagtttaattctctgcttcgatcatttctataaaccggtaccatcgcagcggatagat
+gcataacatttctactactccaggcatcttaaaacacacgtagtacttcactagattaag
+acacgataagtgtataacttggcagtgggaagcaaggagattggcgaactcctggcatct
+gttacgttttgttcaggctcggttgttgataatgtccgactcctgccatattgaagactc
+gctcgagggagatcgggattcgttgattataagtacacgtgttccgtaatactatgaggc
+agtgattcaaaatggcacttctgacttacatgactaggtattattaccacggaagcgtta
+aaggcacactcttatggacttaagattgcaagtgccttcttctagcctgaattcgcgggt
+tcaacacaaactctctttagacatccgttgcctaaaggctgagacgtaggggcaaccctt
+taactatgtactaaaaaactagttggtaatttaacaacgtgtccaatcaagacgatgcac
+caacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtgataaaccccacct
+tgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataacctaaatccgga
+tgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagcatacatttaggtc
+tcctgcattgcattcaattgaatcgtttgtattatgagctgtacagtagctatatcagct
+atagttatcccagaggaacaggtaaactagctctgagcgtgaaatccggatattagaacc
+cctagatgggattgattctagctaatacaggcttatctggttttacagttatctagatga
+ttggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtattgcccgggaagc
+tattttctaggtattataaagtcgagcattaatatcaatttgacagtaaaggtctttcac
+cagcttcatatgccatagggcccatactcgatttaaattgaacggtttaacgagtattgg
+aactctcacttataactgagtagctatacgaaaaatctggtccatttccagaaatttatt
+atcgatttgctgcttagtacccaggaagtgataacccttgaaggcacaacactgtaataa
+gttttcctgtcacatctgtaatattcggtcactacgcattcacgactaaagataattact
+atactaattaaaagttcaatgttagggccgaatcatagtagaaattctcgtctagcctaa
+tcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaatgctagagatag
+gtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagttcgcttctttagt
+ccgggcgtttgggatgacaactactatacgtagagccgtactcaggattagatagtgtga
+aagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtttaggccaaacat
+taaccgttgtagggatattctaatacaggccttcaccgaaccctaatgataatctgtctt
+aataacattaaatgattgtctccgctacgagctcttagggcctcattttaaatgactaat
+gtccaaagaagagactttcccaatttcaatctgtcacgtatagacggcaccttagtgagt
+catatcattaagatagaagattatcaggagggaagtttctattatcaaccgttacgcaac
+cataaacttttaaatctcataatggcattgagatcaagagctttcatgatggtaaagttc
+gtatgtgatgctggggagctagatatcggtataccacttcggttgtggtaagcccgagtg
+ggccgttagtaatattaatagacgattatccgacaatgcattcgctgaaataatcttact
+taggagaaattaatgctatgagccaaaactatttatgtctgtcacattattgactaaagt
+atctatcgacaaaactgatgtccataagttgtagcagatagtcggtgtatggtgtcacca
+atgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaaattgcctattat
+acagataggcttgtttagtcagataaggttccgcttgaggtgctctaacttagcgagagt
+tagaaagcctagtgagaggcattttggtgccaaactccggctcgcatgagtaggccagag
+agtcactttctttcgtcgaagaagttggtgaacagccttttgattagttgtttgtcttgt
+ggctatgtgctactatataagttagaacgcaaactaatctaatcagcaaagtaaaatagg
+accttgaacgagacggggtacgccgttgaggctcgagatagtagataaactagaggaatg
+tagataaaacattagctagggggtttagttactggattacataggaagtgcaccatcacg
+gtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggacttaacaagttcgtgc
+ataatgaaatcctatacggactttgcatatctctaccgactcatctggtcgtctatgcgg
+gtaattgtattgctccaagtggatgactattttggcgtcccagcacatagtaaatgtaaa
+tccttataatagcataagcaattattagactgcgtgaagtcttagtagttctcaagcttt
+acgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccattgaggtcattga
+atgtacggagcactattatcaatgcggtatgcgattttctgagcgattattgttaaagac
+ttagcgttgagccccggaacacttgattacagattctttaaggagttatccaaatatcat
+tttaaataatagtagtatcgtgctttggacaataaaaaaagacccgttctcttatgttgt
+tttgcgacgtacttctctgatatatacttcaactatgaagattctattcatcgataaccc
+aggtatatttatatgcccgttcactgcgcagggcaaattatctacggacaataatgacgt
+agttggacccggtaagaactaacgcttaatatgattaaggatgtatgccagtattatctt
+attatgtcagagtagaagtttctctgagattttccgtcgttgtggtacaccggatttggc
+tctctttttagaactgagaactcggagtgtgtagtcttgtttccttcaatttatcaatat
+gcttttataccgccctcatcaactataacaggacgacaagttccgtcttgctccatcata
+tactaccgatacaccaatcgtatcaagtttagtatacttgctttctctcttctacagctt
+actcgcttgtccgagaagcggttggtgctcataaagttagtagtaaatgtacaactagta
+gccagtccttacctgtttttacgactactacggacaccatgagatacagaagttagtgct
+acaattataccattacatgctcaatatcgttgtcggccataagatcgaagagtgcatcac
+gcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacacactccccttgttg
+actaacatcttttacaagaggctaaatcattgtccaggatcgaataccttgtgtacaatc
+gtcacccatcggaagaataccacttttccgatgtagtatgatttacaaaaaacatctatg
+tgagtaggccaattgtagtagaatatattcatttgaccgtcattagccttcttcttaggt
+tgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcgatttcatacagct
+gccaacaccttttttaccaggctagagtcagaaaagttggagccatgttaaatagttacc
+atcataaaccactgttgtctactagtctgatcagctttcatgcctgtgcaagcaatatgg
+attctcacgtaatggtaacaactgttgcgttacttaggctggttaatttgtcagagtaat
+aaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcctaggaataggaa
+aagtaaagctcttttattctgatagtgactaactcaggatctaaatacgcgattatacta
+accttcaccaaagctcaaaaatcatctgctggtgaccagttatagacagggtaattcaat
+atttaatgtctcccttaacatttcaccagcatggattgaagatagtataaagttttacat
+ggcagtcattgtgtcacggttctatacaaattctgatagttagacggtatttgaaatgtg
+cttctagcatggtatcttacacaactgaatgaacgactggagccgttcgtatactatttg
+cgagcctcgagaccccgtttcctaatgttaacgaatatagtataatataaattgtgatat
+gaataacacaagtaactacagtttggacaattaattgttctaaactaaaaatcattcact
+tcagatggcatagagttatggctactacacatataaagcggtatgtgaaacacccgtttt
+agccggaaaccctctactgctcgggacaatgaatgatttccaaaatatggatgtgcagaa
+ttgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtcgttgcaaagttt
+aaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaaacgtgacagaaa
+gtctagaagaactgtgaataatgtctattactgattaactagtaagacattagtgcatct
+ggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtcgtggctgttccg
+gtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaaggtcaatttcaca
+atatccgatcacattgtgctaggttcgtcctttaccttgcttagtgctgcatgtacgggg
+tgtcatgacttgttatcggcagactctttatcccaagaatggataatatgtacatggaaa
+gtgtccataattaagtcccttcactgtaaagaatgactgccacgtgatccatgaggtcta
+cagaaaccgacttacttgctttttgatcaacttaattatggattcataaagttcagatat
+cggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatctgaatgacagtg
+atagaaaagatccccatttgcccggtcagttcatgttacaccactcattagtactgtaag
+tgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaactggatgtacga
+cgatcgagacgaagaggtatatataacctaaatactaggtacgttgttagagagacgatg
+aaaattaatcgtcaatacgctggcgaacactgagggggacccaatgctcttctcggtcta
+aaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctttgcggagaacaa
+ttcacggaacgtagcgttgggaaatatcctttctaccacacatcggattttcgccctctc
+ccattatttattgtgttctcacatagaattattgtttagacatccctcgttgtatggaga
+gttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacctgaaattgtttt
+tagttgggatttcgctatggattagcttacacgaagagattctaatggtactataggata
+attataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcatatgtggctaaca
+cggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagagcgcattgaatta
+ctcaaaaattatatatgttgattatttgattagactgcgtggaaagaaggggtactcaag
+ccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagtctatttcagtct
+tctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcatatgcgattcatg
+acatgctaaactaagaaagtagattactattaccggcatgcctaatgcgattgcactgct
+atgaaggtgcggacgtcgcgcccatgtagccctgataataccaatacttacatttggtca
+gcaattctgacattatacctagcacccataaatttactcagacttgaggacaggctcttg
+gagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcgatgcgactagtt
+agggcatagtatagatctgtgtatacagttcagctgaacgtccgcgagtggaagtacagc
+tgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaacccagggggaaac
+attgagttcagttaaattggcagcgaatcccccaagaagaaggcggagtgacgttgaacg
+ggcttatggtttttcagtacttcctccgtataagttgagcgaaatgtaaacagaataatc
+gttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagtgtgagcatttca
+cttgtaaaatatctttggtagaacttactttgctttaaatatgttaaaccgatctaataa
+tctacaaaacggtagattttgcctagcacattgcgtccttctctattcagatagaggcaa
+tactcagaaggttttatccaaagcactgtgttgactaacctaagttttagtctaataatc
+atgattgattataggtgccgtggactacatgactcgtccacaaataatacttagcagatc
+agcaattggccaagcacccgacttttatttaatggttgtgcaatagtccagattcgtatt
+cgggactctttcaaataatagtttcctggcatctaagtaagaaaagctcataaggaagcg
+atattatgacacgctcttccgccgctgttttgaaacttgagtattgctcgtccgaaattg
+agggtcacttcaaaatttactgagaagacgaagatcgactaaagttaaaatgctagtcca
+cagttggtcaagttgaattcatccacgagttatatagctattttaatttatagtcgagtg
+tacaaaaaacatccacaataagatttatcttagaataacaacccccgtatcatcgaaatc
+ctccgttatggcctgactcctcgagcttatagcatttgtgctggcgctcttgccaggaac
+ttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatgatacgattttatc
+gcgactagttaatcatcatagcaagtaaaatttgaattatgtcattatcatgctccatta
+acaggttatttaattgatactgacgaaattttttcacaatgggttttctagaatttaata
+tcagtaattgaagccttcataggggtcctactagtatcctacacgacgcaggtccgcagt
+atcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggctcacaatgttac
+ctgcttcaccatagtgagccgatgagttttacattagtactaaatcccaaatcatacttt
+acgatgaggcttgctagcgctaaagagaatacatacaccaccacatagaattgttagcga
+tgatatcaaatagactcctggaagtgtcagggggaaactgttcaatatttcgtccacagg
+actgaccaggcatggaaaagactgacgttggaaactataccatctcacgcccgacgcttc
+actaattgatgatccaaaaaatatagcccggattcctgattagcaaagggttcacagaga
+aagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatcttcgaatcgggatg
+aatacttgtatcataaaaatgtgacctctagtatacaggttaatgttagtgatacacaat
+actcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatcactcacccacgta
+tttggtctaattatgttttatttagtgacaatccaatagataaccggtcctattaagggc
+tatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatggtaccagtttaat
+tgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgggcttgatataag
+atttcggatgtatgggttttataatcgttggagagctcaatcatgagctaatacatggat
+ttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagtttaataggccgg
+attggattgagttaattaagaccttgttcagtcatagtaaaaacccttaaattttaccga
+ttgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagtgactaggtatac
+aaggtttttgagttcctttgaaatagttaactaatttaaaattaattaacgacatggaaa
+tcacagaacctaatgctttgtaggagttatttatgctgtttactgcctctacaaccctaa
+taaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggtatccagggtggtc
+aatttaataaattcaacatcgggtctcaggatattcggtcatataatttattaagggctc
+ttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttgtgaggcatctta
+caccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaaggaaacttgtta
+ccttggggatataagaaaactcacacgtctcattattaaactgagtacaatttttgcacg
+agaaagtaatgcaatacaatatgatgaaagccagctaatgaaaagggatggaacgcacct
+cggatctgttgcactggattaaaatccgattatttttaaaaatattcagtgctagagcat
+atcaggtctacttttttatctggtatgtaaagcccacggagcgatagtgagatccttacg
+actcaacgaaaagttataacataactcccgttagccaaagcccaatcccgattactgccc
+taccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtgactacctcccac
+cctttccccttcatttgttccactggggataagctagcgttttcagaatcaatgcaataa
+gaatagccaattgtctcacttcatcagagctcttggcaattccaggcgctacgtggttct
+ggaatatattcatttttcaaatagtaatacgtttagtgttgctattgtctacacgtttgg
+atattacgttatgtgagcggacatcaatagttgtctaactctttagtaagccagagatag
+cactcttagcgaatggataccatcttccataagtttagttaatagtccgaaacaactgct
+tcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaatcttactaatag
+atagagtttgttttaagggactactagaaatgggacaatcttaatagtatgacctaaact
+gacatttaaagatatatccaggtggcaagcataaagatcattgcgccacctccaccgtgg
+gattacttatcagtcgatatcctatatgctaagtttgcgacggcagaatacaaactaagc
+tgagttgatgctaaccttacctatgataccccattggaccggttaacagccctacttatt
+ccaaataaaagaacttttatgctgtagaagctattatagtgatgcctggtaacttcagta
+tattaaaatgacacacatacgccatatagagctcctggaactttgaataatgagcgaact
+tcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccggtaaccagacat
+gtgctatcattgatcattatcgaggttttcataaccttgacccattatcggctgtgcgcg
+gacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaataaggttggcaa
+agaatcgcataagacggacgtagagccgcagcgttgtgcgagtccaggtgcatgcgcagc
+aataggattttaaattttgttccatttttaatttagccgtaaggatgtccgtaaatgatt
+gaaaattggattcaatctttgggcctatgctactggaacctgatcgacaaaatttcaaac
+atacgttaactccgaaagaccgtatttttgcggctagaatagtcagtcgcttggagccat
+ataccttaccacttaaacgacgtgctcctgtagttgaaatataaacagaacacaaagact
+accgatcatatcaactgaagatctttgtaactttgaggcgaagcaccctcttcgagacaa
+ctaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaatcttgacgaatt
+gctaagaggctcagagctaccactgtaatttctctagagcccataataaatgaacgatac
+atccgtaggtagcacctaagggattataatggaagccaaatgcagttaataatattatat
+actggcgtacacgattcgacggatctctcacatagtgattcacgacccccccctttgatt
+gacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgccaccgtaaggat
+gacgtcgaagctacaactgggtataatttaccatgcttccctgatgctgagtgcaataca
+ctaagaatgagtttttaccccatatcaccagtatttgttctgttattgcgaagaaatggc
+tatgctgagttggcgactaaagtcacccatcctttttattaggtaaccccctcccttaaa
+ctaactgatttgctggagctgccctgcatacatatactttatcatttatggacgtccgtg
+acgcttattatccaccatagtcgatatgctacacggattcattaatggatcgtaggagtt
+taagttatatttactaagatcggtctcggctactatcccgccttacccggcgctatttac
+ggccatttttaatatattgacggtaattattcctatggtttcgaccgcacgtccttggac
+aagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccctaccatcatata
+aaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaagactatctattaca
+ccttttgttttctgtcgtagtatattaaagtctagaagccttacaggaaaatcagggtta
+tacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccatcgcgccttgtaa
+tcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatctcggctttatgt
+gattgggaggggcctactcaaacatgatgacttgacctaataatcactgtgcgggcgtct
+tatgactagctattccttgaaatccaccaccaaatggttaatatgtaaaaactttgacga
+tgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgagcattgcttgtaa
+aaccgtcaatcgcacacgttacttccataaaatttctacgaatacacccttcttaaaaaa
+aacgtaggaattcacgagtttaacaaacgataactgtataaagtggaagtccgaagaaag
+cagatgcccgaactactcgaagatgtttcgttttcttaaccataggggcttcttaatggc
+ccactacgcacattttgttcaagcccgagagggacatccccattacgggagtattactaa
+aactgttccgtaatacgttcagcaagggatgaaaaaggccactgctcaagttattgacgt
+gggagtattacatcggaagcctgaatcccacactatgatggtctgtacaggcctagggac
+tgcgtctagacggtattaccggcttctaatcatacgatcgtgagtcttaacgggaagtaa
+ggctcacacctaccccaaaccatttatctatgtaagtataaaattgtgcgtaagtgttca
+aagtggacaataaagacgtggcaaaaacccccgcacataagccgctttagatttcacaaa
+taccaatgcggttaaaaacatccttgagtcgtacatacaccatactcgcgttaaacggat
+ataacagaagataataaatccggatgtggagtcggtgtaactatagaaagccaagtgaaa
+taatgcttaccagtcatttagctatacggctttcatttcatgtcaagagggtggagtttg
+acctgtacagttgatatatcaccgatacttagaactcacctaaagctaaaattgctcgca
+gcgtgtaatccgcatattacaaacaatagatgggattcattatacataagacacgatgat
+ctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgccttacaccactt
+aaacaaaagtattgacagggaacctattttcgaggtattatatagtccagcttgaatatc
+aatttgacagttaacctagtgaaaatcagtaagaggaaatacgccacattctccagtgaa
+attctacgggttatcgtctagtccaactatcaattataactcacgagatataagtaaatt
+ctcgtacttggcctgatttttattatactttggatccttagtaaacaggaagggagaaac
+cttcaacgaaaaacactggattttgttttactctcaaagctcttatatgacggaaatacc
+ctgtcaagtcttaactttattactagactaatgaaatgggcttggggtggccagaatcat
+agtacaatttagcggatacactattcggactttcctatcggctgtctggttggataagta
+tggggactaataggctagacatacctatacttaaactatacaggcgtcatctatctctgc
+aactttggagttccctgatgttctcccgccctttgggttcacatcttctataccgacacc
+cctaataacgattagtttgtgggttagagtaaattaatacggttaatattaatgtatcgt
+tgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatgtcacgaagtata
+actaccctaatgataagctgtaggaataaaattaatgctgtctctaagcgaagagatatt
+tccgactctgttttaatgacgaatctcattacttctgacttgcaaatgttcaatatggca
+cggtttcacggcacctttgtgacgcatataatgaacttagaagattataacgacggaact
+ttatatgataatccgttacgattaaagaatctgttaaatatcataatggcattcagttct
+agaccgtgcatcatggtaaacttactttctctgcatggcgacatacatttcgctattcaa
+attcgcgtgtggttacacccactcgcacctttggaatattaagagaagatgatcagaaaa
+tccattcgctcaatttttctgacgtacgtctaatttatcctaggagacaaatcgttttat
+gtctctcacatttttgaagaaaggttcgagagacaatactcaggtcctgaactgctagaa
+gatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatgaatgatacttttc
+caagttcagttaagtgaatatgtttaacatacccggcttttcgatcttaagctgacgctg
+gacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtttcgtcaaaaacg
+ccccctcccttctcgagcccactcacgctatgtattgacgcgaacttgttcgggatcaga
+cttttcaggagttcggtcgcgtgtccctatgtgctaatatataagttagatcgcattaga
+tgctaatctgaatacttatagacgaccttcaacgagaacgggtaccaccttgaggctaga
+gttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggctttagttaagggt
+ttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcgaccatctagaggc
+taaggggactgtactaggtagtgattaatgatatcctagacgcacgtgccttagatcttc
+agactctgatggtccgcgatcaccgtaattgtagtcctccaactcgatcactttgttggc
+gtcaaagaaattacgatatctaaatacttataatacaataaccaaggatgagaatgactc
+atcgcgttggagttatattgcttgaagttctatggaatgaaagcacgttatctgccgtcc
+caatatctccagtgagctaattcattggacggtccactttgatcaatccccgaggagatg
+ttcggacactttagtctgtaacacttagcgttgagaccacgaacaattgattactcagtc
+ttgaaggtgttttccaaagttcattttaaataagactacgataggcctttcctattgata
+taaactacccggctctgttgttcgtgtgagtcgtacttctctgtgtttttctgattatag
+caagattcgattcttagtgtaaacagcgatttttatttgacccgtcaatgagaagcgcat
+aggatctaagcaaaattatcaagttgtgccacaaggtaagatctttccagttattgcagg
+taggatgtatcccacgttgatagtatgaggtctgacgtcaactgtctaggagagttgacc
+gcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcccactgtcgtggc
+ggcgttcctgatatttagcaagaggcgttgataaagccctcatcatctagatctcgacct
+catctgccctcttgctccatcattttctacacagactactttcctatctacgttagtata
+attgctttctatcttagtatcatttagagcttctccgtcaacaggttcgtgctattaaag
+ttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcgactacttcgcaca
+aaatcagataaagaagtttgtcattctattagacattgaattgcgcaattgacttgtacc
+acttatgatcgaacactgaatcaagactgtgattaactaaaatagacaagccactatatc
+aactaataaaaacgcccctggtggtcgaacatagttgactacaggataattaattggact
+ggagccattacattctctacaatcgtatcacttcccaagtagacaactttgaccttgtag
+tttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaatagtttcatggga
+acctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgataaagtcgtgtcg
+ctttcgatgagagggaattcaccggaaaacaccttggttaacaggatagtctatgtaaac
+ttcgagacatgtttaagagttaccagcttaatccacggtgctctactagtatcatcagct
+gtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacggttgccgtactga
+gcagccttattgtggaagagtaatatataaatgtagtcttgtctttacgaagcagacgta
+agtaataatgacttggaataccaaaactaaacatagtggattatcatactcaagaactct
+ccagataaataacagtttttacgatacgtcaccaatgagcttaaagattaggatcctcaa
+aactgatacaaacgctaattcatttgttattggatccagtatcagttaaactgaatggag
+tgaagattgtagaatgttgttctggcctcgcatggggtctaggtgatatacaatttctca
+tacttacacggtagtggaaatctgattctagcttcgtagctgactatactcaaggaacca
+ctgctcaaggtaggagactagttccgaccctacagtcaaagtggccgaagcttaaactat
+agactagttgttaaatgctgatttcaagatatcatctatatacagtttggacaattatgt
+gtgcgaaactaaaattcatgctattcagatggatttcacttatgccttagaaacagatat
+tgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagggacaatgtatct
+tttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataatagaatcttgtg
+ttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttggggtctactgtg
+tgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagctcgagtactcatt
+aaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttcccggtacgctatct
+ctctcatcgggaggcgatgtgcaggttatctacgaaagcatccctttacgttgagagtgt
+cgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgtgcctcagggtcc
+gggcgtactcctccatggaagggcgcgcatctagtgttataccaactcgctttttaacta
+ctatgctgtagttctacaggcatagtggccagtattttctaacttctctggatagatgct
+ctcactcctcatccatcacggcttcagtttacgtcttacttgcttgttcagcaacggatg
+gaggcattaagtatcttcactgttccctaaaattgctgttcaatatcaaagtaaggacga
+tacagggaaagctcaagcacactcattgaatactgccccagttgcaacctcacttaatct
+gacaaaaataatgactactctaagtgttgcggaagcagtctcttccacgagcttgtctgt
+atcacttcgtataggcatgtaactcgatagacacgaacaccgagtgagaaactatattct
+tgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctggagatcactcacgc
+ccacacaaggcgctgctacctctttattccaatgtgtaagaatttgctaacttcatttct
+agaccgcagctttgcggtcataatttcacggtacggacccttgggttagagacttgataa
+cacacttcgcagtttccaccgcgcacatgttttagtggcttctaacatagaatttttgtt
+gtgacataaagagtgcgtgggagacttgcccgaccgttaagccataatcaattgaaagcc
+ccgtgagtcacatctaattggttgtactgcgcatttagctatcctttagctgactcgaag
+agattcgattcctaatataggttaattagatggctgccgcgcgaagtaaaacgtgaaaaa
+cgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagttccaagttcgct
+acgttatgagagagattggaattaagcaaatatgttttatggtgattttgggatgagaag
+gactgctaagtacggctactaaacaaatttctaaaaccgccatctaccttatcttggaga
+catttaagttgtatatgtcactagtctagcttttgtctgtgggacgcgttctcggaatga
+gggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtggactattacacc
+aagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaaggtaccccgcat
+aagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaaaacataatttta
+atcagaaggcagctcacccgcttgctctagatcttatctttgtatgaatgtcagaattta
+ctgcaatatccgttccgaatagtgagggcttagtatagttctctgtatacaggtcacatc
+aaactccccctgtcctagtacagctctgagctttaattaattgcatacatttccttcaat
+catcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaagagaagcaacaaac
+aactagcccgactcacgttcatccgccgtatccttgttcagttcttactccgtattaggt
+cagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcccgcttgaggttg
+acaattaaaacgctgagcagttatcggctattagatagtggggtgaaagtaattggctgg
+aattatgttaaaacgtgatattaagctaaaatacgctacttgttgccgacctaattcagt
+cattcgatattcagttagagccaagaataacaagcttgtataaattgaacggggtgcact
+aaacgatgtgttactctaatattcagcttggagtatacctgaaggcgaattcatgtatcg
+gccaataataagacgttgaagatcacaatttggactagcaaaagaaggtgatttatgcgt
+ggggattgagtccactgtacgagtacggtctctggaaaattataggttcagggaatataa
+ggaagtaaagataattaccaagagatttttggtatcgctatgacccagaggtgttctaac
+gtctgttttgatccgcagaatttctgcctcaatgcatatttgacggacttgaactagagc
+ctctaaagttaaatggcgacgcaactgttcctaaacttcaattattactactcttttttt
+cctagggtattgtagaggccagtggacaaaataaatcaaatttaagatgtttcggacatt
+aacatcccccgtagcatagaaatcatcagttatccaatctctcatcgagcttttacaatt
+tctgctggcgctatggacagcatatgccgcgagacctccgcaagactcacttgatcactg
+taagtatcttcattagaggttagagcctatagttaagctgctgacctagtaaaattggta
+ttttctaattttattgctcaagttaaaggttagtgaagggataatgacgttatttttgaa
+caatgggttgtattcaattttatatcacgaatggaacccttcattcccggcataatacta
+gacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtttaattccggcaa
+accaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatgagtttttcagga
+ctacttattacctattaataagttaacatgagccttcataccccgtaagacaatacatac
+tccaccaattagaattctgagccatcttatctttttgtatcatcgaagggtatggccgaa
+taggttaattagttactcctaacgtctctacaggcatgcatttgacgcaccttcgaaaat
+agtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatagtccacggtttcc
+ggattaccaaacgcggcaaagagaaacattgtatcgacggagataacttaatacagaagg
+aaggggcatcttcgaatacggatgaataattctatctgtttattctgacatcttgttttc
+aggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaattattttctaata
+ttgacgagagcaatctcactccttttgggtctatttatgttttattgaggcacaagccta
+tacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtggaaacaaaggatg
+ggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaaatcagatgctat
+ccttaactttgggctgcatttaagatggcggttggaggcctgtgagaatcctgcgtgtca
+tctttaatgaccgaattcatccatgtagattcagatcacacactcattccttgatgttgt
+ctaaacaaaagttgttgtggacgcattggagggagttaagtaacaacttgggatcgcata
+cttataaaaattatatgttaaactttcacaaacgctgaagtccaaagtaactagcccaaa
+cgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaatagtgttcgaagg
+taaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgcacggaggtatga
+tgtttactgactctacaaccctaattttccagtacgtacattcattccaataggttagtt
+ctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgctctatggatatta
+gctcattttatttaggaagcccgcttagaggcttactatgagggaaatgccaaaatgtca
+tacttttcggtgtgtcccatatgacaccgctttacatagaatttgaattaaaacgcgctc
+tcccgttcactaccatacttggtaccgtgcgcatattacatatagatataggatcatttt
+ttaaagctgtactaggtttgatcgacaatcttatgctatactatatgatgtaaccctcat
+aatcaataccgatcgtacgatcctagcataggtggcaagcgattttatgccgattattgt
+gttaaatagtctgtgagtgtgattatcagggctacgttggtagaggggttgtatagacct
+cgcacacattgtgacatacttaacaatatacgaaaactgatataataaatccccttaccc
+aaacaccaatcccgttgaatcaactaccataacgtctcccatataaattgcctacttgtt
+tgcataaatctgaatacataacaccattgcaccttcttgtgttccaatcccgttaagatt
+gccttgtcagatgatatgcaagaacaatagcatttgctagcaattattaacagctcttcg
+aattgcctccacataacgcgggagggtatattttaatttggcaaatactaagtactgttg
+gcgtcatatgctattaacggttggatattaagttatgtcagccgtaagcaagagtgggcg
+aaatattttgttacccagtgagagcactcttagagtttggatacaataggccatatgttg
+acttaagaggacgtaactacgccgtacaccattgttcaaccgacttcttggcaaatagaa
+tcgtattagcaatcttaagaatagagacacgttcgtgttagggtatactacaaatccgaa
+aatcttaagaggatcacctaaactgaaatttatacatatttcaacgtggatagatttaac
+ataattcagccacctccaacctgggagtaattttcagtagatttactagatgattagtgg
+cccaacgcacttgactatataagatctggggatcctaacctgacctatgagacaaaattg
+gaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctgttcaacagatga
+tagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaatttagacagaat
+ggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaataggtaaacgtg
+cccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgacgtgttcagaaac
+ttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgtttctgaaccggctt
+atccctaagatatatccgtcgcaaactttcgatttagtcccacgtagagcccaagcgttg
+tgcgactccacgtgcatgcccagaaatacgagtttaaatttggttacatggttaattttg
+accgaagcatcgcactttatgattgataattggattcaatatgtcgccctatgcgaatgc
+aacatgatccacaatttggctataagacgtttaatccgtatcacactttgtttgcggcta
+gtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactccgcaggtacttc
+aaatataaaaactaatcaaacacgacccatatgatcatctgaagatatttggaactttct
+cgacaaccaccctcgtactcaatacttacactaatcgacaggcacacgcaacgtgtacag
+tcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacgcttatttctcta
+gtcacaattagttatctacgagacatcacgagggagcaaataagcgatgttatggctaca
+cataggcacgtatgaatatgatataagccagttaaacagtcgaaccatcgagcaaattct
+catgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatgtaacttcttctg
+ctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtattagtttaaatgc
+gtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaatataacatctattt
+gttatctgattgcctacttatggctttgcggtcgtggcgactaatgtctccaatcctttt
+gaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcactgcatacatata
+cggtagcaggtagggacctcacgcacccttattataatcaatagtagttatcagtcaacg
+aggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgtctaggcgactat
+cacgcattaccaggcgagatttaagccaattttgaatatagtcaacgtaatttttactat
+gggttccaccgaaacgccttgcacaactaagaatcccataaaatatcgatatcaaataaa
+agattgtgtcaataccttcatatatattttttcggttgactaacgtgaactaaggttagg
+ggttttgtatgtctatataggaaacagtttcttttctgtcctactttagtaaagtcttca
+agccttactccaaaatcacggtgattaagccgttactcagcagcatgattctgcctgctc
+gggtcctaaaatccagccttgtaagagtcgctgtgtattagctagggagacctttgttaa
+aaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatcttcagctcgtgtc
+attataatatctctcccccacgcttttcactagatatgccgtgtaagcaaacaccttatg
+cttaatttcgaaaatattggtacttgaaaaaagctgtaggggtacttaatgtctggtagg
+agatcaggagagaattgagtgtaaaaccgtaaagccctcacctgacttcatgtaaatggc
+ttagaagactccatgatttaataaatactacgaaggaaagactggatctaaagataactc
+tagtaaggccaactcccttcaatgctgttgccagttataatccaagagctgtccttttct
+gaaccatagcggcttctgaagcgaactagaagcaaagttggttctagccagacagccaca
+taccctgtacgggtgtattactaaaactggtccggtattagttcaccaagggaggaatta
+ggcaaaggatctaggtatgcaagtcggagtattacatccctaccctgaatccatcaatag
+gttcctctgtactggccttcgcaatgagtattcaaggttgtacagccgtataataataag
+atagtgactatgaacgggaagtaacccgctcaccttccccaaaacattgttatatctaag
+tattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaaattacaccgcac
+ttaagccgcttttgatttatatttttccaatgcgcttttaaaaataattcagtcctacat
+actaattaagacccttaaacggagatatcacaagttaagttttaaccatctcgactaggt
+ggaactatagatacccaactcaatttatcattacctgtaatgttcctagaaggattgcat
+ttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacagattctgagaaat
+cacctaaacctattagtcagagcacccggttagaaccagttgtcaaaaaatagagcggtt
+gcatgagacagaagtaacgatgagatccgttgtaacgttgagacatctggcctatcgtca
+atacagtcctcccttaaaaatatttttaaatactaggcaaacccaacataggttagtcct
+atgtgatacgccacatggtatatcattttgtaacgttacctagggataatcaggaagtgg
+aattacgcaaaagtagacagtgaaatgcttagggttatagtctagtccaaagataaagga
+taaagcacgtcagagaactatattagccgaatgggaatcattgttaggagactgtggatc
+atgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgtttttgtttgaatctaa
+aagagctttgatgaccgatagtacctgtatactagttactgtattacgtgtctaatgatt
+tcggattggggtccccagaatcagacgtcattgtagacgattcaagtttaccaatttaat
+ttcccagctctccttggagaactatcgccaataattgcagtcactttccttttctgaaac
+gataaagccgtcagagttctctgcaacgttggacttacctgaggttctaacccactttcg
+gttctaatagtagttaacgacacaacgaataacctttactgtggggctttcacgatattt
+tttcgcttattattaatggttacgtcataagctggtgtccaaattaaggttaccggcttc
+gcagagtagttgtatccaagtataacttccctaatcataagatcgaggtagaaaattaat
+gctgtctctaaccgaacagatatgtcccactatgtggtatggacgttgctaattacttct
+gaagggaaattggtcattatggatacgtgtctaccatcaggtcggacgcagatatggttc
+tgtcttcagttgatccaccgttctttataggataataactgacgattaaagattatggta
+aatagattaagccaattctcttcttgtcagtgaagcatccttaactgacttgctctgcag
+cccctcatacatttagctattcaaagtaccggctcgtttcaaactctcccacctttggaa
+gaggttgtcaacttgataagtatatcatttacagcattttttcggacgtacctctaatgt
+ttcattgcagaaaattagttttttctatcgcacattttgcaagtaacgttagagacacaa
+ttatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaatatcaaaaaagac
+tgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtttatctgtcccgg
+cgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcgttcttacaagtc
+tgtctccaagggtcggcaaaaaagacccctccattctcgagcccactcacgatatgtagg
+gacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggtccatatctccga
+agttagaagggacatacctttagatgataagatcaattcttattgacgaaattcatccac
+aacggggaacaacttcaccctagacttacgtctgaaaagacacctagcgtcttataaaag
+gtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaacctcgcgcccttc
+cttacgtatcgacaagatagaggctatcgcgaatgtactacggaggcatgaatcatatac
+tagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcaccgtaattctaggc
+ataaaactccagcaatttgggggccgaaaacaaatgacgttagctaattaattatatgac
+atgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattgaacttcgtgcgt
+ttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttcatgcgtacctcct
+agttgataattccccgagcagtggttaggacacttttgtcggtatcaagttccggtctca
+aaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaatttttatgaagtc
+gtcgagacgcagttcctattgatttattctaaacggagatgtgcttcgtgggactcggaa
+gtagatctgtgtttatgattattgctactttagatgctgactgttaactccgtgttgttt
+ttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagttctgccacaagg
+tatcatatttacagttagtgctggttgcttctttcaaacgtggtgagtttgtgctatcac
+gtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttccagagagggtgtga
+tagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagagccggtgttaaac
+acatattattattgttatccaactaatcggacctatgcataaagcattgtctaaacagaa
+taattgcctatatacggtagttttagtgatttatatcttagtatcagttagagcttcgaa
+ctcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttctacaaacgaatgta
+agcggttttccaagtagtacctataaatcacagaaagatctgtctcagtatagttgaaat
+ggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaagacgctcattaa
+cgaatatagacaagacactatatcatataataaaaaagaacatggtgctcgaacatagtt
+gaattcaccatattgaaggggaatgctgacatgtaattcgctactagacgatcaattccc
+tacttgtcaaagttgaactggtacgttcttggaattaaatatgattgcgctggaccaaat
+tgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccgtctcttaccttt
+cttgcttatgataaacgacggtccctgtacatcactgggaattctcagcaaaaataattg
+ggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaaagattattcaac
+ggggcgataataggatcataaccggtatgcaagcgcattgaaagagccatgagatcctta
+tccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaatttataaatgtag
+tctgggctgtaagttgaagacctaagttataatgaagtgcaataccaaatcgattcatag
+tggattatcagactcaagatatctcctgataaattacagttgttaagatacggataaaat
+gagatttaagattagcagcctctaatctgtttcaatcccgttggaatgtggtatgcgatc
+aaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctgccatcgcatgcg
+gtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctgagtatagattcg
+tagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtcacacaagacact
+aaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagttcttgttatattc
+gatatactcttggctaatttatgtctgagtatataaaattaatgatattaacttgcattt
+cacggatcccttagaaaaagattttgaccgagcgcattataaacggttacaccgaatcaa
+tagaagcatacccaatagctttctttgaatttattgcctgcgcaacttggctgactctct
+agatccgaataattctatatggtcgtgacgaaactagttcattactgtttaaaatgccaa
+catgtcttttgggccgataatggctctttgcaaaattactcaatgatacgattgatcaaa
+gcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattatccgaaaatcttc
+caaaagagtccacgtaccatatctatctcatagcgacgcgaggggaaccttatctaacta
+tcattccatttaccgggtgactctcgatgcaggatccgattgggataaattgcccagaaa
+tggctcattcctgactaagggtaaggccgttctcagcaagggaaccccgcgaatctaggc
+ttataccatctagattgttaactacttgcctgtagttctacagccatactggacagttgt
+ttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgtaagtttaactat
+tacgtccgtgggcagataaggatggaggctgtatgtatcttaactgttacctaatatggc
+tggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgctttgtatactga
+ccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaactgtggacgatca
+tgtctctgcctagagcttcgctgtatcaattcctatagccagcgtactagtgacacaaca
+acaccgtgtgagaaaagatattagtccttacgtctgtctctctacagcttattgatgagg
+attgaacatggacatatagctccccctcaaaagcagatgctacctctttattccattctc
+gaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaatttatcggtaacg
+tcacgtccctttgagactggataaatatattaccaggggccaacgagcaattgttggagg
+cgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtctcgtgcaactcac
+ttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtgtactgccctggt
+acatttcctgtacaggactccaacagtgtagattcctaagatagctgttggagttgcctc
+acgccagatcgaaaaactgaataaactagtgagctgagctgcagaaataccgcttaatta
+cttatgactagttcaaagggacctacgtgatgtcagacattgcaaggaagaaattaggtt
+tgtgcgtcattttggctggactagcactccttacttcccctactattcaaatgtcgtaaa
+cagcatgagacaggatcgtgctgacatttaaggtctattgggaacgaggctacctttggt
+cgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgcaattgcttatag
+atctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcagttcttcctcagc
+aactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaacctatgcgctca
+tttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattcctctacttagta
+gctttctttgattctcagaattgactgcaatatcactgcacaattctgtgccattactag
+acttctctgtattaacgtctcatcttactaacactcgcctaggacacatctgagagtgaa
+gtatttcaatacatttactgaaatcttcagttctaaaatccccgaataaggctcttatcg
+gtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatacgcaggagcctgg
+ggaacttagtaataactatttcggcagacaaagcttataacaagttgccggcgcgtataa
+tatttaaaagaccccttgagctgctcaattaaaacgctcacctggtataggctattagat
+agtgccgtcttagtaaggggcgggaattatcggataaactgatattttgataaaataacc
+gacttgttcacgacataagtcactaaggagattttatctttctccaaagtatatcttcct
+tggataatttcaaagcgctgcaatttaagttctgttactagtttatgctgctgggaggtg
+accggaaggcgtagtaatctagaggcaaattataagaagttcatcatatcattttcgact
+acaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagtaccctagatgga
+aaattatacgttaagccaagatttcgatgtaatgataattacctacacatttttgctatc
+cataggaacaagagctgttctataggctcgtggcatacgaacatttgctgccgctatgaa
+tattggaagctcttcaactacagactctattcttaattgccgtcgaaaatgggccgaatc
+ggctattattaatactcggtttttccgaggggattgttgtcgacagtcgtaattattatt
+aatattgatgttggtgaggtcatttaaatacaaccttgcagacaatgaataagggatcca
+atctctcatactccttttacaattgctcatgcccctatgcaaaccttatgccgccacacc
+tccgcaactctctcttctgaactgtaagtagcttcattactggtttgagactatactgaa
+gctgatgacattctaaaatggctattttcgaatgtgattcataatgtttatcgtttggga
+tggcagaatcacgttatttttgatatagcccgggtattctattgtatagaacgtatgcta
+caagtcattccccgaagaagactagaagtaaacaacatgcgaccatcgttaagccacgca
+aggctgtagctttatttcccgataacctatcttccataaatagcggacagcaggatactg
+acgctcaacatcagtggttatggtctaatttttaacttttaataaggtaacttcagcagg
+catacacagtaactctttaatttataatcaaattagaagtctgacacttcttatattttt
+ctatcatccaacgcgatcgcccattagcttattgtgttactaataacgtatctaaaccaa
+tccttttcaagctactgcctatattgtcaatatatacaaacaacaggatagtaggctgct
+taaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcacaaactttgtagac
+aacgagtgaaatttatacactacgaagggccagcgtacaagacccatgaattaggcgata
+tgtttattctgacatattggtttatccttaatctgtcgctgtaaaatgaagccgccccca
+tccctgcgaattttttttcgaagattcacgactgaaatataaatacgtttggctatattt
+atgttggagggaggcaatagcctttactgttaaccgaagatttagccagtgagtgtgaca
+ctaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttagtcaatctcgcct
+ataagttcatatagctctggatataattatctggcccatgcatttatcatggcgcttggt
+gccctgtgtgaagccggcctctcatattgaaggtccgaagtattccatgtacattaagat
+cactctctcattcatgcatcttggcttaacaaatctggttgtccaagctttccaggcacg
+tatggtacaaattcggatcgaatacttataaaaatgatatgttaaactgtctaaaacgct
+catctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgtaatgctggtgcac
+tgaatgtgtaatacggttagaagggattagttatgttacaaatccattgaaaacttaaga
+agcattgcgtgctcggagggtgcatcttttatcaagagactaacattattttcaacgacg
+tacatgctttacaatagggtacttatcaaacgccgagaaacgcgcctatagtgatgttat
+gattatgacccgatatccattggaccgaattttatgtaggttcccagcgtactcgcgtaa
+tatctcggtattgccataatgtaatacttgtcggtctctcccagatgaaaaagcgttaca
+gagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggtaacggccgctgat
+ttcatatagatatacgataagttggtatagctctactaggtggcatccacaatcgttgca
+tttactatagctggttacaatcataatctataccgttccttacatactaccatagcggga
+tagcgtttttttgccgttgattgggtttaagaggatgtcagtctcattatatccgattcg
+gtgggagagccgttgttttcaaatcgcacactttgtgacataatgtacaagataacaaaa
+ctgatataagatataaactgtcaatatcaccttgacacttgaatcaaagtaaattaactc
+gcaaatataatttgactaattgggtgcagatttctcaattaataaaaaaatggcaccgga
+tgggcttacaagccccttatcattcacttgtatcatgatttccaagaacaatagaatttg
+ctagcaagtatgaacagagattcgaattgcatccacagtacgccggagcgtttattttaa
+tgtggatatgacgatgtactgttggcggcatttgctagtaaccggtccttatttacgtag
+cgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagagaaagattacagt
+ttggtttaaataggacttatcgggtcggaagtggaacttaataagcagtacacaattggg
+caacagacgtcttgcctattacaataggattacaatgcgttagatttcagacacgttcgt
+gtttggctattcgtcaattccctaaatagttagacgatcaactattatcaaagtgattct
+ttgttcatcctccattcatgtaacagatggcacactacgcataacgccgaggaattttaa
+cgagatttaagagagcagttcgggcacaacccacttgactttataacagctcggcagcat
+aaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgtacttagaaaact
+aagtggttcatgttcaacagatgtgacgcagcaagcctaacttatctattggttttgcta
+taaaagaacaaagttacacagaatcctaagggcttgtttcacacttatgcctagtgcttc
+accatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatgcgcagatattgg
+tgatggtgactccgggtatgataatggtaactgttgaccagcgcccacctcatcgaagta
+tagaaagtggttaggataaggatgagaccgaacttatttccggccataactttagatttt
+ctacctagtacacaacatcagggcggacacgaaaccgccatcacatcatataccaggttt
+aatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcaggcatatggccatt
+atatatggccccagagcagaatgctacagcagacaaaatttggatttatgtagtttaata
+cctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaagtgtaagttacaa
+ttattactactcagcagcttctgcaatgataaaatcttatcatacacgtcacatatgata
+atatctacttagggggaacgggctccacaacctacatagtactcaatacttacactattc
+gacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttgcagtactgcaga
+tcacagtaatagcttagttagcgagtcaaaattagttttctacgagactgcacgaccgtg
+caaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttgaagccacgtaaa
+ctgtacaaccttagagataagtctcaggctactaaaaacacgttgtggcactaacaggat
+catggttgattcttacttattcggctgaccggcccaataagtaaccttcaactagaacag
+aataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaactaacaagctct
+gtgtaaccaagttaaaatcgttttcttagcggattccctacttatggatttgagctcgtc
+cacaatattcgatacaagaagtttgtggtccgtaacaacgaaattttaattacgctgtgc
+agcctcatccaaggaattaatagaaggttgatggtaggctccgaacgctccatgattata
+atcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggtgttcgtttttgt
+tatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaacccatggttgat
+tttaggctaccttatttttaatttccgttacacagaaacgaattccacaactaacatgcc
+attaatttttcgatatcttataaaagatggtcgaaattcattcatttattttttttcggt
+tctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaaaagtggctttga
+tctcctacgtttggatactagtcaaccattactccatttgatccgtgagtatcacctgtc
+taacatccagcattatgactcctcggcgaagaaaagacacacttcttagagtcgatgtgt
+attagctagggacacagttgtttaatacgatagtgagcccagggagggcagtgcgtcccc
+cagtagatttattcagctagtgtaagtataagatatctcacccacgaggttcaagtgata
+tgcagtcttagaataatacttatcctgaatttcgatattatgggtacttcaataatccgc
+tagcgctactttatgtctcgttggacagcaggacacatggcagtcttaaacactaaagac
+atcacctgaatgaatgtaatgggattacaagaatcaatgaggtattatatacgacgtagg
+aaactctggatatatacagtaatctagttacgccatcgcacttcattcctctggaaactt
+agaagacatcagctgtacgtggaggaaccagacccccgtatgtagccaaatagaaccaaa
+gttgcttatacaaacacacccaatgacaatggaccgctggagttcgtaaactcggaacgt
+agtactgcacaaacccagcatttagcaataggagctacgtatgcaactcccacgtggtaa
+taccttcaagctatcaatatataggtgcctagctaatcgcattcgcaagcagtattcaag
+cttgtaaaccagtataataattacagaggctctatgaaacccaactttccagctaaaagt
+cccaattaaatggttatttcgtacttttaaagtcgcccgttctgttattacgcgaattga
+ttctactccaaaattaaacacaaattatcaaccgtttcatttatatttgtcaatgcagct
+gtttaaaataaggctctactaaattataattaagacacttattaccagatttctctagtt
+aagtttgaaccagctcgactaccgcgaaagatacattcccttctctatttttcagttcat
+ctatgggtcagagaagcattgaatttattctattcaccctcgtcgttcacagcgaatcgt
+cagtgtgatcagtgtatgagaaatatcctaaaccgtttag
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input.txt b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input.txt
new file mode 100644
index 0000000000..f1caba0d62
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input.txt
@@ -0,0 +1,171 @@
+>ONE Homo sapiens alu
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCG
+>TWO IUB ambiguity codes
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
+tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa
+NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt
+cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga
+gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa
+HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca
+tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt
+tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt
+acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct
+tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt
+gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa
+accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt
+RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt
+tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag
+cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg
+ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat
+actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg
+YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa
+KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata
+aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa
+aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg
+gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc
+tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK
+tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt
+ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg
+ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa
+BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt
+aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc
+tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc
+cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac
+aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga
+tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga
+aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD
+gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg
+ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV
+taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa
+ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat
+gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg
+gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa
+tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt
+tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt
+taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca
+cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag
+aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt
+cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt
+ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW
+attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag
+ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa
+attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc
+tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta
+>THREE Homo sapiens frequency
+aacacttcaccaggtatcgtgaaggctcaagattacccagagaacctttgcaatataaga
+atatgtatgcagcattaccctaagtaattatattctttttctgactcaaagtgacaagcc
+ctagtgtatattaaatcggtatatttgggaaattcctcaaactatcctaatcaggtagcc
+atgaaagtgatcaaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaa
+tagattgcgcaaaattcgtaccttaagtctctcgccaagatattaggatcctattactca
+tatcgtgtttttctttattgccgccatccccggagtatctcacccatccttctcttaaag
+gcctaatattacctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgat
+tcttatgtgtaccatatgtatagtaatcacgcgactatatagtgctttagtatcgcccgt
+gggtgagtgaatattctgggctagcgtgagatagtttcttgtcctaatatttttcagatc
+gaatagcttctatttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtc
+atgaccagatccacgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtc
+taacttatatcccgtcgcttactttctaacaccccttatgtatttttaaaattacgttta
+ttcgaacgtacttggcggaagcgttattttttgaagtaagttacattgggcagactcttg
+acattttcgatacgactttctttcatccatcacaggactcgttcgtattgatatcagaag
+ctcgtgatgattagttgtcttctttaccaatactttgaggcctattctgcgaaatttttg
+ttgccctgcgaacttcacataccaaggaacacctcgcaacatgccttcatatccatcgtt
+cattgtaattcttacacaatgaatcctaagtaattacatccctgcgtaaaagatggtagg
+ggcactgaggatatattaccaagcatttagttatgagtaatcagcaatgtttcttgtatt
+aagttctctaaaatagttacatcgtaatgttatctcgggttccgcgaataaacgagatag
+attcattatatatggccctaagcaaaaacctcctcgtattctgttggtaattagaatcac
+acaatacgggttgagatattaattatttgtagtacgaagagatataaaaagatgaacaat
+tactcaagtcaagatgtatacgggatttataataaaaatcgggtagagatctgctttgca
+attcagacgtgccactaaatcgtaatatgtcgcgttacatcagaaagggtaactattatt
+aattaataaagggcttaatcactacatattagatcttatccgatagtcttatctattcgt
+tgtatttttaagcggttctaattcagtcattatatcagtgctccgagttctttattattg
+ttttaaggatgacaaaatgcctcttgttataacgctgggagaagcagactaagagtcgga
+gcagttggtagaatgaggctgcaaaagacggtctcgacgaatggacagactttactaaac
+caatgaaagacagaagtagagcaaagtctgaagtggtatcagcttaattatgacaaccct
+taatacttccctttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttaga
+ggcatctctcgctcataaataggtagactactcgcaatccaatgtgactatgtaatactg
+ggaacatcagtccgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacat
+gagaccacccccgtggggattattagtccgcagtaatcgactcttgacaatccttttcga
+ttatgtcatagcaatttacgacagttcagcgaagtgactactcggcgaaatggtattact
+aaagcattcgaacccacatgaatgtgattcttggcaatttctaatccactaaagcttttc
+cgttgaatctggttgtagatatttatataagttcactaattaagatcacggtagtatatt
+gatagtgatgtctttgcaagaggttggccgaggaatttacggattctctattgatacaat
+ttgtctggcttataactcttaaggctgaaccaggcgtttttagacgacttgatcagctgt
+tagaatggtttggactccctctttcatgtcagtaacatttcagccgttattgttacgata
+tgcttgaacaatattgatctaccacacacccatagtatattttataggtcatgctgttac
+ctacgagcatggtattccacttcccattcaatgagtattcaacatcactagcctcagaga
+tgatgacccacctctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagac
+gatatcaagcgctttaaattgcatataacatttgagggtaaagctaagcggatgctttat
+ataatcaatactcaataataagatttgattgcattttagagttatgacacgacatagttc
+actaacgagttactattcccagatctagactgaagtactgatcgagacgatccttacgtc
+gatgatcgttagttatcgacttaggtcgggtctctagcggtattggtacttaaccggaca
+ctatactaataacccatgatcaaagcataacagaatacagacgataatttcgccaacata
+tatgtacagaccccaagcatgagaagctcattgaaagctatcattgaagtcccgctcaca
+atgtgtcttttccagacggtttaactggttcccgggagtcctggagtttcgacttacata
+aatggaaacaatgtattttgctaatttatctatagcgtcatttggaccaatacagaatat
+tatgttgcctagtaatccactataacccgcaagtgctgatagaaaatttttagacgattt
+ataaatgccccaagtatccctcccgtgaatcctccgttatactaattagtattcgttcat
+acgtataccgcgcatatatgaacatttggcgataaggcgcgtgaattgttacgtgacaga
+gatagcagtttcttgtgatatggttaacagacgtacatgaagggaaactttatatctata
+gtgatgcttccgtagaaataccgccactggtctgccaatgatgaagtatgtagctttagg
+tttgtactatgaggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgac
+gaatttatactaatacgctttcactattggctacaaaatagggaagagtttcaatcatga
+gagggagtatatggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcat
+tcttgaaagatacataagcgataagttacgacaattataagcaacatccctaccttcgta
+acgatttcactgttactgcgcttgaaatacactatggggctattggcggagagaagcaga
+tcgcgccgagcatatacgagacctataatgttgatgatagagaaggcgtctgaattgata
+catcgaagtacactttctttcgtagtatctctcgtcctctttctatctccggacacaaga
+attaagttatatatatagagtcttaccaatcatgttgaatcctgattctcagagttcttt
+ggcgggccttgtgatgactgagaaacaatgcaatattgctccaaatttcctaagcaaatt
+ctcggttatgttatgttatcagcaaagcgttacgttatgttatttaaatctggaatgacg
+gagcgaagttcttatgtcggtgtgggaataattcttttgaagacagcactccttaaataa
+tatcgctccgtgtttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtgg
+tgtatatatcggataacaattaatacgatgttcatagtgacagtatactgatcgagtcct
+ctaaagtcaattacctcacttaacaatctcattgatgttgtgtcattcccggtatcgccc
+gtagtatgtgctctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgtta
+ggtaagatctctctgaattccttcgtgccaacttaaaacattatcaaaatttcttctact
+tggattaactacttttacgagcatggcaaattcccctgtggaagacggttcattattatc
+ggaaaccttatagaaattgcgtgttgactgaaattagatttttattgtaagagttgcatc
+tttgcgattcctctggtctagcttccaatgaacagtcctcccttctattcgacatcgggt
+ccttcgtacatgtctttgcgatgtaataattaggttcggagtgtggccttaatgggtgca
+actaggaatacaacgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaac
+gtgctccttgcttagcttgtgaatgagactcagtagttaaataaatccatatctgcaatc
+gattccacaggtattgtccactatctttgaactactctaagagatacaagcttagctgag
+accgaggtgtatatgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcga
+gaagctaataccggctgtttccagctttataagattaaaatttggctgtcctggcggcct
+cagaattgttctatcgtaatcagttggttcattaattagctaagtacgaggtacaactta
+tctgtcccagaacagctccacaagtttttttacagccgaaacccctgtgtgaatcttaat
+atccaagcgcgttatctgattagagtttacaactcagtattttatcagtacgttttgttt
+ccaacattacccggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgta
+ggaagtgaaaagataaatat
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25.txt b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25.txt
new file mode 100644
index 0000000000..c32ac3c876
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25.txt
@@ -0,0 +1,9 @@
+>ONE Homo sapiens alu
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+>TWO IUB ambiguity codes
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
+tactDtDagcctatt
+>THREE Homo sapiens frequency
+agggtaaagtttgtgttgcgttatagtctatttgtggacacagtatggtcaaatgacgtc
+ttttccctttaacaaagatactctgggcaacacacatacttctctcatgttgtttcttcg
+gacct
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25000.txt b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25000.txt
new file mode 100644
index 0000000000..fd4414b176
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25000.txt
@@ -0,0 +1,4171 @@
+>ONE Homo sapiens alu
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATC
+>TWO IUB ambiguity codes
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
+tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa
+NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt
+cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga
+gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa
+HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca
+tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt
+tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt
+acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct
+tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt
+gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa
+accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt
+RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt
+tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag
+cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg
+ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat
+actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg
+YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa
+KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata
+aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa
+aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg
+gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc
+tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK
+tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt
+ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg
+ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa
+BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt
+aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc
+tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc
+cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac
+aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga
+tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga
+aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD
+gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg
+ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV
+taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa
+ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat
+gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg
+gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa
+tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt
+tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt
+taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca
+cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag
+aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt
+cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt
+ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW
+attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag
+ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa
+attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc
+tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta
+aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata
+cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc
+gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg
+attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca
+BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga
+DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat
+tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM
+tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR
+tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg
+taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc
+aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc
+DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa
+VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt
+agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat
+gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt
+tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt
+catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt
+tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR
+aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat
+aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac
+acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS
+tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga
+aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM
+acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt
+RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt
+RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta
+tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac
+gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt
+YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc
+ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt
+ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat
+gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta
+KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD
+aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg
+gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH
+taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact
+VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV
+NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa
+MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag
+cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata
+ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg
+tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN
+aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc
+actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg
+tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga
+gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa
+BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca
+aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata
+aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat
+YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt
+aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW
+cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata
+tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata
+tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt
+MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac
+taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta
+tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS
+RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc
+agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata
+NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa
+gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata
+aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt
+ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW
+cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt
+tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa
+RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt
+tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD
+gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc
+tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta
+ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM
+tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc
+ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc
+BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt
+gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga
+acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag
+gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc
+taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat
+acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta
+tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt
+catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa
+tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB
+atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR
+ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta
+ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta
+cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK
+SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW
+VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc
+BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct
+NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt
+tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa
+ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa
+cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa
+VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR
+atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac
+aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc
+tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac
+RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag
+gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc
+tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact
+attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc
+atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga
+cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt
+NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR
+ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat
+cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg
+aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac
+agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR
+tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga
+ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg
+ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa
+tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag
+taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg
+tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN
+YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt
+ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa
+tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat
+ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg
+attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt
+atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW
+YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta
+gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV
+MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta
+tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt
+ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa
+aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa
+BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM
+tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK
+StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV
+cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN
+atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg
+atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg
+ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct
+gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM
+tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD
+BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc
+agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga
+HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR
+tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt
+aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa
+catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB
+aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat
+tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt
+cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag
+DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat
+gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta
+tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM
+atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc
+KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt
+tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata
+tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK
+taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt
+NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa
+HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa
+ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg
+tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK
+cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga
+ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca
+HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg
+gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS
+BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg
+gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat
+KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact
+cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat
+tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD
+taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM
+gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt
+aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat
+acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta
+RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc
+attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac
+KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS
+KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD
+gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB
+aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct
+aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga
+ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY
+tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga
+aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta
+tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY
+MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc
+cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta
+caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt
+ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc
+acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat
+tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc
+gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa
+atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga
+aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat
+NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt
+taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa
+aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat
+ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca
+DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata
+tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat
+aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa
+ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM
+ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca
+RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa
+aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac
+aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt
+aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK
+tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat
+atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR
+BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc
+gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct
+cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN
+RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat
+taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt
+aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt
+gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct
+gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa
+aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta
+gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg
+ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat
+MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct
+SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY
+aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt
+VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat
+HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc
+agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt
+gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg
+agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg
+tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag
+gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga
+VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg
+tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV
+MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt
+actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa
+WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa
+tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD
+KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct
+BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac
+attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB
+VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD
+aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca
+tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat
+tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK
+tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt
+VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta
+tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat
+ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa
+tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg
+WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta
+tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc
+tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct
+MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat
+tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac
+atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg
+aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt
+aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa
+aatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtaga
+YctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVtt
+WtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBt
+ttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatg
+aDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtc
+ctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttD
+gaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtat
+NgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtD
+atttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKM
+tHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttattt
+aacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNa
+gtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttat
+gtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaag
+tYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaa
+aRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMaccc
+ttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRta
+tStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatN
+catacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgtt
+cttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatc
+aYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRag
+NtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacR
+ctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSgg
+RaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatH
+SaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVM
+RSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagc
+agaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcW
+gKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaacttt
+MctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattW
+aHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaN
+cttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgta
+ctgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHg
+accaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagat
+tgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtc
+acaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcat
+SVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaa
+tgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattg
+gatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtctt
+attDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNcc
+DtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDc
+aDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtac
+tggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttc
+ttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaR
+ctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMR
+tgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYa
+tagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttc
+attaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHta
+aggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgt
+cttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcag
+aMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttc
+VtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaa
+catYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctg
+taggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatatttta
+cVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBa
+DtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDga
+tgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctM
+acaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMta
+tgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStct
+YSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSc
+cKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtD
+actaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacV
+KgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVct
+WgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtc
+ScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRca
+aatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRtt
+aaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKtt
+agDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatM
+NYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccc
+taDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttat
+RtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNg
+aNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWH
+tWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagc
+aSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacM
+tRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgta
+aattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRV
+tccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHa
+DaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaata
+YaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagc
+tNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStga
+ccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccacta
+cgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtag
+atcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaat
+cttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBB
+aKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHac
+acRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaa
+tagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaa
+ccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYa
+gacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgat
+ttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcg
+aWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcat
+cagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaat
+MctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHg
+atctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDat
+taggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcg
+taDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVga
+ttaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgB
+cgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtata
+BaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBat
+tgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKt
+gBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacag
+gatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMa
+ataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBca
+aaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtt
+taaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDta
+atatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVt
+atattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSat
+aggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYta
+cYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttt
+tgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYc
+aHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNt
+acKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgt
+gatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKD
+gcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaa
+gMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgc
+MaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHa
+cMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagc
+agttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgt
+taaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRa
+ttttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaSc
+aatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRtttta
+VaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaa
+ccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatga
+tagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNa
+tcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggt
+gaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagat
+tYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcH
+DtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHa
+acttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWV
+aagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttg
+gataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcaca
+agagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMa
+aataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcB
+gttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaa
+ttgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMS
+gggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaR
+SataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttM
+tattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYt
+aNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRH
+MaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttc
+aggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaa
+ggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKt
+aNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYtt
+YaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHta
+aaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRY
+aMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBtt
+ctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaa
+atVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaa
+cVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMt
+attattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatY
+BtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatcc
+aagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataa
+agtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtact
+BtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVta
+agaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNtt
+KgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaM
+attaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattat
+BRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggat
+StattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWW
+atMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDa
+HggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggttt
+gHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWK
+gaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMactta
+caaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtg
+gattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMag
+aggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtca
+aKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcV
+HtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcS
+gRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaact
+ttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBcca
+taatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgta
+atatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacaca
+gtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagc
+YRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaa
+aacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatgg
+tDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStcta
+tttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtN
+HaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHttt
+gaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVt
+SttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcg
+HattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRac
+tctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNataca
+tttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWat
+caatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttN
+atWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNc
+ttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataM
+aaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaa
+acaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtc
+aagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNat
+ttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVg
+tVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaacca
+actMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagag
+cSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBc
+ttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaat
+tHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgH
+tgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataata
+YtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaD
+ggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcata
+aatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatg
+DtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaM
+tatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaa
+ctttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtSt
+atatatagtcttaaaaMtcatgttcaaDactgRttctaagagDtatttttagcgacttgt
+gRtgNctgSgRaaaaatgcaMtYtDcatcaaYKttHcatSWgaaaatDataggttatgBD
+MtgttataacaaYSgagttacgttatgtDStttaaatctcgWKtcSacgagagaSgttat
+BMDgtcggtgtgcgaNtaSHBatBtttVMgVcagaNatcaDDaKMtMYtatagaBccctc
+tDtgtatttatatKNtgggtatgtRaacttgaWaaYgcaHatccctggtttStatMtcgc
+MtaaaWKttMVtWctVtgttaKDWctgWaVttaDVatgKtagagtcatctaKWgtaaMtt
+SacBaMattaKaaHDataattgWtgttttgtcatBacacgtStacaaagtNctNtgtgat
+cHtWttcKaagagttttaaaaWacgRacatctNatVStgaatDHgttWcgtRKcatatat
+ctcaNttaaBDcctgaaaaaDtaYaHaKttNtaYVaVtttaDtctacttctWttaactaa
+ttttMagWcaatcccNKYtBaacatgttgaKgKcgcBHaatDMttatatcSWacatDatR
+cWaMtDgatBctHgScttaaaHtSgKtDtttattgtRStWgttccatatttcacWttcat
+attgtaHVgaBtacaMtgMaaagDaataactDatattagMaNBagcttcattcgtaaKtg
+tatttcacMtgBaVtaattStcttagtYgtgtcgccttKatgggtgaWaataggaatacM
+MagaSKRttBgatgacRtgMtagaSRataggtatcaccgaNaaaWSWacDgatacttgat
+tagcttgtgVMttatYctaRgHVcDtVRRtSaMtcaVtVtatcaYaHatattaaVaatct
+aBtgtacRatNtatttgaYatSaHctaNgNtYtYaYagattVgatcRtaacgYggtgtat
+KttaatMagatgRtatatgHaKccHaaaaYtgaacgaWaNgtYHgacagaYtctaVtacc
+cgatttttaaagcDttatNRgattKaaattttcatctaatgccgcaataataattgttat
+YtagtRNtaagttggtHaKttWMtDKgatSagBYcgRggtWaVaattHtatgtaaaMgSa
+aagataaKaaKgttDttttRaagaacaWRcaacDgtgttaatattaKtatcaWacacatt
+tVtctgatHRcagtttNcaaatcNctNttttataactWacBBttgBttaaaRaWtBKaaa
+cgtatcRcaMaatgYacaaaagtgBataStWYtggtatgacaKWtctSgcKHgtcNaMNc
+ataSatattgactacMcataattNVtDaRccaaatcagttttYttagYaacgtaatMtMV
+atNgKaaMaaBgattaKttatDaBcttKtccttttacDagaYtacHgttggacaaaVaat
+agtYatcataSgatcaaWVttcgaatgaccctccttNtaSBWaatttDttttcaatatYg
+gctatDcttatNctttagDcMttcaacWaaNattSYgctttcaHcRaattaataaaatcV
+ccRaattactctaMaVRattacagtgRcDtcgtgctcttNtWVtacagtHtatHaBDtcW
+ggtgctcaaRHtatgtDgacStgcaaaVKtagttataatactaatatgtagScaatRSac
+aattgtattgcagatHHtgBcaatKKtaaMMcaRcgactatKBaMaYatgKatttDaaNt
+RatattgtatWttagcaaaaacaWgcacaaHcataYtDaHgttataaSacgcagggggtY
+atgcKctaaaHgcVgctBDaVttccStagNgcSgtatgVYaMatcaWRBtVtgYttgtgR
+cYttcgctgaacNttgtgtctattWttttcctagMtagaWtaKgatStScatMaBtaSta
+SactattYNatctgtacRatYDaatgatgatatgaatYaaaaSHttaaYMaWtDcaNHaB
+caYtgVgcatVaacattMRatBtaatttaDacRtagtaaaNYVSMtcagaaDtttDHtRc
+YatacSNKaaMcHgatBaaVttactggBYgaYatttttgcDacHctWatcgtagagtact
+cattDggtcatKaSgctttatttagtDtRBacttaWYaaaattttgaccttaaWtaatgc
+RgccacttMtaggKtcBtgacgaHctttatcgtcStatMHDNagattatNagVaaaWcgg
+aaaYcaVactDYactaStattgBHtcYctgggtacatataaYcgaYagaggaggacaVat
+acHRtYtctgtaVgaYcNgaaaNatacVgcNgtaatttDcatttttcaacttSNcaaDat
+VYctSgcaccttagMgacgcttgaSttaaaatagttaggRHttaaacMatagcaWgMgag
+tcgctagtgtKgactaaHttattaWgcaaaaaaSatatgcgttaBNggttaYVatgaact
+ttttgccatataaataRatSaBctagttataBccgaaacaagatacttaattttgaHgHM
+gtaaKctttaYtaaRacBMtBaYgaBaaacaYtVtagcRgWatHaWagattWSacStMHa
+tttaDagacaatcgtgtKtttggaMtgtWtgtgcaaNaaaaWtKaaBcMWtcttctatga
+cVgagcgaggHaYYtttWgSaaYYaWtRYHHaMDtctttacaatggaaMctataagcttB
+cgHcNWaatttgtatatYtStatctagcactgtVttccagaaattaDtttaRtVataBtt
+WagcatDMVactYtgcatWtttgaaMggKaatgaaaaHtataDtgYcMggVaaatSMHtt
+tgVttaYaWaataRttgttaYttattttRtWtataaBgtDtttatatcVgaaBcaDtatg
+tcaDagaWtgaYtWctcVagctcagctatatagcRVtcaKtaataatHgNaccgaaaatV
+HBaatattcgttaVYttatttctBYaatKaagaccVStttcattgaMagSaaaaccccWK
+caaNtMYacctaDStagaaatttatcatVgtcaatacccKattgtaaagtggWgtatatV
+tagBcttDaBacaattWtDYKtatRKggStRtaaaWatBtaagtaattDaaaaBRacWta
+agtacaSttaaatccgctaaccKaattgVWttDattatttattKaMtcYtMRWagMtcgK
+gBagacgggVaaNaaatgctKcgtaataaKtaaagtccWcttHMatSYgataaatDttBa
+HccattgBttSgaaHYtaataaaMtgaagatgtttBgRcattaRaDHcttBgaMaWaaVM
+MattaatttgtgBRctattgKMagNcMtatttaaaWttgaaacatWgcScgYYDYgttYt
+VtattgcKcWtagcggtgBaSctaKatacaaVtcaRDccccgtgttBgKgggtHagcgaa
+ttaaagMMttScggtDttttaHcSaagaacactcacactBcVgaKNaDHacacttatSag
+aattSKHtcagtataaatKaaHtgaaRagaaVcBtaHtaaatcgatcWcaRtaaaattta
+WttaagtcaggRctgaWcttDttgactttaVSaaaatggtaWDaRMtBtaaaaaKatBga
+tMtctatatcaVaMgatttgNagtDRttDatcttttaMtYaaatcggagttctctaYatN
+tagaNcgMMactacHcaagtaaaatStaSaacaHcacSgggtNKatggaaagcggaaKgg
+gtaYtacSgccgBaggcRacgtVgDtggaMcYaaaMatggacgYStKKatgaBcaaRtSt
+ccSagcRccgccgcSDtgcggBDgaDtBtSSggacMttttaWcatcMatgtNMBWgataa
+tcaaVtgaataataaNatgcaaNttNctgacDMcaHccgatgKgWVttccaStggattct
+cDacttttttctttaaNcWaMWccWKWttgaaaMctDaaBactRtVattttBtcMaNttW
+cKacagttKSttaYaWSactHSaBtHgatgttacatgcatatMtttgtaacScWHBatHa
+ctggatatatctgagMgRSatctaaSttaVagcaRcttggaYaatKHtagBBactattcg
+taaagaagttgtVcgatgaVatHMtcaggtcgKSgWattgaaaVctccVgtDcaaatgaa
+HgMYactcaMatatatattNVttWtWaatttacRagKataaaNtttacaaWgMVactatt
+aSgaggVaaagVtaccDRHaaataRaHaRgcattMttcaatcaKaaataDcaDKtctcga
+ggBggacctDtttatHacWVaWgatDctaNaNcgKatcMtcMaatBtttggacgtgataa
+tagaaacRactcBtattttaKtgSaaggKtaggRaVtatagcccaNRttaccttSMaaga
+tcggDacNBatWcgaactacactaactNBtaStgVtNagcatctaVtaKatKgaBtcgtt
+tWaagWMgagRaNatHaaaaDtacagacaBagtgcaHaNatctcBccNttaagttDgaat
+aaNtcgctaacRBgtaatSttaatatgcataacccaSattKcccttDttggtcaatgggt
+tWaacgatacattBtgMaYgaRttatgatKaKgtattDtKWgataacgNBtaccgaKWat
+cttcttKtgtcttagcattcctWcaaHgagtatDMSgKtcagcttgVHaKcttDaataaa
+VaatttDgtgaaataaRgtcaVaatacttagtVatatgggcatgtDDtMtgtatBggatt
+HtgcVtgtgatcaaSattatKYVaacSNNttNWcgaHttKDaaMYHatcgttaattaStt
+gctWaacHtaKBtaaaaKHttcRWgaaWcRtBtttggBcDtgtacNttaagcKtaHgtag
+aaaaRttgaaacatagtWRaacYggtaaatcgctYaBtWDRtgttgSctaaKatNcattg
+tgtMttatccatatagctSacgccSNaaactacgNtgtgcttMatSKtcaaBaNaaacat
+aacagaaatagtagctcNcatcVgaagStaataVcDKKttcagDHDtattctaatgaggg
+RgBMctatacaagYactctMaaagtcgctttctcgtgaattatNcgatMtttaggcBaaa
+tctNtactaaRKtgKactattgtcatatgtacgagttMaaHSSgHgBatatcgcaSaata
+aaWgaagtatagaHgcttctttatgaccWaatttaRtaDaatttaatcgaaattgattMc
+atcaWaMtaWaKactttctBacactatNgtccttaWgtctgaccKatStaKtgagtacgg
+gcgcgtYNtatttagacctctKcatgatKWStcaataactaWgMSgHtgatctttttgtc
+gacgtSacttaYgcctWctcctctacaagVtttMaBactWVaccaYtgtSgcgttattcK
+tatStgaaKaccgNaataaHtatWtYtRacggcaDaScagcagHaYWRtRNcDtHtcVWt
+ggaataaaYttgVaNtgttagtYttgtagSaaatDgaggccDcgBRYStattatttaagg
+ccgHgggYRaaccMaagttatSttctttagcMtgcgMtgaSagaNaDagttSatgattWa
+tttagtDgcttgagtgMKaYWaYccagcaHatKctaKaDgctagacttattgattaaYtt
+atcttattattStaattWaRaYBWagYaatatgttRgScttgBagDaWgcgtgcVDaggc
+ttgtctaDRKacttgcaKBWRtaaVaSctKtacttMaaSVaWWcgSaNtttSWgtcggtc
+acttggVVtgagaataaataaDttgaaccaaaaMttaaaagaaaaaaaatcNBtatMgcc
+WagcaNgaVaNaaaaaaYaMgttaWtatHaagtNtacgacaBtMMattttWNaRtaaata
+gYaScKattacagctVKBtWNSKgYtYgtWatHaVatDaaatWgDatcctggSRagagta
+aaaMgatttRtaHacatggtaKagVcctgatgaMtaaYgatgtattattttHggBaccaD
+ctctggNNtYaatctVttgVtRtVcRacttNctttataggHSRtaRacaaattaacHaHg
+tgttgtttcBtBtatWtgtattttgcKagMcaaagaMtattagtStagcBacYaaHcagV
+gWtgtttcgtgDHaVtagDatcRaRtggtWtaactgcacgaggaaaRttSDaaVaSttaa
+aaacSMttactaNtcaacaattDtacttttYatVSacYtWtMttaattatcKtcttctat
+caKDtctStSaaacggtYccatgtgagagtWtagWKgcaBaaaaKttgNactaatcgagg
+cWtcDDaaaaaacactHattaattcactatYttaagacactaKaagRtRataaattttca
+tHggtaataaatgataHtggctaacBacDgtaatattRtYgtDNDBgKtcaggcHatttt
+gHNgWtaatttccgactactgacatVNttYYgactcgctctatttagaMcgggatHcgtt
+tatBaDSagBaaaagRttBggttaaBactVHgatgaatttattcaaaattgcacttcDga
+cttYcVttactVtttatBaKHagaWgtgaatggBtaaSggcagacNcttaDttVgMtWag
+attggVatttacHtctNcMatacttSatMagcttgtNcYaaScaYactcKctKtagScSt
+cagtttcatWaatggtgagaggHaggggcaacgcRKtaRcMaNtHaatRaRaaactVtBt
+gttaatRtWWcaaagKttccaaKaaatacgVttcacaaacgcggtgagaRaatggtgDMW
+atcWVScacaaaDaggaaHtgttSMaaaaaccYccDBtatYgtMagcSagaccaVcctcg
+gtVWaaagttatcNaagataataSaataaaKccgtaDtYttatYcttHttaagKcMctaa
+atggaatRgaaaVaaVtcKYaggatWcaBtDaggDatccttcYNtgcSMRgaRtNgaatc
+gttRttatDVMtagctttacatDVtatatatcagctaDagMtataccYgaggYaaatgDa
+aaatSgctctgatgtttVaaBcctgataKtagaaaccaKatatgttaDtgaDtatagata
+atacagtaDtatcNtgtDMtYcattRVtctataNtWttggNaSgtMgaaYctctDggHtg
+gHDccaccacKKaaacaaaatRatttccctttaagcRattMHctattHaRtataVattgg
+atcSttaaHaHgaaHNDtacattSaaggDatttcaaaYgctBcatattaaaKagtgccca
+tSctcgatRtaaaMtgWactttNMaWctYgRatDggaactcDcaattaKaactgagtatc
+tataagYaaaSRctggtacWtttccWtaYRtKHattatagWtKttaNgcDtatHacccat
+taatttataacgctMgaagtaacaacagMgtaYHYVtKMHtacMgKcaaatctgRYataN
+tcgttcaatacggWtMcaatYcBWaagYtVaDNagtatagDaaNtaaaYtttcYWttttS
+tgggataaMgatattagaaYtNctcttcBagactaYDcgtacHDWccKaHgttcttHgVg
+gVDttatcatKaMttttacWaaSattctatagaHaggKaDagBtaaagtcYccattgtYc
+atctaNgRgVtgaagtDKttatBKcggDtattRYgHccgtgcgBNMtttVRgacaYctSc
+taRacgtagagccgtacRaagtaHKagStSttttgYSatattaaaWHaaWagttDKaaNa
+NHaaHttaYcttMtcaaatgKttBtSgtccaaVaattSaacgttgNattgatatNctaWt
+VcagtactKcWacgVagggHaaRgaDaatcMttattaataacaBMaaVtgYtKgRgHact
+gtactatcBaMtVggtagKcYtHtBSaattagtaatgMcaVVagYYgWtactttccaaSt
+tDgaaMaMttcacttYtRgacttcagcttWtttagtgataMaattaagVtagaatatKat
+aagtagttaagHMRaDattaHaaVcctDtagtcVYcaataaYcNttNaaaHctcaRaatt
+tcaNRgatSHgVatagctRtcatgaBttMaaagRtcgHVtgRgStgatttgtagaKagaR
+WRctgNaHYgaaatBctgtttRttNWagaccgagKgtgcggHKVttaatattaatataat
+aDtaNcctacaaRgcaNMctctgaaSHWWHcttagtNagtWgWaaKtYaNgcBattatcc
+aaaSctRRHKaNtKcBgtgagaDRWBttactaaattSMctatatagaaYacDgatttccV
+taagRtgRataatatagtctttttatgtMgtcaacaaNtaaaaactctWtagaVaaaDta
+attatagtBStcgaatDtgattVaatMtcaDattVKWaagatagggttgtMRSgtcYgWM
+aatgNtagtcBttagtttctctWaaMtVgctWgSgtHagaSagactagKtagWggcattt
+HgttgacaaactcggggHggcWBgVgtatgggagVgagtcVcBtDctttagtctaagVWt
+HtgtttaScatacMBtKgattatRtgtttgtctttDggcHaBtRtgtaataNataattta
+taWctgaYWataStcHaatcRtaaVagDWaSatagtaccNDgaagtatacgttttacgac
+gKRtattgDctatRRattVtStaaactagatgVatttagaMaSaaaattVtatYtgttgt
+RMagtHaatttSttaaYNaggWagtgcacgaMcactgHgtgtgggHMgtKacttaaYgtc
+gcatcSatattgBaagtttacMtYagSatttatttaVtaaDtaWaHcgNatactgactHt
+ggWtataDcDScatactcStcDtgtcgtgtatgaggtHaaNKgDattgcBccaagKgtat
+gacKSMtttttgttcaaatcaaYtagtaSatgDaaaMccKNaMaatagaataagcaatta
+ttataaMgagtgaSgtctNYttattHaNaYYtcDDtaatNRgtatttaaYtaaatcactH
+VaHcStccttcccaaVatcVggatKtatgRaaDBgaYtttacttYggactSDtaBcaaNg
+gggtattatattBDcttagagYNMatBgttYaagactMatgttRgatacccgtaacacBH
+tatKacWgatRcHttaattYtKtStccaaatVDcaNKHHaaataatagtagtatcttgct
+NDggVaVVtaVaRaaagSaccgttctcMtVtgNBgtDtttctYgttactBctcRtStWtW
+DScMtcWSaRatgaataRHctaNtcStctYtWacagatgtatYBtHaHWBtacggtDcaa
+BtatcaggtcaVattaNctactgaaaatWaDgactNWtMtggagaattBaataYcMWYcg
+atMYatWtgattSatgaRtDaRgccagtSttatatRaBtattRcWtagtVgaagttMcta
+ttatatDttaggtctKtgtgtBagacgttatRKtgatctatttBtataactgataacKcg
+gagtgHgtVttcttgtKDgcDtaYatBDatcaatattgttNtaBacatcgcNcaKcaWcR
+ataWcVgtacgScaWgttcggHcMttcRccatgaRStYgNacagatacYacWWtggNaDc
+WagttHatMaNaatNtcDMDcMaKgHNatScVgatKWatatgNRgtccgYgaagattDHg
+tMtcHaSNaaattBatRagtaaatttacaagHWtKatcaagtccHtYcctgttKDMSgta
+ctactVctgacaaaaHgatatacataatKtStHgctScSatNatacaYttaaWHtctgaa
+tYtagtHtKaggccWBaStaDctaagagNtaatcaatcgttNgaYDaagtaaaaHataga
+atcgcgBaYaBgaacSaaWaaaaactccgcMttHttYgtaagaMctKBtacSagattcBa
+aWtaattttacRttatcgaRtacaRHgtgRagaaBcttaVgacVDgggaatVatagaact
+RRtacgYttNattVHgaHttacaaaaaaaYtcRWtgtgattatgccaSDtttatKWgaat
+atSNDgattttaacgtcSRtatggttcttcBtWtttMtBtMScttaHatBattHacYtaY
+acattcgttKgtcStSctcKtatatttcaKSgagcttccaacaccRDtttDaccattata
+tSgtcWtVaaagttgtagccattDtYaatattDaccatcVDaaRccagttttgtcHacMa
+ttcHgaNcatgttKcVttcctgtgcSataaatattgaKtctaWctMRaKggtaYcaagtt
+DttcgttacRtatgatggHNaWMtKttcatattaaDaSaBaaaMtMatBgKtttgHtHac
+taatcatcgtWaatKaaWcaWtcctVttaaNaggaaaagtaaagaDctNttaDBaBgata
+gMgaataacRcYggatcRaaaHaagatRDtVRactaYagttcaccaaWtctcSSaaatcS
+KattctggDgaacagDtaDagacagtgtaattcaStYttNaStgtaHgccttaScatMRc
+accWtcatttatRtaagatWtNataaWtMNtDVgWttgcWgtgaRttttRgWcttMtcta
+HacaaYtKctgaBagtRagacttDatNttaaaDgRtatNcHatcSDgtBatcttacVcYa
+cNgaattaacgagttgYgacttDattatacBattMgctagcctagatVcaactNttccta
+atgtDaacgYaNatagMatSWtYBaaaRtgMtatSRgaataYaScaVgtaScMagatNNt
+ttacaaHBaWtNtRtctaaacDaaaaWMcaNtcVaDNcagaDtgcWKYgagttaHtgcDY
+ataaacataBaWWtcggtatgtgaaScaacctttRNatcgttaaagcaDctaatgcBatt
+tacaattVaMgSMMtccYaaaBYtggattttcataWttgBtatDtBgactaatgtccWaa
+HataaScHttWttDtcgtcaagMctMDtaaaatRtBaaaacaatgtcagcatBgNNBVtt
+ttttcBacWtttWtSWWtgaaaaSacgBtaaataaagtcDStaagaactgttaatYatgD
+ctattactgaHtaaatStHaagacaKtagDtaaHaDgttccaaDtaaggacactctDggc
+gtDagtcWaHgRcHgDgaSctttattgtcttttccttRYaDgNactaaatcaWggcNSBa
+gttttatatStKgtcRtgattaaggtcaSBttaacaaKatgggatcaaattgRgcBagtN
+tcgDcatttWcctttgtNagDgctgcatttactttgtgtcaBgSatttNHaMcggcagSc
+tcKDtWBaagSagWatggYtVatSRgKagattgaVatKttcgatYatKYSgDaacNtcVg
+tttaWataWtgVctgcgSggMgatccatgagttgtWcatYWWcctVcNHagtNtgtKttt
+gatcaacttaSttattgatNcatWaVgNHcagStVHcggHacaaDttgDttWcaaRaKga
+aatKaattagtaWacattgaaatgtgaatgacagtgaRVtaaYagYtcggcatMttgaag
+gDgagDRcaKgHtacacaaaMcaBtagHactgKaatRtNttcttcatcatNgYgStggac
+tatgSMttgKtDaDgacRRgtWaVattgatttaagYctatatagactaagaggtatWtat
+aaactaYaHRctStgKWcgtRtKtYtYtagacgattRaaYBtaStcttaWataatcHtta
+taRcactgagtgggagccaattctcDtgDaggHcDRVaVVggaaBtRttaataaRRttgt
+aagKNcaVWWgtatacctgatcttBtcttRgaWcaVRKcagttSacttagcgtKtgtYWa
+tatcgNttcKaccacacVKctgattBtggacgtctgacaDtWKttattttgMBgKaacaD
+ataattWtBtBRtVtacataaatatttgtWtttatagtDtgcctagctHYaatgcaNaaR
+caatVtacctgggggKtagBgagaBgRaaNttttMtMagMtgtgattNctcNaKggWtMa
+tcttagWgtaatatatNctaYBggKaataBattYtaattataVtggNtcgtgtctaatta
+aacctHtacaaactDctDtctgatatgMtgataacWctgtgYSaaNScgDYaWtatDatM
+KgcaatttctgNcgtHtaWtagatatcYBttaattactcaaaVattYRWtatttDtaNMY
+MttgattataatgcgNggWaatYagttgBagNcaagaaaDtRgtaaaagctgcatctagc
+ttaVgtBttatagcKMSaattYtHcMaBttcagtcttgKatgVSVttKgttttttagtgt
+DHgNggtcaVtatttaacNtgaatatgctatMcatgaaaBtgBSaWctaataaattatYt
+tagtaDtaccggaatgagtaattggatttaacBtctSMgWYtgKgattacgRctctccaa
+tgtaggcctgaNaatScgYataaBBacaKtHtttcatgaaHtgBtagaKHVtacctVtca
+accaDaaWNHNaatgataattgatgWcagggtcMBtgSgRataHctMctgMHHtKaBtaa
+MtMgataaRWtagYtgaaMaSgctYtgcgaaHatDtatgtcWRatKatatYDcBgNtRaR
+acattMcagaHgaaagRccgcgWttggSatBagagcHgYtatctVtcatYaaVRtcaSac
+aMYDcgRtcaaWgaRgataMtaaaacaggtgtaaYcattgWgDHcWgttaVatttgcatc
+taatccacaaagaagSatgcgtagRgagtHDgaVcgtgcttatggMttttcatKSctNac
+HcctMaKRatttgatctaaatgHaaScataataatgtttgtgtHaVcaaaaNHaaaatcg
+ctgSVtattVttagaaNWcacagtgKtatgattHcYcttgDaWVataBatBttttWtaac
+tNaattttctttaaYHaMtttaaaccgStcHaVBaatcRacaaWactgtagVKtNRtcct
+agcWaatNgctKccttctcDaBDcatYHatatgcaataaBaagaatgDMttaHcaaYYtc
+actgttRtgacRaacctaWtBtBMagBctaaBaWtgatgVtttattataggttaattgta
+atYcaRtVctcttgcacSaaMaatactRSgcataKcagcaVNKttcgSatcaaactaatt
+DtaHtNaVtgttttttaWVtatNccagWttcgtatBcgttVctcBttaaaaMSaDattKR
+cctttcataHaattaatWaaataKcaHVaggaatataBYKHVtgVcVgtcHcttccgcct
+attDtMMgWaacttgWttYtttcMcgtcctaaVHtgWtggtgacKtcaWaYMttacttag
+VWtacgSatatcgWcKaaatHKaaaYttgtagtcaacWtttggtcaagttgaaBBaSHac
+VcgYgttWBSRWggtattttaYDtHatattcgatNttacaaaaVacaMccaaYStaataR
+ttVtcttagaVKaacaWcgccgtRatcatctaaatccMcctttaMggccHgYcDgaKcta
+tgMRYBagcaNDtgMtcRttgtgHaRttacatgaWcDtgctgtataggNggtgaatagBg
+agYNtatcagKtHcatBatgVKgaHWagattRDatatcgYcHagRtaatgWtcStagcVa
+tNaaaaKttgRaRBYNgtaaDtStaVRgcMccatMWaaattBDatttaatttataaHtag
+tVVaDRMKBtaacaatttttttDaRSgaaKDtVaBatcagtaaMttaagcctRgaNVggg
+ttcataatagNatcctacactacgcatgtcggaYgtaKcatggattgactttHtaattWN
+RaaWYggttcaaaggaaNtaatgcHcaaaattBtagcttattcaagVtatttWgcctaKt
+atBttDYcattagDacKVaYNccgYaYRaaMaattRaagaHtatgcttgcRagcgctSaa
+tagaaRacaRacSccagcacVMataatHgRtagcgaKgYRaDcVWSDVgRaMgcDgtaat
+tttaYttggtaaWcttKDaaYtatMRcgKccYcagtYcBgRccattcaKtgaSSRtactg
+acgHtgtaaaaBatWgcaMcBcYcgccagactcttcSatYattgatgaNccaaaaWaKat
+VgcaggtWtBcgttaRMagcaaagtgttcacatataaagaHWtKatctacttatatcacY
+RaaVagataagtaattttgatgtBctaataggtaRtaaHaattgtaRcStYSYaWRgMta
+caHcNSttVNScattNKaaKgBtagtgatYcaaaStactggttggggaBggtNtgtcaaW
+BaYVSNgtaataBNtagtatatcacMcScccVcgtVRRtttNcKaSRNaNtHRttattta
+ttgacaatggSaBagataaccgttcctaDNaattgctVtatNtHtatagSccaagctKtt
+aaacaaattattgtSHgMWgStttNaccattBMYatRtccStNgttgaaBcctVagcaaa
+atgatattcRaBccMWaagKtttttcMtgaRYNaataDttgttWRttattggHtNtataa
+tggttgtStYgaMcYVtcattaggtaatVcaNggaRtNataMWcctcYgcgagagRgcHM
+gcWtgaYtVSttgDaacgaaaatMttYWtWttcctgaKNttatttattRaattaagaccM
+KtttcWgtcaBagKSaWaaacaNtaYaDtBNaaagWtHgacaaagtgVtcatKcgcaatV
+aactatgcgaaactccNctatatMgactatttatSaaVttNttRttagHtccKtHtaaaN
+atttYVctaatttaaaatHWaNtSacgaaaHggaaatcacagVYcctaattcMNtgtYtg
+agttatttaBtcRgBHNacBtactctagaacgcKaaDWYYgcattactVagaYtgaVVcg
+caNctttBagKRcSgaaatttgtatccattgtggHcaatRtaVtaSaBtcYYcatcgtgt
+cHaVttaHattctgtcaBSNYaKBBattaatggctgtHatattgtBacDcBgatttaaaN
+tggaaaaYtNcaKagRRtRgttRtMtWgggatcNtacacctgtWKagatataaYVMtaaD
+taaacctctgtgtgccttScacWaggaYacttttKacgtttgtgataKYagaYaVatcWc
+SattaMcatBYttYaaatgStKagWattKtttaWgtagaaSgtRattcSaDagVaMatta
+ttYaagccSgcNaaDgaaSaggtaNgtWactaWcgHctgaNatttttcaatgtaMHSWaR
+tggtaNtaHBtttWWaaatattcVtBtctStWtaWMaBcatttcDagttDtttatatgtt
+WBtNaYatcccSgtgagcgaRYtBtagaDacBtaagaataWactaaaagKtaKaWaataa
+cKcccgDtagccaaagcggaatcgctSRtacKgcactacccHaactMgtgccaBaRaaaB
+VtcgSacRKtttStgatcaaHgKtaaKaccHaccacccKttgagcttcSttttKKcgacB
+gggtYMaatcBStcgDBtMcataWtaWaMtgaataagaaDatccSYDtgBatgactBaVt
+aagatctcNMgtcaWKtgcWggcgatacgtgtttatttWaDaNWBNaaNtNttcaaatag
+taatScgHtMWttgttgaBaDtgNatSaagtttHttaNaNKaattKatttgatcgtVcat
+gaatatBtttctaacKaNttVttSagccatRtatatcactcHHatctWSKttaMacaaDa
+ttccaRaYttttagttaatattcctYaacVactgctMcgagcaMYtttgaagctagtKgN
+WttgaaaMatcaMcttcSVatcaatgtNactaaBagatagagtDMgtNtNWatttSaHac
+tagaaaDggtaaaaNctMaatagtaHgacgMaaacMtacatHtaSagaHatYDccagtBt
+gaWatcYtVaagataattgatcgacctgcaacgttttattacNMWNcattataDVDacta
+tattatYattttgcgaagtgagYVtagYaWaHaatctgWttttatgcHaacgttaccDaK
+tatagaccaDDttaacgtHBaacatccgtYaBtVtNccaaataaaatVactDttSKtcMt
+DSgaagctaMtatattgattactgtNaagNBcagHaDattaaaWttacacaaatactcaa
+tSDatagctcaDttWactttgaStaaDtagatSaaDtgtaatKtgVataggaagWSaaaa
+KatttaaagtttgcgtaaagcccggNWaacatacatgttctaRcaHttVtcattatctag
+ttttNcataaacDttWaagVtNYtaggctttggtatgagaWgtactNaVatcactVttBK
+cttaaccttcMtatcggtaataYaMaYggttgtcaaagSWHctaRMSatVcggactMata
+tccgaatcttttttcgagtccagtttgaMtcgcatcaaKagtattRMaaaKDBttDNcca
+tttttaaBNtVtccgtaatgaKgtcagMVSattatttaWaattttaHNcaaMaHttgtgg
+ctattctacDtgaagattatcgacaaVRHttcSaSaatactNHWaaNcgtWaWgaccgRS
+ttNtHtcttcKatYatatBaagtcgctBtgagccatatScctKaagaaKDaWactWagBg
+ctgattBagKtgaaataBaaaaagSacScaaagagtagcgaDaYtaMcaYcKtaataMat
+ttttaactttgYgtcgaaggacgcHctBcgYgaaVacRYagagBaaYgtagattgcgagt
+caagtStDagatBgtgaccctaSWtctDgactaSHttctWatWttctaWtatctYacact
+gBWatKKctgtatYgacaaHSatYSaNgSagtatagatgagtatttatgaccMaatgtaH
+tStaWttgYagccaWattcagtBaYtaaNaBtaNatactggcttWcaagatDctacggaN
+ctatcacatSgKgattgacgacccccgagtNDtattgagaaatattaatcVttNKtaaWt
+YacgSNcBHgttgWtatgtttcgccaactKaattaRgacgNataatctacaacKgttBat
+YatNMSaaaNtctKgacttatgcttatKtcaVtVcagDaataattYgNtRtHaagcaata
+HcacaVgtaNNHtHDatgttaMNtggWagSVaRttcMVDtcttWgtRttctacKaaVttc
+VcgcatcctHRKtattSgttSacgaagtcccRDVaacBWagtgYtKtgattgSgaBtgcc
+BtcaKacaDatacttHatcattNatttacgtcagtgaggcBtaRNaRcaSgcatattatS
+tatgctYcacgtattcattaaRtgStcttWgtattKtSYttNaHaRtNYcRaYtVtggtD
+cKcttctactaMcacggcMtacgcttctatatHtaatggcattMDtaaMaKattgaagtB
+aaKMVMNacKaDtttKNcgagctaaagtccMMtgagaagVaataatggcaWaaaaVaBgt
+aSaVgaaaSaaaataDttVtBccaNagcSBgaMaDaVaVYYRVBgttYMtagtaactDta
+agWaattBtattttMDYHtSaStScRaKatattacacctMttgNBKtcRtRggNagtYMa
+ttaaatMctYgaatgcKHagSggaaaaBcaggtHtatWcatcgtStagMcctcatgatta
+WRcStcgWtgRgttttcctaacatcgctcgDDtRaatatMgtcMtHtMaDYatgDattta
+tagctKDtYHaaaaattaSatatctggtctttattttatMtgtYttgtcatactcaaVcY
+BgatgSctKtYcctWaRaataWcMgNgcgggagtcttRMgactataHaHtgctNtVaatc
+aaccacgSRaDtgKtaaMSKgtaaaaWaKtttVagSDtaaaaaatgttYattttNagMHa
+aRtNgBttWattatatgcttatatcatttatKtKaaaagctRaaatcgcYgacgNtacNt
+ccVtSaaatttcDVctaatacWgcaMtcttSaaWaaaWagtagtaattaactagRttaVc
+SaaatataacHgHatWaattggaagtgcgSSgaaVtgYgSttccatWVataatcgaatat
+gHtRcgtBttcttaaggatatgttgtBcNtaatgtcacVatactgaaatMBttRRcRatc
+catagagggacatcgccWttagttgWttatKagtaaaagHtttccttSatVatKtgagca
+atttattaaYVattcaaattctgSattRaMtgaatMgttattattacaNcggVagcctta
+aKgccYcaaDattWtggMcttMacWttccMVgtgaattctDaBYgacttKYtBacatgct
+DcRaaKaaRaatatctttagKcKtaactttaatNaaggctgScacctYgcgcaaaccaHt
+tVHcBaDgtaatHaHVaaatMgttggtSatHtNNaaVagtgtacaataaagacgKttcaa
+aWVacagctcacWHaatcctgtBNWtaNMKcVcVSWtSgcaattctgKtVVaaacaRaat
+tgatRcgBacaKacVccVMactagcgMNaaactgataDaSgagaatVHaatVSVtccgga
+tgRgtagRatttgtaactaBataVaggcaagHgaaSMSaKgctRagcStNcatttVgcta
+tacttcNDtcaKBDcaHtDcaatagttHttattMBgagctgtaaagtMgatStStcagat
+atYcBtataacRcaggRaaaggtaWSatKgatatgagcgtgMYatcagcatVttSgaaaa
+aatatatgttYttcattatacataatVcacgattataDggttBtRaagtHMtatagaDgN
+ttggDaKctBcaaRcgattcgtgccttacaaaWattYWVcaaWagDattgaaagggaaga
+HattBtatVggtaHtWtaMagtccagaKttSatatcaStDtgWaagtKWaggtatttaWa
+aRcattaatStgaaVtacggaacatKctacatHtaaaBtcNWatttBBaNatRcDattcg
+aactataaattataactcagtSgatataagRaYaKHctggtaaNtttaaNgaRHtttatt
+atacNttttaDccttYgtaaacaggaagtgataaacatBgaSgtaaaaaaVcBgtWNtRM
+ttBttaaBgtaaaatatcHNStaBtaggtaVatYaccNtBaWagRctNSacRtMatDact
+StVctaaDtaYSRgttaRNttttKggccagaaBcatagtYcaYNtDatcgtatVcaatWR
+taggaattMcatRtgggatgtcMggMtttataagtaBgtggacNaaKYtgctWgagYtWc
+ctWtVcttaaactaRacatggtRcatctSDcHcMgcaactttttagttaccttattHRgt
+acggcactDBggtMHcVaaRatKctSHacctacaccactaaHaacgSttagKtKttttgN
+HVgagtaYaMtVYNVcggttaSBaBtaatttSRcgtBgaWaatctttttKggacaWKaat
+tKSaccttgDRgtcatatDatVMtMaVcgaattaNaagMWccctaaHgataatatgtatt
+WataaaatBaaMtgRttcHctaagctaagatatattMcggactaRttttKaSttactWYt
+gBcaMMacRRgNtactttaaaSKtttcaYBaBttaVagtRtHcWaggaVccttNgtgagt
+catataWttYScMtWgVRgattWtaSggacggWWctBHatattataaKaagttactaMRa
+aataSRaDttDaaatataVHaatggaaBDgWgHtcKStVcatHtaatcatggBWaagHta
+gtMtgHcHtcatggggWcatacaHNHagcDatRcaaattcgcttgDggDNVcaacgSgtg
+gcaccttMttaatattVYtVgaagRttaBcagVaYaHcaRDBagatgaVHtNMtcttact
+DaggMgMaattRWDcctVtgagaaaaSKatHHttVDgtctgtcacatHNttgaatSaagt
+KBatatagacaaRVctcWtgtacKtaacHtgHataSgVtactaggtttatggBgtcaaaY
+aDgaaaaaatcgMtagaKaYatgaattatYcttKtacaatttgWttMaatBgaatSttMt
+NaVgVtScgcttctBHKgtaRcNBaatcDtacgattgacgtgctatNaaBtMgagNgKct
+tWcWKacactYgttVgNcgaattttcttgaaaaactacccctcgcNtgMctatcccacMc
+actcMatttatttagtagaacMNtttcttgYKaWtaaBtttcWttagHtgtttctcttgt
+ggctatgDgctaatWDataatttagaNcgcRRNataKtctaataHgaaMYctNaKWtact
+aacDtgaVcgagaactggtaccaactHgaggctagagHHagtMgKtaaactacaggMatg
+tYgSBaKaaaattMgatRtggggtHBVgttaattgKttaaRDacgMactcaaacStaaag
+ctctgtgccttcgtSagtSaRctacaataKatattctaVgtgtaattRacKagttattga
+MtaatgaNatacDataaggactttccNtStatatKaagaataKtatggtcctctatgagg
+ttaaDtgtattgataaaactggatcactKBtttggcgtcaaagaaaNtagtWKatctaaW
+BactDaBaYtacaWtaSgcaattattWgaaBgactgaKctatBRgtagttaBaRRgattt
+aagBHctStgtVYRtaaataaagtMWtcHgcattcacaaMWtcMccWttgVgcHaWttca
+NtgtVaggNgcVatKttataaWDcccctatgatVttttattacagRBBWttcttRaWgaa
+tBVgcgtHgWgaccagtYacaattgSttaaMcVtDatttaVttRgttKtcaYWatKtaaD
+tttWaYtaatYctSctatagtcctBtccMaMMtaMYHaSSgKaaacttctcBtMtgDtgt
+ttttagRcgtacttataHgKtNtMtKcBtaNKaHStgSagYHtataDtcKtagRtNWaac
+VgctVtRtttStNtgaaccttaVatgagaaggtcaKSttaDataagcYaSatNStcaatD
+NgttcgacaatttaSgaRaBNNacattRatNtgSttHVtgWHgtSHccaactKttYtatH
+YttVtgHcNgactMcaacttBatatgSgattttacgtatttgtggtScaacggYtHtgca
+tctatttttWtaSatcagaYatcgcagtgtgtMgtattctttcattaRatttStcaatat
+gcttDtStaaagaccDcVtaWNcHYtWMaMcgaacKcaNcttacctaBtgcDacatcaHK
+tRcDaaacataaRacNNtccDataNactttatBSDYatDtctBtaBatctDatKaMcatt
+MatatcDHctaagRgYVcatgttcgtgataHDYaagttSgHYctaaatgtaaaactNgta
+gaaactaattRaatcttttBKcgaatSctMaggVaVaaatgagataaataSgttKgtcat
+KaKatDYtaaaRttYaMtgctcSatRtagttttagcaaNtaKgatcgWYcacDgaatcaa
+tactgBgaNtaactaaWatatacaatacactaNatcaVaKaaMaaaaaatcaccBtgttg
+NctaacaBattttaaKWcaggataWMtaattgtaaHtgVtcgaHtScaHtctcHacVata
+gtaMcaaKtcccSagMYtWcaaatHHtaagRttDagtMtcYtttaaWWaaaVaRtcHNtc
+tcSttagcacaKttgtagtNgWYtatKDtcatttgaacctcKHtatccttattcttNggt
+BgtgtKaggWtYgtStgtVaRtaRaaagtagtgtcgcKtKagatgagYtttaatKcScct
+gaaaaaRaaHtttttaaaVgtatagKctaNtKaSVgttcgagacattttRSatagttSac
+ataMtaYHccacttttctatactagtatgaBaagctttaMtgaatgtcaKYtaaatatgg
+attataNcgBHatcctaRaaactgttgacttYaHtStcatcctDaMBttgtaWgagtaat
+WKataaaBgBattcttttctttaatWStaatacgNaagtWaMaaNgactMtgaaDaggaa
+aSctaSSgatatDttattatcatagBcaataVcHcRgcStaHaaatWagatHttMHacta
+RacttaYaaaaNtataHKVaataKtatgatcgtcVaaWgttYtVcaaYggctRWttaaKt
+RttDaKtgtatcaattWKaatBHaaaaNgaatggStHgVVgatMgBYtaRNgBDttMcNt
+ggaNgtcaHtgttDcNaggBtatYtacVaNttctcWtactHYcSctgtYtDtgWaatcHg
+atDatatcHtcttatattaaKaRYaDgaatgSYcgactgcRgaagttagtStYatYtttc
+cgacactacagKcaaagDttaatVatcttaaacRaDatRcBatKNtNtaaaHtcBgatKH
+cWStSRaKaSMgtaKaBacWgDDttgYaaYttaNtDgHtatSaSataaaaMBaaDtaMat
+DaagWtggaMtRcacttatggctNataaaaatatWNMtacctatgtcaYKaRacagttHD
+agccgtaaYcaatataatcatagggaaSatgMYBcKBBtaaRVRatRtccVtgtgaagVN
+ttcttagtgtcWataVggtaaNaatVgVaKctttNgtttagtaaagBatBtgaYSagHtt
+SYaacaStcgcagaSttcDBtKtttggtctacNttgNgKNNtcaaaaKWactgaaYgaYa
+ctatHtaWcaactgttSatNVtgtctSttYctgattVaatKgtaYcaaattSgttaStat
+ggtccaatgSWccaaactattgccgttacgcNatcHctctcaKatgtagtctattttaag
+gHRatcDaagSaVgaVNccaBKtacgtttStagKgtctaHtcattaYcctaVKtttaYaa
+atYtccgataaaVttcDgatWcgBtcctaatttNaattgctDYgtgatcaatttaagggc
+tctcatcKattgBtaBagcaYcKctctttNtaacHacNStggRtMatHHgtacatgcaMa
+gtgtccatRWttRKctaaaDtcMctttaNVgaNtcMatcacHcctgWtaaStcacgtctN
+aagRNNaagMaDtactDgctttttcatcYacttaKttatgcStDaStNaMgDtaacKtMt
+acctaaWattggtttNaaVHatgaaattaattacgVNaaWtggaWatctgVatcacYctc
+VHMtVaNacNtcccaWtttgcaacctcWctHaatcttWcaaaYaBaattSctYatctaag
+DgBttagtaSgaWtBcRcKtccYatatcKBgtctttatgaaHDcgNaMatggatgtWagR
+ctStagagaagaacagctWtNtataaaataRatHatKgctNactHgttRgRgVcRacatg
+HYaNttaHtattaNStaagatgtagaHcVctcYgggccYcaaaatgatcttctagctctH
+MaMMgcaVtgHgtaagaWHHtggtaactBcaMNNctagaacggWtctttgaggHcYNaaM
+HtaYcttKaagtSccgttgggNMStatacDttataaaVaYcKtcgcattttcgacctctc
+acVttNtttattgtcttctaVcatagaattMttgtHtMgacataaatagttctMtgtWgW
+ctttcaagYgcgtNaagcaaDaVHaaStMtaaagccccgtgVgtcacatcHVaDtgttBt
+BacBtcggYttDagaDYtccMttagcttacNcgaagatRtDataRtgctaatatatgRtW
+VttatWKtgcBgactcgagaSgtaaaaagttaaWaaagtatttctcWtatcBtcataacN
+cgctcRKaaDKactRaNtagtatBtgaaatttcgcDactttaNtYgagagaNttgaatta
+ataaaSMattRHNtYtgttgaDBRBttgWttagSatgacDggNVagRWcggctacDaYSg
+aaattHgtYaaagctccVtatacattaMctttgSgacatBKaattRgtaBRtttaactat
+tctagcMKMtttctgtgtgVgtctttcDcgtaaMtaggtaaaDtcaYtatccgattcYtg
+aaRttctKaNctaYgYaattYgRttWctWttaaaccaatcactVatgcgYttgaaatgat
+KBcNRgctcatgaccHagcgaaaatgtVgccatcaBSatKccRStSattaaatttggtaa
+gcVattctgVcattMtacatMgaaaaaataYNDtDaatcatWattcaggNcaccctcBtg
+cKcHagYtatBatgBttgtVttaYBgBgataaHNtacRtcaaBaKcagNtcagaatYgtt
+WgggaNDagtatagRtctcDtDaHScagttcYcatcSYacHcagagNgtgcHagtacagc
+tgRtatatMtaatRaWMHgaaKacaBRtagHtaaaNcVHcatWBgWaaacWccggtaaRc
+attgMgttaNgttVMVttgcaagagaatcaaaaaagYScKVtgccgacHgacgttcaMcc
+tcattatgcBttttaagtKatDactccgBatHYgttcatcgaaatctSaKaagaatWVtc
+gttgtcttaMaaYaSDtaaaataccgcKMtatgKtgScaaDMaaaactgtgagcVtttaR
+cttgtaNMatatatttggtMgYVatDaatttgctttaaRtaBgttaYaaagKtataMtWS
+tcHaaaaNacgctacMttDDgactacaNaatBcagtcattatatSttaVgRtWgSggcaa
+tSataVgSYgctBttataaYRRgaactgtgHtgacHWSactYNgtttBactatWStaNtc
+StcMttgattStacctgaattctWatNaaHgMatattcaaaKWaBaataatHKgaWgata
+YcaWMBtgtacKagaaaaagaattttWttDaMtggttgtgaNMtVtDcaacNttactatt
+acggKctatttaaaaBKatagttHaatggaatatYWgtaVtNaaYgataatMaccWagag
+atRttMtgKaMcgatattaacaagatgttBBcNaYattcNgtRttgaBcctaagaSMttc
+MtcctcYattcaNaRBttaatgVcMNgaacKagatcgNctaWVgttaaYRtgctSctaaa
+aNtttgctaaScttcVattaHtaaMacNgttNtKHMcctattttaRtttVtSgtacatBg
+tVaaSSaMVaRBcaSaRHtaWtWHttMtattVcaMtWaaaNaccccgHYtcatagaaRta
+aBaatttaBccaatcRctcatagWgcBHRtacaaDttcBgaHggcgctaHtgacagcSNa
+ttcctcgagaccBggtcaagWctgVcRDgVtaagtttaattatcMtgatNagYttHtYta
+gccRatagDtaatcNtaKtacaMSgDaaaatttgHaHtRDgtaattKtaMHgaBcaWtBN
+YaWgtttStttaSttgataatgactMKatHBtttaVcYatgggttttaDKcSatttMata
+tcagtYaBtgVacaatHcaDMcccgtaataatagDataatVaaagaagaVtctccgaRgt
+RtaatcgagtcacttgttSatgNDHaSNRcggtaSaagcSaBgWSgcatcaaWatgttac
+atgattcWacMtagtgNcacgatgatttttRcWttSgtaatMRRBaacNWRHaaBaattD
+aagStgatccttcaDacccctKaagScSSHaaYHWcHcaWcaaaMBataattgDtagccW
+tcRHataMNKtMgHaBcatcgaagtgtaRgtgggaVMatgttaWRtStBHactaaRaact
+NctcHaaaggcatgcVHKHgaatcSccttggSaWatWtNcaaBctaRagaaacacgcttc
+KatRattcWtgYDaaaaaaNatWtKgaacgtNttactgWHBaccaWacggttcaaVgaga
+aacVtMttatagaagtatWtaaaNHYaMacagWagtaatttgcatcttcgaatacggaHt
+aatVattctaDaHtRKRaNHcttacatcDKttMDKaWggDtaatcttYctcWtRaaaaKt
+aatcctgccccatgcgDtctaaVMtWRKKDctaatatDgactagWtaaaBcKcacMactM
+HHttgDataKHDaDttHttatttagtcaaVatccKWtacWtSVcaggtaatatDSatgcc
+tKtatDtttagacKaaaagcgtttaaSaaaYtgattgtKtgBMcKttgDaaaagttBRat
+HgcaKgDgtgcWataatMWgcVaVatcYgWttaDatcatNaVgtttgggcttgaHRDaWg
+atttctgMHgtVtgccttBtWtaatcgttcgKgRcaBaRMtaattWgctaatMaVBccaH
+tDagaBNaataRcacYcYcHcatBgaNtgaNgKHttctYaacaaaYgBttRNtNggaagc
+WtDggattgagtHaWttVacaaaBtgttaNctaatactKaMaaaaaDtaRatttDaaagN
+ttcYcaaactcMgaYgtacaaatMaaatYtcacVaacgaaDagatWgBgaataggtWtKa
+aMtgDttHtgagttaatttgVaaDagttNMataatttaSVattNaDtKVccaaatcgaYV
+taaaacKRaataatgaBDtctRtgVcttatttYtgaHgttBWatgaatatacSaacctSa
+tNNRccagtactKagaRtgSKMcgaaDattttagtHcKcaaagtggtataaaggctccta
+SatHtaMtRKattaNRcWtccgctataKggatWttaggtaatHDRatttattRWgcgatc
+ttagSgtcttactatgYgttYaVBtgcaYaaRtDaatacHHtDcttHgBgNcccataDta
+aaaatctNtacatatWaRMBgaattaaaacgctctctcaagtKcacNacgVRVcttttta
+acttgctcStatRScaRaMataNaKagtatcattRttNaVatcKgtacNatttttgaNcg
+acaaKctHWtgaKStacMaBatgWttNSacaaKcaDaatcWaKaccgYBggMScgaMcct
+agcaDatgtttcVatgtRBtKNWHtcctWDtatttttNNSaatattcMttgatKgNgaNB
+atcSggtctRcttttttatatggtNttDYNYgaaaKctcacacYHRgttacatacttYac
+aataNaagaaaagttataNaataSatacagttScacVaScaccSWtccagKHtaatcaaa
+tVacatWacgBctccaataHaaYtMtacKacHttttKtcataWWtgtgaatWaataaaaa
+catttcaccttaHtttgttccaatcccgRBaWgatKgagtttBaVgaNtaNVBgcaataa
+gaatagcaKRttgtatcaattaMtaacatataDBgtaaNttcaNcgagatYactggttat
+gtNVtaBNtDaaDtDttaSaWtactaVtHactttNttcttcatWttcDatKaacgtttgg
+VDaDtVagttatgtcagactKaatcaYtSgttttataaataDttKttKagacWgHgatat
+aaatcttagatNKtttWtWaaatattacSHaRgtttScttaatWttacgRRaaMactcat
+BacaccatRtttgaacctacttcDMggcVaSBagaatcttaKMagcaVtctDVataWtSg
+atagacttBctDtBNWgtgKatWctYgaaStccgVaaaDattYatagtatcaacBaWYct
+gaaatttaKVgYtStNtcaVggtggaNYgaRtMaacataSttcagacVactcaVaagtgg
+tattaaDBNDaagtatatMtactatatgatRSgtttgccaacgcacRMtacRYNataaga
+tcMgttgatcataaacttVcatatgWtacaaaWttggaaactttaScataactRattMtD
+acVYataaaagMaattttKtgaBttKcaacatattVtagtcatgactcgDaacDtaWcta
+tRttSSYNtgWaScaaataagaaatKtagacataatggNaatttcSKtVWtgacagKWat
+tcgVatttcKWgagcaWgNKaaaatatgtaaacgttcactaaWgacaccBNaacagaaSt
+ctgctaHcVtttMtcYttStagYcgtttBcRtaYacttgNaacMtDRtagcatgtgcgag
+cScaMgtaatBaKataactMttttattaRcattattatacgtaagSNatVRgcttcgaVa
+acHNtctaHBKYgKaccYcttagagcccaVgatttgttagactaaacgtgcaBgccaWga
+VataggattDBWaattttgtBacWtttttaatDtMgaactaagcVtctcagBMKatgatt
+gaNaVttggatDaSaBatttcgccatatgctaattgYacatgatccacaaMHtttcKYKa
+WtYcgDtNaaDccgNaNcacacHKttDtttaggctagRVtYgtaactagctttcacaaat
+YtHaattYacaattaMSagMactcctcatgtScttcaaYtataaaaScHYaKcaYacact
+VcacataNtaBcaRatgYagVBatttgtaactttgRggacaagcVacctattacRcaaMa
+cHRagagtaVNctacagtgagacgaaaggKttacattgggacaataKNtattcaagWKtt
+gatNagNtgctaNgagatNacSatctNatttatctatRgaaaatKatNKSBcKactatac
+StcagtaggtVtcaaaBYYgctattKtWNttcRacaaaNatgaacttaRtaaDSttVBYt
+aatccagtNaaacRttagaaccRBatataWaatKctcattcSacWaacaacactDttVtt
+gacYaagagtaSgcMttBttaVNgRVagKDcttcttcNtaggttgcgacYacttaaggVH
+caagDagaagataaVaatctgtatRatDtKaaSDgattcaattYtcatgYgtgaVMtMaa
+ctaagaatgRgDtHttaaccaatStaaaaMctVDDtgttatcttaBBgccNacKMaHggc
+BMttctgNctHggagaataYMgtaMccaataattHttYttKggtKaccaactcccHtMSa
+atNactcRtttcatgcKcatgcacttcatSaatatactttVtaYttDattgWcctcactc
+YccattaDDaHaaKcaatSttagKtWtcatRcaactattaattYaDggKtagtNcgSgtt
+tKRgtDWtVHtDNcHWNtKtccgtctagtatSctaBcacgcaBtaacatgagatVtttaa
+ggcaVttBttaStWtattgYaggtSatBMBDactVtggttDagacataaactactBgcac
+aacMaagaStccaWNaaSYMYtgtaKaMcYSaHaaaatatttMgtcaaDScaKtcaBVta
+MVMRRDMtcttRBgWctaacttgaacNaatgttWgtggBtRttHVKgKcHVtatattSaa
+aatBttcBtttcDgHccBagtRBRttaVagBctRcaagcattacKccaWVWtaVcggtta
+tNaSgccgKtYcBaagcWgcatgaNHaKtagNgcHcgtgtcataaaatagagacttgHYa
+tattctaBgtttatRatctatttagacattttNtWaaSagtaHatRtctcggatttatgt
+gatBtctRggggcatWctaSVMaRtcatgKattgRcatMaHaataNcBcDcaggcactat
+tHBgaatStatattcatBgMVataaSacVacKHatggttaaBKtgtaSaWMattttMacK
+tgaaWaaWgctgRatgtgDacBtSaHtDgtgtMVttagatgattagagaSttgattgtSa
+aacagHaaatacaRcaccBtaaDtcaMtKaaStttatKagaataaNcaaBtattKaVNaW
+aNactagtYattaaagWgHttaMcKaSagatSactctatMSagtggaYctcacKKgaSMg
+cRgKtgccagNMataatccaVgatcttHagttttcttaaccataggggcttaDtYatcga
+aaMataagcaaatBttgHHcHagacagagaggcacWtacccMttacgtgNttattYctVa
+aactgttaagtKatMagttcacaaagggatgaVNMatgcaSattatcKagtHaBtgaagB
+cggagtWttVaaDaccMScactgVatccaRaSatattNtgcBatgBaaNgtcaBMgggaa
+tgagtatRgaatgtNttacaggcttaHaataaHSagatagtgVctattaaagggaagDWV
+ccatcKaaaatRccccaSVaaatttMtatStgtWagtStMaaatBctgcctKWgttDDaS
+KactctaaVRtaSWcVactggaaaaNMaaaccgcacNtaVgaagcttDNgaDBtaMaMKN
+tKccaVtgctcttMMYaaaaHaattcWgHcgtacatWaMaaKtaataccgBDaYRaggat
+atSKcScYagMtaatKHMtaaccatgHgtagDaggtgtaaatatagaKVgccRYctcRaK
+BKWtgatHYcaHgBaYtttMcatataatgaDttcatttaStgtcVSgacggtggVgtBtg
+acatgtaaSgtBgatKtKtaYcatVtNattataaaHaSccHaaagctSMKattcatagca
+cagtgBRataacaatMttKcWaaaaatagStcggRttaattatWaataatMaYagatgVt
+atccttttHaScgtBgagWcatgBtgcctatcgtaaWHacagtactgaattaaaaaNatt
+RNMaSSNSctattcaaagccVVcatattttagMcgtattNtVBactacScattgKVtata
+aKtttgNaWcttNacctagtgaNaaDcagtaWgKggaaKtacgcaaaYttatacSttgYa
+YttcDNagggttVDagHatSgtacYVatataVattataSataacgKgatVtVacHYRWtt
+atcctaaDtgtaaDgRDttttattWtaaDttggatcattNgtVaaaVggaaggcYgSWaa
+attcWHcgaSaVWaMatctMDtHBgttttaatctaWaagatatDKtVttaccgaMatRaa
+aBttaNagHatDHWcDtBVttaatKtMataYttSRHHcgtaHDtggttccaaagRRtaWt
+VctRcaNDttatacgatMcaatNHtacgaattBaatHtcccatctctccBtgtataYcta
+tgtcgaaDYWtNggatNcacRtMaatNtKcttSYSctaDaaaggctDaStatKtataBgc
+VaatttggYcttaaatgatgtHctaaccaactttgggttcMaaDattatKtVacgVcSca
+actSataSccHttYctttgtggcDtMcactaNSBtMRBMaggttWKtattaatgtKHact
+tcaMVatctgttgtccaaYNtaagttKaacttctHcgcWtYttatMBgBaMacaattaDa
+actNaaatSatcVtSSgatctatgNatSYaattRatgcDgtctataagagaagRgatatt
+tcccaataHgttttWKtgaagNRtctaaBtWcHHcDgaattgaaaKtgttaaRtatgtaM
+aggDttcMaccaMaattDctgYctaWtStaNtgRKaBtNcMHcSttMtaKccYacgNNct
+ttatStgVtaYtaagttaagaBHaaStVKHatgttRVWtataMtSatgcaattcMcttat
+KgMcagtgaatcYtcctNaYcttactttctcttcatggcgNcatScStBtagctWtHaaW
+attaccgtctcgtBMcaaacKctcccaacttBgtWStVttMRgKcVagHttVtaagMaNa
+tcaHttacatcYKttDBtatgSattVcgBcBVYttHNtcatKgcYgaaSaKtatttttMt
+ctatctaSaattDttcWagHSacgttagYgacWaSaDKatcNgctaatgVSctgctYgaK
+gKtaataggtggagcgtcgaaaaRYtgYWYSaatacBgacWtaNStcaattWtRctttta
+aSYgttcNgtBWWgtgaatHttttBaMcMtKccagtattttcgaHaDtSVgatgaacatg
+cacgtcagagDYattBcagDctcttNcNtaaaatRctgMcDacaagtttagtcaaSSaag
+aaacatacaDtctctYgcaaacBcaagaBatgtattgacgagYacBDgttcgtgRtaMga
+attttcNtgVcttctgtctagtgtccatatctgatYatNtatVWgttacaDacaHDDagW
+tgataWtatcaaBRatDRtMgVcgaaattcSMagYgWacgggtaacaaattcagcatagS
+gttactBctgSVWatYcYgcBWgggRcHtataSaattBcagHgcgcctttKcttWaggct
+ttaaDtRacBactaaVaaKtaaacctcgcgccattactKactKSDcgacaVtatatagga
+taKctcgSatgHSatVcgtagtgaBtSYtgaBataatStaaccaagttcaDtHtatatta
+acYatattatcctacgagatcaccgtVSttctYgtcataaVactcgWtaVatttgttgga
+ctaaaVcaSaDtYcgNtYtctVaMtaattatWRtWcaNtaKcaaYggatgNgaatcaatc
+RtcgagtHcgVgttataHDcatttaagttctHtcgMRHtaaagaVactBMtatgaagtaa
+aaaBNtataaNttcKcctaNttaaDtcgMacgDcaMatttgYtaaNtcaccgatgagMtg
+ttaggWcacHttNgtcttHYMcaattKcagttcNcaaaacgNaaSattgKttaaBaKtta
+tttaMggHcttttaaRNVgttaYttttMVRtYVgRatKcgVtacgaatttccBatBgYBR
+tSKKctaaaatgatatgBtcttcgtttgacHagtaattatatctgDtBttatgaDtatKt
+cKRcRttagattattagHgDNaaaKgcgMtHtttKtDtgaaaagtaMatcagaaccgaat
+KgtatatVaccRaKYtDHtcSagtBgtgccWaaaggtYKcaHatDDaaattDStDtcKgg
+tMgcMtgtHtcaaVcgtttNtagtNtgKgctaDcScgBcWSatgtatagcKgWgttgaac
+gagtgcgcgtKaaaacgRtttccatatatttttMgaKagcVcVRataccWctctcgBcga
+ggcgttaatgaHYtttHtaSWtagcagtttKtYaacaaataMtaNDatRgMBaBacSaat
+aSDctgaactattgataaRtaVtttHatWaacWtVaHaaBDtactYtaDactttSgtKtR
+attgatttatatattattataattBatagattctaacDcRMaaggttcgtcatattRVYc
+ttKgtRcgWaatcgaaWWatDctacaaaagaattHaatctgttttacYatKatBaccMaM
+aaVtcacStaaYgYKgtttctcattatattNgSaaHtgRaBtcataKYtHtacttgtaca
+aaDtYtgatagNRcYatgaStaaagactgtcWDtYaatVaNStagaaaWtaaaataDYtc
+aMatSVBVaaaYagaaaattgtgcDagWSaStattttaatNcacgataNBtaattggaat
+gcMgacattHaattctctaaMatactaBaaattacaHWgBNtNaaSattttaacHtgtag
+tBtcRtttSaNNaYaMaDtatDtagaKggYgcaaSttgctactDcNRtWgtttaVtggca
+aactattgSgaagtattatgDgcgtgtcttagcNtRctKggtMaHgaDaaagtactgtcg
+atttagatcagNggtaattaKaatgaaYaaHaattggttVaaMggatactctaBgtYHMc
+ttccVcaaWtgttHHRgagttKaaagaBtaRtaaWaggttctatRatSgtatcYtaWcat
+gtaBtcaatctaatRgaYYtWtccattataBacttWtcctaHaaaaggttgacgtRattK
+gaagcattSBtttctaNcSctSStNtYtWaWtgtagtcttgtctttaagNKgaagacgDa
+RgtNaBaVDgaattggaYtaccSVYKctSKKcatagttgSttatcStactcaatSMataH
+caKgatWVYtNacagtttBtRagYHaagtaNaaVVDgatattMaagattagcatcctaMa
+aMctgNtMcSaRcgctHMttaattDtttYttcgataaagtMtaagttaWaaDcaatccKg
+tgMMcatBgtRtaHBcttgtBaBggcaDcgaWttgggtaDaggtgatRtYaMWDttatcN
+tVcttRaKagctRgtgcNaatctgattatagattagtatatgaataDNatcYaggKRaca
+atcaHcaagttagtKgRatRgttaagaaaatacVctaaaagtgtaagKVgcttSWaaHat
+agHctagtDgDtSaVtgatcatttaNKgKHataKBctatatWaNgtttgcRaVNttaDgt
+cttagHYKatYaVaBtaatgaBattaYcNtgcaBtHaacttVtccatDagVaaaYgWtND
+BgacagVgctcaRtaHaaacttttacaaggaSRaaatagaagaatacccVaHatcBRtct
+tttaaDMHWtHgacMtctcaagKDttctgYctctcNagaMgcgaaDWatMcMatatttDc
+tttactaVSctagttcaRKWgtttKRaVaaKtacaacaKttatttttggcctataaDgtc
+BctBDgcYYaatNactcaaRgaRWcgattgVNcWaatctgKagDMgctatKttRatcatt
+MaagtctaRaVaattKctgaKtatccgaaRatcHMaaaaaagattccacgtacgaDStat
+atctcataggtacgcgatgtgaaggtHYtatWagKVKgaMDcaatttWccttgKgagtct
+agatgaatgVRcctaMttgtaRaaYtRtaacWgaaaMttatcatNcgttactaaggtDaa
+ggcagtRctcatcaatggYagccagcgaatatagtgttWtaccaRctagatttDtaaatR
+cDKtccHtBWgttctWaagccYBSgtggaaagHNttHtctaaattaBatggaDMgaBgat
+atcaatactcMtaaKtcYccgatDaYgHDBaagBattWattgatttttaagaRaaggatg
+gYggaKttaKtBVBcttaWcttBtacctYaNYttgctgtBaaMtWtcWaagtaaggWcgM
+DaaNtccWMWtatcMVgaSaRctaKtBgKWDacDgaaaaNgttcaaaaataMcttaWtat
+gNaVaaRataWtgKctRatataagtgttgacgaKgaNgtaHattaaRagSgattctatgt
+YtcaattagBYBatccYtgtNacHagHtacVcVacaacaccgNgBtataYaatWHSttat
+tgctDacttgtgHgHcMcHacagctRSDtgattaggaDHtYagatggagWtaMatcRccc
+acRaaaYagcagatgatacatatttVBBcaaMtctctaWgaNtttcctaVcttaYBDBct
+RgSaagcNgatttcacgtcRDaVBttaRaggtaaggHcacttccgDBKgagaatttataa
+aMaRattagcVgtttacaaagagaaaMtgDtttYttggcttataKaStacaVttBttctt
+gBcVaataaagagtgagBgcgNcNattgaaacRcactDaaccaatWMtaaHtBgaaacaa
+ccctcMctcaaatctMWttggttttacttagcRtttacatRtccBttVcatgaaBacaYg
+agHttatWDtcctSatRtYggHtNMttRgNtgcatcacgacagaHgtYaSaactgaaNWV
+agtagttagaNgatctgcatWYaDacataHtaWttaatHaDgactYgttcaSVtttacct
+aatttaDgRcagacaDtgcYVttaagaSSKBYtgHtDtNtcgtcWttDtgtcNtgacKag
+cactccDMacDNcccctWataRKcaaatttctRVaacagcaMtataaattWBctttgKgV
+catttaVgtDgtatHtgtaSctagtatagcBtBtgtatgtcgcMcgagttctacgaaBgW
+ccgaWatgcaRtWtaagYttaNtcWaHtgattYDatWRgRWagtRcHggNatNttWaaac
+aSgcaatMatgacNgggaSatgatttcBHcctaaggWactacagaaaagctMcaaagaYt
+HVgtaaHKgKattVaWtttcctaWgaKattatgMaattBgaaagtgaSaaaWtSNBtttY
+ataVgNatgaSgcBaaccatattcctctagRtattatctttctMtgaRtctcYgaatDtR
+cHgcRVtWtaacDtcacYatRcttNgcgaDtVctWtacHtatatgtatKaaggtaNcata
+KRaataacacDctcctWgtSaWcatcDgatatBtaatHSNBtcaataaStHtacttaYaD
+aMtaagMtgNaaaaNccccgYWHaatgcBcttaBcgtMBKggccaVgacaWgaaaaaVYc
+RKctMgcaccWctcSacttcVtacgaagtYtcctttttaYgttattaataactSttRggt
+cVgagWRStatKataYcaatNMtacttcgcttVBaYRaKttaaYatacagctBgagcttc
+HcaatBaaaVcgctcacaMgttaHaggctaDtSgatattggggBgRMagtaattggattg
+YYHtVtcttSRYaacttataBtNKgatVaWSDWacatVcttgttgaagScaDaSttcact
+aattagatKttaMcHtMgKccaYatKataMcKNgattgtYtaaRHHcaWagctgtgcYat
+MHaatRDgtgttYctatNKtSDtaKgcBttgagtKtacatgaaggcgMatDaWtcBatag
+taaaatNYtSVgVatttcaNgRtaRaaNBttggaatVgaaaaagaaggtgNtttVBgcct
+tgtgaBtgMgtaaacBgtactWgtaacctatatggaSYattYtVgtttaagccaRtatRM
+cgWMgDVSNgataatBRccNagagStHttBgctaBagatattaacaagaggttttcDaRa
+gtcDgtHttcataagaacaKBttaBgactaRatgaaDYHttgVagcMcBDgYactWgSga
+cBataMMcttSaRHgcagKcgaaYaDgttcataYKcttcMWttattaaBacDcttDtttB
+catVggttVHtgtMgKcgaaVgtcgMaaHHYBMaHtaaKaDttaNgNtttttaggMcWtt
+NaaaDaaaaactRgaatagSVHtaataagttStccaatcHataatacMcattHtacaatt
+tctgatggacatatgcaaacaKBatgcagacagVcctccgcaacNatcMaHtcMtaSctg
+taYgtStcBtcatDacRggttRgagaaHatVcttYWgaDtatgYcaBKgtSWVYtttctW
+ttHtctaYttttaBtcataaNgtBRaNcgttKgtgVKgggVtWatcWagttSttttttaM
+aRWtccgttttattaHatttBVtataSctRWtgcMacaattaStBcacggaatRatactV
+gaagMaaagWacaMgctaacaHctHtaatacacgaYagtcttKagcDttaKBHccgtaHa
+acaKVtcMKcaataaaNaggttSaatcatgaNaaBtacggBcaagatcRgttttHaNgtK
+ctYatBHHtaaaDNHtaVtVagttVacKtcYgcattcatacaaagtaacKaKKtaaNtNa
+taaNaaSaBtagaattctgacacNtaHtataBDttBctataatagYSctgtaHcgccgaM
+BaggttaMHtKgttactaaHaacgDatataaagcaWtgaMtttgVatcKaattcgHVNat
+NgDaaYtataHacaaacaagagtatatDStgcNgcRtaaWVVaDStNgtcaaacgDttaa
+ggNttWcaVNaccctgaaaMcagVYVaMtBgtatacSacgSgNtaaaDtRaBSaWcNacg
+YaggtcaYtattagVStaccgatgSStMattctWtattHtHaDtatgYaatattgtttta
+NggttVatcttRcgaNtHaVaStgaagactcacaaatcactgataaKBtNHtttctWWta
+ttgactacNtaWatataaaBaatBttgggtatYtttYtgttttVttgagtcVaMVgaatN
+taaNgKMaacgtaatattKWggcagtgRttgtgacactaaYacactggaaKaWYRgcatg
+cgttctBcttggtVaaWgtttHagtcaatctcggaNWtaatBNcaMVKStaNcMtgatat
+aatDYMctttcgcatgcYtHtVNgStggagcBtggMgccctgtgNtVatactgcctcHca
+taDBtaStgNcagaYttaMtcaYtgtagatDaagaHaaaRcRataattcaDtcaDgttgt
+atRaaaaYaRgtttDBgDcgaagcNttgcVttcacttaMgtMWaYaattcggaDcgaVtY
+attaBYaaaattaHVttttWaacDttaRaSWactcBgaRctacaVStBaaatRgaacMSa
+agaatagYtNctcaatagctNttaVtgctgtttgYcttaatgtgMaStactgDBagVSgg
+tSKMYttDatgtMaaSaVtccSRMgaaaactHaatWWtcatttctDgcMcggVtgtRtca
+tctttNatcaatatYaKaaaatKWtDDDaaactaagtacRHtcKttacaataggttWctt
+ataSaYctgctVtaaVggatcctaHVttgWtgHtWttaDHaNgaccctatatgcWtNtta
+cctaYtttDWtttaggHNgccatattacKggattVatatcRcggRWMtgcaVRaaHgtaa
+taattttaggtctcDccaatatgSaaaagatDtaaVtYgNaHBtcaYttaaaaacagata
+taaagttaaaDWccMHMattggtaaagtccgaKtatDKaVHaBagaBatactataVttDt
+tDaMagctctaaDSggtttgaDacacVatcttNtgatKtVaBStatgNtgDKYcaatcat
+aWtcNatYccgRtcgBHacaBaatagaVtagcttgaKagcgHtttDNtgaagMttStttt
+gDDKRWtagtaBgtgagtgBcaDtWtaHcctatHatttgttWgagcggDtgtRDRcaaat
+agcacacRtDgtgVaWtaattRacVataBWacSYWVctgYtWDaVtaKataaacttKaaa
+MVHaaaaKNtaaacttgVataaaatMaaatMaagtatcaaRtatSYRtBtaataattgtt
+tgaWtaNNtctcaatNaataaaaaaattgaaaattattgtgttaaYatccccHtaNcatt
+cacttttaMgVDtaDMtcaWSgYWcSYtSgaatHtgctagaVattaBtaaaYgatattcg
+aaBtgaaDacacatRaagcgggagggDMtatDttaatttggaKSNtactRMttactgtBg
+gcgtcatNttctattaVacgttccKtVttMacttWtctaYcacgtaVtaaRgKcttggat
+SYatattttgttacaaMgtgagagaSatattWcagDttggNtNaaYtaggaaKtYHcttg
+KattWagNgtaagHHVatYatcattaaaaaYtHgttcaaaataattatBgcaKWKtagaa
+tagtatBagaaMtattMagaMtHcWgYcacgttagtgtDNggctatNatRcYYHtaacMa
+SStattRagRcgataaaatWNNatgaaatttVtKcRtKtDtaaMcctccaDRcaHtBSWc
+YtaKttcacaaMaataaMaactccgSgtYattDtaWctagatBtaatSgatgatHKgttg
+caaaaagaScHtgaaHRDatSagatcBcggcatcatYVaatgMaatStgNgWaaaaMttg
+cYaaagttSHaYgaaatHattBgtaaMRagSaSacBaagtttttcatgttaaYcagYtgK
+tYctaStcaagcgtaVattaNatWtHgtHKNDtcNaKaVaStSacaaStttagaaataat
+gcDSatgtaKtgMMtcaaagtNattacMYgtgctNgVcaaNcDtaaaVtYggtaaaactg
+caagaWNcaaacctDSaaSgVaKtctcatataMtggBtaRttKtagRcctgttaHgWRaa
+ttgDaaatttHtaccagctcagaccKaaBctaagtatWtaVagBgtttatgaHaaggatt
+StaactWacKDVtMHccgtacaMWYctDtagatttRctaccRagtWcWgaaaaMcagttc
+tgacSctaaaactgaatcacaNcaMWtWccYgtttNaatttggttaaNtggttSattttc
+aacgYVccMtcgaactBtatcYttcYDVMttcgattaKWtatttagcaatatcagWatgc
+RVaatgRtacWaVVBttggatRtaNgRagttDYataacDVBcaaactttgtttgaccata
+gHMtRctaWcgacagtgcVcaaVgRgtaagtRaaaattSBKacBaatcagaatgtHattc
+aVRtatVSSaKatNataWRVaaagMaacataDgataWHatcNYcMtatttggaSatttcH
+cgacaYcaKaaatattacHcSaBVatHacactaMDataaaggcacaacaSacctgtaaRg
+tcccaaaatWtDtagtcaagNtttgatDacDgcagaDcWgatDaaKagctDWtttatatW
+gDcaaaWttStDtKtatSagVgaaKtaacgaccgMgaSaatRRcagYtgttNDggcHSca
+aYDWtcaacgtaHgaStKtgMtRtaatccagtDaaacHgtacaaccHtagataNaattat
+cVtgaKaaNaaaaaaaagttgMgtcRaNaacagtaKcaBgtttgaMDgDMacttattatg
+aDgagcgtcacaaRaagtYaggMtaaactagaacagVaMWataggtatHagtttaaHtca
+gtaaatgRgcatgRctgaMttBaaataagWVtcHctgtgtYaaaaVtKtaSaaBatMttt
+gttatattattcaaBYctBWtggatBtgaggDagtgcacVataRBctaBaaaataatttt
+tNggtccgtVaaaaataaattBHaatBaagaHgttaagcctaatcaaatgaYtKaatYta
+aggtMgaRggtWgggNactaacgaRaaattSttWtaataaVtHgtacttNtaagHaSacg
+WggaYggNStcctgacgDcgHggtttHggtNtMtttDatNDgtgacgtatacgatKatat
+aaacaattSaaagcagatKtttSagcaaMttttgaKtMtagtcRacctKSttBttaatMt
+gcgttacaaagaVaataattcaSaaWcBVacYKtacaNBaaKRtRtcgWtWBaRKVtYWW
+WgattgBctaaatKaattaYtMtSBMBHDtBtaggDtcNctWYagtgSaaBaVtcttNgt
+cgttHtgtMtctatKtatVggKaSaagtttattttatgtactactHtHttSMactatHca
+agaattVataaaMKNtaMccgtgatDaHcaacttRataacaNgaatcSBtatgacBcctc
+gggtaatWaaWtacacaattctRVgattctatgtgtatHagatagggacVaattttDtNa
+WKagtatatHtagacgaggtatgtcagtgagHccccaatNataKMBaHtcWgctagtgHa
+atBatSataDatatcacccaagattttcSatKgatWtgaagtcBMataaHaaMaattatg
+cttWWtttcgVKYNBattggtacttcaaMaVNcctcHatcgctVcttKatgtctctBMgg
+acatcaggacSgaKttgagtctKVYaaagtaaSgaaaHaWactgRattaaBttVaHtgga
+ttagRWtaaDaaatgatttSMBWMaDactScgRYtgaVagNctgtSBataKacStHRatc
+tVgBKaggccaRctaacttcYKtcaDcttgaaacBBataatacYMgWgctgtacttttat
+gaSaaatYcccgattattRStccaaaBagaacaaaVtttgcttatagaaacacScccSaN
+taaaaBgtaaggcDgtSttRatMYSWatcgtaacgtStBagttaVaaaScccSggaMDBS
+gcaaKaggatatacgtatgcWactccgVctNttMaYtaaatKaaatgKStaaaHaKatat
+gBtcctatgtVaBggaatBcgcaatgagtatHcYagctDgtWaaccagtatWWtaRtKag
+atagtgKatatgaaaggcaWgtNKaaagataWaatHaaaaaKMaaatttBtatHtctNac
+tKtBVVagtatcacgtMgtgttaKtaatcgaaMHtYKNcMaatgcaSaaDBaaaaagaWa
+DtWMgaacatttDcatttaBaBtDttaaSMtcagcttttRWWaataattcNctactWaat
+NaBaattaagaaacttYRHaccatatKtaKcNVgttYagttBtaaaaVtctcgVctagct
+cgSVatatagVtMcaaHRctaHStttNtcattRaatgtaRtgttaatYtaagcattgaat
+ttaKtctaKKgaaggtcgMctttcWaagcgWaKcttcYttgtgaRaagMtDatgWgYaat
+aKaatSWScatKBtYgtaagagaVcacgctHStaacaSgBtgtaNRYaaWtWcKgaccDt
+gaWtgagMaYgVVgBaRacYtcKgatcagttgtaKcgttgagNaStctggaatVtactaS
+NtaaagtaatcaattaaVaaDattHDBaHKDHctVggcaaacccKMaatVtgttacBcct
+StgBgMtScgaaHcatgctMtStaVttttcDaNagtDVaatYcggaDaYtaactaNgtcc
+aattSacaaaaRgtagaaKgtcRSNtgatBacccttMtactatKgtaaRMagataMatgV
+tVKagaRagtcagMgMaatRHNttagaagaatgggaatcHtttttSgtNgYatgtgcYta
+atgDctMaaaMccVScgcRgKNaaagtaMtacaKaMNaBatagBttttcttttYatataN
+aWcagatttgMtgaaacaBYtHaaatgtaDactatttNatttKttSattgBatSRtgKHt
+tacgattgcggtaaaaacHHtaNgMcgHaVDtgtagaagatBaaagDttaacSatttaat
+ttaccagatataattggVgaRctRtcgccVatRNtDgcagBcVaHtBaatDttatgKRKa
+gataaRgcagtaKgagttatatcaMSagttccRcttaaatgatcttataaacaaatttcc
+cttaBaWtagtagttMaacMaKaaaagHatYKactttRatgtctcgattBcSagaDKttt
+HtBaccttNttVttVVtggttacgtaaBMRgatcgtctacaaNBtaVggttYaaggattc
+caNgRgtagBtgtaBacaagtataaatBaaatKRtaMtKHgatcgYggDSgKRaSttHSt
+catgtatatWacacRacHcatYtttaacYatatgtgttNtgcSagDHgataYttNattat
+cVattcaaYttggtaRHtWtcgaBacgtttaBaccaBaatgtcgcNagaNtKtaDtgDta
+tgDaBtcKgtBgatacNaccDDatttYtKggMtYNtaactgVacattaaHgMttatcgtH
+MNtataBtKSgccaVttaBcttattcBaagtgaWtaRtcctDVRatgaattgatatgaWg
+ccacDaatKaHtttacatNttaWNWgtacaggctacttBaYaaatatacaaaatttcgNH
+gMgttHctcKYcttgMtaacBaDVtaatttacagaRttttttagcKagtKactatMRtgt
+DtaattccRcaaKSttagttttBtctatagaKaVttttgcNagtKVccttagRgWaNaKW
+ttataDgcgaatgMKatgatRcYtctgVagaccgcgVgactagaWaaHNtcRNRKaatac
+tcYaNtSDKtcVVggNgDagtttaaKRgttaDcgtNNgtcaYttggtttYtatgtaaagg
+attttagatattKMcatgYaaatcaVactcagagtRYtgtaactatagtBaDtVaWatDa
+tctataaaSgggtactaYaKKWagaaaaataaattatagRcaaaVataVagatatgtagg
+cWagacRWattctgacgcDtaBcYattgtaDggMatgagcgagaggctaaatVtctcagR
+agDtSgKNcgtVcStacatttagNtgatSNgatcYVtHattHtBgMacRaattaHBacRc
+NaaccctVaaYaattcVccatacKcttSagtctgKMNagRaNcatNgcgHattStSKYRg
+gtcagtcaccattttagtMaccctggVattHaatVagaaMaattaVacatacacaaatta
+attacgtKtagaaaMgatWgWccatYtagacKatctKatMcggYcgcatgHRtcStVtaa
+tHgSaaaVagtgaatgtgYtattaYcRagatgatcataacacSgaYaactMKttatRcga
+ataaMSatacNgaMatttcggccacgaYYMcaKattRagDtRtatMVBtaattWtMHgNa
+WDgStaaSNggStcBcVYtaYagaHtacagttccMcgtYtYttcattgSWcttagttcgt
+HtgVRYgaMacttBtatcaactaaaaVtDgataaDgtatcatYDttaStgccBacctaaB
+agttgRtaSBtaaaagWgcacBggttagcMaYatttBgtaggtRBaSagttcacgtaDaY
+aaaacDSaKattctgtSatatgtatggVBcctctgtgaaHDKgttaRttttBMHgRMgHa
+gtagMgacgaagttaatattgRtHtHttatYaaagcagatgtgattagtggcactactVa
+ttagatctctgtttatcattYttgatHcHttagStgatgactctDaaatcagtgttgttt
+ttcYaaagtatatcYcaSaacaVttcgWtatKaaaHWtRgtttaKacttctgaaNaYacc
+tNtcStatttaaagttKgtgatcctBcaBtctttaaaKagttgDtWctDtgtgctataKa
+gtaNHatctagYgatcMgtggYaagactgacacttaRaaccHgttcaYtagWtggtgBcS
+tacaMcMHataaaNagatactccaggagttaatcatRttttgaKNgSgcaggtgttRaYc
+aaataBtaDtatHgBtatacKaataKtaggaaatatgcataaHgaKttttatMaaaNgMa
+tYattgaatNtatVaggtKctttHattcatttatYtattagtataYtttagYcattagaa
+ataHtaaccttactcatYttHMRagttctDagNSVgcgVaNNattctVcaaVagaattta
+agaggttttacRagtagtaaaBaBaaMtaScKgVaRcNtctgtataagtatVgtDgHaYt
+tcHYttaagatRgtgaattctYaaaattRtcWtacDDaRatcaKtaSacaagctaNttRY
+agMSDKtWgWaYNgaaaatatNtaatatHMtMWRaRacaaaatgctgctacNKaKtagtt
+gVatDaVccatSDtgaSggcgWatccBgaaVtgtaWttagatVaBWtacgWtaYattaaa
+tMctDgDaaKatttgaaatgctWctttaHtggHaBBSRVBWtgattgagatccNcaaaHt
+>THREE Homo sapiens frequency
+gcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgt
+agtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggc
+ccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaata
+ccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggt
+gaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgac
+gagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagac
+gcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataattt
+cacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacaga
+aacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccc
+cgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggac
+gtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatag
+ataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatga
+gtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgt
+atagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaa
+gactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagat
+acttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaat
+aatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttatta
+cagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagatta
+atatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactt
+tcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatt
+tgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgc
+ggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttgg
+tgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgag
+gtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggca
+gcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatca
+aaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatca
+tcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataat
+tataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcacc
+attcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgaga
+catcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacc
+taaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctcc
+ccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaa
+gtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcg
+aaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaaga
+aacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttgga
+agtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctg
+tctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggactttt
+aacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccg
+agccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttac
+ttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacc
+taagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctat
+ggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacga
+cagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtc
+tatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaa
+cttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatac
+gtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggc
+cgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttat
+tatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctg
+acgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaa
+ctaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcag
+gcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctc
+taagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaag
+tcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagcct
+tttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagata
+cagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcat
+tttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacatta
+ggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatg
+aatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaa
+agatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaa
+gaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagctt
+catcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtccct
+tccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcatt
+aaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacat
+acccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatc
+tacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacg
+aagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggt
+agtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaat
+gcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcat
+gaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaa
+taactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactga
+gctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaat
+gaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtggg
+tgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaa
+agaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccat
+tgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcct
+caaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacat
+aaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctac
+gttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacat
+catagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggcta
+ggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagt
+tcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtac
+gtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtg
+cattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggta
+gagatacctttgcaatttttcgatgaaggcgaccgagataaatgagctataacactgtat
+gtcttttgattgctataaaacacagaaacggatattaatttaggccgtaaccaacatctg
+ttatttgacatagaacagatggtcctttacagcgtattccggccttaatattgaggtcca
+gtgtattgtcctcctttaaagaagttgattgtaactgacttaaataagacatgtcaccca
+ttcactgggttgcaactgctggccctttttgtccatcgcacgctaatgtgataacagtac
+cgccctcacacctgcgtttaaaagacataaatgtcgctatgaaggttattcattaatttt
+agctgttttcttagaaaaggtaaatttaaaattgaaaaggctagaaaactaaagttacga
+caaatgtgtttgtcaagtaggcgggcatcattgagattgtaagaaataaagccataacca
+gccccggaatagaaaatgttaaggaaaggcgatcttctttgaattcttattgtcaagtgc
+agtcatacgttcttatcagaggacattgcaataaaatctaacaccctcccttgtgtggtt
+gggccatttgtacttcgaagcgtccaccatgtgcagaggataacggaatgtggttccgtc
+ccataaacgatcattctcgcccacttagtggcgcggtaaatcgctctcatagaggtaact
+ggcctgtaatgtccaatgttaggctaccttctccaactttagtacaacgaataatgtccg
+attaacaaggagtcaatttgtcatgaccagttcattcaggtacttgtatctatacggacg
+cgttccagagtagtatttgaaattttgaggttctactgataagtttagctatcgctgtat
+gtctgaataagaatttaatgtttatcttcgataaataacaattaacaactcctaggtgat
+acactgtgaagtctgctgttccccaaattacatatgctattttgttcacataccatgaag
+ttaagctaagtgctctataatggcataaacggttatcaaactagctcgaatttcttttat
+tacgccggaagcggattaactgctgtagatcaaacacgttaggatagtgtcgttttcata
+tatatctaaattcggtctaacatgcattacccatgcttgataacgtagcacttcgcagtc
+taattatgtaatgtccgtttaaccaaactttaaaaaagtttatctatcaccagtgatgcc
+tcatcgtgactacccggatctttagcctttagggtctaaacagaactaatattactacgt
+gtcatactccggagcttaaccaggtgaaacttatttgttaaccaaatttagtgacagggt
+agaaatacgtatcaaattaacccagcaatacaataagcatgaaaataattgtaatcgggt
+ttgggccggaatcccgcttggcgaaaacttaatgacatagtgtgatgcattttgcactgg
+attgagccacaaactcaactagcattatgctcaatatttggccagtgttctacggtttga
+aatttataaaggccgcgcaaaagtcttgtagttacaaacgcataaatctcgaacgtaata
+ggtttaattagaacatccgtaggatttctgtttatagtagatttatactaaatgttctga
+ttagattctgacggccttacccatacaattaataaagacgaatatattagttatagttta
+ctatccaaataaattaagcgaatcgaaataaactgtcacgatactgggcagttatcaact
+tatcacttatacagttcggacactctatattggtctgtgagtactctatcaaactaactc
+ataagttaactgcgcttccattaaatttcaatacgttcttgtgctgtgtacaaacctata
+atcgaataaatgacacatatggagatgcataataaaaaaaacggctccatatttctcgtt
+aatcgggcattcttaaggaggagcatctcaccaaaaataacgttcctgataagtcttaac
+tattagaccgtcttcgggaatgaacgaaacctcaagctagcatggtatagttcttgatag
+cgcgtaaattctgataatactgggcggacagctggaaattagttgccagtgcacctacgc
+aaatagtttacataaatcaacgggctccgaacgtaaatacaaagggttagttacatcgca
+acaagatgaaaagcatgtatgtctaccgtcatccgtccctaacaaacataaaggtggtga
+agaatctcgtaggtcaactataactccatccttgaagcaactactccgcgtccgtgtgcg
+tagttcgcaacgagaacactactgaaaaaagctaaacaactctcggtacaaatgcggctt
+gtgtcgataaagttggtggtagtgcacggaataacataacaaggaatattatttattcaa
+attttttgtgactgttatttgttttctgcctagaatgtaaggatgtgttttttgtgacct
+gatagttacgcttatttcaggtccacggtgcgtgagagtgtgtcctataacggcagggga
+gcgaagtagtgtcctttagactattcaaggtagaattttgataacgctctataaaaggta
+gaaaatcatgattgagcaataagaccccaacttatcaaaaaaggagttctcgacagcgcg
+tgtacagtccctataacggctgtatttcctgtgtcacaacaccctcccatcgcactcaaa
+atgtagatttatgatcagacgctaacttgttcttagagaaaaatacacgggatactctgt
+gcaacgatttcattaataaggtgcagcttgggacttttttggccgtaggctttattaaca
+ttcacagtaggtagcgagacttcctatgaaccaatcatgccacgcgttttaacgtttcaa
+atataagctaggaagcgtttgccaggacttctataatgcaccgttttttttagtacttcc
+ttactagccttagtttatgttagagtctttccaattacaaaggattgaatagccaaaatt
+tctacaattctcagcgaacgccagcttaatctaaacacgagcttcaaatattctacatat
+cggcaggagtcaatatataaatatgaaaatcgtaccatcctcgtacttttagaccaaacg
+tcttcggataattaaatcctttttcaattaccacagtacgtgcattagaactactgctat
+gaaagtaaaccttgaaatatagtcctcaagagcgtatccaagtacattgcacgtgtatac
+agtcgtataaacgagttgatgttctgacgctagagcttaccattcgttaaacagataact
+aaaatttaatggctgagtgacttagtgttttcgacaaacgtcgcggatgtagactattgt
+ttataagcaatttttaaaaacatatgttcaaaacggtatgggatatgtcgaattccacag
+gggtttatgtaccatagaagtatgtataaggtactaaaggtttaaatctgtgatattcgg
+ttcggtgaaaatcagactagtcacacttagtgtctgtaaattagattgggtgaaggtaag
+cgatcccgaactctacaaggcatgggatgagattctaccgactccggataacactttacg
+atcgcgcataactctagctcttagataagtttaacttgtcgatctcataaacagttcaaa
+atctgcgatttattgtatcaaatccatcctctatcttctataatcatctgaaccgcgata
+cggcactatgagccaagtgaagattgaatccaagaaagctataattggtttattttagtc
+catttaaattaagtccggtataagtgctctgtacaatatgcagtctcatgggcatatacg
+ttaactaccttttgatacttcgaattggtaaaatatcgactatcgatttgcagtaaaagg
+tgtagagtccaattactctttcctgttacatacgatctcttagtttggacaactagccca
+tgatggcgctcctctagcgcatgaacctactttataattacatctttatcgatgaatttt
+tttagactgcggaggccttgagttttaacagggctgctaaatttcttaagcgattagacg
+gtagcgtcgtacgctacttgcttggaacaggcaccgaaaatattgatctactattgcgtc
+aactctattctgctaatagcgatggcaaatcacagaagccctcttagtgacaatagttgt
+caactatatctaagtcgacctttactgtatcaacgatcacggagagaattaccgaatacg
+aaacctcaggactaaaaaacggaaaggatttgtcgacggtaaatataatacttgttaagg
+gtagcgacacaggtatactttgggtgtaaacgtggtgcttcccggaacgattttcagacc
+agaaaattgttccggtaaccaggaaatctcgtctgcgttaattcgtgttagtaaacttga
+tcttcagactccttcttttcgttgcagcgagacttaaattatatctgcgaaatagtgccc
+cgtgcatacttcagatggtaggagataccatttggcccattgtgactttacgcgattaat
+taaccgacatacatctgttcctgagctatgatcgtctgaataaattacggtctcctcttg
+atacctaatggtttctggagacgtttctcatgttcaaatggatagcaggagatcgcttca
+tcaagtttagctacgcagagcatcaaaatatgtatgggaaagtcgatttccaaaccagaa
+gggataaagagaaataacggacttctccgtagattagcctgatattttgatgggaatcat
+ggcggcacatacgtaagagttgcgtgaacgaatattttggacggcgggagacacatatcg
+gccattcgttaaggtctctatattggacatcacaagcttagcagtatgagctactaacac
+tcaagacattattgattttttcaagatatgtttcattcctctaccgctattcccatacgt
+tcgattcgccgggtgagcgaaaccacgggactgaggttaagctaatcaataacaactcgt
+tgcgatagagacctatgtatactagagagaattccccaacatttttacaaaaacaaagca
+gactaaaatagatacagtccctccatacaattaggaccaacatgttattgccgatcctag
+cacacacaccacaaactcagaacttctgtcttacctatgaaagggtctgcacttctgatt
+gtacgtgtctaattagcattaatattaaaactaattaggataaactataggtacgagctt
+tactataagtcactaggtgttttccgatcgaaaaacgggaccttcaagccttggtaagta
+catttaggataaagaaaaaaaggaaggtacgtgactaatctgtctaaactgacaatagag
+tagtacctacatgcttcatgtcaagtcttaatacgcaagcgctctcgttatactgctcaa
+caaaactcataaagttggactccatcatttagaatcatagggaccaaaacatttatttgc
+tactgtcactttgtaggtgttctattctgaattcctcatattgatacatgaatcggaata
+cctgtggatcccttaggacgcacgtgctttctttacgtcagaatacatattgtcagaatc
+gagaagttccatgcaattaagaattcgcctctttgaaaactcatatccccacatataggg
+tccaccgttattcggaaacgatataataattattccagcgttgagcgtcccttaagagcg
+cattttcgcttggcctttcttctacgactctacaacgcaagtggctgtgtggagtttacc
+acagcgcagcaccccatagaactacctctgagagcgcgagatggtggcagtatgctctgc
+agctagcgtttagaacgcgcccgcgcattaaccagtcatattaaaatggactgtcttaat
+tgtcggcattaggagcaatattaactgatgagggtatcggtcgcagaagtaatgacggaa
+atacgcctctagtccgcagagatacgattacagactcagatcccctaacaagcaaaacga
+ttaaatcggaatcactccccctatgacatatttgaaatacacaagaaaccacgcaacatg
+tcccgcattctcaaccgcgctttataagatgttgagtctgagaattagatgacctaactg
+caagaatcatggcgagtttatctagtaggcaagtctgtaccctagggttcgaacgctgtg
+acgtcgtgatcggtctaaggacttagatgataaccaagaactggtttaccgagtactttc
+actattaggagtaattacatgcgttcaccgcggaatacgacgaaattttttcatatcttt
+atgagcgagatcgtgtcgtctttgcattgcaacagtcgctaccagtaattgctgatcaat
+tatagattcattatacagatgcttacttttctctattcaatactgtcatgagttgttttt
+aaataagcaccagaattatgtcgcctagtataatcttgcttccacttgaatcaatgcgat
+ggacagtattctactgattgcaaagtagtctatttcggcttagcagtacgcatgcctatt
+tttttgcaggcacagaataatatgcaactaggattctcggcatccaattaacaggctaaa
+acaccaccgaaagacaggtaatctacgaagttgatgtttactacagaaagcgaatgatat
+cacttggagaacattttagatgcccccttttaatctagactgagtgtaccaatatatcac
+cggtctaccgaatcagcttgaataaaccactctagtactcatgataaccgagcatacaca
+tgtatttctcaatgcactgaaggtgaactgtttacaccataccttgcgaatcaacgtggc
+gacttatacttctgtctttgagtacagcacaccctaatgaatctaagttagttgttgata
+cgaattgtaatttgactggatctcgcctcctcatctagattcttagagaagatgtttctt
+atagccggtactgtaactttattgatctggtttatggtaatcaacattttacctctattt
+aaacgtccttgcgccgtgcactcaatcctgatcggtttagattcaagcgattatcgagtc
+tggaggccgagaaaagaaatgcacagagtaagctctctattgcgacatctacgtagaaac
+tcgcatttcagatcgagtaagcaactctcattgtgttgattcagtaatacaagattacct
+acgcttctacgaaatatactatagatttagcctacgtcacctttagtgtcgagtcggagc
+tttgaagatcggatgcggtgtggactgtgtataggcaattttgctgcgagctcgtgactt
+ttggttgatgtcgatatcaatgggatacctcaaacgtctttatctctggataactcacat
+tgagtataccggtaaaaatttattctattcatctaaatagtcagtgagggctagggtcgc
+aatcacattaggccacatacacatacttaacatgttctattgacccgacccaactttagt
+agcattgtagccgtttatgcaaatatgccaggcgccaaacactagccagagggcattttg
+ttacatttatttaatcgattattacacagtcggaacacgcctacatgcgttcgacttatt
+tgcgacatggtcaacaattcagtaatttaatccaaaacctaaagtcagagacatgacact
+aaaatcacattaaggtcagttagtgaaggaatggctaaccagctagagaatgcatcatta
+acaggcacttattgtcaaatattttccagatctaagcaacatcacgttaaaaagtacaac
+aatcacttaaaacacatcagtccaggtgtaattagaaagccgcttagtaggcaagcgtag
+gagtataaatgtagacaatagtcgggacttagcagacactggatgcagtcatagaagatc
+ttgcataacacgttagggttagagctacgaacgcccatcattaactgcctaaagcgtgcg
+tgagcttagcgctaacttttccaacacgtttgtgatttcgttcataatgtatcaatttca
+cagtcatatacagggagtgtagaaaaatcgcaattaacatacgttgacctatttttgttc
+agagttcagttagagcctaatgattcgagagcaataatcaggacagcctcataggaagtg
+tcaatcacttagaagctatattattataaatcgctctttactgtcgtcgaaggaacgagc
+gagagagaatcagttgcctgcaactggcttaacaatatgatacataaaaatattttcatc
+accactaagacggtggaattcagacttattggcaacttaggatgggactattaaataacc
+cataagatgttgggataaagttacgaaacgaaagggatatagcctgttagataggaaatc
+cccaataaaacatagccggcctccacagcagtgatctattccgccacgcgatatctttat
+accacgcaatataccaataataaaggttaaatgtggttgcgatttaaaaaagatacatat
+cagttgcaccgcgtagcaaatccgtatgtgaagcgtaacctagaattatagcgtctgcaa
+gttctctaagcttcctctgcaagatacaatatgactttttagcttttttactaccaaatc
+tcagaatcttagaaacaggttggtacgtgctactcggaattcccaaagtaccctgctata
+tatgccattccttcattggtccgggctcaccatggggccatcatagtaatagaaggtagt
+aaaactagttgatttccgacttttaacaatcactatcctgacccagatatgggttccgac
+tggcccttactccagtaagggcagacacacagacaacgagaacttgataactttgaattc
+tcaaatcgatcattgcaacgtgacttatttactagcctactcctataattcatacgtcaa
+atacatttcaacggaggaagataataagtaaatattcactaaataatggtcgaaggagtc
+ctttgccaacataagtccacatatgcgctatagattttttcttggggttcatattcaata
+agataaacagcaagagtatcacgtcagcgagtcattgagatcttggctagcattgtgata
+gcatattctacctaaatggtagtctagcacagagtggataagatatcagttagatataga
+caagtactataacagatctcgcttcgttggattgtatggctagctttgatgatatgattt
+tataaaaattgatccagacctgacctggccaattatattcattttttatgagtaaaaata
+gataaccatgaaaatactcaagccccttaggacgtacaaagtggtaacataaatttcagg
+tgttattctgcaaccacacctgttttgggttttcaaaaaggctaagcagattggttttac
+agataatccctgaacactggtatctcccaacgatgtcgttcccaacccttgctgaccttt
+taagctctgctgaagttttgtaaactaggcggaaaatatgttcgatagatccactcgcct
+gaggtagaaattcgtcttagtaacgcctctttggattacacagaatagtgtactgacacg
+tacactgctgcagcagccatacgctaacattaaaattcgttgagtctacatttgttgtta
+ttcggattatgttattgggaatagtatttttattcccctgcgtgaaaccacatggataga
+ttagcctactcctaaagactcccttttggtctacggttcaattctcttactgagtttatg
+ttcgtaattatatcggcgcagtgaatctcctaattatcaccggagttaccagacgccatg
+aacttatggccagaaacattgcatgtggcctacataggattagtatcaagagtttacgtt
+tgcaacgacatttgaccaacttgaccattcctgcttgtagaccgcgggaactcccctgca
+cgcgactatagaagttggtggtggatgtggcttatgccgcaaatatggttttgaaaaaag
+taatctattgcttgatacctgaattgagacatgtataagggctattgccagatgaaaaac
+tgcatataaggtcaaacaatataagaacattatacataggatcttagcgttcctcaggat
+ggtatacgctataaagtctagcttcagcagctaaggagttttgccagtgcggacttccgc
+tggaagattaggtttaaccgccctgacatcttcataaggtcgggcctgattcaaacccct
+ggagtgccgtctcatacttgaattaatcgatggaaaacttcttctagtctaatattatta
+ttaacaaatgacggttcaataaataacaccgtaagggtgggaaactgttaagtgatgaat
+cattttaacctatcatccattagctacagataatgataccccgatccgactagggggtaa
+gtggttgttccgttaggataaaccatgtaaaacgttagagggtttgtagattaattggta
+ttccagataaatgaggtcagggcgagtgatcaattacactgaaaaattgtcagcttgcgc
+ggtagttgttaagacagtataaatgaaggggattcagaagcaagtttctcgattgactga
+atttataaaccagtcgtcaatcatgatttttgtgtcgattaaagcctaaatggtaattta
+aaccattgatatttatcgagtctataaatatctttggttgtatattacttcacaatcacc
+aattctaaatgattcttccactgtgcgggtggagatatcaggacgggttaaggttgacct
+acatcgttttgatacaacaaaaatcaaagcacatggctggggacttctcgatactatctt
+tgagatagtacgggcaagagtgggtgacgcctccctacattttcaagtctatcggataac
+ttctcggtaaaacgctcgcgatatagttttaaagcattgatttaatccacgcaggagcaa
+gttttaccggtcgaatgagaaaattcaacgtaagtgtcatatccagtcatggttagccaa
+aagcatgggttatccaaaaggaataaaacagctcttcaacaaagagatgaggcttcataa
+cttcgatgaatgcgtatggttctgatatatagatcgatgcatgaggacactttattttag
+ccggcgaattaatggaatccatacgttacttatttggacatgacttctaggtgtttttgc
+tgtcccgtttagcgatatttacagattagtatttcgtttctcatagttaattgtatctag
+atactaactcgttgaagacgcataccttgccatttgtacaggacttaactgttccgtgcg
+taatttgaatttcttataggttcttcaaggcacgaatacctcactcatgaccgttcatac
+tctagttaaggtcgggaatactacgtatgcagggaattgtaacctaggagatttacaact
+ctttaaacaagagtcgctgaggtccaggatcaaaacactgaatctcctaacttcgggtgc
+ctccgtaaatcacctagaaacctactcatacatttgcaattttgagatgtaggcgaaaga
+gagaaatctgctttttaacggtatctcttgggattccttttaaaaacacataacgatagt
+aatgtaccaagtaaccaaaagctgggatgtgtctgtgtactgatccgccgtgtcagagta
+gtccgccatgaatattgacgtcaaggctagtgtcatcaggtattgatgttcattgtaaat
+gaaggaatgaactaatgtcaccaagtaaagggggtgaaaatgctccccagggttctacag
+acatagagatggtcagaacacgacccccctctcaacgcagtgtatttgaaatatatggac
+atatctaccttattctgtaattttagatgtgttctgtgtataccgatattgataagtcaa
+taggcttgattacgtatcttaagacaaatctgtttcgcaagtaggaccgcatctttcaga
+ttgtttctttttatgccataacctgcccaggaattcaaaaggttatcgatacccgatatg
+ctgtgaattattattctaatggccactcattcctgcttatatctggaattggcatgaata
+tcttacaacctaaagtctggcgttgcgccagttctacttcgtaccggacaccatctccag
+tcgttaaccgaaggtgggtacgtcacataaaagttcattagaccacactttgtgccgacg
+tatatagatatattacacgtatagggaatgttttctcctaggtgacccgaccttctacta
+aggttgtacatcgtataatggcccattaactacgaggaaagtggtattgacctggtaatg
+cacgttcttcgatatataccgacgaggtaaagtctactattgcaaagtttgacgttatac
+tgataagtttagatttccctggatcgcgcatgaacaatgtatgcgttatctgccatatat
+aacatgttacaaatccttggggatactatcgctactatcatcggaccaaaattaaatagg
+ctagtgtcttatcagaacatcatgtttaccgaactgatctattttccaatttaagctgat
+attacgtccgcgtatttattttagttccccggatgacgattatctgagctacatcataca
+agttagcatactcgccggtgcattgatttcttatttcgctatatcttcaagttcacaggc
+ttcatatagttccaattagcagtataattaggttttgtaactttaaccatactttataaa
+aggttatattgcacaactgatcaagcatccgctataacccgagctttaccagttagcggc
+taataacaaataagatgacttcgtgtcatacgaccgtcatgatcatgctctaacttaggt
+gggaaccaaatttaggcaatgggtagtaataagtataaaatgataccacatatactataa
+caatgaaattatttgtaatccggtttgccaacgtatcccccttcgcgataaattaatgac
+atagggtcatccatgtgccaatcgtgtgtgccaaaatctcaaattcaattatcatcaata
+ttggccaagtgttataagcgttgaaagtgatataggccgccaaaaagtagtctacttaaa
+aaccaatatttatcgttcgttattgctggtagtacaacatcacgagcatttctcttttga
+gttgatttatactatatctgctgatgtgattatgtcccacttacccagaatattaagaaa
+gtcctagattgtaggtatacttgactataaatataatttaagactatacaaataatctgg
+ctacattatgccatcgtagaaactgataacgtagtaacgtcggacactagattttggtcg
+gggagtaatctagcatactaacgaatttgttaaatccgctgaaagtatatgtcattacct
+gcttggcctgtcttcaatacgtttagactattaaggactcatttcgagatccagtattaa
+ttatacgcatccatatttatactgaagacggattgagttaggacgacaagctaaacaaat
+attaagttaaggattagtattatattgtagaaactcgtcgggttggaacgattcatcatc
+atagaatgcgttacttattcagagagacttaattcggttatgactggcagctcacctgga
+aagtaggtgaaaggcaacagaagaatattgttgactgaattctacgggctacgaacgtaa
+ttacaaagcggttcgtaaagagcataaagatcaatacaatggatctctacagtattacgt
+aaataacatacataaacctggtgttgattcgactagctcatagattaatcattaattgaa
+gctacgaagacgcggaagtctgcggagtgagcaaacagtaatcgactgataaatgcttat
+aatatcgcgcttaaatgccgcatggtgtacattaacgtgggggtagtcaaaggaatatat
+ttactaggaatattagttatgcaaatgttgtgtcaatgtgatgtgttttatccagacatt
+ggatgcatggctgtgggggcacaggatacttaccattagttcacctacaagcggcgtgag
+agggtctcagttttagccagcgcagagaagtacgggcctttagacgattaatgctagaat
+tgtcataaacctcgtgaaaagctagttaataatcatggtgctagaagaacacaacttttc
+tataaaccagttctcgactgacagtcgtaactcactatatcgccgctttgtactgtcgca
+aaaaaacctcacatagaaagaaaaatctactgggtgcatcagtagagatcgtgttctgag
+agataaatacaccggatacgatctgcatcgagttcatgtattaggtcaagcttgggactg
+ttgtgccagtagcattttttaacagtcaaagtagggtgagacacgtcatatcataatata
+tgccatcgaggtttaaagtttatatgataagctagcatgcgttgcaatcgtattcttgaa
+tgctccgtggtttgtactaattcctttatagactgagtgtatcgtacactcggtacaatt
+acaaaggatggaagagcaaataggtcttcaattataacagtaccccaccttaatctaaaa
+accagcttcaattagtattaatttcgccaggagtatatatataaatatctaaagactaaa
+agactcgtacttttacaacttacgtcgtagcataattaaatcatgggtaaatgtcatcag
+taagtgcattagaaatactcctttgtaaggatacagtgaatgtgtctcagcaagtcagta
+gaaatggaaattcatactcgattaaggcctataaaactgttgttggtatctacagagtga
+ttaaaattagtgaatcagattacgaaaatgttttcccgctcgcacttacgcgtttagaca
+aaagtacaggtggtacaattggctgtagtagaattttggtataaaataggtgataaaccg
+gatgggtgtgggcgaattcaaaagcggtttttgttccatagaactatgtagttggttata
+aaggttgtaatctcggagattaggttagggcttaatcagaatagtaacaatttctctatg
+taaagtacagtgggtgatcgtatgagttcacgaactcttaatgccatgcctggacaggat
+aaacaatacgcatataacttgacgatcgagcttatatcgacctatttgagaagtttaacg
+ggtcgatataatatacaggtcttaatagccgattttttctagaaaagcaatcctatatct
+tagttaatcagatcaaccccgtgaacgatatatcagcaaactgaacattgtatacaacat
+tcctttttgtccgggtggggactccatttaaagtatctcacctagaactcagcggtaata
+gatgcagtctcttgcccagttacggtaactaaatgttgatacttagaattgctaaatttt
+agtctagacatttccaggtaaaccggtagacgacaatttctctgtcatctgtcataagat
+cgcttagtgtgctcaaattgcaattgagggccctactatagacaatcatcagacttttta
+attaaatagttttccatgaatgtgttgtcaaggcggaccccttcacttttatcacggctc
+ataaatgtcgtatgactgtagtcggtagcggccttcgagtcttcaggggaaatggaaaag
+aaattaggcttctaagatggactataatcgattaggctaattccgttcgcaaatcacaga
+agcaatcttactcaaaattgttggaatcgatagcgaacgcgaccgtgaatgtttaaaagt
+gctcgcacagaattacccaatacctatcatcacgacttaaatacccaaagcagttgtagt
+cgcgtaatagattaagtctgaagcctagagacaaagggatactgggcggggaaacctgct
+ccttcacggtaacatggtaacaacagaatttggttaaggttaaaacgaaatatactcgga
+gtgaattactgttaggtttcgtcatcggatcaataagtagtttccgtgaagacactctta
+tattagatctccgaaattctgacccgtgcattaggcacttggtaggagattccatttgga
+acttgctcaatgtaagccagtaatgttccgaaataattcgctgcaggagcgaggagccgc
+tgaataaaggaccctcgcatcttgttaccttatggttgagggtcaccgttctctgcgtca
+attccagagctggagatacattcatcaacgttacctacgcacagaataaaaagatcgagc
+gctaactcgttttcctaaacacaacggatttagacaaattaccgaatgcgccggagagta
+gcatcttagtgtcatgcctatcatggcggctcagtacgaagagttcaggcatcgaatatt
+gtggtagcccgcactcaaagttccgccattaggtaagctatatattgtggtcagaacttg
+aggacaactatgagctactaaaaataaacaattttgtcatttgttctagatatgtggcat
+tcatcgaacgcttgtaccagaagttacattcgcagcgtgagcgaataaacccgaatgagc
+gtaacattatcaataacatatagttcagatagagaacgaggtattcgacagagaattacc
+caacattggttattaatctatgcagaataatttagataatgtcactacataatattagga
+ccaaaaggtgattccccagaagacaaaacaataaacaatctcacatattcgctagtacct
+atgtatgggtatgatcttctgattggacggggataatttccaggtatattaaaacttatt
+accataatctagacctaagagaggttatataagtaaagagctgtgttccgatagaaaaac
+ccgaccttaaagacttgcgaagtaaattttgctttaacaaaaaaacctacgtaagggaat
+attctgtataaactgaaaagtcaggtgtaactacatgagtcatgtcttcgattaattaca
+atgcgatctcgttattctgatcaactaatatcataaactgccactacatcttgtacaatc
+attcgcaacaatacttttatgtgctaaggtcacgtgcttcctctgctatgctgatttaat
+cagattcataaaggaatacgaataactctggatccattaccacgcaagggatttatttac
+ggctgattactttttggctgttgacagaactgccatgaaagtaagatgtcgcatcttgca
+taaataatagcacctaatatagccgacaaagtgattccgataacagattttaagttgtcc
+agccttgagactccatgaagaccgcttgggagcttccccgtgattagaagaatctaaatc
+ccaagtggatggggggagtttaaatctcagcaccaacaaatagtacttcctctcagagcg
+cgtcatggtcgaaggagcctatcctgatagaggtttgaaagcgcacgcgcatttaactgt
+catattaaattggaatctcgtaagtgtcggcagtacgacaaattttaactgatgtcggta
+tacggagaagaaggaagcacgcattgaagcagctacgcagaactgagaagatgacactct
+aagatacaattaatacaaaaacgttttaagcccaatctatcaacagatgtaagatgtcta
+atacacaagaataaaaccttcatgtcccgatgtataataacagctttatttctgctggtc
+gaggtgaagtagtggaaattactccatcttgctgcgcgtctttatagtgttggctactct
+gtaaccgacgcgtccatccctctctcctagtgatccgtatatccaattagaggataacca
+acatctgcgttaccgacgaatttaaatttttcgactatttaattccgttcaaacccgtat
+tcgtagtaagtgtttcatagatttatgaccgacatcgtgtacgagttgcagtgcatatgt
+agataccactaattgctgatctaggatacatgctttataaacatgcttacttggctattt
+tatttactgtcatgtgggggtttttattttcaacaagtatgtgctaccattggataatct
+ggcttcaaattgaagatatgcgttccaaacttgtctactgtttgctaagtaggagttgtc
+ccattagaactacgcagcacgtggtttgtgatcgaaaagaataattggcaaatacgaggc
+tagccttcaaatttaatgcagattactcctcagaaacacacgtaagcgacgaacgtgatg
+tttactacacaatgcgtatcatagaaattcgtgataatttttgttccaacctttgaatct
+agactgagtggaaaaagatttcaccgggataccgtttatgctggttttaaaaactcgtcg
+aatcatcttataactgcattcaaatggatttctcaatcatctgtacgtcaactgttttaa
+caataacgtcagaataaaccggcacaatgagacggcggtctttcactacaccacaccctt
+aggattataagtgacgtgtggattcgaattctaaggtgacgggatctacaagcctcagct
+acattaggtctgaagatctttcgtatagccgcgtatgttactgtttggatatgggttatg
+ctaatcaacagttgacagcgagtgaaacggccttgcgacctgaaatctttacggttacct
+tttgattcaagacaggatcgacgatggaccacgtgaaatgaattcaaaactgtaacatcg
+cttgtgcctcagcgaccgagtaacgacaagttcacatcctctatgcaactatcattgtgg
+tcattaaggtattcaagattaactaagagtcgaccatatattctagagttttacaattag
+gaaccgttagtctagactaggagcgtgcaacatcgcaggaggtgtggactgtcttgaccc
+aagttgcctgacacatagtgtcttttgcttcatgtccttagcaatgcgatacctcaatcg
+tagttttatcgggataaataacatggtgtttaaccctattaatggtttctattaatctaa
+attgtaaggcagcccttgggtcgaaagcacattaggccacatacacagtatgaaattgtt
+cgagtgtccagaccataattgactaccatggtacacggtgttgctattatgactcccgca
+aaactcttgacagagggaattttggtacattgatgtaatcgatgatttaacagtaggaac
+tagacgtcatccgttagactgagttccgacatgctcaaattgtcaggatttttatccaat
+aactaatggctctcacatgtaaataaaatcacattaacgtcacttagtgatggattcgct
+aaacagatagactatcattcatgaactggcactgtttcgattatatttgcaacatcgaac
+atacttaaagttaaatacgacatcattcaattaaaaaaattcagtacacctctaatgagt
+atcccgctttggaggaaagagtagcactttaaatggacaatttaggccggactttcctgt
+aaatggatgaagtcattgtacagcttgaataaatcgttagggttagtccttacatccacc
+atatgttaatgaataaagcctgagggaccttagagctaacttgtccaacacgttgctcat
+ttacttaataaggttgaaatgtatcagtaagtgacagcgagtgtagattttgaccattta
+actgaccttcacagttttgtcttcagacgtcacttacaccataatgatgacagagcttgt
+agatgcacacactcattcctagtgtaaatcaagtagtagctagattattataaagagata
+ttttctggcgtcgaacgtaacacagagagagtataaggggcatgataatggcttatcaat
+atgtgtaagaaaaagtttttaatatcatctaactcggtggaatgcacacttatggccaac
+tgaccttgggacgagttaagataccataagaggttgcctgtaagttaagataacaaaggg
+atattccatctttgtgtgctaagaacctatttatatttgcagccataaaaacctctgtgc
+tatgcagccaccagagttatttatacaaagaaagagaccatttagatacgttaattctgc
+ttgcgatttattaaacagacatttcacgtccaaccactacaaaagccctatcgcaagacg
+atcattgtattatagcctatgcaacgtagctaagcggccgaggaatcataaaatatgaat
+tgttacattgtttactacatatgatcacaatctttgtaaaaggttcgttcgtgatactac
+catgtacctaactaacctgagatatatgcaatgacttatggggtcagcgcgcaacatccg
+caaagcatagtaatacaaggtaggaaaacttctggatttcccaaggttataatgctctat
+actgaccaagagatccgttacgactcgcaatgaatactctaagggcactcacaaagaaaa
+ccactaattgataaatttcaatgataatatcctgaattgcatcgtgtatgagttacgaga
+agtcgcatttaatgaattagtcatagaaatgtcatagcaggaacataattactatatttt
+aacgatttaatcgtagttggagtcctttcccaaattatgtcatcagttccgatttagatg
+ttttcgggcccttcttagtaaagaagttaatatccaagactagctcctcacccacgcatg
+cacatattcgcgagaagtctgatagaatattcgacagaaatgcgactctagctcacactc
+gttaactgatcaggtacttatagacaagtacgttatcagatatcgcttcggggcattgtt
+gcgctacctttgtgcatagcagttttgaaaaattgttcaagacctgaacgggaaaatgat
+attatttttttaggaggaataatacagtaccatgtaaatactcaaccaccttacgtactt
+cttacgccgaacatatatggcacgtgttattcggctaacaaaactgttgtgccttttcta
+taaggataagcagattcgttttaaacatatgacctgtaaactgggatctacaaaagaggt
+acttaaaataaattgcgcaacggtttagatctgcggatctttggttaaagagcaccatta
+gatgtgccatacttcctatcgcctgagcgagaatttagtctgaggaaccactcttgggat
+ttaaaacaattcggttaggacacctactcggcggatgaagcaatacgataacattaaaag
+tcgttcagtctaattttggtcgtagtacgatgagctgatggccaattgtatttttattaa
+cagcactgaaacaaaatggagactttagactaatactaaagtctcaatgttcgtcgaacc
+ttaaatgctcggaatgaggggatcttcggaagtatagcgccgaagtgtatctcattatta
+taacaccagtgtacagacgacatctaattatggccagaaactgtcattgtgccattaaga
+ggattagtagatagtctggaccgtggaatagaattttgaccaaattgaccagtcctgctt
+gtagacagcgcgatctaaactgcacgagaatatacaagttggtggtgcttgtggctgagc
+acgctaagatgcgtttgtttttacgattctagtgcttcttaacgcaattcagtcttctag
+atccgctattccaacatcaatatctcaatttaaggtcaatatatataacaaaattagaca
+gagcagctgacacttacgaagcatcgtagaaccgatatagtcgaccttatgatgatatgg
+acgtgtccaagtccgcacttccgatgcatcttgacggtgaaccgaaatgaaatcttcatt
+agggcccccatgtgtcaaaccactcgagtcccgtctctgaagtcaagtattactgcgaaa
+aattcgtctactattagtttattatgaacttatgacgcttaaataaattaaacagtaagc
+ctgggaaaatgttaaggcaggaatctttgtaacagttcataatgttgctaaagattatca
+gaccccgtgaagacttcgggctttgggcttcgtaccgtagcataatacatctatatagtt
+agaggcttgcgtgttgttgtgctattccacatatagcagctctgggcgactcttcaatga
+aaatgaaaaatggtaacctggcgacctacttgttaagtcagtttaattcaaggggattaa
+gtaccaagggtcgagtttctctgtatttattatactgtaggcaagaagcttttttggcga
+gatttaagacttaagcctatggtaaaaatttgatagtgagcgactatagtaagagatttg
+ggtggttagtaattaaaattctcctatgctaaatcaggcgtacaatctgagggtgcacat
+ttctcgacgcgtgaaccttcaccgaaagcgtgtggattatacaaatttcaaacatattgg
+cggggcacttatccataatagatttctgtttgtacgccaaactctgcctcacccctccat
+aaattgtattggctagaggttaaattctccgtaaatagagacacatatagttttatacaa
+ttgtttgaatcaaagcacgagaaacttttaaccgtacattgacaaatgtcttcggatggg
+gcagagcatctcttcgtgacccaaatcaatcgctgagcaataagcaagaaaacacagatt
+atacaaagagatctggatgaagatattcgtgcaatcactatcgttatgttagagagttcc
+atgcatgaggactcgttttttgaccaggagaattaagccaagaaataactgacgtatttc
+caaatgaattctacgtgtttttcctgtcacctttagccagtgttaaagatgactatggag
+tttcgaataggttattctatagacattataacgagtggaacacccataccttcacagtgc
+taaaggtaggaacgggtacgtcaggtagttcaagggattttaggttcttaatccaacgaa
+gaaataacgcatcacccgtcattctattgttttcgtcgggattacttagtaggcagggta
+ttctaacctacctgagttacaaatctttaaaaaactggccatgaggtcatggtgataaaa
+tctgaatcgcctaaattcgcgtccctaaggaaatatactagaatccgtctcagaaagtgc
+aaaggttgacttcttcccctaacacagaattctcagttttatagctatctagtggcattc
+ctttttataaaactttacgtttgtaagggtccaactttacaaaagctcggatgtgtatgt
+gtaatcttccgccgtgtaagacttggaacccatgtatattgacggcatggcgtggctaag
+caggtattgatcttcagtgtaaagcaaggtatgttctaatctaacaatgtaaagccgggg
+attagccgccaaaggggtctaatgacatagagatgctctgaaatcgtaccaactataaaa
+gcacgggatttgaaatatagcgacagatcttccgtattctgttagttgacatctgtgctg
+tctttaccgattgtgatttggctttagcagtcatttagtttcgttactcattgctcgtgc
+gatagttccaccgaatatggcacattcgttctttttttccattttactgcaaaccttttc
+aaaagctgatcgataccactgatgatggcattgattagtcgattggcaactatgtcctgc
+ttatatctccaattgcattgaatatagtaaaaaataaaggctcgccttcccaatgggcta
+cggagtacacgaaaaaatcgcaactcgtttaaccaagcgccgtacctaacatataagtga
+ttgagacaaatagttctccagacgtattgagatatatgtctcctataggcaagcgtttct
+aattgctgaccagaaattagaattaggttgttaatactatattcgaccattttattccac
+gaatgtgctattctactggtattgctccgtatgcgatatataaccaacacggaaagtcgt
+cgattgcaaagtggctccgtagaatcatttctggtcatttaccgggagcgcgcttgaaca
+atggatgcggtatctgccatattgttattgttaaaaagacttccgcttactatcgcttcg
+atcatcggaaaaatattaatgaggattgggtcgtataagaaaatcatcttttcagttcgc
+agatttttgccaatttaaccggttatttcgtcagacttggtagtgtagttacaagcatca
+cgattatatcagctacagaattaaactgtcctgactcgacggggcagtgtgtgagtattg
+cgctatatattcaaggtaacaggaggcatataggtcatagtacaaggataatgaggtttg
+ctaactttaaaaattattgatttaacggttgattgaaaatctctgcaagatgacgctaga
+acacctgatgttcaagtttgccgataataacatataagatgaattactgtctttagaccc
+tcatgttaatccgctaacttagggcggaaacaatgttaggctatgcggagtaagtactat
+attatgataccacatagaatttaacattcatatgatgtctaatacccgttcccaaccttg
+caaccgtcccgattaattaagcaattacggtcatcaatgggccaatcctgtctcaaaaat
+tatcatattcaaggttcagctattttggcaatgggtgagtaccgttcttagtgatttacg
+aacccataatctaggcgacttaatatacaagatttagagttacgttttccgggtagtaca
+tattaacgaccatggatcgggtgaggtgttgtattagttatctgatcttgtcagtagctc
+ccaatgtcccagaatattatgtttctactagagtgttcgtatactggaatttaaatatta
+tgtaagactagacaaattttatggatacattaggccatcgtagaatatgatatagttgta
+acgtccctctatagattttcggagggcaggtatattgcttaataaagatgttcggaaatc
+agcggaaaggatttgtaattaactgatgcgcagcgcttaaataagtttagactattaagc
+tatatgttcgacagcatgtagttttttttaccagaaagtgttatactgatgacccatgga
+ggtagctcctcatgataaaaatattgttacttaagcattactattatagtgttcaaacta
+gtaccgttgcatactttaagaatcagacatggcgtttcttatgcagacacacttttttag
+ctgttgacgcccacctcacatccatagtaggtcaatcgcataagaacaatattctggact
+gttttattacccagaagaaagttttttctttccggttcgttaagacaataaagatcattt
+cattcgttctcttaacgatgaactaaagtacttaaagtatccgcctcttgtttcgactag
+cgcatagtgtaataattaaggcaagataagaagaacaggaacgcgcacgtcggagataac
+tctaatagtctctttattccgtttaatatagcccgtaattgcaccatgcgctacagtaac
+ggccgccttcgcaaacctatttatgtaattccaagtttaggtatgcaatggttggggcaa
+tgtgaggggttttatcaagactttcgttgcttcgcggggggcgcaaagcagactttacag
+tagttaaccgaaaaccgcagggagtcgctctaagtgttaccaacccctcactactacgcg
+aaggtactcgattattccttgaatgggctgaaacatcgtgattagcgtcttatgattcag
+gctgatagaagaaaacttattttctatattccacgtatacaatcacactcgtaactaaat
+agttcccagcgttgtaatgtcgctataataaataaaatacaaagaaaattcgtctgggtg
+cataagtacagttagtcgtctgtcacataaataatccgcagtcgatctcattacaggtat
+tgttgttggtcaaccttcgcaaggtggtccaagtagcattgttgaacagtaaaactaccg
+tcacacaaggaatatcataatagatgccatacacggttttacttgatatgtttacagtcc
+ttgagttgcaatcgtagtattgtttcatccggggtgtgtacgaagtaatttagacaaggt
+gtgtagcggtcactaggtaaaatgacttaggatggatgagcatttaggtattctatgata
+acactaaccatcatgtttctaaaatcctcaggaaatttgtattattttaccaacctgtat
+ttatagaaagtgcttttgacttaaagaagccgaagtgttcaaattaaggagtacctgatt
+gaaagaatggggaattgtaatctgtaactcaattacaaataagccgttctaaggattaag
+gctttgtgtctaagcaactcacgtgaattcgaaattcatactcgattaacgactttaata
+ctcttctgcgtatctacagactcatttaaattacggaatatgttttcgtttttggtttcc
+agctcgcacgtacgcgtttacaaataaggacacctggtacaattggctggagtacaatgt
+tggtttttatttgctgattatcccgatccctgtgggcgttggcataaccgggttttcttc
+aagactactttcgtgttgcttatatacctggtaatatcggtgagtagcttagggcttaat
+cacaatactaacaagttctctatggattggacagggcggcatccgttgactgaacgatct
+attaatccattccctgcactggataaacaagacccatttaaattgaccatagagatgtta
+gcgtcatatttctgttcgtgatagggtacatatattataaacggattatgagcagtggtt
+ttctagaaaagcattcatagttaggagtgtatcagatcataccactgaaccatagagcac
+aattctctactggctatacttcattcctttttgtccgggtggggacgaaatttaaaggtt
+ctaacctagaacgcagagcgaattgatcaaggcgctggccaagtgaacggttctaaatgt
+tcttaatgagaattgcgtattttgactattgacagggcatcgtaaaccgctactcgactt
+ggtatctgtaatctgtatgtagatagagtacgggcctataattcaaattcagccaccgaa
+gattcacaatcttcagacgtttgaaggaaagaggtttactggtatgtggtgtcaagcccc
+acccattctctgttatatccgagcattaatgtagtttcactgtactacggtcacgccgta
+gagtcggcagggcaaatccaaaacaatttaggctgagaagtggcactataatagtttagc
+ctaagtcccttcgctaataactcaacaaagatgacgcaaaagtcggcgaatagattgcgt
+tcgcgtaagggtatcttgaatactgatagctctcatggtaccaagaactttcataacctc
+tttatttaccaaacctgttctactagcgttagtgttttagtctgtagccgacacaaaaac
+cgagaatggccggcgtaaccggcgcctgcaagctaacatgggatcaaaactattggctta
+acgtttaatcgaatgagactagcactgtattactctttcgtttcggcagcggatcaataa
+ggaggtgacggcatcactctcttatagtagatatcacttattctcacaacggaagtagga
+tcttccgtcctcattaaatttgcaactggctcaatgtaacactgtaatgttaacaaagta
+tgagctgaaggtcagagcagacgatgtagtaaggtccctcgaagctgcttacagtatcct
+tgaggctcaacgggctatgcggaaattccagacctcgagttacattatgaaacgtgtcat
+tccatctcattaaatagttcgtgccctatcgccttgtaatataaacaaccgtttttgtct
+attttcccaaggagaaggagagtagcagcttagtggcttgcctatatggccccctaagta
+cgtactcggcacgcttagaagattgggctaccccgcactatatgttcccaaagtaggtaa
+cctagatagtgtcgtatgaaattcaggtcatcgatgagagtataaaaatatacaattttg
+gcaggggttatacattgcgggcatgaagagtaacattggacatgaacggacattcgaacc
+ctgtgagtttaataccctatctccggatcattataaagtaaatatacgtcacttactcta
+cgtgcgtttagacagtctttgaaactaaattggttatttttctttcatctagatttgtct
+gtatctaactaaattatagttccacataaagctgattcaactgaagacataaatataaac
+tttctaacatagtagcgaggaaagagctatgcctagcatcggatcatgcgtccgcgagta
+gttcctggtagagttaaaagtttttccagaatctagaccgaacacagggtagtgaacgaa
+agtgcgcggtgaacatacataataccgaacgtaaacaattccgttcgtattgttgctgta
+tctatatttcctacgtaaggctatttgatctataatatgaaaagtcacgtcgaaataaat
+caggaagcgcttcgagtatgtacattcagatctccttagtatcatcaaattatagatttt
+acggccacgaattattggtctagatgtcccaaaaataatttgatgtcagtagcgatcgtg
+cttcctcggagttgaggttggaagaagagtcattatgctataccaagaactctccatcca
+gtacctagaaaggcaggtatgtaccgctcattaattttgcgatcttgacagatctgcatg
+caaagtaacttgtaccagatggcttttataatagaaactaagtttcccgaataacggtgt
+acgataacagatttttaggtgtacagacgtctgactcaatgaacacacattgggacctgc
+cccgggaggagtagtagataattaccttctccagcgcgggtcttttaatatcacaacata
+aaaatactaattaatatcacacaccctcatcctcgatggagcctagcatcatacacgttt
+gatagacaacgccaattttactgtaatatgatattcgaatctagtatgtggacgctgtac
+cacattgtttaaaggagctccctttaccgacatgaacgaagcaagctttgtacaagatac
+gaagaactcagtactggtaactataagagacaatttatacataaaagtgttaagaccatt
+atataaaaagaggtatgaggtctttgtaactacaataatacattcatcgaacgatggaga
+ataacagagttatttctgctgctcgagctctagttctgctaatttctcaatcttgatgcc
+actcgtttgagtcttccattcgctcttaacgacgcgtacatccctctctcctactcttac
+ctatatcctattactggttaacctacatctccgggaaagacgtaggtaaagtggtccacg
+attgtattcacttataacacctagtagtactatgtgttgctgagagtgaggacacactta
+ctctacgagttcaagtccatatggacattacactttttcagcatctaggtgtcatgatgt
+attaacagccgttaggggctatttgattttatcgattgtcggcgtgtgtattttcaacaa
+ctaggtgctacaattcgtgaataggcatgaaaattcaagattgcagttcctatcttgtat
+aatctttcctttggacgagttgtaccatttcaactaacctgcaagtggggggtcatccat
+atgaagatttgccaaatacctggagaccctgaaaagtttatccagattaataataacaaa
+caaacctaagcgaagaacgtcagctttaataaactatcactatcatagaaattcctgtta
+attgttcttccaaacgttgaatagactatcacgggtaatagattgaacacggagaacgtt
+tatccggcttgtaaaatatcgtcgaatctgctgataactcaattatattcgatggagaat
+tcatatctaccgcttagcttttaaaaattaagtcagattattccgccacaatgagaaggc
+gcgagtgcactaatcaaatcacttaggattattacggacgtctgcattacaatgctttgg
+ggtagggttatacaagcatatgattctttaggtctcttgatcgggcgtttaccaccgtag
+cttaatgttggcatatccgtgatcctaatattctgttgtcagcgtgtgtataggaatgca
+caacgcaaatctttaagctgacctgttcatgaaagacaggagacacgaggcaccacctca
+attctatgcaaaactctaacatagcgtggcactatgagtacgtgtaacgacaaggtctca
+tactcgatcctaagataattctcgtctggaaggttttaatctttaactaagagtagaact
+tagtttattgacttttacaattaggatacggttcgcgactctaccacagggcatcatacc
+tggagctctgctatctcgtgaccaaagtggcagcacacatagggtcgggtcctgcatcta
+ctgagcaatccctttaagcattcctagtttgagagccatttagatattgctgtttaaacc
+gattaatggtttctattattataaagtgtaacgctcccattcgggacattgaaaattagc
+aataagacaatgtatgatattcggcgagtctcaacaacattatggtctaccatgggacaa
+ggggttgatatgatgaatccacaaaaaatagtcaaacacccatggttcgttaagtgaggg
+tatccaggtgttataaggacgatctagaagtattcaggtacacggtgttcagacatgctc
+taattgtcaggttgtttataatttaacgtatcgctctctattctaaataatataaaatta
+accgctcgtagggatgctttccagtaaaagatacactatcattaaggttatgcaaatgtg
+gcgatttgatttgaatcttagtacattcttaaacttaaatacgtattatttaaagtaaat
+atattatctaaaccgcttttgtctatccacatttcgtcgaatcacgacctcgttaatgcg
+acaatttacgaccctctttcatctaaagcgatcatctatttcttctgattgatgtaatac
+tgacccttactccgtacatacaaatgatggtaagcaagaatgactgacgctcctgtcacc
+tttcgtggcaatcaactggcgctggtactgaagtagcttgaaagggatatggatgtgtat
+gccaggcttcattttgacaatttttctgtcctgctcagtgttgtctgaagtcgtatcgta
+cacaataatgatgactctcattgtagatccaatcacgctttcctacgctaatgaaagttc
+tagatagtgtaggtgttagacagaggttagcgcctacatccttacacacacagtgttgaa
+cggcaagcataatcgagtatcaatagctgtatgtatttgtttggaatatcatatttctcc
+cgcctttgaacaatgatgccaaaatgtcctgccctagagttatgataaaataactgctgc
+cctgtaacttaagtttacaaaccgatattcaatcgttgtgtcctatgaaaatatttatat
+ttgcaccaagaaaatcatctgtgcgatgaacaaaacacagtgatttataaatacaaagag
+tacatttagttaccggattgcggcttgacatttattttacagaattttatcggcaaaaca
+cttcatatgaactatcgcttcacgataagtctatgatagactagcattcgtagagaacag
+gaagagcaatcattatatatgaagtgttacagtgggtactacatatgagatcattaggtc
+tatatccggccttcctcataagaccttggaaatatcttacatcagagatatcaaaggaag
+tatgggcgaacccagaaaaagccccaaagaatagtaattcatcggacgtaatagtctggt
+tttaactaggggttattgatatttaagctaaaagagttccctgaacactcgaaatgtata
+atctatcccaactaaaaaagtatacctctaattcagaaatgtcattgagattagactgat
+gtcaatacgctaggaggtaagacaagtagaagtttttgatttaggaattgaaatgtaata
+cctccatcttaagttctatattttaaagttttatgcggacttcgagtaagtgcacaaatg
+atggcataagtgcccagttacatgtttgcggccccgtatgagtaatgatctgtttatcaa
+tctctagctactatcccacgaatgcactgatgccagtcatggcgcttacattagtcgaca
+gaaatccgacgatacctatcacgcgtgaactgttctggttcttattcaattcgaagtgat
+ctcagatacattacggccatgcttgcccttcatgtctgctgagcagttttgttataggct
+gaatctcctctaagcgaaattgataggatttttggtggtcgatttagtctgtacctgctt
+attaagattcaaaatgacctacttcttacgccgaaatgatagggatcggctgaggaggat
+aaatatacgctggtgcctggtatttatccagaacaagttgcctgtgtatcagatgaactc
+taatctccgagataaaaaacaggtacgtaaaataaaggccgcaaagggttacatctcagg
+atcgtggcgtatagtccaccattagttctgacttacttaatatagactgaccgagattgt
+agtatgtggatccaagcttgccatgtaaaacatgtcggttagcaaaacgtataggagcat
+gatcaaagaagagttaattaatagtactgcactataattgtcggcggagtaccatgagct
+gttgcccaattcgatgtttattaacagcacgcataaaaaatccagacttttcaattagaa
+ttaactataaatggtccgcgaaccttaaatgatcggaaggacgggatctgccgttgtata
+gaccccaactctatctaatttttataacacctctgtaatcaacaaatcttattatgccat
+cattatgtcattcgccaagtaagtccagttcgagattctctggaccgtgcaatagtattg
+tcaaattatggtaatggaatccttcttctaacacccttagaaaagccacgagaattgaca
+agttgggcgtgcttgtccaggagcaacataagtgccgtttctttttacgatgatagggat
+tcttaaagcttttctctattctagatcccagttgccatcatcaatatctcaattgatgct
+cattatatagttcttatttagtatgtccagatgtcactgaagatcctgcctagaaccgat
+attctcgacaggatcatcagttcgacggggcaaacgcacctatgcacatccatcttgacc
+gtgaaacgaaaggaaagagtcagtaccgacccaatgtggaaaaaaactcctgtccacgat
+atgtaggcaagttttactgcctttaattagtagtcgattagtgtagtttgatattatcta
+ccttatagaatgtaaacagtaacccggccttaatggtttggcaggattctttgtaaaagt
+taataatgttcataaactttatcagaaaacctgaagtagtccgcctttcgcctgcgtaac
+gttgcagattaattcgttttacggagtggcttgcgtcttgttgtccgagtacacatattg
+ctcctctcccccactcttctaggaaaatcaattatgctaacctgcagaccttcttcttta
+ctatctttaatgcatgcccagtatgttcatagggtagacttgctatctattttgtataat
+ctacgaatgatgcttggggcgcgacttttaacaattaagccgttgggtataatttgagag
+ggtgccacgatagtaagagatttccggcgtgagtaaggaaaatgataataggattaagca
+ggcgtaatagctcaccctcctcagttctccaaccctgaaccggctaagtatgactgtgca
+gtattaattttgaatacatattgcagcccctaggatacattatagatgtctctttcttac
+ccaaactcgcccgcaccaagaaagaatgtggattcgattgaggttaaattagccggaatt
+acagacacagattcttgtttacaattgtgggaagaaaaccacctcaaacgttgaaaccta
+cattcacaaatggattacgttggggatgagaatcgattccggtcaaaaatcatgcccgga
+gcaataaccaagaattcacagaggattaatacacttctccatgaagataggactgcttgc
+actatccttatctttgtgtcttccttcaagcaccaatcgtttggggacaaccacaattat
+gccaagaaataacggaaggtgttccaaatctatgagtccgcggtttcatcgcaacgtttc
+actgtgggtatcatgactttggactttagatttgggtattctagagactgtagaaagact
+gcaacaacaagacattcacagggcgaaacctaggaaaggggaccgcacgttgtgctaggg
+atgtttccttaggaatccatacatgtaagaaagaatcaaccgtaattatagtgttttcgg
+ccccttgaattacgtgcatgcctttgctaaaagacctctgggaaatagattgaatattct
+ggacagcagcgaatcctgattatatctcaagcgaatatatgacccgcaagaaggatttat
+actagaataagtctaagaaagggcattgggtcacttcttccactaacacacttttatcag
+ttttataccttgagagtcccatgcatttttatatatatttaactttcgttgcgtaaaact
+ttaaatatgatccgtgctctatctctaatctgaacaacggtatcacgtcgaacaaatcta
+gtggctacgaatcgcgtcgctaagaacggtttcttctgctggcgttagctacgtatcttc
+tatgctaaaaatgtatagccccgcattagcagcaaaaccgggagaatcaaatacacatcc
+gatgaaatcgtaacaaagataaaacaacgcgatttctatgtttgccaaagtgattaagtt
+gtatcgtaggggtcagcgctgatgtcttttcagtttgggttttggatttaccagtctttt
+agtttcggtactatttgatcgggacattcgtccaaacatgatggctcattcgttcttttt
+ttcaattttaatcaaaaccttgtatttacctgatacattaaactgagcatcgcatggagg
+tggagattcccatatatgtaatcatttgatatcctattccattctttttagttataaata
+aacgctccactgcacaatgggagtaggacttcaccaataattagcatctactgtaaacaa
+gcgccgtaacgaaatgattactgattgagaaaaataggtctcaacaacttttgacagata
+tgtatccgatacccaagcgttgctaattgcgcaaaagtaagtagaattacggtcgtatta
+cttgttgccaaatggttattactccaatgggctattctaatccgatggatacgtaggaga
+gagtgtacctacaccgaaactcgtagtgggcttagtggctacgtagaagctgttcgggtc
+agttacagcgtgcgaccttgtaaaatcgatcacggtgatgaattattgttattgtttaaa
+agaagtcccctgaatagcccttagataatacgaaaatttgttatgtccagtcgctcgtat
+atcaaaagattcggttaagttcgcagagttttgccaagtttacaggtgatttactaacac
+ttgggagggtacgtacaaccatcacctggttagcagagaatgaattatacggtcatgtcg
+cgaagggcaagtgtgtgagtattgaccgagttattaaacgtaaatgcaggcatttacgtc
+ataggacatcgagtttgtcctttgcgaaatgttaaatttatggttttttccgttgagtga
+taatagctgcaacatgaagatagtaaaactgaggttaaactttcaccatattaaattata
+tgttcaattacgcgatgtacaaactaatgttaatcagatttaggagcgcgcttaatatgg
+gtccctatcccgactttgtacgagattttgataaaaaatagtattgtaaattcatttgat
+ggcgtagaaccgggcaaaaccttgaaaaaggacacatttaggatgctatttccctaagaa
+agcggaaaatcctggctcaatatttataatagtaatggttaagattgtggcccaatcgct
+gagtacccgtcttacgctttttccaacacataatcgacgagaatgtatttaaatgtttga
+gacttacgttttccgcgtacttattattaaagtcattggagagggtgtcgtctgggtgta
+gttttctcatctgctcaggagctaaaaatgtaaatctattggttgtttctaattctgtcg
+tccgtgtaggctatttaatttttatggtacacttgaatatgtttagccataatgtagcca
+atactacaatatcagatacttgtatacgacctatagacttttgccgaccgctcgtagagt
+gatttagaaagatgttcggatagcacagcaatcgtttgcgaatgtaagcatgcgaagcga
+gtatttaactgttgactattttgctatatgttactctgaatgttgttttttttaccagaa
+tgtgttataatgatcaaccatgcacgttcctactaatcatataaattttgttacgtaagc
+ttttctatgatagtggtctaaagactacccttgcatactttaagattaagacatgcactt
+taggaggaactcacacgttttgagctgttctagcccacctataagccattcgtccgcaat
+cccataactacaatagtcggcaatcttttattacccagaactaacgtttttatttcccgg
+tacgtatcacattaatcttaatttaatgcgtgagagtaacgatgaacgaaagttatttat
+gtttaagccgcttcttgagaatacagattactgttagaatgaaggcatcataactagaac
+accaacgcgcacctcgcacattactctaatagtagctttattcagtttaatatagacagt
+atttgaaccaggcgctaatgttaaggcccccttcgaaaaccttgttatgttattccatgt
+ggtcggaggatttgcggggcgatagcgctgggcggggatcaacaatttcgttcatgcgag
+cgcccccataaccagtaggtacagttcggaaaagaaaaccccacgcactcgctagaagtg
+ttacaatcacatcacttcgtaccgaagggactactgtattccgtcttggggatgtaacag
+actgattacagtcttatgatgaagcctcattcatctaaaattagttgatttattccacgg
+atactatcacactcctatagaaagagttaccaccgtgggaagctagatataataaataaa
+agacatacaatattagtatggctcatgatctacacttactcggatctctctttttttata
+accagtagatcgcattacacgtattgttgttccgcatcaggccctaggggctcaaacttc
+catggtggataactaaaacgtccgtcactaaacgaagatattaatagatgaaatacacgg
+gtttacttgatttctgttcagtcattcacgggaaatcctaggagtctttcataacggcgg
+tcttagtaggaatgtagtcaagctctgtagaggtctcgacggaattggtatttcctggca
+tcacaatttacctagtattggagatcacttaaaataatgttgagataataatcaggatat
+ttctagtatgtgacaaacctctatttagtgattgtgattttcaattaaacaagacgtagg
+ggtcaaattaacgactacatgttggaaagaaggccgaattgtaatatctaactcatgtac
+taagaagaagtgctttcgtttaaggctttctgtctaacattctaacgtcaattcctatgt
+aatactactgtaaccaagttattactcggctgcgtagataaagtctcatgtaaatgacgg
+tttatctgttacttttgggtttcaacctagctaggacgccggtactaattacgacacctg
+cgtatagtgcagggtgttcaatgtgcctttttatgtccggattataaccatccctctccc
+acttggaatatcaccgggttcttaatgacttagttcgtcttccttattttccgggtaaga
+tcgctgtggaccggacccattttgatctagtctaaaaaggtatatagcgtttcgtctggc
+ccgcttacgttcactgaaacttagattaatcaatgcactgcactggattaacaagaacat
+gttatagtgtactgacacatgttagactaagaggtctgttcgggttagccgacttatatg
+tttaaccgattttgacaactgggttgagagataacaatgaagagtgaggactgtagaaga
+tcttaaaactgtaccatagtgctcaattcgctaatggcttgaattatttaattgttctaa
+ccctggcgtcgaatttttttggttcgaaaatacttagcacagcgtattgttcaacgagat
+gcacaactgtaccgttagaaagcggcttaatgacaaggcagtattgtgactattgacagg
+gaatcctaaaaagctactcgaattggtatatggaagaggtatgtactgagaggtcgcgcc
+tattagtcaaattctgccaaagaagagtcaaaagcttaactagtttgatggtatgaggtt
+taatgctaggtggtctataccaccaaaaagtatatgggatatcccagaatttatcgactt
+tcaatcgtctaccgtcacgacgtacactaggcagccctaatccaaaacttttgaggatga
+gtactgccactattatactgtaccatttgtaacttacattttatatcttcaaagaggtag
+atattgtcggccattactgtcacttacactaagggtagcttgattactgatacctctcat
+ggtaaaaagtaatttaagaacctatttttttacataacctctgctactaccgttagtgtt
+ttagtcggttcaagtcacaaaatccctgtagcgcacccctataagcagaaggaaacctta
+atgcggataaaaacttttgccggaaccgttaatcctatgagaataccactcttggaatcg
+gtcctttaggctgaggatatagaacgaggggaacgcatcaatctaggttaggtgagagaa
+ctttgtatcaaaacgcaagtaccatatgccgtcctcagtaaattgccaaatgcagaaatc
+ttacactcttttcttaactaagtatgagagcaacctcactcctgaacagcttgttaccta
+acgagaagaggctttaagtagcctggagcctcaaccggatatccggatttgactctcatc
+cacttacatgatgattacggtcattacatctcatgattttctgagtgccctatagactgg
+gaatttaatctaccctgtttctatttgttaacaaggagaaccactggtcaagatgacgcg
+cttccatttatgccaccataagtaagttctcggaacccttacatgattggcctaccaacc
+tatatatgtgaccaatgtacggtacatagagtgtggcctatcatattcaggtcatcgagc
+tcagtatttaaagattatatggtcgctgggggtattcagtgcgcgatggaagactaacat
+tggaaatcaacggaattgacaacacgctcactttaataacctatctcaggataagtttaa
+tgtaattagacggaactttctctaactccgtgtactaactctttgaaaataatgtgggta
+tttttatttcatctagatttgtctgtatcgaaagaaagtattggtccaaataatcctcag
+taaaatcaagtcataaatataaaatttagatcttaggacagaggaaagtgctttcccgag
+cataggatctggcctacgccagtagttcatgcttgtgttaaaagttgttactgtttatag
+tccgtactcagggtagtgttcgatactcagcggggaactgacatattacactaaggaatc
+aaggcccttcgtatgggtcatgtttatatatttaattacttacgctatttgatcgagaat
+agctatagtaacgtcgtaagaatgcaggatgcgattcgagtttgtaaattcacagatact
+gtgtatcatattattatagatgttaaggcatagaattattggtattgatgtacaaaaaat
+tatgggtgggcagtaccgataggcattacgagcagtgcagcttggaagaactggatgtat
+cctataactagtaagagccttaaaggtactacatacccagggatgttaccatcattaatt
+tggccatcttcaatcttcgcaatgcatactttcttctacaagatgccttttagaagacaa
+aataagtgtcaacaataacgctgtaacttaactctgttgtacgtggaatcaagtctcact
+aaagcaactaacattccgacatgcaaacgcaggactactagattattaaattcgccagcc
+cgcctcgtttaatataacatcataaaaattctaagtaatatctcacacactaatccgcca
+tcgtccatagcatcagtcacctgtcttacacaaacacatgtttaatcgatgttgttatgc
+caagctagtttcgcgaccatgtaactaattgtggaaagctgctaccttgaacgacatcaa
+ccatcctacctttgtacaacagaccaacatctctgtactggtaaatagatctgaaaagtt
+ataaatataactgttttcacattgatagaaaaacagctatgtgctatttgtatatactat
+aataaattaagcgaaacatggagattaaaacagtgttttctcatcctccacctcttgttc
+tgctaatttataattcttgatgccactcgtgtgagtcgtccattcgatcgtaaagaaccc
+gacataaatagatacgacgctgaacgagatcctatttctcctgaaaattattagcacggt
+aactcctagggatagtggtactagttggtatgaacgtataaaaacttgtactactttctc
+gggatgtgagggagcaaactattactcgaccagtgcaacgcattatcgacagtaaaagtt
+ttcagctgatacctgtctggatggattatatgcaggtaggcgagagtggattgtagcgat
+gctcggcgggggtattttaaaaatctaggtgataaaagtcctgtttagccaggaaaagtc
+atcattgcactgcatatcgtcgattagctgtcatttcgtccactggtaccagttcaacgt
+acatcaaagtccgggcgcatccatatcaagttttgcaatagtactccagaccatgaaatg
+gttatccagattaataataacttaatatactttcactacatactcagcgggtattaaatt
+tcactttatgtcaaaggactcttatgtggtcttcaaaaaggtctagagtctatcacgcct
+aattgtgtgaaaaccgagtaacttgatcagccttgtaaaatatagtagaatatgatgtta
+aatcatttatattccagggagattgaatagcttacgattagctggtataatttaactcac
+atgattaagcaaatatctgtaggaccgagggaaagaataaaataaagtaccatgagttcg
+gaacgctgcattacatggcgttgggctagcctgatacaagaagatgagtatggagctctc
+ttcatcgggacgtgacaaccctagcgtaatcttggcagatcccggagcagatgattatcg
+tctaacactgtctttaccaatgcacaacgcatagatttaacctgaactgttctggattca
+ctcctgactacagcctacaactcatttctatgcataactcttaaagacagtcgcaatatc
+agtacctctatacacatcggatcagactagatcataagataagtctcctctggatccttg
+tattctgttaagtacactacaaatttgtttagtgtctgggacaattacgataagggtcgc
+gactagaccacagggcatatgacctccaccgctcctagcgagtctccaatctgcaagcac
+tcatacgctaggggcatgaatcgactgtcaatgcactgtaagatttacgagggtgagacc
+catttagatatgcctcgtttaaccgttttaggcttgataggatgagtttgtcgatccatc
+aaattcccgacattcatattgtccaataagtatatctagcttattcggactcgctaaact
+aaattatggtataaatgccgtcaaccggtgcatttgttcaatcaacaaattatagtcaat
+ctcccatggggccttatggcagcgtatacagctggtataacgaccatatacaactatgaa
+cggactagctgtgaactaagcagattattggatccttgtgtataattttaagtttcgatc
+tatatgctatagtatagaaaatgttccgatcgtacgcttcctttacagttaaacagtcta
+tatcatgaagcttatccaaagctggacatttgatggcaatcttacttaattatgaaactt
+aattacctattattgaaagtatttatatgatcgaataagatttgctctataaacaggtcg
+tccattcacgacctagtgattgcgtaaattgaccaacctaggtaatctaaagcctgcatc
+tatttcttatcattcatgttatactgacccgttctcagtacttaaaaatgatcgtaagca
+agaatcactcacgctcatgtcacatttagtcgaaataaactgccgatgggaaggaagttc
+cgtcattgcgatatcgatgtctatcccacgcgtcattttcaaattggttatctacggata
+actgtgcgatgaactactataggtcaaaattatcttcaatctcattctagatcatataaa
+gatgtccttcgcgattgatacgtctacagtgtgttggtgttacacagagggtagcgacta
+cttacttactaactctctcttgatccgcaagcataagccaggttaaagtgctctatcttt
+ttctgtggattataatagttataccgccttgcatctaggtgcccattaggtaatgcccta
+gtgttttcataaatttactcctgccatctaacgttactttaatttcccagattcaatagg
+tctctcatttgaaaattgttatatgtcaacaaagaatataatagctgagtggaacaatac
+actgtgagggagtaatacatactctaaattttctttacggtttgcgcctgcacagttttt
+tttatctatgtgatccgcataaaaagtaatttcaacgttccattcaagttaagtcttggt
+gacactagcattaggagagatcaccaagaccattatttatttagctagggtttaagtcgg
+ttagaaatatcagataatgaggtctttatccggccttacgcagtagaaattggaaatttc
+gtaaagcactgagttcaatggaagtatggccgaacccacataatgcacaaatcaagtcga
+tttcttccgtccttttagtctcctgggaactacgggttattcatagttaagctaaatcag
+ttaacggaactagacaaatgtataatagttcccaaatatatatctataaatcttatgcag
+ttagggaatgcagatttgaatcatggcaatacgctagctcggaactcaactacaagtgtt
+ggatgtacgaattcaaaggtattacatccttatgatgttcttttttggatacttttatga
+cgacttccacgaagtgaaattatgttcgaatatctgaacagttacttggttgagcccaag
+gatgacgaatgttctgtttataattctcgtcataatataaatacaagcatatgaggccag
+tcatggagctttcatttggactaacatttccgtagagtcatatcacgcctgtaatctgat
+ccgtctttttctattcgaagtgttatcagatacatgacgcccttgcgtgacattcatggc
+tcctgacatcgggtcttttaggctgaatctaatctaacccaatttgtttggattgtgggt
+cctccattttgtctgttaatgcttattaagattaaaaatgtactacgtatttagacctaa
+tgattgcgatacgctgtggaccattaatataagctgcgccaggggatttttccagatcat
+ctggcctgtgtatatgttcaaatctaatagccgagagaaattactccgacggaaaataaa
+ggcagataagcgtttcagagcaccatcgtggcgtttagtcaacctttagttcggaattta
+ttaatatacaatctcactctttggacgagctccttaaaagatgcccttgtatatcatgtc
+ccgtacctaaaagtataccagcatcatcaaagaacagttaaggaatacgactgctctata
+attgtccgaggagtaccttctcatctgccaatagtcgttgggttggaaaacaacgcatta
+atatgccacacttgtcaattagaagtttctataaaggggacgagtaactgatttgagacc
+tagcacggcagaggacgttcgtgtgacaacatctctttataagtttgagataaaatcgct
+aatctacaatgattatttgccaatcattatcgaatgcgcaaagtatctcctgttcgtgat
+tctagcctaaggccattactatggtcaaattatgctaatcgaagcagtcttctaacaccc
+ttagaaaagcaaacactattgaatactgccgccgcattcgccagcaccaacataactgca
+cgtgcttttttccatgattggcattatgaaagatttgatctatgattcttaccagttgca
+atattcaatttagcatgtgttcctaattattgtgttattatggtctatctcatcatgtaa
+atgaagatcatgacgtcaacacagattctagtcaggatcatcagttcctcggggaaatcg
+cacctaggaacagccttatgcaaccgctaaacaaagcaatgaggatgtaccgacaaaagc
+tcgatttaaaagcctcgaaacgagatgtacgaatcgtttactgccttttatgaggagtcg
+agtactgttggttcatatttgctacatgattgtatgtaataacgatcccgccctttatcg
+gttcgatcctttatggcgataagttatgaatcgtcagtatctttagatcaaaaactcaac
+tagtacccagttccccggaggaacggtcatgattaatgcgttttacggtctcccgtccct
+cttcttgtcagaggaatcagtttcatccgatcccactcgatgattggtatagctatttgc
+cgaaaagccacaacgtattcggtactatcttgtttgattcccctgtatcttaattcgcga
+cacttgatatcttttgtgtttaatcgacgaatcatcctgggggcgacacttgttacaatt
+atccagttgcgtttaatggctgtgggtcacaagattgttagacaggtcccgcgtgtcgta
+ggaaattgataattggagtttgcaggacgaatagctcacccgcctaagtgatccaaccct
+catcaggataactatcactgggcagtattatttttgatttcatatgccaccccctaggag
+actgtagtcatgtatctttcttacccaatctagcccgaaacaagaaagaatgtcgattcc
+agtcaccttttattagaccgatttacacacaaagtgtcttggtttaaaggctggcatgaa
+tacatactcaaaagttgaaaacgacttgctctattcgattaccttcgcgatctcaatcga
+ttacgctaaattttaatgcccgctgaaatatccaacatttaaaacaggattaattctctg
+atccatgaacttaggactcattgcacgtgacttatctttctctcttaattcatgctccaa
+tacggtgggctaaaccacttttatcacatgaatgtacgcaacgtgttaataagctatgag
+tacgcgggggcagcgaaacgggtcaatctgggtatcttctattgggacggtacatttcgg
+ttttatagactatgtagttacacggcatcaacatgtaattaaaacggcgtaacctaggaa
+agccgaacgcaccttgggattgccatgtgtccggaggattacatacatctaagaaacatt
+ctaaactatgtatagtcgtttacgacccttgtagtacgtgcatcccttggcgaaaagtac
+tctgggtattagagtgtatattatcgacagcaccgaatcctcattttatagcttgacaat
+ttatgacccgaaagaaccttttataagtctataagtatatctaacgcaattgcggcactg
+agtccactaactatctttgagcagtgttatacagtgagacgccatggaaggggtttatat
+attttactgtcgttccctaaaaagttaattatcagacctgcgcgatctcgtagatgaaca
+acgcgatctagtcgaaaaatgcttgtggctaccattccagtcgagatcaaccgtttctgc
+ggatcgcgttacattccttgcttatttgcgataaatcgatacaaccccattaccagaaaa
+acccggagaatcaattactctgcagatcttatactaaaaaagagattacaacccctgttc
+tatgtgtcccaaagtgagtaacgtggagcgttggggtaagagcggagcgattttaacttt
+cgcttttccattttccagtattgtactttacgttatatttgagcggcacattcgtcaaaa
+catgatccatatggactgaggtgtttaaatgttaatcaaataattgtattttcagctgac
+tttaaaatctgcagccattggaggtggagattccaatagatgtaagcaggtgatatcata
+tgcaattcttgtgacttattaagataccagacacggcacaatcgcagtagcacgtaaaca
+ataatgacaatcgacggttaaattccgaacgtaagatatgtttacggatgcactaaaata
+ggtagcaacaacgtttctctgagatgtataagttaccaaacactggagaattccgctaaa
+ctaaggacaatttccgtcgtattaattgttgacaaatggttagtaatacattcgcagtgg
+ataatccgttgcatacctagcactgagtgtaaataaaaccaatcgactactggcatttcg
+ggctaacgactagatgttagcctatgtgaaagcctcacacatgcttattgccttcacggt
+gagcaatgtttcttattcgttattagaagtcacctgtagagacagtagagatgacctaaa
+tttggtttgtccagtcccgaggtgatctaatgattaggttaacttagaacagtggtcaat
+tggttaaagctgatttacgaacacttccgaggggtcgtaaaacattaaactggtgagaac
+agtatgatgtattcggtcatctagacaaccccatcgctgggagtttggacagtgttatga
+ttcgtaaatccaccatgtgtccgaattcgaaatcctgttgctccggggagatagggttaa
+tttaggcttttttacggtgtggcatattagctcaaacatcaacattcttaaaatcagcgt
+aaacggtcaccagttgatatttgttctgctaggaagcgatgtacaaaataagcttaataa
+gatttaggtccgaccttaatttcggtccatagcacctctttctaagtgttttgcttaaat
+aattgtattgttattgattttctgcgagttgaacacggaaaataagtcaaaaaggacact
+tttaggttcatatgtaccgatgaatgcgcaatagaatcgagaaatttttagattagtaat
+cgtgatgattgtggccaaatcccgcactaaacggctttcgctgtttccaaaaaattttag
+tccactaggtatttaaatgttggacactgaacgtggaagccgtcgtattatgaaactaat
+ggcagaggggctcctctgcgtgtactttgagcagatgctatcgtcagaaaaaggtaaatc
+ttttggttctttataattctggcgtccgtgtagcctagtgaatgtgtttggttcaagtga
+atttgtttagccagaatggaccaattacgtcattagctgttacgtctatacgaaatatag
+actgtggacgacccatcgtagagtcatgtagttacatgtgaccttagaacaccaatcgtg
+tgcgattgtaagcaggacaacacagtattgtactggtcaattggttcatagatctgacta
+tgaatcttcgtttttgtacaacaatctcggtgaagcttcaaaaagcctccttcctaataa
+tcagttaatttttcgtaaggttcctgttcgaggttagtcgtataaagacgaaacggcctt
+aatgtaacattaactattccactgtaggtggatctaacaaggttggacatgtgctaccaa
+taagataagaatttcgtccgcaatacaatatctacttttgtagcctatcttggattaaca
+acaacttacgttggtatttcaccggacgtatcaaatgattctgattttaatgactgagag
+taaacatcaacgaatcttatgtatctttaagccgctgcttgacaagtcacattactgtta
+gaatgaacgcttcattactacaaaacctaccaccaactcccacattaatattatactaga
+tgtttgaagtttatttgacaaaggttttcaaaaagcacagaatcgttacgaacacgtaca
+ttaaattgttagggtattaattgtggtcggtgcatttccggccccatagcgctccgcggg
+gagaaactatggccttcatgacagcccccccataacatctaggtaatggtcggataacta
+taaacaaccctctccagagaactgtgaaaataaaatctcttagtacacaagcgtatactg
+gtttaagtcttgcccatcttaaagactcttttcactattttcttgatgcctcattcttct
+aatattaggtgattttttaatccgagaatataaaaagacgatagaaagtgttaaaacacg
+gcgtagcgacatattttaaagaaatgaaatactttttgactatccctcatgatctaaact
+tacgcggagctatctttttgtataacatgtacagagaattaatccgatgcttcttccgat
+taaggacatagcgccgaaaacgtcatggcggcttatcgatatcgtaacgcactataccaa
+gtgattaagtgatcaatgaatacgggtttcgggatttctgttaagtcatgcacggcaaat
+acttggagtcttgaataacgccgcgcgtagtacgaaggttctcaagctcgcgtgacgtat
+agaccgtattgctatttcctgccttctcaattgtccgaggattgctgataacttaaaata
+aggttgagtttttaataacgatttgtcgagtttgggaaaatcctcgtttgtgtgtttgtc
+attttcaagttatcaagaactacgggtataatttacgacgtaatgttggtttgatgcccg
+attgcgaatatcgtacgaatggtatttgtacaactgctttcctttatcgattgctcgaga
+acattataaagtctattactatggattaagactgtatacaagtgtttaagcggagcccgt
+gataatctataaggttttggtacctttatctgttacttttgccttgaaacatacatacgt
+acacgggaatatttacctaaacgccgtatagtccagcctcgtatttgggccgtgttttgt
+cagcattttaaactgaaagcgcccacttgcattataacccggtgcggaatctcttagtga
+ctcgtcaggagtttacgcctttgagacctctcgacaggacccattttgatctagtcgtta
+taggtagagtgcctttcctatcgcaccattaccttctagcaaacttagagtattcaatga
+aatcatatcctgtttatactaaatgttataggctaatgacacagctgacactaagaggtc
+tcttcgggttacccgaatgagttgtttatacgatgttgacaactcgggggagtcatttca
+atgaagactgaggactcttgatcagattaaaacgcttaatgactgataatttagattatg
+ccgtgtattatttaagtgggcgaaccctcccctagaatgggtttcctgagaaaagtctta
+gaacacagtattctgaatccagatgcaaatcgctaacgttagtaagcggctgtagctctt
+ggcagtttggtcaatagtcaatcgcaatccgtttaaccgtctactattcctagagcgaag
+agctatgttctgacacgtccccaatattaggcaaaggctccaaaagaacagtcaattgat
+taactacgggcttggtttctccgtgaatccttgcgccgctataccacataaaaggatagc
+ggtgataccacaagtttgcgacgttaaagcgtcgaccctcaacaagtacactagcaaccc
+cttagcaattaattttgtccatcactactgccaagagttgactggaccagttggaaatga
+catttgatatattaatagagctacatattgtaccactttactgtcacttacactaaccct
+agcgtgattactcatacatatattcgtaaattctaagttatgatactagttttgtaaatt
+taatcggcgaagacacgttctcttgtacgagcttcaactaaatatttcactgtagccaac
+cactttaaccagaaggataccttaatgccgatataatattgtccaggaaacgttaatact
+ttcacaagacaaagcttggaagaggtactttacgatcacctgatagatcgaccggaacga
+ttctatataggtttggtctgagaaatttgtagctaaaaccatgttccataggaactcctc
+tgtaatgggcaaaatgcagatagcgttcaatcgttgcttaactatctatcacagcatcct
+aactcctcaacagcttctttcctaaagacatcagcaggtaagttgacggcacccgataac
+ccagagcacgattggaatctaatactctgtatggatcattacgctaagtaaatataatga
+ttttctgactcaaagttacactgcgaattttatattaactggttctatttgttaaatacc
+acaacctctcgtcaacaggtcgcgatgcaagtgatccaaaaatatctaacttataccaac
+cattacttctggcgcagaaaaacatagatatctgaacaatcgaccgttaagactgtctcg
+ccgatcttaggaacctaatactgctcagtagttattgtttatttgggccatccccggatt
+atgtcagccatggaacactaaaagtcctaatctaacctatggacaaaaagctcactttta
+taaaattgctcaccttatgttgattgttatttgtccgaaatgtctataactcagtgtact
+atctattggaaaattatggccggagttttattgaatatacttttgtatgttgagaaagaa
+tgttgtcgtaataattatcagctggaaaatcatctaatatatattatattgagatattac
+gacagacctaagtgctttcccgtcatgagcagatggactaacactcttggtaatccttct
+cgttttagttggtaatgtttagtctaagtaatatcccgactcttacttactcagagcgga
+aatgactttttaaactaacgtttaaaggcacttagtatgcgtcagggttatttttttaat
+tacgtacccttgtgcagagagtttagctattcgatcctacttagtatgaaccatgagagt
+acaggttggtaattcacagagaaggtcgagaagattatttttgatgtttaccaatactat
+gaggcgtattcatcgaaataattttatggctgcgcacttcacatacgcaggaagaccact
+gcagcttgctagatctggatgtatcattgtacttctaagagcctgaaaggtaatacattc
+ccagcgagcgtaacagattgtatggggacatattcaatcttagcaatgcattcgttcttc
+gaaatcaggcatttttgatgtcataagttctgtcaactataaccctggaactttaatctg
+ttgttcgtcgaatcaaggatcaagaaagcttctaaaaggcccaaagcaaaacccaccact
+acttcagttttaaattagaatcacaccctagggtattagataataattaaatgtcttagg
+aagagatatcaaaagatgcagacatcctcaagtgaataagtctccggtctttcacaaaca
+catggttaagcgatgtggttttgactagagacgttcgccaccatcgtaatatttctggtt
+acctgcgaacgtgaaccaaatcttacttcatacattgcttaaacagtacaacttatctct
+tatcctatagagatctcaaaagtttgtatttttactggtttcaaattgagagaaaaactg
+cgttctccgatttctatattattgtttaaatgatgccaaacatccagtttaaaacacggt
+gtgatcagccgactcagattcgtatcctatgttagaatgagtcatcaaactacggtcacg
+cgtacattacagagtaaactacacgaatgaaagagataagaagatgaaagagttaatagg
+tctcctgttaattatgagaaccctaactactacggattggcctactagtgggttggaacg
+gatataaaattcgactaagttcgcggcatgtcaggctcctaaatatgaagagaactcggc
+atcgaattatccacagtaatagttggaacatgattcctctatgcatggtgtatatccacg
+tacgccagtgtgcagtgtagccatgcgaccacgggcgttgtgaatattcttcctcagaaa
+aggactgttgagcaaggaattggattctgtgaacggaatatagtcgagtagatggaattt
+cctacactgcgaaaaggtcatagtaaatcaaacgccgcgcgcagacatatcttcttggca
+attagtactccactaaatcaattggttataaacttttagaatatctttatataagttcac
+tacttacgctgcgggtagtatatttaaagtgatgtcttaggaatcttatggcggcggaat
+aaacggcttgactatagataccctaattctggcataaccctgtaacgtgtgaagcatgct
+ttaatagacgactagatcagcttatagaatggatatgactgccacattgaagagattaac
+attagcgggtataatgttacgaacttgtttaacaaaatagctctaccacacacgcatagt
+ataatataaaggtcctggagttcgctacgagcctggaattgcagttcccctaccctgagt
+aaacaagatcagtatggacctatcttctgacccacgtgtaaaaactaccgttagcggccc
+tgagaacggtgaagttgattatcggctaacactcgctttaccaaggaacaaacaattgat
+ggaacaggtaagcggctggattctatcctgaatacagcataataatatttgctttcaata
+tatagttatgacactcccaatatcactaactctttacaaatcggatatgaagagtgaatt
+agagatggagccgatcgttccttgtattctggtaagtactcgactaatgtgtgtagtcta
+ggggtaaaggtccttaaccgtcgagtctagaactcacgcattatgaaatcctccgagcat
+agagactctaaattcgccaagcaataagtcccgacgcgaaggatgagaagctcattgaac
+tgtaacatttacgtcgggctcaccatgttacatatgcagcgggtaaaagtttttgcctgg
+agtggttgagtttcgcgatacataaaaggccccactttcatatggtcaaatatctatatc
+gtgctttggacgactcgataaactaaagtagcctagtaatgccctaaaccgctgcatttg
+tgcaataaaaaatttagagtatatataacttccggacgtatggctgccttgaatcctcgg
+atatcgtccttatacaacgatgaacggtatagctcggaactatgcagattaggcgatcct
+tgggttgaatttttagtttccatagatatgagttagttttgatatggttaccatacgtcc
+ctgcattgaaacttaatctgtatattgattgatccttagcaatagcggcacatttctggg
+caatatgacttaattaggttacggtttttactatgatggatacgttttatatgatagaat
+aacagttgctatttaaacaggtactacattcaactaatactgtttcactattgtgtccaa
+catagggaatatattgcctgaatagatgtattatcaggcatcttttacgctccaggtaga
+actaattaaaaatgatccttagaaactttcaagcaacataagctaaaagttacgccaatt
+ataagccacatcggtaggatcttcaggcattcccatatccttctctatcaatcccgtctg
+ttgctaattggttatctaagcatatcgcggcgagcatctacgataggtataaagttgctg
+ctatctaattcgtcataatatatacatggaattacagattcatacgtcttcagtctcgtg
+gtgtttctaagagcggacccaagaattacgtaatatctctctcgtgttacccaagaagtt
+gacacgtgattgtcagctatctttttctggcgatgttaatagttataaacaattgcatat
+agctgcaaattagctaatcaaatactcgtttcttaaatgttatcagcaaagctttaggtt
+ctgtaatttcactgtgtaaagagggcgctaagttcaaaattggtttttggcaacaaacaa
+tttaatagcgcagtgcaaaaataatatctcagggtgtaattatttctctaattggtcttt
+acggttggaccaggcaatgggttttttatctatgtgataccaattaaaagtaatttcaaa
+gtgacattaaacttaagtattgctgtcaagaccattacgacacttcaccaacacatttat
+gtattgtgctacgcggtatggcccgtagtaatttctgatattgaccgcgttatcagcaag
+tacgctgtacaaatgccaaatttagtaaagctctgtgtgcattccaaggtgcccacatca
+cacattatcaacatatcatgtcgttgtattacgtccttttactagcctgggaaataccgg
+tgattcagagtgaacataaatctctgaaagctactagacaaagctagtatagttaaaata
+tatatttcttttaatattaggatctttgcgattgcacatttcaagcatcgcattaaccta
+cctccgtactcttctacaacggttgcatgtacgatttctatgcgatgaaatacttatgtt
+cttagtttggggttactttgttcacctagtcctcgaacgcaaattagcttcgaatatctg
+aaaagtgtatgcgggcaccaaaacgatctcgattcttaggtttataattatagtcagaag
+ataaatacatgcatatctggacactcttccacatgtcatgtcgactaactttgaactaca
+gtcatatatagactgttatctgatccgtatgtgtctattactactcttatctgagaaagg
+acccaatggagtcacagtaagcgatcatgtcatcggggctttttccctgattataagatt
+acactattgctgtgcttggggcctcctactttttctatcttaatcattttgtacattaaa
+aagctaagaagtaggtacaacttatctttcccatacgagctggaccattaatttaacagc
+cgcaaggcgagttttaatgttaatctggaagggctttatgttctaagcttttagcactga
+gaaattaatccgtaggaaattaatcccacataacccggtaagagaaccttacgccccgtt
+actaataatgttctgcgcaatgtaggaagtgacaagctcactcttgcgacgagctcctta
+atacaggccctgcgttatattcgaccgtacctataactagaccaccatcttaaatgtaca
+gttatggttttcgacgcatagagtatgggaccacctcgaaatgctcagctgcaaattgta
+ctgggggtggttatcaaacatttaatatgaatctatggtaaagtactagtttatagatag
+ccgaacactaaaggtttgcagaccttcctcccctgaggaacttcgtgtcacaaattagat
+tgagaaggtggtgataaaatcgcgtatctacaatgatttggtgcaaatatttatcgattg
+cccaatcgttctactcgtactctttatagcctaacgccttttcttggcgctaattagcct
+aatccaagaaggagtctaacaaaattacttaaccatactcttgtctattcggcccacgca
+tgcgcaagctcaaaaagttctcaacgggcgtttttacttgagtcccaggaggtaacattg
+gatctatgagtcttaacagtggaaatatgatttttagattgtgttcagatttattgtctt
+attttggtctatctcatcagctatagctacataatgacgtcttaactgtttcgactaacc
+ttcagatctgactaccccaaatacaacatagcaaaagaatgatgctaacgcttaactatc
+ctttcacgatcttaacaaaaaagctccatttaaaagaatcgaaaacagatctaccattcg
+tggaatcaatttttggacgagtactggtcgggtcgtgcttatttgctacaggattgtttc
+gtataacgttcaagcactttagcggttccatccttgatggcgttaactgatgatgcgtaa
+gtttatggtgatctaaaactctactacgaaccaggtcccagcacgaaacgtcatctttaa
+tgagtttttaggtctccaggcactaggctgcgaagtggaatatgtgtcatcagagacaaa
+tagatgattcctatagctttttgcagttaagccactaagtaggcggttctatagggtttc
+attcaaatcgatcgtaattcccgactctgcatagcgtgggtcttgtatagaccattcttc
+aggcccgccacaatggtttcaagtttcaacttccgtttattggctgtccctcaatagagt
+cgttctcagggcacgactctcgttcgttattcataagtccagtttgatccacgaatacag
+aacacgcatatctgataataaaagcttaacgataactttcacgcgcatggtttatttttg
+atttattaggcaaccaaataccagaatgtagtcagcgatatgtagtaaaatttagacaaa
+cataaaacaaagtatcgccattacagtctcctgttaggagaacctttttatcaatatgtg
+taggcgtgtattggcgcccttgatttaataataattacggctaaacgtattgatattttc
+caggaactgccccatctcatgagatgaccctaaattttattcacacctcatttttaattc
+ttttatatcacgattatttatctgagcaagcatctttgcaagcattcatagtgacggtgc
+tgtctctatgaatgcatgctaatatacggtgcgctaaacatattggttcaattcaatgta
+agctacctcggaatttgcttgcactaagacggggaagccaaaacggtaaatcgccgtata
+tgctagtgccaagggacttgtccgttggagtcactatggagttacaagcattataaatct
+aaggaaatcgcagtatcagtccttaccccaaagatacttcgcattccctggggtacggac
+catgaaatacttctttcatacatgataaacgatggagactcggttaccaccctggtagtt
+actccatcaattggagttaactaagatcgctattacaggctttattagccaatcatcaca
+agcctctttttagagattcacaagttagcaaaccaaagttcctttgataagtctttaacg
+agatctatcccaattccggctaggagtaaaatttatatatttgagatcggggttaaagtc
+acacgcaatgcaaggggtttttatatggtaatgtccttccctaattaggtaattttcaga
+cctccgagagagagtagatcaacaacgcgttatactcctaaaatgcttgtcgataacatg
+acactacagatcatccctggatgagcatcgactttcattacttgattagttcagttaatt
+cgtttcaaaccattttcaacaaaatcccccagtagatatgtatatgcacatcttagacta
+aataacagttttcataccctgggatttgtgtcactatctcaggaacgtcgagacgtcccc
+tatcaccgcagcgagggtaactggccctgttccattgtaatcgatgggacgggacgttat
+attgcagacccaaagtagtaataaattcagccatatggacggagggggggaattgttaag
+aatataattcgattttcagctgaatgtaaaagctccagccattcctcctccacttgacat
+tagttcgaagaaggtctgagaattggaattgcttgtgacgttttttgtttccagacaagg
+aaatagcccagtaccaagtataatattatgacaatagaagcttaaattcacaacgtaaca
+tatctgttagcatgctctaatagaccgagaaaataagtgtctatgtgtgcgagaactgtc
+aattcacggcagtagtcacctaatctaacgtctagttcccgactatgaagtcttcacaaa
+tggttagtaataatttcccagtggagtagaagtggcataacgtgcactctctgttaataa
+tacctttagactactcccatttcgccagaacgtcttgatggtaccctatgggaaacactc
+acacatgcttattgcctgcaacctcagcaatgtgtcgtatgcggtatttctacgaacagc
+tagtgaaaggactgatgacctaattttggtttctcaagtccagacgtgatattttgatga
+ccgtatctgacatctctgggcaattcggttaacctctggtacgaaatagtccgtcgcgta
+ggtaaaaatgataatgctgtcatcactatcatgttttagctaagctacactaccccatcg
+ctcgcacgtggcaaagtgtgaggattccgatatcatccatgtgtacgaattcctaatact
+cttgctcagggcacttagggttattgtagcctgtgttaccgtctcgcatattagatcatt
+aatcaacagtcttataatcaccgtaatcggtaaacagttgttatttgttctgataggtag
+acagctaataaagatgctgttgaacagttacgtcccacctttattgccctacagtgaaac
+tagttcttactctgttgctgtaatatgtctagggttattgatttgctgccacttcaaaac
+ggaaattaagtcattaacgaaaatggttccttcataggtaaagatcaatccccaattgaa
+gccagaaattttgagatgtcgattcctgatcattcgccaaatttacagctcgtaaacgag
+ttccatgtgtaaaaaaatgttgagtccactagcttgtttattctggctcaaggtacgtgg
+aacacgtagtattttgatactaatgccagacccgctacgatccctgtactgtgagcagag
+ccgatcctcagaaatagctaaatcttgtgcttcgttagaagtctcgactacgtgtagcct
+agtgtttgtgttgcgttatagtctatttgtggacacagtatggtcaaatgacgtcttttg
+atctgacggcgttaacaaagatactctgggcaacacacatacttctctcatgttgtttct
+tcggacctttcataacctttcctggcacatggttagctgcacatcacaggattgtaaggg
+tctagtggttcagtgagcggaatatcattcgtcggtggtgttaatctatctcggtgtagc
+ttataaatgcatccgtaagaatattatgtttatttgtcggtacgttcatggtagtggtgt
+cgccgatttagacgtaaaggcatgtatggatcttgatctatgcaaaggtaggtccatcta
+tatacgttgcacagcggatacaaataagataagaatttactaacatttaaattttcttat
+tgtcgagcatagattggaggaaaaacttatttacttggtatttaaacggaagtttctaat
+gtttatgattggatgcacggacagtttactgcttactttcttaggtttcttgaacaacag
+gatgcactagtaacatgtctcgttcatgcttccattaagttcttcttaaacttacacaaa
+ctacctaatttagagttgacgagatggttgaacgtgttgtgacaaacgtttgcaaaatgc
+acagtatcgttaccaaaaagtacatttaagtgtgtgcgtaggaattctgctacgtccatt
+gcaggccacattcacatcccacccctgaatatatggactgaatcacacacaccaaatttc
+atctaccttatcgtagcataactattaacaaacatatacagacttcgcggtaaataaaat
+atattagtacacaaccgtatactggttgaactattgcccagctttaagacgcttttaact
+aggtgcttgatcaagaagtattattatatgacggcagtgtgtaatacctgaatagatata
+gacgttagattgtctgaaaacacgccgtagagacatttttgttagatatgtatttctttt
+tgacgagccagcatcttagtatctgaagacgagctatatgtttgtagaaaatcgactgac
+attgtatacgaggcggcgtaagattaaccaaattccccagaattagtaatggcgccttat
+cgatttactaacgatatataacttgtgatgttgtctgcaatgtatacccgtgtaggctgt
+gctcttatcgaaggaaacgcattgaagtccaggctggatgaaaccaccgcgtacttccat
+gcgtctatacatagcgtcaccgatactacgttttgctatgtaatccattctaatgggtaa
+gaggattcctcttatagtaaaatatgcttgactttttaagaaccattgggagtggttggc
+aaaataatagtgggtgtctttctcagtgtatagttttctacaactacccctattaggtta
+caagtaatctggctttcttgccacttggcgatgatagttagattcgtatttctacaacgc
+agttactgtatccatggcgcgagataattagatacgatttgaatttggatgtagactcgt
+tactactgttgtagaccagcacgtgagtatctagatgggtttgctaccttgttagcggac
+ttttgccgggaaaaagacatacgtacaaccgtatattttactataagcagtattggccac
+cctcgtattgcggcagggtgtgctcacctggttaaaatgaaagagaaaaattccatttta
+aaacccggaggaatctattactgacgaggaaggtgtttaacccgttgagacatctcctaa
+cgtaaaaggttcatattctagttattccgagagtcactttcctatccaaacatgaactga
+tagcataatgacaggttgaatggaaagcatatcctgtttattctaaatctgtttcgctaa
+tcaatatgctgtcacgaactcggagcttacccttacaactatgtgttctgtttaccaggt
+gctaatatcccggcactcttttcatgcatgtcgctcctagcgtcatctgatttaatagct
+taatgtctcatattttacagtagccagtgtagtatggaaggcggcgaaccagcccctaca
+ttgggtttcctgacataagtattacatatcacttgtctgattacacagcaaaatcgctaa
+ccttactttgcgcatgtagctattggaactttgggctagtgtctatcccattaagtttaa
+cagtagactagtccgtgagcgatcaccgagcttatgtctcgtacccaagttttggatttg
+gatcaaaaactactcgatattcatgatctacgggcttcctttctccgggtatcattgcgc
+cgagattaaaaataaaacgatagcgctgtgaaaacatgtttgacacgggatagcgtagaa
+actaaacaacgaatagaccatccaatttgaattttattgggtccagcacttcgccatagt
+gttgaatggtaaagttcgaaaggaaatttgttatattaattctgctacattttcgaccac
+ttgtatctcaaggacaatatcccttgaggcttttagcagaaagagatgccgtaattctaa
+gggatgataataggttgggaaatttaagagcagtagtaacggtcgcgggttcgaccttaa
+actatatatttaaatctagccaaacaagttaacaacaaccataaagttatgaccttatta
+tattggcaagcttaacgttttaattgctctagtaatagagtggtagaggtaagggaccat
+cacctgattcttcctccgcaaccattatatagacgtgtcgtctgacaaatttcgagataa
+aacattcgtccttagcaacgaatatcgaatggcaattagccacattgagttaaatagttg
+aggatatttcttgcacagaatcagatctaatctaatgattcgttactaaacacttcacca
+ggtatcgtgaaggctcaagattacccagagaacctttgcaatataagaatatgtatgcag
+cattaccctaagtaattatattctttttctgactcaaagtgacaagccctagtgtatatt
+aaatcggtatatttgggaaattcctcaaactatcctaatcaggtagccatgaaagtgatc
+aaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaatagattgcgcaa
+aattcgtaccttaagtctctcgccaagatattaggatcctattactcatatcgtgttttt
+ctttattgccgccatccccggagtatctcacccatccttctcttaaaggcctaatattac
+ctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgattcttatgtgtac
+catatgtatagtaatcacgcgactatatagtgctttagtatcgcccgtgggtgagtgaat
+attctgggctagcgtgagatagtttcttgtcctaatatttttcagatcgaatagcttcta
+tttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtcatgaccagatcc
+acgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtctaacttatatcc
+cgtcgcttactttctaacaccccttatgtatttttaaaattacgtttattcgaacgtact
+tggcggaagcgttattttttgaagtaagttacattgggcagactcttgacattttcgata
+cgactttctttcatccatcacaggactcgttcgtattgatatcagaagctcgtgatgatt
+agttgtcttctttaccaatactttgaggcctattctgcgaaatttttgttgccctgcgaa
+cttcacataccaaggaacacctcgcaacatgccttcatatccatcgttcattgtaattct
+tacacaatgaatcctaagtaattacatccctgcgtaaaagatggtaggggcactgaggat
+atattaccaagcatttagttatgagtaatcagcaatgtttcttgtattaagttctctaaa
+atagttacatcgtaatgttatctcgggttccgcgaataaacgagatagattcattatata
+tggccctaagcaaaaacctcctcgtattctgttggtaattagaatcacacaatacgggtt
+gagatattaattatttgtagtacgaagagatataaaaagatgaacaattactcaagtcaa
+gatgtatacgggatttataataaaaatcgggtagagatctgctttgcaattcagacgtgc
+cactaaatcgtaatatgtcgcgttacatcagaaagggtaactattattaattaataaagg
+gcttaatcactacatattagatcttatccgatagtcttatctattcgttgtatttttaag
+cggttctaattcagtcattatatcagtgctccgagttctttattattgttttaaggatga
+caaaatgcctcttgttataacgctgggagaagcagactaagagtcggagcagttggtaga
+atgaggctgcaaaagacggtctcgacgaatggacagactttactaaaccaatgaaagaca
+gaagtagagcaaagtctgaagtggtatcagcttaattatgacaacccttaatacttccct
+ttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttagaggcatctctcgc
+tcataaataggtagactactcgcaatccaatgtgactatgtaatactgggaacatcagtc
+cgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacatgagaccaccccc
+gtggggattattagtccgcagtaatcgactcttgacaatccttttcgattatgtcatagc
+aatttacgacagttcagcgaagtgactactcggcgaaatggtattactaaagcattcgaa
+cccacatgaatgtgattcttggcaatttctaatccactaaagcttttccgttgaatctgg
+ttgtagatatttatataagttcactaattaagatcacggtagtatattgatagtgatgtc
+tttgcaagaggttggccgaggaatttacggattctctattgatacaatttgtctggctta
+taactcttaaggctgaaccaggcgtttttagacgacttgatcagctgttagaatggtttg
+gactccctctttcatgtcagtaacatttcagccgttattgttacgatatgcttgaacaat
+attgatctaccacacacccatagtatattttataggtcatgctgttacctacgagcatgg
+tattccacttcccattcaatgagtattcaacatcactagcctcagagatgatgacccacc
+tctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagacgatatcaagcgc
+tttaaattgcatataacatttgagggtaaagctaagcggatgctttatataatcaatact
+caataataagatttgattgcattttagagttatgacacgacatagttcactaacgagtta
+ctattcccagatctagactgaagtactgatcgagacgatccttacgtcgatgatcgttag
+ttatcgacttaggtcgggtctctagcggtattggtacttaaccggacactatactaataa
+cccatgatcaaagcataacagaatacagacgataatttcgccaacatatatgtacagacc
+ccaagcatgagaagctcattgaaagctatcattgaagtcccgctcacaatgtgtcttttc
+cagacggtttaactggttcccgggagtcctggagtttcgacttacataaatggaaacaat
+gtattttgctaatttatctatagcgtcatttggaccaatacagaatattatgttgcctag
+taatccactataacccgcaagtgctgatagaaaatttttagacgatttataaatgcccca
+agtatccctcccgtgaatcctccgttatactaattagtattcgttcatacgtataccgcg
+catatatgaacatttggcgataaggcgcgtgaattgttacgtgacagagatagcagtttc
+ttgtgatatggttaacagacgtacatgaagggaaactttatatctatagtgatgcttccg
+tagaaataccgccactggtctgccaatgatgaagtatgtagctttaggtttgtactatga
+ggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgacgaatttatacta
+atacgctttcactattggctacaaaatagggaagagtttcaatcatgagagggagtatat
+ggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcattcttgaaagata
+cataagcgataagttacgacaattataagcaacatccctaccttcgtaacgatttcactg
+ttactgcgcttgaaatacactatggggctattggcggagagaagcagatcgcgccgagca
+tatacgagacctataatgttgatgatagagaaggcgtctgaattgatacatcgaagtaca
+ctttctttcgtagtatctctcgtcctctttctatctccggacacaagaattaagttatat
+atatagagtcttaccaatcatgttgaatcctgattctcagagttctttggcgggccttgt
+gatgactgagaaacaatgcaatattgctccaaatttcctaagcaaattctcggttatgtt
+atgttatcagcaaagcgttacgttatgttatttaaatctggaatgacggagcgaagttct
+tatgtcggtgtgggaataattcttttgaagacagcactccttaaataatatcgctccgtg
+tttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtggtgtatatatcgg
+ataacaattaatacgatgttcatagtgacagtatactgatcgagtcctctaaagtcaatt
+acctcacttaacaatctcattgatgttgtgtcattcccggtatcgcccgtagtatgtgct
+ctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgttaggtaagatctct
+ctgaattccttcgtgccaacttaaaacattatcaaaatttcttctacttggattaactac
+ttttacgagcatggcaaattcccctgtggaagacggttcattattatcggaaaccttata
+gaaattgcgtgttgactgaaattagatttttattgtaagagttgcatctttgcgattcct
+ctggtctagcttccaatgaacagtcctcccttctattcgacatcgggtccttcgtacatg
+tctttgcgatgtaataattaggttcggagtgtggccttaatgggtgcaactaggaataca
+acgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaacgtgctccttgct
+tagcttgtgaatgagactcagtagttaaataaatccatatctgcaatcgattccacaggt
+attgtccactatctttgaactactctaagagatacaagcttagctgagaccgaggtgtat
+atgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcgagaagctaatacc
+ggctgtttccagctttataagattaaaatttggctgtcctggcggcctcagaattgttct
+atcgtaatcagttggttcattaattagctaagtacgaggtacaacttatctgtcccagaa
+cagctccacaagtttttttacagccgaaacccctgtgtgaatcttaatatccaagcgcgt
+tatctgattagagtttacaactcagtattttatcagtacgttttgtttccaacattaccc
+ggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgtaggaagtgaaaag
+ataaatattgcctacacatactgaattcaggcaatgcgttttattcgaaaggtcatataa
+ctagaaaacatgatgaattcttatcggatccttttactagcatagtgttggcgaacacct
+cgtaatgctcagcggcaaattggactgcgggtccttatcatacattttttttcaatatag
+gcgattggtctaggttagtgattccccaacacttaaggtttgctgacattcataccctca
+gcaacttcctctcaaaaattagagtgagttggtggtcttataagaccgttgattatttga
+ggtggtcaaatgatggtgcgatgcacaaatcgttataatcgtactctgtagacaataacc
+cattgtagtgccgattttgtgcataatacaagaaggaggatataaaaatgacttttcaat
+aatattggctattagcaacaagaaggagaatcctcattaagttagcaaccgcagggggta
+ctgcagtccaaggaggtttcattggagagagcagtatgaaaacggcaattatgattgtga
+gattcgctgaagattgtgtctctgattttcctagatagaataagctatagctacttaatc
+aactcttaactgtggagactatcctgatgatctgaataccccatttacaaaattccatat
+caatgaggctaacgcttaaatttcatttctccatcgtaacaaaaatcagcctttttatac
+aagacaaaacactgcttccattacgggtagcaatggttgctcgactactggtagcgtcgt
+gatgtggtgataaagctgtcttgcgtttatacttaaacaaattttgacctgacataatgg
+agcgacttatcggatgttgccgatctttagggtcatctattaagcttatacgaaaaaggg
+acaagcacgttacgtaatctggtaggactgggtacctagaaacgcaagaggaggcgaact
+ccaatatctgtaagaacagaaaaatacaggagtccttttcatttttcaagttaacaatat
+aagtaggagcttagagaggcttgcatgaaaatcgttaggaattacagaataggcagagag
+tggggcgtgtagactacattcttcaggccccacaatatgggttataggttaaactgcact
+ttttgcgatctcccgaaatactgtcgttctctgcgaaccacgctcgttccttttgctgta
+gtccacgttcatccaactattcagataaacaagatcgcagaattaaagcttaaccatatc
+ttgatagcccatcgtgtatggggcatgtatgtgcaaacaaaagacctcaatcttgtctgc
+gagagggaggaaaatttagacaaacataattcattctttcgactggacacgctaaggttt
+ggacaaactttgtatctatatctggaggcctgtattccagcccttcttttaataagattt
+acggcttaaactatggatatttgccaggaaatgacactgctattgacaggaacataattt
+tgattcaaacctcattgttaattattttatatctcctgtttttatatcagaatgcttctg
+tcctagaaggcatactcaaggtgagggctcgaggaatgaatcataatagaccggccccta
+ttaatattggttcaattctttcttacataacgcggaatttgattgcacgaacaccgggaa
+cacataaccgtatagcgcccgttatgctagtgcctagcgactgggaccgtggagtctata
+tcgtctttctaccattattaatctaaggatataccactttaagtcctttcaactaacata
+aggcgcattccatgcgctaaggaccttgaatttattatttcttacatgataaaagatcga
+gtcgacgggaacaaaaggctacgtactcaataaagtgcagtttactaagagccctttttc
+tggcttgtggagactatcataacatgaagatgttttgacattcaatagtttgcaaaacaa
+acttactttgtgtagtattgaacgagatctttccaattgccccatagcaggaatagttat
+atattgcagatcgcggtgtaacgcactccaaatccatcgcggtgtgtgagggtaagcgac
+ttaaagaattacggtttttgatcaaagcacagtgagagttgagcaaattacagttatacg
+acttaattcagtctccataaattgaaacgacacttcttaacgggaggaccagacacgttc
+attaagtgaggagtgcactttttgactttaaaaacatggtaatcaatttaaaccacttga
+tatgtatatgaacagatttgaagttatttctgttttaatacactgggagttctgtcaata
+tcgcaggaaccgcctgacgtcccctatcacacctcagagggtaaagggacaggggaaagg
+gtaatcgaggggtagggaacgtagttggcacacccaatggacgaataaatgctgccatat
+ccacggagggcgggattgcggttgattttaaggcgatggtaacctgaatgtaatagatca
+tcaaatgcctcctccactggaaattactgcgtacatccgctgagaattgcaatggagtgt
+ctcggtttttctttaaacaaaaccaaattgacaacttcatagtataatttttgcacatta
+caagcgttaattaacaaacttactttgctgttagctgcctatatttgtccgacaatataa
+ctggatatctctgcgagaactgtaaattaacggcacttggaacataatagttcctattgg
+taacgacgttgtaggcggcaattatccggtggaagaattgacaactgcagttgaactgca
+tgaaagtcaaatctctcgtaagtataactttagaagactccaaggtacccagaacctctt
+cagcggacacgatcgctatcaatcaataaggattattcactgaaaccgctcatatctgga
+ggtggacgtttttcttcgaaaagcttgtcaaaggactcatcaaatttttggccgtgctaa
+tcgacacacctgttattttcatgaccggataggacatctcgcggaaattcgggtaacagc
+tgggtagatataggacctcccctacgtattaatgataagcctgtcataactagcttggtt
+taccgaagagacaataaacattcgagcgctcgtgccaaactcggtgcattacgtttgaat
+aaatcggtaacatgtactattactctgcctaacggcacttacccgtttgggtccatgggg
+taaccgctcgatgttgacagaattatgctaaagtcgtttaagatcccgattaccgaaaat
+ctggttatgtctgagcattcgtacactgcgtattaagatcaggttgaacaggttcctaac
+aaattttgtgacctaaagtgaaactaggtcgtactctgggcatgttttatgtcgtggcgt
+atgcatgtgctgacacttctaaaaccaaattaaggctttatccaatatgggtccttaagt
+gctaaacatcattcacaatttcaagacagattgttggtcttgtcgattccgcatctgtcg
+ccaaattgacacatcgtaaaccaggtacatcggtaattatatgttgactaaactaccgtg
+tgtattctggctctaggtacggcgaacaagtacgatgtgcttaagaagccctcaccccag
+acgagcccgcgtaggtcacatcagcagatcctaagtaattccgttttattgtcctgaggg
+agtaggatcgacgaactctacaagtcgctttgtcgtgccttataggctatttcgggtcaa
+tgtagcgtcaaatgaactattgtcatctgtacgagttaactaagtgtctatcgccaacta
+aaagacgtctcgatggttctttatgcggacctgtcatatcattgactggcacttgcttac
+atccaaataacacgtttgttagcggatagtcgttaagtgtgcgcaagatcatgaggcggg
+gggggtaatatttcgccctctacatgataaatgaataagtaagaagatgatctttttgtg
+gcggtaccttaagcgtactcctgtcgacgagttactactaaaggaatgtagggttctgga
+tctatgaaaagcgacctccatatatatacgggcctaagcggagtaaaataagtgatcaat
+ggactaacattgaaatgttagtattgtcgaccattgagggctggtaaatcttatttacgg
+gcgtgggaaaacgaacgtgatatggtttagcatgggatgcaagcactcgttaatgcttac
+tttagttggttgcgggaacaacaggaggctatactaactggtagcgttcttgcttccatt
+atgttattattataattaaaaataagacatatggtagagttgtagtcagggtggatcggg
+ttgtctataacgttggaataatcaaaactatcgttaacaaaaacgaaatttaagtcggtg
+cggtggaatgcgcctacctcatgtgcaccacacattcacagcacacccctcattataggc
+aaggaagcaaacaaaaaaaagttaatcgaccgtatccgaccttaaattttaaaataaata
+gaaacacttagcggtaatgaaaagataggactaaaattcactagtatcctggaacgaggc
+aacagagttatctagatggtaacgaggtgctgcatcaagatgtatgatttttggtccgct
+gtgtggaatacctctattgatatacaagtgactttctcggtaataacgcacttcacaatg
+tgttgtttcttttctatgtattttgcaagagaaagaagcttagtataggtacacctcaga
+gatgtttcgtgtaaatcgtatcacatggtataactgcaggaggaacattatccaaattca
+ccacaattactaatccacccttttacttttactaaagatatattaattctcatgttgtct
+gaattgtataacccggtaccctgggagcgtatcgaaggataccaattgaagtcctcgagg
+catgttacaacacacgacttccttccgtctattcagacactcaacgagactaacttttcc
+taggtaatcaatgatattgggtaactcgtggcatcttatagttattgatccggctctttt
+gtagatcctgtgcgactcgtgcgctaattaagactggctctcttgcgcaggggatacgtt
+tattctacgtacccgatttggttactactaagcggcctttcttcaaacttgcagttgtga
+cttacattcctatttcttcaaagcagggaagggttacagggagagacttattgagatacg
+attggaatttccatgtacaatcgttaatacgcttgtagaccagcaactcagtatagagat
+ccgtttcctaaagggtgagcggtaggggcaaggcaataagaaattactaaaaccctagtt
+gttaatataagaacgattcgaaacaataggattgcccaagggggtgcgaacatggtgtaa
+atcaaagagaaataggcattgttaaaacccgcacgtttctagtacgcaagaggaacgtcg
+gtaaccagttctcaaagatcctaacctaaaaggggcttattctactttttccgacactca
+atggacgagacaaacatgaacggatagctttaggtctcgttgaatgcaaagaatagaatc
+gttattattaatcggtttccattatctatatgcggtatagatctccgagaggaccctgta
+aactagctctgcggtttaactggtgctaatagaccgccactatgttattgcttctagctc
+ctagcgtcttatcatgttatacattaatgtcgcatattggacagtagccaggcttggatg
+gatcgccgacaaaaagaaaagactttccctgtaaggacttaactattacatataacttgg
+atcattaatctgcaaattagagtaacggtctttcaccagcttcatattccaacgtggcgc
+tagtcgatatcccatgaagtttaaaactagaattggcagtctcacttcacagtgcgtatc
+tatacgacaaaagtggtcgatttgcataaatatcttatcgatattcaggttattaccgat
+tccttgctaacgctagaagtcacaccagagtaataataattccagacacctgtgaaataa
+tcggtcactacggatagactagtaacgataatacgtatagtccataaaagttgaatttta
+ggggctaaagatattagcaatactggtctagcctaatcgtcgatagcaaagggctgtgag
+gatttctcctacattttcgaccaattgtatcgataggaatagttacagtcacgcttgtag
+atgtaagagatgacgttattcttagggttcttaagtcggggggtaatttaagaccactag
+taaaggtagaggcgtacacagtaaacgatattttgaaatcgtcaaaaaaaagtttacaac
+atcctttaagttagcaactgattttagtggcaaccttaacggttgaattgatctactaat
+acaggcctacaccgaagggtacagataatgattcttactaccctaacatgatagagtcct
+gtcctatctcataggtcgacattttaaattcgtaatgagcaacgaagatcgtttcccaat
+ttgcaacattcacttatagacttcaggttatttcgtgctaacattaagatagaatataat
+cagtcgttaagaaactattatccagctttcgtcaaccataaagattaaaaactgaaactt
+ggcaagatatgaatagctatcctgctttaaccgatcgtatgagatgctttgtagcaagaa
+aagtgactagcacttgtgtttagtaaagcgggagagtgcggtaattaatattaatatact
+attaagctacacagcaaaggctgcaataatgttagtaagtagaacataaaggtattctcc
+acaagtaataaatagtgtgagctaattgactaacttaactctcgcgacaagtgatgtgga
+taagatgactcatatcgtctttttctgtagtgccgacatcccacctggatcgaacaattc
+cttctagttatcgactttgattacctatcctattaaacagatagggttgtaaagtcagaa
+aatgatcggcttgcgttggtctaccatagctagagttagaacgcgtagatagaggccttt
+tgttgccaacgtgggggtgggatgagtctgggcgagcgtgactttctttcgtgtccgaat
+ttgtttaacatccattagattagatgtttgtgttttgggtctgatgtcctaactactttc
+tcagtgaaactaatgtcatcatccaagtaaaatagtccgatgaagtctccgttttcggcc
+gaagcttgtctataacgtatataaagtcgctgaatttagaacacaccttatctatgttgt
+aaagttactttattccaaaggacgtgcacgaagcgtgagtgtgggaaggaacttaaagtc
+ggatcactcttgtcagtgtagataagaatttctttcatacttcactggaatccggcgtat
+ggatatctctaccgcgtcatctggtggtgtctgcggtaaaaagtcttgctgcacgagtct
+gagaaatttttggtgccatcacatcgtaactgtacaacgaacaaatagcatcaggccttc
+ttatccagcgtgaagtctaattatttcacaagctttcctaagtatgtaaatccctcactt
+aatgatgcttgcgccaatgaggatagaggacattgcatgtacgtaggactattctccaag
+gggtcttctattttgttagcgaaaattgttacagcctaatgttagagcggcgtacgactt
+tataccagatactttcattagatatgcaaatatccaattaaatcatagtagtatcgtggt
+atggacaatcaaaaaagacccgttgtgatatgatgtttttctagttcgttctcatatata
+tagatcaacaatgaataatctcatgatctataaccgatgtatatttatattccggttgac
+tgctccggtgcaattcactacggacactaatgactaatatggcgcctttcatcagaaacg
+ctaaatatgattaatgaattaagggagtattatctaattattagagagtagcagttagtc
+tgatattttcggtgtatgtgttagccgttataatgctgtctttttatcagtgagaacagg
+gagtgtgtagtgttgtatgcttcactttatgactctggttatatccctcggagaacaaga
+ataagagtacgagaagttcggtcattgaggatgaaatagaaccgctagacgaatggactc
+acgtttataaaactatgtatcacagtactacagctaactctgaagtccgagaagcttttg
+taggacaaaacgttataagtacctttcgcagaatacggccgtgcatacctgttataaggc
+gtagtagggacaccatgctatccctcatatagagctacactaataccattacatggtgac
+tatcgtttacggccatcatctgtaagcgatcatgcctcgttagcatccgtacaatctcgc
+atggcgtcactgcagaaaaaccccgtgcggattttgagtcagaactattcgaagcttctc
+aatccttttccattatggcatagcaagtgacgactcgtcagccatgggaataatagcact
+aatccgattacttatgaattagaacccacatgaatgtgattctgcgaattgtctaagaat
+ctaatgattttccggtgaatatggttgttgttatttattgaacttatattattaacatca
+cccttcgttagtgatagtcagctatttccaagaggttccccgagcatttttaccattctc
+tagtcatacaagttggagcgcttttaaatctttaggctgatcaaggcgttttgtctagaa
+ttctgcagatgttagattcgtgtgcaatccctcttgcatgtcagtaacaggtcacccgtt
+tttcgttacatatgctggtaaaatattcatagtaataactacaatacttgatttgttacg
+taatgctcgtacataacacaatcgtattccacggaacagtaaagctctattattctgatc
+gagcctaagagaggatcacactacgctattaaagtcacgttcacgaaatctcaaacctca
+actgctggtgaccagttatagacagtgtaattccatattacatgtcaggcttaagctaac
+ccgagcctttatataagctataatcaagaattagattggagtgcattttagacttatcta
+tcgaaatagtgatagtaagagtttatatgacctgatctagactgatgttctcttccacaa
+cagccttaaggcgtggagcctttcttatactattaggtcgcgtcgagagccctattcgta
+atgttaacgacactagactaatatacaatgagctaagaataacacaagtcacaagataat
+ttacaaatcatatatctacagtccacaaccatcactagcgattgcaaagcgttattggta
+ctaccgctctaaatcggtatgtgcaagacgcgttaactggttcaagcctctcctgctcgt
+gagactgaaagaaatcgaaaatatggatgtgcctaattgttcttgtgagtcatgtgcaac
+tatacagtttagtttggtcaagactatgcaactattaacagcatgtgcgcattgaatatt
+tggtgtcgattgataaatgccccaacgttccatcacgtctataagccgtgttactaatgt
+gtattagtgcatacctattcagaccatagttcaactgttggactgaaggcccgtcttggg
+gttcgtgaatgagagtgcagtttcttgtcttttccttaactgacctaaatgaaggcaatc
+ggtttatctagagtcatgcttaaggtgaatttcagccaatgggctcccattgagctagta
+tggtgctttacctttgtaagtggtggctttccttggtgtgctgactttaacacggcagag
+tgattatccgaagaatggataataagacgctggcaatattggctaataaagtccgatgag
+tttcaatcatgactgcgaggagatccatgcggtgtacctaaacctacatcgtatgtattt
+gctgacgttcattcttgatacataaagatccgatatcggtccactttgtttaccaaaagc
+cctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatggggatattgccg
+gtgagtacaagttagaccacacattagaactgacctatattcgtcatcatagagatggag
+tatgaattgattctgcgaagtacactggctttacgagtatctagacgccgcggtatatct
+cccgtcaatactatgaaggtatatatatagaggctgaaaattcatgttcaatcctctttc
+taagagtgagtgggagccccttctgttgtcggagtaaaaaggcattattcctcaaattgt
+cagaagcaaagtatacgtgatgtttgcttagaacaaaagagttaccttagggtaggtaaa
+tctcgattcaccgagagaagtgattttggcggtgtgcgattaattcttttgatgacagat
+ctcattattttatatagctccctctttgtatttagagtttgcgtaggtaacctggcaaaa
+ccatatcccggggggagagtgcgctgaacattttatacgatgtgattactcaaaggataa
+ggttcgaggcctctatactcatggaactatcttataattataatggatcgtggctcattc
+cacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaacgtacatcttcta
+aggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaaatatttttaaaa
+attgattctactgcgaggaactaaggtgtagacaagcccttagtaaccggtggatgtcgc
+ttcagttttatagcaaacattattcaatttcagtcttgactgaaattagtttgttagtgt
+tagaggtccatatgtcacatgcatatggtctagatgccattgtacagtaataccttagat
+tagtattagcggcatgcgtacttggatttcacttgtaagaatgagcttaggacggtcgcc
+tgtagggctgcaaataggaatacttacaatttttgatgacttgttagcatatcgctatca
+cccataaaaaacctgatacttgatgagcgggtgattgagactatgtactgatataattca
+atagctccaatagatgaaacagctatgcgcctatttatgtcaaataatcgatgtgataca
+agcttagagctgaacgagcgcgagtggaattagcggtgatctctatcctaaaaagccacg
+aaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagttaaatttgcatc
+tcatgccccacgaagaatgggtagagagtttgaaggtgcttctggattttcctaagtacg
+tggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaaccacaaacccctgg
+gtgaatctgattagccaacccagtgatctgatttcagttgtcaaatctcttttttataac
+taccttttgtttccataatttaaccggatctcataatgaacaaacgggtagaataatggt
+agcacatagcgagcttgtctattcagaaatatggcctactcagaatgtattctccaaatc
+agtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttatcggttccttgta
+ctacaatactcttgcccaacaaatactaagcataacagcaaaattcgaatccccctcctt
+ttaataaatggtttttcaatatagccgattcgtattcgttagtctttcaccaactattaa
+cctggcatctaattaataaaatcaccaaaggactctataatatgacagtcacttcggcct
+cttttaagacagttgattattgcaggtccgcaattgatggtgacatgcacaattagttag
+aatccgactatggagacaattaacaattgtagtgcccatttggtccagttgacttcaacc
+acgagttataaaggtattttaatttatagtcgatagtaccaacaacaagcacaatcataa
+ttatgttagaaaacccagggggtaatgctctaaatccagctttaaggccagagtgcacta
+tgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctaggaggtgccgagtg
+agaatatcagataccttatgaagcaacgattatatctggactagatcatgatgatcggaa
+taaaacattgaaataagtccttatcaaggagcataaacattttatttaatttatacttcg
+taaataaattcagaattttttttcaagacattaatctgagtaaatgacggctagaaaggg
+ttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgcgtttttactgaa
+acaaaggttcaccggaaagaaggctgccacttttagcttcttgacgatctttagcgtcat
+atttttagattagtcgaaaaacggaaaacaaacttaacgaagctggttgcacggggtacc
+gagaaaccaaagagcaggacaactccttgatcgggaagaactgaaatagacagctgtcat
+tttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgcatgaaaatactg
+aggatgtaaactatagccagtcaggcccgcgtgttgactaattgatgaagcaaacaaaat
+agccggtattcgttaaaaggaacgggttgccagctacagatatactctaggtatatccca
+aacaagagacgtcctttggctgttgtaatcggtcataatacttgtcacataaacaagatc
+gctgaattaaacattaaacagttagtgatacacaatcgtggttggggctgggatgtgcaa
+taaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaacattattatttc
+ttgacaatggaatcgataagcgttcctctaacttggtatatatatctcgaccccgggatt
+ccagccattcttgtatgaagatttaaccatttaactatgcatagttgaatggtaaggaaa
+atgatattgactgcaacagattttggatgcaaaaatatttgtgaattattggttatatac
+tggttgtatagcacaatcattaggtcctagaaggcatactcaacctcagcgagagagcta
+gcatgcataattgtaccgcccatattaatattcctgaaatgatttcttacattacgccca
+atttcagtcatcgaacacccccatcaatttacccgatagagaacgtgatcatacgcaata
+ccctatgcgaacgtccactctatagcgtctgtatacaatgattattcgttccatttacaa
+cgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctcctggaatgtatg
+agttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgtacgaatgaaagg
+ccacttttagaagagacctttgtatccattgtggagaatatcataaattcaagatggggt
+gtcatgctattcggtcctaaacattcttaatggctgttctattgttagtctgatttaaaa
+tggaaccatagcacgaatagttagatagggctcatacccctgtaacgatctacaaatcct
+tccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatcaaagaacactcac
+acgtcagattattacactgatacgaattatttcagtcgacagtaattgaatagaaactta
+ttaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttgactgtaaaaaaa
+tggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagttttttctctgtt
+attaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaagatcacacatca
+cacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtagtgggatcaacat
+atggacgaatttatgctcaatgagccaacctcccccgcattgcggttcattttaaggcct
+gggtaacatctatcgtttagataatcaaaggaatccgactatgcaattgtctgacttcat
+ccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaataccatattgaaatcg
+taatacgataattgttgctattgactacaggttatgaaaaaacttactttgcgggtacat
+gcatatttttgtaccacattattacgcgatatctctcagtgtactctaaattaaaccctc
+ttcgaacattttagttcctattcgtaaacacgtgctacgcggcaatttgccggtcgtaga
+atggacaactccagttcaactgcatgtaactcatagctcgcgttagtataaattgactag
+tagccatgggacaaagtaactagtcagcggaaaagatccctttaaagatatatgcaggtt
+gcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagcgtctctatcgta
+tcttctaattttgggccgtgagaatcgaaactactctgatttgctgcacacgttaggtaa
+tatcgcccattttcccgtataagctccgtacttatacgaactacacgaccttttaagcat
+tagccgctcatatcgtgattcgtgtacagatgagtctattaaaattacagacatactcca
+tatctcgctccttgaactttgaataatgcgctaacttgtactatgaataggcagaaccca
+actttcccgtttgcgtcaagcggggaaacgatacatgttgtcagatttatgattatctag
+ttttagatcacgtttaccgataatcggctgtggtctgagcagtcctacactgagtattta
+cttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaatacggagtacga
+tgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaaccatttttacga
+tttttactatagcggtcatgaagtgcgaaactgcttgcaaattttctacacacattgtgg
+ctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccagggaaagcgcgaa
+ttatttggtgactaatagtccgtgggtttgagccatatacctaacgccataaactacgtg
+gtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcagcacagactaact
+ttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaagtcgcttgcgcgg
+cacggattcgattgggcggctcaatcttgcctaatttctactattgtcagctgtacgact
+gtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttatgaccaaaggtct
+tataattgaagcgcacttccgttcatcaaattaaatcctggcttacccgattctccggaa
+gtctgacctagagattgacgacggccgcgtattattgagacctcttcaggattaatcaat
+aacgaagtagttgatctgtttggcgacgtaccttaagccgactccgctacacgagtttct
+actaaaccaatgtagccttatgcttagatgaataccgtcctaattagatattccggcata
+acagcagtaaattatctgttcaatggacgaacattgaattgttagtattctacacaagtc
+aggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatgcttgagcttgcg
+ttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacaccagcatattcta
+tatgctagacgtcttccttaaaggatcgtagtattataattaataataagaaatatggtt
+gacgtctagtcagcgggcatacgctgctctatatactggcattattcaaaacttgacggt
+aaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgggaaccaaaatgt
+cacagaaaacacctctttattgccaagcatgcaataaaaaaaatgttaatagtacgttta
+cgacattttattttataataaagagaaactattacacctattgatatgataggacgtaaa
+ttaacgagtagcctgcatagaggcaaatgaggtttctacatggtatagacctgatgctga
+aacatcgatgagttttggtcccctcgctcgttgaaatctagtcatttactactgtctttc
+gagctattataccacttcactatgtggtgtttctttgctatgtatggggctagtcaaaca
+tgatgactatagctacaactcagagagcgggcgtgttaagagtatctcatgctagaactg
+cacgacgaacttgatacaaagtaacaacatttacgattccacaaggtgactttgaagaaa
+catagtttaattctctgcttcgatcatttctataaaccggtaccatcgcagcggatagat
+gcataacatttctactactccaggcatcttaaaacacacgtagtacttcactagattaag
+acacgataagtgtataacttggcagtgggaagcaaggagattggcgaactcctggcatct
+gttacgttttgttcaggctcggttgttgataatgtccgactcctgccatattgaagactc
+gctcgagggagatcgggattcgttgattataagtacacgtgttccgtaatactatgaggc
+agtgattcaaaatggcacttctgacttacatgactaggtattattaccacggaagcgtta
+aaggcacactcttatggacttaagattgcaagtgccttcttctagcctgaattcgcgggt
+tcaacacaaactctctttagacatccgttgcctaaaggctgagacgtaggggcaaccctt
+taactatgtactaaaaaactagttggtaatttaacaacgtgtccaatcaagacgatgcac
+caacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtgataaaccccacct
+tgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataacctaaatccgga
+tgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagcatacatttaggtc
+tcctgcattgcattcaattgaatcgtttgtattatgagctgtacagtagctatatcagct
+atagttatcccagaggaacaggtaaactagctctgagcgtgaaatccggatattagaacc
+cctagatgggattgattctagctaatacaggcttatctggttttacagttatctagatga
+ttggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtattgcccgggaagc
+tattttctaggtattataaagtcgagcattaatatcaatttgacagtaaaggtctttcac
+cagcttcatatgccatagggcccatactcgatttaaattgaacggtttaacgagtattgg
+aactctcacttataactgagtagctatacgaaaaatctggtccatttccagaaatttatt
+atcgatttgctgcttagtacccaggaagtgataacccttgaaggcacaacactgtaataa
+gttttcctgtcacatctgtaatattcggtcactacgcattcacgactaaagataattact
+atactaattaaaagttcaatgttagggccgaatcatagtagaaattctcgtctagcctaa
+tcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaatgctagagatag
+gtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagttcgcttctttagt
+ccgggcgtttgggatgacaactactatacgtagagccgtactcaggattagatagtgtga
+aagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtttaggccaaacat
+taaccgttgtagggatattctaatacaggccttcaccgaaccctaatgataatctgtctt
+aataacattaaatgattgtctccgctacgagctcttagggcctcattttaaatgactaat
+gtccaaagaagagactttcccaatttcaatctgtcacgtatagacggcaccttagtgagt
+catatcattaagatagaagattatcaggagggaagtttctattatcaaccgttacgcaac
+cataaacttttaaatctcataatggcattgagatcaagagctttcatgatggtaaagttc
+gtatgtgatgctggggagctagatatcggtataccacttcggttgtggtaagcccgagtg
+ggccgttagtaatattaatagacgattatccgacaatgcattcgctgaaataatcttact
+taggagaaattaatgctatgagccaaaactatttatgtctgtcacattattgactaaagt
+atctatcgacaaaactgatgtccataagttgtagcagatagtcggtgtatggtgtcacca
+atgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaaattgcctattat
+acagataggcttgtttagtcagataaggttccgcttgaggtgctctaacttagcgagagt
+tagaaagcctagtgagaggcattttggtgccaaactccggctcgcatgagtaggccagag
+agtcactttctttcgtcgaagaagttggtgaacagccttttgattagttgtttgtcttgt
+ggctatgtgctactatataagttagaacgcaaactaatctaatcagcaaagtaaaatagg
+accttgaacgagacggggtacgccgttgaggctcgagatagtagataaactagaggaatg
+tagataaaacattagctagggggtttagttactggattacataggaagtgcaccatcacg
+gtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggacttaacaagttcgtgc
+ataatgaaatcctatacggactttgcatatctctaccgactcatctggtcgtctatgcgg
+gtaattgtattgctccaagtggatgactattttggcgtcccagcacatagtaaatgtaaa
+tccttataatagcataagcaattattagactgcgtgaagtcttagtagttctcaagcttt
+acgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccattgaggtcattga
+atgtacggagcactattatcaatgcggtatgcgattttctgagcgattattgttaaagac
+ttagcgttgagccccggaacacttgattacagattctttaaggagttatccaaatatcat
+tttaaataatagtagtatcgtgctttggacaataaaaaaagacccgttctcttatgttgt
+tttgcgacgtacttctctgatatatacttcaactatgaagattctattcatcgataaccc
+aggtatatttatatgcccgttcactgcgcagggcaaattatctacggacaataatgacgt
+agttggacccggtaagaactaacgcttaatatgattaaggatgtatgccagtattatctt
+attatgtcagagtagaagtttctctgagattttccgtcgttgtggtacaccggatttggc
+tctctttttagaactgagaactcggagtgtgtagtcttgtttccttcaatttatcaatat
+gcttttataccgccctcatcaactataacaggacgacaagttccgtcttgctccatcata
+tactaccgatacaccaatcgtatcaagtttagtatacttgctttctctcttctacagctt
+actcgcttgtccgagaagcggttggtgctcataaagttagtagtaaatgtacaactagta
+gccagtccttacctgtttttacgactactacggacaccatgagatacagaagttagtgct
+acaattataccattacatgctcaatatcgttgtcggccataagatcgaagagtgcatcac
+gcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacacactccccttgttg
+actaacatcttttacaagaggctaaatcattgtccaggatcgaataccttgtgtacaatc
+gtcacccatcggaagaataccacttttccgatgtagtatgatttacaaaaaacatctatg
+tgagtaggccaattgtagtagaatatattcatttgaccgtcattagccttcttcttaggt
+tgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcgatttcatacagct
+gccaacaccttttttaccaggctagagtcagaaaagttggagccatgttaaatagttacc
+atcataaaccactgttgtctactagtctgatcagctttcatgcctgtgcaagcaatatgg
+attctcacgtaatggtaacaactgttgcgttacttaggctggttaatttgtcagagtaat
+aaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcctaggaataggaa
+aagtaaagctcttttattctgatagtgactaactcaggatctaaatacgcgattatacta
+accttcaccaaagctcaaaaatcatctgctggtgaccagttatagacagggtaattcaat
+atttaatgtctcccttaacatttcaccagcatggattgaagatagtataaagttttacat
+ggcagtcattgtgtcacggttctatacaaattctgatagttagacggtatttgaaatgtg
+cttctagcatggtatcttacacaactgaatgaacgactggagccgttcgtatactatttg
+cgagcctcgagaccccgtttcctaatgttaacgaatatagtataatataaattgtgatat
+gaataacacaagtaactacagtttggacaattaattgttctaaactaaaaatcattcact
+tcagatggcatagagttatggctactacacatataaagcggtatgtgaaacacccgtttt
+agccggaaaccctctactgctcgggacaatgaatgatttccaaaatatggatgtgcagaa
+ttgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtcgttgcaaagttt
+aaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaaacgtgacagaaa
+gtctagaagaactgtgaataatgtctattactgattaactagtaagacattagtgcatct
+ggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtcgtggctgttccg
+gtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaaggtcaatttcaca
+atatccgatcacattgtgctaggttcgtcctttaccttgcttagtgctgcatgtacgggg
+tgtcatgacttgttatcggcagactctttatcccaagaatggataatatgtacatggaaa
+gtgtccataattaagtcccttcactgtaaagaatgactgccacgtgatccatgaggtcta
+cagaaaccgacttacttgctttttgatcaacttaattatggattcataaagttcagatat
+cggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatctgaatgacagtg
+atagaaaagatccccatttgcccggtcagttcatgttacaccactcattagtactgtaag
+tgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaactggatgtacga
+cgatcgagacgaagaggtatatataacctaaatactaggtacgttgttagagagacgatg
+aaaattaatcgtcaatacgctggcgaacactgagggggacccaatgctcttctcggtcta
+aaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctttgcggagaacaa
+ttcacggaacgtagcgttgggaaatatcctttctaccacacatcggattttcgccctctc
+ccattatttattgtgttctcacatagaattattgtttagacatccctcgttgtatggaga
+gttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacctgaaattgtttt
+tagttgggatttcgctatggattagcttacacgaagagattctaatggtactataggata
+attataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcatatgtggctaaca
+cggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagagcgcattgaatta
+ctcaaaaattatatatgttgattatttgattagactgcgtggaaagaaggggtactcaag
+ccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagtctatttcagtct
+tctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcatatgcgattcatg
+acatgctaaactaagaaagtagattactattaccggcatgcctaatgcgattgcactgct
+atgaaggtgcggacgtcgcgcccatgtagccctgataataccaatacttacatttggtca
+gcaattctgacattatacctagcacccataaatttactcagacttgaggacaggctcttg
+gagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcgatgcgactagtt
+agggcatagtatagatctgtgtatacagttcagctgaacgtccgcgagtggaagtacagc
+tgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaacccagggggaaac
+attgagttcagttaaattggcagcgaatcccccaagaagaaggcggagtgacgttgaacg
+ggcttatggtttttcagtacttcctccgtataagttgagcgaaatgtaaacagaataatc
+gttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagtgtgagcatttca
+cttgtaaaatatctttggtagaacttactttgctttaaatatgttaaaccgatctaataa
+tctacaaaacggtagattttgcctagcacattgcgtccttctctattcagatagaggcaa
+tactcagaaggttttatccaaagcactgtgttgactaacctaagttttagtctaataatc
+atgattgattataggtgccgtggactacatgactcgtccacaaataatacttagcagatc
+agcaattggccaagcacccgacttttatttaatggttgtgcaatagtccagattcgtatt
+cgggactctttcaaataatagtttcctggcatctaagtaagaaaagctcataaggaagcg
+atattatgacacgctcttccgccgctgttttgaaacttgagtattgctcgtccgaaattg
+agggtcacttcaaaatttactgagaagacgaagatcgactaaagttaaaatgctagtcca
+cagttggtcaagttgaattcatccacgagttatatagctattttaatttatagtcgagtg
+tacaaaaaacatccacaataagatttatcttagaataacaacccccgtatcatcgaaatc
+ctccgttatggcctgactcctcgagcttatagcatttgtgctggcgctcttgccaggaac
+ttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatgatacgattttatc
+gcgactagttaatcatcatagcaagtaaaatttgaattatgtcattatcatgctccatta
+acaggttatttaattgatactgacgaaattttttcacaatgggttttctagaatttaata
+tcagtaattgaagccttcataggggtcctactagtatcctacacgacgcaggtccgcagt
+atcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggctcacaatgttac
+ctgcttcaccatagtgagccgatgagttttacattagtactaaatcccaaatcatacttt
+acgatgaggcttgctagcgctaaagagaatacatacaccaccacatagaattgttagcga
+tgatatcaaatagactcctggaagtgtcagggggaaactgttcaatatttcgtccacagg
+actgaccaggcatggaaaagactgacgttggaaactataccatctcacgcccgacgcttc
+actaattgatgatccaaaaaatatagcccggattcctgattagcaaagggttcacagaga
+aagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatcttcgaatcgggatg
+aatacttgtatcataaaaatgtgacctctagtatacaggttaatgttagtgatacacaat
+actcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatcactcacccacgta
+tttggtctaattatgttttatttagtgacaatccaatagataaccggtcctattaagggc
+tatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatggtaccagtttaat
+tgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgggcttgatataag
+atttcggatgtatgggttttataatcgttggagagctcaatcatgagctaatacatggat
+ttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagtttaataggccgg
+attggattgagttaattaagaccttgttcagtcatagtaaaaacccttaaattttaccga
+ttgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagtgactaggtatac
+aaggtttttgagttcctttgaaatagttaactaatttaaaattaattaacgacatggaaa
+tcacagaacctaatgctttgtaggagttatttatgctgtttactgcctctacaaccctaa
+taaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggtatccagggtggtc
+aatttaataaattcaacatcgggtctcaggatattcggtcatataatttattaagggctc
+ttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttgtgaggcatctta
+caccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaaggaaacttgtta
+ccttggggatataagaaaactcacacgtctcattattaaactgagtacaatttttgcacg
+agaaagtaatgcaatacaatatgatgaaagccagctaatgaaaagggatggaacgcacct
+cggatctgttgcactggattaaaatccgattatttttaaaaatattcagtgctagagcat
+atcaggtctacttttttatctggtatgtaaagcccacggagcgatagtgagatccttacg
+actcaacgaaaagttataacataactcccgttagccaaagcccaatcccgattactgccc
+taccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtgactacctcccac
+cctttccccttcatttgttccactggggataagctagcgttttcagaatcaatgcaataa
+gaatagccaattgtctcacttcatcagagctcttggcaattccaggcgctacgtggttct
+ggaatatattcatttttcaaatagtaatacgtttagtgttgctattgtctacacgtttgg
+atattacgttatgtgagcggacatcaatagttgtctaactctttagtaagccagagatag
+cactcttagcgaatggataccatcttccataagtttagttaatagtccgaaacaactgct
+tcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaatcttactaatag
+atagagtttgttttaagggactactagaaatgggacaatcttaatagtatgacctaaact
+gacatttaaagatatatccaggtggcaagcataaagatcattgcgccacctccaccgtgg
+gattacttatcagtcgatatcctatatgctaagtttgcgacggcagaatacaaactaagc
+tgagttgatgctaaccttacctatgataccccattggaccggttaacagccctacttatt
+ccaaataaaagaacttttatgctgtagaagctattatagtgatgcctggtaacttcagta
+tattaaaatgacacacatacgccatatagagctcctggaactttgaataatgagcgaact
+tcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccggtaaccagacat
+gtgctatcattgatcattatcgaggttttcataaccttgacccattatcggctgtgcgcg
+gacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaataaggttggcaa
+agaatcgcataagacggacgtagagccgcagcgttgtgcgagtccaggtgcatgcgcagc
+aataggattttaaattttgttccatttttaatttagccgtaaggatgtccgtaaatgatt
+gaaaattggattcaatctttgggcctatgctactggaacctgatcgacaaaatttcaaac
+atacgttaactccgaaagaccgtatttttgcggctagaatagtcagtcgcttggagccat
+ataccttaccacttaaacgacgtgctcctgtagttgaaatataaacagaacacaaagact
+accgatcatatcaactgaagatctttgtaactttgaggcgaagcaccctcttcgagacaa
+ctaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaatcttgacgaatt
+gctaagaggctcagagctaccactgtaatttctctagagcccataataaatgaacgatac
+atccgtaggtagcacctaagggattataatggaagccaaatgcagttaataatattatat
+actggcgtacacgattcgacggatctctcacatagtgattcacgacccccccctttgatt
+gacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgccaccgtaaggat
+gacgtcgaagctacaactgggtataatttaccatgcttccctgatgctgagtgcaataca
+ctaagaatgagtttttaccccatatcaccagtatttgttctgttattgcgaagaaatggc
+tatgctgagttggcgactaaagtcacccatcctttttattaggtaaccccctcccttaaa
+ctaactgatttgctggagctgccctgcatacatatactttatcatttatggacgtccgtg
+acgcttattatccaccatagtcgatatgctacacggattcattaatggatcgtaggagtt
+taagttatatttactaagatcggtctcggctactatcccgccttacccggcgctatttac
+ggccatttttaatatattgacggtaattattcctatggtttcgaccgcacgtccttggac
+aagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccctaccatcatata
+aaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaagactatctattaca
+ccttttgttttctgtcgtagtatattaaagtctagaagccttacaggaaaatcagggtta
+tacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccatcgcgccttgtaa
+tcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatctcggctttatgt
+gattgggaggggcctactcaaacatgatgacttgacctaataatcactgtgcgggcgtct
+tatgactagctattccttgaaatccaccaccaaatggttaatatgtaaaaactttgacga
+tgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgagcattgcttgtaa
+aaccgtcaatcgcacacgttacttccataaaatttctacgaatacacccttcttaaaaaa
+aacgtaggaattcacgagtttaacaaacgataactgtataaagtggaagtccgaagaaag
+cagatgcccgaactactcgaagatgtttcgttttcttaaccataggggcttcttaatggc
+ccactacgcacattttgttcaagcccgagagggacatccccattacgggagtattactaa
+aactgttccgtaatacgttcagcaagggatgaaaaaggccactgctcaagttattgacgt
+gggagtattacatcggaagcctgaatcccacactatgatggtctgtacaggcctagggac
+tgcgtctagacggtattaccggcttctaatcatacgatcgtgagtcttaacgggaagtaa
+ggctcacacctaccccaaaccatttatctatgtaagtataaaattgtgcgtaagtgttca
+aagtggacaataaagacgtggcaaaaacccccgcacataagccgctttagatttcacaaa
+taccaatgcggttaaaaacatccttgagtcgtacatacaccatactcgcgttaaacggat
+ataacagaagataataaatccggatgtggagtcggtgtaactatagaaagccaagtgaaa
+taatgcttaccagtcatttagctatacggctttcatttcatgtcaagagggtggagtttg
+acctgtacagttgatatatcaccgatacttagaactcacctaaagctaaaattgctcgca
+gcgtgtaatccgcatattacaaacaatagatgggattcattatacataagacacgatgat
+ctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgccttacaccactt
+aaacaaaagtattgacagggaacctattttcgaggtattatatagtccagcttgaatatc
+aatttgacagttaacctagtgaaaatcagtaagaggaaatacgccacattctccagtgaa
+attctacgggttatcgtctagtccaactatcaattataactcacgagatataagtaaatt
+ctcgtacttggcctgatttttattatactttggatccttagtaaacaggaagggagaaac
+cttcaacgaaaaacactggattttgttttactctcaaagctcttatatgacggaaatacc
+ctgtcaagtcttaactttattactagactaatgaaatgggcttggggtggccagaatcat
+agtacaatttagcggatacactattcggactttcctatcggctgtctggttggataagta
+tggggactaataggctagacatacctatacttaaactatacaggcgtcatctatctctgc
+aactttggagttccctgatgttctcccgccctttgggttcacatcttctataccgacacc
+cctaataacgattagtttgtgggttagagtaaattaatacggttaatattaatgtatcgt
+tgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatgtcacgaagtata
+actaccctaatgataagctgtaggaataaaattaatgctgtctctaagcgaagagatatt
+tccgactctgttttaatgacgaatctcattacttctgacttgcaaatgttcaatatggca
+cggtttcacggcacctttgtgacgcatataatgaacttagaagattataacgacggaact
+ttatatgataatccgttacgattaaagaatctgttaaatatcataatggcattcagttct
+agaccgtgcatcatggtaaacttactttctctgcatggcgacatacatttcgctattcaa
+attcgcgtgtggttacacccactcgcacctttggaatattaagagaagatgatcagaaaa
+tccattcgctcaatttttctgacgtacgtctaatttatcctaggagacaaatcgttttat
+gtctctcacatttttgaagaaaggttcgagagacaatactcaggtcctgaactgctagaa
+gatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatgaatgatacttttc
+caagttcagttaagtgaatatgtttaacatacccggcttttcgatcttaagctgacgctg
+gacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtttcgtcaaaaacg
+ccccctcccttctcgagcccactcacgctatgtattgacgcgaacttgttcgggatcaga
+cttttcaggagttcggtcgcgtgtccctatgtgctaatatataagttagatcgcattaga
+tgctaatctgaatacttatagacgaccttcaacgagaacgggtaccaccttgaggctaga
+gttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggctttagttaagggt
+ttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcgaccatctagaggc
+taaggggactgtactaggtagtgattaatgatatcctagacgcacgtgccttagatcttc
+agactctgatggtccgcgatcaccgtaattgtagtcctccaactcgatcactttgttggc
+gtcaaagaaattacgatatctaaatacttataatacaataaccaaggatgagaatgactc
+atcgcgttggagttatattgcttgaagttctatggaatgaaagcacgttatctgccgtcc
+caatatctccagtgagctaattcattggacggtccactttgatcaatccccgaggagatg
+ttcggacactttagtctgtaacacttagcgttgagaccacgaacaattgattactcagtc
+ttgaaggtgttttccaaagttcattttaaataagactacgataggcctttcctattgata
+taaactacccggctctgttgttcgtgtgagtcgtacttctctgtgtttttctgattatag
+caagattcgattcttagtgtaaacagcgatttttatttgacccgtcaatgagaagcgcat
+aggatctaagcaaaattatcaagttgtgccacaaggtaagatctttccagttattgcagg
+taggatgtatcccacgttgatagtatgaggtctgacgtcaactgtctaggagagttgacc
+gcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcccactgtcgtggc
+ggcgttcctgatatttagcaagaggcgttgataaagccctcatcatctagatctcgacct
+catctgccctcttgctccatcattttctacacagactactttcctatctacgttagtata
+attgctttctatcttagtatcatttagagcttctccgtcaacaggttcgtgctattaaag
+ttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcgactacttcgcaca
+aaatcagataaagaagtttgtcattctattagacattgaattgcgcaattgacttgtacc
+acttatgatcgaacactgaatcaagactgtgattaactaaaatagacaagccactatatc
+aactaataaaaacgcccctggtggtcgaacatagttgactacaggataattaattggact
+ggagccattacattctctacaatcgtatcacttcccaagtagacaactttgaccttgtag
+tttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaatagtttcatggga
+acctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgataaagtcgtgtcg
+ctttcgatgagagggaattcaccggaaaacaccttggttaacaggatagtctatgtaaac
+ttcgagacatgtttaagagttaccagcttaatccacggtgctctactagtatcatcagct
+gtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacggttgccgtactga
+gcagccttattgtggaagagtaatatataaatgtagtcttgtctttacgaagcagacgta
+agtaataatgacttggaataccaaaactaaacatagtggattatcatactcaagaactct
+ccagataaataacagtttttacgatacgtcaccaatgagcttaaagattaggatcctcaa
+aactgatacaaacgctaattcatttgttattggatccagtatcagttaaactgaatggag
+tgaagattgtagaatgttgttctggcctcgcatggggtctaggtgatatacaatttctca
+tacttacacggtagtggaaatctgattctagcttcgtagctgactatactcaaggaacca
+ctgctcaaggtaggagactagttccgaccctacagtcaaagtggccgaagcttaaactat
+agactagttgttaaatgctgatttcaagatatcatctatatacagtttggacaattatgt
+gtgcgaaactaaaattcatgctattcagatggatttcacttatgccttagaaacagatat
+tgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagggacaatgtatct
+tttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataatagaatcttgtg
+ttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttggggtctactgtg
+tgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagctcgagtactcatt
+aaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttcccggtacgctatct
+ctctcatcgggaggcgatgtgcaggttatctacgaaagcatccctttacgttgagagtgt
+cgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgtgcctcagggtcc
+gggcgtactcctccatggaagggcgcgcatctagtgttataccaactcgctttttaacta
+ctatgctgtagttctacaggcatagtggccagtattttctaacttctctggatagatgct
+ctcactcctcatccatcacggcttcagtttacgtcttacttgcttgttcagcaacggatg
+gaggcattaagtatcttcactgttccctaaaattgctgttcaatatcaaagtaaggacga
+tacagggaaagctcaagcacactcattgaatactgccccagttgcaacctcacttaatct
+gacaaaaataatgactactctaagtgttgcggaagcagtctcttccacgagcttgtctgt
+atcacttcgtataggcatgtaactcgatagacacgaacaccgagtgagaaactatattct
+tgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctggagatcactcacgc
+ccacacaaggcgctgctacctctttattccaatgtgtaagaatttgctaacttcatttct
+agaccgcagctttgcggtcataatttcacggtacggacccttgggttagagacttgataa
+cacacttcgcagtttccaccgcgcacatgttttagtggcttctaacatagaatttttgtt
+gtgacataaagagtgcgtgggagacttgcccgaccgttaagccataatcaattgaaagcc
+ccgtgagtcacatctaattggttgtactgcgcatttagctatcctttagctgactcgaag
+agattcgattcctaatataggttaattagatggctgccgcgcgaagtaaaacgtgaaaaa
+cgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagttccaagttcgct
+acgttatgagagagattggaattaagcaaatatgttttatggtgattttgggatgagaag
+gactgctaagtacggctactaaacaaatttctaaaaccgccatctaccttatcttggaga
+catttaagttgtatatgtcactagtctagcttttgtctgtgggacgcgttctcggaatga
+gggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtggactattacacc
+aagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaaggtaccccgcat
+aagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaaaacataatttta
+atcagaaggcagctcacccgcttgctctagatcttatctttgtatgaatgtcagaattta
+ctgcaatatccgttccgaatagtgagggcttagtatagttctctgtatacaggtcacatc
+aaactccccctgtcctagtacagctctgagctttaattaattgcatacatttccttcaat
+catcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaagagaagcaacaaac
+aactagcccgactcacgttcatccgccgtatccttgttcagttcttactccgtattaggt
+cagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcccgcttgaggttg
+acaattaaaacgctgagcagttatcggctattagatagtggggtgaaagtaattggctgg
+aattatgttaaaacgtgatattaagctaaaatacgctacttgttgccgacctaattcagt
+cattcgatattcagttagagccaagaataacaagcttgtataaattgaacggggtgcact
+aaacgatgtgttactctaatattcagcttggagtatacctgaaggcgaattcatgtatcg
+gccaataataagacgttgaagatcacaatttggactagcaaaagaaggtgatttatgcgt
+ggggattgagtccactgtacgagtacggtctctggaaaattataggttcagggaatataa
+ggaagtaaagataattaccaagagatttttggtatcgctatgacccagaggtgttctaac
+gtctgttttgatccgcagaatttctgcctcaatgcatatttgacggacttgaactagagc
+ctctaaagttaaatggcgacgcaactgttcctaaacttcaattattactactcttttttt
+cctagggtattgtagaggccagtggacaaaataaatcaaatttaagatgtttcggacatt
+aacatcccccgtagcatagaaatcatcagttatccaatctctcatcgagcttttacaatt
+tctgctggcgctatggacagcatatgccgcgagacctccgcaagactcacttgatcactg
+taagtatcttcattagaggttagagcctatagttaagctgctgacctagtaaaattggta
+ttttctaattttattgctcaagttaaaggttagtgaagggataatgacgttatttttgaa
+caatgggttgtattcaattttatatcacgaatggaacccttcattcccggcataatacta
+gacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtttaattccggcaa
+accaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatgagtttttcagga
+ctacttattacctattaataagttaacatgagccttcataccccgtaagacaatacatac
+tccaccaattagaattctgagccatcttatctttttgtatcatcgaagggtatggccgaa
+taggttaattagttactcctaacgtctctacaggcatgcatttgacgcaccttcgaaaat
+agtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatagtccacggtttcc
+ggattaccaaacgcggcaaagagaaacattgtatcgacggagataacttaatacagaagg
+aaggggcatcttcgaatacggatgaataattctatctgtttattctgacatcttgttttc
+aggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaattattttctaata
+ttgacgagagcaatctcactccttttgggtctatttatgttttattgaggcacaagccta
+tacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtggaaacaaaggatg
+ggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaaatcagatgctat
+ccttaactttgggctgcatttaagatggcggttggaggcctgtgagaatcctgcgtgtca
+tctttaatgaccgaattcatccatgtagattcagatcacacactcattccttgatgttgt
+ctaaacaaaagttgttgtggacgcattggagggagttaagtaacaacttgggatcgcata
+cttataaaaattatatgttaaactttcacaaacgctgaagtccaaagtaactagcccaaa
+cgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaatagtgttcgaagg
+taaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgcacggaggtatga
+tgtttactgactctacaaccctaattttccagtacgtacattcattccaataggttagtt
+ctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgctctatggatatta
+gctcattttatttaggaagcccgcttagaggcttactatgagggaaatgccaaaatgtca
+tacttttcggtgtgtcccatatgacaccgctttacatagaatttgaattaaaacgcgctc
+tcccgttcactaccatacttggtaccgtgcgcatattacatatagatataggatcatttt
+ttaaagctgtactaggtttgatcgacaatcttatgctatactatatgatgtaaccctcat
+aatcaataccgatcgtacgatcctagcataggtggcaagcgattttatgccgattattgt
+gttaaatagtctgtgagtgtgattatcagggctacgttggtagaggggttgtatagacct
+cgcacacattgtgacatacttaacaatatacgaaaactgatataataaatccccttaccc
+aaacaccaatcccgttgaatcaactaccataacgtctcccatataaattgcctacttgtt
+tgcataaatctgaatacataacaccattgcaccttcttgtgttccaatcccgttaagatt
+gccttgtcagatgatatgcaagaacaatagcatttgctagcaattattaacagctcttcg
+aattgcctccacataacgcgggagggtatattttaatttggcaaatactaagtactgttg
+gcgtcatatgctattaacggttggatattaagttatgtcagccgtaagcaagagtgggcg
+aaatattttgttacccagtgagagcactcttagagtttggatacaataggccatatgttg
+acttaagaggacgtaactacgccgtacaccattgttcaaccgacttcttggcaaatagaa
+tcgtattagcaatcttaagaatagagacacgttcgtgttagggtatactacaaatccgaa
+aatcttaagaggatcacctaaactgaaatttatacatatttcaacgtggatagatttaac
+ataattcagccacctccaacctgggagtaattttcagtagatttactagatgattagtgg
+cccaacgcacttgactatataagatctggggatcctaacctgacctatgagacaaaattg
+gaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctgttcaacagatga
+tagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaatttagacagaat
+ggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaataggtaaacgtg
+cccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgacgtgttcagaaac
+ttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgtttctgaaccggctt
+atccctaagatatatccgtcgcaaactttcgatttagtcccacgtagagcccaagcgttg
+tgcgactccacgtgcatgcccagaaatacgagtttaaatttggttacatggttaattttg
+accgaagcatcgcactttatgattgataattggattcaatatgtcgccctatgcgaatgc
+aacatgatccacaatttggctataagacgtttaatccgtatcacactttgtttgcggcta
+gtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactccgcaggtacttc
+aaatataaaaactaatcaaacacgacccatatgatcatctgaagatatttggaactttct
+cgacaaccaccctcgtactcaatacttacactaatcgacaggcacacgcaacgtgtacag
+tcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacgcttatttctcta
+gtcacaattagttatctacgagacatcacgagggagcaaataagcgatgttatggctaca
+cataggcacgtatgaatatgatataagccagttaaacagtcgaaccatcgagcaaattct
+catgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatgtaacttcttctg
+ctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtattagtttaaatgc
+gtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaatataacatctattt
+gttatctgattgcctacttatggctttgcggtcgtggcgactaatgtctccaatcctttt
+gaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcactgcatacatata
+cggtagcaggtagggacctcacgcacccttattataatcaatagtagttatcagtcaacg
+aggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgtctaggcgactat
+cacgcattaccaggcgagatttaagccaattttgaatatagtcaacgtaatttttactat
+gggttccaccgaaacgccttgcacaactaagaatcccataaaatatcgatatcaaataaa
+agattgtgtcaataccttcatatatattttttcggttgactaacgtgaactaaggttagg
+ggttttgtatgtctatataggaaacagtttcttttctgtcctactttagtaaagtcttca
+agccttactccaaaatcacggtgattaagccgttactcagcagcatgattctgcctgctc
+gggtcctaaaatccagccttgtaagagtcgctgtgtattagctagggagacctttgttaa
+aaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatcttcagctcgtgtc
+attataatatctctcccccacgcttttcactagatatgccgtgtaagcaaacaccttatg
+cttaatttcgaaaatattggtacttgaaaaaagctgtaggggtacttaatgtctggtagg
+agatcaggagagaattgagtgtaaaaccgtaaagccctcacctgacttcatgtaaatggc
+ttagaagactccatgatttaataaatactacgaaggaaagactggatctaaagataactc
+tagtaaggccaactcccttcaatgctgttgccagttataatccaagagctgtccttttct
+gaaccatagcggcttctgaagcgaactagaagcaaagttggttctagccagacagccaca
+taccctgtacgggtgtattactaaaactggtccggtattagttcaccaagggaggaatta
+ggcaaaggatctaggtatgcaagtcggagtattacatccctaccctgaatccatcaatag
+gttcctctgtactggccttcgcaatgagtattcaaggttgtacagccgtataataataag
+atagtgactatgaacgggaagtaacccgctcaccttccccaaaacattgttatatctaag
+tattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaaattacaccgcac
+ttaagccgcttttgatttatatttttccaatgcgcttttaaaaataattcagtcctacat
+actaattaagacccttaaacggagatatcacaagttaagttttaaccatctcgactaggt
+ggaactatagatacccaactcaatttatcattacctgtaatgttcctagaaggattgcat
+ttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacagattctgagaaat
+cacctaaacctattagtcagagcacccggttagaaccagttgtcaaaaaatagagcggtt
+gcatgagacagaagtaacgatgagatccgttgtaacgttgagacatctggcctatcgtca
+atacagtcctcccttaaaaatatttttaaatactaggcaaacccaacataggttagtcct
+atgtgatacgccacatggtatatcattttgtaacgttacctagggataatcaggaagtgg
+aattacgcaaaagtagacagtgaaatgcttagggttatagtctagtccaaagataaagga
+taaagcacgtcagagaactatattagccgaatgggaatcattgttaggagactgtggatc
+atgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgtttttgtttgaatctaa
+aagagctttgatgaccgatagtacctgtatactagttactgtattacgtgtctaatgatt
+tcggattggggtccccagaatcagacgtcattgtagacgattcaagtttaccaatttaat
+ttcccagctctccttggagaactatcgccaataattgcagtcactttccttttctgaaac
+gataaagccgtcagagttctctgcaacgttggacttacctgaggttctaacccactttcg
+gttctaatagtagttaacgacacaacgaataacctttactgtggggctttcacgatattt
+tttcgcttattattaatggttacgtcataagctggtgtccaaattaaggttaccggcttc
+gcagagtagttgtatccaagtataacttccctaatcataagatcgaggtagaaaattaat
+gctgtctctaaccgaacagatatgtcccactatgtggtatggacgttgctaattacttct
+gaagggaaattggtcattatggatacgtgtctaccatcaggtcggacgcagatatggttc
+tgtcttcagttgatccaccgttctttataggataataactgacgattaaagattatggta
+aatagattaagccaattctcttcttgtcagtgaagcatccttaactgacttgctctgcag
+cccctcatacatttagctattcaaagtaccggctcgtttcaaactctcccacctttggaa
+gaggttgtcaacttgataagtatatcatttacagcattttttcggacgtacctctaatgt
+ttcattgcagaaaattagttttttctatcgcacattttgcaagtaacgttagagacacaa
+ttatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaatatcaaaaaagac
+tgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtttatctgtcccgg
+cgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcgttcttacaagtc
+tgtctccaagggtcggcaaaaaagacccctccattctcgagcccactcacgatatgtagg
+gacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggtccatatctccga
+agttagaagggacatacctttagatgataagatcaattcttattgacgaaattcatccac
+aacggggaacaacttcaccctagacttacgtctgaaaagacacctagcgtcttataaaag
+gtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaacctcgcgcccttc
+cttacgtatcgacaagatagaggctatcgcgaatgtactacggaggcatgaatcatatac
+tagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcaccgtaattctaggc
+ataaaactccagcaatttgggggccgaaaacaaatgacgttagctaattaattatatgac
+atgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattgaacttcgtgcgt
+ttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttcatgcgtacctcct
+agttgataattccccgagcagtggttaggacacttttgtcggtatcaagttccggtctca
+aaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaatttttatgaagtc
+gtcgagacgcagttcctattgatttattctaaacggagatgtgcttcgtgggactcggaa
+gtagatctgtgtttatgattattgctactttagatgctgactgttaactccgtgttgttt
+ttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagttctgccacaagg
+tatcatatttacagttagtgctggttgcttctttcaaacgtggtgagtttgtgctatcac
+gtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttccagagagggtgtga
+tagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagagccggtgttaaac
+acatattattattgttatccaactaatcggacctatgcataaagcattgtctaaacagaa
+taattgcctatatacggtagttttagtgatttatatcttagtatcagttagagcttcgaa
+ctcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttctacaaacgaatgta
+agcggttttccaagtagtacctataaatcacagaaagatctgtctcagtatagttgaaat
+ggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaagacgctcattaa
+cgaatatagacaagacactatatcatataataaaaaagaacatggtgctcgaacatagtt
+gaattcaccatattgaaggggaatgctgacatgtaattcgctactagacgatcaattccc
+tacttgtcaaagttgaactggtacgttcttggaattaaatatgattgcgctggaccaaat
+tgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccgtctcttaccttt
+cttgcttatgataaacgacggtccctgtacatcactgggaattctcagcaaaaataattg
+ggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaaagattattcaac
+ggggcgataataggatcataaccggtatgcaagcgcattgaaagagccatgagatcctta
+tccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaatttataaatgtag
+tctgggctgtaagttgaagacctaagttataatgaagtgcaataccaaatcgattcatag
+tggattatcagactcaagatatctcctgataaattacagttgttaagatacggataaaat
+gagatttaagattagcagcctctaatctgtttcaatcccgttggaatgtggtatgcgatc
+aaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctgccatcgcatgcg
+gtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctgagtatagattcg
+tagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtcacacaagacact
+aaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagttcttgttatattc
+gatatactcttggctaatttatgtctgagtatataaaattaatgatattaacttgcattt
+cacggatcccttagaaaaagattttgaccgagcgcattataaacggttacaccgaatcaa
+tagaagcatacccaatagctttctttgaatttattgcctgcgcaacttggctgactctct
+agatccgaataattctatatggtcgtgacgaaactagttcattactgtttaaaatgccaa
+catgtcttttgggccgataatggctctttgcaaaattactcaatgatacgattgatcaaa
+gcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattatccgaaaatcttc
+caaaagagtccacgtaccatatctatctcatagcgacgcgaggggaaccttatctaacta
+tcattccatttaccgggtgactctcgatgcaggatccgattgggataaattgcccagaaa
+tggctcattcctgactaagggtaaggccgttctcagcaagggaaccccgcgaatctaggc
+ttataccatctagattgttaactacttgcctgtagttctacagccatactggacagttgt
+ttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgtaagtttaactat
+tacgtccgtgggcagataaggatggaggctgtatgtatcttaactgttacctaatatggc
+tggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgctttgtatactga
+ccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaactgtggacgatca
+tgtctctgcctagagcttcgctgtatcaattcctatagccagcgtactagtgacacaaca
+acaccgtgtgagaaaagatattagtccttacgtctgtctctctacagcttattgatgagg
+attgaacatggacatatagctccccctcaaaagcagatgctacctctttattccattctc
+gaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaatttatcggtaacg
+tcacgtccctttgagactggataaatatattaccaggggccaacgagcaattgttggagg
+cgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtctcgtgcaactcac
+ttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtgtactgccctggt
+acatttcctgtacaggactccaacagtgtagattcctaagatagctgttggagttgcctc
+acgccagatcgaaaaactgaataaactagtgagctgagctgcagaaataccgcttaatta
+cttatgactagttcaaagggacctacgtgatgtcagacattgcaaggaagaaattaggtt
+tgtgcgtcattttggctggactagcactccttacttcccctactattcaaatgtcgtaaa
+cagcatgagacaggatcgtgctgacatttaaggtctattgggaacgaggctacctttggt
+cgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgcaattgcttatag
+atctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcagttcttcctcagc
+aactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaacctatgcgctca
+tttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattcctctacttagta
+gctttctttgattctcagaattgactgcaatatcactgcacaattctgtgccattactag
+acttctctgtattaacgtctcatcttactaacactcgcctaggacacatctgagagtgaa
+gtatttcaatacatttactgaaatcttcagttctaaaatccccgaataaggctcttatcg
+gtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatacgcaggagcctgg
+ggaacttagtaataactatttcggcagacaaagcttataacaagttgccggcgcgtataa
+tatttaaaagaccccttgagctgctcaattaaaacgctcacctggtataggctattagat
+agtgccgtcttagtaaggggcgggaattatcggataaactgatattttgataaaataacc
+gacttgttcacgacataagtcactaaggagattttatctttctccaaagtatatcttcct
+tggataatttcaaagcgctgcaatttaagttctgttactagtttatgctgctgggaggtg
+accggaaggcgtagtaatctagaggcaaattataagaagttcatcatatcattttcgact
+acaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagtaccctagatgga
+aaattatacgttaagccaagatttcgatgtaatgataattacctacacatttttgctatc
+cataggaacaagagctgttctataggctcgtggcatacgaacatttgctgccgctatgaa
+tattggaagctcttcaactacagactctattcttaattgccgtcgaaaatgggccgaatc
+ggctattattaatactcggtttttccgaggggattgttgtcgacagtcgtaattattatt
+aatattgatgttggtgaggtcatttaaatacaaccttgcagacaatgaataagggatcca
+atctctcatactccttttacaattgctcatgcccctatgcaaaccttatgccgccacacc
+tccgcaactctctcttctgaactgtaagtagcttcattactggtttgagactatactgaa
+gctgatgacattctaaaatggctattttcgaatgtgattcataatgtttatcgtttggga
+tggcagaatcacgttatttttgatatagcccgggtattctattgtatagaacgtatgcta
+caagtcattccccgaagaagactagaagtaaacaacatgcgaccatcgttaagccacgca
+aggctgtagctttatttcccgataacctatcttccataaatagcggacagcaggatactg
+acgctcaacatcagtggttatggtctaatttttaacttttaataaggtaacttcagcagg
+catacacagtaactctttaatttataatcaaattagaagtctgacacttcttatattttt
+ctatcatccaacgcgatcgcccattagcttattgtgttactaataacgtatctaaaccaa
+tccttttcaagctactgcctatattgtcaatatatacaaacaacaggatagtaggctgct
+taaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcacaaactttgtagac
+aacgagtgaaatttatacactacgaagggccagcgtacaagacccatgaattaggcgata
+tgtttattctgacatattggtttatccttaatctgtcgctgtaaaatgaagccgccccca
+tccctgcgaattttttttcgaagattcacgactgaaatataaatacgtttggctatattt
+atgttggagggaggcaatagcctttactgttaaccgaagatttagccagtgagtgtgaca
+ctaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttagtcaatctcgcct
+ataagttcatatagctctggatataattatctggcccatgcatttatcatggcgcttggt
+gccctgtgtgaagccggcctctcatattgaaggtccgaagtattccatgtacattaagat
+cactctctcattcatgcatcttggcttaacaaatctggttgtccaagctttccaggcacg
+tatggtacaaattcggatcgaatacttataaaaatgatatgttaaactgtctaaaacgct
+catctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgtaatgctggtgcac
+tgaatgtgtaatacggttagaagggattagttatgttacaaatccattgaaaacttaaga
+agcattgcgtgctcggagggtgcatcttttatcaagagactaacattattttcaacgacg
+tacatgctttacaatagggtacttatcaaacgccgagaaacgcgcctatagtgatgttat
+gattatgacccgatatccattggaccgaattttatgtaggttcccagcgtactcgcgtaa
+tatctcggtattgccataatgtaatacttgtcggtctctcccagatgaaaaagcgttaca
+gagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggtaacggccgctgat
+ttcatatagatatacgataagttggtatagctctactaggtggcatccacaatcgttgca
+tttactatagctggttacaatcataatctataccgttccttacatactaccatagcggga
+tagcgtttttttgccgttgattgggtttaagaggatgtcagtctcattatatccgattcg
+gtgggagagccgttgttttcaaatcgcacactttgtgacataatgtacaagataacaaaa
+ctgatataagatataaactgtcaatatcaccttgacacttgaatcaaagtaaattaactc
+gcaaatataatttgactaattgggtgcagatttctcaattaataaaaaaatggcaccgga
+tgggcttacaagccccttatcattcacttgtatcatgatttccaagaacaatagaatttg
+ctagcaagtatgaacagagattcgaattgcatccacagtacgccggagcgtttattttaa
+tgtggatatgacgatgtactgttggcggcatttgctagtaaccggtccttatttacgtag
+cgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagagaaagattacagt
+ttggtttaaataggacttatcgggtcggaagtggaacttaataagcagtacacaattggg
+caacagacgtcttgcctattacaataggattacaatgcgttagatttcagacacgttcgt
+gtttggctattcgtcaattccctaaatagttagacgatcaactattatcaaagtgattct
+ttgttcatcctccattcatgtaacagatggcacactacgcataacgccgaggaattttaa
+cgagatttaagagagcagttcgggcacaacccacttgactttataacagctcggcagcat
+aaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgtacttagaaaact
+aagtggttcatgttcaacagatgtgacgcagcaagcctaacttatctattggttttgcta
+taaaagaacaaagttacacagaatcctaagggcttgtttcacacttatgcctagtgcttc
+accatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatgcgcagatattgg
+tgatggtgactccgggtatgataatggtaactgttgaccagcgcccacctcatcgaagta
+tagaaagtggttaggataaggatgagaccgaacttatttccggccataactttagatttt
+ctacctagtacacaacatcagggcggacacgaaaccgccatcacatcatataccaggttt
+aatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcaggcatatggccatt
+atatatggccccagagcagaatgctacagcagacaaaatttggatttatgtagtttaata
+cctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaagtgtaagttacaa
+ttattactactcagcagcttctgcaatgataaaatcttatcatacacgtcacatatgata
+atatctacttagggggaacgggctccacaacctacatagtactcaatacttacactattc
+gacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttgcagtactgcaga
+tcacagtaatagcttagttagcgagtcaaaattagttttctacgagactgcacgaccgtg
+caaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttgaagccacgtaaa
+ctgtacaaccttagagataagtctcaggctactaaaaacacgttgtggcactaacaggat
+catggttgattcttacttattcggctgaccggcccaataagtaaccttcaactagaacag
+aataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaactaacaagctct
+gtgtaaccaagttaaaatcgttttcttagcggattccctacttatggatttgagctcgtc
+cacaatattcgatacaagaagtttgtggtccgtaacaacgaaattttaattacgctgtgc
+agcctcatccaaggaattaatagaaggttgatggtaggctccgaacgctccatgattata
+atcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggtgttcgtttttgt
+tatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaacccatggttgat
+tttaggctaccttatttttaatttccgttacacagaaacgaattccacaactaacatgcc
+attaatttttcgatatcttataaaagatggtcgaaattcattcatttattttttttcggt
+tctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaaaagtggctttga
+tctcctacgtttggatactagtcaaccattactccatttgatccgtgagtatcacctgtc
+taacatccagcattatgactcctcggcgaagaaaagacacacttcttagagtcgatgtgt
+attagctagggacacagttgtttaatacgatagtgagcccagggagggcagtgcgtcccc
+cagtagatttattcagctagtgtaagtataagatatctcacccacgaggttcaagtgata
+tgcagtcttagaataatacttatcctgaatttcgatattatgggtacttcaataatccgc
+tagcgctactttatgtctcgttggacagcaggacacatggcagtcttaaacactaaagac
+atcacctgaatgaatgtaatgggattacaagaatcaatgaggtattatatacgacgtagg
+aaactctggatatatacagtaatctagttacgccatcgcacttcattcctctggaaactt
+agaagacatcagctgtacgtggaggaaccagacccccgtatgtagccaaatagaaccaaa
+gttgcttatacaaacacacccaatgacaatggaccgctggagttcgtaaactcggaacgt
+agtactgcacaaacccagcatttagcaataggagctacgtatgcaactcccacgtggtaa
+taccttcaagctatcaatatataggtgcctagctaatcgcattcgcaagcagtattcaag
+cttgtaaaccagtataataattacagaggctctatgaaacccaactttccagctaaaagt
+cccaattaaatggttatttc
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna.csharp-6.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna.csharp-6.cs
new file mode 100644
index 0000000000..19928012ba
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna.csharp-6.cs
@@ -0,0 +1,230 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+/* The Computer Language Benchmarks Game
+ http://benchmarksgame.alioth.debian.org/
+ *
+ * contributed by Jimmy Tang
+ *
+ * modified for use with xunit-performance
+ */
+
+using Microsoft.Xunit.Performance;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Threading;
+
+[assembly: OptimizeForBenchmarks]
+[assembly: MeasureInstructionsRetired]
+
+namespace BenchmarksGame
+{
+
+public static class Regexdna
+{
+
+#if DEBUG
+ const bool Verbose = true;
+ const int Iterations = 1;
+ const string InputFile = "regexdna-input25.txt";
+#else
+ const bool Verbose = false;
+ const int Iterations = 6;
+ const string InputFile = "regexdna-input25000.txt";
+#endif
+
+ static string FindInput(string s)
+ {
+ string CoreRoot = System.Environment.GetEnvironmentVariable("CORE_ROOT");
+
+ if (CoreRoot == null)
+ {
+ Console.WriteLine("This benchmark requries CORE_ROOT to be set");
+ return null;
+ }
+
+ string inputFile = s ?? InputFile;
+
+ // Normal testing -- input file will end up next to the assembly
+ // and CoreRoot points at the test overlay dir
+ string[] pathPartsNormal = new string[] {
+ CoreRoot, "..", "..", "JIT", "Performance",
+ "CodeQuality", "BenchmarksGame", "regexdna", "regexdna", inputFile
+ };
+
+ string inputPathNormal = Path.Combine(pathPartsNormal);
+
+ // Perf testing -- input file will end up next to the assembly
+ // and CoreRoot points at this directory
+ string[] pathPartsPerf = new string[] { CoreRoot, inputFile };
+
+ string inputPathPerf = Path.Combine(pathPartsPerf);
+
+ string inputPath = null;
+
+ if (File.Exists(inputPathNormal))
+ {
+ inputPath = inputPathNormal;
+ }
+ else if (File.Exists(inputPathPerf))
+ {
+ inputPath = inputPathPerf;
+ }
+
+ if (inputPath != null)
+ {
+ Console.WriteLine("Using input file {0}", inputPath);
+ }
+ else
+ {
+ Console.WriteLine("Unable to find input file {0}", inputFile);
+ }
+
+ return inputPath;
+ }
+
+ public static int Main(string[] args)
+ {
+ string inputFile = InputFile;
+ int iterations = Iterations;
+ bool verbose = Verbose;
+
+ for (int i = 0; i < args.Length; i++)
+ {
+ if (args[i] == "-v")
+ {
+ verbose = true;
+ }
+ else if (args[i] == "-q")
+ {
+ verbose = false;
+ }
+ else if (args[i] == "-i")
+ {
+ i++;
+
+ if (i < args.Length)
+ {
+ Int32.TryParse(args[i], out iterations);
+ }
+ }
+ else
+ {
+ inputFile = args[i];
+ }
+ }
+
+ string fullInputFile = FindInput(inputFile);
+
+ if (fullInputFile == null)
+ {
+ Console.WriteLine("unable to find input");
+ return -1;
+ }
+
+ if (iterations != Iterations)
+ {
+ Console.WriteLine("Running {0} iterations", iterations);
+ }
+
+ using (var r = File.OpenText(fullInputFile))
+ {
+ string sequence = r.ReadToEnd();
+
+ // Warmup
+
+ BenchInner(verbose, sequence);
+
+ Stopwatch sw = Stopwatch.StartNew();
+ for (int j = 0; j < iterations; j++)
+ {
+ BenchInner(verbose, sequence);
+ }
+ sw.Stop();
+
+ Console.WriteLine("regexdna [{0} iters]: {1}ms", iterations, sw.ElapsedMilliseconds);
+ }
+
+ return 100;
+ }
+
+ static void BenchInner(bool verbose, string sequence)
+ {
+ int initialLength = sequence.Length;
+
+ sequence = Regex.Replace(sequence, ">.*\n|\n", "");
+ int codeLength = sequence.Length;
+
+ string[] variants = {
+ "agggtaaa|tttaccct"
+ ,"[cgt]gggtaaa|tttaccc[acg]"
+ ,"a[act]ggtaaa|tttacc[agt]t"
+ ,"ag[act]gtaaa|tttac[agt]ct"
+ ,"agg[act]taaa|ttta[agt]cct"
+ ,"aggg[acg]aaa|ttt[cgt]ccct"
+ ,"agggt[cgt]aa|tt[acg]accct"
+ ,"agggta[cgt]a|t[acg]taccct"
+ ,"agggtaa[cgt]|[acg]ttaccct"
+ };
+
+ var flags = variants.Select((v, i) => {
+ var flag = new ManualResetEvent(false);
+ ThreadPool.QueueUserWorkItem(x => {
+ variants[i] += " " + Regex.Matches(sequence, v).Count;
+ flag.Set();
+ });
+ return flag;
+ });
+ WaitHandle.WaitAll(flags.ToArray());
+ if (verbose)
+ {
+ Console.WriteLine(string.Join("\n", variants));
+ }
+
+ var dict = new Dictionary<string, string> {
+ {"B", "(c|g|t)"}, {"D", "(a|g|t)"}, {"H", "(a|c|t)"}, {"K", "(g|t)"},
+ {"M", "(a|c)"}, {"N", "(a|c|g|t)"}, {"R", "(a|g)"}, {"S", "(c|g)"},
+ {"V", "(a|c|g)"}, {"W", "(a|t)"}, {"Y", "(c|t)"}
+ };
+
+ sequence = new Regex("[WYKMSRBDVHN]").Replace(sequence, m => dict[m.Value]);
+
+ if (verbose)
+ {
+ Console.WriteLine("\n{0}\n{1}\n{2}", initialLength, codeLength, sequence.Length);
+ }
+ }
+
+ [Benchmark]
+ public static void Bench()
+ {
+ string fullInputFile = FindInput(InputFile);
+
+ if (fullInputFile == null)
+ {
+ throw new Exception("unable to find input");
+ }
+
+ using (var r = File.OpenText(fullInputFile))
+ {
+ string sequence = r.ReadToEnd();
+
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ BenchInner(false, sequence);
+ }
+ }
+ }
+ }
+ }
+}
+
+}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCompareTo1.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna.csproj
index 93ba3ddb4a..e77f257b42 100644
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCompareTo1.csproj
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna.csproj
@@ -13,33 +13,41 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
<ItemGroup>
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
<ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimecompareto1.cs" />
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ <Compile Include="regexdna.csharp-6.cs" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
+ <Content Include="regexdna-input25.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="regexdna-input25000.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
</ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)benchmark\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)benchmark\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25.txt b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25.txt
new file mode 100644
index 0000000000..f749b06ea7
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25.txt
@@ -0,0 +1,9 @@
+>ONE Homo sapiens alu
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+>TWO IUB ambiguity codes
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
+tactDtDagcctatt
+>THREE Homo sapiens frequency
+gtttgtgttgcgttatagtctatttgtggacacagtatggtcaaatgacgtcttttgatc
+tgacggcgttaacaaagatactctgggcaacacacatacttctctcatgttgtttcttcg
+gacct
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25000.txt b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25000.txt
new file mode 100644
index 0000000000..fd4414b176
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp-input25000.txt
@@ -0,0 +1,4171 @@
+>ONE Homo sapiens alu
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATC
+>TWO IUB ambiguity codes
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
+tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa
+NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt
+cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga
+gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa
+HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca
+tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt
+tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt
+acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct
+tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt
+gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa
+accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt
+RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt
+tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag
+cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg
+ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat
+actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg
+YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa
+KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata
+aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa
+aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg
+gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc
+tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK
+tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt
+ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg
+ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa
+BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt
+aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc
+tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc
+cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac
+aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga
+tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga
+aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD
+gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg
+ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV
+taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa
+ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat
+gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg
+gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa
+tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt
+tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt
+taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca
+cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag
+aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt
+cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt
+ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW
+attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag
+ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa
+attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc
+tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta
+aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata
+cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc
+gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg
+attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca
+BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga
+DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat
+tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM
+tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR
+tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg
+taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc
+aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc
+DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa
+VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt
+agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat
+gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt
+tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt
+catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt
+tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR
+aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat
+aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac
+acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS
+tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga
+aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM
+acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt
+RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt
+RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta
+tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac
+gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt
+YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc
+ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt
+ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat
+gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta
+KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD
+aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg
+gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH
+taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact
+VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV
+NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa
+MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag
+cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata
+ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg
+tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN
+aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc
+actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg
+tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga
+gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa
+BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca
+aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata
+aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat
+YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt
+aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW
+cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata
+tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata
+tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt
+MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac
+taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta
+tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS
+RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc
+agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata
+NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa
+gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata
+aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt
+ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW
+cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt
+tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa
+RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt
+tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD
+gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc
+tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta
+ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM
+tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc
+ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc
+BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt
+gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga
+acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag
+gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc
+taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat
+acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta
+tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt
+catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa
+tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB
+atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR
+ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta
+ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta
+cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK
+SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW
+VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc
+BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct
+NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt
+tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa
+ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa
+cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa
+VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR
+atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac
+aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc
+tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac
+RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag
+gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc
+tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact
+attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc
+atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga
+cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt
+NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR
+ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat
+cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg
+aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac
+agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR
+tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga
+ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg
+ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa
+tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag
+taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg
+tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN
+YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt
+ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa
+tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat
+ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg
+attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt
+atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW
+YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta
+gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV
+MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta
+tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt
+ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa
+aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa
+BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM
+tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK
+StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV
+cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN
+atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg
+atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg
+ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct
+gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM
+tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD
+BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc
+agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga
+HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR
+tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt
+aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa
+catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB
+aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat
+tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt
+cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag
+DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat
+gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta
+tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM
+atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc
+KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt
+tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata
+tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK
+taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt
+NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa
+HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa
+ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg
+tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK
+cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga
+ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca
+HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg
+gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS
+BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg
+gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat
+KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact
+cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat
+tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD
+taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM
+gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt
+aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat
+acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta
+RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc
+attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac
+KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS
+KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD
+gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB
+aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct
+aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga
+ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY
+tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga
+aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta
+tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY
+MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc
+cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta
+caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt
+ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc
+acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat
+tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc
+gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa
+atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga
+aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat
+NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt
+taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa
+aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat
+ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca
+DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata
+tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat
+aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa
+ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM
+ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca
+RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa
+aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac
+aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt
+aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK
+tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat
+atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR
+BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc
+gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct
+cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN
+RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat
+taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt
+aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt
+gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct
+gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa
+aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta
+gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg
+ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat
+MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct
+SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY
+aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt
+VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat
+HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc
+agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt
+gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg
+agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg
+tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag
+gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga
+VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg
+tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV
+MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt
+actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa
+WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa
+tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD
+KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct
+BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac
+attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB
+VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD
+aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca
+tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat
+tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK
+tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt
+VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta
+tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat
+ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa
+tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg
+WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta
+tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc
+tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct
+MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat
+tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac
+atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg
+aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt
+aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa
+aatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtaga
+YctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVtt
+WtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBt
+ttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatg
+aDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtc
+ctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttD
+gaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtat
+NgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtD
+atttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKM
+tHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttattt
+aacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNa
+gtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttat
+gtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaag
+tYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaa
+aRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMaccc
+ttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRta
+tStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatN
+catacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgtt
+cttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatc
+aYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRag
+NtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacR
+ctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSgg
+RaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatH
+SaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVM
+RSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagc
+agaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcW
+gKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaacttt
+MctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattW
+aHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaN
+cttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgta
+ctgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHg
+accaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagat
+tgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtc
+acaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcat
+SVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaa
+tgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattg
+gatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtctt
+attDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNcc
+DtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDc
+aDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtac
+tggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttc
+ttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaR
+ctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMR
+tgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYa
+tagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttc
+attaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHta
+aggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgt
+cttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcag
+aMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttc
+VtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaa
+catYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctg
+taggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatatttta
+cVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBa
+DtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDga
+tgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctM
+acaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMta
+tgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStct
+YSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSc
+cKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtD
+actaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacV
+KgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVct
+WgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtc
+ScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRca
+aatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRtt
+aaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKtt
+agDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatM
+NYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccc
+taDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttat
+RtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNg
+aNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWH
+tWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagc
+aSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacM
+tRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgta
+aattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRV
+tccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHa
+DaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaata
+YaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagc
+tNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStga
+ccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccacta
+cgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtag
+atcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaat
+cttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBB
+aKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHac
+acRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaa
+tagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaa
+ccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYa
+gacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgat
+ttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcg
+aWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcat
+cagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaat
+MctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHg
+atctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDat
+taggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcg
+taDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVga
+ttaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgB
+cgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtata
+BaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBat
+tgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKt
+gBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacag
+gatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMa
+ataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBca
+aaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtt
+taaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDta
+atatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVt
+atattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSat
+aggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYta
+cYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttt
+tgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYc
+aHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNt
+acKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgt
+gatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKD
+gcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaa
+gMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgc
+MaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHa
+cMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagc
+agttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgt
+taaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRa
+ttttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaSc
+aatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRtttta
+VaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaa
+ccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatga
+tagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNa
+tcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggt
+gaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagat
+tYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcH
+DtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHa
+acttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWV
+aagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttg
+gataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcaca
+agagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMa
+aataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcB
+gttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaa
+ttgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMS
+gggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaR
+SataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttM
+tattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYt
+aNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRH
+MaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttc
+aggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaa
+ggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKt
+aNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYtt
+YaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHta
+aaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRY
+aMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBtt
+ctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaa
+atVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaa
+cVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMt
+attattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatY
+BtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatcc
+aagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataa
+agtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtact
+BtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVta
+agaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNtt
+KgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaM
+attaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattat
+BRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggat
+StattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWW
+atMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDa
+HggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggttt
+gHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWK
+gaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMactta
+caaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtg
+gattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMag
+aggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtca
+aKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcV
+HtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcS
+gRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaact
+ttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBcca
+taatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgta
+atatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacaca
+gtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagc
+YRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaa
+aacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatgg
+tDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStcta
+tttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtN
+HaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHttt
+gaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVt
+SttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcg
+HattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRac
+tctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNataca
+tttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWat
+caatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttN
+atWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNc
+ttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataM
+aaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaa
+acaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtc
+aagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNat
+ttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVg
+tVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaacca
+actMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagag
+cSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBc
+ttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaat
+tHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgH
+tgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataata
+YtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaD
+ggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcata
+aatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatg
+DtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaM
+tatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaa
+ctttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtSt
+atatatagtcttaaaaMtcatgttcaaDactgRttctaagagDtatttttagcgacttgt
+gRtgNctgSgRaaaaatgcaMtYtDcatcaaYKttHcatSWgaaaatDataggttatgBD
+MtgttataacaaYSgagttacgttatgtDStttaaatctcgWKtcSacgagagaSgttat
+BMDgtcggtgtgcgaNtaSHBatBtttVMgVcagaNatcaDDaKMtMYtatagaBccctc
+tDtgtatttatatKNtgggtatgtRaacttgaWaaYgcaHatccctggtttStatMtcgc
+MtaaaWKttMVtWctVtgttaKDWctgWaVttaDVatgKtagagtcatctaKWgtaaMtt
+SacBaMattaKaaHDataattgWtgttttgtcatBacacgtStacaaagtNctNtgtgat
+cHtWttcKaagagttttaaaaWacgRacatctNatVStgaatDHgttWcgtRKcatatat
+ctcaNttaaBDcctgaaaaaDtaYaHaKttNtaYVaVtttaDtctacttctWttaactaa
+ttttMagWcaatcccNKYtBaacatgttgaKgKcgcBHaatDMttatatcSWacatDatR
+cWaMtDgatBctHgScttaaaHtSgKtDtttattgtRStWgttccatatttcacWttcat
+attgtaHVgaBtacaMtgMaaagDaataactDatattagMaNBagcttcattcgtaaKtg
+tatttcacMtgBaVtaattStcttagtYgtgtcgccttKatgggtgaWaataggaatacM
+MagaSKRttBgatgacRtgMtagaSRataggtatcaccgaNaaaWSWacDgatacttgat
+tagcttgtgVMttatYctaRgHVcDtVRRtSaMtcaVtVtatcaYaHatattaaVaatct
+aBtgtacRatNtatttgaYatSaHctaNgNtYtYaYagattVgatcRtaacgYggtgtat
+KttaatMagatgRtatatgHaKccHaaaaYtgaacgaWaNgtYHgacagaYtctaVtacc
+cgatttttaaagcDttatNRgattKaaattttcatctaatgccgcaataataattgttat
+YtagtRNtaagttggtHaKttWMtDKgatSagBYcgRggtWaVaattHtatgtaaaMgSa
+aagataaKaaKgttDttttRaagaacaWRcaacDgtgttaatattaKtatcaWacacatt
+tVtctgatHRcagtttNcaaatcNctNttttataactWacBBttgBttaaaRaWtBKaaa
+cgtatcRcaMaatgYacaaaagtgBataStWYtggtatgacaKWtctSgcKHgtcNaMNc
+ataSatattgactacMcataattNVtDaRccaaatcagttttYttagYaacgtaatMtMV
+atNgKaaMaaBgattaKttatDaBcttKtccttttacDagaYtacHgttggacaaaVaat
+agtYatcataSgatcaaWVttcgaatgaccctccttNtaSBWaatttDttttcaatatYg
+gctatDcttatNctttagDcMttcaacWaaNattSYgctttcaHcRaattaataaaatcV
+ccRaattactctaMaVRattacagtgRcDtcgtgctcttNtWVtacagtHtatHaBDtcW
+ggtgctcaaRHtatgtDgacStgcaaaVKtagttataatactaatatgtagScaatRSac
+aattgtattgcagatHHtgBcaatKKtaaMMcaRcgactatKBaMaYatgKatttDaaNt
+RatattgtatWttagcaaaaacaWgcacaaHcataYtDaHgttataaSacgcagggggtY
+atgcKctaaaHgcVgctBDaVttccStagNgcSgtatgVYaMatcaWRBtVtgYttgtgR
+cYttcgctgaacNttgtgtctattWttttcctagMtagaWtaKgatStScatMaBtaSta
+SactattYNatctgtacRatYDaatgatgatatgaatYaaaaSHttaaYMaWtDcaNHaB
+caYtgVgcatVaacattMRatBtaatttaDacRtagtaaaNYVSMtcagaaDtttDHtRc
+YatacSNKaaMcHgatBaaVttactggBYgaYatttttgcDacHctWatcgtagagtact
+cattDggtcatKaSgctttatttagtDtRBacttaWYaaaattttgaccttaaWtaatgc
+RgccacttMtaggKtcBtgacgaHctttatcgtcStatMHDNagattatNagVaaaWcgg
+aaaYcaVactDYactaStattgBHtcYctgggtacatataaYcgaYagaggaggacaVat
+acHRtYtctgtaVgaYcNgaaaNatacVgcNgtaatttDcatttttcaacttSNcaaDat
+VYctSgcaccttagMgacgcttgaSttaaaatagttaggRHttaaacMatagcaWgMgag
+tcgctagtgtKgactaaHttattaWgcaaaaaaSatatgcgttaBNggttaYVatgaact
+ttttgccatataaataRatSaBctagttataBccgaaacaagatacttaattttgaHgHM
+gtaaKctttaYtaaRacBMtBaYgaBaaacaYtVtagcRgWatHaWagattWSacStMHa
+tttaDagacaatcgtgtKtttggaMtgtWtgtgcaaNaaaaWtKaaBcMWtcttctatga
+cVgagcgaggHaYYtttWgSaaYYaWtRYHHaMDtctttacaatggaaMctataagcttB
+cgHcNWaatttgtatatYtStatctagcactgtVttccagaaattaDtttaRtVataBtt
+WagcatDMVactYtgcatWtttgaaMggKaatgaaaaHtataDtgYcMggVaaatSMHtt
+tgVttaYaWaataRttgttaYttattttRtWtataaBgtDtttatatcVgaaBcaDtatg
+tcaDagaWtgaYtWctcVagctcagctatatagcRVtcaKtaataatHgNaccgaaaatV
+HBaatattcgttaVYttatttctBYaatKaagaccVStttcattgaMagSaaaaccccWK
+caaNtMYacctaDStagaaatttatcatVgtcaatacccKattgtaaagtggWgtatatV
+tagBcttDaBacaattWtDYKtatRKggStRtaaaWatBtaagtaattDaaaaBRacWta
+agtacaSttaaatccgctaaccKaattgVWttDattatttattKaMtcYtMRWagMtcgK
+gBagacgggVaaNaaatgctKcgtaataaKtaaagtccWcttHMatSYgataaatDttBa
+HccattgBttSgaaHYtaataaaMtgaagatgtttBgRcattaRaDHcttBgaMaWaaVM
+MattaatttgtgBRctattgKMagNcMtatttaaaWttgaaacatWgcScgYYDYgttYt
+VtattgcKcWtagcggtgBaSctaKatacaaVtcaRDccccgtgttBgKgggtHagcgaa
+ttaaagMMttScggtDttttaHcSaagaacactcacactBcVgaKNaDHacacttatSag
+aattSKHtcagtataaatKaaHtgaaRagaaVcBtaHtaaatcgatcWcaRtaaaattta
+WttaagtcaggRctgaWcttDttgactttaVSaaaatggtaWDaRMtBtaaaaaKatBga
+tMtctatatcaVaMgatttgNagtDRttDatcttttaMtYaaatcggagttctctaYatN
+tagaNcgMMactacHcaagtaaaatStaSaacaHcacSgggtNKatggaaagcggaaKgg
+gtaYtacSgccgBaggcRacgtVgDtggaMcYaaaMatggacgYStKKatgaBcaaRtSt
+ccSagcRccgccgcSDtgcggBDgaDtBtSSggacMttttaWcatcMatgtNMBWgataa
+tcaaVtgaataataaNatgcaaNttNctgacDMcaHccgatgKgWVttccaStggattct
+cDacttttttctttaaNcWaMWccWKWttgaaaMctDaaBactRtVattttBtcMaNttW
+cKacagttKSttaYaWSactHSaBtHgatgttacatgcatatMtttgtaacScWHBatHa
+ctggatatatctgagMgRSatctaaSttaVagcaRcttggaYaatKHtagBBactattcg
+taaagaagttgtVcgatgaVatHMtcaggtcgKSgWattgaaaVctccVgtDcaaatgaa
+HgMYactcaMatatatattNVttWtWaatttacRagKataaaNtttacaaWgMVactatt
+aSgaggVaaagVtaccDRHaaataRaHaRgcattMttcaatcaKaaataDcaDKtctcga
+ggBggacctDtttatHacWVaWgatDctaNaNcgKatcMtcMaatBtttggacgtgataa
+tagaaacRactcBtattttaKtgSaaggKtaggRaVtatagcccaNRttaccttSMaaga
+tcggDacNBatWcgaactacactaactNBtaStgVtNagcatctaVtaKatKgaBtcgtt
+tWaagWMgagRaNatHaaaaDtacagacaBagtgcaHaNatctcBccNttaagttDgaat
+aaNtcgctaacRBgtaatSttaatatgcataacccaSattKcccttDttggtcaatgggt
+tWaacgatacattBtgMaYgaRttatgatKaKgtattDtKWgataacgNBtaccgaKWat
+cttcttKtgtcttagcattcctWcaaHgagtatDMSgKtcagcttgVHaKcttDaataaa
+VaatttDgtgaaataaRgtcaVaatacttagtVatatgggcatgtDDtMtgtatBggatt
+HtgcVtgtgatcaaSattatKYVaacSNNttNWcgaHttKDaaMYHatcgttaattaStt
+gctWaacHtaKBtaaaaKHttcRWgaaWcRtBtttggBcDtgtacNttaagcKtaHgtag
+aaaaRttgaaacatagtWRaacYggtaaatcgctYaBtWDRtgttgSctaaKatNcattg
+tgtMttatccatatagctSacgccSNaaactacgNtgtgcttMatSKtcaaBaNaaacat
+aacagaaatagtagctcNcatcVgaagStaataVcDKKttcagDHDtattctaatgaggg
+RgBMctatacaagYactctMaaagtcgctttctcgtgaattatNcgatMtttaggcBaaa
+tctNtactaaRKtgKactattgtcatatgtacgagttMaaHSSgHgBatatcgcaSaata
+aaWgaagtatagaHgcttctttatgaccWaatttaRtaDaatttaatcgaaattgattMc
+atcaWaMtaWaKactttctBacactatNgtccttaWgtctgaccKatStaKtgagtacgg
+gcgcgtYNtatttagacctctKcatgatKWStcaataactaWgMSgHtgatctttttgtc
+gacgtSacttaYgcctWctcctctacaagVtttMaBactWVaccaYtgtSgcgttattcK
+tatStgaaKaccgNaataaHtatWtYtRacggcaDaScagcagHaYWRtRNcDtHtcVWt
+ggaataaaYttgVaNtgttagtYttgtagSaaatDgaggccDcgBRYStattatttaagg
+ccgHgggYRaaccMaagttatSttctttagcMtgcgMtgaSagaNaDagttSatgattWa
+tttagtDgcttgagtgMKaYWaYccagcaHatKctaKaDgctagacttattgattaaYtt
+atcttattattStaattWaRaYBWagYaatatgttRgScttgBagDaWgcgtgcVDaggc
+ttgtctaDRKacttgcaKBWRtaaVaSctKtacttMaaSVaWWcgSaNtttSWgtcggtc
+acttggVVtgagaataaataaDttgaaccaaaaMttaaaagaaaaaaaatcNBtatMgcc
+WagcaNgaVaNaaaaaaYaMgttaWtatHaagtNtacgacaBtMMattttWNaRtaaata
+gYaScKattacagctVKBtWNSKgYtYgtWatHaVatDaaatWgDatcctggSRagagta
+aaaMgatttRtaHacatggtaKagVcctgatgaMtaaYgatgtattattttHggBaccaD
+ctctggNNtYaatctVttgVtRtVcRacttNctttataggHSRtaRacaaattaacHaHg
+tgttgtttcBtBtatWtgtattttgcKagMcaaagaMtattagtStagcBacYaaHcagV
+gWtgtttcgtgDHaVtagDatcRaRtggtWtaactgcacgaggaaaRttSDaaVaSttaa
+aaacSMttactaNtcaacaattDtacttttYatVSacYtWtMttaattatcKtcttctat
+caKDtctStSaaacggtYccatgtgagagtWtagWKgcaBaaaaKttgNactaatcgagg
+cWtcDDaaaaaacactHattaattcactatYttaagacactaKaagRtRataaattttca
+tHggtaataaatgataHtggctaacBacDgtaatattRtYgtDNDBgKtcaggcHatttt
+gHNgWtaatttccgactactgacatVNttYYgactcgctctatttagaMcgggatHcgtt
+tatBaDSagBaaaagRttBggttaaBactVHgatgaatttattcaaaattgcacttcDga
+cttYcVttactVtttatBaKHagaWgtgaatggBtaaSggcagacNcttaDttVgMtWag
+attggVatttacHtctNcMatacttSatMagcttgtNcYaaScaYactcKctKtagScSt
+cagtttcatWaatggtgagaggHaggggcaacgcRKtaRcMaNtHaatRaRaaactVtBt
+gttaatRtWWcaaagKttccaaKaaatacgVttcacaaacgcggtgagaRaatggtgDMW
+atcWVScacaaaDaggaaHtgttSMaaaaaccYccDBtatYgtMagcSagaccaVcctcg
+gtVWaaagttatcNaagataataSaataaaKccgtaDtYttatYcttHttaagKcMctaa
+atggaatRgaaaVaaVtcKYaggatWcaBtDaggDatccttcYNtgcSMRgaRtNgaatc
+gttRttatDVMtagctttacatDVtatatatcagctaDagMtataccYgaggYaaatgDa
+aaatSgctctgatgtttVaaBcctgataKtagaaaccaKatatgttaDtgaDtatagata
+atacagtaDtatcNtgtDMtYcattRVtctataNtWttggNaSgtMgaaYctctDggHtg
+gHDccaccacKKaaacaaaatRatttccctttaagcRattMHctattHaRtataVattgg
+atcSttaaHaHgaaHNDtacattSaaggDatttcaaaYgctBcatattaaaKagtgccca
+tSctcgatRtaaaMtgWactttNMaWctYgRatDggaactcDcaattaKaactgagtatc
+tataagYaaaSRctggtacWtttccWtaYRtKHattatagWtKttaNgcDtatHacccat
+taatttataacgctMgaagtaacaacagMgtaYHYVtKMHtacMgKcaaatctgRYataN
+tcgttcaatacggWtMcaatYcBWaagYtVaDNagtatagDaaNtaaaYtttcYWttttS
+tgggataaMgatattagaaYtNctcttcBagactaYDcgtacHDWccKaHgttcttHgVg
+gVDttatcatKaMttttacWaaSattctatagaHaggKaDagBtaaagtcYccattgtYc
+atctaNgRgVtgaagtDKttatBKcggDtattRYgHccgtgcgBNMtttVRgacaYctSc
+taRacgtagagccgtacRaagtaHKagStSttttgYSatattaaaWHaaWagttDKaaNa
+NHaaHttaYcttMtcaaatgKttBtSgtccaaVaattSaacgttgNattgatatNctaWt
+VcagtactKcWacgVagggHaaRgaDaatcMttattaataacaBMaaVtgYtKgRgHact
+gtactatcBaMtVggtagKcYtHtBSaattagtaatgMcaVVagYYgWtactttccaaSt
+tDgaaMaMttcacttYtRgacttcagcttWtttagtgataMaattaagVtagaatatKat
+aagtagttaagHMRaDattaHaaVcctDtagtcVYcaataaYcNttNaaaHctcaRaatt
+tcaNRgatSHgVatagctRtcatgaBttMaaagRtcgHVtgRgStgatttgtagaKagaR
+WRctgNaHYgaaatBctgtttRttNWagaccgagKgtgcggHKVttaatattaatataat
+aDtaNcctacaaRgcaNMctctgaaSHWWHcttagtNagtWgWaaKtYaNgcBattatcc
+aaaSctRRHKaNtKcBgtgagaDRWBttactaaattSMctatatagaaYacDgatttccV
+taagRtgRataatatagtctttttatgtMgtcaacaaNtaaaaactctWtagaVaaaDta
+attatagtBStcgaatDtgattVaatMtcaDattVKWaagatagggttgtMRSgtcYgWM
+aatgNtagtcBttagtttctctWaaMtVgctWgSgtHagaSagactagKtagWggcattt
+HgttgacaaactcggggHggcWBgVgtatgggagVgagtcVcBtDctttagtctaagVWt
+HtgtttaScatacMBtKgattatRtgtttgtctttDggcHaBtRtgtaataNataattta
+taWctgaYWataStcHaatcRtaaVagDWaSatagtaccNDgaagtatacgttttacgac
+gKRtattgDctatRRattVtStaaactagatgVatttagaMaSaaaattVtatYtgttgt
+RMagtHaatttSttaaYNaggWagtgcacgaMcactgHgtgtgggHMgtKacttaaYgtc
+gcatcSatattgBaagtttacMtYagSatttatttaVtaaDtaWaHcgNatactgactHt
+ggWtataDcDScatactcStcDtgtcgtgtatgaggtHaaNKgDattgcBccaagKgtat
+gacKSMtttttgttcaaatcaaYtagtaSatgDaaaMccKNaMaatagaataagcaatta
+ttataaMgagtgaSgtctNYttattHaNaYYtcDDtaatNRgtatttaaYtaaatcactH
+VaHcStccttcccaaVatcVggatKtatgRaaDBgaYtttacttYggactSDtaBcaaNg
+gggtattatattBDcttagagYNMatBgttYaagactMatgttRgatacccgtaacacBH
+tatKacWgatRcHttaattYtKtStccaaatVDcaNKHHaaataatagtagtatcttgct
+NDggVaVVtaVaRaaagSaccgttctcMtVtgNBgtDtttctYgttactBctcRtStWtW
+DScMtcWSaRatgaataRHctaNtcStctYtWacagatgtatYBtHaHWBtacggtDcaa
+BtatcaggtcaVattaNctactgaaaatWaDgactNWtMtggagaattBaataYcMWYcg
+atMYatWtgattSatgaRtDaRgccagtSttatatRaBtattRcWtagtVgaagttMcta
+ttatatDttaggtctKtgtgtBagacgttatRKtgatctatttBtataactgataacKcg
+gagtgHgtVttcttgtKDgcDtaYatBDatcaatattgttNtaBacatcgcNcaKcaWcR
+ataWcVgtacgScaWgttcggHcMttcRccatgaRStYgNacagatacYacWWtggNaDc
+WagttHatMaNaatNtcDMDcMaKgHNatScVgatKWatatgNRgtccgYgaagattDHg
+tMtcHaSNaaattBatRagtaaatttacaagHWtKatcaagtccHtYcctgttKDMSgta
+ctactVctgacaaaaHgatatacataatKtStHgctScSatNatacaYttaaWHtctgaa
+tYtagtHtKaggccWBaStaDctaagagNtaatcaatcgttNgaYDaagtaaaaHataga
+atcgcgBaYaBgaacSaaWaaaaactccgcMttHttYgtaagaMctKBtacSagattcBa
+aWtaattttacRttatcgaRtacaRHgtgRagaaBcttaVgacVDgggaatVatagaact
+RRtacgYttNattVHgaHttacaaaaaaaYtcRWtgtgattatgccaSDtttatKWgaat
+atSNDgattttaacgtcSRtatggttcttcBtWtttMtBtMScttaHatBattHacYtaY
+acattcgttKgtcStSctcKtatatttcaKSgagcttccaacaccRDtttDaccattata
+tSgtcWtVaaagttgtagccattDtYaatattDaccatcVDaaRccagttttgtcHacMa
+ttcHgaNcatgttKcVttcctgtgcSataaatattgaKtctaWctMRaKggtaYcaagtt
+DttcgttacRtatgatggHNaWMtKttcatattaaDaSaBaaaMtMatBgKtttgHtHac
+taatcatcgtWaatKaaWcaWtcctVttaaNaggaaaagtaaagaDctNttaDBaBgata
+gMgaataacRcYggatcRaaaHaagatRDtVRactaYagttcaccaaWtctcSSaaatcS
+KattctggDgaacagDtaDagacagtgtaattcaStYttNaStgtaHgccttaScatMRc
+accWtcatttatRtaagatWtNataaWtMNtDVgWttgcWgtgaRttttRgWcttMtcta
+HacaaYtKctgaBagtRagacttDatNttaaaDgRtatNcHatcSDgtBatcttacVcYa
+cNgaattaacgagttgYgacttDattatacBattMgctagcctagatVcaactNttccta
+atgtDaacgYaNatagMatSWtYBaaaRtgMtatSRgaataYaScaVgtaScMagatNNt
+ttacaaHBaWtNtRtctaaacDaaaaWMcaNtcVaDNcagaDtgcWKYgagttaHtgcDY
+ataaacataBaWWtcggtatgtgaaScaacctttRNatcgttaaagcaDctaatgcBatt
+tacaattVaMgSMMtccYaaaBYtggattttcataWttgBtatDtBgactaatgtccWaa
+HataaScHttWttDtcgtcaagMctMDtaaaatRtBaaaacaatgtcagcatBgNNBVtt
+ttttcBacWtttWtSWWtgaaaaSacgBtaaataaagtcDStaagaactgttaatYatgD
+ctattactgaHtaaatStHaagacaKtagDtaaHaDgttccaaDtaaggacactctDggc
+gtDagtcWaHgRcHgDgaSctttattgtcttttccttRYaDgNactaaatcaWggcNSBa
+gttttatatStKgtcRtgattaaggtcaSBttaacaaKatgggatcaaattgRgcBagtN
+tcgDcatttWcctttgtNagDgctgcatttactttgtgtcaBgSatttNHaMcggcagSc
+tcKDtWBaagSagWatggYtVatSRgKagattgaVatKttcgatYatKYSgDaacNtcVg
+tttaWataWtgVctgcgSggMgatccatgagttgtWcatYWWcctVcNHagtNtgtKttt
+gatcaacttaSttattgatNcatWaVgNHcagStVHcggHacaaDttgDttWcaaRaKga
+aatKaattagtaWacattgaaatgtgaatgacagtgaRVtaaYagYtcggcatMttgaag
+gDgagDRcaKgHtacacaaaMcaBtagHactgKaatRtNttcttcatcatNgYgStggac
+tatgSMttgKtDaDgacRRgtWaVattgatttaagYctatatagactaagaggtatWtat
+aaactaYaHRctStgKWcgtRtKtYtYtagacgattRaaYBtaStcttaWataatcHtta
+taRcactgagtgggagccaattctcDtgDaggHcDRVaVVggaaBtRttaataaRRttgt
+aagKNcaVWWgtatacctgatcttBtcttRgaWcaVRKcagttSacttagcgtKtgtYWa
+tatcgNttcKaccacacVKctgattBtggacgtctgacaDtWKttattttgMBgKaacaD
+ataattWtBtBRtVtacataaatatttgtWtttatagtDtgcctagctHYaatgcaNaaR
+caatVtacctgggggKtagBgagaBgRaaNttttMtMagMtgtgattNctcNaKggWtMa
+tcttagWgtaatatatNctaYBggKaataBattYtaattataVtggNtcgtgtctaatta
+aacctHtacaaactDctDtctgatatgMtgataacWctgtgYSaaNScgDYaWtatDatM
+KgcaatttctgNcgtHtaWtagatatcYBttaattactcaaaVattYRWtatttDtaNMY
+MttgattataatgcgNggWaatYagttgBagNcaagaaaDtRgtaaaagctgcatctagc
+ttaVgtBttatagcKMSaattYtHcMaBttcagtcttgKatgVSVttKgttttttagtgt
+DHgNggtcaVtatttaacNtgaatatgctatMcatgaaaBtgBSaWctaataaattatYt
+tagtaDtaccggaatgagtaattggatttaacBtctSMgWYtgKgattacgRctctccaa
+tgtaggcctgaNaatScgYataaBBacaKtHtttcatgaaHtgBtagaKHVtacctVtca
+accaDaaWNHNaatgataattgatgWcagggtcMBtgSgRataHctMctgMHHtKaBtaa
+MtMgataaRWtagYtgaaMaSgctYtgcgaaHatDtatgtcWRatKatatYDcBgNtRaR
+acattMcagaHgaaagRccgcgWttggSatBagagcHgYtatctVtcatYaaVRtcaSac
+aMYDcgRtcaaWgaRgataMtaaaacaggtgtaaYcattgWgDHcWgttaVatttgcatc
+taatccacaaagaagSatgcgtagRgagtHDgaVcgtgcttatggMttttcatKSctNac
+HcctMaKRatttgatctaaatgHaaScataataatgtttgtgtHaVcaaaaNHaaaatcg
+ctgSVtattVttagaaNWcacagtgKtatgattHcYcttgDaWVataBatBttttWtaac
+tNaattttctttaaYHaMtttaaaccgStcHaVBaatcRacaaWactgtagVKtNRtcct
+agcWaatNgctKccttctcDaBDcatYHatatgcaataaBaagaatgDMttaHcaaYYtc
+actgttRtgacRaacctaWtBtBMagBctaaBaWtgatgVtttattataggttaattgta
+atYcaRtVctcttgcacSaaMaatactRSgcataKcagcaVNKttcgSatcaaactaatt
+DtaHtNaVtgttttttaWVtatNccagWttcgtatBcgttVctcBttaaaaMSaDattKR
+cctttcataHaattaatWaaataKcaHVaggaatataBYKHVtgVcVgtcHcttccgcct
+attDtMMgWaacttgWttYtttcMcgtcctaaVHtgWtggtgacKtcaWaYMttacttag
+VWtacgSatatcgWcKaaatHKaaaYttgtagtcaacWtttggtcaagttgaaBBaSHac
+VcgYgttWBSRWggtattttaYDtHatattcgatNttacaaaaVacaMccaaYStaataR
+ttVtcttagaVKaacaWcgccgtRatcatctaaatccMcctttaMggccHgYcDgaKcta
+tgMRYBagcaNDtgMtcRttgtgHaRttacatgaWcDtgctgtataggNggtgaatagBg
+agYNtatcagKtHcatBatgVKgaHWagattRDatatcgYcHagRtaatgWtcStagcVa
+tNaaaaKttgRaRBYNgtaaDtStaVRgcMccatMWaaattBDatttaatttataaHtag
+tVVaDRMKBtaacaatttttttDaRSgaaKDtVaBatcagtaaMttaagcctRgaNVggg
+ttcataatagNatcctacactacgcatgtcggaYgtaKcatggattgactttHtaattWN
+RaaWYggttcaaaggaaNtaatgcHcaaaattBtagcttattcaagVtatttWgcctaKt
+atBttDYcattagDacKVaYNccgYaYRaaMaattRaagaHtatgcttgcRagcgctSaa
+tagaaRacaRacSccagcacVMataatHgRtagcgaKgYRaDcVWSDVgRaMgcDgtaat
+tttaYttggtaaWcttKDaaYtatMRcgKccYcagtYcBgRccattcaKtgaSSRtactg
+acgHtgtaaaaBatWgcaMcBcYcgccagactcttcSatYattgatgaNccaaaaWaKat
+VgcaggtWtBcgttaRMagcaaagtgttcacatataaagaHWtKatctacttatatcacY
+RaaVagataagtaattttgatgtBctaataggtaRtaaHaattgtaRcStYSYaWRgMta
+caHcNSttVNScattNKaaKgBtagtgatYcaaaStactggttggggaBggtNtgtcaaW
+BaYVSNgtaataBNtagtatatcacMcScccVcgtVRRtttNcKaSRNaNtHRttattta
+ttgacaatggSaBagataaccgttcctaDNaattgctVtatNtHtatagSccaagctKtt
+aaacaaattattgtSHgMWgStttNaccattBMYatRtccStNgttgaaBcctVagcaaa
+atgatattcRaBccMWaagKtttttcMtgaRYNaataDttgttWRttattggHtNtataa
+tggttgtStYgaMcYVtcattaggtaatVcaNggaRtNataMWcctcYgcgagagRgcHM
+gcWtgaYtVSttgDaacgaaaatMttYWtWttcctgaKNttatttattRaattaagaccM
+KtttcWgtcaBagKSaWaaacaNtaYaDtBNaaagWtHgacaaagtgVtcatKcgcaatV
+aactatgcgaaactccNctatatMgactatttatSaaVttNttRttagHtccKtHtaaaN
+atttYVctaatttaaaatHWaNtSacgaaaHggaaatcacagVYcctaattcMNtgtYtg
+agttatttaBtcRgBHNacBtactctagaacgcKaaDWYYgcattactVagaYtgaVVcg
+caNctttBagKRcSgaaatttgtatccattgtggHcaatRtaVtaSaBtcYYcatcgtgt
+cHaVttaHattctgtcaBSNYaKBBattaatggctgtHatattgtBacDcBgatttaaaN
+tggaaaaYtNcaKagRRtRgttRtMtWgggatcNtacacctgtWKagatataaYVMtaaD
+taaacctctgtgtgccttScacWaggaYacttttKacgtttgtgataKYagaYaVatcWc
+SattaMcatBYttYaaatgStKagWattKtttaWgtagaaSgtRattcSaDagVaMatta
+ttYaagccSgcNaaDgaaSaggtaNgtWactaWcgHctgaNatttttcaatgtaMHSWaR
+tggtaNtaHBtttWWaaatattcVtBtctStWtaWMaBcatttcDagttDtttatatgtt
+WBtNaYatcccSgtgagcgaRYtBtagaDacBtaagaataWactaaaagKtaKaWaataa
+cKcccgDtagccaaagcggaatcgctSRtacKgcactacccHaactMgtgccaBaRaaaB
+VtcgSacRKtttStgatcaaHgKtaaKaccHaccacccKttgagcttcSttttKKcgacB
+gggtYMaatcBStcgDBtMcataWtaWaMtgaataagaaDatccSYDtgBatgactBaVt
+aagatctcNMgtcaWKtgcWggcgatacgtgtttatttWaDaNWBNaaNtNttcaaatag
+taatScgHtMWttgttgaBaDtgNatSaagtttHttaNaNKaattKatttgatcgtVcat
+gaatatBtttctaacKaNttVttSagccatRtatatcactcHHatctWSKttaMacaaDa
+ttccaRaYttttagttaatattcctYaacVactgctMcgagcaMYtttgaagctagtKgN
+WttgaaaMatcaMcttcSVatcaatgtNactaaBagatagagtDMgtNtNWatttSaHac
+tagaaaDggtaaaaNctMaatagtaHgacgMaaacMtacatHtaSagaHatYDccagtBt
+gaWatcYtVaagataattgatcgacctgcaacgttttattacNMWNcattataDVDacta
+tattatYattttgcgaagtgagYVtagYaWaHaatctgWttttatgcHaacgttaccDaK
+tatagaccaDDttaacgtHBaacatccgtYaBtVtNccaaataaaatVactDttSKtcMt
+DSgaagctaMtatattgattactgtNaagNBcagHaDattaaaWttacacaaatactcaa
+tSDatagctcaDttWactttgaStaaDtagatSaaDtgtaatKtgVataggaagWSaaaa
+KatttaaagtttgcgtaaagcccggNWaacatacatgttctaRcaHttVtcattatctag
+ttttNcataaacDttWaagVtNYtaggctttggtatgagaWgtactNaVatcactVttBK
+cttaaccttcMtatcggtaataYaMaYggttgtcaaagSWHctaRMSatVcggactMata
+tccgaatcttttttcgagtccagtttgaMtcgcatcaaKagtattRMaaaKDBttDNcca
+tttttaaBNtVtccgtaatgaKgtcagMVSattatttaWaattttaHNcaaMaHttgtgg
+ctattctacDtgaagattatcgacaaVRHttcSaSaatactNHWaaNcgtWaWgaccgRS
+ttNtHtcttcKatYatatBaagtcgctBtgagccatatScctKaagaaKDaWactWagBg
+ctgattBagKtgaaataBaaaaagSacScaaagagtagcgaDaYtaMcaYcKtaataMat
+ttttaactttgYgtcgaaggacgcHctBcgYgaaVacRYagagBaaYgtagattgcgagt
+caagtStDagatBgtgaccctaSWtctDgactaSHttctWatWttctaWtatctYacact
+gBWatKKctgtatYgacaaHSatYSaNgSagtatagatgagtatttatgaccMaatgtaH
+tStaWttgYagccaWattcagtBaYtaaNaBtaNatactggcttWcaagatDctacggaN
+ctatcacatSgKgattgacgacccccgagtNDtattgagaaatattaatcVttNKtaaWt
+YacgSNcBHgttgWtatgtttcgccaactKaattaRgacgNataatctacaacKgttBat
+YatNMSaaaNtctKgacttatgcttatKtcaVtVcagDaataattYgNtRtHaagcaata
+HcacaVgtaNNHtHDatgttaMNtggWagSVaRttcMVDtcttWgtRttctacKaaVttc
+VcgcatcctHRKtattSgttSacgaagtcccRDVaacBWagtgYtKtgattgSgaBtgcc
+BtcaKacaDatacttHatcattNatttacgtcagtgaggcBtaRNaRcaSgcatattatS
+tatgctYcacgtattcattaaRtgStcttWgtattKtSYttNaHaRtNYcRaYtVtggtD
+cKcttctactaMcacggcMtacgcttctatatHtaatggcattMDtaaMaKattgaagtB
+aaKMVMNacKaDtttKNcgagctaaagtccMMtgagaagVaataatggcaWaaaaVaBgt
+aSaVgaaaSaaaataDttVtBccaNagcSBgaMaDaVaVYYRVBgttYMtagtaactDta
+agWaattBtattttMDYHtSaStScRaKatattacacctMttgNBKtcRtRggNagtYMa
+ttaaatMctYgaatgcKHagSggaaaaBcaggtHtatWcatcgtStagMcctcatgatta
+WRcStcgWtgRgttttcctaacatcgctcgDDtRaatatMgtcMtHtMaDYatgDattta
+tagctKDtYHaaaaattaSatatctggtctttattttatMtgtYttgtcatactcaaVcY
+BgatgSctKtYcctWaRaataWcMgNgcgggagtcttRMgactataHaHtgctNtVaatc
+aaccacgSRaDtgKtaaMSKgtaaaaWaKtttVagSDtaaaaaatgttYattttNagMHa
+aRtNgBttWattatatgcttatatcatttatKtKaaaagctRaaatcgcYgacgNtacNt
+ccVtSaaatttcDVctaatacWgcaMtcttSaaWaaaWagtagtaattaactagRttaVc
+SaaatataacHgHatWaattggaagtgcgSSgaaVtgYgSttccatWVataatcgaatat
+gHtRcgtBttcttaaggatatgttgtBcNtaatgtcacVatactgaaatMBttRRcRatc
+catagagggacatcgccWttagttgWttatKagtaaaagHtttccttSatVatKtgagca
+atttattaaYVattcaaattctgSattRaMtgaatMgttattattacaNcggVagcctta
+aKgccYcaaDattWtggMcttMacWttccMVgtgaattctDaBYgacttKYtBacatgct
+DcRaaKaaRaatatctttagKcKtaactttaatNaaggctgScacctYgcgcaaaccaHt
+tVHcBaDgtaatHaHVaaatMgttggtSatHtNNaaVagtgtacaataaagacgKttcaa
+aWVacagctcacWHaatcctgtBNWtaNMKcVcVSWtSgcaattctgKtVVaaacaRaat
+tgatRcgBacaKacVccVMactagcgMNaaactgataDaSgagaatVHaatVSVtccgga
+tgRgtagRatttgtaactaBataVaggcaagHgaaSMSaKgctRagcStNcatttVgcta
+tacttcNDtcaKBDcaHtDcaatagttHttattMBgagctgtaaagtMgatStStcagat
+atYcBtataacRcaggRaaaggtaWSatKgatatgagcgtgMYatcagcatVttSgaaaa
+aatatatgttYttcattatacataatVcacgattataDggttBtRaagtHMtatagaDgN
+ttggDaKctBcaaRcgattcgtgccttacaaaWattYWVcaaWagDattgaaagggaaga
+HattBtatVggtaHtWtaMagtccagaKttSatatcaStDtgWaagtKWaggtatttaWa
+aRcattaatStgaaVtacggaacatKctacatHtaaaBtcNWatttBBaNatRcDattcg
+aactataaattataactcagtSgatataagRaYaKHctggtaaNtttaaNgaRHtttatt
+atacNttttaDccttYgtaaacaggaagtgataaacatBgaSgtaaaaaaVcBgtWNtRM
+ttBttaaBgtaaaatatcHNStaBtaggtaVatYaccNtBaWagRctNSacRtMatDact
+StVctaaDtaYSRgttaRNttttKggccagaaBcatagtYcaYNtDatcgtatVcaatWR
+taggaattMcatRtgggatgtcMggMtttataagtaBgtggacNaaKYtgctWgagYtWc
+ctWtVcttaaactaRacatggtRcatctSDcHcMgcaactttttagttaccttattHRgt
+acggcactDBggtMHcVaaRatKctSHacctacaccactaaHaacgSttagKtKttttgN
+HVgagtaYaMtVYNVcggttaSBaBtaatttSRcgtBgaWaatctttttKggacaWKaat
+tKSaccttgDRgtcatatDatVMtMaVcgaattaNaagMWccctaaHgataatatgtatt
+WataaaatBaaMtgRttcHctaagctaagatatattMcggactaRttttKaSttactWYt
+gBcaMMacRRgNtactttaaaSKtttcaYBaBttaVagtRtHcWaggaVccttNgtgagt
+catataWttYScMtWgVRgattWtaSggacggWWctBHatattataaKaagttactaMRa
+aataSRaDttDaaatataVHaatggaaBDgWgHtcKStVcatHtaatcatggBWaagHta
+gtMtgHcHtcatggggWcatacaHNHagcDatRcaaattcgcttgDggDNVcaacgSgtg
+gcaccttMttaatattVYtVgaagRttaBcagVaYaHcaRDBagatgaVHtNMtcttact
+DaggMgMaattRWDcctVtgagaaaaSKatHHttVDgtctgtcacatHNttgaatSaagt
+KBatatagacaaRVctcWtgtacKtaacHtgHataSgVtactaggtttatggBgtcaaaY
+aDgaaaaaatcgMtagaKaYatgaattatYcttKtacaatttgWttMaatBgaatSttMt
+NaVgVtScgcttctBHKgtaRcNBaatcDtacgattgacgtgctatNaaBtMgagNgKct
+tWcWKacactYgttVgNcgaattttcttgaaaaactacccctcgcNtgMctatcccacMc
+actcMatttatttagtagaacMNtttcttgYKaWtaaBtttcWttagHtgtttctcttgt
+ggctatgDgctaatWDataatttagaNcgcRRNataKtctaataHgaaMYctNaKWtact
+aacDtgaVcgagaactggtaccaactHgaggctagagHHagtMgKtaaactacaggMatg
+tYgSBaKaaaattMgatRtggggtHBVgttaattgKttaaRDacgMactcaaacStaaag
+ctctgtgccttcgtSagtSaRctacaataKatattctaVgtgtaattRacKagttattga
+MtaatgaNatacDataaggactttccNtStatatKaagaataKtatggtcctctatgagg
+ttaaDtgtattgataaaactggatcactKBtttggcgtcaaagaaaNtagtWKatctaaW
+BactDaBaYtacaWtaSgcaattattWgaaBgactgaKctatBRgtagttaBaRRgattt
+aagBHctStgtVYRtaaataaagtMWtcHgcattcacaaMWtcMccWttgVgcHaWttca
+NtgtVaggNgcVatKttataaWDcccctatgatVttttattacagRBBWttcttRaWgaa
+tBVgcgtHgWgaccagtYacaattgSttaaMcVtDatttaVttRgttKtcaYWatKtaaD
+tttWaYtaatYctSctatagtcctBtccMaMMtaMYHaSSgKaaacttctcBtMtgDtgt
+ttttagRcgtacttataHgKtNtMtKcBtaNKaHStgSagYHtataDtcKtagRtNWaac
+VgctVtRtttStNtgaaccttaVatgagaaggtcaKSttaDataagcYaSatNStcaatD
+NgttcgacaatttaSgaRaBNNacattRatNtgSttHVtgWHgtSHccaactKttYtatH
+YttVtgHcNgactMcaacttBatatgSgattttacgtatttgtggtScaacggYtHtgca
+tctatttttWtaSatcagaYatcgcagtgtgtMgtattctttcattaRatttStcaatat
+gcttDtStaaagaccDcVtaWNcHYtWMaMcgaacKcaNcttacctaBtgcDacatcaHK
+tRcDaaacataaRacNNtccDataNactttatBSDYatDtctBtaBatctDatKaMcatt
+MatatcDHctaagRgYVcatgttcgtgataHDYaagttSgHYctaaatgtaaaactNgta
+gaaactaattRaatcttttBKcgaatSctMaggVaVaaatgagataaataSgttKgtcat
+KaKatDYtaaaRttYaMtgctcSatRtagttttagcaaNtaKgatcgWYcacDgaatcaa
+tactgBgaNtaactaaWatatacaatacactaNatcaVaKaaMaaaaaatcaccBtgttg
+NctaacaBattttaaKWcaggataWMtaattgtaaHtgVtcgaHtScaHtctcHacVata
+gtaMcaaKtcccSagMYtWcaaatHHtaagRttDagtMtcYtttaaWWaaaVaRtcHNtc
+tcSttagcacaKttgtagtNgWYtatKDtcatttgaacctcKHtatccttattcttNggt
+BgtgtKaggWtYgtStgtVaRtaRaaagtagtgtcgcKtKagatgagYtttaatKcScct
+gaaaaaRaaHtttttaaaVgtatagKctaNtKaSVgttcgagacattttRSatagttSac
+ataMtaYHccacttttctatactagtatgaBaagctttaMtgaatgtcaKYtaaatatgg
+attataNcgBHatcctaRaaactgttgacttYaHtStcatcctDaMBttgtaWgagtaat
+WKataaaBgBattcttttctttaatWStaatacgNaagtWaMaaNgactMtgaaDaggaa
+aSctaSSgatatDttattatcatagBcaataVcHcRgcStaHaaatWagatHttMHacta
+RacttaYaaaaNtataHKVaataKtatgatcgtcVaaWgttYtVcaaYggctRWttaaKt
+RttDaKtgtatcaattWKaatBHaaaaNgaatggStHgVVgatMgBYtaRNgBDttMcNt
+ggaNgtcaHtgttDcNaggBtatYtacVaNttctcWtactHYcSctgtYtDtgWaatcHg
+atDatatcHtcttatattaaKaRYaDgaatgSYcgactgcRgaagttagtStYatYtttc
+cgacactacagKcaaagDttaatVatcttaaacRaDatRcBatKNtNtaaaHtcBgatKH
+cWStSRaKaSMgtaKaBacWgDDttgYaaYttaNtDgHtatSaSataaaaMBaaDtaMat
+DaagWtggaMtRcacttatggctNataaaaatatWNMtacctatgtcaYKaRacagttHD
+agccgtaaYcaatataatcatagggaaSatgMYBcKBBtaaRVRatRtccVtgtgaagVN
+ttcttagtgtcWataVggtaaNaatVgVaKctttNgtttagtaaagBatBtgaYSagHtt
+SYaacaStcgcagaSttcDBtKtttggtctacNttgNgKNNtcaaaaKWactgaaYgaYa
+ctatHtaWcaactgttSatNVtgtctSttYctgattVaatKgtaYcaaattSgttaStat
+ggtccaatgSWccaaactattgccgttacgcNatcHctctcaKatgtagtctattttaag
+gHRatcDaagSaVgaVNccaBKtacgtttStagKgtctaHtcattaYcctaVKtttaYaa
+atYtccgataaaVttcDgatWcgBtcctaatttNaattgctDYgtgatcaatttaagggc
+tctcatcKattgBtaBagcaYcKctctttNtaacHacNStggRtMatHHgtacatgcaMa
+gtgtccatRWttRKctaaaDtcMctttaNVgaNtcMatcacHcctgWtaaStcacgtctN
+aagRNNaagMaDtactDgctttttcatcYacttaKttatgcStDaStNaMgDtaacKtMt
+acctaaWattggtttNaaVHatgaaattaattacgVNaaWtggaWatctgVatcacYctc
+VHMtVaNacNtcccaWtttgcaacctcWctHaatcttWcaaaYaBaattSctYatctaag
+DgBttagtaSgaWtBcRcKtccYatatcKBgtctttatgaaHDcgNaMatggatgtWagR
+ctStagagaagaacagctWtNtataaaataRatHatKgctNactHgttRgRgVcRacatg
+HYaNttaHtattaNStaagatgtagaHcVctcYgggccYcaaaatgatcttctagctctH
+MaMMgcaVtgHgtaagaWHHtggtaactBcaMNNctagaacggWtctttgaggHcYNaaM
+HtaYcttKaagtSccgttgggNMStatacDttataaaVaYcKtcgcattttcgacctctc
+acVttNtttattgtcttctaVcatagaattMttgtHtMgacataaatagttctMtgtWgW
+ctttcaagYgcgtNaagcaaDaVHaaStMtaaagccccgtgVgtcacatcHVaDtgttBt
+BacBtcggYttDagaDYtccMttagcttacNcgaagatRtDataRtgctaatatatgRtW
+VttatWKtgcBgactcgagaSgtaaaaagttaaWaaagtatttctcWtatcBtcataacN
+cgctcRKaaDKactRaNtagtatBtgaaatttcgcDactttaNtYgagagaNttgaatta
+ataaaSMattRHNtYtgttgaDBRBttgWttagSatgacDggNVagRWcggctacDaYSg
+aaattHgtYaaagctccVtatacattaMctttgSgacatBKaattRgtaBRtttaactat
+tctagcMKMtttctgtgtgVgtctttcDcgtaaMtaggtaaaDtcaYtatccgattcYtg
+aaRttctKaNctaYgYaattYgRttWctWttaaaccaatcactVatgcgYttgaaatgat
+KBcNRgctcatgaccHagcgaaaatgtVgccatcaBSatKccRStSattaaatttggtaa
+gcVattctgVcattMtacatMgaaaaaataYNDtDaatcatWattcaggNcaccctcBtg
+cKcHagYtatBatgBttgtVttaYBgBgataaHNtacRtcaaBaKcagNtcagaatYgtt
+WgggaNDagtatagRtctcDtDaHScagttcYcatcSYacHcagagNgtgcHagtacagc
+tgRtatatMtaatRaWMHgaaKacaBRtagHtaaaNcVHcatWBgWaaacWccggtaaRc
+attgMgttaNgttVMVttgcaagagaatcaaaaaagYScKVtgccgacHgacgttcaMcc
+tcattatgcBttttaagtKatDactccgBatHYgttcatcgaaatctSaKaagaatWVtc
+gttgtcttaMaaYaSDtaaaataccgcKMtatgKtgScaaDMaaaactgtgagcVtttaR
+cttgtaNMatatatttggtMgYVatDaatttgctttaaRtaBgttaYaaagKtataMtWS
+tcHaaaaNacgctacMttDDgactacaNaatBcagtcattatatSttaVgRtWgSggcaa
+tSataVgSYgctBttataaYRRgaactgtgHtgacHWSactYNgtttBactatWStaNtc
+StcMttgattStacctgaattctWatNaaHgMatattcaaaKWaBaataatHKgaWgata
+YcaWMBtgtacKagaaaaagaattttWttDaMtggttgtgaNMtVtDcaacNttactatt
+acggKctatttaaaaBKatagttHaatggaatatYWgtaVtNaaYgataatMaccWagag
+atRttMtgKaMcgatattaacaagatgttBBcNaYattcNgtRttgaBcctaagaSMttc
+MtcctcYattcaNaRBttaatgVcMNgaacKagatcgNctaWVgttaaYRtgctSctaaa
+aNtttgctaaScttcVattaHtaaMacNgttNtKHMcctattttaRtttVtSgtacatBg
+tVaaSSaMVaRBcaSaRHtaWtWHttMtattVcaMtWaaaNaccccgHYtcatagaaRta
+aBaatttaBccaatcRctcatagWgcBHRtacaaDttcBgaHggcgctaHtgacagcSNa
+ttcctcgagaccBggtcaagWctgVcRDgVtaagtttaattatcMtgatNagYttHtYta
+gccRatagDtaatcNtaKtacaMSgDaaaatttgHaHtRDgtaattKtaMHgaBcaWtBN
+YaWgtttStttaSttgataatgactMKatHBtttaVcYatgggttttaDKcSatttMata
+tcagtYaBtgVacaatHcaDMcccgtaataatagDataatVaaagaagaVtctccgaRgt
+RtaatcgagtcacttgttSatgNDHaSNRcggtaSaagcSaBgWSgcatcaaWatgttac
+atgattcWacMtagtgNcacgatgatttttRcWttSgtaatMRRBaacNWRHaaBaattD
+aagStgatccttcaDacccctKaagScSSHaaYHWcHcaWcaaaMBataattgDtagccW
+tcRHataMNKtMgHaBcatcgaagtgtaRgtgggaVMatgttaWRtStBHactaaRaact
+NctcHaaaggcatgcVHKHgaatcSccttggSaWatWtNcaaBctaRagaaacacgcttc
+KatRattcWtgYDaaaaaaNatWtKgaacgtNttactgWHBaccaWacggttcaaVgaga
+aacVtMttatagaagtatWtaaaNHYaMacagWagtaatttgcatcttcgaatacggaHt
+aatVattctaDaHtRKRaNHcttacatcDKttMDKaWggDtaatcttYctcWtRaaaaKt
+aatcctgccccatgcgDtctaaVMtWRKKDctaatatDgactagWtaaaBcKcacMactM
+HHttgDataKHDaDttHttatttagtcaaVatccKWtacWtSVcaggtaatatDSatgcc
+tKtatDtttagacKaaaagcgtttaaSaaaYtgattgtKtgBMcKttgDaaaagttBRat
+HgcaKgDgtgcWataatMWgcVaVatcYgWttaDatcatNaVgtttgggcttgaHRDaWg
+atttctgMHgtVtgccttBtWtaatcgttcgKgRcaBaRMtaattWgctaatMaVBccaH
+tDagaBNaataRcacYcYcHcatBgaNtgaNgKHttctYaacaaaYgBttRNtNggaagc
+WtDggattgagtHaWttVacaaaBtgttaNctaatactKaMaaaaaDtaRatttDaaagN
+ttcYcaaactcMgaYgtacaaatMaaatYtcacVaacgaaDagatWgBgaataggtWtKa
+aMtgDttHtgagttaatttgVaaDagttNMataatttaSVattNaDtKVccaaatcgaYV
+taaaacKRaataatgaBDtctRtgVcttatttYtgaHgttBWatgaatatacSaacctSa
+tNNRccagtactKagaRtgSKMcgaaDattttagtHcKcaaagtggtataaaggctccta
+SatHtaMtRKattaNRcWtccgctataKggatWttaggtaatHDRatttattRWgcgatc
+ttagSgtcttactatgYgttYaVBtgcaYaaRtDaatacHHtDcttHgBgNcccataDta
+aaaatctNtacatatWaRMBgaattaaaacgctctctcaagtKcacNacgVRVcttttta
+acttgctcStatRScaRaMataNaKagtatcattRttNaVatcKgtacNatttttgaNcg
+acaaKctHWtgaKStacMaBatgWttNSacaaKcaDaatcWaKaccgYBggMScgaMcct
+agcaDatgtttcVatgtRBtKNWHtcctWDtatttttNNSaatattcMttgatKgNgaNB
+atcSggtctRcttttttatatggtNttDYNYgaaaKctcacacYHRgttacatacttYac
+aataNaagaaaagttataNaataSatacagttScacVaScaccSWtccagKHtaatcaaa
+tVacatWacgBctccaataHaaYtMtacKacHttttKtcataWWtgtgaatWaataaaaa
+catttcaccttaHtttgttccaatcccgRBaWgatKgagtttBaVgaNtaNVBgcaataa
+gaatagcaKRttgtatcaattaMtaacatataDBgtaaNttcaNcgagatYactggttat
+gtNVtaBNtDaaDtDttaSaWtactaVtHactttNttcttcatWttcDatKaacgtttgg
+VDaDtVagttatgtcagactKaatcaYtSgttttataaataDttKttKagacWgHgatat
+aaatcttagatNKtttWtWaaatattacSHaRgtttScttaatWttacgRRaaMactcat
+BacaccatRtttgaacctacttcDMggcVaSBagaatcttaKMagcaVtctDVataWtSg
+atagacttBctDtBNWgtgKatWctYgaaStccgVaaaDattYatagtatcaacBaWYct
+gaaatttaKVgYtStNtcaVggtggaNYgaRtMaacataSttcagacVactcaVaagtgg
+tattaaDBNDaagtatatMtactatatgatRSgtttgccaacgcacRMtacRYNataaga
+tcMgttgatcataaacttVcatatgWtacaaaWttggaaactttaScataactRattMtD
+acVYataaaagMaattttKtgaBttKcaacatattVtagtcatgactcgDaacDtaWcta
+tRttSSYNtgWaScaaataagaaatKtagacataatggNaatttcSKtVWtgacagKWat
+tcgVatttcKWgagcaWgNKaaaatatgtaaacgttcactaaWgacaccBNaacagaaSt
+ctgctaHcVtttMtcYttStagYcgtttBcRtaYacttgNaacMtDRtagcatgtgcgag
+cScaMgtaatBaKataactMttttattaRcattattatacgtaagSNatVRgcttcgaVa
+acHNtctaHBKYgKaccYcttagagcccaVgatttgttagactaaacgtgcaBgccaWga
+VataggattDBWaattttgtBacWtttttaatDtMgaactaagcVtctcagBMKatgatt
+gaNaVttggatDaSaBatttcgccatatgctaattgYacatgatccacaaMHtttcKYKa
+WtYcgDtNaaDccgNaNcacacHKttDtttaggctagRVtYgtaactagctttcacaaat
+YtHaattYacaattaMSagMactcctcatgtScttcaaYtataaaaScHYaKcaYacact
+VcacataNtaBcaRatgYagVBatttgtaactttgRggacaagcVacctattacRcaaMa
+cHRagagtaVNctacagtgagacgaaaggKttacattgggacaataKNtattcaagWKtt
+gatNagNtgctaNgagatNacSatctNatttatctatRgaaaatKatNKSBcKactatac
+StcagtaggtVtcaaaBYYgctattKtWNttcRacaaaNatgaacttaRtaaDSttVBYt
+aatccagtNaaacRttagaaccRBatataWaatKctcattcSacWaacaacactDttVtt
+gacYaagagtaSgcMttBttaVNgRVagKDcttcttcNtaggttgcgacYacttaaggVH
+caagDagaagataaVaatctgtatRatDtKaaSDgattcaattYtcatgYgtgaVMtMaa
+ctaagaatgRgDtHttaaccaatStaaaaMctVDDtgttatcttaBBgccNacKMaHggc
+BMttctgNctHggagaataYMgtaMccaataattHttYttKggtKaccaactcccHtMSa
+atNactcRtttcatgcKcatgcacttcatSaatatactttVtaYttDattgWcctcactc
+YccattaDDaHaaKcaatSttagKtWtcatRcaactattaattYaDggKtagtNcgSgtt
+tKRgtDWtVHtDNcHWNtKtccgtctagtatSctaBcacgcaBtaacatgagatVtttaa
+ggcaVttBttaStWtattgYaggtSatBMBDactVtggttDagacataaactactBgcac
+aacMaagaStccaWNaaSYMYtgtaKaMcYSaHaaaatatttMgtcaaDScaKtcaBVta
+MVMRRDMtcttRBgWctaacttgaacNaatgttWgtggBtRttHVKgKcHVtatattSaa
+aatBttcBtttcDgHccBagtRBRttaVagBctRcaagcattacKccaWVWtaVcggtta
+tNaSgccgKtYcBaagcWgcatgaNHaKtagNgcHcgtgtcataaaatagagacttgHYa
+tattctaBgtttatRatctatttagacattttNtWaaSagtaHatRtctcggatttatgt
+gatBtctRggggcatWctaSVMaRtcatgKattgRcatMaHaataNcBcDcaggcactat
+tHBgaatStatattcatBgMVataaSacVacKHatggttaaBKtgtaSaWMattttMacK
+tgaaWaaWgctgRatgtgDacBtSaHtDgtgtMVttagatgattagagaSttgattgtSa
+aacagHaaatacaRcaccBtaaDtcaMtKaaStttatKagaataaNcaaBtattKaVNaW
+aNactagtYattaaagWgHttaMcKaSagatSactctatMSagtggaYctcacKKgaSMg
+cRgKtgccagNMataatccaVgatcttHagttttcttaaccataggggcttaDtYatcga
+aaMataagcaaatBttgHHcHagacagagaggcacWtacccMttacgtgNttattYctVa
+aactgttaagtKatMagttcacaaagggatgaVNMatgcaSattatcKagtHaBtgaagB
+cggagtWttVaaDaccMScactgVatccaRaSatattNtgcBatgBaaNgtcaBMgggaa
+tgagtatRgaatgtNttacaggcttaHaataaHSagatagtgVctattaaagggaagDWV
+ccatcKaaaatRccccaSVaaatttMtatStgtWagtStMaaatBctgcctKWgttDDaS
+KactctaaVRtaSWcVactggaaaaNMaaaccgcacNtaVgaagcttDNgaDBtaMaMKN
+tKccaVtgctcttMMYaaaaHaattcWgHcgtacatWaMaaKtaataccgBDaYRaggat
+atSKcScYagMtaatKHMtaaccatgHgtagDaggtgtaaatatagaKVgccRYctcRaK
+BKWtgatHYcaHgBaYtttMcatataatgaDttcatttaStgtcVSgacggtggVgtBtg
+acatgtaaSgtBgatKtKtaYcatVtNattataaaHaSccHaaagctSMKattcatagca
+cagtgBRataacaatMttKcWaaaaatagStcggRttaattatWaataatMaYagatgVt
+atccttttHaScgtBgagWcatgBtgcctatcgtaaWHacagtactgaattaaaaaNatt
+RNMaSSNSctattcaaagccVVcatattttagMcgtattNtVBactacScattgKVtata
+aKtttgNaWcttNacctagtgaNaaDcagtaWgKggaaKtacgcaaaYttatacSttgYa
+YttcDNagggttVDagHatSgtacYVatataVattataSataacgKgatVtVacHYRWtt
+atcctaaDtgtaaDgRDttttattWtaaDttggatcattNgtVaaaVggaaggcYgSWaa
+attcWHcgaSaVWaMatctMDtHBgttttaatctaWaagatatDKtVttaccgaMatRaa
+aBttaNagHatDHWcDtBVttaatKtMataYttSRHHcgtaHDtggttccaaagRRtaWt
+VctRcaNDttatacgatMcaatNHtacgaattBaatHtcccatctctccBtgtataYcta
+tgtcgaaDYWtNggatNcacRtMaatNtKcttSYSctaDaaaggctDaStatKtataBgc
+VaatttggYcttaaatgatgtHctaaccaactttgggttcMaaDattatKtVacgVcSca
+actSataSccHttYctttgtggcDtMcactaNSBtMRBMaggttWKtattaatgtKHact
+tcaMVatctgttgtccaaYNtaagttKaacttctHcgcWtYttatMBgBaMacaattaDa
+actNaaatSatcVtSSgatctatgNatSYaattRatgcDgtctataagagaagRgatatt
+tcccaataHgttttWKtgaagNRtctaaBtWcHHcDgaattgaaaKtgttaaRtatgtaM
+aggDttcMaccaMaattDctgYctaWtStaNtgRKaBtNcMHcSttMtaKccYacgNNct
+ttatStgVtaYtaagttaagaBHaaStVKHatgttRVWtataMtSatgcaattcMcttat
+KgMcagtgaatcYtcctNaYcttactttctcttcatggcgNcatScStBtagctWtHaaW
+attaccgtctcgtBMcaaacKctcccaacttBgtWStVttMRgKcVagHttVtaagMaNa
+tcaHttacatcYKttDBtatgSattVcgBcBVYttHNtcatKgcYgaaSaKtatttttMt
+ctatctaSaattDttcWagHSacgttagYgacWaSaDKatcNgctaatgVSctgctYgaK
+gKtaataggtggagcgtcgaaaaRYtgYWYSaatacBgacWtaNStcaattWtRctttta
+aSYgttcNgtBWWgtgaatHttttBaMcMtKccagtattttcgaHaDtSVgatgaacatg
+cacgtcagagDYattBcagDctcttNcNtaaaatRctgMcDacaagtttagtcaaSSaag
+aaacatacaDtctctYgcaaacBcaagaBatgtattgacgagYacBDgttcgtgRtaMga
+attttcNtgVcttctgtctagtgtccatatctgatYatNtatVWgttacaDacaHDDagW
+tgataWtatcaaBRatDRtMgVcgaaattcSMagYgWacgggtaacaaattcagcatagS
+gttactBctgSVWatYcYgcBWgggRcHtataSaattBcagHgcgcctttKcttWaggct
+ttaaDtRacBactaaVaaKtaaacctcgcgccattactKactKSDcgacaVtatatagga
+taKctcgSatgHSatVcgtagtgaBtSYtgaBataatStaaccaagttcaDtHtatatta
+acYatattatcctacgagatcaccgtVSttctYgtcataaVactcgWtaVatttgttgga
+ctaaaVcaSaDtYcgNtYtctVaMtaattatWRtWcaNtaKcaaYggatgNgaatcaatc
+RtcgagtHcgVgttataHDcatttaagttctHtcgMRHtaaagaVactBMtatgaagtaa
+aaaBNtataaNttcKcctaNttaaDtcgMacgDcaMatttgYtaaNtcaccgatgagMtg
+ttaggWcacHttNgtcttHYMcaattKcagttcNcaaaacgNaaSattgKttaaBaKtta
+tttaMggHcttttaaRNVgttaYttttMVRtYVgRatKcgVtacgaatttccBatBgYBR
+tSKKctaaaatgatatgBtcttcgtttgacHagtaattatatctgDtBttatgaDtatKt
+cKRcRttagattattagHgDNaaaKgcgMtHtttKtDtgaaaagtaMatcagaaccgaat
+KgtatatVaccRaKYtDHtcSagtBgtgccWaaaggtYKcaHatDDaaattDStDtcKgg
+tMgcMtgtHtcaaVcgtttNtagtNtgKgctaDcScgBcWSatgtatagcKgWgttgaac
+gagtgcgcgtKaaaacgRtttccatatatttttMgaKagcVcVRataccWctctcgBcga
+ggcgttaatgaHYtttHtaSWtagcagtttKtYaacaaataMtaNDatRgMBaBacSaat
+aSDctgaactattgataaRtaVtttHatWaacWtVaHaaBDtactYtaDactttSgtKtR
+attgatttatatattattataattBatagattctaacDcRMaaggttcgtcatattRVYc
+ttKgtRcgWaatcgaaWWatDctacaaaagaattHaatctgttttacYatKatBaccMaM
+aaVtcacStaaYgYKgtttctcattatattNgSaaHtgRaBtcataKYtHtacttgtaca
+aaDtYtgatagNRcYatgaStaaagactgtcWDtYaatVaNStagaaaWtaaaataDYtc
+aMatSVBVaaaYagaaaattgtgcDagWSaStattttaatNcacgataNBtaattggaat
+gcMgacattHaattctctaaMatactaBaaattacaHWgBNtNaaSattttaacHtgtag
+tBtcRtttSaNNaYaMaDtatDtagaKggYgcaaSttgctactDcNRtWgtttaVtggca
+aactattgSgaagtattatgDgcgtgtcttagcNtRctKggtMaHgaDaaagtactgtcg
+atttagatcagNggtaattaKaatgaaYaaHaattggttVaaMggatactctaBgtYHMc
+ttccVcaaWtgttHHRgagttKaaagaBtaRtaaWaggttctatRatSgtatcYtaWcat
+gtaBtcaatctaatRgaYYtWtccattataBacttWtcctaHaaaaggttgacgtRattK
+gaagcattSBtttctaNcSctSStNtYtWaWtgtagtcttgtctttaagNKgaagacgDa
+RgtNaBaVDgaattggaYtaccSVYKctSKKcatagttgSttatcStactcaatSMataH
+caKgatWVYtNacagtttBtRagYHaagtaNaaVVDgatattMaagattagcatcctaMa
+aMctgNtMcSaRcgctHMttaattDtttYttcgataaagtMtaagttaWaaDcaatccKg
+tgMMcatBgtRtaHBcttgtBaBggcaDcgaWttgggtaDaggtgatRtYaMWDttatcN
+tVcttRaKagctRgtgcNaatctgattatagattagtatatgaataDNatcYaggKRaca
+atcaHcaagttagtKgRatRgttaagaaaatacVctaaaagtgtaagKVgcttSWaaHat
+agHctagtDgDtSaVtgatcatttaNKgKHataKBctatatWaNgtttgcRaVNttaDgt
+cttagHYKatYaVaBtaatgaBattaYcNtgcaBtHaacttVtccatDagVaaaYgWtND
+BgacagVgctcaRtaHaaacttttacaaggaSRaaatagaagaatacccVaHatcBRtct
+tttaaDMHWtHgacMtctcaagKDttctgYctctcNagaMgcgaaDWatMcMatatttDc
+tttactaVSctagttcaRKWgtttKRaVaaKtacaacaKttatttttggcctataaDgtc
+BctBDgcYYaatNactcaaRgaRWcgattgVNcWaatctgKagDMgctatKttRatcatt
+MaagtctaRaVaattKctgaKtatccgaaRatcHMaaaaaagattccacgtacgaDStat
+atctcataggtacgcgatgtgaaggtHYtatWagKVKgaMDcaatttWccttgKgagtct
+agatgaatgVRcctaMttgtaRaaYtRtaacWgaaaMttatcatNcgttactaaggtDaa
+ggcagtRctcatcaatggYagccagcgaatatagtgttWtaccaRctagatttDtaaatR
+cDKtccHtBWgttctWaagccYBSgtggaaagHNttHtctaaattaBatggaDMgaBgat
+atcaatactcMtaaKtcYccgatDaYgHDBaagBattWattgatttttaagaRaaggatg
+gYggaKttaKtBVBcttaWcttBtacctYaNYttgctgtBaaMtWtcWaagtaaggWcgM
+DaaNtccWMWtatcMVgaSaRctaKtBgKWDacDgaaaaNgttcaaaaataMcttaWtat
+gNaVaaRataWtgKctRatataagtgttgacgaKgaNgtaHattaaRagSgattctatgt
+YtcaattagBYBatccYtgtNacHagHtacVcVacaacaccgNgBtataYaatWHSttat
+tgctDacttgtgHgHcMcHacagctRSDtgattaggaDHtYagatggagWtaMatcRccc
+acRaaaYagcagatgatacatatttVBBcaaMtctctaWgaNtttcctaVcttaYBDBct
+RgSaagcNgatttcacgtcRDaVBttaRaggtaaggHcacttccgDBKgagaatttataa
+aMaRattagcVgtttacaaagagaaaMtgDtttYttggcttataKaStacaVttBttctt
+gBcVaataaagagtgagBgcgNcNattgaaacRcactDaaccaatWMtaaHtBgaaacaa
+ccctcMctcaaatctMWttggttttacttagcRtttacatRtccBttVcatgaaBacaYg
+agHttatWDtcctSatRtYggHtNMttRgNtgcatcacgacagaHgtYaSaactgaaNWV
+agtagttagaNgatctgcatWYaDacataHtaWttaatHaDgactYgttcaSVtttacct
+aatttaDgRcagacaDtgcYVttaagaSSKBYtgHtDtNtcgtcWttDtgtcNtgacKag
+cactccDMacDNcccctWataRKcaaatttctRVaacagcaMtataaattWBctttgKgV
+catttaVgtDgtatHtgtaSctagtatagcBtBtgtatgtcgcMcgagttctacgaaBgW
+ccgaWatgcaRtWtaagYttaNtcWaHtgattYDatWRgRWagtRcHggNatNttWaaac
+aSgcaatMatgacNgggaSatgatttcBHcctaaggWactacagaaaagctMcaaagaYt
+HVgtaaHKgKattVaWtttcctaWgaKattatgMaattBgaaagtgaSaaaWtSNBtttY
+ataVgNatgaSgcBaaccatattcctctagRtattatctttctMtgaRtctcYgaatDtR
+cHgcRVtWtaacDtcacYatRcttNgcgaDtVctWtacHtatatgtatKaaggtaNcata
+KRaataacacDctcctWgtSaWcatcDgatatBtaatHSNBtcaataaStHtacttaYaD
+aMtaagMtgNaaaaNccccgYWHaatgcBcttaBcgtMBKggccaVgacaWgaaaaaVYc
+RKctMgcaccWctcSacttcVtacgaagtYtcctttttaYgttattaataactSttRggt
+cVgagWRStatKataYcaatNMtacttcgcttVBaYRaKttaaYatacagctBgagcttc
+HcaatBaaaVcgctcacaMgttaHaggctaDtSgatattggggBgRMagtaattggattg
+YYHtVtcttSRYaacttataBtNKgatVaWSDWacatVcttgttgaagScaDaSttcact
+aattagatKttaMcHtMgKccaYatKataMcKNgattgtYtaaRHHcaWagctgtgcYat
+MHaatRDgtgttYctatNKtSDtaKgcBttgagtKtacatgaaggcgMatDaWtcBatag
+taaaatNYtSVgVatttcaNgRtaRaaNBttggaatVgaaaaagaaggtgNtttVBgcct
+tgtgaBtgMgtaaacBgtactWgtaacctatatggaSYattYtVgtttaagccaRtatRM
+cgWMgDVSNgataatBRccNagagStHttBgctaBagatattaacaagaggttttcDaRa
+gtcDgtHttcataagaacaKBttaBgactaRatgaaDYHttgVagcMcBDgYactWgSga
+cBataMMcttSaRHgcagKcgaaYaDgttcataYKcttcMWttattaaBacDcttDtttB
+catVggttVHtgtMgKcgaaVgtcgMaaHHYBMaHtaaKaDttaNgNtttttaggMcWtt
+NaaaDaaaaactRgaatagSVHtaataagttStccaatcHataatacMcattHtacaatt
+tctgatggacatatgcaaacaKBatgcagacagVcctccgcaacNatcMaHtcMtaSctg
+taYgtStcBtcatDacRggttRgagaaHatVcttYWgaDtatgYcaBKgtSWVYtttctW
+ttHtctaYttttaBtcataaNgtBRaNcgttKgtgVKgggVtWatcWagttSttttttaM
+aRWtccgttttattaHatttBVtataSctRWtgcMacaattaStBcacggaatRatactV
+gaagMaaagWacaMgctaacaHctHtaatacacgaYagtcttKagcDttaKBHccgtaHa
+acaKVtcMKcaataaaNaggttSaatcatgaNaaBtacggBcaagatcRgttttHaNgtK
+ctYatBHHtaaaDNHtaVtVagttVacKtcYgcattcatacaaagtaacKaKKtaaNtNa
+taaNaaSaBtagaattctgacacNtaHtataBDttBctataatagYSctgtaHcgccgaM
+BaggttaMHtKgttactaaHaacgDatataaagcaWtgaMtttgVatcKaattcgHVNat
+NgDaaYtataHacaaacaagagtatatDStgcNgcRtaaWVVaDStNgtcaaacgDttaa
+ggNttWcaVNaccctgaaaMcagVYVaMtBgtatacSacgSgNtaaaDtRaBSaWcNacg
+YaggtcaYtattagVStaccgatgSStMattctWtattHtHaDtatgYaatattgtttta
+NggttVatcttRcgaNtHaVaStgaagactcacaaatcactgataaKBtNHtttctWWta
+ttgactacNtaWatataaaBaatBttgggtatYtttYtgttttVttgagtcVaMVgaatN
+taaNgKMaacgtaatattKWggcagtgRttgtgacactaaYacactggaaKaWYRgcatg
+cgttctBcttggtVaaWgtttHagtcaatctcggaNWtaatBNcaMVKStaNcMtgatat
+aatDYMctttcgcatgcYtHtVNgStggagcBtggMgccctgtgNtVatactgcctcHca
+taDBtaStgNcagaYttaMtcaYtgtagatDaagaHaaaRcRataattcaDtcaDgttgt
+atRaaaaYaRgtttDBgDcgaagcNttgcVttcacttaMgtMWaYaattcggaDcgaVtY
+attaBYaaaattaHVttttWaacDttaRaSWactcBgaRctacaVStBaaatRgaacMSa
+agaatagYtNctcaatagctNttaVtgctgtttgYcttaatgtgMaStactgDBagVSgg
+tSKMYttDatgtMaaSaVtccSRMgaaaactHaatWWtcatttctDgcMcggVtgtRtca
+tctttNatcaatatYaKaaaatKWtDDDaaactaagtacRHtcKttacaataggttWctt
+ataSaYctgctVtaaVggatcctaHVttgWtgHtWttaDHaNgaccctatatgcWtNtta
+cctaYtttDWtttaggHNgccatattacKggattVatatcRcggRWMtgcaVRaaHgtaa
+taattttaggtctcDccaatatgSaaaagatDtaaVtYgNaHBtcaYttaaaaacagata
+taaagttaaaDWccMHMattggtaaagtccgaKtatDKaVHaBagaBatactataVttDt
+tDaMagctctaaDSggtttgaDacacVatcttNtgatKtVaBStatgNtgDKYcaatcat
+aWtcNatYccgRtcgBHacaBaatagaVtagcttgaKagcgHtttDNtgaagMttStttt
+gDDKRWtagtaBgtgagtgBcaDtWtaHcctatHatttgttWgagcggDtgtRDRcaaat
+agcacacRtDgtgVaWtaattRacVataBWacSYWVctgYtWDaVtaKataaacttKaaa
+MVHaaaaKNtaaacttgVataaaatMaaatMaagtatcaaRtatSYRtBtaataattgtt
+tgaWtaNNtctcaatNaataaaaaaattgaaaattattgtgttaaYatccccHtaNcatt
+cacttttaMgVDtaDMtcaWSgYWcSYtSgaatHtgctagaVattaBtaaaYgatattcg
+aaBtgaaDacacatRaagcgggagggDMtatDttaatttggaKSNtactRMttactgtBg
+gcgtcatNttctattaVacgttccKtVttMacttWtctaYcacgtaVtaaRgKcttggat
+SYatattttgttacaaMgtgagagaSatattWcagDttggNtNaaYtaggaaKtYHcttg
+KattWagNgtaagHHVatYatcattaaaaaYtHgttcaaaataattatBgcaKWKtagaa
+tagtatBagaaMtattMagaMtHcWgYcacgttagtgtDNggctatNatRcYYHtaacMa
+SStattRagRcgataaaatWNNatgaaatttVtKcRtKtDtaaMcctccaDRcaHtBSWc
+YtaKttcacaaMaataaMaactccgSgtYattDtaWctagatBtaatSgatgatHKgttg
+caaaaagaScHtgaaHRDatSagatcBcggcatcatYVaatgMaatStgNgWaaaaMttg
+cYaaagttSHaYgaaatHattBgtaaMRagSaSacBaagtttttcatgttaaYcagYtgK
+tYctaStcaagcgtaVattaNatWtHgtHKNDtcNaKaVaStSacaaStttagaaataat
+gcDSatgtaKtgMMtcaaagtNattacMYgtgctNgVcaaNcDtaaaVtYggtaaaactg
+caagaWNcaaacctDSaaSgVaKtctcatataMtggBtaRttKtagRcctgttaHgWRaa
+ttgDaaatttHtaccagctcagaccKaaBctaagtatWtaVagBgtttatgaHaaggatt
+StaactWacKDVtMHccgtacaMWYctDtagatttRctaccRagtWcWgaaaaMcagttc
+tgacSctaaaactgaatcacaNcaMWtWccYgtttNaatttggttaaNtggttSattttc
+aacgYVccMtcgaactBtatcYttcYDVMttcgattaKWtatttagcaatatcagWatgc
+RVaatgRtacWaVVBttggatRtaNgRagttDYataacDVBcaaactttgtttgaccata
+gHMtRctaWcgacagtgcVcaaVgRgtaagtRaaaattSBKacBaatcagaatgtHattc
+aVRtatVSSaKatNataWRVaaagMaacataDgataWHatcNYcMtatttggaSatttcH
+cgacaYcaKaaatattacHcSaBVatHacactaMDataaaggcacaacaSacctgtaaRg
+tcccaaaatWtDtagtcaagNtttgatDacDgcagaDcWgatDaaKagctDWtttatatW
+gDcaaaWttStDtKtatSagVgaaKtaacgaccgMgaSaatRRcagYtgttNDggcHSca
+aYDWtcaacgtaHgaStKtgMtRtaatccagtDaaacHgtacaaccHtagataNaattat
+cVtgaKaaNaaaaaaaagttgMgtcRaNaacagtaKcaBgtttgaMDgDMacttattatg
+aDgagcgtcacaaRaagtYaggMtaaactagaacagVaMWataggtatHagtttaaHtca
+gtaaatgRgcatgRctgaMttBaaataagWVtcHctgtgtYaaaaVtKtaSaaBatMttt
+gttatattattcaaBYctBWtggatBtgaggDagtgcacVataRBctaBaaaataatttt
+tNggtccgtVaaaaataaattBHaatBaagaHgttaagcctaatcaaatgaYtKaatYta
+aggtMgaRggtWgggNactaacgaRaaattSttWtaataaVtHgtacttNtaagHaSacg
+WggaYggNStcctgacgDcgHggtttHggtNtMtttDatNDgtgacgtatacgatKatat
+aaacaattSaaagcagatKtttSagcaaMttttgaKtMtagtcRacctKSttBttaatMt
+gcgttacaaagaVaataattcaSaaWcBVacYKtacaNBaaKRtRtcgWtWBaRKVtYWW
+WgattgBctaaatKaattaYtMtSBMBHDtBtaggDtcNctWYagtgSaaBaVtcttNgt
+cgttHtgtMtctatKtatVggKaSaagtttattttatgtactactHtHttSMactatHca
+agaattVataaaMKNtaMccgtgatDaHcaacttRataacaNgaatcSBtatgacBcctc
+gggtaatWaaWtacacaattctRVgattctatgtgtatHagatagggacVaattttDtNa
+WKagtatatHtagacgaggtatgtcagtgagHccccaatNataKMBaHtcWgctagtgHa
+atBatSataDatatcacccaagattttcSatKgatWtgaagtcBMataaHaaMaattatg
+cttWWtttcgVKYNBattggtacttcaaMaVNcctcHatcgctVcttKatgtctctBMgg
+acatcaggacSgaKttgagtctKVYaaagtaaSgaaaHaWactgRattaaBttVaHtgga
+ttagRWtaaDaaatgatttSMBWMaDactScgRYtgaVagNctgtSBataKacStHRatc
+tVgBKaggccaRctaacttcYKtcaDcttgaaacBBataatacYMgWgctgtacttttat
+gaSaaatYcccgattattRStccaaaBagaacaaaVtttgcttatagaaacacScccSaN
+taaaaBgtaaggcDgtSttRatMYSWatcgtaacgtStBagttaVaaaScccSggaMDBS
+gcaaKaggatatacgtatgcWactccgVctNttMaYtaaatKaaatgKStaaaHaKatat
+gBtcctatgtVaBggaatBcgcaatgagtatHcYagctDgtWaaccagtatWWtaRtKag
+atagtgKatatgaaaggcaWgtNKaaagataWaatHaaaaaKMaaatttBtatHtctNac
+tKtBVVagtatcacgtMgtgttaKtaatcgaaMHtYKNcMaatgcaSaaDBaaaaagaWa
+DtWMgaacatttDcatttaBaBtDttaaSMtcagcttttRWWaataattcNctactWaat
+NaBaattaagaaacttYRHaccatatKtaKcNVgttYagttBtaaaaVtctcgVctagct
+cgSVatatagVtMcaaHRctaHStttNtcattRaatgtaRtgttaatYtaagcattgaat
+ttaKtctaKKgaaggtcgMctttcWaagcgWaKcttcYttgtgaRaagMtDatgWgYaat
+aKaatSWScatKBtYgtaagagaVcacgctHStaacaSgBtgtaNRYaaWtWcKgaccDt
+gaWtgagMaYgVVgBaRacYtcKgatcagttgtaKcgttgagNaStctggaatVtactaS
+NtaaagtaatcaattaaVaaDattHDBaHKDHctVggcaaacccKMaatVtgttacBcct
+StgBgMtScgaaHcatgctMtStaVttttcDaNagtDVaatYcggaDaYtaactaNgtcc
+aattSacaaaaRgtagaaKgtcRSNtgatBacccttMtactatKgtaaRMagataMatgV
+tVKagaRagtcagMgMaatRHNttagaagaatgggaatcHtttttSgtNgYatgtgcYta
+atgDctMaaaMccVScgcRgKNaaagtaMtacaKaMNaBatagBttttcttttYatataN
+aWcagatttgMtgaaacaBYtHaaatgtaDactatttNatttKttSattgBatSRtgKHt
+tacgattgcggtaaaaacHHtaNgMcgHaVDtgtagaagatBaaagDttaacSatttaat
+ttaccagatataattggVgaRctRtcgccVatRNtDgcagBcVaHtBaatDttatgKRKa
+gataaRgcagtaKgagttatatcaMSagttccRcttaaatgatcttataaacaaatttcc
+cttaBaWtagtagttMaacMaKaaaagHatYKactttRatgtctcgattBcSagaDKttt
+HtBaccttNttVttVVtggttacgtaaBMRgatcgtctacaaNBtaVggttYaaggattc
+caNgRgtagBtgtaBacaagtataaatBaaatKRtaMtKHgatcgYggDSgKRaSttHSt
+catgtatatWacacRacHcatYtttaacYatatgtgttNtgcSagDHgataYttNattat
+cVattcaaYttggtaRHtWtcgaBacgtttaBaccaBaatgtcgcNagaNtKtaDtgDta
+tgDaBtcKgtBgatacNaccDDatttYtKggMtYNtaactgVacattaaHgMttatcgtH
+MNtataBtKSgccaVttaBcttattcBaagtgaWtaRtcctDVRatgaattgatatgaWg
+ccacDaatKaHtttacatNttaWNWgtacaggctacttBaYaaatatacaaaatttcgNH
+gMgttHctcKYcttgMtaacBaDVtaatttacagaRttttttagcKagtKactatMRtgt
+DtaattccRcaaKSttagttttBtctatagaKaVttttgcNagtKVccttagRgWaNaKW
+ttataDgcgaatgMKatgatRcYtctgVagaccgcgVgactagaWaaHNtcRNRKaatac
+tcYaNtSDKtcVVggNgDagtttaaKRgttaDcgtNNgtcaYttggtttYtatgtaaagg
+attttagatattKMcatgYaaatcaVactcagagtRYtgtaactatagtBaDtVaWatDa
+tctataaaSgggtactaYaKKWagaaaaataaattatagRcaaaVataVagatatgtagg
+cWagacRWattctgacgcDtaBcYattgtaDggMatgagcgagaggctaaatVtctcagR
+agDtSgKNcgtVcStacatttagNtgatSNgatcYVtHattHtBgMacRaattaHBacRc
+NaaccctVaaYaattcVccatacKcttSagtctgKMNagRaNcatNgcgHattStSKYRg
+gtcagtcaccattttagtMaccctggVattHaatVagaaMaattaVacatacacaaatta
+attacgtKtagaaaMgatWgWccatYtagacKatctKatMcggYcgcatgHRtcStVtaa
+tHgSaaaVagtgaatgtgYtattaYcRagatgatcataacacSgaYaactMKttatRcga
+ataaMSatacNgaMatttcggccacgaYYMcaKattRagDtRtatMVBtaattWtMHgNa
+WDgStaaSNggStcBcVYtaYagaHtacagttccMcgtYtYttcattgSWcttagttcgt
+HtgVRYgaMacttBtatcaactaaaaVtDgataaDgtatcatYDttaStgccBacctaaB
+agttgRtaSBtaaaagWgcacBggttagcMaYatttBgtaggtRBaSagttcacgtaDaY
+aaaacDSaKattctgtSatatgtatggVBcctctgtgaaHDKgttaRttttBMHgRMgHa
+gtagMgacgaagttaatattgRtHtHttatYaaagcagatgtgattagtggcactactVa
+ttagatctctgtttatcattYttgatHcHttagStgatgactctDaaatcagtgttgttt
+ttcYaaagtatatcYcaSaacaVttcgWtatKaaaHWtRgtttaKacttctgaaNaYacc
+tNtcStatttaaagttKgtgatcctBcaBtctttaaaKagttgDtWctDtgtgctataKa
+gtaNHatctagYgatcMgtggYaagactgacacttaRaaccHgttcaYtagWtggtgBcS
+tacaMcMHataaaNagatactccaggagttaatcatRttttgaKNgSgcaggtgttRaYc
+aaataBtaDtatHgBtatacKaataKtaggaaatatgcataaHgaKttttatMaaaNgMa
+tYattgaatNtatVaggtKctttHattcatttatYtattagtataYtttagYcattagaa
+ataHtaaccttactcatYttHMRagttctDagNSVgcgVaNNattctVcaaVagaattta
+agaggttttacRagtagtaaaBaBaaMtaScKgVaRcNtctgtataagtatVgtDgHaYt
+tcHYttaagatRgtgaattctYaaaattRtcWtacDDaRatcaKtaSacaagctaNttRY
+agMSDKtWgWaYNgaaaatatNtaatatHMtMWRaRacaaaatgctgctacNKaKtagtt
+gVatDaVccatSDtgaSggcgWatccBgaaVtgtaWttagatVaBWtacgWtaYattaaa
+tMctDgDaaKatttgaaatgctWctttaHtggHaBBSRVBWtgattgagatccNcaaaHt
+>THREE Homo sapiens frequency
+gcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgt
+agtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggc
+ccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaata
+ccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggt
+gaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgac
+gagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagac
+gcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataattt
+cacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacaga
+aacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccc
+cgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggac
+gtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatag
+ataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatga
+gtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgt
+atagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaa
+gactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagat
+acttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaat
+aatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttatta
+cagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagatta
+atatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactt
+tcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatt
+tgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgc
+ggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttgg
+tgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgag
+gtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggca
+gcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatca
+aaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatca
+tcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataat
+tataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcacc
+attcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgaga
+catcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacc
+taaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctcc
+ccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaa
+gtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcg
+aaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaaga
+aacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttgga
+agtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctg
+tctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggactttt
+aacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccg
+agccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttac
+ttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacc
+taagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctat
+ggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacga
+cagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtc
+tatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaa
+cttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatac
+gtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggc
+cgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttat
+tatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctg
+acgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaa
+ctaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcag
+gcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctc
+taagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaag
+tcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagcct
+tttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagata
+cagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcat
+tttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacatta
+ggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatg
+aatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaa
+agatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaa
+gaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagctt
+catcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtccct
+tccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcatt
+aaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacat
+acccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatc
+tacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacg
+aagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggt
+agtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaat
+gcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcat
+gaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaa
+taactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactga
+gctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaat
+gaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtggg
+tgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaa
+agaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccat
+tgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcct
+caaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacat
+aaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctac
+gttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacat
+catagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggcta
+ggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagt
+tcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtac
+gtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtg
+cattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggta
+gagatacctttgcaatttttcgatgaaggcgaccgagataaatgagctataacactgtat
+gtcttttgattgctataaaacacagaaacggatattaatttaggccgtaaccaacatctg
+ttatttgacatagaacagatggtcctttacagcgtattccggccttaatattgaggtcca
+gtgtattgtcctcctttaaagaagttgattgtaactgacttaaataagacatgtcaccca
+ttcactgggttgcaactgctggccctttttgtccatcgcacgctaatgtgataacagtac
+cgccctcacacctgcgtttaaaagacataaatgtcgctatgaaggttattcattaatttt
+agctgttttcttagaaaaggtaaatttaaaattgaaaaggctagaaaactaaagttacga
+caaatgtgtttgtcaagtaggcgggcatcattgagattgtaagaaataaagccataacca
+gccccggaatagaaaatgttaaggaaaggcgatcttctttgaattcttattgtcaagtgc
+agtcatacgttcttatcagaggacattgcaataaaatctaacaccctcccttgtgtggtt
+gggccatttgtacttcgaagcgtccaccatgtgcagaggataacggaatgtggttccgtc
+ccataaacgatcattctcgcccacttagtggcgcggtaaatcgctctcatagaggtaact
+ggcctgtaatgtccaatgttaggctaccttctccaactttagtacaacgaataatgtccg
+attaacaaggagtcaatttgtcatgaccagttcattcaggtacttgtatctatacggacg
+cgttccagagtagtatttgaaattttgaggttctactgataagtttagctatcgctgtat
+gtctgaataagaatttaatgtttatcttcgataaataacaattaacaactcctaggtgat
+acactgtgaagtctgctgttccccaaattacatatgctattttgttcacataccatgaag
+ttaagctaagtgctctataatggcataaacggttatcaaactagctcgaatttcttttat
+tacgccggaagcggattaactgctgtagatcaaacacgttaggatagtgtcgttttcata
+tatatctaaattcggtctaacatgcattacccatgcttgataacgtagcacttcgcagtc
+taattatgtaatgtccgtttaaccaaactttaaaaaagtttatctatcaccagtgatgcc
+tcatcgtgactacccggatctttagcctttagggtctaaacagaactaatattactacgt
+gtcatactccggagcttaaccaggtgaaacttatttgttaaccaaatttagtgacagggt
+agaaatacgtatcaaattaacccagcaatacaataagcatgaaaataattgtaatcgggt
+ttgggccggaatcccgcttggcgaaaacttaatgacatagtgtgatgcattttgcactgg
+attgagccacaaactcaactagcattatgctcaatatttggccagtgttctacggtttga
+aatttataaaggccgcgcaaaagtcttgtagttacaaacgcataaatctcgaacgtaata
+ggtttaattagaacatccgtaggatttctgtttatagtagatttatactaaatgttctga
+ttagattctgacggccttacccatacaattaataaagacgaatatattagttatagttta
+ctatccaaataaattaagcgaatcgaaataaactgtcacgatactgggcagttatcaact
+tatcacttatacagttcggacactctatattggtctgtgagtactctatcaaactaactc
+ataagttaactgcgcttccattaaatttcaatacgttcttgtgctgtgtacaaacctata
+atcgaataaatgacacatatggagatgcataataaaaaaaacggctccatatttctcgtt
+aatcgggcattcttaaggaggagcatctcaccaaaaataacgttcctgataagtcttaac
+tattagaccgtcttcgggaatgaacgaaacctcaagctagcatggtatagttcttgatag
+cgcgtaaattctgataatactgggcggacagctggaaattagttgccagtgcacctacgc
+aaatagtttacataaatcaacgggctccgaacgtaaatacaaagggttagttacatcgca
+acaagatgaaaagcatgtatgtctaccgtcatccgtccctaacaaacataaaggtggtga
+agaatctcgtaggtcaactataactccatccttgaagcaactactccgcgtccgtgtgcg
+tagttcgcaacgagaacactactgaaaaaagctaaacaactctcggtacaaatgcggctt
+gtgtcgataaagttggtggtagtgcacggaataacataacaaggaatattatttattcaa
+attttttgtgactgttatttgttttctgcctagaatgtaaggatgtgttttttgtgacct
+gatagttacgcttatttcaggtccacggtgcgtgagagtgtgtcctataacggcagggga
+gcgaagtagtgtcctttagactattcaaggtagaattttgataacgctctataaaaggta
+gaaaatcatgattgagcaataagaccccaacttatcaaaaaaggagttctcgacagcgcg
+tgtacagtccctataacggctgtatttcctgtgtcacaacaccctcccatcgcactcaaa
+atgtagatttatgatcagacgctaacttgttcttagagaaaaatacacgggatactctgt
+gcaacgatttcattaataaggtgcagcttgggacttttttggccgtaggctttattaaca
+ttcacagtaggtagcgagacttcctatgaaccaatcatgccacgcgttttaacgtttcaa
+atataagctaggaagcgtttgccaggacttctataatgcaccgttttttttagtacttcc
+ttactagccttagtttatgttagagtctttccaattacaaaggattgaatagccaaaatt
+tctacaattctcagcgaacgccagcttaatctaaacacgagcttcaaatattctacatat
+cggcaggagtcaatatataaatatgaaaatcgtaccatcctcgtacttttagaccaaacg
+tcttcggataattaaatcctttttcaattaccacagtacgtgcattagaactactgctat
+gaaagtaaaccttgaaatatagtcctcaagagcgtatccaagtacattgcacgtgtatac
+agtcgtataaacgagttgatgttctgacgctagagcttaccattcgttaaacagataact
+aaaatttaatggctgagtgacttagtgttttcgacaaacgtcgcggatgtagactattgt
+ttataagcaatttttaaaaacatatgttcaaaacggtatgggatatgtcgaattccacag
+gggtttatgtaccatagaagtatgtataaggtactaaaggtttaaatctgtgatattcgg
+ttcggtgaaaatcagactagtcacacttagtgtctgtaaattagattgggtgaaggtaag
+cgatcccgaactctacaaggcatgggatgagattctaccgactccggataacactttacg
+atcgcgcataactctagctcttagataagtttaacttgtcgatctcataaacagttcaaa
+atctgcgatttattgtatcaaatccatcctctatcttctataatcatctgaaccgcgata
+cggcactatgagccaagtgaagattgaatccaagaaagctataattggtttattttagtc
+catttaaattaagtccggtataagtgctctgtacaatatgcagtctcatgggcatatacg
+ttaactaccttttgatacttcgaattggtaaaatatcgactatcgatttgcagtaaaagg
+tgtagagtccaattactctttcctgttacatacgatctcttagtttggacaactagccca
+tgatggcgctcctctagcgcatgaacctactttataattacatctttatcgatgaatttt
+tttagactgcggaggccttgagttttaacagggctgctaaatttcttaagcgattagacg
+gtagcgtcgtacgctacttgcttggaacaggcaccgaaaatattgatctactattgcgtc
+aactctattctgctaatagcgatggcaaatcacagaagccctcttagtgacaatagttgt
+caactatatctaagtcgacctttactgtatcaacgatcacggagagaattaccgaatacg
+aaacctcaggactaaaaaacggaaaggatttgtcgacggtaaatataatacttgttaagg
+gtagcgacacaggtatactttgggtgtaaacgtggtgcttcccggaacgattttcagacc
+agaaaattgttccggtaaccaggaaatctcgtctgcgttaattcgtgttagtaaacttga
+tcttcagactccttcttttcgttgcagcgagacttaaattatatctgcgaaatagtgccc
+cgtgcatacttcagatggtaggagataccatttggcccattgtgactttacgcgattaat
+taaccgacatacatctgttcctgagctatgatcgtctgaataaattacggtctcctcttg
+atacctaatggtttctggagacgtttctcatgttcaaatggatagcaggagatcgcttca
+tcaagtttagctacgcagagcatcaaaatatgtatgggaaagtcgatttccaaaccagaa
+gggataaagagaaataacggacttctccgtagattagcctgatattttgatgggaatcat
+ggcggcacatacgtaagagttgcgtgaacgaatattttggacggcgggagacacatatcg
+gccattcgttaaggtctctatattggacatcacaagcttagcagtatgagctactaacac
+tcaagacattattgattttttcaagatatgtttcattcctctaccgctattcccatacgt
+tcgattcgccgggtgagcgaaaccacgggactgaggttaagctaatcaataacaactcgt
+tgcgatagagacctatgtatactagagagaattccccaacatttttacaaaaacaaagca
+gactaaaatagatacagtccctccatacaattaggaccaacatgttattgccgatcctag
+cacacacaccacaaactcagaacttctgtcttacctatgaaagggtctgcacttctgatt
+gtacgtgtctaattagcattaatattaaaactaattaggataaactataggtacgagctt
+tactataagtcactaggtgttttccgatcgaaaaacgggaccttcaagccttggtaagta
+catttaggataaagaaaaaaaggaaggtacgtgactaatctgtctaaactgacaatagag
+tagtacctacatgcttcatgtcaagtcttaatacgcaagcgctctcgttatactgctcaa
+caaaactcataaagttggactccatcatttagaatcatagggaccaaaacatttatttgc
+tactgtcactttgtaggtgttctattctgaattcctcatattgatacatgaatcggaata
+cctgtggatcccttaggacgcacgtgctttctttacgtcagaatacatattgtcagaatc
+gagaagttccatgcaattaagaattcgcctctttgaaaactcatatccccacatataggg
+tccaccgttattcggaaacgatataataattattccagcgttgagcgtcccttaagagcg
+cattttcgcttggcctttcttctacgactctacaacgcaagtggctgtgtggagtttacc
+acagcgcagcaccccatagaactacctctgagagcgcgagatggtggcagtatgctctgc
+agctagcgtttagaacgcgcccgcgcattaaccagtcatattaaaatggactgtcttaat
+tgtcggcattaggagcaatattaactgatgagggtatcggtcgcagaagtaatgacggaa
+atacgcctctagtccgcagagatacgattacagactcagatcccctaacaagcaaaacga
+ttaaatcggaatcactccccctatgacatatttgaaatacacaagaaaccacgcaacatg
+tcccgcattctcaaccgcgctttataagatgttgagtctgagaattagatgacctaactg
+caagaatcatggcgagtttatctagtaggcaagtctgtaccctagggttcgaacgctgtg
+acgtcgtgatcggtctaaggacttagatgataaccaagaactggtttaccgagtactttc
+actattaggagtaattacatgcgttcaccgcggaatacgacgaaattttttcatatcttt
+atgagcgagatcgtgtcgtctttgcattgcaacagtcgctaccagtaattgctgatcaat
+tatagattcattatacagatgcttacttttctctattcaatactgtcatgagttgttttt
+aaataagcaccagaattatgtcgcctagtataatcttgcttccacttgaatcaatgcgat
+ggacagtattctactgattgcaaagtagtctatttcggcttagcagtacgcatgcctatt
+tttttgcaggcacagaataatatgcaactaggattctcggcatccaattaacaggctaaa
+acaccaccgaaagacaggtaatctacgaagttgatgtttactacagaaagcgaatgatat
+cacttggagaacattttagatgcccccttttaatctagactgagtgtaccaatatatcac
+cggtctaccgaatcagcttgaataaaccactctagtactcatgataaccgagcatacaca
+tgtatttctcaatgcactgaaggtgaactgtttacaccataccttgcgaatcaacgtggc
+gacttatacttctgtctttgagtacagcacaccctaatgaatctaagttagttgttgata
+cgaattgtaatttgactggatctcgcctcctcatctagattcttagagaagatgtttctt
+atagccggtactgtaactttattgatctggtttatggtaatcaacattttacctctattt
+aaacgtccttgcgccgtgcactcaatcctgatcggtttagattcaagcgattatcgagtc
+tggaggccgagaaaagaaatgcacagagtaagctctctattgcgacatctacgtagaaac
+tcgcatttcagatcgagtaagcaactctcattgtgttgattcagtaatacaagattacct
+acgcttctacgaaatatactatagatttagcctacgtcacctttagtgtcgagtcggagc
+tttgaagatcggatgcggtgtggactgtgtataggcaattttgctgcgagctcgtgactt
+ttggttgatgtcgatatcaatgggatacctcaaacgtctttatctctggataactcacat
+tgagtataccggtaaaaatttattctattcatctaaatagtcagtgagggctagggtcgc
+aatcacattaggccacatacacatacttaacatgttctattgacccgacccaactttagt
+agcattgtagccgtttatgcaaatatgccaggcgccaaacactagccagagggcattttg
+ttacatttatttaatcgattattacacagtcggaacacgcctacatgcgttcgacttatt
+tgcgacatggtcaacaattcagtaatttaatccaaaacctaaagtcagagacatgacact
+aaaatcacattaaggtcagttagtgaaggaatggctaaccagctagagaatgcatcatta
+acaggcacttattgtcaaatattttccagatctaagcaacatcacgttaaaaagtacaac
+aatcacttaaaacacatcagtccaggtgtaattagaaagccgcttagtaggcaagcgtag
+gagtataaatgtagacaatagtcgggacttagcagacactggatgcagtcatagaagatc
+ttgcataacacgttagggttagagctacgaacgcccatcattaactgcctaaagcgtgcg
+tgagcttagcgctaacttttccaacacgtttgtgatttcgttcataatgtatcaatttca
+cagtcatatacagggagtgtagaaaaatcgcaattaacatacgttgacctatttttgttc
+agagttcagttagagcctaatgattcgagagcaataatcaggacagcctcataggaagtg
+tcaatcacttagaagctatattattataaatcgctctttactgtcgtcgaaggaacgagc
+gagagagaatcagttgcctgcaactggcttaacaatatgatacataaaaatattttcatc
+accactaagacggtggaattcagacttattggcaacttaggatgggactattaaataacc
+cataagatgttgggataaagttacgaaacgaaagggatatagcctgttagataggaaatc
+cccaataaaacatagccggcctccacagcagtgatctattccgccacgcgatatctttat
+accacgcaatataccaataataaaggttaaatgtggttgcgatttaaaaaagatacatat
+cagttgcaccgcgtagcaaatccgtatgtgaagcgtaacctagaattatagcgtctgcaa
+gttctctaagcttcctctgcaagatacaatatgactttttagcttttttactaccaaatc
+tcagaatcttagaaacaggttggtacgtgctactcggaattcccaaagtaccctgctata
+tatgccattccttcattggtccgggctcaccatggggccatcatagtaatagaaggtagt
+aaaactagttgatttccgacttttaacaatcactatcctgacccagatatgggttccgac
+tggcccttactccagtaagggcagacacacagacaacgagaacttgataactttgaattc
+tcaaatcgatcattgcaacgtgacttatttactagcctactcctataattcatacgtcaa
+atacatttcaacggaggaagataataagtaaatattcactaaataatggtcgaaggagtc
+ctttgccaacataagtccacatatgcgctatagattttttcttggggttcatattcaata
+agataaacagcaagagtatcacgtcagcgagtcattgagatcttggctagcattgtgata
+gcatattctacctaaatggtagtctagcacagagtggataagatatcagttagatataga
+caagtactataacagatctcgcttcgttggattgtatggctagctttgatgatatgattt
+tataaaaattgatccagacctgacctggccaattatattcattttttatgagtaaaaata
+gataaccatgaaaatactcaagccccttaggacgtacaaagtggtaacataaatttcagg
+tgttattctgcaaccacacctgttttgggttttcaaaaaggctaagcagattggttttac
+agataatccctgaacactggtatctcccaacgatgtcgttcccaacccttgctgaccttt
+taagctctgctgaagttttgtaaactaggcggaaaatatgttcgatagatccactcgcct
+gaggtagaaattcgtcttagtaacgcctctttggattacacagaatagtgtactgacacg
+tacactgctgcagcagccatacgctaacattaaaattcgttgagtctacatttgttgtta
+ttcggattatgttattgggaatagtatttttattcccctgcgtgaaaccacatggataga
+ttagcctactcctaaagactcccttttggtctacggttcaattctcttactgagtttatg
+ttcgtaattatatcggcgcagtgaatctcctaattatcaccggagttaccagacgccatg
+aacttatggccagaaacattgcatgtggcctacataggattagtatcaagagtttacgtt
+tgcaacgacatttgaccaacttgaccattcctgcttgtagaccgcgggaactcccctgca
+cgcgactatagaagttggtggtggatgtggcttatgccgcaaatatggttttgaaaaaag
+taatctattgcttgatacctgaattgagacatgtataagggctattgccagatgaaaaac
+tgcatataaggtcaaacaatataagaacattatacataggatcttagcgttcctcaggat
+ggtatacgctataaagtctagcttcagcagctaaggagttttgccagtgcggacttccgc
+tggaagattaggtttaaccgccctgacatcttcataaggtcgggcctgattcaaacccct
+ggagtgccgtctcatacttgaattaatcgatggaaaacttcttctagtctaatattatta
+ttaacaaatgacggttcaataaataacaccgtaagggtgggaaactgttaagtgatgaat
+cattttaacctatcatccattagctacagataatgataccccgatccgactagggggtaa
+gtggttgttccgttaggataaaccatgtaaaacgttagagggtttgtagattaattggta
+ttccagataaatgaggtcagggcgagtgatcaattacactgaaaaattgtcagcttgcgc
+ggtagttgttaagacagtataaatgaaggggattcagaagcaagtttctcgattgactga
+atttataaaccagtcgtcaatcatgatttttgtgtcgattaaagcctaaatggtaattta
+aaccattgatatttatcgagtctataaatatctttggttgtatattacttcacaatcacc
+aattctaaatgattcttccactgtgcgggtggagatatcaggacgggttaaggttgacct
+acatcgttttgatacaacaaaaatcaaagcacatggctggggacttctcgatactatctt
+tgagatagtacgggcaagagtgggtgacgcctccctacattttcaagtctatcggataac
+ttctcggtaaaacgctcgcgatatagttttaaagcattgatttaatccacgcaggagcaa
+gttttaccggtcgaatgagaaaattcaacgtaagtgtcatatccagtcatggttagccaa
+aagcatgggttatccaaaaggaataaaacagctcttcaacaaagagatgaggcttcataa
+cttcgatgaatgcgtatggttctgatatatagatcgatgcatgaggacactttattttag
+ccggcgaattaatggaatccatacgttacttatttggacatgacttctaggtgtttttgc
+tgtcccgtttagcgatatttacagattagtatttcgtttctcatagttaattgtatctag
+atactaactcgttgaagacgcataccttgccatttgtacaggacttaactgttccgtgcg
+taatttgaatttcttataggttcttcaaggcacgaatacctcactcatgaccgttcatac
+tctagttaaggtcgggaatactacgtatgcagggaattgtaacctaggagatttacaact
+ctttaaacaagagtcgctgaggtccaggatcaaaacactgaatctcctaacttcgggtgc
+ctccgtaaatcacctagaaacctactcatacatttgcaattttgagatgtaggcgaaaga
+gagaaatctgctttttaacggtatctcttgggattccttttaaaaacacataacgatagt
+aatgtaccaagtaaccaaaagctgggatgtgtctgtgtactgatccgccgtgtcagagta
+gtccgccatgaatattgacgtcaaggctagtgtcatcaggtattgatgttcattgtaaat
+gaaggaatgaactaatgtcaccaagtaaagggggtgaaaatgctccccagggttctacag
+acatagagatggtcagaacacgacccccctctcaacgcagtgtatttgaaatatatggac
+atatctaccttattctgtaattttagatgtgttctgtgtataccgatattgataagtcaa
+taggcttgattacgtatcttaagacaaatctgtttcgcaagtaggaccgcatctttcaga
+ttgtttctttttatgccataacctgcccaggaattcaaaaggttatcgatacccgatatg
+ctgtgaattattattctaatggccactcattcctgcttatatctggaattggcatgaata
+tcttacaacctaaagtctggcgttgcgccagttctacttcgtaccggacaccatctccag
+tcgttaaccgaaggtgggtacgtcacataaaagttcattagaccacactttgtgccgacg
+tatatagatatattacacgtatagggaatgttttctcctaggtgacccgaccttctacta
+aggttgtacatcgtataatggcccattaactacgaggaaagtggtattgacctggtaatg
+cacgttcttcgatatataccgacgaggtaaagtctactattgcaaagtttgacgttatac
+tgataagtttagatttccctggatcgcgcatgaacaatgtatgcgttatctgccatatat
+aacatgttacaaatccttggggatactatcgctactatcatcggaccaaaattaaatagg
+ctagtgtcttatcagaacatcatgtttaccgaactgatctattttccaatttaagctgat
+attacgtccgcgtatttattttagttccccggatgacgattatctgagctacatcataca
+agttagcatactcgccggtgcattgatttcttatttcgctatatcttcaagttcacaggc
+ttcatatagttccaattagcagtataattaggttttgtaactttaaccatactttataaa
+aggttatattgcacaactgatcaagcatccgctataacccgagctttaccagttagcggc
+taataacaaataagatgacttcgtgtcatacgaccgtcatgatcatgctctaacttaggt
+gggaaccaaatttaggcaatgggtagtaataagtataaaatgataccacatatactataa
+caatgaaattatttgtaatccggtttgccaacgtatcccccttcgcgataaattaatgac
+atagggtcatccatgtgccaatcgtgtgtgccaaaatctcaaattcaattatcatcaata
+ttggccaagtgttataagcgttgaaagtgatataggccgccaaaaagtagtctacttaaa
+aaccaatatttatcgttcgttattgctggtagtacaacatcacgagcatttctcttttga
+gttgatttatactatatctgctgatgtgattatgtcccacttacccagaatattaagaaa
+gtcctagattgtaggtatacttgactataaatataatttaagactatacaaataatctgg
+ctacattatgccatcgtagaaactgataacgtagtaacgtcggacactagattttggtcg
+gggagtaatctagcatactaacgaatttgttaaatccgctgaaagtatatgtcattacct
+gcttggcctgtcttcaatacgtttagactattaaggactcatttcgagatccagtattaa
+ttatacgcatccatatttatactgaagacggattgagttaggacgacaagctaaacaaat
+attaagttaaggattagtattatattgtagaaactcgtcgggttggaacgattcatcatc
+atagaatgcgttacttattcagagagacttaattcggttatgactggcagctcacctgga
+aagtaggtgaaaggcaacagaagaatattgttgactgaattctacgggctacgaacgtaa
+ttacaaagcggttcgtaaagagcataaagatcaatacaatggatctctacagtattacgt
+aaataacatacataaacctggtgttgattcgactagctcatagattaatcattaattgaa
+gctacgaagacgcggaagtctgcggagtgagcaaacagtaatcgactgataaatgcttat
+aatatcgcgcttaaatgccgcatggtgtacattaacgtgggggtagtcaaaggaatatat
+ttactaggaatattagttatgcaaatgttgtgtcaatgtgatgtgttttatccagacatt
+ggatgcatggctgtgggggcacaggatacttaccattagttcacctacaagcggcgtgag
+agggtctcagttttagccagcgcagagaagtacgggcctttagacgattaatgctagaat
+tgtcataaacctcgtgaaaagctagttaataatcatggtgctagaagaacacaacttttc
+tataaaccagttctcgactgacagtcgtaactcactatatcgccgctttgtactgtcgca
+aaaaaacctcacatagaaagaaaaatctactgggtgcatcagtagagatcgtgttctgag
+agataaatacaccggatacgatctgcatcgagttcatgtattaggtcaagcttgggactg
+ttgtgccagtagcattttttaacagtcaaagtagggtgagacacgtcatatcataatata
+tgccatcgaggtttaaagtttatatgataagctagcatgcgttgcaatcgtattcttgaa
+tgctccgtggtttgtactaattcctttatagactgagtgtatcgtacactcggtacaatt
+acaaaggatggaagagcaaataggtcttcaattataacagtaccccaccttaatctaaaa
+accagcttcaattagtattaatttcgccaggagtatatatataaatatctaaagactaaa
+agactcgtacttttacaacttacgtcgtagcataattaaatcatgggtaaatgtcatcag
+taagtgcattagaaatactcctttgtaaggatacagtgaatgtgtctcagcaagtcagta
+gaaatggaaattcatactcgattaaggcctataaaactgttgttggtatctacagagtga
+ttaaaattagtgaatcagattacgaaaatgttttcccgctcgcacttacgcgtttagaca
+aaagtacaggtggtacaattggctgtagtagaattttggtataaaataggtgataaaccg
+gatgggtgtgggcgaattcaaaagcggtttttgttccatagaactatgtagttggttata
+aaggttgtaatctcggagattaggttagggcttaatcagaatagtaacaatttctctatg
+taaagtacagtgggtgatcgtatgagttcacgaactcttaatgccatgcctggacaggat
+aaacaatacgcatataacttgacgatcgagcttatatcgacctatttgagaagtttaacg
+ggtcgatataatatacaggtcttaatagccgattttttctagaaaagcaatcctatatct
+tagttaatcagatcaaccccgtgaacgatatatcagcaaactgaacattgtatacaacat
+tcctttttgtccgggtggggactccatttaaagtatctcacctagaactcagcggtaata
+gatgcagtctcttgcccagttacggtaactaaatgttgatacttagaattgctaaatttt
+agtctagacatttccaggtaaaccggtagacgacaatttctctgtcatctgtcataagat
+cgcttagtgtgctcaaattgcaattgagggccctactatagacaatcatcagacttttta
+attaaatagttttccatgaatgtgttgtcaaggcggaccccttcacttttatcacggctc
+ataaatgtcgtatgactgtagtcggtagcggccttcgagtcttcaggggaaatggaaaag
+aaattaggcttctaagatggactataatcgattaggctaattccgttcgcaaatcacaga
+agcaatcttactcaaaattgttggaatcgatagcgaacgcgaccgtgaatgtttaaaagt
+gctcgcacagaattacccaatacctatcatcacgacttaaatacccaaagcagttgtagt
+cgcgtaatagattaagtctgaagcctagagacaaagggatactgggcggggaaacctgct
+ccttcacggtaacatggtaacaacagaatttggttaaggttaaaacgaaatatactcgga
+gtgaattactgttaggtttcgtcatcggatcaataagtagtttccgtgaagacactctta
+tattagatctccgaaattctgacccgtgcattaggcacttggtaggagattccatttgga
+acttgctcaatgtaagccagtaatgttccgaaataattcgctgcaggagcgaggagccgc
+tgaataaaggaccctcgcatcttgttaccttatggttgagggtcaccgttctctgcgtca
+attccagagctggagatacattcatcaacgttacctacgcacagaataaaaagatcgagc
+gctaactcgttttcctaaacacaacggatttagacaaattaccgaatgcgccggagagta
+gcatcttagtgtcatgcctatcatggcggctcagtacgaagagttcaggcatcgaatatt
+gtggtagcccgcactcaaagttccgccattaggtaagctatatattgtggtcagaacttg
+aggacaactatgagctactaaaaataaacaattttgtcatttgttctagatatgtggcat
+tcatcgaacgcttgtaccagaagttacattcgcagcgtgagcgaataaacccgaatgagc
+gtaacattatcaataacatatagttcagatagagaacgaggtattcgacagagaattacc
+caacattggttattaatctatgcagaataatttagataatgtcactacataatattagga
+ccaaaaggtgattccccagaagacaaaacaataaacaatctcacatattcgctagtacct
+atgtatgggtatgatcttctgattggacggggataatttccaggtatattaaaacttatt
+accataatctagacctaagagaggttatataagtaaagagctgtgttccgatagaaaaac
+ccgaccttaaagacttgcgaagtaaattttgctttaacaaaaaaacctacgtaagggaat
+attctgtataaactgaaaagtcaggtgtaactacatgagtcatgtcttcgattaattaca
+atgcgatctcgttattctgatcaactaatatcataaactgccactacatcttgtacaatc
+attcgcaacaatacttttatgtgctaaggtcacgtgcttcctctgctatgctgatttaat
+cagattcataaaggaatacgaataactctggatccattaccacgcaagggatttatttac
+ggctgattactttttggctgttgacagaactgccatgaaagtaagatgtcgcatcttgca
+taaataatagcacctaatatagccgacaaagtgattccgataacagattttaagttgtcc
+agccttgagactccatgaagaccgcttgggagcttccccgtgattagaagaatctaaatc
+ccaagtggatggggggagtttaaatctcagcaccaacaaatagtacttcctctcagagcg
+cgtcatggtcgaaggagcctatcctgatagaggtttgaaagcgcacgcgcatttaactgt
+catattaaattggaatctcgtaagtgtcggcagtacgacaaattttaactgatgtcggta
+tacggagaagaaggaagcacgcattgaagcagctacgcagaactgagaagatgacactct
+aagatacaattaatacaaaaacgttttaagcccaatctatcaacagatgtaagatgtcta
+atacacaagaataaaaccttcatgtcccgatgtataataacagctttatttctgctggtc
+gaggtgaagtagtggaaattactccatcttgctgcgcgtctttatagtgttggctactct
+gtaaccgacgcgtccatccctctctcctagtgatccgtatatccaattagaggataacca
+acatctgcgttaccgacgaatttaaatttttcgactatttaattccgttcaaacccgtat
+tcgtagtaagtgtttcatagatttatgaccgacatcgtgtacgagttgcagtgcatatgt
+agataccactaattgctgatctaggatacatgctttataaacatgcttacttggctattt
+tatttactgtcatgtgggggtttttattttcaacaagtatgtgctaccattggataatct
+ggcttcaaattgaagatatgcgttccaaacttgtctactgtttgctaagtaggagttgtc
+ccattagaactacgcagcacgtggtttgtgatcgaaaagaataattggcaaatacgaggc
+tagccttcaaatttaatgcagattactcctcagaaacacacgtaagcgacgaacgtgatg
+tttactacacaatgcgtatcatagaaattcgtgataatttttgttccaacctttgaatct
+agactgagtggaaaaagatttcaccgggataccgtttatgctggttttaaaaactcgtcg
+aatcatcttataactgcattcaaatggatttctcaatcatctgtacgtcaactgttttaa
+caataacgtcagaataaaccggcacaatgagacggcggtctttcactacaccacaccctt
+aggattataagtgacgtgtggattcgaattctaaggtgacgggatctacaagcctcagct
+acattaggtctgaagatctttcgtatagccgcgtatgttactgtttggatatgggttatg
+ctaatcaacagttgacagcgagtgaaacggccttgcgacctgaaatctttacggttacct
+tttgattcaagacaggatcgacgatggaccacgtgaaatgaattcaaaactgtaacatcg
+cttgtgcctcagcgaccgagtaacgacaagttcacatcctctatgcaactatcattgtgg
+tcattaaggtattcaagattaactaagagtcgaccatatattctagagttttacaattag
+gaaccgttagtctagactaggagcgtgcaacatcgcaggaggtgtggactgtcttgaccc
+aagttgcctgacacatagtgtcttttgcttcatgtccttagcaatgcgatacctcaatcg
+tagttttatcgggataaataacatggtgtttaaccctattaatggtttctattaatctaa
+attgtaaggcagcccttgggtcgaaagcacattaggccacatacacagtatgaaattgtt
+cgagtgtccagaccataattgactaccatggtacacggtgttgctattatgactcccgca
+aaactcttgacagagggaattttggtacattgatgtaatcgatgatttaacagtaggaac
+tagacgtcatccgttagactgagttccgacatgctcaaattgtcaggatttttatccaat
+aactaatggctctcacatgtaaataaaatcacattaacgtcacttagtgatggattcgct
+aaacagatagactatcattcatgaactggcactgtttcgattatatttgcaacatcgaac
+atacttaaagttaaatacgacatcattcaattaaaaaaattcagtacacctctaatgagt
+atcccgctttggaggaaagagtagcactttaaatggacaatttaggccggactttcctgt
+aaatggatgaagtcattgtacagcttgaataaatcgttagggttagtccttacatccacc
+atatgttaatgaataaagcctgagggaccttagagctaacttgtccaacacgttgctcat
+ttacttaataaggttgaaatgtatcagtaagtgacagcgagtgtagattttgaccattta
+actgaccttcacagttttgtcttcagacgtcacttacaccataatgatgacagagcttgt
+agatgcacacactcattcctagtgtaaatcaagtagtagctagattattataaagagata
+ttttctggcgtcgaacgtaacacagagagagtataaggggcatgataatggcttatcaat
+atgtgtaagaaaaagtttttaatatcatctaactcggtggaatgcacacttatggccaac
+tgaccttgggacgagttaagataccataagaggttgcctgtaagttaagataacaaaggg
+atattccatctttgtgtgctaagaacctatttatatttgcagccataaaaacctctgtgc
+tatgcagccaccagagttatttatacaaagaaagagaccatttagatacgttaattctgc
+ttgcgatttattaaacagacatttcacgtccaaccactacaaaagccctatcgcaagacg
+atcattgtattatagcctatgcaacgtagctaagcggccgaggaatcataaaatatgaat
+tgttacattgtttactacatatgatcacaatctttgtaaaaggttcgttcgtgatactac
+catgtacctaactaacctgagatatatgcaatgacttatggggtcagcgcgcaacatccg
+caaagcatagtaatacaaggtaggaaaacttctggatttcccaaggttataatgctctat
+actgaccaagagatccgttacgactcgcaatgaatactctaagggcactcacaaagaaaa
+ccactaattgataaatttcaatgataatatcctgaattgcatcgtgtatgagttacgaga
+agtcgcatttaatgaattagtcatagaaatgtcatagcaggaacataattactatatttt
+aacgatttaatcgtagttggagtcctttcccaaattatgtcatcagttccgatttagatg
+ttttcgggcccttcttagtaaagaagttaatatccaagactagctcctcacccacgcatg
+cacatattcgcgagaagtctgatagaatattcgacagaaatgcgactctagctcacactc
+gttaactgatcaggtacttatagacaagtacgttatcagatatcgcttcggggcattgtt
+gcgctacctttgtgcatagcagttttgaaaaattgttcaagacctgaacgggaaaatgat
+attatttttttaggaggaataatacagtaccatgtaaatactcaaccaccttacgtactt
+cttacgccgaacatatatggcacgtgttattcggctaacaaaactgttgtgccttttcta
+taaggataagcagattcgttttaaacatatgacctgtaaactgggatctacaaaagaggt
+acttaaaataaattgcgcaacggtttagatctgcggatctttggttaaagagcaccatta
+gatgtgccatacttcctatcgcctgagcgagaatttagtctgaggaaccactcttgggat
+ttaaaacaattcggttaggacacctactcggcggatgaagcaatacgataacattaaaag
+tcgttcagtctaattttggtcgtagtacgatgagctgatggccaattgtatttttattaa
+cagcactgaaacaaaatggagactttagactaatactaaagtctcaatgttcgtcgaacc
+ttaaatgctcggaatgaggggatcttcggaagtatagcgccgaagtgtatctcattatta
+taacaccagtgtacagacgacatctaattatggccagaaactgtcattgtgccattaaga
+ggattagtagatagtctggaccgtggaatagaattttgaccaaattgaccagtcctgctt
+gtagacagcgcgatctaaactgcacgagaatatacaagttggtggtgcttgtggctgagc
+acgctaagatgcgtttgtttttacgattctagtgcttcttaacgcaattcagtcttctag
+atccgctattccaacatcaatatctcaatttaaggtcaatatatataacaaaattagaca
+gagcagctgacacttacgaagcatcgtagaaccgatatagtcgaccttatgatgatatgg
+acgtgtccaagtccgcacttccgatgcatcttgacggtgaaccgaaatgaaatcttcatt
+agggcccccatgtgtcaaaccactcgagtcccgtctctgaagtcaagtattactgcgaaa
+aattcgtctactattagtttattatgaacttatgacgcttaaataaattaaacagtaagc
+ctgggaaaatgttaaggcaggaatctttgtaacagttcataatgttgctaaagattatca
+gaccccgtgaagacttcgggctttgggcttcgtaccgtagcataatacatctatatagtt
+agaggcttgcgtgttgttgtgctattccacatatagcagctctgggcgactcttcaatga
+aaatgaaaaatggtaacctggcgacctacttgttaagtcagtttaattcaaggggattaa
+gtaccaagggtcgagtttctctgtatttattatactgtaggcaagaagcttttttggcga
+gatttaagacttaagcctatggtaaaaatttgatagtgagcgactatagtaagagatttg
+ggtggttagtaattaaaattctcctatgctaaatcaggcgtacaatctgagggtgcacat
+ttctcgacgcgtgaaccttcaccgaaagcgtgtggattatacaaatttcaaacatattgg
+cggggcacttatccataatagatttctgtttgtacgccaaactctgcctcacccctccat
+aaattgtattggctagaggttaaattctccgtaaatagagacacatatagttttatacaa
+ttgtttgaatcaaagcacgagaaacttttaaccgtacattgacaaatgtcttcggatggg
+gcagagcatctcttcgtgacccaaatcaatcgctgagcaataagcaagaaaacacagatt
+atacaaagagatctggatgaagatattcgtgcaatcactatcgttatgttagagagttcc
+atgcatgaggactcgttttttgaccaggagaattaagccaagaaataactgacgtatttc
+caaatgaattctacgtgtttttcctgtcacctttagccagtgttaaagatgactatggag
+tttcgaataggttattctatagacattataacgagtggaacacccataccttcacagtgc
+taaaggtaggaacgggtacgtcaggtagttcaagggattttaggttcttaatccaacgaa
+gaaataacgcatcacccgtcattctattgttttcgtcgggattacttagtaggcagggta
+ttctaacctacctgagttacaaatctttaaaaaactggccatgaggtcatggtgataaaa
+tctgaatcgcctaaattcgcgtccctaaggaaatatactagaatccgtctcagaaagtgc
+aaaggttgacttcttcccctaacacagaattctcagttttatagctatctagtggcattc
+ctttttataaaactttacgtttgtaagggtccaactttacaaaagctcggatgtgtatgt
+gtaatcttccgccgtgtaagacttggaacccatgtatattgacggcatggcgtggctaag
+caggtattgatcttcagtgtaaagcaaggtatgttctaatctaacaatgtaaagccgggg
+attagccgccaaaggggtctaatgacatagagatgctctgaaatcgtaccaactataaaa
+gcacgggatttgaaatatagcgacagatcttccgtattctgttagttgacatctgtgctg
+tctttaccgattgtgatttggctttagcagtcatttagtttcgttactcattgctcgtgc
+gatagttccaccgaatatggcacattcgttctttttttccattttactgcaaaccttttc
+aaaagctgatcgataccactgatgatggcattgattagtcgattggcaactatgtcctgc
+ttatatctccaattgcattgaatatagtaaaaaataaaggctcgccttcccaatgggcta
+cggagtacacgaaaaaatcgcaactcgtttaaccaagcgccgtacctaacatataagtga
+ttgagacaaatagttctccagacgtattgagatatatgtctcctataggcaagcgtttct
+aattgctgaccagaaattagaattaggttgttaatactatattcgaccattttattccac
+gaatgtgctattctactggtattgctccgtatgcgatatataaccaacacggaaagtcgt
+cgattgcaaagtggctccgtagaatcatttctggtcatttaccgggagcgcgcttgaaca
+atggatgcggtatctgccatattgttattgttaaaaagacttccgcttactatcgcttcg
+atcatcggaaaaatattaatgaggattgggtcgtataagaaaatcatcttttcagttcgc
+agatttttgccaatttaaccggttatttcgtcagacttggtagtgtagttacaagcatca
+cgattatatcagctacagaattaaactgtcctgactcgacggggcagtgtgtgagtattg
+cgctatatattcaaggtaacaggaggcatataggtcatagtacaaggataatgaggtttg
+ctaactttaaaaattattgatttaacggttgattgaaaatctctgcaagatgacgctaga
+acacctgatgttcaagtttgccgataataacatataagatgaattactgtctttagaccc
+tcatgttaatccgctaacttagggcggaaacaatgttaggctatgcggagtaagtactat
+attatgataccacatagaatttaacattcatatgatgtctaatacccgttcccaaccttg
+caaccgtcccgattaattaagcaattacggtcatcaatgggccaatcctgtctcaaaaat
+tatcatattcaaggttcagctattttggcaatgggtgagtaccgttcttagtgatttacg
+aacccataatctaggcgacttaatatacaagatttagagttacgttttccgggtagtaca
+tattaacgaccatggatcgggtgaggtgttgtattagttatctgatcttgtcagtagctc
+ccaatgtcccagaatattatgtttctactagagtgttcgtatactggaatttaaatatta
+tgtaagactagacaaattttatggatacattaggccatcgtagaatatgatatagttgta
+acgtccctctatagattttcggagggcaggtatattgcttaataaagatgttcggaaatc
+agcggaaaggatttgtaattaactgatgcgcagcgcttaaataagtttagactattaagc
+tatatgttcgacagcatgtagttttttttaccagaaagtgttatactgatgacccatgga
+ggtagctcctcatgataaaaatattgttacttaagcattactattatagtgttcaaacta
+gtaccgttgcatactttaagaatcagacatggcgtttcttatgcagacacacttttttag
+ctgttgacgcccacctcacatccatagtaggtcaatcgcataagaacaatattctggact
+gttttattacccagaagaaagttttttctttccggttcgttaagacaataaagatcattt
+cattcgttctcttaacgatgaactaaagtacttaaagtatccgcctcttgtttcgactag
+cgcatagtgtaataattaaggcaagataagaagaacaggaacgcgcacgtcggagataac
+tctaatagtctctttattccgtttaatatagcccgtaattgcaccatgcgctacagtaac
+ggccgccttcgcaaacctatttatgtaattccaagtttaggtatgcaatggttggggcaa
+tgtgaggggttttatcaagactttcgttgcttcgcggggggcgcaaagcagactttacag
+tagttaaccgaaaaccgcagggagtcgctctaagtgttaccaacccctcactactacgcg
+aaggtactcgattattccttgaatgggctgaaacatcgtgattagcgtcttatgattcag
+gctgatagaagaaaacttattttctatattccacgtatacaatcacactcgtaactaaat
+agttcccagcgttgtaatgtcgctataataaataaaatacaaagaaaattcgtctgggtg
+cataagtacagttagtcgtctgtcacataaataatccgcagtcgatctcattacaggtat
+tgttgttggtcaaccttcgcaaggtggtccaagtagcattgttgaacagtaaaactaccg
+tcacacaaggaatatcataatagatgccatacacggttttacttgatatgtttacagtcc
+ttgagttgcaatcgtagtattgtttcatccggggtgtgtacgaagtaatttagacaaggt
+gtgtagcggtcactaggtaaaatgacttaggatggatgagcatttaggtattctatgata
+acactaaccatcatgtttctaaaatcctcaggaaatttgtattattttaccaacctgtat
+ttatagaaagtgcttttgacttaaagaagccgaagtgttcaaattaaggagtacctgatt
+gaaagaatggggaattgtaatctgtaactcaattacaaataagccgttctaaggattaag
+gctttgtgtctaagcaactcacgtgaattcgaaattcatactcgattaacgactttaata
+ctcttctgcgtatctacagactcatttaaattacggaatatgttttcgtttttggtttcc
+agctcgcacgtacgcgtttacaaataaggacacctggtacaattggctggagtacaatgt
+tggtttttatttgctgattatcccgatccctgtgggcgttggcataaccgggttttcttc
+aagactactttcgtgttgcttatatacctggtaatatcggtgagtagcttagggcttaat
+cacaatactaacaagttctctatggattggacagggcggcatccgttgactgaacgatct
+attaatccattccctgcactggataaacaagacccatttaaattgaccatagagatgtta
+gcgtcatatttctgttcgtgatagggtacatatattataaacggattatgagcagtggtt
+ttctagaaaagcattcatagttaggagtgtatcagatcataccactgaaccatagagcac
+aattctctactggctatacttcattcctttttgtccgggtggggacgaaatttaaaggtt
+ctaacctagaacgcagagcgaattgatcaaggcgctggccaagtgaacggttctaaatgt
+tcttaatgagaattgcgtattttgactattgacagggcatcgtaaaccgctactcgactt
+ggtatctgtaatctgtatgtagatagagtacgggcctataattcaaattcagccaccgaa
+gattcacaatcttcagacgtttgaaggaaagaggtttactggtatgtggtgtcaagcccc
+acccattctctgttatatccgagcattaatgtagtttcactgtactacggtcacgccgta
+gagtcggcagggcaaatccaaaacaatttaggctgagaagtggcactataatagtttagc
+ctaagtcccttcgctaataactcaacaaagatgacgcaaaagtcggcgaatagattgcgt
+tcgcgtaagggtatcttgaatactgatagctctcatggtaccaagaactttcataacctc
+tttatttaccaaacctgttctactagcgttagtgttttagtctgtagccgacacaaaaac
+cgagaatggccggcgtaaccggcgcctgcaagctaacatgggatcaaaactattggctta
+acgtttaatcgaatgagactagcactgtattactctttcgtttcggcagcggatcaataa
+ggaggtgacggcatcactctcttatagtagatatcacttattctcacaacggaagtagga
+tcttccgtcctcattaaatttgcaactggctcaatgtaacactgtaatgttaacaaagta
+tgagctgaaggtcagagcagacgatgtagtaaggtccctcgaagctgcttacagtatcct
+tgaggctcaacgggctatgcggaaattccagacctcgagttacattatgaaacgtgtcat
+tccatctcattaaatagttcgtgccctatcgccttgtaatataaacaaccgtttttgtct
+attttcccaaggagaaggagagtagcagcttagtggcttgcctatatggccccctaagta
+cgtactcggcacgcttagaagattgggctaccccgcactatatgttcccaaagtaggtaa
+cctagatagtgtcgtatgaaattcaggtcatcgatgagagtataaaaatatacaattttg
+gcaggggttatacattgcgggcatgaagagtaacattggacatgaacggacattcgaacc
+ctgtgagtttaataccctatctccggatcattataaagtaaatatacgtcacttactcta
+cgtgcgtttagacagtctttgaaactaaattggttatttttctttcatctagatttgtct
+gtatctaactaaattatagttccacataaagctgattcaactgaagacataaatataaac
+tttctaacatagtagcgaggaaagagctatgcctagcatcggatcatgcgtccgcgagta
+gttcctggtagagttaaaagtttttccagaatctagaccgaacacagggtagtgaacgaa
+agtgcgcggtgaacatacataataccgaacgtaaacaattccgttcgtattgttgctgta
+tctatatttcctacgtaaggctatttgatctataatatgaaaagtcacgtcgaaataaat
+caggaagcgcttcgagtatgtacattcagatctccttagtatcatcaaattatagatttt
+acggccacgaattattggtctagatgtcccaaaaataatttgatgtcagtagcgatcgtg
+cttcctcggagttgaggttggaagaagagtcattatgctataccaagaactctccatcca
+gtacctagaaaggcaggtatgtaccgctcattaattttgcgatcttgacagatctgcatg
+caaagtaacttgtaccagatggcttttataatagaaactaagtttcccgaataacggtgt
+acgataacagatttttaggtgtacagacgtctgactcaatgaacacacattgggacctgc
+cccgggaggagtagtagataattaccttctccagcgcgggtcttttaatatcacaacata
+aaaatactaattaatatcacacaccctcatcctcgatggagcctagcatcatacacgttt
+gatagacaacgccaattttactgtaatatgatattcgaatctagtatgtggacgctgtac
+cacattgtttaaaggagctccctttaccgacatgaacgaagcaagctttgtacaagatac
+gaagaactcagtactggtaactataagagacaatttatacataaaagtgttaagaccatt
+atataaaaagaggtatgaggtctttgtaactacaataatacattcatcgaacgatggaga
+ataacagagttatttctgctgctcgagctctagttctgctaatttctcaatcttgatgcc
+actcgtttgagtcttccattcgctcttaacgacgcgtacatccctctctcctactcttac
+ctatatcctattactggttaacctacatctccgggaaagacgtaggtaaagtggtccacg
+attgtattcacttataacacctagtagtactatgtgttgctgagagtgaggacacactta
+ctctacgagttcaagtccatatggacattacactttttcagcatctaggtgtcatgatgt
+attaacagccgttaggggctatttgattttatcgattgtcggcgtgtgtattttcaacaa
+ctaggtgctacaattcgtgaataggcatgaaaattcaagattgcagttcctatcttgtat
+aatctttcctttggacgagttgtaccatttcaactaacctgcaagtggggggtcatccat
+atgaagatttgccaaatacctggagaccctgaaaagtttatccagattaataataacaaa
+caaacctaagcgaagaacgtcagctttaataaactatcactatcatagaaattcctgtta
+attgttcttccaaacgttgaatagactatcacgggtaatagattgaacacggagaacgtt
+tatccggcttgtaaaatatcgtcgaatctgctgataactcaattatattcgatggagaat
+tcatatctaccgcttagcttttaaaaattaagtcagattattccgccacaatgagaaggc
+gcgagtgcactaatcaaatcacttaggattattacggacgtctgcattacaatgctttgg
+ggtagggttatacaagcatatgattctttaggtctcttgatcgggcgtttaccaccgtag
+cttaatgttggcatatccgtgatcctaatattctgttgtcagcgtgtgtataggaatgca
+caacgcaaatctttaagctgacctgttcatgaaagacaggagacacgaggcaccacctca
+attctatgcaaaactctaacatagcgtggcactatgagtacgtgtaacgacaaggtctca
+tactcgatcctaagataattctcgtctggaaggttttaatctttaactaagagtagaact
+tagtttattgacttttacaattaggatacggttcgcgactctaccacagggcatcatacc
+tggagctctgctatctcgtgaccaaagtggcagcacacatagggtcgggtcctgcatcta
+ctgagcaatccctttaagcattcctagtttgagagccatttagatattgctgtttaaacc
+gattaatggtttctattattataaagtgtaacgctcccattcgggacattgaaaattagc
+aataagacaatgtatgatattcggcgagtctcaacaacattatggtctaccatgggacaa
+ggggttgatatgatgaatccacaaaaaatagtcaaacacccatggttcgttaagtgaggg
+tatccaggtgttataaggacgatctagaagtattcaggtacacggtgttcagacatgctc
+taattgtcaggttgtttataatttaacgtatcgctctctattctaaataatataaaatta
+accgctcgtagggatgctttccagtaaaagatacactatcattaaggttatgcaaatgtg
+gcgatttgatttgaatcttagtacattcttaaacttaaatacgtattatttaaagtaaat
+atattatctaaaccgcttttgtctatccacatttcgtcgaatcacgacctcgttaatgcg
+acaatttacgaccctctttcatctaaagcgatcatctatttcttctgattgatgtaatac
+tgacccttactccgtacatacaaatgatggtaagcaagaatgactgacgctcctgtcacc
+tttcgtggcaatcaactggcgctggtactgaagtagcttgaaagggatatggatgtgtat
+gccaggcttcattttgacaatttttctgtcctgctcagtgttgtctgaagtcgtatcgta
+cacaataatgatgactctcattgtagatccaatcacgctttcctacgctaatgaaagttc
+tagatagtgtaggtgttagacagaggttagcgcctacatccttacacacacagtgttgaa
+cggcaagcataatcgagtatcaatagctgtatgtatttgtttggaatatcatatttctcc
+cgcctttgaacaatgatgccaaaatgtcctgccctagagttatgataaaataactgctgc
+cctgtaacttaagtttacaaaccgatattcaatcgttgtgtcctatgaaaatatttatat
+ttgcaccaagaaaatcatctgtgcgatgaacaaaacacagtgatttataaatacaaagag
+tacatttagttaccggattgcggcttgacatttattttacagaattttatcggcaaaaca
+cttcatatgaactatcgcttcacgataagtctatgatagactagcattcgtagagaacag
+gaagagcaatcattatatatgaagtgttacagtgggtactacatatgagatcattaggtc
+tatatccggccttcctcataagaccttggaaatatcttacatcagagatatcaaaggaag
+tatgggcgaacccagaaaaagccccaaagaatagtaattcatcggacgtaatagtctggt
+tttaactaggggttattgatatttaagctaaaagagttccctgaacactcgaaatgtata
+atctatcccaactaaaaaagtatacctctaattcagaaatgtcattgagattagactgat
+gtcaatacgctaggaggtaagacaagtagaagtttttgatttaggaattgaaatgtaata
+cctccatcttaagttctatattttaaagttttatgcggacttcgagtaagtgcacaaatg
+atggcataagtgcccagttacatgtttgcggccccgtatgagtaatgatctgtttatcaa
+tctctagctactatcccacgaatgcactgatgccagtcatggcgcttacattagtcgaca
+gaaatccgacgatacctatcacgcgtgaactgttctggttcttattcaattcgaagtgat
+ctcagatacattacggccatgcttgcccttcatgtctgctgagcagttttgttataggct
+gaatctcctctaagcgaaattgataggatttttggtggtcgatttagtctgtacctgctt
+attaagattcaaaatgacctacttcttacgccgaaatgatagggatcggctgaggaggat
+aaatatacgctggtgcctggtatttatccagaacaagttgcctgtgtatcagatgaactc
+taatctccgagataaaaaacaggtacgtaaaataaaggccgcaaagggttacatctcagg
+atcgtggcgtatagtccaccattagttctgacttacttaatatagactgaccgagattgt
+agtatgtggatccaagcttgccatgtaaaacatgtcggttagcaaaacgtataggagcat
+gatcaaagaagagttaattaatagtactgcactataattgtcggcggagtaccatgagct
+gttgcccaattcgatgtttattaacagcacgcataaaaaatccagacttttcaattagaa
+ttaactataaatggtccgcgaaccttaaatgatcggaaggacgggatctgccgttgtata
+gaccccaactctatctaatttttataacacctctgtaatcaacaaatcttattatgccat
+cattatgtcattcgccaagtaagtccagttcgagattctctggaccgtgcaatagtattg
+tcaaattatggtaatggaatccttcttctaacacccttagaaaagccacgagaattgaca
+agttgggcgtgcttgtccaggagcaacataagtgccgtttctttttacgatgatagggat
+tcttaaagcttttctctattctagatcccagttgccatcatcaatatctcaattgatgct
+cattatatagttcttatttagtatgtccagatgtcactgaagatcctgcctagaaccgat
+attctcgacaggatcatcagttcgacggggcaaacgcacctatgcacatccatcttgacc
+gtgaaacgaaaggaaagagtcagtaccgacccaatgtggaaaaaaactcctgtccacgat
+atgtaggcaagttttactgcctttaattagtagtcgattagtgtagtttgatattatcta
+ccttatagaatgtaaacagtaacccggccttaatggtttggcaggattctttgtaaaagt
+taataatgttcataaactttatcagaaaacctgaagtagtccgcctttcgcctgcgtaac
+gttgcagattaattcgttttacggagtggcttgcgtcttgttgtccgagtacacatattg
+ctcctctcccccactcttctaggaaaatcaattatgctaacctgcagaccttcttcttta
+ctatctttaatgcatgcccagtatgttcatagggtagacttgctatctattttgtataat
+ctacgaatgatgcttggggcgcgacttttaacaattaagccgttgggtataatttgagag
+ggtgccacgatagtaagagatttccggcgtgagtaaggaaaatgataataggattaagca
+ggcgtaatagctcaccctcctcagttctccaaccctgaaccggctaagtatgactgtgca
+gtattaattttgaatacatattgcagcccctaggatacattatagatgtctctttcttac
+ccaaactcgcccgcaccaagaaagaatgtggattcgattgaggttaaattagccggaatt
+acagacacagattcttgtttacaattgtgggaagaaaaccacctcaaacgttgaaaccta
+cattcacaaatggattacgttggggatgagaatcgattccggtcaaaaatcatgcccgga
+gcaataaccaagaattcacagaggattaatacacttctccatgaagataggactgcttgc
+actatccttatctttgtgtcttccttcaagcaccaatcgtttggggacaaccacaattat
+gccaagaaataacggaaggtgttccaaatctatgagtccgcggtttcatcgcaacgtttc
+actgtgggtatcatgactttggactttagatttgggtattctagagactgtagaaagact
+gcaacaacaagacattcacagggcgaaacctaggaaaggggaccgcacgttgtgctaggg
+atgtttccttaggaatccatacatgtaagaaagaatcaaccgtaattatagtgttttcgg
+ccccttgaattacgtgcatgcctttgctaaaagacctctgggaaatagattgaatattct
+ggacagcagcgaatcctgattatatctcaagcgaatatatgacccgcaagaaggatttat
+actagaataagtctaagaaagggcattgggtcacttcttccactaacacacttttatcag
+ttttataccttgagagtcccatgcatttttatatatatttaactttcgttgcgtaaaact
+ttaaatatgatccgtgctctatctctaatctgaacaacggtatcacgtcgaacaaatcta
+gtggctacgaatcgcgtcgctaagaacggtttcttctgctggcgttagctacgtatcttc
+tatgctaaaaatgtatagccccgcattagcagcaaaaccgggagaatcaaatacacatcc
+gatgaaatcgtaacaaagataaaacaacgcgatttctatgtttgccaaagtgattaagtt
+gtatcgtaggggtcagcgctgatgtcttttcagtttgggttttggatttaccagtctttt
+agtttcggtactatttgatcgggacattcgtccaaacatgatggctcattcgttcttttt
+ttcaattttaatcaaaaccttgtatttacctgatacattaaactgagcatcgcatggagg
+tggagattcccatatatgtaatcatttgatatcctattccattctttttagttataaata
+aacgctccactgcacaatgggagtaggacttcaccaataattagcatctactgtaaacaa
+gcgccgtaacgaaatgattactgattgagaaaaataggtctcaacaacttttgacagata
+tgtatccgatacccaagcgttgctaattgcgcaaaagtaagtagaattacggtcgtatta
+cttgttgccaaatggttattactccaatgggctattctaatccgatggatacgtaggaga
+gagtgtacctacaccgaaactcgtagtgggcttagtggctacgtagaagctgttcgggtc
+agttacagcgtgcgaccttgtaaaatcgatcacggtgatgaattattgttattgtttaaa
+agaagtcccctgaatagcccttagataatacgaaaatttgttatgtccagtcgctcgtat
+atcaaaagattcggttaagttcgcagagttttgccaagtttacaggtgatttactaacac
+ttgggagggtacgtacaaccatcacctggttagcagagaatgaattatacggtcatgtcg
+cgaagggcaagtgtgtgagtattgaccgagttattaaacgtaaatgcaggcatttacgtc
+ataggacatcgagtttgtcctttgcgaaatgttaaatttatggttttttccgttgagtga
+taatagctgcaacatgaagatagtaaaactgaggttaaactttcaccatattaaattata
+tgttcaattacgcgatgtacaaactaatgttaatcagatttaggagcgcgcttaatatgg
+gtccctatcccgactttgtacgagattttgataaaaaatagtattgtaaattcatttgat
+ggcgtagaaccgggcaaaaccttgaaaaaggacacatttaggatgctatttccctaagaa
+agcggaaaatcctggctcaatatttataatagtaatggttaagattgtggcccaatcgct
+gagtacccgtcttacgctttttccaacacataatcgacgagaatgtatttaaatgtttga
+gacttacgttttccgcgtacttattattaaagtcattggagagggtgtcgtctgggtgta
+gttttctcatctgctcaggagctaaaaatgtaaatctattggttgtttctaattctgtcg
+tccgtgtaggctatttaatttttatggtacacttgaatatgtttagccataatgtagcca
+atactacaatatcagatacttgtatacgacctatagacttttgccgaccgctcgtagagt
+gatttagaaagatgttcggatagcacagcaatcgtttgcgaatgtaagcatgcgaagcga
+gtatttaactgttgactattttgctatatgttactctgaatgttgttttttttaccagaa
+tgtgttataatgatcaaccatgcacgttcctactaatcatataaattttgttacgtaagc
+ttttctatgatagtggtctaaagactacccttgcatactttaagattaagacatgcactt
+taggaggaactcacacgttttgagctgttctagcccacctataagccattcgtccgcaat
+cccataactacaatagtcggcaatcttttattacccagaactaacgtttttatttcccgg
+tacgtatcacattaatcttaatttaatgcgtgagagtaacgatgaacgaaagttatttat
+gtttaagccgcttcttgagaatacagattactgttagaatgaaggcatcataactagaac
+accaacgcgcacctcgcacattactctaatagtagctttattcagtttaatatagacagt
+atttgaaccaggcgctaatgttaaggcccccttcgaaaaccttgttatgttattccatgt
+ggtcggaggatttgcggggcgatagcgctgggcggggatcaacaatttcgttcatgcgag
+cgcccccataaccagtaggtacagttcggaaaagaaaaccccacgcactcgctagaagtg
+ttacaatcacatcacttcgtaccgaagggactactgtattccgtcttggggatgtaacag
+actgattacagtcttatgatgaagcctcattcatctaaaattagttgatttattccacgg
+atactatcacactcctatagaaagagttaccaccgtgggaagctagatataataaataaa
+agacatacaatattagtatggctcatgatctacacttactcggatctctctttttttata
+accagtagatcgcattacacgtattgttgttccgcatcaggccctaggggctcaaacttc
+catggtggataactaaaacgtccgtcactaaacgaagatattaatagatgaaatacacgg
+gtttacttgatttctgttcagtcattcacgggaaatcctaggagtctttcataacggcgg
+tcttagtaggaatgtagtcaagctctgtagaggtctcgacggaattggtatttcctggca
+tcacaatttacctagtattggagatcacttaaaataatgttgagataataatcaggatat
+ttctagtatgtgacaaacctctatttagtgattgtgattttcaattaaacaagacgtagg
+ggtcaaattaacgactacatgttggaaagaaggccgaattgtaatatctaactcatgtac
+taagaagaagtgctttcgtttaaggctttctgtctaacattctaacgtcaattcctatgt
+aatactactgtaaccaagttattactcggctgcgtagataaagtctcatgtaaatgacgg
+tttatctgttacttttgggtttcaacctagctaggacgccggtactaattacgacacctg
+cgtatagtgcagggtgttcaatgtgcctttttatgtccggattataaccatccctctccc
+acttggaatatcaccgggttcttaatgacttagttcgtcttccttattttccgggtaaga
+tcgctgtggaccggacccattttgatctagtctaaaaaggtatatagcgtttcgtctggc
+ccgcttacgttcactgaaacttagattaatcaatgcactgcactggattaacaagaacat
+gttatagtgtactgacacatgttagactaagaggtctgttcgggttagccgacttatatg
+tttaaccgattttgacaactgggttgagagataacaatgaagagtgaggactgtagaaga
+tcttaaaactgtaccatagtgctcaattcgctaatggcttgaattatttaattgttctaa
+ccctggcgtcgaatttttttggttcgaaaatacttagcacagcgtattgttcaacgagat
+gcacaactgtaccgttagaaagcggcttaatgacaaggcagtattgtgactattgacagg
+gaatcctaaaaagctactcgaattggtatatggaagaggtatgtactgagaggtcgcgcc
+tattagtcaaattctgccaaagaagagtcaaaagcttaactagtttgatggtatgaggtt
+taatgctaggtggtctataccaccaaaaagtatatgggatatcccagaatttatcgactt
+tcaatcgtctaccgtcacgacgtacactaggcagccctaatccaaaacttttgaggatga
+gtactgccactattatactgtaccatttgtaacttacattttatatcttcaaagaggtag
+atattgtcggccattactgtcacttacactaagggtagcttgattactgatacctctcat
+ggtaaaaagtaatttaagaacctatttttttacataacctctgctactaccgttagtgtt
+ttagtcggttcaagtcacaaaatccctgtagcgcacccctataagcagaaggaaacctta
+atgcggataaaaacttttgccggaaccgttaatcctatgagaataccactcttggaatcg
+gtcctttaggctgaggatatagaacgaggggaacgcatcaatctaggttaggtgagagaa
+ctttgtatcaaaacgcaagtaccatatgccgtcctcagtaaattgccaaatgcagaaatc
+ttacactcttttcttaactaagtatgagagcaacctcactcctgaacagcttgttaccta
+acgagaagaggctttaagtagcctggagcctcaaccggatatccggatttgactctcatc
+cacttacatgatgattacggtcattacatctcatgattttctgagtgccctatagactgg
+gaatttaatctaccctgtttctatttgttaacaaggagaaccactggtcaagatgacgcg
+cttccatttatgccaccataagtaagttctcggaacccttacatgattggcctaccaacc
+tatatatgtgaccaatgtacggtacatagagtgtggcctatcatattcaggtcatcgagc
+tcagtatttaaagattatatggtcgctgggggtattcagtgcgcgatggaagactaacat
+tggaaatcaacggaattgacaacacgctcactttaataacctatctcaggataagtttaa
+tgtaattagacggaactttctctaactccgtgtactaactctttgaaaataatgtgggta
+tttttatttcatctagatttgtctgtatcgaaagaaagtattggtccaaataatcctcag
+taaaatcaagtcataaatataaaatttagatcttaggacagaggaaagtgctttcccgag
+cataggatctggcctacgccagtagttcatgcttgtgttaaaagttgttactgtttatag
+tccgtactcagggtagtgttcgatactcagcggggaactgacatattacactaaggaatc
+aaggcccttcgtatgggtcatgtttatatatttaattacttacgctatttgatcgagaat
+agctatagtaacgtcgtaagaatgcaggatgcgattcgagtttgtaaattcacagatact
+gtgtatcatattattatagatgttaaggcatagaattattggtattgatgtacaaaaaat
+tatgggtgggcagtaccgataggcattacgagcagtgcagcttggaagaactggatgtat
+cctataactagtaagagccttaaaggtactacatacccagggatgttaccatcattaatt
+tggccatcttcaatcttcgcaatgcatactttcttctacaagatgccttttagaagacaa
+aataagtgtcaacaataacgctgtaacttaactctgttgtacgtggaatcaagtctcact
+aaagcaactaacattccgacatgcaaacgcaggactactagattattaaattcgccagcc
+cgcctcgtttaatataacatcataaaaattctaagtaatatctcacacactaatccgcca
+tcgtccatagcatcagtcacctgtcttacacaaacacatgtttaatcgatgttgttatgc
+caagctagtttcgcgaccatgtaactaattgtggaaagctgctaccttgaacgacatcaa
+ccatcctacctttgtacaacagaccaacatctctgtactggtaaatagatctgaaaagtt
+ataaatataactgttttcacattgatagaaaaacagctatgtgctatttgtatatactat
+aataaattaagcgaaacatggagattaaaacagtgttttctcatcctccacctcttgttc
+tgctaatttataattcttgatgccactcgtgtgagtcgtccattcgatcgtaaagaaccc
+gacataaatagatacgacgctgaacgagatcctatttctcctgaaaattattagcacggt
+aactcctagggatagtggtactagttggtatgaacgtataaaaacttgtactactttctc
+gggatgtgagggagcaaactattactcgaccagtgcaacgcattatcgacagtaaaagtt
+ttcagctgatacctgtctggatggattatatgcaggtaggcgagagtggattgtagcgat
+gctcggcgggggtattttaaaaatctaggtgataaaagtcctgtttagccaggaaaagtc
+atcattgcactgcatatcgtcgattagctgtcatttcgtccactggtaccagttcaacgt
+acatcaaagtccgggcgcatccatatcaagttttgcaatagtactccagaccatgaaatg
+gttatccagattaataataacttaatatactttcactacatactcagcgggtattaaatt
+tcactttatgtcaaaggactcttatgtggtcttcaaaaaggtctagagtctatcacgcct
+aattgtgtgaaaaccgagtaacttgatcagccttgtaaaatatagtagaatatgatgtta
+aatcatttatattccagggagattgaatagcttacgattagctggtataatttaactcac
+atgattaagcaaatatctgtaggaccgagggaaagaataaaataaagtaccatgagttcg
+gaacgctgcattacatggcgttgggctagcctgatacaagaagatgagtatggagctctc
+ttcatcgggacgtgacaaccctagcgtaatcttggcagatcccggagcagatgattatcg
+tctaacactgtctttaccaatgcacaacgcatagatttaacctgaactgttctggattca
+ctcctgactacagcctacaactcatttctatgcataactcttaaagacagtcgcaatatc
+agtacctctatacacatcggatcagactagatcataagataagtctcctctggatccttg
+tattctgttaagtacactacaaatttgtttagtgtctgggacaattacgataagggtcgc
+gactagaccacagggcatatgacctccaccgctcctagcgagtctccaatctgcaagcac
+tcatacgctaggggcatgaatcgactgtcaatgcactgtaagatttacgagggtgagacc
+catttagatatgcctcgtttaaccgttttaggcttgataggatgagtttgtcgatccatc
+aaattcccgacattcatattgtccaataagtatatctagcttattcggactcgctaaact
+aaattatggtataaatgccgtcaaccggtgcatttgttcaatcaacaaattatagtcaat
+ctcccatggggccttatggcagcgtatacagctggtataacgaccatatacaactatgaa
+cggactagctgtgaactaagcagattattggatccttgtgtataattttaagtttcgatc
+tatatgctatagtatagaaaatgttccgatcgtacgcttcctttacagttaaacagtcta
+tatcatgaagcttatccaaagctggacatttgatggcaatcttacttaattatgaaactt
+aattacctattattgaaagtatttatatgatcgaataagatttgctctataaacaggtcg
+tccattcacgacctagtgattgcgtaaattgaccaacctaggtaatctaaagcctgcatc
+tatttcttatcattcatgttatactgacccgttctcagtacttaaaaatgatcgtaagca
+agaatcactcacgctcatgtcacatttagtcgaaataaactgccgatgggaaggaagttc
+cgtcattgcgatatcgatgtctatcccacgcgtcattttcaaattggttatctacggata
+actgtgcgatgaactactataggtcaaaattatcttcaatctcattctagatcatataaa
+gatgtccttcgcgattgatacgtctacagtgtgttggtgttacacagagggtagcgacta
+cttacttactaactctctcttgatccgcaagcataagccaggttaaagtgctctatcttt
+ttctgtggattataatagttataccgccttgcatctaggtgcccattaggtaatgcccta
+gtgttttcataaatttactcctgccatctaacgttactttaatttcccagattcaatagg
+tctctcatttgaaaattgttatatgtcaacaaagaatataatagctgagtggaacaatac
+actgtgagggagtaatacatactctaaattttctttacggtttgcgcctgcacagttttt
+tttatctatgtgatccgcataaaaagtaatttcaacgttccattcaagttaagtcttggt
+gacactagcattaggagagatcaccaagaccattatttatttagctagggtttaagtcgg
+ttagaaatatcagataatgaggtctttatccggccttacgcagtagaaattggaaatttc
+gtaaagcactgagttcaatggaagtatggccgaacccacataatgcacaaatcaagtcga
+tttcttccgtccttttagtctcctgggaactacgggttattcatagttaagctaaatcag
+ttaacggaactagacaaatgtataatagttcccaaatatatatctataaatcttatgcag
+ttagggaatgcagatttgaatcatggcaatacgctagctcggaactcaactacaagtgtt
+ggatgtacgaattcaaaggtattacatccttatgatgttcttttttggatacttttatga
+cgacttccacgaagtgaaattatgttcgaatatctgaacagttacttggttgagcccaag
+gatgacgaatgttctgtttataattctcgtcataatataaatacaagcatatgaggccag
+tcatggagctttcatttggactaacatttccgtagagtcatatcacgcctgtaatctgat
+ccgtctttttctattcgaagtgttatcagatacatgacgcccttgcgtgacattcatggc
+tcctgacatcgggtcttttaggctgaatctaatctaacccaatttgtttggattgtgggt
+cctccattttgtctgttaatgcttattaagattaaaaatgtactacgtatttagacctaa
+tgattgcgatacgctgtggaccattaatataagctgcgccaggggatttttccagatcat
+ctggcctgtgtatatgttcaaatctaatagccgagagaaattactccgacggaaaataaa
+ggcagataagcgtttcagagcaccatcgtggcgtttagtcaacctttagttcggaattta
+ttaatatacaatctcactctttggacgagctccttaaaagatgcccttgtatatcatgtc
+ccgtacctaaaagtataccagcatcatcaaagaacagttaaggaatacgactgctctata
+attgtccgaggagtaccttctcatctgccaatagtcgttgggttggaaaacaacgcatta
+atatgccacacttgtcaattagaagtttctataaaggggacgagtaactgatttgagacc
+tagcacggcagaggacgttcgtgtgacaacatctctttataagtttgagataaaatcgct
+aatctacaatgattatttgccaatcattatcgaatgcgcaaagtatctcctgttcgtgat
+tctagcctaaggccattactatggtcaaattatgctaatcgaagcagtcttctaacaccc
+ttagaaaagcaaacactattgaatactgccgccgcattcgccagcaccaacataactgca
+cgtgcttttttccatgattggcattatgaaagatttgatctatgattcttaccagttgca
+atattcaatttagcatgtgttcctaattattgtgttattatggtctatctcatcatgtaa
+atgaagatcatgacgtcaacacagattctagtcaggatcatcagttcctcggggaaatcg
+cacctaggaacagccttatgcaaccgctaaacaaagcaatgaggatgtaccgacaaaagc
+tcgatttaaaagcctcgaaacgagatgtacgaatcgtttactgccttttatgaggagtcg
+agtactgttggttcatatttgctacatgattgtatgtaataacgatcccgccctttatcg
+gttcgatcctttatggcgataagttatgaatcgtcagtatctttagatcaaaaactcaac
+tagtacccagttccccggaggaacggtcatgattaatgcgttttacggtctcccgtccct
+cttcttgtcagaggaatcagtttcatccgatcccactcgatgattggtatagctatttgc
+cgaaaagccacaacgtattcggtactatcttgtttgattcccctgtatcttaattcgcga
+cacttgatatcttttgtgtttaatcgacgaatcatcctgggggcgacacttgttacaatt
+atccagttgcgtttaatggctgtgggtcacaagattgttagacaggtcccgcgtgtcgta
+ggaaattgataattggagtttgcaggacgaatagctcacccgcctaagtgatccaaccct
+catcaggataactatcactgggcagtattatttttgatttcatatgccaccccctaggag
+actgtagtcatgtatctttcttacccaatctagcccgaaacaagaaagaatgtcgattcc
+agtcaccttttattagaccgatttacacacaaagtgtcttggtttaaaggctggcatgaa
+tacatactcaaaagttgaaaacgacttgctctattcgattaccttcgcgatctcaatcga
+ttacgctaaattttaatgcccgctgaaatatccaacatttaaaacaggattaattctctg
+atccatgaacttaggactcattgcacgtgacttatctttctctcttaattcatgctccaa
+tacggtgggctaaaccacttttatcacatgaatgtacgcaacgtgttaataagctatgag
+tacgcgggggcagcgaaacgggtcaatctgggtatcttctattgggacggtacatttcgg
+ttttatagactatgtagttacacggcatcaacatgtaattaaaacggcgtaacctaggaa
+agccgaacgcaccttgggattgccatgtgtccggaggattacatacatctaagaaacatt
+ctaaactatgtatagtcgtttacgacccttgtagtacgtgcatcccttggcgaaaagtac
+tctgggtattagagtgtatattatcgacagcaccgaatcctcattttatagcttgacaat
+ttatgacccgaaagaaccttttataagtctataagtatatctaacgcaattgcggcactg
+agtccactaactatctttgagcagtgttatacagtgagacgccatggaaggggtttatat
+attttactgtcgttccctaaaaagttaattatcagacctgcgcgatctcgtagatgaaca
+acgcgatctagtcgaaaaatgcttgtggctaccattccagtcgagatcaaccgtttctgc
+ggatcgcgttacattccttgcttatttgcgataaatcgatacaaccccattaccagaaaa
+acccggagaatcaattactctgcagatcttatactaaaaaagagattacaacccctgttc
+tatgtgtcccaaagtgagtaacgtggagcgttggggtaagagcggagcgattttaacttt
+cgcttttccattttccagtattgtactttacgttatatttgagcggcacattcgtcaaaa
+catgatccatatggactgaggtgtttaaatgttaatcaaataattgtattttcagctgac
+tttaaaatctgcagccattggaggtggagattccaatagatgtaagcaggtgatatcata
+tgcaattcttgtgacttattaagataccagacacggcacaatcgcagtagcacgtaaaca
+ataatgacaatcgacggttaaattccgaacgtaagatatgtttacggatgcactaaaata
+ggtagcaacaacgtttctctgagatgtataagttaccaaacactggagaattccgctaaa
+ctaaggacaatttccgtcgtattaattgttgacaaatggttagtaatacattcgcagtgg
+ataatccgttgcatacctagcactgagtgtaaataaaaccaatcgactactggcatttcg
+ggctaacgactagatgttagcctatgtgaaagcctcacacatgcttattgccttcacggt
+gagcaatgtttcttattcgttattagaagtcacctgtagagacagtagagatgacctaaa
+tttggtttgtccagtcccgaggtgatctaatgattaggttaacttagaacagtggtcaat
+tggttaaagctgatttacgaacacttccgaggggtcgtaaaacattaaactggtgagaac
+agtatgatgtattcggtcatctagacaaccccatcgctgggagtttggacagtgttatga
+ttcgtaaatccaccatgtgtccgaattcgaaatcctgttgctccggggagatagggttaa
+tttaggcttttttacggtgtggcatattagctcaaacatcaacattcttaaaatcagcgt
+aaacggtcaccagttgatatttgttctgctaggaagcgatgtacaaaataagcttaataa
+gatttaggtccgaccttaatttcggtccatagcacctctttctaagtgttttgcttaaat
+aattgtattgttattgattttctgcgagttgaacacggaaaataagtcaaaaaggacact
+tttaggttcatatgtaccgatgaatgcgcaatagaatcgagaaatttttagattagtaat
+cgtgatgattgtggccaaatcccgcactaaacggctttcgctgtttccaaaaaattttag
+tccactaggtatttaaatgttggacactgaacgtggaagccgtcgtattatgaaactaat
+ggcagaggggctcctctgcgtgtactttgagcagatgctatcgtcagaaaaaggtaaatc
+ttttggttctttataattctggcgtccgtgtagcctagtgaatgtgtttggttcaagtga
+atttgtttagccagaatggaccaattacgtcattagctgttacgtctatacgaaatatag
+actgtggacgacccatcgtagagtcatgtagttacatgtgaccttagaacaccaatcgtg
+tgcgattgtaagcaggacaacacagtattgtactggtcaattggttcatagatctgacta
+tgaatcttcgtttttgtacaacaatctcggtgaagcttcaaaaagcctccttcctaataa
+tcagttaatttttcgtaaggttcctgttcgaggttagtcgtataaagacgaaacggcctt
+aatgtaacattaactattccactgtaggtggatctaacaaggttggacatgtgctaccaa
+taagataagaatttcgtccgcaatacaatatctacttttgtagcctatcttggattaaca
+acaacttacgttggtatttcaccggacgtatcaaatgattctgattttaatgactgagag
+taaacatcaacgaatcttatgtatctttaagccgctgcttgacaagtcacattactgtta
+gaatgaacgcttcattactacaaaacctaccaccaactcccacattaatattatactaga
+tgtttgaagtttatttgacaaaggttttcaaaaagcacagaatcgttacgaacacgtaca
+ttaaattgttagggtattaattgtggtcggtgcatttccggccccatagcgctccgcggg
+gagaaactatggccttcatgacagcccccccataacatctaggtaatggtcggataacta
+taaacaaccctctccagagaactgtgaaaataaaatctcttagtacacaagcgtatactg
+gtttaagtcttgcccatcttaaagactcttttcactattttcttgatgcctcattcttct
+aatattaggtgattttttaatccgagaatataaaaagacgatagaaagtgttaaaacacg
+gcgtagcgacatattttaaagaaatgaaatactttttgactatccctcatgatctaaact
+tacgcggagctatctttttgtataacatgtacagagaattaatccgatgcttcttccgat
+taaggacatagcgccgaaaacgtcatggcggcttatcgatatcgtaacgcactataccaa
+gtgattaagtgatcaatgaatacgggtttcgggatttctgttaagtcatgcacggcaaat
+acttggagtcttgaataacgccgcgcgtagtacgaaggttctcaagctcgcgtgacgtat
+agaccgtattgctatttcctgccttctcaattgtccgaggattgctgataacttaaaata
+aggttgagtttttaataacgatttgtcgagtttgggaaaatcctcgtttgtgtgtttgtc
+attttcaagttatcaagaactacgggtataatttacgacgtaatgttggtttgatgcccg
+attgcgaatatcgtacgaatggtatttgtacaactgctttcctttatcgattgctcgaga
+acattataaagtctattactatggattaagactgtatacaagtgtttaagcggagcccgt
+gataatctataaggttttggtacctttatctgttacttttgccttgaaacatacatacgt
+acacgggaatatttacctaaacgccgtatagtccagcctcgtatttgggccgtgttttgt
+cagcattttaaactgaaagcgcccacttgcattataacccggtgcggaatctcttagtga
+ctcgtcaggagtttacgcctttgagacctctcgacaggacccattttgatctagtcgtta
+taggtagagtgcctttcctatcgcaccattaccttctagcaaacttagagtattcaatga
+aatcatatcctgtttatactaaatgttataggctaatgacacagctgacactaagaggtc
+tcttcgggttacccgaatgagttgtttatacgatgttgacaactcgggggagtcatttca
+atgaagactgaggactcttgatcagattaaaacgcttaatgactgataatttagattatg
+ccgtgtattatttaagtgggcgaaccctcccctagaatgggtttcctgagaaaagtctta
+gaacacagtattctgaatccagatgcaaatcgctaacgttagtaagcggctgtagctctt
+ggcagtttggtcaatagtcaatcgcaatccgtttaaccgtctactattcctagagcgaag
+agctatgttctgacacgtccccaatattaggcaaaggctccaaaagaacagtcaattgat
+taactacgggcttggtttctccgtgaatccttgcgccgctataccacataaaaggatagc
+ggtgataccacaagtttgcgacgttaaagcgtcgaccctcaacaagtacactagcaaccc
+cttagcaattaattttgtccatcactactgccaagagttgactggaccagttggaaatga
+catttgatatattaatagagctacatattgtaccactttactgtcacttacactaaccct
+agcgtgattactcatacatatattcgtaaattctaagttatgatactagttttgtaaatt
+taatcggcgaagacacgttctcttgtacgagcttcaactaaatatttcactgtagccaac
+cactttaaccagaaggataccttaatgccgatataatattgtccaggaaacgttaatact
+ttcacaagacaaagcttggaagaggtactttacgatcacctgatagatcgaccggaacga
+ttctatataggtttggtctgagaaatttgtagctaaaaccatgttccataggaactcctc
+tgtaatgggcaaaatgcagatagcgttcaatcgttgcttaactatctatcacagcatcct
+aactcctcaacagcttctttcctaaagacatcagcaggtaagttgacggcacccgataac
+ccagagcacgattggaatctaatactctgtatggatcattacgctaagtaaatataatga
+ttttctgactcaaagttacactgcgaattttatattaactggttctatttgttaaatacc
+acaacctctcgtcaacaggtcgcgatgcaagtgatccaaaaatatctaacttataccaac
+cattacttctggcgcagaaaaacatagatatctgaacaatcgaccgttaagactgtctcg
+ccgatcttaggaacctaatactgctcagtagttattgtttatttgggccatccccggatt
+atgtcagccatggaacactaaaagtcctaatctaacctatggacaaaaagctcactttta
+taaaattgctcaccttatgttgattgttatttgtccgaaatgtctataactcagtgtact
+atctattggaaaattatggccggagttttattgaatatacttttgtatgttgagaaagaa
+tgttgtcgtaataattatcagctggaaaatcatctaatatatattatattgagatattac
+gacagacctaagtgctttcccgtcatgagcagatggactaacactcttggtaatccttct
+cgttttagttggtaatgtttagtctaagtaatatcccgactcttacttactcagagcgga
+aatgactttttaaactaacgtttaaaggcacttagtatgcgtcagggttatttttttaat
+tacgtacccttgtgcagagagtttagctattcgatcctacttagtatgaaccatgagagt
+acaggttggtaattcacagagaaggtcgagaagattatttttgatgtttaccaatactat
+gaggcgtattcatcgaaataattttatggctgcgcacttcacatacgcaggaagaccact
+gcagcttgctagatctggatgtatcattgtacttctaagagcctgaaaggtaatacattc
+ccagcgagcgtaacagattgtatggggacatattcaatcttagcaatgcattcgttcttc
+gaaatcaggcatttttgatgtcataagttctgtcaactataaccctggaactttaatctg
+ttgttcgtcgaatcaaggatcaagaaagcttctaaaaggcccaaagcaaaacccaccact
+acttcagttttaaattagaatcacaccctagggtattagataataattaaatgtcttagg
+aagagatatcaaaagatgcagacatcctcaagtgaataagtctccggtctttcacaaaca
+catggttaagcgatgtggttttgactagagacgttcgccaccatcgtaatatttctggtt
+acctgcgaacgtgaaccaaatcttacttcatacattgcttaaacagtacaacttatctct
+tatcctatagagatctcaaaagtttgtatttttactggtttcaaattgagagaaaaactg
+cgttctccgatttctatattattgtttaaatgatgccaaacatccagtttaaaacacggt
+gtgatcagccgactcagattcgtatcctatgttagaatgagtcatcaaactacggtcacg
+cgtacattacagagtaaactacacgaatgaaagagataagaagatgaaagagttaatagg
+tctcctgttaattatgagaaccctaactactacggattggcctactagtgggttggaacg
+gatataaaattcgactaagttcgcggcatgtcaggctcctaaatatgaagagaactcggc
+atcgaattatccacagtaatagttggaacatgattcctctatgcatggtgtatatccacg
+tacgccagtgtgcagtgtagccatgcgaccacgggcgttgtgaatattcttcctcagaaa
+aggactgttgagcaaggaattggattctgtgaacggaatatagtcgagtagatggaattt
+cctacactgcgaaaaggtcatagtaaatcaaacgccgcgcgcagacatatcttcttggca
+attagtactccactaaatcaattggttataaacttttagaatatctttatataagttcac
+tacttacgctgcgggtagtatatttaaagtgatgtcttaggaatcttatggcggcggaat
+aaacggcttgactatagataccctaattctggcataaccctgtaacgtgtgaagcatgct
+ttaatagacgactagatcagcttatagaatggatatgactgccacattgaagagattaac
+attagcgggtataatgttacgaacttgtttaacaaaatagctctaccacacacgcatagt
+ataatataaaggtcctggagttcgctacgagcctggaattgcagttcccctaccctgagt
+aaacaagatcagtatggacctatcttctgacccacgtgtaaaaactaccgttagcggccc
+tgagaacggtgaagttgattatcggctaacactcgctttaccaaggaacaaacaattgat
+ggaacaggtaagcggctggattctatcctgaatacagcataataatatttgctttcaata
+tatagttatgacactcccaatatcactaactctttacaaatcggatatgaagagtgaatt
+agagatggagccgatcgttccttgtattctggtaagtactcgactaatgtgtgtagtcta
+ggggtaaaggtccttaaccgtcgagtctagaactcacgcattatgaaatcctccgagcat
+agagactctaaattcgccaagcaataagtcccgacgcgaaggatgagaagctcattgaac
+tgtaacatttacgtcgggctcaccatgttacatatgcagcgggtaaaagtttttgcctgg
+agtggttgagtttcgcgatacataaaaggccccactttcatatggtcaaatatctatatc
+gtgctttggacgactcgataaactaaagtagcctagtaatgccctaaaccgctgcatttg
+tgcaataaaaaatttagagtatatataacttccggacgtatggctgccttgaatcctcgg
+atatcgtccttatacaacgatgaacggtatagctcggaactatgcagattaggcgatcct
+tgggttgaatttttagtttccatagatatgagttagttttgatatggttaccatacgtcc
+ctgcattgaaacttaatctgtatattgattgatccttagcaatagcggcacatttctggg
+caatatgacttaattaggttacggtttttactatgatggatacgttttatatgatagaat
+aacagttgctatttaaacaggtactacattcaactaatactgtttcactattgtgtccaa
+catagggaatatattgcctgaatagatgtattatcaggcatcttttacgctccaggtaga
+actaattaaaaatgatccttagaaactttcaagcaacataagctaaaagttacgccaatt
+ataagccacatcggtaggatcttcaggcattcccatatccttctctatcaatcccgtctg
+ttgctaattggttatctaagcatatcgcggcgagcatctacgataggtataaagttgctg
+ctatctaattcgtcataatatatacatggaattacagattcatacgtcttcagtctcgtg
+gtgtttctaagagcggacccaagaattacgtaatatctctctcgtgttacccaagaagtt
+gacacgtgattgtcagctatctttttctggcgatgttaatagttataaacaattgcatat
+agctgcaaattagctaatcaaatactcgtttcttaaatgttatcagcaaagctttaggtt
+ctgtaatttcactgtgtaaagagggcgctaagttcaaaattggtttttggcaacaaacaa
+tttaatagcgcagtgcaaaaataatatctcagggtgtaattatttctctaattggtcttt
+acggttggaccaggcaatgggttttttatctatgtgataccaattaaaagtaatttcaaa
+gtgacattaaacttaagtattgctgtcaagaccattacgacacttcaccaacacatttat
+gtattgtgctacgcggtatggcccgtagtaatttctgatattgaccgcgttatcagcaag
+tacgctgtacaaatgccaaatttagtaaagctctgtgtgcattccaaggtgcccacatca
+cacattatcaacatatcatgtcgttgtattacgtccttttactagcctgggaaataccgg
+tgattcagagtgaacataaatctctgaaagctactagacaaagctagtatagttaaaata
+tatatttcttttaatattaggatctttgcgattgcacatttcaagcatcgcattaaccta
+cctccgtactcttctacaacggttgcatgtacgatttctatgcgatgaaatacttatgtt
+cttagtttggggttactttgttcacctagtcctcgaacgcaaattagcttcgaatatctg
+aaaagtgtatgcgggcaccaaaacgatctcgattcttaggtttataattatagtcagaag
+ataaatacatgcatatctggacactcttccacatgtcatgtcgactaactttgaactaca
+gtcatatatagactgttatctgatccgtatgtgtctattactactcttatctgagaaagg
+acccaatggagtcacagtaagcgatcatgtcatcggggctttttccctgattataagatt
+acactattgctgtgcttggggcctcctactttttctatcttaatcattttgtacattaaa
+aagctaagaagtaggtacaacttatctttcccatacgagctggaccattaatttaacagc
+cgcaaggcgagttttaatgttaatctggaagggctttatgttctaagcttttagcactga
+gaaattaatccgtaggaaattaatcccacataacccggtaagagaaccttacgccccgtt
+actaataatgttctgcgcaatgtaggaagtgacaagctcactcttgcgacgagctcctta
+atacaggccctgcgttatattcgaccgtacctataactagaccaccatcttaaatgtaca
+gttatggttttcgacgcatagagtatgggaccacctcgaaatgctcagctgcaaattgta
+ctgggggtggttatcaaacatttaatatgaatctatggtaaagtactagtttatagatag
+ccgaacactaaaggtttgcagaccttcctcccctgaggaacttcgtgtcacaaattagat
+tgagaaggtggtgataaaatcgcgtatctacaatgatttggtgcaaatatttatcgattg
+cccaatcgttctactcgtactctttatagcctaacgccttttcttggcgctaattagcct
+aatccaagaaggagtctaacaaaattacttaaccatactcttgtctattcggcccacgca
+tgcgcaagctcaaaaagttctcaacgggcgtttttacttgagtcccaggaggtaacattg
+gatctatgagtcttaacagtggaaatatgatttttagattgtgttcagatttattgtctt
+attttggtctatctcatcagctatagctacataatgacgtcttaactgtttcgactaacc
+ttcagatctgactaccccaaatacaacatagcaaaagaatgatgctaacgcttaactatc
+ctttcacgatcttaacaaaaaagctccatttaaaagaatcgaaaacagatctaccattcg
+tggaatcaatttttggacgagtactggtcgggtcgtgcttatttgctacaggattgtttc
+gtataacgttcaagcactttagcggttccatccttgatggcgttaactgatgatgcgtaa
+gtttatggtgatctaaaactctactacgaaccaggtcccagcacgaaacgtcatctttaa
+tgagtttttaggtctccaggcactaggctgcgaagtggaatatgtgtcatcagagacaaa
+tagatgattcctatagctttttgcagttaagccactaagtaggcggttctatagggtttc
+attcaaatcgatcgtaattcccgactctgcatagcgtgggtcttgtatagaccattcttc
+aggcccgccacaatggtttcaagtttcaacttccgtttattggctgtccctcaatagagt
+cgttctcagggcacgactctcgttcgttattcataagtccagtttgatccacgaatacag
+aacacgcatatctgataataaaagcttaacgataactttcacgcgcatggtttatttttg
+atttattaggcaaccaaataccagaatgtagtcagcgatatgtagtaaaatttagacaaa
+cataaaacaaagtatcgccattacagtctcctgttaggagaacctttttatcaatatgtg
+taggcgtgtattggcgcccttgatttaataataattacggctaaacgtattgatattttc
+caggaactgccccatctcatgagatgaccctaaattttattcacacctcatttttaattc
+ttttatatcacgattatttatctgagcaagcatctttgcaagcattcatagtgacggtgc
+tgtctctatgaatgcatgctaatatacggtgcgctaaacatattggttcaattcaatgta
+agctacctcggaatttgcttgcactaagacggggaagccaaaacggtaaatcgccgtata
+tgctagtgccaagggacttgtccgttggagtcactatggagttacaagcattataaatct
+aaggaaatcgcagtatcagtccttaccccaaagatacttcgcattccctggggtacggac
+catgaaatacttctttcatacatgataaacgatggagactcggttaccaccctggtagtt
+actccatcaattggagttaactaagatcgctattacaggctttattagccaatcatcaca
+agcctctttttagagattcacaagttagcaaaccaaagttcctttgataagtctttaacg
+agatctatcccaattccggctaggagtaaaatttatatatttgagatcggggttaaagtc
+acacgcaatgcaaggggtttttatatggtaatgtccttccctaattaggtaattttcaga
+cctccgagagagagtagatcaacaacgcgttatactcctaaaatgcttgtcgataacatg
+acactacagatcatccctggatgagcatcgactttcattacttgattagttcagttaatt
+cgtttcaaaccattttcaacaaaatcccccagtagatatgtatatgcacatcttagacta
+aataacagttttcataccctgggatttgtgtcactatctcaggaacgtcgagacgtcccc
+tatcaccgcagcgagggtaactggccctgttccattgtaatcgatgggacgggacgttat
+attgcagacccaaagtagtaataaattcagccatatggacggagggggggaattgttaag
+aatataattcgattttcagctgaatgtaaaagctccagccattcctcctccacttgacat
+tagttcgaagaaggtctgagaattggaattgcttgtgacgttttttgtttccagacaagg
+aaatagcccagtaccaagtataatattatgacaatagaagcttaaattcacaacgtaaca
+tatctgttagcatgctctaatagaccgagaaaataagtgtctatgtgtgcgagaactgtc
+aattcacggcagtagtcacctaatctaacgtctagttcccgactatgaagtcttcacaaa
+tggttagtaataatttcccagtggagtagaagtggcataacgtgcactctctgttaataa
+tacctttagactactcccatttcgccagaacgtcttgatggtaccctatgggaaacactc
+acacatgcttattgcctgcaacctcagcaatgtgtcgtatgcggtatttctacgaacagc
+tagtgaaaggactgatgacctaattttggtttctcaagtccagacgtgatattttgatga
+ccgtatctgacatctctgggcaattcggttaacctctggtacgaaatagtccgtcgcgta
+ggtaaaaatgataatgctgtcatcactatcatgttttagctaagctacactaccccatcg
+ctcgcacgtggcaaagtgtgaggattccgatatcatccatgtgtacgaattcctaatact
+cttgctcagggcacttagggttattgtagcctgtgttaccgtctcgcatattagatcatt
+aatcaacagtcttataatcaccgtaatcggtaaacagttgttatttgttctgataggtag
+acagctaataaagatgctgttgaacagttacgtcccacctttattgccctacagtgaaac
+tagttcttactctgttgctgtaatatgtctagggttattgatttgctgccacttcaaaac
+ggaaattaagtcattaacgaaaatggttccttcataggtaaagatcaatccccaattgaa
+gccagaaattttgagatgtcgattcctgatcattcgccaaatttacagctcgtaaacgag
+ttccatgtgtaaaaaaatgttgagtccactagcttgtttattctggctcaaggtacgtgg
+aacacgtagtattttgatactaatgccagacccgctacgatccctgtactgtgagcagag
+ccgatcctcagaaatagctaaatcttgtgcttcgttagaagtctcgactacgtgtagcct
+agtgtttgtgttgcgttatagtctatttgtggacacagtatggtcaaatgacgtcttttg
+atctgacggcgttaacaaagatactctgggcaacacacatacttctctcatgttgtttct
+tcggacctttcataacctttcctggcacatggttagctgcacatcacaggattgtaaggg
+tctagtggttcagtgagcggaatatcattcgtcggtggtgttaatctatctcggtgtagc
+ttataaatgcatccgtaagaatattatgtttatttgtcggtacgttcatggtagtggtgt
+cgccgatttagacgtaaaggcatgtatggatcttgatctatgcaaaggtaggtccatcta
+tatacgttgcacagcggatacaaataagataagaatttactaacatttaaattttcttat
+tgtcgagcatagattggaggaaaaacttatttacttggtatttaaacggaagtttctaat
+gtttatgattggatgcacggacagtttactgcttactttcttaggtttcttgaacaacag
+gatgcactagtaacatgtctcgttcatgcttccattaagttcttcttaaacttacacaaa
+ctacctaatttagagttgacgagatggttgaacgtgttgtgacaaacgtttgcaaaatgc
+acagtatcgttaccaaaaagtacatttaagtgtgtgcgtaggaattctgctacgtccatt
+gcaggccacattcacatcccacccctgaatatatggactgaatcacacacaccaaatttc
+atctaccttatcgtagcataactattaacaaacatatacagacttcgcggtaaataaaat
+atattagtacacaaccgtatactggttgaactattgcccagctttaagacgcttttaact
+aggtgcttgatcaagaagtattattatatgacggcagtgtgtaatacctgaatagatata
+gacgttagattgtctgaaaacacgccgtagagacatttttgttagatatgtatttctttt
+tgacgagccagcatcttagtatctgaagacgagctatatgtttgtagaaaatcgactgac
+attgtatacgaggcggcgtaagattaaccaaattccccagaattagtaatggcgccttat
+cgatttactaacgatatataacttgtgatgttgtctgcaatgtatacccgtgtaggctgt
+gctcttatcgaaggaaacgcattgaagtccaggctggatgaaaccaccgcgtacttccat
+gcgtctatacatagcgtcaccgatactacgttttgctatgtaatccattctaatgggtaa
+gaggattcctcttatagtaaaatatgcttgactttttaagaaccattgggagtggttggc
+aaaataatagtgggtgtctttctcagtgtatagttttctacaactacccctattaggtta
+caagtaatctggctttcttgccacttggcgatgatagttagattcgtatttctacaacgc
+agttactgtatccatggcgcgagataattagatacgatttgaatttggatgtagactcgt
+tactactgttgtagaccagcacgtgagtatctagatgggtttgctaccttgttagcggac
+ttttgccgggaaaaagacatacgtacaaccgtatattttactataagcagtattggccac
+cctcgtattgcggcagggtgtgctcacctggttaaaatgaaagagaaaaattccatttta
+aaacccggaggaatctattactgacgaggaaggtgtttaacccgttgagacatctcctaa
+cgtaaaaggttcatattctagttattccgagagtcactttcctatccaaacatgaactga
+tagcataatgacaggttgaatggaaagcatatcctgtttattctaaatctgtttcgctaa
+tcaatatgctgtcacgaactcggagcttacccttacaactatgtgttctgtttaccaggt
+gctaatatcccggcactcttttcatgcatgtcgctcctagcgtcatctgatttaatagct
+taatgtctcatattttacagtagccagtgtagtatggaaggcggcgaaccagcccctaca
+ttgggtttcctgacataagtattacatatcacttgtctgattacacagcaaaatcgctaa
+ccttactttgcgcatgtagctattggaactttgggctagtgtctatcccattaagtttaa
+cagtagactagtccgtgagcgatcaccgagcttatgtctcgtacccaagttttggatttg
+gatcaaaaactactcgatattcatgatctacgggcttcctttctccgggtatcattgcgc
+cgagattaaaaataaaacgatagcgctgtgaaaacatgtttgacacgggatagcgtagaa
+actaaacaacgaatagaccatccaatttgaattttattgggtccagcacttcgccatagt
+gttgaatggtaaagttcgaaaggaaatttgttatattaattctgctacattttcgaccac
+ttgtatctcaaggacaatatcccttgaggcttttagcagaaagagatgccgtaattctaa
+gggatgataataggttgggaaatttaagagcagtagtaacggtcgcgggttcgaccttaa
+actatatatttaaatctagccaaacaagttaacaacaaccataaagttatgaccttatta
+tattggcaagcttaacgttttaattgctctagtaatagagtggtagaggtaagggaccat
+cacctgattcttcctccgcaaccattatatagacgtgtcgtctgacaaatttcgagataa
+aacattcgtccttagcaacgaatatcgaatggcaattagccacattgagttaaatagttg
+aggatatttcttgcacagaatcagatctaatctaatgattcgttactaaacacttcacca
+ggtatcgtgaaggctcaagattacccagagaacctttgcaatataagaatatgtatgcag
+cattaccctaagtaattatattctttttctgactcaaagtgacaagccctagtgtatatt
+aaatcggtatatttgggaaattcctcaaactatcctaatcaggtagccatgaaagtgatc
+aaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaatagattgcgcaa
+aattcgtaccttaagtctctcgccaagatattaggatcctattactcatatcgtgttttt
+ctttattgccgccatccccggagtatctcacccatccttctcttaaaggcctaatattac
+ctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgattcttatgtgtac
+catatgtatagtaatcacgcgactatatagtgctttagtatcgcccgtgggtgagtgaat
+attctgggctagcgtgagatagtttcttgtcctaatatttttcagatcgaatagcttcta
+tttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtcatgaccagatcc
+acgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtctaacttatatcc
+cgtcgcttactttctaacaccccttatgtatttttaaaattacgtttattcgaacgtact
+tggcggaagcgttattttttgaagtaagttacattgggcagactcttgacattttcgata
+cgactttctttcatccatcacaggactcgttcgtattgatatcagaagctcgtgatgatt
+agttgtcttctttaccaatactttgaggcctattctgcgaaatttttgttgccctgcgaa
+cttcacataccaaggaacacctcgcaacatgccttcatatccatcgttcattgtaattct
+tacacaatgaatcctaagtaattacatccctgcgtaaaagatggtaggggcactgaggat
+atattaccaagcatttagttatgagtaatcagcaatgtttcttgtattaagttctctaaa
+atagttacatcgtaatgttatctcgggttccgcgaataaacgagatagattcattatata
+tggccctaagcaaaaacctcctcgtattctgttggtaattagaatcacacaatacgggtt
+gagatattaattatttgtagtacgaagagatataaaaagatgaacaattactcaagtcaa
+gatgtatacgggatttataataaaaatcgggtagagatctgctttgcaattcagacgtgc
+cactaaatcgtaatatgtcgcgttacatcagaaagggtaactattattaattaataaagg
+gcttaatcactacatattagatcttatccgatagtcttatctattcgttgtatttttaag
+cggttctaattcagtcattatatcagtgctccgagttctttattattgttttaaggatga
+caaaatgcctcttgttataacgctgggagaagcagactaagagtcggagcagttggtaga
+atgaggctgcaaaagacggtctcgacgaatggacagactttactaaaccaatgaaagaca
+gaagtagagcaaagtctgaagtggtatcagcttaattatgacaacccttaatacttccct
+ttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttagaggcatctctcgc
+tcataaataggtagactactcgcaatccaatgtgactatgtaatactgggaacatcagtc
+cgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacatgagaccaccccc
+gtggggattattagtccgcagtaatcgactcttgacaatccttttcgattatgtcatagc
+aatttacgacagttcagcgaagtgactactcggcgaaatggtattactaaagcattcgaa
+cccacatgaatgtgattcttggcaatttctaatccactaaagcttttccgttgaatctgg
+ttgtagatatttatataagttcactaattaagatcacggtagtatattgatagtgatgtc
+tttgcaagaggttggccgaggaatttacggattctctattgatacaatttgtctggctta
+taactcttaaggctgaaccaggcgtttttagacgacttgatcagctgttagaatggtttg
+gactccctctttcatgtcagtaacatttcagccgttattgttacgatatgcttgaacaat
+attgatctaccacacacccatagtatattttataggtcatgctgttacctacgagcatgg
+tattccacttcccattcaatgagtattcaacatcactagcctcagagatgatgacccacc
+tctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagacgatatcaagcgc
+tttaaattgcatataacatttgagggtaaagctaagcggatgctttatataatcaatact
+caataataagatttgattgcattttagagttatgacacgacatagttcactaacgagtta
+ctattcccagatctagactgaagtactgatcgagacgatccttacgtcgatgatcgttag
+ttatcgacttaggtcgggtctctagcggtattggtacttaaccggacactatactaataa
+cccatgatcaaagcataacagaatacagacgataatttcgccaacatatatgtacagacc
+ccaagcatgagaagctcattgaaagctatcattgaagtcccgctcacaatgtgtcttttc
+cagacggtttaactggttcccgggagtcctggagtttcgacttacataaatggaaacaat
+gtattttgctaatttatctatagcgtcatttggaccaatacagaatattatgttgcctag
+taatccactataacccgcaagtgctgatagaaaatttttagacgatttataaatgcccca
+agtatccctcccgtgaatcctccgttatactaattagtattcgttcatacgtataccgcg
+catatatgaacatttggcgataaggcgcgtgaattgttacgtgacagagatagcagtttc
+ttgtgatatggttaacagacgtacatgaagggaaactttatatctatagtgatgcttccg
+tagaaataccgccactggtctgccaatgatgaagtatgtagctttaggtttgtactatga
+ggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgacgaatttatacta
+atacgctttcactattggctacaaaatagggaagagtttcaatcatgagagggagtatat
+ggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcattcttgaaagata
+cataagcgataagttacgacaattataagcaacatccctaccttcgtaacgatttcactg
+ttactgcgcttgaaatacactatggggctattggcggagagaagcagatcgcgccgagca
+tatacgagacctataatgttgatgatagagaaggcgtctgaattgatacatcgaagtaca
+ctttctttcgtagtatctctcgtcctctttctatctccggacacaagaattaagttatat
+atatagagtcttaccaatcatgttgaatcctgattctcagagttctttggcgggccttgt
+gatgactgagaaacaatgcaatattgctccaaatttcctaagcaaattctcggttatgtt
+atgttatcagcaaagcgttacgttatgttatttaaatctggaatgacggagcgaagttct
+tatgtcggtgtgggaataattcttttgaagacagcactccttaaataatatcgctccgtg
+tttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtggtgtatatatcgg
+ataacaattaatacgatgttcatagtgacagtatactgatcgagtcctctaaagtcaatt
+acctcacttaacaatctcattgatgttgtgtcattcccggtatcgcccgtagtatgtgct
+ctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgttaggtaagatctct
+ctgaattccttcgtgccaacttaaaacattatcaaaatttcttctacttggattaactac
+ttttacgagcatggcaaattcccctgtggaagacggttcattattatcggaaaccttata
+gaaattgcgtgttgactgaaattagatttttattgtaagagttgcatctttgcgattcct
+ctggtctagcttccaatgaacagtcctcccttctattcgacatcgggtccttcgtacatg
+tctttgcgatgtaataattaggttcggagtgtggccttaatgggtgcaactaggaataca
+acgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaacgtgctccttgct
+tagcttgtgaatgagactcagtagttaaataaatccatatctgcaatcgattccacaggt
+attgtccactatctttgaactactctaagagatacaagcttagctgagaccgaggtgtat
+atgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcgagaagctaatacc
+ggctgtttccagctttataagattaaaatttggctgtcctggcggcctcagaattgttct
+atcgtaatcagttggttcattaattagctaagtacgaggtacaacttatctgtcccagaa
+cagctccacaagtttttttacagccgaaacccctgtgtgaatcttaatatccaagcgcgt
+tatctgattagagtttacaactcagtattttatcagtacgttttgtttccaacattaccc
+ggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgtaggaagtgaaaag
+ataaatattgcctacacatactgaattcaggcaatgcgttttattcgaaaggtcatataa
+ctagaaaacatgatgaattcttatcggatccttttactagcatagtgttggcgaacacct
+cgtaatgctcagcggcaaattggactgcgggtccttatcatacattttttttcaatatag
+gcgattggtctaggttagtgattccccaacacttaaggtttgctgacattcataccctca
+gcaacttcctctcaaaaattagagtgagttggtggtcttataagaccgttgattatttga
+ggtggtcaaatgatggtgcgatgcacaaatcgttataatcgtactctgtagacaataacc
+cattgtagtgccgattttgtgcataatacaagaaggaggatataaaaatgacttttcaat
+aatattggctattagcaacaagaaggagaatcctcattaagttagcaaccgcagggggta
+ctgcagtccaaggaggtttcattggagagagcagtatgaaaacggcaattatgattgtga
+gattcgctgaagattgtgtctctgattttcctagatagaataagctatagctacttaatc
+aactcttaactgtggagactatcctgatgatctgaataccccatttacaaaattccatat
+caatgaggctaacgcttaaatttcatttctccatcgtaacaaaaatcagcctttttatac
+aagacaaaacactgcttccattacgggtagcaatggttgctcgactactggtagcgtcgt
+gatgtggtgataaagctgtcttgcgtttatacttaaacaaattttgacctgacataatgg
+agcgacttatcggatgttgccgatctttagggtcatctattaagcttatacgaaaaaggg
+acaagcacgttacgtaatctggtaggactgggtacctagaaacgcaagaggaggcgaact
+ccaatatctgtaagaacagaaaaatacaggagtccttttcatttttcaagttaacaatat
+aagtaggagcttagagaggcttgcatgaaaatcgttaggaattacagaataggcagagag
+tggggcgtgtagactacattcttcaggccccacaatatgggttataggttaaactgcact
+ttttgcgatctcccgaaatactgtcgttctctgcgaaccacgctcgttccttttgctgta
+gtccacgttcatccaactattcagataaacaagatcgcagaattaaagcttaaccatatc
+ttgatagcccatcgtgtatggggcatgtatgtgcaaacaaaagacctcaatcttgtctgc
+gagagggaggaaaatttagacaaacataattcattctttcgactggacacgctaaggttt
+ggacaaactttgtatctatatctggaggcctgtattccagcccttcttttaataagattt
+acggcttaaactatggatatttgccaggaaatgacactgctattgacaggaacataattt
+tgattcaaacctcattgttaattattttatatctcctgtttttatatcagaatgcttctg
+tcctagaaggcatactcaaggtgagggctcgaggaatgaatcataatagaccggccccta
+ttaatattggttcaattctttcttacataacgcggaatttgattgcacgaacaccgggaa
+cacataaccgtatagcgcccgttatgctagtgcctagcgactgggaccgtggagtctata
+tcgtctttctaccattattaatctaaggatataccactttaagtcctttcaactaacata
+aggcgcattccatgcgctaaggaccttgaatttattatttcttacatgataaaagatcga
+gtcgacgggaacaaaaggctacgtactcaataaagtgcagtttactaagagccctttttc
+tggcttgtggagactatcataacatgaagatgttttgacattcaatagtttgcaaaacaa
+acttactttgtgtagtattgaacgagatctttccaattgccccatagcaggaatagttat
+atattgcagatcgcggtgtaacgcactccaaatccatcgcggtgtgtgagggtaagcgac
+ttaaagaattacggtttttgatcaaagcacagtgagagttgagcaaattacagttatacg
+acttaattcagtctccataaattgaaacgacacttcttaacgggaggaccagacacgttc
+attaagtgaggagtgcactttttgactttaaaaacatggtaatcaatttaaaccacttga
+tatgtatatgaacagatttgaagttatttctgttttaatacactgggagttctgtcaata
+tcgcaggaaccgcctgacgtcccctatcacacctcagagggtaaagggacaggggaaagg
+gtaatcgaggggtagggaacgtagttggcacacccaatggacgaataaatgctgccatat
+ccacggagggcgggattgcggttgattttaaggcgatggtaacctgaatgtaatagatca
+tcaaatgcctcctccactggaaattactgcgtacatccgctgagaattgcaatggagtgt
+ctcggtttttctttaaacaaaaccaaattgacaacttcatagtataatttttgcacatta
+caagcgttaattaacaaacttactttgctgttagctgcctatatttgtccgacaatataa
+ctggatatctctgcgagaactgtaaattaacggcacttggaacataatagttcctattgg
+taacgacgttgtaggcggcaattatccggtggaagaattgacaactgcagttgaactgca
+tgaaagtcaaatctctcgtaagtataactttagaagactccaaggtacccagaacctctt
+cagcggacacgatcgctatcaatcaataaggattattcactgaaaccgctcatatctgga
+ggtggacgtttttcttcgaaaagcttgtcaaaggactcatcaaatttttggccgtgctaa
+tcgacacacctgttattttcatgaccggataggacatctcgcggaaattcgggtaacagc
+tgggtagatataggacctcccctacgtattaatgataagcctgtcataactagcttggtt
+taccgaagagacaataaacattcgagcgctcgtgccaaactcggtgcattacgtttgaat
+aaatcggtaacatgtactattactctgcctaacggcacttacccgtttgggtccatgggg
+taaccgctcgatgttgacagaattatgctaaagtcgtttaagatcccgattaccgaaaat
+ctggttatgtctgagcattcgtacactgcgtattaagatcaggttgaacaggttcctaac
+aaattttgtgacctaaagtgaaactaggtcgtactctgggcatgttttatgtcgtggcgt
+atgcatgtgctgacacttctaaaaccaaattaaggctttatccaatatgggtccttaagt
+gctaaacatcattcacaatttcaagacagattgttggtcttgtcgattccgcatctgtcg
+ccaaattgacacatcgtaaaccaggtacatcggtaattatatgttgactaaactaccgtg
+tgtattctggctctaggtacggcgaacaagtacgatgtgcttaagaagccctcaccccag
+acgagcccgcgtaggtcacatcagcagatcctaagtaattccgttttattgtcctgaggg
+agtaggatcgacgaactctacaagtcgctttgtcgtgccttataggctatttcgggtcaa
+tgtagcgtcaaatgaactattgtcatctgtacgagttaactaagtgtctatcgccaacta
+aaagacgtctcgatggttctttatgcggacctgtcatatcattgactggcacttgcttac
+atccaaataacacgtttgttagcggatagtcgttaagtgtgcgcaagatcatgaggcggg
+gggggtaatatttcgccctctacatgataaatgaataagtaagaagatgatctttttgtg
+gcggtaccttaagcgtactcctgtcgacgagttactactaaaggaatgtagggttctgga
+tctatgaaaagcgacctccatatatatacgggcctaagcggagtaaaataagtgatcaat
+ggactaacattgaaatgttagtattgtcgaccattgagggctggtaaatcttatttacgg
+gcgtgggaaaacgaacgtgatatggtttagcatgggatgcaagcactcgttaatgcttac
+tttagttggttgcgggaacaacaggaggctatactaactggtagcgttcttgcttccatt
+atgttattattataattaaaaataagacatatggtagagttgtagtcagggtggatcggg
+ttgtctataacgttggaataatcaaaactatcgttaacaaaaacgaaatttaagtcggtg
+cggtggaatgcgcctacctcatgtgcaccacacattcacagcacacccctcattataggc
+aaggaagcaaacaaaaaaaagttaatcgaccgtatccgaccttaaattttaaaataaata
+gaaacacttagcggtaatgaaaagataggactaaaattcactagtatcctggaacgaggc
+aacagagttatctagatggtaacgaggtgctgcatcaagatgtatgatttttggtccgct
+gtgtggaatacctctattgatatacaagtgactttctcggtaataacgcacttcacaatg
+tgttgtttcttttctatgtattttgcaagagaaagaagcttagtataggtacacctcaga
+gatgtttcgtgtaaatcgtatcacatggtataactgcaggaggaacattatccaaattca
+ccacaattactaatccacccttttacttttactaaagatatattaattctcatgttgtct
+gaattgtataacccggtaccctgggagcgtatcgaaggataccaattgaagtcctcgagg
+catgttacaacacacgacttccttccgtctattcagacactcaacgagactaacttttcc
+taggtaatcaatgatattgggtaactcgtggcatcttatagttattgatccggctctttt
+gtagatcctgtgcgactcgtgcgctaattaagactggctctcttgcgcaggggatacgtt
+tattctacgtacccgatttggttactactaagcggcctttcttcaaacttgcagttgtga
+cttacattcctatttcttcaaagcagggaagggttacagggagagacttattgagatacg
+attggaatttccatgtacaatcgttaatacgcttgtagaccagcaactcagtatagagat
+ccgtttcctaaagggtgagcggtaggggcaaggcaataagaaattactaaaaccctagtt
+gttaatataagaacgattcgaaacaataggattgcccaagggggtgcgaacatggtgtaa
+atcaaagagaaataggcattgttaaaacccgcacgtttctagtacgcaagaggaacgtcg
+gtaaccagttctcaaagatcctaacctaaaaggggcttattctactttttccgacactca
+atggacgagacaaacatgaacggatagctttaggtctcgttgaatgcaaagaatagaatc
+gttattattaatcggtttccattatctatatgcggtatagatctccgagaggaccctgta
+aactagctctgcggtttaactggtgctaatagaccgccactatgttattgcttctagctc
+ctagcgtcttatcatgttatacattaatgtcgcatattggacagtagccaggcttggatg
+gatcgccgacaaaaagaaaagactttccctgtaaggacttaactattacatataacttgg
+atcattaatctgcaaattagagtaacggtctttcaccagcttcatattccaacgtggcgc
+tagtcgatatcccatgaagtttaaaactagaattggcagtctcacttcacagtgcgtatc
+tatacgacaaaagtggtcgatttgcataaatatcttatcgatattcaggttattaccgat
+tccttgctaacgctagaagtcacaccagagtaataataattccagacacctgtgaaataa
+tcggtcactacggatagactagtaacgataatacgtatagtccataaaagttgaatttta
+ggggctaaagatattagcaatactggtctagcctaatcgtcgatagcaaagggctgtgag
+gatttctcctacattttcgaccaattgtatcgataggaatagttacagtcacgcttgtag
+atgtaagagatgacgttattcttagggttcttaagtcggggggtaatttaagaccactag
+taaaggtagaggcgtacacagtaaacgatattttgaaatcgtcaaaaaaaagtttacaac
+atcctttaagttagcaactgattttagtggcaaccttaacggttgaattgatctactaat
+acaggcctacaccgaagggtacagataatgattcttactaccctaacatgatagagtcct
+gtcctatctcataggtcgacattttaaattcgtaatgagcaacgaagatcgtttcccaat
+ttgcaacattcacttatagacttcaggttatttcgtgctaacattaagatagaatataat
+cagtcgttaagaaactattatccagctttcgtcaaccataaagattaaaaactgaaactt
+ggcaagatatgaatagctatcctgctttaaccgatcgtatgagatgctttgtagcaagaa
+aagtgactagcacttgtgtttagtaaagcgggagagtgcggtaattaatattaatatact
+attaagctacacagcaaaggctgcaataatgttagtaagtagaacataaaggtattctcc
+acaagtaataaatagtgtgagctaattgactaacttaactctcgcgacaagtgatgtgga
+taagatgactcatatcgtctttttctgtagtgccgacatcccacctggatcgaacaattc
+cttctagttatcgactttgattacctatcctattaaacagatagggttgtaaagtcagaa
+aatgatcggcttgcgttggtctaccatagctagagttagaacgcgtagatagaggccttt
+tgttgccaacgtgggggtgggatgagtctgggcgagcgtgactttctttcgtgtccgaat
+ttgtttaacatccattagattagatgtttgtgttttgggtctgatgtcctaactactttc
+tcagtgaaactaatgtcatcatccaagtaaaatagtccgatgaagtctccgttttcggcc
+gaagcttgtctataacgtatataaagtcgctgaatttagaacacaccttatctatgttgt
+aaagttactttattccaaaggacgtgcacgaagcgtgagtgtgggaaggaacttaaagtc
+ggatcactcttgtcagtgtagataagaatttctttcatacttcactggaatccggcgtat
+ggatatctctaccgcgtcatctggtggtgtctgcggtaaaaagtcttgctgcacgagtct
+gagaaatttttggtgccatcacatcgtaactgtacaacgaacaaatagcatcaggccttc
+ttatccagcgtgaagtctaattatttcacaagctttcctaagtatgtaaatccctcactt
+aatgatgcttgcgccaatgaggatagaggacattgcatgtacgtaggactattctccaag
+gggtcttctattttgttagcgaaaattgttacagcctaatgttagagcggcgtacgactt
+tataccagatactttcattagatatgcaaatatccaattaaatcatagtagtatcgtggt
+atggacaatcaaaaaagacccgttgtgatatgatgtttttctagttcgttctcatatata
+tagatcaacaatgaataatctcatgatctataaccgatgtatatttatattccggttgac
+tgctccggtgcaattcactacggacactaatgactaatatggcgcctttcatcagaaacg
+ctaaatatgattaatgaattaagggagtattatctaattattagagagtagcagttagtc
+tgatattttcggtgtatgtgttagccgttataatgctgtctttttatcagtgagaacagg
+gagtgtgtagtgttgtatgcttcactttatgactctggttatatccctcggagaacaaga
+ataagagtacgagaagttcggtcattgaggatgaaatagaaccgctagacgaatggactc
+acgtttataaaactatgtatcacagtactacagctaactctgaagtccgagaagcttttg
+taggacaaaacgttataagtacctttcgcagaatacggccgtgcatacctgttataaggc
+gtagtagggacaccatgctatccctcatatagagctacactaataccattacatggtgac
+tatcgtttacggccatcatctgtaagcgatcatgcctcgttagcatccgtacaatctcgc
+atggcgtcactgcagaaaaaccccgtgcggattttgagtcagaactattcgaagcttctc
+aatccttttccattatggcatagcaagtgacgactcgtcagccatgggaataatagcact
+aatccgattacttatgaattagaacccacatgaatgtgattctgcgaattgtctaagaat
+ctaatgattttccggtgaatatggttgttgttatttattgaacttatattattaacatca
+cccttcgttagtgatagtcagctatttccaagaggttccccgagcatttttaccattctc
+tagtcatacaagttggagcgcttttaaatctttaggctgatcaaggcgttttgtctagaa
+ttctgcagatgttagattcgtgtgcaatccctcttgcatgtcagtaacaggtcacccgtt
+tttcgttacatatgctggtaaaatattcatagtaataactacaatacttgatttgttacg
+taatgctcgtacataacacaatcgtattccacggaacagtaaagctctattattctgatc
+gagcctaagagaggatcacactacgctattaaagtcacgttcacgaaatctcaaacctca
+actgctggtgaccagttatagacagtgtaattccatattacatgtcaggcttaagctaac
+ccgagcctttatataagctataatcaagaattagattggagtgcattttagacttatcta
+tcgaaatagtgatagtaagagtttatatgacctgatctagactgatgttctcttccacaa
+cagccttaaggcgtggagcctttcttatactattaggtcgcgtcgagagccctattcgta
+atgttaacgacactagactaatatacaatgagctaagaataacacaagtcacaagataat
+ttacaaatcatatatctacagtccacaaccatcactagcgattgcaaagcgttattggta
+ctaccgctctaaatcggtatgtgcaagacgcgttaactggttcaagcctctcctgctcgt
+gagactgaaagaaatcgaaaatatggatgtgcctaattgttcttgtgagtcatgtgcaac
+tatacagtttagtttggtcaagactatgcaactattaacagcatgtgcgcattgaatatt
+tggtgtcgattgataaatgccccaacgttccatcacgtctataagccgtgttactaatgt
+gtattagtgcatacctattcagaccatagttcaactgttggactgaaggcccgtcttggg
+gttcgtgaatgagagtgcagtttcttgtcttttccttaactgacctaaatgaaggcaatc
+ggtttatctagagtcatgcttaaggtgaatttcagccaatgggctcccattgagctagta
+tggtgctttacctttgtaagtggtggctttccttggtgtgctgactttaacacggcagag
+tgattatccgaagaatggataataagacgctggcaatattggctaataaagtccgatgag
+tttcaatcatgactgcgaggagatccatgcggtgtacctaaacctacatcgtatgtattt
+gctgacgttcattcttgatacataaagatccgatatcggtccactttgtttaccaaaagc
+cctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatggggatattgccg
+gtgagtacaagttagaccacacattagaactgacctatattcgtcatcatagagatggag
+tatgaattgattctgcgaagtacactggctttacgagtatctagacgccgcggtatatct
+cccgtcaatactatgaaggtatatatatagaggctgaaaattcatgttcaatcctctttc
+taagagtgagtgggagccccttctgttgtcggagtaaaaaggcattattcctcaaattgt
+cagaagcaaagtatacgtgatgtttgcttagaacaaaagagttaccttagggtaggtaaa
+tctcgattcaccgagagaagtgattttggcggtgtgcgattaattcttttgatgacagat
+ctcattattttatatagctccctctttgtatttagagtttgcgtaggtaacctggcaaaa
+ccatatcccggggggagagtgcgctgaacattttatacgatgtgattactcaaaggataa
+ggttcgaggcctctatactcatggaactatcttataattataatggatcgtggctcattc
+cacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaacgtacatcttcta
+aggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaaatatttttaaaa
+attgattctactgcgaggaactaaggtgtagacaagcccttagtaaccggtggatgtcgc
+ttcagttttatagcaaacattattcaatttcagtcttgactgaaattagtttgttagtgt
+tagaggtccatatgtcacatgcatatggtctagatgccattgtacagtaataccttagat
+tagtattagcggcatgcgtacttggatttcacttgtaagaatgagcttaggacggtcgcc
+tgtagggctgcaaataggaatacttacaatttttgatgacttgttagcatatcgctatca
+cccataaaaaacctgatacttgatgagcgggtgattgagactatgtactgatataattca
+atagctccaatagatgaaacagctatgcgcctatttatgtcaaataatcgatgtgataca
+agcttagagctgaacgagcgcgagtggaattagcggtgatctctatcctaaaaagccacg
+aaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagttaaatttgcatc
+tcatgccccacgaagaatgggtagagagtttgaaggtgcttctggattttcctaagtacg
+tggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaaccacaaacccctgg
+gtgaatctgattagccaacccagtgatctgatttcagttgtcaaatctcttttttataac
+taccttttgtttccataatttaaccggatctcataatgaacaaacgggtagaataatggt
+agcacatagcgagcttgtctattcagaaatatggcctactcagaatgtattctccaaatc
+agtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttatcggttccttgta
+ctacaatactcttgcccaacaaatactaagcataacagcaaaattcgaatccccctcctt
+ttaataaatggtttttcaatatagccgattcgtattcgttagtctttcaccaactattaa
+cctggcatctaattaataaaatcaccaaaggactctataatatgacagtcacttcggcct
+cttttaagacagttgattattgcaggtccgcaattgatggtgacatgcacaattagttag
+aatccgactatggagacaattaacaattgtagtgcccatttggtccagttgacttcaacc
+acgagttataaaggtattttaatttatagtcgatagtaccaacaacaagcacaatcataa
+ttatgttagaaaacccagggggtaatgctctaaatccagctttaaggccagagtgcacta
+tgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctaggaggtgccgagtg
+agaatatcagataccttatgaagcaacgattatatctggactagatcatgatgatcggaa
+taaaacattgaaataagtccttatcaaggagcataaacattttatttaatttatacttcg
+taaataaattcagaattttttttcaagacattaatctgagtaaatgacggctagaaaggg
+ttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgcgtttttactgaa
+acaaaggttcaccggaaagaaggctgccacttttagcttcttgacgatctttagcgtcat
+atttttagattagtcgaaaaacggaaaacaaacttaacgaagctggttgcacggggtacc
+gagaaaccaaagagcaggacaactccttgatcgggaagaactgaaatagacagctgtcat
+tttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgcatgaaaatactg
+aggatgtaaactatagccagtcaggcccgcgtgttgactaattgatgaagcaaacaaaat
+agccggtattcgttaaaaggaacgggttgccagctacagatatactctaggtatatccca
+aacaagagacgtcctttggctgttgtaatcggtcataatacttgtcacataaacaagatc
+gctgaattaaacattaaacagttagtgatacacaatcgtggttggggctgggatgtgcaa
+taaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaacattattatttc
+ttgacaatggaatcgataagcgttcctctaacttggtatatatatctcgaccccgggatt
+ccagccattcttgtatgaagatttaaccatttaactatgcatagttgaatggtaaggaaa
+atgatattgactgcaacagattttggatgcaaaaatatttgtgaattattggttatatac
+tggttgtatagcacaatcattaggtcctagaaggcatactcaacctcagcgagagagcta
+gcatgcataattgtaccgcccatattaatattcctgaaatgatttcttacattacgccca
+atttcagtcatcgaacacccccatcaatttacccgatagagaacgtgatcatacgcaata
+ccctatgcgaacgtccactctatagcgtctgtatacaatgattattcgttccatttacaa
+cgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctcctggaatgtatg
+agttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgtacgaatgaaagg
+ccacttttagaagagacctttgtatccattgtggagaatatcataaattcaagatggggt
+gtcatgctattcggtcctaaacattcttaatggctgttctattgttagtctgatttaaaa
+tggaaccatagcacgaatagttagatagggctcatacccctgtaacgatctacaaatcct
+tccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatcaaagaacactcac
+acgtcagattattacactgatacgaattatttcagtcgacagtaattgaatagaaactta
+ttaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttgactgtaaaaaaa
+tggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagttttttctctgtt
+attaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaagatcacacatca
+cacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtagtgggatcaacat
+atggacgaatttatgctcaatgagccaacctcccccgcattgcggttcattttaaggcct
+gggtaacatctatcgtttagataatcaaaggaatccgactatgcaattgtctgacttcat
+ccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaataccatattgaaatcg
+taatacgataattgttgctattgactacaggttatgaaaaaacttactttgcgggtacat
+gcatatttttgtaccacattattacgcgatatctctcagtgtactctaaattaaaccctc
+ttcgaacattttagttcctattcgtaaacacgtgctacgcggcaatttgccggtcgtaga
+atggacaactccagttcaactgcatgtaactcatagctcgcgttagtataaattgactag
+tagccatgggacaaagtaactagtcagcggaaaagatccctttaaagatatatgcaggtt
+gcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagcgtctctatcgta
+tcttctaattttgggccgtgagaatcgaaactactctgatttgctgcacacgttaggtaa
+tatcgcccattttcccgtataagctccgtacttatacgaactacacgaccttttaagcat
+tagccgctcatatcgtgattcgtgtacagatgagtctattaaaattacagacatactcca
+tatctcgctccttgaactttgaataatgcgctaacttgtactatgaataggcagaaccca
+actttcccgtttgcgtcaagcggggaaacgatacatgttgtcagatttatgattatctag
+ttttagatcacgtttaccgataatcggctgtggtctgagcagtcctacactgagtattta
+cttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaatacggagtacga
+tgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaaccatttttacga
+tttttactatagcggtcatgaagtgcgaaactgcttgcaaattttctacacacattgtgg
+ctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccagggaaagcgcgaa
+ttatttggtgactaatagtccgtgggtttgagccatatacctaacgccataaactacgtg
+gtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcagcacagactaact
+ttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaagtcgcttgcgcgg
+cacggattcgattgggcggctcaatcttgcctaatttctactattgtcagctgtacgact
+gtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttatgaccaaaggtct
+tataattgaagcgcacttccgttcatcaaattaaatcctggcttacccgattctccggaa
+gtctgacctagagattgacgacggccgcgtattattgagacctcttcaggattaatcaat
+aacgaagtagttgatctgtttggcgacgtaccttaagccgactccgctacacgagtttct
+actaaaccaatgtagccttatgcttagatgaataccgtcctaattagatattccggcata
+acagcagtaaattatctgttcaatggacgaacattgaattgttagtattctacacaagtc
+aggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatgcttgagcttgcg
+ttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacaccagcatattcta
+tatgctagacgtcttccttaaaggatcgtagtattataattaataataagaaatatggtt
+gacgtctagtcagcgggcatacgctgctctatatactggcattattcaaaacttgacggt
+aaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgggaaccaaaatgt
+cacagaaaacacctctttattgccaagcatgcaataaaaaaaatgttaatagtacgttta
+cgacattttattttataataaagagaaactattacacctattgatatgataggacgtaaa
+ttaacgagtagcctgcatagaggcaaatgaggtttctacatggtatagacctgatgctga
+aacatcgatgagttttggtcccctcgctcgttgaaatctagtcatttactactgtctttc
+gagctattataccacttcactatgtggtgtttctttgctatgtatggggctagtcaaaca
+tgatgactatagctacaactcagagagcgggcgtgttaagagtatctcatgctagaactg
+cacgacgaacttgatacaaagtaacaacatttacgattccacaaggtgactttgaagaaa
+catagtttaattctctgcttcgatcatttctataaaccggtaccatcgcagcggatagat
+gcataacatttctactactccaggcatcttaaaacacacgtagtacttcactagattaag
+acacgataagtgtataacttggcagtgggaagcaaggagattggcgaactcctggcatct
+gttacgttttgttcaggctcggttgttgataatgtccgactcctgccatattgaagactc
+gctcgagggagatcgggattcgttgattataagtacacgtgttccgtaatactatgaggc
+agtgattcaaaatggcacttctgacttacatgactaggtattattaccacggaagcgtta
+aaggcacactcttatggacttaagattgcaagtgccttcttctagcctgaattcgcgggt
+tcaacacaaactctctttagacatccgttgcctaaaggctgagacgtaggggcaaccctt
+taactatgtactaaaaaactagttggtaatttaacaacgtgtccaatcaagacgatgcac
+caacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtgataaaccccacct
+tgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataacctaaatccgga
+tgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagcatacatttaggtc
+tcctgcattgcattcaattgaatcgtttgtattatgagctgtacagtagctatatcagct
+atagttatcccagaggaacaggtaaactagctctgagcgtgaaatccggatattagaacc
+cctagatgggattgattctagctaatacaggcttatctggttttacagttatctagatga
+ttggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtattgcccgggaagc
+tattttctaggtattataaagtcgagcattaatatcaatttgacagtaaaggtctttcac
+cagcttcatatgccatagggcccatactcgatttaaattgaacggtttaacgagtattgg
+aactctcacttataactgagtagctatacgaaaaatctggtccatttccagaaatttatt
+atcgatttgctgcttagtacccaggaagtgataacccttgaaggcacaacactgtaataa
+gttttcctgtcacatctgtaatattcggtcactacgcattcacgactaaagataattact
+atactaattaaaagttcaatgttagggccgaatcatagtagaaattctcgtctagcctaa
+tcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaatgctagagatag
+gtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagttcgcttctttagt
+ccgggcgtttgggatgacaactactatacgtagagccgtactcaggattagatagtgtga
+aagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtttaggccaaacat
+taaccgttgtagggatattctaatacaggccttcaccgaaccctaatgataatctgtctt
+aataacattaaatgattgtctccgctacgagctcttagggcctcattttaaatgactaat
+gtccaaagaagagactttcccaatttcaatctgtcacgtatagacggcaccttagtgagt
+catatcattaagatagaagattatcaggagggaagtttctattatcaaccgttacgcaac
+cataaacttttaaatctcataatggcattgagatcaagagctttcatgatggtaaagttc
+gtatgtgatgctggggagctagatatcggtataccacttcggttgtggtaagcccgagtg
+ggccgttagtaatattaatagacgattatccgacaatgcattcgctgaaataatcttact
+taggagaaattaatgctatgagccaaaactatttatgtctgtcacattattgactaaagt
+atctatcgacaaaactgatgtccataagttgtagcagatagtcggtgtatggtgtcacca
+atgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaaattgcctattat
+acagataggcttgtttagtcagataaggttccgcttgaggtgctctaacttagcgagagt
+tagaaagcctagtgagaggcattttggtgccaaactccggctcgcatgagtaggccagag
+agtcactttctttcgtcgaagaagttggtgaacagccttttgattagttgtttgtcttgt
+ggctatgtgctactatataagttagaacgcaaactaatctaatcagcaaagtaaaatagg
+accttgaacgagacggggtacgccgttgaggctcgagatagtagataaactagaggaatg
+tagataaaacattagctagggggtttagttactggattacataggaagtgcaccatcacg
+gtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggacttaacaagttcgtgc
+ataatgaaatcctatacggactttgcatatctctaccgactcatctggtcgtctatgcgg
+gtaattgtattgctccaagtggatgactattttggcgtcccagcacatagtaaatgtaaa
+tccttataatagcataagcaattattagactgcgtgaagtcttagtagttctcaagcttt
+acgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccattgaggtcattga
+atgtacggagcactattatcaatgcggtatgcgattttctgagcgattattgttaaagac
+ttagcgttgagccccggaacacttgattacagattctttaaggagttatccaaatatcat
+tttaaataatagtagtatcgtgctttggacaataaaaaaagacccgttctcttatgttgt
+tttgcgacgtacttctctgatatatacttcaactatgaagattctattcatcgataaccc
+aggtatatttatatgcccgttcactgcgcagggcaaattatctacggacaataatgacgt
+agttggacccggtaagaactaacgcttaatatgattaaggatgtatgccagtattatctt
+attatgtcagagtagaagtttctctgagattttccgtcgttgtggtacaccggatttggc
+tctctttttagaactgagaactcggagtgtgtagtcttgtttccttcaatttatcaatat
+gcttttataccgccctcatcaactataacaggacgacaagttccgtcttgctccatcata
+tactaccgatacaccaatcgtatcaagtttagtatacttgctttctctcttctacagctt
+actcgcttgtccgagaagcggttggtgctcataaagttagtagtaaatgtacaactagta
+gccagtccttacctgtttttacgactactacggacaccatgagatacagaagttagtgct
+acaattataccattacatgctcaatatcgttgtcggccataagatcgaagagtgcatcac
+gcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacacactccccttgttg
+actaacatcttttacaagaggctaaatcattgtccaggatcgaataccttgtgtacaatc
+gtcacccatcggaagaataccacttttccgatgtagtatgatttacaaaaaacatctatg
+tgagtaggccaattgtagtagaatatattcatttgaccgtcattagccttcttcttaggt
+tgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcgatttcatacagct
+gccaacaccttttttaccaggctagagtcagaaaagttggagccatgttaaatagttacc
+atcataaaccactgttgtctactagtctgatcagctttcatgcctgtgcaagcaatatgg
+attctcacgtaatggtaacaactgttgcgttacttaggctggttaatttgtcagagtaat
+aaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcctaggaataggaa
+aagtaaagctcttttattctgatagtgactaactcaggatctaaatacgcgattatacta
+accttcaccaaagctcaaaaatcatctgctggtgaccagttatagacagggtaattcaat
+atttaatgtctcccttaacatttcaccagcatggattgaagatagtataaagttttacat
+ggcagtcattgtgtcacggttctatacaaattctgatagttagacggtatttgaaatgtg
+cttctagcatggtatcttacacaactgaatgaacgactggagccgttcgtatactatttg
+cgagcctcgagaccccgtttcctaatgttaacgaatatagtataatataaattgtgatat
+gaataacacaagtaactacagtttggacaattaattgttctaaactaaaaatcattcact
+tcagatggcatagagttatggctactacacatataaagcggtatgtgaaacacccgtttt
+agccggaaaccctctactgctcgggacaatgaatgatttccaaaatatggatgtgcagaa
+ttgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtcgttgcaaagttt
+aaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaaacgtgacagaaa
+gtctagaagaactgtgaataatgtctattactgattaactagtaagacattagtgcatct
+ggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtcgtggctgttccg
+gtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaaggtcaatttcaca
+atatccgatcacattgtgctaggttcgtcctttaccttgcttagtgctgcatgtacgggg
+tgtcatgacttgttatcggcagactctttatcccaagaatggataatatgtacatggaaa
+gtgtccataattaagtcccttcactgtaaagaatgactgccacgtgatccatgaggtcta
+cagaaaccgacttacttgctttttgatcaacttaattatggattcataaagttcagatat
+cggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatctgaatgacagtg
+atagaaaagatccccatttgcccggtcagttcatgttacaccactcattagtactgtaag
+tgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaactggatgtacga
+cgatcgagacgaagaggtatatataacctaaatactaggtacgttgttagagagacgatg
+aaaattaatcgtcaatacgctggcgaacactgagggggacccaatgctcttctcggtcta
+aaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctttgcggagaacaa
+ttcacggaacgtagcgttgggaaatatcctttctaccacacatcggattttcgccctctc
+ccattatttattgtgttctcacatagaattattgtttagacatccctcgttgtatggaga
+gttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacctgaaattgtttt
+tagttgggatttcgctatggattagcttacacgaagagattctaatggtactataggata
+attataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcatatgtggctaaca
+cggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagagcgcattgaatta
+ctcaaaaattatatatgttgattatttgattagactgcgtggaaagaaggggtactcaag
+ccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagtctatttcagtct
+tctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcatatgcgattcatg
+acatgctaaactaagaaagtagattactattaccggcatgcctaatgcgattgcactgct
+atgaaggtgcggacgtcgcgcccatgtagccctgataataccaatacttacatttggtca
+gcaattctgacattatacctagcacccataaatttactcagacttgaggacaggctcttg
+gagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcgatgcgactagtt
+agggcatagtatagatctgtgtatacagttcagctgaacgtccgcgagtggaagtacagc
+tgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaacccagggggaaac
+attgagttcagttaaattggcagcgaatcccccaagaagaaggcggagtgacgttgaacg
+ggcttatggtttttcagtacttcctccgtataagttgagcgaaatgtaaacagaataatc
+gttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagtgtgagcatttca
+cttgtaaaatatctttggtagaacttactttgctttaaatatgttaaaccgatctaataa
+tctacaaaacggtagattttgcctagcacattgcgtccttctctattcagatagaggcaa
+tactcagaaggttttatccaaagcactgtgttgactaacctaagttttagtctaataatc
+atgattgattataggtgccgtggactacatgactcgtccacaaataatacttagcagatc
+agcaattggccaagcacccgacttttatttaatggttgtgcaatagtccagattcgtatt
+cgggactctttcaaataatagtttcctggcatctaagtaagaaaagctcataaggaagcg
+atattatgacacgctcttccgccgctgttttgaaacttgagtattgctcgtccgaaattg
+agggtcacttcaaaatttactgagaagacgaagatcgactaaagttaaaatgctagtcca
+cagttggtcaagttgaattcatccacgagttatatagctattttaatttatagtcgagtg
+tacaaaaaacatccacaataagatttatcttagaataacaacccccgtatcatcgaaatc
+ctccgttatggcctgactcctcgagcttatagcatttgtgctggcgctcttgccaggaac
+ttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatgatacgattttatc
+gcgactagttaatcatcatagcaagtaaaatttgaattatgtcattatcatgctccatta
+acaggttatttaattgatactgacgaaattttttcacaatgggttttctagaatttaata
+tcagtaattgaagccttcataggggtcctactagtatcctacacgacgcaggtccgcagt
+atcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggctcacaatgttac
+ctgcttcaccatagtgagccgatgagttttacattagtactaaatcccaaatcatacttt
+acgatgaggcttgctagcgctaaagagaatacatacaccaccacatagaattgttagcga
+tgatatcaaatagactcctggaagtgtcagggggaaactgttcaatatttcgtccacagg
+actgaccaggcatggaaaagactgacgttggaaactataccatctcacgcccgacgcttc
+actaattgatgatccaaaaaatatagcccggattcctgattagcaaagggttcacagaga
+aagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatcttcgaatcgggatg
+aatacttgtatcataaaaatgtgacctctagtatacaggttaatgttagtgatacacaat
+actcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatcactcacccacgta
+tttggtctaattatgttttatttagtgacaatccaatagataaccggtcctattaagggc
+tatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatggtaccagtttaat
+tgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgggcttgatataag
+atttcggatgtatgggttttataatcgttggagagctcaatcatgagctaatacatggat
+ttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagtttaataggccgg
+attggattgagttaattaagaccttgttcagtcatagtaaaaacccttaaattttaccga
+ttgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagtgactaggtatac
+aaggtttttgagttcctttgaaatagttaactaatttaaaattaattaacgacatggaaa
+tcacagaacctaatgctttgtaggagttatttatgctgtttactgcctctacaaccctaa
+taaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggtatccagggtggtc
+aatttaataaattcaacatcgggtctcaggatattcggtcatataatttattaagggctc
+ttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttgtgaggcatctta
+caccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaaggaaacttgtta
+ccttggggatataagaaaactcacacgtctcattattaaactgagtacaatttttgcacg
+agaaagtaatgcaatacaatatgatgaaagccagctaatgaaaagggatggaacgcacct
+cggatctgttgcactggattaaaatccgattatttttaaaaatattcagtgctagagcat
+atcaggtctacttttttatctggtatgtaaagcccacggagcgatagtgagatccttacg
+actcaacgaaaagttataacataactcccgttagccaaagcccaatcccgattactgccc
+taccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtgactacctcccac
+cctttccccttcatttgttccactggggataagctagcgttttcagaatcaatgcaataa
+gaatagccaattgtctcacttcatcagagctcttggcaattccaggcgctacgtggttct
+ggaatatattcatttttcaaatagtaatacgtttagtgttgctattgtctacacgtttgg
+atattacgttatgtgagcggacatcaatagttgtctaactctttagtaagccagagatag
+cactcttagcgaatggataccatcttccataagtttagttaatagtccgaaacaactgct
+tcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaatcttactaatag
+atagagtttgttttaagggactactagaaatgggacaatcttaatagtatgacctaaact
+gacatttaaagatatatccaggtggcaagcataaagatcattgcgccacctccaccgtgg
+gattacttatcagtcgatatcctatatgctaagtttgcgacggcagaatacaaactaagc
+tgagttgatgctaaccttacctatgataccccattggaccggttaacagccctacttatt
+ccaaataaaagaacttttatgctgtagaagctattatagtgatgcctggtaacttcagta
+tattaaaatgacacacatacgccatatagagctcctggaactttgaataatgagcgaact
+tcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccggtaaccagacat
+gtgctatcattgatcattatcgaggttttcataaccttgacccattatcggctgtgcgcg
+gacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaataaggttggcaa
+agaatcgcataagacggacgtagagccgcagcgttgtgcgagtccaggtgcatgcgcagc
+aataggattttaaattttgttccatttttaatttagccgtaaggatgtccgtaaatgatt
+gaaaattggattcaatctttgggcctatgctactggaacctgatcgacaaaatttcaaac
+atacgttaactccgaaagaccgtatttttgcggctagaatagtcagtcgcttggagccat
+ataccttaccacttaaacgacgtgctcctgtagttgaaatataaacagaacacaaagact
+accgatcatatcaactgaagatctttgtaactttgaggcgaagcaccctcttcgagacaa
+ctaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaatcttgacgaatt
+gctaagaggctcagagctaccactgtaatttctctagagcccataataaatgaacgatac
+atccgtaggtagcacctaagggattataatggaagccaaatgcagttaataatattatat
+actggcgtacacgattcgacggatctctcacatagtgattcacgacccccccctttgatt
+gacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgccaccgtaaggat
+gacgtcgaagctacaactgggtataatttaccatgcttccctgatgctgagtgcaataca
+ctaagaatgagtttttaccccatatcaccagtatttgttctgttattgcgaagaaatggc
+tatgctgagttggcgactaaagtcacccatcctttttattaggtaaccccctcccttaaa
+ctaactgatttgctggagctgccctgcatacatatactttatcatttatggacgtccgtg
+acgcttattatccaccatagtcgatatgctacacggattcattaatggatcgtaggagtt
+taagttatatttactaagatcggtctcggctactatcccgccttacccggcgctatttac
+ggccatttttaatatattgacggtaattattcctatggtttcgaccgcacgtccttggac
+aagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccctaccatcatata
+aaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaagactatctattaca
+ccttttgttttctgtcgtagtatattaaagtctagaagccttacaggaaaatcagggtta
+tacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccatcgcgccttgtaa
+tcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatctcggctttatgt
+gattgggaggggcctactcaaacatgatgacttgacctaataatcactgtgcgggcgtct
+tatgactagctattccttgaaatccaccaccaaatggttaatatgtaaaaactttgacga
+tgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgagcattgcttgtaa
+aaccgtcaatcgcacacgttacttccataaaatttctacgaatacacccttcttaaaaaa
+aacgtaggaattcacgagtttaacaaacgataactgtataaagtggaagtccgaagaaag
+cagatgcccgaactactcgaagatgtttcgttttcttaaccataggggcttcttaatggc
+ccactacgcacattttgttcaagcccgagagggacatccccattacgggagtattactaa
+aactgttccgtaatacgttcagcaagggatgaaaaaggccactgctcaagttattgacgt
+gggagtattacatcggaagcctgaatcccacactatgatggtctgtacaggcctagggac
+tgcgtctagacggtattaccggcttctaatcatacgatcgtgagtcttaacgggaagtaa
+ggctcacacctaccccaaaccatttatctatgtaagtataaaattgtgcgtaagtgttca
+aagtggacaataaagacgtggcaaaaacccccgcacataagccgctttagatttcacaaa
+taccaatgcggttaaaaacatccttgagtcgtacatacaccatactcgcgttaaacggat
+ataacagaagataataaatccggatgtggagtcggtgtaactatagaaagccaagtgaaa
+taatgcttaccagtcatttagctatacggctttcatttcatgtcaagagggtggagtttg
+acctgtacagttgatatatcaccgatacttagaactcacctaaagctaaaattgctcgca
+gcgtgtaatccgcatattacaaacaatagatgggattcattatacataagacacgatgat
+ctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgccttacaccactt
+aaacaaaagtattgacagggaacctattttcgaggtattatatagtccagcttgaatatc
+aatttgacagttaacctagtgaaaatcagtaagaggaaatacgccacattctccagtgaa
+attctacgggttatcgtctagtccaactatcaattataactcacgagatataagtaaatt
+ctcgtacttggcctgatttttattatactttggatccttagtaaacaggaagggagaaac
+cttcaacgaaaaacactggattttgttttactctcaaagctcttatatgacggaaatacc
+ctgtcaagtcttaactttattactagactaatgaaatgggcttggggtggccagaatcat
+agtacaatttagcggatacactattcggactttcctatcggctgtctggttggataagta
+tggggactaataggctagacatacctatacttaaactatacaggcgtcatctatctctgc
+aactttggagttccctgatgttctcccgccctttgggttcacatcttctataccgacacc
+cctaataacgattagtttgtgggttagagtaaattaatacggttaatattaatgtatcgt
+tgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatgtcacgaagtata
+actaccctaatgataagctgtaggaataaaattaatgctgtctctaagcgaagagatatt
+tccgactctgttttaatgacgaatctcattacttctgacttgcaaatgttcaatatggca
+cggtttcacggcacctttgtgacgcatataatgaacttagaagattataacgacggaact
+ttatatgataatccgttacgattaaagaatctgttaaatatcataatggcattcagttct
+agaccgtgcatcatggtaaacttactttctctgcatggcgacatacatttcgctattcaa
+attcgcgtgtggttacacccactcgcacctttggaatattaagagaagatgatcagaaaa
+tccattcgctcaatttttctgacgtacgtctaatttatcctaggagacaaatcgttttat
+gtctctcacatttttgaagaaaggttcgagagacaatactcaggtcctgaactgctagaa
+gatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatgaatgatacttttc
+caagttcagttaagtgaatatgtttaacatacccggcttttcgatcttaagctgacgctg
+gacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtttcgtcaaaaacg
+ccccctcccttctcgagcccactcacgctatgtattgacgcgaacttgttcgggatcaga
+cttttcaggagttcggtcgcgtgtccctatgtgctaatatataagttagatcgcattaga
+tgctaatctgaatacttatagacgaccttcaacgagaacgggtaccaccttgaggctaga
+gttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggctttagttaagggt
+ttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcgaccatctagaggc
+taaggggactgtactaggtagtgattaatgatatcctagacgcacgtgccttagatcttc
+agactctgatggtccgcgatcaccgtaattgtagtcctccaactcgatcactttgttggc
+gtcaaagaaattacgatatctaaatacttataatacaataaccaaggatgagaatgactc
+atcgcgttggagttatattgcttgaagttctatggaatgaaagcacgttatctgccgtcc
+caatatctccagtgagctaattcattggacggtccactttgatcaatccccgaggagatg
+ttcggacactttagtctgtaacacttagcgttgagaccacgaacaattgattactcagtc
+ttgaaggtgttttccaaagttcattttaaataagactacgataggcctttcctattgata
+taaactacccggctctgttgttcgtgtgagtcgtacttctctgtgtttttctgattatag
+caagattcgattcttagtgtaaacagcgatttttatttgacccgtcaatgagaagcgcat
+aggatctaagcaaaattatcaagttgtgccacaaggtaagatctttccagttattgcagg
+taggatgtatcccacgttgatagtatgaggtctgacgtcaactgtctaggagagttgacc
+gcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcccactgtcgtggc
+ggcgttcctgatatttagcaagaggcgttgataaagccctcatcatctagatctcgacct
+catctgccctcttgctccatcattttctacacagactactttcctatctacgttagtata
+attgctttctatcttagtatcatttagagcttctccgtcaacaggttcgtgctattaaag
+ttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcgactacttcgcaca
+aaatcagataaagaagtttgtcattctattagacattgaattgcgcaattgacttgtacc
+acttatgatcgaacactgaatcaagactgtgattaactaaaatagacaagccactatatc
+aactaataaaaacgcccctggtggtcgaacatagttgactacaggataattaattggact
+ggagccattacattctctacaatcgtatcacttcccaagtagacaactttgaccttgtag
+tttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaatagtttcatggga
+acctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgataaagtcgtgtcg
+ctttcgatgagagggaattcaccggaaaacaccttggttaacaggatagtctatgtaaac
+ttcgagacatgtttaagagttaccagcttaatccacggtgctctactagtatcatcagct
+gtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacggttgccgtactga
+gcagccttattgtggaagagtaatatataaatgtagtcttgtctttacgaagcagacgta
+agtaataatgacttggaataccaaaactaaacatagtggattatcatactcaagaactct
+ccagataaataacagtttttacgatacgtcaccaatgagcttaaagattaggatcctcaa
+aactgatacaaacgctaattcatttgttattggatccagtatcagttaaactgaatggag
+tgaagattgtagaatgttgttctggcctcgcatggggtctaggtgatatacaatttctca
+tacttacacggtagtggaaatctgattctagcttcgtagctgactatactcaaggaacca
+ctgctcaaggtaggagactagttccgaccctacagtcaaagtggccgaagcttaaactat
+agactagttgttaaatgctgatttcaagatatcatctatatacagtttggacaattatgt
+gtgcgaaactaaaattcatgctattcagatggatttcacttatgccttagaaacagatat
+tgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagggacaatgtatct
+tttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataatagaatcttgtg
+ttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttggggtctactgtg
+tgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagctcgagtactcatt
+aaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttcccggtacgctatct
+ctctcatcgggaggcgatgtgcaggttatctacgaaagcatccctttacgttgagagtgt
+cgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgtgcctcagggtcc
+gggcgtactcctccatggaagggcgcgcatctagtgttataccaactcgctttttaacta
+ctatgctgtagttctacaggcatagtggccagtattttctaacttctctggatagatgct
+ctcactcctcatccatcacggcttcagtttacgtcttacttgcttgttcagcaacggatg
+gaggcattaagtatcttcactgttccctaaaattgctgttcaatatcaaagtaaggacga
+tacagggaaagctcaagcacactcattgaatactgccccagttgcaacctcacttaatct
+gacaaaaataatgactactctaagtgttgcggaagcagtctcttccacgagcttgtctgt
+atcacttcgtataggcatgtaactcgatagacacgaacaccgagtgagaaactatattct
+tgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctggagatcactcacgc
+ccacacaaggcgctgctacctctttattccaatgtgtaagaatttgctaacttcatttct
+agaccgcagctttgcggtcataatttcacggtacggacccttgggttagagacttgataa
+cacacttcgcagtttccaccgcgcacatgttttagtggcttctaacatagaatttttgtt
+gtgacataaagagtgcgtgggagacttgcccgaccgttaagccataatcaattgaaagcc
+ccgtgagtcacatctaattggttgtactgcgcatttagctatcctttagctgactcgaag
+agattcgattcctaatataggttaattagatggctgccgcgcgaagtaaaacgtgaaaaa
+cgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagttccaagttcgct
+acgttatgagagagattggaattaagcaaatatgttttatggtgattttgggatgagaag
+gactgctaagtacggctactaaacaaatttctaaaaccgccatctaccttatcttggaga
+catttaagttgtatatgtcactagtctagcttttgtctgtgggacgcgttctcggaatga
+gggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtggactattacacc
+aagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaaggtaccccgcat
+aagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaaaacataatttta
+atcagaaggcagctcacccgcttgctctagatcttatctttgtatgaatgtcagaattta
+ctgcaatatccgttccgaatagtgagggcttagtatagttctctgtatacaggtcacatc
+aaactccccctgtcctagtacagctctgagctttaattaattgcatacatttccttcaat
+catcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaagagaagcaacaaac
+aactagcccgactcacgttcatccgccgtatccttgttcagttcttactccgtattaggt
+cagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcccgcttgaggttg
+acaattaaaacgctgagcagttatcggctattagatagtggggtgaaagtaattggctgg
+aattatgttaaaacgtgatattaagctaaaatacgctacttgttgccgacctaattcagt
+cattcgatattcagttagagccaagaataacaagcttgtataaattgaacggggtgcact
+aaacgatgtgttactctaatattcagcttggagtatacctgaaggcgaattcatgtatcg
+gccaataataagacgttgaagatcacaatttggactagcaaaagaaggtgatttatgcgt
+ggggattgagtccactgtacgagtacggtctctggaaaattataggttcagggaatataa
+ggaagtaaagataattaccaagagatttttggtatcgctatgacccagaggtgttctaac
+gtctgttttgatccgcagaatttctgcctcaatgcatatttgacggacttgaactagagc
+ctctaaagttaaatggcgacgcaactgttcctaaacttcaattattactactcttttttt
+cctagggtattgtagaggccagtggacaaaataaatcaaatttaagatgtttcggacatt
+aacatcccccgtagcatagaaatcatcagttatccaatctctcatcgagcttttacaatt
+tctgctggcgctatggacagcatatgccgcgagacctccgcaagactcacttgatcactg
+taagtatcttcattagaggttagagcctatagttaagctgctgacctagtaaaattggta
+ttttctaattttattgctcaagttaaaggttagtgaagggataatgacgttatttttgaa
+caatgggttgtattcaattttatatcacgaatggaacccttcattcccggcataatacta
+gacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtttaattccggcaa
+accaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatgagtttttcagga
+ctacttattacctattaataagttaacatgagccttcataccccgtaagacaatacatac
+tccaccaattagaattctgagccatcttatctttttgtatcatcgaagggtatggccgaa
+taggttaattagttactcctaacgtctctacaggcatgcatttgacgcaccttcgaaaat
+agtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatagtccacggtttcc
+ggattaccaaacgcggcaaagagaaacattgtatcgacggagataacttaatacagaagg
+aaggggcatcttcgaatacggatgaataattctatctgtttattctgacatcttgttttc
+aggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaattattttctaata
+ttgacgagagcaatctcactccttttgggtctatttatgttttattgaggcacaagccta
+tacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtggaaacaaaggatg
+ggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaaatcagatgctat
+ccttaactttgggctgcatttaagatggcggttggaggcctgtgagaatcctgcgtgtca
+tctttaatgaccgaattcatccatgtagattcagatcacacactcattccttgatgttgt
+ctaaacaaaagttgttgtggacgcattggagggagttaagtaacaacttgggatcgcata
+cttataaaaattatatgttaaactttcacaaacgctgaagtccaaagtaactagcccaaa
+cgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaatagtgttcgaagg
+taaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgcacggaggtatga
+tgtttactgactctacaaccctaattttccagtacgtacattcattccaataggttagtt
+ctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgctctatggatatta
+gctcattttatttaggaagcccgcttagaggcttactatgagggaaatgccaaaatgtca
+tacttttcggtgtgtcccatatgacaccgctttacatagaatttgaattaaaacgcgctc
+tcccgttcactaccatacttggtaccgtgcgcatattacatatagatataggatcatttt
+ttaaagctgtactaggtttgatcgacaatcttatgctatactatatgatgtaaccctcat
+aatcaataccgatcgtacgatcctagcataggtggcaagcgattttatgccgattattgt
+gttaaatagtctgtgagtgtgattatcagggctacgttggtagaggggttgtatagacct
+cgcacacattgtgacatacttaacaatatacgaaaactgatataataaatccccttaccc
+aaacaccaatcccgttgaatcaactaccataacgtctcccatataaattgcctacttgtt
+tgcataaatctgaatacataacaccattgcaccttcttgtgttccaatcccgttaagatt
+gccttgtcagatgatatgcaagaacaatagcatttgctagcaattattaacagctcttcg
+aattgcctccacataacgcgggagggtatattttaatttggcaaatactaagtactgttg
+gcgtcatatgctattaacggttggatattaagttatgtcagccgtaagcaagagtgggcg
+aaatattttgttacccagtgagagcactcttagagtttggatacaataggccatatgttg
+acttaagaggacgtaactacgccgtacaccattgttcaaccgacttcttggcaaatagaa
+tcgtattagcaatcttaagaatagagacacgttcgtgttagggtatactacaaatccgaa
+aatcttaagaggatcacctaaactgaaatttatacatatttcaacgtggatagatttaac
+ataattcagccacctccaacctgggagtaattttcagtagatttactagatgattagtgg
+cccaacgcacttgactatataagatctggggatcctaacctgacctatgagacaaaattg
+gaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctgttcaacagatga
+tagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaatttagacagaat
+ggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaataggtaaacgtg
+cccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgacgtgttcagaaac
+ttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgtttctgaaccggctt
+atccctaagatatatccgtcgcaaactttcgatttagtcccacgtagagcccaagcgttg
+tgcgactccacgtgcatgcccagaaatacgagtttaaatttggttacatggttaattttg
+accgaagcatcgcactttatgattgataattggattcaatatgtcgccctatgcgaatgc
+aacatgatccacaatttggctataagacgtttaatccgtatcacactttgtttgcggcta
+gtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactccgcaggtacttc
+aaatataaaaactaatcaaacacgacccatatgatcatctgaagatatttggaactttct
+cgacaaccaccctcgtactcaatacttacactaatcgacaggcacacgcaacgtgtacag
+tcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacgcttatttctcta
+gtcacaattagttatctacgagacatcacgagggagcaaataagcgatgttatggctaca
+cataggcacgtatgaatatgatataagccagttaaacagtcgaaccatcgagcaaattct
+catgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatgtaacttcttctg
+ctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtattagtttaaatgc
+gtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaatataacatctattt
+gttatctgattgcctacttatggctttgcggtcgtggcgactaatgtctccaatcctttt
+gaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcactgcatacatata
+cggtagcaggtagggacctcacgcacccttattataatcaatagtagttatcagtcaacg
+aggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgtctaggcgactat
+cacgcattaccaggcgagatttaagccaattttgaatatagtcaacgtaatttttactat
+gggttccaccgaaacgccttgcacaactaagaatcccataaaatatcgatatcaaataaa
+agattgtgtcaataccttcatatatattttttcggttgactaacgtgaactaaggttagg
+ggttttgtatgtctatataggaaacagtttcttttctgtcctactttagtaaagtcttca
+agccttactccaaaatcacggtgattaagccgttactcagcagcatgattctgcctgctc
+gggtcctaaaatccagccttgtaagagtcgctgtgtattagctagggagacctttgttaa
+aaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatcttcagctcgtgtc
+attataatatctctcccccacgcttttcactagatatgccgtgtaagcaaacaccttatg
+cttaatttcgaaaatattggtacttgaaaaaagctgtaggggtacttaatgtctggtagg
+agatcaggagagaattgagtgtaaaaccgtaaagccctcacctgacttcatgtaaatggc
+ttagaagactccatgatttaataaatactacgaaggaaagactggatctaaagataactc
+tagtaaggccaactcccttcaatgctgttgccagttataatccaagagctgtccttttct
+gaaccatagcggcttctgaagcgaactagaagcaaagttggttctagccagacagccaca
+taccctgtacgggtgtattactaaaactggtccggtattagttcaccaagggaggaatta
+ggcaaaggatctaggtatgcaagtcggagtattacatccctaccctgaatccatcaatag
+gttcctctgtactggccttcgcaatgagtattcaaggttgtacagccgtataataataag
+atagtgactatgaacgggaagtaacccgctcaccttccccaaaacattgttatatctaag
+tattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaaattacaccgcac
+ttaagccgcttttgatttatatttttccaatgcgcttttaaaaataattcagtcctacat
+actaattaagacccttaaacggagatatcacaagttaagttttaaccatctcgactaggt
+ggaactatagatacccaactcaatttatcattacctgtaatgttcctagaaggattgcat
+ttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacagattctgagaaat
+cacctaaacctattagtcagagcacccggttagaaccagttgtcaaaaaatagagcggtt
+gcatgagacagaagtaacgatgagatccgttgtaacgttgagacatctggcctatcgtca
+atacagtcctcccttaaaaatatttttaaatactaggcaaacccaacataggttagtcct
+atgtgatacgccacatggtatatcattttgtaacgttacctagggataatcaggaagtgg
+aattacgcaaaagtagacagtgaaatgcttagggttatagtctagtccaaagataaagga
+taaagcacgtcagagaactatattagccgaatgggaatcattgttaggagactgtggatc
+atgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgtttttgtttgaatctaa
+aagagctttgatgaccgatagtacctgtatactagttactgtattacgtgtctaatgatt
+tcggattggggtccccagaatcagacgtcattgtagacgattcaagtttaccaatttaat
+ttcccagctctccttggagaactatcgccaataattgcagtcactttccttttctgaaac
+gataaagccgtcagagttctctgcaacgttggacttacctgaggttctaacccactttcg
+gttctaatagtagttaacgacacaacgaataacctttactgtggggctttcacgatattt
+tttcgcttattattaatggttacgtcataagctggtgtccaaattaaggttaccggcttc
+gcagagtagttgtatccaagtataacttccctaatcataagatcgaggtagaaaattaat
+gctgtctctaaccgaacagatatgtcccactatgtggtatggacgttgctaattacttct
+gaagggaaattggtcattatggatacgtgtctaccatcaggtcggacgcagatatggttc
+tgtcttcagttgatccaccgttctttataggataataactgacgattaaagattatggta
+aatagattaagccaattctcttcttgtcagtgaagcatccttaactgacttgctctgcag
+cccctcatacatttagctattcaaagtaccggctcgtttcaaactctcccacctttggaa
+gaggttgtcaacttgataagtatatcatttacagcattttttcggacgtacctctaatgt
+ttcattgcagaaaattagttttttctatcgcacattttgcaagtaacgttagagacacaa
+ttatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaatatcaaaaaagac
+tgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtttatctgtcccgg
+cgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcgttcttacaagtc
+tgtctccaagggtcggcaaaaaagacccctccattctcgagcccactcacgatatgtagg
+gacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggtccatatctccga
+agttagaagggacatacctttagatgataagatcaattcttattgacgaaattcatccac
+aacggggaacaacttcaccctagacttacgtctgaaaagacacctagcgtcttataaaag
+gtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaacctcgcgcccttc
+cttacgtatcgacaagatagaggctatcgcgaatgtactacggaggcatgaatcatatac
+tagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcaccgtaattctaggc
+ataaaactccagcaatttgggggccgaaaacaaatgacgttagctaattaattatatgac
+atgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattgaacttcgtgcgt
+ttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttcatgcgtacctcct
+agttgataattccccgagcagtggttaggacacttttgtcggtatcaagttccggtctca
+aaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaatttttatgaagtc
+gtcgagacgcagttcctattgatttattctaaacggagatgtgcttcgtgggactcggaa
+gtagatctgtgtttatgattattgctactttagatgctgactgttaactccgtgttgttt
+ttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagttctgccacaagg
+tatcatatttacagttagtgctggttgcttctttcaaacgtggtgagtttgtgctatcac
+gtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttccagagagggtgtga
+tagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagagccggtgttaaac
+acatattattattgttatccaactaatcggacctatgcataaagcattgtctaaacagaa
+taattgcctatatacggtagttttagtgatttatatcttagtatcagttagagcttcgaa
+ctcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttctacaaacgaatgta
+agcggttttccaagtagtacctataaatcacagaaagatctgtctcagtatagttgaaat
+ggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaagacgctcattaa
+cgaatatagacaagacactatatcatataataaaaaagaacatggtgctcgaacatagtt
+gaattcaccatattgaaggggaatgctgacatgtaattcgctactagacgatcaattccc
+tacttgtcaaagttgaactggtacgttcttggaattaaatatgattgcgctggaccaaat
+tgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccgtctcttaccttt
+cttgcttatgataaacgacggtccctgtacatcactgggaattctcagcaaaaataattg
+ggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaaagattattcaac
+ggggcgataataggatcataaccggtatgcaagcgcattgaaagagccatgagatcctta
+tccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaatttataaatgtag
+tctgggctgtaagttgaagacctaagttataatgaagtgcaataccaaatcgattcatag
+tggattatcagactcaagatatctcctgataaattacagttgttaagatacggataaaat
+gagatttaagattagcagcctctaatctgtttcaatcccgttggaatgtggtatgcgatc
+aaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctgccatcgcatgcg
+gtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctgagtatagattcg
+tagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtcacacaagacact
+aaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagttcttgttatattc
+gatatactcttggctaatttatgtctgagtatataaaattaatgatattaacttgcattt
+cacggatcccttagaaaaagattttgaccgagcgcattataaacggttacaccgaatcaa
+tagaagcatacccaatagctttctttgaatttattgcctgcgcaacttggctgactctct
+agatccgaataattctatatggtcgtgacgaaactagttcattactgtttaaaatgccaa
+catgtcttttgggccgataatggctctttgcaaaattactcaatgatacgattgatcaaa
+gcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattatccgaaaatcttc
+caaaagagtccacgtaccatatctatctcatagcgacgcgaggggaaccttatctaacta
+tcattccatttaccgggtgactctcgatgcaggatccgattgggataaattgcccagaaa
+tggctcattcctgactaagggtaaggccgttctcagcaagggaaccccgcgaatctaggc
+ttataccatctagattgttaactacttgcctgtagttctacagccatactggacagttgt
+ttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgtaagtttaactat
+tacgtccgtgggcagataaggatggaggctgtatgtatcttaactgttacctaatatggc
+tggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgctttgtatactga
+ccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaactgtggacgatca
+tgtctctgcctagagcttcgctgtatcaattcctatagccagcgtactagtgacacaaca
+acaccgtgtgagaaaagatattagtccttacgtctgtctctctacagcttattgatgagg
+attgaacatggacatatagctccccctcaaaagcagatgctacctctttattccattctc
+gaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaatttatcggtaacg
+tcacgtccctttgagactggataaatatattaccaggggccaacgagcaattgttggagg
+cgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtctcgtgcaactcac
+ttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtgtactgccctggt
+acatttcctgtacaggactccaacagtgtagattcctaagatagctgttggagttgcctc
+acgccagatcgaaaaactgaataaactagtgagctgagctgcagaaataccgcttaatta
+cttatgactagttcaaagggacctacgtgatgtcagacattgcaaggaagaaattaggtt
+tgtgcgtcattttggctggactagcactccttacttcccctactattcaaatgtcgtaaa
+cagcatgagacaggatcgtgctgacatttaaggtctattgggaacgaggctacctttggt
+cgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgcaattgcttatag
+atctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcagttcttcctcagc
+aactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaacctatgcgctca
+tttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattcctctacttagta
+gctttctttgattctcagaattgactgcaatatcactgcacaattctgtgccattactag
+acttctctgtattaacgtctcatcttactaacactcgcctaggacacatctgagagtgaa
+gtatttcaatacatttactgaaatcttcagttctaaaatccccgaataaggctcttatcg
+gtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatacgcaggagcctgg
+ggaacttagtaataactatttcggcagacaaagcttataacaagttgccggcgcgtataa
+tatttaaaagaccccttgagctgctcaattaaaacgctcacctggtataggctattagat
+agtgccgtcttagtaaggggcgggaattatcggataaactgatattttgataaaataacc
+gacttgttcacgacataagtcactaaggagattttatctttctccaaagtatatcttcct
+tggataatttcaaagcgctgcaatttaagttctgttactagtttatgctgctgggaggtg
+accggaaggcgtagtaatctagaggcaaattataagaagttcatcatatcattttcgact
+acaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagtaccctagatgga
+aaattatacgttaagccaagatttcgatgtaatgataattacctacacatttttgctatc
+cataggaacaagagctgttctataggctcgtggcatacgaacatttgctgccgctatgaa
+tattggaagctcttcaactacagactctattcttaattgccgtcgaaaatgggccgaatc
+ggctattattaatactcggtttttccgaggggattgttgtcgacagtcgtaattattatt
+aatattgatgttggtgaggtcatttaaatacaaccttgcagacaatgaataagggatcca
+atctctcatactccttttacaattgctcatgcccctatgcaaaccttatgccgccacacc
+tccgcaactctctcttctgaactgtaagtagcttcattactggtttgagactatactgaa
+gctgatgacattctaaaatggctattttcgaatgtgattcataatgtttatcgtttggga
+tggcagaatcacgttatttttgatatagcccgggtattctattgtatagaacgtatgcta
+caagtcattccccgaagaagactagaagtaaacaacatgcgaccatcgttaagccacgca
+aggctgtagctttatttcccgataacctatcttccataaatagcggacagcaggatactg
+acgctcaacatcagtggttatggtctaatttttaacttttaataaggtaacttcagcagg
+catacacagtaactctttaatttataatcaaattagaagtctgacacttcttatattttt
+ctatcatccaacgcgatcgcccattagcttattgtgttactaataacgtatctaaaccaa
+tccttttcaagctactgcctatattgtcaatatatacaaacaacaggatagtaggctgct
+taaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcacaaactttgtagac
+aacgagtgaaatttatacactacgaagggccagcgtacaagacccatgaattaggcgata
+tgtttattctgacatattggtttatccttaatctgtcgctgtaaaatgaagccgccccca
+tccctgcgaattttttttcgaagattcacgactgaaatataaatacgtttggctatattt
+atgttggagggaggcaatagcctttactgttaaccgaagatttagccagtgagtgtgaca
+ctaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttagtcaatctcgcct
+ataagttcatatagctctggatataattatctggcccatgcatttatcatggcgcttggt
+gccctgtgtgaagccggcctctcatattgaaggtccgaagtattccatgtacattaagat
+cactctctcattcatgcatcttggcttaacaaatctggttgtccaagctttccaggcacg
+tatggtacaaattcggatcgaatacttataaaaatgatatgttaaactgtctaaaacgct
+catctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgtaatgctggtgcac
+tgaatgtgtaatacggttagaagggattagttatgttacaaatccattgaaaacttaaga
+agcattgcgtgctcggagggtgcatcttttatcaagagactaacattattttcaacgacg
+tacatgctttacaatagggtacttatcaaacgccgagaaacgcgcctatagtgatgttat
+gattatgacccgatatccattggaccgaattttatgtaggttcccagcgtactcgcgtaa
+tatctcggtattgccataatgtaatacttgtcggtctctcccagatgaaaaagcgttaca
+gagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggtaacggccgctgat
+ttcatatagatatacgataagttggtatagctctactaggtggcatccacaatcgttgca
+tttactatagctggttacaatcataatctataccgttccttacatactaccatagcggga
+tagcgtttttttgccgttgattgggtttaagaggatgtcagtctcattatatccgattcg
+gtgggagagccgttgttttcaaatcgcacactttgtgacataatgtacaagataacaaaa
+ctgatataagatataaactgtcaatatcaccttgacacttgaatcaaagtaaattaactc
+gcaaatataatttgactaattgggtgcagatttctcaattaataaaaaaatggcaccgga
+tgggcttacaagccccttatcattcacttgtatcatgatttccaagaacaatagaatttg
+ctagcaagtatgaacagagattcgaattgcatccacagtacgccggagcgtttattttaa
+tgtggatatgacgatgtactgttggcggcatttgctagtaaccggtccttatttacgtag
+cgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagagaaagattacagt
+ttggtttaaataggacttatcgggtcggaagtggaacttaataagcagtacacaattggg
+caacagacgtcttgcctattacaataggattacaatgcgttagatttcagacacgttcgt
+gtttggctattcgtcaattccctaaatagttagacgatcaactattatcaaagtgattct
+ttgttcatcctccattcatgtaacagatggcacactacgcataacgccgaggaattttaa
+cgagatttaagagagcagttcgggcacaacccacttgactttataacagctcggcagcat
+aaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgtacttagaaaact
+aagtggttcatgttcaacagatgtgacgcagcaagcctaacttatctattggttttgcta
+taaaagaacaaagttacacagaatcctaagggcttgtttcacacttatgcctagtgcttc
+accatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatgcgcagatattgg
+tgatggtgactccgggtatgataatggtaactgttgaccagcgcccacctcatcgaagta
+tagaaagtggttaggataaggatgagaccgaacttatttccggccataactttagatttt
+ctacctagtacacaacatcagggcggacacgaaaccgccatcacatcatataccaggttt
+aatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcaggcatatggccatt
+atatatggccccagagcagaatgctacagcagacaaaatttggatttatgtagtttaata
+cctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaagtgtaagttacaa
+ttattactactcagcagcttctgcaatgataaaatcttatcatacacgtcacatatgata
+atatctacttagggggaacgggctccacaacctacatagtactcaatacttacactattc
+gacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttgcagtactgcaga
+tcacagtaatagcttagttagcgagtcaaaattagttttctacgagactgcacgaccgtg
+caaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttgaagccacgtaaa
+ctgtacaaccttagagataagtctcaggctactaaaaacacgttgtggcactaacaggat
+catggttgattcttacttattcggctgaccggcccaataagtaaccttcaactagaacag
+aataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaactaacaagctct
+gtgtaaccaagttaaaatcgttttcttagcggattccctacttatggatttgagctcgtc
+cacaatattcgatacaagaagtttgtggtccgtaacaacgaaattttaattacgctgtgc
+agcctcatccaaggaattaatagaaggttgatggtaggctccgaacgctccatgattata
+atcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggtgttcgtttttgt
+tatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaacccatggttgat
+tttaggctaccttatttttaatttccgttacacagaaacgaattccacaactaacatgcc
+attaatttttcgatatcttataaaagatggtcgaaattcattcatttattttttttcggt
+tctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaaaagtggctttga
+tctcctacgtttggatactagtcaaccattactccatttgatccgtgagtatcacctgtc
+taacatccagcattatgactcctcggcgaagaaaagacacacttcttagagtcgatgtgt
+attagctagggacacagttgtttaatacgatagtgagcccagggagggcagtgcgtcccc
+cagtagatttattcagctagtgtaagtataagatatctcacccacgaggttcaagtgata
+tgcagtcttagaataatacttatcctgaatttcgatattatgggtacttcaataatccgc
+tagcgctactttatgtctcgttggacagcaggacacatggcagtcttaaacactaaagac
+atcacctgaatgaatgtaatgggattacaagaatcaatgaggtattatatacgacgtagg
+aaactctggatatatacagtaatctagttacgccatcgcacttcattcctctggaaactt
+agaagacatcagctgtacgtggaggaaccagacccccgtatgtagccaaatagaaccaaa
+gttgcttatacaaacacacccaatgacaatggaccgctggagttcgtaaactcggaacgt
+agtactgcacaaacccagcatttagcaataggagctacgtatgcaactcccacgtggtaa
+taccttcaagctatcaatatataggtgcctagctaatcgcattcgcaagcagtattcaag
+cttgtaaaccagtataataattacagaggctctatgaaacccaactttccagctaaaagt
+cccaattaaatggttatttc
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp.csharp-1.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp.csharp-1.cs
new file mode 100644
index 0000000000..4e875742e8
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp.csharp-1.cs
@@ -0,0 +1,250 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+/* The Computer Language Benchmarks Game
+ http://benchmarksgame.alioth.debian.org/
+
+ contributed by Robert F. Tobler to process large blocks of byte arrays
+
+ modified for use with xunit-performance
+*/
+
+using Microsoft.Xunit.Performance;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+
+[assembly: OptimizeForBenchmarks]
+[assembly: MeasureInstructionsRetired]
+
+namespace BenchmarksGame
+{
+
+public static class Revcomp
+{
+
+#if DEBUG
+ const int Iterations = 1;
+ const string InputFile = "revcomp-input25.txt";
+#else
+ const int Iterations = 800;
+ const string InputFile = "revcomp-input25000.txt";
+#endif
+
+ struct Block {
+ public byte[] Data; public int Count;
+ public int Read(BinaryReader r) {
+ Data = r.ReadBytes(16384); Count++; return Data.Length;
+ }
+ public Index IndexOf(byte b, int o) {
+ return new Index { Block = Count, Pos = Array.IndexOf(Data, b, o) };
+ }
+ }
+
+ struct Index {
+ public int Block; public int Pos;
+ public static readonly Index None = new Index { Block = -1, Pos = -1 };
+ public bool InBlock(Block b) { return Block == b.Count; }
+ }
+
+ const byte Gt = (byte)'>';
+ const byte Lf = (byte)'\n';
+
+ static string FindInput(string s)
+ {
+ string CoreRoot = System.Environment.GetEnvironmentVariable("CORE_ROOT");
+
+ if (CoreRoot == null)
+ {
+ Console.WriteLine("This benchmark requries CORE_ROOT to be set");
+ return null;
+ }
+
+ string inputFile = s ?? InputFile;
+
+ // Normal testing -- input file will end up next to the assembly
+ // and CoreRoot points at the test overlay dir
+ string[] pathPartsNormal = new string[] {
+ CoreRoot, "..", "..", "JIT", "Performance",
+ "CodeQuality", "BenchmarksGame", "revcomp", "revcomp", inputFile
+ };
+
+ string inputPathNormal = Path.Combine(pathPartsNormal);
+
+ // Perf testing -- input file will end up next to the assembly
+ // and CoreRoot points at this directory
+ string[] pathPartsPerf = new string[] { CoreRoot, inputFile };
+
+ string inputPathPerf = Path.Combine(pathPartsPerf);
+
+ string inputPath = null;
+
+ if (File.Exists(inputPathNormal))
+ {
+ inputPath = inputPathNormal;
+ }
+ else if (File.Exists(inputPathPerf))
+ {
+ inputPath = inputPathPerf;
+ }
+
+ if (inputPath != null)
+ {
+ Console.WriteLine("Using input file {0}", inputPath);
+ }
+ else
+ {
+ Console.WriteLine("Unable to find input file {0}", inputFile);
+ }
+
+ return inputPath;
+ }
+
+ static int Main(string[] args)
+ {
+ bool verbose = false;
+ string inputFile = InputFile;
+ int iterations = Iterations;
+
+ for (int i = 0; i < args.Length; i++)
+ {
+ if (args[i] == "-v")
+ {
+ verbose = true;
+ }
+ if (args[i] == "-i")
+ {
+ i++;
+
+ if (i < args.Length)
+ {
+ Int32.TryParse(args[i], out iterations);
+ }
+ }
+ else
+ {
+ inputFile = args[i];
+ }
+ }
+
+ string fullInputFile = FindInput(inputFile);
+
+ if (fullInputFile == null)
+ {
+ return -1;
+ }
+
+ if (iterations != Iterations)
+ {
+ Console.WriteLine("Running {0} iterations", iterations);
+ }
+
+ // Warmup
+ BenchInner(false, fullInputFile);
+
+ Stopwatch sw = Stopwatch.StartNew();
+ for (int j = 0; j < iterations; j++)
+ {
+ BenchInner(verbose, fullInputFile);
+ }
+ sw.Stop();
+ Console.WriteLine("revcomp [{0} iters]: {1}ms", iterations, sw.ElapsedMilliseconds);
+
+ return 100;
+ }
+
+ static void BenchInner(bool doOutput, string inputFile)
+ {
+ InitComplements();
+ var seq = new List<byte[]>();
+ var b = new Block { Count = -1 };
+ Index line = Index.None, start = Index.None, end = Index.None;
+ using (var r = new BinaryReader(File.OpenRead(inputFile))) {
+ using (var w = doOutput ? Console.OpenStandardOutput() : Stream.Null) {
+ while (b.Read(r) > 0) {
+ seq.Add(b.Data);
+ if (line.Pos < 0) line = b.IndexOf(Gt, 0);
+ while (line.Pos >= 0) {
+ if (start.Pos < 0) {
+ var off = line.InBlock(b) ? line.Pos : 0;
+ start = b.IndexOf(Lf, off);
+ if (start.Pos < 0) {
+ w.Write(b.Data, off, b.Data.Length - off);
+ seq.Clear(); break;
+ }
+ w.Write(b.Data, off, start.Pos + 1 - off);
+ }
+ if (end.Pos < 0) {
+ end = b.IndexOf(Gt, start.InBlock(b) ? start.Pos : 0);
+ if (end.Pos < 0) break;
+ }
+ w.Reverse(start.Pos, end.Pos, seq);
+ if (seq.Count > 1) seq.RemoveRange(0, seq.Count - 1);
+ line = end; end = Index.None; start = Index.None;
+ }
+ }
+ if (start.Pos >= 0 && end.Pos < 0)
+ w.Reverse(start.Pos, seq[seq.Count -1].Length, seq);
+ }
+ }
+ }
+
+ const string Seq = "ABCDGHKMRTVYabcdghkmrtvy";
+ const string Rev = "TVGHCDMKYABRTVGHCDMKYABR";
+ static byte[] comp = new byte[256];
+
+ static void InitComplements() {
+ for (byte i = 0; i < 255; i++) comp[i] = i;
+ for (int i = 0; i < Seq.Length; i++)
+ comp[(byte)Seq[i]] = (byte)Rev[i];
+ comp[Lf] = 0; comp[(byte)' '] = 0;
+ }
+
+ const int LineLen = 61;
+ const int BufSize = LineLen * 269;
+ static byte[] buf = new byte[BufSize];
+
+ static void Reverse(this Stream w, int si, int ei, List<byte[]> bl) {
+ int bi = 0, line = LineLen - 1;
+ for (int ri = bl.Count-1; ri >= 0; ri--) {
+ var b = bl[ri]; int off = ri == 0 ? si : 0;
+ for (int i = (ri == bl.Count-1 ? ei : b.Length)-1; i >= off; i--) {
+ var c = comp[b[i]]; if (c > 0) buf[bi++] = c;
+ if (bi == line) {
+ buf[bi++] = Lf; line += LineLen;
+ if (bi == BufSize) {
+ w.Write(buf, 0, BufSize); bi = 0; line = LineLen - 1;
+ }
+ }
+ }
+ }
+ if (bi > 0) {
+ if (buf[bi-1] != Lf) buf[bi++] = Lf; w.Write(buf, 0, bi);
+ }
+ }
+
+ [Benchmark]
+ public static void Bench()
+ {
+ string inputFile = FindInput(InputFile);
+
+ if (inputFile == null)
+ {
+ throw new Exception("unable to find input");
+ }
+
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ BenchInner(false, inputFile);
+ }
+ }
+ }
+ }
+}
+
+}
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor3.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp.csproj
index 7b149234e7..b44017b188 100644
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeCtor3.csproj
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp.csproj
@@ -13,33 +13,41 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
<ItemGroup>
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
<ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimector3.cs" />
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ <Compile Include="revcomp.csharp-1.cs" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
+ <Content Include="revcomp-input25.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="revcomp-input25000.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
</ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)benchmark\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)benchmark\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs b/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs
index 34c0ab888d..3253e255d6 100644
--- a/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs
+++ b/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs
@@ -62,9 +62,9 @@ public static class SeekUnroll
// Iteration counts for inner loop set to have each call take 1 or
// 2 seconds or so in release, finish quickly in debug.
#if DEBUG
- const int InnerIterations = 1;
+ static int InnerIterations = 1;
#else
- const int InnerIterations = 1000000000;
+ static int InnerIterations = 1000000000;
#endif
// Function to meaure InnerLoop using the xunit-perf benchmark measurement facilities
@@ -143,6 +143,14 @@ public static class SeekUnroll
public static int Main()
{
int failures = 0;
+
+ // On non-hardware accelerated platforms, the test times out because it runs for too long.
+ // In those cases, we decrease InnerIterations so the test doesn't time out.
+ if (!Vector.IsHardwareAccelerated)
+ {
+ InnerIterations = 100000;
+ }
+
foreach(int index in IndicesToTest)
{
ManualLoopTimes = new long[10];
diff --git a/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-Beta2/b425314/b425314.csproj b/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-Beta2/b425314/b425314.csproj
index d12563da55..b232ef8ddd 100644
--- a/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-Beta2/b425314/b425314.csproj
+++ b/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-Beta2/b425314/b425314.csproj
@@ -14,6 +14,10 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+
+ <!-- NOTE: this test simply takes too long to complete under heap verify. It is not fundamentally incompatible. -->
+ <GCStressIncompatible Condition="'$(Platform)' == 'x86'">true</GCStressIncompatible>
+ <HeapVerifyIncompatible Condition="'$(Platform)' == 'x86'">true</HeapVerifyIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_1206929/DevDiv_1206929.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_1206929/DevDiv_1206929.cs
new file mode 100644
index 0000000000..d363360272
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_1206929/DevDiv_1206929.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Runtime.CompilerServices;
+
+namespace ReadMemBytes
+{
+ class Program
+ {
+ static int Pass = 100;
+ static int Fail = -1;
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static unsafe int TestMemBytesNotReadPastTheLimit(byte *p, int byteLength)
+ {
+ int count = 0;
+ for (int i= 0; i< byteLength; ++i)
+ {
+ // RyuJIT lowering has an optimization to recognize the condition in
+ // "If" stmnt and generate "test byte ptr [p+i], 0" instruction. Due
+ // to a bug that has been fixed it will end up generating "test dword ptr [p+i], 0"
+ // that will lead to reading 4 bytes instead of a single byte.
+ if ((p[i] & 0xffffff00) != 0)
+ {
+ ++count;
+ }
+ }
+
+ return count;
+ }
+ static unsafe int Main(string[] args)
+ {
+ byte* buffer = stackalloc byte[4];
+ buffer[0] = 0;
+ buffer[1] = buffer[2] = buffer[3] = 0xff;
+
+ int result = TestMemBytesNotReadPastTheLimit(buffer, 1);
+ if (result != 0)
+ {
+ Console.WriteLine("Failed: Read past the end of buffer");
+ return Fail;
+ }
+ else
+ {
+ Console.WriteLine("Pass");
+ }
+
+ return Pass;
+
+ }
+ }
+}
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_1206929/DevDiv_1206929.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_1206929/DevDiv_1206929.csproj
new file mode 100644
index 0000000000..a1f7eaa470
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_1206929/DevDiv_1206929.csproj
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <PropertyGroup>
+ <DebugType></DebugType>
+ <Optimize>True</Optimize>
+ <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="DevDiv_1206929.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)minimal\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)minimal\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359733/DevDiv_359733.il b/tests/src/JIT/Regression/JitBlue/DevDiv_359733/DevDiv_359733.il
new file mode 100644
index 0000000000..18a712a4ae
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359733/DevDiv_359733.il
@@ -0,0 +1,66 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+// This test originally triggered an assert during remorphing while performing constant propagation when
+// extracting the side effects of a discarded tree (specifically, the tree that corresponds to the xor in
+// method C::M, which transitively takes exception-producing covnersions as arguments). The assert was
+// attempting to ensure that if value numbers were present on the comma node used to hold the side effects,
+// then value numbers were also present on the expression being added to the list. This condition may be violated
+// when remorphing, however, and the assertion was appropiately weakened.
+
+.assembly extern mscorlib {}
+.assembly DevDiv_1359733 {}
+
+.class private C extends [mscorlib]System.Object
+{
+ .method private static int16 M(bool a0, int16 a1, int16 a2, int32 a3) cil managed noinlining
+ {
+ .locals init (int32 l0, int16 l1, int64 l2, int16 l3, int8 l4, float32 l5, int8 l6)
+
+ ldloc l3
+ ldloc l5
+ conv.i8
+ conv.r8
+ neg
+ conv.ovf.u1.un
+ ldloc.s l5
+ conv.ovf.i8
+ ldc.i8 0x4007ACD1
+ ldloc l6
+ shr
+ rem
+ nop
+ ldc.i8 0x21C591BD
+ neg
+ cgt.un
+ xor
+ pop
+ ret
+ }
+
+ .method private static int32 Main() cil managed
+ {
+ .entrypoint
+
+ .try
+ {
+ ldc.i4 0
+ ldc.i4 0
+ ldc.i4 0
+ ldc.i4 0
+ call int16 C::M(bool, int16, int16, int32)
+ pop
+ leave.s done
+ }
+ catch [mscorlib]System.Exception
+ {
+ pop
+ leave.s done
+ }
+
+ done:
+ ldc.i4 100
+ ret
+ }
+}
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359733/DevDiv_359733.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_359733/DevDiv_359733.ilproj
new file mode 100644
index 0000000000..8f0870dc0f
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359733/DevDiv_359733.ilproj
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages</ReferencePath>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <PropertyGroup>
+ <DebugType>None</DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="DevDiv_359733.il" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359737/DevDiv_359737.il b/tests/src/JIT/Regression/JitBlue/DevDiv_359737/DevDiv_359737.il
new file mode 100644
index 0000000000..9917c21fca
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359737/DevDiv_359737.il
@@ -0,0 +1,42 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+.assembly extern mscorlib {}
+.assembly DevDiv_359737 {}
+
+// This test originally repro'd a bug in morph that transformed modulus by a constant into division and subtraction
+// while re-morphing as part of CSE.
+
+.class C extends [mscorlib]System.Object
+{
+ .method static int16 M() cil managed noinlining
+ {
+ ldc.i4 0x78804C04
+ conv.ovf.u2
+ dup
+ rem
+ ret
+ }
+
+ .method static int32 Main() cil managed
+ {
+ .entrypoint
+
+ .try
+ {
+ call int16 C::M()
+ pop
+ leave.s done
+ }
+ catch [mscorlib]System.Exception
+ {
+ pop
+ leave.s done
+ }
+
+ done:
+ ldc.i4 100
+ ret
+ }
+}
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359737/DevDiv_359737.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_359737/DevDiv_359737.ilproj
new file mode 100644
index 0000000000..f05d981217
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359737/DevDiv_359737.ilproj
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages</ReferencePath>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <PropertyGroup>
+ <DebugType>None</DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="DevDiv_359737.il" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_362706/DevDiv_362706.il b/tests/src/JIT/Regression/JitBlue/DevDiv_362706/DevDiv_362706.il
new file mode 100644
index 0000000000..a5b7a6dbb6
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_362706/DevDiv_362706.il
@@ -0,0 +1,162 @@
+// Reading from 'C:\SuperPMI\compiler_hpp__1784____Assertion_failed__lvRefCnt.mc' dumping raw IL for MC Indexes to console
+// ProcessName - 'ILGEN'
+.assembly extern mscorlib{}
+.assembly DevDiv_362706{}
+.class C extends [mscorlib]System.Object
+{
+ .method static unsigned int64 M(float32, int32) cil managed noinlining
+ {
+ .maxstack 65535
+ .locals init (unsigned int8, native unsigned int)
+
+ ldc.i8 0x085d689753da3de1
+ ldc.i8 0xe61597946032e570
+ clt.un
+ conv.u8
+ ldc.i8 0x7982285f972837bd
+ ldc.i8 0xbff060a0e0e2eeba
+ sub
+ ldloc 0x0001
+ shl
+ mul.ovf
+ ldarg.s 0x00
+ starg.s 0x00
+ brtrue IL_005f
+ ldc.i8 0xbcb846d27e2968bf
+ conv.r.un
+ ckfinite
+ pop
+ ldarg.s 0x01
+ conv.ovf.i8
+ ldc.i8 0xe3b63c00f2954a6c
+ ldc.i8 0x3332cfb7aa00a0b0
+ div.un
+ clt
+ stloc 0x0001
+
+IL_005f:
+ ldloc 0x0000
+ ldc.i4 0x1ef1d296
+ ldc.r8 float64(0x157cd4c7a3c884f1)
+ ldc.r8 float64(0xa5da6ecb57585851)
+ add
+ ckfinite
+ neg
+ conv.r.un
+ conv.ovf.i4.un
+ cgt.un
+ not
+ or
+ ldarg.s 0x00
+ conv.r.un
+ ldarg 0x0000
+ ldc.i8 0x9cb75a81b3443e9c
+ conv.ovf.u8.un
+ conv.i4
+ pop
+ neg
+ cgt.un
+ ldloc 0x0001
+ ldc.i4 0x1bf905b2
+ ldloc.s 0x00
+ xor
+ rem
+ ldloc.s 0x00
+ ldc.r8 float64(0x94424127b67875d0)
+ ldc.i8 0x96e1b4664d5ad509
+ conv.ovf.i2
+ conv.r4
+ add
+ conv.ovf.u2.un
+ shr.un
+ shr
+ ldc.i8 0x1919368cc08e5eb1
+ ldc.i8 0x4b6a3f418d2e0236
+ ceq
+ ceq
+ starg.s 0x01
+ bgt IL_011a
+ ldarg.s 0x00
+ conv.ovf.i8.un
+ ldloc 0x0000
+ ldc.r8 float64(0x7e83ec1e8c2e0e94)
+ conv.ovf.i2
+ shl
+ not
+ not
+ conv.i8
+ conv.ovf.u8
+ ldc.i4 0x8a3055bd
+ neg
+ ldarg 0x0001
+ xor
+ conv.i8
+ ldc.i4 0xa2d0ea18
+ shr.un
+ ldc.i8 0x53ac012d34eb9f44
+ xor
+ neg
+ add
+ ldarg 0x0000
+ conv.ovf.u4.un
+ shr
+ or
+ conv.r8
+ pop
+
+IL_011a:
+ ldarg 0x0000
+ neg
+ ldarg 0x0000
+ neg
+ div
+ ldloc.s 0x01
+ ldarg 0x0001
+ ldloc 0x0000
+ ldloc 0x0001
+ and
+ shl
+ mul.ovf.un
+ starg.s 0x01
+ ldc.i4 0xc47fec23
+ conv.r8
+ div
+ conv.ovf.i8.un
+ not
+ ldc.r8 float64(0x401dee505a2add2e)
+ ldc.i8 0x0dc5a76cd1306317
+ conv.i1
+ conv.r8
+ add
+ conv.r4
+ conv.ovf.i1.un
+ nop
+ stloc.s 0x00
+ nop
+ ret
+ }
+
+ .method static int32 Main() cil managed
+ {
+ .entrypoint
+
+ .try
+ {
+ ldc.r4 float32(0xFF800000)
+ ldc.i4.s 25
+ call unsigned int64 C::M(float32, int32)
+ pop
+ leave.s done
+ }
+ catch [mscorlib]System.Exception
+ {
+ pop
+ leave.s done
+ }
+
+ done:
+ ldc.i4 100
+ ret
+ }
+}
+// Dumped 1
diff --git a/tests/src/CoreMangLib/system/text/encoding/Shift_Jis.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_362706/DevDiv_362706.ilproj
index 3b9cd94f3e..6058846d69 100644
--- a/tests/src/CoreMangLib/system/text/encoding/Shift_Jis.csproj
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_362706/DevDiv_362706.ilproj
@@ -4,6 +4,7 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
<OutputType>Exe</OutputType>
@@ -13,10 +14,6 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -28,18 +25,27 @@
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
+ <PropertyGroup>
+ <DebugType>None</DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
<ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="shift_jis.cs" />
+ <Compile Include="DevDiv_362706.il" />
</ItemGroup>
+ <PropertyGroup>
+ <CLRTestBatchPreCommands><![CDATA[
+$(CLRTestBatchPreCommands)
+set COMPlus_JitStressRegs=0x200
+]]></CLRTestBatchPreCommands>
+ <BashCLRTestPreCommands><![CDATA[
+$(BashCLRTestPreCommands)
+export COMPlus_JitStressRegs=0x200
+]]></BashCLRTestPreCommands>
+ </PropertyGroup>
<ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_367099/DevDiv_367099.il b/tests/src/JIT/Regression/JitBlue/DevDiv_367099/DevDiv_367099.il
new file mode 100644
index 0000000000..f01b508ffd
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_367099/DevDiv_367099.il
@@ -0,0 +1,99 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+.assembly extern legacy library mscorlib {}
+
+.assembly devdiv_367099 {}
+
+.class public auto ansi beforefieldinit P
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+ // Code size 14 (0xe)
+ .maxstack 1
+ .locals init (int32 V_0)
+ IL_0000: nop
+ IL_0001: call void P::TestCatchReturn()
+ IL_0006: nop
+ IL_0007: ldc.i4.s 100
+ IL_0009: stloc.0
+ IL_000a: br.s IL_000c
+
+ IL_000c: ldloc.0
+ IL_000d: ret
+ } // end of method P::Main
+
+ .method public hidebysig static void TestCatchReturn() cil managed
+ {
+ // Code size 30 (0x1e)
+ .maxstack 1
+ IL_0000: nop
+ .try
+ {
+ IL_0001: nop
+ IL_0002: nop
+ IL_0003: leave.s IL_001b
+
+ } // end .try
+ catch [mscorlib]System.Exception
+ {
+ IL_0005: pop
+ IL_0006: nop
+ .try
+ {
+ IL_0007: nop
+ .try
+ {
+ .try
+ {
+ IL_0008: nop
+ IL_0009: leave.s IL_001c
+
+ } // end .try
+ catch [mscorlib]System.Object
+ {
+ IL_000b: pop
+ IL_000c: nop
+ IL_000d: leave.s IL_001c
+
+ } // end handler
+ } // end .try
+ finally
+ {
+ IL_000f: nop
+ IL_0010: nop
+ IL_0011: endfinally
+ } // end handler
+ } // end .try
+ catch [mscorlib]System.Exception
+ {
+ IL_0012: pop
+ IL_0013: nop
+ IL_0014: nop
+ IL_0015: leave.s IL_0017
+
+ } // end handler
+ IL_0017: nop
+ IL_0018: nop
+ IL_0019: leave.s IL_001b
+
+ } // end handler
+ IL_001b: nop
+ IL_001c: nop
+ IL_001d: ret
+ } // end of method P::TestCatchReturn
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method P::.ctor
+
+} // end of class P
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeNow.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_367099/DevDiv_367099.ilproj
index bfc039f80f..bb4737395d 100644
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeNow.csproj
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_367099/DevDiv_367099.ilproj
@@ -4,6 +4,7 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
<OutputType>Exe</OutputType>
@@ -13,10 +14,6 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -28,18 +25,27 @@
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
+ <PropertyGroup>
+ <DebugType>None</DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
<ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimenow.cs" />
+ <Compile Include="DevDiv_367099.il" />
</ItemGroup>
+ <PropertyGroup>
+ <CLRTestBatchPreCommands><![CDATA[
+$(CLRTestBatchPreCommands)
+set COMPlus_JitStressRegs=0x200
+]]></CLRTestBatchPreCommands>
+ <BashCLRTestPreCommands><![CDATA[
+$(BashCLRTestPreCommands)
+export COMPlus_JitStressRegs=0x200
+]]></BashCLRTestPreCommands>
+ </PropertyGroup>
<ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_370233/DevDiv_370233.il b/tests/src/JIT/Regression/JitBlue/DevDiv_370233/DevDiv_370233.il
new file mode 100644
index 0000000000..3da4b63953
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_370233/DevDiv_370233.il
@@ -0,0 +1,136 @@
+.assembly extern mscorlib{}
+.assembly DevDiv_370233{}
+.class C extends [mscorlib]System.Object
+{
+ .method static unsigned int32 M(bool, bool)
+ {
+ .maxstack 65535
+ .locals init (unsigned int32, unsigned int64, unsigned int8, unsigned int8, native int, float64, char, unsigned int16, bool, char, bool)
+
+ ldloc 0x0006
+ ldc.i4 0x11467af6
+ shr
+ conv.ovf.u8
+ dup
+ sub
+ ldloc.s 0x06
+ ldloc.s 0x07
+ neg
+ rem.un
+ conv.ovf.i8.un
+ xor
+ neg
+ conv.ovf.u
+ conv.r4
+ ldloc 0x0005
+ ldloc.s 0x05
+ ckfinite
+ ckfinite
+ conv.r4
+ ceq
+ ldarg 0x0001
+ conv.r4
+ pop
+ pop
+ ldloc 0x0001
+ ldloc 0x0001
+ neg
+ conv.i8
+ ldloc.s 0x04
+ shr
+ clt.un
+ conv.ovf.i1.un
+ conv.i8
+ not
+ nop
+ ldc.i8 0x16cb54ea7cfcd50d
+ ldloc 0x0001
+ clt
+ ldloc.s 0x01
+ conv.ovf.u1
+ conv.ovf.i2.un
+ cgt
+ conv.ovf.i8
+ ldc.i8 0x6be45c7b8c08f1d5
+ conv.ovf.u8
+ ldloc.s 0x01
+ add.ovf
+ not
+ ldloc.s 0x03
+ shr.un
+ ldloc.s 0x01
+ add
+ not
+ ldloc.s 0x03
+ neg
+ shr
+ nop
+ conv.u4
+ neg
+ shr.un
+ ceq
+ ldloc 0x0001
+ conv.r4
+ ldc.r8 float64(0x9b4c7410aec1e6d3)
+ add
+ ldloc.s 0x00
+ ldarg.s 0x00
+ xor
+ ldloc.s 0x08
+ mul
+ not
+ conv.r.un
+ ldloc.s 0x02
+ ldloc 0x0006
+ add
+ conv.r4
+ mul
+ cgt
+ ldloc.s 0x05
+ ldloc.s 0x05
+ cgt.un
+ ldarg 0x0001
+ not
+ shl
+ div
+ ldc.i8 0x5892c0a0bd150d05
+ ldc.i8 0x8c33eb17e67e9772
+ neg
+ ceq
+ not
+ ldloc.s 0x00
+ ldloc 0x0003
+ ceq
+ or
+ pop
+ xor
+ conv.r.un
+ ceq
+ conv.u2
+ ret
+ }
+
+ .method static int32 Main() cil managed
+ {
+ .entrypoint
+
+ .try
+ {
+ ldc.i4 0
+ ldc.i4.s 0
+ call unsigned int32 C::M(bool, bool)
+ pop
+ leave.s done
+ }
+ catch [mscorlib]System.Exception
+ {
+ pop
+ leave.s done
+ }
+
+ done:
+ ldc.i4 100
+ ret
+ }
+}
+// Dumped 1
diff --git a/tests/src/CoreMangLib/cti/system/datetime/DateTimeKind.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_370233/DevDiv_370233.ilproj
index 069fff57c6..4642defb16 100644
--- a/tests/src/CoreMangLib/cti/system/datetime/DateTimeKind.csproj
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_370233/DevDiv_370233.ilproj
@@ -4,6 +4,7 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
<OutputType>Exe</OutputType>
@@ -13,10 +14,6 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -28,18 +25,27 @@
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
+ <PropertyGroup>
+ <DebugType>None</DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
<ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="datetimekind.cs" />
+ <Compile Include="DevDiv_370233.il" />
</ItemGroup>
+ <PropertyGroup>
+ <CLRTestBatchPreCommands><![CDATA[
+$(CLRTestBatchPreCommands)
+set COMPlus_JitStressRegs=0x200
+]]></CLRTestBatchPreCommands>
+ <BashCLRTestPreCommands><![CDATA[
+$(BashCLRTestPreCommands)
+export COMPlus_JitStressRegs=0x200
+]]></BashCLRTestPreCommands>
+ </PropertyGroup>
<ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
- <ItemGroup>
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- <ProjectReference Include="../../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
- </ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
- </PropertyGroup>
-</Project> \ No newline at end of file
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_377155/DevDiv_377155.il b/tests/src/JIT/Regression/JitBlue/DevDiv_377155/DevDiv_377155.il
new file mode 100644
index 0000000000..4c1ab4a125
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_377155/DevDiv_377155.il
@@ -0,0 +1,75 @@
+// ProcessName - 'ILGEN'
+.assembly extern mscorlib{}
+.assembly DevDiv_377155{}
+.class C extends [mscorlib]System.Object
+{
+ .method static float32 M() cil managed noinlining
+ {
+ .maxstack 65535
+ .locals init (float64, native unsigned int, native int, char, unsigned int64, bool)
+
+ ldloc.s 0x04
+ conv.ovf.u8.un
+ conv.ovf.u2.un
+ ldc.r8 float64(0x9eda41f595fa8ca8)
+ conv.r4
+ conv.u8
+ pop
+ ldc.i4 0x1de50978
+ ldloc 0x0004
+ ldloc.s 0x04
+ or
+ ldc.i8 0x2d9c5178675b7af5
+ ldloc 0x0004
+ ldloc 0x0004
+ mul
+ ldloc.s 0x04
+ conv.ovf.u2.un
+ shr.un
+ not
+ not
+ or
+ cgt.un
+ ldc.i4 0xbdc937ef
+ ldloc.s 0x05
+ add.ovf.un
+ clt.un
+ shl
+ not
+ neg
+ shr.un
+ conv.r4
+ ckfinite
+ ldloc.s 0x00
+ clt.un
+ nop
+ brtrue IL_0052
+ nop
+IL_0052:
+ ldloc 0x0000
+ ret
+ }
+
+ .method static int32 Main() cil managed
+ {
+ .entrypoint
+
+ .try
+ {
+ call float32 C::M()
+ pop
+ leave.s done
+ }
+ catch [mscorlib]System.Exception
+ {
+ pop
+ leave.s done
+ }
+
+ done:
+ ldc.i4 100
+ ret
+ }
+
+}
+// Dumped 1
diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_377155/DevDiv_377155.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_377155/DevDiv_377155.ilproj
new file mode 100644
index 0000000000..32d609496e
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/DevDiv_377155/DevDiv_377155.ilproj
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <PropertyGroup>
+ <DebugType>None</DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="DevDiv_377155.il" />
+ </ItemGroup>
+ <PropertyGroup>
+ <CLRTestBatchPreCommands><![CDATA[
+$(CLRTestBatchPreCommands)
+set COMPlus_JitStressRegs=0x200
+]]></CLRTestBatchPreCommands>
+ <BashCLRTestPreCommands><![CDATA[
+$(BashCLRTestPreCommands)
+export COMPlus_JitStressRegs=0x200
+]]></BashCLRTestPreCommands>
+ </PropertyGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_7508/Vector3Test.cs b/tests/src/JIT/Regression/JitBlue/GitHub_7508/Vector3Test.cs
new file mode 100644
index 0000000000..609141fd64
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/GitHub_7508/Vector3Test.cs
@@ -0,0 +1,152 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+// Since Issue 7508 was a performance issue, there's not really a correctness
+// test for this.
+// However, this is a very simple test that can be used to compare the code generated
+// for a non-accelerated vector of 3 floats, a "raw" Vector3 and a Vector3
+// wrapped in a struct.
+
+using System;
+using System.Diagnostics;
+using System.Runtime.CompilerServices;
+using System.Numerics;
+
+namespace Test01
+{
+ public struct SimpleVector3
+ {
+ [MethodImpl( MethodImplOptions.AggressiveInlining )]
+ public SimpleVector3( float x, float y, float z )
+ {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ [MethodImpl( MethodImplOptions.AggressiveInlining )]
+ public static SimpleVector3 operator +( SimpleVector3 a, SimpleVector3 b )
+ => new SimpleVector3( a.x + b.x, a.y + b.y, a.z + b.z );
+
+ public float X
+ {
+ get { return x; }
+ set { x = value; }
+ }
+
+ public float Y
+ {
+ get { return y; }
+ set { y = value; }
+ }
+
+ public float Z
+ {
+ get { return z; }
+ set { z = value; }
+ }
+
+ float x, y, z;
+ }
+
+ public struct WrappedVector3
+ {
+ [MethodImpl( MethodImplOptions.AggressiveInlining )]
+ public WrappedVector3( float x, float y, float z )
+ {
+ v = new System.Numerics.Vector3( x, y, z );
+ }
+
+ [MethodImpl( MethodImplOptions.AggressiveInlining )]
+ WrappedVector3( System.Numerics.Vector3 v )
+ {
+ this.v = v;
+ }
+
+ [MethodImpl( MethodImplOptions.AggressiveInlining )]
+ public static WrappedVector3 operator +( WrappedVector3 a, WrappedVector3 b )
+ => new WrappedVector3( a.v + b.v );
+
+ public float X
+ {
+ get { return v.X; }
+ set { v.X = value; }
+ }
+
+ public float Y
+ {
+ get { return v.Y; }
+ set { v.Y = value; }
+ }
+
+ public float Z
+ {
+ get { return v.Z; }
+ set { v.Z = value; }
+ }
+
+ Vector3 v;
+ }
+
+ public class Program
+ {
+ static Random random = new Random( 12345 );
+ [MethodImpl( MethodImplOptions.NoInlining )]
+ static SimpleVector3 RandomSimpleVector3()
+ => new SimpleVector3( (float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble() );
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static WrappedVector3 RandomWrappedVector3()
+ => new WrappedVector3( (float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble() );
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static Vector3 RandomVector3()
+ => new Vector3( (float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble() );
+
+ public static float TestSimple()
+ {
+ var simpleA = RandomSimpleVector3();
+ var simpleB = RandomSimpleVector3();
+ var simpleC = simpleA + simpleB;
+ Console.WriteLine("Simple Vector3: {0},{1},{2}", simpleC.X, simpleC.Y, simpleC.Z);
+ return simpleC.X + simpleC.Y + simpleC.Z;
+ }
+ public static float TestWrapped()
+ {
+ var wrappedA = RandomWrappedVector3();
+ var wrappedB = RandomWrappedVector3();
+ var wrappedC = wrappedA + wrappedB;
+ Console.WriteLine("Wrapped Vector3: {0},{1},{2}", wrappedC.X, wrappedC.Y, wrappedC.Z);
+ return wrappedC.X + wrappedC.Y + wrappedC.Z;
+ }
+ public static float TestSIMD()
+ {
+ var a = RandomVector3();
+ var b = RandomVector3();
+ var c = a + b;
+ Console.WriteLine("SIMD Vector3: {0},{1},{2}", c.X, c.Y, c.Z);
+ return c.X + c.Y + c.Z;
+ }
+ public static int Main( string[] args )
+ {
+ int returnVal = 100;
+
+ // First, test a simple (non-SIMD) Vector3 type
+ float f = TestSimple();
+
+ // Now a wrapped SIMD Vector3.
+ if (TestWrapped() != f)
+ {
+ returnVal = -1;
+ }
+
+ // Now, SIMD Vector3
+ if (TestSIMD() != f)
+ {
+ returnVal = -1;
+ }
+
+ return 100;
+ }
+ }
+}
+
diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_7508/Vector3Test.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_7508/Vector3Test.csproj
new file mode 100644
index 0000000000..2e97f364b9
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/GitHub_7508/Vector3Test.csproj
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <PropertyGroup>
+ <DebugType></DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)threading+thread\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)threading+thread\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Regression/VS-ia64-JIT/V2.0-RTM/b539509/b539509.cs b/tests/src/JIT/Regression/VS-ia64-JIT/V2.0-RTM/b539509/b539509.cs
index 0b1dfcee82..abeaa019e1 100644
--- a/tests/src/JIT/Regression/VS-ia64-JIT/V2.0-RTM/b539509/b539509.cs
+++ b/tests/src/JIT/Regression/VS-ia64-JIT/V2.0-RTM/b539509/b539509.cs
@@ -133,7 +133,7 @@ public class AA<TA, TB, TC, TD, TE, TF>
do
{
bool[, , , ,][,] local8 = (new bool[81u, 98u, ((uint)(58.0f)), ((uint)(36.0f)),
- 74u][,]);
+ 74u*4u][,]);
while ((((uint)(local5)) != 4u))
{
if (Convert.ToBoolean((local5 + local5)))
diff --git a/tests/src/JIT/SIMD/VectorAbs.cs b/tests/src/JIT/SIMD/VectorAbs.cs
index 64a7bde17f..6a8233cb9b 100644
--- a/tests/src/JIT/SIMD/VectorAbs.cs
+++ b/tests/src/JIT/SIMD/VectorAbs.cs
@@ -76,6 +76,8 @@ internal partial class VectorTest
if (VectorAbsTest<Double>.VectorAbs(-1d, 1d) != Pass) returnVal = Fail;
if (VectorAbsTest<int>.VectorAbs(-1, 1) != Pass) returnVal = Fail;
if (VectorAbsTest<long>.VectorAbs(-1, 1) != Pass) returnVal = Fail;
+ if (VectorAbsTest<short>.VectorAbs((short)-1, (short)1) != Pass) returnVal = Fail;
+ if (VectorAbsTest<sbyte>.VectorAbs((sbyte)-1, (sbyte)1) != Pass) returnVal = Fail;
if (Vector4Test.VectorAbs() != Pass) returnVal = Fail;
if (Vector3Test.VectorAbs() != Pass) returnVal = Fail;
if (Vector2Test.VectorAbs() != Pass) returnVal = Fail;
@@ -87,7 +89,10 @@ internal partial class VectorTest
JitLog jitLog = new JitLog();
if (!jitLog.Check("Abs", "Single")) returnVal = Fail;
if (!jitLog.Check("Abs", "Double")) returnVal = Fail;
- // Abs is not an intrinsic for Int32 and Int64, but IS for UInt32 and UInt64
+ if (!jitLog.Check("Abs", "Int64")) returnVal = Fail;
+ if (!jitLog.Check("Abs", "Int32")) returnVal = Fail;
+ if (!jitLog.Check("Abs", "Int16")) returnVal = Fail;
+ if (!jitLog.Check("Abs", "SByte")) returnVal = Fail;
if (!jitLog.Check("System.Numerics.Vector4:Abs")) returnVal = Fail;
if (!jitLog.Check("System.Numerics.Vector3:Abs")) returnVal = Fail;
if (!jitLog.Check("System.Numerics.Vector2:Abs")) returnVal = Fail;
@@ -95,6 +100,7 @@ internal partial class VectorTest
if (!jitLog.Check("Abs", "Byte")) returnVal = Fail;
if (!jitLog.Check("Abs", "UInt32")) returnVal = Fail;
if (!jitLog.Check("Abs", "UInt64")) returnVal = Fail;
+
jitLog.Dispose();
return returnVal;
diff --git a/tests/src/JIT/SIMD/VectorMin.cs b/tests/src/JIT/SIMD/VectorMin.cs
index 8757eba5b9..4a9fd90038 100644
--- a/tests/src/JIT/SIMD/VectorMin.cs
+++ b/tests/src/JIT/SIMD/VectorMin.cs
@@ -39,6 +39,7 @@ internal partial class VectorTest
if (!(CheckValue<float>(C.X, result))) return Fail;
if (!(CheckValue<float>(C.Y, result))) return Fail;
if (!(CheckValue<float>(C.Z, result))) return Fail;
+ if (!(CheckValue<float>(C.W, result))) return Fail;
return Pass;
}
}
diff --git a/tests/src/JIT/SIMD/VectorReturn.cs b/tests/src/JIT/SIMD/VectorReturn.cs
index d1785af450..083f4b274e 100644
--- a/tests/src/JIT/SIMD/VectorReturn.cs
+++ b/tests/src/JIT/SIMD/VectorReturn.cs
@@ -11,50 +11,134 @@ internal partial class VectorTest
{
private const int Pass = 100;
private const int Fail = -1;
- private static Vector2[] s_A;
- private static Vector2 s_p0;
- private static Vector2 s_p1;
- private static Vector2 s_p2;
- private static Vector2 s_p3;
+
+ private static Vector2[] s_v2_array;
+ private static Vector2 s_v2_0;
+ private static Vector2 s_v2_1;
+ private static Vector2 s_v2_2;
+ private static Vector2 s_v2_3;
+
+ private static Vector3[] s_v3_array;
+ private static Vector3 s_v3_0;
+ private static Vector3 s_v3_1;
+ private static Vector3 s_v3_2;
+ private static Vector3 s_v3_3;
+
+ private static Vector4[] s_v4_array;
+ private static Vector4 s_v4_0;
+ private static Vector4 s_v4_1;
+ private static Vector4 s_v4_2;
+ private static Vector4 s_v4_3;
[MethodImplAttribute(MethodImplOptions.NoInlining)]
public static void init()
{
- s_A = new Vector2[10];
Random random = new Random(100);
+
+ s_v2_array = new Vector2[10];
+ for (int i = 0; i < 10; i++)
+ {
+ s_v2_array[i] = new Vector2(random.Next(100));
+ }
+ s_v2_0 = new Vector2(random.Next(100));
+ s_v2_1 = new Vector2(random.Next(100));
+ s_v2_2 = new Vector2(random.Next(100));
+ s_v2_3 = new Vector2(random.Next(100));
+
+ s_v3_array = new Vector3[10];
for (int i = 0; i < 10; i++)
{
- s_A[i] = new Vector2(random.Next(100));
+ s_v3_array[i] = new Vector3(random.Next(100));
}
- s_p0 = new Vector2(random.Next(100));
- s_p1 = new Vector2(random.Next(100));
- s_p2 = new Vector2(random.Next(100));
- s_p3 = new Vector2(random.Next(100));
+ s_v3_0 = new Vector3(random.Next(100));
+ s_v3_1 = new Vector3(random.Next(100));
+ s_v3_2 = new Vector3(random.Next(100));
+ s_v3_3 = new Vector3(random.Next(100));
+
+ s_v4_array = new Vector4[10];
+ for (int i = 0; i < 10; i++)
+ {
+ s_v4_array[i] = new Vector4(random.Next(100));
+ }
+ s_v4_0 = new Vector4(random.Next(100));
+ s_v4_1 = new Vector4(random.Next(100));
+ s_v4_2 = new Vector4(random.Next(100));
+ s_v4_3 = new Vector4(random.Next(100));
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static Vector2 F1(float t)
+ public static Vector2 F1_v2(float t)
{
float ti = 1 - t;
float t0 = ti * ti * ti;
float t1 = 3 * ti * ti * t;
float t2 = 3 * ti * t * t;
float t3 = t * t * t;
- return (t0 * s_p0) + (t1 * s_p1) + (t2 * s_p2) + (t3 * s_p3);
+ return (t0 * s_v2_0) + (t1 * s_v2_1) + (t2 * s_v2_2) + (t3 * s_v2_3);
}
[MethodImplAttribute(MethodImplOptions.NoInlining)]
- public static Vector2 F2(float u)
+ public static Vector2 F2_v2(float u)
{
if (u < 0)
- return s_A[0];
+ return s_v2_array[0];
if (u >= 1)
- return s_A[1];
+ return s_v2_array[1];
if (u < 0.1)
- return s_A[2];
+ return s_v2_array[2];
if (u > 0.9)
- return s_A[3];
- return F1(u);
+ return s_v2_array[3];
+ return F1_v2(u);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static Vector3 F1_v3(float t)
+ {
+ float ti = 1 - t;
+ float t0 = ti * ti * ti;
+ float t1 = 3 * ti * ti * t;
+ float t2 = 3 * ti * t * t;
+ float t3 = t * t * t;
+ return (t0 * s_v3_0) + (t1 * s_v3_1) + (t2 * s_v3_2) + (t3 * s_v3_3);
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static Vector3 F2_v3(float u)
+ {
+ if (u < 0)
+ return s_v3_array[0];
+ if (u >= 1)
+ return s_v3_array[1];
+ if (u < 0.1)
+ return s_v3_array[2];
+ if (u > 0.9)
+ return s_v3_array[3];
+ return F1_v3(u);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static Vector4 F1_v4(float t)
+ {
+ float ti = 1 - t;
+ float t0 = ti * ti * ti;
+ float t1 = 3 * ti * ti * t;
+ float t2 = 3 * ti * t * t;
+ float t3 = t * t * t;
+ return (t0 * s_v4_0) + (t1 * s_v4_1) + (t2 * s_v4_2) + (t3 * s_v4_3);
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static Vector4 F2_v4(float u)
+ {
+ if (u < 0)
+ return s_v4_array[0];
+ if (u >= 1)
+ return s_v4_array[1];
+ if (u < 0.1)
+ return s_v4_array[2];
+ if (u > 0.9)
+ return s_v4_array[3];
+ return F1_v4(u);
}
[MethodImplAttribute(MethodImplOptions.NoInlining)]
@@ -133,25 +217,51 @@ internal partial class VectorTest
public static int Main()
{
init();
- Vector2 result = F2(0.5F);
- Vector2 expectedResult = F1(0.5F);
- Console.WriteLine("Result is " + result.ToString());
- if (!CheckValue<float>(result.X, expectedResult.X) || !CheckValue<float>(result.Y, expectedResult.Y))
+
+ Vector2 result_v2 = F2_v2(0.5F);
+ Vector2 expectedResult_v2 = F1_v2(0.5F);
+ Console.WriteLine("Result is " + result_v2.ToString());
+ if (!CheckValue<float>(result_v2.X, expectedResult_v2.X) || !CheckValue<float>(result_v2.Y, expectedResult_v2.Y))
+ {
+ Console.WriteLine("Expected result is " + expectedResult_v2.ToString());
+ Console.WriteLine("Vector2 test FAILED");
+ return Fail;
+ }
+
+ Vector3 result_v3 = F2_v3(0.6F);
+ Vector3 expectedResult_v3 = F1_v3(0.6F);
+ Console.WriteLine("Result is " + result_v3.ToString());
+ if (!CheckValue<float>(result_v3.X, expectedResult_v3.X) ||
+ !CheckValue<float>(result_v3.Y, expectedResult_v3.Y) ||
+ !CheckValue<float>(result_v3.Z, expectedResult_v3.Z))
+ {
+ Console.WriteLine("Expected result is " + expectedResult_v3.ToString());
+ Console.WriteLine("Vector3 test FAILED");
+ return Fail;
+ }
+
+ Vector4 result_v4 = F2_v4(0.7F);
+ Vector4 expectedResult_v4 = F1_v4(0.7F);
+ Console.WriteLine("Result is " + result_v4.ToString());
+ if (!CheckValue<float>(result_v4.X, expectedResult_v4.X) ||
+ !CheckValue<float>(result_v4.Y, expectedResult_v4.Y) ||
+ !CheckValue<float>(result_v4.Z, expectedResult_v4.Z) ||
+ !CheckValue<float>(result_v4.W, expectedResult_v4.W))
{
- Console.WriteLine("Expected result is " + expectedResult.ToString());
- Console.WriteLine("FAILED");
+ Console.WriteLine("Expected result is " + expectedResult_v4.ToString());
+ Console.WriteLine("Vector4 test FAILED");
return Fail;
}
if (VectorTReturnTest() != Pass)
{
- Console.WriteLine("FAILED");
+ Console.WriteLine("VectorTReturnTest FAILED");
return Fail;
}
if (Vector3ReturnTest() != Pass)
{
- Console.WriteLine("FAILED");
+ Console.WriteLine("Vector3ReturnTest FAILED");
return Fail;
}
diff --git a/tests/src/JIT/SIMD/VectorUtil.cs b/tests/src/JIT/SIMD/VectorUtil.cs
index 6501aac767..2249ff84e0 100644
--- a/tests/src/JIT/SIMD/VectorUtil.cs
+++ b/tests/src/JIT/SIMD/VectorUtil.cs
@@ -26,7 +26,7 @@ internal partial class VectorTest
}
if (returnVal == false)
{
- Console.WriteLine("CheckValue failed for " + expectedValue + " of type " + typeof(T).ToString());
+ Console.WriteLine("CheckValue failed for type " + typeof(T).ToString() + ". Expected: {0} (0x{0:X}), Got: {1} (0x{1:X})", expectedValue, value);
}
return returnVal;
}
diff --git a/tests/src/JIT/config/benchmark+roslyn/project.json b/tests/src/JIT/config/benchmark+roslyn/project.json
index e50dfd25c1..8c03f09e08 100644
--- a/tests/src/JIT/config/benchmark+roslyn/project.json
+++ b/tests/src/JIT/config/benchmark+roslyn/project.json
@@ -4,23 +4,23 @@
"Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0040",
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
- "System.Console": "4.4.0-beta-24820-02",
- "System.Dynamic.Runtime": "4.4.0-beta-24820-02",
- "System.Linq": "4.4.0-beta-24820-02",
- "System.IO.FileSystem": "4.4.0-beta-24820-02",
- "System.Numerics.Vectors": "4.4.0-beta-24820-02",
- "System.Reflection": "4.4.0-beta-24820-02",
- "System.Reflection.Extensions": "4.4.0-beta-24820-02",
- "System.Reflection.TypeExtensions": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.Extensions": "4.4.0-beta-24820-02",
- "System.Runtime.Numerics": "4.4.0-beta-24820-02",
- "System.Text.RegularExpressions": "4.4.0-beta-24820-02",
- "System.Threading": "4.4.0-beta-24820-02",
- "System.Threading.Tasks": "4.4.0-beta-24820-02",
- "System.Threading.Tasks.Parallel": "4.4.0-beta-24820-02",
- "System.Security.Cryptography.Algorithms": "4.4.0-beta-24820-02",
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
+ "System.Console": "4.4.0-beta-24913-02",
+ "System.Dynamic.Runtime": "4.4.0-beta-24913-02",
+ "System.Linq": "4.4.0-beta-24913-02",
+ "System.IO.FileSystem": "4.4.0-beta-24913-02",
+ "System.Numerics.Vectors": "4.4.0-beta-24913-02",
+ "System.Reflection": "4.4.0-beta-24913-02",
+ "System.Reflection.Extensions": "4.4.0-beta-24913-02",
+ "System.Reflection.TypeExtensions": "4.4.0-beta-24913-02",
+ "System.Runtime": "4.4.0-beta-24913-02",
+ "System.Runtime.Extensions": "4.4.0-beta-24913-02",
+ "System.Runtime.Numerics": "4.4.0-beta-24913-02",
+ "System.Text.RegularExpressions": "4.4.0-beta-24913-02",
+ "System.Threading": "4.4.0-beta-24913-02",
+ "System.Threading.Tasks": "4.4.0-beta-24913-02",
+ "System.Threading.Tasks.Parallel": "4.4.0-beta-24913-02",
+ "System.Security.Cryptography.Algorithms": "4.4.0-beta-24913-02",
"xunit": "2.2.0-beta2-build3300",
"xunit.console.netcore": "1.0.2-prerelease-00177",
"xunit.runner.utility": "2.2.0-beta2-build3300"
diff --git a/tests/src/JIT/config/benchmark+serialize/project.json b/tests/src/JIT/config/benchmark+serialize/project.json
index ac24df1167..7cc415cd3c 100644
--- a/tests/src/JIT/config/benchmark+serialize/project.json
+++ b/tests/src/JIT/config/benchmark+serialize/project.json
@@ -3,24 +3,24 @@
"Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0040",
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
"Newtonsoft.Json": "7.0.1",
- "System.Console": "4.4.0-beta-24820-02",
- "System.IO": "4.4.0-beta-24820-02",
- "System.IO.FileSystem": "4.4.0-beta-24820-02",
- "System.Linq": "4.4.0-beta-24820-02",
- "System.ObjectModel": "4.4.0-beta-24820-02",
- "System.Dynamic.Runtime": "4.4.0-beta-24820-02",
- "System.Reflection": "4.4.0-beta-24820-02",
- "System.Reflection.Extensions": "4.4.0-beta-24820-02",
- "System.Reflection.TypeExtensions": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.Serialization.Json": "4.4.0-beta-24820-02",
- "System.Runtime.Serialization.Primitives": "4.4.0-beta-24820-02",
- "System.Runtime.Serialization.Xml": "4.4.0-beta-24820-02",
- "System.Text.RegularExpressions": "4.4.0-beta-24820-02",
- "System.Xml.XmlDocument": "4.4.0-beta-24820-02",
- "System.Xml.XmlSerializer": "4.4.0-beta-24820-02",
+ "System.Console": "4.4.0-beta-24913-02",
+ "System.IO": "4.4.0-beta-24913-02",
+ "System.IO.FileSystem": "4.4.0-beta-24913-02",
+ "System.Linq": "4.4.0-beta-24913-02",
+ "System.ObjectModel": "4.4.0-beta-24913-02",
+ "System.Dynamic.Runtime": "4.4.0-beta-24913-02",
+ "System.Reflection": "4.4.0-beta-24913-02",
+ "System.Reflection.Extensions": "4.4.0-beta-24913-02",
+ "System.Reflection.TypeExtensions": "4.4.0-beta-24913-02",
+ "System.Runtime": "4.4.0-beta-24913-02",
+ "System.Runtime.Serialization.Json": "4.4.0-beta-24913-02",
+ "System.Runtime.Serialization.Primitives": "4.4.0-beta-24913-02",
+ "System.Runtime.Serialization.Xml": "4.4.0-beta-24913-02",
+ "System.Text.RegularExpressions": "4.4.0-beta-24913-02",
+ "System.Xml.XmlDocument": "4.4.0-beta-24913-02",
+ "System.Xml.XmlSerializer": "4.4.0-beta-24913-02",
"xunit": "2.2.0-beta2-build3300",
"xunit.console.netcore": "1.0.2-prerelease-00177",
"xunit.runner.utility": "2.2.0-beta2-build3300"
diff --git a/tests/src/JIT/config/benchmark/project.json b/tests/src/JIT/config/benchmark/project.json
index 97234d329e..2a989f150f 100644
--- a/tests/src/JIT/config/benchmark/project.json
+++ b/tests/src/JIT/config/benchmark/project.json
@@ -3,27 +3,30 @@
"Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0040",
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
- "System.Collections.NonGeneric": "4.4.0-beta-24820-02",
- "System.Console": "4.4.0-beta-24820-02",
- "System.IO.FileSystem": "4.4.0-beta-24820-02",
- "System.Linq": "4.4.0-beta-24820-02",
- "System.Linq.Expressions": "4.4.0-beta-24820-02",
- "System.Numerics.Vectors": "4.4.0-beta-24820-02",
- "System.Reflection": "4.4.0-beta-24820-02",
- "System.Reflection.Extensions": "4.4.0-beta-24820-02",
- "System.Reflection.TypeExtensions": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.Extensions": "4.4.0-beta-24820-02",
- "System.Runtime.Numerics": "4.4.0-beta-24820-02",
- "System.Text.RegularExpressions": "4.4.0-beta-24820-02",
- "System.Threading": "4.4.0-beta-24820-02",
- "System.Threading.Tasks": "4.4.0-beta-24820-02",
- "System.Threading.Tasks.Parallel": "4.4.0-beta-24820-02",
- "System.Diagnostics.Process": "4.4.0-beta-24820-02",
- "System.Xml.XmlDocument": "4.4.0-beta-24820-02",
- "System.Xml.XPath": "4.4.0-beta-24820-02",
- "System.Xml.XPath.XmlDocument": "4.4.0-beta-24820-02",
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
+ "System.Collections.NonGeneric": "4.4.0-beta-24913-02",
+ "System.Console": "4.4.0-beta-24913-02",
+ "System.IO.FileSystem": "4.4.0-beta-24913-02",
+ "System.Linq": "4.4.0-beta-24913-02",
+ "System.Linq.Parallel": "4.4.0-beta-24913-02",
+ "System.Linq.Expressions": "4.4.0-beta-24913-02",
+ "System.Memory": "4.4.0-beta-24913-02",
+ "System.Numerics.Vectors": "4.4.0-beta-24913-02",
+ "System.Reflection": "4.4.0-beta-24913-02",
+ "System.Reflection.Extensions": "4.4.0-beta-24913-02",
+ "System.Reflection.TypeExtensions": "4.4.0-beta-24913-02",
+ "System.Runtime": "4.4.0-beta-24913-02",
+ "System.Runtime.Extensions": "4.4.0-beta-24913-02",
+ "System.Runtime.Numerics": "4.4.0-beta-24913-02",
+ "System.Text.RegularExpressions": "4.4.0-beta-24913-02",
+ "System.Threading": "4.4.0-beta-24913-02",
+ "System.Threading.Tasks": "4.4.0-beta-24913-02",
+ "System.Threading.Tasks.Parallel": "4.4.0-beta-24913-02",
+ "System.Threading.ThreadPool": "4.4.0-beta-24913-02",
+ "System.Diagnostics.Process": "4.4.0-beta-24913-02",
+ "System.Xml.XmlDocument": "4.4.0-beta-24913-02",
+ "System.Xml.XPath": "4.4.0-beta-24913-02",
+ "System.Xml.XPath.XmlDocument": "4.4.0-beta-24913-02",
"xunit": "2.2.0-beta2-build3300",
"xunit.console.netcore": "1.0.2-prerelease-00177",
"xunit.runner.utility": "2.2.0-beta2-build3300"
diff --git a/tests/src/JIT/config/extra/project.json b/tests/src/JIT/config/extra/project.json
index 6268bc58e9..1e42ca16e6 100644
--- a/tests/src/JIT/config/extra/project.json
+++ b/tests/src/JIT/config/extra/project.json
@@ -1,21 +1,21 @@
{
"dependencies": {
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
- "System.Collections": "4.4.0-beta-24820-02",
- "System.Console": "4.4.0-beta-24820-02",
- "System.Diagnostics.Debug": "4.4.0-beta-24820-02",
- "System.Runtime.InteropServices.RuntimeInformation": "4.4.0-beta-24820-02",
- "System.Diagnostics.Process": "4.4.0-beta-24820-02",
- "System.Globalization": "4.4.0-beta-24820-02",
- "System.IO": "4.4.0-beta-24820-02",
- "System.IO.FileSystem": "4.4.0-beta-24820-02",
- "System.Reflection": "4.4.0-beta-24820-02",
- "System.Reflection.Extensions": "4.4.0-beta-24820-02",
- "System.Reflection.TypeExtensions": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.Extensions": "4.4.0-beta-24820-02",
- "System.Runtime.CompilerServices.Unsafe": "4.4.0-beta-24820-02",
- "System.Runtime.InteropServices": "4.4.0-beta-24820-02"
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
+ "System.Collections": "4.4.0-beta-24913-02",
+ "System.Console": "4.4.0-beta-24913-02",
+ "System.Diagnostics.Debug": "4.4.0-beta-24913-02",
+ "System.Runtime.InteropServices.RuntimeInformation": "4.4.0-beta-24913-02",
+ "System.Diagnostics.Process": "4.4.0-beta-24913-02",
+ "System.Globalization": "4.4.0-beta-24913-02",
+ "System.IO": "4.4.0-beta-24913-02",
+ "System.IO.FileSystem": "4.4.0-beta-24913-02",
+ "System.Reflection": "4.4.0-beta-24913-02",
+ "System.Reflection.Extensions": "4.4.0-beta-24913-02",
+ "System.Reflection.TypeExtensions": "4.4.0-beta-24913-02",
+ "System.Runtime": "4.4.0-beta-24913-02",
+ "System.Runtime.Extensions": "4.4.0-beta-24913-02",
+ "System.Runtime.CompilerServices.Unsafe": "4.4.0-beta-24913-02",
+ "System.Runtime.InteropServices": "4.4.0-beta-24913-02"
},
"frameworks": {
"netcoreapp1.1": {}
@@ -24,9 +24,13 @@
"win7-x86": {},
"win7-x64": {},
"ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "ubuntu.16.10-x64": {},
"osx.10.10-x64": {},
"centos.7-x64": {},
"rhel.7-x64": {},
- "debian.8-x64": {}
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
}
}
diff --git a/tests/src/JIT/config/minimal/project.json b/tests/src/JIT/config/minimal/project.json
index 6bc378e4a4..1cca77c604 100644
--- a/tests/src/JIT/config/minimal/project.json
+++ b/tests/src/JIT/config/minimal/project.json
@@ -1,10 +1,10 @@
{
"dependencies": {
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
- "System.Console": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.Extensions": "4.4.0-beta-24820-02",
- "System.Runtime.InteropServices": "4.4.0-beta-24820-02"
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
+ "System.Console": "4.4.0-beta-24913-02",
+ "System.Runtime": "4.4.0-beta-24913-02",
+ "System.Runtime.Extensions": "4.4.0-beta-24913-02",
+ "System.Runtime.InteropServices": "4.4.0-beta-24913-02"
},
"frameworks": {
"netcoreapp1.1": {}
@@ -13,9 +13,13 @@
"win7-x86": {},
"win7-x64": {},
"ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "ubuntu.16.10-x64": {},
"osx.10.10-x64": {},
"centos.7-x64": {},
"rhel.7-x64": {},
- "debian.8-x64": {}
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
}
}
diff --git a/tests/src/JIT/config/threading+thread/project.json b/tests/src/JIT/config/threading+thread/project.json
index f6576f154d..6a6fe49373 100644
--- a/tests/src/JIT/config/threading+thread/project.json
+++ b/tests/src/JIT/config/threading+thread/project.json
@@ -1,12 +1,12 @@
{
"dependencies": {
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
- "System.Console": "4.4.0-beta-24820-02",
- "System.Numerics.Vectors": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.Extensions": "4.4.0-beta-24820-02",
- "System.Threading": "4.4.0-beta-24820-02",
- "System.Threading.Thread": "4.4.0-beta-24820-02"
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
+ "System.Console": "4.4.0-beta-24913-02",
+ "System.Numerics.Vectors": "4.4.0-beta-24913-02",
+ "System.Runtime": "4.4.0-beta-24913-02",
+ "System.Runtime.Extensions": "4.4.0-beta-24913-02",
+ "System.Threading": "4.4.0-beta-24913-02",
+ "System.Threading.Thread": "4.4.0-beta-24913-02"
},
"frameworks": {
"netcoreapp1.1": {}
@@ -15,9 +15,13 @@
"win7-x86": {},
"win7-x64": {},
"ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "ubuntu.16.10-x64": {},
"osx.10.10-x64": {},
"centos.7-x64": {},
"rhel.7-x64": {},
- "debian.8-x64": {}
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
}
}
diff --git a/tests/src/JIT/config/threading/project.json b/tests/src/JIT/config/threading/project.json
index e62d3551a4..68b783a0f2 100644
--- a/tests/src/JIT/config/threading/project.json
+++ b/tests/src/JIT/config/threading/project.json
@@ -1,10 +1,10 @@
{
"dependencies": {
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
- "System.Console": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.Extensions": "4.4.0-beta-24820-02",
- "System.Threading": "4.4.0-beta-24820-02"
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
+ "System.Console": "4.4.0-beta-24913-02",
+ "System.Runtime": "4.4.0-beta-24913-02",
+ "System.Runtime.Extensions": "4.4.0-beta-24913-02",
+ "System.Threading": "4.4.0-beta-24913-02"
},
"frameworks": {
"netcoreapp1.1": {}
@@ -13,9 +13,13 @@
"win7-x86": {},
"win7-x64": {},
"ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "ubuntu.16.10-x64": {},
"osx.10.10-x64": {},
"centos.7-x64": {},
"rhel.7-x64": {},
- "debian.8-x64": {}
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
}
}
diff --git a/tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_d.csproj b/tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_d.csproj
index f8e5018874..06714e326b 100644
--- a/tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_d.csproj
+++ b/tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_d.csproj
@@ -14,6 +14,10 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+
+ <!-- NOTE: this test simply takes too long to complete under heap verify. It is not fundamentally incompatible. -->
+ <GCStressIncompatible Condition="'$(Platform)' == 'x86'">true</GCStressIncompatible>
+ <HeapVerifyIncompatible Condition="'$(Platform)' == 'x86'">true</HeapVerifyIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -42,4 +46,4 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_r.csproj b/tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_r.csproj
index 3e1fcf875b..fc845ce81a 100644
--- a/tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_r.csproj
+++ b/tests/src/JIT/jit64/opt/cg/cgstress/CgStress1_r.csproj
@@ -14,6 +14,10 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+
+ <!-- NOTE: this test simply takes too long to complete under heap verify. It is not fundamentally incompatible. -->
+ <GCStressIncompatible Condition="'$(Platform)' == 'x86'">true</GCStressIncompatible>
+ <HeapVerifyIncompatible Condition="'$(Platform)' == 'x86'">true</HeapVerifyIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -42,4 +46,4 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/jit64/opt/cse/hugeexpr1.csproj b/tests/src/JIT/jit64/opt/cse/hugeexpr1.csproj
index 0886950127..3ad363fd07 100644
--- a/tests/src/JIT/jit64/opt/cse/hugeexpr1.csproj
+++ b/tests/src/JIT/jit64/opt/cse/hugeexpr1.csproj
@@ -29,6 +29,8 @@
<PropertyGroup>
<DebugType>Full</DebugType>
<Optimize>True</Optimize>
+ <!-- This test is very resource heavy and doesn't play well with some JitStress modes, especially when memory is limited -->
+ <JitOptimizationSensitive Condition="'$(Platform)' == 'x86'">true</JitOptimizationSensitive>
</PropertyGroup>
<ItemGroup>
<Compile Include="hugeexpr1.cs" />
@@ -43,4 +45,4 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/jit64/regress/vsw/539509/test1.cs b/tests/src/JIT/jit64/regress/vsw/539509/test1.cs
index 83a29aa3cc..1a4b95237c 100644
--- a/tests/src/JIT/jit64/regress/vsw/539509/test1.cs
+++ b/tests/src/JIT/jit64/regress/vsw/539509/test1.cs
@@ -162,7 +162,7 @@ public class AA<TA, TB, TC, TD, TE, TF>
do
{
bool[,,,,][,] local8 = (new bool[81u, 98u, ((uint)(58.0f)), ((uint)(36.0f)),
- 74u][,]);
+ 74u*4u][,]);
while ((((uint)(local5)) != 4u))
{
if (Convert.ToBoolean((local5 + local5)))
diff --git a/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_d.csproj b/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_d.csproj
index 4a5818f410..7793674360 100644
--- a/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_d.csproj
+++ b/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_d.csproj
@@ -15,8 +15,9 @@
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <!-- NOTE: this test simply takes too long to complete under GC stress; it is not fundamentally incompatible -->
+ <!-- NOTE: this test simply takes too long to complete under GC stress/heap verify; it is not fundamentally incompatible -->
<GCStressIncompatible Condition="'$(Platform)' == 'x86'">true</GCStressIncompatible>
+ <HeapVerifyIncompatible>true</HeapVerifyIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
diff --git a/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_r.csproj b/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_r.csproj
index 909d79887a..6a6732961b 100644
--- a/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_r.csproj
+++ b/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_r.csproj
@@ -15,8 +15,9 @@
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <!-- NOTE: this test simply takes too long to complete under GC stress; it is not fundamentally incompatible -->
+ <!-- NOTE: this test simply takes too long to complete under GC stress/heap verify; it is not fundamentally incompatible -->
<GCStressIncompatible Condition="'$(Platform)' == 'x86'">true</GCStressIncompatible>
+ <HeapVerifyIncompatible>true</HeapVerifyIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
diff --git a/tests/src/TestWrappersConfig/project.json b/tests/src/TestWrappersConfig/project.json
index f255e3044f..2f706066dd 100644
--- a/tests/src/TestWrappersConfig/project.json
+++ b/tests/src/TestWrappersConfig/project.json
@@ -1,5 +1,6 @@
{
"dependencies": {
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
"xunit": "2.2.0-beta2-build3300",
"xunit.assert": "2.2.0-beta2-build3300",
"xunit.core": "2.2.0-beta2-build3300",
@@ -8,7 +9,7 @@
"frameworks": {
"netcoreapp1.1": {
"imports": [
- "dnxcore50",
+ "dnxcore50",
"portable-net45+win8"
]
},
@@ -20,9 +21,13 @@
"win7-x86": {},
"win7-x64": {},
"ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "ubuntu.16.10-x64": {},
"osx.10.10-x64": {},
"centos.7-x64": {},
"rhel.7-x64": {},
- "debian.8-x64": {}
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
}
}
diff --git a/tests/src/dir.common.props b/tests/src/dir.common.props
index d5de5794d0..5a7ee2e83a 100644
--- a/tests/src/dir.common.props
+++ b/tests/src/dir.common.props
@@ -45,7 +45,7 @@
<__NativeTestIntermediatesDir Condition="'$(__NativeTestIntermediatesDir)' == ''">$([System.IO.Path]::GetFullPath($(BaseOutputPathWithConfig)..\obj\$(BuildOS).$(Platform).$(Configuration)\Native\))</__NativeTestIntermediatesDir>
<BuildProjectRelativeDir>$(MSBuildProjectName)\</BuildProjectRelativeDir>
<BuildProjectRelativeDir Condition="'$(MSBuildProjectDirectory.Contains($(SourceDir)))'">$([System.String]::Copy('$(MSBuildProjectDirectory)').Replace($(SourceDir),''))\$(MSBuildProjectName)</BuildProjectRelativeDir>
- <IntermediateOutputPath>$(BaseIntermediateOutputPath)$(BuildProjectRelativeDir)</IntermediateOutputPath>
+ <IntermediateOutputPath>$(BaseIntermediateOutputPath)$(BuildProjectRelativeDir)\</IntermediateOutputPath>
<OutputPath>$(BaseOutputPathWithConfig)$(BuildProjectRelativeDir)\</OutputPath>
<TestWorkingDir Condition="'$(TestWorkingDir)'==''">$(BaseOutputPath)\testStagingDir\</TestWorkingDir>
<TestPath Condition="'$(TestPath)'==''">$(TestWorkingDir)$(OSPlatformConfig)\$(MSBuildProjectName)/</TestPath>
diff --git a/tests/src/dir.props b/tests/src/dir.props
index e8cdfd4036..2fb2e1942b 100644
--- a/tests/src/dir.props
+++ b/tests/src/dir.props
@@ -34,7 +34,6 @@
<PropertyGroup>
<TargetsWindows>true</TargetsWindows>
<TestNugetRuntimeId>win7-x64</TestNugetRuntimeId>
- <DefaultTestTFM>net45</DefaultTestTFM>
</PropertyGroup>
</When>
<When Condition="'$(OSGroup)'=='Linux'">
@@ -67,14 +66,8 @@
<PropertyGroup>
<TargetsUnknownUnix Condition="'$(TargetsUnix)' == 'true' AND '$(OSGroup)' != 'FreeBSD' AND '$(OSGroup)' != 'Linux' AND '$(OSGroup)' != 'OSX'">true</TargetsUnknownUnix>
- </PropertyGroup>
-
- <!-- Default Test platform to deploy the netstandard compiled tests to -->
- <PropertyGroup>
- <!-- we default TestTFM and FilterToTestTFM to netcoreapp1.0 if they are not explicity defined -->
- <DefaultTestTFM Condition="'$(DefaultTestTFM)'==''">netcoreapp1.0</DefaultTestTFM>
- <TestTFM Condition="'$(TestTFM)'==''">$(DefaultTestTFM)</TestTFM>
- <FilterToTestTFM Condition="'$(FilterToTestTFM)'==''">$(DefaultTestTFM)</FilterToTestTFM>
+ <Language Condition="'$(Language)' == '' and '$(MSBuildProjectExtension)' == '.csproj'">C#</Language>
+ <Language Condition="'$(Language)' == '' and '$(MSBuildProjectExtension)' == '.ilproj'">IL</Language>
</PropertyGroup>
<!-- Set default ZapRequire level (used only when CrossGen is enabled) -->
diff --git a/tests/src/dirs.proj b/tests/src/dirs.proj
index 99a50a4f6c..5314c27cfa 100644
--- a/tests/src/dirs.proj
+++ b/tests/src/dirs.proj
@@ -16,10 +16,14 @@
<ItemGroup>
<DisabledProjects Include="TestWrappers*\*\*.csproj" />
<DisabledProjects Include="*\**\cs_template.csproj" />
- <DisabledProjects Include="Common\Coreclr.TestWrapper\Coreclr.TestWrapper.csproj" />
+ <DisabledProjects Include="Common\Coreclr.TestWrapper\Coreclr.TestWrapper.csproj" Condition="'$(BuildTestsAgainstPackages)' != 'true'" />
+ <DisabledProjects Include="Common\Desktop.Coreclr.TestWrapper\Desktop.Coreclr.TestWrapper.csproj" Condition="'$(BuildTestsAgainstPackages)' == 'true'" />
<DisabledProjects Include="Common\test_runtime\test_runtime.csproj" />
<DisabledProjects Include="Common\test_dependencies\test_dependencies.csproj" />
+ <DisabledProjects Include="Common\build_against_pkg_dependencies\build_against_pkg_dependencies.csproj" />
+ <DisabledProjects Include="Common\targeting_pack_ref\targeting_pack_ref.csproj" />
<DisabledProjects Include="GC\Performance\Framework\GCPerfTestFramework.csproj" />
+ <DisabledProjects Include="JIT\superpmi\superpmicollect.csproj" Condition="'$(BuildTestsAgainstPackages)' == 'true'" />
<DisabledProjects Include="Loader\classloader\generics\regressions\DD117522\Test.csproj" />
<DisabledProjects Include="Loader\classloader\generics\GenericMethods\VSW491668.csproj" /> <!-- issue 5501 -->
</ItemGroup>
diff --git a/tests/src/jit/Performance/CodeQuality/Span/SpanBench.cs b/tests/src/jit/Performance/CodeQuality/Span/SpanBench.cs
new file mode 100644
index 0000000000..7ec2a4a088
--- /dev/null
+++ b/tests/src/jit/Performance/CodeQuality/Span/SpanBench.cs
@@ -0,0 +1,468 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using Microsoft.Xunit.Performance;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
+[assembly: MeasureInstructionsRetired]
+
+class Tests
+{
+
+#if DEBUG
+ const int Iterations = 1;
+#else
+ const int Iterations = 10000;
+#endif
+
+ const int Size = 1024;
+
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static void TestFillAllSpan(Span<byte> span)
+ {
+ for (int i = 0; i < span.Length; ++i) {
+ span[i] = unchecked((byte)i);
+ }
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static void TestFillAllArray(byte[] data)
+ {
+ for (int i = 0; i < data.Length; ++i) {
+ data[i] = unchecked((byte)i);
+ }
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static void TestFillAllReverseSpan(Span<byte> span)
+ {
+ for (int i = span.Length; --i >= 0;) {
+ span[i] = unchecked((byte)i);
+ }
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static void TestFillAllReverseArray(byte[] data)
+ {
+ for (int i = data.Length; --i >= 0;) {
+ data[i] = unchecked((byte)i);
+ }
+ }
+
+ static int[] GetUnsortedData()
+ {
+ int[] unsortedData = new int[Size];
+ Random r = new Random(42);
+ for (int i = 0; i < unsortedData.Length; ++i)
+ {
+ unsortedData[i] = r.Next();
+ }
+ return unsortedData;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static void TestBubbleSortSpan(Span<int> span)
+ {
+ bool swap;
+ int temp;
+ int n = span.Length - 1;
+ do {
+ swap = false;
+ for (int i = 0; i < n; i++) {
+ if (span[i] > span[i + 1]) {
+ temp = span[i];
+ span[i] = span[i + 1];
+ span[i + 1] = temp;
+ swap = true;
+ }
+ }
+ --n;
+ }
+ while (swap);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static void TestBubbleSortArray(int[] data)
+ {
+ bool swap;
+ int temp;
+ int n = data.Length - 1;
+ do {
+ swap = false;
+ for (int i = 0; i < n; i++) {
+ if (data[i] > data[i + 1]) {
+ temp = data[i];
+ data[i] = data[i + 1];
+ data[i + 1] = temp;
+ swap = true;
+ }
+ }
+ --n;
+ }
+ while (swap);
+ }
+
+ static void TestQuickSortSpan(Span<int> data)
+ {
+ QuickSortSpan(data);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static void QuickSortSpan(Span<int> data)
+ {
+ if (data.Length <= 1) {
+ return;
+ }
+
+ int lo = 0;
+ int hi = data.Length - 1;
+ int i, j;
+ int pivot, temp;
+ for (i = lo, j = hi, pivot = data[hi]; i < j;) {
+ while (i < j && data[i] <= pivot) {
+ ++i;
+ }
+ while (j > i && data[j] >= pivot) {
+ --j;
+ }
+ if (i < j) {
+ temp = data[i];
+ data[i] = data[j];
+ data[j] = temp;
+ }
+ }
+ if (i != hi) {
+ temp = data[i];
+ data[i] = pivot;
+ data[hi] = temp;
+ }
+
+ QuickSortSpan(data.Slice(0, i));
+ QuickSortSpan(data.Slice(i + 1));
+ }
+
+ static void TestQuickSortArray(int[] data)
+ {
+ QuickSortArray(data, 0, data.Length - 1);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static void QuickSortArray(int[] data, int lo, int hi)
+ {
+ if (lo >= hi) {
+ return;
+ }
+
+ int i, j;
+ int pivot, temp;
+ for (i = lo, j = hi, pivot = data[hi]; i < j;) {
+ while (i < j && data[i] <= pivot) {
+ ++i;
+ }
+ while (j > i && data[j] >= pivot) {
+ --j;
+ }
+ if (i < j) {
+ temp = data[i];
+ data[i] = data[j];
+ data[j] = temp;
+ }
+ }
+ if (i != hi) {
+ temp = data[i];
+ data[i] = pivot;
+ data[hi] = temp;
+ }
+
+ QuickSortArray(data, lo, i - 1);
+ QuickSortArray(data, i + 1, hi);
+ }
+
+ // XUNIT-PERF tests
+
+ [Benchmark]
+ public static void FillAllSpan()
+ {
+ byte[] a = new byte[Size];
+ Span<byte> s = new Span<byte>(a);
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ TestFillAllSpan(s);
+ }
+ }
+ }
+ }
+
+ [Benchmark]
+ public static void FillAllArray()
+ {
+ byte[] a = new byte[Size];
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ TestFillAllArray(a);
+ }
+ }
+ }
+ }
+
+ [Benchmark]
+ public static void FillAllReverseSpan()
+ {
+ byte[] a = new byte[Size];
+ Span<byte> s = new Span<byte>(a);
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ TestFillAllReverseSpan(s);
+ }
+ }
+ }
+ }
+
+ [Benchmark]
+ public static void FillAllReverseArray()
+ {
+ byte[] a = new byte[Size];
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ TestFillAllReverseArray(a);
+ }
+ }
+ }
+ }
+
+ [Benchmark]
+ public static void QuickSortSpan()
+ {
+ int[] data = new int[Size];
+ int[] unsortedData = GetUnsortedData();
+ Span<int> span = new Span<int>(data);
+
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ Array.Copy(unsortedData, data, Size);
+ TestQuickSortSpan(span);
+ }
+ }
+ }
+ }
+
+ [Benchmark]
+ public static void BubbleSortSpan()
+ {
+ int[] data = new int[Size];
+ int[] unsortedData = GetUnsortedData();
+ Span<int> span = new Span<int>(data);
+
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ Array.Copy(unsortedData, data, Size);
+ TestBubbleSortSpan(span);
+ }
+ }
+ }
+ }
+
+ [Benchmark]
+ public static void QuickSortArray()
+ {
+ int[] data = new int[Size];
+ int[] unsortedData = GetUnsortedData();
+
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ Array.Copy(unsortedData, data, Size);
+ TestQuickSortArray(data);
+ }
+ }
+ }
+ }
+
+ [Benchmark]
+ public static void BubbleSortArray()
+ {
+ int[] data = new int[Size];
+ int[] unsortedData = GetUnsortedData();
+
+ foreach (var iteration in Benchmark.Iterations)
+ {
+ using (iteration.StartMeasurement())
+ {
+ for (int i = 0; i < Iterations; i++)
+ {
+ Array.Copy(unsortedData, data, Size);
+ TestBubbleSortArray(data);
+ }
+ }
+ }
+ }
+
+ // EXE-based testing
+
+ static void FillAllSpanBase()
+ {
+ byte[] a = new byte[Size];
+ Span<byte> s = new Span<byte>(a);
+ for (int i = 0; i < Iterations; i++)
+ {
+ TestFillAllSpan(s);
+ }
+ }
+
+ static void FillAllArrayBase()
+ {
+ byte[] a = new byte[Size];
+ for (int i = 0; i < Iterations; i++)
+ {
+ TestFillAllArray(a);
+ }
+ }
+
+ static void FillAllReverseSpanBase()
+ {
+ byte[] a = new byte[Size];
+ Span<byte> s = new Span<byte>(a);
+ for (int i = 0; i < Iterations; i++)
+ {
+ TestFillAllReverseSpan(s);
+ }
+ }
+
+ static void FillAllReverseArrayBase()
+ {
+ byte[] a = new byte[Size];
+ for (int i = 0; i < Iterations; i++)
+ {
+ TestFillAllReverseArray(a);
+ }
+ }
+
+ static void QuickSortSpanBase()
+ {
+ int[] data = new int[Size];
+ int[] unsortedData = GetUnsortedData();
+ Span<int> span = new Span<int>(data);
+
+ for (int i = 0; i < Iterations; i++)
+ {
+ Array.Copy(unsortedData, data, Size);
+ TestQuickSortSpan(span);
+ }
+ }
+
+ static void BubbleSortSpanBase()
+ {
+ int[] data = new int[Size];
+ int[] unsortedData = GetUnsortedData();
+ Span<int> span = new Span<int>(data);
+
+ for (int i = 0; i < Iterations; i++)
+ {
+ Array.Copy(unsortedData, data, Size);
+ TestBubbleSortSpan(span);
+ }
+ }
+
+ static void QuickSortArrayBase()
+ {
+ int[] data = new int[Size];
+ int[] unsortedData = GetUnsortedData();
+
+ for (int i = 0; i < Iterations; i++)
+ {
+ Array.Copy(unsortedData, data, Size);
+ TestQuickSortArray(data);
+ }
+ }
+
+ static void BubbleSortArrayBase()
+ {
+ int[] data = new int[Size];
+ int[] unsortedData = GetUnsortedData();
+
+ for (int i = 0; i < Iterations; i++)
+ {
+ Array.Copy(unsortedData, data, Size);
+ TestBubbleSortArray(data);
+ }
+ }
+
+ static double Bench(Action f)
+ {
+ Stopwatch sw = Stopwatch.StartNew();
+ f();
+ sw.Stop();
+ return sw.Elapsed.TotalMilliseconds;
+ }
+
+ static IEnumerable<object[]> MakeArgs(params string[] args)
+ {
+ return args.Select(arg => new object[] { arg });
+ }
+
+ static IEnumerable<object[]> TestFuncs = MakeArgs(
+ "FillAllSpanBase", "FillAllArrayBase",
+ "FillAllReverseSpanBase", "FillAllReverseArrayBase",
+ "BubbleSortSpanBase", "BubbleSortArrayBase",
+ "QuickSortSpanBase", "QuickSortArrayBase"
+ );
+
+ static Action LookupFunc(object o)
+ {
+ TypeInfo t = typeof(Tests).GetTypeInfo();
+ MethodInfo m = t.GetDeclaredMethod((string) o);
+ return m.CreateDelegate(typeof(Action)) as Action;
+ }
+
+ public static int Main(string[] args)
+ {
+ bool result = true;
+
+ foreach(object[] o in TestFuncs)
+ {
+ string funcName = (string) o[0];
+ Action func = LookupFunc(funcName);
+ double timeInMs = Bench(func);
+ Console.WriteLine("{0}: {1}ms", funcName, timeInMs);
+ }
+
+ return (result ? 100 : -1);
+ }
+}
+
diff --git a/tests/src/CoreMangLib/system/datetime/Co7510ParseExact_formatarray.csproj b/tests/src/jit/Performance/CodeQuality/Span/SpanBench.csproj
index 6475443219..e932acf2a2 100644
--- a/tests/src/CoreMangLib/system/datetime/Co7510ParseExact_formatarray.csproj
+++ b/tests/src/jit/Performance/CodeQuality/Span/SpanBench.csproj
@@ -13,32 +13,33 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
- <CLRTestKind>BuildAndRun</CLRTestKind>
- <CLRTestPriority>1</CLRTestPriority>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
<ItemGroup>
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
<ItemGroup>
- <!-- Add Compile Object Here -->
- <Compile Include="co7510parseexact_formatarray.cs" />
- </ItemGroup>
- <ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="../../../Common/CoreCLRTestLibrary/CoreCLRTestLibrary.csproj" />
+ <Compile Include="SpanBench.cs" />
</ItemGroup>
+ <PropertyGroup>
+ <ProjectJson>$(JitPackagesConfigFileDirectory)benchmark\project.json</ProjectJson>
+ <ProjectLockJson>$(JitPackagesConfigFileDirectory)benchmark\project.lock.json</ProjectLockJson>
+ </PropertyGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/managed/Compilation/HelloWorld.cs b/tests/src/managed/Compilation/HelloWorld.cs
index 67e0148005..bbf92a3117 100644
--- a/tests/src/managed/Compilation/HelloWorld.cs
+++ b/tests/src/managed/Compilation/HelloWorld.cs
@@ -8,7 +8,7 @@ class C
{
static int Main()
{
- Console.WriteLine("Hello " + "world");
+ LowLevelConsole.WriteLine("Hello " + "world");
return 100;
}
}
diff --git a/tests/src/performance/project.json b/tests/src/performance/project.json
index 97234d329e..e1af7fc15f 100644
--- a/tests/src/performance/project.json
+++ b/tests/src/performance/project.json
@@ -3,27 +3,27 @@
"Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0040",
"Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0040",
- "Microsoft.NETCore.Platforms": "1.2.0-beta-24820-02",
- "System.Collections.NonGeneric": "4.4.0-beta-24820-02",
- "System.Console": "4.4.0-beta-24820-02",
- "System.IO.FileSystem": "4.4.0-beta-24820-02",
- "System.Linq": "4.4.0-beta-24820-02",
- "System.Linq.Expressions": "4.4.0-beta-24820-02",
- "System.Numerics.Vectors": "4.4.0-beta-24820-02",
- "System.Reflection": "4.4.0-beta-24820-02",
- "System.Reflection.Extensions": "4.4.0-beta-24820-02",
- "System.Reflection.TypeExtensions": "4.4.0-beta-24820-02",
- "System.Runtime": "4.4.0-beta-24820-02",
- "System.Runtime.Extensions": "4.4.0-beta-24820-02",
- "System.Runtime.Numerics": "4.4.0-beta-24820-02",
- "System.Text.RegularExpressions": "4.4.0-beta-24820-02",
- "System.Threading": "4.4.0-beta-24820-02",
- "System.Threading.Tasks": "4.4.0-beta-24820-02",
- "System.Threading.Tasks.Parallel": "4.4.0-beta-24820-02",
- "System.Diagnostics.Process": "4.4.0-beta-24820-02",
- "System.Xml.XmlDocument": "4.4.0-beta-24820-02",
- "System.Xml.XPath": "4.4.0-beta-24820-02",
- "System.Xml.XPath.XmlDocument": "4.4.0-beta-24820-02",
+ "Microsoft.NETCore.Platforms": "2.0.0-beta-25007-01",
+ "System.Collections.NonGeneric": "4.4.0-beta-24913-02",
+ "System.Console": "4.4.0-beta-24913-02",
+ "System.IO.FileSystem": "4.4.0-beta-24913-02",
+ "System.Linq": "4.4.0-beta-24913-02",
+ "System.Linq.Expressions": "4.4.0-beta-24913-02",
+ "System.Numerics.Vectors": "4.4.0-beta-24913-02",
+ "System.Reflection": "4.4.0-beta-24913-02",
+ "System.Reflection.Extensions": "4.4.0-beta-24913-02",
+ "System.Reflection.TypeExtensions": "4.4.0-beta-24913-02",
+ "System.Runtime": "4.4.0-beta-24913-02",
+ "System.Runtime.Extensions": "4.4.0-beta-24913-02",
+ "System.Runtime.Numerics": "4.4.0-beta-24913-02",
+ "System.Text.RegularExpressions": "4.4.0-beta-24913-02",
+ "System.Threading": "4.4.0-beta-24913-02",
+ "System.Threading.Tasks": "4.4.0-beta-24913-02",
+ "System.Threading.Tasks.Parallel": "4.4.0-beta-24913-02",
+ "System.Diagnostics.Process": "4.4.0-beta-24913-02",
+ "System.Xml.XmlDocument": "4.4.0-beta-24913-02",
+ "System.Xml.XPath": "4.4.0-beta-24913-02",
+ "System.Xml.XPath.XmlDocument": "4.4.0-beta-24913-02",
"xunit": "2.2.0-beta2-build3300",
"xunit.console.netcore": "1.0.2-prerelease-00177",
"xunit.runner.utility": "2.2.0-beta2-build3300"
diff --git a/tests/src/readytorun/main.cs b/tests/src/readytorun/main.cs
index bbdd101759..783c1fd3cb 100644
--- a/tests/src/readytorun/main.cs
+++ b/tests/src/readytorun/main.cs
@@ -99,6 +99,11 @@ class Program
{
((Object)s).ToString();
}
+
+ // Enum.GetHashCode optimization requires special treatment
+ // in native signature encoding
+ MyEnum e = MyEnum.Apple;
+ e.GetHashCode();
}
static void TestConstrainedMethodCalls_Unsupported()
diff --git a/tests/src/readytorun/test.cs b/tests/src/readytorun/test.cs
index 40199b41e8..8a6beaea15 100644
--- a/tests/src/readytorun/test.cs
+++ b/tests/src/readytorun/test.cs
@@ -403,3 +403,10 @@ public class ByteChildClass : ByteBaseClass
ChildByte = 67;
}
}
+
+public enum MyEnum
+{
+ Apple = 1,
+ Banana = 2,
+ Orange = 3
+}
diff --git a/tests/testsFailingOutsideWindows.txt b/tests/testsFailingOutsideWindows.txt
index 2d0d497e4e..901172b394 100644
--- a/tests/testsFailingOutsideWindows.txt
+++ b/tests/testsFailingOutsideWindows.txt
@@ -71,6 +71,7 @@ GC/Features/LOHFragmentation/lohfragmentation/lohfragmentation.sh
GC/Features/SustainedLowLatency/scenario/scenario.sh
GC/Regressions/dev10bugs/536168/536168/536168.sh
GC/Stress/Framework/ReliabilityFramework/ReliabilityFramework.sh
+GC/Scenarios/DoublinkList/doublinkgen/doublinkgen.sh
Loader/classloader/TypeGeneratorTests/TypeGeneratorTest612/Generated612/Generated612.sh
Loader/classloader/TypeGeneratorTests/TypeGeneratorTest613/Generated613/Generated613.sh
Loader/classloader/TypeGeneratorTests/TypeGeneratorTest614/Generated614/Generated614.sh
@@ -78,3 +79,4 @@ Loader/classloader/TypeGeneratorTests/TypeGeneratorTest681/Generated681/Generate
Loader/classloader/TypeGeneratorTests/TypeGeneratorTest682/Generated682/Generated682.sh
Loader/classloader/TypeGeneratorTests/TypeGeneratorTest683/Generated683/Generated683.sh
JIT/opt/perf/doublealign/Locals/Locals.sh
+JIT/Regression/JitBlue/DevDiv_377155/DevDiv_377155/DevDiv_377155.sh
diff --git a/tests/testsUnsupportedOnARM32.txt b/tests/testsUnsupportedOnARM32.txt
index 12b685527f..e827550d46 100644
--- a/tests/testsUnsupportedOnARM32.txt
+++ b/tests/testsUnsupportedOnARM32.txt
@@ -7,6 +7,5 @@ JIT/Methodical/xxobj/sizeof/_il_dbgsizeof64/_il_dbgsizeof64.sh
JIT/Methodical/xxobj/sizeof/_il_relsizeof/_il_relsizeof.sh
JIT/Methodical/xxobj/sizeof/_il_relsizeof32/_il_relsizeof32.sh
JIT/Methodical/xxobj/sizeof/_il_relsizeof64/_il_relsizeof64.sh
-JIT/Regression/JitBlue/DevDiv_283795/DevDiv_283795/DevDiv_283795.sh
JIT/Regression/JitBlue/devdiv_902271/DevDiv_902271/DevDiv_902271.sh
JIT/jit64/opt/cse/HugeArray1/HugeArray1.sh
diff --git a/tests/x86_jit32_issues.targets b/tests/x86_jit32_issues.targets
index 314d918ac0..04960ea6bf 100644
--- a/tests/x86_jit32_issues.targets
+++ b/tests/x86_jit32_issues.targets
@@ -518,8 +518,5 @@
<ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\JitBlue\DevDiv_255294\DevDiv_255294\DevDiv_255294.cmd">
<Issue>times out</Issue>
</ExcludeList>
- <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\JitBlue\DevDiv_283795\DevDiv_283795\DevDiv_283795.cmd">
- <Issue>8077</Issue>
- </ExcludeList>
</ItemGroup>
</Project>
diff --git a/tests/x86_legacy_backend_issues.targets b/tests/x86_legacy_backend_issues.targets
index 4b97325db0..0c294ef7ec 100644
--- a/tests/x86_legacy_backend_issues.targets
+++ b/tests/x86_legacy_backend_issues.targets
@@ -442,8 +442,5 @@
<ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\CLR-x86-JIT\V2.0-Beta2\b409748\b409748\b409748.cmd">
<Issue>needs triage</Issue>
</ExcludeList>
- <ExcludeList Include="$(XunitTestBinBase)\JIT\Regression\JitBlue\DevDiv_283795\DevDiv_283795\DevDiv_283795.cmd">
- <Issue>8077</Issue>
- </ExcludeList>
</ItemGroup>
</Project>